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