[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250126115635.801935-8-danieller@nvidia.com>
Date: Sun, 26 Jan 2025 13:56:28 +0200
From: Danielle Ratson <danieller@...dia.com>
To: <netdev@...r.kernel.org>
CC: <mkubecek@...e.cz>, <matt@...verse.com.au>, <daniel.zahka@...il.com>,
<amcohen@...dia.com>, <nbu-mlxsw@...hange.nvidia.com>, Danielle Ratson
<danieller@...dia.com>
Subject: [PATCH ethtool-next 07/14] cmis: Add JSON output handling to --module-info in CMIS modules
Add JSON output handling for 'ethtool -m' / --module-info, following the
guideline below:
1. Fields with description, will have a separate description field.
2. Fields with units, will have a separate unit field.
3. ASCII fields will be presented as strings.
4. On/Off is rendered as true/false.
5. Yes/no is rendered as true/false.
6. Per-channel fields will be presented as array, when each element
represents a channel.
7. Fields that hold version, will be split to major and minor sub fields.
Signed-off-by: Danielle Ratson <danieller@...dia.com>
---
cmis.c | 285 +++++++++++++++++++++++++++++++++++++++------------------
1 file changed, 196 insertions(+), 89 deletions(-)
diff --git a/cmis.c b/cmis.c
index 9d89a5e..4901f57 100644
--- a/cmis.c
+++ b/cmis.c
@@ -62,7 +62,15 @@ static void cmis_show_rev_compliance(const struct cmis_memory_map *map)
int major = (rev >> 4) & 0x0F;
int minor = rev & 0x0F;
- printf("\t%-41s : Rev. %d.%d\n", "Revision compliance", major, minor);
+ if (is_json_context()) {
+ open_json_object("revision_compliance");
+ print_uint(PRINT_JSON, "major", "%u", major);
+ print_uint(PRINT_JSON, "minor", "%u", minor);
+ close_json_object();
+ } else {
+ printf("\t%-41s : Rev. %d.%d\n", "Revision compliance", major,
+ minor);
+ }
}
static void
@@ -123,8 +131,8 @@ static void cmis_show_power_info(const struct cmis_memory_map *map)
base_power = map->page_00h[CMIS_PWR_MAX_POWER_OFFSET];
max_power = base_power * 0.25f;
- printf("\t%-41s : %d\n", "Power class", power_class + 1);
- printf("\t%-41s : %.02fW\n", "Max power", max_power);
+ module_print_any_uint("Power class", power_class + 1, NULL);
+ module_print_any_float("Max power", max_power, "W");
}
/**
@@ -143,7 +151,7 @@ static void cmis_show_cbl_asm_len(const struct cmis_memory_map *map)
/* Check if max length */
if (map->page_00h[CMIS_CBL_ASM_LEN_OFFSET] == CMIS_6300M_MAX_LEN) {
- printf("\t%-41s : > 6.3km\n", fn);
+ module_print_any_string(fn, "> 6.3km");
return;
}
@@ -168,7 +176,7 @@ static void cmis_show_cbl_asm_len(const struct cmis_memory_map *map)
/* Get base value from first 6 bits and multiply by mul */
val = (map->page_00h[CMIS_CBL_ASM_LEN_OFFSET] & CMIS_LEN_VAL_MASK);
val = (float)val * mul;
- printf("\t%-41s : %0.2fm\n", fn, val);
+ module_print_any_float(fn, val, "m");
}
/**
@@ -202,7 +210,7 @@ static void cmis_print_smf_cbl_len(const struct cmis_memory_map *map)
/* Get base value from first 6 bits and multiply by mul */
val = (map->page_01h[CMIS_SMF_LEN_OFFSET] & CMIS_LEN_VAL_MASK);
val = (float)val * mul;
- printf("\t%-41s : %0.2fkm\n", fn, val);
+ module_print_any_float(fn, val, "km");
}
/**
@@ -212,22 +220,26 @@ static void cmis_print_smf_cbl_len(const struct cmis_memory_map *map)
*/
static void cmis_show_sig_integrity(const struct cmis_memory_map *map)
{
+ bool value;
+
if (!map->page_01h)
return;
/* CDR Bypass control: 2nd bit from each byte */
- printf("\t%-41s : ", "Tx CDR bypass control");
- printf("%s\n", YESNO(map->page_01h[CMIS_SIG_INTEG_TX_OFFSET] & 0x02));
+ value = map->page_01h[CMIS_SIG_INTEG_TX_OFFSET] & 0x02;
+ module_print_any_bool("Tx CDR bypass control", NULL, value,
+ YESNO(value));
- printf("\t%-41s : ", "Rx CDR bypass control");
- printf("%s\n", YESNO(map->page_01h[CMIS_SIG_INTEG_RX_OFFSET] & 0x02));
+ value = map->page_01h[CMIS_SIG_INTEG_RX_OFFSET] & 0x02;
+ module_print_any_bool("Rx CDR bypass control", NULL, value,
+ YESNO(value));
/* CDR Implementation: 1st bit from each byte */
- printf("\t%-41s : ", "Tx CDR");
- printf("%s\n", YESNO(map->page_01h[CMIS_SIG_INTEG_TX_OFFSET] & 0x01));
+ value = map->page_01h[CMIS_SIG_INTEG_TX_OFFSET] & 0x01;
+ module_print_any_bool("Tx CDR", NULL, value, YESNO(value));
- printf("\t%-41s : ", "Rx CDR");
- printf("%s\n", YESNO(map->page_01h[CMIS_SIG_INTEG_RX_OFFSET] & 0x01));
+ value = map->page_01h[CMIS_SIG_INTEG_RX_OFFSET] & 0x01;
+ module_print_any_bool("Rx CDR", NULL, value, YESNO(value));
}
/**
@@ -247,21 +259,25 @@ static void cmis_show_mit_compliance(const struct cmis_memory_map *map)
module_show_mit_compliance(value);
if (value >= CMIS_COPPER_UNEQUAL) {
- printf("\t%-41s : %udb\n", "Attenuation at 5GHz",
- map->page_00h[CMIS_COPPER_ATT_5GHZ]);
- printf("\t%-41s : %udb\n", "Attenuation at 7GHz",
- map->page_00h[CMIS_COPPER_ATT_7GHZ]);
- printf("\t%-41s : %udb\n", "Attenuation at 12.9GHz",
- map->page_00h[CMIS_COPPER_ATT_12P9GHZ]);
- printf("\t%-41s : %udb\n", "Attenuation at 25.8GHz",
- map->page_00h[CMIS_COPPER_ATT_25P8GHZ]);
+ module_print_any_uint("Attenuation at 5GHz",
+ map->page_00h[CMIS_COPPER_ATT_5GHZ], "db");
+ module_print_any_uint("Attenuation at 7GHz",
+ map->page_00h[CMIS_COPPER_ATT_7GHZ], "db");
+ module_print_any_uint("Attenuation at 12.9GHz",
+ map->page_00h[CMIS_COPPER_ATT_12P9GHZ],
+ "db");
+ module_print_any_uint("Attenuation at 25.8GHz",
+ map->page_00h[CMIS_COPPER_ATT_25P8GHZ],
+ "db");
} else if (map->page_01h) {
- printf("\t%-41s : %.3lfnm\n", "Laser wavelength",
- (((map->page_01h[CMIS_NOM_WAVELENGTH_MSB] << 8) |
- map->page_01h[CMIS_NOM_WAVELENGTH_LSB]) * 0.05));
- printf("\t%-41s : %.3lfnm\n", "Laser wavelength tolerance",
- (((map->page_01h[CMIS_WAVELENGTH_TOL_MSB] << 8) |
- map->page_01h[CMIS_WAVELENGTH_TOL_LSB]) * 0.005));
+ module_print_any_float("Laser wavelength",
+ (((map->page_01h[CMIS_NOM_WAVELENGTH_MSB] << 8) |
+ map->page_01h[CMIS_NOM_WAVELENGTH_LSB]) * 0.05),
+ "nm");
+ module_print_any_float("Laser wavelength tolerance",
+ (((map->page_01h[CMIS_WAVELENGTH_TOL_MSB] << 8) |
+ map->page_01h[CMIS_NOM_WAVELENGTH_LSB]) * 0.05),
+ "nm");
}
}
@@ -314,6 +330,8 @@ static void cmis_show_vendor_info(const struct cmis_memory_map *map)
CMIS_CLEI_END_OFFSET, "CLEI code");
}
+#define CMIS_MAX_DESC_LEN 64
+
/* Print the current Module State. Relevant documents:
* [1] CMIS Rev. 5, pag. 57, section 6.3.2.2, Figure 6-3
* [2] CMIS Rev. 5, pag. 60, section 6.3.2.3, Figure 6-4
@@ -321,31 +339,40 @@ static void cmis_show_vendor_info(const struct cmis_memory_map *map)
*/
static void cmis_show_mod_state(const struct cmis_memory_map *map)
{
+ char mod_state_description[CMIS_MAX_DESC_LEN];
__u8 mod_state;
mod_state = (map->lower_memory[CMIS_MODULE_STATE_OFFSET] &
CMIS_MODULE_STATE_MASK) >> 1;
- printf("\t%-41s : 0x%02x", "Module State", mod_state);
switch (mod_state) {
case CMIS_MODULE_STATE_MODULE_LOW_PWR:
- printf(" (ModuleLowPwr)\n");
+ strncpy(mod_state_description, "ModuleLowPwr",
+ CMIS_MAX_DESC_LEN);
break;
case CMIS_MODULE_STATE_MODULE_PWR_UP:
- printf(" (ModulePwrUp)\n");
+ strncpy(mod_state_description, "ModulePwrUp",
+ CMIS_MAX_DESC_LEN);
break;
case CMIS_MODULE_STATE_MODULE_READY:
- printf(" (ModuleReady)\n");
+ strncpy(mod_state_description, "ModuleReady",
+ CMIS_MAX_DESC_LEN);
break;
case CMIS_MODULE_STATE_MODULE_PWR_DN:
- printf(" (ModulePwrDn)\n");
+ strncpy(mod_state_description, "ModulePwrDn",
+ CMIS_MAX_DESC_LEN);
break;
case CMIS_MODULE_STATE_MODULE_FAULT:
- printf(" (ModuleFault)\n");
+ strncpy(mod_state_description, "ModuleFault",
+ CMIS_MAX_DESC_LEN);
break;
default:
- printf(" (reserved or unknown)\n");
+ strncpy(mod_state_description, "reserved or unknown",
+ CMIS_MAX_DESC_LEN);
break;
}
+
+ sff_print_any_hex_field("Module state", "module_state",
+ mod_state, mod_state_description);
}
/* Print the Module Fault Information. Relevant documents:
@@ -354,6 +381,7 @@ static void cmis_show_mod_state(const struct cmis_memory_map *map)
*/
static void cmis_show_mod_fault_cause(const struct cmis_memory_map *map)
{
+ char fault_cause_description[CMIS_MAX_DESC_LEN];
__u8 mod_state, fault_cause;
mod_state = (map->lower_memory[CMIS_MODULE_STATE_OFFSET] &
@@ -362,24 +390,31 @@ static void cmis_show_mod_fault_cause(const struct cmis_memory_map *map)
return;
fault_cause = map->lower_memory[CMIS_MODULE_FAULT_OFFSET];
- printf("\t%-41s : 0x%02x", "Module Fault Cause", fault_cause);
switch (fault_cause) {
case CMIS_MODULE_FAULT_NO_FAULT:
- printf(" (No fault detected / not supported)\n");
+ strncpy(fault_cause_description,
+ "No fault detected / not supported", CMIS_MAX_DESC_LEN);
break;
case CMIS_MODULE_FAULT_TEC_RUNAWAY:
- printf(" (TEC runaway)\n");
+ strncpy(fault_cause_description, "TEC runaway",
+ CMIS_MAX_DESC_LEN);
break;
case CMIS_MODULE_FAULT_DATA_MEM_CORRUPTED:
- printf(" (Data memory corrupted)\n");
+ strncpy(fault_cause_description, "Data memory corrupted",
+ CMIS_MAX_DESC_LEN);
break;
case CMIS_MODULE_FAULT_PROG_MEM_CORRUPTED:
- printf(" (Program memory corrupted)\n");
+ strncpy(fault_cause_description, "Program memory corrupted",
+ CMIS_MAX_DESC_LEN);
break;
default:
- printf(" (reserved or unknown)\n");
+ strncpy(fault_cause_description, "reserved or unknown",
+ CMIS_MAX_DESC_LEN);
break;
}
+
+ sff_print_any_hex_field("Module Fault Cause", "module_fault_cause",
+ fault_cause, fault_cause_description);
}
/* Print the current Module-Level Controls. Relevant documents:
@@ -388,12 +423,17 @@ static void cmis_show_mod_fault_cause(const struct cmis_memory_map *map)
*/
static void cmis_show_mod_lvl_controls(const struct cmis_memory_map *map)
{
- printf("\t%-41s : ", "LowPwrAllowRequestHW");
- printf("%s\n", ONOFF(map->lower_memory[CMIS_MODULE_CONTROL_OFFSET] &
- CMIS_LOW_PWR_ALLOW_REQUEST_HW_MASK));
- printf("\t%-41s : ", "LowPwrRequestSW");
- printf("%s\n", ONOFF(map->lower_memory[CMIS_MODULE_CONTROL_OFFSET] &
- CMIS_LOW_PWR_REQUEST_SW_MASK));
+ bool value;
+
+ value = map->lower_memory[CMIS_MODULE_CONTROL_OFFSET] &
+ CMIS_LOW_PWR_ALLOW_REQUEST_HW_MASK;
+ module_print_any_bool("LowPwrAllowRequestHW", "low_pwr_allow_request_hw",
+ value, ONOFF(value));
+
+ value = map->lower_memory[CMIS_MODULE_CONTROL_OFFSET] &
+ CMIS_LOW_PWR_REQUEST_SW_MASK;
+ module_print_any_bool("LowPwrRequestSW", "low_pwr_request_sw", value,
+ ONOFF(value));
}
static void cmis_parse_dom_power_type(const struct cmis_memory_map *map,
@@ -557,14 +597,25 @@ cmis_show_dom_chan_lvl_tx_bias_bank(const struct cmis_memory_map *map,
if (!page_11h)
return;
+ open_json_array("laser_tx_bias_current", "");
+
for (i = 0; i < CMIS_CHANNELS_PER_BANK; i++) {
int chan = bank * CMIS_CHANNELS_PER_BANK + i;
char fmt_str[80];
- snprintf(fmt_str, 80, "%s (Channel %d)",
- "Laser tx bias current", chan + 1);
- PRINT_BIAS(fmt_str, sd->scd[chan].bias_cur);
+ if (is_json_context()) {
+ print_float(PRINT_JSON, NULL, "%.3f",
+ (double)sd->scd[chan].bias_cur / 500.);
+ } else {
+ snprintf(fmt_str, 80, "%s (Channel %d)",
+ "Laser tx bias current", chan + 1);
+ PRINT_BIAS(fmt_str, sd->scd[chan].bias_cur);
+ }
}
+ close_json_array("");
+
+ if (is_json_context())
+ module_print_any_units("laser_tx_bias_current", "mA");
}
static void cmis_show_dom_chan_lvl_tx_bias(const struct cmis_memory_map *map,
@@ -593,14 +644,25 @@ cmis_show_dom_chan_lvl_tx_power_bank(const struct cmis_memory_map *map,
if (!page_11h)
return;
+ open_json_array("transmit_avg_optical_power", "");
+
for (i = 0; i < CMIS_CHANNELS_PER_BANK; i++) {
int chan = bank * CMIS_CHANNELS_PER_BANK + i;
char fmt_str[80];
- snprintf(fmt_str, 80, "%s (Channel %d)",
- "Transmit avg optical power", chan + 1);
- PRINT_xX_PWR(fmt_str, sd->scd[chan].tx_power);
+ if (is_json_context()) {
+ print_float(PRINT_JSON, NULL, "%.4f",
+ (double)sd->scd[chan].tx_power / 10000.);
+ } else {
+ snprintf(fmt_str, 80, "%s (Channel %d)",
+ "Transmit avg optical power", chan + 1);
+ PRINT_xX_PWR(fmt_str, sd->scd[chan].tx_power);
+ }
}
+ close_json_array("");
+
+ if (is_json_context())
+ module_print_any_units("transmit_avg_optical_power", "mW");
}
static void cmis_show_dom_chan_lvl_tx_power(const struct cmis_memory_map *map,
@@ -623,25 +685,39 @@ cmis_show_dom_chan_lvl_rx_power_bank(const struct cmis_memory_map *map,
const struct sff_diags *sd, int bank)
{
const __u8 *page_11h = map->upper_memory[bank][0x11];
+ char *rx_power_str;
int i;
if (!page_11h)
return;
+ if (!sd->rx_power_type)
+ rx_power_str = "Receiver signal OMA";
+ else
+ rx_power_str = "Rcvr signal avg optical power";
+
+ char rx_power_json_str[strlen(rx_power_str)];
+
+ convert_json_field_name(rx_power_str, rx_power_json_str);
+ open_json_array(rx_power_json_str, "");
+
for (i = 0; i < CMIS_CHANNELS_PER_BANK; i++) {
int chan = bank * CMIS_CHANNELS_PER_BANK + i;
- char *rx_power_str;
char fmt_str[80];
- if (!sd->rx_power_type)
- rx_power_str = "Receiver signal OMA";
- else
- rx_power_str = "Rcvr signal avg optical power";
-
- snprintf(fmt_str, 80, "%s (Channel %d)", rx_power_str,
- chan + 1);
- PRINT_xX_PWR(fmt_str, sd->scd[chan].rx_power);
+ if (is_json_context()) {
+ print_float(PRINT_JSON, NULL, "%.4f",
+ (double)sd->scd[chan].rx_power / 10000.);
+ } else {
+ snprintf(fmt_str, 80, "%s (Channel %d)", rx_power_str,
+ chan + 1);
+ PRINT_xX_PWR(fmt_str, sd->scd[chan].rx_power);
+ }
}
+ close_json_array("");
+
+ if (is_json_context())
+ module_print_any_units(rx_power_json_str, "mW");
}
static void cmis_show_dom_chan_lvl_rx_power(const struct cmis_memory_map *map,
@@ -672,10 +748,13 @@ static void cmis_show_dom_mod_lvl_flags(const struct cmis_memory_map *map)
int i;
for (i = 0; module_aw_mod_flags[i].str; i++) {
- if (module_aw_mod_flags[i].type == MODULE_TYPE_CMIS)
- printf("\t%-41s : %s\n", module_aw_mod_flags[i].str,
- map->lower_memory[module_aw_mod_flags[i].offset] &
- module_aw_mod_flags[i].value ? "On" : "Off");
+ if (module_aw_mod_flags[i].type == MODULE_TYPE_CMIS) {
+ bool value = map->lower_memory[module_aw_mod_flags[i].offset] &
+ module_aw_mod_flags[i].value;
+
+ module_print_any_bool(module_aw_mod_flags[i].str, NULL,
+ value, ONOFF(value));
+ }
}
}
@@ -692,11 +771,16 @@ static void cmis_show_dom_chan_lvl_flag(const struct cmis_memory_map *map,
for (i = 0; i < CMIS_CHANNELS_PER_BANK; i++) {
int chan = bank * CMIS_CHANNELS_PER_BANK + i;
char str[80];
-
- snprintf(str, 80, module_aw_chan_flags[flag].fmt_str, chan + 1);
- printf("\t%-41s : %s\n", str,
- page_11h[module_aw_chan_flags[flag].offset] & chan ?
- "On" : "Off");
+ bool value;
+
+ value = page_11h[module_aw_chan_flags[flag].offset] & chan;
+ if (is_json_context()) {
+ print_bool(PRINT_JSON, NULL, NULL, value);
+ } else {
+ snprintf(str, 80, "%s (Chan %d)",
+ module_aw_chan_flags[flag].fmt_str, chan + 1);
+ printf("\t%-41s : %s\n", str, ONOFF(value));
+ }
}
}
@@ -711,11 +795,19 @@ cmis_show_dom_chan_lvl_flags_bank(const struct cmis_memory_map *map,
return;
for (flag = 0; module_aw_chan_flags[flag].fmt_str; flag++) {
- if (!(map->page_01h[module_aw_chan_flags[flag].adver_offset] &
- module_aw_chan_flags[flag].adver_value))
- continue;
-
- cmis_show_dom_chan_lvl_flag(map, bank, flag);
+ char json_str[80] = {};
+
+ if (module_aw_chan_flags[flag].type == MODULE_TYPE_CMIS) {
+ if (!(map->page_01h[module_aw_chan_flags[flag].adver_offset] &
+ module_aw_chan_flags[flag].adver_value))
+ continue;
+
+ convert_json_field_name(module_aw_chan_flags[flag].fmt_str,
+ json_str);
+ open_json_array(json_str, "");
+ cmis_show_dom_chan_lvl_flag(map, bank, flag);
+ close_json_array("");
+ }
}
}
@@ -745,8 +837,12 @@ static void cmis_show_dom(const struct cmis_memory_map *map)
cmis_show_dom_chan_lvl_monitors(map, &sd);
cmis_show_dom_mod_lvl_flags(map);
cmis_show_dom_chan_lvl_flags(map);
- if (sd.supports_alarms)
- sff_show_thresholds(sd);
+ if (sd.supports_alarms) {
+ if (is_json_context())
+ sff_show_thresholds_json(sd);
+ else
+ sff_show_thresholds(sd);
+ }
}
/* Print active and inactive firmware versions. Relevant documents:
@@ -756,14 +852,24 @@ static void cmis_show_dom(const struct cmis_memory_map *map)
static void cmis_show_fw_version_common(const char *name, __u8 major,
__u8 minor)
{
+ char json_fn[32] = "";
+
if (major == 0 && minor == 0) {
return;
} else if (major == 0xFF && minor == 0xFF) {
- printf("\t%-41s : Invalid\n", name);
+ module_print_any_string(name, "Invalid");
return;
}
- printf("\t%-41s : %d.%d\n", name, major, minor);
+ if (is_json_context()) {
+ convert_json_field_name(name, json_fn);
+ open_json_object(json_fn);
+ print_uint(PRINT_JSON, "major", "%u", major);
+ print_uint(PRINT_JSON, "minor", "%u", minor);
+ close_json_object();
+ } else {
+ printf("\t%-41s : %d.%d\n", name, major, minor);
+ }
}
static void cmis_show_fw_active_version(const struct cmis_memory_map *map)
@@ -811,7 +917,7 @@ static void cmis_show_cdb_instances(const struct cmis_memory_map *map)
{
__u8 cdb_instances = cmis_cdb_instances_get(map);
- printf("\t%-41s : %u\n", "CDB instances", cdb_instances);
+ module_print_any_uint("CDB instances", cdb_instances, NULL);
}
static void cmis_show_cdb_mode(const struct cmis_memory_map *map)
@@ -819,8 +925,8 @@ static void cmis_show_cdb_mode(const struct cmis_memory_map *map)
__u8 mode = map->page_01h[CMIS_CDB_ADVER_OFFSET] &
CMIS_CDB_ADVER_MODE_MASK;
- printf("\t%-41s : %s\n", "CDB background mode",
- mode ? "Supported" : "Not supported");
+ module_print_any_string("CDB background mode",
+ mode ? "Supported" : "Not supported");
}
static void cmis_show_cdb_epl_pages(const struct cmis_memory_map *map)
@@ -828,7 +934,7 @@ static void cmis_show_cdb_epl_pages(const struct cmis_memory_map *map)
__u8 epl_pages = map->page_01h[CMIS_CDB_ADVER_OFFSET] &
CMIS_CDB_ADVER_EPL_MASK;
- printf("\t%-41s : %u\n", "CDB EPL pages", epl_pages);
+ module_print_any_uint("CDB EPL pages", epl_pages, NULL);
}
static void cmis_show_cdb_rw_len(const struct cmis_memory_map *map)
@@ -839,9 +945,10 @@ static void cmis_show_cdb_rw_len(const struct cmis_memory_map *map)
* units of 8 bytes, in addition to the minimum 8 bytes.
*/
rw_len = (rw_len + 1) * 8;
- printf("\t%-41s : %u\n", "CDB Maximum EPL RW length", rw_len);
- printf("\t%-41s : %u\n", "CDB Maximum LPL RW length",
- rw_len > CMIS_PAGE_SIZE ? CMIS_PAGE_SIZE : rw_len);
+ module_print_any_uint("CDB Maximum EPL RW length", rw_len, NULL);
+ module_print_any_uint("CDB Maximum LPL RW length",
+ rw_len > CMIS_PAGE_SIZE ? CMIS_PAGE_SIZE : rw_len,
+ NULL);
}
static void cmis_show_cdb_trigger(const struct cmis_memory_map *map)
@@ -853,8 +960,8 @@ static void cmis_show_cdb_trigger(const struct cmis_memory_map *map)
* page, or by multiple writes ending with the writing of the CDB
* Command Code (CMDID).
*/
- printf("\t%-41s : %s\n", "CDB trigger method",
- trigger ? "Single write" : "Multiple writes");
+ module_print_any_string("CDB trigger method",
+ trigger ? "Single write" : "Multiple writes");
}
/* Print CDB messaging support advertisement. Relevant documents:
--
2.47.0
Powered by blists - more mailing lists