Subversion Repositories HelenOS

Rev

Rev 2726 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2726 Rev 2782
1
#ifndef _EFILIB_INCLUDE_
1
#ifndef _EFILIB_INCLUDE_
2
#define _EFILIB_INCLUDE_
2
#define _EFILIB_INCLUDE_
3
 
3
 
4
/*++
4
/*++
5
 
5
 
6
Copyright (c) 2000  Intel Corporation
6
Copyright (c) 2000  Intel Corporation
7
 
7
 
8
Module Name:
8
Module Name:
9
 
9
 
10
    efilib.h
10
    efilib.h
11
 
11
 
12
Abstract:
12
Abstract:
13
 
13
 
14
    EFI library functions
14
    EFI library functions
15
 
15
 
16
 
16
 
17
 
17
 
18
Revision History
18
Revision History
19
 
19
 
20
--*/
20
--*/
21
 
21
 
22
#include "efidebug.h"
22
#include "efidebug.h"
23
#include "efipart.h"
23
#include "efipart.h"
24
#include "efilibplat.h"
24
#include "efilibplat.h"
25
#include "efilink.h"
25
#include "efilink.h"
26
#include "efirtlib.h"
26
#include "efirtlib.h"
27
#include "pci22.h"
27
#include "pci22.h"
28
#include "libsmbios.h"
28
#include "libsmbios.h"
29
 
29
 
30
//
30
//
31
// Public read-only data in the EFI library
31
// Public read-only data in the EFI library
32
//
32
//
33
 
33
 
34
extern EFI_SYSTEM_TABLE         *ST;
34
extern EFI_SYSTEM_TABLE         *ST;
35
extern EFI_BOOT_SERVICES        *BS;
35
extern EFI_BOOT_SERVICES        *BS;
36
extern EFI_RUNTIME_SERVICES     *RT;
36
extern EFI_RUNTIME_SERVICES     *RT;
37
 
37
 
38
extern EFI_GUID DevicePathProtocol;
38
extern EFI_GUID DevicePathProtocol;
39
extern EFI_GUID LoadedImageProtocol;
39
extern EFI_GUID LoadedImageProtocol;
40
extern EFI_GUID TextInProtocol;
40
extern EFI_GUID TextInProtocol;
41
extern EFI_GUID TextOutProtocol;
41
extern EFI_GUID TextOutProtocol;
42
extern EFI_GUID BlockIoProtocol;
42
extern EFI_GUID BlockIoProtocol;
43
extern EFI_GUID DiskIoProtocol;
43
extern EFI_GUID DiskIoProtocol;
44
extern EFI_GUID FileSystemProtocol;
44
extern EFI_GUID FileSystemProtocol;
45
extern EFI_GUID LoadFileProtocol;
45
extern EFI_GUID LoadFileProtocol;
46
extern EFI_GUID DeviceIoProtocol;
46
extern EFI_GUID DeviceIoProtocol;
47
extern EFI_GUID VariableStoreProtocol;
47
extern EFI_GUID VariableStoreProtocol;
48
extern EFI_GUID LegacyBootProtocol;
48
extern EFI_GUID LegacyBootProtocol;
49
extern EFI_GUID UnicodeCollationProtocol;
49
extern EFI_GUID UnicodeCollationProtocol;
50
extern EFI_GUID SerialIoProtocol;
50
extern EFI_GUID SerialIoProtocol;
51
extern EFI_GUID VgaClassProtocol;
51
extern EFI_GUID VgaClassProtocol;
52
extern EFI_GUID TextOutSpliterProtocol;
52
extern EFI_GUID TextOutSpliterProtocol;
53
extern EFI_GUID ErrorOutSpliterProtocol;
53
extern EFI_GUID ErrorOutSpliterProtocol;
54
extern EFI_GUID TextInSpliterProtocol;
54
extern EFI_GUID TextInSpliterProtocol;
55
extern EFI_GUID SimpleNetworkProtocol;
55
extern EFI_GUID SimpleNetworkProtocol;
56
extern EFI_GUID PxeBaseCodeProtocol;
56
extern EFI_GUID PxeBaseCodeProtocol;
57
extern EFI_GUID PxeCallbackProtocol;
57
extern EFI_GUID PxeCallbackProtocol;
58
extern EFI_GUID NetworkInterfaceIdentifierProtocol;
58
extern EFI_GUID NetworkInterfaceIdentifierProtocol;
59
extern EFI_GUID UiProtocol;
59
extern EFI_GUID UiProtocol;
60
extern EFI_GUID InternalShellProtocol;
60
extern EFI_GUID InternalShellProtocol;
61
 
61
 
62
extern EFI_GUID EfiGlobalVariable;
62
extern EFI_GUID EfiGlobalVariable;
63
extern EFI_GUID GenericFileInfo;
63
extern EFI_GUID GenericFileInfo;
64
extern EFI_GUID FileSystemInfo;
64
extern EFI_GUID FileSystemInfo;
65
extern EFI_GUID FileSystemVolumeLabelInfo;
65
extern EFI_GUID FileSystemVolumeLabelInfo;
66
extern EFI_GUID PcAnsiProtocol;
66
extern EFI_GUID PcAnsiProtocol;
67
extern EFI_GUID Vt100Protocol;
67
extern EFI_GUID Vt100Protocol;
68
extern EFI_GUID NullGuid;
68
extern EFI_GUID NullGuid;
69
extern EFI_GUID UnknownDevice;
69
extern EFI_GUID UnknownDevice;
70
 
70
 
71
extern EFI_GUID EfiPartTypeSystemPartitionGuid;
71
extern EFI_GUID EfiPartTypeSystemPartitionGuid;
72
extern EFI_GUID EfiPartTypeLegacyMbrGuid;
72
extern EFI_GUID EfiPartTypeLegacyMbrGuid;
73
 
73
 
74
extern EFI_GUID MpsTableGuid;
74
extern EFI_GUID MpsTableGuid;
75
extern EFI_GUID AcpiTableGuid;
75
extern EFI_GUID AcpiTableGuid;
76
extern EFI_GUID SMBIOSTableGuid;
76
extern EFI_GUID SMBIOSTableGuid;
77
extern EFI_GUID SalSystemTableGuid;
77
extern EFI_GUID SalSystemTableGuid;
78
 
78
 
79
//
79
//
80
// EFI Variable strings
80
// EFI Variable strings
81
//
81
//
82
#define LOAD_OPTION_ACTIVE      0x00000001
82
#define LOAD_OPTION_ACTIVE      0x00000001
83
 
83
 
