Lines Matching +full:0 +full:xda

27  * AMD Publication# 19436  Rev:E  Amendment/0  Issue Date: June 2000
65 #define CSR_INIT(S) !!(((S)->csr[0])&0x0001)
66 #define CSR_STRT(S) !!(((S)->csr[0])&0x0002)
67 #define CSR_STOP(S) !!(((S)->csr[0])&0x0004)
68 #define CSR_TDMD(S) !!(((S)->csr[0])&0x0008)
69 #define CSR_TXON(S) !!(((S)->csr[0])&0x0010)
70 #define CSR_RXON(S) !!(((S)->csr[0])&0x0020)
71 #define CSR_INEA(S) !!(((S)->csr[0])&0x0040)
72 #define CSR_BSWP(S) !!(((S)->csr[3])&0x0004)
73 #define CSR_LAPPEN(S) !!(((S)->csr[3])&0x0020)
74 #define CSR_DXSUFLO(S) !!(((S)->csr[3])&0x0040)
75 #define CSR_ASTRP_RCV(S) !!(((S)->csr[4])&0x0800)
76 #define CSR_DPOLL(S) !!(((S)->csr[4])&0x1000)
77 #define CSR_SPND(S) !!(((S)->csr[5])&0x0001)
78 #define CSR_LTINTEN(S) !!(((S)->csr[5])&0x4000)
79 #define CSR_TOKINTD(S) !!(((S)->csr[5])&0x8000)
80 #define CSR_DRX(S) !!(((S)->csr[15])&0x0001)
81 #define CSR_DTX(S) !!(((S)->csr[15])&0x0002)
82 #define CSR_LOOP(S) !!(((S)->csr[15])&0x0004)
83 #define CSR_DXMTFCS(S) !!(((S)->csr[15])&0x0008)
84 #define CSR_INTL(S) !!(((S)->csr[15])&0x0040)
85 #define CSR_DRCVPA(S) !!(((S)->csr[15])&0x2000)
86 #define CSR_DRCVBC(S) !!(((S)->csr[15])&0x4000)
87 #define CSR_PROM(S) !!(((S)->csr[15])&0x8000)
119 (BCR_SSIZE32(S) ? (A) : (A) | ((0xff00 & (uint32_t)(S)->csr[2])<<16))
148 #define TMDL_BCNT_MASK 0x0fff
149 #define TMDL_BCNT_SH 0
150 #define TMDL_ONES_MASK 0xf000
153 #define TMDS_BPE_MASK 0x0080
155 #define TMDS_ENP_MASK 0x0100
157 #define TMDS_STP_MASK 0x0200
159 #define TMDS_DEF_MASK 0x0400
161 #define TMDS_ONE_MASK 0x0800
163 #define TMDS_LTINT_MASK 0x1000
165 #define TMDS_NOFCS_MASK 0x2000
169 #define TMDS_ERR_MASK 0x4000
171 #define TMDS_OWN_MASK 0x8000
174 #define TMDM_TRC_MASK 0x0000000f
175 #define TMDM_TRC_SH 0
176 #define TMDM_TDR_MASK 0x03ff0000
178 #define TMDM_RTRY_MASK 0x04000000
180 #define TMDM_LCAR_MASK 0x08000000
182 #define TMDM_LCOL_MASK 0x10000000
184 #define TMDM_EXDEF_MASK 0x20000000
186 #define TMDM_UFLO_MASK 0x40000000
188 #define TMDM_BUFF_MASK 0x80000000
199 #define RMDL_BCNT_MASK 0x0fff
200 #define RMDL_BCNT_SH 0
201 #define RMDL_ONES_MASK 0xf000
204 #define RMDS_BAM_MASK 0x0010
206 #define RMDS_LFAM_MASK 0x0020
208 #define RMDS_PAM_MASK 0x0040
210 #define RMDS_BPE_MASK 0x0080
212 #define RMDS_ENP_MASK 0x0100
214 #define RMDS_STP_MASK 0x0200
216 #define RMDS_BUFF_MASK 0x0400
218 #define RMDS_CRC_MASK 0x0800
220 #define RMDS_OFLO_MASK 0x1000
222 #define RMDS_FRAM_MASK 0x2000
224 #define RMDS_ERR_MASK 0x4000
226 #define RMDS_OWN_MASK 0x8000
229 #define RMDM_MCNT_MASK 0x00000fff
230 #define RMDM_MCNT_SH 0
231 #define RMDM_ZEROS_MASK 0x0000f000
233 #define RMDM_RPC_MASK 0x00ff0000
235 #define RMDM_RCC_MASK 0xff000000
246 "TMD0 : TBADR=0x%08x\n" \
274 "RMD0 : RBADR=0x%08x\n" \
307 } xda; in pcnet_tmd_load() local
308 s->phys_mem_read(s->dma_opaque, addr, (void *)&xda, sizeof(xda), 0); in pcnet_tmd_load()
309 tmd->tbadr = le32_to_cpu(xda.tbadr) & 0xffffff; in pcnet_tmd_load()
310 tmd->length = le16_to_cpu(xda.length); in pcnet_tmd_load()
311 tmd->status = (le32_to_cpu(xda.tbadr) >> 16) & 0xff00; in pcnet_tmd_load()
312 tmd->misc = le16_to_cpu(xda.status) << 16; in pcnet_tmd_load()
313 tmd->res = 0; in pcnet_tmd_load()
315 s->phys_mem_read(s->dma_opaque, addr, (void *)tmd, sizeof(*tmd), 0); in pcnet_tmd_load()
337 } xda; in pcnet_tmd_store() local
338 xda.tbadr = cpu_to_le32((tmd->tbadr & 0xffffff) | in pcnet_tmd_store()
339 ((tmd->status & 0xff00) << 16)); in pcnet_tmd_store()
340 xda.length = cpu_to_le16(tmd->length); in pcnet_tmd_store()
341 xda.status = cpu_to_le16(tmd->misc >> 16); in pcnet_tmd_store()
342 s->phys_mem_write(s->dma_opaque, addr, (void *)&xda, sizeof(xda), 0); in pcnet_tmd_store()
350 } xda; in pcnet_tmd_store() local
351 xda.tbadr = cpu_to_le32(tmd->tbadr); in pcnet_tmd_store()
352 xda.length = cpu_to_le16(tmd->length); in pcnet_tmd_store()
353 xda.status = cpu_to_le16(tmd->status); in pcnet_tmd_store()
354 xda.misc = cpu_to_le32(tmd->misc); in pcnet_tmd_store()
355 xda.res = cpu_to_le32(tmd->res); in pcnet_tmd_store()
357 uint32_t tmp = xda.tbadr; in pcnet_tmd_store()
358 xda.tbadr = xda.misc; in pcnet_tmd_store()
359 xda.misc = tmp; in pcnet_tmd_store()
361 s->phys_mem_write(s->dma_opaque, addr, (void *)&xda, sizeof(xda), 0); in pcnet_tmd_store()
374 s->phys_mem_read(s->dma_opaque, addr, (void *)&rda, sizeof(rda), 0); in pcnet_rmd_load()
375 rmd->rbadr = le32_to_cpu(rda.rbadr) & 0xffffff; in pcnet_rmd_load()
377 rmd->status = (le32_to_cpu(rda.rbadr) >> 16) & 0xff00; in pcnet_rmd_load()
379 rmd->res = 0; in pcnet_rmd_load()
381 s->phys_mem_read(s->dma_opaque, addr, (void *)rmd, sizeof(*rmd), 0); in pcnet_rmd_load()
404 rda.rbadr = cpu_to_le32((rmd->rbadr & 0xffffff) | in pcnet_rmd_store()
405 ((rmd->status & 0xff00) << 16)); in pcnet_rmd_store()
408 s->phys_mem_write(s->dma_opaque, addr, (void *)&rda, sizeof(rda), 0); in pcnet_rmd_store()
427 s->phys_mem_write(s->dma_opaque, addr, (void *)&rda, sizeof(rda), 0); in pcnet_rmd_store()
446 || (GET_FIELD(rmd.msg_length, RMDM, ZEROS) != 0); \
447 } while (0)
453 } while (0)
459 case 0x00: \
463 (void *)&rda[0], sizeof(rda), 0); \
464 (RES) |= (rda[2] & 0xf000)!=0xf000; \
465 (RES) |= (rda[3] & 0xf000)!=0x0000; \
468 case 0x01: \
469 case 0x02: \
473 (void *)&rda[0], sizeof(rda), 0); \
474 (RES) |= (rda[1] & 0x0000f000L)!=0x0000f000L; \
475 (RES) |= (rda[2] & 0x0000f000L)!=0x00000000L; \
478 case 0x03: \
482 (void *)&rda[0], sizeof(rda), 0); \
483 (RES) |= (rda[0] & 0x0000f000L)!=0x00000000L; \
484 (RES) |= (rda[1] & 0x0000f000L)!=0x0000f000L; \
488 } while (0)
492 case 0x00: \
494 uint16_t xda[4]; \
496 (void *)&xda[0], sizeof(xda), 0); \
497 (RES) |= (xda[2] & 0xf000)!=0xf000; \
500 case 0x01: \
501 case 0x02: \
502 case 0x03: \
504 uint32_t xda[4]; \
506 (void *)&xda[0], sizeof(xda), 0); \
507 (RES) |= (xda[1] & 0x0000f000L)!=0x0000f000L; \
511 } while (0)
519 "type=0x%04x\n", \
520 hdr->ether_dhost[0],hdr->ether_dhost[1],hdr->ether_dhost[2], \
522 hdr->ether_shost[0],hdr->ether_shost[1],hdr->ether_shost[2], \
525 } while (0)
527 #define CRC(crc, ch) (crc = (crc >> 8) ^ crctab[(crc ^ (ch)) & 0xff])
534 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
535 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
536 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
537 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
538 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
539 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
540 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,
541 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
542 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
543 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
544 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940,
545 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
546 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116,
547 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
548 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
549 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
550 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a,
551 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
552 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,
553 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
554 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
555 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
556 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,
557 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
558 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
559 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
560 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
561 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
562 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,
563 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
564 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
565 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
566 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
567 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
568 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
569 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
570 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,
571 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
572 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
573 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
574 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,
575 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
576 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,
577 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
578 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
579 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
580 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
581 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
582 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
583 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
584 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
585 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
586 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,
587 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
588 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
589 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
590 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
591 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
592 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
593 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
594 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
595 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
596 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
597 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,
604 s->csr[12] & 0xff, s->csr[12] >> 8, in padr_match()
605 s->csr[13] & 0xff, s->csr[13] >> 8, in padr_match()
606 s->csr[14] & 0xff, s->csr[14] >> 8 in padr_match()
612 hdr->ether_dhost[0],hdr->ether_dhost[1],hdr->ether_dhost[2], in padr_match()
614 padr[0],padr[1],padr[2],padr[3],padr[4],padr[5]); in padr_match()
622 static const uint8_t BCAST[6] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }; in padr_bcast()
634 if ((*(hdr->ether_dhost)&0x01) && in ladr_match()
635 (s->csr[8] | s->csr[9] | s->csr[10] | s->csr[11]) != 0) { in ladr_match()
637 s->csr[8] & 0xff, s->csr[8] >> 8, in ladr_match()
638 s->csr[9] & 0xff, s->csr[9] >> 8, in ladr_match()
639 s->csr[10] & 0xff, s->csr[10] >> 8, in ladr_match()
640 s->csr[11] & 0xff, s->csr[11] >> 8 in ladr_match()
645 return 0; in ladr_match()
659 (65536 - (CSR_SPND(s) ? 0 : CSR_POLL(s))) * 30; in pcnet_get_next_poll_time()
678 s->rdra = 0; in pcnet_s_reset()
679 s->tdra = 0; in pcnet_s_reset()
680 s->rap = 0; in pcnet_s_reset()
682 s->bcr[BCR_BSBC] &= ~0x0080; in pcnet_s_reset()
684 s->csr[0] = 0x0004; in pcnet_s_reset()
685 s->csr[3] = 0x0000; in pcnet_s_reset()
686 s->csr[4] = 0x0115; in pcnet_s_reset()
687 s->csr[5] = 0x0000; in pcnet_s_reset()
688 s->csr[6] = 0x0000; in pcnet_s_reset()
689 s->csr[8] = 0; in pcnet_s_reset()
690 s->csr[9] = 0; in pcnet_s_reset()
691 s->csr[10] = 0; in pcnet_s_reset()
692 s->csr[11] = 0; in pcnet_s_reset()
693 s->csr[12] = le16_to_cpu(((uint16_t *)&s->prom[0])[0]); in pcnet_s_reset()
694 s->csr[13] = le16_to_cpu(((uint16_t *)&s->prom[0])[1]); in pcnet_s_reset()
695 s->csr[14] = le16_to_cpu(((uint16_t *)&s->prom[0])[2]); in pcnet_s_reset()
696 s->csr[15] &= 0x21c4; in pcnet_s_reset()
701 s->csr[80] = 0x1410; in pcnet_s_reset()
702 s->csr[88] = 0x1003; in pcnet_s_reset()
703 s->csr[89] = 0x0262; in pcnet_s_reset()
704 s->csr[94] = 0x0000; in pcnet_s_reset()
705 s->csr[100] = 0x0200; in pcnet_s_reset()
706 s->csr[103] = 0x0105; in pcnet_s_reset()
707 s->csr[112] = 0x0000; in pcnet_s_reset()
708 s->csr[114] = 0x0000; in pcnet_s_reset()
709 s->csr[122] = 0x0000; in pcnet_s_reset()
710 s->csr[124] = 0x0000; in pcnet_s_reset()
712 s->tx_busy = 0; in pcnet_s_reset()
717 int isr = 0; in pcnet_update_irq()
718 s->csr[0] &= ~0x0080; in pcnet_update_irq()
721 if (((s->csr[0] & ~s->csr[3]) & 0x5f00) || in pcnet_update_irq()
722 (((s->csr[4]>>1) & ~s->csr[4]) & 0x0115) || in pcnet_update_irq()
723 (((s->csr[5]>>1) & s->csr[5]) & 0x0048)) in pcnet_update_irq()
725 if ((!(s->csr[3] & 0x4000) && !!(s->csr[0] & 0x4000)) /* BABL */ || in pcnet_update_irq()
726 (!(s->csr[3] & 0x1000) && !!(s->csr[0] & 0x1000)) /* MISS */ || in pcnet_update_irq()
727 (!(s->csr[3] & 0x0100) && !!(s->csr[0] & 0x0100)) /* IDON */ || in pcnet_update_irq()
728 (!(s->csr[3] & 0x0200) && !!(s->csr[0] & 0x0200)) /* TINT */ || in pcnet_update_irq()
729 (!(s->csr[3] & 0x0400) && !!(s->csr[0] & 0x0400)) /* RINT */ || in pcnet_update_irq()
730 (!(s->csr[3] & 0x0800) && !!(s->csr[0] & 0x0800)) /* MERR */ || in pcnet_update_irq()
731 (!(s->csr[4] & 0x0001) && !!(s->csr[4] & 0x0002)) /* JAB */ || in pcnet_update_irq()
732 (!(s->csr[4] & 0x0004) && !!(s->csr[4] & 0x0008)) /* TXSTRT */ || in pcnet_update_irq()
733 (!(s->csr[4] & 0x0010) && !!(s->csr[4] & 0x0020)) /* RCVO */ || in pcnet_update_irq()
734 (!(s->csr[4] & 0x0100) && !!(s->csr[4] & 0x0200)) /* MFCO */ || in pcnet_update_irq()
735 (!!(s->csr[5] & 0x0040) && !!(s->csr[5] & 0x0080)) /* EXDINT */ || in pcnet_update_irq()
736 (!!(s->csr[5] & 0x0008) && !!(s->csr[5] & 0x0010)) /* MPINT */) in pcnet_update_irq()
741 s->csr[0] |= 0x0080; in pcnet_update_irq()
744 if (!!(s->csr[4] & 0x0080) && CSR_INEA(s)) { /* UINT */ in pcnet_update_irq()
745 s->csr[4] &= ~0x0080; in pcnet_update_irq()
746 s->csr[4] |= 0x0040; in pcnet_update_irq()
747 s->csr[0] |= 0x0080; in pcnet_update_irq()
753 if (((s->csr[5]>>1) & s->csr[5]) & 0x0500) in pcnet_update_irq()
755 if ((!!(s->csr[5] & 0x0400) && !!(s->csr[5] & 0x0800)) /* SINT */ || in pcnet_update_irq()
756 (!!(s->csr[5] & 0x0100) && !!(s->csr[5] & 0x0200)) /* SLPINT */ ) in pcnet_update_irq()
760 s->csr[0] |= 0x0080; in pcnet_update_irq()
781 (uint8_t *)&initblk, sizeof(initblk), 0); in pcnet_init()
785 ladrf[0] = le16_to_cpu(initblk.ladrf[0]); in pcnet_init()
789 padr[0] = le16_to_cpu(initblk.padr[0]); in pcnet_init()
797 (uint8_t *)&initblk, sizeof(initblk), 0); in pcnet_init()
799 ladrf[0] = le16_to_cpu(initblk.ladrf[0]); in pcnet_init()
803 padr[0] = le16_to_cpu(initblk.padr[0]); in pcnet_init()
810 rdra &= 0x00ffffff; in pcnet_init()
811 tdra &= 0x00ffffff; in pcnet_init()
820 s->csr[ 8] = ladrf[0]; in pcnet_init()
824 s->csr[12] = padr[0]; in pcnet_init()
836 s->csr[0] |= 0x0101; in pcnet_init()
837 s->csr[0] &= ~0x0004; /* clear STOP bit */ in pcnet_init()
849 s->csr[0] |= 0x0010; /* set TXON */ in pcnet_start()
852 s->csr[0] |= 0x0020; /* set RXON */ in pcnet_start()
854 s->csr[0] &= ~0x0004; /* clear STOP bit */ in pcnet_start()
855 s->csr[0] |= 0x0002; in pcnet_start()
866 s->csr[0] &= ~0xffeb; in pcnet_stop()
867 s->csr[0] |= 0x0014; in pcnet_stop()
868 s->csr[4] &= ~0x02c2; in pcnet_stop()
869 s->csr[5] &= ~0x0011; in pcnet_stop()
875 s->csr[28] = s->csr[29] = 0; in pcnet_rdte_poll()
877 int bad = 0; in pcnet_rdte_poll()
899 if (bad || (nrda == crda)) nrda = 0; in pcnet_rdte_poll()
901 if (bad || (nnrd == crda)) nnrd = 0; in pcnet_rdte_poll()
903 s->csr[28] = crda & 0xffff; in pcnet_rdte_poll()
905 s->csr[26] = nrda & 0xffff; in pcnet_rdte_poll()
907 s->csr[36] = nnrd & 0xffff; in pcnet_rdte_poll()
911 printf("pcnet: BAD RMD RECORDS AFTER 0x" HWADDR_FMT_plx "\n", in pcnet_rdte_poll()
915 printf("pcnet: BAD RMD RDA=0x" HWADDR_FMT_plx "\n", crda); in pcnet_rdte_poll()
926 printf("CRDA=0x%08x CRST=0x%04x RCVRC=%d RMDL=0x%04x RMDS=0x%04x RMDM=0x%08x\n", in pcnet_rdte_poll()
932 CSR_CRBC(s) = CSR_CRST(s) = 0; in pcnet_rdte_poll()
941 CSR_NRBC(s) = CSR_NRST(s) = 0; in pcnet_rdte_poll()
948 s->csr[34] = s->csr[35] = 0; in pcnet_tdte_poll()
953 int bad = 0; in pcnet_tdte_poll()
962 s->csr[34] = cxda & 0xffff; in pcnet_tdte_poll()
965 printf("pcnet: BAD TMD XDA=0x%08x\n", cxda); in pcnet_tdte_poll()
978 CSR_CXBC(s) = CSR_CXST(s) = 0; in pcnet_tdte_poll()
981 return !!(CSR_CXST(s) & 0x8000); in pcnet_tdte_poll()
989 int is_padr = 0, is_bcast = 0, is_ladr = 0; in pcnet_receive()
991 int crc_err = 0; in pcnet_receive()
1009 if (!(CSR_CRST(s) & 0x8000) && s->rdra) { in pcnet_receive()
1013 for (i = CSR_RCVRL(s)-1; i > 0; i--, rcvrc--) { in pcnet_receive()
1032 if (!(CSR_CRST(s) & 0x8000)) { in pcnet_receive()
1036 s->csr[0] |= 0x1000; /* Set MISS flag */ in pcnet_receive()
1042 int pktcount = 0; in pcnet_receive()
1053 src[size] = 0; in pcnet_receive()
1054 src[size + 1] = 0; in pcnet_receive()
1055 src[size + 2] = 0; in pcnet_receive()
1056 src[size + 3] = 0; in pcnet_receive()
1060 uint32_t fcs = ~0; in pcnet_receive()
1068 uint32_t fcs = ~0; in pcnet_receive()
1089 SET_FIELD(&rmd.status, RMDS, OWN, 0); \ in pcnet_receive()
1092 } while (0) in pcnet_receive()
1096 if ((remaining > 0) && CSR_NRDA(s)) { in pcnet_receive()
1108 if ((remaining > 0) && (nrda=CSR_NNRD(s))) { in pcnet_receive()
1121 if (remaining == 0) { in pcnet_receive()
1137 s->csr[0] |= 0x0400; in pcnet_receive()
1140 printf("RCVRC=%d CRDA=0x%08x BLKS=%d\n", in pcnet_receive()
1170 d->lnkst = nc->link_down ? 0 : 0x40; in pcnet_set_link_status()
1175 hwaddr xmit_cxda = 0; in pcnet_transmit()
1177 int add_crc = 0; in pcnet_transmit()
1182 s->csr[0] &= ~0x0008; in pcnet_transmit()
1195 printf(" TMDLOAD 0x%08x\n", PHYSADDR(s,CSR_CXDA(s))); in pcnet_transmit()
1199 s->xmit_pos = 0; in pcnet_transmit()
1204 if (s->lnkst == 0 && in pcnet_transmit()
1208 SET_FIELD(&tmd.status, TMDS, OWN, 0); in pcnet_transmit()
1209 s->csr[0] |= 0xa000; /* ERR | CERR */ in pcnet_transmit()
1214 if (s->xmit_pos < 0) { in pcnet_transmit()
1245 s->looptest = 0; in pcnet_transmit()
1253 s->csr[0] &= ~0x0008; /* clear TDMD */ in pcnet_transmit()
1254 s->csr[4] |= 0x0004; /* set TXSTRT */ in pcnet_transmit()
1258 SET_FIELD(&tmd.status, TMDS, OWN, 0); in pcnet_transmit()
1262 s->csr[0] |= 0x0200; /* set TINT */ in pcnet_transmit()
1272 } else if (s->xmit_pos >= 0) { in pcnet_transmit()
1278 SET_FIELD(&tmd.status, TMDS, OWN, 0); in pcnet_transmit()
1280 s->csr[0] |= 0x0200; /* set TINT */ in pcnet_transmit()
1282 s->csr[0] &= ~0x0010; in pcnet_transmit()
1288 s->tx_busy = 0; in pcnet_transmit()
1324 if (t > 0xffffLL) { in pcnet_poll_timer()
1341 printf("pcnet_csr_writew rap=%d val=0x%04x\n", rap, val); in pcnet_csr_writew()
1344 case 0: in pcnet_csr_writew()
1345 s->csr[0] &= ~(val & 0x7f00); /* Clear any interrupt flags */ in pcnet_csr_writew()
1347 s->csr[0] = (s->csr[0] & ~0x0040) | (val & 0x0048); in pcnet_csr_writew()
1349 val = (val & 0x007f) | (s->csr[0] & 0x7f00); in pcnet_csr_writew()
1413 val = (val > 0) ? val : 512; in pcnet_csr_writew()
1423 s->csr[4] &= ~(val & 0x026a); in pcnet_csr_writew()
1424 val &= ~0x026a; val |= s->csr[4] & 0x026a; in pcnet_csr_writew()
1427 s->csr[5] &= ~(val & 0x0a90); in pcnet_csr_writew()
1428 val &= ~0x0a90; val |= s->csr[5] & 0x0a90; in pcnet_csr_writew()
1449 case 0: in pcnet_csr_readw()
1451 val = s->csr[0]; in pcnet_csr_readw()
1452 val |= (val & 0x7800) ? 0x8000 : 0; in pcnet_csr_readw()
1469 printf("pcnet_csr_readw rap=%d val=0x%04x\n", rap, val); in pcnet_csr_readw()
1478 printf("pcnet_bcr_writew rap=%d val=0x%04x\n", rap, val); in pcnet_bcr_writew()
1484 val &= ~0x0300; in pcnet_bcr_writew()
1485 switch (val & 0x00ff) { in pcnet_bcr_writew()
1486 case 0: in pcnet_bcr_writew()
1487 val |= 0x0200; in pcnet_bcr_writew()
1490 val |= 0x0100; in pcnet_bcr_writew()
1494 val |= 0x0300; in pcnet_bcr_writew()
1497 qemu_log_mask(LOG_GUEST_ERROR, "pcnet: Bad SWSTYLE=0x%02x\n", in pcnet_bcr_writew()
1498 val & 0xff); in pcnet_bcr_writew()
1499 val = 0x0200; in pcnet_bcr_writew()
1503 printf("BCR_SWS=0x%04x\n", val); in pcnet_bcr_writew()
1531 val = s->bcr[rap] & ~0x8000; in pcnet_bcr_readw()
1532 val |= (val & 0x017f & s->lnkst) ? 0x8000 : 0; in pcnet_bcr_readw()
1535 val = rap < 32 ? s->bcr[rap] : 0; in pcnet_bcr_readw()
1539 printf("pcnet_bcr_readw rap=%d val=0x%04x\n", rap, val); in pcnet_bcr_readw()
1548 s->bcr[BCR_MSRDA] = 0x0005; in pcnet_h_reset()
1549 s->bcr[BCR_MSWRA] = 0x0005; in pcnet_h_reset()
1550 s->bcr[BCR_MC ] = 0x0002; in pcnet_h_reset()
1551 s->bcr[BCR_LNKST] = 0x00c0; in pcnet_h_reset()
1552 s->bcr[BCR_LED1 ] = 0x0084; in pcnet_h_reset()
1553 s->bcr[BCR_LED2 ] = 0x0088; in pcnet_h_reset()
1554 s->bcr[BCR_LED3 ] = 0x0090; in pcnet_h_reset()
1555 s->bcr[BCR_FDC ] = 0x0000; in pcnet_h_reset()
1556 s->bcr[BCR_BSBC ] = 0x9001; in pcnet_h_reset()
1557 s->bcr[BCR_EECAS] = 0x0002; in pcnet_h_reset()
1558 s->bcr[BCR_SWS ] = 0x0200; in pcnet_h_reset()
1559 s->bcr[BCR_PLAT ] = 0xff06; in pcnet_h_reset()
1571 printf("pcnet_ioport_writew addr=0x%08x val=0x%04x\n", addr, val); in pcnet_ioport_writew()
1574 switch (addr & 0x0f) { in pcnet_ioport_writew()
1575 case 0x00: /* RDP */ in pcnet_ioport_writew()
1578 case 0x02: in pcnet_ioport_writew()
1579 s->rap = val & 0x7f; in pcnet_ioport_writew()
1581 case 0x06: in pcnet_ioport_writew()
1595 switch (addr & 0x0f) { in pcnet_ioport_readw()
1596 case 0x00: /* RDP */ in pcnet_ioport_readw()
1599 case 0x02: in pcnet_ioport_readw()
1602 case 0x04: in pcnet_ioport_readw()
1604 val = 0; in pcnet_ioport_readw()
1606 case 0x06: in pcnet_ioport_readw()
1613 printf("pcnet_ioport_readw addr=0x%08x val=0x%04x\n", addr, val & 0xffff); in pcnet_ioport_readw()
1623 printf("pcnet_ioport_writel addr=0x%08x val=0x%08x\n", addr, val); in pcnet_ioport_writel()
1626 switch (addr & 0x0f) { in pcnet_ioport_writel()
1627 case 0x00: /* RDP */ in pcnet_ioport_writel()
1628 pcnet_csr_writew(s, s->rap, val & 0xffff); in pcnet_ioport_writel()
1630 case 0x04: in pcnet_ioport_writel()
1631 s->rap = val & 0x7f; in pcnet_ioport_writel()
1633 case 0x0c: in pcnet_ioport_writel()
1634 pcnet_bcr_writew(s, s->rap, val & 0xffff); in pcnet_ioport_writel()
1637 } else if ((addr & 0x0f) == 0) { in pcnet_ioport_writel()
1639 pcnet_bcr_writew(s, BCR_BSBC, pcnet_bcr_readw(s, BCR_BSBC) | 0x0080); in pcnet_ioport_writel()
1653 switch (addr & 0x0f) { in pcnet_ioport_readl()
1654 case 0x00: /* RDP */ in pcnet_ioport_readl()
1657 case 0x04: in pcnet_ioport_readl()
1660 case 0x08: in pcnet_ioport_readl()
1662 val = 0; in pcnet_ioport_readl()
1664 case 0x0c: in pcnet_ioport_readl()
1671 printf("pcnet_ioport_readl addr=0x%08x val=0x%08x\n", addr, val); in pcnet_ioport_readl()
1724 s->prom[6] = s->prom[7] = 0x00; in pcnet_common_init()
1726 s->prom[8] = 0x00; in pcnet_common_init()
1728 s->prom[9] = 0x11; in pcnet_common_init()
1729 /* User programmable space, init with 0 */ in pcnet_common_init()
1730 s->prom[10] = s->prom[11] = 0x00; in pcnet_common_init()
1731 /* LSByte of two-byte checksum, which is the sum of bytes 00h-0Bh in pcnet_common_init()
1732 and bytes 0Eh and 0Fh, must therefore be initialized with 0! */ in pcnet_common_init()
1733 s->prom[12] = s->prom[13] = 0x00; in pcnet_common_init()
1736 s->prom[14] = s->prom[15] = 0x57; in pcnet_common_init()
1738 for (i = 0, checksum = 0; i < 16; i++) { in pcnet_common_init()
1743 s->lnkst = 0x40; /* initial link state: up */ in pcnet_common_init()