summaryrefslogtreecommitdiff
path: root/EDK/Foundation/Library/Dxe/Include/EfiMgmtModeRuntimeLib.h
blob: 89fb72ec2ecf8bd304169546869092e2287ceadb (plain)
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
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
/*++

Copyright (c) 2004, Intel Corporation                                                         
All rights reserved. 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.             

Module Name:
  
    EfiMgmtModeRuntimeLib.h

Abstract:

  Light weight lib to support EFI drivers.

--*/

#ifndef _EFI_RT_SUPPORT_LIB_H_
#define _EFI_RT_SUPPORT_LIB_H_

#ifndef EFI_LOAD_IMAGE_SMM
#define EFI_LOAD_DRIVER_SMM FALSE
#else
#define EFI_LOAD_DRIVER_SMM TRUE
#endif

#ifndef EFI_NO_LOAD_IMAGE_RT
#define EFI_NO_LOAD_DRIVER_RT FALSE
#else
#define EFI_NO_LOAD_DRIVER_RT TRUE
#endif

#include "EfiCommonLib.h"
#include "LinkedList.h"
#include "ProcDep.h"

#include EFI_PROTOCOL_DEFINITION (CpuIo)
#include EFI_PROTOCOL_DEFINITION (FirmwareVolumeBlock)

//
// Driver Lib Globals.
//
extern EFI_BOOT_SERVICES        *gBS;
extern EFI_SYSTEM_TABLE         *gST;
extern UINTN                    gRtErrorLevel;
extern BOOLEAN                  mEfiLoadDriverSmm;
extern BOOLEAN                  mEfiNoLoadDriverRt;
extern EFI_DEVICE_PATH_PROTOCOL *mFilePath;

//
// Runtime Memory Allocation/De-Allocation tools (Should be used in Boot Phase only)
//
EFI_STATUS
EfiAllocateRuntimeMemoryPool (
  IN UINTN                          Size,
  OUT VOID                          **Buffer
  )
/*++

Routine Description:

  Allocate EfiRuntimeServicesData pool of specified size.

Arguments:

  Size      - Pool size
  Buffer    - Memory pointer for output

Returns:

  Status code

--*/
;

EFI_STATUS
EfiFreeRuntimeMemoryPool (
  IN VOID                          *Buffer
  )
/*++

Routine Description:

  Free allocated pool

Arguments:

  Buffer  - Pool to be freed

Returns:

  Status code

--*/
;

EFI_STATUS
EfiLocateProtocolHandleBuffers (
  IN EFI_GUID                       *Protocol,
  IN OUT UINTN                      *NumberHandles,
  OUT EFI_HANDLE                    **Buffer
  )
/*++

Routine Description:

  Returns an array of handles that support the requested protocol in a buffer allocated from pool.

Arguments:

  Protocol      - Provides the protocol to search by.
  NumberHandles - The number of handles returned in Buffer.
  Buffer        - A pointer to the buffer to return the requested array of handles that
                  support Protocol.

Returns:

  Status code

--*/
;

EFI_STATUS
EfiHandleProtocol (
  IN EFI_HANDLE                     Handle,
  IN EFI_GUID                       *Protocol,
  OUT VOID                          **Interface
  )
/*++

Routine Description:

  Queries a handle to determine if it supports a specified protocol.

Arguments:

  Handle    - The handle being queried.
  Protocol  - The published unique identifier of the protocol.
  Interface - Supplies the address where a pointer to the corresponding Protocol
              Interface is returned. NULL will be returned in *Interface if a
              structure is not associated with Protocol.

Returns:

  Status code

--*/
;

EFI_STATUS
EfiInstallProtocolInterface (
  IN OUT EFI_HANDLE                 *Handle,
  IN EFI_GUID                       *Protocol,
  IN EFI_INTERFACE_TYPE             InterfaceType,
  IN VOID                           *Interface
  )
/*++

Routine Description:

  Installs a protocol interface on a device handle. If the handle does not exist, it is created and added
to the list of handles in the system.

Arguments:

  Handle        - A pointer to the EFI_HANDLE on which the interface is to be installed.
  Protocol      - The numeric ID of the protocol interface.
  InterfaceType - Indicates whether Interface is supplied in native form.
  Interface     - A pointer to the protocol interface.

Returns:

  Status code

--*/
;

EFI_STATUS
EfiReinstallProtocolInterface (
  IN EFI_HANDLE                     SmmProtocolHandle,
  IN EFI_GUID                       *Protocol,
  IN VOID                           *OldInterface,
  IN VOID                           *NewInterface
  )
/*++

Routine Description:

  Reinstalls a protocol interface on a device handle.

Arguments:

  SmmProtocolHandle - Handle on which the interface is to be reinstalled.
  Protocol          - The numeric ID of the interface.
  OldInterface      - A pointer to the old interface.
  NewInterface      - A pointer to the new interface.

Returns:

  Status code

--*/
;

EFI_STATUS
EfiLocateProtocolInterface (
  EFI_GUID  *Protocol,
  VOID      *Registration, OPTIONAL
  VOID      **Interface
  )
