-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
218 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,156 @@ | ||
/* | ||
* Copright (C) 2014 - 2015 Linaro Ltd. | ||
* Author: Ard Biesheuvel <ard.biesheuvel@linaro.org> | ||
* | ||
* Redistribution and use in source and binary forms, with or without | ||
* modification, are permitted provided that the following conditions | ||
* are met: | ||
* 1. Redistributions of source code must retain the above copyright | ||
* notice and this list of conditions, without modification. | ||
* 2. The name of the author may not be used to endorse or promote products | ||
* derived from this software without specific prior written permission. | ||
* | ||
* Alternatively, this software may be distributed under the terms of the | ||
* GNU General Public License as published by the Free Software Foundation; | ||
* either version 2 of the License, or (at your option) any later version. | ||
*/ | ||
|
||
#if !defined(_MSC_VER) && (!defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L )) | ||
|
||
// ANSI C 1999/2000 stdint.h integer width declarations | ||
|
||
typedef unsigned long uint64_t; | ||
typedef long int64_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; // unqualified 'char' is unsigned on ARM | ||
|
||
#else | ||
#include <stdint.h> | ||
#endif | ||
|
||
// | ||
// Basic EFI types of various widths | ||
// | ||
|
||
#ifndef __WCHAR_TYPE__ | ||
# define __WCHAR_TYPE__ short | ||
#endif | ||
|
||
typedef uint64_t UINT64; | ||
typedef int64_t INT64; | ||
|
||
typedef uint32_t UINT32; | ||
typedef int32_t INT32; | ||
|
||
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; | ||
|
||
#define EFIERR(a) (0x8000000000000000 | a) | ||
#define EFI_ERROR_MASK 0x8000000000000000 | ||
#define EFIERR_OEM(a) (0xc000000000000000 | a) | ||
|
||
#define BAD_POINTER 0xFBFBFBFBFBFBFBFB | ||
#define MAX_ADDRESS 0xFFFFFFFFFFFFFFFF | ||
|
||
#define BREAKPOINT() while (TRUE); // Make it hang on Bios[Dbg]32 | ||
|
||
// | ||
// Pointers must be aligned to these address to function | ||
// | ||
|
||
#define MIN_ALIGNMENT_SIZE 8 | ||
|
||
#define ALIGN_VARIABLE(Value ,Adjustment) \ | ||
(UINTN)Adjustment = 0; \ | ||
if((UINTN)Value % MIN_ALIGNMENT_SIZE) \ | ||
(UINTN)Adjustment = MIN_ALIGNMENT_SIZE - ((UINTN)Value % MIN_ALIGNMENT_SIZE); \ | ||
Value = (UINTN)Value + (UINTN)Adjustment | ||
|
||
|
||
// | ||
// Define macros to build data structure signatures from characters. | ||
// | ||
|
||
#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)) | ||
|
||
// | ||
// EFIAPI - prototype calling convention for EFI function pointers | ||
// BOOTSERVICE - prototype for implementation of a boot service interface | ||
// RUNTIMESERVICE - prototype for implementation of a runtime service interface | ||
// RUNTIMEFUNCTION - prototype for implementation of a runtime function that is not a service | ||
// RUNTIME_CODE - pragma macro for declaring runtime code | ||
// | ||
|
||
#ifndef EFIAPI // Forces EFI calling conventions reguardless of compiler options | ||
#define EFIAPI // Substitute expresion to force C calling convention | ||
#endif | ||
|
||
#define BOOTSERVICE | ||
#define RUNTIMESERVICE | ||
#define RUNTIMEFUNCTION | ||
|
||
|
||
#define RUNTIME_CODE(a) alloc_text("rtcode", a) | ||
#define BEGIN_RUNTIME_DATA() data_seg("rtdata") | ||
#define END_RUNTIME_DATA() data_seg("") | ||
|
||
#define VOLATILE volatile | ||
|
||
#define MEMORY_FENCE __sync_synchronize | ||
|
||
// | ||
// When build similiar to FW, then link everything together as | ||
// one big module. For the MSVC toolchain, we simply tell the | ||
// linker what our driver init function is using /ENTRY. | ||
// | ||
#if defined(_MSC_EXTENSIONS) | ||
#define EFI_DRIVER_ENTRY_POINT(InitFunction) \ | ||
__pragma(comment(linker, "/ENTRY:" # InitFunction)) | ||
#else | ||
#define EFI_DRIVER_ENTRY_POINT(InitFunction) \ | ||
UINTN \ | ||
InitializeDriver ( \ | ||
VOID *ImageHandle, \ | ||
VOID *SystemTable \ | ||
) \ | ||
{ \ | ||
return InitFunction(ImageHandle, \ | ||
SystemTable); \ | ||
} \ | ||
\ | ||
EFI_STATUS efi_main( \ | ||
EFI_HANDLE image, \ | ||
EFI_SYSTEM_TABLE *systab \ | ||
) __attribute__((weak, \ | ||
alias ("InitializeDriver"))); | ||
#endif | ||
|
||
#define LOAD_INTERNAL_DRIVER(_if, type, name, entry) \ | ||
(_if)->LoadInternal(type, name, entry) | ||
|
||
|
||
// | ||
// Some compilers don't support the forward reference construct: | ||
// typedef struct XXXXX | ||
// | ||
// The following macro provide a workaround for such cases. | ||
|
||
#define INTERFACE_DECL(x) struct x | ||
|
||
#define uefi_call_wrapper(func, va_num, ...) func(__VA_ARGS__) | ||
#define EFI_FUNCTION |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
/*++ | ||
Copyright (c) 1998 Intel Corporation | ||
Module Name: | ||
efilibplat.h | ||
Abstract: | ||
EFI to compile bindings | ||
Revision History | ||
--*/ | ||
|
||
VOID | ||
InitializeLibPlatform ( | ||
IN EFI_HANDLE ImageHandle, | ||
IN EFI_SYSTEM_TABLE *SystemTable | ||
); | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
#ifndef GNU_EFI_AARCH64_SETJMP_H | ||
#define GNU_EFI_AARCH64_SETJMP_H | ||
|
||
#define JMPBUF_ALIGN 8 | ||
|
||
typedef struct { | ||
/* GP regs */ | ||
UINT64 X19; | ||
UINT64 X20; | ||
UINT64 X21; | ||
UINT64 X22; | ||
UINT64 X23; | ||
UINT64 X24; | ||
UINT64 X25; | ||
UINT64 X26; | ||
UINT64 X27; | ||
UINT64 X28; | ||
UINT64 FP; | ||
UINT64 LR; | ||
UINT64 IP0; | ||
|
||
/* FP regs */ | ||
UINT64 D8; | ||
UINT64 D9; | ||
UINT64 D10; | ||
UINT64 D11; | ||
UINT64 D12; | ||
UINT64 D13; | ||
UINT64 D14; | ||
UINT64 D15; | ||
} ALIGN(JMPBUF_ALIGN) jmp_buf; | ||
|
||
#endif /* GNU_EFI_AARCH64_SETJMP_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters