Module Name:    src
Committed By:   martin
Date:           Sun Sep 14 11:00:52 UTC 2014

Modified Files:
        src/sys/dev/ic: dwc_gmac.c dwc_gmac_reg.h

Log Message:
Cleanup and __BIT()ify


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/sys/dev/ic/dwc_gmac.c
cvs rdiff -u -r1.2 -r1.3 src/sys/dev/ic/dwc_gmac_reg.h

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/ic/dwc_gmac.c
diff -u src/sys/dev/ic/dwc_gmac.c:1.5 src/sys/dev/ic/dwc_gmac.c:1.6
--- src/sys/dev/ic/dwc_gmac.c:1.5	Thu Sep 11 06:56:05 2014
+++ src/sys/dev/ic/dwc_gmac.c	Sun Sep 14 11:00:52 2014
@@ -39,7 +39,7 @@
 
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(1, "$NetBSD: dwc_gmac.c,v 1.5 2014/09/11 06:56:05 martin Exp $");
+__KERNEL_RCSID(1, "$NetBSD: dwc_gmac.c,v 1.6 2014/09/14 11:00:52 martin Exp $");
 
 #include "opt_inet.h"
 
@@ -244,16 +244,17 @@ static int
 dwc_gmac_miibus_read_reg(device_t self, int phy, int reg)
 {
 	struct dwc_gmac_softc * const sc = device_private(self);
-	uint16_t miiaddr;
+	uint16_t mii;
 	size_t cnt;
 	int rv = 0;
 
-	miiaddr = ((phy << GMAC_MII_PHY_SHIFT) & GMAC_MII_PHY_MASK)
-		| ((reg << GMAC_MII_REG_SHIFT) & GMAC_MII_REG_MASK);
+	mii = __SHIFTIN(phy,GMAC_MII_PHY_MASK)
+	    | __SHIFTIN(reg,GMAC_MII_REG_MASK)
+	    | __SHIFTIN(sc->sc_mii_clk,GMAC_MII_CLKMASK)
+	    | GMAC_MII_BUSY;
 
 	mutex_enter(&sc->sc_mdio_lock);
-	bus_space_write_4(sc->sc_bst, sc->sc_bsh, AWIN_GMAC_MAC_MIIADDR,
-	    miiaddr | GMAC_MII_BUSY | (sc->sc_mii_clk << 2));
+	bus_space_write_4(sc->sc_bst, sc->sc_bsh, AWIN_GMAC_MAC_MIIADDR, mii);
 
 	for (cnt = 0; cnt < 1000; cnt++) {
 		if (!(bus_space_read_4(sc->sc_bst, sc->sc_bsh,
@@ -274,17 +275,17 @@ static void
 dwc_gmac_miibus_write_reg(device_t self, int phy, int reg, int val)
 {
 	struct dwc_gmac_softc * const sc = device_private(self);
-	uint16_t miiaddr;
+	uint16_t mii;
 	size_t cnt;
 
-	miiaddr = ((phy << GMAC_MII_PHY_SHIFT) & GMAC_MII_PHY_MASK)
-		| ((reg << GMAC_MII_REG_SHIFT) & GMAC_MII_REG_MASK)
-		| GMAC_MII_BUSY | GMAC_MII_WRITE | (sc->sc_mii_clk << 2);
+	mii = __SHIFTIN(phy,GMAC_MII_PHY_MASK)
+	    | __SHIFTIN(reg,GMAC_MII_REG_MASK)
+	    | __SHIFTIN(sc->sc_mii_clk,GMAC_MII_CLKMASK)
+	    | GMAC_MII_BUSY | GMAC_MII_WRITE;
 
 	mutex_enter(&sc->sc_mdio_lock);
 	bus_space_write_4(sc->sc_bst, sc->sc_bsh, AWIN_GMAC_MAC_MIIDATA, val);
-	bus_space_write_4(sc->sc_bst, sc->sc_bsh, AWIN_GMAC_MAC_MIIADDR,
-	    miiaddr);
+	bus_space_write_4(sc->sc_bst, sc->sc_bsh, AWIN_GMAC_MAC_MIIADDR, mii);
 
 	for (cnt = 0; cnt < 1000; cnt++) {
 		if (!(bus_space_read_4(sc->sc_bst, sc->sc_bsh,
@@ -302,8 +303,7 @@ dwc_gmac_alloc_rx_ring(struct dwc_gmac_s
 {
 	struct dwc_gmac_rx_data *data;
 	bus_addr_t physaddr;
-	const size_t descsize = 
-	    AWGE_RX_RING_COUNT * sizeof(*ring->r_desc);
+	const size_t descsize = AWGE_RX_RING_COUNT * sizeof(*ring->r_desc);
 	int error, i, next;
 
 	ring->r_cur = ring->r_next = 0;
@@ -352,12 +352,11 @@ dwc_gmac_alloc_rx_ring(struct dwc_gmac_s
 
 		desc = &sc->sc_rxq.r_desc[i];
 		desc->ddesc_data = htole32(physaddr);
-		next = i < (AWGE_RX_RING_COUNT-1) ? i+1 : 0;
+		next = (i+1) & AWGE_RX_RING_COUNT;
 		desc->ddesc_next = htole32(ring->r_physaddr 
 		    + next * sizeof(*desc));
 		desc->ddesc_cntl = htole32(
-		    (AWGE_MAX_PACKET & DDESC_CNTL_SIZE1MASK)
-		    << DDESC_CNTL_SIZE1SHIFT);
+		    __SHIFTIN(AWGE_MAX_PACKET,DDESC_CNTL_SIZE1MASK));
 		desc->ddesc_status = htole32(DDESC_STATUS_OWNEDBYDEV);
 	}
 
@@ -365,7 +364,7 @@ dwc_gmac_alloc_rx_ring(struct dwc_gmac_s
 	    AWGE_RX_RING_COUNT*sizeof(struct dwc_gmac_dev_dmadesc),
 	    BUS_DMASYNC_PREREAD);
 	bus_space_write_4(sc->sc_bst, sc->sc_bsh, AWIN_GMAC_DMA_RX_ADDR,
-	    htole32(ring->r_physaddr));
+	    ring->r_physaddr);
 
 	return 0;
 
@@ -384,8 +383,7 @@ dwc_gmac_reset_rx_ring(struct dwc_gmac_s
 	for (i = 0; i < AWGE_RX_RING_COUNT; i++) {
 		desc = &sc->sc_rxq.r_desc[i];
 		desc->ddesc_cntl = htole32(
-		    (AWGE_MAX_PACKET & DDESC_CNTL_SIZE1MASK)
-		    << DDESC_CNTL_SIZE1SHIFT);
+		    __SHIFTIN(AWGE_MAX_PACKET,DDESC_CNTL_SIZE1MASK));
 		desc->ddesc_status = htole32(DDESC_STATUS_OWNEDBYDEV);
 	}
 
@@ -574,6 +572,8 @@ dwc_gmac_reset_tx_ring(struct dwc_gmac_s
 	    TX_DESC_OFFSET(0),
 	    AWGE_TX_RING_COUNT*sizeof(struct dwc_gmac_dev_dmadesc),
 	    BUS_DMASYNC_PREWRITE);
+	bus_space_write_4(sc->sc_bst, sc->sc_bsh, AWIN_GMAC_DMA_TX_ADDR,
+	    sc->sc_txq.t_physaddr);
 
 	ring->t_queued = 0;
 	ring->t_cur = ring->t_next = 0;
@@ -639,9 +639,18 @@ dwc_gmac_init(struct ifnet *ifp)
 	dwc_gmac_stop(ifp, 0);
 
 	/*
-	 * Set up dma pointer for RX ring
+	 * Set up dma pointer for RX and TX ring
 	 */
-	bus_space_write_4(sc->sc_bst, sc->sc_bsh, AWIN_GMAC_DMA_RX_ADDR, sc->sc_rxq.r_physaddr);
+	bus_space_write_4(sc->sc_bst, sc->sc_bsh, AWIN_GMAC_DMA_RX_ADDR,
+	    sc->sc_rxq.r_physaddr);
+	bus_space_write_4(sc->sc_bst, sc->sc_bsh, AWIN_GMAC_DMA_TX_ADDR,
+	    sc->sc_txq.t_physaddr);
+
+	/*
+	 * Start RX part
+	 */
+	bus_space_write_4(sc->sc_bst, sc->sc_bsh,
+	    AWIN_GMAC_DMA_OPMODE, GMAC_DMA_OP_RXSTART);
 
 	ifp->if_flags |= IFF_RUNNING;
 	ifp->if_flags &= ~IFF_OACTIVE;
@@ -675,9 +684,15 @@ dwc_gmac_start(struct ifnet *ifp)
 		/* packets have been queued, kick it off */
 		dwc_gmac_txdesc_sync(sc, old, sc->sc_txq.t_cur,
 		    BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE);
-		bus_space_write_4(sc->sc_bst, sc->sc_bsh, AWIN_GMAC_DMA_TX_ADDR,
-		    sc->sc_txq.t_physaddr
-		        + old*sizeof(struct dwc_gmac_dev_dmadesc));
+		
+		bus_space_write_4(sc->sc_bst, sc->sc_bsh,
+		    AWIN_GMAC_DMA_OPMODE,
+		    bus_space_read_4(sc->sc_bst, sc->sc_bsh,
+		        AWIN_GMAC_DMA_OPMODE) | GMAC_DMA_OP_FLUSHTX);
+		bus_space_write_4(sc->sc_bst, sc->sc_bsh,
+		    AWIN_GMAC_DMA_OPMODE,
+		    bus_space_read_4(sc->sc_bst, sc->sc_bsh,
+		        AWIN_GMAC_DMA_OPMODE) | GMAC_DMA_OP_TXSTART);
 	}
 }
 
@@ -686,6 +701,16 @@ dwc_gmac_stop(struct ifnet *ifp, int dis
 {
 	struct dwc_gmac_softc *sc = ifp->if_softc;
 
+	bus_space_write_4(sc->sc_bst, sc->sc_bsh,
+	    AWIN_GMAC_DMA_OPMODE,
+	    bus_space_read_4(sc->sc_bst, sc->sc_bsh,
+	        AWIN_GMAC_DMA_OPMODE)
+		& ~(GMAC_DMA_OP_TXSTART|GMAC_DMA_OP_RXSTART));
+	bus_space_write_4(sc->sc_bst, sc->sc_bsh,
+	    AWIN_GMAC_DMA_OPMODE,
+	    bus_space_read_4(sc->sc_bst, sc->sc_bsh,
+	        AWIN_GMAC_DMA_OPMODE) | GMAC_DMA_OP_FLUSHTX);
+
 	mii_down(&sc->sc_mii);
 	dwc_gmac_reset_tx_ring(sc, &sc->sc_txq);
 	dwc_gmac_reset_rx_ring(sc, &sc->sc_rxq);
@@ -700,7 +725,7 @@ dwc_gmac_queue(struct dwc_gmac_softc *sc
 	struct dwc_gmac_dev_dmadesc *desc = NULL;
 	struct dwc_gmac_tx_data *data = NULL;
 	bus_dmamap_t map;
-	uint32_t status, flags, len;
+	uint32_t flags, len;
 	int error, i, first;
 
 	first = sc->sc_txq.t_cur;
@@ -721,36 +746,33 @@ dwc_gmac_queue(struct dwc_gmac_softc *sc
 	}
 
 	data = NULL;
-	flags = DDESC_STATUS_TXINT|DDESC_STATUS_TXCHAIN;
+	flags = DDESC_CNTL_TXFIRST|DDESC_CNTL_TXINT|DDESC_CNTL_TXCHAIN;
 	for (i = 0; i < map->dm_nsegs; i++) {
 		data = &sc->sc_txq.t_data[sc->sc_txq.t_cur];
 		desc = &sc->sc_txq.t_desc[sc->sc_txq.t_cur];
 
 		desc->ddesc_data = htole32(map->dm_segs[i].ds_addr);
-		len = (map->dm_segs[i].ds_len & DDESC_CNTL_SIZE1MASK)
-		    << DDESC_CNTL_SIZE1SHIFT;
-		desc->ddesc_cntl = htole32(len);
-		status = flags;
-		desc->ddesc_status = htole32(status);
-		sc->sc_txq.t_queued++;
+		len = __SHIFTIN(map->dm_segs[i].ds_len,DDESC_CNTL_SIZE1MASK);
+		if (i == map->dm_nsegs-1)
+			flags |= DDESC_CNTL_TXLAST;
+		desc->ddesc_cntl = htole32(len|flags);
+		flags &= ~DDESC_CNTL_TXFIRST;
 
 		/*
 		 * Defer passing ownership of the first descriptor
 		 * untill we are done.
 		 */
-		flags |= DDESC_STATUS_OWNEDBYDEV;
+		if (i)
+			desc->ddesc_status = htole32(DDESC_STATUS_OWNEDBYDEV);
+		sc->sc_txq.t_queued++;
 
 		sc->sc_txq.t_cur = (sc->sc_txq.t_cur + 1)
 		    & (AWGE_TX_RING_COUNT-1);
 	}
 
-	/* Fixup last */
-	status = flags|DDESC_STATUS_TXLAST;
-	desc->ddesc_status = htole32(status);
-
-	/* Finalize first */
-	status = flags|DDESC_STATUS_TXFIRST;
-	sc->sc_txq.t_desc[first].ddesc_status = htole32(status);
+	/* Pass first to device */
+	sc->sc_txq.t_desc[first].ddesc_status
+	    = htole32(DDESC_STATUS_OWNEDBYDEV);
 
 	data->td_m = m0;
 	data->td_active = map;

Index: src/sys/dev/ic/dwc_gmac_reg.h
diff -u src/sys/dev/ic/dwc_gmac_reg.h:1.2 src/sys/dev/ic/dwc_gmac_reg.h:1.3
--- src/sys/dev/ic/dwc_gmac_reg.h:1.2	Tue Sep  9 10:04:19 2014
+++ src/sys/dev/ic/dwc_gmac_reg.h	Sun Sep 14 11:00:52 2014
@@ -56,32 +56,37 @@
 #define	AWIN_GMAC_DMA_CUR_RX_BUFADDR	0x1054
 
 #define GMAC_MII_PHY_SHIFT		11
-#define	GMAC_MII_PHY_MASK		(0x1F << GMAC_MII_PHY_SHIFT)
+#define	GMAC_MII_PHY_MASK		__BITS(15,11)
 #define	GMAC_MII_REG_SHIFT		6
-#define	GMAC_MII_REG_MASK		(0x1F << GMAC_MII_REG_SHIFT)
+#define	GMAC_MII_REG_MASK		__BITS(10,6)
 
-#define	GMAC_MII_BUSY			1
-#define	GMAC_MII_WRITE			2
-
-#define	GMAC_BUSMODE_RESET		1
-
-#define	AWIN_GMAC_MII_IRQ		1
-
-#define GMAC_DMA_INT_NIE		0x10000	/* Normal/Summary */
-#define GMAC_DMA_INT_AIE		0x08000	/* Abnormal/Summary */
-#define	GMAC_DMA_INT_ERE		0x04000	/* Early receive */
-#define	GMAC_DMA_INT_FBE		0x02000	/* Fatal bus error */
-#define	GMAC_DMA_INT_ETE		0x00400	/* Early transmit */
-#define	GMAC_DMA_INT_RWE		0x00200	/* Receive watchdog */
-#define	GMAC_DMA_INT_RSE		0x00100	/* Receive stopped */
-#define	GMAC_DMA_INT_RUE		0x00080	/* Receive buffer unavailable */
-#define	GMAC_DMA_INT_RIE		0x00040	/* Receive interrupt */
-#define	GMAC_DMA_INT_UNE		0x00020	/* Tx underflow */
-#define	GMAC_DMA_INT_OVE		0x00010	/* Receive overflow */
-#define	GMAC_DMA_INT_TJE		0x00008	/* Transmit jabber */
-#define	GMAC_DMA_INT_TUE		0x00004	/* Transmit buffer unavailable */
-#define	GMAC_DMA_INT_TSE		0x00002	/* Transmit stopped */
-#define	GMAC_DMA_INT_TIE		0x00001	/* Transmit interrupt */
+#define	GMAC_MII_BUSY			__BIT(0)
+#define	GMAC_MII_WRITE			__BIT(1)
+#define	GMAC_MII_CLKMASK		__BITS(4,2)
+
+#define	GMAC_BUSMODE_RESET		__BIT(0)
+
+#define	AWIN_GMAC_MII_IRQ		__BIT(0)
+
+#define	GMAC_DMA_OP_FLUSHTX		__BIT(20)
+#define	GMAC_DMA_OP_TXSTART		__BIT(13)
+#define	GMAC_DMA_OP_RXSTART		__BIT(0)
+
+#define GMAC_DMA_INT_NIE		__BIT(16) /* Normal/Summary */
+#define GMAC_DMA_INT_AIE		__BIT(15) /* Abnormal/Summary */
+#define	GMAC_DMA_INT_ERE		__BIT(14) /* Early receive */
+#define	GMAC_DMA_INT_FBE		__BIT(13) /* Fatal bus error */
+#define	GMAC_DMA_INT_ETE		__BIT(10) /* Early transmit */
+#define	GMAC_DMA_INT_RWE		__BIT(9) /* Receive watchdog */
+#define	GMAC_DMA_INT_RSE		__BIT(8) /* Receive stopped */
+#define	GMAC_DMA_INT_RUE		__BIT(7) /* Receive buffer unavailable */
+#define	GMAC_DMA_INT_RIE		__BIT(6) /* Receive interrupt */
+#define	GMAC_DMA_INT_UNE		__BIT(5) /* Tx underflow */
+#define	GMAC_DMA_INT_OVE		__BIT(4) /* Receive overflow */
+#define	GMAC_DMA_INT_TJE		__BIT(3) /* Transmit jabber */
+#define	GMAC_DMA_INT_TUE		__BIT(2) /* Transmit buffer unavailable */
+#define	GMAC_DMA_INT_TSE		__BIT(1) /* Transmit stopped */
+#define	GMAC_DMA_INT_TIE		__BIT(0) /* Transmit interrupt */
 
 #define	GMAC_DEF_DMA_INT_MASK	(GMAC_DMA_INT_TIE|GMAC_DMA_INT_RIE| \
 				GMAC_DMA_INT_NIE|GMAC_DMA_INT_AIE| \
@@ -92,42 +97,49 @@
 struct dwc_gmac_dev_dmadesc {
 	uint32_t ddesc_status;
 /* both: */
-#define	DDESC_STATUS_OWNEDBYDEV		(1<<31)
-/* for TX descriptors */
-#define	DDESC_STATUS_TXINT		(1<<30)
-#define DDESC_STATUS_TXLAST		(1<<29)
-#define	DDESC_STATUS_TXFIRST		(1<<28)
-#define	DDESC_STATUS_TXCRCDIS		(1<<27)
-#define	DDESC_STATUS_TXPADDIS		(1<<26)
-#define	DDESC_STATUS_TXCHECKINSCTRL	(1<<22)
-#define	DDESC_STATUS_TXRINGEND		(1<<21)
-#define	DDESC_STATUS_TXCHAIN		(1<<20)
-#define	DDESC_STATUS_MASK		0x1ffff
+#define	DDESC_STATUS_OWNEDBYDEV		__BIT(31)
+
 /* for RX descriptors */
-#define	DDESC_STATUS_DAFILTERFAIL	(1<<30)
-#define	DDESC_STATUS_FRMLENMSK		(0x3fff << 16)
+#define	DDESC_STATUS_DAFILTERFAIL	__BIT(30)
+#define	DDESC_STATUS_FRMLENMSK		__BITS(29,16)
 #define	DDESC_STATUS_FRMLENSHIFT	16
-#define	DDESC_STATUS_RXERROR		(1<<15)
-#define	DDESC_STATUS_RXTRUNCATED	(1<<14)
-#define	DDESC_STATUS_SAFILTERFAIL	(1<<13)
-#define	DDESC_STATUS_RXIPC_GIANTFRAME	(1<<12)
-#define	DDESC_STATUS_RXDAMAGED		(1<<11)
-#define	DDESC_STATUS_RXVLANTAG		(1<<10)
-#define	DDESC_STATUS_RXFIRST		(1<<9)
-#define	DDESC_STATUS_RXLAST		(1<<8)
-#define	DDESC_STATUS_RXIPC_GIANT	(1<<7)
-#define	DDESC_STATUS_RXCOLLISION	(1<<6)
-#define	DDESC_STATUS_RXFRAMEETHER	(1<<5)
-#define	DDESC_STATUS_RXWATCHDOG		(1<<4)
-#define	DDESC_STATUS_RXMIIERROR		(1<<3)
-#define	DDESC_STATUS_RXDRIBBLING	(1<<2)
-#define	DDESC_STATUS_RXCRC		1
+#define	DDESC_STATUS_RXERROR		__BIT(15)
+#define	DDESC_STATUS_RXTRUNCATED	__BIT(14)
+#define	DDESC_STATUS_SAFILTERFAIL	__BIT(13)
+#define	DDESC_STATUS_RXIPC_GIANTFRAME	__BIT(12)
+#define	DDESC_STATUS_RXDAMAGED		__BIT(11)
+#define	DDESC_STATUS_RXVLANTAG		__BIT(10)
+#define	DDESC_STATUS_RXFIRST		__BIT(9)
+#define	DDESC_STATUS_RXLAST		__BIT(8)
+#define	DDESC_STATUS_RXIPC_GIANT	__BIT(7)
+#define	DDESC_STATUS_RXCOLLISION	__BIT(6)
+#define	DDESC_STATUS_RXFRAMEETHER	__BIT(5)
+#define	DDESC_STATUS_RXWATCHDOG		__BIT(4)
+#define	DDESC_STATUS_RXMIIERROR		__BIT(3)
+#define	DDESC_STATUS_RXDRIBBLING	__BIT(2)
+#define	DDESC_STATUS_RXCRC		__BIT(1)
 
 	uint32_t ddesc_cntl;
-#define	DDESC_CNTL_SIZE1MASK		0x1fff
+
+/* for TX descriptors */
+#define	DDESC_CNTL_TXINT		__BIT(31)
+#define DDESC_CNTL_TXLAST		__BIT(30)
+#define	DDESC_CNTL_TXFIRST		__BIT(29)
+#define	DDESC_CNTL_TXCHECKINSCTRL	__BIT(27)
+#define	DDESC_CNTL_TXCRCDIS		__BIT(26)
+#define	DDESC_CNTL_TXRINGEND		__BIT(25)
+#define	DDESC_CNTL_TXCHAIN		__BIT(24)
+
+/* for RX descriptors */
+#define	DDESC_CNTL_RXINTDIS		__BIT(31)
+#define	DDESC_CNTL_RXRINGEND		__BIT(25)
+#define	DDESC_CNTL_RXCHAIN		__BIT(24)
+
+/* both */
+#define	DDESC_CNTL_SIZE1MASK		__BITS(10,0)
 #define	DDESC_CNTL_SIZE1SHIFT		0
-#define	DDESC_CNTL_SIZE2MASK		(0x1fff<<16)
-#define	DDESC_CNTL_SIZE2SHIFT		16
+#define	DDESC_CNTL_SIZE2MASK		__BITS(21,11)
+#define	DDESC_CNTL_SIZE2SHIFT		11
 
 	uint32_t ddesc_data;	/* pointer to buffer data */
 	uint32_t ddesc_next;	/* link to next descriptor */

Reply via email to