git: 727bfe3894ab - main - Mechanically convert qlnx(4) to IfAPI
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 24 Mar 2023 15:49:12 UTC
The branch main has been updated by jhibbits: URL: https://cgit.FreeBSD.org/src/commit/?id=727bfe3894abaec854e580e52d352a8945f12185 commit 727bfe3894abaec854e580e52d352a8945f12185 Author: Justin Hibbits <jhibbits@FreeBSD.org> AuthorDate: 2022-09-23 15:27:39 +0000 Commit: Justin Hibbits <jhibbits@FreeBSD.org> CommitDate: 2023-03-24 14:09:53 +0000 Mechanically convert qlnx(4) to IfAPI Reviewed By: zlei Sponsored by: Juniper Networks, Inc. Differential Revision: https://reviews.freebsd.org/D37856 --- sys/dev/qlnx/qlnxe/qlnx_def.h | 4 +- sys/dev/qlnx/qlnxe/qlnx_ioctl.c | 2 +- sys/dev/qlnx/qlnxe/qlnx_os.c | 203 +++++++++++++++++++-------------------- sys/dev/qlnx/qlnxr/qlnxr_cm.c | 2 +- sys/dev/qlnx/qlnxr/qlnxr_os.c | 41 +++++--- sys/dev/qlnx/qlnxr/qlnxr_verbs.c | 26 ++--- 6 files changed, 143 insertions(+), 135 deletions(-) diff --git a/sys/dev/qlnx/qlnxe/qlnx_def.h b/sys/dev/qlnx/qlnxe/qlnx_def.h index 87ef7985647d..cc8fb3f5f7eb 100644 --- a/sys/dev/qlnx/qlnxe/qlnx_def.h +++ b/sys/dev/qlnx/qlnxe/qlnx_def.h @@ -371,7 +371,7 @@ struct qlnx_host { uint8_t dev_unit; uint16_t device_id; - struct ifnet *ifp; + if_t ifp; int if_flags; volatile int link_up; struct ifmedia media; @@ -512,7 +512,7 @@ typedef struct qlnx_host qlnx_host_t; #define QL_MIN(x, y) ((x < y) ? x : y) #define QL_RUNNING(ifp) \ - ((ifp->if_drv_flags & (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)) == \ + ((if_getdrvflags(ifp) & (IFF_DRV_RUNNING | IFF_DRV_OACTIVE)) == \ IFF_DRV_RUNNING) #define QLNX_MAX_MTU 9000 diff --git a/sys/dev/qlnx/qlnxe/qlnx_ioctl.c b/sys/dev/qlnx/qlnxe/qlnx_ioctl.c index f87cb8b49921..aa382a1046e3 100644 --- a/sys/dev/qlnx/qlnxe/qlnx_ioctl.c +++ b/sys/dev/qlnx/qlnxe/qlnx_ioctl.c @@ -78,7 +78,7 @@ int qlnx_make_cdev(qlnx_host_t *ha) { ha->ioctl_dev = make_dev(&qlnx_cdevsw, - ha->ifp->if_dunit, + if_getdunit(ha->ifp), UID_ROOT, GID_WHEEL, 0600, diff --git a/sys/dev/qlnx/qlnxe/qlnx_os.c b/sys/dev/qlnx/qlnxe/qlnx_os.c index 9d31024c29c1..bbd4c0fe7e8c 100644 --- a/sys/dev/qlnx/qlnxe/qlnx_os.c +++ b/sys/dev/qlnx/qlnxe/qlnx_os.c @@ -89,19 +89,19 @@ static void qlnx_init_locked(qlnx_host_t *ha); static int qlnx_set_multi(qlnx_host_t *ha, uint32_t add_multi); static int qlnx_set_promisc(qlnx_host_t *ha); static int qlnx_set_allmulti(qlnx_host_t *ha); -static int qlnx_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data); -static int qlnx_media_change(struct ifnet *ifp); -static void qlnx_media_status(struct ifnet *ifp, struct ifmediareq *ifmr); +static int qlnx_ioctl(if_t ifp, u_long cmd, caddr_t data); +static int qlnx_media_change(if_t ifp); +static void qlnx_media_status(if_t ifp, struct ifmediareq *ifmr); static void qlnx_stop(qlnx_host_t *ha); static int qlnx_send(qlnx_host_t *ha, struct qlnx_fastpath *fp, struct mbuf **m_headp); static int qlnx_get_ifq_snd_maxlen(qlnx_host_t *ha); static uint32_t qlnx_get_optics(qlnx_host_t *ha, struct qlnx_link_output *if_link); -static int qlnx_transmit(struct ifnet *ifp, struct mbuf *mp); -static int qlnx_transmit_locked(struct ifnet *ifp, struct qlnx_fastpath *fp, +static int qlnx_transmit(if_t ifp, struct mbuf *mp); +static int qlnx_transmit_locked(if_t ifp, struct qlnx_fastpath *fp, struct mbuf *mp); -static void qlnx_qflush(struct ifnet *ifp); +static void qlnx_qflush(if_t ifp); static int qlnx_alloc_parent_dma_tag(qlnx_host_t *ha); static void qlnx_free_parent_dma_tag(qlnx_host_t *ha); @@ -549,7 +549,7 @@ qlnx_fp_taskqueue(void *context, int pending) { struct qlnx_fastpath *fp; qlnx_host_t *ha; - struct ifnet *ifp; + if_t ifp; fp = context; @@ -560,7 +560,7 @@ qlnx_fp_taskqueue(void *context, int pending) ifp = ha->ifp; - if(ifp->if_drv_flags & IFF_DRV_RUNNING) { + if(if_getdrvflags(ifp) & IFF_DRV_RUNNING) { if (!drbr_empty(ifp, fp->tx_br)) { if(mtx_trylock(&fp->tx_mtx)) { #ifdef QLNX_TRACE_PERF_DATA @@ -1378,7 +1378,7 @@ qlnx_trigger_dump(qlnx_host_t *ha) int i; if (ha->ifp != NULL) - ha->ifp->if_drv_flags &= ~(IFF_DRV_OACTIVE | IFF_DRV_RUNNING); + if_setdrvflagbits(ha->ifp, 0, (IFF_DRV_OACTIVE | IFF_DRV_RUNNING)); QL_DPRINT2(ha, "enter\n"); @@ -2303,7 +2303,7 @@ static void qlnx_init_ifnet(device_t dev, qlnx_host_t *ha) { uint16_t device_id; - struct ifnet *ifp; + if_t ifp; ifp = ha->ifp = if_alloc(IFT_ETHER); @@ -2315,31 +2315,30 @@ qlnx_init_ifnet(device_t dev, qlnx_host_t *ha) device_id = pci_get_device(ha->pci_dev); if (device_id == QLOGIC_PCI_DEVICE_ID_1634) - ifp->if_baudrate = IF_Gbps(40); + if_setbaudrate(ifp, IF_Gbps(40)); else if ((device_id == QLOGIC_PCI_DEVICE_ID_1656) || (device_id == QLOGIC_PCI_DEVICE_ID_8070)) - ifp->if_baudrate = IF_Gbps(25); + if_setbaudrate(ifp, IF_Gbps(25)); else if (device_id == QLOGIC_PCI_DEVICE_ID_1654) - ifp->if_baudrate = IF_Gbps(50); + if_setbaudrate(ifp, IF_Gbps(50)); else if (device_id == QLOGIC_PCI_DEVICE_ID_1644) - ifp->if_baudrate = IF_Gbps(100); + if_setbaudrate(ifp, IF_Gbps(100)); - ifp->if_capabilities = IFCAP_LINKSTATE; + if_setcapabilities(ifp, IFCAP_LINKSTATE); - ifp->if_init = qlnx_init; - ifp->if_softc = ha; - ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST; - ifp->if_ioctl = qlnx_ioctl; - ifp->if_transmit = qlnx_transmit; - ifp->if_qflush = qlnx_qflush; + if_setinitfn(ifp, qlnx_init); + if_setsoftc(ifp, ha); + if_setflags(ifp, IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST); + if_setioctlfn(ifp, qlnx_ioctl); + if_settransmitfn(ifp, qlnx_transmit); + if_setqflushfn(ifp, qlnx_qflush); - IFQ_SET_MAXLEN(&ifp->if_snd, qlnx_get_ifq_snd_maxlen(ha)); - ifp->if_snd.ifq_drv_maxlen = qlnx_get_ifq_snd_maxlen(ha); - IFQ_SET_READY(&ifp->if_snd); + if_setsendqlen(ifp, qlnx_get_ifq_snd_maxlen(ha)); + if_setsendqready(ifp); if_setgetcounterfn(ifp, qlnx_get_counter); - ha->max_frame_size = ifp->if_mtu + ETHER_HDR_LEN + ETHER_CRC_LEN; + ha->max_frame_size = if_getmtu(ifp) + ETHER_HDR_LEN + ETHER_CRC_LEN; memcpy(ha->primary_mac, qlnx_get_mac_addr(ha), ETH_ALEN); @@ -2359,33 +2358,33 @@ qlnx_init_ifnet(device_t dev, qlnx_host_t *ha) } ether_ifattach(ifp, ha->primary_mac); - bcopy(IF_LLADDR(ha->ifp), ha->primary_mac, ETHER_ADDR_LEN); + bcopy(if_getlladdr(ha->ifp), ha->primary_mac, ETHER_ADDR_LEN); - ifp->if_capabilities = IFCAP_HWCSUM; - ifp->if_capabilities |= IFCAP_JUMBO_MTU; + if_setcapabilities(ifp, IFCAP_HWCSUM); + if_setcapabilitiesbit(ifp, IFCAP_JUMBO_MTU, 0); - ifp->if_capabilities |= IFCAP_VLAN_MTU; - ifp->if_capabilities |= IFCAP_VLAN_HWTAGGING; - ifp->if_capabilities |= IFCAP_VLAN_HWFILTER; - ifp->if_capabilities |= IFCAP_VLAN_HWCSUM; - ifp->if_capabilities |= IFCAP_VLAN_HWTSO; - ifp->if_capabilities |= IFCAP_TSO4; - ifp->if_capabilities |= IFCAP_TSO6; - ifp->if_capabilities |= IFCAP_LRO; + if_setcapabilitiesbit(ifp, IFCAP_VLAN_MTU, 0); + if_setcapabilitiesbit(ifp, IFCAP_VLAN_HWTAGGING, 0); + if_setcapabilitiesbit(ifp, IFCAP_VLAN_HWFILTER, 0); + if_setcapabilitiesbit(ifp, IFCAP_VLAN_HWCSUM, 0); + if_setcapabilitiesbit(ifp, IFCAP_VLAN_HWTSO, 0); + if_setcapabilitiesbit(ifp, IFCAP_TSO4, 0); + if_setcapabilitiesbit(ifp, IFCAP_TSO6, 0); + if_setcapabilitiesbit(ifp, IFCAP_LRO, 0); - ifp->if_hw_tsomax = QLNX_MAX_TSO_FRAME_SIZE - - (ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN); - ifp->if_hw_tsomaxsegcount = QLNX_MAX_SEGMENTS - 1 /* hdr */; - ifp->if_hw_tsomaxsegsize = QLNX_MAX_TX_MBUF_SIZE; + if_sethwtsomax(ifp, QLNX_MAX_TSO_FRAME_SIZE - + (ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN)); + if_sethwtsomaxsegcount(ifp, QLNX_MAX_SEGMENTS - 1); /* hdr */ + if_sethwtsomaxsegsize(ifp, QLNX_MAX_TX_MBUF_SIZE); - ifp->if_capenable = ifp->if_capabilities; + if_setcapenable(ifp, if_getcapabilities(ifp)); - ifp->if_hwassist = CSUM_IP; - ifp->if_hwassist |= CSUM_TCP | CSUM_UDP; - ifp->if_hwassist |= CSUM_TCP_IPV6 | CSUM_UDP_IPV6; - ifp->if_hwassist |= CSUM_TSO; + if_sethwassist(ifp, CSUM_IP); + if_sethwassistbits(ifp, CSUM_TCP | CSUM_UDP, 0); + if_sethwassistbits(ifp, CSUM_TCP_IPV6 | CSUM_UDP_IPV6, 0); + if_sethwassistbits(ifp, CSUM_TSO, 0); - ifp->if_hdrlen = sizeof(struct ether_vlan_header); + if_setifheaderlen(ifp, sizeof(struct ether_vlan_header)); ifmedia_init(&ha->media, IFM_IMASK, qlnx_media_change,\ qlnx_media_status); @@ -2423,15 +2422,15 @@ qlnx_init_ifnet(device_t dev, qlnx_host_t *ha) static void qlnx_init_locked(qlnx_host_t *ha) { - struct ifnet *ifp = ha->ifp; + if_t ifp = ha->ifp; QL_DPRINT1(ha, "Driver Initialization start \n"); qlnx_stop(ha); if (qlnx_load(ha) == 0) { - ifp->if_drv_flags |= IFF_DRV_RUNNING; - ifp->if_drv_flags &= ~IFF_DRV_OACTIVE; + if_setdrvflagbits(ifp, IFF_DRV_RUNNING, 0); + if_setdrvflagbits(ifp, 0, IFF_DRV_OACTIVE); #ifdef QLNX_ENABLE_IWARP if (qlnx_vf_device(ha) != 0) { @@ -2582,7 +2581,7 @@ static int qlnx_set_multi(qlnx_host_t *ha, uint32_t add_multi) { uint8_t mta[QLNX_MAX_NUM_MULTICAST_ADDRS * ETHER_HDR_LEN]; - struct ifnet *ifp = ha->ifp; + if_t ifp = ha->ifp; u_int mcnt; if (qlnx_vf_device(ha) == 0) @@ -2631,22 +2630,22 @@ qlnx_set_allmulti(qlnx_host_t *ha) } static int -qlnx_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) +qlnx_ioctl(if_t ifp, u_long cmd, caddr_t data) { int ret = 0, mask; struct ifreq *ifr = (struct ifreq *)data; struct ifaddr *ifa = (struct ifaddr *)data; qlnx_host_t *ha; - ha = (qlnx_host_t *)ifp->if_softc; + ha = (qlnx_host_t *)if_getsoftc(ifp); switch (cmd) { case SIOCSIFADDR: QL_DPRINT4(ha, "SIOCSIFADDR (0x%lx)\n", cmd); if (ifa->ifa_addr->sa_family == AF_INET) { - ifp->if_flags |= IFF_UP; - if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) { + if_setflagbits(ifp, IFF_UP, 0); + if (!(if_getdrvflags(ifp) & IFF_DRV_RUNNING)) { QLNX_LOCK(ha); qlnx_init_locked(ha); QLNX_UNLOCK(ha); @@ -2667,10 +2666,10 @@ qlnx_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) ret = EINVAL; } else { QLNX_LOCK(ha); - ifp->if_mtu = ifr->ifr_mtu; + if_setmtu(ifp, ifr->ifr_mtu); ha->max_frame_size = - ifp->if_mtu + ETHER_HDR_LEN + ETHER_CRC_LEN; - if (ifp->if_drv_flags & IFF_DRV_RUNNING) { + if_getmtu(ifp) + ETHER_HDR_LEN + ETHER_CRC_LEN; + if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) { qlnx_init_locked(ha); } @@ -2684,24 +2683,24 @@ qlnx_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) QLNX_LOCK(ha); - if (ifp->if_flags & IFF_UP) { - if (ifp->if_drv_flags & IFF_DRV_RUNNING) { - if ((ifp->if_flags ^ ha->if_flags) & + if (if_getflags(ifp) & IFF_UP) { + if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) { + if ((if_getflags(ifp) ^ ha->if_flags) & IFF_PROMISC) { ret = qlnx_set_promisc(ha); - } else if ((ifp->if_flags ^ ha->if_flags) & + } else if ((if_getflags(ifp) ^ ha->if_flags) & IFF_ALLMULTI) { ret = qlnx_set_allmulti(ha); } } else { - ha->max_frame_size = ifp->if_mtu + + ha->max_frame_size = if_getmtu(ifp) + ETHER_HDR_LEN + ETHER_CRC_LEN; qlnx_init_locked(ha); } } else { - if (ifp->if_drv_flags & IFF_DRV_RUNNING) + if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) qlnx_stop(ha); - ha->if_flags = ifp->if_flags; + ha->if_flags = if_getflags(ifp); } QLNX_UNLOCK(ha); @@ -2710,7 +2709,7 @@ qlnx_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) case SIOCADDMULTI: QL_DPRINT4(ha, "%s (0x%lx)\n", "SIOCADDMULTI", cmd); - if (ifp->if_drv_flags & IFF_DRV_RUNNING) { + if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) { if (qlnx_set_multi(ha, 1)) ret = EINVAL; } @@ -2719,7 +2718,7 @@ qlnx_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) case SIOCDELMULTI: QL_DPRINT4(ha, "%s (0x%lx)\n", "SIOCDELMULTI", cmd); - if (ifp->if_drv_flags & IFF_DRV_RUNNING) { + if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) { if (qlnx_set_multi(ha, 0)) ret = EINVAL; } @@ -2734,26 +2733,26 @@ qlnx_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) case SIOCSIFCAP: - mask = ifr->ifr_reqcap ^ ifp->if_capenable; + mask = ifr->ifr_reqcap ^ if_getcapenable(ifp); QL_DPRINT4(ha, "SIOCSIFCAP (0x%lx)\n", cmd); if (mask & IFCAP_HWCSUM) - ifp->if_capenable ^= IFCAP_HWCSUM; + if_togglecapenable(ifp, IFCAP_HWCSUM); if (mask & IFCAP_TSO4) - ifp->if_capenable ^= IFCAP_TSO4; + if_togglecapenable(ifp, IFCAP_TSO4); if (mask & IFCAP_TSO6) - ifp->if_capenable ^= IFCAP_TSO6; + if_togglecapenable(ifp, IFCAP_TSO6); if (mask & IFCAP_VLAN_HWTAGGING) - ifp->if_capenable ^= IFCAP_VLAN_HWTAGGING; + if_togglecapenable(ifp, IFCAP_VLAN_HWTAGGING); if (mask & IFCAP_VLAN_HWTSO) - ifp->if_capenable ^= IFCAP_VLAN_HWTSO; + if_togglecapenable(ifp, IFCAP_VLAN_HWTSO); if (mask & IFCAP_LRO) - ifp->if_capenable ^= IFCAP_LRO; + if_togglecapenable(ifp, IFCAP_LRO); QLNX_LOCK(ha); - if (ifp->if_drv_flags & IFF_DRV_RUNNING) + if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) qlnx_init_locked(ha); QLNX_UNLOCK(ha); @@ -2819,13 +2818,13 @@ qlnx_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) } static int -qlnx_media_change(struct ifnet *ifp) +qlnx_media_change(if_t ifp) { qlnx_host_t *ha; struct ifmedia *ifm; int ret = 0; - ha = (qlnx_host_t *)ifp->if_softc; + ha = (qlnx_host_t *)if_getsoftc(ifp); QL_DPRINT2(ha, "enter\n"); @@ -2840,11 +2839,11 @@ qlnx_media_change(struct ifnet *ifp) } static void -qlnx_media_status(struct ifnet *ifp, struct ifmediareq *ifmr) +qlnx_media_status(if_t ifp, struct ifmediareq *ifmr) { qlnx_host_t *ha; - ha = (qlnx_host_t *)ifp->if_softc; + ha = (qlnx_host_t *)if_getsoftc(ifp); QL_DPRINT2(ha, "enter\n"); @@ -2991,7 +2990,7 @@ qlnx_tx_int(qlnx_host_t *ha, struct qlnx_fastpath *fp, } static int -qlnx_transmit_locked(struct ifnet *ifp,struct qlnx_fastpath *fp, struct mbuf *mp) +qlnx_transmit_locked(if_t ifp, struct qlnx_fastpath *fp, struct mbuf *mp) { int ret = 0; struct qlnx_tx_queue *txq; @@ -3001,7 +3000,7 @@ qlnx_transmit_locked(struct ifnet *ifp,struct qlnx_fastpath *fp, struct mbuf * txq = fp->txq[0]; ha = (qlnx_host_t *)fp->edev; - if ((!(ifp->if_drv_flags & IFF_DRV_RUNNING)) || (!ha->link_up)) { + if ((!(if_getdrvflags(ifp) & IFF_DRV_RUNNING)) || (!ha->link_up)) { if(mp != NULL) ret = drbr_enqueue(ifp, fp->tx_br, mp); return (ret); @@ -3042,9 +3041,9 @@ qlnx_transmit_locked_exit: } static int -qlnx_transmit(struct ifnet *ifp, struct mbuf *mp) +qlnx_transmit(if_t ifp, struct mbuf *mp) { - qlnx_host_t *ha = (qlnx_host_t *)ifp->if_softc; + qlnx_host_t *ha = (qlnx_host_t *)if_getsoftc(ifp); struct qlnx_fastpath *fp; int rss_id = 0, ret = 0; @@ -3092,14 +3091,14 @@ qlnx_transmit_exit: } static void -qlnx_qflush(struct ifnet *ifp) +qlnx_qflush(if_t ifp) { int rss_id; struct qlnx_fastpath *fp; struct mbuf *mp; qlnx_host_t *ha; - ha = (qlnx_host_t *)ifp->if_softc; + ha = (qlnx_host_t *)if_getsoftc(ifp); QL_DPRINT2(ha, "enter\n"); @@ -3741,10 +3740,10 @@ qlnx_send(qlnx_host_t *ha, struct qlnx_fastpath *fp, struct mbuf **m_headp) static void qlnx_stop(qlnx_host_t *ha) { - struct ifnet *ifp = ha->ifp; + if_t ifp = ha->ifp; int i; - ifp->if_drv_flags &= ~(IFF_DRV_OACTIVE | IFF_DRV_RUNNING); + if_setdrvflagbits(ifp, 0, (IFF_DRV_OACTIVE | IFF_DRV_RUNNING)); /* * We simply lock and unlock each fp->tx_mtx to @@ -3928,7 +3927,7 @@ qlnx_tpa_start(qlnx_host_t *ha, struct eth_fast_path_rx_tpa_start_cqe *cqe) { uint32_t agg_index; - struct ifnet *ifp = ha->ifp; + if_t ifp = ha->ifp; struct mbuf *mp; struct mbuf *mpf = NULL, *mpl = NULL, *mpc = NULL; struct sw_rx_data *sw_rx_data; @@ -4360,7 +4359,7 @@ qlnx_tpa_end(qlnx_host_t *ha, struct qlnx_fastpath *fp, struct mbuf *mp; uint32_t agg_index; uint32_t len = 0; - struct ifnet *ifp = ha->ifp; + if_t ifp = ha->ifp; QL_DPRINT7(ha, "[%d]: enter\n \ \t type = 0x%x\n \ @@ -4511,7 +4510,7 @@ qlnx_tpa_end(qlnx_host_t *ha, struct qlnx_fastpath *fp, fp->rss_id, mp->m_pkthdr.csum_data, (uint64_t)mp->m_pkthdr.csum_flags, mp->m_len, mp->m_pkthdr.len); - (*ifp->if_input)(ifp, mp); + if_input(ifp, mp); rxq->tpa_info[agg_index].mpf = NULL; rxq->tpa_info[agg_index].mpl = NULL; @@ -4527,7 +4526,7 @@ qlnx_rx_int(qlnx_host_t *ha, struct qlnx_fastpath *fp, int budget, uint16_t hw_comp_cons, sw_comp_cons; int rx_pkt = 0; struct qlnx_rx_queue *rxq = fp->rxq; - struct ifnet *ifp = ha->ifp; + if_t ifp = ha->ifp; struct ecore_dev *cdev = &ha->cdev; struct ecore_hwfn *p_hwfn; @@ -4749,10 +4748,10 @@ qlnx_rx_int(qlnx_host_t *ha, struct qlnx_fastpath *fp, int budget, if (lro_enable) tcp_lro_queue_mbuf(lro, mp); else - (*ifp->if_input)(ifp, mp); + if_input(ifp, mp); #else - (*ifp->if_input)(ifp, mp); + if_input(ifp, mp); #endif /* #ifdef QLNX_SOFT_LRO */ @@ -4814,7 +4813,7 @@ qlnx_fp_isr(void *arg) struct qlnx_tx_queue *txq; uint16_t elem_left; - lro_enable = ha->ifp->if_capenable & IFCAP_LRO; + lro_enable = if_getcapenable(ha->ifp) & IFCAP_LRO; ecore_sb_ack(fp->sb_info, IGU_INT_DISABLE, 0); @@ -6287,7 +6286,7 @@ static void qlnx_free_tx_br(qlnx_host_t *ha, struct qlnx_fastpath *fp) { struct mbuf *mp; - struct ifnet *ifp = ha->ifp; + if_t ifp = ha->ifp; if (mtx_initialized(&fp->tx_mtx)) { if (fp->tx_br != NULL) { @@ -6632,7 +6631,7 @@ qlnx_start_queues(qlnx_host_t *ha) struct ecore_dev *cdev = &ha->cdev; struct ecore_rss_params *rss_params = &ha->rss_params; struct qlnx_update_vport_params vport_update_params; - struct ifnet *ifp; + if_t ifp; struct ecore_hwfn *p_hwfn; struct ecore_sge_tpa_params tpa_params; struct ecore_queue_start_common_params qparams; @@ -6649,10 +6648,10 @@ qlnx_start_queues(qlnx_host_t *ha) } #ifndef QLNX_SOFT_LRO - hw_lro_enable = ifp->if_capenable & IFCAP_LRO; + hw_lro_enable = if_getcapenable(ifp) & IFCAP_LRO; #endif /* #ifndef QLNX_SOFT_LRO */ - rc = qlnx_start_vport(cdev, vport_id, ifp->if_mtu, drop_ttl0_flg, + rc = qlnx_start_vport(cdev, vport_id, if_getmtu(ifp), drop_ttl0_flg, vlan_removal_en, tx_switching, hw_lro_enable); if (rc) { @@ -6662,7 +6661,7 @@ qlnx_start_queues(qlnx_host_t *ha) QL_DPRINT2(ha, "Start vport ramrod passed, " "vport_id = %d, MTU = %d, vlan_removal_en = %d\n", - vport_id, (int)(ifp->if_mtu + 0xe), vlan_removal_en); + vport_id, (int)(if_getmtu(ifp) + 0xe), vlan_removal_en); for_each_rss(i) { struct ecore_rxq_start_ret_params rx_ret_params; @@ -6800,8 +6799,8 @@ qlnx_start_queues(qlnx_host_t *ha) tpa_params.tpa_gro_consistent_flg = 0; tpa_params.tpa_max_aggs_num = ETH_TPA_MAX_AGGS_NUM; tpa_params.tpa_max_size = (uint16_t)(-1); - tpa_params.tpa_min_size_to_start = ifp->if_mtu/2; - tpa_params.tpa_min_size_to_cont = ifp->if_mtu/2; + tpa_params.tpa_min_size_to_start = if_getmtu(ifp) / 2; + tpa_params.tpa_min_size_to_cont = if_getmtu(ifp) / 2; vport_update_params.sge_tpa_params = &tpa_params; } @@ -7285,12 +7284,12 @@ qlnx_drain_soft_lro(qlnx_host_t *ha) { #ifdef QLNX_SOFT_LRO - struct ifnet *ifp; + if_t ifp; int i; ifp = ha->ifp; - if (ifp->if_capenable & IFCAP_LRO) { + if (if_getcapenable(ifp) & IFCAP_LRO) { for (i = 0; i < ha->num_rss; i++) { struct qlnx_fastpath *fp = &ha->fp_array[i]; struct lro_ctrl *lro; diff --git a/sys/dev/qlnx/qlnxr/qlnxr_cm.c b/sys/dev/qlnx/qlnxr/qlnxr_cm.c index 1f418f83ad37..569dbc6d7472 100644 --- a/sys/dev/qlnx/qlnxr/qlnxr_cm.c +++ b/sys/dev/qlnx/qlnxr/qlnxr_cm.c @@ -332,7 +332,7 @@ int qlnxr_ll2_start(struct qlnxr_dev *dev, memset(&data, 0, sizeof(data)); data.input.conn_type = ECORE_LL2_TYPE_ROCE; - data.input.mtu = dev->ha->ifp->if_mtu; + data.input.mtu = if_getmtu(dev->ha->ifp); data.input.rx_num_desc = 8 * 1024; data.input.rx_drop_ttl0_flg = 1; data.input.rx_vlan_removal_en = 0; diff --git a/sys/dev/qlnx/qlnxr/qlnxr_os.c b/sys/dev/qlnx/qlnxr/qlnxr_os.c index aa8386808ebb..0b1a7b67cb1c 100644 --- a/sys/dev/qlnx/qlnxr/qlnxr_os.c +++ b/sys/dev/qlnx/qlnxr/qlnxr_os.c @@ -857,25 +857,34 @@ qlnxr_build_sgid_mac(union ib_gid *sgid, unsigned char *mac_addr, static bool qlnxr_add_sgid(struct qlnxr_dev *dev, union ib_gid *new_sgid); -static void -qlnxr_add_ip_based_gid(struct qlnxr_dev *dev, struct ifnet *ifp) -{ - struct ifaddr *ifa; +struct qlnx_cb_s { + struct qlnxr_dev *dev; union ib_gid gid; +}; - CK_STAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) { - if (ifa->ifa_addr && ifa->ifa_addr->sa_family == AF_INET) { - QL_DPRINT12(dev->ha, "IP address : %x\n", ((struct sockaddr_in *) ifa->ifa_addr)->sin_addr.s_addr); - ipv6_addr_set_v4mapped( - ((struct sockaddr_in *) ifa->ifa_addr)->sin_addr.s_addr, - (struct in6_addr *)&gid); - QL_DPRINT12(dev->ha, "gid generated : %llx\n", gid); +static u_int +qlnxr_add_ip_based_gid_cb(void *arg, struct ifaddr *ifa, u_int count) +{ + struct qlnx_cb_s *cba = arg; - qlnxr_add_sgid(dev, &gid); - } - } + QL_DPRINT12(cba->dev->ha, "IP address : %x\n", ((struct sockaddr_in *) ifa->ifa_addr)->sin_addr.s_addr); + ipv6_addr_set_v4mapped( + ((struct sockaddr_in *) ifa->ifa_addr)->sin_addr.s_addr, + (struct in6_addr *)&cba->gid); + QL_DPRINT12(cba->dev->ha, "gid generated : %llx\n", cba->gid); + + qlnxr_add_sgid(cba->dev, &cba->gid); + return (1); +} + +static void +qlnxr_add_ip_based_gid(struct qlnxr_dev *dev, if_t ifp) +{ + struct qlnx_cb_s cba; + + if_foreach_addr_type(ifp, AF_INET, qlnxr_add_ip_based_gid_cb, &cba); for (int i = 0; i < 16; i++) { - QL_DPRINT12(dev->ha, "gid generated : %x\n", gid.raw[i]); + QL_DPRINT12(dev->ha, "gid generated : %x\n", cba.gid.raw[i]); } } @@ -981,7 +990,7 @@ qlnxr_add_default_sgid(struct qlnxr_dev *dev) static int qlnxr_addr_event (struct qlnxr_dev *dev, unsigned long event, - struct ifnet *ifp, + if_t ifp, union ib_gid *gid) { bool is_vlan = false; diff --git a/sys/dev/qlnx/qlnxr/qlnxr_verbs.c b/sys/dev/qlnx/qlnxr/qlnxr_verbs.c index 310ef2dc6e9f..bc2da02eae45 100644 --- a/sys/dev/qlnx/qlnxr/qlnxr_verbs.c +++ b/sys/dev/qlnx/qlnxr/qlnxr_verbs.c @@ -628,7 +628,7 @@ qlnxr_query_port(struct ib_device *ibdev, uint8_t port, } attr->max_mtu = IB_MTU_4096; - attr->active_mtu = iboe_get_mtu(dev->ha->ifp->if_mtu); + attr->active_mtu = iboe_get_mtu(if_getmtu(dev->ha->ifp)); attr->lid = 0; attr->lmc = 0; attr->sm_lid = 0; @@ -3449,12 +3449,12 @@ qlnxr_modify_qp(struct ib_qp *ibqp, } qp->mtu = min(ib_mtu_enum_to_int(attr->path_mtu), ib_mtu_enum_to_int( - iboe_get_mtu(dev->ha->ifp->if_mtu))); + iboe_get_mtu(if_getmtu(dev->ha->ifp)))); } if (qp->mtu == 0) { qp->mtu = ib_mtu_enum_to_int( - iboe_get_mtu(dev->ha->ifp->if_mtu)); + iboe_get_mtu(if_getmtu(dev->ha->ifp))); QL_DPRINT12(ha, "fixing zetoed MTU to qp->mtu = %d\n", qp->mtu); } @@ -3502,7 +3502,7 @@ qlnxr_modify_qp(struct ib_qp *ibqp, qp_params.mtu = qp->mtu; } else { qp_params.mtu = ib_mtu_enum_to_int( - iboe_get_mtu(dev->ha->ifp->if_mtu)); + iboe_get_mtu(if_getmtu(dev->ha->ifp))); } } @@ -4269,7 +4269,7 @@ qlnxr_post_send(struct ib_qp *ibqp, QL_DPRINT12(ha, "exit[ibqp, wr, bad_wr] = [%p, %p, %p]\n", ibqp, wr, bad_wr); - if (!(ha->ifp->if_drv_flags & IFF_DRV_RUNNING)) + if (!(if_getdrvflags(ha->ifp) & IFF_DRV_RUNNING)) return -EINVAL; if (qp->qp_type == IB_QPT_GSI) @@ -4629,7 +4629,7 @@ qlnxr_post_recv(struct ib_qp *ibqp, ha = dev->ha; - if (!(ha->ifp->if_drv_flags & IFF_DRV_RUNNING)) + if (!(if_getdrvflags(ha->ifp) & IFF_DRV_RUNNING)) return -EINVAL; QL_DPRINT12(ha, "enter\n"); @@ -5224,7 +5224,7 @@ qlnxr_poll_cq(struct ib_cq *ibcq, int num_entries, struct ib_wc *wc) QL_DPRINT12(ha, "enter\n"); - if (!(ha->ifp->if_drv_flags & IFF_DRV_RUNNING)) + if (!(if_getdrvflags(ha->ifp) & IFF_DRV_RUNNING)) return -EINVAL; if (cq->destroyed) { @@ -5323,7 +5323,7 @@ qlnxr_arm_cq(struct ib_cq *ibcq, enum ib_cq_notify_flags flags) "cp = %p cons = 0x%x cq_type = 0x%x\n", ibcq, flags, cq, cq->cq_cons, cq->cq_type); - if (!(ha->ifp->if_drv_flags & IFF_DRV_RUNNING)) + if (!(if_getdrvflags(ha->ifp) & IFF_DRV_RUNNING)) return -EINVAL; if (cq->destroyed) { @@ -5899,7 +5899,7 @@ qlnxr_iw_mpa_reply(void *context, QL_DPRINT12(ha, "enter\n"); - if (!(ha->ifp->if_drv_flags & IFF_DRV_RUNNING)) + if (!(if_getdrvflags(ha->ifp) & IFF_DRV_RUNNING)) return -EINVAL; bzero(&rtr_in, sizeof(struct ecore_iwarp_send_rtr_in)); @@ -6089,7 +6089,7 @@ qlnxr_iw_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param) QL_DPRINT12(ha, "[cm_id, conn_param] = [%p, %p] " "enter \n", cm_id, conn_param); - if (!(ha->ifp->if_drv_flags & IFF_DRV_RUNNING)) + if (!(if_getdrvflags(ha->ifp) & IFF_DRV_RUNNING)) return -EINVAL; qp = idr_find(&dev->qpidr, conn_param->qpn); @@ -6127,7 +6127,7 @@ qlnxr_iw_connect(struct iw_cm_id *cm_id, struct iw_cm_conn_param *conn_param) in_params.cm_info.remote_port = ntohs(raddr->sin_port); in_params.cm_info.local_port = ntohs(laddr->sin_port); in_params.cm_info.vlan = 0; - in_params.mss = dev->ha->ifp->if_mtu - 40; + in_params.mss = if_getmtu(dev->ha->ifp) - 40; QL_DPRINT12(ha, "remote_ip = [%d.%d.%d.%d] " "local_ip = [%d.%d.%d.%d] remote_port = %d local_port = %d " @@ -6192,7 +6192,7 @@ qlnxr_iw_create_listen(struct iw_cm_id *cm_id, int backlog) QL_DPRINT12(ha, "enter\n"); - if (!(ha->ifp->if_drv_flags & IFF_DRV_RUNNING)) + if (!(if_getdrvflags(ha->ifp) & IFF_DRV_RUNNING)) return -EINVAL; laddr = (struct sockaddr_in *)&cm_id->local_addr; @@ -6284,7 +6284,7 @@ qlnxr_iw_accept(struct iw_cm_id *cm_id, QL_DPRINT12(ha, "enter qpid=%d\n", conn_param->qpn); - if (!(ha->ifp->if_drv_flags & IFF_DRV_RUNNING)) + if (!(if_getdrvflags(ha->ifp) & IFF_DRV_RUNNING)) return -EINVAL; qp = idr_find(&dev->qpidr, conn_param->qpn);