mirror of
				https://github.com/acidanthera/audk.git
				synced 2025-11-04 05:25:45 +01:00 
			
		
		
		
	EFI_SIGNATURE_16 -> SIGNATURE_16 EFI_SIGNATURE_32 -> SIGNATURE_32 EFI_SIGNATURE_64 -> SIGNATURE_64 EFI_FIELD_OFFSET -> OFFSET_OF EFI_MAX_BIT -> MAX_BIT EFI_MAX_ADDRESS -> MAX_ADDRESS These macros are not defined in UEFI spec. It makes more sense to use the equivalent macros in Base.h to avoid alias. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@7050 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			275 lines
		
	
	
		
			9.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			275 lines
		
	
	
		
			9.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
 | 
						|
  Copyright (c) 2006, Intel Corporation
 | 
						|
  All rights reserved. This program and the accompanying materials
 | 
						|
  are licensed and made available under the terms and conditions of the BSD License
 | 
						|
  which accompanies this distribution.  The full text of the license may be found at
 | 
						|
  http://opensource.org/licenses/bsd-license.php
 | 
						|
 | 
						|
  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
 | 
						|
  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef __DXE_STATUS_CODE_H__
 | 
						|
#define __DXE_STATUS_CODE_H__
 | 
						|
 | 
						|
 | 
						|
#include <FrameworkDxe.h>
 | 
						|
#include <FrameworkModuleDxe.h>
 | 
						|
#include <Guid/DataHubStatusCodeRecord.h>
 | 
						|
#include <Protocol/DataHub.h>
 | 
						|
#include <Protocol/SerialIo.h>
 | 
						|
#include <Guid/MemoryStatusCodeRecord.h>
 | 
						|
#include <Protocol/StatusCode.h>
 | 
						|
#include <Guid/StatusCodeDataTypeId.h>
 | 
						|
 | 
						|
#include <Library/BaseLib.h>
 | 
						|
#include <Library/BaseMemoryLib.h>
 | 
						|
#include <Library/DebugLib.h>
 | 
						|
#include <Library/ReportStatusCodeLib.h>
 | 
						|
#include <Library/PrintLib.h>
 | 
						|
#include <Library/PcdLib.h>
 | 
						|
#include <Library/HobLib.h>
 | 
						|
#include <Library/UefiDriverEntryPoint.h>
 | 
						|
#include <Library/UefiBootServicesTableLib.h>
 | 
						|
#include <Library/UefiLib.h>
 | 
						|
#include <Library/MemoryAllocationLib.h>
 | 
						|
#include <Library/UefiRuntimeLib.h>
 | 
						|
#include <Library/SerialPortLib.h>
 | 
						|
#include <Library/OemHookStatusCodeLib.h>
 | 
						|
 | 
						|
//
 | 
						|
// Data hub worker definition
 | 
						|
//
 | 
						|
#define MAX_NUMBER_DATAHUB_RECORDS                1000
 | 
						|
#define DATAHUB_BYTES_PER_RECORD                  EFI_STATUS_CODE_DATA_MAX_SIZE
 | 
						|
#define EMPTY_RECORD_TAG                          0xFF
 | 
						|
#define DATAHUB_STATUS_CODE_SIGNATURE             SIGNATURE_32 ('B', 'D', 'H', 'S')
 | 
						|
 | 
						|
//
 | 
						|
// Address type of pointer.
 | 
						|
// The point type always equal to PHYSICAL_MODE on IA32/X64/EBC architecture
 | 
						|
// Otherwise, VIRTUAL_MODE/PHYSICAL_MODE would be used on Ipf architecture,
 | 
						|
//
 | 
						|
typedef enum {
 | 
						|
  PHYSICAL_MODE,
 | 
						|
  VIRTUAL_MODE
 | 
						|
} PROCESSOR_MODE;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  UINTN       Signature;
 | 
						|
  LIST_ENTRY  Node;
 | 
						|
 | 
						|
  UINT8       Data[sizeof (DATA_HUB_STATUS_CODE_DATA_RECORD) + EFI_STATUS_CODE_DATA_MAX_SIZE];
 | 
						|
} DATAHUB_STATUSCODE_RECORD;
 | 
						|
 | 
						|
 | 
						|
