]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkModulePkg/Bus/Pci/IdeBus/Dxe/idebus.c
Add some definitions for efi event in Uefi/UefiSpec.h to follow spec.
[mirror_edk2.git] / EdkModulePkg / Bus / Pci / IdeBus / Dxe / idebus.c
index 0e7d43eeb9a0475e0b2d3e603a3bb96809895217..c45238cf8e21de355b5226d5e1c150d866bb2ec7 100644 (file)
@@ -1,12 +1,12 @@
 /** @file\r
-  Copyright (c) 2006, 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
-  http://opensource.org/licenses/bsd-license.php                                            \r
+  Copyright (c) 2006 - 2007 Intel Corporation. <BR>\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
+  http://opensource.org/licenses/bsd-license.php\r
 \r
-  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
-  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 \r
   @par Revision Reference:\r
   This module is modified from DXE\IDE module for Ide Contriller Init support\r
@@ -89,7 +89,7 @@ IDEBusDriverBindingSupported (
   if (EFI_ERROR (Status)) {\r
     return Status;\r
   }\r
\r
+\r
   //\r
   // Close protocol, don't use device path protocol in the .Support() function\r
   //\r
@@ -140,7 +140,7 @@ IDEBusDriverBindingSupported (
 // ***********************************************************************************\r
 //\r
 /**\r
-  Start this driver on Controller by detecting all disks and installing \r
+  Start this driver on Controller by detecting all disks and installing\r
   BlockIo protocol on them.\r
 \r
   @param  This Protocol instance pointer.\r
@@ -210,7 +210,7 @@ IDEBusDriverBindingStart (
   if ((EFI_ERROR (Status)) && (Status != EFI_ALREADY_STARTED)) {\r
     return Status;\r
   }\r
-  \r
+\r
   //\r
   // Now open the IDE_CONTROLLER_INIT protocol. Step7.1\r
   //\r
@@ -429,7 +429,7 @@ IDEBusDriverBindingStart (
       if (!(ConfigurationOptions & (1 << (IdeChannel * 2 + IdeDevice)))) {\r
         continue;\r
       }\r
-      \r
+\r
       //\r
       // The device has been scanned in another Start(), No need to scan it again\r
       // for perf optimization.\r
@@ -437,7 +437,7 @@ IDEBusDriverBindingStart (
       if (IdeBusDriverPrivateData->HaveScannedDevice[IdeChannel * 2 + IdeDevice]) {\r
         continue;\r
       }\r
-      \r
+\r
       //\r
       // create child handle for the detected device.\r
       //\r
@@ -629,7 +629,11 @@ IDEBusDriverBindingStart (
           IdeBlkIoDevicePtr = NULL;\r
           continue;\r
         }\r
-\r
+        //\r
+        // Record Udma Mode\r
+        //\r
+        IdeBlkIoDevicePtr->UdmaMode.Valid = TRUE;\r
+        IdeBlkIoDevicePtr->UdmaMode.Mode  = SupportedModes->UdmaMode.Mode;\r
         EnableInterrupt (IdeBlkIoDevicePtr);\r
       } else if (SupportedModes->MultiWordDmaMode.Valid) {\r
 \r
@@ -660,7 +664,7 @@ IDEBusDriverBindingStart (
       if ((IdeBlkIoDevicePtr->Type == IdeHardDisk) || (IdeBlkIoDevicePtr->Type == Ide48bitAddressingHardDisk)) {\r
         Status = SetDriveParameters (IdeBlkIoDevicePtr, &DriveParameters);\r
       }\r
-      \r
+\r
       //\r
       // Record PIO mode used in private data\r
       //\r
@@ -711,13 +715,13 @@ IDEBusDriverBindingStart (
         (EFI_IO_BUS_ATA_ATAPI | EFI_P_PC_ENABLE),\r
         IdeBlkIoDevicePtr->DevicePath\r
         );\r
-      \r
+\r
       //\r
       // Create event to clear pending IDE interrupt\r
       //\r
       Status = gBS->CreateEvent (\r
-                      EFI_EVENT_SIGNAL_EXIT_BOOT_SERVICES,\r
-                      EFI_TPL_NOTIFY,\r
+                      EVT_SIGNAL_EXIT_BOOT_SERVICES,\r
+                      TPL_NOTIFY,\r
                       ClearInterrupt,\r
                       IdeBlkIoDevicePtr,\r
                       &IdeBlkIoDevicePtr->ExitBootServiceEvent\r
@@ -731,7 +735,7 @@ IDEBusDriverBindingStart (
     // end of 2nd outer loop ==========\r
     //\r
   }\r
-  \r
+\r
   //\r
   // All configurations done! Notify IdeController to do post initialization\r
   // work such as saving IDE controller PCI settings for S3 resume\r
@@ -804,7 +808,7 @@ ErrorExit:
 // ***********************************************************************************\r
 //\r
 /**\r
-  Stop this driver on Controller Handle. \r
+  Stop this driver on Controller Handle.\r
 \r
   @param  This Protocol instance pointer.\r
   @param  DeviceHandle Handle of device to stop driver on\r
@@ -999,7 +1003,7 @@ DeRegisterIdeDevice (
           );\r
     return Status;\r
   }\r
-  \r
+\r
   //\r
   // Release allocated resources\r
   //\r
@@ -1031,6 +1035,9 @@ IDEBlkIoReset (
 {\r
   IDE_BLK_IO_DEV  *IdeBlkIoDevice;\r
   EFI_STATUS      Status;\r
+  EFI_TPL         OldTpl;\r
+\r
+  OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
 \r
   IdeBlkIoDevice = IDE_BLOCK_IO_DEV_FROM_THIS (This);\r
   //\r
@@ -1043,13 +1050,15 @@ IDEBlkIoReset (
   //\r
   if (IdeBlkIoDevice->Type == IdeHardDisk ||\r
       IdeBlkIoDevice->Type == Ide48bitAddressingHardDisk) {\r
-    return AtaSoftReset (IdeBlkIoDevice);\r
+    Status = AtaSoftReset (IdeBlkIoDevice);\r
+    goto Done;\r
   }\r
 \r
   if (IdeBlkIoDevice->Type == IdeUnknown) {\r
-    return EFI_DEVICE_ERROR;\r
+    Status = EFI_DEVICE_ERROR;\r
+    goto Done;\r
   }\r
-  \r
+\r
   //\r
   // for ATAPI device, using ATAPI reset method\r
   //\r
@@ -1058,6 +1067,8 @@ IDEBlkIoReset (
     Status = AtaSoftReset (IdeBlkIoDevice);\r
   }\r
 \r
+Done:\r
+  gBS->RestoreTPL (OldTpl);\r
   return Status;\r
 }\r
 \r
@@ -1085,6 +1096,10 @@ IDEBlkIoReadBlocks (
 // TODO:    EFI_DEVICE_ERROR - add return value to function comment\r
 {\r
   IDE_BLK_IO_DEV  *IdeBlkIoDevice;\r
+  EFI_STATUS      Status;\r
+  EFI_TPL         OldTpl;\r
+\r
+  OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
 \r
   IdeBlkIoDevice = IDE_BLOCK_IO_DEV_FROM_THIS (This);\r
 \r
@@ -1098,23 +1113,25 @@ IDEBlkIoReadBlocks (
   //\r
   if (IdeBlkIoDevice->Type == IdeHardDisk ||\r
       IdeBlkIoDevice->Type == Ide48bitAddressingHardDisk) {\r
-    return AtaBlkIoReadBlocks (\r
+    Status = AtaBlkIoReadBlocks (\r
             IdeBlkIoDevice,\r
             MediaId,\r
             LBA,\r
             BufferSize,\r
             Buffer\r
             );\r
+    goto Done;\r
   }\r
 \r
   if (IdeBlkIoDevice->Type == IdeUnknown) {\r
-    return EFI_DEVICE_ERROR;\r
+    Status = EFI_DEVICE_ERROR;\r
+    goto Done;\r
   }\r
-  \r
+\r
   //\r
   // for ATAPI device, using ATAPI read block's mechanism\r
   //\r
-  return AtapiBlkIoReadBlocks (\r
+  Status = AtapiBlkIoReadBlocks (\r
           IdeBlkIoDevice,\r
           MediaId,\r
           LBA,\r
@@ -1122,6 +1139,10 @@ IDEBlkIoReadBlocks (
           Buffer\r
           );\r
 \r
+Done:\r
+  gBS->RestoreTPL (OldTpl);\r
+\r
+  return Status;\r
 }\r
 \r
 /**\r
@@ -1148,6 +1169,10 @@ IDEBlkIoWriteBlocks (
 // TODO:    EFI_DEVICE_ERROR - add return value to function comment\r
 {\r
   IDE_BLK_IO_DEV  *IdeBlkIoDevice;\r
+  EFI_STATUS      Status;\r
+  EFI_TPL         OldTpl;\r
+\r
+  OldTpl = gBS->RaiseTPL (TPL_CALLBACK);\r
 \r
   IdeBlkIoDevice = IDE_BLOCK_IO_DEV_FROM_THIS (This);\r
   //\r
@@ -1159,31 +1184,37 @@ IDEBlkIoWriteBlocks (
   // for ATA device, using ATA write block's mechanism\r
   //\r
   if (IdeBlkIoDevice->Type == IdeHardDisk ||\r
-      IdeBlkIoDevice->Type == Ide48bitAddressingHardDisk) {        \r
+      IdeBlkIoDevice->Type == Ide48bitAddressingHardDisk) {\r
 \r
-    return AtaBlkIoWriteBlocks (\r
+    Status = AtaBlkIoWriteBlocks (\r
             IdeBlkIoDevice,\r
             MediaId,\r
             LBA,\r
             BufferSize,\r
             Buffer\r
             );\r
+    goto Done;\r
   }\r
 \r
   if (IdeBlkIoDevice->Type == IdeUnknown) {\r
-    return EFI_DEVICE_ERROR;\r
+    Status = EFI_DEVICE_ERROR;\r
+    goto Done;\r
   }\r
-  \r
+\r
   //\r
   // for ATAPI device, using ATAPI write block's mechanism\r
   //\r
-  return AtapiBlkIoWriteBlocks (\r
+  Status = AtapiBlkIoWriteBlocks (\r
           IdeBlkIoDevice,\r
           MediaId,\r
           LBA,\r
           BufferSize,\r
           Buffer\r
           );\r
+\r
+Done:\r
+  gBS->RestoreTPL (OldTpl);\r
+  return Status;\r
 }\r
 \r
 //\r