linux/drivers/ieee1394/eth1394.c
<<
>>
Prefs
   1/*
   2 * eth1394.c -- IPv4 driver for Linux IEEE-1394 Subsystem
   3 *
   4 * Copyright (C) 2001-2003 Ben Collins <bcollins@debian.org>
   5 *               2000 Bonin Franck <boninf@free.fr>
   6 *               2003 Steve Kinneberg <kinnebergsteve@acmsystems.com>
   7 *
   8 * Mainly based on work by Emanuel Pirker and Andreas E. Bombe
   9 *
  10 * This program is free software; you can redistribute it and/or modify
  11 * it under the terms of the GNU General Public License as published by
  12 * the Free Software Foundation; either version 2 of the License, or
  13 * (at your option) any later version.
  14 *
  15 * This program is distributed in the hope that it will be useful,
  16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18 * GNU General Public License for more details.
  19 *
  20 * You should have received a copy of the GNU General Public License
  21 * along with this program; if not, write to the Free Software Foundation,
  22 * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  23 */
  24
  25/*
  26 * This driver intends to support RFC 2734, which describes a method for
  27 * transporting IPv4 datagrams over IEEE-1394 serial busses.
  28 *
  29 * TODO:
  30 * RFC 2734 related:
  31 * - Add MCAP. Limited Multicast exists only to 224.0.0.1 and 224.0.0.2.
  32 *
  33 * Non-RFC 2734 related:
  34 * - Handle fragmented skb's coming from the networking layer.
  35 * - Move generic GASP reception to core 1394 code
  36 * - Convert kmalloc/kfree for link fragments to use kmem_cache_* instead
  37 * - Stability improvements
  38 * - Performance enhancements
  39 * - Consider garbage collecting old partial datagrams after X amount of time
  40 */
  41
  42#include <linux/module.h>
  43
  44#include <linux/kernel.h>
  45#include <linux/slab.h>
  46#include <linux/errno.h>
  47#include <linux/types.h>
  48#include <linux/delay.h>
  49#include <linux/init.h>
  50#include <linux/workqueue.h>
  51
  52#include <linux/netdevice.h>
  53#include <linux/inetdevice.h>
  54#include <linux/if_arp.h>
  55#include <linux/if_ether.h>
  56#include <linux/ip.h>
  57#include <linux/in.h>
  58#include <linux/tcp.h>
  59#include <linux/skbuff.h>
  60#include <linux/bitops.h>
  61#include <linux/ethtool.h>
  62#include <asm/uaccess.h>
  63#include <asm/delay.h>
  64#include <asm/unaligned.h>
  65#include <net/arp.h>
  66
  67#include "config_roms.h"
  68#include "csr1212.h"
  69#include "eth1394.h"
  70#include "highlevel.h"
  71#include "ieee1394.h"
  72#include "ieee1394_core.h"
  73#include "ieee1394_hotplug.h"
  74#include "ieee1394_transactions.h"
  75#include "ieee1394_types.h"
  76#include "iso.h"
  77#include "nodemgr.h"
  78
  79#define ETH1394_PRINT_G(level, fmt, args...) \
  80        printk(level "%s: " fmt, driver_name, ## args)
  81
  82#define ETH1394_PRINT(level, dev_name, fmt, args...) \
  83        printk(level "%s: %s: " fmt, driver_name, dev_name, ## args)
  84
  85struct fragment_info {
  86        struct list_head list;
  87        int offset;
  88        int len;
  89};
  90
  91struct partial_datagram {
  92        struct list_head list;
  93        u16 dgl;
  94        u16 dg_size;
  95        __be16 ether_type;
  96        struct sk_buff *skb;
  97        char *pbuf;
  98        struct list_head frag_info;
  99};
 100
 101struct pdg_list {
 102        struct list_head list;  /* partial datagram list per node       */
 103        unsigned int sz;        /* partial datagram list size per node  */
 104        spinlock_t lock;        /* partial datagram lock                */
 105};
 106
 107struct eth1394_host_info {
 108        struct hpsb_host *host;
 109        struct net_device *dev;
 110};
 111
 112struct eth1394_node_ref {
 113        struct unit_directory *ud;
 114        struct list_head list;
 115};
 116
 117struct eth1394_node_info {
 118        u16 maxpayload;         /* max payload                  */
 119        u8 sspd;                /* max speed                    */
 120        u64 fifo;               /* FIFO address                 */
 121        struct pdg_list pdg;    /* partial RX datagram lists    */
 122        int dgl;                /* outgoing datagram label      */
 123};
 124
 125static const char driver_name[] = "eth1394";
 126
 127static struct kmem_cache *packet_task_cache;
 128
 129static struct hpsb_highlevel eth1394_highlevel;
 130
 131/* Use common.lf to determine header len */
 132static const int hdr_type_len[] = {
 133        sizeof(struct eth1394_uf_hdr),
 134        sizeof(struct eth1394_ff_hdr),
 135        sizeof(struct eth1394_sf_hdr),
 136        sizeof(struct eth1394_sf_hdr)
 137};
 138
 139static const u16 eth1394_speedto_maxpayload[] = {
 140/*     S100, S200, S400, S800, S1600, S3200 */
 141        512, 1024, 2048, 4096,  4096,  4096
 142};
 143
 144MODULE_AUTHOR("Ben Collins (bcollins@debian.org)");
 145MODULE_DESCRIPTION("IEEE 1394 IPv4 Driver (IPv4-over-1394 as per RFC 2734)");
 146MODULE_LICENSE("GPL");
 147
 148/*
 149 * The max_partial_datagrams parameter is the maximum number of fragmented
 150 * datagrams per node that eth1394 will keep in memory.  Providing an upper
 151 * bound allows us to limit the amount of memory that partial datagrams
 152 * consume in the event that some partial datagrams are never completed.
 153 */
 154static int max_partial_datagrams = 25;
 155module_param(max_partial_datagrams, int, S_IRUGO | S_IWUSR);
 156MODULE_PARM_DESC(max_partial_datagrams,
 157                 "Maximum number of partially received fragmented datagrams "
 158                 "(default = 25).");
 159
 160
 161static int ether1394_header(struct sk_buff *skb, struct net_device *dev,
 162                            unsigned short type, const void *daddr,
 163                            const void *saddr, unsigned len);
 164static int ether1394_rebuild_header(struct sk_buff *skb);
 165static int ether1394_header_parse(const struct sk_buff *skb,
 166                                  unsigned char *haddr);
 167static int ether1394_header_cache(const struct neighbour *neigh,
 168                                  struct hh_cache *hh);
 169static void ether1394_header_cache_update(struct hh_cache *hh,
 170                                          const struct net_device *dev,
 171                                          const unsigned char *haddr);
 172static netdev_tx_t ether1394_tx(struct sk_buff *skb,
 173                                struct net_device *dev);
 174static void ether1394_iso(struct hpsb_iso *iso);
 175
 176static const struct ethtool_ops ethtool_ops;
 177
 178static int ether1394_write(struct hpsb_host *host, int srcid, int destid,
 179                           quadlet_t *data, u64 addr, size_t len, u16 flags);
 180static void ether1394_add_host(struct hpsb_host *host);
 181static void ether1394_remove_host(struct hpsb_host *host);
 182static void ether1394_host_reset(struct hpsb_host *host);
 183
 184/* Function for incoming 1394 packets */
 185static const struct hpsb_address_ops addr_ops = {
 186        .write =        ether1394_write,
 187};
 188
 189/* Ieee1394 highlevel driver functions */
 190static struct hpsb_highlevel eth1394_highlevel = {
 191        .name =         driver_name,
 192        .add_host =     ether1394_add_host,
 193        .remove_host =  ether1394_remove_host,
 194        .host_reset =   ether1394_host_reset,
 195};
 196
 197static int ether1394_recv_init(struct eth1394_priv *priv)
 198{
 199        unsigned int iso_buf_size;
 200
 201        /* FIXME: rawiso limits us to PAGE_SIZE */
 202        iso_buf_size = min((unsigned int)PAGE_SIZE,
 203                           2 * (1U << (priv->host->csr.max_rec + 1)));
 204
 205        priv->iso = hpsb_iso_recv_init(priv->host,
 206                                       ETHER1394_GASP_BUFFERS * iso_buf_size,
 207                                       ETHER1394_GASP_BUFFERS,
 208                                       priv->broadcast_channel,
 209                                       HPSB_ISO_DMA_PACKET_PER_BUFFER,
 210                                       1, ether1394_iso);
 211        if (priv->iso == NULL) {
 212                ETH1394_PRINT_G(KERN_ERR, "Failed to allocate IR context\n");
 213                priv->bc_state = ETHER1394_BC_ERROR;
 214                return -EAGAIN;
 215        }
 216
 217        if (hpsb_iso_recv_start(priv->iso, -1, (1 << 3), -1) < 0)
 218                priv->bc_state = ETHER1394_BC_STOPPED;
 219        else
 220                priv->bc_state = ETHER1394_BC_RUNNING;
 221        return 0;
 222}
 223
 224/* This is called after an "ifup" */
 225static int ether1394_open(struct net_device *dev)
 226{
 227        struct eth1394_priv *priv = netdev_priv(dev);
 228        int ret;
 229
 230        if (priv->bc_state == ETHER1394_BC_ERROR) {
 231                ret = ether1394_recv_init(priv);
 232                if (ret)
 233                        return ret;
 234        }
 235        netif_start_queue(dev);
 236        return 0;
 237}
 238
 239/* This is called after an "ifdown" */
 240static int ether1394_stop(struct net_device *dev)
 241{
 242        /* flush priv->wake */
 243        flush_scheduled_work();
 244
 245        netif_stop_queue(dev);
 246        return 0;
 247}
 248
 249/* FIXME: What to do if we timeout? I think a host reset is probably in order,
 250 * so that's what we do. Should we increment the stat counters too?  */
 251static void ether1394_tx_timeout(struct net_device *dev)
 252{
 253        struct hpsb_host *host =
 254                        ((struct eth1394_priv *)netdev_priv(dev))->host;
 255
 256        ETH1394_PRINT(KERN_ERR, dev->name, "Timeout, resetting host\n");
 257        ether1394_host_reset(host);
 258}
 259
 260static inline int ether1394_max_mtu(struct hpsb_host* host)
 261{
 262        return (1 << (host->csr.max_rec + 1))
 263                        - sizeof(union eth1394_hdr) - ETHER1394_GASP_OVERHEAD;
 264}
 265
 266static int ether1394_change_mtu(struct net_device *dev, int new_mtu)
 267{
 268        int max_mtu;
 269
 270        if (new_mtu < 68)
 271                return -EINVAL;
 272
 273        max_mtu = ether1394_max_mtu(
 274                        ((struct eth1394_priv *)netdev_priv(dev))->host);
 275        if (new_mtu > max_mtu) {
 276                ETH1394_PRINT(KERN_INFO, dev->name,
 277                              "Local node constrains MTU to %d\n", max_mtu);
 278                return -ERANGE;
 279        }
 280
 281        dev->mtu = new_mtu;
 282        return 0;
 283}
 284
 285static void purge_partial_datagram(struct list_head *old)
 286{
 287        struct partial_datagram *pd;
 288        struct list_head *lh, *n;
 289        struct fragment_info *fi;
 290
 291        pd = list_entry(old, struct partial_datagram, list);
 292
 293        list_for_each_safe(lh, n, &pd->frag_info) {
 294                fi = list_entry(lh, struct fragment_info, list);
 295                list_del(lh);
 296                kfree(fi);
 297        }
 298        list_del(old);
 299        kfree_skb(pd->skb);
 300        kfree(pd);
 301}
 302
 303/******************************************
 304 * 1394 bus activity functions
 305 ******************************************/
 306
 307static struct eth1394_node_ref *eth1394_find_node(struct list_head *inl,
 308                                                  struct unit_directory *ud)
 309{
 310        struct eth1394_node_ref *node;
 311
 312        list_for_each_entry(node, inl, list)
 313                if (node->ud == ud)
 314                        return node;
 315
 316        return NULL;
 317}
 318
 319static struct eth1394_node_ref *eth1394_find_node_guid(struct list_head *inl,
 320                                                       u64 guid)
 321{
 322        struct eth1394_node_ref *node;
 323
 324        list_for_each_entry(node, inl, list)
 325                if (node->ud->ne->guid == guid)
 326                        return node;
 327
 328        return NULL;
 329}
 330
 331static struct eth1394_node_ref *eth1394_find_node_nodeid(struct list_head *inl,
 332                                                         nodeid_t nodeid)
 333{
 334        struct eth1394_node_ref *node;
 335
 336        list_for_each_entry(node, inl, list)
 337                if (node->ud->ne->nodeid == nodeid)
 338                        return node;
 339
 340        return NULL;
 341}
 342
 343static int eth1394_new_node(struct eth1394_host_info *hi,
 344                            struct unit_directory *ud)
 345{
 346        struct eth1394_priv *priv;
 347        struct eth1394_node_ref *new_node;
 348        struct eth1394_node_info *node_info;
 349
 350        new_node = kmalloc(sizeof(*new_node), GFP_KERNEL);
 351        if (!new_node)
 352                return -ENOMEM;
 353
 354        node_info = kmalloc(sizeof(*node_info), GFP_KERNEL);
 355        if (!node_info) {
 356                kfree(new_node);
 357                return -ENOMEM;
 358        }
 359
 360        spin_lock_init(&node_info->pdg.lock);
 361        INIT_LIST_HEAD(&node_info->pdg.list);
 362        node_info->pdg.sz = 0;
 363        node_info->fifo = CSR1212_INVALID_ADDR_SPACE;
 364
 365        dev_set_drvdata(&ud->device, node_info);
 366        new_node->ud = ud;
 367
 368        priv = netdev_priv(hi->dev);
 369        list_add_tail(&new_node->list, &priv->ip_node_list);
 370        return 0;
 371}
 372
 373static int eth1394_probe(struct device *dev)
 374{
 375        struct unit_directory *ud;
 376        struct eth1394_host_info *hi;
 377
 378        ud = container_of(dev, struct unit_directory, device);
 379        hi = hpsb_get_hostinfo(&eth1394_highlevel, ud->ne->host);
 380        if (!hi)
 381                return -ENOENT;
 382
 383        return eth1394_new_node(hi, ud);
 384}
 385
 386static int eth1394_remove(struct device *dev)
 387{
 388        struct unit_directory *ud;
 389        struct eth1394_host_info *hi;
 390        struct eth1394_priv *priv;
 391        struct eth1394_node_ref *old_node;
 392        struct eth1394_node_info *node_info;
 393        struct list_head *lh, *n;
 394        unsigned long flags;
 395
 396        ud = container_of(dev, struct unit_directory, device);
 397        hi = hpsb_get_hostinfo(&eth1394_highlevel, ud->ne->host);
 398        if (!hi)
 399                return -ENOENT;
 400
 401        priv = netdev_priv(hi->dev);
 402
 403        old_node = eth1394_find_node(&priv->ip_node_list, ud);
 404        if (!old_node)
 405                return 0;
 406
 407        list_del(&old_node->list);
 408        kfree(old_node);
 409
 410        node_info = dev_get_drvdata(&ud->device);
 411
 412        spin_lock_irqsave(&node_info->pdg.lock, flags);
 413        /* The partial datagram list should be empty, but we'll just
 414         * make sure anyway... */
 415        list_for_each_safe(lh, n, &node_info->pdg.list)
 416                purge_partial_datagram(lh);
 417        spin_unlock_irqrestore(&node_info->pdg.lock, flags);
 418
 419        kfree(node_info);
 420        dev_set_drvdata(&ud->device, NULL);
 421        return 0;
 422}
 423
 424static int eth1394_update(struct unit_directory *ud)
 425{
 426        struct eth1394_host_info *hi;
 427        struct eth1394_priv *priv;
 428        struct eth1394_node_ref *node;
 429
 430        hi = hpsb_get_hostinfo(&eth1394_highlevel, ud->ne->host);
 431        if (!hi)
 432                return -ENOENT;
 433
 434        priv = netdev_priv(hi->dev);
 435        node = eth1394_find_node(&priv->ip_node_list, ud);
 436        if (node)
 437                return 0;
 438
 439        return eth1394_new_node(hi, ud);
 440}
 441
 442static const struct ieee1394_device_id eth1394_id_table[] = {
 443        {
 444                .match_flags = (IEEE1394_MATCH_SPECIFIER_ID |
 445                                IEEE1394_MATCH_VERSION),
 446                .specifier_id = ETHER1394_GASP_SPECIFIER_ID,
 447                .version = ETHER1394_GASP_VERSION,
 448        },
 449        {}
 450};
 451
 452MODULE_DEVICE_TABLE(ieee1394, eth1394_id_table);
 453
 454static struct hpsb_protocol_driver eth1394_proto_driver = {
 455        .name           = driver_name,
 456        .id_table       = eth1394_id_table,
 457        .update         = eth1394_update,
 458        .driver         = {
 459                .probe          = eth1394_probe,
 460                .remove         = eth1394_remove,
 461        },
 462};
 463
 464static void ether1394_reset_priv(struct net_device *dev, int set_mtu)
 465{
 466        unsigned long flags;
 467        int i;
 468        struct eth1394_priv *priv = netdev_priv(dev);
 469        struct hpsb_host *host = priv->host;
 470        u64 guid = get_unaligned((u64 *)&(host->csr.rom->bus_info_data[3]));
 471        int max_speed = IEEE1394_SPEED_MAX;
 472
 473        spin_lock_irqsave(&priv->lock, flags);
 474
 475        memset(priv->ud_list, 0, sizeof(priv->ud_list));
 476        priv->bc_maxpayload = 512;
 477
 478        /* Determine speed limit */
 479        /* FIXME: This is broken for nodes with link speed < PHY speed,
 480         * and it is suboptimal for S200B...S800B hardware.
 481         * The result of nodemgr's speed probe should be used somehow. */
 482        for (i = 0; i < host->node_count; i++) {
 483                /* take care of S100B...S400B PHY ports */
 484                if (host->speed[i] == SELFID_SPEED_UNKNOWN) {
 485                        max_speed = IEEE1394_SPEED_100;
 486                        break;
 487                }
 488                if (max_speed > host->speed[i])
 489                        max_speed = host->speed[i];
 490        }
 491        priv->bc_sspd = max_speed;
 492
 493        if (set_mtu) {
 494                /* Use the RFC 2734 default 1500 octets or the maximum payload
 495                 * as initial MTU */
 496                dev->mtu = min(1500, ether1394_max_mtu(host));
 497
 498                /* Set our hardware address while we're at it */
 499                memcpy(dev->dev_addr, &guid, sizeof(u64));
 500                memset(dev->broadcast, 0xff, sizeof(u64));
 501        }
 502
 503        spin_unlock_irqrestore(&priv->lock, flags);
 504}
 505
 506static const struct header_ops ether1394_header_ops = {
 507        .create         = ether1394_header,
 508        .rebuild        = ether1394_rebuild_header,
 509        .cache          = ether1394_header_cache,
 510        .cache_update   = ether1394_header_cache_update,
 511        .parse          = ether1394_header_parse,
 512};
 513
 514static const struct net_device_ops ether1394_netdev_ops = {
 515        .ndo_open       = ether1394_open,
 516        .ndo_stop       = ether1394_stop,
 517        .ndo_start_xmit = ether1394_tx,
 518        .ndo_tx_timeout = ether1394_tx_timeout,
 519        .ndo_change_mtu = ether1394_change_mtu,
 520};
 521
 522static void ether1394_init_dev(struct net_device *dev)
 523{
 524
 525        dev->header_ops         = &ether1394_header_ops;
 526        dev->netdev_ops         = &ether1394_netdev_ops;
 527
 528        SET_ETHTOOL_OPS(dev, &ethtool_ops);
 529
 530        dev->watchdog_timeo     = ETHER1394_TIMEOUT;
 531        dev->flags              = IFF_BROADCAST | IFF_MULTICAST;
 532        dev->features           = NETIF_F_HIGHDMA;
 533        dev->addr_len           = ETH1394_ALEN;
 534        dev->hard_header_len    = ETH1394_HLEN;
 535        dev->type               = ARPHRD_IEEE1394;
 536
 537        /* FIXME: This value was copied from ether_setup(). Is it too much? */
 538        dev->tx_queue_len       = 1000;
 539}
 540
 541/*
 542 * Wake the queue up after commonly encountered transmit failure conditions are
 543 * hopefully over.  Currently only tlabel exhaustion is accounted for.
 544 */
 545static void ether1394_wake_queue(struct work_struct *work)
 546{
 547        struct eth1394_priv *priv;
 548        struct hpsb_packet *packet;
 549
 550        priv = container_of(work, struct eth1394_priv, wake);
 551        packet = hpsb_alloc_packet(0);
 552
 553        /* This is really bad, but unjam the queue anyway. */
 554        if (!packet)
 555                goto out;
 556
 557        packet->host = priv->host;
 558        packet->node_id = priv->wake_node;
 559        /*
 560         * A transaction label is all we really want.  If we get one, it almost
 561         * always means we can get a lot more because the ieee1394 core recycled
 562         * a whole batch of tlabels, at last.
 563         */
 564        if (hpsb_get_tlabel(packet) == 0)
 565                hpsb_free_tlabel(packet);
 566
 567        hpsb_free_packet(packet);
 568out:
 569        netif_wake_queue(priv->wake_dev);
 570}
 571
 572/*
 573 * This function is called every time a card is found. It is generally called
 574 * when the module is installed. This is where we add all of our ethernet
 575 * devices. One for each host.
 576 */
 577static void ether1394_add_host(struct hpsb_host *host)
 578{
 579        struct eth1394_host_info *hi = NULL;
 580        struct net_device *dev = NULL;
 581        struct eth1394_priv *priv;
 582        u64 fifo_addr;
 583
 584        if (hpsb_config_rom_ip1394_add(host) != 0) {
 585                ETH1394_PRINT_G(KERN_ERR, "Can't add IP-over-1394 ROM entry\n");
 586                return;
 587        }
 588
 589        fifo_addr = hpsb_allocate_and_register_addrspace(
 590                        &eth1394_highlevel, host, &addr_ops,
 591                        ETHER1394_REGION_ADDR_LEN, ETHER1394_REGION_ADDR_LEN,
 592                        CSR1212_INVALID_ADDR_SPACE, CSR1212_INVALID_ADDR_SPACE);
 593        if (fifo_addr == CSR1212_INVALID_ADDR_SPACE) {
 594                ETH1394_PRINT_G(KERN_ERR, "Cannot register CSR space\n");
 595                hpsb_config_rom_ip1394_remove(host);
 596                return;
 597        }
 598
 599        dev = alloc_netdev(sizeof(*priv), "eth%d", ether1394_init_dev);
 600        if (dev == NULL) {
 601                ETH1394_PRINT_G(KERN_ERR, "Out of memory\n");
 602                goto out;
 603        }
 604
 605        SET_NETDEV_DEV(dev, &host->device);
 606
 607        priv = netdev_priv(dev);
 608        INIT_LIST_HEAD(&priv->ip_node_list);
 609        spin_lock_init(&priv->lock);
 610        priv->host = host;
 611        priv->local_fifo = fifo_addr;
 612        INIT_WORK(&priv->wake, ether1394_wake_queue);
 613        priv->wake_dev = dev;
 614
 615        hi = hpsb_create_hostinfo(&eth1394_highlevel, host, sizeof(*hi));
 616        if (hi == NULL) {
 617                ETH1394_PRINT_G(KERN_ERR, "Out of memory\n");
 618                goto out;
 619        }
 620
 621        ether1394_reset_priv(dev, 1);
 622
 623        if (register_netdev(dev)) {
 624                ETH1394_PRINT_G(KERN_ERR, "Cannot register the driver\n");
 625                goto out;
 626        }
 627
 628        ETH1394_PRINT(KERN_INFO, dev->name, "IPv4 over IEEE 1394 (fw-host%d)\n",
 629                      host->id);
 630
 631        hi->host = host;
 632        hi->dev = dev;
 633
 634        /* Ignore validity in hopes that it will be set in the future.  It'll
 635         * be checked when the eth device is opened. */
 636        priv->broadcast_channel = host->csr.broadcast_channel & 0x3f;
 637
 638        ether1394_recv_init(priv);
 639        return;
 640out:
 641        if (dev)
 642                free_netdev(dev);
 643        if (hi)
 644                hpsb_destroy_hostinfo(&eth1394_highlevel, host);
 645        hpsb_unregister_addrspace(&eth1394_highlevel, host, fifo_addr);
 646        hpsb_config_rom_ip1394_remove(host);
 647}
 648
 649/* Remove a card from our list */
 650static void ether1394_remove_host(struct hpsb_host *host)
 651{
 652        struct eth1394_host_info *hi;
 653        struct eth1394_priv *priv;
 654
 655        hi = hpsb_get_hostinfo(&eth1394_highlevel, host);
 656        if (!hi)
 657                return;
 658        priv = netdev_priv(hi->dev);
 659        hpsb_unregister_addrspace(&eth1394_highlevel, host, priv->local_fifo);
 660        hpsb_config_rom_ip1394_remove(host);
 661        if (priv->iso)
 662                hpsb_iso_shutdown(priv->iso);
 663        unregister_netdev(hi->dev);
 664        free_netdev(hi->dev);
 665}
 666
 667/* A bus reset happened */
 668static void ether1394_host_reset(struct hpsb_host *host)
 669{
 670        struct eth1394_host_info *hi;
 671        struct eth1394_priv *priv;
 672        struct net_device *dev;
 673        struct list_head *lh, *n;
 674        struct eth1394_node_ref *node;
 675        struct eth1394_node_info *node_info;
 676        unsigned long flags;
 677
 678        hi = hpsb_get_hostinfo(&eth1394_highlevel, host);
 679
 680        /* This can happen for hosts that we don't use */
 681        if (!hi)
 682                return;
 683
 684        dev = hi->dev;
 685        priv = netdev_priv(dev);
 686
 687        /* Reset our private host data, but not our MTU */
 688        netif_stop_queue(dev);
 689        ether1394_reset_priv(dev, 0);
 690
 691        list_for_each_entry(node, &priv->ip_node_list, list) {
 692                node_info = dev_get_drvdata(&node->ud->device);
 693
 694                spin_lock_irqsave(&node_info->pdg.lock, flags);
 695
 696                list_for_each_safe(lh, n, &node_info->pdg.list)
 697                        purge_partial_datagram(lh);
 698
 699                INIT_LIST_HEAD(&(node_info->pdg.list));
 700                node_info->pdg.sz = 0;
 701
 702                spin_unlock_irqrestore(&node_info->pdg.lock, flags);
 703        }
 704
 705        netif_wake_queue(dev);
 706}
 707
 708/******************************************
 709 * HW Header net device functions
 710 ******************************************/
 711/* These functions have been adapted from net/ethernet/eth.c */
 712
 713/* Create a fake MAC header for an arbitrary protocol layer.
 714 * saddr=NULL means use device source address
 715 * daddr=NULL means leave destination address (eg unresolved arp). */
 716static int ether1394_header(struct sk_buff *skb, struct net_device *dev,
 717                            unsigned short type, const void *daddr,
 718                            const void *saddr, unsigned len)
 719{
 720        struct eth1394hdr *eth =
 721                        (struct eth1394hdr *)skb_push(skb, ETH1394_HLEN);
 722
 723        eth->h_proto = htons(type);
 724
 725        if (dev->flags & (IFF_LOOPBACK | IFF_NOARP)) {
 726                memset(eth->h_dest, 0, dev->addr_len);
 727                return dev->hard_header_len;
 728        }
 729
 730        if (daddr) {
 731                memcpy(eth->h_dest, daddr, dev->addr_len);
 732                return dev->hard_header_len;
 733        }
 734
 735        return -dev->hard_header_len;
 736}
 737
 738/* Rebuild the faked MAC header. This is called after an ARP
 739 * (or in future other address resolution) has completed on this
 740 * sk_buff. We now let ARP fill in the other fields.
 741 *
 742 * This routine CANNOT use cached dst->neigh!
 743 * Really, it is used only when dst->neigh is wrong.
 744 */
 745static int ether1394_rebuild_header(struct sk_buff *skb)
 746{
 747        struct eth1394hdr *eth = (struct eth1394hdr *)skb->data;
 748
 749        if (eth->h_proto == htons(ETH_P_IP))
 750                return arp_find((unsigned char *)&eth->h_dest, skb);
 751
 752        ETH1394_PRINT(KERN_DEBUG, skb->dev->name,
 753                      "unable to resolve type %04x addresses\n",
 754                      ntohs(eth->h_proto));
 755        return 0;
 756}
 757
 758static int ether1394_header_parse(const struct sk_buff *skb,
 759                                  unsigned char *haddr)
 760{
 761        memcpy(haddr, skb->dev->dev_addr, ETH1394_ALEN);
 762        return ETH1394_ALEN;
 763}
 764
 765static int ether1394_header_cache(const struct neighbour *neigh,
 766                                  struct hh_cache *hh)
 767{
 768        __be16 type = hh->hh_type;
 769        struct net_device *dev = neigh->dev;
 770        struct eth1394hdr *eth =
 771                (struct eth1394hdr *)((u8 *)hh->hh_data + 16 - ETH1394_HLEN);
 772
 773        if (type == htons(ETH_P_802_3))
 774                return -1;
 775
 776        eth->h_proto = type;
 777        memcpy(eth->h_dest, neigh->ha, dev->addr_len);
 778
 779        hh->hh_len = ETH1394_HLEN;
 780        return 0;
 781}
 782
 783/* Called by Address Resolution module to notify changes in address. */
 784static void ether1394_header_cache_update(struct hh_cache *hh,
 785                                          const struct net_device *dev,
 786                                          const unsigned char * haddr)
 787{
 788        memcpy((u8 *)hh->hh_data + 16 - ETH1394_HLEN, haddr, dev->addr_len);
 789}
 790
 791/******************************************
 792 * Datagram reception code
 793 ******************************************/
 794
 795/* Copied from net/ethernet/eth.c */
 796static __be16 ether1394_type_trans(struct sk_buff *skb, struct net_device *dev)
 797{
 798        struct eth1394hdr *eth;
 799        unsigned char *rawp;
 800
 801        skb_reset_mac_header(skb);
 802        skb_pull(skb, ETH1394_HLEN);
 803        eth = eth1394_hdr(skb);
 804
 805        if (*eth->h_dest & 1) {
 806                if (memcmp(eth->h_dest, dev->broadcast, dev->addr_len) == 0)
 807                        skb->pkt_type = PACKET_BROADCAST;
 808#if 0
 809                else
 810                        skb->pkt_type = PACKET_MULTICAST;
 811#endif
 812        } else {
 813                if (memcmp(eth->h_dest, dev->dev_addr, dev->addr_len))
 814                        skb->pkt_type = PACKET_OTHERHOST;
 815        }
 816
 817        if (ntohs(eth->h_proto) >= 1536)
 818                return eth->h_proto;
 819
 820        rawp = skb->data;
 821
 822        if (*(unsigned short *)rawp == 0xFFFF)
 823                return htons(ETH_P_802_3);
 824
 825        return htons(ETH_P_802_2);
 826}
 827
 828/* Parse an encapsulated IP1394 header into an ethernet frame packet.
 829 * We also perform ARP translation here, if need be.  */
 830static __be16 ether1394_parse_encap(struct sk_buff *skb, struct net_device *dev,
 831                                 nodeid_t srcid, nodeid_t destid,
 832                                 __be16 ether_type)
 833{
 834        struct eth1394_priv *priv = netdev_priv(dev);
 835        __be64 dest_hw;
 836        __be16 ret = 0;
 837
 838        /* Setup our hw addresses. We use these to build the ethernet header. */
 839        if (destid == (LOCAL_BUS | ALL_NODES))
 840                dest_hw = ~cpu_to_be64(0);  /* broadcast */
 841        else
 842                dest_hw = cpu_to_be64((u64)priv->host->csr.guid_hi << 32 |
 843                                      priv->host->csr.guid_lo);
 844
 845        /* If this is an ARP packet, convert it. First, we want to make
 846         * use of some of the fields, since they tell us a little bit
 847         * about the sending machine.  */
 848        if (ether_type == htons(ETH_P_ARP)) {
 849                struct eth1394_arp *arp1394 = (struct eth1394_arp *)skb->data;
 850                struct arphdr *arp = (struct arphdr *)skb->data;
 851                unsigned char *arp_ptr = (unsigned char *)(arp + 1);
 852                u64 fifo_addr = (u64)ntohs(arp1394->fifo_hi) << 32 |
 853                                           ntohl(arp1394->fifo_lo);
 854                u8 max_rec = min(priv->host->csr.max_rec,
 855                                 (u8)(arp1394->max_rec));
 856                int sspd = arp1394->sspd;
 857                u16 maxpayload;
 858                struct eth1394_node_ref *node;
 859                struct eth1394_node_info *node_info;
 860                __be64 guid;
 861
 862                /* Sanity check. MacOSX seems to be sending us 131 in this
 863                 * field (atleast on my Panther G5). Not sure why. */
 864                if (sspd > 5 || sspd < 0)
 865                        sspd = 0;
 866
 867                maxpayload = min(eth1394_speedto_maxpayload[sspd],
 868                                 (u16)(1 << (max_rec + 1)));
 869
 870                guid = get_unaligned(&arp1394->s_uniq_id);
 871                node = eth1394_find_node_guid(&priv->ip_node_list,
 872                                              be64_to_cpu(guid));
 873                if (!node)
 874                        return cpu_to_be16(0);
 875
 876                node_info = dev_get_drvdata(&node->ud->device);
 877
 878                /* Update our speed/payload/fifo_offset table */
 879                node_info->maxpayload = maxpayload;
 880                node_info->sspd =       sspd;
 881                node_info->fifo =       fifo_addr;
 882
 883                /* Now that we're done with the 1394 specific stuff, we'll
 884                 * need to alter some of the data.  Believe it or not, all
 885                 * that needs to be done is sender_IP_address needs to be
 886                 * moved, the destination hardware address get stuffed
 887                 * in and the hardware address length set to 8.
 888                 *
 889                 * IMPORTANT: The code below overwrites 1394 specific data
 890                 * needed above so keep the munging of the data for the
 891                 * higher level IP stack last. */
 892
 893                arp->ar_hln = 8;
 894                arp_ptr += arp->ar_hln;         /* skip over sender unique id */
 895                *(u32 *)arp_ptr = arp1394->sip; /* move sender IP addr */
 896                arp_ptr += arp->ar_pln;         /* skip over sender IP addr */
 897
 898                if (arp->ar_op == htons(ARPOP_REQUEST))
 899                        memset(arp_ptr, 0, sizeof(u64));
 900                else
 901                        memcpy(arp_ptr, dev->dev_addr, sizeof(u64));
 902        }
 903
 904        /* Now add the ethernet header. */
 905        if (dev_hard_header(skb, dev, ntohs(ether_type), &dest_hw, NULL,
 906                            skb->len) >= 0)
 907                ret = ether1394_type_trans(skb, dev);
 908
 909        return ret;
 910}
 911
 912static int fragment_overlap(struct list_head *frag_list, int offset, int len)
 913{
 914        struct fragment_info *fi;
 915        int end = offset + len;
 916
 917        list_for_each_entry(fi, frag_list, list)
 918                if (offset < fi->offset + fi->len && end > fi->offset)
 919                        return 1;
 920
 921        return 0;
 922}
 923
 924static struct list_head *find_partial_datagram(struct list_head *pdgl, int dgl)
 925{
 926        struct partial_datagram *pd;
 927
 928        list_for_each_entry(pd, pdgl, list)
 929                if (pd->dgl == dgl)
 930                        return &pd->list;
 931
 932        return NULL;
 933}
 934
 935/* Assumes that new fragment does not overlap any existing fragments */
 936static int new_fragment(struct list_head *frag_info, int offset, int len)
 937{
 938        struct list_head *lh;
 939        struct fragment_info *fi, *fi2, *new;
 940
 941        list_for_each(lh, frag_info) {
 942                fi = list_entry(lh, struct fragment_info, list);
 943                if (fi->offset + fi->len == offset) {
 944                        /* The new fragment can be tacked on to the end */
 945                        fi->len += len;
 946                        /* Did the new fragment plug a hole? */
 947                        fi2 = list_entry(lh->next, struct fragment_info, list);
 948                        if (fi->offset + fi->len == fi2->offset) {
 949                                /* glue fragments together */
 950                                fi->len += fi2->len;
 951                                list_del(lh->next);
 952                                kfree(fi2);
 953                        }
 954                        return 0;
 955                } else if (offset + len == fi->offset) {
 956                        /* The new fragment can be tacked on to the beginning */
 957                        fi->offset = offset;
 958                        fi->len += len;
 959                        /* Did the new fragment plug a hole? */
 960                        fi2 = list_entry(lh->prev, struct fragment_info, list);
 961                        if (fi2->offset + fi2->len == fi->offset) {
 962                                /* glue fragments together */
 963                                fi2->len += fi->len;
 964                                list_del(lh);
 965                                kfree(fi);
 966                        }
 967                        return 0;
 968                } else if (offset > fi->offset + fi->len) {
 969                        break;
 970                } else if (offset + len < fi->offset) {
 971                        lh = lh->prev;
 972                        break;
 973                }
 974        }
 975
 976        new = kmalloc(sizeof(*new), GFP_ATOMIC);
 977        if (!new)
 978                return -ENOMEM;
 979
 980        new->offset = offset;
 981        new->len = len;
 982
 983        list_add(&new->list, lh);
 984        return 0;
 985}
 986
 987static int new_partial_datagram(struct net_device *dev, struct list_head *pdgl,
 988                                int dgl, int dg_size, char *frag_buf,
 989                                int frag_off, int frag_len)
 990{
 991        struct partial_datagram *new;
 992
 993        new = kmalloc(sizeof(*new), GFP_ATOMIC);
 994        if (!new)
 995                return -ENOMEM;
 996
 997        INIT_LIST_HEAD(&new->frag_info);
 998
 999        if (new_fragment(&new->frag_info, frag_off, frag_len) < 0) {
1000                kfree(new);
1001                return -ENOMEM;
1002        }
1003
1004        new->dgl = dgl;
1005        new->dg_size = dg_size;
1006
1007        new->skb = dev_alloc_skb(dg_size + dev->hard_header_len + 15);
1008        if (!new->skb) {
1009                struct fragment_info *fi = list_entry(new->frag_info.next,
1010                                                      struct fragment_info,
1011                                                      list);
1012                kfree(fi);
1013                kfree(new);
1014                return -ENOMEM;
1015        }
1016
1017        skb_reserve(new->skb, (dev->hard_header_len + 15) & ~15);
1018        new->pbuf = skb_put(new->skb, dg_size);
1019        memcpy(new->pbuf + frag_off, frag_buf, frag_len);
1020
1021        list_add(&new->list, pdgl);
1022        return 0;
1023}
1024
1025static int update_partial_datagram(struct list_head *pdgl, struct list_head *lh,
1026                                   char *frag_buf, int frag_off, int frag_len)
1027{
1028        struct partial_datagram *pd =
1029                        list_entry(lh, struct partial_datagram, list);
1030
1031        if (new_fragment(&pd->frag_info, frag_off, frag_len) < 0)
1032                return -ENOMEM;
1033
1034        memcpy(pd->pbuf + frag_off, frag_buf, frag_len);
1035
1036        /* Move list entry to beginnig of list so that oldest partial
1037         * datagrams percolate to the end of the list */
1038        list_move(lh, pdgl);
1039        return 0;
1040}
1041
1042static int is_datagram_complete(struct list_head *lh, int dg_size)
1043{
1044        struct partial_datagram *pd;
1045        struct fragment_info *fi;
1046
1047        pd = list_entry(lh, struct partial_datagram, list);
1048        fi = list_entry(pd->frag_info.next, struct fragment_info, list);
1049
1050        return (fi->len == dg_size);
1051}
1052
1053/* Packet reception. We convert the IP1394 encapsulation header to an
1054 * ethernet header, and fill it with some of our other fields. This is
1055 * an incoming packet from the 1394 bus.  */
1056static int ether1394_data_handler(struct net_device *dev, int srcid, int destid,
1057                                  char *buf, int len)
1058{
1059        struct sk_buff *skb;
1060        unsigned long flags;
1061        struct eth1394_priv *priv = netdev_priv(dev);
1062        union eth1394_hdr *hdr = (union eth1394_hdr *)buf;
1063        __be16 ether_type = cpu_to_be16(0);  /* initialized to clear warning */
1064        int hdr_len;
1065        struct unit_directory *ud = priv->ud_list[NODEID_TO_NODE(srcid)];
1066        struct eth1394_node_info *node_info;
1067
1068        if (!ud) {
1069                struct eth1394_node_ref *node;
1070                node = eth1394_find_node_nodeid(&priv->ip_node_list, srcid);
1071                if (unlikely(!node)) {
1072                        HPSB_PRINT(KERN_ERR, "ether1394 rx: sender nodeid "
1073                                   "lookup failure: " NODE_BUS_FMT,
1074                                   NODE_BUS_ARGS(priv->host, srcid));
1075                        dev->stats.rx_dropped++;
1076                        return -1;
1077                }
1078                ud = node->ud;
1079
1080                priv->ud_list[NODEID_TO_NODE(srcid)] = ud;
1081        }
1082
1083        node_info = dev_get_drvdata(&ud->device);
1084
1085        /* First, did we receive a fragmented or unfragmented datagram? */
1086        hdr->words.word1 = ntohs(hdr->words.word1);
1087
1088        hdr_len = hdr_type_len[hdr->common.lf];
1089
1090        if (hdr->common.lf == ETH1394_HDR_LF_UF) {
1091                /* An unfragmented datagram has been received by the ieee1394
1092                 * bus. Build an skbuff around it so we can pass it to the
1093                 * high level network layer. */
1094
1095                skb = dev_alloc_skb(len + dev->hard_header_len + 15);
1096                if (unlikely(!skb)) {
1097                        ETH1394_PRINT_G(KERN_ERR, "Out of memory\n");
1098                        dev->stats.rx_dropped++;
1099                        return -1;
1100                }
1101                skb_reserve(skb, (dev->hard_header_len + 15) & ~15);
1102                memcpy(skb_put(skb, len - hdr_len), buf + hdr_len,
1103                       len - hdr_len);
1104                ether_type = hdr->uf.ether_type;
1105        } else {
1106                /* A datagram fragment has been received, now the fun begins. */
1107
1108                struct list_head *pdgl, *lh;
1109                struct partial_datagram *pd;
1110                int fg_off;
1111                int fg_len = len - hdr_len;
1112                int dg_size;
1113                int dgl;
1114                int retval;
1115                struct pdg_list *pdg = &(node_info->pdg);
1116
1117                hdr->words.word3 = ntohs(hdr->words.word3);
1118                /* The 4th header word is reserved so no need to do ntohs() */
1119
1120                if (hdr->common.lf == ETH1394_HDR_LF_FF) {
1121                        ether_type = hdr->ff.ether_type;
1122                        dgl = hdr->ff.dgl;
1123                        dg_size = hdr->ff.dg_size + 1;
1124                        fg_off = 0;
1125                } else {
1126                        hdr->words.word2 = ntohs(hdr->words.word2);
1127                        dgl = hdr->sf.dgl;
1128                        dg_size = hdr->sf.dg_size + 1;
1129                        fg_off = hdr->sf.fg_off;
1130                }
1131                spin_lock_irqsave(&pdg->lock, flags);
1132
1133                pdgl = &(pdg->list);
1134                lh = find_partial_datagram(pdgl, dgl);
1135
1136                if (lh == NULL) {
1137                        while (pdg->sz >= max_partial_datagrams) {
1138                                /* remove the oldest */
1139                                purge_partial_datagram(pdgl->prev);
1140                                pdg->sz--;
1141                        }
1142
1143                        retval = new_partial_datagram(dev, pdgl, dgl, dg_size,
1144                                                      buf + hdr_len, fg_off,
1145                                                      fg_len);
1146                        if (retval < 0) {
1147                                spin_unlock_irqrestore(&pdg->lock, flags);
1148                                goto bad_proto;
1149                        }
1150                        pdg->sz++;
1151                        lh = find_partial_datagram(pdgl, dgl);
1152                } else {
1153                        pd = list_entry(lh, struct partial_datagram, list);
1154
1155                        if (fragment_overlap(&pd->frag_info, fg_off, fg_len)) {
1156                                /* Overlapping fragments, obliterate old
1157                                 * datagram and start new one. */
1158                                purge_partial_datagram(lh);
1159                                retval = new_partial_datagram(dev, pdgl, dgl,
1160                                                              dg_size,
1161                                                              buf + hdr_len,
1162                                                              fg_off, fg_len);
1163                                if (retval < 0) {
1164                                        pdg->sz--;
1165                                        spin_unlock_irqrestore(&pdg->lock, flags);
1166                                        goto bad_proto;
1167                                }
1168                        } else {
1169                                retval = update_partial_datagram(pdgl, lh,
1170                                                                 buf + hdr_len,
1171                                                                 fg_off, fg_len);
1172                                if (retval < 0) {
1173                                        /* Couldn't save off fragment anyway
1174                                         * so might as well obliterate the
1175                                         * datagram now. */
1176                                        purge_partial_datagram(lh);
1177                                        pdg->sz--;
1178                                        spin_unlock_irqrestore(&pdg->lock, flags);
1179                                        goto bad_proto;
1180                                }
1181                        } /* fragment overlap */
1182                } /* new datagram or add to existing one */
1183
1184                pd = list_entry(lh, struct partial_datagram, list);
1185
1186                if (hdr->common.lf == ETH1394_HDR_LF_FF)
1187                        pd->ether_type = ether_type;
1188
1189                if (is_datagram_complete(lh, dg_size)) {
1190                        ether_type = pd->ether_type;
1191                        pdg->sz--;
1192                        skb = skb_get(pd->skb);
1193                        purge_partial_datagram(lh);
1194                        spin_unlock_irqrestore(&pdg->lock, flags);
1195                } else {
1196                        /* Datagram is not complete, we're done for the
1197                         * moment. */
1198                        spin_unlock_irqrestore(&pdg->lock, flags);
1199                        return 0;
1200                }
1201        } /* unframgented datagram or fragmented one */
1202
1203        /* Write metadata, and then pass to the receive level */
1204        skb->dev = dev;
1205        skb->ip_summed = CHECKSUM_UNNECESSARY;  /* don't check it */
1206
1207        /* Parse the encapsulation header. This actually does the job of
1208         * converting to an ethernet frame header, aswell as arp
1209         * conversion if needed. ARP conversion is easier in this
1210         * direction, since we are using ethernet as our backend.  */
1211        skb->protocol = ether1394_parse_encap(skb, dev, srcid, destid,
1212                                              ether_type);
1213
1214        spin_lock_irqsave(&priv->lock, flags);
1215
1216        if (!skb->protocol) {
1217                dev->stats.rx_errors++;
1218                dev->stats.rx_dropped++;
1219                dev_kfree_skb_any(skb);
1220        } else if (netif_rx(skb) == NET_RX_DROP) {
1221                dev->stats.rx_errors++;
1222                dev->stats.rx_dropped++;
1223        } else {
1224                dev->stats.rx_packets++;
1225                dev->stats.rx_bytes += skb->len;
1226        }
1227
1228        spin_unlock_irqrestore(&priv->lock, flags);
1229
1230bad_proto:
1231        if (netif_queue_stopped(dev))
1232                netif_wake_queue(dev);
1233
1234        return 0;
1235}
1236
1237static int ether1394_write(struct hpsb_host *host, int srcid, int destid,
1238                           quadlet_t *data, u64 addr, size_t len, u16 flags)
1239{
1240        struct eth1394_host_info *hi;
1241
1242        hi = hpsb_get_hostinfo(&eth1394_highlevel, host);
1243        if (unlikely(!hi)) {
1244                ETH1394_PRINT_G(KERN_ERR, "No net device at fw-host%d\n",
1245                                host->id);
1246                return RCODE_ADDRESS_ERROR;
1247        }
1248
1249        if (ether1394_data_handler(hi->dev, srcid, destid, (char*)data, len))
1250                return RCODE_ADDRESS_ERROR;
1251        else
1252                return RCODE_COMPLETE;
1253}
1254
1255static void ether1394_iso(struct hpsb_iso *iso)
1256{
1257        __be32 *data;
1258        char *buf;
1259        struct eth1394_host_info *hi;
1260        struct net_device *dev;
1261        struct eth1394_priv *priv;
1262        unsigned int len;
1263        u32 specifier_id;
1264        u16 source_id;
1265        int i;
1266        int nready;
1267
1268        hi = hpsb_get_hostinfo(&eth1394_highlevel, iso->host);
1269        if (unlikely(!hi)) {
1270                ETH1394_PRINT_G(KERN_ERR, "No net device at fw-host%d\n",
1271                                iso->host->id);
1272                return;
1273        }
1274
1275        dev = hi->dev;
1276
1277        nready = hpsb_iso_n_ready(iso);
1278        for (i = 0; i < nready; i++) {
1279                struct hpsb_iso_packet_info *info =
1280                        &iso->infos[(iso->first_packet + i) % iso->buf_packets];
1281                data = (__be32 *)(iso->data_buf.kvirt + info->offset);
1282
1283                /* skip over GASP header */
1284                buf = (char *)data + 8;
1285                len = info->len - 8;
1286
1287                specifier_id = (be32_to_cpu(data[0]) & 0xffff) << 8 |
1288                               (be32_to_cpu(data[1]) & 0xff000000) >> 24;
1289                source_id = be32_to_cpu(data[0]) >> 16;
1290
1291                priv = netdev_priv(dev);
1292
1293                if (info->channel != (iso->host->csr.broadcast_channel & 0x3f)
1294                    || specifier_id != ETHER1394_GASP_SPECIFIER_ID) {
1295                        /* This packet is not for us */
1296                        continue;
1297                }
1298                ether1394_data_handler(dev, source_id, LOCAL_BUS | ALL_NODES,
1299                                       buf, len);
1300        }
1301
1302        hpsb_iso_recv_release_packets(iso, i);
1303
1304}
1305
1306/******************************************
1307 * Datagram transmission code
1308 ******************************************/
1309
1310/* Convert a standard ARP packet to 1394 ARP. The first 8 bytes (the entire
1311 * arphdr) is the same format as the ip1394 header, so they overlap.  The rest
1312 * needs to be munged a bit.  The remainder of the arphdr is formatted based
1313 * on hwaddr len and ipaddr len.  We know what they'll be, so it's easy to
1314 * judge.
1315 *
1316 * Now that the EUI is used for the hardware address all we need to do to make
1317 * this work for 1394 is to insert 2 quadlets that contain max_rec size,
1318 * speed, and unicast FIFO address information between the sender_unique_id
1319 * and the IP addresses.
1320 */
1321static void ether1394_arp_to_1394arp(struct sk_buff *skb,
1322                                     struct net_device *dev)
1323{
1324        struct eth1394_priv *priv = netdev_priv(dev);
1325        struct arphdr *arp = (struct arphdr *)skb->data;
1326        unsigned char *arp_ptr = (unsigned char *)(arp + 1);
1327        struct eth1394_arp *arp1394 = (struct eth1394_arp *)skb->data;
1328
1329        arp1394->hw_addr_len    = 16;
1330        arp1394->sip            = *(u32*)(arp_ptr + ETH1394_ALEN);
1331        arp1394->max_rec        = priv->host->csr.max_rec;
1332        arp1394->sspd           = priv->host->csr.lnk_spd;
1333        arp1394->fifo_hi        = htons(priv->local_fifo >> 32);
1334        arp1394->fifo_lo        = htonl(priv->local_fifo & ~0x0);
1335}
1336
1337/* We need to encapsulate the standard header with our own. We use the
1338 * ethernet header's proto for our own. */
1339static unsigned int ether1394_encapsulate_prep(unsigned int max_payload,
1340                                               __be16 proto,
1341                                               union eth1394_hdr *hdr,
1342                                               u16 dg_size, u16 dgl)
1343{
1344        unsigned int adj_max_payload =
1345                                max_payload - hdr_type_len[ETH1394_HDR_LF_UF];
1346
1347        /* Does it all fit in one packet? */
1348        if (dg_size <= adj_max_payload) {
1349                hdr->uf.lf = ETH1394_HDR_LF_UF;
1350                hdr->uf.ether_type = proto;
1351        } else {
1352                hdr->ff.lf = ETH1394_HDR_LF_FF;
1353                hdr->ff.ether_type = proto;
1354                hdr->ff.dg_size = dg_size - 1;
1355                hdr->ff.dgl = dgl;
1356                adj_max_payload = max_payload - hdr_type_len[ETH1394_HDR_LF_FF];
1357        }
1358        return DIV_ROUND_UP(dg_size, adj_max_payload);
1359}
1360
1361static unsigned int ether1394_encapsulate(struct sk_buff *skb,
1362                                          unsigned int max_payload,
1363                                          union eth1394_hdr *hdr)
1364{
1365        union eth1394_hdr *bufhdr;
1366        int ftype = hdr->common.lf;
1367        int hdrsz = hdr_type_len[ftype];
1368        unsigned int adj_max_payload = max_payload - hdrsz;
1369
1370        switch (ftype) {
1371        case ETH1394_HDR_LF_UF:
1372                bufhdr = (union eth1394_hdr *)skb_push(skb, hdrsz);
1373                bufhdr->words.word1 = htons(hdr->words.word1);
1374                bufhdr->words.word2 = hdr->words.word2;
1375                break;
1376
1377        case ETH1394_HDR_LF_FF:
1378                bufhdr = (union eth1394_hdr *)skb_push(skb, hdrsz);
1379                bufhdr->words.word1 = htons(hdr->words.word1);
1380                bufhdr->words.word2 = hdr->words.word2;
1381                bufhdr->words.word3 = htons(hdr->words.word3);
1382                bufhdr->words.word4 = 0;
1383
1384                /* Set frag type here for future interior fragments */
1385                hdr->common.lf = ETH1394_HDR_LF_IF;
1386                hdr->sf.fg_off = 0;
1387                break;
1388
1389        default:
1390                hdr->sf.fg_off += adj_max_payload;
1391                bufhdr = (union eth1394_hdr *)skb_pull(skb, adj_max_payload);
1392                if (max_payload >= skb->len)
1393                        hdr->common.lf = ETH1394_HDR_LF_LF;
1394                bufhdr->words.word1 = htons(hdr->words.word1);
1395                bufhdr->words.word2 = htons(hdr->words.word2);
1396                bufhdr->words.word3 = htons(hdr->words.word3);
1397                bufhdr->words.word4 = 0;
1398        }
1399        return min(max_payload, skb->len);
1400}
1401
1402static struct hpsb_packet *ether1394_alloc_common_packet(struct hpsb_host *host)
1403{
1404        struct hpsb_packet *p;
1405
1406        p = hpsb_alloc_packet(0);
1407        if (p) {
1408                p->host = host;
1409                p->generation = get_hpsb_generation(host);
1410                p->type = hpsb_async;
1411        }
1412        return p;
1413}
1414
1415static int ether1394_prep_write_packet(struct hpsb_packet *p,
1416                                       struct hpsb_host *host, nodeid_t node,
1417                                       u64 addr, void *data, int tx_len)
1418{
1419        p->node_id = node;
1420
1421        if (hpsb_get_tlabel(p))
1422                return -EAGAIN;
1423
1424        p->tcode = TCODE_WRITEB;
1425        p->header_size = 16;
1426        p->expect_response = 1;
1427        p->header[0] =
1428                p->node_id << 16 | p->tlabel << 10 | 1 << 8 | TCODE_WRITEB << 4;
1429        p->header[1] = host->node_id << 16 | addr >> 32;
1430        p->header[2] = addr & 0xffffffff;
1431        p->header[3] = tx_len << 16;
1432        p->data_size = (tx_len + 3) & ~3;
1433        p->data = data;
1434
1435        return 0;
1436}
1437
1438static void ether1394_prep_gasp_packet(struct hpsb_packet *p,
1439                                       struct eth1394_priv *priv,
1440                                       struct sk_buff *skb, int length)
1441{
1442        p->header_size = 4;
1443        p->tcode = TCODE_STREAM_DATA;
1444
1445        p->header[0] = length << 16 | 3 << 14 | priv->broadcast_channel << 8 |
1446                       TCODE_STREAM_DATA << 4;
1447        p->data_size = length;
1448        p->data = (quadlet_t *)skb->data - 2;
1449        p->data[0] = cpu_to_be32(priv->host->node_id << 16 |
1450                                 ETHER1394_GASP_SPECIFIER_ID_HI);
1451        p->data[1] = cpu_to_be32(ETHER1394_GASP_SPECIFIER_ID_LO << 24 |
1452                                 ETHER1394_GASP_VERSION);
1453
1454        p->speed_code = priv->bc_sspd;
1455
1456        /* prevent hpsb_send_packet() from overriding our speed code */
1457        p->node_id = LOCAL_BUS | ALL_NODES;
1458}
1459
1460static void ether1394_free_packet(struct hpsb_packet *packet)
1461{
1462        if (packet->tcode != TCODE_STREAM_DATA)
1463                hpsb_free_tlabel(packet);
1464        hpsb_free_packet(packet);
1465}
1466
1467static void ether1394_complete_cb(void *__ptask);
1468
1469static int ether1394_send_packet(struct packet_task *ptask, unsigned int tx_len)
1470{
1471        struct eth1394_priv *priv = ptask->priv;
1472        struct hpsb_packet *packet = NULL;
1473
1474        packet = ether1394_alloc_common_packet(priv->host);
1475        if (!packet)
1476                return -ENOMEM;
1477
1478        if (ptask->tx_type == ETH1394_GASP) {
1479                int length = tx_len + 2 * sizeof(quadlet_t);
1480
1481                ether1394_prep_gasp_packet(packet, priv, ptask->skb, length);
1482        } else if (ether1394_prep_write_packet(packet, priv->host,
1483                                               ptask->dest_node,
1484                                               ptask->addr, ptask->skb->data,
1485                                               tx_len)) {
1486                hpsb_free_packet(packet);
1487                return -EAGAIN;
1488        }
1489
1490        ptask->packet = packet;
1491        hpsb_set_packet_complete_task(ptask->packet, ether1394_complete_cb,
1492                                      ptask);
1493
1494        if (hpsb_send_packet(packet) < 0) {
1495                ether1394_free_packet(packet);
1496                return -EIO;
1497        }
1498
1499        return 0;
1500}
1501
1502/* Task function to be run when a datagram transmission is completed */
1503static void ether1394_dg_complete(struct packet_task *ptask, int fail)
1504{
1505        struct sk_buff *skb = ptask->skb;
1506        struct net_device *dev = skb->dev;
1507        struct eth1394_priv *priv = netdev_priv(dev);
1508        unsigned long flags;
1509
1510        /* Statistics */
1511        spin_lock_irqsave(&priv->lock, flags);
1512        if (fail) {
1513                dev->stats.tx_dropped++;
1514                dev->stats.tx_errors++;
1515        } else {
1516                dev->stats.tx_bytes += skb->len;
1517                dev->stats.tx_packets++;
1518        }
1519        spin_unlock_irqrestore(&priv->lock, flags);
1520
1521        dev_kfree_skb_any(skb);
1522        kmem_cache_free(packet_task_cache, ptask);
1523}
1524
1525/* Callback for when a packet has been sent and the status of that packet is
1526 * known */
1527static void ether1394_complete_cb(void *__ptask)
1528{
1529        struct packet_task *ptask = (struct packet_task *)__ptask;
1530        struct hpsb_packet *packet = ptask->packet;
1531        int fail = 0;
1532
1533        if (packet->tcode != TCODE_STREAM_DATA)
1534                fail = hpsb_packet_success(packet);
1535
1536        ether1394_free_packet(packet);
1537
1538        ptask->outstanding_pkts--;
1539        if (ptask->outstanding_pkts > 0 && !fail) {
1540                int tx_len, err;
1541
1542                /* Add the encapsulation header to the fragment */
1543                tx_len = ether1394_encapsulate(ptask->skb, ptask->max_payload,
1544                                               &ptask->hdr);
1545                err = ether1394_send_packet(ptask, tx_len);
1546                if (err) {
1547                        if (err == -EAGAIN)
1548                                ETH1394_PRINT_G(KERN_ERR, "Out of tlabels\n");
1549
1550                        ether1394_dg_complete(ptask, 1);
1551                }
1552        } else {
1553                ether1394_dg_complete(ptask, fail);
1554        }
1555}
1556
1557/* Transmit a packet (called by kernel) */
1558static netdev_tx_t ether1394_tx(struct sk_buff *skb,
1559                                struct net_device *dev)
1560{
1561        struct eth1394hdr hdr_buf;
1562        struct eth1394_priv *priv = netdev_priv(dev);
1563        __be16 proto;
1564        unsigned long flags;
1565        nodeid_t dest_node;
1566        eth1394_tx_type tx_type;
1567        unsigned int tx_len;
1568        unsigned int max_payload;
1569        u16 dg_size;
1570        u16 dgl;
1571        struct packet_task *ptask;
1572        struct eth1394_node_ref *node;
1573        struct eth1394_node_info *node_info = NULL;
1574
1575        ptask = kmem_cache_alloc(packet_task_cache, GFP_ATOMIC);
1576        if (ptask == NULL)
1577                goto fail;
1578
1579        /* XXX Ignore this for now. Noticed that when MacOSX is the IRM,
1580         * it does not set our validity bit. We need to compensate for
1581         * that somewhere else, but not in eth1394. */
1582#if 0
1583        if ((priv->host->csr.broadcast_channel & 0xc0000000) != 0xc0000000)
1584                goto fail;
1585#endif
1586
1587        skb = skb_share_check(skb, GFP_ATOMIC);
1588        if (!skb)
1589                goto fail;
1590
1591        /* Get rid of the fake eth1394 header, but first make a copy.
1592         * We might need to rebuild the header on tx failure. */
1593        memcpy(&hdr_buf, skb->data, sizeof(hdr_buf));
1594        skb_pull(skb, ETH1394_HLEN);
1595
1596        proto = hdr_buf.h_proto;
1597        dg_size = skb->len;
1598
1599        /* Set the transmission type for the packet.  ARP packets and IP
1600         * broadcast packets are sent via GASP. */
1601        if (memcmp(hdr_buf.h_dest, dev->broadcast, ETH1394_ALEN) == 0 ||
1602            proto == htons(ETH_P_ARP) ||
1603            (proto == htons(ETH_P_IP) &&
1604             IN_MULTICAST(ntohl(ip_hdr(skb)->daddr)))) {
1605                tx_type = ETH1394_GASP;
1606                dest_node = LOCAL_BUS | ALL_NODES;
1607                max_payload = priv->bc_maxpayload - ETHER1394_GASP_OVERHEAD;
1608                BUG_ON(max_payload < 512 - ETHER1394_GASP_OVERHEAD);
1609                dgl = priv->bc_dgl;
1610                if (max_payload < dg_size + hdr_type_len[ETH1394_HDR_LF_UF])
1611                        priv->bc_dgl++;
1612        } else {
1613                __be64 guid = get_unaligned((__be64 *)hdr_buf.h_dest);
1614
1615                node = eth1394_find_node_guid(&priv->ip_node_list,
1616                                              be64_to_cpu(guid));
1617                if (!node)
1618                        goto fail;
1619
1620                node_info = dev_get_drvdata(&node->ud->device);
1621                if (node_info->fifo == CSR1212_INVALID_ADDR_SPACE)
1622                        goto fail;
1623
1624                dest_node = node->ud->ne->nodeid;
1625                max_payload = node_info->maxpayload;
1626                BUG_ON(max_payload < 512 - ETHER1394_GASP_OVERHEAD);
1627
1628                dgl = node_info->dgl;
1629                if (max_payload < dg_size + hdr_type_len[ETH1394_HDR_LF_UF])
1630                        node_info->dgl++;
1631                tx_type = ETH1394_WRREQ;
1632        }
1633
1634        /* If this is an ARP packet, convert it */
1635        if (proto == htons(ETH_P_ARP))
1636                ether1394_arp_to_1394arp(skb, dev);
1637
1638        ptask->hdr.words.word1 = 0;
1639        ptask->hdr.words.word2 = 0;
1640        ptask->hdr.words.word3 = 0;
1641        ptask->hdr.words.word4 = 0;
1642        ptask->skb = skb;
1643        ptask->priv = priv;
1644        ptask->tx_type = tx_type;
1645
1646        if (tx_type != ETH1394_GASP) {
1647                u64 addr;
1648
1649                spin_lock_irqsave(&priv->lock, flags);
1650                addr = node_info->fifo;
1651                spin_unlock_irqrestore(&priv->lock, flags);
1652
1653                ptask->addr = addr;
1654                ptask->dest_node = dest_node;
1655        }
1656
1657        ptask->tx_type = tx_type;
1658        ptask->max_payload = max_payload;
1659        ptask->outstanding_pkts = ether1394_encapsulate_prep(max_payload,
1660                                        proto, &ptask->hdr, dg_size, dgl);
1661
1662        /* Add the encapsulation header to the fragment */
1663        tx_len = ether1394_encapsulate(skb, max_payload, &ptask->hdr);
1664        dev->trans_start = jiffies;
1665        if (ether1394_send_packet(ptask, tx_len)) {
1666                if (dest_node == (LOCAL_BUS | ALL_NODES))
1667                        goto fail;
1668
1669                /* At this point we want to restore the packet.  When we return
1670                 * here with NETDEV_TX_BUSY we will get another entrance in this
1671                 * routine with the same skb and we need it to look the same.
1672                 * So we pull 4 more bytes, then build the header again. */
1673                skb_pull(skb, 4);
1674                ether1394_header(skb, dev, ntohs(hdr_buf.h_proto),
1675                                 hdr_buf.h_dest, NULL, 0);
1676
1677                /* Most failures of ether1394_send_packet are recoverable. */
1678                netif_stop_queue(dev);
1679                priv->wake_node = dest_node;
1680                schedule_work(&priv->wake);
1681                kmem_cache_free(packet_task_cache, ptask);
1682                return NETDEV_TX_BUSY;
1683        }
1684
1685        return NETDEV_TX_OK;
1686fail:
1687        if (ptask)
1688                kmem_cache_free(packet_task_cache, ptask);
1689
1690        if (skb != NULL)
1691                dev_kfree_skb(skb);
1692
1693        spin_lock_irqsave(&priv->lock, flags);
1694        dev->stats.tx_dropped++;
1695        dev->stats.tx_errors++;
1696        spin_unlock_irqrestore(&priv->lock, flags);
1697
1698        return NETDEV_TX_OK;
1699}
1700
1701static void ether1394_get_drvinfo(struct net_device *dev,
1702                                  struct ethtool_drvinfo *info)
1703{
1704        strcpy(info->driver, driver_name);
1705        strcpy(info->bus_info, "ieee1394"); /* FIXME provide more detail? */
1706}
1707
1708static const struct ethtool_ops ethtool_ops = {
1709        .get_drvinfo = ether1394_get_drvinfo
1710};
1711
1712static int __init ether1394_init_module(void)
1713{
1714        int err;
1715
1716        packet_task_cache = kmem_cache_create("packet_task",
1717                                              sizeof(struct packet_task),
1718                                              0, 0, NULL);
1719        if (!packet_task_cache)
1720                return -ENOMEM;
1721
1722        hpsb_register_highlevel(&eth1394_highlevel);
1723        err = hpsb_register_protocol(&eth1394_proto_driver);
1724        if (err) {
1725                hpsb_unregister_highlevel(&eth1394_highlevel);
1726                kmem_cache_destroy(packet_task_cache);
1727        }
1728        return err;
1729}
1730
1731static void __exit ether1394_exit_module(void)
1732{
1733        hpsb_unregister_protocol(&eth1394_proto_driver);
1734        hpsb_unregister_highlevel(&eth1394_highlevel);
1735        kmem_cache_destroy(packet_task_cache);
1736}
1737
1738module_init(ether1394_init_module);
1739module_exit(ether1394_exit_module);
1740