//
 | 
						|
// Runtime memory status code worker definition
 | 
						|
//
 | 
						|
typedef struct {
 | 
						|
  UINT32   RecordIndex;
 | 
						|
  UINT32   NumberOfRecords;
 | 
						|
  UINT32   MaxRecordsNumber;
 | 
						|
} RUNTIME_MEMORY_STATUSCODE_HEADER;
 | 
						|
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  //
 | 
						|
  // Report operation nest status.
 | 
						|
  // If it is set, then the report operation has nested.
 | 
						|
  //
 | 
						|
  UINT32                            StatusCodeNestStatus;
 | 
						|
  //
 | 
						|
  // Runtime status code management header, the records buffer is following it.
 | 
						|
  //
 | 
						|
  RUNTIME_MEMORY_STATUSCODE_HEADER  *RtMemoryStatusCodeTable[2];
 | 
						|
} DXE_STATUS_CODE_CONTROLLER;
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
 | 
						|
  Dispatch initialization request to sub status code devices based on
 | 
						|
  customized feature flags.
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
InitializationDispatcherWorker (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Initialize serial status code worker.
 | 
						|
 | 
						|
  @return  The function always return EFI_SUCCESS
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EfiSerialStatusCodeInitializeWorker (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Convert status code value and extended data to readable ASCII string, send string to serial I/O device.
 | 
						|
 | 
						|
  @param  CodeType      Indicates the type of status code being reported.  Type EFI_STATUS_CODE_TYPE is defined in "Related Definitions" below.
 | 
						|
 | 
						|
  @param  Value         Describes the current status of a hardware or software entity.
 | 
						|
                        This included information about the class and subclass that is used to classify the entity
 | 
						|
                        as well as an operation.  For progress codes, the operation is the current activity.
 | 
						|
                        For error codes, it is the exception.  For debug codes, it is not defined at this time.
 | 
						|
                        Type EFI_STATUS_CODE_VALUE is defined in "Related Definitions" below.
 | 
						|
                        Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification.
 | 
						|
 | 
						|
  @param  Instance      The enumeration of a hardware or software entity within the system.
 | 
						|
                        A system may contain multiple entities that match a class/subclass pairing.
 | 
						|
                        The instance differentiates between them.  An instance of 0 indicates that instance information is unavailable,
 | 
						|
                        not meaningful, or not relevant.  Valid instance numbers start with 1.
 | 
						|
 | 
						|
 | 
						|
  @param  CallerId      This optional parameter may be used to identify the caller.
 | 
						|
                        This parameter allows the status code driver to apply different rules to different callers.
 | 
						|
                        Type EFI_GUID is defined in InstallProtocolInterface() in the UEFI 2.0 Specification.
 | 
						|
 | 
						|
 | 
						|
  @param  Data          This optional parameter may be used to pass additional data
 | 
						|
 | 
						|
  @retval EFI_SUCCESS         Success to report status code to serial I/O.
 | 
						|
  @retval EFI_DEVICE_ERROR    EFI serial device can not work after ExitBootService() is called .
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
SerialStatusCodeReportWorker (
 | 
						|
  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
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Initialize runtime memory status code.
 | 
						|
 | 
						|
  @return  The function always return EFI_SUCCESS
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
RtMemoryStatusCodeInitializeWorker (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Report status code into runtime memory. If the runtime pool is full, roll back to the
 | 
						|
  first record and overwrite it.
 | 
						|
 | 
						|
  @param  RtMemoryStatusCodeTable
 | 
						|
                        Point to Runtime memory table header.
 | 
						|
 | 
						|
  @param  CodeType      Indicates the type of status code being reported.  Type EFI_STATUS_CODE_TYPE is defined in "Related Definitions" below.
 | 
						|
 | 
						|
  @param  Value         Describes the current status of a hardware or software entity.
 | 
						|
                        This included information about the class and subclass that is used to classify the entity
 | 
						|
                        as well as an operation.  For progress codes, the operation is the current activity.
 | 
						|
                        For error codes, it is the exception.  For debug codes, it is not defined at this time.
 | 
						|
                        Type EFI_STATUS_CODE_VALUE is defined in "Related Definitions" below.
 | 
						|
                        Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification.
 | 
						|
 | 
						|
  @param  Instance      The enumeration of a hardware or software entity within the system.
 | 
						|
                        A system may contain multiple entities that match a class/subclass pairing.
 | 
						|
                        The instance differentiates between them.  An instance of 0 indicates that instance information is unavailable,
 | 
						|
                        not meaningful, or not relevant.  Valid instance numbers start with 1.
 | 
						|
 | 
						|
  @return               The function always return EFI_SUCCESS.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
RtMemoryStatusCodeReportWorker (
 | 
						|
  RUNTIME_MEMORY_STATUSCODE_HEADER      *RtMemoryStatusCodeTable,
 | 
						|
  IN EFI_STATUS_CODE_TYPE               CodeType,
 | 
						|
  IN EFI_STATUS_CODE_VALUE              Value,
 | 
						|
  IN UINT32                             Instance
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  Initialize data hubstatus code.
 | 
						|
  Create a data hub listener.
 | 
						|
 | 
						|
  @return  The function always return EFI_SUCCESS
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
DataHubStatusCodeInitializeWorker (
 | 
						|
  VOID
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Report status code into DataHub.
 | 
						|
 | 
						|
  @param  CodeType      Indicates the type of status code being reported.  Type EFI_STATUS_CODE_TYPE is defined in "Related Definitions" below.
 | 
						|
 | 
						|
  @param  Value         Describes the current status of a hardware or software entity.
 | 
						|
                        This included information about the class and subclass that is used to classify the entity
 | 
						|
                        as well as an operation.  For progress codes, the operation is the current activity.
 | 
						|
                        For error codes, it is the exception.  For debug codes, it is not defined at this time.
 | 
						|
                        Type EFI_STATUS_CODE_VALUE is defined in "Related Definitions" below.
 | 
						|
                        Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification.
 | 
						|
 | 
						|
  @param  Instance      The enumeration of a hardware or software entity within the system.
 | 
						|
                        A system may contain multiple entities that match a class/subclass pairing.
 | 
						|
                        The instance differentiates between them.  An instance of 0 indicates that instance information is unavailable,
 | 
						|
                        not meaningful, or not relevant.  Valid instance numbers start with 1.
 | 
						|
 | 
						|
 | 
						|
  @param  CallerId      This optional parameter may be used to identify the caller.
 | 
						|
                        This parameter allows the status code driver to apply different rules to different callers.
 | 
						|
                        Type EFI_GUID is defined in InstallProtocolInterface() in the UEFI 2.0 Specification.
 | 
						|
 | 
						|
 | 
						|
  @param  Data          This optional parameter may be used to pass additional data
 | 
						|
 | 
						|
  @retval EFI_OUT_OF_RESOURCES   Can not acquire record buffer.
 | 
						|
  @retval EFI_DEVICE_ERROR       EFI serial device can not work after ExitBootService() is called .
 | 
						|
  @retval EFI_SUCCESS            Success to cache status code and signal log data event.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
DataHubStatusCodeReportWorker (
 | 
						|
  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
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
//
 | 
						|
// Declaration for callback Event.
 | 
						|
//
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
VirtualAddressChangeCallBack (
 | 
						|
  IN EFI_EVENT  Event,
 | 
						|
  IN VOID       *Context
 | 
						|
  );
 | 
						|
 | 
						|
//
 | 
						|
// Declaration for original Entry Point.
 | 
						|
//
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
DxeStatusCodeDriverEntry (
 | 
						|
  IN EFI_HANDLE           ImageHandle,
 | 
						|
  IN EFI_SYSTEM_TABLE     *SystemTable
 | 
						|
  );
 | 
						|
 | 
						|
//
 | 
						|
// declaration of DXE status code controller.
 | 
						|
//
 | 
						|
extern DXE_STATUS_CODE_CONTROLLER gDxeStatusCode;
 | 
						|
 | 
						|
#endif
 |