Back to home page

OSCL-LXR

 
 

    


0001 /***********************license start***************
0002  * Author: Cavium Networks
0003  *
0004  * Contact: support@caviumnetworks.com
0005  * This file is part of the OCTEON SDK
0006  *
0007  * Copyright (c) 2003-2008 Cavium Networks
0008  *
0009  * This file is free software; you can redistribute it and/or modify
0010  * it under the terms of the GNU General Public License, Version 2, as
0011  * published by the Free Software Foundation.
0012  *
0013  * This file is distributed in the hope that it will be useful, but
0014  * AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
0015  * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
0016  * NONINFRINGEMENT.  See the GNU General Public License for more
0017  * details.
0018  *
0019  * You should have received a copy of the GNU General Public License
0020  * along with this file; if not, write to the Free Software
0021  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
0022  * or visit http://www.gnu.org/licenses/.
0023  *
0024  * This file may also be available under a different license from Cavium.
0025  * Contact Cavium Networks for more information
0026  ***********************license end**************************************/
0027 
0028 /*
0029  * Header file containing the ABI with the bootloader.
0030  */
0031 
0032 #ifndef __CVMX_BOOTINFO_H__
0033 #define __CVMX_BOOTINFO_H__
0034 
0035 #include "cvmx-coremask.h"
0036 
0037 /*
0038  * Current major and minor versions of the CVMX bootinfo block that is
0039  * passed from the bootloader to the application.  This is versioned
0040  * so that applications can properly handle multiple bootloader
0041  * versions.
0042  */
0043 #define CVMX_BOOTINFO_MAJ_VER 1
0044 #define CVMX_BOOTINFO_MIN_VER 4
0045 
0046 #if (CVMX_BOOTINFO_MAJ_VER == 1)
0047 #define CVMX_BOOTINFO_OCTEON_SERIAL_LEN 20
0048 /*
0049  * This structure is populated by the bootloader.  For binary
0050  * compatibility the only changes that should be made are
0051  * adding members to the end of the structure, and the minor
0052  * version should be incremented at that time.
0053  * If an incompatible change is made, the major version
0054  * must be incremented, and the minor version should be reset
0055  * to 0.
0056  */
0057 struct cvmx_bootinfo {
0058 #ifdef __BIG_ENDIAN_BITFIELD
0059     uint32_t major_version;
0060     uint32_t minor_version;
0061 
0062     uint64_t stack_top;
0063     uint64_t heap_base;
0064     uint64_t heap_end;
0065     uint64_t desc_vaddr;
0066 
0067     uint32_t exception_base_addr;
0068     uint32_t stack_size;
0069     uint32_t flags;
0070     uint32_t core_mask;
0071     /* DRAM size in megabytes */
0072     uint32_t dram_size;
0073     /* physical address of free memory descriptor block*/
0074     uint32_t phy_mem_desc_addr;
0075     /* used to pass flags from app to debugger */
0076     uint32_t debugger_flags_base_addr;
0077 
0078     /* CPU clock speed, in hz */
0079     uint32_t eclock_hz;
0080 
0081     /* DRAM clock speed, in hz */
0082     uint32_t dclock_hz;
0083 
0084     uint32_t reserved0;
0085     uint16_t board_type;
0086     uint8_t board_rev_major;
0087     uint8_t board_rev_minor;
0088     uint16_t reserved1;
0089     uint8_t reserved2;
0090     uint8_t reserved3;
0091     char board_serial_number[CVMX_BOOTINFO_OCTEON_SERIAL_LEN];
0092     uint8_t mac_addr_base[6];
0093     uint8_t mac_addr_count;
0094 #if (CVMX_BOOTINFO_MIN_VER >= 1)
0095     /*
0096      * Several boards support compact flash on the Octeon boot
0097      * bus.  The CF memory spaces may be mapped to different
0098      * addresses on different boards.  These are the physical
0099      * addresses, so care must be taken to use the correct
0100      * XKPHYS/KSEG0 addressing depending on the application's
0101      * ABI.  These values will be 0 if CF is not present.
0102      */
0103     uint64_t compact_flash_common_base_addr;
0104     uint64_t compact_flash_attribute_base_addr;
0105     /*
0106      * Base address of the LED display (as on EBT3000 board)
0107      * This will be 0 if LED display not present.
0108      */
0109     uint64_t led_display_base_addr;
0110 #endif
0111 #if (CVMX_BOOTINFO_MIN_VER >= 2)
0112     /* DFA reference clock in hz (if applicable)*/
0113     uint32_t dfa_ref_clock_hz;
0114 
0115     /*
0116      * flags indicating various configuration options.  These
0117      * flags supercede the 'flags' variable and should be used
0118      * instead if available.
0119      */
0120     uint32_t config_flags;
0121 #endif
0122 #if (CVMX_BOOTINFO_MIN_VER >= 3)
0123     /*
0124      * Address of the OF Flattened Device Tree structure
0125      * describing the board.
0126      */
0127     uint64_t fdt_addr;
0128 #endif
0129 #if (CVMX_BOOTINFO_MIN_VER >= 4)
0130     /*
0131      * Coremask used for processors with more than 32 cores
0132      * or with OCI.  This replaces core_mask.
0133      */
0134     struct cvmx_coremask ext_core_mask;
0135 #endif
0136 #else               /* __BIG_ENDIAN */
0137     /*
0138      * Little-Endian: When the CPU mode is switched to
0139      * little-endian, the view of the structure has some of the
0140      * fields swapped.
0141      */
0142     uint32_t minor_version;
0143     uint32_t major_version;
0144 
0145     uint64_t stack_top;
0146     uint64_t heap_base;
0147     uint64_t heap_end;
0148     uint64_t desc_vaddr;
0149 
0150     uint32_t stack_size;
0151     uint32_t exception_base_addr;
0152 
0153     uint32_t core_mask;
0154     uint32_t flags;
0155 
0156     uint32_t phy_mem_desc_addr;
0157     uint32_t dram_size;
0158 
0159     uint32_t eclock_hz;
0160     uint32_t debugger_flags_base_addr;
0161 
0162     uint32_t reserved0;
0163     uint32_t dclock_hz;
0164 
0165     uint8_t reserved3;
0166     uint8_t reserved2;
0167     uint16_t reserved1;
0168     uint8_t board_rev_minor;
0169     uint8_t board_rev_major;
0170     uint16_t board_type;
0171 
0172     char board_serial_number[CVMX_BOOTINFO_OCTEON_SERIAL_LEN];
0173     uint8_t mac_addr_base[6];
0174     uint8_t mac_addr_count;
0175     uint8_t pad[5];
0176 
0177 #if (CVMX_BOOTINFO_MIN_VER >= 1)
0178     uint64_t compact_flash_common_base_addr;
0179     uint64_t compact_flash_attribute_base_addr;
0180     uint64_t led_display_base_addr;
0181 #endif
0182 #if (CVMX_BOOTINFO_MIN_VER >= 2)
0183     uint32_t config_flags;
0184     uint32_t dfa_ref_clock_hz;
0185 #endif
0186 #if (CVMX_BOOTINFO_MIN_VER >= 3)
0187     uint64_t fdt_addr;
0188 #endif
0189 #if (CVMX_BOOTINFO_MIN_VER >= 4)
0190     struct cvmx_coremask ext_core_mask;
0191 #endif
0192 #endif
0193 };
0194 
0195 #define CVMX_BOOTINFO_CFG_FLAG_PCI_HOST         (1ull << 0)
0196 #define CVMX_BOOTINFO_CFG_FLAG_PCI_TARGET       (1ull << 1)
0197 #define CVMX_BOOTINFO_CFG_FLAG_DEBUG            (1ull << 2)
0198 #define CVMX_BOOTINFO_CFG_FLAG_NO_MAGIC         (1ull << 3)
0199 /* This flag is set if the TLB mappings are not contained in the
0200  * 0x10000000 - 0x20000000 boot bus region. */
0201 #define CVMX_BOOTINFO_CFG_FLAG_OVERSIZE_TLB_MAPPING (1ull << 4)
0202 #define CVMX_BOOTINFO_CFG_FLAG_BREAK            (1ull << 5)
0203 
0204 #endif /*   (CVMX_BOOTINFO_MAJ_VER == 1) */
0205 
0206 /* Type defines for board and chip types */
0207 enum cvmx_board_types_enum {
0208     CVMX_BOARD_TYPE_NULL = 0,
0209     CVMX_BOARD_TYPE_SIM = 1,
0210     CVMX_BOARD_TYPE_EBT3000 = 2,
0211     CVMX_BOARD_TYPE_KODAMA = 3,
0212     CVMX_BOARD_TYPE_NIAGARA = 4,
0213     CVMX_BOARD_TYPE_NAC38 = 5,  /* formerly NAO38 */
0214     CVMX_BOARD_TYPE_THUNDER = 6,
0215     CVMX_BOARD_TYPE_TRANTOR = 7,
0216     CVMX_BOARD_TYPE_EBH3000 = 8,
0217     CVMX_BOARD_TYPE_EBH3100 = 9,
0218     CVMX_BOARD_TYPE_HIKARI = 10,
0219     CVMX_BOARD_TYPE_CN3010_EVB_HS5 = 11,
0220     CVMX_BOARD_TYPE_CN3005_EVB_HS5 = 12,
0221     CVMX_BOARD_TYPE_KBP = 13,
0222     /* Deprecated, CVMX_BOARD_TYPE_CN3010_EVB_HS5 supports the CN3020 */
0223     CVMX_BOARD_TYPE_CN3020_EVB_HS5 = 14,
0224     CVMX_BOARD_TYPE_EBT5800 = 15,
0225     CVMX_BOARD_TYPE_NICPRO2 = 16,
0226     CVMX_BOARD_TYPE_EBH5600 = 17,
0227     CVMX_BOARD_TYPE_EBH5601 = 18,
0228     CVMX_BOARD_TYPE_EBH5200 = 19,
0229     CVMX_BOARD_TYPE_BBGW_REF = 20,
0230     CVMX_BOARD_TYPE_NIC_XLE_4G = 21,
0231     CVMX_BOARD_TYPE_EBT5600 = 22,
0232     CVMX_BOARD_TYPE_EBH5201 = 23,
0233     CVMX_BOARD_TYPE_EBT5200 = 24,
0234     CVMX_BOARD_TYPE_CB5600  = 25,
0235     CVMX_BOARD_TYPE_CB5601  = 26,
0236     CVMX_BOARD_TYPE_CB5200  = 27,
0237     /* Special 'generic' board type, supports many boards */
0238     CVMX_BOARD_TYPE_GENERIC = 28,
0239     CVMX_BOARD_TYPE_EBH5610 = 29,
0240     CVMX_BOARD_TYPE_LANAI2_A = 30,
0241     CVMX_BOARD_TYPE_LANAI2_U = 31,
0242     CVMX_BOARD_TYPE_EBB5600 = 32,
0243     CVMX_BOARD_TYPE_EBB6300 = 33,
0244     CVMX_BOARD_TYPE_NIC_XLE_10G = 34,
0245     CVMX_BOARD_TYPE_LANAI2_G = 35,
0246     CVMX_BOARD_TYPE_EBT5810 = 36,
0247     CVMX_BOARD_TYPE_NIC10E = 37,
0248     CVMX_BOARD_TYPE_EP6300C = 38,
0249     CVMX_BOARD_TYPE_EBB6800 = 39,
0250     CVMX_BOARD_TYPE_NIC4E = 40,
0251     CVMX_BOARD_TYPE_NIC2E = 41,
0252     CVMX_BOARD_TYPE_EBB6600 = 42,
0253     CVMX_BOARD_TYPE_REDWING = 43,
0254     CVMX_BOARD_TYPE_NIC68_4 = 44,
0255     CVMX_BOARD_TYPE_NIC10E_66 = 45,
0256     CVMX_BOARD_TYPE_SNIC10E = 50,
0257     CVMX_BOARD_TYPE_MAX,
0258 
0259     /*
0260      * The range from CVMX_BOARD_TYPE_MAX to
0261      * CVMX_BOARD_TYPE_CUST_DEFINED_MIN is reserved for future
0262      * SDK use.
0263      */
0264 
0265     /*
0266      * Set aside a range for customer boards.  These numbers are managed
0267      * by Cavium.
0268      */
0269     CVMX_BOARD_TYPE_CUST_DEFINED_MIN = 10000,
0270     CVMX_BOARD_TYPE_CUST_WSX16 = 10001,
0271     CVMX_BOARD_TYPE_CUST_NS0216 = 10002,
0272     CVMX_BOARD_TYPE_CUST_NB5 = 10003,
0273     CVMX_BOARD_TYPE_CUST_WMR500 = 10004,
0274     CVMX_BOARD_TYPE_CUST_ITB101 = 10005,
0275     CVMX_BOARD_TYPE_CUST_NTE102 = 10006,
0276     CVMX_BOARD_TYPE_CUST_AGS103 = 10007,
0277     CVMX_BOARD_TYPE_CUST_GST104 = 10008,
0278     CVMX_BOARD_TYPE_CUST_GCT105 = 10009,
0279     CVMX_BOARD_TYPE_CUST_AGS106 = 10010,
0280     CVMX_BOARD_TYPE_CUST_SGM107 = 10011,
0281     CVMX_BOARD_TYPE_CUST_GCT108 = 10012,
0282     CVMX_BOARD_TYPE_CUST_AGS109 = 10013,
0283     CVMX_BOARD_TYPE_CUST_GCT110 = 10014,
0284     CVMX_BOARD_TYPE_CUST_L2_AIR_SENDER = 10015,
0285     CVMX_BOARD_TYPE_CUST_L2_AIR_RECEIVER = 10016,
0286     CVMX_BOARD_TYPE_CUST_L2_ACCTON2_TX = 10017,
0287     CVMX_BOARD_TYPE_CUST_L2_ACCTON2_RX = 10018,
0288     CVMX_BOARD_TYPE_CUST_L2_WSTRNSNIC_TX = 10019,
0289     CVMX_BOARD_TYPE_CUST_L2_WSTRNSNIC_RX = 10020,
0290     CVMX_BOARD_TYPE_CUST_L2_ZINWELL = 10021,
0291     CVMX_BOARD_TYPE_CUST_DEFINED_MAX = 20000,
0292 
0293     /*
0294      * Set aside a range for customer private use.  The SDK won't
0295      * use any numbers in this range.
0296      */
0297     CVMX_BOARD_TYPE_CUST_PRIVATE_MIN = 20001,
0298     CVMX_BOARD_TYPE_UBNT_E100 = 20002,
0299     CVMX_BOARD_TYPE_UBNT_E200 = 20003,
0300     CVMX_BOARD_TYPE_UBNT_E220 = 20005,
0301     CVMX_BOARD_TYPE_CUST_DSR1000N = 20006,
0302     CVMX_BOARD_TYPE_UBNT_E300 = 20300,
0303     CVMX_BOARD_TYPE_KONTRON_S1901 = 21901,
0304     CVMX_BOARD_TYPE_CUST_PRIVATE_MAX = 30000,
0305 
0306     /* The remaining range is reserved for future use. */
0307 };
0308 
0309 enum cvmx_chip_types_enum {
0310     CVMX_CHIP_TYPE_NULL = 0,
0311     CVMX_CHIP_SIM_TYPE_DEPRECATED = 1,
0312     CVMX_CHIP_TYPE_OCTEON_SAMPLE = 2,
0313     CVMX_CHIP_TYPE_MAX,
0314 };
0315 
0316 /* Compatibility alias for NAC38 name change, planned to be removed
0317  * from SDK 1.7 */
0318 #define CVMX_BOARD_TYPE_NAO38   CVMX_BOARD_TYPE_NAC38
0319 
0320 /* Functions to return string based on type */
0321 #define ENUM_BRD_TYPE_CASE(x) \
0322     case x: return (&#x[16]);   /* Skip CVMX_BOARD_TYPE_ */
0323 static inline const char *cvmx_board_type_to_string(enum
0324                             cvmx_board_types_enum type)
0325 {
0326     switch (type) {
0327         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NULL)
0328         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_SIM)
0329         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBT3000)
0330         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_KODAMA)
0331         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIAGARA)
0332         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NAC38)
0333         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_THUNDER)
0334         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_TRANTOR)
0335         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH3000)
0336         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH3100)
0337         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_HIKARI)
0338         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CN3010_EVB_HS5)
0339         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CN3005_EVB_HS5)
0340         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_KBP)
0341         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CN3020_EVB_HS5)
0342         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBT5800)
0343         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NICPRO2)
0344         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH5600)
0345         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH5601)
0346         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH5200)
0347         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_BBGW_REF)
0348         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC_XLE_4G)
0349         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBT5600)
0350         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH5201)
0351         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBT5200)
0352         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CB5600)
0353         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CB5601)
0354         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CB5200)
0355         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_GENERIC)
0356         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH5610)
0357         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_LANAI2_A)
0358         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_LANAI2_U)
0359         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBB5600)
0360         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBB6300)
0361         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC_XLE_10G)
0362         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_LANAI2_G)
0363         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBT5810)
0364         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC10E)
0365         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EP6300C)
0366         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBB6800)
0367         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC4E)
0368         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC2E)
0369         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBB6600)
0370         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_REDWING)
0371         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC68_4)
0372         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC10E_66)
0373         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_SNIC10E)
0374         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_MAX)
0375 
0376             /* Customer boards listed here */
0377         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_DEFINED_MIN)
0378         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_WSX16)
0379         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_NS0216)
0380         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_NB5)
0381         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_WMR500)
0382         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_ITB101)
0383         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_NTE102)
0384         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_AGS103)
0385         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_GST104)
0386         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_GCT105)
0387         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_AGS106)
0388         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_SGM107)
0389         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_GCT108)
0390         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_AGS109)
0391         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_GCT110)
0392         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_AIR_SENDER)
0393         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_AIR_RECEIVER)
0394         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_ACCTON2_TX)
0395         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_ACCTON2_RX)
0396         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_WSTRNSNIC_TX)
0397         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_WSTRNSNIC_RX)
0398         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_ZINWELL)
0399         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_DEFINED_MAX)
0400 
0401             /* Customer private range */
0402         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_PRIVATE_MIN)
0403         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_UBNT_E100)
0404         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_UBNT_E200)
0405         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_UBNT_E220)
0406         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_DSR1000N)
0407         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_UBNT_E300)
0408         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_KONTRON_S1901)
0409         ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_PRIVATE_MAX)
0410     }
0411     return NULL;
0412 }
0413 
0414 #define ENUM_CHIP_TYPE_CASE(x) \
0415     case x: return (&#x[15]);   /* Skip CVMX_CHIP_TYPE */
0416 static inline const char *cvmx_chip_type_to_string(enum
0417                            cvmx_chip_types_enum type)
0418 {
0419     switch (type) {
0420         ENUM_CHIP_TYPE_CASE(CVMX_CHIP_TYPE_NULL)
0421         ENUM_CHIP_TYPE_CASE(CVMX_CHIP_SIM_TYPE_DEPRECATED)
0422         ENUM_CHIP_TYPE_CASE(CVMX_CHIP_TYPE_OCTEON_SAMPLE)
0423         ENUM_CHIP_TYPE_CASE(CVMX_CHIP_TYPE_MAX)
0424     }
0425     return "Unsupported Chip";
0426 }
0427 
0428 #endif /* __CVMX_BOOTINFO_H__ */