Commit 219fb125039e175a92aa14684ac688305b5143bd
1 parent
8ead62cf
avoid unneeded dependencies
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2041 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
21 additions
and
18 deletions
hw/pcnet.c
| ... | ... | @@ -29,11 +29,6 @@ |
| 29 | 29 | |
| 30 | 30 | #include "vl.h" |
| 31 | 31 | |
| 32 | -/* XXX: suppress those headers */ | |
| 33 | -#include <sys/times.h> | |
| 34 | -#include <arpa/inet.h> | |
| 35 | -#include <net/ethernet.h> | |
| 36 | - | |
| 37 | 32 | //#define PCNET_DEBUG |
| 38 | 33 | //#define PCNET_DEBUG_IO |
| 39 | 34 | //#define PCNET_DEBUG_BCR |
| ... | ... | @@ -70,6 +65,12 @@ struct PCNetState_st { |
| 70 | 65 | #error FixMe |
| 71 | 66 | #endif |
| 72 | 67 | |
| 68 | +struct qemu_ether_header { | |
| 69 | + uint8_t ether_dhost[6]; | |
| 70 | + uint8_t ether_shost[6]; | |
| 71 | + uint16_t ether_type; | |
| 72 | +}; | |
| 73 | + | |
| 73 | 74 | /* BUS CONFIGURATION REGISTERS */ |
| 74 | 75 | #define BCR_MSRDA 0 |
| 75 | 76 | #define BCR_MSWRA 1 |
| ... | ... | @@ -441,7 +442,7 @@ static inline void pcnet_rmd_store(PCNetState *s, struct pcnet_RMD *rmd, target_ |
| 441 | 442 | #endif |
| 442 | 443 | |
| 443 | 444 | #define PRINT_PKTHDR(BUF) do { \ |
| 444 | - struct ether_header *hdr = (void *)(BUF); \ | |
| 445 | + struct qemu_ether_header *hdr = (void *)(BUF); \ | |
| 445 | 446 | printf("packet dhost=%02x:%02x:%02x:%02x:%02x:%02x, " \ |
| 446 | 447 | "shost=%02x:%02x:%02x:%02x:%02x:%02x, " \ |
| 447 | 448 | "type=0x%04x (bcast=%d)\n", \ |
| ... | ... | @@ -449,7 +450,7 @@ static inline void pcnet_rmd_store(PCNetState *s, struct pcnet_RMD *rmd, target_ |
| 449 | 450 | hdr->ether_dhost[3],hdr->ether_dhost[4],hdr->ether_dhost[5], \ |
| 450 | 451 | hdr->ether_shost[0],hdr->ether_shost[1],hdr->ether_shost[2], \ |
| 451 | 452 | hdr->ether_shost[3],hdr->ether_shost[4],hdr->ether_shost[5], \ |
| 452 | - htons(hdr->ether_type), \ | |
| 453 | + be16_to_cpu(hdr->ether_type), \ | |
| 453 | 454 | !!ETHER_IS_MULTICAST(hdr->ether_dhost)); \ |
| 454 | 455 | } while (0) |
| 455 | 456 | |
| ... | ... | @@ -462,7 +463,7 @@ static inline uint32_t lnc_mchash(const uint8_t *ether_addr) |
| 462 | 463 | int idx, bit; |
| 463 | 464 | uint8_t data; |
| 464 | 465 | |
| 465 | - for (idx = 0; idx < ETHER_ADDR_LEN; idx++) { | |
| 466 | + for (idx = 0; idx < 6; idx++) { | |
| 466 | 467 | for (data = *ether_addr++, bit = 0; bit < MULTICAST_FILTER_LEN; bit++) { |
| 467 | 468 | crc = (crc >> 1) ^ (((crc ^ data) & 1) ? LNC_POLYNOMIAL : 0); |
| 468 | 469 | data >>= 1; |
| ... | ... | @@ -547,7 +548,7 @@ static const uint32_t crctab[256] = { |
| 547 | 548 | |
| 548 | 549 | static inline int padr_match(PCNetState *s, const uint8_t *buf, int size) |
| 549 | 550 | { |
| 550 | - struct ether_header *hdr = (void *)buf; | |
| 551 | + struct qemu_ether_header *hdr = (void *)buf; | |
| 551 | 552 | uint8_t padr[6] = { |
| 552 | 553 | s->csr[12] & 0xff, s->csr[12] >> 8, |
| 553 | 554 | s->csr[13] & 0xff, s->csr[13] >> 8, |
| ... | ... | @@ -568,7 +569,7 @@ static inline int padr_match(PCNetState *s, const uint8_t *buf, int size) |
| 568 | 569 | static inline int padr_bcast(PCNetState *s, const uint8_t *buf, int size) |
| 569 | 570 | { |
| 570 | 571 | static uint8_t BCAST[6] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; |
| 571 | - struct ether_header *hdr = (void *)buf; | |
| 572 | + struct qemu_ether_header *hdr = (void *)buf; | |
| 572 | 573 | int result = !CSR_DRCVBC(s) && !bcmp(hdr->ether_dhost, BCAST, 6); |
| 573 | 574 | #ifdef PCNET_DEBUG_MATCH |
| 574 | 575 | printf("padr_bcast result=%d\n", result); |
| ... | ... | @@ -578,7 +579,7 @@ static inline int padr_bcast(PCNetState *s, const uint8_t *buf, int size) |
| 578 | 579 | |
| 579 | 580 | static inline int ladr_match(PCNetState *s, const uint8_t *buf, int size) |
| 580 | 581 | { |
| 581 | - struct ether_header *hdr = (void *)buf; | |
| 582 | + struct qemu_ether_header *hdr = (void *)buf; | |
| 582 | 583 | if ((*(hdr->ether_dhost)&0x01) && |
| 583 | 584 | ((uint64_t *)&s->csr[8])[0] != 0LL) { |
| 584 | 585 | uint8_t ladr[8] = { |
| ... | ... | @@ -993,17 +994,18 @@ static void pcnet_receive(void *opaque, const uint8_t *buf, int size) |
| 993 | 994 | |
| 994 | 995 | memcpy(src, buf, size); |
| 995 | 996 | |
| 997 | +#if 1 | |
| 998 | + /* no need to compute the CRC */ | |
| 999 | + src[size] = 0; | |
| 1000 | + src[size + 1] = 0; | |
| 1001 | + src[size + 2] = 0; | |
| 1002 | + src[size + 3] = 0; | |
| 1003 | + size += 4; | |
| 1004 | +#else | |
| 996 | 1005 | /* XXX: avoid CRC generation */ |
| 997 | 1006 | if (!CSR_ASTRP_RCV(s)) { |
| 998 | 1007 | uint32_t fcs = ~0; |
| 999 | -#if 0 | |
| 1000 | - uint8_t *p = s->buffer; | |
| 1001 | - | |
| 1002 | - ((uint32_t *)p)[0] = ((uint32_t *)p)[1] = 0xaaaaaaaa; | |
| 1003 | - p[7] = 0xab; | |
| 1004 | -#else | |
| 1005 | 1008 | uint8_t *p = src; |
| 1006 | -#endif | |
| 1007 | 1009 | |
| 1008 | 1010 | while (size < 46) { |
| 1009 | 1011 | src[size++] = 0; |
| ... | ... | @@ -1015,6 +1017,7 @@ static void pcnet_receive(void *opaque, const uint8_t *buf, int size) |
| 1015 | 1017 | ((uint32_t *)&src[size])[0] = htonl(fcs); |
| 1016 | 1018 | size += 4; /* FCS at end of packet */ |
| 1017 | 1019 | } else size += 4; |
| 1020 | +#endif | |
| 1018 | 1021 | |
| 1019 | 1022 | #ifdef PCNET_DEBUG_MATCH |
| 1020 | 1023 | PRINT_PKTHDR(buf); | ... | ... |