Enhance PcAt IsaAcpi driver to support enable/disable separated functions per PCD settings.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11362 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
niruiyu 2011-03-10 07:33:42 +00:00
parent 5fbfa2d023
commit e8bce4b41c
5 changed files with 124 additions and 15 deletions

View File

@ -1,7 +1,7 @@
/** @file /** @file
ISA ACPI Protocol Implementation ISA ACPI Protocol Implementation
Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR> Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at which accompanies this distribution. The full text of the license may be found at
@ -20,6 +20,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
// //
// COM 1 UART Controller // COM 1 UART Controller
// //
GLOBAL_REMOVE_IF_UNREFERENCED
EFI_ISA_ACPI_RESOURCE mPcatIsaAcpiCom1DeviceResources[] = { EFI_ISA_ACPI_RESOURCE mPcatIsaAcpiCom1DeviceResources[] = {
{EfiIsaAcpiResourceIo, 0, 0x3f8, 0x3ff}, {EfiIsaAcpiResourceIo, 0, 0x3f8, 0x3ff},
{EfiIsaAcpiResourceInterrupt, 0, 4, 0}, {EfiIsaAcpiResourceInterrupt, 0, 4, 0},
@ -29,6 +30,7 @@ EFI_ISA_ACPI_RESOURCE mPcatIsaAcpiCom1DeviceResources[] = {
// //
// COM 2 UART Controller // COM 2 UART Controller
// //
GLOBAL_REMOVE_IF_UNREFERENCED
EFI_ISA_ACPI_RESOURCE mPcatIsaAcpiCom2DeviceResources[] = { EFI_ISA_ACPI_RESOURCE mPcatIsaAcpiCom2DeviceResources[] = {
{EfiIsaAcpiResourceIo, 0, 0x2f8, 0x2ff}, {EfiIsaAcpiResourceIo, 0, 0x2f8, 0x2ff},
{EfiIsaAcpiResourceInterrupt, 0, 3, 0}, {EfiIsaAcpiResourceInterrupt, 0, 3, 0},
@ -38,6 +40,7 @@ EFI_ISA_ACPI_RESOURCE mPcatIsaAcpiCom2DeviceResources[] = {
// //
// PS/2 Keyboard Controller // PS/2 Keyboard Controller
// //
GLOBAL_REMOVE_IF_UNREFERENCED
EFI_ISA_ACPI_RESOURCE mPcatIsaAcpiPs2KeyboardDeviceResources[] = { EFI_ISA_ACPI_RESOURCE mPcatIsaAcpiPs2KeyboardDeviceResources[] = {
{EfiIsaAcpiResourceIo, 0, 0x60, 0x64}, {EfiIsaAcpiResourceIo, 0, 0x60, 0x64},
{EfiIsaAcpiResourceInterrupt, 0, 1, 0}, {EfiIsaAcpiResourceInterrupt, 0, 1, 0},
@ -47,6 +50,7 @@ EFI_ISA_ACPI_RESOURCE mPcatIsaAcpiPs2KeyboardDeviceResources[] = {
// //
// PS/2 Mouse Controller // PS/2 Mouse Controller
// //
GLOBAL_REMOVE_IF_UNREFERENCED
EFI_ISA_ACPI_RESOURCE mPcatIsaAcpiPs2MouseDeviceResources[] = { EFI_ISA_ACPI_RESOURCE mPcatIsaAcpiPs2MouseDeviceResources[] = {
{EfiIsaAcpiResourceIo, 0, 0x60, 0x64}, {EfiIsaAcpiResourceIo, 0, 0x60, 0x64},
{EfiIsaAcpiResourceInterrupt, 0, 12, 0}, {EfiIsaAcpiResourceInterrupt, 0, 12, 0},
@ -56,6 +60,7 @@ EFI_ISA_ACPI_RESOURCE mPcatIsaAcpiPs2MouseDeviceResources[] = {
// //
// Floppy Disk Controller // Floppy Disk Controller
// //
GLOBAL_REMOVE_IF_UNREFERENCED
EFI_ISA_ACPI_RESOURCE mPcatIsaAcpiFloppyResources[] = { EFI_ISA_ACPI_RESOURCE mPcatIsaAcpiFloppyResources[] = {
{EfiIsaAcpiResourceIo, 0, 0x3f0, 0x3f7}, {EfiIsaAcpiResourceIo, 0, 0x3f0, 0x3f7},
{EfiIsaAcpiResourceInterrupt, 0, 6, 0}, {EfiIsaAcpiResourceInterrupt, 0, 6, 0},
@ -63,18 +68,77 @@ EFI_ISA_ACPI_RESOURCE mPcatIsaAcpiFloppyResources[] = {
{EfiIsaAcpiResourceEndOfList, 0, 0, 0} {EfiIsaAcpiResourceEndOfList, 0, 0, 0}
}; };
GLOBAL_REMOVE_IF_UNREFERENCED
EFI_ISA_ACPI_RESOURCE_LIST mPcatIsaAcpiCom1Device = {
{EISA_PNP_ID(0x501), 0}, mPcatIsaAcpiCom1DeviceResources
}; // COM 1 UART Controller
GLOBAL_REMOVE_IF_UNREFERENCED
EFI_ISA_ACPI_RESOURCE_LIST mPcatIsaAcpiCom2Device = {
{EISA_PNP_ID(0x501), 1}, mPcatIsaAcpiCom2DeviceResources
}; // COM 2 UART Controller
GLOBAL_REMOVE_IF_UNREFERENCED
EFI_ISA_ACPI_RESOURCE_LIST mPcatIsaAcpiPs2KeyboardDevice = {
{EISA_PNP_ID(0x303), 0}, mPcatIsaAcpiPs2KeyboardDeviceResources
}; // PS/2 Keyboard Controller
GLOBAL_REMOVE_IF_UNREFERENCED
EFI_ISA_ACPI_RESOURCE_LIST mPcatIsaAcpiPs2MouseDevice = {
{EISA_PNP_ID(0x303), 1}, mPcatIsaAcpiPs2MouseDeviceResources
}; // PS/2 Mouse Controller
GLOBAL_REMOVE_IF_UNREFERENCED
EFI_ISA_ACPI_RESOURCE_LIST mPcatIsaAcpiFloppyADevice = {
{EISA_PNP_ID(0x604), 0}, mPcatIsaAcpiFloppyResources
}; // Floppy Disk Controller A:
GLOBAL_REMOVE_IF_UNREFERENCED
EFI_ISA_ACPI_RESOURCE_LIST mPcatIsaAcpiFloppyBDevice = {
{EISA_PNP_ID(0x604), 1}, mPcatIsaAcpiFloppyResources
}; // Floppy Disk Controller B:
// //
// Table of ISA Controllers // Table of ISA Controllers
// //
EFI_ISA_ACPI_RESOURCE_LIST gPcatIsaAcpiDeviceList[] = { EFI_ISA_ACPI_RESOURCE_LIST gPcatIsaAcpiDeviceList[7] = {0};
{{EISA_PNP_ID(0x501), 0}, mPcatIsaAcpiCom1DeviceResources }, // COM 1 UART Controller
{{EISA_PNP_ID(0x501), 1}, mPcatIsaAcpiCom2DeviceResources }, // COM 2 UART Controller /**
{{EISA_PNP_ID(0x303), 0}, mPcatIsaAcpiPs2KeyboardDeviceResources }, // PS/2 Keyboard Controller Initialize gPcatIsaAcpiDeviceList.
{{EISA_PNP_ID(0x303), 1}, mPcatIsaAcpiPs2MouseDeviceResources }, // PS/2 Mouse Controller **/
{{EISA_PNP_ID(0x604), 0}, mPcatIsaAcpiFloppyResources }, // Floppy Disk Controller A: VOID
{{EISA_PNP_ID(0x604), 1}, mPcatIsaAcpiFloppyResources }, // Floppy Disk Controller B: InitializePcatIsaAcpiDeviceList (
{{0, 0}, NULL } // End if ISA Controllers VOID
}; )
{
UINTN Index;
Index = 0;
if (PcdGetBool (PcdIsaAcpiCom1Enable)) {
CopyMem (&gPcatIsaAcpiDeviceList[Index], &mPcatIsaAcpiCom1Device, sizeof(mPcatIsaAcpiCom1Device));
Index++;
}
if (PcdGetBool (PcdIsaAcpiCom2Enable)) {
CopyMem (&gPcatIsaAcpiDeviceList[Index], &mPcatIsaAcpiCom2Device, sizeof(mPcatIsaAcpiCom2Device));
Index++;
}
if (PcdGetBool (PcdIsaAcpiPs2KeyboardEnable)) {
CopyMem (&gPcatIsaAcpiDeviceList[Index], &mPcatIsaAcpiPs2KeyboardDevice, sizeof(mPcatIsaAcpiPs2KeyboardDevice));
Index++;
}
if (PcdGetBool (PcdIsaAcpiPs2MouseEnable)) {
CopyMem (&gPcatIsaAcpiDeviceList[Index], &mPcatIsaAcpiPs2MouseDevice, sizeof(mPcatIsaAcpiPs2MouseDevice));
Index++;
}
if (PcdGetBool (PcdIsaAcpiFloppyAEnable)) {
CopyMem (&gPcatIsaAcpiDeviceList[Index], &mPcatIsaAcpiFloppyADevice, sizeof(mPcatIsaAcpiFloppyADevice));
Index++;
}
if (PcdGetBool (PcdIsaAcpiFloppyBEnable)) {
CopyMem (&gPcatIsaAcpiDeviceList[Index], &mPcatIsaAcpiFloppyBDevice, sizeof(mPcatIsaAcpiFloppyBDevice));
Index++;
}
}
// //
// ISA ACPI Protocol Functions // ISA ACPI Protocol Functions

