cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

net.c (42652B)


      1// SPDX-License-Identifier: GPL-2.0-only
      2/*
      3 * IPv4 over IEEE 1394, per RFC 2734
      4 * IPv6 over IEEE 1394, per RFC 3146
      5 *
      6 * Copyright (C) 2009 Jay Fenlason <fenlason@redhat.com>
      7 *
      8 * based on eth1394 by Ben Collins et al
      9 */
     10
     11#include <linux/bug.h>
     12#include <linux/compiler.h>
     13#include <linux/delay.h>
     14#include <linux/device.h>
     15#include <linux/ethtool.h>
     16#include <linux/firewire.h>
     17#include <linux/firewire-constants.h>
     18#include <linux/highmem.h>
     19#include <linux/in.h>
     20#include <linux/ip.h>
     21#include <linux/jiffies.h>
     22#include <linux/mod_devicetable.h>
     23#include <linux/module.h>
     24#include <linux/moduleparam.h>
     25#include <linux/mutex.h>
     26#include <linux/netdevice.h>
     27#include <linux/skbuff.h>
     28#include <linux/slab.h>
     29#include <linux/spinlock.h>
     30
     31#include <asm/unaligned.h>
     32#include <net/arp.h>
     33#include <net/firewire.h>
     34
     35/* rx limits */
     36#define FWNET_MAX_FRAGMENTS		30 /* arbitrary, > TX queue depth */
     37#define FWNET_ISO_PAGE_COUNT		(PAGE_SIZE < 16*1024 ? 4 : 2)
     38
     39/* tx limits */
     40#define FWNET_MAX_QUEUED_DATAGRAMS	20 /* < 64 = number of tlabels */
     41#define FWNET_MIN_QUEUED_DATAGRAMS	10 /* should keep AT DMA busy enough */
     42#define FWNET_TX_QUEUE_LEN		FWNET_MAX_QUEUED_DATAGRAMS /* ? */
     43
     44#define IEEE1394_BROADCAST_CHANNEL	31
     45#define IEEE1394_ALL_NODES		(0xffc0 | 0x003f)
     46#define IEEE1394_MAX_PAYLOAD_S100	512
     47#define FWNET_NO_FIFO_ADDR		(~0ULL)
     48
     49#define IANA_SPECIFIER_ID		0x00005eU
     50#define RFC2734_SW_VERSION		0x000001U
     51#define RFC3146_SW_VERSION		0x000002U
     52
     53#define IEEE1394_GASP_HDR_SIZE	8
     54
     55#define RFC2374_UNFRAG_HDR_SIZE	4
     56#define RFC2374_FRAG_HDR_SIZE	8
     57#define RFC2374_FRAG_OVERHEAD	4
     58
     59#define RFC2374_HDR_UNFRAG	0	/* unfragmented		*/
     60#define RFC2374_HDR_FIRSTFRAG	1	/* first fragment	*/
     61#define RFC2374_HDR_LASTFRAG	2	/* last fragment	*/
     62#define RFC2374_HDR_INTFRAG	3	/* interior fragment	*/
     63
     64static bool fwnet_hwaddr_is_multicast(u8 *ha)
     65{
     66	return !!(*ha & 1);
     67}
     68
     69/* IPv4 and IPv6 encapsulation header */
     70struct rfc2734_header {
     71	u32 w0;
     72	u32 w1;
     73};
     74
     75#define fwnet_get_hdr_lf(h)		(((h)->w0 & 0xc0000000) >> 30)
     76#define fwnet_get_hdr_ether_type(h)	(((h)->w0 & 0x0000ffff))
     77#define fwnet_get_hdr_dg_size(h)	((((h)->w0 & 0x0fff0000) >> 16) + 1)
     78#define fwnet_get_hdr_fg_off(h)		(((h)->w0 & 0x00000fff))
     79#define fwnet_get_hdr_dgl(h)		(((h)->w1 & 0xffff0000) >> 16)
     80
     81#define fwnet_set_hdr_lf(lf)		((lf) << 30)
     82#define fwnet_set_hdr_ether_type(et)	(et)
     83#define fwnet_set_hdr_dg_size(dgs)	(((dgs) - 1) << 16)
     84#define fwnet_set_hdr_fg_off(fgo)	(fgo)
     85
     86#define fwnet_set_hdr_dgl(dgl)		((dgl) << 16)
     87
     88static inline void fwnet_make_uf_hdr(struct rfc2734_header *hdr,
     89		unsigned ether_type)
     90{
     91	hdr->w0 = fwnet_set_hdr_lf(RFC2374_HDR_UNFRAG)
     92		  | fwnet_set_hdr_ether_type(ether_type);
     93}
     94
     95static inline void fwnet_make_ff_hdr(struct rfc2734_header *hdr,
     96		unsigned ether_type, unsigned dg_size, unsigned dgl)
     97{
     98	hdr->w0 = fwnet_set_hdr_lf(RFC2374_HDR_FIRSTFRAG)
     99		  | fwnet_set_hdr_dg_size(dg_size)
    100		  | fwnet_set_hdr_ether_type(ether_type);
    101	hdr->w1 = fwnet_set_hdr_dgl(dgl);
    102}
    103
    104static inline void fwnet_make_sf_hdr(struct rfc2734_header *hdr,
    105		unsigned lf, unsigned dg_size, unsigned fg_off, unsigned dgl)
    106{
    107	hdr->w0 = fwnet_set_hdr_lf(lf)
    108		  | fwnet_set_hdr_dg_size(dg_size)
    109		  | fwnet_set_hdr_fg_off(fg_off);
    110	hdr->w1 = fwnet_set_hdr_dgl(dgl);
    111}
    112
    113/* This list keeps track of what parts of the datagram have been filled in */
    114struct fwnet_fragment_info {
    115	struct list_head fi_link;
    116	u16 offset;
    117	u16 len;
    118};
    119
    120struct fwnet_partial_datagram {
    121	struct list_head pd_link;
    122	struct list_head fi_list;
    123	struct sk_buff *skb;
    124	/* FIXME Why not use skb->data? */
    125	char *pbuf;
    126	u16 datagram_label;
    127	u16 ether_type;
    128	u16 datagram_size;
    129};
    130
    131static DEFINE_MUTEX(fwnet_device_mutex);
    132static LIST_HEAD(fwnet_device_list);
    133
    134struct fwnet_device {
    135	struct list_head dev_link;
    136	spinlock_t lock;
    137	enum {
    138		FWNET_BROADCAST_ERROR,
    139		FWNET_BROADCAST_RUNNING,
    140		FWNET_BROADCAST_STOPPED,
    141	} broadcast_state;
    142	struct fw_iso_context *broadcast_rcv_context;
    143	struct fw_iso_buffer broadcast_rcv_buffer;
    144	void **broadcast_rcv_buffer_ptrs;
    145	unsigned broadcast_rcv_next_ptr;
    146	unsigned num_broadcast_rcv_ptrs;
    147	unsigned rcv_buffer_size;
    148	/*
    149	 * This value is the maximum unfragmented datagram size that can be
    150	 * sent by the hardware.  It already has the GASP overhead and the
    151	 * unfragmented datagram header overhead calculated into it.
    152	 */
    153	unsigned broadcast_xmt_max_payload;
    154	u16 broadcast_xmt_datagramlabel;
    155
    156	/*
    157	 * The CSR address that remote nodes must send datagrams to for us to
    158	 * receive them.
    159	 */
    160	struct fw_address_handler handler;
    161	u64 local_fifo;
    162
    163	/* Number of tx datagrams that have been queued but not yet acked */
    164	int queued_datagrams;
    165
    166	int peer_count;
    167	struct list_head peer_list;
    168	struct fw_card *card;
    169	struct net_device *netdev;
    170};
    171
    172struct fwnet_peer {
    173	struct list_head peer_link;
    174	struct fwnet_device *dev;
    175	u64 guid;
    176
    177	/* guarded by dev->lock */
    178	struct list_head pd_list; /* received partial datagrams */
    179	unsigned pdg_size;        /* pd_list size */
    180
    181	u16 datagram_label;       /* outgoing datagram label */
    182	u16 max_payload;          /* includes RFC2374_FRAG_HDR_SIZE overhead */
    183	int node_id;
    184	int generation;
    185	unsigned speed;
    186};
    187
    188/* This is our task struct. It's used for the packet complete callback.  */
    189struct fwnet_packet_task {
    190	struct fw_transaction transaction;
    191	struct rfc2734_header hdr;
    192	struct sk_buff *skb;
    193	struct fwnet_device *dev;
    194
    195	int outstanding_pkts;
    196	u64 fifo_addr;
    197	u16 dest_node;
    198	u16 max_payload;
    199	u8 generation;
    200	u8 speed;
    201	u8 enqueued;
    202};
    203
    204/*
    205 * Get fifo address embedded in hwaddr
    206 */
    207static __u64 fwnet_hwaddr_fifo(union fwnet_hwaddr *ha)
    208{
    209	return (u64)get_unaligned_be16(&ha->uc.fifo_hi) << 32
    210	       | get_unaligned_be32(&ha->uc.fifo_lo);
    211}
    212
    213/*
    214 * saddr == NULL means use device source address.
    215 * daddr == NULL means leave destination address (eg unresolved arp).
    216 */
    217static int fwnet_header_create(struct sk_buff *skb, struct net_device *net,
    218			unsigned short type, const void *daddr,
    219			const void *saddr, unsigned len)
    220{
    221	struct fwnet_header *h;
    222
    223	h = skb_push(skb, sizeof(*h));
    224	put_unaligned_be16(type, &h->h_proto);
    225
    226	if (net->flags & (IFF_LOOPBACK | IFF_NOARP)) {
    227		memset(h->h_dest, 0, net->addr_len);
    228
    229		return net->hard_header_len;
    230	}
    231
    232	if (daddr) {
    233		memcpy(h->h_dest, daddr, net->addr_len);
    234
    235		return net->hard_header_len;
    236	}
    237
    238	return -net->hard_header_len;
    239}
    240
    241static int fwnet_header_cache(const struct neighbour *neigh,
    242			      struct hh_cache *hh, __be16 type)
    243{
    244	struct net_device *net;
    245	struct fwnet_header *h;
    246
    247	if (type == cpu_to_be16(ETH_P_802_3))
    248		return -1;
    249	net = neigh->dev;
    250	h = (struct fwnet_header *)((u8 *)hh->hh_data + HH_DATA_OFF(sizeof(*h)));
    251	h->h_proto = type;
    252	memcpy(h->h_dest, neigh->ha, net->addr_len);
    253
    254	/* Pairs with the READ_ONCE() in neigh_resolve_output(),
    255	 * neigh_hh_output() and neigh_update_hhs().
    256	 */
    257	smp_store_release(&hh->hh_len, FWNET_HLEN);
    258
    259	return 0;
    260}
    261
    262/* Called by Address Resolution module to notify changes in address. */
    263static void fwnet_header_cache_update(struct hh_cache *hh,
    264		const struct net_device *net, const unsigned char *haddr)
    265{
    266	memcpy((u8 *)hh->hh_data + HH_DATA_OFF(FWNET_HLEN), haddr, net->addr_len);
    267}
    268
    269static int fwnet_header_parse(const struct sk_buff *skb, unsigned char *haddr)
    270{
    271	memcpy(haddr, skb->dev->dev_addr, FWNET_ALEN);
    272
    273	return FWNET_ALEN;
    274}
    275
    276static const struct header_ops fwnet_header_ops = {
    277	.create         = fwnet_header_create,
    278	.cache		= fwnet_header_cache,
    279	.cache_update	= fwnet_header_cache_update,
    280	.parse          = fwnet_header_parse,
    281};
    282
    283/* FIXME: is this correct for all cases? */
    284static bool fwnet_frag_overlap(struct fwnet_partial_datagram *pd,
    285			       unsigned offset, unsigned len)
    286{
    287	struct fwnet_fragment_info *fi;
    288	unsigned end = offset + len;
    289
    290	list_for_each_entry(fi, &pd->fi_list, fi_link)
    291		if (offset < fi->offset + fi->len && end > fi->offset)
    292			return true;
    293
    294	return false;
    295}
    296
    297/* Assumes that new fragment does not overlap any existing fragments */
    298static struct fwnet_fragment_info *fwnet_frag_new(
    299	struct fwnet_partial_datagram *pd, unsigned offset, unsigned len)
    300{
    301	struct fwnet_fragment_info *fi, *fi2, *new;
    302	struct list_head *list;
    303
    304	list = &pd->fi_list;
    305	list_for_each_entry(fi, &pd->fi_list, fi_link) {
    306		if (fi->offset + fi->len == offset) {
    307			/* The new fragment can be tacked on to the end */
    308			/* Did the new fragment plug a hole? */
    309			fi2 = list_entry(fi->fi_link.next,
    310					 struct fwnet_fragment_info, fi_link);
    311			if (fi->offset + fi->len == fi2->offset) {
    312				/* glue fragments together */
    313				fi->len += len + fi2->len;
    314				list_del(&fi2->fi_link);
    315				kfree(fi2);
    316			} else {
    317				fi->len += len;
    318			}
    319
    320			return fi;
    321		}
    322		if (offset + len == fi->offset) {
    323			/* The new fragment can be tacked on to the beginning */
    324			/* Did the new fragment plug a hole? */
    325			fi2 = list_entry(fi->fi_link.prev,
    326					 struct fwnet_fragment_info, fi_link);
    327			if (fi2->offset + fi2->len == fi->offset) {
    328				/* glue fragments together */
    329				fi2->len += fi->len + len;
    330				list_del(&fi->fi_link);
    331				kfree(fi);
    332
    333				return fi2;
    334			}
    335			fi->offset = offset;
    336			fi->len += len;
    337
    338			return fi;
    339		}
    340		if (offset > fi->offset + fi->len) {
    341			list = &fi->fi_link;
    342			break;
    343		}
    344		if (offset + len < fi->offset) {
    345			list = fi->fi_link.prev;
    346			break;
    347		}
    348	}
    349
    350	new = kmalloc(sizeof(*new), GFP_ATOMIC);
    351	if (!new)
    352		return NULL;
    353
    354	new->offset = offset;
    355	new->len = len;
    356	list_add(&new->fi_link, list);
    357
    358	return new;
    359}
    360
    361static struct fwnet_partial_datagram *fwnet_pd_new(struct net_device *net,
    362		struct fwnet_peer *peer, u16 datagram_label, unsigned dg_size,
    363		void *frag_buf, unsigned frag_off, unsigned frag_len)
    364{
    365	struct fwnet_partial_datagram *new;
    366	struct fwnet_fragment_info *fi;
    367
    368	new = kmalloc(sizeof(*new), GFP_ATOMIC);
    369	if (!new)
    370		goto fail;
    371
    372	INIT_LIST_HEAD(&new->fi_list);
    373	fi = fwnet_frag_new(new, frag_off, frag_len);
    374	if (fi == NULL)
    375		goto fail_w_new;
    376
    377	new->datagram_label = datagram_label;
    378	new->datagram_size = dg_size;
    379	new->skb = dev_alloc_skb(dg_size + LL_RESERVED_SPACE(net));
    380	if (new->skb == NULL)
    381		goto fail_w_fi;
    382
    383	skb_reserve(new->skb, LL_RESERVED_SPACE(net));
    384	new->pbuf = skb_put(new->skb, dg_size);
    385	memcpy(new->pbuf + frag_off, frag_buf, frag_len);
    386	list_add_tail(&new->pd_link, &peer->pd_list);
    387
    388	return new;
    389
    390fail_w_fi:
    391	kfree(fi);
    392fail_w_new:
    393	kfree(new);
    394fail:
    395	return NULL;
    396}
    397
    398static struct fwnet_partial_datagram *fwnet_pd_find(struct fwnet_peer *peer,
    399						    u16 datagram_label)
    400{
    401	struct fwnet_partial_datagram *pd;
    402
    403	list_for_each_entry(pd, &peer->pd_list, pd_link)
    404		if (pd->datagram_label == datagram_label)
    405			return pd;
    406
    407	return NULL;
    408}
    409
    410
    411static void fwnet_pd_delete(struct fwnet_partial_datagram *old)
    412{
    413	struct fwnet_fragment_info *fi, *n;
    414
    415	list_for_each_entry_safe(fi, n, &old->fi_list, fi_link)
    416		kfree(fi);
    417
    418	list_del(&old->pd_link);
    419	dev_kfree_skb_any(old->skb);
    420	kfree(old);
    421}
    422
    423static bool fwnet_pd_update(struct fwnet_peer *peer,
    424		struct fwnet_partial_datagram *pd, void *frag_buf,
    425		unsigned frag_off, unsigned frag_len)
    426{
    427	if (fwnet_frag_new(pd, frag_off, frag_len) == NULL)
    428		return false;
    429
    430	memcpy(pd->pbuf + frag_off, frag_buf, frag_len);
    431
    432	/*
    433	 * Move list entry to beginning of list so that oldest partial
    434	 * datagrams percolate to the end of the list
    435	 */
    436	list_move_tail(&pd->pd_link, &peer->pd_list);
    437
    438	return true;
    439}
    440
    441static bool fwnet_pd_is_complete(struct fwnet_partial_datagram *pd)
    442{
    443	struct fwnet_fragment_info *fi;
    444
    445	fi = list_entry(pd->fi_list.next, struct fwnet_fragment_info, fi_link);
    446
    447	return fi->len == pd->datagram_size;
    448}
    449
    450/* caller must hold dev->lock */
    451static struct fwnet_peer *fwnet_peer_find_by_guid(struct fwnet_device *dev,
    452						  u64 guid)
    453{
    454	struct fwnet_peer *peer;
    455
    456	list_for_each_entry(peer, &dev->peer_list, peer_link)
    457		if (peer->guid == guid)
    458			return peer;
    459
    460	return NULL;
    461}
    462
    463/* caller must hold dev->lock */
    464static struct fwnet_peer *fwnet_peer_find_by_node_id(struct fwnet_device *dev,
    465						int node_id, int generation)
    466{
    467	struct fwnet_peer *peer;
    468
    469	list_for_each_entry(peer, &dev->peer_list, peer_link)
    470		if (peer->node_id    == node_id &&
    471		    peer->generation == generation)
    472			return peer;
    473
    474	return NULL;
    475}
    476
    477/* See IEEE 1394-2008 table 6-4, table 8-8, table 16-18. */
    478static unsigned fwnet_max_payload(unsigned max_rec, unsigned speed)
    479{
    480	max_rec = min(max_rec, speed + 8);
    481	max_rec = clamp(max_rec, 8U, 11U); /* 512...4096 */
    482
    483	return (1 << (max_rec + 1)) - RFC2374_FRAG_HDR_SIZE;
    484}
    485
    486
    487static int fwnet_finish_incoming_packet(struct net_device *net,
    488					struct sk_buff *skb, u16 source_node_id,
    489					bool is_broadcast, u16 ether_type)
    490{
    491	int status;
    492
    493	switch (ether_type) {
    494	case ETH_P_ARP:
    495	case ETH_P_IP:
    496#if IS_ENABLED(CONFIG_IPV6)
    497	case ETH_P_IPV6:
    498#endif
    499		break;
    500	default:
    501		goto err;
    502	}
    503
    504	/* Write metadata, and then pass to the receive level */
    505	skb->dev = net;
    506	skb->ip_summed = CHECKSUM_NONE;
    507
    508	/*
    509	 * Parse the encapsulation header. This actually does the job of
    510	 * converting to an ethernet-like pseudo frame header.
    511	 */
    512	if (dev_hard_header(skb, net, ether_type,
    513			   is_broadcast ? net->broadcast : net->dev_addr,
    514			   NULL, skb->len) >= 0) {
    515		struct fwnet_header *eth;
    516		u16 *rawp;
    517		__be16 protocol;
    518
    519		skb_reset_mac_header(skb);
    520		skb_pull(skb, sizeof(*eth));
    521		eth = (struct fwnet_header *)skb_mac_header(skb);
    522		if (fwnet_hwaddr_is_multicast(eth->h_dest)) {
    523			if (memcmp(eth->h_dest, net->broadcast,
    524				   net->addr_len) == 0)
    525				skb->pkt_type = PACKET_BROADCAST;
    526#if 0
    527			else
    528				skb->pkt_type = PACKET_MULTICAST;
    529#endif
    530		} else {
    531			if (memcmp(eth->h_dest, net->dev_addr, net->addr_len))
    532				skb->pkt_type = PACKET_OTHERHOST;
    533		}
    534		if (ntohs(eth->h_proto) >= ETH_P_802_3_MIN) {
    535			protocol = eth->h_proto;
    536		} else {
    537			rawp = (u16 *)skb->data;
    538			if (*rawp == 0xffff)
    539				protocol = htons(ETH_P_802_3);
    540			else
    541				protocol = htons(ETH_P_802_2);
    542		}
    543		skb->protocol = protocol;
    544	}
    545	status = netif_rx(skb);
    546	if (status == NET_RX_DROP) {
    547		net->stats.rx_errors++;
    548		net->stats.rx_dropped++;
    549	} else {
    550		net->stats.rx_packets++;
    551		net->stats.rx_bytes += skb->len;
    552	}
    553
    554	return 0;
    555
    556 err:
    557	net->stats.rx_errors++;
    558	net->stats.rx_dropped++;
    559
    560	dev_kfree_skb_any(skb);
    561
    562	return -ENOENT;
    563}
    564
    565static int fwnet_incoming_packet(struct fwnet_device *dev, __be32 *buf, int len,
    566				 int source_node_id, int generation,
    567				 bool is_broadcast)
    568{
    569	struct sk_buff *skb;
    570	struct net_device *net = dev->netdev;
    571	struct rfc2734_header hdr;
    572	unsigned lf;
    573	unsigned long flags;
    574	struct fwnet_peer *peer;
    575	struct fwnet_partial_datagram *pd;
    576	int fg_off;
    577	int dg_size;
    578	u16 datagram_label;
    579	int retval;
    580	u16 ether_type;
    581
    582	if (len <= RFC2374_UNFRAG_HDR_SIZE)
    583		return 0;
    584
    585	hdr.w0 = be32_to_cpu(buf[0]);
    586	lf = fwnet_get_hdr_lf(&hdr);
    587	if (lf == RFC2374_HDR_UNFRAG) {
    588		/*
    589		 * An unfragmented datagram has been received by the ieee1394
    590		 * bus. Build an skbuff around it so we can pass it to the
    591		 * high level network layer.
    592		 */
    593		ether_type = fwnet_get_hdr_ether_type(&hdr);
    594		buf++;
    595		len -= RFC2374_UNFRAG_HDR_SIZE;
    596
    597		skb = dev_alloc_skb(len + LL_RESERVED_SPACE(net));
    598		if (unlikely(!skb)) {
    599			net->stats.rx_dropped++;
    600
    601			return -ENOMEM;
    602		}
    603		skb_reserve(skb, LL_RESERVED_SPACE(net));
    604		skb_put_data(skb, buf, len);
    605
    606		return fwnet_finish_incoming_packet(net, skb, source_node_id,
    607						    is_broadcast, ether_type);
    608	}
    609
    610	/* A datagram fragment has been received, now the fun begins. */
    611
    612	if (len <= RFC2374_FRAG_HDR_SIZE)
    613		return 0;
    614
    615	hdr.w1 = ntohl(buf[1]);
    616	buf += 2;
    617	len -= RFC2374_FRAG_HDR_SIZE;
    618	if (lf == RFC2374_HDR_FIRSTFRAG) {
    619		ether_type = fwnet_get_hdr_ether_type(&hdr);
    620		fg_off = 0;
    621	} else {
    622		ether_type = 0;
    623		fg_off = fwnet_get_hdr_fg_off(&hdr);
    624	}
    625	datagram_label = fwnet_get_hdr_dgl(&hdr);
    626	dg_size = fwnet_get_hdr_dg_size(&hdr);
    627
    628	if (fg_off + len > dg_size)
    629		return 0;
    630
    631	spin_lock_irqsave(&dev->lock, flags);
    632
    633	peer = fwnet_peer_find_by_node_id(dev, source_node_id, generation);
    634	if (!peer) {
    635		retval = -ENOENT;
    636		goto fail;
    637	}
    638
    639	pd = fwnet_pd_find(peer, datagram_label);
    640	if (pd == NULL) {
    641		while (peer->pdg_size >= FWNET_MAX_FRAGMENTS) {
    642			/* remove the oldest */
    643			fwnet_pd_delete(list_first_entry(&peer->pd_list,
    644				struct fwnet_partial_datagram, pd_link));
    645			peer->pdg_size--;
    646		}
    647		pd = fwnet_pd_new(net, peer, datagram_label,
    648				  dg_size, buf, fg_off, len);
    649		if (pd == NULL) {
    650			retval = -ENOMEM;
    651			goto fail;
    652		}
    653		peer->pdg_size++;
    654	} else {
    655		if (fwnet_frag_overlap(pd, fg_off, len) ||
    656		    pd->datagram_size != dg_size) {
    657			/*
    658			 * Differing datagram sizes or overlapping fragments,
    659			 * discard old datagram and start a new one.
    660			 */
    661			fwnet_pd_delete(pd);
    662			pd = fwnet_pd_new(net, peer, datagram_label,
    663					  dg_size, buf, fg_off, len);
    664			if (pd == NULL) {
    665				peer->pdg_size--;
    666				retval = -ENOMEM;
    667				goto fail;
    668			}
    669		} else {
    670			if (!fwnet_pd_update(peer, pd, buf, fg_off, len)) {
    671				/*
    672				 * Couldn't save off fragment anyway
    673				 * so might as well obliterate the
    674				 * datagram now.
    675				 */
    676				fwnet_pd_delete(pd);
    677				peer->pdg_size--;
    678				retval = -ENOMEM;
    679				goto fail;
    680			}
    681		}
    682	} /* new datagram or add to existing one */
    683
    684	if (lf == RFC2374_HDR_FIRSTFRAG)
    685		pd->ether_type = ether_type;
    686
    687	if (fwnet_pd_is_complete(pd)) {
    688		ether_type = pd->ether_type;
    689		peer->pdg_size--;
    690		skb = skb_get(pd->skb);
    691		fwnet_pd_delete(pd);
    692
    693		spin_unlock_irqrestore(&dev->lock, flags);
    694
    695		return fwnet_finish_incoming_packet(net, skb, source_node_id,
    696						    false, ether_type);
    697	}
    698	/*
    699	 * Datagram is not complete, we're done for the
    700	 * moment.
    701	 */
    702	retval = 0;
    703 fail:
    704	spin_unlock_irqrestore(&dev->lock, flags);
    705
    706	return retval;
    707}
    708
    709static void fwnet_receive_packet(struct fw_card *card, struct fw_request *r,
    710		int tcode, int destination, int source, int generation,
    711		unsigned long long offset, void *payload, size_t length,
    712		void *callback_data)
    713{
    714	struct fwnet_device *dev = callback_data;
    715	int rcode;
    716
    717	if (destination == IEEE1394_ALL_NODES) {
    718		kfree(r);
    719
    720		return;
    721	}
    722
    723	if (offset != dev->handler.offset)
    724		rcode = RCODE_ADDRESS_ERROR;
    725	else if (tcode != TCODE_WRITE_BLOCK_REQUEST)
    726		rcode = RCODE_TYPE_ERROR;
    727	else if (fwnet_incoming_packet(dev, payload, length,
    728				       source, generation, false) != 0) {
    729		dev_err(&dev->netdev->dev, "incoming packet failure\n");
    730		rcode = RCODE_CONFLICT_ERROR;
    731	} else
    732		rcode = RCODE_COMPLETE;
    733
    734	fw_send_response(card, r, rcode);
    735}
    736
    737static int gasp_source_id(__be32 *p)
    738{
    739	return be32_to_cpu(p[0]) >> 16;
    740}
    741
    742static u32 gasp_specifier_id(__be32 *p)
    743{
    744	return (be32_to_cpu(p[0]) & 0xffff) << 8 |
    745	       (be32_to_cpu(p[1]) & 0xff000000) >> 24;
    746}
    747
    748static u32 gasp_version(__be32 *p)
    749{
    750	return be32_to_cpu(p[1]) & 0xffffff;
    751}
    752
    753static void fwnet_receive_broadcast(struct fw_iso_context *context,
    754		u32 cycle, size_t header_length, void *header, void *data)
    755{
    756	struct fwnet_device *dev;
    757	struct fw_iso_packet packet;
    758	__be16 *hdr_ptr;
    759	__be32 *buf_ptr;
    760	int retval;
    761	u32 length;
    762	unsigned long offset;
    763	unsigned long flags;
    764
    765	dev = data;
    766	hdr_ptr = header;
    767	length = be16_to_cpup(hdr_ptr);
    768
    769	spin_lock_irqsave(&dev->lock, flags);
    770
    771	offset = dev->rcv_buffer_size * dev->broadcast_rcv_next_ptr;
    772	buf_ptr = dev->broadcast_rcv_buffer_ptrs[dev->broadcast_rcv_next_ptr++];
    773	if (dev->broadcast_rcv_next_ptr == dev->num_broadcast_rcv_ptrs)
    774		dev->broadcast_rcv_next_ptr = 0;
    775
    776	spin_unlock_irqrestore(&dev->lock, flags);
    777
    778	if (length > IEEE1394_GASP_HDR_SIZE &&
    779	    gasp_specifier_id(buf_ptr) == IANA_SPECIFIER_ID &&
    780	    (gasp_version(buf_ptr) == RFC2734_SW_VERSION
    781#if IS_ENABLED(CONFIG_IPV6)
    782	     || gasp_version(buf_ptr) == RFC3146_SW_VERSION
    783#endif
    784	    ))
    785		fwnet_incoming_packet(dev, buf_ptr + 2,
    786				      length - IEEE1394_GASP_HDR_SIZE,
    787				      gasp_source_id(buf_ptr),
    788				      context->card->generation, true);
    789
    790	packet.payload_length = dev->rcv_buffer_size;
    791	packet.interrupt = 1;
    792	packet.skip = 0;
    793	packet.tag = 3;
    794	packet.sy = 0;
    795	packet.header_length = IEEE1394_GASP_HDR_SIZE;
    796
    797	spin_lock_irqsave(&dev->lock, flags);
    798
    799	retval = fw_iso_context_queue(dev->broadcast_rcv_context, &packet,
    800				      &dev->broadcast_rcv_buffer, offset);
    801
    802	spin_unlock_irqrestore(&dev->lock, flags);
    803
    804	if (retval >= 0)
    805		fw_iso_context_queue_flush(dev->broadcast_rcv_context);
    806	else
    807		dev_err(&dev->netdev->dev, "requeue failed\n");
    808}
    809
    810static struct kmem_cache *fwnet_packet_task_cache;
    811
    812static void fwnet_free_ptask(struct fwnet_packet_task *ptask)
    813{
    814	dev_kfree_skb_any(ptask->skb);
    815	kmem_cache_free(fwnet_packet_task_cache, ptask);
    816}
    817
    818/* Caller must hold dev->lock. */
    819static void dec_queued_datagrams(struct fwnet_device *dev)
    820{
    821	if (--dev->queued_datagrams == FWNET_MIN_QUEUED_DATAGRAMS)
    822		netif_wake_queue(dev->netdev);
    823}
    824
    825static int fwnet_send_packet(struct fwnet_packet_task *ptask);
    826
    827static void fwnet_transmit_packet_done(struct fwnet_packet_task *ptask)
    828{
    829	struct fwnet_device *dev = ptask->dev;
    830	struct sk_buff *skb = ptask->skb;
    831	unsigned long flags;
    832	bool free;
    833
    834	spin_lock_irqsave(&dev->lock, flags);
    835
    836	ptask->outstanding_pkts--;
    837
    838	/* Check whether we or the networking TX soft-IRQ is last user. */
    839	free = (ptask->outstanding_pkts == 0 && ptask->enqueued);
    840	if (free)
    841		dec_queued_datagrams(dev);
    842
    843	if (ptask->outstanding_pkts == 0) {
    844		dev->netdev->stats.tx_packets++;
    845		dev->netdev->stats.tx_bytes += skb->len;
    846	}
    847
    848	spin_unlock_irqrestore(&dev->lock, flags);
    849
    850	if (ptask->outstanding_pkts > 0) {
    851		u16 dg_size;
    852		u16 fg_off;
    853		u16 datagram_label;
    854		u16 lf;
    855
    856		/* Update the ptask to point to the next fragment and send it */
    857		lf = fwnet_get_hdr_lf(&ptask->hdr);
    858		switch (lf) {
    859		case RFC2374_HDR_LASTFRAG:
    860		case RFC2374_HDR_UNFRAG:
    861		default:
    862			dev_err(&dev->netdev->dev,
    863				"outstanding packet %x lf %x, header %x,%x\n",
    864				ptask->outstanding_pkts, lf, ptask->hdr.w0,
    865				ptask->hdr.w1);
    866			BUG();
    867
    868		case RFC2374_HDR_FIRSTFRAG:
    869			/* Set frag type here for future interior fragments */
    870			dg_size = fwnet_get_hdr_dg_size(&ptask->hdr);
    871			fg_off = ptask->max_payload - RFC2374_FRAG_HDR_SIZE;
    872			datagram_label = fwnet_get_hdr_dgl(&ptask->hdr);
    873			break;
    874
    875		case RFC2374_HDR_INTFRAG:
    876			dg_size = fwnet_get_hdr_dg_size(&ptask->hdr);
    877			fg_off = fwnet_get_hdr_fg_off(&ptask->hdr)
    878				  + ptask->max_payload - RFC2374_FRAG_HDR_SIZE;
    879			datagram_label = fwnet_get_hdr_dgl(&ptask->hdr);
    880			break;
    881		}
    882
    883		if (ptask->dest_node == IEEE1394_ALL_NODES) {
    884			skb_pull(skb,
    885				 ptask->max_payload + IEEE1394_GASP_HDR_SIZE);
    886		} else {
    887			skb_pull(skb, ptask->max_payload);
    888		}
    889		if (ptask->outstanding_pkts > 1) {
    890			fwnet_make_sf_hdr(&ptask->hdr, RFC2374_HDR_INTFRAG,
    891					  dg_size, fg_off, datagram_label);
    892		} else {
    893			fwnet_make_sf_hdr(&ptask->hdr, RFC2374_HDR_LASTFRAG,
    894					  dg_size, fg_off, datagram_label);
    895			ptask->max_payload = skb->len + RFC2374_FRAG_HDR_SIZE;
    896		}
    897		fwnet_send_packet(ptask);
    898	}
    899
    900	if (free)
    901		fwnet_free_ptask(ptask);
    902}
    903
    904static void fwnet_transmit_packet_failed(struct fwnet_packet_task *ptask)
    905{
    906	struct fwnet_device *dev = ptask->dev;
    907	unsigned long flags;
    908	bool free;
    909
    910	spin_lock_irqsave(&dev->lock, flags);
    911
    912	/* One fragment failed; don't try to send remaining fragments. */
    913	ptask->outstanding_pkts = 0;
    914
    915	/* Check whether we or the networking TX soft-IRQ is last user. */
    916	free = ptask->enqueued;
    917	if (free)
    918		dec_queued_datagrams(dev);
    919
    920	dev->netdev->stats.tx_dropped++;
    921	dev->netdev->stats.tx_errors++;
    922
    923	spin_unlock_irqrestore(&dev->lock, flags);
    924
    925	if (free)
    926		fwnet_free_ptask(ptask);
    927}
    928
    929static void fwnet_write_complete(struct fw_card *card, int rcode,
    930				 void *payload, size_t length, void *data)
    931{
    932	struct fwnet_packet_task *ptask = data;
    933	static unsigned long j;
    934	static int last_rcode, errors_skipped;
    935
    936	if (rcode == RCODE_COMPLETE) {
    937		fwnet_transmit_packet_done(ptask);
    938	} else {
    939		if (printk_timed_ratelimit(&j,  1000) || rcode != last_rcode) {
    940			dev_err(&ptask->dev->netdev->dev,
    941				"fwnet_write_complete failed: %x (skipped %d)\n",
    942				rcode, errors_skipped);
    943
    944			errors_skipped = 0;
    945			last_rcode = rcode;
    946		} else {
    947			errors_skipped++;
    948		}
    949		fwnet_transmit_packet_failed(ptask);
    950	}
    951}
    952
    953static int fwnet_send_packet(struct fwnet_packet_task *ptask)
    954{
    955	struct fwnet_device *dev;
    956	unsigned tx_len;
    957	struct rfc2734_header *bufhdr;
    958	unsigned long flags;
    959	bool free;
    960
    961	dev = ptask->dev;
    962	tx_len = ptask->max_payload;
    963	switch (fwnet_get_hdr_lf(&ptask->hdr)) {
    964	case RFC2374_HDR_UNFRAG:
    965		bufhdr = skb_push(ptask->skb, RFC2374_UNFRAG_HDR_SIZE);
    966		put_unaligned_be32(ptask->hdr.w0, &bufhdr->w0);
    967		break;
    968
    969	case RFC2374_HDR_FIRSTFRAG:
    970	case RFC2374_HDR_INTFRAG:
    971	case RFC2374_HDR_LASTFRAG:
    972		bufhdr = skb_push(ptask->skb, RFC2374_FRAG_HDR_SIZE);
    973		put_unaligned_be32(ptask->hdr.w0, &bufhdr->w0);
    974		put_unaligned_be32(ptask->hdr.w1, &bufhdr->w1);
    975		break;
    976
    977	default:
    978		BUG();
    979	}
    980	if (ptask->dest_node == IEEE1394_ALL_NODES) {
    981		u8 *p;
    982		int generation;
    983		int node_id;
    984		unsigned int sw_version;
    985
    986		/* ptask->generation may not have been set yet */
    987		generation = dev->card->generation;
    988		smp_rmb();
    989		node_id = dev->card->node_id;
    990
    991		switch (ptask->skb->protocol) {
    992		default:
    993			sw_version = RFC2734_SW_VERSION;
    994			break;
    995#if IS_ENABLED(CONFIG_IPV6)
    996		case htons(ETH_P_IPV6):
    997			sw_version = RFC3146_SW_VERSION;
    998#endif
    999		}
   1000
   1001		p = skb_push(ptask->skb, IEEE1394_GASP_HDR_SIZE);
   1002		put_unaligned_be32(node_id << 16 | IANA_SPECIFIER_ID >> 8, p);
   1003		put_unaligned_be32((IANA_SPECIFIER_ID & 0xff) << 24
   1004						| sw_version, &p[4]);
   1005
   1006		/* We should not transmit if broadcast_channel.valid == 0. */
   1007		fw_send_request(dev->card, &ptask->transaction,
   1008				TCODE_STREAM_DATA,
   1009				fw_stream_packet_destination_id(3,
   1010						IEEE1394_BROADCAST_CHANNEL, 0),
   1011				generation, SCODE_100, 0ULL, ptask->skb->data,
   1012				tx_len + 8, fwnet_write_complete, ptask);
   1013
   1014		spin_lock_irqsave(&dev->lock, flags);
   1015
   1016		/* If the AT tasklet already ran, we may be last user. */
   1017		free = (ptask->outstanding_pkts == 0 && !ptask->enqueued);
   1018		if (!free)
   1019			ptask->enqueued = true;
   1020		else
   1021			dec_queued_datagrams(dev);
   1022
   1023		spin_unlock_irqrestore(&dev->lock, flags);
   1024
   1025		goto out;
   1026	}
   1027
   1028	fw_send_request(dev->card, &ptask->transaction,
   1029			TCODE_WRITE_BLOCK_REQUEST, ptask->dest_node,
   1030			ptask->generation, ptask->speed, ptask->fifo_addr,
   1031			ptask->skb->data, tx_len, fwnet_write_complete, ptask);
   1032
   1033	spin_lock_irqsave(&dev->lock, flags);
   1034
   1035	/* If the AT tasklet already ran, we may be last user. */
   1036	free = (ptask->outstanding_pkts == 0 && !ptask->enqueued);
   1037	if (!free)
   1038		ptask->enqueued = true;
   1039	else
   1040		dec_queued_datagrams(dev);
   1041
   1042	spin_unlock_irqrestore(&dev->lock, flags);
   1043
   1044	netif_trans_update(dev->netdev);
   1045 out:
   1046	if (free)
   1047		fwnet_free_ptask(ptask);
   1048
   1049	return 0;
   1050}
   1051
   1052static void fwnet_fifo_stop(struct fwnet_device *dev)
   1053{
   1054	if (dev->local_fifo == FWNET_NO_FIFO_ADDR)
   1055		return;
   1056
   1057	fw_core_remove_address_handler(&dev->handler);
   1058	dev->local_fifo = FWNET_NO_FIFO_ADDR;
   1059}
   1060
   1061static int fwnet_fifo_start(struct fwnet_device *dev)
   1062{
   1063	int retval;
   1064
   1065	if (dev->local_fifo != FWNET_NO_FIFO_ADDR)
   1066		return 0;
   1067
   1068	dev->handler.length = 4096;
   1069	dev->handler.address_callback = fwnet_receive_packet;
   1070	dev->handler.callback_data = dev;
   1071
   1072	retval = fw_core_add_address_handler(&dev->handler,
   1073					     &fw_high_memory_region);
   1074	if (retval < 0)
   1075		return retval;
   1076
   1077	dev->local_fifo = dev->handler.offset;
   1078
   1079	return 0;
   1080}
   1081
   1082static void __fwnet_broadcast_stop(struct fwnet_device *dev)
   1083{
   1084	unsigned u;
   1085
   1086	if (dev->broadcast_state != FWNET_BROADCAST_ERROR) {
   1087		for (u = 0; u < FWNET_ISO_PAGE_COUNT; u++)
   1088			kunmap(dev->broadcast_rcv_buffer.pages[u]);
   1089		fw_iso_buffer_destroy(&dev->broadcast_rcv_buffer, dev->card);
   1090	}
   1091	if (dev->broadcast_rcv_context) {
   1092		fw_iso_context_destroy(dev->broadcast_rcv_context);
   1093		dev->broadcast_rcv_context = NULL;
   1094	}
   1095	kfree(dev->broadcast_rcv_buffer_ptrs);
   1096	dev->broadcast_rcv_buffer_ptrs = NULL;
   1097	dev->broadcast_state = FWNET_BROADCAST_ERROR;
   1098}
   1099
   1100static void fwnet_broadcast_stop(struct fwnet_device *dev)
   1101{
   1102	if (dev->broadcast_state == FWNET_BROADCAST_ERROR)
   1103		return;
   1104	fw_iso_context_stop(dev->broadcast_rcv_context);
   1105	__fwnet_broadcast_stop(dev);
   1106}
   1107
   1108static int fwnet_broadcast_start(struct fwnet_device *dev)
   1109{
   1110	struct fw_iso_context *context;
   1111	int retval;
   1112	unsigned num_packets;
   1113	unsigned max_receive;
   1114	struct fw_iso_packet packet;
   1115	unsigned long offset;
   1116	void **ptrptr;
   1117	unsigned u;
   1118
   1119	if (dev->broadcast_state != FWNET_BROADCAST_ERROR)
   1120		return 0;
   1121
   1122	max_receive = 1U << (dev->card->max_receive + 1);
   1123	num_packets = (FWNET_ISO_PAGE_COUNT * PAGE_SIZE) / max_receive;
   1124
   1125	ptrptr = kmalloc_array(num_packets, sizeof(void *), GFP_KERNEL);
   1126	if (!ptrptr) {
   1127		retval = -ENOMEM;
   1128		goto failed;
   1129	}
   1130	dev->broadcast_rcv_buffer_ptrs = ptrptr;
   1131
   1132	context = fw_iso_context_create(dev->card, FW_ISO_CONTEXT_RECEIVE,
   1133					IEEE1394_BROADCAST_CHANNEL,
   1134					dev->card->link_speed, 8,
   1135					fwnet_receive_broadcast, dev);
   1136	if (IS_ERR(context)) {
   1137		retval = PTR_ERR(context);
   1138		goto failed;
   1139	}
   1140
   1141	retval = fw_iso_buffer_init(&dev->broadcast_rcv_buffer, dev->card,
   1142				    FWNET_ISO_PAGE_COUNT, DMA_FROM_DEVICE);
   1143	if (retval < 0)
   1144		goto failed;
   1145
   1146	dev->broadcast_state = FWNET_BROADCAST_STOPPED;
   1147
   1148	for (u = 0; u < FWNET_ISO_PAGE_COUNT; u++) {
   1149		void *ptr;
   1150		unsigned v;
   1151
   1152		ptr = kmap(dev->broadcast_rcv_buffer.pages[u]);
   1153		for (v = 0; v < num_packets / FWNET_ISO_PAGE_COUNT; v++)
   1154			*ptrptr++ = (void *) ((char *)ptr + v * max_receive);
   1155	}
   1156	dev->broadcast_rcv_context = context;
   1157
   1158	packet.payload_length = max_receive;
   1159	packet.interrupt = 1;
   1160	packet.skip = 0;
   1161	packet.tag = 3;
   1162	packet.sy = 0;
   1163	packet.header_length = IEEE1394_GASP_HDR_SIZE;
   1164	offset = 0;
   1165
   1166	for (u = 0; u < num_packets; u++) {
   1167		retval = fw_iso_context_queue(context, &packet,
   1168				&dev->broadcast_rcv_buffer, offset);
   1169		if (retval < 0)
   1170			goto failed;
   1171
   1172		offset += max_receive;
   1173	}
   1174	dev->num_broadcast_rcv_ptrs = num_packets;
   1175	dev->rcv_buffer_size = max_receive;
   1176	dev->broadcast_rcv_next_ptr = 0U;
   1177	retval = fw_iso_context_start(context, -1, 0,
   1178			FW_ISO_CONTEXT_MATCH_ALL_TAGS); /* ??? sync */
   1179	if (retval < 0)
   1180		goto failed;
   1181
   1182	/* FIXME: adjust it according to the min. speed of all known peers? */
   1183	dev->broadcast_xmt_max_payload = IEEE1394_MAX_PAYLOAD_S100
   1184			- IEEE1394_GASP_HDR_SIZE - RFC2374_UNFRAG_HDR_SIZE;
   1185	dev->broadcast_state = FWNET_BROADCAST_RUNNING;
   1186
   1187	return 0;
   1188
   1189 failed:
   1190	__fwnet_broadcast_stop(dev);
   1191	return retval;
   1192}
   1193
   1194static void set_carrier_state(struct fwnet_device *dev)
   1195{
   1196	if (dev->peer_count > 1)
   1197		netif_carrier_on(dev->netdev);
   1198	else
   1199		netif_carrier_off(dev->netdev);
   1200}
   1201
   1202/* ifup */
   1203static int fwnet_open(struct net_device *net)
   1204{
   1205	struct fwnet_device *dev = netdev_priv(net);
   1206	int ret;
   1207
   1208	ret = fwnet_broadcast_start(dev);
   1209	if (ret)
   1210		return ret;
   1211
   1212	netif_start_queue(net);
   1213
   1214	spin_lock_irq(&dev->lock);
   1215	set_carrier_state(dev);
   1216	spin_unlock_irq(&dev->lock);
   1217
   1218	return 0;
   1219}
   1220
   1221/* ifdown */
   1222static int fwnet_stop(struct net_device *net)
   1223{
   1224	struct fwnet_device *dev = netdev_priv(net);
   1225
   1226	netif_stop_queue(net);
   1227	fwnet_broadcast_stop(dev);
   1228
   1229	return 0;
   1230}
   1231
   1232static netdev_tx_t fwnet_tx(struct sk_buff *skb, struct net_device *net)
   1233{
   1234	struct fwnet_header hdr_buf;
   1235	struct fwnet_device *dev = netdev_priv(net);
   1236	__be16 proto;
   1237	u16 dest_node;
   1238	unsigned max_payload;
   1239	u16 dg_size;
   1240	u16 *datagram_label_ptr;
   1241	struct fwnet_packet_task *ptask;
   1242	struct fwnet_peer *peer;
   1243	unsigned long flags;
   1244
   1245	spin_lock_irqsave(&dev->lock, flags);
   1246
   1247	/* Can this happen? */
   1248	if (netif_queue_stopped(dev->netdev)) {
   1249		spin_unlock_irqrestore(&dev->lock, flags);
   1250
   1251		return NETDEV_TX_BUSY;
   1252	}
   1253
   1254	ptask = kmem_cache_alloc(fwnet_packet_task_cache, GFP_ATOMIC);
   1255	if (ptask == NULL)
   1256		goto fail;
   1257
   1258	skb = skb_share_check(skb, GFP_ATOMIC);
   1259	if (!skb)
   1260		goto fail;
   1261
   1262	/*
   1263	 * Make a copy of the driver-specific header.
   1264	 * We might need to rebuild the header on tx failure.
   1265	 */
   1266	memcpy(&hdr_buf, skb->data, sizeof(hdr_buf));
   1267	proto = hdr_buf.h_proto;
   1268
   1269	switch (proto) {
   1270	case htons(ETH_P_ARP):
   1271	case htons(ETH_P_IP):
   1272#if IS_ENABLED(CONFIG_IPV6)
   1273	case htons(ETH_P_IPV6):
   1274#endif
   1275		break;
   1276	default:
   1277		goto fail;
   1278	}
   1279
   1280	skb_pull(skb, sizeof(hdr_buf));
   1281	dg_size = skb->len;
   1282
   1283	/*
   1284	 * Set the transmission type for the packet.  ARP packets and IP
   1285	 * broadcast packets are sent via GASP.
   1286	 */
   1287	if (fwnet_hwaddr_is_multicast(hdr_buf.h_dest)) {
   1288		max_payload        = dev->broadcast_xmt_max_payload;
   1289		datagram_label_ptr = &dev->broadcast_xmt_datagramlabel;
   1290
   1291		ptask->fifo_addr   = FWNET_NO_FIFO_ADDR;
   1292		ptask->generation  = 0;
   1293		ptask->dest_node   = IEEE1394_ALL_NODES;
   1294		ptask->speed       = SCODE_100;
   1295	} else {
   1296		union fwnet_hwaddr *ha = (union fwnet_hwaddr *)hdr_buf.h_dest;
   1297		__be64 guid = get_unaligned(&ha->uc.uniq_id);
   1298		u8 generation;
   1299
   1300		peer = fwnet_peer_find_by_guid(dev, be64_to_cpu(guid));
   1301		if (!peer)
   1302			goto fail;
   1303
   1304		generation         = peer->generation;
   1305		dest_node          = peer->node_id;
   1306		max_payload        = peer->max_payload;
   1307		datagram_label_ptr = &peer->datagram_label;
   1308
   1309		ptask->fifo_addr   = fwnet_hwaddr_fifo(ha);
   1310		ptask->generation  = generation;
   1311		ptask->dest_node   = dest_node;
   1312		ptask->speed       = peer->speed;
   1313	}
   1314
   1315	ptask->hdr.w0 = 0;
   1316	ptask->hdr.w1 = 0;
   1317	ptask->skb = skb;
   1318	ptask->dev = dev;
   1319
   1320	/* Does it all fit in one packet? */
   1321	if (dg_size <= max_payload) {
   1322		fwnet_make_uf_hdr(&ptask->hdr, ntohs(proto));
   1323		ptask->outstanding_pkts = 1;
   1324		max_payload = dg_size + RFC2374_UNFRAG_HDR_SIZE;
   1325	} else {
   1326		u16 datagram_label;
   1327
   1328		max_payload -= RFC2374_FRAG_OVERHEAD;
   1329		datagram_label = (*datagram_label_ptr)++;
   1330		fwnet_make_ff_hdr(&ptask->hdr, ntohs(proto), dg_size,
   1331				  datagram_label);
   1332		ptask->outstanding_pkts = DIV_ROUND_UP(dg_size, max_payload);
   1333		max_payload += RFC2374_FRAG_HDR_SIZE;
   1334	}
   1335
   1336	if (++dev->queued_datagrams == FWNET_MAX_QUEUED_DATAGRAMS)
   1337		netif_stop_queue(dev->netdev);
   1338
   1339	spin_unlock_irqrestore(&dev->lock, flags);
   1340
   1341	ptask->max_payload = max_payload;
   1342	ptask->enqueued    = 0;
   1343
   1344	fwnet_send_packet(ptask);
   1345
   1346	return NETDEV_TX_OK;
   1347
   1348 fail:
   1349	spin_unlock_irqrestore(&dev->lock, flags);
   1350
   1351	if (ptask)
   1352		kmem_cache_free(fwnet_packet_task_cache, ptask);
   1353
   1354	if (skb != NULL)
   1355		dev_kfree_skb(skb);
   1356
   1357	net->stats.tx_dropped++;
   1358	net->stats.tx_errors++;
   1359
   1360	/*
   1361	 * FIXME: According to a patch from 2003-02-26, "returning non-zero
   1362	 * causes serious problems" here, allegedly.  Before that patch,
   1363	 * -ERRNO was returned which is not appropriate under Linux 2.6.
   1364	 * Perhaps more needs to be done?  Stop the queue in serious
   1365	 * conditions and restart it elsewhere?
   1366	 */
   1367	return NETDEV_TX_OK;
   1368}
   1369
   1370static const struct ethtool_ops fwnet_ethtool_ops = {
   1371	.get_link	= ethtool_op_get_link,
   1372};
   1373
   1374static const struct net_device_ops fwnet_netdev_ops = {
   1375	.ndo_open       = fwnet_open,
   1376	.ndo_stop	= fwnet_stop,
   1377	.ndo_start_xmit = fwnet_tx,
   1378};
   1379
   1380static void fwnet_init_dev(struct net_device *net)
   1381{
   1382	net->header_ops		= &fwnet_header_ops;
   1383	net->netdev_ops		= &fwnet_netdev_ops;
   1384	net->watchdog_timeo	= 2 * HZ;
   1385	net->flags		= IFF_BROADCAST | IFF_MULTICAST;
   1386	net->features		= NETIF_F_HIGHDMA;
   1387	net->addr_len		= FWNET_ALEN;
   1388	net->hard_header_len	= FWNET_HLEN;
   1389	net->type		= ARPHRD_IEEE1394;
   1390	net->tx_queue_len	= FWNET_TX_QUEUE_LEN;
   1391	net->ethtool_ops	= &fwnet_ethtool_ops;
   1392}
   1393
   1394/* caller must hold fwnet_device_mutex */
   1395static struct fwnet_device *fwnet_dev_find(struct fw_card *card)
   1396{
   1397	struct fwnet_device *dev;
   1398
   1399	list_for_each_entry(dev, &fwnet_device_list, dev_link)
   1400		if (dev->card == card)
   1401			return dev;
   1402
   1403	return NULL;
   1404}
   1405
   1406static int fwnet_add_peer(struct fwnet_device *dev,
   1407			  struct fw_unit *unit, struct fw_device *device)
   1408{
   1409	struct fwnet_peer *peer;
   1410
   1411	peer = kmalloc(sizeof(*peer), GFP_KERNEL);
   1412	if (!peer)
   1413		return -ENOMEM;
   1414
   1415	dev_set_drvdata(&unit->device, peer);
   1416
   1417	peer->dev = dev;
   1418	peer->guid = (u64)device->config_rom[3] << 32 | device->config_rom[4];
   1419	INIT_LIST_HEAD(&peer->pd_list);
   1420	peer->pdg_size = 0;
   1421	peer->datagram_label = 0;
   1422	peer->speed = device->max_speed;
   1423	peer->max_payload = fwnet_max_payload(device->max_rec, peer->speed);
   1424
   1425	peer->generation = device->generation;
   1426	smp_rmb();
   1427	peer->node_id = device->node_id;
   1428
   1429	spin_lock_irq(&dev->lock);
   1430	list_add_tail(&peer->peer_link, &dev->peer_list);
   1431	dev->peer_count++;
   1432	set_carrier_state(dev);
   1433	spin_unlock_irq(&dev->lock);
   1434
   1435	return 0;
   1436}
   1437
   1438static int fwnet_probe(struct fw_unit *unit,
   1439		       const struct ieee1394_device_id *id)
   1440{
   1441	struct fw_device *device = fw_parent_device(unit);
   1442	struct fw_card *card = device->card;
   1443	struct net_device *net;
   1444	bool allocated_netdev = false;
   1445	struct fwnet_device *dev;
   1446	union fwnet_hwaddr ha;
   1447	int ret;
   1448
   1449	mutex_lock(&fwnet_device_mutex);
   1450
   1451	dev = fwnet_dev_find(card);
   1452	if (dev) {
   1453		net = dev->netdev;
   1454		goto have_dev;
   1455	}
   1456
   1457	net = alloc_netdev(sizeof(*dev), "firewire%d", NET_NAME_UNKNOWN,
   1458			   fwnet_init_dev);
   1459	if (net == NULL) {
   1460		mutex_unlock(&fwnet_device_mutex);
   1461		return -ENOMEM;
   1462	}
   1463
   1464	allocated_netdev = true;
   1465	SET_NETDEV_DEV(net, card->device);
   1466	dev = netdev_priv(net);
   1467
   1468	spin_lock_init(&dev->lock);
   1469	dev->broadcast_state = FWNET_BROADCAST_ERROR;
   1470	dev->broadcast_rcv_context = NULL;
   1471	dev->broadcast_xmt_max_payload = 0;
   1472	dev->broadcast_xmt_datagramlabel = 0;
   1473	dev->local_fifo = FWNET_NO_FIFO_ADDR;
   1474	dev->queued_datagrams = 0;
   1475	INIT_LIST_HEAD(&dev->peer_list);
   1476	dev->card = card;
   1477	dev->netdev = net;
   1478
   1479	ret = fwnet_fifo_start(dev);
   1480	if (ret < 0)
   1481		goto out;
   1482	dev->local_fifo = dev->handler.offset;
   1483
   1484	/*
   1485	 * default MTU: RFC 2734 cl. 4, RFC 3146 cl. 4
   1486	 * maximum MTU: RFC 2734 cl. 4.2, fragment encapsulation header's
   1487	 *              maximum possible datagram_size + 1 = 0xfff + 1
   1488	 */
   1489	net->mtu = 1500U;
   1490	net->min_mtu = ETH_MIN_MTU;
   1491	net->max_mtu = 4096U;
   1492
   1493	/* Set our hardware address while we're at it */
   1494	ha.uc.uniq_id = cpu_to_be64(card->guid);
   1495	ha.uc.max_rec = dev->card->max_receive;
   1496	ha.uc.sspd = dev->card->link_speed;
   1497	ha.uc.fifo_hi = cpu_to_be16(dev->local_fifo >> 32);
   1498	ha.uc.fifo_lo = cpu_to_be32(dev->local_fifo & 0xffffffff);
   1499	dev_addr_set(net, ha.u);
   1500
   1501	memset(net->broadcast, -1, net->addr_len);
   1502
   1503	ret = register_netdev(net);
   1504	if (ret)
   1505		goto out;
   1506
   1507	list_add_tail(&dev->dev_link, &fwnet_device_list);
   1508	dev_notice(&net->dev, "IP over IEEE 1394 on card %s\n",
   1509		   dev_name(card->device));
   1510 have_dev:
   1511	ret = fwnet_add_peer(dev, unit, device);
   1512	if (ret && allocated_netdev) {
   1513		unregister_netdev(net);
   1514		list_del(&dev->dev_link);
   1515 out:
   1516		fwnet_fifo_stop(dev);
   1517		free_netdev(net);
   1518	}
   1519
   1520	mutex_unlock(&fwnet_device_mutex);
   1521
   1522	return ret;
   1523}
   1524
   1525/*
   1526 * FIXME abort partially sent fragmented datagrams,
   1527 * discard partially received fragmented datagrams
   1528 */
   1529static void fwnet_update(struct fw_unit *unit)
   1530{
   1531	struct fw_device *device = fw_parent_device(unit);
   1532	struct fwnet_peer *peer = dev_get_drvdata(&unit->device);
   1533	int generation;
   1534
   1535	generation = device->generation;
   1536
   1537	spin_lock_irq(&peer->dev->lock);
   1538	peer->node_id    = device->node_id;
   1539	peer->generation = generation;
   1540	spin_unlock_irq(&peer->dev->lock);
   1541}
   1542
   1543static void fwnet_remove_peer(struct fwnet_peer *peer, struct fwnet_device *dev)
   1544{
   1545	struct fwnet_partial_datagram *pd, *pd_next;
   1546
   1547	spin_lock_irq(&dev->lock);
   1548	list_del(&peer->peer_link);
   1549	dev->peer_count--;
   1550	set_carrier_state(dev);
   1551	spin_unlock_irq(&dev->lock);
   1552
   1553	list_for_each_entry_safe(pd, pd_next, &peer->pd_list, pd_link)
   1554		fwnet_pd_delete(pd);
   1555
   1556	kfree(peer);
   1557}
   1558
   1559static void fwnet_remove(struct fw_unit *unit)
   1560{
   1561	struct fwnet_peer *peer = dev_get_drvdata(&unit->device);
   1562	struct fwnet_device *dev = peer->dev;
   1563	struct net_device *net;
   1564	int i;
   1565
   1566	mutex_lock(&fwnet_device_mutex);
   1567
   1568	net = dev->netdev;
   1569
   1570	fwnet_remove_peer(peer, dev);
   1571
   1572	if (list_empty(&dev->peer_list)) {
   1573		unregister_netdev(net);
   1574
   1575		fwnet_fifo_stop(dev);
   1576
   1577		for (i = 0; dev->queued_datagrams && i < 5; i++)
   1578			ssleep(1);
   1579		WARN_ON(dev->queued_datagrams);
   1580		list_del(&dev->dev_link);
   1581
   1582		free_netdev(net);
   1583	}
   1584
   1585	mutex_unlock(&fwnet_device_mutex);
   1586}
   1587
   1588static const struct ieee1394_device_id fwnet_id_table[] = {
   1589	{
   1590		.match_flags  = IEEE1394_MATCH_SPECIFIER_ID |
   1591				IEEE1394_MATCH_VERSION,
   1592		.specifier_id = IANA_SPECIFIER_ID,
   1593		.version      = RFC2734_SW_VERSION,
   1594	},
   1595#if IS_ENABLED(CONFIG_IPV6)
   1596	{
   1597		.match_flags  = IEEE1394_MATCH_SPECIFIER_ID |
   1598				IEEE1394_MATCH_VERSION,
   1599		.specifier_id = IANA_SPECIFIER_ID,
   1600		.version      = RFC3146_SW_VERSION,
   1601	},
   1602#endif
   1603	{ }
   1604};
   1605
   1606static struct fw_driver fwnet_driver = {
   1607	.driver = {
   1608		.owner  = THIS_MODULE,
   1609		.name   = KBUILD_MODNAME,
   1610		.bus    = &fw_bus_type,
   1611	},
   1612	.probe    = fwnet_probe,
   1613	.update   = fwnet_update,
   1614	.remove   = fwnet_remove,
   1615	.id_table = fwnet_id_table,
   1616};
   1617
   1618static const u32 rfc2374_unit_directory_data[] = {
   1619	0x00040000,	/* directory_length		*/
   1620	0x1200005e,	/* unit_specifier_id: IANA	*/
   1621	0x81000003,	/* textual descriptor offset	*/
   1622	0x13000001,	/* unit_sw_version: RFC 2734	*/
   1623	0x81000005,	/* textual descriptor offset	*/
   1624	0x00030000,	/* descriptor_length		*/
   1625	0x00000000,	/* text				*/
   1626	0x00000000,	/* minimal ASCII, en		*/
   1627	0x49414e41,	/* I A N A			*/
   1628	0x00030000,	/* descriptor_length		*/
   1629	0x00000000,	/* text				*/
   1630	0x00000000,	/* minimal ASCII, en		*/
   1631	0x49507634,	/* I P v 4			*/
   1632};
   1633
   1634static struct fw_descriptor rfc2374_unit_directory = {
   1635	.length = ARRAY_SIZE(rfc2374_unit_directory_data),
   1636	.key    = (CSR_DIRECTORY | CSR_UNIT) << 24,
   1637	.data   = rfc2374_unit_directory_data
   1638};
   1639
   1640#if IS_ENABLED(CONFIG_IPV6)
   1641static const u32 rfc3146_unit_directory_data[] = {
   1642	0x00040000,	/* directory_length		*/
   1643	0x1200005e,	/* unit_specifier_id: IANA	*/
   1644	0x81000003,	/* textual descriptor offset	*/
   1645	0x13000002,	/* unit_sw_version: RFC 3146	*/
   1646	0x81000005,	/* textual descriptor offset	*/
   1647	0x00030000,	/* descriptor_length		*/
   1648	0x00000000,	/* text				*/
   1649	0x00000000,	/* minimal ASCII, en		*/
   1650	0x49414e41,	/* I A N A			*/
   1651	0x00030000,	/* descriptor_length		*/
   1652	0x00000000,	/* text				*/
   1653	0x00000000,	/* minimal ASCII, en		*/
   1654	0x49507636,	/* I P v 6			*/
   1655};
   1656
   1657static struct fw_descriptor rfc3146_unit_directory = {
   1658	.length = ARRAY_SIZE(rfc3146_unit_directory_data),
   1659	.key    = (CSR_DIRECTORY | CSR_UNIT) << 24,
   1660	.data   = rfc3146_unit_directory_data
   1661};
   1662#endif
   1663
   1664static int __init fwnet_init(void)
   1665{
   1666	int err;
   1667
   1668	err = fw_core_add_descriptor(&rfc2374_unit_directory);
   1669	if (err)
   1670		return err;
   1671
   1672#if IS_ENABLED(CONFIG_IPV6)
   1673	err = fw_core_add_descriptor(&rfc3146_unit_directory);
   1674	if (err)
   1675		goto out;
   1676#endif
   1677
   1678	fwnet_packet_task_cache = kmem_cache_create("packet_task",
   1679			sizeof(struct fwnet_packet_task), 0, 0, NULL);
   1680	if (!fwnet_packet_task_cache) {
   1681		err = -ENOMEM;
   1682		goto out2;
   1683	}
   1684
   1685	err = driver_register(&fwnet_driver.driver);
   1686	if (!err)
   1687		return 0;
   1688
   1689	kmem_cache_destroy(fwnet_packet_task_cache);
   1690out2:
   1691#if IS_ENABLED(CONFIG_IPV6)
   1692	fw_core_remove_descriptor(&rfc3146_unit_directory);
   1693out:
   1694#endif
   1695	fw_core_remove_descriptor(&rfc2374_unit_directory);
   1696
   1697	return err;
   1698}
   1699module_init(fwnet_init);
   1700
   1701static void __exit fwnet_cleanup(void)
   1702{
   1703	driver_unregister(&fwnet_driver.driver);
   1704	kmem_cache_destroy(fwnet_packet_task_cache);
   1705#if IS_ENABLED(CONFIG_IPV6)
   1706	fw_core_remove_descriptor(&rfc3146_unit_directory);
   1707#endif
   1708	fw_core_remove_descriptor(&rfc2374_unit_directory);
   1709}
   1710module_exit(fwnet_cleanup);
   1711
   1712MODULE_AUTHOR("Jay Fenlason <fenlason@redhat.com>");
   1713MODULE_DESCRIPTION("IP over IEEE1394 as per RFC 2734/3146");
   1714MODULE_LICENSE("GPL");
   1715MODULE_DEVICE_TABLE(ieee1394, fwnet_id_table);