1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun /**
3*4882a593Smuzhiyun * debug.h - DesignWare USB3 DRD Controller Debug Header
4*4882a593Smuzhiyun *
5*4882a593Smuzhiyun * Copyright (C) 2010-2011 Texas Instruments Incorporated - https://www.ti.com
6*4882a593Smuzhiyun *
7*4882a593Smuzhiyun * Authors: Felipe Balbi <balbi@ti.com>,
8*4882a593Smuzhiyun * Sebastian Andrzej Siewior <bigeasy@linutronix.de>
9*4882a593Smuzhiyun */
10*4882a593Smuzhiyun
11*4882a593Smuzhiyun #ifndef __DWC3_DEBUG_H
12*4882a593Smuzhiyun #define __DWC3_DEBUG_H
13*4882a593Smuzhiyun
14*4882a593Smuzhiyun #include "core.h"
15*4882a593Smuzhiyun
16*4882a593Smuzhiyun /**
17*4882a593Smuzhiyun * dwc3_gadget_ep_cmd_string - returns endpoint command string
18*4882a593Smuzhiyun * @cmd: command code
19*4882a593Smuzhiyun */
20*4882a593Smuzhiyun static inline const char *
dwc3_gadget_ep_cmd_string(u8 cmd)21*4882a593Smuzhiyun dwc3_gadget_ep_cmd_string(u8 cmd)
22*4882a593Smuzhiyun {
23*4882a593Smuzhiyun switch (cmd) {
24*4882a593Smuzhiyun case DWC3_DEPCMD_DEPSTARTCFG:
25*4882a593Smuzhiyun return "Start New Configuration";
26*4882a593Smuzhiyun case DWC3_DEPCMD_ENDTRANSFER:
27*4882a593Smuzhiyun return "End Transfer";
28*4882a593Smuzhiyun case DWC3_DEPCMD_UPDATETRANSFER:
29*4882a593Smuzhiyun return "Update Transfer";
30*4882a593Smuzhiyun case DWC3_DEPCMD_STARTTRANSFER:
31*4882a593Smuzhiyun return "Start Transfer";
32*4882a593Smuzhiyun case DWC3_DEPCMD_CLEARSTALL:
33*4882a593Smuzhiyun return "Clear Stall";
34*4882a593Smuzhiyun case DWC3_DEPCMD_SETSTALL:
35*4882a593Smuzhiyun return "Set Stall";
36*4882a593Smuzhiyun case DWC3_DEPCMD_GETEPSTATE:
37*4882a593Smuzhiyun return "Get Endpoint State";
38*4882a593Smuzhiyun case DWC3_DEPCMD_SETTRANSFRESOURCE:
39*4882a593Smuzhiyun return "Set Endpoint Transfer Resource";
40*4882a593Smuzhiyun case DWC3_DEPCMD_SETEPCONFIG:
41*4882a593Smuzhiyun return "Set Endpoint Configuration";
42*4882a593Smuzhiyun default:
43*4882a593Smuzhiyun return "UNKNOWN command";
44*4882a593Smuzhiyun }
45*4882a593Smuzhiyun }
46*4882a593Smuzhiyun
47*4882a593Smuzhiyun /**
48*4882a593Smuzhiyun * dwc3_gadget_generic_cmd_string - returns generic command string
49*4882a593Smuzhiyun * @cmd: command code
50*4882a593Smuzhiyun */
51*4882a593Smuzhiyun static inline const char *
dwc3_gadget_generic_cmd_string(u8 cmd)52*4882a593Smuzhiyun dwc3_gadget_generic_cmd_string(u8 cmd)
53*4882a593Smuzhiyun {
54*4882a593Smuzhiyun switch (cmd) {
55*4882a593Smuzhiyun case DWC3_DGCMD_SET_LMP:
56*4882a593Smuzhiyun return "Set LMP";
57*4882a593Smuzhiyun case DWC3_DGCMD_SET_PERIODIC_PAR:
58*4882a593Smuzhiyun return "Set Periodic Parameters";
59*4882a593Smuzhiyun case DWC3_DGCMD_XMIT_FUNCTION:
60*4882a593Smuzhiyun return "Transmit Function Wake Device Notification";
61*4882a593Smuzhiyun case DWC3_DGCMD_SET_SCRATCHPAD_ADDR_LO:
62*4882a593Smuzhiyun return "Set Scratchpad Buffer Array Address Lo";
63*4882a593Smuzhiyun case DWC3_DGCMD_SET_SCRATCHPAD_ADDR_HI:
64*4882a593Smuzhiyun return "Set Scratchpad Buffer Array Address Hi";
65*4882a593Smuzhiyun case DWC3_DGCMD_SELECTED_FIFO_FLUSH:
66*4882a593Smuzhiyun return "Selected FIFO Flush";
67*4882a593Smuzhiyun case DWC3_DGCMD_ALL_FIFO_FLUSH:
68*4882a593Smuzhiyun return "All FIFO Flush";
69*4882a593Smuzhiyun case DWC3_DGCMD_SET_ENDPOINT_NRDY:
70*4882a593Smuzhiyun return "Set Endpoint NRDY";
71*4882a593Smuzhiyun case DWC3_DGCMD_SET_ENDPOINT_PRIME:
72*4882a593Smuzhiyun return "Set Endpoint Prime";
73*4882a593Smuzhiyun case DWC3_DGCMD_RUN_SOC_BUS_LOOPBACK:
74*4882a593Smuzhiyun return "Run SoC Bus Loopback Test";
75*4882a593Smuzhiyun default:
76*4882a593Smuzhiyun return "UNKNOWN";
77*4882a593Smuzhiyun }
78*4882a593Smuzhiyun }
79*4882a593Smuzhiyun
80*4882a593Smuzhiyun /**
81*4882a593Smuzhiyun * dwc3_gadget_link_string - returns link name
82*4882a593Smuzhiyun * @link_state: link state code
83*4882a593Smuzhiyun */
84*4882a593Smuzhiyun static inline const char *
dwc3_gadget_link_string(enum dwc3_link_state link_state)85*4882a593Smuzhiyun dwc3_gadget_link_string(enum dwc3_link_state link_state)
86*4882a593Smuzhiyun {
87*4882a593Smuzhiyun switch (link_state) {
88*4882a593Smuzhiyun case DWC3_LINK_STATE_U0:
89*4882a593Smuzhiyun return "U0";
90*4882a593Smuzhiyun case DWC3_LINK_STATE_U1:
91*4882a593Smuzhiyun return "U1";
92*4882a593Smuzhiyun case DWC3_LINK_STATE_U2:
93*4882a593Smuzhiyun return "U2";
94*4882a593Smuzhiyun case DWC3_LINK_STATE_U3:
95*4882a593Smuzhiyun return "U3";
96*4882a593Smuzhiyun case DWC3_LINK_STATE_SS_DIS:
97*4882a593Smuzhiyun return "SS.Disabled";
98*4882a593Smuzhiyun case DWC3_LINK_STATE_RX_DET:
99*4882a593Smuzhiyun return "RX.Detect";
100*4882a593Smuzhiyun case DWC3_LINK_STATE_SS_INACT:
101*4882a593Smuzhiyun return "SS.Inactive";
102*4882a593Smuzhiyun case DWC3_LINK_STATE_POLL:
103*4882a593Smuzhiyun return "Polling";
104*4882a593Smuzhiyun case DWC3_LINK_STATE_RECOV:
105*4882a593Smuzhiyun return "Recovery";
106*4882a593Smuzhiyun case DWC3_LINK_STATE_HRESET:
107*4882a593Smuzhiyun return "Hot Reset";
108*4882a593Smuzhiyun case DWC3_LINK_STATE_CMPLY:
109*4882a593Smuzhiyun return "Compliance";
110*4882a593Smuzhiyun case DWC3_LINK_STATE_LPBK:
111*4882a593Smuzhiyun return "Loopback";
112*4882a593Smuzhiyun case DWC3_LINK_STATE_RESET:
113*4882a593Smuzhiyun return "Reset";
114*4882a593Smuzhiyun case DWC3_LINK_STATE_RESUME:
115*4882a593Smuzhiyun return "Resume";
116*4882a593Smuzhiyun default:
117*4882a593Smuzhiyun return "UNKNOWN link state";
118*4882a593Smuzhiyun }
119*4882a593Smuzhiyun }
120*4882a593Smuzhiyun
121*4882a593Smuzhiyun /**
122*4882a593Smuzhiyun * dwc3_gadget_hs_link_string - returns highspeed and below link name
123*4882a593Smuzhiyun * @link_state: link state code
124*4882a593Smuzhiyun */
125*4882a593Smuzhiyun static inline const char *
dwc3_gadget_hs_link_string(enum dwc3_link_state link_state)126*4882a593Smuzhiyun dwc3_gadget_hs_link_string(enum dwc3_link_state link_state)
127*4882a593Smuzhiyun {
128*4882a593Smuzhiyun switch (link_state) {
129*4882a593Smuzhiyun case DWC3_LINK_STATE_U0:
130*4882a593Smuzhiyun return "On";
131*4882a593Smuzhiyun case DWC3_LINK_STATE_U2:
132*4882a593Smuzhiyun return "Sleep";
133*4882a593Smuzhiyun case DWC3_LINK_STATE_U3:
134*4882a593Smuzhiyun return "Suspend";
135*4882a593Smuzhiyun case DWC3_LINK_STATE_SS_DIS:
136*4882a593Smuzhiyun return "Disconnected";
137*4882a593Smuzhiyun case DWC3_LINK_STATE_RX_DET:
138*4882a593Smuzhiyun return "Early Suspend";
139*4882a593Smuzhiyun case DWC3_LINK_STATE_RECOV:
140*4882a593Smuzhiyun return "Recovery";
141*4882a593Smuzhiyun case DWC3_LINK_STATE_RESET:
142*4882a593Smuzhiyun return "Reset";
143*4882a593Smuzhiyun case DWC3_LINK_STATE_RESUME:
144*4882a593Smuzhiyun return "Resume";
145*4882a593Smuzhiyun default:
146*4882a593Smuzhiyun return "UNKNOWN link state";
147*4882a593Smuzhiyun }
148*4882a593Smuzhiyun }
149*4882a593Smuzhiyun
150*4882a593Smuzhiyun /**
151*4882a593Smuzhiyun * dwc3_trb_type_string - returns TRB type as a string
152*4882a593Smuzhiyun * @type: the type of the TRB
153*4882a593Smuzhiyun */
dwc3_trb_type_string(unsigned int type)154*4882a593Smuzhiyun static inline const char *dwc3_trb_type_string(unsigned int type)
155*4882a593Smuzhiyun {
156*4882a593Smuzhiyun switch (type) {
157*4882a593Smuzhiyun case DWC3_TRBCTL_NORMAL:
158*4882a593Smuzhiyun return "normal";
159*4882a593Smuzhiyun case DWC3_TRBCTL_CONTROL_SETUP:
160*4882a593Smuzhiyun return "setup";
161*4882a593Smuzhiyun case DWC3_TRBCTL_CONTROL_STATUS2:
162*4882a593Smuzhiyun return "status2";
163*4882a593Smuzhiyun case DWC3_TRBCTL_CONTROL_STATUS3:
164*4882a593Smuzhiyun return "status3";
165*4882a593Smuzhiyun case DWC3_TRBCTL_CONTROL_DATA:
166*4882a593Smuzhiyun return "data";
167*4882a593Smuzhiyun case DWC3_TRBCTL_ISOCHRONOUS_FIRST:
168*4882a593Smuzhiyun return "isoc-first";
169*4882a593Smuzhiyun case DWC3_TRBCTL_ISOCHRONOUS:
170*4882a593Smuzhiyun return "isoc";
171*4882a593Smuzhiyun case DWC3_TRBCTL_LINK_TRB:
172*4882a593Smuzhiyun return "link";
173*4882a593Smuzhiyun default:
174*4882a593Smuzhiyun return "UNKNOWN";
175*4882a593Smuzhiyun }
176*4882a593Smuzhiyun }
177*4882a593Smuzhiyun
dwc3_ep0_state_string(enum dwc3_ep0_state state)178*4882a593Smuzhiyun static inline const char *dwc3_ep0_state_string(enum dwc3_ep0_state state)
179*4882a593Smuzhiyun {
180*4882a593Smuzhiyun switch (state) {
181*4882a593Smuzhiyun case EP0_UNCONNECTED:
182*4882a593Smuzhiyun return "Unconnected";
183*4882a593Smuzhiyun case EP0_SETUP_PHASE:
184*4882a593Smuzhiyun return "Setup Phase";
185*4882a593Smuzhiyun case EP0_DATA_PHASE:
186*4882a593Smuzhiyun return "Data Phase";
187*4882a593Smuzhiyun case EP0_STATUS_PHASE:
188*4882a593Smuzhiyun return "Status Phase";
189*4882a593Smuzhiyun default:
190*4882a593Smuzhiyun return "UNKNOWN";
191*4882a593Smuzhiyun }
192*4882a593Smuzhiyun }
193*4882a593Smuzhiyun
194*4882a593Smuzhiyun /**
195*4882a593Smuzhiyun * dwc3_gadget_event_string - returns event name
196*4882a593Smuzhiyun * @event: the event code
197*4882a593Smuzhiyun */
dwc3_gadget_event_string(char * str,size_t size,const struct dwc3_event_devt * event)198*4882a593Smuzhiyun static inline const char *dwc3_gadget_event_string(char *str, size_t size,
199*4882a593Smuzhiyun const struct dwc3_event_devt *event)
200*4882a593Smuzhiyun {
201*4882a593Smuzhiyun enum dwc3_link_state state = event->event_info & DWC3_LINK_STATE_MASK;
202*4882a593Smuzhiyun
203*4882a593Smuzhiyun switch (event->type) {
204*4882a593Smuzhiyun case DWC3_DEVICE_EVENT_DISCONNECT:
205*4882a593Smuzhiyun snprintf(str, size, "Disconnect: [%s]",
206*4882a593Smuzhiyun dwc3_gadget_link_string(state));
207*4882a593Smuzhiyun break;
208*4882a593Smuzhiyun case DWC3_DEVICE_EVENT_RESET:
209*4882a593Smuzhiyun snprintf(str, size, "Reset [%s]",
210*4882a593Smuzhiyun dwc3_gadget_link_string(state));
211*4882a593Smuzhiyun break;
212*4882a593Smuzhiyun case DWC3_DEVICE_EVENT_CONNECT_DONE:
213*4882a593Smuzhiyun snprintf(str, size, "Connection Done [%s]",
214*4882a593Smuzhiyun dwc3_gadget_link_string(state));
215*4882a593Smuzhiyun break;
216*4882a593Smuzhiyun case DWC3_DEVICE_EVENT_LINK_STATUS_CHANGE:
217*4882a593Smuzhiyun snprintf(str, size, "Link Change [%s]",
218*4882a593Smuzhiyun dwc3_gadget_link_string(state));
219*4882a593Smuzhiyun break;
220*4882a593Smuzhiyun case DWC3_DEVICE_EVENT_WAKEUP:
221*4882a593Smuzhiyun snprintf(str, size, "WakeUp [%s]",
222*4882a593Smuzhiyun dwc3_gadget_link_string(state));
223*4882a593Smuzhiyun break;
224*4882a593Smuzhiyun case DWC3_DEVICE_EVENT_SUSPEND:
225*4882a593Smuzhiyun snprintf(str, size, "Suspend [%s]",
226*4882a593Smuzhiyun dwc3_gadget_link_string(state));
227*4882a593Smuzhiyun break;
228*4882a593Smuzhiyun case DWC3_DEVICE_EVENT_SOF:
229*4882a593Smuzhiyun snprintf(str, size, "Start-Of-Frame [%s]",
230*4882a593Smuzhiyun dwc3_gadget_link_string(state));
231*4882a593Smuzhiyun break;
232*4882a593Smuzhiyun case DWC3_DEVICE_EVENT_ERRATIC_ERROR:
233*4882a593Smuzhiyun snprintf(str, size, "Erratic Error [%s]",
234*4882a593Smuzhiyun dwc3_gadget_link_string(state));
235*4882a593Smuzhiyun break;
236*4882a593Smuzhiyun case DWC3_DEVICE_EVENT_CMD_CMPL:
237*4882a593Smuzhiyun snprintf(str, size, "Command Complete [%s]",
238*4882a593Smuzhiyun dwc3_gadget_link_string(state));
239*4882a593Smuzhiyun break;
240*4882a593Smuzhiyun case DWC3_DEVICE_EVENT_OVERFLOW:
241*4882a593Smuzhiyun snprintf(str, size, "Overflow [%s]",
242*4882a593Smuzhiyun dwc3_gadget_link_string(state));
243*4882a593Smuzhiyun break;
244*4882a593Smuzhiyun default:
245*4882a593Smuzhiyun snprintf(str, size, "UNKNOWN");
246*4882a593Smuzhiyun }
247*4882a593Smuzhiyun
248*4882a593Smuzhiyun return str;
249*4882a593Smuzhiyun }
250*4882a593Smuzhiyun
251*4882a593Smuzhiyun /**
252*4882a593Smuzhiyun * dwc3_ep_event_string - returns event name
253*4882a593Smuzhiyun * @event: then event code
254*4882a593Smuzhiyun */
dwc3_ep_event_string(char * str,size_t size,const struct dwc3_event_depevt * event,u32 ep0state)255*4882a593Smuzhiyun static inline const char *dwc3_ep_event_string(char *str, size_t size,
256*4882a593Smuzhiyun const struct dwc3_event_depevt *event, u32 ep0state)
257*4882a593Smuzhiyun {
258*4882a593Smuzhiyun u8 epnum = event->endpoint_number;
259*4882a593Smuzhiyun size_t len;
260*4882a593Smuzhiyun int status;
261*4882a593Smuzhiyun
262*4882a593Smuzhiyun len = scnprintf(str, size, "ep%d%s: ", epnum >> 1,
263*4882a593Smuzhiyun (epnum & 1) ? "in" : "out");
264*4882a593Smuzhiyun
265*4882a593Smuzhiyun status = event->status;
266*4882a593Smuzhiyun
267*4882a593Smuzhiyun switch (event->endpoint_event) {
268*4882a593Smuzhiyun case DWC3_DEPEVT_XFERCOMPLETE:
269*4882a593Smuzhiyun len += scnprintf(str + len, size - len,
270*4882a593Smuzhiyun "Transfer Complete (%c%c%c)",
271*4882a593Smuzhiyun status & DEPEVT_STATUS_SHORT ? 'S' : 's',
272*4882a593Smuzhiyun status & DEPEVT_STATUS_IOC ? 'I' : 'i',
273*4882a593Smuzhiyun status & DEPEVT_STATUS_LST ? 'L' : 'l');
274*4882a593Smuzhiyun
275*4882a593Smuzhiyun if (epnum <= 1)
276*4882a593Smuzhiyun scnprintf(str + len, size - len, " [%s]",
277*4882a593Smuzhiyun dwc3_ep0_state_string(ep0state));
278*4882a593Smuzhiyun break;
279*4882a593Smuzhiyun case DWC3_DEPEVT_XFERINPROGRESS:
280*4882a593Smuzhiyun scnprintf(str + len, size - len,
281*4882a593Smuzhiyun "Transfer In Progress [%d] (%c%c%c)",
282*4882a593Smuzhiyun event->parameters,
283*4882a593Smuzhiyun status & DEPEVT_STATUS_SHORT ? 'S' : 's',
284*4882a593Smuzhiyun status & DEPEVT_STATUS_IOC ? 'I' : 'i',
285*4882a593Smuzhiyun status & DEPEVT_STATUS_LST ? 'M' : 'm');
286*4882a593Smuzhiyun break;
287*4882a593Smuzhiyun case DWC3_DEPEVT_XFERNOTREADY:
288*4882a593Smuzhiyun len += scnprintf(str + len, size - len,
289*4882a593Smuzhiyun "Transfer Not Ready [%d]%s",
290*4882a593Smuzhiyun event->parameters,
291*4882a593Smuzhiyun status & DEPEVT_STATUS_TRANSFER_ACTIVE ?
292*4882a593Smuzhiyun " (Active)" : " (Not Active)");
293*4882a593Smuzhiyun
294*4882a593Smuzhiyun /* Control Endpoints */
295*4882a593Smuzhiyun if (epnum <= 1) {
296*4882a593Smuzhiyun int phase = DEPEVT_STATUS_CONTROL_PHASE(event->status);
297*4882a593Smuzhiyun
298*4882a593Smuzhiyun switch (phase) {
299*4882a593Smuzhiyun case DEPEVT_STATUS_CONTROL_DATA:
300*4882a593Smuzhiyun scnprintf(str + len, size - len,
301*4882a593Smuzhiyun " [Data Phase]");
302*4882a593Smuzhiyun break;
303*4882a593Smuzhiyun case DEPEVT_STATUS_CONTROL_STATUS:
304*4882a593Smuzhiyun scnprintf(str + len, size - len,
305*4882a593Smuzhiyun " [Status Phase]");
306*4882a593Smuzhiyun }
307*4882a593Smuzhiyun }
308*4882a593Smuzhiyun break;
309*4882a593Smuzhiyun case DWC3_DEPEVT_RXTXFIFOEVT:
310*4882a593Smuzhiyun scnprintf(str + len, size - len, "FIFO");
311*4882a593Smuzhiyun break;
312*4882a593Smuzhiyun case DWC3_DEPEVT_STREAMEVT:
313*4882a593Smuzhiyun status = event->status;
314*4882a593Smuzhiyun
315*4882a593Smuzhiyun switch (status) {
316*4882a593Smuzhiyun case DEPEVT_STREAMEVT_FOUND:
317*4882a593Smuzhiyun scnprintf(str + len, size - len, " Stream %d Found",
318*4882a593Smuzhiyun event->parameters);
319*4882a593Smuzhiyun break;
320*4882a593Smuzhiyun case DEPEVT_STREAMEVT_NOTFOUND:
321*4882a593Smuzhiyun default:
322*4882a593Smuzhiyun scnprintf(str + len, size - len, " Stream Not Found");
323*4882a593Smuzhiyun break;
324*4882a593Smuzhiyun }
325*4882a593Smuzhiyun
326*4882a593Smuzhiyun break;
327*4882a593Smuzhiyun case DWC3_DEPEVT_EPCMDCMPLT:
328*4882a593Smuzhiyun scnprintf(str + len, size - len, "Endpoint Command Complete");
329*4882a593Smuzhiyun break;
330*4882a593Smuzhiyun default:
331*4882a593Smuzhiyun scnprintf(str + len, size - len, "UNKNOWN");
332*4882a593Smuzhiyun }
333*4882a593Smuzhiyun
334*4882a593Smuzhiyun return str;
335*4882a593Smuzhiyun }
336*4882a593Smuzhiyun
337*4882a593Smuzhiyun /**
338*4882a593Smuzhiyun * dwc3_gadget_event_type_string - return event name
339*4882a593Smuzhiyun * @event: the event code
340*4882a593Smuzhiyun */
dwc3_gadget_event_type_string(u8 event)341*4882a593Smuzhiyun static inline const char *dwc3_gadget_event_type_string(u8 event)
342*4882a593Smuzhiyun {
343*4882a593Smuzhiyun switch (event) {
344*4882a593Smuzhiyun case DWC3_DEVICE_EVENT_DISCONNECT:
345*4882a593Smuzhiyun return "Disconnect";
346*4882a593Smuzhiyun case DWC3_DEVICE_EVENT_RESET:
347*4882a593Smuzhiyun return "Reset";
348*4882a593Smuzhiyun case DWC3_DEVICE_EVENT_CONNECT_DONE:
349*4882a593Smuzhiyun return "Connect Done";
350*4882a593Smuzhiyun case DWC3_DEVICE_EVENT_LINK_STATUS_CHANGE:
351*4882a593Smuzhiyun return "Link Status Change";
352*4882a593Smuzhiyun case DWC3_DEVICE_EVENT_WAKEUP:
353*4882a593Smuzhiyun return "Wake-Up";
354*4882a593Smuzhiyun case DWC3_DEVICE_EVENT_HIBER_REQ:
355*4882a593Smuzhiyun return "Hibernation";
356*4882a593Smuzhiyun case DWC3_DEVICE_EVENT_SUSPEND:
357*4882a593Smuzhiyun return "Suspend";
358*4882a593Smuzhiyun case DWC3_DEVICE_EVENT_SOF:
359*4882a593Smuzhiyun return "Start of Frame";
360*4882a593Smuzhiyun case DWC3_DEVICE_EVENT_ERRATIC_ERROR:
361*4882a593Smuzhiyun return "Erratic Error";
362*4882a593Smuzhiyun case DWC3_DEVICE_EVENT_CMD_CMPL:
363*4882a593Smuzhiyun return "Command Complete";
364*4882a593Smuzhiyun case DWC3_DEVICE_EVENT_OVERFLOW:
365*4882a593Smuzhiyun return "Overflow";
366*4882a593Smuzhiyun default:
367*4882a593Smuzhiyun return "UNKNOWN";
368*4882a593Smuzhiyun }
369*4882a593Smuzhiyun }
370*4882a593Smuzhiyun
dwc3_decode_event(char * str,size_t size,u32 event,u32 ep0state)371*4882a593Smuzhiyun static inline const char *dwc3_decode_event(char *str, size_t size, u32 event,
372*4882a593Smuzhiyun u32 ep0state)
373*4882a593Smuzhiyun {
374*4882a593Smuzhiyun union dwc3_event evt;
375*4882a593Smuzhiyun
376*4882a593Smuzhiyun memcpy(&evt, &event, sizeof(event));
377*4882a593Smuzhiyun
378*4882a593Smuzhiyun if (evt.type.is_devspec)
379*4882a593Smuzhiyun return dwc3_gadget_event_string(str, size, &evt.devt);
380*4882a593Smuzhiyun else
381*4882a593Smuzhiyun return dwc3_ep_event_string(str, size, &evt.depevt, ep0state);
382*4882a593Smuzhiyun }
383*4882a593Smuzhiyun
dwc3_ep_cmd_status_string(int status)384*4882a593Smuzhiyun static inline const char *dwc3_ep_cmd_status_string(int status)
385*4882a593Smuzhiyun {
386*4882a593Smuzhiyun switch (status) {
387*4882a593Smuzhiyun case -ETIMEDOUT:
388*4882a593Smuzhiyun return "Timed Out";
389*4882a593Smuzhiyun case 0:
390*4882a593Smuzhiyun return "Successful";
391*4882a593Smuzhiyun case DEPEVT_TRANSFER_NO_RESOURCE:
392*4882a593Smuzhiyun return "No Resource";
393*4882a593Smuzhiyun case DEPEVT_TRANSFER_BUS_EXPIRY:
394*4882a593Smuzhiyun return "Bus Expiry";
395*4882a593Smuzhiyun default:
396*4882a593Smuzhiyun return "UNKNOWN";
397*4882a593Smuzhiyun }
398*4882a593Smuzhiyun }
399*4882a593Smuzhiyun
dwc3_gadget_generic_cmd_status_string(int status)400*4882a593Smuzhiyun static inline const char *dwc3_gadget_generic_cmd_status_string(int status)
401*4882a593Smuzhiyun {
402*4882a593Smuzhiyun switch (status) {
403*4882a593Smuzhiyun case -ETIMEDOUT:
404*4882a593Smuzhiyun return "Timed Out";
405*4882a593Smuzhiyun case 0:
406*4882a593Smuzhiyun return "Successful";
407*4882a593Smuzhiyun case 1:
408*4882a593Smuzhiyun return "Error";
409*4882a593Smuzhiyun default:
410*4882a593Smuzhiyun return "UNKNOWN";
411*4882a593Smuzhiyun }
412*4882a593Smuzhiyun }
413*4882a593Smuzhiyun
414*4882a593Smuzhiyun
415*4882a593Smuzhiyun #ifdef CONFIG_DEBUG_FS
416*4882a593Smuzhiyun extern void dwc3_debugfs_create_endpoint_dir(struct dwc3_ep *dep);
417*4882a593Smuzhiyun extern void dwc3_debugfs_init(struct dwc3 *d);
418*4882a593Smuzhiyun extern void dwc3_debugfs_exit(struct dwc3 *d);
419*4882a593Smuzhiyun #else
dwc3_debugfs_create_endpoint_dir(struct dwc3_ep * dep)420*4882a593Smuzhiyun static inline void dwc3_debugfs_create_endpoint_dir(struct dwc3_ep *dep)
421*4882a593Smuzhiyun { }
dwc3_debugfs_init(struct dwc3 * d)422*4882a593Smuzhiyun static inline void dwc3_debugfs_init(struct dwc3 *d)
423*4882a593Smuzhiyun { }
dwc3_debugfs_exit(struct dwc3 * d)424*4882a593Smuzhiyun static inline void dwc3_debugfs_exit(struct dwc3 *d)
425*4882a593Smuzhiyun { }
426*4882a593Smuzhiyun #endif
427*4882a593Smuzhiyun #endif /* __DWC3_DEBUG_H */
428