Update UefiScsiLib to add ASSERT comments and define new macros to replace the hard code value.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@5838 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
lgao4 2008-09-08 05:56:40 +00:00
parent fe21b1a6c1
commit 52cd71dca9
1 changed files with 71 additions and 28 deletions

View File

@ -20,9 +20,23 @@
#include <IndustryStandard/Scsi.h> #include <IndustryStandard/Scsi.h>
//
// bit5..7 are for Logical unit number
// 11100000b (0xe0)
//
#define EFI_SCSI_LOGICAL_UNIT_NUMBER_MASK 0xe0
//
// Scsi Command Length six or ten
//
#define EFI_SCSI_OP_LENGTH_SIX 0x6
#define EFI_SCSI_OP_LENGTH_TEN 0xa
/** /**
Function test the ready status of the SCSI unit. Function test the ready status of the SCSI unit.
If SenseDataLength is NULL, then ASSERT().
If HostAdapterStatus is NULL, then ASSERT().
If TargetStatus is NULL, then ASSERT().
@param[in] ScsiIo A pointer to SCSI IO protocol. @param[in] ScsiIo A pointer to SCSI IO protocol.
@param[in] Timeout The length of timeout period. @param[in] Timeout The length of timeout period.
@ -67,7 +81,7 @@ ScsiTestUnitReadyCommand (
UINT8 *Target; UINT8 *Target;
UINT8 TargetArray[EFI_SCSI_TARGET_MAX_BYTES]; UINT8 TargetArray[EFI_SCSI_TARGET_MAX_BYTES];
EFI_STATUS Status; EFI_STATUS Status;
UINT8 Cdb[6]; UINT8 Cdb[EFI_SCSI_OP_LENGTH_SIX];
ASSERT (SenseDataLength != NULL); ASSERT (SenseDataLength != NULL);
ASSERT (HostAdapterStatus != NULL); ASSERT (HostAdapterStatus != NULL);
@ -78,7 +92,7 @@ ScsiTestUnitReadyCommand (
} }
ZeroMem (&CommandPacket, sizeof (EFI_SCSI_IO_SCSI_REQUEST_PACKET)); ZeroMem (&CommandPacket, sizeof (EFI_SCSI_IO_SCSI_REQUEST_PACKET));
ZeroMem (Cdb, 6); ZeroMem (Cdb, EFI_SCSI_OP_LENGTH_SIX);
CommandPacket.Timeout = Timeout; CommandPacket.Timeout = Timeout;
CommandPacket.InDataBuffer = NULL; CommandPacket.InDataBuffer = NULL;
@ -94,8 +108,8 @@ ScsiTestUnitReadyCommand (
ScsiIo->GetDeviceLocation (ScsiIo, &Target, &Lun); ScsiIo->GetDeviceLocation (ScsiIo, &Target, &Lun);
Cdb[0] = EFI_SCSI_OP_TEST_UNIT_READY; Cdb[0] = EFI_SCSI_OP_TEST_UNIT_READY;
Cdb[1] = (UINT8) (Lun & 0xe0); Cdb[1] = (UINT8) (Lun & EFI_SCSI_LOGICAL_UNIT_NUMBER_MASK);
CommandPacket.CdbLength = (UINT8) 6; CommandPacket.CdbLength = (UINT8) EFI_SCSI_OP_LENGTH_SIX;
CommandPacket.SenseDataLength = *SenseDataLength; CommandPacket.SenseDataLength = *SenseDataLength;
Status = ScsiIo->ExecuteScsiCommand (ScsiIo, &CommandPacket, NULL); Status = ScsiIo->ExecuteScsiCommand (ScsiIo, &CommandPacket, NULL);
@ -110,6 +124,10 @@ ScsiTestUnitReadyCommand (
/** /**
Function to submit SCSI inquiry command. Function to submit SCSI inquiry command.
If SenseDataLength is NULL, then ASSERT().
If HostAdapterStatus is NULL, then ASSERT().
If TargetStatus is NULL, then ASSERT().
If InquiryDataLength is NULL, then ASSERT().
@param[in] ScsiIo SCSI IO Protocol to use @param[in] ScsiIo SCSI IO Protocol to use
@param[in] Timeout The length of timeout period. @param[in] Timeout The length of timeout period.
@ -159,7 +177,7 @@ ScsiInquiryCommand (
UINT8 *Target; UINT8 *Target;
UINT8 TargetArray[EFI_SCSI_TARGET_MAX_BYTES]; UINT8 TargetArray[EFI_SCSI_TARGET_MAX_BYTES];
EFI_STATUS Status; EFI_STATUS Status;
UINT8 Cdb[6]; UINT8 Cdb[EFI_SCSI_OP_LENGTH_SIX];
ASSERT (SenseDataLength != NULL); ASSERT (SenseDataLength != NULL);
ASSERT (HostAdapterStatus != NULL); ASSERT (HostAdapterStatus != NULL);
@ -171,7 +189,7 @@ ScsiInquiryCommand (
} }
ZeroMem (&CommandPacket, sizeof (EFI_SCSI_IO_SCSI_REQUEST_PACKET)); ZeroMem (&CommandPacket, sizeof (EFI_SCSI_IO_SCSI_REQUEST_PACKET));
ZeroMem (Cdb, 6); ZeroMem (Cdb, EFI_SCSI_OP_LENGTH_SIX);
CommandPacket.Timeout = Timeout; CommandPacket.Timeout = Timeout;
CommandPacket.InDataBuffer = InquiryDataBuffer; CommandPacket.InDataBuffer = InquiryDataBuffer;
@ -184,7 +202,7 @@ ScsiInquiryCommand (
ScsiIo->GetDeviceLocation (ScsiIo, &Target, &Lun); ScsiIo->GetDeviceLocation (ScsiIo, &Target, &Lun);
Cdb[0] = EFI_SCSI_OP_INQUIRY; Cdb[0] = EFI_SCSI_OP_INQUIRY;
Cdb[1] = (UINT8) (Lun & 0xe0); Cdb[1] = (UINT8) (Lun & EFI_SCSI_LOGICAL_UNIT_NUMBER_MASK);
if (EnableVitalProductData) { if (EnableVitalProductData) {
Cdb[1] |= 0x01; Cdb[1] |= 0x01;
} }
@ -194,7 +212,7 @@ ScsiInquiryCommand (
} }
Cdb[4] = (UINT8) (*InquiryDataLength); Cdb[4] = (UINT8) (*InquiryDataLength);
CommandPacket.CdbLength = (UINT8) 6; CommandPacket.CdbLength = (UINT8) EFI_SCSI_OP_LENGTH_SIX;
CommandPacket.DataDirection = EFI_SCSI_DATA_IN; CommandPacket.DataDirection = EFI_SCSI_DATA_IN;
Status = ScsiIo->ExecuteScsiCommand (ScsiIo, &CommandPacket, NULL); Status = ScsiIo->ExecuteScsiCommand (ScsiIo, &CommandPacket, NULL);
@ -210,6 +228,10 @@ ScsiInquiryCommand (
/** /**
Function to submit SCSI mode sense 10 command. Function to submit SCSI mode sense 10 command.
If SenseDataLength is NULL, then ASSERT().
If HostAdapterStatus is NULL, then ASSERT().
If TargetStatus is NULL, then ASSERT().
If DataLength is NULL, then ASSERT().
@param[in] ScsiIo A pointer to SCSI IO protocol. @param[in] ScsiIo A pointer to SCSI IO protocol.
@param[in] Timeout The length of timeout period. @param[in] Timeout The length of timeout period.
@ -263,7 +285,7 @@ ScsiModeSense10Command (
UINT8 *Target; UINT8 *Target;
UINT8 TargetArray[EFI_SCSI_TARGET_MAX_BYTES]; UINT8 TargetArray[EFI_SCSI_TARGET_MAX_BYTES];
EFI_STATUS Status; EFI_STATUS Status;
UINT8 Cdb[10]; UINT8 Cdb[EFI_SCSI_OP_LENGTH_TEN];
ASSERT (SenseDataLength != NULL); ASSERT (SenseDataLength != NULL);
ASSERT (HostAdapterStatus != NULL); ASSERT (HostAdapterStatus != NULL);
@ -275,7 +297,7 @@ ScsiModeSense10Command (
} }
ZeroMem (&CommandPacket, sizeof (EFI_SCSI_IO_SCSI_REQUEST_PACKET)); ZeroMem (&CommandPacket, sizeof (EFI_SCSI_IO_SCSI_REQUEST_PACKET));
ZeroMem (Cdb, 10); ZeroMem (Cdb, EFI_SCSI_OP_LENGTH_TEN);
CommandPacket.Timeout = Timeout; CommandPacket.Timeout = Timeout;
CommandPacket.InDataBuffer = DataBuffer; CommandPacket.InDataBuffer = DataBuffer;
@ -289,12 +311,18 @@ ScsiModeSense10Command (
ScsiIo->GetDeviceLocation (ScsiIo, &Target, &Lun); ScsiIo->GetDeviceLocation (ScsiIo, &Target, &Lun);
Cdb[0] = EFI_SCSI_OP_MODE_SEN10; Cdb[0] = EFI_SCSI_OP_MODE_SEN10;
Cdb[1] = (UINT8) ((Lun & 0xe0) + ((DBDField << 3) & 0x08)); //
// DBDField is in Cdb[1] bit3 of (bit7..0)
//
Cdb[1] = (UINT8) ((Lun & EFI_SCSI_LOGICAL_UNIT_NUMBER_MASK) + ((DBDField << 3) & 0x08));
//
// PageControl is in Cdb[2] bit7..6, PageCode is in Cdb[2] bit5..0
//
Cdb[2] = (UINT8) ((PageControl & 0xc0) | (PageCode & 0x3f)); Cdb[2] = (UINT8) ((PageControl & 0xc0) | (PageCode & 0x3f));
Cdb[7] = (UINT8) (*DataLength >> 8); Cdb[7] = (UINT8) (*DataLength >> 8);
Cdb[8] = (UINT8) (*DataLength); Cdb[8] = (UINT8) (*DataLength);
CommandPacket.CdbLength = 10; CommandPacket.CdbLength = EFI_SCSI_OP_LENGTH_TEN;
CommandPacket.DataDirection = EFI_SCSI_DATA_IN; CommandPacket.DataDirection = EFI_SCSI_DATA_IN;
CommandPacket.SenseDataLength = *SenseDataLength; CommandPacket.SenseDataLength = *SenseDataLength;
@ -311,6 +339,9 @@ ScsiModeSense10Command (
/** /**
Function to submit SCSI request sense command. Function to submit SCSI request sense command.
If SenseDataLength is NULL, then ASSERT().
If HostAdapterStatus is NULL, then ASSERT().
If TargetStatus is NULL, then ASSERT().
@param[in] ScsiIo A pointer to SCSI IO protocol. @param[in] ScsiIo A pointer to SCSI IO protocol.
@param[in] Timeout The length of timeout period. @param[in] Timeout The length of timeout period.
@ -355,7 +386,7 @@ ScsiRequestSenseCommand (
UINT8 *Target; UINT8 *Target;
UINT8 TargetArray[EFI_SCSI_TARGET_MAX_BYTES]; UINT8 TargetArray[EFI_SCSI_TARGET_MAX_BYTES];
EFI_STATUS Status; EFI_STATUS Status;
UINT8 Cdb[6]; UINT8 Cdb[EFI_SCSI_OP_LENGTH_SIX];
ASSERT (SenseDataLength != NULL); ASSERT (SenseDataLength != NULL);
ASSERT (HostAdapterStatus != NULL); ASSERT (HostAdapterStatus != NULL);
@ -366,7 +397,7 @@ ScsiRequestSenseCommand (
} }
ZeroMem (&CommandPacket, sizeof (EFI_SCSI_IO_SCSI_REQUEST_PACKET)); ZeroMem (&CommandPacket, sizeof (EFI_SCSI_IO_SCSI_REQUEST_PACKET));
ZeroMem (Cdb, 6); ZeroMem (Cdb, EFI_SCSI_OP_LENGTH_SIX);
CommandPacket.Timeout = Timeout; CommandPacket.Timeout = Timeout;
CommandPacket.InDataBuffer = SenseData; CommandPacket.InDataBuffer = SenseData;
@ -380,10 +411,10 @@ ScsiRequestSenseCommand (
ScsiIo->GetDeviceLocation (ScsiIo, &Target, &Lun); ScsiIo->GetDeviceLocation (ScsiIo, &Target, &Lun);
Cdb[0] = EFI_SCSI_OP_REQUEST_SENSE; Cdb[0] = EFI_SCSI_OP_REQUEST_SENSE;
Cdb[1] = (UINT8) (Lun & 0xe0); Cdb[1] = (UINT8) (Lun & EFI_SCSI_LOGICAL_UNIT_NUMBER_MASK);
Cdb[4] = (UINT8) (*SenseDataLength); Cdb[4] = (UINT8) (*SenseDataLength);
CommandPacket.CdbLength = (UINT8) 6; CommandPacket.CdbLength = (UINT8) EFI_SCSI_OP_LENGTH_SIX;
CommandPacket.DataDirection = EFI_SCSI_DATA_IN; CommandPacket.DataDirection = EFI_SCSI_DATA_IN;
CommandPacket.SenseDataLength = 0; CommandPacket.SenseDataLength = 0;
@ -399,6 +430,10 @@ ScsiRequestSenseCommand (
/** /**
Function to submit read capacity command. Function to submit read capacity command.
If SenseDataLength is NULL, then ASSERT().
If HostAdapterStatus is NULL, then ASSERT().
If TargetStatus is NULL, then ASSERT().
If DataLength is NULL, then ASSERT().
@param[in] ScsiIo A pointer to SCSI IO protocol. @param[in] ScsiIo A pointer to SCSI IO protocol.
@param[in] Timeout The length of timeout period. @param[in] Timeout The length of timeout period.
@ -448,7 +483,7 @@ ScsiReadCapacityCommand (
UINT8 *Target; UINT8 *Target;
UINT8 TargetArray[EFI_SCSI_TARGET_MAX_BYTES]; UINT8 TargetArray[EFI_SCSI_TARGET_MAX_BYTES];
EFI_STATUS Status; EFI_STATUS Status;
UINT8 Cdb[10]; UINT8 Cdb[EFI_SCSI_OP_LENGTH_TEN];
ASSERT (SenseDataLength != NULL); ASSERT (SenseDataLength != NULL);
ASSERT (HostAdapterStatus != NULL); ASSERT (HostAdapterStatus != NULL);
@ -460,7 +495,7 @@ ScsiReadCapacityCommand (
} }
ZeroMem (&CommandPacket, sizeof (EFI_SCSI_IO_SCSI_REQUEST_PACKET)); ZeroMem (&CommandPacket, sizeof (EFI_SCSI_IO_SCSI_REQUEST_PACKET));
ZeroMem (Cdb, 10); ZeroMem (Cdb, EFI_SCSI_OP_LENGTH_TEN);
CommandPacket.Timeout = Timeout; CommandPacket.Timeout = Timeout;
CommandPacket.InDataBuffer = DataBuffer; CommandPacket.InDataBuffer = DataBuffer;
@ -474,7 +509,7 @@ ScsiReadCapacityCommand (
ScsiIo->GetDeviceLocation (ScsiIo, &Target, &Lun); ScsiIo->GetDeviceLocation (ScsiIo, &Target, &Lun);
Cdb[0] = EFI_SCSI_OP_READ_CAPACITY; Cdb[0] = EFI_SCSI_OP_READ_CAPACITY;
Cdb[1] = (UINT8) (Lun & 0xe0); Cdb[1] = (UINT8) (Lun & EFI_SCSI_LOGICAL_UNIT_NUMBER_MASK);
if (!PMI) { if (!PMI) {
// //
// Partial medium indicator,if PMI is FALSE, the Cdb.2 ~ Cdb.5 MUST BE ZERO. // Partial medium indicator,if PMI is FALSE, the Cdb.2 ~ Cdb.5 MUST BE ZERO.
@ -484,7 +519,7 @@ ScsiReadCapacityCommand (
Cdb[8] |= 0x01; Cdb[8] |= 0x01;
} }
CommandPacket.CdbLength = 10; CommandPacket.CdbLength = EFI_SCSI_OP_LENGTH_TEN;
CommandPacket.DataDirection = EFI_SCSI_DATA_IN; CommandPacket.DataDirection = EFI_SCSI_DATA_IN;
CommandPacket.SenseDataLength = *SenseDataLength; CommandPacket.SenseDataLength = *SenseDataLength;
@ -501,6 +536,10 @@ ScsiReadCapacityCommand (
/** /**
Function to submit read 10 command. Function to submit read 10 command.
If SenseDataLength is NULL, then ASSERT().
If HostAdapterStatus is NULL, then ASSERT().
If TargetStatus is NULL, then ASSERT().
If DataLength is NULL, then ASSERT().
@param[in] ScsiIo A pointer to SCSI IO protocol. @param[in] ScsiIo A pointer to SCSI IO protocol.
@param[in] Timeout The length of timeout period. @param[in] Timeout The length of timeout period.
@ -552,7 +591,7 @@ ScsiRead10Command (
UINT8 *Target; UINT8 *Target;
UINT8 TargetArray[EFI_SCSI_TARGET_MAX_BYTES]; UINT8 TargetArray[EFI_SCSI_TARGET_MAX_BYTES];
EFI_STATUS Status; EFI_STATUS Status;
UINT8 Cdb[10]; UINT8 Cdb[EFI_SCSI_OP_LENGTH_TEN];
ASSERT (SenseDataLength != NULL); ASSERT (SenseDataLength != NULL);
ASSERT (HostAdapterStatus != NULL); ASSERT (HostAdapterStatus != NULL);
@ -564,7 +603,7 @@ ScsiRead10Command (
} }
ZeroMem (&CommandPacket, sizeof (EFI_SCSI_IO_SCSI_REQUEST_PACKET)); ZeroMem (&CommandPacket, sizeof (EFI_SCSI_IO_SCSI_REQUEST_PACKET));
ZeroMem (Cdb, 10); ZeroMem (Cdb, EFI_SCSI_OP_LENGTH_TEN);
CommandPacket.Timeout = Timeout; CommandPacket.Timeout = Timeout;
CommandPacket.InDataBuffer = DataBuffer; CommandPacket.InDataBuffer = DataBuffer;
@ -578,7 +617,7 @@ ScsiRead10Command (
ScsiIo->GetDeviceLocation (ScsiIo, &Target, &Lun); ScsiIo->GetDeviceLocation (ScsiIo, &Target, &Lun);
Cdb[0] = EFI_SCSI_OP_READ10; Cdb[0] = EFI_SCSI_OP_READ10;
Cdb[1] = (UINT8) (Lun & 0xe0); Cdb[1] = (UINT8) (Lun & EFI_SCSI_LOGICAL_UNIT_NUMBER_MASK);
Cdb[2] = (UINT8) (StartLba >> 24); Cdb[2] = (UINT8) (StartLba >> 24);
Cdb[3] = (UINT8) (StartLba >> 16); Cdb[3] = (UINT8) (StartLba >> 16);
Cdb[4] = (UINT8) (StartLba >> 8); Cdb[4] = (UINT8) (StartLba >> 8);
@ -586,7 +625,7 @@ ScsiRead10Command (
Cdb[7] = (UINT8) (SectorSize >> 8); Cdb[7] = (UINT8) (SectorSize >> 8);
Cdb[8] = (UINT8) (SectorSize & 0xff); Cdb[8] = (UINT8) (SectorSize & 0xff);
CommandPacket.CdbLength = 10; CommandPacket.CdbLength = EFI_SCSI_OP_LENGTH_TEN;
CommandPacket.DataDirection = EFI_SCSI_DATA_IN; CommandPacket.DataDirection = EFI_SCSI_DATA_IN;
CommandPacket.SenseDataLength = *SenseDataLength; CommandPacket.SenseDataLength = *SenseDataLength;
@ -603,6 +642,10 @@ ScsiRead10Command (
/** /**
Function to submit SCSI write 10 command. Function to submit SCSI write 10 command.
If SenseDataLength is NULL, then ASSERT().
If HostAdapterStatus is NULL, then ASSERT().
If TargetStatus is NULL, then ASSERT().
If DataLength is NULL, then ASSERT().
@param[in] ScsiIo SCSI IO Protocol to use @param[in] ScsiIo SCSI IO Protocol to use
@param[in] Timeout The length of timeout period. @param[in] Timeout The length of timeout period.
@ -654,7 +697,7 @@ ScsiWrite10Command (
UINT8 *Target; UINT8 *Target;
UINT8 TargetArray[EFI_SCSI_TARGET_MAX_BYTES]; UINT8 TargetArray[EFI_SCSI_TARGET_MAX_BYTES];
EFI_STATUS Status; EFI_STATUS Status;
UINT8 Cdb[10]; UINT8 Cdb[EFI_SCSI_OP_LENGTH_TEN];
ASSERT (SenseDataLength != NULL); ASSERT (SenseDataLength != NULL);
ASSERT (HostAdapterStatus != NULL); ASSERT (HostAdapterStatus != NULL);
@ -666,7 +709,7 @@ ScsiWrite10Command (
} }
ZeroMem (&CommandPacket, sizeof (EFI_SCSI_IO_SCSI_REQUEST_PACKET)); ZeroMem (&CommandPacket, sizeof (EFI_SCSI_IO_SCSI_REQUEST_PACKET));
ZeroMem (Cdb, 10); ZeroMem (Cdb, EFI_SCSI_OP_LENGTH_TEN);
CommandPacket.Timeout = Timeout; CommandPacket.Timeout = Timeout;
CommandPacket.OutDataBuffer = DataBuffer; CommandPacket.OutDataBuffer = DataBuffer;
@ -680,7 +723,7 @@ ScsiWrite10Command (
ScsiIo->GetDeviceLocation (ScsiIo, &Target, &Lun); ScsiIo->GetDeviceLocation (ScsiIo, &Target, &Lun);
Cdb[0] = EFI_SCSI_OP_WRITE10; Cdb[0] = EFI_SCSI_OP_WRITE10;
Cdb[1] = (UINT8) (Lun & 0xe0); Cdb[1] = (UINT8) (Lun & EFI_SCSI_LOGICAL_UNIT_NUMBER_MASK);
Cdb[2] = (UINT8) (StartLba >> 24); Cdb[2] = (UINT8) (StartLba >> 24);
Cdb[3] = (UINT8) (StartLba >> 16); Cdb[3] = (UINT8) (StartLba >> 16);
Cdb[4] = (UINT8) (StartLba >> 8); Cdb[4] = (UINT8) (StartLba >> 8);
@ -688,7 +731,7 @@ ScsiWrite10Command (
Cdb[7] = (UINT8) (SectorSize >> 8); Cdb[7] = (UINT8) (SectorSize >> 8);
Cdb[8] = (UINT8) SectorSize; Cdb[8] = (UINT8) SectorSize;
CommandPacket.CdbLength = 10; CommandPacket.CdbLength = EFI_SCSI_OP_LENGTH_TEN;
CommandPacket.DataDirection = EFI_SCSI_DATA_OUT; CommandPacket.DataDirection = EFI_SCSI_DATA_OUT;
CommandPacket.SenseDataLength = *SenseDataLength; CommandPacket.SenseDataLength = *SenseDataLength;