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 24 Module Name: 25 26 AcpiPlatform.h 27 28 Abstract: 29 30 This is an implementation of the ACPI platform driver. Requirements for 31 this driver are defined in the Tiano ACPI External Product Specification, 32 revision 0.3.6. 33 34 35 --*/ 36 37 #ifndef _ACPI_PLATFORM_H_ 38 #define _ACPI_PLATFORM_H_ 39 40 // 41 // Statements that include other header files. 42 // 43 #include <FrameworkDxe.h> 44 #include <PiDxe.h> 45 #include <Base.h> 46 #include <Library/UefiLib.h> 47 #include <Library/BaseLib.h> 48 #include <Library/UefiBootServicesTableLib.h> 49 #include <Library/UefiRuntimeServicesTableLib.h> 50 #include <Library/DebugLib.h> 51 #include <Protocol/FirmwareVolume.h> 52 #include <Library/PcdLib.h> 53 #include <IndustryStandard/HighPrecisionEventTimerTable.h> 54 #include <IndustryStandard/Acpi.h> 55 #include <Protocol/AcpiSystemDescriptionTable.h> 56 #include <Protocol/MpService.h> 57 #include <Protocol/CpuIo.h> 58 #include <IndustryStandard/Acpi30.h> 59 #include <IndustryStandard/Acpi20.h> 60 #include <Library/HobLib.h> 61 #include <AlertStandardFormatTable.h> 62 #include <Guid/SetupVariable.h> 63 #include <Protocol/GlobalNvsArea.h> 64 #include <Library/BaseMemoryLib.h> 65 #include <Library/MemoryAllocationLib.h> 66 #include <PchRegs.h> 67 #include <Library/PchPlatformLib.h> 68 // 69 // Global variables. 70 // 71 EFI_GLOBAL_NVS_AREA_PROTOCOL mGlobalNvsArea; 72 73 // 74 // ACPI table information used to initialize tables. 75 #define EFI_ACPI_OEM_REVISION 0x00000003 76 #define EFI_ACPI_CREATOR_ID SIGNATURE_32 ('V', 'L', 'V', '2') 77 #define EFI_ACPI_CREATOR_REVISION 0x0100000D 78 79 #define WPCN381U_CONFIG_INDEX 0x2E 80 #define WPCN381U_CONFIG_DATA 0x2F 81 #define WPCN381U_CHIP_ID 0xF4 82 #define WDCP376_CHIP_ID 0xF1 83 84 #define MOBILE_PLATFORM 1 85 #define DESKTOP_PLATFORM 2 86 87 // 88 // Define macros to build data structure signatures from characters. 89 // 90 #ifndef EFI_SIGNATURE_16 91 #define EFI_SIGNATURE_16(A, B) ((A) | (B << 8)) 92 #endif 93 #ifndef EFI_SIGNATURE_32 94 #define EFI_SIGNATURE_32(A, B, C, D) (EFI_SIGNATURE_16 (A, B) | (EFI_SIGNATURE_16 (C, D) << 16)) 95 #endif 96 #ifndef EFI_SIGNATURE_64 97 #define EFI_SIGNATURE_64(A, B, C, D, E, F, G, H) \ 98 (EFI_SIGNATURE_32 (A, B, C, D) | ((UINT64) (EFI_SIGNATURE_32 (E, F, G, H)) << 32)) 99 #endif 100 101 102 #define GV3_SSDT_OEM_TABLE_IDBASE 0x4000 103 104 // 105 // Private Driver Data. 106 // 107 // 108 // Define Union of IO APIC & Local APIC structure. 109 // 110 typedef union { 111 EFI_ACPI_2_0_PROCESSOR_LOCAL_APIC_STRUCTURE AcpiLocalApic; 112 EFI_ACPI_2_0_IO_APIC_STRUCTURE AcpiIoApic; 113 struct { 114 UINT8 Type; 115 UINT8 Length; 116 } AcpiApicCommon; 117 } ACPI_APIC_STRUCTURE_PTR; 118 119 // 120 // Protocol private structure definition. 121 // 122 123 /** 124 Entry point of the ACPI platform driver. 125 126 @param[in] ImageHandle EFI_HANDLE: A handle for the image that is initializing this driver. 127 @param[in] SystemTable EFI_SYSTEM_TABLE: A pointer to the EFI system table. 128 129 @retval EFI_SUCCESS Driver initialized successfully. 130 @retval EFI_LOAD_ERROR Failed to Initialize or has been loaded. 131 @retval EFI_OUT_OF_RESOURCES Could not allocate needed resources. 132 133 **/ 134 EFI_STATUS 135 InstallAcpiPlatform ( 136 IN EFI_HANDLE ImageHandle, 137 IN EFI_SYSTEM_TABLE *SystemTable 138 ); 139 140 /** 141 Get Acpi Table Version. 142 143 @param[in] ImageHandle EFI_HANDLE: A handle for the image that is initializing this driver. 144 @param[in] SystemTable EFI_SYSTEM_TABLE: A pointer to the EFI system table. 145 146 @retval EFI_SUCCESS: Driver initialized successfully. 147 @retval EFI_LOAD_ERROR: Failed to Initialize or has been loaded. 148 @retval EFI_OUT_OF_RESOURCES: Could not allocate needed resources. 149 150 --*/ 151 EFI_ACPI_TABLE_VERSION 152 GetAcpiTableVersion ( 153 VOID 154 ); 155 156 /** 157 The funtion returns Oem specific information of Acpi Platform. 158 159 @param[in] OemId OemId returned. 160 @param[in] OemTableId OemTableId returned. 161 @param[in] OemRevision OemRevision returned. 162 163 @retval EFI_STATUS Status of function execution. 164 165 **/ 166 EFI_STATUS 167 AcpiPlatformGetOemFields ( 168 OUT UINT8 *OemId, 169 OUT UINT64 *OemTableId, 170 OUT UINT32 *OemRevision 171 ); 172 173 /** 174 The function returns Acpi table version. 175 176 @param[in] 177 178 @retval EFI_ACPI_TABLE_VERSION Acpi table version encoded as a UINT32. 179 180 **/ 181 EFI_ACPI_TABLE_VERSION 182 AcpiPlatformGetAcpiSetting ( 183 VOID 184 ); 185 186 /** 187 Entry point for Acpi platform driver. 188 189 @param[in] ImageHandle A handle for the image that is initializing this driver. 190 @param[in] SystemTable A pointer to the EFI system table. 191 192 @retval EFI_SUCCESS Driver initialized successfully. 193 @retval EFI_LOAD_ERROR Failed to Initialize or has been loaded. 194 @retval EFI_OUT_OF_RESOURCES Could not allocate needed resources. 195 196 **/ 197 EFI_STATUS 198 EFIAPI 199 AcpiPlatformEntryPoint ( 200 IN EFI_HANDLE ImageHandle, 201 IN EFI_SYSTEM_TABLE *SystemTable 202 ); 203 204 UINT8 205 ReadCmosBank1Byte ( 206 IN UINT8 Index 207 ); 208 209 VOID 210 WriteCmosBank1Byte ( 211 IN UINT8 Index, 212 IN UINT8 Data 213 ); 214 215 VOID 216 SelectNFCDevice ( 217 IN VOID 218 ); 219 220 VOID 221 SettingI2CTouchAddress ( 222 IN VOID 223 ); 224 225 extern 226 EFI_STATUS 227 EFIAPI 228 IsctDxeEntryPoint ( 229 IN EFI_HANDLE ImageHandle, 230 IN EFI_SYSTEM_TABLE *SystemTable 231 ); 232 233 #endif 234