84
#define VarLanguageCodes       L"LangCodes"
84
#define VarLanguageCodes       L"LangCodes"
85
#define VarLanguage            L"Lang"
85
#define VarLanguage            L"Lang"
86
#define VarTimeout             L"Timeout"
86
#define VarTimeout             L"Timeout"
87
#define VarConsoleInp          L"ConIn"
87
#define VarConsoleInp          L"ConIn"
88
#define VarConsoleOut          L"ConOut"
88
#define VarConsoleOut          L"ConOut"
89
#define VarErrorOut            L"ErrOut"
89
#define VarErrorOut            L"ErrOut"
90
#define VarBootOption          L"Boot%04x"
90
#define VarBootOption          L"Boot%04x"
91
#define VarBootOrder           L"BootOrder"
91
#define VarBootOrder           L"BootOrder"
92
#define VarBootNext            L"BootNext"
92
#define VarBootNext            L"BootNext"
93
#define VarBootCurrent         L"BootCurrent"
93
#define VarBootCurrent         L"BootCurrent"
94
#define VarDriverOption        L"Driver%04x"
94
#define VarDriverOption        L"Driver%04x"
95
#define VarDriverOrder         L"DriverOrder"
95
#define VarDriverOrder         L"DriverOrder"
96
#define VarConsoleInpDev       L"ConInDev"
96
#define VarConsoleInpDev       L"ConInDev"
97
#define VarConsoleOutDev       L"ConOutDev"
97
#define VarConsoleOutDev       L"ConOutDev"
98
#define VarErrorOutDev         L"ErrOutDev"
98
#define VarErrorOutDev         L"ErrOutDev"
99
 
99
 
100
#define LanguageCodeEnglish    "eng"
100
#define LanguageCodeEnglish    "eng"
101
 
101
 
102
extern EFI_DEVICE_PATH RootDevicePath[];
102
extern EFI_DEVICE_PATH RootDevicePath[];
103
extern EFI_DEVICE_PATH EndDevicePath[];
103
extern EFI_DEVICE_PATH EndDevicePath[];
104
extern EFI_DEVICE_PATH EndInstanceDevicePath[];
104
extern EFI_DEVICE_PATH EndInstanceDevicePath[];
105
 
105
 
106
//
106
//
107
// Other public data in the EFI library
107
// Other public data in the EFI library
108
//
108
//
109
 
109
 
110
extern EFI_MEMORY_TYPE PoolAllocationType;
110
extern EFI_MEMORY_TYPE PoolAllocationType;
111
 
111
 
112
//
112
//
113
// STATIC - Name is internal to the module
113
// STATIC - Name is internal to the module
114
// INTERNAL - Name is internal to the component (i.e., directory)
114
// INTERNAL - Name is internal to the component (i.e., directory)
115
// BOOTSERVCE - Name of a boot service function
115
// BOOTSERVCE - Name of a boot service function
116
//
116
//
117
 
117
 
118
#define STATIC
118
#define STATIC
119
#define INTERNAL
119
#define INTERNAL
120
#define BOOTSERVICE
120
#define BOOTSERVICE
121
 
121
 
122
//
122
//
123
// Prototypes
123
// Prototypes
124
//
124
//
125
 
125
 
126
VOID
126
VOID
127
InitializeLib (
127
InitializeLib (
128
    IN EFI_HANDLE           ImageHandle,
128
    IN EFI_HANDLE           ImageHandle,
129
    IN EFI_SYSTEM_TABLE     *SystemTable
129
    IN EFI_SYSTEM_TABLE     *SystemTable
130
    );
130
    );
131
 
131
 
132
VOID
132
VOID
133
InitializeUnicodeSupport (
133
InitializeUnicodeSupport (
134
    CHAR8 *LangCode
134
    CHAR8 *LangCode
135
    );
135
    );
136
 
136
 
137
VOID
137
VOID
138
EFIDebugVariable (
138
EFIDebugVariable (
139
    VOID
139
    VOID
140
    );
140
    );
141
 
141
 
142
VOID
142
VOID
143
SetCrc (
143
SetCrc (
144
    IN OUT EFI_TABLE_HEADER *Hdr
144
    IN OUT EFI_TABLE_HEADER *Hdr
145
    );
145
    );
146
 
146
 
147
VOID
147
VOID
148
SetCrcAltSize (
148
SetCrcAltSize (
149
    IN UINTN                 Size,
149
    IN UINTN                 Size,
150
    IN OUT EFI_TABLE_HEADER *Hdr
150
    IN OUT EFI_TABLE_HEADER *Hdr
151
    );
151
    );
152
 
152
 
153
BOOLEAN
153
BOOLEAN
154
CheckCrc (
154
CheckCrc (
155
    IN UINTN                 MaxSize,
155
    IN UINTN                 MaxSize,
156
    IN OUT EFI_TABLE_HEADER *Hdr
156
    IN OUT EFI_TABLE_HEADER *Hdr
157
    );
157
    );
158
 
158
 
159
BOOLEAN
159
BOOLEAN
160
CheckCrcAltSize (
160
CheckCrcAltSize (
161
    IN UINTN                 MaxSize,
161
    IN UINTN                 MaxSize,
162
    IN UINTN                 Size,
162
    IN UINTN                 Size,
163
    IN OUT EFI_TABLE_HEADER *Hdr
163
    IN OUT EFI_TABLE_HEADER *Hdr
164
    );
164
    );
165
 
165
 
166
UINT32
166
UINT32
167
CalculateCrc (
167
CalculateCrc (
168
    UINT8 *pt,
168
    UINT8 *pt,
169
    UINTN Size
169
    UINTN Size
170
    );
170
    );
171
 
171
 
172
VOID
172
VOID
173
ZeroMem (
173
ZeroMem (
174
    IN VOID     *Buffer,
174
    IN VOID     *Buffer,
175
    IN UINTN     Size
175
    IN UINTN     Size
176
    );
176
    );
177
 
177
 
178
VOID
178
VOID
179
SetMem (
179
SetMem (
180
    IN VOID     *Buffer,
180
    IN VOID     *Buffer,
181
    IN UINTN    Size,
181
    IN UINTN    Size,
182
    IN UINT8    Value    
182
    IN UINT8    Value    
183
    );
183
    );
184
 
184
 
185
VOID
185
VOID
186
CopyMem (
186
CopyMem (
187
    IN VOID     *Dest,
187
    IN VOID     *Dest,
188
    IN VOID     *Src,
188
    IN VOID     *Src,
189
    IN UINTN    len
189
    IN UINTN    len
190
    );
190
    );
191
 
191
 
192
INTN
192
INTN
193
CompareMem (
193
CompareMem (
194
    IN VOID     *Dest,
194
    IN VOID     *Dest,
195
    IN VOID     *Src,
195
    IN VOID     *Src,
196
    IN UINTN    len
196
    IN UINTN    len
197
    );
197
    );
198
 
198
 
199
INTN
199
INTN
200
StrCmp (
200
StrCmp (
201
    IN CHAR16   *s1,
201
    IN CHAR16   *s1,
202
    IN CHAR16   *s2
202
    IN CHAR16   *s2
203
    );
203
    );
204
 
204
 
205
INTN
205
INTN
206
StrnCmp (
206
StrnCmp (
207
    IN CHAR16   *s1,
207
    IN CHAR16   *s1,
208
    IN CHAR16   *s2,
208
    IN CHAR16   *s2,
209
    IN UINTN    len
209
    IN UINTN    len
210
    );
210
    );
211
 
211
 
212
INTN
212
INTN
213
StriCmp (
213
StriCmp (
214
    IN CHAR16   *s1,
214
    IN CHAR16   *s1,
215
    IN CHAR16   *s2
215
    IN CHAR16   *s2
216
    );
216
    );
