]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDisk.c
MdeModulePkg/ScsiDisk: Return EFI_NO_MEDIA when no media presents
[mirror_edk2.git] / MdeModulePkg / Bus / Scsi / ScsiDiskDxe / ScsiDisk.c
index 2289f20152d309505c788dd77f781d9bdf88b7d2..6a0a19355696001a2b14c01d1611ea8a9abe5fa4 100644 (file)
@@ -568,6 +568,7 @@ ScsiDiskReadBlocks (
   MediaChange    = FALSE;\r
   OldTpl         = gBS->RaiseTPL (TPL_CALLBACK);\r
   ScsiDiskDevice = SCSI_DISK_DEV_FROM_BLKIO (This);\r
+  Media          = ScsiDiskDevice->BlkIo.Media;\r
 \r
   if (!IS_DEVICE_FIXED(ScsiDiskDevice)) {\r
 \r
@@ -598,14 +599,17 @@ ScsiDiskReadBlocks (
                &ScsiDiskDevice->EraseBlock\r
                );\r
       }\r
-      Status = EFI_MEDIA_CHANGED;\r
+      if (Media->MediaPresent) {\r
+        Status = EFI_MEDIA_CHANGED;\r
+      } else {\r
+        Status = EFI_NO_MEDIA;\r
+      }\r
       goto Done;\r
     }\r
   }\r
   //\r
   // Get the intrinsic block size\r
   //\r
-  Media           = ScsiDiskDevice->BlkIo.Media;\r
   BlockSize       = Media->BlockSize;\r
 \r
   NumberOfBlocks  = BufferSize / BlockSize;\r
@@ -700,6 +704,7 @@ ScsiDiskWriteBlocks (
   MediaChange    = FALSE;\r
   OldTpl         = gBS->RaiseTPL (TPL_CALLBACK);\r
   ScsiDiskDevice = SCSI_DISK_DEV_FROM_BLKIO (This);\r
+  Media          = ScsiDiskDevice->BlkIo.Media;\r
 \r
   if (!IS_DEVICE_FIXED(ScsiDiskDevice)) {\r
 \r
@@ -730,14 +735,17 @@ ScsiDiskWriteBlocks (
                &ScsiDiskDevice->EraseBlock\r
                );\r
       }\r
-      Status = EFI_MEDIA_CHANGED;\r
+      if (Media->MediaPresent) {\r
+        Status = EFI_MEDIA_CHANGED;\r
+      } else {\r
+        Status = EFI_NO_MEDIA;\r
+      }\r
       goto Done;\r
     }\r
   }\r
   //\r
   // Get the intrinsic block size\r
   //\r
-  Media           = ScsiDiskDevice->BlkIo.Media;\r
   BlockSize       = Media->BlockSize;\r
 \r
   NumberOfBlocks  = BufferSize / BlockSize;\r
@@ -922,6 +930,7 @@ ScsiDiskReadBlocksEx (
   MediaChange    = FALSE;\r
   OldTpl         = gBS->RaiseTPL (TPL_CALLBACK);\r
   ScsiDiskDevice = SCSI_DISK_DEV_FROM_BLKIO2 (This);\r
+  Media          = ScsiDiskDevice->BlkIo.Media;\r
 \r
   if (!IS_DEVICE_FIXED(ScsiDiskDevice)) {\r
 \r
@@ -952,14 +961,17 @@ ScsiDiskReadBlocksEx (
                &ScsiDiskDevice->EraseBlock\r
                );\r
       }\r
-      Status = EFI_MEDIA_CHANGED;\r
+      if (Media->MediaPresent) {\r
+        Status = EFI_MEDIA_CHANGED;\r
+      } else {\r
+        Status = EFI_NO_MEDIA;\r
+      }\r
       goto Done;\r
     }\r
   }\r
   //\r
   // Get the intrinsic block size\r
   //\r
-  Media           = ScsiDiskDevice->BlkIo2.Media;\r
   BlockSize       = Media->BlockSize;\r
 \r
   NumberOfBlocks  = BufferSize / BlockSize;\r
@@ -1081,6 +1093,7 @@ ScsiDiskWriteBlocksEx (
   MediaChange    = FALSE;\r
   OldTpl         = gBS->RaiseTPL (TPL_CALLBACK);\r
   ScsiDiskDevice = SCSI_DISK_DEV_FROM_BLKIO2 (This);\r
+  Media          = ScsiDiskDevice->BlkIo.Media;\r
 \r
   if (!IS_DEVICE_FIXED(ScsiDiskDevice)) {\r
 \r
@@ -1111,14 +1124,17 @@ ScsiDiskWriteBlocksEx (
                &ScsiDiskDevice->EraseBlock\r
                );\r
       }\r
-      Status = EFI_MEDIA_CHANGED;\r
+      if (Media->MediaPresent) {\r
+        Status = EFI_MEDIA_CHANGED;\r
+      } else {\r
+        Status = EFI_NO_MEDIA;\r
+      }\r
       goto Done;\r
     }\r
   }\r
   //\r
   // Get the intrinsic block size\r
   //\r
-  Media           = ScsiDiskDevice->BlkIo2.Media;\r
   BlockSize       = Media->BlockSize;\r
 \r
   NumberOfBlocks  = BufferSize / BlockSize;\r
@@ -1230,6 +1246,7 @@ ScsiDiskFlushBlocksEx (
   MediaChange    = FALSE;\r
   OldTpl         = gBS->RaiseTPL (TPL_CALLBACK);\r
   ScsiDiskDevice = SCSI_DISK_DEV_FROM_BLKIO2 (This);\r
+  Media          = ScsiDiskDevice->BlkIo.Media;\r
 \r
   if (!IS_DEVICE_FIXED(ScsiDiskDevice)) {\r
 \r
@@ -1260,13 +1277,15 @@ ScsiDiskFlushBlocksEx (
                &ScsiDiskDevice->EraseBlock\r
                );\r
       }\r
-      Status = EFI_MEDIA_CHANGED;\r
+      if (Media->MediaPresent) {\r
+        Status = EFI_MEDIA_CHANGED;\r
+      } else {\r
+        Status = EFI_NO_MEDIA;\r
+      }\r
       goto Done;\r
     }\r
   }\r
 \r
-  Media = ScsiDiskDevice->BlkIo2.Media;\r
-\r
   if (!(Media->MediaPresent)) {\r
     Status = EFI_NO_MEDIA;\r
     goto Done;\r