Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/stand/efi/include/i386/efibind.h
34884 views
1
/*++
2
3
Copyright (c) 1999 - 2003 Intel Corporation. All rights reserved
4
This software and associated documentation (if any) is furnished
5
under a license and may only be used or copied in accordance
6
with the terms of the license. Except as permitted by such
7
license, no part of this software or documentation may be
8
reproduced, stored in a retrieval system, or transmitted in any
9
form or by any means without the express written consent of
10
Intel Corporation.
11
12
Module Name:
13
14
efefind.h
15
16
Abstract:
17
18
EFI to compile bindings
19
20
21
22
23
Revision History
24
25
--*/
26
27
#pragma pack()
28
29
#ifdef EFI_NT_EMULATOR
30
#define POST_CODE(_Data)
31
#else
32
#ifdef EFI_DEBUG
33
#define POST_CODE(_Data) __asm mov eax,(_Data) __asm out 0x80,al
34
#else
35
#define POST_CODE(_Data)
36
#endif
37
#endif
38
39
#define EFIERR(a) (0x80000000 | a)
40
#define EFI_ERROR_MASK 0x80000000
41
#define EFIERR_OEM(a) (0xc0000000 | a)
42
43
44
#define BAD_POINTER 0xFBFBFBFB
45
#define MAX_ADDRESS 0xFFFFFFFF
46
47
#define BREAKPOINT() __asm { int 3 }
48
49
//
50
// Pointers must be aligned to these address to function
51
//
52
53
#define MIN_ALIGNMENT_SIZE 4
54
55
#define ALIGN_VARIABLE(Value ,Adjustment) \
56
(UINTN)Adjustment = 0; \
57
if((UINTN)Value % MIN_ALIGNMENT_SIZE) \
58
(UINTN)Adjustment = MIN_ALIGNMENT_SIZE - ((UINTN)Value % MIN_ALIGNMENT_SIZE); \
59
Value = (UINTN)Value + (UINTN)Adjustment
60
61
62
//
63
// Define macros to build data structure signatures from characters.
64
//
65
66
#define EFI_SIGNATURE_16(A,B) ((A) | (B<<8))
67
#define EFI_SIGNATURE_32(A,B,C,D) (EFI_SIGNATURE_16(A,B) | (EFI_SIGNATURE_16(C,D) << 16))
68
#define EFI_SIGNATURE_64(A,B,C,D,E,F,G,H) (EFI_SIGNATURE_32(A,B,C,D) | ((UINT64)(EFI_SIGNATURE_32(E,F,G,H)) << 32))
69
70
//
71
// EFIAPI - prototype calling convention for EFI function pointers
72
// BOOTSERVICE - prototype for implementation of a boot service interface
73
// RUNTIMESERVICE - prototype for implementation of a runtime service interface
74
// RUNTIMEFUNCTION - prototype for implementation of a runtime function that is not a service
75
// RUNTIME_CODE - pragma macro for declaring runtime code
76
//
77
78
#ifndef EFIAPI // Forces EFI calling conventions reguardless of compiler options
79
#ifdef _MSC_EXTENSIONS
80
#define EFIAPI __cdecl // Force C calling convention for Microsoft C compiler
81
#else
82
#define EFIAPI // Substitute expresion to force C calling convention
83
#endif
84
#endif
85
86
#define BOOTSERVICE
87
//#define RUNTIMESERVICE(proto,a) alloc_text("rtcode",a); proto a
88
//#define RUNTIMEFUNCTION(proto,a) alloc_text("rtcode",a); proto a
89
#define RUNTIMESERVICE
90
#define RUNTIMEFUNCTION
91
92
93
#define RUNTIME_CODE(a) alloc_text("rtcode", a)
94
#define BEGIN_RUNTIME_DATA() data_seg("rtdata")
95
#define END_RUNTIME_DATA() data_seg()
96
97
#define VOLATILE volatile
98
99
#define MEMORY_FENCE()
100
101
#ifdef EFI_NO_INTERFACE_DECL
102
#define EFI_FORWARD_DECLARATION(x)
103
#define EFI_INTERFACE_DECL(x)
104
#else
105
#define EFI_FORWARD_DECLARATION(x) typedef struct _##x x
106
#define EFI_INTERFACE_DECL(x) typedef struct x
107
#endif
108
109
#ifdef EFI_NT_EMULATOR
110
111
//
112
// To help ensure proper coding of integrated drivers, they are
113
// compiled as DLLs. In NT they require a dll init entry pointer.
114
// The macro puts a stub entry point into the DLL so it will load.
115
//
116
117
#define EFI_DRIVER_ENTRY_POINT(InitFunction) \
118
EFI_STATUS \
119
InitFunction ( \
120
EFI_HANDLE ImageHandle, \
121
EFI_SYSTEM_TABLE *SystemTable \
122
); \
123
\
124
UINTN \
125
__stdcall \
126
_DllMainCRTStartup ( \
127
UINTN Inst, \
128
UINTN reason_for_call, \
129
VOID *rserved \
130
) \
131
{ \
132
return 1; \
133
} \
134
\
135
int \
136
__declspec( dllexport ) \
137
__cdecl \
138
InitializeDriver ( \
139
void *ImageHandle, \
140
void *SystemTable \
141
) \
142
{ \
143
return InitFunction(ImageHandle, SystemTable); \
144
}
145
146
147
#define LOAD_INTERNAL_DRIVER(_if, type, name, entry) \
148
(_if)->LoadInternal(type, name, NULL)
149
150
#else // EFI_NT_EMULATOR
151
152
//
153
// When build similar to FW, then link everything together as
154
// one big module.
155
//
156
157
#define EFI_DRIVER_ENTRY_POINT(InitFunction)
158
159
#define LOAD_INTERNAL_DRIVER(_if, type, name, entry) \
160
(_if)->LoadInternal(type, name, entry)
161
162
#endif // EFI_FW_NT
163
164
#ifdef __FreeBSD__
165
#define INTERFACE_DECL(x) struct x
166
#else
167
//
168
// Some compilers don't support the forward reference construct:
169
// typedef struct XXXXX
170
//
171
// The following macro provide a workaround for such cases.
172
//
173
#ifdef NO_INTERFACE_DECL
174
#define INTERFACE_DECL(x)
175
#else
176
#define INTERFACE_DECL(x) typedef struct x
177
#endif
178
#endif /* __FreeBSD__ */
179
180
#ifdef _MSC_EXTENSIONS
181
#pragma warning ( disable : 4731 ) // Suppress warnings about modification of EBP
182
#endif
183
184
185