For USB mass storage, READ_FORMAT_CAPACITIES command returns wrong value for USB2.0 device.

In order to fix this issue, we change the retry policy. Try old command before new command.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2155 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
xli24 2006-12-30 03:21:44 +00:00
parent becca880dc
commit ea78388e1a
2 changed files with 6 additions and 6 deletions

View File

@ -33,8 +33,8 @@ Revision History
#define PROTOCOL_CBI0 0 #define PROTOCOL_CBI0 0
#define PROTOCOL_CBI1 1 #define PROTOCOL_CBI1 1
#define USBFLOPPY 1 #define USBFLOPPY 1 // for those that use ReadCapacity(0x25) command to retrieve media capacity
#define USBFLOPPY2 2 // for those that use ReadCapacity(0x25) command to retrieve media capacity #define USBFLOPPY2 2 // for those that use ReadFormatCapacity(0x23) command to retrieve media capacity
#define USBCDROM 3 #define USBCDROM 3
#define USB_FLOPPY_DEV_SIGNATURE EFI_SIGNATURE_32 ('u', 'f', 'l', 'p') #define USB_FLOPPY_DEV_SIGNATURE EFI_SIGNATURE_32 ('u', 'f', 'l', 'p')

View File

@ -999,26 +999,26 @@ UsbFloppyDetectMedia (
Status = USBFloppyReadCapacity (UsbFloppyDevice); Status = USBFloppyReadCapacity (UsbFloppyDevice);
break; break;
case USBFLOPPY: case USBFLOPPY2:
UsbMassStorageModeSense (UsbFloppyDevice); UsbMassStorageModeSense (UsbFloppyDevice);
Status = USBFloppyReadFormatCapacity (UsbFloppyDevice); Status = USBFloppyReadFormatCapacity (UsbFloppyDevice);
if (EFI_ERROR (Status) || !UsbFloppyDevice->BlkMedia.MediaPresent) { if (EFI_ERROR (Status) || !UsbFloppyDevice->BlkMedia.MediaPresent) {
// //
// retry the ReadCapacity command // retry the ReadCapacity command
// //
UsbFloppyDevice->DeviceType = USBFLOPPY2; UsbFloppyDevice->DeviceType = USBFLOPPY;
Status = EFI_DEVICE_ERROR; Status = EFI_DEVICE_ERROR;
} }
break; break;
case USBFLOPPY2: case USBFLOPPY:
UsbMassStorageModeSense (UsbFloppyDevice); UsbMassStorageModeSense (UsbFloppyDevice);
Status = USBFloppyReadCapacity (UsbFloppyDevice); Status = USBFloppyReadCapacity (UsbFloppyDevice);
if (EFI_ERROR (Status)) { if (EFI_ERROR (Status)) {
// //
// retry the ReadFormatCapacity command // retry the ReadFormatCapacity command
// //
UsbFloppyDevice->DeviceType = USBFLOPPY; UsbFloppyDevice->DeviceType = USBFLOPPY2;
} }
// //
// force the BlockSize to be 0x200. // force the BlockSize to be 0x200.