/** @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:
PchPlatformPolicy.c
Abstract:
--*/
#include "PlatformDxe.h"
#include <Protocol/PchPlatformPolicy.h>
#include <Protocol/VlvPlatformPolicy.h>
#include <Library/PchPlatformLib.h>
#include "AzaliaVerbTable.h"
#include "Protocol/GlobalNvsArea.h"
#include "Protocol/DxePchPolicyUpdateProtocol.h"
#define MOBILE_PLATFORM 1
#define DESKTOP_PLATFORM 2
EFI_GUID gDxePchPolicyUpdateProtocolGuid = DXE_PCH_POLICY_UPDATE_PROTOCOL_GUID;
DXE_PCH_POLICY_UPDATE_PROTOCOL mDxePchPolicyUpdate = { 0 };
/**
Updates the feature policies according to the setup variable.
@retval VOID
**/
VOID
InitPchPlatformPolicy (
IN EFI_PLATFORM_INFO_HOB *PlatformInfo
)
{
DXE_PCH_PLATFORM_POLICY_PROTOCOL *DxePlatformPchPolicy;
EFI_STATUS Status;
EFI_GLOBAL_NVS_AREA_PROTOCOL *GlobalNvsArea;
UINT8 PortIndex;
EFI_HANDLE Handle;
PCH_STEPPING SocStepping = PchA0;
BOOLEAN ModifyVariable;
ModifyVariable = FALSE;
DEBUG ((EFI_D_INFO, "InitPchPlatformPolicy() - Start\n"));
Status = gBS->LocateProtocol (&gDxePchPlatformPolicyProtocolGuid, NULL, (VOID **) &DxePlatformPchPolicy);
ASSERT_EFI_ERROR (Status);
//
// Locate the Global NVS Protocol.
//
Status = gBS->LocateProtocol (
&gEfiGlobalNvsAreaProtocolGuid,
NULL,
(VOID **) &GlobalNvsArea
);
ASSERT_EFI_ERROR (Status);
//
// Update system information
//
DxePlatformPchPolicy->Revision = DXE_PCH_PLATFORM_POLICY_PROTOCOL_REVISION_12;
//
// General initialization
//
DxePlatformPchPolicy->BusNumber = 0;
//
// VLV BIOS Spec Section 3.6 Flash Security Recommendation,
// Intel strongly recommends that BIOS sets the BIOS Interface Lock Down bit. Enabling this bit
// will mitigate malicious software attempts to replace the system BIOS option ROM with its own code.
// We always enable this as a platform policy.
//
DxePlatformPchPolicy->LockDownConfig->BiosInterface = PCH_DEVICE_ENABLE;
DxePlatformPchPolicy->LockDownConfig->BiosLock = mSystemConfiguration.SpiRwProtect;
//
// DeviceEnables
//
DxePlatformPchPolicy->DeviceEnabling->Lan = mSystemConfiguration.Lan;
DxePlatformPchPolicy->DeviceEnabling->Azalia = mSystemConfiguration.PchAzalia;
DxePlatformPchPolicy->DeviceEnabling->Sata = mSystemConfiguration.Sata;
DxePlatformPchPolicy->DeviceEnabling->Smbus = PCH_DEVICE_ENABLE;
DxePlatformPchPolicy->DeviceEnabling->LpeEnabled = mSystemConfiguration.Lpe;
DxePlatformPchPolicy->UsbConfig->Ehci1Usbr = PCH_DEVICE_DISABLE;
DxePlatformPchPolicy->UsbConfig->UsbXhciLpmSupport =mSystemConfiguration.UsbXhciLpmSupport;
//
// Disable FFRD PR0 USB port2 for power saving since PR0 uses non-POR WWAN (but enable on PR0.3/PR0.5/PR1)
//
if ((PlatformInfo->BoardId == BOARD_ID_BL_FFRD) && (PlatformInfo->BoardRev == PR0))
if (mSystemConfiguration.PchUsbPort[2] !=0) {
mSystemConfiguration.PchUsbPort[2]=0;
ModifyVariable = TRUE;
}
if (ModifyVariable) {
Status = gRT->SetVariable (
NORMAL_SETUP_NAME,
&gEfiNormalSetupGuid,
EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,
sizeof(SYSTEM_CONFIGURATION),
&mSystemConfiguration
);
}
SocStepping = PchStepping();
if (mSystemConfiguration.UsbAutoMode == 1) { // auto mode is enabled
if (PchA0 == SocStepping) {
//
// For A0, EHCI is enabled as default.
//
mSystemConfiguration.PchUsb20 = 1;
mSystemConfiguration.PchUsb30Mode = 0;
mSystemConfiguration.UsbXhciSupport = 0;
DEBUG ((EFI_D_INFO, "EHCI is enabled as default. SOC 0x%x\n", SocStepping));
} else {
//
// For A1 and later, XHCI is enabled as default.
//
mSystemConfiguration.PchUsb20 = 0;
mSystemConfiguration.PchUsb30Mode = 1;
mSystemConfiguration.UsbXhciSupport = 1;
DEBUG ((EFI_D_INFO, "XHCI is enabled as default. SOC 0x%x\n", SocStepping));
}
//
//overwrite the setting
//
Status = gRT->SetVariable(
NORMAL_SETUP_NAME,
&gEfiNormalSetupGuid,
EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,
sizeof(SYSTEM_CONFIGURATION),
&mSystemConfiguration
);
}
//
// USB Device 29 configuration
//
DxePlatformPchPolicy->UsbConfig->Usb20Settings[0].Enable = mSystemConfiguration.PchUsb20;
DxePlatformPchPolicy->UsbConfig->UsbPerPortCtl = mSystemConfiguration.PchUsbPerPortCtl;
if (mSystemConfiguration.PchUsbPerPortCtl != PCH_DEVICE_DISABLE) {
for (PortIndex = 0; PortIndex < PCH_USB_MAX_PHYSICAL_PORTS; PortIndex++) {
DxePlatformPchPolicy->UsbConfig->PortSettings[PortIndex].Enable = mSystemConfiguration.PchUsbPort[PortIndex];
}
}
DxePlatformPchPolicy->UsbConfig->EhciDebug = mSystemConfiguration.PchEhciDebug;
//
// xHCI (USB 3.0) related settings from setup variable
//
DxePlatformPchPolicy->UsbConfig->Usb30Settings.XhciStreams = mSystemConfiguration.PchUsb30Streams;
DxePlatformPchPolicy->UsbConfig->Usb30Settings.Mode = mSystemConfiguration.PchUsb30Mode;
//
// Remove XHCI Pre-Boot Driver setup option selection from end-user view and automate loading of USB 3.0 BIOS driver based on XhciMode selection
//
switch (mSystemConfiguration.PchUsb30Mode) {
case 0: // Disabled
DxePlatformPchPolicy->UsbConfig->Usb30Settings.PreBootSupport = 0;
break;
case 1: // Enabled
DxePlatformPchPolicy->UsbConfig->Usb30Settings.PreBootSupport = 1;
break;
case 2: // Auto
DxePlatformPchPolicy->UsbConfig->Usb30Settings.PreBootSupport = 0;
break;
case 3: // Smart Auto
DxePlatformPchPolicy->UsbConfig->Usb30Settings.PreBootSupport = 1;
break;
default:
DxePlatformPchPolicy->UsbConfig->Usb30Settings.PreBootSupport = mSystemConfiguration.UsbXhciSupport;
break;
}
DxePlatformPchPolicy->UsbConfig->UsbOtgSettings.Enable = mSystemConfiguration.PchUsbOtg;
DxePlatformPchPolicy->UsbConfig->PortSettings[0].Dock = PCH_DEVICE_DISABLE;
DxePlatformPchPolicy->UsbConfig->PortSettings[1].Dock = PCH_DEVICE_DISABLE;
DxePlatformPchPolicy->UsbConfig->PortSettings[2].Dock = PCH_DEVICE_DISABLE;
DxePlatformPchPolicy->UsbConfig->PortSettings[3].Dock = PCH_DEVICE_DISABLE;
DxePlatformPchPolicy->UsbConfig->PortSettings[0].Panel = PCH_USB_FRONT_PANEL;
DxePlatformPchPolicy->UsbConfig->PortSettings[1].Panel = PCH_USB_FRONT_PANEL;
DxePlatformPchPolicy->UsbConfig->PortSettings[2].Panel = PCH_USB_BACK_PANEL;
DxePlatformPchPolicy->UsbConfig->PortSettings[3].Panel = PCH_USB_BACK_PANEL;
//
//
// Enable USB Topology control and program the topology setting for every USB port
// See Platform Design Guide for description of topologies
//
//
// Port 0: ~5.3", Port 1: ~4.9", Port 2: ~4.7", Port 3: ~8.0"
//
DxePlatformPchPolicy->UsbConfig->Usb20PortLength[0] = 0x53;
DxePlatformPchPolicy->UsbConfig->Usb20PortLength[1] = 0x49;
DxePlatformPchPolicy->UsbConfig->Usb20PortLength[2] = 0x47;
DxePlatformPchPolicy->UsbConfig->Usb20PortLength[3] = 0x80;
DxePlatformPchPolicy->UsbConfig->Usb20OverCurrentPins[0] = PchUsbOverCurrentPin0;
DxePlatformPchPolicy->UsbConfig->Usb20OverCurrentPins[1] = PchUsbOverCurrentPin0;
DxePlatformPchPolicy->UsbConfig->Usb20OverCurrentPins[2] = PchUsbOverCurrentPin1;
DxePlatformPchPolicy->UsbConfig->Usb20OverCurrentPins[3] = PchUsbOverCurrentPin1;
DxePlatformPchPolicy->UsbConfig->Usb30OverCurrentPins[0] = PchUsbOverCurrentPinSkip;//PchUsbOverCurrentPin0;
DxePlatformPchPolicy->EhciPllCfgEnable = mSystemConfiguration.EhciPllCfgEnable;
DEBUG ((EFI_D_INFO, "InitPchPlatformPolicy() DxePlatformPchPolicy->EhciPllCfgEnable = 0x%x \n",DxePlatformPchPolicy->EhciPllCfgEnable));
DxePlatformPchPolicy->PciExpressConfig->PcieDynamicGating = mSystemConfiguration.PcieDynamicGating;
for (PortIndex = 0; PortIndex < PCH_PCIE_MAX_ROOT_PORTS; PortIndex++) {
DxePlatformPchPolicy->PciExpressConfig->RootPort[PortIndex].Enable = mSystemConfiguration.IchPciExp[PortIndex];
DxePlatformPchPolicy->PciExpressConfig->RootPort[PortIndex].SlotImplemented = PCH_DEVICE_ENABLE;
DxePlatformPchPolicy->PciExpressConfig->RootPort[PortIndex].FunctionNumber = PortIndex;
DxePlatformPchPolicy->PciExpressConfig->RootPort[PortIndex].PhysicalSlotNumber = PortIndex;
DxePlatformPchPolicy->PciExpressConfig->RootPort[PortIndex].Aspm = 4;
DxePlatformPchPolicy->PciExpressConfig->RootPort[PortIndex].PmSci = PCH_DEVICE_DISABLE;
DxePlatformPchPolicy->PciExpressConfig->RootPort[PortIndex].ExtSync = PCH_DEVICE_DISABLE;
DxePlatformPchPolicy->PciExpressConfig->RootPort[PortIndex].HotPlug = PCH_DEVICE_DISABLE;
DxePlatformPchPolicy->PciExpressConfig->RootPort[PortIndex].AdvancedErrorReporting = PCH_DEVICE_DISABLE;
DxePlatformPchPolicy->PciExpressConfig->RootPort[PortIndex].UnsupportedRequestReport = PCH_DEVICE_DISABLE;
DxePlatformPchPolicy->PciExpressConfig->RootPort[PortIndex].FatalErrorReport = PCH_DEVICE_DISABLE;
DxePlatformPchPolicy->PciExpressConfig->RootPort[PortIndex].NoFatalErrorReport = PCH_DEVICE_DISABLE;
DxePlatformPchPolicy->PciExpressConfig->RootPort[PortIndex].CorrectableErrorReport = PCH_DEVICE_DISABLE;
DxePlatformPchPolicy->PciExpressConfig->RootPort[PortIndex].PmeInterrupt = 0;
DxePlatformPchPolicy->PciExpressConfig->RootPort[PortIndex].SystemErrorOnFatalError = PCH_DEVICE_DISABLE;
DxePlatformPchPolicy->PciExpressConfig->RootPort[PortIndex].SystemErrorOnNonFatalError = PCH_DEVICE_DISABLE;
DxePlatformPchPolicy->PciExpressConfig->RootPort[PortIndex].SystemErrorOnCorrectableError = PCH_DEVICE_DISABLE;
DxePlatformPchPolicy->PciExpressConfig->RootPort[PortIndex].CompletionTimeout = PchPciECompletionTO_Default;
}
//
// SATA configuration
//
for (PortIndex = 0; PortIndex < PCH_AHCI_MAX_PORTS; PortIndex++) {
if (mSystemConfiguration.SataType == 0) {
DxePlatformPchPolicy->SataConfig->PortSettings[PortIndex].Enable = PCH_DEVICE_ENABLE;
DxePlatformPchPolicy->SataConfig->LegacyMode = PCH_DEVICE_ENABLE;
} else {
DxePlatformPchPolicy->SataConfig->PortSettings[PortIndex].Enable = PCH_DEVICE_ENABLE;
DxePlatformPchPolicy->SataConfig->LegacyMode = PCH_DEVICE_DISABLE;
}
if(mSystemConfiguration.Sata == 1){
DxePlatformPchPolicy->SataConfig->PortSettings[PortIndex].Enable = PCH_DEVICE_ENABLE;
} else {
DxePlatformPchPolicy->SataConfig->PortSettings[PortIndex].Enable = PCH_DEVICE_DISABLE;
}
if(0 == PortIndex){
DxePlatformPchPolicy->SataConfig->PortSettings[PortIndex].HotPlug = PCH_DEVICE_DISABLE;
} else if(1 == PortIndex){
DxePlatformPchPolicy->SataConfig->PortSettings[PortIndex].HotPlug = PCH_DEVICE_DISABLE;
}
DxePlatformPchPolicy->SataConfig->PortSettings[PortIndex].SpinUp = PCH_DEVICE_DISABLE;
DxePlatformPchPolicy->SataConfig->PortSettings[PortIndex].MechSw = PCH_DEVICE_DISABLE;
}
DxePlatformPchPolicy->SataConfig->RaidAlternateId = PCH_DEVICE_DISABLE;
DxePlatformPchPolicy->SataConfig->Raid0 = PCH_DEVICE_ENABLE;
DxePlatformPchPolicy->SataConfig->Raid1 = PCH_DEVICE_ENABLE;
DxePlatformPchPolicy->SataConfig->Raid10 = PCH_DEVICE_ENABLE;
DxePlatformPchPolicy->SataConfig->Raid5 = PCH_DEVICE_ENABLE;
DxePlatformPchPolicy->SataConfig->Irrt = PCH_DEVICE_ENABLE;
DxePlatformPchPolicy->SataConfig->OromUiBanner = PCH_DEVICE_ENABLE;
DxePlatformPchPolicy->SataConfig->HddUnlock = PCH_DEVICE_ENABLE;
DxePlatformPchPolicy->SataConfig->LedLocate = PCH_DEVICE_ENABLE;
DxePlatformPchPolicy->SataConfig->IrrtOnly = PCH_DEVICE_ENABLE;
DxePlatformPchPolicy->SataConfig->SalpSupport = PCH_DEVICE_ENABLE;
DxePlatformPchPolicy->SataConfig->TestMode = mSystemConfiguration.SataTestMode;
//
// AzaliaConfig
//
DxePlatformPchPolicy->AzaliaConfig->Pme = mSystemConfiguration.AzaliaPme;
DxePlatformPchPolicy->AzaliaConfig->HdmiCodec = mSystemConfiguration.HdmiCodec;
DxePlatformPchPolicy->AzaliaConfig->DS = mSystemConfiguration.AzaliaDs;
DxePlatformPchPolicy->AzaliaConfig->AzaliaVCi = mSystemConfiguration.AzaliaVCiEnable;
//
// Set LPSS configuration according to setup value.
//
DxePlatformPchPolicy->LpssConfig->LpssPciModeEnabled = mSystemConfiguration.LpssPciModeEnabled;
DxePlatformPchPolicy->LpssConfig->Dma1Enabled = mSystemConfiguration.LpssDma1Enabled;
DxePlatformPchPolicy->LpssConfig->I2C0Enabled = mSystemConfiguration.LpssI2C0Enabled;
DxePlatformPchPolicy->LpssConfig->I2C1Enabled = mSystemConfiguration.LpssI2C1Enabled;
DxePlatformPchPolicy->LpssConfig->I2C2Enabled = mSystemConfiguration.LpssI2C2Enabled;
DxePlatformPchPolicy->LpssConfig->I2C3Enabled = mSystemConfiguration.LpssI2C3Enabled;
DxePlatformPchPolicy->LpssConfig->I2C4Enabled = mSystemConfiguration.LpssI2C4Enabled;
DxePlatformPchPolicy->LpssConfig->I2C5Enabled = mSystemConfiguration.LpssI2C5Enabled;
DxePlatformPchPolicy->LpssConfig->I2C6Enabled = mSystemConfiguration.LpssI2C6Enabled;
DxePlatformPchPolicy->LpssConfig->Dma0Enabled = mSystemConfiguration.LpssDma0Enabled;;
DxePlatformPchPolicy->LpssConfig->Pwm0Enabled = mSystemConfiguration.LpssPwm0Enabled;
DxePlatformPchPolicy->LpssConfig->Pwm1Enabled = mSystemConfiguration.LpssPwm1Enabled;
DxePlatformPchPolicy->LpssConfig->Hsuart0Enabled = mSystemConfiguration.LpssHsuart0Enabled;
DxePlatformPchPolicy->LpssConfig->Hsuart1Enabled = mSystemConfiguration.LpssHsuart1Enabled;
DxePlatformPchPolicy->LpssConfig->SpiEnabled = mSystemConfiguration.LpssSpiEnabled;
//
// Set SCC configuration according to setup value.
//
DxePlatformPchPolicy->SccConfig->SdioEnabled = mSystemConfiguration.LpssSdioEnabled;
DxePlatformPchPolicy->SccConfig->SdcardEnabled = TRUE;
DxePlatformPchPolicy->SccConfig->SdCardSDR25Enabled = mSystemConfiguration.LpssSdCardSDR25Enabled;
DxePlatformPchPolicy->SccConfig->SdCardDDR50Enabled = mSystemConfiguration.LpssSdCardDDR50Enabled;
DxePlatformPchPolicy->SccConfig->HsiEnabled = mSystemConfiguration.LpssMipiHsi;
if (mSystemConfiguration.eMMCBootMode== 1) {// Auto detection mode
//
// Silicon Stepping
//
switch (PchStepping()) {
case PchA0: // A0 and A1
case PchA1:
DEBUG ((EFI_D_ERROR, "Auto Detect: SOC A0/A1: SCC eMMC 4.41 Configuration\n"));
DxePlatformPchPolicy->SccConfig->eMMCEnabled = 1;
DxePlatformPchPolicy->SccConfig->eMMC45Enabled = 0;
DxePlatformPchPolicy->SccConfig->eMMC45DDR50Enabled = 0;
DxePlatformPchPolicy->SccConfig->eMMC45HS200Enabled = 0;
DxePlatformPchPolicy->SccConfig->eMMC45RetuneTimerValue = 0;
break;
case PchB0: // B0 and later
default:
DEBUG ((EFI_D_ERROR, "Auto Detect: SOC B0 and later: SCC eMMC 4.5 Configuration\n"));
DxePlatformPchPolicy->SccConfig->eMMCEnabled = 0;
DxePlatformPchPolicy->SccConfig->eMMC45Enabled = mSystemConfiguration.LpsseMMC45Enabled;
DxePlatformPchPolicy->SccConfig->eMMC45DDR50Enabled = mSystemConfiguration.LpsseMMC45DDR50Enabled;
DxePlatformPchPolicy->SccConfig->eMMC45HS200Enabled = mSystemConfiguration.LpsseMMC45HS200Enabled;
DxePlatformPchPolicy->SccConfig->eMMC45RetuneTimerValue = mSystemConfiguration.LpsseMMC45RetuneTimerValue;
break;
}
} else if (mSystemConfiguration.eMMCBootMode == 2) { // eMMC 4.41
DEBUG ((EFI_D_ERROR, "Force to SCC eMMC 4.41 Configuration\n"));
DxePlatformPchPolicy->SccConfig->eMMCEnabled = 1;
DxePlatformPchPolicy->SccConfig->eMMC45Enabled = 0;
DxePlatformPchPolicy->SccConfig->eMMC45DDR50Enabled = 0;
DxePlatformPchPolicy->SccConfig->eMMC45HS200Enabled = 0;
DxePlatformPchPolicy->SccConfig->eMMC45RetuneTimerValue = 0;
} else if (mSystemConfiguration.eMMCBootMode == 3) { // eMMC 4.5
DEBUG ((EFI_D_ERROR, "Force to eMMC 4.5 Configuration\n"));
DxePlatformPchPolicy->SccConfig->eMMCEnabled = 0;
DxePlatformPchPolicy->SccConfig->eMMC45Enabled = mSystemConfiguration.LpsseMMC45Enabled;
DxePlatformPchPolicy->SccConfig->eMMC45DDR50Enabled = mSystemConfiguration.LpsseMMC45DDR50Enabled;
DxePlatformPchPolicy->SccConfig->eMMC45HS200Enabled = mSystemConfiguration.LpsseMMC45HS200Enabled;
DxePlatformPchPolicy->SccConfig->eMMC45RetuneTimerValue = mSystemConfiguration.LpsseMMC45RetuneTimerValue;
} else { // Disable eMMC controllers
DEBUG ((EFI_D_ERROR, "Disable eMMC controllers\n"));
DxePlatformPchPolicy->SccConfig->eMMCEnabled = 0;
DxePlatformPchPolicy->SccConfig->eMMC45Enabled = 0;
DxePlatformPchPolicy->SccConfig->eMMC45DDR50Enabled = 0;
DxePlatformPchPolicy->SccConfig->eMMC45HS200Enabled = 0;
DxePlatformPchPolicy->SccConfig->eMMC45RetuneTimerValue = 0;
}
//
// Reserved SMBus Address
//
DxePlatformPchPolicy->SmbusConfig->NumRsvdSmbusAddresses = 4;
DxePlatformPchPolicy->SmbusConfig->RsvdSmbusAddressTable = mSmbusRsvdAddresses;
//
// MiscPm Configuration
//
DxePlatformPchPolicy->MiscPmConfig->WakeConfig.WolEnableOverride = mSystemConfiguration.WakeOnLanS5;
DxePlatformPchPolicy->MiscPmConfig->SlpLanLowDc = mSystemConfiguration.SlpLanLowDc;
DxePlatformPchPolicy->MiscPmConfig->PowerResetStatusClear.MeWakeSts = PCH_DEVICE_ENABLE;
DxePlatformPchPolicy->MiscPmConfig->PowerResetStatusClear.MeHrstColdSts = PCH_DEVICE_ENABLE;
DxePlatformPchPolicy->MiscPmConfig->PowerResetStatusClear.MeHrstWarmSts = PCH_DEVICE_ENABLE;
//
// Enable / disable serial IRQ according to setup value.
//
DxePlatformPchPolicy->SerialIrqConfig->SirqEnable = PCH_DEVICE_ENABLE;
//
// Set Serial IRQ Mode Select according to setup value.
//
DxePlatformPchPolicy->SerialIrqConfig->SirqMode = PchQuietMode;
//
// Program the default Sub System Vendor Device Id
//
DxePlatformPchPolicy->DefaultSvidSid->SubSystemVendorId = V_PCH_INTEL_VENDOR_ID;
DxePlatformPchPolicy->DefaultSvidSid->SubSystemId = V_PCH_DEFAULT_SID;
mAzaliaVerbTable[9].VerbTableData = mAzaliaVerbTableData12;
DxePlatformPchPolicy->AzaliaConfig->AzaliaVerbTableNum = sizeof (mAzaliaVerbTable) / sizeof (PCH_AZALIA_VERB_TABLE);
DxePlatformPchPolicy->AzaliaConfig->AzaliaVerbTable = mAzaliaVerbTable;
DxePlatformPchPolicy->AzaliaConfig->ResetWaitTimer = 300;
DxePlatformPchPolicy->IdleReserve = mSystemConfiguration.IdleReserve;
DxePlatformPchPolicy->AcpiHWRed = PCH_DEVICE_DISABLE;
//
// Install DxePchPolicyUpdateProtocol
//
Handle = NULL;
mDxePchPolicyUpdate.Revision = DXE_PCH_POLICY_UPDATE_PROTOCOL_REVISION_1;
Status = gBS->InstallMultipleProtocolInterfaces (
&Handle,
&gDxePchPolicyUpdateProtocolGuid,
&mDxePchPolicyUpdate,
NULL
);
ASSERT_EFI_ERROR (Status);
DEBUG ((EFI_D_INFO, "InitPchPlatformPolicy() - End\n"));
}
DXE_VLV_PLATFORM_POLICY_PROTOCOL mDxePlatformVlvPolicy;
VOID
InitVlvPlatformPolicy (
)
{
DXE_VLV_PLATFORM_POLICY_PROTOCOL *DxePlatformVlvPolicy;
EFI_STATUS Status;
EFI_HANDLE Handle;
ZeroMem (&mDxePlatformVlvPolicy, sizeof(DXE_VLV_PLATFORM_POLICY_PROTOCOL));
DxePlatformVlvPolicy = &mDxePlatformVlvPolicy;
DxePlatformVlvPolicy->GraphicReserve00 = mSystemConfiguration.GraphicReserve00;
DxePlatformVlvPolicy->PavpMode = mSystemConfiguration.PavpMode;
DxePlatformVlvPolicy->GraphicReserve01 = 1;
DxePlatformVlvPolicy->GraphicReserve02 = mSystemConfiguration.GraphicReserve02;
DxePlatformVlvPolicy->GraphicReserve03 = 1;
DxePlatformVlvPolicy->GraphicReserve04 = 0;
DxePlatformVlvPolicy->GraphicReserve05 = mSystemConfiguration.GraphicReserve05;
DxePlatformVlvPolicy->IgdPanelFeatures.PFITStatus = mSystemConfiguration.PanelScaling;
DxePlatformVlvPolicy->IgdPanelFeatures.LidStatus = 1;
DxePlatformVlvPolicy->IdleReserve = mSystemConfiguration.IdleReserve;
DxePlatformVlvPolicy->GraphicReserve06 = 1;
if ( (mSystemConfiguration.Lpe == 1) || mSystemConfiguration.Lpe == 2) {
DxePlatformVlvPolicy ->AudioTypeSupport = LPE_AUDIO ;
} else if ( mSystemConfiguration.PchAzalia == 1 ) {
DxePlatformVlvPolicy ->AudioTypeSupport = HD_AUDIO;
} else {
DxePlatformVlvPolicy ->AudioTypeSupport = NO_AUDIO;
}
Handle = NULL;
Status = gBS->InstallProtocolInterface (
&Handle,
&gDxeVlvPlatformPolicyGuid,
EFI_NATIVE_INTERFACE,
DxePlatformVlvPolicy
);
ASSERT_EFI_ERROR(Status);
}