cvmx-bootinfo.h 14 KB

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