]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkUnixPkg/Dxe/UnixThunk/Bus/BlockIo/UnixBlockIo.c
Fix build broken issue.
[mirror_edk2.git] / EdkUnixPkg / Dxe / UnixThunk / Bus / BlockIo / UnixBlockIo.c
index 81dd20661b8430b56a2e265fe2e3fc2e1375aee2..016722047037ee17486a14d737a5df09be8f5294 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
@@ -60,8 +60,8 @@ Abstract:
 \r
 --*/\r
 \r
-#include <fcntl.h>
-#include <unistd.h>
+#include <fcntl.h>\r
+#include <unistd.h>\r
 #include "UnixBlockIo.h"\r
 \r
 //\r
@@ -318,7 +318,7 @@ EFI_DRIVER_BINDING_PROTOCOL gUnixBlockIoDriverBinding = {
   UnixBlockIoDriverBindingSupported,\r
   UnixBlockIoDriverBindingStart,\r
   UnixBlockIoDriverBindingStop,\r
-  0x10,\r
+  0xa,\r
   NULL,\r
   NULL\r
 };\r
@@ -372,7 +372,7 @@ Returns:
     //\r
     // Check the GUID to see if this is a handle type the driver supports\r
     //\r
-    if (CompareGuid (UnixIo->TypeGuid, &gEfiUnixVirtualDisksGuid) ) {
+    if (CompareGuid (UnixIo->TypeGuid, &gEfiUnixVirtualDisksGuid) ) {\r
       Status = EFI_SUCCESS;\r
     }\r
   }\r
@@ -420,7 +420,7 @@ Returns:
   BOOLEAN                     WriteProtected;\r
   UINTN                       NumberOfBlocks;\r
   UINTN                       BlockSize;\r
-  INTN                       i;
+  INTN                       i;\r
 \r
   //\r
   // Grab the protocols we need\r
@@ -446,47 +446,47 @@ Returns:
   }\r
 \r
   Status  = EFI_NOT_FOUND;\r
-  //  Extract filename.
+  //  Extract filename.\r
   Str     = UnixIo->EnvString;\r
-  i = 0;
-  while (*Str && *Str != ':')
-    Buffer[i++] = *Str++;
-  Buffer[i] = 0;
+  i = 0;\r
+  while (*Str && *Str != ':')\r
+    Buffer[i++] = *Str++;\r
+  Buffer[i] = 0;\r
   if (*Str != ':') {\r
     goto Done;\r
   }\r
 \r
   Str++;\r
 \r
-  RemovableMedia = FALSE;
-  WriteProtected = TRUE;
-  NumberOfBlocks = 0;
-  BlockSize = 512;
-  do {
+  RemovableMedia = FALSE;\r
+  WriteProtected = TRUE;\r
+  NumberOfBlocks = 0;\r
+  BlockSize = 512;\r
+  do {\r
     if (*Str == 'R' || *Str == 'F') {\r
       RemovableMedia = (BOOLEAN) (*Str == 'R');\r
       Str++;\r
-    }
+    }\r
     if (*Str == 'O' || *Str == 'W') {\r
       WriteProtected  = (BOOLEAN) (*Str == 'O');\r
-      Str++;
-    }
-    if (*Str == 0)
-      break;
-    if (*Str != ';')
-      goto Done;
-    Str++;
-
+      Str++;\r
+    }\r
+    if (*Str == 0)\r
+      break;\r
+    if (*Str != ';')\r
+      goto Done;\r
+    Str++;\r
+\r
     NumberOfBlocks  = Atoi (Str);\r
     Str       = GetNextElementPastTerminator (Str, ';');\r
-    if (NumberOfBlocks == 0)
-      break;
-
+    if (NumberOfBlocks == 0)\r
+      break;\r
+\r
     BlockSize = Atoi (Str);\r
-    if (BlockSize != 0)
+    if (BlockSize != 0)\r
       Str       = GetNextElementPastTerminator (Str, ';');\r
-  } while (0);
-
+  } while (0);\r
+\r
   //\r
   // If we get here the variable is valid so do the work.\r
   //\r
@@ -693,10 +693,10 @@ Returns:
 \r
   Private->Filename[Index]      = 0;\r
 \r
-  Private->Mode                 = (ReadOnly ? O_RDONLY : O_RDWR);
+  Private->Mode                 = (ReadOnly ? O_RDONLY : O_RDWR);\r
 \r
   Private->NumberOfBlocks       = NumberOfBlocks;\r
-  Private->fd                   = -1;
+  Private->fd                   = -1;\r
 \r
   Private->ControllerNameTable  = NULL;\r
 \r
@@ -780,19 +780,19 @@ Returns:
   //\r
   // If the device is already opened, close it\r
   //\r
