• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*++
2 
3 Copyright (c) 2004 - 2012, Intel Corporation. All rights reserved.<BR>
4 This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution.  The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
8 
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11 
12 Module Name:
13 
14   Debug.c
15 
16 Abstract:
17 
18   Support for Debug primatives.
19 
20 --*/
21 
22 #include "Tiano.h"
23 #include "Pei.h"
24 #include "EfiPrintLib.h"
25 #include "EfiStatusCode.h"
26 #include "EfiCommonLib.h"
27 #include EFI_GUID_DEFINITION (StatusCodeCallerId)
28 #include EFI_GUID_DEFINITION (StatusCodeDataTypeId)
29 
30 VOID
PeiDebugAssert(IN CONST EFI_PEI_SERVICES ** PeiServices,IN CHAR8 * FileName,IN INTN LineNumber,IN CHAR8 * Description)31 PeiDebugAssert (
32   IN CONST EFI_PEI_SERVICES  **PeiServices,
33   IN CHAR8              *FileName,
34   IN INTN               LineNumber,
35   IN CHAR8              *Description
36   )
37 /*++
38 
39 Routine Description:
40 
41   Worker function for ASSERT(). If Error Logging hub is loaded log ASSERT
42   information. If Error Logging hub is not loaded DEADLOOP ().
43 
44 Arguments:
45 
46   PeiServices - The PEI core services table.
47 
48   FileName    - File name of failing routine.
49 
50   LineNumber  - Line number of failing ASSERT().
51 
52   Description - Description, usually the assertion,
53 
54 Returns:
55 
56   None
57 
58 --*/
59 {
60   UINT64  Buffer[EFI_STATUS_CODE_DATA_MAX_SIZE];
61 
62   EfiDebugAssertWorker (FileName, LineNumber, Description, sizeof (Buffer), Buffer);
63 
64   //
65   // We choose NOT to use PEI_REPORT_STATUS_CODE here, because when debug is enable,
66   // we want get enough information if assert.
67   //
68   (**PeiServices).PeiReportStatusCode (
69                     (EFI_PEI_SERVICES**)PeiServices,
70                     (EFI_ERROR_CODE | EFI_ERROR_UNRECOVERED),
71                     (EFI_SOFTWARE_PEI_MODULE | EFI_SW_EC_ILLEGAL_SOFTWARE_STATE),
72                     0,
73                     &gEfiCallerIdGuid,
74                     (EFI_STATUS_CODE_DATA *) Buffer
75                     );
76 
77   EFI_DEADLOOP ();
78 }
79 
80 
81 VOID
PeiDebugPrint(IN CONST EFI_PEI_SERVICES ** PeiServices,IN UINTN ErrorLevel,IN CHAR8 * Format,...)82 PeiDebugPrint (
83   IN CONST EFI_PEI_SERVICES   **PeiServices,
84   IN  UINTN             ErrorLevel,
85   IN  CHAR8             *Format,
86   ...
87   )
88 /*++
89 
90 Routine Description:
91 
92   Worker function for DEBUG(). If Error Logging hub is loaded log ASSERT
93   information. If Error Logging hub is not loaded do nothing.
94 
95 Arguments:
96 
97   PeiServices - The PEI core services table.
98 
99   ErrorLevel - If error level is set do the debug print.
100 
101   Format     - String to use for the print, followed by Print arguments.
102 
103   ...        - Print arguments
104 
105 Returns:
106 
107   None
108 
109 --*/
110 {
111   VA_LIST Marker;
112   UINT64  Buffer[EFI_STATUS_CODE_DATA_MAX_SIZE];
113 
114   VA_START (Marker, Format);
115   EfiDebugVPrintWorker (ErrorLevel, Format, Marker, sizeof (Buffer), Buffer);
116   VA_END (Marker);
117 
118   //
119   // We choose NOT to use PEI_REPORT_STATUS_CODE here, because when debug is enable,
120   // we want get enough information if assert.
121   //
122   (**PeiServices).PeiReportStatusCode (
123                     (EFI_PEI_SERVICES**)PeiServices,
124                     EFI_DEBUG_CODE,
125                     (EFI_SOFTWARE_PEI_MODULE | EFI_DC_UNSPECIFIED),
126                     0,
127                     &gEfiCallerIdGuid,
128                     (EFI_STATUS_CODE_DATA *) Buffer
129                     );
130 
131 }
132