summaryrefslogtreecommitdiff
path: root/Include/Protocol/LegacyBiosPlatform.h
blob: 0d07a9042fb460e01ae83c850975e44697e2e95d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
//**********************************************************************
//**********************************************************************
//**                                                                  **
//**        (C)Copyright 1985-2010, American Megatrends, Inc.         **
//**                                                                  **
//**                       All Rights Reserved.                       **
//**                                                                  **
//**           5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093      **
//**                                                                  **
//**                       Phone: (770)-246-8600                      **
//**                                                                  **
//**********************************************************************
//**********************************************************************

//**********************************************************************
// $Header: /Alaska/SOURCE/Modules/CSM/Generic/Protocol/LegacyBiosPlatform.h 15    4/24/12 6:41p Olegi $
//
// $Revision: 15 $
//
// $Date: 4/24/12 6:41p $
//**********************************************************************
// Revision History
// ----------------
// $Log: /Alaska/SOURCE/Modules/CSM/Generic/Protocol/LegacyBiosPlatform.h $
// 
// 15    4/24/12 6:41p Olegi
// [TAG]  		EIP86770
// [Category]  	Improvement
// [Description]  	Added EfiGetBcvSkipDeviceList to
// EFI_GET_PLATFORM_INFO_MODE structure.
// 
// 14    1/12/10 11:51a Olegi
// Copyright message updated.
// 
// 13    12/02/09 9:57a Olegi
// Extended the parameters of GetPlatformInfo with
// EfiGetPlatformNmiInformation.
// 
// 12    12/09/08 3:33p Olegi
// 
// 11    12/04/08 5:57p Olegi
// 
// 10    11/12/08 5:02p Olegi
// 
// 9     4/27/07 5:49p Olegi
// 
// 8     4/27/07 5:17p Olegi
// CSM.CHM file preparation.
//
// 7     3/13/06 2:43p Felixp
//
//**********************************************************************
//<AMI_FHDR_START>
//
// Name:    LegacyBiosPlatform.h
//
// Description: LegacyBiosPlatform protocol declaration
//
//<AMI_FHDR_END>
//**********************************************************************
#ifndef __LEGACY_BIOS_PLATFORM_PROTOCOL_H__
#define __LEGACY_BIOS_PLATFORM_PROTOCOL_H__
#ifdef __cplusplus
extern "C" {
#endif

#define EFI_LEGACY_BIOS_PLATFORM_PROTOCOL_GUID \
    { 0x783658a3, 0x4172, 0x4421, 0xa2, 0x99, 0xe0, 0x9, 0x7, 0x9c, 0xc, 0xb4 }

GUID_VARIABLE_DECLARATION(gEfiLegacyBiosPlatformProtocolGuid,EFI_LEGACY_BIOS_PLATFORM_PROTOCOL_GUID);

#ifndef GUID_VARIABLE_DEFINITION
#include <Protocol/DevicePath.h>
#pragma pack(1)

typedef struct _EFI_LEGACY_BIOS_PLATFORM_PROTOCOL EFI_LEGACY_BIOS_PLATFORM_PROTOCOL;

//<AMI_PHDR_START>
//----------------------------------------------------------------------------
// Name:        EFI_LEGACY_BIOS_PLATFORM_PREPARE_TO_BOOT
//
// Description: Prepares the attempt to boot a traditional OS.
//
// Input:
//  This            Indicates the EFI_LEGACY_BIOS_PLATFORM_PROTOCOL instance.
//  BbsDevicePath   EFI Device Path from BootXXXX variable.
//  BbsTable        A list of BBS entries of type BBS_TABLE.
//  LoadOptionsSize Size of LoadOption in bytes.
//  LoadOptions     LoadOption from BootXXXX variable.
//  EfiToLegacyBootTable    Pointer to EFI_TO_COMPATIBILITY16_BOOT_TABLE.
//
// Output:
//  EFI_SUCCESS Ready to boot.
//
//----------------------------------------------------------------------------
//<AMI_PHDR_END>

typedef
EFI_STATUS
(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_PREPARE_TO_BOOT) (
  IN  EFI_LEGACY_BIOS_PLATFORM_PROTOCOL     *This,
  IN  BBS_BBS_DEVICE_PATH                   *BbsDevicePath,
  IN  VOID                                  *BbsTable,
  IN  UINT32                                LoadOptionsSize,
  IN  VOID                                  *LoadOptions,
  IN  VOID                                  *EfiToLegacyBootTable
  );

//<AMI_PHDR_START>
//----------------------------------------------------------------------------
// Name:        EFI_LEGACY_BIOS_PLATFORM_TRANSLATE_PIRQ
//
// Description: This function translates the given PIRQ back through all
//              buses, if required, and returns the true PIRQ and associated IRQ.
// Input:
//  This        Indicates the EFI_LEGACY_BIOS_PLATFORM_PROTOCOL instance.
//  PciBus      PCI bus number for this device.
//  PciDevice   PCI device number for this device.
//  PciFunction PCI function number for this device.
//  Pirq        The PIRQ. PIRQ A = 0, PIRQ B = 1, and so on.
//  PirqIrq     IRQ assigned to the indicated PIRQ.
//
// Output:
//  EFI_SUCCESS The PIRQ was translated.
//----------------------------------------------------------------------------
//<AMI_PHDR_END>

typedef
EFI_STATUS
(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_TRANSLATE_PIRQ) (
  IN  EFI_LEGACY_BIOS_PLATFORM_PROTOCOL  *This,
  IN  UINTN                              PciBus,
  IN  UINTN                              PciDevice,
  IN  UINTN                              PciFunction,
  IN  OUT UINT8                          *Pirq,
  OUT UINT8                              *PciIrq
  );


//<AMI_SHDR_START>
//----------------------------------------------------------------------------
// Name:    EFI_LEGACY_PIRQ_ENTRY
//
// Description: EFI_LEGACY_BIOS_PLATFORM_GET_ROUTING_TABLE related definition
//
// Fields:
//  Pirq    UINT8   If nonzero, a value assigned by the IBV.
//  IrqMask UINT16  If nonzero, the IRQs that can be assigned to this device.
//
//----------------------------------------------------------------------------
//<AMI_SHDR_END>

typedef struct {
  UINT8                    Pirq;
  UINT16                   IrqMask;
} EFI_LEGACY_PIRQ_ENTRY;


//<AMI_SHDR_START>
//----------------------------------------------------------------------------
// Name:    EFI_LEGACY_IRQ_ROUTING_ENTRY
//
// Description: EFI_LEGACY_BIOS_PLATFORM_GET_ROUTING_TABLE related definition
//
// Fields:
//  Bus     UINT8   PCI bus of the entry.
//  Device  UINT8   PCI device of this entry.
//  PirqEntry   EFI_LEGACY_PIRQ_ENTRY   An IBV value and IRQ mask for PIRQ pins A through D.
//  Slot    UINT8   If nonzero, the slot number assigned by the board manufacturer.
//  Reserved    UINT8   Reserved for future use.
//
// Referrals:   EFI_LEGACY_PIRQ_ENTRY
//----------------------------------------------------------------------------
//<AMI_SHDR_END>
typedef struct {
  UINT8                    Bus;
  UINT8                    Device;
  EFI_LEGACY_PIRQ_ENTRY    PirqEntry[4];
  UINT8                    Slot;
  UINT8                    Reserved;
} EFI_LEGACY_IRQ_ROUTING_ENTRY;


//<AMI_SHDR_START>
//----------------------------------------------------------------------------
// Name:    EFI_LEGACY_PIRQ_TABLE_HEADER
//
// Description: EFI_LEGACY_BIOS_PLATFORM_GET_ROUTING_TABLE related definition
//
// Fields:
//  Signature       UINT32  "$PIR".
//  MinorVersion    UINT8   0x00.
//  MajorVersion    UINT8   0x01 for table version 1.0.
//  TableSize       UINT16  0x20 + RoutingTableEntries * 0x10.
//  Bus             UINT8   PCI interrupt router bus.
//  DevFunc         UINT8   PCI interrupt router device/function.
//  PciOnlyIrq      UINT16  If nonzero, bit map of IRQs reserved for PCI.
//  CompatibleVid   UINT16  Vendor ID of a compatible PCI interrupt router.
//  CompatibleDid   UINT16  Device ID of a compatible PCI interrupt router.
//  Minport         UINT32  If nonzero, a value passed directly to the IRQ miniport's Initialize function.
//  Reserved        UINT8[11]   Reserved for future usage.
//  Checksum        UINT8   This byte plus the sum of all other bytes in the LocalPirqTable equal 0x00.
//----------------------------------------------------------------------------
//<AMI_SHDR_END>

typedef struct {
  UINT32                   Signature;
  UINT8                    MinorVersion;
  UINT8                    MajorVersion;
  UINT16                   TableSize;
  UINT8                    Bus;
  UINT8                    DevFun;
  UINT16                   PciOnlyIrq;
  UINT16                   CompatibleVid;
  UINT16                   CompatibleDid;
  UINT32                   Miniport;
  UINT8                    Reserved[11];
  UINT8                    Checksum;
} EFI_LEGACY_PIRQ_TABLE_HEADER;


//<AMI_SHDR_START>
//----------------------------------------------------------------------------
// Name:    EFI_LEGACY_IRQ_PRIORITY_TABLE_ENTRY
//
// Description: EFI_LEGACY_BIOS_PLATFORM_GET_ROUTING_TABLE related definition
//
// Fields:
//  Irq     UINT8   IRQ for this entry.
//  Used    UINT8   Status of this IRQ
//
// Notes: The field Used data definitions below:
//              PCI_UNUSED  0x00 - This IRQ has not been assigned to PCI.
//              PCI_USED    0xFF - This IRQ has been assigned to PCI.
//              LEGACY_USED 0xFE - This IRQ has been used by an SIO legacy device and
//                          cannot be used by PCI.
//----------------------------------------------------------------------------
//<AMI_SHDR_END>

typedef struct {
  UINT8                    Irq;
  UINT8                    Used;
} EFI_LEGACY_IRQ_PRIORITY_TABLE_ENTRY;


//<AMI_PHDR_START>
//----------------------------------------------------------------------------
// Name:    EFI_LEGACY_BIOS_PLATFORM_GET_ROUTING_TABLE
//
// Description: Returns information associated with PCI IRQ routing.
//
// Input:
//  This            Indicates the EFI_LEGACY_BIOS_PLATFORM_PROTOCOL instance.
//
//  RoutingTable    Pointer to the PCI IRQ routing table. This location is the $PIR table
//      minus the header. The contents are described by the PCI IRQ Routing Table 
//      Specification and consist of RoutingTableEntries of EFI_LEGACY_IRQ_ROUTING_ENTRY.
//
//  RoutingTableEntries     Number of entries in the PCI IRQ routing table.
//
//  LocalPirqTable          $PIR table. It consists of EFI_LEGACY_PIRQ_TABLE_HEADER,
//      immediately followed by RoutingTable.
//
//  PirqTableSize           Size of $PIR table.
//
//  LocalIrqPriorityTable   A priority table of IRQs to assign to PCI. This table 
//      consists of IrqPriorityTableEntries of EFI_LEGACY_IRQ_PRIORITY_TABLE_ENTRY
//      and is used to prioritize the allocation of IRQs to PCI.
//
//  IrqPriorityTableEntries Number of entries in the priority table.
//
// Output:
//  EFI_SUCCESS Data was returned successfully.
//
// Referrals:
//  EFI_LEGACY_BIOS_PLATFORM_PROTOCOL, EFI_LEGACY_IRQ_ROUTING_ENTRY,
//  EFI_LEGACY_PIRQ_TABLE_HEADER, EFI_LEGACY_IRQ_PRIORITY_TABLE_ENTRY
//
//----------------------------------------------------------------------------
//<AMI_PHDR_END>

typedef
EFI_STATUS
(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_GET_ROUTING_TABLE) (
  IN  EFI_LEGACY_BIOS_PLATFORM_PROTOCOL   *This,
  OUT VOID                                **RoutingTable,
  OUT UINTN                               *RoutingTableEntries,
  OUT VOID                                **LocalPirqTable, OPTIONAL
  OUT UINTN                               *PirqTableSize, OPTIONAL
  OUT VOID                                **LocalIrqPriorityTable, OPTIONAL
  OUT UINTN                               *IrqPriorityTableEntries OPTIONAL
  );


//<AMI_SHDR_START>
//----------------------------------------------------------------------------
// Name:    EFI_GET_PLATFORM_HOOK_MODE
//
// Description: Mode definitions for EFI_LEGACY_BIOS_PLATFORM_HOOKS
//
//----------------------------------------------------------------------------
//<AMI_SHDR_END>

typedef enum {
  EfiPlatformHookPrepareToScanRom       = 0,
  EfiPlatformHookShadowServiceRoms      = 1,
  EfiPlatformHookAfterRomInit           = 2
} EFI_GET_PLATFORM_HOOK_MODE;


//<AMI_PHDR_START>
//----------------------------------------------------------------------------
// Name:    EFI_LEGACY_BIOS_PLATFORM_HOOKS
//
// Description: Allows platform to perform any required action after a LegacyBios
//              operation.
// Input:       
//  DeviceHandle    List of PCI devices in the system.
//  ShadowAddress   First free OpROM area, after other OpROMs have been dispatched.
//  Compatibility16Table    Pointer to the Compatibility16 Table.
//  AdditionalData          Pointer to additional data returned - mode specific.
//
// Output:
//  EFI_SUCCESS     The operation performed successfully.
//  EFI_UNSUPPORTED Mode is not supported on this platform.
//  EFI_SUCCESS     Mode specific.
//
//----------------------------------------------------------------------------
//<AMI_PHDR_END>
struct _EFI_COMPATIBILITY16_TABLE;
typedef
EFI_STATUS
(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_HOOKS) (
  IN  EFI_LEGACY_BIOS_PLATFORM_PROTOCOL *This,
  IN  EFI_GET_PLATFORM_HOOK_MODE        Mode,
  IN  UINT16                            Type,
  IN  EFI_HANDLE                        OPTIONAL DeviceHandle,
  IN OUT UINTN                          OPTIONAL *ShadowAddress,
  IN struct _EFI_COMPATIBILITY16_TABLE  *Compatibility16Table,
  OUT VOID                              OPTIONAL **AdditionalData
  );


//<AMI_PHDR_START>
//----------------------------------------------------------------------------
// Name:    EFI_LEGACY_BIOS_PLATFORM_SMM_INIT
//
// Description: Loads and registers the Compatibility16 handler with the EFI SMM code.
//
// Input:
//  This     Indicates the EFI_LEGACY_BIOS_PLATFORM_PROTOCOL instance.
//  EfiToCompatibility16BootTable    The boot table passed to the Compatibility16.
//
// Output:
//  EFI_SUCCESS         The SMM code loaded.
//  EFI_DEVICE_ERROR    The SMM code failed to load.
//
//----------------------------------------------------------------------------
//<AMI_PHDR_END>

typedef
EFI_STATUS
(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_SMM_INIT) (
  IN  EFI_LEGACY_BIOS_PLATFORM_PROTOCOL   *This,
  IN  VOID                                *EfiToCompatibility16BootTable
  );


//<AMI_SHDR_START>
//----------------------------------------------------------------------------
// Name:    EFI_GET_PLATFORM_HANDLE_MODE
//
// Description: Mode definitions for EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_HANDLE
//
//----------------------------------------------------------------------------
//<AMI_SHDR_END>

typedef enum {
  EfiGetPlatformVgaHandle       = 0,
  EfiGetPlatformIdeHandle       = 1,
  EfiGetPlatformIsaBusHandle    = 2,
  EfiGetPlatformUsbHandle       = 3
} EFI_GET_PLATFORM_HANDLE_MODE;


//<AMI_PHDR_START>
//----------------------------------------------------------------------------
// Name:    EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_HANDLE
//
// Description: Returns a buffer of handles for the requested subfunction.
//
// Input:
//  This    Indicates the EFI_LEGACY_BIOS_PLATFORM_PROTOCOL instance.
//  Mode    Specifies what handle to return.
//              GetVgaHandle
//              GetIdeHandle
//              GetIsaBusHandle
//              GetUsbHandle
//  Type            Handle Modifier - Mode specific
//  HandleBuffer    Pointer to buffer containing all Handles matching the specified criteria.
//                      Handles are sorted in priority order. Type EFI_HANDLE is defined in
//                      InstallProtocolInterface() in the EFI 1.10 Specification.
//  HandleCount     Number of handles in HandleBuffer.
//  AdditionalData  Pointer to additional data returned - mode specific..
//
// Output:
//  EFI_SUCCESS The handle is valid.
//  EFI_UNSUPPORTED Mode is not supported on this platform.
//  EFI_NOT_FOUND   The handle is not known.
//
//----------------------------------------------------------------------------
//<AMI_PHDR_END>

typedef
EFI_STATUS
(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_HANDLE) (
  IN  EFI_LEGACY_BIOS_PLATFORM_PROTOCOL     *This,
  IN  EFI_GET_PLATFORM_HANDLE_MODE          Mode,
  IN  UINT16                                Type,
  OUT EFI_HANDLE                            **HandleBuffer,
  OUT UINTN                                 *HandleCount,
  OUT VOID                                  OPTIONAL **AdditionalData
  );


//<AMI_SHDR_START>
//----------------------------------------------------------------------------
// Name:    EFI_GET_PLATFORM_INFO_MODE
//
// Description: Mode definitions for EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_INFO
//
//----------------------------------------------------------------------------
//<AMI_SHDR_END>
typedef enum {
  EfiGetPlatformBinaryMpTable       = 0,
  EfiGetPlatformBinaryOemIntData    = 1,
  EfiGetPlatformBinaryOem16Data     = 2,
  EfiGetPlatformBinaryOem32Data     = 3,
  EfiGetPlatformBinaryTpmBinary     = 4,
  EfiGetPlatformBinarySystemRom     = 5,
  EfiGetPlatformPciExpressBase      = 6,
  EfiGetPlatformPmmSize             = 7,
  EfiGetPlatformEndRomShadowAddr    = 8,
  EfiGetPlatformOpromVideoMode      = 9,
  EfiGetPlatformIntSaveRestoreTable = 10,
  EfiGetPlatformPciIrqMask          = 11,
  EfiGetPlatformGateA20Information  = 12,
  EfiGetPlatformNmiInformation      = 13,
  EfiGetBcvSkipDeviceList           = 14,
} EFI_GET_PLATFORM_INFO_MODE;


//<AMI_PHDR_START>
//----------------------------------------------------------------------------
// Name:    EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_INFO
//
// Description: Finds the binary data or other platform information.
//              Refer to the subfunctions for additional information.
//
// Input:
//  This    Indicates the EFI_LEGACY_BIOS_PLATFORM_PROTOCOL instance.
//  Mode    Specifies what data to return:
//                  GetMpTable
//                  GetOemIntData
//                  GetOem16Data
//                  GetOem32Data
//                  GetTpmBinary
//                  GetSystemRom
//                  GetPciExpressBase
//                  GetPmmSize
//                  GetPlatformEndRomShadowAddr
//                  EfiGetOpromVideoSwitchingMode
//                  EfiGetInterruptSaveRestoreTable
//
//  Table       Pointer to OEM legacy 16-bit code or data.
//  TableSize   Size of data.
//  Location    Location to place table. 0x00 - Either 0xE0000 or 0xF0000 64 KB blocks.
//                  Bit 0 = 1 0xF0000 64 KB block.
//                  Bit 1 = 1 0xE0000 64 KB block.
//                  Note: Multiple bits can be set.
//  Alignment   Bit-mapped address alignment granularity. The first nonzero bit from the
//                  right is the address granularity.
//  LegacySegment   Segment where EfiCompatibility code will place the table or data.
//  LegacyOffset    Offset where EfiCompatibility code will place the table or data.
//
// Output:
//      EFI_SUCCESS     The data was returned successfully.
//      EFI_UNSUPPORTED Mode is not supported on this platform.
//      EFI_NOT_FOUND   Binary image not found.
//
// Referrals: EFI_GET_PLATFORM_INFO_MODE
//
//----------------------------------------------------------------------------
//<AMI_PHDR_END>

typedef
EFI_STATUS
(EFIAPI *EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_INFO) (
  IN  EFI_LEGACY_BIOS_PLATFORM_PROTOCOL           *This,
  IN  EFI_GET_PLATFORM_INFO_MODE                  Mode,
  IN OUT VOID                                     **Table,
  IN OUT UINTN                                    *TableSize,
  IN OUT UINTN                                    *Location,
  OUT UINTN                                       *Alignment,
  IN UINT16                                       LegacySegment,
  IN UINT16                                       LegacyOffset
  );


//<AMI_SHDR_START>
//----------------------------------------------------------------------------
// Name:        EFI_LEGACY_BIOS_PLATFORM_PROTOCOL
//
// Description: The EFI_LEGACY_BIOS_PLATFORM_PROTOCOL is used to abstract the
//              platform-specific traditional hardware and or policy decisions
//              from the generic EfiCompatibility code.
// Fields:
//  GetPlatformInfo EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_INFO Gets binary data or other platform information.
//  GetPlatformHandle EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_HANDLE Returns a buffer of all handles matching the requested subfunction.
//  SmmInit EFI_LEGACY_BIOS_PLATFORM_SMM_INIT Loads and initializes the traditional BIOS SMM handler.
//  PlatformHooks EFI_LEGACY_BIOS_PLATFORM_HOOKS Allows platform to perform any required actions after a LegacyBios operation.
//  GetRoutingTable EFI_LEGACY_BIOS_PLATFORM_GET_ROUTING_TABLE Gets $PIR table.
//  TranslatePirq   EFI_LEGACY_BIOS_PLATFORM_TRANSLATE_PIRQ Translates the given PIRQ to the final value after traversing any PCI bridges.
//  PrepareToBoot   EFI_LEGACY_BIOS_PLATFORM_PREPARE_TO_BOOT Final platform function before the system attempts to boot to a traditional OS.
//
//----------------------------------------------------------------------------
//<AMI_SHDR_END>

typedef struct _EFI_LEGACY_BIOS_PLATFORM_PROTOCOL {
  EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_INFO   GetPlatformInfo;
  EFI_LEGACY_BIOS_PLATFORM_GET_PLATFORM_HANDLE GetPlatformHandle;
  EFI_LEGACY_BIOS_PLATFORM_SMM_INIT            SmmInit;
  EFI_LEGACY_BIOS_PLATFORM_HOOKS               PlatformHooks;
  EFI_LEGACY_BIOS_PLATFORM_GET_ROUTING_TABLE   GetRoutingTable;
  EFI_LEGACY_BIOS_PLATFORM_TRANSLATE_PIRQ      TranslatePirq;
  EFI_LEGACY_BIOS_PLATFORM_PREPARE_TO_BOOT     PrepareToBoot;
} EFI_LEGACY_BIOS_PLATFORM_PROTOCOL;

#pragma pack()

/****** DO NOT WRITE BELOW THIS LINE *******/
#endif // #ifndef GUID_VARIABLE_DEFINITION
#ifdef __cplusplus
}
#endif
#endif

//**********************************************************************
//**********************************************************************
//**                                                                  **
//**        (C)Copyright 1985-2010, American Megatrends, Inc.         **
//**                                                                  **
//**                       All Rights Reserved.                       **
//**                                                                  **
//**           5555 Oakbrook Pkwy, Suite 200, Norcross, GA 30093      **
//**                                                                  **
//**                       Phone: (770)-246-8600                      **
//**                                                                  **
//**********************************************************************
//**********************************************************************