git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@3 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			232 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			232 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*++
 | |
| 
 | |
| 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.             
 | |
| 
 | |
| Module Name:
 | |
| 
 | |
|   DebugAssert.c
 | |
| 
 | |
| Abstract:
 | |
| 
 | |
|   Produce EfiDebugAssertProtocol to enable EfiUtilityLib to function.
 | |
|   The EfiUtilityLib is used by the EFI shell!
 | |
| 
 | |
| --*/
 | |
| 
 | |
| #include "StatusCode.h"
 | |
| 
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| StatusCodeDebugAssert (
 | |
|   IN EFI_DEBUG_ASSERT_PROTOCOL          *This,
 | |
|   IN CHAR8                              *FileName,
 | |
|   IN INTN                               LineNumber,
 | |
|   IN CHAR8                              *Description
 | |
|   );
 | |
| 
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| StatusCodeDebugPrint (
 | |
|   IN EFI_DEBUG_ASSERT_PROTOCOL          *This,
 | |
|   IN UINTN                              ErrorLevel,
 | |
|   IN CHAR8                              *Format,
 | |
|   IN VA_LIST                            Marker
 | |
|   );
 | |
| 
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| StatusCodePostCode (
 | |
|   IN EFI_DEBUG_ASSERT_PROTOCOL          * This,
 | |
|   IN  UINT16                            PostCode,
 | |
|   IN  CHAR8                             *PostCodeString OPTIONAL
 | |
|   );
 | |
| 
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| StatusCodeGetErrorLevel (
 | |
|   IN EFI_DEBUG_ASSERT_PROTOCOL          *This,
 | |
|   IN  UINTN                             *ErrorLevel
 | |
|   );
 | |
| 
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| StatusCodeSetErrorLevel (
 | |
|   IN EFI_DEBUG_ASSERT_PROTOCOL          *This,
 | |
|   IN  UINTN                             ErrorLevel
 | |
|   );
 | |
| 
 | |
| //
 | |
| // Protocol instance, there can be only one.
 | |
| //
 | |
| EFI_HANDLE                mHandle = NULL;
 | |
| EFI_DEBUG_ASSERT_PROTOCOL mDebugAssertProtocol = {
 | |
|   StatusCodeDebugAssert,
 | |
|   StatusCodeDebugPrint,
 | |
|   StatusCodePostCode,
 | |
|   StatusCodeGetErrorLevel,
 | |
|   StatusCodeSetErrorLevel
 | |
| };
 | |
| 
 | |
| //
 | |
| // Function implementations
 | |
| //
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| StatusCodeDebugAssert (
 | |
|   IN EFI_DEBUG_ASSERT_PROTOCOL          *This,
 | |
|   IN CHAR8                              *FileName,
 | |
|   IN INTN                               LineNumber,
 | |
|   IN CHAR8                              *Description
 | |
|   )
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   Worker function for ASSERT (). If Error Logging hub is loaded log ASSERT
 | |
|   information. If Error Logging hub is not loaded CpuBreakpoint ().
 | |
|   
 | |
| Arguments:
 | |
| 
 | |
|   This        - Protocol instance.
 | |
|   FileName    - File name of failing routine.
 | |
|   LineNumber  - Line number of failing ASSERT().
 | |
|   Description - Description, usually the assertion,
 | |
| 
 | |
| Returns:
 | |
| 
 | |
|   EFI_SUCCESS   The function always completes successfully.
 | |
| 
 | |
| --*/
 | |
| {
 | |
|   DebugAssert (FileName, LineNumber, Description);
 | |
| 
 | |
|   return EFI_SUCCESS;
 | |
| }
 | |
| 
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| StatusCodeDebugPrint (
 | |
|   IN EFI_DEBUG_ASSERT_PROTOCOL          *This,
 | |
|   IN UINTN                              ErrorLevel,
 | |
|   IN CHAR8                              *Format,
 | |
|   IN VA_LIST                            Marker
 | |
|   )
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   Worker function for DEBUG (). If Error Logging hub is loaded log ASSERT
 | |
