linux/drivers/net/can/dev.c
<<
>>
Prefs
   1/*
   2 * Copyright (C) 2005 Marc Kleine-Budde, Pengutronix
   3 * Copyright (C) 2006 Andrey Volkov, Varma Electronics
   4 * Copyright (C) 2008-2009 Wolfgang Grandegger <wg@grandegger.com>
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the version 2 of the GNU General Public License
   8 * as published by the Free Software Foundation
   9 *
  10 * This program is distributed in the hope that it will be useful,
  11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13 * GNU General Public License for more details.
  14 *
  15 * You should have received a copy of the GNU General Public License
  16 * along with this program; if not, write to the Free Software
  17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  18 */
  19
  20#include <linux/module.h>
  21#include <linux/kernel.h>
  22#include <linux/netdevice.h>
  23#include <linux/if_arp.h>
  24#include <linux/can.h>
  25#include <linux/can/dev.h>
  26#include <linux/can/netlink.h>
  27#include <net/rtnetlink.h>
  28
  29#define MOD_DESC "CAN device driver interface"
  30
  31MODULE_DESCRIPTION(MOD_DESC);
  32MODULE_LICENSE("GPL v2");
  33MODULE_AUTHOR("Wolfgang Grandegger <wg@grandegger.com>");
  34
  35#ifdef CONFIG_CAN_CALC_BITTIMING
  36#define CAN_CALC_MAX_ERROR 50 /* in one-tenth of a percent */
  37
  38/*
  39 * Bit-timing calculation derived from:
  40 *
  41 * Code based on LinCAN sources and H8S2638 project
  42 * Copyright 2004-2006 Pavel Pisa - DCE FELK CVUT cz
  43 * Copyright 2005      Stanislav Marek
  44 * email: pisa@cmp.felk.cvut.cz
  45 *
  46 * Calculates proper bit-timing parameters for a specified bit-rate
  47 * and sample-point, which can then be used to set the bit-timing
  48 * registers of the CAN controller. You can find more information
  49 * in the header file linux/can/netlink.h.
  50 */
  51static int can_update_spt(const struct can_bittiming_const *btc,
  52                          int sampl_pt, int tseg, int *tseg1, int *tseg2)
  53{
  54        *tseg2 = tseg + 1 - (sampl_pt * (tseg + 1)) / 1000;
  55        if (*tseg2 < btc->tseg2_min)
  56                *tseg2 = btc->tseg2_min;
  57        if (*tseg2 > btc->tseg2_max)
  58                *tseg2 = btc->tseg2_max;
  59        *tseg1 = tseg - *tseg2;
  60        if (*tseg1 > btc->tseg1_max) {
  61                *tseg1 = btc->tseg1_max;
  62                *tseg2 = tseg - *tseg1;
  63        }
  64        return 1000 * (tseg + 1 - *tseg2) / (tseg + 1);
  65}
  66
  67static int can_calc_bittiming(struct net_device *dev, struct can_bittiming *bt)
  68{
  69        struct can_priv *priv = netdev_priv(dev);
  70        const struct can_bittiming_const *btc = priv->bittiming_const;
  71        long rate, best_rate = 0;
  72        long best_error = 1000000000, error = 0;
  73        int best_tseg = 0, best_brp = 0, brp = 0;
  74        int tsegall, tseg = 0, tseg1 = 0, tseg2 = 0;
  75        int spt_error = 1000, spt = 0, sampl_pt;
  76        u64 v64;
  77
  78        if (!priv->bittiming_const)
  79                return -ENOTSUPP;
  80
  81        /* Use CIA recommended sample points */
  82        if (bt->sample_point) {
  83                sampl_pt = bt->sample_point;
  84        } else {
  85                if (bt->bitrate > 800000)
  86                        sampl_pt = 750;
  87                else if (bt->bitrate > 500000)
  88                        sampl_pt = 800;
  89                else
  90                        sampl_pt = 875;
  91        }
  92
  93        /* tseg even = round down, odd = round up */
  94        for (tseg = (btc->tseg1_max + btc->tseg2_max) * 2 + 1;
  95             tseg >= (btc->tseg1_min + btc->tseg2_min) * 2; tseg--) {
  96                tsegall = 1 + tseg / 2;
  97                /* Compute all possible tseg choices (tseg=tseg1+tseg2) */
  98                brp = priv->clock.freq / (tsegall * bt->bitrate) + tseg % 2;
  99                /* chose brp step which is possible in system */
 100                brp = (brp / btc->brp_inc) * btc->brp_inc;
 101                if ((brp < btc->brp_min) || (brp > btc->brp_max))
 102                        continue;
 103                rate = priv->clock.freq / (brp * tsegall);
 104                error = bt->bitrate - rate;
 105                /* tseg brp biterror */
 106                if (error < 0)
 107                        error = -error;
 108                if (error > best_error)
 109                        continue;
 110                best_error = error;
 111                if (error == 0) {
 112                        spt = can_update_spt(btc, sampl_pt, tseg / 2,
 113                                             &tseg1, &tseg2);
 114                        error = sampl_pt - spt;
 115                        if (error < 0)
 116                                error = -error;
 117                        if (error > spt_error)
 118                                continue;
 119                        spt_error = error;
 120                }
 121                best_tseg = tseg / 2;
 122                best_brp = brp;
 123                best_rate = rate;
 124                if (error == 0)
 125                        break;
 126        }
 127
 128        if (best_error) {
 129                /* Error in one-tenth of a percent */
 130                error = (best_error * 1000) / bt->bitrate;
 131                if (error > CAN_CALC_MAX_ERROR) {
 132                        dev_err(dev->dev.parent,
 133                                "bitrate error %ld.%ld%% too high\n",
 134                                error / 10, error % 10);
 135                        return -EDOM;
 136                } else {
 137                        dev_warn(dev->dev.parent, "bitrate error %ld.%ld%%\n",
 138                                 error / 10, error % 10);
 139                }
 140        }
 141
 142        /* real sample point */
 143        bt->sample_point = can_update_spt(btc, sampl_pt, best_tseg,
 144                                          &tseg1, &tseg2);
 145
 146        v64 = (u64)best_brp * 1000000000UL;
 147        do_div(v64, priv->clock.freq);
 148        bt->tq = (u32)v64;
 149        bt->prop_seg = tseg1 / 2;
 150        bt->phase_seg1 = tseg1 - bt->prop_seg;
 151        bt->phase_seg2 = tseg2;
 152        bt->sjw = 1;
 153        bt->brp = best_brp;
 154        /* real bit-rate */
 155        bt->bitrate = priv->clock.freq / (bt->brp * (tseg1 + tseg2 + 1));
 156
 157        return 0;
 158}
 159#else /* !CONFIG_CAN_CALC_BITTIMING */
 160static int can_calc_bittiming(struct net_device *dev, struct can_bittiming *bt)
 161{
 162        dev_err(dev->dev.parent, "bit-timing calculation not available\n");
 163        return -EINVAL;
 164}
 165#endif /* CONFIG_CAN_CALC_BITTIMING */
 166
 167/*
 168 * Checks the validity of the specified bit-timing parameters prop_seg,
 169 * phase_seg1, phase_seg2 and sjw and tries to determine the bitrate
 170 * prescaler value brp. You can find more information in the header
 171 * file linux/can/netlink.h.
 172 */
 173static int can_fixup_bittiming(struct net_device *dev, struct can_bittiming *bt)
 174{
 175        struct can_priv *priv = netdev_priv(dev);
 176        const struct can_bittiming_const *btc = priv->bittiming_const;
 177        int tseg1, alltseg;
 178        u64 brp64;
 179
 180        if (!priv->bittiming_const)
 181                return -ENOTSUPP;
 182
 183        tseg1 = bt->prop_seg + bt->phase_seg1;
 184        if (!bt->sjw)
 185                bt->sjw = 1;
 186        if (bt->sjw > btc->sjw_max ||
 187            tseg1 < btc->tseg1_min || tseg1 > btc->tseg1_max ||
 188            bt->phase_seg2 < btc->tseg2_min || bt->phase_seg2 > btc->tseg2_max)
 189                return -ERANGE;
 190
 191        brp64 = (u64)priv->clock.freq * (u64)bt->tq;
 192        if (btc->brp_inc > 1)
 193                do_div(brp64, btc->brp_inc);
 194        brp64 += 500000000UL - 1;
 195        do_div(brp64, 1000000000UL); /* the practicable BRP */
 196        if (btc->brp_inc > 1)
 197                brp64 *= btc->brp_inc;
 198        bt->brp = (u32)brp64;
 199
 200        if (bt->brp < btc->brp_min || bt->brp > btc->brp_max)
 201                return -EINVAL;
 202
 203        alltseg = bt->prop_seg + bt->phase_seg1 + bt->phase_seg2 + 1;
 204        bt->bitrate = priv->clock.freq / (bt->brp * alltseg);
 205        bt->sample_point = ((tseg1 + 1) * 1000) / alltseg;
 206
 207        return 0;
 208}
 209
 210int can_get_bittiming(struct net_device *dev, struct can_bittiming *bt)
 211{
 212        struct can_priv *priv = netdev_priv(dev);
 213        int err;
 214
 215        /* Check if the CAN device has bit-timing parameters */
 216        if (priv->bittiming_const) {
 217
 218                /* Non-expert mode? Check if the bitrate has been pre-defined */
 219                if (!bt->tq)
 220                        /* Determine bit-timing parameters */
 221                        err = can_calc_bittiming(dev, bt);
 222                else
 223                        /* Check bit-timing params and calculate proper brp */
 224                        err = can_fixup_bittiming(dev, bt);
 225                if (err)
 226                        return err;
 227        }
 228
 229        return 0;
 230}
 231
 232/*
 233 * Local echo of CAN messages
 234 *
 235 * CAN network devices *should* support a local echo functionality
 236 * (see Documentation/networking/can.txt). To test the handling of CAN
 237 * interfaces that do not support the local echo both driver types are
 238 * implemented. In the case that the driver does not support the echo
 239 * the IFF_ECHO remains clear in dev->flags. This causes the PF_CAN core
 240 * to perform the echo as a fallback solution.
 241 */
 242static void can_flush_echo_skb(struct net_device *dev)
 243{
 244        struct can_priv *priv = netdev_priv(dev);
 245        struct net_device_stats *stats = &dev->stats;
 246        int i;
 247
 248        for (i = 0; i < CAN_ECHO_SKB_MAX; i++) {
 249                if (priv->echo_skb[i]) {
 250                        kfree_skb(priv->echo_skb[i]);
 251                        priv->echo_skb[i] = NULL;
 252                        stats->tx_dropped++;
 253                        stats->tx_aborted_errors++;
 254                }
 255        }
 256}
 257
 258/*
 259 * Put the skb on the stack to be looped backed locally lateron
 260 *
 261 * The function is typically called in the start_xmit function
 262 * of the device driver. The driver must protect access to
 263 * priv->echo_skb, if necessary.
 264 */
 265void can_put_echo_skb(struct sk_buff *skb, struct net_device *dev, int idx)
 266{
 267        struct can_priv *priv = netdev_priv(dev);
 268
 269        /* check flag whether this packet has to be looped back */
 270        if (!(dev->flags & IFF_ECHO) || skb->pkt_type != PACKET_LOOPBACK) {
 271                kfree_skb(skb);
 272                return;
 273        }
 274
 275        if (!priv->echo_skb[idx]) {
 276                struct sock *srcsk = skb->sk;
 277
 278                if (atomic_read(&skb->users) != 1) {
 279                        struct sk_buff *old_skb = skb;
 280
 281                        skb = skb_clone(old_skb, GFP_ATOMIC);
 282                        kfree_skb(old_skb);
 283                        if (!skb)
 284                                return;
 285                } else
 286                        skb_orphan(skb);
 287
 288                skb->sk = srcsk;
 289
 290                /* make settings for echo to reduce code in irq context */
 291                skb->protocol = htons(ETH_P_CAN);
 292                skb->pkt_type = PACKET_BROADCAST;
 293                skb->ip_summed = CHECKSUM_UNNECESSARY;
 294                skb->dev = dev;
 295
 296                /* save this skb for tx interrupt echo handling */
 297                priv->echo_skb[idx] = skb;
 298        } else {
 299                /* locking problem with netif_stop_queue() ?? */
 300                dev_err(dev->dev.parent, "%s: BUG! echo_skb is occupied!\n",
 301                        __func__);
 302                kfree_skb(skb);
 303        }
 304}
 305EXPORT_SYMBOL_GPL(can_put_echo_skb);
 306
 307/*
 308 * Get the skb from the stack and loop it back locally
 309 *
 310 * The function is typically called when the TX done interrupt
 311 * is handled in the device driver. The driver must protect
 312 * access to priv->echo_skb, if necessary.
 313 */
 314void can_get_echo_skb(struct net_device *dev, int idx)
 315{
 316        struct can_priv *priv = netdev_priv(dev);
 317
 318        if (priv->echo_skb[idx]) {
 319                netif_rx(priv->echo_skb[idx]);
 320                priv->echo_skb[idx] = NULL;
 321        }
 322}
 323EXPORT_SYMBOL_GPL(can_get_echo_skb);
 324
 325/*
 326  * Remove the skb from the stack and free it.
 327  *
 328  * The function is typically called when TX failed.
 329  */
 330void can_free_echo_skb(struct net_device *dev, int idx)
 331{
 332        struct can_priv *priv = netdev_priv(dev);
 333
 334        if (priv->echo_skb[idx]) {
 335                kfree_skb(priv->echo_skb[idx]);
 336                priv->echo_skb[idx] = NULL;
 337        }
 338}
 339EXPORT_SYMBOL_GPL(can_free_echo_skb);
 340
 341/*
 342 * CAN device restart for bus-off recovery
 343 */
 344void can_restart(unsigned long data)
 345{
 346        struct net_device *dev = (struct net_device *)data;
 347        struct can_priv *priv = netdev_priv(dev);
 348        struct net_device_stats *stats = &dev->stats;
 349        struct sk_buff *skb;
 350        struct can_frame *cf;
 351        int err;
 352
 353        BUG_ON(netif_carrier_ok(dev));
 354
 355        /*
 356         * No synchronization needed because the device is bus-off and
 357         * no messages can come in or go out.
 358         */
 359        can_flush_echo_skb(dev);
 360
 361        /* send restart message upstream */
 362        skb = dev_alloc_skb(sizeof(struct can_frame));
 363        if (skb == NULL) {
 364                err = -ENOMEM;
 365                goto restart;
 366        }
 367        skb->dev = dev;
 368        skb->protocol = htons(ETH_P_CAN);
 369        cf = (struct can_frame *)skb_put(skb, sizeof(struct can_frame));
 370        memset(cf, 0, sizeof(struct can_frame));
 371        cf->can_id = CAN_ERR_FLAG | CAN_ERR_RESTARTED;
 372        cf->can_dlc = CAN_ERR_DLC;
 373
 374        netif_rx(skb);
 375
 376        stats->rx_packets++;
 377        stats->rx_bytes += cf->can_dlc;
 378
 379restart:
 380        dev_dbg(dev->dev.parent, "restarted\n");
 381        priv->can_stats.restarts++;
 382
 383        /* Now restart the device */
 384        err = priv->do_set_mode(dev, CAN_MODE_START);
 385
 386        netif_carrier_on(dev);
 387        if (err)
 388                dev_err(dev->dev.parent, "Error %d during restart", err);
 389}
 390
 391int can_restart_now(struct net_device *dev)
 392{
 393        struct can_priv *priv = netdev_priv(dev);
 394
 395        /*
 396         * A manual restart is only permitted if automatic restart is
 397         * disabled and the device is in the bus-off state
 398         */
 399        if (priv->restart_ms)
 400                return -EINVAL;
 401        if (priv->state != CAN_STATE_BUS_OFF)
 402                return -EBUSY;
 403
 404        /* Runs as soon as possible in the timer context */
 405        mod_timer(&priv->restart_timer, jiffies);
 406
 407        return 0;
 408}
 409
 410/*
 411 * CAN bus-off
 412 *
 413 * This functions should be called when the device goes bus-off to
 414 * tell the netif layer that no more packets can be sent or received.
 415 * If enabled, a timer is started to trigger bus-off recovery.
 416 */
 417void can_bus_off(struct net_device *dev)
 418{
 419        struct can_priv *priv = netdev_priv(dev);
 420
 421        dev_dbg(dev->dev.parent, "bus-off\n");
 422
 423        netif_carrier_off(dev);
 424        priv->can_stats.bus_off++;
 425
 426        if (priv->restart_ms)
 427                mod_timer(&priv->restart_timer,
 428                          jiffies + (priv->restart_ms * HZ) / 1000);
 429}
 430EXPORT_SYMBOL_GPL(can_bus_off);
 431
 432static void can_setup(struct net_device *dev)
 433{
 434        dev->type = ARPHRD_CAN;
 435        dev->mtu = sizeof(struct can_frame);
 436        dev->hard_header_len = 0;
 437        dev->addr_len = 0;
 438        dev->tx_queue_len = 10;
 439
 440        /* New-style flags. */
 441        dev->flags = IFF_NOARP;
 442        dev->features = NETIF_F_NO_CSUM;
 443}
 444
 445/*
 446 * Allocate and setup space for the CAN network device
 447 */
 448struct net_device *alloc_candev(int sizeof_priv)
 449{
 450        struct net_device *dev;
 451        struct can_priv *priv;
 452
 453        dev = alloc_netdev(sizeof_priv, "can%d", can_setup);
 454        if (!dev)
 455                return NULL;
 456
 457        priv = netdev_priv(dev);
 458
 459        priv->state = CAN_STATE_STOPPED;
 460
 461        init_timer(&priv->restart_timer);
 462
 463        return dev;
 464}
 465EXPORT_SYMBOL_GPL(alloc_candev);
 466
 467/*
 468 * Free space of the CAN network device
 469 */
 470void free_candev(struct net_device *dev)
 471{
 472        free_netdev(dev);
 473}
 474EXPORT_SYMBOL_GPL(free_candev);
 475
 476/*
 477 * Common open function when the device gets opened.
 478 *
 479 * This function should be called in the open function of the device
 480 * driver.
 481 */
 482int open_candev(struct net_device *dev)
 483{
 484        struct can_priv *priv = netdev_priv(dev);
 485
 486        if (!priv->bittiming.tq && !priv->bittiming.bitrate) {
 487                dev_err(dev->dev.parent, "bit-timing not yet defined\n");
 488                return -EINVAL;
 489        }
 490
 491        /* Switch carrier on if device was stopped while in bus-off state */
 492        if (!netif_carrier_ok(dev))
 493                netif_carrier_on(dev);
 494
 495        setup_timer(&priv->restart_timer, can_restart, (unsigned long)dev);
 496
 497        return 0;
 498}
 499EXPORT_SYMBOL_GPL(open_candev);
 500
 501/*
 502 * Common close function for cleanup before the device gets closed.
 503 *
 504 * This function should be called in the close function of the device
 505 * driver.
 506 */
 507void close_candev(struct net_device *dev)
 508{
 509        struct can_priv *priv = netdev_priv(dev);
 510
 511        if (del_timer_sync(&priv->restart_timer))
 512                dev_put(dev);
 513        can_flush_echo_skb(dev);
 514}
 515EXPORT_SYMBOL_GPL(close_candev);
 516
 517/*
 518 * CAN netlink interface
 519 */
 520static const struct nla_policy can_policy[IFLA_CAN_MAX + 1] = {
 521        [IFLA_CAN_STATE]        = { .type = NLA_U32 },
 522        [IFLA_CAN_CTRLMODE]     = { .len = sizeof(struct can_ctrlmode) },
 523        [IFLA_CAN_RESTART_MS]   = { .type = NLA_U32 },
 524        [IFLA_CAN_RESTART]      = { .type = NLA_U32 },
 525        [IFLA_CAN_BITTIMING]    = { .len = sizeof(struct can_bittiming) },
 526        [IFLA_CAN_BITTIMING_CONST]
 527                                = { .len = sizeof(struct can_bittiming_const) },
 528        [IFLA_CAN_CLOCK]        = { .len = sizeof(struct can_clock) },
 529};
 530
 531static int can_changelink(struct net_device *dev,
 532                          struct nlattr *tb[], struct nlattr *data[])
 533{
 534        struct can_priv *priv = netdev_priv(dev);
 535        int err;
 536
 537        /* We need synchronization with dev->stop() */
 538        ASSERT_RTNL();
 539
 540        if (data[IFLA_CAN_CTRLMODE]) {
 541                struct can_ctrlmode *cm;
 542
 543                /* Do not allow changing controller mode while running */
 544                if (dev->flags & IFF_UP)
 545                        return -EBUSY;
 546                cm = nla_data(data[IFLA_CAN_CTRLMODE]);
 547                priv->ctrlmode &= ~cm->mask;
 548                priv->ctrlmode |= cm->flags;
 549        }
 550
 551        if (data[IFLA_CAN_BITTIMING]) {
 552                struct can_bittiming bt;
 553
 554                /* Do not allow changing bittiming while running */
 555                if (dev->flags & IFF_UP)
 556                        return -EBUSY;
 557                memcpy(&bt, nla_data(data[IFLA_CAN_BITTIMING]), sizeof(bt));
 558                if ((!bt.bitrate && !bt.tq) || (bt.bitrate && bt.tq))
 559                        return -EINVAL;
 560                err = can_get_bittiming(dev, &bt);
 561                if (err)
 562                        return err;
 563                memcpy(&priv->bittiming, &bt, sizeof(bt));
 564
 565                if (priv->do_set_bittiming) {
 566                        /* Finally, set the bit-timing registers */
 567                        err = priv->do_set_bittiming(dev);
 568                        if (err)
 569                                return err;
 570                }
 571        }
 572
 573        if (data[IFLA_CAN_RESTART_MS]) {
 574                /* Do not allow changing restart delay while running */
 575                if (dev->flags & IFF_UP)
 576                        return -EBUSY;
 577                priv->restart_ms = nla_get_u32(data[IFLA_CAN_RESTART_MS]);
 578        }
 579
 580        if (data[IFLA_CAN_RESTART]) {
 581                /* Do not allow a restart while not running */
 582                if (!(dev->flags & IFF_UP))
 583                        return -EINVAL;
 584                err = can_restart_now(dev);
 585                if (err)
 586                        return err;
 587        }
 588
 589        return 0;
 590}
 591
 592static size_t can_get_size(const struct net_device *dev)
 593{
 594        struct can_priv *priv = netdev_priv(dev);
 595        size_t size;
 596
 597        size = nla_total_size(sizeof(u32));   /* IFLA_CAN_STATE */
 598        size += sizeof(struct can_ctrlmode);  /* IFLA_CAN_CTRLMODE */
 599        size += nla_total_size(sizeof(u32));  /* IFLA_CAN_RESTART_MS */
 600        size += sizeof(struct can_bittiming); /* IFLA_CAN_BITTIMING */
 601        size += sizeof(struct can_clock);     /* IFLA_CAN_CLOCK */
 602        if (priv->bittiming_const)            /* IFLA_CAN_BITTIMING_CONST */
 603                size += sizeof(struct can_bittiming_const);
 604
 605        return size;
 606}
 607
 608static int can_fill_info(struct sk_buff *skb, const struct net_device *dev)
 609{
 610        struct can_priv *priv = netdev_priv(dev);
 611        struct can_ctrlmode cm = {.flags = priv->ctrlmode};
 612        enum can_state state = priv->state;
 613
 614        if (priv->do_get_state)
 615                priv->do_get_state(dev, &state);
 616        NLA_PUT_U32(skb, IFLA_CAN_STATE, state);
 617        NLA_PUT(skb, IFLA_CAN_CTRLMODE, sizeof(cm), &cm);
 618        NLA_PUT_U32(skb, IFLA_CAN_RESTART_MS, priv->restart_ms);
 619        NLA_PUT(skb, IFLA_CAN_BITTIMING,
 620                sizeof(priv->bittiming), &priv->bittiming);
 621        NLA_PUT(skb, IFLA_CAN_CLOCK, sizeof(cm), &priv->clock);
 622        if (priv->bittiming_const)
 623                NLA_PUT(skb, IFLA_CAN_BITTIMING_CONST,
 624                        sizeof(*priv->bittiming_const), priv->bittiming_const);
 625
 626        return 0;
 627
 628nla_put_failure:
 629        return -EMSGSIZE;
 630}
 631
 632static size_t can_get_xstats_size(const struct net_device *dev)
 633{
 634        return sizeof(struct can_device_stats);
 635}
 636
 637static int can_fill_xstats(struct sk_buff *skb, const struct net_device *dev)
 638{
 639        struct can_priv *priv = netdev_priv(dev);
 640
 641        NLA_PUT(skb, IFLA_INFO_XSTATS,
 642                sizeof(priv->can_stats), &priv->can_stats);
 643
 644        return 0;
 645
 646nla_put_failure:
 647        return -EMSGSIZE;
 648}
 649
 650static int can_newlink(struct net_device *dev,
 651                       struct nlattr *tb[], struct nlattr *data[])
 652{
 653        return -EOPNOTSUPP;
 654}
 655
 656static struct rtnl_link_ops can_link_ops __read_mostly = {
 657        .kind           = "can",
 658        .maxtype        = IFLA_CAN_MAX,
 659        .policy         = can_policy,
 660        .setup          = can_setup,
 661        .newlink        = can_newlink,
 662        .changelink     = can_changelink,
 663        .get_size       = can_get_size,
 664        .fill_info      = can_fill_info,
 665        .get_xstats_size = can_get_xstats_size,
 666        .fill_xstats    = can_fill_xstats,
 667};
 668
 669/*
 670 * Register the CAN network device
 671 */
 672int register_candev(struct net_device *dev)
 673{
 674        dev->rtnl_link_ops = &can_link_ops;
 675        return register_netdev(dev);
 676}
 677EXPORT_SYMBOL_GPL(register_candev);
 678
 679/*
 680 * Unregister the CAN network device
 681 */
 682void unregister_candev(struct net_device *dev)
 683{
 684        unregister_netdev(dev);
 685}
 686EXPORT_SYMBOL_GPL(unregister_candev);
 687
 688static __init int can_dev_init(void)
 689{
 690        int err;
 691
 692        err = rtnl_link_register(&can_link_ops);
 693        if (!err)
 694                printk(KERN_INFO MOD_DESC "\n");
 695
 696        return err;
 697}
 698module_init(can_dev_init);
 699
 700static __exit void can_dev_exit(void)
 701{
 702        rtnl_link_unregister(&can_link_ops);
 703}
 704module_exit(can_dev_exit);
 705
 706MODULE_ALIAS_RTNL_LINK("can");
 707