/** @file\r
Header file for ATA/ATAPI PASS THRU driver.\r
\r
- Copyright (c) 2010 - 2012, 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
#ifndef __ATA_ATAPI_PASS_THRU_H__\r
#include <Protocol/IdeControllerInit.h>\r
#include <Protocol/AtaPassThru.h>\r
#include <Protocol/ScsiPassThruExt.h>\r
+#include <Protocol/AtaAtapiPolicy.h>\r
\r
#include <Library/DebugLib.h>\r
#include <Library/BaseLib.h>\r
extern EFI_COMPONENT_NAME_PROTOCOL gAtaAtapiPassThruComponentName;\r
extern EFI_COMPONENT_NAME2_PROTOCOL gAtaAtapiPassThruComponentName2;\r
\r
+extern EDKII_ATA_ATAPI_POLICY_PROTOCOL *mAtaAtapiPolicy;\r
+\r
#define ATA_ATAPI_PASS_THRU_SIGNATURE SIGNATURE_32 ('a', 'a', 'p', 't')\r
#define ATA_ATAPI_DEVICE_SIGNATURE SIGNATURE_32 ('a', 'd', 'e', 'v')\r
#define ATA_NONBLOCKING_TASK_SIGNATURE SIGNATURE_32 ('a', 't', 's', 'k')\r
// The attached device list\r
//\r
LIST_ENTRY DeviceList;\r
+ UINT64 EnabledPciAttributes;\r
UINT64 OriginalPciAttributes;\r
\r
//\r
BOOLEAN IsStart;\r
EFI_EVENT Event;\r
UINT64 RetryTimes;\r
- VOID *Map; // Pointer to map.\r
- VOID *TableMap;// Pointer to PRD table map.\r
+ BOOLEAN InfiniteWait;\r
+ VOID *Map; // Pointer to map.\r
+ VOID *TableMap; // Pointer to PRD table map.\r
EFI_ATA_DMA_PRD *MapBaseAddress; // Pointer to range Base address for Map.\r
- UINTN PageCount; // The page numbers used by PCIO freebuffer.\r
+ UINTN PageCount; // The page numbers used by PCIO freebuffer.\r
};\r
\r
//\r
// It means 3 second span.\r
//\r
#define ATA_ATAPI_TIMEOUT EFI_TIMER_PERIOD_SECONDS(3)\r
+#define ATA_SPINUP_TIMEOUT EFI_TIMER_PERIOD_SECONDS(10)\r
\r
#define IS_ALIGNED(addr, size) (((UINTN) (addr) & (size - 1)) == 0)\r
\r
@param[in] Instance A pointer to the ATA_ATAPI_PASS_THRU_INSTANCE instance.\r
@param[in] Port The port number of the ATA device to send the command.\r
@param[in] PortMultiplierPort The port multiplier port number of the ATA device to send the command.\r
- If there is no port multiplier, then specify 0.\r
+ If there is no port multiplier, then specify 0xFFFF.\r
@param[in] DeviceType The device type of the ATA device.\r
\r
@retval The pointer to the data structure of the device info to access.\r
@param[in] Instance A pointer to the ATA_ATAPI_PASS_THRU_INSTANCE instance.\r
@param[in] Port The port number of the ATA device to send the command.\r
@param[in] PortMultiplierPort The port multiplier port number of the ATA device to send the command.\r
- If there is no port multiplier, then specify 0.\r
+ If there is no port multiplier, then specify 0xFFFF.\r
@param[in] DeviceType The device type of the ATA device.\r
@param[in] IdentifyData The data buffer to store the output of the IDENTIFY cmd.\r
\r
@param[in] This A pointer to the EFI_ATA_PASS_THRU_PROTOCOL instance.\r
@param[in] Port The port number of the ATA device to send the command.\r
@param[in] PortMultiplierPort The port multiplier port number of the ATA device to send the command.\r
- If there is no port multiplier, then specify 0.\r
+ If there is no port multiplier, then specify 0xFFFF.\r
@param[in, out] Packet A pointer to the ATA command to send to the ATA device specified by Port\r
and PortMultiplierPort.\r
@param[in] Event If non-blocking I/O is not supported then Event is ignored, and blocking\r
device path node is to be allocated and built.\r
@param[in] PortMultiplierPort The port multiplier port number of the ATA device for which a\r
device path node is to be allocated and built. If there is no\r
- port multiplier, then specify 0.\r
+ port multiplier, then specify 0xFFFF.\r
@param[in, out] DevicePath A pointer to a single device path node that describes the ATA\r
device specified by Port and PortMultiplierPort. This function\r
is responsible for allocating the buffer DevicePath with the\r
@param[in] This A pointer to the EFI_ATA_PASS_THRU_PROTOCOL instance.\r
@param[in] Port Port represents the port number of the ATA device to be reset.\r
@param[in] PortMultiplierPort The port multiplier port number of the ATA device to reset.\r
- If there is no port multiplier, then specify 0.\r
+ If there is no port multiplier, then specify 0xFFFF.\r
@retval EFI_SUCCESS The ATA device specified by Port and PortMultiplierPort was reset.\r
@retval EFI_UNSUPPORTED The ATA controller does not support a device reset operation.\r
@retval EFI_INVALID_PARAMETER Port or PortMultiplierPort are invalid.\r