Signed-off-by: Anthony PERARD <anthony.per...@citrix.com> --- hw/e1000.c | 10 ++++++++-- 1 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/hw/e1000.c b/hw/e1000.c index 96d84f9..a1388e9 100644 --- a/hw/e1000.c +++ b/hw/e1000.c @@ -150,6 +150,8 @@ static const char phy_regcap[0x20] = { [PHY_ID2] = PHY_R, [M88E1000_PHY_SPEC_STATUS] = PHY_R }; +static void e1000_reset(void *opaque); + static void ioport_map(PCIDevice *pci_dev, int region_num, pcibus_t addr, pcibus_t size, int type) @@ -202,8 +204,12 @@ rxbufsize(uint32_t v) static void set_ctrl(E1000State *s, int index, uint32_t val) { - /* RST is self clearing */ - s->mac_reg[CTRL] = val & ~E1000_CTRL_RST; + DBGOUT(IO, "set ctrl = %08x\n", val); + if (val & E1000_CTRL_RST) { + e1000_reset(s); + return; + } + s->mac_reg[CTRL] = val; } static void -- Anthony PERARD