git: 52d5738dc5b3 - main - nvmf_proto.h: Add additional types and constants from the 1.1 spec

From: John Baldwin <jhb_at_FreeBSD.org>
Date: Fri, 03 May 2024 00:15:39 UTC
The branch main has been updated by jhb:

URL: https://cgit.FreeBSD.org/src/commit/?id=52d5738dc5b399d63497db896e0d25fb33c5538e

commit 52d5738dc5b399d63497db896e0d25fb33c5538e
Author:     John Baldwin <jhb@FreeBSD.org>
AuthorDate: 2024-05-02 23:26:56 +0000
Commit:     John Baldwin <jhb@FreeBSD.org>
CommitDate: 2024-05-02 23:26:56 +0000

    nvmf_proto.h: Add additional types and constants from the 1.1 spec
    
    - Add opcode, command structure, and new error code for Disconnect
      fabrics opcode.
    
    - Add a generic struct nvmf_fabric_command.
    
    - Add constants for special controller ID values.
    
    - Add constants for the cattr field in the Connect command and the
      default value for the kato field in the Connect command.
    
    - Add constants for the offset of controller properties (Fabrics
      version of controller registers).
    
    Reviewed by:    imp
    Sponsored by:   Chelsio Communications
    Differential Revision:  https://reviews.freebsd.org/D44705
---
 sys/dev/nvmf/nvmf_proto.h | 44 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 44 insertions(+)

diff --git a/sys/dev/nvmf/nvmf_proto.h b/sys/dev/nvmf/nvmf_proto.h
index cb94f472c874..b0be236f77fa 100644
--- a/sys/dev/nvmf/nvmf_proto.h
+++ b/sys/dev/nvmf/nvmf_proto.h
@@ -43,6 +43,7 @@ enum nvmf_fabric_cmd_types {
 	NVMF_FABRIC_COMMAND_PROPERTY_GET			= 0x04,
 	NVMF_FABRIC_COMMAND_AUTHENTICATION_SEND			= 0x05,
 	NVMF_FABRIC_COMMAND_AUTHENTICATION_RECV			= 0x06,
+	NVMF_FABRIC_COMMAND_DISCONNECT				= 0x08,
 	NVMF_FABRIC_COMMAND_START_VENDOR_SPECIFIC		= 0xC0,
 };
 
@@ -52,6 +53,7 @@ enum nvmf_fabric_cmd_status_code {
 	NVMF_FABRIC_SC_INVALID_PARAM			= 0x82,
 	NVMF_FABRIC_SC_RESTART_DISCOVERY		= 0x83,
 	NVMF_FABRIC_SC_INVALID_HOST			= 0x84,
+	NVMF_FABRIC_SC_INVALID_QUEUE_TYPE		= 0x85,
 	NVMF_FABRIC_SC_LOG_RESTART_DISCOVERY		= 0x90,
 	NVMF_FABRIC_SC_AUTH_REQUIRED			= 0x91,
 };
@@ -166,6 +168,14 @@ enum nvmf_treq_secure_channel {
 	NVMF_TREQ_SECURE_CHANNEL_NOT_REQUIRED		= 0x2,
 };
 
+struct nvmf_fabric_cmd {
+	uint8_t		opcode;
+	uint8_t		reserved1;
+	uint16_t	cid;
+	uint8_t		fctype;
+	uint8_t		reserved2[59];
+};
+
 struct nvmf_fabric_auth_recv_cmd {
 	uint8_t		opcode;
 	uint8_t		reserved1;
@@ -225,6 +235,22 @@ struct nvmf_fabric_connect_cmd {
 };
 _Static_assert(sizeof(struct nvmf_fabric_connect_cmd) == 64, "Incorrect size");
 
+#define	NVMF_CNTLID_DYNAMIC	0xFFFF
+#define	NVMF_CNTLID_STATIC_ANY	0xFFFE
+
+/*
+ * XXX: 5.3 in NVMe-over-Fabrics 1.1 gives this as an upper bound in
+ * the Discovery Log Entry.
+ */
+#define	NVMF_CNTLID_STATIC_MAX	0xFFEF
+
+/* 5.21.1.15 in NVMe 1.4b */
+#define	NVMF_KATO_DEFAULT			(120000)
+
+#define NVMF_CONNECT_ATTR_PRIORITY_CLASS	(0x3)
+#define NVMF_CONNECT_ATTR_DISABLE_SQ_FC		(1u << 2)
+#define NVMF_CONNECT_ATTR_IO_QUEUE_DELETION	(1u << 3)
+
 struct nvmf_fabric_connect_rsp {
 	union {
 		struct {
@@ -249,9 +275,27 @@ struct nvmf_fabric_connect_rsp {
 };
 _Static_assert(sizeof(struct nvmf_fabric_connect_rsp) == 16, "Incorrect size");
 
+struct nvmf_fabric_disconnect_cmd {
+	uint8_t		opcode;
+	uint8_t		reserved1;
+	uint16_t	cid;
+	uint8_t		fctype;
+	uint8_t		reserved2[19];
+	struct nvme_sgl_descriptor sgl1;
+	uint16_t	recfmt; /* Disconnect Record Format */
+	uint8_t		reserved3[22];
+};
+_Static_assert(sizeof(struct nvmf_fabric_disconnect_cmd) == 64, "Incorrect size");
+
 #define NVMF_PROP_SIZE_4	0
 #define NVMF_PROP_SIZE_8	1
 
+#define	NVMF_PROP_CAP		0x00	/* Controller Capabilities */
+#define	NVMF_PROP_VS		0x08	/* Version */
+#define	NVMF_PROP_CC		0x14	/* Controller Configuration */
+#define	NVMF_PROP_CSTS		0x1C	/* Controller Status */
+#define	NVMF_PROP_NSSR		0x20	/* NVM Subsystem Reset */
+
 struct nvmf_fabric_prop_get_cmd {
 	uint8_t		opcode;
 	uint8_t		reserved1;