Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 26 Nov 2025 08:06:45 -0500
From:      "Drew Gallatin" <gallatin@freebsd.org>
To:        "Navdeep Parhar" <np@freebsd.org>, src-committers@freebsd.org, dev-commits-src-all@freebsd.org, dev-commits-src-main@freebsd.org
Subject:   Re: git: 98f6f6e4f4bb - main - cxgbe(4): Enable IFCAP_NV and implement SIOCGIFCAPNV/SIOCSIFCAPNV
Message-ID:  <f6f3ff3c-ea22-4efb-8fac-9075aeb341e4@app.fastmail.com>
In-Reply-To: <69261ce6.31d1c.79c43e11@gitrepo.freebsd.org>
References:  <69261ce6.31d1c.79c43e11@gitrepo.freebsd.org>

index | next in thread | previous in thread | raw e-mail

[-- Attachment #1 --]
I really wish we would have just expanded if capa to 64 bits.  Having 2 sets of bits for caps is incredibly awkward and error prone.  I'm reminded of that every time a driver is converted.. 

Drew

On Tue, Nov 25, 2025, at 4:17 PM, Navdeep Parhar wrote:
> The branch main has been updated by np:
> 
> URL: https://cgit.FreeBSD.org/src/commit/?id=98f6f6e4f4bb7b19e12de89fc8cc034915f7a759
> 
> commit 98f6f6e4f4bb7b19e12de89fc8cc034915f7a759
> Author:     Navdeep Parhar <np@FreeBSD.org>
> AuthorDate: 2025-11-25 19:04:30 +0000
> Commit:     Navdeep Parhar <np@FreeBSD.org>
> CommitDate: 2025-11-25 21:08:03 +0000
> 
>     cxgbe(4): Enable IFCAP_NV and implement SIOCGIFCAPNV/SIOCSIFCAPNV
>     
>     MFC after:      1 week
>     Sponsored by:   Chelsio Communications
> ---
> sys/dev/cxgbe/t4_main.c | 21 ++++++++++++++++++---
> 1 file changed, 18 insertions(+), 3 deletions(-)
> 
> diff --git a/sys/dev/cxgbe/t4_main.c b/sys/dev/cxgbe/t4_main.c
> index 946eb84457a3..5e02b47da8d9 100644
> --- a/sys/dev/cxgbe/t4_main.c
> +++ b/sys/dev/cxgbe/t4_main.c
> @@ -2817,7 +2817,7 @@ cxgbe_probe(device_t dev)
> #define T4_CAP (IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU | IFCAP_HWCSUM | \
>      IFCAP_VLAN_HWCSUM | IFCAP_TSO | IFCAP_JUMBO_MTU | IFCAP_LRO | \
>      IFCAP_VLAN_HWTSO | IFCAP_LINKSTATE | IFCAP_HWCSUM_IPV6 | IFCAP_HWSTATS | \
> -    IFCAP_HWRXTSTMP | IFCAP_MEXTPG)
> +    IFCAP_HWRXTSTMP | IFCAP_MEXTPG | IFCAP_NV)
> #define T4_CAP_ENABLE (T4_CAP)
>  
> static void
> @@ -3065,7 +3065,7 @@ cxgbe_ioctl(if_t ifp, unsigned long cmd, caddr_t data)
> struct port_info *pi = vi->pi;
> struct adapter *sc = pi->adapter;
> struct ifreq *ifr = (struct ifreq *)data;
> - uint32_t mask;
> + uint32_t mask, mask2;
>  
> switch (cmd) {
> case SIOCSIFMTU:
> @@ -3124,12 +3124,24 @@ cxgbe_ioctl(if_t ifp, unsigned long cmd, caddr_t data)
> end_synchronized_op(sc, 0);
> break;
>  
> + case SIOCGIFCAPNV:
> + break;
> + case SIOCSIFCAPNV:
> case SIOCSIFCAP:
> rc = begin_synchronized_op(sc, vi, SLEEP_OK | INTR_OK, "t4cap");
> if (rc)
> return (rc);
>  
> - mask = ifr->ifr_reqcap ^ if_getcapenable(ifp);
> + if (cmd == SIOCSIFCAPNV) {
> + const struct siocsifcapnv_driver_data *ifr_nv =
> +     (struct siocsifcapnv_driver_data *)data;
> +
> + mask = ifr_nv->reqcap ^ if_getcapenable(ifp);
> + mask2 = ifr_nv->reqcap2 ^ if_getcapenable2(ifp);
> + } else {
> + mask = ifr->ifr_reqcap ^ if_getcapenable(ifp);
> + mask2 = 0;
> + }
> if (mask & IFCAP_TXCSUM) {
> if_togglecapenable(ifp, IFCAP_TXCSUM);
> if_togglehwassist(ifp, CSUM_TCP | CSUM_UDP | CSUM_IP);
> @@ -3264,6 +3276,9 @@ cxgbe_ioctl(if_t ifp, unsigned long cmd, caddr_t data)
>     CSUM_INNER_IP_TSO);
> }
>  
> + MPASS(mask2 == 0);
> + (void)mask2;
> +
> #ifdef VLAN_CAPABILITIES
> VLAN_CAPABILITIES(ifp);
> #endif
> 
> 

