/** * Attempt at a port for the ARMv8 architecture. * * (c) Bart Kuivenhoven - Red Hat - 2013 * */ #if 0 #warning "The port for this architecture has been done quickly and \ comes with no guarantee that the types will be of correct size or \ value. If you are able to help in resolving this situation, please do \ otherwise, your patience is kindly requested as we are working on \ resolving these issues." #endif #if defined(__GNUC__) typedef long int64_t; typedef unsigned long uint64_t; typedef unsigned int uint32_t; typedef int int32_t; typedef unsigned short uint16_t; typedef short int16_t; typedef unsigned char uint8_t; typedef signed char int8_t; #else #error "GNU-Efi not ported for this compiler on this architecure yet" #endif /* These defines are dependent on the widths written above, why they are in * architecture dependent header files, I don't know. Moving them out into * multi-architecture headerfiles might save on some code duplication, but what * ever. */ #ifndef __WCHAR_TYPE__ # define __WCHAR_TYPE__ int16_t #endif typedef uint64_t UINT64; typedef int64_t INT64; #ifndef _BASETSD_H_ typedef uint32_t UINT32; typedef int32_t INT32; #endif typedef uint16_t UINT16; typedef int16_t INT16; typedef uint8_t UINT8; typedef int8_t INT8; typedef __WCHAR_TYPE__ WCHAR; #undef VOID #define VOID void typedef int64_t INTN; typedef uint64_t UINTN; /* Should indicate the calling convention, prefixed to the function * On x86 it is defined as __cdecl */ #ifndef EFIAPI #define EFIAPI #endif /* This is an educated guess, compiler accepts it though, so figuring it's * correct */ #if defined __GNUC__ #define INTERFACE_DECL(x) struct x #endif /* Have to dig into what these things do ... */ #define RUNTIMESERVICE #define RUNTIMEFUNCTION /* Is this really the alignment size? it is on x86_64, * Is it true for aarch64 is the quesdtion though? */ #define MIN_ALIGNMENT_SIZE 4 /* Ehrm .... yeah ... almost certainly wrong, but have to dig into the specs to * be sure */ #define EFIERR(a) (-a) /* * As far as I know, this is right ... */ #define uefi_call_wrapper(func, va_num, ...) func(__VA_ARGS__) #define BREAKPOINT() while (TRUE) // // Define macros to create data structure signatures. // #define EFI_SIGNATURE_16(A,B) ((A) | (B<<8)) #define EFI_SIGNATURE_32(A,B,C,D) (EFI_SIGNATURE_16(A,B) | (EFI_SIGNATURE_16(C,D) << 16)) #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))