summaryrefslogtreecommitdiffstats
path: root/mboxd_pnor_partition_table.h
blob: beb9cede4fdc7ddcae2d728ee6aa59ee4961094a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
/*
 * Mailbox Daemon Implementation
 *
 * Copyright 2018 IBM
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */
#pragma once

#ifdef VIRTUAL_PNOR_ENABLED

#include <limits.h>
#include "pnor_partition_defs.h"

struct mbox_context;
struct vpnor_partition_table;

struct vpnor_partition_paths
{
    char ro_loc[PATH_MAX];
    char rw_loc[PATH_MAX];
    char prsv_loc[PATH_MAX];
    char patch_loc[PATH_MAX];
};

#ifdef __cplusplus
extern "C" {
#endif

/** @brief Create a virtual PNOR partition table.
 *
 *  @param[in] context - mbox context pointer
 *
 *  This API should be called before calling any other APIs below. If a table
 *  already exists, this function will not do anything further. This function
 *  will not do anything if the context is NULL.
 *
 *  Returns 0 if the call succeeds, else a negative error code.
 */
int init_vpnor(struct mbox_context *context);

/** @brief Create a virtual PNOR partition table.
 *
 *  @param[in] context - mbox context pointer
 *  @param[in] path - location of the partition file
 *
 *  This API is same as above one but it reads the partition file from
 *  from the given location(path).
 *
 *  Returns 0 if the call succeeds, else a negative error code.
 */

int vpnor_create_partition_table_from_path(struct mbox_context *context,
                                           const char* path);


/** @brief Get partition table size, in blocks (1 block = 4KB)
 *
 *  @param[in] context - mbox context pointer
 *
 *  @returns partition table size. 0 if no table exists, or if the
 *           context is NULL.
 */
size_t vpnor_get_partition_table_size(const struct mbox_context *context);


/** @brief Get virtual PNOR partition table with host-compatible byte-ordering
 *
 *  @param[in] context - mbox context pointer
 *
 *  @returns pointer to partition table, NULL if partition table doesn't
 *           exist or if the context is NULL.
 */
const struct pnor_partition_table* vpnor_get_partition_table(
				       const struct mbox_context *context);


/** @brief Get a specific partition, by PNOR offset. The returned
 *         partition is such that the offset lies in that partition's
 *         boundary.
 *
 *  @param[in] context - mbox context pointer
 *  @param[in] offset - PNOR offset
 *
 *  @returns const pointer to pnor_partition, NULL if partition table doesn't
 *           exist or if the context is NULL
 */
const struct pnor_partition* vpnor_get_partition(
				const struct mbox_context *context,
				const size_t offset);


/** @brief Copy bootloader partition (alongwith TOC) to LPC memory
 *
 *  @param[in] context - mbox context pointer
 *
 *  @returns 0 on success, negative error code on failure
 */
int vpnor_copy_bootloader_partition(const struct mbox_context *context);

/** @brief Destroy partition table, if it exists.
 *
 *  @param[in] context - mbox context pointer
 */
void destroy_vpnor(struct mbox_context *context);

#ifdef __cplusplus
}
#endif

#endif
OpenPOWER on IntegriCloud