mirror of
https://github.com/freebsd/freebsd-src
synced 2024-10-17 13:53:39 +00:00
Add TSO support.
Tested by: wilko, Pieter de Goeje < pieter AT degoeje DOT nl >
This commit is contained in:
parent
960fd5b3d0
commit
dc74159da6
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=164463
|
@ -1258,8 +1258,8 @@ re_attach(dev)
|
||||||
ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
|
ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
|
||||||
ifp->if_ioctl = re_ioctl;
|
ifp->if_ioctl = re_ioctl;
|
||||||
ifp->if_start = re_start;
|
ifp->if_start = re_start;
|
||||||
ifp->if_hwassist = RE_CSUM_FEATURES;
|
ifp->if_hwassist = RE_CSUM_FEATURES | CSUM_TSO;
|
||||||
ifp->if_capabilities = IFCAP_HWCSUM;
|
ifp->if_capabilities = IFCAP_HWCSUM | IFCAP_TSO4;
|
||||||
ifp->if_capenable = ifp->if_capabilities;
|
ifp->if_capenable = ifp->if_capabilities;
|
||||||
ifp->if_watchdog = re_watchdog;
|
ifp->if_watchdog = re_watchdog;
|
||||||
ifp->if_init = re_init;
|
ifp->if_init = re_init;
|
||||||
|
@ -2032,12 +2032,18 @@ re_encap(sc, m_head, idx)
|
||||||
|
|
||||||
arg.rl_flags = 0;
|
arg.rl_flags = 0;
|
||||||
|
|
||||||
if ((*m_head)->m_pkthdr.csum_flags & CSUM_IP)
|
if (((*m_head)->m_pkthdr.csum_flags & CSUM_TSO) != 0)
|
||||||
arg.rl_flags |= RL_TDESC_CMD_IPCSUM;
|
arg.rl_flags = RL_TDESC_CMD_LGSEND |
|
||||||
if ((*m_head)->m_pkthdr.csum_flags & CSUM_TCP)
|
((uint32_t)(*m_head)->m_pkthdr.tso_segsz <<
|
||||||
arg.rl_flags |= RL_TDESC_CMD_TCPCSUM;
|
RL_TDESC_CMD_MSSVAL_SHIFT);
|
||||||
if ((*m_head)->m_pkthdr.csum_flags & CSUM_UDP)
|
else {
|
||||||
arg.rl_flags |= RL_TDESC_CMD_UDPCSUM;
|
if ((*m_head)->m_pkthdr.csum_flags & CSUM_IP)
|
||||||
|
arg.rl_flags |= RL_TDESC_CMD_IPCSUM;
|
||||||
|
if ((*m_head)->m_pkthdr.csum_flags & CSUM_TCP)
|
||||||
|
arg.rl_flags |= RL_TDESC_CMD_TCPCSUM;
|
||||||
|
if ((*m_head)->m_pkthdr.csum_flags & CSUM_UDP)
|
||||||
|
arg.rl_flags |= RL_TDESC_CMD_UDPCSUM;
|
||||||
|
}
|
||||||
|
|
||||||
arg.sc = sc;
|
arg.sc = sc;
|
||||||
arg.rl_idx = *idx;
|
arg.rl_idx = *idx;
|
||||||
|
@ -2542,15 +2548,23 @@ re_ioctl(ifp, command, data)
|
||||||
if (mask & IFCAP_HWCSUM) {
|
if (mask & IFCAP_HWCSUM) {
|
||||||
ifp->if_capenable ^= IFCAP_HWCSUM;
|
ifp->if_capenable ^= IFCAP_HWCSUM;
|
||||||
if (ifp->if_capenable & IFCAP_TXCSUM)
|
if (ifp->if_capenable & IFCAP_TXCSUM)
|
||||||
ifp->if_hwassist = RE_CSUM_FEATURES;
|
ifp->if_hwassist |= RE_CSUM_FEATURES;
|
||||||
else
|
else
|
||||||
ifp->if_hwassist = 0;
|
ifp->if_hwassist = ~RE_CSUM_FEATURES;
|
||||||
reinit = 1;
|
reinit = 1;
|
||||||
}
|
}
|
||||||
if (mask & IFCAP_VLAN_HWTAGGING) {
|
if (mask & IFCAP_VLAN_HWTAGGING) {
|
||||||
ifp->if_capenable ^= IFCAP_VLAN_HWTAGGING;
|
ifp->if_capenable ^= IFCAP_VLAN_HWTAGGING;
|
||||||
reinit = 1;
|
reinit = 1;
|
||||||
}
|
}
|
||||||
|
if (mask & IFCAP_TSO4) {
|
||||||
|
ifp->if_capenable ^= IFCAP_TSO4;
|
||||||
|
if ((IFCAP_TSO4 & ifp->if_capenable) &&
|
||||||
|
(IFCAP_TSO4 & ifp->if_capabilities))
|
||||||
|
ifp->if_hwassist |= CSUM_TSO;
|
||||||
|
else
|
||||||
|
ifp->if_hwassist &= ~CSUM_TSO;
|
||||||
|
}
|
||||||
if (reinit && ifp->if_drv_flags & IFF_DRV_RUNNING)
|
if (reinit && ifp->if_drv_flags & IFF_DRV_RUNNING)
|
||||||
re_init(sc);
|
re_init(sc);
|
||||||
VLAN_CAPABILITIES(ifp);
|
VLAN_CAPABILITIES(ifp);
|
||||||
|
|
|
@ -541,6 +541,7 @@ struct rl_desc {
|
||||||
#define RL_TDESC_CMD_UDPCSUM 0x00020000 /* UDP checksum enable */
|
#define RL_TDESC_CMD_UDPCSUM 0x00020000 /* UDP checksum enable */
|
||||||
#define RL_TDESC_CMD_IPCSUM 0x00040000 /* IP header checksum enable */
|
#define RL_TDESC_CMD_IPCSUM 0x00040000 /* IP header checksum enable */
|
||||||
#define RL_TDESC_CMD_MSSVAL 0x07FF0000 /* Large send MSS value */
|
#define RL_TDESC_CMD_MSSVAL 0x07FF0000 /* Large send MSS value */
|
||||||
|
#define RL_TDESC_CMD_MSSVAL_SHIFT 16 /* Large send MSS value shift */
|
||||||
#define RL_TDESC_CMD_LGSEND 0x08000000 /* TCP large send enb */
|
#define RL_TDESC_CMD_LGSEND 0x08000000 /* TCP large send enb */
|
||||||
#define RL_TDESC_CMD_EOF 0x10000000 /* end of frame marker */
|
#define RL_TDESC_CMD_EOF 0x10000000 /* end of frame marker */
|
||||||
#define RL_TDESC_CMD_SOF 0x20000000 /* start of frame marker */
|
#define RL_TDESC_CMD_SOF 0x20000000 /* start of frame marker */
|
||||||
|
|
Loading…
Reference in a new issue