]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkModulePkg/Bus/Usb/UsbMassStorage/Dxe/UsbMassStorage.c
Add a lock to protect the critical region in Service APIs for gEfiBlockIoProtocolGuid...
[mirror_edk2.git] / EdkModulePkg / Bus / Usb / UsbMassStorage / Dxe / UsbMassStorage.c
index 951ab0a186fcae887deee4c0ba17dbdb3c1ee8b4..9caa006715feef8313ab104a531a0a54ed35dd2b 100644 (file)
@@ -1,6 +1,6 @@
 /*++\r
 \r
 /*++\r
 \r
-Copyright (c) 2006, Intel Corporation\r
+Copyright (c) 2006 - 2007, Intel Corporation\r
 All rights reserved. This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
 which accompanies this distribution.  The full text of the license may be found at\r
 All rights reserved. This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
 which accompanies this distribution.  The full text of the license may be found at\r
@@ -350,6 +350,9 @@ USBFloppyReset (
   USB_FLOPPY_DEV          *UsbFloppyDevice;\r
   EFI_USB_ATAPI_PROTOCOL  *UsbAtapiInterface;\r
   EFI_STATUS              Status;\r
   USB_FLOPPY_DEV          *UsbFloppyDevice;\r
   EFI_USB_ATAPI_PROTOCOL  *UsbAtapiInterface;\r
   EFI_STATUS              Status;\r
+  EFI_TPL                 OldTpl;\r
+\r
+  OldTpl = gBS->RaiseTPL (EFI_TPL_CALLBACK);\r
 \r
   UsbFloppyDevice   = USB_FLOPPY_DEV_FROM_THIS (This);\r
 \r
 \r
   UsbFloppyDevice   = USB_FLOPPY_DEV_FROM_THIS (This);\r
 \r
@@ -360,6 +363,8 @@ USBFloppyReset (
   //\r
   Status = UsbAtapiInterface->UsbAtapiReset (UsbAtapiInterface, ExtendedVerification);\r
 \r
   //\r
   Status = UsbAtapiInterface->UsbAtapiReset (UsbAtapiInterface, ExtendedVerification);\r
 \r
+  gBS->RestoreTPL (OldTpl);\r
+\r
   return Status;\r
 }\r
 \r
   return Status;\r
 }\r
 \r
@@ -404,6 +409,7 @@ USBFloppyReadBlocks (
   UINTN               BlockSize;\r
   UINTN               NumberOfBlocks;\r
   BOOLEAN             MediaChange;\r
   UINTN               BlockSize;\r
   UINTN               NumberOfBlocks;\r
   BOOLEAN             MediaChange;\r
+  EFI_TPL             OldTpl;\r
 \r
   Status          = EFI_SUCCESS;\r
   MediaChange     = FALSE;\r
 \r
   Status          = EFI_SUCCESS;\r
   MediaChange     = FALSE;\r
@@ -412,16 +418,16 @@ USBFloppyReadBlocks (
   //\r
   // Check parameters\r
   //\r
   //\r
   // Check parameters\r
   //\r
-  if (!Buffer) {\r
-    Status = EFI_INVALID_PARAMETER;\r
-    goto Done;\r
+  if (Buffer == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
   }\r
 \r
   if (BufferSize == 0) {\r
   }\r
 \r
   if (BufferSize == 0) {\r
-    Status = EFI_SUCCESS;\r
-    goto Done;\r
+    return EFI_SUCCESS;\r
   }\r
 \r
   }\r
 \r
+  OldTpl = gBS->RaiseTPL (EFI_TPL_CALLBACK);\r
+\r
   UsbFloppyTestUnitReady (UsbFloppyDevice);\r
 \r
   Status = UsbFloppyDetectMedia (UsbFloppyDevice, &MediaChange);\r
   UsbFloppyTestUnitReady (UsbFloppyDevice);\r
 \r
   Status = UsbFloppyDetectMedia (UsbFloppyDevice, &MediaChange);\r
@@ -485,6 +491,7 @@ USBFloppyReadBlocks (
     if (EFI_ERROR (Status)) {\r
       This->Reset (This, TRUE);\r
       Status = EFI_DEVICE_ERROR;\r
     if (EFI_ERROR (Status)) {\r
       This->Reset (This, TRUE);\r
       Status = EFI_DEVICE_ERROR;\r
+      goto Done;\r
     }\r
 \r
     if (NumberOfBlocks > BLOCK_UNIT) {\r
     }\r
 \r
     if (NumberOfBlocks > BLOCK_UNIT) {\r
@@ -499,6 +506,7 @@ USBFloppyReadBlocks (
  }\r
 \r
  Done:\r
  }\r
 \r
  Done:\r
+  gBS->RestoreTPL (OldTpl);\r
   return Status;\r
 }\r
 \r
   return Status;\r
 }\r
 \r
@@ -546,6 +554,7 @@ USBFloppyWriteBlocks (
   UINTN               BlockSize;\r
   UINTN               NumberOfBlocks;\r
   BOOLEAN             MediaChange;\r
   UINTN               BlockSize;\r
   UINTN               NumberOfBlocks;\r
   BOOLEAN             MediaChange;\r
+  EFI_TPL             OldTpl;\r
 \r
   Status          = EFI_SUCCESS;\r
   MediaChange     = FALSE;\r
 \r
   Status          = EFI_SUCCESS;\r
   MediaChange     = FALSE;\r
@@ -555,16 +564,16 @@ USBFloppyWriteBlocks (
   //\r
   // Check parameters\r
   //\r
   //\r
   // Check parameters\r
   //\r
-  if (!Buffer) {\r
-    Status = EFI_INVALID_PARAMETER;\r
-    goto Done;\r
+  if (Buffer == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
   }\r
 \r
   if (BufferSize == 0) {\r
   }\r
 \r
   if (BufferSize == 0) {\r
-    Status = EFI_SUCCESS;\r
-    goto Done;\r
+    return EFI_SUCCESS;\r
   }\r
 \r
   }\r
 \r
+  OldTpl = gBS->RaiseTPL (EFI_TPL_CALLBACK);\r
+\r
   UsbFloppyTestUnitReady (UsbFloppyDevice);\r
 \r
   Status = UsbFloppyDetectMedia (UsbFloppyDevice, &MediaChange);\r
   UsbFloppyTestUnitReady (UsbFloppyDevice);\r
 \r
   Status = UsbFloppyDetectMedia (UsbFloppyDevice, &MediaChange);\r
@@ -633,6 +642,7 @@ USBFloppyWriteBlocks (
     if (EFI_ERROR (Status)) {\r
       This->Reset (This, TRUE);\r
       Status = EFI_DEVICE_ERROR;\r
     if (EFI_ERROR (Status)) {\r
       This->Reset (This, TRUE);\r
       Status = EFI_DEVICE_ERROR;\r
+      goto Done;\r
     }\r
 \r
     if (NumberOfBlocks > BLOCK_UNIT) {\r
     }\r
 \r
     if (NumberOfBlocks > BLOCK_UNIT) {\r
@@ -647,7 +657,7 @@ USBFloppyWriteBlocks (
  }\r
 \r
 Done:\r
  }\r
 \r
 Done:\r
-\r
+  gBS->RestoreTPL (OldTpl);\r
   return Status;\r
 }\r
 \r
   return Status;\r
 }\r
 \r