mirror of https://github.com/acidanthera/audk.git
MdeModulePkg/UsbMass: Fix hot-plug USB CDROM can't be recognized
In below calling stack:
UsbBootIsUnitReady()
UsbBootExecCmdWithRetry()
UsbBootExecCmd()
UsbBootRequestSense()
When USB CDROM is hot-plugged, UsbBootRequestSense() retrieves sense
key (6 = UnitAttention), additional sense code (29h = Power ON).
But it wrongly maps such sense data to Device Error status.
It causes UsbBootExecCmd() executed again.
In the second time call to UsbBootExecCmd(), UsbBootRequestSense()
retrieves sense key (6 = UnitAttention), additional sense code
(28h = media changed).
The above analysis explains why hot-plug USB CDROM cannot be
recognized after below commit:
SHA1 a662afb5b0
* MdeModulePkg/UsbStorage: Fix "map -r" cannot detect media change,
which removes the media changed status check in UsbBootDetectMedia().
The proper fix to this problem is to map the ASC (additional sense
code 29h) properly to success status so that no second call to
UsbBootExecCmd() is made.
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com>
Reviewed-by: Star Zeng <star.zeng@intel.com>
Cc: Feng Tian <feng.tian@intel.com>
This commit is contained in:
parent
ee33344c59
commit
6461344c31
|
@ -124,6 +124,8 @@ UsbBootRequestSense (
|
|||
Status = EFI_NOT_READY;
|
||||
} else if (SenseData.Asc == USB_BOOT_ASC_NO_MEDIA) {
|
||||
Status = EFI_NOT_READY;
|
||||
} else if (SenseData.Asc == USB_BOOT_ASC_POWER_ON) {
|
||||
Status = EFI_SUCCESS;
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
Definition of the command set of USB Mass Storage Specification
|
||||
for Bootability, Revision 1.0.
|
||||
|
||||
Copyright (c) 2007 - 2017, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR>
|
||||
This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
|
@ -55,6 +55,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|||
#define USB_BOOT_ASC_NOT_READY 0x04
|
||||
#define USB_BOOT_ASC_NO_MEDIA 0x3A
|
||||
#define USB_BOOT_ASC_MEDIA_CHANGE 0x28
|
||||
#define USB_BOOT_ASC_POWER_ON 0x29
|
||||
|
||||
//
|
||||
// Supported PDT codes, or Peripheral Device Type
|
||||
|
|
Loading…
Reference in New Issue