1 /*++ 2 3 Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR> 4 5 6 This program and the accompanying materials are licensed and made available under 7 8 the terms and conditions of the BSD License that accompanies this distribution. 9 10 The full text of the license may be found at 11 12 http://opensource.org/licenses/bsd-license.php. 13 14 15 16 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 17 18 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 19 20 21 22 23 Module Name: 24 25 SmmPlatform.h 26 27 Abstract: 28 29 Header file for 30 31 ++*/ 32 33 #ifndef _PLATFORM_H 34 #define _PLATFORM_H 35 36 #include <PiSmm.h> 37 38 39 40 #include <Protocol/SmmBase.h> 41 #include <Protocol/FirmwareVolume.h> 42 #include <Protocol/SmmPowerButtonDispatch.h> 43 #include <Protocol/SmmSxDispatch.h> 44 #include <Protocol/SmmSwDispatch.h> 45 #include <Protocol/SmmSwDispatch2.h> 46 #include <Protocol/SmmIchnDispatch.h> 47 #include <Protocol/SmmAccess.h> 48 #include <Protocol/SmmVariable.h> 49 #include <Protocol/PciRootBridgeIo.h> 50 #include <Protocol/LoadedImage.h> 51 #include "Protocol/GlobalNvsArea.h" 52 #include <Guid/AcpiVariableCompatibility.h> 53 #include <Guid/SetupVariable.h> 54 #include <Guid/EfiVpdData.h> 55 #include <Guid/PciLanInfo.h> 56 #include <IndustryStandard/Pci22.h> 57 58 #include "PchAccess.h" 59 #include "PlatformBaseAddresses.h" 60 61 #include <Library/UefiBootServicesTableLib.h> 62 #include <Library/S3BootScriptLib.h> 63 #include <Library/IoLib.h> 64 #include <Library/DebugLib.h> 65 #include <Library/HobLib.h> 66 #include <Library/BaseLib.h> 67 #include <Library/BaseMemoryLib.h> 68 #include <Library/DevicePathLib.h> 69 #include <Library/PcdLib.h> 70 #include <Library/PchPlatformLib.h> 71 #include <Library/StallSmmLib.h> 72 73 74 75 typedef struct { 76 UINT8 Register; 77 UINT8 Function; 78 UINT8 Device; 79 UINT8 Bus; 80 UINT32 ExtendedRegister; 81 } SMM_PCI_IO_ADDRESS; 82 83 typedef struct { 84 CHAR8 BoardAaNumber[7]; 85 UINTN BoardFabNumber; 86 } BOARD_AA_NUMBER_DECODE; 87 88 // 89 // BugBug -- Need to get these two values from acpi.h, but right now, they are 90 // declared in platform-specific variants of this file, so no easy 91 // way to pick-up the include file and work across platforms. 92 // Need these definitions to go into a file like common\acpi.h. 93 // 94 #define ACPI_ENABLE 0xA0 95 #define ACPI_DISABLE 0xA1 96 97 #define APM_12_FUNCS 0x50 98 #define SMI_SET_SMMVARIABLE_PROTOCOL 0x51 // this is used in Cpu\Pentium\Smm\Base\SmmBase.c 99 100 #define SMI_CMD_GET_MSEG_STATUS 0x70 101 #define SMI_CMD_UPDATE_MSEG_SIZE 0x71 102 #define SMI_CMD_LOAD_STM 0x72 103 #define SMI_CMD_UNLOAD_STM 0x73 104 #define SMI_CMD_GET_SMRAM_RANGES 0x74 105 106 107 #define PCAT_RTC_ADDRESS_REGISTER 0x74 108 #define PCAT_RTC_DATA_REGISTER 0x75 109 110 #define RTC_ADDRESS_SECOND 0x00 111 #define RTC_ADDRESS_SECOND_ALARM 0x01 112 #define RTC_ADDRESS_MINUTE 0x02 113 #define RTC_ADDRESS_MINUTE_ALARM 0x03 114 #define RTC_ADDRESS_HOUR 0x04 115 #define RTC_ADDRESS_HOUR_ALARM 0x05 116 117 #define RTC_ADDRESS_REGISTER_A 0x0A 118 #define RTC_ADDRESS_REGISTER_B 0x0B 119 #define RTC_ADDRESS_REGISTER_C 0x0C 120 #define RTC_ADDRESS_REGISTER_D 0x0D 121 122 #define B_RTC_ALARM_INT_ENABLE 0x20 123 #define B_RTC_ALARM_INT_STATUS 0x20 124 125 #define B_RTC_DATE_ALARM_MASK 0x3F 126 127 #define PCAT_CMOS_2_ADDRESS_REGISTER 0x72 128 #define PCAT_CMOS_2_DATA_REGISTER 0x73 129 130 #define EC_C_PORT 0x66 131 #define SMC_SMI_DISABLE 0xBC 132 #define SMC_ENABLE_ACPI_MODE 0xAA // Enable ACPI mode 133 134 #define IO_MISC 156 135 136 137 #define MAXIMUM_NUMBER_OF_PSTATES 12 138 #define ICH_SMM_DATA_PORT 0xB3 139 140 #define EFI_IA32_PMG_CST_CONFIG 0x000000E2 141 #define B_EFI_CST_CONTROL_LOCK BIT15 142 #define B_EFI_IO_MWAIT_REDIRECTION_ENABLE BIT10 143 #define EFI_IA32_PMG_IO_CAPTURE_ADDR 0x000000E4 144 145 extern EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *mPciRootBridgeIo; 146 147 // 148 // Callback function prototypes 149 // 150 VOID 151 EFIAPI 152 PowerButtonCallback ( 153 IN EFI_HANDLE DispatchHandle, 154 IN EFI_SMM_POWER_BUTTON_DISPATCH_CONTEXT *DispatchContext 155 ); 156 157 VOID 158 S5SleepWakeOnLanCallBack ( 159 IN EFI_HANDLE DispatchHandle, 160 IN EFI_SMM_SX_DISPATCH_CONTEXT *DispatchContext 161 ); 162 163 VOID 164 EFIAPI 165 S5SleepAcLossCallBack ( 166 IN EFI_HANDLE DispatchHandle, 167 IN EFI_SMM_SX_DISPATCH_CONTEXT *DispatchContext 168 ); 169 170 171 VOID 172 EFIAPI 173 S4S5CallBack ( 174 IN EFI_HANDLE DispatchHandle, 175 IN EFI_SMM_SX_DISPATCH_CONTEXT *DispatchContext 176 ); 177 178 VOID 179 EFIAPI 180 EnableAcpiCallback ( 181 IN EFI_HANDLE DispatchHandle, 182 IN EFI_SMM_SW_DISPATCH_CONTEXT *DispatchContext 183 ); 184 185 VOID 186 EFIAPI 187 DisableAcpiCallback ( 188 IN EFI_HANDLE DispatchHandle, 189 IN EFI_SMM_SW_DISPATCH_CONTEXT *DispatchContext 190 ); 191 192 VOID 193 EFIAPI 194 SmmReadyToBootCallback ( 195 IN EFI_HANDLE DispatchHandle, 196 IN EFI_SMM_SW_DISPATCH_CONTEXT *DispatchContext 197 ); 198 199 VOID 200 DummyTco1Callback ( 201 IN EFI_HANDLE DispatchHandle, 202 IN EFI_SMM_ICHN_DISPATCH_CONTEXT *DispatchContext 203 ); 204 205 206 VOID 207 PerrSerrCallback ( 208 IN EFI_HANDLE DispatchHandle, 209 IN EFI_SMM_ICHN_DISPATCH_CONTEXT *DispatchContext 210 ); 211 212 VOID 213 RiCallback ( 214 IN EFI_HANDLE DispatchHandle, 215 IN EFI_SMM_ICHN_DISPATCH_CONTEXT *DispatchContext 216 ); 217 218 219 VOID 220 SetAfterG3On ( 221 BOOLEAN Enable 222 ); 223 224 VOID 225 TurnOffVregUsb ( 226 ); 227 228 VOID 229 PStateSupportCallback ( 230 IN EFI_HANDLE DispatchHandle, 231 IN EFI_SMM_SW_DISPATCH_CONTEXT *DispatchContext 232 ); 233 234 VOID 235 PStateTransitionCallback ( 236 IN EFI_HANDLE DispatchHandle, 237 IN EFI_SMM_SW_DISPATCH_CONTEXT *DispatchContext 238 ); 239 240 EFI_STATUS 241 EFIAPI 242 SxSleepEntryCallBack ( 243 IN EFI_HANDLE DispatchHandle, 244 IN EFI_SMM_SX_DISPATCH_CONTEXT *DispatchContext 245 ); 246 247 EFI_STATUS 248 SaveRuntimeScriptTable ( 249 VOID 250 ); 251 252 253 #endif 254 255