]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Bus/Pci/EhciDxe/EhciDebug.c
1. Added EFI_MEDIA_CHANGED and EFI_INVALID_PARAMETER returns in UsbMassReadBlocks().
[mirror_edk2.git] / MdeModulePkg / Bus / Pci / EhciDxe / EhciDebug.c
CommitLineData
913cb9dc 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
913cb9dc 18\r
19Revision History\r
20\r
21**/\r
22\r
23\r
24#include "Ehci.h"\r
25\r
913cb9dc 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
913cb9dc 31\r
32 @return None\r
33\r
34**/\r
35STATIC\r
36VOID\r
37EhcDumpStatus (\r
1c619535 38 IN UINT32 State\r
913cb9dc 39 )\r
40{\r
41 if (EHC_BIT_IS_SET (State, QTD_STAT_DO_PING)) {\r
1c619535 42 DEBUG ((EFI_D_INFO, " Do_Ping"));\r
913cb9dc 43 } else {\r
1c619535 44 DEBUG ((EFI_D_INFO, " Do_Out"));\r
913cb9dc 45 }\r
46\r
47 if (EHC_BIT_IS_SET (State, QTD_STAT_DO_CS)) {\r
1c619535 48 DEBUG ((EFI_D_INFO, " Do_CS"));\r
913cb9dc 49 } else {\r
1c619535 50 DEBUG ((EFI_D_INFO, " Do_SS"));\r
913cb9dc 51 }\r
52\r
53 if (EHC_BIT_IS_SET (State, QTD_STAT_TRANS_ERR)) {\r
1c619535 54 DEBUG ((EFI_D_INFO, " Transfer_Error"));\r
913cb9dc 55 }\r
56\r
57 if (EHC_BIT_IS_SET (State, QTD_STAT_BABBLE_ERR)) {\r
1c619535 58 DEBUG ((EFI_D_INFO, " Babble_Error"));\r
913cb9dc 59 }\r
60\r
61 if (EHC_BIT_IS_SET (State, QTD_STAT_BUFF_ERR)) {\r
1c619535 62 DEBUG ((EFI_D_INFO, " Buffer_Error"));\r
913cb9dc 63 }\r
64\r
65 if (EHC_BIT_IS_SET (State, QTD_STAT_HALTED)) {\r
1c619535 66 DEBUG ((EFI_D_INFO, " Halted"));\r
913cb9dc 67 }\r
68\r
69 if (EHC_BIT_IS_SET (State, QTD_STAT_ACTIVE)) {\r
1c619535 70 DEBUG ((EFI_D_INFO, " Active"));\r
913cb9dc 71 }\r
72\r
1c619535 73 DEBUG ((EFI_D_INFO, "\n"));\r
913cb9dc 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
1c619535 89 IN CHAR8 *Msg\r
913cb9dc 90 )\r
91{\r
92 QTD_HW *QtdHw;\r
93 UINTN Index;\r
913cb9dc 94\r
95 if (Msg != NULL) {\r
1c619535 96 DEBUG ((EFI_D_INFO, Msg));\r
913cb9dc 97 }\r
98\r
1c619535 99 DEBUG ((EFI_D_INFO, "Queue TD @ 0x%x, data length %d\n", Qtd, Qtd->DataLen));\r
913cb9dc 100\r
101 QtdHw = &Qtd->QtdHw;\r
102\r
1c619535 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
913cb9dc 107\r
108 if (QtdHw->Pid == QTD_PID_SETUP) {\r
1c619535 109 DEBUG ((EFI_D_INFO, "PID : Setup\n"));\r
913cb9dc 110\r
111 } else if (QtdHw->Pid == QTD_PID_INPUT) {\r
1c619535 112 DEBUG ((EFI_D_INFO, "PID : IN\n"));\r
913cb9dc 113\r
114 } else if (QtdHw->Pid == QTD_PID_OUTPUT) {\r
1c619535 115 DEBUG ((EFI_D_INFO, "PID : OUT\n"));\r
913cb9dc 116\r
117 }\r
118\r
1c619535 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
913cb9dc 124\r
125 for (Index = 0; Index < 5; Index++) {\r
1c619535 126 DEBUG ((EFI_D_INFO, "Page[%d] : 0x%x\n", Index, QtdHw->Page[Index]));\r
913cb9dc 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
1c619535 144 IN CHAR8 *Msg,\r
913cb9dc 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
913cb9dc 152\r
153 if (Msg != NULL) {\r
1c619535 154 DEBUG ((EFI_D_INFO, Msg));\r
913cb9dc 155 }\r
156\r
1c619535 157 DEBUG ((EFI_D_INFO, "Queue head @ 0x%x, interval %d, next qh %x\n",\r
158 Qh, Qh->Interval, Qh->NextQh));\r
913cb9dc 159\r
160 QhHw = &Qh->QhHw;\r
161\r
1c619535 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
913cb9dc 186\r
187 if (QhHw->Pid == QTD_PID_SETUP) {\r
1c619535 188 DEBUG ((EFI_D_INFO, "PID : Setup\n"));\r
913cb9dc 189\r
190 } else if (QhHw->Pid == QTD_PID_INPUT) {\r
1c619535 191 DEBUG ((EFI_D_INFO, "PID : IN\n"));\r
913cb9dc 192\r
193 } else if (QhHw->Pid == QTD_PID_OUTPUT) {\r
1c619535 194 DEBUG ((EFI_D_INFO, "PID : OUT\n"));\r
913cb9dc 195 }\r
196\r
1c619535 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
913cb9dc 202\r
203 for (Index = 0; Index < 5; Index++) {\r
1c619535 204 DEBUG ((EFI_D_INFO, "Page[%d] : 0x%x\n", Index, QhHw->Page[Index]));\r
913cb9dc 205 }\r
206\r
1c619535 207 DEBUG ((EFI_D_INFO, "\n"));\r
913cb9dc 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
1c619535 239 DEBUG ((EFI_D_INFO,"\n"));\r
913cb9dc 240 }\r
241\r
1c619535 242 DEBUG ((EFI_D_INFO, "%02x ", Buf[Index]));\r
913cb9dc 243 }\r
244\r
1c619535 245 DEBUG ((EFI_D_INFO, "\n"));\r
913cb9dc 246}\r