/** @file\r
- This file implements ATA_PASSTHRU_PROCTOCOL and EXT_SCSI_PASSTHRU_PROTOCOL interfaces\r
+ This file implements ATA_PASSTHRU_PROTOCOL 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
{ // NonBlocking TaskList\r
NULL,\r
NULL\r
- },\r
- NULL, // ExitBootEvent\r
+ }\r
};\r
\r
ATAPI_DEVICE_PATH mAtapiDevicePathTemplate = {\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
Instance = (ATA_ATAPI_PASS_THRU_INSTANCE *) Context;\r
EntryHeader = &Instance->NonBlockingTaskList;\r
//\r
- // Get the Taks from the Taks List and execute it, until there is\r
+ // Get the Tasks from the Tasks List and execute it, until there is\r
// no task in the list or the device is busy with task (EFI_NOT_READY).\r
//\r
while (TRUE) {\r
return Status;\r
}\r
\r
-/**\r
- Disable the device (especially Bus Master DMA) when exiting the boot\r
- services.\r
-\r
- @param[in] Event Event for which this notification function is being\r
- called.\r
- @param[in] Context Pointer to the ATA_ATAPI_PASS_THRU_INSTANCE that\r
- represents the HBA.\r
-**/\r
-VOID\r
-EFIAPI\r
-AtaPassThruExitBootServices (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
- )\r
-{\r
- ATA_ATAPI_PASS_THRU_INSTANCE *Instance;\r
- EFI_PCI_IO_PROTOCOL *PciIo;\r
-\r
- DEBUG ((DEBUG_VERBOSE, "%a: Context=0x%p\n", __FUNCTION__, Context));\r
-\r
- Instance = Context;\r
- PciIo = Instance->PciIo;\r
-\r
- PciIo->Attributes (\r
- PciIo,\r
- EfiPciIoAttributeOperationDisable,\r
- Instance->EnabledPciAttributes,\r
- NULL\r
- );\r
-}\r
-\r
/**\r
Tests to see if this driver supports a given controller. If a child device is provided,\r
it further tests to see if this driver supports creating a handle for the specified child device.\r
EFI_IDE_CONTROLLER_INIT_PROTOCOL *IdeControllerInit;\r
\r
//\r
- // SATA Controller is a device driver, and should ingore the\r
+ // SATA Controller is a device driver, and should ignore the\r
// "RemainingDevicePath" according to UEFI spec\r
//\r
Status = gBS->OpenProtocol (\r
@retval EFI_SUCCESS The device was started.\r
@retval EFI_DEVICE_ERROR The device could not be started due to a device error.Currently not implemented.\r
@retval EFI_OUT_OF_RESOURCES The request could not be completed due to a lack of resources.\r
- @retval Others The driver failded to start the device.\r
+ @retval Others The driver failed to start the device.\r
\r
**/\r
EFI_STATUS\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
InitializeListHead(&Instance->DeviceList);\r
InitializeListHead(&Instance->NonBlockingTaskList);\r
\r
- Status = gBS->CreateEvent (\r
- EVT_SIGNAL_EXIT_BOOT_SERVICES,\r
- TPL_CALLBACK,\r
- AtaPassThruExitBootServices,\r
- Instance,\r
- &Instance->ExitBootEvent\r
- );\r
- if (EFI_ERROR (Status)) {\r
- goto ErrorExit;\r
- }\r
-\r
Instance->TimerEvent = NULL;\r
\r
Status = gBS->CreateEvent (\r
gBS->CloseEvent (Instance->TimerEvent);\r
}\r
\r
- if ((Instance != NULL) && (Instance->ExitBootEvent != NULL)) {\r
- gBS->CloseEvent (Instance->ExitBootEvent);\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
Instance->TimerEvent = NULL;\r
}\r
DestroyAsynTaskList (Instance, FALSE);\r
-\r
- //\r
- // Close event signaled at gBS->ExitBootServices().\r
- //\r
- if (Instance->ExitBootEvent != NULL) {\r
- gBS->CloseEvent (Instance->ExitBootEvent);\r
- Instance->ExitBootEvent = NULL;\r
- }\r
-\r
//\r
// Free allocated resource\r
//\r