Re: [edk2] [PATCH] MdeModulePkg/ScsiDisk: Return EFI_NO_MEDIA when no media presents

2017-12-10 Thread Zeng, Star
Reviewed-by: Star Zeng <star.z...@intel.com>

-Original Message-
From: edk2-devel [mailto:edk2-devel-boun...@lists.01.org] On Behalf Of Ruiyu Ni
Sent: Thursday, December 7, 2017 5:55 PM
To: edk2-devel@lists.01.org
Cc: Wu, Hao A <hao.a...@intel.com>; Zeng, Star <star.z...@intel.com>
Subject: [edk2] [PATCH] MdeModulePkg/ScsiDisk: Return EFI_NO_MEDIA when no 
media presents

Current code always return EFI_MEDIA_CHANGED no matter the media is removed 
from CD/DVD drive or the media is changed.
It doesn't strictly follow the UEFI Spec.
Update code to return EFI_NO_MEDIA when media is removed.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ruiyu Ni <ruiyu...@intel.com>
Cc: Star Zeng <star.z...@intel.com>
Cc: Hao A Wu <hao.a...@intel.com>
---
 MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDisk.c | 41 
 1 file changed, 30 insertions(+), 11 deletions(-)

diff --git a/MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDisk.c 
b/MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDisk.c
index 2289f20152..6a0a193556 100644
--- a/MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDisk.c
+++ b/MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDisk.c
@@ -568,6 +568,7 @@ ScsiDiskReadBlocks (
   MediaChange= FALSE;
   OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
   ScsiDiskDevice = SCSI_DISK_DEV_FROM_BLKIO (This);
+  Media  = ScsiDiskDevice->BlkIo.Media;
 
   if (!IS_DEVICE_FIXED(ScsiDiskDevice)) {
 
@@ -598,14 +599,17 @@ ScsiDiskReadBlocks (
>EraseBlock
);
   }
-  Status = EFI_MEDIA_CHANGED;
+  if (Media->MediaPresent) {
+Status = EFI_MEDIA_CHANGED;
+  } else {
+Status = EFI_NO_MEDIA;
+  }
   goto Done;
 }
   }
   //
   // Get the intrinsic block size
   //
-  Media   = ScsiDiskDevice->BlkIo.Media;
   BlockSize   = Media->BlockSize;
 
   NumberOfBlocks  = BufferSize / BlockSize; @@ -700,6 +704,7 @@ 
ScsiDiskWriteBlocks (
   MediaChange= FALSE;
   OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
   ScsiDiskDevice = SCSI_DISK_DEV_FROM_BLKIO (This);
+  Media  = ScsiDiskDevice->BlkIo.Media;
 
   if (!IS_DEVICE_FIXED(ScsiDiskDevice)) {
 
@@ -730,14 +735,17 @@ ScsiDiskWriteBlocks (
>EraseBlock
);
   }
-  Status = EFI_MEDIA_CHANGED;
+  if (Media->MediaPresent) {
+Status = EFI_MEDIA_CHANGED;
+  } else {
+Status = EFI_NO_MEDIA;
+  }
   goto Done;
 }
   }
   //
   // Get the intrinsic block size
   //
-  Media   = ScsiDiskDevice->BlkIo.Media;
   BlockSize   = Media->BlockSize;
 
   NumberOfBlocks  = BufferSize / BlockSize; @@ -922,6 +930,7 @@ 
ScsiDiskReadBlocksEx (
   MediaChange= FALSE;
   OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
   ScsiDiskDevice = SCSI_DISK_DEV_FROM_BLKIO2 (This);
+  Media  = ScsiDiskDevice->BlkIo.Media;
 
   if (!IS_DEVICE_FIXED(ScsiDiskDevice)) {
 
@@ -952,14 +961,17 @@ ScsiDiskReadBlocksEx (
>EraseBlock
);
   }
-  Status = EFI_MEDIA_CHANGED;
+  if (Media->MediaPresent) {
+Status = EFI_MEDIA_CHANGED;
+  } else {
+Status = EFI_NO_MEDIA;
+  }
   goto Done;
 }
   }
   //
   // Get the intrinsic block size
   //
-  Media   = ScsiDiskDevice->BlkIo2.Media;
   BlockSize   = Media->BlockSize;
 
   NumberOfBlocks  = BufferSize / BlockSize; @@ -1081,6 +1093,7 @@ 
