1476f47800b076c352b3d615868e590592516c5c0klu/** @file
2476f47800b076c352b3d615868e590592516c5c0klu  This protocol provides registering and unregistering services to status code consumers while in DXE SMM.
3476f47800b076c352b3d615868e590592516c5c0klu
49df063a06aef048c042498e2f542fb693e93493ahhtian  Copyright (c) 2007 - 2009, Intel Corporation. All rights reserved.<BR>
59df063a06aef048c042498e2f542fb693e93493ahhtian  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  { \
2041d848240fac7a8650466b44859f6557d5cbb600qhuang    0x2ff29fa7, 0x5e80, 0x4ed9, {0xb3, 0x80, 0x1, 0x7d, 0x3c, 0x55, 0x4f, 0xf4} \
21476f47800b076c352b3d615868e590592516c5c0klu  }
22476f47800b076c352b3d615868e590592516c5c0klu
23476f47800b076c352b3d615868e590592516c5c0klutypedef
24476f47800b076c352b3d615868e590592516c5c0kluEFI_STATUS
25476f47800b076c352b3d615868e590592516c5c0klu(EFIAPI *EFI_SMM_RSC_HANDLER_CALLBACK)(
26476f47800b076c352b3d615868e590592516c5c0klu  IN EFI_STATUS_CODE_TYPE   CodeType,
27476f47800b076c352b3d615868e590592516c5c0klu  IN EFI_STATUS_CODE_VALUE  Value,
28476f47800b076c352b3d615868e590592516c5c0klu  IN UINT32                 Instance,
29476f47800b076c352b3d615868e590592516c5c0klu  IN EFI_GUID               *CallerId,
30476f47800b076c352b3d615868e590592516c5c0klu  IN EFI_STATUS_CODE_DATA   *Data
31476f47800b076c352b3d615868e590592516c5c0klu);
32476f47800b076c352b3d615868e590592516c5c0klu
33476f47800b076c352b3d615868e590592516c5c0klu/**
34476f47800b076c352b3d615868e590592516c5c0klu  Register the callback function for ReportStatusCode() notification.
35476f47800b076c352b3d615868e590592516c5c0klu
36476f47800b076c352b3d615868e590592516c5c0klu  When this function is called the function pointer is added to an internal list and any future calls to
37476f47800b076c352b3d615868e590592516c5c0klu  ReportStatusCode() will be forwarded to the Callback function.
38476f47800b076c352b3d615868e590592516c5c0klu
39476f47800b076c352b3d615868e590592516c5c0klu  @param[in] Callback               A pointer to a function of type EFI_RSC_HANDLER_CALLBACK that is called when
40476f47800b076c352b3d615868e590592516c5c0klu                                    a call to ReportStatusCode() occurs.
41476f47800b076c352b3d615868e590592516c5c0klu
42476f47800b076c352b3d615868e590592516c5c0klu  @retval EFI_SUCCESS               Function was successfully registered.
43476f47800b076c352b3d615868e590592516c5c0klu  @retval EFI_INVALID_PARAMETER     The callback function was NULL.
44476f47800b076c352b3d615868e590592516c5c0klu  @retval EFI_OUT_OF_RESOURCES      The internal buffer ran out of space. No more functions can be
45476f47800b076c352b3d615868e590592516c5c0klu                                    registered.
46176648481e5f5edd4cb2770ff7cd25dc8dd426c5qhuang  @retval EFI_ALREADY_STARTED       The function was already registered. It can't be registered again.
47476f47800b076c352b3d615868e590592516c5c0klu**/
48476f47800b076c352b3d615868e590592516c5c0klutypedef
49476f47800b076c352b3d615868e590592516c5c0kluEFI_STATUS
50476f47800b076c352b3d615868e590592516c5c0klu(EFIAPI *EFI_SMM_RSC_HANDLER_REGISTER)(
51476f47800b076c352b3d615868e590592516c5c0klu  IN EFI_SMM_RSC_HANDLER_CALLBACK Callback
52476f47800b076c352b3d615868e590592516c5c0klu);
53476f47800b076c352b3d615868e590592516c5c0klu
54476f47800b076c352b3d615868e590592516c5c0klu/**
55476f47800b076c352b3d615868e590592516c5c0klu  Remove a previously registered callback function from the notification list.
56476f47800b076c352b3d615868e590592516c5c0klu
57476f47800b076c352b3d615868e590592516c5c0klu  A callback function must be unregistered before it is deallocated. It is important that any registered
58476f47800b076c352b3d615868e590592516c5c0klu  callbacks that are not runtime complaint be unregistered when ExitBootServices() is called.
59476f47800b076c352b3d615868e590592516c5c0klu
60476f47800b076c352b3d615868e590592516c5c0klu  @param[in] Callback           A pointer to a function of type EFI_SMM_RSC_HANDLER_CALLBACK that is to be
61476f47800b076c352b3d615868e590592516c5c0klu                                unregistered.
62476f47800b076c352b3d615868e590592516c5c0klu
63476f47800b076c352b3d615868e590592516c5c0klu  @retval EFI_SUCCESS           The function was successfully unregistered.
64476f47800b076c352b3d615868e590592516c5c0klu  @retval EFI_INVALID_PARAMETER The callback function was NULL.
65476f47800b076c352b3d615868e590592516c5c0klu  @retval EFI_NOT_FOUND         The callback function was not found to be unregistered.
66476f47800b076c352b3d615868e590592516c5c0klu
67476f47800b076c352b3d615868e590592516c5c0klu**/
68476f47800b076c352b3d615868e590592516c5c0klutypedef
69476f47800b076c352b3d615868e590592516c5c0kluEFI_STATUS
7090f6a2c69c7a2bfd56ec67b11e347692deaf7587qhuang(EFIAPI *EFI_SMM_RSC_HANDLER_UNREGISTER)(
71476f47800b076c352b3d615868e590592516c5c0klu  IN EFI_SMM_RSC_HANDLER_CALLBACK Callback
72476f47800b076c352b3d615868e590592516c5c0klu);
73476f47800b076c352b3d615868e590592516c5c0klu
74476f47800b076c352b3d615868e590592516c5c0klutypedef struct _EFI_SMM_RSC_HANDLER_PROTOCOL {
75f711436ba58b7cdb29881b9096dd9f39fe767c42davidhuang  EFI_SMM_RSC_HANDLER_REGISTER      Register;
76f711436ba58b7cdb29881b9096dd9f39fe767c42davidhuang  EFI_SMM_RSC_HANDLER_UNREGISTER    Unregister;
77476f47800b076c352b3d615868e590592516c5c0klu} EFI_SMM_RSC_HANDLER_PROTOCOL;
78476f47800b076c352b3d615868e590592516c5c0klu
79f711436ba58b7cdb29881b9096dd9f39fe767c42davidhuangextern EFI_GUID gEfiSmmRscHandlerProtocolGuid;
80476f47800b076c352b3d615868e590592516c5c0klu
81476f47800b076c352b3d615868e590592516c5c0klu#endif // __SMM_REPORT_STATUS_CODE_HANDLER_PROTOCOL_H__
82