xref: /freebsd/lib/libefivar/efi-osdep.h (revision b3e7694832e81d7a904a10f525f8797b753bf0d3)
1 /*-
2  * Copyright (c) 2017 Netflix, Inc.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23  * SUCH DAMAGE.
24  */
25 
26 #ifndef	_EFI_OSDEP_H_
27 #define	_EFI_OSDEP_H_
28 
29 /*
30  * Defines to adjust the types that EDK2 uses for FreeBSD so we can
31  * use the code and headers mostly unchanged. The headers are imported
32  * all into one directory to avoid case issues with filenames and
33  * included. The actual code is heavily modified since it has too many
34  * annoying dependencies that are difficult to satisfy.
35  */
36 
37 #include <sys/cdefs.h>
38 #include <stdlib.h>
39 #include <stdint.h>
40 #include <uuid.h>
41 
42 typedef int8_t INT8;
43 typedef int16_t INT16;
44 typedef int32_t INT32;
45 typedef int64_t INT64;
46 typedef intptr_t INTN;
47 typedef uint8_t UINT8;
48 typedef uint16_t UINT16;
49 typedef uint32_t UINT32;
50 typedef uint64_t UINT64;
51 typedef uintptr_t UINTN;
52 //typedef uintptr_t EFI_PHYSICAL_ADDRESS;
53 //typedef uint32_t EFI_IPv4_ADDRESS;
54 //typedef uint8_t EFI_MAC_ADDRESS[6];
55 //typedef uint8_t EFI_IPv6_ADDRESS[16];
56 typedef uint8_t CHAR8;
57 typedef uint16_t CHAR16;
58 typedef UINT8 BOOLEAN;
59 typedef void VOID;
60 //typedef uuid_t GUID;
61 //typedef uuid_t EFI_GUID;
62 
63 /* We can't actually call this stuff, so snip out API syntactic sugar */
64 #define INTERFACE_DECL(x)
65 #define EFIAPI
66 #define IN
67 #define OUT
68 #define CONST const
69 #define OPTIONAL
70 //#define TRUE 1
71 //#define FALSE 0
72 
73 /*
74  * EDK2 has fine definitions for these, so let it define them.
75  */
76 #undef NULL
77 #undef EFI_PAGE_SIZE
78 #undef EFI_PAGE_MASK
79 
80 /*
81  * Note: the EDK2 code assumed #pragma packed works and PACKED is a
82  * workaround for some old toolchain issues for EDK2 that aren't
83  * relevent to FreeBSD.
84  */
85 #define PACKED
86 
87 /*
88  * Since we're not compiling for the UEFI boot time (which use ms abi
89  * conventions), tell EDK2 to define VA_START correctly. For the boot
90  * loader, this likely needs to be different.
91  */
92 #define NO_MSABI_VA_FUNCS 1
93 
94 /*
95  * Finally, we need to define the processor we are in EDK2 terms.
96  */
97 #if defined(__i386__)
98 #define MDE_CPU_IA32
99 #elif defined(__amd64__)
100 #define MDE_CPU_X64
101 #elif defined(__arm__)
102 #define MDE_CPU_ARM
103 #elif defined(__aarch64__)
104 #define MDE_CPU_AARCH64
105 #elif defined(__riscv)
106 #define MDE_CPU_RISCV64
107 #endif
108 /* FreeBSD doesn't have/use MDE_CPU_EBC or MDE_CPU_IPF (ia64) */
109 
110 #endif /* _EFI_OSDEP_H_ */
111