1 /******************************************************************************
2  *
3  * Copyright (C) 2022-2023 Maxim Integrated Products, Inc. (now owned by
4  * Analog Devices, Inc.),
5  * Copyright (C) 2023-2024 Analog Devices, Inc.
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *     http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  ******************************************************************************/
20 
21 /****** Includes *******/
22 #include <stddef.h>
23 #include <stdint.h>
24 #include <stdbool.h>
25 #include "mxc_device.h"
26 #include "mxc_assert.h"
27 #include "mxc_lock.h"
28 #include "mxc_sys.h"
29 #include "dma.h"
30 #include "dma_reva.h"
31 #include "dma_regs.h"
32 
33 /***** Definitions *****/
34 
35 /******* Globals *******/
36 
37 /****** Functions ******/
38 
MXC_DMA_Init(void)39 int MXC_DMA_Init(void)
40 {
41 #ifndef MSDK_NO_GPIO_CLK_INIT
42     if (!MXC_SYS_IsClockEnabled(MXC_SYS_PERIPH_CLOCK_DMA)) {
43         MXC_SYS_ClockEnable(MXC_SYS_PERIPH_CLOCK_DMA);
44         MXC_SYS_Reset_Periph(MXC_SYS_RESET0_DMA);
45     }
46 #endif
47 
48     return MXC_DMA_RevA_Init((mxc_dma_reva_regs_t *)MXC_DMA);
49 }
50 
MXC_DMA_DeInit(void)51 void MXC_DMA_DeInit(void)
52 {
53     return MXC_DMA_RevA_DeInit((mxc_dma_reva_regs_t *)MXC_DMA);
54 }
55 
MXC_DMA_AcquireChannel(void)56 int MXC_DMA_AcquireChannel(void)
57 {
58     return MXC_DMA_RevA_AcquireChannel((mxc_dma_reva_regs_t *)MXC_DMA);
59 }
60 
MXC_DMA_ReleaseChannel(int ch)61 int MXC_DMA_ReleaseChannel(int ch)
62 {
63     return MXC_DMA_RevA_ReleaseChannel(ch);
64 }
65 
MXC_DMA_ConfigChannel(mxc_dma_config_t config,mxc_dma_srcdst_t srcdst)66 int MXC_DMA_ConfigChannel(mxc_dma_config_t config, mxc_dma_srcdst_t srcdst)
67 {
68     return MXC_DMA_RevA_ConfigChannel(config, srcdst);
69 }
70 
MXC_DMA_AdvConfigChannel(mxc_dma_adv_config_t advConfig)71 int MXC_DMA_AdvConfigChannel(mxc_dma_adv_config_t advConfig)
72 {
73     return MXC_DMA_RevA_AdvConfigChannel(advConfig);
74 }
75 
MXC_DMA_SetSrcDst(mxc_dma_srcdst_t srcdst)76 int MXC_DMA_SetSrcDst(mxc_dma_srcdst_t srcdst)
77 {
78     return MXC_DMA_RevA_SetSrcDst(srcdst);
79 }
80 
MXC_DMA_GetSrcDst(mxc_dma_srcdst_t * srcdst)81 int MXC_DMA_GetSrcDst(mxc_dma_srcdst_t *srcdst)
82 {
83     return MXC_DMA_RevA_GetSrcDst(srcdst);
84 }
85 
MXC_DMA_SetSrcReload(mxc_dma_srcdst_t srcdst)86 int MXC_DMA_SetSrcReload(mxc_dma_srcdst_t srcdst)
87 {
88     return MXC_DMA_RevA_SetSrcReload(srcdst);
89 }
90 
MXC_DMA_GetSrcReload(mxc_dma_srcdst_t * srcdst)91 int MXC_DMA_GetSrcReload(mxc_dma_srcdst_t *srcdst)
92 {
93     return MXC_DMA_RevA_GetSrcReload(srcdst);
94 }
95 
MXC_DMA_SetCallback(int ch,void (* callback)(int,int))96 int MXC_DMA_SetCallback(int ch, void (*callback)(int, int))
97 {
98     return MXC_DMA_RevA_SetCallback(ch, callback);
99 }
100 
MXC_DMA_SetChannelInterruptEn(int ch,bool chdis,bool ctz)101 int MXC_DMA_SetChannelInterruptEn(int ch, bool chdis, bool ctz)
102 {
103     return MXC_DMA_RevA_SetChannelInterruptEn(ch, chdis, ctz);
104 }
105 
MXC_DMA_ChannelEnableInt(int ch,int flags)106 int MXC_DMA_ChannelEnableInt(int ch, int flags)
107 {
108     return MXC_DMA_RevA_ChannelEnableInt(ch, flags);
109 }
110 
MXC_DMA_ChannelDisableInt(int ch,int flags)111 int MXC_DMA_ChannelDisableInt(int ch, int flags)
112 {
113     return MXC_DMA_RevA_ChannelDisableInt(ch, flags);
114 }
115 
MXC_DMA_ChannelGetFlags(int ch)116 int MXC_DMA_ChannelGetFlags(int ch)
117 {
118     return MXC_DMA_RevA_ChannelGetFlags(ch);
119 }
120 
MXC_DMA_ChannelClearFlags(int ch,int flags)121 int MXC_DMA_ChannelClearFlags(int ch, int flags)
122 {
123     return MXC_DMA_RevA_ChannelClearFlags(ch, flags);
124 }
125 
MXC_DMA_EnableInt(int ch)126 int MXC_DMA_EnableInt(int ch)
127 {
128     return MXC_DMA_RevA_EnableInt((mxc_dma_reva_regs_t *)MXC_DMA, ch);
129 }
130 
MXC_DMA_DisableInt(int ch)131 int MXC_DMA_DisableInt(int ch)
132 {
133     return MXC_DMA_RevA_DisableInt((mxc_dma_reva_regs_t *)MXC_DMA, ch);
134 }
135 
MXC_DMA_Start(int ch)136 int MXC_DMA_Start(int ch)
137 {
138     return MXC_DMA_RevA_Start(ch);
139 }
140 
MXC_DMA_Stop(int ch)141 int MXC_DMA_Stop(int ch)
142 {
143     return MXC_DMA_RevA_Stop(ch);
144 }
145 
MXC_DMA_GetCHRegs(int ch)146 mxc_dma_ch_regs_t *MXC_DMA_GetCHRegs(int ch)
147 {
148     return MXC_DMA_RevA_GetCHRegs(ch);
149 }
150 
MXC_DMA_Handler(void)151 void MXC_DMA_Handler(void)
152 {
153     MXC_DMA_RevA_Handler((mxc_dma_reva_regs_t *)MXC_DMA);
154 }
155 
MXC_DMA_MemCpy(void * dest,void * src,int len,mxc_dma_complete_cb_t callback)156 int MXC_DMA_MemCpy(void *dest, void *src, int len, mxc_dma_complete_cb_t callback)
157 {
158     return MXC_DMA_RevA_MemCpy((mxc_dma_reva_regs_t *)MXC_DMA, dest, src, len, callback);
159 }
160 
MXC_DMA_DoTransfer(mxc_dma_config_t config,mxc_dma_srcdst_t firstSrcDst,mxc_dma_trans_chain_t callback)161 int MXC_DMA_DoTransfer(mxc_dma_config_t config, mxc_dma_srcdst_t firstSrcDst,
162                        mxc_dma_trans_chain_t callback)
163 {
164     return MXC_DMA_RevA_DoTransfer((mxc_dma_reva_regs_t *)MXC_DMA, config, firstSrcDst, callback);
165 }
166