Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
net
can
c_can
c_can.h
Go to the documentation of this file.
1
/*
2
* CAN bus driver for Bosch C_CAN controller
3
*
4
* Copyright (C) 2010 ST Microelectronics
5
* Bhupesh Sharma <
[email protected]
>
6
*
7
* Borrowed heavily from the C_CAN driver originally written by:
8
* Copyright (C) 2007
9
* - Sascha Hauer, Marc Kleine-Budde, Pengutronix <
[email protected]
>
10
* - Simon Kallweit, intefo AG <
[email protected]
>
11
*
12
* Bosch C_CAN controller is compliant to CAN protocol version 2.0 part A and B.
13
* Bosch C_CAN user manual can be obtained from:
14
* http://www.semiconductors.bosch.de/media/en/pdf/ipmodules_1/c_can/
15
* users_manual_c_can.pdf
16
*
17
* This file is licensed under the terms of the GNU General Public
18
* License version 2. This program is licensed "as is" without any
19
* warranty of any kind, whether express or implied.
20
*/
21
22
#ifndef C_CAN_H
23
#define C_CAN_H
24
25
enum
reg
{
26
C_CAN_CTRL_REG
= 0,
27
C_CAN_CTRL_EX_REG
,
28
C_CAN_STS_REG
,
29
C_CAN_ERR_CNT_REG
,
30
C_CAN_BTR_REG
,
31
C_CAN_INT_REG
,
32
C_CAN_TEST_REG
,
33
C_CAN_BRPEXT_REG
,
34
C_CAN_IF1_COMREQ_REG
,
35
C_CAN_IF1_COMMSK_REG
,
36
C_CAN_IF1_MASK1_REG
,
37
C_CAN_IF1_MASK2_REG
,
38
C_CAN_IF1_ARB1_REG
,
39
C_CAN_IF1_ARB2_REG
,
40
C_CAN_IF1_MSGCTRL_REG
,
41
C_CAN_IF1_DATA1_REG
,
42
C_CAN_IF1_DATA2_REG
,
43
C_CAN_IF1_DATA3_REG
,
44
C_CAN_IF1_DATA4_REG
,
45
C_CAN_IF2_COMREQ_REG
,
46
C_CAN_IF2_COMMSK_REG
,
47
C_CAN_IF2_MASK1_REG
,
48
C_CAN_IF2_MASK2_REG
,
49
C_CAN_IF2_ARB1_REG
,
50
C_CAN_IF2_ARB2_REG
,
51
C_CAN_IF2_MSGCTRL_REG
,
52
C_CAN_IF2_DATA1_REG
,
53
C_CAN_IF2_DATA2_REG
,
54
C_CAN_IF2_DATA3_REG
,
55
C_CAN_IF2_DATA4_REG
,
56
C_CAN_TXRQST1_REG
,
57
C_CAN_TXRQST2_REG
,
58
C_CAN_NEWDAT1_REG
,
59
C_CAN_NEWDAT2_REG
,
60
C_CAN_INTPND1_REG
,
61
C_CAN_INTPND2_REG
,
62
C_CAN_MSGVAL1_REG
,
63
C_CAN_MSGVAL2_REG
,
64
};
65
66
static
const
u16
reg_map_c_can[] = {
67
[
C_CAN_CTRL_REG
] = 0x00,
68
[
C_CAN_STS_REG
] = 0x02,
69
[
C_CAN_ERR_CNT_REG
] = 0x04,
70
[
C_CAN_BTR_REG
] = 0x06,
71
[
C_CAN_INT_REG
] = 0x08,
72
[
C_CAN_TEST_REG
] = 0x0A,
73
[
C_CAN_BRPEXT_REG
] = 0x0C,
74
[
C_CAN_IF1_COMREQ_REG
] = 0x10,
75
[
C_CAN_IF1_COMMSK_REG
] = 0x12,
76
[
C_CAN_IF1_MASK1_REG
] = 0x14,
77
[
C_CAN_IF1_MASK2_REG
] = 0x16,
78
[
C_CAN_IF1_ARB1_REG
] = 0x18,
79
[
C_CAN_IF1_ARB2_REG
] = 0x1A,
80
[
C_CAN_IF1_MSGCTRL_REG
] = 0x1C,
81
[
C_CAN_IF1_DATA1_REG
] = 0x1E,
82
[
C_CAN_IF1_DATA2_REG
] = 0x20,
83
[
C_CAN_IF1_DATA3_REG
] = 0x22,
84
[
C_CAN_IF1_DATA4_REG
] = 0x24,
85
[
C_CAN_IF2_COMREQ_REG
] = 0x40,
86
[
C_CAN_IF2_COMMSK_REG
] = 0x42,
87
[
C_CAN_IF2_MASK1_REG
] = 0x44,
88
[
C_CAN_IF2_MASK2_REG
] = 0x46,
89
[
C_CAN_IF2_ARB1_REG
] = 0x48,
90
[
C_CAN_IF2_ARB2_REG
] = 0x4A,
91
[
C_CAN_IF2_MSGCTRL_REG
] = 0x4C,
92
[
C_CAN_IF2_DATA1_REG
] = 0x4E,
93
[
C_CAN_IF2_DATA2_REG
] = 0x50,
94
[
C_CAN_IF2_DATA3_REG
] = 0x52,
95
[
C_CAN_IF2_DATA4_REG
] = 0x54,
96
[
C_CAN_TXRQST1_REG
] = 0x80,
97
[
C_CAN_TXRQST2_REG
] = 0x82,
98
[
C_CAN_NEWDAT1_REG
] = 0x90,
99
[
C_CAN_NEWDAT2_REG
] = 0x92,
100
[
C_CAN_INTPND1_REG
] = 0xA0,
101
[
C_CAN_INTPND2_REG
] = 0xA2,
102
[
C_CAN_MSGVAL1_REG
] = 0xB0,
103
[
C_CAN_MSGVAL2_REG
] = 0xB2,
104
};
105
106
static
const
u16
reg_map_d_can[] = {
107
[
C_CAN_CTRL_REG
] = 0x00,
108
[
C_CAN_CTRL_EX_REG
] = 0x02,
109
[
C_CAN_STS_REG
] = 0x04,
110
[
C_CAN_ERR_CNT_REG
] = 0x08,
111
[
C_CAN_BTR_REG
] = 0x0C,
112
[
C_CAN_BRPEXT_REG
] = 0x0E,
113
[
C_CAN_INT_REG
] = 0x10,
114
[
C_CAN_TEST_REG
] = 0x14,
115
[
C_CAN_TXRQST1_REG
] = 0x88,
116
[
C_CAN_TXRQST2_REG
] = 0x8A,
117
[
C_CAN_NEWDAT1_REG
] = 0x9C,
118
[
C_CAN_NEWDAT2_REG
] = 0x9E,
119
[
C_CAN_INTPND1_REG
] = 0xB0,
120
[
C_CAN_INTPND2_REG
] = 0xB2,
121
[
C_CAN_MSGVAL1_REG
] = 0xC4,
122
[
C_CAN_MSGVAL2_REG
] = 0xC6,
123
[
C_CAN_IF1_COMREQ_REG
] = 0x100,
124
[
C_CAN_IF1_COMMSK_REG
] = 0x102,
125
[
C_CAN_IF1_MASK1_REG
] = 0x104,
126
[
C_CAN_IF1_MASK2_REG
] = 0x106,
127
[
C_CAN_IF1_ARB1_REG
] = 0x108,
128
[
C_CAN_IF1_ARB2_REG
] = 0x10A,
129
[
C_CAN_IF1_MSGCTRL_REG
] = 0x10C,
130
[
C_CAN_IF1_DATA1_REG
] = 0x110,
131
[
C_CAN_IF1_DATA2_REG
] = 0x112,
132
[
C_CAN_IF1_DATA3_REG
] = 0x114,
133
[
C_CAN_IF1_DATA4_REG
] = 0x116,
134
[
C_CAN_IF2_COMREQ_REG
] = 0x120,
135
[
C_CAN_IF2_COMMSK_REG
] = 0x122,
136
[
C_CAN_IF2_MASK1_REG
] = 0x124,
137
[
C_CAN_IF2_MASK2_REG
] = 0x126,
138
[
C_CAN_IF2_ARB1_REG
] = 0x128,
139
[
C_CAN_IF2_ARB2_REG
] = 0x12A,
140
[
C_CAN_IF2_MSGCTRL_REG
] = 0x12C,
141
[
C_CAN_IF2_DATA1_REG
] = 0x130,
142
[
C_CAN_IF2_DATA2_REG
] = 0x132,
143
[
C_CAN_IF2_DATA3_REG
] = 0x134,
144
[
C_CAN_IF2_DATA4_REG
] = 0x136,
145
};
146
147
enum
c_can_dev_id
{
148
BOSCH_C_CAN_PLATFORM
,
149
BOSCH_C_CAN
,
150
BOSCH_D_CAN
,
151
};
152
153
/* c_can private data structure */
154
struct
c_can_priv
{
155
struct
can_priv
can
;
/* must be the first member */
156
struct
napi_struct
napi
;
157
struct
net_device
*
dev
;
158
struct
device
*
device
;
159
int
tx_object
;
160
int
current_status
;
161
int
last_status
;
162
u16
(*
read_reg
) (
struct
c_can_priv
*
priv
,
enum
reg
index
);
163
void
(*
write_reg
) (
struct
c_can_priv
*
priv
,
enum
reg
index
,
u16
val
);
164
void
__iomem
*
base
;
165
const
u16
*
regs
;
166
unsigned
long
irq_flags
;
/* for request_irq() */
167
unsigned
int
tx_next
;
168
unsigned
int
tx_echo
;
169
void
*
priv
;
/* for board-specific data */
170
u16
irqstatus
;
171
enum
c_can_dev_id
type
;
172
};
173
174
struct
net_device
*
alloc_c_can_dev
(
void
);
175
void
free_c_can_dev
(
struct
net_device
*
dev
);
176
int
register_c_can_dev
(
struct
net_device
*
dev
);
177
void
unregister_c_can_dev
(
struct
net_device
*
dev
);
178
179
#ifdef CONFIG_PM
180
int
c_can_power_up(
struct
net_device
*
dev
);
181
int
c_can_power_down(
struct
net_device
*
dev
);
182
#endif
183
184
#endif
/* C_CAN_H */
Generated on Thu Jan 10 2013 13:57:39 for Linux Kernel by
1.8.2