View File

@ -1,7 +1,7 @@
## @file ## @file
# Component description file for PCAT ISA ACPI driver # Component description file for PCAT ISA ACPI driver
# #
# Copyright (c) 2005 - 2010, Intel Corporation. All rights reserved.<BR> # Copyright (c) 2005 - 2011, Intel Corporation. All rights reserved.<BR>
# This program and the accompanying materials # This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License # are licensed and made available under the terms and conditions of the BSD License
# which accompanies this distribution. The full text of the license may be found at # which accompanies this distribution. The full text of the license may be found at
@ -25,11 +25,14 @@
[Packages] [Packages]
MdePkg/MdePkg.dec MdePkg/MdePkg.dec
IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec IntelFrameworkModulePkg/IntelFrameworkModulePkg.dec
PcAtChipsetPkg/PcAtChipsetPkg.dec
[LibraryClasses] [LibraryClasses]
UefiDriverEntryPoint UefiDriverEntryPoint
UefiBootServicesTableLib UefiBootServicesTableLib
UefiLib UefiLib
BaseMemoryLib
PcdLib
[Sources] [Sources]
PcatIsaAcpi.h PcatIsaAcpi.h
@ -40,3 +43,11 @@
[Protocols] [Protocols]
gEfiPciIoProtocolGuid gEfiPciIoProtocolGuid
gEfiIsaAcpiProtocolGuid gEfiIsaAcpiProtocolGuid
[Pcd]
gPcAtChipsetPkgTokenSpaceGuid.PcdIsaAcpiCom1Enable
gPcAtChipsetPkgTokenSpaceGuid.PcdIsaAcpiCom2Enable
gPcAtChipsetPkgTokenSpaceGuid.PcdIsaAcpiPs2KeyboardEnable
gPcAtChipsetPkgTokenSpaceGuid.PcdIsaAcpiPs2MouseEnable
gPcAtChipsetPkgTokenSpaceGuid.PcdIsaAcpiFloppyAEnable
gPcAtChipsetPkgTokenSpaceGuid.PcdIsaAcpiFloppyBEnable

