1*4882a593Smuzhiyun /***********************license start***************
2*4882a593Smuzhiyun * Author: Cavium Networks
3*4882a593Smuzhiyun *
4*4882a593Smuzhiyun * Contact: support@caviumnetworks.com
5*4882a593Smuzhiyun * This file is part of the OCTEON SDK
6*4882a593Smuzhiyun *
7*4882a593Smuzhiyun * Copyright (c) 2003-2008 Cavium Networks
8*4882a593Smuzhiyun *
9*4882a593Smuzhiyun * This file is free software; you can redistribute it and/or modify
10*4882a593Smuzhiyun * it under the terms of the GNU General Public License, Version 2, as
11*4882a593Smuzhiyun * published by the Free Software Foundation.
12*4882a593Smuzhiyun *
13*4882a593Smuzhiyun * This file is distributed in the hope that it will be useful, but
14*4882a593Smuzhiyun * AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
15*4882a593Smuzhiyun * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
16*4882a593Smuzhiyun * NONINFRINGEMENT. See the GNU General Public License for more
17*4882a593Smuzhiyun * details.
18*4882a593Smuzhiyun *
19*4882a593Smuzhiyun * You should have received a copy of the GNU General Public License
20*4882a593Smuzhiyun * along with this file; if not, write to the Free Software
21*4882a593Smuzhiyun * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22*4882a593Smuzhiyun * or visit http://www.gnu.org/licenses/.
23*4882a593Smuzhiyun *
24*4882a593Smuzhiyun * This file may also be available under a different license from Cavium.
25*4882a593Smuzhiyun * Contact Cavium Networks for more information
26*4882a593Smuzhiyun ***********************license end**************************************/
27*4882a593Smuzhiyun
28*4882a593Smuzhiyun /*
29*4882a593Smuzhiyun * Header file containing the ABI with the bootloader.
30*4882a593Smuzhiyun */
31*4882a593Smuzhiyun
32*4882a593Smuzhiyun #ifndef __CVMX_BOOTINFO_H__
33*4882a593Smuzhiyun #define __CVMX_BOOTINFO_H__
34*4882a593Smuzhiyun
35*4882a593Smuzhiyun #include "cvmx-coremask.h"
36*4882a593Smuzhiyun
37*4882a593Smuzhiyun /*
38*4882a593Smuzhiyun * Current major and minor versions of the CVMX bootinfo block that is
39*4882a593Smuzhiyun * passed from the bootloader to the application. This is versioned
40*4882a593Smuzhiyun * so that applications can properly handle multiple bootloader
41*4882a593Smuzhiyun * versions.
42*4882a593Smuzhiyun */
43*4882a593Smuzhiyun #define CVMX_BOOTINFO_MAJ_VER 1
44*4882a593Smuzhiyun #define CVMX_BOOTINFO_MIN_VER 4
45*4882a593Smuzhiyun
46*4882a593Smuzhiyun #if (CVMX_BOOTINFO_MAJ_VER == 1)
47*4882a593Smuzhiyun #define CVMX_BOOTINFO_OCTEON_SERIAL_LEN 20
48*4882a593Smuzhiyun /*
49*4882a593Smuzhiyun * This structure is populated by the bootloader. For binary
50*4882a593Smuzhiyun * compatibility the only changes that should be made are
51*4882a593Smuzhiyun * adding members to the end of the structure, and the minor
52*4882a593Smuzhiyun * version should be incremented at that time.
53*4882a593Smuzhiyun * If an incompatible change is made, the major version
54*4882a593Smuzhiyun * must be incremented, and the minor version should be reset
55*4882a593Smuzhiyun * to 0.
56*4882a593Smuzhiyun */
57*4882a593Smuzhiyun struct cvmx_bootinfo {
58*4882a593Smuzhiyun #ifdef __BIG_ENDIAN_BITFIELD
59*4882a593Smuzhiyun uint32_t major_version;
60*4882a593Smuzhiyun uint32_t minor_version;
61*4882a593Smuzhiyun
62*4882a593Smuzhiyun uint64_t stack_top;
63*4882a593Smuzhiyun uint64_t heap_base;
64*4882a593Smuzhiyun uint64_t heap_end;
65*4882a593Smuzhiyun uint64_t desc_vaddr;
66*4882a593Smuzhiyun
67*4882a593Smuzhiyun uint32_t exception_base_addr;
68*4882a593Smuzhiyun uint32_t stack_size;
69*4882a593Smuzhiyun uint32_t flags;
70*4882a593Smuzhiyun uint32_t core_mask;
71*4882a593Smuzhiyun /* DRAM size in megabytes */
72*4882a593Smuzhiyun uint32_t dram_size;
73*4882a593Smuzhiyun /* physical address of free memory descriptor block*/
74*4882a593Smuzhiyun uint32_t phy_mem_desc_addr;
75*4882a593Smuzhiyun /* used to pass flags from app to debugger */
76*4882a593Smuzhiyun uint32_t debugger_flags_base_addr;
77*4882a593Smuzhiyun
78*4882a593Smuzhiyun /* CPU clock speed, in hz */
79*4882a593Smuzhiyun uint32_t eclock_hz;
80*4882a593Smuzhiyun
81*4882a593Smuzhiyun /* DRAM clock speed, in hz */
82*4882a593Smuzhiyun uint32_t dclock_hz;
83*4882a593Smuzhiyun
84*4882a593Smuzhiyun uint32_t reserved0;
85*4882a593Smuzhiyun uint16_t board_type;
86*4882a593Smuzhiyun uint8_t board_rev_major;
87*4882a593Smuzhiyun uint8_t board_rev_minor;
88*4882a593Smuzhiyun uint16_t reserved1;
89*4882a593Smuzhiyun uint8_t reserved2;
90*4882a593Smuzhiyun uint8_t reserved3;
91*4882a593Smuzhiyun char board_serial_number[CVMX_BOOTINFO_OCTEON_SERIAL_LEN];
92*4882a593Smuzhiyun uint8_t mac_addr_base[6];
93*4882a593Smuzhiyun uint8_t mac_addr_count;
94*4882a593Smuzhiyun #if (CVMX_BOOTINFO_MIN_VER >= 1)
95*4882a593Smuzhiyun /*
96*4882a593Smuzhiyun * Several boards support compact flash on the Octeon boot
97*4882a593Smuzhiyun * bus. The CF memory spaces may be mapped to different
98*4882a593Smuzhiyun * addresses on different boards. These are the physical
99*4882a593Smuzhiyun * addresses, so care must be taken to use the correct
100*4882a593Smuzhiyun * XKPHYS/KSEG0 addressing depending on the application's
101*4882a593Smuzhiyun * ABI. These values will be 0 if CF is not present.
102*4882a593Smuzhiyun */
103*4882a593Smuzhiyun uint64_t compact_flash_common_base_addr;
104*4882a593Smuzhiyun uint64_t compact_flash_attribute_base_addr;
105*4882a593Smuzhiyun /*
106*4882a593Smuzhiyun * Base address of the LED display (as on EBT3000 board)
107*4882a593Smuzhiyun * This will be 0 if LED display not present.
108*4882a593Smuzhiyun */
109*4882a593Smuzhiyun uint64_t led_display_base_addr;
110*4882a593Smuzhiyun #endif
111*4882a593Smuzhiyun #if (CVMX_BOOTINFO_MIN_VER >= 2)
112*4882a593Smuzhiyun /* DFA reference clock in hz (if applicable)*/
113*4882a593Smuzhiyun uint32_t dfa_ref_clock_hz;
114*4882a593Smuzhiyun
115*4882a593Smuzhiyun /*
116*4882a593Smuzhiyun * flags indicating various configuration options. These
117*4882a593Smuzhiyun * flags supercede the 'flags' variable and should be used
118*4882a593Smuzhiyun * instead if available.
119*4882a593Smuzhiyun */
120*4882a593Smuzhiyun uint32_t config_flags;
121*4882a593Smuzhiyun #endif
122*4882a593Smuzhiyun #if (CVMX_BOOTINFO_MIN_VER >= 3)
123*4882a593Smuzhiyun /*
124*4882a593Smuzhiyun * Address of the OF Flattened Device Tree structure
125*4882a593Smuzhiyun * describing the board.
126*4882a593Smuzhiyun */
127*4882a593Smuzhiyun uint64_t fdt_addr;
128*4882a593Smuzhiyun #endif
129*4882a593Smuzhiyun #if (CVMX_BOOTINFO_MIN_VER >= 4)
130*4882a593Smuzhiyun /*
131*4882a593Smuzhiyun * Coremask used for processors with more than 32 cores
132*4882a593Smuzhiyun * or with OCI. This replaces core_mask.
133*4882a593Smuzhiyun */
134*4882a593Smuzhiyun struct cvmx_coremask ext_core_mask;
135*4882a593Smuzhiyun #endif
136*4882a593Smuzhiyun #else /* __BIG_ENDIAN */
137*4882a593Smuzhiyun /*
138*4882a593Smuzhiyun * Little-Endian: When the CPU mode is switched to
139*4882a593Smuzhiyun * little-endian, the view of the structure has some of the
140*4882a593Smuzhiyun * fields swapped.
141*4882a593Smuzhiyun */
142*4882a593Smuzhiyun uint32_t minor_version;
143*4882a593Smuzhiyun uint32_t major_version;
144*4882a593Smuzhiyun
145*4882a593Smuzhiyun uint64_t stack_top;
146*4882a593Smuzhiyun uint64_t heap_base;
147*4882a593Smuzhiyun uint64_t heap_end;
148*4882a593Smuzhiyun uint64_t desc_vaddr;
149*4882a593Smuzhiyun
150*4882a593Smuzhiyun uint32_t stack_size;
151*4882a593Smuzhiyun uint32_t exception_base_addr;
152*4882a593Smuzhiyun
153*4882a593Smuzhiyun uint32_t core_mask;
154*4882a593Smuzhiyun uint32_t flags;
155*4882a593Smuzhiyun
156*4882a593Smuzhiyun uint32_t phy_mem_desc_addr;
157*4882a593Smuzhiyun uint32_t dram_size;
158*4882a593Smuzhiyun
159*4882a593Smuzhiyun uint32_t eclock_hz;
160*4882a593Smuzhiyun uint32_t debugger_flags_base_addr;
161*4882a593Smuzhiyun
162*4882a593Smuzhiyun uint32_t reserved0;
163*4882a593Smuzhiyun uint32_t dclock_hz;
164*4882a593Smuzhiyun
165*4882a593Smuzhiyun uint8_t reserved3;
166*4882a593Smuzhiyun uint8_t reserved2;
167*4882a593Smuzhiyun uint16_t reserved1;
168*4882a593Smuzhiyun uint8_t board_rev_minor;
169*4882a593Smuzhiyun uint8_t board_rev_major;
170*4882a593Smuzhiyun uint16_t board_type;
171*4882a593Smuzhiyun
172*4882a593Smuzhiyun char board_serial_number[CVMX_BOOTINFO_OCTEON_SERIAL_LEN];
173*4882a593Smuzhiyun uint8_t mac_addr_base[6];
174*4882a593Smuzhiyun uint8_t mac_addr_count;
175*4882a593Smuzhiyun uint8_t pad[5];
176*4882a593Smuzhiyun
177*4882a593Smuzhiyun #if (CVMX_BOOTINFO_MIN_VER >= 1)
178*4882a593Smuzhiyun uint64_t compact_flash_common_base_addr;
179*4882a593Smuzhiyun uint64_t compact_flash_attribute_base_addr;
180*4882a593Smuzhiyun uint64_t led_display_base_addr;
181*4882a593Smuzhiyun #endif
182*4882a593Smuzhiyun #if (CVMX_BOOTINFO_MIN_VER >= 2)
183*4882a593Smuzhiyun uint32_t config_flags;
184*4882a593Smuzhiyun uint32_t dfa_ref_clock_hz;
185*4882a593Smuzhiyun #endif
186*4882a593Smuzhiyun #if (CVMX_BOOTINFO_MIN_VER >= 3)
187*4882a593Smuzhiyun uint64_t fdt_addr;
188*4882a593Smuzhiyun #endif
189*4882a593Smuzhiyun #if (CVMX_BOOTINFO_MIN_VER >= 4)
190*4882a593Smuzhiyun struct cvmx_coremask ext_core_mask;
191*4882a593Smuzhiyun #endif
192*4882a593Smuzhiyun #endif
193*4882a593Smuzhiyun };
194*4882a593Smuzhiyun
195*4882a593Smuzhiyun #define CVMX_BOOTINFO_CFG_FLAG_PCI_HOST (1ull << 0)
196*4882a593Smuzhiyun #define CVMX_BOOTINFO_CFG_FLAG_PCI_TARGET (1ull << 1)
197*4882a593Smuzhiyun #define CVMX_BOOTINFO_CFG_FLAG_DEBUG (1ull << 2)
198*4882a593Smuzhiyun #define CVMX_BOOTINFO_CFG_FLAG_NO_MAGIC (1ull << 3)
199*4882a593Smuzhiyun /* This flag is set if the TLB mappings are not contained in the
200*4882a593Smuzhiyun * 0x10000000 - 0x20000000 boot bus region. */
201*4882a593Smuzhiyun #define CVMX_BOOTINFO_CFG_FLAG_OVERSIZE_TLB_MAPPING (1ull << 4)
202*4882a593Smuzhiyun #define CVMX_BOOTINFO_CFG_FLAG_BREAK (1ull << 5)
203*4882a593Smuzhiyun
204*4882a593Smuzhiyun #endif /* (CVMX_BOOTINFO_MAJ_VER == 1) */
205*4882a593Smuzhiyun
206*4882a593Smuzhiyun /* Type defines for board and chip types */
207*4882a593Smuzhiyun enum cvmx_board_types_enum {
208*4882a593Smuzhiyun CVMX_BOARD_TYPE_NULL = 0,
209*4882a593Smuzhiyun CVMX_BOARD_TYPE_SIM = 1,
210*4882a593Smuzhiyun CVMX_BOARD_TYPE_EBT3000 = 2,
211*4882a593Smuzhiyun CVMX_BOARD_TYPE_KODAMA = 3,
212*4882a593Smuzhiyun CVMX_BOARD_TYPE_NIAGARA = 4,
213*4882a593Smuzhiyun CVMX_BOARD_TYPE_NAC38 = 5, /* formerly NAO38 */
214*4882a593Smuzhiyun CVMX_BOARD_TYPE_THUNDER = 6,
215*4882a593Smuzhiyun CVMX_BOARD_TYPE_TRANTOR = 7,
216*4882a593Smuzhiyun CVMX_BOARD_TYPE_EBH3000 = 8,
217*4882a593Smuzhiyun CVMX_BOARD_TYPE_EBH3100 = 9,
218*4882a593Smuzhiyun CVMX_BOARD_TYPE_HIKARI = 10,
219*4882a593Smuzhiyun CVMX_BOARD_TYPE_CN3010_EVB_HS5 = 11,
220*4882a593Smuzhiyun CVMX_BOARD_TYPE_CN3005_EVB_HS5 = 12,
221*4882a593Smuzhiyun CVMX_BOARD_TYPE_KBP = 13,
222*4882a593Smuzhiyun /* Deprecated, CVMX_BOARD_TYPE_CN3010_EVB_HS5 supports the CN3020 */
223*4882a593Smuzhiyun CVMX_BOARD_TYPE_CN3020_EVB_HS5 = 14,
224*4882a593Smuzhiyun CVMX_BOARD_TYPE_EBT5800 = 15,
225*4882a593Smuzhiyun CVMX_BOARD_TYPE_NICPRO2 = 16,
226*4882a593Smuzhiyun CVMX_BOARD_TYPE_EBH5600 = 17,
227*4882a593Smuzhiyun CVMX_BOARD_TYPE_EBH5601 = 18,
228*4882a593Smuzhiyun CVMX_BOARD_TYPE_EBH5200 = 19,
229*4882a593Smuzhiyun CVMX_BOARD_TYPE_BBGW_REF = 20,
230*4882a593Smuzhiyun CVMX_BOARD_TYPE_NIC_XLE_4G = 21,
231*4882a593Smuzhiyun CVMX_BOARD_TYPE_EBT5600 = 22,
232*4882a593Smuzhiyun CVMX_BOARD_TYPE_EBH5201 = 23,
233*4882a593Smuzhiyun CVMX_BOARD_TYPE_EBT5200 = 24,
234*4882a593Smuzhiyun CVMX_BOARD_TYPE_CB5600 = 25,
235*4882a593Smuzhiyun CVMX_BOARD_TYPE_CB5601 = 26,
236*4882a593Smuzhiyun CVMX_BOARD_TYPE_CB5200 = 27,
237*4882a593Smuzhiyun /* Special 'generic' board type, supports many boards */
238*4882a593Smuzhiyun CVMX_BOARD_TYPE_GENERIC = 28,
239*4882a593Smuzhiyun CVMX_BOARD_TYPE_EBH5610 = 29,
240*4882a593Smuzhiyun CVMX_BOARD_TYPE_LANAI2_A = 30,
241*4882a593Smuzhiyun CVMX_BOARD_TYPE_LANAI2_U = 31,
242*4882a593Smuzhiyun CVMX_BOARD_TYPE_EBB5600 = 32,
243*4882a593Smuzhiyun CVMX_BOARD_TYPE_EBB6300 = 33,
244*4882a593Smuzhiyun CVMX_BOARD_TYPE_NIC_XLE_10G = 34,
245*4882a593Smuzhiyun CVMX_BOARD_TYPE_LANAI2_G = 35,
246*4882a593Smuzhiyun CVMX_BOARD_TYPE_EBT5810 = 36,
247*4882a593Smuzhiyun CVMX_BOARD_TYPE_NIC10E = 37,
248*4882a593Smuzhiyun CVMX_BOARD_TYPE_EP6300C = 38,
249*4882a593Smuzhiyun CVMX_BOARD_TYPE_EBB6800 = 39,
250*4882a593Smuzhiyun CVMX_BOARD_TYPE_NIC4E = 40,
251*4882a593Smuzhiyun CVMX_BOARD_TYPE_NIC2E = 41,
252*4882a593Smuzhiyun CVMX_BOARD_TYPE_EBB6600 = 42,
253*4882a593Smuzhiyun CVMX_BOARD_TYPE_REDWING = 43,
254*4882a593Smuzhiyun CVMX_BOARD_TYPE_NIC68_4 = 44,
255*4882a593Smuzhiyun CVMX_BOARD_TYPE_NIC10E_66 = 45,
256*4882a593Smuzhiyun CVMX_BOARD_TYPE_MAX,
257*4882a593Smuzhiyun
258*4882a593Smuzhiyun /*
259*4882a593Smuzhiyun * The range from CVMX_BOARD_TYPE_MAX to
260*4882a593Smuzhiyun * CVMX_BOARD_TYPE_CUST_DEFINED_MIN is reserved for future
261*4882a593Smuzhiyun * SDK use.
262*4882a593Smuzhiyun */
263*4882a593Smuzhiyun
264*4882a593Smuzhiyun /*
265*4882a593Smuzhiyun * Set aside a range for customer boards. These numbers are managed
266*4882a593Smuzhiyun * by Cavium.
267*4882a593Smuzhiyun */
268*4882a593Smuzhiyun CVMX_BOARD_TYPE_CUST_DEFINED_MIN = 10000,
269*4882a593Smuzhiyun CVMX_BOARD_TYPE_CUST_WSX16 = 10001,
270*4882a593Smuzhiyun CVMX_BOARD_TYPE_CUST_NS0216 = 10002,
271*4882a593Smuzhiyun CVMX_BOARD_TYPE_CUST_NB5 = 10003,
272*4882a593Smuzhiyun CVMX_BOARD_TYPE_CUST_WMR500 = 10004,
273*4882a593Smuzhiyun CVMX_BOARD_TYPE_CUST_ITB101 = 10005,
274*4882a593Smuzhiyun CVMX_BOARD_TYPE_CUST_NTE102 = 10006,
275*4882a593Smuzhiyun CVMX_BOARD_TYPE_CUST_AGS103 = 10007,
276*4882a593Smuzhiyun CVMX_BOARD_TYPE_CUST_GST104 = 10008,
277*4882a593Smuzhiyun CVMX_BOARD_TYPE_CUST_GCT105 = 10009,
278*4882a593Smuzhiyun CVMX_BOARD_TYPE_CUST_AGS106 = 10010,
279*4882a593Smuzhiyun CVMX_BOARD_TYPE_CUST_SGM107 = 10011,
280*4882a593Smuzhiyun CVMX_BOARD_TYPE_CUST_GCT108 = 10012,
281*4882a593Smuzhiyun CVMX_BOARD_TYPE_CUST_AGS109 = 10013,
282*4882a593Smuzhiyun CVMX_BOARD_TYPE_CUST_GCT110 = 10014,
283*4882a593Smuzhiyun CVMX_BOARD_TYPE_CUST_L2_AIR_SENDER = 10015,
284*4882a593Smuzhiyun CVMX_BOARD_TYPE_CUST_L2_AIR_RECEIVER = 10016,
285*4882a593Smuzhiyun CVMX_BOARD_TYPE_CUST_L2_ACCTON2_TX = 10017,
286*4882a593Smuzhiyun CVMX_BOARD_TYPE_CUST_L2_ACCTON2_RX = 10018,
287*4882a593Smuzhiyun CVMX_BOARD_TYPE_CUST_L2_WSTRNSNIC_TX = 10019,
288*4882a593Smuzhiyun CVMX_BOARD_TYPE_CUST_L2_WSTRNSNIC_RX = 10020,
289*4882a593Smuzhiyun CVMX_BOARD_TYPE_CUST_L2_ZINWELL = 10021,
290*4882a593Smuzhiyun CVMX_BOARD_TYPE_CUST_DEFINED_MAX = 20000,
291*4882a593Smuzhiyun
292*4882a593Smuzhiyun /*
293*4882a593Smuzhiyun * Set aside a range for customer private use. The SDK won't
294*4882a593Smuzhiyun * use any numbers in this range.
295*4882a593Smuzhiyun */
296*4882a593Smuzhiyun CVMX_BOARD_TYPE_CUST_PRIVATE_MIN = 20001,
297*4882a593Smuzhiyun CVMX_BOARD_TYPE_UBNT_E100 = 20002,
298*4882a593Smuzhiyun CVMX_BOARD_TYPE_UBNT_E200 = 20003,
299*4882a593Smuzhiyun CVMX_BOARD_TYPE_UBNT_E220 = 20005,
300*4882a593Smuzhiyun CVMX_BOARD_TYPE_CUST_DSR1000N = 20006,
301*4882a593Smuzhiyun CVMX_BOARD_TYPE_KONTRON_S1901 = 21901,
302*4882a593Smuzhiyun CVMX_BOARD_TYPE_CUST_PRIVATE_MAX = 30000,
303*4882a593Smuzhiyun
304*4882a593Smuzhiyun /* The remaining range is reserved for future use. */
305*4882a593Smuzhiyun };
306*4882a593Smuzhiyun
307*4882a593Smuzhiyun enum cvmx_chip_types_enum {
308*4882a593Smuzhiyun CVMX_CHIP_TYPE_NULL = 0,
309*4882a593Smuzhiyun CVMX_CHIP_SIM_TYPE_DEPRECATED = 1,
310*4882a593Smuzhiyun CVMX_CHIP_TYPE_OCTEON_SAMPLE = 2,
311*4882a593Smuzhiyun CVMX_CHIP_TYPE_MAX,
312*4882a593Smuzhiyun };
313*4882a593Smuzhiyun
314*4882a593Smuzhiyun /* Compatibility alias for NAC38 name change, planned to be removed
315*4882a593Smuzhiyun * from SDK 1.7 */
316*4882a593Smuzhiyun #define CVMX_BOARD_TYPE_NAO38 CVMX_BOARD_TYPE_NAC38
317*4882a593Smuzhiyun
318*4882a593Smuzhiyun /* Functions to return string based on type */
319*4882a593Smuzhiyun #define ENUM_BRD_TYPE_CASE(x) \
320*4882a593Smuzhiyun case x: return (&#x[16]); /* Skip CVMX_BOARD_TYPE_ */
cvmx_board_type_to_string(enum cvmx_board_types_enum type)321*4882a593Smuzhiyun static inline const char *cvmx_board_type_to_string(enum
322*4882a593Smuzhiyun cvmx_board_types_enum type)
323*4882a593Smuzhiyun {
324*4882a593Smuzhiyun switch (type) {
325*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NULL)
326*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_SIM)
327*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBT3000)
328*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_KODAMA)
329*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIAGARA)
330*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NAC38)
331*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_THUNDER)
332*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_TRANTOR)
333*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH3000)
334*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH3100)
335*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_HIKARI)
336*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CN3010_EVB_HS5)
337*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CN3005_EVB_HS5)
338*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_KBP)
339*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CN3020_EVB_HS5)
340*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBT5800)
341*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NICPRO2)
342*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH5600)
343*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH5601)
344*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH5200)
345*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_BBGW_REF)
346*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC_XLE_4G)
347*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBT5600)
348*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH5201)
349*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBT5200)
350*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CB5600)
351*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CB5601)
352*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CB5200)
353*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_GENERIC)
354*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH5610)
355*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_LANAI2_A)
356*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_LANAI2_U)
357*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBB5600)
358*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBB6300)
359*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC_XLE_10G)
360*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_LANAI2_G)
361*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBT5810)
362*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC10E)
363*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EP6300C)
364*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBB6800)
365*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC4E)
366*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC2E)
367*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBB6600)
368*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_REDWING)
369*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC68_4)
370*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC10E_66)
371*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_MAX)
372*4882a593Smuzhiyun
373*4882a593Smuzhiyun /* Customer boards listed here */
374*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_DEFINED_MIN)
375*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_WSX16)
376*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_NS0216)
377*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_NB5)
378*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_WMR500)
379*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_ITB101)
380*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_NTE102)
381*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_AGS103)
382*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_GST104)
383*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_GCT105)
384*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_AGS106)
385*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_SGM107)
386*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_GCT108)
387*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_AGS109)
388*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_GCT110)
389*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_AIR_SENDER)
390*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_AIR_RECEIVER)
391*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_ACCTON2_TX)
392*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_ACCTON2_RX)
393*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_WSTRNSNIC_TX)
394*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_WSTRNSNIC_RX)
395*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_ZINWELL)
396*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_DEFINED_MAX)
397*4882a593Smuzhiyun
398*4882a593Smuzhiyun /* Customer private range */
399*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_PRIVATE_MIN)
400*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_UBNT_E100)
401*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_UBNT_E200)
402*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_UBNT_E220)
403*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_DSR1000N)
404*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_KONTRON_S1901)
405*4882a593Smuzhiyun ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_PRIVATE_MAX)
406*4882a593Smuzhiyun }
407*4882a593Smuzhiyun return NULL;
408*4882a593Smuzhiyun }
409*4882a593Smuzhiyun
410*4882a593Smuzhiyun #define ENUM_CHIP_TYPE_CASE(x) \
411*4882a593Smuzhiyun case x: return (&#x[15]); /* Skip CVMX_CHIP_TYPE */
cvmx_chip_type_to_string(enum cvmx_chip_types_enum type)412*4882a593Smuzhiyun static inline const char *cvmx_chip_type_to_string(enum
413*4882a593Smuzhiyun cvmx_chip_types_enum type)
414*4882a593Smuzhiyun {
415*4882a593Smuzhiyun switch (type) {
416*4882a593Smuzhiyun ENUM_CHIP_TYPE_CASE(CVMX_CHIP_TYPE_NULL)
417*4882a593Smuzhiyun ENUM_CHIP_TYPE_CASE(CVMX_CHIP_SIM_TYPE_DEPRECATED)
418*4882a593Smuzhiyun ENUM_CHIP_TYPE_CASE(CVMX_CHIP_TYPE_OCTEON_SAMPLE)
419*4882a593Smuzhiyun ENUM_CHIP_TYPE_CASE(CVMX_CHIP_TYPE_MAX)
420*4882a593Smuzhiyun }
421*4882a593Smuzhiyun return "Unsupported Chip";
422*4882a593Smuzhiyun }
423*4882a593Smuzhiyun
424*4882a593Smuzhiyun #endif /* __CVMX_BOOTINFO_H__ */
425