Lines Matching +full:active +full:- +full:high

4  * Copyright (c) 2003-2004 Fabrice Bellard
43 #define EN0_CLDAHI 0x02 /* High byte of current local dma addr RD */
51 #define EN0_TCNTHI 0x06 /* High byte of tx byte count WR */
55 #define EN0_CRDAHI 0x09 /* high byte, current remote dma address RD */
90 #define E8390_PAGE1 0x40 /* using the two high-order bits */
93 /* Bits in EN0_ISR - Interrupt status register */
122 #define ENTSR_OWC 0x80 /* There was an out-of-window collision. */
128 s->isr = ENISR_RESET; in ne2000_reset()
129 memcpy(s->mem, &s->c.macaddr, 6); in ne2000_reset()
130 s->mem[14] = 0x57; in ne2000_reset()
131 s->mem[15] = 0x57; in ne2000_reset()
134 for(i = 15;i >= 0; i--) { in ne2000_reset()
135 s->mem[2 * i] = s->mem[i]; in ne2000_reset()
136 s->mem[2 * i + 1] = s->mem[i]; in ne2000_reset()
143 isr = (s->isr & s->imr) & 0x7f; in ne2000_update_irq()
146 isr ? 1 : 0, s->isr, s->imr); in ne2000_update_irq()
148 qemu_set_irq(s->irq, (isr != 0)); in ne2000_update_irq()
155 if (s->stop <= s->start) { in ne2000_buffer_full()
159 index = s->curpag << 8; in ne2000_buffer_full()
160 boundary = s->boundary << 8; in ne2000_buffer_full()
162 avail = boundary - index; in ne2000_buffer_full()
164 avail = (s->stop - s->start) - (index - boundary); in ne2000_buffer_full()
183 if (s->cmd & E8390_STOP || ne2000_buffer_full(s)) in ne2000_receive()
184 return -1; in ne2000_receive()
187 if (s->rxcr & 0x10) { in ne2000_receive()
192 if (!(s->rxcr & 0x04)) in ne2000_receive()
196 if (!(s->rxcr & 0x08)) in ne2000_receive()
199 if (!(s->mult[mcast_idx >> 3] & (1 << (mcast_idx & 7)))) in ne2000_receive()
201 } else if (s->mem[0] == buf[0] && in ne2000_receive()
202 s->mem[2] == buf[1] && in ne2000_receive()
203 s->mem[4] == buf[2] && in ne2000_receive()
204 s->mem[6] == buf[3] && in ne2000_receive()
205 s->mem[8] == buf[4] && in ne2000_receive()
206 s->mem[10] == buf[5]) { in ne2000_receive()
213 index = s->curpag << 8; in ne2000_receive()
215 index = s->start; in ne2000_receive()
221 if (next >= s->stop) in ne2000_receive()
222 next -= (s->stop - s->start); in ne2000_receive()
224 p = s->mem + index; in ne2000_receive()
225 s->rsr = ENRSR_RXOK; /* receive status */ in ne2000_receive()
228 s->rsr |= ENRSR_PHY; in ne2000_receive()
229 p[0] = s->rsr; in ne2000_receive()
237 if (index <= s->stop) in ne2000_receive()
238 avail = s->stop - index; in ne2000_receive()
244 memcpy(s->mem + index, buf, len); in ne2000_receive()
247 if (index == s->stop) in ne2000_receive()
248 index = s->start; in ne2000_receive()
249 size -= len; in ne2000_receive()
251 s->curpag = next >> 8; in ne2000_receive()
254 s->isr |= ENISR_RX; in ne2000_receive()
269 s->cmd = val; in ne2000_ioport_write()
271 s->isr &= ~ENISR_RESET; in ne2000_ioport_write()
274 s->rcnt == 0) { in ne2000_ioport_write()
275 s->isr |= ENISR_RDC; in ne2000_ioport_write()
279 index = (s->tpsr << 8); in ne2000_ioport_write()
282 index -= NE2000_PMEM_SIZE; in ne2000_ioport_write()
284 if (index + s->tcnt <= NE2000_PMEM_END) { in ne2000_ioport_write()
285 qemu_send_packet(qemu_get_queue(s->nic), s->mem + index, in ne2000_ioport_write()
286 s->tcnt); in ne2000_ioport_write()
289 s->tsr = ENTSR_PTX; in ne2000_ioport_write()
290 s->isr |= ENISR_TX; in ne2000_ioport_write()
291 s->cmd &= ~E8390_TRANS; in ne2000_ioport_write()
296 page = s->cmd >> 6; in ne2000_ioport_write()
301 s->start = val << 8; in ne2000_ioport_write()
306 s->stop = val << 8; in ne2000_ioport_write()
311 s->boundary = val; in ne2000_ioport_write()
315 s->imr = val; in ne2000_ioport_write()
319 s->tpsr = val; in ne2000_ioport_write()
322 s->tcnt = (s->tcnt & 0xff00) | val; in ne2000_ioport_write()
325 s->tcnt = (s->tcnt & 0x00ff) | (val << 8); in ne2000_ioport_write()
328 s->rsar = (s->rsar & 0xff00) | val; in ne2000_ioport_write()
331 s->rsar = (s->rsar & 0x00ff) | (val << 8); in ne2000_ioport_write()
334 s->rcnt = (s->rcnt & 0xff00) | val; in ne2000_ioport_write()
337 s->rcnt = (s->rcnt & 0x00ff) | (val << 8); in ne2000_ioport_write()
340 s->rxcr = val; in ne2000_ioport_write()
343 s->dcfg = val; in ne2000_ioport_write()
346 s->isr &= ~(val & 0x7f); in ne2000_ioport_write()
350 s->phys[offset - EN1_PHYS] = val; in ne2000_ioport_write()
354 s->curpag = val; in ne2000_ioport_write()
358 s->mult[offset - EN1_MULT] = val; in ne2000_ioport_write()
371 ret = s->cmd; in ne2000_ioport_read()
373 page = s->cmd >> 6; in ne2000_ioport_read()
377 ret = s->tsr; in ne2000_ioport_read()
380 ret = s->boundary; in ne2000_ioport_read()
383 ret = s->isr; in ne2000_ioport_read()
386 ret = s->rsar & 0x00ff; in ne2000_ioport_read()
389 ret = s->rsar >> 8; in ne2000_ioport_read()
392 ret = s->phys[offset - EN1_PHYS]; in ne2000_ioport_read()
395 ret = s->curpag; in ne2000_ioport_read()
398 ret = s->mult[offset - EN1_MULT]; in ne2000_ioport_read()
401 ret = s->rsr; in ne2000_ioport_read()
404 ret = s->start >> 8; in ne2000_ioport_read()
407 ret = s->stop >> 8; in ne2000_ioport_read()
419 ret = 0x40; /* 10baseT active */ in ne2000_ioport_read()
438 s->mem[addr] = val; in ne2000_mem_writeb()
448 *(uint16_t *)(s->mem + addr) = cpu_to_le16(val); in ne2000_mem_writew()
459 stl_le_p(s->mem + addr, val); in ne2000_mem_writel()
467 return s->mem[addr]; in ne2000_mem_readb()
478 return le16_to_cpu(*(uint16_t *)(s->mem + addr)); in ne2000_mem_readw()
490 return ldl_le_p(s->mem + addr); in ne2000_mem_readl()
498 s->rsar += len; in ne2000_dma_update()
501 if (s->rsar == s->stop) in ne2000_dma_update()
502 s->rsar = s->start; in ne2000_dma_update()
504 if (s->rcnt <= len) { in ne2000_dma_update()
505 s->rcnt = 0; in ne2000_dma_update()
507 s->isr |= ENISR_RDC; in ne2000_dma_update()
510 s->rcnt -= len; in ne2000_dma_update()
521 if (s->rcnt == 0) in ne2000_asic_ioport_write()
523 if (s->dcfg & 0x01) { in ne2000_asic_ioport_write()
525 ne2000_mem_writew(s, s->rsar, val); in ne2000_asic_ioport_write()
529 ne2000_mem_writeb(s, s->rsar, val); in ne2000_asic_ioport_write()
539 if (s->dcfg & 0x01) { in ne2000_asic_ioport_read()
541 ret = ne2000_mem_readw(s, s->rsar); in ne2000_asic_ioport_read()
545 ret = ne2000_mem_readb(s, s->rsar); in ne2000_asic_ioport_read()
561 if (s->rcnt == 0) in ne2000_asic_ioport_writel()
564 ne2000_mem_writel(s, s->rsar, val); in ne2000_asic_ioport_writel()
574 ret = ne2000_mem_readl(s, s->rsar); in ne2000_asic_ioport_readl()
599 s->rxcr = 0x0c; in ne2000_post_load()
650 val = ((uint64_t)1 << (size * 8)) - 1; in ne2000_read()
687 memory_region_init_io(&s->io, OBJECT(dev), &ne2000_ops, s, "ne2000", size); in ne2000_setup_io()