From 6e8d82fac6f35e62b3c42defcddc26a850a9499f Mon Sep 17 00:00:00 2001 From: Tokunori Ikegami Date: Mon, 21 Oct 2024 01:36:03 +0900 Subject: [PATCH] ocp: split device capabilities log print codes Move into ocp-print-stdout.c and ocp-print-json.c. Signed-off-by: Tokunori Ikegami --- plugins/ocp/ocp-nvme.c | 107 +-------------------------------- plugins/ocp/ocp-nvme.h | 33 ++++++++++ plugins/ocp/ocp-print-binary.c | 6 ++ plugins/ocp/ocp-print-json.c | 39 ++++++++++++ plugins/ocp/ocp-print-stdout.c | 34 +++++++++++ plugins/ocp/ocp-print.c | 5 ++ plugins/ocp/ocp-print.h | 2 + 7 files changed, 120 insertions(+), 106 deletions(-) diff --git a/plugins/ocp/ocp-nvme.c b/plugins/ocp/ocp-nvme.c index 666d1a84..48046ede 100644 --- a/plugins/ocp/ocp-nvme.c +++ b/plugins/ocp/ocp-nvme.c @@ -1810,7 +1810,6 @@ static int ocp_error_recovery_log(int argc, char **argv, struct command *cmd, st #define C4_DEV_CAP_REQ_LEN 0x1000 #define C4_DEV_CAP_REQ_OPCODE 0xC4 -#define C4_GUID_LENGTH 16 static __u8 dev_cap_req_guid[C4_GUID_LENGTH] = { 0x97, 0x42, 0x05, 0x0d, 0xd1, 0xe1, 0xc9, 0x98, @@ -1818,100 +1817,9 @@ static __u8 dev_cap_req_guid[C4_GUID_LENGTH] = { 0x91, 0x3c, 0x05, 0xb7 }; -/** - * struct ocp_device_capabilities_log_page - Device Capability Log page - * @pcie_exp_port: PCI Express Ports - * @oob_management_support: OOB Management Support - * @wz_cmd_support: Write Zeroes Command Support - * @sanitize_cmd_support: Sanitize Command Support - * @dsm_cmd_support: Dataset Management Command Support - * @wu_cmd_support: Write Uncorrectable Command Support - * @fused_operation_support: Fused Operation Support - * @min_valid_dssd_pwr_state: Minimum Valid DSSD Power State - * @dssd_pwr_state_desc: DSSD Power State Descriptors - * @vendor_specific_command_timeout: Vendor Specific Command Timeout - * @reserved: Reserved - * @log_page_version: Log Page Version - * @log_page_guid: Log Page GUID - */ -struct __packed ocp_device_capabilities_log_page { - __le16 pcie_exp_port; - __le16 oob_management_support; - __le16 wz_cmd_support; - __le16 sanitize_cmd_support; - __le16 dsm_cmd_support; - __le16 wu_cmd_support; - __le16 fused_operation_support; - __le16 min_valid_dssd_pwr_state; - __u8 dssd_pwr_state_desc[128]; - __u8 reserved[3934]; - __le16 log_page_version; - __u8 log_page_guid[16]; -}; - -static void ocp_print_c4_log_normal(struct ocp_device_capabilities_log_page *log_data); -static void ocp_print_c4_log_json(struct ocp_device_capabilities_log_page *log_data); -static void ocp_print_c4_log_binary(struct ocp_device_capabilities_log_page *log_data); static int get_c4_log_page(struct nvme_dev *dev, char *format); static int ocp_device_capabilities_log(int argc, char **argv, struct command *cmd, struct plugin *plugin); -static void ocp_print_c4_log_normal(struct ocp_device_capabilities_log_page *log_data) -{ - int i; - - printf(" Device Capability/C4 Log Page Data\n"); - printf(" PCI Express Ports : 0x%x\n", le16_to_cpu(log_data->pcie_exp_port)); - printf(" OOB Management Support : 0x%x\n", le16_to_cpu(log_data->oob_management_support)); - printf(" Write Zeroes Command Support : 0x%x\n", le16_to_cpu(log_data->wz_cmd_support)); - printf(" Sanitize Command Support : 0x%x\n", le16_to_cpu(log_data->sanitize_cmd_support)); - printf(" Dataset Management Command Support : 0x%x\n", le16_to_cpu(log_data->dsm_cmd_support)); - printf(" Write Uncorrectable Command Support : 0x%x\n", le16_to_cpu(log_data->wu_cmd_support)); - printf(" Fused Operation Support : 0x%x\n", le16_to_cpu(log_data->fused_operation_support)); - printf(" Minimum Valid DSSD Power State : 0x%x\n", le16_to_cpu(log_data->min_valid_dssd_pwr_state)); - printf(" DSSD Power State Descriptors : 0x"); - for (i = 0; i <= 127; i++) - printf("%x", log_data->dssd_pwr_state_desc[i]); - printf("\n"); - printf(" Log Page Version : 0x%x\n", le16_to_cpu(log_data->log_page_version)); - printf(" Log page GUID : 0x"); - for (i = C4_GUID_LENGTH - 1; i >= 0; i--) - printf("%02x", log_data->log_page_guid[i]); - printf("\n"); -} - -static void ocp_print_c4_log_json(struct ocp_device_capabilities_log_page *log_data) -{ - struct json_object *root = json_create_object(); - char guid[64]; - int i; - - json_object_add_value_int(root, "PCI Express Ports", le16_to_cpu(log_data->pcie_exp_port)); - json_object_add_value_int(root, "OOB Management Support", le16_to_cpu(log_data->oob_management_support)); - json_object_add_value_int(root, "Write Zeroes Command Support", le16_to_cpu(log_data->wz_cmd_support)); - json_object_add_value_int(root, "Sanitize Command Support", le16_to_cpu(log_data->sanitize_cmd_support)); - json_object_add_value_int(root, "Dataset Management Command Support", le16_to_cpu(log_data->dsm_cmd_support)); - json_object_add_value_int(root, "Write Uncorrectable Command Support", le16_to_cpu(log_data->wu_cmd_support)); - json_object_add_value_int(root, "Fused Operation Support", le16_to_cpu(log_data->fused_operation_support)); - json_object_add_value_int(root, "Minimum Valid DSSD Power State", le16_to_cpu(log_data->min_valid_dssd_pwr_state)); - for (i = 0; i <= 127; i++) - json_object_add_value_int(root, "DSSD Power State Descriptors", log_data->dssd_pwr_state_desc[i]); - json_object_add_value_int(root, "Log Page Version", le16_to_cpu(log_data->log_page_version)); - - memset((void *)guid, 0, 64); - sprintf((char *)guid, "0x%"PRIx64"%"PRIx64"", (uint64_t)le64_to_cpu(*(uint64_t *)&log_data->log_page_guid[8]), - (uint64_t)le64_to_cpu(*(uint64_t *)&log_data->log_page_guid[0])); - json_object_add_value_string(root, "Log page GUID", guid); - - json_print_object(root, NULL); - printf("\n"); - json_free_object(root); -} - -static void ocp_print_c4_log_binary(struct ocp_device_capabilities_log_page *log_data) -{ - return d_raw((unsigned char *)log_data, sizeof(*log_data)); -} - static int get_c4_log_page(struct nvme_dev *dev, char *format) { struct ocp_device_capabilities_log_page *log_data; @@ -1957,20 +1865,7 @@ static int get_c4_log_page(struct nvme_dev *dev, char *format) goto out; } } - - switch (fmt) { - case NORMAL: - ocp_print_c4_log_normal(log_data); - break; - case JSON: - ocp_print_c4_log_json(log_data); - break; - case BINARY: - ocp_print_c4_log_binary(log_data); - break; - default: - break; - } + ocp_c4_log(log_data, fmt); } else { fprintf(stderr, "ERROR : OCP : Unable to read C4 data from buffer\n"); } diff --git a/plugins/ocp/ocp-nvme.h b/plugins/ocp/ocp-nvme.h index b9705c03..081171e8 100644 --- a/plugins/ocp/ocp-nvme.h +++ b/plugins/ocp/ocp-nvme.h @@ -162,4 +162,37 @@ struct __packed ocp_error_recovery_log_page { __le16 log_page_version; /* 2 bytes - 0x1EE - 0x1EF */ __u8 log_page_guid[0x10]; /* 16 bytes - 0x1F0 - 0x1FF */ }; + +#define C4_GUID_LENGTH 16 + +/** + * struct ocp_device_capabilities_log_page - Device Capability Log page + * @pcie_exp_port: PCI Express Ports + * @oob_management_support: OOB Management Support + * @wz_cmd_support: Write Zeroes Command Support + * @sanitize_cmd_support: Sanitize Command Support + * @dsm_cmd_support: Dataset Management Command Support + * @wu_cmd_support: Write Uncorrectable Command Support + * @fused_operation_support: Fused Operation Support + * @min_valid_dssd_pwr_state: Minimum Valid DSSD Power State + * @dssd_pwr_state_desc: DSSD Power State Descriptors + * @vendor_specific_command_timeout: Vendor Specific Command Timeout + * @reserved: Reserved + * @log_page_version: Log Page Version + * @log_page_guid: Log Page GUID + */ +struct __packed ocp_device_capabilities_log_page { + __le16 pcie_exp_port; + __le16 oob_management_support; + __le16 wz_cmd_support; + __le16 sanitize_cmd_support; + __le16 dsm_cmd_support; + __le16 wu_cmd_support; + __le16 fused_operation_support; + __le16 min_valid_dssd_pwr_state; + __u8 dssd_pwr_state_desc[128]; + __u8 reserved[3934]; + __le16 log_page_version; + __u8 log_page_guid[16]; +}; #endif /* OCP_NVME_H */ diff --git a/plugins/ocp/ocp-print-binary.c b/plugins/ocp/ocp-print-binary.c index 2dd1cbfb..3c24abb6 100644 --- a/plugins/ocp/ocp-print-binary.c +++ b/plugins/ocp/ocp-print-binary.c @@ -22,10 +22,16 @@ static void binary_c1_log(struct ocp_error_recovery_log_page *log_data) d_raw((unsigned char *)log_data, sizeof(*log_data)); } +static void binary_c4_log(struct ocp_device_capabilities_log_page *log_data) +{ + d_raw((unsigned char *)log_data, sizeof(*log_data)); +} + static struct ocp_print_ops binary_print_ops = { .hwcomp_log = binary_hwcomp_log, .c5_log = binary_c5_log, .c1_log = binary_c1_log, + .c4_log = binary_c4_log, }; struct ocp_print_ops *ocp_get_binary_print_ops(nvme_print_flags_t flags) diff --git a/plugins/ocp/ocp-print-json.c b/plugins/ocp/ocp-print-json.c index 019e0987..89f309e2 100644 --- a/plugins/ocp/ocp-print-json.c +++ b/plugins/ocp/ocp-print-json.c @@ -482,6 +482,44 @@ static void json_c1_log(struct ocp_error_recovery_log_page *log_data) json_free_object(root); } +static void json_c4_log(struct ocp_device_capabilities_log_page *log_data) +{ + struct json_object *root = json_create_object(); + char guid[64]; + int i; + + json_object_add_value_int(root, "PCI Express Ports", le16_to_cpu(log_data->pcie_exp_port)); + json_object_add_value_int(root, "OOB Management Support", + le16_to_cpu(log_data->oob_management_support)); + json_object_add_value_int(root, "Write Zeroes Command Support", + le16_to_cpu(log_data->wz_cmd_support)); + json_object_add_value_int(root, "Sanitize Command Support", + le16_to_cpu(log_data->sanitize_cmd_support)); + json_object_add_value_int(root, "Dataset Management Command Support", + le16_to_cpu(log_data->dsm_cmd_support)); + json_object_add_value_int(root, "Write Uncorrectable Command Support", + le16_to_cpu(log_data->wu_cmd_support)); + json_object_add_value_int(root, "Fused Operation Support", + le16_to_cpu(log_data->fused_operation_support)); + json_object_add_value_int(root, "Minimum Valid DSSD Power State", + le16_to_cpu(log_data->min_valid_dssd_pwr_state)); + for (i = 0; i <= 127; i++) + json_object_add_value_int(root, "DSSD Power State Descriptors", + log_data->dssd_pwr_state_desc[i]); + json_object_add_value_int(root, "Log Page Version", + le16_to_cpu(log_data->log_page_version)); + + memset((void *)guid, 0, 64); + sprintf((char *)guid, "0x%"PRIx64"%"PRIx64"", + (uint64_t)le64_to_cpu(*(uint64_t *)&log_data->log_page_guid[8]), + (uint64_t)le64_to_cpu(*(uint64_t *)&log_data->log_page_guid[0])); + json_object_add_value_string(root, "Log page GUID", guid); + + json_print_object(root, NULL); + printf("\n"); + json_free_object(root); +} + static struct ocp_print_ops json_print_ops = { .hwcomp_log = json_hwcomp_log, .fw_act_history = json_fw_activation_history, @@ -490,6 +528,7 @@ static struct ocp_print_ops json_print_ops = { .c3_log = json_c3_log, .c5_log = json_c5_log, .c1_log = json_c1_log, + .c4_log = json_c4_log, }; struct ocp_print_ops *ocp_get_json_print_ops(nvme_print_flags_t flags) diff --git a/plugins/ocp/ocp-print-stdout.c b/plugins/ocp/ocp-print-stdout.c index 478dd02e..a15e7ac1 100644 --- a/plugins/ocp/ocp-print-stdout.c +++ b/plugins/ocp/ocp-print-stdout.c @@ -390,6 +390,39 @@ static void stdout_c1_log(struct ocp_error_recovery_log_page *log_data) printf("\n"); } +static void stdout_c4_log(struct ocp_device_capabilities_log_page *log_data) +{ + int i; + + printf(" Device Capability/C4 Log Page Data\n"); + printf(" PCI Express Ports : 0x%x\n", + le16_to_cpu(log_data->pcie_exp_port)); + printf(" OOB Management Support : 0x%x\n", + le16_to_cpu(log_data->oob_management_support)); + printf(" Write Zeroes Command Support : 0x%x\n", + le16_to_cpu(log_data->wz_cmd_support)); + printf(" Sanitize Command Support : 0x%x\n", + le16_to_cpu(log_data->sanitize_cmd_support)); + printf(" Dataset Management Command Support : 0x%x\n", + le16_to_cpu(log_data->dsm_cmd_support)); + printf(" Write Uncorrectable Command Support : 0x%x\n", + le16_to_cpu(log_data->wu_cmd_support)); + printf(" Fused Operation Support : 0x%x\n", + le16_to_cpu(log_data->fused_operation_support)); + printf(" Minimum Valid DSSD Power State : 0x%x\n", + le16_to_cpu(log_data->min_valid_dssd_pwr_state)); + printf(" DSSD Power State Descriptors : 0x"); + for (i = 0; i <= 127; i++) + printf("%x", log_data->dssd_pwr_state_desc[i]); + printf("\n"); + printf(" Log Page Version : 0x%x\n", + le16_to_cpu(log_data->log_page_version)); + printf(" Log page GUID : 0x"); + for (i = C4_GUID_LENGTH - 1; i >= 0; i--) + printf("%02x", log_data->log_page_guid[i]); + printf("\n"); +} + static struct ocp_print_ops stdout_print_ops = { .hwcomp_log = stdout_hwcomp_log, .fw_act_history = stdout_fw_activation_history, @@ -398,6 +431,7 @@ static struct ocp_print_ops stdout_print_ops = { .c3_log = (void *)stdout_c3_log, .c5_log = (void *)stdout_c5_log, .c1_log = stdout_c1_log, + .c4_log = stdout_c4_log, }; struct ocp_print_ops *ocp_get_stdout_print_ops(nvme_print_flags_t flags) diff --git a/plugins/ocp/ocp-print.c b/plugins/ocp/ocp-print.c index e9b57f8a..575eed36 100644 --- a/plugins/ocp/ocp-print.c +++ b/plugins/ocp/ocp-print.c @@ -62,3 +62,8 @@ void ocp_c1_log(struct ocp_error_recovery_log_page *log_data, nvme_print_flags_t { ocp_print(c1_log, flags, log_data); } + +void ocp_c4_log(struct ocp_device_capabilities_log_page *log_data, nvme_print_flags_t flags) +{ + ocp_print(c4_log, flags, log_data); +} diff --git a/plugins/ocp/ocp-print.h b/plugins/ocp/ocp-print.h index d80c417b..ead02acb 100644 --- a/plugins/ocp/ocp-print.h +++ b/plugins/ocp/ocp-print.h @@ -15,6 +15,7 @@ struct ocp_print_ops { void (*c3_log)(struct nvme_dev *dev, struct ssd_latency_monitor_log *log_data); void (*c5_log)(struct nvme_dev *dev, struct unsupported_requirement_log *log_data); void (*c1_log)(struct ocp_error_recovery_log_page *log_data); + void (*c4_log)(struct ocp_device_capabilities_log_page *log_data); nvme_print_flags_t flags; }; @@ -39,4 +40,5 @@ void ocp_c3_log(struct nvme_dev *dev, struct ssd_latency_monitor_log *log_data, void ocp_c5_log(struct nvme_dev *dev, struct unsupported_requirement_log *log_data, nvme_print_flags_t flags); void ocp_c1_log(struct ocp_error_recovery_log_page *log_data, nvme_print_flags_t flags); +void ocp_c4_log(struct ocp_device_capabilities_log_page *log_data, nvme_print_flags_t flags); #endif /* OCP_PRINT_H */ -- 2.50.1