[PATCH v6 06/10] block/nvme: add reservation command protocol constants

Changqi Lu posted 10 patches 11 months ago
There is a newer version of this series
[PATCH v6 06/10] block/nvme: add reservation command protocol constants
Posted by Changqi Lu 11 months ago
Add constants for the NVMe persistent command protocol.
The constants include the reservation command opcode and
reservation type values defined in section 7 of the NVMe
2.0 specification.

Signed-off-by: Changqi Lu <luchangqi.123@bytedance.com>
Signed-off-by: zhenwei pi <pizhenwei@bytedance.com>
---
 include/block/nvme.h | 61 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 61 insertions(+)

diff --git a/include/block/nvme.h b/include/block/nvme.h
index bb231d0b9a..da6ccb0f3b 100644
--- a/include/block/nvme.h
+++ b/include/block/nvme.h
@@ -633,6 +633,10 @@ enum NvmeIoCommands {
     NVME_CMD_WRITE_ZEROES       = 0x08,
     NVME_CMD_DSM                = 0x09,
     NVME_CMD_VERIFY             = 0x0c,
+    NVME_CMD_RESV_REGISTER      = 0x0d,
+    NVME_CMD_RESV_REPORT        = 0x0e,
+    NVME_CMD_RESV_ACQUIRE       = 0x11,
+    NVME_CMD_RESV_RELEASE       = 0x15,
     NVME_CMD_IO_MGMT_RECV       = 0x12,
     NVME_CMD_COPY               = 0x19,
     NVME_CMD_IO_MGMT_SEND       = 0x1d,
@@ -641,6 +645,63 @@ enum NvmeIoCommands {
     NVME_CMD_ZONE_APPEND        = 0x7d,
 };
 
+typedef enum {
+    NVME_RESV_REGISTER_ACTION_REGISTER      = 0x00,
+    NVME_RESV_REGISTER_ACTION_UNREGISTER    = 0x01,
+    NVME_RESV_REGISTER_ACTION_REPLACE       = 0x02,
+} NvmeReservationRegisterAction;
+
+typedef enum {
+    NVME_RESV_RELEASE_ACTION_RELEASE        = 0x00,
+    NVME_RESV_RELEASE_ACTION_CLEAR          = 0x01,
+} NvmeReservationReleaseAction;
+
+typedef enum {
+    NVME_RESV_ACQUIRE_ACTION_ACQUIRE            = 0x00,
+    NVME_RESV_ACQUIRE_ACTION_PREEMPT            = 0x01,
+    NVME_RESV_ACQUIRE_ACTION_PREEMPT_AND_ABORT  = 0x02,
+} NvmeReservationAcquireAction;
+
+typedef enum {
+    NVME_RESV_WRITE_EXCLUSIVE               = 0x01,
+    NVME_RESV_EXCLUSIVE_ACCESS              = 0x02,
+    NVME_RESV_WRITE_EXCLUSIVE_REGS_ONLY     = 0x03,
+    NVME_RESV_EXCLUSIVE_ACCESS_REGS_ONLY    = 0x04,
+    NVME_RESV_WRITE_EXCLUSIVE_ALL_REGS      = 0x05,
+    NVME_RESV_EXCLUSIVE_ACCESS_ALL_REGS     = 0x06,
+} NvmeResvType;
+
+typedef enum {
+    NVME_RESV_PTPL_NO_CHANGE = 0x00,
+    NVME_RESV_PTPL_DISABLE   = 0x02,
+    NVME_RESV_PTPL_ENABLE    = 0x03,
+} NvmeResvPTPL;
+
+typedef enum NVMEPrCap {
+    /* Persist Through Power Loss */
+    NVME_PR_CAP_PTPL = 1 << 0,
+    /* Write Exclusive reservation type */
+    NVME_PR_CAP_WR_EX = 1 << 1,
+    /* Exclusive Access reservation type */
+    NVME_PR_CAP_EX_AC = 1 << 2,
+    /* Write Exclusive Registrants Only reservation type */
+    NVME_PR_CAP_WR_EX_RO = 1 << 3,
+    /* Exclusive Access Registrants Only reservation type */
+    NVME_PR_CAP_EX_AC_RO = 1 << 4,
+    /* Write Exclusive All Registrants reservation type */
+    NVME_PR_CAP_WR_EX_AR = 1 << 5,
+    /* Exclusive Access All Registrants reservation type */
+    NVME_PR_CAP_EX_AC_AR = 1 << 6,
+
+    NVME_PR_CAP_ALL = (NVME_PR_CAP_PTPL |
+                      NVME_PR_CAP_WR_EX |
+                      NVME_PR_CAP_EX_AC |
+                      NVME_PR_CAP_WR_EX_RO |
+                      NVME_PR_CAP_EX_AC_RO |
+                      NVME_PR_CAP_WR_EX_AR |
+                      NVME_PR_CAP_EX_AC_AR),
+} NvmePrCap;
+
 typedef struct QEMU_PACKED NvmeDeleteQ {
     uint8_t     opcode;
     uint8_t     flags;
-- 
2.20.1
Re: [PATCH v6 06/10] block/nvme: add reservation command protocol constants
Posted by Stefan Hajnoczi 10 months, 1 week ago
On Thu, Jun 13, 2024 at 03:13:23PM +0800, Changqi Lu wrote:
> Add constants for the NVMe persistent command protocol.
> The constants include the reservation command opcode and
> reservation type values defined in section 7 of the NVMe
> 2.0 specification.
> 
> Signed-off-by: Changqi Lu <luchangqi.123@bytedance.com>
> Signed-off-by: zhenwei pi <pizhenwei@bytedance.com>
> ---
>  include/block/nvme.h | 61 ++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 61 insertions(+)
> 
> diff --git a/include/block/nvme.h b/include/block/nvme.h
> index bb231d0b9a..da6ccb0f3b 100644
> --- a/include/block/nvme.h
> +++ b/include/block/nvme.h
> @@ -633,6 +633,10 @@ enum NvmeIoCommands {
>      NVME_CMD_WRITE_ZEROES       = 0x08,
>      NVME_CMD_DSM                = 0x09,
>      NVME_CMD_VERIFY             = 0x0c,
> +    NVME_CMD_RESV_REGISTER      = 0x0d,
> +    NVME_CMD_RESV_REPORT        = 0x0e,
> +    NVME_CMD_RESV_ACQUIRE       = 0x11,
> +    NVME_CMD_RESV_RELEASE       = 0x15,
>      NVME_CMD_IO_MGMT_RECV       = 0x12,

Keep NVME_CMD_IO_MGMT_RECV (0x12) before NVME_CMD_RESV_RELEASE (0x15) in
sorted order?

>      NVME_CMD_COPY               = 0x19,
>      NVME_CMD_IO_MGMT_SEND       = 0x1d,
> @@ -641,6 +645,63 @@ enum NvmeIoCommands {
>      NVME_CMD_ZONE_APPEND        = 0x7d,
>  };
>  
> +typedef enum {
> +    NVME_RESV_REGISTER_ACTION_REGISTER      = 0x00,
> +    NVME_RESV_REGISTER_ACTION_UNREGISTER    = 0x01,
> +    NVME_RESV_REGISTER_ACTION_REPLACE       = 0x02,
> +} NvmeReservationRegisterAction;
> +
> +typedef enum {
> +    NVME_RESV_RELEASE_ACTION_RELEASE        = 0x00,
> +    NVME_RESV_RELEASE_ACTION_CLEAR          = 0x01,
> +} NvmeReservationReleaseAction;
> +
> +typedef enum {
> +    NVME_RESV_ACQUIRE_ACTION_ACQUIRE            = 0x00,
> +    NVME_RESV_ACQUIRE_ACTION_PREEMPT            = 0x01,
> +    NVME_RESV_ACQUIRE_ACTION_PREEMPT_AND_ABORT  = 0x02,
> +} NvmeReservationAcquireAction;
> +
> +typedef enum {
> +    NVME_RESV_WRITE_EXCLUSIVE               = 0x01,
> +    NVME_RESV_EXCLUSIVE_ACCESS              = 0x02,
> +    NVME_RESV_WRITE_EXCLUSIVE_REGS_ONLY     = 0x03,
> +    NVME_RESV_EXCLUSIVE_ACCESS_REGS_ONLY    = 0x04,
> +    NVME_RESV_WRITE_EXCLUSIVE_ALL_REGS      = 0x05,
> +    NVME_RESV_EXCLUSIVE_ACCESS_ALL_REGS     = 0x06,
> +} NvmeResvType;
> +
> +typedef enum {
> +    NVME_RESV_PTPL_NO_CHANGE = 0x00,
> +    NVME_RESV_PTPL_DISABLE   = 0x02,
> +    NVME_RESV_PTPL_ENABLE    = 0x03,
> +} NvmeResvPTPL;
> +
> +typedef enum NVMEPrCap {
> +    /* Persist Through Power Loss */
> +    NVME_PR_CAP_PTPL = 1 << 0,
> +    /* Write Exclusive reservation type */
> +    NVME_PR_CAP_WR_EX = 1 << 1,
> +    /* Exclusive Access reservation type */
> +    NVME_PR_CAP_EX_AC = 1 << 2,
> +    /* Write Exclusive Registrants Only reservation type */
> +    NVME_PR_CAP_WR_EX_RO = 1 << 3,
> +    /* Exclusive Access Registrants Only reservation type */
> +    NVME_PR_CAP_EX_AC_RO = 1 << 4,
> +    /* Write Exclusive All Registrants reservation type */
> +    NVME_PR_CAP_WR_EX_AR = 1 << 5,
> +    /* Exclusive Access All Registrants reservation type */
> +    NVME_PR_CAP_EX_AC_AR = 1 << 6,
> +
> +    NVME_PR_CAP_ALL = (NVME_PR_CAP_PTPL |
> +                      NVME_PR_CAP_WR_EX |
> +                      NVME_PR_CAP_EX_AC |
> +                      NVME_PR_CAP_WR_EX_RO |
> +                      NVME_PR_CAP_EX_AC_RO |
> +                      NVME_PR_CAP_WR_EX_AR |
> +                      NVME_PR_CAP_EX_AC_AR),
> +} NvmePrCap;
> +
>  typedef struct QEMU_PACKED NvmeDeleteQ {
>      uint8_t     opcode;
>      uint8_t     flags;
> -- 
> 2.20.1
>