blob: 33714a12296625314f347b48a2b8557622ee118c [file] [log] [blame]
Ben Tyner9ae5ca42020-02-28 13:13:50 -06001#pragma once
2
Ben Tyner792f32f2020-06-02 08:50:47 -05003#include <stdint.h>
4
Ben Tyner9ae5ca42020-02-28 13:13:50 -06005/**
6 * @brief TI special attention handler
7 *
8 * Handle special attention due to a terminate immediately (TI) condition.
9 */
10namespace attn
11{
12
Ben Tyner792f32f2020-06-02 08:50:47 -050013// TI data area definition
14#pragma pack(push)
15#pragma pack(1)
16struct TiDataArea
17{
18 uint8_t tiAreaValid; // 0x00, common (non-zero == valid)
19 uint8_t command; // 0x01, phyp/opal = 0xA1
20 uint16_t numDataBytes; // 0x02, phyp/opal
21 uint8_t reserved1; // 0x04, reserved
22 uint8_t hbTerminateType; // 0x05, hostboot only
23 uint16_t hardwareDumpType; // 0x06, phyp/opal
24 uint8_t srcFormat; // 0x08, phyp/opal = 0x02
25 uint8_t srcFlags; // 0x09, phyp/opal
26 uint8_t numAsciiWords; // 0x0a, phyp/opal
27 uint8_t numHexWords; // 0x0b, phyp/opal
28 uint8_t hbDumpFlag; // 0x0c, hostboot only
29 uint8_t source; // 0x0d, hostboot only
30 uint16_t lenSrc; // 0x0e, phyp/opal
31 uint32_t srcWord12HbWord0; // 0x10, common
32 uint32_t srcWord13HbWord2; // 0x14, common (Word1 intentionally skipped)
33 uint32_t srcWord14HbWord3; // 0x18, common
34 uint32_t srcWord15HbWord4; // 0x1c, common
35 uint32_t srcWord16HbWord5; // 0x20, common
36 uint32_t srcWord17HbWord6; // 0x24, common
37 uint32_t srcWord18HbWord7; // 0x28, common
38 uint32_t srcWord19HbWord8; // 0x2c, common
39 uint32_t asciiData0; // 0x30, phyp/opal, hostboot error_data
40 uint32_t asciiData1; // 0x34, phyp/opal, hostboot EID
41 uint32_t asciiData2; // 0x38, phyp/opal
42 uint32_t asciiData3; // 0x3c, phyp/opal
43 uint32_t asciiData4; // 0x40, phyp/opal
44 uint32_t asciiData5; // 0x44, phyp/opal
45 uint32_t asciiData6; // 0x48, phyp/opal
46 uint32_t asciiData7; // 0x4c, phyp/opal
47 uint8_t location; // 0x50, phyp/opal
48 uint8_t codeSection; // 0x51, phyp/opal
49 uint8_t additionalSize; // 0x52, phyp/opal
50 uint8_t andData; // 0x53, phyp/opal
51};
52#pragma pack(pop)
53
Ben Tyner8c5e4f42020-10-28 11:11:55 -050054// miscellaneous defines
55constexpr uint8_t TI_WITH_PLID = 0x01;
56constexpr uint8_t TI_WITH_SRC = 0x02;
57constexpr uint8_t TI_WITH_EID = 0x03;
58
59// component ID's
60constexpr uint16_t INITSVC_COMP_ID = 0x0500;
61constexpr uint16_t PNOR_COMP_ID = 0x0600;
62constexpr uint16_t HWAS_COMP_ID = 0x0C00;
63constexpr uint16_t SECURE_COMP_ID = 0x1E00;
64constexpr uint16_t TRBOOT_COMP_ID = 0x2B00;
65
66// HBFW::INITSERVICE::SHUTDOWNPREQUESTED_BY_FSP
67constexpr uint16_t HB_SRC_SHUTDOWN_REQUEST = INITSVC_COMP_ID | 0x0b;
68
69// SHUTDOWN_KEY_TRANSITION
70constexpr uint16_t HB_SRC_KEY_TRANSITION = INITSVC_COMP_ID | 0x15;
71
72// HBFW::HWAS::RC_SYSAVAIL_INSUFFICIENT_HW
73constexpr uint16_t HB_SRC_INSUFFICIENT_HW = HWAS_COMP_ID | 0x04;
74
75// HBFW::TRUSTDBOOT::RC_TPM_NOFUNCTIONALTPM_FAIL
76constexpr uint16_t HB_SRC_TPM_FAIL = TRBOOT_COMP_ID | 0xAD;
77
78// HBFW::SECUREBOOT::RC_ROM_VERIFY
79constexpr uint16_t HB_SRC_ROM_VERIFY = SECURE_COMP_ID | 0x07;
80
81// HBFW::PNOR::RC_BASE_EXT_MISMATCH
82constexpr uint16_t HB_SRC_EXT_MISMATCH = PNOR_COMP_ID | 0x2F;
83
84// HBFW::PNOR:RC_ECC_UE
85constexpr uint16_t HB_SRC_ECC_UE = PNOR_COMP_ID | 0x0F;
86
87// HBFW::PNOR:RC_UNSUPPORTED_MODE
88constexpr uint16_t HB_SRC_UNSUPPORTED_MODE = PNOR_COMP_ID | 0x0D;
89
90// HBFW::PNOR:RC_UNSUPPORTED_SFCRANGE
91constexpr uint16_t HB_SRC_UNSUPPORTED_SFCRANGE = PNOR_COMP_ID | 0x0E;
92
93// HBFW::PNOR:RC_PARTITION_TABLE_INVALID
94constexpr uint16_t HB_SRC_PARTITION_TABLE = PNOR_COMP_ID | 0x0C;
95
96// HBFW::PNOR:RC_UNSUPPORTED_HARDWARE
97constexpr uint16_t HB_SRC_UNSUPPORTED_HARDWARE = PNOR_COMP_ID | 0x0A;
98
99// HBFW::PNOR:RC_PNOR_CORRUPTION
100constexpr uint16_t HB_SRC_PNOR_CORRUPTION = PNOR_COMP_ID | 0x99;
101
102/** @brief Handle terminate immediate special attentions */
Ben Tyner792f32f2020-06-02 08:50:47 -0500103int tiHandler(TiDataArea* i_tiDataArea);
Ben Tyner9ae5ca42020-02-28 13:13:50 -0600104
Ben Tyner8c5e4f42020-10-28 11:11:55 -0500105/** @brief Handle phyp terminate immediately special attention */
106void handlePhypTi(TiDataArea* i_tiDataArea);
107
108/** @brief Handle hostboot terminate immediately special attention */
109void handleHbTi(TiDataArea* i_tiDataArea);
110
Ben Tynerff17f962020-09-23 08:21:19 -0500111/**
Ben Tyner40717722020-09-23 09:43:20 -0500112 * @brief Parse TI info data as raw 32-bit fields
113 *
114 * Read the TI data in as 32-bit fields and place into map.
115 */
116void parseRawTiInfo(std::map<std::string, std::string>& i_map,
117 TiDataArea* i_buffer);
118
119/**
120 * @brief Parse TI info data as PHYP/OPAL data
121 *
122 * Read the TI data, parse as PHYP/OPAL data and place into map.
123 */
124void parsePhypOpalTiInfo(std::map<std::string, std::string>& i_map,
125 TiDataArea* i_tiDataArea);
126
127/**
128 * @brief Parse TI info data as hostboot data
129 *
130 * Read the TI data, parse as hostboot data and place into map.
131 */
132void parseHbTiInfo(std::map<std::string, std::string>& i_map,
133 TiDataArea* i_tiDataArea);
134
135/**
Ben Tynerff17f962020-09-23 08:21:19 -0500136 * @brief Read autoreboot property
137 *
138 * Read the autoreboot property via dbus. This status will be used to
139 * determine whether to either mpipl or quiesce the host on TI condition.
140 */
141bool autoRebootEnabled();
Ben Tyner40717722020-09-23 09:43:20 -0500142
Ben Tyner9ae5ca42020-02-28 13:13:50 -0600143} // namespace attn