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)21 InitializationDispatcherWorker (
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)53 StatusCodeHandlerCommonEntry (
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