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 #ifndef LIBRARIES_PERIPHDRIVERS_SOURCE_UART_UART_REVA_H_
22 #define LIBRARIES_PERIPHDRIVERS_SOURCE_UART_UART_REVA_H_
23 
24 #include "mxc_device.h"
25 #include "mxc_assert.h"
26 #include "dma.h"
27 #include "uart_reva_regs.h"
28 #include "uart_regs.h"
29 
30 typedef struct _mxc_uart_reva_req_t mxc_uart_reva_req_t;
31 
32 struct _mxc_uart_reva_req_t {
33     mxc_uart_reva_regs_t *uart;
34     uint8_t *txData;
35     uint8_t *rxData;
36     uint32_t txLen;
37     uint32_t rxLen;
38     uint32_t txCnt;
39     uint32_t rxCnt;
40     mxc_uart_complete_cb_t callback;
41 };
42 
43 int MXC_UART_RevA_Init(mxc_uart_reva_regs_t *uart, unsigned int baud);
44 int MXC_UART_RevA_Shutdown(mxc_uart_reva_regs_t *uart);
45 int MXC_UART_RevA_ReadyForSleep(mxc_uart_reva_regs_t *uart);
46 int MXC_UART_RevA_SetFrequency(mxc_uart_reva_regs_t *uart, unsigned int baud);
47 int MXC_UART_RevA_GetFrequency(mxc_uart_reva_regs_t *uart);
48 int MXC_UART_RevA_SetDataSize(mxc_uart_reva_regs_t *uart, int dataSize);
49 int MXC_UART_RevA_SetStopBits(mxc_uart_reva_regs_t *uart, mxc_uart_stop_t stopBits);
50 int MXC_UART_RevA_SetParity(mxc_uart_reva_regs_t *uart, mxc_uart_parity_t parity);
51 int MXC_UART_RevA_SetFlowCtrl(mxc_uart_reva_regs_t *uart, mxc_uart_flow_t flowCtrl,
52                               int rtsThreshold);
53 int MXC_UART_RevA_SetClockSource(mxc_uart_reva_regs_t *uart, int usePCLK);
54 int MXC_UART_RevA_SetNullModem(mxc_uart_reva_regs_t *uart, int nullModem);
55 int MXC_UART_RevA_SendBreak(mxc_uart_reva_regs_t *uart);
56 int MXC_UART_RevA_GetActive(mxc_uart_reva_regs_t *uart);
57 int MXC_UART_RevA_AbortTransmission(mxc_uart_reva_regs_t *uart);
58 int MXC_UART_RevA_ReadCharacterRaw(mxc_uart_reva_regs_t *uart);
59 int MXC_UART_RevA_WriteCharacterRaw(mxc_uart_reva_regs_t *uart, uint8_t character);
60 int MXC_UART_RevA_Read(mxc_uart_reva_regs_t *uart, uint8_t *buffer, int *len);
61 int MXC_UART_RevA_Write(mxc_uart_reva_regs_t *uart, uint8_t *byte, int *len);
62 unsigned int MXC_UART_RevA_ReadRXFIFO(mxc_uart_reva_regs_t *uart, unsigned char *bytes,
63                                       unsigned int len);
64 int MXC_UART_RevA_ReadRXFIFODMA(mxc_uart_reva_regs_t *uart, mxc_dma_regs_t *dma,
65                                 unsigned char *bytes, unsigned int len,
66                                 mxc_uart_dma_complete_cb_t callback, mxc_dma_config_t config);
67 unsigned int MXC_UART_RevA_GetRXFIFOAvailable(mxc_uart_reva_regs_t *uart);
68 unsigned int MXC_UART_RevA_WriteTXFIFO(mxc_uart_reva_regs_t *uart, unsigned char *bytes,
69                                        unsigned int len);
70 unsigned int MXC_UART_RevA_WriteTXFIFODMA(mxc_uart_reva_regs_t *uart, mxc_dma_regs_t *dma,
71                                           unsigned char *bytes, unsigned int len,
72                                           mxc_uart_dma_complete_cb_t callback,
73                                           mxc_dma_config_t config);
74 unsigned int MXC_UART_RevA_GetTXFIFOAvailable(mxc_uart_reva_regs_t *uart);
75 int MXC_UART_RevA_ClearRXFIFO(mxc_uart_reva_regs_t *uart);
76 int MXC_UART_RevA_ClearTXFIFO(mxc_uart_reva_regs_t *uart);
77 int MXC_UART_RevA_SetRXThreshold(mxc_uart_reva_regs_t *uart, unsigned int numBytes);
78 unsigned int MXC_UART_RevA_GetRXThreshold(mxc_uart_reva_regs_t *uart);
79 int MXC_UART_RevA_SetTXThreshold(mxc_uart_reva_regs_t *uart, unsigned int numBytes);
80 unsigned int MXC_UART_RevA_GetTXThreshold(mxc_uart_reva_regs_t *uart);
81 unsigned int MXC_UART_RevA_GetFlags(mxc_uart_reva_regs_t *uart);
82 int MXC_UART_RevA_ClearFlags(mxc_uart_reva_regs_t *uart, unsigned int flags);
83 int MXC_UART_RevA_EnableInt(mxc_uart_reva_regs_t *uart, unsigned int mask);
84 int MXC_UART_RevA_DisableInt(mxc_uart_reva_regs_t *uart, unsigned int mask);
85 unsigned int MXC_UART_RevA_GetStatus(mxc_uart_reva_regs_t *uart);
86 int MXC_UART_RevA_Busy(mxc_uart_reva_regs_t *uart);
87 int MXC_UART_RevA_Transaction(mxc_uart_reva_req_t *req);
88 int MXC_UART_RevA_TransactionAsync(mxc_uart_reva_req_t *req);
89 int MXC_UART_RevA_TransactionDMA(mxc_uart_reva_req_t *req, mxc_dma_regs_t *dma);
90 int MXC_UART_RevA_TxAbortAsync(mxc_uart_reva_regs_t *uart);
91 int MXC_UART_RevA_RxAbortAsync(mxc_uart_reva_regs_t *uart);
92 int MXC_UART_RevA_AbortAsync(mxc_uart_reva_regs_t *uart);
93 int MXC_UART_RevA_AsyncHandler(mxc_uart_reva_regs_t *uart);
94 int MXC_UART_RevA_TxAsyncStop(mxc_uart_reva_regs_t *uart);
95 int MXC_UART_RevA_RxAsyncStop(mxc_uart_reva_regs_t *uart);
96 int MXC_UART_RevA_AsyncStop(mxc_uart_reva_regs_t *uart);
97 int MXC_UART_RevA_AsyncCallback(mxc_uart_reva_regs_t *uart, int retVal);
98 int MXC_UART_RevA_TxAsyncCallback(mxc_uart_reva_regs_t *uart, int retVal);
99 int MXC_UART_RevA_RxAsyncCallback(mxc_uart_reva_regs_t *uart, int retVal);
100 void MXC_UART_RevA_DMACallback(int ch, int error);
101 
102 int MXC_UART_RevA_SetAutoDMAHandlers(mxc_uart_reva_regs_t *uart, bool enable);
103 int MXC_UART_RevA_SetTXDMAChannel(mxc_uart_reva_regs_t *uart, unsigned int channel);
104 int MXC_UART_RevA_GetTXDMAChannel(mxc_uart_reva_regs_t *uart);
105 int MXC_UART_RevA_SetRXDMAChannel(mxc_uart_reva_regs_t *uart, unsigned int channel);
106 int MXC_UART_RevA_GetRXDMAChannel(mxc_uart_reva_regs_t *uart);
107 
108 #endif // LIBRARIES_PERIPHDRIVERS_SOURCE_UART_UART_REVA_H_
109