Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 11 Feb 2012 08:33:53 +0000 (UTC)
From:      "Bjoern A. Zeeb" <bz@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r231511 - head/sys/dev/oce
Message-ID:  <201202110833.q1B8XrtA021027@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201202110833.q1B8XrtA021027>