Skip to content

Commit 1c8506d

Browse files
committed
firewire: test: add test of device attributes for simple AV/C device
At present, core function can handle node which has configuration ROM similar to standard AV/C device somehow. The standard layout of configuration ROM is described in the following document. - Configuration ROM for AV/C Devices 1.0 (Dec. 12, 2000, 1394 Trading Association) This commit adds a KUnit test for the above case. The following output is the parse result for the hard-coded data, by config-rom-pretty-printer in linux-firewire-utils (https://git.kernel.org/pub/scm/utils/ieee1394/linux-firewire-utils.git/). $ config-rom-pretty-printer < /tmp/rom.img ROM header and bus information block ----------------------------------------------------------------- 1024 0404eabf bus_info_length 4, crc_length 4, crc 60095 1028 31333934 bus_name "1394" 1032 e0646102 irmc 1, cmc 1, isc 1, bmc 0, cyc_clk_acc 100, max_rec 6 (128) 1036 ffffffff company_id ffffff | 1040 ffffffff device_id 1099511627775 | EUI-64 18446744073709551615 root directory ----------------------------------------------------------------- 1044 00063287 directory_length 6, crc 12935 1048 03ffffff vendor 1052 8100000a --> descriptor leaf at 1092 1056 17ffffff model 1060 8100000e --> descriptor leaf at 1116 1064 0c0083c0 node capabilities: per IEEE 1394 1068 d1000001 --> unit directory at 1072 unit directory at 1072 ----------------------------------------------------------------- 1072 0004442d directory_length 4, crc 17453 1076 1200a02d specifier id 1080 13010001 version 1084 17ffffff model 1088 81000007 --> descriptor leaf at 1116 descriptor leaf at 1092 ----------------------------------------------------------------- 1092 0005c915 leaf_length 5, crc 51477 1096 00000000 textual descriptor 1100 00000000 minimal ASCII 1104 56656e64 "Vend" 1108 6f72204e "or N" 1112 616d6500 "ame" descriptor leaf at 1116 ----------------------------------------------------------------- 1116 00057f16 leaf_length 5, crc 32534 1120 00000000 textual descriptor 1124 00000000 minimal ASCII 1128 4d6f6465 "Mode" 1132 6c204e61 "l Na" 1136 6d650000 "me" Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Takashi Sakamoto <[email protected]>
1 parent 1770d39 commit 1c8506d

File tree

1 file changed

+119
-0
lines changed

1 file changed

+119
-0
lines changed

drivers/firewire/device-attribute-test.c

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,126 @@
88

99
#include <kunit/test.h>
1010

11+
// Configuration ROM for AV/C Devices 1.0 (Dec. 12, 2000, 1394 Trading Association)
12+
// Annex C:Configuration ROM example(informative)
13+
// C.1 Simple AV/C device
14+
//
15+
// Copied from the documentation.
16+
static const u32 simple_avc_config_rom[] = {
17+
0x0404eabf,
18+
0x31333934,
19+
0xe0646102,
20+
0xffffffff,
21+
0xffffffff,
22+
0x00063287, // root directory.
23+
0x03ffffff,
24+
0x8100000a,
25+
0x17ffffff,
26+
0x8100000e,
27+
0x0c0083c0,
28+
0xd1000001,
29+
0x0004442d, // unit 0 directory.
30+
0x1200a02d,
31+
0x13010001,
32+
0x17ffffff,
33+
0x81000007,
34+
0x0005c915, // leaf for textual descriptor.
35+
0x00000000,
36+
0x00000000,
37+
0x56656e64,
38+
0x6f72204e,
39+
0x616d6500,
40+
0x00057f16, // leaf for textual descriptor.
41+
0x00000000,
42+
0x00000000,
43+
0x4d6f6465,
44+
0x6c204e61,
45+
0x6d650000,
46+
};
47+
48+
static void device_attr_simple_avc(struct kunit *test)
49+
{
50+
static const struct fw_device node = {
51+
.device = {
52+
.type = &fw_device_type,
53+
},
54+
.config_rom = simple_avc_config_rom,
55+
.config_rom_length = sizeof(simple_avc_config_rom),
56+
};
57+
static const struct fw_unit unit0 = {
58+
.device = {
59+
.type = &fw_unit_type,
60+
.parent = (struct device *)&node.device,
61+
},
62+
.directory = &simple_avc_config_rom[12],
63+
};
64+
struct device *node_dev = (struct device *)&node.device;
65+
struct device *unit0_dev = (struct device *)&unit0.device;
66+
static const int unit0_expected_ids[] = {0x00ffffff, 0x00ffffff, 0x0000a02d, 0x00010001};
67+
char *buf = kunit_kzalloc(test, PAGE_SIZE, GFP_KERNEL);
68+
int ids[4] = {0, 0, 0, 0};
69+
70+
// Ensure associations for node and unit devices.
71+
72+
KUNIT_ASSERT_TRUE(test, is_fw_device(node_dev));
73+
KUNIT_ASSERT_FALSE(test, is_fw_unit(node_dev));
74+
KUNIT_ASSERT_PTR_EQ(test, fw_device(node_dev), &node);
75+
76+
KUNIT_ASSERT_FALSE(test, is_fw_device(unit0_dev));
77+
KUNIT_ASSERT_TRUE(test, is_fw_unit(unit0_dev));
78+
KUNIT_ASSERT_PTR_EQ(test, fw_parent_device((&unit0)), &node);
79+
KUNIT_ASSERT_PTR_EQ(test, fw_unit(unit0_dev), &unit0);
80+
81+
// For entries in root directory.
82+
83+
// Vendor immediate entry is found.
84+
KUNIT_EXPECT_GT(test, show_immediate(node_dev, &config_rom_attributes[0].attr, buf), 0);
85+
KUNIT_EXPECT_STREQ(test, buf, "0xffffff\n");
86+
87+
// Model immediate entry is found.
88+
KUNIT_EXPECT_GT(test, show_immediate(node_dev, &config_rom_attributes[4].attr, buf), 0);
89+
KUNIT_EXPECT_STREQ(test, buf, "0xffffff\n");
90+
91+
// Descriptor leaf entry for vendor is found.
92+
KUNIT_EXPECT_GT(test, show_text_leaf(node_dev, &config_rom_attributes[5].attr, buf), 0);
93+
KUNIT_EXPECT_STREQ(test, buf, "Vendor Name\n");
94+
95+
// Descriptor leaf entry for model is found.
96+
KUNIT_EXPECT_GT(test, show_text_leaf(node_dev, &config_rom_attributes[6].attr, buf), 0);
97+
KUNIT_EXPECT_STREQ(test, buf, "Model Name\n");
98+
99+
// For entries in unit 0 directory.
100+
101+
// Vendor immediate entry is not found.
102+
KUNIT_EXPECT_LT(test, show_immediate(unit0_dev, &config_rom_attributes[0].attr, buf), 0);
103+
104+
// Model immediate entry is found.
105+
KUNIT_EXPECT_GT(test, show_immediate(unit0_dev, &config_rom_attributes[4].attr, buf), 0);
106+
KUNIT_EXPECT_STREQ(test, buf, "0xffffff\n");
107+
108+
// Descriptor leaf entry for vendor is not found.
109+
KUNIT_EXPECT_LT(test, show_text_leaf(unit0_dev, &config_rom_attributes[5].attr, buf), 0);
110+
111+
// Descriptor leaf entry for model is found.
112+
KUNIT_EXPECT_GT(test, show_text_leaf(unit0_dev, &config_rom_attributes[6].attr, buf), 0);
113+
KUNIT_EXPECT_STREQ(test, buf, "Model Name\n");
114+
115+
// Specifier_ID immediate entry is found.
116+
KUNIT_EXPECT_GT(test, show_immediate(unit0_dev, &config_rom_attributes[2].attr, buf), 0);
117+
KUNIT_EXPECT_STREQ(test, buf, "0x00a02d\n");
118+
119+
// Version immediate entry is found.
120+
KUNIT_EXPECT_GT(test, show_immediate(unit0_dev, &config_rom_attributes[3].attr, buf), 0);
121+
KUNIT_EXPECT_STREQ(test, buf, "0x010001\n");
122+
123+
kunit_kfree(test, buf);
124+
125+
get_modalias_ids(&unit0, ids);
126+
KUNIT_EXPECT_MEMEQ(test, ids, unit0_expected_ids, sizeof(ids));
127+
}
128+
11129
static struct kunit_case device_attr_test_cases[] = {
130+
KUNIT_CASE(device_attr_simple_avc),
12131
{}
13132
};
14133

0 commit comments

Comments
 (0)