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 #include "uart.h"
22 #include "mxc_device.h"
23 #include "mxc_pins.h"
24 #include "mxc_assert.h"
25 #include "uart_revb.h"
26 #include "uart_common.h"
27 #include "mcr_regs.h"
28 #include "dma.h"
29 
MXC_UART_DMACallback(int ch,int error)30 void MXC_UART_DMACallback(int ch, int error)
31 {
32     MXC_UART_RevB_DMACallback(ch, error);
33 }
34 
MXC_UART_AsyncCallback(mxc_uart_regs_t * uart,int retVal)35 int MXC_UART_AsyncCallback(mxc_uart_regs_t *uart, int retVal)
36 {
37     return MXC_UART_RevB_AsyncCallback((mxc_uart_revb_regs_t *)uart, retVal);
38 }
39 
MXC_UART_AsyncStop(mxc_uart_regs_t * uart)40 int MXC_UART_AsyncStop(mxc_uart_regs_t *uart)
41 {
42     return MXC_UART_RevB_AsyncStop((mxc_uart_revb_regs_t *)uart);
43 }
44 
MXC_UART_Init(mxc_uart_regs_t * uart,unsigned int baud,mxc_uart_clock_t clock)45 int MXC_UART_Init(mxc_uart_regs_t *uart, unsigned int baud, mxc_uart_clock_t clock)
46 {
47 #ifndef MSDK_NO_GPIO_CLK_INIT
48     int retval;
49 
50     retval = MXC_UART_Shutdown(uart);
51 
52     if (retval) {
53         return retval;
54     }
55 
56     switch (clock) {
57     case MXC_UART_EXT_CLK:
58         if (uart == MXC_UART3) {
59             MXC_GPIO_Config(&gpio_cfg_lpextclk);
60         } else {
61             MXC_GPIO_Config(&gpio_cfg_hfextclk);
62         }
63         break;
64 
65     case MXC_UART_ERTCO_CLK:
66         MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_ERTCO);
67         break;
68 
69     case MXC_UART_IBRO_CLK:
70         MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_IBRO);
71         break;
72 
73     case MXC_UART_ERFO_CLK:
74         MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_ERFO);
75         break;
76 
77     case MXC_UART_INRO_CLK:
78         MXC_SYS_ClockSourceEnable(MXC_SYS_CLOCK_INRO);
79         break;
80 
81     default:
82         break;
83     }
84 
85     switch (MXC_UART_GET_IDX(uart)) {
86     case 0:
87         MXC_GPIO_Config(&gpio_cfg_uart0);
88         MXC_SYS_ClockEnable(MXC_SYS_PERIPH_CLOCK_UART0);
89         break;
90 
91     case 1:
92         MXC_GPIO_Config(&gpio_cfg_uart1);
93         MXC_SYS_ClockEnable(MXC_SYS_PERIPH_CLOCK_UART1);
94         break;
95 
96     case 2:
97         MXC_GPIO_Config(&gpio_cfg_uart2);
98         MXC_SYS_ClockEnable(MXC_SYS_PERIPH_CLOCK_UART2);
99         break;
100 
101     case 3:
102         MXC_GPIO_Config(&gpio_cfg_uart3);
103         MXC_SYS_ClockEnable(MXC_SYS_PERIPH_CLOCK_UART3);
104         MXC_MCR->lppioctrl |= MXC_F_MCR_LPPIOCTRL_LPUART0_RX | MXC_F_MCR_LPPIOCTRL_LPUART0_TX |
105                               MXC_F_MCR_LPPIOCTRL_LPUART0_RTS | MXC_F_MCR_LPPIOCTRL_LPUART0_CTS;
106         break;
107 
108     default:
109         return E_NOT_SUPPORTED;
110     }
111 #endif // MSDK_NO_GPIO_CLK_INIT
112 
113     return MXC_UART_RevB_Init((mxc_uart_revb_regs_t *)uart, baud, clock);
114 }
115 
MXC_UART_Shutdown(mxc_uart_regs_t * uart)116 int MXC_UART_Shutdown(mxc_uart_regs_t *uart)
117 {
118     switch (MXC_UART_GET_IDX(uart)) {
119     case 0:
120         MXC_SYS_Reset_Periph(MXC_SYS_RESET0_UART0);
121         MXC_SYS_ClockDisable(MXC_SYS_PERIPH_CLOCK_UART0);
122         break;
123 
124     case 1:
125         MXC_SYS_Reset_Periph(MXC_SYS_RESET0_UART1);
126         MXC_SYS_ClockDisable(MXC_SYS_PERIPH_CLOCK_UART1);
127         break;
128 
129     case 2:
130         MXC_SYS_Reset_Periph(MXC_SYS_RESET0_UART2);
131         MXC_SYS_ClockDisable(MXC_SYS_PERIPH_CLOCK_UART2);
132         break;
133 
134     case 3:
135         MXC_SYS_Reset_Periph(MXC_SYS_RESET_UART3);
136         MXC_SYS_ClockDisable(MXC_SYS_PERIPH_CLOCK_UART3);
137         MXC_MCR->lppioctrl &= ~(MXC_F_MCR_LPPIOCTRL_LPUART0_RX | MXC_F_MCR_LPPIOCTRL_LPUART0_TX |
138                                 MXC_F_MCR_LPPIOCTRL_LPUART0_RTS | MXC_F_MCR_LPPIOCTRL_LPUART0_CTS);
139         break;
140 
141     default:
142         return E_NOT_SUPPORTED;
143     }
144 
145     return E_NO_ERROR;
146 }
147 
MXC_UART_ReadyForSleep(mxc_uart_regs_t * uart)148 int MXC_UART_ReadyForSleep(mxc_uart_regs_t *uart)
149 {
150     return MXC_UART_RevB_ReadyForSleep((mxc_uart_revb_regs_t *)uart);
151 }
152 
MXC_UART_SetFrequency(mxc_uart_regs_t * uart,unsigned int baud,mxc_uart_clock_t clock)153 int MXC_UART_SetFrequency(mxc_uart_regs_t *uart, unsigned int baud, mxc_uart_clock_t clock)
154 {
155     int freq;
156     int mod = 0;
157     int clkdiv = 0;
158     int div = 8;
159 
160     if (MXC_UART_GET_IDX(uart) < 0) {
161         return E_BAD_PARAM;
162     }
163 
164     // check if the uart is LPUART
165     if (uart == MXC_UART3) {
166         // OSR default value
167         uart->osr = 5;
168 
169         switch (clock) {
170         case MXC_UART_APB_CLK:
171             uart->ctrl |= MXC_S_UART_CTRL_BCLKSRC_PERIPHERAL_CLOCK;
172             div = (1 << (MXC_GCR->pclkdiv & MXC_F_GCR_PCLKDIV_AON_CLKDIV)) * 8;
173             clkdiv = ((SystemCoreClock / div) / baud);
174             mod = ((SystemCoreClock / div) % baud);
175             break;
176 
177         case MXC_UART_EXT_CLK:
178             uart->ctrl |= MXC_S_UART_CTRL_BCLKSRC_EXTERNAL_CLOCK;
179             clkdiv = EXTCLK_FREQ / baud;
180             mod = EXTCLK_FREQ % baud;
181             break;
182 
183         case MXC_UART_ERTCO_CLK:
184             uart->ctrl |= MXC_S_UART_CTRL_BCLKSRC_CLK2;
185             uart->ctrl |= MXC_F_UART_CTRL_FDM;
186             clkdiv = ((ERTCO_FREQ * 2) / baud);
187             mod = ((ERTCO_FREQ * 2) % baud);
188 
189             if (baud > 2400) {
190                 uart->osr = 0;
191             } else {
192                 uart->osr = 1;
193             }
194             break;
195 
196         case MXC_UART_INRO_CLK:
197             uart->ctrl |= MXC_S_UART_CTRL_BCLKSRC_CLK3;
198             uart->ctrl |= MXC_F_UART_CTRL_FDM;
199             clkdiv = ((INRO_FREQ * 2) / baud);
200             mod = ((INRO_FREQ * 2) % baud);
201 
202             if (baud > 2400) {
203                 uart->osr = 0;
204             } else {
205                 uart->osr = 1;
206             }
207             break;
208 
209         default:
210             return E_BAD_PARAM;
211         }
212 
213         if (!clkdiv || mod > (baud / 2)) {
214             clkdiv++;
215         }
216         uart->clkdiv = clkdiv;
217 
218         freq = MXC_UART_GetFrequency(uart);
219     } else {
220         freq = MXC_UART_RevB_SetFrequency((mxc_uart_revb_regs_t *)uart, baud, clock);
221     }
222 
223     if (freq > 0) {
224         // Enable baud clock and wait for it to become ready.
225         uart->ctrl |= MXC_F_UART_CTRL_BCLKEN;
226         while (((uart->ctrl & MXC_F_UART_CTRL_BCLKRDY) >> MXC_F_UART_CTRL_BCLKRDY_POS) == 0) {}
227     }
228 
229     return freq;
230 }
231 
MXC_UART_GetFrequency(mxc_uart_regs_t * uart)232 int MXC_UART_GetFrequency(mxc_uart_regs_t *uart)
233 {
234     int periphClock = 0;
235     int div = 8;
236 
237     if (MXC_UART_GET_IDX(uart) < 0) {
238         return E_BAD_PARAM;
239     }
240 
241     // check if UARt is LP UART
242     if (uart == MXC_UART3) {
243         if ((uart->ctrl & MXC_F_UART_CTRL_BCLKSRC) == MXC_S_UART_CTRL_BCLKSRC_EXTERNAL_CLOCK) {
244             return EXTCLK_FREQ;
245         } else if ((uart->ctrl & MXC_F_UART_CTRL_BCLKSRC) ==
246                    MXC_S_UART_CTRL_BCLKSRC_PERIPHERAL_CLOCK) {
247             div = (1 << (MXC_GCR->pclkdiv & MXC_F_GCR_PCLKDIV_AON_CLKDIV)) * 8;
248             periphClock = SystemCoreClock / div;
249         } else if ((uart->ctrl & MXC_F_UART_CTRL_BCLKSRC) == MXC_S_UART_CTRL_BCLKSRC_CLK2) {
250             periphClock = ERTCO_FREQ * 2;
251         } else if ((uart->ctrl & MXC_F_UART_CTRL_BCLKSRC) == MXC_S_UART_CTRL_BCLKSRC_CLK3) {
252             periphClock = INRO_FREQ * 2;
253         } else {
254             return E_BAD_PARAM;
255         }
256         return (periphClock / uart->clkdiv);
257     } else {
258         return MXC_UART_RevB_GetFrequency((mxc_uart_revb_regs_t *)uart);
259     }
260 }
261 
MXC_UART_SetDataSize(mxc_uart_regs_t * uart,int dataSize)262 int MXC_UART_SetDataSize(mxc_uart_regs_t *uart, int dataSize)
263 {
264     return MXC_UART_RevB_SetDataSize((mxc_uart_revb_regs_t *)uart, dataSize);
265 }
266 
MXC_UART_SetStopBits(mxc_uart_regs_t * uart,mxc_uart_stop_t stopBits)267 int MXC_UART_SetStopBits(mxc_uart_regs_t *uart, mxc_uart_stop_t stopBits)
268 {
269     return MXC_UART_RevB_SetStopBits((mxc_uart_revb_regs_t *)uart, stopBits);
270 }
271 
MXC_UART_SetParity(mxc_uart_regs_t * uart,mxc_uart_parity_t parity)272 int MXC_UART_SetParity(mxc_uart_regs_t *uart, mxc_uart_parity_t parity)
273 {
274     return MXC_UART_RevB_SetParity((mxc_uart_revb_regs_t *)uart, parity);
275 }
276 
MXC_UART_SetFlowCtrl(mxc_uart_regs_t * uart,mxc_uart_flow_t flowCtrl,int rtsThreshold)277 int MXC_UART_SetFlowCtrl(mxc_uart_regs_t *uart, mxc_uart_flow_t flowCtrl, int rtsThreshold)
278 {
279     if (flowCtrl == MXC_UART_FLOW_EN) {
280         switch (MXC_UART_GET_IDX(uart)) {
281         case 0:
282             MXC_GPIO_Config(&gpio_cfg_uart0_flow);
283             break;
284 
285         case 1:
286             MXC_GPIO_Config(&gpio_cfg_uart1_flow);
287             break;
288 
289         case 2:
290             MXC_GPIO_Config(&gpio_cfg_uart2_flow);
291             break;
292 
293         case 3:
294             MXC_GPIO_Config(&gpio_cfg_uart3_flow);
295             break;
296 
297         default:
298             return E_BAD_PARAM;
299         }
300     } else {
301         switch (MXC_UART_GET_IDX(uart)) {
302         case 0:
303             MXC_GPIO_Config(&gpio_cfg_uart0_flow_disable);
304             break;
305 
306         case 1:
307             MXC_GPIO_Config(&gpio_cfg_uart1_flow_disable);
308             break;
309 
310         case 2:
311             MXC_GPIO_Config(&gpio_cfg_uart2_flow_disable);
312             break;
313 
314         case 3:
315             MXC_GPIO_Config(&gpio_cfg_uart3_flow_disable);
316             break;
317 
318         default:
319             return E_BAD_PARAM;
320         }
321     }
322 
323     return MXC_UART_RevB_SetFlowCtrl((mxc_uart_revb_regs_t *)uart, flowCtrl, rtsThreshold);
324 }
325 
MXC_UART_SetClockSource(mxc_uart_regs_t * uart,mxc_uart_clock_t clock)326 int MXC_UART_SetClockSource(mxc_uart_regs_t *uart, mxc_uart_clock_t clock)
327 {
328     return MXC_UART_RevB_SetClockSource((mxc_uart_revb_regs_t *)uart, clock);
329 }
330 
MXC_UART_GetActive(mxc_uart_regs_t * uart)331 int MXC_UART_GetActive(mxc_uart_regs_t *uart)
332 {
333     return MXC_UART_RevB_GetActive((mxc_uart_revb_regs_t *)uart);
334 }
335 
MXC_UART_AbortTransmission(mxc_uart_regs_t * uart)336 int MXC_UART_AbortTransmission(mxc_uart_regs_t *uart)
337 {
338     return MXC_UART_RevB_AbortTransmission((mxc_uart_revb_regs_t *)uart);
339 }
340 
MXC_UART_ReadCharacterRaw(mxc_uart_regs_t * uart)341 int MXC_UART_ReadCharacterRaw(mxc_uart_regs_t *uart)
342 {
343     return MXC_UART_RevB_ReadCharacterRaw((mxc_uart_revb_regs_t *)uart);
344 }
345 
MXC_UART_WriteCharacterRaw(mxc_uart_regs_t * uart,uint8_t character)346 int MXC_UART_WriteCharacterRaw(mxc_uart_regs_t *uart, uint8_t character)
347 {
348     return MXC_UART_RevB_WriteCharacterRaw((mxc_uart_revb_regs_t *)uart, character);
349 }
350 
MXC_UART_ReadCharacter(mxc_uart_regs_t * uart)351 int MXC_UART_ReadCharacter(mxc_uart_regs_t *uart)
352 {
353     return MXC_UART_Common_ReadCharacter(uart);
354 }
355 
MXC_UART_WriteCharacter(mxc_uart_regs_t * uart,uint8_t character)356 int MXC_UART_WriteCharacter(mxc_uart_regs_t *uart, uint8_t character)
357 {
358     return MXC_UART_Common_WriteCharacter(uart, character);
359 }
360 
MXC_UART_Read(mxc_uart_regs_t * uart,uint8_t * buffer,int * len)361 int MXC_UART_Read(mxc_uart_regs_t *uart, uint8_t *buffer, int *len)
362 {
363     return MXC_UART_RevB_Read((mxc_uart_revb_regs_t *)uart, buffer, len);
364 }
365 
MXC_UART_Write(mxc_uart_regs_t * uart,const uint8_t * byte,int * len)366 int MXC_UART_Write(mxc_uart_regs_t *uart, const uint8_t *byte, int *len)
367 {
368     return MXC_UART_RevB_Write((mxc_uart_revb_regs_t *)uart, byte, len);
369 }
370 
MXC_UART_ReadRXFIFO(mxc_uart_regs_t * uart,unsigned char * bytes,unsigned int len)371 unsigned int MXC_UART_ReadRXFIFO(mxc_uart_regs_t *uart, unsigned char *bytes, unsigned int len)
372 {
373     return MXC_UART_RevB_ReadRXFIFO((mxc_uart_revb_regs_t *)uart, bytes, len);
374 }
375 
MXC_UART_ReadRXFIFODMA(mxc_uart_regs_t * uart,unsigned char * bytes,unsigned int len,mxc_uart_dma_complete_cb_t callback)376 int MXC_UART_ReadRXFIFODMA(mxc_uart_regs_t *uart, unsigned char *bytes, unsigned int len,
377                            mxc_uart_dma_complete_cb_t callback)
378 {
379     mxc_dma_config_t config;
380 
381     int uart_num = MXC_UART_GET_IDX(uart);
382 
383     switch (uart_num) {
384     case 0:
385         config.reqsel = MXC_DMA_REQUEST_UART0RX;
386         break;
387 
388     case 1:
389         config.reqsel = MXC_DMA_REQUEST_UART1RX;
390         break;
391 
392     case 2:
393         config.reqsel = MXC_DMA_REQUEST_UART2RX;
394         break;
395 
396     default:
397         return E_BAD_PARAM;
398         break;
399     }
400 
401     return MXC_UART_RevB_ReadRXFIFODMA((mxc_uart_revb_regs_t *)uart, bytes, len, callback, config);
402 }
403 
MXC_UART_GetRXFIFOAvailable(mxc_uart_regs_t * uart)404 unsigned int MXC_UART_GetRXFIFOAvailable(mxc_uart_regs_t *uart)
405 {
406     return MXC_UART_RevB_GetRXFIFOAvailable((mxc_uart_revb_regs_t *)uart);
407 }
408 
MXC_UART_WriteTXFIFO(mxc_uart_regs_t * uart,const unsigned char * bytes,unsigned int len)409 unsigned int MXC_UART_WriteTXFIFO(mxc_uart_regs_t *uart, const unsigned char *bytes,
410                                   unsigned int len)
411 {
412     return MXC_UART_RevB_WriteTXFIFO((mxc_uart_revb_regs_t *)uart, bytes, len);
413 }
414 
MXC_UART_WriteTXFIFODMA(mxc_uart_regs_t * uart,const unsigned char * bytes,unsigned int len,mxc_uart_dma_complete_cb_t callback)415 int MXC_UART_WriteTXFIFODMA(mxc_uart_regs_t *uart, const unsigned char *bytes, unsigned int len,
416                             mxc_uart_dma_complete_cb_t callback)
417 {
418     mxc_dma_config_t config;
419 
420     int uart_num = MXC_UART_GET_IDX(uart);
421 
422     switch (uart_num) {
423     case 0:
424         config.reqsel = MXC_DMA_REQUEST_UART0TX;
425         break;
426 
427     case 1:
428         config.reqsel = MXC_DMA_REQUEST_UART1TX;
429         break;
430 
431     case 2:
432         config.reqsel = MXC_DMA_REQUEST_UART2TX;
433         break;
434 
435     default:
436         return E_BAD_PARAM;
437         break;
438     }
439 
440     return MXC_UART_RevB_WriteTXFIFODMA((mxc_uart_revb_regs_t *)uart, bytes, len, callback, config);
441 }
442 
MXC_UART_GetTXFIFOAvailable(mxc_uart_regs_t * uart)443 unsigned int MXC_UART_GetTXFIFOAvailable(mxc_uart_regs_t *uart)
444 {
445     return MXC_UART_RevB_GetTXFIFOAvailable((mxc_uart_revb_regs_t *)uart);
446 }
447 
MXC_UART_ClearRXFIFO(mxc_uart_regs_t * uart)448 int MXC_UART_ClearRXFIFO(mxc_uart_regs_t *uart)
449 {
450     return MXC_UART_RevB_ClearRXFIFO((mxc_uart_revb_regs_t *)uart);
451 }
452 
MXC_UART_ClearTXFIFO(mxc_uart_regs_t * uart)453 int MXC_UART_ClearTXFIFO(mxc_uart_regs_t *uart)
454 {
455     return MXC_UART_RevB_ClearTXFIFO((mxc_uart_revb_regs_t *)uart);
456 }
457 
MXC_UART_SetRXThreshold(mxc_uart_regs_t * uart,unsigned int numBytes)458 int MXC_UART_SetRXThreshold(mxc_uart_regs_t *uart, unsigned int numBytes)
459 {
460     return MXC_UART_RevB_SetRXThreshold((mxc_uart_revb_regs_t *)uart, numBytes);
461 }
462 
MXC_UART_GetRXThreshold(mxc_uart_regs_t * uart)463 unsigned int MXC_UART_GetRXThreshold(mxc_uart_regs_t *uart)
464 {
465     return MXC_UART_RevB_GetRXThreshold((mxc_uart_revb_regs_t *)uart);
466 }
467 
MXC_UART_SetTXThreshold(mxc_uart_regs_t * uart,unsigned int numBytes)468 int MXC_UART_SetTXThreshold(mxc_uart_regs_t *uart, unsigned int numBytes)
469 {
470     // TX threshold is fixed at half the length of FIFO
471     return E_NOT_SUPPORTED;
472 }
473 
MXC_UART_GetTXThreshold(mxc_uart_regs_t * uart)474 unsigned int MXC_UART_GetTXThreshold(mxc_uart_regs_t *uart)
475 {
476     // TX threshold is fixed at half the length of FIFO
477     return E_NOT_SUPPORTED;
478 }
479 
MXC_UART_GetFlags(mxc_uart_regs_t * uart)480 unsigned int MXC_UART_GetFlags(mxc_uart_regs_t *uart)
481 {
482     return MXC_UART_RevB_GetFlags((mxc_uart_revb_regs_t *)uart);
483 }
484 
MXC_UART_ClearFlags(mxc_uart_regs_t * uart,unsigned int flags)485 int MXC_UART_ClearFlags(mxc_uart_regs_t *uart, unsigned int flags)
486 {
487     return MXC_UART_RevB_ClearFlags((mxc_uart_revb_regs_t *)uart, flags);
488 }
489 
MXC_UART_EnableInt(mxc_uart_regs_t * uart,unsigned int mask)490 int MXC_UART_EnableInt(mxc_uart_regs_t *uart, unsigned int mask)
491 {
492     return MXC_UART_RevB_EnableInt((mxc_uart_revb_regs_t *)uart, mask);
493 }
494 
MXC_UART_DisableInt(mxc_uart_regs_t * uart,unsigned int mask)495 int MXC_UART_DisableInt(mxc_uart_regs_t *uart, unsigned int mask)
496 {
497     return MXC_UART_RevB_DisableInt((mxc_uart_revb_regs_t *)uart, mask);
498 }
499 
MXC_UART_GetStatus(mxc_uart_regs_t * uart)500 unsigned int MXC_UART_GetStatus(mxc_uart_regs_t *uart)
501 {
502     return MXC_UART_RevB_GetStatus((mxc_uart_revb_regs_t *)uart);
503 }
504 
MXC_UART_Transaction(mxc_uart_req_t * req)505 int MXC_UART_Transaction(mxc_uart_req_t *req)
506 {
507     return MXC_UART_RevB_Transaction((mxc_uart_revb_req_t *)req);
508 }
509 
MXC_UART_TransactionAsync(mxc_uart_req_t * req)510 int MXC_UART_TransactionAsync(mxc_uart_req_t *req)
511 {
512     return MXC_UART_RevB_TransactionAsync((mxc_uart_revb_req_t *)req);
513 }
514 
MXC_UART_TransactionDMA(mxc_uart_req_t * req)515 int MXC_UART_TransactionDMA(mxc_uart_req_t *req)
516 {
517     return MXC_UART_RevB_TransactionDMA((mxc_uart_revb_req_t *)req);
518 }
519 
MXC_UART_AbortAsync(mxc_uart_regs_t * uart)520 int MXC_UART_AbortAsync(mxc_uart_regs_t *uart)
521 {
522     return MXC_UART_RevB_AbortAsync((mxc_uart_revb_regs_t *)uart);
523 }
524 
MXC_UART_AsyncHandler(mxc_uart_regs_t * uart)525 int MXC_UART_AsyncHandler(mxc_uart_regs_t *uart)
526 {
527     return MXC_UART_RevB_AsyncHandler((mxc_uart_revb_regs_t *)uart);
528 }
529 
MXC_UART_GetAsyncTXCount(mxc_uart_req_t * req)530 uint32_t MXC_UART_GetAsyncTXCount(mxc_uart_req_t *req)
531 {
532     return req->txCnt;
533 }
534 
MXC_UART_GetAsyncRXCount(mxc_uart_req_t * req)535 uint32_t MXC_UART_GetAsyncRXCount(mxc_uart_req_t *req)
536 {
537     return req->rxCnt;
538 }
539 
MXC_UART_SetAutoDMAHandlers(mxc_uart_regs_t * uart,bool enable)540 int MXC_UART_SetAutoDMAHandlers(mxc_uart_regs_t *uart, bool enable)
541 {
542     return MXC_UART_RevB_SetAutoDMAHandlers((mxc_uart_revb_regs_t *)uart, enable);
543 }
544 
MXC_UART_SetTXDMAChannel(mxc_uart_regs_t * uart,unsigned int channel)545 int MXC_UART_SetTXDMAChannel(mxc_uart_regs_t *uart, unsigned int channel)
546 {
547     return MXC_UART_RevB_SetTXDMAChannel((mxc_uart_revb_regs_t *)uart, channel);
548 }
549 
MXC_UART_GetTXDMAChannel(mxc_uart_regs_t * uart)550 int MXC_UART_GetTXDMAChannel(mxc_uart_regs_t *uart)
551 {
552     return MXC_UART_RevB_GetTXDMAChannel((mxc_uart_revb_regs_t *)uart);
553 }
554 
MXC_UART_SetRXDMAChannel(mxc_uart_regs_t * uart,unsigned int channel)555 int MXC_UART_SetRXDMAChannel(mxc_uart_regs_t *uart, unsigned int channel)
556 {
557     return MXC_UART_RevB_SetRXDMAChannel((mxc_uart_revb_regs_t *)uart, channel);
558 }
559 
MXC_UART_GetRXDMAChannel(mxc_uart_regs_t * uart)560 int MXC_UART_GetRXDMAChannel(mxc_uart_regs_t *uart)
561 {
562     return MXC_UART_RevB_GetTXDMAChannel((mxc_uart_revb_regs_t *)uart);
563 }
564