|   information. If Error Logging hub is not loaded do nothing.
 | |
|   
 | |
| Arguments:
 | |
| 
 | |
|   This       - Protocol Instance.
 | |
|   ErrorLevel - If error level is set do the debug print.
 | |
|   Format     - String to use for the print, followed by Print arguments.
 | |
| 
 | |
| Returns:
 | |
| 
 | |
|   EFI_SUCCESS   The function always completes successfully.
 | |
| 
 | |
| --*/
 | |
| {
 | |
|   CHAR8  Buffer[EFI_STATUS_CODE_DATA_MAX_SIZE];
 | |
| 
 | |
|   AsciiVSPrint (Buffer, EFI_STATUS_CODE_DATA_MAX_SIZE, Format, Marker);
 | |
|   DebugPrint (ErrorLevel, Buffer);
 | |
| 
 | |
|   return EFI_SUCCESS;
 | |
| }
 | |
| 
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| StatusCodeGetErrorLevel (
 | |
|   IN EFI_DEBUG_ASSERT_PROTOCOL          *This,
 | |
|   IN  UINTN                             *ErrorLevel
 | |
|   )
 | |
| {
 | |
|   *ErrorLevel = PcdGet32(PcdDebugPrintErrorLevel);
 | |
|   return EFI_SUCCESS;
 | |
| }
 | |
| 
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| StatusCodeSetErrorLevel (
 | |
|   IN EFI_DEBUG_ASSERT_PROTOCOL          *This,
 | |
|   IN  UINTN                             ErrorLevel
 | |
|   )
 | |
| {
 | |
|   return EFI_UNSUPPORTED;
 | |
| }
 | |
| 
 | |
| EFI_STATUS
 | |
| EFIAPI
 | |
| StatusCodePostCode (
 | |
|   IN EFI_DEBUG_ASSERT_PROTOCOL          * This,
 | |
|   IN  UINT16                            PostCode,
 | |
|   IN  CHAR8                             *PostCodeString OPTIONAL
 | |
|   )
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   Write the code to IO ports 80 and 81.
 | |
| 
 | |
| Arguments:
 | |
| 
 | |
|   This            - Protocol Instance.
 | |
|   PostCode        - Code to write
 | |
|   PostCodeString  - String, currently ignored.
 | |
| 
 | |
| Returns:
 | |
| 
 | |
|   EFI_SUCCESS   The function always completes successfully.
 | |
| 
 | |
| --*/
 | |
| {
 | |
|   IoWrite8 (0x80, (UINT8) (PostCode & 0xff));
 | |
|   IoWrite8 (0x81, (UINT8) (PostCode >> 8));
 | |
| 
 | |
|   return EFI_SUCCESS;
 | |
| }
 | |
| 
 | |
| EFI_STATUS
 | |
| InstallStatusCodeDebugAssert (
 | |
|   VOID
 | |
|   )
 | |
| /*++
 | |
| 
 | |
| Routine Description:
 | |
| 
 | |
|   Install the status code debug assert protocol
 | |
| 
 | |
| Arguments:
 | |
| 
 | |
|   None
 | |
| 
 | |
| Returns:
 | |
| 
 | |
|   Results of call to InstallProtocolInterface.
 | |
| 
 | |
| --*/
 | |
| {
 | |
| 
 | |
|   DEBUG_CODE (
 | |
|     gBS->InstallProtocolInterface (
 | |
|           &mHandle,
 | |
|           &gEfiDebugAssertProtocolGuid,
 | |
|           EFI_NATIVE_INTERFACE,
 | |
|           &mDebugAssertProtocol
 | |
|           );
 | |
|   );
 | |
| 
 | |
|   return EFI_SUCCESS;
 | |
| }
 |