Fix rtl8139 checksum calculation, by Tim Deegan.

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3109 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
ths 2007-08-01 13:10:29 +00:00
parent bf5ee2487b
commit ccf1d14a1e
1 changed files with 5 additions and 6 deletions

View File

@ -53,9 +53,8 @@
/* debug RTL8139 card C+ mode only */ /* debug RTL8139 card C+ mode only */
//#define DEBUG_RTL8139CP 1 //#define DEBUG_RTL8139CP 1
/* RTL8139 provides frame CRC with received packet, this feature seems to be /* Calculate CRCs properly on Rx packets */
ignored by most drivers, disabled by default */ #define RTL8139_CALCULATE_RXCRC 1
//#define RTL8139_CALCULATE_RXCRC 1
/* Uncomment to enable on-board timer interrupts */ /* Uncomment to enable on-board timer interrupts */
//#define RTL8139_ONBOARD_TIMER 1 //#define RTL8139_ONBOARD_TIMER 1
@ -747,7 +746,7 @@ static void rtl8139_write_buffer(RTL8139State *s, const void *buf, int size)
int wrapped = MOD2(s->RxBufAddr + size, s->RxBufferSize); int wrapped = MOD2(s->RxBufAddr + size, s->RxBufferSize);
/* write packet data */ /* write packet data */
if (wrapped && s->RxBufferSize < 65536 && !rtl8139_RxWrap(s)) if (wrapped && !(s->RxBufferSize < 65536 && rtl8139_RxWrap(s)))
{ {
DEBUG_PRINT((">>> RTL8139: rx packet wrapped in buffer at %d\n", size-wrapped)); DEBUG_PRINT((">>> RTL8139: rx packet wrapped in buffer at %d\n", size-wrapped));
@ -1023,7 +1022,7 @@ static void rtl8139_do_receive(void *opaque, const uint8_t *buf, int size, int d
/* write checksum */ /* write checksum */
#if defined (RTL8139_CALCULATE_RXCRC) #if defined (RTL8139_CALCULATE_RXCRC)
val = cpu_to_le32(crc32(~0, buf, size)); val = cpu_to_le32(crc32(0, buf, size));
#else #else
val = 0; val = 0;
#endif #endif
@ -1129,7 +1128,7 @@ static void rtl8139_do_receive(void *opaque, const uint8_t *buf, int size, int d
/* write checksum */ /* write checksum */
#if defined (RTL8139_CALCULATE_RXCRC) #if defined (RTL8139_CALCULATE_RXCRC)
val = cpu_to_le32(crc32(~0, buf, size)); val = cpu_to_le32(crc32(0, buf, size));
#else #else
val = 0; val = 0;
#endif #endif