1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
|
/** @file
GUID and data structures for communication between SMM Base on SMM Base2 Thunk driver
and SmmBaseHelper driver.
Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php.
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
#ifndef _SMM_BASE_THUNK_COMMUNICATION_H_
#define _SMM_BASE_THUNK_COMMUNICATION_H_
#include <Protocol/SmmBase.h>
#define EFI_SMM_BASE_THUNK_COMMUNICATION_GUID \
{ 0x6568a3d6, 0x15f, 0x4b4a, { 0x9c, 0x89, 0x1d, 0x14, 0x63, 0x14, 0x13, 0xa } }
typedef struct {
EFI_DEVICE_PATH_PROTOCOL *FilePath;
VOID *SourceBuffer;
UINTN SourceSize;
EFI_HANDLE *ImageHandle;
BOOLEAN LegacyIA32Binary;
} SMMBASE_REGISTER_ARG;
typedef struct {
EFI_HANDLE ImageHandle;
} SMMBASE_UNREGISTER_ARG;
typedef struct {
EFI_HANDLE SmmImageHandle;
EFI_SMM_CALLBACK_ENTRY_POINT CallbackAddress;
BOOLEAN MakeLast;
BOOLEAN FloatingPointSave;
} SMMBASE_REGISTER_CALLBACK_ARG;
typedef struct {
EFI_MEMORY_TYPE PoolType;
UINTN Size;
VOID **Buffer;
} SMMBASE_ALLOCATE_POOL_ARG;
typedef struct {
VOID *Buffer;
} SMMBASE_FREE_POOL_ARG;
typedef struct {
EFI_HANDLE ImageHandle;
VOID *CommunicationBuffer;
UINTN *SourceSize;
} SMMBASE_COMMUNICATE_ARG;
typedef union {
SMMBASE_REGISTER_ARG Register;
SMMBASE_UNREGISTER_ARG UnRegister;
SMMBASE_REGISTER_CALLBACK_ARG RegisterCallback;
SMMBASE_ALLOCATE_POOL_ARG AllocatePool;
SMMBASE_FREE_POOL_ARG FreePool;
SMMBASE_COMMUNICATE_ARG Communicate;
} SMMBASE_FUNCTION_ARGS;
typedef enum {
SmmBaseFunctionRegister,
SmmBaseFunctionUnregister,
SmmBaseFunctionRegisterCallback,
SmmBaseFunctionAllocatePool,
SmmBaseFunctionFreePool,
SmmBaseFunctionCommunicate
} SMMBASE_FUNCTION;
typedef struct {
SMMBASE_FUNCTION Function;
EFI_STATUS Status;
SMMBASE_FUNCTION_ARGS Args;
EFI_HANDLE SmmBaseImageHandle;
} SMMBASE_FUNCTION_DATA;
#pragma pack(1)
typedef struct {
EFI_GUID HeaderGuid;
UINTN MessageLength;
SMMBASE_FUNCTION_DATA FunctionData;
} SMMBASETHUNK_COMMUNICATION_DATA;
#pragma pack()
extern EFI_GUID gEfiSmmBaseThunkCommunicationGuid;
#endif
|