Module Name:    src
Committed By:   knakahara
Date:           Tue Oct 13 08:27:11 UTC 2015

Modified Files:
        src/sys/dev/pci: if_wm.c

Log Message:
refactor: rearrange function arguments without interrupt handlers


To generate a diff of this commit:
cvs rdiff -u -r1.361 -r1.362 src/sys/dev/pci/if_wm.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/pci/if_wm.c
diff -u src/sys/dev/pci/if_wm.c:1.361 src/sys/dev/pci/if_wm.c:1.362
--- src/sys/dev/pci/if_wm.c:1.361	Tue Oct 13 08:23:31 2015
+++ src/sys/dev/pci/if_wm.c	Tue Oct 13 08:27:11 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_wm.c,v 1.361 2015/10/13 08:23:31 knakahara Exp $	*/
+/*	$NetBSD: if_wm.c,v 1.362 2015/10/13 08:27:11 knakahara Exp $	*/
 
 /*
  * Copyright (c) 2001, 2002, 2003, 2004 Wasabi Systems, Inc.
@@ -83,7 +83,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_wm.c,v 1.361 2015/10/13 08:23:31 knakahara Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_wm.c,v 1.362 2015/10/13 08:27:11 knakahara Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_net_mpsafe.h"
@@ -534,9 +534,9 @@ static inline void wm_set_dma_addr(volat
 /*
  * Descriptor sync/init functions.
  */
-static inline void wm_cdtxsync(struct wm_softc *, int, int, int);
-static inline void wm_cdrxsync(struct wm_softc *, int, int);
-static inline void wm_init_rxdesc(struct wm_softc *, int);
+static inline void wm_cdtxsync(struct wm_txqueue *, int, int, int);
+static inline void wm_cdrxsync(struct wm_rxqueue *, int, int);
+static inline void wm_init_rxdesc(struct wm_rxqueue *, int);
 
 /*
  * Device driver interface functions and commonly used functions.
@@ -567,8 +567,8 @@ static void	wm_get_cfg_done(struct wm_so
 static void	wm_initialize_hardware_bits(struct wm_softc *);
 static uint32_t	wm_rxpbs_adjust_82580(uint32_t);
 static void	wm_reset(struct wm_softc *);
-static int	wm_add_rxbuf(struct wm_softc *, int);
-static void	wm_rxdrain(struct wm_softc *);
+static int	wm_add_rxbuf(struct wm_rxqueue *, int);
+static void	wm_rxdrain(struct wm_rxqueue *);
 static int	wm_init(struct ifnet *);
 static int	wm_init_locked(struct ifnet *);
 static void	wm_stop(struct ifnet *, int);
@@ -579,21 +579,21 @@ static void	wm_dump_mbuf_chain(struct wm
 static void	wm_82547_txfifo_stall(void *);
 static int	wm_82547_txfifo_bugchk(struct wm_softc *, struct mbuf *);
 /* DMA related */
