UINT16 CommandBlockBaseAddr;\r
UINT16 ControlBlockBaseAddr;\r
UINTN DataSize;\r
- UINT32 Attributes;\r
IDE_BUS_DRIVER_PRIVATE_DATA *IdeBusDriverPrivateData;\r
\r
//\r
Status = gRT->GetVariable (\r
(CHAR16 *) L"Configuration",\r
&gEfiCallerIdGuid,\r
- &Attributes,\r
+ NULL,\r
&DataSize,\r
&ConfigurationOptions\r
);\r
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
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
// 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
(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
//\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