1*14b24e2bSVaishali Kulkarni /* 2*14b24e2bSVaishali Kulkarni * CDDL HEADER START 3*14b24e2bSVaishali Kulkarni * 4*14b24e2bSVaishali Kulkarni * The contents of this file are subject to the terms of the 5*14b24e2bSVaishali Kulkarni * Common Development and Distribution License, v.1, (the "License"). 6*14b24e2bSVaishali Kulkarni * You may not use this file except in compliance with the License. 7*14b24e2bSVaishali Kulkarni * 8*14b24e2bSVaishali Kulkarni * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*14b24e2bSVaishali Kulkarni * or http://opensource.org/licenses/CDDL-1.0. 10*14b24e2bSVaishali Kulkarni * See the License for the specific language governing permissions 11*14b24e2bSVaishali Kulkarni * and limitations under the License. 12*14b24e2bSVaishali Kulkarni * 13*14b24e2bSVaishali Kulkarni * When distributing Covered Code, include this CDDL HEADER in each 14*14b24e2bSVaishali Kulkarni * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*14b24e2bSVaishali Kulkarni * If applicable, add the following below this CDDL HEADER, with the 16*14b24e2bSVaishali Kulkarni * fields enclosed by brackets "[]" replaced with your own identifying 17*14b24e2bSVaishali Kulkarni * information: Portions Copyright [yyyy] [name of copyright owner] 18*14b24e2bSVaishali Kulkarni * 19*14b24e2bSVaishali Kulkarni * CDDL HEADER END 20*14b24e2bSVaishali Kulkarni */ 21*14b24e2bSVaishali Kulkarni 22*14b24e2bSVaishali Kulkarni /* 23*14b24e2bSVaishali Kulkarni * Copyright 2014-2017 Cavium, Inc. 24*14b24e2bSVaishali Kulkarni * The contents of this file are subject to the terms of the Common Development 25*14b24e2bSVaishali Kulkarni * and Distribution License, v.1, (the "License"). 26*14b24e2bSVaishali Kulkarni 27*14b24e2bSVaishali Kulkarni * You may not use this file except in compliance with the License. 28*14b24e2bSVaishali Kulkarni 29*14b24e2bSVaishali Kulkarni * You can obtain a copy of the License at available 30*14b24e2bSVaishali Kulkarni * at http://opensource.org/licenses/CDDL-1.0 31*14b24e2bSVaishali Kulkarni 32*14b24e2bSVaishali Kulkarni * See the License for the specific language governing permissions and 33*14b24e2bSVaishali Kulkarni * limitations under the License. 34*14b24e2bSVaishali Kulkarni */ 35*14b24e2bSVaishali Kulkarni 36*14b24e2bSVaishali Kulkarni 37*14b24e2bSVaishali Kulkarni #ifndef _COMMON_NVM_H_ 38*14b24e2bSVaishali Kulkarni #define _COMMON_NVM_H_ 39*14b24e2bSVaishali Kulkarni 40*14b24e2bSVaishali Kulkarni #include "nvm_map.h" 41*14b24e2bSVaishali Kulkarni #include "append.h" 42*14b24e2bSVaishali Kulkarni // Callbacks: 43*14b24e2bSVaishali Kulkarni 44*14b24e2bSVaishali Kulkarni #ifndef MFW 45*14b24e2bSVaishali Kulkarni #ifndef UEFI 46*14b24e2bSVaishali Kulkarni #define TRACE(module, ...) EDIAG_ERR(__VA_ARGS__) 47*14b24e2bSVaishali Kulkarni #else // UEFI 48*14b24e2bSVaishali Kulkarni #define TRACE 49*14b24e2bSVaishali Kulkarni #endif 50*14b24e2bSVaishali Kulkarni #else // MFW 51*14b24e2bSVaishali Kulkarni extern void memset32(u32 *ptr, u32 val, u32 byte_cnt); 52*14b24e2bSVaishali Kulkarni extern void memcpy32(u32 *ptr, u32 *src, u32 byte_cnt); 53*14b24e2bSVaishali Kulkarni #endif 54*14b24e2bSVaishali Kulkarni 55*14b24e2bSVaishali Kulkarni extern int nvm_read(u32 nvm_addr, u32 n_bytes, u32 *read_buf); 56*14b24e2bSVaishali Kulkarni extern void compute_crc_from_buf(u32 *buf_p, u32 len, u32 *crc_p); 57*14b24e2bSVaishali Kulkarni extern int nvm_write(u32 nvm_addr, u32 byte_cnt, u32 *buf); 58*14b24e2bSVaishali Kulkarni extern int validate_dir(u32 bundle_id, u32 num_images); 59*14b24e2bSVaishali Kulkarni extern void nvm_write_progress_cb(u32 byte_cnt, u32 orig_byte_cnt); 60*14b24e2bSVaishali Kulkarni 61*14b24e2bSVaishali Kulkarni #ifndef ERROR 62*14b24e2bSVaishali Kulkarni #define ERROR (-1) 63*14b24e2bSVaishali Kulkarni #endif 64*14b24e2bSVaishali Kulkarni 65*14b24e2bSVaishali Kulkarni #ifndef OK 66*14b24e2bSVaishali Kulkarni #define OK (0) 67*14b24e2bSVaishali Kulkarni #endif 68*14b24e2bSVaishali Kulkarni 69*14b24e2bSVaishali Kulkarni #define ROMIMG_NUM_MAX 8 70*14b24e2bSVaishali Kulkarni 71*14b24e2bSVaishali Kulkarni #define PCIR_OFFSET(f) ((u32)((int_ptr_t) &(((pci30_rom_hdr *)0)->f))) 72*14b24e2bSVaishali Kulkarni 73*14b24e2bSVaishali Kulkarni typedef enum { 74*14b24e2bSVaishali Kulkarni MBA_MBA_LEGACY_IDX = 0, 75*14b24e2bSVaishali Kulkarni MBA_MBA_PCI3CLP_IDX, 76*14b24e2bSVaishali Kulkarni MBA_MBA_PCI3_IDX, 77*14b24e2bSVaishali Kulkarni MBA_FCODE_IDX, 78*14b24e2bSVaishali Kulkarni EFI_X86_IDX, 79*14b24e2bSVaishali Kulkarni EFI_IPF_IDX, 80*14b24e2bSVaishali Kulkarni EFI_EBC_IDX, 81*14b24e2bSVaishali Kulkarni EFI_X64_IDX 82*14b24e2bSVaishali Kulkarni } mba_image_t; 83*14b24e2bSVaishali Kulkarni 84*14b24e2bSVaishali Kulkarni typedef struct _exp_rom_hdr_t 85*14b24e2bSVaishali Kulkarni { 86*14b24e2bSVaishali Kulkarni #define ROM_HEADER_SIG 0x0AA55 87*14b24e2bSVaishali Kulkarni u16 Signature; 88*14b24e2bSVaishali Kulkarni u8 Size; 89*14b24e2bSVaishali Kulkarni u8 Entry[4]; 90*14b24e2bSVaishali Kulkarni u8 Cksum; 91*14b24e2bSVaishali Kulkarni u16 VendorOffset; /* Offset to vendor_data_t structure */ 92*14b24e2bSVaishali Kulkarni u8 reserved1[12]; 93*14b24e2bSVaishali Kulkarni u16 ROMIDoffset; 94*14b24e2bSVaishali Kulkarni u16 PCIdsOffset; 95*14b24e2bSVaishali Kulkarni u16 PnPehOffset; /* Offset to pci_rom_hdr_t structure */ 96*14b24e2bSVaishali Kulkarni u8 reserved2[4]; 97*14b24e2bSVaishali Kulkarni } exp_rom_hdr; 98*14b24e2bSVaishali Kulkarni 99*14b24e2bSVaishali Kulkarni typedef struct _pci30_rom_hdr_t 100*14b24e2bSVaishali Kulkarni { 101*14b24e2bSVaishali Kulkarni u8 Signature[4]; /* PCIR */ 102*14b24e2bSVaishali Kulkarni u16 VendorID; 103*14b24e2bSVaishali Kulkarni u16 DeviceID; 104*14b24e2bSVaishali Kulkarni u16 VP; 105*14b24e2bSVaishali Kulkarni u16 StructLength; 106*14b24e2bSVaishali Kulkarni u8 StructRev; /* PCI30 or not */ 107*14b24e2bSVaishali Kulkarni u8 BaseClass; 108*14b24e2bSVaishali Kulkarni u8 SubClass; 109*14b24e2bSVaishali Kulkarni u8 Interface; 110*14b24e2bSVaishali Kulkarni u16 ImageLength; 111*14b24e2bSVaishali Kulkarni u16 ImageRev; 112*14b24e2bSVaishali Kulkarni u8 CodeType; 113*14b24e2bSVaishali Kulkarni u8 Indicator; 114*14b24e2bSVaishali Kulkarni u16 RunTimeImgLen; 115*14b24e2bSVaishali Kulkarni u16 CfgCodeHdr; 116*14b24e2bSVaishali Kulkarni u16 DmtfEntry; 117*14b24e2bSVaishali Kulkarni } pci30_rom_hdr; 118*14b24e2bSVaishali Kulkarni 119*14b24e2bSVaishali Kulkarni /***************************************************************************** 120*14b24e2bSVaishali Kulkarni * 121*14b24e2bSVaishali Kulkarni * FUNCTION: validate_image_header 122*14b24e2bSVaishali Kulkarni * 123*14b24e2bSVaishali Kulkarni * DESCRIPTION: Returns the flash size in bytes. 124*14b24e2bSVaishali Kulkarni * 125*14b24e2bSVaishali Kulkarni * INPUT: p_img_hdr 126*14b24e2bSVaishali Kulkarni * 127*14b24e2bSVaishali Kulkarni * OUTPUT: None 128*14b24e2bSVaishali Kulkarni * 129*14b24e2bSVaishali Kulkarni * RETURNS: Flash size in bytes 130*14b24e2bSVaishali Kulkarni *****************************************************************************/ 131*14b24e2bSVaishali Kulkarni int validate_image_header(struct image_header *p_img_hdr); 132*14b24e2bSVaishali Kulkarni 133*14b24e2bSVaishali Kulkarni /***************************************************************************** 134*14b24e2bSVaishali Kulkarni * 135*14b24e2bSVaishali Kulkarni * FUNCTION: get_flash_size 136*14b24e2bSVaishali Kulkarni * 137*14b24e2bSVaishali Kulkarni * DESCRIPTION: Returns the flash size in bytes. 138*14b24e2bSVaishali Kulkarni * 139*14b24e2bSVaishali Kulkarni * INPUT: None 140*14b24e2bSVaishali Kulkarni * 141*14b24e2bSVaishali Kulkarni * OUTPUT: None 142*14b24e2bSVaishali Kulkarni * 143*14b24e2bSVaishali Kulkarni * RETURNS: Flash size in bytes 144*14b24e2bSVaishali Kulkarni *****************************************************************************/ 145*14b24e2bSVaishali Kulkarni u32 get_flash_size(void); 146*14b24e2bSVaishali Kulkarni 147*14b24e2bSVaishali Kulkarni /***************************************************************************** 148*14b24e2bSVaishali Kulkarni * 149*14b24e2bSVaishali Kulkarni * FUNCTION: allocate_nvram_for_image 150*14b24e2bSVaishali Kulkarni * 151*14b24e2bSVaishali Kulkarni * DESCRIPTION: Responsible allocating nvram room for an image. 152*14b24e2bSVaishali Kulkarni * 1. Remove the image from the directory (if exists) 153*14b24e2bSVaishali Kulkarni * 2. In case it is MIM or LIM, select the fixed nvram offset, 154*14b24e2bSVaishali Kulkarni * otherwise, use the "find_room_for_image" to find room. 155*14b24e2bSVaishali Kulkarni * 3. Add the new image_header to the directory. 156*14b24e2bSVaishali Kulkarni * 157*14b24e2bSVaishali Kulkarni * INPUT: p_dir - Pointer to directory 158*14b24e2bSVaishali Kulkarni * p_image_header - Pointer to the requested image header. 159*14b24e2bSVaishali Kulkarni * 160*14b24e2bSVaishali Kulkarni * OUTPUT: o_nvm_offset - nvm offset of the allocated room. 161*14b24e2bSVaishali Kulkarni * 162*14b24e2bSVaishali Kulkarni * RETURNS: OK / ERROR 163*14b24e2bSVaishali Kulkarni *****************************************************************************/ 164*14b24e2bSVaishali Kulkarni int allocate_nvram_for_image(struct nvm_dir *p_dir, struct image_header *p_image_header, u32 *o_nvm_offset); 165*14b24e2bSVaishali Kulkarni 166*14b24e2bSVaishali Kulkarni /***************************************************************************** 167*14b24e2bSVaishali Kulkarni * 168*14b24e2bSVaishali Kulkarni * FUNCTION: find_room_for_image 169*14b24e2bSVaishali Kulkarni * 170*14b24e2bSVaishali Kulkarni * DESCRIPTION: Finds room for new nvm image 171*14b24e2bSVaishali Kulkarni * 172*14b24e2bSVaishali Kulkarni * INPUT image_type 173*14b24e2bSVaishali Kulkarni * byte_cnt 174*14b24e2bSVaishali Kulkarni * p_dir 175*14b24e2bSVaishali Kulkarni * OUTPUT: out_nvm_offset 176*14b24e2bSVaishali Kulkarni * 177*14b24e2bSVaishali Kulkarni * RETURNS: OK/ERROR 178*14b24e2bSVaishali Kulkarni * 179*14b24e2bSVaishali Kulkarni *****************************************************************************/ 180*14b24e2bSVaishali Kulkarni int find_room_for_image(u32 image_type, 181*14b24e2bSVaishali Kulkarni u32 byte_cnt, 182*14b24e2bSVaishali Kulkarni struct nvm_dir *p_dir, 183*14b24e2bSVaishali Kulkarni u32 *out_nvm_offset); 184*14b24e2bSVaishali Kulkarni 185*14b24e2bSVaishali Kulkarni /***************************************************************************** 186*14b24e2bSVaishali Kulkarni * 187*14b24e2bSVaishali Kulkarni * FUNCTION: get_active_dir 188*14b24e2bSVaishali Kulkarni * 189*14b24e2bSVaishali Kulkarni * DESCRIPTION: Responsible allocating nvram room for an image. 190*14b24e2bSVaishali Kulkarni * 1. Read headers of both directories 191*14b24e2bSVaishali Kulkarni * 2. Validate their CRC with accordance to their sequence number. 192*14b24e2bSVaishali Kulkarni * 3. In case a directory is valid, return its id along with its next MFW. 193*14b24e2bSVaishali Kulkarni * OUTPUT: o_dir_id - Active Dir ID 194*14b24e2bSVaishali Kulkarni * o_next_mfw - Next MFW scheduled to run from the dir. 195*14b24e2bSVaishali Kulkarni * 196*14b24e2bSVaishali Kulkarni * RETURNS: OK / ERROR 197*14b24e2bSVaishali Kulkarni *****************************************************************************/ 198*14b24e2bSVaishali Kulkarni int get_active_dir(u32 *o_dir_id, u32 *o_next_mfw); 199*14b24e2bSVaishali Kulkarni 200*14b24e2bSVaishali Kulkarni /***************************************************************************** 201*14b24e2bSVaishali Kulkarni * 202*14b24e2bSVaishali Kulkarni * FUNCTION: prepare_bootstrap 203*14b24e2bSVaishali Kulkarni * 204*14b24e2bSVaishali Kulkarni * DESCRIPTION: This function updates the active NVM bootstrap. The active bootstrap is 205*14b24e2bSVaishali Kulkarni * read by the device ROM upon reset, and according to the bootstrap 206*14b24e2bSVaishali Kulkarni * information it loads LIM, which starts running the MFW. 207*14b24e2bSVaishali Kulkarni * 208*14b24e2bSVaishali Kulkarni * INPUT: i_lim_header - Image header of LIM 209*14b24e2bSVaishali Kulkarni * 210*14b24e2bSVaishali Kulkarni * OUTPUT: o_bootstrap - Bootstrap struct to be stored in nvram. 211*14b24e2bSVaishali Kulkarni * 212*14b24e2bSVaishali Kulkarni * RETURNS: none 213*14b24e2bSVaishali Kulkarni *****************************************************************************/ 214*14b24e2bSVaishali Kulkarni void prepare_bootstrap(struct image_header *i_lim_header, 215*14b24e2bSVaishali Kulkarni struct legacy_bootstrap_region *o_bootstrap); 216*14b24e2bSVaishali Kulkarni 217*14b24e2bSVaishali Kulkarni /***************************************************************************** 218*14b24e2bSVaishali Kulkarni * 219*14b24e2bSVaishali Kulkarni * FUNCTION: nvm_update_dir 220*14b24e2bSVaishali Kulkarni * 221*14b24e2bSVaishali Kulkarni * DESCRIPTION: Update directory to nvram. 222*14b24e2bSVaishali Kulkarni * 223*14b24e2bSVaishali Kulkarni * INPUT: p_dir - Pointer to the directory 224*14b24e2bSVaishali Kulkarni * is_mfw - true/false 225*14b24e2bSVaishali Kulkarni * INPUT/OUTPUT: dir_id - Input - the current dir id. Output - The updated dir id 226*14b24e2bSVaishali Kulkarni * 227*14b24e2bSVaishali Kulkarni * RETURNS: none 228*14b24e2bSVaishali Kulkarni *****************************************************************************/ 229*14b24e2bSVaishali Kulkarni int nvm_update_dir(struct nvm_dir *p_dir, u32 *dir_id, u32 is_mfw); 230*14b24e2bSVaishali Kulkarni 231*14b24e2bSVaishali Kulkarni /***************************************************************************** 232*14b24e2bSVaishali Kulkarni * 233*14b24e2bSVaishali Kulkarni * FUNCTION: add_nvm_entry_to_dir 234*14b24e2bSVaishali Kulkarni * 235*14b24e2bSVaishali Kulkarni * DESCRIPTION: Adds new image entry to a given directory. 236*14b24e2bSVaishali Kulkarni * 1. Verify number of images doesn't exceed some crazy number - 200 237*14b24e2bSVaishali Kulkarni * 2. Since the dir is sorted according to nvram offset, move up 238*14b24e2bSVaishali Kulkarni * all image entries higher than the requested offset for the 239*14b24e2bSVaishali Kulkarni * new image entry 240*14b24e2bSVaishali Kulkarni * 3. Insert the new image entry 241*14b24e2bSVaishali Kulkarni * 4. Increase the number of entries in the directory. 242*14b24e2bSVaishali Kulkarni * 243*14b24e2bSVaishali Kulkarni * INPUT/OUTPUT p_dir - Pointer to the directory buffer 244*14b24e2bSVaishali Kulkarni * nvm_offset - The nvram address for the new image 245*14b24e2bSVaishali Kulkarni * p_image_header - Pointer to the image header. 246*14b24e2bSVaishali Kulkarni * 247*14b24e2bSVaishali Kulkarni * RETURNS: ERROR/OK 248*14b24e2bSVaishali Kulkarni *****************************************************************************/ 249*14b24e2bSVaishali Kulkarni int add_nvm_entry_to_dir(struct nvm_dir *p_dir, 250*14b24e2bSVaishali Kulkarni u32 nvm_offset, 251*14b24e2bSVaishali Kulkarni struct image_header *p_image_header); 252*14b24e2bSVaishali Kulkarni 253*14b24e2bSVaishali Kulkarni /***************************************************************************** 254*14b24e2bSVaishali Kulkarni * FUNCTION: get_alt_image_type 255*14b24e2bSVaishali Kulkarni * 256*14b24e2bSVaishali Kulkarni * DESCRIPTION: If image type is part of the MFW bundle (which has two 257*14b24e2bSVaishali Kulkarni * bundles/slots in the nvram), then set the image type as the 258*14b24e2bSVaishali Kulkarni * non-running one, otherwise, change nothing. 259*14b24e2bSVaishali Kulkarni * 260*14b24e2bSVaishali Kulkarni * INPUT: running_mfw - 0/1 261*14b24e2bSVaishali Kulkarni * image_type 262*14b24e2bSVaishali Kulkarni * 263*14b24e2bSVaishali Kulkarni * RETURNS: Alternate image type 264*14b24e2bSVaishali Kulkarni *****************************************************************************/ 265*14b24e2bSVaishali Kulkarni u32 get_alt_image_type(u32 running_mfw, u32 image_type); 266*14b24e2bSVaishali Kulkarni 267*14b24e2bSVaishali Kulkarni /***************************************************************************** 268*14b24e2bSVaishali Kulkarni * FUNCTION: load_active_nvm_dir 269*14b24e2bSVaishali Kulkarni * 270*14b24e2bSVaishali Kulkarni * DESCRIPTION: Loads the active nvm dir to the o_dir_p 271*14b24e2bSVaishali Kulkarni * 272*14b24e2bSVaishali Kulkarni * INPUT: None 273*14b24e2bSVaishali Kulkarni * 274*14b24e2bSVaishali Kulkarni * OUTPUT: o_dir_p - Pointer to directory structure to be populated. 275*14b24e2bSVaishali Kulkarni * o_cur_dir_id - Active Dir ID 276*14b24e2bSVaishali Kulkarni * 277*14b24e2bSVaishali Kulkarni * RETURNS: OK/ERROR 278*14b24e2bSVaishali Kulkarni *****************************************************************************/ 279*14b24e2bSVaishali Kulkarni int load_active_nvm_dir(struct nvm_dir *o_dir_p, u32 *o_cur_dir_id); 280*14b24e2bSVaishali Kulkarni 281*14b24e2bSVaishali Kulkarni /***************************************************************************** 282*14b24e2bSVaishali Kulkarni * 283*14b24e2bSVaishali Kulkarni * FUNCTION: remove_image_from_dir 284*14b24e2bSVaishali Kulkarni * 285*14b24e2bSVaishali Kulkarni * DESCRIPTION: Removes requested images from a giveN dir pointer, and 286*14b24e2bSVaishali Kulkarni * squeeze images back. In case the requested image is not found, 287*14b24e2bSVaishali Kulkarni * it does nothing. 288*14b24e2bSVaishali Kulkarni * NOTE: This function doesn't recalc the CRC, or write the dir 289*14b24e2bSVaishali Kulkarni * back to nvram ! 290*14b24e2bSVaishali Kulkarni * 291*14b24e2bSVaishali Kulkarni * INPUT: p_dir - pointer to the directory 292*14b24e2bSVaishali Kulkarni * image_type - Requested image type to remove 293*14b24e2bSVaishali Kulkarni * 294*14b24e2bSVaishali Kulkarni * RETURNS: OK - Image removed 295*14b24e2bSVaishali Kulkarni * ERROR - Image not found 296*14b24e2bSVaishali Kulkarni *****************************************************************************/ 297*14b24e2bSVaishali Kulkarni int remove_image_from_dir(struct nvm_dir *p_dir, 298*14b24e2bSVaishali Kulkarni u32 image_type); 299*14b24e2bSVaishali Kulkarni 300*14b24e2bSVaishali Kulkarni /***************************************************************************** 301*14b24e2bSVaishali Kulkarni * 302*14b24e2bSVaishali Kulkarni * FUNCTION: inner_nvm_block_write 303*14b24e2bSVaishali Kulkarni * 304*14b24e2bSVaishali Kulkarni * DESCRIPTION: Internal function for writting block of data to nvram. 305*14b24e2bSVaishali Kulkarni * NOTE: 1. This function doesn't take nvram lock to allow multiple 306*14b24e2bSVaishali Kulkarni * transactions within the same page. 307*14b24e2bSVaishali Kulkarni * 2. When calling this function, please use the nvm_flags 308*14b24e2bSVaishali Kulkarni * correctly: 309*14b24e2bSVaishali Kulkarni * MCP_REG_NVM_COMMAND_FIRST - Sets the FIRST flag on the first 310*14b24e2bSVaishali Kulkarni * transaction. 311*14b24e2bSVaishali Kulkarni * MCP_REG_NVM_COMMAND_LAST - Sets the LAST flag on the last byte write. 312*14b24e2bSVaishali Kulkarni * Avoid setting this flag for multiple 313*14b24e2bSVaishali Kulkarni * transaction on the same page, and set it 314*14b24e2bSVaishali Kulkarni * only for the last one. 315*14b24e2bSVaishali Kulkarni * In any case, the LAST flag will be set at 316*14b24e2bSVaishali Kulkarni * the end of NVM page (4KB). 317*14b24e2bSVaishali Kulkarni * 318*14b24e2bSVaishali Kulkarni * INPUT: nvm_flags - MCP_REG_NVM_COMMAND_FIRST/MCP_REG_NVM_COMMAND_LAST/0 - See above 319*14b24e2bSVaishali Kulkarni * nvm_addr - Destination nvm address 320*14b24e2bSVaishali Kulkarni * byte_cnt - Number of bytes 321*14b24e2bSVaishali Kulkarni * p_buf - Pointer to the input buffer. 322*14b24e2bSVaishali Kulkarni * 323*14b24e2bSVaishali Kulkarni * RETURNS: OK - Image removed 324*14b24e2bSVaishali Kulkarni * ERROR - Image not found 325*14b24e2bSVaishali Kulkarni *****************************************************************************/ 326*14b24e2bSVaishali Kulkarni #define MCP_REG_NVM_COMMAND_DISPLAY (0x1<<31) 327*14b24e2bSVaishali Kulkarni int inner_nvm_write(u32 nvm_flags, u32 nvm_addr, u32 byte_cnt, u32 *p_buf); 328*14b24e2bSVaishali Kulkarni 329*14b24e2bSVaishali Kulkarni /********************************************************************** 330*14b24e2bSVaishali Kulkarni * FUNCTION: find_image_by_type_in_dir 331*14b24e2bSVaishali Kulkarni * 332*14b24e2bSVaishali Kulkarni * DESCRIPTION: Checks if the requested image type exist in the directory. 333*14b24e2bSVaishali Kulkarni * If so, it provide it in the output parameter index, and returns OK 334*14b24e2bSVaishali Kulkarni * Otherwise it returns ERROR; 335*14b24e2bSVaishali Kulkarni * 336*14b24e2bSVaishali Kulkarni * INPUT: dir_p - Pointer to directory 337*14b24e2bSVaishali Kulkarni * requested_type - Image type to look for 338*14b24e2bSVaishali Kulkarni * 339*14b24e2bSVaishali Kulkarni * RETURNS: OK - If requested image found 340*14b24e2bSVaishali Kulkarni * ERROR - Otherwise. 341*14b24e2bSVaishali Kulkarni ***********************************************************************/ 342*14b24e2bSVaishali Kulkarni int find_image_by_type_in_dir(struct nvm_dir *dir_p, 343*14b24e2bSVaishali Kulkarni u32 requested_type, 344*14b24e2bSVaishali Kulkarni u32 *index); 345*14b24e2bSVaishali Kulkarni 346*14b24e2bSVaishali Kulkarni #endif /* _COMMON_NVM_H_ */ 347