Move the module EEPROM decoding tests to the transceiver library, use rte_transceiver_decode() and the RTE_TRANSCEIVER_SFF_* types, and rename the test from ethdev_module_eeprom_autotest to transceiver_autotest.
Keep one test for rte_eth_module_eeprom_parse(), which is now a wrapper of the library, with the RTE_ETH_MODULE_SFF_* types. Signed-off-by: Roman Khromenok <[email protected]> --- MAINTAINERS | 1 + app/test/meson.build | 2 +- ...dev_module_eeprom.c => test_transceiver.c} | 138 +++++++++++------- 3 files changed, 84 insertions(+), 57 deletions(-) rename app/test/{test_ethdev_module_eeprom.c => test_transceiver.c} (82%) diff --git a/MAINTAINERS b/MAINTAINERS index 3150a4e794..0dd9c943b6 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -451,6 +451,7 @@ Transceiver module EEPROM M: Roman Khromenok <[email protected]> T: git://dpdk.org/next/dpdk-next-net F: lib/transceiver/ +F: app/test/test_transceiver.c F: doc/guides/prog_guide/transceiver_lib.rst Flow API diff --git a/app/test/meson.build b/app/test/meson.build index 9805cf5bee..c2b6bb532f 100644 --- a/app/test/meson.build +++ b/app/test/meson.build @@ -78,7 +78,6 @@ source_file_deps = { 'test_errno.c': [], 'test_ethdev_api.c': ['ethdev'], 'test_ethdev_link.c': ['ethdev'], - 'test_ethdev_module_eeprom.c': ['ethdev'], 'test_event_crypto_adapter.c': ['cryptodev', 'eventdev', 'bus_vdev'], 'test_event_dma_adapter.c': ['dmadev', 'eventdev', 'bus_vdev'], 'test_event_eth_rx_adapter.c': ['ethdev', 'eventdev', 'bus_vdev'], @@ -214,6 +213,7 @@ source_file_deps = { 'test_trace.c': [], 'test_trace_perf.c': [], 'test_trace_register.c': [], + 'test_transceiver.c': ['transceiver', 'ethdev'], 'test_vdev.c': ['kvargs', 'bus_vdev', 'net_null'], 'test_version.c': [], } diff --git a/app/test/test_ethdev_module_eeprom.c b/app/test/test_transceiver.c similarity index 82% rename from app/test/test_ethdev_module_eeprom.c rename to app/test/test_transceiver.c index 5f7e5db403..80e128b287 100644 --- a/app/test/test_ethdev_module_eeprom.c +++ b/app/test/test_transceiver.c @@ -10,6 +10,7 @@ #include <rte_common.h> #include <rte_ethdev.h> +#include <rte_transceiver.h> #include <rte_string_fns.h> #include "test.h" @@ -55,7 +56,7 @@ static int parse(uint32_t type, const uint8_t *data, uint32_t length) { memset(&fields, 0, sizeof(fields)); - return rte_eth_module_eeprom_parse(type, data, length, collect_field, &fields); + return rte_transceiver_decode(type, data, length, collect_field, &fields); } #define CHECK_FIELD(name, expected) do { \ @@ -100,9 +101,9 @@ put_u16(uint8_t *data, unsigned int offset, uint16_t value) static void fill_sfp(uint8_t *data) { - uint8_t *a2 = data + RTE_ETH_MODULE_SFF_8079_LEN; + uint8_t *a2 = data + RTE_TRANSCEIVER_SFF_8079_LEN; - memset(data, 0, RTE_ETH_MODULE_SFF_8472_LEN); + memset(data, 0, RTE_TRANSCEIVER_SFF_8472_LEN); data[0] = 0x03; /* identifier: SFP */ data[1] = 0x04; /* extended identifier */ data[2] = 0x07; /* connector: LC */ @@ -131,7 +132,7 @@ fill_sfp(uint8_t *data) static void fill_qsfp(uint8_t *data) { - memset(data, 0, RTE_ETH_MODULE_SFF_8636_LEN); + memset(data, 0, RTE_TRANSCEIVER_SFF_8636_LEN); data[0] = 0x11; /* identifier: QSFP28 */ put_u16(data, 22, 0x3040); /* temperature: 48.25 C */ put_u16(data, 26, 32638); /* voltage: 3.2638 V */ @@ -169,10 +170,10 @@ check_sfp_identity(void) static int test_module_eeprom_sfp_8079(void) { - uint8_t data[RTE_ETH_MODULE_SFF_8472_LEN]; + uint8_t data[RTE_TRANSCEIVER_SFF_8472_LEN]; fill_sfp(data); - TEST_ASSERT_SUCCESS(parse(RTE_ETH_MODULE_SFF_8079, data, RTE_ETH_MODULE_SFF_8079_LEN), + TEST_ASSERT_SUCCESS(parse(RTE_TRANSCEIVER_SFF_8079, data, RTE_TRANSCEIVER_SFF_8079_LEN), "Failed to parse SFF-8079 data"); TEST_ASSERT_SUCCESS(check_sfp_identity(), "Wrong SFF-8079 base information"); CHECK_NO_FIELD("Optical diagnostics support"); @@ -182,10 +183,10 @@ test_module_eeprom_sfp_8079(void) static int test_module_eeprom_sfp_8472(void) { - uint8_t data[RTE_ETH_MODULE_SFF_8472_LEN]; + uint8_t data[RTE_TRANSCEIVER_SFF_8472_LEN]; fill_sfp(data); - TEST_ASSERT_SUCCESS(parse(RTE_ETH_MODULE_SFF_8472, data, sizeof(data)), + TEST_ASSERT_SUCCESS(parse(RTE_TRANSCEIVER_SFF_8472, data, sizeof(data)), "Failed to parse SFF-8472 data"); TEST_ASSERT_SUCCESS(check_sfp_identity(), "Wrong SFF-8472 base information"); CHECK_FIELD("Optical diagnostics support", "Yes"); @@ -200,16 +201,16 @@ test_module_eeprom_sfp_8472(void) static int test_module_eeprom_sfp_8472_short(void) { - uint8_t data[RTE_ETH_MODULE_SFF_8472_LEN]; + uint8_t data[RTE_TRANSCEIVER_SFF_8472_LEN]; const uint32_t lengths[] = { - RTE_ETH_MODULE_SFF_8079_LEN, - RTE_ETH_MODULE_SFF_8472_LEN - 1, + RTE_TRANSCEIVER_SFF_8079_LEN, + RTE_TRANSCEIVER_SFF_8472_LEN - 1, }; unsigned int i; fill_sfp(data); for (i = 0; i < RTE_DIM(lengths); i++) { - TEST_ASSERT_SUCCESS(parse(RTE_ETH_MODULE_SFF_8472, data, lengths[i]), + TEST_ASSERT_SUCCESS(parse(RTE_TRANSCEIVER_SFF_8472, data, lengths[i]), "Failed to parse SFF-8472 data of %u bytes", lengths[i]); TEST_ASSERT_SUCCESS(check_sfp_identity(), "Wrong SFF-8472 base information from %u bytes", lengths[i]); @@ -223,10 +224,10 @@ test_module_eeprom_sfp_8472_short(void) static int test_module_eeprom_qsfp_8636(void) { - uint8_t data[RTE_ETH_MODULE_SFF_8636_LEN]; + uint8_t data[RTE_TRANSCEIVER_SFF_8636_LEN]; fill_qsfp(data); - TEST_ASSERT_SUCCESS(parse(RTE_ETH_MODULE_SFF_8636, data, sizeof(data)), + TEST_ASSERT_SUCCESS(parse(RTE_TRANSCEIVER_SFF_8636, data, sizeof(data)), "Failed to parse SFF-8636 data"); CHECK_FIELD("Identifier", "0x11 (QSFP28)"); CHECK_FIELD("Connector", "0x07 (LC)"); @@ -249,14 +250,14 @@ test_module_eeprom_qsfp_8636(void) static int test_module_eeprom_qsfp_8636_thresholds(void) { - uint8_t data[RTE_ETH_MODULE_SFF_8636_MAX_LEN]; + uint8_t data[RTE_TRANSCEIVER_SFF_8636_MAX_LEN]; memset(data, 0, sizeof(data)); /* paging is supported (flat memory bit is clear), page 03h is at 0x200 */ fill_qsfp(data); put_u16(data, 0x200, 0x5000); /* temperature high alarm: 80 C */ - TEST_ASSERT_SUCCESS(parse(RTE_ETH_MODULE_SFF_8636, data, sizeof(data)), + TEST_ASSERT_SUCCESS(parse(RTE_TRANSCEIVER_SFF_8636, data, sizeof(data)), "Failed to parse SFF-8636 data with page 03h"); CHECK_FIELD("Vendor name", "FINISAR CORP."); CHECK_FIELD("Alarm/warning flags implemented", "Yes"); @@ -332,32 +333,32 @@ test_module_eeprom_qsfp_compliance(void) static int test_module_eeprom_sfp_8472_status(void) { - uint8_t data[RTE_ETH_MODULE_SFF_8472_LEN]; - uint8_t *a2 = data + RTE_ETH_MODULE_SFF_8079_LEN; + uint8_t data[RTE_TRANSCEIVER_SFF_8472_LEN]; + uint8_t *a2 = data + RTE_TRANSCEIVER_SFF_8079_LEN; /* state is raised but the module does not advertise it */ fill_sfp(data); a2[SFP_A2_STATUS] = 0x06; - TEST_ASSERT_SUCCESS(parse(RTE_ETH_MODULE_SFF_8472, data, sizeof(data)), + TEST_ASSERT_SUCCESS(parse(RTE_TRANSCEIVER_SFF_8472, data, sizeof(data)), "Failed to parse SFF-8472 data"); CHECK_NO_FIELD("Rx loss of signal"); CHECK_NO_FIELD("Tx fault"); data[SFP_ENH_OPTIONS] |= 0x30; /* soft Tx fault and Rx LOS monitoring */ a2[SFP_A2_STATUS] = 0; - TEST_ASSERT_SUCCESS(parse(RTE_ETH_MODULE_SFF_8472, data, sizeof(data)), + TEST_ASSERT_SUCCESS(parse(RTE_TRANSCEIVER_SFF_8472, data, sizeof(data)), "Failed to parse SFF-8472 data without status bits"); CHECK_FIELD("Rx loss of signal", "None"); CHECK_FIELD("Tx fault", "None"); a2[SFP_A2_STATUS] = 0x02; /* Rx LOS */ - TEST_ASSERT_SUCCESS(parse(RTE_ETH_MODULE_SFF_8472, data, sizeof(data)), + TEST_ASSERT_SUCCESS(parse(RTE_TRANSCEIVER_SFF_8472, data, sizeof(data)), "Failed to parse SFF-8472 data with Rx LOS"); CHECK_FIELD("Rx loss of signal", "[ Yes ]"); CHECK_FIELD("Tx fault", "None"); a2[SFP_A2_STATUS] = 0x04; /* Tx fault */ - TEST_ASSERT_SUCCESS(parse(RTE_ETH_MODULE_SFF_8472, data, sizeof(data)), + TEST_ASSERT_SUCCESS(parse(RTE_TRANSCEIVER_SFF_8472, data, sizeof(data)), "Failed to parse SFF-8472 data with Tx fault"); CHECK_FIELD("Rx loss of signal", "None"); CHECK_FIELD("Tx fault", "[ Yes ]"); @@ -384,7 +385,7 @@ fill_qsfp_signals(uint8_t *data) static int test_module_eeprom_qsfp_8636_signals_not_implemented(void) { - uint8_t data[RTE_ETH_MODULE_SFF_8636_LEN]; + uint8_t data[RTE_TRANSCEIVER_SFF_8636_LEN]; /* flags are raised but the module does not advertise them */ fill_qsfp(data); @@ -392,7 +393,7 @@ test_module_eeprom_qsfp_8636_signals_not_implemented(void) data[QSFP_FAULT_FLAGS] = 0xff; data[QSFP_LOL_FLAGS] = 0xff; - TEST_ASSERT_SUCCESS(parse(RTE_ETH_MODULE_SFF_8636, data, sizeof(data)), + TEST_ASSERT_SUCCESS(parse(RTE_TRANSCEIVER_SFF_8636, data, sizeof(data)), "Failed to parse SFF-8636 data"); /* Rx LOS has no implemented bit and is always reported */ CHECK_FIELD("Rx loss of signal", "[ Yes, Yes, Yes, Yes ]"); @@ -407,10 +408,10 @@ test_module_eeprom_qsfp_8636_signals_not_implemented(void) static int test_module_eeprom_qsfp_8636_signals(void) { - uint8_t data[RTE_ETH_MODULE_SFF_8636_LEN]; + uint8_t data[RTE_TRANSCEIVER_SFF_8636_LEN]; fill_qsfp_signals(data); - TEST_ASSERT_SUCCESS(parse(RTE_ETH_MODULE_SFF_8636, data, sizeof(data)), + TEST_ASSERT_SUCCESS(parse(RTE_TRANSCEIVER_SFF_8636, data, sizeof(data)), "Failed to parse SFF-8636 data without flags"); CHECK_FIELD("Rx loss of signal", "None"); CHECK_FIELD("Tx loss of signal", "None"); @@ -423,7 +424,7 @@ test_module_eeprom_qsfp_8636_signals(void) data[QSFP_LOS_FLAGS] = 0x21; /* Rx lane 1, Tx lane 2 */ data[QSFP_FAULT_FLAGS] = 0x84; /* Tx fault lane 3, Tx adaptive eq lane 4 */ data[QSFP_LOL_FLAGS] = 0x18; /* Rx lane 4, Tx lane 1 */ - TEST_ASSERT_SUCCESS(parse(RTE_ETH_MODULE_SFF_8636, data, sizeof(data)), + TEST_ASSERT_SUCCESS(parse(RTE_TRANSCEIVER_SFF_8636, data, sizeof(data)), "Failed to parse SFF-8636 data with flags"); CHECK_FIELD("Rx loss of signal", "[ Yes, No, No, No ]"); CHECK_FIELD("Tx loss of signal", "[ No, Yes, No, No ]"); @@ -433,7 +434,7 @@ test_module_eeprom_qsfp_8636_signals(void) CHECK_FIELD("Tx adaptive eq fault", "[ No, No, No, Yes ]"); data[QSFP_LOS_FLAGS] = 0x0f; /* Rx on all lanes, no Tx */ - TEST_ASSERT_SUCCESS(parse(RTE_ETH_MODULE_SFF_8636, data, sizeof(data)), + TEST_ASSERT_SUCCESS(parse(RTE_TRANSCEIVER_SFF_8636, data, sizeof(data)), "Failed to parse SFF-8636 data with Rx LOS on all lanes"); CHECK_FIELD("Rx loss of signal", "[ Yes, Yes, Yes, Yes ]"); CHECK_FIELD("Tx loss of signal", "None"); @@ -444,9 +445,9 @@ static int test_module_eeprom_sfp_8472_ext_cal_unaligned(void) { /* the SFF-8472 calibration floats must be readable from any address */ - uint8_t alignas(8) buf[RTE_ETH_MODULE_SFF_8472_LEN + 1]; + uint8_t alignas(8) buf[RTE_TRANSCEIVER_SFF_8472_LEN + 1]; uint8_t *data = buf + 1; - uint8_t *a2 = data + RTE_ETH_MODULE_SFF_8079_LEN; + uint8_t *a2 = data + RTE_TRANSCEIVER_SFF_8079_LEN; const uint8_t two[4] = { 0x40, 0x00, 0x00, 0x00 }; /* 2.0f big endian */ fill_sfp(data); @@ -459,7 +460,7 @@ test_module_eeprom_sfp_8472_ext_cal_unaligned(void) a2[88] = 1; /* voltage slope */ memcpy(&a2[68], two, sizeof(two)); - TEST_ASSERT_SUCCESS(parse(RTE_ETH_MODULE_SFF_8472, data, RTE_ETH_MODULE_SFF_8472_LEN), + TEST_ASSERT_SUCCESS(parse(RTE_TRANSCEIVER_SFF_8472, data, RTE_TRANSCEIVER_SFF_8472_LEN), "Failed to parse externally calibrated SFF-8472 data"); CHECK_FIELD("Laser bias current", "39.580 mA"); CHECK_FIELD("Receiver signal average optical power", "1.3448 mW / 1.29 dBm"); @@ -478,8 +479,8 @@ put_be_float(uint8_t *data, unsigned int offset, uint32_t bits) static int test_module_eeprom_sfp_8472_rx_power_polynomial(void) { - uint8_t data[RTE_ETH_MODULE_SFF_8472_LEN]; - uint8_t *a2 = data + RTE_ETH_MODULE_SFF_8079_LEN; + uint8_t data[RTE_TRANSCEIVER_SFF_8472_LEN]; + uint8_t *a2 = data + RTE_TRANSCEIVER_SFF_8079_LEN; fill_sfp(data); /* diagnostics implemented, externally calibrated, average RX power */ @@ -496,7 +497,7 @@ test_module_eeprom_sfp_8472_rx_power_polynomial(void) put_be_float(a2, 68, 0x3f800000); /* RX_PWR(1) = 1.0 */ put_be_float(a2, 72, 0); /* RX_PWR(0) = 0 */ - TEST_ASSERT_SUCCESS(parse(RTE_ETH_MODULE_SFF_8472, data, sizeof(data)), + TEST_ASSERT_SUCCESS(parse(RTE_TRANSCEIVER_SFF_8472, data, sizeof(data)), "Failed to parse externally calibrated SFF-8472 data"); CHECK_FIELD("Receiver signal average optical power", "0.1560 mW / -8.07 dBm"); return TEST_SUCCESS; @@ -506,7 +507,7 @@ test_module_eeprom_sfp_8472_rx_power_polynomial(void) static void fill_sfp_ext_cal(uint8_t *data) { - uint8_t *a2 = data + RTE_ETH_MODULE_SFF_8079_LEN; + uint8_t *a2 = data + RTE_TRANSCEIVER_SFF_8079_LEN; fill_sfp(data); /* diagnostics implemented, externally calibrated, average RX power */ @@ -521,8 +522,8 @@ fill_sfp_ext_cal(uint8_t *data) static int test_module_eeprom_sfp_8472_cal_saturate_max(void) { - uint8_t data[RTE_ETH_MODULE_SFF_8472_LEN]; - uint8_t *a2 = data + RTE_ETH_MODULE_SFF_8079_LEN; + uint8_t data[RTE_TRANSCEIVER_SFF_8472_LEN]; + uint8_t *a2 = data + RTE_TRANSCEIVER_SFF_8079_LEN; fill_sfp_ext_cal(data); /* results above the 16-bit range must saturate */ @@ -537,7 +538,7 @@ test_module_eeprom_sfp_8472_cal_saturate_max(void) put_u16(a2, 104, 65535); /* raw RX power */ put_be_float(a2, 56, 0x3f800000); /* RX_PWR(4) = 1.0 */ - TEST_ASSERT_SUCCESS(parse(RTE_ETH_MODULE_SFF_8472, data, sizeof(data)), + TEST_ASSERT_SUCCESS(parse(RTE_TRANSCEIVER_SFF_8472, data, sizeof(data)), "Failed to parse externally calibrated SFF-8472 data"); CHECK_FIELD("Laser bias current", "131.070 mA"); CHECK_FIELD("Laser output power", "6.5535 mW / 8.16 dBm"); @@ -550,8 +551,8 @@ test_module_eeprom_sfp_8472_cal_saturate_max(void) static int test_module_eeprom_sfp_8472_cal_saturate_min(void) { - uint8_t data[RTE_ETH_MODULE_SFF_8472_LEN]; - uint8_t *a2 = data + RTE_ETH_MODULE_SFF_8079_LEN; + uint8_t data[RTE_TRANSCEIVER_SFF_8472_LEN]; + uint8_t *a2 = data + RTE_TRANSCEIVER_SFF_8079_LEN; fill_sfp_ext_cal(data); /* results below the 16-bit range must saturate */ @@ -565,7 +566,7 @@ test_module_eeprom_sfp_8472_cal_saturate_min(void) put_u16(a2, 90, -1000); /* voltage offset */ put_be_float(a2, 68, 0xbf800000); /* RX_PWR(1) = -1.0 */ - TEST_ASSERT_SUCCESS(parse(RTE_ETH_MODULE_SFF_8472, data, sizeof(data)), + TEST_ASSERT_SUCCESS(parse(RTE_TRANSCEIVER_SFF_8472, data, sizeof(data)), "Failed to parse externally calibrated SFF-8472 data"); CHECK_FIELD("Laser bias current", "0.000 mA"); CHECK_FIELD("Laser output power", "0.0000 mW / -inf dBm"); @@ -578,8 +579,8 @@ test_module_eeprom_sfp_8472_cal_saturate_min(void) static int test_module_eeprom_sfp_8472_cal_round(void) { - uint8_t data[RTE_ETH_MODULE_SFF_8472_LEN]; - uint8_t *a2 = data + RTE_ETH_MODULE_SFF_8079_LEN; + uint8_t data[RTE_TRANSCEIVER_SFF_8472_LEN]; + uint8_t *a2 = data + RTE_TRANSCEIVER_SFF_8079_LEN; fill_sfp_ext_cal(data); /* calibrated values must be rounded to the nearest, not truncated */ @@ -588,7 +589,7 @@ test_module_eeprom_sfp_8472_cal_round(void) put_u16(a2, 104, 1000); /* raw RX power */ put_be_float(a2, 68, 0x3f333333); /* RX_PWR(1) = 0.7, stored as 0.69999999 */ - TEST_ASSERT_SUCCESS(parse(RTE_ETH_MODULE_SFF_8472, data, sizeof(data)), + TEST_ASSERT_SUCCESS(parse(RTE_TRANSCEIVER_SFF_8472, data, sizeof(data)), "Failed to parse externally calibrated SFF-8472 data"); CHECK_FIELD("Laser bias current", "0.010 mA"); CHECK_FIELD("Receiver signal average optical power", "0.0700 mW / -11.55 dBm"); @@ -598,12 +599,12 @@ test_module_eeprom_sfp_8472_cal_round(void) static int test_module_eeprom_invalid(void) { - uint8_t data[RTE_ETH_MODULE_SFF_8636_MAX_LEN] = {0}; + uint8_t data[RTE_TRANSCEIVER_SFF_8636_MAX_LEN] = {0}; const uint32_t types[] = { - RTE_ETH_MODULE_SFF_8079, - RTE_ETH_MODULE_SFF_8472, - RTE_ETH_MODULE_SFF_8436, - RTE_ETH_MODULE_SFF_8636, + RTE_TRANSCEIVER_SFF_8079, + RTE_TRANSCEIVER_SFF_8472, + RTE_TRANSCEIVER_SFF_8436, + RTE_TRANSCEIVER_SFF_8636, }; unsigned int i; int ret; @@ -620,23 +621,47 @@ test_module_eeprom_invalid(void) ret = parse(0, data, sizeof(data)); TEST_ASSERT_EQUAL(ret, -ENOTSUP, "Type 0: expected %d, got %d", -ENOTSUP, ret); - ret = parse(RTE_ETH_MODULE_SFF_8436 + 1, data, sizeof(data)); + ret = parse(RTE_TRANSCEIVER_SFF_8436 + 1, data, sizeof(data)); TEST_ASSERT_EQUAL(ret, -ENOTSUP, "Unknown type: expected %d, got %d", -ENOTSUP, ret); TEST_ASSERT_EQUAL(fields.count, 0, "Unknown type: callback called %u times", fields.count); - ret = rte_eth_module_eeprom_parse(RTE_ETH_MODULE_SFF_8079, NULL, - RTE_ETH_MODULE_SFF_8079_LEN, collect_field, &fields); + ret = rte_transceiver_decode(RTE_TRANSCEIVER_SFF_8079, NULL, + RTE_TRANSCEIVER_SFF_8079_LEN, collect_field, &fields); TEST_ASSERT_EQUAL(ret, -EINVAL, "NULL data: expected %d, got %d", -EINVAL, ret); - ret = rte_eth_module_eeprom_parse(RTE_ETH_MODULE_SFF_8079, data, - RTE_ETH_MODULE_SFF_8079_LEN, NULL, NULL); + ret = rte_transceiver_decode(RTE_TRANSCEIVER_SFF_8079, data, + RTE_TRANSCEIVER_SFF_8079_LEN, NULL, NULL); TEST_ASSERT_EQUAL(ret, -EINVAL, "NULL callback: expected %d, got %d", -EINVAL, ret); return TEST_SUCCESS; } +/* rte_eth_module_eeprom_parse() is kept as a wrapper of the library */ +static int +test_module_eeprom_ethdev_wrapper(void) +{ + uint8_t data[RTE_ETH_MODULE_SFF_8472_LEN]; + int ret; + + fill_sfp(data); + memset(&fields, 0, sizeof(fields)); + TEST_ASSERT_SUCCESS(rte_eth_module_eeprom_parse(RTE_ETH_MODULE_SFF_8472, data, + sizeof(data), collect_field, &fields), + "Failed to parse SFF-8472 data with the ethdev API"); + TEST_ASSERT_SUCCESS(check_sfp_identity(), "Wrong SFF-8472 base information"); + CHECK_FIELD("Laser bias current", "39.580 mA"); + + ret = rte_eth_module_eeprom_parse(RTE_ETH_MODULE_SFF_8472, NULL, + sizeof(data), collect_field, &fields); + TEST_ASSERT_EQUAL(ret, -EINVAL, "NULL data: expected %d, got %d", -EINVAL, ret); + ret = rte_eth_module_eeprom_parse(RTE_ETH_MODULE_SFF_8472, data, + sizeof(data), NULL, NULL); + TEST_ASSERT_EQUAL(ret, -EINVAL, "NULL callback: expected %d, got %d", -EINVAL, ret); + return TEST_SUCCESS; +} + static struct unit_test_suite module_eeprom_testsuite = { - .suite_name = "ethdev module EEPROM decoding", + .suite_name = "transceiver module EEPROM decoding", .setup = NULL, .teardown = NULL, .unit_test_cases = { @@ -656,6 +681,7 @@ static struct unit_test_suite module_eeprom_testsuite = { TEST_CASE(test_module_eeprom_qsfp_8636_signals_not_implemented), TEST_CASE(test_module_eeprom_qsfp_8636_signals), TEST_CASE(test_module_eeprom_invalid), + TEST_CASE(test_module_eeprom_ethdev_wrapper), TEST_CASES_END() } }; @@ -666,4 +692,4 @@ test_module_eeprom(void) return unit_test_suite_runner(&module_eeprom_testsuite); } -REGISTER_FAST_TEST(ethdev_module_eeprom_autotest, NOHUGE_OK, ASAN_OK, test_module_eeprom); +REGISTER_FAST_TEST(transceiver_autotest, NOHUGE_OK, ASAN_OK, test_module_eeprom); -- 2.47.3

