Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 18 Oct 2009 15:59:27 GMT
From:      Yohanes Nugroho <yohanes@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 169569 for review
Message-ID:  <200910181559.n9IFxRDf003267@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://p4web.freebsd.org/chv.cgi?CH=169569

Change 169569 by yohanes@econa on 2009/10/18 15:59:19

	 	remove m_devget	

Affected files ...

.. //depot/projects/str91xx/src/sys/arm/conf/CNS11XXNAS#5 edit
.. //depot/projects/str91xx/src/sys/arm/econa/if_ece.c#7 edit

Differences ...

==== //depot/projects/str91xx/src/sys/arm/conf/CNS11XXNAS#5 (text+ko) ====

@@ -52,8 +52,8 @@
 #options		COMPAT_FREEBSD7	
 
 
-#options 	SCHED_ULE		#ULE scheduler
-options 	SCHED_4BSD		#4BSD scheduler
+options 	SCHED_ULE		#ULE scheduler
+#options 	SCHED_4BSD		#4BSD scheduler
 options 	GEOM_PART_GPT		# GUID Partition Tables.
 #options 	GEOM_PART_EBR
 #options 	GEOM_PART_EBR_COMPAT

==== //depot/projects/str91xx/src/sys/arm/econa/if_ece.c#7 (text+ko) ====

@@ -67,6 +67,9 @@
 #include "miibus_if.h"
 
 
+//#define ECE_MAX_TX_BUFFERS 256
+//#define ECE_MAX_RX_BUFFERS 256
+
 #define ECE_MAX_TX_BUFFERS 128
 #define ECE_MAX_RX_BUFFERS 128
 
@@ -307,7 +310,7 @@
 		
 	for (ii = 0; ii < 0x1000; ii++) {
 		status = RD4(sc, PHY_CONTROL);
-		DELAY(1);
+		//DELAY(1);
 		if (status & (0x1 << 15)) {
 			/* clear the rw_ok status, and clear other bits value */
 			WR4(sc, PHY_CONTROL, (0x1 << 15));
@@ -655,7 +658,7 @@
 
 	desc_paddr = sc->ring_paddr_tx;
 	
-
+	
 	/* Allocate a busdma tag for mbufs. */
 	error = bus_dma_tag_create(sc->sc_parent_tag,	/* parent */
 	    16, 0,				/* alignment, boundary */
@@ -1594,13 +1597,15 @@
 
 			bus_dmamap_sync(sc->dmatag_data_rx, sc->dmap_rx[idx],
 					BUS_DMASYNC_POSTREAD|BUS_DMASYNC_POSTWRITE);
-
+#if 0
 			mb = m_devget((void *)sc->buffer_rx[idx]->m_data,
 				      desc->length+16,
 				      0, ifp, NULL);			
 
 			if (mb) {
+//				int l;
 				mb->m_data += 2;
+
 				if (desc->prot!=3) {
 					mb->m_pkthdr.csum_flags |= CSUM_IP_CHECKED;
 					mb->m_pkthdr.csum_flags |= CSUM_IP_VALID;
@@ -1608,6 +1613,15 @@
 				}
 
 				mb->m_len = mb->m_pkthdr.len;
+/*
+				printf("packet len %d\n", mb->m_len);
+				for (l = 0; l<mb->m_len; l++) {
+					printf("%02x ", mb->m_data[l]);
+					if (((l+1) %16)==0) {
+						printf("\n");
+					}
+				}
+				printf("-----\n");*/
 				ECE_RXUNLOCK(sc);
 				(*ifp->if_input)(ifp, mb);
 				ECE_RXLOCK(sc);		      
@@ -1615,7 +1629,40 @@
 				if_printf(sc->ifp, "no mbuf length = %d\n", desc->length);
 				/* Give up if no mbufs */
 			}
+#else
 
+			mb = sc->buffer_rx[idx];
+			mb->m_data += 2;
+			mb->m_pkthdr.rcvif = ifp;
+			if (desc->prot!=3) {
+				mb->m_pkthdr.csum_flags |= CSUM_IP_CHECKED;
+				mb->m_pkthdr.csum_flags |= CSUM_IP_VALID;
+				mb->m_pkthdr.csum_data = 0xffff;
+			}
+			
+			mb->m_len = mb->m_pkthdr.len = desc->length+16;
+/*
+
+			int l;
+				printf("packet len %d\n", mb->m_len);
+				for (l = 0; l<mb->m_len; l++) {
+					printf("%02x ", mb->m_data[l]);
+					if (((l+1) %16)==0) {
+						printf("\n");
+					}
+				}
+				printf("-----\n");*/
+
+			ECE_RXUNLOCK(sc);
+			(*ifp->if_input)(ifp, mb);
+			ECE_RXLOCK(sc);		      
+
+			ece_new_rxbuf(sc->dmatag_ring_rx, &sc->dmap_rx[idx], 
+				      &(sc->buffer_rx[idx]),
+				      (bus_addr_t *)&(desc->data_ptr));
+
+#endif
+
 		} else {
 			/*not ready, process later*/
 			return;
@@ -1682,12 +1729,15 @@
 	struct ece_softc *sc = xsc;
 	struct ifnet *ifp = sc->ifp;
 	int stat;
-	int fssd_curr, fssd;
+	//int fssd_curr, fssd;
 	stat = RD4(sc, INTERRUPT_STATUS);
 	
-	fssd_curr = RD4(sc, FS_DESCRIPTOR_POINTER);
+
+	//printf("status = %08x\n", stat);
+
+	//fssd_curr = RD4(sc, FS_DESCRIPTOR_POINTER);
 
-	fssd = (fssd_curr - (uint32_t)sc->ring_paddr_rx)>>4;
+	//fssd = (fssd_curr - (uint32_t)sc->ring_paddr_rx)>>4;
 
 	WR4(sc, INTERRUPT_STATUS, stat);
 
@@ -1696,7 +1746,7 @@
 		return;
 	}
 
-	taskqueue_enqueue(sc->sc_tq, &sc->sc_intr_task);
+	//taskqueue_enqueue(sc->sc_tq, &sc->sc_intr_task);
 }
 
 static void
@@ -1850,6 +1900,8 @@
 
 	sc->curr_tx_mbuf = (sc->curr_tx_mbuf+1) % ECE_MAX_TX_BUFFERS;
 
+	//printf("encap nsegs = %d\n", nsegs);
+
 	/* Everything is ok, now we can send buffers */
 	for (seg = 0; seg < nsegs; seg++) {
 
@@ -1858,6 +1910,7 @@
 		}
 		
 		desc->length = segs[seg].ds_len;
+		//	printf("dlength = %d\n", desc->length);
 		desc->data_ptr = segs[seg].ds_addr;
 
 		//dw->buffer = m0;



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