9#ifndef ZEPHYR_INCLUDE_DRIVERS_CAN_CAN_MCAN_H_ 
   10#define ZEPHYR_INCLUDE_DRIVERS_CAN_CAN_MCAN_H_ 
   25#define CAN_MCAN_CREL         0x000 
   26#define CAN_MCAN_CREL_REL     GENMASK(31, 28) 
   27#define CAN_MCAN_CREL_STEP    GENMASK(27, 24) 
   28#define CAN_MCAN_CREL_SUBSTEP GENMASK(23, 20) 
   29#define CAN_MCAN_CREL_YEAR    GENMASK(19, 16) 
   30#define CAN_MCAN_CREL_MON     GENMASK(15, 8) 
   31#define CAN_MCAN_CREL_DAY     GENMASK(7, 0) 
   34#define CAN_MCAN_ENDN     0x004 
   35#define CAN_MCAN_ENDN_ETV GENMASK(31, 0) 
   38#define CAN_MCAN_CUST      0x008 
   39#define CAN_MCAN_CUST_CUST GENMASK(31, 0) 
   42#define CAN_MCAN_DBTP        0x00C 
   43#define CAN_MCAN_DBTP_TDC    BIT(23) 
   44#define CAN_MCAN_DBTP_DBRP   GENMASK(20, 16) 
   45#define CAN_MCAN_DBTP_DTSEG1 GENMASK(12, 8) 
   46#define CAN_MCAN_DBTP_DTSEG2 GENMASK(7, 4) 
   47#define CAN_MCAN_DBTP_DSJW   GENMASK(3, 0) 
   50#define CAN_MCAN_TEST       0x010 
   51#define CAN_MCAN_TEST_SVAL  BIT(21) 
   52#define CAN_MCAN_TEST_TXBNS GENMASK(20, 16) 
   53#define CAN_MCAN_TEST_PVAL  BIT(13) 
   54#define CAN_MCAN_TEST_TXBNP GENMASK(12, 8) 
   55#define CAN_MCAN_TEST_RX    BIT(7) 
   56#define CAN_MCAN_TEST_TX    GENMASK(6, 5) 
   57#define CAN_MCAN_TEST_LBCK  BIT(4) 
   60#define CAN_MCAN_RWD     0x014 
   61#define CAN_MCAN_RWD_WDV GENMASK(15, 8) 
   62#define CAN_MCAN_RWD_WDC GENMASK(7, 0) 
   65#define CAN_MCAN_CCCR      0x018 
   66#define CAN_MCAN_CCCR_NISO BIT(15) 
   67#define CAN_MCAN_CCCR_TXP  BIT(14) 
   68#define CAN_MCAN_CCCR_EFBI BIT(13) 
   69#define CAN_MCAN_CCCR_PXHD BIT(12) 
   70#define CAN_MCAN_CCCR_WMM  BIT(11) 
   71#define CAN_MCAN_CCCR_UTSU BIT(10) 
   72#define CAN_MCAN_CCCR_BRSE BIT(9) 
   73#define CAN_MCAN_CCCR_FDOE BIT(8) 
   74#define CAN_MCAN_CCCR_TEST BIT(7) 
   75#define CAN_MCAN_CCCR_DAR  BIT(6) 
   76#define CAN_MCAN_CCCR_MON  BIT(5) 
   77#define CAN_MCAN_CCCR_CSR  BIT(4) 
   78#define CAN_MCAN_CCCR_CSA  BIT(3) 
   79#define CAN_MCAN_CCCR_ASM  BIT(2) 
   80#define CAN_MCAN_CCCR_CCE  BIT(1) 
   81#define CAN_MCAN_CCCR_INIT BIT(0) 
   84#define CAN_MCAN_NBTP        0x01C 
   85#define CAN_MCAN_NBTP_NSJW   GENMASK(31, 25) 
   86#define CAN_MCAN_NBTP_NBRP   GENMASK(24, 16) 
   87#define CAN_MCAN_NBTP_NTSEG1 GENMASK(15, 8) 
   88#define CAN_MCAN_NBTP_NTSEG2 GENMASK(6, 0) 
   91#define CAN_MCAN_TSCC     0x020 
   92#define CAN_MCAN_TSCC_TCP GENMASK(19, 16) 
   93#define CAN_MCAN_TSCC_TSS GENMASK(1, 0) 
   96#define CAN_MCAN_TSCV     0x024 
   97#define CAN_MCAN_TSCV_TSC GENMASK(15, 0) 
  100#define CAN_MCAN_TOCC      0x028 
  101#define CAN_MCAN_TOCC_TOP  GENMASK(31, 16) 
  102#define CAN_MCAN_TOCC_TOS  GENMASK(2, 1) 
  103#define CAN_MCAN_TOCC_ETOC BIT(1) 
  106#define CAN_MCAN_TOCV     0x02C 
  107#define CAN_MCAN_TOCV_TOC GENMASK(15, 0) 
  110#define CAN_MCAN_ECR     0x040 
  111#define CAN_MCAN_ECR_CEL GENMASK(23, 16) 
  112#define CAN_MCAN_ECR_RP  BIT(15) 
  113#define CAN_MCAN_ECR_REC GENMASK(14, 8) 
  114#define CAN_MCAN_ECR_TEC GENMASK(7, 0) 
  117#define CAN_MCAN_PSR      0x044 
  118#define CAN_MCAN_PSR_TDCV GENMASK(22, 16) 
  119#define CAN_MCAN_PSR_PXE  BIT(14) 
  120#define CAN_MCAN_PSR_RFDF BIT(13) 
  121#define CAN_MCAN_PSR_RBRS BIT(12) 
  122#define CAN_MCAN_PSR_RESI BIT(11) 
  123#define CAN_MCAN_PSR_DLEC GENMASK(10, 8) 
  124#define CAN_MCAN_PSR_BO   BIT(7) 
  125#define CAN_MCAN_PSR_EW   BIT(6) 
  126#define CAN_MCAN_PSR_EP   BIT(5) 
  127#define CAN_MCAN_PSR_ACT  GENMASK(4, 3) 
  128#define CAN_MCAN_PSR_LEC  GENMASK(2, 0) 
  131#define CAN_MCAN_TDCR      0x048 
  132#define CAN_MCAN_TDCR_TDCO GENMASK(14, 8) 
  133#define CAN_MCAN_TDCR_TDCF GENMASK(6, 0) 
  136#define CAN_MCAN_IR      0x050 
  137#define CAN_MCAN_IR_ARA  BIT(29) 
  138#define CAN_MCAN_IR_PED  BIT(28) 
  139#define CAN_MCAN_IR_PEA  BIT(27) 
  140#define CAN_MCAN_IR_WDI  BIT(26) 
  141#define CAN_MCAN_IR_BO   BIT(25) 
  142#define CAN_MCAN_IR_EW   BIT(24) 
  143#define CAN_MCAN_IR_EP   BIT(23) 
  144#define CAN_MCAN_IR_ELO  BIT(22) 
  145#define CAN_MCAN_IR_BEU  BIT(21) 
  146#define CAN_MCAN_IR_BEC  BIT(20) 
  147#define CAN_MCAN_IR_DRX  BIT(19) 
  148#define CAN_MCAN_IR_TOO  BIT(18) 
  149#define CAN_MCAN_IR_MRAF BIT(17) 
  150#define CAN_MCAN_IR_TSW  BIT(16) 
  151#define CAN_MCAN_IR_TEFL BIT(15) 
  152#define CAN_MCAN_IR_TEFF BIT(14) 
  153#define CAN_MCAN_IR_TEFW BIT(13) 
  154#define CAN_MCAN_IR_TEFN BIT(12) 
  155#define CAN_MCAN_IR_TFE  BIT(11) 
  156#define CAN_MCAN_IR_TCF  BIT(10) 
  157#define CAN_MCAN_IR_TC   BIT(9) 
  158#define CAN_MCAN_IR_HPM  BIT(8) 
  159#define CAN_MCAN_IR_RF1L BIT(7) 
  160#define CAN_MCAN_IR_RF1F BIT(6) 
  161#define CAN_MCAN_IR_RF1W BIT(5) 
  162#define CAN_MCAN_IR_RF1N BIT(4) 
  163#define CAN_MCAN_IR_RF0L BIT(3) 
  164#define CAN_MCAN_IR_RF0F BIT(2) 
  165#define CAN_MCAN_IR_RF0W BIT(1) 
  166#define CAN_MCAN_IR_RF0N BIT(0) 
  169#define CAN_MCAN_IE       0x054 
  170#define CAN_MCAN_IE_ARAE  BIT(29) 
  171#define CAN_MCAN_IE_PEDE  BIT(28) 
  172#define CAN_MCAN_IE_PEAE  BIT(27) 
  173#define CAN_MCAN_IE_WDIE  BIT(26) 
  174#define CAN_MCAN_IE_BOE   BIT(25) 
  175#define CAN_MCAN_IE_EWE   BIT(24) 
  176#define CAN_MCAN_IE_EPE   BIT(23) 
  177#define CAN_MCAN_IE_ELOE  BIT(22) 
  178#define CAN_MCAN_IE_BEUE  BIT(21) 
  179#define CAN_MCAN_IE_BECE  BIT(20) 
  180#define CAN_MCAN_IE_DRXE  BIT(19) 
  181#define CAN_MCAN_IE_TOOE  BIT(18) 
  182#define CAN_MCAN_IE_MRAFE BIT(17) 
  183#define CAN_MCAN_IE_TSWE  BIT(16) 
  184#define CAN_MCAN_IE_TEFLE BIT(15) 
  185#define CAN_MCAN_IE_TEFFE BIT(14) 
  186#define CAN_MCAN_IE_TEFWE BIT(13) 
  187#define CAN_MCAN_IE_TEFNE BIT(12) 
  188#define CAN_MCAN_IE_TFEE  BIT(11) 
  189#define CAN_MCAN_IE_TCFE  BIT(10) 
  190#define CAN_MCAN_IE_TCE   BIT(9) 
  191#define CAN_MCAN_IE_HPME  BIT(8) 
  192#define CAN_MCAN_IE_RF1LE BIT(7) 
  193#define CAN_MCAN_IE_RF1FE BIT(6) 
  194#define CAN_MCAN_IE_RF1WE BIT(5) 
  195#define CAN_MCAN_IE_RF1NE BIT(4) 
  196#define CAN_MCAN_IE_RF0LE BIT(3) 
  197#define CAN_MCAN_IE_RF0FE BIT(2) 
  198#define CAN_MCAN_IE_RF0WE BIT(1) 
  199#define CAN_MCAN_IE_RF0NE BIT(0) 
  202#define CAN_MCAN_ILS       0x058 
  203#define CAN_MCAN_ILS_ARAL  BIT(29) 
  204#define CAN_MCAN_ILS_PEDL  BIT(28) 
  205#define CAN_MCAN_ILS_PEAL  BIT(27) 
  206#define CAN_MCAN_ILS_WDIL  BIT(26) 
  207#define CAN_MCAN_ILS_BOL   BIT(25) 
  208#define CAN_MCAN_ILS_EWL   BIT(24) 
  209#define CAN_MCAN_ILS_EPL   BIT(23) 
  210#define CAN_MCAN_ILS_ELOL  BIT(22) 
  211#define CAN_MCAN_ILS_BEUL  BIT(21) 
  212#define CAN_MCAN_ILS_BECL  BIT(20) 
  213#define CAN_MCAN_ILS_DRXL  BIT(19) 
  214#define CAN_MCAN_ILS_TOOL  BIT(18) 
  215#define CAN_MCAN_ILS_MRAFL BIT(17) 
  216#define CAN_MCAN_ILS_TSWL  BIT(16) 
  217#define CAN_MCAN_ILS_TEFLL BIT(15) 
  218#define CAN_MCAN_ILS_TEFFL BIT(14) 
  219#define CAN_MCAN_ILS_TEFWL BIT(13) 
  220#define CAN_MCAN_ILS_TEFNL BIT(12) 
  221#define CAN_MCAN_ILS_TFEL  BIT(11) 
  222#define CAN_MCAN_ILS_TCFL  BIT(10) 
  223#define CAN_MCAN_ILS_TCL   BIT(9) 
  224#define CAN_MCAN_ILS_HPML  BIT(8) 
  225#define CAN_MCAN_ILS_RF1LL BIT(7) 
  226#define CAN_MCAN_ILS_RF1FL BIT(6) 
  227#define CAN_MCAN_ILS_RF1WL BIT(5) 
  228#define CAN_MCAN_ILS_RF1NL BIT(4) 
  229#define CAN_MCAN_ILS_RF0LL BIT(3) 
  230#define CAN_MCAN_ILS_RF0FL BIT(2) 
  231#define CAN_MCAN_ILS_RF0WL BIT(1) 
  232#define CAN_MCAN_ILS_RF0NL BIT(0) 
  235#define CAN_MCAN_ILE       0x05C 
  236#define CAN_MCAN_ILE_EINT1 BIT(1) 
  237#define CAN_MCAN_ILE_EINT0 BIT(0) 
  240#define CAN_MCAN_GFC      0x080 
  241#define CAN_MCAN_GFC_ANFS GENMASK(5, 4) 
  242#define CAN_MCAN_GFC_ANFE GENMASK(3, 2) 
  243#define CAN_MCAN_GFC_RRFS BIT(1) 
  244#define CAN_MCAN_GFC_RRFE BIT(0) 
  247#define CAN_MCAN_SIDFC       0x084 
  248#define CAN_MCAN_SIDFC_LSS   GENMASK(23, 16) 
  249#define CAN_MCAN_SIDFC_FLSSA GENMASK(15, 2) 
  252#define CAN_MCAN_XIDFC       0x088 
  253#define CAN_MCAN_XIDFC_LSS   GENMASK(22, 16) 
  254#define CAN_MCAN_XIDFC_FLESA GENMASK(15, 2) 
  257#define CAN_MCAN_XIDAM      0x090 
  258#define CAN_MCAN_XIDAM_EIDM GENMASK(28, 0) 
  261#define CAN_MCAN_HPMS      0x094 
  262#define CAN_MCAN_HPMS_FLST BIT(15) 
  263#define CAN_MCAN_HPMS_FIDX GENMASK(14, 8) 
  264#define CAN_MCAN_HPMS_MSI  GENMASK(7, 6) 
  265#define CAN_MCAN_HPMS_BIDX GENMASK(5, 0) 
  268#define CAN_MCAN_NDAT1    0x098 
  269#define CAN_MCAN_NDAT1_ND GENMASK(31, 0) 
  272#define CAN_MCAN_NDAT2    0x09C 
  273#define CAN_MCAN_NDAT2_ND GENMASK(31, 0) 
  276#define CAN_MCAN_RXF0C      0x0A0 
  277#define CAN_MCAN_RXF0C_F0OM BIT(31) 
  278#define CAN_MCAN_RXF0C_F0WM GENMASK(30, 24) 
  279#define CAN_MCAN_RXF0C_F0S  GENMASK(22, 16) 
  280#define CAN_MCAN_RXF0C_F0SA GENMASK(15, 2) 
  283#define CAN_MCAN_RXF0S      0x0A4 
  284#define CAN_MCAN_RXF0S_RF0L BIT(25) 
  285#define CAN_MCAN_RXF0S_F0F  BIT(24) 
  286#define CAN_MCAN_RXF0S_F0PI GENMASK(21, 16) 
  287#define CAN_MCAN_RXF0S_F0GI GENMASK(13, 8) 
  288#define CAN_MCAN_RXF0S_F0FL GENMASK(6, 0) 
  291#define CAN_MCAN_RXF0A      0x0A8 
  292#define CAN_MCAN_RXF0A_F0AI GENMASK(5, 0) 
  295#define CAN_MCAN_RXBC      0x0AC 
  296#define CAN_MCAN_RXBC_RBSA GENMASK(15, 2) 
  299#define CAN_MCAN_RXF1C      0x0B0 
  300#define CAN_MCAN_RXF1C_F1OM BIT(31) 
  301#define CAN_MCAN_RXF1C_F1WM GENMASK(30, 24) 
  302#define CAN_MCAN_RXF1C_F1S  GENMASK(22, 16) 
  303#define CAN_MCAN_RXF1C_F1SA GENMASK(15, 2) 
  306#define CAN_MCAN_RXF1S      0x0B4 
  307#define CAN_MCAN_RXF1S_RF1L BIT(25) 
  308#define CAN_MCAN_RXF1S_F1F  BIT(24) 
  309#define CAN_MCAN_RXF1S_F1PI GENMASK(21, 16) 
  310#define CAN_MCAN_RXF1S_F1GI GENMASK(13, 8) 
  311#define CAN_MCAN_RXF1S_F1FL GENMASK(6, 0) 
  314#define CAN_MCAN_RXF1A      0x0B8 
  315#define CAN_MCAN_RXF1A_F1AI GENMASK(5, 0) 
  318#define CAN_MCAN_RXESC      0x0BC 
  319#define CAN_MCAN_RXESC_RBDS GENMASK(10, 8) 
  320#define CAN_MCAN_RXESC_F1DS GENMASK(6, 4) 
  321#define CAN_MCAN_RXESC_F0DS GENMASK(2, 0) 
  324#define CAN_MCAN_TXBC      0x0C0 
  325#define CAN_MCAN_TXBC_TFQM BIT(30) 
  326#define CAN_MCAN_TXBC_TFQS GENMASK(29, 24) 
  327#define CAN_MCAN_TXBC_NDTB GENMASK(21, 16) 
  328#define CAN_MCAN_TXBC_TBSA GENMASK(15, 2) 
  331#define CAN_MCAN_TXFQS       0x0C4 
  332#define CAN_MCAN_TXFQS_TFQF  BIT(21) 
  333#define CAN_MCAN_TXFQS_TFQPI GENMASK(20, 16) 
  334#define CAN_MCAN_TXFQS_TFGI  GENMASK(12, 8) 
  335#define CAN_MCAN_TXFQS_TFFL  GENMASK(5, 0) 
  338#define CAN_MCAN_TXESC      0x0C8 
  339#define CAN_MCAN_TXESC_TBDS GENMASK(2, 0) 
  342#define CAN_MCAN_TXBRP     0x0CC 
  343#define CAN_MCAN_TXBRP_TRP GENMASK(31, 0) 
  346#define CAN_MCAN_TXBAR    0x0D0 
  347#define CAN_MCAN_TXBAR_AR GENMASK(31, 0) 
  350#define CAN_MCAN_TXBCR    0x0D4 
  351#define CAN_MCAN_TXBCR_CR GENMASK(31, 0) 
  354#define CAN_MCAN_TXBTO    0x0D8 
  355#define CAN_MCAN_TXBTO_TO GENMASK(31, 0) 
  358#define CAN_MCAN_TXBCF    0x0DC 
  359#define CAN_MCAN_TXBCF_CF GENMASK(31, 0) 
  362#define CAN_MCAN_TXBTIE     0x0E0 
  363#define CAN_MCAN_TXBTIE_TIE GENMASK(31, 0) 
  366#define CAN_MCAN_TXBCIE      0x0E4 
  367#define CAN_MCAN_TXBCIE_CFIE GENMASK(31, 0) 
  370#define CAN_MCAN_TXEFC      0x0F0 
  371#define CAN_MCAN_TXEFC_EFWM GENMASK(29, 24) 
  372#define CAN_MCAN_TXEFC_EFS  GENMASK(21, 16) 
  373#define CAN_MCAN_TXEFC_EFSA GENMASK(15, 2) 
  376#define CAN_MCAN_TXEFS      0x0F4 
  377#define CAN_MCAN_TXEFS_TEFL BIT(25) 
  378#define CAN_MCAN_TXEFS_EFF  BIT(24) 
  379#define CAN_MCAN_TXEFS_EFPI GENMASK(20, 16) 
  380#define CAN_MCAN_TXEFS_EFGI GENMASK(12, 8) 
  381#define CAN_MCAN_TXEFS_EFFL GENMASK(5, 0) 
  384#define CAN_MCAN_TXEFA      0x0F8 
  385#define CAN_MCAN_TXEFA_EFAI GENMASK(4, 0) 
  396#define CAN_MCAN_MRAM_CFG_OFFSET        0 
  398#define CAN_MCAN_MRAM_CFG_STD_FILTER    1 
  400#define CAN_MCAN_MRAM_CFG_EXT_FILTER    2 
  402#define CAN_MCAN_MRAM_CFG_RX_FIFO0      3 
  404#define CAN_MCAN_MRAM_CFG_RX_FIFO1      4 
  406#define CAN_MCAN_MRAM_CFG_RX_BUFFER     5 
  408#define CAN_MCAN_MRAM_CFG_TX_EVENT_FIFO 6 
  410#define CAN_MCAN_MRAM_CFG_TX_BUFFER     7 
  412#define CAN_MCAN_MRAM_CFG_NUM_CELLS     8 
  422#define CAN_MCAN_DT_MRAM_OFFSET(node_id)                                                           \ 
  423        DT_PROP_BY_IDX(node_id, bosch_mram_cfg, CAN_MCAN_MRAM_CFG_OFFSET) 
  431#define CAN_MCAN_DT_MRAM_STD_FILTER_ELEMENTS(node_id)                                              \ 
  432        DT_PROP_BY_IDX(node_id, bosch_mram_cfg, CAN_MCAN_MRAM_CFG_STD_FILTER) 
  440#define CAN_MCAN_DT_MRAM_EXT_FILTER_ELEMENTS(node_id)                                              \ 
  441        DT_PROP_BY_IDX(node_id, bosch_mram_cfg, CAN_MCAN_MRAM_CFG_EXT_FILTER) 
  449#define CAN_MCAN_DT_MRAM_RX_FIFO0_ELEMENTS(node_id)                                                \ 
  450        DT_PROP_BY_IDX(node_id, bosch_mram_cfg, CAN_MCAN_MRAM_CFG_RX_FIFO0) 
  458#define CAN_MCAN_DT_MRAM_RX_FIFO1_ELEMENTS(node_id)                                                \ 
  459        DT_PROP_BY_IDX(node_id, bosch_mram_cfg, CAN_MCAN_MRAM_CFG_RX_FIFO1) 
  467#define CAN_MCAN_DT_MRAM_RX_BUFFER_ELEMENTS(node_id)                                               \ 
  468        DT_PROP_BY_IDX(node_id, bosch_mram_cfg, CAN_MCAN_MRAM_CFG_RX_BUFFER) 
  476#define CAN_MCAN_DT_MRAM_TX_EVENT_FIFO_ELEMENTS(node_id)                                           \ 
  477        DT_PROP_BY_IDX(node_id, bosch_mram_cfg, CAN_MCAN_MRAM_CFG_TX_EVENT_FIFO) 
  485#define CAN_MCAN_DT_MRAM_TX_BUFFER_ELEMENTS(node_id)                                               \ 
  486        DT_PROP_BY_IDX(node_id, bosch_mram_cfg, CAN_MCAN_MRAM_CFG_TX_BUFFER) 
  494#define CAN_MCAN_DT_MRAM_STD_FILTER_OFFSET(node_id) (0U) 
  502#define CAN_MCAN_DT_MRAM_EXT_FILTER_OFFSET(node_id)                                                \ 
  503        (CAN_MCAN_DT_MRAM_STD_FILTER_OFFSET(node_id) +                                             \ 
  504         CAN_MCAN_DT_MRAM_STD_FILTER_ELEMENTS(node_id) * sizeof(struct can_mcan_std_filter)) 
  512#define CAN_MCAN_DT_MRAM_RX_FIFO0_OFFSET(node_id)                                                  \ 
  513        (CAN_MCAN_DT_MRAM_EXT_FILTER_OFFSET(node_id) +                                             \ 
  514         CAN_MCAN_DT_MRAM_EXT_FILTER_ELEMENTS(node_id) * sizeof(struct can_mcan_ext_filter)) 
  522#define CAN_MCAN_DT_MRAM_RX_FIFO1_OFFSET(node_id)                                                  \ 
  523        (CAN_MCAN_DT_MRAM_RX_FIFO0_OFFSET(node_id) +                                               \ 
  524         CAN_MCAN_DT_MRAM_RX_FIFO0_ELEMENTS(node_id) * sizeof(struct can_mcan_rx_fifo)) 
  532#define CAN_MCAN_DT_MRAM_RX_BUFFER_OFFSET(node_id)                                                 \ 
  533        (CAN_MCAN_DT_MRAM_RX_FIFO1_OFFSET(node_id) +                                               \ 
  534         CAN_MCAN_DT_MRAM_RX_FIFO1_ELEMENTS(node_id) * sizeof(struct can_mcan_rx_fifo)) 
  542#define CAN_MCAN_DT_MRAM_TX_EVENT_FIFO_OFFSET(node_id)                                             \ 
  543        (CAN_MCAN_DT_MRAM_RX_BUFFER_OFFSET(node_id) +                                              \ 
  544         CAN_MCAN_DT_MRAM_RX_BUFFER_ELEMENTS(node_id) * sizeof(struct can_mcan_rx_fifo)) 
  552#define CAN_MCAN_DT_MRAM_TX_BUFFER_OFFSET(node_id)                                                 \ 
  553        (CAN_MCAN_DT_MRAM_TX_EVENT_FIFO_OFFSET(node_id) +                                          \ 
  554         CAN_MCAN_DT_MRAM_TX_EVENT_FIFO_ELEMENTS(node_id) * sizeof(struct can_mcan_tx_event_fifo)) 
  568#define CAN_MCAN_DT_MCAN_ADDR(node_id)                                                             \ 
  569        COND_CODE_1(DT_NUM_REGS(node_id), ((mm_reg_t)DT_REG_ADDR(node_id)),                        \ 
  570                    ((mm_reg_t)DT_REG_ADDR_BY_NAME(node_id, m_can))) 
  581#define CAN_MCAN_DT_MRAM_ADDR(node_id)                                                             \ 
  582        (mem_addr_t)(DT_REG_ADDR_BY_NAME(node_id, message_ram) + CAN_MCAN_DT_MRAM_OFFSET(node_id)) 
  594#define CAN_MCAN_DT_MRAM_SIZE(node_id)                                                             \ 
  595        (mem_addr_t)(DT_REG_SIZE_BY_NAME(node_id, message_ram) - CAN_MCAN_DT_MRAM_OFFSET(node_id)) 
  604#define CAN_MCAN_DT_MRAM_ELEMENTS_SIZE(node_id)                                                    \ 
  605        (CAN_MCAN_DT_MRAM_TX_BUFFER_OFFSET(node_id) +                                              \ 
  606         CAN_MCAN_DT_MRAM_TX_BUFFER_ELEMENTS(node_id) * sizeof(struct can_mcan_tx_buffer)) 
  618#define CAN_MCAN_DT_MRAM_DEFINE(node_id, _name)                                                    \ 
  619        BUILD_ASSERT(CAN_MCAN_DT_MRAM_OFFSET(node_id) == 0, "offset must be 0");                   \
 
  620        static char __noinit __nocache __aligned(4) _name[CAN_MCAN_DT_MRAM_ELEMENTS_SIZE(node_id)];
 
  627#define CAN_MCAN_DT_BUILD_ASSERT_MRAM_CFG(node_id)                                                 \ 
  628        BUILD_ASSERT(CAN_MCAN_DT_MRAM_STD_FILTER_ELEMENTS(node_id) <= 128,                         \ 
  629                     "Maximum Standard filter elements exceeded");                                 \
 
  630        BUILD_ASSERT(CAN_MCAN_DT_MRAM_EXT_FILTER_ELEMENTS(node_id) <= 64,                          \
 
  631                     "Maximum Extended filter elements exceeded");                                 \
 
  632        BUILD_ASSERT(CAN_MCAN_DT_MRAM_RX_FIFO0_ELEMENTS(node_id) <= 64,                            \
 
  633                     "Maximum Rx FIFO 0 elements exceeded");                                       \
 
  634        BUILD_ASSERT(CAN_MCAN_DT_MRAM_RX_FIFO1_ELEMENTS(node_id) <= 64,                            \
 
  635                     "Maximum Rx FIFO 1 elements exceeded");                                       \
 
  636        BUILD_ASSERT(CAN_MCAN_DT_MRAM_RX_BUFFER_ELEMENTS(node_id) <= 64,                           \
 
  637                     "Maximum Rx Buffer elements exceeded");                                       \
 
  638        BUILD_ASSERT(CAN_MCAN_DT_MRAM_TX_EVENT_FIFO_ELEMENTS(node_id) <= 32,                       \
 
  639                     "Maximum Tx Buffer elements exceeded");                                       \
 
  640        BUILD_ASSERT(CAN_MCAN_DT_MRAM_TX_BUFFER_ELEMENTS(node_id) <= 32,                           \
 
  641                     "Maximum Tx Buffer elements exceeded");
 
  649#define CAN_MCAN_DT_INST_MRAM_OFFSET(inst) CAN_MCAN_DT_MRAM_OFFSET(DT_DRV_INST(inst)) 
  657#define CAN_MCAN_DT_INST_MRAM_STD_FILTER_ELEMENTS(inst)                                            \ 
  658        CAN_MCAN_DT_MRAM_STD_FILTER_ELEMENTS(DT_DRV_INST(inst)) 
  666#define CAN_MCAN_DT_INST_MRAM_EXT_FILTER_ELEMENTS(inst)                                            \ 
  667        CAN_MCAN_DT_MRAM_EXT_FILTER_ELEMENTS(DT_DRV_INST(inst)) 
  675#define CAN_MCAN_DT_INST_MRAM_RX_FIFO0_ELEMENTS(inst)                                              \ 
  676        CAN_MCAN_DT_MRAM_RX_FIFO0_ELEMENTS(DT_DRV_INST(inst)) 
  684#define CAN_MCAN_DT_INST_MRAM_RX_FIFO1_ELEMENTS(inst)                                              \ 
  685        CAN_MCAN_DT_MRAM_RX_FIFO1_ELEMENTS(DT_DRV_INST(inst)) 
  693#define CAN_MCAN_DT_INST_MRAM_RX_BUFFER_ELEMENTS(inst)                                             \ 
  694        CAN_MCAN_DT_MRAM_RX_BUFFER_ELEMENTS(DT_DRV_INST(inst)) 
  702#define CAN_MCAN_DT_INST_MRAM_TX_EVENT_FIFO_ELEMENTS(inst)                                         \ 
  703        CAN_MCAN_DT_MRAM_TX_EVENT_FIFO_ELEMENTS(DT_DRV_INST(inst)) 
  711#define CAN_MCAN_DT_INST_MRAM_TX_BUFFER_ELEMENTS(inst)                                             \ 
  712        CAN_MCAN_DT_MRAM_TX_BUFFER_ELEMENTS(DT_DRV_INST(inst)) 
  720#define CAN_MCAN_DT_INST_MRAM_STD_FILTER_OFFSET(inst)                                              \ 
  721        CAN_MCAN_DT_MRAM_STD_FILTER_OFFSET(DT_DRV_INST(inst)) 
  729#define CAN_MCAN_DT_INST_MRAM_EXT_FILTER_OFFSET(inst)                                              \ 
  730        CAN_MCAN_DT_MRAM_EXT_FILTER_OFFSET(DT_DRV_INST(inst)) 
  738#define CAN_MCAN_DT_INST_MRAM_RX_FIFO0_OFFSET(inst)                                                \ 
  739        CAN_MCAN_DT_MRAM_RX_FIFO0_OFFSET(DT_DRV_INST(inst)) 
  747#define CAN_MCAN_DT_INST_MRAM_RX_FIFO1_OFFSET(inst)                                                \ 
  748        CAN_MCAN_DT_MRAM_RX_FIFO1_OFFSET(DT_DRV_INST(inst)) 
  756#define CAN_MCAN_DT_INST_MRAM_RX_BUFFER_OFFSET(inst)                                               \ 
  757        CAN_MCAN_DT_MRAM_RX_BUFFER_OFFSET(DT_DRV_INST(inst)) 
  765#define CAN_MCAN_DT_INST_MRAM_TX_EVENT_FIFO_OFFSET(inst)                                           \ 
  766        CAN_MCAN_DT_MRAM_TX_EVENT_FIFO_OFFSET(DT_DRV_INST(inst)) 
  774#define CAN_MCAN_DT_INST_MRAM_TX_BUFFER_OFFSET(inst)                                               \ 
  775        CAN_MCAN_DT_MRAM_TX_BUFFER_OFFSET(DT_DRV_INST(inst)) 
  783#define CAN_MCAN_DT_INST_MCAN_ADDR(inst) CAN_MCAN_DT_MCAN_ADDR(DT_DRV_INST(inst)) 
  791#define CAN_MCAN_DT_INST_MRAM_ADDR(inst) CAN_MCAN_DT_MRAM_ADDR(DT_DRV_INST(inst)) 
  799#define CAN_MCAN_DT_INST_MRAM_SIZE(inst) CAN_MCAN_DT_MRAM_SIZE(DT_DRV_INST(inst)) 
  807#define CAN_MCAN_DT_INST_MRAM_ELEMENTS_SIZE(inst) CAN_MCAN_DT_MRAM_ELEMENTS_SIZE(DT_DRV_INST(inst)) 
  815#define CAN_MCAN_DT_INST_MRAM_DEFINE(inst, _name) CAN_MCAN_DT_MRAM_DEFINE(DT_DRV_INST(inst), _name) 
  820#define CAN_MCAN_TIMING_MIN_INITIALIZER                                                            \ 
  832#define CAN_MCAN_TIMING_MAX_INITIALIZER                                                            \ 
  844#define CAN_MCAN_TIMING_DATA_MIN_INITIALIZER                                                       \ 
  856#define CAN_MCAN_TIMING_DATA_MAX_INITIALIZER                                                       \ 
  870#define CAN_MCAN_DT_INST_BUILD_ASSERT_MRAM_CFG(inst)                                               \ 
  871        CAN_MCAN_DT_BUILD_ASSERT_MRAM_CFG(DT_DRV_INST(inst)) 
  899} __packed __aligned(4);
 
  912} __packed __aligned(4);
 
  940} __packed __aligned(4);
 
  953} __packed __aligned(4);
 
  980} __packed __aligned(4);
 
  983#define CAN_MCAN_XFEC_DISABLE    0x0 
  984#define CAN_MCAN_XFEC_FIFO0      0x1 
  985#define CAN_MCAN_XFEC_FIFO1      0x2 
  986#define CAN_MCAN_XFEC_REJECT     0x3 
  987#define CAN_MCAN_XFEC_PRIO       0x4 
  988#define CAN_MCAN_XFEC_PRIO_FIFO0 0x5 
  989#define CAN_MCAN_XFEC_PRIO_FIFO1 0x7 
  992#define CAN_MCAN_SFT_RANGE    0x0 
  993#define CAN_MCAN_SFT_DUAL     0x1 
  994#define CAN_MCAN_SFT_CLASSIC  0x2 
  995#define CAN_MCAN_SFT_DISABLED 0x3 
 1008} __packed __aligned(4);
 
 1011#define CAN_MCAN_EFT_RANGE_XIDAM 0x0 
 1012#define CAN_MCAN_EFT_DUAL        0x1 
 1013#define CAN_MCAN_EFT_CLASSIC     0x2 
 1014#define CAN_MCAN_EFT_RANGE       0x3 
 1027} __packed __aligned(4);
 
 1039#ifdef CONFIG_CAN_FD_MODE 
 1172#define CAN_MCAN_CALLBACKS_DEFINE(_name, _tx, _std, _ext)                                          \ 
 1173        static struct can_mcan_tx_callback _name##_tx_cbs[_tx];                                    \ 
 1174        static struct can_mcan_rx_callback _name##_std_cbs[_std];                                  \ 
 1175        static struct can_mcan_rx_callback _name##_ext_cbs[_ext];                                  \ 
 1176        static const struct can_mcan_callbacks _name = {                                           \ 
 1177                .tx = _name##_tx_cbs,                                                              \ 
 1178                .std = _name##_std_cbs,                                                            \ 
 1179                .ext = _name##_ext_cbs,                                                            \ 
 1191#define CAN_MCAN_DT_CALLBACKS_DEFINE(node_id, _name)                                               \ 
 1192        CAN_MCAN_CALLBACKS_DEFINE(_name, CAN_MCAN_DT_MRAM_TX_BUFFER_ELEMENTS(node_id),             \ 
 1193                                  CAN_MCAN_DT_MRAM_STD_FILTER_ELEMENTS(node_id),                   \ 
 1194                                  CAN_MCAN_DT_MRAM_EXT_FILTER_ELEMENTS(node_id)) 
 1202#define CAN_MCAN_DT_INST_CALLBACKS_DEFINE(inst, _name)                                             \ 
 1203        CAN_MCAN_DT_CALLBACKS_DEFINE(DT_DRV_INST(inst), _name) 
 1219#ifdef CONFIG_CAN_FD_MODE 
 1240#define CAN_MCAN_DT_MRAM_ELEMENTS_GET(node_id)                                                     \ 
 1243                        CAN_MCAN_DT_MRAM_STD_FILTER_ELEMENTS(node_id),                             \ 
 1244                        CAN_MCAN_DT_MRAM_EXT_FILTER_ELEMENTS(node_id),                             \ 
 1245                        CAN_MCAN_DT_MRAM_RX_FIFO0_ELEMENTS(node_id),                               \ 
 1246                        CAN_MCAN_DT_MRAM_RX_FIFO1_ELEMENTS(node_id),                               \ 
 1247                        CAN_MCAN_DT_MRAM_RX_BUFFER_ELEMENTS(node_id),                              \ 
 1248                        CAN_MCAN_DT_MRAM_TX_EVENT_FIFO_ELEMENTS(node_id),                          \ 
 1249                        CAN_MCAN_DT_MRAM_TX_BUFFER_ELEMENTS(node_id)                               \ 
 1260#define CAN_MCAN_DT_MRAM_OFFSETS_GET(node_id)                                                      \ 
 1263                        CAN_MCAN_DT_MRAM_STD_FILTER_OFFSET(node_id),                               \ 
 1264                        CAN_MCAN_DT_MRAM_EXT_FILTER_OFFSET(node_id),                               \ 
 1265                        CAN_MCAN_DT_MRAM_RX_FIFO0_OFFSET(node_id),                                 \ 
 1266                        CAN_MCAN_DT_MRAM_RX_FIFO1_OFFSET(node_id),                                 \ 
 1267                        CAN_MCAN_DT_MRAM_RX_BUFFER_OFFSET(node_id),                                \ 
 1268                        CAN_MCAN_DT_MRAM_TX_EVENT_FIFO_OFFSET(node_id),                            \ 
 1269                        CAN_MCAN_DT_MRAM_TX_BUFFER_OFFSET(node_id)                                 \ 
 1280#ifdef CONFIG_CAN_FD_MODE 
 1281#define CAN_MCAN_DT_CONFIG_GET(node_id, _custom, _ops, _cbs)                                       \ 
 1284                .callbacks = _cbs,                                                                 \ 
 1285                .mram_elements = CAN_MCAN_DT_MRAM_ELEMENTS_GET(node_id),                           \ 
 1286                .mram_offsets = CAN_MCAN_DT_MRAM_OFFSETS_GET(node_id),                             \ 
 1287                .mram_size = CAN_MCAN_DT_MRAM_ELEMENTS_SIZE(node_id),                              \ 
 1288                .bus_speed = DT_PROP(node_id, bus_speed),                                          \ 
 1289                .sjw = DT_PROP(node_id, sjw),                                                      \ 
 1290                .sample_point = DT_PROP_OR(node_id, sample_point, 0),                              \ 
 1291                .prop_ts1 = DT_PROP_OR(node_id, prop_seg, 0) + DT_PROP_OR(node_id, phase_seg1, 0), \ 
 1292                .ts2 = DT_PROP_OR(node_id, phase_seg2, 0),                                         \ 
 1293                .bus_speed_data = DT_PROP(node_id, bus_speed_data),                                \ 
 1294                .sjw_data = DT_PROP(node_id, sjw_data),                                            \ 
 1295                .sample_point_data = DT_PROP_OR(node_id, sample_point_data, 0),                    \ 
 1296                .prop_ts1_data = DT_PROP_OR(node_id, prop_seg_data, 0) +                           \ 
 1297                                 DT_PROP_OR(node_id, phase_seg1_data, 0),                          \ 
 1298                .ts2_data = DT_PROP_OR(node_id, phase_seg2_data, 0),                               \ 
 1299                .tx_delay_comp_offset = DT_PROP(node_id, tx_delay_comp_offset),                    \ 
 1300                .phy = DEVICE_DT_GET_OR_NULL(DT_PHANDLE(node_id, phys)),                           \ 
 1301                .max_bitrate = DT_CAN_TRANSCEIVER_MAX_BITRATE(node_id, 8000000),                   \ 
 1302                .custom = _custom,                                                                 \ 
 1305#define CAN_MCAN_DT_CONFIG_GET(node_id, _custom, _ops, _cbs)                                       \ 
 1308                .callbacks = _cbs,                                                                 \ 
 1309                .mram_elements = CAN_MCAN_DT_MRAM_ELEMENTS_GET(node_id),                           \ 
 1310                .mram_offsets = CAN_MCAN_DT_MRAM_OFFSETS_GET(node_id),                             \ 
 1311                .mram_size = CAN_MCAN_DT_MRAM_ELEMENTS_SIZE(node_id),                              \ 
 1312                .bus_speed = DT_PROP(node_id, bus_speed),                                          \ 
 1313                .sjw = DT_PROP(node_id, sjw),                                                      \ 
 1314                .sample_point = DT_PROP_OR(node_id, sample_point, 0),                              \ 
 1315                .prop_ts1 = DT_PROP_OR(node_id, prop_seg, 0) + DT_PROP_OR(node_id, phase_seg1, 0), \ 
 1316                .ts2 = DT_PROP_OR(node_id, phase_seg2, 0),                                         \ 
 1317                .phy = DEVICE_DT_GET_OR_NULL(DT_PHANDLE(node_id, phys)),                           \ 
 1318                .max_bitrate = DT_CAN_TRANSCEIVER_MAX_BITRATE(node_id, 1000000),                   \ 
 1319                .custom = _custom,                                                                 \ 
 1332#define CAN_MCAN_DT_CONFIG_INST_GET(inst, _custom, _ops, _cbs)                                     \ 
 1333        CAN_MCAN_DT_CONFIG_GET(DT_DRV_INST(inst), _custom, _ops, _cbs) 
 1339#define CAN_MCAN_DATA_INITIALIZER(_custom)                                                         \ 
 1341                .custom = _custom,                                                                 \ 
 1393        size_t len32 = len / 
sizeof(
uint32_t);
 
 1395        __ASSERT(base % 4U == 0U, 
"base must be a multiple of 4");
 
 1396        __ASSERT(offset % 4U == 0U, 
"offset must be a multiple of 4");
 
 1397        __ASSERT(
POINTER_TO_UINT(dst) % 4U == 0U, 
"dst must be 32-bit aligned");
 
 1398        __ASSERT(len % 4U == 0U, 
"len must be a multiple of 4");
 
 1400#if defined(CONFIG_CACHE_MANAGEMENT) && defined(CONFIG_DCACHE) 
 1409        while (len32-- > 0) {
 
 1410                *dst32++ = *src32++;
 
 1434        size_t len32 = len / 
sizeof(
uint32_t);
 
 1436        __ASSERT(base % 4U == 0U, 
"base must be a multiple of 4");
 
 1437        __ASSERT(offset % 4U == 0U, 
"offset must be a multiple of 4");
 
 1438        __ASSERT(
POINTER_TO_UINT(src) % 4U == 0U, 
"src must be 32-bit aligned");
 
 1439        __ASSERT(len % 4U == 0U, 
"len must be a multiple of 4");
 
 1441        while (len32-- > 0) {
 
 1442                *dst32++ = *src32++;
 
 1445#if defined(CONFIG_CACHE_MANAGEMENT) && defined(CONFIG_DCACHE) 
 1469        size_t len32 = len / 
sizeof(
uint32_t);
 
 1471        __ASSERT(base % 4U == 0U, 
"base must be a multiple of 4");
 
 1472        __ASSERT(offset % 4U == 0U, 
"offset must be a multiple of 4");
 
 1473        __ASSERT(len % 4U == 0U, 
"len must be a multiple of 4");
 
 1475        while (len32-- > 0) {
 
 1479#if defined(CONFIG_CACHE_MANAGEMENT) && defined(CONFIG_DCACHE) 
 1660#ifndef CONFIG_CAN_AUTO_BUS_OFF_RECOVERY 
void can_mcan_line_0_isr(const struct device *dev)
Bosch M_CAN driver m_can_int0 IRQ handler.
 
int can_mcan_read_reg(const struct device *dev, uint16_t reg, uint32_t *val)
Read a Bosch M_CAN register.
 
int can_mcan_get_max_bitrate(const struct device *dev, uint32_t *max_bitrate)
Bosch M_CAN driver callback API upon getting the maximum supported bitrate See can_get_max_bitrate() ...
 
int can_mcan_set_mode(const struct device *dev, can_mode_t mode)
Bosch M_CAN driver callback API upon setting CAN controller mode See can_set_mode() for argument desc...
 
static int can_mcan_read_mram(const struct device *dev, uint16_t offset, void *dst, size_t len)
Read from Bosch M_CAN Message RAM.
Definition: can_mcan.h:1524
 
int can_mcan_set_timing_data(const struct device *dev, const struct can_timing *timing_data)
Bosch M_CAN driver callback API upon setting CAN bus data phase timing See can_set_timing_data() for ...
 
static int can_mcan_sys_read_reg(mm_reg_t base, uint16_t reg, uint32_t *val)
Bosch M_CAN driver front-end callback helper for reading a memory mapped register.
Definition: can_mcan.h:1353
 
static int can_mcan_sys_write_mram(mem_addr_t base, uint16_t offset, const void *src, size_t len)
Bosch M_CAN driver front-end callback helper for writing to memory mapped Message RAM.
Definition: can_mcan.h:1429
 
int can_mcan_configure_mram(const struct device *dev, uintptr_t mrba, uintptr_t mram)
Configure Bosch M_MCAN Message RAM start addresses.
 
int(* can_mcan_clear_mram_t)(const struct device *dev, uint16_t offset, size_t len)
Bosch M_CAN driver front-end callback for clearing Message RAM.
Definition: can_mcan.h:1114
 
void can_mcan_set_state_change_callback(const struct device *dev, can_state_change_callback_t callback, void *user_data)
Bosch M_CAN driver callback API upon setting a state change callback See can_set_state_change_callbac...
 
int can_mcan_set_timing(const struct device *dev, const struct can_timing *timing)
Bosch M_CAN driver callback API upon setting CAN bus timing See can_set_timing() for argument descrip...
 
int can_mcan_write_reg(const struct device *dev, uint16_t reg, uint32_t val)
Write a Bosch M_CAN register.
 
int can_mcan_get_state(const struct device *dev, enum can_state *state, struct can_bus_err_cnt *err_cnt)
Bosch M_CAN driver callback API upon getting the CAN controller state See can_get_state() for argumen...
 
void can_mcan_line_1_isr(const struct device *dev)
Bosch M_CAN driver m_can_int1 IRQ handler.
 
int can_mcan_stop(const struct device *dev)
Bosch M_CAN driver callback API upon stopping CAN controller See can_stop() for argument description.
 
void can_mcan_enable_configuration_change(const struct device *dev)
Enable Bosch M_CAN configuration change.
 
static int can_mcan_sys_read_mram(mem_addr_t base, uint16_t offset, void *dst, size_t len)
Bosch M_CAN driver front-end callback helper for reading from memory mapped Message RAM.
Definition: can_mcan.h:1389
 
static int can_mcan_sys_clear_mram(mem_addr_t base, uint16_t offset, size_t len)
Bosch M_CAN driver front-end callback helper for clearing memory mapped Message RAM.
Definition: can_mcan.h:1466
 
int can_mcan_add_rx_filter(const struct device *dev, can_rx_callback_t callback, void *user_data, const struct can_filter *filter)
Bosch M_CAN driver callback API upon adding an RX filter See can_add_rx_callback() for argument descr...
 
int(* can_mcan_read_reg_t)(const struct device *dev, uint16_t reg, uint32_t *val)
Bosch M_CAN driver front-end callback for reading a register value.
Definition: can_mcan.h:1056
 
int can_mcan_init(const struct device *dev)
Bosch M_CAN driver initialization callback.
 
int can_mcan_recover(const struct device *dev, k_timeout_t timeout)
Bosch M_CAN driver callback API upon recovering the CAN bus See can_recover() for argument descriptio...
 
int can_mcan_send(const struct device *dev, const struct can_frame *frame, k_timeout_t timeout, can_tx_callback_t callback, void *user_data)
 
int(* can_mcan_read_mram_t)(const struct device *dev, uint16_t offset, void *dst, size_t len)
Bosch M_CAN driver front-end callback for reading from Message RAM.
Definition: can_mcan.h:1083
 
static int can_mcan_clear_mram(const struct device *dev, uint16_t offset, size_t len)
Clear Bosch M_CAN Message RAM.
Definition: can_mcan.h:1565
 
int(* can_mcan_write_mram_t)(const struct device *dev, uint16_t offset, const void *src, size_t len)
Bosch M_CAN driver front-end callback for writing to Message RAM.
Definition: can_mcan.h:1098
 
#define CAN_MCAN_MRAM_CFG_NUM_CELLS
Definition: can_mcan.h:412
 
int can_mcan_get_capabilities(const struct device *dev, can_mode_t *cap)
Bosch M_CAN driver callback API upon getting CAN controller capabilities See can_get_capabilities() f...
 
int can_mcan_start(const struct device *dev)
Bosch M_CAN driver callback API upon starting CAN controller See can_start() for argument description...
 
static int can_mcan_sys_write_reg(mm_reg_t base, uint16_t reg, uint32_t val)
Bosch M_CAN driver front-end callback helper for writing a memory mapped register.
Definition: can_mcan.h:1369
 
int can_mcan_get_max_filters(const struct device *dev, bool ide)
 
int(* can_mcan_write_reg_t)(const struct device *dev, uint16_t reg, uint32_t val)
Bosch M_CAN driver front-end callback for writing a register value.
Definition: can_mcan.h:1069
 
static int can_mcan_write_mram(const struct device *dev, uint16_t offset, const void *src, size_t len)
Write to Bosch M_CAN Message RAM.
Definition: can_mcan.h:1544
 
void can_mcan_remove_rx_filter(const struct device *dev, int filter_id)
Bosch M_CAN driver callback API upon removing an RX filter See can_remove_rx_filter() for argument de...
 
ZTEST_BMEM int timeout
Definition: main.c:31
 
__syscall_always_inline int sys_cache_data_flush_range(void *addr, size_t size)
Flush an address range in the d-cache.
 
__syscall_always_inline int sys_cache_data_invd_range(void *addr, size_t size)
Invalidate an address range in the d-cache.
 
void(* can_state_change_callback_t)(const struct device *dev, enum can_state state, struct can_bus_err_cnt err_cnt, void *user_data)
Defines the state change callback handler function signature.
Definition: can.h:315
 
uint32_t can_mode_t
Provides a type to hold CAN controller configuration flags.
Definition: can.h:111
 
void(* can_rx_callback_t)(const struct device *dev, struct can_frame *frame, void *user_data)
Defines the application callback handler function signature for receiving.
Definition: can.h:304
 
void(* can_tx_callback_t)(const struct device *dev, int error, void *user_data)
Defines the application callback handler function signature.
Definition: can.h:295
 
can_state
Defines the state of the CAN controller.
Definition: can.h:116
 
#define POINTER_TO_UINT(x)
Cast x, a pointer, to an unsigned integer.
Definition: util.h:43
 
state
Definition: parser_state.h:29
 
__UINT32_TYPE__ uint32_t
Definition: stdint.h:90
 
__UINT8_TYPE__ uint8_t
Definition: stdint.h:88
 
__UINTPTR_TYPE__ uintptr_t
Definition: stdint.h:105
 
__UINT16_TYPE__ uint16_t
Definition: stdint.h:89
 
CAN controller error counters.
Definition: can.h:230
 
CAN filter structure.
Definition: can.h:213
 
CAN frame structure.
Definition: can.h:158
 
Bosch M_CAN driver internal Tx + Rx callbacks structure.
Definition: can_mcan.h:1147
 
uint8_t num_std
Definition: can_mcan.h:1152
 
uint8_t num_ext
Definition: can_mcan.h:1153
 
uint8_t num_tx
Definition: can_mcan.h:1151
 
struct can_mcan_rx_callback * ext
Definition: can_mcan.h:1150
 
struct can_mcan_tx_callback * tx
Definition: can_mcan.h:1148
 
struct can_mcan_rx_callback * std
Definition: can_mcan.h:1149
 
Bosch M_CAN driver internal configuration structure.
Definition: can_mcan.h:1208
 
const struct can_mcan_callbacks * callbacks
Definition: can_mcan.h:1210
 
uint16_t ts2
Definition: can_mcan.h:1218
 
size_t mram_size
Definition: can_mcan.h:1213
 
uint16_t prop_ts1
Definition: can_mcan.h:1217
 
uint16_t mram_offsets[8]
Definition: can_mcan.h:1212
 
const void * custom
Definition: can_mcan.h:1229
 
const struct device * phy
Definition: can_mcan.h:1227
 
uint16_t sjw
Definition: can_mcan.h:1215
 
uint32_t bus_speed
Definition: can_mcan.h:1214
 
uint16_t mram_elements[8]
Definition: can_mcan.h:1211
 
const struct can_mcan_ops * ops
Definition: can_mcan.h:1209
 
uint16_t sample_point
Definition: can_mcan.h:1216
 
uint32_t max_bitrate
Definition: can_mcan.h:1228
 
Bosch M_CAN driver internal data structure.
Definition: can_mcan.h:1032
 
struct k_mutex lock
Definition: can_mcan.h:1033
 
void * custom
Definition: can_mcan.h:1042
 
void * state_change_cb_data
Definition: can_mcan.h:1037
 
struct k_mutex tx_mtx
Definition: can_mcan.h:1035
 
struct k_sem tx_sem
Definition: can_mcan.h:1034
 
bool started
Definition: can_mcan.h:1038
 
can_state_change_callback_t state_change_cb
Definition: can_mcan.h:1036
 
Bosch M_CAN Extended Message ID Filter Element.
Definition: can_mcan.h:1021
 
uint32_t efid2
Definition: can_mcan.h:1024
 
uint32_t esync
Definition: can_mcan.h:1025
 
uint32_t efid1
Definition: can_mcan.h:1022
 
uint32_t efec
Definition: can_mcan.h:1023
 
uint32_t eft
Definition: can_mcan.h:1026
 
Bosch M_CAN driver front-end operations.
Definition: can_mcan.h:1119
 
can_mcan_read_reg_t read_reg
Definition: can_mcan.h:1120
 
can_mcan_write_reg_t write_reg
Definition: can_mcan.h:1121
 
can_mcan_write_mram_t write_mram
Definition: can_mcan.h:1123
 
can_mcan_clear_mram_t clear_mram
Definition: can_mcan.h:1124
 
can_mcan_read_mram_t read_mram
Definition: can_mcan.h:1122
 
Bosch M_CAN driver internal Rx callback structure.
Definition: can_mcan.h:1138
 
uint8_t flags
Definition: can_mcan.h:1141
 
void * user_data
Definition: can_mcan.h:1140
 
Bosch M_CAN Rx Buffer and FIFO Element header.
Definition: can_mcan.h:878
 
uint32_t pad2
Definition: can_mcan.h:889
 
uint32_t res
Definition: can_mcan.h:896
 
uint32_t brs
Definition: can_mcan.h:894
 
uint32_t dlc
Definition: can_mcan.h:893
 
uint32_t anmf
Definition: can_mcan.h:898
 
uint32_t esi
Definition: can_mcan.h:884
 
uint32_t fdf
Definition: can_mcan.h:895
 
uint32_t rtr
Definition: can_mcan.h:882
 
uint32_t xtd
Definition: can_mcan.h:883
 
uint32_t std_id
Definition: can_mcan.h:888
 
uint32_t ext_id
Definition: can_mcan.h:881
 
uint32_t rxts
Definition: can_mcan.h:892
 
uint32_t fidx
Definition: can_mcan.h:897
 
uint32_t pad1
Definition: can_mcan.h:887
 
Bosch M_CAN Rx Buffer and FIFO Element.
Definition: can_mcan.h:906
 
struct can_mcan_rx_fifo_hdr hdr
Definition: can_mcan.h:907
 
uint32_t data_32[16]
Definition: can_mcan.h:910
 
uint8_t data[64]
Definition: can_mcan.h:909
 
Bosch M_CAN Standard Message ID Filter Element.
Definition: can_mcan.h:1002
 
uint32_t sfid2
Definition: can_mcan.h:1003
 
uint32_t sfid1
Definition: can_mcan.h:1005
 
uint32_t sfec
Definition: can_mcan.h:1006
 
uint32_t res
Definition: can_mcan.h:1004
 
uint32_t sft
Definition: can_mcan.h:1007
 
Bosch M_CAN Tx Buffer Element header.
Definition: can_mcan.h:919
 
uint8_t tsce
Definition: can_mcan.h:937
 
uint32_t xtd
Definition: can_mcan.h:924
 
uint16_t res1
Definition: can_mcan.h:933
 
uint32_t rtr
Definition: can_mcan.h:923
 
uint8_t efc
Definition: can_mcan.h:938
 
uint8_t fdf
Definition: can_mcan.h:936
 
uint32_t std_id
Definition: can_mcan.h:929
 
uint8_t dlc
Definition: can_mcan.h:934
 
uint32_t pad2
Definition: can_mcan.h:930
 
uint32_t ext_id
Definition: can_mcan.h:922
 
uint8_t mm
Definition: can_mcan.h:939
 
uint32_t pad1
Definition: can_mcan.h:928
 
uint32_t esi
Definition: can_mcan.h:925
 
uint8_t brs
Definition: can_mcan.h:935
 
Bosch M_CAN Tx Buffer Element.
Definition: can_mcan.h:947
 
uint32_t data_32[16]
Definition: can_mcan.h:951
 
struct can_mcan_tx_buffer_hdr hdr
Definition: can_mcan.h:948
 
uint8_t data[64]
Definition: can_mcan.h:950
 
Bosch M_CAN driver internal Tx callback structure.
Definition: can_mcan.h:1130
 
void * user_data
Definition: can_mcan.h:1132
 
Bosch M_CAN Tx Event FIFO Element.
Definition: can_mcan.h:960
 
uint32_t rtr
Definition: can_mcan.h:964
 
uint8_t et
Definition: can_mcan.h:978
 
uint32_t ext_id
Definition: can_mcan.h:963
 
uint8_t fdf
Definition: can_mcan.h:977
 
uint32_t pad2
Definition: can_mcan.h:971
 
uint8_t mm
Definition: can_mcan.h:979
 
uint32_t pad1
Definition: can_mcan.h:969
 
uint32_t std_id
Definition: can_mcan.h:970
 
uint32_t esi
Definition: can_mcan.h:966
 
uint8_t dlc
Definition: can_mcan.h:975
 
uint32_t xtd
Definition: can_mcan.h:965
 
uint16_t txts
Definition: can_mcan.h:974
 
uint8_t brs
Definition: can_mcan.h:976
 
CAN bus timing structure.
Definition: can.h:274
 
Runtime device structure (in ROM) per driver instance.
Definition: device.h:380
 
const void * config
Definition: device.h:384
 
Definition: kernel.h:2822
 
Kernel timeout type.
Definition: sys_clock.h:65
 
static ALWAYS_INLINE void sys_write32(uint32_t data, mem_addr_t addr)
Definition: sys-io-common.h:70
 
static ALWAYS_INLINE uint32_t sys_read32(mem_addr_t addr)
Definition: sys-io-common.h:59
 
uintptr_t mm_reg_t
Definition: sys_io.h:20
 
uintptr_t mem_addr_t
Definition: sys_io.h:21
 
static const intptr_t user_data[5]
Definition: main.c:588