/*
 * Copyright (c) 2017 Intel Corporation.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#ifndef _DMA_CAVS_H_
#define _DMA_CAVS_H_

#ifdef __cplusplus
extern "C" {
#endif

#define DW_CTLL_INT_EN		(1 << 0)
#define DW_CTLL_DST_WIDTH(x)	(x << 1)
#define DW_CTLL_SRC_WIDTH(x)	(x << 4)
#define DW_CTLL_DST_INC		(0 << 8)
#define DW_CTLL_DST_FIX		(1 << 8)
#define DW_CTLL_SRC_INC		(0 << 10)
#define DW_CTLL_SRC_FIX		(1 << 10)
#define DW_CTLL_DST_MSIZE(x)	(x << 11)
#define DW_CTLL_SRC_MSIZE(x)	(x << 14)
#define DW_CTLL_FC(x)		(x << 20)
#define DW_CTLL_FC_M2M		(0 << 20)
#define DW_CTLL_FC_M2P		(1 << 20)
#define DW_CTLL_FC_P2M		(2 << 20)
#define DW_CTLL_FC_P2P		(3 << 20)
#define DW_CTLL_LLP_D_EN	(1 << 27)
#define DW_CTLL_LLP_S_EN	(1 << 28)

/* DMA descriptor used by HW version 2 */
struct dw_lli2 {
	u32_t sar;
	u32_t dar;
	u32_t llp;
	u32_t ctrl_lo;
	u32_t ctrl_hi;
	u32_t sstat;
	u32_t dstat;
} __packed;

/* data for each DMA channel */
struct dma_chan_data {
	u32_t direction;
	struct dw_lli2 *lli;
	u32_t cfg_lo;
	u32_t cfg_hi;
	void (*dma_blkcallback)(struct device *dev, u32_t channel,
		int error_code);
	void (*dma_tfrcallback)(struct device *dev, u32_t channel,
		int error_code);
};

#define DW_MAX_CHAN		8
#define DW_CH_SIZE		0x58
#define BYT_CHAN_OFFSET(chan)	(DW_CH_SIZE * chan)

#define DW_SAR(chan)	\
	(0x0000 + BYT_CHAN_OFFSET(chan))
#define DW_DAR(chan) \
	(0x0008 + BYT_CHAN_OFFSET(chan))
#define DW_LLP(chan) \
	(0x0010 + BYT_CHAN_OFFSET(chan))
#define DW_CTRL_LOW(chan) \
	(0x0018 + BYT_CHAN_OFFSET(chan))
#define DW_CTRL_HIGH(chan) \
	(0x001C + BYT_CHAN_OFFSET(chan))
#define DW_CFG_LOW(chan) \
	(0x0040 + BYT_CHAN_OFFSET(chan))
#define DW_CFG_HIGH(chan) \
	(0x0044 + BYT_CHAN_OFFSET(chan))

/* registers */
#define DW_RAW_TFR		0x02C0
#define DW_RAW_BLOCK		0x02C8
#define DW_RAW_SRC_TRAN		0x02D0
#define DW_RAW_DST_TRAN		0x02D8
#define DW_RAW_ERR		0x02E0
#define DW_STATUS_TFR		0x02E8
#define DW_STATUS_BLOCK		0x02F0
#define DW_STATUS_SRC_TRAN	0x02F8
#define DW_STATUS_DST_TRAN	0x0300
#define DW_STATUS_ERR		0x0308
#define DW_MASK_TFR		0x0310
#define DW_MASK_BLOCK		0x0318
#define DW_MASK_SRC_TRAN	0x0320
#define DW_MASK_DST_TRAN	0x0328
#define DW_MASK_ERR		0x0330
#define DW_CLEAR_TFR		0x0338
#define DW_CLEAR_BLOCK		0x0340
#define DW_CLEAR_SRC_TRAN	0x0348
#define DW_CLEAR_DST_TRAN	0x0350
#define DW_CLEAR_ERR		0x0358
#define DW_INTR_STATUS		0x0360
#define DW_DMA_CFG		0x0398
#define DW_DMA_CHAN_EN		0x03A0

/* channel bits */
#define INT_MASK(chan)		(0x100 << chan)
#define INT_UNMASK(chan)	(0x101 << chan)
#define INT_MASK_ALL		0xFF00
#define INT_UNMASK_ALL		0xFFFF
#define CHAN_ENABLE(chan)	(0x101 << chan)
#define CHAN_DISABLE(chan)	(0x100 << chan)

/* TODO: add FIFO sizes */
struct chan_arbit_data {
	u16_t class;
	u16_t weight;
};

struct dw_drv_plat_data {
	struct chan_arbit_data chan[DW_MAX_CHAN];
};

/* Device run time data */
struct dw_dma_dev_data {
	struct dw_drv_plat_data *channel_data;
	struct dma_chan_data chan[DW_MAX_CHAN];
};

/* Device constant configuration parameters */
struct dw_dma_dev_cfg {
	u32_t base;
	void (*irq_config)(void);
	u32_t irq_id;
};

#ifdef __cplusplus
}
#endif

#endif /* _DMA_CAVS_H_ */
