xref: /openbmc/fb-ipmi-oem/include/oemcommands.hpp (revision 010dee0487db34138e6311a5bbb51e0f7683de30)
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