qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [5520] ETRAX-FS: Drop DMA polling for ethernet.


From: Edgar E. Iglesias
Subject: [Qemu-devel] [5520] ETRAX-FS: Drop DMA polling for ethernet.
Date: Fri, 24 Oct 2008 09:18:40 +0000

Revision: 5520
          http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=5520
Author:   edgar_igl
Date:     2008-10-24 09:18:39 +0000 (Fri, 24 Oct 2008)

Log Message:
-----------
ETRAX-FS: Drop DMA polling for ethernet.

* Drop DMA poll mode. Instead immediately push rx frames straight into the DMA
  without waiting for DMA_run to poll them of the fifo.

Signed-off-by: Edgar E. Iglesias <address@hidden>

Modified Paths:
--------------
    trunk/hw/etraxfs_eth.c

Modified: trunk/hw/etraxfs_eth.c
===================================================================
--- trunk/hw/etraxfs_eth.c      2008-10-23 13:52:00 UTC (rev 5519)
+++ trunk/hw/etraxfs_eth.c      2008-10-24 09:18:39 UTC (rev 5520)
@@ -322,10 +322,6 @@
        uint8_t macaddr[2][6];
        uint32_t regs[FS_ETH_MAX_REGS];
 
-       unsigned char rx_fifo[1536];
-       int rx_fifo_len;
-       int rx_fifo_pos;
-
        struct etraxfs_dma_client *dma_out;
        struct etraxfs_dma_client *dma_in;
 
@@ -523,15 +519,7 @@
 
 static int eth_can_receive(void *opaque)
 {
-       struct fs_eth *eth = opaque;
-       int r;
-
-       r = eth->rx_fifo_len == 0;
-       if (!r) {
-               /* TODO: signal fifo overrun.  */
-               printf("PACKET LOSS!\n");
-       }
-       return r;
+       return 1;
 }
 
 static void eth_receive(void *opaque, const uint8_t *buf, int size)
@@ -556,40 +544,10 @@
            && !eth_match_groupaddr(eth, buf))
                return;
 
-       if (size > sizeof(eth->rx_fifo)) {
-               /* TODO: signal error.  */
-       } else if (eth->rx_fifo_len) {
-               /* FIFO overrun.  */
-       } else {
-               memcpy(eth->rx_fifo, buf, size);
-               /* +4, HW passes the CRC to sw.  */
-               eth->rx_fifo_len = size + 4;
-               eth->rx_fifo_pos = 0;
-       }
+       /* FIXME: Find another way to pass on the fake csum.  */
+       etraxfs_dmac_input(eth->dma_in, (void *)buf, size + 4, 1);
 }
 
-static void eth_rx_pull(void *opaque)
-{
-       struct fs_eth *eth = opaque;
-       int len;
-       if (eth->rx_fifo_len) {         
-               D(printf("%s %d\n", __func__, eth->rx_fifo_len));
-#if 0
-               {
-                       int i;
-                       for (i = 0; i < 32; i++)
-                               printf("%2.2x", eth->rx_fifo[i]);
-                       printf("\n");
-               }
-#endif
-               len = etraxfs_dmac_input(eth->dma_in,
-                                        eth->rx_fifo + eth->rx_fifo_pos, 
-                                        eth->rx_fifo_len, 1);
-               eth->rx_fifo_len -= len;
-               eth->rx_fifo_pos += len;
-       }
-}
-
 static int eth_tx_push(void *opaque, unsigned char *buf, int len)
 {
        struct fs_eth *eth = opaque;
@@ -628,7 +586,7 @@
        dma[0].client.push = eth_tx_push;
        dma[0].client.opaque = eth;
        dma[1].client.opaque = eth;
-       dma[1].client.pull = eth_rx_pull;
+       dma[1].client.pull = NULL;
 
        eth->env = env;
        eth->base = base;






reply via email to

[Prev in Thread] Current Thread [Next in Thread]