xref: /freebsd/stand/efi/include/arm64/efibind.h (revision 7a1bc422)
1ca987d46SWarner Losh /*++
2ca987d46SWarner Losh 
3ca987d46SWarner Losh Copyright (c)  1999 - 2003 Intel Corporation. All rights reserved
4ca987d46SWarner Losh This software and associated documentation (if any) is furnished
5ca987d46SWarner Losh under a license and may only be used or copied in accordance
6ca987d46SWarner Losh with the terms of the license. Except as permitted by such
7ca987d46SWarner Losh license, no part of this software or documentation may be
8ca987d46SWarner Losh reproduced, stored in a retrieval system, or transmitted in any
9ca987d46SWarner Losh form or by any means without the express written consent of
10ca987d46SWarner Losh Intel Corporation.
11ca987d46SWarner Losh 
12ca987d46SWarner Losh Module Name:
13ca987d46SWarner Losh 
14ca987d46SWarner Losh     efefind.h
15ca987d46SWarner Losh 
16ca987d46SWarner Losh Abstract:
17ca987d46SWarner Losh 
18ca987d46SWarner Losh     EFI to compile bindings
19ca987d46SWarner Losh 
20ca987d46SWarner Losh 
21ca987d46SWarner Losh 
22ca987d46SWarner Losh 
23ca987d46SWarner Losh Revision History
24ca987d46SWarner Losh 
25ca987d46SWarner Losh --*/
26ca987d46SWarner Losh 
27ca987d46SWarner Losh #pragma pack()
28ca987d46SWarner Losh 
29ca987d46SWarner Losh //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
30ca987d46SWarner Losh // BugBug: Code to debug
31ca987d46SWarner Losh //
32ca987d46SWarner Losh #define BIT63   0x8000000000000000
33ca987d46SWarner Losh 
34ca987d46SWarner Losh #define PLATFORM_IOBASE_ADDRESS   (0xffffc000000 | BIT63)
35ca987d46SWarner Losh #define PORT_TO_MEMD(_Port) (PLATFORM_IOBASE_ADDRESS | ( ( ( (_Port) & 0xfffc) << 10 ) | ( (_Port) & 0x0fff) ) )
36ca987d46SWarner Losh 
37ca987d46SWarner Losh //
38ca987d46SWarner Losh // Macro's with casts make this much easier to use and read.
39ca987d46SWarner Losh //
40ca987d46SWarner Losh #define PORT_TO_MEM8D(_Port)  (*(UINT8  *)(PORT_TO_MEMD(_Port)))
41ca987d46SWarner Losh #define POST_CODE(_Data)  (PORT_TO_MEM8D(0x80) = (_Data))
42ca987d46SWarner Losh //
43ca987d46SWarner Losh // BugBug: End Debug Code!!!
44ca987d46SWarner Losh //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
45ca987d46SWarner Losh 
46ca987d46SWarner Losh #define EFIERR(a)           (0x8000000000000000 | a)
47ca987d46SWarner Losh #define EFI_ERROR_MASK      0x8000000000000000
48ca987d46SWarner Losh #define EFIERR_OEM(a)       (0xc000000000000000 | a)
49ca987d46SWarner Losh 
50ca987d46SWarner Losh #define BAD_POINTER         0xFBFBFBFBFBFBFBFB
51ca987d46SWarner Losh #define MAX_ADDRESS         0xFFFFFFFFFFFFFFFF
52ca987d46SWarner Losh 
53ca987d46SWarner Losh #define BREAKPOINT()  __break(0)
54ca987d46SWarner Losh 
55ca987d46SWarner Losh //
56ca987d46SWarner Losh // Pointers must be aligned to these address to function
57ca987d46SWarner Losh //  you will get an alignment fault if this value is less than 8
58ca987d46SWarner Losh //
59ca987d46SWarner Losh #define MIN_ALIGNMENT_SIZE  8
60ca987d46SWarner Losh 
61ca987d46SWarner Losh #define ALIGN_VARIABLE(Value , Adjustment) \
62ca987d46SWarner Losh             (UINTN) Adjustment = 0; \
63ca987d46SWarner Losh             if((UINTN)Value % MIN_ALIGNMENT_SIZE) \
64ca987d46SWarner Losh                 (UINTN)Adjustment = MIN_ALIGNMENT_SIZE - ((UINTN)Value % MIN_ALIGNMENT_SIZE); \
65ca987d46SWarner Losh             Value = (UINTN)Value + (UINTN)Adjustment
66ca987d46SWarner Losh 
67ca987d46SWarner Losh //
68ca987d46SWarner Losh // Define macros to create data structure signatures.
69ca987d46SWarner Losh //
70ca987d46SWarner Losh 
71ca987d46SWarner Losh #define EFI_SIGNATURE_16(A,B)             ((A) | (B<<8))
72ca987d46SWarner Losh #define EFI_SIGNATURE_32(A,B,C,D)         (EFI_SIGNATURE_16(A,B)     | (EFI_SIGNATURE_16(C,D)     << 16))
73ca987d46SWarner Losh #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))
74ca987d46SWarner Losh 
75ca987d46SWarner Losh //
76ca987d46SWarner Losh // EFIAPI - prototype calling convention for EFI function pointers
77ca987d46SWarner Losh // BOOTSERVICE - prototype for implementation of a boot service interface
78ca987d46SWarner Losh // RUNTIMESERVICE - prototype for implementation of a runtime service interface
79ca987d46SWarner Losh // RUNTIMEFUNCTION - prototype for implementation of a runtime function that is not a service
80ca987d46SWarner Losh // RUNTIME_CODE - pragma macro for declaring runtime code
81ca987d46SWarner Losh //
82ca987d46SWarner Losh 
83ca987d46SWarner Losh #ifndef EFIAPI                  // Forces EFI calling conventions reguardless of compiler options
84ca987d46SWarner Losh     #ifdef _MSC_EXTENSIONS
85ca987d46SWarner Losh         #define EFIAPI __cdecl  // Force C calling convention for Microsoft C compiler
86ca987d46SWarner Losh     #else
87ca987d46SWarner Losh         #define EFIAPI          // Substitute expresion to force C calling convention
88ca987d46SWarner Losh     #endif
89ca987d46SWarner Losh #endif
90ca987d46SWarner Losh 
91ca987d46SWarner Losh #define BOOTSERVICE
92ca987d46SWarner Losh #define RUNTIMESERVICE
93ca987d46SWarner Losh #define RUNTIMEFUNCTION
94ca987d46SWarner Losh 
95ca987d46SWarner Losh #define RUNTIME_CODE(a)         alloc_text("rtcode", a)
96ca987d46SWarner Losh #define BEGIN_RUNTIME_DATA()    data_seg("rtdata")
97ca987d46SWarner Losh #define END_RUNTIME_DATA()      data_seg()
98ca987d46SWarner Losh 
99ca987d46SWarner Losh #define VOLATILE    volatile
100ca987d46SWarner Losh 
101ca987d46SWarner Losh //
102ca987d46SWarner Losh // BugBug: Need to find out if this is portable across compilers.
103ca987d46SWarner Losh //
104ca987d46SWarner Losh void __mfa (void);
105ca987d46SWarner Losh #define MEMORY_FENCE()    __mfa()
106ca987d46SWarner Losh 
107ca987d46SWarner Losh #ifdef EFI_NO_INTERFACE_DECL
108ca987d46SWarner Losh   #define EFI_FORWARD_DECLARATION(x)
109ca987d46SWarner Losh   #define EFI_INTERFACE_DECL(x)
110ca987d46SWarner Losh #else
111ca987d46SWarner Losh   #define EFI_FORWARD_DECLARATION(x) typedef struct _##x x
112ca987d46SWarner Losh   #define EFI_INTERFACE_DECL(x) typedef struct x
113ca987d46SWarner Losh #endif
114ca987d46SWarner Losh 
115ca987d46SWarner Losh //
116ca987d46SWarner Losh // When build similar to FW, then link everything together as
117ca987d46SWarner Losh // one big module.
118ca987d46SWarner Losh //
119ca987d46SWarner Losh 
120ca987d46SWarner Losh #define EFI_DRIVER_ENTRY_POINT(InitFunction)
121ca987d46SWarner Losh 
122ca987d46SWarner Losh #define LOAD_INTERNAL_DRIVER(_if, type, name, entry)    \
123ca987d46SWarner Losh             (_if)->LoadInternal(type, name, entry)
124ca987d46SWarner Losh //        entry(NULL, ST)
125ca987d46SWarner Losh 
126ca987d46SWarner Losh #ifdef __FreeBSD__
127ca987d46SWarner Losh #define INTERFACE_DECL(x) struct x
128ca987d46SWarner Losh #else
129ca987d46SWarner Losh //
130ca987d46SWarner Losh // Some compilers don't support the forward reference construct:
131ca987d46SWarner Losh //  typedef struct XXXXX
132ca987d46SWarner Losh //
133ca987d46SWarner Losh // The following macro provide a workaround for such cases.
134ca987d46SWarner Losh //
135ca987d46SWarner Losh #ifdef NO_INTERFACE_DECL
136ca987d46SWarner Losh #define INTERFACE_DECL(x)
137ca987d46SWarner Losh #else
138ca987d46SWarner Losh #define INTERFACE_DECL(x) typedef struct x
139ca987d46SWarner Losh #endif
140ca987d46SWarner Losh #endif
141