]> git.proxmox.com Git - mirror_edk2.git/blame_incremental - MdeModulePkg/Bus/Pci/EhciDxe/EhciDebug.c
Update the copyright notice format
[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 - 2010, Intel Corporation. All rights reserved.<BR>\r
6This 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**/\r
25VOID\r
26EhcDumpStatus (\r
27 IN UINT32 State\r
28 )\r
29{\r
30 if (EHC_BIT_IS_SET (State, QTD_STAT_DO_PING)) {\r
31 DEBUG ((EFI_D_INFO, " Do_Ping"));\r
32 } else {\r
33 DEBUG ((EFI_D_INFO, " Do_Out"));\r
34 }\r
35\r
36 if (EHC_BIT_IS_SET (State, QTD_STAT_DO_CS)) {\r
37 DEBUG ((EFI_D_INFO, " Do_CS"));\r
38 } else {\r
39 DEBUG ((EFI_D_INFO, " Do_SS"));\r
40 }\r
41\r
42 if (EHC_BIT_IS_SET (State, QTD_STAT_TRANS_ERR)) {\r
43 DEBUG ((EFI_D_INFO, " Transfer_Error"));\r
44 }\r
45\r
46 if (EHC_BIT_IS_SET (State, QTD_STAT_BABBLE_ERR)) {\r
47 DEBUG ((EFI_D_INFO, " Babble_Error"));\r
48 }\r
49\r
50 if (EHC_BIT_IS_SET (State, QTD_STAT_BUFF_ERR)) {\r
51 DEBUG ((EFI_D_INFO, " Buffer_Error"));\r
52 }\r
53\r
54 if (EHC_BIT_IS_SET (State, QTD_STAT_HALTED)) {\r
55 DEBUG ((EFI_D_INFO, " Halted"));\r
56 }\r
57\r
58 if (EHC_BIT_IS_SET (State, QTD_STAT_ACTIVE)) {\r
59 DEBUG ((EFI_D_INFO, " Active"));\r
60 }\r
61\r
62 DEBUG ((EFI_D_INFO, "\n"));\r
63}\r
64\r
65\r
66/**\r
67 Dump the fields of a QTD.\r
68\r
69 @param Qtd The QTD to dump.\r
70 @param Msg The message to print before the dump.\r
71\r
72**/\r
73VOID\r
74EhcDumpQtd (\r
75 IN EHC_QTD *Qtd,\r
76 IN CHAR8 *Msg\r
77 )\r
78{\r
79 QTD_HW *QtdHw;\r
80 UINTN Index;\r
81\r
82 if (Msg != NULL) {\r
83 DEBUG ((EFI_D_INFO, Msg));\r
84 }\r
85\r
86 DEBUG ((EFI_D_INFO, "Queue TD @ 0x%p, data length %d\n", Qtd, (UINT32)Qtd->DataLen));\r
87\r
88 QtdHw = &Qtd->QtdHw;\r
89\r
90 DEBUG ((EFI_D_INFO, "Next QTD : %x\n", QtdHw->NextQtd));\r
91 DEBUG ((EFI_D_INFO, "AltNext QTD : %x\n", QtdHw->AltNext));\r
92 DEBUG ((EFI_D_INFO, "Status : %x\n", QtdHw->Status));\r
93 EhcDumpStatus (QtdHw->Status);\r
94\r
95 if (QtdHw->Pid == QTD_PID_SETUP) {\r
96 DEBUG ((EFI_D_INFO, "PID : Setup\n"));\r
97\r
98 } else if (QtdHw->Pid == QTD_PID_INPUT) {\r
99 DEBUG ((EFI_D_INFO, "PID : IN\n"));\r
100\r
101 } else if (QtdHw->Pid == QTD_PID_OUTPUT) {\r
102 DEBUG ((EFI_D_INFO, "PID : OUT\n"));\r
103\r
104 }\r
105\r
106 DEBUG ((EFI_D_INFO, "Error Count : %d\n", QtdHw->ErrCnt));\r
107 DEBUG ((EFI_D_INFO, "Current Page : %d\n", QtdHw->CurPage));\r
108 DEBUG ((EFI_D_INFO, "IOC : %d\n", QtdHw->Ioc));\r
109 DEBUG ((EFI_D_INFO, "Total Bytes : %d\n", QtdHw->TotalBytes));\r
110 DEBUG ((EFI_D_INFO, "Data Toggle : %d\n", QtdHw->DataToggle));\r
111\r
112 for (Index = 0; Index < 5; Index++) {\r
113 DEBUG ((EFI_D_INFO, "Page[%d] : 0x%x\n", (UINT32)Index, QtdHw->Page[Index]));\r
114 }\r
115}\r
116\r
117\r
118/**\r
119 Dump the queue head.\r
120\r
121 @param Qh The queue head to dump.\r
122 @param Msg The message to print before the dump.\r
123 @param DumpBuf Whether to dump the memory buffer of the associated QTD.\r
124\r
125**/\r
126VOID\r
127EhcDumpQh (\r
128 IN EHC_QH *Qh,\r
129 IN CHAR8 *Msg,\r
130 IN BOOLEAN DumpBuf\r
131 )\r
132{\r
133 EHC_QTD *Qtd;\r
134 QH_HW *QhHw;\r
135 LIST_ENTRY *Entry;\r
136 UINTN Index;\r
137\r
138 if (Msg != NULL) {\r
139 DEBUG ((EFI_D_INFO, Msg));\r
140 }\r
141\r
142 DEBUG ((EFI_D_INFO, "Queue head @ 0x%p, interval %ld, next qh %p\n",\r
143 Qh, (UINT64)Qh->Interval, Qh->NextQh));\r
144\r
145 QhHw = &Qh->QhHw;\r
146\r
147 DEBUG ((EFI_D_INFO, "Hoziontal link: %x\n", QhHw->HorizonLink));\r
148 DEBUG ((EFI_D_INFO, "Device address: %d\n", QhHw->DeviceAddr));\r
149 DEBUG ((EFI_D_INFO, "Inactive : %d\n", QhHw->Inactive));\r
150 DEBUG ((EFI_D_INFO, "EP number : %d\n", QhHw->EpNum));\r
151 DEBUG ((EFI_D_INFO, "EP speed : %d\n", QhHw->EpSpeed));\r
152 DEBUG ((EFI_D_INFO, "DT control : %d\n", QhHw->DtCtrl));\r
153 DEBUG ((EFI_D_INFO, "Reclaim head : %d\n", QhHw->ReclaimHead));\r
154 DEBUG ((EFI_D_INFO, "Max packet len: %d\n", QhHw->MaxPacketLen));\r
155 DEBUG ((EFI_D_INFO, "Ctrl EP : %d\n", QhHw->CtrlEp));\r
156 DEBUG ((EFI_D_INFO, "Nak reload : %d\n", QhHw->NakReload));\r
157\r
158 DEBUG ((EFI_D_INFO, "SMask : %x\n", QhHw->SMask));\r
159 DEBUG ((EFI_D_INFO, "CMask : %x\n", QhHw->CMask));\r
160 DEBUG ((EFI_D_INFO, "Hub address : %d\n", QhHw->HubAddr));\r
161 DEBUG ((EFI_D_INFO, "Hub port : %d\n", QhHw->PortNum));\r
162 DEBUG ((EFI_D_INFO, "Multiplier : %d\n", QhHw->Multiplier));\r
163\r
164 DEBUG ((EFI_D_INFO, "Cur QTD : %x\n", QhHw->CurQtd));\r
165\r
166 DEBUG ((EFI_D_INFO, "Next QTD : %x\n", QhHw->NextQtd));\r
167 DEBUG ((EFI_D_INFO, "AltNext QTD : %x\n", QhHw->AltQtd));\r
168 DEBUG ((EFI_D_INFO, "Status : %x\n", QhHw->Status));\r
169\r
170 EhcDumpStatus (QhHw->Status);\r
171\r
172 if (QhHw->Pid == QTD_PID_SETUP) {\r
173 DEBUG ((EFI_D_INFO, "PID : Setup\n"));\r
174\r
175 } else if (QhHw->Pid == QTD_PID_INPUT) {\r
176 DEBUG ((EFI_D_INFO, "PID : IN\n"));\r
177\r
178 } else if (QhHw->Pid == QTD_PID_OUTPUT) {\r
179 DEBUG ((EFI_D_INFO, "PID : OUT\n"));\r
180 }\r
181\r
182 DEBUG ((EFI_D_INFO, "Error Count : %d\n", QhHw->ErrCnt));\r
183 DEBUG ((EFI_D_INFO, "Current Page : %d\n", QhHw->CurPage));\r
184 DEBUG ((EFI_D_INFO, "IOC : %d\n", QhHw->Ioc));\r
185 DEBUG ((EFI_D_INFO, "Total Bytes : %d\n", QhHw->TotalBytes));\r
186 DEBUG ((EFI_D_INFO, "Data Toggle : %d\n", QhHw->DataToggle));\r
187\r
188 for (Index = 0; Index < 5; Index++) {\r
189 DEBUG ((EFI_D_INFO, "Page[%d] : 0x%x\n", Index, QhHw->Page[Index]));\r
190 }\r
191\r
192 DEBUG ((EFI_D_INFO, "\n"));\r
193\r
194 EFI_LIST_FOR_EACH (Entry, &Qh->Qtds) {\r
195 Qtd = EFI_LIST_CONTAINER (Entry, EHC_QTD, QtdList);\r
196 EhcDumpQtd (Qtd, NULL);\r
197\r
198 if (DumpBuf && (Qtd->DataLen != 0)) {\r
199 EhcDumpBuf (Qtd->Data, Qtd->DataLen);\r
200 }\r
201 }\r
202}\r
203\r
204\r
205/**\r
206 Dump the buffer in the form of hex.\r
207\r
208 @param Buf The buffer to dump.\r
209 @param Len The length of buffer.\r
210\r
211**/\r
212VOID\r
213EhcDumpBuf (\r
214 IN UINT8 *Buf,\r
215 IN UINTN Len\r
216 )\r
217{\r
218 UINTN Index;\r
219\r
220 for (Index = 0; Index < Len; Index++) {\r
221 if (Index % 16 == 0) {\r
222 DEBUG ((EFI_D_INFO,"\n"));\r
223 }\r
224\r
225 DEBUG ((EFI_D_INFO, "%02x ", Buf[Index]));\r
226 }\r
227\r
228 DEBUG ((EFI_D_INFO, "\n"));\r
229}\r
230\r
231/**\r
232 Dump the EHCI status registers.\r
233\r
234 @param Ehc USB EHCI Host Controller instance\r
235\r
236**/\r
237VOID\r
238EhcDumpRegs (\r
239 IN USB2_HC_DEV *Ehc\r
240 )\r
241{\r
242 UINT8 Index;\r
243\r
244 DEBUG ((EFI_D_INFO, " EHC_CAPLENGTH_OFFSET = 0x%08x\n", EhcReadCapRegister (Ehc, EHC_CAPLENGTH_OFFSET)));\r
245 DEBUG ((EFI_D_INFO, " EHC_HCSPARAMS_OFFSET = 0x%08x\n", EhcReadCapRegister (Ehc, EHC_HCSPARAMS_OFFSET)));\r
246 DEBUG ((EFI_D_INFO, " EHC_HCCPARAMS_OFFSET = 0x%08x\n", EhcReadCapRegister (Ehc, EHC_HCCPARAMS_OFFSET)));\r
247 DEBUG ((EFI_D_INFO, " EHC_USBCMD_OFFSET = 0x%08x\n", EhcReadOpReg (Ehc, EHC_USBCMD_OFFSET)));\r
248 DEBUG ((EFI_D_INFO, " EHC_USBSTS_OFFSET = 0x%08x\n", EhcReadOpReg (Ehc, EHC_USBSTS_OFFSET)));\r
249 DEBUG ((EFI_D_INFO, " EHC_USBINTR_OFFSET = 0x%08x\n", EhcReadOpReg (Ehc, EHC_USBINTR_OFFSET)));\r
250 DEBUG ((EFI_D_INFO, " EHC_FRINDEX_OFFSET = 0x%08x\n", EhcReadOpReg (Ehc, EHC_FRINDEX_OFFSET)));\r
251 DEBUG ((EFI_D_INFO, " EHC_CTRLDSSEG_OFFSET = 0x%08x\n", EhcReadOpReg (Ehc, EHC_CTRLDSSEG_OFFSET)));\r
252 DEBUG ((EFI_D_INFO, " EHC_FRAME_BASE_OFFSET = 0x%08x\n", EhcReadOpReg (Ehc, EHC_FRAME_BASE_OFFSET)));\r
253 DEBUG ((EFI_D_INFO, " EHC_ASYNC_HEAD_OFFSET = 0x%08x\n", EhcReadOpReg (Ehc, EHC_ASYNC_HEAD_OFFSET)));\r
254 DEBUG ((EFI_D_INFO, " EHC_CONFIG_FLAG_OFFSET = 0x%08x\n", EhcReadOpReg (Ehc, EHC_CONFIG_FLAG_OFFSET)));\r
255 for (Index = 0; Index < (UINT8) (Ehc->HcStructParams & HCSP_NPORTS); Index++) {\r
256 DEBUG ((EFI_D_INFO, " EHC_PORT_STAT_OFFSET(%d) = 0x%08x\n", Index, EhcReadOpReg (Ehc, EHC_PORT_STAT_OFFSET + (4 * Index))));\r
257 }\r
258}\r