hw/arm/armsse: Move sysinfo register block into data-driven framework
[qemu/ar7.git] / include / hw / dma / pl080.h
blob3c9659e4381f9218501c35cd191b1a08ebcf4ca0
1 /*
2 * ARM PrimeCell PL080/PL081 DMA controller
4 * Copyright (c) 2006 CodeSourcery.
5 * Copyright (c) 2018 Linaro Limited
6 * Written by Paul Brook, Peter Maydell
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License version 2 or
10 * (at your option) any later version.
14 * This is a model of the Arm PrimeCell PL080/PL081 DMA controller:
15 * The PL080 TRM is:
16 * https://developer.arm.com/documentation/ddi0196/latest
17 * and the PL081 TRM is:
18 * https://developer.arm.com/documentation/ddi0218/latest
20 * QEMU interface:
21 * + sysbus IRQ 0: DMACINTR combined interrupt line
22 * + sysbus IRQ 1: DMACINTERR error interrupt request
23 * + sysbus IRQ 2: DMACINTTC count interrupt request
24 * + sysbus MMIO region 0: MemoryRegion for the device's registers
25 * + QOM property "downstream": MemoryRegion defining where DMA
26 * bus master transactions are made
29 #ifndef HW_DMA_PL080_H
30 #define HW_DMA_PL080_H
32 #include "hw/sysbus.h"
33 #include "qom/object.h"
35 #define PL080_MAX_CHANNELS 8
37 typedef struct {
38 uint32_t src;
39 uint32_t dest;
40 uint32_t lli;
41 uint32_t ctrl;
42 uint32_t conf;
43 } pl080_channel;
45 #define TYPE_PL080 "pl080"
46 #define TYPE_PL081 "pl081"
47 OBJECT_DECLARE_SIMPLE_TYPE(PL080State, PL080)
49 struct PL080State {
50 SysBusDevice parent_obj;
52 MemoryRegion iomem;
53 uint8_t tc_int;
54 uint8_t tc_mask;
55 uint8_t err_int;
56 uint8_t err_mask;
57 uint32_t conf;
58 uint32_t sync;
59 uint32_t req_single;
60 uint32_t req_burst;
61 pl080_channel chan[PL080_MAX_CHANNELS];
62 int nchannels;
63 /* Flag to avoid recursive DMA invocations. */
64 int running;
65 qemu_irq irq;
66 qemu_irq interr;
67 qemu_irq inttc;
69 MemoryRegion *downstream;
70 AddressSpace downstream_as;
73 #endif