4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Header file for ATA/ATAPI PASS THRU driver.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This program and the accompanying materials
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync are licensed and made available under the terms and conditions of the BSD License
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync which accompanies this distribution. The full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync http://opensource.org/licenses/bsd-license.php
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifndef __ATA_ATAPI_PASS_THRU_H__
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define __ATA_ATAPI_PASS_THRU_H__
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Uefi.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <IndustryStandard/Pci.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <IndustryStandard/Atapi.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <IndustryStandard/Scsi.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/PciIo.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/IdeControllerInit.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/AtaPassThru.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/ScsiPassThruExt.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/DebugLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/BaseLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/BaseMemoryLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/UefiDriverEntryPoint.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/UefiBootServicesTableLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/UefiLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/PciLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/PcdLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/TimerLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/MemoryAllocationLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/ReportStatusCodeLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Library/DevicePathLib.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "IdeMode.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include "AhciMode.h"
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern EFI_DRIVER_BINDING_PROTOCOL gAtaAtapiPassThruDriverBinding;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern EFI_COMPONENT_NAME_PROTOCOL gAtaAtapiPassThruComponentName;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern EFI_COMPONENT_NAME2_PROTOCOL gAtaAtapiPassThruComponentName2;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ATA_ATAPI_PASS_THRU_SIGNATURE SIGNATURE_32 ('a', 'a', 'p', 't')
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ATA_ATAPI_DEVICE_SIGNATURE SIGNATURE_32 ('a', 'd', 'e', 'v')
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ATA_NONBLOCKING_TASK_SIGNATURE SIGNATURE_32 ('a', 't', 's', 'k')
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _ATA_NONBLOCK_TASK ATA_NONBLOCK_TASK;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef enum {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiAtaIdeMode,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiAtaAhciMode,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiAtaRaidMode,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiAtaUnknownMode
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} EFI_ATA_HC_WORK_MODE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef enum {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiIdeCdrom, /* ATAPI CDROM */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiIdeHarddisk, /* Hard Disk */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiPortMultiplier, /* Port Multiplier */
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiIdeUnknown
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} EFI_ATA_DEVICE_TYPE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Ahci mode device info
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Signature;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LIST_ENTRY Link;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 Port;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 PortMultiplier;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_ATA_DEVICE_TYPE Type;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_IDENTIFY_DATA *IdentifyData;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} EFI_ATA_DEVICE_INFO;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Signature;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE ControllerHandle;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_PCI_IO_PROTOCOL *PciIo;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_IDE_CONTROLLER_INIT_PROTOCOL *IdeControllerInit;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_ATA_PASS_THRU_MODE AtaPassThruMode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_ATA_PASS_THRU_PROTOCOL AtaPassThru;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_EXT_SCSI_PASS_THRU_MODE ExtScsiPassThruMode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_EXT_SCSI_PASS_THRU_PROTOCOL ExtScsiPassThru;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_ATA_HC_WORK_MODE Mode;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_IDE_REGISTERS IdeRegisters[EfiIdeMaxChannel];
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_AHCI_REGISTERS AhciRegisters;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // The attached device list
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LIST_ENTRY DeviceList;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 OriginalPciAttributes;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // For AtaPassThru protocol, using the following bytes to record the previous call in
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // GetNextPort()/GetNextDevice().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 PreviousPort;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 PreviousPortMultiplier;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // For ExtScsiPassThru protocol, using the following bytes to record the previous call in
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // GetNextTarget()/GetNextTargetLun().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 PreviousTargetId;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 PreviousLun;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync // For Non-blocking.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync //
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_EVENT TimerEvent;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LIST_ENTRY NonBlockingTaskList;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} ATA_ATAPI_PASS_THRU_INSTANCE;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Task for Non-blocking mode.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncstruct _ATA_NONBLOCK_TASK {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 Signature;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LIST_ENTRY Link;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 Port;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT16 PortMultiplier;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_ATA_PASS_THRU_COMMAND_PACKET *Packet;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync BOOLEAN IsStart;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_EVENT Event;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT64 RetryTimes;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID *Map; // Pointer to map.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID *TableMap;// Pointer to PRD table map.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_ATA_DMA_PRD *MapBaseAddress; // Pointer to range Base address for Map.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINTN PageCount; // The page numbers used by PCIO freebuffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync};
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// Timeout value which uses 100ns as a unit.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync// It means 3 second span.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync//
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ATA_ATAPI_TIMEOUT EFI_TIMER_PERIOD_SECONDS(3)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define IS_ALIGNED(addr, size) (((UINTN) (addr) & (size - 1)) == 0)
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ATA_PASS_THRU_PRIVATE_DATA_FROM_THIS(a) \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CR (a, \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ATA_ATAPI_PASS_THRU_INSTANCE, \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AtaPassThru, \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ATA_ATAPI_PASS_THRU_SIGNATURE \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define EXT_SCSI_PASS_THRU_PRIVATE_DATA_FROM_THIS(a) \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CR (a, \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ATA_ATAPI_PASS_THRU_INSTANCE, \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ExtScsiPassThru, \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ATA_ATAPI_PASS_THRU_SIGNATURE \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync )
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ATA_ATAPI_DEVICE_INFO_FROM_THIS(a) \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CR (a, \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_ATA_DEVICE_INFO, \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Link, \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ATA_ATAPI_DEVICE_SIGNATURE \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define ATA_NON_BLOCK_TASK_FROM_ENTRY(a) \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync CR (a, \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ATA_NONBLOCK_TASK, \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Link, \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ATA_NONBLOCKING_TASK_SIGNATURE \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Retrieves a Unicode string that is the user readable name of the driver.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function retrieves the user readable name of a driver in the form of a
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Unicode string. If the driver specified by This has a user readable name in
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the language specified by Language, then a pointer to the driver name is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync returned in DriverName, and EFI_SUCCESS is returned. If the driver specified
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync by This does not support the language specified by Language,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync then EFI_UNSUPPORTED is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_COMPONENT_NAME_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Language[in] A pointer to a Null-terminated ASCII string
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync array indicating the language. This is the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync language of the driver name that the caller is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync requesting, and it must match one of the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync languages specified in SupportedLanguages. The
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync number of languages supported by a driver is up
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync to the driver writer. Language is specified
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync in RFC 4646 or ISO 639-2 language code format.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param DriverName[out] A pointer to the Unicode string to return.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This Unicode string is the name of the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync driver specified by This in the language
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync specified by Language.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The Unicode string for the Driver specified by
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This and the language specified by Language was
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync returned in DriverName.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER Language is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER DriverName is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_UNSUPPORTED The driver specified by This does not support
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the language specified by Language.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncAtaAtapiPassThruComponentNameGetDriverName (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_COMPONENT_NAME_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR8 *Language,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT CHAR16 **DriverName
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Retrieves a Unicode string that is the user readable name of the controller
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync that is being managed by a driver.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function retrieves the user readable name of the controller specified by
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ControllerHandle and ChildHandle in the form of a Unicode string. If the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync driver specified by This has a user readable name in the language specified by
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Language, then a pointer to the controller name is returned in ControllerName,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync and EFI_SUCCESS is returned. If the driver specified by This is not currently
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync managing the controller specified by ControllerHandle and ChildHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync then EFI_UNSUPPORTED is returned. If the driver specified by This does not
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync support the language specified by Language, then EFI_UNSUPPORTED is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_COMPONENT_NAME_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ControllerHandle[in] The handle of a controller that the driver
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync specified by This is managing. This handle
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync specifies the controller whose name is to be
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ChildHandle[in] The handle of the child controller to retrieve
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the name of. This is an optional parameter that
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync may be NULL. It will be NULL for device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync drivers. It will also be NULL for a bus drivers
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync that wish to retrieve the name of the bus
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync controller. It will not be NULL for a bus
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync driver that wishes to retrieve the name of a
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync child controller.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Language[in] A pointer to a Null-terminated ASCII string
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync array indicating the language. This is the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync language of the driver name that the caller is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync requesting, and it must match one of the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync languages specified in SupportedLanguages. The
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync number of languages supported by a driver is up
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync to the driver writer. Language is specified in
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync RFC 4646 or ISO 639-2 language code format.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param ControllerName[out] A pointer to the Unicode string to return.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This Unicode string is the name of the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync controller specified by ControllerHandle and
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ChildHandle in the language specified by
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Language from the point of view of the driver
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync specified by This.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The Unicode string for the user readable name in
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the language specified by Language for the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync driver specified by This was returned in
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DriverName.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER ControllerHandle is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER Language is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER ControllerName is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_UNSUPPORTED The driver specified by This is not currently
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync managing the controller specified by
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ControllerHandle and ChildHandle.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_UNSUPPORTED The driver specified by This does not support
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the language specified by Language.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncAtaAtapiPassThruComponentNameGetControllerName (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_COMPONENT_NAME_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HANDLE ControllerHandle,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HANDLE ChildHandle OPTIONAL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN CHAR8 *Language,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT CHAR16 **ControllerName
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Tests to see if this driver supports a given controller. If a child device is provided,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync it further tests to see if this driver supports creating a handle for the specified child device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function checks to see if the driver specified by This supports the device specified by
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ControllerHandle. Drivers will typically use the device path attached to
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ControllerHandle and/or the services from the bus I/O abstraction attached to
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ControllerHandle to determine if the driver supports ControllerHandle. This function
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync may be called many times during platform initialization. In order to reduce boot times, the tests
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync performed by this function must be very small, and take as little time as possible to execute. This
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync function must not change the state of any hardware devices, and this function must be aware that the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync device specified by ControllerHandle may already be managed by the same driver or a
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync different driver. This function must match its calls to AllocatePages() with FreePages(),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AllocatePool() with FreePool(), and OpenProtocol() with CloseProtocol().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Because ControllerHandle may have been previously started by the same driver, if a protocol is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync already in the opened state, then it must not be closed with CloseProtocol(). This is required
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync to guarantee the state of ControllerHandle is not modified by this function.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] ControllerHandle The handle of the controller to test. This handle
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync must support a protocol interface that supplies
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync an I/O abstraction to the driver.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] RemainingDevicePath A pointer to the remaining portion of a device path. This
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync parameter is ignored by device drivers, and is optional for bus
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync drivers. For bus drivers, if this parameter is not NULL, then
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the bus driver must determine if the bus controller specified
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync by ControllerHandle and the child controller specified
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync by RemainingDevicePath are both supported by this
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync bus driver.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The device specified by ControllerHandle and
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync RemainingDevicePath is supported by the driver specified by This.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_ALREADY_STARTED The device specified by ControllerHandle and
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync RemainingDevicePath is already being managed by the driver
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync specified by This.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_ACCESS_DENIED The device specified by ControllerHandle and
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync RemainingDevicePath is already being managed by a different
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync driver or an application that requires exclusive access.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Currently not implemented.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_UNSUPPORTED The device specified by ControllerHandle and
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync RemainingDevicePath is not supported by the driver specified by This.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncAtaAtapiPassThruSupported (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_DRIVER_BINDING_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HANDLE Controller,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Starts a device controller or a bus controller.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The Start() function is designed to be invoked from the EFI boot service ConnectController().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync As a result, much of the error checking on the parameters to Start() has been moved into this
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync common boot service. It is legal to call Start() from other locations,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync but the following calling restrictions must be followed, or the system behavior will not be deterministic.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 1. ControllerHandle must be a valid EFI_HANDLE.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 2. If RemainingDevicePath is not NULL, then it must be a pointer to a naturally aligned
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_DEVICE_PATH_PROTOCOL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 3. Prior to calling Start(), the Supported() function for the driver specified by This must
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync have been called with the same calling parameters, and Supported() must have returned EFI_SUCCESS.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] ControllerHandle The handle of the controller to start. This handle
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync must support a protocol interface that supplies
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync an I/O abstraction to the driver.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] RemainingDevicePath A pointer to the remaining portion of a device path. This
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync parameter is ignored by device drivers, and is optional for bus
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync drivers. For a bus driver, if this parameter is NULL, then handles
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for all the children of Controller are created by this driver.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If this parameter is not NULL and the first Device Path Node is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync not the End of Device Path Node, then only the handle for the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync child device specified by the first Device Path Node of
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync RemainingDevicePath is created by this driver.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If the first Device Path Node of RemainingDevicePath is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the End of Device Path Node, no child handle is created by this
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync driver.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The device was started.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR The device could not be started due to a device error.Currently not implemented.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_OUT_OF_RESOURCES The request could not be completed due to a lack of resources.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval Others The driver failded to start the device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncAtaAtapiPassThruStart (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_DRIVER_BINDING_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HANDLE Controller,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Stops a device controller or a bus controller.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The Stop() function is designed to be invoked from the EFI boot service DisconnectController().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync As a result, much of the error checking on the parameters to Stop() has been moved
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync into this common boot service. It is legal to call Stop() from other locations,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync but the following calling restrictions must be followed, or the system behavior will not be deterministic.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 1. ControllerHandle must be a valid EFI_HANDLE that was used on a previous call to this
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync same driver's Start() function.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 2. The first NumberOfChildren handles of ChildHandleBuffer must all be a valid
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_HANDLE. In addition, all of these handles must have been created in this driver's
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Start() function, and the Start() function must have called OpenProtocol() on
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ControllerHandle with an Attribute of EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] ControllerHandle A handle to the device being stopped. The handle must
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync support a bus specific I/O protocol for the driver
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync to use to stop the device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] NumberOfChildren The number of child device handles in ChildHandleBuffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] ChildHandleBuffer An array of child handles to be freed. May be NULL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if NumberOfChildren is 0.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The device was stopped.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR The device could not be stopped due to a device error.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncAtaAtapiPassThruStop (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_DRIVER_BINDING_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HANDLE Controller,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN NumberOfChildren,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_HANDLE *ChildHandleBuffer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Traverse the attached ATA devices list to find out the device to access.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Instance A pointer to the ATA_ATAPI_PASS_THRU_INSTANCE instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Port The port number of the ATA device to send the command.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] PortMultiplierPort The port multiplier port number of the ATA device to send the command.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If there is no port multiplier, then specify 0.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] DeviceType The device type of the ATA device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval The pointer to the data structure of the device info to access.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncLIST_ENTRY *
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncSearchDeviceInfoList (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN ATA_ATAPI_PASS_THRU_INSTANCE *Instance,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 Port,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 PortMultiplier,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_ATA_DEVICE_TYPE DeviceType
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Allocate device info data structure to contain device info.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync And insert the data structure to the tail of device list for tracing.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Instance A pointer to the ATA_ATAPI_PASS_THRU_INSTANCE instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Port The port number of the ATA device to send the command.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] PortMultiplierPort The port multiplier port number of the ATA device to send the command.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If there is no port multiplier, then specify 0.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] DeviceType The device type of the ATA device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] IdentifyData The data buffer to store the output of the IDENTIFY cmd.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Successfully insert the ata device to the tail of device list.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_OUT_OF_RESOURCES Can not allocate enough resource for use.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCreateNewDeviceInfo (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN ATA_ATAPI_PASS_THRU_INSTANCE *Instance,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 Port,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 PortMultiplier,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_ATA_DEVICE_TYPE DeviceType,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_IDENTIFY_DATA *IdentifyData
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Destroy all attached ATA devices info.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Instance A pointer to the ATA_ATAPI_PASS_THRU_INSTANCE instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDestroyDeviceInfoList (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN ATA_ATAPI_PASS_THRU_INSTANCE *Instance
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Destroy all pending non blocking tasks.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Instance A pointer to the ATA_ATAPI_PASS_THRU_INSTANCE instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] IsSigEvent Indicate whether signal the task event when remove the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync task.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncDestroyAsynTaskList (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN ATA_ATAPI_PASS_THRU_INSTANCE *Instance,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN BOOLEAN IsSigEvent
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Enumerate all attached ATA devices at IDE mode or AHCI mode separately.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The function is designed to enumerate all attached ATA devices.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Instance A pointer to the ATA_ATAPI_PASS_THRU_INSTANCE instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Successfully enumerate attached ATA devices.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR The device could not be stopped due to a device error.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEnumerateAttachedDevice (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN ATA_ATAPI_PASS_THRU_INSTANCE *Instance
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Call back funtion when the timer event is signaled.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Event The Event this notify function registered to.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Context Pointer to the context data registered to the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Event.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncVOID
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncAsyncNonBlockingTransferRoutine (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_EVENT Event,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID* Context
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Sends an ATA command to an ATA device that is attached to the ATA controller. This function
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync supports both blocking I/O and non-blocking I/O. The blocking I/O functionality is required,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync and the non-blocking I/O functionality is optional.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This A pointer to the EFI_ATA_PASS_THRU_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Port The port number of the ATA device to send the command.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] PortMultiplierPort The port multiplier port number of the ATA device to send the command.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If there is no port multiplier, then specify 0.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] Packet A pointer to the ATA command to send to the ATA device specified by Port
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync and PortMultiplierPort.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Event If non-blocking I/O is not supported then Event is ignored, and blocking
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync I/O is performed. If Event is NULL, then blocking I/O is performed. If
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Event is not NULL and non blocking I/O is supported, then non-blocking
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync I/O is performed, and Event will be signaled when the ATA command completes.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The ATA command was sent by the host. For bi-directional commands,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync InTransferLength bytes were transferred from InDataBuffer. For write and
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync bi-directional commands, OutTransferLength bytes were transferred by OutDataBuffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_BAD_BUFFER_SIZE The ATA command was not executed. The number of bytes that could be transferred
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync is returned in InTransferLength. For write and bi-directional commands,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OutTransferLength bytes were transferred by OutDataBuffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_READY The ATA command could not be sent because there are too many ATA commands
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync already queued. The caller may retry again later.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR A device error occurred while attempting to send the ATA command.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER Port, PortMultiplierPort, or the contents of Acb are invalid. The ATA
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync command was not sent, so no additional status information is available.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncAtaPassThruPassThru (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_ATA_PASS_THRU_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 Port,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 PortMultiplierPort,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT EFI_ATA_PASS_THRU_COMMAND_PACKET *Packet,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_EVENT Event OPTIONAL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Used to retrieve the list of legal port numbers for ATA devices on an ATA controller.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync These can either be the list of ports where ATA devices are actually present or the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync list of legal port numbers for the ATA controller. Regardless, the caller of this
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync function must probe the port number returned to see if an ATA device is actually
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync present at that location on the ATA controller.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The GetNextPort() function retrieves the port number on an ATA controller. If on input
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Port is 0xFFFF, then the port number of the first port on the ATA controller is returned
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync in Port and EFI_SUCCESS is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If Port is a port number that was returned on a previous call to GetNextPort(), then the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync port number of the next port on the ATA controller is returned in Port, and EFI_SUCCESS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync is returned. If Port is not 0xFFFF and Port was not returned on a previous call to
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync GetNextPort(), then EFI_INVALID_PARAMETER is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If Port is the port number of the last port on the ATA controller, then EFI_NOT_FOUND is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This A pointer to the EFI_ATA_PASS_THRU_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] Port On input, a pointer to the port number on the ATA controller.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync On output, a pointer to the next port number on the ATA
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync controller. An input value of 0xFFFF retrieves the first port
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync number on the ATA controller.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The next port number on the ATA controller was returned in Port.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_FOUND There are no more ports on this ATA controller.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER Port is not 0xFFFF and Port was not returned on a previous call
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync to GetNextPort().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncAtaPassThruGetNextPort (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_ATA_PASS_THRU_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT UINT16 *Port
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Used to retrieve the list of legal port multiplier port numbers for ATA devices on a port of an ATA
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync controller. These can either be the list of port multiplier ports where ATA devices are actually
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync present on port or the list of legal port multiplier ports on that port. Regardless, the caller of this
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync function must probe the port number and port multiplier port number returned to see if an ATA
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync device is actually present.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The GetNextDevice() function retrieves the port multiplier port number of an ATA device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync present on a port of an ATA controller.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If PortMultiplierPort points to a port multiplier port number value that was returned on a
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync previous call to GetNextDevice(), then the port multiplier port number of the next ATA device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync on the port of the ATA controller is returned in PortMultiplierPort, and EFI_SUCCESS is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If PortMultiplierPort points to 0xFFFF, then the port multiplier port number of the first
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ATA device on port of the ATA controller is returned in PortMultiplierPort and
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_SUCCESS is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If PortMultiplierPort is not 0xFFFF and the value pointed to by PortMultiplierPort
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync was not returned on a previous call to GetNextDevice(), then EFI_INVALID_PARAMETER
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If PortMultiplierPort is the port multiplier port number of the last ATA device on the port of
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the ATA controller, then EFI_NOT_FOUND is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This A pointer to the EFI_ATA_PASS_THRU_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Port The port number present on the ATA controller.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] PortMultiplierPort On input, a pointer to the port multiplier port number of an
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ATA device present on the ATA controller.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If on input a PortMultiplierPort of 0xFFFF is specified,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync then the port multiplier port number of the first ATA device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync is returned. On output, a pointer to the port multiplier port
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync number of the next ATA device present on an ATA controller.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The port multiplier port number of the next ATA device on the port
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync of the ATA controller was returned in PortMultiplierPort.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_FOUND There are no more ATA devices on this port of the ATA controller.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER PortMultiplierPort is not 0xFFFF, and PortMultiplierPort was not
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync returned on a previous call to GetNextDevice().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncAtaPassThruGetNextDevice (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_ATA_PASS_THRU_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 Port,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT UINT16 *PortMultiplierPort
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Used to allocate and build a device path node for an ATA device on an ATA controller.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The BuildDevicePath() function allocates and builds a single device node for the ATA
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync device specified by Port and PortMultiplierPort. If the ATA device specified by Port and
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync PortMultiplierPort is not present on the ATA controller, then EFI_NOT_FOUND is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If DevicePath is NULL, then EFI_INVALID_PARAMETER is returned. If there are not enough
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync resources to allocate the device path node, then EFI_OUT_OF_RESOURCES is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Otherwise, DevicePath is allocated with the boot service AllocatePool(), the contents of
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevicePath are initialized to describe the ATA device specified by Port and PortMultiplierPort,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync and EFI_SUCCESS is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This A pointer to the EFI_ATA_PASS_THRU_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Port Port specifies the port number of the ATA device for which a
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync device path node is to be allocated and built.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] PortMultiplierPort The port multiplier port number of the ATA device for which a
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync device path node is to be allocated and built. If there is no
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync port multiplier, then specify 0.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] DevicePath A pointer to a single device path node that describes the ATA
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync device specified by Port and PortMultiplierPort. This function
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync is responsible for allocating the buffer DevicePath with the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync boot service AllocatePool(). It is the caller's responsibility
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync to free DevicePath when the caller is finished with DevicePath.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The device path node that describes the ATA device specified by
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Port and PortMultiplierPort was allocated and returned in DevicePath.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_FOUND The ATA device specified by Port and PortMultiplierPort does not
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync exist on the ATA controller.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER DevicePath is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_OUT_OF_RESOURCES There are not enough resources to allocate DevicePath.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncAtaPassThruBuildDevicePath (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_ATA_PASS_THRU_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 Port,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 PortMultiplierPort,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Used to translate a device path node to a port number and port multiplier port number.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The GetDevice() function determines the port and port multiplier port number associated with
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the ATA device described by DevicePath. If DevicePath is a device path node type that the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ATA Pass Thru driver supports, then the ATA Pass Thru driver will attempt to translate the contents
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevicePath into a port number and port multiplier port number.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If this translation is successful, then that port number and port multiplier port number are returned
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync in Port and PortMultiplierPort, and EFI_SUCCESS is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If DevicePath, Port, or PortMultiplierPort are NULL, then EFI_INVALID_PARAMETER is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If DevicePath is not a device path node type that the ATA Pass Thru driver supports, then
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_UNSUPPORTED is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If DevicePath is a device path node type that the ATA Pass Thru driver supports, but there is not
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync a valid translation from DevicePath to a port number and port multiplier port number, then
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_NOT_FOUND is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This A pointer to the EFI_ATA_PASS_THRU_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] DevicePath A pointer to the device path node that describes an ATA device on the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ATA controller.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] Port On return, points to the port number of an ATA device on the ATA controller.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] PortMultiplierPort On return, points to the port multiplier port number of an ATA device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync on the ATA controller.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS DevicePath was successfully translated to a port number and port multiplier
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync port number, and they were returned in Port and PortMultiplierPort.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER DevicePath is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER Port is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER PortMultiplierPort is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_UNSUPPORTED This driver does not support the device path node type in DevicePath.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_FOUND A valid translation from DevicePath to a port number and port multiplier
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync port number does not exist.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncAtaPassThruGetDevice (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_ATA_PASS_THRU_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT UINT16 *Port,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT UINT16 *PortMultiplierPort
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Resets a specific port on the ATA controller. This operation also resets all the ATA devices
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync connected to the port.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The ResetChannel() function resets an a specific port on an ATA controller. This operation
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync resets all the ATA devices connected to that port. If this ATA controller does not support
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync a reset port operation, then EFI_UNSUPPORTED is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If a device error occurs while executing that port reset operation, then EFI_DEVICE_ERROR is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If a timeout occurs during the execution of the port reset operation, then EFI_TIMEOUT is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If the port reset operation is completed, then EFI_SUCCESS is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This A pointer to the EFI_ATA_PASS_THRU_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Port The port number on the ATA controller.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The ATA controller port was reset.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_UNSUPPORTED The ATA controller does not support a port reset operation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR A device error occurred while attempting to reset the ATA port.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_TIMEOUT A timeout occurred while attempting to reset the ATA port.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncAtaPassThruResetPort (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_ATA_PASS_THRU_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 Port
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Resets an ATA device that is connected to an ATA controller.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The ResetDevice() function resets the ATA device specified by Port and PortMultiplierPort.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If this ATA controller does not support a device reset operation, then EFI_UNSUPPORTED is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If Port or PortMultiplierPort are not in a valid range for this ATA controller, then
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_INVALID_PARAMETER is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If a device error occurs while executing that device reset operation, then EFI_DEVICE_ERROR
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If a timeout occurs during the execution of the device reset operation, then EFI_TIMEOUT is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If the device reset operation is completed, then EFI_SUCCESS is returned.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This A pointer to the EFI_ATA_PASS_THRU_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Port Port represents the port number of the ATA device to be reset.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] PortMultiplierPort The port multiplier port number of the ATA device to reset.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If there is no port multiplier, then specify 0.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The ATA device specified by Port and PortMultiplierPort was reset.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_UNSUPPORTED The ATA controller does not support a device reset operation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER Port or PortMultiplierPort are invalid.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR A device error occurred while attempting to reset the ATA device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync specified by Port and PortMultiplierPort.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_TIMEOUT A timeout occurred while attempting to reset the ATA device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync specified by Port and PortMultiplierPort.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncAtaPassThruResetDevice (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_ATA_PASS_THRU_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 Port,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT16 PortMultiplierPort
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Sends a SCSI Request Packet to a SCSI device that is attached to the SCSI channel. This function
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync supports both blocking I/O and nonblocking I/O. The blocking I/O functionality is required, and the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync nonblocking I/O functionality is optional.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param This A pointer to the EFI_EXT_SCSI_PASS_THRU_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Target The Target is an array of size TARGET_MAX_BYTES and it represents
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the id of the SCSI device to send the SCSI Request Packet. Each
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync transport driver may choose to utilize a subset of this size to suit the needs
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync of transport target representation. For example, a Fibre Channel driver
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync may use only 8 bytes (WWN) to represent an FC target.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Lun The LUN of the SCSI device to send the SCSI Request Packet.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Packet A pointer to the SCSI Request Packet to send to the SCSI device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync specified by Target and Lun.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Event If nonblocking I/O is not supported then Event is ignored, and blocking
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync I/O is performed. If Event is NULL, then blocking I/O is performed. If
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Event is not NULL and non blocking I/O is supported, then
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync nonblocking I/O is performed, and Event will be signaled when the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SCSI Request Packet completes.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The SCSI Request Packet was sent by the host. For bi-directional
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync commands, InTransferLength bytes were transferred from
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync InDataBuffer. For write and bi-directional commands,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OutTransferLength bytes were transferred by
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OutDataBuffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was not executed. The number of bytes that
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync could be transferred is returned in InTransferLength. For write
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync and bi-directional commands, OutTransferLength bytes were
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync transferred by OutDataBuffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_READY The SCSI Request Packet could not be sent because there are too many
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SCSI Request Packets already queued. The caller may retry again later.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR A device error occurred while attempting to send the SCSI Request
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Packet.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER Target, Lun, or the contents of ScsiRequestPacket are invalid.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_UNSUPPORTED The command described by the SCSI Request Packet is not supported
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync by the host adapter. This includes the case of Bi-directional SCSI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync commands not supported by the implementation. The SCSI Request
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Packet was not sent, so no additional status information is available.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_TIMEOUT A timeout occurred while waiting for the SCSI Request Packet to execute.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncExtScsiPassThruPassThru (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 *Target,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT64 Lun,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_EVENT Event OPTIONAL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Used to retrieve the list of legal Target IDs and LUNs for SCSI devices on a SCSI channel. These
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync can either be the list SCSI devices that are actually present on the SCSI channel, or the list of legal
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Target Ids and LUNs for the SCSI channel. Regardless, the caller of this function must probe the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Target ID and LUN returned to see if a SCSI device is actually present at that location on the SCSI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync channel.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param This A pointer to the EFI_EXT_SCSI_PASS_THRU_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Target On input, a pointer to the Target ID (an array of size
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TARGET_MAX_BYTES) of a SCSI device present on the SCSI channel.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync On output, a pointer to the Target ID (an array of
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TARGET_MAX_BYTES) of the next SCSI device present on a SCSI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync channel. An input value of 0xF(all bytes in the array are 0xF) in the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Target array retrieves the Target ID of the first SCSI device present on a
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SCSI channel.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Lun On input, a pointer to the LUN of a SCSI device present on the SCSI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync channel. On output, a pointer to the LUN of the next SCSI device present
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync on a SCSI channel.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The Target ID and LUN of the next SCSI device on the SCSI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync channel was returned in Target and Lun.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER Target array is not all 0xF, and Target and Lun were
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync not returned on a previous call to GetNextTargetLun().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_FOUND There are no more SCSI devices on this SCSI channel.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncExtScsiPassThruGetNextTargetLun (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT UINT8 **Target,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT UINT64 *Lun
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Used to allocate and build a device path node for a SCSI device on a SCSI channel.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param This A pointer to the EFI_EXT_SCSI_PASS_THRU_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Target The Target is an array of size TARGET_MAX_BYTES and it specifies the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Target ID of the SCSI device for which a device path node is to be
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync allocated and built. Transport drivers may chose to utilize a subset of
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync this size to suit the representation of targets. For example, a Fibre
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Channel driver may use only 8 bytes (WWN) in the array to represent a
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync FC target.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Lun The LUN of the SCSI device for which a device path node is to be
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync allocated and built.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param DevicePath A pointer to a single device path node that describes the SCSI device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync specified by Target and Lun. This function is responsible for
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync allocating the buffer DevicePath with the boot service
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync AllocatePool(). It is the caller's responsibility to free
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevicePath when the caller is finished with DevicePath.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The device path node that describes the SCSI device specified by
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Target and Lun was allocated and returned in
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevicePath.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER DevicePath is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_FOUND The SCSI devices specified by Target and Lun does not exist
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync on the SCSI channel.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_OUT_OF_RESOURCES There are not enough resources to allocate DevicePath.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncExtScsiPassThruBuildDevicePath (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 *Target,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT64 Lun,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Used to translate a device path node to a Target ID and LUN.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param This A pointer to the EFI_EXT_SCSI_PASS_THRU_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param DevicePath A pointer to a single device path node that describes the SCSI device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync on the SCSI channel.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Target A pointer to the Target Array which represents the ID of a SCSI device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync on the SCSI channel.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Lun A pointer to the LUN of a SCSI device on the SCSI channel.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS DevicePath was successfully translated to a Target ID and
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync LUN, and they were returned in Target and Lun.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER DevicePath or Target or Lun is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_FOUND A valid translation from DevicePath to a Target ID and LUN
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync does not exist.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_UNSUPPORTED This driver does not support the device path node type in
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DevicePath.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncExtScsiPassThruGetTargetLun (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT UINT8 **Target,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT UINT64 *Lun
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Resets a SCSI channel. This operation resets all the SCSI devices connected to the SCSI channel.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param This A pointer to the EFI_EXT_SCSI_PASS_THRU_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The SCSI channel was reset.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR A device error occurred while attempting to reset the SCSI channel.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_TIMEOUT A timeout occurred while attempting to reset the SCSI channel.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_UNSUPPORTED The SCSI channel does not support a channel reset operation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncExtScsiPassThruResetChannel (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Resets a SCSI logical unit that is connected to a SCSI channel.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param This A pointer to the EFI_EXT_SCSI_PASS_THRU_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Target The Target is an array of size TARGET_MAX_BYTE and it represents the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync target port ID of the SCSI device containing the SCSI logical unit to
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync reset. Transport drivers may chose to utilize a subset of this array to suit
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the representation of their targets.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Lun The LUN of the SCSI device to reset.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The SCSI device specified by Target and Lun was reset.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER Target or Lun is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_TIMEOUT A timeout occurred while attempting to reset the SCSI device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync specified by Target and Lun.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_UNSUPPORTED The SCSI channel does not support a target reset operation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR A device error occurred while attempting to reset the SCSI device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync specified by Target and Lun.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncExtScsiPassThruResetTargetLun (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 *Target,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT64 Lun
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Used to retrieve the list of legal Target IDs for SCSI devices on a SCSI channel. These can either
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync be the list SCSI devices that are actually present on the SCSI channel, or the list of legal Target IDs
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync for the SCSI channel. Regardless, the caller of this function must probe the Target ID returned to
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync see if a SCSI device is actually present at that location on the SCSI channel.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param This A pointer to the EFI_EXT_SCSI_PASS_THRU_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param Target (TARGET_MAX_BYTES) of a SCSI device present on the SCSI channel.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync On output, a pointer to the Target ID (an array of
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync TARGET_MAX_BYTES) of the next SCSI device present on a SCSI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync channel. An input value of 0xF(all bytes in the array are 0xF) in the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Target array retrieves the Target ID of the first SCSI device present on a
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync SCSI channel.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The Target ID of the next SCSI device on the SCSI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync channel was returned in Target.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER Target or Lun is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_TIMEOUT Target array is not all 0xF, and Target was not
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync returned on a previous call to GetNextTarget().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_NOT_FOUND There are no more SCSI devices on this SCSI channel.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncExtScsiPassThruGetNextTarget (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT UINT8 **Target
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Initialize ATA host controller at IDE mode.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The function is designed to initialize ATA host controller.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Instance A pointer to the ATA_ATAPI_PASS_THRU_INSTANCE instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncIdeModeInitialization (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN ATA_ATAPI_PASS_THRU_INSTANCE *Instance
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Initialize ATA host controller at AHCI mode.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The function is designed to initialize ATA host controller.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Instance A pointer to the ATA_ATAPI_PASS_THRU_INSTANCE instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncAhciModeInitialization (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN ATA_ATAPI_PASS_THRU_INSTANCE *Instance
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Start a non data transfer on specific port.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] PciIo The PCI IO protocol instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] AhciRegisters The pointer to the EFI_AHCI_REGISTERS.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Port The number of port.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] PortMultiplier The timeout value of stop.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] AtapiCommand The atapi command will be used for the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync transfer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] AtapiCommandLength The length of the atapi command.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] AtaCommandBlock The EFI_ATA_COMMAND_BLOCK data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] AtaStatusBlock The EFI_ATA_STATUS_BLOCK data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Timeout The timeout value of non data transfer, uses 100ns as a unit.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Task Optional. Pointer to the ATA_NONBLOCK_TASK
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync used by non-blocking mode.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR The non data transfer abort with error occurs.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_TIMEOUT The operation is time out.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_UNSUPPORTED The device is not ready for transfer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The non data transfer executes successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncAhciNonDataTransfer (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_PCI_IO_PROTOCOL *PciIo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_AHCI_REGISTERS *AhciRegisters,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 Port,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 PortMultiplier,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_AHCI_ATAPI_COMMAND *AtapiCommand OPTIONAL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 AtapiCommandLength,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_ATA_COMMAND_BLOCK *AtaCommandBlock,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT EFI_ATA_STATUS_BLOCK *AtaStatusBlock,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT64 Timeout,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN ATA_NONBLOCK_TASK *Task
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Start a DMA data transfer on specific port
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Instance The ATA_ATAPI_PASS_THRU_INSTANCE protocol instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] AhciRegisters The pointer to the EFI_AHCI_REGISTERS.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Port The number of port.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] PortMultiplier The timeout value of stop.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] AtapiCommand The atapi command will be used for the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync transfer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] AtapiCommandLength The length of the atapi command.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Read The transfer direction.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] AtaCommandBlock The EFI_ATA_COMMAND_BLOCK data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] AtaStatusBlock The EFI_ATA_STATUS_BLOCK data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] MemoryAddr The pointer to the data buffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] DataCount The data count to be transferred.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Timeout The timeout value of non data transfer, uses 100ns as a unit.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Task Optional. Pointer to the ATA_NONBLOCK_TASK
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync used by non-blocking mode.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR The DMA data transfer abort with error occurs.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_TIMEOUT The operation is time out.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_UNSUPPORTED The device is not ready for transfer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The DMA data transfer executes successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncAhciDmaTransfer (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN ATA_ATAPI_PASS_THRU_INSTANCE *Instance,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_AHCI_REGISTERS *AhciRegisters,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 Port,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 PortMultiplier,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_AHCI_ATAPI_COMMAND *AtapiCommand OPTIONAL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 AtapiCommandLength,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN BOOLEAN Read,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_ATA_COMMAND_BLOCK *AtaCommandBlock,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT EFI_ATA_STATUS_BLOCK *AtaStatusBlock,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT VOID *MemoryAddr,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT32 DataCount,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT64 Timeout,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN ATA_NONBLOCK_TASK *Task
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Start a PIO data transfer on specific port.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] PciIo The PCI IO protocol instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] AhciRegisters The pointer to the EFI_AHCI_REGISTERS.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Port The number of port.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] PortMultiplier The timeout value of stop.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] AtapiCommand The atapi command will be used for the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync transfer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] AtapiCommandLength The length of the atapi command.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Read The transfer direction.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] AtaCommandBlock The EFI_ATA_COMMAND_BLOCK data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] AtaStatusBlock The EFI_ATA_STATUS_BLOCK data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] MemoryAddr The pointer to the data buffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] DataCount The data count to be transferred.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Timeout The timeout value of non data transfer, uses 100ns as a unit.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Task Optional. Pointer to the ATA_NONBLOCK_TASK
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync used by non-blocking mode.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR The PIO data transfer abort with error occurs.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_TIMEOUT The operation is time out.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_UNSUPPORTED The device is not ready for transfer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The PIO data transfer executes successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncAhciPioTransfer (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_PCI_IO_PROTOCOL *PciIo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_AHCI_REGISTERS *AhciRegisters,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 Port,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 PortMultiplier,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_AHCI_ATAPI_COMMAND *AtapiCommand OPTIONAL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 AtapiCommandLength,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN BOOLEAN Read,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_ATA_COMMAND_BLOCK *AtaCommandBlock,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT EFI_ATA_STATUS_BLOCK *AtaStatusBlock,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT VOID *MemoryAddr,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT32 DataCount,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT64 Timeout,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN ATA_NONBLOCK_TASK *Task
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Send ATA command into device with NON_DATA protocol
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] PciIo A pointer to ATA_ATAPI_PASS_THRU_INSTANCE
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync data structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] IdeRegisters A pointer to EFI_IDE_REGISTERS data structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] AtaCommandBlock A pointer to EFI_ATA_COMMAND_BLOCK data
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] AtaStatusBlock A pointer to EFI_ATA_STATUS_BLOCK data structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Timeout The time to complete the command, uses 100ns as a unit.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Task Optional. Pointer to the ATA_NONBLOCK_TASK
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync used by non-blocking mode.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS Reading succeed
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_ABORTED Command failed
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR Device status error.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncAtaNonDataCommandIn (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_PCI_IO_PROTOCOL *PciIo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_IDE_REGISTERS *IdeRegisters,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_ATA_COMMAND_BLOCK *AtaCommandBlock,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT EFI_ATA_STATUS_BLOCK *AtaStatusBlock,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT64 Timeout,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN ATA_NONBLOCK_TASK *Task
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Perform an ATA Udma operation (Read, ReadExt, Write, WriteExt).
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Instance A pointer to ATA_ATAPI_PASS_THRU_INSTANCE data
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] IdeRegisters A pointer to EFI_IDE_REGISTERS data structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Read Flag used to determine the data transfer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync direction. Read equals 1, means data transferred
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync from device to host;Read equals 0, means data
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync transferred from host to device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] DataBuffer A pointer to the source buffer for the data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] DataLength The length of the data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] AtaCommandBlock A pointer to EFI_ATA_COMMAND_BLOCK data structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] AtaStatusBlock A pointer to EFI_ATA_STATUS_BLOCK data structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Timeout The time to complete the command, uses 100ns as a unit.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Task Optional. Pointer to the ATA_NONBLOCK_TASK
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync used by non-blocking mode.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS the operation is successful.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_OUT_OF_RESOURCES Build PRD table failed
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_UNSUPPORTED Unknown channel or operations command
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR Ata command execute failed
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncAtaUdmaInOut (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN ATA_ATAPI_PASS_THRU_INSTANCE *Instance,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_IDE_REGISTERS *IdeRegisters,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN BOOLEAN Read,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN VOID *DataBuffer,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT64 DataLength,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_ATA_COMMAND_BLOCK *AtaCommandBlock,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT EFI_ATA_STATUS_BLOCK *AtaStatusBlock,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT64 Timeout,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN ATA_NONBLOCK_TASK *Task
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function is used to send out ATA commands conforms to the PIO Data In Protocol.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] PciIo A pointer to ATA_ATAPI_PASS_THRU_INSTANCE data
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] IdeRegisters A pointer to EFI_IDE_REGISTERS data structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] Buffer A pointer to the source buffer for the data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] ByteCount The length of the data.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Read Flag used to determine the data transfer direction.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Read equals 1, means data transferred from device
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync to host;Read equals 0, means data transferred
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync from host to device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] AtaCommandBlock A pointer to EFI_ATA_COMMAND_BLOCK data structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] AtaStatusBlock A pointer to EFI_ATA_STATUS_BLOCK data structure.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Timeout The time to complete the command, uses 100ns as a unit.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Task Optional. Pointer to the ATA_NONBLOCK_TASK
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync used by non-blocking mode.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS send out the ATA command and device send required data successfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR command sent failed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFIAPI
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncAtaPioDataInOut (
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_PCI_IO_PROTOCOL *PciIo,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_IDE_REGISTERS *IdeRegisters,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT VOID *Buffer,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT64 ByteCount,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN BOOLEAN Read,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_ATA_COMMAND_BLOCK *AtaCommandBlock,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT EFI_ATA_STATUS_BLOCK *AtaStatusBlock,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT64 Timeout,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN ATA_NONBLOCK_TASK *Task
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync