xref: /openbsd-src/sys/stand/efi/include/efidef.h (revision 9593dc34da13a12012033a17061c846c208061c2)
1060fee10Skettenis /* $FreeBSD: head/sys/boot/efi/include/efidef.h 279038 2015-02-20 01:40:55Z imp $ */
2060fee10Skettenis #ifndef _EFI_DEF_H
3060fee10Skettenis #define _EFI_DEF_H
4060fee10Skettenis 
5060fee10Skettenis /*++
6060fee10Skettenis 
7060fee10Skettenis Copyright (c)  1999 - 2002 Intel Corporation. All rights reserved
8060fee10Skettenis This software and associated documentation (if any) is furnished
9060fee10Skettenis under a license and may only be used or copied in accordance
10060fee10Skettenis with the terms of the license. Except as permitted by such
11060fee10Skettenis license, no part of this software or documentation may be
12060fee10Skettenis reproduced, stored in a retrieval system, or transmitted in any
13060fee10Skettenis form or by any means without the express written consent of
14060fee10Skettenis Intel Corporation.
15060fee10Skettenis 
16060fee10Skettenis Module Name:
17060fee10Skettenis 
18060fee10Skettenis     efidef.h
19060fee10Skettenis 
20060fee10Skettenis Abstract:
21060fee10Skettenis 
22060fee10Skettenis     EFI definitions
23060fee10Skettenis 
24060fee10Skettenis 
25060fee10Skettenis 
26060fee10Skettenis 
27060fee10Skettenis Revision History
28060fee10Skettenis 
29060fee10Skettenis --*/
30060fee10Skettenis 
31060fee10Skettenis typedef UINT16          CHAR16;
32060fee10Skettenis typedef UINT8           CHAR8;
33060fee10Skettenis #ifndef ACPI_THREAD_ID		/* ACPI's definitions are fine */
34060fee10Skettenis typedef UINT8           BOOLEAN;
35060fee10Skettenis #endif
36060fee10Skettenis 
37060fee10Skettenis #ifndef TRUE
38060fee10Skettenis     #define TRUE    ((BOOLEAN) 1)
39060fee10Skettenis     #define FALSE   ((BOOLEAN) 0)
40060fee10Skettenis #endif
41060fee10Skettenis 
42060fee10Skettenis #ifndef NULL
43060fee10Skettenis     #define NULL    ((VOID *) 0)
44060fee10Skettenis #endif
45060fee10Skettenis 
46060fee10Skettenis typedef UINTN           EFI_STATUS;
47060fee10Skettenis typedef UINT64          EFI_LBA;
48060fee10Skettenis typedef UINTN           EFI_TPL;
49060fee10Skettenis typedef VOID            *EFI_HANDLE;
50060fee10Skettenis typedef VOID            *EFI_EVENT;
51060fee10Skettenis 
52060fee10Skettenis 
53060fee10Skettenis //
54060fee10Skettenis // Prototype argument decoration for EFI parameters to indicate
55060fee10Skettenis // their direction
56060fee10Skettenis //
57060fee10Skettenis // IN - argument is passed into the function
58060fee10Skettenis // OUT - argument (pointer) is returned from the function
59060fee10Skettenis // OPTIONAL - argument is optional
60060fee10Skettenis //
61060fee10Skettenis 
62060fee10Skettenis #ifndef IN
63060fee10Skettenis     #define IN
64060fee10Skettenis     #define OUT
65060fee10Skettenis     #define OPTIONAL
66060fee10Skettenis #endif
67060fee10Skettenis 
68060fee10Skettenis 
69060fee10Skettenis //
70060fee10Skettenis // A GUID
71060fee10Skettenis //
72060fee10Skettenis 
73060fee10Skettenis typedef struct {
74060fee10Skettenis     UINT32  Data1;
75060fee10Skettenis     UINT16  Data2;
76060fee10Skettenis     UINT16  Data3;
77060fee10Skettenis     UINT8   Data4[8];
78060fee10Skettenis } EFI_GUID;
79060fee10Skettenis 
80060fee10Skettenis 
81060fee10Skettenis //
82060fee10Skettenis // Time
83060fee10Skettenis //
84060fee10Skettenis 
85060fee10Skettenis typedef struct {
86060fee10Skettenis     UINT16      Year;       // 1998 - 20XX
87060fee10Skettenis     UINT8       Month;      // 1 - 12
88060fee10Skettenis     UINT8       Day;        // 1 - 31
89060fee10Skettenis     UINT8       Hour;       // 0 - 23
90060fee10Skettenis     UINT8       Minute;     // 0 - 59
91060fee10Skettenis     UINT8       Second;     // 0 - 59
92060fee10Skettenis     UINT8       Pad1;
93060fee10Skettenis     UINT32      Nanosecond; // 0 - 999,999,999
94060fee10Skettenis     INT16       TimeZone;   // -1440 to 1440 or 2047
95060fee10Skettenis     UINT8       Daylight;
96060fee10Skettenis     UINT8       Pad2;
97060fee10Skettenis } EFI_TIME;
98060fee10Skettenis 
99060fee10Skettenis // Bit definitions for EFI_TIME.Daylight
100060fee10Skettenis #define EFI_TIME_ADJUST_DAYLIGHT    0x01
101060fee10Skettenis #define EFI_TIME_IN_DAYLIGHT        0x02
102060fee10Skettenis 
103060fee10Skettenis // Value definition for EFI_TIME.TimeZone
104060fee10Skettenis #define EFI_UNSPECIFIED_TIMEZONE    0x07FF
105060fee10Skettenis 
106060fee10Skettenis 
107060fee10Skettenis 
108060fee10Skettenis //
109060fee10Skettenis // Networking
110060fee10Skettenis //
111060fee10Skettenis 
112060fee10Skettenis typedef struct {
113060fee10Skettenis     UINT8                   Addr[4];
114060fee10Skettenis } EFI_IPv4_ADDRESS;
115060fee10Skettenis 
116060fee10Skettenis typedef struct {
117060fee10Skettenis     UINT8                   Addr[16];
118060fee10Skettenis } EFI_IPv6_ADDRESS;
119060fee10Skettenis 
120060fee10Skettenis typedef struct {
121060fee10Skettenis     UINT8                   Addr[32];
122060fee10Skettenis } EFI_MAC_ADDRESS;
123060fee10Skettenis 
124060fee10Skettenis //
125060fee10Skettenis // Memory
126060fee10Skettenis //
127060fee10Skettenis 
128060fee10Skettenis typedef UINT64          EFI_PHYSICAL_ADDRESS;
129060fee10Skettenis typedef UINT64          EFI_VIRTUAL_ADDRESS;
130060fee10Skettenis 
131060fee10Skettenis typedef enum {
132060fee10Skettenis     AllocateAnyPages,
133060fee10Skettenis     AllocateMaxAddress,
134060fee10Skettenis     AllocateAddress,
135060fee10Skettenis     MaxAllocateType
136060fee10Skettenis } EFI_ALLOCATE_TYPE;
137060fee10Skettenis 
138*9593dc34Smglocker //Preserve the attr on any range supplied.
139060fee10Skettenis //ConventialMemory must have WB,SR,SW when supplied.
140060fee10Skettenis //When allocating from ConventialMemory always make it WB,SR,SW
141060fee10Skettenis //When returning to ConventialMemory always make it WB,SR,SW
142060fee10Skettenis //When getting the memory map, or on RT for runtime types
143060fee10Skettenis 
144060fee10Skettenis 
145060fee10Skettenis typedef enum {
146060fee10Skettenis     EfiReservedMemoryType,
147060fee10Skettenis     EfiLoaderCode,
148060fee10Skettenis     EfiLoaderData,
149060fee10Skettenis     EfiBootServicesCode,
150060fee10Skettenis     EfiBootServicesData,
151060fee10Skettenis     EfiRuntimeServicesCode,
152060fee10Skettenis     EfiRuntimeServicesData,
153060fee10Skettenis     EfiConventionalMemory,
154060fee10Skettenis     EfiUnusableMemory,
155060fee10Skettenis     EfiACPIReclaimMemory,
156060fee10Skettenis     EfiACPIMemoryNVS,
157060fee10Skettenis     EfiMemoryMappedIO,
158060fee10Skettenis     EfiMemoryMappedIOPortSpace,
159060fee10Skettenis     EfiPalCode,
160060fee10Skettenis     EfiMaxMemoryType
161060fee10Skettenis } EFI_MEMORY_TYPE;
162060fee10Skettenis 
163060fee10Skettenis // possible caching types for the memory range
164060fee10Skettenis #define EFI_MEMORY_UC           0x0000000000000001
165060fee10Skettenis #define EFI_MEMORY_WC           0x0000000000000002
166060fee10Skettenis #define EFI_MEMORY_WT           0x0000000000000004
167060fee10Skettenis #define EFI_MEMORY_WB           0x0000000000000008
168060fee10Skettenis #define EFI_MEMORY_UCE          0x0000000000000010
169060fee10Skettenis 
170060fee10Skettenis // physical memory protection on range
171060fee10Skettenis #define EFI_MEMORY_WP           0x0000000000001000
172060fee10Skettenis #define EFI_MEMORY_RP           0x0000000000002000
173060fee10Skettenis #define EFI_MEMORY_XP           0x0000000000004000
174060fee10Skettenis 
175060fee10Skettenis // range requires a runtime mapping
176060fee10Skettenis #define EFI_MEMORY_RUNTIME      0x8000000000000000
177060fee10Skettenis 
178060fee10Skettenis #define EFI_MEMORY_DESCRIPTOR_VERSION  1
179060fee10Skettenis typedef struct {
180060fee10Skettenis     UINT32                          Type;           // Field size is 32 bits followed by 32 bit pad
181060fee10Skettenis     UINT32                          Pad;
182060fee10Skettenis     EFI_PHYSICAL_ADDRESS            PhysicalStart;  // Field size is 64 bits
183060fee10Skettenis     EFI_VIRTUAL_ADDRESS             VirtualStart;   // Field size is 64 bits
184060fee10Skettenis     UINT64                          NumberOfPages;  // Field size is 64 bits
185060fee10Skettenis     UINT64                          Attribute;      // Field size is 64 bits
186060fee10Skettenis } EFI_MEMORY_DESCRIPTOR;
187060fee10Skettenis 
188060fee10Skettenis //
189060fee10Skettenis // International Language
190060fee10Skettenis //
191060fee10Skettenis 
192060fee10Skettenis typedef UINT8   ISO_639_2;
193060fee10Skettenis #define ISO_639_2_ENTRY_SIZE    3
194060fee10Skettenis 
195060fee10Skettenis //
196060fee10Skettenis //
197060fee10Skettenis //
198060fee10Skettenis 
199060fee10Skettenis #define EFI_PAGE_SIZE   4096
200060fee10Skettenis #define EFI_PAGE_MASK   0xFFF
201060fee10Skettenis #define EFI_PAGE_SHIFT  12
202060fee10Skettenis 
203060fee10Skettenis #define EFI_SIZE_TO_PAGES(a)  \
204060fee10Skettenis     ( ((a) >> EFI_PAGE_SHIFT) + (((a) & EFI_PAGE_MASK) ? 1 : 0) )
205060fee10Skettenis 
206060fee10Skettenis #endif
207