SmmReportStatusCodeHandler.h revision 476f47800b076c352b3d615868e590592516c5c0
1476f47800b076c352b3d615868e590592516c5c0klu/** @file
2476f47800b076c352b3d615868e590592516c5c0klu  This protocol provides registering and unregistering services to status code consumers while in DXE SMM.
3476f47800b076c352b3d615868e590592516c5c0klu
4476f47800b076c352b3d615868e590592516c5c0klu  Copyright (c) 2007 - 2009, Intel Corporation
5476f47800b076c352b3d615868e590592516c5c0klu  All rights reserved. This program and the accompanying materials
6476f47800b076c352b3d615868e590592516c5c0klu  are licensed and made available under the terms and conditions of the BSD License
7476f47800b076c352b3d615868e590592516c5c0klu  which accompanies this distribution.  The full text of the license may be found at
8476f47800b076c352b3d615868e590592516c5c0klu  http://opensource.org/licenses/bsd-license.php
9476f47800b076c352b3d615868e590592516c5c0klu
10476f47800b076c352b3d615868e590592516c5c0klu  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11476f47800b076c352b3d615868e590592516c5c0klu  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12476f47800b076c352b3d615868e590592516c5c0klu
13476f47800b076c352b3d615868e590592516c5c0klu**/
14476f47800b076c352b3d615868e590592516c5c0klu
15476f47800b076c352b3d615868e590592516c5c0klu#ifndef __SMM_REPORT_STATUS_CODE_HANDLER_PROTOCOL_H__
16476f47800b076c352b3d615868e590592516c5c0klu#define __SMM_REPORT_STATUS_CODE_HANDLER_PROTOCOL_H__
17476f47800b076c352b3d615868e590592516c5c0klu
18476f47800b076c352b3d615868e590592516c5c0klu#define EFI_SMM_RSC_HANDLER_PROTOCOL_GUID \
19476f47800b076c352b3d615868e590592516c5c0klu  { \
20476f47800b076c352b3d615868e590592516c5c0klu    0x2ff29fa7, 0x5e80, 0x4ed9, 0xb3, 0x80, 0x1, 0x7d, 0x3c, 0x55,
21476f47800b076c352b3d615868e590592516c5c0klu    0x4f, 0xf4
22476f47800b076c352b3d615868e590592516c5c0klu  }
23476f47800b076c352b3d615868e590592516c5c0klu
24476f47800b076c352b3d615868e590592516c5c0klutypedef
25476f47800b076c352b3d615868e590592516c5c0kluEFI_STATUS
26476f47800b076c352b3d615868e590592516c5c0klu(EFIAPI *EFI_SMM_RSC_HANDLER_CALLBACK)(
27476f47800b076c352b3d615868e590592516c5c0klu  IN EFI_STATUS_CODE_TYPE   CodeType,
28476f47800b076c352b3d615868e590592516c5c0klu  IN EFI_STATUS_CODE_VALUE  Value,
29476f47800b076c352b3d615868e590592516c5c0klu  IN UINT32                 Instance,
30476f47800b076c352b3d615868e590592516c5c0klu  IN EFI_GUID               *CallerId,
31476f47800b076c352b3d615868e590592516c5c0klu  IN EFI_STATUS_CODE_DATA   *Data
32476f47800b076c352b3d615868e590592516c5c0klu);
33476f47800b076c352b3d615868e590592516c5c0klu
34476f47800b076c352b3d615868e590592516c5c0klu/**
35476f47800b076c352b3d615868e590592516c5c0klu  Register the callback function for ReportStatusCode() notification.
36476f47800b076c352b3d615868e590592516c5c0klu
37476f47800b076c352b3d615868e590592516c5c0klu  When this function is called the function pointer is added to an internal list and any future calls to
38476f47800b076c352b3d615868e590592516c5c0klu  ReportStatusCode() will be forwarded to the Callback function.
39476f47800b076c352b3d615868e590592516c5c0klu
40476f47800b076c352b3d615868e590592516c5c0klu  @param[in] Callback               A pointer to a function of type EFI_RSC_HANDLER_CALLBACK that is called when
41476f47800b076c352b3d615868e590592516c5c0klu                                    a call to ReportStatusCode() occurs.
42476f47800b076c352b3d615868e590592516c5c0klu
43476f47800b076c352b3d615868e590592516c5c0klu  @retval EFI_SUCCESS               Function was successfully registered.
44476f47800b076c352b3d615868e590592516c5c0klu  @retval EFI_INVALID_PARAMETER     The callback function was NULL.
45476f47800b076c352b3d615868e590592516c5c0klu  @retval EFI_OUT_OF_RESOURCES      The internal buffer ran out of space. No more functions can be
46476f47800b076c352b3d615868e590592516c5c0klu                                    registered.
47476f47800b076c352b3d615868e590592516c5c0klu  @retval EFI_ALREADY_STARTED       The function was already registered. It can’t be registered again.
48476f47800b076c352b3d615868e590592516c5c0klu**/
49476f47800b076c352b3d615868e590592516c5c0klutypedef
50476f47800b076c352b3d615868e590592516c5c0kluEFI_STATUS
51476f47800b076c352b3d615868e590592516c5c0klu(EFIAPI *EFI_SMM_RSC_HANDLER_REGISTER)(
52476f47800b076c352b3d615868e590592516c5c0klu  IN EFI_SMM_RSC_HANDLER_CALLBACK Callback
53476f47800b076c352b3d615868e590592516c5c0klu);
54476f47800b076c352b3d615868e590592516c5c0klu
55476f47800b076c352b3d615868e590592516c5c0klu/**
56476f47800b076c352b3d615868e590592516c5c0klu  Remove a previously registered callback function from the notification list.
57476f47800b076c352b3d615868e590592516c5c0klu
58476f47800b076c352b3d615868e590592516c5c0klu  A callback function must be unregistered before it is deallocated. It is important that any registered
59476f47800b076c352b3d615868e590592516c5c0klu  callbacks that are not runtime complaint be unregistered when ExitBootServices() is called.
60476f47800b076c352b3d615868e590592516c5c0klu
61476f47800b076c352b3d615868e590592516c5c0klu  @param[in] Callback           A pointer to a function of type EFI_SMM_RSC_HANDLER_CALLBACK that is to be
62476f47800b076c352b3d615868e590592516c5c0klu                                unregistered.
63476f47800b076c352b3d615868e590592516c5c0klu
64476f47800b076c352b3d615868e590592516c5c0klu  @retval EFI_SUCCESS           The function was successfully unregistered.
65476f47800b076c352b3d615868e590592516c5c0klu  @retval EFI_INVALID_PARAMETER The callback function was NULL.
66476f47800b076c352b3d615868e590592516c5c0klu  @retval EFI_NOT_FOUND         The callback function was not found to be unregistered.
67476f47800b076c352b3d615868e590592516c5c0klu
68476f47800b076c352b3d615868e590592516c5c0klu**/
69476f47800b076c352b3d615868e590592516c5c0klutypedef
70476f47800b076c352b3d615868e590592516c5c0kluEFI_STATUS
71476f47800b076c352b3d615868e590592516c5c0klu(EFIAPI *EFI_SMM_RSC_HANDLER_UNREGISTER) (
72476f47800b076c352b3d615868e590592516c5c0klu  IN EFI_SMM_RSC_HANDLER_CALLBACK Callback
73476f47800b076c352b3d615868e590592516c5c0klu);
74476f47800b076c352b3d615868e590592516c5c0klu
75476f47800b076c352b3d615868e590592516c5c0klutypedef struct _EFI_SMM_RSC_HANDLER_PROTOCOL {
76476f47800b076c352b3d615868e590592516c5c0klu  EFI_SMM_RSC_HANDLER_REGISTER  Register;
77476f47800b076c352b3d615868e590592516c5c0klu  SMM_RSC_HANDLER_UNREGISTER    Unregister;
78476f47800b076c352b3d615868e590592516c5c0klu} EFI_SMM_RSC_HANDLER_PROTOCOL;
79476f47800b076c352b3d615868e590592516c5c0klu
80476f47800b076c352b3d615868e590592516c5c0kluextern gEfiSmmRscHandlerProtocolGuid;
81476f47800b076c352b3d615868e590592516c5c0klu
82476f47800b076c352b3d615868e590592516c5c0klu#endif // __SMM_REPORT_STATUS_CODE_HANDLER_PROTOCOL_H__
83