mirror of https://gitee.com/openkylin/qemu.git
hw/nvme: add host behavior support feature
Add support for getting and setting the Host Behavior Support feature. Reviewed-by: Keith Busch <kbusch@kernel.org> Signed-off-by: Naveen Nagar <naveen.n1@samsung.com> Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
This commit is contained in:
parent
05f7ae45c8
commit
d0c0697b9e
|
@ -196,6 +196,7 @@ static const bool nvme_feature_support[NVME_FID_MAX] = {
|
|||
[NVME_WRITE_ATOMICITY] = true,
|
||||
[NVME_ASYNCHRONOUS_EVENT_CONF] = true,
|
||||
[NVME_TIMESTAMP] = true,
|
||||
[NVME_HOST_BEHAVIOR_SUPPORT] = true,
|
||||
[NVME_COMMAND_SET_PROFILE] = true,
|
||||
};
|
||||
|
||||
|
@ -206,6 +207,7 @@ static const uint32_t nvme_feature_cap[NVME_FID_MAX] = {
|
|||
[NVME_NUMBER_OF_QUEUES] = NVME_FEAT_CAP_CHANGE,
|
||||
[NVME_ASYNCHRONOUS_EVENT_CONF] = NVME_FEAT_CAP_CHANGE,
|
||||
[NVME_TIMESTAMP] = NVME_FEAT_CAP_CHANGE,
|
||||
[NVME_HOST_BEHAVIOR_SUPPORT] = NVME_FEAT_CAP_CHANGE,
|
||||
[NVME_COMMAND_SET_PROFILE] = NVME_FEAT_CAP_CHANGE,
|
||||
};
|
||||
|
||||
|
@ -5091,6 +5093,9 @@ static uint16_t nvme_get_feature(NvmeCtrl *n, NvmeRequest *req)
|
|||
goto out;
|
||||
case NVME_TIMESTAMP:
|
||||
return nvme_get_feature_timestamp(n, req);
|
||||
case NVME_HOST_BEHAVIOR_SUPPORT:
|
||||
return nvme_c2h(n, (uint8_t *)&n->features.hbs,
|
||||
sizeof(n->features.hbs), req);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -5281,6 +5286,9 @@ static uint16_t nvme_set_feature(NvmeCtrl *n, NvmeRequest *req)
|
|||
break;
|
||||
case NVME_TIMESTAMP:
|
||||
return nvme_set_feature_timestamp(n, req);
|
||||
case NVME_HOST_BEHAVIOR_SUPPORT:
|
||||
return nvme_h2c(n, (uint8_t *)&n->features.hbs,
|
||||
sizeof(n->features.hbs), req);
|
||||
case NVME_COMMAND_SET_PROFILE:
|
||||
if (dw11 & 0x1ff) {
|
||||
trace_pci_nvme_err_invalid_iocsci(dw11 & 0x1ff);
|
||||
|
|
|
@ -468,7 +468,9 @@ typedef struct NvmeCtrl {
|
|||
uint16_t temp_thresh_hi;
|
||||
uint16_t temp_thresh_low;
|
||||
};
|
||||
uint32_t async_config;
|
||||
|
||||
uint32_t async_config;
|
||||
NvmeHostBehaviorSupport hbs;
|
||||
} features;
|
||||
} NvmeCtrl;
|
||||
|
||||
|
|
|
@ -1216,6 +1216,7 @@ enum NvmeFeatureIds {
|
|||
NVME_WRITE_ATOMICITY = 0xa,
|
||||
NVME_ASYNCHRONOUS_EVENT_CONF = 0xb,
|
||||
NVME_TIMESTAMP = 0xe,
|
||||
NVME_HOST_BEHAVIOR_SUPPORT = 0x16,
|
||||
NVME_COMMAND_SET_PROFILE = 0x19,
|
||||
NVME_SOFTWARE_PROGRESS_MARKER = 0x80,
|
||||
NVME_FID_MAX = 0x100,
|
||||
|
@ -1257,6 +1258,13 @@ typedef struct QEMU_PACKED NvmeRangeType {
|
|||
uint8_t rsvd48[16];
|
||||
} NvmeRangeType;
|
||||
|
||||
typedef struct NvmeHostBehaviorSupport {
|
||||
uint8_t acre;
|
||||
uint8_t etdas;
|
||||
uint8_t lbafee;
|
||||
uint8_t rsvd3[509];
|
||||
} NvmeHostBehaviorSupport;
|
||||
|
||||
typedef struct QEMU_PACKED NvmeLBAF {
|
||||
uint16_t ms;
|
||||
uint8_t ds;
|
||||
|
@ -1520,6 +1528,7 @@ static inline void _nvme_check_size(void)
|
|||
QEMU_BUILD_BUG_ON(sizeof(NvmeDsmCmd) != 64);
|
||||
QEMU_BUILD_BUG_ON(sizeof(NvmeCopyCmd) != 64);
|
||||
QEMU_BUILD_BUG_ON(sizeof(NvmeRangeType) != 64);
|
||||
QEMU_BUILD_BUG_ON(sizeof(NvmeHostBehaviorSupport) != 512);
|
||||
QEMU_BUILD_BUG_ON(sizeof(NvmeErrorLog) != 64);
|
||||
QEMU_BUILD_BUG_ON(sizeof(NvmeFwSlotInfoLog) != 512);
|
||||
QEMU_BUILD_BUG_ON(sizeof(NvmeSmartLog) != 512);
|
||||
|
|
Loading…
Reference in New Issue