Commit aa25cf469485e41305425674e8e65f3c60874ef7
1 parent
875cdcf6
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 <edgar.iglesias@gmail.com> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5520 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
4 additions
and
46 deletions
hw/etraxfs_eth.c
| @@ -322,10 +322,6 @@ struct fs_eth | @@ -322,10 +322,6 @@ struct fs_eth | ||
| 322 | uint8_t macaddr[2][6]; | 322 | uint8_t macaddr[2][6]; |
| 323 | uint32_t regs[FS_ETH_MAX_REGS]; | 323 | uint32_t regs[FS_ETH_MAX_REGS]; |
| 324 | 324 | ||
| 325 | - unsigned char rx_fifo[1536]; | ||
| 326 | - int rx_fifo_len; | ||
| 327 | - int rx_fifo_pos; | ||
| 328 | - | ||
| 329 | struct etraxfs_dma_client *dma_out; | 325 | struct etraxfs_dma_client *dma_out; |
| 330 | struct etraxfs_dma_client *dma_in; | 326 | struct etraxfs_dma_client *dma_in; |
| 331 | 327 | ||
| @@ -523,15 +519,7 @@ static int eth_match_groupaddr(struct fs_eth *eth, const unsigned char *sa) | @@ -523,15 +519,7 @@ static int eth_match_groupaddr(struct fs_eth *eth, const unsigned char *sa) | ||
| 523 | 519 | ||
| 524 | static int eth_can_receive(void *opaque) | 520 | static int eth_can_receive(void *opaque) |
| 525 | { | 521 | { |
| 526 | - struct fs_eth *eth = opaque; | ||
| 527 | - int r; | ||
| 528 | - | ||
| 529 | - r = eth->rx_fifo_len == 0; | ||
| 530 | - if (!r) { | ||
| 531 | - /* TODO: signal fifo overrun. */ | ||
| 532 | - printf("PACKET LOSS!\n"); | ||
| 533 | - } | ||
| 534 | - return r; | 522 | + return 1; |
| 535 | } | 523 | } |
| 536 | 524 | ||
| 537 | static void eth_receive(void *opaque, const uint8_t *buf, int size) | 525 | static void eth_receive(void *opaque, const uint8_t *buf, int size) |
| @@ -556,38 +544,8 @@ static void eth_receive(void *opaque, const uint8_t *buf, int size) | @@ -556,38 +544,8 @@ static void eth_receive(void *opaque, const uint8_t *buf, int size) | ||
| 556 | && !eth_match_groupaddr(eth, buf)) | 544 | && !eth_match_groupaddr(eth, buf)) |
| 557 | return; | 545 | return; |
| 558 | 546 | ||
| 559 | - if (size > sizeof(eth->rx_fifo)) { | ||
| 560 | - /* TODO: signal error. */ | ||
| 561 | - } else if (eth->rx_fifo_len) { | ||
| 562 | - /* FIFO overrun. */ | ||
| 563 | - } else { | ||
| 564 | - memcpy(eth->rx_fifo, buf, size); | ||
| 565 | - /* +4, HW passes the CRC to sw. */ | ||
| 566 | - eth->rx_fifo_len = size + 4; | ||
| 567 | - eth->rx_fifo_pos = 0; | ||
| 568 | - } | ||
| 569 | -} | ||
| 570 | - | ||
| 571 | -static void eth_rx_pull(void *opaque) | ||
| 572 | -{ | ||
| 573 | - struct fs_eth *eth = opaque; | ||
| 574 | - int len; | ||
| 575 | - if (eth->rx_fifo_len) { | ||
| 576 | - D(printf("%s %d\n", __func__, eth->rx_fifo_len)); | ||
| 577 | -#if 0 | ||
| 578 | - { | ||
| 579 | - int i; | ||
| 580 | - for (i = 0; i < 32; i++) | ||
| 581 | - printf("%2.2x", eth->rx_fifo[i]); | ||
| 582 | - printf("\n"); | ||
| 583 | - } | ||
| 584 | -#endif | ||
| 585 | - len = etraxfs_dmac_input(eth->dma_in, | ||
| 586 | - eth->rx_fifo + eth->rx_fifo_pos, | ||
| 587 | - eth->rx_fifo_len, 1); | ||
| 588 | - eth->rx_fifo_len -= len; | ||
| 589 | - eth->rx_fifo_pos += len; | ||
| 590 | - } | 547 | + /* FIXME: Find another way to pass on the fake csum. */ |
| 548 | + etraxfs_dmac_input(eth->dma_in, (void *)buf, size + 4, 1); | ||
| 591 | } | 549 | } |
| 592 | 550 | ||
| 593 | static int eth_tx_push(void *opaque, unsigned char *buf, int len) | 551 | static int eth_tx_push(void *opaque, unsigned char *buf, int len) |
| @@ -628,7 +586,7 @@ void *etraxfs_eth_init(NICInfo *nd, CPUState *env, | @@ -628,7 +586,7 @@ void *etraxfs_eth_init(NICInfo *nd, CPUState *env, | ||
| 628 | dma[0].client.push = eth_tx_push; | 586 | dma[0].client.push = eth_tx_push; |
| 629 | dma[0].client.opaque = eth; | 587 | dma[0].client.opaque = eth; |
| 630 | dma[1].client.opaque = eth; | 588 | dma[1].client.opaque = eth; |
| 631 | - dma[1].client.pull = eth_rx_pull; | 589 | + dma[1].client.pull = NULL; |
| 632 | 590 | ||
| 633 | eth->env = env; | 591 | eth->env = env; |
| 634 | eth->base = base; | 592 | eth->base = base; |