/** @file Copyright (c) 2004 - 2017, 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: PchPlatformPolicy.c Abstract: --*/ #include "PlatformDxe.h" #include #include #include #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_DISABLE; // // 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); }