17956Sxiuyan.wang@Sun.COM /* 27956Sxiuyan.wang@Sun.COM * CDDL HEADER START 37956Sxiuyan.wang@Sun.COM * 47956Sxiuyan.wang@Sun.COM * The contents of this file are subject to the terms of the 57956Sxiuyan.wang@Sun.COM * Common Development and Distribution License (the "License"). 67956Sxiuyan.wang@Sun.COM * You may not use this file except in compliance with the License. 77956Sxiuyan.wang@Sun.COM * 87956Sxiuyan.wang@Sun.COM * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 97956Sxiuyan.wang@Sun.COM * or http://www.opensolaris.org/os/licensing. 107956Sxiuyan.wang@Sun.COM * See the License for the specific language governing permissions 117956Sxiuyan.wang@Sun.COM * and limitations under the License. 127956Sxiuyan.wang@Sun.COM * 137956Sxiuyan.wang@Sun.COM * When distributing Covered Code, include this CDDL HEADER in each 147956Sxiuyan.wang@Sun.COM * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 157956Sxiuyan.wang@Sun.COM * If applicable, add the following below this CDDL HEADER, with the 167956Sxiuyan.wang@Sun.COM * fields enclosed by brackets "[]" replaced with your own identifying 177956Sxiuyan.wang@Sun.COM * information: Portions Copyright [yyyy] [name of copyright owner] 187956Sxiuyan.wang@Sun.COM * 197956Sxiuyan.wang@Sun.COM * CDDL HEADER END 207956Sxiuyan.wang@Sun.COM */ 21*8687SJing.Xiong@Sun.COM 227956Sxiuyan.wang@Sun.COM /* 237956Sxiuyan.wang@Sun.COM * Copyright 2008 NetXen, Inc. All rights reserved. 247956Sxiuyan.wang@Sun.COM * Use is subject to license terms. 257956Sxiuyan.wang@Sun.COM */ 26*8687SJing.Xiong@Sun.COM 27*8687SJing.Xiong@Sun.COM #ifndef _UNM_BRDINFO_H_ 28*8687SJing.Xiong@Sun.COM #define _UNM_BRDINFO_H_ 29*8687SJing.Xiong@Sun.COM 30*8687SJing.Xiong@Sun.COM #ifdef __cplusplus 31*8687SJing.Xiong@Sun.COM extern "C" { 32*8687SJing.Xiong@Sun.COM #endif 337956Sxiuyan.wang@Sun.COM 347956Sxiuyan.wang@Sun.COM /* The version of the main data structure */ 357956Sxiuyan.wang@Sun.COM #define UNM_BDINFO_VERSION 1 367956Sxiuyan.wang@Sun.COM 377956Sxiuyan.wang@Sun.COM /* Magic number to let user know flash is programmed */ 387956Sxiuyan.wang@Sun.COM #define UNM_BDINFO_MAGIC 0x12345678 397956Sxiuyan.wang@Sun.COM 407956Sxiuyan.wang@Sun.COM #define P2_CHIP 2 417956Sxiuyan.wang@Sun.COM #define P3_CHIP 3 427956Sxiuyan.wang@Sun.COM #define NX_P2_C0 0x24 437956Sxiuyan.wang@Sun.COM #define NX_P2_C1 0x25 447956Sxiuyan.wang@Sun.COM #define NX_P3_A0 0x30 457956Sxiuyan.wang@Sun.COM #define NX_P3_A2 0x32 467956Sxiuyan.wang@Sun.COM #define NX_P3_B0 0x40 477956Sxiuyan.wang@Sun.COM #define NX_P3_B1 0x41 487956Sxiuyan.wang@Sun.COM #define NX_P3_B2 0x42 497956Sxiuyan.wang@Sun.COM 507956Sxiuyan.wang@Sun.COM #define NX_IS_REVISION_P2(REVISION) (REVISION <= NX_P2_C1) 517956Sxiuyan.wang@Sun.COM #define NX_IS_REVISION_P3(REVISION) (REVISION >= NX_P3_A0) 527956Sxiuyan.wang@Sun.COM 537956Sxiuyan.wang@Sun.COM typedef enum { 547956Sxiuyan.wang@Sun.COM UNM_BRDTYPE_P1_BD = 0x0000, 557956Sxiuyan.wang@Sun.COM UNM_BRDTYPE_P1_SB = 0x0001, 567956Sxiuyan.wang@Sun.COM UNM_BRDTYPE_P1_SMAX = 0x0002, 577956Sxiuyan.wang@Sun.COM UNM_BRDTYPE_P1_SOCK = 0x0003, 587956Sxiuyan.wang@Sun.COM 597956Sxiuyan.wang@Sun.COM UNM_BRDTYPE_P2_SOCK_31 = 0x0008, 607956Sxiuyan.wang@Sun.COM UNM_BRDTYPE_P2_SOCK_35 = 0x0009, 617956Sxiuyan.wang@Sun.COM UNM_BRDTYPE_P2_SB35_4G = 0x000a, 627956Sxiuyan.wang@Sun.COM UNM_BRDTYPE_P2_SB31_10G = 0x000b, 637956Sxiuyan.wang@Sun.COM UNM_BRDTYPE_P2_SB31_2G = 0x000c, 647956Sxiuyan.wang@Sun.COM 657956Sxiuyan.wang@Sun.COM UNM_BRDTYPE_P2_SB31_10G_IMEZ = 0x000d, 667956Sxiuyan.wang@Sun.COM UNM_BRDTYPE_P2_SB31_10G_HMEZ = 0x000e, 677956Sxiuyan.wang@Sun.COM UNM_BRDTYPE_P2_SB31_10G_CX4 = 0x000f, 687956Sxiuyan.wang@Sun.COM 697956Sxiuyan.wang@Sun.COM /* Reference quad gig */ 707956Sxiuyan.wang@Sun.COM UNM_BRDTYPE_P3_REF_QG = 0x0021, 717956Sxiuyan.wang@Sun.COM UNM_BRDTYPE_P3_HMEZ = 0x0022, 727956Sxiuyan.wang@Sun.COM /* Dual CX4 - Low Profile - Red card */ 737956Sxiuyan.wang@Sun.COM UNM_BRDTYPE_P3_10G_CX4_LP = 0x0023, 747956Sxiuyan.wang@Sun.COM UNM_BRDTYPE_P3_4_GB = 0x0024, 757956Sxiuyan.wang@Sun.COM UNM_BRDTYPE_P3_IMEZ = 0x0025, 767956Sxiuyan.wang@Sun.COM UNM_BRDTYPE_P3_10G_SFP_PLUS = 0x0026, 777956Sxiuyan.wang@Sun.COM UNM_BRDTYPE_P3_10000_BASE_T = 0x0027, 787956Sxiuyan.wang@Sun.COM UNM_BRDTYPE_P3_XG_LOM = 0x0028, 797956Sxiuyan.wang@Sun.COM 807956Sxiuyan.wang@Sun.COM UNM_BRDTYPE_P3_4_GB_MM = 0x0029, 817956Sxiuyan.wang@Sun.COM UNM_BRDTYPE_P3_10G_CX4 = 0x0031, /* Reference CX4 */ 827956Sxiuyan.wang@Sun.COM UNM_BRDTYPE_P3_10G_XFP = 0x0032, /* Reference XFP */ 837956Sxiuyan.wang@Sun.COM 84*8687SJing.Xiong@Sun.COM UNM_BRDTYPE_P3_10G_TRP = 0x0080 857956Sxiuyan.wang@Sun.COM 867956Sxiuyan.wang@Sun.COM } unm_brdtype_t; 877956Sxiuyan.wang@Sun.COM 887956Sxiuyan.wang@Sun.COM typedef enum { 897956Sxiuyan.wang@Sun.COM NX_UNKNOWN_TYPE_ROMIMAGE = 0, 907956Sxiuyan.wang@Sun.COM NX_P2_MN_TYPE_ROMIMAGE = 1, 917956Sxiuyan.wang@Sun.COM NX_P3_CT_TYPE_ROMIMAGE, 927956Sxiuyan.wang@Sun.COM NX_P3_MN_TYPE_ROMIMAGE, 937956Sxiuyan.wang@Sun.COM NX_P3_MS_TYPE_ROMIMAGE, 94*8687SJing.Xiong@Sun.COM NX_UNKNOWN_TYPE_ROMIMAGE_LAST 957956Sxiuyan.wang@Sun.COM } nx_fw_type_t; 967956Sxiuyan.wang@Sun.COM 977956Sxiuyan.wang@Sun.COM /* board type specific information */ 987956Sxiuyan.wang@Sun.COM typedef struct { 997956Sxiuyan.wang@Sun.COM unm_brdtype_t brdtype; /* type of board */ 1007956Sxiuyan.wang@Sun.COM long ports; /* max no of physical ports */ 1017956Sxiuyan.wang@Sun.COM nx_fw_type_t fwtype; /* The FW Associated with board type */ 1027956Sxiuyan.wang@Sun.COM char *short_name; 1037956Sxiuyan.wang@Sun.COM } unm_brdinfo_t; 1047956Sxiuyan.wang@Sun.COM 1057956Sxiuyan.wang@Sun.COM #define NUM_SUPPORTED_BOARDS (sizeof (unm_boards)/sizeof (unm_brdinfo_t)) 1067956Sxiuyan.wang@Sun.COM 1077956Sxiuyan.wang@Sun.COM #define GET_BRD_NAME_BY_TYPE(type, name) \ 1087956Sxiuyan.wang@Sun.COM { \ 1097956Sxiuyan.wang@Sun.COM int i, found = 0; \ 1107956Sxiuyan.wang@Sun.COM for (i = 0; i < NUM_SUPPORTED_BOARDS; ++i) { \ 1117956Sxiuyan.wang@Sun.COM if (unm_boards[i].brdtype == type) { \ 1127956Sxiuyan.wang@Sun.COM name = unm_boards[i].short_name; \ 1137956Sxiuyan.wang@Sun.COM found = 1; \ 1147956Sxiuyan.wang@Sun.COM break; \ 1157956Sxiuyan.wang@Sun.COM } \ 1167956Sxiuyan.wang@Sun.COM } \ 1177956Sxiuyan.wang@Sun.COM if (!found) \ 1187956Sxiuyan.wang@Sun.COM name = "Unknown"; \ 1197956Sxiuyan.wang@Sun.COM } 1207956Sxiuyan.wang@Sun.COM 1217956Sxiuyan.wang@Sun.COM typedef struct { 1227956Sxiuyan.wang@Sun.COM __uint32_t header_version; 1237956Sxiuyan.wang@Sun.COM 1247956Sxiuyan.wang@Sun.COM __uint32_t board_mfg; 1257956Sxiuyan.wang@Sun.COM __uint32_t board_type; 1267956Sxiuyan.wang@Sun.COM __uint32_t board_num; 1277956Sxiuyan.wang@Sun.COM __uint32_t chip_id; 1287956Sxiuyan.wang@Sun.COM __uint32_t chip_minor; 1297956Sxiuyan.wang@Sun.COM __uint32_t chip_major; 1307956Sxiuyan.wang@Sun.COM __uint32_t chip_pkg; 1317956Sxiuyan.wang@Sun.COM __uint32_t chip_lot; 1327956Sxiuyan.wang@Sun.COM 1337956Sxiuyan.wang@Sun.COM 1347956Sxiuyan.wang@Sun.COM __uint32_t port_mask; /* available niu ports */ 1357956Sxiuyan.wang@Sun.COM __uint32_t peg_mask; /* available pegs */ 1367956Sxiuyan.wang@Sun.COM __uint32_t icache_ok; /* can we run with icache? */ 1377956Sxiuyan.wang@Sun.COM __uint32_t dcache_ok; /* can we run with dcache? */ 1387956Sxiuyan.wang@Sun.COM __uint32_t casper_ok; 1397956Sxiuyan.wang@Sun.COM 1407956Sxiuyan.wang@Sun.COM /* unm_eth_addr_t mac_address[MAX_PORTS]; */ 1417956Sxiuyan.wang@Sun.COM __uint32_t mac_addr_lo_0; 1427956Sxiuyan.wang@Sun.COM __uint32_t mac_addr_lo_1; 1437956Sxiuyan.wang@Sun.COM __uint32_t mac_addr_lo_2; 1447956Sxiuyan.wang@Sun.COM __uint32_t mac_addr_lo_3; 1457956Sxiuyan.wang@Sun.COM 1467956Sxiuyan.wang@Sun.COM /* MN-related config */ 1477956Sxiuyan.wang@Sun.COM __uint32_t mn_sync_mode; /* enable/ sync shift cclk/ sync shift mclk */ 1487956Sxiuyan.wang@Sun.COM __uint32_t mn_sync_shift_cclk; 1497956Sxiuyan.wang@Sun.COM __uint32_t mn_sync_shift_mclk; 1507956Sxiuyan.wang@Sun.COM __uint32_t mn_wb_en; 1517956Sxiuyan.wang@Sun.COM __uint32_t mn_crystal_freq; /* in MHz */ 1527956Sxiuyan.wang@Sun.COM __uint32_t mn_speed; /* in MHz */ 1537956Sxiuyan.wang@Sun.COM __uint32_t mn_org; 1547956Sxiuyan.wang@Sun.COM __uint32_t mn_depth; 1557956Sxiuyan.wang@Sun.COM __uint32_t mn_ranks_0; /* ranks per slot */ 1567956Sxiuyan.wang@Sun.COM __uint32_t mn_ranks_1; /* ranks per slot */ 1577956Sxiuyan.wang@Sun.COM __uint32_t mn_rd_latency_0; 1587956Sxiuyan.wang@Sun.COM __uint32_t mn_rd_latency_1; 1597956Sxiuyan.wang@Sun.COM __uint32_t mn_rd_latency_2; 1607956Sxiuyan.wang@Sun.COM __uint32_t mn_rd_latency_3; 1617956Sxiuyan.wang@Sun.COM __uint32_t mn_rd_latency_4; 1627956Sxiuyan.wang@Sun.COM __uint32_t mn_rd_latency_5; 1637956Sxiuyan.wang@Sun.COM __uint32_t mn_rd_latency_6; 1647956Sxiuyan.wang@Sun.COM __uint32_t mn_rd_latency_7; 1657956Sxiuyan.wang@Sun.COM __uint32_t mn_rd_latency_8; 1667956Sxiuyan.wang@Sun.COM __uint32_t mn_dll_val[18]; 1677956Sxiuyan.wang@Sun.COM __uint32_t mn_mode_reg; /* See MIU DDR Mode Register */ 1687956Sxiuyan.wang@Sun.COM __uint32_t mn_ext_mode_reg; /* See MIU DDR Extended Mode Register */ 1697956Sxiuyan.wang@Sun.COM __uint32_t mn_timing_0; /* See MIU Memory Control Timing Rgister */ 1707956Sxiuyan.wang@Sun.COM __uint32_t mn_timing_1; /* See MIU Extended Memory Ctrl Timing Register */ 1717956Sxiuyan.wang@Sun.COM __uint32_t mn_timing_2; /* See MIU Extended Memory Ctrl Timing2 Register */ 1727956Sxiuyan.wang@Sun.COM 1737956Sxiuyan.wang@Sun.COM /* SN-related config */ 1747956Sxiuyan.wang@Sun.COM __uint32_t sn_sync_mode; /* enable/ sync shift cclk / sync shift mclk */ 1757956Sxiuyan.wang@Sun.COM __uint32_t sn_pt_mode; /* pass through mode */ 1767956Sxiuyan.wang@Sun.COM __uint32_t sn_ecc_en; 1777956Sxiuyan.wang@Sun.COM __uint32_t sn_wb_en; 1787956Sxiuyan.wang@Sun.COM __uint32_t sn_crystal_freq; 1797956Sxiuyan.wang@Sun.COM __uint32_t sn_speed; 1807956Sxiuyan.wang@Sun.COM __uint32_t sn_org; 1817956Sxiuyan.wang@Sun.COM __uint32_t sn_depth; 1827956Sxiuyan.wang@Sun.COM __uint32_t sn_dll_tap; 1837956Sxiuyan.wang@Sun.COM __uint32_t sn_rd_latency; 1847956Sxiuyan.wang@Sun.COM 1857956Sxiuyan.wang@Sun.COM __uint32_t mac_addr_hi_0; 1867956Sxiuyan.wang@Sun.COM __uint32_t mac_addr_hi_1; 1877956Sxiuyan.wang@Sun.COM __uint32_t mac_addr_hi_2; 1887956Sxiuyan.wang@Sun.COM __uint32_t mac_addr_hi_3; 1897956Sxiuyan.wang@Sun.COM 1907956Sxiuyan.wang@Sun.COM __uint32_t magic; /* indicates flash has been initialized */ 1917956Sxiuyan.wang@Sun.COM 1927956Sxiuyan.wang@Sun.COM __uint32_t mn_rdimm; 1937956Sxiuyan.wang@Sun.COM __uint32_t mn_dll_override; 1947956Sxiuyan.wang@Sun.COM __uint32_t coreclock_speed; 1957956Sxiuyan.wang@Sun.COM } unm_board_info_t; 1967956Sxiuyan.wang@Sun.COM 1977956Sxiuyan.wang@Sun.COM #define FLASH_NUM_PORTS 4 1987956Sxiuyan.wang@Sun.COM 1997956Sxiuyan.wang@Sun.COM typedef struct { 2007956Sxiuyan.wang@Sun.COM __uint32_t flash_addr[32]; 2017956Sxiuyan.wang@Sun.COM } unm_flash_mac_addr_t; 2027956Sxiuyan.wang@Sun.COM 2037956Sxiuyan.wang@Sun.COM /* flash user area */ 2047956Sxiuyan.wang@Sun.COM typedef struct { 2057956Sxiuyan.wang@Sun.COM __uint8_t flash_md5[16]; 2067956Sxiuyan.wang@Sun.COM __uint8_t crbinit_md5[16]; 2077956Sxiuyan.wang@Sun.COM __uint8_t brdcfg_md5[16]; 2087956Sxiuyan.wang@Sun.COM /* bootloader */ 2097956Sxiuyan.wang@Sun.COM __uint32_t bootld_version; 2107956Sxiuyan.wang@Sun.COM __uint32_t bootld_size; 2117956Sxiuyan.wang@Sun.COM __uint8_t bootld_md5[16]; 2127956Sxiuyan.wang@Sun.COM /* image */ 2137956Sxiuyan.wang@Sun.COM __uint32_t image_version; 2147956Sxiuyan.wang@Sun.COM __uint32_t image_size; 2157956Sxiuyan.wang@Sun.COM __uint8_t image_md5[16]; 2167956Sxiuyan.wang@Sun.COM /* primary image status */ 2177956Sxiuyan.wang@Sun.COM __uint32_t primary_status; 2187956Sxiuyan.wang@Sun.COM __uint32_t secondary_present; 2197956Sxiuyan.wang@Sun.COM 2207956Sxiuyan.wang@Sun.COM /* MAC address , 4 ports */ 2217956Sxiuyan.wang@Sun.COM unm_flash_mac_addr_t mac_addr[FLASH_NUM_PORTS]; 2227956Sxiuyan.wang@Sun.COM 2237956Sxiuyan.wang@Sun.COM /* Any user defined data */ 2247956Sxiuyan.wang@Sun.COM } unm_old_user_info_t; 2257956Sxiuyan.wang@Sun.COM 2267956Sxiuyan.wang@Sun.COM #define FLASH_NUM_MAC_PER_PORT 32 2277956Sxiuyan.wang@Sun.COM typedef struct { 2287956Sxiuyan.wang@Sun.COM __uint8_t flash_md5[16 * 64]; 229*8687SJing.Xiong@Sun.COM /* __uint8_t crbinit_md5[16]; */ 230*8687SJing.Xiong@Sun.COM /* __uint8_t brdcfg_md5[16]; */ 2317956Sxiuyan.wang@Sun.COM /* bootloader */ 2327956Sxiuyan.wang@Sun.COM __uint32_t bootld_version; 2337956Sxiuyan.wang@Sun.COM __uint32_t bootld_size; 234*8687SJing.Xiong@Sun.COM /* __uint8_t bootld_md5[16]; */ 2357956Sxiuyan.wang@Sun.COM /* image */ 2367956Sxiuyan.wang@Sun.COM __uint32_t image_version; 2377956Sxiuyan.wang@Sun.COM __uint32_t image_size; 238*8687SJing.Xiong@Sun.COM /* U8 image_md5[16]; */ 2397956Sxiuyan.wang@Sun.COM /* primary image status */ 2407956Sxiuyan.wang@Sun.COM __uint32_t primary_status; 2417956Sxiuyan.wang@Sun.COM __uint32_t secondary_present; 2427956Sxiuyan.wang@Sun.COM 2437956Sxiuyan.wang@Sun.COM /* MAC address , 4 ports, 32 address per port */ 2447956Sxiuyan.wang@Sun.COM __uint64_t mac_addr[FLASH_NUM_PORTS * FLASH_NUM_MAC_PER_PORT]; 2457956Sxiuyan.wang@Sun.COM __uint32_t sub_sys_id; 2467956Sxiuyan.wang@Sun.COM __uint8_t serial_num[32]; 2477956Sxiuyan.wang@Sun.COM __uint32_t bios_version; 2487956Sxiuyan.wang@Sun.COM __uint32_t pxe_enable; /* bitmask, per port */ 2497956Sxiuyan.wang@Sun.COM __uint32_t vlan_tag[FLASH_NUM_PORTS]; 2507956Sxiuyan.wang@Sun.COM 2517956Sxiuyan.wang@Sun.COM /* Any user defined data */ 2527956Sxiuyan.wang@Sun.COM } unm_user_info_t; 2537956Sxiuyan.wang@Sun.COM 2547956Sxiuyan.wang@Sun.COM /* Flash memory map */ 2557956Sxiuyan.wang@Sun.COM typedef enum { 2567956Sxiuyan.wang@Sun.COM CRBINIT_START = 0, /* Crbinit section */ 2577956Sxiuyan.wang@Sun.COM BRDCFG_START = 0x4000, /* board config */ 2587956Sxiuyan.wang@Sun.COM INITCODE_START = 0x6000, /* pegtune code */ 2597956Sxiuyan.wang@Sun.COM BOOTLD_START = 0x10000, /* bootld */ 2607956Sxiuyan.wang@Sun.COM BOOTLD1_START = 0x14000, /* Start of booloader 1 */ 2617956Sxiuyan.wang@Sun.COM IMAGE_START = 0x43000, /* compressed image */ 2627956Sxiuyan.wang@Sun.COM SECONDARY_START = 0x200000, /* backup images */ 2637956Sxiuyan.wang@Sun.COM PXE_FIRST_STAGE_INTEL = 0x3C0000, /* Intel First Stage info */ 2647956Sxiuyan.wang@Sun.COM PXE_FIRST_STAGE_PPC = 0x3C4000, /* PPC First Stage info */ 2657956Sxiuyan.wang@Sun.COM PXE_SECOND_STAGE_INTEL = 0x3B0000, /* Intel Second Stage info */ 2667956Sxiuyan.wang@Sun.COM PXE_SECOND_STAGE_PPC = 0x3A0000, /* Intel Second Stage info */ 267*8687SJing.Xiong@Sun.COM /* LICENSE_TIME_START = 0x3C0000, license expiry time info */ 2687956Sxiuyan.wang@Sun.COM PXE_START = 0x3D0000, /* PXE image area */ 2697956Sxiuyan.wang@Sun.COM DEFAULT_DATA_START = 0x3e0000, /* where we place default factory data */ 2707956Sxiuyan.wang@Sun.COM /* User defined region for new boards */ 2717956Sxiuyan.wang@Sun.COM USER_START = 0x3E8000, 2727956Sxiuyan.wang@Sun.COM VPD_START = 0x3E8C00, /* Vendor private data */ 2737956Sxiuyan.wang@Sun.COM LICENSE_START = 0x3E9000, /* Firmware License */ 2747956Sxiuyan.wang@Sun.COM FIXED_START = 0x3F0000 /* backup of crbinit */ 2757956Sxiuyan.wang@Sun.COM } unm_flash_map_t; 2767956Sxiuyan.wang@Sun.COM 2777956Sxiuyan.wang@Sun.COM #define USER_START_OLD PXE_START /* for backward compatibility */ 2787956Sxiuyan.wang@Sun.COM 279*8687SJing.Xiong@Sun.COM #ifdef __cplusplus 280*8687SJing.Xiong@Sun.COM } 281*8687SJing.Xiong@Sun.COM #endif 282*8687SJing.Xiong@Sun.COM 283*8687SJing.Xiong@Sun.COM #endif /* !_UNM_BRDINFO_H_ */ 284