1 /** @file 2 Internal include file for Status Code Handler Driver. 3 4 Copyright (c) 2009 - 2012, Intel Corporation. All rights reserved.<BR> 5 This program and the accompanying materials 6 are licensed and made available under the terms and conditions of the BSD License 7 which accompanies this distribution. 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 15 #ifndef __STATUS_CODE_HANDLER_SMM_H__ 16 #define __STATUS_CODE_HANDLER_SMM_H__ 17 18 #include <Protocol/SmmReportStatusCodeHandler.h> 19 20 #include <Guid/MemoryStatusCodeRecord.h> 21 #include <Guid/StatusCodeDataTypeId.h> 22 #include <Guid/StatusCodeDataTypeDebug.h> 23 24 #include <Library/SynchronizationLib.h> 25 #include <Library/DebugLib.h> 26 #include <Library/ReportStatusCodeLib.h> 27 #include <Library/PrintLib.h> 28 #include <Library/PcdLib.h> 29 #include <Library/UefiDriverEntryPoint.h> 30 #include <Library/SmmServicesTableLib.h> 31 #include <Library/SerialPortLib.h> 32 #include <Library/MemoryAllocationLib.h> 33 #include <Library/BaseMemoryLib.h> 34 35 // 36 // Define the maximum message length 37 // 38 #define MAX_DEBUG_MESSAGE_LENGTH 0x100 39 40 // 41 // Runtime memory status code worker definition 42 // 43 typedef struct { 44 UINT32 RecordIndex; 45 UINT32 NumberOfRecords; 46 UINT32 MaxRecordsNumber; 47 } RUNTIME_MEMORY_STATUSCODE_HEADER; 48 49 extern RUNTIME_MEMORY_STATUSCODE_HEADER *mSmmMemoryStatusCodeTable; 50 51 /** 52 Locates Serial I/O Protocol as initialization for serial status code worker. 53 54 @retval EFI_SUCCESS Serial I/O Protocol is successfully located. 55 56 **/ 57 EFI_STATUS 58 EfiSerialStatusCodeInitializeWorker ( 59 VOID 60 ); 61 62 63 /** 64 Convert status code value and extended data to readable ASCII string, send string to serial I/O device. 65 66 @param CodeType Indicates the type of status code being reported. 67 @param Value Describes the current status of a hardware or software entity. 68 This included information about the class and subclass that is used to 69 classify the entity as well as an operation. 70 @param Instance The enumeration of a hardware or software entity within 71 the system. Valid instance numbers start with 1. 72 @param CallerId This optional parameter may be used to identify the caller. 73 This parameter allows the status code driver to apply different rules to 74 different callers. 75 @param Data This optional parameter may be used to pass additional data. 76 77 @retval EFI_SUCCESS Status code reported to serial I/O successfully. 78 @retval EFI_DEVICE_ERROR EFI serial device cannot work after ExitBootService() is called. 79 @retval EFI_DEVICE_ERROR EFI serial device cannot work with TPL higher than TPL_CALLBACK. 80 81 **/ 82 EFI_STATUS 83 EFIAPI 84 SerialStatusCodeReportWorker ( 85 IN EFI_STATUS_CODE_TYPE CodeType, 86 IN EFI_STATUS_CODE_VALUE Value, 87 IN UINT32 Instance, 88 IN EFI_GUID *CallerId, 89 IN EFI_STATUS_CODE_DATA *Data OPTIONAL 90 ); 91 92 /** 93 Initialize runtime memory status code table as initialization for runtime memory status code worker 94 95 @retval EFI_SUCCESS Runtime memory status code table successfully initialized. 96 97 **/ 98 EFI_STATUS 99 MemoryStatusCodeInitializeWorker ( 100 VOID 101 ); 102 103 /** 104 Report status code into runtime memory. If the runtime pool is full, roll back to the 105 first record and overwrite it. 106 107 @param CodeType Indicates the type of status code being reported. 108 @param Value Describes the current status of a hardware or software entity. 109 This included information about the class and subclass that is used to 110 classify the entity as well as an operation. 111 @param Instance The enumeration of a hardware or software entity within 112 the system. Valid instance numbers start with 1. 113 @param CallerId This optional parameter may be used to identify the caller. 114 This parameter allows the status code driver to apply different rules to 115 different callers. 116 @param Data This optional parameter may be used to pass additional data. 117 118 @retval EFI_SUCCESS Status code successfully recorded in runtime memory status code table. 119 120 **/ 121 EFI_STATUS 122 EFIAPI 123 MemoryStatusCodeReportWorker ( 124 IN EFI_STATUS_CODE_TYPE CodeType, 125 IN EFI_STATUS_CODE_VALUE Value, 126 IN UINT32 Instance, 127 IN EFI_GUID *CallerId, 128 IN EFI_STATUS_CODE_DATA *Data OPTIONAL 129 ); 130 131 #endif 132