Il 31/10/2013 01:21, jacek burghardt ha scritto: > I am in process of recompiling qemu right now > I came up with this patch is this correct > diff -Naur qemu/hw/net/e1000.c qemu-a/hw/net/e1000.c > --- qemu/hw/net/e1000.c 2013-10-27 15:36:05.496526538 -0600 > +++ qemu-a/hw/net/e1000.c 2013-10-30 18:09:03.101711694 -0600 > @@ -203,6 +203,12 @@ > DBGOUT(PHY, "Start link auto negotiation\n"); > timer_mod(s->autoneg_timer, > qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL) + 500); > } > + > + if (val & 0x8000) { > + val &= 0x7fff; > + set_ics(s, 0, E1000_ICR_LSC); > + } > + s->phy_reg[PHY_CTRL] = val; > } > > static void > @@ -390,6 +396,8 @@ > d->rxbuf_min_shift = 1; > memset(&d->tx, 0, sizeof d->tx); > > + d->mac_reg[RA+0] = (macaddr[3] << 24) | (macaddr[2] << 16) | > (macaddr[1] << 8) | macaddr[0]; > + d->mac_reg[RA+1] = E1000_RAH_AV | (macaddr[5] << 8) | macaddr[4]; > if (qemu_get_queue(d->nic)->link_down) { > e1000_link_down(d); > } > @@ -409,6 +417,8 @@ > { > /* RST is self clearing */ > s->mac_reg[CTRL] = val & ~E1000_CTRL_RST; > + if (val & E1000_CTRL_RST) > + set_ics(s, 0, E1000_ICR_LSC);
Are these two lines necessary? > } > > static void > @@ -446,7 +456,15 @@ > if (addr < NPHYWRITEOPS && phyreg_writeops[addr]) { > phyreg_writeops[addr](s, index, data); > } > - s->phy_reg[addr] = data; > + switch (addr) { > + case PHY_CTRL: > + s->phy_reg[addr] = data & 0x7eff; Does it work if you put 0x7fff here? Paolo