Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F165143826
D44442.id136001.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D44442.id136001.diff
View Options
diff --git a/sys/dev/nvme/nvme.h b/sys/dev/nvme/nvme.h
--- a/sys/dev/nvme/nvme.h
+++ b/sys/dev/nvme/nvme.h
@@ -433,6 +433,25 @@
#define NVME_CTRLR_DATA_VWC_ALL_NO (2)
#define NVME_CTRLR_DATA_VWC_ALL_YES (3)
+/** SGL Support */
+/* NVM command set SGL support */
+#define NVME_CTRLR_DATA_SGLS_NVM_COMMAND_SET_SHIFT (0)
+#define NVME_CTRLR_DATA_SGLS_NVM_COMMAND_SET_MASK (0x3)
+#define NVME_CTRLR_DATA_SGLS_KEYED_DATA_BLOCK_SHIFT (2)
+#define NVME_CTRLR_DATA_SGLS_KEYED_DATA_BLOCK_MASK (0x1)
+#define NVME_CTRLR_DATA_SGLS_BIT_BUCKET_SHIFT (16)
+#define NVME_CTRLR_DATA_SGLS_BIT_BUCKET_MASK (0x1)
+#define NVME_CTRLR_DATA_SGLS_CONTIG_MPTR_SHIFT (17)
+#define NVME_CTRLR_DATA_SGLS_CONTIG_MPTR_MASK (0x1)
+#define NVME_CTRLR_DATA_SGLS_OVERSIZED_SHIFT (18)
+#define NVME_CTRLR_DATA_SGLS_OVERSIZED_MASK (0x1)
+#define NVME_CTRLR_DATA_SGLS_MPTR_SGL_SHIFT (19)
+#define NVME_CTRLR_DATA_SGLS_MPTR_SGL_MASK (0x1)
+#define NVME_CTRLR_DATA_SGLS_ADDRESS_AS_OFFSET_SHIFT (20)
+#define NVME_CTRLR_DATA_SGLS_ADDRESS_AS_OFFSET_MASK (0x1)
+#define NVME_CTRLR_DATA_SGLS_TRANSPORT_DATA_BLOCK_SHIFT (21)
+#define NVME_CTRLR_DATA_SGLS_TRANSPORT_DATA_BLOCK_MASK (0x1)
+
/** namespace features */
/* thin provisioning */
#define NVME_NS_DATA_NSFEAT_THIN_PROV_SHIFT (0)
@@ -675,6 +694,38 @@
_Static_assert(sizeof(struct nvme_registers) == 0x1008, "bad size for nvme_registers");
+#define NVME_SGL_SUBTYPE_SHIFT (0)
+#define NVME_SGL_SUBTYPE_MASK (0xF)
+#define NVME_SGL_TYPE_SHIFT (4)
+#define NVME_SGL_TYPE_MASK (0xF)
+
+#define NVME_SGL_TYPE(type, subtype) \
+ ((subtype) << NVME_SGL_SUBTYPE_SHIFT | (type) << NVME_SGL_TYPE_SHIFT)
+
+enum nvme_sgl_type {
+ NVME_SGL_TYPE_DATA_BLOCK = 0x0,
+ NVME_SGL_TYPE_BIT_BUCKET = 0x1,
+ NVME_SGL_TYPE_SEGMENT = 0x2,
+ NVME_SGL_TYPE_LAST_SEGMENT = 0x3,
+ NVME_SGL_TYPE_KEYED_DATA_BLOCK = 0x4,
+ NVME_SGL_TYPE_TRANSPORT_DATA_BLOCK = 0x5,
+};
+
+enum nvme_sgl_subtype {
+ NVME_SGL_SUBTYPE_ADDRESS = 0x0,
+ NVME_SGL_SUBTYPE_OFFSET = 0x1,
+ NVME_SGL_SUBTYPE_TRANSPORT = 0xa,
+};
+
+struct nvme_sgl_descriptor {
+ uint64_t address;
+ uint32_t length;
+ uint8_t reserved[3];
+ uint8_t type;
+};
+
+_Static_assert(sizeof(struct nvme_sgl_descriptor) == 16, "bad size for nvme_sgl_descriptor");
+
struct nvme_command {
/* dword 0 */
uint8_t opc; /* opcode */
@@ -691,11 +742,14 @@
/* dword 4-5 */
uint64_t mptr; /* metadata pointer */
- /* dword 6-7 */
- uint64_t prp1; /* prp entry 1 */
-
- /* dword 8-9 */
- uint64_t prp2; /* prp entry 2 */
+ /* dword 6-9 */
+ union {
+ struct {
+ uint64_t prp1; /* prp entry 1 */
+ uint64_t prp2; /* prp entry 2 */
+ };
+ struct nvme_sgl_descriptor sgl;
+ };
/* dword 10-15 */
uint32_t cdw10; /* command-specific */
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, Aug 7, 9:26 AM (7 h, 28 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
36160430
Default Alt Text
D44442.id136001.diff (2 KB)
Attached To
Mode
D44442: nvme: Add SGL structure and constants for use in NVMe commands
Attached
Detach File
Event Timeline
Log In to Comment