-static int	wm_alloc_tx_descs(struct wm_softc *);
-static void	wm_free_tx_descs(struct wm_softc *);
-static void	wm_init_tx_descs(struct wm_softc *);
-static void	wm_init_tx_regs(struct wm_softc *);
-static int	wm_alloc_rx_descs(struct wm_softc *);
-static void	wm_free_rx_descs(struct wm_softc *);
-static void	wm_init_rx_regs(struct wm_softc *);
-static int	wm_alloc_tx_buffer(struct wm_softc *);
-static void	wm_free_tx_buffer(struct wm_softc *);
-static void	wm_init_tx_buffer(struct wm_softc *);
-static int	wm_alloc_rx_buffer(struct wm_softc *);
-static void	wm_free_rx_buffer(struct wm_softc *);
-static int	wm_init_rx_buffer(struct wm_softc *);
-static void	wm_init_tx_queue(struct wm_softc *);
-static int	wm_init_rx_queue(struct wm_softc *);
+static int	wm_alloc_tx_descs(struct wm_softc *, struct wm_txqueue *);
+static void	wm_free_tx_descs(struct wm_softc *, struct wm_txqueue *);
+static void	wm_init_tx_descs(struct wm_softc *, struct wm_txqueue *);
+static void	wm_init_tx_regs(struct wm_softc *, struct wm_txqueue *);
+static int	wm_alloc_rx_descs(struct wm_softc *, struct wm_rxqueue *);
+static void	wm_free_rx_descs(struct wm_softc *, struct wm_rxqueue *);
+static void	wm_init_rx_regs(struct wm_softc *, struct wm_rxqueue *);
+static int	wm_alloc_tx_buffer(struct wm_softc *, struct wm_txqueue *);
+static void	wm_free_tx_buffer(struct wm_softc *, struct wm_txqueue *);
+static void	wm_init_tx_buffer(struct wm_softc *, struct wm_txqueue *);
+static int	wm_alloc_rx_buffer(struct wm_softc *, struct wm_rxqueue *);
+static void	wm_free_rx_buffer(struct wm_softc *, struct wm_rxqueue *);
+static int	wm_init_rx_buffer(struct wm_softc *, struct wm_rxqueue *);
+static void	wm_init_tx_queue(struct wm_softc *, struct wm_txqueue *);
+static int	wm_init_rx_queue(struct wm_softc *, struct wm_rxqueue *);
 static int	wm_alloc_txrx_queues(struct wm_softc *);
 static void	wm_free_txrx_queues(struct wm_softc *);
 static int	wm_init_txrx_queues(struct wm_softc *);
@@ -606,7 +606,7 @@ static void	wm_nq_start(struct ifnet *);
 static void	wm_nq_start_locked(struct ifnet *);
 /* Interrupt */
 static int	wm_txeof(struct wm_softc *);
-static void	wm_rxeof(struct wm_softc *);
+static void	wm_rxeof(struct wm_rxqueue *);
 static void	wm_linkintr_gmii(struct wm_softc *, uint32_t);
 static void	wm_linkintr_tbi(struct wm_softc *, uint32_t);
 static void	wm_linkintr_serdes(struct wm_softc *, uint32_t);
