From nobody Sat Mar 23 00:25:33 2024 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4V1g2j6PXBz5Fl4G; Sat, 23 Mar 2024 00:25:33 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4V1g2j4hcZz4Yql; Sat, 23 Mar 2024 00:25:33 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1711153533; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Lp/T5drNXtuvYyx87kbmaCi0i5pPQrUbJWvMhJFqA/s=; b=bPaQEecP8WsFGKZhX3t9XX0kHftTMyTy9UBmm0itiPDkcOJsfl88HHV5A+LYGeLnuYdJWV DdsDvrAsnqRAYJRA9ZrhqP7k7Qd6smBpF5O9iMHnl/aAlBW6QHrukKhdqZtPMJesHsASw1 gzPmWouSwgOwYCaNnpOjk+elGkF9RPK9QTv0SItcHHN+M+peOqSD/9SLHGs2eG7ULXAYZU UokRB/jtrty8qa8qDByM7rhMsTW2M3meMhaiHQ/Iiayj1BBlxNl2osH+eMmMbkdP/MVUT6 IBU+IiffKyRmhTGYXElBX0xrnPkjhM2jIoBu5IwAR9jcz4CY+Xsu8Vq1yH9M1A== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1711153533; a=rsa-sha256; cv=none; b=t8HjZZz2Yyvmg/0/geIvwYCfuYuwhuRFDJy3Cl7Wsl/BWHLNliF/I2U3Ll0jLR3V5JLFuY Q4frvDy3Rkuzs0GV9hT2fPMIEbUgMp1znVPk64+ZbBUy4d9BoySArvdpkaQR42psHfFLu7 lxhVRkYUBK1XZRcT9QrRMPIMuNYcUhVseahnYeAvCZGlHrqxWDMg6ufD4ZJ5X3R63h+Wt0 zl0uCGWnsPCVQmiIb6yPQoJsiJkUg7U156wUSBcwwhE6r/m9lJyvNPRpcHPDCckiDGqarG Tdu2Ub8rKxG3nlNHbxFb/zZSb9MSWFoW4OE/b+HsfRV6F8tIeXgV61/zl33JlQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1711153533; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Lp/T5drNXtuvYyx87kbmaCi0i5pPQrUbJWvMhJFqA/s=; b=JUL1IBsDaCVKaSPpBikAsepvC6PK96dA/XMzjJv1wIhxL6hmt1QVY97tVYm5Q2E2HzIUdC Rlzyd9Taj74FXFDI4v7Q7rouA4w74eve15VOdAV61Iao9mO+H4onWWakYyK/0G3pO/StP8 CkWwDgaD5v2utN1M6AgiBoJjd+rqe5VOvnic9YYVfNROfq1y1XLQKMCo5rNfURNHewq3cz 7a+JMmucmIf97pdaYauV6zTm4VlDsAFF4p2kq/giX5PmwNAFfRcXOQCUyCR6kvQUM7qTzy 6xF+BGXO9kKjGmqGMpZLpBfGul4usx+J8nXnWg0BrC6fD7m21cvQOTkXJHXkEQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4V1g2j4JjbzQYL; Sat, 23 Mar 2024 00:25:33 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 42N0PXBV005689; Sat, 23 Mar 2024 00:25:33 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 42N0PXxJ005686; Sat, 23 Mar 2024 00:25:33 GMT (envelope-from git) Date: Sat, 23 Mar 2024 00:25:33 GMT Message-Id: <202403230025.42N0PXxJ005686@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: John Baldwin Subject: git: f21a54d19080 - main - nvme: Add SGL structure and constants for use in NVMe commands List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: jhb X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: f21a54d19080510bce279183f4bf07d5315bd179 Auto-Submitted: auto-generated The branch main has been updated by jhb: URL: https://cgit.FreeBSD.org/src/commit/?id=f21a54d19080510bce279183f4bf07d5315bd179 commit f21a54d19080510bce279183f4bf07d5315bd179 Author: John Baldwin AuthorDate: 2024-03-23 00:23:09 +0000 Commit: John Baldwin CommitDate: 2024-03-23 00:23:09 +0000 nvme: Add SGL structure and constants for use in NVMe commands Fabrics capsules use an SGL structure instead of prp1/2 addresses to describe the data buffer used for a command. The SGL structure is added to a union with the existing prp1/2 fields. Reviewed by: imp Sponsored by: Chelsio Communications Differential Revision: https://reviews.freebsd.org/D44442 --- sys/dev/nvme/nvme.h | 64 ++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 59 insertions(+), 5 deletions(-) diff --git a/sys/dev/nvme/nvme.h b/sys/dev/nvme/nvme.h index fd27e9b318e7..5d3e60ece329 100644 --- 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 @@ struct nvme_registers { _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 @@ struct nvme_command { /* 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 */