summaryrefslogtreecommitdiff
path: root/Core/Tiano.h
blob: dec5019722dbac54409db152b205e5372569e698 (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
//**********************************************************************
//**********************************************************************
//**                                                                  **
//**        (C)Copyright 1985-2006, American Megatrends, Inc.         **
//**                                                                  **
//**                       All Rights Reserved.                       **
//**                                                                  **
//**             6145-F Northbelt Pkwy, Norcross, GA 30071            **
//**                                                                  **
//**                       Phone: (770)-246-8600                      **
//**                                                                  **
//**********************************************************************
//**********************************************************************

//**********************************************************************
// $Header: /Alaska/SOURCE/Core/EDK/Tiano.h 7     5/27/11 5:44p Felixp $
//
// $Revision: 7 $
//
// $Date: 5/27/11 5:44p $
//**********************************************************************
// Revision History
// ----------------
// $Log: /Alaska/SOURCE/Core/EDK/Tiano.h $
// 
// 7     5/27/11 5:44p Felixp
// EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL_GUID definition is removed
// (the macro is now defined in the FirmwareVolumeBlock.h
// 
// 6     9/22/10 7:09p Felixp
// Bug fix: PEI_REPORT_STATUS_CODE was not properly defined.
// 
// 5     4/25/07 11:31a Felixp
// 
// 4     10/07/06 10:23a Felixp
// UIEFI2.0 support.
// Updated to EDK 20060904
// 
// 3     8/24/06 9:40a Felixp
// x64 support
// 
// 2     5/20/06 9:38p Felixp
// 
// 1     5/19/06 11:28p Felixp
// 
// 1     3/13/06 1:57a Felixp
// 
//**********************************************************************
//<AMI_FHDR_START>
//
// Name:	Tiano.h
//
// Description:	
//
//<AMI_FHDR_END>
//**********************************************************************
#ifndef __TIANO__H__
#define __TIANO__H__
#ifdef __cplusplus
extern "C" {
#endif
#include <EFI.h>
#include <DXE.h>
#include <StatusCodes.h>
#include <Protocol/DevicePath.h>

//from EfiStdArg.h
#define _EFI_INT_SIZE_OF(n) ((sizeof (n) + sizeof (UINTN) - 1) &~(sizeof (UINTN) - 1))

//
// Also support coding convention rules for var arg macros
//
#ifndef VA_START

typedef CHAR8 *VA_LIST;
#define VA_START(ap, v) (ap = (VA_LIST) & (v) + _EFI_INT_SIZE_OF (v))
#define VA_ARG(ap, t)   (*(t *) ((ap += _EFI_INT_SIZE_OF (t)) - _EFI_INT_SIZE_OF (t)))
#define VA_END(ap)      (ap = (VA_LIST) 0)

#endif

#include <EfiDebug.h>

#define EFI_STRINGIZE(a)            #a

#define EFI_PROTOCOL_DEFINITION(a)  EFI_STRINGIZE (Protocol/a.h)
#define EFI_GUID_DEFINITION(a)      EFI_STRINGIZE (Guid/a.h)
#define EFI_ARCH_PROTOCOL_DEFINITION(a) EFI_STRINGIZE (Protocol/a.h)

#define EFI_PROTOCOL_PRODUCER(a)    EFI_PROTOCOL_DEFINITION (a)
#define EFI_PROTOCOL_CONSUMER(a)    EFI_PROTOCOL_DEFINITION (a)
#define EFI_PROTOCOL_DEPENDENCY(a)  EFI_PROTOCOL_DEFINITION (a)

#define EFI_PPI_DEFINITION(a)           EFI_STRINGIZE (Ppi/a.h)
#define EFI_PPI_PRODUCER(a)             EFI_PPI_DEFINITION (a)
#define EFI_PPI_CONSUMER(a)             EFI_PPI_DEFINITION (a)
#define EFI_PPI_DEPENDENCY(a)           EFI_PPI_DEFINITION (a)

#define CONST const
#define STATIC    static
#define VOLATILE  volatile

#define EFI_BOOTSERVICE
#define EFI_RUNTIMESERVICE
#define EFI_BOOTSERVICE11
#define EFI_DXESERVICE
//
//  ALIGN_POINTER - aligns a pointer to the lowest boundry
//
#define ALIGN_POINTER(p, s) ((VOID *) (p + ((s - ((UINTN) p)) & (s - 1))))

//
//  ALIGN_VARIABLE - aligns a variable up to the next natural boundry for int size of a processor
//
#define ALIGN_VARIABLE(Value, Adjustment) \
  (UINTN) Adjustment = 0; \
  if ((UINTN) Value % sizeof (UINTN)) { \
    (UINTN) Adjustment = sizeof (UINTN) - ((UINTN) Value % sizeof (UINTN)); \
  } \
  Value = (UINTN) Value + (UINTN) Adjustment

//
//  EFI_FIELD_OFFSET - returns the byte offset to a field within a structure
//
#define EFI_FIELD_OFFSET(TYPE,Field) ((UINTN)(&(((TYPE *) 0)->Field)))

//
//  CONTAINING_RECORD - returns a pointer to the structure
//      from one of it's elements.
//
#define _CR(Record, TYPE, Field)  ((TYPE *) ((CHAR8 *) (Record) - (CHAR8 *) &(((TYPE *) 0)->Field)))

//
// Define macros to build data structure signatures from characters.
//
#define EFI_SIGNATURE_16(A, B)        ((A) | (B << 8))
#define EFI_SIGNATURE_32(A, B, C, D)  (EFI_SIGNATURE_16 (A, B) | (EFI_SIGNATURE_16 (C, D) << 16))
#define EFI_SIGNATURE_64(A, B, C, D, E, F, G, H) \
    (EFI_SIGNATURE_32 (A, B, C, D) | ((UINT64) (EFI_SIGNATURE_32 (E, F, G, H)) << 32))

//AMI <--> EDK mapping
#define EFI_LOADED_IMAGE_INFORMATION_REVISION EFI_LOADED_IMAGE_PROTOCOL_REVISION
typedef DXE_SERVICES EFI_DXE_SERVICES;
#define EFI_TPL_APPLICATION TPL_APPLICATION
#define EFI_TPL_CALLBACK TPL_CALLBACK
#define EFI_TPL_NOTIFY TPL_NOTIFY
#define EFI_TPL_HIGH_LEVEL TPL_HIGH_LEVEL

#define END_DEVICE_PATH_TYPE 0x7F
#define END_ENTIRE_DEVICE_PATH_SUBTYPE 0xFF
#define EFI_EVENT_EFI_SIGNAL_MASK               0x000000FF
#define EFI_EVENT_EFI_SIGNAL_MAX                4
#define EFI_TPL_DRIVER      6
#define EFI_DXE_SERVICES_SIGNATURE DXE_SERVICES_SIGNATURE
#define EFI_DXE_SERVICES_REVISION DXE_SERVICES_REVISION
#define EFI_DXE_ENTRY_POINT(EntryPoint)
#ifndef EFI_DEADLOOP
#define EFI_DEADLOOP() { volatile UINTN __DeadLoopVar__ = 1; while (__DeadLoopVar__); }
#endif
#define EFI_BREAKPOINT()  EFI_DEADLOOP()
#define EFI_BAD_POINTER          0xAFAFAFAF
//This is defined in FirmwareValume.h but has nothing to do with the protocol.
//It should be in DxeMain internal header
#define FV_DEVICE_SIGNATURE EFI_SIGNATURE_32 ('_', 'F', 'V', '_')
#define EFI_FVH_SIGNATURE FV_SIGNATURE
#define EFI_FV_BLOCK_MAP_ENTRY FvBlockMapEntry
//This is define in TianoType.h, however, this is not in DXECIS
//
// attributes for reserved memory before it is promoted to system memory
//
#define EFI_MEMORY_PRESENT      0x0100000000000000
#define EFI_MEMORY_INITIALIZED  0x0200000000000000
#define EFI_MEMORY_TESTED       0x0400000000000000

//
// range for memory mapped port I/O on IPF
//
#define EFI_MEMORY_PORT_IO  0x4000000000000000
//
// A pointer to a function in IPF points to a plabel.
//
typedef struct {
  UINT64  EntryPoint;
  UINT64  GP;
} EFI_PLABEL;
////////////////////////////////////////////////
//defined for every CPU architecture
// Maximum legal IA-32 address
#define EFI_MAX_ADDRESS   0xFFFFFFFF
////////////////////////////////////////////////
//from AmiLib.h
#define EFI_PAGE_MASK   (EFI_PAGE_SIZE - 1)
#define EFI_PAGE_SHIFT  12
#define EFI_SIZE_TO_PAGES(s)  \
    ( (((UINTN)(s)) >> EFI_PAGE_SHIFT) + ((((UINTN)(s)) & EFI_PAGE_MASK) ? 1 : 0) )

#define EFI_PAGES_TO_SIZE(p)   ( ((UINTN)(p)) << EFI_PAGE_SHIFT)

//from EfiDevicePath.h
#define EFI_DP_TYPE_MASK                    0x7F
#define EFI_DP_TYPE_UNPACKED                0x80
#define END_INSTANCE_DEVICE_PATH_SUBTYPE    0x01

#define DP_IS_END_TYPE(a)
#define DP_IS_END_SUBTYPE(a)        ( ((a)->SubType == END_ENTIRE_DEVICE_PATH_SUBTYPE )

#define DevicePathType(a)           ( ((a)->Type) & EFI_DP_TYPE_MASK )
#define DevicePathSubType(a)        ( (a)->SubType )
#define DevicePathNodeLength(a)     ( ((a)->Length[0]) | ((a)->Length[1] << 8) )

#define IsDevicePathEndType(a)      ( DevicePathType(a) == END_DEVICE_PATH_TYPE )
#define IsDevicePathEndSubType(a)   ( (a)->SubType == END_ENTIRE_DEVICE_PATH_SUBTYPE )
#define IsDevicePathEnd(a)          ( IsDevicePathEndType(a) && IsDevicePathEndSubType(a) )
#define NextDevicePathNode(a)       ( (EFI_DEVICE_PATH_PROTOCOL *) ( ((UINT8 *) (a)) + DevicePathNodeLength(a)))

#define SetDevicePathNodeLength(a,l) {                \
          (a)->Length[0] = (UINT8) (l);               \
          (a)->Length[1] = (UINT8) ((l) >> 8);        \
          }

#define SetDevicePathEndNode(a)  {                       \
          (a)->Type = END_DEVICE_PATH_TYPE;              \
          (a)->SubType = END_ENTIRE_DEVICE_PATH_SUBTYPE; \
          (a)->Length[0] = sizeof(EFI_DEVICE_PATH_PROTOCOL);      \
          (a)->Length[1] = 0;                            \
          }

//from DevicePath.h
#define EFI_END_ENTIRE_DEVICE_PATH            0x7f
#define EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE    0xff
#define EFI_END_INSTANCE_DEVICE_PATH          0x01
#define EFI_END_DEVICE_PATH_LENGTH            (sizeof (EFI_DEVICE_PATH_PROTOCOL))

#define EfiDevicePathNodeLength(a)            (((a)->Length[0]) | ((a)->Length[1] << 8))

#define EfiNextDevicePathNode(a)              ((EFI_DEVICE_PATH_PROTOCOL *) (((UINT8 *) (a)) + EfiDevicePathNodeLength (a)))

#define EfiDevicePathType(a)                  (((a)->Type) & 0x7f)
#define EfiIsDevicePathEndType(a)             (EfiDevicePathType (a) == 0x7f)

#define EfiIsDevicePathEndSubType(a)          ((a)->SubType == EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE)
#define EfiIsDevicePathEndInstanceSubType(a)  ((a)->SubType == EFI_END_INSTANCE_DEVICE_PATH)

#define EfiIsDevicePathEnd(a)                 (EfiIsDevicePathEndType (a) && EfiIsDevicePathEndSubType (a))
#define EfiIsDevicePathEndInstance(a)         (EfiIsDevicePathEndType (a) && EfiIsDevicePathEndInstanceSubType (a))

//EfiTypes.h
#define NULL_HANDLE ((VOID *) 0)
//defined in Protocol/SimpleFileSystem - not in efi spec.
//protocol name does not match uefi2.0 (EFI_FILE)
#include <Protocol/SimpleFileSystem.h>
typedef EFI_FILE_PROTOCOL *EFI_FILE_HANDLE;

//EfiApi.h
#define NextMemoryDescriptor(_Ptr, _Size)   ((EFI_MEMORY_DESCRIPTOR *) (((UINT8 *) (_Ptr)) + (_Size)))
//EfiImageFormat.h
#define SECTION_SIZE(SectionHeaderPtr) \
    ((UINT32) (*((UINT32 *) ((EFI_COMMON_SECTION_HEADER *) SectionHeaderPtr)->Size) & 0x00ffffff))
#define EFI_CUSTOMIZED_COMPRESSION  0x02
//
// Bit values for AuthenticationStatus
//
#define EFI_AGGREGATE_AUTH_STATUS_PLATFORM_OVERRIDE 0x000001
#define EFI_AGGREGATE_AUTH_STATUS_IMAGE_SIGNED      0x000002
#define EFI_AGGREGATE_AUTH_STATUS_NOT_TESTED        0x000004
#define EFI_AGGREGATE_AUTH_STATUS_TEST_FAILED       0x000008
#define EFI_AGGREGATE_AUTH_STATUS_ALL               0x00000f

#define EFI_LOCAL_AUTH_STATUS_PLATFORM_OVERRIDE     0x010000
#define EFI_LOCAL_AUTH_STATUS_IMAGE_SIGNED          0x020000
#define EFI_LOCAL_AUTH_STATUS_NOT_TESTED            0x040000
#define EFI_LOCAL_AUTH_STATUS_TEST_FAILED           0x080000
#define EFI_LOCAL_AUTH_STATUS_ALL                   0x0f0000
//////////////////////////// PEI //////////////////////////
#include <Pei.h>
#include <PeiDebug.h>
#include <PeiHob.h>

typedef struct {
  UINTN                   BootFirmwareVolume;
  UINTN                   SizeOfCacheAsRam;
  EFI_PEI_PPI_DESCRIPTOR  *DispatchTable;
} EFI_PEI_STARTUP_DESCRIPTOR;

#ifdef EFI_PEI_REPORT_STATUS_CODE_ON
#define PEI_REPORT_STATUS_CODE_CODE(Code) Code
#define PEI_REPORT_STATUS_CODE(PeiServices, CodeType, Value, Instance, CallerId, Data) \
          (*PeiServices)->ReportStatusCode (PeiServices, CodeType, Value, Instance, CallerId, Data)
#else
#define PEI_REPORT_STATUS_CODE_CODE(Code)
#define PEI_REPORT_STATUS_CODE(PeiServices, CodeType, Value, Instance, CallerId, Data)
#endif
#define EFI_PEI_CORE_ENTRY_POINT(EntryPoint)

#define PEI_RESET_PPI EFI_PEI_RESET_PPI

#define EFI_DXE_SERVICES_TABLE_GUID DXE_SERVICES_TABLE_GUID
#define EFI_HOB_LIST_GUID HOB_LIST_GUID
#define EFI_HOB_TYPE_PEI_MEMORY_POOL EFI_HOB_TYPE_MEMORY_POOL

//Compatibility
// PPI's
#define PEI_CPU_IO_PPI_GUID EFI_PEI_CPU_IO_PPI_INSTALLED_GUID
#define PEI_CPU_IO_PPI EFI_PEI_CPU_IO_PPI
#define PEI_PCI_CFG_PPI_GUID EFI_PEI_PCI_CFG_PPI_INSTALLED_GUID
#define PEI_PCI_CFG_PPI EFI_PEI_PCI_CFG_PPI
#define PEI_SMBUS_PPI_GUID EFI_PEI_SMBUS_PPI_GUID
#define PEI_SMBUS_PPI EFI_PEI_SMBUS_PPI
#define PEI_STALL_PPI_GUID EFI_PEI_STALL_PPI_GUID
#define PEI_STALL_PPI EFI_PEI_STALL_PPI
#define PEI_STATUS_CODE_PPI_GUID EFI_PEI_REPORT_PROGRESS_CODE_PPI_GUID
#define PEI_STATUS_CODE_PPI EFI_PEI_PROGRESS_CODE_PPI
#define PEI_READ_ONLY_VARIABLE_ACCESS_PPI_GUID EFI_PEI_READ_ONLY_VARIABLE_PPI_GUID
#define PEI_READ_ONLY_VARIABLE_PPI EFI_PEI_READ_ONLY_VARIABLE_PPI
#define PEI_RESET_PPI_GUID EFI_PEI_RESET_PPI_GUID
#define PEI_RESET_PPI EFI_PEI_RESET_PPI
#define PEI_BOOT_SCRIPT_EXECUTER_PPI_GUID EFI_PEI_BOOT_SCRIPT_EXECUTER_PPI_GUID
#define PEI_BOOT_SCRIPT_EXECUTER_PPI EFI_PEI_BOOT_SCRIPT_EXECUTER_PPI
#define PEI_S3_RESUME_PPI_GUID EFI_PEI_S3_RESUME_PPI_GUID
#define PEI_S3_RESUME_PPI EFI_PEI_S3_RESUME_PPI
#define PEI_RECOVERY_MODULE_INTERFACE_PPI EFI_PEI_RECOVERY_MODULE_PPI_GUID 
#define PEI_RECOVERY_MODULE_INTERFACE EFI_PEI_RECOVERY_MODULE_PPI
// Protocols
#define EFI_INCOMPATIBLE_PCI_DEVICE_SUPPORT EFI_INCOMPATIBLE_PCI_DEVICE_SUPPORT_PROTOCOL
#define EFI_SIMPLE_TEXT_OUT_PROTOCOL_GUID EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL_GUID
#define EFI_SIMPLE_TEXT_OUT_PROTOCOL EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL
#define EFI_SIMPLE_TEXT_IN_PROTOCOL_GUID EFI_SIMPLE_TEXT_INPUT_PROTOCOL_GUID
#define EFI_SIMPLE_TEXT_IN_PROTOCOL EFI_SIMPLE_TEXT_INPUT_PROTOCOL
#define LOAD_FILE_PROTOCOL_GUID EFI_LOAD_FILE_PROTOCOL_GUID
#define EFI_EBC_INTERPRETER_PROTOCOL_GUID EFI_EBC_PROTOCOL_GUID 
/****** DO NOT WRITE BELOW THIS LINE *******/
#ifdef __cplusplus
}
#endif
#endif
//**********************************************************************
//**********************************************************************
//**                                                                  **
//**        (C)Copyright 1985-2006, American Megatrends, Inc.         **
//**                                                                  **
//**                       All Rights Reserved.                       **
//**                                                                  **
//**             6145-F Northbelt Pkwy, Norcross, GA 30071            **
//**                                                                  **
//**                       Phone: (770)-246-8600                      **
//**                                                                  **
//**********************************************************************
//**********************************************************************