1*9453c5bcSGerd Hoffmann #define NE2000_PMEM_SIZE (32*1024) 2*9453c5bcSGerd Hoffmann #define NE2000_PMEM_START (16*1024) 3*9453c5bcSGerd Hoffmann #define NE2000_PMEM_END (NE2000_PMEM_SIZE+NE2000_PMEM_START) 4*9453c5bcSGerd Hoffmann #define NE2000_MEM_SIZE NE2000_PMEM_END 5*9453c5bcSGerd Hoffmann 6*9453c5bcSGerd Hoffmann typedef struct NE2000State { 7*9453c5bcSGerd Hoffmann uint8_t cmd; 8*9453c5bcSGerd Hoffmann uint32_t start; 9*9453c5bcSGerd Hoffmann uint32_t stop; 10*9453c5bcSGerd Hoffmann uint8_t boundary; 11*9453c5bcSGerd Hoffmann uint8_t tsr; 12*9453c5bcSGerd Hoffmann uint8_t tpsr; 13*9453c5bcSGerd Hoffmann uint16_t tcnt; 14*9453c5bcSGerd Hoffmann uint16_t rcnt; 15*9453c5bcSGerd Hoffmann uint32_t rsar; 16*9453c5bcSGerd Hoffmann uint8_t rsr; 17*9453c5bcSGerd Hoffmann uint8_t rxcr; 18*9453c5bcSGerd Hoffmann uint8_t isr; 19*9453c5bcSGerd Hoffmann uint8_t dcfg; 20*9453c5bcSGerd Hoffmann uint8_t imr; 21*9453c5bcSGerd Hoffmann uint8_t phys[6]; /* mac address */ 22*9453c5bcSGerd Hoffmann uint8_t curpag; 23*9453c5bcSGerd Hoffmann uint8_t mult[8]; /* multicast mask array */ 24*9453c5bcSGerd Hoffmann qemu_irq irq; 25*9453c5bcSGerd Hoffmann VLANClientState *vc; 26*9453c5bcSGerd Hoffmann uint8_t macaddr[6]; 27*9453c5bcSGerd Hoffmann uint8_t mem[NE2000_MEM_SIZE]; 28*9453c5bcSGerd Hoffmann } NE2000State; 29*9453c5bcSGerd Hoffmann 30*9453c5bcSGerd Hoffmann void ne2000_ioport_write(void *opaque, uint32_t addr, uint32_t val); 31*9453c5bcSGerd Hoffmann uint32_t ne2000_ioport_read(void *opaque, uint32_t addr); 32*9453c5bcSGerd Hoffmann void ne2000_asic_ioport_write(void *opaque, uint32_t addr, uint32_t val); 33*9453c5bcSGerd Hoffmann uint32_t ne2000_asic_ioport_read(void *opaque, uint32_t addr); 34*9453c5bcSGerd Hoffmann void ne2000_reset_ioport_write(void *opaque, uint32_t addr, uint32_t val); 35*9453c5bcSGerd Hoffmann uint32_t ne2000_reset_ioport_read(void *opaque, uint32_t addr); 36*9453c5bcSGerd Hoffmann void ne2000_save(QEMUFile* f, void* opaque); 37*9453c5bcSGerd Hoffmann int ne2000_load(QEMUFile* f, void* opaque, int version_id); 38*9453c5bcSGerd Hoffmann void ne2000_reset(NE2000State *s); 39*9453c5bcSGerd Hoffmann int ne2000_can_receive(VLANClientState *vc); 40*9453c5bcSGerd Hoffmann ssize_t ne2000_receive(VLANClientState *vc, const uint8_t *buf, size_t size_); 41