blob: a2b8c36326c5252480eaec9038e49a930d5561b7 [file] [log] [blame]
Andrew Jeffery4fe996c2018-02-27 12:16:48 +10301/* SPDX-License-Identifier: Apache-2.0 */
2/* Copyright (C) 2018 IBM Corp. */
Deepak Kodihallib6a446f2017-04-29 13:01:49 -05003#pragma once
4
5#ifdef VIRTUAL_PNOR_ENABLED
6
Ratan Gupta8441a392017-05-05 21:42:53 +05307#include <limits.h>
Deepak Kodihallib6a446f2017-04-29 13:01:49 -05008#include "pnor_partition_defs.h"
9
10struct mbox_context;
11struct vpnor_partition_table;
12
Ratan Gupta8441a392017-05-05 21:42:53 +053013struct vpnor_partition_paths
14{
15 char ro_loc[PATH_MAX];
Ratan Guptac0ef9872017-06-06 14:31:37 +053016 char rw_loc[PATH_MAX];
17 char prsv_loc[PATH_MAX];
Adriana Kobylakc71dfd72017-07-22 11:10:43 -050018 char patch_loc[PATH_MAX];
Ratan Gupta8441a392017-05-05 21:42:53 +053019};
20
Deepak Kodihallib6a446f2017-04-29 13:01:49 -050021#ifdef __cplusplus
22extern "C" {
23#endif
24
25/** @brief Create a virtual PNOR partition table.
26 *
27 * @param[in] context - mbox context pointer
28 *
29 * This API should be called before calling any other APIs below. If a table
30 * already exists, this function will not do anything further. This function
31 * will not do anything if the context is NULL.
Andrew Jefferyf96bd162018-02-26 13:05:00 +103032 *
33 * Returns 0 if the call succeeds, else a negative error code.
Deepak Kodihallib6a446f2017-04-29 13:01:49 -050034 */
Andrew Jefferyf96bd162018-02-26 13:05:00 +103035int init_vpnor(struct mbox_context *context);
Deepak Kodihallib6a446f2017-04-29 13:01:49 -050036
Ratan Gupta3214b512017-05-11 08:58:19 +053037/** @brief Create a virtual PNOR partition table.
38 *
39 * @param[in] context - mbox context pointer
40 * @param[in] path - location of the partition file
41 *
42 * This API is same as above one but it reads the partition file from
43 * from the given location(path).
Andrew Jefferyf96bd162018-02-26 13:05:00 +103044 *
45 * Returns 0 if the call succeeds, else a negative error code.
Ratan Gupta3214b512017-05-11 08:58:19 +053046 */
47
Andrew Jefferyf96bd162018-02-26 13:05:00 +103048int vpnor_create_partition_table_from_path(struct mbox_context *context,
49 const char* path);
Ratan Gupta3214b512017-05-11 08:58:19 +053050
Deepak Kodihallib6a446f2017-04-29 13:01:49 -050051
52/** @brief Get partition table size, in blocks (1 block = 4KB)
53 *
54 * @param[in] context - mbox context pointer
55 *
56 * @returns partition table size. 0 if no table exists, or if the
57 * context is NULL.
58 */
59size_t vpnor_get_partition_table_size(const struct mbox_context *context);
60
61
62/** @brief Get virtual PNOR partition table with host-compatible byte-ordering
63 *
64 * @param[in] context - mbox context pointer
65 *
66 * @returns pointer to partition table, NULL if partition table doesn't
67 * exist or if the context is NULL.
68 */
69const struct pnor_partition_table* vpnor_get_partition_table(
70 const struct mbox_context *context);
71
72
73/** @brief Get a specific partition, by PNOR offset. The returned
74 * partition is such that the offset lies in that partition's
75 * boundary.
76 *
77 * @param[in] context - mbox context pointer
78 * @param[in] offset - PNOR offset
79 *
80 * @returns const pointer to pnor_partition, NULL if partition table doesn't
81 * exist or if the context is NULL
82 */
83const struct pnor_partition* vpnor_get_partition(
84 const struct mbox_context *context,
85 const size_t offset);
86
87
Deepak Kodihalli017e45c2017-07-12 01:06:30 -050088/** @brief Copy bootloader partition (alongwith TOC) to LPC memory
89 *
90 * @param[in] context - mbox context pointer
Andrew Jefferyf96bd162018-02-26 13:05:00 +103091 *
92 * @returns 0 on success, negative error code on failure
Deepak Kodihalli017e45c2017-07-12 01:06:30 -050093 */
Andrew Jefferyf96bd162018-02-26 13:05:00 +103094int vpnor_copy_bootloader_partition(const struct mbox_context *context);
Deepak Kodihalli017e45c2017-07-12 01:06:30 -050095
Deepak Kodihallib6a446f2017-04-29 13:01:49 -050096/** @brief Destroy partition table, if it exists.
97 *
98 * @param[in] context - mbox context pointer
99 */
Deepak Kodihalli64ec3e42017-07-17 06:15:16 -0500100void destroy_vpnor(struct mbox_context *context);
Deepak Kodihallib6a446f2017-04-29 13:01:49 -0500101
102#ifdef __cplusplus
103}
104#endif
105
106#endif