123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428 |
- /***********************license start***************
- * Author: Cavium Networks
- *
- * Contact: [email protected]
- * This file is part of the OCTEON SDK
- *
- * Copyright (c) 2003-2008 Cavium Networks
- *
- * This file is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License, Version 2, as
- * published by the Free Software Foundation.
- *
- * This file is distributed in the hope that it will be useful, but
- * AS-IS and WITHOUT ANY WARRANTY; without even the implied warranty
- * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, TITLE, or
- * NONINFRINGEMENT. See the GNU General Public License for more
- * details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this file; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- * or visit http://www.gnu.org/licenses/.
- *
- * This file may also be available under a different license from Cavium.
- * Contact Cavium Networks for more information
- ***********************license end**************************************/
- /*
- * Header file containing the ABI with the bootloader.
- */
- #ifndef __CVMX_BOOTINFO_H__
- #define __CVMX_BOOTINFO_H__
- #include "cvmx-coremask.h"
- /*
- * Current major and minor versions of the CVMX bootinfo block that is
- * passed from the bootloader to the application. This is versioned
- * so that applications can properly handle multiple bootloader
- * versions.
- */
- #define CVMX_BOOTINFO_MAJ_VER 1
- #define CVMX_BOOTINFO_MIN_VER 4
- #if (CVMX_BOOTINFO_MAJ_VER == 1)
- #define CVMX_BOOTINFO_OCTEON_SERIAL_LEN 20
- /*
- * This structure is populated by the bootloader. For binary
- * compatibility the only changes that should be made are
- * adding members to the end of the structure, and the minor
- * version should be incremented at that time.
- * If an incompatible change is made, the major version
- * must be incremented, and the minor version should be reset
- * to 0.
- */
- struct cvmx_bootinfo {
- #ifdef __BIG_ENDIAN_BITFIELD
- uint32_t major_version;
- uint32_t minor_version;
- uint64_t stack_top;
- uint64_t heap_base;
- uint64_t heap_end;
- uint64_t desc_vaddr;
- uint32_t exception_base_addr;
- uint32_t stack_size;
- uint32_t flags;
- uint32_t core_mask;
- /* DRAM size in megabytes */
- uint32_t dram_size;
- /* physical address of free memory descriptor block*/
- uint32_t phy_mem_desc_addr;
- /* used to pass flags from app to debugger */
- uint32_t debugger_flags_base_addr;
- /* CPU clock speed, in hz */
- uint32_t eclock_hz;
- /* DRAM clock speed, in hz */
- uint32_t dclock_hz;
- uint32_t reserved0;
- uint16_t board_type;
- uint8_t board_rev_major;
- uint8_t board_rev_minor;
- uint16_t reserved1;
- uint8_t reserved2;
- uint8_t reserved3;
- char board_serial_number[CVMX_BOOTINFO_OCTEON_SERIAL_LEN];
- uint8_t mac_addr_base[6];
- uint8_t mac_addr_count;
- #if (CVMX_BOOTINFO_MIN_VER >= 1)
- /*
- * Several boards support compact flash on the Octeon boot
- * bus. The CF memory spaces may be mapped to different
- * addresses on different boards. These are the physical
- * addresses, so care must be taken to use the correct
- * XKPHYS/KSEG0 addressing depending on the application's
- * ABI. These values will be 0 if CF is not present.
- */
- uint64_t compact_flash_common_base_addr;
- uint64_t compact_flash_attribute_base_addr;
- /*
- * Base address of the LED display (as on EBT3000 board)
- * This will be 0 if LED display not present.
- */
- uint64_t led_display_base_addr;
- #endif
- #if (CVMX_BOOTINFO_MIN_VER >= 2)
- /* DFA reference clock in hz (if applicable)*/
- uint32_t dfa_ref_clock_hz;
- /*
- * flags indicating various configuration options. These
- * flags supercede the 'flags' variable and should be used
- * instead if available.
- */
- uint32_t config_flags;
- #endif
- #if (CVMX_BOOTINFO_MIN_VER >= 3)
- /*
- * Address of the OF Flattened Device Tree structure
- * describing the board.
- */
- uint64_t fdt_addr;
- #endif
- #if (CVMX_BOOTINFO_MIN_VER >= 4)
- /*
- * Coremask used for processors with more than 32 cores
- * or with OCI. This replaces core_mask.
- */
- struct cvmx_coremask ext_core_mask;
- #endif
- #else /* __BIG_ENDIAN */
- /*
- * Little-Endian: When the CPU mode is switched to
- * little-endian, the view of the structure has some of the
- * fields swapped.
- */
- uint32_t minor_version;
- uint32_t major_version;
- uint64_t stack_top;
- uint64_t heap_base;
- uint64_t heap_end;
- uint64_t desc_vaddr;
- uint32_t stack_size;
- uint32_t exception_base_addr;
- uint32_t core_mask;
- uint32_t flags;
- uint32_t phy_mem_desc_addr;
- uint32_t dram_size;
- uint32_t eclock_hz;
- uint32_t debugger_flags_base_addr;
- uint32_t reserved0;
- uint32_t dclock_hz;
- uint8_t reserved3;
- uint8_t reserved2;
- uint16_t reserved1;
- uint8_t board_rev_minor;
- uint8_t board_rev_major;
- uint16_t board_type;
- char board_serial_number[CVMX_BOOTINFO_OCTEON_SERIAL_LEN];
- uint8_t mac_addr_base[6];
- uint8_t mac_addr_count;
- uint8_t pad[5];
- #if (CVMX_BOOTINFO_MIN_VER >= 1)
- uint64_t compact_flash_common_base_addr;
- uint64_t compact_flash_attribute_base_addr;
- uint64_t led_display_base_addr;
- #endif
- #if (CVMX_BOOTINFO_MIN_VER >= 2)
- uint32_t config_flags;
- uint32_t dfa_ref_clock_hz;
- #endif
- #if (CVMX_BOOTINFO_MIN_VER >= 3)
- uint64_t fdt_addr;
- #endif
- #if (CVMX_BOOTINFO_MIN_VER >= 4)
- struct cvmx_coremask ext_core_mask;
- #endif
- #endif
- };
- #define CVMX_BOOTINFO_CFG_FLAG_PCI_HOST (1ull << 0)
- #define CVMX_BOOTINFO_CFG_FLAG_PCI_TARGET (1ull << 1)
- #define CVMX_BOOTINFO_CFG_FLAG_DEBUG (1ull << 2)
- #define CVMX_BOOTINFO_CFG_FLAG_NO_MAGIC (1ull << 3)
- /* This flag is set if the TLB mappings are not contained in the
- * 0x10000000 - 0x20000000 boot bus region. */
- #define CVMX_BOOTINFO_CFG_FLAG_OVERSIZE_TLB_MAPPING (1ull << 4)
- #define CVMX_BOOTINFO_CFG_FLAG_BREAK (1ull << 5)
- #endif /* (CVMX_BOOTINFO_MAJ_VER == 1) */
- /* Type defines for board and chip types */
- enum cvmx_board_types_enum {
- CVMX_BOARD_TYPE_NULL = 0,
- CVMX_BOARD_TYPE_SIM = 1,
- CVMX_BOARD_TYPE_EBT3000 = 2,
- CVMX_BOARD_TYPE_KODAMA = 3,
- CVMX_BOARD_TYPE_NIAGARA = 4,
- CVMX_BOARD_TYPE_NAC38 = 5, /* formerly NAO38 */
- CVMX_BOARD_TYPE_THUNDER = 6,
- CVMX_BOARD_TYPE_TRANTOR = 7,
- CVMX_BOARD_TYPE_EBH3000 = 8,
- CVMX_BOARD_TYPE_EBH3100 = 9,
- CVMX_BOARD_TYPE_HIKARI = 10,
- CVMX_BOARD_TYPE_CN3010_EVB_HS5 = 11,
- CVMX_BOARD_TYPE_CN3005_EVB_HS5 = 12,
- CVMX_BOARD_TYPE_KBP = 13,
- /* Deprecated, CVMX_BOARD_TYPE_CN3010_EVB_HS5 supports the CN3020 */
- CVMX_BOARD_TYPE_CN3020_EVB_HS5 = 14,
- CVMX_BOARD_TYPE_EBT5800 = 15,
- CVMX_BOARD_TYPE_NICPRO2 = 16,
- CVMX_BOARD_TYPE_EBH5600 = 17,
- CVMX_BOARD_TYPE_EBH5601 = 18,
- CVMX_BOARD_TYPE_EBH5200 = 19,
- CVMX_BOARD_TYPE_BBGW_REF = 20,
- CVMX_BOARD_TYPE_NIC_XLE_4G = 21,
- CVMX_BOARD_TYPE_EBT5600 = 22,
- CVMX_BOARD_TYPE_EBH5201 = 23,
- CVMX_BOARD_TYPE_EBT5200 = 24,
- CVMX_BOARD_TYPE_CB5600 = 25,
- CVMX_BOARD_TYPE_CB5601 = 26,
- CVMX_BOARD_TYPE_CB5200 = 27,
- /* Special 'generic' board type, supports many boards */
- CVMX_BOARD_TYPE_GENERIC = 28,
- CVMX_BOARD_TYPE_EBH5610 = 29,
- CVMX_BOARD_TYPE_LANAI2_A = 30,
- CVMX_BOARD_TYPE_LANAI2_U = 31,
- CVMX_BOARD_TYPE_EBB5600 = 32,
- CVMX_BOARD_TYPE_EBB6300 = 33,
- CVMX_BOARD_TYPE_NIC_XLE_10G = 34,
- CVMX_BOARD_TYPE_LANAI2_G = 35,
- CVMX_BOARD_TYPE_EBT5810 = 36,
- CVMX_BOARD_TYPE_NIC10E = 37,
- CVMX_BOARD_TYPE_EP6300C = 38,
- CVMX_BOARD_TYPE_EBB6800 = 39,
- CVMX_BOARD_TYPE_NIC4E = 40,
- CVMX_BOARD_TYPE_NIC2E = 41,
- CVMX_BOARD_TYPE_EBB6600 = 42,
- CVMX_BOARD_TYPE_REDWING = 43,
- CVMX_BOARD_TYPE_NIC68_4 = 44,
- CVMX_BOARD_TYPE_NIC10E_66 = 45,
- CVMX_BOARD_TYPE_SNIC10E = 50,
- CVMX_BOARD_TYPE_MAX,
- /*
- * The range from CVMX_BOARD_TYPE_MAX to
- * CVMX_BOARD_TYPE_CUST_DEFINED_MIN is reserved for future
- * SDK use.
- */
- /*
- * Set aside a range for customer boards. These numbers are managed
- * by Cavium.
- */
- CVMX_BOARD_TYPE_CUST_DEFINED_MIN = 10000,
- CVMX_BOARD_TYPE_CUST_WSX16 = 10001,
- CVMX_BOARD_TYPE_CUST_NS0216 = 10002,
- CVMX_BOARD_TYPE_CUST_NB5 = 10003,
- CVMX_BOARD_TYPE_CUST_WMR500 = 10004,
- CVMX_BOARD_TYPE_CUST_ITB101 = 10005,
- CVMX_BOARD_TYPE_CUST_NTE102 = 10006,
- CVMX_BOARD_TYPE_CUST_AGS103 = 10007,
- CVMX_BOARD_TYPE_CUST_GST104 = 10008,
- CVMX_BOARD_TYPE_CUST_GCT105 = 10009,
- CVMX_BOARD_TYPE_CUST_AGS106 = 10010,
- CVMX_BOARD_TYPE_CUST_SGM107 = 10011,
- CVMX_BOARD_TYPE_CUST_GCT108 = 10012,
- CVMX_BOARD_TYPE_CUST_AGS109 = 10013,
- CVMX_BOARD_TYPE_CUST_GCT110 = 10014,
- CVMX_BOARD_TYPE_CUST_L2_AIR_SENDER = 10015,
- CVMX_BOARD_TYPE_CUST_L2_AIR_RECEIVER = 10016,
- CVMX_BOARD_TYPE_CUST_L2_ACCTON2_TX = 10017,
- CVMX_BOARD_TYPE_CUST_L2_ACCTON2_RX = 10018,
- CVMX_BOARD_TYPE_CUST_L2_WSTRNSNIC_TX = 10019,
- CVMX_BOARD_TYPE_CUST_L2_WSTRNSNIC_RX = 10020,
- CVMX_BOARD_TYPE_CUST_L2_ZINWELL = 10021,
- CVMX_BOARD_TYPE_CUST_DEFINED_MAX = 20000,
- /*
- * Set aside a range for customer private use. The SDK won't
- * use any numbers in this range.
- */
- CVMX_BOARD_TYPE_CUST_PRIVATE_MIN = 20001,
- CVMX_BOARD_TYPE_UBNT_E100 = 20002,
- CVMX_BOARD_TYPE_UBNT_E200 = 20003,
- CVMX_BOARD_TYPE_UBNT_E220 = 20005,
- CVMX_BOARD_TYPE_CUST_DSR1000N = 20006,
- CVMX_BOARD_TYPE_UBNT_E300 = 20300,
- CVMX_BOARD_TYPE_KONTRON_S1901 = 21901,
- CVMX_BOARD_TYPE_CUST_PRIVATE_MAX = 30000,
- /* The remaining range is reserved for future use. */
- };
- enum cvmx_chip_types_enum {
- CVMX_CHIP_TYPE_NULL = 0,
- CVMX_CHIP_SIM_TYPE_DEPRECATED = 1,
- CVMX_CHIP_TYPE_OCTEON_SAMPLE = 2,
- CVMX_CHIP_TYPE_MAX,
- };
- /* Compatibility alias for NAC38 name change, planned to be removed
- * from SDK 1.7 */
- #define CVMX_BOARD_TYPE_NAO38 CVMX_BOARD_TYPE_NAC38
- /* Functions to return string based on type */
- #define ENUM_BRD_TYPE_CASE(x) \
- case x: return (&#x[16]); /* Skip CVMX_BOARD_TYPE_ */
- static inline const char *cvmx_board_type_to_string(enum
- cvmx_board_types_enum type)
- {
- switch (type) {
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NULL)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_SIM)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBT3000)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_KODAMA)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIAGARA)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NAC38)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_THUNDER)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_TRANTOR)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH3000)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH3100)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_HIKARI)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CN3010_EVB_HS5)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CN3005_EVB_HS5)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_KBP)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CN3020_EVB_HS5)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBT5800)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NICPRO2)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH5600)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH5601)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH5200)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_BBGW_REF)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC_XLE_4G)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBT5600)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH5201)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBT5200)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CB5600)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CB5601)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CB5200)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_GENERIC)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBH5610)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_LANAI2_A)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_LANAI2_U)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBB5600)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBB6300)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC_XLE_10G)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_LANAI2_G)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBT5810)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC10E)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EP6300C)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBB6800)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC4E)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC2E)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_EBB6600)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_REDWING)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC68_4)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_NIC10E_66)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_SNIC10E)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_MAX)
- /* Customer boards listed here */
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_DEFINED_MIN)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_WSX16)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_NS0216)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_NB5)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_WMR500)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_ITB101)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_NTE102)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_AGS103)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_GST104)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_GCT105)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_AGS106)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_SGM107)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_GCT108)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_AGS109)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_GCT110)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_AIR_SENDER)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_AIR_RECEIVER)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_ACCTON2_TX)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_ACCTON2_RX)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_WSTRNSNIC_TX)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_WSTRNSNIC_RX)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_L2_ZINWELL)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_DEFINED_MAX)
- /* Customer private range */
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_PRIVATE_MIN)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_UBNT_E100)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_UBNT_E200)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_UBNT_E220)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_DSR1000N)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_UBNT_E300)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_KONTRON_S1901)
- ENUM_BRD_TYPE_CASE(CVMX_BOARD_TYPE_CUST_PRIVATE_MAX)
- }
- return NULL;
- }
- #define ENUM_CHIP_TYPE_CASE(x) \
- case x: return (&#x[15]); /* Skip CVMX_CHIP_TYPE */
- static inline const char *cvmx_chip_type_to_string(enum
- cvmx_chip_types_enum type)
- {
- switch (type) {
- ENUM_CHIP_TYPE_CASE(CVMX_CHIP_TYPE_NULL)
- ENUM_CHIP_TYPE_CASE(CVMX_CHIP_SIM_TYPE_DEPRECATED)
- ENUM_CHIP_TYPE_CASE(CVMX_CHIP_TYPE_OCTEON_SAMPLE)
- ENUM_CHIP_TYPE_CASE(CVMX_CHIP_TYPE_MAX)
- }
- return "Unsupported Chip";
- }
- #endif /* __CVMX_BOOTINFO_H__ */
|