217
 
217
 
218
VOID
218
VOID
219
StrLwr (
219
StrLwr (
220
    IN CHAR16   *Str
220
    IN CHAR16   *Str
221
    );
221
    );
222
 
222
 
223
VOID
223
VOID
224
StrUpr (
224
StrUpr (
225
    IN CHAR16   *Str
225
    IN CHAR16   *Str
226
    );
226
    );
227
 
227
 
228
VOID
228
VOID
229
StrCpy (
229
StrCpy (
230
    IN CHAR16   *Dest,
230
    IN CHAR16   *Dest,
231
    IN CHAR16    *Src
231
    IN CHAR16    *Src
232
    );
232
    );
233
 
233
 
234
VOID
234
VOID
235
StrCat (
235
StrCat (
236
    IN CHAR16   *Dest,
236
    IN CHAR16   *Dest,
237
    IN CHAR16   *Src
237
    IN CHAR16   *Src
238
    );
238
    );
239
 
239
 
240
UINTN
240
UINTN
241
StrLen (
241
StrLen (
242
    IN CHAR16   *s1
242
    IN CHAR16   *s1
243
    );
243
    );
244
 
244
 
245
UINTN
245
UINTN
246
StrSize (
246
StrSize (
247
    IN CHAR16   *s1
247
    IN CHAR16   *s1
248
    );
248
    );
249
 
249
 
250
CHAR16 *
250
CHAR16 *
251
StrDuplicate (
251
StrDuplicate (
252
    IN CHAR16   *Src
252
    IN CHAR16   *Src
253
    );
253
    );
254
 
254
 
255
UINTN
255
UINTN
256
strlena (
256
strlena (
257
    IN CHAR8    *s1
257
    IN CHAR8    *s1
258
    );
258
    );
259
   
259
   
260
UINTN
260
UINTN
261
strcmpa (
261
strcmpa (
262
    IN CHAR8    *s1,
262
    IN CHAR8    *s1,
263
    IN CHAR8    *s2
263
    IN CHAR8    *s2
264
    );
264
    );
265
 
265
 
266
UINTN
266
UINTN
267
strncmpa (
267
strncmpa (
268
    IN CHAR8    *s1,
268
    IN CHAR8    *s1,
269
    IN CHAR8    *s2,
269
    IN CHAR8    *s2,
270
    IN UINTN    len
270
    IN UINTN    len
271
    );
271
    );
272
 
272
 
273
UINTN
273
UINTN
274
xtoi (
274
xtoi (
275
    CHAR16      *str
275
    CHAR16      *str
276
    );
276
    );
277
 
277
 
278
UINTN
278
UINTN
279
Atoi (
279
Atoi (
280
    CHAR16  *str
280
    CHAR16  *str
281
    );
281
    );
282
 
282
 
283
BOOLEAN
283
BOOLEAN
284
MetaMatch (
284
MetaMatch (
285
    IN CHAR16   *String,
285
    IN CHAR16   *String,
286
    IN CHAR16   *Pattern
286
    IN CHAR16   *Pattern
287
    );
287
    );
288
 
288
 
289
BOOLEAN
289
BOOLEAN
290
MetaiMatch (
290
MetaiMatch (
291
    IN CHAR16   *String,
291
    IN CHAR16   *String,
292
    IN CHAR16   *Pattern
292
    IN CHAR16   *Pattern
293
    );
293
    );
294
 
294
 
295
UINT64
295
UINT64
296
LShiftU64 (
296
LShiftU64 (
297
    IN UINT64   Operand,
297
    IN UINT64   Operand,
298
    IN UINTN    Count
298
    IN UINTN    Count
299
    );
299
    );
300
 
300
 
301
UINT64
301
UINT64
302
RShiftU64 (
302
RShiftU64 (
303
    IN UINT64   Operand,
303
    IN UINT64   Operand,
304
    IN UINTN    Count
304
    IN UINTN    Count
305
    );
305
    );
306
 
306
 
307
UINT64
307
UINT64
308
MultU64x32 (
308
MultU64x32 (
309
    IN UINT64   Multiplicand,
309
    IN UINT64   Multiplicand,
310
    IN UINTN    Multiplier
310
    IN UINTN    Multiplier
311
    );
311
    );
312
 
312
 
313
UINT64
313
UINT64
314
DivU64x32 (
314
DivU64x32 (
315
    IN UINT64   Dividend,
315
    IN UINT64   Dividend,
316
    IN UINTN    Divisor,
316
    IN UINTN    Divisor,
317
    OUT UINTN   *Remainder OPTIONAL
317
    OUT UINTN   *Remainder OPTIONAL
318
    );
318
    );
319
 
319
 
320
VOID
320
VOID
321
InitializeLock (
321
InitializeLock (
322
    IN OUT FLOCK    *Lock,
322
    IN OUT FLOCK    *Lock,
323
    IN EFI_TPL  Priority
323
    IN EFI_TPL  Priority
324
    );
324
    );
325
 
325
 
326
VOID
326
VOID
327
AcquireLock (
327
AcquireLock (
328
    IN FLOCK    *Lock
328
    IN FLOCK    *Lock
329
    );
329
    );
330
 
330
 
331
VOID
331
VOID
332
ReleaseLock (
332
ReleaseLock (
333
    IN FLOCK    *Lock
333
    IN FLOCK    *Lock
334
    );
334
    );
335
 
335
 
336
 
336
 
337
INTN
337
INTN
338
CompareGuid(
338
CompareGuid(
339
    IN EFI_GUID     *Guid1,
339
    IN EFI_GUID     *Guid1,
340
    IN EFI_GUID     *Guid2
340
    IN EFI_GUID     *Guid2
341
    );
341
    );
342
 
342
 
343
VOID *
343
VOID *
344
AllocatePool (
344
AllocatePool (
345
    IN UINTN     Size
345
    IN UINTN     Size
346
    );
346
    );
347
 
347
 
348
VOID *
348
VOID *
349
AllocateZeroPool (
349
AllocateZeroPool (
350
    IN UINTN     Size
350
    IN UINTN     Size
351
    );
351
    );
352
 
352
 
353
VOID *
353
VOID *
354
ReallocatePool (
354
ReallocatePool (
355
    IN VOID                 *OldPool,
355
    IN VOID                 *OldPool,
356
    IN UINTN                OldSize,
356
    IN UINTN                OldSize,
357
    IN UINTN                NewSize
357
    IN UINTN                NewSize
358
    );
358
    );
359
 
359
 
360
VOID
360
VOID
361
FreePool (
361
FreePool (
362
    IN VOID     *p
362
    IN VOID     *p
363
    );
363
    );
364
 
364
 
365
 
365
 
366
VOID
366
VOID
367
Output (
367
Output (
368
    IN CHAR16   *Str
368
    IN CHAR16   *Str
369
    );
369
    );
370
 
370
 
371
VOID
371
VOID
372
Input (
372
Input (
373
    IN CHAR16   *Prompt OPTIONAL,
373
    IN CHAR16   *Prompt OPTIONAL,
374
    OUT CHAR16  *InStr,
374
    OUT CHAR16  *InStr,
375
    IN UINTN    StrLen
375
    IN UINTN    StrLen
376
    );
376
    );