-  if (Private->fd >= 0) {
+  if (Private->fd >= 0) {\r
     BlockIo->Reset (BlockIo, FALSE);\r
   }\r
 \r
   //\r
   // Open the device\r
   //\r
-  Private->fd = Private->UnixThunk->Open
-    (Private->Filename, Private->Mode, 0644);
+  Private->fd = Private->UnixThunk->Open\r
+    (Private->Filename, Private->Mode, 0644);\r
 \r
-  if (Private->fd < 0) {
-    DEBUG ((EFI_D_INFO, "PlOpenBlock: Could not open %s\n",
-           Private->Filename));
+  if (Private->fd < 0) {\r
+    DEBUG ((EFI_D_INFO, "PlOpenBlock: Could not open %s\n",\r
+           Private->Filename));\r
     BlockIo->Media->MediaPresent  = FALSE;\r
     Status                        = EFI_NO_MEDIA;\r
     goto Done;\r
@@ -834,12 +834,12 @@ Returns:
     //\r
     // first set it to 0\r
     //\r
-    Private->UnixThunk->FTruncate (Private->fd, 0);
+    Private->UnixThunk->FTruncate (Private->fd, 0);\r
 \r
     //\r
     // then set it to the needed file size (OS will zero fill it)\r
     //\r
-    Private->UnixThunk->FTruncate (Private->fd, EndOfFile);
+    Private->UnixThunk->FTruncate (Private->fd, EndOfFile);\r
   }\r
 \r
   DEBUG ((EFI_D_INIT, "%HPlOpenBlock: opened %s%N\n", Private->Filename));\r
@@ -878,13 +878,13 @@ Returns:
 --*/\r
 {\r
   return EFI_DEVICE_ERROR;\r
-
-#if 0
+\r
+#if 0\r
   EFI_BLOCK_IO_PROTOCOL *BlockIo;\r
   EFI_STATUS            Status;\r
   BOOLEAN               ReinstallBlockIoFlag;\r
 \r
-
+\r
   BlockIo = &Private->BlockIo;\r
 \r
   switch (Private->UnixThunk->GetLastError ()) {\r
@@ -928,7 +928,7 @@ Returns:
   }\r
 \r
   return Status;\r
-#endif
+#endif\r
 }\r
 \r
 STATIC\r
@@ -1017,7 +1017,7 @@ Returns:
   // Seek to End of File\r
   //\r
   DistanceToMove = MultU64x32 (Lba, BlockSize);\r
-  Status = SetFilePointer64 (Private, DistanceToMove, &DistanceMoved, SEEK_SET);
+  Status = SetFilePointer64 (Private, DistanceToMove, &DistanceMoved, SEEK_SET);\r
 \r
   if (EFI_ERROR (Status)) {\r
     DEBUG ((EFI_D_INIT, "WriteBlocks: SetFilePointer failed\n"));\r
@@ -1062,27 +1062,35 @@ UnixBlockIoReadBlocks (
 --*/\r
 {\r
   UNIX_BLOCK_IO_PRIVATE *Private;\r
-  ssize_t                 len;
+  ssize_t                 len;\r
   EFI_STATUS              Status;\r
+  EFI_TPL                 OldTpl;\r
+\r
+  OldTpl = gBS->RaiseTPL (EFI_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);
+  len = Private->UnixThunk->Read (Private->fd, Buffer, BufferSize);\r
   if (len != BufferSize) {\r
-    DEBUG ((EFI_D_INIT, "ReadBlocks: ReadFile failed.\n"));
-    return UnixBlockIoError (Private);\r
+    DEBUG ((EFI_D_INIT, "ReadBlocks: ReadFile failed.\n"));\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
@@ -1121,20 +1129,24 @@ UnixBlockIoWriteBlocks (
 --*/\r
 {\r
   UNIX_BLOCK_IO_PRIVATE *Private;\r
-  ssize_t                 len;
+  ssize_t                 len;\r
   EFI_STATUS              Status;\r
+  EFI_TPL                 OldTpl;\r
+\r
+  OldTpl = gBS->RaiseTPL (EFI_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);
+  len = Private->UnixThunk->Write (Private->fd, Buffer, BufferSize);\r
   if (len != BufferSize) {\r
-    DEBUG ((EFI_D_INIT, "ReadBlocks: WriteFile failed.\n"));
-    return UnixBlockIoError (Private);\r
+    DEBUG ((EFI_D_INIT, "ReadBlocks: WriteFile failed.\n"));\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,14 +1209,19 @@ UnixBlockIoResetBlock (
 --*/\r
 {\r
   UNIX_BLOCK_IO_PRIVATE *Private;\r
+  EFI_TPL               OldTpl;\r
 \r
+  OldTpl = gBS->RaiseTPL (EFI_TPL_CALLBACK);\r
+  \r
   Private = UNIX_BLOCK_IO_PRIVATE_DATA_FROM_THIS (This);\r
 \r
   if (Private->fd >= 0) {\r
     Private->UnixThunk->Close (Private->fd);\r
-    Private->fd = -1;
+    Private->fd = -1;\r
   }\r
 \r
+  gBS->RestoreTPL (OldTpl);\r
+\r
   return EFI_SUCCESS;\r
 }\r
 \r
@@ -1272,15 +1293,15 @@ This function extends the capability of SetFilePointer to accept 64 bit paramete
 // TODO:    MoveMethod - add argument and description to function comment\r
 {\r
   EFI_STATUS    Status;\r
-  off_t         res;
+  off_t         res;\r
 \r
-  res = Private->UnixThunk->Lseek(Private->fd, DistanceToMove, MoveMethod);
-  if (res == -1) {
+  res = Private->UnixThunk->Lseek(Private->fd, DistanceToMove, MoveMethod);\r
+  if (res == -1) {\r
     Status = EFI_INVALID_PARAMETER;\r
   }\r
 \r
   if (NewFilePointer != NULL) {\r
-    *NewFilePointer = res;
+    *NewFilePointer = res;\r
   }\r
 \r
   return Status;\r