ScsiDiskWriteBlocksEx (
   MediaChange= FALSE;
   OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
   ScsiDiskDevice = SCSI_DISK_DEV_FROM_BLKIO2 (This);
+  Media  = ScsiDiskDevice->BlkIo.Media;
 
   if (!IS_DEVICE_FIXED(ScsiDiskDevice)) {
 
@@ -,14 +1124,17 @@ ScsiDiskWriteBlocksEx (
>EraseBlock
);
   }
-  Status = EFI_MEDIA_CHANGED;
+  if (Media->MediaPresent) {
+Status = EFI_MEDIA_CHANGED;
+  } else {
+Status = EFI_NO_MEDIA;
+  }
   goto Done;
 }
   }
   //
   // Get the intrinsic block size
   //
-  Media   = ScsiDiskDevice->BlkIo2.Media;
   BlockSize   = Media->BlockSize;
 
   NumberOfBlocks  = BufferSize / BlockSize; @@ -1230,6 +1246,7 @@ 
ScsiDiskFlushBlocksEx (
   MediaChange= FALSE;
   OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
   ScsiDiskDevice = SCSI_DISK_DEV_FROM_BLKIO2 (This);
+  Media  = ScsiDiskDevice->BlkIo.Media;
 
   if (!IS_DEVICE_FIXED(ScsiDiskDevice)) {
 
@@ -1260,13 +1277,15 @@ ScsiDiskFlushBlocksEx (
>EraseBlock
);
   }
-  Status = EFI_MEDIA_CHANGED;
+  if (Media->MediaPresent) {
+Status = EFI_MEDIA_CHANGED;
+  } else {
+Status = EFI_NO_MEDIA;
+  }
   goto Done;
 }
   }
 
