]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkModulePkg/Bus/Pci/IdeBus/Dxe/idebus.c
1) Use FeatureFlag PcdPciBusHotplugDeviceSupport to merge LightPciLib.c with PcdLib.c.
[mirror_edk2.git] / EdkModulePkg / Bus / Pci / IdeBus / Dxe / idebus.c
index e5157dab70831fd838144e51e4c09b914ceff9f5..d17ce5f07d0516b0add819d38c3d9282f1e430c2 100644 (file)
@@ -181,7 +181,6 @@ IDEBusDriverBindingStart (
   UINT16                            CommandBlockBaseAddr;\r
   UINT16                            ControlBlockBaseAddr;\r
   UINTN                             DataSize;\r
-  UINT32                            Attributes;\r
   IDE_BUS_DRIVER_PRIVATE_DATA       *IdeBusDriverPrivateData;\r
 \r
   //\r
@@ -316,7 +315,7 @@ IDEBusDriverBindingStart (
   Status = gRT->GetVariable (\r
                   (CHAR16 *) L"Configuration",\r
                   &gEfiCallerIdGuid,\r
-                  &Attributes,\r
+                  NULL,\r
                   &DataSize,\r
                   &ConfigurationOptions\r
                   );\r
@@ -416,6 +415,12 @@ IDEBusDriverBindingStart (
               EfiIdeBusBeforeDevicePresenceDetection,\r
               IdeChannel\r
               );\r
+\r
+    //\r
+    // Prepare to detect IDE device of this channel\r
+    //\r
+    InitializeIDEChannelData ();\r
+\r
     //\r
     // -- 1st inner loop --- Master/Slave ------------  Step14\r
     //\r
@@ -487,6 +492,15 @@ IDEBusDriverBindingStart (
       IdeBlkIoDevicePtr->IdeBusDriverPrivateData = IdeBusDriverPrivateData;\r
       IdeBlkIoDevicePtr->IoPort->BusMasterBaseAddr = IdeRegsBaseAddr[IdeChannel].BusMasterBaseAddr;\r
 \r
+      //\r
+      // Report Status code: is about to detect IDE drive\r
+      //\r
+      REPORT_STATUS_CODE_WITH_DEVICE_PATH (\r
+        EFI_PROGRESS_CODE,\r
+        (EFI_IO_BUS_ATA_ATAPI | EFI_P_PC_PRESENCE_DETECT),\r
+        IdeBlkIoDevicePtr->DevicePath\r
+        );\r
+\r
       //\r
       // Discover device, now!\r
       //\r
@@ -522,7 +536,6 @@ IDEBusDriverBindingStart (
         // Submit identify data to IDE controller init driver\r
         //\r
         CopyMem (&IdentifyData, IdeBlkIoDevicePtr->pIdData, sizeof (IdentifyData));\r
-        // IdentifyData  = *IdeBlkIoDevicePtr->pIdData;\r
         IdeBusDriverPrivateData->DeviceFound[IdeChannel * 2 + IdeDevice] = TRUE;\r
         IdeInit->SubmitData (IdeInit, IdeChannel, IdeDevice, &IdentifyData);\r
       } else {\r
@@ -696,6 +709,18 @@ IDEBusDriverBindingStart (
         (EFI_IO_BUS_ATA_ATAPI | EFI_P_PC_ENABLE),\r
         IdeBlkIoDevicePtr->DevicePath\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
+                      ClearInterrupt,\r
+                      IdeBlkIoDevicePtr,\r
+                      &IdeBlkIoDevicePtr->ExitBootServiceEvent\r
+                      );\r
+\r
       //\r
       // end of 2nd inner loop ----\r
       //\r
@@ -1014,7 +1039,8 @@ IDEBlkIoReset (
   //\r
   // for ATA device, using ATA reset method\r
   //\r
-  if (IdeBlkIoDevice->Type == IdeHardDisk) {\r
+  if (IdeBlkIoDevice->Type == IdeHardDisk ||\r
+      IdeBlkIoDevice->Type == Ide48bitAddressingHardDisk) {\r
     return AtaSoftReset (IdeBlkIoDevice);\r
   }\r
 \r