Commit 8d6c7eb896fddb4d4361fc97ec90dda41e825df8
1 parent
7bf5be70
receive status register support (aka GRUB netboot fix)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@845 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
10 additions
and
2 deletions
hw/ne2000.c
... | ... | @@ -118,6 +118,7 @@ typedef struct NE2000State { |
118 | 118 | uint16_t tcnt; |
119 | 119 | uint16_t rcnt; |
120 | 120 | uint32_t rsar; |
121 | + uint8_t rsr; | |
121 | 122 | uint8_t isr; |
122 | 123 | uint8_t dcfg; |
123 | 124 | uint8_t imr; |
... | ... | @@ -212,7 +213,11 @@ static void ne2000_receive(void *opaque, const uint8_t *buf, int size) |
212 | 213 | next -= (s->stop - s->start); |
213 | 214 | /* prepare packet header */ |
214 | 215 | p = s->mem + index; |
215 | - p[0] = ENRSR_RXOK; /* receive status */ | |
216 | + s->rsr = ENRSR_RXOK; /* receive status */ | |
217 | + /* XXX: check this */ | |
218 | + if (buf[0] & 0x01) | |
219 | + s->rsr |= ENRSR_PHY; | |
220 | + p[0] = s->rsr; | |
216 | 221 | p[1] = next >> 8; |
217 | 222 | p[2] = total_len; |
218 | 223 | p[3] = total_len >> 8; |
... | ... | @@ -232,7 +237,7 @@ static void ne2000_receive(void *opaque, const uint8_t *buf, int size) |
232 | 237 | size -= len; |
233 | 238 | } |
234 | 239 | s->curpag = next >> 8; |
235 | - | |
240 | + | |
236 | 241 | /* now we can signal we have receive something */ |
237 | 242 | s->isr |= ENISR_RX; |
238 | 243 | ne2000_update_irq(s); |
... | ... | @@ -360,6 +365,9 @@ static uint32_t ne2000_ioport_read(void *opaque, uint32_t addr) |
360 | 365 | case EN1_MULT ... EN1_MULT + 7: |
361 | 366 | ret = s->mult[offset - EN1_MULT]; |
362 | 367 | break; |
368 | + case EN0_RSR: | |
369 | + ret = s->rsr; | |
370 | + break; | |
363 | 371 | default: |
364 | 372 | ret = 0x00; |
365 | 373 | break; | ... | ... |