mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 00:03:54 -06:00
ide: convert to memory API
Reviewed-by: Richard Henderson <rth@twiddle.net> Reviewed-by: Anthony Liguori <aliguori@us.ibm.com> Signed-off-by: Avi Kivity <avi@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
This commit is contained in:
parent
e1a99dbd9c
commit
a9deb8c69a
5 changed files with 260 additions and 119 deletions
25
hw/ide/pci.c
25
hw/ide/pci.c
|
@ -287,9 +287,8 @@ static void bmdma_irq(void *opaque, int n, int level)
|
|||
qemu_set_irq(bm->irq, level);
|
||||
}
|
||||
|
||||
void bmdma_cmd_writeb(void *opaque, uint32_t addr, uint32_t val)
|
||||
void bmdma_cmd_writeb(BMDMAState *bm, uint32_t val)
|
||||
{
|
||||
BMDMAState *bm = opaque;
|
||||
#ifdef DEBUG_IDE
|
||||
printf("%s: 0x%08x\n", __func__, val);
|
||||
#endif
|
||||
|
@ -328,22 +327,24 @@ void bmdma_cmd_writeb(void *opaque, uint32_t addr, uint32_t val)
|
|||
bm->cmd = val & 0x09;
|
||||
}
|
||||
|
||||
static void bmdma_addr_read(IORange *ioport, uint64_t addr,
|
||||
unsigned width, uint64_t *data)
|
||||
static uint64_t bmdma_addr_read(void *opaque, target_phys_addr_t addr,
|
||||
unsigned width)
|
||||
{
|
||||
BMDMAState *bm = container_of(ioport, BMDMAState, addr_ioport);
|
||||
BMDMAState *bm = opaque;
|
||||
uint32_t mask = (1ULL << (width * 8)) - 1;
|
||||
uint64_t data;
|
||||
|
||||
*data = (bm->addr >> (addr * 8)) & mask;
|
||||
data = (bm->addr >> (addr * 8)) & mask;
|
||||
#ifdef DEBUG_IDE
|
||||
printf("%s: 0x%08x\n", __func__, (unsigned)*data);
|
||||
#endif
|
||||
return data;
|
||||
}
|
||||
|
||||
static void bmdma_addr_write(IORange *ioport, uint64_t addr,
|
||||
unsigned width, uint64_t data)
|
||||
static void bmdma_addr_write(void *opaque, target_phys_addr_t addr,
|
||||
uint64_t data, unsigned width)
|
||||
{
|
||||
BMDMAState *bm = container_of(ioport, BMDMAState, addr_ioport);
|
||||
BMDMAState *bm = opaque;
|
||||
int shift = addr * 8;
|
||||
uint32_t mask = (1ULL << (width * 8)) - 1;
|
||||
|
||||
|
@ -354,9 +355,10 @@ static void bmdma_addr_write(IORange *ioport, uint64_t addr,
|
|||
bm->addr |= ((data & mask) << shift) & ~3;
|
||||
}
|
||||
|
||||
const IORangeOps bmdma_addr_ioport_ops = {
|
||||
MemoryRegionOps bmdma_addr_ioport_ops = {
|
||||
.read = bmdma_addr_read,
|
||||
.write = bmdma_addr_write,
|
||||
.endianness = DEVICE_LITTLE_ENDIAN,
|
||||
};
|
||||
|
||||
static bool ide_bmdma_current_needed(void *opaque)
|
||||
|
@ -514,7 +516,7 @@ static const struct IDEDMAOps bmdma_ops = {
|
|||
.reset = bmdma_reset,
|
||||
};
|
||||
|
||||
void bmdma_init(IDEBus *bus, BMDMAState *bm)
|
||||
void bmdma_init(IDEBus *bus, BMDMAState *bm, PCIIDEState *d)
|
||||
{
|
||||
qemu_irq *irq;
|
||||
|
||||
|
@ -527,4 +529,5 @@ void bmdma_init(IDEBus *bus, BMDMAState *bm)
|
|||
bm->irq = bus->irq;
|
||||
irq = qemu_allocate_irqs(bmdma_irq, bm, 1);
|
||||
bus->irq = *irq;
|
||||
bm->pci_dev = d;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue