[Top][All Lists]
[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;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Qemu-devel] [5520] ETRAX-FS: Drop DMA polling for ethernet.,
Edgar E. Iglesias <=