|
20 | 20 | #include <linux/can/dev.h>
|
21 | 21 | #include <linux/can/error.h>
|
22 | 22 |
|
23 |
| -#include <asm/bfin_can.h> |
24 | 23 | #include <asm/portmux.h>
|
25 | 24 |
|
26 | 25 | #define DRV_NAME "bfin_can"
|
27 | 26 | #define BFIN_CAN_TIMEOUT 100
|
28 | 27 | #define TX_ECHO_SKB_MAX 1
|
29 | 28 |
|
| 29 | +/* transmit and receive channels */ |
| 30 | +#define TRANSMIT_CHL 24 |
| 31 | +#define RECEIVE_STD_CHL 0 |
| 32 | +#define RECEIVE_EXT_CHL 4 |
| 33 | +#define RECEIVE_RTR_CHL 8 |
| 34 | +#define RECEIVE_EXT_RTR_CHL 12 |
| 35 | +#define MAX_CHL_NUMBER 32 |
| 36 | + |
| 37 | +/* All Blackfin system MMRs are padded to 32bits even if the register |
| 38 | + * itself is only 16bits. So use a helper macro to streamline this |
| 39 | + */ |
| 40 | +#define __BFP(m) u16 m; u16 __pad_##m |
| 41 | + |
| 42 | +/* bfin can registers layout */ |
| 43 | +struct bfin_can_mask_regs { |
| 44 | + __BFP(aml); |
| 45 | + __BFP(amh); |
| 46 | +}; |
| 47 | + |
| 48 | +struct bfin_can_channel_regs { |
| 49 | + /* data[0,2,4,6] -> data{0,1,2,3} while data[1,3,5,7] is padding */ |
| 50 | + u16 data[8]; |
| 51 | + __BFP(dlc); |
| 52 | + __BFP(tsv); |
| 53 | + __BFP(id0); |
| 54 | + __BFP(id1); |
| 55 | +}; |
| 56 | + |
| 57 | +struct bfin_can_regs { |
| 58 | + /* global control and status registers */ |
| 59 | + __BFP(mc1); /* offset 0x00 */ |
| 60 | + __BFP(md1); /* offset 0x04 */ |
| 61 | + __BFP(trs1); /* offset 0x08 */ |
| 62 | + __BFP(trr1); /* offset 0x0c */ |
| 63 | + __BFP(ta1); /* offset 0x10 */ |
| 64 | + __BFP(aa1); /* offset 0x14 */ |
| 65 | + __BFP(rmp1); /* offset 0x18 */ |
| 66 | + __BFP(rml1); /* offset 0x1c */ |
| 67 | + __BFP(mbtif1); /* offset 0x20 */ |
| 68 | + __BFP(mbrif1); /* offset 0x24 */ |
| 69 | + __BFP(mbim1); /* offset 0x28 */ |
| 70 | + __BFP(rfh1); /* offset 0x2c */ |
| 71 | + __BFP(opss1); /* offset 0x30 */ |
| 72 | + u32 __pad1[3]; |
| 73 | + __BFP(mc2); /* offset 0x40 */ |
| 74 | + __BFP(md2); /* offset 0x44 */ |
| 75 | + __BFP(trs2); /* offset 0x48 */ |
| 76 | + __BFP(trr2); /* offset 0x4c */ |
| 77 | + __BFP(ta2); /* offset 0x50 */ |
| 78 | + __BFP(aa2); /* offset 0x54 */ |
| 79 | + __BFP(rmp2); /* offset 0x58 */ |
| 80 | + __BFP(rml2); /* offset 0x5c */ |
| 81 | + __BFP(mbtif2); /* offset 0x60 */ |
| 82 | + __BFP(mbrif2); /* offset 0x64 */ |
| 83 | + __BFP(mbim2); /* offset 0x68 */ |
| 84 | + __BFP(rfh2); /* offset 0x6c */ |
| 85 | + __BFP(opss2); /* offset 0x70 */ |
| 86 | + u32 __pad2[3]; |
| 87 | + __BFP(clock); /* offset 0x80 */ |
| 88 | + __BFP(timing); /* offset 0x84 */ |
| 89 | + __BFP(debug); /* offset 0x88 */ |
| 90 | + __BFP(status); /* offset 0x8c */ |
| 91 | + __BFP(cec); /* offset 0x90 */ |
| 92 | + __BFP(gis); /* offset 0x94 */ |
| 93 | + __BFP(gim); /* offset 0x98 */ |
| 94 | + __BFP(gif); /* offset 0x9c */ |
| 95 | + __BFP(control); /* offset 0xa0 */ |
| 96 | + __BFP(intr); /* offset 0xa4 */ |
| 97 | + __BFP(version); /* offset 0xa8 */ |
| 98 | + __BFP(mbtd); /* offset 0xac */ |
| 99 | + __BFP(ewr); /* offset 0xb0 */ |
| 100 | + __BFP(esr); /* offset 0xb4 */ |
| 101 | + u32 __pad3[2]; |
| 102 | + __BFP(ucreg); /* offset 0xc0 */ |
| 103 | + __BFP(uccnt); /* offset 0xc4 */ |
| 104 | + __BFP(ucrc); /* offset 0xc8 */ |
| 105 | + __BFP(uccnf); /* offset 0xcc */ |
| 106 | + u32 __pad4[1]; |
| 107 | + __BFP(version2); /* offset 0xd4 */ |
| 108 | + u32 __pad5[10]; |
| 109 | + |
| 110 | + /* channel(mailbox) mask and message registers */ |
| 111 | + struct bfin_can_mask_regs msk[MAX_CHL_NUMBER]; /* offset 0x100 */ |
| 112 | + struct bfin_can_channel_regs chl[MAX_CHL_NUMBER]; /* offset 0x200 */ |
| 113 | +}; |
| 114 | + |
| 115 | +#undef __BFP |
| 116 | + |
| 117 | +#define SRS 0x0001 /* Software Reset */ |
| 118 | +#define SER 0x0008 /* Stuff Error */ |
| 119 | +#define BOIM 0x0008 /* Enable Bus Off Interrupt */ |
| 120 | +#define CCR 0x0080 /* CAN Configuration Mode Request */ |
| 121 | +#define CCA 0x0080 /* Configuration Mode Acknowledge */ |
| 122 | +#define SAM 0x0080 /* Sampling */ |
| 123 | +#define AME 0x8000 /* Acceptance Mask Enable */ |
| 124 | +#define RMLIM 0x0080 /* Enable RX Message Lost Interrupt */ |
| 125 | +#define RMLIS 0x0080 /* RX Message Lost IRQ Status */ |
| 126 | +#define RTR 0x4000 /* Remote Frame Transmission Request */ |
| 127 | +#define BOIS 0x0008 /* Bus Off IRQ Status */ |
| 128 | +#define IDE 0x2000 /* Identifier Extension */ |
| 129 | +#define EPIS 0x0004 /* Error-Passive Mode IRQ Status */ |
| 130 | +#define EPIM 0x0004 /* Enable Error-Passive Mode Interrupt */ |
| 131 | +#define EWTIS 0x0001 /* TX Error Count IRQ Status */ |
| 132 | +#define EWRIS 0x0002 /* RX Error Count IRQ Status */ |
| 133 | +#define BEF 0x0040 /* Bit Error Flag */ |
| 134 | +#define FER 0x0080 /* Form Error Flag */ |
| 135 | +#define SMR 0x0020 /* Sleep Mode Request */ |
| 136 | +#define SMACK 0x0008 /* Sleep Mode Acknowledge */ |
| 137 | + |
30 | 138 | /*
|
31 | 139 | * bfin can private data
|
32 | 140 | */
|
|
0 commit comments