/** @file\r
EFI PCAT ISA ACPI Driver for a Generic PC Platform\r
\r
-Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>\r
-This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution. The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
@param ImageHandle Handle for driver image\r
@param SystemTable Point to EFI_SYSTEM_TABLE\r
\r
- @return Sucess or not for installing driver binding protocol\r
+ @return Success or not for installing driver binding protocol\r
**/\r
EFI_STATUS\r
EFIAPI\r
)\r
{\r
return EfiLibInstallDriverBindingComponentName2 (\r
- ImageHandle, \r
- SystemTable, \r
+ ImageHandle,\r
+ SystemTable,\r
&gPcatIsaAcpiDriverBinding,\r
ImageHandle,\r
&gPcatIsaAcpiComponentName,\r
/**\r
ControllerDriver Protocol Method\r
\r
- @param This Driver Binding protocol instance pointer. \r
+ @param This Driver Binding protocol instance pointer.\r
@param Controller Handle of device to test.\r
@param RemainingDevicePath Optional parameter use to pick a specific child\r
device to start.\r
\r
//\r
// Get PciIo protocol instance\r
- // \r
+ //\r
Status = gBS->OpenProtocol (\r
- Controller, \r
- &gEfiPciIoProtocolGuid, \r
+ Controller,\r
+ &gEfiPciIoProtocolGuid,\r
(VOID**)&PciIo,\r
This->DriverBindingHandle,\r
Controller,\r
PciIo,\r
EfiPciIoWidthUint32,\r
0,\r
- sizeof(Pci) / sizeof(UINT32), \r
+ sizeof(Pci) / sizeof(UINT32),\r
&Pci);\r
\r
if (!EFI_ERROR (Status)) {\r
//\r
if (Pci.Hdr.ClassCode[1] == PCI_CLASS_BRIDGE_ISA) {\r
Status = EFI_SUCCESS;\r
- } \r
+ }\r
\r
//\r
// See if this is an Intel PCI to ISA bridge in Positive Decode Mode\r
//\r
- if (Pci.Hdr.ClassCode[1] == PCI_CLASS_BRIDGE_ISA_PDECODE && \r
+ if (Pci.Hdr.ClassCode[1] == PCI_CLASS_BRIDGE_ISA_PDECODE &&\r
Pci.Hdr.VendorId == 0x8086 ) {\r
//\r
- // See if this is on Function #0 to avoid false positives on \r
- // PCI_CLASS_BRIDGE_OTHER that has the same value as \r
+ // See if this is on Function #0 to avoid false positives on\r
+ // PCI_CLASS_BRIDGE_OTHER that has the same value as\r
// PCI_CLASS_BRIDGE_ISA_PDECODE\r
//\r
Status = PciIo->GetLocation (\r
- PciIo, \r
- &SegmentNumber, \r
- &BusNumber, \r
- &DeviceNumber, \r
+ PciIo,\r
+ &SegmentNumber,\r
+ &BusNumber,\r
+ &DeviceNumber,\r
&FunctionNumber\r
);\r
if (!EFI_ERROR (Status) && FunctionNumber == 0) {\r
Status = EFI_UNSUPPORTED;\r
}\r
}\r
- } \r
+ }\r
}\r
}\r
\r
gBS->CloseProtocol (\r
- Controller, \r
- &gEfiPciIoProtocolGuid, \r
- This->DriverBindingHandle, \r
- Controller \r
+ Controller,\r
+ &gEfiPciIoProtocolGuid,\r
+ This->DriverBindingHandle,\r
+ Controller\r
);\r
- \r
+\r
return Status;\r
}\r
\r
EFI_PCI_IO_PROTOCOL *PciIo;\r
PCAT_ISA_ACPI_DEV *PcatIsaAcpiDev;\r
UINT64 Supports;\r
+ UINT64 OriginalAttributes;\r
BOOLEAN Enabled;\r
\r
Enabled = FALSE;\r
Supports = 0;\r
PcatIsaAcpiDev = NULL;\r
+ OriginalAttributes = 0;\r
//\r
// Open the PCI I/O Protocol Interface\r
//\r
PciIo = NULL;\r
Status = gBS->OpenProtocol (\r
- Controller, \r
- &gEfiPciIoProtocolGuid, \r
+ Controller,\r
+ &gEfiPciIoProtocolGuid,\r
(VOID**)&PciIo,\r
- This->DriverBindingHandle, \r
- Controller, \r
- EFI_OPEN_PROTOCOL_BY_DRIVER \r
+ This->DriverBindingHandle,\r
+ Controller,\r
+ EFI_OPEN_PROTOCOL_BY_DRIVER\r
);\r
if (EFI_ERROR (Status)) {\r
goto Done;\r
goto Done;\r
}\r
\r
- Supports &= (EFI_PCI_IO_ATTRIBUTE_ISA_IO | EFI_PCI_IO_ATTRIBUTE_ISA_IO_16);\r
+ Supports &= (UINT64) (EFI_PCI_IO_ATTRIBUTE_ISA_IO | EFI_PCI_IO_ATTRIBUTE_ISA_IO_16);\r
if (Supports == 0 || Supports == (EFI_PCI_IO_ATTRIBUTE_ISA_IO | EFI_PCI_IO_ATTRIBUTE_ISA_IO_16)) {\r
Status = EFI_UNSUPPORTED;\r
goto Done;\r
- } \r
+ }\r
+\r
+ Status = PciIo->Attributes (\r
+ PciIo,\r
+ EfiPciIoAttributeOperationGet,\r
+ 0,\r
+ &OriginalAttributes\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ goto Done;\r
+ }\r
\r
- Enabled = TRUE;\r
Status = PciIo->Attributes (\r
- PciIo, \r
- EfiPciIoAttributeOperationEnable, \r
- EFI_PCI_DEVICE_ENABLE | Supports | EFI_PCI_IO_ATTRIBUTE_ISA_MOTHERBOARD_IO, \r
- NULL \r
+ PciIo,\r
+ EfiPciIoAttributeOperationEnable,\r
+ EFI_PCI_DEVICE_ENABLE | Supports | EFI_PCI_IO_ATTRIBUTE_ISA_MOTHERBOARD_IO,\r
+ NULL\r
);\r
if (EFI_ERROR (Status)) {\r
goto Done;\r
}\r
- \r
+\r
+ Enabled = TRUE;\r
//\r
// Allocate memory for the PCAT ISA ACPI Device structure\r
//\r
//\r
// Initialize the PCAT ISA ACPI Device structure\r
//\r
- PcatIsaAcpiDev->Signature = PCAT_ISA_ACPI_DEV_SIGNATURE;\r
- PcatIsaAcpiDev->Handle = Controller;\r
- PcatIsaAcpiDev->PciIo = PciIo;\r
+ PcatIsaAcpiDev->Signature = PCAT_ISA_ACPI_DEV_SIGNATURE;\r
+ PcatIsaAcpiDev->Handle = Controller;\r
+ PcatIsaAcpiDev->PciIo = PciIo;\r
+ PcatIsaAcpiDev->OriginalAttributes = OriginalAttributes;\r
\r
//\r
// Initialize PcatIsaAcpiDeviceList\r
//\r
InitializePcatIsaAcpiDeviceList ();\r
- \r
+\r
//\r
// IsaAcpi interface\r
//\r
(PcatIsaAcpiDev->IsaAcpi).EnableDevice = IsaEnableDevice;\r
(PcatIsaAcpiDev->IsaAcpi).InitDevice = IsaInitDevice;\r
(PcatIsaAcpiDev->IsaAcpi).InterfaceInit = IsaInterfaceInit;\r
- \r
+\r
//\r
// Install the ISA ACPI Protocol interface\r
//\r
if (EFI_ERROR (Status)) {\r
if (PciIo != NULL && Enabled) {\r
PciIo->Attributes (\r
- PciIo, \r
- EfiPciIoAttributeOperationDisable, \r
- EFI_PCI_DEVICE_ENABLE | Supports | EFI_PCI_IO_ATTRIBUTE_ISA_MOTHERBOARD_IO,\r
- NULL \r
+ PciIo,\r
+ EfiPciIoAttributeOperationSet,\r
+ OriginalAttributes,\r
+ NULL\r
);\r
}\r
gBS->CloseProtocol (\r
- Controller, \r
- &gEfiPciIoProtocolGuid, \r
- This->DriverBindingHandle, \r
+ Controller,\r
+ &gEfiPciIoProtocolGuid,\r
+ This->DriverBindingHandle,\r
Controller\r
);\r
if (PcatIsaAcpiDev != NULL) {\r
}\r
return Status;\r
}\r
- \r
+\r
return EFI_SUCCESS;\r
}\r
\r
EFI_STATUS Status;\r
EFI_ISA_ACPI_PROTOCOL *IsaAcpi;\r
PCAT_ISA_ACPI_DEV *PcatIsaAcpiDev;\r
- UINT64 Supports;\r
- \r
+\r
//\r
// Get the ISA ACPI Protocol Interface\r
- // \r
+ //\r
Status = gBS->OpenProtocol (\r
- Controller, \r
- &gEfiIsaAcpiProtocolGuid, \r
+ Controller,\r
+ &gEfiIsaAcpiProtocolGuid,\r
(VOID**)&IsaAcpi,\r
- This->DriverBindingHandle, \r
- Controller, \r
+ This->DriverBindingHandle,\r
+ Controller,\r
EFI_OPEN_PROTOCOL_GET_PROTOCOL\r
);\r
if (EFI_ERROR (Status)) {\r
PcatIsaAcpiDev = PCAT_ISA_ACPI_DEV_FROM_THIS (IsaAcpi);\r
\r
//\r
- // Get supported PCI attributes\r
+ // Restore PCI attributes\r
//\r
Status = PcatIsaAcpiDev->PciIo->Attributes (\r
PcatIsaAcpiDev->PciIo,\r
- EfiPciIoAttributeOperationSupported,\r
- 0,\r
- &Supports\r
+ EfiPciIoAttributeOperationSet,\r
+ PcatIsaAcpiDev->OriginalAttributes,\r
+ NULL\r
);\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
\r
- Supports &= (EFI_PCI_IO_ATTRIBUTE_ISA_IO | EFI_PCI_IO_ATTRIBUTE_ISA_IO_16);\r
-\r
- PcatIsaAcpiDev->PciIo->Attributes (\r
- PcatIsaAcpiDev->PciIo, \r
- EfiPciIoAttributeOperationDisable, \r
- EFI_PCI_DEVICE_ENABLE | Supports | EFI_PCI_IO_ATTRIBUTE_ISA_MOTHERBOARD_IO,\r
- NULL \r
- );\r
- \r
//\r
// Uninstall protocol interface: EFI_ISA_ACPI_PROTOCOL\r
//\r
}\r
\r
gBS->CloseProtocol (\r
- Controller, \r
- &gEfiPciIoProtocolGuid, \r
- This->DriverBindingHandle, \r
+ Controller,\r
+ &gEfiPciIoProtocolGuid,\r
+ This->DriverBindingHandle,\r
Controller\r
);\r
- \r
+\r
gBS->FreePool (PcatIsaAcpiDev);\r
- \r
+\r
return EFI_SUCCESS;\r
}\r