#ifndef _IMXSDMAREG_H
#define _IMXSDMAREG_H
#include "opt_imx.h"
#define SDMA_SIZE 0x2c0
#define SDMA_N_CHANNELS 32
#define SDMA_PRIORITY_MIN 1
#define SDMA_PRIORITY_MAX 7
#define SDMA_N_EVENTS 32
#define SDMA_MC0PTR 0x0000
#define SDMA_INTR 0x0004
#define SDMA_STOP_STAT 0x0008
#define SDMA_HSTART 0x000C
#define SDMA_EVTOVR 0x0010
#define SDMA_DSPOVR 0x0014
#define SDMA_HOSTOVR 0x0018
#define SDMA_EVTPEND 0x001C
#define SDMA_RESET 0x0024
#define SDMA_RESET_RESCHED __BIT(1)
#define SDMA_RESET_RESET __BIT(0)
#define SDMA_EVTERR 0x0028
#define SDMA_INTRMASK 0x002C
#define SDMA_PSW 0x0030
#define SDMA_EVTERRDBG 0x0034
#define SDMA_CONFIG 0x0038
#define SDMA_ONCE_ENB 0x0040
#define SDMA_ONCE_DATA 0x0044
#define SDMA_ONCE_INSTR 0x0048
#define SDMA_ONCE_STAT 0x004c
#define ONCE_STAT_PST_SHIFT 12
#define ONCE_STAT_PST_MASK (0xf<<ONCE_STAT_PST_SHIFT)
#define ONCE_STAT_PST_PROGRAM (0<<ONCE_STAT_PST_SHIFT)
#define ONCE_STAT_PST_DATA (1<<ONCE_STAT_PST_SHIFT)
#define ONCE_STAT_PST_CHGFLOW (2<<ONCE_STAT_PST_SHIFT)
#define ONCE_STAT_PST_CHGFLOW_IN_LOOP (3<<ONCE_STAT_PST_SHIFT)
#define ONCE_STAT_PST_DEBUG (4<<ONCE_STAT_PST_SHIFT)
#define ONCE_STAT_PST_FUNCUNIT (5<<ONCE_STAT_PST_SHIFT)
#define ONCE_STAT_PST_SLEEP (6<<ONCE_STAT_PST_SHIFT)
#define ONCE_STAT_PST_SAVE (7<<ONCE_STAT_PST_SHIFT)
#define ONCE_STAT_PST_PROGRAM_IN_SLEEP (8<<ONCE_STAT_PST_SHIFT)
#define ONCE_STAT_PST_DATA_IN_SLEEP (9<<ONCE_STAT_PST_SHIFT)
#define ONCE_STAT_PST_CHGFLOW_IN_SLEEP (10<<ONCE_STAT_PST_SHIFT)
#define ONCE_STAT_PST_CHGFLOW_IN_LOOP_IN_SLEEP (10<<ONCE_STAT_PST_SHIFT)
#define ONCE_STAT_PST_DEBUG_IN_SLEEP (12<<ONCE_STAT_PST_SHIFT)
#define ONCE_STAT_PST_FUNCUNIT_IN_SLEEP (13<<ONCE_STAT_PST_SHIFT)
#define ONCE_STAT_PST_SLEEP_AFTER_RESET (14<<ONCE_STAT_PST_SHIFT)
#define ONCE_STAT_PST_RESTORE (15<<ONCE_STAT_PST_SHIFT)
#define ONCE_STAT_RCV __BIT(11)
#define ONCE_STAT_EDR __BIT(10)
#define ONCE_STAT_ODR __BIT(9)
#define ONCE_STAT_SWB __BIT(8)
#define ONCE_STAT_MST __BIT(7)
#define ONCE_STAT_ECDR 0X07
#define SDMA_ONCE_CMD 0x0050
#define ONCE_RSTATUS 0
#define ONCE_DMOV 1
#define ONCE_EXEC_ONCE 2
#define ONCE_RUN 3
#define ONCE_EXEC_CORE 4
#define ONCE_DEBUG_RQST 5
#define ONCE_RBUFFER 6
#define SDMA_EVT_MIRROR 0x0054
#define SDMA_ILLINSTADDR 0x0058
#define SDMA_CHN0ADDR 0x005c
#define SDMA_XTRIG_CONF1 0x0070
#define SDMA_XTRIG_CONF2 0x0074
#if defined(IMX31)
#define SDMA_CHNENBL(n) (0x80+(n)*4)
#elif defined(IMX51)
#define SDMA_OTB 0x0078
#define SDMA_PRF_CNT(n) (0x07c+(n)*4)
#define SDMA_CHNENBL(n) (0x200+(n)*4)
#endif
#define SDMA_CHNPRI(n) (0x100+(n)*4)
#define SDMACORE_ROM_BASE 0x0000
#define SDMACORE_ROM_SIZE 0x0400
#define SDMACORE_RAM_BASE 0x0800
#define SDMACORE_RAM_SIZE 0x0800
#define SDMACORE_CONTEXT_BASE 0x0800
#define SDMACORE_CONTEXT_SIZE 32
#define SDMACORE_CONTEXT_ADDR(ch) (SDMACORE_CONTEXT_BASE+ \
(SDMACORE_CONTEXT_SIZE * (ch)))
#define SDMACORE_CONTEXT_END SDMACORE_CONTEXT_ADDR(SDMA_N_CHANNELS)
#endif