377
 
377
 
378
VOID
378
VOID
379
IInput (
379
IInput (
380
    IN SIMPLE_TEXT_OUTPUT_INTERFACE     *ConOut,
380
    IN SIMPLE_TEXT_OUTPUT_INTERFACE     *ConOut,
381
    IN SIMPLE_INPUT_INTERFACE           *ConIn,
381
    IN SIMPLE_INPUT_INTERFACE           *ConIn,
382
    IN CHAR16                           *Prompt OPTIONAL,
382
    IN CHAR16                           *Prompt OPTIONAL,
383
    OUT CHAR16                          *InStr,
383
    OUT CHAR16                          *InStr,
384
    IN UINTN                            StrLen
384
    IN UINTN                            StrLen
385
    );
385
    );
386
 
386
 
387
UINTN
387
UINTN
388
Print (
388
Print (
389
    IN CHAR16   *fmt,
389
    IN CHAR16   *fmt,
390
    ...
390
    ...
391
    );
391
    );
392
 
392
 
393
UINTN
393
UINTN
394
SPrint (
394
SPrint (
395
    OUT CHAR16  *Str,
395
    OUT CHAR16  *Str,
396
    IN UINTN    StrSize,
396
    IN UINTN    StrSize,
397
    IN CHAR16   *fmt,
397
    IN CHAR16   *fmt,
398
    ...
398
    ...
399
    );
399
    );
400
 
400
 
401
CHAR16 *
401
CHAR16 *
402
PoolPrint (
402
PoolPrint (
403
    IN CHAR16           *fmt,
403
    IN CHAR16           *fmt,
404
    ...
404
    ...
405
    );
405
    );
406
 
406
 
407
typedef struct {
407
typedef struct {
408
    CHAR16      *str;
408
    CHAR16      *str;
409
    UINTN       len;
409
    UINTN       len;
410
    UINTN       maxlen;
410
    UINTN       maxlen;
411
} POOL_PRINT;
411
} POOL_PRINT;
412
 
412
 
413
CHAR16 *
413
CHAR16 *
414
CatPrint (
414
CatPrint (
415
    IN OUT POOL_PRINT   *Str,
415
    IN OUT POOL_PRINT   *Str,
416
    IN CHAR16           *fmt,
416
    IN CHAR16           *fmt,
417
    ...
417
    ...
418
    );
418
    );
419
 
419
 
420
UINTN
420
UINTN
421
PrintAt (
421
PrintAt (
422
    IN UINTN    Column,
422
    IN UINTN    Column,
423
    IN UINTN    Row,
423
    IN UINTN    Row,
424
    IN CHAR16   *fmt,
424
    IN CHAR16   *fmt,
425
    ...
425
    ...
426
    );
426
    );
427
 
427
 
428
UINTN
428
UINTN
429
IPrint (
429
IPrint (
430
    IN SIMPLE_TEXT_OUTPUT_INTERFACE    *Out,
430
    IN SIMPLE_TEXT_OUTPUT_INTERFACE    *Out,
431
    IN CHAR16                          *fmt,
431
    IN CHAR16                          *fmt,
432
    ...
432
    ...
433
    );
433
    );
434
 
434
 
435
UINTN
435
UINTN
436
IPrintAt (
436
IPrintAt (
437
    IN SIMPLE_TEXT_OUTPUT_INTERFACE     *Out,
437
    IN SIMPLE_TEXT_OUTPUT_INTERFACE     *Out,
438
    IN UINTN                            Column,
438
    IN UINTN                            Column,
439
    IN UINTN                            Row,
439
    IN UINTN                            Row,
440
    IN CHAR16                           *fmt,
440
    IN CHAR16                           *fmt,
441
    ...
441
    ...
442
    );
442
    );
443
 
443
 
444
UINTN
444
UINTN
445
APrint (
445
APrint (
446
    IN CHAR8    *fmt,
446
    IN CHAR8    *fmt,
447
    ...
447
    ...
448
    );
448
    );
449
 
449
 
450
VOID
450
VOID
451
ValueToHex (
451
ValueToHex (
452
    IN CHAR16   *Buffer,
452
    IN CHAR16   *Buffer,
453
    IN UINT64   v
453
    IN UINT64   v
454
    );
454
    );
455
 
455
 
456
VOID
456
VOID
457
ValueToString (
457
ValueToString (
458
    IN CHAR16   *Buffer,
458
    IN CHAR16   *Buffer,
459
    IN BOOLEAN  Comma,
459
    IN BOOLEAN  Comma,
460
    IN INT64    v
460
    IN INT64    v
461
    );
461
    );
462
 
462
 
463
VOID
463
VOID
464
TimeToString (
464
TimeToString (
465
    OUT CHAR16      *Buffer,
465
    OUT CHAR16      *Buffer,
466
    IN EFI_TIME     *Time
466
    IN EFI_TIME     *Time
467
    );
467
    );
468
 
468
 
469
VOID
469
VOID
470
GuidToString (
470
GuidToString (
471
    OUT CHAR16      *Buffer,
471
    OUT CHAR16      *Buffer,
472
    IN EFI_GUID     *Guid
472
    IN EFI_GUID     *Guid
473
    );
473
    );
474
 
474
 
475
VOID
475
VOID
476
StatusToString (
476
StatusToString (
477
    OUT CHAR16      *Buffer,
477
    OUT CHAR16      *Buffer,
478
    EFI_STATUS      Status
478
    EFI_STATUS      Status
479
    );
479
    );
480
 
480
 
481
VOID
481
VOID
482
DumpHex (
482
DumpHex (
483
    IN UINTN        Indent,
483
    IN UINTN        Indent,
484
    IN UINTN        Offset,
484
    IN UINTN        Offset,
485
    IN UINTN        DataSize,
485
    IN UINTN        DataSize,
486
    IN VOID         *UserData
486
    IN VOID         *UserData
487
    );
487
    );
488
 
488
 
489
BOOLEAN
489
BOOLEAN
490
GrowBuffer(
490
GrowBuffer(
491
    IN OUT EFI_STATUS   *Status,
491
    IN OUT EFI_STATUS   *Status,
492
    IN OUT VOID         **Buffer,
492
    IN OUT VOID         **Buffer,
493
    IN UINTN            BufferSize
493
    IN UINTN            BufferSize
494
    );
494
    );
495
 
495
 
496
EFI_MEMORY_DESCRIPTOR *
496
EFI_MEMORY_DESCRIPTOR *
497
LibMemoryMap (
497
LibMemoryMap (
498
    OUT UINTN               *NoEntries,
498
    OUT UINTN               *NoEntries,
499
    OUT UINTN               *MapKey,
499
    OUT UINTN               *MapKey,
500
    OUT UINTN               *DescriptorSize,
500
    OUT UINTN               *DescriptorSize,
501
    OUT UINT32              *DescriptorVersion
501
    OUT UINT32              *DescriptorVersion
502
    );
502
    );
503
 
503
 
