[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 29/55] cmd646: synchronise UDMA interrupt status with
From: |
Stefan Hajnoczi |
Subject: |
[Qemu-devel] [PULL 29/55] cmd646: synchronise UDMA interrupt status with DMA interrupt status |
Date: |
Fri, 15 Aug 2014 18:06:36 +0100 |
From: Mark Cave-Ayland <address@hidden>
Make sure that both registers are synchronised when being accessed through
PCI configuration space.
Signed-off-by: Mark Cave-Ayland <address@hidden>
Signed-off-by: Stefan Hajnoczi <address@hidden>
---
hw/ide/cmd646.c | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/hw/ide/cmd646.c b/hw/ide/cmd646.c
index b8dc4ab..74d0deb 100644
--- a/hw/ide/cmd646.c
+++ b/hw/ide/cmd646.c
@@ -146,6 +146,22 @@ static void cmd646_update_dma_interrupts(PCIDevice *pd)
}
}
+static void cmd646_update_udma_interrupts(PCIDevice *pd)
+{
+ /* Sync UDMA interrupt status from DMA interrupt status */
+ if (pd->config[CFR] & CFR_INTR_CH0) {
+ pd->config[MRDMODE] |= MRDMODE_INTR_CH0;
+ } else {
+ pd->config[MRDMODE] &= ~MRDMODE_INTR_CH0;
+ }
+
+ if (pd->config[ARTTIM23] & ARTTIM23_INTR_CH1) {
+ pd->config[MRDMODE] |= MRDMODE_INTR_CH1;
+ } else {
+ pd->config[MRDMODE] &= ~MRDMODE_INTR_CH1;
+ }
+}
+
static uint64_t bmdma_read(void *opaque, hwaddr addr,
unsigned size)
{
@@ -296,6 +312,10 @@ static void cmd646_pci_config_write(PCIDevice *d, uint32_t
addr, uint32_t val,
for (i = addr; i < addr + l; i++) {
switch (i) {
+ case CFR:
+ case ARTTIM23:
+ cmd646_update_udma_interrupts(d);
+ break;
case MRDMODE:
cmd646_update_dma_interrupts(d);
break;
@@ -322,6 +342,10 @@ static int pci_cmd646_ide_initfn(PCIDevice *dev)
}
/* Set write-to-clear interrupt bits */
+ dev->wmask[CFR] = 0x0;
+ dev->w1cmask[CFR] = CFR_INTR_CH0;
+ dev->wmask[ARTTIM23] = 0x0;
+ dev->w1cmask[ARTTIM23] = ARTTIM23_INTR_CH1;
dev->wmask[MRDMODE] = 0x0;
dev->w1cmask[MRDMODE] = MRDMODE_INTR_CH0 | MRDMODE_INTR_CH1;
--
1.9.3
- [Qemu-devel] [PULL 23/55] libqos: allow qpci_iomap to return BAR mapping size, (continued)
- [Qemu-devel] [PULL 23/55] libqos: allow qpci_iomap to return BAR mapping size, Stefan Hajnoczi, 2014/08/15
- [Qemu-devel] [PULL 24/55] qtest/ide: Fix small memory leak, Stefan Hajnoczi, 2014/08/15
- [Qemu-devel] [PULL 26/55] cmd646: synchronise DMA interrupt status with UDMA interrupt status, Stefan Hajnoczi, 2014/08/15
- [Qemu-devel] [PULL 25/55] cmd646: add constants for CNTRL register access, Stefan Hajnoczi, 2014/08/15
- [Qemu-devel] [PULL 28/55] cmd646: allow MRDMODE interrupt status bits clearing from PCI config space, Stefan Hajnoczi, 2014/08/15
- [Qemu-devel] [PULL 31/55] channel-posix: using qemu_set_nonblock() instead of fcntl(O_NONBLOCK), Stefan Hajnoczi, 2014/08/15
- [Qemu-devel] [PULL 32/55] dataplane: print why starting failed, Stefan Hajnoczi, 2014/08/15
- [Qemu-devel] [PULL 35/55] parallels: extend parallels format header with actual data values, Stefan Hajnoczi, 2014/08/15
- [Qemu-devel] [PULL 27/55] cmd646: switch cmd646_update_irq() to accept PCIDevice instead of PCIIDEState, Stefan Hajnoczi, 2014/08/15
- [Qemu-devel] [PULL 36/55] parallels: replace tabs with spaces in block/parallels.c, Stefan Hajnoczi, 2014/08/15
- [Qemu-devel] [PULL 29/55] cmd646: synchronise UDMA interrupt status with DMA interrupt status,
Stefan Hajnoczi <=
- [Qemu-devel] [PULL 33/55] dataplane: fail notifier setting gracefully, Stefan Hajnoczi, 2014/08/15
- [Qemu-devel] [PULL 37/55] parallels: split check for parallels format in parallels_open, Stefan Hajnoczi, 2014/08/15
- [Qemu-devel] [PULL 34/55] dataplane: stop trying on notifier error, Stefan Hajnoczi, 2014/08/15
- [Qemu-devel] [PULL 38/55] parallels: 2TB+ parallels images support, Stefan Hajnoczi, 2014/08/15
- [Qemu-devel] [PULL 40/55] ide: Fix segfault when flushing a device that doesn't exist, Stefan Hajnoczi, 2014/08/15
- [Qemu-devel] [PULL 39/55] qemu-options: add missing -drive discard option to cmdline help, Stefan Hajnoczi, 2014/08/15
- [Qemu-devel] [PULL 30/55] qemu-char: using qemu_set_nonblock() instead of fcntl(O_NONBLOCK), Stefan Hajnoczi, 2014/08/15
- [Qemu-devel] [PULL 41/55] libqtest: add QTEST_LOG for debugging qtest testcases, Stefan Hajnoczi, 2014/08/15
- [Qemu-devel] [PULL 42/55] libqos: Correct mask to align size to PAGE_SIZE in malloc-pc, Stefan Hajnoczi, 2014/08/15
- [Qemu-devel] [PULL 45/55] ide: only constrain read/write requests to drive size, not other types, Stefan Hajnoczi, 2014/08/15