@@ -1105,6 +1105,35 @@ CXL_EXPORT unsigned int cxl_cmd_identify_get_label_size(struct cxl_cmd *cmd)
return le32_to_cpu(id->lsa_size);
}
+#define cmd_identify_get_capacity_field(cmd, field) \
+do { \
+ struct cxl_cmd_identify *c = \
+ (struct cxl_cmd_identify *)cmd->send_cmd->out.payload;\
+ int rc = cxl_cmd_validate_status(cmd, \
+ CXL_MEM_COMMAND_ID_IDENTIFY); \
+ if (rc) \
+ return ULLONG_MAX; \
+ return le64_to_cpu(c->field) * CXL_CAPACITY_MULTIPLIER; \
+} while (0)
+
+CXL_EXPORT unsigned long long
+cxl_cmd_identify_get_total_bytes(struct cxl_cmd *cmd)
+{
+ cmd_identify_get_capacity_field(cmd, total_capacity);
+}
+
+CXL_EXPORT unsigned long long
+cxl_cmd_identify_get_volatile_only_bytes(struct cxl_cmd *cmd)
+{
+ cmd_identify_get_capacity_field(cmd, volatile_capacity);
+}
+
+CXL_EXPORT unsigned long long
+cxl_cmd_identify_get_persistent_only_bytes(struct cxl_cmd *cmd)
+{
+ cmd_identify_get_capacity_field(cmd, persistent_capacity);
+}
+
CXL_EXPORT struct cxl_cmd *cxl_cmd_new_raw(struct cxl_memdev *memdev,
int opcode)
{
@@ -31,6 +31,9 @@ global:
cxl_cmd_get_out_size;
cxl_cmd_new_identify;
cxl_cmd_identify_get_fw_rev;
+ cxl_cmd_identify_get_total_bytes;
+ cxl_cmd_identify_get_volatile_only_bytes;
+ cxl_cmd_identify_get_persistent_only_bytes;
cxl_cmd_identify_get_partition_align;
cxl_cmd_identify_get_label_size;
cxl_cmd_new_get_health_info;
@@ -68,6 +68,9 @@ int cxl_cmd_get_mbox_status(struct cxl_cmd *cmd);
int cxl_cmd_get_out_size(struct cxl_cmd *cmd);
struct cxl_cmd *cxl_cmd_new_identify(struct cxl_memdev *memdev);
int cxl_cmd_identify_get_fw_rev(struct cxl_cmd *cmd, char *fw_rev, int fw_len);
+unsigned long long cxl_cmd_identify_get_total_bytes(struct cxl_cmd *cmd);
+unsigned long long cxl_cmd_identify_get_volatile_only_bytes(struct cxl_cmd *cmd);
+unsigned long long cxl_cmd_identify_get_persistent_only_bytes(struct cxl_cmd *cmd);
unsigned long long cxl_cmd_identify_get_partition_align(struct cxl_cmd *cmd);
unsigned int cxl_cmd_identify_get_label_size(struct cxl_cmd *cmd);
struct cxl_cmd *cxl_cmd_new_get_health_info(struct cxl_memdev *memdev);