xref: /openbmc/qemu/include/hw/dma/xlnx-zdma.h (revision f214d8e0150766c31172e16ef4b17674f549d852)
122cd0945SFrancisco Iglesias /*
222cd0945SFrancisco Iglesias  * QEMU model of the ZynqMP generic DMA
322cd0945SFrancisco Iglesias  *
422cd0945SFrancisco Iglesias  * Copyright (c) 2014 Xilinx Inc.
522cd0945SFrancisco Iglesias  * Copyright (c) 2018 FEIMTECH AB
622cd0945SFrancisco Iglesias  *
722cd0945SFrancisco Iglesias  * Written by Edgar E. Iglesias <edgar.iglesias@xilinx.com>,
822cd0945SFrancisco Iglesias  *            Francisco Iglesias <francisco.iglesias@feimtech.se>
922cd0945SFrancisco Iglesias  *
1022cd0945SFrancisco Iglesias  * Permission is hereby granted, free of charge, to any person obtaining a copy
1122cd0945SFrancisco Iglesias  * of this software and associated documentation files (the "Software"), to deal
1222cd0945SFrancisco Iglesias  * in the Software without restriction, including without limitation the rights
1322cd0945SFrancisco Iglesias  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
1422cd0945SFrancisco Iglesias  * copies of the Software, and to permit persons to whom the Software is
1522cd0945SFrancisco Iglesias  * furnished to do so, subject to the following conditions:
1622cd0945SFrancisco Iglesias  *
1722cd0945SFrancisco Iglesias  * The above copyright notice and this permission notice shall be included in
1822cd0945SFrancisco Iglesias  * all copies or substantial portions of the Software.
1922cd0945SFrancisco Iglesias  *
2022cd0945SFrancisco Iglesias  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2122cd0945SFrancisco Iglesias  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2222cd0945SFrancisco Iglesias  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
2322cd0945SFrancisco Iglesias  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
2422cd0945SFrancisco Iglesias  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
2522cd0945SFrancisco Iglesias  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
2622cd0945SFrancisco Iglesias  * THE SOFTWARE.
2722cd0945SFrancisco Iglesias  */
2822cd0945SFrancisco Iglesias 
2922cd0945SFrancisco Iglesias #ifndef XLNX_ZDMA_H
3022cd0945SFrancisco Iglesias #define XLNX_ZDMA_H
3122cd0945SFrancisco Iglesias 
3222cd0945SFrancisco Iglesias #include "hw/sysbus.h"
3322cd0945SFrancisco Iglesias #include "hw/register.h"
3422cd0945SFrancisco Iglesias #include "sysemu/dma.h"
35db1015e9SEduardo Habkost #include "qom/object.h"
3622cd0945SFrancisco Iglesias 
3722cd0945SFrancisco Iglesias #define ZDMA_R_MAX (0x204 / 4)
3822cd0945SFrancisco Iglesias 
3922cd0945SFrancisco Iglesias typedef enum {
4022cd0945SFrancisco Iglesias     DISABLED = 0,
4122cd0945SFrancisco Iglesias     ENABLED = 1,
4222cd0945SFrancisco Iglesias     PAUSED = 2,
4322cd0945SFrancisco Iglesias } XlnxZDMAState;
4422cd0945SFrancisco Iglesias 
4522cd0945SFrancisco Iglesias typedef union {
4622cd0945SFrancisco Iglesias     struct {
4722cd0945SFrancisco Iglesias         uint64_t addr;
4822cd0945SFrancisco Iglesias         uint32_t size;
4922cd0945SFrancisco Iglesias         uint32_t attr;
5022cd0945SFrancisco Iglesias     };
5122cd0945SFrancisco Iglesias     uint32_t words[4];
5222cd0945SFrancisco Iglesias } XlnxZDMADescr;
5322cd0945SFrancisco Iglesias 
54db1015e9SEduardo Habkost struct XlnxZDMA {
5522cd0945SFrancisco Iglesias     SysBusDevice parent_obj;
5622cd0945SFrancisco Iglesias     MemoryRegion iomem;
5722cd0945SFrancisco Iglesias     MemTxAttrs attr;
5822cd0945SFrancisco Iglesias     MemoryRegion *dma_mr;
59*783dbab1SPhilippe Mathieu-Daudé     AddressSpace dma_as;
6022cd0945SFrancisco Iglesias     qemu_irq irq_zdma_ch_imr;
6122cd0945SFrancisco Iglesias 
6222cd0945SFrancisco Iglesias     struct {
6322cd0945SFrancisco Iglesias         uint32_t bus_width;
6422cd0945SFrancisco Iglesias     } cfg;
6522cd0945SFrancisco Iglesias 
6622cd0945SFrancisco Iglesias     XlnxZDMAState state;
6722cd0945SFrancisco Iglesias     bool error;
6822cd0945SFrancisco Iglesias 
6922cd0945SFrancisco Iglesias     XlnxZDMADescr dsc_src;
7022cd0945SFrancisco Iglesias     XlnxZDMADescr dsc_dst;
7122cd0945SFrancisco Iglesias 
7222cd0945SFrancisco Iglesias     uint32_t regs[ZDMA_R_MAX];
7322cd0945SFrancisco Iglesias     RegisterInfo regs_info[ZDMA_R_MAX];
7422cd0945SFrancisco Iglesias 
7522cd0945SFrancisco Iglesias     /* We don't model the common bufs. Must be at least 16 bytes
7622cd0945SFrancisco Iglesias        to model write only mode.  */
7722cd0945SFrancisco Iglesias     uint8_t buf[2048];
78db1015e9SEduardo Habkost };
7922cd0945SFrancisco Iglesias 
8022cd0945SFrancisco Iglesias #define TYPE_XLNX_ZDMA "xlnx.zdma"
8122cd0945SFrancisco Iglesias 
828063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(XlnxZDMA, XLNX_ZDMA)
8322cd0945SFrancisco Iglesias 
8422cd0945SFrancisco Iglesias #endif /* XLNX_ZDMA_H */
85