void nvme_ctrlr_cmd_set_num_queues(struct spdk_nvme_ctrlr *ctrlr, uint32_t num_queues, spdk_nvme_cmd_cb cb_fn, void *cb_arg) { uint32_t cdw11; cdw11 = ((num_queues - 1) << 16) | (num_queues - 1); spdk_nvme_ctrlr_cmd_set_feature(ctrlr, SPDK_NVME_FEAT_NUMBER_OF_QUEUES, cdw11, 0, NULL, 0, cb_fn, cb_arg); }
void nvme_ctrlr_cmd_set_async_event_config(struct spdk_nvme_ctrlr *ctrlr, union spdk_nvme_critical_warning_state state, spdk_nvme_cmd_cb cb_fn, void *cb_arg) { uint32_t cdw11; cdw11 = state.raw; spdk_nvme_ctrlr_cmd_set_feature(ctrlr, SPDK_NVME_FEAT_ASYNC_EVENT_CONFIGURATION, cdw11, 0, NULL, 0, cb_fn, cb_arg); }
static void set_latency_tracking_feature(struct spdk_nvme_ctrlr *ctrlr, bool enable) { int res; union spdk_nvme_intel_feat_latency_tracking latency_tracking; if (enable) { latency_tracking.bits.enable = 0x01; } else { latency_tracking.bits.enable = 0x00; } res = spdk_nvme_ctrlr_cmd_set_feature(ctrlr, SPDK_NVME_INTEL_FEAT_LATENCY_TRACKING, latency_tracking.raw, 0, NULL, 0, enable_latency_tracking_complete, NULL); if (res) { printf("fail to allocate nvme request.\n"); return; } g_outstanding_commands++; while (g_outstanding_commands) { spdk_nvme_ctrlr_process_admin_completions(ctrlr); } }