@@ -1352,9 +1352,9 @@ wm_set_dma_addr(volatile wiseman_addr_t 
  * Descriptor sync/init functions.
  */
 static inline void
-wm_cdtxsync(struct wm_softc *sc, int start, int num, int ops)
+wm_cdtxsync(struct wm_txqueue *txq, int start, int num, int ops)
 {
-	struct wm_txqueue *txq = sc->sc_txq;
+	struct wm_softc *sc = txq->txq_sc;
 
 	/* If it will wrap around, sync to the end of the ring. */
 	if ((start + num) > WM_NTXDESC(txq)) {
@@ -1371,18 +1371,18 @@ wm_cdtxsync(struct wm_softc *sc, int sta
 }
 
 static inline void
-wm_cdrxsync(struct wm_softc *sc, int start, int ops)
+wm_cdrxsync(struct wm_rxqueue *rxq, int start, int ops)
 {
-	struct wm_rxqueue *rxq = sc->sc_rxq;
+	struct wm_softc *sc = rxq->rxq_sc;
 
 	bus_dmamap_sync(sc->sc_dmat, rxq->rxq_desc_dmamap,
 	    WM_CDRXOFF(start), sizeof(wiseman_rxdesc_t), ops);
 }
 
 static inline void
-wm_init_rxdesc(struct wm_softc *sc, int start)
+wm_init_rxdesc(struct wm_rxqueue *rxq, int start)
 {
-	struct wm_rxqueue *rxq = sc->sc_rxq;
+	struct wm_softc *sc = rxq->rxq_sc;
 	struct wm_rxsoft *rxs = &rxq->rxq_soft[start];
 	wiseman_rxdesc_t *rxd = &rxq->rxq_descs[start];
 	struct mbuf *m = rxs->rxs_mbuf;
@@ -1410,7 +1410,7 @@ wm_init_rxdesc(struct wm_softc *sc, int 
 	rxd->wrx_status = 0;
 	rxd->wrx_errors = 0;
 	rxd->wrx_special = 0;
-	wm_cdrxsync(sc, start, BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE);
+	wm_cdrxsync(rxq, start, BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE);
 
 	CSR_WRITE(sc, rxq->rxq_rdt_reg, start);
 }
@@ -2601,7 +2601,7 @@ wm_detach(device_t self, int flags __unu
 
 	/* Unload RX dmamaps and free mbufs */
 	WM_RX_LOCK(rxq);
-	wm_rxdrain(sc);
+	wm_rxdrain(rxq);
 	WM_RX_UNLOCK(rxq);
 	/* Must unlock here */
 
@@ -3962,9 +3962,9 @@ wm_reset(struct wm_softc *sc)
  *	Add a receive buffer to the indiciated descriptor.
  */
 static int
-wm_add_rxbuf(struct wm_softc *sc, int idx)
+wm_add_rxbuf(struct wm_rxqueue *rxq, int idx)
 {
-	struct wm_rxqueue *rxq = sc->sc_rxq;
+	struct wm_softc *sc = rxq->rxq_sc;
 	struct wm_rxsoft *rxs = &rxq->rxq_soft[idx];
 	struct mbuf *m;
 	int error;
@@ -4002,9 +4002,9 @@ wm_add_rxbuf(struct wm_softc *sc, int id
 
 	if ((sc->sc_flags & WM_F_NEWQUEUE) != 0) {
 		if ((sc->sc_rctl & RCTL_EN) != 0)
-			wm_init_rxdesc(sc, idx);
+			wm_init_rxdesc(rxq, idx);
 	} else
-		wm_init_rxdesc(sc, idx);
+		wm_init_rxdesc(rxq, idx);
 
 	return 0;
 }
@@ -4015,9 +4015,9 @@ wm_add_rxbuf(struct wm_softc *sc, int id
  *	Drain the receive queue.
  */
 static void
-wm_rxdrain(struct wm_softc *sc)
+wm_rxdrain(struct wm_rxqueue *rxq)
 {
-	struct wm_rxqueue *rxq = sc->sc_rxq;
+	struct wm_softc *sc = rxq->rxq_sc;
 	struct wm_rxsoft *rxs;
 	int i;
 
@@ -4613,9 +4613,13 @@ wm_init_locked(struct ifnet *ifp)
 	}
 
 	/* On 575 and later set RDT only if RX enabled */
-	if ((sc->sc_flags & WM_F_NEWQUEUE) != 0)
+	if ((sc->sc_flags & WM_F_NEWQUEUE) != 0) {
+		struct wm_rxqueue *rxq = sc->sc_rxq;
+		WM_RX_LOCK(rxq);
 		for (i = 0; i < WM_NRXDESC; i++)
-			wm_init_rxdesc(sc, i);
+			wm_init_rxdesc(rxq, i);
+		WM_RX_UNLOCK(rxq);
+	}
 
 	sc->sc_stopping = false;
 
@@ -4718,7 +4722,7 @@ wm_stop_locked(struct ifnet *ifp, int di
 
 	if (disable) {
 		WM_RX_LOCK(rxq);
-		wm_rxdrain(sc);
+		wm_rxdrain(rxq);
 		WM_RX_UNLOCK(rxq);
 	}
 
@@ -4913,7 +4917,7 @@ wm_tx_offload(struct wm_softc *sc, struc
 	t->tcpip_tucs = htole32(tucs);
 	t->tcpip_cmdlen = htole32(cmdlen);
 	t->tcpip_seg = htole32(seg);
-	wm_cdtxsync(sc, txq->txq_next, 1, BUS_DMASYNC_PREWRITE);
+	wm_cdtxsync(txq, txq->txq_next, 1, BUS_DMASYNC_PREWRITE);
 
 	txq->txq_next = WM_NEXTTX(txq, txq->txq_next);
 	txs->txs_ndesc++;
@@ -5043,9 +5047,8 @@ wm_82547_txfifo_bugchk(struct wm_softc *
 }
 
 static int
-wm_alloc_tx_descs(struct wm_softc *sc)
+wm_alloc_tx_descs(struct wm_softc *sc, struct wm_txqueue *txq)
 {
-	struct wm_txqueue *txq = sc->sc_txq;
 	int error;
 
 	/*
@@ -5111,9 +5114,8 @@ wm_alloc_tx_descs(struct wm_softc *sc)
 }
 
 static void
-wm_free_tx_descs(struct wm_softc *sc)
+wm_free_tx_descs(struct wm_softc *sc, struct wm_txqueue *txq)
 {
-	struct wm_txqueue *txq = sc->sc_txq;
 
 	bus_dmamap_unload(sc->sc_dmat, txq->txq_desc_dmamap);
 	bus_dmamap_destroy(sc->sc_dmat, txq->txq_desc_dmamap);
@@ -5123,9 +5125,8 @@ wm_free_tx_descs(struct wm_softc *sc)
 }
 
 static int
-wm_alloc_rx_descs(struct wm_softc *sc)
+wm_alloc_rx_descs(struct wm_softc *sc, struct wm_rxqueue *rxq)
 {
-	struct wm_rxqueue *rxq = sc->sc_rxq;
 	int error;
 
 	/*
@@ -5184,9 +5185,8 @@ wm_alloc_rx_descs(struct wm_softc *sc)
 }
 
 static void
-wm_free_rx_descs(struct wm_softc *sc)
+wm_free_rx_descs(struct wm_softc *sc, struct wm_rxqueue *rxq)
 {
-	struct wm_rxqueue *rxq = sc->sc_rxq;
 
 	bus_dmamap_unload(sc->sc_dmat, rxq->rxq_desc_dmamap);
 	bus_dmamap_destroy(sc->sc_dmat, rxq->rxq_desc_dmamap);
@@ -5197,9 +5197,8 @@ wm_free_rx_descs(struct wm_softc *sc)
 
 
 static int
-wm_alloc_tx_buffer(struct wm_softc *sc)
+wm_alloc_tx_buffer(struct wm_softc *sc, struct wm_txqueue *txq)
 {
-	struct wm_txqueue *txq = sc->sc_txq;
 	int i, error;
 
 	/* Create the transmit buffer DMA maps. */
@@ -5229,9 +5228,8 @@ wm_alloc_tx_buffer(struct wm_softc *sc)
 }
 
 static void
-wm_free_tx_buffer(struct wm_softc *sc)
+wm_free_tx_buffer(struct wm_softc *sc, struct wm_txqueue *txq)
 {
-	struct wm_txqueue *txq = sc->sc_txq;
 	int i;
 
 	for (i = 0; i < WM_TXQUEUELEN(txq); i++) {
@@ -5242,9 +5240,8 @@ wm_free_tx_buffer(struct wm_softc *sc)
 }
 
 static int
-wm_alloc_rx_buffer(struct wm_softc *sc)
+wm_alloc_rx_buffer(struct wm_softc *sc, struct wm_rxqueue *rxq)
 {
-	struct wm_rxqueue *rxq = sc->sc_rxq;
 	int i, error;
 
 	/* Create the receive buffer DMA maps. */
@@ -5272,9 +5269,8 @@ wm_alloc_rx_buffer(struct wm_softc *sc)
 }
 
 static void
-wm_free_rx_buffer(struct wm_softc *sc)
+wm_free_rx_buffer(struct wm_softc *sc, struct wm_rxqueue *rxq)
 {
-	struct wm_rxqueue *rxq = sc->sc_rxq;
 	int i;
 
 	for (i = 0; i < WM_NRXDESC; i++) {
@@ -5292,6 +5288,8 @@ static int
 wm_alloc_txrx_queues(struct wm_softc *sc)
 {
 	int error;
+	struct wm_txqueue *txq;
+	struct wm_rxqueue *rxq;
 
 	/*
 	 * For transmission
@@ -5303,18 +5301,19 @@ wm_alloc_txrx_queues(struct wm_softc *sc
 		error = ENOMEM;
 		goto fail_0;
 	}
+	txq = sc->sc_txq;
+	txq->txq_sc = sc;
 #ifdef WM_MPSAFE
-		sc->sc_txq->txq_lock =
-			mutex_obj_alloc(MUTEX_DEFAULT, IPL_NET);
+		txq->txq_lock = mutex_obj_alloc(MUTEX_DEFAULT, IPL_NET);
 #else
-		sc->sc_txq->txq_lock = NULL;
+		txq->txq_lock = NULL;
 #endif
 
-	error = wm_alloc_tx_descs(sc);
+		error = wm_alloc_tx_descs(sc, txq);
 	if (error)
 		goto fail_1;
 
-	error = wm_alloc_tx_buffer(sc);
+	error = wm_alloc_tx_buffer(sc, txq);
 	if (error)
 		goto fail_2;
 
@@ -5328,39 +5327,38 @@ wm_alloc_txrx_queues(struct wm_softc *sc
 		error = ENOMEM;
 		goto fail_3;
 	}
+	rxq = sc->sc_rxq;
+	rxq->rxq_sc = sc;
 #ifdef WM_MPSAFE
-		sc->sc_rxq->rxq_lock =
-			mutex_obj_alloc(MUTEX_DEFAULT, IPL_NET);
+		rxq->rxq_lock = mutex_obj_alloc(MUTEX_DEFAULT, IPL_NET);
 #else
-		sc->sc_rxq->rxq_lock = NULL;
+		rxq->rxq_lock = NULL;
 #endif
 
-	error = wm_alloc_rx_descs(sc);
+		error = wm_alloc_rx_descs(sc, rxq);
 	if (error)
 		goto fail_4;
 
-	error = wm_alloc_rx_buffer(sc);
+	error = wm_alloc_rx_buffer(sc, rxq);
 	if (error)
 		goto fail_5;
 
 	return 0;
 
  fail_5:
-	wm_free_rx_descs(sc);
+	wm_free_rx_descs(sc, rxq);
  fail_4:
-	if (sc->sc_rxq->rxq_lock)
-		mutex_obj_free(sc->sc_rxq->rxq_lock);
-	kmem_free(sc->sc_rxq,
-	    sizeof(struct wm_rxqueue) * sc->sc_nrxqueues);
+	if (rxq->rxq_lock)
+		mutex_obj_free(rxq->rxq_lock);
+	kmem_free(rxq, sizeof(struct wm_rxqueue) * sc->sc_nrxqueues);
  fail_3:
-	wm_free_tx_buffer(sc);
+	wm_free_tx_buffer(sc, txq);
  fail_2:
-	wm_free_tx_descs(sc);
+	wm_free_tx_descs(sc, txq);
  fail_1:
-	if (sc->sc_txq->txq_lock)
-		mutex_obj_free(sc->sc_txq->txq_lock);
-	kmem_free(sc->sc_txq,
-	    sizeof(struct wm_txqueue) * sc->sc_ntxqueues);
+	if (txq->txq_lock)
+		mutex_obj_free(txq->txq_lock);
+	kmem_free(txq, sizeof(struct wm_txqueue) * sc->sc_ntxqueues);
  fail_0:
 	return error;
 }
@@ -5372,41 +5370,39 @@ wm_alloc_txrx_queues(struct wm_softc *sc
 static void
 wm_free_txrx_queues(struct wm_softc *sc)
 {
+	struct wm_txqueue *txq = sc->sc_txq;
+	struct wm_rxqueue *rxq = sc->sc_rxq;
+
+	wm_free_rx_buffer(sc, rxq);
+	wm_free_rx_descs(sc, rxq);
+	if (rxq->rxq_lock)
+		mutex_obj_free(rxq->rxq_lock);
+	kmem_free(rxq, sizeof(struct wm_rxqueue) * sc->sc_nrxqueues);
 
-	wm_free_rx_buffer(sc);
-	wm_free_rx_descs(sc);
-	if (sc->sc_rxq->rxq_lock)
-		mutex_obj_free(sc->sc_rxq->rxq_lock);
-	kmem_free(sc->sc_rxq,
-	    sizeof(struct wm_rxqueue) * sc->sc_nrxqueues);
-
-	wm_free_tx_buffer(sc);
-	wm_free_tx_descs(sc);
-	if (sc->sc_txq->txq_lock)
-		mutex_obj_free(sc->sc_txq->txq_lock);
-	kmem_free(sc->sc_txq,
-	    sizeof(struct wm_txqueue) * sc->sc_ntxqueues);
+	wm_free_tx_buffer(sc, txq);
+	wm_free_tx_descs(sc, txq);
+	if (txq->txq_lock)
+		mutex_obj_free(txq->txq_lock);
+	kmem_free(txq, sizeof(struct wm_txqueue) * sc->sc_ntxqueues);
 }
 
 static void
-wm_init_tx_descs(struct wm_softc *sc)
+wm_init_tx_descs(struct wm_softc *sc __unused, struct wm_txqueue *txq)
 {
-	struct wm_txqueue *txq = sc->sc_txq;
 
 	KASSERT(WM_TX_LOCKED(txq));
 
 	/* Initialize the transmit descriptor ring. */
 	memset(txq->txq_descs, 0, WM_TXDESCSIZE(txq));
-	wm_cdtxsync(sc, 0, WM_NTXDESC(txq),
+	wm_cdtxsync(txq, 0, WM_NTXDESC(txq),
 	    BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE);
 	txq->txq_free = WM_NTXDESC(txq);
 	txq->txq_next = 0;
 }
 
 static void
-wm_init_tx_regs(struct wm_softc *sc)
+wm_init_tx_regs(struct wm_softc *sc, struct wm_txqueue *txq)
 {
-	struct wm_txqueue *txq = sc->sc_txq;
 
 	KASSERT(WM_TX_LOCKED(txq));
 
@@ -5447,9 +5443,8 @@ wm_init_tx_regs(struct wm_softc *sc)
 }
 
 static void
-wm_init_tx_buffer(struct wm_softc *sc)
+wm_init_tx_buffer(struct wm_softc *sc __unused, struct wm_txqueue *txq)
 {
-	struct wm_txqueue *txq = sc->sc_txq;
 	int i;
 
 	KASSERT(WM_TX_LOCKED(txq));
@@ -5463,9 +5458,8 @@ wm_init_tx_buffer(struct wm_softc *sc)
 }
 
 static void
-wm_init_tx_queue(struct wm_softc *sc)
+wm_init_tx_queue(struct wm_softc *sc, struct wm_txqueue *txq)
 {
-	struct wm_txqueue *txq = sc->sc_txq;
 
 	KASSERT(WM_TX_LOCKED(txq));
 
@@ -5479,15 +5473,14 @@ wm_init_tx_queue(struct wm_softc *sc)
 		txq->txq_tdt_reg = WMREG_TDT(0);
 	}
 
-	wm_init_tx_descs(sc);
-	wm_init_tx_regs(sc);
-	wm_init_tx_buffer(sc);
+	wm_init_tx_descs(sc, txq);
+	wm_init_tx_regs(sc, txq);
+	wm_init_tx_buffer(sc, txq);
 }
 
 static void
-wm_init_rx_regs(struct wm_softc *sc)
+wm_init_rx_regs(struct wm_softc *sc, struct wm_rxqueue *rxq)
 {
-	struct wm_rxqueue *rxq = sc->sc_rxq;
 
 	KASSERT(WM_RX_LOCKED(rxq));
 
@@ -5536,9 +5529,8 @@ wm_init_rx_regs(struct wm_softc *sc)
 }
 
 static int
-wm_init_rx_buffer(struct wm_softc *sc)
+wm_init_rx_buffer(struct wm_softc *sc, struct wm_rxqueue *rxq)
 {
-	struct wm_rxqueue *rxq = sc->sc_rxq;
 	struct wm_rxsoft *rxs;
 	int error, i;
 
@@ -5547,7 +5539,7 @@ wm_init_rx_buffer(struct wm_softc *sc)
 	for (i = 0; i < WM_NRXDESC; i++) {
 		rxs = &rxq->rxq_soft[i];
 		if (rxs->rxs_mbuf == NULL) {
-			if ((error = wm_add_rxbuf(sc, i)) != 0) {
+			if ((error = wm_add_rxbuf(rxq, i)) != 0) {
 				log(LOG_ERR, "%s: unable to allocate or map "
 				    "rx buffer %d, error = %d\n",
 				    device_xname(sc->sc_dev), i, error);
@@ -5555,12 +5547,12 @@ wm_init_rx_buffer(struct wm_softc *sc)
 				 * XXX Should attempt to run with fewer receive
 				 * XXX buffers instead of just failing.
 				 */
-				wm_rxdrain(sc);
+				wm_rxdrain(rxq);
 				return ENOMEM;
 			}
 		} else {
 			if ((sc->sc_flags & WM_F_NEWQUEUE) == 0)
-				wm_init_rxdesc(sc, i);
+				wm_init_rxdesc(rxq, i);
 			/*
 			 * For 82575 and newer device, the RX descriptors
 			 * must be initialized after the setting of RCTL.EN in
@@ -5576,9 +5568,8 @@ wm_init_rx_buffer(struct wm_softc *sc)
 }
 
 static int
-wm_init_rx_queue(struct wm_softc *sc)
+wm_init_rx_queue(struct wm_softc *sc, struct wm_rxqueue *rxq)
 {
-	struct wm_rxqueue *rxq = sc->sc_rxq;
 
 	KASSERT(WM_RX_LOCKED(rxq));
 
@@ -5592,8 +5583,8 @@ wm_init_rx_queue(struct wm_softc *sc)
 		rxq->rxq_rdt_reg = WMREG_RDT(0);
 	}
 
-	wm_init_rx_regs(sc);
-	return wm_init_rx_buffer(sc);
+	wm_init_rx_regs(sc, rxq);
+	return wm_init_rx_buffer(sc, rxq);
 }
 
 /*
@@ -5608,11 +5599,11 @@ wm_init_txrx_queues(struct wm_softc *sc)
 	int error;
 
 	WM_TX_LOCK(txq);
-	wm_init_tx_queue(sc);
+	wm_init_tx_queue(sc, txq);
 	WM_TX_UNLOCK(txq);
 
 	WM_RX_LOCK(rxq);
-	error = wm_init_rx_queue(sc);
+	error = wm_init_rx_queue(sc, rxq);
 	WM_RX_UNLOCK(rxq);
 
 	return error;
@@ -5896,7 +5887,7 @@ wm_start_locked(struct ifnet *ifp)
 		    lasttx, le32toh(sc->sc_txdescs[lasttx].wtx_cmdlen)));
 
 		/* Sync the descriptors we're using. */
-		wm_cdtxsync(sc, txq->txq_next, txs->txs_ndesc,
+		wm_cdtxsync(txq, txq->txq_next, txs->txs_ndesc,
 		    BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE);
 
 		/* Give the packet to the chip. */
@@ -6127,7 +6118,7 @@ wm_nq_tx_offload(struct wm_softc *sc, st
 	    htole32(cmdc);
 	txq->txq_nq_descs[txq->txq_next].nqrx_ctx.nqtxc_mssidx =
 	    htole32(mssidx);
-	wm_cdtxsync(sc, txq->txq_next, 1, BUS_DMASYNC_PREWRITE);
+	wm_cdtxsync(txq, txq->txq_next, 1, BUS_DMASYNC_PREWRITE);
 	DPRINTF(WM_DEBUG_TX,
 	    ("%s: TX: context desc %d 0x%08x%08x\n", device_xname(sc->sc_dev),
 	    txq->txq_txnext, 0, vl_len));
@@ -6386,7 +6377,7 @@ wm_nq_start_locked(struct ifnet *ifp)
 		    lasttx, le32toh(txq->txq_txdescs[lasttx].wtx_cmdlen)));
 
 		/* Sync the descriptors we're using. */
-		wm_cdtxsync(sc, txq->txq_next, txs->txs_ndesc,
+		wm_cdtxsync(txq, txq->txq_next, txs->txs_ndesc,
 		    BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE);
 
 		/* Give the packet to the chip. */
@@ -6463,13 +6454,13 @@ wm_txeof(struct wm_softc *sc)
 		DPRINTF(WM_DEBUG_TX,
 		    ("%s: TX: checking job %d\n", device_xname(sc->sc_dev), i));
 
-		wm_cdtxsync(sc, txs->txs_firstdesc, txs->txs_ndesc,
+		wm_cdtxsync(txq, txs->txs_firstdesc, txs->txs_ndesc,
 		    BUS_DMASYNC_POSTREAD|BUS_DMASYNC_POSTWRITE);
 
 		status =
 		    txq->txq_descs[txs->txs_lastdesc].wtx_fields.wtxu_status;
 		if ((status & WTX_ST_DD) == 0) {
-			wm_cdtxsync(sc, txs->txs_lastdesc, 1,
+			wm_cdtxsync(txq, txs->txs_lastdesc, 1,
 			    BUS_DMASYNC_PREREAD);
 			break;
 		}
@@ -6537,9 +6528,9 @@ wm_txeof(struct wm_softc *sc)
  *	Helper; handle receive interrupts.
  */
 static void
-wm_rxeof(struct wm_softc *sc)
+wm_rxeof(struct wm_rxqueue *rxq)
 {
-	struct wm_rxqueue *rxq = sc->sc_rxq;
+	struct wm_softc *sc = rxq->rxq_sc;
 	struct ifnet *ifp = &sc->sc_ethercom.ec_if;
 	struct wm_rxsoft *rxs;
 	struct mbuf *m;
@@ -6555,7 +6546,7 @@ wm_rxeof(struct wm_softc *sc)
 		    ("%s: RX: checking descriptor %d\n",
 		    device_xname(sc->sc_dev), i));
 
-		wm_cdrxsync(sc, i, BUS_DMASYNC_POSTREAD|BUS_DMASYNC_POSTWRITE);
+		wm_cdrxsync(rxq, i, BUS_DMASYNC_POSTREAD|BUS_DMASYNC_POSTWRITE);
 
 		status = rxq->rxq_descs[i].wrx_status;
 		errors = rxq->rxq_descs[i].wrx_errors;
@@ -6564,7 +6555,7 @@ wm_rxeof(struct wm_softc *sc)
 
 		if ((status & WRX_ST_DD) == 0) {
 			/* We have processed all of the receive descriptors. */
-			wm_cdrxsync(sc, i, BUS_DMASYNC_PREREAD);
+			wm_cdrxsync(rxq, i, BUS_DMASYNC_PREREAD);
 			break;
 		}
 
@@ -6573,7 +6564,7 @@ wm_rxeof(struct wm_softc *sc)
 			DPRINTF(WM_DEBUG_RX,
 			    ("%s: RX: discarding contents of descriptor %d\n",
 			    device_xname(sc->sc_dev), i));
-			wm_init_rxdesc(sc, i);
+			wm_init_rxdesc(rxq, i);
 			if (status & WRX_ST_EOP) {
 				/* Reset our state. */
 				DPRINTF(WM_DEBUG_RX,
@@ -6594,7 +6585,7 @@ wm_rxeof(struct wm_softc *sc)
 		 * course the length is zero. Treat the latter as a
 		 * failed mapping.
 		 */
-		if ((len == 0) || (wm_add_rxbuf(sc, i) != 0)) {
+		if ((len == 0) || (wm_add_rxbuf(rxq, i) != 0)) {
 			/*
 			 * Failed, throw away what we've done so
 			 * far, and discard the rest of the packet.
@@ -6602,7 +6593,7 @@ wm_rxeof(struct wm_softc *sc)
 			ifp->if_ierrors++;
 			bus_dmamap_sync(sc->sc_dmat, rxs->rxs_dmamap, 0,
 			    rxs->rxs_dmamap->dm_mapsize, BUS_DMASYNC_PREREAD);
-			wm_init_rxdesc(sc, i);
+			wm_init_rxdesc(rxq, i);
 			if ((status & WRX_ST_EOP) == 0)
 				rxq->rxq_discard = 1;
 			if (rxq->rxq_head != NULL)
@@ -7018,7 +7009,7 @@ wm_intr_legacy(void *arg)
 			WM_EVCNT_INCR(&sc->sc_ev_rxintr);
 		}
 #endif
-		wm_rxeof(sc);
+		wm_rxeof(rxq);
 
 		WM_RX_UNLOCK(rxq);
 		WM_TX_LOCK(txq);
@@ -7138,7 +7129,7 @@ wm_rxintr_msix(void *arg)
 		goto out;
 
 	WM_EVCNT_INCR(&sc->sc_ev_rxintr);
-	wm_rxeof(sc);
+	wm_rxeof(rxq);
 
 out:
 	WM_RX_UNLOCK(rxq);

Reply via email to