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