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