drivers/usb/gadget/udc/cdns2/cdns2-debug.h

Source file repositories/reference/linux-study-clean/drivers/usb/gadget/udc/cdns2/cdns2-debug.h

File Facts

System
Linux kernel
Corpus path
drivers/usb/gadget/udc/cdns2/cdns2-debug.h
Extension
.h
Size
5534 bytes
Lines
204
Domain
Driver Families
Bucket
drivers/usb
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

#ifndef __LINUX_CDNS2_DEBUG
#define __LINUX_CDNS2_DEBUG

static inline const char *cdns2_decode_usb_irq(char *str, size_t size,
					       u8 usb_irq, u8 ext_irq)
{
	int ret;

	ret = scnprintf(str, size, "usbirq: 0x%02x - ", usb_irq);

	if (usb_irq & USBIRQ_SOF)
		ret += scnprintf(str + ret, size - ret, "SOF ");
	if (usb_irq & USBIRQ_SUTOK)
		ret += scnprintf(str + ret, size - ret, "SUTOK ");
	if (usb_irq & USBIRQ_SUDAV)
		ret += scnprintf(str + ret, size - ret, "SETUP ");
	if (usb_irq & USBIRQ_SUSPEND)
		ret += scnprintf(str + ret, size - ret, "Suspend ");
	if (usb_irq & USBIRQ_URESET)
		ret += scnprintf(str + ret, size - ret, "Reset ");
	if (usb_irq & USBIRQ_HSPEED)
		ret += scnprintf(str + ret, size - ret, "HS ");
	if (usb_irq & USBIRQ_LPM)
		ret += scnprintf(str + ret, size - ret, "LPM ");

	ret += scnprintf(str + ret, size - ret, ", EXT: 0x%02x - ", ext_irq);

	if (ext_irq & EXTIRQ_WAKEUP)
		ret += scnprintf(str + ret, size - ret, "Wakeup ");
	if (ext_irq & EXTIRQ_VBUSFAULT_FALL)
		ret += scnprintf(str + ret, size - ret, "VBUS_FALL ");
	if (ext_irq & EXTIRQ_VBUSFAULT_RISE)
		ret += scnprintf(str + ret, size - ret, "VBUS_RISE ");

	if (ret == size - 1)
		pr_info("CDNS2: buffer may be truncated.\n");

	return str;
}

static inline const char *cdns2_decode_dma_irq(char *str, size_t size,
					       u32 ep_ists, u32 ep_sts,
					       const char *ep_name)
{
	int ret;

	ret = scnprintf(str, size, "ISTS: %08x, %s: %08x ",
			ep_ists, ep_name, ep_sts);

	if (ep_sts & DMA_EP_STS_IOC)
		ret += scnprintf(str + ret, size - ret, "IOC ");
	if (ep_sts & DMA_EP_STS_ISP)
		ret += scnprintf(str + ret, size - ret, "ISP ");
	if (ep_sts & DMA_EP_STS_DESCMIS)
		ret += scnprintf(str + ret, size - ret, "DESCMIS ");
	if (ep_sts & DMA_EP_STS_TRBERR)
		ret += scnprintf(str + ret, size - ret, "TRBERR ");
	if (ep_sts & DMA_EP_STS_OUTSMM)
		ret += scnprintf(str + ret, size - ret, "OUTSMM ");
	if (ep_sts & DMA_EP_STS_ISOERR)
		ret += scnprintf(str + ret, size - ret, "ISOERR ");
	if (ep_sts & DMA_EP_STS_DBUSY)
		ret += scnprintf(str + ret, size - ret, "DBUSY ");
	if (DMA_EP_STS_CCS(ep_sts))
		ret += scnprintf(str + ret, size - ret, "CCS ");

	if (ret == size - 1)
		pr_info("CDNS2: buffer may be truncated.\n");

	return str;
}

static inline const char *cdns2_decode_epx_irq(char *str, size_t size,
					       char *ep_name, u32 ep_ists,
					       u32 ep_sts)
{
	return cdns2_decode_dma_irq(str, size, ep_ists, ep_sts, ep_name);
}

static inline const char *cdns2_decode_ep0_irq(char *str, size_t size,
					       u32 ep_ists, u32 ep_sts,
					       int dir)
{
	return cdns2_decode_dma_irq(str, size, ep_ists, ep_sts,
				    dir ? "ep0IN" : "ep0OUT");
}

static inline const char *cdns2_raw_ring(struct cdns2_endpoint *pep,
					 struct cdns2_trb *trbs,
					 char *str, size_t size)

Annotation

Implementation Notes