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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
|
//*************************************************************************
//*************************************************************************
//** **
//** (C)Copyright 1985-2013, American Megatrends, Inc. **
//** **
//** All Rights Reserved. **
//** **
//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
//** **
//** Phone: (770)-246-8600 **
//** **
//*************************************************************************
//*************************************************************************
//*************************************************************************
// $Header: /Alaska/BIN/Chipset/Intel/SouthBridge/LynxPoint/Intel Pch SB Chipset/SmmChildDispatcher2/SmmChildDispatch2.h 3 3/25/13 5:00a Wesleychen $
//
// $Revision: 3 $
//
// $Date: 3/25/13 5:00a $
//*************************************************************************
// Revision History
// ----------------
// $Log: /Alaska/BIN/Chipset/Intel/SouthBridge/LynxPoint/Intel Pch SB Chipset/SmmChildDispatcher2/SmmChildDispatch2.h $
//
// 3 3/25/13 5:00a Wesleychen
// [TAG] None
// [Category] Improvement
// [Description] Refine GPI SMM2 related routines.
// [Files] SmiHandlerGeneric2.c; SmiHandlerPorting2.c;
// SmmChildDispatch2.h
//
// 2 10/19/12 2:52a Scottyang
// [TAG] EIP93461
// [Category] Bug Fix
// [Severity] Normal
// [Symptom] System halt when AFUDOS is running with /N /ME command.
// [RootCause] An unexpected BIOSWR_STS is set, it causes BIOS stuck
// at SMM dispatcher.
// [Solution] Clear BIOSWR_STS if BIOS Lock Enable is not set.
// [Files] SmiHandlerPorting2.c; SmmChildDispatch2Main.c
// SmmChildDispatcher2.sdl; SmmChildDispatch2.h
// SB\SBGeneric.c
//
// 1 2/08/12 8:28a Yurenlai
// Intel Lynx Point/SB eChipset initially releases.
//
//*************************************************************************
//<AMI_FHDR_START>
//
// Name: SmmChildDispatch2.h
//
// Description: SMM Child dispatcher II functions and data structures
// definition.
//
//<AMI_FHDR_END>
//*************************************************************************
#ifndef __SMM_CHILD_DISPATCH2__H__
#define __SMM_CHILD_DISPATCH2__H__
#ifdef __cplusplus
extern "C" {
#endif
#include <AmiDxeLib.h>
#include <Protocol\SmmSwDispatch2.h>
#include <Protocol\SmmSxDispatch2.h>
#include <Protocol\SmmPeriodicTimerDispatch2.h>
#include <Protocol\SmmUsbDispatch2.h>
#include <Protocol\SmmGpiDispatch2.h>
#include <Protocol\SmmStandbyButtonDispatch2.h>
#include <Protocol\SmmPowerButtonDispatch2.h>
#include <Protocol\SmmIoTrapDispatch2.h>
#define SMM_CHILD_DISPATCHER2_GUID \
{0x950c3a26, 0xe0c2, 0x491c, 0xb6, 0xb2, 0x3, 0x74, 0xf5, 0xc7, 0x3b, 0x96}
#pragma pack(push, 1)
typedef enum {
EfiSmmSwSmi2,
EfiSmmSxSmi2,
EfiSmmPeriodicTimerSmi2,
EfiSmmUsbSmi2,
EfiSmmGpiSmi2,
EfiSmmStandbyButtonSmi2,
EfiSmmPowerButtonSmi2,
EfiSmmIoTrapSmi2,
EfiSmmMaxSmi2
} EFI_SMM_SMI2;
typedef struct {
EFI_SMM_PERIODIC_TIMER_REGISTER_CONTEXT OrgContext;
UINT64 ElapsedTime;
} EFI_SMM_PERIODIC_TIMER_EXT_REGISTER_CONTEXT;
typedef union {
EFI_SMM_SW_REGISTER_CONTEXT SwContext;
EFI_SMM_SX_REGISTER_CONTEXT SxContext;
EFI_SMM_PERIODIC_TIMER_EXT_REGISTER_CONTEXT TimerContext;
EFI_SMM_USB_REGISTER_CONTEXT UsbContext;
EFI_SMM_GPI_REGISTER_CONTEXT GpiContext;
EFI_SMM_STANDBY_BUTTON_REGISTER_CONTEXT SBtnContext;
EFI_SMM_POWER_BUTTON_REGISTER_CONTEXT PBtnContext;
EFI_SMM_IO_TRAP_REGISTER_CONTEXT IoTrapContext;
} EFI_SMM_SMI_CONTEXT2;
typedef EFI_STATUS ( *SMI_GENERIC_CALLBACK2 ) (
IN EFI_HANDLE DispatchHandle,
IN CONST VOID *DispatchContext OPTIONAL,
IN OUT VOID *CommBuffer OPTIONAL,
IN OUT UINTN *CommBufferSize OPTIONAL
);
typedef struct {
DLINK Link;
UINT32 Signature;
SMI_GENERIC_CALLBACK2 Callback;
UINT8 Context[1];
} HANDLER_LINK2;
//---------------------------------------------------------------------------
// SMI Handler protocol functions prototypes
//---------------------------------------------------------------------------
typedef EFI_STATUS ( *ADD_HANDLER2 ) (
IN VOID *Context
);
typedef EFI_STATUS ( *REMOVE_HANDLER2 ) (
IN VOID *Context
);
typedef EFI_STATUS ( *VERIFY_CONTEXT2) (
IN VOID *Context
);
typedef BOOLEAN ( *GET_CONTEXT2 ) (
VOID
);
typedef EFI_STATUS ( *DISPATCH_SMI2 ) (
VOID
);
typedef struct {
ADD_HANDLER2 AddHandler;
REMOVE_HANDLER2 RemoveHandler;
VERIFY_CONTEXT2 VerifyContext;
GET_CONTEXT2 GetContext;
DISPATCH_SMI2 DispatchSmi;
} SMI_HANDLER_PROTOCOL2;
typedef struct {
EFI_SMM_SMI2 SmiType;
SMI_HANDLER_PROTOCOL2 HandlerProtocol;
DLIST RegisteredCallbacks;
} SMM_CHILD_DISPATCHER2;
#pragma pack(pop)
//---------------------------------------------------------------------------
// SW SMI Handler functions
//---------------------------------------------------------------------------
EFI_STATUS SmmSwAddHandler2( IN VOID *Context );
EFI_STATUS SmmSwRemoveHandler2( IN VOID *Context );
EFI_STATUS SmmSwVerifyContext2( IN VOID *Context );
BOOLEAN SmmSwGetContext2( VOID );
EFI_STATUS SmmSwDispatchSmi2( VOID );
//---------------------- SW SMI Handler Porting hooks -----------------------
VOID SwSmiEnable( VOID );
VOID SwSmiDisable( VOID );
VOID SwSmiClear( VOID );
BOOLEAN SwSmiDetect( OUT UINT16 *Type );
UINTN GetEAX( VOID );
//---------------------------------------------------------------------------
// SX SMI Handler functions
//---------------------------------------------------------------------------
EFI_STATUS SmmSxAddHandler2( IN VOID *Context );
EFI_STATUS SmmSxRemoveHandler2( IN VOID *Context );
EFI_STATUS SmmSxVerifyContext2( IN VOID *Context );
BOOLEAN SmmSxGetContext2( VOID );
EFI_STATUS SmmSxDispatchSmi2( VOID );
//---------------------- SX SMI Handler Porting hooks -----------------------
VOID SxSmiEnable( VOID );
VOID SxSmiDisable( VOID );
VOID SxSmiClear( VOID );
VOID PutToSleep( IN VOID *Context );
BOOLEAN SxSmiDetect( OUT UINT16 *Type );
//---------------------------------------------------------------------------
// Periodic timer SMI Handler functions
//---------------------------------------------------------------------------
EFI_STATUS SmmTimerAddHandler2( IN VOID *Context );
EFI_STATUS SmmTimerRemoveHandler2( IN VOID *Context );
EFI_STATUS SmmTimerVerifyContext2( IN VOID *Context );
BOOLEAN SmmTimerGetContext2( VOID );
EFI_STATUS SmmTimerDispatchSmi2( VOID );
//---------------- Periodic timer SMI Handler Porting hooks -----------------
VOID TimerSmiEnable2( VOID );
VOID TimerSmiDisable2( VOID );
VOID TimerSmiClear2( VOID );
BOOLEAN TimerSmiDetect2( OUT UINT16 *Type );
VOID TimerSetInterval2( IN UINT64 Interval);
//---------------------------------------------------------------------------
// USB SMI Handler functions
//---------------------------------------------------------------------------
EFI_STATUS SmmUsbAddHandler2( IN VOID *Context );
EFI_STATUS SmmUsbRemoveHandler2( IN VOID *Context );
EFI_STATUS SmmUsbVerifyContext2( IN VOID *Context );
BOOLEAN SmmUsbGetContext2( VOID );
EFI_STATUS SmmUsbDispatchSmi2( VOID );
//---------------------- USB SMI Handler Porting hooks ----------------------
VOID UsbSmiSet( IN UINT16 ControllerType );
VOID UsbSmiClear( IN UINT16 ControllerType );
BOOLEAN UsbSmiDetect( OUT UINT16 *Type );
UINT16 GetControllerType( OUT EFI_DEVICE_PATH_PROTOCOL *Device );
//---------------------------------------------------------------------------
// GPI SMI Handler functions
//---------------------------------------------------------------------------
EFI_STATUS SmmGpiAddHandler2( IN VOID *Context );
EFI_STATUS SmmGpiRemoveHandler2( IN VOID *Context );
EFI_STATUS SmmGpiVerifyContext2( IN VOID *Context );
BOOLEAN SmmGpiGetContext2( VOID );
EFI_STATUS SmmGpiDispatchSmi2( VOID );
//---------------------- GPI SMI Handler Porting hooks ----------------------
VOID GpiSmiSet( IN UINT32 GpiEnableBit );
VOID GpiSmiReset( IN UINT32 GpiDisableBit );
VOID GpiSmiClear( IN UINT32 GpiClearBit );
BOOLEAN GpiSmiDetect( OUT UINT32 *Gpi );
UINT32 ConvertGpi ( IN UINTN Gpi );
//---------------------------------------------------------------------------
// Standby button SMI Handler functions
//---------------------------------------------------------------------------
EFI_STATUS SmmSButtonAddHandler2( IN VOID *Context );
EFI_STATUS SmmSButtonRemoveHandler2( IN VOID *Context );
EFI_STATUS SmmSButtonVerifyContext2( IN VOID *Context );
BOOLEAN SmmSButtonGetContext2( VOID );
EFI_STATUS SmmSButtonDispatchSmi2( VOID );
//---------------- Standby button SMI Handler Porting hooks -----------------
VOID SButtonSmiEnable( VOID );
VOID SButtonSmiDisable( VOID );
VOID SButtonSmiClear( VOID );
BOOLEAN SButtonSmiDetect( OUT UINT16 *Type );
//---------------------------------------------------------------------------
// Power button SMI Handler functions
//---------------------------------------------------------------------------
EFI_STATUS SmmPButtonAddHandler2( IN VOID *Context );
EFI_STATUS SmmPButtonRemoveHandler2( IN VOID *Context );
EFI_STATUS SmmPButtonVerifyContext2( IN VOID *Context );
BOOLEAN SmmPButtonGetContext2( VOID );
EFI_STATUS SmmPButtonDispatchSmi2( VOID );
//---------------- Power button SMI Handler Porting hooks -------------------
VOID PButtonSmiEnable( VOID );
VOID PButtonSmiDisable( VOID );
VOID PButtonSmiClear( VOID );
BOOLEAN PButtonSmiDetect( OUT UINT16 *Type );
//---------------------------------------------------------------------------
// I/O Trap SMI Handler functions
//---------------------------------------------------------------------------
EFI_STATUS SmmIoTrapAddHandler2( IN VOID *Context );
EFI_STATUS SmmIoTrapRemoveHandler2( IN VOID *Context );
EFI_STATUS SmmIoTrapVerifyContext2( IN VOID *Context );
BOOLEAN SmmIoTrapGetContext2( VOID );
EFI_STATUS SmmIoTrapDispatchSmi2( VOID );
//------------------ I/O Trap SMI Handler Porting hooks ---------------------
VOID IoTrapSmiSet2( IN EFI_SMM_IO_TRAP_REGISTER_CONTEXT *Context, \
OUT UINT32 *TrapRegIndex );
VOID IoTrapSmiReset2( IN EFI_SMM_IO_TRAP_REGISTER_CONTEXT *Context, \
OUT UINT32 *TrapRegIndex );
VOID IoTrapSmiEnable2( VOID );
VOID IoTrapSmiDisable2( VOID );
VOID IoTrapSmiClear2( VOID );
BOOLEAN IoTrapSmiDetect2( OUT EFI_SMM_IO_TRAP_REGISTER_CONTEXT *Context, \
OUT UINT32 *IoTrapWriteDara );
//---------------------------------------------------------------------------
// All purpose SMI Porting hooks
//---------------------------------------------------------------------------
VOID ClearAllSmi( VOID );
// [EIP93461]>
VOID SbSmiWorkaround2( VOID );
// <[EIP93461]
/****** DO NOT WRITE BELOW THIS LINE *******/
#ifdef __cplusplus
}
#endif
#endif
//*************************************************************************
//*************************************************************************
//** **
//** (C)Copyright 1985-2013, American Megatrends, Inc. **
//** **
//** All Rights Reserved. **
//** **
//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
//** **
//** Phone: (770)-246-8600 **
//** **
//*************************************************************************
//*************************************************************************
|