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 42typedef int8_t INT8; 43typedef int16_t INT16; 44typedef int32_t INT32; 45typedef int64_t INT64; 46typedef intptr_t INTN; 47typedef uint8_t UINT8; 48typedef uint16_t UINT16; 49typedef uint32_t UINT32; 50typedef uint64_t UINT64; 51typedef 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]; 56typedef uint8_t CHAR8; 57typedef uint16_t CHAR16; 58typedef UINT8 BOOLEAN; 59typedef 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