]> git.proxmox.com Git - mirror_edk2.git/blob - IntelFrameworkModulePkg/Bus/Pci/IdeBus/Dxe/idebus.h
add SerialPortLib.h
[mirror_edk2.git] / IntelFrameworkModulePkg / Bus / Pci / IdeBus / Dxe / idebus.h
1 /** @file
2 Header file for IDE Bus Driver.
3
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
9
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.
12
13 **/
14
15 #ifndef _IDE_BUS_H
16 #define _IDE_BUS_H
17
18
19 //
20 // The package level header files this module uses
21 //
22 #include <PiDxe.h>
23 #include <Common/FrameworkStatusCode.h>
24 //
25 // The protocols, PPI and GUID defintions for this module
26 //
27 #include <Protocol/IdeControllerInit.h>
28 #include <Protocol/BlockIo.h>
29 #include <Protocol/PciIo.h>
30 #include <Protocol/DiskInfo.h>
31 #include <Protocol/DevicePath.h>
32 //
33 // The Library classes this module consumes
34 //
35 #include <Library/DebugLib.h>
36 #include <Library/UefiDriverEntryPoint.h>
37 #include <Library/BaseLib.h>
38 #include <Library/UefiLib.h>
39 #include <Library/BaseMemoryLib.h>
40 #include <Library/ReportStatusCodeLib.h>
41 #include <Library/MemoryAllocationLib.h>
42 #include <Library/PerformanceLib.h>
43 #include <Library/UefiBootServicesTableLib.h>
44 #include <Library/UefiRuntimeServicesTableLib.h>
45 #include <Library/DevicePathLib.h>
46
47 #include <IndustryStandard/pci22.h>
48 #include "idedata.h"
49
50 //
51 // Extra Definition to porting
52 //
53 #define EFI_MIN(a, b) (((a) < (b)) ? (a) : (b))
54
55 #define MAX_IDE_DEVICE 4
56 #define MAX_IDE_CHANNELS 2
57 #define MAX_IDE_DRIVES 2
58
59 #define INVALID_DEVICE_TYPE 0xff
60 #define ATA_DEVICE_TYPE 0x00
61 #define ATAPI_DEVICE_TYPE 0x01
62
63 typedef struct {
64 BOOLEAN HaveScannedDevice[MAX_IDE_DEVICE];
65 BOOLEAN DeviceFound[MAX_IDE_DEVICE];
66 BOOLEAN DeviceProcessed[MAX_IDE_DEVICE];
67 } IDE_BUS_DRIVER_PRIVATE_DATA;
68
69 #define IDE_BLK_IO_DEV_SIGNATURE EFI_SIGNATURE_32 ('i', 'b', 'i', 'd')
70
71 typedef struct {
72 UINT32 Signature;
73
74 EFI_HANDLE Handle;
75 EFI_BLOCK_IO_PROTOCOL BlkIo;
76 EFI_BLOCK_IO_MEDIA BlkMedia;
77 EFI_DISK_INFO_PROTOCOL DiskInfo;
78 EFI_DEVICE_PATH_PROTOCOL *DevicePath;
79 EFI_PCI_IO_PROTOCOL *PciIo;
80 IDE_BUS_DRIVER_PRIVATE_DATA *IdeBusDriverPrivateData;
81
82 //
83 // Local Data for IDE interface goes here
84 //
85 EFI_IDE_CHANNEL Channel;
86 EFI_IDE_DEVICE Device;
87 UINT16 Lun;
88 IDE_DEVICE_TYPE Type;
89
90 IDE_BASE_REGISTERS *IoPort;
91 UINT16 AtapiError;
92
93 INQUIRY_DATA *pInquiryData;
94 EFI_IDENTIFY_DATA *pIdData;
95 ATA_PIO_MODE PioMode;
96 EFI_ATA_MODE UdmaMode;
97 CHAR8 ModelName[41];
98 REQUEST_SENSE_DATA *SenseData;
99 UINT8 SenseDataNumber;
100 UINT8 *Cache;
101
102 //
103 // ExitBootService Event, it is used to clear pending IDE interrupt
104 //
105 EFI_EVENT ExitBootServiceEvent;
106
107 EFI_UNICODE_STRING_TABLE *ControllerNameTable;
108 } IDE_BLK_IO_DEV;
109
110 #include "ComponentName.h"
111
112 #define IDE_BLOCK_IO_DEV_FROM_THIS(a) CR (a, IDE_BLK_IO_DEV, BlkIo, IDE_BLK_IO_DEV_SIGNATURE)
113 #define IDE_BLOCK_IO_DEV_FROM_DISK_INFO_THIS(a) CR (a, IDE_BLK_IO_DEV, DiskInfo, IDE_BLK_IO_DEV_SIGNATURE)
114
115 //
116 // Global Variables
117 //
118 extern EFI_DRIVER_BINDING_PROTOCOL gIDEBusDriverBinding;
119
120 #include "ide.h"
121
122 //
123 // Prototypes
124 // Driver model protocol interface
125 //
126 /**
127 TODO: Add function description
128
129 @param ImageHandle TODO: add argument description
130 @param SystemTable TODO: add argument description
131
132 TODO: add return values
133
134 **/
135 EFI_STATUS
136 EFIAPI
137 IDEBusControllerDriverEntryPoint (
138 IN EFI_HANDLE ImageHandle,
139 IN EFI_SYSTEM_TABLE *SystemTable
140 )
141 ;
142
143 /**
144 TODO: Add function description
145
146 @param This TODO: add argument description
147 @param Controller TODO: add argument description
148 @param RemainingDevicePath TODO: add argument description
149
150 TODO: add return values
151
152 **/
153 EFI_STATUS
154 EFIAPI
155 IDEBusDriverBindingSupported (
156 IN EFI_DRIVER_BINDING_PROTOCOL *This,
157 IN EFI_HANDLE Controller,
158 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
159 )
160 ;
161
162 /**
163 TODO: Add function description
164
165 @param This TODO: add argument description
166 @param Controller TODO: add argument description
167 @param RemainingDevicePath TODO: add argument description
168
169 TODO: add return values
170
171 **/
172 EFI_STATUS
173 EFIAPI
174 IDEBusDriverBindingStart (
175 IN EFI_DRIVER_BINDING_PROTOCOL *This,
176 IN EFI_HANDLE Controller,
177 IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
178 )
179 ;
180
181 /**
182 TODO: Add function description
183
184 @param This TODO: add argument description
185 @param Controller TODO: add argument description
186 @param NumberOfChildren TODO: add argument description
187 @param ChildHandleBuffer TODO: add argument description
188
189 TODO: add return values
190
191 **/
192 EFI_STATUS
193 EFIAPI
194 IDEBusDriverBindingStop (
195 IN EFI_DRIVER_BINDING_PROTOCOL *This,
196 IN EFI_HANDLE Controller,
197 IN UINTN NumberOfChildren,
198 IN EFI_HANDLE *ChildHandleBuffer
199 )
200 ;
201
202 //
203 // EFI Driver Configuration Functions
204 //
205 EFI_STATUS
206 IDEBusDriverConfigurationSetOptions (
207 IN EFI_DRIVER_CONFIGURATION_PROTOCOL *This,
208 IN EFI_HANDLE ControllerHandle,
209 IN EFI_HANDLE ChildHandle OPTIONAL,
210 IN CHAR8 *Language,
211 OUT EFI_DRIVER_CONFIGURATION_ACTION_REQUIRED *ActionRequired
212 );
213
214 EFI_STATUS
215 IDEBusDriverConfigurationOptionsValid (
216 IN EFI_DRIVER_CONFIGURATION_PROTOCOL *This,
217 IN EFI_HANDLE ControllerHandle,
218 IN EFI_HANDLE ChildHandle OPTIONAL
219 );
220
221 EFI_STATUS
222 IDEBusDriverConfigurationForceDefaults (
223 IN EFI_DRIVER_CONFIGURATION_PROTOCOL *This,
224 IN EFI_HANDLE ControllerHandle,
225 IN EFI_HANDLE ChildHandle OPTIONAL,
226 IN UINT32 DefaultType,
227 OUT EFI_DRIVER_CONFIGURATION_ACTION_REQUIRED *ActionRequired
228 );
229
230 //
231 // EFI Driver Diagnostics Functions
232 //
233 EFI_STATUS
234 IDEBusDriverDiagnosticsRunDiagnostics (
235 IN EFI_DRIVER_DIAGNOSTICS_PROTOCOL *This,
236 IN EFI_HANDLE ControllerHandle,
237 IN EFI_HANDLE ChildHandle OPTIONAL,
238 IN EFI_DRIVER_DIAGNOSTIC_TYPE DiagnosticType,
239 IN CHAR8 *Language,
240 OUT EFI_GUID **ErrorType,
241 OUT UINTN *BufferSize,
242 OUT CHAR16 **Buffer
243 );
244
245 //
246 // Block I/O Protocol Interface
247 //
248 /**
249 TODO: Add function description
250
251 @param This TODO: add argument description
252 @param ExtendedVerification TODO: add argument description
253
254 TODO: add return values
255
256 **/
257 EFI_STATUS
258 EFIAPI
259 IDEBlkIoReset (
260 IN EFI_BLOCK_IO_PROTOCOL *This,
261 IN BOOLEAN ExtendedVerification
262 )
263 ;
264
265 /**
266 TODO: Add function description
267
268 @param This TODO: add argument description
269 @param MediaId TODO: add argument description
270 @param LBA TODO: add argument description
271 @param BufferSize TODO: add argument description
272 @param Buffer TODO: add argument description
273
274 TODO: add return values
275
276 **/
277 EFI_STATUS
278 EFIAPI
279 IDEBlkIoReadBlocks (
280 IN EFI_BLOCK_IO_PROTOCOL *This,
281 IN UINT32 MediaId,
282 IN EFI_LBA LBA,
283 IN UINTN BufferSize,
284 OUT VOID *Buffer
285 )
286 ;
287
288 /**
289 TODO: Add function description
290
291 @param This TODO: add argument description
292 @param MediaId TODO: add argument description
293 @param LBA TODO: add argument description
294 @param BufferSize TODO: add argument description
295 @param Buffer TODO: add argument description
296
297 TODO: add return values
298
299 **/
300 EFI_STATUS
301 EFIAPI
302 IDEBlkIoWriteBlocks (
303 IN EFI_BLOCK_IO_PROTOCOL *This,
304 IN UINT32 MediaId,
305 IN EFI_LBA LBA,
306 IN UINTN BufferSize,
307 IN VOID *Buffer
308 )
309 ;
310
311 /**
312 TODO: Add function description
313
314 @param This TODO: add argument description
315
316 TODO: add return values
317
318 **/
319 EFI_STATUS
320 EFIAPI
321 IDEBlkIoFlushBlocks (
322 IN EFI_BLOCK_IO_PROTOCOL *This
323 )
324 ;
325
326 /**
327 TODO: Add function description
328
329 @param PciIo TODO: add argument description
330 @param Enable TODO: add argument description
331
332 TODO: add return values
333
334 **/
335 EFI_STATUS
336 IDERegisterDecodeEnableorDisable (
337 IN EFI_PCI_IO_PROTOCOL *PciIo,
338 IN BOOLEAN Enable
339 )
340 ;
341
342 /**
343 TODO: Add function description
344
345 @param This TODO: add argument description
346 @param InquiryData TODO: add argument description
347 @param IntquiryDataSize TODO: add argument description
348
349 TODO: add return values
350
351 **/
352 EFI_STATUS
353 EFIAPI
354 IDEDiskInfoInquiry (
355 IN EFI_DISK_INFO_PROTOCOL *This,
356 IN OUT VOID *InquiryData,
357 IN OUT UINT32 *IntquiryDataSize
358 )
359 ;
360
361 /**
362 TODO: Add function description
363
364 @param This TODO: add argument description
365 @param IdentifyData TODO: add argument description
366 @param IdentifyDataSize TODO: add argument description
367
368 TODO: add return values
369
370 **/
371 EFI_STATUS
372 EFIAPI
373 IDEDiskInfoIdentify (
374 IN EFI_DISK_INFO_PROTOCOL *This,
375 IN OUT VOID *IdentifyData,
376 IN OUT UINT32 *IdentifyDataSize
377 )
378 ;
379
380 /**
381 TODO: Add function description
382
383 @param This TODO: add argument description
384 @param SenseData TODO: add argument description
385 @param SenseDataSize TODO: add argument description
386 @param SenseDataNumber TODO: add argument description
387
388 TODO: add return values
389
390 **/
391 EFI_STATUS
392 EFIAPI
393 IDEDiskInfoSenseData (
394 IN EFI_DISK_INFO_PROTOCOL *This,
395 IN OUT VOID *SenseData,
396 IN OUT UINT32 *SenseDataSize,
397 OUT UINT8 *SenseDataNumber
398 )
399 ;
400
401 /**
402 TODO: Add function description
403
404 @param This TODO: add argument description
405 @param IdeChannel TODO: add argument description
406 @param IdeDevice TODO: add argument description
407
408 TODO: add return values
409
410 **/
411 EFI_STATUS
412 EFIAPI
413 IDEDiskInfoWhichIde (
414 IN EFI_DISK_INFO_PROTOCOL *This,
415 OUT UINT32 *IdeChannel,
416 OUT UINT32 *IdeDevice
417 )
418 ;
419
420 #endif