]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkNt32Pkg/Dxe/WinNtThunk/Bus/BlockIo/WinNtBlockIo.c
Add some definitions for efi event in Uefi/UefiSpec.h to follow spec.
[mirror_edk2.git] / EdkNt32Pkg / Dxe / WinNtThunk / Bus / BlockIo / WinNtBlockIo.c
index 2f650927475fed439f82550b78609f2e4d6cef0e..effc8fa81b9d7f98b8d27766faee96e0f7a5ad89 100644 (file)
@@ -1,6 +1,6 @@
 /*++\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
@@ -66,7 +66,7 @@ EFI_DRIVER_BINDING_PROTOCOL gWinNtBlockIoDriverBinding = {
   WinNtBlockIoDriverBindingSupported,\r
   WinNtBlockIoDriverBindingStart,\r
   WinNtBlockIoDriverBindingStop,\r
-  0x10,\r
+  0xa,\r
   NULL,\r
   NULL\r
 };\r
@@ -204,14 +204,15 @@ Returns:
   if (DiskType == EfiWinNtVirtualDisks) {\r
     WinNtIo->WinNtThunk->SPrintf (\r
                           Buffer,\r
+                          sizeof (Buffer),\r
                           L"Diskfile%d",\r
                           WinNtIo->InstanceNumber\r
                           );\r
   } else {\r
     if (*Str >= 'A' && *Str <= 'Z' || *Str >= 'a' && *Str <= 'z') {\r
-      WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\%c:", *Str);\r
+      WinNtIo->WinNtThunk->SPrintf (Buffer, sizeof (Buffer), L"\\\\.\\%c:", *Str);\r
     } else {\r
-      WinNtIo->WinNtThunk->SPrintf (Buffer, L"\\\\.\\PHYSICALDRIVE%c", *Str);\r
+      WinNtIo->WinNtThunk->SPrintf (Buffer, sizeof (Buffer), L"\\\\.\\PHYSICALDRIVE%c", *Str);\r
     }\r
 \r
     Str++;\r
@@ -345,7 +346,7 @@ Returns:
     //\r
     FreeUnicodeStringTable (Private->ControllerNameTable);\r
 \r
-    gBS->FreePool (Private);\r
+    FreePool (Private);\r
   }\r
 \r
   return Status;\r
@@ -429,14 +430,10 @@ Returns:
 \r
   WinNtIo->WinNtThunk->SetErrorMode (SEM_FAILCRITICALERRORS);\r
 \r
-  Status = gBS->AllocatePool (\r
-                  EfiBootServicesData,\r
-                  sizeof (WIN_NT_BLOCK_IO_PRIVATE),\r
-                  &Private\r
-                  );\r
-  ASSERT_EFI_ERROR (Status);\r
+  Private = AllocatePool (sizeof (WIN_NT_BLOCK_IO_PRIVATE));\r
+  ASSERT (Private != NULL);\r
 \r
-  EfiInitializeLock (&Private->Lock, EFI_TPL_NOTIFY);\r
+  EfiInitializeLock (&Private->Lock, TPL_NOTIFY);\r
 \r
   Private->WinNtThunk = WinNtIo->WinNtThunk;\r
 \r
@@ -517,7 +514,7 @@ Returns:
                     );\r
     if (EFI_ERROR (Status)) {\r
       FreeUnicodeStringTable (Private->ControllerNameTable);\r
-      gBS->FreePool (Private);\r
+      FreePool (Private);\r
     }\r
 \r
     DEBUG ((EFI_D_INIT, "BlockDevice added: %s\n", Filename));\r
@@ -850,25 +847,33 @@ WinNtBlockIoReadBlocks (
   BOOL                    Flag;\r
   EFI_STATUS              Status;\r
   DWORD                   BytesRead;\r
+  EFI_TPL                 OldTpl;\r
+\r
+  OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
 \r
   Private = WIN_NT_BLOCK_IO_PRIVATE_DATA_FROM_THIS (This);\r
 \r
   Status  = WinNtBlockIoReadWriteCommon (Private, MediaId, Lba, BufferSize, Buffer, "WinNtReadBlocks");\r
   if (EFI_ERROR (Status)) {\r
-    return Status;\r
+    goto Done;\r
   }\r
 \r
   Flag = Private->WinNtThunk->ReadFile (Private->NtHandle, Buffer, (DWORD) BufferSize, (LPDWORD) &BytesRead, NULL);\r
   if (!Flag || (BytesRead != BufferSize)) {\r
     DEBUG ((EFI_D_INIT, "ReadBlocks: ReadFile failed. (%d)\n", Private->WinNtThunk->GetLastError ()));\r
-    return WinNtBlockIoError (Private);\r
+    Status = WinNtBlockIoError (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
@@ -910,18 +915,22 @@ WinNtBlockIoWriteBlocks (
   UINTN                   BytesWritten;\r
   BOOL                    Flag;\r
   EFI_STATUS              Status;\r
+  EFI_TPL                 OldTpl;\r
+\r
+  OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
 \r
   Private = WIN_NT_BLOCK_IO_PRIVATE_DATA_FROM_THIS (This);\r
 \r
   Status  = WinNtBlockIoReadWriteCommon (Private, MediaId, Lba, BufferSize, Buffer, "WinNtWriteBlocks");\r
   if (EFI_ERROR (Status)) {\r
-    return Status;\r
+    goto Done;\r
   }\r
 \r
   Flag = Private->WinNtThunk->WriteFile (Private->NtHandle, Buffer, (DWORD) BufferSize, (LPDWORD) &BytesWritten, NULL);\r
   if (!Flag || (BytesWritten != BufferSize)) {\r
     DEBUG ((EFI_D_INIT, "ReadBlocks: WriteFile failed. (%d)\n", Private->WinNtThunk->GetLastError ()));\r
-    return WinNtBlockIoError (Private);\r
+    Status = WinNtBlockIoError (Private);\r
+    goto Done;\r
   }\r
 \r
   //\r
@@ -929,7 +938,12 @@ WinNtBlockIoWriteBlocks (
   //\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
 \r
 STATIC\r
@@ -980,6 +994,9 @@ WinNtBlockIoResetBlock (
 --*/\r
 {\r
   WIN_NT_BLOCK_IO_PRIVATE *Private;\r
+  EFI_TPL                 OldTpl;\r
+\r
+  OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
 \r
   Private = WIN_NT_BLOCK_IO_PRIVATE_DATA_FROM_THIS (This);\r
 \r
@@ -988,6 +1005,8 @@ WinNtBlockIoResetBlock (
     Private->NtHandle = INVALID_HANDLE_VALUE;\r
   }\r
 \r
+  gBS->RestoreTPL (OldTpl);\r
+\r
   return EFI_SUCCESS;\r
 }\r
 \r