drivers/gpu/drm/arm/display/komeda/komeda_event.c

Source file repositories/reference/linux-study-clean/drivers/gpu/drm/arm/display/komeda/komeda_event.c

File Facts

System
Linux kernel
Corpus path
drivers/gpu/drm/arm/display/komeda/komeda_event.c
Extension
.c
Size
4352 bytes
Lines
159
Domain
Driver Families
Bucket
drivers/gpu
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

struct komeda_str {
	char *str;
	u32 sz;
	u32 len;
};

/* return 0 on success,  < 0 on no space.
 */
__printf(2, 3)
static int komeda_sprintf(struct komeda_str *str, const char *fmt, ...)
{
	va_list args;
	int num, free_sz;
	int err;

	free_sz = str->sz - str->len - 1;
	if (free_sz <= 0)
		return -ENOSPC;

	va_start(args, fmt);

	num = vsnprintf(str->str + str->len, free_sz, fmt, args);

	va_end(args);

	if (num < free_sz) {
		str->len += num;
		err = 0;
	} else {
		str->len = str->sz - 1;
		err = -ENOSPC;
	}

	return err;
}

static void evt_sprintf(struct komeda_str *str, u64 evt, const char *msg)
{
	if (evt)
		komeda_sprintf(str, msg);
}

static void evt_str(struct komeda_str *str, u64 events)
{
	if (events == 0ULL) {
		komeda_sprintf(str, "None");
		return;
	}

	evt_sprintf(str, events & KOMEDA_EVENT_VSYNC, "VSYNC|");
	evt_sprintf(str, events & KOMEDA_EVENT_FLIP, "FLIP|");
	evt_sprintf(str, events & KOMEDA_EVENT_EOW, "EOW|");
	evt_sprintf(str, events & KOMEDA_EVENT_MODE, "OP-MODE|");

	evt_sprintf(str, events & KOMEDA_EVENT_URUN, "UNDERRUN|");
	evt_sprintf(str, events & KOMEDA_EVENT_OVR, "OVERRUN|");

	/* GLB error */
	evt_sprintf(str, events & KOMEDA_ERR_MERR, "MERR|");
	evt_sprintf(str, events & KOMEDA_ERR_FRAMETO, "FRAMETO|");

	/* DOU error */
	evt_sprintf(str, events & KOMEDA_ERR_DRIFTTO, "DRIFTTO|");
	evt_sprintf(str, events & KOMEDA_ERR_FRAMETO, "FRAMETO|");
	evt_sprintf(str, events & KOMEDA_ERR_TETO, "TETO|");
	evt_sprintf(str, events & KOMEDA_ERR_CSCE, "CSCE|");

	/* LPU errors or events */
	evt_sprintf(str, events & KOMEDA_EVENT_IBSY, "IBSY|");
	evt_sprintf(str, events & KOMEDA_EVENT_EMPTY, "EMPTY|");
	evt_sprintf(str, events & KOMEDA_EVENT_FULL, "FULL|");
	evt_sprintf(str, events & KOMEDA_ERR_AXIE, "AXIE|");
	evt_sprintf(str, events & KOMEDA_ERR_ACE0, "ACE0|");
	evt_sprintf(str, events & KOMEDA_ERR_ACE1, "ACE1|");
	evt_sprintf(str, events & KOMEDA_ERR_ACE2, "ACE2|");
	evt_sprintf(str, events & KOMEDA_ERR_ACE3, "ACE3|");

	/* LPU TBU errors*/
	evt_sprintf(str, events & KOMEDA_ERR_TCF, "TCF|");
	evt_sprintf(str, events & KOMEDA_ERR_TTNG, "TTNG|");
	evt_sprintf(str, events & KOMEDA_ERR_TITR, "TITR|");
	evt_sprintf(str, events & KOMEDA_ERR_TEMR, "TEMR|");
	evt_sprintf(str, events & KOMEDA_ERR_TTF, "TTF|");

	/* CU errors*/
	evt_sprintf(str, events & KOMEDA_ERR_CPE, "COPROC|");
	evt_sprintf(str, events & KOMEDA_ERR_ZME, "ZME|");
	evt_sprintf(str, events & KOMEDA_ERR_CFGE, "CFGE|");
	evt_sprintf(str, events & KOMEDA_ERR_TEMR, "TEMR|");

Annotation

Implementation Notes