]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkUnixPkg/Dxe/UnixThunk/Bus/BlockIo/UnixBlockIo.c
Add some definitions for efi event in Uefi/UefiSpec.h to follow spec.
[mirror_edk2.git] / EdkUnixPkg / Dxe / UnixThunk / Bus / BlockIo / UnixBlockIo.c
index 1425531cf8986dea46c87deff0d9586c1947ad96..2ddc9e5babf39bef8dd8f46a39a2929166d0f295 100644 (file)
@@ -1,6 +1,6 @@
 /*++\r
 \r
-Copyright (c) 2004 - 2005, Intel Corporation                                                         \r
+Copyright (c) 2004 - 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
@@ -679,7 +679,7 @@ Returns:
                   );\r
   ASSERT_EFI_ERROR (Status);\r
 \r
-  EfiInitializeLock (&Private->Lock, EFI_TPL_NOTIFY);\r
+  EfiInitializeLock (&Private->Lock, TPL_NOTIFY);\r
 \r
   Private->UnixThunk = UnixIo->UnixThunk;\r
 \r
@@ -1064,25 +1064,33 @@ UnixBlockIoReadBlocks (
   UNIX_BLOCK_IO_PRIVATE *Private;\r
   ssize_t                 len;\r
   EFI_STATUS              Status;\r
+  EFI_TPL                 OldTpl;\r
+\r
+  OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
 \r
   Private = UNIX_BLOCK_IO_PRIVATE_DATA_FROM_THIS (This);\r
 \r
   Status  = UnixBlockIoReadWriteCommon (Private, MediaId, Lba, BufferSize, Buffer, "UnixReadBlocks");\r
   if (EFI_ERROR (Status)) {\r
-    return Status;\r
+    goto Done;\r
   }\r
 \r
   len = Private->UnixThunk->Read (Private->fd, Buffer, BufferSize);\r
   if (len != BufferSize) {\r
     DEBUG ((EFI_D_INIT, "ReadBlocks: ReadFile failed.\n"));\r
-    return UnixBlockIoError (Private);\r
+    Status = UnixBlockIoError (Private);\r
+    goto Done;\r
   }\r
 \r
   //\r
   // If we wrote then media is present.\r
   //\r
   This->Media->MediaPresent = TRUE;\r
-  return EFI_SUCCESS;\r
+  Status = EFI_SUCCESS;\r
+\r
+Done:\r
+  gBS->RestoreTPL (OldTpl);\r
+  return Status;\r
 }\r
 \r
 STATIC\r
@@ -1123,18 +1131,22 @@ UnixBlockIoWriteBlocks (
   UNIX_BLOCK_IO_PRIVATE *Private;\r
   ssize_t                 len;\r
   EFI_STATUS              Status;\r
+  EFI_TPL                 OldTpl;\r
+\r
+  OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
 \r
   Private = UNIX_BLOCK_IO_PRIVATE_DATA_FROM_THIS (This);\r
 \r
   Status  = UnixBlockIoReadWriteCommon (Private, MediaId, Lba, BufferSize, Buffer, "UnixWriteBlocks");\r
   if (EFI_ERROR (Status)) {\r
-    return Status;\r
+    goto Done;\r
   }\r
 \r
   len = Private->UnixThunk->Write (Private->fd, Buffer, BufferSize);\r
   if (len != BufferSize) {\r
     DEBUG ((EFI_D_INIT, "ReadBlocks: WriteFile failed.\n"));\r
-    return UnixBlockIoError (Private);\r
+    Status = UnixBlockIoError (Private);\r
+    goto Done;\r
   }\r
 \r
   //\r
@@ -1142,7 +1154,11 @@ UnixBlockIoWriteBlocks (
   //\r
   This->Media->MediaPresent = TRUE;\r
   This->Media->ReadOnly     = FALSE;\r
-  return EFI_SUCCESS;\r
+  Status = EFI_SUCCESS;\r
+\r
+Done:\r
+  gBS->RestoreTPL (OldTpl);\r
+  return Status;\r
 }\r
 \r
 STATIC\r
@@ -1193,7 +1209,10 @@ UnixBlockIoResetBlock (
 --*/\r
 {\r
   UNIX_BLOCK_IO_PRIVATE *Private;\r
+  EFI_TPL               OldTpl;\r
 \r
+  OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
+  \r
   Private = UNIX_BLOCK_IO_PRIVATE_DATA_FROM_THIS (This);\r
 \r
   if (Private->fd >= 0) {\r
@@ -1201,6 +1220,8 @@ UnixBlockIoResetBlock (
     Private->fd = -1;\r
   }\r
 \r
+  gBS->RestoreTPL (OldTpl);\r
+\r
   return EFI_SUCCESS;\r
 }\r
 \r