xref: /openbmc/hiomapd/vpnor/backend.h (revision f4bc335b)
1*f4bc335bSAndrew Jeffery /* SPDX-License-Identifier: Apache-2.0 */
2*f4bc335bSAndrew Jeffery /* Copyright (C) 2018 IBM Corp. */
3*f4bc335bSAndrew Jeffery #pragma once
4*f4bc335bSAndrew Jeffery 
5*f4bc335bSAndrew Jeffery #include <limits.h>
6*f4bc335bSAndrew Jeffery #include "pnor_partition_defs.h"
7*f4bc335bSAndrew Jeffery #include "backend.h"
8*f4bc335bSAndrew Jeffery 
9*f4bc335bSAndrew Jeffery struct mbox_context;
10*f4bc335bSAndrew Jeffery struct vpnor_partition_table;
11*f4bc335bSAndrew Jeffery 
12*f4bc335bSAndrew Jeffery struct vpnor_partition_paths
13*f4bc335bSAndrew Jeffery {
14*f4bc335bSAndrew Jeffery     char ro_loc[PATH_MAX];
15*f4bc335bSAndrew Jeffery     char rw_loc[PATH_MAX];
16*f4bc335bSAndrew Jeffery     char prsv_loc[PATH_MAX];
17*f4bc335bSAndrew Jeffery     char patch_loc[PATH_MAX];
18*f4bc335bSAndrew Jeffery };
19*f4bc335bSAndrew Jeffery 
20*f4bc335bSAndrew Jeffery struct vpnor_data {
21*f4bc335bSAndrew Jeffery 	struct vpnor_partition_table *vpnor;
22*f4bc335bSAndrew Jeffery 	struct vpnor_partition_paths paths;
23*f4bc335bSAndrew Jeffery };
24*f4bc335bSAndrew Jeffery 
25*f4bc335bSAndrew Jeffery #ifdef __cplusplus
26*f4bc335bSAndrew Jeffery extern "C" {
27*f4bc335bSAndrew Jeffery #endif
28*f4bc335bSAndrew Jeffery 
29*f4bc335bSAndrew Jeffery /** @brief Populate the path object with the default partition paths
30*f4bc335bSAndrew Jeffery  *
31*f4bc335bSAndrew Jeffery  *  @param[in/out] paths - A paths object in which to store the defaults
32*f4bc335bSAndrew Jeffery  *
33*f4bc335bSAndrew Jeffery  *  Returns 0 if the call succeeds, else a negative error code.
34*f4bc335bSAndrew Jeffery  */
35*f4bc335bSAndrew Jeffery #ifdef VIRTUAL_PNOR_ENABLED
36*f4bc335bSAndrew Jeffery void vpnor_default_paths(struct vpnor_partition_paths *paths);
37*f4bc335bSAndrew Jeffery #else
38*f4bc335bSAndrew Jeffery static inline void vpnor_default_paths(struct vpnor_partition_paths *paths)
39*f4bc335bSAndrew Jeffery {
40*f4bc335bSAndrew Jeffery     memset(paths, 0, sizeof(*paths));
41*f4bc335bSAndrew Jeffery }
42*f4bc335bSAndrew Jeffery #endif
43*f4bc335bSAndrew Jeffery 
44*f4bc335bSAndrew Jeffery #ifdef VIRTUAL_PNOR_ENABLED
45*f4bc335bSAndrew Jeffery /** @brief Create a virtual PNOR partition table.
46*f4bc335bSAndrew Jeffery  *
47*f4bc335bSAndrew Jeffery  *  @param[in] backend - The backend context pointer
48*f4bc335bSAndrew Jeffery  *  @param[in] paths - A paths object pointer to initialise vpnor
49*f4bc335bSAndrew Jeffery  *
50*f4bc335bSAndrew Jeffery  *  This API should be called before calling any other APIs below. If a table
51*f4bc335bSAndrew Jeffery  *  already exists, this function will not do anything further. This function
52*f4bc335bSAndrew Jeffery  *  will not do anything if the context is NULL.
53*f4bc335bSAndrew Jeffery  *
54*f4bc335bSAndrew Jeffery  *  The content of the paths object is copied out, ownership is retained by the
55*f4bc335bSAndrew Jeffery  *  caller.
56*f4bc335bSAndrew Jeffery  *
57*f4bc335bSAndrew Jeffery  *  Returns 0 if the call succeeds, else a negative error code.
58*f4bc335bSAndrew Jeffery  */
59*f4bc335bSAndrew Jeffery 
60*f4bc335bSAndrew Jeffery int vpnor_init(struct backend *backend,
61*f4bc335bSAndrew Jeffery 	       const struct vpnor_partition_paths *paths);
62*f4bc335bSAndrew Jeffery 
63*f4bc335bSAndrew Jeffery /** @brief Copy bootloader partition (alongwith TOC) to LPC memory
64*f4bc335bSAndrew Jeffery  *
65*f4bc335bSAndrew Jeffery  *  @param[in] backend - The backend context pointer
66*f4bc335bSAndrew Jeffery  *
67*f4bc335bSAndrew Jeffery  *  @returns 0 on success, negative error code on failure
68*f4bc335bSAndrew Jeffery  */
69*f4bc335bSAndrew Jeffery int vpnor_copy_bootloader_partition(const struct backend *backend, void *buf,
70*f4bc335bSAndrew Jeffery 				    uint32_t count);
71*f4bc335bSAndrew Jeffery 
72*f4bc335bSAndrew Jeffery /** @brief Destroy partition table, if it exists.
73*f4bc335bSAndrew Jeffery  *
74*f4bc335bSAndrew Jeffery  *  @param[in] backend - The backend context pointer
75*f4bc335bSAndrew Jeffery  */
76*f4bc335bSAndrew Jeffery void vpnor_destroy(struct backend *backend);
77*f4bc335bSAndrew Jeffery 
78*f4bc335bSAndrew Jeffery #ifdef __cplusplus
79*f4bc335bSAndrew Jeffery }
80*f4bc335bSAndrew Jeffery #endif
81*f4bc335bSAndrew Jeffery 
82*f4bc335bSAndrew Jeffery #endif
83