From owner-svn-src-head@FreeBSD.ORG Sat Feb 11 08:33:53 2012 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7C502106564A; Sat, 11 Feb 2012 08:33:53 +0000 (UTC) (envelope-from bz@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 6ACD18FC14; Sat, 11 Feb 2012 08:33:53 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q1B8XrW1021029; Sat, 11 Feb 2012 08:33:53 GMT (envelope-from bz@svn.freebsd.org) Received: (from bz@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q1B8XrtA021027; Sat, 11 Feb 2012 08:33:53 GMT (envelope-from bz@svn.freebsd.org) Message-Id: <201202110833.q1B8XrtA021027@svn.freebsd.org> From: "Bjoern A. Zeeb" Date: Sat, 11 Feb 2012 08:33:53 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r231511 - head/sys/dev/oce X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Feb 2012 08:33:53 -0000 Author: bz Date: Sat Feb 11 08:33:52 2012 New Revision: 231511 URL: http://svn.freebsd.org/changeset/base/231511 Log: Start to try to hide LRO (and some TSO) bits behind #ifdefs as especially the symbols are not there when compiling a kernel without IP support and we do have users doing so. Modified: head/sys/dev/oce/oce_if.c Modified: head/sys/dev/oce/oce_if.c ============================================================================== --- head/sys/dev/oce/oce_if.c Sat Feb 11 08:12:52 2012 (r231510) +++ head/sys/dev/oce/oce_if.c Sat Feb 11 08:33:52 2012 (r231511) @@ -39,6 +39,9 @@ /* $FreeBSD$ */ +#include "opt_inet6.h" +#include "opt_inet.h" + #include "oce_if.h" @@ -68,8 +71,10 @@ static int oce_tx(POCE_SOFTC sc, struct static void oce_tx_restart(POCE_SOFTC sc, struct oce_wq *wq); static void oce_tx_complete(struct oce_wq *wq, uint32_t wqe_idx, uint32_t status); +#if defined(INET6) || defined(INET) static struct mbuf * oce_tso_setup(POCE_SOFTC sc, struct mbuf **mpp, uint16_t *mss); +#endif static int oce_multiq_transmit(struct ifnet *ifp, struct mbuf *m, struct oce_wq *wq); @@ -77,7 +82,9 @@ static int oce_multiq_transmit(struct i static void oce_discard_rx_comp(struct oce_rq *rq, struct oce_nic_rx_cqe *cqe); static int oce_cqe_vtp_valid(POCE_SOFTC sc, struct oce_nic_rx_cqe *cqe); static int oce_cqe_portid_valid(POCE_SOFTC sc, struct oce_nic_rx_cqe *cqe); +#if defined(INET6) || defined(INET) static void oce_rx_flush_lro(struct oce_rq *rq); +#endif static void oce_rx(struct oce_rq *rq, uint32_t rqe_idx, struct oce_nic_rx_cqe *cqe); @@ -89,7 +96,9 @@ static int oce_vid_config(POCE_SOFTC sc static void oce_mac_addr_set(POCE_SOFTC sc); static int oce_handle_passthrough(struct ifnet *ifp, caddr_t data); static void oce_local_timer(void *arg); +#if defined(INET6) || defined(INET) static int oce_init_lro(POCE_SOFTC sc); +#endif static void oce_if_deactivate(POCE_SOFTC sc); static void oce_if_activate(POCE_SOFTC sc); static void setup_max_queues_want(POCE_SOFTC sc); @@ -238,9 +247,11 @@ oce_attach(device_t dev) goto queues_free; +#if defined(INET6) || defined(INET) rc = oce_init_lro(sc); if (rc) goto ifp_free; +#endif rc = oce_hw_start(sc); @@ -277,8 +288,10 @@ vlan_free: EVENTHANDLER_DEREGISTER(vlan_unconfig, sc->vlan_detach); oce_hw_intr_disable(sc); lro_free: +#if defined(INET6) || defined(INET) oce_free_lro(sc); ifp_free: +#endif ether_ifdetach(sc->ifp); if_free(sc->ifp); queues_free: @@ -462,8 +475,10 @@ oce_ioctl(struct ifnet *ifp, u_long comm oce_vid_config(sc); } +#if defined(INET6) || defined(INET) if (u & IFCAP_LRO) ifp->if_capenable ^= IFCAP_LRO; +#endif break; @@ -798,7 +813,9 @@ oce_tx(POCE_SOFTC sc, struct mbuf **mpp, struct oce_nic_frag_wqe *nicfrag; int num_wqes; uint32_t reg_value; +#if defined(INET6) || defined(INET) uint16_t mss = 0; +#endif m = *mpp; if (!m) @@ -810,8 +827,12 @@ oce_tx(POCE_SOFTC sc, struct mbuf **mpp, } if (m->m_pkthdr.csum_flags & CSUM_TSO) { +#if defined(INET6) || defined(INET) /* consolidate packet buffers for TSO/LSO segment offload */ m = oce_tso_setup(sc, mpp, &mss); +#else + m = NULL; +#endif if (m == NULL) { rc = ENXIO; goto free_ret; @@ -991,17 +1012,22 @@ oce_tx_restart(POCE_SOFTC sc, struct oce } - +#if defined(INET6) || defined(INET) static struct mbuf * oce_tso_setup(POCE_SOFTC sc, struct mbuf **mpp, uint16_t *mss) { struct mbuf *m; +#ifdef INET struct ip *ip; +#endif +#ifdef INET6 struct ip6_hdr *ip6; +#endif struct ether_vlan_header *eh; struct tcphdr *th; + int total_len = 0; uint16_t etype; - int total_len = 0, ehdrlen = 0; + int ehdrlen = 0; m = *mpp; *mss = m->m_pkthdr.tso_segsz; @@ -1025,6 +1051,7 @@ oce_tso_setup(POCE_SOFTC sc, struct mbuf switch (etype) { +#ifdef INET case ETHERTYPE_IP: ip = (struct ip *)(m->m_data + ehdrlen); if (ip->ip_p != IPPROTO_TCP) @@ -1033,6 +1060,8 @@ oce_tso_setup(POCE_SOFTC sc, struct mbuf total_len = ehdrlen + (ip->ip_hl << 2) + (th->th_off << 2); break; +#endif +#ifdef INET6 case ETHERTYPE_IPV6: ip6 = (struct ip6_hdr *)(m->m_data + ehdrlen); if (ip6->ip6_nxt != IPPROTO_TCP) @@ -1041,6 +1070,7 @@ oce_tso_setup(POCE_SOFTC sc, struct mbuf total_len = ehdrlen + sizeof(struct ip6_hdr) + (th->th_off << 2); break; +#endif default: return NULL; } @@ -1052,6 +1082,7 @@ oce_tso_setup(POCE_SOFTC sc, struct mbuf return m; } +#endif /* INET6 || INET */ void @@ -1305,6 +1336,7 @@ oce_rx(struct oce_rq *rq, uint32_t rqe_i } sc->ifp->if_ipackets++; +#if defined(INET6) || defined(INET) /* Try to queue to LRO */ if (IF_LRO_ENABLED(sc) && !(m->m_flags & M_VLANTAG) && @@ -1319,9 +1351,12 @@ oce_rx(struct oce_rq *rq, uint32_t rqe_i } /* If LRO posting fails then try to post to STACK */ } +#endif (*sc->ifp->if_input) (sc->ifp, m); +#if defined(INET6) || defined(INET) post_done: +#endif /* Update rx stats per queue */ rq->rx_stats.rx_pkts++; rq->rx_stats.rx_bytes += cqe->u0.s.pkt_size; @@ -1408,6 +1443,7 @@ oce_cqe_portid_valid(POCE_SOFTC sc, stru } +#if defined(INET6) || defined(INET) static void oce_rx_flush_lro(struct oce_rq *rq) { @@ -1446,11 +1482,12 @@ oce_init_lro(POCE_SOFTC sc) return rc; } - +#endif /* INET6 || INET */ void oce_free_lro(POCE_SOFTC sc) { +#if defined(INET6) || defined(INET) struct lro_ctrl *lro = NULL; int i = 0; @@ -1459,6 +1496,7 @@ oce_free_lro(POCE_SOFTC sc) if (lro) tcp_lro_free(lro); } +#endif } @@ -1567,9 +1605,11 @@ oce_rq_handler(void *arg) rq->rx_stats.rx_compl++; cqe->u0.dw[2] = 0; +#if defined(INET6) || defined(INET) if (IF_LRO_ENABLED(sc) && rq->lro_pkts_queued >= 16) { oce_rx_flush_lro(rq); } +#endif RING_GET(cq->ring, 1); bus_dmamap_sync(cq->ring->dma.tag, @@ -1580,8 +1620,10 @@ oce_rq_handler(void *arg) if (num_cqes >= (IS_XE201(sc) ? 8 : oce_max_rsp_handled)) break; } +#if defined(INET6) || defined(INET) if (IF_LRO_ENABLED(sc)) oce_rx_flush_lro(rq); +#endif if (num_cqes) { oce_arm_cq(sc, cq->cq_id, num_cqes, FALSE); @@ -1638,10 +1680,12 @@ oce_attach_ifp(POCE_SOFTC sc) sc->ifp->if_hwassist |= (CSUM_IP | CSUM_TCP | CSUM_UDP); sc->ifp->if_capabilities = OCE_IF_CAPABILITIES; - sc->ifp->if_capabilities |= IFCAP_TSO; sc->ifp->if_capabilities |= IFCAP_HWCSUM; sc->ifp->if_capabilities |= IFCAP_VLAN_HWFILTER; +#if defined(INET6) || defined(INET) + sc->ifp->if_capabilities |= IFCAP_TSO; sc->ifp->if_capabilities |= IFCAP_LRO; +#endif sc->ifp->if_capenable = sc->ifp->if_capabilities; sc->ifp->if_baudrate = IF_Gbps(10UL);