/*
 * 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;
};

#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 {
	void (*dma_blkcallback)(struct device *dev, u32_t channel,
		int error_code);
	void (*dma_tfrcallback)(struct device *dev, u32_t channel,
		int error_code);
	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_ */
