drivers/gpu/drm/xe/tests/xe_args_test.c

Source file repositories/reference/linux-study-clean/drivers/gpu/drm/xe/tests/xe_args_test.c

File Facts

System
Linux kernel
Corpus path
drivers/gpu/drm/xe/tests/xe_args_test.c
Extension
.c
Size
6982 bytes
Lines
276
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

// SPDX-License-Identifier: GPL-2.0
/*
 * Copyright © 2024 Intel Corporation
 */

#include <kunit/test.h>

#include "xe_args.h"

static void call_args_example(struct kunit *test)
{
#define foo	X, Y, Z, Q
#define bar	COUNT_ARGS(foo)
#define buz	CALL_ARGS(COUNT_ARGS, foo)

	KUNIT_EXPECT_EQ(test, bar, 1);
	KUNIT_EXPECT_EQ(test, buz, 4);

#undef foo
#undef bar
#undef buz
}

static void drop_first_arg_example(struct kunit *test)
{
#define foo	X, Y, Z, Q
#define bar	CALL_ARGS(COUNT_ARGS, DROP_FIRST_ARG(foo))

	KUNIT_EXPECT_EQ(test, bar, 3);

#undef foo
#undef bar
}

static void first_arg_example(struct kunit *test)
{
	int X = 1;

#define foo	X, Y, Z, Q
#define bar	FIRST_ARG(foo)

	KUNIT_EXPECT_EQ(test, bar, X);
	KUNIT_EXPECT_STREQ(test, __stringify(bar), "X");

#undef foo
#undef bar
}

static void last_arg_example(struct kunit *test)
{
	int Q = 1;

#define foo	X, Y, Z, Q
#define bar	LAST_ARG(foo)

	KUNIT_EXPECT_EQ(test, bar, Q);
	KUNIT_EXPECT_STREQ(test, __stringify(bar), "Q");

#undef foo
#undef bar
}

static void pick_arg_example(struct kunit *test)
{
	int Y = 1, Z = 2;

#define foo	X, Y, Z, Q
#define bar	PICK_ARG(2, foo)
#define buz	PICK_ARG3(foo)

	KUNIT_EXPECT_EQ(test, bar, Y);
	KUNIT_EXPECT_STREQ(test, __stringify(bar), "Y");
	KUNIT_EXPECT_EQ(test, buz, Z);
	KUNIT_EXPECT_STREQ(test, __stringify(buz), "Z");

#undef foo
#undef bar
#undef buz
}

static void if_args_example(struct kunit *test)
{
	enum { Z = 1, Q };

#define foo	X, Y
#define bar	IF_ARGS(Z, Q, foo)
#define buz	IF_ARGS(Z, Q, DROP_FIRST_ARG(FIRST_ARG(foo)))

	KUNIT_EXPECT_EQ(test, bar, Z);
	KUNIT_EXPECT_EQ(test, buz, Q);

Annotation

Implementation Notes