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_CAN_CAN_REVA_H_
22 #define LIBRARIES_PERIPHDRIVERS_SOURCE_CAN_CAN_REVA_H_
23 
24 #include <stdio.h>
25 #include "can.h"
26 #include "can_reva_regs.h"
27 #include "dma.h"
28 #include "dma_reva_regs.h"
29 
30 #include "mxc_device.h"
31 #include "mxc_errors.h"
32 #include "mxc_assert.h"
33 #include "mxc_sys.h"
34 #include "mxc_lock.h"
35 
36 /***** FUNCTIONS *****/
37 mxc_can_drv_version_t MXC_CAN_RevA_GetVersion(void);
38 
39 mxc_can_capabilities_t MXC_CAN_RevA_GetCapabilities(void);
40 
41 int MXC_CAN_RevA_Init(mxc_can_reva_regs_t *can, mxc_can_unit_event_cb_t unit_cb,
42                       mxc_can_object_event_cb_t obj_cb);
43 
44 int MXC_CAN_RevA_UnInit(mxc_can_reva_regs_t *can);
45 
46 int MXC_CAN_RevA_PowerControl(mxc_can_reva_regs_t *can, mxc_can_pwr_ctrl_t pwr);
47 
48 int MXC_CAN_RevA_EnableInt(mxc_can_reva_regs_t *can, uint8_t en, uint8_t ext_en);
49 
50 int MXC_CAN_RevA_DisableInt(mxc_can_reva_regs_t *can, uint8_t dis, uint8_t ext_dis);
51 
52 int MXC_CAN_RevA_GetFlags(mxc_can_reva_regs_t *can, uint8_t *flags, uint8_t *ext_flags);
53 
54 int MXC_CAN_RevA_ClearFlags(mxc_can_reva_regs_t *can, uint8_t flags, uint8_t ext_flags);
55 
56 int MXC_CAN_RevA_GetBitRate(mxc_can_reva_regs_t *can, mxc_can_bitrate_sel_t sel, int can_clk);
57 
58 int MXC_CAN_RevA_SetBitRate(mxc_can_reva_regs_t *can, int can_clk, mxc_can_bitrate_sel_t sel,
59                             uint32_t bitrate, uint8_t seg1, uint8_t seg2, uint8_t sjw);
60 
61 int MXC_CAN_RevA_SetMode(mxc_can_reva_regs_t *can, mxc_can_mode_t mode);
62 
63 mxc_can_obj_capabilities_t MXC_CAN_RevA_ObjectGetCapabilities(mxc_can_reva_regs_t *can);
64 
65 int MXC_CAN_RevA_ObjectSetFilter(mxc_can_reva_regs_t *can, mxc_can_filt_cfg_t cfg, uint32_t id,
66                                  uint32_t arg);
67 
68 int MXC_CAN_RevA_ObjectConfigure(mxc_can_reva_regs_t *can, mxc_can_obj_cfg_t cfg);
69 
70 int MXC_CAN_RevA_WriteTXFIFO(mxc_can_reva_regs_t *can, mxc_can_msg_info_t *info,
71                              const uint8_t *data, uint8_t size);
72 
73 int MXC_CAN_RevA_ReadRXFIFO(mxc_can_reva_regs_t *can, mxc_can_msg_info_t *info, uint8_t *data,
74                             uint8_t size, bool dma);
75 
76 int MXC_CAN_RevA_MessageSend(mxc_can_reva_regs_t *can, mxc_can_req_t *req);
77 
78 int MXC_CAN_RevA_MessageSendAsync(mxc_can_reva_regs_t *can, mxc_can_req_t *req);
79 
80 int MXC_CAN_RevA_MessageSendDMA(mxc_can_reva_regs_t *can, mxc_can_req_t *req);
81 
82 int MXC_CAN_RevA_MessageRead(mxc_can_reva_regs_t *can, mxc_can_req_t *req);
83 
84 int MXC_CAN_RevA_MessageReadAsync(mxc_can_reva_regs_t *can, mxc_can_req_t *req);
85 
86 int MXC_CAN_RevA_MessageReadDMA(mxc_can_reva_regs_t *can, mxc_can_req_t *req,
87                                 mxc_dma_reqsel_t reqsel, void (*dma_cb)(int, int));
88 
89 int MXC_CAN_RevA_Handler(mxc_can_reva_regs_t *can, uint8_t *intfl, uint8_t *eintfl);
90 
91 int MXC_CAN_RevA_Control(mxc_can_reva_regs_t *can, mxc_can_ctrl_t ctrl, uint32_t ctrl_arg);
92 
93 int MXC_CAN_RevA_SetWakeupTimer(mxc_can_reva_regs_t *can, uint8_t prescaler, uint16_t wup_filter_tm,
94                                 uint32_t wup_expire_tm);
95 
96 mxc_can_stat_t MXC_CAN_RevA_GetStatus(mxc_can_reva_regs_t *can);
97 
98 void MXC_CAN_RevA_SignalUnitEvent(uint32_t can_idx, mxc_can_unit_evt_t event);
99 
100 void MXC_CAN_RevA_SignalObjectEvent(uint32_t can_idx, mxc_can_obj_evt_t event);
101 
102 #endif // LIBRARIES_PERIPHDRIVERS_SOURCE_CAN_CAN_REVA_H_
103