From b7c51c9cf4864df6aabb99a1ae843becd577237c Mon Sep 17 00:00:00 2001 From: raywu Date: Fri, 15 Jun 2018 00:00:50 +0800 Subject: init. 1AQQW051 --- Board/EM/EcPs2Kbd/EcPs2Kbd.c | 280 +++++++++++++++++++++++++++++++++++++++++ Board/EM/EcPs2Kbd/EcPs2Kbd.chm | Bin 0 -> 24781 bytes Board/EM/EcPs2Kbd/EcPs2Kbd.cif | 13 ++ Board/EM/EcPs2Kbd/EcPs2Kbd.dxs | 55 ++++++++ Board/EM/EcPs2Kbd/EcPs2Kbd.h | 83 ++++++++++++ Board/EM/EcPs2Kbd/EcPs2Kbd.mak | 53 ++++++++ Board/EM/EcPs2Kbd/EcPs2Kbd.sdl | 41 ++++++ 7 files changed, 525 insertions(+) create mode 100644 Board/EM/EcPs2Kbd/EcPs2Kbd.c create mode 100644 Board/EM/EcPs2Kbd/EcPs2Kbd.chm create mode 100644 Board/EM/EcPs2Kbd/EcPs2Kbd.cif create mode 100644 Board/EM/EcPs2Kbd/EcPs2Kbd.dxs create mode 100644 Board/EM/EcPs2Kbd/EcPs2Kbd.h create mode 100644 Board/EM/EcPs2Kbd/EcPs2Kbd.mak create mode 100644 Board/EM/EcPs2Kbd/EcPs2Kbd.sdl (limited to 'Board/EM/EcPs2Kbd') diff --git a/Board/EM/EcPs2Kbd/EcPs2Kbd.c b/Board/EM/EcPs2Kbd/EcPs2Kbd.c new file mode 100644 index 0000000..daab843 --- /dev/null +++ b/Board/EM/EcPs2Kbd/EcPs2Kbd.c @@ -0,0 +1,280 @@ +//************************************************************************* +//************************************************************************* +//** ** +//** (C)Copyright 1985-2010, American Megatrends, Inc. ** +//** ** +//** All Rights Reserved. ** +//** ** +//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** +//** ** +//** Phone: (770)-246-8600 ** +//** ** +//************************************************************************* +//************************************************************************* +//************************************************************************* +// +// $Header: /Alaska/SOURCE/Modules/EcPs2Kbd/EcPs2Kbd.c 3 6/29/10 3:01p Stacyh $ +// +// $Revision: 3 $ +// +// $Date: 6/29/10 3:01p $ +// +//***************************************************************************** +// Revision History +// ---------------- +// $Log: /Alaska/SOURCE/Modules/EcPs2Kbd/EcPs2Kbd.c $ +// +// 3 6/29/10 3:01p Stacyh +// Added fix for EIP# 39388: SCT Execution test +// failed-4.6.3.5_VeB_0ABUC_004 +// +// 2 6/03/08 10:07a Stacyh +// Added code to install a device path for PS2 Mouse. +// Added code to create/update the SIO_DEV_STATUS EFI variable +// +// 1 5/30/08 4:23p Stacyh +// +// +//***************************************************************************** + + +// +//---------------------------------------------------------------------------- +// +// Name: EcPs2Kbd.C +// +// Description: This file contains code necessary to install the EC PS2 devices +// for EFI, ACPI and DOS. +// +// Notes: +// +//---------------------------------------------------------------------------- +// +#include "token.h" +#include "EcPs2Kbd.h" + +static EFI_GUID gSioDevStatusVarGuid = SIO_DEV_STATUS_VAR_GUID; + +static PS2_KBD_DEVICE_PATH mEcPs2KbdDevicePath[1][1] = { + { + ACPI_DEVICE_PATH, + ACPI_DP, + (UINT8) (sizeof (ACPI_HID_DEVICE_PATH)), + (UINT8) ((sizeof (ACPI_HID_DEVICE_PATH)) >> 8), + EISA_PNP_ID(0x303), + 0, + END_DEVICE_PATH_TYPE, + END_ENTIRE_DEVICE_PATH_SUBTYPE, + END_DEVICE_PATH_LENGTH, + 0 + } +}; + +static PS2_KBD_DEVICE_PATH mEcPs2MsDevicePath[1][1] = { + { + ACPI_DEVICE_PATH, + ACPI_DP, + (UINT8) (sizeof (ACPI_HID_DEVICE_PATH)), + (UINT8) ((sizeof (ACPI_HID_DEVICE_PATH)) >> 8), + EISA_PNP_ID(0xF03), + 0, + END_DEVICE_PATH_TYPE, + END_ENTIRE_DEVICE_PATH_SUBTYPE, + END_DEVICE_PATH_LENGTH, + 0 + } +}; + +// +//---------------------------------------------------------------------------- +// Procedure: ConnectDevicePath +// +// Description: This function connects the EFI device to its parent device. +// +// Input: pPath - Pointer to an EFI device path. +// +// Output: VOID +// +//---------------------------------------------------------------------------- +// + +VOID ConnectDevicePath ( + IN EFI_DEVICE_PATH_PROTOCOL *pPath) +{ + EFI_HANDLE Handle; + EFI_STATUS Status; + + while (TRUE) + { + EFI_DEVICE_PATH_PROTOCOL *pLastPath = NULL; + EFI_DEVICE_PATH_PROTOCOL *pFirstNode = pPath; + + if (isEndNode(pPath)) + { + if (pPath->SubType == END_ENTIRE_SUBTYPE) break; + pPath++; + continue; + } + + while (TRUE) { + EFI_DEVICE_PATH_PROTOCOL *Dp; + UINT8 SubType; + + pPath = pFirstNode; + + // LocateDevicePath can not work with multi-instance device paths. + // Prepare single instance device path and call LocateDevicePath. + + Dp = DPGetEndNode(pPath); + SubType = Dp->SubType; + Dp->SubType = END_ENTIRE_SUBTYPE; + Status = pBS->LocateDevicePath(&gEfiDevicePathProtocolGuid, \ + &pPath, &Handle); + Dp->SubType = SubType; + if (EFI_ERROR(Status)) break; + + if (isEndNode(pPath)) + { + // Last time let's do it recursively. + + pBS->ConnectController(Handle, NULL, NULL, TRUE); + break; + } + if (pPath == pLastPath) break; + pLastPath = pPath; + if (EFI_ERROR(pBS->ConnectController(Handle, NULL, pPath, FALSE))) + break; + } + + while (!isEndNode(pPath)) + pPath = NEXT_NODE(pPath); + } +} + + +// +//---------------------------------------------------------------------------- +// Procedure: EcPs2KbdEntry +// +// Description: This function installs the Device Path for the EC Ps2. +// +// Input: ImageHandle Image handle +// SystemTable Pointer to the system table +// +// Output: EFI_STATUS Returned from PCI read call +// +//---------------------------------------------------------------------------- +// + +EFI_STATUS EcPs2KbdEntry ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable) +{ + EFI_STATUS Status; + EFI_DEVICE_PATH_PROTOCOL *KbTmpDp = NULL; + EFI_DEVICE_PATH_PROTOCOL *MsTmpDp = NULL; + ACPI_HID_DEVICE_PATH RbDp; + PCI_DEVICE_PATH PciDp; + PS2KBD_DEV *PrivateData; + SIO_DEV_STATUS SioDevStatusVar; + UINTN SioDevStatusVarSize = sizeof(SIO_DEV_STATUS); + UINT32 SioDevStatusVarAttributes = 0; + + InitAmiLib(ImageHandle,SystemTable); + + // Get root bridge device path + RbDp.Header.Type = ACPI_DEVICE_PATH; + RbDp.Header.SubType = ACPI_DP; + SET_NODE_LENGTH(&RbDp.Header, ACPI_DEVICE_PATH_LENGTH); + RbDp.HID = EISA_PNP_ID(0x0A03); + RbDp.UID = 0; + KbTmpDp = DPAddNode(KbTmpDp, &RbDp.Header); + MsTmpDp = DPAddNode(MsTmpDp, &RbDp.Header); + ConnectDevicePath(KbTmpDp); + ConnectDevicePath(MsTmpDp); + + // Get PCI device path + PciDp.Header.SubType = HW_PCI_DP; + PciDp.Header.Type = HARDWARE_DEVICE_PATH; + SET_NODE_LENGTH(&PciDp.Header, HW_PCI_DEVICE_PATH_LENGTH); + PciDp.Function = SB_FUN_NUMBER; + PciDp.Device = SB_DEV_NUMBER; + KbTmpDp = DPAddNode(KbTmpDp, &PciDp.Header); + MsTmpDp = DPAddNode(MsTmpDp, &PciDp.Header); + ConnectDevicePath(KbTmpDp); + ConnectDevicePath(MsTmpDp); + + + // Install PS2 Keyboard Device Path + Status = pBS->AllocatePool (EfiBootServicesData, sizeof (PS2KBD_DEV), \ + &PrivateData); + ASSERT (!EFI_ERROR (Status)); + + KbTmpDp = DPAddNode(KbTmpDp, (EFI_DEVICE_PATH_PROTOCOL *) \ + &mEcPs2KbdDevicePath [0][0]); + ConnectDevicePath(KbTmpDp); + PrivateData->DevicePath = KbTmpDp; + PrivateData->Handle = NULL; + + Status = pBS->InstallProtocolInterface (&PrivateData->Handle, \ + &gEfiDevicePathProtocolGuid, EFI_NATIVE_INTERFACE, \ + PrivateData->DevicePath); + + if (EFI_ERROR (Status)) { + pBS->FreePool (PrivateData); + return EFI_DEVICE_ERROR; + } + + // Install PS2 Mouse Device Path + Status = pBS->AllocatePool (EfiBootServicesData, sizeof (PS2KBD_DEV), \ + &PrivateData); + ASSERT (!EFI_ERROR (Status)); + + MsTmpDp = DPAddNode(MsTmpDp, (EFI_DEVICE_PATH_PROTOCOL *) \ + &mEcPs2MsDevicePath [0][0]); + ConnectDevicePath(MsTmpDp); + PrivateData->DevicePath = MsTmpDp; + PrivateData->Handle = NULL; + + Status = pBS->InstallProtocolInterface (&PrivateData->Handle, \ + &gEfiDevicePathProtocolGuid, EFI_NATIVE_INTERFACE, \ + PrivateData->DevicePath); + + if (EFI_ERROR (Status)) { + pBS->FreePool (PrivateData); + return EFI_DEVICE_ERROR; + } + + // Create/Update SIO_DEV_STATUS EFI variable + Status = pRS->GetVariable(SIO_DEV_STATUS_VAR_NAME, &gSioDevStatusVarGuid, + &SioDevStatusVarAttributes, &SioDevStatusVarSize, + &SioDevStatusVar.DEV_STATUS); + + if (EFI_ERROR(Status)) { + SioDevStatusVar.DEV_STATUS = 0; + SioDevStatusVarAttributes = EFI_VARIABLE_BOOTSERVICE_ACCESS; + } + + SioDevStatusVar.Key60_64 = 1; + SioDevStatusVar.Ps2Mouse = 1; + + Status = pRS->SetVariable(SIO_DEV_STATUS_VAR_NAME, &gSioDevStatusVarGuid, + SioDevStatusVarAttributes, SioDevStatusVarSize, + &SioDevStatusVar); + + return Status; +} + +//************************************************************************* +//************************************************************************* +//** ** +//** (C)Copyright 1985-2010, American Megatrends, Inc. ** +//** ** +//** All Rights Reserved. ** +//** ** +//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** +//** ** +//** Phone: (770)-246-8600 ** +//** ** +//************************************************************************* +//************************************************************************* diff --git a/Board/EM/EcPs2Kbd/EcPs2Kbd.chm b/Board/EM/EcPs2Kbd/EcPs2Kbd.chm new file mode 100644 index 0000000..907d4c5 Binary files /dev/null and b/Board/EM/EcPs2Kbd/EcPs2Kbd.chm differ diff --git a/Board/EM/EcPs2Kbd/EcPs2Kbd.cif b/Board/EM/EcPs2Kbd/EcPs2Kbd.cif new file mode 100644 index 0000000..c38168b --- /dev/null +++ b/Board/EM/EcPs2Kbd/EcPs2Kbd.cif @@ -0,0 +1,13 @@ + + name = "EcPs2Kbd" + category = eModule + LocalRoot = "Board\em\EcPs2Kbd" + RefName = "EcPs2Kbd" +[files] +"EcPs2Kbd.sdl" +"EcPs2Kbd.c" +"EcPs2Kbd.mak" +"EcPs2Kbd.h" +"EcPs2Kbd.dxs" +"EcPs2Kbd.chm" + diff --git a/Board/EM/EcPs2Kbd/EcPs2Kbd.dxs b/Board/EM/EcPs2Kbd/EcPs2Kbd.dxs new file mode 100644 index 0000000..e24542c --- /dev/null +++ b/Board/EM/EcPs2Kbd/EcPs2Kbd.dxs @@ -0,0 +1,55 @@ +//********************************************************************** +//********************************************************************** +//** ** +//** (C)Copyright 1985-2008, American Megatrends, Inc. ** +//** ** +//** All Rights Reserved. ** +//** ** +//** 6145-F Northbelt Pkwy, Norcross, GA 30071 ** +//** ** +//** Phone: (770)-246-8600 ** +//** ** +//********************************************************************** +//********************************************************************** +//********************************************************************** +// $Header: /Alaska/SOURCE/Modules/EcPs2Kbd/EcPs2Kbd.dxs 2 5/30/08 4:26p Stacyh $ +// +// $Revision: 2 $ +// +// $Date: 5/30/08 4:26p $ +// +//***************************************************************************** +// Revision History +// ---------------- +// $Log: /Alaska/SOURCE/Modules/EcPs2Kbd/EcPs2Kbd.dxs $ +// +// 2 5/30/08 4:26p Stacyh +// +// +//********************************************************************** +// +// +// Name: EcPs2Kbd.dxs +// +// Description: Dependency expression file for EcPs2Kbd DXE driver +// +// +//********************************************************************** + +DEPENDENCY_START + TRUE +DEPENDENCY_END + +//********************************************************************** +//********************************************************************** +//** ** +//** (C)Copyright 1985-2008, American Megatrends, Inc. ** +//** ** +//** All Rights Reserved. ** +//** ** +//** 6145-F Northbelt Pkwy, Norcross, GA 30071 ** +//** ** +//** Phone: (770)-246-8600 ** +//** ** +//********************************************************************** +//********************************************************************** diff --git a/Board/EM/EcPs2Kbd/EcPs2Kbd.h b/Board/EM/EcPs2Kbd/EcPs2Kbd.h new file mode 100644 index 0000000..50736e8 --- /dev/null +++ b/Board/EM/EcPs2Kbd/EcPs2Kbd.h @@ -0,0 +1,83 @@ +//********************************************************************** +//********************************************************************** +//** ** +//** (C)Copyright 1985-2008, American Megatrends, Inc. ** +//** ** +//** All Rights Reserved. ** +//** ** +//** 6145-F Northbelt Pkwy, Norcross, GA 30071 ** +//** ** +//** Phone: (770)-246-8600 ** +//** ** +//********************************************************************** +//********************************************************************** +//********************************************************************** +// +// $Header: /Alaska/SOURCE/Modules/EcPs2Kbd/EcPs2Kbd.h 3 7/18/11 5:58p Stacyh $ +// +// $Revision: 3 $ +// +// $Date: 7/18/11 5:58p $ +// +//***************************************************************************** +// Revision History +// ---------------- +// $Log: /Alaska/SOURCE/Modules/EcPs2Kbd/EcPs2Kbd.h $ +// +// 3 7/18/11 5:58p Stacyh +// [TAG] EIP65200 +// [Category] Improvement +// [Description] Port EcPs2Kbd to be compliant with PI 1.2, and UEFI +// 2.3.1 specifications. +// [Files] EcPs2Kbd.h +// +// 2 6/03/08 10:05a Stacyh +// +// 1 5/30/08 4:23p Stacyh +// +// +//***************************************************************************** + + +// +//---------------------------------------------------------------------------- +// +// Name: EcPs2Kbd.h +// +// Description: defines needed for EcPs2Kbd. +// +// Notes: +// +//---------------------------------------------------------------------------- +// +#include +#include +#include + +#define END_DEVICE_PATH_TYPE 0x7f +#define END_ENTIRE_DEVICE_PATH_SUBTYPE 0xff + +typedef struct { + ACPI_HID_DEVICE_PATH AcpiDevicePath; + EFI_DEVICE_PATH_PROTOCOL EndDevicePath; +} PS2_KBD_DEVICE_PATH; + + +typedef struct _PS2KBD_DEV { + EFI_DEVICE_PATH_PROTOCOL *DevicePath; + EFI_HANDLE Handle; +} PS2KBD_DEV; + +//********************************************************************** +//********************************************************************** +//** ** +//** (C)Copyright 1985-2008, American Megatrends, Inc. ** +//** ** +//** All Rights Reserved. ** +//** ** +//** 6145-F Northbelt Pkwy, Norcross, GA 30071 ** +//** ** +//** Phone: (770)-246-8600 ** +//** ** +//********************************************************************** +//********************************************************************** diff --git a/Board/EM/EcPs2Kbd/EcPs2Kbd.mak b/Board/EM/EcPs2Kbd/EcPs2Kbd.mak new file mode 100644 index 0000000..d980b9e --- /dev/null +++ b/Board/EM/EcPs2Kbd/EcPs2Kbd.mak @@ -0,0 +1,53 @@ +#********************************************************************** +#********************************************************************** +#** ** +#** (C)Copyright 1985-2008, American Megatrends, Inc. ** +#** ** +#** All Rights Reserved. ** +#** ** +#** 6145-F Northbelt Pkwy, Norcross, GA 30071 ** +#** ** +#** Phone: (770)-246-8600 ** +#** ** +#********************************************************************** +#********************************************************************** + +#********************************************************************** +# +# +# Name: +# +# Description: +# +# +#********************************************************************** +{$(ECPS2KBD_DIR)}.c{$(BUILD_DIR)}.obj:: + $(CC) $(CFLAGS) /Fo$(BUILD_DIR)\\ $< + +all : EcPs2Kbd + +EcPs2Kbd : $(BUILD_DIR)\EcPs2Kbd.mak EcPs2KbdBin + +$(BUILD_DIR)\EcPs2Kbd.mak : $(ECPS2KBD_DIR)\$(@B).cif $(ECPS2KBD_DIR)\$(@B).mak $(BUILD_RULES) + $(CIF2MAK) $(ECPS2KBD_DIR)\$(@B).cif $(CIF2MAK_DEFAULTS) + +EcPs2KbdBin : $(AMIDXELIB) + $(MAKE) /$(MAKEFLAGS) $(BUILD_DEFAULTS)\ + /f $(BUILD_DIR)\EcPs2Kbd.mak all\ + GUID=2F72309E-D5B0-4a9d-84A9-1AB38C698F78\ + ENTRY_POINT=EcPs2KbdEntry\ + TYPE=BS_DRIVER \ + COMPRESS=1 +#********************************************************************** +#********************************************************************** +#** ** +#** (C)Copyright 1985-2008, American Megatrends, Inc. ** +#** ** +#** All Rights Reserved. ** +#** ** +#** 6145-F Northbelt Pkwy, Norcross, GA 30071 ** +#** ** +#** Phone: (770)-246-8600 ** +#** ** +#********************************************************************** +#********************************************************************** diff --git a/Board/EM/EcPs2Kbd/EcPs2Kbd.sdl b/Board/EM/EcPs2Kbd/EcPs2Kbd.sdl new file mode 100644 index 0000000..46d09b6 --- /dev/null +++ b/Board/EM/EcPs2Kbd/EcPs2Kbd.sdl @@ -0,0 +1,41 @@ +TOKEN + Name = "EcPs2Kbd_SUPPORT" + Value = "1" + TokenType = Boolean + TargetEQU = Yes + TargetMAK = Yes + TargetH = Yes + Master = Yes +End + +TOKEN + Name = "SB_DEV_NUMBER" + Value = "0x1f" + Help = "South Bridge (LPC Bridge) PCI Device Number" + TokenType = Integer + TargetH = Yes +End + +TOKEN + Name = "SB_FUN_NUMBER" + Value = "0x00" + Help = "South Bridge (LPC Bridge) PCI Function Number" + TokenType = Integer + TargetH = Yes +End + +PATH + Name = "ECPS2KBD_DIR" +End + +MODULE + Help = "Includes EcPs2Kbd.MAK into BUILD PROCESS" + File = "EcPs2Kbd.mak" +End + +ELINK + Name = "$(BUILD_DIR)\EcPs2Kbd.ffs" + Parent = "FV_MAIN" + InvokeOrder = AfterParent +End + -- cgit v1.2.3