svn commit: r308803 - head/sys/mips/atheros/ar531x

Michael Zhilin mizhka at FreeBSD.org
Fri Nov 18 14:06:31 UTC 2016


Author: mizhka
Date: Fri Nov 18 14:06:29 2016
New Revision: 308803
URL: https://svnweb.freebsd.org/changeset/base/308803

Log:
  [mips/ar531x] code cleanup, non-INTRNG support
  
  This commit improves code styles like:
   - removing commented code
   - format comments as C-style
   - add spaces after #define-s
  
  It also bring ability to build kernel without INTRNG and remove RedBoot dependency.
  
  Tested on FON2201
  
  Submitted by:	Hiroki Sato <yamori813 at yahoo.co.jp>
  Reviewed by:	adrian, mizhka
  Approved by:	adrian(mentor)
  Differential Revision:	https://reviews.freebsd.org/D8557

Modified:
  head/sys/mips/atheros/ar531x/files.ar5315
  head/sys/mips/atheros/ar531x/if_are.c
  head/sys/mips/atheros/ar531x/if_arereg.h

Modified: head/sys/mips/atheros/ar531x/files.ar5315
==============================================================================
--- head/sys/mips/atheros/ar531x/files.ar5315	Fri Nov 18 09:03:31 2016	(r308802)
+++ head/sys/mips/atheros/ar531x/files.ar5315	Fri Nov 18 14:06:29 2016	(r308803)
@@ -14,17 +14,18 @@ mips/atheros/ar531x/uart_cpu_ar5315.c		o
 mips/atheros/ar531x/ar5312_chip.c		standard
 
 mips/atheros/ar71xx_bus_space_reversed.c	standard
-#mips/mips/intr_machdep.c			standard
 mips/mips/tick.c				standard
 
 dev/etherswitch/e6000sw/e6060sw.c		optional etherswitch
-dev/etherswitch/realtek/rtl830x.c		optional etherswitch
 
 # Hack to reuse ARM intrng code
-kern/subr_intr.c				standard
-kern/msi_if.m					standard
-kern/pic_if.m					standard
+kern/subr_intr.c				optional intrng
+kern/msi_if.m					optional intrng
+kern/pic_if.m					optional intrng
 
 # Intrng compatible MIPS32 interrupt controller
-mips/mips/mips_pic.c				standard
+mips/mips/mips_pic.c				optional intrng
+
+# Non Intrng
+mips/mips/intr_machdep.c			optional !intrng
 

Modified: head/sys/mips/atheros/ar531x/if_are.c
==============================================================================
--- head/sys/mips/atheros/ar531x/if_are.c	Fri Nov 18 09:03:31 2016	(r308802)
+++ head/sys/mips/atheros/ar531x/if_are.c	Fri Nov 18 14:06:29 2016	(r308803)
@@ -35,7 +35,7 @@
 __FBSDID("$FreeBSD$");
 
 /*
- * AR231x Ethernet interface driver
+ * AR531x Ethernet interface driver
  * copy from mips/idt/if_kr.c and netbsd code
  */
 #include <sys/param.h>
@@ -90,8 +90,6 @@ MODULE_DEPEND(are, miibus, 1, 1, 1);
 #include <mips/atheros/ar531x/ar5315_setup.h>
 #include <mips/atheros/ar531x/if_arereg.h>
 
-//#define ARE_DEBUG
-
 #ifdef ARE_DEBUG
 void dump_txdesc(struct are_softc *, int);
 void dump_status_reg(struct are_softc *);
@@ -226,7 +224,7 @@ are_attach(device_t dev)
 	unit = device_get_unit(dev);
 	sc->are_dev = dev;
 
-	// hardcode macaddress
+	/* hardcode macaddress */
 	sc->are_eaddr[0] = 0x00;
 	sc->are_eaddr[1] = 0x0C;
 	sc->are_eaddr[2] = 0x42;
@@ -234,7 +232,7 @@ are_attach(device_t dev)
 	sc->are_eaddr[4] = 0x5E;
 	sc->are_eaddr[5] = 0x6B;
 
