diff options
Diffstat (limited to 'include/hw/dma/pl080.h')
-rw-r--r-- | include/hw/dma/pl080.h | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/include/hw/dma/pl080.h b/include/hw/dma/pl080.h new file mode 100644 index 000000000..3c9659e43 --- /dev/null +++ b/include/hw/dma/pl080.h @@ -0,0 +1,73 @@ +/* + * ARM PrimeCell PL080/PL081 DMA controller + * + * Copyright (c) 2006 CodeSourcery. + * Copyright (c) 2018 Linaro Limited + * Written by Paul Brook, Peter Maydell + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 or + * (at your option) any later version. + */ + +/* + * This is a model of the Arm PrimeCell PL080/PL081 DMA controller: + * The PL080 TRM is: + * https://developer.arm.com/documentation/ddi0196/latest + * and the PL081 TRM is: + * https://developer.arm.com/documentation/ddi0218/latest + * + * QEMU interface: + * + sysbus IRQ 0: DMACINTR combined interrupt line + * + sysbus IRQ 1: DMACINTERR error interrupt request + * + sysbus IRQ 2: DMACINTTC count interrupt request + * + sysbus MMIO region 0: MemoryRegion for the device's registers + * + QOM property "downstream": MemoryRegion defining where DMA + * bus master transactions are made + */ + +#ifndef HW_DMA_PL080_H +#define HW_DMA_PL080_H + +#include "hw/sysbus.h" +#include "qom/object.h" + +#define PL080_MAX_CHANNELS 8 + +typedef struct { + uint32_t src; + uint32_t dest; + uint32_t lli; + uint32_t ctrl; + uint32_t conf; +} pl080_channel; + +#define TYPE_PL080 "pl080" +#define TYPE_PL081 "pl081" +OBJECT_DECLARE_SIMPLE_TYPE(PL080State, PL080) + +struct PL080State { + SysBusDevice parent_obj; + + MemoryRegion iomem; + uint8_t tc_int; + uint8_t tc_mask; + uint8_t err_int; + uint8_t err_mask; + uint32_t conf; + uint32_t sync; + uint32_t req_single; + uint32_t req_burst; + pl080_channel chan[PL080_MAX_CHANNELS]; + int nchannels; + /* Flag to avoid recursive DMA invocations. */ + int running; + qemu_irq irq; + qemu_irq interr; + qemu_irq inttc; + + MemoryRegion *downstream; + AddressSpace downstream_as; +}; + +#endif |