1*22cd0945SFrancisco Iglesias /* 2*22cd0945SFrancisco Iglesias * QEMU model of the ZynqMP generic DMA 3*22cd0945SFrancisco Iglesias * 4*22cd0945SFrancisco Iglesias * Copyright (c) 2014 Xilinx Inc. 5*22cd0945SFrancisco Iglesias * Copyright (c) 2018 FEIMTECH AB 6*22cd0945SFrancisco Iglesias * 7*22cd0945SFrancisco Iglesias * Written by Edgar E. Iglesias <edgar.iglesias@xilinx.com>, 8*22cd0945SFrancisco Iglesias * Francisco Iglesias <francisco.iglesias@feimtech.se> 9*22cd0945SFrancisco Iglesias * 10*22cd0945SFrancisco Iglesias * Permission is hereby granted, free of charge, to any person obtaining a copy 11*22cd0945SFrancisco Iglesias * of this software and associated documentation files (the "Software"), to deal 12*22cd0945SFrancisco Iglesias * in the Software without restriction, including without limitation the rights 13*22cd0945SFrancisco Iglesias * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14*22cd0945SFrancisco Iglesias * copies of the Software, and to permit persons to whom the Software is 15*22cd0945SFrancisco Iglesias * furnished to do so, subject to the following conditions: 16*22cd0945SFrancisco Iglesias * 17*22cd0945SFrancisco Iglesias * The above copyright notice and this permission notice shall be included in 18*22cd0945SFrancisco Iglesias * all copies or substantial portions of the Software. 19*22cd0945SFrancisco Iglesias * 20*22cd0945SFrancisco Iglesias * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21*22cd0945SFrancisco Iglesias * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22*22cd0945SFrancisco Iglesias * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 23*22cd0945SFrancisco Iglesias * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24*22cd0945SFrancisco Iglesias * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25*22cd0945SFrancisco Iglesias * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 26*22cd0945SFrancisco Iglesias * THE SOFTWARE. 27*22cd0945SFrancisco Iglesias */ 28*22cd0945SFrancisco Iglesias 29*22cd0945SFrancisco Iglesias #ifndef XLNX_ZDMA_H 30*22cd0945SFrancisco Iglesias #define XLNX_ZDMA_H 31*22cd0945SFrancisco Iglesias 32*22cd0945SFrancisco Iglesias #include "hw/sysbus.h" 33*22cd0945SFrancisco Iglesias #include "hw/register.h" 34*22cd0945SFrancisco Iglesias #include "sysemu/dma.h" 35*22cd0945SFrancisco Iglesias 36*22cd0945SFrancisco Iglesias #define ZDMA_R_MAX (0x204 / 4) 37*22cd0945SFrancisco Iglesias 38*22cd0945SFrancisco Iglesias typedef enum { 39*22cd0945SFrancisco Iglesias DISABLED = 0, 40*22cd0945SFrancisco Iglesias ENABLED = 1, 41*22cd0945SFrancisco Iglesias PAUSED = 2, 42*22cd0945SFrancisco Iglesias } XlnxZDMAState; 43*22cd0945SFrancisco Iglesias 44*22cd0945SFrancisco Iglesias typedef union { 45*22cd0945SFrancisco Iglesias struct { 46*22cd0945SFrancisco Iglesias uint64_t addr; 47*22cd0945SFrancisco Iglesias uint32_t size; 48*22cd0945SFrancisco Iglesias uint32_t attr; 49*22cd0945SFrancisco Iglesias }; 50*22cd0945SFrancisco Iglesias uint32_t words[4]; 51*22cd0945SFrancisco Iglesias } XlnxZDMADescr; 52*22cd0945SFrancisco Iglesias 53*22cd0945SFrancisco Iglesias typedef struct XlnxZDMA { 54*22cd0945SFrancisco Iglesias SysBusDevice parent_obj; 55*22cd0945SFrancisco Iglesias MemoryRegion iomem; 56*22cd0945SFrancisco Iglesias MemTxAttrs attr; 57*22cd0945SFrancisco Iglesias MemoryRegion *dma_mr; 58*22cd0945SFrancisco Iglesias AddressSpace *dma_as; 59*22cd0945SFrancisco Iglesias qemu_irq irq_zdma_ch_imr; 60*22cd0945SFrancisco Iglesias 61*22cd0945SFrancisco Iglesias struct { 62*22cd0945SFrancisco Iglesias uint32_t bus_width; 63*22cd0945SFrancisco Iglesias } cfg; 64*22cd0945SFrancisco Iglesias 65*22cd0945SFrancisco Iglesias XlnxZDMAState state; 66*22cd0945SFrancisco Iglesias bool error; 67*22cd0945SFrancisco Iglesias 68*22cd0945SFrancisco Iglesias XlnxZDMADescr dsc_src; 69*22cd0945SFrancisco Iglesias XlnxZDMADescr dsc_dst; 70*22cd0945SFrancisco Iglesias 71*22cd0945SFrancisco Iglesias uint32_t regs[ZDMA_R_MAX]; 72*22cd0945SFrancisco Iglesias RegisterInfo regs_info[ZDMA_R_MAX]; 73*22cd0945SFrancisco Iglesias 74*22cd0945SFrancisco Iglesias /* We don't model the common bufs. Must be at least 16 bytes 75*22cd0945SFrancisco Iglesias to model write only mode. */ 76*22cd0945SFrancisco Iglesias uint8_t buf[2048]; 77*22cd0945SFrancisco Iglesias } XlnxZDMA; 78*22cd0945SFrancisco Iglesias 79*22cd0945SFrancisco Iglesias #define TYPE_XLNX_ZDMA "xlnx.zdma" 80*22cd0945SFrancisco Iglesias 81*22cd0945SFrancisco Iglesias #define XLNX_ZDMA(obj) \ 82*22cd0945SFrancisco Iglesias OBJECT_CHECK(XlnxZDMA, (obj), TYPE_XLNX_ZDMA) 83*22cd0945SFrancisco Iglesias 84*22cd0945SFrancisco Iglesias #endif /* XLNX_ZDMA_H */ 85