• Home
  • Raw
  • Download

Lines Matching refs:s

150 static void ne2000_reset(NE2000State *s)  in ne2000_reset()  argument
154 s->isr = ENISR_RESET; in ne2000_reset()
155 memcpy(s->mem, s->macaddr, 6); in ne2000_reset()
156 s->mem[14] = 0x57; in ne2000_reset()
157 s->mem[15] = 0x57; in ne2000_reset()
161 s->mem[2 * i] = s->mem[i]; in ne2000_reset()
162 s->mem[2 * i + 1] = s->mem[i]; in ne2000_reset()
166 static void ne2000_update_irq(NE2000State *s) in ne2000_update_irq() argument
169 isr = (s->isr & s->imr) & 0x7f; in ne2000_update_irq()
172 isr ? 1 : 0, s->isr, s->imr); in ne2000_update_irq()
174 qemu_set_irq(s->irq, (isr != 0)); in ne2000_update_irq()
201 static int ne2000_buffer_full(NE2000State *s) in ne2000_buffer_full() argument
205 index = s->curpag << 8; in ne2000_buffer_full()
206 boundary = s->boundary << 8; in ne2000_buffer_full()
210 avail = (s->stop - s->start) - (index - boundary); in ne2000_buffer_full()
218 NE2000State *s = vc->opaque; in ne2000_can_receive() local
220 if (s->cmd & E8390_STOP) in ne2000_can_receive()
222 return !ne2000_buffer_full(s); in ne2000_can_receive()
229 NE2000State *s = vc->opaque; in ne2000_receive() local
241 if (s->cmd & E8390_STOP || ne2000_buffer_full(s)) in ne2000_receive()
245 if (s->rxcr & 0x10) { in ne2000_receive()
250 if (!(s->rxcr & 0x04)) in ne2000_receive()
254 if (!(s->rxcr & 0x08)) in ne2000_receive()
257 if (!(s->mult[mcast_idx >> 3] & (1 << (mcast_idx & 7)))) in ne2000_receive()
259 } else if (s->mem[0] == buf[0] && in ne2000_receive()
260 s->mem[2] == buf[1] && in ne2000_receive()
261 s->mem[4] == buf[2] && in ne2000_receive()
262 s->mem[6] == buf[3] && in ne2000_receive()
263 s->mem[8] == buf[4] && in ne2000_receive()
264 s->mem[10] == buf[5]) { in ne2000_receive()
280 index = s->curpag << 8; in ne2000_receive()
285 if (next >= s->stop) in ne2000_receive()
286 next -= (s->stop - s->start); in ne2000_receive()
288 p = s->mem + index; in ne2000_receive()
289 s->rsr = ENRSR_RXOK; /* receive status */ in ne2000_receive()
292 s->rsr |= ENRSR_PHY; in ne2000_receive()
293 p[0] = s->rsr; in ne2000_receive()
301 if (index <= s->stop) in ne2000_receive()
302 avail = s->stop - index; in ne2000_receive()
308 memcpy(s->mem + index, buf, len); in ne2000_receive()
311 if (index == s->stop) in ne2000_receive()
312 index = s->start; in ne2000_receive()
315 s->curpag = next >> 8; in ne2000_receive()
318 s->isr |= ENISR_RX; in ne2000_receive()
319 ne2000_update_irq(s); in ne2000_receive()
326 NE2000State *s = opaque; in ne2000_ioport_write() local
335 s->cmd = val; in ne2000_ioport_write()
337 s->isr &= ~ENISR_RESET; in ne2000_ioport_write()
340 s->rcnt == 0) { in ne2000_ioport_write()
341 s->isr |= ENISR_RDC; in ne2000_ioport_write()
342 ne2000_update_irq(s); in ne2000_ioport_write()
345 index = (s->tpsr << 8); in ne2000_ioport_write()
350 if (index + s->tcnt <= NE2000_PMEM_END) { in ne2000_ioport_write()
351 qemu_send_packet(s->vc, s->mem + index, s->tcnt); in ne2000_ioport_write()
354 s->tsr = ENTSR_PTX; in ne2000_ioport_write()
355 s->isr |= ENISR_TX; in ne2000_ioport_write()
356 s->cmd &= ~E8390_TRANS; in ne2000_ioport_write()
357 ne2000_update_irq(s); in ne2000_ioport_write()
361 page = s->cmd >> 6; in ne2000_ioport_write()
365 s->start = val << 8; in ne2000_ioport_write()
368 s->stop = val << 8; in ne2000_ioport_write()
371 s->boundary = val; in ne2000_ioport_write()
374 s->imr = val; in ne2000_ioport_write()
375 ne2000_update_irq(s); in ne2000_ioport_write()
378 s->tpsr = val; in ne2000_ioport_write()
381 s->tcnt = (s->tcnt & 0xff00) | val; in ne2000_ioport_write()
384 s->tcnt = (s->tcnt & 0x00ff) | (val << 8); in ne2000_ioport_write()
387 s->rsar = (s->rsar & 0xff00) | val; in ne2000_ioport_write()
390 s->rsar = (s->rsar & 0x00ff) | (val << 8); in ne2000_ioport_write()
393 s->rcnt = (s->rcnt & 0xff00) | val; in ne2000_ioport_write()
396 s->rcnt = (s->rcnt & 0x00ff) | (val << 8); in ne2000_ioport_write()
399 s->rxcr = val; in ne2000_ioport_write()
402 s->dcfg = val; in ne2000_ioport_write()
405 s->isr &= ~(val & 0x7f); in ne2000_ioport_write()
406 ne2000_update_irq(s); in ne2000_ioport_write()
409 s->phys[offset - EN1_PHYS] = val; in ne2000_ioport_write()
412 s->curpag = val; in ne2000_ioport_write()
415 s->mult[offset - EN1_MULT] = val; in ne2000_ioport_write()
423 NE2000State *s = opaque; in ne2000_ioport_read() local
428 ret = s->cmd; in ne2000_ioport_read()
430 page = s->cmd >> 6; in ne2000_ioport_read()
434 ret = s->tsr; in ne2000_ioport_read()
437 ret = s->boundary; in ne2000_ioport_read()
440 ret = s->isr; in ne2000_ioport_read()
443 ret = s->rsar & 0x00ff; in ne2000_ioport_read()
446 ret = s->rsar >> 8; in ne2000_ioport_read()
449 ret = s->phys[offset - EN1_PHYS]; in ne2000_ioport_read()
452 ret = s->curpag; in ne2000_ioport_read()
455 ret = s->mult[offset - EN1_MULT]; in ne2000_ioport_read()
458 ret = s->rsr; in ne2000_ioport_read()
461 ret = s->start >> 8; in ne2000_ioport_read()
464 ret = s->stop >> 8; in ne2000_ioport_read()
492 static inline void ne2000_mem_writeb(NE2000State *s, uint32_t addr, in ne2000_mem_writeb() argument
497 s->mem[addr] = val; in ne2000_mem_writeb()
501 static inline void ne2000_mem_writew(NE2000State *s, uint32_t addr, in ne2000_mem_writew() argument
507 *(uint16_t *)(s->mem + addr) = cpu_to_le16(val); in ne2000_mem_writew()
511 static inline void ne2000_mem_writel(NE2000State *s, uint32_t addr, in ne2000_mem_writel() argument
517 cpu_to_le32wu((uint32_t *)(s->mem + addr), val); in ne2000_mem_writel()
521 static inline uint32_t ne2000_mem_readb(NE2000State *s, uint32_t addr) in ne2000_mem_readb() argument
525 return s->mem[addr]; in ne2000_mem_readb()
531 static inline uint32_t ne2000_mem_readw(NE2000State *s, uint32_t addr) in ne2000_mem_readw() argument
536 return le16_to_cpu(*(uint16_t *)(s->mem + addr)); in ne2000_mem_readw()
542 static inline uint32_t ne2000_mem_readl(NE2000State *s, uint32_t addr) in ne2000_mem_readl() argument
547 return le32_to_cpupu((uint32_t *)(s->mem + addr)); in ne2000_mem_readl()
553 static inline void ne2000_dma_update(NE2000State *s, int len) in ne2000_dma_update() argument
555 s->rsar += len; in ne2000_dma_update()
558 if (s->rsar == s->stop) in ne2000_dma_update()
559 s->rsar = s->start; in ne2000_dma_update()
561 if (s->rcnt <= len) { in ne2000_dma_update()
562 s->rcnt = 0; in ne2000_dma_update()
564 s->isr |= ENISR_RDC; in ne2000_dma_update()
565 ne2000_update_irq(s); in ne2000_dma_update()
567 s->rcnt -= len; in ne2000_dma_update()
573 NE2000State *s = opaque; in ne2000_asic_ioport_write() local
578 if (s->rcnt == 0) in ne2000_asic_ioport_write()
580 if (s->dcfg & 0x01) { in ne2000_asic_ioport_write()
582 ne2000_mem_writew(s, s->rsar, val); in ne2000_asic_ioport_write()
583 ne2000_dma_update(s, 2); in ne2000_asic_ioport_write()
586 ne2000_mem_writeb(s, s->rsar, val); in ne2000_asic_ioport_write()
587 ne2000_dma_update(s, 1); in ne2000_asic_ioport_write()
593 NE2000State *s = opaque; in ne2000_asic_ioport_read() local
596 if (s->dcfg & 0x01) { in ne2000_asic_ioport_read()
598 ret = ne2000_mem_readw(s, s->rsar); in ne2000_asic_ioport_read()
599 ne2000_dma_update(s, 2); in ne2000_asic_ioport_read()
602 ret = ne2000_mem_readb(s, s->rsar); in ne2000_asic_ioport_read()
603 ne2000_dma_update(s, 1); in ne2000_asic_ioport_read()
613 NE2000State *s = opaque; in ne2000_asic_ioport_writel() local
618 if (s->rcnt == 0) in ne2000_asic_ioport_writel()
621 ne2000_mem_writel(s, s->rsar, val); in ne2000_asic_ioport_writel()
622 ne2000_dma_update(s, 4); in ne2000_asic_ioport_writel()
627 NE2000State *s = opaque; in ne2000_asic_ioport_readl() local
631 ret = ne2000_mem_readl(s, s->rsar); in ne2000_asic_ioport_readl()
632 ne2000_dma_update(s, 4); in ne2000_asic_ioport_readl()
646 NE2000State *s = opaque; in ne2000_reset_ioport_read() local
647 ne2000_reset(s); in ne2000_reset_ioport_read()
653 NE2000State* s=(NE2000State*)opaque; in ne2000_save() local
656 if (s->pci_dev) in ne2000_save()
657 pci_device_save(s->pci_dev, f); in ne2000_save()
659 qemu_put_8s(f, &s->rxcr); in ne2000_save()
661 qemu_put_8s(f, &s->cmd); in ne2000_save()
662 qemu_put_be32s(f, &s->start); in ne2000_save()
663 qemu_put_be32s(f, &s->stop); in ne2000_save()
664 qemu_put_8s(f, &s->boundary); in ne2000_save()
665 qemu_put_8s(f, &s->tsr); in ne2000_save()
666 qemu_put_8s(f, &s->tpsr); in ne2000_save()
667 qemu_put_be16s(f, &s->tcnt); in ne2000_save()
668 qemu_put_be16s(f, &s->rcnt); in ne2000_save()
669 qemu_put_be32s(f, &s->rsar); in ne2000_save()
670 qemu_put_8s(f, &s->rsr); in ne2000_save()
671 qemu_put_8s(f, &s->isr); in ne2000_save()
672 qemu_put_8s(f, &s->dcfg); in ne2000_save()
673 qemu_put_8s(f, &s->imr); in ne2000_save()
674 qemu_put_buffer(f, s->phys, 6); in ne2000_save()
675 qemu_put_8s(f, &s->curpag); in ne2000_save()
676 qemu_put_buffer(f, s->mult, 8); in ne2000_save()
679 qemu_put_buffer(f, s->mem, NE2000_MEM_SIZE); in ne2000_save()
684 NE2000State* s=(NE2000State*)opaque; in ne2000_load() local
691 if (s->pci_dev && version_id >= 3) { in ne2000_load()
692 ret = pci_device_load(s->pci_dev, f); in ne2000_load()
698 qemu_get_8s(f, &s->rxcr); in ne2000_load()
700 s->rxcr = 0x0c; in ne2000_load()
703 qemu_get_8s(f, &s->cmd); in ne2000_load()
704 qemu_get_be32s(f, &s->start); in ne2000_load()
705 qemu_get_be32s(f, &s->stop); in ne2000_load()
706 qemu_get_8s(f, &s->boundary); in ne2000_load()
707 qemu_get_8s(f, &s->tsr); in ne2000_load()
708 qemu_get_8s(f, &s->tpsr); in ne2000_load()
709 qemu_get_be16s(f, &s->tcnt); in ne2000_load()
710 qemu_get_be16s(f, &s->rcnt); in ne2000_load()
711 qemu_get_be32s(f, &s->rsar); in ne2000_load()
712 qemu_get_8s(f, &s->rsr); in ne2000_load()
713 qemu_get_8s(f, &s->isr); in ne2000_load()
714 qemu_get_8s(f, &s->dcfg); in ne2000_load()
715 qemu_get_8s(f, &s->imr); in ne2000_load()
716 qemu_get_buffer(f, s->phys, 6); in ne2000_load()
717 qemu_get_8s(f, &s->curpag); in ne2000_load()
718 qemu_get_buffer(f, s->mult, 8); in ne2000_load()
720 qemu_get_buffer(f, s->mem, NE2000_MEM_SIZE); in ne2000_load()
727 NE2000State *s = vc->opaque; in isa_ne2000_cleanup() local
729 unregister_savevm("ne2000", s); in isa_ne2000_cleanup()
731 isa_unassign_ioport(s->isa_io_base, 16); in isa_ne2000_cleanup()
732 isa_unassign_ioport(s->isa_io_base + 0x10, 2); in isa_ne2000_cleanup()
733 isa_unassign_ioport(s->isa_io_base + 0x1f, 1); in isa_ne2000_cleanup()
735 qemu_free(s); in isa_ne2000_cleanup()
740 NE2000State *s; in isa_ne2000_init() local
744 s = qemu_mallocz(sizeof(NE2000State)); in isa_ne2000_init()
746 register_ioport_write(base, 16, 1, ne2000_ioport_write, s); in isa_ne2000_init()
747 register_ioport_read(base, 16, 1, ne2000_ioport_read, s); in isa_ne2000_init()
749 register_ioport_write(base + 0x10, 1, 1, ne2000_asic_ioport_write, s); in isa_ne2000_init()
750 register_ioport_read(base + 0x10, 1, 1, ne2000_asic_ioport_read, s); in isa_ne2000_init()
751 register_ioport_write(base + 0x10, 2, 2, ne2000_asic_ioport_write, s); in isa_ne2000_init()
752 register_ioport_read(base + 0x10, 2, 2, ne2000_asic_ioport_read, s); in isa_ne2000_init()
754 register_ioport_write(base + 0x1f, 1, 1, ne2000_reset_ioport_write, s); in isa_ne2000_init()
755 register_ioport_read(base + 0x1f, 1, 1, ne2000_reset_ioport_read, s); in isa_ne2000_init()
756 s->isa_io_base = base; in isa_ne2000_init()
757 s->irq = irq; in isa_ne2000_init()
758 memcpy(s->macaddr, nd->macaddr, 6); in isa_ne2000_init()
760 ne2000_reset(s); in isa_ne2000_init()
762 s->vc = qemu_new_vlan_client(nd->vlan, nd->model, nd->name, in isa_ne2000_init()
764 isa_ne2000_cleanup, s); in isa_ne2000_init()
766 qemu_format_nic_info_str(s->vc, s->macaddr); in isa_ne2000_init()
768 register_savevm("ne2000", -1, 2, ne2000_save, ne2000_load, s); in isa_ne2000_init()
783 NE2000State *s = &d->ne2000; in ne2000_map() local
785 register_ioport_write(addr, 16, 1, ne2000_ioport_write, s); in ne2000_map()
786 register_ioport_read(addr, 16, 1, ne2000_ioport_read, s); in ne2000_map()
788 register_ioport_write(addr + 0x10, 1, 1, ne2000_asic_ioport_write, s); in ne2000_map()
789 register_ioport_read(addr + 0x10, 1, 1, ne2000_asic_ioport_read, s); in ne2000_map()
790 register_ioport_write(addr + 0x10, 2, 2, ne2000_asic_ioport_write, s); in ne2000_map()
791 register_ioport_read(addr + 0x10, 2, 2, ne2000_asic_ioport_read, s); in ne2000_map()
792 register_ioport_write(addr + 0x10, 4, 4, ne2000_asic_ioport_writel, s); in ne2000_map()
793 register_ioport_read(addr + 0x10, 4, 4, ne2000_asic_ioport_readl, s); in ne2000_map()
795 register_ioport_write(addr + 0x1f, 1, 1, ne2000_reset_ioport_write, s); in ne2000_map()
796 register_ioport_read(addr + 0x1f, 1, 1, ne2000_reset_ioport_read, s); in ne2000_map()
801 NE2000State *s = vc->opaque; in ne2000_cleanup() local
803 unregister_savevm("ne2000", s); in ne2000_cleanup()
809 NE2000State *s; in pci_ne2000_init() local
821 s = &d->ne2000; in pci_ne2000_init()
822 s->irq = d->dev.irq[0]; in pci_ne2000_init()
823 s->pci_dev = (PCIDevice *)d; in pci_ne2000_init()
824 qdev_get_macaddr(&d->dev.qdev, s->macaddr); in pci_ne2000_init()
825 ne2000_reset(s); in pci_ne2000_init()
826 s->vc = qdev_get_vlan_client(&d->dev.qdev, in pci_ne2000_init()
828 ne2000_cleanup, s); in pci_ne2000_init()
830 qemu_format_nic_info_str(s->vc, s->macaddr); in pci_ne2000_init()
832 register_savevm("ne2000", -1, 3, ne2000_save, ne2000_load, s); in pci_ne2000_init()