162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * debug.h - DesignWare USB3 DRD Controller Debug Header 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 2010-2011 Texas Instruments Incorporated - https://www.ti.com 662306a36Sopenharmony_ci * 762306a36Sopenharmony_ci * Authors: Felipe Balbi <balbi@ti.com>, 862306a36Sopenharmony_ci * Sebastian Andrzej Siewior <bigeasy@linutronix.de> 962306a36Sopenharmony_ci */ 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#ifndef __DWC3_DEBUG_H 1262306a36Sopenharmony_ci#define __DWC3_DEBUG_H 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci#include "core.h" 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci/** 1762306a36Sopenharmony_ci * dwc3_gadget_ep_cmd_string - returns endpoint command string 1862306a36Sopenharmony_ci * @cmd: command code 1962306a36Sopenharmony_ci */ 2062306a36Sopenharmony_cistatic inline const char * 2162306a36Sopenharmony_cidwc3_gadget_ep_cmd_string(u8 cmd) 2262306a36Sopenharmony_ci{ 2362306a36Sopenharmony_ci switch (cmd) { 2462306a36Sopenharmony_ci case DWC3_DEPCMD_DEPSTARTCFG: 2562306a36Sopenharmony_ci return "Start New Configuration"; 2662306a36Sopenharmony_ci case DWC3_DEPCMD_ENDTRANSFER: 2762306a36Sopenharmony_ci return "End Transfer"; 2862306a36Sopenharmony_ci case DWC3_DEPCMD_UPDATETRANSFER: 2962306a36Sopenharmony_ci return "Update Transfer"; 3062306a36Sopenharmony_ci case DWC3_DEPCMD_STARTTRANSFER: 3162306a36Sopenharmony_ci return "Start Transfer"; 3262306a36Sopenharmony_ci case DWC3_DEPCMD_CLEARSTALL: 3362306a36Sopenharmony_ci return "Clear Stall"; 3462306a36Sopenharmony_ci case DWC3_DEPCMD_SETSTALL: 3562306a36Sopenharmony_ci return "Set Stall"; 3662306a36Sopenharmony_ci case DWC3_DEPCMD_GETEPSTATE: 3762306a36Sopenharmony_ci return "Get Endpoint State"; 3862306a36Sopenharmony_ci case DWC3_DEPCMD_SETTRANSFRESOURCE: 3962306a36Sopenharmony_ci return "Set Endpoint Transfer Resource"; 4062306a36Sopenharmony_ci case DWC3_DEPCMD_SETEPCONFIG: 4162306a36Sopenharmony_ci return "Set Endpoint Configuration"; 4262306a36Sopenharmony_ci default: 4362306a36Sopenharmony_ci return "UNKNOWN command"; 4462306a36Sopenharmony_ci } 4562306a36Sopenharmony_ci} 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci/** 4862306a36Sopenharmony_ci * dwc3_gadget_generic_cmd_string - returns generic command string 4962306a36Sopenharmony_ci * @cmd: command code 5062306a36Sopenharmony_ci */ 5162306a36Sopenharmony_cistatic inline const char * 5262306a36Sopenharmony_cidwc3_gadget_generic_cmd_string(u8 cmd) 5362306a36Sopenharmony_ci{ 5462306a36Sopenharmony_ci switch (cmd) { 5562306a36Sopenharmony_ci case DWC3_DGCMD_SET_LMP: 5662306a36Sopenharmony_ci return "Set LMP"; 5762306a36Sopenharmony_ci case DWC3_DGCMD_SET_PERIODIC_PAR: 5862306a36Sopenharmony_ci return "Set Periodic Parameters"; 5962306a36Sopenharmony_ci case DWC3_DGCMD_XMIT_FUNCTION: 6062306a36Sopenharmony_ci return "Transmit Function Wake Device Notification"; 6162306a36Sopenharmony_ci case DWC3_DGCMD_SET_SCRATCHPAD_ADDR_LO: 6262306a36Sopenharmony_ci return "Set Scratchpad Buffer Array Address Lo"; 6362306a36Sopenharmony_ci case DWC3_DGCMD_SET_SCRATCHPAD_ADDR_HI: 6462306a36Sopenharmony_ci return "Set Scratchpad Buffer Array Address Hi"; 6562306a36Sopenharmony_ci case DWC3_DGCMD_SELECTED_FIFO_FLUSH: 6662306a36Sopenharmony_ci return "Selected FIFO Flush"; 6762306a36Sopenharmony_ci case DWC3_DGCMD_ALL_FIFO_FLUSH: 6862306a36Sopenharmony_ci return "All FIFO Flush"; 6962306a36Sopenharmony_ci case DWC3_DGCMD_SET_ENDPOINT_NRDY: 7062306a36Sopenharmony_ci return "Set Endpoint NRDY"; 7162306a36Sopenharmony_ci case DWC3_DGCMD_SET_ENDPOINT_PRIME: 7262306a36Sopenharmony_ci return "Set Endpoint Prime"; 7362306a36Sopenharmony_ci case DWC3_DGCMD_RUN_SOC_BUS_LOOPBACK: 7462306a36Sopenharmony_ci return "Run SoC Bus Loopback Test"; 7562306a36Sopenharmony_ci case DWC3_DGCMD_DEV_NOTIFICATION: 7662306a36Sopenharmony_ci return "Device Notification"; 7762306a36Sopenharmony_ci default: 7862306a36Sopenharmony_ci return "UNKNOWN"; 7962306a36Sopenharmony_ci } 8062306a36Sopenharmony_ci} 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_ci/** 8362306a36Sopenharmony_ci * dwc3_gadget_link_string - returns link name 8462306a36Sopenharmony_ci * @link_state: link state code 8562306a36Sopenharmony_ci */ 8662306a36Sopenharmony_cistatic inline const char * 8762306a36Sopenharmony_cidwc3_gadget_link_string(enum dwc3_link_state link_state) 8862306a36Sopenharmony_ci{ 8962306a36Sopenharmony_ci switch (link_state) { 9062306a36Sopenharmony_ci case DWC3_LINK_STATE_U0: 9162306a36Sopenharmony_ci return "U0"; 9262306a36Sopenharmony_ci case DWC3_LINK_STATE_U1: 9362306a36Sopenharmony_ci return "U1"; 9462306a36Sopenharmony_ci case DWC3_LINK_STATE_U2: 9562306a36Sopenharmony_ci return "U2"; 9662306a36Sopenharmony_ci case DWC3_LINK_STATE_U3: 9762306a36Sopenharmony_ci return "U3"; 9862306a36Sopenharmony_ci case DWC3_LINK_STATE_SS_DIS: 9962306a36Sopenharmony_ci return "SS.Disabled"; 10062306a36Sopenharmony_ci case DWC3_LINK_STATE_RX_DET: 10162306a36Sopenharmony_ci return "RX.Detect"; 10262306a36Sopenharmony_ci case DWC3_LINK_STATE_SS_INACT: 10362306a36Sopenharmony_ci return "SS.Inactive"; 10462306a36Sopenharmony_ci case DWC3_LINK_STATE_POLL: 10562306a36Sopenharmony_ci return "Polling"; 10662306a36Sopenharmony_ci case DWC3_LINK_STATE_RECOV: 10762306a36Sopenharmony_ci return "Recovery"; 10862306a36Sopenharmony_ci case DWC3_LINK_STATE_HRESET: 10962306a36Sopenharmony_ci return "Hot Reset"; 11062306a36Sopenharmony_ci case DWC3_LINK_STATE_CMPLY: 11162306a36Sopenharmony_ci return "Compliance"; 11262306a36Sopenharmony_ci case DWC3_LINK_STATE_LPBK: 11362306a36Sopenharmony_ci return "Loopback"; 11462306a36Sopenharmony_ci case DWC3_LINK_STATE_RESET: 11562306a36Sopenharmony_ci return "Reset"; 11662306a36Sopenharmony_ci case DWC3_LINK_STATE_RESUME: 11762306a36Sopenharmony_ci return "Resume"; 11862306a36Sopenharmony_ci default: 11962306a36Sopenharmony_ci return "UNKNOWN link state"; 12062306a36Sopenharmony_ci } 12162306a36Sopenharmony_ci} 12262306a36Sopenharmony_ci 12362306a36Sopenharmony_ci/** 12462306a36Sopenharmony_ci * dwc3_gadget_hs_link_string - returns highspeed and below link name 12562306a36Sopenharmony_ci * @link_state: link state code 12662306a36Sopenharmony_ci */ 12762306a36Sopenharmony_cistatic inline const char * 12862306a36Sopenharmony_cidwc3_gadget_hs_link_string(enum dwc3_link_state link_state) 12962306a36Sopenharmony_ci{ 13062306a36Sopenharmony_ci switch (link_state) { 13162306a36Sopenharmony_ci case DWC3_LINK_STATE_U0: 13262306a36Sopenharmony_ci return "On"; 13362306a36Sopenharmony_ci case DWC3_LINK_STATE_U2: 13462306a36Sopenharmony_ci return "Sleep"; 13562306a36Sopenharmony_ci case DWC3_LINK_STATE_U3: 13662306a36Sopenharmony_ci return "Suspend"; 13762306a36Sopenharmony_ci case DWC3_LINK_STATE_SS_DIS: 13862306a36Sopenharmony_ci return "Disconnected"; 13962306a36Sopenharmony_ci case DWC3_LINK_STATE_RX_DET: 14062306a36Sopenharmony_ci return "Early Suspend"; 14162306a36Sopenharmony_ci case DWC3_LINK_STATE_RECOV: 14262306a36Sopenharmony_ci return "Recovery"; 14362306a36Sopenharmony_ci case DWC3_LINK_STATE_RESET: 14462306a36Sopenharmony_ci return "Reset"; 14562306a36Sopenharmony_ci case DWC3_LINK_STATE_RESUME: 14662306a36Sopenharmony_ci return "Resume"; 14762306a36Sopenharmony_ci default: 14862306a36Sopenharmony_ci return "UNKNOWN link state"; 14962306a36Sopenharmony_ci } 15062306a36Sopenharmony_ci} 15162306a36Sopenharmony_ci 15262306a36Sopenharmony_ci/** 15362306a36Sopenharmony_ci * dwc3_trb_type_string - returns TRB type as a string 15462306a36Sopenharmony_ci * @type: the type of the TRB 15562306a36Sopenharmony_ci */ 15662306a36Sopenharmony_cistatic inline const char *dwc3_trb_type_string(unsigned int type) 15762306a36Sopenharmony_ci{ 15862306a36Sopenharmony_ci switch (type) { 15962306a36Sopenharmony_ci case DWC3_TRBCTL_NORMAL: 16062306a36Sopenharmony_ci return "normal"; 16162306a36Sopenharmony_ci case DWC3_TRBCTL_CONTROL_SETUP: 16262306a36Sopenharmony_ci return "setup"; 16362306a36Sopenharmony_ci case DWC3_TRBCTL_CONTROL_STATUS2: 16462306a36Sopenharmony_ci return "status2"; 16562306a36Sopenharmony_ci case DWC3_TRBCTL_CONTROL_STATUS3: 16662306a36Sopenharmony_ci return "status3"; 16762306a36Sopenharmony_ci case DWC3_TRBCTL_CONTROL_DATA: 16862306a36Sopenharmony_ci return "data"; 16962306a36Sopenharmony_ci case DWC3_TRBCTL_ISOCHRONOUS_FIRST: 17062306a36Sopenharmony_ci return "isoc-first"; 17162306a36Sopenharmony_ci case DWC3_TRBCTL_ISOCHRONOUS: 17262306a36Sopenharmony_ci return "isoc"; 17362306a36Sopenharmony_ci case DWC3_TRBCTL_LINK_TRB: 17462306a36Sopenharmony_ci return "link"; 17562306a36Sopenharmony_ci default: 17662306a36Sopenharmony_ci return "UNKNOWN"; 17762306a36Sopenharmony_ci } 17862306a36Sopenharmony_ci} 17962306a36Sopenharmony_ci 18062306a36Sopenharmony_cistatic inline const char *dwc3_ep0_state_string(enum dwc3_ep0_state state) 18162306a36Sopenharmony_ci{ 18262306a36Sopenharmony_ci switch (state) { 18362306a36Sopenharmony_ci case EP0_UNCONNECTED: 18462306a36Sopenharmony_ci return "Unconnected"; 18562306a36Sopenharmony_ci case EP0_SETUP_PHASE: 18662306a36Sopenharmony_ci return "Setup Phase"; 18762306a36Sopenharmony_ci case EP0_DATA_PHASE: 18862306a36Sopenharmony_ci return "Data Phase"; 18962306a36Sopenharmony_ci case EP0_STATUS_PHASE: 19062306a36Sopenharmony_ci return "Status Phase"; 19162306a36Sopenharmony_ci default: 19262306a36Sopenharmony_ci return "UNKNOWN"; 19362306a36Sopenharmony_ci } 19462306a36Sopenharmony_ci} 19562306a36Sopenharmony_ci 19662306a36Sopenharmony_ci/** 19762306a36Sopenharmony_ci * dwc3_gadget_event_string - returns event name 19862306a36Sopenharmony_ci * @event: the event code 19962306a36Sopenharmony_ci */ 20062306a36Sopenharmony_cistatic inline const char *dwc3_gadget_event_string(char *str, size_t size, 20162306a36Sopenharmony_ci const struct dwc3_event_devt *event) 20262306a36Sopenharmony_ci{ 20362306a36Sopenharmony_ci enum dwc3_link_state state = event->event_info & DWC3_LINK_STATE_MASK; 20462306a36Sopenharmony_ci 20562306a36Sopenharmony_ci switch (event->type) { 20662306a36Sopenharmony_ci case DWC3_DEVICE_EVENT_DISCONNECT: 20762306a36Sopenharmony_ci snprintf(str, size, "Disconnect: [%s]", 20862306a36Sopenharmony_ci dwc3_gadget_link_string(state)); 20962306a36Sopenharmony_ci break; 21062306a36Sopenharmony_ci case DWC3_DEVICE_EVENT_RESET: 21162306a36Sopenharmony_ci snprintf(str, size, "Reset [%s]", 21262306a36Sopenharmony_ci dwc3_gadget_link_string(state)); 21362306a36Sopenharmony_ci break; 21462306a36Sopenharmony_ci case DWC3_DEVICE_EVENT_CONNECT_DONE: 21562306a36Sopenharmony_ci snprintf(str, size, "Connection Done [%s]", 21662306a36Sopenharmony_ci dwc3_gadget_link_string(state)); 21762306a36Sopenharmony_ci break; 21862306a36Sopenharmony_ci case DWC3_DEVICE_EVENT_LINK_STATUS_CHANGE: 21962306a36Sopenharmony_ci snprintf(str, size, "Link Change [%s]", 22062306a36Sopenharmony_ci dwc3_gadget_link_string(state)); 22162306a36Sopenharmony_ci break; 22262306a36Sopenharmony_ci case DWC3_DEVICE_EVENT_WAKEUP: 22362306a36Sopenharmony_ci snprintf(str, size, "WakeUp [%s]", 22462306a36Sopenharmony_ci dwc3_gadget_link_string(state)); 22562306a36Sopenharmony_ci break; 22662306a36Sopenharmony_ci case DWC3_DEVICE_EVENT_SUSPEND: 22762306a36Sopenharmony_ci snprintf(str, size, "Suspend [%s]", 22862306a36Sopenharmony_ci dwc3_gadget_link_string(state)); 22962306a36Sopenharmony_ci break; 23062306a36Sopenharmony_ci case DWC3_DEVICE_EVENT_SOF: 23162306a36Sopenharmony_ci snprintf(str, size, "Start-Of-Frame [%s]", 23262306a36Sopenharmony_ci dwc3_gadget_link_string(state)); 23362306a36Sopenharmony_ci break; 23462306a36Sopenharmony_ci case DWC3_DEVICE_EVENT_ERRATIC_ERROR: 23562306a36Sopenharmony_ci snprintf(str, size, "Erratic Error [%s]", 23662306a36Sopenharmony_ci dwc3_gadget_link_string(state)); 23762306a36Sopenharmony_ci break; 23862306a36Sopenharmony_ci case DWC3_DEVICE_EVENT_CMD_CMPL: 23962306a36Sopenharmony_ci snprintf(str, size, "Command Complete [%s]", 24062306a36Sopenharmony_ci dwc3_gadget_link_string(state)); 24162306a36Sopenharmony_ci break; 24262306a36Sopenharmony_ci case DWC3_DEVICE_EVENT_OVERFLOW: 24362306a36Sopenharmony_ci snprintf(str, size, "Overflow [%s]", 24462306a36Sopenharmony_ci dwc3_gadget_link_string(state)); 24562306a36Sopenharmony_ci break; 24662306a36Sopenharmony_ci default: 24762306a36Sopenharmony_ci snprintf(str, size, "UNKNOWN"); 24862306a36Sopenharmony_ci } 24962306a36Sopenharmony_ci 25062306a36Sopenharmony_ci return str; 25162306a36Sopenharmony_ci} 25262306a36Sopenharmony_ci 25362306a36Sopenharmony_ci/** 25462306a36Sopenharmony_ci * dwc3_ep_event_string - returns event name 25562306a36Sopenharmony_ci * @event: then event code 25662306a36Sopenharmony_ci */ 25762306a36Sopenharmony_cistatic inline const char *dwc3_ep_event_string(char *str, size_t size, 25862306a36Sopenharmony_ci const struct dwc3_event_depevt *event, u32 ep0state) 25962306a36Sopenharmony_ci{ 26062306a36Sopenharmony_ci u8 epnum = event->endpoint_number; 26162306a36Sopenharmony_ci size_t len; 26262306a36Sopenharmony_ci int status; 26362306a36Sopenharmony_ci 26462306a36Sopenharmony_ci len = scnprintf(str, size, "ep%d%s: ", epnum >> 1, 26562306a36Sopenharmony_ci (epnum & 1) ? "in" : "out"); 26662306a36Sopenharmony_ci 26762306a36Sopenharmony_ci status = event->status; 26862306a36Sopenharmony_ci 26962306a36Sopenharmony_ci switch (event->endpoint_event) { 27062306a36Sopenharmony_ci case DWC3_DEPEVT_XFERCOMPLETE: 27162306a36Sopenharmony_ci len += scnprintf(str + len, size - len, 27262306a36Sopenharmony_ci "Transfer Complete (%c%c%c)", 27362306a36Sopenharmony_ci status & DEPEVT_STATUS_SHORT ? 'S' : 's', 27462306a36Sopenharmony_ci status & DEPEVT_STATUS_IOC ? 'I' : 'i', 27562306a36Sopenharmony_ci status & DEPEVT_STATUS_LST ? 'L' : 'l'); 27662306a36Sopenharmony_ci 27762306a36Sopenharmony_ci if (epnum <= 1) 27862306a36Sopenharmony_ci scnprintf(str + len, size - len, " [%s]", 27962306a36Sopenharmony_ci dwc3_ep0_state_string(ep0state)); 28062306a36Sopenharmony_ci break; 28162306a36Sopenharmony_ci case DWC3_DEPEVT_XFERINPROGRESS: 28262306a36Sopenharmony_ci scnprintf(str + len, size - len, 28362306a36Sopenharmony_ci "Transfer In Progress [%08x] (%c%c%c)", 28462306a36Sopenharmony_ci event->parameters, 28562306a36Sopenharmony_ci status & DEPEVT_STATUS_SHORT ? 'S' : 's', 28662306a36Sopenharmony_ci status & DEPEVT_STATUS_IOC ? 'I' : 'i', 28762306a36Sopenharmony_ci status & DEPEVT_STATUS_LST ? 'M' : 'm'); 28862306a36Sopenharmony_ci break; 28962306a36Sopenharmony_ci case DWC3_DEPEVT_XFERNOTREADY: 29062306a36Sopenharmony_ci len += scnprintf(str + len, size - len, 29162306a36Sopenharmony_ci "Transfer Not Ready [%08x]%s", 29262306a36Sopenharmony_ci event->parameters, 29362306a36Sopenharmony_ci status & DEPEVT_STATUS_TRANSFER_ACTIVE ? 29462306a36Sopenharmony_ci " (Active)" : " (Not Active)"); 29562306a36Sopenharmony_ci 29662306a36Sopenharmony_ci /* Control Endpoints */ 29762306a36Sopenharmony_ci if (epnum <= 1) { 29862306a36Sopenharmony_ci int phase = DEPEVT_STATUS_CONTROL_PHASE(event->status); 29962306a36Sopenharmony_ci 30062306a36Sopenharmony_ci switch (phase) { 30162306a36Sopenharmony_ci case DEPEVT_STATUS_CONTROL_DATA: 30262306a36Sopenharmony_ci scnprintf(str + len, size - len, 30362306a36Sopenharmony_ci " [Data Phase]"); 30462306a36Sopenharmony_ci break; 30562306a36Sopenharmony_ci case DEPEVT_STATUS_CONTROL_STATUS: 30662306a36Sopenharmony_ci scnprintf(str + len, size - len, 30762306a36Sopenharmony_ci " [Status Phase]"); 30862306a36Sopenharmony_ci } 30962306a36Sopenharmony_ci } 31062306a36Sopenharmony_ci break; 31162306a36Sopenharmony_ci case DWC3_DEPEVT_RXTXFIFOEVT: 31262306a36Sopenharmony_ci scnprintf(str + len, size - len, "FIFO"); 31362306a36Sopenharmony_ci break; 31462306a36Sopenharmony_ci case DWC3_DEPEVT_STREAMEVT: 31562306a36Sopenharmony_ci status = event->status; 31662306a36Sopenharmony_ci 31762306a36Sopenharmony_ci switch (status) { 31862306a36Sopenharmony_ci case DEPEVT_STREAMEVT_FOUND: 31962306a36Sopenharmony_ci scnprintf(str + len, size - len, " Stream %d Found", 32062306a36Sopenharmony_ci event->parameters); 32162306a36Sopenharmony_ci break; 32262306a36Sopenharmony_ci case DEPEVT_STREAMEVT_NOTFOUND: 32362306a36Sopenharmony_ci default: 32462306a36Sopenharmony_ci scnprintf(str + len, size - len, " Stream Not Found"); 32562306a36Sopenharmony_ci break; 32662306a36Sopenharmony_ci } 32762306a36Sopenharmony_ci 32862306a36Sopenharmony_ci break; 32962306a36Sopenharmony_ci case DWC3_DEPEVT_EPCMDCMPLT: 33062306a36Sopenharmony_ci scnprintf(str + len, size - len, "Endpoint Command Complete"); 33162306a36Sopenharmony_ci break; 33262306a36Sopenharmony_ci default: 33362306a36Sopenharmony_ci scnprintf(str + len, size - len, "UNKNOWN"); 33462306a36Sopenharmony_ci } 33562306a36Sopenharmony_ci 33662306a36Sopenharmony_ci return str; 33762306a36Sopenharmony_ci} 33862306a36Sopenharmony_ci 33962306a36Sopenharmony_ci/** 34062306a36Sopenharmony_ci * dwc3_gadget_event_type_string - return event name 34162306a36Sopenharmony_ci * @event: the event code 34262306a36Sopenharmony_ci */ 34362306a36Sopenharmony_cistatic inline const char *dwc3_gadget_event_type_string(u8 event) 34462306a36Sopenharmony_ci{ 34562306a36Sopenharmony_ci switch (event) { 34662306a36Sopenharmony_ci case DWC3_DEVICE_EVENT_DISCONNECT: 34762306a36Sopenharmony_ci return "Disconnect"; 34862306a36Sopenharmony_ci case DWC3_DEVICE_EVENT_RESET: 34962306a36Sopenharmony_ci return "Reset"; 35062306a36Sopenharmony_ci case DWC3_DEVICE_EVENT_CONNECT_DONE: 35162306a36Sopenharmony_ci return "Connect Done"; 35262306a36Sopenharmony_ci case DWC3_DEVICE_EVENT_LINK_STATUS_CHANGE: 35362306a36Sopenharmony_ci return "Link Status Change"; 35462306a36Sopenharmony_ci case DWC3_DEVICE_EVENT_WAKEUP: 35562306a36Sopenharmony_ci return "Wake-Up"; 35662306a36Sopenharmony_ci case DWC3_DEVICE_EVENT_HIBER_REQ: 35762306a36Sopenharmony_ci return "Hibernation"; 35862306a36Sopenharmony_ci case DWC3_DEVICE_EVENT_SUSPEND: 35962306a36Sopenharmony_ci return "Suspend"; 36062306a36Sopenharmony_ci case DWC3_DEVICE_EVENT_SOF: 36162306a36Sopenharmony_ci return "Start of Frame"; 36262306a36Sopenharmony_ci case DWC3_DEVICE_EVENT_ERRATIC_ERROR: 36362306a36Sopenharmony_ci return "Erratic Error"; 36462306a36Sopenharmony_ci case DWC3_DEVICE_EVENT_CMD_CMPL: 36562306a36Sopenharmony_ci return "Command Complete"; 36662306a36Sopenharmony_ci case DWC3_DEVICE_EVENT_OVERFLOW: 36762306a36Sopenharmony_ci return "Overflow"; 36862306a36Sopenharmony_ci default: 36962306a36Sopenharmony_ci return "UNKNOWN"; 37062306a36Sopenharmony_ci } 37162306a36Sopenharmony_ci} 37262306a36Sopenharmony_ci 37362306a36Sopenharmony_cistatic inline const char *dwc3_decode_event(char *str, size_t size, u32 event, 37462306a36Sopenharmony_ci u32 ep0state) 37562306a36Sopenharmony_ci{ 37662306a36Sopenharmony_ci union dwc3_event evt; 37762306a36Sopenharmony_ci 37862306a36Sopenharmony_ci memcpy(&evt, &event, sizeof(event)); 37962306a36Sopenharmony_ci 38062306a36Sopenharmony_ci if (evt.type.is_devspec) 38162306a36Sopenharmony_ci return dwc3_gadget_event_string(str, size, &evt.devt); 38262306a36Sopenharmony_ci else 38362306a36Sopenharmony_ci return dwc3_ep_event_string(str, size, &evt.depevt, ep0state); 38462306a36Sopenharmony_ci} 38562306a36Sopenharmony_ci 38662306a36Sopenharmony_cistatic inline const char *dwc3_ep_cmd_status_string(int status) 38762306a36Sopenharmony_ci{ 38862306a36Sopenharmony_ci switch (status) { 38962306a36Sopenharmony_ci case -ETIMEDOUT: 39062306a36Sopenharmony_ci return "Timed Out"; 39162306a36Sopenharmony_ci case 0: 39262306a36Sopenharmony_ci return "Successful"; 39362306a36Sopenharmony_ci case DEPEVT_TRANSFER_NO_RESOURCE: 39462306a36Sopenharmony_ci return "No Resource"; 39562306a36Sopenharmony_ci case DEPEVT_TRANSFER_BUS_EXPIRY: 39662306a36Sopenharmony_ci return "Bus Expiry"; 39762306a36Sopenharmony_ci default: 39862306a36Sopenharmony_ci return "UNKNOWN"; 39962306a36Sopenharmony_ci } 40062306a36Sopenharmony_ci} 40162306a36Sopenharmony_ci 40262306a36Sopenharmony_cistatic inline const char *dwc3_gadget_generic_cmd_status_string(int status) 40362306a36Sopenharmony_ci{ 40462306a36Sopenharmony_ci switch (status) { 40562306a36Sopenharmony_ci case -ETIMEDOUT: 40662306a36Sopenharmony_ci return "Timed Out"; 40762306a36Sopenharmony_ci case 0: 40862306a36Sopenharmony_ci return "Successful"; 40962306a36Sopenharmony_ci case 1: 41062306a36Sopenharmony_ci return "Error"; 41162306a36Sopenharmony_ci default: 41262306a36Sopenharmony_ci return "UNKNOWN"; 41362306a36Sopenharmony_ci } 41462306a36Sopenharmony_ci} 41562306a36Sopenharmony_ci 41662306a36Sopenharmony_ci 41762306a36Sopenharmony_ci#ifdef CONFIG_DEBUG_FS 41862306a36Sopenharmony_ciextern void dwc3_debugfs_create_endpoint_dir(struct dwc3_ep *dep); 41962306a36Sopenharmony_ciextern void dwc3_debugfs_remove_endpoint_dir(struct dwc3_ep *dep); 42062306a36Sopenharmony_ciextern void dwc3_debugfs_init(struct dwc3 *d); 42162306a36Sopenharmony_ciextern void dwc3_debugfs_exit(struct dwc3 *d); 42262306a36Sopenharmony_ci#else 42362306a36Sopenharmony_cistatic inline void dwc3_debugfs_create_endpoint_dir(struct dwc3_ep *dep) 42462306a36Sopenharmony_ci{ } 42562306a36Sopenharmony_cistatic inline void dwc3_debugfs_remove_endpoint_dir(struct dwc3_ep *dep) 42662306a36Sopenharmony_ci{ } 42762306a36Sopenharmony_cistatic inline void dwc3_debugfs_init(struct dwc3 *d) 42862306a36Sopenharmony_ci{ } 42962306a36Sopenharmony_cistatic inline void dwc3_debugfs_exit(struct dwc3 *d) 43062306a36Sopenharmony_ci{ } 43162306a36Sopenharmony_ci#endif 43262306a36Sopenharmony_ci#endif /* __DWC3_DEBUG_H */ 433