View File

@ -1,7 +1,7 @@
/** @file /** @file
EFI PCAT ISA ACPI Driver for a Generic PC Platform EFI PCAT ISA ACPI Driver for a Generic PC Platform
Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR> Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at which accompanies this distribution. The full text of the license may be found at
@ -243,6 +243,11 @@ PcatIsaAcpiDriverBindingStart (
PcatIsaAcpiDev->Handle = Controller; PcatIsaAcpiDev->Handle = Controller;
PcatIsaAcpiDev->PciIo = PciIo; PcatIsaAcpiDev->PciIo = PciIo;
//
// Initialize PcatIsaAcpiDeviceList
//
InitializePcatIsaAcpiDeviceList ();
// //
// IsaAcpi interface // IsaAcpi interface
// //

View File

@ -1,7 +1,7 @@
/** @file /** @file
EFI PCAT ISA ACPI Driver for a Generic PC Platform EFI PCAT ISA ACPI Driver for a Generic PC Platform
Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR> Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at which accompanies this distribution. The full text of the license may be found at
@ -29,6 +29,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#include <Library/UefiLib.h> #include <Library/UefiLib.h>
#include <Library/UefiBootServicesTableLib.h> #include <Library/UefiBootServicesTableLib.h>
#include <Library/BaseMemoryLib.h>
#include <Library/PcdLib.h>
#include <Protocol/IsaAcpi.h> #include <Protocol/IsaAcpi.h>
// //
@ -261,4 +263,12 @@ IsaInterfaceInit (
IN EFI_ISA_ACPI_PROTOCOL *This IN EFI_ISA_ACPI_PROTOCOL *This
); );
/**
Initialize the ISA device list.
**/
VOID
InitializePcatIsaAcpiDeviceList (
VOID
);
#endif #endif