504
VOID *
504
VOID *
505
LibGetVariable (
505
LibGetVariable (
506
    IN CHAR16               *Name,
506
    IN CHAR16               *Name,
507
    IN EFI_GUID             *VendorGuid
507
    IN EFI_GUID             *VendorGuid
508
    );
508
    );
509
 
509
 
510
VOID *
510
VOID *
511
LibGetVariableAndSize (
511
LibGetVariableAndSize (
512
    IN CHAR16               *Name,
512
    IN CHAR16               *Name,
513
    IN EFI_GUID             *VendorGuid,
513
    IN EFI_GUID             *VendorGuid,
514
    OUT UINTN               *VarSize
514
    OUT UINTN               *VarSize
515
    );
515
    );
516
 
516
 
517
EFI_STATUS
517
EFI_STATUS
518
LibDeleteVariable (
518
LibDeleteVariable (
519
    IN CHAR16   *VarName,
519
    IN CHAR16   *VarName,
520
    IN EFI_GUID *VarGuid
520
    IN EFI_GUID *VarGuid
521
    );
521
    );
522
 
522
 
523
EFI_STATUS
523
EFI_STATUS
524
LibInsertToTailOfBootOrder (
524
LibInsertToTailOfBootOrder (
525
    IN  UINT16  BootOption,
525
    IN  UINT16  BootOption,
526
    IN  BOOLEAN OnlyInsertIfEmpty
526
    IN  BOOLEAN OnlyInsertIfEmpty
527
    );
527
    );
528
 
528
 
529
EFI_STATUS
529
EFI_STATUS
530
LibLocateProtocol (
530
LibLocateProtocol (
531
    IN  EFI_GUID    *ProtocolGuid,
531
    IN  EFI_GUID    *ProtocolGuid,
532
    OUT VOID        **Interface
532
    OUT VOID        **Interface
533
    );
533
    );
534
 
534
 
535
EFI_STATUS
535
EFI_STATUS
536
LibLocateHandle (
536
LibLocateHandle (
537
    IN EFI_LOCATE_SEARCH_TYPE   SearchType,
537
    IN EFI_LOCATE_SEARCH_TYPE   SearchType,
538
    IN EFI_GUID                 *Protocol OPTIONAL,
538
    IN EFI_GUID                 *Protocol OPTIONAL,
539
    IN VOID                     *SearchKey OPTIONAL,
539
    IN VOID                     *SearchKey OPTIONAL,
540
    IN OUT UINTN                *NoHandles,
540
    IN OUT UINTN                *NoHandles,
541
    OUT EFI_HANDLE              **Buffer
541
    OUT EFI_HANDLE              **Buffer
542
    );
542
    );
543
 
543
 
544
EFI_STATUS
544
EFI_STATUS
545
LibLocateHandleByDiskSignature (
545
LibLocateHandleByDiskSignature (
546
    IN UINT8                        MBRType,
546
    IN UINT8                        MBRType,
547
    IN UINT8                        SignatureType,
547
    IN UINT8                        SignatureType,
548
    IN VOID                         *Signature,
548
    IN VOID                         *Signature,
549
    IN OUT UINTN                    *NoHandles,
549
    IN OUT UINTN                    *NoHandles,
550
    OUT EFI_HANDLE                  **Buffer
550
    OUT EFI_HANDLE                  **Buffer
551
    );
551
    );
552
 
552
 
553
EFI_STATUS
553
EFI_STATUS
554
LibInstallProtocolInterfaces (
554
LibInstallProtocolInterfaces (
555
    IN OUT EFI_HANDLE       *Handle,
555
    IN OUT EFI_HANDLE       *Handle,
556
    ...
556
    ...
557
    );
557
    );
558
 
558
 
559
VOID
559
VOID
560
LibUninstallProtocolInterfaces (
560
LibUninstallProtocolInterfaces (
561
    IN EFI_HANDLE           Handle,
561
    IN EFI_HANDLE           Handle,
562
    ...
562
    ...
563
    );
563
    );
564
 
564
 
565
EFI_STATUS
565
EFI_STATUS
566
LibReinstallProtocolInterfaces (
566
LibReinstallProtocolInterfaces (
567
    IN OUT EFI_HANDLE           *Handle,
567
    IN OUT EFI_HANDLE           *Handle,
568
    ...
568
    ...
569
    );
569
    );
570
 
570
 
571
EFI_EVENT
571
EFI_EVENT
572
LibCreateProtocolNotifyEvent (
572
LibCreateProtocolNotifyEvent (
573
    IN EFI_GUID             *ProtocolGuid,
573
    IN EFI_GUID             *ProtocolGuid,
574
    IN EFI_TPL              NotifyTpl,
574
    IN EFI_TPL              NotifyTpl,
575
    IN EFI_EVENT_NOTIFY     NotifyFunction,
575
    IN EFI_EVENT_NOTIFY     NotifyFunction,
576
    IN VOID                 *NotifyContext,
576
    IN VOID                 *NotifyContext,
577
    OUT VOID                *Registration
577
    OUT VOID                *Registration
578
    );
578
    );
579
 
579
 
580
EFI_STATUS
580
EFI_STATUS
581
WaitForSingleEvent (
581
WaitForSingleEvent (
582
    IN EFI_EVENT        Event,
582
    IN EFI_EVENT        Event,
583
    IN UINT64           Timeout OPTIONAL
583
    IN UINT64           Timeout OPTIONAL
584
    );
584
    );
585
 
585
 
586
VOID
586
VOID
587
WaitForEventWithTimeout (
587
WaitForEventWithTimeout (
588
    IN  EFI_EVENT       Event,
588
    IN  EFI_EVENT       Event,
589
    IN  UINTN           Timeout,
589
    IN  UINTN           Timeout,
590
    IN  UINTN           Row,
590
    IN  UINTN           Row,
591
    IN  UINTN           Column,
591
    IN  UINTN           Column,
592
    IN  CHAR16          *String,
592
    IN  CHAR16          *String,
593
    IN  EFI_INPUT_KEY   TimeoutKey,
593
    IN  EFI_INPUT_KEY   TimeoutKey,
594
    OUT EFI_INPUT_KEY   *Key
594
    OUT EFI_INPUT_KEY   *Key
595
    );
595
    );
596
 
596
 
597
EFI_FILE_HANDLE
597
EFI_FILE_HANDLE
598
LibOpenRoot (
598
LibOpenRoot (
599
    IN EFI_HANDLE           DeviceHandle
599
    IN EFI_HANDLE           DeviceHandle
600
    );
600
    );
601
 
601
 
602
EFI_FILE_INFO *
602
EFI_FILE_INFO *
603
LibFileInfo (
603
LibFileInfo (
604
    IN EFI_FILE_HANDLE      FHand
604
    IN EFI_FILE_HANDLE      FHand
605
    );
605
    );
606
 
606
 
607
EFI_FILE_SYSTEM_INFO *
607
EFI_FILE_SYSTEM_INFO *
608
LibFileSystemInfo (
608
LibFileSystemInfo (
609
    IN EFI_FILE_HANDLE      FHand
609
    IN EFI_FILE_HANDLE      FHand
610
    );
610
    );
611
 
611
 
