Imported Upstream version 3.0
[platform/upstream/gnu-efi.git] / inc / efidef.h
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
160 // physical memory protection on range 
161 #define EFI_MEMORY_WP           0x0000000000001000
162 #define EFI_MEMORY_RP           0x0000000000002000
163 #define EFI_MEMORY_XP           0x0000000000004000
164
165 // range requires a runtime mapping
166 #define EFI_MEMORY_RUNTIME      0x8000000000000000
167
168 #define EFI_MEMORY_DESCRIPTOR_VERSION  1
169 typedef struct {
170     UINT32                          Type;           // Field size is 32 bits followed by 32 bit pad
171     UINT32                          Pad;
172     EFI_PHYSICAL_ADDRESS            PhysicalStart;  // Field size is 64 bits
173     EFI_VIRTUAL_ADDRESS             VirtualStart;   // Field size is 64 bits
174     UINT64                          NumberOfPages;  // Field size is 64 bits
175     UINT64                          Attribute;      // Field size is 64 bits
176 } EFI_MEMORY_DESCRIPTOR;
177
178 //
179 // International Language
180 //
181
182 typedef UINT8   ISO_639_2;
183 #define ISO_639_2_ENTRY_SIZE    3
184
185 //
186 //
187 //
188
189 #define EFI_PAGE_SIZE   4096
190 #define EFI_PAGE_MASK   0xFFF
191 #define EFI_PAGE_SHIFT  12
192
193 #define EFI_SIZE_TO_PAGES(a)  \
194     ( ((a) >> EFI_PAGE_SHIFT) + ((a) & EFI_PAGE_MASK ? 1 : 0) )
195
196 #endif