/*++

Routine Description:

  Returns the first protocol instance that matches the given protocol.

Arguments:

  Protocol      - Provides the protocol to search for.
  Registration  - Optional registration key returned from
                  RegisterProtocolNotify(). If Registration is NULL, then
                  it is ignored.
  Interface     - On return, a pointer to the first interface that matches Protocol and
                  Registration.

Returns:

  Status code

--*/
;

EFI_STATUS
UninstallProtocolInterface (
  IN EFI_HANDLE                     SmmProtocolHandle,
  IN EFI_GUID                       *Protocol,
  IN VOID                           *Interface
  )
/*++

Routine Description:

  Removes a protocol interface from a device handle.

Arguments:

  SmmProtocolHandle - The handle on which the interface was installed.
  Protocol          - The numeric ID of the interface.
  Interface         - A pointer to the interface.

Returns:

  Status code

--*/
;

EFI_STATUS
EfiRegisterProtocolCallback (
  IN  EFI_EVENT_NOTIFY              CallbackFunction,
  IN  VOID                          *Context,
  IN  EFI_GUID                      *ProtocolGuid,
  IN  EFI_TPL                       NotifyTpl,
  OUT VOID                          **Registeration,
  OUT EFI_EVENT                     *Event
  )
/*++

Routine Description:

  Register a callback function to be signaled whenever an interface is installed for 
  a specified protocol.

Arguments:

  CallbackFunction  - Call back function
  Context           - Context of call back function
  ProtocolGuid      - The numeric ID of the protocol for which the callback function
                      is to be registered.
  NotifyTpl         - Notify tpl of callback function
  Registeration     - A pointer to a memory location to receive the registration value.
  Event             - Event that is to be signaled whenever a protocol interface is registered
                      for Protocol.

Returns:

  Status code

--*/
;

EFI_STATUS
EfiSignalProtocolEvent (
  EFI_EVENT                         Event
  )
/*++

Routine Description:

  Signals an event.

Arguments:

  Event - The event to signal.

Returns:

  Status code

--*/
;

EFI_STATUS
EfiInstallVendorConfigurationTable (
  IN EFI_GUID                       *Guid,
  IN VOID                           *Table
  )
/*++

Routine Description:

  Adds, updates, or removes a configuration table entry from the EFI System Table.

Arguments:

  Guid  - A pointer to the GUID for the entry to add, update, or remove.
  Table - A pointer to the configuration table for the entry to add, update, or
          remove. May be NULL.

Returns:

  Status code

--*/
;

EFI_STATUS
EfiGetVendorConfigurationTable (
  IN EFI_GUID                       *Guid,
  OUT VOID                          **Table
  )
/*++

Routine Description:
  
  Return the EFI 1.0 System Tabl entry with TableGuid

Arguments:

  Guid      - Name of entry to return in the system table
  Table     - Pointer in EFI system table associated with TableGuid

Returns: 

  EFI_SUCCESS - Table returned;
  EFI_NOT_FOUND - TableGuid not in EFI system table

--*/
;

EFI_STATUS
EfiInitializeUtilsRuntimeDriverLib (
  IN EFI_HANDLE           ImageHandle,
  IN EFI_SYSTEM_TABLE     *SystemTable,
  IN EFI_EVENT_NOTIFY     GoVirtualChildEvent
  )
/*++

Routine Description:

  Intialize runtime Driver Lib if it has not yet been initialized. 

Arguments:

  ImageHandle     - The firmware allocated handle for the EFI image.
  
  SystemTable     - A pointer to the EFI System Table.

  GoVirtualChildEvent - Caller can register a virtual notification event.

Returns: 

  EFI_STATUS always returns EFI_SUCCESS

--*/
;

BOOLEAN
EfiInManagementInterrupt (
  VOID
  )
/*++

Routine Description:

  Indicate whether the caller is already in SMM or not.

Arguments:

  None

Returns:

  TRUE      - In SMM
  FALSE     - Not in SMM

--*/
;

//
// This MACRO initializes the RUNTIME invironment and optionally loads Image to SMM or Non-SMM space
// based upon the presence of build flags EFI_LOAD_DRIVER_SMM and EFI_NO_LOAD_DRIVER_RT.
//
#define EFI_INITIALIZE_RUNTIME_DRIVER_LIB(ImageHandle, SystemTable, GoVirtualChildEvent, FilePath) \
  mEfiLoadDriverSmm = EFI_LOAD_DRIVER_SMM; \
  mEfiNoLoadDriverRt = EFI_NO_LOAD_DRIVER_RT; \
  mFilePath = (EFI_DEVICE_PATH_PROTOCOL*) FilePath; \
  EfiInitializeUtilsRuntimeDriverLib ((EFI_HANDLE) ImageHandle, (EFI_SYSTEM_TABLE*) SystemTable, (EFI_EVENT_NOTIFY) GoVirtualChildEvent); \
  if (!EfiInManagementInterrupt()) { \
    if (mEfiNoLoadDriverRt) { \
      return EFI_SUCCESS; \
    } \
  }  

#endif