612
EFI_FILE_SYSTEM_VOLUME_LABEL_INFO *
612
EFI_FILE_SYSTEM_VOLUME_LABEL_INFO *
613
LibFileSystemVolumeLabelInfo (
613
LibFileSystemVolumeLabelInfo (
614
    IN EFI_FILE_HANDLE      FHand
614
    IN EFI_FILE_HANDLE      FHand
615
    );
615
    );
616
 
616
 
617
BOOLEAN
617
BOOLEAN
618
ValidMBR(
618
ValidMBR(
619
    IN  MASTER_BOOT_RECORD  *Mbr,
619
    IN  MASTER_BOOT_RECORD  *Mbr,
620
    IN  EFI_BLOCK_IO        *BlkIo
620
    IN  EFI_BLOCK_IO        *BlkIo
621
    );
621
    );
622
 
622
 
623
BOOLEAN
623
BOOLEAN
624
LibMatchDevicePaths (
624
LibMatchDevicePaths (
625
    IN  EFI_DEVICE_PATH *Multi,
625
    IN  EFI_DEVICE_PATH *Multi,
626
    IN  EFI_DEVICE_PATH *Single
626
    IN  EFI_DEVICE_PATH *Single
627
    );
627
    );
628
 
628
 
629
EFI_DEVICE_PATH *
629
EFI_DEVICE_PATH *
630
LibDuplicateDevicePathInstance (
630
LibDuplicateDevicePathInstance (
631
    IN EFI_DEVICE_PATH  *DevPath
631
    IN EFI_DEVICE_PATH  *DevPath
632
    );
632
    );
633
 
633
 
634
EFI_DEVICE_PATH *
634
EFI_DEVICE_PATH *
635
DevicePathFromHandle (
635
DevicePathFromHandle (
636
    IN EFI_HANDLE           Handle
636
    IN EFI_HANDLE           Handle
637
    );
637
    );
638
 
638
 
639
EFI_DEVICE_PATH *
639
EFI_DEVICE_PATH *
640
DevicePathInstance (
640
DevicePathInstance (
641
    IN OUT EFI_DEVICE_PATH  **DevicePath,
641
    IN OUT EFI_DEVICE_PATH  **DevicePath,
642
    OUT UINTN               *Size
642
    OUT UINTN               *Size
643
    );
643
    );
644
 
644
 
645
UINTN
645
UINTN
646
DevicePathInstanceCount (
646
DevicePathInstanceCount (
647
    IN EFI_DEVICE_PATH      *DevicePath
647
    IN EFI_DEVICE_PATH      *DevicePath
648
    );
648
    );
649
 
649
 
650
EFI_DEVICE_PATH *
650
EFI_DEVICE_PATH *
651
AppendDevicePath (
651
AppendDevicePath (
652
    IN EFI_DEVICE_PATH      *Src1,
652
    IN EFI_DEVICE_PATH      *Src1,
653
    IN EFI_DEVICE_PATH      *Src2
653
    IN EFI_DEVICE_PATH      *Src2
654
    );
654
    );
655
 
655
 
656
EFI_DEVICE_PATH *
656
EFI_DEVICE_PATH *
657
AppendDevicePathNode (
657
AppendDevicePathNode (
658
    IN EFI_DEVICE_PATH      *Src1,
658
    IN EFI_DEVICE_PATH      *Src1,
659
    IN EFI_DEVICE_PATH      *Src2
659
    IN EFI_DEVICE_PATH      *Src2
660
    );
660
    );
661
 
661
 
662
EFI_DEVICE_PATH*
662
EFI_DEVICE_PATH*
663
AppendDevicePathInstance (
663
AppendDevicePathInstance (
664
    IN EFI_DEVICE_PATH  *Src,
664
    IN EFI_DEVICE_PATH  *Src,
665
    IN EFI_DEVICE_PATH  *Instance
665
    IN EFI_DEVICE_PATH  *Instance
666
    );
666
    );
667
 
667
 
668
EFI_DEVICE_PATH *
668
EFI_DEVICE_PATH *
669
FileDevicePath (
669
FileDevicePath (
670
    IN EFI_HANDLE           Device  OPTIONAL,
670
    IN EFI_HANDLE           Device  OPTIONAL,
671
    IN CHAR16               *FileName
671
    IN CHAR16               *FileName
672
    );
672
    );
673
 
673
 
674
UINTN
674
UINTN
675
DevicePathSize (
675
DevicePathSize (
676
    IN EFI_DEVICE_PATH      *DevPath
676
    IN EFI_DEVICE_PATH      *DevPath
677
    );
677
    );
678
 
678
 
679
EFI_DEVICE_PATH *
679
EFI_DEVICE_PATH *
680
DuplicateDevicePath (
680
DuplicateDevicePath (
681
    IN EFI_DEVICE_PATH      *DevPath
681
    IN EFI_DEVICE_PATH      *DevPath
682
    );
682
    );
683
 
683
 
684
EFI_DEVICE_PATH *
684
EFI_DEVICE_PATH *
685
UnpackDevicePath (
685
UnpackDevicePath (
686
    IN EFI_DEVICE_PATH      *DevPath
686
    IN EFI_DEVICE_PATH      *DevPath
687
    );
687
    );
688
 
688
 
689
EFI_STATUS
689
EFI_STATUS
690
LibDevicePathToInterface (
690
LibDevicePathToInterface (
691
    IN EFI_GUID             *Protocol,
691
    IN EFI_GUID             *Protocol,
692
    IN EFI_DEVICE_PATH      *FilePath,
692
    IN EFI_DEVICE_PATH      *FilePath,
693
    OUT VOID                **Interface
693
    OUT VOID                **Interface
694
    );
694
    );
695
 
695
 
696
CHAR16 *
696
CHAR16 *
697
DevicePathToStr (
697
DevicePathToStr (
698
    EFI_DEVICE_PATH         *DevPath
698
    EFI_DEVICE_PATH         *DevPath
699
    );
699
    );
700
 
700
 
701
//
701
//
702
// BugBug: I need my own include files
702
// BugBug: I need my own include files
703
//
703
//
704
typedef struct {
704
typedef struct {
705
    UINT8   Register;
705
    UINT8   Register;
706
    UINT8   Function;
706
    UINT8   Function;
707
    UINT8   Device;
707
    UINT8   Device;
708
    UINT8   Bus;
708
    UINT8   Bus;
709
    UINT32  Reserved;
709
    UINT32  Reserved;
710
} EFI_ADDRESS;
710
} EFI_ADDRESS;
711
 
711
 
712
typedef union {
712
typedef union {
713
    UINT64          Address;
713
    UINT64          Address;
714
    EFI_ADDRESS     EfiAddress;
714
    EFI_ADDRESS     EfiAddress;
715
} EFI_PCI_ADDRESS_UNION;
715
} EFI_PCI_ADDRESS_UNION;
716
 
716
 
717
 
717
 
718
EFI_STATUS
718
EFI_STATUS
719
PciFindDeviceClass (
719
PciFindDeviceClass (
720
    IN  OUT EFI_PCI_ADDRESS_UNION   *Address,
720
    IN  OUT EFI_PCI_ADDRESS_UNION   *Address,
721
    IN      UINT8                   BaseClass,
721
    IN      UINT8                   BaseClass,
722
    IN      UINT8                   SubClass
722
    IN      UINT8                   SubClass
723
    );
723
    );