-  Media = ScsiDiskDevice->BlkIo2.Media;
-
   if (!(Media->MediaPresent)) {
 Status = EFI_NO_MEDIA;
 goto Done;
--
2.15.0.gvfs.1.preview.4

Re: [edk2] [PATCH] MdeModulePkg/ScsiDisk: Return EFI_NO_MEDIA when no media presents

2017-12-07 Thread Wu, Hao A
Reviewed-by: Hao Wu 

Best Regards,
Hao Wu


> -Original Message-
> From: Ni, Ruiyu
> Sent: Thursday, December 07, 2017 5:55 PM
> To: edk2-devel@lists.01.org
> Cc: Zeng, Star; Wu, Hao A
> Subject: [PATCH] MdeModulePkg/ScsiDisk: Return EFI_NO_MEDIA when no
> media presents
> 
> Current code always return EFI_MEDIA_CHANGED no matter the media
> is removed from CD/DVD drive or the media is changed.
> It doesn't strictly follow the UEFI Spec.
> Update code to return EFI_NO_MEDIA when media is removed.
> 
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Ruiyu Ni 
> Cc: Star Zeng 
> Cc: Hao A Wu 
> ---
>  MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDisk.c | 41 -
> ---
>  1 file changed, 30 insertions(+), 11 deletions(-)
> 
> diff --git a/MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDisk.c
> b/MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDisk.c
> index 2289f20152..6a0a193556 100644
> --- a/MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDisk.c
> +++ b/MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDisk.c
> @@ -568,6 +568,7 @@ ScsiDiskReadBlocks (
>MediaChange= FALSE;
>OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
>ScsiDiskDevice = SCSI_DISK_DEV_FROM_BLKIO (This);
> +  Media  = ScsiDiskDevice->BlkIo.Media;
> 
>if (!IS_DEVICE_FIXED(ScsiDiskDevice)) {
> 
> @@ -598,14 +599,17 @@ ScsiDiskReadBlocks (
> >EraseBlock
> );
>}
> -  Status = EFI_MEDIA_CHANGED;
> +  if (Media->MediaPresent) {
> +Status = EFI_MEDIA_CHANGED;
> +  } else {
> +Status = EFI_NO_MEDIA;
> +  }
>goto Done;
>  }
>}
>//
>// Get the intrinsic block size
>//
> -  Media   = ScsiDiskDevice->BlkIo.Media;
>BlockSize   = Media->BlockSize;
> 
>NumberOfBlocks  = BufferSize / BlockSize;
> @@ -700,6 +704,7 @@ ScsiDiskWriteBlocks (
>MediaChange= FALSE;
>OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
>ScsiDiskDevice = SCSI_DISK_DEV_FROM_BLKIO (This);
> +  Media  = ScsiDiskDevice->BlkIo.Media;
> 
>if (!IS_DEVICE_FIXED(ScsiDiskDevice)) {
> 
> @@ -730,14 +735,17 @@ ScsiDiskWriteBlocks (
> >EraseBlock
> );
>}
> -  Status = EFI_MEDIA_CHANGED;
> +  if (Media->MediaPresent) {
> +Status = EFI_MEDIA_CHANGED;
> +  } else {
> +Status = EFI_NO_MEDIA;
> +  }
>goto Done;
>  }
>}
>//
>// Get the intrinsic block size
>//
> -  Media   = ScsiDiskDevice->BlkIo.Media;
>BlockSize   = Media->BlockSize;
> 
>NumberOfBlocks  = BufferSize / BlockSize;
> @@ -922,6 +930,7 @@ ScsiDiskReadBlocksEx (
>MediaChange= FALSE;
>OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
>ScsiDiskDevice = SCSI_DISK_DEV_FROM_BLKIO2 (This);
> +  Media  = ScsiDiskDevice->BlkIo.Media;
> 
>if (!IS_DEVICE_FIXED(ScsiDiskDevice)) {
> 
> @@ -952,14 +961,17 @@ ScsiDiskReadBlocksEx (
> >EraseBlock
> );
>}
> -  Status = EFI_MEDIA_CHANGED;
> +  if (Media->MediaPresent) {
> +Status = EFI_MEDIA_CHANGED;
> +  } else {
> +Status = EFI_NO_MEDIA;
> +  }
>goto Done;
>  }
>}
>//
>// Get the intrinsic block size
>//
> -  Media   = ScsiDiskDevice->BlkIo2.Media;
>BlockSize   = Media->BlockSize;
> 
>NumberOfBlocks  = BufferSize / BlockSize;
> @@ -1081,6 +1093,7 @@ ScsiDiskWriteBlocksEx (
>MediaChange= FALSE;
>OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
>ScsiDiskDevice = SCSI_DISK_DEV_FROM_BLKIO2 (This);
> +  Media  = ScsiDiskDevice->BlkIo.Media;
> 
>if (!IS_DEVICE_FIXED(ScsiDiskDevice)) {
> 
> @@ -,14 +1124,17 @@ ScsiDiskWriteBlocksEx (
> >EraseBlock
> );
>}
> -  Status = EFI_MEDIA_CHANGED;
> +  if (Media->MediaPresent) {
> +Status = EFI_MEDIA_CHANGED;
> +  } else {
> +Status = EFI_NO_MEDIA;
> +  }
>goto Done;
>  }
>}
>//
>// Get the intrinsic block size
>//
> -  Media   = ScsiDiskDevice->BlkIo2.Media;
>BlockSize   = Media->BlockSize;
> 
>NumberOfBlocks  = BufferSize / BlockSize;
> @@ -1230,6 +1246,7 @@ ScsiDiskFlushBlocksEx (
>MediaChange= FALSE;
>OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
>ScsiDiskDevice = SCSI_DISK_DEV_FROM_BLKIO2 (This);
> +  Media  = ScsiDiskDevice->BlkIo.Media;
> 
>if (!IS_DEVICE_FIXED(ScsiDiskDevice)) {
> 
> @@ -1260,13 +1277,15 @@ ScsiDiskFlushBlocksEx (
> >EraseBlock
> );
>}
> -  Status = EFI_MEDIA_CHANGED;
> +  if (Media->MediaPresent) {
> +Status = EFI_MEDIA_CHANGED;
> +  } else {
> +Status = EFI_NO_MEDIA;
> +  }
>goto Done;
>  }
>}
> 
> -  Media = ScsiDiskDevice->BlkIo2.Media;
> -
>if 

[edk2] [PATCH] MdeModulePkg/ScsiDisk: Return EFI_NO_MEDIA when no media presents

2017-12-07 Thread Ruiyu Ni
Current code always return EFI_MEDIA_CHANGED no matter the media
is removed from CD/DVD drive or the media is changed.
It doesn't strictly follow the UEFI Spec.
Update code to return EFI_NO_MEDIA when media is removed.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ruiyu Ni 
Cc: Star Zeng 
Cc: Hao A Wu 
---
 MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDisk.c | 41 
 1 file changed, 30 insertions(+), 11 deletions(-)

diff --git a/MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDisk.c 
b/MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDisk.c
index 2289f20152..6a0a193556 100644
--- a/MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDisk.c
+++ b/MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDisk.c
@@ -568,6 +568,7 @@ ScsiDiskReadBlocks (
   MediaChange= FALSE;
   OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
   ScsiDiskDevice = SCSI_DISK_DEV_FROM_BLKIO (This);
+  Media  = ScsiDiskDevice->BlkIo.Media;
 
   if (!IS_DEVICE_FIXED(ScsiDiskDevice)) {
 
@@ -598,14 +599,17 @@ ScsiDiskReadBlocks (
>EraseBlock
);
   }
-  Status = EFI_MEDIA_CHANGED;
+  if (Media->MediaPresent) {
+Status = EFI_MEDIA_CHANGED;
+  } else {
+Status = EFI_NO_MEDIA;
+  }
   goto Done;
 }
   }
   //
   // Get the intrinsic block size
   //
-  Media   = ScsiDiskDevice->BlkIo.Media;
   BlockSize   = Media->BlockSize;
 
   NumberOfBlocks  = BufferSize / BlockSize;
@@ -700,6 +704,7 @@ ScsiDiskWriteBlocks (
   MediaChange= FALSE;
   OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
   ScsiDiskDevice = SCSI_DISK_DEV_FROM_BLKIO (This);
+  Media  = ScsiDiskDevice->BlkIo.Media;
 
   if (!IS_DEVICE_FIXED(ScsiDiskDevice)) {
 
@@ -730,14 +735,17 @@ ScsiDiskWriteBlocks (
>EraseBlock
);
   }
-  Status = EFI_MEDIA_CHANGED;
+  if (Media->MediaPresent) {
+Status = EFI_MEDIA_CHANGED;
+  } else {
+Status = EFI_NO_MEDIA;
+  }
   goto Done;
 }
   }
   //
   // Get the intrinsic block size
   //
-  Media   = ScsiDiskDevice->BlkIo.Media;
   BlockSize   = Media->BlockSize;
 
   NumberOfBlocks  = BufferSize / BlockSize;
@@ -922,6 +930,7 @@ ScsiDiskReadBlocksEx (
   MediaChange= FALSE;
   OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
   ScsiDiskDevice = SCSI_DISK_DEV_FROM_BLKIO2 (This);
+  Media  = ScsiDiskDevice->BlkIo.Media;
 
   if (!IS_DEVICE_FIXED(ScsiDiskDevice)) {
 
@@ -952,14 +961,17 @@ ScsiDiskReadBlocksEx (
>EraseBlock
);
   }
-  Status = EFI_MEDIA_CHANGED;
+  if (Media->MediaPresent) {
+Status = EFI_MEDIA_CHANGED;
+  } else {
+Status = EFI_NO_MEDIA;
+  }
   goto Done;
 }
   }
   //
   // Get the intrinsic block size
   //
-  Media   = ScsiDiskDevice->BlkIo2.Media;
   BlockSize   = Media->BlockSize;
 
   NumberOfBlocks  = BufferSize / BlockSize;
@@ -1081,6 +1093,7 @@ ScsiDiskWriteBlocksEx (
   MediaChange= FALSE;
   OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
   ScsiDiskDevice = SCSI_DISK_DEV_FROM_BLKIO2 (This);
+  Media  = ScsiDiskDevice->BlkIo.Media;
 
   if (!IS_DEVICE_FIXED(ScsiDiskDevice)) {
 
@@ -,14 +1124,17 @@ ScsiDiskWriteBlocksEx (
>EraseBlock
);
   }
-  Status = EFI_MEDIA_CHANGED;
+  if (Media->MediaPresent) {
+Status = EFI_MEDIA_CHANGED;
+  } else {
+Status = EFI_NO_MEDIA;
+  }
   goto Done;
 }
   }
   //
   // Get the intrinsic block size
   //
-  Media   = ScsiDiskDevice->BlkIo2.Media;
   BlockSize   = Media->BlockSize;
 
   NumberOfBlocks  = BufferSize / BlockSize;
@@ -1230,6 +1246,7 @@ ScsiDiskFlushBlocksEx (
   MediaChange= FALSE;
   OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
   ScsiDiskDevice = SCSI_DISK_DEV_FROM_BLKIO2 (This);
+  Media  = ScsiDiskDevice->BlkIo.Media;
 
   if (!IS_DEVICE_FIXED(ScsiDiskDevice)) {
 
@@ -1260,13 +1277,15 @@ ScsiDiskFlushBlocksEx (
>EraseBlock
);
   }
-  Status = EFI_MEDIA_CHANGED;
+  if (Media->MediaPresent) {
+Status = EFI_MEDIA_CHANGED;
+  } else {
+Status = EFI_NO_MEDIA;
+  }
   goto Done;
 }
   }
 
-  Media = ScsiDiskDevice->BlkIo2.Media;
-
   if (!(Media->MediaPresent)) {
 Status = EFI_NO_MEDIA;
 goto Done;
-- 
2.15.0.gvfs.1.preview.4

___
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel