1 #ifndef _EFI_DEF_H
2 #define _EFI_DEF_H
3 
4 /*++
5 
6 Copyright (c) 1998  Intel Corporation
7 
8 Module Name:
9 
10     efidef.h
11 
12 Abstract:
13 
14     EFI definitions
15 
16 
17 
18 
19 Revision History
20 
21 --*/
22 
23 typedef UINT16          CHAR16;
24 typedef UINT8           CHAR8;
25 typedef UINT8           BOOLEAN;
26 
27 #ifndef TRUE
28     #define TRUE    ((BOOLEAN) 1)
29     #define FALSE   ((BOOLEAN) 0)
30 #endif
31 
32 #ifndef NULL
33     #define NULL    ((VOID *) 0)
34 #endif
35 
36 typedef UINTN           EFI_STATUS;
37 typedef UINT64          EFI_LBA;
38 typedef UINTN           EFI_TPL;
39 typedef VOID            *EFI_HANDLE;
40 typedef VOID            *EFI_EVENT;
41 
42 
43 //
44 // Prototype argument decoration for EFI parameters to indicate
45 // their direction
46 //
47 // IN - argument is passed into the function
48 // OUT - argument (pointer) is returned from the function
49 // OPTIONAL - argument is optional
50 //
51 
52 #ifndef IN
53     #define IN
54     #define OUT
55     #define OPTIONAL
56 #endif
57 
58 
59 //
60 // A GUID
61 //
62 
63 typedef struct {
64     UINT32  Data1;
65     UINT16  Data2;
66     UINT16  Data3;
67     UINT8   Data4[8];
68 } EFI_GUID;
69 
70 
71 //
72 // Time
73 //
74 
75 typedef struct {
76     UINT16      Year;       // 1998 - 20XX
77     UINT8       Month;      // 1 - 12
78     UINT8       Day;        // 1 - 31
79     UINT8       Hour;       // 0 - 23
80     UINT8       Minute;     // 0 - 59
81     UINT8       Second;     // 0 - 59
82     UINT8       Pad1;
83     UINT32      Nanosecond; // 0 - 999,999,999
84     INT16       TimeZone;   // -1440 to 1440 or 2047
85     UINT8       Daylight;
86     UINT8       Pad2;
87 } EFI_TIME;
88 
89 // Bit definitions for EFI_TIME.Daylight
90 #define EFI_TIME_ADJUST_DAYLIGHT    0x01
91 #define EFI_TIME_IN_DAYLIGHT        0x02
92 
93 // Value definition for EFI_TIME.TimeZone
94 #define EFI_UNSPECIFIED_TIMEZONE    0x07FF
95 
96 
97 
98 //
99 // Networking
100 //
101 
102 typedef struct {
103     UINT8                   Addr[4];
104 } EFI_IPv4_ADDRESS;
105 
106 typedef struct {
107     UINT8                   Addr[16];
108 } EFI_IPv6_ADDRESS;
109 
110 typedef struct {
111     UINT8                   Addr[32];
112 } EFI_MAC_ADDRESS;
113 
114 //
115 // Memory
116 //
117 
118 typedef UINT64          EFI_PHYSICAL_ADDRESS;
119 typedef UINT64          EFI_VIRTUAL_ADDRESS;
120 
121 typedef enum {
122     AllocateAnyPages,
123     AllocateMaxAddress,
124     AllocateAddress,
125     MaxAllocateType
126 } EFI_ALLOCATE_TYPE;
127 
128 //Preseve the attr on any range supplied.
129 //ConventialMemory must have WB,SR,SW when supplied.
130 //When allocating from ConventialMemory always make it WB,SR,SW
131 //When returning to ConventialMemory always make it WB,SR,SW
132 //When getting the memory map, or on RT for runtime types
133 
134 
135 typedef enum {
136     EfiReservedMemoryType,
137     EfiLoaderCode,
138     EfiLoaderData,
139     EfiBootServicesCode,
140     EfiBootServicesData,
141     EfiRuntimeServicesCode,
142     EfiRuntimeServicesData,
143     EfiConventionalMemory,
144     EfiUnusableMemory,
145     EfiACPIReclaimMemory,
146     EfiACPIMemoryNVS,
147     EfiMemoryMappedIO,
148     EfiMemoryMappedIOPortSpace,
149     EfiPalCode,
150     EfiMaxMemoryType
151 } EFI_MEMORY_TYPE;
152 
153 // possible caching types for the memory range
154 #define EFI_MEMORY_UC           0x0000000000000001
155 #define EFI_MEMORY_WC           0x0000000000000002
156 #define EFI_MEMORY_WT           0x0000000000000004
157 #define EFI_MEMORY_WB           0x0000000000000008
158 #define EFI_MEMORY_UCE          0x0000000000000010
159 #define EFI_MEMORY_WP           0x0000000000001000
160 
161 // physical memory protection on range
162 #define EFI_MEMORY_RP           0x0000000000002000
163 #define EFI_MEMORY_XP           0x0000000000004000
164 #define EFI_MEMORY_RO           0x0000000000020000
165 
166 #define EFI_MEMORY_NV           0x0000000000008000
167 #define EFI_MEMORY_MORE_RELIABLE 0x0000000000010000
168 
169 // range requires a runtime mapping
170 #define EFI_MEMORY_RUNTIME      0x8000000000000000
171 
172 #define EFI_MEMORY_DESCRIPTOR_VERSION  1
173 typedef struct {
174     UINT32                          Type;           // Field size is 32 bits followed by 32 bit pad
175     UINT32                          Pad;
176     EFI_PHYSICAL_ADDRESS            PhysicalStart;  // Field size is 64 bits
177     EFI_VIRTUAL_ADDRESS             VirtualStart;   // Field size is 64 bits
178     UINT64                          NumberOfPages;  // Field size is 64 bits
179     UINT64                          Attribute;      // Field size is 64 bits
180 } EFI_MEMORY_DESCRIPTOR;
181 
182 //
183 // International Language
184 //
185 
186 typedef UINT8   ISO_639_2;
187 #define ISO_639_2_ENTRY_SIZE    3
188 
189 //
190 //
191 //
192 
193 #define EFI_PAGE_SIZE   4096
194 #define EFI_PAGE_MASK   0xFFF
195 #define EFI_PAGE_SHIFT  12
196 
197 #define EFI_SIZE_TO_PAGES(a)  \
198     ( ((a) >> EFI_PAGE_SHIFT) + ((a) & EFI_PAGE_MASK ? 1 : 0) )
199 
200 #endif
201