[-- Attachment #2 --]
<!DOCTYPE html><html><head><title></title></head><body><div>I really wish we would have just expanded if capa to 64 bits.&nbsp; Having 2 sets of bits for caps is incredibly awkward and error prone.&nbsp; I'm reminded of that every time a driver is converted..&nbsp;</div><div><br></div><div>Drew</div><div><br></div><div>On Tue, Nov 25, 2025, at 4:17 PM, Navdeep Parhar wrote:</div><blockquote type="cite" id="qt" style=""><div>The branch main has been updated by np:</div><div><br></div><div>URL:&nbsp;<a href="https://cgit.FreeBSD.org/src/commit/?id=98f6f6e4f4bb7b19e12de89fc8cc034915f7a759">https://cgit.FreeBSD.org/src/commit/?id=98f6f6e4f4bb7b19e12de89fc8cc034915f7a759</a></div><div><br></div><div>commit 98f6f6e4f4bb7b19e12de89fc8cc034915f7a759</div><div>Author:&nbsp;&nbsp;&nbsp;&nbsp; Navdeep Parhar &lt;<a href="mailto:np@FreeBSD.org">np@FreeBSD.org</a>&gt;</div><div>AuthorDate: 2025-11-25 19:04:30 +0000</div><div>Commit:&nbsp;&nbsp;&nbsp;&nbsp; Navdeep Parhar &lt;<a href="mailto:np@FreeBSD.org">np@FreeBSD.org</a>&gt;</div><div>CommitDate: 2025-11-25 21:08:03 +0000</div><div><br></div><div>&nbsp;&nbsp;&nbsp; cxgbe(4): Enable IFCAP_NV and implement SIOCGIFCAPNV/SIOCSIFCAPNV</div><div>&nbsp;&nbsp;&nbsp;&nbsp;</div><div>&nbsp;&nbsp;&nbsp; MFC after:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 week</div><div>&nbsp;&nbsp;&nbsp; Sponsored by:&nbsp;&nbsp; Chelsio Communications</div><div>---</div><div>sys/dev/cxgbe/t4_main.c | 21 ++++++++++++++++++---</div><div>1 file changed, 18 insertions(+), 3 deletions(-)</div><div><br></div><div>diff --git a/sys/dev/cxgbe/t4_main.c b/sys/dev/cxgbe/t4_main.c</div><div>index 946eb84457a3..5e02b47da8d9 100644</div><div>--- a/sys/dev/cxgbe/t4_main.c</div><div>+++ b/sys/dev/cxgbe/t4_main.c</div><div>@@ -2817,7 +2817,7 @@ cxgbe_probe(device_t dev)</div><div>#define T4_CAP (IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU | IFCAP_HWCSUM | \</div><div>&nbsp;&nbsp;&nbsp;&nbsp; IFCAP_VLAN_HWCSUM | IFCAP_TSO | IFCAP_JUMBO_MTU | IFCAP_LRO | \</div><div>&nbsp;&nbsp;&nbsp;&nbsp; IFCAP_VLAN_HWTSO | IFCAP_LINKSTATE | IFCAP_HWCSUM_IPV6 | IFCAP_HWSTATS | \</div><div>-&nbsp;&nbsp;&nbsp; IFCAP_HWRXTSTMP | IFCAP_MEXTPG)</div><div>+&nbsp;&nbsp;&nbsp; IFCAP_HWRXTSTMP | IFCAP_MEXTPG | IFCAP_NV)</div><div>#define T4_CAP_ENABLE (T4_CAP)</div><div>&nbsp;</div><div>static void</div><div>@@ -3065,7 +3065,7 @@ cxgbe_ioctl(if_t ifp, unsigned long cmd, caddr_t data)</div><div>struct port_info *pi = vi-&gt;pi;</div><div>struct adapter *sc = pi-&gt;adapter;</div><div>struct ifreq *ifr = (struct ifreq *)data;</div><div>-	uint32_t mask;</div><div>+	uint32_t mask, mask2;</div><div>&nbsp;</div><div>switch (cmd) {</div><div>case SIOCSIFMTU:</div><div>@@ -3124,12 +3124,24 @@ cxgbe_ioctl(if_t ifp, unsigned long cmd, caddr_t data)</div><div>end_synchronized_op(sc, 0);</div><div>break;</div><div>&nbsp;</div><div>+	case SIOCGIFCAPNV:</div><div>+		break;</div><div>+	case SIOCSIFCAPNV:</div><div>case SIOCSIFCAP:</div><div>rc = begin_synchronized_op(sc, vi, SLEEP_OK | INTR_OK, "t4cap");</div><div>if (rc)</div><div>return (rc);</div><div>&nbsp;</div><div>-		mask = ifr-&gt;ifr_reqcap ^ if_getcapenable(ifp);</div><div>+		if (cmd == SIOCSIFCAPNV) {</div><div>+			const struct siocsifcapnv_driver_data *ifr_nv =</div><div>+			&nbsp;&nbsp;&nbsp; (struct siocsifcapnv_driver_data *)data;</div><div>+</div><div>+			mask = ifr_nv-&gt;reqcap ^ if_getcapenable(ifp);</div><div>+			mask2 = ifr_nv-&gt;reqcap2 ^ if_getcapenable2(ifp);</div><div>+		} else {</div><div>+			mask = ifr-&gt;ifr_reqcap ^ if_getcapenable(ifp);</div><div>+			mask2 = 0;</div><div>+		}</div><div>if (mask &amp; IFCAP_TXCSUM) {</div><div>if_togglecapenable(ifp, IFCAP_TXCSUM);</div><div>if_togglehwassist(ifp, CSUM_TCP | CSUM_UDP | CSUM_IP);</div><div>@@ -3264,6 +3276,9 @@ cxgbe_ioctl(if_t ifp, unsigned long cmd, caddr_t data)</div><div>&nbsp;&nbsp;&nbsp; CSUM_INNER_IP_TSO);</div><div>}</div><div>&nbsp;</div><div>+		MPASS(mask2 == 0);</div><div>+		(void)mask2;</div><div>+</div><div>#ifdef VLAN_CAPABILITIES</div><div>VLAN_CAPABILITIES(ifp);</div><div>#endif</div><div><br></div><div><br></div></blockquote><div><br></div></body></html>
help

Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?f6f3ff3c-ea22-4efb-8fac-9075aeb341e4>