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