1 /** @file 2 Status Code Handler Driver which produces general handlers and hook them 3 onto the MM status code router. 4 5 Copyright (c) 2009 - 2020, Intel Corporation. All rights reserved.<BR> 6 SPDX-License-Identifier: BSD-2-Clause-Patent 7 8 **/ 9 10 #include "StatusCodeHandlerMm.h" 11 12 EFI_MM_RSC_HANDLER_PROTOCOL *mRscHandlerProtocol = NULL; 13 14 15 /** 16 Dispatch initialization request to sub status code devices based on 17 customized feature flags. 18 19 **/ 20 VOID InitializationDispatcherWorker(VOID)21InitializationDispatcherWorker ( 22 VOID 23 ) 24 { 25 EFI_STATUS Status; 26 27 // 28 // If enable UseSerial, then initialize serial port. 29 // if enable UseRuntimeMemory, then initialize runtime memory status code worker. 30 // 31 if (PcdGetBool (PcdStatusCodeUseSerial)) { 32 // 33 // Call Serial Port Lib API to initialize serial port. 34 // 35 Status = SerialPortInitialize (); 36 ASSERT_EFI_ERROR (Status); 37 } 38 if (PcdGetBool (PcdStatusCodeUseMemory)) { 39 Status = MemoryStatusCodeInitializeWorker (); 40 ASSERT_EFI_ERROR (Status); 41 } 42 } 43 44 /** 45 Entry point of Common MM Status Code Driver. 46 47 This function is the entry point of MM Status Code Driver. 48 49 @retval EFI_SUCCESS The entry point is executed successfully. 50 51 **/ 52 EFI_STATUS StatusCodeHandlerCommonEntry(VOID)53StatusCodeHandlerCommonEntry ( 54 VOID 55 ) 56 { 57 EFI_STATUS Status; 58 59 Status = gMmst->MmLocateProtocol ( 60 &gEfiMmRscHandlerProtocolGuid, 61 NULL, 62 (VOID **) &mRscHandlerProtocol 63 ); 64 ASSERT_EFI_ERROR (Status); 65 66 // 67 // Dispatch initialization request to supported devices 68 // 69 InitializationDispatcherWorker (); 70 71 if (PcdGetBool (PcdStatusCodeUseSerial)) { 72 mRscHandlerProtocol->Register (SerialStatusCodeReportWorker); 73 } 74 if (PcdGetBool (PcdStatusCodeUseMemory)) { 75 mRscHandlerProtocol->Register (MemoryStatusCodeReportWorker); 76 } 77 78 return EFI_SUCCESS; 79 } 80