//\r
Status = EFI_SUCCESS;\r
\r
- for (Index = 0; Index < USB_BOOT_WAIT_RETRY; Index++) {\r
+ for (Index = 0; Index < USB_BOOT_INIT_MEDIA_RETRY; Index++) {\r
\r
Status = UsbBootGetParams (UsbMass);\r
if ((Status != EFI_MEDIA_CHANGED)\r
\r
Status = UsbBootIsUnitReady (UsbMass);\r
if (EFI_ERROR (Status)) {\r
- gBS->Stall (USB_BOOT_UNIT_READY_STALL * (Index + 1));\r
+ gBS->Stall (USB_BOOT_RETRY_UNIT_READY_STALL * (Index + 1)); \r
}\r
\r
}\r
)\r
{\r
USB_MASS_DEVICE *UsbMass;\r
+ EFI_TPL OldTpl;\r
+ EFI_STATUS Status;\r
+\r
+ OldTpl = gBS->RaiseTPL (USB_MASS_TPL);\r
\r
UsbMass = USB_MASS_DEVICE_FROM_BLOCKIO (This);\r
- return UsbMass->Transport->Reset (UsbMass->Context, ExtendedVerification);\r
+ Status = UsbMass->Transport->Reset (UsbMass->Context, ExtendedVerification);\r
+\r
+ gBS->RestoreTPL (OldTpl);\r
+\r
+ return Status;\r
}\r
\r
\r
USB_MASS_DEVICE *UsbMass;\r
EFI_BLOCK_IO_MEDIA *Media;\r
EFI_STATUS Status;\r
+ EFI_TPL OldTpl;\r
UINTN TotalBlock;\r
-\r
+ \r
+ OldTpl = gBS->RaiseTPL (USB_MASS_TPL);\r
UsbMass = USB_MASS_DEVICE_FROM_BLOCKIO (This);\r
Media = &UsbMass->BlockIoMedia;\r
\r
// First, validate the parameters\r
//\r
if ((Buffer == NULL) || (BufferSize == 0)) {\r
- return EFI_INVALID_PARAMETER;\r
+ Status = EFI_INVALID_PARAMETER;\r
+ goto ON_EXIT;\r
}\r
-\r
- //\r
- // If it is a remoable media, such as CD-Rom or Usb-Floppy,\r
- // if, need to detect the media before each rw, while Usb-Flash\r
- // needn't. However, it's hard to identify Usb-Floppy between\r
- // Usb-Flash by now, so detect media every time.\r
- //\r
- Status = UsbBootDetectMedia (UsbMass);\r
- if (EFI_ERROR (Status)) {\r
- DEBUG ((mUsbMscError, "UsbMassReadBlocks: UsbBootDetectMedia (%r)\n", Status));\r
- return Status;\r
+ \r
+ //\r
+ // If it is a removable media, such as CD-Rom or Usb-Floppy,\r
+ // need to detect the media before each rw. While some of \r
+ // Usb-Flash is marked as removable media.\r
+ // \r
+ // \r
+ if (Media->RemovableMedia == TRUE) {\r
+ Status = UsbBootDetectMedia (UsbMass);\r
+ if (EFI_ERROR (Status)) {\r
+ DEBUG ((mUsbMscError, "UsbMassReadBlocks: UsbBootDetectMedia (%r)\n", Status));\r
+ goto ON_EXIT;\r
+ } \r
}\r
-\r
+ \r
//\r
// Make sure BlockSize and LBA is consistent with BufferSize\r
//\r
if ((BufferSize % Media->BlockSize) != 0) {\r
- return EFI_BAD_BUFFER_SIZE;\r
+ Status = EFI_BAD_BUFFER_SIZE;\r
+ goto ON_EXIT;\r
}\r
\r
TotalBlock = BufferSize / Media->BlockSize;\r
\r
if (Lba + TotalBlock - 1 > Media->LastBlock) {\r
- return EFI_BAD_BUFFER_SIZE;\r
+ Status = EFI_BAD_BUFFER_SIZE;\r
+ goto ON_EXIT;\r
}\r
-\r
+ \r
Status = UsbBootReadBlocks (UsbMass, (UINT32) Lba, TotalBlock, Buffer);\r
if (EFI_ERROR (Status)) {\r
DEBUG ((mUsbMscError, "UsbMassReadBlocks: UsbBootReadBlocks (%r) -> Reset\n", Status));\r
UsbMassReset (This, TRUE);\r
}\r
\r
+ON_EXIT:\r
+ gBS->RestoreTPL (OldTpl);\r
return Status;\r
}\r
\r
USB_MASS_DEVICE *UsbMass;\r
EFI_BLOCK_IO_MEDIA *Media;\r
EFI_STATUS Status;\r
+ EFI_TPL OldTpl;\r
UINTN TotalBlock;\r
\r
+ OldTpl = gBS->RaiseTPL (USB_MASS_TPL);\r
UsbMass = USB_MASS_DEVICE_FROM_BLOCKIO (This);\r
Media = &UsbMass->BlockIoMedia;\r
\r
// First, validate the parameters\r
//\r
if ((Buffer == NULL) || (BufferSize == 0)) {\r
- return EFI_INVALID_PARAMETER;\r
+ Status = EFI_INVALID_PARAMETER;\r
+ goto ON_EXIT;\r
}\r
-\r
- //\r
- // If it is a remoable media, such as CD-Rom or Usb-Floppy,\r
- // if, need to detect the media before each rw, while Usb-Flash\r
- // needn't. However, it's hard to identify Usb-Floppy between\r
- // Usb-Flash by now, so detect media every time.\r
- //\r
- Status = UsbBootDetectMedia (UsbMass);\r
- if (EFI_ERROR (Status)) {\r
- DEBUG ((mUsbMscError, "UsbMassWriteBlocks: UsbBootDetectMedia (%r)\n", Status));\r
- return Status;\r
+ \r
+ //\r
+ // If it is a removable media, such as CD-Rom or Usb-Floppy,\r
+ // need to detect the media before each rw. While some of \r
+ // Usb-Flash is marked as removable media.\r
+ // \r
+ // \r
+ if (Media->RemovableMedia == TRUE) {\r
+ Status = UsbBootDetectMedia (UsbMass);\r
+ if (EFI_ERROR (Status)) {\r
+ DEBUG ((mUsbMscError, "UsbMassWriteBlocks: UsbBootDetectMedia (%r)\n", Status));\r
+ goto ON_EXIT;\r
+ } \r
}\r
-\r
+ \r
//\r
// Make sure BlockSize and LBA is consistent with BufferSize\r
//\r
if ((BufferSize % Media->BlockSize) != 0) {\r
- return EFI_BAD_BUFFER_SIZE;\r
+ Status = EFI_BAD_BUFFER_SIZE;\r
+ goto ON_EXIT;\r
}\r
\r
TotalBlock = BufferSize / Media->BlockSize;\r
\r
if (Lba + TotalBlock - 1 > Media->LastBlock) {\r
- return EFI_BAD_BUFFER_SIZE;\r
+ Status = EFI_BAD_BUFFER_SIZE;\r
+ goto ON_EXIT;\r
}\r
-\r
+ \r
//\r
// Try to write the data even the device is marked as ReadOnly,\r
// and clear the status should the write succeed.\r
DEBUG ((mUsbMscError, "UsbMassWriteBlocks: UsbBootWriteBlocks (%r) -> Reset\n", Status));\r
UsbMassReset (This, TRUE);\r
}\r
-\r
+ \r
+ON_EXIT:\r
+ gBS->RestoreTPL (OldTpl);\r
return Status;\r
}\r
\r