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