summaryrefslogtreecommitdiff
path: root/Board/EM/Thunderbolt/TbtDxe/TbtDxeLib.c
diff options
context:
space:
mode:
Diffstat (limited to 'Board/EM/Thunderbolt/TbtDxe/TbtDxeLib.c')
-rw-r--r--Board/EM/Thunderbolt/TbtDxe/TbtDxeLib.c209
1 files changed, 209 insertions, 0 deletions
diff --git a/Board/EM/Thunderbolt/TbtDxe/TbtDxeLib.c b/Board/EM/Thunderbolt/TbtDxe/TbtDxeLib.c
new file mode 100644
index 0000000..45f6768
--- /dev/null
+++ b/Board/EM/Thunderbolt/TbtDxe/TbtDxeLib.c
@@ -0,0 +1,209 @@
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2012, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************
+//*************************************************************************
+// $Header: /Alaska/SOURCE/Modules/Thunderbolt/TbtDxe/TbtDxeLib.c 4 5/16/14 6:02p Barretlin $
+//
+// $Revision: 4 $
+//
+// $Date: 5/16/14 6:02p $
+//*************************************************************************
+// Revision History
+// ----------------
+//
+//*************************************************************************
+//---------------------------------------------------------------------------
+// Include(s)
+//---------------------------------------------------------------------------
+
+#include <Efi.h>
+#include <Token.h>
+#include <Setup.h>
+#include <AmiPeiLib.h>
+#include <AmiDxeLib.h>
+#include <AmiCspLib.h>
+
+// Produced Protocols
+
+// Consumed Protocols
+
+//---------------------------------------------------------------------------
+// Constant, Macro and Type Definition(s)
+//---------------------------------------------------------------------------
+// Constant Definition(s)
+
+// Macro Definition(s)
+
+// Type Definition(s)
+
+// Function Prototype(s)
+
+//---------------------------------------------------------------------------
+// Variable and External Declaration(s)
+//---------------------------------------------------------------------------
+// Variable Declaration(s)
+
+// GUID Definition(s)
+
+// Protocol Definition(s)
+
+// External Declaration(s)
+
+// Function Definition(s)
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+//
+// Procedure: TbtProtectedPciDevice
+//
+// Description: This function is called by PCI Bus Driver before configuring
+// or disabling any PCI device. This function should examine the
+// Vendor/Device ID or PCI Bus, Device and Function numbers to
+// make sure it is not a south bridge device or any other device
+// which should no be configured by PCI Bus Driver.
+//
+// Input: *PciDevice - Pointer to PCI Device Info structure.
+//
+// Output: EFI_STATUS
+// EFI_SUCCESS - SKIP this device, do not touch
+// PCI Command register.
+// EFI_UNSUPPORTED - DON'T SKIP this device do complete
+// enumeration as usual.
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+EFI_STATUS TbtProtectedPciDevice (
+ IN PCI_DEV_INFO *PciDevice )
+{
+ AMI_TBT_PLATFORM_POLICY_PROTOCOL *gAmiTbtPlatformPolicy = NULL;
+ EFI_GUID gOemTbtProtocolGuid = AMI_TBT_PLATFROM_POLICY_PROTOCOL_GUID;
+ EFI_STATUS Status;
+ UINT8 TBus = TBT_UP_PORT_BUS;
+ UINT8 TDev = TBT_UP_PORT_DEV;
+ UINT8 TFun = TBT_UP_PORT_FUNC;
+
+ TRACE((-1, "\nTbtDxe: TbtProtectedPciDevice Entry !!!\n"));
+ Status = pBS->LocateProtocol( &gOemTbtProtocolGuid, \
+ NULL, \
+ &gAmiTbtPlatformPolicy);
+ if (EFI_ERROR(Status) || (!(gAmiTbtPlatformPolicy->TbtEnable))){
+ return EFI_UNSUPPORTED;
+ }
+
+ if ((!EFI_ERROR(Status)) && (gAmiTbtPlatformPolicy->TbtAICSupport == 1)){
+ if (gAmiTbtPlatformPolicy->Dev == 0x1c){
+ TFun = gAmiTbtPlatformPolicy->Fun;
+ } else {
+ TBus = gAmiTbtPlatformPolicy->Bus;
+ TDev = gAmiTbtPlatformPolicy->Dev;
+ TFun = gAmiTbtPlatformPolicy->Fun;
+ }
+ }
+ TRACE((-1, "TbtDxe: PciDevice @B:%x|D:%x|F:%x !!!\n", PciDevice->Address.Addr.Bus, PciDevice->Address.Addr.Device, PciDevice->Address.Addr.Function));
+#if defined TBT_PCIBUS_SKIP && TBT_PCIBUS_SKIP == 1
+ while ((PciDevice->Type != tPciRootBrg) && (PciDevice->ParentBrg != NULL)) {
+ PciDevice = PciDevice->ParentBrg;
+ if (PciDevice->Address.Addr.Bus != TBus) continue;
+ if (PciDevice->Address.Addr.Device != TDev) continue;
+ if (PciDevice->Address.Addr.Function != TFun) continue;
+
+ TRACE((-1, "TbtDxe: Skip thunderbolt device before PCI BUS assign resource.\n"));
+ return EFI_SUCCESS;
+ }
+#endif
+
+ return EFI_UNSUPPORTED;
+}
+
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+//
+// Procedure: TbtDxeInvokeSmiHandler
+//
+// Description: Invoke SW SMI befor boot for reaource adjust.
+//
+// Input: None
+//
+// Output: None
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+VOID TbtDxeInvokeSmiHandler(){
+ AMI_TBT_PLATFORM_POLICY_PROTOCOL *gAmiTbtPlatformPolicy = NULL;
+ EFI_GUID gOemTbtProtocolGuid = AMI_TBT_PLATFROM_POLICY_PROTOCOL_GUID;
+ EFI_STATUS Status;
+
+ TRACE((-1, "TbtDxe: TbtDxeInvokeSmiHandler\n"));
+ Status = pBS->LocateProtocol( &gOemTbtProtocolGuid, \
+ NULL, \
+ &gAmiTbtPlatformPolicy);
+ if ((!EFI_ERROR(Status)) && (gAmiTbtPlatformPolicy->TbtEnable)){
+ IoWrite8 (SW_SMI_IO_ADDRESS, TBT_SWSMI_VALUE); //trigger SwSMI for Thunderbolt
+ }
+}
+
+#if defined ULT_SUPPORT && ULT_SUPPORT == 1
+//<AMI_PHDR_START>
+//----------------------------------------------------------------------------
+//
+// Procedure: IsULTPchSeries
+//
+// Description: This function is to get PCH series is ULT series or not
+//
+// Input: None
+//
+// Output: None
+//----------------------------------------------------------------------------
+//<AMI_PHDR_END>
+BOOLEAN
+IsULTPchSeries( VOID ){
+ UINT16 PchDeviceId;
+
+ PchDeviceId = MmPciRead16 (0x00, LPC_DEVICE, LPC_FUNC, 0x02);
+ switch(PchDeviceId){
+ case 0x9C40: ///< LynxPoint LP Unfuse
+ case 0x9C41: ///< LynxPoint LP Mobile Super SKU
+ case 0x9C42: ///< LynxPoint LP Mobile TBD SKU
+ case 0x9C43: ///< LynxPoint LP Mobile Premium SKU
+ case 0x9C44: ///< LynxPoint LP Mobile TBD SKU
+ case 0x9C45: ///< LynxPoint LP Mobile Mainstream SKU
+ case 0x9C46: ///< LynxPoint LP Mobile TBD SKU
+ case 0x9C47: ///< LynxPoint LP Mobile Value SKU
+ case 0x9CC1: ///< WildcatPoint LP Mobile Super SKU HSW
+ case 0x9CC2: ///< WildcatPoint LP Mobile Super SKU BDW U
+ case 0x9CC3: ///< WildcatPoint LP Mobile Premium SKU BDW U
+ case 0x9CC4: ///< WildcatPoint LP Mobile TBD SKU
+ case 0x9CC5: ///< WildcatPoint LP Mobile Base SKU BDW U
+ case 0x9CC6: ///< WildcatPoint LP Mobile Super SKU BDW Y
+ case 0x9CC7: ///< WildcatPoint LP Mobile Premium SKU BDW Y
+ case 0x9CC8: ///< WildcatPoint LP Mobile TBD SKU
+ case 0x9CC9: ///< WildcatPoint LP Mobile Base SKU BDW Y
+ case 0x9CCA: ///< WildcatPoint LP Mobile TBD SKU
+ case 0x9CCB: ///< WildcatPoint LP Mobile Performance SKU
+ return TRUE;
+ }
+ return FALSE;
+}
+#endif
+
+//*************************************************************************
+//*************************************************************************
+//** **
+//** (C)Copyright 1985-2012, American Megatrends, Inc. **
+//** **
+//** All Rights Reserved. **
+//** **
+//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
+//** **
+//** Phone: (770)-246-8600 **
+//** **
+//*************************************************************************
+//*************************************************************************