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