2023-12-25 07:23:00 +09:00
|
|
|
// SPDX-License-Identifier: GPL-2.0-only
|
|
|
|
//
|
|
|
|
// device-attribute-test.c - An application of Kunit to test implementation for device attributes.
|
|
|
|
//
|
|
|
|
// Copyright (c) 2023 Takashi Sakamoto
|
|
|
|
//
|
|
|
|
// This file can not be built independently since it is intentionally included in core-device.c.
|
|
|
|
|
|
|
|
#include <kunit/test.h>
|
|
|
|
|
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/20231221134849.603857-5-o-takashi@sakamocchi.jp
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
2023-12-25 07:23:00 +09:00
|
|
|
// Configuration ROM for AV/C Devices 1.0 (Dec. 12, 2000, 1394 Trading Association)
|
|
|
|
// Annex C:Configuration ROM example(informative)
|
|
|
|
// C.1 Simple AV/C device
|
|
|
|
//
|
|
|
|
// Copied from the documentation.
|
|
|
|
static const u32 simple_avc_config_rom[] = {
|
|
|
|
0x0404eabf,
|
|
|
|
0x31333934,
|
|
|
|
0xe0646102,
|
|
|
|
0xffffffff,
|
|
|
|
0xffffffff,
|
|
|
|
0x00063287, // root directory.
|
|
|
|
0x03ffffff,
|
|
|
|
0x8100000a,
|
|
|
|
0x17ffffff,
|
|
|
|
0x8100000e,
|
|
|
|
0x0c0083c0,
|
|
|
|
0xd1000001,
|
|
|
|
0x0004442d, // unit 0 directory.
|
|
|
|
0x1200a02d,
|
|
|
|
0x13010001,
|
|
|
|
0x17ffffff,
|
|
|
|
0x81000007,
|
|
|
|
0x0005c915, // leaf for textual descriptor.
|
|
|
|
0x00000000,
|
|
|
|
0x00000000,
|
|
|
|
0x56656e64,
|
|
|
|
0x6f72204e,
|
|
|
|
0x616d6500,
|
|
|
|
0x00057f16, // leaf for textual descriptor.
|
|
|
|
0x00000000,
|
|
|
|
0x00000000,
|
|
|
|
0x4d6f6465,
|
|
|
|
0x6c204e61,
|
|
|
|
0x6d650000,
|
|
|
|
};
|
|
|
|
|
firewire: test: add test of device attributes for legacy AV/C device
Some legacy devices have configuration ROM against standard AV/C device.
They have vendor directory to store model identifier. It is described in
annex of the following document.
- Configuration ROM for AV/C Devices 1.0 (Dec. 12, 2000, 1394 Trading
Association)
In the case, current implementation of core function does not detect the
model identifier, thus device attributes and modalias of unit have lack of
it. Another KUnit test is required for the case, and this commit is for
the purpose.
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/).
The data is written by my hand.
$ config-rom-pretty-printer < /tmp/rom.img
ROM header and bus information block
-----------------------------------------------------------------
1024 04199fe7 bus_info_length 4, crc_length 25, crc 40935
1028 31333934 bus_name "1394"
1032 e0644000 irmc 1, cmc 1, isc 1, bmc 0, cyc_clk_acc 100, max_rec 4 (32)
1036 00112233 company_id 001122 |
1040 44556677 device_id 220189779575 | EUI-64 4822678189205111
root directory
-----------------------------------------------------------------
1044 0005dace directory_length 5, crc 56014
1048 03012345 vendor
1052 0c0083c0 node capabilities: per IEEE 1394
1056 8d000009 --> eui-64 leaf at 1092
1060 d1000002 --> unit directory at 1068
1064 c3000004 --> vendor directory at 1080
unit directory at 1068
-----------------------------------------------------------------
1068 0002e107 directory_length 2, crc 57607
1072 12abcdef specifier id
1076 13543210 version
vendor directory at 1080
-----------------------------------------------------------------
1080 0002cb73 directory_length 2, crc 52083
1084 17fedcba model
1088 81000004 --> descriptor leaf at 1104
eui-64 leaf at 1092
-----------------------------------------------------------------
1092 00026dc1 leaf_length 2, crc 28097
1096 00112233 company_id 001122 |
1100 44556677 device_id 220189779575 | EUI-64 4822678189205111
descriptor leaf at 1104
-----------------------------------------------------------------
1104 00050e84 leaf_length 5, crc 3716
1108 00000000 textual descriptor
1112 00000000 minimal ASCII
1116 41424344 "ABCD"
1120 45464748 "EFGH"
1124 494a0000 "IJ"
Link: https://lore.kernel.org/r/20231221134849.603857-6-o-takashi@sakamocchi.jp
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
2023-12-25 07:23:00 +09:00
|
|
|
// Ibid.
|
|
|
|
// Annex A:Consideration for configuration ROM reader design (informative)
|
|
|
|
// A.1 Vendor directory
|
|
|
|
//
|
|
|
|
// Written by hand.
|
|
|
|
static const u32 legacy_avc_config_rom[] = {
|
|
|
|
0x04199fe7,
|
|
|
|
0x31333934,
|
|
|
|
0xe0644000,
|
|
|
|
0x00112233,
|
|
|
|
0x44556677,
|
|
|
|
0x0005dace, // root directory.
|
|
|
|
0x03012345,
|
|
|
|
0x0c0083c0,
|
|
|
|
0x8d000009,
|
|
|
|
0xd1000002,
|
|
|
|
0xc3000004,
|
|
|
|
0x0002e107, // unit 0 directory.
|
|
|
|
0x12abcdef,
|
|
|
|
0x13543210,
|
|
|
|
0x0002cb73, // vendor directory.
|
|
|
|
0x17fedcba,
|
|
|
|
0x81000004,
|
|
|
|
0x00026dc1, // leaf for EUI-64.
|
|
|
|
0x00112233,
|
|
|
|
0x44556677,
|
|
|
|
0x00050e84, // leaf for textual descriptor.
|
|
|
|
0x00000000,
|
|
|
|
0x00000000,
|
|
|
|
0x41424344,
|
|
|
|
0x45464748,
|
|
|
|
0x494a0000,
|
|
|
|
};
|
|
|
|
|
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/20231221134849.603857-5-o-takashi@sakamocchi.jp
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
2023-12-25 07:23:00 +09:00
|
|
|
static void device_attr_simple_avc(struct kunit *test)
|
|
|
|
{
|
|
|
|
static const struct fw_device node = {
|
|
|
|
.device = {
|
|
|
|
.type = &fw_device_type,
|
|
|
|
},
|
|
|
|
.config_rom = simple_avc_config_rom,
|
|
|
|
.config_rom_length = sizeof(simple_avc_config_rom),
|
|
|
|
};
|
|
|
|
static const struct fw_unit unit0 = {
|
|
|
|
.device = {
|
|
|
|
.type = &fw_unit_type,
|
|
|
|
.parent = (struct device *)&node.device,
|
|
|
|
},
|
|
|
|
.directory = &simple_avc_config_rom[12],
|
|
|
|
};
|
|
|
|
struct device *node_dev = (struct device *)&node.device;
|
|
|
|
struct device *unit0_dev = (struct device *)&unit0.device;
|
|
|
|
static const int unit0_expected_ids[] = {0x00ffffff, 0x00ffffff, 0x0000a02d, 0x00010001};
|
|
|
|
char *buf = kunit_kzalloc(test, PAGE_SIZE, GFP_KERNEL);
|
2025-01-10 16:42:37 +08:00
|
|
|
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, buf);
|
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/20231221134849.603857-5-o-takashi@sakamocchi.jp
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
2023-12-25 07:23:00 +09:00
|
|
|
int ids[4] = {0, 0, 0, 0};
|
|
|
|
|
|
|
|
// Ensure associations for node and unit devices.
|
|
|
|
|
|
|
|
KUNIT_ASSERT_TRUE(test, is_fw_device(node_dev));
|
|
|
|
KUNIT_ASSERT_FALSE(test, is_fw_unit(node_dev));
|
|
|
|
KUNIT_ASSERT_PTR_EQ(test, fw_device(node_dev), &node);
|
|
|
|
|
|
|
|
KUNIT_ASSERT_FALSE(test, is_fw_device(unit0_dev));
|
|
|
|
KUNIT_ASSERT_TRUE(test, is_fw_unit(unit0_dev));
|
|
|
|
KUNIT_ASSERT_PTR_EQ(test, fw_parent_device((&unit0)), &node);
|
|
|
|
KUNIT_ASSERT_PTR_EQ(test, fw_unit(unit0_dev), &unit0);
|
|
|
|
|
|
|
|
// For entries in root directory.
|
|
|
|
|
|
|
|
// Vendor immediate entry is found.
|
|
|
|
KUNIT_EXPECT_GT(test, show_immediate(node_dev, &config_rom_attributes[0].attr, buf), 0);
|
|
|
|
KUNIT_EXPECT_STREQ(test, buf, "0xffffff\n");
|
|
|
|
|
|
|
|
// Model immediate entry is found.
|
|
|
|
KUNIT_EXPECT_GT(test, show_immediate(node_dev, &config_rom_attributes[4].attr, buf), 0);
|
|
|
|
KUNIT_EXPECT_STREQ(test, buf, "0xffffff\n");
|
|
|
|
|
|
|
|
// Descriptor leaf entry for vendor is found.
|
|
|
|
KUNIT_EXPECT_GT(test, show_text_leaf(node_dev, &config_rom_attributes[5].attr, buf), 0);
|
|
|
|
KUNIT_EXPECT_STREQ(test, buf, "Vendor Name\n");
|
|
|
|
|
|
|
|
// Descriptor leaf entry for model is found.
|
|
|
|
KUNIT_EXPECT_GT(test, show_text_leaf(node_dev, &config_rom_attributes[6].attr, buf), 0);
|
|
|
|
KUNIT_EXPECT_STREQ(test, buf, "Model Name\n");
|
|
|
|
|
|
|
|
// For entries in unit 0 directory.
|
|
|
|
|
|
|
|
// Vendor immediate entry is not found.
|
|
|
|
KUNIT_EXPECT_LT(test, show_immediate(unit0_dev, &config_rom_attributes[0].attr, buf), 0);
|
|
|
|
|
|
|
|
// Model immediate entry is found.
|
|
|
|
KUNIT_EXPECT_GT(test, show_immediate(unit0_dev, &config_rom_attributes[4].attr, buf), 0);
|
|
|
|
KUNIT_EXPECT_STREQ(test, buf, "0xffffff\n");
|
|
|
|
|
|
|
|
// Descriptor leaf entry for vendor is not found.
|
|
|
|
KUNIT_EXPECT_LT(test, show_text_leaf(unit0_dev, &config_rom_attributes[5].attr, buf), 0);
|
|
|
|
|
|
|
|
// Descriptor leaf entry for model is found.
|
|
|
|
KUNIT_EXPECT_GT(test, show_text_leaf(unit0_dev, &config_rom_attributes[6].attr, buf), 0);
|
|
|
|
KUNIT_EXPECT_STREQ(test, buf, "Model Name\n");
|
|
|
|
|
|
|
|
// Specifier_ID immediate entry is found.
|
|
|
|
KUNIT_EXPECT_GT(test, show_immediate(unit0_dev, &config_rom_attributes[2].attr, buf), 0);
|
|
|
|
KUNIT_EXPECT_STREQ(test, buf, "0x00a02d\n");
|
|
|
|
|
|
|
|
// Version immediate entry is found.
|
|
|
|
KUNIT_EXPECT_GT(test, show_immediate(unit0_dev, &config_rom_attributes[3].attr, buf), 0);
|
|
|
|
KUNIT_EXPECT_STREQ(test, buf, "0x010001\n");
|
|
|
|
|
|
|
|
kunit_kfree(test, buf);
|
|
|
|
|
|
|
|
get_modalias_ids(&unit0, ids);
|
|
|
|
KUNIT_EXPECT_MEMEQ(test, ids, unit0_expected_ids, sizeof(ids));
|
|
|
|
}
|
|
|
|
|
firewire: test: add test of device attributes for legacy AV/C device
Some legacy devices have configuration ROM against standard AV/C device.
They have vendor directory to store model identifier. It is described in
annex of the following document.
- Configuration ROM for AV/C Devices 1.0 (Dec. 12, 2000, 1394 Trading
Association)
In the case, current implementation of core function does not detect the
model identifier, thus device attributes and modalias of unit have lack of
it. Another KUnit test is required for the case, and this commit is for
the purpose.
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/).
The data is written by my hand.
$ config-rom-pretty-printer < /tmp/rom.img
ROM header and bus information block
-----------------------------------------------------------------
1024 04199fe7 bus_info_length 4, crc_length 25, crc 40935
1028 31333934 bus_name "1394"
1032 e0644000 irmc 1, cmc 1, isc 1, bmc 0, cyc_clk_acc 100, max_rec 4 (32)
1036 00112233 company_id 001122 |
1040 44556677 device_id 220189779575 | EUI-64 4822678189205111
root directory
-----------------------------------------------------------------
1044 0005dace directory_length 5, crc 56014
1048 03012345 vendor
1052 0c0083c0 node capabilities: per IEEE 1394
1056 8d000009 --> eui-64 leaf at 1092
1060 d1000002 --> unit directory at 1068
1064 c3000004 --> vendor directory at 1080
unit directory at 1068
-----------------------------------------------------------------
1068 0002e107 directory_length 2, crc 57607
1072 12abcdef specifier id
1076 13543210 version
vendor directory at 1080
-----------------------------------------------------------------
1080 0002cb73 directory_length 2, crc 52083
1084 17fedcba model
1088 81000004 --> descriptor leaf at 1104
eui-64 leaf at 1092
-----------------------------------------------------------------
1092 00026dc1 leaf_length 2, crc 28097
1096 00112233 company_id 001122 |
1100 44556677 device_id 220189779575 | EUI-64 4822678189205111
descriptor leaf at 1104
-----------------------------------------------------------------
1104 00050e84 leaf_length 5, crc 3716
1108 00000000 textual descriptor
1112 00000000 minimal ASCII
1116 41424344 "ABCD"
1120 45464748 "EFGH"
1124 494a0000 "IJ"
Link: https://lore.kernel.org/r/20231221134849.603857-6-o-takashi@sakamocchi.jp
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
2023-12-25 07:23:00 +09:00
|
|
|
static void device_attr_legacy_avc(struct kunit *test)
|
|
|
|
{
|
|
|
|
static const struct fw_device node = {
|
|
|
|
.device = {
|
|
|
|
.type = &fw_device_type,
|
|
|
|
},
|
|
|
|
.config_rom = legacy_avc_config_rom,
|
|
|
|
.config_rom_length = sizeof(legacy_avc_config_rom),
|
|
|
|
};
|
|
|
|
static const struct fw_unit unit0 = {
|
|
|
|
.device = {
|
|
|
|
.type = &fw_unit_type,
|
|
|
|
.parent = (struct device *)&node.device,
|
|
|
|
},
|
|
|
|
.directory = &legacy_avc_config_rom[11],
|
|
|
|
};
|
|
|
|
struct device *node_dev = (struct device *)&node.device;
|
|
|
|
struct device *unit0_dev = (struct device *)&unit0.device;
|
2023-12-25 07:23:01 +09:00
|
|
|
static const int unit0_expected_ids[] = {0x00012345, 0x00fedcba, 0x00abcdef, 0x00543210};
|
firewire: test: add test of device attributes for legacy AV/C device
Some legacy devices have configuration ROM against standard AV/C device.
They have vendor directory to store model identifier. It is described in
annex of the following document.
- Configuration ROM for AV/C Devices 1.0 (Dec. 12, 2000, 1394 Trading
Association)
In the case, current implementation of core function does not detect the
model identifier, thus device attributes and modalias of unit have lack of
it. Another KUnit test is required for the case, and this commit is for
the purpose.
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/).
The data is written by my hand.
$ config-rom-pretty-printer < /tmp/rom.img
ROM header and bus information block
-----------------------------------------------------------------
1024 04199fe7 bus_info_length 4, crc_length 25, crc 40935
1028 31333934 bus_name "1394"
1032 e0644000 irmc 1, cmc 1, isc 1, bmc 0, cyc_clk_acc 100, max_rec 4 (32)
1036 00112233 company_id 001122 |
1040 44556677 device_id 220189779575 | EUI-64 4822678189205111
root directory
-----------------------------------------------------------------
1044 0005dace directory_length 5, crc 56014
1048 03012345 vendor
1052 0c0083c0 node capabilities: per IEEE 1394
1056 8d000009 --> eui-64 leaf at 1092
1060 d1000002 --> unit directory at 1068
1064 c3000004 --> vendor directory at 1080
unit directory at 1068
-----------------------------------------------------------------
1068 0002e107 directory_length 2, crc 57607
1072 12abcdef specifier id
1076 13543210 version
vendor directory at 1080
-----------------------------------------------------------------
1080 0002cb73 directory_length 2, crc 52083
1084 17fedcba model
1088 81000004 --> descriptor leaf at 1104
eui-64 leaf at 1092
-----------------------------------------------------------------
1092 00026dc1 leaf_length 2, crc 28097
1096 00112233 company_id 001122 |
1100 44556677 device_id 220189779575 | EUI-64 4822678189205111
descriptor leaf at 1104
-----------------------------------------------------------------
1104 00050e84 leaf_length 5, crc 3716
1108 00000000 textual descriptor
1112 00000000 minimal ASCII
1116 41424344 "ABCD"
1120 45464748 "EFGH"
1124 494a0000 "IJ"
Link: https://lore.kernel.org/r/20231221134849.603857-6-o-takashi@sakamocchi.jp
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
2023-12-25 07:23:00 +09:00
|
|
|
char *buf = kunit_kzalloc(test, PAGE_SIZE, GFP_KERNEL);
|
2025-01-10 16:42:37 +08:00
|
|
|
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, buf);
|
firewire: test: add test of device attributes for legacy AV/C device
Some legacy devices have configuration ROM against standard AV/C device.
They have vendor directory to store model identifier. It is described in
annex of the following document.
- Configuration ROM for AV/C Devices 1.0 (Dec. 12, 2000, 1394 Trading
Association)
In the case, current implementation of core function does not detect the
model identifier, thus device attributes and modalias of unit have lack of
it. Another KUnit test is required for the case, and this commit is for
the purpose.
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/).
The data is written by my hand.
$ config-rom-pretty-printer < /tmp/rom.img
ROM header and bus information block
-----------------------------------------------------------------
1024 04199fe7 bus_info_length 4, crc_length 25, crc 40935
1028 31333934 bus_name "1394"
1032 e0644000 irmc 1, cmc 1, isc 1, bmc 0, cyc_clk_acc 100, max_rec 4 (32)
1036 00112233 company_id 001122 |
1040 44556677 device_id 220189779575 | EUI-64 4822678189205111
root directory
-----------------------------------------------------------------
1044 0005dace directory_length 5, crc 56014
1048 03012345 vendor
1052 0c0083c0 node capabilities: per IEEE 1394
1056 8d000009 --> eui-64 leaf at 1092
1060 d1000002 --> unit directory at 1068
1064 c3000004 --> vendor directory at 1080
unit directory at 1068
-----------------------------------------------------------------
1068 0002e107 directory_length 2, crc 57607
1072 12abcdef specifier id
1076 13543210 version
vendor directory at 1080
-----------------------------------------------------------------
1080 0002cb73 directory_length 2, crc 52083
1084 17fedcba model
1088 81000004 --> descriptor leaf at 1104
eui-64 leaf at 1092
-----------------------------------------------------------------
1092 00026dc1 leaf_length 2, crc 28097
1096 00112233 company_id 001122 |
1100 44556677 device_id 220189779575 | EUI-64 4822678189205111
descriptor leaf at 1104
-----------------------------------------------------------------
1104 00050e84 leaf_length 5, crc 3716
1108 00000000 textual descriptor
1112 00000000 minimal ASCII
1116 41424344 "ABCD"
1120 45464748 "EFGH"
1124 494a0000 "IJ"
Link: https://lore.kernel.org/r/20231221134849.603857-6-o-takashi@sakamocchi.jp
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
2023-12-25 07:23:00 +09:00
|
|
|
int ids[4] = {0, 0, 0, 0};
|
|
|
|
|
|
|
|
// Ensure associations for node and unit devices.
|
|
|
|
|
|
|
|
KUNIT_ASSERT_TRUE(test, is_fw_device(node_dev));
|
|
|
|
KUNIT_ASSERT_FALSE(test, is_fw_unit(node_dev));
|
|
|
|
KUNIT_ASSERT_PTR_EQ(test, fw_device((node_dev)), &node);
|
|
|
|
|
|
|
|
KUNIT_ASSERT_FALSE(test, is_fw_device(unit0_dev));
|
|
|
|
KUNIT_ASSERT_TRUE(test, is_fw_unit(unit0_dev));
|
|
|
|
KUNIT_ASSERT_PTR_EQ(test, fw_parent_device((&unit0)), &node);
|
|
|
|
KUNIT_ASSERT_PTR_EQ(test, fw_unit(unit0_dev), &unit0);
|
|
|
|
|
|
|
|
// For entries in root directory.
|
|
|
|
|
|
|
|
// Vendor immediate entry is found.
|
|
|
|
KUNIT_EXPECT_GT(test, show_immediate(node_dev, &config_rom_attributes[0].attr, buf), 0);
|
|
|
|
KUNIT_EXPECT_STREQ(test, buf, "0x012345\n");
|
|
|
|
|
2023-12-25 07:23:01 +09:00
|
|
|
// Model immediate entry is found.
|
|
|
|
KUNIT_EXPECT_GT(test, show_immediate(node_dev, &config_rom_attributes[4].attr, buf), 0);
|
|
|
|
KUNIT_EXPECT_STREQ(test, buf, "0xfedcba\n");
|
firewire: test: add test of device attributes for legacy AV/C device
Some legacy devices have configuration ROM against standard AV/C device.
They have vendor directory to store model identifier. It is described in
annex of the following document.
- Configuration ROM for AV/C Devices 1.0 (Dec. 12, 2000, 1394 Trading
Association)
In the case, current implementation of core function does not detect the
model identifier, thus device attributes and modalias of unit have lack of
it. Another KUnit test is required for the case, and this commit is for
the purpose.
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/).
The data is written by my hand.
$ config-rom-pretty-printer < /tmp/rom.img
ROM header and bus information block
-----------------------------------------------------------------
1024 04199fe7 bus_info_length 4, crc_length 25, crc 40935
1028 31333934 bus_name "1394"
1032 e0644000 irmc 1, cmc 1, isc 1, bmc 0, cyc_clk_acc 100, max_rec 4 (32)
1036 00112233 company_id 001122 |
1040 44556677 device_id 220189779575 | EUI-64 4822678189205111
root directory
-----------------------------------------------------------------
1044 0005dace directory_length 5, crc 56014
1048 03012345 vendor
1052 0c0083c0 node capabilities: per IEEE 1394
1056 8d000009 --> eui-64 leaf at 1092
1060 d1000002 --> unit directory at 1068
1064 c3000004 --> vendor directory at 1080
unit directory at 1068
-----------------------------------------------------------------
1068 0002e107 directory_length 2, crc 57607
1072 12abcdef specifier id
1076 13543210 version
vendor directory at 1080
-----------------------------------------------------------------
1080 0002cb73 directory_length 2, crc 52083
1084 17fedcba model
1088 81000004 --> descriptor leaf at 1104
eui-64 leaf at 1092
-----------------------------------------------------------------
1092 00026dc1 leaf_length 2, crc 28097
1096 00112233 company_id 001122 |
1100 44556677 device_id 220189779575 | EUI-64 4822678189205111
descriptor leaf at 1104
-----------------------------------------------------------------
1104 00050e84 leaf_length 5, crc 3716
1108 00000000 textual descriptor
1112 00000000 minimal ASCII
1116 41424344 "ABCD"
1120 45464748 "EFGH"
1124 494a0000 "IJ"
Link: https://lore.kernel.org/r/20231221134849.603857-6-o-takashi@sakamocchi.jp
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
2023-12-25 07:23:00 +09:00
|
|
|
|
|
|
|
// Descriptor leaf entry for vendor is not found.
|
|
|
|
KUNIT_EXPECT_LT(test, show_text_leaf(node_dev, &config_rom_attributes[5].attr, buf), 0);
|
|
|
|
|
2023-12-25 07:23:01 +09:00
|
|
|
// Descriptor leaf entry for model is found.
|
|
|
|
KUNIT_EXPECT_GT(test, show_text_leaf(node_dev, &config_rom_attributes[6].attr, buf), 0);
|
|
|
|
KUNIT_EXPECT_STREQ(test, buf, "ABCDEFGHIJ\n");
|
firewire: test: add test of device attributes for legacy AV/C device
Some legacy devices have configuration ROM against standard AV/C device.
They have vendor directory to store model identifier. It is described in
annex of the following document.
- Configuration ROM for AV/C Devices 1.0 (Dec. 12, 2000, 1394 Trading
Association)
In the case, current implementation of core function does not detect the
model identifier, thus device attributes and modalias of unit have lack of
it. Another KUnit test is required for the case, and this commit is for
the purpose.
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/).
The data is written by my hand.
$ config-rom-pretty-printer < /tmp/rom.img
ROM header and bus information block
-----------------------------------------------------------------
1024 04199fe7 bus_info_length 4, crc_length 25, crc 40935
1028 31333934 bus_name "1394"
1032 e0644000 irmc 1, cmc 1, isc 1, bmc 0, cyc_clk_acc 100, max_rec 4 (32)
1036 00112233 company_id 001122 |
1040 44556677 device_id 220189779575 | EUI-64 4822678189205111
root directory
-----------------------------------------------------------------
1044 0005dace directory_length 5, crc 56014
1048 03012345 vendor
1052 0c0083c0 node capabilities: per IEEE 1394
1056 8d000009 --> eui-64 leaf at 1092
1060 d1000002 --> unit directory at 1068
1064 c3000004 --> vendor directory at 1080
unit directory at 1068
-----------------------------------------------------------------
1068 0002e107 directory_length 2, crc 57607
1072 12abcdef specifier id
1076 13543210 version
vendor directory at 1080
-----------------------------------------------------------------
1080 0002cb73 directory_length 2, crc 52083
1084 17fedcba model
1088 81000004 --> descriptor leaf at 1104
eui-64 leaf at 1092
-----------------------------------------------------------------
1092 00026dc1 leaf_length 2, crc 28097
1096 00112233 company_id 001122 |
1100 44556677 device_id 220189779575 | EUI-64 4822678189205111
descriptor leaf at 1104
-----------------------------------------------------------------
1104 00050e84 leaf_length 5, crc 3716
1108 00000000 textual descriptor
1112 00000000 minimal ASCII
1116 41424344 "ABCD"
1120 45464748 "EFGH"
1124 494a0000 "IJ"
Link: https://lore.kernel.org/r/20231221134849.603857-6-o-takashi@sakamocchi.jp
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
2023-12-25 07:23:00 +09:00
|
|
|
|
|
|
|
// For entries in unit 0 directory.
|
|
|
|
|
|
|
|
// Vendor immediate entry is not found.
|
|
|
|
KUNIT_EXPECT_LT(test, show_immediate(unit0_dev, &config_rom_attributes[0].attr, buf), 0);
|
|
|
|
|
|
|
|
// Model immediate entry is not found.
|
|
|
|
KUNIT_EXPECT_LT(test, show_immediate(unit0_dev, &config_rom_attributes[4].attr, buf), 0);
|
|
|
|
|
|
|
|
// Descriptor leaf entry for vendor is not found.
|
|
|
|
KUNIT_EXPECT_LT(test, show_text_leaf(unit0_dev, &config_rom_attributes[5].attr, buf), 0);
|
|
|
|
|
|
|
|
// Descriptor leaf entry for model is not found.
|
|
|
|
KUNIT_EXPECT_LT(test, show_text_leaf(unit0_dev, &config_rom_attributes[6].attr, buf), 0);
|
|
|
|
|
|
|
|
// Specifier_ID immediate entry is found.
|
|
|
|
KUNIT_EXPECT_GT(test, show_immediate(unit0_dev, &config_rom_attributes[2].attr, buf), 0);
|
|
|
|
KUNIT_EXPECT_STREQ(test, buf, "0xabcdef\n");
|
|
|
|
|
|
|
|
// Version immediate entry is found.
|
|
|
|
KUNIT_EXPECT_GT(test, show_immediate(unit0_dev, &config_rom_attributes[3].attr, buf), 0);
|
|
|
|
KUNIT_EXPECT_STREQ(test, buf, "0x543210\n");
|
|
|
|
|
|
|
|
kunit_kfree(test, buf);
|
|
|
|
|
|
|
|
get_modalias_ids(&unit0, ids);
|
|
|
|
KUNIT_EXPECT_MEMEQ(test, ids, unit0_expected_ids, sizeof(ids));
|
|
|
|
}
|
|
|
|
|
2023-12-25 07:23:00 +09:00
|
|
|
static struct kunit_case device_attr_test_cases[] = {
|
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/20231221134849.603857-5-o-takashi@sakamocchi.jp
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
2023-12-25 07:23:00 +09:00
|
|
|
KUNIT_CASE(device_attr_simple_avc),
|
firewire: test: add test of device attributes for legacy AV/C device
Some legacy devices have configuration ROM against standard AV/C device.
They have vendor directory to store model identifier. It is described in
annex of the following document.
- Configuration ROM for AV/C Devices 1.0 (Dec. 12, 2000, 1394 Trading
Association)
In the case, current implementation of core function does not detect the
model identifier, thus device attributes and modalias of unit have lack of
it. Another KUnit test is required for the case, and this commit is for
the purpose.
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/).
The data is written by my hand.
$ config-rom-pretty-printer < /tmp/rom.img
ROM header and bus information block
-----------------------------------------------------------------
1024 04199fe7 bus_info_length 4, crc_length 25, crc 40935
1028 31333934 bus_name "1394"
1032 e0644000 irmc 1, cmc 1, isc 1, bmc 0, cyc_clk_acc 100, max_rec 4 (32)
1036 00112233 company_id 001122 |
1040 44556677 device_id 220189779575 | EUI-64 4822678189205111
root directory
-----------------------------------------------------------------
1044 0005dace directory_length 5, crc 56014
1048 03012345 vendor
1052 0c0083c0 node capabilities: per IEEE 1394
1056 8d000009 --> eui-64 leaf at 1092
1060 d1000002 --> unit directory at 1068
1064 c3000004 --> vendor directory at 1080
unit directory at 1068
-----------------------------------------------------------------
1068 0002e107 directory_length 2, crc 57607
1072 12abcdef specifier id
1076 13543210 version
vendor directory at 1080
-----------------------------------------------------------------
1080 0002cb73 directory_length 2, crc 52083
1084 17fedcba model
1088 81000004 --> descriptor leaf at 1104
eui-64 leaf at 1092
-----------------------------------------------------------------
1092 00026dc1 leaf_length 2, crc 28097
1096 00112233 company_id 001122 |
1100 44556677 device_id 220189779575 | EUI-64 4822678189205111
descriptor leaf at 1104
-----------------------------------------------------------------
1104 00050e84 leaf_length 5, crc 3716
1108 00000000 textual descriptor
1112 00000000 minimal ASCII
1116 41424344 "ABCD"
1120 45464748 "EFGH"
1124 494a0000 "IJ"
Link: https://lore.kernel.org/r/20231221134849.603857-6-o-takashi@sakamocchi.jp
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
2023-12-25 07:23:00 +09:00
|
|
|
KUNIT_CASE(device_attr_legacy_avc),
|
2023-12-25 07:23:00 +09:00
|
|
|
{}
|
|
|
|
};
|
|
|
|
|
|
|
|
static struct kunit_suite device_attr_test_suite = {
|
|
|
|
.name = "firewire-device-attribute",
|
|
|
|
.test_cases = device_attr_test_cases,
|
|
|
|
};
|
|
|
|
kunit_test_suite(device_attr_test_suite);
|