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