aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2025-11-10 15:50:47 +0000
committerJohn Baldwin <jhb@FreeBSD.org>2025-11-10 15:50:47 +0000
commita4cd88b604def2b59b0871e612bd6ad04b22520e (patch)
tree7b4562e62877a08ce2de39119f00a4dc7cf10cf9
parentadaa1470777b7b392960661e317577bf23fe029a (diff)
cxgbe: Add ULD_NVME for NVMe/TCP offload
NVMe/TCP offload depends on TOE similar to iSCSI and iWARP offloads. Sponsored by: Chelsio Communications
-rw-r--r--sys/dev/cxgbe/offload.h3
-rw-r--r--sys/dev/cxgbe/t4_main.c7
-rw-r--r--sys/dev/cxgbe/tom/t4_tom.c6
3 files changed, 12 insertions, 4 deletions
diff --git a/sys/dev/cxgbe/offload.h b/sys/dev/cxgbe/offload.h
index 91a43785aaca..d63accf86e2a 100644
--- a/sys/dev/cxgbe/offload.h
+++ b/sys/dev/cxgbe/offload.h
@@ -196,7 +196,8 @@ enum {
ULD_TOM = 0,
ULD_IWARP,
ULD_ISCSI,
- ULD_MAX = ULD_ISCSI
+ ULD_NVME,
+ ULD_MAX = ULD_NVME
};
struct adapter;
diff --git a/sys/dev/cxgbe/t4_main.c b/sys/dev/cxgbe/t4_main.c
index 5bc503e48bf2..4d9c94789a37 100644
--- a/sys/dev/cxgbe/t4_main.c
+++ b/sys/dev/cxgbe/t4_main.c
@@ -13412,11 +13412,16 @@ toe_capability(struct vi_info *vi, bool enable)
("%s: TOM activated but flag not set", __func__));
}
- /* Activate iWARP and iSCSI too, if the modules are loaded. */
+ /*
+ * Activate iWARP, iSCSI, and NVMe too, if the modules
+ * are loaded.
+ */
if (!uld_active(sc, ULD_IWARP))
(void) t4_activate_uld(sc, ULD_IWARP);
if (!uld_active(sc, ULD_ISCSI))
(void) t4_activate_uld(sc, ULD_ISCSI);
+ if (!uld_active(sc, ULD_NVME))
+ (void) t4_activate_uld(sc, ULD_NVME);
if (pi->uld_vis++ == 0)
setbit(&sc->offload_map, pi->port_id);
diff --git a/sys/dev/cxgbe/tom/t4_tom.c b/sys/dev/cxgbe/tom/t4_tom.c
index 53a945f8b4cc..8dfffd465345 100644
--- a/sys/dev/cxgbe/tom/t4_tom.c
+++ b/sys/dev/cxgbe/tom/t4_tom.c
@@ -1990,8 +1990,10 @@ t4_tom_deactivate(struct adapter *sc)
if (td == NULL)
return (0); /* XXX. KASSERT? */
- if (uld_active(sc, ULD_IWARP) || uld_active(sc, ULD_ISCSI))
- return (EBUSY); /* both iWARP and iSCSI rely on the TOE. */
+ /* These ULDs rely on the TOE. */
+ if (uld_active(sc, ULD_IWARP) || uld_active(sc, ULD_ISCSI) ||
+ uld_active(sc, ULD_NVME))
+ return (EBUSY);
if (sc->offload_map != 0) {
for_each_port(sc, i) {