• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /** @file
2   MCA/PMI/INIT Protocol as defined in PI Specification VOLUME 4.
3 
4   This protocol provides services to handle Machine Checks (MCA),
5   Initialization (INIT) events, and Platform Management Interrupt (PMI) events
6   on an Intel Itanium Processor Family based system.
7 
8   Copyright (c) 2009 - 2010, Intel Corporation. All rights reserved.<BR>
9   This program and the accompanying materials
10   are licensed and made available under the terms and conditions of the BSD License
11   which accompanies this distribution.  The full text of the license may be found at
12   http://opensource.org/licenses/bsd-license.php
13 
14   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
15   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
16 
17 **/
18 
19 #ifndef __MCA_INIT_PMI_PROTOCOL_H__
20 #define __MCA_INIT_PMI_PROTOCOL_H__
21 
22 ///
23 /// Global ID for the MCA/PMI/INIT Protocol.
24 ///
25 #define EFI_SAL_MCA_INIT_PMI_PROTOCOL_GUID \
26   { 0xb60dc6e8, 0x3b6f, 0x11d5, {0xaf, 0x9, 0x0, 0xa0, 0xc9, 0x44, 0xa0, 0x5b} }
27 
28 
29 ///
30 /// Declare forward reference for the Timer Architectural Protocol
31 ///
32 typedef struct _EFI_SAL_MCA_INIT_PMI_PROTOCOL  EFI_SAL_MCA_INIT_PMI_PROTOCOL;
33 
34 #pragma pack(1)
35 ///
36 /// MCA Records Structure
37 ///
38 typedef struct {
39   UINT64  First : 1;
40   UINT64  Last : 1;
41   UINT64  EntryCount : 16;
42   UINT64  DispatchedCount : 16;
43   UINT64  Reserved : 30;
44 } SAL_MCA_COUNT_STRUCTURE;
45 
46 #pragma pack()
47 
48 /**
49   Prototype of MCA handler.
50 
51   @param  ModuleGlobal                The context of MCA Handler
52   @param  ProcessorStateParameters    The processor state parameters (PSP)
53   @param  MinstateBase                Base address of the min-state
54   @param  RendezvouseStateInformation Rendezvous state information to be passed to
55                                       the OS on OS MCA entry
56   @param  CpuIndex                    Index of the logical processor
57   @param  McaCountStructure           Pointer to the MCA records structure
58   @param  CorrectedMachineCheck       This flag is set to TRUE is the MCA has been
59                                       corrected by the handler or by a previous handler
60 
61   @retval EFI_SUCCESS                 Handler successfully returned
62 
63 **/
64 typedef
65 EFI_STATUS
66 (EFIAPI *EFI_SAL_MCA_HANDLER)(
67   IN  VOID                    *ModuleGlobal,
68   IN  UINT64                  ProcessorStateParameters,
69   IN  EFI_PHYSICAL_ADDRESS    MinstateBase,
70   IN  UINT64                  RendezvouseStateInformation,
71   IN  UINT64                  CpuIndex,
72   IN  SAL_MCA_COUNT_STRUCTURE *McaCountStructure,
73   OUT BOOLEAN                 *CorrectedMachineCheck
74   );
75 
76 /**
77   Prototype of INIT handler.
78 
79   @param  ModuleGlobal                The context of INIT Handler
80   @param  ProcessorStateParameters    The processor state parameters (PSP)
81   @param  MinstateBase                Base address of the min-state
82   @param  McaInProgress               This flag indicates if an MCA is in progress
83   @param  CpuIndex                    Index of the logical processor
84   @param  McaCountStructure           Pointer to the MCA records structure
85   @param  DumpSwitchPressed           This flag indicates the crash dump switch has been pressed
86 
87   @retval EFI_SUCCESS                 Handler successfully returned
88 
89 **/
90 typedef
91 EFI_STATUS
92 (EFIAPI *EFI_SAL_INIT_HANDLER)(
93   IN  VOID                     *ModuleGlobal,
94   IN  UINT64                   ProcessorStateParameters,
95   IN  EFI_PHYSICAL_ADDRESS     MinstateBase,
96   IN  BOOLEAN                  McaInProgress,
97   IN  UINT64                   CpuIndex,
98   IN  SAL_MCA_COUNT_STRUCTURE  *McaCountStructure,
99   OUT BOOLEAN                  *DumpSwitchPressed
100   );
101 
102 /**
103   Prototype of PMI handler
104 
105   @param  ModuleGlobal                The context of PMI Handler
106   @param  CpuIndex                    Index of the logical processor
107   @param  PmiVector                   The PMI vector number as received from the PALE_PMI exit state (GR24)
108 
109   @retval EFI_SUCCESS                 Handler successfully returned
110 
111 **/
112 typedef
113 EFI_STATUS
114 (EFIAPI *EFI_SAL_PMI_HANDLER)(
115   IN VOID          *ModuleGlobal,
116   IN UINT64        CpuIndex,
117   IN UINT64        PmiVector
118   );
119 
120 /**
121   Register a MCA handler with the MCA dispatcher.
122 
123   @param  This                        The EFI_SAL_MCA_INIT_PMI_PROTOCOL instance
124   @param  McaHandler                  The MCA handler to register
125   @param  ModuleGlobal                The context of MCA Handler
126   @param  MakeFirst                   This flag specifies the handler should be made first in the list
127   @param  MakeLast                    This flag specifies the handler should be made last in the list
128 
129   @retval EFI_SUCCESS                 MCA Handle was registered
130   @retval EFI_OUT_OF_RESOURCES        No more resources to register an MCA handler
131   @retval EFI_INVALID_PARAMETER       Invalid parameters were passed
132 
133 **/
134 typedef
135 EFI_STATUS
136 (EFIAPI *EFI_SAL_REGISTER_MCA_HANDLER)(
137   IN  EFI_SAL_MCA_INIT_PMI_PROTOCOL         *This,
138   IN  EFI_SAL_MCA_HANDLER                   McaHandler,
139   IN  VOID                                  *ModuleGlobal,
140   IN  BOOLEAN                               MakeFirst,
141   IN  BOOLEAN                               MakeLast
142   );
143 
144 /**
145   Register an INIT handler with the INIT dispatcher.
146 
147   @param  This                        The EFI_SAL_MCA_INIT_PMI_PROTOCOL instance
148   @param  InitHandler                 The INIT handler to register
149   @param  ModuleGlobal                The context of INIT Handler
150   @param  MakeFirst                   This flag specifies the handler should be made first in the list
151   @param  MakeLast                    This flag specifies the handler should be made last in the list
152 
153   @retval EFI_SUCCESS                 INIT Handle was registered
154   @retval EFI_OUT_OF_RESOURCES        No more resources to register an INIT handler
155   @retval EFI_INVALID_PARAMETER       Invalid parameters were passed
156 
157 **/
158 typedef
159 EFI_STATUS
160 (EFIAPI *EFI_SAL_REGISTER_INIT_HANDLER)(
161   IN  EFI_SAL_MCA_INIT_PMI_PROTOCOL         *This,
162   IN  EFI_SAL_INIT_HANDLER                  InitHandler,
163   IN  VOID                                  *ModuleGlobal,
164   IN  BOOLEAN                               MakeFirst,
165   IN  BOOLEAN                               MakeLast
166   );
167 
168 /**
169   Register a PMI handler with the PMI dispatcher.
170 
171   @param  This                        The EFI_SAL_MCA_INIT_PMI_PROTOCOL instance
172   @param  PmiHandler                  The PMI handler to register
173   @param  ModuleGlobal                The context of PMI Handler
174   @param  MakeFirst                   This flag specifies the handler should be made first in the list
175   @param  MakeLast                    This flag specifies the handler should be made last in the list
176 
177   @retval EFI_SUCCESS                 PMI Handle was registered
178   @retval EFI_OUT_OF_RESOURCES        No more resources to register an PMI handler
179   @retval EFI_INVALID_PARAMETER       Invalid parameters were passed
180 
181 **/
182 typedef
183 EFI_STATUS
184 (EFIAPI *EFI_SAL_REGISTER_PMI_HANDLER)(
185   IN  EFI_SAL_MCA_INIT_PMI_PROTOCOL         *This,
186   IN  EFI_SAL_PMI_HANDLER                   PmiHandler,
187   IN  VOID                                  *ModuleGlobal,
188   IN  BOOLEAN                               MakeFirst,
189   IN  BOOLEAN                               MakeLast
190   );
191 
192 ///
193 /// This protocol is used to register MCA, INIT and PMI handlers with their respective dispatcher
194 ///
195 struct _EFI_SAL_MCA_INIT_PMI_PROTOCOL {
196   EFI_SAL_REGISTER_MCA_HANDLER  RegisterMcaHandler;
197   EFI_SAL_REGISTER_INIT_HANDLER RegisterInitHandler;
198   EFI_SAL_REGISTER_PMI_HANDLER  RegisterPmiHandler;
199   BOOLEAN                       McaInProgress;       ///< Whether MCA handler is in progress
200   BOOLEAN                       InitInProgress;      ///< Whether Init handler is in progress
201   BOOLEAN                       PmiInProgress;       ///< Whether Pmi handler is in progress
202 };
203 
204 extern EFI_GUID gEfiSalMcaInitPmiProtocolGuid;
205 
206 #endif
207 
208