1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618 |
- /** @file
- Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
- Module Name: AtapiPassThru.h
- **/
- #ifndef _APT_H
- #define _APT_H
- #include <Uefi.h>
- #include <Protocol/ScsiPassThru.h>
- #include <Protocol/ScsiPassThruExt.h>
- #include <Protocol/PciIo.h>
- #include <Protocol/DriverSupportedEfiVersion.h>
- #include <Library/DebugLib.h>
- #include <Library/UefiDriverEntryPoint.h>
- #include <Library/BaseLib.h>
- #include <Library/UefiLib.h>
- #include <Library/BaseMemoryLib.h>
- #include <Library/MemoryAllocationLib.h>
- #include <Library/UefiBootServicesTableLib.h>
- #include <Library/PcdLib.h>
- #include <Library/DevicePathLib.h>
- #include <IndustryStandard/Pci.h>
- #define MAX_TARGET_ID 4
- //
- // IDE Registers
- //
- typedef union {
- UINT16 Command; /* when write */
- UINT16 Status; /* when read */
- } IDE_CMD_OR_STATUS;
- typedef union {
- UINT16 Error; /* when read */
- UINT16 Feature; /* when write */
- } IDE_ERROR_OR_FEATURE;
- typedef union {
- UINT16 AltStatus; /* when read */
- UINT16 DeviceControl; /* when write */
- } IDE_AltStatus_OR_DeviceControl;
- typedef enum {
- IdePrimary = 0,
- IdeSecondary = 1,
- IdeMaxChannel = 2
- } EFI_IDE_CHANNEL;
- ///
- //
- // Bit definitions in Programming Interface byte of the Class Code field
- // in PCI IDE controller's Configuration Space
- //
- #define IDE_PRIMARY_OPERATING_MODE BIT0
- #define IDE_PRIMARY_PROGRAMMABLE_INDICATOR BIT1
- #define IDE_SECONDARY_OPERATING_MODE BIT2
- #define IDE_SECONDARY_PROGRAMMABLE_INDICATOR BIT3
- #define ATAPI_MAX_CHANNEL 2
- ///
- /// IDE registers set
- ///
- typedef struct {
- UINT16 Data;
- IDE_ERROR_OR_FEATURE Reg1;
- UINT16 SectorCount;
- UINT16 SectorNumber;
- UINT16 CylinderLsb;
- UINT16 CylinderMsb;
- UINT16 Head;
- IDE_CMD_OR_STATUS Reg;
- IDE_AltStatus_OR_DeviceControl Alt;
- UINT16 DriveAddress;
- } IDE_BASE_REGISTERS;
- #define ATAPI_SCSI_PASS_THRU_DEV_SIGNATURE SIGNATURE_32 ('a', 's', 'p', 't')
- typedef struct {
- UINTN Signature;
- EFI_HANDLE Handle;
- EFI_SCSI_PASS_THRU_PROTOCOL ScsiPassThru;
- EFI_EXT_SCSI_PASS_THRU_PROTOCOL ExtScsiPassThru;
- EFI_PCI_IO_PROTOCOL *PciIo;
- UINT64 OriginalPciAttributes;
- //
- // Local Data goes here
- //
- IDE_BASE_REGISTERS *IoPort;
- IDE_BASE_REGISTERS AtapiIoPortRegisters[2];
- UINT32 LatestTargetId;
- UINT64 LatestLun;
- } ATAPI_SCSI_PASS_THRU_DEV;
- //
- // IDE registers' base addresses
- //
- typedef struct {
- UINT16 CommandBlockBaseAddr;
- UINT16 ControlBlockBaseAddr;
- } IDE_REGISTERS_BASE_ADDR;
- #define ATAPI_SCSI_PASS_THRU_DEV_FROM_THIS(a) \
- CR (a, \
- ATAPI_SCSI_PASS_THRU_DEV, \
- ScsiPassThru, \
- ATAPI_SCSI_PASS_THRU_DEV_SIGNATURE \
- )
- #define ATAPI_EXT_SCSI_PASS_THRU_DEV_FROM_THIS(a) \
- CR (a, \
- ATAPI_SCSI_PASS_THRU_DEV, \
- ExtScsiPassThru, \
- ATAPI_SCSI_PASS_THRU_DEV_SIGNATURE \
- )
- //
- // Global Variables
- //
- extern EFI_DRIVER_BINDING_PROTOCOL gAtapiScsiPassThruDriverBinding;
- extern EFI_COMPONENT_NAME_PROTOCOL gAtapiScsiPassThruComponentName;
- extern EFI_COMPONENT_NAME2_PROTOCOL gAtapiScsiPassThruComponentName2;
- extern EFI_DRIVER_SUPPORTED_EFI_VERSION_PROTOCOL gAtapiScsiPassThruDriverSupportedEfiVersion;
- //
- // ATAPI Command op code
- //
- #define OP_INQUIRY 0x12
- #define OP_LOAD_UNLOAD_CD 0xa6
- #define OP_MECHANISM_STATUS 0xbd
- #define OP_MODE_SELECT_10 0x55
- #define OP_MODE_SENSE_10 0x5a
- #define OP_PAUSE_RESUME 0x4b
- #define OP_PLAY_AUDIO_10 0x45
- #define OP_PLAY_AUDIO_MSF 0x47
- #define OP_PLAY_CD 0xbc
- #define OP_PLAY_CD_MSF 0xb4
- #define OP_PREVENT_ALLOW_MEDIUM_REMOVAL 0x1e
- #define OP_READ_10 0x28
- #define OP_READ_12 0xa8
- #define OP_READ_CAPACITY 0x25
- #define OP_READ_CD 0xbe
- #define OP_READ_CD_MSF 0xb9
- #define OP_READ_HEADER 0x44
- #define OP_READ_SUB_CHANNEL 0x42
- #define OP_READ_TOC 0x43
- #define OP_REQUEST_SENSE 0x03
- #define OP_SCAN 0xba
- #define OP_SEEK_10 0x2b
- #define OP_SET_CD_SPEED 0xbb
- #define OP_STOPPLAY_SCAN 0x4e
- #define OP_START_STOP_UNIT 0x1b
- #define OP_TEST_UNIT_READY 0x00
- #define OP_FORMAT_UNIT 0x04
- #define OP_READ_FORMAT_CAPACITIES 0x23
- #define OP_VERIFY 0x2f
- #define OP_WRITE_10 0x2a
- #define OP_WRITE_12 0xaa
- #define OP_WRITE_AND_VERIFY 0x2e
- //
- // ATA Command
- //
- #define ATAPI_SOFT_RESET_CMD 0x08
- typedef enum {
- DataIn = 0,
- DataOut = 1,
- DataBi = 2,
- NoData = 3,
- End = 0xff
- } DATA_DIRECTION;
- typedef struct {
- UINT8 OpCode;
- DATA_DIRECTION Direction;
- } SCSI_COMMAND_SET;
- #define MAX_CHANNEL 2
- #define ValidCdbLength(Len) ((Len) == 6 || (Len) == 10 || (Len) == 12) ? 1 : 0
- //
- // IDE registers bit definitions
- //
- // ATA Err Reg bitmap
- //
- #define BBK_ERR BIT7 ///< Bad block detected
- #define UNC_ERR BIT6 ///< Uncorrectable Data
- #define MC_ERR BIT5 ///< Media Change
- #define IDNF_ERR BIT4 ///< ID Not Found
- #define MCR_ERR BIT3 ///< Media Change Requested
- #define ABRT_ERR BIT2 ///< Aborted Command
- #define TK0NF_ERR BIT1 ///< Track 0 Not Found
- #define AMNF_ERR BIT0 ///< Address Mark Not Found
- //
- // ATAPI Err Reg bitmap
- //
- #define SENSE_KEY_ERR (BIT7 | BIT6 | BIT5 | BIT4)
- #define EOM_ERR BIT1 ///< End of Media Detected
- #define ILI_ERR BIT0 ///< Illegal Length Indication
- //
- // Device/Head Reg
- //
- #define LBA_MODE BIT6
- #define DEV BIT4
- #define HS3 BIT3
- #define HS2 BIT2
- #define HS1 BIT1
- #define HS0 BIT0
- #define CHS_MODE (0)
- #define DRV0 (0)
- #define DRV1 (1)
- #define MST_DRV DRV0
- #define SLV_DRV DRV1
- //
- // Status Reg
- //
- #define BSY BIT7 ///< Controller Busy
- #define DRDY BIT6 ///< Drive Ready
- #define DWF BIT5 ///< Drive Write Fault
- #define DSC BIT4 ///< Disk Seek Complete
- #define DRQ BIT3 ///< Data Request
- #define CORR BIT2 ///< Corrected Data
- #define IDX BIT1 ///< Index
- #define ERR BIT0 ///< Error
- #define CHECK BIT0 ///< Check bit for ATAPI Status Reg
- //
- // Device Control Reg
- //
- #define SRST BIT2 ///< Software Reset
- #define IEN_L BIT1 ///< Interrupt Enable
- //
- // ATAPI Feature Register
- //
- #define OVERLAP BIT1
- #define DMA BIT0
- //
- // ATAPI Interrupt Reason Reson Reg (ATA Sector Count Register)
- //
- #define RELEASE BIT2
- #define IO BIT1
- #define CoD BIT0
- #define PACKET_CMD 0xA0
- #define DEFAULT_CMD (0xa0)
- //
- // default content of device control register, disable INT
- //
- #define DEFAULT_CTL (0x0a)
- #define MAX_ATAPI_BYTE_COUNT (0xfffe)
- //
- // function prototype
- //
- EFI_STATUS
- EFIAPI
- AtapiScsiPassThruDriverBindingSupported (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE Controller,
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
- );
- EFI_STATUS
- EFIAPI
- AtapiScsiPassThruDriverBindingStart (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE Controller,
- IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
- );
- EFI_STATUS
- EFIAPI
- AtapiScsiPassThruDriverBindingStop (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE Controller,
- IN UINTN NumberOfChildren,
- IN EFI_HANDLE *ChildHandleBuffer
- );
- //
- // EFI Component Name Functions
- //
- /**
- Retrieves a Unicode string that is the user readable name of the driver.
- This function retrieves the user readable name of a driver in the form of a
- Unicode string. If the driver specified by This has a user readable name in
- the language specified by Language, then a pointer to the driver name is
- returned in DriverName, and EFI_SUCCESS is returned. If the driver specified
- by This does not support the language specified by Language,
- then EFI_UNSUPPORTED is returned.
- @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
- EFI_COMPONENT_NAME_PROTOCOL instance.
- @param Language[in] A pointer to a Null-terminated ASCII string
- array indicating the language. This is the
- language of the driver name that the caller is
- requesting, and it must match one of the
- languages specified in SupportedLanguages. The
- number of languages supported by a driver is up
- to the driver writer. Language is specified
- in RFC 4646 or ISO 639-2 language code format.
- @param DriverName[out] A pointer to the Unicode string to return.
- This Unicode string is the name of the
- driver specified by This in the language
- specified by Language.
- @retval EFI_SUCCESS The Unicode string for the Driver specified by
- This and the language specified by Language was
- returned in DriverName.
- @retval EFI_INVALID_PARAMETER Language is NULL.
- @retval EFI_INVALID_PARAMETER DriverName is NULL.
- @retval EFI_UNSUPPORTED The driver specified by This does not support
- the language specified by Language.
- **/
- EFI_STATUS
- EFIAPI
- AtapiScsiPassThruComponentNameGetDriverName (
- IN EFI_COMPONENT_NAME_PROTOCOL *This,
- IN CHAR8 *Language,
- OUT CHAR16 **DriverName
- );
- /**
- Retrieves a Unicode string that is the user readable name of the controller
- that is being managed by a driver.
- This function retrieves the user readable name of the controller specified by
- ControllerHandle and ChildHandle in the form of a Unicode string. If the
- driver specified by This has a user readable name in the language specified by
- Language, then a pointer to the controller name is returned in ControllerName,
- and EFI_SUCCESS is returned. If the driver specified by This is not currently
- managing the controller specified by ControllerHandle and ChildHandle,
- then EFI_UNSUPPORTED is returned. If the driver specified by This does not
- support the language specified by Language, then EFI_UNSUPPORTED is returned.
- @param This[in] A pointer to the EFI_COMPONENT_NAME2_PROTOCOL or
- EFI_COMPONENT_NAME_PROTOCOL instance.
- @param ControllerHandle[in] The handle of a controller that the driver
- specified by This is managing. This handle
- specifies the controller whose name is to be
- returned.
- @param ChildHandle[in] The handle of the child controller to retrieve
- the name of. This is an optional parameter that
- may be NULL. It will be NULL for device
- drivers. It will also be NULL for a bus drivers
- that wish to retrieve the name of the bus
- controller. It will not be NULL for a bus
- driver that wishes to retrieve the name of a
- child controller.
- @param Language[in] A pointer to a Null-terminated ASCII string
- array indicating the language. This is the
- language of the driver name that the caller is
- requesting, and it must match one of the
- languages specified in SupportedLanguages. The
- number of languages supported by a driver is up
- to the driver writer. Language is specified in
- RFC 4646 or ISO 639-2 language code format.
- @param ControllerName[out] A pointer to the Unicode string to return.
- This Unicode string is the name of the
- controller specified by ControllerHandle and
- ChildHandle in the language specified by
- Language from the point of view of the driver
- specified by This.
- @retval EFI_SUCCESS The Unicode string for the user readable name in
- the language specified by Language for the
- driver specified by This was returned in
- DriverName.
- @retval EFI_INVALID_PARAMETER ControllerHandle is NULL.
- @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a valid
- EFI_HANDLE.
- @retval EFI_INVALID_PARAMETER Language is NULL.
- @retval EFI_INVALID_PARAMETER ControllerName is NULL.
- @retval EFI_UNSUPPORTED The driver specified by This is not currently
- managing the controller specified by
- ControllerHandle and ChildHandle.
- @retval EFI_UNSUPPORTED The driver specified by This does not support
- the language specified by Language.
- **/
- EFI_STATUS
- EFIAPI
- AtapiScsiPassThruComponentNameGetControllerName (
- IN EFI_COMPONENT_NAME_PROTOCOL *This,
- IN EFI_HANDLE ControllerHandle,
- IN EFI_HANDLE ChildHandle OPTIONAL,
- IN CHAR8 *Language,
- OUT CHAR16 **ControllerName
- );
- EFI_STATUS
- EFIAPI
- AtapiScsiPassThruDriverEntryPoint (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
- /*++
- Routine Description:
- Entry point for EFI drivers.
- Arguments:
- ImageHandle - EFI_HANDLE
- SystemTable - EFI_SYSTEM_TABLE
- Returns:
- EFI_SUCCESS
- Others
- --*/
- ;
- EFI_STATUS
- RegisterAtapiScsiPassThru (
- IN EFI_DRIVER_BINDING_PROTOCOL *This,
- IN EFI_HANDLE Controller,
- IN EFI_PCI_IO_PROTOCOL *PciIo,
- IN UINT64 OriginalPciAttributes
- )
- /*++
- Routine Description:
- Attaches SCSI Pass Thru Protocol for specified IDE channel.
-
- Arguments:
- This - Protocol instance pointer.
- Controller - Parent device handle to the IDE channel.
- PciIo - PCI I/O protocol attached on the "Controller".
-
- Returns:
- Always return EFI_SUCCESS unless installing SCSI Pass Thru Protocol failed.
- --*/
- ;
- EFI_STATUS
- EFIAPI
- AtapiScsiPassThruFunction (
- IN EFI_SCSI_PASS_THRU_PROTOCOL *This,
- IN UINT32 Target,
- IN UINT64 Lun,
- IN OUT EFI_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet,
- IN EFI_EVENT Event OPTIONAL
- )
- /*++
- Routine Description:
- Implements EFI_SCSI_PASS_THRU_PROTOCOL.PassThru() function.
- Arguments:
- This: The EFI_SCSI_PASS_THRU_PROTOCOL instance.
- Target: The Target ID of the ATAPI device to send the SCSI
- Request Packet. To ATAPI devices attached on an IDE
- Channel, Target ID 0 indicates Master device;Target
- ID 1 indicates Slave device.
- Lun: The LUN of the ATAPI device to send the SCSI Request
- Packet. To the ATAPI device, Lun is always 0.
- Packet: The SCSI Request Packet to send to the ATAPI device
- specified by Target and Lun.
- Event: If non-blocking I/O is not supported then Event is ignored,
- and blocking I/O is performed.
- If Event is NULL, then blocking I/O is performed.
- If Event is not NULL and non blocking I/O is supported,
- then non-blocking I/O is performed, and Event will be signaled
- when the SCSI Request Packet completes.
- Returns:
- EFI_STATUS
- --*/
- ;
- EFI_STATUS
- EFIAPI
- AtapiScsiPassThruGetNextDevice (
- IN EFI_SCSI_PASS_THRU_PROTOCOL *This,
- IN OUT UINT32 *Target,
- IN OUT UINT64 *Lun
- )
- /*++
- Routine Description:
- Used to retrieve the list of legal Target IDs for SCSI devices
- on a SCSI channel.
- Arguments:
- This - Protocol instance pointer.
- Target - On input, a pointer to the Target ID of a SCSI
- device present on the SCSI channel. On output,
- a pointer to the Target ID of the next SCSI device
- present on a SCSI channel. An input value of
- 0xFFFFFFFF retrieves the Target ID of the first
- SCSI device present on a SCSI channel.
- Lun - On input, a pointer to the LUN of a SCSI device
- present on the SCSI channel. On output, a pointer
- to the LUN of the next SCSI device present on
- a SCSI channel.
- Returns:
- EFI_SUCCESS - The Target ID and Lun of the next SCSI device
- on the SCSI channel was returned in Target and Lun.
- EFI_NOT_FOUND - There are no more SCSI devices on this SCSI channel.
- EFI_INVALID_PARAMETER - Target is not 0xFFFFFFFF,and Target and Lun were not
- returned on a previous call to GetNextDevice().
- --*/
- ;
- EFI_STATUS
- EFIAPI
- AtapiScsiPassThruBuildDevicePath (
- IN EFI_SCSI_PASS_THRU_PROTOCOL *This,
- IN UINT32 Target,
- IN UINT64 Lun,
- IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath
- )
- /*++
- Routine Description:
- Used to allocate and build a device path node for a SCSI device
- on a SCSI channel. Would not build device path for a SCSI Host Controller.
- Arguments:
- This - Protocol instance pointer.
- Target - The Target ID of the SCSI device for which
- a device path node is to be allocated and built.
- Lun - The LUN of the SCSI device for which a device
- path node is to be allocated and built.
- DevicePath - A pointer to a single device path node that
- describes the SCSI device specified by
- Target and Lun. This function is responsible
- for allocating the buffer DevicePath with the boot
- service AllocatePool(). It is the caller's
- responsibility to free DevicePath when the caller
- is finished with DevicePath.
- Returns:
- EFI_SUCCESS - The device path node that describes the SCSI device
- specified by Target and Lun was allocated and
- returned in DevicePath.
- EFI_NOT_FOUND - The SCSI devices specified by Target and Lun does
- not exist on the SCSI channel.
- EFI_INVALID_PARAMETER - DevicePath is NULL.
- EFI_OUT_OF_RESOURCES - There are not enough resources to allocate
- DevicePath.
- --*/
- ;
- EFI_STATUS
- EFIAPI
- AtapiScsiPassThruGetTargetLun (
- IN EFI_SCSI_PASS_THRU_PROTOCOL *This,
- IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
- OUT UINT32 *Target,
- OUT UINT64 *Lun
- )
- /*++
- Routine Description:
- Used to translate a device path node to a Target ID and LUN.
- Arguments:
- This - Protocol instance pointer.
- DevicePath - A pointer to the device path node that
- describes a SCSI device on the SCSI channel.
- Target - A pointer to the Target ID of a SCSI device
- on the SCSI channel.
- Lun - A pointer to the LUN of a SCSI device on
- the SCSI channel.
- Returns:
- EFI_SUCCESS - DevicePath was successfully translated to a
- Target ID and LUN, and they were returned
- in Target and Lun.
- EFI_INVALID_PARAMETER - DevicePath/Target/Lun is NULL.
- EFI_UNSUPPORTED - This driver does not support the device path
- node type in DevicePath.
- EFI_NOT_FOUND - A valid translation from DevicePath to a
- Target ID and LUN does not exist.
- --*/
- ;
- EFI_STATUS
- EFIAPI
- AtapiScsiPassThruResetChannel (
- IN EFI_SCSI_PASS_THRU_PROTOCOL *This
- )
- /*++
- Routine Description:
- Resets a SCSI channel.This operation resets all the
- SCSI devices connected to the SCSI channel.
- Arguments:
- This - Protocol instance pointer.
- Returns:
- EFI_SUCCESS - The SCSI channel was reset.
- EFI_UNSUPPORTED - The SCSI channel does not support
- a channel reset operation.
- EFI_DEVICE_ERROR - A device error occurred while
- attempting to reset the SCSI channel.
- EFI_TIMEOUT - A timeout occurred while attempting
- to reset the SCSI channel.
- --*/
- ;
- EFI_STATUS
- EFIAPI
- AtapiScsiPassThruResetTarget (
- IN EFI_SCSI_PASS_THRU_PROTOCOL *This,
- IN UINT32 Target,
- IN UINT64 Lun
- )
- /*++
- Routine Description:
- Resets a SCSI device that is connected to a SCSI channel.
- Arguments:
- This - Protocol instance pointer.
- Target - The Target ID of the SCSI device to reset.
- Lun - The LUN of the SCSI device to reset.
-
- Returns:
- EFI_SUCCESS - The SCSI device specified by Target and
- Lun was reset.
- EFI_UNSUPPORTED - The SCSI channel does not support a target
- reset operation.
- EFI_INVALID_PARAMETER - Target or Lun are invalid.
- EFI_DEVICE_ERROR - A device error occurred while attempting
- to reset the SCSI device specified by Target
- and Lun.
- EFI_TIMEOUT - A timeout occurred while attempting to reset
- the SCSI device specified by Target and Lun.
- --*/
- ;
- EFI_STATUS
- EFIAPI
- AtapiExtScsiPassThruFunction (
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
- IN UINT8 *Target,
- IN UINT64 Lun,
- IN OUT EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet,
- IN EFI_EVENT Event OPTIONAL
- )
- /*++
- Routine Description:
- Implements EFI_EXT_SCSI_PASS_THRU_PROTOCOL.PassThru() function.
- Arguments:
- This: The EFI_EXT_SCSI_PASS_THRU_PROTOCOL instance.
- Target: The Target ID of the ATAPI device to send the SCSI
- Request Packet. To ATAPI devices attached on an IDE
- Channel, Target ID 0 indicates Master device;Target
- ID 1 indicates Slave device.
- Lun: The LUN of the ATAPI device to send the SCSI Request
- Packet. To the ATAPI device, Lun is always 0.
- Packet: The SCSI Request Packet to send to the ATAPI device
- specified by Target and Lun.
- Event: If non-blocking I/O is not supported then Event is ignored,
- and blocking I/O is performed.
- If Event is NULL, then blocking I/O is performed.
- If Event is not NULL and non blocking I/O is supported,
- then non-blocking I/O is performed, and Event will be signaled
- when the SCSI Request Packet completes.
- Returns:
- EFI_STATUS
- --*/
- ;
- EFI_STATUS
- EFIAPI
- AtapiExtScsiPassThruGetNextTargetLun (
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
- IN OUT UINT8 **Target,
- IN OUT UINT64 *Lun
- )
- /*++
- Routine Description:
- Used to retrieve the list of legal Target IDs for SCSI devices
- on a SCSI channel.
- Arguments:
- This - Protocol instance pointer.
- Target - On input, a pointer to the Target ID of a SCSI
- device present on the SCSI channel. On output,
- a pointer to the Target ID of the next SCSI device
- present on a SCSI channel. An input value of
- 0xFFFFFFFF retrieves the Target ID of the first
- SCSI device present on a SCSI channel.
- Lun - On input, a pointer to the LUN of a SCSI device
- present on the SCSI channel. On output, a pointer
- to the LUN of the next SCSI device present on
- a SCSI channel.
- Returns:
- EFI_SUCCESS - The Target ID and Lun of the next SCSI device
- on the SCSI channel was returned in Target and Lun.
- EFI_NOT_FOUND - There are no more SCSI devices on this SCSI channel.
- EFI_INVALID_PARAMETER - Target is not 0xFFFFFFFF,and Target and Lun were not
- returned on a previous call to GetNextDevice().
- --*/
- ;
- EFI_STATUS
- EFIAPI
- AtapiExtScsiPassThruBuildDevicePath (
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
- IN UINT8 *Target,
- IN UINT64 Lun,
- IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath
- )
- /*++
- Routine Description:
- Used to allocate and build a device path node for a SCSI device
- on a SCSI channel. Would not build device path for a SCSI Host Controller.
- Arguments:
- This - Protocol instance pointer.
- Target - The Target ID of the SCSI device for which
- a device path node is to be allocated and built.
- Lun - The LUN of the SCSI device for which a device
- path node is to be allocated and built.
- DevicePath - A pointer to a single device path node that
- describes the SCSI device specified by
- Target and Lun. This function is responsible
- for allocating the buffer DevicePath with the boot
- service AllocatePool(). It is the caller's
- responsibility to free DevicePath when the caller
- is finished with DevicePath.
- Returns:
- EFI_SUCCESS - The device path node that describes the SCSI device
- specified by Target and Lun was allocated and
- returned in DevicePath.
- EFI_NOT_FOUND - The SCSI devices specified by Target and Lun does
- not exist on the SCSI channel.
- EFI_INVALID_PARAMETER - DevicePath is NULL.
- EFI_OUT_OF_RESOURCES - There are not enough resources to allocate
- DevicePath.
- --*/
- ;
- EFI_STATUS
- EFIAPI
- AtapiExtScsiPassThruGetTargetLun (
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
- IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
- OUT UINT8 **Target,
- OUT UINT64 *Lun
- )
- /*++
- Routine Description:
- Used to translate a device path node to a Target ID and LUN.
- Arguments:
- This - Protocol instance pointer.
- DevicePath - A pointer to the device path node that
- describes a SCSI device on the SCSI channel.
- Target - A pointer to the Target ID of a SCSI device
- on the SCSI channel.
- Lun - A pointer to the LUN of a SCSI device on
- the SCSI channel.
- Returns:
- EFI_SUCCESS - DevicePath was successfully translated to a
- Target ID and LUN, and they were returned
- in Target and Lun.
- EFI_INVALID_PARAMETER - DevicePath/Target/Lun is NULL.
- EFI_UNSUPPORTED - This driver does not support the device path
- node type in DevicePath.
- EFI_NOT_FOUND - A valid translation from DevicePath to a
- Target ID and LUN does not exist.
- --*/
- ;
- EFI_STATUS
- EFIAPI
- AtapiExtScsiPassThruResetChannel (
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This
- )
- /*++
- Routine Description:
- Resets a SCSI channel.This operation resets all the
- SCSI devices connected to the SCSI channel.
- Arguments:
- This - Protocol instance pointer.
- Returns:
- EFI_SUCCESS - The SCSI channel was reset.
- EFI_UNSUPPORTED - The SCSI channel does not support
- a channel reset operation.
- EFI_DEVICE_ERROR - A device error occurred while
- attempting to reset the SCSI channel.
- EFI_TIMEOUT - A timeout occurred while attempting
- to reset the SCSI channel.
- --*/
- ;
- EFI_STATUS
- EFIAPI
- AtapiExtScsiPassThruResetTarget (
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
- IN UINT8 *Target,
- IN UINT64 Lun
- )
- /*++
- Routine Description:
- Resets a SCSI device that is connected to a SCSI channel.
- Arguments:
- This - Protocol instance pointer.
- Target - The Target ID of the SCSI device to reset.
- Lun - The LUN of the SCSI device to reset.
-
- Returns:
- EFI_SUCCESS - The SCSI device specified by Target and
- Lun was reset.
- EFI_UNSUPPORTED - The SCSI channel does not support a target
- reset operation.
- EFI_INVALID_PARAMETER - Target or Lun are invalid.
- EFI_DEVICE_ERROR - A device error occurred while attempting
- to reset the SCSI device specified by Target
- and Lun.
- EFI_TIMEOUT - A timeout occurred while attempting to reset
- the SCSI device specified by Target and Lun.
- --*/
- ;
- EFI_STATUS
- EFIAPI
- AtapiExtScsiPassThruGetNextTarget (
- IN EFI_EXT_SCSI_PASS_THRU_PROTOCOL *This,
- IN OUT UINT8 **Target
- )
- /*++
- Routine Description:
- Used to retrieve the list of legal Target IDs for SCSI devices
- on a SCSI channel.
- Arguments:
- This - Protocol instance pointer.
- Target - On input, a pointer to the Target ID of a SCSI
- device present on the SCSI channel. On output,
- a pointer to the Target ID of the next SCSI device
- present on a SCSI channel. An input value of
- 0xFFFFFFFF retrieves the Target ID of the first
- SCSI device present on a SCSI channel.
- Lun - On input, a pointer to the LUN of a SCSI device
- present on the SCSI channel. On output, a pointer
- to the LUN of the next SCSI device present on
- a SCSI channel.
-
- Returns:
- EFI_SUCCESS - The Target ID and Lun of the next SCSI device
- on the SCSI channel was returned in Target and Lun.
- EFI_NOT_FOUND - There are no more SCSI devices on this SCSI channel.
- EFI_INVALID_PARAMETER - Target is not 0xFFFFFFFF,and Target and Lun were not
- returned on a previous call to GetNextDevice().
- --*/
- ;
- EFI_STATUS
- CheckSCSIRequestPacket (
- EFI_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet
- )
- /*++
- Routine Description:
- Checks the parameters in the SCSI Request Packet to make sure
- they are valid for a SCSI Pass Thru request.
- Arguments:
- Packet - The pointer of EFI_SCSI_PASS_THRU_SCSI_REQUEST_PACKET
- Returns:
- EFI_STATUS
- --*/
- ;
- EFI_STATUS
- SubmitBlockingIoCommand (
- ATAPI_SCSI_PASS_THRU_DEV *AtapiScsiPrivate,
- UINT32 Target,
- EFI_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet
- )
- /*++
- Routine Description:
- Performs blocking I/O request.
-
- Arguments:
- AtapiScsiPrivate: Private data structure for the specified channel.
- Target: The Target ID of the ATAPI device to send the SCSI
- Request Packet. To ATAPI devices attached on an IDE
- Channel, Target ID 0 indicates Master device;Target
- ID 1 indicates Slave device.
- Packet: The SCSI Request Packet to send to the ATAPI device
- specified by Target.
-
- Returns: EFI_STATUS
- --*/
- ;
- BOOLEAN
- IsCommandValid (
- EFI_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet
- )
- /*++
- Routine Description:
- Checks the requested SCSI command:
- Is it supported by this driver?
- Is the Data transfer direction reasonable?
- Arguments:
- Packet - The pointer of EFI_SCSI_PASS_THRU_SCSI_REQUEST_PACKET
- Returns:
- EFI_STATUS
- --*/
- ;
- EFI_STATUS
- CheckExtSCSIRequestPacket (
- EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet
- )
- /*++
- Routine Description:
- Checks the parameters in the SCSI Request Packet to make sure
- they are valid for a SCSI Pass Thru request.
- Arguments:
- Packet - The pointer of EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET
-
- Returns:
-
- EFI_STATUS
- --*/
- ;
- BOOLEAN
- IsExtCommandValid (
- EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet
- )
- /*++
-
- Routine Description:
- Checks the requested SCSI command:
- Is it supported by this driver?
- Is the Data transfer direction reasonable?
- Arguments:
- Packet - The pointer of EFI_SCSI_PASS_THRU_SCSI_REQUEST_PACKET
- Returns:
- EFI_STATUS
- --*/
- ;
- EFI_STATUS
- SubmitExtBlockingIoCommand (
- ATAPI_SCSI_PASS_THRU_DEV *AtapiScsiPrivate,
- UINT8 Target,
- EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET *Packet
- )
- /*++
- Routine Description:
- Performs blocking I/O request.
-
- Arguments:
- AtapiScsiPrivate: Private data structure for the specified channel.
- Target: The Target ID of the ATAPI device to send the SCSI
- Request Packet. To ATAPI devices attached on an IDE
- Channel, Target ID 0 indicates Master device;Target
- ID 1 indicates Slave device.
- Packet: The SCSI Request Packet to send to the ATAPI device
- specified by Target.
-
- Returns: EFI_STATUS
-
- --*/
- ;
- EFI_STATUS
- RequestSenseCommand (
- ATAPI_SCSI_PASS_THRU_DEV *AtapiScsiPrivate,
- UINT32 Target,
- UINT64 Timeout,
- VOID *SenseData,
- UINT8 *SenseDataLength
- )
- /*++
- Routine Description:
- Submit request sense command
- Arguments:
- AtapiScsiPrivate - The pointer of ATAPI_SCSI_PASS_THRU_DEV
- Target - The target ID
- Timeout - The time to complete the command
- SenseData - The buffer to fill in sense data
- SenseDataLength - The length of buffer
- Returns:
- EFI_STATUS
- --*/
- ;
- EFI_STATUS
- AtapiPacketCommand (
- ATAPI_SCSI_PASS_THRU_DEV *AtapiScsiPrivate,
- UINT32 Target,
- UINT8 *PacketCommand,
- VOID *Buffer,
- UINT32 *ByteCount,
- DATA_DIRECTION Direction,
- UINT64 TimeOutInMicroSeconds
- )
- /*++
- Routine Description:
- Submits ATAPI command packet to the specified ATAPI device.
-
- Arguments:
- AtapiScsiPrivate: Private data structure for the specified channel.
- Target: The Target ID of the ATAPI device to send the SCSI
- Request Packet. To ATAPI devices attached on an IDE
- Channel, Target ID 0 indicates Master device;Target
- ID 1 indicates Slave device.
- PacketCommand: Points to the ATAPI command packet.
- Buffer: Points to the transferred data.
- ByteCount: When input,indicates the buffer size; when output,
- indicates the actually transferred data size.
- Direction: Indicates the data transfer direction.
- TimeoutInMicroSeconds:
- The timeout, in micro second units, to use for the
- execution of this ATAPI command.
- A TimeoutInMicroSeconds value of 0 means that
- this function will wait indefinitely for the ATAPI
- command to execute.
- If TimeoutInMicroSeconds is greater than zero, then
- this function will return EFI_TIMEOUT if the time
- required to execute the ATAPI command is greater
- than TimeoutInMicroSeconds.
-
- Returns:
- EFI_STATUS
- --*/
- ;
- UINT8
- ReadPortB (
- IN EFI_PCI_IO_PROTOCOL *PciIo,
- IN UINT16 Port
- )
- /*++
- Routine Description:
- Read one byte from a specified I/O port.
- Arguments:
- PciIo - The pointer of EFI_PCI_IO_PROTOCOL
- Port - IO port
-
- Returns:
- A byte read out
- --*/
- ;
- UINT16
- ReadPortW (
- IN EFI_PCI_IO_PROTOCOL *PciIo,
- IN UINT16 Port
- )
- /*++
- Routine Description:
- Read one word from a specified I/O port.
- Arguments:
- PciIo - The pointer of EFI_PCI_IO_PROTOCOL
- Port - IO port
-
- Returns:
- A word read out
- --*/
- ;
- VOID
- WritePortB (
- IN EFI_PCI_IO_PROTOCOL *PciIo,
- IN UINT16 Port,
- IN UINT8 Data
- )
- /*++
- Routine Description:
- Write one byte to a specified I/O port.
- Arguments:
- PciIo - The pointer of EFI_PCI_IO_PROTOCOL
- Port - IO port
- Data - The data to write
-
- Returns:
-
- NONE
-
- --*/
- ;
- VOID
- WritePortW (
- IN EFI_PCI_IO_PROTOCOL *PciIo,
- IN UINT16 Port,
- IN UINT16 Data
- )
- /*++
- Routine Description:
- Write one word to a specified I/O port.
- Arguments:
- PciIo - The pointer of EFI_PCI_IO_PROTOCOL
- Port - IO port
- Data - The data to write
-
- Returns:
- NONE
-
- --*/
- ;
- EFI_STATUS
- StatusDRQClear (
- ATAPI_SCSI_PASS_THRU_DEV *AtapiScsiPrivate,
- UINT64 TimeOutInMicroSeconds
- )
- /*++
- Routine Description:
- Check whether DRQ is clear in the Status Register. (BSY must also be cleared)
- If TimeoutInMicroSeconds is zero, this routine should wait infinitely for
- DRQ clear. Otherwise, it will return EFI_TIMEOUT when specified time is
- elapsed.
- Arguments:
- AtapiScsiPrivate - The pointer of ATAPI_SCSI_PASS_THRU_DEV
- TimeoutInMicroSeconds - The time to wait for
-
- Returns:
- EFI_STATUS
- --*/
- ;
- EFI_STATUS
- AltStatusDRQClear (
- ATAPI_SCSI_PASS_THRU_DEV *AtapiScsiPrivate,
- UINT64 TimeOutInMicroSeconds
- )
- /*++
- Routine Description:
- Check whether DRQ is clear in the Alternate Status Register.
- (BSY must also be cleared).If TimeoutInMicroSeconds is zero, this routine should
- wait infinitely for DRQ clear. Otherwise, it will return EFI_TIMEOUT when specified time is
- elapsed.
- Arguments:
- AtapiScsiPrivate - The pointer of ATAPI_SCSI_PASS_THRU_DEV
- TimeoutInMicroSeconds - The time to wait for
-
- Returns:
- EFI_STATUS
- --*/
- ;
- EFI_STATUS
- StatusDRQReady (
- ATAPI_SCSI_PASS_THRU_DEV *AtapiScsiPrivate,
- UINT64 TimeOutInMicroSeconds
- )
- /*++
- Routine Description:
- Check whether DRQ is ready in the Status Register. (BSY must also be cleared)
- If TimeoutInMicroSeconds is zero, this routine should wait infinitely for
- DRQ ready. Otherwise, it will return EFI_TIMEOUT when specified time is
- elapsed.
- Arguments:
- AtapiScsiPrivate - The pointer of ATAPI_SCSI_PASS_THRU_DEV
- TimeoutInMicroSeconds - The time to wait for
-
- Returns:
- EFI_STATUS
- --*/
- ;
- EFI_STATUS
- AltStatusDRQReady (
- ATAPI_SCSI_PASS_THRU_DEV *AtapiScsiPrivate,
- UINT64 TimeOutInMicroSeconds
- )
- /*++
- Routine Description:
- Check whether DRQ is ready in the Alternate Status Register.
- (BSY must also be cleared)
- If TimeoutInMicroSeconds is zero, this routine should wait infinitely for
- DRQ ready. Otherwise, it will return EFI_TIMEOUT when specified time is
- elapsed.
- Arguments:
- AtapiScsiPrivate - The pointer of ATAPI_SCSI_PASS_THRU_DEV
- TimeoutInMicroSeconds - The time to wait for
-
- Returns:
- EFI_STATUS
- --*/
- ;
- EFI_STATUS
- StatusWaitForBSYClear (
- ATAPI_SCSI_PASS_THRU_DEV *AtapiScsiPrivate,
- UINT64 TimeoutInMicroSeconds
- )
- /*++
- Routine Description:
- Check whether BSY is clear in the Status Register.
- If TimeoutInMicroSeconds is zero, this routine should wait infinitely for
- BSY clear. Otherwise, it will return EFI_TIMEOUT when specified time is
- elapsed.
- Arguments:
- AtapiScsiPrivate - The pointer of ATAPI_SCSI_PASS_THRU_DEV
- TimeoutInMicroSeconds - The time to wait for
-
- Returns:
- EFI_STATUS
- --*/
- ;
- EFI_STATUS
- AltStatusWaitForBSYClear (
- ATAPI_SCSI_PASS_THRU_DEV *AtapiScsiPrivate,
- UINT64 TimeoutInMicroSeconds
- )
- /*++
- Routine Description:
- Check whether BSY is clear in the Alternate Status Register.
- If TimeoutInMicroSeconds is zero, this routine should wait infinitely for
- BSY clear. Otherwise, it will return EFI_TIMEOUT when specified time is
- elapsed.
- Arguments:
- AtapiScsiPrivate - The pointer of ATAPI_SCSI_PASS_THRU_DEV
- TimeoutInMicroSeconds - The time to wait for
-
- Returns:
- EFI_STATUS
- --*/
- ;
- EFI_STATUS
- StatusDRDYReady (
- ATAPI_SCSI_PASS_THRU_DEV *AtapiScsiPrivate,
- UINT64 TimeoutInMicroSeconds
- )
- /*++
- Routine Description:
- Check whether DRDY is ready in the Status Register.
- (BSY must also be cleared)
- If TimeoutInMicroSeconds is zero, this routine should wait infinitely for
- DRDY ready. Otherwise, it will return EFI_TIMEOUT when specified time is
- elapsed.
- Arguments:
- AtapiScsiPrivate - The pointer of ATAPI_SCSI_PASS_THRU_DEV
- TimeoutInMicroSeconds - The time to wait for
-
- Returns:
- EFI_STATUS
- --*/
- ;
- EFI_STATUS
- AltStatusDRDYReady (
- ATAPI_SCSI_PASS_THRU_DEV *AtapiScsiPrivate,
- UINT64 TimeoutInMicroSeconds
- )
- /*++
- Routine Description:
- Check whether DRDY is ready in the Alternate Status Register.
- (BSY must also be cleared)
- If TimeoutInMicroSeconds is zero, this routine should wait infinitely for
- DRDY ready. Otherwise, it will return EFI_TIMEOUT when specified time is
- elapsed.
- Arguments:
- AtapiScsiPrivate - The pointer of ATAPI_SCSI_PASS_THRU_DEV
- TimeoutInMicroSeconds - The time to wait for
-
- Returns:
- EFI_STATUS
- --*/
- ;
- EFI_STATUS
- AtapiPassThruPioReadWriteData (
- ATAPI_SCSI_PASS_THRU_DEV *AtapiScsiPrivate,
- UINT16 *Buffer,
- UINT32 *ByteCount,
- DATA_DIRECTION Direction,
- UINT64 TimeOutInMicroSeconds
- )
- /*++
- Routine Description:
- Performs data transfer between ATAPI device and host after the
- ATAPI command packet is sent.
-
- Arguments:
- AtapiScsiPrivate: Private data structure for the specified channel.
- Buffer: Points to the transferred data.
- ByteCount: When input,indicates the buffer size; when output,
- indicates the actually transferred data size.
- Direction: Indicates the data transfer direction.
- TimeoutInMicroSeconds:
- The timeout, in micro second units, to use for the
- execution of this ATAPI command.
- A TimeoutInMicroSeconds value of 0 means that
- this function will wait indefinitely for the ATAPI
- command to execute.
- If TimeoutInMicroSeconds is greater than zero, then
- this function will return EFI_TIMEOUT if the time
- required to execute the ATAPI command is greater
- than TimeoutInMicroSeconds.
- Returns:
- EFI_STATUS
- --*/
- ;
- EFI_STATUS
- AtapiPassThruCheckErrorStatus (
- ATAPI_SCSI_PASS_THRU_DEV *AtapiScsiPrivate
- )
- /*++
- Routine Description:
- Check Error Register for Error Information.
-
- Arguments:
- AtapiScsiPrivate - The pointer of ATAPI_SCSI_PASS_THRU_DEV
-
- Returns:
- EFI_STATUS
- --*/
- ;
- EFI_STATUS
- GetIdeRegistersBaseAddr (
- IN EFI_PCI_IO_PROTOCOL *PciIo,
- OUT IDE_REGISTERS_BASE_ADDR *IdeRegsBaseAddr
- )
- /*++
- Routine Description:
- Get IDE IO port registers' base addresses by mode. In 'Compatibility' mode,
- use fixed addresses. In Native-PCI mode, get base addresses from BARs in
- the PCI IDE controller's Configuration Space.
- Arguments:
- PciIo - Pointer to the EFI_PCI_IO_PROTOCOL instance
- IdeRegsBaseAddr - Pointer to IDE_REGISTERS_BASE_ADDR to
- receive IDE IO port registers' base addresses
-
- Returns:
- EFI_STATUS
-
- --*/
- ;
- VOID
- InitAtapiIoPortRegisters (
- IN ATAPI_SCSI_PASS_THRU_DEV *AtapiScsiPrivate,
- IN IDE_REGISTERS_BASE_ADDR *IdeRegsBaseAddr
- )
- /*++
- Routine Description:
- Initialize each Channel's Base Address of CommandBlock and ControlBlock.
- Arguments:
-
- AtapiScsiPrivate - The pointer of ATAPI_SCSI_PASS_THRU_DEV
- IdeRegsBaseAddr - The pointer of IDE_REGISTERS_BASE_ADDR
-
- Returns:
-
- None
- --*/
- ;
- /**
- Installs Scsi Pass Thru and/or Ext Scsi Pass Thru
- protocols based on feature flags.
- @param Controller The controller handle to
- install these protocols on.
- @param AtapiScsiPrivate A pointer to the protocol private
- data structure.
- @retval EFI_SUCCESS The installation succeeds.
- @retval other The installation fails.
-
- **/
- EFI_STATUS
- InstallScsiPassThruProtocols (
- IN EFI_HANDLE *ControllerHandle,
- IN ATAPI_SCSI_PASS_THRU_DEV *AtapiScsiPrivate
- );
- #endif
|