This file implements ATA_PASSTHRU_PROCTOCOL and EXT_SCSI_PASSTHRU_PROTOCOL interfaces\r
for managed ATA controllers.\r
\r
- Copyright (c) 2010 - 2016, 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) 2010 - 2018, Intel Corporation. All rights reserved.<BR>\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
NULL,\r
NULL\r
},\r
+ 0, // EnabledPciAttributes\r
0, // OriginalAttributes\r
0, // PreviousPort\r
0, // PreviousPortMultiplier\r
0xFF, 0xFF, 0xFF, 0xFF\r
};\r
\r
+EDKII_ATA_ATAPI_POLICY_PROTOCOL *mAtaAtapiPolicy;\r
+EDKII_ATA_ATAPI_POLICY_PROTOCOL mDefaultAtaAtapiPolicy = {\r
+ EDKII_ATA_ATAPI_POLICY_VERSION,\r
+ 2, // PuisEnable\r
+ 0, // DeviceSleepEnable\r
+ 0, // AggressiveDeviceSleepEnable\r
+ 0 // Reserved\r
+};\r
+\r
/**\r
Sends an ATA command to an ATA device that is attached to the ATA controller. This function\r
supports both blocking I/O and non-blocking I/O. The blocking I/O functionality is required,\r
EFI_IDE_CONTROLLER_INIT_PROTOCOL *IdeControllerInit;\r
ATA_ATAPI_PASS_THRU_INSTANCE *Instance;\r
EFI_PCI_IO_PROTOCOL *PciIo;\r
- UINT64 Supports;\r
+ UINT64 EnabledPciAttributes;\r
UINT64 OriginalPciAttributes;\r
\r
Status = EFI_SUCCESS;\r
PciIo,\r
EfiPciIoAttributeOperationSupported,\r
0,\r
- &Supports\r
+ &EnabledPciAttributes\r
);\r
if (!EFI_ERROR (Status)) {\r
- Supports &= (UINT64)EFI_PCI_DEVICE_ENABLE;\r
+ EnabledPciAttributes &= (UINT64)EFI_PCI_DEVICE_ENABLE;\r
Status = PciIo->Attributes (\r
PciIo,\r
EfiPciIoAttributeOperationEnable,\r
- Supports,\r
+ EnabledPciAttributes,\r
NULL\r
);\r
}\r
goto ErrorExit;\r
}\r
\r
+ Status = gBS->LocateProtocol (&gEdkiiAtaAtapiPolicyProtocolGuid, NULL, (VOID **)&mAtaAtapiPolicy);\r
+ if (EFI_ERROR (Status)) {\r
+ //\r
+ // If there is no AtaAtapiPolicy exposed, use the default policy.\r
+ //\r
+ mAtaAtapiPolicy = &mDefaultAtaAtapiPolicy;\r
+ }\r
+\r
//\r
// Allocate a buffer to store the ATA_ATAPI_PASS_THRU_INSTANCE data structure\r
//\r
Instance->ControllerHandle = Controller;\r
Instance->IdeControllerInit = IdeControllerInit;\r
Instance->PciIo = PciIo;\r
+ Instance->EnabledPciAttributes = EnabledPciAttributes;\r
Instance->OriginalPciAttributes = OriginalPciAttributes;\r
Instance->AtaPassThru.Mode = &Instance->AtaPassThruMode;\r
Instance->ExtScsiPassThru.Mode = &Instance->ExtScsiPassThruMode;\r
gBS->CloseEvent (Instance->TimerEvent);\r
}\r
\r
- //\r
- // Remove all inserted ATA devices.\r
- //\r
- DestroyDeviceInfoList(Instance);\r
-\r
if (Instance != NULL) {\r
+ //\r
+ // Remove all inserted ATA devices.\r
+ //\r
+ DestroyDeviceInfoList (Instance);\r
FreePool (Instance);\r
}\r
return EFI_UNSUPPORTED;\r
EFI_ATA_PASS_THRU_PROTOCOL *AtaPassThru;\r
EFI_PCI_IO_PROTOCOL *PciIo;\r
EFI_AHCI_REGISTERS *AhciRegisters;\r
- UINT64 Supports;\r
\r
DEBUG ((EFI_D_INFO, "==AtaAtapiPassThru Stop== Controller = %x\n", Controller));\r
\r
//\r
DestroyDeviceInfoList (Instance);\r
\r
+ PciIo = Instance->PciIo;\r
+\r
+ //\r
+ // Disable this ATA host controller.\r
+ //\r
+ PciIo->Attributes (\r
+ PciIo,\r
+ EfiPciIoAttributeOperationDisable,\r
+ Instance->EnabledPciAttributes,\r
+ NULL\r
+ );\r
+\r
//\r
// If the current working mode is AHCI mode, then pre-allocated resource\r
// for AHCI initialization should be released.\r
//\r
- PciIo = Instance->PciIo;\r
-\r
if (Instance->Mode == EfiAtaAhciMode) {\r
AhciRegisters = &Instance->AhciRegisters;\r
PciIo->Unmap (\r
);\r
}\r
\r
- //\r
- // Disable this ATA host controller.\r
- //\r
- Status = PciIo->Attributes (\r
- PciIo,\r
- EfiPciIoAttributeOperationSupported,\r
- 0,\r
- &Supports\r
- );\r
- if (!EFI_ERROR (Status)) {\r
- Supports &= (UINT64)EFI_PCI_DEVICE_ENABLE;\r
- PciIo->Attributes (\r
- PciIo,\r
- EfiPciIoAttributeOperationDisable,\r
- Supports,\r
- NULL\r
- );\r
- }\r
-\r
//\r
// Restore original PCI attributes\r
//\r