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 <[email protected]>
> AuthorDate: 2025-11-25 19:04:30 +0000
> Commit:     Navdeep Parhar <[email protected]>
> 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
> 
> 

Reply via email to