]> git.proxmox.com Git - mirror_edk2.git/blob - Vlv2TbltDevicePkg/MonoStatusCode/MonoStatusCode.c
Vlv2TbltDevicePkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / Vlv2TbltDevicePkg / MonoStatusCode / MonoStatusCode.c
1 /** @file
2
3 Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
4
5 SPDX-License-Identifier: BSD-2-Clause-Patent
6
7
8
9 Module Name:
10
11
12 MonoStatusCode.c
13
14 Abstract:
15
16 PEIM to provide the status code functionality, to aid in system debug.
17 It includes output to 0x80 port and/or to serial port.
18 This PEIM is monolithic. Different platform should provide different library.
19
20 --*/
21
22 #include "MonoStatusCode.h"
23 #include "PlatformStatusCode.h"
24 #define CMOS_EFI_DEBUG 0x14
25
26 //
27 // Module globals
28 //
29 EFI_PEI_PROGRESS_CODE_PPI mStatusCodePpi = { PlatformReportStatusCode };
30
31 EFI_PEI_PPI_DESCRIPTOR mPpiListStatusCode = {
32 (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
33 &gEfiPeiStatusCodePpiGuid,
34 &mStatusCodePpi
35 };
36
37 //
38 // Function implemenations
39 //
40
41 /**
42 Translate from a DXE status code interface into a PEI-callable
43 interface, making the PEI the least common denominator..
44
45 Same as DXE ReportStatusCode RT service
46
47
48 **/
49 EFI_STATUS
50 EFIAPI
51 TranslateDxeStatusCodeToPeiStatusCode (
52 IN EFI_STATUS_CODE_TYPE CodeType,
53 IN EFI_STATUS_CODE_VALUE Value,
54 IN UINT32 Instance,
55 IN EFI_GUID * CallerId,
56 IN EFI_STATUS_CODE_DATA * Data OPTIONAL
57 )
58 {
59 return PlatformReportStatusCode (NULL, CodeType, Value, Instance, CallerId, Data);
60 }
61
62 /**
63 Build a hob describing the status code listener that has been installed.
64 This will be used by DXE code until a runtime status code listener is
65 installed.
66
67 @param PeiServices General purpose services available to every PEIM.
68
69 @retval Status EFI_SUCCESS if the interface could be successfully
70 installed
71
72 **/
73 EFI_STATUS
74 EFIAPI
75 InitializeDxeReportStatusCode (
76 IN const EFI_PEI_SERVICES **PeiServices
77 )
78 {
79 EFI_STATUS Status = EFI_UNSUPPORTED;
80
81 VOID *Instance;
82
83 VOID *Result;
84
85 Instance = (VOID *) (UINTN) TranslateDxeStatusCodeToPeiStatusCode;
86
87 Result = BuildGuidDataHob (
88 &gEfiStatusCodeRuntimeProtocolGuid,
89 &Instance,
90 sizeof (VOID *)
91 );
92 if (Result != NULL) {
93 Status = EFI_SUCCESS;
94 }
95 return Status;
96 }
97
98 /**
99 Initialize the platform status codes and publish the platform status code
100 PPI.
101
102 @param FfsHeader FV this PEIM was loaded from.
103 @param PeiServices General purpose services available to every PEIM.
104
105 @retval Status EFI_SUCCESS
106
107 **/
108 VOID
109 EFIAPI
110 InitializeMonoStatusCode (
111 IN EFI_FFS_FILE_HEADER *FfsHeader,
112 IN CONST EFI_PEI_SERVICES **PeiServices
113 )
114 {
115 EFI_STATUS Status;
116
117 //
118 // Initialize status code listeners.
119 //
120 PlatformInitializeStatusCode (FfsHeader, PeiServices);
121
122 //
123 // Publish the status code capability to other modules
124 //
125 Status = (*PeiServices)->InstallPpi (PeiServices, &mPpiListStatusCode);
126
127 ASSERT_EFI_ERROR (Status);
128
129 DEBUG ((DEBUG_ERROR, "\nMono Status Code PEIM Loaded\n"));
130
131 return ;
132 }