2 Header file for IDE Bus Driver.
4 Copyright (c) 2006 - 2007 Intel Corporation. <BR>
5 All rights reserved. This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
20 #include <FrameworkDxe.h>
22 #include <Protocol/IdeControllerInit.h>
23 #include <Protocol/BlockIo.h>
24 #include <Protocol/PciIo.h>
25 #include <Protocol/DiskInfo.h>
26 #include <Protocol/DevicePath.h>
28 #include <Library/DebugLib.h>
29 #include <Library/UefiDriverEntryPoint.h>
30 #include <Library/BaseLib.h>
31 #include <Library/UefiLib.h>
32 #include <Library/BaseMemoryLib.h>
33 #include <Library/ReportStatusCodeLib.h>
34 #include <Library/MemoryAllocationLib.h>
35 #include <Library/PerformanceLib.h>
36 #include <Library/UefiBootServicesTableLib.h>
37 #include <Library/UefiRuntimeServicesTableLib.h>
38 #include <Library/DevicePathLib.h>
40 #include <IndustryStandard/pci22.h>
44 // Extra Definition to porting
46 #define EFI_MIN(a, b) (((a) < (b)) ? (a) : (b))
48 #define MAX_IDE_DEVICE 4
49 #define MAX_IDE_CHANNELS 2
50 #define MAX_IDE_DRIVES 2
52 #define INVALID_DEVICE_TYPE 0xff
53 #define ATA_DEVICE_TYPE 0x00
54 #define ATAPI_DEVICE_TYPE 0x01
57 BOOLEAN HaveScannedDevice
[MAX_IDE_DEVICE
];
58 BOOLEAN DeviceFound
[MAX_IDE_DEVICE
];
59 BOOLEAN DeviceProcessed
[MAX_IDE_DEVICE
];
60 } IDE_BUS_DRIVER_PRIVATE_DATA
;
62 #define IDE_BLK_IO_DEV_SIGNATURE EFI_SIGNATURE_32 ('i', 'b', 'i', 'd')
68 EFI_BLOCK_IO_PROTOCOL BlkIo
;
69 EFI_BLOCK_IO_MEDIA BlkMedia
;
70 EFI_DISK_INFO_PROTOCOL DiskInfo
;
71 EFI_DEVICE_PATH_PROTOCOL
*DevicePath
;
72 EFI_PCI_IO_PROTOCOL
*PciIo
;
73 IDE_BUS_DRIVER_PRIVATE_DATA
*IdeBusDriverPrivateData
;
76 // Local Data for IDE interface goes here
78 EFI_IDE_CHANNEL Channel
;
79 EFI_IDE_DEVICE Device
;
83 IDE_BASE_REGISTERS
*IoPort
;
86 ATAPI_INQUIRY_DATA
*pInquiryData
;
87 EFI_IDENTIFY_DATA
*pIdData
;
89 EFI_ATA_MODE UdmaMode
;
91 ATAPI_REQUEST_SENSE_DATA
*SenseData
;
92 UINT8 SenseDataNumber
;
96 // ExitBootService Event, it is used to clear pending IDE interrupt
98 EFI_EVENT ExitBootServiceEvent
;
100 EFI_UNICODE_STRING_TABLE
*ControllerNameTable
;
103 #include "ComponentName.h"
105 #define IDE_BLOCK_IO_DEV_FROM_THIS(a) CR (a, IDE_BLK_IO_DEV, BlkIo, IDE_BLK_IO_DEV_SIGNATURE)
106 #define IDE_BLOCK_IO_DEV_FROM_DISK_INFO_THIS(a) CR (a, IDE_BLK_IO_DEV, DiskInfo, IDE_BLK_IO_DEV_SIGNATURE)
111 extern EFI_DRIVER_BINDING_PROTOCOL gIDEBusDriverBinding
;
117 // Driver model protocol interface
120 TODO: Add function description
122 @param ImageHandle TODO: add argument description
123 @param SystemTable TODO: add argument description
125 TODO: add return values
130 IDEBusControllerDriverEntryPoint (
131 IN EFI_HANDLE ImageHandle
,
132 IN EFI_SYSTEM_TABLE
*SystemTable
137 TODO: Add function description
139 @param This TODO: add argument description
140 @param Controller TODO: add argument description
141 @param RemainingDevicePath TODO: add argument description
143 TODO: add return values
148 IDEBusDriverBindingSupported (
149 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
150 IN EFI_HANDLE Controller
,
151 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
156 TODO: Add function description
158 @param This TODO: add argument description
159 @param Controller TODO: add argument description
160 @param RemainingDevicePath TODO: add argument description
162 TODO: add return values
167 IDEBusDriverBindingStart (
168 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
169 IN EFI_HANDLE Controller
,
170 IN EFI_DEVICE_PATH_PROTOCOL
*RemainingDevicePath
175 TODO: Add function description
177 @param This TODO: add argument description
178 @param Controller TODO: add argument description
179 @param NumberOfChildren TODO: add argument description
180 @param ChildHandleBuffer TODO: add argument description
182 TODO: add return values
187 IDEBusDriverBindingStop (
188 IN EFI_DRIVER_BINDING_PROTOCOL
*This
,
189 IN EFI_HANDLE Controller
,
190 IN UINTN NumberOfChildren
,
191 IN EFI_HANDLE
*ChildHandleBuffer
196 // EFI Driver Configuration Functions
199 IDEBusDriverConfigurationSetOptions (
200 IN EFI_DRIVER_CONFIGURATION_PROTOCOL
*This
,
201 IN EFI_HANDLE ControllerHandle
,
202 IN EFI_HANDLE ChildHandle OPTIONAL
,
204 OUT EFI_DRIVER_CONFIGURATION_ACTION_REQUIRED
*ActionRequired
208 IDEBusDriverConfigurationOptionsValid (
209 IN EFI_DRIVER_CONFIGURATION_PROTOCOL
*This
,
210 IN EFI_HANDLE ControllerHandle
,
211 IN EFI_HANDLE ChildHandle OPTIONAL
215 IDEBusDriverConfigurationForceDefaults (
216 IN EFI_DRIVER_CONFIGURATION_PROTOCOL
*This
,
217 IN EFI_HANDLE ControllerHandle
,
218 IN EFI_HANDLE ChildHandle OPTIONAL
,
219 IN UINT32 DefaultType
,
220 OUT EFI_DRIVER_CONFIGURATION_ACTION_REQUIRED
*ActionRequired
224 // EFI Driver Diagnostics Functions
227 IDEBusDriverDiagnosticsRunDiagnostics (
228 IN EFI_DRIVER_DIAGNOSTICS_PROTOCOL
*This
,
229 IN EFI_HANDLE ControllerHandle
,
230 IN EFI_HANDLE ChildHandle OPTIONAL
,
231 IN EFI_DRIVER_DIAGNOSTIC_TYPE DiagnosticType
,
233 OUT EFI_GUID
**ErrorType
,
234 OUT UINTN
*BufferSize
,
239 // Block I/O Protocol Interface
242 TODO: Add function description
244 @param This TODO: add argument description
245 @param ExtendedVerification TODO: add argument description
247 TODO: add return values
253 IN EFI_BLOCK_IO_PROTOCOL
*This
,
254 IN BOOLEAN ExtendedVerification
259 TODO: Add function description
261 @param This TODO: add argument description
262 @param MediaId TODO: add argument description
263 @param LBA TODO: add argument description
264 @param BufferSize TODO: add argument description
265 @param Buffer TODO: add argument description
267 TODO: add return values
273 IN EFI_BLOCK_IO_PROTOCOL
*This
,
282 TODO: Add function description
284 @param This TODO: add argument description
285 @param MediaId TODO: add argument description
286 @param LBA TODO: add argument description
287 @param BufferSize TODO: add argument description
288 @param Buffer TODO: add argument description
290 TODO: add return values
295 IDEBlkIoWriteBlocks (
296 IN EFI_BLOCK_IO_PROTOCOL
*This
,
305 TODO: Add function description
307 @param This TODO: add argument description
309 TODO: add return values
314 IDEBlkIoFlushBlocks (
315 IN EFI_BLOCK_IO_PROTOCOL
*This
320 TODO: Add function description
322 @param PciIo TODO: add argument description
323 @param Enable TODO: add argument description
325 TODO: add return values
329 IDERegisterDecodeEnableorDisable (
330 IN EFI_PCI_IO_PROTOCOL
*PciIo
,
336 TODO: Add function description
338 @param This TODO: add argument description
339 @param InquiryData TODO: add argument description
340 @param IntquiryDataSize TODO: add argument description
342 TODO: add return values
348 IN EFI_DISK_INFO_PROTOCOL
*This
,
349 IN OUT VOID
*InquiryData
,
350 IN OUT UINT32
*IntquiryDataSize
355 TODO: Add function description
357 @param This TODO: add argument description
358 @param IdentifyData TODO: add argument description
359 @param IdentifyDataSize TODO: add argument description
361 TODO: add return values
366 IDEDiskInfoIdentify (
367 IN EFI_DISK_INFO_PROTOCOL
*This
,
368 IN OUT VOID
*IdentifyData
,
369 IN OUT UINT32
*IdentifyDataSize
374 TODO: Add function description
376 @param This TODO: add argument description
377 @param SenseData TODO: add argument description
378 @param SenseDataSize TODO: add argument description
379 @param SenseDataNumber TODO: add argument description
381 TODO: add return values
386 IDEDiskInfoSenseData (
387 IN EFI_DISK_INFO_PROTOCOL
*This
,
388 IN OUT VOID
*SenseData
,
389 IN OUT UINT32
*SenseDataSize
,
390 OUT UINT8
*SenseDataNumber
395 TODO: Add function description
397 @param This TODO: add argument description
398 @param IdeChannel TODO: add argument description
399 @param IdeDevice TODO: add argument description
401 TODO: add return values
406 IDEDiskInfoWhichIde (
407 IN EFI_DISK_INFO_PROTOCOL
*This
,
408 OUT UINT32
*IdeChannel
,
409 OUT UINT32
*IdeDevice