Lines Matching refs:cxlds
164 int cxl_mbox_send_cmd(struct cxl_dev_state *cxlds, u16 opcode, void *in, in cxl_mbox_send_cmd() argument
177 if (in_size > cxlds->payload_size || out_size > cxlds->payload_size) in cxl_mbox_send_cmd()
180 rc = cxlds->mbox_send(cxlds, &mbox_cmd); in cxl_mbox_send_cmd()
257 struct cxl_dev_state *cxlds, u16 opcode, in cxl_mbox_cmd_ctor() argument
272 dev_dbg(cxlds->dev, "%s: input payload not allowed\n", in cxl_mbox_cmd_ctor()
281 mbox->size_out = cxlds->payload_size; in cxl_mbox_cmd_ctor()
303 struct cxl_dev_state *cxlds) in cxl_to_mem_cmd_raw() argument
313 if (send_cmd->out.size > cxlds->payload_size) in cxl_to_mem_cmd_raw()
319 dev_WARN_ONCE(cxlds->dev, true, "raw command path used\n"); in cxl_to_mem_cmd_raw()
335 struct cxl_dev_state *cxlds) in cxl_to_mem_cmd() argument
350 if (!test_bit(info->id, cxlds->enabled_cmds)) in cxl_to_mem_cmd()
354 if (test_bit(info->id, cxlds->exclusive_cmds)) in cxl_to_mem_cmd()
398 struct cxl_dev_state *cxlds, in cxl_validate_cmd_from_user() argument
412 if (send_cmd->in.size > cxlds->payload_size) in cxl_validate_cmd_from_user()
417 rc = cxl_to_mem_cmd_raw(&mem_cmd, send_cmd, cxlds); in cxl_validate_cmd_from_user()
419 rc = cxl_to_mem_cmd(&mem_cmd, send_cmd, cxlds); in cxl_validate_cmd_from_user()
425 return cxl_mbox_cmd_ctor(mbox_cmd, cxlds, mem_cmd.opcode, in cxl_validate_cmd_from_user()
487 static int handle_mailbox_cmd_from_user(struct cxl_dev_state *cxlds, in handle_mailbox_cmd_from_user() argument
492 struct device *dev = cxlds->dev; in handle_mailbox_cmd_from_user()
502 rc = cxlds->mbox_send(cxlds, mbox_cmd); in handle_mailbox_cmd_from_user()
531 struct cxl_dev_state *cxlds = cxlmd->cxlds; in cxl_send_cmd() local
542 rc = cxl_validate_cmd_from_user(&mbox_cmd, cxlmd->cxlds, &send); in cxl_send_cmd()
546 rc = handle_mailbox_cmd_from_user(cxlds, &mbox_cmd, send.out.payload, in cxl_send_cmd()
557 static int cxl_xfer_log(struct cxl_dev_state *cxlds, uuid_t *uuid, u32 size, u8 *out) in cxl_xfer_log() argument
563 u32 xfer_size = min_t(u32, remaining, cxlds->payload_size); in cxl_xfer_log()
571 rc = cxl_mbox_send_cmd(cxlds, CXL_MBOX_OP_GET_LOG, &log, sizeof(log), in cxl_xfer_log()
593 static void cxl_walk_cel(struct cxl_dev_state *cxlds, size_t size, u8 *cel) in cxl_walk_cel() argument
606 dev_dbg(cxlds->dev, in cxl_walk_cel()
611 set_bit(cmd->info.id, cxlds->enabled_cmds); in cxl_walk_cel()
615 static struct cxl_mbox_get_supported_logs *cxl_get_gsl(struct cxl_dev_state *cxlds) in cxl_get_gsl() argument
620 ret = kvmalloc(cxlds->payload_size, GFP_KERNEL); in cxl_get_gsl()
624 rc = cxl_mbox_send_cmd(cxlds, CXL_MBOX_OP_GET_SUPPORTED_LOGS, NULL, 0, ret, in cxl_get_gsl()
625 cxlds->payload_size); in cxl_get_gsl()
655 int cxl_enumerate_cmds(struct cxl_dev_state *cxlds) in cxl_enumerate_cmds() argument
658 struct device *dev = cxlds->dev; in cxl_enumerate_cmds()
662 gsl = cxl_get_gsl(cxlds); in cxl_enumerate_cmds()
683 rc = cxl_xfer_log(cxlds, &uuid, size, log); in cxl_enumerate_cmds()
689 cxl_walk_cel(cxlds, size, log); in cxl_enumerate_cmds()
695 set_bit(cmd->info.id, cxlds->enabled_cmds); in cxl_enumerate_cmds()
719 static int cxl_mem_get_partition_info(struct cxl_dev_state *cxlds) in cxl_mem_get_partition_info() argument
724 rc = cxl_mbox_send_cmd(cxlds, CXL_MBOX_OP_GET_PARTITION_INFO, NULL, 0, in cxl_mem_get_partition_info()
730 cxlds->active_volatile_bytes = in cxl_mem_get_partition_info()
732 cxlds->active_persistent_bytes = in cxl_mem_get_partition_info()
734 cxlds->next_volatile_bytes = in cxl_mem_get_partition_info()
736 cxlds->next_persistent_bytes = in cxl_mem_get_partition_info()
751 int cxl_dev_state_identify(struct cxl_dev_state *cxlds) in cxl_dev_state_identify() argument
757 rc = cxl_mbox_send_cmd(cxlds, CXL_MBOX_OP_IDENTIFY, NULL, 0, &id, in cxl_dev_state_identify()
762 cxlds->total_bytes = in cxl_dev_state_identify()
764 cxlds->volatile_only_bytes = in cxl_dev_state_identify()
766 cxlds->persistent_only_bytes = in cxl_dev_state_identify()
768 cxlds->partition_align_bytes = in cxl_dev_state_identify()
771 cxlds->lsa_size = le32_to_cpu(id.lsa_size); in cxl_dev_state_identify()
772 memcpy(cxlds->firmware_version, id.fw_revision, sizeof(id.fw_revision)); in cxl_dev_state_identify()
804 int cxl_mem_create_range_info(struct cxl_dev_state *cxlds) in cxl_mem_create_range_info() argument
806 struct device *dev = cxlds->dev; in cxl_mem_create_range_info()
809 cxlds->dpa_res = in cxl_mem_create_range_info()
810 (struct resource)DEFINE_RES_MEM(0, cxlds->total_bytes); in cxl_mem_create_range_info()
812 if (cxlds->partition_align_bytes == 0) { in cxl_mem_create_range_info()
813 rc = add_dpa_res(dev, &cxlds->dpa_res, &cxlds->ram_res, 0, in cxl_mem_create_range_info()
814 cxlds->volatile_only_bytes, "ram"); in cxl_mem_create_range_info()
817 return add_dpa_res(dev, &cxlds->dpa_res, &cxlds->pmem_res, in cxl_mem_create_range_info()
818 cxlds->volatile_only_bytes, in cxl_mem_create_range_info()
819 cxlds->persistent_only_bytes, "pmem"); in cxl_mem_create_range_info()
822 rc = cxl_mem_get_partition_info(cxlds); in cxl_mem_create_range_info()
828 rc = add_dpa_res(dev, &cxlds->dpa_res, &cxlds->ram_res, 0, in cxl_mem_create_range_info()
829 cxlds->active_volatile_bytes, "ram"); in cxl_mem_create_range_info()
832 return add_dpa_res(dev, &cxlds->dpa_res, &cxlds->pmem_res, in cxl_mem_create_range_info()
833 cxlds->active_volatile_bytes, in cxl_mem_create_range_info()
834 cxlds->active_persistent_bytes, "pmem"); in cxl_mem_create_range_info()
840 struct cxl_dev_state *cxlds; in cxl_dev_state_create() local
842 cxlds = devm_kzalloc(dev, sizeof(*cxlds), GFP_KERNEL); in cxl_dev_state_create()
843 if (!cxlds) { in cxl_dev_state_create()
848 mutex_init(&cxlds->mbox_mutex); in cxl_dev_state_create()
849 cxlds->dev = dev; in cxl_dev_state_create()
851 return cxlds; in cxl_dev_state_create()