1e7d23d0eSVijay Khemka /* 2e7d23d0eSVijay Khemka * Copyright (c) 2018-present Facebook. All Rights Reserved. 3e7d23d0eSVijay Khemka * 4e7d23d0eSVijay Khemka * Licensed under the Apache License, Version 2.0 (the "License"); 5e7d23d0eSVijay Khemka * you may not use this file except in compliance with the License. 6e7d23d0eSVijay Khemka * You may obtain a copy of the License at 7e7d23d0eSVijay Khemka * 8e7d23d0eSVijay Khemka * http://www.apache.org/licenses/LICENSE-2.0 9e7d23d0eSVijay Khemka * 10e7d23d0eSVijay Khemka * Unless required by applicable law or agreed to in writing, software 11e7d23d0eSVijay Khemka * distributed under the License is distributed on an "AS IS" BASIS, 12e7d23d0eSVijay Khemka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e7d23d0eSVijay Khemka * See the License for the specific language governing permissions and 14e7d23d0eSVijay Khemka * limitations under the License. 15e7d23d0eSVijay Khemka */ 16e7d23d0eSVijay Khemka 17e7d23d0eSVijay Khemka #pragma once 18e7d23d0eSVijay Khemka 19e7d23d0eSVijay Khemka enum ipmi_fb_net_fns 20e7d23d0eSVijay Khemka { 21e7d23d0eSVijay Khemka NETFN_OEM_USB_DBG_REQ = 0x3C, 22e7d23d0eSVijay Khemka NETFN_OEM_USB_DBG_RES = 0x3D, 23e7d23d0eSVijay Khemka }; 24e7d23d0eSVijay Khemka 25e7d23d0eSVijay Khemka // OEM Command Codes for USB basded Debug Card 26e7d23d0eSVijay Khemka enum oem_usb_dbg_cmds 27e7d23d0eSVijay Khemka { 28e7d23d0eSVijay Khemka CMD_OEM_USB_DBG_GET_FRAME_INFO = 0x1, 29e7d23d0eSVijay Khemka CMD_OEM_USB_DBG_GET_UPDATED_FRAMES = 0x2, 30e7d23d0eSVijay Khemka CMD_OEM_USB_DBG_GET_POST_DESC = 0x3, 31e7d23d0eSVijay Khemka CMD_OEM_USB_DBG_GET_GPIO_DESC = 0x4, 32e7d23d0eSVijay Khemka CMD_OEM_USB_DBG_GET_FRAME_DATA = 0x5, 33e7d23d0eSVijay Khemka CMD_OEM_USB_DBG_CTRL_PANEL = 0x6, 34e7d23d0eSVijay Khemka }; 35e7d23d0eSVijay Khemka 36e7d23d0eSVijay Khemka // OEM Command Codes for FB 1S/2S servers 37e7d23d0eSVijay Khemka enum fb_oem_cmds 38e7d23d0eSVijay Khemka { 39e7d23d0eSVijay Khemka CMD_OEM_ADD_RAS_SEL = 0x10, 40e7d23d0eSVijay Khemka CMD_OEM_ADD_IMC_LOG = 0x11, 41e7d23d0eSVijay Khemka CMD_OEM_SET_MAC_ADDR = 0x18, 42e7d23d0eSVijay Khemka CMD_OEM_GET_MAC_ADDR = 0x19, 43e7d23d0eSVijay Khemka CMD_OEM_SET_PROC_INFO = 0x1A, 44e7d23d0eSVijay Khemka CMD_OEM_GET_PROC_INFO = 0x1B, 45e7d23d0eSVijay Khemka CMD_OEM_SET_DIMM_INFO = 0x1C, 46e7d23d0eSVijay Khemka CMD_OEM_GET_DIMM_INFO = 0x1D, 47e7d23d0eSVijay Khemka CMD_OEM_BYPASS_CMD = 0x34, 48e7d23d0eSVijay Khemka CMD_OEM_GET_BOARD_ID = 0x37, 49e7d23d0eSVijay Khemka CMD_OEM_GET_80PORT_RECORD = 0x49, 50e7d23d0eSVijay Khemka CMD_OEM_SET_BOOT_ORDER = 0x52, 51e7d23d0eSVijay Khemka CMD_OEM_GET_BOOT_ORDER = 0x53, 5299d42b6eSCosmo Chou CMD_OEM_GET_HTTPS_BOOT_DATA = 0x57, 5399d42b6eSCosmo Chou CMD_OEM_GET_HTTPS_BOOT_ATTR = 0x58, 54e7d23d0eSVijay Khemka CMD_OEM_SET_MACHINE_CONFIG_INFO = 0x6A, 55e7d23d0eSVijay Khemka CMD_OEM_LEGACY_SET_PPR = 0x6E, 56e7d23d0eSVijay Khemka CMD_OEM_LEGACY_GET_PPR = 0x6F, 57e7d23d0eSVijay Khemka CMD_OEM_SET_POST_START = 0x73, 58e7d23d0eSVijay Khemka CMD_OEM_SET_POST_END = 0x74, 59e7d23d0eSVijay Khemka CMD_OEM_SET_PPIN_INFO = 0x77, 60e7d23d0eSVijay Khemka CMD_OEM_SET_ADR_TRIGGER = 0x7A, 61e7d23d0eSVijay Khemka CMD_OEM_GET_PLAT_INFO = 0x7E, 62e7d23d0eSVijay Khemka CMD_OEM_SET_SYSTEM_GUID = 0xEF, 63e7d23d0eSVijay Khemka CMD_OEM_GET_FW_INFO = 0xF2, 64e7d23d0eSVijay Khemka CMD_OEM_SLED_AC_CYCLE = 0xF3, 65e7d23d0eSVijay Khemka CMD_OEM_GET_PCIE_CONFIG = 0xF4, 66e7d23d0eSVijay Khemka CMD_OEM_SET_IMC_VERSION = 0xF5, 67e7d23d0eSVijay Khemka CMD_OEM_SET_FW_UPDATE_STATE = 0xF6, 68e7d23d0eSVijay Khemka CMD_OEM_GET_BIOS_FLASH_INFO = 0x55, 69e7d23d0eSVijay Khemka CMD_OEM_GET_PCIE_PORT_CONFIG = 0x80, 70e7d23d0eSVijay Khemka CMD_OEM_SET_PCIE_PORT_CONFIG = 0x81, 71e7d23d0eSVijay Khemka CMD_OEM_GET_TPM_PRESENCE = 0x82, 72e7d23d0eSVijay Khemka CMD_OEM_SET_TPM_PRESENCE = 0x83, 73e7d23d0eSVijay Khemka CMD_OEM_SET_BIOS_FLASH_INFO = 0x87, 74e7d23d0eSVijay Khemka CMD_OEM_SET_PPR = 0x90, 75e7d23d0eSVijay Khemka CMD_OEM_GET_PPR = 0x91, 76e7d23d0eSVijay Khemka CMD_OEM_SET_IPMB_OFFONLINE = 0xE6, 77e7d23d0eSVijay Khemka CMD_OEM_RISER_SENSOR_MON_CRL = 0xE7, 78e7d23d0eSVijay Khemka CMD_OEM_BBV_POWER_CYCLE = 0xE9, 797ab87bbbSCosmo Chou CMD_OEM_CRASHDUMP = 0x70, 80e7d23d0eSVijay Khemka 81e7d23d0eSVijay Khemka }; 821d4a0697SVijay Khemka 831d4a0697SVijay Khemka // OEM Command Codes for QC 841d4a0697SVijay Khemka enum fb_oem_qc_cmds 851d4a0697SVijay Khemka { 861d4a0697SVijay Khemka CMD_OEM_Q_SET_PROC_INFO = 0x10, 871d4a0697SVijay Khemka CMD_OEM_Q_GET_PROC_INFO = 0x11, 881d4a0697SVijay Khemka CMD_OEM_Q_SET_DIMM_INFO = 0x12, 891d4a0697SVijay Khemka CMD_OEM_Q_GET_DIMM_INFO = 0x13, 901d4a0697SVijay Khemka CMD_OEM_Q_SET_DRIVE_INFO = 0x14, 911d4a0697SVijay Khemka CMD_OEM_Q_GET_DRIVE_INFO = 0x15, 921d4a0697SVijay Khemka }; 931d4a0697SVijay Khemka 9410ff3d86SKarthikeyan Pasupathi /* To handle the processor product 9510ff3d86SKarthikeyan Pasupathi * name (ASCII code). */ 9610ff3d86SKarthikeyan Pasupathi #define MAX_BUF 50 9710ff3d86SKarthikeyan Pasupathi 9898aabdb1SKarthikeyan Pasupathi #define BMC_POS 0 991d4a0697SVijay Khemka #define SIZE_CPU_PPIN 8 1001d4a0697SVijay Khemka #define SIZE_BOOT_ORDER 6 1011d4a0697SVijay Khemka #define BOOT_MODE_UEFI 0x01 1021d4a0697SVijay Khemka #define BOOT_MODE_CMOS_CLR 0x02 1031d4a0697SVijay Khemka #define BOOT_MODE_FORCE_BOOT 0x04 1041d4a0697SVijay Khemka #define BOOT_MODE_BOOT_FLAG 0x80 1051d4a0697SVijay Khemka #define BIT_0 0x01 1061d4a0697SVijay Khemka #define BIT_1 0x02 1071d4a0697SVijay Khemka #define BIT_2 0x04 1081d4a0697SVijay Khemka #define BIT_3 0x08 1091d4a0697SVijay Khemka 110d532fecaSKarthikeyan Pasupathi #define KEY_PROC_NAME "product_name" 111d532fecaSKarthikeyan Pasupathi #define KEY_BASIC_INFO "basic_info" 11210ff3d86SKarthikeyan Pasupathi #define DIMM_TYPE "type" 11310ff3d86SKarthikeyan Pasupathi #define DIMM_SPEED "speed" 11410ff3d86SKarthikeyan Pasupathi #define JSON_DIMM_TYPE_FILE "/usr/share/lcd-debug/dimm_type.json" 1151d4a0697SVijay Khemka #define JSON_OEM_DATA_FILE "/etc/oemData.json" 1161d4a0697SVijay Khemka #define KEY_PPIN_INFO "mb_cpu_ppin" 1171d4a0697SVijay Khemka #define KEY_MC_CONFIG "mb_machine_config" 1181d4a0697SVijay Khemka #define KEY_MC_CHAS_TYPE "chassis_type" 1191d4a0697SVijay Khemka #define KEY_MC_MB_TYPE "mb_type" 1201d4a0697SVijay Khemka #define KEY_MC_PROC_CNT "processor_count" 1211d4a0697SVijay Khemka #define KEY_MC_MEM_CNT "memory_count" 1221d4a0697SVijay Khemka #define KEY_MC_HDD35_CNT "hdd35_count" 1231d4a0697SVijay Khemka #define KEY_MC_HDD25_CNT "hdd25_count" 1241d4a0697SVijay Khemka #define KEY_MC_RSR_TYPE "riser_type" 1251d4a0697SVijay Khemka #define KEY_MC_PCIE_LOC "pcie_card_loc" 1261d4a0697SVijay Khemka #define KEY_MC_SLOT1_TYPE "slot1_pcie_type" 1271d4a0697SVijay Khemka #define KEY_MC_SLOT2_TYPE "slot2_pcie_type" 1281d4a0697SVijay Khemka #define KEY_MC_SLOT3_TYPE "slot3_pcie_type" 1291d4a0697SVijay Khemka #define KEY_MC_SLOT4_TYPE "slot4_pcie_type" 1301d4a0697SVijay Khemka #define KEY_MC_AEP_CNT "aep_mem_count" 1311d4a0697SVijay Khemka 1321d4a0697SVijay Khemka #define KEY_TS_SLED "timestamp_sled" 1331d4a0697SVijay Khemka #define KEY_BOOT_ORDER "server_boot_order" 1341d4a0697SVijay Khemka #define KEY_BOOT_MODE "boot_mode" 1351d4a0697SVijay Khemka #define KEY_BOOT_SEQ "boot_sequence" 1361d4a0697SVijay Khemka #define KEY_SYS_CONFIG "sys_config" 1371d4a0697SVijay Khemka #define KEY_DIMM_INDEX "dimm_index" 1381d4a0697SVijay Khemka #define KEY_DIMM_TYPE "dimm_type" 1391d4a0697SVijay Khemka #define KEY_DIMM_SPEED "dimm_speed" 1401d4a0697SVijay Khemka #define KEY_DIMM_SIZE "dimm_size" 1411d4a0697SVijay Khemka #define KEY_PPR "ppr" 1421d4a0697SVijay Khemka #define KEY_PPR_ACTION "ppr_row_action" 1431d4a0697SVijay Khemka #define KEY_PPR_ROW_COUNT "ppr_row_count" 1441d4a0697SVijay Khemka #define KEY_PPR_INDEX "ppr_index" 1451d4a0697SVijay Khemka #define KEY_PPR_ROW_ADDR "ppr_row_addr" 1461d4a0697SVijay Khemka #define KEY_PPR_HST_DATA "ppr_history_data" 1471d4a0697SVijay Khemka #define CC_PARAM_NOT_SUPP_IN_CURR_STATE 0xD5 1481d4a0697SVijay Khemka #define PPR_ROW_ADDR_LEN 8 1491d4a0697SVijay Khemka #define PPR_HST_DATA_LEN 17 1501d4a0697SVijay Khemka 151877d5dd9SVijay Khemka #define BOOT_SEQ_ARRAY_SIZE 10 152877d5dd9SVijay Khemka 1537bb4592aSDelphine CC Chiu const char* bootSeqDefine[] = {"USB_DEV", "NET_IPV4", "SATA_HDD", "SATA_CD", 1541d4a0697SVijay Khemka "OTHER", "", "", "", 1551d4a0697SVijay Khemka "", "NET_IPV6"}; 1567bb4592aSDelphine CC Chiu 1577bb4592aSDelphine CC Chiu /* 1587bb4592aSDelphine CC Chiu Byte 2-6– Boot sequence 1597bb4592aSDelphine CC Chiu Bit 2:0 – boot device id 1607bb4592aSDelphine CC Chiu 000b: USB device 1617bb4592aSDelphine CC Chiu 001b: Network 1627bb4592aSDelphine CC Chiu 010b: SATA HDD 1637bb4592aSDelphine CC Chiu 011b: SATA-CDROM 1647bb4592aSDelphine CC Chiu 100b: Other removable Device 1657bb4592aSDelphine CC Chiu Bit 7:3 – reserve for boot device special request 1667bb4592aSDelphine CC Chiu If Bit 2:0 is 001b (Network), Bit3 is IPv4/IPv6 order 1677bb4592aSDelphine CC Chiu Bit3=0b: IPv4 first 1687bb4592aSDelphine CC Chiu Bit3=1b: IPv6 first 1697bb4592aSDelphine CC Chiu */ 170*010dee04SPatrick Williams std::map<std::string, int> bootMap = { 171*010dee04SPatrick Williams {"USB_DEV", 0}, {"NET_IPV4", 1}, {"NET_IPV6", 9}, 172*010dee04SPatrick Williams {"SATA_HDD", 2}, {"SATA_CD", 3}, {"OTHER", 4}}; 1731d4a0697SVijay Khemka 17410ff3d86SKarthikeyan Pasupathi std::map<size_t, std::string> dimmVenMap = { 17510ff3d86SKarthikeyan Pasupathi {0xce, "Samsung"}, {0xad, "Hynix"}, {0x2c, "Micron"}}; 17610ff3d86SKarthikeyan Pasupathi 1771d4a0697SVijay Khemka const char* chassisType[] = {"ORV1", "ORV2"}; 1781d4a0697SVijay Khemka const char* mbType[] = {"SS", "DS", "TYPE3"}; 1791d4a0697SVijay Khemka const char* riserType[] = {"NO_CARD", "2_SLOT", "3_SLOT"}; 1801d4a0697SVijay Khemka const char* pcieType[] = {"ABSENT", "AVA1", "AVA2", "AVA3", 1811d4a0697SVijay Khemka "AVA4", "Re-timer", "HBA", "OTHER"}; 1821d4a0697SVijay Khemka 1831d4a0697SVijay Khemka enum fb_ppr_sel 1841d4a0697SVijay Khemka { 1851d4a0697SVijay Khemka PPR_ACTION = 1, 1861d4a0697SVijay Khemka PPR_ROW_COUNT, 1871d4a0697SVijay Khemka PPR_ROW_ADDR, 1881d4a0697SVijay Khemka PPR_HISTORY_DATA, 1891d4a0697SVijay Khemka }; 1901d4a0697SVijay Khemka 1911d4a0697SVijay Khemka typedef struct 1921d4a0697SVijay Khemka { 1931d4a0697SVijay Khemka uint8_t chassis_type; // 00 - ORv1, 01 - ORv2 (FBTP) 1941d4a0697SVijay Khemka uint8_t mb_type; // 00 - SS, 01 - DS, 02 - Type3 1951d4a0697SVijay Khemka uint8_t proc_cnt; 1961d4a0697SVijay Khemka uint8_t mem_cnt; 1971d4a0697SVijay Khemka uint8_t hdd35_cnt; // 0/1 in FBTP, ff - unknown 1981d4a0697SVijay Khemka uint8_t hdd25_cnt; // 0 for FBTP 1991d4a0697SVijay Khemka uint8_t riser_type; // 00 - not installed, 01 - 2 slot, 02 - 3 slot 2001d4a0697SVijay Khemka uint8_t pcie_card_loc; // Bit0 - Slot1 Present/Absent, Bit1 - Slot 2 2011d4a0697SVijay Khemka // Present/Absent etc. 2021d4a0697SVijay Khemka uint8_t slot1_pcie_type; // Always NIC for FBTP 2031d4a0697SVijay Khemka uint8_t slot2_pcie_type; // 2-4: 00 - Absent, 01 - AVA 2 x m.2, 02 - AVA 2041d4a0697SVijay Khemka // 3x m.2, 2051d4a0697SVijay Khemka uint8_t slot3_pcie_type; // 03 - AVA 4 x m.2, 04 - Re-timer, 05 - HBA 2061d4a0697SVijay Khemka uint8_t slot4_pcie_type; // 06 - Other flash cards (Intel, HGST), 2071d4a0697SVijay Khemka // 80 - Unknown 2081d4a0697SVijay Khemka uint8_t aep_mem_cnt; 2091d4a0697SVijay Khemka } machineConfigInfo_t; 2101d4a0697SVijay Khemka 2111d4a0697SVijay Khemka /* FB OEM QC commands data structures */ 2121d4a0697SVijay Khemka 2131d4a0697SVijay Khemka #define NETFUN_FB_OEM_QC 0x36 2141d4a0697SVijay Khemka 2151d4a0697SVijay Khemka #define KEY_Q_PROC_INFO "q_proc_info" 2161d4a0697SVijay Khemka #define KEY_PROC_INDEX "proc_index" 2171d4a0697SVijay Khemka #define KEY_Q_DIMM_INFO "q_dimm_info" 2181d4a0697SVijay Khemka #define KEY_DIMM_INDEX "dimm_index" 2191d4a0697SVijay Khemka #define KEY_Q_DRIVE_INFO "q_drive_info" 2201d4a0697SVijay Khemka #define KEY_HDD_CTRL_TYPE "hdd_ctrl_type" 2211d4a0697SVijay Khemka #define KEY_HDD_INDEX "hdd_index" 2221d4a0697SVijay Khemka 2231d4a0697SVijay Khemka typedef struct 2241d4a0697SVijay Khemka { 2251d4a0697SVijay Khemka uint8_t mfrId[3]; 2261d4a0697SVijay Khemka uint8_t procIndex; 2271d4a0697SVijay Khemka uint8_t paramSel; 2281d4a0697SVijay Khemka uint8_t data[]; 2291d4a0697SVijay Khemka } qProcInfo_t; 2301d4a0697SVijay Khemka 2311d4a0697SVijay Khemka typedef struct 2321d4a0697SVijay Khemka { 2331d4a0697SVijay Khemka uint8_t mfrId[3]; 2341d4a0697SVijay Khemka uint8_t dimmIndex; 2351d4a0697SVijay Khemka uint8_t paramSel; 2361d4a0697SVijay Khemka uint8_t data[]; 2371d4a0697SVijay Khemka } qDimmInfo_t; 2381d4a0697SVijay Khemka 2391d4a0697SVijay Khemka typedef struct 2401d4a0697SVijay Khemka { 2411d4a0697SVijay Khemka uint8_t mfrId[3]; 2421d4a0697SVijay Khemka uint8_t hddCtrlType; 2431d4a0697SVijay Khemka uint8_t hddIndex; 2441d4a0697SVijay Khemka uint8_t paramSel; 2451d4a0697SVijay Khemka uint8_t data[]; 2461d4a0697SVijay Khemka } qDriveInfo_t; 2471d4a0697SVijay Khemka 24899d42b6eSCosmo Chou enum class HttpsBootAttr : uint8_t 24999d42b6eSCosmo Chou { 25099d42b6eSCosmo Chou certSize = 0x00, 25199d42b6eSCosmo Chou certCrc = 0x01 25299d42b6eSCosmo Chou }; 25399d42b6eSCosmo Chou 2547ab87bbbSCosmo Chou enum class BankType : uint8_t 2557ab87bbbSCosmo Chou { 2567ab87bbbSCosmo Chou mca = 0x01, 2577ab87bbbSCosmo Chou virt = 0x02, 2587ab87bbbSCosmo Chou cpuWdt = 0x03, 2597ab87bbbSCosmo Chou tcdx = 0x06, 2607ab87bbbSCosmo Chou cake = 0x07, 2617ab87bbbSCosmo Chou pie0 = 0x08, 2627ab87bbbSCosmo Chou iom = 0x09, 2637ab87bbbSCosmo Chou ccix = 0x0a, 2647ab87bbbSCosmo Chou cs = 0x0b, 2657ab87bbbSCosmo Chou pcieAer = 0x0c, 2667ab87bbbSCosmo Chou wdtReg = 0x0d, 2677ab87bbbSCosmo Chou ctrl = 0x80, 2687ab87bbbSCosmo Chou crdHdr = 0x81 2697ab87bbbSCosmo Chou }; 2707ab87bbbSCosmo Chou 2717ab87bbbSCosmo Chou enum class CrdState 2727ab87bbbSCosmo Chou { 2737ab87bbbSCosmo Chou free = 0x01, 2747ab87bbbSCosmo Chou waitData = 0x02, 2757ab87bbbSCosmo Chou packing = 0x03 2767ab87bbbSCosmo Chou }; 2777ab87bbbSCosmo Chou 2787ab87bbbSCosmo Chou enum class CrdCtrl 2797ab87bbbSCosmo Chou { 2807ab87bbbSCosmo Chou getState = 0x01, 2817ab87bbbSCosmo Chou finish = 0x02 2827ab87bbbSCosmo Chou }; 2837ab87bbbSCosmo Chou 2847ab87bbbSCosmo Chou constexpr uint8_t ccmNum = 8; 2857ab87bbbSCosmo Chou constexpr uint8_t tcdxNum = 12; 2867ab87bbbSCosmo Chou constexpr uint8_t cakeNum = 6; 2877ab87bbbSCosmo Chou constexpr uint8_t pie0Num = 1; 2887ab87bbbSCosmo Chou constexpr uint8_t iomNum = 4; 2897ab87bbbSCosmo Chou constexpr uint8_t ccixNum = 4; 2907ab87bbbSCosmo Chou constexpr uint8_t csNum = 8; 2917ab87bbbSCosmo Chou 2927ab87bbbSCosmo Chou #pragma pack(push, 1) 2937ab87bbbSCosmo Chou 29499d42b6eSCosmo Chou struct HttpsDataReq 29599d42b6eSCosmo Chou { 29699d42b6eSCosmo Chou uint16_t offset; 29799d42b6eSCosmo Chou uint8_t length; 29899d42b6eSCosmo Chou }; 29999d42b6eSCosmo Chou 3007ab87bbbSCosmo Chou struct CrdCmdHdr 3017ab87bbbSCosmo Chou { 3027ab87bbbSCosmo Chou uint8_t version; 3037ab87bbbSCosmo Chou uint8_t reserved[3]; 3047ab87bbbSCosmo Chou }; 3057ab87bbbSCosmo Chou 3067ab87bbbSCosmo Chou struct CrdBankHdr 3077ab87bbbSCosmo Chou { 3087ab87bbbSCosmo Chou BankType bankType; 3097ab87bbbSCosmo Chou uint8_t version; 3107ab87bbbSCosmo Chou union 3117ab87bbbSCosmo Chou { 3127ab87bbbSCosmo Chou struct 3137ab87bbbSCosmo Chou { 3147ab87bbbSCosmo Chou uint8_t bankId; 3157ab87bbbSCosmo Chou uint8_t coreId; 3167ab87bbbSCosmo Chou }; 3177ab87bbbSCosmo Chou uint8_t reserved[2]; 3187ab87bbbSCosmo Chou }; 3197ab87bbbSCosmo Chou }; 3207ab87bbbSCosmo Chou 3217ab87bbbSCosmo Chou struct CrashDumpHdr 3227ab87bbbSCosmo Chou { 3237ab87bbbSCosmo Chou CrdCmdHdr cmdHdr; 3247ab87bbbSCosmo Chou CrdBankHdr bankHdr; 3257ab87bbbSCosmo Chou }; 3267ab87bbbSCosmo Chou 3277ab87bbbSCosmo Chou // Type 0x01: MCA Bank 3287ab87bbbSCosmo Chou struct CrdMcaBank 3297ab87bbbSCosmo Chou { 3307ab87bbbSCosmo Chou uint64_t mcaCtrl; 3317ab87bbbSCosmo Chou uint64_t mcaSts; 3327ab87bbbSCosmo Chou uint64_t mcaAddr; 3337ab87bbbSCosmo Chou uint64_t mcaMisc0; 3347ab87bbbSCosmo Chou uint64_t mcaCtrlMask; 3357ab87bbbSCosmo Chou uint64_t mcaConfig; 3367ab87bbbSCosmo Chou uint64_t mcaIpid; 3377ab87bbbSCosmo Chou uint64_t mcaSynd; 3387ab87bbbSCosmo Chou uint64_t mcaDestat; 3397ab87bbbSCosmo Chou uint64_t mcaDeaddr; 3407ab87bbbSCosmo Chou uint64_t mcaMisc1; 3417ab87bbbSCosmo Chou }; 3427ab87bbbSCosmo Chou 3437ab87bbbSCosmo Chou struct BankCorePair 3447ab87bbbSCosmo Chou { 3457ab87bbbSCosmo Chou uint8_t bankId; 3467ab87bbbSCosmo Chou uint8_t coreId; 3477ab87bbbSCosmo Chou }; 3487ab87bbbSCosmo Chou 3497ab87bbbSCosmo Chou // Type 0x02: Virtual/Global Bank 3507ab87bbbSCosmo Chou struct CrdVirtualBankV2 3517ab87bbbSCosmo Chou { 3527ab87bbbSCosmo Chou uint32_t s5ResetSts; 3537ab87bbbSCosmo Chou uint32_t breakevent; 3547ab87bbbSCosmo Chou uint16_t mcaCount; 3557ab87bbbSCosmo Chou uint16_t procNum; 3567ab87bbbSCosmo Chou uint32_t apicId; 3577ab87bbbSCosmo Chou uint32_t eax; 3587ab87bbbSCosmo Chou uint32_t ebx; 3597ab87bbbSCosmo Chou uint32_t ecx; 3607ab87bbbSCosmo Chou uint32_t edx; 3617ab87bbbSCosmo Chou struct BankCorePair mcaList[]; 3627ab87bbbSCosmo Chou }; 3637ab87bbbSCosmo Chou 3647ab87bbbSCosmo Chou struct CrdVirtualBankV3 3657ab87bbbSCosmo Chou { 3667ab87bbbSCosmo Chou uint32_t s5ResetSts; 3677ab87bbbSCosmo Chou uint32_t breakevent; 3687ab87bbbSCosmo Chou uint32_t rstSts; 3697ab87bbbSCosmo Chou uint16_t mcaCount; 3707ab87bbbSCosmo Chou uint16_t procNum; 3717ab87bbbSCosmo Chou uint32_t apicId; 3727ab87bbbSCosmo Chou uint32_t eax; 3737ab87bbbSCosmo Chou uint32_t ebx; 3747ab87bbbSCosmo Chou uint32_t ecx; 3757ab87bbbSCosmo Chou uint32_t edx; 3767ab87bbbSCosmo Chou struct BankCorePair mcaList[]; 3777ab87bbbSCosmo Chou }; 3787ab87bbbSCosmo Chou 3797ab87bbbSCosmo Chou // Type 0x03: CPU/Data Fabric Watchdog Timer Bank 3807ab87bbbSCosmo Chou struct CrdCpuWdtBank 3817ab87bbbSCosmo Chou { 3827ab87bbbSCosmo Chou uint32_t hwAssertStsHi[ccmNum]; 3837ab87bbbSCosmo Chou uint32_t hwAssertStsLo[ccmNum]; 3847ab87bbbSCosmo Chou uint32_t origWdtAddrLogHi[ccmNum]; 3857ab87bbbSCosmo Chou uint32_t origWdtAddrLogLo[ccmNum]; 3867ab87bbbSCosmo Chou uint32_t hwAssertMskHi[ccmNum]; 3877ab87bbbSCosmo Chou uint32_t hwAssertMskLo[ccmNum]; 3887ab87bbbSCosmo Chou uint32_t origWdtAddrLogStat[ccmNum]; 3897ab87bbbSCosmo Chou }; 3907ab87bbbSCosmo Chou 3917ab87bbbSCosmo Chou template <size_t N> 3927ab87bbbSCosmo Chou struct CrdHwAssertBank 3937ab87bbbSCosmo Chou { 3947ab87bbbSCosmo Chou uint32_t hwAssertStsHi[N]; 3957ab87bbbSCosmo Chou uint32_t hwAssertStsLo[N]; 3967ab87bbbSCosmo Chou uint32_t hwAssertMskHi[N]; 3977ab87bbbSCosmo Chou uint32_t hwAssertMskLo[N]; 3987ab87bbbSCosmo Chou }; 3997ab87bbbSCosmo Chou 4007ab87bbbSCosmo Chou // Type 0x0C: PCIe AER Bank 4017ab87bbbSCosmo Chou struct CrdPcieAerBank 4027ab87bbbSCosmo Chou { 4037ab87bbbSCosmo Chou uint8_t bus; 4047ab87bbbSCosmo Chou uint8_t dev; 4057ab87bbbSCosmo Chou uint8_t fun; 4067ab87bbbSCosmo Chou uint16_t cmd; 4077ab87bbbSCosmo Chou uint16_t sts; 4087ab87bbbSCosmo Chou uint16_t slot; 4097ab87bbbSCosmo Chou uint8_t secondBus; 4107ab87bbbSCosmo Chou uint16_t vendorId; 4117ab87bbbSCosmo Chou uint16_t devId; 4127ab87bbbSCosmo Chou uint16_t classCodeLo; // Class Code 3 byte 4137ab87bbbSCosmo Chou uint8_t classCodeHi; 4147ab87bbbSCosmo Chou uint16_t secondSts; 4157ab87bbbSCosmo Chou uint16_t ctrl; 4167ab87bbbSCosmo Chou uint32_t uncorrErrSts; 4177ab87bbbSCosmo Chou uint32_t uncorrErrMsk; 4187ab87bbbSCosmo Chou uint32_t uncorrErrSeverity; 4197ab87bbbSCosmo Chou uint32_t corrErrSts; 4207ab87bbbSCosmo Chou uint32_t corrErrMsk; 4217ab87bbbSCosmo Chou uint32_t hdrLogDw0; 4227ab87bbbSCosmo Chou uint32_t hdrLogDw1; 4237ab87bbbSCosmo Chou uint32_t hdrLogDw2; 4247ab87bbbSCosmo Chou uint32_t hdrLogDw3; 4257ab87bbbSCosmo Chou uint32_t rootErrSts; 4267ab87bbbSCosmo Chou uint16_t corrErrSrcId; 4277ab87bbbSCosmo Chou uint16_t errSrcId; 4287ab87bbbSCosmo Chou uint32_t laneErrSts; 4297ab87bbbSCosmo Chou }; 4307ab87bbbSCosmo Chou 4317ab87bbbSCosmo Chou // Type 0x0D: SMU/PSP/PTDMA Watchdog Timers Register Bank 4327ab87bbbSCosmo Chou struct CrdWdtRegBank 4337ab87bbbSCosmo Chou { 4347ab87bbbSCosmo Chou uint8_t nbio; 4357ab87bbbSCosmo Chou char name[32]; 4367ab87bbbSCosmo Chou uint32_t addr; 4377ab87bbbSCosmo Chou uint8_t count; 4387ab87bbbSCosmo Chou uint32_t data[]; 4397ab87bbbSCosmo Chou }; 4407ab87bbbSCosmo Chou 4417ab87bbbSCosmo Chou // Type 0x81: Crashdump Header 4427ab87bbbSCosmo Chou struct CrdHdrBank 4437ab87bbbSCosmo Chou { 4447ab87bbbSCosmo Chou uint64_t ppin; 4457ab87bbbSCosmo Chou uint32_t ucodeVer; 4467ab87bbbSCosmo Chou uint32_t pmio; 4477ab87bbbSCosmo Chou }; 4487ab87bbbSCosmo Chou 4497ab87bbbSCosmo Chou #pragma pack(pop) 4507ab87bbbSCosmo Chou 4511d4a0697SVijay Khemka const char* cpuInfoKey[] = {"", "product_name", "basic_info", 4521d4a0697SVijay Khemka "type", "micro_code", "turbo_mode"}; 4531d4a0697SVijay Khemka 4541d4a0697SVijay Khemka const char* dimmInfoKey[] = { 4551d4a0697SVijay Khemka "", "location", "type", "speed", "part_name", 4561d4a0697SVijay Khemka "serial_num", "manufacturer_id", "status", "present_bit"}; 4571d4a0697SVijay Khemka 4581d4a0697SVijay Khemka const char* driveInfoKey[] = {"location", "serial_num", "model_name", 4591d4a0697SVijay Khemka "fw_version", "capacity", "quantity", 4601d4a0697SVijay Khemka "type", "wwn"}; 4611d4a0697SVijay Khemka 4621d4a0697SVijay Khemka const char* ctrlTypeKey[] = {"bios", "expander", "lsi"}; 463