OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [drivers/] [ieee1394/] [eth1394.c] - Blame information for rev 65

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.