UefiBaseType.h revision 833bd94e28cc985c97dd0c07d7dec0eea3f023fd
1
2/* @file
3
4  Defines data types and constants introduced in UEFI.
5
6Copyright (c) 2006 - 2007, Intel Corporation
7All rights reserved. This program and the accompanying materials
8are licensed and made available under the terms and conditions of the BSD License
9which accompanies this distribution.  The full text of the license may be found at
10http://opensource.org/licenses/bsd-license.php
11
12THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
13WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
14
15**/
16
17#ifndef __UEFI_BASETYPE_H__
18#define __UEFI_BASETYPE_H__
19
20#include "Base.h"
21
22//
23// Basical data type definitions introduced in UEFI.
24//
25typedef GUID                      EFI_GUID;
26typedef RETURN_STATUS             EFI_STATUS;
27typedef VOID                      *EFI_HANDLE;
28
29typedef VOID                      *EFI_EVENT;
30
31typedef UINTN                     EFI_TPL;
32
33
34typedef UINT64                    EFI_LBA;
35
36
37typedef UINT16                    EFI_HII_HANDLE;
38typedef UINT16                    STRING_REF;
39
40typedef UINT64                    EFI_PHYSICAL_ADDRESS;
41typedef UINT64                    EFI_VIRTUAL_ADDRESS;
42
43//
44// EFI Time Abstraction:
45//  Year:       2000 - 20XX
46//  Month:      1 - 12
47//  Day:        1 - 31
48//  Hour:       0 - 23
49//  Minute:     0 - 59
50//  Second:     0 - 59
51//  Nanosecond: 0 - 999,999,999
52//  TimeZone:   -1440 to 1440 or 2047
53//
54typedef struct {
55  UINT16  Year;
56  UINT8   Month;
57  UINT8   Day;
58  UINT8   Hour;
59  UINT8   Minute;
60  UINT8   Second;
61  UINT8   Pad1;
62  UINT32  Nanosecond;
63  INT16   TimeZone;
64  UINT8   Daylight;
65  UINT8   Pad2;
66} EFI_TIME;
67
68
69//
70// Networking Definitions
71//
72typedef struct {
73  UINT8 Addr[4];
74} EFI_IPv4_ADDRESS;
75
76typedef struct {
77  UINT8 Addr[16];
78} EFI_IPv6_ADDRESS;
79
80typedef struct {
81  UINT8 Addr[32];
82} EFI_MAC_ADDRESS;
83
84typedef union {
85  UINT32            Addr[4];
86  EFI_IPv4_ADDRESS  v4;
87  EFI_IPv6_ADDRESS  v6;
88} EFI_IP_ADDRESS;
89
90
91//
92// Enumeration of EFI_STATUS.
93//
94#define EFI_SUCCESS               RETURN_SUCCESS
95#define EFI_LOAD_ERROR            RETURN_LOAD_ERROR
96#define EFI_INVALID_PARAMETER     RETURN_INVALID_PARAMETER
97#define EFI_UNSUPPORTED           RETURN_UNSUPPORTED
98#define EFI_BAD_BUFFER_SIZE       RETURN_BAD_BUFFER_SIZE
99#define EFI_BUFFER_TOO_SMALL      RETURN_BUFFER_TOO_SMALL
100#define EFI_NOT_READY             RETURN_NOT_READY
101#define EFI_DEVICE_ERROR          RETURN_DEVICE_ERROR
102#define EFI_WRITE_PROTECTED       RETURN_WRITE_PROTECTED
103#define EFI_OUT_OF_RESOURCES      RETURN_OUT_OF_RESOURCES
104#define EFI_VOLUME_CORRUPTED      RETURN_VOLUME_CORRUPTED
105#define EFI_VOLUME_FULL           RETURN_VOLUME_FULL
106#define EFI_NO_MEDIA              RETURN_NO_MEDIA
107#define EFI_MEDIA_CHANGED         RETURN_MEDIA_CHANGED
108#define EFI_NOT_FOUND             RETURN_NOT_FOUND
109#define EFI_ACCESS_DENIED         RETURN_ACCESS_DENIED
110#define EFI_NO_RESPONSE           RETURN_NO_RESPONSE
111#define EFI_NO_MAPPING            RETURN_NO_MAPPING
112#define EFI_TIMEOUT               RETURN_TIMEOUT
113#define EFI_NOT_STARTED           RETURN_NOT_STARTED
114#define EFI_ALREADY_STARTED       RETURN_ALREADY_STARTED
115#define EFI_ABORTED               RETURN_ABORTED
116#define EFI_ICMP_ERROR            RETURN_ICMP_ERROR
117#define EFI_TFTP_ERROR            RETURN_TFTP_ERROR
118#define EFI_PROTOCOL_ERROR        RETURN_PROTOCOL_ERROR
119#define EFI_INCOMPATIBLE_VERSION  RETURN_INCOMPATIBLE_VERSION
120#define EFI_SECURITY_VIOLATION    RETURN_SECURITY_VIOLATION
121#define EFI_CRC_ERROR             RETURN_CRC_ERROR
122#define EFI_END_OF_MEDIA          RETURN_END_OF_MEDIA
123#define EFI_END_OF_FILE           RETURN_END_OF_FILE
124
125#define EFI_WARN_UNKNOWN_GLYPH    RETURN_WARN_UNKNOWN_GLYPH
126#define EFI_WARN_DELETE_FAILURE   RETURN_WARN_DELETE_FAILURE
127#define EFI_WARN_WRITE_FAILURE    RETURN_WARN_WRITE_FAILURE
128#define EFI_WARN_BUFFER_TOO_SMALL RETURN_WARN_BUFFER_TOO_SMALL
129
130
131#define NULL_HANDLE               ((VOID *) 0)
132
133//
134// Define macro to encode the status code.
135//
136#define EFIERR(_a)                ENCODE_ERROR(_a)
137
138#define EFI_ERROR(A)              RETURN_ERROR(A)
139
140//
141// Define macros to build data structure signatures from characters.
142//
143#define EFI_SIGNATURE_16(A, B)        ((A) | (B << 8))
144#define EFI_SIGNATURE_32(A, B, C, D)  (EFI_SIGNATURE_16 (A, B) | (EFI_SIGNATURE_16 (C, D) << 16))
145#define EFI_SIGNATURE_64(A, B, C, D, E, F, G, H) \
146    (EFI_SIGNATURE_32 (A, B, C, D) | ((UINT64) (EFI_SIGNATURE_32 (E, F, G, H)) << 32))
147
148
149//
150//  Returns the byte offset to a field within a structure
151//
152#define EFI_FIELD_OFFSET(TYPE,Field) ((UINTN)(&(((TYPE *) 0)->Field)))
153
154//
155// The EFI memory allocation functions work in units of EFI_PAGEs that are
156// 4K. This should in no way be confused with the page size of the processor.
157// An EFI_PAGE is just the quanta of memory in EFI.
158//
159#define EFI_PAGE_SIZE             0x1000
160#define EFI_PAGE_MASK             0xFFF
161#define EFI_PAGE_SHIFT            12
162
163#define EFI_SIZE_TO_PAGES(a)  (((a) >> EFI_PAGE_SHIFT) + (((a) & EFI_PAGE_MASK) ? 1 : 0))
164
165#define EFI_PAGES_TO_SIZE(a)   ( (a) << EFI_PAGE_SHIFT)
166
167#endif
168