]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdePkg: UefiScsiLib: do not encode LUN in CDB for other SCSI commands
authorLaszlo Ersek <lersek@redhat.com>
Fri, 28 Nov 2014 10:24:56 +0000 (10:24 +0000)
committerlersek <lersek@Edk2>
Fri, 28 Nov 2014 10:24:56 +0000 (10:24 +0000)
The TEST UNIT READY, INQUIRY, MODE SENSE, REQUEST SENSE and READ CAPACITY
commands define bits [7:5] of Cdb[1] as Reserved (potentially as part of a
larger Reserved bitfield):

  Command             Reserved bitfield in Cdb[1]  SCSI spec reference
  ------------------  ---------------------------  -------------------
  TEST UNIT READY     all bits                     SPC-4 6.37
  INQUIRY             bits [7:2]                   SPC-4 6.4.1
  MODE SENSE (6)      bits [7:4]                   SPC-4 6.11.1
  MODE SENSE (10)     bits [7:5]                   SPC-4 6.12
  REQUEST SENSE       bits [7:1]                   SPC-4 6.29
  READ CAPACITY (10)  bits [7:1]                   SBC-3 5.16
  READ CAPACITY (16)  bits [7:5]                   SBC-3 5.17

Update the UefiScsiLib functions accordingly.

(In ScsiReadCapacity16Command() the LUN has not been encoded, so there we
just remove the useless ScsiIo->GetDeviceLocation() call, with its
auxiliary local variables.)

The EFI_SCSI_TARGET_MAX_BYTES and EFI_SCSI_LOGICAL_UNIT_NUMBER_MASK macros
become unused with this patch, remove them too.

Suggested-by: Feng Tian <feng.tian@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0

Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16455 6f19259b-4bc3-4df7-8a09-765794883524

MdePkg/Library/UefiScsiLib/UefiScsiLib.c

index 1dbe874118251221b31d17b236bf0b8013ce70ea..8a073db5f3abce9003b78e54946957a02048be3b 100644 (file)
 #include <IndustryStandard/Scsi.h>\r
   \r
   \r
-  //\r
-  // Max bytes needed to represent ID of a SCSI device\r
-  //\r
-#define EFI_SCSI_TARGET_MAX_BYTES (0x10)\r
-  \r
-  //\r
-  // bit5..7 are for Logical unit number\r
-  // 11100000b (0xe0)\r
-  //\r
-#define EFI_SCSI_LOGICAL_UNIT_NUMBER_MASK 0xe0\r
-  \r
   //\r
   // Scsi Command Length\r
   //\r
