27#define SMC_MAKE_IDENTIFIER(A, B, C, D) \
28 ((UINT32)(((UINT32)(A) << 24U) | ((UINT32)(B) << 16U) | ((UINT32)(C) << 8U) | (UINT32)(D)))
30#define SMC_MAKE_IDENTIFIER(A, B, C, D) \
31 ((UINT32)(((UINT32)(D) << 24U) | ((UINT32)(C) << 16U) | ((UINT32)(B) << 8U) | (UINT32)(A)))
36#define SMC_PORT_BASE 0x0300
37#define SMC_PORT_LENGTH 0x0020
39#define SMC_PORT_OFFSET_DATA 0x00
40#define SMC_PORT_OFFSET_COMMAND 0x04
41#define SMC_PORT_OFFSET_STATUS SMC_PORT_OFFSET_COMMAND
42#define SMC_PORT_OFFSET_RESULT 0x1E
43#define SMC_PORT_OFFSET_EVENT 0x1F
47#define SMC_MMIO_BASE_ADDRESS 0xFEF00000
48#define SMC_MMIO_LENGTH 0x00010000
50#define SMC_MMIO_DATA_VARIABLE 0x00
51#define SMC_MMIO_DATA_FIXED 0x78
55#define SMC_MMIO_OFFSET_KEY 0x00
56#define SMC_MMIO_OFFSET_KEY_TYPE SMC_MMIO_OFFSET_KEY
57#define SMC_MMIO_OFFSET_SMC_MODE SMC_MMIO_OFFSET_KEY
58#define SMC_MMIO_OFFSET_DATA_SIZE 0x05
59#define SMC_MMIO_OFFSET_KEY_ATTRIBUTES 0x06
60#define SMC_MMIO_OFFSET_COMMAND 0x07
61#define SMC_MMIO_OFFSET_RESULT SMC_MMIO_OFFSET_COMMAND
62#define SMC_MMIO_OFFSET_LOG 0x08
66#define SMC_MMIO_READ_KEY \
67 (SMC_MMIO_DATA_VARIABLE + SMC_MMIO_OFFSET_KEY)
69#define SMC_MMIO_READ_KEY_TYPE \
70 (SMC_MMIO_DATA_VARIABLE + SMC_MMIO_OFFSET_KEY_TYPE)
72#define SMC_MMIO_READ_DATA_SIZE \
73 (SMC_MMIO_DATA_VARIABLE + SMC_MMIO_OFFSET_DATA_SIZE)
75#define SMC_MMIO_READ_KEY_ATTRIBUTES \
76 (SMC_MMIO_DATA_VARIABLE + SMC_MMIO_OFFSET_KEY_ATTRIBUTES)
78#define SMC_MMIO_READ_LOG \
79 (SMC_MMIO_DATA_FIXED + SMC_MMIO_OFFSET_LOG)
81#define SMC_MMIO_READ_RESULT \
82 (SMC_MMIO_DATA_FIXED + SMC_MMIO_OFFSET_RESULT)
84#define SMC_MMIO_READ_EVENT_STATUS 0x4000
85#define SMC_MMIO_READ_UNKNOWN1 0x4004
86#define SMC_MMIO_READ_KEY_STATUS 0x4005
90#define SMC_MMIO_WRITE_MODE \
91 (SMC_MMIO_DATA_VARIABLE + SMC_MMIO_OFFSET_SMC_MODE)
93#define SMC_MMIO_WRITE_KEY \
94 (SMC_MMIO_DATA_FIXED + SMC_MMIO_OFFSET_KEY)
96#define SMC_MMIO_WRITE_INDEX \
97 (SMC_MMIO_DATA_FIXED + SMC_MMIO_OFFSET_KEY_TYPE)
99#define SMC_MMIO_WRITE_DATA_SIZE \
100 (SMC_MMIO_DATA_FIXED + SMC_MMIO_OFFSET_DATA_SIZE)
102#define SMC_MMIO_WRITE_KEY_ATTRIBUTES \
103 (SMC_MMIO_DATA_FIXED + SMC_MMIO_OFFSET_KEY_ATTRIBUTES)
105#define SMC_MMIO_WRITE_COMMAND \
106 (SMC_MMIO_DATA_FIXED + SMC_MMIO_OFFSET_COMMAND)
112#define SMC_MODE_APPCODE 'A'
113#define SMC_MODE_UPDATE 'U'
114#define SMC_MODE_BASE 'B'
170#define SMC_STATUS_AWAITING_DATA BIT0
171#define SMC_STATUS_IB_CLOSED BIT1
172#define SMC_STATUS_BUSY BIT2
173#define SMC_STATUS_GOT_COMMAND BIT3
174#define SMC_STATUS_UKN_0x16 BIT4
175#define SMC_STATUS_KEY_DONE BIT5
176#define SMC_STATUS_READY BIT6
177#define SMC_STATUS_UKN_0x80 BIT7
210#define SMC_ERROR(a) (((UINTN)(a)) > 0)
212#define EFI_STATUS_FROM_SMC_RESULT(x) \
213 ((((UINTN)(x)) == SmcSuccess) ? EFI_SUCCESS : EFIERR ((UINTN)(x)))
215#define EFI_SMC_SUCCESS SmcSuccess
216#define EFI_SMC_ERROR EFIERR (SmcError)
218#define EFI_SMC_COMM_COLLISION EFIERR (SmcCommCollision)
219#define EFI_SMC_SPURIOUS_DATA EFIERR (SmcSpuriousData)
220#define EFI_SMC_BAD_COMMAND EFIERR (SmcBadCommand)
221#define EFI_SMC_BAD_PARAMETER EFIERR (SmcBadParameter)
222#define EFI_SMC_NOT_FOUND EFIERR (SmcNotFound)
223#define EFI_SMC_NOT_READABLE EFIERR (SmcNotReadable)
224#define EFI_SMC_NOT_WRITABLE EFIERR (SmcNotWritable)
225#define EFI_SMC_KEY_MISMATCH EFIERR (SmcKeySizeMismatch)
226#define EFI_SMC_FRAMING_ERROR EFIERR (SmcFramingError)
227#define EFI_SMC_BAD_ARGUMENT_ERROR EFIERR (SmcBadArgumentError)
229#define EFI_SMC_TIMEOUT_ERROR EFIERR (SmcTimeoutError)
230#define EFI_SMC_KEY_INDEX_RANGE_ERROR EFIERR (SmcKeyIndexRangeError)
232#define EFI_SMC_BAD_FUNCTION_PARAMETER EFIERR (SmcBadFunctionParameter)
233#define EFI_SMC_EVENT_BUFFER_WRONG_ORDER EFIERR (SmcEventBufferWrongOrder)
234#define EFI_SMC_EVENT_BUFFER_READ_ERROR EFIERR (SmcEventBufferReadError)
235#define EFI_SMC_DEVICE_ACCESS_ERROR EFIERR (SmcDeviceAccessError)
236#define EFI_SMC_UNSUPPORTED_FEATURE EFIERR (SmcUnsupportedFeature)
237#define EFI_SMB_ACCESS_ERROR EFIERR (SmcSmbAccessError)
239#define EFI_SMC_INVALID_SIZE EFIERR (SmcInvalidSize)
246#define SMC_MAKE_KEY_TYPE(A, B, C, D) SMC_MAKE_IDENTIFIER ((A), (B), (C), (D))
326#define SMC_KEY_ATTRIBUTE_PRIVATE_WRITE BIT0
327#define SMC_KEY_ATTRIBUTE_PRIVATE_READ BIT1
328#define SMC_KEY_ATTRIBUTE_ATOMIC BIT2
329#define SMC_KEY_ATTRIBUTE_CONST BIT3
330#define SMC_KEY_ATTRIBUTE_FUNCTION BIT4
331#define SMC_KEY_ATTRIBUTE_UKN_0x20 BIT5
332#define SMC_KEY_ATTRIBUTE_WRITE BIT6
333#define SMC_KEY_ATTRIBUTE_READ BIT7
340#define SMC_MAX_DATA_SIZE (SMC_MMIO_DATA_FIXED - SMC_MMIO_DATA_VARIABLE)
348#define SMC_KEY_IS_VALID_CHAR(x) (((x) >= 0x20) && ((x) <= 0x7E))
351#define SMC_MAKE_KEY(A, B, C, D) SMC_MAKE_IDENTIFIER ((A), (B), (C), (D))
353#define SMC_KEY_NUM SMC_MAKE_KEY ('$', 'N', 'u', 'm')
354#define SMC_KEY_ADR SMC_MAKE_KEY ('$', 'A', 'd', 'r')
355#define SMC_KEY_LDKN SMC_MAKE_KEY ('L', 'D', 'K', 'N')
356#define SMC_KEY_HBKP SMC_MAKE_KEY ('H', 'B', 'K', 'P')
357#define SMC_KEY_KEY SMC_MAKE_KEY ('#', 'K', 'E', 'Y')
358#define SMC_KEY_RMde SMC_MAKE_KEY ('R', 'M', 'd', 'e')
359#define SMC_KEY_BRSC SMC_MAKE_KEY ('B', 'R', 'S', 'C')
360#define SMC_KEY_MSLD SMC_MAKE_KEY ('M', 'S', 'L', 'D')
361#define SMC_KEY_BATP SMC_MAKE_KEY ('B', 'A', 'T', 'P')
362#define SMC_KEY_BBIN SMC_MAKE_KEY ('B', 'B', 'I', 'N')
372#define SMC_FLASH_SIZE_MAX 0x0800
429#define SMC_MAX_LOG_SIZE 0x80
436#define SMC_HBKP_SIZE 0x20
@ SmcCmdWriteValueAtIndex
@ SmcCmdFlashAuthMoreData
@ SmcCmdFlashWriteMoreData
@ SmcEventBufferWrongOrder
@ SmcEventBufferReadError
@ SmcBadFunctionParameter
#define SMC_MAKE_KEY_TYPE(A, B, C, D)
@ SmcSystemStateNotifyPrepareForS0
@ SmcSystemStateNotifyMacOsPanicCause
@ SmcSystemStateNotifyMacOsPanicDone
@ SmcSystemStateNotifyMacEfiFirmwareUpdated
@ SmcSystemStateNotifyRestart
@ SmcSystemStateNotifyResumeDevices
@ SmcSystemStateNotifyQuiesceDevices
@ SmcSystemStateNotifyGPUPanelPowerOn
@ SmcEventCallPlatformFunction
@ SmcEventPowerStateNotify
@ SmcEventShutdownImminent
@ SmcEventSystemStateNotify
@ SmcEventPThermalLevelChanged
@ SmcSystemStateNotifyPanicMacOSWatchdog
@ SmcSystemStateNotifyPanicACPIPanic
@ SmcSystemStateNotifyPanicX86CpuCATERR
@ SmcSystemStateNotifyPanicMacOSPanic
@ SmcSystemStateNotifyPanicX86StraightS5Shutdown
@ SmcSystemStateNotifyPanicUnknown
@ SmcSystemStateNotifyPanicX86GlobalReset
@ SmcSystemStateNotifyPanicMacEFI