]> git.proxmox.com Git - mirror_edk2.git/blame_incremental - MdeModulePkg/Bus/Pci/EhciDxe/EhciDebug.c
check the usage of %d,%x,%ld,%lx and so on in debug print statement.
[mirror_edk2.git] / MdeModulePkg / Bus / Pci / EhciDxe / EhciDebug.c
... / ...
CommitLineData
1/** @file\r
2\r
3 This file provides the information dump support for EHCI when in debug mode.\r
4\r
5Copyright (c) 2007, Intel Corporation\r
6All rights reserved. This program and the accompanying materials\r
7are licensed and made available under the terms and conditions of the BSD License\r
8which accompanies this distribution. The full text of the license may be found at\r
9http://opensource.org/licenses/bsd-license.php\r
10\r
11THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13\r
14**/\r
15\r
16\r
17#include "Ehci.h"\r
18\r
19/**\r
20 Dump the status byte in QTD/QH to a more friendly format.\r
21\r
22 @param State The state in the QTD/QH.\r
23\r
24 @return None.\r
25\r
26**/\r
27VOID\r
28EhcDumpStatus (\r
29 IN UINT32 State\r
30 )\r
31{\r
32 if (EHC_BIT_IS_SET (State, QTD_STAT_DO_PING)) {\r
33 DEBUG ((EFI_D_INFO, " Do_Ping"));\r
34 } else {\r
35 DEBUG ((EFI_D_INFO, " Do_Out"));\r
36 }\r
37\r
38 if (EHC_BIT_IS_SET (State, QTD_STAT_DO_CS)) {\r
39 DEBUG ((EFI_D_INFO, " Do_CS"));\r
40 } else {\r
41 DEBUG ((EFI_D_INFO, " Do_SS"));\r
42 }\r
43\r
44 if (EHC_BIT_IS_SET (State, QTD_STAT_TRANS_ERR)) {\r
45 DEBUG ((EFI_D_INFO, " Transfer_Error"));\r
46 }\r
47\r
48 if (EHC_BIT_IS_SET (State, QTD_STAT_BABBLE_ERR)) {\r
49 DEBUG ((EFI_D_INFO, " Babble_Error"));\r
50 }\r
51\r
52 if (EHC_BIT_IS_SET (State, QTD_STAT_BUFF_ERR)) {\r
53 DEBUG ((EFI_D_INFO, " Buffer_Error"));\r
54 }\r
55\r
56 if (EHC_BIT_IS_SET (State, QTD_STAT_HALTED)) {\r
57 DEBUG ((EFI_D_INFO, " Halted"));\r
58 }\r
59\r
60 if (EHC_BIT_IS_SET (State, QTD_STAT_ACTIVE)) {\r
61 DEBUG ((EFI_D_INFO, " Active"));\r
62 }\r
63\r
64 DEBUG ((EFI_D_INFO, "\n"));\r
65}\r
66\r
67\r
68/**\r
69 Dump the fields of a QTD.\r
70\r
71 @param Qtd The QTD to dump.\r
72 @param Msg The message to print before the dump.\r
73\r
74 @return None\r
75\r
76**/\r
77VOID\r
78EhcDumpQtd (\r
79 IN EHC_QTD *Qtd,\r
80 IN CHAR8 *Msg\r
81 )\r
82{\r
83 QTD_HW *QtdHw;\r
84 UINTN Index;\r
85\r
86 if (Msg != NULL) {\r
87 DEBUG ((EFI_D_INFO, Msg));\r
88 }\r
89\r
90 DEBUG ((EFI_D_INFO, "Queue TD @ 0x%p, data length %d\n", Qtd, (UINT32)Qtd->DataLen));\r
91\r
92 QtdHw = &Qtd->QtdHw;\r
93\r
94 DEBUG ((EFI_D_INFO, "Next QTD : %x\n", QtdHw->NextQtd));\r
95 DEBUG ((EFI_D_INFO, "AltNext QTD : %x\n", QtdHw->AltNext));\r
96 DEBUG ((EFI_D_INFO, "Status : %x\n", QtdHw->Status));\r
97 EhcDumpStatus (QtdHw->Status);\r
98\r
99 if (QtdHw->Pid == QTD_PID_SETUP) {\r
100 DEBUG ((EFI_D_INFO, "PID : Setup\n"));\r
101\r
102 } else if (QtdHw->Pid == QTD_PID_INPUT) {\r
103 DEBUG ((EFI_D_INFO, "PID : IN\n"));\r
104\r
105 } else if (QtdHw->Pid == QTD_PID_OUTPUT) {\r
106 DEBUG ((EFI_D_INFO, "PID : OUT\n"));\r
107\r
108 }\r
109\r
110 DEBUG ((EFI_D_INFO, "Error Count : %d\n", QtdHw->ErrCnt));\r
111 DEBUG ((EFI_D_INFO, "Current Page : %d\n", QtdHw->CurPage));\r
112 DEBUG ((EFI_D_INFO, "IOC : %d\n", QtdHw->IOC));\r
113 DEBUG ((EFI_D_INFO, "Total Bytes : %d\n", QtdHw->TotalBytes));\r
114 DEBUG ((EFI_D_INFO, "Data Toggle : %d\n", QtdHw->DataToggle));\r
115\r
116 for (Index = 0; Index < 5; Index++) {\r
117 DEBUG ((EFI_D_INFO, "Page[%d] : 0x%x\n", (UINT32)Index, QtdHw->Page[Index]));\r
118 }\r
119}\r
120\r
121\r
122/**\r
123 Dump the queue head.\r
124\r
125 @param Qh The queue head to dump.\r
126 @param Msg The message to print before the dump.\r
127 @param DumpBuf Whether to dump the memory buffer of the associated QTD.\r
128\r
129 @return None\r
130\r
131**/\r
132VOID\r
133EhcDumpQh (\r
134 IN EHC_QH *Qh,\r
135 IN CHAR8 *Msg,\r
136 IN BOOLEAN DumpBuf\r
137 )\r
138{\r
139 EHC_QTD *Qtd;\r
140 QH_HW *QhHw;\r
141 LIST_ENTRY *Entry;\r
142 UINTN Index;\r
143\r
144 if (Msg != NULL) {\r
145 DEBUG ((EFI_D_INFO, Msg));\r
146 }\r
147\r
148 DEBUG ((EFI_D_INFO, "Queue head @ 0x%p, interval %ld, next qh %p\n",\r
149 Qh, (UINT64)Qh->Interval, Qh->NextQh));\r
150\r
151 QhHw = &Qh->QhHw;\r
152\r
153 DEBUG ((EFI_D_INFO, "Hoziontal link: %x\n", QhHw->HorizonLink));\r
154 DEBUG ((EFI_D_INFO, "Device address: %d\n", QhHw->DeviceAddr));\r
155 DEBUG ((EFI_D_INFO, "Inactive : %d\n", QhHw->Inactive));\r
156 DEBUG ((EFI_D_INFO, "EP number : %d\n", QhHw->EpNum));\r
157 DEBUG ((EFI_D_INFO, "EP speed : %d\n", QhHw->EpSpeed));\r
158 DEBUG ((EFI_D_INFO, "DT control : %d\n", QhHw->DtCtrl));\r
159 DEBUG ((EFI_D_INFO, "Reclaim head : %d\n", QhHw->ReclaimHead));\r
160 DEBUG ((EFI_D_INFO, "Max packet len: %d\n", QhHw->MaxPacketLen));\r
161 DEBUG ((EFI_D_INFO, "Ctrl EP : %d\n", QhHw->CtrlEp));\r
162 DEBUG ((EFI_D_INFO, "Nak reload : %d\n", QhHw->NakReload));\r
163\r
164 DEBUG ((EFI_D_INFO, "SMask : %x\n", QhHw->SMask));\r
165 DEBUG ((EFI_D_INFO, "CMask : %x\n", QhHw->CMask));\r
166 DEBUG ((EFI_D_INFO, "Hub address : %d\n", QhHw->HubAddr));\r
167 DEBUG ((EFI_D_INFO, "Hub port : %d\n", QhHw->PortNum));\r
168 DEBUG ((EFI_D_INFO, "Multiplier : %d\n", QhHw->Multiplier));\r
169\r
170 DEBUG ((EFI_D_INFO, "Cur QTD : %x\n", QhHw->CurQtd));\r
171\r
172 DEBUG ((EFI_D_INFO, "Next QTD : %x\n", QhHw->NextQtd));\r
173 DEBUG ((EFI_D_INFO, "AltNext QTD : %x\n", QhHw->AltQtd));\r
174 DEBUG ((EFI_D_INFO, "Status : %x\n", QhHw->Status));\r
175\r
176 EhcDumpStatus (QhHw->Status);\r
177\r
178 if (QhHw->Pid == QTD_PID_SETUP) {\r
179 DEBUG ((EFI_D_INFO, "PID : Setup\n"));\r
180\r
181 } else if (QhHw->Pid == QTD_PID_INPUT) {\r
182 DEBUG ((EFI_D_INFO, "PID : IN\n"));\r
183\r
184 } else if (QhHw->Pid == QTD_PID_OUTPUT) {\r
185 DEBUG ((EFI_D_INFO, "PID : OUT\n"));\r
186 }\r
187\r
188 DEBUG ((EFI_D_INFO, "Error Count : %d\n", QhHw->ErrCnt));\r
189 DEBUG ((EFI_D_INFO, "Current Page : %d\n", QhHw->CurPage));\r
190 DEBUG ((EFI_D_INFO, "IOC : %d\n", QhHw->IOC));\r
191 DEBUG ((EFI_D_INFO, "Total Bytes : %d\n", QhHw->TotalBytes));\r
192 DEBUG ((EFI_D_INFO, "Data Toggle : %d\n", QhHw->DataToggle));\r
193\r
194 for (Index = 0; Index < 5; Index++) {\r
195 DEBUG ((EFI_D_INFO, "Page[%d] : 0x%x\n", Index, QhHw->Page[Index]));\r
196 }\r
197\r
198 DEBUG ((EFI_D_INFO, "\n"));\r
199\r
200 EFI_LIST_FOR_EACH (Entry, &Qh->Qtds) {\r
201 Qtd = EFI_LIST_CONTAINER (Entry, EHC_QTD, QtdList);\r
202 EhcDumpQtd (Qtd, NULL);\r
203\r
204 if (DumpBuf && (Qtd->DataLen != 0)) {\r
205 EhcDumpBuf (Qtd->Data, Qtd->DataLen);\r
206 }\r
207 }\r
208}\r
209\r
210\r
211/**\r
212 Dump the buffer in the form of hex.\r
213\r
214 @param Buf The buffer to dump.\r
215 @param Len The length of buffer.\r
216\r
217 @return None.\r
218\r
219**/\r
220VOID\r
221EhcDumpBuf (\r
222 IN UINT8 *Buf,\r
223 IN UINTN Len\r
224 )\r
225{\r
226 UINTN Index;\r
227\r
228 for (Index = 0; Index < Len; Index++) {\r
229 if (Index % 16 == 0) {\r
230 DEBUG ((EFI_D_INFO,"\n"));\r
231 }\r
232\r
233 DEBUG ((EFI_D_INFO, "%02x ", Buf[Index]));\r
234 }\r
235\r
236 DEBUG ((EFI_D_INFO, "\n"));\r
237}\r