Upload BSD-licensed Vlv2TbltDevicePkg and Vlv2DeviceRefCodePkg to
https://svn.code.sf.net/p/edk2/code/trunk/edk2/, which are for MinnowBoard MAX open source project. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: David Wei <david.wei@intel.com> Reviewed-by: Mike Wu <mike.wu@intel.com> Reviewed-by: Hot Tian <hot.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16599 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
1307
Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c
Normal file
1307
Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.c
Normal file
File diff suppressed because it is too large
Load Diff
224
Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.h
Normal file
224
Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.h
Normal file
@@ -0,0 +1,224 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
|
||||
|
||||
|
||||
This program and the accompanying materials are licensed and made available under
|
||||
|
||||
the terms and conditions of the BSD License that accompanies this distribution.
|
||||
|
||||
The full text of the license may be found at
|
||||
|
||||
http://opensource.org/licenses/bsd-license.php.
|
||||
|
||||
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Module Name:
|
||||
|
||||
AcpiPlatform.h
|
||||
|
||||
Abstract:
|
||||
|
||||
This is an implementation of the ACPI platform driver. Requirements for
|
||||
this driver are defined in the Tiano ACPI External Product Specification,
|
||||
revision 0.3.6.
|
||||
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _ACPI_PLATFORM_H_
|
||||
#define _ACPI_PLATFORM_H_
|
||||
|
||||
//
|
||||
// Statements that include other header files.
|
||||
//
|
||||
#include <FrameworkDxe.h>
|
||||
#include <PiDxe.h>
|
||||
#include <Base.h>
|
||||
#include <Library/UefiLib.h>
|
||||
#include <Library/BaseLib.h>
|
||||
#include <Library/UefiBootServicesTableLib.h>
|
||||
#include <Library/UefiRuntimeServicesTableLib.h>
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Protocol/FirmwareVolume.h>
|
||||
#include <Library/PcdLib.h>
|
||||
#include <IndustryStandard/HighPrecisionEventTimerTable.h>
|
||||
#include <IndustryStandard/Acpi.h>
|
||||
#include <Protocol/AcpiSystemDescriptionTable.h>
|
||||
#include <Protocol/MpService.h>
|
||||
#include <Protocol/CpuIo.h>
|
||||
#include <IndustryStandard/Acpi30.h>
|
||||
#include <IndustryStandard/Acpi20.h>
|
||||
#include <Library/HobLib.h>
|
||||
#include <AlertStandardFormatTable.h>
|
||||
#include <Guid/SetupVariable.h>
|
||||
#include <Protocol/GlobalNvsArea.h>
|
||||
#include <Library/BaseMemoryLib.h>
|
||||
#include <Library/MemoryAllocationLib.h>
|
||||
#include <PchRegs.h>
|
||||
#include <Library/PchPlatformLib.h>
|
||||
//
|
||||
// Global variables.
|
||||
//
|
||||
EFI_GLOBAL_NVS_AREA_PROTOCOL mGlobalNvsArea;
|
||||
|
||||
//
|
||||
// ACPI table information used to initialize tables.
|
||||
#define EFI_ACPI_OEM_REVISION 0x00000003
|
||||
#define EFI_ACPI_CREATOR_ID SIGNATURE_32 ('V', 'L', 'V', '2')
|
||||
#define EFI_ACPI_CREATOR_REVISION 0x0100000D
|
||||
|
||||
#define WPCN381U_CONFIG_INDEX 0x2E
|
||||
#define WPCN381U_CONFIG_DATA 0x2F
|
||||
#define WPCN381U_CHIP_ID 0xF4
|
||||
#define WDCP376_CHIP_ID 0xF1
|
||||
|
||||
#define MOBILE_PLATFORM 1
|
||||
#define DESKTOP_PLATFORM 2
|
||||
|
||||
//
|
||||
// Define macros to build data structure signatures from characters.
|
||||
//
|
||||
#ifndef EFI_SIGNATURE_16
|
||||
#define EFI_SIGNATURE_16(A, B) ((A) | (B << 8))
|
||||
#endif
|
||||
#ifndef EFI_SIGNATURE_32
|
||||
#define EFI_SIGNATURE_32(A, B, C, D) (EFI_SIGNATURE_16 (A, B) | (EFI_SIGNATURE_16 (C, D) << 16))
|
||||
#endif
|
||||
#ifndef EFI_SIGNATURE_64
|
||||
#define EFI_SIGNATURE_64(A, B, C, D, E, F, G, H) \
|
||||
(EFI_SIGNATURE_32 (A, B, C, D) | ((UINT64) (EFI_SIGNATURE_32 (E, F, G, H)) << 32))
|
||||
#endif
|
||||
|
||||
|
||||
#define GV3_SSDT_OEM_TABLE_IDBASE 0x4000
|
||||
|
||||
//
|
||||
// Private Driver Data.
|
||||
//
|
||||
//
|
||||
// Define Union of IO APIC & Local APIC structure.
|
||||
//
|
||||
typedef union {
|
||||
EFI_ACPI_2_0_PROCESSOR_LOCAL_APIC_STRUCTURE AcpiLocalApic;
|
||||
EFI_ACPI_2_0_IO_APIC_STRUCTURE AcpiIoApic;
|
||||
struct {
|
||||
UINT8 Type;
|
||||
UINT8 Length;
|
||||
} AcpiApicCommon;
|
||||
} ACPI_APIC_STRUCTURE_PTR;
|
||||
|
||||
//
|
||||
// Protocol private structure definition.
|
||||
//
|
||||
|
||||
/**
|
||||
Entry point of the ACPI platform driver.
|
||||
|
||||
@param[in] ImageHandle EFI_HANDLE: A handle for the image that is initializing this driver.
|
||||
@param[in] SystemTable EFI_SYSTEM_TABLE: A pointer to the EFI system table.
|
||||
|
||||
@retval EFI_SUCCESS Driver initialized successfully.
|
||||
@retval EFI_LOAD_ERROR Failed to Initialize or has been loaded.
|
||||
@retval EFI_OUT_OF_RESOURCES Could not allocate needed resources.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
InstallAcpiPlatform (
|
||||
IN EFI_HANDLE ImageHandle,
|
||||
IN EFI_SYSTEM_TABLE *SystemTable
|
||||
);
|
||||
|
||||
/**
|
||||
Get Acpi Table Version.
|
||||
|
||||
@param[in] ImageHandle EFI_HANDLE: A handle for the image that is initializing this driver.
|
||||
@param[in] SystemTable EFI_SYSTEM_TABLE: A pointer to the EFI system table.
|
||||
|
||||
@retval EFI_SUCCESS: Driver initialized successfully.
|
||||
@retval EFI_LOAD_ERROR: Failed to Initialize or has been loaded.
|
||||
@retval EFI_OUT_OF_RESOURCES: Could not allocate needed resources.
|
||||
|
||||
--*/
|
||||
EFI_ACPI_TABLE_VERSION
|
||||
GetAcpiTableVersion (
|
||||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
The funtion returns Oem specific information of Acpi Platform.
|
||||
|
||||
@param[in] OemId OemId returned.
|
||||
@param[in] OemTableId OemTableId returned.
|
||||
@param[in] OemRevision OemRevision returned.
|
||||
|
||||
@retval EFI_STATUS Status of function execution.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
AcpiPlatformGetOemFields (
|
||||
OUT UINT8 *OemId,
|
||||
OUT UINT64 *OemTableId,
|
||||
OUT UINT32 *OemRevision
|
||||
);
|
||||
|
||||
/**
|
||||
The function returns Acpi table version.
|
||||
|
||||
@param[in]
|
||||
|
||||
@retval EFI_ACPI_TABLE_VERSION Acpi table version encoded as a UINT32.
|
||||
|
||||
**/
|
||||
EFI_ACPI_TABLE_VERSION
|
||||
AcpiPlatformGetAcpiSetting (
|
||||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
Entry point for Acpi platform driver.
|
||||
|
||||
@param[in] ImageHandle A handle for the image that is initializing this driver.
|
||||
@param[in] SystemTable A pointer to the EFI system table.
|
||||
|
||||
@retval EFI_SUCCESS Driver initialized successfully.
|
||||
@retval EFI_LOAD_ERROR Failed to Initialize or has been loaded.
|
||||
@retval EFI_OUT_OF_RESOURCES Could not allocate needed resources.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
AcpiPlatformEntryPoint (
|
||||
IN EFI_HANDLE ImageHandle,
|
||||
IN EFI_SYSTEM_TABLE *SystemTable
|
||||
);
|
||||
|
||||
UINT8
|
||||
ReadCmosBank1Byte (
|
||||
IN UINT8 Index
|
||||
);
|
||||
|
||||
VOID
|
||||
WriteCmosBank1Byte (
|
||||
IN UINT8 Index,
|
||||
IN UINT8 Data
|
||||
);
|
||||
|
||||
VOID
|
||||
SelectNFCDevice (
|
||||
IN VOID
|
||||
);
|
||||
|
||||
VOID
|
||||
SettingI2CTouchAddress (
|
||||
IN VOID
|
||||
);
|
||||
|
90
Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.inf
Normal file
90
Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatform.inf
Normal file
@@ -0,0 +1,90 @@
|
||||
#
|
||||
#
|
||||
# Copyright (c) 1999 - 2014, Intel Corporation. All rights reserved
|
||||
#
|
||||
|
||||
# This program and the accompanying materials are licensed and made available under
|
||||
|
||||
# the terms and conditions of the BSD License that accompanies this distribution.
|
||||
|
||||
# The full text of the license may be found at
|
||||
|
||||
# http://opensource.org/licenses/bsd-license.php.
|
||||
|
||||
#
|
||||
|
||||
# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
|
||||
# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
#
|
||||
|
||||
#
|
||||
#
|
||||
# Module Name:
|
||||
#
|
||||
# AcpiPlatformBB.inf
|
||||
#
|
||||
# Abstract:
|
||||
#
|
||||
#
|
||||
|
||||
|
||||
|
||||
[defines]
|
||||
INF_VERSION = 0x00010005
|
||||
BASE_NAME = AcpiPlatform
|
||||
FILE_GUID = F0F6F006-DAB4-44b2-A7A1-0F72EEDCA716
|
||||
MODULE_TYPE = DXE_DRIVER
|
||||
VERSION_STRING = 1.0
|
||||
ENTRY_POINT = AcpiPlatformEntryPoint
|
||||
|
||||
[sources.common]
|
||||
AcpiPlatformHooks.c
|
||||
AcpiPlatform.c
|
||||
|
||||
[Packages]
|
||||
Vlv2TbltDevicePkg/PlatformPkg.dec
|
||||
MdePkg/MdePkg.dec
|
||||
IntelFrameworkPkg/IntelFrameworkPkg.dec
|
||||
MdeModulePkg/MdeModulePkg.dec
|
||||
Vlv2DeviceRefCodePkg/Vlv2DeviceRefCodePkg.dec
|
||||
IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec
|
||||
Vlv2TbltDevicePkg/PlatformPkg.dec
|
||||
|
||||
[LibraryClasses]
|
||||
HobLib
|
||||
UefiRuntimeServicesTableLib
|
||||
UefiDriverEntryPoint
|
||||
BaseMemoryLib
|
||||
DebugLib
|
||||
HobLib
|
||||
IoLib
|
||||
PchPlatformLib
|
||||
|
||||
[Guids]
|
||||
gACPIOSFRMfgStringVariableGuid
|
||||
gEfiAcpiTableStorageGuid
|
||||
gACPIOSFRMfgStringVariableGuid
|
||||
gEfiBoardFeaturesGuid
|
||||
gEfiPlatformInfoGuid
|
||||
gEfiNormalSetupGuid
|
||||
gACPIOSFRRefDataBlockVariableGuid
|
||||
gACPIOSFRModelStringVariableGuid
|
||||
gEfiPlatformCpuInfoGuid
|
||||
gEfiVlv2VariableGuid
|
||||
|
||||
[Protocols]
|
||||
gEfiAcpiTableProtocolGuid # PROTOCOL ALWAYS_CONSUMED
|
||||
gEnhancedSpeedstepProtocolGuid
|
||||
gEfiPlatformCpuProtocolGuid
|
||||
gEfiAcpiSupportProtocolGuid
|
||||
gEfiAcpiS3SaveProtocolGuid
|
||||
gEfiCpuIoProtocolGuid
|
||||
gEfiPs2PolicyProtocolGuid
|
||||
gEfiFirmwareVolume2ProtocolGuid
|
||||
gEfiMpServiceProtocolGuid
|
||||
gEfiGlobalNvsAreaProtocolGuid
|
||||
gEfiTcgProtocolGuid
|
||||
gEfiFirmwareVolumeProtocolGuid
|
||||
gIgdOpRegionProtocolGuid
|
500
Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatformHooks.c
Normal file
500
Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatformHooks.c
Normal file
@@ -0,0 +1,500 @@
|
||||
/** @file
|
||||
|
||||
Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
|
||||
|
||||
|
||||
This program and the accompanying materials are licensed and made available under
|
||||
|
||||
the terms and conditions of the BSD License that accompanies this distribution.
|
||||
|
||||
The full text of the license may be found at
|
||||
|
||||
http://opensource.org/licenses/bsd-license.php.
|
||||
|
||||
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
|
||||
|
||||
|
||||
Module Name:
|
||||
|
||||
AcpiPlatformHooks.c
|
||||
|
||||
Abstract:
|
||||
|
||||
ACPI Platform Driver Hooks
|
||||
|
||||
--*/
|
||||
|
||||
//
|
||||
// Statements that include other files.
|
||||
//
|
||||
#include "AcpiPlatform.h"
|
||||
#include "AcpiPlatformHooks.h"
|
||||
#include "Platform.h"
|
||||
|
||||
//
|
||||
// Prototypes of the various hook functions.
|
||||
//
|
||||
#include "AcpiPlatformHooksLib.h"
|
||||
|
||||
extern EFI_GLOBAL_NVS_AREA_PROTOCOL mGlobalNvsArea;
|
||||
extern SYSTEM_CONFIGURATION mSystemConfiguration;
|
||||
|
||||
ENHANCED_SPEEDSTEP_PROTOCOL *mEistProtocol = NULL;
|
||||
|
||||
EFI_CPU_ID_MAP mCpuApicIdAcpiIdMapTable[MAX_CPU_NUM];
|
||||
|
||||
EFI_STATUS
|
||||
AppendCpuMapTableEntry (
|
||||
IN EFI_ACPI_2_0_PROCESSOR_LOCAL_APIC_STRUCTURE *AcpiLocalApic
|
||||
)
|
||||
{
|
||||
BOOLEAN Added;
|
||||
UINTN Index;
|
||||
|
||||
for (Index = 0; Index < MAX_CPU_NUM; Index++) {
|
||||
if ((mCpuApicIdAcpiIdMapTable[Index].ApicId == AcpiLocalApic->ApicId) && mCpuApicIdAcpiIdMapTable[Index].Flags) {
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
}
|
||||
|
||||
Added = FALSE;
|
||||
for (Index = 0; Index < MAX_CPU_NUM; Index++) {
|
||||
if (!mCpuApicIdAcpiIdMapTable[Index].Flags) {
|
||||
mCpuApicIdAcpiIdMapTable[Index].Flags = 1;
|
||||
mCpuApicIdAcpiIdMapTable[Index].ApicId = AcpiLocalApic->ApicId;
|
||||
mCpuApicIdAcpiIdMapTable[Index].AcpiProcessorId = AcpiLocalApic->AcpiProcessorId;
|
||||
Added = TRUE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ASSERT (Added);
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
UINT32
|
||||
ProcessorId2ApicId (
|
||||
UINT32 AcpiProcessorId
|
||||
)
|
||||
{
|
||||
UINTN Index;
|
||||
|
||||
ASSERT (AcpiProcessorId < MAX_CPU_NUM);
|
||||
for (Index = 0; Index < MAX_CPU_NUM; Index++) {
|
||||
if (mCpuApicIdAcpiIdMapTable[Index].Flags && (mCpuApicIdAcpiIdMapTable[Index].AcpiProcessorId == AcpiProcessorId)) {
|
||||
return mCpuApicIdAcpiIdMapTable[Index].ApicId;
|
||||
}
|
||||
}
|
||||
|
||||
return (UINT32) -1;
|
||||
}
|
||||
|
||||
UINT8
|
||||
GetProcNumberInPackage (
|
||||
IN UINT8 Package
|
||||
)
|
||||
{
|
||||
UINTN Index;
|
||||
UINT8 Number;
|
||||
|
||||
Number = 0;
|
||||
for (Index = 0; Index < MAX_CPU_NUM; Index++) {
|
||||
if (mCpuApicIdAcpiIdMapTable[Index].Flags && (((mCpuApicIdAcpiIdMapTable[Index].ApicId >> 0x04) & 0x01) == Package)) {
|
||||
Number++;
|
||||
}
|
||||
}
|
||||
|
||||
return Number;
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
LocateCpuEistProtocol (
|
||||
IN UINT32 CpuIndex,
|
||||
OUT ENHANCED_SPEEDSTEP_PROTOCOL **EistProtocol
|
||||
)
|
||||
{
|
||||
UINTN HandleCount;
|
||||
EFI_HANDLE *HandleBuffer;
|
||||
ENHANCED_SPEEDSTEP_PROTOCOL *EistProt;
|
||||
UINTN Index;
|
||||
UINT32 ApicId;
|
||||
EFI_STATUS Status;
|
||||
|
||||
HandleCount = 0;
|
||||
gBS->LocateHandleBuffer (
|
||||
ByProtocol,
|
||||
&gEnhancedSpeedstepProtocolGuid,
|
||||
NULL,
|
||||
&HandleCount,
|
||||
&HandleBuffer
|
||||
);
|
||||
|
||||
Index = 0;
|
||||
EistProt = NULL;
|
||||
Status = EFI_NOT_FOUND;
|
||||
while (Index < HandleCount) {
|
||||
gBS->HandleProtocol (
|
||||
HandleBuffer[Index],
|
||||
&gEnhancedSpeedstepProtocolGuid,
|
||||
(VOID **) &EistProt
|
||||
);
|
||||
//
|
||||
// Adjust the CpuIndex by +1 due to the AcpiProcessorId is 1 based.
|
||||
//
|
||||
ApicId = ProcessorId2ApicId (CpuIndex+1);
|
||||
if (ApicId == (UINT32) -1) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (EistProt->ProcApicId == ApicId) {
|
||||
Status = EFI_SUCCESS;
|
||||
break;
|
||||
}
|
||||
|
||||
Index++;
|
||||
}
|
||||
|
||||
if (HandleBuffer != NULL) {
|
||||
gBS->FreePool (HandleBuffer);
|
||||
}
|
||||
|
||||
if (!EFI_ERROR (Status)) {
|
||||
*EistProtocol = EistProt;
|
||||
} else {
|
||||
*EistProtocol = NULL;
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
EFI_STATUS
|
||||
PlatformHookInit (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
|
||||
Status = gBS->LocateProtocol (
|
||||
&gEnhancedSpeedstepProtocolGuid,
|
||||
NULL,
|
||||
(VOID **) &mEistProtocol
|
||||
);
|
||||
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
/**
|
||||
Called for every ACPI table found in the BIOS flash.
|
||||
Returns whether a table is active or not. Inactive tables
|
||||
are not published in the ACPI table list.
|
||||
|
||||
This hook can be used to implement optional SSDT tables or
|
||||
enabling/disabling specific functionality (e.g. SPCR table)
|
||||
based on a setup switch or platform preference. In case of
|
||||
optional SSDT tables,the platform flash will include all the
|
||||
SSDT tables but will return EFI_SUCCESS only for those tables
|
||||
that need to be published.
|
||||
|
||||
@param[in] *Table Pointer to the active table.
|
||||
|
||||
@retval EFI_SUCCESS if the table is active.
|
||||
@retval EFI_UNSUPPORTED if the table is not active.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
AcpiPlatformHooksIsActiveTable (
|
||||
IN OUT EFI_ACPI_COMMON_HEADER *Table
|
||||
)
|
||||
{
|
||||
EFI_ACPI_DESCRIPTION_HEADER *TableHeader;
|
||||
|
||||
TableHeader = (EFI_ACPI_DESCRIPTION_HEADER *) Table;
|
||||
|
||||
if (TableHeader->Signature == EFI_ACPI_2_0_STATIC_RESOURCE_AFFINITY_TABLE_SIGNATURE) {
|
||||
|
||||
}
|
||||
|
||||
if ((mSystemConfiguration.ENDBG2 == 0) && (CompareMem (&TableHeader->OemTableId, "INTLDBG2", 8) == 0)) {
|
||||
return EFI_UNSUPPORTED;
|
||||
}
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
Update the GV3 SSDT table.
|
||||
|
||||
@param[in][out] *TableHeader The table to be set.
|
||||
|
||||
@retval EFI_SUCCESS Returns Success.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
PatchGv3SsdtTable (
|
||||
IN OUT EFI_ACPI_DESCRIPTION_HEADER *TableHeader
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
UINT8 *CurrPtr;
|
||||
UINT8 *SsdtPointer;
|
||||
UINT32 Signature;
|
||||
UINT32 CpuFixes;
|
||||
UINT32 NpssFixes;
|
||||
UINT32 SpssFixes;
|
||||
UINT32 CpuIndex;
|
||||
UINT32 PackageSize;
|
||||
UINT32 NewPackageSize;
|
||||
UINT32 AdjustSize;
|
||||
UINTN EntryIndex;
|
||||
UINTN TableIndex;
|
||||
EFI_ACPI_NAME_COMMAND *PssTable;
|
||||
EFI_PSS_PACKAGE *PssTableItemPtr;
|
||||
ENHANCED_SPEEDSTEP_PROTOCOL *EistProt;
|
||||
EIST_INFORMATION *EistInfo;
|
||||
EFI_ACPI_CPU_PSS_STATE *PssState;
|
||||
EFI_ACPI_NAMEPACK_DWORD *NamePtr;
|
||||
//
|
||||
// Loop through the ASL looking for values that we must fix up.
|
||||
//
|
||||
NpssFixes = 0;
|
||||
SpssFixes = 0;
|
||||
CpuFixes = 0;
|
||||
CpuIndex = 0;
|
||||
CurrPtr = (UINT8 *) TableHeader;
|
||||
|
||||
EistProt = NULL;
|
||||
for (SsdtPointer = CurrPtr; SsdtPointer <= (CurrPtr + ((EFI_ACPI_COMMON_HEADER *) CurrPtr)->Length); SsdtPointer++) {
|
||||
Signature = *(UINT32 *) SsdtPointer;
|
||||
switch (Signature) {
|
||||
|
||||
case SIGNATURE_32 ('_', 'P', 'R', '_'):
|
||||
//
|
||||
// _CPUX ('0' to '0xF')
|
||||
//
|
||||
CpuIndex = *(SsdtPointer + 7);
|
||||
if (CpuIndex >= '0' && CpuIndex <= '9') {
|
||||
CpuIndex -= '0';
|
||||
} else {
|
||||
if (CpuIndex > '9') {
|
||||
CpuIndex -= '7';
|
||||
}
|
||||
}
|
||||
|
||||
CpuFixes++;
|
||||
LocateCpuEistProtocol (CpuIndex, &EistProt);
|
||||
break;
|
||||
|
||||
case SIGNATURE_32 ('D', 'O', 'M', 'N'):
|
||||
|
||||
NamePtr = ACPI_NAME_COMMAND_FROM_NAMEPACK_STR (SsdtPointer);
|
||||
if (NamePtr->StartByte != AML_NAME_OP) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (NamePtr->Size != AML_NAME_DWORD_SIZE) {
|
||||
continue;
|
||||
}
|
||||
|
||||
NamePtr->Value = 0;
|
||||
|
||||
if (mCpuApicIdAcpiIdMapTable[CpuIndex].Flags) {
|
||||
NamePtr->Value = (mCpuApicIdAcpiIdMapTable[CpuIndex].ApicId >> 0x04) & 0x01;
|
||||
}
|
||||
break;
|
||||
|
||||
case SIGNATURE_32 ('N', 'C', 'P', 'U'):
|
||||
|
||||
NamePtr = ACPI_NAME_COMMAND_FROM_NAMEPACK_STR (SsdtPointer);
|
||||
if (NamePtr->StartByte != AML_NAME_OP) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (NamePtr->Size != AML_NAME_DWORD_SIZE) {
|
||||
continue;
|
||||
}
|
||||
|
||||
NamePtr->Value = 0;
|
||||
if (mCpuApicIdAcpiIdMapTable[CpuIndex].Flags) {
|
||||
NamePtr->Value = GetProcNumberInPackage ((mCpuApicIdAcpiIdMapTable[CpuIndex].ApicId >> 0x04) & 0x01);
|
||||
}
|
||||
break;
|
||||
|
||||
case SIGNATURE_32 ('N', 'P', 'S', 'S'):
|
||||
case SIGNATURE_32 ('S', 'P', 'S', 'S'):
|
||||
if (EistProt == NULL) {
|
||||
continue;
|
||||
}
|
||||
|
||||
PssTable = ACPI_NAME_COMMAND_FROM_NAME_STR (SsdtPointer);
|
||||
if (PssTable->StartByte != AML_NAME_OP) {
|
||||
continue;
|
||||
}
|
||||
|
||||
Status = EistProt->GetEistTable (EistProt, &EistInfo, (VOID **) &PssState);
|
||||
|
||||
AdjustSize = PssTable->NumEntries * sizeof (EFI_PSS_PACKAGE);
|
||||
AdjustSize -= EistInfo->NumStates * sizeof (EFI_PSS_PACKAGE);
|
||||
PackageSize = (PssTable->Size & 0xF) + ((PssTable->Size & 0xFF00) >> 4);
|
||||
NewPackageSize = PackageSize - AdjustSize;
|
||||
PssTable->Size = (UINT16) ((NewPackageSize & 0xF) + ((NewPackageSize & 0x0FF0) << 4));
|
||||
|
||||
//
|
||||
// Set most significant two bits of byte zero to 01, meaning two bytes used.
|
||||
//
|
||||
PssTable->Size |= 0x40;
|
||||
|
||||
//
|
||||
// Set unused table to Noop Code.
|
||||
//
|
||||
SetMem( (UINT8 *) PssTable + NewPackageSize + AML_NAME_PREFIX_SIZE, AdjustSize, AML_NOOP_OP);
|
||||
PssTable->NumEntries = (UINT8) EistInfo->NumStates;
|
||||
PssTableItemPtr = (EFI_PSS_PACKAGE *) ((UINT8 *) PssTable + sizeof (EFI_ACPI_NAME_COMMAND));
|
||||
|
||||
//
|
||||
// Update the size.
|
||||
//
|
||||
for (TableIndex = 0; TableIndex < EistInfo->NumStates; TableIndex++) {
|
||||
EntryIndex = EistInfo->NumStates - TableIndex - 1;
|
||||
PssTableItemPtr->CoreFreq = PssState[EntryIndex].CoreFrequency * PssState[EntryIndex].Control;
|
||||
PssTableItemPtr->Power = PssState[EntryIndex].Power * 1000;
|
||||
if (PssTable->NameStr == SIGNATURE_32 ('N', 'P', 'S', 'S')) {
|
||||
PssTableItemPtr->BMLatency = PssState[EntryIndex].BusMasterLatency;
|
||||
PssTableItemPtr->TransLatency = PssState[EntryIndex].TransitionLatency;
|
||||
} else {
|
||||
//
|
||||
// This method should be supported by SMM PPM Handler.
|
||||
//
|
||||
PssTableItemPtr->BMLatency = PssState[EntryIndex].BusMasterLatency * 2;
|
||||
PssTableItemPtr->TransLatency = PssState[EntryIndex].TransitionLatency * 10;
|
||||
}
|
||||
|
||||
PssTableItemPtr->Control = PssState[EntryIndex].Control;
|
||||
PssTableItemPtr->Status = PssState[EntryIndex].Status;
|
||||
PssTableItemPtr++;
|
||||
}
|
||||
|
||||
if (PssTable->NameStr == SIGNATURE_32 ('N', 'P', 'S', 'S')) {
|
||||
NpssFixes++;
|
||||
} else {
|
||||
SpssFixes++;
|
||||
}
|
||||
|
||||
SsdtPointer = (UINT8 *) PssTable + PackageSize;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// N fixes together currently.
|
||||
//
|
||||
ASSERT (CpuFixes == (UINT32) MAX_CPU_NUM);
|
||||
ASSERT (SpssFixes == NpssFixes);
|
||||
ASSERT (CpuFixes >= SpssFixes);
|
||||
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
Update the DSDT table.
|
||||
|
||||
@param[in][out] *TableHeader The table to be set.
|
||||
|
||||
@retval EFI_SUCCESS Returns EFI_SUCCESS.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
PatchDsdtTable (
|
||||
IN OUT EFI_ACPI_DESCRIPTION_HEADER *TableHeader
|
||||
)
|
||||
{
|
||||
|
||||
UINT8 *CurrPtr;
|
||||
UINT8 *DsdtPointer;
|
||||
UINT32 *Signature;
|
||||
UINT8 *EndPtr;
|
||||
UINT8 *Operation;
|
||||
UINT32 *Address;
|
||||
UINT16 *Size;
|
||||
|
||||
//
|
||||
// Fix PCI32 resource "FIX0" -- PSYS system status area
|
||||
//
|
||||
CurrPtr = (UINT8*) &((EFI_ACPI_DESCRIPTION_HEADER*) TableHeader)[0];
|
||||
EndPtr = (UINT8*) TableHeader;
|
||||
EndPtr = EndPtr + TableHeader->Length;
|
||||
while (CurrPtr < (EndPtr-2)) {
|
||||
//
|
||||
// Removed the _S3 tag to indicate that we do not support S3. The 4th byte is blank space
|
||||
// since there are only 3 char "_S3".
|
||||
//
|
||||
if (mSystemConfiguration.AcpiSuspendState == 0) {
|
||||
//
|
||||
// For iasl compiler version 20061109.
|
||||
//
|
||||
if ((CurrPtr[0] == '_') && (CurrPtr[1] == 'S') && (CurrPtr[2] == '3') && (CurrPtr[3] == '_')) {
|
||||
break;
|
||||
}
|
||||
//
|
||||
// For iasl compiler version 20040527.
|
||||
//
|
||||
if ((CurrPtr[0] == '\\') && (CurrPtr[1] == '_') && (CurrPtr[2] == 'S') && (CurrPtr[3] == '3')) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
CurrPtr++;
|
||||
}
|
||||
CurrPtr = (UINT8*) &((EFI_ACPI_DESCRIPTION_HEADER*) TableHeader)[0];
|
||||
EndPtr = (UINT8*) TableHeader;
|
||||
EndPtr = EndPtr + TableHeader->Length;
|
||||
while (CurrPtr < (EndPtr-2)) {
|
||||
//
|
||||
// For mipi dsi port select _DEP.
|
||||
//
|
||||
if (mSystemConfiguration.MipiDsi== 1) {
|
||||
//
|
||||
// For iasl compiler version 20061109.
|
||||
//
|
||||
if ((CurrPtr[0] == 'N') && (CurrPtr[1] == 'D') && (CurrPtr[2] == 'E') && (CurrPtr[3] == 'P')) {
|
||||
CurrPtr[0] = '_';
|
||||
break;
|
||||
}
|
||||
|
||||
} else {
|
||||
if ((CurrPtr[0] == 'P') && (CurrPtr[1] == 'D') && (CurrPtr[2] == 'E') && (CurrPtr[3] == 'P')) {
|
||||
CurrPtr[0] = '_';
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
CurrPtr++;
|
||||
}
|
||||
//
|
||||
// Loop through the ASL looking for values that we must fix up.
|
||||
//
|
||||
CurrPtr = (UINT8 *) TableHeader;
|
||||
for (DsdtPointer = CurrPtr; DsdtPointer <= (CurrPtr + ((EFI_ACPI_COMMON_HEADER *) CurrPtr)->Length); DsdtPointer++) {
|
||||
Signature = (UINT32 *) DsdtPointer;
|
||||
|
||||
switch (*Signature) {
|
||||
//
|
||||
// GNVS operation region.
|
||||
//
|
||||
case (SIGNATURE_32 ('G', 'N', 'V', 'S')):
|
||||
//
|
||||
// Conditional match. For Region Objects, the Operator will always be the
|
||||
// byte immediately before the specific name. Therefore, subtract 1 to check
|
||||
// the Operator.
|
||||
//
|
||||
Operation = DsdtPointer - 1;
|
||||
if (*Operation == AML_OPREGION_OP) {
|
||||
Address = (UINT32 *) (DsdtPointer + 6);
|
||||
*Address = (UINT32) (UINTN) mGlobalNvsArea.Area;
|
||||
Size = (UINT16 *) (DsdtPointer + 11);
|
||||
*Size = sizeof (EFI_GLOBAL_NVS_AREA);
|
132
Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatformHooks.h
Normal file
132
Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatformHooks.h
Normal file
@@ -0,0 +1,132 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
|
||||
|
||||
|
||||
This program and the accompanying materials are licensed and made available under
|
||||
|
||||
the terms and conditions of the BSD License that accompanies this distribution.
|
||||
|
||||
The full text of the license may be found at
|
||||
|
||||
http://opensource.org/licenses/bsd-license.php.
|
||||
|
||||
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
|
||||
|
||||
|
||||
Module Name:
|
||||
|
||||
AcpiPlatformHooks.h
|
||||
|
||||
Abstract:
|
||||
|
||||
This is an implementation of the ACPI platform driver. Requirements for
|
||||
this driver are defined in the Tiano ACPI External Product Specification,
|
||||
revision 0.3.6.
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _ACPI_PLATFORM_HOOKS_H_
|
||||
#define _ACPI_PLATFORM_HOOKS_H_
|
||||
|
||||
//
|
||||
// Statements that include other header files
|
||||
//
|
||||
|
||||
#include <IndustryStandard/Acpi.h>
|
||||
#include "Platform.h"
|
||||
#include <Protocol/EnhancedSpeedstep.h>
|
||||
|
||||
#define AML_NAME_OP 0x08
|
||||
#define AML_METHOD_OP 0x14
|
||||
#define AML_OPREGION_OP 0x80
|
||||
#define AML_PACKAGE_OP 0x12 // Package operator.
|
||||
#define AML_NAME_PREFIX_SIZE 0x06
|
||||
#define AML_NAME_DWORD_SIZE 0x0C
|
||||
|
||||
#pragma pack(1)
|
||||
|
||||
typedef struct {
|
||||
UINT8 AcpiProcessorId;
|
||||
UINT8 ApicId;
|
||||
UINT16 Flags;
|
||||
} EFI_CPU_ID_MAP;
|
||||
|
||||
typedef struct {
|
||||
UINT8 StartByte;
|
||||
UINT32 NameStr;
|
||||
UINT8 Size;
|
||||
UINT32 Value;
|
||||
} EFI_ACPI_NAMEPACK_DWORD;
|
||||
|
||||
typedef struct {
|
||||
UINT8 StartByte;
|
||||
UINT32 NameStr;
|
||||
UINT8 OpCode;
|
||||
UINT16 Size; // Hardcode to 16bit width because the table we use is fixed size
|
||||
UINT8 NumEntries;
|
||||
} EFI_ACPI_NAME_COMMAND;
|
||||
|
||||
typedef struct {
|
||||
UINT8 PackageOp;
|
||||
UINT8 PkgLeadByte;
|
||||
UINT8 NumEntries;
|
||||
UINT8 DwordPrefix0;
|
||||
UINT32 CoreFreq;
|
||||
UINT8 DwordPrefix1;
|
||||
UINT32 Power;
|
||||
UINT8 DwordPrefix2;
|
||||
UINT32 TransLatency;
|
||||
UINT8 DwordPrefix3;
|
||||
UINT32 BMLatency;
|
||||
UINT8 DwordPrefix4;
|
||||
UINT32 Control;
|
||||
UINT8 DwordPrefix5;
|
||||
UINT32 Status;
|
||||
} EFI_PSS_PACKAGE;
|
||||
|
||||
typedef struct {
|
||||
UINT8 PackageOp;
|
||||
UINT8 PkgLeadByte;
|
||||
UINT8 NumEntries;
|
||||
UINT8 BytePrefix0;
|
||||
UINT8 Entries;
|
||||
UINT8 BytePrefix1;
|
||||
UINT8 Revision;
|
||||
UINT8 BytePrefix2;
|
||||
UINT8 Domain;
|
||||
UINT8 BytePrefix3;
|
||||
UINT8 Coordinate;
|
||||
UINT8 BytePrefix4;
|
||||
UINT8 ProcNumber;
|
||||
} EFI_PSD_PACKAGE;
|
||||
|
||||
#pragma pack()
|
||||
|
||||
#define ACPI_NAME_COMMAND_FROM_NAME_STR(a) BASE_CR (a, EFI_ACPI_NAME_COMMAND, NameStr)
|
||||
#define ACPI_NAME_COMMAND_FROM_NAMEPACK_STR(a) BASE_CR (a, EFI_ACPI_NAMEPACK_DWORD, NameStr)
|
||||
|
||||
EFI_STATUS
|
||||
PlatformHookInit (
|
||||
VOID
|
||||
);
|
||||
|
||||
|
||||
EFI_STATUS
|
||||
PatchDsdtTable (
|
||||
IN OUT EFI_ACPI_DESCRIPTION_HEADER *TableHeader
|
||||
);
|
||||
|
||||
EFI_STATUS
|
||||
PatchGv3SsdtTable (
|
||||
IN OUT EFI_ACPI_DESCRIPTION_HEADER *Table
|
||||
);
|
||||
|
||||
EFI_STATUS
|
||||
PatchErstTable (
|
96
Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatformHooksLib.h
Normal file
96
Vlv2TbltDevicePkg/AcpiPlatform/AcpiPlatformHooksLib.h
Normal file
@@ -0,0 +1,96 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
|
||||
|
||||
|
||||
This program and the accompanying materials are licensed and made available under
|
||||
|
||||
the terms and conditions of the BSD License that accompanies this distribution.
|
||||
|
||||
The full text of the license may be found at
|
||||
|
||||
http://opensource.org/licenses/bsd-license.php.
|
||||
|
||||
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
|
||||
|
||||
|
||||
Module Name:
|
||||
|
||||
AcpiPlatformHooksLib.h
|
||||
|
||||
Abstract:
|
||||
|
||||
This is an implementation of the ACPI platform driver. Requirements for
|
||||
this driver are defined in the Tiano ACPI External Product Specification,
|
||||
revision 0.3.6.
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _ACPI_PLATFORM_HOOKS_LIB_H_
|
||||
#define _ACPI_PLATFORM_HOOKS_LIB_H_
|
||||
|
||||
//
|
||||
// Statements that include other header files.
|
||||
//
|
||||
#include <IndustryStandard/Acpi.h>
|
||||
|
||||
/**
|
||||
Returns the ACPI table version that the platform wants.
|
||||
|
||||
@param[in] None
|
||||
|
||||
@retval EFI_ACPI_TABLE_VERSION_NONE if ACPI is to be disabled.
|
||||
@retval EFI_ACPI_TABLE_VERSION_1_0B if 1.0b.
|
||||
@retval EFI_ACPI_TABLE_VERSION_2_00 if 2.00.
|
||||
**/
|
||||
EFI_ACPI_TABLE_VERSION
|
||||
AcpiPlatformHooksGetAcpiTableVersion (
|
||||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
Returns the OEMID, OEM Table ID, OEM Revision.
|
||||
|
||||
@param[in] None
|
||||
|
||||
@retval OemId OEM ID string for ACPI tables, maximum 6 ASCII characters.
|
||||
This is an OEM-supplied string that identifies the OEM.
|
||||
@retval OemTableId An OEM-supplied string that the OEM uses to identify
|
||||
the particular data table. This field is particularly useful
|
||||
when defining a definition block to distinguish definition block
|
||||
functions. The OEM assigns each dissimilar table a new OEM Table ID.
|
||||
@retval OemRevision An OEM-supplied revision number for ACPI tables.
|
||||
Larger numbers are assumed to be newer revisions.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
AcpiPlatformHooksGetOemFields (
|
||||
OUT UINT8 *OemId,
|
||||
OUT UINT64 *OemTableId,
|
||||
OUT UINT32 *OemRevision
|
||||
);
|
||||
|
||||
/**
|
||||
Called for every ACPI table found in the BIOS flash.
|
||||
Returns whether a table is active or not. Inactive tables
|
||||
are not published in the ACPI table list. This hook can be
|
||||
used to implement optional SSDT tables or enabling/disabling
|
||||
specific functionality (e.g. SPCR table) based on a setup
|
||||
switch or platform preference. In case of optional SSDT tables,
|
||||
the platform flash will include all the SSDT tables but will
|
||||
return EFI_SUCCESS only for those tables that need to be
|
||||
published.
|
||||
This hook can also be used to update the table data. The header
|
||||
is updated by the common code. For example, if a platform wants
|
||||
to use an SSDT table to export some platform settings to the
|
||||
ACPI code, it needs to update the data inside that SSDT based
|
||||
on platform preferences in this hook.
|
||||
|
||||
@param[in] None
|
||||
|
61
Vlv2TbltDevicePkg/AcpiPlatform/Osfr.h
Normal file
61
Vlv2TbltDevicePkg/AcpiPlatform/Osfr.h
Normal file
@@ -0,0 +1,61 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
|
||||
|
||||
|
||||
This program and the accompanying materials are licensed and made available under
|
||||
|
||||
the terms and conditions of the BSD License that accompanies this distribution.
|
||||
|
||||
The full text of the license may be found at
|
||||
|
||||
http://opensource.org/licenses/bsd-license.php.
|
||||
|
||||
|
||||
|
||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||
|
||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||
|
||||
|
||||
|
||||
|
||||
Module Name:
|
||||
|
||||
Osfr.h
|
||||
|
||||
Abstract:
|
||||
|
||||
This file describes the contents of the ACPI OSFR Table.
|
||||
|
||||
--*/
|
||||
|
||||
#ifndef _OSFR_H
|
||||
#define _OSFR_H
|
||||
|
||||
//
|
||||
// Statements that include other files.
|
||||
//
|
||||
#include <IndustryStandard/Acpi10.h>
|
||||
#include <IndustryStandard/Acpi20.h>
|
||||
|
||||
#pragma pack (1)
|
||||
|
||||
#define EFI_ACPI_OSFR_TABLE_REVISION 0x1
|
||||
//#define EFI_ACPI_OSFR_TABLE_SIGNATURE 'RFSO'
|
||||
#define EFI_ACPI_OSFR_TABLE_SIGNATURE SIGNATURE_32('O', 'S', 'F', 'R') //'RFSO'
|
||||
|
||||
typedef struct {
|
||||
EFI_ACPI_DESCRIPTION_HEADER Header;
|
||||
UINT32 ObjectCount;
|
||||
UINT32 TableDWORDs [64];
|
||||
} EFI_ACPI_OSFR_TABLE;
|
||||
|
||||
typedef struct {
|
||||
EFI_ACPI_DESCRIPTION_HEADER Header;
|
||||
UINT32 ObjectCount;
|
||||
} EFI_ACPI_OSFR_TABLE_FIXED_PORTION;
|
||||
|
||||
typedef struct {
|
||||
EFI_GUID ObjectUUID;
|
||||
UINT32 Reserved1;
|
Reference in New Issue
Block a user