diff options
author | Edgar E. Iglesias <edgar.iglesias@gmail.com> | 2011-08-09 12:13:26 +0200 |
---|---|---|
committer | Edgar E. Iglesias <edgar.iglesias@gmail.com> | 2011-08-09 13:42:04 +0200 |
commit | 1da005b37482b51eaa4e5c6fa35d6d50687d83f1 (patch) | |
tree | 8b4b42c0b1993d1adcacd1d5bbb220f7a4cf9b31 /hw/etraxfs_eth.c | |
parent | bbea04df9811ba3312aab93cbbafff3ff3a9aa02 (diff) |
etrax: Allocate DMA connections at board level.
Signed-off-by: Edgar E. Iglesias <edgar.iglesias@gmail.com>
Diffstat (limited to 'hw/etraxfs_eth.c')
-rw-r--r-- | hw/etraxfs_eth.c | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/hw/etraxfs_eth.c b/hw/etraxfs_eth.c index dff5f55f33..6453077056 100644 --- a/hw/etraxfs_eth.c +++ b/hw/etraxfs_eth.c @@ -562,7 +562,11 @@ static void eth_cleanup(VLANClientState *nc) cpu_unregister_io_memory(eth->ethregs); - qemu_free(eth->dma_out); + /* Disconnect the client. */ + eth->dma_out->client.push = NULL; + eth->dma_out->client.opaque = NULL; + eth->dma_in->client.opaque = NULL; + eth->dma_in->client.pull = NULL; qemu_free(eth); } @@ -575,23 +579,23 @@ static NetClientInfo net_etraxfs_info = { .link_status_changed = eth_set_link, }; -void *etraxfs_eth_init(NICInfo *nd, target_phys_addr_t base, int phyaddr) +void etraxfs_eth_init(NICInfo *nd, target_phys_addr_t base, int phyaddr, + struct etraxfs_dma_client *dma_out, + struct etraxfs_dma_client *dma_in) { - struct etraxfs_dma_client *dma = NULL; struct fs_eth *eth = NULL; qemu_check_nic_model(nd, "fseth"); - dma = qemu_mallocz(sizeof *dma * 2); eth = qemu_mallocz(sizeof *eth); - dma[0].client.push = eth_tx_push; - dma[0].client.opaque = eth; - dma[1].client.opaque = eth; - dma[1].client.pull = NULL; + dma_out->client.push = eth_tx_push; + dma_out->client.opaque = eth; + dma_in->client.opaque = eth; + dma_in->client.pull = NULL; - eth->dma_out = dma; - eth->dma_in = dma + 1; + eth->dma_out = dma_out; + eth->dma_in = dma_in; /* Connect the phy. */ eth->phyaddr = phyaddr & 0x1f; @@ -608,6 +612,4 @@ void *etraxfs_eth_init(NICInfo *nd, target_phys_addr_t base, int phyaddr) eth->nic = qemu_new_nic(&net_etraxfs_info, ð->conf, nd->model, nd->name, eth); - - return dma; } |