From 61f58e593452b3b3395e0c24ad4f7e79429e6c2f Mon Sep 17 00:00:00 2001 From: Juan Quintela Date: Wed, 7 Oct 2009 16:56:27 +0200 Subject: [PATCH] ide: cmd646 we can get the pci device with container_of Patchworks-ID: 35305 Signed-off-by: Juan Quintela Signed-off-by: Anthony Liguori --- hw/ide/cmd646.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/hw/ide/cmd646.c b/hw/ide/cmd646.c index 2107209e32..eb5a2e93f6 100644 --- a/hw/ide/cmd646.c +++ b/hw/ide/cmd646.c @@ -68,10 +68,19 @@ static void ide_map(PCIDevice *pci_dev, int region_num, } } +static PCIIDEState *pci_from_bm(BMDMAState *bm) +{ + if (bm->unit == 0) { + return container_of(bm, PCIIDEState, bmdma[0]); + } else { + return container_of(bm, PCIIDEState, bmdma[1]); + } +} + static uint32_t bmdma_readb(void *opaque, uint32_t addr) { BMDMAState *bm = opaque; - PCIIDEState *pci_dev; + PCIIDEState *pci_dev = pci_from_bm(bm); uint32_t val; switch(addr & 3) { @@ -79,14 +88,12 @@ static uint32_t bmdma_readb(void *opaque, uint32_t addr) val = bm->cmd; break; case 1: - pci_dev = bm->pci_dev; val = pci_dev->dev.config[MRDMODE]; break; case 2: val = bm->status; break; case 3: - pci_dev = bm->pci_dev; if (bm == &pci_dev->bmdma[0]) { val = pci_dev->dev.config[UDIDETCR0]; } else { @@ -106,13 +113,12 @@ static uint32_t bmdma_readb(void *opaque, uint32_t addr) static void bmdma_writeb(void *opaque, uint32_t addr, uint32_t val) { BMDMAState *bm = opaque; - PCIIDEState *pci_dev; + PCIIDEState *pci_dev = pci_from_bm(bm); #ifdef DEBUG_IDE printf("bmdma: writeb 0x%02x : 0x%02x\n", addr, val); #endif switch(addr & 3) { case 1: - pci_dev = bm->pci_dev; pci_dev->dev.config[MRDMODE] = (pci_dev->dev.config[MRDMODE] & ~0x30) | (val & 0x30); cmd646_update_irq(pci_dev); @@ -121,7 +127,6 @@ static void bmdma_writeb(void *opaque, uint32_t addr, uint32_t val) bm->status = (val & 0x60) | (bm->status & 1) | (bm->status & ~val & 0x06); break; case 3: - pci_dev = bm->pci_dev; if (bm == &pci_dev->bmdma[0]) pci_dev->dev.config[UDIDETCR0] = val; else -- GitLab