@@ -117,9 +106,6 @@ ScsiTestUnitReadyCommand (
   )\r
 {\r
   EFI_SCSI_IO_SCSI_REQUEST_PACKET CommandPacket;\r
-  UINT64                          Lun;\r
-  UINT8                           *Target;\r
-  UINT8                           TargetArray[EFI_SCSI_TARGET_MAX_BYTES];\r
   EFI_STATUS                      Status;\r
   UINT8                           Cdb[EFI_SCSI_OP_LENGTH_SIX];\r
 \r
@@ -141,11 +127,7 @@ ScsiTestUnitReadyCommand (
   //\r
   // Fill Cdb for Test Unit Ready Command\r
   //\r
-  Target = &TargetArray[0];\r
-  ScsiIo->GetDeviceLocation (ScsiIo, &Target, &Lun);\r
-\r
   Cdb[0]                        = EFI_SCSI_OP_TEST_UNIT_READY;\r
-  Cdb[1]                        = (UINT8) (LShiftU64 (Lun, 5) & EFI_SCSI_LOGICAL_UNIT_NUMBER_MASK);\r
   CommandPacket.CdbLength       = (UINT8) EFI_SCSI_OP_LENGTH_SIX;\r
   CommandPacket.SenseDataLength = *SenseDataLength;\r
 \r
@@ -255,9 +237,6 @@ ScsiInquiryCommandEx (
   )\r
 {\r
   EFI_SCSI_IO_SCSI_REQUEST_PACKET CommandPacket;\r
-  UINT64                          Lun;\r
-  UINT8                           *Target;\r
-  UINT8                           TargetArray[EFI_SCSI_TARGET_MAX_BYTES];\r
   EFI_STATUS                      Status;\r
   UINT8                           Cdb[EFI_SCSI_OP_LENGTH_SIX];\r
 \r
@@ -277,11 +256,7 @@ ScsiInquiryCommandEx (
   CommandPacket.SenseDataLength = *SenseDataLength;\r
   CommandPacket.Cdb             = Cdb;\r
 \r
-  Target = &TargetArray[0];\r
-  ScsiIo->GetDeviceLocation (ScsiIo, &Target, &Lun);\r
-\r
   Cdb[0]  = EFI_SCSI_OP_INQUIRY;\r
-  Cdb[1]  = (UINT8) (LShiftU64 (Lun, 5) & EFI_SCSI_LOGICAL_UNIT_NUMBER_MASK);\r
   if (EnableVitalProductData) {\r
     Cdb[1] |= 0x01;\r
     Cdb[2]  = PageCode;\r
@@ -510,9 +485,6 @@ ScsiModeSense10Command (
   )\r
 {\r
   EFI_SCSI_IO_SCSI_REQUEST_PACKET CommandPacket;\r
-  UINT64                          Lun;\r
-  UINT8                           *Target;\r
-  UINT8                           TargetArray[EFI_SCSI_TARGET_MAX_BYTES];\r
   EFI_STATUS                      Status;\r
   UINT8                           Cdb[EFI_SCSI_OP_LENGTH_TEN];\r
 \r
@@ -533,14 +505,11 @@ ScsiModeSense10Command (
   //\r
   // Fill Cdb for Mode Sense (10) Command\r
   //\r
-  Target = &TargetArray[0];\r
-  ScsiIo->GetDeviceLocation (ScsiIo, &Target, &Lun);\r
-\r
   Cdb[0]                        = EFI_SCSI_OP_MODE_SEN10;\r
   //\r
   // DBDField is in Cdb[1] bit3 of (bit7..0)\r
   //\r
-  Cdb[1]                        = (UINT8) ((LShiftU64 (Lun, 5) & EFI_SCSI_LOGICAL_UNIT_NUMBER_MASK) + ((DBDField << 3) & 0x08));\r
+  Cdb[1]                        = (UINT8) ((DBDField << 3) & 0x08);\r
   //\r
   // PageControl is in Cdb[2] bit7..6, PageCode is in Cdb[2] bit5..0\r
   //\r
@@ -602,9 +571,6 @@ ScsiRequestSenseCommand (
   )\r
 {\r
   EFI_SCSI_IO_SCSI_REQUEST_PACKET CommandPacket;\r
-  UINT64                          Lun;\r
-  UINT8                           *Target;\r
-  UINT8                           TargetArray[EFI_SCSI_TARGET_MAX_BYTES];\r
   EFI_STATUS                      Status;\r
   UINT8                           Cdb[EFI_SCSI_OP_LENGTH_SIX];\r
 \r
@@ -624,11 +590,7 @@ ScsiRequestSenseCommand (
   //\r
   // Fill Cdb for Request Sense Command\r
   //\r
-  Target = &TargetArray[0];\r
-  ScsiIo->GetDeviceLocation (ScsiIo, &Target, &Lun);\r
-\r
   Cdb[0]                        = EFI_SCSI_OP_REQUEST_SENSE;\r
-  Cdb[1]                        = (UINT8) (LShiftU64 (Lun, 5) & EFI_SCSI_LOGICAL_UNIT_NUMBER_MASK);\r
   Cdb[4]                        = (UINT8) (*SenseDataLength);\r
 \r
   CommandPacket.CdbLength       = (UINT8) EFI_SCSI_OP_LENGTH_SIX;\r
@@ -695,9 +657,6 @@ ScsiReadCapacityCommand (
   )\r
 {\r
   EFI_SCSI_IO_SCSI_REQUEST_PACKET CommandPacket;\r
-  UINT64                          Lun;\r
-  UINT8                           *Target;\r
-  UINT8                           TargetArray[EFI_SCSI_TARGET_MAX_BYTES];\r
   EFI_STATUS                      Status;\r
   UINT8                           Cdb[EFI_SCSI_OP_LENGTH_TEN];\r
 \r
@@ -718,11 +677,7 @@ ScsiReadCapacityCommand (
   //\r
   // Fill Cdb for Read Capacity Command\r
   //\r
-  Target = &TargetArray[0];\r
-  ScsiIo->GetDeviceLocation (ScsiIo, &Target, &Lun);\r
-\r
   Cdb[0]  = EFI_SCSI_OP_READ_CAPACITY;\r
-  Cdb[1]  = (UINT8) (LShiftU64 (Lun, 5) & EFI_SCSI_LOGICAL_UNIT_NUMBER_MASK);\r
   if (!Pmi) {\r
     //\r
     // Partial medium indicator,if Pmi is FALSE, the Cdb.2 ~ Cdb.5 MUST BE ZERO.\r
@@ -797,9 +752,6 @@ ScsiReadCapacity16Command (
   )\r
 {\r
   EFI_SCSI_IO_SCSI_REQUEST_PACKET CommandPacket;\r
-  UINT64                          Lun;\r
-  UINT8                           *Target;\r
-  UINT8                           TargetArray[EFI_SCSI_TARGET_MAX_BYTES];\r
   EFI_STATUS                      Status;\r
   UINT8                           Cdb[16];\r
 \r
@@ -820,9 +772,6 @@ ScsiReadCapacity16Command (
   //\r
   // Fill Cdb for Read Capacity Command\r
   //\r
-  Target = &TargetArray[0];\r
-  ScsiIo->GetDeviceLocation (ScsiIo, &Target, &Lun);\r
-\r
   Cdb[0]  = EFI_SCSI_OP_READ_CAPACITY16;\r
   Cdb[1]  = 0x10;\r
   if (!Pmi) {\r