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 "mxc_device.h"
25 #include "mxc_assert.h"
26 #include "mxc_lock.h"
27 #include "mxc_sys.h"
28 #include "dma.h"
29 #include "dma_reva.h"
30
31 /***** Definitions *****/
32
33 /******* Globals *******/
34
35 /****** Functions ******/
36
MXC_DMA_Init(void)37 int MXC_DMA_Init(void)
38 {
39 #ifndef MSDK_NO_GPIO_CLK_INIT
40 if (!MXC_SYS_IsClockEnabled(MXC_SYS_PERIPH_CLOCK_DMA)) {
41 MXC_SYS_ClockEnable(MXC_SYS_PERIPH_CLOCK_DMA);
42 MXC_SYS_Reset_Periph(MXC_SYS_RESET0_DMA);
43 }
44 #endif
45
46 return MXC_DMA_RevA_Init((mxc_dma_reva_regs_t *)MXC_DMA);
47 }
48
MXC_DMA_DeInit(void)49 void MXC_DMA_DeInit(void)
50 {
51 return MXC_DMA_RevA_DeInit((mxc_dma_reva_regs_t *)MXC_DMA);
52 }
53
MXC_DMA_AcquireChannel(void)54 int MXC_DMA_AcquireChannel(void)
55 {
56 return MXC_DMA_RevA_AcquireChannel((mxc_dma_reva_regs_t *)MXC_DMA);
57 }
58
MXC_DMA_ReleaseChannel(int ch)59 int MXC_DMA_ReleaseChannel(int ch)
60 {
61 return MXC_DMA_RevA_ReleaseChannel(ch);
62 }
63
MXC_DMA_ConfigChannel(mxc_dma_config_t config,mxc_dma_srcdst_t srcdst)64 int MXC_DMA_ConfigChannel(mxc_dma_config_t config, mxc_dma_srcdst_t srcdst)
65 {
66 return MXC_DMA_RevA_ConfigChannel(config, srcdst);
67 }
68
MXC_DMA_AdvConfigChannel(mxc_dma_adv_config_t advConfig)69 int MXC_DMA_AdvConfigChannel(mxc_dma_adv_config_t advConfig)
70 {
71 return MXC_DMA_RevA_AdvConfigChannel(advConfig);
72 }
73
MXC_DMA_SetSrcDst(mxc_dma_srcdst_t srcdst)74 int MXC_DMA_SetSrcDst(mxc_dma_srcdst_t srcdst)
75 {
76 return MXC_DMA_RevA_SetSrcDst(srcdst);
77 }
78
MXC_DMA_GetSrcDst(mxc_dma_srcdst_t * srcdst)79 int MXC_DMA_GetSrcDst(mxc_dma_srcdst_t *srcdst)
80 {
81 return MXC_DMA_RevA_GetSrcDst(srcdst);
82 }
83
MXC_DMA_SetSrcReload(mxc_dma_srcdst_t srcdst)84 int MXC_DMA_SetSrcReload(mxc_dma_srcdst_t srcdst)
85 {
86 return MXC_DMA_RevA_SetSrcReload(srcdst);
87 }
88
MXC_DMA_GetSrcReload(mxc_dma_srcdst_t * srcdst)89 int MXC_DMA_GetSrcReload(mxc_dma_srcdst_t *srcdst)
90 {
91 return MXC_DMA_RevA_GetSrcReload(srcdst);
92 }
93
MXC_DMA_SetCallback(int ch,void (* callback)(int,int))94 int MXC_DMA_SetCallback(int ch, void (*callback)(int, int))
95 {
96 return MXC_DMA_RevA_SetCallback(ch, callback);
97 }
98
MXC_DMA_SetChannelInterruptEn(int ch,bool chdis,bool ctz)99 int MXC_DMA_SetChannelInterruptEn(int ch, bool chdis, bool ctz)
100 {
101 return MXC_DMA_RevA_SetChannelInterruptEn(ch, chdis, ctz);
102 }
103
MXC_DMA_ChannelEnableInt(int ch,int flags)104 int MXC_DMA_ChannelEnableInt(int ch, int flags)
105 {
106 return MXC_DMA_RevA_ChannelEnableInt(ch, flags);
107 }
108
MXC_DMA_ChannelDisableInt(int ch,int flags)109 int MXC_DMA_ChannelDisableInt(int ch, int flags)
110 {
111 return MXC_DMA_RevA_ChannelDisableInt(ch, flags);
112 }
113
MXC_DMA_ChannelGetFlags(int ch)114 int MXC_DMA_ChannelGetFlags(int ch)
115 {
116 return MXC_DMA_RevA_ChannelGetFlags(ch);
117 }
118
MXC_DMA_ChannelClearFlags(int ch,int flags)119 int MXC_DMA_ChannelClearFlags(int ch, int flags)
120 {
121 return MXC_DMA_RevA_ChannelClearFlags(ch, flags);
122 }
123
MXC_DMA_EnableInt(int ch)124 int MXC_DMA_EnableInt(int ch)
125 {
126 return MXC_DMA_RevA_EnableInt((mxc_dma_reva_regs_t *)MXC_DMA, ch);
127 }
128
MXC_DMA_DisableInt(int ch)129 int MXC_DMA_DisableInt(int ch)
130 {
131 return MXC_DMA_RevA_DisableInt((mxc_dma_reva_regs_t *)MXC_DMA, ch);
132 }
133
MXC_DMA_Start(int ch)134 int MXC_DMA_Start(int ch)
135 {
136 return MXC_DMA_RevA_Start(ch);
137 }
138
MXC_DMA_Stop(int ch)139 int MXC_DMA_Stop(int ch)
140 {
141 return MXC_DMA_RevA_Stop(ch);
142 }
143
MXC_DMA_GetCHRegs(int ch)144 mxc_dma_ch_regs_t *MXC_DMA_GetCHRegs(int ch)
145 {
146 return MXC_DMA_RevA_GetCHRegs(ch);
147 }
148
MXC_DMA_Handler(void)149 void MXC_DMA_Handler(void)
150 {
151 MXC_DMA_RevA_Handler((mxc_dma_reva_regs_t *)MXC_DMA);
152 }
153
MXC_DMA_MemCpy(void * dest,void * src,int len,mxc_dma_complete_cb_t callback)154 int MXC_DMA_MemCpy(void *dest, void *src, int len, mxc_dma_complete_cb_t callback)
155 {
156 return MXC_DMA_RevA_MemCpy((mxc_dma_reva_regs_t *)MXC_DMA, dest, src, len, callback);
157 }
158
MXC_DMA_DoTransfer(mxc_dma_config_t config,mxc_dma_srcdst_t firstSrcDst,mxc_dma_trans_chain_t callback)159 int MXC_DMA_DoTransfer(mxc_dma_config_t config, mxc_dma_srcdst_t firstSrcDst,
160 mxc_dma_trans_chain_t callback)
161 {
162 return MXC_DMA_RevA_DoTransfer((mxc_dma_reva_regs_t *)MXC_DMA, config, firstSrcDst, callback);
163 }
164