724
 
724
 
725
EFI_STATUS
725
EFI_STATUS
726
PciFindDevice (
726
PciFindDevice (
727
    IN  OUT EFI_PCI_ADDRESS_UNION   *DeviceAddress,
727
    IN  OUT EFI_PCI_ADDRESS_UNION   *DeviceAddress,
728
    IN      UINT16                  VendorId,
728
    IN      UINT16                  VendorId,
729
    IN      UINT16                  DeviceId,
729
    IN      UINT16                  DeviceId,
730
    IN OUT  PCI_TYPE00              *Pci
730
    IN OUT  PCI_TYPE00              *Pci
731
    );
731
    );
732
 
732
 
733
//
733
//
734
// SIMPLE_READ_FILE object used to access files
734
// SIMPLE_READ_FILE object used to access files
735
//
735
//
736
 
736
 
737
typedef VOID        *SIMPLE_READ_FILE;
737
typedef VOID        *SIMPLE_READ_FILE;
738
 
738
 
739
EFI_STATUS
739
EFI_STATUS
740
OpenSimpleReadFile (
740
OpenSimpleReadFile (
741
    IN BOOLEAN                  BootPolicy,
741
    IN BOOLEAN                  BootPolicy,
742
    IN VOID                     *SourceBuffer   OPTIONAL,
742
    IN VOID                     *SourceBuffer   OPTIONAL,
743
    IN UINTN                    SourceSize,
743
    IN UINTN                    SourceSize,
744
    IN OUT EFI_DEVICE_PATH      **FilePath,
744
    IN OUT EFI_DEVICE_PATH      **FilePath,
745
    OUT EFI_HANDLE              *DeviceHandle,    
745
    OUT EFI_HANDLE              *DeviceHandle,    
746
    OUT SIMPLE_READ_FILE        *SimpleReadHandle
746
    OUT SIMPLE_READ_FILE        *SimpleReadHandle
747
    );
747
    );
748
 
748
 
749
EFI_STATUS
749
EFI_STATUS
750
ReadSimpleReadFile (
750
ReadSimpleReadFile (
751
    IN SIMPLE_READ_FILE     SimpleReadHandle,
751
    IN SIMPLE_READ_FILE     SimpleReadHandle,
752
    IN UINTN                Offset,
752
    IN UINTN                Offset,
753
    IN OUT UINTN            *ReadSize,
753
    IN OUT UINTN            *ReadSize,
754
    OUT VOID                *Buffer
754
    OUT VOID                *Buffer
755
    );
755
    );
756
 
756
 
757
 
757
 
758
VOID
758
VOID
759
CloseSimpleReadFile (
759
CloseSimpleReadFile (
760
    IN SIMPLE_READ_FILE     SimpleReadHandle
760
    IN SIMPLE_READ_FILE     SimpleReadHandle
761
    );
761
    );
762
 
762
 
763
VOID
763
VOID
764
InitializeGuid (
764
InitializeGuid (
765
    VOID
765
    VOID
766
    );
766
    );
767
 
767
 
768
UINT8
768
UINT8
769
DecimaltoBCD(
769
DecimaltoBCD(
770
    IN  UINT8 DecValue
770
    IN  UINT8 DecValue
771
    );
771
    );
772
 
772
 
773
UINT8
773
UINT8
774
BCDtoDecimal(
774
BCDtoDecimal(
775
    IN  UINT8 BcdValue
775
    IN  UINT8 BcdValue
776
    );
776
    );
777
 
777
 
778
EFI_STATUS
778
EFI_STATUS
779
LibGetSystemConfigurationTable(
779
LibGetSystemConfigurationTable(
780
    IN EFI_GUID *TableGuid,
780
    IN EFI_GUID *TableGuid,
781
    IN OUT VOID **Table
781
    IN OUT VOID **Table
782
    );
782
    );
783
 
783
 
784
BOOLEAN
784
BOOLEAN
785
LibIsValidTextGraphics (
785
LibIsValidTextGraphics (
786
    IN  CHAR16  Graphic,  
786
    IN  CHAR16  Graphic,  
787
    OUT CHAR8   *PcAnsi,    OPTIONAL
787
    OUT CHAR8   *PcAnsi,    OPTIONAL
788
    OUT CHAR8   *Ascii      OPTIONAL
788
    OUT CHAR8   *Ascii      OPTIONAL
789
    );
789
    );
790
 
790
 
791
BOOLEAN
791
BOOLEAN
792
IsValidAscii (
792
IsValidAscii (
793
    IN  CHAR16  Ascii
793
    IN  CHAR16  Ascii
794
    );
794
    );
795
 
795
 
796
BOOLEAN
796
BOOLEAN
797
IsValidEfiCntlChar (
797
IsValidEfiCntlChar (
798
    IN  CHAR16  c
798
    IN  CHAR16  c
799
    );
799
    );
800
 
800
 
801
CHAR16 *
801
CHAR16 *
802
LibGetUiString (
802
LibGetUiString (
803
    IN  EFI_HANDLE      Handle,
803
    IN  EFI_HANDLE      Handle,
804
    IN  UI_STRING_TYPE  StringType,
804
    IN  UI_STRING_TYPE  StringType,
805
    IN  ISO_639_2       *LangCode,
805
    IN  ISO_639_2       *LangCode,
806
    IN  BOOLEAN         ReturnDevicePathStrOnMismatch
806
    IN  BOOLEAN         ReturnDevicePathStrOnMismatch
807
    );
807
    );
808
 
808
 
809
CHAR8*
809
CHAR8*
810
LibGetSmbiosString (
810
LibGetSmbiosString (
811
    IN  SMBIOS_STRUCTURE_POINTER    *Smbios,
811
    IN  SMBIOS_STRUCTURE_POINTER    *Smbios,
812
    IN  UINT16                      StringNumber
812
    IN  UINT16                      StringNumber
813
    );
813
    );
814
 
814
 
815
EFI_STATUS
815
EFI_STATUS
816
LibGetSmbiosSystemGuidAndSerialNumber (
816
LibGetSmbiosSystemGuidAndSerialNumber (
817
    IN  EFI_GUID    *SystemGuid,
817
    IN  EFI_GUID    *SystemGuid,
818
    OUT CHAR8       **SystemSerialNumber
818
    OUT CHAR8       **SystemSerialNumber
819
    );
819
    );
820
 
820
 
821
 
821
 
822
EFI_STATUS
822
EFI_STATUS
823
InitializeGlobalIoDevice (
823
InitializeGlobalIoDevice (
824
        IN  EFI_DEVICE_PATH             *DevicePath,
824
        IN  EFI_DEVICE_PATH             *DevicePath,
825
        IN  EFI_GUID                    *Protocol,
825
        IN  EFI_GUID                    *Protocol,
826
        IN  CHAR8                       *ErrorStr,
826
        IN  CHAR8                       *ErrorStr,
827
        OUT EFI_DEVICE_IO_INTERFACE     **GlobalIoFncs
827
        OUT EFI_DEVICE_IO_INTERFACE     **GlobalIoFncs
828
        );
828
        );
