X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=MdePkg%2FInclude%2FProtocol%2FScsiPassThru.h;h=7dcead10f9e1361d0e3d7f98a2f8f86934b5bd46;hp=a5aa6c47c0e25530ec41b238efb01a79ae2bade5;hb=9095d37b8fe5bfc3d02adad6ba7fd7359ebc0107;hpb=d1f950002362305fcd4c30f108ef7b76679f5843 diff --git a/MdePkg/Include/Protocol/ScsiPassThru.h b/MdePkg/Include/Protocol/ScsiPassThru.h index a5aa6c47c0..7dcead10f9 100644 --- a/MdePkg/Include/Protocol/ScsiPassThru.h +++ b/MdePkg/Include/Protocol/ScsiPassThru.h @@ -1,16 +1,21 @@ /** @file - SCSI Pass Through protocol. - - Copyright (c) 2006, Intel Corporation - All rights reserved. This program and the accompanying materials - are licensed and made available under the terms and conditions of the BSD License - which accompanies this distribution. The full text of the license may be found at - http://opensource.org/licenses/bsd-license.php - - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - - Module Name: ScsiPassThru.h + SCSI Pass Through protocol as defined in EFI 1.1. + This protocol allows information about a SCSI channel to be collected, + and allows SCSI Request Packets to be sent to any SCSI devices on a SCSI + channel even if those devices are not boot devices. This protocol is attached + to the device handle of each SCSI channel in a system that the protocol + supports, and can be used for diagnostics. It may also be used to build + a Block I/O driver for SCSI hard drives and SCSI CD-ROM or DVD drives to + allow those devices to become boot devices. + + Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.
+ This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. **/ @@ -22,9 +27,9 @@ 0xa59e8fcf, 0xbda0, 0x43bb, {0x90, 0xb1, 0xd3, 0x73, 0x2e, 0xca, 0xa8, 0x77 } \ } -// -// Forward reference for pure ANSI compatability -// +/// +/// Forward reference for pure ANSI compatability +/// typedef struct _EFI_SCSI_PASS_THRU_PROTOCOL EFI_SCSI_PASS_THRU_PROTOCOL; #define EFI_SCSI_PASS_THRU_ATTRIBUTES_PHYSICAL 0x0001 @@ -61,30 +66,92 @@ typedef struct _EFI_SCSI_PASS_THRU_PROTOCOL EFI_SCSI_PASS_THRU_PROTOCOL; #define EFI_SCSI_STATUS_TARGET_QUEUE_FULL 0x28 // queue full typedef struct { + /// + /// The timeout, in 100 ns units, to use for the execution of this SCSI + /// Request Packet. A Timeout value of 0 means that this function + /// will wait indefinitely for the SCSI Request Packet to execute. If + /// Timeout is greater than zero, then this function will return + /// EFI_TIMEOUT if the time required to execute the SCSI Request + /// Packet is greater than Timeout. + /// UINT64 Timeout; + /// + /// A pointer to the data buffer to transfer between the SCSI + /// controller and the SCSI device. Must be aligned to the boundary + /// specified in the IoAlign field of the + /// EFI_SCSI_PASS_THRU_MODE structure. + /// VOID *DataBuffer; + /// + /// A pointer to the sense data that was generated by the execution of + /// the SCSI Request Packet. + /// VOID *SenseData; + /// + /// A pointer to buffer that contains the Command Data Block to + /// send to the SCSI device. + /// VOID *Cdb; + /// + /// On Input, the size, in bytes, of InDataBuffer. On output, the + /// number of bytes transferred between the SCSI controller and the SCSI device. + /// UINT32 TransferLength; + /// + /// The length, in bytes, of the buffer Cdb. The standard values are + /// 6, 10, 12, and 16, but other values are possible if a variable length CDB is used. + /// UINT8 CdbLength; + /// + /// The direction of the data transfer. 0 for reads, 1 for writes. A + /// value of 2 is Reserved for Bi-Directional SCSI commands. + /// UINT8 DataDirection; + /// + /// The status of the SCSI Host Controller that produces the SCSI + /// bus where the SCSI device attached when the SCSI Request + /// Packet was executed on the SCSI Controller. + /// UINT8 HostAdapterStatus; + /// + /// The status returned by the SCSI device when the SCSI Request + /// Packet was executed. + /// UINT8 TargetStatus; + /// + /// On input, the length in bytes of the SenseData buffer. On + /// output, the number of bytes written to the SenseData buffer. + /// UINT8 SenseDataLength; } EFI_SCSI_PASS_THRU_SCSI_REQUEST_PACKET; typedef struct { + /// + /// A Null-terminated Unicode string that represents the printable name of the SCSI controller. + /// CHAR16 *ControllerName; + /// + /// A Null-terminated Unicode string that represents the printable name of the SCSI channel. + /// CHAR16 *ChannelName; + /// + /// The Target ID of the host adapter on the SCSI channel. + /// UINT32 AdapterId; + /// + /// Additional information on the attributes of the SCSI channel. + /// UINT32 Attributes; + /// + /// Supplies the alignment requirement for any buffer used in a data transfer. + /// UINT32 IoAlign; } EFI_SCSI_PASS_THRU_MODE; /** - Sends a SCSI Request Packet to a SCSI device that is attached to - the SCSI channel. This function supports both blocking I/O and - non-blocking I/O. The blocking I/O functionality is required, + Sends a SCSI Request Packet to a SCSI device that is attached to + the SCSI channel. This function supports both blocking I/O and + non-blocking I/O. The blocking I/O functionality is required, and the non-blocking I/O functionality is optional. @param This Protocol instance pointer. @@ -104,10 +171,10 @@ typedef struct { @retval EFI_SUCCESS The SCSI Request Packet was sent by the host, and TransferLength bytes were transferred to/from - DataBuffer.See HostAdapterStatus, TargetStatus, - SenseDataLength,and SenseData in that order + DataBuffer. See HostAdapterStatus, TargetStatus, + SenseDataLength, and SenseData in that order for additional status information. - @retval EFI_WARN_BUFFER_TOO_SMALL The SCSI Request Packet was executed, but the + @retval EFI_BAD_BUFFER_SIZE The SCSI Request Packet was executed, but the entire DataBuffer could not be transferred. The actual number of bytes transferred is returned in TransferLength. See HostAdapterStatus, @@ -131,21 +198,20 @@ typedef struct { Request Packet to execute. See HostAdapterStatus, TargetStatus, SenseDataLength, and SenseData in that order for additional status information. - + **/ typedef EFI_STATUS -(EFIAPI *EFI_SCSI_PASS_THRU_PASSTHRU) ( +(EFIAPI *EFI_SCSI_PASS_THRU_PASSTHRU)( 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 - ) -; + ); /** - Used to retrieve the list of legal Target IDs for SCSI devices + Used to retrieve the list of legal Target IDs for SCSI devices on a SCSI channel. @param This Protocol instance pointer. @@ -157,7 +223,7 @@ EFI_STATUS Target ID of the first SCSI device present on a SCSI channel. @param Lun On input, a pointer to the LUN of a SCSI device - present on the SCSI channel.On output, a pointer + present on the SCSI channel. On output, a pointer to the LUN of the next SCSI device present on a SCSI channel. @@ -170,15 +236,14 @@ EFI_STATUS **/ typedef EFI_STATUS -(EFIAPI *EFI_SCSI_PASS_THRU_GET_NEXT_DEVICE) ( +(EFIAPI *EFI_SCSI_PASS_THRU_GET_NEXT_DEVICE)( IN EFI_SCSI_PASS_THRU_PROTOCOL *This, IN OUT UINT32 *Target, IN OUT UINT64 *Lun - ) -; + ); /** - Used to allocate and build a device path node for a SCSI device + Used to allocate and build a device path node for a SCSI device on a SCSI channel. @param This Protocol instance pointer. @@ -206,13 +271,12 @@ EFI_STATUS **/ typedef EFI_STATUS -(EFIAPI *EFI_SCSI_PASS_THRU_BUILD_DEVICE_PATH) ( +(EFIAPI *EFI_SCSI_PASS_THRU_BUILD_DEVICE_PATH)( IN EFI_SCSI_PASS_THRU_PROTOCOL *This, IN UINT32 Target, IN UINT64 Lun, IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath - ) -; + ); /** Used to translate a device path node to a Target ID and LUN. @@ -239,16 +303,15 @@ EFI_STATUS **/ typedef EFI_STATUS -(EFIAPI *EFI_SCSI_PASS_THRU_GET_TARGET_LUN) ( +(EFIAPI *EFI_SCSI_PASS_THRU_GET_TARGET_LUN)( IN EFI_SCSI_PASS_THRU_PROTOCOL *This, IN EFI_DEVICE_PATH_PROTOCOL *DevicePath, OUT UINT32 *Target, OUT UINT64 *Lun - ) -; + ); /** - Resets a SCSI channel.This operation resets all the + Resets a SCSI channel.This operation resets all the SCSI devices connected to the SCSI channel. @param This Protocol instance pointer. @@ -264,10 +327,9 @@ EFI_STATUS **/ typedef EFI_STATUS -(EFIAPI *EFI_SCSI_PASS_THRU_RESET_CHANNEL) ( +(EFIAPI *EFI_SCSI_PASS_THRU_RESET_CHANNEL)( IN EFI_SCSI_PASS_THRU_PROTOCOL *This - ) -; + ); /** Resets a SCSI device that is connected to a SCSI channel. @@ -290,14 +352,23 @@ EFI_STATUS **/ typedef EFI_STATUS -(EFIAPI *EFI_SCSI_PASS_THRU_RESET_TARGET) ( +(EFIAPI *EFI_SCSI_PASS_THRU_RESET_TARGET)( IN EFI_SCSI_PASS_THRU_PROTOCOL *This, IN UINT32 Target, IN UINT64 Lun - ) -; - + ); + +/// +/// The EFI_SCSI_PASS_THRU_PROTOCOL provides information about a SCSI channel and +/// the ability to send SCSI Request Packets to any SCSI device attached to that SCSI channel. The +/// information includes the Target ID of the host controller on the SCSI channel, the attributes of +/// the SCSI channel, the printable name for the SCSI controller, and the printable name of the +/// SCSI channel. +/// struct _EFI_SCSI_PASS_THRU_PROTOCOL { + /// + /// A pointer to the EFI_SCSI_PASS_THRU_MODE data for this SCSI channel. + /// EFI_SCSI_PASS_THRU_MODE *Mode; EFI_SCSI_PASS_THRU_PASSTHRU PassThru; EFI_SCSI_PASS_THRU_GET_NEXT_DEVICE GetNextDevice;