4 * Copyright (C) 2005 Marc Kleine-Budde, Pengutronix
5 * Copyright (C) 2006 Andrey Volkov, Varma Electronics
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the version 2 of the GNU General Public License
9 * as published by the Free Software Foundation
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 #include <linux/module.h>
22 #include <linux/netdevice.h>
23 #include <linux/if_arp.h>
25 #include <linux/can.h>
27 #include "can_device.h"
31 Baud rate calculated with next formula:
32 baud = frq/(brp*(1 + prop_seg+ phase_seg1 + phase_seg2))
34 This calc function based on work of Florian Hartwich and Armin Bassemi
35 "The Configuration of the CAN Bit Timing"
36 (http://www.semiconductors.bosch.de/pdf/CiA99Paper.pdf)
40 bit_time_nsec - expected bit time in nanosecs
43 bit_time - calculated time segments, for meaning of
44 each field read CAN standart.
47 #define DEFAULT_MAX_BRP 64U
48 #define DEFAULT_MAX_SJW 4U
50 /* All below values in tq units */
51 #define MAX_BIT_TIME 25U
52 #define MIN_BIT_TIME 8U
53 #define MAX_PROP_SEG 8U
54 #define MAX_PHASE_SEG1 8U
55 #define MAX_PHASE_SEG2 8U
57 int can_calc_bit_time(struct can_device *can, u32 baudrate,
58 struct can_bittime_std *bit_time)
60 int best_error = -1; /* Ariphmetic error */
61 int df, best_df = -1; /* oscillator's tolerance range, greater is better*/
62 u32 quanta; /*in tq units*/
63 u32 brp, phase_seg1, phase_seg2, sjw, prop_seg;
64 u32 brp_min, brp_max, brp_expected;
67 /* baudrate range [1baud,1Mbaud] */
68 if (baudrate == 0 || baudrate > 1000000UL)
71 tmp = (u64)can->can_sys_clock*1000;
72 do_div(tmp, baudrate);
73 brp_expected = (u32)tmp;
75 brp_min = brp_expected/(1000*MAX_BIT_TIME);
78 if(brp_min > can->max_brp)
81 brp_max = (brp_expected+500*MIN_BIT_TIME)/(1000*MIN_BIT_TIME);
84 if(brp_max > can->max_brp)
85 brp_max = can->max_brp;
87 for(brp = brp_min; brp <= brp_max; brp++)
89 quanta = brp_expected/(brp*1000);
90 if(quanta<MAX_BIT_TIME && quanta*brp*1000 != brp_expected)
92 if(quanta<MIN_BIT_TIME || quanta>MAX_BIT_TIME)
95 phase_seg2 = min( (quanta-3)/2, MAX_PHASE_SEG2);
96 for(sjw = can->max_sjw; sjw > 0; sjw--)
98 for(; phase_seg2>sjw; phase_seg2--)
101 phase_seg1 = (phase_seg2%2)?phase_seg2-1:phase_seg2;
102 prop_seg = quanta-1-phase_seg2-phase_seg1;
103 /* FIXME: support of longer lines (i.e. bigger prop_seg)
104 is more prefered than support of cheap oscillators
105 (i.e. bigger df/phase_seg1/phase_seg2)
107 if( prop_seg < phase_seg1)
109 if( prop_seg > MAX_PROP_SEG )
112 err1 = phase_seg1*brp*500*1000/
113 (13*brp_expected-phase_seg2*brp*1000);
114 err2 = sjw*brp*50*1000/brp_expected;
118 unsigned error = abs(brp_expected*10/
119 (brp*(1+prop_seg+phase_seg1+phase_seg2))-10000);
121 if( error > 10 || error > best_error )
124 if( error == best_error && prop_seg < bit_time->prop_seg )
130 bit_time->prop_seg = prop_seg;
131 bit_time->phase_seg1 = phase_seg1;
132 bit_time->phase_seg2 = phase_seg2;
134 bit_time->sam = ( bit_time->phase_seg1 > 3 )? 1 : 0;
145 EXPORT_SYMBOL(can_calc_bit_time);
147 static struct net_device_stats *can_get_stats(struct net_device *dev)
149 return &ND2CAN(dev)->net_stats;
152 static int can_ioctl(struct net_device *ndev, struct ifreq *ifr, int cmd)
154 struct can_device *can = ND2CAN(ndev);
155 struct can_bittime *bt = (struct can_bittime *)&ifr->ifr_ifru;
156 int ret = -EOPNOTSUPP;
157 ulong *baudrate = (ulong *)&ifr->ifr_ifru;
159 dev_dbg(ND2D(ndev), "(%s) 0x%08x %p\n", __FUNCTION__, cmd, &ifr->ifr_ifru);
162 case SIOCSCANBAUDRATE:
163 if (can->do_set_bit_time) {
164 struct can_bittime bit_time;
165 ret = can_calc_bit_time(can, *baudrate, &bit_time.std);
168 bit_time.type = CAN_BITTIME_STD;
169 ret = can->do_set_bit_time(can, &bit_time);
171 can->baudrate = *baudrate;
172 can->bit_time = bit_time;
176 case SIOCGCANBAUDRATE:
177 *baudrate = can->baudrate;
180 case SIOCSCANCUSTOMBITTIME:
181 if (can->do_set_bit_time) {
182 ret = can->do_set_bit_time(can, bt);
185 if (bt->type == CAN_BITTIME_STD && bt->std.brp) {
186 can->baudrate = can->can_sys_clock/(bt->std.brp*
187 (1+bt->std.prop_seg+bt->std.phase_seg1+bt->std.phase_seg2));
190 can->baudrate = CAN_BAUDRATE_UNKNOWN;
194 case SIOCGCANCUSTOMBITTIME:
199 if (can->do_set_mode) {
200 can_mode_t mode = *((can_mode_t *)(&ifr->ifr_ifru));
201 if ( mode == CAN_MODE_START &&
202 can->baudrate == CAN_BAUDRATE_UNCONFIGURED) {
203 dev_info(ND2D(ndev), "Impossible to start on UNKNOWN speed\n");
207 return can->do_set_mode(can, mode);
211 *((can_mode_t *)(&ifr->ifr_ifru)) = can->mode;
214 case SIOCSCANCTRLMODE:
215 if (can->do_set_ctrlmode) {
216 can_ctrlmode_t ctrlmode = *((can_ctrlmode_t *)(&ifr->ifr_ifru));
217 return can->do_set_ctrlmode(can, ctrlmode);
220 case SIOCGCANCTRLMODE:
221 *((can_ctrlmode_t *)(&ifr->ifr_ifru)) = can->ctrlmode;
229 if(can->do_get_state)
230 return can->do_get_state(can, (can_state_t *)(&ifr->ifr_ifru));
233 *((struct can_device_stats *)(&ifr->ifr_ifru)) = can->can_stats;
241 static void can_setup(struct net_device *dev)
243 dev->type = ARPHRD_CAN;
245 dev->change_mtu = NULL;
246 dev->hard_header = NULL;
247 dev->rebuild_header = NULL;
248 dev->set_mac_address = NULL;
249 dev->hard_header_cache = NULL;
250 dev->header_cache_update = NULL;
251 dev->hard_header_parse = NULL;
253 dev->hard_header_len = 0;
255 dev->get_stats = can_get_stats;
256 dev->mtu = sizeof(struct can_frame);
257 dev->do_ioctl = can_ioctl;
259 dev->tx_queue_len = 10;
261 /* New-style flags. */
262 dev->flags = IFF_NOARP;
263 dev->features = NETIF_F_NO_CSUM;
267 * Funciton alloc_candev
268 * Allocates and sets up an CAN device in a manner similar to
271 struct can_device *alloc_candev(int sizeof_priv)
273 struct net_device *ndev;
274 struct can_device *can;
276 ndev = alloc_netdev(sizeof_priv+sizeof(struct can_device),
281 can = netdev_priv(ndev);
287 can->baudrate = CAN_BAUDRATE_UNCONFIGURED;
288 can->max_brp = DEFAULT_MAX_BRP;
289 can->max_sjw = DEFAULT_MAX_SJW;
290 spin_lock_init(&can->irq_lock);
294 EXPORT_SYMBOL(alloc_candev);
296 void free_candev(struct can_device *can)
298 free_netdev(can->net_dev);
300 EXPORT_SYMBOL(free_candev);