Index: sys/dev/age/if_age.c =================================================================== --- sys/dev/age/if_age.c (revision 286913) +++ sys/dev/age/if_age.c (working copy) @@ -610,6 +610,9 @@ age_attach(device_t dev) ifp->if_snd.ifq_drv_maxlen = AGE_TX_RING_CNT - 1; IFQ_SET_MAXLEN(&ifp->if_snd, ifp->if_snd.ifq_drv_maxlen); IFQ_SET_READY(&ifp->if_snd); + ifp->if_hw_tsomax = IP_MAXPACKET; + ifp->if_hw_tsomaxsegcount = AGE_MAXTXSEGS; + ifp->if_hw_tsomaxsegsize = AGE_TSO_MAXSEGSIZE; ifp->if_capabilities = IFCAP_HWCSUM | IFCAP_TSO4; ifp->if_hwassist = AGE_CSUM_FEATURES | CSUM_TSO; if (pci_find_cap(dev, PCIY_PMG, &pmc) == 0) { Index: sys/dev/alc/if_alc.c =================================================================== --- sys/dev/alc/if_alc.c (revision 286913) +++ sys/dev/alc/if_alc.c (working copy) @@ -1554,6 +1554,9 @@ alc_attach(device_t dev) ifp->if_snd.ifq_drv_maxlen = ALC_TX_RING_CNT - 1; IFQ_SET_MAXLEN(&ifp->if_snd, ifp->if_snd.ifq_drv_maxlen); IFQ_SET_READY(&ifp->if_snd); + ifp->if_hw_tsomax = IP_MAXPACKET; + ifp->if_hw_tsomaxsegcount = ALC_MAXTXSEGS; + ifp->if_hw_tsomaxsegsize = ALC_TSO_MAXSEGSIZE; ifp->if_capabilities = IFCAP_TXCSUM | IFCAP_TSO4; ifp->if_hwassist = ALC_CSUM_FEATURES | CSUM_TSO; if (pci_find_cap(dev, PCIY_PMG, &base) == 0) { Index: sys/dev/ale/if_ale.c =================================================================== --- sys/dev/ale/if_ale.c (revision 286913) +++ sys/dev/ale/if_ale.c (working copy) @@ -625,6 +625,9 @@ ale_attach(device_t dev) ifp->if_snd.ifq_drv_maxlen = ALE_TX_RING_CNT - 1; IFQ_SET_MAXLEN(&ifp->if_snd, ifp->if_snd.ifq_drv_maxlen); IFQ_SET_READY(&ifp->if_snd); + ifp->if_hw_tsomax = IP_MAXPACKET; + ifp->if_hw_tsomaxsegcount = ALE_MAXTXSEGS; + ifp->if_hw_tsomaxsegsize = ALE_TSO_MAXSEGSIZE; ifp->if_capabilities = IFCAP_RXCSUM | IFCAP_TXCSUM | IFCAP_TSO4; ifp->if_hwassist = ALE_CSUM_FEATURES | CSUM_TSO; if (pci_find_cap(dev, PCIY_PMG, &pmc) == 0) { Index: sys/dev/bce/if_bce.c =================================================================== --- sys/dev/bce/if_bce.c (revision 286913) +++ sys/dev/bce/if_bce.c (working copy) @@ -1393,7 +1393,9 @@ bce_attach(device_t dev) ifp->if_get_counter = bce_get_counter; ifp->if_init = bce_init; ifp->if_mtu = ETHERMTU; - + ifp->if_hw_tsomax = IP_MAXPACKET; + ifp->if_hw_tsomaxsegcount = BCE_MAX_SEGMENTS; + ifp->if_hw_tsomaxsegsize = BCE_TSO_MAX_SEG_SIZE; if (bce_tso_enable) { ifp->if_hwassist = BCE_IF_HWASSIST | CSUM_TSO; ifp->if_capabilities = BCE_IF_CAPABILITIES | IFCAP_TSO4 | Index: sys/dev/bge/if_bge.c =================================================================== --- sys/dev/bge/if_bge.c (revision 286913) +++ sys/dev/bge/if_bge.c (working copy) @@ -3304,6 +3304,7 @@ bge_attach(device_t dev) { if_t ifp; struct bge_softc *sc; + struct ifnet_hw_tsomax hw_tsomax; uint32_t hwcfg = 0, misccfg, pcistate; u_char eaddr[ETHER_ADDR_LEN]; int capmask, error, reg, rid, trys; @@ -3743,6 +3744,10 @@ bge_attach(device_t dev) if_sethwassist(ifp, sc->bge_csum_features); if_setcapabilities(ifp, IFCAP_HWCSUM | IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_MTU); + hw_tsomax.tsomaxbytes = IP_MAXPACKET; + hw_tsomax.tsomaxsegcount = BGE_NSEG_NEW; + hw_tsomax.tsomaxsegsize = BGE_TSOSEG_SZ; + if_hw_tsomax_update(ifp, &hw_tsomax); if ((sc->bge_flags & (BGE_FLAG_TSO | BGE_FLAG_TSO3)) != 0) { if_sethwassistbits(ifp, CSUM_TSO, 0); if_setcapabilitiesbit(ifp, IFCAP_TSO4 | IFCAP_VLAN_HWTSO, 0); Index: sys/dev/fxp/if_fxp.c =================================================================== --- sys/dev/fxp/if_fxp.c (revision 286913) +++ sys/dev/fxp/if_fxp.c (working copy) @@ -427,6 +427,7 @@ fxp_attach(device_t dev) struct fxp_cb_tx *tcbp; struct fxp_tx *txp; struct fxp_rx *rxp; + struct ifnet_hw_tsomax hw_tsomax; if_t ifp; uint32_t val; uint16_t data; @@ -848,6 +849,10 @@ fxp_attach(device_t dev) if_setcapabilities(ifp, 0); if_setcapenable(ifp, 0); + hw_tsomax.tsomaxbytes = IP_MAXPACKET; + hw_tsomax.tsomaxsegcount = FXP_NTXSEG; + hw_tsomax.tsomaxsegsize = FXP_TSO_SEGSIZE; + if_hw_tsomax_update(ifp, &hw_tsomax); /* Enable checksum offload/TSO for 82550 or better chips */ if (sc->flags & FXP_FLAG_EXT_RFA) { if_sethwassist(ifp, FXP_CSUM_FEATURES | CSUM_TSO); Index: sys/dev/jme/if_jme.c =================================================================== --- sys/dev/jme/if_jme.c (revision 286913) +++ sys/dev/jme/if_jme.c (working copy) @@ -823,6 +823,9 @@ jme_attach(device_t dev) ifp->if_snd.ifq_drv_maxlen = JME_TX_RING_CNT - 1; IFQ_SET_MAXLEN(&ifp->if_snd, ifp->if_snd.ifq_drv_maxlen); IFQ_SET_READY(&ifp->if_snd); + ifp->if_hw_tsomax = IP_MAXPACKET; + ifp->if_hw_tsomaxsegcount = JME_MAXTXSEGS; + ifp->if_hw_tsomaxsegsize = JME_TSO_MAXSEGSIZE; /* JMC250 supports Tx/Rx checksum offload as well as TSO. */ ifp->if_capabilities = IFCAP_HWCSUM | IFCAP_TSO4; ifp->if_hwassist = JME_CSUM_FEATURES | CSUM_TSO; Index: sys/dev/msk/if_msk.c =================================================================== --- sys/dev/msk/if_msk.c (revision 286913) +++ sys/dev/msk/if_msk.c (working copy) @@ -1647,6 +1647,9 @@ msk_attach(device_t dev) if ((sc_if->msk_flags & MSK_FLAG_DESCV2) != 0 && (sc_if->msk_flags & MSK_FLAG_NORX_CSUM) == 0) ifp->if_capabilities |= IFCAP_RXCSUM; + ifp->if_hw_tsomax = IP_MAXPACKET; + ifp->if_hw_tsomaxsegcount = MSK_MAXTXSEGS; + ifp->if_hw_tsomaxsegsize = MSK_TSO_MAXSGSIZE; ifp->if_hwassist = MSK_CSUM_FEATURES | CSUM_TSO; ifp->if_capenable = ifp->if_capabilities; ifp->if_ioctl = msk_ioctl; Index: sys/dev/nfe/if_nfe.c =================================================================== --- sys/dev/nfe/if_nfe.c (revision 286913) +++ sys/dev/nfe/if_nfe.c (working copy) @@ -364,6 +364,7 @@ static int nfe_attach(device_t dev) { struct nfe_softc *sc; + struct ifnet_hw_tsomax hw_tsomax; if_t ifp; bus_addr_t dma_addr_max; int error = 0, i, msic, phyloc, reg, rid; @@ -601,7 +602,10 @@ nfe_attach(device_t dev) if_setsendqlen(ifp, NFE_TX_RING_COUNT - 1); if_setsendqready(ifp); - + hw_tsomax.tsomaxbytes = 65535; + hw_tsomax.tsomaxsegcount = NFE_MAX_SCATTER; + hw_tsomax.tsomaxsegsize = NFE_TSO_MAXSGSIZE; + if_hw_tsomax_update(ifp, &hw_tsomax); if (sc->nfe_flags & NFE_HW_CSUM) { if_setcapabilitiesbit(ifp, IFCAP_HWCSUM | IFCAP_TSO4, 0); if_sethwassistbits(ifp, NFE_CSUM_FEATURES | CSUM_TSO, 0); Index: sys/dev/re/if_re.c =================================================================== --- sys/dev/re/if_re.c (revision 286913) +++ sys/dev/re/if_re.c (working copy) @@ -1624,6 +1624,9 @@ re_attach(device_t dev) ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST; ifp->if_ioctl = re_ioctl; ifp->if_start = re_start; + ifp->if_hw_tsomax = 65535; + ifp->if_hw_tsomaxsegcount = RL_NTXSEGS; + ifp->if_hw_tsomaxsegsize = 4096; /* * RTL8168/8111C generates wrong IP checksummed frame if the * packet has IP options so disable TX checksum offloading. Index: sys/dev/sge/if_sge.c =================================================================== --- sys/dev/sge/if_sge.c (revision 286913) +++ sys/dev/sge/if_sge.c (working copy) @@ -618,6 +618,9 @@ sge_attach(device_t dev) ifp->if_snd.ifq_drv_maxlen = SGE_TX_RING_CNT - 1; IFQ_SET_MAXLEN(&ifp->if_snd, ifp->if_snd.ifq_drv_maxlen); IFQ_SET_READY(&ifp->if_snd); + ifp->if_hw_tsomax = IP_MAXPACKET; + ifp->if_hw_tsomaxsegcount = SGE_MAXTXSEGS; + ifp->if_hw_tsomaxsegsize = SGE_TSO_MAXSEGSIZE; ifp->if_capabilities = IFCAP_TXCSUM | IFCAP_RXCSUM | IFCAP_TSO4; ifp->if_hwassist = SGE_CSUM_FEATURES | CSUM_TSO; ifp->if_capenable = ifp->if_capabilities;