xref: /arm-trusted-firmware/include/drivers/brcm/chimp_nv_defs.h (revision 91f16700b400a8c0651d24a598fc48ee2997a0d7)
1*91f16700Schasinglulu /*
2*91f16700Schasinglulu  * Copyright (c) 2016 - 2020, Broadcom
3*91f16700Schasinglulu  *
4*91f16700Schasinglulu  * SPDX-License-Identifier: BSD-3-Clause
5*91f16700Schasinglulu  */
6*91f16700Schasinglulu 
7*91f16700Schasinglulu #ifndef BNXNVM_DEFS_H
8*91f16700Schasinglulu #define BNXNVM_DEFS_H
9*91f16700Schasinglulu 
10*91f16700Schasinglulu #if defined(__GNUC__)
11*91f16700Schasinglulu 	#define PACKED_STRUCT __packed
12*91f16700Schasinglulu #else /* non-GCC compiler */
13*91f16700Schasinglulu 
14*91f16700Schasinglulu #ifndef DOS_DRIVERS
15*91f16700Schasinglulu 		#pragma pack(push)
16*91f16700Schasinglulu 		#pragma pack(1)
17*91f16700Schasinglulu #endif
18*91f16700Schasinglulu 		#define PACKED_STRUCT
19*91f16700Schasinglulu #endif
20*91f16700Schasinglulu 
21*91f16700Schasinglulu typedef uint32_t u32_t;
22*91f16700Schasinglulu typedef uint8_t u8_t;
23*91f16700Schasinglulu typedef uint16_t u16_t;
24*91f16700Schasinglulu 
25*91f16700Schasinglulu #define BNXNVM_DEFAULT_BLOCK_SIZE		4096
26*91f16700Schasinglulu #define BNXNVM_UNUSED_BYTE_VALUE		0xff
27*91f16700Schasinglulu 
28*91f16700Schasinglulu #define NV_MAX_BLOCK_SIZE		16384
29*91f16700Schasinglulu 
30*91f16700Schasinglulu #define BITS_PER_BYTE		(8)
31*91f16700Schasinglulu #define SIZEOF_IN_BITS(x)	(sizeof(x)*BITS_PER_BYTE)
32*91f16700Schasinglulu 
33*91f16700Schasinglulu /************************/
34*91f16700Schasinglulu /* byte-swapping macros */
35*91f16700Schasinglulu /************************/
36*91f16700Schasinglulu #define BYTE_SWAP_16(x)	\
37*91f16700Schasinglulu 	((((u16_t)(x) & 0xff00) >> 8) | \
38*91f16700Schasinglulu 	(((u16_t)(x) & 0x00ff) << 8))
39*91f16700Schasinglulu #define BYTE_SWAP_32(x)	\
40*91f16700Schasinglulu 	((((u32_t)(x) & 0xff000000) >> 24) | \
41*91f16700Schasinglulu 	(((u32_t)(x) & 0x00ff0000) >> 8)   | \
42*91f16700Schasinglulu 	(((u32_t)(x) & 0x0000ff00) << 8)   | \
43*91f16700Schasinglulu 	(((u32_t)(x) & 0x000000ff) << 24))
44*91f16700Schasinglulu 
45*91f16700Schasinglulu /* auto-detect integer size */
46*91f16700Schasinglulu #define BYTE_SWAP_INT(x)	\
47*91f16700Schasinglulu 	(SIZEOF_IN_BITS(x) == 16 ? BYTE_SWAP_16(x) : \
48*91f16700Schasinglulu 		SIZEOF_IN_BITS(x) == 32 ? BYTE_SWAP_32(x) : (x))
49*91f16700Schasinglulu 
50*91f16700Schasinglulu /********************************/
51*91f16700Schasinglulu /* Architecture-specific macros */
52*91f16700Schasinglulu /********************************/
53*91f16700Schasinglulu #ifdef __BIG_ENDIAN__	/* e.g. Motorola */
54*91f16700Schasinglulu 
55*91f16700Schasinglulu 	#define BE_INT16(x)		(x)
56*91f16700Schasinglulu 	#define BE_INT32(x)		(x)
57*91f16700Schasinglulu 	#define BE_INT(x)		(x)
58*91f16700Schasinglulu 	#define LE_INT16(x)		BYTE_SWAP_16(x)
59*91f16700Schasinglulu 	#define LE_INT32(x)		BYTE_SWAP_32(x)
60*91f16700Schasinglulu 	#define LE_INT(x)		BYTE_SWAP_INT(x)
61*91f16700Schasinglulu 
62*91f16700Schasinglulu #else	/* Little Endian (e.g. Intel) */
63*91f16700Schasinglulu 
64*91f16700Schasinglulu 	#define LE_INT16(x)		(x)
65*91f16700Schasinglulu 	#define LE_INT32(x)		(x)
66*91f16700Schasinglulu 	#define LE_INT(x)		(x)
67*91f16700Schasinglulu 	#define BE_INT16(x)		BYTE_SWAP_16(x)
68*91f16700Schasinglulu 	#define BE_INT32(x)		BYTE_SWAP_32(x)
69*91f16700Schasinglulu 	#define BE_INT(x)		BYTE_SWAP_INT(x)
70*91f16700Schasinglulu 
71*91f16700Schasinglulu #endif
72*91f16700Schasinglulu 
73*91f16700Schasinglulu 
74*91f16700Schasinglulu enum {
75*91f16700Schasinglulu 	NV_OK = 0,
76*91f16700Schasinglulu 	NV_NOT_NVRAM,
77*91f16700Schasinglulu 	NV_BAD_MB,
78*91f16700Schasinglulu 	NV_BAD_DIR_HEADER,
79*91f16700Schasinglulu 	NV_BAD_DIR_ENTRY,
80*91f16700Schasinglulu 	NV_FW_NOT_FOUND,
81*91f16700Schasinglulu };
82*91f16700Schasinglulu 
83*91f16700Schasinglulu typedef struct {
84*91f16700Schasinglulu #define BNXNVM_MASTER_BLOCK_SIG	BE_INT32(0x424E5834)	/*"BNX4"*/
85*91f16700Schasinglulu 	/* Signature*/
86*91f16700Schasinglulu 	u32_t    sig;
87*91f16700Schasinglulu 	/* Length of Master Block Header, in bytes [32] */
88*91f16700Schasinglulu 	u32_t    length;
89*91f16700Schasinglulu 	/* Block size, in bytes [4096] */
90*91f16700Schasinglulu 	u32_t    block_size;
91*91f16700Schasinglulu 	/* Byte-offset to Directory Block (translated) */
92*91f16700Schasinglulu 	u32_t    directory_offset;
93*91f16700Schasinglulu 	/* Byte-offset to Block Redirection Table (non-translated) */
94*91f16700Schasinglulu 	u32_t    redirect_offset;
95*91f16700Schasinglulu 	/* Size, in bytes of Reserved Blocks region (at end of NVRAM) */
96*91f16700Schasinglulu 	u32_t    reserved_size;
97*91f16700Schasinglulu 	/*
98*91f16700Schasinglulu 	 * Size of NVRAM (in bytes) - may be used to
99*91f16700Schasinglulu 	 * override auto-detected size
100*91f16700Schasinglulu 	 */
101*91f16700Schasinglulu 	u32_t    nvram_size;
102*91f16700Schasinglulu 	/* CRC-32 (IEEE 802.3 compatible) of the above */
103*91f16700Schasinglulu 	u32_t    chksum;
104*91f16700Schasinglulu } PACKED_STRUCT bnxnvm_master_block_header_t;
105*91f16700Schasinglulu 
106*91f16700Schasinglulu typedef struct {
107*91f16700Schasinglulu #define BNXNVM_DIRECTORY_BLOCK_SIG BE_INT32(0x44697230)	/* "Dir0" */
108*91f16700Schasinglulu 	/* Signature */
109*91f16700Schasinglulu 	u32_t    sig;
110*91f16700Schasinglulu 	/* Length of Directory Header, in bytes [16] */
111*91f16700Schasinglulu 	u32_t    length;
112*91f16700Schasinglulu 	/* Number of Directory Entries */
113*91f16700Schasinglulu 	u32_t    entries;
114*91f16700Schasinglulu 	/* Length of each Directory Entry, in bytes [24] */
115*91f16700Schasinglulu 	u32_t    entry_length;
116*91f16700Schasinglulu } PACKED_STRUCT bnxnvm_directory_block_header_t;
117*91f16700Schasinglulu 
118*91f16700Schasinglulu typedef struct {
119*91f16700Schasinglulu 	/* Directory Entry Type (see enum bnxnvm_directory_type) */
120*91f16700Schasinglulu 	u16_t    type;
121*91f16700Schasinglulu 	/* Instance of this Directory Entry type (0-based) */
122*91f16700Schasinglulu 	u16_t    ordinal;
123*91f16700Schasinglulu 	/*
124*91f16700Schasinglulu 	 * Directory Entry Extension flags used to identify
125*91f16700Schasinglulu 	 * secondary instances of a type:ordinal combinations
126*91f16700Schasinglulu 	 */
127*91f16700Schasinglulu 	u16_t    ext;
128*91f16700Schasinglulu 	/* Directory Entry Attribute flags used to describe the item contents */
129*91f16700Schasinglulu 	u16_t    attr;
130*91f16700Schasinglulu 	/* Item location in NVRAM specified as offset (in bytes) */
131*91f16700Schasinglulu 	u32_t	 item_location;
132*91f16700Schasinglulu 	/*
133*91f16700Schasinglulu 	 * Length of NVRAM item in bytes
134*91f16700Schasinglulu 	 * (including padding - multiple of block size)
135*91f16700Schasinglulu 	 */
136*91f16700Schasinglulu 	u32_t    item_length;
137*91f16700Schasinglulu 	/* Length of item data in bytes (excluding padding) */
138*91f16700Schasinglulu 	u32_t    data_length;
139*91f16700Schasinglulu 	/*
140*91f16700Schasinglulu 	 * CRC-32 (IEEE 802.3 compatible) of item data
141*91f16700Schasinglulu 	 * (excluding padding) (optional)
142*91f16700Schasinglulu 	 */
143*91f16700Schasinglulu 	u32_t    data_chksum;
144*91f16700Schasinglulu } PACKED_STRUCT bnxnvm_directory_entry_t;
145*91f16700Schasinglulu 
146*91f16700Schasinglulu enum bnxnvm_version_format {
147*91f16700Schasinglulu 	/* US-ASCII string (not necessarily null-terminated) */
148*91f16700Schasinglulu 	BNX_VERSION_FMT_ASCII				= 0,
149*91f16700Schasinglulu 	/* Each field 16-bits, displayed as unpadded decimal (e.g. "1.2.3.4") */
150*91f16700Schasinglulu 	BNX_VERSION_FMT_DEC				= 1,
151*91f16700Schasinglulu 	/* A single hexadecimal value, up to 64-bits (no dots) */
152*91f16700Schasinglulu 	BNX_VERSION_FMT_HEX				= 2,
153*91f16700Schasinglulu 	/* Multiple version values (three 8-bit version fields) */
154*91f16700Schasinglulu 	BNX_VERSION_FMT_MULTI				= 3
155*91f16700Schasinglulu };
156*91f16700Schasinglulu 
157*91f16700Schasinglulu /* This structure definition must not change: */
158*91f16700Schasinglulu typedef struct {
159*91f16700Schasinglulu 	u16_t	flags; /* bit-flags (defaults to 0x0000) */
160*91f16700Schasinglulu 	u8_t	version_format; /* enum bnxnvm_version_format */
161*91f16700Schasinglulu 	u8_t	version_length; /* in bytes */
162*91f16700Schasinglulu 	u8_t	version[16];		/* version value */
163*91f16700Schasinglulu 	u16_t	dir_type;		/* enum bnxnvm_directory_type */
164*91f16700Schasinglulu 	/* size of the entire trailer (to locate end of component data) */
165*91f16700Schasinglulu 	u16_t	trailer_length;
166*91f16700Schasinglulu #define BNXNVM_COMPONENT_TRAILER_SIG BE_INT32(0x54726c72)	/* "Trlr" */
167*91f16700Schasinglulu 	u32_t	sig;
168*91f16700Schasinglulu 	u32_t	chksum;	/* CRC-32 of all bytes to this point */
169*91f16700Schasinglulu } PACKED_STRUCT bnxnvm_component_trailer_base_t;
170*91f16700Schasinglulu 
171*91f16700Schasinglulu typedef struct {
172*91f16700Schasinglulu 	/*
173*91f16700Schasinglulu 	 * new trailer members (e.g. digital signature)
174*91f16700Schasinglulu 	 * go here (insert at top):
175*91f16700Schasinglulu 	 */
176*91f16700Schasinglulu 	u8_t rsa_sig[256]; /* 2048-bit RSA-encrypted SHA-256 hash */
177*91f16700Schasinglulu 	bnxnvm_component_trailer_base_t	base;
178*91f16700Schasinglulu } PACKED_STRUCT bnxnvm_component_trailer_t;
179*91f16700Schasinglulu 
180*91f16700Schasinglulu #define BNX_MAX_LEN_DIR_NAME		12
181*91f16700Schasinglulu #define BNX_MAX_LEN_DIR_DESC		50
182*91f16700Schasinglulu /*********************************************************
183*91f16700Schasinglulu  * NVRAM Directory Entry/Item Types, Names, and Descriptions
184*91f16700Schasinglulu  *
185*91f16700Schasinglulu  * If you see a name or description that needs improvement,
186*91f16700Schasinglulu  * please correct it or raise for discussion.
187*91f16700Schasinglulu  * When adding a new directory type, it would be appreciated
188*91f16700Schasinglulu  * if you also updated ../../libs/nvm/bnxt_nvm_str.c.
189*91f16700Schasinglulu  * DIR_NAME macros may contain up to 12 alpha-numeric
190*91f16700Schasinglulu  * US-ASCII characters only, camelCase is preferred for clarity.
191*91f16700Schasinglulu  * DIR_DESC macros may contain up to 50 US-ASCII characters
192*91f16700Schasinglulu  * providing a verbose description of the directory type.
193*91f16700Schasinglulu  */
194*91f16700Schasinglulu enum bnxnvm_directory_type {
195*91f16700Schasinglulu 	/* 0x00 Unused directory entry, available for use */
196*91f16700Schasinglulu 		BNX_DIR_TYPE_UNUSED				= 0,
197*91f16700Schasinglulu #define BNX_DIR_NAME_UNUSED				"unused"
198*91f16700Schasinglulu #define BNX_DIR_DESC_UNUSED				"Deleted directory entry, available for reuse"
199*91f16700Schasinglulu 	/* 0x01 Package installation log */
200*91f16700Schasinglulu 	BNX_DIR_TYPE_PKG_LOG			= 1,
201*91f16700Schasinglulu #define BNX_DIR_NAME_PKG_LOG			"pkgLog"
202*91f16700Schasinglulu #define BNX_DIR_DESC_PKG_LOG			"Package Installation Log"
203*91f16700Schasinglulu 	BNX_DIR_TYPE_CHIMP_PATCH        = 3,
204*91f16700Schasinglulu #define BNX_DIR_NAME_CHIMP_PATCH		"chimpPatch"
205*91f16700Schasinglulu #define BNX_DIR_DESC_CHIMP_PATCH		"ChiMP Patch Firmware"
206*91f16700Schasinglulu 	/* 0x04 ChiMP firmware: Boot Code phase 1 */
207*91f16700Schasinglulu 	BNX_DIR_TYPE_BOOTCODE			= 4,
208*91f16700Schasinglulu #define BNX_DIR_NAME_BOOTCODE			"chimpBoot"
209*91f16700Schasinglulu #define BNX_DIR_DESC_BOOTCODE			"Chip Management Processor Boot Firmware"
210*91f16700Schasinglulu 	/* 0x05 VPD data block */
211*91f16700Schasinglulu 	BNX_DIR_TYPE_VPD				= 5,
212*91f16700Schasinglulu #define BNX_DIR_NAME_VPD				"VPD"
213*91f16700Schasinglulu #define BNX_DIR_DESC_VPD				"Vital Product Data"
214*91f16700Schasinglulu 	/* 0x06 Exp ROM MBA */
215*91f16700Schasinglulu 	BNX_DIR_TYPE_EXP_ROM_MBA		= 6,
216*91f16700Schasinglulu #define BNX_DIR_NAME_EXP_ROM_MBA		"MBA"
217*91f16700Schasinglulu #define BNX_DIR_DESC_EXP_ROM_MBA		"Multiple Boot Agent Expansion ROM"
218*91f16700Schasinglulu 	BNX_DIR_TYPE_AVS		= 7,	/* 0x07 AVS FW */
219*91f16700Schasinglulu #define BNX_DIR_NAME_AVS				"AVS"
220*91f16700Schasinglulu #define BNX_DIR_DESC_AVS				"Adaptive Voltage Scaling Firmware"
221*91f16700Schasinglulu 	BNX_DIR_TYPE_PCIE	= 8,	/* 0x08 PCIE FW */
222*91f16700Schasinglulu #define BNX_DIR_NAME_PCIE				"PCIEucode"
223*91f16700Schasinglulu #define BNX_DIR_DESC_PCIE				"PCIe Microcode"
224*91f16700Schasinglulu 	BNX_DIR_TYPE_PORT_MACRO			= 9,	/* 0x09 PORT MACRO FW */
225*91f16700Schasinglulu #define BNX_DIR_NAME_PORT_MACRO			"portMacro"
226*91f16700Schasinglulu #define BNX_DIR_DESC_PORT_MACRO			"Port Macro Firmware"
227*91f16700Schasinglulu 	BNX_DIR_TYPE_APE_FW		= 10,		/* 0x0A APE Firmware */
228*91f16700Schasinglulu #define BNX_DIR_NAME_APE_FW				"apeFW"
229*91f16700Schasinglulu #define BNX_DIR_DESC_APE_FW			"Application Processing Engine Firmware"
230*91f16700Schasinglulu 	/* 0x0B Patch firmware executed by APE ROM */
231*91f16700Schasinglulu 	BNX_DIR_TYPE_APE_PATCH		= 11,
232*91f16700Schasinglulu #define BNX_DIR_NAME_APE_PATCH			"apePatch"
233*91f16700Schasinglulu #define BNX_DIR_DESC_APE_PATCH			"APE Patch Firmware"
234*91f16700Schasinglulu 	BNX_DIR_TYPE_KONG_FW		= 12,	/* 0x0C Kong Firmware */
235*91f16700Schasinglulu #define BNX_DIR_NAME_KONG_FW		"kongFW"
236*91f16700Schasinglulu #define BNX_DIR_DESC_KONG_FW		"Kong Firmware"
237*91f16700Schasinglulu 	/* 0x0D Patch firmware executed by Kong ROM */
238*91f16700Schasinglulu 	BNX_DIR_TYPE_KONG_PATCH		= 13,
239*91f16700Schasinglulu #define BNX_DIR_NAME_KONG_PATCH			"kongPatch"
240*91f16700Schasinglulu #define BNX_DIR_DESC_KONG_PATCH			"Kong Patch Firmware"
241*91f16700Schasinglulu 	BNX_DIR_TYPE_BONO_FW		= 14,	/* 0x0E Bono Firmware */
242*91f16700Schasinglulu #define BNX_DIR_NAME_BONO_FW		"bonoFW"
243*91f16700Schasinglulu #define BNX_DIR_DESC_BONO_FW		"Bono Firmware"
244*91f16700Schasinglulu 	/* 0x0F Patch firmware executed by Bono ROM */
245*91f16700Schasinglulu 	BNX_DIR_TYPE_BONO_PATCH		= 15,
246*91f16700Schasinglulu #define BNX_DIR_NAME_BONO_PATCH			"bonoPatch"
247*91f16700Schasinglulu #define BNX_DIR_DESC_BONO_PATCH			"Bono Patch Firmware"
248*91f16700Schasinglulu 	BNX_DIR_TYPE_TANG_FW		= 16,	/* 0x10 Tang firmware */
249*91f16700Schasinglulu #define BNX_DIR_NAME_TANG_FW			"tangFW"
250*91f16700Schasinglulu #define BNX_DIR_DESC_TANG_FW			"Tang Firmware"
251*91f16700Schasinglulu 	/* 0x11 Patch firmware executed by Tang ROM */
252*91f16700Schasinglulu 	BNX_DIR_TYPE_TANG_PATCH		= 17,
253*91f16700Schasinglulu #define BNX_DIR_NAME_TANG_PATCH			"tangPatch"
254*91f16700Schasinglulu #define BNX_DIR_DESC_TANG_PATCH			"Tang Patch Firmware"
255*91f16700Schasinglulu 	/* 0x12 ChiMP firmware: Boot Code phase 2 (loaded by phase 1) */
256*91f16700Schasinglulu 	BNX_DIR_TYPE_BOOTCODE_2		= 18,
257*91f16700Schasinglulu #define BNX_DIR_NAME_BOOTCODE_2			"chimpHWRM"
258*91f16700Schasinglulu #define BNX_DIR_DESC_BOOTCODE_2			"ChiMP Hardware Resource Manager Firmware"
259*91f16700Schasinglulu 	BNX_DIR_TYPE_CCM	= 19,	/* 0x13 CCM ROM binary */
260*91f16700Schasinglulu #define	BNX_DIR_NAME_CCM	"CCM"
261*91f16700Schasinglulu #define BNX_DIR_DESC_CCM	"Comprehensive Configuration Management"
262*91f16700Schasinglulu 	/* 0x14 PCI-IDs, PCI-related configuration properties */
263*91f16700Schasinglulu 	BNX_DIR_TYPE_PCI_CFG	= 20,
264*91f16700Schasinglulu #define BNX_DIR_NAME_PCI_CFG		"pciCFG"
265*91f16700Schasinglulu #define BNX_DIR_DESC_PCI_CFG		"PCIe Configuration Data"
266*91f16700Schasinglulu 
267*91f16700Schasinglulu 	BNX_DIR_TYPE_TSCF_UCODE		= 21,	/* 0x15 TSCF micro-code */
268*91f16700Schasinglulu #define BNX_DIR_NAME_TSCF_UCODE		"PHYucode"
269*91f16700Schasinglulu #define BNX_DIR_DESC_TSCF_UCODE		"Falcon PHY Microcode"
270*91f16700Schasinglulu 	BNX_DIR_TYPE_ISCSI_BOOT		= 22,	/* 0x16 iSCSI Boot */
271*91f16700Schasinglulu #define BNX_DIR_NAME_ISCSI_BOOT			"iSCSIboot"
272*91f16700Schasinglulu #define BNX_DIR_DESC_ISCSI_BOOT			"iSCSI Boot Software Initiator"
273*91f16700Schasinglulu 	/* 0x18 iSCSI Boot IPV6 - ***DEPRECATED*** */
274*91f16700Schasinglulu 	BNX_DIR_TYPE_ISCSI_BOOT_IPV6	= 24,
275*91f16700Schasinglulu 	/* 0x19 iSCSI Boot IPV4N6 - ***DEPRECATED*** */
276*91f16700Schasinglulu 	BNX_DIR_TYPE_ISCSI_BOOT_IPV4N6	= 25,
277*91f16700Schasinglulu 	BNX_DIR_TYPE_ISCSI_BOOT_CFG	= 26,	/* 0x1a iSCSI Boot CFG v6 */
278*91f16700Schasinglulu #define BNX_DIR_NAME_ISCSI_BOOT_CFG		"iSCSIcfg"
279*91f16700Schasinglulu #define BNX_DIR_DESC_ISCSI_BOOT_CFG		"iSCSI Boot Configuration Data"
280*91f16700Schasinglulu 	BNX_DIR_TYPE_EXT_PHY		= 27,	/* 0x1b External PHY FW */
281*91f16700Schasinglulu #define BNX_DIR_NAME_EXT_PHY			"extPHYfw"
282*91f16700Schasinglulu #define BNX_DIR_DESC_EXT_PHY			"External PHY Firmware"
283*91f16700Schasinglulu 	BNX_DIR_TYPE_MODULES_PN	= 28,	/* 0x1c Modules PartNum list */
284*91f16700Schasinglulu #define BNX_DIR_NAME_MODULES_PN			"modPartNums"
285*91f16700Schasinglulu #define BNX_DIR_DESC_MODULES_PN			"Optical Modules Part Number List"
286*91f16700Schasinglulu 	BNX_DIR_TYPE_SHARED_CFG	= 40,	/* 0x28 shared configuration block */
287*91f16700Schasinglulu #define BNX_DIR_NAME_SHARED_CFG			"sharedCFG"
288*91f16700Schasinglulu #define BNX_DIR_DESC_SHARED_CFG			"Shared Configuration Data"
289*91f16700Schasinglulu 	BNX_DIR_TYPE_PORT_CFG	= 41,	/* 0x29 port configuration block */
290*91f16700Schasinglulu #define BNX_DIR_NAME_PORT_CFG			"portCFG"
291*91f16700Schasinglulu #define BNX_DIR_DESC_PORT_CFG			"Port Configuration Data"
292*91f16700Schasinglulu 	BNX_DIR_TYPE_FUNC_CFG	= 42,	/* 0x2A func configuration block */
293*91f16700Schasinglulu #define BNX_DIR_NAME_FUNC_CFG			"funcCFG"
294*91f16700Schasinglulu #define BNX_DIR_DESC_FUNC_CFG			"Function Configuration Data"
295*91f16700Schasinglulu 
296*91f16700Schasinglulu 	/* Management Firmware (TruManage) related dir entries*/
297*91f16700Schasinglulu 	/* 0x30 Management firmware configuration (see BMCFG library)*/
298*91f16700Schasinglulu 	BNX_DIR_TYPE_MGMT_CFG			= 48,
299*91f16700Schasinglulu #define BNX_DIR_NAME_MGMT_CFG			"mgmtCFG"
300*91f16700Schasinglulu #define BNX_DIR_DESC_MGMT_CFG			"Out-of-band Management Configuration Data"
301*91f16700Schasinglulu 	BNX_DIR_TYPE_MGMT_DATA	= 49,	/* 0x31 "Opaque Management Data" */
302*91f16700Schasinglulu #define BNX_DIR_NAME_MGMT_DATA			"mgmtData"
303*91f16700Schasinglulu #define BNX_DIR_DESC_MGMT_DATA			"Out-of-band Management Data"
304*91f16700Schasinglulu 	BNX_DIR_TYPE_MGMT_WEB_DATA = 50,	/* 0x32 "Web GUI" file data */
305*91f16700Schasinglulu #define BNX_DIR_NAME_MGMT_WEB_DATA		"webData"
306*91f16700Schasinglulu #define BNX_DIR_DESC_MGMT_WEB_DATA		"Out-of-band Management Web Data"
307*91f16700Schasinglulu 	/* 0x33 "Web GUI" file metadata */
308*91f16700Schasinglulu 	BNX_DIR_TYPE_MGMT_WEB_META = 51,
309*91f16700Schasinglulu #define BNX_DIR_NAME_MGMT_WEB_META		"webMeta"
310*91f16700Schasinglulu #define BNX_DIR_DESC_MGMT_WEB_META		"Out-of-band Management Web Metadata"
311*91f16700Schasinglulu 	/* 0x34 Management firmware Event Log (a.k.a. "SEL") */
312*91f16700Schasinglulu 	BNX_DIR_TYPE_MGMT_EVENT_LOG	= 52,
313*91f16700Schasinglulu #define BNX_DIR_NAME_MGMT_EVENT_LOG		"eventLog"
314*91f16700Schasinglulu #define BNX_DIR_DESC_MGMT_EVENT_LOG		"Out-of-band Management Event Log"
315*91f16700Schasinglulu 	/* 0x35 Management firmware Audit Log */
316*91f16700Schasinglulu 	BNX_DIR_TYPE_MGMT_AUDIT_LOG	= 53
317*91f16700Schasinglulu #define BNX_DIR_NAME_MGMT_AUDIT_LOG		"auditLog"
318*91f16700Schasinglulu #define BNX_DIR_DESC_MGMT_AUDIT_LOG		"Out-of-band Management Audit Log"
319*91f16700Schasinglulu 
320*91f16700Schasinglulu };
321*91f16700Schasinglulu 
322*91f16700Schasinglulu /* For backwards compatibility only, may be removed later */
323*91f16700Schasinglulu #define BNX_DIR_TYPE_ISCSI_BOOT_CFG6 BNX_DIR_TYPE_ISCSI_BOOT_CFG
324*91f16700Schasinglulu 
325*91f16700Schasinglulu /* Firmware NVM items of "APE BIN" format are identified with
326*91f16700Schasinglulu  * the following macro:
327*91f16700Schasinglulu  */
328*91f16700Schasinglulu #define BNX_DIR_TYPE_IS_APE_BIN_FMT(type)\
329*91f16700Schasinglulu 	((type) == BNX_DIR_TYPE_CHIMP_PATCH	\
330*91f16700Schasinglulu 		|| (type) == BNX_DIR_TYPE_BOOTCODE		\
331*91f16700Schasinglulu 		|| (type) == BNX_DIR_TYPE_BOOTCODE_2	\
332*91f16700Schasinglulu 		|| (type) == BNX_DIR_TYPE_APE_FW		\
333*91f16700Schasinglulu 		|| (type) == BNX_DIR_TYPE_APE_PATCH		\
334*91f16700Schasinglulu 		|| (type) == BNX_DIR_TYPE_TANG_FW		\
335*91f16700Schasinglulu 		|| (type) == BNX_DIR_TYPE_TANG_PATCH	\
336*91f16700Schasinglulu 		|| (type) == BNX_DIR_TYPE_KONG_FW		\
337*91f16700Schasinglulu 		|| (type) == BNX_DIR_TYPE_KONG_PATCH	\
338*91f16700Schasinglulu 		|| (type) == BNX_DIR_TYPE_BONO_FW		\
339*91f16700Schasinglulu 		|| (type) == BNX_DIR_TYPE_BONO_PATCH	\
340*91f16700Schasinglulu 	)
341*91f16700Schasinglulu 
342*91f16700Schasinglulu /* Other (non APE BIN) executable NVM items are identified with
343*91f16700Schasinglulu  * the following macro:
344*91f16700Schasinglulu  */
345*91f16700Schasinglulu #define BNX_DIR_TYPE_IS_OTHER_EXEC(type)\
346*91f16700Schasinglulu 	((type) == BNX_DIR_TYPE_AVS	\
347*91f16700Schasinglulu 		|| (type) == BNX_DIR_TYPE_EXP_ROM_MBA	\
348*91f16700Schasinglulu 		|| (type) == BNX_DIR_TYPE_PCIE			\
349*91f16700Schasinglulu 		|| (type) == BNX_DIR_TYPE_TSCF_UCODE	\
350*91f16700Schasinglulu 		|| (type) == BNX_DIR_TYPE_EXT_PHY		\
351*91f16700Schasinglulu 		|| (type) == BNX_DIR_TYPE_CCM			\
352*91f16700Schasinglulu 		|| (type) == BNX_DIR_TYPE_ISCSI_BOOT	\
353*91f16700Schasinglulu 	)
354*91f16700Schasinglulu 
355*91f16700Schasinglulu /* Executable NVM items (e.g. microcode, firmware, software) identified
356*91f16700Schasinglulu  * with the following macro
357*91f16700Schasinglulu  */
358*91f16700Schasinglulu #define BNX_DIR_TYPE_IS_EXECUTABLE(type)	\
359*91f16700Schasinglulu 	(BNX_DIR_TYPE_IS_APE_BIN_FMT(type) \
360*91f16700Schasinglulu 	|| BNX_DIR_TYPE_IS_OTHER_EXEC(type))
361*91f16700Schasinglulu 
362*91f16700Schasinglulu #define BNX_DIR_ORDINAL_FIRST	0	/* Ordinals are 0-based */
363*91f16700Schasinglulu 
364*91f16700Schasinglulu /* No extension flags for this directory entry */
365*91f16700Schasinglulu #define BNX_DIR_EXT_NONE	0
366*91f16700Schasinglulu /* Directory entry is inactive (not used, not hidden,
367*91f16700Schasinglulu  * not available for reuse)
368*91f16700Schasinglulu  */
369*91f16700Schasinglulu #define BNX_DIR_EXT_INACTIVE	(1 << 0)
370*91f16700Schasinglulu /* Directory content is a temporary staging location for
371*91f16700Schasinglulu  * updating the primary (non-update) directory entry contents
372*91f16700Schasinglulu  * (e.g. performing a secure firmware update)
373*91f16700Schasinglulu  */
374*91f16700Schasinglulu #define BNX_DIR_EXT_UPDATE	(1 << 1)
375*91f16700Schasinglulu 
376*91f16700Schasinglulu /* No attribute flags set for this directory entry */
377*91f16700Schasinglulu #define BNX_DIR_ATTR_NONE	0
378*91f16700Schasinglulu /* Directory entry checksum of contents is purposely incorrect */
379*91f16700Schasinglulu #define BNX_DIR_ATTR_NO_CHKSUM	(1 << 0)
380*91f16700Schasinglulu /* Directory contents are in the form of a property-stream
381*91f16700Schasinglulu  * (e.g. configuration properties)
382*91f16700Schasinglulu  */
383*91f16700Schasinglulu #define BNX_DIR_ATTR_PROP_STREAM	(1 << 1)
384*91f16700Schasinglulu /* Directory content (e.g. iSCSI boot) supports IPv4 */
385*91f16700Schasinglulu #define BNX_DIR_ATTR_IPv4	(1 << 2)
386*91f16700Schasinglulu /* Directory content (e.g. iSCSI boot) supports IPv6 */
387*91f16700Schasinglulu #define BNX_DIR_ATTR_IPv6	(1 << 3)
388*91f16700Schasinglulu /* Directory content includes standard NVM component trailer
389*91f16700Schasinglulu  * (bnxnvm_component_trailer_t)
390*91f16700Schasinglulu  */
391*91f16700Schasinglulu #define BNX_DIR_ATTR_TRAILER	(1 << 4)
392*91f16700Schasinglulu 
393*91f16700Schasinglulu /* Index of tab-delimited fields in each package log
394*91f16700Schasinglulu  * (BNX_DIR_TYPE_PKG_LOG) record (\n-terminated line):
395*91f16700Schasinglulu  */
396*91f16700Schasinglulu enum bnxnvm_pkglog_field_index {
397*91f16700Schasinglulu 	/* Package installation date/time in ISO-8601 format */
398*91f16700Schasinglulu 	BNX_PKG_LOG_FIELD_IDX_INSTALLED_TIMESTAMP	= 0,
399*91f16700Schasinglulu 	/* Installed package description (from package header) or "N/A" */
400*91f16700Schasinglulu 	BNX_PKG_LOG_FIELD_IDX_PKG_DESCRIPTION	= 1,
401*91f16700Schasinglulu 	/* Installed package version string (from package header) or "N/A" */
402*91f16700Schasinglulu 	BNX_PKG_LOG_FIELD_IDX_PKG_VERSION	= 2,
403*91f16700Schasinglulu 	/* Installed package creation/modification timestamp (ISO-8601) */
404*91f16700Schasinglulu 	BNX_PKG_LOG_FIELD_IDX_PKG_TIMESTAMP = 3,
405*91f16700Schasinglulu 	/* Installed package checksum in hexadecimal (CRC-32) or "N/A" */
406*91f16700Schasinglulu 	BNX_PKG_LOG_FIELD_IDX_PKG_CHECKSUM	= 4,
407*91f16700Schasinglulu 	/* Total number of packaged items applied in this installation */
408*91f16700Schasinglulu 	BNX_PKG_LOG_FIELD_IDX_INSTALLED_ITEMS	= 5,
409*91f16700Schasinglulu 	/* Hexadecimal bit-mask identifying which items were installed */
410*91f16700Schasinglulu 	BNX_PKG_LOG_FIELD_IDX_INSTALLED_MASK	= 6
411*91f16700Schasinglulu };
412*91f16700Schasinglulu 
413*91f16700Schasinglulu #if !defined(__GNUC__)
414*91f16700Schasinglulu #ifndef DOS_DRIVERS
415*91f16700Schasinglulu 	#pragma pack(pop)		/* original packing */
416*91f16700Schasinglulu #endif
417*91f16700Schasinglulu #endif
418*91f16700Schasinglulu 
419*91f16700Schasinglulu #endif /* Don't add anything after this line */
420