2011-07-01 21:31:25 +02:00
|
|
|
References: fate#311376, fate#311529, bnc#578927, bnc#628554
|
|
|
|
|
|
|
|
# HG changeset patch
|
|
|
|
# User Jan Beulich <jbeulich@novell.com>
|
|
|
|
# Date 1309249070 -3600
|
|
|
|
# Node ID b8d22c658bd213bf9da0a9d05312b63524652daf
|
|
|
|
# Parent 6c7a23e08a041a1943b60ed0c4473112aa15c91f
|
|
|
|
x86-64: EFI header files
|
|
|
|
|
|
|
|
Taken from gnu-efi-3.0k (slightly edited).
|
|
|
|
|
|
|
|
Signed-off-by: Jan Beulich <jbeulich@novell.com>
|
|
|
|
|
2011-09-15 23:43:21 +02:00
|
|
|
Index: xen-4.1.2-testing/xen/include/asm-x86/efibind.h
|
|
|
|
===================================================================
|
2011-07-01 21:31:25 +02:00
|
|
|
--- /dev/null
|
2011-09-15 23:43:21 +02:00
|
|
|
+++ xen-4.1.2-testing/xen/include/asm-x86/efibind.h
|
2011-07-01 21:31:25 +02:00
|
|
|
@@ -0,0 +1,6 @@
|
|
|
|
+#include <xen/types.h>
|
|
|
|
+#if defined(__i386__)
|
|
|
|
+# include <asm/x86_32/efibind.h>
|
|
|
|
+#elif defined(__x86_64__)
|
|
|
|
+# include <asm/x86_64/efibind.h>
|
|
|
|
+#endif
|
2011-09-15 23:43:21 +02:00
|
|
|
Index: xen-4.1.2-testing/xen/include/asm-x86/x86_64/efibind.h
|
|
|
|
===================================================================
|
2011-07-01 21:31:25 +02:00
|
|
|
--- /dev/null
|
2011-09-15 23:43:21 +02:00
|
|
|
+++ xen-4.1.2-testing/xen/include/asm-x86/x86_64/efibind.h
|
2011-07-01 21:31:25 +02:00
|
|
|
@@ -0,0 +1,276 @@
|
|
|
|
+/*++
|
|
|
|
+
|
|
|
|
+Copyright (c) 1998 Intel Corporation
|
|
|
|
+
|
|
|
|
+Module Name:
|
|
|
|
+
|
|
|
|
+ efefind.h
|
|
|
|
+
|
|
|
|
+Abstract:
|
|
|
|
+
|
|
|
|
+ EFI to compile bindings
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+Revision History
|
|
|
|
+
|
|
|
|
+--*/
|
|
|
|
+
|
|
|
|
+#ifndef __GNUC__
|
|
|
|
+#pragma pack()
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// Basic int types of various widths
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+#if !defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L )
|
|
|
|
+
|
|
|
|
+ // No ANSI C 1999/2000 stdint.h integer width declarations
|
|
|
|
+
|
|
|
|
+ #if defined(_MSC_EXTENSIONS)
|
|
|
|
+
|
|
|
|
+ // Use Microsoft C compiler integer width declarations
|
|
|
|
+
|
|
|
|
+ typedef unsigned __int64 uint64_t;
|
|
|
|
+ typedef __int64 int64_t;
|
|
|
|
+ typedef unsigned __int32 uint32_t;
|
|
|
|
+ typedef __int32 int32_t;
|
|
|
|
+ typedef unsigned short uint16_t;
|
|
|
|
+ typedef short int16_t;
|
|
|
|
+ typedef unsigned char uint8_t;
|
|
|
|
+ typedef char int8_t;
|
|
|
|
+ #elif defined(__GNUC__)
|
|
|
|
+ typedef unsigned long long uint64_t __attribute__((aligned (8)));
|
|
|
|
+ typedef long long int64_t __attribute__((aligned (8)));
|
|
|
|
+ typedef unsigned int uint32_t;
|
|
|
|
+ typedef int int32_t;
|
|
|
|
+ typedef unsigned short uint16_t;
|
|
|
|
+ typedef short int16_t;
|
|
|
|
+ typedef unsigned char uint8_t;
|
|
|
|
+ typedef char int8_t;
|
|
|
|
+ #elif defined(UNIX_LP64)
|
|
|
|
+
|
|
|
|
+ /* Use LP64 programming model from C_FLAGS for 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 char int8_t;
|
|
|
|
+ #else
|
|
|
|
+
|
|
|
|
+ /* Assume P64 programming model from C_FLAGS for integer width declarations */
|
|
|
|
+
|
|
|
|
+ typedef unsigned long long uint64_t __attribute__((aligned (8)));
|
|
|
|
+ typedef long long int64_t __attribute__((aligned (8)));
|
|
|
|
+ typedef unsigned int uint32_t;
|
|
|
|
+ typedef int int32_t;
|
|
|
|
+ typedef unsigned short uint16_t;
|
|
|
|
+ typedef short int16_t;
|
|
|
|
+ typedef unsigned char uint8_t;
|
|
|
|
+ typedef char int8_t;
|
|
|
|
+ #endif
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// Basic EFI types of various widths
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+#ifndef __WCHAR_TYPE__
|
|
|
|
+# define __WCHAR_TYPE__ short
|
|
|
|
+#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;
|
|
|
|
+
|
|
|
|
+#ifdef EFI_NT_EMULATOR
|
|
|
|
+ #define POST_CODE(_Data)
|
|
|
|
+#else
|
|
|
|
+ #ifdef EFI_DEBUG
|
|
|
|
+#define POST_CODE(_Data) __asm mov eax,(_Data) __asm out 0x80,al
|
|
|
|
+ #else
|
|
|
|
+ #define POST_CODE(_Data)
|
|
|
|
+ #endif
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
+#define EFIERR(a) (0x8000000000000000 | a)
|
|
|
|
+#define EFI_ERROR_MASK 0x8000000000000000
|
|
|
|
+#define EFIERR_OEM(a) (0xc000000000000000 | a)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+#define BAD_POINTER 0xFBFBFBFBFBFBFBFB
|
|
|
|
+#define MAX_ADDRESS 0xFFFFFFFFFFFFFFFF
|
|
|
|
+
|
|
|
|
+#ifdef EFI_NT_EMULATOR
|
|
|
|
+ #define BREAKPOINT() __asm { int 3 }
|
|
|
|
+#else
|
|
|
|
+ #define BREAKPOINT() while (TRUE); // Make it hang on Bios[Dbg]32
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// Pointers must be aligned to these address to function
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+#define MIN_ALIGNMENT_SIZE 4
|
|
|
|
+
|
|
|
|
+#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))
|
|
|
|
+//
|
|
|
|
+// To export & import functions in the EFI emulator environment
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+#ifdef EFI_NT_EMULATOR
|
|
|
|
+ #define EXPORTAPI __declspec( dllexport )
|
|
|
|
+#else
|
|
|
|
+ #define EXPORTAPI
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// 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
|
|
|
|
+ #ifdef _MSC_EXTENSIONS
|
|
|
|
+ #define EFIAPI __cdecl // Force C calling convention for Microsoft C compiler
|
|
|
|
+ #elif __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)
|
|
|
|
+ #define EFIAPI __attribute__((__ms_abi__)) // Force Microsoft ABI
|
|
|
|
+ #else
|
|
|
|
+ #define EFIAPI // Substitute expresion to force C calling convention
|
|
|
|
+ #endif
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
+#define BOOTSERVICE
|
|
|
|
+//#define RUNTIMESERVICE(proto,a) alloc_text("rtcode",a); proto a
|
|
|
|
+//#define RUNTIMEFUNCTION(proto,a) alloc_text("rtcode",a); proto a
|
|
|
|
+#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()
|
|
|
|
+
|
|
|
|
+#ifdef EFI_NT_EMULATOR
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// To help ensure proper coding of integrated drivers, they are
|
|
|
|
+// compiled as DLLs. In NT they require a dll init entry pointer.
|
|
|
|
+// The macro puts a stub entry point into the DLL so it will load.
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+#define EFI_DRIVER_ENTRY_POINT(InitFunction) \
|
|
|
|
+ UINTN \
|
|
|
|
+ __stdcall \
|
|
|
|
+ _DllMainCRTStartup ( \
|
|
|
|
+ UINTN Inst, \
|
|
|
|
+ UINTN reason_for_call, \
|
|
|
|
+ VOID *rserved \
|
|
|
|
+ ) \
|
|
|
|
+ { \
|
|
|
|
+ return 1; \
|
|
|
|
+ } \
|
|
|
|
+ \
|
|
|
|
+ int \
|
|
|
|
+ EXPORTAPI \
|
|
|
|
+ __cdecl \
|
|
|
|
+ InitializeDriver ( \
|
|
|
|
+ void *ImageHandle, \
|
|
|
|
+ void *SystemTable \
|
|
|
|
+ ) \
|
|
|
|
+ { \
|
|
|
|
+ return InitFunction(ImageHandle, SystemTable); \
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ #define LOAD_INTERNAL_DRIVER(_if, type, name, entry) \
|
|
|
|
+ (_if)->LoadInternal(type, name, NULL)
|
|
|
|
+
|
|
|
|
+#else // EFI_NT_EMULATOR
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// When build similiar to FW, then link everything together as
|
|
|
|
+// one big module.
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+ #define EFI_DRIVER_ENTRY_POINT(InitFunction)
|
|
|
|
+
|
|
|
|
+ #define LOAD_INTERNAL_DRIVER(_if, type, name, entry) \
|
|
|
|
+ (_if)->LoadInternal(type, name, entry)
|
|
|
|
+
|
|
|
|
+#endif // EFI_FW_NT
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// Some compilers don't support the forward reference construct:
|
|
|
|
+// typedef struct XXXXX
|
|
|
|
+//
|
|
|
|
+// The following macro provide a workaround for such cases.
|
|
|
|
+//
|
|
|
|
+#ifdef NO_INTERFACE_DECL
|
|
|
|
+#define INTERFACE_DECL(x)
|
|
|
|
+#else
|
|
|
|
+#ifdef __GNUC__
|
|
|
|
+#define INTERFACE_DECL(x) struct x
|
|
|
|
+#else
|
|
|
|
+#define INTERFACE_DECL(x) typedef struct x
|
|
|
|
+#endif
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
+#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)
|
|
|
|
+#define uefi_call_wrapper(func, va_num, ...) func(__VA_ARGS__)
|
|
|
|
+#else
|
|
|
|
+/* for x86_64, EFI_FUNCTION_WRAPPER must be defined */
|
|
|
|
+#ifdef EFI_FUNCTION_WRAPPER
|
|
|
|
+UINTN uefi_call_wrapper(void *func, unsigned long va_num, ...);
|
|
|
|
+#else
|
|
|
|
+#error "EFI_FUNCTION_WRAPPER must be defined for x86_64 architecture"
|
|
|
|
+#endif
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
+#ifdef _MSC_EXTENSIONS
|
|
|
|
+#pragma warning ( disable : 4731 ) // Suppress warnings about modification of EBP
|
|
|
|
+#endif
|
|
|
|
+
|
2011-09-15 23:43:21 +02:00
|
|
|
Index: xen-4.1.2-testing/xen/include/efi/efiapi.h
|
|
|
|
===================================================================
|
2011-07-01 21:31:25 +02:00
|
|
|
--- /dev/null
|
2011-09-15 23:43:21 +02:00
|
|
|
+++ xen-4.1.2-testing/xen/include/efi/efiapi.h
|
2011-07-01 21:31:25 +02:00
|
|
|
@@ -0,0 +1,718 @@
|
|
|
|
+#ifndef _EFI_API_H
|
|
|
|
+#define _EFI_API_H
|
|
|
|
+
|
|
|
|
+/*++
|
|
|
|
+
|
|
|
|
+Copyright (c) 1998 Intel Corporation
|
|
|
|
+
|
|
|
|
+Module Name:
|
|
|
|
+
|
|
|
|
+ efiapi.h
|
|
|
|
+
|
|
|
|
+Abstract:
|
|
|
|
+
|
|
|
|
+ Global EFI runtime & boot service interfaces
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+Revision History
|
|
|
|
+
|
|
|
|
+--*/
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// EFI Specification Revision
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+#define EFI_SPECIFICATION_MAJOR_REVISION 1
|
|
|
|
+#define EFI_SPECIFICATION_MINOR_REVISION 02
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// Declare forward referenced data structures
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+INTERFACE_DECL(_EFI_SYSTEM_TABLE);
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// EFI Memory
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_ALLOCATE_PAGES) (
|
|
|
|
+ IN EFI_ALLOCATE_TYPE Type,
|
|
|
|
+ IN EFI_MEMORY_TYPE MemoryType,
|
|
|
|
+ IN UINTN NoPages,
|
|
|
|
+ OUT EFI_PHYSICAL_ADDRESS *Memory
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_FREE_PAGES) (
|
|
|
|
+ IN EFI_PHYSICAL_ADDRESS Memory,
|
|
|
|
+ IN UINTN NoPages
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_GET_MEMORY_MAP) (
|
|
|
|
+ IN OUT UINTN *MemoryMapSize,
|
|
|
|
+ IN OUT EFI_MEMORY_DESCRIPTOR *MemoryMap,
|
|
|
|
+ OUT UINTN *MapKey,
|
|
|
|
+ OUT UINTN *DescriptorSize,
|
|
|
|
+ OUT UINT32 *DescriptorVersion
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+#define NextMemoryDescriptor(Ptr,Size) ((EFI_MEMORY_DESCRIPTOR *) (((UINT8 *) Ptr) + Size))
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_ALLOCATE_POOL) (
|
|
|
|
+ IN EFI_MEMORY_TYPE PoolType,
|
|
|
|
+ IN UINTN Size,
|
|
|
|
+ OUT VOID **Buffer
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_FREE_POOL) (
|
|
|
|
+ IN VOID *Buffer
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_SET_VIRTUAL_ADDRESS_MAP) (
|
|
|
|
+ IN UINTN MemoryMapSize,
|
|
|
|
+ IN UINTN DescriptorSize,
|
|
|
|
+ IN UINT32 DescriptorVersion,
|
|
|
|
+ IN EFI_MEMORY_DESCRIPTOR *VirtualMap
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+#define EFI_OPTIONAL_PTR 0x00000001
|
|
|
|
+#define EFI_INTERNAL_FNC 0x00000002 // Pointer to internal runtime fnc
|
|
|
|
+#define EFI_INTERNAL_PTR 0x00000004 // Pointer to internal runtime data
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_CONVERT_POINTER) (
|
|
|
|
+ IN UINTN DebugDisposition,
|
|
|
|
+ IN OUT VOID **Address
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// EFI Events
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+#define EVT_TIMER 0x80000000
|
|
|
|
+#define EVT_RUNTIME 0x40000000
|
|
|
|
+#define EVT_RUNTIME_CONTEXT 0x20000000
|
|
|
|
+
|
|
|
|
+#define EVT_NOTIFY_WAIT 0x00000100
|
|
|
|
+#define EVT_NOTIFY_SIGNAL 0x00000200
|
|
|
|
+
|
|
|
|
+#define EVT_SIGNAL_EXIT_BOOT_SERVICES 0x00000201
|
|
|
|
+#define EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE 0x60000202
|
|
|
|
+
|
|
|
|
+#define EVT_EFI_SIGNAL_MASK 0x000000FF
|
|
|
|
+#define EVT_EFI_SIGNAL_MAX 2
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+VOID
|
|
|
|
+(EFIAPI *EFI_EVENT_NOTIFY) (
|
|
|
|
+ IN EFI_EVENT Event,
|
|
|
|
+ IN VOID *Context
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_CREATE_EVENT) (
|
|
|
|
+ IN UINT32 Type,
|
|
|
|
+ IN EFI_TPL NotifyTpl,
|
|
|
|
+ IN EFI_EVENT_NOTIFY NotifyFunction,
|
|
|
|
+ IN VOID *NotifyContext,
|
|
|
|
+ OUT EFI_EVENT *Event
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef enum {
|
|
|
|
+ TimerCancel,
|
|
|
|
+ TimerPeriodic,
|
|
|
|
+ TimerRelative,
|
|
|
|
+ TimerTypeMax
|
|
|
|
+} EFI_TIMER_DELAY;
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_SET_TIMER) (
|
|
|
|
+ IN EFI_EVENT Event,
|
|
|
|
+ IN EFI_TIMER_DELAY Type,
|
|
|
|
+ IN UINT64 TriggerTime
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_SIGNAL_EVENT) (
|
|
|
|
+ IN EFI_EVENT Event
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_WAIT_FOR_EVENT) (
|
|
|
|
+ IN UINTN NumberOfEvents,
|
|
|
|
+ IN EFI_EVENT *Event,
|
|
|
|
+ OUT UINTN *Index
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_CLOSE_EVENT) (
|
|
|
|
+ IN EFI_EVENT Event
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_CHECK_EVENT) (
|
|
|
|
+ IN EFI_EVENT Event
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// Task priority level
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+#define TPL_APPLICATION 4
|
|
|
|
+#define TPL_CALLBACK 8
|
|
|
|
+#define TPL_NOTIFY 16
|
|
|
|
+#define TPL_HIGH_LEVEL 31
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_TPL
|
|
|
|
+(EFIAPI *EFI_RAISE_TPL) (
|
|
|
|
+ IN EFI_TPL NewTpl
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+VOID
|
|
|
|
+(EFIAPI *EFI_RESTORE_TPL) (
|
|
|
|
+ IN EFI_TPL OldTpl
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// EFI platform varibles
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+#define EFI_GLOBAL_VARIABLE \
|
|
|
|
+ { 0x8BE4DF61, 0x93CA, 0x11d2, {0xAA, 0x0D, 0x00, 0xE0, 0x98, 0x03, 0x2B, 0x8C} }
|
|
|
|
+
|
|
|
|
+// Variable attributes
|
|
|
|
+#define EFI_VARIABLE_NON_VOLATILE 0x00000001
|
|
|
|
+#define EFI_VARIABLE_BOOTSERVICE_ACCESS 0x00000002
|
|
|
|
+#define EFI_VARIABLE_RUNTIME_ACCESS 0x00000004
|
|
|
|
+
|
|
|
|
+// Variable size limitation
|
|
|
|
+#define EFI_MAXIMUM_VARIABLE_SIZE 1024
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_GET_VARIABLE) (
|
|
|
|
+ IN CHAR16 *VariableName,
|
|
|
|
+ IN EFI_GUID *VendorGuid,
|
|
|
|
+ OUT UINT32 *Attributes OPTIONAL,
|
|
|
|
+ IN OUT UINTN *DataSize,
|
|
|
|
+ OUT VOID *Data
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_GET_NEXT_VARIABLE_NAME) (
|
|
|
|
+ IN OUT UINTN *VariableNameSize,
|
|
|
|
+ IN OUT CHAR16 *VariableName,
|
|
|
|
+ IN OUT EFI_GUID *VendorGuid
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_SET_VARIABLE) (
|
|
|
|
+ IN CHAR16 *VariableName,
|
|
|
|
+ IN EFI_GUID *VendorGuid,
|
|
|
|
+ IN UINT32 Attributes,
|
|
|
|
+ IN UINTN DataSize,
|
|
|
|
+ IN VOID *Data
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// EFI Time
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+typedef struct {
|
|
|
|
+ UINT32 Resolution; // 1e-6 parts per million
|
|
|
|
+ UINT32 Accuracy; // hertz
|
|
|
|
+ BOOLEAN SetsToZero; // Set clears sub-second time
|
|
|
|
+} EFI_TIME_CAPABILITIES;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_GET_TIME) (
|
|
|
|
+ OUT EFI_TIME *Time,
|
|
|
|
+ OUT EFI_TIME_CAPABILITIES *Capabilities OPTIONAL
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_SET_TIME) (
|
|
|
|
+ IN EFI_TIME *Time
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_GET_WAKEUP_TIME) (
|
|
|
|
+ OUT BOOLEAN *Enabled,
|
|
|
|
+ OUT BOOLEAN *Pending,
|
|
|
|
+ OUT EFI_TIME *Time
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_SET_WAKEUP_TIME) (
|
|
|
|
+ IN BOOLEAN Enable,
|
|
|
|
+ IN EFI_TIME *Time OPTIONAL
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// Image functions
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+// PE32+ Subsystem type for EFI images
|
|
|
|
+
|
|
|
|
+#if !defined(IMAGE_SUBSYSTEM_EFI_APPLICATION)
|
|
|
|
+#define IMAGE_SUBSYSTEM_EFI_APPLICATION 10
|
|
|
|
+#define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11
|
|
|
|
+#define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
+// PE32+ Machine type for EFI images
|
|
|
|
+
|
|
|
|
+#if !defined(EFI_IMAGE_MACHINE_IA32)
|
|
|
|
+#define EFI_IMAGE_MACHINE_IA32 0x014c
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
+#if !defined(EFI_IMAGE_MACHINE_IA64)
|
|
|
|
+#define EFI_IMAGE_MACHINE_IA64 0x0200
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
+// Image Entry prototype
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_IMAGE_ENTRY_POINT) (
|
|
|
|
+ IN EFI_HANDLE ImageHandle,
|
|
|
|
+ IN struct _EFI_SYSTEM_TABLE *SystemTable
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_IMAGE_LOAD) (
|
|
|
|
+ IN BOOLEAN BootPolicy,
|
|
|
|
+ IN EFI_HANDLE ParentImageHandle,
|
|
|
|
+ IN EFI_DEVICE_PATH *FilePath,
|
|
|
|
+ IN VOID *SourceBuffer OPTIONAL,
|
|
|
|
+ IN UINTN SourceSize,
|
|
|
|
+ OUT EFI_HANDLE *ImageHandle
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_IMAGE_START) (
|
|
|
|
+ IN EFI_HANDLE ImageHandle,
|
|
|
|
+ OUT UINTN *ExitDataSize,
|
|
|
|
+ OUT CHAR16 **ExitData OPTIONAL
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_EXIT) (
|
|
|
|
+ IN EFI_HANDLE ImageHandle,
|
|
|
|
+ IN EFI_STATUS ExitStatus,
|
|
|
|
+ IN UINTN ExitDataSize,
|
|
|
|
+ IN CHAR16 *ExitData OPTIONAL
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_IMAGE_UNLOAD) (
|
|
|
|
+ IN EFI_HANDLE ImageHandle
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+// Image handle
|
|
|
|
+#define LOADED_IMAGE_PROTOCOL \
|
|
|
|
+ { 0x5B1B31A1, 0x9562, 0x11d2, {0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B} }
|
|
|
|
+
|
|
|
|
+#define EFI_IMAGE_INFORMATION_REVISION 0x1000
|
|
|
|
+typedef struct {
|
|
|
|
+ UINT32 Revision;
|
|
|
|
+ EFI_HANDLE ParentHandle;
|
|
|
|
+ struct _EFI_SYSTEM_TABLE *SystemTable;
|
|
|
|
+
|
|
|
|
+ // Source location of image
|
|
|
|
+ EFI_HANDLE DeviceHandle;
|
|
|
|
+ EFI_DEVICE_PATH *FilePath;
|
|
|
|
+ VOID *Reserved;
|
|
|
|
+
|
|
|
|
+ // Images load options
|
|
|
|
+ UINT32 LoadOptionsSize;
|
|
|
|
+ VOID *LoadOptions;
|
|
|
|
+
|
|
|
|
+ // Location of where image was loaded
|
|
|
|
+ VOID *ImageBase;
|
|
|
|
+ UINT64 ImageSize;
|
|
|
|
+ EFI_MEMORY_TYPE ImageCodeType;
|
|
|
|
+ EFI_MEMORY_TYPE ImageDataType;
|
|
|
|
+
|
|
|
|
+ // If the driver image supports a dynamic unload request
|
|
|
|
+ EFI_IMAGE_UNLOAD Unload;
|
|
|
|
+
|
|
|
|
+} EFI_LOADED_IMAGE;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_EXIT_BOOT_SERVICES) (
|
|
|
|
+ IN EFI_HANDLE ImageHandle,
|
|
|
|
+ IN UINTN MapKey
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// Misc
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_STALL) (
|
|
|
|
+ IN UINTN Microseconds
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_SET_WATCHDOG_TIMER) (
|
|
|
|
+ IN UINTN Timeout,
|
|
|
|
+ IN UINT64 WatchdogCode,
|
|
|
|
+ IN UINTN DataSize,
|
|
|
|
+ IN CHAR16 *WatchdogData OPTIONAL
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+typedef enum {
|
|
|
|
+ EfiResetCold,
|
|
|
|
+ EfiResetWarm,
|
|
|
|
+ EfiResetShutdown
|
|
|
|
+} EFI_RESET_TYPE;
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_RESET_SYSTEM) (
|
|
|
|
+ IN EFI_RESET_TYPE ResetType,
|
|
|
|
+ IN EFI_STATUS ResetStatus,
|
|
|
|
+ IN UINTN DataSize,
|
|
|
|
+ IN CHAR16 *ResetData OPTIONAL
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_GET_NEXT_MONOTONIC_COUNT) (
|
|
|
|
+ OUT UINT64 *Count
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_GET_NEXT_HIGH_MONO_COUNT) (
|
|
|
|
+ OUT UINT32 *HighCount
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// Protocol handler functions
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+typedef enum {
|
|
|
|
+ EFI_NATIVE_INTERFACE,
|
|
|
|
+ EFI_PCODE_INTERFACE
|
|
|
|
+} EFI_INTERFACE_TYPE;
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_INSTALL_PROTOCOL_INTERFACE) (
|
|
|
|
+ IN OUT EFI_HANDLE *Handle,
|
|
|
|
+ IN EFI_GUID *Protocol,
|
|
|
|
+ IN EFI_INTERFACE_TYPE InterfaceType,
|
|
|
|
+ IN VOID *Interface
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_REINSTALL_PROTOCOL_INTERFACE) (
|
|
|
|
+ IN EFI_HANDLE Handle,
|
|
|
|
+ IN EFI_GUID *Protocol,
|
|
|
|
+ IN VOID *OldInterface,
|
|
|
|
+ IN VOID *NewInterface
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_UNINSTALL_PROTOCOL_INTERFACE) (
|
|
|
|
+ IN EFI_HANDLE Handle,
|
|
|
|
+ IN EFI_GUID *Protocol,
|
|
|
|
+ IN VOID *Interface
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_HANDLE_PROTOCOL) (
|
|
|
|
+ IN EFI_HANDLE Handle,
|
|
|
|
+ IN EFI_GUID *Protocol,
|
|
|
|
+ OUT VOID **Interface
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_REGISTER_PROTOCOL_NOTIFY) (
|
|
|
|
+ IN EFI_GUID *Protocol,
|
|
|
|
+ IN EFI_EVENT Event,
|
|
|
|
+ OUT VOID **Registration
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef enum {
|
|
|
|
+ AllHandles,
|
|
|
|
+ ByRegisterNotify,
|
|
|
|
+ ByProtocol
|
|
|
|
+} EFI_LOCATE_SEARCH_TYPE;
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_LOCATE_HANDLE) (
|
|
|
|
+ IN EFI_LOCATE_SEARCH_TYPE SearchType,
|
|
|
|
+ IN EFI_GUID *Protocol OPTIONAL,
|
|
|
|
+ IN VOID *SearchKey OPTIONAL,
|
|
|
|
+ IN OUT UINTN *BufferSize,
|
|
|
|
+ OUT EFI_HANDLE *Buffer
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_LOCATE_DEVICE_PATH) (
|
|
|
|
+ IN EFI_GUID *Protocol,
|
|
|
|
+ IN OUT EFI_DEVICE_PATH **DevicePath,
|
|
|
|
+ OUT EFI_HANDLE *Device
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_INSTALL_CONFIGURATION_TABLE) (
|
|
|
|
+ IN EFI_GUID *Guid,
|
|
|
|
+ IN VOID *Table
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef VOID *EFI_RESERVED_SERVICE;
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// Standard EFI table header
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+typedef struct _EFI_TABLE_HEARDER {
|
|
|
|
+ UINT64 Signature;
|
|
|
|
+ UINT32 Revision;
|
|
|
|
+ UINT32 HeaderSize;
|
|
|
|
+ UINT32 CRC32;
|
|
|
|
+ UINT32 Reserved;
|
|
|
|
+} EFI_TABLE_HEADER;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// EFI Runtime Serivces Table
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+#define EFI_RUNTIME_SERVICES_SIGNATURE 0x56524553544e5552
|
|
|
|
+#define EFI_RUNTIME_SERVICES_REVISION (EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION)
|
|
|
|
+
|
|
|
|
+typedef struct {
|
|
|
|
+ EFI_TABLE_HEADER Hdr;
|
|
|
|
+
|
|
|
|
+ //
|
|
|
|
+ // Time services
|
|
|
|
+ //
|
|
|
|
+
|
|
|
|
+ EFI_GET_TIME GetTime;
|
|
|
|
+ EFI_SET_TIME SetTime;
|
|
|
|
+ EFI_GET_WAKEUP_TIME GetWakeupTime;
|
|
|
|
+ EFI_SET_WAKEUP_TIME SetWakeupTime;
|
|
|
|
+
|
|
|
|
+ //
|
|
|
|
+ // Virtual memory services
|
|
|
|
+ //
|
|
|
|
+
|
|
|
|
+ EFI_SET_VIRTUAL_ADDRESS_MAP SetVirtualAddressMap;
|
|
|
|
+ EFI_CONVERT_POINTER ConvertPointer;
|
|
|
|
+
|
|
|
|
+ //
|
|
|
|
+ // Variable serviers
|
|
|
|
+ //
|
|
|
|
+
|
|
|
|
+ EFI_GET_VARIABLE GetVariable;
|
|
|
|
+ EFI_GET_NEXT_VARIABLE_NAME GetNextVariableName;
|
|
|
|
+ EFI_SET_VARIABLE SetVariable;
|
|
|
|
+
|
|
|
|
+ //
|
|
|
|
+ // Misc
|
|
|
|
+ //
|
|
|
|
+
|
|
|
|
+ EFI_GET_NEXT_HIGH_MONO_COUNT GetNextHighMonotonicCount;
|
|
|
|
+ EFI_RESET_SYSTEM ResetSystem;
|
|
|
|
+
|
|
|
|
+} EFI_RUNTIME_SERVICES;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// EFI Boot Services Table
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+#define EFI_BOOT_SERVICES_SIGNATURE 0x56524553544f4f42
|
|
|
|
+#define EFI_BOOT_SERVICES_REVISION (EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION)
|
|
|
|
+
|
|
|
|
+typedef struct _EFI_BOOT_SERVICES {
|
|
|
|
+
|
|
|
|
+ EFI_TABLE_HEADER Hdr;
|
|
|
|
+
|
|
|
|
+ //
|
|
|
|
+ // Task priority functions
|
|
|
|
+ //
|
|
|
|
+
|
|
|
|
+ EFI_RAISE_TPL RaiseTPL;
|
|
|
|
+ EFI_RESTORE_TPL RestoreTPL;
|
|
|
|
+
|
|
|
|
+ //
|
|
|
|
+ // Memory functions
|
|
|
|
+ //
|
|
|
|
+
|
|
|
|
+ EFI_ALLOCATE_PAGES AllocatePages;
|
|
|
|
+ EFI_FREE_PAGES FreePages;
|
|
|
|
+ EFI_GET_MEMORY_MAP GetMemoryMap;
|
|
|
|
+ EFI_ALLOCATE_POOL AllocatePool;
|
|
|
|
+ EFI_FREE_POOL FreePool;
|
|
|
|
+
|
|
|
|
+ //
|
|
|
|
+ // Event & timer functions
|
|
|
|
+ //
|
|
|
|
+
|
|
|
|
+ EFI_CREATE_EVENT CreateEvent;
|
|
|
|
+ EFI_SET_TIMER SetTimer;
|
|
|
|
+ EFI_WAIT_FOR_EVENT WaitForEvent;
|
|
|
|
+ EFI_SIGNAL_EVENT SignalEvent;
|
|
|
|
+ EFI_CLOSE_EVENT CloseEvent;
|
|
|
|
+ EFI_CHECK_EVENT CheckEvent;
|
|
|
|
+
|
|
|
|
+ //
|
|
|
|
+ // Protocol handler functions
|
|
|
|
+ //
|
|
|
|
+
|
|
|
|
+ EFI_INSTALL_PROTOCOL_INTERFACE InstallProtocolInterface;
|
|
|
|
+ EFI_REINSTALL_PROTOCOL_INTERFACE ReinstallProtocolInterface;
|
|
|
|
+ EFI_UNINSTALL_PROTOCOL_INTERFACE UninstallProtocolInterface;
|
|
|
|
+ EFI_HANDLE_PROTOCOL HandleProtocol;
|
|
|
|
+ EFI_HANDLE_PROTOCOL PCHandleProtocol;
|
|
|
|
+ EFI_REGISTER_PROTOCOL_NOTIFY RegisterProtocolNotify;
|
|
|
|
+ EFI_LOCATE_HANDLE LocateHandle;
|
|
|
|
+ EFI_LOCATE_DEVICE_PATH LocateDevicePath;
|
|
|
|
+ EFI_INSTALL_CONFIGURATION_TABLE InstallConfigurationTable;
|
|
|
|
+
|
|
|
|
+ //
|
|
|
|
+ // Image functions
|
|
|
|
+ //
|
|
|
|
+
|
|
|
|
+ EFI_IMAGE_LOAD LoadImage;
|
|
|
|
+ EFI_IMAGE_START StartImage;
|
|
|
|
+ EFI_EXIT Exit;
|
|
|
|
+ EFI_IMAGE_UNLOAD UnloadImage;
|
|
|
|
+ EFI_EXIT_BOOT_SERVICES ExitBootServices;
|
|
|
|
+
|
|
|
|
+ //
|
|
|
|
+ // Misc functions
|
|
|
|
+ //
|
|
|
|
+
|
|
|
|
+ EFI_GET_NEXT_MONOTONIC_COUNT GetNextMonotonicCount;
|
|
|
|
+ EFI_STALL Stall;
|
|
|
|
+ EFI_SET_WATCHDOG_TIMER SetWatchdogTimer;
|
|
|
|
+
|
|
|
|
+} EFI_BOOT_SERVICES;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// EFI Configuration Table and GUID definitions
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+#define MPS_TABLE_GUID \
|
|
|
|
+ { 0xeb9d2d2f, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
|
|
|
|
+
|
|
|
|
+#define ACPI_TABLE_GUID \
|
|
|
|
+ { 0xeb9d2d30, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
|
|
|
|
+
|
|
|
|
+#define ACPI_20_TABLE_GUID \
|
|
|
|
+ { 0x8868e871, 0xe4f1, 0x11d3, {0xbc, 0x22, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81} }
|
|
|
|
+
|
|
|
|
+#define SMBIOS_TABLE_GUID \
|
|
|
|
+ { 0xeb9d2d31, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
|
|
|
|
+
|
|
|
|
+#define SAL_SYSTEM_TABLE_GUID \
|
|
|
|
+ { 0xeb9d2d32, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+typedef struct _EFI_CONFIGURATION_TABLE {
|
|
|
|
+ EFI_GUID VendorGuid;
|
|
|
|
+ VOID *VendorTable;
|
|
|
|
+} EFI_CONFIGURATION_TABLE;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// EFI System Table
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+#define EFI_SYSTEM_TABLE_SIGNATURE 0x5453595320494249
|
|
|
|
+#define EFI_SYSTEM_TABLE_REVISION (EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION)
|
|
|
|
+
|
|
|
|
+typedef struct _EFI_SYSTEM_TABLE {
|
|
|
|
+ EFI_TABLE_HEADER Hdr;
|
|
|
|
+
|
|
|
|
+ CHAR16 *FirmwareVendor;
|
|
|
|
+ UINT32 FirmwareRevision;
|
|
|
|
+
|
|
|
|
+ EFI_HANDLE ConsoleInHandle;
|
|
|
|
+ SIMPLE_INPUT_INTERFACE *ConIn;
|
|
|
|
+
|
|
|
|
+ EFI_HANDLE ConsoleOutHandle;
|
|
|
|
+ SIMPLE_TEXT_OUTPUT_INTERFACE *ConOut;
|
|
|
|
+
|
|
|
|
+ EFI_HANDLE StandardErrorHandle;
|
|
|
|
+ SIMPLE_TEXT_OUTPUT_INTERFACE *StdErr;
|
|
|
|
+
|
|
|
|
+ EFI_RUNTIME_SERVICES *RuntimeServices;
|
|
|
|
+ EFI_BOOT_SERVICES *BootServices;
|
|
|
|
+
|
|
|
|
+ UINTN NumberOfTableEntries;
|
|
|
|
+ EFI_CONFIGURATION_TABLE *ConfigurationTable;
|
|
|
|
+
|
|
|
|
+} EFI_SYSTEM_TABLE;
|
|
|
|
+
|
|
|
|
+#endif
|
|
|
|
+
|
2011-09-15 23:43:21 +02:00
|
|
|
Index: xen-4.1.2-testing/xen/include/efi/eficon.h
|
|
|
|
===================================================================
|
2011-07-01 21:31:25 +02:00
|
|
|
--- /dev/null
|
2011-09-15 23:43:21 +02:00
|
|
|
+++ xen-4.1.2-testing/xen/include/efi/eficon.h
|
2011-07-01 21:31:25 +02:00
|
|
|
@@ -0,0 +1,302 @@
|
|
|
|
+#ifndef _EFI_CON_H
|
|
|
|
+#define _EFI_CON_H
|
|
|
|
+
|
|
|
|
+/*++
|
|
|
|
+
|
|
|
|
+Copyright (c) 1998 Intel Corporation
|
|
|
|
+
|
|
|
|
+Module Name:
|
|
|
|
+
|
|
|
|
+ eficon.h
|
|
|
|
+
|
|
|
|
+Abstract:
|
|
|
|
+
|
|
|
|
+ EFI console protocols
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+Revision History
|
|
|
|
+
|
|
|
|
+--*/
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// Text output protocol
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+#define SIMPLE_TEXT_OUTPUT_PROTOCOL \
|
|
|
|
+ { 0x387477c2, 0x69c7, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
|
|
|
|
+
|
|
|
|
+INTERFACE_DECL(_SIMPLE_TEXT_OUTPUT_INTERFACE);
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_TEXT_RESET) (
|
|
|
|
+ IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This,
|
|
|
|
+ IN BOOLEAN ExtendedVerification
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_TEXT_OUTPUT_STRING) (
|
|
|
|
+ IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This,
|
|
|
|
+ IN CHAR16 *String
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_TEXT_TEST_STRING) (
|
|
|
|
+ IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This,
|
|
|
|
+ IN CHAR16 *String
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_TEXT_QUERY_MODE) (
|
|
|
|
+ IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This,
|
|
|
|
+ IN UINTN ModeNumber,
|
|
|
|
+ OUT UINTN *Columns,
|
|
|
|
+ OUT UINTN *Rows
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_TEXT_SET_MODE) (
|
|
|
|
+ IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This,
|
|
|
|
+ IN UINTN ModeNumber
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_TEXT_SET_ATTRIBUTE) (
|
|
|
|
+ IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This,
|
|
|
|
+ IN UINTN Attribute
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+#define EFI_BLACK 0x00
|
|
|
|
+#define EFI_BLUE 0x01
|
|
|
|
+#define EFI_GREEN 0x02
|
|
|
|
+#define EFI_CYAN (EFI_BLUE | EFI_GREEN)
|
|
|
|
+#define EFI_RED 0x04
|
|
|
|
+#define EFI_MAGENTA (EFI_BLUE | EFI_RED)
|
|
|
|
+#define EFI_BROWN (EFI_GREEN | EFI_RED)
|
|
|
|
+#define EFI_LIGHTGRAY (EFI_BLUE | EFI_GREEN | EFI_RED)
|
|
|
|
+#define EFI_BRIGHT 0x08
|
|
|
|
+#define EFI_DARKGRAY (EFI_BRIGHT)
|
|
|
|
+#define EFI_LIGHTBLUE (EFI_BLUE | EFI_BRIGHT)
|
|
|
|
+#define EFI_LIGHTGREEN (EFI_GREEN | EFI_BRIGHT)
|
|
|
|
+#define EFI_LIGHTCYAN (EFI_CYAN | EFI_BRIGHT)
|
|
|
|
+#define EFI_LIGHTRED (EFI_RED | EFI_BRIGHT)
|
|
|
|
+#define EFI_LIGHTMAGENTA (EFI_MAGENTA | EFI_BRIGHT)
|
|
|
|
+#define EFI_YELLOW (EFI_BROWN | EFI_BRIGHT)
|
|
|
|
+#define EFI_WHITE (EFI_BLUE | EFI_GREEN | EFI_RED | EFI_BRIGHT)
|
|
|
|
+
|
|
|
|
+#define EFI_TEXT_ATTR(f,b) ((f) | ((b) << 4))
|
|
|
|
+
|
|
|
|
+#define EFI_BACKGROUND_BLACK 0x00
|
|
|
|
+#define EFI_BACKGROUND_BLUE 0x10
|
|
|
|
+#define EFI_BACKGROUND_GREEN 0x20
|
|
|
|
+#define EFI_BACKGROUND_CYAN (EFI_BACKGROUND_BLUE | EFI_BACKGROUND_GREEN)
|
|
|
|
+#define EFI_BACKGROUND_RED 0x40
|
|
|
|
+#define EFI_BACKGROUND_MAGENTA (EFI_BACKGROUND_BLUE | EFI_BACKGROUND_RED)
|
|
|
|
+#define EFI_BACKGROUND_BROWN (EFI_BACKGROUND_GREEN | EFI_BACKGROUND_RED)
|
|
|
|
+#define EFI_BACKGROUND_LIGHTGRAY (EFI_BACKGROUND_BLUE | EFI_BACKGROUND_GREEN | EFI_BACKGROUND_RED)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_TEXT_CLEAR_SCREEN) (
|
|
|
|
+ IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_TEXT_SET_CURSOR_POSITION) (
|
|
|
|
+ IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This,
|
|
|
|
+ IN UINTN Column,
|
|
|
|
+ IN UINTN Row
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_TEXT_ENABLE_CURSOR) (
|
|
|
|
+ IN struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This,
|
|
|
|
+ IN BOOLEAN Enable
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef struct {
|
|
|
|
+ INT32 MaxMode;
|
|
|
|
+ // current settings
|
|
|
|
+ INT32 Mode;
|
|
|
|
+ INT32 Attribute;
|
|
|
|
+ INT32 CursorColumn;
|
|
|
|
+ INT32 CursorRow;
|
|
|
|
+ BOOLEAN CursorVisible;
|
|
|
|
+} SIMPLE_TEXT_OUTPUT_MODE;
|
|
|
|
+
|
|
|
|
+typedef struct _SIMPLE_TEXT_OUTPUT_INTERFACE {
|
|
|
|
+ EFI_TEXT_RESET Reset;
|
|
|
|
+
|
|
|
|
+ EFI_TEXT_OUTPUT_STRING OutputString;
|
|
|
|
+ EFI_TEXT_TEST_STRING TestString;
|
|
|
|
+
|
|
|
|
+ EFI_TEXT_QUERY_MODE QueryMode;
|
|
|
|
+ EFI_TEXT_SET_MODE SetMode;
|
|
|
|
+ EFI_TEXT_SET_ATTRIBUTE SetAttribute;
|
|
|
|
+
|
|
|
|
+ EFI_TEXT_CLEAR_SCREEN ClearScreen;
|
|
|
|
+ EFI_TEXT_SET_CURSOR_POSITION SetCursorPosition;
|
|
|
|
+ EFI_TEXT_ENABLE_CURSOR EnableCursor;
|
|
|
|
+
|
|
|
|
+ // Current mode
|
|
|
|
+ SIMPLE_TEXT_OUTPUT_MODE *Mode;
|
|
|
|
+} SIMPLE_TEXT_OUTPUT_INTERFACE;
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// Define's for required EFI Unicode Box Draw character
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+#define BOXDRAW_HORIZONTAL 0x2500
|
|
|
|
+#define BOXDRAW_VERTICAL 0x2502
|
|
|
|
+#define BOXDRAW_DOWN_RIGHT 0x250c
|
|
|
|
+#define BOXDRAW_DOWN_LEFT 0x2510
|
|
|
|
+#define BOXDRAW_UP_RIGHT 0x2514
|
|
|
|
+#define BOXDRAW_UP_LEFT 0x2518
|
|
|
|
+#define BOXDRAW_VERTICAL_RIGHT 0x251c
|
|
|
|
+#define BOXDRAW_VERTICAL_LEFT 0x2524
|
|
|
|
+#define BOXDRAW_DOWN_HORIZONTAL 0x252c
|
|
|
|
+#define BOXDRAW_UP_HORIZONTAL 0x2534
|
|
|
|
+#define BOXDRAW_VERTICAL_HORIZONTAL 0x253c
|
|
|
|
+
|
|
|
|
+#define BOXDRAW_DOUBLE_HORIZONTAL 0x2550
|
|
|
|
+#define BOXDRAW_DOUBLE_VERTICAL 0x2551
|
|
|
|
+#define BOXDRAW_DOWN_RIGHT_DOUBLE 0x2552
|
|
|
|
+#define BOXDRAW_DOWN_DOUBLE_RIGHT 0x2553
|
|
|
|
+#define BOXDRAW_DOUBLE_DOWN_RIGHT 0x2554
|
|
|
|
+
|
|
|
|
+#define BOXDRAW_DOWN_LEFT_DOUBLE 0x2555
|
|
|
|
+#define BOXDRAW_DOWN_DOUBLE_LEFT 0x2556
|
|
|
|
+#define BOXDRAW_DOUBLE_DOWN_LEFT 0x2557
|
|
|
|
+
|
|
|
|
+#define BOXDRAW_UP_RIGHT_DOUBLE 0x2558
|
|
|
|
+#define BOXDRAW_UP_DOUBLE_RIGHT 0x2559
|
|
|
|
+#define BOXDRAW_DOUBLE_UP_RIGHT 0x255a
|
|
|
|
+
|
|
|
|
+#define BOXDRAW_UP_LEFT_DOUBLE 0x255b
|
|
|
|
+#define BOXDRAW_UP_DOUBLE_LEFT 0x255c
|
|
|
|
+#define BOXDRAW_DOUBLE_UP_LEFT 0x255d
|
|
|
|
+
|
|
|
|
+#define BOXDRAW_VERTICAL_RIGHT_DOUBLE 0x255e
|
|
|
|
+#define BOXDRAW_VERTICAL_DOUBLE_RIGHT 0x255f
|
|
|
|
+#define BOXDRAW_DOUBLE_VERTICAL_RIGHT 0x2560
|
|
|
|
+
|
|
|
|
+#define BOXDRAW_VERTICAL_LEFT_DOUBLE 0x2561
|
|
|
|
+#define BOXDRAW_VERTICAL_DOUBLE_LEFT 0x2562
|
|
|
|
+#define BOXDRAW_DOUBLE_VERTICAL_LEFT 0x2563
|
|
|
|
+
|
|
|
|
+#define BOXDRAW_DOWN_HORIZONTAL_DOUBLE 0x2564
|
|
|
|
+#define BOXDRAW_DOWN_DOUBLE_HORIZONTAL 0x2565
|
|
|
|
+#define BOXDRAW_DOUBLE_DOWN_HORIZONTAL 0x2566
|
|
|
|
+
|
|
|
|
+#define BOXDRAW_UP_HORIZONTAL_DOUBLE 0x2567
|
|
|
|
+#define BOXDRAW_UP_DOUBLE_HORIZONTAL 0x2568
|
|
|
|
+#define BOXDRAW_DOUBLE_UP_HORIZONTAL 0x2569
|
|
|
|
+
|
|
|
|
+#define BOXDRAW_VERTICAL_HORIZONTAL_DOUBLE 0x256a
|
|
|
|
+#define BOXDRAW_VERTICAL_DOUBLE_HORIZONTAL 0x256b
|
|
|
|
+#define BOXDRAW_DOUBLE_VERTICAL_HORIZONTAL 0x256c
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// EFI Required Block Elements Code Chart
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+#define BLOCKELEMENT_FULL_BLOCK 0x2588
|
|
|
|
+#define BLOCKELEMENT_LIGHT_SHADE 0x2591
|
|
|
|
+//
|
|
|
|
+// EFI Required Geometric Shapes Code Chart
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+#define GEOMETRICSHAPE_UP_TRIANGLE 0x25b2
|
|
|
|
+#define GEOMETRICSHAPE_RIGHT_TRIANGLE 0x25ba
|
|
|
|
+#define GEOMETRICSHAPE_DOWN_TRIANGLE 0x25bc
|
|
|
|
+#define GEOMETRICSHAPE_LEFT_TRIANGLE 0x25c4
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// EFI Required Arrow shapes
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+#define ARROW_UP 0x2191
|
|
|
|
+#define ARROW_DOWN 0x2193
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// Text input protocol
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+#define SIMPLE_TEXT_INPUT_PROTOCOL \
|
|
|
|
+ { 0x387477c1, 0x69c7, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
|
|
|
|
+
|
|
|
|
+INTERFACE_DECL(_SIMPLE_INPUT_INTERFACE);
|
|
|
|
+
|
|
|
|
+typedef struct {
|
|
|
|
+ UINT16 ScanCode;
|
|
|
|
+ CHAR16 UnicodeChar;
|
|
|
|
+} EFI_INPUT_KEY;
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// Baseline unicode control chars
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+#define CHAR_NULL 0x0000
|
|
|
|
+#define CHAR_BACKSPACE 0x0008
|
|
|
|
+#define CHAR_TAB 0x0009
|
|
|
|
+#define CHAR_LINEFEED 0x000A
|
|
|
|
+#define CHAR_CARRIAGE_RETURN 0x000D
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// Scan codes for base line keys
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+#define SCAN_NULL 0x0000
|
|
|
|
+#define SCAN_UP 0x0001
|
|
|
|
+#define SCAN_DOWN 0x0002
|
|
|
|
+#define SCAN_RIGHT 0x0003
|
|
|
|
+#define SCAN_LEFT 0x0004
|
|
|
|
+#define SCAN_HOME 0x0005
|
|
|
|
+#define SCAN_END 0x0006
|
|
|
|
+#define SCAN_INSERT 0x0007
|
|
|
|
+#define SCAN_DELETE 0x0008
|
|
|
|
+#define SCAN_PAGE_UP 0x0009
|
|
|
|
+#define SCAN_PAGE_DOWN 0x000A
|
|
|
|
+#define SCAN_F1 0x000B
|
|
|
|
+#define SCAN_F2 0x000C
|
|
|
|
+#define SCAN_F3 0x000D
|
|
|
|
+#define SCAN_F4 0x000E
|
|
|
|
+#define SCAN_F5 0x000F
|
|
|
|
+#define SCAN_F6 0x0010
|
|
|
|
+#define SCAN_F7 0x0011
|
|
|
|
+#define SCAN_F8 0x0012
|
|
|
|
+#define SCAN_F9 0x0013
|
|
|
|
+#define SCAN_F10 0x0014
|
|
|
|
+#define SCAN_ESC 0x0017
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_INPUT_RESET) (
|
|
|
|
+ IN struct _SIMPLE_INPUT_INTERFACE *This,
|
|
|
|
+ IN BOOLEAN ExtendedVerification
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_INPUT_READ_KEY) (
|
|
|
|
+ IN struct _SIMPLE_INPUT_INTERFACE *This,
|
|
|
|
+ OUT EFI_INPUT_KEY *Key
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef struct _SIMPLE_INPUT_INTERFACE {
|
|
|
|
+ EFI_INPUT_RESET Reset;
|
|
|
|
+ EFI_INPUT_READ_KEY ReadKeyStroke;
|
|
|
|
+ EFI_EVENT WaitForKey;
|
|
|
|
+} SIMPLE_INPUT_INTERFACE;
|
|
|
|
+
|
|
|
|
+#endif
|
|
|
|
+
|
2011-09-15 23:43:21 +02:00
|
|
|
Index: xen-4.1.2-testing/xen/include/efi/efidef.h
|
|
|
|
===================================================================
|
2011-07-01 21:31:25 +02:00
|
|
|
--- /dev/null
|
2011-09-15 23:43:21 +02:00
|
|
|
+++ xen-4.1.2-testing/xen/include/efi/efidef.h
|
2011-07-01 21:31:25 +02:00
|
|
|
@@ -0,0 +1,196 @@
|
|
|
|
+#ifndef _EFI_DEF_H
|
|
|
|
+#define _EFI_DEF_H
|
|
|
|
+
|
|
|
|
+/*++
|
|
|
|
+
|
|
|
|
+Copyright (c) 1998 Intel Corporation
|
|
|
|
+
|
|
|
|
+Module Name:
|
|
|
|
+
|
|
|
|
+ efidef.h
|
|
|
|
+
|
|
|
|
+Abstract:
|
|
|
|
+
|
|
|
|
+ EFI definitions
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+Revision History
|
|
|
|
+
|
|
|
|
+--*/
|
|
|
|
+
|
|
|
|
+typedef UINT16 CHAR16;
|
|
|
|
+typedef UINT8 CHAR8;
|
|
|
|
+typedef UINT8 BOOLEAN;
|
|
|
|
+
|
|
|
|
+#ifndef TRUE
|
|
|
|
+ #define TRUE ((BOOLEAN) 1)
|
|
|
|
+ #define FALSE ((BOOLEAN) 0)
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
+#ifndef NULL
|
|
|
|
+ #define NULL ((VOID *) 0)
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
+typedef UINTN EFI_STATUS;
|
|
|
|
+typedef UINT64 EFI_LBA;
|
|
|
|
+typedef UINTN EFI_TPL;
|
|
|
|
+typedef VOID *EFI_HANDLE;
|
|
|
|
+typedef VOID *EFI_EVENT;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// Prototype argument decoration for EFI parameters to indicate
|
|
|
|
+// their direction
|
|
|
|
+//
|
|
|
|
+// IN - argument is passed into the function
|
|
|
|
+// OUT - argument (pointer) is returned from the function
|
|
|
|
+// OPTIONAL - argument is optional
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+#ifndef IN
|
|
|
|
+ #define IN
|
|
|
|
+ #define OUT
|
|
|
|
+ #define OPTIONAL
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// A GUID
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+typedef struct {
|
|
|
|
+ UINT32 Data1;
|
|
|
|
+ UINT16 Data2;
|
|
|
|
+ UINT16 Data3;
|
|
|
|
+ UINT8 Data4[8];
|
|
|
|
+} EFI_GUID;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// Time
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+typedef struct {
|
|
|
|
+ UINT16 Year; // 1998 - 20XX
|
|
|
|
+ UINT8 Month; // 1 - 12
|
|
|
|
+ UINT8 Day; // 1 - 31
|
|
|
|
+ UINT8 Hour; // 0 - 23
|
|
|
|
+ UINT8 Minute; // 0 - 59
|
|
|
|
+ UINT8 Second; // 0 - 59
|
|
|
|
+ UINT8 Pad1;
|
|
|
|
+ UINT32 Nanosecond; // 0 - 999,999,999
|
|
|
|
+ INT16 TimeZone; // -1440 to 1440 or 2047
|
|
|
|
+ UINT8 Daylight;
|
|
|
|
+ UINT8 Pad2;
|
|
|
|
+} EFI_TIME;
|
|
|
|
+
|
|
|
|
+// Bit definitions for EFI_TIME.Daylight
|
|
|
|
+#define EFI_TIME_ADJUST_DAYLIGHT 0x01
|
|
|
|
+#define EFI_TIME_IN_DAYLIGHT 0x02
|
|
|
|
+
|
|
|
|
+// Value definition for EFI_TIME.TimeZone
|
|
|
|
+#define EFI_UNSPECIFIED_TIMEZONE 0x07FF
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// Networking
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+typedef struct {
|
|
|
|
+ UINT8 Addr[4];
|
|
|
|
+} EFI_IPv4_ADDRESS;
|
|
|
|
+
|
|
|
|
+typedef struct {
|
|
|
|
+ UINT8 Addr[16];
|
|
|
|
+} EFI_IPv6_ADDRESS;
|
|
|
|
+
|
|
|
|
+typedef struct {
|
|
|
|
+ UINT8 Addr[32];
|
|
|
|
+} EFI_MAC_ADDRESS;
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// Memory
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+typedef UINT64 EFI_PHYSICAL_ADDRESS;
|
|
|
|
+typedef UINT64 EFI_VIRTUAL_ADDRESS;
|
|
|
|
+
|
|
|
|
+typedef enum {
|
|
|
|
+ AllocateAnyPages,
|
|
|
|
+ AllocateMaxAddress,
|
|
|
|
+ AllocateAddress,
|
|
|
|
+ MaxAllocateType
|
|
|
|
+} EFI_ALLOCATE_TYPE;
|
|
|
|
+
|
|
|
|
+//Preseve the attr on any range supplied.
|
|
|
|
+//ConventialMemory must have WB,SR,SW when supplied.
|
|
|
|
+//When allocating from ConventialMemory always make it WB,SR,SW
|
|
|
|
+//When returning to ConventialMemory always make it WB,SR,SW
|
|
|
|
+//When getting the memory map, or on RT for runtime types
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+typedef enum {
|
|
|
|
+ EfiReservedMemoryType,
|
|
|
|
+ EfiLoaderCode,
|
|
|
|
+ EfiLoaderData,
|
|
|
|
+ EfiBootServicesCode,
|
|
|
|
+ EfiBootServicesData,
|
|
|
|
+ EfiRuntimeServicesCode,
|
|
|
|
+ EfiRuntimeServicesData,
|
|
|
|
+ EfiConventionalMemory,
|
|
|
|
+ EfiUnusableMemory,
|
|
|
|
+ EfiACPIReclaimMemory,
|
|
|
|
+ EfiACPIMemoryNVS,
|
|
|
|
+ EfiMemoryMappedIO,
|
|
|
|
+ EfiMemoryMappedIOPortSpace,
|
|
|
|
+ EfiPalCode,
|
|
|
|
+ EfiMaxMemoryType
|
|
|
|
+} EFI_MEMORY_TYPE;
|
|
|
|
+
|
|
|
|
+// possible caching types for the memory range
|
|
|
|
+#define EFI_MEMORY_UC 0x0000000000000001
|
|
|
|
+#define EFI_MEMORY_WC 0x0000000000000002
|
|
|
|
+#define EFI_MEMORY_WT 0x0000000000000004
|
|
|
|
+#define EFI_MEMORY_WB 0x0000000000000008
|
|
|
|
+#define EFI_MEMORY_UCE 0x0000000000000010
|
|
|
|
+
|
|
|
|
+// physical memory protection on range
|
|
|
|
+#define EFI_MEMORY_WP 0x0000000000001000
|
|
|
|
+#define EFI_MEMORY_RP 0x0000000000002000
|
|
|
|
+#define EFI_MEMORY_XP 0x0000000000004000
|
|
|
|
+
|
|
|
|
+// range requires a runtime mapping
|
|
|
|
+#define EFI_MEMORY_RUNTIME 0x8000000000000000
|
|
|
|
+
|
|
|
|
+#define EFI_MEMORY_DESCRIPTOR_VERSION 1
|
|
|
|
+typedef struct {
|
|
|
|
+ UINT32 Type; // Field size is 32 bits followed by 32 bit pad
|
|
|
|
+ UINT32 Pad;
|
|
|
|
+ EFI_PHYSICAL_ADDRESS PhysicalStart; // Field size is 64 bits
|
|
|
|
+ EFI_VIRTUAL_ADDRESS VirtualStart; // Field size is 64 bits
|
|
|
|
+ UINT64 NumberOfPages; // Field size is 64 bits
|
|
|
|
+ UINT64 Attribute; // Field size is 64 bits
|
|
|
|
+} EFI_MEMORY_DESCRIPTOR;
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// International Language
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+typedef UINT8 ISO_639_2;
|
|
|
|
+#define ISO_639_2_ENTRY_SIZE 3
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+//
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+#define EFI_PAGE_SIZE 4096
|
|
|
|
+#define EFI_PAGE_MASK 0xFFF
|
|
|
|
+#define EFI_PAGE_SHIFT 12
|
|
|
|
+
|
|
|
|
+#define EFI_SIZE_TO_PAGES(a) \
|
|
|
|
+ ( ((a) >> EFI_PAGE_SHIFT) + ((a) & EFI_PAGE_MASK ? 1 : 0) )
|
|
|
|
+
|
|
|
|
+#endif
|
2011-09-15 23:43:21 +02:00
|
|
|
Index: xen-4.1.2-testing/xen/include/efi/efidevp.h
|
|
|
|
===================================================================
|
2011-07-01 21:31:25 +02:00
|
|
|
--- /dev/null
|
2011-09-15 23:43:21 +02:00
|
|
|
+++ xen-4.1.2-testing/xen/include/efi/efidevp.h
|
2011-07-01 21:31:25 +02:00
|
|
|
@@ -0,0 +1,402 @@
|
|
|
|
+#ifndef _DEVPATH_H
|
|
|
|
+#define _DEVPATH_H
|
|
|
|
+
|
|
|
|
+/*++
|
|
|
|
+
|
|
|
|
+Copyright (c) 1998 Intel Corporation
|
|
|
|
+
|
|
|
|
+Module Name:
|
|
|
|
+
|
|
|
|
+ devpath.h
|
|
|
|
+
|
|
|
|
+Abstract:
|
|
|
|
+
|
|
|
|
+ Defines for parsing the EFI Device Path structures
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+Revision History
|
|
|
|
+
|
|
|
|
+--*/
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// Device Path structures - Section C
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+typedef struct _EFI_DEVICE_PATH {
|
|
|
|
+ UINT8 Type;
|
|
|
|
+ UINT8 SubType;
|
|
|
|
+ UINT8 Length[2];
|
|
|
|
+} EFI_DEVICE_PATH;
|
|
|
|
+
|
|
|
|
+#define EFI_DP_TYPE_MASK 0x7F
|
|
|
|
+#define EFI_DP_TYPE_UNPACKED 0x80
|
|
|
|
+
|
|
|
|
+//#define END_DEVICE_PATH_TYPE 0xff
|
|
|
|
+#define END_DEVICE_PATH_TYPE 0x7f
|
|
|
|
+//#define END_DEVICE_PATH_TYPE_UNPACKED 0x7f
|
|
|
|
+
|
|
|
|
+#define END_ENTIRE_DEVICE_PATH_SUBTYPE 0xff
|
|
|
|
+#define END_INSTANCE_DEVICE_PATH_SUBTYPE 0x01
|
|
|
|
+#define END_DEVICE_PATH_LENGTH (sizeof(EFI_DEVICE_PATH))
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+#define DP_IS_END_TYPE(a)
|
|
|
|
+#define DP_IS_END_SUBTYPE(a) ( ((a)->SubType == END_ENTIRE_DEVICE_PATH_SUBTYPE )
|
|
|
|
+
|
|
|
|
+#define DevicePathType(a) ( ((a)->Type) & EFI_DP_TYPE_MASK )
|
|
|
|
+#define DevicePathSubType(a) ( (a)->SubType )
|
|
|
|
+#define DevicePathNodeLength(a) ( ((a)->Length[0]) | ((a)->Length[1] << 8) )
|
|
|
|
+#define NextDevicePathNode(a) ( (EFI_DEVICE_PATH *) ( ((UINT8 *) (a)) + DevicePathNodeLength(a)))
|
|
|
|
+//#define IsDevicePathEndType(a) ( DevicePathType(a) == END_DEVICE_PATH_TYPE_UNPACKED )
|
|
|
|
+#define IsDevicePathEndType(a) ( DevicePathType(a) == END_DEVICE_PATH_TYPE )
|
|
|
|
+#define IsDevicePathEndSubType(a) ( (a)->SubType == END_ENTIRE_DEVICE_PATH_SUBTYPE )
|
|
|
|
+#define IsDevicePathEnd(a) ( IsDevicePathEndType(a) && IsDevicePathEndSubType(a) )
|
|
|
|
+#define IsDevicePathUnpacked(a) ( (a)->Type & EFI_DP_TYPE_UNPACKED )
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+#define SetDevicePathNodeLength(a,l) { \
|
|
|
|
+ (a)->Length[0] = (UINT8) (l); \
|
|
|
|
+ (a)->Length[1] = (UINT8) ((l) >> 8); \
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+#define SetDevicePathEndNode(a) { \
|
|
|
|
+ (a)->Type = END_DEVICE_PATH_TYPE; \
|
|
|
|
+ (a)->SubType = END_ENTIRE_DEVICE_PATH_SUBTYPE; \
|
|
|
|
+ (a)->Length[0] = sizeof(EFI_DEVICE_PATH); \
|
|
|
|
+ (a)->Length[1] = 0; \
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
+ *
|
|
|
|
+ */
|
|
|
|
+#define HARDWARE_DEVICE_PATH 0x01
|
|
|
|
+
|
|
|
|
+#define HW_PCI_DP 0x01
|
|
|
|
+typedef struct _PCI_DEVICE_PATH {
|
|
|
|
+ EFI_DEVICE_PATH Header;
|
|
|
|
+ UINT8 Function;
|
|
|
|
+ UINT8 Device;
|
|
|
|
+} PCI_DEVICE_PATH;
|
|
|
|
+
|
|
|
|
+#define HW_PCCARD_DP 0x02
|
|
|
|
+typedef struct _PCCARD_DEVICE_PATH {
|
|
|
|
+ EFI_DEVICE_PATH Header;
|
|
|
|
+ UINT8 SocketNumber;
|
|
|
|
+} PCCARD_DEVICE_PATH;
|
|
|
|
+
|
|
|
|
+#define HW_MEMMAP_DP 0x03
|
|
|
|
+typedef struct _MEMMAP_DEVICE_PATH {
|
|
|
|
+ EFI_DEVICE_PATH Header;
|
|
|
|
+ UINT32 MemoryType;
|
|
|
|
+ EFI_PHYSICAL_ADDRESS StartingAddress;
|
|
|
|
+ EFI_PHYSICAL_ADDRESS EndingAddress;
|
|
|
|
+} MEMMAP_DEVICE_PATH;
|
|
|
|
+
|
|
|
|
+#define HW_VENDOR_DP 0x04
|
|
|
|
+typedef struct _VENDOR_DEVICE_PATH {
|
|
|
|
+ EFI_DEVICE_PATH Header;
|
|
|
|
+ EFI_GUID Guid;
|
|
|
|
+} VENDOR_DEVICE_PATH;
|
|
|
|
+
|
|
|
|
+#define UNKNOWN_DEVICE_GUID \
|
|
|
|
+ { 0xcf31fac5, 0xc24e, 0x11d2, {0x85, 0xf3, 0x0, 0xa0, 0xc9, 0x3e, 0xc9, 0x3b} }
|
|
|
|
+
|
|
|
|
+typedef struct _UKNOWN_DEVICE_VENDOR_DP {
|
|
|
|
+ VENDOR_DEVICE_PATH DevicePath;
|
|
|
|
+ UINT8 LegacyDriveLetter;
|
|
|
|
+} UNKNOWN_DEVICE_VENDOR_DEVICE_PATH;
|
|
|
|
+
|
|
|
|
+#define HW_CONTROLLER_DP 0x05
|
|
|
|
+typedef struct _CONTROLLER_DEVICE_PATH {
|
|
|
|
+ EFI_DEVICE_PATH Header;
|
|
|
|
+ UINT32 Controller;
|
|
|
|
+} CONTROLLER_DEVICE_PATH;
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
+ *
|
|
|
|
+ */
|
|
|
|
+#define ACPI_DEVICE_PATH 0x02
|
|
|
|
+
|
|
|
|
+#define ACPI_DP 0x01
|
|
|
|
+typedef struct _ACPI_HID_DEVICE_PATH {
|
|
|
|
+ EFI_DEVICE_PATH Header;
|
|
|
|
+ UINT32 HID;
|
|
|
|
+ UINT32 UID;
|
|
|
|
+} ACPI_HID_DEVICE_PATH;
|
|
|
|
+
|
|
|
|
+#define EXPANDED_ACPI_DP 0x02
|
|
|
|
+typedef struct _EXPANDED_ACPI_HID_DEVICE_PATH {
|
|
|
|
+ EFI_DEVICE_PATH Header;
|
|
|
|
+ UINT32 HID;
|
|
|
|
+ UINT32 UID;
|
|
|
|
+ UINT32 CID;
|
|
|
|
+ UINT8 HidStr[1];
|
|
|
|
+} EXPANDED_ACPI_HID_DEVICE_PATH;
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// EISA ID Macro
|
|
|
|
+// EISA ID Definition 32-bits
|
|
|
|
+// bits[15:0] - three character compressed ASCII EISA ID.
|
|
|
|
+// bits[31:16] - binary number
|
|
|
|
+// Compressed ASCII is 5 bits per character 0b00001 = 'A' 0b11010 = 'Z'
|
|
|
|
+//
|
|
|
|
+#define PNP_EISA_ID_CONST 0x41d0
|
|
|
|
+#define EISA_ID(_Name, _Num) ((UINT32) ((_Name) | (_Num) << 16))
|
|
|
|
+#define EISA_PNP_ID(_PNPId) (EISA_ID(PNP_EISA_ID_CONST, (_PNPId)))
|
|
|
|
+
|
|
|
|
+#define PNP_EISA_ID_MASK 0xffff
|
|
|
|
+#define EISA_ID_TO_NUM(_Id) ((_Id) >> 16)
|
|
|
|
+/*
|
|
|
|
+ *
|
|
|
|
+ */
|
|
|
|
+#define MESSAGING_DEVICE_PATH 0x03
|
|
|
|
+
|
|
|
|
+#define MSG_ATAPI_DP 0x01
|
|
|
|
+typedef struct _ATAPI_DEVICE_PATH {
|
|
|
|
+ EFI_DEVICE_PATH Header;
|
|
|
|
+ UINT8 PrimarySecondary;
|
|
|
|
+ UINT8 SlaveMaster;
|
|
|
|
+ UINT16 Lun;
|
|
|
|
+} ATAPI_DEVICE_PATH;
|
|
|
|
+
|
|
|
|
+#define MSG_SCSI_DP 0x02
|
|
|
|
+typedef struct _SCSI_DEVICE_PATH {
|
|
|
|
+ EFI_DEVICE_PATH Header;
|
|
|
|
+ UINT16 Pun;
|
|
|
|
+ UINT16 Lun;
|
|
|
|
+} SCSI_DEVICE_PATH;
|
|
|
|
+
|
|
|
|
+#define MSG_FIBRECHANNEL_DP 0x03
|
|
|
|
+typedef struct _FIBRECHANNEL_DEVICE_PATH {
|
|
|
|
+ EFI_DEVICE_PATH Header;
|
|
|
|
+ UINT32 Reserved;
|
|
|
|
+ UINT64 WWN;
|
|
|
|
+ UINT64 Lun;
|
|
|
|
+} FIBRECHANNEL_DEVICE_PATH;
|
|
|
|
+
|
|
|
|
+#define MSG_1394_DP 0x04
|
|
|
|
+typedef struct _F1394_DEVICE_PATH {
|
|
|
|
+ EFI_DEVICE_PATH Header;
|
|
|
|
+ UINT32 Reserved;
|
|
|
|
+ UINT64 Guid;
|
|
|
|
+} F1394_DEVICE_PATH;
|
|
|
|
+
|
|
|
|
+#define MSG_USB_DP 0x05
|
|
|
|
+typedef struct _USB_DEVICE_PATH {
|
|
|
|
+ EFI_DEVICE_PATH Header;
|
|
|
|
+ UINT8 Port;
|
|
|
|
+ UINT8 Endpoint;
|
|
|
|
+} USB_DEVICE_PATH;
|
|
|
|
+
|
|
|
|
+#define MSG_USB_CLASS_DP 0x0F
|
|
|
|
+typedef struct _USB_CLASS_DEVICE_PATH {
|
|
|
|
+ EFI_DEVICE_PATH Header;
|
|
|
|
+ UINT16 VendorId;
|
|
|
|
+ UINT16 ProductId;
|
|
|
|
+ UINT8 DeviceClass;
|
|
|
|
+ UINT8 DeviceSubclass;
|
|
|
|
+ UINT8 DeviceProtocol;
|
|
|
|
+} USB_CLASS_DEVICE_PATH;
|
|
|
|
+
|
|
|
|
+#define MSG_I2O_DP 0x06
|
|
|
|
+typedef struct _I2O_DEVICE_PATH {
|
|
|
|
+ EFI_DEVICE_PATH Header;
|
|
|
|
+ UINT32 Tid;
|
|
|
|
+} I2O_DEVICE_PATH;
|
|
|
|
+
|
|
|
|
+#define MSG_MAC_ADDR_DP 0x0b
|
|
|
|
+typedef struct _MAC_ADDR_DEVICE_PATH {
|
|
|
|
+ EFI_DEVICE_PATH Header;
|
|
|
|
+ EFI_MAC_ADDRESS MacAddress;
|
|
|
|
+ UINT8 IfType;
|
|
|
|
+} MAC_ADDR_DEVICE_PATH;
|
|
|
|
+
|
|
|
|
+#define MSG_IPv4_DP 0x0c
|
|
|
|
+typedef struct _IPv4_DEVICE_PATH {
|
|
|
|
+ EFI_DEVICE_PATH Header;
|
|
|
|
+ EFI_IPv4_ADDRESS LocalIpAddress;
|
|
|
|
+ EFI_IPv4_ADDRESS RemoteIpAddress;
|
|
|
|
+ UINT16 LocalPort;
|
|
|
|
+ UINT16 RemotePort;
|
|
|
|
+ UINT16 Protocol;
|
|
|
|
+ BOOLEAN StaticIpAddress;
|
|
|
|
+} IPv4_DEVICE_PATH;
|
|
|
|
+
|
|
|
|
+#define MSG_IPv6_DP 0x0d
|
|
|
|
+typedef struct _IPv6_DEVICE_PATH {
|
|
|
|
+ EFI_DEVICE_PATH Header;
|
|
|
|
+ EFI_IPv6_ADDRESS LocalIpAddress;
|
|
|
|
+ EFI_IPv6_ADDRESS RemoteIpAddress;
|
|
|
|
+ UINT16 LocalPort;
|
|
|
|
+ UINT16 RemotePort;
|
|
|
|
+ UINT16 Protocol;
|
|
|
|
+ BOOLEAN StaticIpAddress;
|
|
|
|
+} IPv6_DEVICE_PATH;
|
|
|
|
+
|
|
|
|
+#define MSG_INFINIBAND_DP 0x09
|
|
|
|
+typedef struct _INFINIBAND_DEVICE_PATH {
|
|
|
|
+ EFI_DEVICE_PATH Header;
|
|
|
|
+ UINT32 Reserved;
|
|
|
|
+ UINT64 NodeGuid;
|
|
|
|
+ UINT64 IocGuid;
|
|
|
|
+ UINT64 DeviceId;
|
|
|
|
+} INFINIBAND_DEVICE_PATH;
|
|
|
|
+
|
|
|
|
+#define MSG_UART_DP 0x0e
|
|
|
|
+typedef struct _UART_DEVICE_PATH {
|
|
|
|
+ EFI_DEVICE_PATH Header;
|
|
|
|
+ UINT32 Reserved;
|
|
|
|
+ UINT64 BaudRate;
|
|
|
|
+ UINT8 DataBits;
|
|
|
|
+ UINT8 Parity;
|
|
|
|
+ UINT8 StopBits;
|
|
|
|
+} UART_DEVICE_PATH;
|
|
|
|
+
|
|
|
|
+#define MSG_VENDOR_DP 0x0A
|
|
|
|
+/* Use VENDOR_DEVICE_PATH struct */
|
|
|
|
+
|
|
|
|
+#define DEVICE_PATH_MESSAGING_PC_ANSI \
|
|
|
|
+ { 0xe0c14753, 0xf9be, 0x11d2, {0x9a, 0x0c, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
|
|
|
|
+
|
|
|
|
+#define DEVICE_PATH_MESSAGING_VT_100 \
|
|
|
|
+ { 0xdfa66065, 0xb419, 0x11d3, {0x9a, 0x2d, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+#define MEDIA_DEVICE_PATH 0x04
|
|
|
|
+
|
|
|
|
+#define MEDIA_HARDDRIVE_DP 0x01
|
|
|
|
+typedef struct _HARDDRIVE_DEVICE_PATH {
|
|
|
|
+ EFI_DEVICE_PATH Header;
|
|
|
|
+ UINT32 PartitionNumber;
|
|
|
|
+ UINT64 PartitionStart;
|
|
|
|
+ UINT64 PartitionSize;
|
|
|
|
+ UINT8 Signature[16];
|
|
|
|
+ UINT8 MBRType;
|
|
|
|
+ UINT8 SignatureType;
|
|
|
|
+} HARDDRIVE_DEVICE_PATH;
|
|
|
|
+
|
|
|
|
+#define MBR_TYPE_PCAT 0x01
|
|
|
|
+#define MBR_TYPE_EFI_PARTITION_TABLE_HEADER 0x02
|
|
|
|
+
|
|
|
|
+#define SIGNATURE_TYPE_MBR 0x01
|
|
|
|
+#define SIGNATURE_TYPE_GUID 0x02
|
|
|
|
+
|
|
|
|
+#define MEDIA_CDROM_DP 0x02
|
|
|
|
+typedef struct _CDROM_DEVICE_PATH {
|
|
|
|
+ EFI_DEVICE_PATH Header;
|
|
|
|
+ UINT32 BootEntry;
|
|
|
|
+ UINT64 PartitionStart;
|
|
|
|
+ UINT64 PartitionSize;
|
|
|
|
+} CDROM_DEVICE_PATH;
|
|
|
|
+
|
|
|
|
+#define MEDIA_VENDOR_DP 0x03
|
|
|
|
+/* Use VENDOR_DEVICE_PATH struct */
|
|
|
|
+
|
|
|
|
+#define MEDIA_FILEPATH_DP 0x04
|
|
|
|
+typedef struct _FILEPATH_DEVICE_PATH {
|
|
|
|
+ EFI_DEVICE_PATH Header;
|
|
|
|
+ CHAR16 PathName[1];
|
|
|
|
+} FILEPATH_DEVICE_PATH;
|
|
|
|
+
|
|
|
|
+#define SIZE_OF_FILEPATH_DEVICE_PATH EFI_FIELD_OFFSET(FILEPATH_DEVICE_PATH,PathName)
|
|
|
|
+
|
|
|
|
+#define MEDIA_PROTOCOL_DP 0x05
|
|
|
|
+typedef struct _MEDIA_PROTOCOL_DEVICE_PATH {
|
|
|
|
+ EFI_DEVICE_PATH Header;
|
|
|
|
+ EFI_GUID Protocol;
|
|
|
|
+} MEDIA_PROTOCOL_DEVICE_PATH;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+#define BBS_DEVICE_PATH 0x05
|
|
|
|
+#define BBS_BBS_DP 0x01
|
|
|
|
+typedef struct _BBS_BBS_DEVICE_PATH {
|
|
|
|
+ EFI_DEVICE_PATH Header;
|
|
|
|
+ UINT16 DeviceType;
|
|
|
|
+ UINT16 StatusFlag;
|
|
|
|
+ CHAR8 String[1];
|
|
|
|
+} BBS_BBS_DEVICE_PATH;
|
|
|
|
+
|
|
|
|
+/* DeviceType definitions - from BBS specification */
|
|
|
|
+#define BBS_TYPE_FLOPPY 0x01
|
|
|
|
+#define BBS_TYPE_HARDDRIVE 0x02
|
|
|
|
+#define BBS_TYPE_CDROM 0x03
|
|
|
|
+#define BBS_TYPE_PCMCIA 0x04
|
|
|
|
+#define BBS_TYPE_USB 0x05
|
|
|
|
+#define BBS_TYPE_EMBEDDED_NETWORK 0x06
|
|
|
|
+#define BBS_TYPE_DEV 0x80
|
|
|
|
+#define BBS_TYPE_UNKNOWN 0xFF
|
|
|
|
+
|
|
|
|
+typedef union {
|
|
|
|
+ EFI_DEVICE_PATH DevPath;
|
|
|
|
+ PCI_DEVICE_PATH Pci;
|
|
|
|
+ PCCARD_DEVICE_PATH PcCard;
|
|
|
|
+ MEMMAP_DEVICE_PATH MemMap;
|
|
|
|
+ VENDOR_DEVICE_PATH Vendor;
|
|
|
|
+ UNKNOWN_DEVICE_VENDOR_DEVICE_PATH UnknownVendor;
|
|
|
|
+ CONTROLLER_DEVICE_PATH Controller;
|
|
|
|
+ ACPI_HID_DEVICE_PATH Acpi;
|
|
|
|
+
|
|
|
|
+ ATAPI_DEVICE_PATH Atapi;
|
|
|
|
+ SCSI_DEVICE_PATH Scsi;
|
|
|
|
+ FIBRECHANNEL_DEVICE_PATH FibreChannel;
|
|
|
|
+
|
|
|
|
+ F1394_DEVICE_PATH F1394;
|
|
|
|
+ USB_DEVICE_PATH Usb;
|
|
|
|
+ USB_CLASS_DEVICE_PATH UsbClass;
|
|
|
|
+ I2O_DEVICE_PATH I2O;
|
|
|
|
+ MAC_ADDR_DEVICE_PATH MacAddr;
|
|
|
|
+ IPv4_DEVICE_PATH Ipv4;
|
|
|
|
+ IPv6_DEVICE_PATH Ipv6;
|
|
|
|
+ INFINIBAND_DEVICE_PATH InfiniBand;
|
|
|
|
+ UART_DEVICE_PATH Uart;
|
|
|
|
+
|
|
|
|
+ HARDDRIVE_DEVICE_PATH HardDrive;
|
|
|
|
+ CDROM_DEVICE_PATH CD;
|
|
|
|
+
|
|
|
|
+ FILEPATH_DEVICE_PATH FilePath;
|
|
|
|
+ MEDIA_PROTOCOL_DEVICE_PATH MediaProtocol;
|
|
|
|
+
|
|
|
|
+ BBS_BBS_DEVICE_PATH Bbs;
|
|
|
|
+
|
|
|
|
+} EFI_DEV_PATH;
|
|
|
|
+
|
|
|
|
+typedef union {
|
|
|
|
+ EFI_DEVICE_PATH *DevPath;
|
|
|
|
+ PCI_DEVICE_PATH *Pci;
|
|
|
|
+ PCCARD_DEVICE_PATH *PcCard;
|
|
|
|
+ MEMMAP_DEVICE_PATH *MemMap;
|
|
|
|
+ VENDOR_DEVICE_PATH *Vendor;
|
|
|
|
+ UNKNOWN_DEVICE_VENDOR_DEVICE_PATH *UnknownVendor;
|
|
|
|
+ CONTROLLER_DEVICE_PATH *Controller;
|
|
|
|
+ ACPI_HID_DEVICE_PATH *Acpi;
|
|
|
|
+
|
|
|
|
+ ATAPI_DEVICE_PATH *Atapi;
|
|
|
|
+ SCSI_DEVICE_PATH *Scsi;
|
|
|
|
+ FIBRECHANNEL_DEVICE_PATH *FibreChannel;
|
|
|
|
+
|
|
|
|
+ F1394_DEVICE_PATH *F1394;
|
|
|
|
+ USB_DEVICE_PATH *Usb;
|
|
|
|
+ USB_CLASS_DEVICE_PATH *UsbClass;
|
|
|
|
+ I2O_DEVICE_PATH *I2O;
|
|
|
|
+ MAC_ADDR_DEVICE_PATH *MacAddr;
|
|
|
|
+ IPv4_DEVICE_PATH *Ipv4;
|
|
|
|
+ IPv6_DEVICE_PATH *Ipv6;
|
|
|
|
+ INFINIBAND_DEVICE_PATH *InfiniBand;
|
|
|
|
+ UART_DEVICE_PATH *Uart;
|
|
|
|
+
|
|
|
|
+ HARDDRIVE_DEVICE_PATH *HardDrive;
|
|
|
|
+
|
|
|
|
+ FILEPATH_DEVICE_PATH *FilePath;
|
|
|
|
+ MEDIA_PROTOCOL_DEVICE_PATH *MediaProtocol;
|
|
|
|
+
|
|
|
|
+ CDROM_DEVICE_PATH *CD;
|
|
|
|
+ BBS_BBS_DEVICE_PATH *Bbs;
|
|
|
|
+
|
|
|
|
+} EFI_DEV_PATH_PTR;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+#endif
|
2011-09-15 23:43:21 +02:00
|
|
|
Index: xen-4.1.2-testing/xen/include/efi/efierr.h
|
|
|
|
===================================================================
|
2011-07-01 21:31:25 +02:00
|
|
|
--- /dev/null
|
2011-09-15 23:43:21 +02:00
|
|
|
+++ xen-4.1.2-testing/xen/include/efi/efierr.h
|
2011-07-01 21:31:25 +02:00
|
|
|
@@ -0,0 +1,60 @@
|
|
|
|
+#ifndef _EFI_ERR_H
|
|
|
|
+#define _EFI_ERR_H
|
|
|
|
+
|
|
|
|
+/*++
|
|
|
|
+
|
|
|
|
+Copyright (c) 1998 Intel Corporation
|
|
|
|
+
|
|
|
|
+Module Name:
|
|
|
|
+
|
|
|
|
+ efierr.h
|
|
|
|
+
|
|
|
|
+Abstract:
|
|
|
|
+
|
|
|
|
+ EFI error codes
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+Revision History
|
|
|
|
+
|
|
|
|
+--*/
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+#define EFIWARN(a) (a)
|
|
|
|
+#define EFI_ERROR(a) (((INTN) a) < 0)
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+#define EFI_SUCCESS 0
|
|
|
|
+#define EFI_LOAD_ERROR EFIERR(1)
|
|
|
|
+#define EFI_INVALID_PARAMETER EFIERR(2)
|
|
|
|
+#define EFI_UNSUPPORTED EFIERR(3)
|
|
|
|
+#define EFI_BAD_BUFFER_SIZE EFIERR(4)
|
|
|
|
+#define EFI_BUFFER_TOO_SMALL EFIERR(5)
|
|
|
|
+#define EFI_NOT_READY EFIERR(6)
|
|
|
|
+#define EFI_DEVICE_ERROR EFIERR(7)
|
|
|
|
+#define EFI_WRITE_PROTECTED EFIERR(8)
|
|
|
|
+#define EFI_OUT_OF_RESOURCES EFIERR(9)
|
|
|
|
+#define EFI_VOLUME_CORRUPTED EFIERR(10)
|
|
|
|
+#define EFI_VOLUME_FULL EFIERR(11)
|
|
|
|
+#define EFI_NO_MEDIA EFIERR(12)
|
|
|
|
+#define EFI_MEDIA_CHANGED EFIERR(13)
|
|
|
|
+#define EFI_NOT_FOUND EFIERR(14)
|
|
|
|
+#define EFI_ACCESS_DENIED EFIERR(15)
|
|
|
|
+#define EFI_NO_RESPONSE EFIERR(16)
|
|
|
|
+#define EFI_NO_MAPPING EFIERR(17)
|
|
|
|
+#define EFI_TIMEOUT EFIERR(18)
|
|
|
|
+#define EFI_NOT_STARTED EFIERR(19)
|
|
|
|
+#define EFI_ALREADY_STARTED EFIERR(20)
|
|
|
|
+#define EFI_ABORTED EFIERR(21)
|
|
|
|
+#define EFI_ICMP_ERROR EFIERR(22)
|
|
|
|
+#define EFI_TFTP_ERROR EFIERR(23)
|
|
|
|
+#define EFI_PROTOCOL_ERROR EFIERR(24)
|
|
|
|
+
|
|
|
|
+#define EFI_WARN_UNKOWN_GLYPH EFIWARN(1)
|
|
|
|
+#define EFI_WARN_DELETE_FAILURE EFIWARN(2)
|
|
|
|
+#define EFI_WARN_WRITE_FAILURE EFIWARN(3)
|
|
|
|
+#define EFI_WARN_BUFFER_TOO_SMALL EFIWARN(4)
|
|
|
|
+
|
|
|
|
+#endif
|
|
|
|
+
|
2011-09-15 23:43:21 +02:00
|
|
|
Index: xen-4.1.2-testing/xen/include/efi/efiprot.h
|
|
|
|
===================================================================
|
2011-07-01 21:31:25 +02:00
|
|
|
--- /dev/null
|
2011-09-15 23:43:21 +02:00
|
|
|
+++ xen-4.1.2-testing/xen/include/efi/efiprot.h
|
2011-07-01 21:31:25 +02:00
|
|
|
@@ -0,0 +1,728 @@
|
|
|
|
+#ifndef _EFI_PROT_H
|
|
|
|
+#define _EFI_PROT_H
|
|
|
|
+
|
|
|
|
+/*++
|
|
|
|
+
|
|
|
|
+Copyright (c) 1998 Intel Corporation
|
|
|
|
+
|
|
|
|
+Module Name:
|
|
|
|
+
|
|
|
|
+ efiprot.h
|
|
|
|
+
|
|
|
|
+Abstract:
|
|
|
|
+
|
|
|
|
+ EFI Protocols
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+Revision History
|
|
|
|
+
|
|
|
|
+--*/
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// FPSWA library protocol
|
|
|
|
+//
|
|
|
|
+#define FPSWA_PROTOCOL \
|
|
|
|
+ { 0xc41b6531, 0x97b9, 0x11d3, {0x9a, 0x29, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// Device Path protocol
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+#define DEVICE_PATH_PROTOCOL \
|
|
|
|
+ { 0x9576e91, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// Block IO protocol
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+#define BLOCK_IO_PROTOCOL \
|
|
|
|
+ { 0x964e5b21, 0x6459, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
|
|
|
|
+#define EFI_BLOCK_IO_INTERFACE_REVISION 0x00010000
|
|
|
|
+
|
|
|
|
+INTERFACE_DECL(_EFI_BLOCK_IO);
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_BLOCK_RESET) (
|
|
|
|
+ IN struct _EFI_BLOCK_IO *This,
|
|
|
|
+ IN BOOLEAN ExtendedVerification
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_BLOCK_READ) (
|
|
|
|
+ IN struct _EFI_BLOCK_IO *This,
|
|
|
|
+ IN UINT32 MediaId,
|
|
|
|
+ IN EFI_LBA LBA,
|
|
|
|
+ IN UINTN BufferSize,
|
|
|
|
+ OUT VOID *Buffer
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_BLOCK_WRITE) (
|
|
|
|
+ IN struct _EFI_BLOCK_IO *This,
|
|
|
|
+ IN UINT32 MediaId,
|
|
|
|
+ IN EFI_LBA LBA,
|
|
|
|
+ IN UINTN BufferSize,
|
|
|
|
+ IN VOID *Buffer
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_BLOCK_FLUSH) (
|
|
|
|
+ IN struct _EFI_BLOCK_IO *This
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+typedef struct {
|
|
|
|
+ UINT32 MediaId;
|
|
|
|
+ BOOLEAN RemovableMedia;
|
|
|
|
+ BOOLEAN MediaPresent;
|
|
|
|
+
|
|
|
|
+ BOOLEAN LogicalPartition;
|
|
|
|
+ BOOLEAN ReadOnly;
|
|
|
|
+ BOOLEAN WriteCaching;
|
|
|
|
+
|
|
|
|
+ UINT32 BlockSize;
|
|
|
|
+ UINT32 IoAlign;
|
|
|
|
+
|
|
|
|
+ EFI_LBA LastBlock;
|
|
|
|
+} EFI_BLOCK_IO_MEDIA;
|
|
|
|
+
|
|
|
|
+typedef struct _EFI_BLOCK_IO {
|
|
|
|
+ UINT64 Revision;
|
|
|
|
+
|
|
|
|
+ EFI_BLOCK_IO_MEDIA *Media;
|
|
|
|
+
|
|
|
|
+ EFI_BLOCK_RESET Reset;
|
|
|
|
+ EFI_BLOCK_READ ReadBlocks;
|
|
|
|
+ EFI_BLOCK_WRITE WriteBlocks;
|
|
|
|
+ EFI_BLOCK_FLUSH FlushBlocks;
|
|
|
|
+
|
|
|
|
+} EFI_BLOCK_IO;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// Disk Block IO protocol
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+#define DISK_IO_PROTOCOL \
|
|
|
|
+ { 0xce345171, 0xba0b, 0x11d2, {0x8e, 0x4f, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
|
|
|
|
+#define EFI_DISK_IO_INTERFACE_REVISION 0x00010000
|
|
|
|
+
|
|
|
|
+INTERFACE_DECL(_EFI_DISK_IO);
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_DISK_READ) (
|
|
|
|
+ IN struct _EFI_DISK_IO *This,
|
|
|
|
+ IN UINT32 MediaId,
|
|
|
|
+ IN UINT64 Offset,
|
|
|
|
+ IN UINTN BufferSize,
|
|
|
|
+ OUT VOID *Buffer
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_DISK_WRITE) (
|
|
|
|
+ IN struct _EFI_DISK_IO *This,
|
|
|
|
+ IN UINT32 MediaId,
|
|
|
|
+ IN UINT64 Offset,
|
|
|
|
+ IN UINTN BufferSize,
|
|
|
|
+ IN VOID *Buffer
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+typedef struct _EFI_DISK_IO {
|
|
|
|
+ UINT64 Revision;
|
|
|
|
+ EFI_DISK_READ ReadDisk;
|
|
|
|
+ EFI_DISK_WRITE WriteDisk;
|
|
|
|
+} EFI_DISK_IO;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// Simple file system protocol
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+#define SIMPLE_FILE_SYSTEM_PROTOCOL \
|
|
|
|
+ { 0x964e5b22, 0x6459, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
|
|
|
|
+
|
|
|
|
+INTERFACE_DECL(_EFI_FILE_IO_INTERFACE);
|
|
|
|
+INTERFACE_DECL(_EFI_FILE_HANDLE);
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_VOLUME_OPEN) (
|
|
|
|
+ IN struct _EFI_FILE_IO_INTERFACE *This,
|
|
|
|
+ OUT struct _EFI_FILE_HANDLE **Root
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+#define EFI_FILE_IO_INTERFACE_REVISION 0x00010000
|
|
|
|
+
|
|
|
|
+typedef struct _EFI_FILE_IO_INTERFACE {
|
|
|
|
+ UINT64 Revision;
|
|
|
|
+ EFI_VOLUME_OPEN OpenVolume;
|
|
|
|
+} EFI_FILE_IO_INTERFACE;
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+//
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_FILE_OPEN) (
|
|
|
|
+ IN struct _EFI_FILE_HANDLE *File,
|
|
|
|
+ OUT struct _EFI_FILE_HANDLE **NewHandle,
|
|
|
|
+ IN CHAR16 *FileName,
|
|
|
|
+ IN UINT64 OpenMode,
|
|
|
|
+ IN UINT64 Attributes
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+// Open modes
|
|
|
|
+#define EFI_FILE_MODE_READ 0x0000000000000001
|
|
|
|
+#define EFI_FILE_MODE_WRITE 0x0000000000000002
|
|
|
|
+#define EFI_FILE_MODE_CREATE 0x8000000000000000
|
|
|
|
+
|
|
|
|
+// File attributes
|
|
|
|
+#define EFI_FILE_READ_ONLY 0x0000000000000001
|
|
|
|
+#define EFI_FILE_HIDDEN 0x0000000000000002
|
|
|
|
+#define EFI_FILE_SYSTEM 0x0000000000000004
|
|
|
|
+#define EFI_FILE_RESERVIED 0x0000000000000008
|
|
|
|
+#define EFI_FILE_DIRECTORY 0x0000000000000010
|
|
|
|
+#define EFI_FILE_ARCHIVE 0x0000000000000020
|
|
|
|
+#define EFI_FILE_VALID_ATTR 0x0000000000000037
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_FILE_CLOSE) (
|
|
|
|
+ IN struct _EFI_FILE_HANDLE *File
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_FILE_DELETE) (
|
|
|
|
+ IN struct _EFI_FILE_HANDLE *File
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_FILE_READ) (
|
|
|
|
+ IN struct _EFI_FILE_HANDLE *File,
|
|
|
|
+ IN OUT UINTN *BufferSize,
|
|
|
|
+ OUT VOID *Buffer
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_FILE_WRITE) (
|
|
|
|
+ IN struct _EFI_FILE_HANDLE *File,
|
|
|
|
+ IN OUT UINTN *BufferSize,
|
|
|
|
+ IN VOID *Buffer
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_FILE_SET_POSITION) (
|
|
|
|
+ IN struct _EFI_FILE_HANDLE *File,
|
|
|
|
+ IN UINT64 Position
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_FILE_GET_POSITION) (
|
|
|
|
+ IN struct _EFI_FILE_HANDLE *File,
|
|
|
|
+ OUT UINT64 *Position
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_FILE_GET_INFO) (
|
|
|
|
+ IN struct _EFI_FILE_HANDLE *File,
|
|
|
|
+ IN EFI_GUID *InformationType,
|
|
|
|
+ IN OUT UINTN *BufferSize,
|
|
|
|
+ OUT VOID *Buffer
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_FILE_SET_INFO) (
|
|
|
|
+ IN struct _EFI_FILE_HANDLE *File,
|
|
|
|
+ IN EFI_GUID *InformationType,
|
|
|
|
+ IN UINTN BufferSize,
|
|
|
|
+ IN VOID *Buffer
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_FILE_FLUSH) (
|
|
|
|
+ IN struct _EFI_FILE_HANDLE *File
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+#define EFI_FILE_HANDLE_REVISION 0x00010000
|
|
|
|
+typedef struct _EFI_FILE_HANDLE {
|
|
|
|
+ UINT64 Revision;
|
|
|
|
+ EFI_FILE_OPEN Open;
|
|
|
|
+ EFI_FILE_CLOSE Close;
|
|
|
|
+ EFI_FILE_DELETE Delete;
|
|
|
|
+ EFI_FILE_READ Read;
|
|
|
|
+ EFI_FILE_WRITE Write;
|
|
|
|
+ EFI_FILE_GET_POSITION GetPosition;
|
|
|
|
+ EFI_FILE_SET_POSITION SetPosition;
|
|
|
|
+ EFI_FILE_GET_INFO GetInfo;
|
|
|
|
+ EFI_FILE_SET_INFO SetInfo;
|
|
|
|
+ EFI_FILE_FLUSH Flush;
|
|
|
|
+} EFI_FILE, *EFI_FILE_HANDLE;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// File information types
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+#define EFI_FILE_INFO_ID \
|
|
|
|
+ { 0x9576e92, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
|
|
|
|
+
|
|
|
|
+typedef struct {
|
|
|
|
+ UINT64 Size;
|
|
|
|
+ UINT64 FileSize;
|
|
|
|
+ UINT64 PhysicalSize;
|
|
|
|
+ EFI_TIME CreateTime;
|
|
|
|
+ EFI_TIME LastAccessTime;
|
|
|
|
+ EFI_TIME ModificationTime;
|
|
|
|
+ UINT64 Attribute;
|
|
|
|
+ CHAR16 FileName[1];
|
|
|
|
+} EFI_FILE_INFO;
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// The FileName field of the EFI_FILE_INFO data structure is variable length.
|
|
|
|
+// Whenever code needs to know the size of the EFI_FILE_INFO data structure, it needs to
|
|
|
|
+// be the size of the data structure without the FileName field. The following macro
|
|
|
|
+// computes this size correctly no matter how big the FileName array is declared.
|
|
|
|
+// This is required to make the EFI_FILE_INFO data structure ANSI compilant.
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+#define SIZE_OF_EFI_FILE_INFO EFI_FIELD_OFFSET(EFI_FILE_INFO,FileName)
|
|
|
|
+
|
|
|
|
+#define EFI_FILE_SYSTEM_INFO_ID \
|
|
|
|
+ { 0x9576e93, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
|
|
|
|
+
|
|
|
|
+typedef struct {
|
|
|
|
+ UINT64 Size;
|
|
|
|
+ BOOLEAN ReadOnly;
|
|
|
|
+ UINT64 VolumeSize;
|
|
|
|
+ UINT64 FreeSpace;
|
|
|
|
+ UINT32 BlockSize;
|
|
|
|
+ CHAR16 VolumeLabel[1];
|
|
|
|
+} EFI_FILE_SYSTEM_INFO;
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// The VolumeLabel field of the EFI_FILE_SYSTEM_INFO data structure is variable length.
|
|
|
|
+// Whenever code needs to know the size of the EFI_FILE_SYSTEM_INFO data structure, it needs
|
|
|
|
+// to be the size of the data structure without the VolumeLable field. The following macro
|
|
|
|
+// computes this size correctly no matter how big the VolumeLable array is declared.
|
|
|
|
+// This is required to make the EFI_FILE_SYSTEM_INFO data structure ANSI compilant.
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+#define SIZE_OF_EFI_FILE_SYSTEM_INFO EFI_FIELD_OFFSET(EFI_FILE_SYSTEM_INFO,VolumeLabel)
|
|
|
|
+
|
|
|
|
+#define EFI_FILE_SYSTEM_VOLUME_LABEL_INFO_ID \
|
|
|
|
+ { 0xDB47D7D3,0xFE81, 0x11d3, {0x9A, 0x35, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D} }
|
|
|
|
+
|
|
|
|
+typedef struct {
|
|
|
|
+ CHAR16 VolumeLabel[1];
|
|
|
|
+} EFI_FILE_SYSTEM_VOLUME_LABEL_INFO;
|
|
|
|
+
|
|
|
|
+#define SIZE_OF_EFI_FILE_SYSTEM_VOLUME_LABEL_INFO EFI_FIELD_OFFSET(EFI_FILE_SYSTEM_VOLUME_LABEL_INFO,VolumeLabel)
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// Load file protocol
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+#define LOAD_FILE_PROTOCOL \
|
|
|
|
+ { 0x56EC3091, 0x954C, 0x11d2, {0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B} }
|
|
|
|
+
|
|
|
|
+INTERFACE_DECL(_EFI_LOAD_FILE_INTERFACE);
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_LOAD_FILE) (
|
|
|
|
+ IN struct _EFI_LOAD_FILE_INTERFACE *This,
|
|
|
|
+ IN EFI_DEVICE_PATH *FilePath,
|
|
|
|
+ IN BOOLEAN BootPolicy,
|
|
|
|
+ IN OUT UINTN *BufferSize,
|
|
|
|
+ IN VOID *Buffer OPTIONAL
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef struct _EFI_LOAD_FILE_INTERFACE {
|
|
|
|
+ EFI_LOAD_FILE LoadFile;
|
|
|
|
+} EFI_LOAD_FILE_INTERFACE;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// Device IO protocol
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+#define DEVICE_IO_PROTOCOL \
|
|
|
|
+ { 0xaf6ac311, 0x84c3, 0x11d2, {0x8e, 0x3c, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
|
|
|
|
+
|
|
|
|
+INTERFACE_DECL(_EFI_DEVICE_IO_INTERFACE);
|
|
|
|
+
|
|
|
|
+typedef enum {
|
|
|
|
+ IO_UINT8,
|
|
|
|
+ IO_UINT16,
|
|
|
|
+ IO_UINT32,
|
|
|
|
+ IO_UINT64,
|
|
|
|
+//
|
|
|
|
+// Specification Change: Copy from MMIO to MMIO vs. MMIO to buffer, buffer to MMIO
|
|
|
|
+//
|
|
|
|
+ MMIO_COPY_UINT8,
|
|
|
|
+ MMIO_COPY_UINT16,
|
|
|
|
+ MMIO_COPY_UINT32,
|
|
|
|
+ MMIO_COPY_UINT64
|
|
|
|
+} EFI_IO_WIDTH;
|
|
|
|
+
|
|
|
|
+#define EFI_PCI_ADDRESS(_bus,_dev,_func) \
|
|
|
|
+ ( (UINT64) ( (((UINTN)_bus) << 24) + (((UINTN)_dev) << 16) + (((UINTN)_func) << 8) ) )
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_DEVICE_IO) (
|
|
|
|
+ IN struct _EFI_DEVICE_IO_INTERFACE *This,
|
|
|
|
+ IN EFI_IO_WIDTH Width,
|
|
|
|
+ IN UINT64 Address,
|
|
|
|
+ IN UINTN Count,
|
|
|
|
+ IN OUT VOID *Buffer
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef struct {
|
|
|
|
+ EFI_DEVICE_IO Read;
|
|
|
|
+ EFI_DEVICE_IO Write;
|
|
|
|
+} EFI_IO_ACCESS;
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_PCI_DEVICE_PATH) (
|
|
|
|
+ IN struct _EFI_DEVICE_IO_INTERFACE *This,
|
|
|
|
+ IN UINT64 Address,
|
|
|
|
+ IN OUT EFI_DEVICE_PATH **PciDevicePath
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef enum {
|
|
|
|
+ EfiBusMasterRead,
|
|
|
|
+ EfiBusMasterWrite,
|
|
|
|
+ EfiBusMasterCommonBuffer
|
|
|
|
+} EFI_IO_OPERATION_TYPE;
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_IO_MAP) (
|
|
|
|
+ IN struct _EFI_DEVICE_IO_INTERFACE *This,
|
|
|
|
+ IN EFI_IO_OPERATION_TYPE Operation,
|
|
|
|
+ IN EFI_PHYSICAL_ADDRESS *HostAddress,
|
|
|
|
+ IN OUT UINTN *NumberOfBytes,
|
|
|
|
+ OUT EFI_PHYSICAL_ADDRESS *DeviceAddress,
|
|
|
|
+ OUT VOID **Mapping
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_IO_UNMAP) (
|
|
|
|
+ IN struct _EFI_DEVICE_IO_INTERFACE *This,
|
|
|
|
+ IN VOID *Mapping
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_IO_ALLOCATE_BUFFER) (
|
|
|
|
+ IN struct _EFI_DEVICE_IO_INTERFACE *This,
|
|
|
|
+ IN EFI_ALLOCATE_TYPE Type,
|
|
|
|
+ IN EFI_MEMORY_TYPE MemoryType,
|
|
|
|
+ IN UINTN Pages,
|
|
|
|
+ IN OUT EFI_PHYSICAL_ADDRESS *HostAddress
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_IO_FLUSH) (
|
|
|
|
+ IN struct _EFI_DEVICE_IO_INTERFACE *This
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_IO_FREE_BUFFER) (
|
|
|
|
+ IN struct _EFI_DEVICE_IO_INTERFACE *This,
|
|
|
|
+ IN UINTN Pages,
|
|
|
|
+ IN EFI_PHYSICAL_ADDRESS HostAddress
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef struct _EFI_DEVICE_IO_INTERFACE {
|
|
|
|
+ EFI_IO_ACCESS Mem;
|
|
|
|
+ EFI_IO_ACCESS Io;
|
|
|
|
+ EFI_IO_ACCESS Pci;
|
|
|
|
+ EFI_IO_MAP Map;
|
|
|
|
+ EFI_PCI_DEVICE_PATH PciDevicePath;
|
|
|
|
+ EFI_IO_UNMAP Unmap;
|
|
|
|
+ EFI_IO_ALLOCATE_BUFFER AllocateBuffer;
|
|
|
|
+ EFI_IO_FLUSH Flush;
|
|
|
|
+ EFI_IO_FREE_BUFFER FreeBuffer;
|
|
|
|
+} EFI_DEVICE_IO_INTERFACE;
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+//
|
|
|
|
+// Unicode Collation protocol
|
|
|
|
+//
|
|
|
|
+
|
|
|
|
+#define UNICODE_COLLATION_PROTOCOL \
|
|
|
|
+ { 0x1d85cd7f, 0xf43d, 0x11d2, {0x9a, 0xc, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
|
|
|
|
+
|
|
|
|
+#define UNICODE_BYTE_ORDER_MARK (CHAR16)(0xfeff)
|
|
|
|
+
|
|
|
|
+INTERFACE_DECL(_EFI_UNICODE_COLLATION_INTERFACE);
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+INTN
|
|
|
|
+(EFIAPI *EFI_UNICODE_STRICOLL) (
|
|
|
|
+ IN struct _EFI_UNICODE_COLLATION_INTERFACE *This,
|
|
|
|
+ IN CHAR16 *s1,
|
|
|
|
+ IN CHAR16 *s2
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+BOOLEAN
|
|
|
|
+(EFIAPI *EFI_UNICODE_METAIMATCH) (
|
|
|
|
+ IN struct _EFI_UNICODE_COLLATION_INTERFACE *This,
|
|
|
|
+ IN CHAR16 *String,
|
|
|
|
+ IN CHAR16 *Pattern
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+VOID
|
|
|
|
+(EFIAPI *EFI_UNICODE_STRLWR) (
|
|
|
|
+ IN struct _EFI_UNICODE_COLLATION_INTERFACE *This,
|
|
|
|
+ IN OUT CHAR16 *Str
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+VOID
|
|
|
|
+(EFIAPI *EFI_UNICODE_STRUPR) (
|
|
|
|
+ IN struct _EFI_UNICODE_COLLATION_INTERFACE *This,
|
|
|
|
+ IN OUT CHAR16 *Str
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+VOID
|
|
|
|
+(EFIAPI *EFI_UNICODE_FATTOSTR) (
|
|
|
|
+ IN struct _EFI_UNICODE_COLLATION_INTERFACE *This,
|
|
|
|
+ IN UINTN FatSize,
|
|
|
|
+ IN CHAR8 *Fat,
|
|
|
|
+ OUT CHAR16 *String
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef
|
|
|
|
+BOOLEAN
|
|
|
|
+(EFIAPI *EFI_UNICODE_STRTOFAT) (
|
|
|
|
+ IN struct _EFI_UNICODE_COLLATION_INTERFACE *This,
|
|
|
|
+ IN CHAR16 *String,
|
|
|
|
+ IN UINTN FatSize,
|
|
|
|
+ OUT CHAR8 *Fat
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+typedef struct _EFI_UNICODE_COLLATION_INTERFACE {
|
|
|
|
+
|
|
|
|
+ // general
|
|
|
|
+ EFI_UNICODE_STRICOLL StriColl;
|
|
|
|
+ EFI_UNICODE_METAIMATCH MetaiMatch;
|
|
|
|
+ EFI_UNICODE_STRLWR StrLwr;
|
|
|
|
+ EFI_UNICODE_STRUPR StrUpr;
|
|
|
|
+
|
|
|
|
+ // for supporting fat volumes
|
|
|
|
+ EFI_UNICODE_FATTOSTR FatToStr;
|
|
|
|
+ EFI_UNICODE_STRTOFAT StrToFat;
|
|
|
|
+
|
|
|
|
+ CHAR8 *SupportedLanguages;
|
|
|
|
+} EFI_UNICODE_COLLATION_INTERFACE;
|
|
|
|
+
|
|
|
|
+/* Graphics output protocol */
|
|
|
|
+#define EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID \
|
|
|
|
+ { \
|
|
|
|
+ 0x9042a9de, 0x23dc, 0x4a38, {0x96, 0xfb, 0x7a, 0xde, 0xd0, 0x80, 0x51, 0x6a } \
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+typedef struct _EFI_GRAPHICS_OUTPUT_PROTOCOL EFI_GRAPHICS_OUTPUT_PROTOCOL;
|
|
|
|
+
|
|
|
|
+typedef struct {
|
|
|
|
+ UINT32 RedMask;
|
|
|
|
+ UINT32 GreenMask;
|
|
|
|
+ UINT32 BlueMask;
|
|
|
|
+ UINT32 ReservedMask;
|
|
|
|
+} EFI_PIXEL_BITMASK;
|
|
|
|
+
|
|
|
|
+typedef enum {
|
|
|
|
+ PixelRedGreenBlueReserved8BitPerColor,
|
|
|
|
+ PixelBlueGreenRedReserved8BitPerColor,
|
|
|
|
+ PixelBitMask,
|
|
|
|
+ PixelBltOnly,
|
|
|
|
+ PixelFormatMax
|
|
|
|
+} EFI_GRAPHICS_PIXEL_FORMAT;
|
|
|
|
+
|
|
|
|
+typedef struct {
|
|
|
|
+ UINT32 Version;
|
|
|
|
+ UINT32 HorizontalResolution;
|
|
|
|
+ UINT32 VerticalResolution;
|
|
|
|
+ EFI_GRAPHICS_PIXEL_FORMAT PixelFormat;
|
|
|
|
+ EFI_PIXEL_BITMASK PixelInformation;
|
|
|
|
+ UINT32 PixelsPerScanLine;
|
|
|
|
+} EFI_GRAPHICS_OUTPUT_MODE_INFORMATION;
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ Return the current video mode information.
|
|
|
|
+
|
|
|
|
+ @param This Protocol instance pointer.
|
|
|
|
+ @param ModeNumber The mode number to return information on.
|
|
|
|
+ @param SizeOfInfo A pointer to the size, in bytes, of the Info buffer.
|
|
|
|
+ @param Info A pointer to callee allocated buffer that returns information about ModeNumber.
|
|
|
|
+
|
|
|
|
+ @retval EFI_SUCCESS Mode information returned.
|
|
|
|
+ @retval EFI_BUFFER_TOO_SMALL The Info buffer was too small.
|
|
|
|
+ @retval EFI_DEVICE_ERROR A hardware error occurred trying to retrieve the video mode.
|
|
|
|
+ @retval EFI_NOT_STARTED Video display is not initialized. Call SetMode ()
|
|
|
|
+ @retval EFI_INVALID_PARAMETER One of the input args was NULL.
|
|
|
|
+
|
|
|
|
+**/
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_QUERY_MODE) (
|
|
|
|
+ IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This,
|
|
|
|
+ IN UINT32 ModeNumber,
|
|
|
|
+ OUT UINTN *SizeOfInfo,
|
|
|
|
+ OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION **Info
|
|
|
|
+ )
|
|
|
|
+;
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ Return the current video mode information.
|
|
|
|
+
|
|
|
|
+ @param This Protocol instance pointer.
|
|
|
|
+ @param ModeNumber The mode number to be set.
|
|
|
|
+
|
|
|
|
+ @retval EFI_SUCCESS Graphics mode was changed.
|
|
|
|
+ @retval EFI_DEVICE_ERROR The device had an error and could not complete the request.
|
|
|
|
+ @retval EFI_UNSUPPORTED ModeNumber is not supported by this device.
|
|
|
|
+
|
|
|
|
+**/
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_SET_MODE) (
|
|
|
|
+ IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This,
|
|
|
|
+ IN UINT32 ModeNumber
|
|
|
|
+ )
|
|
|
|
+;
|
|
|
|
+
|
|
|
|
+typedef struct {
|
|
|
|
+ UINT8 Blue;
|
|
|
|
+ UINT8 Green;
|
|
|
|
+ UINT8 Red;
|
|
|
|
+ UINT8 Reserved;
|
|
|
|
+} EFI_GRAPHICS_OUTPUT_BLT_PIXEL;
|
|
|
|
+
|
|
|
|
+typedef union {
|
|
|
|
+ EFI_GRAPHICS_OUTPUT_BLT_PIXEL Pixel;
|
|
|
|
+ UINT32 Raw;
|
|
|
|
+} EFI_GRAPHICS_OUTPUT_BLT_PIXEL_UNION;
|
|
|
|
+
|
|
|
|
+typedef enum {
|
|
|
|
+ EfiBltVideoFill,
|
|
|
|
+ EfiBltVideoToBltBuffer,
|
|
|
|
+ EfiBltBufferToVideo,
|
|
|
|
+ EfiBltVideoToVideo,
|
|
|
|
+ EfiGraphicsOutputBltOperationMax
|
|
|
|
+} EFI_GRAPHICS_OUTPUT_BLT_OPERATION;
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ The following table defines actions for BltOperations:
|
|
|
|
+
|
|
|
|
+ <B>EfiBltVideoFill</B> - Write data from the BltBuffer pixel (SourceX, SourceY)
|
|
|
|
+ directly to every pixel of the video display rectangle
|
|
|
|
+ (DestinationX, DestinationY) (DestinationX + Width, DestinationY + Height).
|
|
|
|
+ Only one pixel will be used from the BltBuffer. Delta is NOT used.
|
|
|
|
+
|
|
|
|
+ <B>EfiBltVideoToBltBuffer</B> - Read data from the video display rectangle
|
|
|
|
+ (SourceX, SourceY) (SourceX + Width, SourceY + Height) and place it in
|
|
|
|
+ the BltBuffer rectangle (DestinationX, DestinationY )
|
|
|
|
+ (DestinationX + Width, DestinationY + Height). If DestinationX or
|
|
|
|
+ DestinationY is not zero then Delta must be set to the length in bytes
|
|
|
|
+ of a row in the BltBuffer.
|
|
|
|
+
|
|
|
|
+ <B>EfiBltBufferToVideo</B> - Write data from the BltBuffer rectangle
|
|
|
|
+ (SourceX, SourceY) (SourceX + Width, SourceY + Height) directly to the
|
|
|
|
+ video display rectangle (DestinationX, DestinationY)
|
|
|
|
+ (DestinationX + Width, DestinationY + Height). If SourceX or SourceY is
|
|
|
|
+ not zero then Delta must be set to the length in bytes of a row in the
|
|
|
|
+ BltBuffer.
|
|
|
|
+
|
|
|
|
+ <B>EfiBltVideoToVideo</B> - Copy from the video display rectangle (SourceX, SourceY)
|
|
|
|
+ (SourceX + Width, SourceY + Height) .to the video display rectangle
|
|
|
|
+ (DestinationX, DestinationY) (DestinationX + Width, DestinationY + Height).
|
|
|
|
+ The BltBuffer and Delta are not used in this mode.
|
|
|
|
+
|
|
|
|
+ @param This Protocol instance pointer.
|
|
|
|
+ @param BltBuffer Buffer containing data to blit into video buffer. This
|
|
|
|
+ buffer has a size of Width*Height*sizeof(EFI_GRAPHICS_OUTPUT_BLT_PIXEL)
|
|
|
|
+ @param BltOperation Operation to perform on BlitBuffer and video memory
|
|
|
|
+ @param SourceX X coordinate of source for the BltBuffer.
|
|
|
|
+ @param SourceY Y coordinate of source for the BltBuffer.
|
|
|
|
+ @param DestinationX X coordinate of destination for the BltBuffer.
|
|
|
|
+ @param DestinationY Y coordinate of destination for the BltBuffer.
|
|
|
|
+ @param Width Width of rectangle in BltBuffer in pixels.
|
|
|
|
+ @param Height Hight of rectangle in BltBuffer in pixels.
|
|
|
|
+ @param Delta OPTIONAL
|
|
|
|
+
|
|
|
|
+ @retval EFI_SUCCESS The Blt operation completed.
|
|
|
|
+ @retval EFI_INVALID_PARAMETER BltOperation is not valid.
|
|
|
|
+ @retval EFI_DEVICE_ERROR A hardware error occured writting to the video buffer.
|
|
|
|
+
|
|
|
|
+**/
|
|
|
|
+typedef
|
|
|
|
+EFI_STATUS
|
|
|
|
+(EFIAPI *EFI_GRAPHICS_OUTPUT_PROTOCOL_BLT) (
|
|
|
|
+ IN EFI_GRAPHICS_OUTPUT_PROTOCOL *This,
|
|
|
|
+ IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer, OPTIONAL
|
|
|
|
+ IN EFI_GRAPHICS_OUTPUT_BLT_OPERATION BltOperation,
|
|
|
|
+ IN UINTN SourceX,
|
|
|
|
+ IN UINTN SourceY,
|
|
|
|
+ IN UINTN DestinationX,
|
|
|
|
+ IN UINTN DestinationY,
|
|
|
|
+ IN UINTN Width,
|
|
|
|
+ IN UINTN Height,
|
|
|
|
+ IN UINTN Delta OPTIONAL
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+typedef struct {
|
|
|
|
+ UINT32 MaxMode;
|
|
|
|
+ UINT32 Mode;
|
|
|
|
+ EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info;
|
|
|
|
+ UINTN SizeOfInfo;
|
|
|
|
+ EFI_PHYSICAL_ADDRESS FrameBufferBase;
|
|
|
|
+ UINTN FrameBufferSize;
|
|
|
|
+} EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE;
|
|
|
|
+
|
|
|
|
+struct _EFI_GRAPHICS_OUTPUT_PROTOCOL {
|
|
|
|
+ EFI_GRAPHICS_OUTPUT_PROTOCOL_QUERY_MODE QueryMode;
|
|
|
|
+ EFI_GRAPHICS_OUTPUT_PROTOCOL_SET_MODE SetMode;
|
|
|
|
+ EFI_GRAPHICS_OUTPUT_PROTOCOL_BLT Blt;
|
|
|
|
+ EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE *Mode;
|
|
|
|
+};
|
|
|
|
+#endif
|
|
|
|
+
|