4 * Header file for the Linux CAN-bus driver.
5 * Written by Sergei Sharonov sharonov@halliburton.com
6 * sja1000p was used as a prototype
7 * This software is released under the GPL-License.
8 * Version lincan-0.3 Feb 2006
11 // Fixup for old kernels - always defined for 2.6
13 #define container_of(ptr, type, member) ({ \
14 const typeof( ((type *)0)->member ) *__mptr = (ptr); \
15 (type *)( (char *)__mptr - offsetof(type,member) );})
19 int mcp2515_chip_config(struct canchip_t *chip);
20 int mcp2515_extended_mask(struct canchip_t *chip, unsigned long code, unsigned long mask);
21 int mcp2515_baud_rate(struct canchip_t *chip, int rate, int clock, int sjw,
22 int sampl_pt, int flags);
23 int mcp2515_pre_read_config(struct canchip_t *chip, struct msgobj_t *obj);
24 int mcp2515_pre_write_config(struct canchip_t *chip, struct msgobj_t *obj,
25 struct canmsg_t *msg);
26 int mcp2515_send_msg(struct canchip_t *chip, struct msgobj_t *obj,
27 struct canmsg_t *msg);
28 int mcp2515_fill_chipspecops(struct canchip_t *chip);
29 int mcp2515_irq_handler(int irq, struct canchip_t *chip);
31 int mcp2515_disp(char *buf, char **start, off_t offset,
32 int count, int *eof, void *data);
43 } __attribute__((packed)) MCP2515_FRAME;
45 #define SPI_BUF_LEN 16 /* 13+2 bytes max transfer len, 1 spare */
59 #define MCP2515_STATUS_SHUTDOWN (1)
62 struct canchip_t *chip;
64 uint8_t spi_buf[SPI_BUF_LEN];
65 struct work_struct workqueue_handler;
66 struct tasklet_struct tasklet_handler;
67 MCP2515_ERRCNT errcnt;
75 /// TXBnCTRL - TRANSMIT BUFFER n CONTROL REGISTERS
76 MCP2515_TXB0CTRL = 0x30,
77 MCP2515_TXB1CTRL = 0x40,
78 MCP2515_TXB2CTRL = 0x50,
80 /// TXRTSCTRL - TXnRTS PIN CONTROL AND STATUS REGISTER
81 MCP2515_TXRTSCTRL = 0x0d,
83 /// TXBnSIDH - TRANSMIT BUFFER n STANDARD IDENTIFIER HIGH
84 MCP2515_TXB0SIDH = 0x31,
85 MCP2515_TXB1SIDH = 0x41,
86 MCP2515_TXB2SIDH = 0x51,
88 /// TXBnSIDL - TRANSMIT BUFFER n STANDARD IDENTIFIER LOW
89 MCP2515_TXB0SIDL = 0x32,
90 MCP2515_TXB1SIDL = 0x42,
91 MCP2515_TXB2SIDL = 0x52,
93 /// TXBnEID8 - TRANSMIT BUFFER n EXTENDED IDENTIFIER HIGH
94 MCP2515_TXB0EID8 = 0x33,
95 MCP2515_TXB1EID8 = 0x43,
96 MCP2515_TXB2EID8 = 0x53,
98 /// TXBnEID0 - TRANSMIT BUFFER n EXTENDED IDENTIFIER LOW
99 MCP2515_TXB0EID0 = 0x34,
100 MCP2515_TXB1EID0 = 0x44,
101 MCP2515_TXB2EID0 = 0x54,
103 /// TXBnDLC - TRANSMIT BUFFER n DATA LENGTH CODE
104 MCP2515_TXB0DLC = 0x35,
105 MCP2515_TXB1DLC = 0x45,
106 MCP2515_TXB2DLC = 0x55,
108 /// TXBnDm - TRANSMIT BUFFER n DATA
109 MCP2515_TXB0DATA = 0x36, /* 0x36-0x3d */
110 MCP2515_TXB1DATA = 0x46, /* 0x46-0x4d */
111 MCP2515_TXB2DATA = 0x56, /* 0x56-0x5d */
113 /// RXB0CTRL - RECEIVE BUFFER CONTROL
114 MCP2515_RXB0CTRL = 0x60,
115 MCP2515_RXB1CTRL = 0x70,
117 /// BFPCTRL - RXnBF PIN CONTROL AND STATUS
118 MCP2515_BFPCTRL = 0x0c,
120 /// RXBnSIDH - RECEIVE BUFFER n STANDARD IDENTIFIER HIGH
121 MCP2515_RXB0SIDH = 0x61,
122 MCP2515_RXB1SIDH = 0x71,
124 /// RXBnSIDL - RECEIVE BUFFER n STANDARD IDENTIFIER LOW
125 MCP2515_RXB0SIDL = 0x62,
126 MCP2515_RXB1SIDL = 0x72,
128 /// RXBnEID8 - RECEIVE BUFFER n EXTENDED IDENTIFIER HIGH
129 MCP2515_RXB0EID8 = 63,
130 MCP2515_RXB1EID8 = 73,
132 /// RXBnEID0 - RECEIVE BUFFER n EXTENDED IDENTIFIER LOW
133 MCP2515_RXB0EID0 = 64,
134 MCP2515_RXB1EID0 = 74,
136 /// RXBnDLC - RECEIVE BUFFER n DATA LENGHT CODE
137 MCP2515_RXB0DLC = 65,
138 MCP2515_RXB1DLC = 75,
140 /// RXBnDM - RECEIVE BUFFER n DATA
141 MCP2515_RXB0DATA = 0x66, /* 0x66-0x6d */
142 MCP2515_RXB1DATA = 0x76, /* 0x76-0x7d */
144 /// RXFnSIDH - FILTER n STANDARD IDENTIFIER HIGH
145 MCP2515_RXF0SIDH = 0x00,
146 MCP2515_RXF1SIDH = 0x04,
147 MCP2515_RXF2SIDH = 0x08,
148 MCP2515_RXF3SIDH = 0x10,
149 MCP2515_RXF4SIDH = 0x14,
150 MCP2515_RXF5SIDH = 0x18,
152 /// RXFnSIDL - FILTER n STANDARD IDENTIFIER LOW
153 MCP2515_RXF0SIDL = 0x01,
154 MCP2515_RXF1SIDL = 0x05,
155 MCP2515_RXF2SIDL = 0x09,
156 MCP2515_RXF3SIDL = 0x11,
157 MCP2515_RXF4SIDL = 0x15,
158 MCP2515_RXF5SIDL = 0x19,
160 /// RXFnEID8 - FILTER n EXTENDED IDENTIFIER HIGH
161 MCP2515_RXF0EID8 = 0x02,
162 MCP2515_RXF1EID8 = 0x06,
163 MCP2515_RXF2EID8 = 0x0a,
164 MCP2515_RXF3EID8 = 0x12,
165 MCP2515_RXF4EID8 = 0x16,
166 MCP2515_RXF5EID8 = 0x1a,
168 /// RXFnEID0 - FILTER n EXTENDED IDENTIFIER LOW
169 MCP2515_RXF0EID0 = 0x03,
170 MCP2515_RXF1EID0 = 0x07,
171 MCP2515_RXF2EID0 = 0x0b,
172 MCP2515_RXF3EID0 = 0x13,
173 MCP2515_RXF4EID0 = 0x17,
174 MCP2515_RXF5EID0 = 0x1b,
176 /// RXMnSIDH - MASK n STANDARD IDENTIFIER HIGH
177 MCP2515_RXM0SIDH = 0x20,
178 MCP2515_RXM1SIDH = 0x24,
180 /// RXMnSIDL - MASK n STANDARD IDENTIFIER LOW
181 MCP2515_RXM0SIDL = 0x21,
182 MCP2515_RXM1SIDL = 0x25,
184 /// RXMnEID8 - MASK n EXTENDED IDENTIFIER HIGH
185 MCP2515_RXM0EID8 = 0x22,
186 MCP2515_RXM1EID8 = 0x26,
188 /// RXMnEID0 - MASK n EXTENDED IDENTIFIER LOW
189 MCP2515_RXM0EID0 = 0x23,
190 MCP2515_RXM1EID0 = 0x27,
192 /// CNFn - CONFIGURATION REGS
197 /// TEC - TRANSMIT ERROR COUNTER
200 /// REC - RECEIVER ERROR COUNTER
203 /// EFLG - ERROR FLAG
206 /// CANINTE - INTERRUPT ENABLE
207 MCP2515_CANINTE = 0x2b,
209 /// CANINTF - INTERRUPT FLAG
210 MCP2515_CANINTF = 0x2c,
212 /// CANCTRL - CAN CONTROL REGISTER
213 MCP2515_CANCTRL = 0x0f,
215 /// CANSTAT - CAN STATUS REGISTER
216 MCP2515_CANSTAT = 0x0e
220 /** Mode Register Bits */
222 mcpMOD_NORM = 0<<5, // Normal Operation Mode
223 mcpMOD_SLEEP = 1<<5, // Sleep Mode
224 mcpMOD_LOOPBACK = 2<<5, // Loopback Mode
225 mcpMOD_LISTEN = 3<<5, // Listen-only Mode
226 mcpMOD_CONFIG = 4<<5, // Configuration Mode
227 mcpMOD_MASK = 7<<5 // Mask for mod bits
230 /* BFPCTRL - RXnBF PIN CONTROL AND STATUS */
239 enum mcp2515_RXBSIDL {
245 enum mcp2515_RXBDLC {
251 enum mcp2515_RXB0CTRL {
268 enum mcp2515_TXBCTRL {
275 enum mcp2515_TXBSIDL {
291 /* Error flags EFLG */