18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci/** 38c2ecf20Sopenharmony_ci * debug.h - DesignWare USB3 DRD Controller Debug Header 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright (C) 2010-2011 Texas Instruments Incorporated - https://www.ti.com 68c2ecf20Sopenharmony_ci * 78c2ecf20Sopenharmony_ci * Authors: Felipe Balbi <balbi@ti.com>, 88c2ecf20Sopenharmony_ci * Sebastian Andrzej Siewior <bigeasy@linutronix.de> 98c2ecf20Sopenharmony_ci */ 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_ci#ifndef __DWC3_DEBUG_H 128c2ecf20Sopenharmony_ci#define __DWC3_DEBUG_H 138c2ecf20Sopenharmony_ci 148c2ecf20Sopenharmony_ci#include "core.h" 158c2ecf20Sopenharmony_ci 168c2ecf20Sopenharmony_ci/** 178c2ecf20Sopenharmony_ci * dwc3_gadget_ep_cmd_string - returns endpoint command string 188c2ecf20Sopenharmony_ci * @cmd: command code 198c2ecf20Sopenharmony_ci */ 208c2ecf20Sopenharmony_cistatic inline const char * 218c2ecf20Sopenharmony_cidwc3_gadget_ep_cmd_string(u8 cmd) 228c2ecf20Sopenharmony_ci{ 238c2ecf20Sopenharmony_ci switch (cmd) { 248c2ecf20Sopenharmony_ci case DWC3_DEPCMD_DEPSTARTCFG: 258c2ecf20Sopenharmony_ci return "Start New Configuration"; 268c2ecf20Sopenharmony_ci case DWC3_DEPCMD_ENDTRANSFER: 278c2ecf20Sopenharmony_ci return "End Transfer"; 288c2ecf20Sopenharmony_ci case DWC3_DEPCMD_UPDATETRANSFER: 298c2ecf20Sopenharmony_ci return "Update Transfer"; 308c2ecf20Sopenharmony_ci case DWC3_DEPCMD_STARTTRANSFER: 318c2ecf20Sopenharmony_ci return "Start Transfer"; 328c2ecf20Sopenharmony_ci case DWC3_DEPCMD_CLEARSTALL: 338c2ecf20Sopenharmony_ci return "Clear Stall"; 348c2ecf20Sopenharmony_ci case DWC3_DEPCMD_SETSTALL: 358c2ecf20Sopenharmony_ci return "Set Stall"; 368c2ecf20Sopenharmony_ci case DWC3_DEPCMD_GETEPSTATE: 378c2ecf20Sopenharmony_ci return "Get Endpoint State"; 388c2ecf20Sopenharmony_ci case DWC3_DEPCMD_SETTRANSFRESOURCE: 398c2ecf20Sopenharmony_ci return "Set Endpoint Transfer Resource"; 408c2ecf20Sopenharmony_ci case DWC3_DEPCMD_SETEPCONFIG: 418c2ecf20Sopenharmony_ci return "Set Endpoint Configuration"; 428c2ecf20Sopenharmony_ci default: 438c2ecf20Sopenharmony_ci return "UNKNOWN command"; 448c2ecf20Sopenharmony_ci } 458c2ecf20Sopenharmony_ci} 468c2ecf20Sopenharmony_ci 478c2ecf20Sopenharmony_ci/** 488c2ecf20Sopenharmony_ci * dwc3_gadget_generic_cmd_string - returns generic command string 498c2ecf20Sopenharmony_ci * @cmd: command code 508c2ecf20Sopenharmony_ci */ 518c2ecf20Sopenharmony_cistatic inline const char * 528c2ecf20Sopenharmony_cidwc3_gadget_generic_cmd_string(u8 cmd) 538c2ecf20Sopenharmony_ci{ 548c2ecf20Sopenharmony_ci switch (cmd) { 558c2ecf20Sopenharmony_ci case DWC3_DGCMD_SET_LMP: 568c2ecf20Sopenharmony_ci return "Set LMP"; 578c2ecf20Sopenharmony_ci case DWC3_DGCMD_SET_PERIODIC_PAR: 588c2ecf20Sopenharmony_ci return "Set Periodic Parameters"; 598c2ecf20Sopenharmony_ci case DWC3_DGCMD_XMIT_FUNCTION: 608c2ecf20Sopenharmony_ci return "Transmit Function Wake Device Notification"; 618c2ecf20Sopenharmony_ci case DWC3_DGCMD_SET_SCRATCHPAD_ADDR_LO: 628c2ecf20Sopenharmony_ci return "Set Scratchpad Buffer Array Address Lo"; 638c2ecf20Sopenharmony_ci case DWC3_DGCMD_SET_SCRATCHPAD_ADDR_HI: 648c2ecf20Sopenharmony_ci return "Set Scratchpad Buffer Array Address Hi"; 658c2ecf20Sopenharmony_ci case DWC3_DGCMD_SELECTED_FIFO_FLUSH: 668c2ecf20Sopenharmony_ci return "Selected FIFO Flush"; 678c2ecf20Sopenharmony_ci case DWC3_DGCMD_ALL_FIFO_FLUSH: 688c2ecf20Sopenharmony_ci return "All FIFO Flush"; 698c2ecf20Sopenharmony_ci case DWC3_DGCMD_SET_ENDPOINT_NRDY: 708c2ecf20Sopenharmony_ci return "Set Endpoint NRDY"; 718c2ecf20Sopenharmony_ci case DWC3_DGCMD_SET_ENDPOINT_PRIME: 728c2ecf20Sopenharmony_ci return "Set Endpoint Prime"; 738c2ecf20Sopenharmony_ci case DWC3_DGCMD_RUN_SOC_BUS_LOOPBACK: 748c2ecf20Sopenharmony_ci return "Run SoC Bus Loopback Test"; 758c2ecf20Sopenharmony_ci default: 768c2ecf20Sopenharmony_ci return "UNKNOWN"; 778c2ecf20Sopenharmony_ci } 788c2ecf20Sopenharmony_ci} 798c2ecf20Sopenharmony_ci 808c2ecf20Sopenharmony_ci/** 818c2ecf20Sopenharmony_ci * dwc3_gadget_link_string - returns link name 828c2ecf20Sopenharmony_ci * @link_state: link state code 838c2ecf20Sopenharmony_ci */ 848c2ecf20Sopenharmony_cistatic inline const char * 858c2ecf20Sopenharmony_cidwc3_gadget_link_string(enum dwc3_link_state link_state) 868c2ecf20Sopenharmony_ci{ 878c2ecf20Sopenharmony_ci switch (link_state) { 888c2ecf20Sopenharmony_ci case DWC3_LINK_STATE_U0: 898c2ecf20Sopenharmony_ci return "U0"; 908c2ecf20Sopenharmony_ci case DWC3_LINK_STATE_U1: 918c2ecf20Sopenharmony_ci return "U1"; 928c2ecf20Sopenharmony_ci case DWC3_LINK_STATE_U2: 938c2ecf20Sopenharmony_ci return "U2"; 948c2ecf20Sopenharmony_ci case DWC3_LINK_STATE_U3: 958c2ecf20Sopenharmony_ci return "U3"; 968c2ecf20Sopenharmony_ci case DWC3_LINK_STATE_SS_DIS: 978c2ecf20Sopenharmony_ci return "SS.Disabled"; 988c2ecf20Sopenharmony_ci case DWC3_LINK_STATE_RX_DET: 998c2ecf20Sopenharmony_ci return "RX.Detect"; 1008c2ecf20Sopenharmony_ci case DWC3_LINK_STATE_SS_INACT: 1018c2ecf20Sopenharmony_ci return "SS.Inactive"; 1028c2ecf20Sopenharmony_ci case DWC3_LINK_STATE_POLL: 1038c2ecf20Sopenharmony_ci return "Polling"; 1048c2ecf20Sopenharmony_ci case DWC3_LINK_STATE_RECOV: 1058c2ecf20Sopenharmony_ci return "Recovery"; 1068c2ecf20Sopenharmony_ci case DWC3_LINK_STATE_HRESET: 1078c2ecf20Sopenharmony_ci return "Hot Reset"; 1088c2ecf20Sopenharmony_ci case DWC3_LINK_STATE_CMPLY: 1098c2ecf20Sopenharmony_ci return "Compliance"; 1108c2ecf20Sopenharmony_ci case DWC3_LINK_STATE_LPBK: 1118c2ecf20Sopenharmony_ci return "Loopback"; 1128c2ecf20Sopenharmony_ci case DWC3_LINK_STATE_RESET: 1138c2ecf20Sopenharmony_ci return "Reset"; 1148c2ecf20Sopenharmony_ci case DWC3_LINK_STATE_RESUME: 1158c2ecf20Sopenharmony_ci return "Resume"; 1168c2ecf20Sopenharmony_ci default: 1178c2ecf20Sopenharmony_ci return "UNKNOWN link state"; 1188c2ecf20Sopenharmony_ci } 1198c2ecf20Sopenharmony_ci} 1208c2ecf20Sopenharmony_ci 1218c2ecf20Sopenharmony_ci/** 1228c2ecf20Sopenharmony_ci * dwc3_gadget_hs_link_string - returns highspeed and below link name 1238c2ecf20Sopenharmony_ci * @link_state: link state code 1248c2ecf20Sopenharmony_ci */ 1258c2ecf20Sopenharmony_cistatic inline const char * 1268c2ecf20Sopenharmony_cidwc3_gadget_hs_link_string(enum dwc3_link_state link_state) 1278c2ecf20Sopenharmony_ci{ 1288c2ecf20Sopenharmony_ci switch (link_state) { 1298c2ecf20Sopenharmony_ci case DWC3_LINK_STATE_U0: 1308c2ecf20Sopenharmony_ci return "On"; 1318c2ecf20Sopenharmony_ci case DWC3_LINK_STATE_U2: 1328c2ecf20Sopenharmony_ci return "Sleep"; 1338c2ecf20Sopenharmony_ci case DWC3_LINK_STATE_U3: 1348c2ecf20Sopenharmony_ci return "Suspend"; 1358c2ecf20Sopenharmony_ci case DWC3_LINK_STATE_SS_DIS: 1368c2ecf20Sopenharmony_ci return "Disconnected"; 1378c2ecf20Sopenharmony_ci case DWC3_LINK_STATE_RX_DET: 1388c2ecf20Sopenharmony_ci return "Early Suspend"; 1398c2ecf20Sopenharmony_ci case DWC3_LINK_STATE_RECOV: 1408c2ecf20Sopenharmony_ci return "Recovery"; 1418c2ecf20Sopenharmony_ci case DWC3_LINK_STATE_RESET: 1428c2ecf20Sopenharmony_ci return "Reset"; 1438c2ecf20Sopenharmony_ci case DWC3_LINK_STATE_RESUME: 1448c2ecf20Sopenharmony_ci return "Resume"; 1458c2ecf20Sopenharmony_ci default: 1468c2ecf20Sopenharmony_ci return "UNKNOWN link state"; 1478c2ecf20Sopenharmony_ci } 1488c2ecf20Sopenharmony_ci} 1498c2ecf20Sopenharmony_ci 1508c2ecf20Sopenharmony_ci/** 1518c2ecf20Sopenharmony_ci * dwc3_trb_type_string - returns TRB type as a string 1528c2ecf20Sopenharmony_ci * @type: the type of the TRB 1538c2ecf20Sopenharmony_ci */ 1548c2ecf20Sopenharmony_cistatic inline const char *dwc3_trb_type_string(unsigned int type) 1558c2ecf20Sopenharmony_ci{ 1568c2ecf20Sopenharmony_ci switch (type) { 1578c2ecf20Sopenharmony_ci case DWC3_TRBCTL_NORMAL: 1588c2ecf20Sopenharmony_ci return "normal"; 1598c2ecf20Sopenharmony_ci case DWC3_TRBCTL_CONTROL_SETUP: 1608c2ecf20Sopenharmony_ci return "setup"; 1618c2ecf20Sopenharmony_ci case DWC3_TRBCTL_CONTROL_STATUS2: 1628c2ecf20Sopenharmony_ci return "status2"; 1638c2ecf20Sopenharmony_ci case DWC3_TRBCTL_CONTROL_STATUS3: 1648c2ecf20Sopenharmony_ci return "status3"; 1658c2ecf20Sopenharmony_ci case DWC3_TRBCTL_CONTROL_DATA: 1668c2ecf20Sopenharmony_ci return "data"; 1678c2ecf20Sopenharmony_ci case DWC3_TRBCTL_ISOCHRONOUS_FIRST: 1688c2ecf20Sopenharmony_ci return "isoc-first"; 1698c2ecf20Sopenharmony_ci case DWC3_TRBCTL_ISOCHRONOUS: 1708c2ecf20Sopenharmony_ci return "isoc"; 1718c2ecf20Sopenharmony_ci case DWC3_TRBCTL_LINK_TRB: 1728c2ecf20Sopenharmony_ci return "link"; 1738c2ecf20Sopenharmony_ci default: 1748c2ecf20Sopenharmony_ci return "UNKNOWN"; 1758c2ecf20Sopenharmony_ci } 1768c2ecf20Sopenharmony_ci} 1778c2ecf20Sopenharmony_ci 1788c2ecf20Sopenharmony_cistatic inline const char *dwc3_ep0_state_string(enum dwc3_ep0_state state) 1798c2ecf20Sopenharmony_ci{ 1808c2ecf20Sopenharmony_ci switch (state) { 1818c2ecf20Sopenharmony_ci case EP0_UNCONNECTED: 1828c2ecf20Sopenharmony_ci return "Unconnected"; 1838c2ecf20Sopenharmony_ci case EP0_SETUP_PHASE: 1848c2ecf20Sopenharmony_ci return "Setup Phase"; 1858c2ecf20Sopenharmony_ci case EP0_DATA_PHASE: 1868c2ecf20Sopenharmony_ci return "Data Phase"; 1878c2ecf20Sopenharmony_ci case EP0_STATUS_PHASE: 1888c2ecf20Sopenharmony_ci return "Status Phase"; 1898c2ecf20Sopenharmony_ci default: 1908c2ecf20Sopenharmony_ci return "UNKNOWN"; 1918c2ecf20Sopenharmony_ci } 1928c2ecf20Sopenharmony_ci} 1938c2ecf20Sopenharmony_ci 1948c2ecf20Sopenharmony_ci/** 1958c2ecf20Sopenharmony_ci * dwc3_gadget_event_string - returns event name 1968c2ecf20Sopenharmony_ci * @event: the event code 1978c2ecf20Sopenharmony_ci */ 1988c2ecf20Sopenharmony_cistatic inline const char *dwc3_gadget_event_string(char *str, size_t size, 1998c2ecf20Sopenharmony_ci const struct dwc3_event_devt *event) 2008c2ecf20Sopenharmony_ci{ 2018c2ecf20Sopenharmony_ci enum dwc3_link_state state = event->event_info & DWC3_LINK_STATE_MASK; 2028c2ecf20Sopenharmony_ci 2038c2ecf20Sopenharmony_ci switch (event->type) { 2048c2ecf20Sopenharmony_ci case DWC3_DEVICE_EVENT_DISCONNECT: 2058c2ecf20Sopenharmony_ci snprintf(str, size, "Disconnect: [%s]", 2068c2ecf20Sopenharmony_ci dwc3_gadget_link_string(state)); 2078c2ecf20Sopenharmony_ci break; 2088c2ecf20Sopenharmony_ci case DWC3_DEVICE_EVENT_RESET: 2098c2ecf20Sopenharmony_ci snprintf(str, size, "Reset [%s]", 2108c2ecf20Sopenharmony_ci dwc3_gadget_link_string(state)); 2118c2ecf20Sopenharmony_ci break; 2128c2ecf20Sopenharmony_ci case DWC3_DEVICE_EVENT_CONNECT_DONE: 2138c2ecf20Sopenharmony_ci snprintf(str, size, "Connection Done [%s]", 2148c2ecf20Sopenharmony_ci dwc3_gadget_link_string(state)); 2158c2ecf20Sopenharmony_ci break; 2168c2ecf20Sopenharmony_ci case DWC3_DEVICE_EVENT_LINK_STATUS_CHANGE: 2178c2ecf20Sopenharmony_ci snprintf(str, size, "Link Change [%s]", 2188c2ecf20Sopenharmony_ci dwc3_gadget_link_string(state)); 2198c2ecf20Sopenharmony_ci break; 2208c2ecf20Sopenharmony_ci case DWC3_DEVICE_EVENT_WAKEUP: 2218c2ecf20Sopenharmony_ci snprintf(str, size, "WakeUp [%s]", 2228c2ecf20Sopenharmony_ci dwc3_gadget_link_string(state)); 2238c2ecf20Sopenharmony_ci break; 2248c2ecf20Sopenharmony_ci case DWC3_DEVICE_EVENT_EOPF: 2258c2ecf20Sopenharmony_ci snprintf(str, size, "End-Of-Frame [%s]", 2268c2ecf20Sopenharmony_ci dwc3_gadget_link_string(state)); 2278c2ecf20Sopenharmony_ci break; 2288c2ecf20Sopenharmony_ci case DWC3_DEVICE_EVENT_SOF: 2298c2ecf20Sopenharmony_ci snprintf(str, size, "Start-Of-Frame [%s]", 2308c2ecf20Sopenharmony_ci dwc3_gadget_link_string(state)); 2318c2ecf20Sopenharmony_ci break; 2328c2ecf20Sopenharmony_ci case DWC3_DEVICE_EVENT_ERRATIC_ERROR: 2338c2ecf20Sopenharmony_ci snprintf(str, size, "Erratic Error [%s]", 2348c2ecf20Sopenharmony_ci dwc3_gadget_link_string(state)); 2358c2ecf20Sopenharmony_ci break; 2368c2ecf20Sopenharmony_ci case DWC3_DEVICE_EVENT_CMD_CMPL: 2378c2ecf20Sopenharmony_ci snprintf(str, size, "Command Complete [%s]", 2388c2ecf20Sopenharmony_ci dwc3_gadget_link_string(state)); 2398c2ecf20Sopenharmony_ci break; 2408c2ecf20Sopenharmony_ci case DWC3_DEVICE_EVENT_OVERFLOW: 2418c2ecf20Sopenharmony_ci snprintf(str, size, "Overflow [%s]", 2428c2ecf20Sopenharmony_ci dwc3_gadget_link_string(state)); 2438c2ecf20Sopenharmony_ci break; 2448c2ecf20Sopenharmony_ci default: 2458c2ecf20Sopenharmony_ci snprintf(str, size, "UNKNOWN"); 2468c2ecf20Sopenharmony_ci } 2478c2ecf20Sopenharmony_ci 2488c2ecf20Sopenharmony_ci return str; 2498c2ecf20Sopenharmony_ci} 2508c2ecf20Sopenharmony_ci 2518c2ecf20Sopenharmony_ci/** 2528c2ecf20Sopenharmony_ci * dwc3_ep_event_string - returns event name 2538c2ecf20Sopenharmony_ci * @event: then event code 2548c2ecf20Sopenharmony_ci */ 2558c2ecf20Sopenharmony_cistatic inline const char *dwc3_ep_event_string(char *str, size_t size, 2568c2ecf20Sopenharmony_ci const struct dwc3_event_depevt *event, u32 ep0state) 2578c2ecf20Sopenharmony_ci{ 2588c2ecf20Sopenharmony_ci u8 epnum = event->endpoint_number; 2598c2ecf20Sopenharmony_ci size_t len; 2608c2ecf20Sopenharmony_ci int status; 2618c2ecf20Sopenharmony_ci 2628c2ecf20Sopenharmony_ci len = scnprintf(str, size, "ep%d%s: ", epnum >> 1, 2638c2ecf20Sopenharmony_ci (epnum & 1) ? "in" : "out"); 2648c2ecf20Sopenharmony_ci 2658c2ecf20Sopenharmony_ci status = event->status; 2668c2ecf20Sopenharmony_ci 2678c2ecf20Sopenharmony_ci switch (event->endpoint_event) { 2688c2ecf20Sopenharmony_ci case DWC3_DEPEVT_XFERCOMPLETE: 2698c2ecf20Sopenharmony_ci len += scnprintf(str + len, size - len, 2708c2ecf20Sopenharmony_ci "Transfer Complete (%c%c%c)", 2718c2ecf20Sopenharmony_ci status & DEPEVT_STATUS_SHORT ? 'S' : 's', 2728c2ecf20Sopenharmony_ci status & DEPEVT_STATUS_IOC ? 'I' : 'i', 2738c2ecf20Sopenharmony_ci status & DEPEVT_STATUS_LST ? 'L' : 'l'); 2748c2ecf20Sopenharmony_ci 2758c2ecf20Sopenharmony_ci if (epnum <= 1) 2768c2ecf20Sopenharmony_ci scnprintf(str + len, size - len, " [%s]", 2778c2ecf20Sopenharmony_ci dwc3_ep0_state_string(ep0state)); 2788c2ecf20Sopenharmony_ci break; 2798c2ecf20Sopenharmony_ci case DWC3_DEPEVT_XFERINPROGRESS: 2808c2ecf20Sopenharmony_ci scnprintf(str + len, size - len, 2818c2ecf20Sopenharmony_ci "Transfer In Progress [%d] (%c%c%c)", 2828c2ecf20Sopenharmony_ci event->parameters, 2838c2ecf20Sopenharmony_ci status & DEPEVT_STATUS_SHORT ? 'S' : 's', 2848c2ecf20Sopenharmony_ci status & DEPEVT_STATUS_IOC ? 'I' : 'i', 2858c2ecf20Sopenharmony_ci status & DEPEVT_STATUS_LST ? 'M' : 'm'); 2868c2ecf20Sopenharmony_ci break; 2878c2ecf20Sopenharmony_ci case DWC3_DEPEVT_XFERNOTREADY: 2888c2ecf20Sopenharmony_ci len += scnprintf(str + len, size - len, 2898c2ecf20Sopenharmony_ci "Transfer Not Ready [%d]%s", 2908c2ecf20Sopenharmony_ci event->parameters, 2918c2ecf20Sopenharmony_ci status & DEPEVT_STATUS_TRANSFER_ACTIVE ? 2928c2ecf20Sopenharmony_ci " (Active)" : " (Not Active)"); 2938c2ecf20Sopenharmony_ci 2948c2ecf20Sopenharmony_ci /* Control Endpoints */ 2958c2ecf20Sopenharmony_ci if (epnum <= 1) { 2968c2ecf20Sopenharmony_ci int phase = DEPEVT_STATUS_CONTROL_PHASE(event->status); 2978c2ecf20Sopenharmony_ci 2988c2ecf20Sopenharmony_ci switch (phase) { 2998c2ecf20Sopenharmony_ci case DEPEVT_STATUS_CONTROL_DATA: 3008c2ecf20Sopenharmony_ci scnprintf(str + len, size - len, 3018c2ecf20Sopenharmony_ci " [Data Phase]"); 3028c2ecf20Sopenharmony_ci break; 3038c2ecf20Sopenharmony_ci case DEPEVT_STATUS_CONTROL_STATUS: 3048c2ecf20Sopenharmony_ci scnprintf(str + len, size - len, 3058c2ecf20Sopenharmony_ci " [Status Phase]"); 3068c2ecf20Sopenharmony_ci } 3078c2ecf20Sopenharmony_ci } 3088c2ecf20Sopenharmony_ci break; 3098c2ecf20Sopenharmony_ci case DWC3_DEPEVT_RXTXFIFOEVT: 3108c2ecf20Sopenharmony_ci scnprintf(str + len, size - len, "FIFO"); 3118c2ecf20Sopenharmony_ci break; 3128c2ecf20Sopenharmony_ci case DWC3_DEPEVT_STREAMEVT: 3138c2ecf20Sopenharmony_ci status = event->status; 3148c2ecf20Sopenharmony_ci 3158c2ecf20Sopenharmony_ci switch (status) { 3168c2ecf20Sopenharmony_ci case DEPEVT_STREAMEVT_FOUND: 3178c2ecf20Sopenharmony_ci scnprintf(str + len, size - len, " Stream %d Found", 3188c2ecf20Sopenharmony_ci event->parameters); 3198c2ecf20Sopenharmony_ci break; 3208c2ecf20Sopenharmony_ci case DEPEVT_STREAMEVT_NOTFOUND: 3218c2ecf20Sopenharmony_ci default: 3228c2ecf20Sopenharmony_ci scnprintf(str + len, size - len, " Stream Not Found"); 3238c2ecf20Sopenharmony_ci break; 3248c2ecf20Sopenharmony_ci } 3258c2ecf20Sopenharmony_ci 3268c2ecf20Sopenharmony_ci break; 3278c2ecf20Sopenharmony_ci case DWC3_DEPEVT_EPCMDCMPLT: 3288c2ecf20Sopenharmony_ci scnprintf(str + len, size - len, "Endpoint Command Complete"); 3298c2ecf20Sopenharmony_ci break; 3308c2ecf20Sopenharmony_ci default: 3318c2ecf20Sopenharmony_ci scnprintf(str + len, size - len, "UNKNOWN"); 3328c2ecf20Sopenharmony_ci } 3338c2ecf20Sopenharmony_ci 3348c2ecf20Sopenharmony_ci return str; 3358c2ecf20Sopenharmony_ci} 3368c2ecf20Sopenharmony_ci 3378c2ecf20Sopenharmony_ci/** 3388c2ecf20Sopenharmony_ci * dwc3_gadget_event_type_string - return event name 3398c2ecf20Sopenharmony_ci * @event: the event code 3408c2ecf20Sopenharmony_ci */ 3418c2ecf20Sopenharmony_cistatic inline const char *dwc3_gadget_event_type_string(u8 event) 3428c2ecf20Sopenharmony_ci{ 3438c2ecf20Sopenharmony_ci switch (event) { 3448c2ecf20Sopenharmony_ci case DWC3_DEVICE_EVENT_DISCONNECT: 3458c2ecf20Sopenharmony_ci return "Disconnect"; 3468c2ecf20Sopenharmony_ci case DWC3_DEVICE_EVENT_RESET: 3478c2ecf20Sopenharmony_ci return "Reset"; 3488c2ecf20Sopenharmony_ci case DWC3_DEVICE_EVENT_CONNECT_DONE: 3498c2ecf20Sopenharmony_ci return "Connect Done"; 3508c2ecf20Sopenharmony_ci case DWC3_DEVICE_EVENT_LINK_STATUS_CHANGE: 3518c2ecf20Sopenharmony_ci return "Link Status Change"; 3528c2ecf20Sopenharmony_ci case DWC3_DEVICE_EVENT_WAKEUP: 3538c2ecf20Sopenharmony_ci return "Wake-Up"; 3548c2ecf20Sopenharmony_ci case DWC3_DEVICE_EVENT_HIBER_REQ: 3558c2ecf20Sopenharmony_ci return "Hibernation"; 3568c2ecf20Sopenharmony_ci case DWC3_DEVICE_EVENT_EOPF: 3578c2ecf20Sopenharmony_ci return "End of Periodic Frame"; 3588c2ecf20Sopenharmony_ci case DWC3_DEVICE_EVENT_SOF: 3598c2ecf20Sopenharmony_ci return "Start of Frame"; 3608c2ecf20Sopenharmony_ci case DWC3_DEVICE_EVENT_ERRATIC_ERROR: 3618c2ecf20Sopenharmony_ci return "Erratic Error"; 3628c2ecf20Sopenharmony_ci case DWC3_DEVICE_EVENT_CMD_CMPL: 3638c2ecf20Sopenharmony_ci return "Command Complete"; 3648c2ecf20Sopenharmony_ci case DWC3_DEVICE_EVENT_OVERFLOW: 3658c2ecf20Sopenharmony_ci return "Overflow"; 3668c2ecf20Sopenharmony_ci default: 3678c2ecf20Sopenharmony_ci return "UNKNOWN"; 3688c2ecf20Sopenharmony_ci } 3698c2ecf20Sopenharmony_ci} 3708c2ecf20Sopenharmony_ci 3718c2ecf20Sopenharmony_cistatic inline const char *dwc3_decode_event(char *str, size_t size, u32 event, 3728c2ecf20Sopenharmony_ci u32 ep0state) 3738c2ecf20Sopenharmony_ci{ 3748c2ecf20Sopenharmony_ci union dwc3_event evt; 3758c2ecf20Sopenharmony_ci 3768c2ecf20Sopenharmony_ci memcpy(&evt, &event, sizeof(event)); 3778c2ecf20Sopenharmony_ci 3788c2ecf20Sopenharmony_ci if (evt.type.is_devspec) 3798c2ecf20Sopenharmony_ci return dwc3_gadget_event_string(str, size, &evt.devt); 3808c2ecf20Sopenharmony_ci else 3818c2ecf20Sopenharmony_ci return dwc3_ep_event_string(str, size, &evt.depevt, ep0state); 3828c2ecf20Sopenharmony_ci} 3838c2ecf20Sopenharmony_ci 3848c2ecf20Sopenharmony_cistatic inline const char *dwc3_ep_cmd_status_string(int status) 3858c2ecf20Sopenharmony_ci{ 3868c2ecf20Sopenharmony_ci switch (status) { 3878c2ecf20Sopenharmony_ci case -ETIMEDOUT: 3888c2ecf20Sopenharmony_ci return "Timed Out"; 3898c2ecf20Sopenharmony_ci case 0: 3908c2ecf20Sopenharmony_ci return "Successful"; 3918c2ecf20Sopenharmony_ci case DEPEVT_TRANSFER_NO_RESOURCE: 3928c2ecf20Sopenharmony_ci return "No Resource"; 3938c2ecf20Sopenharmony_ci case DEPEVT_TRANSFER_BUS_EXPIRY: 3948c2ecf20Sopenharmony_ci return "Bus Expiry"; 3958c2ecf20Sopenharmony_ci default: 3968c2ecf20Sopenharmony_ci return "UNKNOWN"; 3978c2ecf20Sopenharmony_ci } 3988c2ecf20Sopenharmony_ci} 3998c2ecf20Sopenharmony_ci 4008c2ecf20Sopenharmony_cistatic inline const char *dwc3_gadget_generic_cmd_status_string(int status) 4018c2ecf20Sopenharmony_ci{ 4028c2ecf20Sopenharmony_ci switch (status) { 4038c2ecf20Sopenharmony_ci case -ETIMEDOUT: 4048c2ecf20Sopenharmony_ci return "Timed Out"; 4058c2ecf20Sopenharmony_ci case 0: 4068c2ecf20Sopenharmony_ci return "Successful"; 4078c2ecf20Sopenharmony_ci case 1: 4088c2ecf20Sopenharmony_ci return "Error"; 4098c2ecf20Sopenharmony_ci default: 4108c2ecf20Sopenharmony_ci return "UNKNOWN"; 4118c2ecf20Sopenharmony_ci } 4128c2ecf20Sopenharmony_ci} 4138c2ecf20Sopenharmony_ci 4148c2ecf20Sopenharmony_ci 4158c2ecf20Sopenharmony_ci#ifdef CONFIG_DEBUG_FS 4168c2ecf20Sopenharmony_ciextern void dwc3_debugfs_create_endpoint_dir(struct dwc3_ep *dep); 4178c2ecf20Sopenharmony_ciextern void dwc3_debugfs_init(struct dwc3 *d); 4188c2ecf20Sopenharmony_ciextern void dwc3_debugfs_exit(struct dwc3 *d); 4198c2ecf20Sopenharmony_ci#else 4208c2ecf20Sopenharmony_cistatic inline void dwc3_debugfs_create_endpoint_dir(struct dwc3_ep *dep) 4218c2ecf20Sopenharmony_ci{ } 4228c2ecf20Sopenharmony_cistatic inline void dwc3_debugfs_init(struct dwc3 *d) 4238c2ecf20Sopenharmony_ci{ } 4248c2ecf20Sopenharmony_cistatic inline void dwc3_debugfs_exit(struct dwc3 *d) 4258c2ecf20Sopenharmony_ci{ } 4268c2ecf20Sopenharmony_ci#endif 4278c2ecf20Sopenharmony_ci#endif /* __DWC3_DEBUG_H */ 428