+++ /dev/null
-/*++\r
-\r
-Copyright (c) 2006, Intel Corporation \r
-All rights reserved. This program and the accompanying materials \r
-are licensed and made available under the terms and conditions of the BSD License \r
-which accompanies this distribution. The full text of the license may be found at \r
-http://opensource.org/licenses/bsd-license.php \r
- \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
-\r
-Module Name:\r
-\r
- DebugAssert.c\r
-\r
-Abstract:\r
-\r
- Produce EfiDebugAssertProtocol to enable EfiUtilityLib to function.\r
- The EfiUtilityLib is used by the EFI shell!\r
-\r
---*/\r
-\r
-#include "StatusCode.h"\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-StatusCodeDebugAssert (\r
- IN EFI_DEBUG_ASSERT_PROTOCOL *This,\r
- IN CHAR8 *FileName,\r
- IN INTN LineNumber,\r
- IN CHAR8 *Description\r
- );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-StatusCodeDebugPrint (\r
- IN EFI_DEBUG_ASSERT_PROTOCOL *This,\r
- IN UINTN ErrorLevel,\r
- IN CHAR8 *Format,\r
- IN VA_LIST Marker\r
- );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-StatusCodePostCode (\r
- IN EFI_DEBUG_ASSERT_PROTOCOL * This,\r
- IN UINT16 PostCode,\r
- IN CHAR8 *PostCodeString OPTIONAL\r
- );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-StatusCodeGetErrorLevel (\r
- IN EFI_DEBUG_ASSERT_PROTOCOL *This,\r
- IN UINTN *ErrorLevel\r
- );\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-StatusCodeSetErrorLevel (\r
- IN EFI_DEBUG_ASSERT_PROTOCOL *This,\r
- IN UINTN ErrorLevel\r
- );\r
-\r
-//\r
-// Protocol instance, there can be only one.\r
-//\r
-EFI_HANDLE mHandle = NULL;\r
-EFI_DEBUG_ASSERT_PROTOCOL mDebugAssertProtocol = {\r
- StatusCodeDebugAssert,\r
- StatusCodeDebugPrint,\r
- StatusCodePostCode,\r
- StatusCodeGetErrorLevel,\r
- StatusCodeSetErrorLevel\r
-};\r
-\r
-//\r
-// Function implementations\r
-//\r
-EFI_STATUS\r
-EFIAPI\r
-StatusCodeDebugAssert (\r
- IN EFI_DEBUG_ASSERT_PROTOCOL *This,\r
- IN CHAR8 *FileName,\r
- IN INTN LineNumber,\r
- IN CHAR8 *Description\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Worker function for ASSERT (). If Error Logging hub is loaded log ASSERT\r
- information. If Error Logging hub is not loaded CpuBreakpoint ().\r
- \r
-Arguments:\r
-\r
- This - Protocol instance.\r
- FileName - File name of failing routine.\r
- LineNumber - Line number of failing ASSERT().\r
- Description - Description, usually the assertion,\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS The function always completes successfully.\r
-\r
---*/\r
-{\r
- DebugAssert (FileName, LineNumber, Description);\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-StatusCodeDebugPrint (\r
- IN EFI_DEBUG_ASSERT_PROTOCOL *This,\r
- IN UINTN ErrorLevel,\r
- IN CHAR8 *Format,\r
- IN VA_LIST Marker\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Worker function for DEBUG (). If Error Logging hub is loaded log ASSERT\r
- information. If Error Logging hub is not loaded do nothing.\r
- \r
-Arguments:\r
-\r
- This - Protocol Instance.\r
- ErrorLevel - If error level is set do the debug print.\r
- Format - String to use for the print, followed by Print arguments.\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS The function always completes successfully.\r
-\r
---*/\r
-{\r
- CHAR8 Buffer[EFI_STATUS_CODE_DATA_MAX_SIZE];\r
-\r
- AsciiVSPrint (Buffer, EFI_STATUS_CODE_DATA_MAX_SIZE, Format, Marker);\r
- DebugPrint (ErrorLevel, Buffer);\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-StatusCodeGetErrorLevel (\r
- IN EFI_DEBUG_ASSERT_PROTOCOL *This,\r
- IN UINTN *ErrorLevel\r
- )\r
-{\r
- *ErrorLevel = PcdGet32(PcdDebugPrintErrorLevel);\r
- return EFI_SUCCESS;\r
-}\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-StatusCodeSetErrorLevel (\r
- IN EFI_DEBUG_ASSERT_PROTOCOL *This,\r
- IN UINTN ErrorLevel\r
- )\r
-{\r
- return EFI_UNSUPPORTED;\r
-}\r
-\r
-EFI_STATUS\r
-EFIAPI\r
-StatusCodePostCode (\r
- IN EFI_DEBUG_ASSERT_PROTOCOL * This,\r
- IN UINT16 PostCode,\r
- IN CHAR8 *PostCodeString OPTIONAL\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Write the code to IO ports 80 and 81.\r
-\r
-Arguments:\r
-\r
- This - Protocol Instance.\r
- PostCode - Code to write\r
- PostCodeString - String, currently ignored.\r
-\r
-Returns:\r
-\r
- EFI_SUCCESS The function always completes successfully.\r
-\r
---*/\r
-{\r
- IoWrite8 (0x80, (UINT8) (PostCode & 0xff));\r
- IoWrite8 (0x81, (UINT8) (PostCode >> 8));\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-EFI_STATUS\r
-InstallStatusCodeDebugAssert (\r
- VOID\r
- )\r
-/*++\r
-\r
-Routine Description:\r
-\r
- Install the status code debug assert protocol\r
-\r
-Arguments:\r
-\r
- None\r
-\r
-Returns:\r
-\r
- Results of call to InstallProtocolInterface.\r
-\r
---*/\r
-{\r
-\r
- DEBUG_CODE (\r
- gBS->InstallProtocolInterface (\r
- &mHandle,\r
- &gEfiDebugAssertProtocolGuid,\r
- EFI_NATIVE_INTERFACE,\r
- &mDebugAssertProtocol\r
- );\r
- );\r
-\r
- return EFI_SUCCESS;\r
-}\r