PCnet: Allow more then two TMDs (Jan Kiszka)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4225 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
b305b5ba18
commit
9bd0d29401
13
hw/pcnet.c
13
hw/pcnet.c
@ -1249,15 +1249,14 @@ static void pcnet_transmit(PCNetState *s)
|
||||
#endif
|
||||
if (GET_FIELD(tmd.status, TMDS, STP)) {
|
||||
s->xmit_pos = 0;
|
||||
if (!GET_FIELD(tmd.status, TMDS, ENP)) {
|
||||
int bcnt = 4096 - GET_FIELD(tmd.length, TMDL, BCNT);
|
||||
s->phys_mem_read(s->dma_opaque, PHYSADDR(s, tmd.tbadr),
|
||||
s->buffer, bcnt, CSR_BSWP(s));
|
||||
s->xmit_pos += bcnt;
|
||||
}
|
||||
xmit_cxda = PHYSADDR(s,CSR_CXDA(s));
|
||||
}
|
||||
if (GET_FIELD(tmd.status, TMDS, ENP) && (s->xmit_pos >= 0)) {
|
||||
if (!GET_FIELD(tmd.status, TMDS, ENP)) {
|
||||
int bcnt = 4096 - GET_FIELD(tmd.length, TMDL, BCNT);
|
||||
s->phys_mem_read(s->dma_opaque, PHYSADDR(s, tmd.tbadr),
|
||||
s->buffer + s->xmit_pos, bcnt, CSR_BSWP(s));
|
||||
s->xmit_pos += bcnt;
|
||||
} else if (s->xmit_pos >= 0) {
|
||||
int bcnt = 4096 - GET_FIELD(tmd.length, TMDL, BCNT);
|
||||
s->phys_mem_read(s->dma_opaque, PHYSADDR(s, tmd.tbadr),
|
||||
s->buffer + s->xmit_pos, bcnt, CSR_BSWP(s));
|
||||
|
Loading…
Reference in New Issue
Block a user