Message ID | 4BD9B9C4.5000702@siemens.com |
---|---|
State | New |
Headers | show |
Jan Kiszka wrote: > The LSI controller was lacking any system reset handler. This is an > attempt to fix it. > > Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> > --- > hw/lsi53c895a.c | 11 +++++++++++ > 1 files changed, 11 insertions(+), 0 deletions(-) > > diff --git a/hw/lsi53c895a.c b/hw/lsi53c895a.c > index 98b7f54..f328057 100644 > --- a/hw/lsi53c895a.c > +++ b/hw/lsi53c895a.c > @@ -1996,6 +1996,16 @@ static void lsi_mmio_mapfunc(PCIDevice *pci_dev, int region_num, > cpu_register_physical_memory(addr + 0, 0x400, s->mmio_io_addr); > } > > +static void lsi_scsi_reset(DeviceState *dev) > +{ > + LSIState *s = DO_UPCAST(LSIState, dev.qdev, dev); > + > + s->dma_buf = NULL; > + s->current_dma_len = 0; > + s->active_commands = 0; OK, this 0.12 patch obviously no longer applies. And purging the command queue should not only be done on hard reset, but also when software triggered it (ie. move it to lsi_soft_reset). Reworking... Jan > + lsi_soft_reset(s); > +} > + > static void lsi_pre_save(void *opaque) > { > LSIState *s = opaque; > @@ -2149,6 +2159,7 @@ static PCIDeviceInfo lsi_info = { > .qdev.name = "lsi53c895a", > .qdev.alias = "lsi", > .qdev.size = sizeof(LSIState), > + .qdev.reset = lsi_scsi_reset, > .qdev.vmsd = &vmstate_lsi_scsi, > .init = lsi_scsi_init, > .exit = lsi_scsi_uninit, > > >
diff --git a/hw/lsi53c895a.c b/hw/lsi53c895a.c index 98b7f54..f328057 100644 --- a/hw/lsi53c895a.c +++ b/hw/lsi53c895a.c @@ -1996,6 +1996,16 @@ static void lsi_mmio_mapfunc(PCIDevice *pci_dev, int region_num, cpu_register_physical_memory(addr + 0, 0x400, s->mmio_io_addr); } +static void lsi_scsi_reset(DeviceState *dev) +{ + LSIState *s = DO_UPCAST(LSIState, dev.qdev, dev); + + s->dma_buf = NULL; + s->current_dma_len = 0; + s->active_commands = 0; + lsi_soft_reset(s); +} + static void lsi_pre_save(void *opaque) { LSIState *s = opaque; @@ -2149,6 +2159,7 @@ static PCIDeviceInfo lsi_info = { .qdev.name = "lsi53c895a", .qdev.alias = "lsi", .qdev.size = sizeof(LSIState), + .qdev.reset = lsi_scsi_reset, .qdev.vmsd = &vmstate_lsi_scsi, .init = lsi_scsi_init, .exit = lsi_scsi_uninit,
The LSI controller was lacking any system reset handler. This is an attempt to fix it. Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com> --- hw/lsi53c895a.c | 11 +++++++++++ 1 files changed, 11 insertions(+), 0 deletions(-)