drivers/firewire/self-id-sequence-helper-test.c

Source file repositories/reference/linux-study-clean/drivers/firewire/self-id-sequence-helper-test.c

File Facts

System
Linux kernel
Corpus path
drivers/firewire/self-id-sequence-helper-test.c
Extension
.c
Size
5907 bytes
Lines
153
Domain
Driver Families
Bucket
drivers/firewire
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-or-later
//
// self-id-sequence-helper-test.c - An application of Kunit to test helpers of self ID sequence.
//
// Copyright (c) 2024 Takashi Sakamoto

#include <kunit/test.h>

#include "phy-packet-definitions.h"

static void test_self_id_sequence_enumerator_valid(struct kunit *test)
{
	static const u32 valid_sequences[] = {
		0x00000000,
		0x00000001, 0x00800000,
		0x00000001, 0x00800001, 0x00900000,
		0x00000000,
	};
	struct self_id_sequence_enumerator enumerator;
	const u32 *entry;
	unsigned int quadlet_count;

	enumerator.cursor = valid_sequences;
	enumerator.quadlet_count = ARRAY_SIZE(valid_sequences);

	entry = self_id_sequence_enumerator_next(&enumerator, &quadlet_count);
	KUNIT_EXPECT_PTR_EQ(test, entry, &valid_sequences[0]);
	KUNIT_EXPECT_EQ(test, quadlet_count, 1);
	KUNIT_EXPECT_EQ(test, enumerator.quadlet_count, 6);

	entry = self_id_sequence_enumerator_next(&enumerator, &quadlet_count);
	KUNIT_EXPECT_PTR_EQ(test, entry, &valid_sequences[1]);
	KUNIT_EXPECT_EQ(test, quadlet_count, 2);
	KUNIT_EXPECT_EQ(test, enumerator.quadlet_count, 4);

	entry = self_id_sequence_enumerator_next(&enumerator, &quadlet_count);
	KUNIT_EXPECT_PTR_EQ(test, entry, &valid_sequences[3]);
	KUNIT_EXPECT_EQ(test, quadlet_count, 3);
	KUNIT_EXPECT_EQ(test, enumerator.quadlet_count, 1);

	entry = self_id_sequence_enumerator_next(&enumerator, &quadlet_count);
	KUNIT_EXPECT_PTR_EQ(test, entry, &valid_sequences[6]);
	KUNIT_EXPECT_EQ(test, quadlet_count, 1);
	KUNIT_EXPECT_EQ(test, enumerator.quadlet_count, 0);

	entry = self_id_sequence_enumerator_next(&enumerator, &quadlet_count);
	KUNIT_EXPECT_EQ(test, PTR_ERR(entry), -ENODATA);
}

static void test_self_id_sequence_enumerator_invalid(struct kunit *test)
{
	static const u32 invalid_sequences[] = {
		0x00000001,
	};
	struct self_id_sequence_enumerator enumerator;
	const u32 *entry;
	unsigned int count;

	enumerator.cursor = invalid_sequences;
	enumerator.quadlet_count = ARRAY_SIZE(invalid_sequences);

	entry = self_id_sequence_enumerator_next(&enumerator, &count);
	KUNIT_EXPECT_EQ(test, PTR_ERR(entry), -EPROTO);
}

static void test_self_id_sequence_get_port_status(struct kunit *test)
{
	static const u32 expected[] = {
		0x000000e5,
		0x00839e79,
		0x0091e79d,
		0x00a279e4,
	};
	u32 quadlets [] = {
		0x00000001,
		0x00800001,
		0x00900001,
		0x00a00000,
	};
	enum phy_packet_self_id_port_status port_status[28];
	unsigned int port_capacity;
	unsigned int port_index;

	KUNIT_ASSERT_EQ(test, ARRAY_SIZE(expected), ARRAY_SIZE(quadlets));

	// With an extra port.
	port_capacity = self_id_sequence_get_port_capacity(ARRAY_SIZE(expected)) + 1;
	KUNIT_ASSERT_EQ(test, port_capacity, ARRAY_SIZE(port_status));

	for (port_index = 0; port_index < port_capacity; ++port_index) {

Annotation

Implementation Notes