NULL\r
};\r
\r
-UINTN mUsbMscInfo = DEBUG_INFO;\r
-UINTN mUsbMscError = DEBUG_ERROR;\r
-\r
-\r
/**\r
Retrieve the media parameters such as disk gemotric for the\r
device's BLOCK IO protocol.\r
Media->ReadOnly = FALSE;\r
Media->WriteCaching = FALSE;\r
Media->IoAlign = 0;\r
+ Media->MediaId = 1;\r
\r
//\r
// Some device may spend several seconds before it is ready.\r
\r
Status = UsbBootIsUnitReady (UsbMass);\r
if (EFI_ERROR (Status)) {\r
- gBS->Stall (USB_BOOT_RETRY_UNIT_READY_STALL * (Index + 1)); \r
+ gBS->Stall (USB_BOOT_RETRY_UNIT_READY_STALL * (Index + 1));\r
}\r
\r
}\r
\r
**/\r
EFI_STATUS\r
+EFIAPI\r
UsbMassReset (\r
IN EFI_BLOCK_IO_PROTOCOL *This,\r
IN BOOLEAN ExtendedVerification\r
\r
**/\r
EFI_STATUS\r
+EFIAPI\r
UsbMassReadBlocks (\r
IN EFI_BLOCK_IO_PROTOCOL *This,\r
IN UINT32 MediaId,\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
Status = EFI_INVALID_PARAMETER;\r
goto ON_EXIT;\r
}\r
- \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
+ // need to detect the media before each rw. While some of\r
// Usb-Flash is marked as removable media.\r
- // \r
- // \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
+ DEBUG ((EFI_D_ERROR, "UsbMassReadBlocks: UsbBootDetectMedia (%r)\n", Status));\r
goto ON_EXIT;\r
- } \r
+ }\r
}\r
- \r
+\r
//\r
// Make sure BlockSize and LBA is consistent with BufferSize\r
//\r
TotalBlock = BufferSize / Media->BlockSize;\r
\r
if (Lba + TotalBlock - 1 > Media->LastBlock) {\r
- Status = EFI_BAD_BUFFER_SIZE;\r
+ Status = EFI_INVALID_PARAMETER;\r
+ goto ON_EXIT;\r
+ }\r
+\r
+ if (!(Media->MediaPresent)) {\r
+ Status = EFI_NO_MEDIA;\r
+ goto ON_EXIT;\r
+ }\r
+\r
+ if (MediaId != Media->MediaId) {\r
+ Status = EFI_MEDIA_CHANGED;\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
+ DEBUG ((EFI_D_ERROR, "UsbMassReadBlocks: UsbBootReadBlocks (%r) -> Reset\n", Status));\r
UsbMassReset (This, TRUE);\r
}\r
\r
\r
**/\r
EFI_STATUS\r
+EFIAPI\r
UsbMassWriteBlocks (\r
IN EFI_BLOCK_IO_PROTOCOL *This,\r
IN UINT32 MediaId,\r
Status = EFI_INVALID_PARAMETER;\r
goto ON_EXIT;\r
}\r
- \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
+ // need to detect the media before each rw. While some of\r
// Usb-Flash is marked as removable media.\r
- // \r
- // \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
+ DEBUG ((EFI_D_ERROR, "UsbMassWriteBlocks: UsbBootDetectMedia (%r)\n", Status));\r
goto ON_EXIT;\r
- } \r
+ }\r
}\r
- \r
+\r
//\r
// Make sure BlockSize and LBA is consistent with BufferSize\r
//\r
TotalBlock = BufferSize / Media->BlockSize;\r
\r
if (Lba + TotalBlock - 1 > Media->LastBlock) {\r
- Status = EFI_BAD_BUFFER_SIZE;\r
+ Status = EFI_INVALID_PARAMETER;\r
goto ON_EXIT;\r
}\r
- \r
+\r
+ if (!(Media->MediaPresent)) {\r
+ Status = EFI_NO_MEDIA;\r
+ goto ON_EXIT;\r
+ }\r
+\r
+ if (MediaId != Media->MediaId) {\r
+ Status = EFI_MEDIA_CHANGED;\r
+ goto ON_EXIT;\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
//\r
Status = UsbBootWriteBlocks (UsbMass, (UINT32) Lba, TotalBlock, Buffer);\r
if (EFI_ERROR (Status)) {\r
- DEBUG ((mUsbMscError, "UsbMassWriteBlocks: UsbBootWriteBlocks (%r) -> Reset\n", Status));\r
+ DEBUG ((EFI_D_ERROR, "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
EFI_STATUS\r
+EFIAPI\r
UsbMassFlushBlocks (\r
IN EFI_BLOCK_IO_PROTOCOL *This\r
)\r
}\r
}\r
\r
- DEBUG ((mUsbMscInfo, "Found a USB mass store device %r\n", Status));\r
+ DEBUG ((EFI_D_INFO, "Found a USB mass store device %r\n", Status));\r
\r
ON_EXIT:\r
gBS->CloseProtocol (\r
//\r
Status = UsbIo->UsbGetInterfaceDescriptor (UsbIo, &Interface);\r
if (EFI_ERROR (Status)) {\r
- DEBUG ((mUsbMscError, "USBMassDriverBindingStart: UsbIo->UsbGetInterfaceDescriptor (%r)\n", Status));\r
+ DEBUG ((EFI_D_ERROR, "USBMassDriverBindingStart: UsbIo->UsbGetInterfaceDescriptor (%r)\n", Status));\r
goto ON_ERROR;\r
}\r
\r
}\r
\r
if (EFI_ERROR (Status)) {\r
- DEBUG ((mUsbMscError, "USBMassDriverBindingStart: Transport->Init (%r)\n", Status));\r
+ DEBUG ((EFI_D_ERROR, "USBMassDriverBindingStart: Transport->Init (%r)\n", Status));\r
goto ON_ERROR;\r
}\r
\r
(UsbMass->Pdt != USB_PDT_CDROM) &&\r
(UsbMass->Pdt != USB_PDT_OPTICAL) &&\r
(UsbMass->Pdt != USB_PDT_SIMPLE_DIRECT)) {\r
- DEBUG ((mUsbMscError, "USBMassDriverBindingStart: Found an unsupported peripheral type[%d]\n", UsbMass->Pdt));\r
+ DEBUG ((EFI_D_ERROR, "USBMassDriverBindingStart: Found an unsupported peripheral type[%d]\n", UsbMass->Pdt));\r
goto ON_ERROR;\r
}\r
} else if (Status != EFI_NO_MEDIA){\r
- DEBUG ((mUsbMscError, "USBMassDriverBindingStart: UsbMassInitMedia (%r)\n", Status));\r
+ DEBUG ((EFI_D_ERROR, "USBMassDriverBindingStart: UsbMassInitMedia (%r)\n", Status));\r
goto ON_ERROR;\r
}\r
\r