829
 
829
 
830
UINT32
830
UINT32
831
ReadPort (
831
ReadPort (
832
        IN  EFI_DEVICE_IO_INTERFACE     *GlobalIoFncs,
832
        IN  EFI_DEVICE_IO_INTERFACE     *GlobalIoFncs,
833
        IN  EFI_IO_WIDTH                Width,
833
        IN  EFI_IO_WIDTH                Width,
834
        IN  UINTN                       Port
834
        IN  UINTN                       Port
835
        );
835
        );
836
 
836
 
837
UINT32
837
UINT32
838
WritePort (
838
WritePort (
839
        IN  EFI_DEVICE_IO_INTERFACE     *GlobalIoFncs,
839
        IN  EFI_DEVICE_IO_INTERFACE     *GlobalIoFncs,
840
        IN  EFI_IO_WIDTH                Width,
840
        IN  EFI_IO_WIDTH                Width,
841
        IN  UINTN                       Port,
841
        IN  UINTN                       Port,
842
        IN  UINTN                       Data
842
        IN  UINTN                       Data
843
        );
843
        );
844
 
844
 
845
UINT32
845
UINT32
846
ReadPciConfig (
846
ReadPciConfig (
847
        IN  EFI_DEVICE_IO_INTERFACE     *GlobalIoFncs,
847
        IN  EFI_DEVICE_IO_INTERFACE     *GlobalIoFncs,
848
        IN  EFI_IO_WIDTH                Width,
848
        IN  EFI_IO_WIDTH                Width,
849
        IN  UINTN                       Port
849
        IN  UINTN                       Port
850
        );
850
        );
851
 
851
 
852
UINT32
852
UINT32
853
WritePciConfig (
853
WritePciConfig (
854
        IN  EFI_DEVICE_IO_INTERFACE     *GlobalIoFncs,
854
        IN  EFI_DEVICE_IO_INTERFACE     *GlobalIoFncs,
855
        IN  EFI_IO_WIDTH                Width,
855
        IN  EFI_IO_WIDTH                Width,
856
        IN  UINTN                       Port,
856
        IN  UINTN                       Port,
857
        IN  UINTN                       Data
857
        IN  UINTN                       Data
858
        );
858
        );
859
 
859
 
860
extern EFI_DEVICE_IO_INTERFACE  *GlobalIoFncs;
860
extern EFI_DEVICE_IO_INTERFACE  *GlobalIoFncs;
861
 
861
 
862
#define outp(_Port, _DataByte)  (UINT8)WritePort(GlobalIoFncs,  IO_UINT8,  (UINTN)_Port, (UINTN)_DataByte)
862
#define outp(_Port, _DataByte)  (UINT8)WritePort(GlobalIoFncs,  IO_UINT8,  (UINTN)_Port, (UINTN)_DataByte)
863
#define inp(_Port)              (UINT8)ReadPort(GlobalIoFncs,   IO_UINT8,  (UINTN)_Port)
863
#define inp(_Port)              (UINT8)ReadPort(GlobalIoFncs,   IO_UINT8,  (UINTN)_Port)
864
#define outpw(_Port, _DataByte) (UINT16)WritePort(GlobalIoFncs, IO_UINT16, (UINTN)_Port, (UINTN)_DataByte)
864
#define outpw(_Port, _DataByte) (UINT16)WritePort(GlobalIoFncs, IO_UINT16, (UINTN)_Port, (UINTN)_DataByte)
865
#define inpw(_Port)             (UINT16)ReadPort(GlobalIoFncs,  IO_UINT16, (UINTN)_Port)
865
#define inpw(_Port)             (UINT16)ReadPort(GlobalIoFncs,  IO_UINT16, (UINTN)_Port)
866
#define outpd(_Port, _DataByte) (UINT32)WritePort(GlobalIoFncs, IO_UINT32, (UINTN)_Port, (UINTN)_DataByte)
866
#define outpd(_Port, _DataByte) (UINT32)WritePort(GlobalIoFncs, IO_UINT32, (UINTN)_Port, (UINTN)_DataByte)
867
#define inpd(_Port)             (UINT32)ReadPort(GlobalIoFncs,  IO_UINT32, (UINTN)_Port)
867
#define inpd(_Port)             (UINT32)ReadPort(GlobalIoFncs,  IO_UINT32, (UINTN)_Port)
868
 
868
 
869
#define writepci8(_Addr, _DataByte)  (UINT8)WritePciConfig(GlobalIoFncs,  IO_UINT8,  (UINTN)_Addr, (UINTN)_DataByte)
869
#define writepci8(_Addr, _DataByte)  (UINT8)WritePciConfig(GlobalIoFncs,  IO_UINT8,  (UINTN)_Addr, (UINTN)_DataByte)
870
#define readpci8(_Addr)              (UINT8)ReadPciConfig(GlobalIoFncs,   IO_UINT8,  (UINTN)_Addr)
870
#define readpci8(_Addr)              (UINT8)ReadPciConfig(GlobalIoFncs,   IO_UINT8,  (UINTN)_Addr)
871
#define writepci16(_Addr, _DataByte) (UINT16)WritePciConfig(GlobalIoFncs, IO_UINT16, (UINTN)_Addr, (UINTN)_DataByte)
871
#define writepci16(_Addr, _DataByte) (UINT16)WritePciConfig(GlobalIoFncs, IO_UINT16, (UINTN)_Addr, (UINTN)_DataByte)
872
#define readpci16(_Addr)             (UINT16)ReadPciConfig(GlobalIoFncs,  IO_UINT16, (UINTN)_Addr)
872
#define readpci16(_Addr)             (UINT16)ReadPciConfig(GlobalIoFncs,  IO_UINT16, (UINTN)_Addr)
873
#define writepci32(_Addr, _DataByte) (UINT32)WritePciConfig(GlobalIoFncs, IO_UINT32, (UINTN)_Addr, (UINTN)_DataByte)
873
#define writepci32(_Addr, _DataByte) (UINT32)WritePciConfig(GlobalIoFncs, IO_UINT32, (UINTN)_Addr, (UINTN)_DataByte)
874
#define readpci32(_Addr)             (UINT32)ReadPciConfig(GlobalIoFncs,  IO_UINT32, (UINTN)_Addr)
874
#define readpci32(_Addr)             (UINT32)ReadPciConfig(GlobalIoFncs,  IO_UINT32, (UINTN)_Addr)
875
 
875
 
876
#define Pause()             WaitForSingleEvent (ST->ConIn->WaitForKey, 0)
876
#define Pause()             WaitForSingleEvent (ST->ConIn->WaitForKey, 0)
877
#define Port80(_PostCode)   GlobalIoFncs->Io.Write (GlobalIoFncs, IO_UINT16, (UINT64)0x80, 1, &(_PostCode))
877
#define Port80(_PostCode)   GlobalIoFncs->Io.Write (GlobalIoFncs, IO_UINT16, (UINT64)0x80, 1, &(_PostCode))
878
 
878
 
879
#endif
879
#endif
880
 
880