diff options
| author | Wei Hu <whu@FreeBSD.org> | 2023-09-04 14:53:10 +0000 |
|---|---|---|
| committer | Wei Hu <whu@FreeBSD.org> | 2023-09-04 15:04:00 +0000 |
| commit | 643fd7b4bc57de87ddfeb75a8f0bdb27dbb8c3ce (patch) | |
| tree | c5e763dd5ebf54058118dc73b74a492514f9d96a /sys/dev/mana/mana_en.c | |
| parent | 3afe6b525386af1dda7791ea2a9d718fa634d4fd (diff) | |
Diffstat (limited to 'sys/dev/mana/mana_en.c')
| -rw-r--r-- | sys/dev/mana/mana_en.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/sys/dev/mana/mana_en.c b/sys/dev/mana/mana_en.c index fa49e06e4862..56fa4e51ba26 100644 --- a/sys/dev/mana/mana_en.c +++ b/sys/dev/mana/mana_en.c @@ -798,8 +798,7 @@ mana_init_port_context(struct mana_port_context *apc) uint32_t tso_maxsize; int err; - tso_maxsize = MAX_MBUF_FRAGS * MANA_TSO_MAXSEG_SZ - - (ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN); + tso_maxsize = MANA_TSO_MAX_SZ; /* Create DMA tag for tx bufs */ err = bus_dma_tag_create(bus_get_dma_tag(dev), /* parent */ @@ -2712,6 +2711,7 @@ mana_probe_port(struct mana_context *ac, int port_idx, { struct gdma_context *gc = ac->gdma_dev->gdma_context; struct mana_port_context *apc; + uint32_t hwassist; if_t ndev; int err; @@ -2774,11 +2774,21 @@ mana_probe_port(struct mana_context *ac, int port_idx, if_setcapenable(ndev, if_getcapabilities(ndev)); /* TSO parameters */ - if_sethwtsomax(ndev, MAX_MBUF_FRAGS * MANA_TSO_MAXSEG_SZ - + if_sethwtsomax(ndev, MANA_TSO_MAX_SZ - (ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN)); if_sethwtsomaxsegcount(ndev, MAX_MBUF_FRAGS); if_sethwtsomaxsegsize(ndev, PAGE_SIZE); + hwassist = 0; + if (if_getcapenable(ndev) & (IFCAP_TSO4 | IFCAP_TSO6)) + hwassist |= CSUM_TSO; + if (if_getcapenable(ndev) & IFCAP_TXCSUM) + hwassist |= (CSUM_TCP | CSUM_UDP | CSUM_IP); + if (if_getcapenable(ndev) & IFCAP_TXCSUM_IPV6) + hwassist |= (CSUM_UDP_IPV6 | CSUM_TCP_IPV6); + mana_dbg(NULL, "set hwassist 0x%x\n", hwassist); + if_sethwassist(ndev, hwassist); + ifmedia_init(&apc->media, IFM_IMASK, mana_ifmedia_change, mana_ifmedia_status); ifmedia_add(&apc->media, IFM_ETHER | IFM_AUTO, 0, NULL); |
