]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdeModulePkg: fix some issues in ScsiDisk to co-work with UFS stack
authorFeng Tian <feng.tian@intel.com>
Wed, 29 Apr 2015 02:44:42 +0000 (02:44 +0000)
committererictian <erictian@Edk2>
Wed, 29 Apr 2015 02:44:42 +0000 (02:44 +0000)
The changes in ScsiDisk include:
1. Add UFS disk info support.
2. Remove the wrong block size calculation.
3. Get sense data for TEST_UNIT_READY cmd immediately rather than sending a REQUEST_SENSE cmd again.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Feng Tian <feng.tian@intel.com>
Reviewed-by: Star Zeng <star.zeng@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17247 6f19259b-4bc3-4df7-8a09-765794883524

MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDisk.c
MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDiskDxe.inf

index 21da985dd44c537b450ef05375dc290e9a1d96be..e7abe544df58aa732962269400c33ab650629dd0 100644 (file)
@@ -1150,7 +1150,7 @@ ScsiDiskTestUnitReady (
   UINT8       Index;\r
   UINT8       MaxRetry;\r
 \r
-  SenseDataLength     = 0;\r
+  SenseDataLength     = (UINT8) (ScsiDiskDevice->SenseDataNumber * sizeof (EFI_SCSI_SENSE_DATA));\r
   *NumberOfSenseKeys  = 0;\r
 \r
   //\r
@@ -1159,7 +1159,7 @@ ScsiDiskTestUnitReady (
   Status = ScsiTestUnitReadyCommand (\r
             ScsiDiskDevice->ScsiIo,\r
             SCSI_DISK_TIMEOUT,\r
-            NULL,\r
+            ScsiDiskDevice->SenseData,\r
             &SenseDataLength,\r
             &HostAdapterStatus,\r
             &TargetStatus\r
@@ -1207,6 +1207,12 @@ ScsiDiskTestUnitReady (
     return EFI_DEVICE_ERROR;\r
   }\r
 \r
+  if (SenseDataLength != 0) {\r
+    *NumberOfSenseKeys = SenseDataLength / sizeof (EFI_SCSI_SENSE_DATA);\r
+    *SenseDataArray    = ScsiDiskDevice->SenseData;\r
+    return EFI_SUCCESS;\r
+  }\r
+\r
   MaxRetry = 3;\r
   for (Index = 0; Index < MaxRetry; Index++) {\r
     Status = ScsiDiskRequestSenseKeys (\r
@@ -1740,14 +1746,6 @@ GetMediaInfo (
   }\r
 \r
   ScsiDiskDevice->BlkIo.Media->MediaPresent = TRUE;\r
-  \r
-  if (ScsiDiskDevice->DeviceType == EFI_SCSI_TYPE_DISK) {\r
-    ScsiDiskDevice->BlkIo.Media->BlockSize = 0x200;\r
-  }\r
-\r
-  if (ScsiDiskDevice->DeviceType == EFI_SCSI_TYPE_CDROM) {\r
-    ScsiDiskDevice->BlkIo.Media->BlockSize = 0x800;\r
-  }\r
 }\r
 \r
 /**\r
@@ -3102,7 +3100,7 @@ ScsiDiskInfoIdentify (
   EFI_STATUS      Status;\r
   SCSI_DISK_DEV   *ScsiDiskDevice;\r
 \r
-  if (CompareGuid (&This->Interface, &gEfiDiskInfoScsiInterfaceGuid)) {\r
+  if (CompareGuid (&This->Interface, &gEfiDiskInfoScsiInterfaceGuid) || CompareGuid (&This->Interface, &gEfiDiskInfoUfsInterfaceGuid)) {\r
     //\r
     // Physical SCSI bus does not support this data class. \r
     //\r
@@ -3171,7 +3169,7 @@ ScsiDiskInfoWhichIde (
 {\r
   SCSI_DISK_DEV   *ScsiDiskDevice;\r
 \r
-  if (CompareGuid (&This->Interface, &gEfiDiskInfoScsiInterfaceGuid)) {\r
+  if (CompareGuid (&This->Interface, &gEfiDiskInfoScsiInterfaceGuid) || CompareGuid (&This->Interface, &gEfiDiskInfoUfsInterfaceGuid)) {\r
     //\r
     // This is not an IDE physical device.\r
     //\r
@@ -3301,6 +3299,10 @@ InitializeInstallDiskInfo (
           return;\r
         }\r
       } while (--IdentifyRetry > 0);\r
+    } else if ((DevicePathType (ChildDevicePathNode) == MESSAGING_DEVICE_PATH) &&\r
+       (DevicePathSubType (ChildDevicePathNode) == MSG_UFS_DP)) {\r
+      CopyGuid (&ScsiDiskDevice->DiskInfo.Interface, &gEfiDiskInfoUfsInterfaceGuid);\r
+      break;\r
     }\r
     DevicePathNode = ChildDevicePathNode;\r
   }\r
index b3e40fd9818f4696beb03071c094b5f5b72c8389..ec96aa6f928cf8c42a36cf77ef5d4a145ddc44a8 100644 (file)
@@ -63,6 +63,7 @@
   gEfiDiskInfoScsiInterfaceGuid                 ## SOMETIMES_PRODUCES ## UNDEFINED\r
   gEfiDiskInfoIdeInterfaceGuid                  ## SOMETIMES_PRODUCES ## UNDEFINED\r
   gEfiDiskInfoAhciInterfaceGuid                 ## SOMETIMES_PRODUCES ## UNDEFINED\r
+  gEfiDiskInfoUfsInterfaceGuid                  ## SOMETIMES_PRODUCES ## UNDEFINED\r
 \r
 # [Event]\r
 # EVENT_TYPE_RELATIVE_TIMER       ## CONSUMES\r