• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /** @file
2   Internal include file of Status Code Runtime DXE Driver.
3 
4   Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
5   This program and the accompanying materials
6   are licensed and made available under the terms and conditions of the BSD License
7   which accompanies this distribution.  The full text of the license may be found at
8   http://opensource.org/licenses/bsd-license.php
9 
10   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12 
13 **/
14 
15 #ifndef __STATUS_CODE_RUNTIME_DXE_H__
16 #define __STATUS_CODE_RUNTIME_DXE_H__
17 
18 
19 #include <FrameworkDxe.h>
20 #include <Guid/DataHubStatusCodeRecord.h>
21 #include <Protocol/DataHub.h>
22 #include <Guid/MemoryStatusCodeRecord.h>
23 #include <Protocol/StatusCode.h>
24 #include <Guid/StatusCodeDataTypeId.h>
25 #include <Guid/StatusCodeDataTypeDebug.h>
26 #include <Guid/EventGroup.h>
27 
28 #include <Library/BaseLib.h>
29 #include <Library/SynchronizationLib.h>
30 #include <Library/BaseMemoryLib.h>
31 #include <Library/DebugLib.h>
32 #include <Library/ReportStatusCodeLib.h>
33 #include <Library/PrintLib.h>
34 #include <Library/PcdLib.h>
35 #include <Library/HobLib.h>
36 #include <Library/UefiDriverEntryPoint.h>
37 #include <Library/UefiBootServicesTableLib.h>
38 #include <Library/UefiLib.h>
39 #include <Library/MemoryAllocationLib.h>
40 #include <Library/UefiRuntimeLib.h>
41 #include <Library/SerialPortLib.h>
42 #include <Library/OemHookStatusCodeLib.h>
43 
44 //
45 // Data hub worker definition
46 //
47 #define DATAHUB_STATUS_CODE_SIGNATURE             SIGNATURE_32 ('B', 'D', 'H', 'S')
48 
49 typedef struct {
50   UINTN       Signature;
51   LIST_ENTRY  Node;
52   UINT8       Data[sizeof(DATA_HUB_STATUS_CODE_DATA_RECORD) + EFI_STATUS_CODE_DATA_MAX_SIZE];
53 } DATAHUB_STATUSCODE_RECORD;
54 
55 
56 extern RUNTIME_MEMORY_STATUSCODE_HEADER  *mRtMemoryStatusCodeTable;
57 
58 /**
59   Report status code to all supported device.
60 
61   This function implements EFI_STATUS_CODE_PROTOCOL.ReportStatusCode().
62   It calls into the workers which dispatches the platform specific listeners.
63 
64   @param  CodeType         Indicates the type of status code being reported.
65   @param  Value            Describes the current status of a hardware or software entity.
66                            This included information about the class and subclass that is used to
67                            classify the entity as well as an operation.
68   @param  Instance         The enumeration of a hardware or software entity within
69                            the system. Valid instance numbers start with 1.
70   @param  CallerId         This optional parameter may be used to identify the caller.
71                            This parameter allows the status code driver to apply different rules to
72                            different callers.
73   @param  Data             This optional parameter may be used to pass additional data.
74 
75   @retval EFI_SUCCESS      The function completed successfully
76   @retval EFI_DEVICE_ERROR The function should not be completed due to a device error.
77 
78 **/
79 EFI_STATUS
80 EFIAPI
81 ReportDispatcher (
82   IN EFI_STATUS_CODE_TYPE     CodeType,
83   IN EFI_STATUS_CODE_VALUE    Value,
84   IN UINT32                   Instance,
85   IN EFI_GUID                 *CallerId  OPTIONAL,
86   IN EFI_STATUS_CODE_DATA     *Data      OPTIONAL
87   );
88 
89 /**
90   Dispatch initialization request to sub status code devices based on
91   customized feature flags.
92 
93 **/
94 VOID
95 InitializationDispatcherWorker (
96   VOID
97   );
98 
99 
100 /**
101   Locates Serial I/O Protocol as initialization for serial status code worker.
102 
103   @retval EFI_SUCCESS  Serial I/O Protocol is successfully located.
104 
105 **/
106 EFI_STATUS
107 EfiSerialStatusCodeInitializeWorker (
108   VOID
109   );
110 
111 
112 /**
113   Convert status code value and extended data to readable ASCII string, send string to serial I/O device.
114 
115   @param  CodeType         Indicates the type of status code being reported.
116   @param  Value            Describes the current status of a hardware or software entity.
117                            This included information about the class and subclass that is used to
118                            classify the entity as well as an operation.
119   @param  Instance         The enumeration of a hardware or software entity within
120                            the system. Valid instance numbers start with 1.
121   @param  CallerId         This optional parameter may be used to identify the caller.
122                            This parameter allows the status code driver to apply different rules to
123                            different callers.
124   @param  Data             This optional parameter may be used to pass additional data.
125 
126   @retval EFI_SUCCESS      Status code reported to serial I/O successfully.
127   @retval EFI_DEVICE_ERROR EFI serial device cannot work after ExitBootService() is called.
128   @retval EFI_DEVICE_ERROR EFI serial device cannot work with TPL higher than TPL_CALLBACK.
129 
130 **/
131 EFI_STATUS
132 SerialStatusCodeReportWorker (
133   IN EFI_STATUS_CODE_TYPE     CodeType,
134   IN EFI_STATUS_CODE_VALUE    Value,
135   IN UINT32                   Instance,
136   IN EFI_GUID                 *CallerId,
137   IN EFI_STATUS_CODE_DATA     *Data OPTIONAL
138   );
139 
140 /**
141   Initialize runtime memory status code table as initialization for runtime memory status code worker
142 
143   @retval EFI_SUCCESS  Runtime memory status code table successfully initialized.
144 
145 **/
146 EFI_STATUS
147 RtMemoryStatusCodeInitializeWorker (
148   VOID
149   );
150 
151 /**
152   Report status code into runtime memory. If the runtime pool is full, roll back to the
153   first record and overwrite it.
154 
155   @param  CodeType                Indicates the type of status code being reported.
156   @param  Value                   Describes the current status of a hardware or software entity.
157                                   This included information about the class and subclass that is used to
158                                   classify the entity as well as an operation.
159   @param  Instance                The enumeration of a hardware or software entity within
160                                   the system. Valid instance numbers start with 1.
161 
162   @retval EFI_SUCCESS             Status code successfully recorded in runtime memory status code table.
163 
164 **/
165 EFI_STATUS
166 RtMemoryStatusCodeReportWorker (
167   IN EFI_STATUS_CODE_TYPE               CodeType,
168   IN EFI_STATUS_CODE_VALUE              Value,
169   IN UINT32                             Instance
170   );
171 
172 /**
173   Locate Data Hub Protocol and create event for logging data
174   as initialization for data hub status code worker.
175 
176   @retval EFI_SUCCESS  Initialization is successful.
177 
178 **/
179 EFI_STATUS
180 DataHubStatusCodeInitializeWorker (
181   VOID
182   );
183 
184 
185 /**
186   Report status code into DataHub.
187 
188   @param  CodeType             Indicates the type of status code being reported.
189   @param  Value                Describes the current status of a hardware or software entity.
190                                This included information about the class and subclass that is used to
191                                classify the entity as well as an operation.
192   @param  Instance             The enumeration of a hardware or software entity within
193                                the system. Valid instance numbers start with 1.
194   @param  CallerId             This optional parameter may be used to identify the caller.
195                                This parameter allows the status code driver to apply different rules to
196                                different callers.
197   @param  Data                 This optional parameter may be used to pass additional data.
198 
199   @retval EFI_SUCCESS          The function completed successfully.
200   @retval EFI_DEVICE_ERROR     Function is reentered.
201   @retval EFI_DEVICE_ERROR     Function is called at runtime.
202   @retval EFI_OUT_OF_RESOURCES Fail to allocate memory for free record buffer.
203 
204 **/
205 EFI_STATUS
206 DataHubStatusCodeReportWorker (
207   IN EFI_STATUS_CODE_TYPE     CodeType,
208   IN EFI_STATUS_CODE_VALUE    Value,
209   IN UINT32                   Instance,
210   IN EFI_GUID                 *CallerId,
211   IN EFI_STATUS_CODE_DATA     *Data OPTIONAL
212   );
213 
214 
215 /**
216   Virtual address change notification call back. It converts global pointer
217   to virtual address.
218 
219   @param  Event         Event whose notification function is being invoked.
220   @param  Context       Pointer to the notification function's context, which is
221                         always zero in current implementation.
222 
223 **/
224 VOID
225 EFIAPI
226 VirtualAddressChangeCallBack (
227   IN EFI_EVENT  Event,
228   IN VOID       *Context
229   );
230 
231 #endif
232