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// 43typedef struct { 44 UINT32 RecordIndex; 45 UINT32 NumberOfRecords; 46 UINT32 MaxRecordsNumber; 47} RUNTIME_MEMORY_STATUSCODE_HEADER; 48 49extern 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**/ 57EFI_STATUS 58EfiSerialStatusCodeInitializeWorker ( 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**/ 82EFI_STATUS 83EFIAPI 84SerialStatusCodeReportWorker ( 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**/ 98EFI_STATUS 99MemoryStatusCodeInitializeWorker ( 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**/ 121EFI_STATUS 122EFIAPI 123MemoryStatusCodeReportWorker ( 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