1 /* 2 * Copyright (c) 2018-present Facebook. All Rights Reserved. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #pragma once 18 19 enum ipmi_fb_net_fns 20 { 21 NETFN_OEM_USB_DBG_REQ = 0x3C, 22 NETFN_OEM_USB_DBG_RES = 0x3D, 23 }; 24 25 // OEM Command Codes for USB basded Debug Card 26 enum oem_usb_dbg_cmds 27 { 28 CMD_OEM_USB_DBG_GET_FRAME_INFO = 0x1, 29 CMD_OEM_USB_DBG_GET_UPDATED_FRAMES = 0x2, 30 CMD_OEM_USB_DBG_GET_POST_DESC = 0x3, 31 CMD_OEM_USB_DBG_GET_GPIO_DESC = 0x4, 32 CMD_OEM_USB_DBG_GET_FRAME_DATA = 0x5, 33 CMD_OEM_USB_DBG_CTRL_PANEL = 0x6, 34 }; 35 36 // OEM Command Codes for FB 1S/2S servers 37 enum fb_oem_cmds 38 { 39 CMD_OEM_ADD_RAS_SEL = 0x10, 40 CMD_OEM_ADD_IMC_LOG = 0x11, 41 CMD_OEM_SET_MAC_ADDR = 0x18, 42 CMD_OEM_GET_MAC_ADDR = 0x19, 43 CMD_OEM_SET_PROC_INFO = 0x1A, 44 CMD_OEM_GET_PROC_INFO = 0x1B, 45 CMD_OEM_SET_DIMM_INFO = 0x1C, 46 CMD_OEM_GET_DIMM_INFO = 0x1D, 47 CMD_OEM_BYPASS_CMD = 0x34, 48 CMD_OEM_GET_BOARD_ID = 0x37, 49 CMD_OEM_GET_80PORT_RECORD = 0x49, 50 CMD_OEM_SET_BOOT_ORDER = 0x52, 51 CMD_OEM_GET_BOOT_ORDER = 0x53, 52 CMD_OEM_SET_MACHINE_CONFIG_INFO = 0x6A, 53 CMD_OEM_LEGACY_SET_PPR = 0x6E, 54 CMD_OEM_LEGACY_GET_PPR = 0x6F, 55 CMD_OEM_SET_POST_START = 0x73, 56 CMD_OEM_SET_POST_END = 0x74, 57 CMD_OEM_SET_PPIN_INFO = 0x77, 58 CMD_OEM_SET_ADR_TRIGGER = 0x7A, 59 CMD_OEM_GET_PLAT_INFO = 0x7E, 60 CMD_OEM_SET_SYSTEM_GUID = 0xEF, 61 CMD_OEM_GET_FW_INFO = 0xF2, 62 CMD_OEM_SLED_AC_CYCLE = 0xF3, 63 CMD_OEM_GET_PCIE_CONFIG = 0xF4, 64 CMD_OEM_SET_IMC_VERSION = 0xF5, 65 CMD_OEM_SET_FW_UPDATE_STATE = 0xF6, 66 CMD_OEM_GET_BIOS_FLASH_INFO = 0x55, 67 CMD_OEM_GET_PCIE_PORT_CONFIG = 0x80, 68 CMD_OEM_SET_PCIE_PORT_CONFIG = 0x81, 69 CMD_OEM_GET_TPM_PRESENCE = 0x82, 70 CMD_OEM_SET_TPM_PRESENCE = 0x83, 71 CMD_OEM_SET_BIOS_FLASH_INFO = 0x87, 72 CMD_OEM_SET_PPR = 0x90, 73 CMD_OEM_GET_PPR = 0x91, 74 CMD_OEM_SET_IPMB_OFFONLINE = 0xE6, 75 CMD_OEM_RISER_SENSOR_MON_CRL = 0xE7, 76 CMD_OEM_BBV_POWER_CYCLE = 0xE9, 77 CMD_OEM_ADD_CPER_LOG = 0x70, 78 79 }; 80 81 // OEM Command Codes for QC 82 enum fb_oem_qc_cmds 83 { 84 CMD_OEM_Q_SET_PROC_INFO = 0x10, 85 CMD_OEM_Q_GET_PROC_INFO = 0x11, 86 CMD_OEM_Q_SET_DIMM_INFO = 0x12, 87 CMD_OEM_Q_GET_DIMM_INFO = 0x13, 88 CMD_OEM_Q_SET_DRIVE_INFO = 0x14, 89 CMD_OEM_Q_GET_DRIVE_INFO = 0x15, 90 }; 91 92 #define BMC_POS 0 93 #define SIZE_CPU_PPIN 8 94 #define SIZE_BOOT_ORDER 6 95 #define BOOT_MODE_UEFI 0x01 96 #define BOOT_MODE_CMOS_CLR 0x02 97 #define BOOT_MODE_FORCE_BOOT 0x04 98 #define BOOT_MODE_BOOT_FLAG 0x80 99 #define BIT_0 0x01 100 #define BIT_1 0x02 101 #define BIT_2 0x04 102 #define BIT_3 0x08 103 104 #define JSON_OEM_DATA_FILE "/etc/oemData.json" 105 #define KEY_PPIN_INFO "mb_cpu_ppin" 106 #define KEY_MC_CONFIG "mb_machine_config" 107 #define KEY_MC_CHAS_TYPE "chassis_type" 108 #define KEY_MC_MB_TYPE "mb_type" 109 #define KEY_MC_PROC_CNT "processor_count" 110 #define KEY_MC_MEM_CNT "memory_count" 111 #define KEY_MC_HDD35_CNT "hdd35_count" 112 #define KEY_MC_HDD25_CNT "hdd25_count" 113 #define KEY_MC_RSR_TYPE "riser_type" 114 #define KEY_MC_PCIE_LOC "pcie_card_loc" 115 #define KEY_MC_SLOT1_TYPE "slot1_pcie_type" 116 #define KEY_MC_SLOT2_TYPE "slot2_pcie_type" 117 #define KEY_MC_SLOT3_TYPE "slot3_pcie_type" 118 #define KEY_MC_SLOT4_TYPE "slot4_pcie_type" 119 #define KEY_MC_AEP_CNT "aep_mem_count" 120 121 #define KEY_TS_SLED "timestamp_sled" 122 #define KEY_BOOT_ORDER "server_boot_order" 123 #define KEY_BOOT_MODE "boot_mode" 124 #define KEY_BOOT_SEQ "boot_sequence" 125 #define KEY_SYS_CONFIG "sys_config" 126 #define KEY_DIMM_INDEX "dimm_index" 127 #define KEY_DIMM_TYPE "dimm_type" 128 #define KEY_DIMM_SPEED "dimm_speed" 129 #define KEY_DIMM_SIZE "dimm_size" 130 #define KEY_PPR "ppr" 131 #define KEY_PPR_ACTION "ppr_row_action" 132 #define KEY_PPR_ROW_COUNT "ppr_row_count" 133 #define KEY_PPR_INDEX "ppr_index" 134 #define KEY_PPR_ROW_ADDR "ppr_row_addr" 135 #define KEY_PPR_HST_DATA "ppr_history_data" 136 #define CC_PARAM_NOT_SUPP_IN_CURR_STATE 0xD5 137 #define PPR_ROW_ADDR_LEN 8 138 #define PPR_HST_DATA_LEN 17 139 140 #define BOOT_SEQ_ARRAY_SIZE 10 141 142 const char* bootSeq[] = {"USB_DEV", "NET_IPV4", "SATA_HDD", "SATA_CD", 143 "OTHER", "", "", "", 144 "", "NET_IPV6"}; 145 std::map<std::string, int> bootMap = {{"USB_DEV", 0}, {"NET_IPV4", 1}, 146 {"NET_IPV6", 9}, {"SATA_HDD", 2}, 147 {"SATA_CD", 3}, {"OTHER", 4}}; 148 149 const char* chassisType[] = {"ORV1", "ORV2"}; 150 const char* mbType[] = {"SS", "DS", "TYPE3"}; 151 const char* riserType[] = {"NO_CARD", "2_SLOT", "3_SLOT"}; 152 const char* pcieType[] = {"ABSENT", "AVA1", "AVA2", "AVA3", 153 "AVA4", "Re-timer", "HBA", "OTHER"}; 154 155 enum fb_ppr_sel 156 { 157 PPR_ACTION = 1, 158 PPR_ROW_COUNT, 159 PPR_ROW_ADDR, 160 PPR_HISTORY_DATA, 161 }; 162 163 typedef struct 164 { 165 uint8_t chassis_type; // 00 - ORv1, 01 - ORv2 (FBTP) 166 uint8_t mb_type; // 00 - SS, 01 - DS, 02 - Type3 167 uint8_t proc_cnt; 168 uint8_t mem_cnt; 169 uint8_t hdd35_cnt; // 0/1 in FBTP, ff - unknown 170 uint8_t hdd25_cnt; // 0 for FBTP 171 uint8_t riser_type; // 00 - not installed, 01 - 2 slot, 02 - 3 slot 172 uint8_t pcie_card_loc; // Bit0 - Slot1 Present/Absent, Bit1 - Slot 2 173 // Present/Absent etc. 174 uint8_t slot1_pcie_type; // Always NIC for FBTP 175 uint8_t slot2_pcie_type; // 2-4: 00 - Absent, 01 - AVA 2 x m.2, 02 - AVA 176 // 3x m.2, 177 uint8_t slot3_pcie_type; // 03 - AVA 4 x m.2, 04 - Re-timer, 05 - HBA 178 uint8_t slot4_pcie_type; // 06 - Other flash cards (Intel, HGST), 179 // 80 - Unknown 180 uint8_t aep_mem_cnt; 181 } machineConfigInfo_t; 182 183 /* FB OEM QC commands data structures */ 184 185 #define NETFUN_FB_OEM_QC 0x36 186 187 #define KEY_Q_PROC_INFO "q_proc_info" 188 #define KEY_PROC_INDEX "proc_index" 189 #define KEY_Q_DIMM_INFO "q_dimm_info" 190 #define KEY_DIMM_INDEX "dimm_index" 191 #define KEY_Q_DRIVE_INFO "q_drive_info" 192 #define KEY_HDD_CTRL_TYPE "hdd_ctrl_type" 193 #define KEY_HDD_INDEX "hdd_index" 194 195 typedef struct 196 { 197 uint8_t mfrId[3]; 198 uint8_t procIndex; 199 uint8_t paramSel; 200 uint8_t data[]; 201 } qProcInfo_t; 202 203 typedef struct 204 { 205 uint8_t mfrId[3]; 206 uint8_t dimmIndex; 207 uint8_t paramSel; 208 uint8_t data[]; 209 } qDimmInfo_t; 210 211 typedef struct 212 { 213 uint8_t mfrId[3]; 214 uint8_t hddCtrlType; 215 uint8_t hddIndex; 216 uint8_t paramSel; 217 uint8_t data[]; 218 } qDriveInfo_t; 219 220 const char* cpuInfoKey[] = {"", "product_name", "basic_info", 221 "type", "micro_code", "turbo_mode"}; 222 223 const char* dimmInfoKey[] = { 224 "", "location", "type", "speed", "part_name", 225 "serial_num", "manufacturer_id", "status", "present_bit"}; 226 227 const char* driveInfoKey[] = {"location", "serial_num", "model_name", 228 "fw_version", "capacity", "quantity", 229 "type", "wwn"}; 230 231 const char* ctrlTypeKey[] = {"bios", "expander", "lsi"}; 232