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