-	// try to get from hints
+	/* try to get from hints */
 	if (!resource_string_value(device_get_name(dev),
 		device_get_unit(dev), "macaddr", (const char **)&local_macstr)) {
 		uint32_t tmpmac[ETHER_ADDR_LEN];
@@ -302,12 +300,16 @@ are_attach(device_t dev)
 	ifp->if_ioctl = are_ioctl;
 	ifp->if_start = are_start;
 	ifp->if_init = are_init;
+	sc->are_if_flags = ifp->if_flags;
 
 	/* XXX: add real size */
 	IFQ_SET_MAXLEN(&ifp->if_snd, 9);
 	ifp->if_snd.ifq_maxlen = 9;
 	IFQ_SET_READY(&ifp->if_snd);
 
+	/* Tell the upper layer(s) we support long frames. */
+	ifp->if_capabilities |= IFCAP_VLAN_MTU;
+
 	ifp->if_capenable = ifp->if_capabilities;
 
 	if (are_dma_alloc(sc) != 0) {
@@ -315,14 +317,6 @@ are_attach(device_t dev)
 		goto fail;
 	}
 
-	/* TODO: calculate prescale */
-/*
-	CSR_WRITE_4(sc, ARE_ETHMCP, (165000000 / (1250000 + 1)) & ~1);
-
-	CSR_WRITE_4(sc, ARE_MIIMCFG, ARE_MIIMCFG_R);
-	DELAY(1000);
-	CSR_WRITE_4(sc, ARE_MIIMCFG, 0);
-*/
 	CSR_WRITE_4(sc, CSR_BUSMODE, BUSMODE_SWR);
 	DELAY(1000);
 
@@ -350,11 +344,11 @@ are_attach(device_t dev)
 
 #ifdef INTRNG
 	char *name;
-	if(ar531x_soc >= AR531X_SOC_AR5315) {
+	if (ar531x_soc >= AR531X_SOC_AR5315) {
 		enetirq = AR5315_CPU_IRQ_ENET;
 		name = "enet";
 	} else {
-		if(device_get_unit(dev) == 0) {
+		if (device_get_unit(dev) == 0) {
 			enetirq = AR5312_IRQ_ENET0;
 			name = "enet0";
 		} else {
@@ -465,7 +459,6 @@ are_miibus_readreg(device_t dev, int phy
 
 	addr = (phy << MIIADDR_PHY_SHIFT) | (reg << MIIADDR_REG_SHIFT);
 	CSR_WRITE_4(sc, CSR_MIIADDR, addr);
-//	AE_BARRIER(sc);
 	for (i = 0; i < 100000000; i++) {
 		if ((CSR_READ_4(sc, CSR_MIIADDR) & MIIADDR_BUSY) == 0)
 			break;
@@ -488,7 +481,6 @@ are_miibus_writereg(device_t dev, int ph
 	addr = (phy << MIIADDR_PHY_SHIFT) | (reg << MIIADDR_REG_SHIFT) |
 	    MIIADDR_WRITE;
 	CSR_WRITE_4(sc, CSR_MIIADDR, addr);
-//	AE_BARRIER(sc);
 
 	for (i = 0; i < 100000000; i++) {
 		if ((CSR_READ_4(sc, CSR_MIIADDR) & MIIADDR_BUSY) == 0)
@@ -610,7 +602,6 @@ are_init_locked(struct are_softc *sc)
 	 */
 	CSR_WRITE_4(sc, CSR_BUSMODE,
 	    /* XXX: not sure if this is a good thing or not... */
-	    //BUSMODE_ALIGN_16B |
 	    BUSMODE_BAR | BUSMODE_BLE | BUSMODE_PBL_4LW);
 
 	/*
@@ -648,15 +639,16 @@ are_init_locked(struct are_softc *sc)
 	/*
 	 * Start the mac.
 	 */
-	CSR_WRITE_4(sc, CSR_MACCTL, CSR_READ_4(sc, CSR_MACCTL) | 
-	    (MACCTL_RE | MACCTL_TE));
+	CSR_WRITE_4(sc, CSR_FLOWC, FLOWC_FCE);
+	CSR_WRITE_4(sc, CSR_MACCTL, MACCTL_RE | MACCTL_TE |
+	    MACCTL_PM | MACCTL_FDX | MACCTL_HBD | MACCTL_RA);
 
 	/*
 	 * Write out the opmode.
 	 */
-	CSR_WRITE_4(sc, CSR_OPMODE, OPMODE_SR | OPMODE_ST |
-//	    ae_txthresh[sc->sc_txthresh].txth_opmode);
+	CSR_WRITE_4(sc, CSR_OPMODE, OPMODE_SR | OPMODE_ST | OPMODE_SF |
 	    OPMODE_TR_64);
+
 	/*
 	 * Start the receive process.
 	 */
@@ -741,7 +733,6 @@ are_encap(struct are_softc *sc, struct m
 		if (i == 0)
 			desc->are_devcs |= ADCTL_Tx_FS;
 		desc->are_addr = txsegs[i].ds_addr;
-//		desc->are_link = 0;
 		/* link with previous descriptor */
 		if (prev_desc)
 			prev_desc->are_link = ARE_TX_RING_ADDR(sc, prod);
@@ -850,6 +841,36 @@ are_stop(struct are_softc *sc)
 
 }
 
+static int
+are_set_filter(struct are_softc *sc)
+{
+	struct ifnet	    *ifp;
+	int mchash[2];
+	int macctl;
+
+	ifp = sc->are_ifp;
+
+	macctl = CSR_READ_4(sc, CSR_MACCTL);
+	macctl &= ~(MACCTL_PR | MACCTL_PM);
+	macctl |= MACCTL_HBD;
+
+	if (ifp->if_flags & IFF_PROMISC)
+		macctl |= MACCTL_PR;
+
+	/* Todo: hash table set. 
+	 * But I don't know how to use multicast hash table at this soc.
+	 */
+
+	/* this is allmulti */
+	mchash[0] = mchash[1] = 0xffffffff;
+	macctl |= MACCTL_PM;
+
+	CSR_WRITE_4(sc, CSR_HTLO, mchash[0]);
+	CSR_WRITE_4(sc, CSR_HTHI, mchash[1]);
+	CSR_WRITE_4(sc, CSR_MACCTL, macctl);
+
+	return 0;
+}
 
 static int
 are_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
@@ -863,7 +884,6 @@ are_ioctl(struct ifnet *ifp, u_long comm
 
 	switch (command) {
 	case SIOCSIFFLAGS:
-#if 0
 		ARE_LOCK(sc);
 		if (ifp->if_flags & IFF_UP) {
 			if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
@@ -880,16 +900,13 @@ are_ioctl(struct ifnet *ifp, u_long comm
 		}
 		sc->are_if_flags = ifp->if_flags;
 		ARE_UNLOCK(sc);
-#endif
 		error = 0;
 		break;
 	case SIOCADDMULTI:
 	case SIOCDELMULTI:
-#if 0
 		ARE_LOCK(sc);
 		are_set_filter(sc);
 		ARE_UNLOCK(sc);
-#endif
 		error = 0;
 		break;
 	case SIOCGIFMEDIA:
@@ -903,28 +920,6 @@ are_ioctl(struct ifnet *ifp, u_long comm
 		break;
 	case SIOCSIFCAP:
 		error = 0;
-#if 0
-		mask = ifr->ifr_reqcap ^ ifp->if_capenable;
-		if ((mask & IFCAP_HWCSUM) != 0) {
-			ifp->if_capenable ^= IFCAP_HWCSUM;
-			if ((IFCAP_HWCSUM & ifp->if_capenable) &&
-			    (IFCAP_HWCSUM & ifp->if_capabilities))
-				ifp->if_hwassist = ARE_CSUM_FEATURES;
-			else
-				ifp->if_hwassist = 0;
-		}
-		if ((mask & IFCAP_VLAN_HWTAGGING) != 0) {
-			ifp->if_capenable ^= IFCAP_VLAN_HWTAGGING;
-			if (IFCAP_VLAN_HWTAGGING & ifp->if_capenable &&
-			    IFCAP_VLAN_HWTAGGING & ifp->if_capabilities &&
-			    ifp->if_drv_flags & IFF_DRV_RUNNING) {
-				ARE_LOCK(sc);
-				are_vlan_setup(sc);
-				ARE_UNLOCK(sc);
-			}
-		}
-		VLAN_CAPABILITIES(ifp);
-#endif
 		break;
 	default:
 		error = ether_ioctl(ifp, command, data);
@@ -1343,7 +1338,7 @@ are_newbuf(struct are_softc *sc, int idx
 		return (ENOBUFS);
 	m->m_len = m->m_pkthdr.len = MCLBYTES;
 
-	// tcp header boundary margin
+	/* tcp header boundary margin */
 	m_adj(m, 4);
 
 	if (bus_dmamap_load_mbuf_sg(sc->are_cdata.are_rx_tag,
@@ -1355,9 +1350,11 @@ are_newbuf(struct are_softc *sc, int idx
 
 	rxd = &sc->are_cdata.are_rxdesc[idx];
 	if (rxd->rx_m != NULL) {
-// This code make bug. Make scranble on buffer data.
-//		bus_dmamap_sync(sc->are_cdata.are_rx_tag, rxd->rx_dmamap,
-//		    BUS_DMASYNC_POSTREAD);
+		/*
+		 * THis is if_kr.c original code but make bug. Make scranble on buffer data.
+		 * bus_dmamap_sync(sc->are_cdata.are_rx_tag, rxd->rx_dmamap,
+		 *    BUS_DMASYNC_POSTREAD);
+		 */
 		bus_dmamap_unload(sc->are_cdata.are_rx_tag, rxd->rx_dmamap);
 	}
 	map = rxd->rx_dmamap;
@@ -1551,7 +1548,6 @@ are_intr(void *arg)
 	struct are_softc		*sc = arg;
 	uint32_t		status;
 	struct ifnet		*ifp = sc->are_ifp;
-//kdb_break();
 
 	ARE_LOCK(sc);
 

Modified: head/sys/mips/atheros/ar531x/if_arereg.h
==============================================================================
--- head/sys/mips/atheros/ar531x/if_arereg.h	Fri Nov 18 09:03:31 2016	(r308802)
+++ head/sys/mips/atheros/ar531x/if_arereg.h	Fri Nov 18 14:06:29 2016	(r308803)
@@ -37,17 +37,17 @@ struct are_desc {
 	uint32_t	are_link;
 };
 
-#define ARE_DMASIZE(len)		((len)  & ((1 << 11)-1))		
-#define ARE_PKTSIZE(len)		((len & 0xffff0000) >> 16)
+#define	ARE_DMASIZE(len)		((len)  & ((1 << 11)-1))		
+#define	ARE_PKTSIZE(len)		((len & 0xffff0000) >> 16)
 
-#define ARE_RX_RING_CNT		128
-#define ARE_TX_RING_CNT		128
-#define ARE_TX_RING_SIZE		sizeof(struct are_desc) * ARE_TX_RING_CNT
-#define ARE_RX_RING_SIZE		sizeof(struct are_desc) * ARE_RX_RING_CNT
-#define ARE_RING_ALIGN		sizeof(struct are_desc)
-#define ARE_RX_ALIGN		sizeof(uint32_t)
-#define ARE_MAXFRAGS		8
-#define ARE_TX_INTR_THRESH	8
+#define	ARE_RX_RING_CNT		128
+#define	ARE_TX_RING_CNT		128
+#define	ARE_TX_RING_SIZE		sizeof(struct are_desc) * ARE_TX_RING_CNT
+#define	ARE_RX_RING_SIZE		sizeof(struct are_desc) * ARE_RX_RING_CNT
+#define	ARE_RING_ALIGN		sizeof(struct are_desc)
+#define	ARE_RX_ALIGN		sizeof(uint32_t)
+#define	ARE_MAXFRAGS		8
+#define	ARE_TX_INTR_THRESH	8
 
 #define	ARE_TX_RING_ADDR(sc, i)	\
     ((sc)->are_rdata.are_tx_ring_paddr + sizeof(struct are_desc) * (i))
@@ -123,6 +123,7 @@ struct are_softc {
 	struct are_ring_data	are_rdata;
 	int			are_link_status;
 	int			are_detach;
+	int			are_if_flags;   /* last if flags */
 };
 
 #define	ARE_LOCK(_sc)		mtx_lock(&(_sc)->are_mtx)
@@ -132,11 +133,11 @@ struct are_softc {
 /*
  * register space access macros
  */
-#define CSR_WRITE_4(sc, reg, val)	\
-	bus_space_write_4(sc->are_btag, sc->are_bhandle, reg, val)
+#define	CSR_WRITE_4(sc, reg, val)	\
+    bus_space_write_4(sc->are_btag, sc->are_bhandle, reg, val)
 
-#define CSR_READ_4(sc, reg)		\
-	bus_space_read_4(sc->are_btag, sc->are_bhandle, reg)
+#define	CSR_READ_4(sc, reg)		\
+    bus_space_read_4(sc->are_btag, sc->are_bhandle, reg)
 
 
 /*	$NetBSD: aereg.h,v 1.2 2008/04/28 20:23:28 martin Exp $	*/


More information about the svn-src-head mailing list