1079 lines
36 KiB
C
1079 lines
36 KiB
C
/** @file
|
|
Provides an opportunity for OEM to decide what SSID/SVID to use.
|
|
|
|
;******************************************************************************
|
|
;* Copyright (c) 2017, Insyde Software Corp. All Rights Reserved.
|
|
;*
|
|
;* You may not reproduce, distribute, publish, display, perform, modify, adapt,
|
|
;* transmit, broadcast, present, recite, release, license or otherwise exploit
|
|
;* any part of this publication in any form, by any means, without the prior
|
|
;* written permission of Insyde Software Corporation.
|
|
;*
|
|
;******************************************************************************
|
|
*/
|
|
|
|
#include <Library/DxeOemSvcKernelLib.h>
|
|
//[-start-210909-TAMT000007-add]//
|
|
//[-start-211217-Ching000019-modify]//
|
|
#ifdef S77014_SUPPORT
|
|
#include <Library/OemSvcLfcPeiGetBoardID.h>
|
|
#include <Library/PciExpressLib.h>
|
|
#include <Library/S3BootScriptLib.h>
|
|
#include <Library/PcdLib.h>
|
|
#include <Library/MemoryAllocationLib.h>
|
|
#include <Library/UefiRuntimeServicesTableLib.h>
|
|
#include <SetupVariable.h>
|
|
#include <Uefi.h>
|
|
#include <Library/GpioLib.h>
|
|
#include <Pins/GpioPinsVer2Lp.h>
|
|
|
|
#define INTEL_VGA_VID 0x8086
|
|
#define INTEL_VGA_DID_46A0 0x46A0
|
|
#define INTEL_VGA_DID_46A6 0x46A6
|
|
|
|
#define NVIDIA_VID 0x10DE
|
|
#define NVIDIA_GN18S_DID 0x1F9F
|
|
#define NVIDIA_GN20_S5_DID 0x25A6
|
|
#define NVIDIA_GN20_S7_DID 0x25A9
|
|
|
|
#define S77014_INTEL_VGA_UMA_ONLY_SSIDSVID_46A0 0x380217AA
|
|
#define S77014_INTEL_VGA_UMA_ONLY_SSIDSVID_46A6 0x380717AA
|
|
|
|
#define S77014_GN18S_SSIDSVID 0x3AF417AA
|
|
#define S77014_GN20_S5_SSIDSVID 0x3AF317AA
|
|
#define S77014_GN20_S7_SSIDSVID 0x3B2E17AA
|
|
#endif
|
|
//[-end-211217-Ching000019-modify]//
|
|
//[-end-210909-TAMT000007-add]//
|
|
|
|
//[-start-220318-Ching000036-modify]//
|
|
#ifdef S77014IAH_SUPPORT
|
|
#include <Library/OemSvcLfcPeiGetBoardID.h>
|
|
#include <Library/PciExpressLib.h>
|
|
#include <Library/S3BootScriptLib.h>
|
|
#include <Library/PcdLib.h>
|
|
#include <Library/MemoryAllocationLib.h>
|
|
#include <Library/UefiRuntimeServicesTableLib.h>
|
|
#include <SetupVariable.h>
|
|
#include <Uefi.h>
|
|
#include <Library/GpioLib.h>
|
|
#include <Pins/GpioPinsVer2Lp.h>
|
|
|
|
#define INTEL_VGA_VID 0x8086
|
|
#define INTEL_VGA_DID_46A3 0x46A3
|
|
#define INTEL_VGA_DID_46A6 0x46A6
|
|
|
|
#define NVIDIA_VID 0x10DE
|
|
#define NVIDIA_GN18_S5_DID 0x1F9F
|
|
#define NVIDIA_GN20_S7_DID 0x25A9
|
|
|
|
#define S77014IAH_INTEL_VGA_UMA_ONLY_SSIDSVID 0x3B3717AA
|
|
|
|
#define S77014IAH_GN18_S5_SSIDSVID 0x3B3817AA
|
|
#define S77014IAH_GN20_S7_SSIDSVID 0x3B3917AA
|
|
#endif
|
|
//[-end-220318-Ching000036-modify]//
|
|
|
|
//[-start-210623-Dongxu0003-Modify]
|
|
//[-start-210611-Dongxu0001-Modify]
|
|
//[-start-210925-TAMT000014-midofy]//
|
|
#if defined(C970_SUPPORT) || defined(C770_SUPPORT) || defined(S77013_SUPPORT)
|
|
//[-end-210925-TAMT000014-modify]//
|
|
// Sample code for OEM project.
|
|
// The code is for BIOS to configure SSID&SSVID for NVIDA/AMD add-in card.
|
|
// The address of SSID&SSVID is different with normal PCIE device's address 0x2C.
|
|
#include <Library/PciExpressLib.h>
|
|
#include <Library/S3BootScriptLib.h>
|
|
//[start-210802-STORM1103-modify]
|
|
#include <Library/OemSvcLfcPeiGetBoardID.h>
|
|
//[end-210802-STORM1103-modify]
|
|
|
|
// [VID]
|
|
#define INTEL_VID 0x8086
|
|
#define REALTEK_VID 0x10EC
|
|
// [DID]
|
|
//[start-210802-STORM1103-modify]
|
|
#define INTEL_DG2_DID 0x5693
|
|
#define INTEL_DID_46A0 0x46A0
|
|
#define INTEL_DID_46A1 0x46A1
|
|
#define INTEL_DID_46A6 0x46A6
|
|
#define INTEL_DID_46A8 0x46A8
|
|
#define INTEL_IGPU_UMA 0x3AE417AA
|
|
#define INTEL_IGPU_DIS 0x3AE317AA
|
|
//[end-210802-STORM1103-modify]
|
|
|
|
// Ssid Table Struct
|
|
typedef struct {
|
|
UINT16 Vid;
|
|
UINT16 Did;
|
|
UINT8 Bus;
|
|
UINT8 Dev;
|
|
UINT8 Fun;
|
|
UINT32 SsidSvid;
|
|
} SSID_TABLE_STRU;
|
|
#ifdef C970_SUPPORT
|
|
SSID_TABLE_STRU YogaC970_SsidTable[] = {
|
|
// Vid Did Bus Dev Fun SsidSvid
|
|
{ INTEL_VID, 0x46A0, 0x00, 0x02, 0x00, 0x380417AA }, //Graphics Device
|
|
//{ INTEL_VID, 0x464D, 0x00, 0x06, 0x00, 0x380117AA }, //Intel Corporation PCI-to-PCI Bridge (PCIE)
|
|
//{ INTEL_VID, 0x466E, 0x00, 0x07, 0x00, 0x380117AA }, //Intel Corporation PCI-to-PCI Bridge (PCIE)
|
|
//{ INTEL_VID, 0x463F, 0x00, 0x07, 0x01, 0x380117AA }, //Intel Corporation PCI-to-PCI Bridge (PCIE)
|
|
//{ INTEL_VID, 0x462F, 0x00, 0x07, 0x02, 0x380117AA }, //Intel Corporation PCI-to-PCI Bridge (PCIE)
|
|
|
|
// Unknow Device ,
|
|
{ 0xFFFF, 0xFFFF, 0xFF, 0xFF, 0xFF, 0xFFFFFFFF }
|
|
};
|
|
|
|
#endif
|
|
//[-start-210925-TAMT000014-add]//
|
|
//[-start-220215-Ching000029-modify]//
|
|
//[-start-220412-DABING0050-modify]//
|
|
#ifdef S77013_SUPPORT
|
|
SSID_TABLE_STRU S77013_SsidTable[] = {
|
|
// Vid Did Bus Dev Fun SsidSvid
|
|
{ 0x8086, 0x46A0, 0x00, 0x02, 0x00, 0x380917AA }, //Graphics Device
|
|
{ 0x8086, 0x46A6, 0x00, 0x02, 0x00, 0x380D17AA }, //Graphics Device
|
|
// Unknow Device ,
|
|
{ 0xFFFF, 0xFFFF, 0xFF, 0xFF, 0xFF, 0xFFFFFFFF }
|
|
};
|
|
|
|
#endif
|
|
//[-end-220412-DABING0050-modify]//
|
|
//[-end-220215-Ching000029-modify]//
|
|
//[-end-210925-TAMT000014-add]//
|
|
|
|
//[start-210720-STORM1100-modify]//
|
|
//[start-210802-STORM1103-modify]
|
|
//#ifdef C770_SUPPORT
|
|
//SSID_TABLE_STRU YogaC770_SsidTable[] = {
|
|
// // Vid Did Bus Dev Fun SsidSvid
|
|
// { INTEL_VID, 0x46A0, 0x00, 0x02, 0x00, 0x380417AA }, //Graphics Device
|
|
// { INTEL_VID, 0x46A0, 0x00, 0x02, 0x00, 0x380417AA }, //Graphics Device
|
|
// { INTEL_VID, 0x46A0, 0x00, 0x02, 0x00, 0x380417AA }, //Graphics Device
|
|
// { INTEL_VID, 0x46A0, 0x00, 0x02, 0x00, 0x380417AA }, //Graphics Device
|
|
//
|
|
// // Unknow Device ,
|
|
// { 0xFFFF, 0xFFFF, 0xFF, 0xFF, 0xFF, 0xFFFFFFFF }
|
|
//};
|
|
//
|
|
//#endif
|
|
//[end-210720-STORM1100-modify]//
|
|
//[end-210802-STORM1103-modify]
|
|
|
|
EFI_STATUS
|
|
ProgramSsidSvid0xFFFF1002 (
|
|
IN UINT8 Bus,
|
|
IN UINT8 Dev,
|
|
IN UINT8 Func,
|
|
IN OUT UINT32 *SsidSvid
|
|
)
|
|
{
|
|
UINT64 BootScriptPciAddress;
|
|
//
|
|
// Program SSID / SSVID
|
|
//
|
|
PciExpressWrite32 (PCI_EXPRESS_LIB_ADDRESS(Bus, Dev, Func, 0x4C), *SsidSvid);
|
|
|
|
BootScriptPciAddress = S3_BOOT_SCRIPT_LIB_PCI_ADDRESS (Bus, Dev, Func, 0x4C);
|
|
S3BootScriptSavePciCfgWrite (
|
|
S3BootScriptWidthUint32,
|
|
BootScriptPciAddress,
|
|
1,
|
|
SsidSvid);
|
|
|
|
return EFI_SUCCESS;
|
|
}
|
|
|
|
EFI_STATUS
|
|
ProgramSsidSvid0xFFFF10DE (
|
|
IN UINT8 Bus,
|
|
IN UINT8 Dev,
|
|
IN UINT8 Func,
|
|
IN OUT UINT32 *SsidSvid
|
|
)
|
|
{
|
|
UINT64 BootScriptPciAddress;
|
|
//
|
|
// Program SSID / SSVID
|
|
//
|
|
//[start-210802-STORM1103-modify]
|
|
#ifdef C770_SUPPORT
|
|
PciExpressWrite32 (PCI_EXPRESS_LIB_ADDRESS(Bus, Dev, Func, 0x2C), *SsidSvid);
|
|
BootScriptPciAddress = S3_BOOT_SCRIPT_LIB_PCI_ADDRESS (Bus, Dev, Func, 0x2C);
|
|
#else
|
|
//[end-210802-STORM1103-modify]
|
|
PciExpressWrite32 (PCI_EXPRESS_LIB_ADDRESS(Bus, Dev, Func, 0x40), *SsidSvid);
|
|
|
|
BootScriptPciAddress = S3_BOOT_SCRIPT_LIB_PCI_ADDRESS (Bus, Dev, Func, 0x40);
|
|
//[start-210802-STORM1103-modify]
|
|
#endif
|
|
//[end-210802-STORM1103-modify]
|
|
S3BootScriptSavePciCfgWrite (
|
|
S3BootScriptWidthUint32,
|
|
BootScriptPciAddress,
|
|
1,
|
|
SsidSvid);
|
|
|
|
return EFI_SUCCESS;
|
|
}
|
|
|
|
STATIC OEM_SSID_SVID_TABLE SsidTable[] = {
|
|
0x10DE, DEVICE_ID_DONT_CARE, ProgramSsidSvid0xFFFF10DE,
|
|
0x1002, DEVICE_ID_DONT_CARE, ProgramSsidSvid0xFFFF1002,
|
|
DEVICE_ID_DONT_CARE, DEVICE_ID_DONT_CARE, NULL
|
|
};
|
|
#endif
|
|
|
|
//[-start-210723-QINGLIN0001-add]//
|
|
#if defined(S570_SUPPORT)
|
|
#include <Library/PciExpressLib.h>
|
|
#include <Library/S3BootScriptLib.h>
|
|
#include <SetupVariable.h>
|
|
#include <Uefi.h>
|
|
#include <Library/GpioLib.h>
|
|
#include <Library/UefiRuntimeServicesTableLib.h>
|
|
#include <Pins/GpioPinsVer2Lp.h>
|
|
//[-start-211025-QINGLIN0103-add]//
|
|
#include <CommonDefinitions.h>
|
|
#include <Library/OemSvcLfcPeiGetBoardID.h>
|
|
//[-end-211025-QINGLIN0103-add]//
|
|
|
|
// [VID]
|
|
#define INTEL_VID 0x8086
|
|
#define REALTEK_VID 0x10EC
|
|
#define NVIDIA_VID 0x10DE
|
|
// [DID]
|
|
//[-start-211015-QINGLIN0100-modify]//
|
|
//[-start-211025-QINGLIN0103-modify]//
|
|
#define INTEL_VGA_DID_46A0 0x46A0 //U28
|
|
#define INTEL_VGA_DID_46A6 0x46A6 //U28
|
|
#define INTEL_VGA_DID_46A8 0x46A8 //U15
|
|
//[-start-220407-JEPLIUT220-add]//
|
|
#define INTEL_VGA_DID_46B3 0x46B3
|
|
#define INTEL_VGA_DID_4628 0x4628
|
|
#define INTEL_VGA_DID_4626 0x4626
|
|
//[-end-220407-JEPLIUT220-add]//
|
|
#define NVIDIA_N18S5_DID 0x1F9F
|
|
#define NVIDIA_N20S5_DID 0x25A6
|
|
#define NVIDIA_N20S7_DID 0x25A9
|
|
|
|
#define INTEL_IGPU_UMA 0x3AF217AA
|
|
#define INTEL_IGPU_DIS_N18S5 0x3E7E17AA
|
|
#define INTEL_IGPU_DIS_N20S5 0x3E7D17AA
|
|
#define INTEL_IGPU_DIS_N20S7 0x3E7917AA
|
|
//[-end-211025-QINGLIN0103-modify]//
|
|
//[-end-211015-QINGLIN0100-modify]//
|
|
|
|
EFI_STATUS
|
|
ProgramSsidSvid0xFFFF10DE (
|
|
IN UINT8 Bus,
|
|
IN UINT8 Dev,
|
|
IN UINT8 Func,
|
|
IN OUT UINT32 *SsidSvid
|
|
)
|
|
{
|
|
UINT64 BootScriptPciAddress;
|
|
//
|
|
// Program SSID / SSVID
|
|
//
|
|
#ifdef S570_SUPPORT
|
|
PciExpressWrite32 (PCI_EXPRESS_LIB_ADDRESS(Bus, Dev, Func, 0x2C), *SsidSvid);
|
|
BootScriptPciAddress = S3_BOOT_SCRIPT_LIB_PCI_ADDRESS (Bus, Dev, Func, 0x2C);
|
|
#else
|
|
PciExpressWrite32 (PCI_EXPRESS_LIB_ADDRESS(Bus, Dev, Func, 0x40), *SsidSvid);
|
|
|
|
BootScriptPciAddress = S3_BOOT_SCRIPT_LIB_PCI_ADDRESS (Bus, Dev, Func, 0x40);
|
|
#endif
|
|
S3BootScriptSavePciCfgWrite (
|
|
S3BootScriptWidthUint32,
|
|
BootScriptPciAddress,
|
|
1,
|
|
SsidSvid);
|
|
|
|
return EFI_SUCCESS;
|
|
}
|
|
|
|
//[-start-211025-QINGLIN0103-add]//
|
|
EFI_STATUS
|
|
LfcGetSSIDbyGraphicDeviceId (
|
|
IN OUT UINT32 *SsidSvid
|
|
)
|
|
{
|
|
UINTN PciAddress;
|
|
UINT8 DgpuBridgeBus;
|
|
UINT8 DgpuBridgeDevice;
|
|
UINT8 DgpuBridgeFunction;
|
|
UINT8 MasterDgpuBus;
|
|
UINT16 MasterDgpuVendorId;
|
|
UINT16 MasterDgpuDeviceId;
|
|
|
|
DgpuBridgeBus = PcdGet8 (PcdHgPegBridgeBus);
|
|
DgpuBridgeDevice = PcdGet8 (PcdHgPegBridgeDevice);
|
|
DgpuBridgeFunction = PcdGet8 (PcdHgPegBridgeFunction);
|
|
|
|
//
|
|
// Read Master discrete GPU Bus and Venodr ID.
|
|
//
|
|
PciAddress = PCI_EXPRESS_LIB_ADDRESS (
|
|
DgpuBridgeBus,
|
|
DgpuBridgeDevice,
|
|
DgpuBridgeFunction,
|
|
PCI_SBUS
|
|
);
|
|
MasterDgpuBus = PciExpressRead8 (PciAddress);
|
|
|
|
PciAddress = PCI_EXPRESS_LIB_ADDRESS (
|
|
MasterDgpuBus,
|
|
0x00,
|
|
0x00,
|
|
PCI_VID
|
|
);
|
|
MasterDgpuVendorId = PciExpressRead16 (PciAddress);
|
|
|
|
PciAddress = PCI_EXPRESS_LIB_ADDRESS (
|
|
MasterDgpuBus,
|
|
0x00,
|
|
0x00,
|
|
PCI_DID
|
|
);
|
|
MasterDgpuDeviceId = PciExpressRead16 (PciAddress);
|
|
|
|
if (MasterDgpuVendorId == NVIDIA_VID) {
|
|
switch(MasterDgpuDeviceId) {
|
|
case NVIDIA_N18S5_DID: //GN18-S5
|
|
*SsidSvid = INTEL_IGPU_DIS_N18S5;
|
|
break;
|
|
case NVIDIA_N20S5_DID: //GN20-S5
|
|
*SsidSvid = INTEL_IGPU_DIS_N20S5;
|
|
break;
|
|
case NVIDIA_N20S7_DID: //GN20-S7
|
|
*SsidSvid = INTEL_IGPU_DIS_N20S7;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
return EFI_SUCCESS;
|
|
}
|
|
//[-end-211025-QINGLIN0103-add]//
|
|
|
|
#endif
|
|
//[-end-210723-QINGLIN0001-add]//
|
|
|
|
//[-start-210804-QINGLIN0008-add]//
|
|
#if defined(S370_SUPPORT)
|
|
#include <Library/PciExpressLib.h>
|
|
#include <Library/S3BootScriptLib.h>
|
|
#include <SetupVariable.h>
|
|
#include <Uefi.h>
|
|
#include <Library/GpioLib.h>
|
|
#include <Library/UefiRuntimeServicesTableLib.h>
|
|
#include <Library/OemSvcLfcPeiGetBoardID.h>
|
|
//[-start-211110-QINGLIN0111-add]//
|
|
#include <Library/DebugLib.h>
|
|
#include <Library/IoLib.h> // For MmioWrite32
|
|
//[-end-211110-QINGLIN0111-add]//
|
|
//[-start-211110-QINGLIN0112-add]//
|
|
#include <SetupVariable.h>
|
|
#include <Library/VariableLib.h>
|
|
#include <SetupConfig.h>
|
|
#include <Library/BaseMemoryLib.h>
|
|
#include <Library/MemoryAllocationLib.h>
|
|
//[-end-211110-QINGLIN0112-add]//
|
|
//[-start-220216-QINGLIN0156-add]//
|
|
#include <Library/OemSvcLfcPeiGetBoardID.h>
|
|
//[-end-220216-QINGLIN0156-add]//
|
|
|
|
//[-start-211019-Xinwei003-Modify]//
|
|
// [VID]
|
|
#define INTEL_VID 0x8086
|
|
#define REALTEK_VID 0x10EC
|
|
// [DID]
|
|
#define INTEL_VGA_DID_46B3 0x46B3 //U15 i3/Pentium/Celeron core + Single/Dual memory chanel
|
|
#define INTEL_VGA_DID_46A8 0x46A8 //U15 i7/i5 core + Dual memory chanel
|
|
//[-start-220125-QINGLIN0152-add]//
|
|
#define INTEL_VGA_DID_4628 0x4628 //U15 i7/i5 core + Single memory chanel
|
|
//[-end-220125-QINGLIN0152-add]//
|
|
#define INTEL_DG2_SKU6_DID 0x5695 //DG2 SKU6
|
|
|
|
// SSID
|
|
//[-start-220217-QINGLIN0159-modify]//
|
|
#define INTEL_VGA_UMA_SSID 0x3B3A17AA
|
|
#define INTEL_VGA_DIS_SSID 0x3B3B17AA
|
|
//[-end-220217-QINGLIN0159-modify]//
|
|
|
|
//[-start-211110-QINGLIN0111-add]//
|
|
#if defined(BAYHUB_CARD_READER_SUPPORT) || defined(GENESYS_LOGIC_CARD_READER_SUPPORT)
|
|
#define CARDREADER_ROOTBRIDGE_BUS 0 // Card Reader Root Bridge Bus
|
|
#define CARDREADER_ROOTBRIDGE_DEV 0x1D // Card Reader Root Bridge Device
|
|
#define CARDREADER_ROOTBRIDGE_FUN 1 // Card Reader Root Bridge Function
|
|
|
|
//---------------------------------------------------------------------------
|
|
// Structure Defination
|
|
//---------------------------------------------------------------------------
|
|
typedef struct _PCI_REG_TABLE{
|
|
UINT32 Offset;
|
|
UINT32 AndMask;
|
|
UINT32 OrValue;
|
|
} PCI_REG_TABLE;
|
|
|
|
VOID*
|
|
GetPciExpressBaseAddress (
|
|
VOID
|
|
);
|
|
#endif
|
|
|
|
#if defined(BAYHUB_CARD_READER_SUPPORT)
|
|
//---------------------------------------------------------------------------
|
|
// Device Information
|
|
//---------------------------------------------------------------------------
|
|
#define BayHub_Card_Reader_VID 0x1217 // BayHub Card Reader VID
|
|
#define BayHub_Card_Reader_DID 0x8621 // BayHub Card Reader DID
|
|
|
|
#define LTRMaxLatencyValueScale 0x10031003 // 3ms
|
|
#define L12ThresholdValueScale 0x406E000F // 110us
|
|
|
|
#define LENOVO_OZ711LV2_SSVID_SSID 0x387417AA
|
|
|
|
PCI_REG_TABLE OZ621PciRegTable[] = {
|
|
{ 0xD0, 0x7FFFFFFF, 0x00000000 }, // Unlock write protect.
|
|
//
|
|
// Program O2SD Subsystem Vendor/Device ID
|
|
//
|
|
{ 0x2C, 0x00000000, LENOVO_OZ711LV2_SSVID_SSID }, // Programing SSID/SVID.
|
|
//
|
|
// Disable O2SD function if it is necessary - If L1 Substate function is supported by the platform
|
|
//
|
|
{ 0xE0, 0x0FFFFFFF, 0x30000000 }, // Set the PCI PM L1 Entrance timer to 16us.
|
|
//[-start-220129-QINGLIN0154-modify]//
|
|
{ 0x3E4, 0xFFF7FFFF, 0x00080000 }, // Set the IDDQ function.
|
|
//[-end-220129-QINGLIN0154-modify]//
|
|
{ 0x248, 0x00000000, L12ThresholdValueScale }, // 110us - L1.2 Threshold scale register set to 010b, L1.2 Threshold value set to 00 0110 1110b, Enable PCI-PM L1 Sub state and ASPM L1 Sub state enable
|
|
{ 0x90, 0xFFFFFFFC, 0x00000003 }, // Enable L0s=bit0, L1=bit1.
|
|
{ 0x90, 0xFFFFFEFF, 0x00000100 }, // Enable using CLK_REQ# to save power.
|
|
//
|
|
// Reverse CD# and WP polarity if it is necessary - Skip now
|
|
//
|
|
//
|
|
// Disable RTD3 (Run Time D3) function if it is necessary - Skip now, default is Enable
|
|
//
|
|
//{ 0x3E0, 0xDFFFFFFF, 0x00000000 }, // Enable RTD3 function.
|
|
//
|
|
// Enable LTR (Latency Tolerant Reporting) feature if it is necessary
|
|
//
|
|
{ 0xA8, 0xFFFFFBFF, 0x00000400 }, // LTR Mechanism Enable; if the application does not support LTR Bit[10] set to 0b.
|
|
{ 0x234, 0x00000000, LTRMaxLatencyValueScale }, // Set max no-snoop latency and max snoop latency -> 3ms, Thinkpad Intel not use this
|
|
//
|
|
// L1 Substate function related
|
|
//
|
|
{ 0x248, 0x00000000, L12ThresholdValueScale }, // 110us - L1.2 Threshold scale register set to 010b, L1.2 Threshold value set to 00 0110 1110b, Enable PCI-PM L1 Sub state and ASPM L1 Sub state enable
|
|
//
|
|
// Enable Power saving mode if it is necessary. (PCI Express Capability Register, Link Control register.)
|
|
//
|
|
{ 0x90, 0xFFFFFFFC, 0x00000003 }, // Enable L0s=bit0, L1=bit1.
|
|
{ 0x90, 0xFFFFFEFF, 0x00000100 }, // Enable using CLK_REQ# to save power.
|
|
//
|
|
// PART B
|
|
//
|
|
//
|
|
// Set the L1 Entrance Timer
|
|
//
|
|
{ 0xE0, 0x0FFFFFFF, 0x30000000 }, // Set the PCI PM L1 Entrance timer to 16us.
|
|
{ 0xFC, 0xFFF0FFFF, 0x00080000 }, // Set the ASPM L1 Entrance timer to 512us.
|
|
//
|
|
// Set the IDDQ function for more power saving
|
|
//
|
|
//[-start-220129-QINGLIN0154-modify]//
|
|
{ 0x3E4, 0xFFF7FFFF, 0x00080000 }, // Set the IDDQ function.
|
|
//[-end-220129-QINGLIN0154-modify]//
|
|
//
|
|
// Set the tuning pass window threshold
|
|
//
|
|
{ 0x300, 0xFFFFFF00, 0x00000055 }, // Set the tuning pass window threshold for SDR104 and SDR50 to 5.
|
|
//
|
|
// Set DLL default sample clock phase of SDR50 if all phases tuning pass
|
|
//
|
|
{ 0x300, 0xFFFF0FFF, 0x00006000 }, // Set DLL default sample clock phase of SDR50 if all phases tuning pass. -> Thinkpad Intel not use this
|
|
//
|
|
// Set drive strength for 1.8V&3.3V signal
|
|
//
|
|
{ 0x304, 0xFFFFFF81, 0x00000044 }, // Set Card Reader driving strength. For EMC request.
|
|
{ 0xD0, 0xFFFFFFFF, 0x80000000 }, // Lock write protect.
|
|
};
|
|
#endif
|
|
|
|
#if defined(GENESYS_LOGIC_CARD_READER_SUPPORT)
|
|
//---------------------------------------------------------------------------
|
|
// Device Information
|
|
//---------------------------------------------------------------------------
|
|
#define GenesysLogic_Card_Reader_VID 0x17A0 // GenesysLogic Card Reader VID
|
|
#define GenesysLogic_Card_Reader_DID 0x9750 // GenesysLogic Card Reader DID
|
|
|
|
#define LENOVO_GL9750_OIYL4_SSVID_SSID 0x384A17AA
|
|
|
|
PCI_REG_TABLE GL9750PciRegTable[] = {
|
|
{ 0x800, 0xFFFFFFFE, 0x00000001 }, // Unlock write protect
|
|
//[-start-220129-QINGLIN0154-remove]//
|
|
// { 0x844, 0x7FFFFFFF, 0x80000000 },// Set the IDDQ function.
|
|
//[-end-220129-QINGLIN0154-remove]//
|
|
{ 0x848, 0xFFFF8FC7, 0x00006030 }, // Adjust L1 Exit Latency if to enable ASPM
|
|
{ 0x848, 0xFFFFFFBF, 0x00000000 }, // Disable ASPM L0s
|
|
{ 0x860, 0x0FFFFFFF, 0x00800000 }, // Ennable DFx for Modern Standby
|
|
{ 0x878, 0xFDFFFFFF, 0x02000000 }, // Disable wake up system by card insertion or removal during S3/S4
|
|
{ 0x87C, 0x00000000, LENOVO_GL9750_OIYL4_SSVID_SSID }, // Programing SSID/SVID
|
|
{ 0x800, 0xFFFFFFFE, 0x00000000 }, // Lock write protect
|
|
};
|
|
#endif
|
|
|
|
#if defined(BAYHUB_CARD_READER_SUPPORT)
|
|
//[-start-211110-QINGLIN0112-add]//
|
|
BOOLEAN
|
|
OemSvcLfcIsSetupWlanConfigDisable (
|
|
VOID
|
|
)
|
|
{
|
|
SYSTEM_CONFIGURATION *SetupNvData;
|
|
UINTN BufferSize;
|
|
BOOLEAN IsWlanDisable;
|
|
|
|
IsWlanDisable = FALSE;
|
|
|
|
CommonGetVariableDataAndSize (
|
|
L"Setup",
|
|
&gSystemConfigurationGuid,
|
|
&BufferSize,
|
|
(VOID **) &SetupNvData
|
|
);
|
|
|
|
if (SetupNvData != NULL) {
|
|
if (SetupNvData->L05WirelessLan == 0) { //disable
|
|
IsWlanDisable = TRUE;
|
|
}
|
|
FreePool (SetupNvData);
|
|
}
|
|
|
|
return IsWlanDisable;
|
|
}
|
|
//[-end-211110-QINGLIN0112-add]//
|
|
|
|
EFI_STATUS
|
|
EFIAPI
|
|
CheckAndProgramBayHubCardReader (
|
|
IN UINT16 VendorId,
|
|
IN UINT16 DeviceId,
|
|
IN UINT8 Bus,
|
|
IN UINT8 Dev,
|
|
IN UINT8 Func
|
|
)
|
|
{
|
|
UINTN MemBaseAddr;
|
|
UINT32 Temp32;
|
|
UINT8 Index;
|
|
//[-start-211110-QINGLIN0112-add]//
|
|
UINT8 BrgBusNum;
|
|
UINT8 BrgDevNum;
|
|
UINT8 BrgFunNum;
|
|
//[-end-211110-QINGLIN0112-add]//
|
|
|
|
|
|
DEBUG((DEBUG_INFO, __FUNCTION__" Entry\n"));
|
|
DEBUG ((DEBUG_INFO, "CardReader Vid = 0x%04X, Did = 0x%04X\n", VendorId, DeviceId));
|
|
|
|
//
|
|
// Determine device by Vendor ID and Device ID.
|
|
//
|
|
if ((VendorId != BayHub_Card_Reader_VID) || (DeviceId != BayHub_Card_Reader_DID)) {
|
|
return EFI_UNSUPPORTED;
|
|
}
|
|
DEBUG ((DEBUG_INFO, "Find Bayhub Card Reader(B:%d/D:%d:/F:%d)\n", Bus, Dev, Func));
|
|
|
|
MemBaseAddr = (UINTN) GetPciExpressBaseAddress () + PCI_EXPRESS_LIB_ADDRESS(Bus, Dev, Func, 0);
|
|
DEBUG((DEBUG_ERROR, "MemBaseAddr = 0x%X\n", MemBaseAddr));
|
|
|
|
//
|
|
// Write Value To Crc Register
|
|
//
|
|
for(Index = 0 ; Index < sizeof(OZ621PciRegTable)/sizeof(PCI_REG_TABLE) ; Index ++) {
|
|
if(OZ621PciRegTable[Index].Offset == 0xFFFFFFFF) break;
|
|
|
|
//
|
|
// Get Current setting.
|
|
//
|
|
Temp32 = MmioRead32((UINTN) (MemBaseAddr+ OZ621PciRegTable[Index].Offset));
|
|
DEBUG ((DEBUG_INFO, "Read Bayhub Card Reader Register Offset %.4X: %.8X\n", OZ621PciRegTable[Index].Offset, Temp32));
|
|
//
|
|
// Prepare OEM Setting.
|
|
//
|
|
Temp32 = (Temp32 & OZ621PciRegTable[Index].AndMask) | OZ621PciRegTable[Index].OrValue;
|
|
|
|
//
|
|
// Write OEM Setting.
|
|
//
|
|
MmioWrite32((UINTN) (MemBaseAddr + OZ621PciRegTable[Index].Offset), Temp32);
|
|
DEBUG ((DEBUG_INFO, "Write Bayhub Card Reader Register Offset %.4X: %.8X\n", OZ621PciRegTable[Index].Offset, Temp32));
|
|
}
|
|
|
|
//[-start-211110-QINGLIN0112-modify]//
|
|
BrgBusNum = CARDREADER_ROOTBRIDGE_BUS;
|
|
BrgDevNum = CARDREADER_ROOTBRIDGE_DEV;
|
|
BrgFunNum = CARDREADER_ROOTBRIDGE_FUN;
|
|
|
|
if (OemSvcLfcIsSetupWlanConfigDisable()) {
|
|
BrgFunNum = 0;
|
|
}
|
|
|
|
// Bayhub PCI Bridge
|
|
MemBaseAddr = PCI_EXPRESS_LIB_ADDRESS (BrgBusNum, BrgDevNum, BrgFunNum, 0);
|
|
//[-end-211110-QINGLIN0112-modify]//
|
|
|
|
//
|
|
// Card Reader Pcie root Port L1 Sub-States Control 1 (L1SCTL1) Offset 208h
|
|
//
|
|
// Program root port Threshold scale & Threshold value same as Device (L12ThresholdValueScale)
|
|
// Program root port PCI-PM L1 Substate and ASPM L1 Substate
|
|
//
|
|
Temp32 = L12ThresholdValueScale;
|
|
PciExpressWrite32((UINTN) (MemBaseAddr + 0x208), Temp32);
|
|
|
|
DEBUG((DEBUG_INFO, __FUNCTION__" End\n"));
|
|
return EFI_SUCCESS;
|
|
}
|
|
#endif
|
|
|
|
#if defined(GENESYS_LOGIC_CARD_READER_SUPPORT)
|
|
EFI_STATUS
|
|
EFIAPI
|
|
CheckAndProgramGenesysLogicCardReader (
|
|
IN UINT16 VendorId,
|
|
IN UINT16 DeviceId,
|
|
IN UINT8 Bus,
|
|
IN UINT8 Dev,
|
|
IN UINT8 Func
|
|
)
|
|
{
|
|
UINTN MemBaseAddr;
|
|
UINT32 Temp32;
|
|
UINT8 Index;
|
|
|
|
DEBUG ((DEBUG_INFO, __FUNCTION__" Entry\n"));
|
|
DEBUG ((DEBUG_INFO, "CardReader Vid = 0x%04X, Did = 0x%04X\n", VendorId, DeviceId));
|
|
//
|
|
// Determine device by Vendor ID and Device ID.
|
|
//
|
|
if ((VendorId != GenesysLogic_Card_Reader_VID) || (DeviceId != GenesysLogic_Card_Reader_DID)) {
|
|
return EFI_UNSUPPORTED;
|
|
}
|
|
DEBUG ((DEBUG_INFO, "Find GenesysLogic Card Reader(B:%d/D:%d:/F:%d)\n", Bus, Dev, Func));
|
|
|
|
MemBaseAddr = (UINTN) GetPciExpressBaseAddress () + PCI_EXPRESS_LIB_ADDRESS(Bus, Dev, Func, 0);
|
|
DEBUG ((DEBUG_ERROR, "MemBaseAddr = 0x%X\n", MemBaseAddr));
|
|
|
|
//
|
|
// Write Value To Crc Register
|
|
//
|
|
for(Index = 0 ; Index < sizeof(GL9750PciRegTable)/sizeof(PCI_REG_TABLE) ; Index ++) {
|
|
if(GL9750PciRegTable[Index].Offset == 0xFFFFFFFF) break;
|
|
|
|
//
|
|
// Get Current setting.
|
|
//
|
|
Temp32 = MmioRead32((UINTN) (MemBaseAddr+ GL9750PciRegTable[Index].Offset));
|
|
DEBUG ((DEBUG_INFO, "Read Genesys Logic Card Reader Register Offset %.4X: %.8X\n", GL9750PciRegTable[Index].Offset, Temp32));
|
|
//
|
|
// Prepare OEM Setting.
|
|
//
|
|
Temp32 = (Temp32 & GL9750PciRegTable[Index].AndMask) | GL9750PciRegTable[Index].OrValue;
|
|
|
|
//
|
|
// Write OEM Setting.
|
|
//
|
|
MmioWrite32((UINTN) (MemBaseAddr + GL9750PciRegTable[Index].Offset), Temp32);
|
|
DEBUG ((DEBUG_INFO, "Write Genesys Logic Card Reader Register Offset %.4X: %.8X\n", GL9750PciRegTable[Index].Offset, Temp32));
|
|
}
|
|
|
|
DEBUG((DEBUG_INFO, __FUNCTION__" End\n"));
|
|
return EFI_SUCCESS;
|
|
}
|
|
#endif
|
|
//[-end-211110-QINGLIN0111-add]//
|
|
#endif
|
|
//[-end-210804-QINGLIN0008-add]//
|
|
|
|
//[-start-210909-TAMT000007-add]//
|
|
#if defined(S77014_SUPPORT) || defined(S77014IAH_SUPPORT)
|
|
EFI_STATUS
|
|
ProgramSsidSvid0xFFFF10DE (
|
|
IN UINT8 Bus,
|
|
IN UINT8 Dev,
|
|
IN UINT8 Func,
|
|
IN OUT UINT32 *SsidSvid
|
|
)
|
|
{
|
|
UINT64 BootScriptPciAddress;
|
|
//
|
|
// Program SSID / SSVID
|
|
//
|
|
|
|
PciExpressWrite32 (PCI_EXPRESS_LIB_ADDRESS(Bus, Dev, Func, 0x2C), *SsidSvid);
|
|
BootScriptPciAddress = S3_BOOT_SCRIPT_LIB_PCI_ADDRESS (Bus, Dev, Func, 0x2C);
|
|
S3BootScriptSavePciCfgWrite (
|
|
S3BootScriptWidthUint32,
|
|
BootScriptPciAddress,
|
|
1,
|
|
SsidSvid);
|
|
|
|
return EFI_SUCCESS;
|
|
}
|
|
#endif
|
|
//[-end-210909-TAMT000007-add]//
|
|
|
|
/**
|
|
The OemSvc is used to update SSID/SVID value by OEM.
|
|
|
|
@param[in] Bus Bus number.
|
|
@param[in] Dev Device number.
|
|
@param[in] Func Function number.
|
|
@param[in] VendorID Vendor ID.
|
|
@param[in] DeviceID Device ID.
|
|
@param[in] ClassCode Class Code.
|
|
@param[in out] SsidSvid Pointer to SSID/SVID.
|
|
|
|
@retval EFI_UNSUPPORTED Returns unsupported by default.
|
|
@retval EFI_SUCCESS OEM handled SSID/SVID programming on this PCI device. Skip default kernel
|
|
programming mechanism.
|
|
@retval EFI_MEDIA_CHANGED Updated SsidSvid value and returned this value for default programming mechanism.
|
|
**/
|
|
EFI_STATUS
|
|
OemSvcUpdateSsidSvidInfo (
|
|
IN UINT8 Bus,
|
|
IN UINT8 Dev,
|
|
IN UINT8 Func,
|
|
IN UINT16 VendorId,
|
|
IN UINT16 DeviceId,
|
|
IN UINT16 ClassCode,
|
|
IN OUT UINT32 *SsidSvid
|
|
)
|
|
{
|
|
/*++
|
|
Todo:
|
|
Add project specific code in here.
|
|
--*/
|
|
#if 0
|
|
// Sample code for OEM project.
|
|
// The code is for BIOS to configure SSID&SSVID for NVIDA/AMD add-in card.
|
|
// The address of SSID&SSVID is different with normal PCIE device's address 0x2C.
|
|
UINT8 Index;
|
|
EFI_STATUS Status;
|
|
|
|
Status = EFI_UNSUPPORTED;
|
|
for (Index = 0; SsidTable[Index].SpecialSsidSvidFunction != NULL; Index++ ) {
|
|
if (SsidTable[Index].VendorId == VendorId) {
|
|
if ((SsidTable[Index].DeviceId == DEVICE_ID_DONT_CARE)
|
|
|| (SsidTable[Index].DeviceId == DeviceId)){
|
|
Status = SsidTable[Index].SpecialSsidSvidFunction (Bus, Dev, Func, SsidSvid);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
return Status;
|
|
#endif
|
|
|
|
#if defined(C970_SUPPORT)
|
|
//EFI_STATUS Status = EFI_MEDIA_CHANGED;
|
|
UINT16 Count = 0;
|
|
UINT16 OemSsidTableSize = 0;
|
|
SSID_TABLE_STRU *OemSsidTable = NULL;
|
|
|
|
OemSsidTableSize = sizeof(YogaC970_SsidTable)/sizeof(SSID_TABLE_STRU);
|
|
OemSsidTable = YogaC970_SsidTable;
|
|
for (Count = 0; Count < OemSsidTableSize; Count++) {
|
|
if ((Dev == OemSsidTable[Count].Dev) && (Func == OemSsidTable[Count].Fun)) {
|
|
*SsidSvid = OemSsidTable[Count].SsidSvid;
|
|
|
|
}
|
|
/*
|
|
if (VendorId == OemSsidTable[Count].Vid) {
|
|
if (DeviceId == OemSsidTable[Count].Did) {
|
|
if (VendorId != INTEL_VID){
|
|
*SsidSvid = OemSsidTable[Count].SsidSvid;
|
|
break;
|
|
}
|
|
if ((Dev == OemSsidTable[Count].Dev) && (Func == OemSsidTable[Count].Fun)) {
|
|
*SsidSvid = OemSsidTable[Count].SsidSvid;
|
|
return EFI_MEDIA_CHANGED;
|
|
}
|
|
}
|
|
}
|
|
*/
|
|
}
|
|
return EFI_MEDIA_CHANGED;
|
|
|
|
#endif
|
|
//[start-210802-STORM1103-modify]
|
|
#if defined(C770_SUPPORT)
|
|
EFI_STATUS Status = EFI_MEDIA_CHANGED;
|
|
// UINT16 Count = 0;
|
|
// UINT16 OemSsidTableSize = 0;
|
|
// SSID_TABLE_STRU *OemSsidTable = NULL;
|
|
UINT8 UmaAndDisType;
|
|
|
|
if (VendorId == INTEL_VID) {
|
|
if ((DeviceId == INTEL_DID_46A0) || (DeviceId == INTEL_DID_46A1) || (DeviceId == INTEL_DID_46A6) || (DeviceId == INTEL_DID_46A8)) {
|
|
OemSvcLfcGetBoardID (GPU_ID, &UmaAndDisType);
|
|
if(GPU_ID_UMA_ONLY == UmaAndDisType) {
|
|
*SsidSvid = INTEL_IGPU_UMA;
|
|
} else {
|
|
*SsidSvid = INTEL_IGPU_DIS;
|
|
}
|
|
return EFI_MEDIA_CHANGED;
|
|
}
|
|
}
|
|
|
|
// OemSsidTableSize = sizeof(YogaC770_SsidTable)/sizeof(SSID_TABLE_STRU);
|
|
// OemSsidTable = YogaC770_SsidTable;
|
|
// for (Count = 0; Count < OemSsidTableSize; CounMMB ++) {
|
|
// if ((Dev == OemSsidTable[Count].Dev) && (Func == OemSsidTable[Count].Fun)) {
|
|
// *SsidSvid = OemSsidTable[Count].SsidSvid;
|
|
//
|
|
// }
|
|
// if (VendorId == OemSsidTable[Count].Vid) {
|
|
// if (DeviceId == OemSsidTable[Count].Did) {
|
|
// if (VendorId != INTEL_VID){
|
|
// *SsidSvid = OemSsidTable[Count].SsidSvid;
|
|
// break;
|
|
// }
|
|
// if ((Dev == OemSsidTable[Count].Dev) && (Func == OemSsidTable[Count].Fun)) {
|
|
// *SsidSvid = OemSsidTable[Count].SsidSvid;
|
|
// return EFI_MEDIA_CHANGED;
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
if((VendorId == INTEL_VID) && (DeviceId == INTEL_DG2_DID)) {
|
|
*SsidSvid = INTEL_IGPU_DIS;
|
|
Status = ProgramSsidSvid0xFFFF10DE(Bus, Dev, Func, SsidSvid);
|
|
}
|
|
|
|
return EFI_MEDIA_CHANGED;
|
|
|
|
#endif
|
|
//[end-210802-STORM1103-modify]
|
|
|
|
//[-start-210817-DABING0002-modify]//
|
|
//[-start-210909-TAMT000007-add]//
|
|
//[-start-211217-Ching000019-modify]//
|
|
#ifdef S77014_SUPPORT
|
|
//LCFC Todo for S770-14
|
|
EFI_STATUS Status;
|
|
SA_SETUP SaSetup;
|
|
UINTN VariableSize;
|
|
UINT32 BoardID12;
|
|
UINT32 BoardID13;
|
|
|
|
GpioGetInputValue (GPIO_VER2_LP_GPP_F15, &BoardID12);
|
|
GpioGetInputValue (GPIO_VER2_LP_GPP_F16, &BoardID13);
|
|
|
|
if((VendorId == NVIDIA_VID) || (DeviceId == INTEL_VGA_DID_46A0) || (DeviceId == INTEL_VGA_DID_46A6)){
|
|
VariableSize = sizeof (SA_SETUP);
|
|
//
|
|
// Get setup variable
|
|
//
|
|
Status = gRT->GetVariable (
|
|
L"SaSetup",
|
|
&gSaSetupVariableGuid,
|
|
NULL,
|
|
&VariableSize,
|
|
&SaSetup
|
|
);
|
|
|
|
if ((BoardID12 == 0) && (BoardID13 == 1) && (SaSetup.PrimaryDisplay == 4)) { //Dis GN18S
|
|
*SsidSvid = S77014_GN18S_SSIDSVID;
|
|
} else if ((BoardID12 == 1) && (SaSetup.PrimaryDisplay == 4)) { //Dis GN20S
|
|
if (BoardID13 == 0) { //GN20-S5
|
|
*SsidSvid = S77014_GN20_S5_SSIDSVID;
|
|
} else if (BoardID13 == 1) { //GN20-S7
|
|
*SsidSvid = S77014_GN20_S7_SSIDSVID;
|
|
}
|
|
} else {
|
|
if (DeviceId == INTEL_VGA_DID_46A0) { //UMA-46A0
|
|
*SsidSvid = S77014_INTEL_VGA_UMA_ONLY_SSIDSVID_46A0;
|
|
} else if (DeviceId == INTEL_VGA_DID_46A6) { //UMA-46A6
|
|
*SsidSvid = S77014_INTEL_VGA_UMA_ONLY_SSIDSVID_46A6;
|
|
}
|
|
}
|
|
|
|
if(((VendorId == NVIDIA_VID) && (DeviceId == NVIDIA_GN18S_DID)) || ((VendorId == NVIDIA_VID) && (DeviceId == NVIDIA_GN20_S5_DID)) || ((VendorId == NVIDIA_VID) && (DeviceId == NVIDIA_GN20_S7_DID))) {
|
|
Status = ProgramSsidSvid0xFFFF10DE(Bus, Dev, Func, SsidSvid);
|
|
}
|
|
}
|
|
return EFI_MEDIA_CHANGED;
|
|
#endif
|
|
//[-end-211217-Ching000019-modify]//
|
|
//[-end-210909-TAMT000007-add]//
|
|
//[-end-210817-DABING0002-modify]//
|
|
|
|
//[-start-220318-Ching000036-modify]//
|
|
#ifdef S77014IAH_SUPPORT
|
|
//LCFC Todo for S770-14IAH
|
|
EFI_STATUS Status;
|
|
SA_SETUP SaSetup;
|
|
UINTN VariableSize;
|
|
UINT32 BoardID12;
|
|
UINT32 BoardID13;
|
|
|
|
GpioGetInputValue (GPIO_VER2_LP_GPP_F15, &BoardID12);
|
|
GpioGetInputValue (GPIO_VER2_LP_GPP_F16, &BoardID13);
|
|
|
|
if((VendorId == NVIDIA_VID) || (DeviceId == INTEL_VGA_DID_46A3) || (DeviceId == INTEL_VGA_DID_46A6)){
|
|
VariableSize = sizeof (SA_SETUP);
|
|
//
|
|
// Get setup variable
|
|
//
|
|
Status = gRT->GetVariable (
|
|
L"SaSetup",
|
|
&gSaSetupVariableGuid,
|
|
NULL,
|
|
&VariableSize,
|
|
&SaSetup
|
|
);
|
|
|
|
if ((BoardID12 == 1) && (BoardID13 == 0) && (SaSetup.PrimaryDisplay == 4)) { //Dis GN18-S5
|
|
*SsidSvid = S77014IAH_GN18_S5_SSIDSVID;
|
|
} else if ((BoardID12 == 1) && (BoardID13 == 1) && (SaSetup.PrimaryDisplay == 4)) { //Dis GN20-S7
|
|
*SsidSvid = S77014IAH_GN20_S7_SSIDSVID;
|
|
} else { //UMA 46A3 & 46A6
|
|
*SsidSvid = S77014IAH_INTEL_VGA_UMA_ONLY_SSIDSVID;
|
|
}
|
|
|
|
if(((VendorId == NVIDIA_VID) && (DeviceId == NVIDIA_GN18_S5_DID)) || ((VendorId == NVIDIA_VID) && (DeviceId == NVIDIA_GN20_S7_DID))) {
|
|
Status = ProgramSsidSvid0xFFFF10DE(Bus, Dev, Func, SsidSvid);
|
|
}
|
|
}
|
|
return EFI_MEDIA_CHANGED;
|
|
#endif
|
|
//[-end-220318-Ching000036-modify]//
|
|
|
|
//[-start-210914-DABING0006-modify]//
|
|
//[-start-210925-TAMT000014-add]//
|
|
#if defined(S77013_SUPPORT)
|
|
//LCFC Todo for S770-13
|
|
UINT16 Count = 0;
|
|
UINT16 OemSsidTableSize = 0;
|
|
SSID_TABLE_STRU *OemSsidTable = NULL;
|
|
|
|
OemSsidTableSize = sizeof(S77013_SsidTable)/sizeof(SSID_TABLE_STRU);
|
|
OemSsidTable = S77013_SsidTable;
|
|
for (Count = 0; Count < OemSsidTableSize; Count++) {
|
|
if ((Dev == OemSsidTable[Count].Dev) && (Func == OemSsidTable[Count].Fun)) {
|
|
*SsidSvid = OemSsidTable[Count].SsidSvid;
|
|
|
|
}
|
|
}
|
|
return EFI_MEDIA_CHANGED;
|
|
//[-end-210925-TAMT000014-add]//
|
|
#endif
|
|
//[-end-210914-DABING0006-modify]//
|
|
|
|
//[-start-210723-QINGLIN0001-add]//
|
|
//[-start-211015-QINGLIN0100-modify]//
|
|
//[-start-211025-QINGLIN0103-modify]//
|
|
#if defined(S570_SUPPORT)
|
|
EFI_STATUS Status;
|
|
SA_SETUP SaSetup;
|
|
UINTN VariableSize;
|
|
UINT8 UmaAndDisType;
|
|
|
|
Status = EFI_UNSUPPORTED;
|
|
|
|
if ((DeviceId == INTEL_VGA_DID_46A0) || (DeviceId == INTEL_VGA_DID_46A6)) { //U28 CPU only have UMA SKU
|
|
*SsidSvid = INTEL_IGPU_UMA;
|
|
return EFI_MEDIA_CHANGED;
|
|
}
|
|
//[-start-220413-JEPLIUT220-modify]// Add I5s I3s CPU DCL
|
|
// if((VendorId == NVIDIA_VID) || (DeviceId == INTEL_VGA_DID_46A8)) {
|
|
if ((VendorId == NVIDIA_VID) || (DeviceId == INTEL_VGA_DID_46A8) || (DeviceId == INTEL_VGA_DID_4626) || (DeviceId == INTEL_VGA_DID_4628) || (DeviceId == INTEL_VGA_DID_46B3)) {
|
|
//[-start-220413-JEPLIUT220-modify]//
|
|
OemSvcLfcGetBoardID (GPU_ID, &UmaAndDisType);
|
|
|
|
VariableSize = sizeof (SA_SETUP);
|
|
//
|
|
// Get setup variable
|
|
//
|
|
Status = gRT->GetVariable (
|
|
L"SaSetup",
|
|
&gSaSetupVariableGuid,
|
|
NULL,
|
|
&VariableSize,
|
|
&SaSetup
|
|
);
|
|
if ((UmaAndDisType != GPU_ID_UMA_ONLY) && (SaSetup.PrimaryDisplay == 4)) { //DIS SKU and switchable config
|
|
LfcGetSSIDbyGraphicDeviceId (SsidSvid);
|
|
} else {
|
|
*SsidSvid = INTEL_IGPU_UMA;
|
|
}
|
|
|
|
Status = EFI_MEDIA_CHANGED;
|
|
|
|
if(VendorId == NVIDIA_VID) {
|
|
Status = ProgramSsidSvid0xFFFF10DE(Bus, Dev, Func, SsidSvid);
|
|
}
|
|
}
|
|
|
|
return Status;
|
|
#endif
|
|
//[-end-211025-QINGLIN0103-modify]//
|
|
//[-end-211015-QINGLIN0100-modify]//
|
|
//[-end-210723-QINGLIN0001-add]//
|
|
|
|
//[-start-210804-QINGLIN0008-add]//
|
|
#if defined(S370_SUPPORT)
|
|
EFI_STATUS Status;
|
|
UINT8 UmaAndDisType;
|
|
|
|
Status = EFI_UNSUPPORTED;
|
|
//[-start-211019-Xinwei003-Modify]//
|
|
//[-start-220217-QINGLIN0159-modify]//
|
|
if(VendorId == INTEL_VID) {
|
|
//[-start-220125-QINGLIN0152-modify]//
|
|
if ((DeviceId == INTEL_VGA_DID_46B3) || (DeviceId == INTEL_VGA_DID_46A8) || (DeviceId == INTEL_VGA_DID_4628) || (DeviceId == INTEL_DG2_SKU6_DID)) {
|
|
//[-end-220125-QINGLIN0152-modify]//
|
|
OemSvcLfcGetBoardID (GPU_ID, &UmaAndDisType);
|
|
if (GPU_ID_UMA_ONLY == UmaAndDisType) { //UMA
|
|
*SsidSvid = INTEL_VGA_UMA_SSID;
|
|
Status = EFI_MEDIA_CHANGED;
|
|
} else { //DIS
|
|
*SsidSvid = INTEL_VGA_DIS_SSID;
|
|
Status = EFI_MEDIA_CHANGED;
|
|
}
|
|
}
|
|
}
|
|
//[-end-220217-QINGLIN0159-modify]//
|
|
//[-end-211019-Xinwei003-Modify]//
|
|
|
|
//[-start-211110-QINGLIN0111-add]//
|
|
#if defined(BAYHUB_CARD_READER_SUPPORT)
|
|
if ((VendorId == BayHub_Card_Reader_VID) && (DeviceId == BayHub_Card_Reader_DID)) {
|
|
Status = CheckAndProgramBayHubCardReader (VendorId, DeviceId, Bus, Dev, Func);
|
|
}
|
|
#endif
|
|
|
|
#if defined(GENESYS_LOGIC_CARD_READER_SUPPORT)
|
|
if ((VendorId == GenesysLogic_Card_Reader_VID) && (DeviceId == GenesysLogic_Card_Reader_DID)) {
|
|
Status = CheckAndProgramGenesysLogicCardReader (VendorId, DeviceId, Bus, Dev, Func);
|
|
}
|
|
#endif
|
|
//[-end-211110-QINGLIN0111-add]//
|
|
|
|
return Status;
|
|
#endif
|
|
//[-end-210804-QINGLIN0008-add]//
|
|
|
|
|
|
//return Status;
|
|
//[-end-210610-Dongxu0001-Modify]
|
|
//[-end-210623-Dongxu0003-Modify]
|
|
}
|