View File

@ -4,7 +4,7 @@
# This package is designed to public interfaces and implementation which follows # This package is designed to public interfaces and implementation which follows
# PcAt defacto standard. # PcAt defacto standard.
# #
# Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR> # Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>
# #
# This program and the accompanying materials # This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License # are licensed and made available under the terms and conditions of the BSD License
@ -45,6 +45,25 @@
## Pcd8259LegacyModeEdgeLevel defines the default edge level for legacy mode's interrrupt controller. ## Pcd8259LegacyModeEdgeLevel defines the default edge level for legacy mode's interrrupt controller.
gPcAtChipsetPkgTokenSpaceGuid.Pcd8259LegacyModeEdgeLevel|0x0000|UINT16|0x00000002 gPcAtChipsetPkgTokenSpaceGuid.Pcd8259LegacyModeEdgeLevel|0x0000|UINT16|0x00000002
[PcdsFixedAtBuild, PcdsDynamic, PcdsPatchableInModule]
## This PCD specifies whether we need enable IsaAcpiCom1 device.
gPcAtChipsetPkgTokenSpaceGuid.PcdIsaAcpiCom1Enable|TRUE|BOOLEAN|0x00000003
## This PCD specifies whether we need enable IsaAcpiCom2 device.
gPcAtChipsetPkgTokenSpaceGuid.PcdIsaAcpiCom2Enable|TRUE|BOOLEAN|0x00000004
## This PCD specifies whether we need enable IsaAcpiPs2Keyboard device.
gPcAtChipsetPkgTokenSpaceGuid.PcdIsaAcpiPs2KeyboardEnable|TRUE|BOOLEAN|0x00000005
## This PCD specifies whether we need enable IsaAcpiPs2Mouse device.
gPcAtChipsetPkgTokenSpaceGuid.PcdIsaAcpiPs2MouseEnable|TRUE|BOOLEAN|0x00000006
## This PCD specifies whether we need enable IsaAcpiFloppyA device.
gPcAtChipsetPkgTokenSpaceGuid.PcdIsaAcpiFloppyAEnable|TRUE|BOOLEAN|0x00000007
## This PCD specifies whether we need enable IsaAcpiFloppyB device.
gPcAtChipsetPkgTokenSpaceGuid.PcdIsaAcpiFloppyBEnable|TRUE|BOOLEAN|0x00000008
[Guids] [Guids]
gPcAtChipsetPkgTokenSpaceGuid = { 0x326ae723, 0xae32, 0x4589, { 0x98, 0xb8, 0xca, 0xc2, 0x3c, 0xdc, 0xc1, 0xb1 } } gPcAtChipsetPkgTokenSpaceGuid = { 0x326ae723, 0xae32, 0x4589, { 0x98, 0xb8, 0xca, 0xc2, 0x3c, 0xdc, 0xc1, 0xb1 } }