mirror of https://github.com/acidanthera/audk.git
171 lines
6.4 KiB
C
171 lines
6.4 KiB
C
/*++
|
|
|
|
Copyright (c) 2004, 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:
|
|
|
|
EfiDebug.h
|
|
|
|
Abstract:
|
|
|
|
EFI Debug macros. The work needs tobe done in library. The Debug
|
|
macros them selves are standard for all files, including the core.
|
|
|
|
There needs to be code linked in that produces the following macros:
|
|
|
|
EfiDebugAssert(file, linenumber, assertion string) - worker function for
|
|
ASSERT. filename and line number of where this ASSERT() is located
|
|
is passed in along with the stringized version of the assertion.
|
|
|
|
EfiDebugPrint - Worker function for debug print
|
|
|
|
_DEBUG_SET_MEM(address, length, value) - Set memory at address to value
|
|
for legnth bytes. This macro is used to initialzed uninitialized memory
|
|
or memory that is free'ed, so it will not be used by mistake.
|
|
|
|
--*/
|
|
|
|
#ifndef _EFI_DEBUG_H_
|
|
#define _EFI_DEBUG_H_
|
|
|
|
#ifdef EFI_DEBUG
|
|
|
|
VOID
|
|
EfiDebugAssert (
|
|
IN CHAR8 *FileName,
|
|
IN INTN LineNumber,
|
|
IN CHAR8 *Description
|
|
);
|
|
|
|
VOID
|
|
EfiDebugPrint (
|
|
IN UINTN ErrorLevel,
|
|
IN CHAR8 *Format,
|
|
...
|
|
);
|
|
|
|
VOID
|
|
EfiDebugVPrint (
|
|
IN UINTN ErrorLevel,
|
|
IN CHAR8 *Format,
|
|
IN VA_LIST Marker
|
|
);
|
|
|
|
//
|
|
// Define macros for the above functions so we can make them go away
|
|
// in non-debug builds.
|
|
//
|
|
#define EFI_DEBUG_VPRINT(ErrorLevel, Format, Marker) \
|
|
EfiDebugVPrint(ErrorLevel, Format, Marker)
|
|
|
|
#define EFI_DEBUG_ASSERT(FileName, LineNumber, Description) \
|
|
EfiDebugAssert (FileName, LineNumber, Description)
|
|
|
|
#define _DEBUG_ASSERT(assertion) \
|
|
EfiDebugAssert (__FILE__, __LINE__, #assertion)
|
|
|
|
#define _DEBUG(arg) DebugPrint arg
|
|
|
|
//
|
|
// Define ASSERT() macro, if assertion is FALSE trigger the ASSERT
|
|
//
|
|
#define ASSERT(assertion) if(!(assertion)) \
|
|
_DEBUG_ASSERT(assertion)
|
|
|
|
#define ASSERT_LOCKED(l) if(!(l)->Lock) _DEBUG_ASSERT(l not locked)
|
|
|
|
//
|
|
// DEBUG((DebugLevel, "format string", ...)) - if DebugLevel is active do
|
|
// the a debug print.
|
|
//
|
|
#define DEBUG(arg) EfiDebugPrint arg
|
|
|
|
#define DEBUG_CODE(code) code
|
|
|
|
#define CR(record, TYPE, field, signature) \
|
|
_CR(record, TYPE, field)->Signature != signature ? \
|
|
(TYPE *) (_DEBUG_ASSERT("CR has Bad Signature"), record) : \
|
|
_CR(record, TYPE, field)
|
|
|
|
#define _DEBUG_SET_MEM(address, length, data) EfiCommonLibSetMem(address, length, data)
|
|
|
|
//
|
|
// Generate an ASSERT if the protocol specified by GUID is already installed on Handle.
|
|
// If Handle is NULL, then an ASSERT is generated if the protocol specified by GUID
|
|
// is present anywhere in the handle database
|
|
//
|
|
#define ASSERT_PROTOCOL_ALREADY_INSTALLED(Handle, Guid) \
|
|
DEBUG_CODE ( { \
|
|
VOID *Instance; \
|
|
if (Handle == NULL) { \
|
|
ASSERT(EFI_ERROR(gBS->LocateProtocol (Guid, NULL, &Instance))); \
|
|
} else { \
|
|
ASSERT(EFI_ERROR(gBS->HandleProtocol (Handle, Guid, &Instance))); \
|
|
} } )
|
|
|
|
#else
|
|
#define ASSERT(a)
|
|
#define ASSERT_LOCKED(l)
|
|
#define DEBUG(arg)
|
|
#define DEBUG_CODE(code)
|
|
#define CR(Record, TYPE, Field, Signature) \
|
|
_CR(Record, TYPE, Field)
|
|
#define _DEBUG_SET_MEM(address, length, data)
|
|
#define EFI_DEBUG_VPRINT(ErrorLevel, Format, Marker)
|
|
#define EFI_DEBUG_ASSERT(FileName, LineNumber, Description)
|
|
#define ASSERT_PROTOCOL_ALREADY_INSTALLED(Handle, Guid)
|
|
#endif
|
|
|
|
//
|
|
// Generate an ASSERT if Status is an error code
|
|
//
|
|
//#define ASSERT_EFI_ERROR(status) ASSERT(!EFI_ERROR(status))
|
|
#define ASSERT_EFI_ERROR(status) if (EFI_ERROR(status)) \
|
|
DEBUG_CODE ( { \
|
|
DEBUG((EFI_D_ERROR, "\nASSERT!Status = 0x%x Info :",status)); \
|
|
ASSERT(!EFI_ERROR(status)); \
|
|
} )
|
|
|
|
#ifdef EFI_DEBUG_CLEAR_MEMORY
|
|
#define DEBUG_SET_MEMORY(address,length) \
|
|
_DEBUG_SET_MEM(address, length, EFI_BAD_POINTER_AS_BYTE)
|
|
#else
|
|
#define DEBUG_SET_MEMORY(address,length)
|
|
#endif
|
|
|
|
#define EFI_D_INIT 0x00000001 // Initialization style messages
|
|
#define EFI_D_WARN 0x00000002 // Warnings
|
|
#define EFI_D_LOAD 0x00000004 // Load events
|
|
#define EFI_D_FS 0x00000008 // EFI File system
|
|
#define EFI_D_POOL 0x00000010 // Alloc & Free's
|
|
#define EFI_D_PAGE 0x00000020 // Alloc & Free's
|
|
#define EFI_D_INFO 0x00000040 // Verbose
|
|
#define EFI_D_VARIABLE 0x00000100 // Variable
|
|
#define EFI_D_BM 0x00000400 // Boot Manager (BDS)
|
|
#define EFI_D_BLKIO 0x00001000 // BlkIo Driver
|
|
#define EFI_D_NET 0x00004000 // SNI Driver
|
|
#define EFI_D_UNDI 0x00010000 // UNDI Driver
|
|
#define EFI_D_LOADFILE 0x00020000 // UNDI Driver
|
|
#define EFI_D_EVENT 0x00080000 // Event messages
|
|
|
|
#define EFI_D_ERROR 0x80000000 // Error
|
|
|
|
#define EFI_D_GENERIC (EFI_D_ERROR | EFI_D_INIT | EFI_D_WARN | EFI_D_INFO | \
|
|
EFI_D_BLKIO | EFI_D_NET | EFI_D_UNDI )
|
|
|
|
#define EFI_D_INTRINSIC ( EFI_D_EVENT | EFI_D_POOL | EFI_D_PAGE | \
|
|
EFI_D_BM | EFI_D_LOAD | EFI_D_VARIABLE )
|
|
|
|
#define EFI_D_RESERVED (EFI_D_GENERIC | EFI_D_INTRINSIC)
|
|
|
|
#define EFI_DBUG_MASK (EFI_D_ERROR | EFI_D_INFO | EFI_D_WARN)
|
|
|
|
#endif
|