[PATCH] Add adm8211 802.11b wireless driver
[pandora-kernel.git] / drivers / net / xen-netfront.c
1 /*
2  * Virtual network driver for conversing with remote driver backends.
3  *
4  * Copyright (c) 2002-2005, K A Fraser
5  * Copyright (c) 2005, XenSource Ltd
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License version 2
9  * as published by the Free Software Foundation; or, when distributed
10  * separately from the Linux kernel or incorporated into other
11  * software packages, subject to the following license:
12  *
13  * Permission is hereby granted, free of charge, to any person obtaining a copy
14  * of this source file (the "Software"), to deal in the Software without
15  * restriction, including without limitation the rights to use, copy, modify,
16  * merge, publish, distribute, sublicense, and/or sell copies of the Software,
17  * and to permit persons to whom the Software is furnished to do so, subject to
18  * the following conditions:
19  *
20  * The above copyright notice and this permission notice shall be included in
21  * all copies or substantial portions of the Software.
22  *
23  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
28  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
29  * IN THE SOFTWARE.
30  */
31
32 #include <linux/module.h>
33 #include <linux/kernel.h>
34 #include <linux/netdevice.h>
35 #include <linux/etherdevice.h>
36 #include <linux/skbuff.h>
37 #include <linux/ethtool.h>
38 #include <linux/if_ether.h>
39 #include <linux/tcp.h>
40 #include <linux/udp.h>
41 #include <linux/moduleparam.h>
42 #include <linux/mm.h>
43 #include <net/ip.h>
44
45 #include <xen/xenbus.h>
46 #include <xen/events.h>
47 #include <xen/page.h>
48 #include <xen/grant_table.h>
49
50 #include <xen/interface/io/netif.h>
51 #include <xen/interface/memory.h>
52 #include <xen/interface/grant_table.h>
53
54 static struct ethtool_ops xennet_ethtool_ops;
55
56 struct netfront_cb {
57         struct page *page;
58         unsigned offset;
59 };
60
61 #define NETFRONT_SKB_CB(skb)    ((struct netfront_cb *)((skb)->cb))
62
63 #define RX_COPY_THRESHOLD 256
64
65 #define GRANT_INVALID_REF       0
66
67 #define NET_TX_RING_SIZE __RING_SIZE((struct xen_netif_tx_sring *)0, PAGE_SIZE)
68 #define NET_RX_RING_SIZE __RING_SIZE((struct xen_netif_rx_sring *)0, PAGE_SIZE)
69 #define TX_MAX_TARGET min_t(int, NET_RX_RING_SIZE, 256)
70
71 struct netfront_info {
72         struct list_head list;
73         struct net_device *netdev;
74
75         struct napi_struct napi;
76         struct net_device_stats stats;
77
78         struct xen_netif_tx_front_ring tx;
79         struct xen_netif_rx_front_ring rx;
80
81         spinlock_t   tx_lock;
82         spinlock_t   rx_lock;
83
84         unsigned int evtchn;
85
86         /* Receive-ring batched refills. */
87 #define RX_MIN_TARGET 8
88 #define RX_DFL_MIN_TARGET 64
89 #define RX_MAX_TARGET min_t(int, NET_RX_RING_SIZE, 256)
90         unsigned rx_min_target, rx_max_target, rx_target;
91         struct sk_buff_head rx_batch;
92
93         struct timer_list rx_refill_timer;
94
95         /*
96          * {tx,rx}_skbs store outstanding skbuffs. Free tx_skb entries
97          * are linked from tx_skb_freelist through skb_entry.link.
98          *
99          *  NB. Freelist index entries are always going to be less than
100          *  PAGE_OFFSET, whereas pointers to skbs will always be equal or
101          *  greater than PAGE_OFFSET: we use this property to distinguish
102          *  them.
103          */
104         union skb_entry {
105                 struct sk_buff *skb;
106                 unsigned link;
107         } tx_skbs[NET_TX_RING_SIZE];
108         grant_ref_t gref_tx_head;
109         grant_ref_t grant_tx_ref[NET_TX_RING_SIZE];
110         unsigned tx_skb_freelist;
111
112         struct sk_buff *rx_skbs[NET_RX_RING_SIZE];
113         grant_ref_t gref_rx_head;
114         grant_ref_t grant_rx_ref[NET_RX_RING_SIZE];
115
116         struct xenbus_device *xbdev;
117         int tx_ring_ref;
118         int rx_ring_ref;
119
120         unsigned long rx_pfn_array[NET_RX_RING_SIZE];
121         struct multicall_entry rx_mcl[NET_RX_RING_SIZE+1];
122         struct mmu_update rx_mmu[NET_RX_RING_SIZE];
123 };
124
125 struct netfront_rx_info {
126         struct xen_netif_rx_response rx;
127         struct xen_netif_extra_info extras[XEN_NETIF_EXTRA_TYPE_MAX - 1];
128 };
129
130 /*
131  * Access macros for acquiring freeing slots in tx_skbs[].
132  */
133
134 static void add_id_to_freelist(unsigned *head, union skb_entry *list,
135                                unsigned short id)
136 {
137         list[id].link = *head;
138         *head = id;
139 }
140
141 static unsigned short get_id_from_freelist(unsigned *head,
142                                            union skb_entry *list)
143 {
144         unsigned int id = *head;
145         *head = list[id].link;
146         return id;
147 }
148
149 static int xennet_rxidx(RING_IDX idx)
150 {
151         return idx & (NET_RX_RING_SIZE - 1);
152 }
153
154 static struct sk_buff *xennet_get_rx_skb(struct netfront_info *np,
155                                          RING_IDX ri)
156 {
157         int i = xennet_rxidx(ri);
158         struct sk_buff *skb = np->rx_skbs[i];
159         np->rx_skbs[i] = NULL;
160         return skb;
161 }
162
163 static grant_ref_t xennet_get_rx_ref(struct netfront_info *np,
164                                             RING_IDX ri)
165 {
166         int i = xennet_rxidx(ri);
167         grant_ref_t ref = np->grant_rx_ref[i];
168         np->grant_rx_ref[i] = GRANT_INVALID_REF;
169         return ref;
170 }
171
172 #ifdef CONFIG_SYSFS
173 static int xennet_sysfs_addif(struct net_device *netdev);
174 static void xennet_sysfs_delif(struct net_device *netdev);
175 #else /* !CONFIG_SYSFS */
176 #define xennet_sysfs_addif(dev) (0)
177 #define xennet_sysfs_delif(dev) do { } while (0)
178 #endif
179
180 static int xennet_can_sg(struct net_device *dev)
181 {
182         return dev->features & NETIF_F_SG;
183 }
184
185
186 static void rx_refill_timeout(unsigned long data)
187 {
188         struct net_device *dev = (struct net_device *)data;
189         struct netfront_info *np = netdev_priv(dev);
190         netif_rx_schedule(dev, &np->napi);
191 }
192
193 static int netfront_tx_slot_available(struct netfront_info *np)
194 {
195         return ((np->tx.req_prod_pvt - np->tx.rsp_cons) <
196                 (TX_MAX_TARGET - MAX_SKB_FRAGS - 2));
197 }
198
199 static void xennet_maybe_wake_tx(struct net_device *dev)
200 {
201         struct netfront_info *np = netdev_priv(dev);
202
203         if (unlikely(netif_queue_stopped(dev)) &&
204             netfront_tx_slot_available(np) &&
205             likely(netif_running(dev)))
206                 netif_wake_queue(dev);
207 }
208
209 static void xennet_alloc_rx_buffers(struct net_device *dev)
210 {
211         unsigned short id;
212         struct netfront_info *np = netdev_priv(dev);
213         struct sk_buff *skb;
214         struct page *page;
215         int i, batch_target, notify;
216         RING_IDX req_prod = np->rx.req_prod_pvt;
217         struct xen_memory_reservation reservation;
218         grant_ref_t ref;
219         unsigned long pfn;
220         void *vaddr;
221         int nr_flips;
222         struct xen_netif_rx_request *req;
223
224         if (unlikely(!netif_carrier_ok(dev)))
225                 return;
226
227         /*
228          * Allocate skbuffs greedily, even though we batch updates to the
229          * receive ring. This creates a less bursty demand on the memory
230          * allocator, so should reduce the chance of failed allocation requests
231          * both for ourself and for other kernel subsystems.
232          */
233         batch_target = np->rx_target - (req_prod - np->rx.rsp_cons);
234         for (i = skb_queue_len(&np->rx_batch); i < batch_target; i++) {
235                 skb = __netdev_alloc_skb(dev, RX_COPY_THRESHOLD,
236                                          GFP_ATOMIC | __GFP_NOWARN);
237                 if (unlikely(!skb))
238                         goto no_skb;
239
240                 page = alloc_page(GFP_ATOMIC | __GFP_NOWARN);
241                 if (!page) {
242                         kfree_skb(skb);
243 no_skb:
244                         /* Any skbuffs queued for refill? Force them out. */
245                         if (i != 0)
246                                 goto refill;
247                         /* Could not allocate any skbuffs. Try again later. */
248                         mod_timer(&np->rx_refill_timer,
249                                   jiffies + (HZ/10));
250                         break;
251                 }
252
253                 skb_shinfo(skb)->frags[0].page = page;
254                 skb_shinfo(skb)->nr_frags = 1;
255                 __skb_queue_tail(&np->rx_batch, skb);
256         }
257
258         /* Is the batch large enough to be worthwhile? */
259         if (i < (np->rx_target/2)) {
260                 if (req_prod > np->rx.sring->req_prod)
261                         goto push;
262                 return;
263         }
264
265         /* Adjust our fill target if we risked running out of buffers. */
266         if (((req_prod - np->rx.sring->rsp_prod) < (np->rx_target / 4)) &&
267             ((np->rx_target *= 2) > np->rx_max_target))
268                 np->rx_target = np->rx_max_target;
269
270  refill:
271         for (nr_flips = i = 0; ; i++) {
272                 skb = __skb_dequeue(&np->rx_batch);
273                 if (skb == NULL)
274                         break;
275
276                 skb->dev = dev;
277
278                 id = xennet_rxidx(req_prod + i);
279
280                 BUG_ON(np->rx_skbs[id]);
281                 np->rx_skbs[id] = skb;
282
283                 ref = gnttab_claim_grant_reference(&np->gref_rx_head);
284                 BUG_ON((signed short)ref < 0);
285                 np->grant_rx_ref[id] = ref;
286
287                 pfn = page_to_pfn(skb_shinfo(skb)->frags[0].page);
288                 vaddr = page_address(skb_shinfo(skb)->frags[0].page);
289
290                 req = RING_GET_REQUEST(&np->rx, req_prod + i);
291                 gnttab_grant_foreign_access_ref(ref,
292                                                 np->xbdev->otherend_id,
293                                                 pfn_to_mfn(pfn),
294                                                 0);
295
296                 req->id = id;
297                 req->gref = ref;
298         }
299
300         if (nr_flips != 0) {
301                 reservation.extent_start = np->rx_pfn_array;
302                 reservation.nr_extents   = nr_flips;
303                 reservation.extent_order = 0;
304                 reservation.address_bits = 0;
305                 reservation.domid        = DOMID_SELF;
306
307                 if (!xen_feature(XENFEAT_auto_translated_physmap)) {
308                         /* After all PTEs have been zapped, flush the TLB. */
309                         np->rx_mcl[i-1].args[MULTI_UVMFLAGS_INDEX] =
310                                 UVMF_TLB_FLUSH|UVMF_ALL;
311
312                         /* Give away a batch of pages. */
313                         np->rx_mcl[i].op = __HYPERVISOR_memory_op;
314                         np->rx_mcl[i].args[0] = XENMEM_decrease_reservation;
315                         np->rx_mcl[i].args[1] = (unsigned long)&reservation;
316
317                         /* Zap PTEs and give away pages in one big
318                          * multicall. */
319                         (void)HYPERVISOR_multicall(np->rx_mcl, i+1);
320
321                         /* Check return status of HYPERVISOR_memory_op(). */
322                         if (unlikely(np->rx_mcl[i].result != i))
323                                 panic("Unable to reduce memory reservation\n");
324                 } else {
325                         if (HYPERVISOR_memory_op(XENMEM_decrease_reservation,
326                                                  &reservation) != i)
327                                 panic("Unable to reduce memory reservation\n");
328                 }
329         } else {
330                 wmb();          /* barrier so backend seens requests */
331         }
332
333         /* Above is a suitable barrier to ensure backend will see requests. */
334         np->rx.req_prod_pvt = req_prod + i;
335  push:
336         RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(&np->rx, notify);
337         if (notify)
338                 notify_remote_via_irq(np->netdev->irq);
339 }
340
341 static int xennet_open(struct net_device *dev)
342 {
343         struct netfront_info *np = netdev_priv(dev);
344
345         memset(&np->stats, 0, sizeof(np->stats));
346
347         napi_enable(&np->napi);
348
349         spin_lock_bh(&np->rx_lock);
350         if (netif_carrier_ok(dev)) {
351                 xennet_alloc_rx_buffers(dev);
352                 np->rx.sring->rsp_event = np->rx.rsp_cons + 1;
353                 if (RING_HAS_UNCONSUMED_RESPONSES(&np->rx))
354                         netif_rx_schedule(dev, &np->napi);
355         }
356         spin_unlock_bh(&np->rx_lock);
357
358         xennet_maybe_wake_tx(dev);
359
360         return 0;
361 }
362
363 static void xennet_tx_buf_gc(struct net_device *dev)
364 {
365         RING_IDX cons, prod;
366         unsigned short id;
367         struct netfront_info *np = netdev_priv(dev);
368         struct sk_buff *skb;
369
370         BUG_ON(!netif_carrier_ok(dev));
371
372         do {
373                 prod = np->tx.sring->rsp_prod;
374                 rmb(); /* Ensure we see responses up to 'rp'. */
375
376                 for (cons = np->tx.rsp_cons; cons != prod; cons++) {
377                         struct xen_netif_tx_response *txrsp;
378
379                         txrsp = RING_GET_RESPONSE(&np->tx, cons);
380                         if (txrsp->status == NETIF_RSP_NULL)
381                                 continue;
382
383                         id  = txrsp->id;
384                         skb = np->tx_skbs[id].skb;
385                         if (unlikely(gnttab_query_foreign_access(
386                                 np->grant_tx_ref[id]) != 0)) {
387                                 printk(KERN_ALERT "xennet_tx_buf_gc: warning "
388                                        "-- grant still in use by backend "
389                                        "domain.\n");
390                                 BUG();
391                         }
392                         gnttab_end_foreign_access_ref(
393                                 np->grant_tx_ref[id], GNTMAP_readonly);
394                         gnttab_release_grant_reference(
395                                 &np->gref_tx_head, np->grant_tx_ref[id]);
396                         np->grant_tx_ref[id] = GRANT_INVALID_REF;
397                         add_id_to_freelist(&np->tx_skb_freelist, np->tx_skbs, id);
398                         dev_kfree_skb_irq(skb);
399                 }
400
401                 np->tx.rsp_cons = prod;
402
403                 /*
404                  * Set a new event, then check for race with update of tx_cons.
405                  * Note that it is essential to schedule a callback, no matter
406                  * how few buffers are pending. Even if there is space in the
407                  * transmit ring, higher layers may be blocked because too much
408                  * data is outstanding: in such cases notification from Xen is
409                  * likely to be the only kick that we'll get.
410                  */
411                 np->tx.sring->rsp_event =
412                         prod + ((np->tx.sring->req_prod - prod) >> 1) + 1;
413                 mb();           /* update shared area */
414         } while ((cons == prod) && (prod != np->tx.sring->rsp_prod));
415
416         xennet_maybe_wake_tx(dev);
417 }
418
419 static void xennet_make_frags(struct sk_buff *skb, struct net_device *dev,
420                               struct xen_netif_tx_request *tx)
421 {
422         struct netfront_info *np = netdev_priv(dev);
423         char *data = skb->data;
424         unsigned long mfn;
425         RING_IDX prod = np->tx.req_prod_pvt;
426         int frags = skb_shinfo(skb)->nr_frags;
427         unsigned int offset = offset_in_page(data);
428         unsigned int len = skb_headlen(skb);
429         unsigned int id;
430         grant_ref_t ref;
431         int i;
432
433         /* While the header overlaps a page boundary (including being
434            larger than a page), split it it into page-sized chunks. */
435         while (len > PAGE_SIZE - offset) {
436                 tx->size = PAGE_SIZE - offset;
437                 tx->flags |= NETTXF_more_data;
438                 len -= tx->size;
439                 data += tx->size;
440                 offset = 0;
441
442                 id = get_id_from_freelist(&np->tx_skb_freelist, np->tx_skbs);
443                 np->tx_skbs[id].skb = skb_get(skb);
444                 tx = RING_GET_REQUEST(&np->tx, prod++);
445                 tx->id = id;
446                 ref = gnttab_claim_grant_reference(&np->gref_tx_head);
447                 BUG_ON((signed short)ref < 0);
448
449                 mfn = virt_to_mfn(data);
450                 gnttab_grant_foreign_access_ref(ref, np->xbdev->otherend_id,
451                                                 mfn, GNTMAP_readonly);
452
453                 tx->gref = np->grant_tx_ref[id] = ref;
454                 tx->offset = offset;
455                 tx->size = len;
456                 tx->flags = 0;
457         }
458
459         /* Grant backend access to each skb fragment page. */
460         for (i = 0; i < frags; i++) {
461                 skb_frag_t *frag = skb_shinfo(skb)->frags + i;
462
463                 tx->flags |= NETTXF_more_data;
464
465                 id = get_id_from_freelist(&np->tx_skb_freelist, np->tx_skbs);
466                 np->tx_skbs[id].skb = skb_get(skb);
467                 tx = RING_GET_REQUEST(&np->tx, prod++);
468                 tx->id = id;
469                 ref = gnttab_claim_grant_reference(&np->gref_tx_head);
470                 BUG_ON((signed short)ref < 0);
471
472                 mfn = pfn_to_mfn(page_to_pfn(frag->page));
473                 gnttab_grant_foreign_access_ref(ref, np->xbdev->otherend_id,
474                                                 mfn, GNTMAP_readonly);
475
476                 tx->gref = np->grant_tx_ref[id] = ref;
477                 tx->offset = frag->page_offset;
478                 tx->size = frag->size;
479                 tx->flags = 0;
480         }
481
482         np->tx.req_prod_pvt = prod;
483 }
484
485 static int xennet_start_xmit(struct sk_buff *skb, struct net_device *dev)
486 {
487         unsigned short id;
488         struct netfront_info *np = netdev_priv(dev);
489         struct xen_netif_tx_request *tx;
490         struct xen_netif_extra_info *extra;
491         char *data = skb->data;
492         RING_IDX i;
493         grant_ref_t ref;
494         unsigned long mfn;
495         int notify;
496         int frags = skb_shinfo(skb)->nr_frags;
497         unsigned int offset = offset_in_page(data);
498         unsigned int len = skb_headlen(skb);
499
500         frags += (offset + len + PAGE_SIZE - 1) / PAGE_SIZE;
501         if (unlikely(frags > MAX_SKB_FRAGS + 1)) {
502                 printk(KERN_ALERT "xennet: skb rides the rocket: %d frags\n",
503                        frags);
504                 dump_stack();
505                 goto drop;
506         }
507
508         spin_lock_irq(&np->tx_lock);
509
510         if (unlikely(!netif_carrier_ok(dev) ||
511                      (frags > 1 && !xennet_can_sg(dev)) ||
512                      netif_needs_gso(dev, skb))) {
513                 spin_unlock_irq(&np->tx_lock);
514                 goto drop;
515         }
516
517         i = np->tx.req_prod_pvt;
518
519         id = get_id_from_freelist(&np->tx_skb_freelist, np->tx_skbs);
520         np->tx_skbs[id].skb = skb;
521
522         tx = RING_GET_REQUEST(&np->tx, i);
523
524         tx->id   = id;
525         ref = gnttab_claim_grant_reference(&np->gref_tx_head);
526         BUG_ON((signed short)ref < 0);
527         mfn = virt_to_mfn(data);
528         gnttab_grant_foreign_access_ref(
529                 ref, np->xbdev->otherend_id, mfn, GNTMAP_readonly);
530         tx->gref = np->grant_tx_ref[id] = ref;
531         tx->offset = offset;
532         tx->size = len;
533         extra = NULL;
534
535         tx->flags = 0;
536         if (skb->ip_summed == CHECKSUM_PARTIAL)
537                 /* local packet? */
538                 tx->flags |= NETTXF_csum_blank | NETTXF_data_validated;
539         else if (skb->ip_summed == CHECKSUM_UNNECESSARY)
540                 /* remote but checksummed. */
541                 tx->flags |= NETTXF_data_validated;
542
543         if (skb_shinfo(skb)->gso_size) {
544                 struct xen_netif_extra_info *gso;
545
546                 gso = (struct xen_netif_extra_info *)
547                         RING_GET_REQUEST(&np->tx, ++i);
548
549                 if (extra)
550                         extra->flags |= XEN_NETIF_EXTRA_FLAG_MORE;
551                 else
552                         tx->flags |= NETTXF_extra_info;
553
554                 gso->u.gso.size = skb_shinfo(skb)->gso_size;
555                 gso->u.gso.type = XEN_NETIF_GSO_TYPE_TCPV4;
556                 gso->u.gso.pad = 0;
557                 gso->u.gso.features = 0;
558
559                 gso->type = XEN_NETIF_EXTRA_TYPE_GSO;
560                 gso->flags = 0;
561                 extra = gso;
562         }
563
564         np->tx.req_prod_pvt = i + 1;
565
566         xennet_make_frags(skb, dev, tx);
567         tx->size = skb->len;
568
569         RING_PUSH_REQUESTS_AND_CHECK_NOTIFY(&np->tx, notify);
570         if (notify)
571                 notify_remote_via_irq(np->netdev->irq);
572
573         np->stats.tx_bytes += skb->len;
574         np->stats.tx_packets++;
575
576         /* Note: It is not safe to access skb after xennet_tx_buf_gc()! */
577         xennet_tx_buf_gc(dev);
578
579         if (!netfront_tx_slot_available(np))
580                 netif_stop_queue(dev);
581
582         spin_unlock_irq(&np->tx_lock);
583
584         return 0;
585
586  drop:
587         np->stats.tx_dropped++;
588         dev_kfree_skb(skb);
589         return 0;
590 }
591
592 static int xennet_close(struct net_device *dev)
593 {
594         struct netfront_info *np = netdev_priv(dev);
595         netif_stop_queue(np->netdev);
596         napi_disable(&np->napi);
597         return 0;
598 }
599
600 static struct net_device_stats *xennet_get_stats(struct net_device *dev)
601 {
602         struct netfront_info *np = netdev_priv(dev);
603         return &np->stats;
604 }
605
606 static void xennet_move_rx_slot(struct netfront_info *np, struct sk_buff *skb,
607                                 grant_ref_t ref)
608 {
609         int new = xennet_rxidx(np->rx.req_prod_pvt);
610
611         BUG_ON(np->rx_skbs[new]);
612         np->rx_skbs[new] = skb;
613         np->grant_rx_ref[new] = ref;
614         RING_GET_REQUEST(&np->rx, np->rx.req_prod_pvt)->id = new;
615         RING_GET_REQUEST(&np->rx, np->rx.req_prod_pvt)->gref = ref;
616         np->rx.req_prod_pvt++;
617 }
618
619 static int xennet_get_extras(struct netfront_info *np,
620                              struct xen_netif_extra_info *extras,
621                              RING_IDX rp)
622
623 {
624         struct xen_netif_extra_info *extra;
625         struct device *dev = &np->netdev->dev;
626         RING_IDX cons = np->rx.rsp_cons;
627         int err = 0;
628
629         do {
630                 struct sk_buff *skb;
631                 grant_ref_t ref;
632
633                 if (unlikely(cons + 1 == rp)) {
634                         if (net_ratelimit())
635                                 dev_warn(dev, "Missing extra info\n");
636                         err = -EBADR;
637                         break;
638                 }
639
640                 extra = (struct xen_netif_extra_info *)
641                         RING_GET_RESPONSE(&np->rx, ++cons);
642
643                 if (unlikely(!extra->type ||
644                              extra->type >= XEN_NETIF_EXTRA_TYPE_MAX)) {
645                         if (net_ratelimit())
646                                 dev_warn(dev, "Invalid extra type: %d\n",
647                                         extra->type);
648                         err = -EINVAL;
649                 } else {
650                         memcpy(&extras[extra->type - 1], extra,
651                                sizeof(*extra));
652                 }
653
654                 skb = xennet_get_rx_skb(np, cons);
655                 ref = xennet_get_rx_ref(np, cons);
656                 xennet_move_rx_slot(np, skb, ref);
657         } while (extra->flags & XEN_NETIF_EXTRA_FLAG_MORE);
658
659         np->rx.rsp_cons = cons;
660         return err;
661 }
662
663 static int xennet_get_responses(struct netfront_info *np,
664                                 struct netfront_rx_info *rinfo, RING_IDX rp,
665                                 struct sk_buff_head *list)
666 {
667         struct xen_netif_rx_response *rx = &rinfo->rx;
668         struct xen_netif_extra_info *extras = rinfo->extras;
669         struct device *dev = &np->netdev->dev;
670         RING_IDX cons = np->rx.rsp_cons;
671         struct sk_buff *skb = xennet_get_rx_skb(np, cons);
672         grant_ref_t ref = xennet_get_rx_ref(np, cons);
673         int max = MAX_SKB_FRAGS + (rx->status <= RX_COPY_THRESHOLD);
674         int frags = 1;
675         int err = 0;
676         unsigned long ret;
677
678         if (rx->flags & NETRXF_extra_info) {
679                 err = xennet_get_extras(np, extras, rp);
680                 cons = np->rx.rsp_cons;
681         }
682
683         for (;;) {
684                 if (unlikely(rx->status < 0 ||
685                              rx->offset + rx->status > PAGE_SIZE)) {
686                         if (net_ratelimit())
687                                 dev_warn(dev, "rx->offset: %x, size: %u\n",
688                                          rx->offset, rx->status);
689                         xennet_move_rx_slot(np, skb, ref);
690                         err = -EINVAL;
691                         goto next;
692                 }
693
694                 /*
695                  * This definitely indicates a bug, either in this driver or in
696                  * the backend driver. In future this should flag the bad
697                  * situation to the system controller to reboot the backed.
698                  */
699                 if (ref == GRANT_INVALID_REF) {
700                         if (net_ratelimit())
701                                 dev_warn(dev, "Bad rx response id %d.\n",
702                                          rx->id);
703                         err = -EINVAL;
704                         goto next;
705                 }
706
707                 ret = gnttab_end_foreign_access_ref(ref, 0);
708                 BUG_ON(!ret);
709
710                 gnttab_release_grant_reference(&np->gref_rx_head, ref);
711
712                 __skb_queue_tail(list, skb);
713
714 next:
715                 if (!(rx->flags & NETRXF_more_data))
716                         break;
717
718                 if (cons + frags == rp) {
719                         if (net_ratelimit())
720                                 dev_warn(dev, "Need more frags\n");
721                         err = -ENOENT;
722                         break;
723                 }
724
725                 rx = RING_GET_RESPONSE(&np->rx, cons + frags);
726                 skb = xennet_get_rx_skb(np, cons + frags);
727                 ref = xennet_get_rx_ref(np, cons + frags);
728                 frags++;
729         }
730
731         if (unlikely(frags > max)) {
732                 if (net_ratelimit())
733                         dev_warn(dev, "Too many frags\n");
734                 err = -E2BIG;
735         }
736
737         if (unlikely(err))
738                 np->rx.rsp_cons = cons + frags;
739
740         return err;
741 }
742
743 static int xennet_set_skb_gso(struct sk_buff *skb,
744                               struct xen_netif_extra_info *gso)
745 {
746         if (!gso->u.gso.size) {
747                 if (net_ratelimit())
748                         printk(KERN_WARNING "GSO size must not be zero.\n");
749                 return -EINVAL;
750         }
751
752         /* Currently only TCPv4 S.O. is supported. */
753         if (gso->u.gso.type != XEN_NETIF_GSO_TYPE_TCPV4) {
754                 if (net_ratelimit())
755                         printk(KERN_WARNING "Bad GSO type %d.\n", gso->u.gso.type);
756                 return -EINVAL;
757         }
758
759         skb_shinfo(skb)->gso_size = gso->u.gso.size;
760         skb_shinfo(skb)->gso_type = SKB_GSO_TCPV4;
761
762         /* Header must be checked, and gso_segs computed. */
763         skb_shinfo(skb)->gso_type |= SKB_GSO_DODGY;
764         skb_shinfo(skb)->gso_segs = 0;
765
766         return 0;
767 }
768
769 static RING_IDX xennet_fill_frags(struct netfront_info *np,
770                                   struct sk_buff *skb,
771                                   struct sk_buff_head *list)
772 {
773         struct skb_shared_info *shinfo = skb_shinfo(skb);
774         int nr_frags = shinfo->nr_frags;
775         RING_IDX cons = np->rx.rsp_cons;
776         skb_frag_t *frag = shinfo->frags + nr_frags;
777         struct sk_buff *nskb;
778
779         while ((nskb = __skb_dequeue(list))) {
780                 struct xen_netif_rx_response *rx =
781                         RING_GET_RESPONSE(&np->rx, ++cons);
782
783                 frag->page = skb_shinfo(nskb)->frags[0].page;
784                 frag->page_offset = rx->offset;
785                 frag->size = rx->status;
786
787                 skb->data_len += rx->status;
788
789                 skb_shinfo(nskb)->nr_frags = 0;
790                 kfree_skb(nskb);
791
792                 frag++;
793                 nr_frags++;
794         }
795
796         shinfo->nr_frags = nr_frags;
797         return cons;
798 }
799
800 static int skb_checksum_setup(struct sk_buff *skb)
801 {
802         struct iphdr *iph;
803         unsigned char *th;
804         int err = -EPROTO;
805
806         if (skb->protocol != htons(ETH_P_IP))
807                 goto out;
808
809         iph = (void *)skb->data;
810         th = skb->data + 4 * iph->ihl;
811         if (th >= skb_tail_pointer(skb))
812                 goto out;
813
814         skb->csum_start = th - skb->head;
815         switch (iph->protocol) {
816         case IPPROTO_TCP:
817                 skb->csum_offset = offsetof(struct tcphdr, check);
818                 break;
819         case IPPROTO_UDP:
820                 skb->csum_offset = offsetof(struct udphdr, check);
821                 break;
822         default:
823                 if (net_ratelimit())
824                         printk(KERN_ERR "Attempting to checksum a non-"
825                                "TCP/UDP packet, dropping a protocol"
826                                " %d packet", iph->protocol);
827                 goto out;
828         }
829
830         if ((th + skb->csum_offset + 2) > skb_tail_pointer(skb))
831                 goto out;
832
833         err = 0;
834
835 out:
836         return err;
837 }
838
839 static int handle_incoming_queue(struct net_device *dev,
840                                   struct sk_buff_head *rxq)
841 {
842         struct netfront_info *np = netdev_priv(dev);
843         int packets_dropped = 0;
844         struct sk_buff *skb;
845
846         while ((skb = __skb_dequeue(rxq)) != NULL) {
847                 struct page *page = NETFRONT_SKB_CB(skb)->page;
848                 void *vaddr = page_address(page);
849                 unsigned offset = NETFRONT_SKB_CB(skb)->offset;
850
851                 memcpy(skb->data, vaddr + offset,
852                        skb_headlen(skb));
853
854                 if (page != skb_shinfo(skb)->frags[0].page)
855                         __free_page(page);
856
857                 /* Ethernet work: Delayed to here as it peeks the header. */
858                 skb->protocol = eth_type_trans(skb, dev);
859
860                 if (skb->ip_summed == CHECKSUM_PARTIAL) {
861                         if (skb_checksum_setup(skb)) {
862                                 kfree_skb(skb);
863                                 packets_dropped++;
864                                 np->stats.rx_errors++;
865                                 continue;
866                         }
867                 }
868
869                 np->stats.rx_packets++;
870                 np->stats.rx_bytes += skb->len;
871
872                 /* Pass it up. */
873                 netif_receive_skb(skb);
874                 dev->last_rx = jiffies;
875         }
876
877         return packets_dropped;
878 }
879
880 static int xennet_poll(struct napi_struct *napi, int budget)
881 {
882         struct netfront_info *np = container_of(napi, struct netfront_info, napi);
883         struct net_device *dev = np->netdev;
884         struct sk_buff *skb;
885         struct netfront_rx_info rinfo;
886         struct xen_netif_rx_response *rx = &rinfo.rx;
887         struct xen_netif_extra_info *extras = rinfo.extras;
888         RING_IDX i, rp;
889         int work_done;
890         struct sk_buff_head rxq;
891         struct sk_buff_head errq;
892         struct sk_buff_head tmpq;
893         unsigned long flags;
894         unsigned int len;
895         int err;
896
897         spin_lock(&np->rx_lock);
898
899         if (unlikely(!netif_carrier_ok(dev))) {
900                 spin_unlock(&np->rx_lock);
901                 return 0;
902         }
903
904         skb_queue_head_init(&rxq);
905         skb_queue_head_init(&errq);
906         skb_queue_head_init(&tmpq);
907
908         rp = np->rx.sring->rsp_prod;
909         rmb(); /* Ensure we see queued responses up to 'rp'. */
910
911         i = np->rx.rsp_cons;
912         work_done = 0;
913         while ((i != rp) && (work_done < budget)) {
914                 memcpy(rx, RING_GET_RESPONSE(&np->rx, i), sizeof(*rx));
915                 memset(extras, 0, sizeof(rinfo.extras));
916
917                 err = xennet_get_responses(np, &rinfo, rp, &tmpq);
918
919                 if (unlikely(err)) {
920 err:
921                         while ((skb = __skb_dequeue(&tmpq)))
922                                 __skb_queue_tail(&errq, skb);
923                         np->stats.rx_errors++;
924                         i = np->rx.rsp_cons;
925                         continue;
926                 }
927
928                 skb = __skb_dequeue(&tmpq);
929
930                 if (extras[XEN_NETIF_EXTRA_TYPE_GSO - 1].type) {
931                         struct xen_netif_extra_info *gso;
932                         gso = &extras[XEN_NETIF_EXTRA_TYPE_GSO - 1];
933
934                         if (unlikely(xennet_set_skb_gso(skb, gso))) {
935                                 __skb_queue_head(&tmpq, skb);
936                                 np->rx.rsp_cons += skb_queue_len(&tmpq);
937                                 goto err;
938                         }
939                 }
940
941                 NETFRONT_SKB_CB(skb)->page = skb_shinfo(skb)->frags[0].page;
942                 NETFRONT_SKB_CB(skb)->offset = rx->offset;
943
944                 len = rx->status;
945                 if (len > RX_COPY_THRESHOLD)
946                         len = RX_COPY_THRESHOLD;
947                 skb_put(skb, len);
948
949                 if (rx->status > len) {
950                         skb_shinfo(skb)->frags[0].page_offset =
951                                 rx->offset + len;
952                         skb_shinfo(skb)->frags[0].size = rx->status - len;
953                         skb->data_len = rx->status - len;
954                 } else {
955                         skb_shinfo(skb)->frags[0].page = NULL;
956                         skb_shinfo(skb)->nr_frags = 0;
957                 }
958
959                 i = xennet_fill_frags(np, skb, &tmpq);
960
961                 /*
962                  * Truesize approximates the size of true data plus
963                  * any supervisor overheads. Adding hypervisor
964                  * overheads has been shown to significantly reduce
965                  * achievable bandwidth with the default receive
966                  * buffer size. It is therefore not wise to account
967                  * for it here.
968                  *
969                  * After alloc_skb(RX_COPY_THRESHOLD), truesize is set
970                  * to RX_COPY_THRESHOLD + the supervisor
971                  * overheads. Here, we add the size of the data pulled
972                  * in xennet_fill_frags().
973                  *
974                  * We also adjust for any unused space in the main
975                  * data area by subtracting (RX_COPY_THRESHOLD -
976                  * len). This is especially important with drivers
977                  * which split incoming packets into header and data,
978                  * using only 66 bytes of the main data area (see the
979                  * e1000 driver for example.)  On such systems,
980                  * without this last adjustement, our achievable
981                  * receive throughout using the standard receive
982                  * buffer size was cut by 25%(!!!).
983                  */
984                 skb->truesize += skb->data_len - (RX_COPY_THRESHOLD - len);
985                 skb->len += skb->data_len;
986
987                 if (rx->flags & NETRXF_csum_blank)
988                         skb->ip_summed = CHECKSUM_PARTIAL;
989                 else if (rx->flags & NETRXF_data_validated)
990                         skb->ip_summed = CHECKSUM_UNNECESSARY;
991
992                 __skb_queue_tail(&rxq, skb);
993
994                 np->rx.rsp_cons = ++i;
995                 work_done++;
996         }
997
998         while ((skb = __skb_dequeue(&errq)))
999                 kfree_skb(skb);
1000
1001         work_done -= handle_incoming_queue(dev, &rxq);
1002
1003         /* If we get a callback with very few responses, reduce fill target. */
1004         /* NB. Note exponential increase, linear decrease. */
1005         if (((np->rx.req_prod_pvt - np->rx.sring->rsp_prod) >
1006              ((3*np->rx_target) / 4)) &&
1007             (--np->rx_target < np->rx_min_target))
1008                 np->rx_target = np->rx_min_target;
1009
1010         xennet_alloc_rx_buffers(dev);
1011
1012         if (work_done < budget) {
1013                 int more_to_do = 0;
1014
1015                 local_irq_save(flags);
1016
1017                 RING_FINAL_CHECK_FOR_RESPONSES(&np->rx, more_to_do);
1018                 if (!more_to_do)
1019                         __netif_rx_complete(dev, napi);
1020
1021                 local_irq_restore(flags);
1022         }
1023
1024         spin_unlock(&np->rx_lock);
1025
1026         return work_done;
1027 }
1028
1029 static int xennet_change_mtu(struct net_device *dev, int mtu)
1030 {
1031         int max = xennet_can_sg(dev) ? 65535 - ETH_HLEN : ETH_DATA_LEN;
1032
1033         if (mtu > max)
1034                 return -EINVAL;
1035         dev->mtu = mtu;
1036         return 0;
1037 }
1038
1039 static void xennet_release_tx_bufs(struct netfront_info *np)
1040 {
1041         struct sk_buff *skb;
1042         int i;
1043
1044         for (i = 0; i < NET_TX_RING_SIZE; i++) {
1045                 /* Skip over entries which are actually freelist references */
1046                 if ((unsigned long)np->tx_skbs[i].skb < PAGE_OFFSET)
1047                         continue;
1048
1049                 skb = np->tx_skbs[i].skb;
1050                 gnttab_end_foreign_access_ref(np->grant_tx_ref[i],
1051                                               GNTMAP_readonly);
1052                 gnttab_release_grant_reference(&np->gref_tx_head,
1053                                                np->grant_tx_ref[i]);
1054                 np->grant_tx_ref[i] = GRANT_INVALID_REF;
1055                 add_id_to_freelist(&np->tx_skb_freelist, np->tx_skbs, i);
1056                 dev_kfree_skb_irq(skb);
1057         }
1058 }
1059
1060 static void xennet_release_rx_bufs(struct netfront_info *np)
1061 {
1062         struct mmu_update      *mmu = np->rx_mmu;
1063         struct multicall_entry *mcl = np->rx_mcl;
1064         struct sk_buff_head free_list;
1065         struct sk_buff *skb;
1066         unsigned long mfn;
1067         int xfer = 0, noxfer = 0, unused = 0;
1068         int id, ref;
1069
1070         dev_warn(&np->netdev->dev, "%s: fix me for copying receiver.\n",
1071                          __func__);
1072         return;
1073
1074         skb_queue_head_init(&free_list);
1075
1076         spin_lock_bh(&np->rx_lock);
1077
1078         for (id = 0; id < NET_RX_RING_SIZE; id++) {
1079                 ref = np->grant_rx_ref[id];
1080                 if (ref == GRANT_INVALID_REF) {
1081                         unused++;
1082                         continue;
1083                 }
1084
1085                 skb = np->rx_skbs[id];
1086                 mfn = gnttab_end_foreign_transfer_ref(ref);
1087                 gnttab_release_grant_reference(&np->gref_rx_head, ref);
1088                 np->grant_rx_ref[id] = GRANT_INVALID_REF;
1089
1090                 if (0 == mfn) {
1091                         skb_shinfo(skb)->nr_frags = 0;
1092                         dev_kfree_skb(skb);
1093                         noxfer++;
1094                         continue;
1095                 }
1096
1097                 if (!xen_feature(XENFEAT_auto_translated_physmap)) {
1098                         /* Remap the page. */
1099                         struct page *page = skb_shinfo(skb)->frags[0].page;
1100                         unsigned long pfn = page_to_pfn(page);
1101                         void *vaddr = page_address(page);
1102
1103                         MULTI_update_va_mapping(mcl, (unsigned long)vaddr,
1104                                                 mfn_pte(mfn, PAGE_KERNEL),
1105                                                 0);
1106                         mcl++;
1107                         mmu->ptr = ((u64)mfn << PAGE_SHIFT)
1108                                 | MMU_MACHPHYS_UPDATE;
1109                         mmu->val = pfn;
1110                         mmu++;
1111
1112                         set_phys_to_machine(pfn, mfn);
1113                 }
1114                 __skb_queue_tail(&free_list, skb);
1115                 xfer++;
1116         }
1117
1118         dev_info(&np->netdev->dev, "%s: %d xfer, %d noxfer, %d unused\n",
1119                  __func__, xfer, noxfer, unused);
1120
1121         if (xfer) {
1122                 if (!xen_feature(XENFEAT_auto_translated_physmap)) {
1123                         /* Do all the remapping work and M2P updates. */
1124                         MULTI_mmu_update(mcl, np->rx_mmu, mmu - np->rx_mmu,
1125                                          0, DOMID_SELF);
1126                         mcl++;
1127                         HYPERVISOR_multicall(np->rx_mcl, mcl - np->rx_mcl);
1128                 }
1129         }
1130
1131         while ((skb = __skb_dequeue(&free_list)) != NULL)
1132                 dev_kfree_skb(skb);
1133
1134         spin_unlock_bh(&np->rx_lock);
1135 }
1136
1137 static void xennet_uninit(struct net_device *dev)
1138 {
1139         struct netfront_info *np = netdev_priv(dev);
1140         xennet_release_tx_bufs(np);
1141         xennet_release_rx_bufs(np);
1142         gnttab_free_grant_references(np->gref_tx_head);
1143         gnttab_free_grant_references(np->gref_rx_head);
1144 }
1145
1146 static struct net_device * __devinit xennet_create_dev(struct xenbus_device *dev)
1147 {
1148         int i, err;
1149         struct net_device *netdev;
1150         struct netfront_info *np;
1151
1152         netdev = alloc_etherdev(sizeof(struct netfront_info));
1153         if (!netdev) {
1154                 printk(KERN_WARNING "%s> alloc_etherdev failed.\n",
1155                        __func__);
1156                 return ERR_PTR(-ENOMEM);
1157         }
1158
1159         np                   = netdev_priv(netdev);
1160         np->xbdev            = dev;
1161
1162         spin_lock_init(&np->tx_lock);
1163         spin_lock_init(&np->rx_lock);
1164
1165         skb_queue_head_init(&np->rx_batch);
1166         np->rx_target     = RX_DFL_MIN_TARGET;
1167         np->rx_min_target = RX_DFL_MIN_TARGET;
1168         np->rx_max_target = RX_MAX_TARGET;
1169
1170         init_timer(&np->rx_refill_timer);
1171         np->rx_refill_timer.data = (unsigned long)netdev;
1172         np->rx_refill_timer.function = rx_refill_timeout;
1173
1174         /* Initialise tx_skbs as a free chain containing every entry. */
1175         np->tx_skb_freelist = 0;
1176         for (i = 0; i < NET_TX_RING_SIZE; i++) {
1177                 np->tx_skbs[i].link = i+1;
1178                 np->grant_tx_ref[i] = GRANT_INVALID_REF;
1179         }
1180
1181         /* Clear out rx_skbs */
1182         for (i = 0; i < NET_RX_RING_SIZE; i++) {
1183                 np->rx_skbs[i] = NULL;
1184                 np->grant_rx_ref[i] = GRANT_INVALID_REF;
1185         }
1186
1187         /* A grant for every tx ring slot */
1188         if (gnttab_alloc_grant_references(TX_MAX_TARGET,
1189                                           &np->gref_tx_head) < 0) {
1190                 printk(KERN_ALERT "#### netfront can't alloc tx grant refs\n");
1191                 err = -ENOMEM;
1192                 goto exit;
1193         }
1194         /* A grant for every rx ring slot */
1195         if (gnttab_alloc_grant_references(RX_MAX_TARGET,
1196                                           &np->gref_rx_head) < 0) {
1197                 printk(KERN_ALERT "#### netfront can't alloc rx grant refs\n");
1198                 err = -ENOMEM;
1199                 goto exit_free_tx;
1200         }
1201
1202         netdev->open            = xennet_open;
1203         netdev->hard_start_xmit = xennet_start_xmit;
1204         netdev->stop            = xennet_close;
1205         netdev->get_stats       = xennet_get_stats;
1206         netif_napi_add(netdev, &np->napi, xennet_poll, 64);
1207         netdev->uninit          = xennet_uninit;
1208         netdev->change_mtu      = xennet_change_mtu;
1209         netdev->features        = NETIF_F_IP_CSUM;
1210
1211         SET_ETHTOOL_OPS(netdev, &xennet_ethtool_ops);
1212         SET_MODULE_OWNER(netdev);
1213         SET_NETDEV_DEV(netdev, &dev->dev);
1214
1215         np->netdev = netdev;
1216
1217         netif_carrier_off(netdev);
1218
1219         return netdev;
1220
1221  exit_free_tx:
1222         gnttab_free_grant_references(np->gref_tx_head);
1223  exit:
1224         free_netdev(netdev);
1225         return ERR_PTR(err);
1226 }
1227
1228 /**
1229  * Entry point to this code when a new device is created.  Allocate the basic
1230  * structures and the ring buffers for communication with the backend, and
1231  * inform the backend of the appropriate details for those.
1232  */
1233 static int __devinit netfront_probe(struct xenbus_device *dev,
1234                                     const struct xenbus_device_id *id)
1235 {
1236         int err;
1237         struct net_device *netdev;
1238         struct netfront_info *info;
1239
1240         netdev = xennet_create_dev(dev);
1241         if (IS_ERR(netdev)) {
1242                 err = PTR_ERR(netdev);
1243                 xenbus_dev_fatal(dev, err, "creating netdev");
1244                 return err;
1245         }
1246
1247         info = netdev_priv(netdev);
1248         dev->dev.driver_data = info;
1249
1250         err = register_netdev(info->netdev);
1251         if (err) {
1252                 printk(KERN_WARNING "%s: register_netdev err=%d\n",
1253                        __func__, err);
1254                 goto fail;
1255         }
1256
1257         err = xennet_sysfs_addif(info->netdev);
1258         if (err) {
1259                 unregister_netdev(info->netdev);
1260                 printk(KERN_WARNING "%s: add sysfs failed err=%d\n",
1261                        __func__, err);
1262                 goto fail;
1263         }
1264
1265         return 0;
1266
1267  fail:
1268         free_netdev(netdev);
1269         dev->dev.driver_data = NULL;
1270         return err;
1271 }
1272
1273 static void xennet_end_access(int ref, void *page)
1274 {
1275         /* This frees the page as a side-effect */
1276         if (ref != GRANT_INVALID_REF)
1277                 gnttab_end_foreign_access(ref, 0, (unsigned long)page);
1278 }
1279
1280 static void xennet_disconnect_backend(struct netfront_info *info)
1281 {
1282         /* Stop old i/f to prevent errors whilst we rebuild the state. */
1283         spin_lock_bh(&info->rx_lock);
1284         spin_lock_irq(&info->tx_lock);
1285         netif_carrier_off(info->netdev);
1286         spin_unlock_irq(&info->tx_lock);
1287         spin_unlock_bh(&info->rx_lock);
1288
1289         if (info->netdev->irq)
1290                 unbind_from_irqhandler(info->netdev->irq, info->netdev);
1291         info->evtchn = info->netdev->irq = 0;
1292
1293         /* End access and free the pages */
1294         xennet_end_access(info->tx_ring_ref, info->tx.sring);
1295         xennet_end_access(info->rx_ring_ref, info->rx.sring);
1296
1297         info->tx_ring_ref = GRANT_INVALID_REF;
1298         info->rx_ring_ref = GRANT_INVALID_REF;
1299         info->tx.sring = NULL;
1300         info->rx.sring = NULL;
1301 }
1302
1303 /**
1304  * We are reconnecting to the backend, due to a suspend/resume, or a backend
1305  * driver restart.  We tear down our netif structure and recreate it, but
1306  * leave the device-layer structures intact so that this is transparent to the
1307  * rest of the kernel.
1308  */
1309 static int netfront_resume(struct xenbus_device *dev)
1310 {
1311         struct netfront_info *info = dev->dev.driver_data;
1312
1313         dev_dbg(&dev->dev, "%s\n", dev->nodename);
1314
1315         xennet_disconnect_backend(info);
1316         return 0;
1317 }
1318
1319 static int xen_net_read_mac(struct xenbus_device *dev, u8 mac[])
1320 {
1321         char *s, *e, *macstr;
1322         int i;
1323
1324         macstr = s = xenbus_read(XBT_NIL, dev->nodename, "mac", NULL);
1325         if (IS_ERR(macstr))
1326                 return PTR_ERR(macstr);
1327
1328         for (i = 0; i < ETH_ALEN; i++) {
1329                 mac[i] = simple_strtoul(s, &e, 16);
1330                 if ((s == e) || (*e != ((i == ETH_ALEN-1) ? '\0' : ':'))) {
1331                         kfree(macstr);
1332                         return -ENOENT;
1333                 }
1334                 s = e+1;
1335         }
1336
1337         kfree(macstr);
1338         return 0;
1339 }
1340
1341 static irqreturn_t xennet_interrupt(int irq, void *dev_id)
1342 {
1343         struct net_device *dev = dev_id;
1344         struct netfront_info *np = netdev_priv(dev);
1345         unsigned long flags;
1346
1347         spin_lock_irqsave(&np->tx_lock, flags);
1348
1349         if (likely(netif_carrier_ok(dev))) {
1350                 xennet_tx_buf_gc(dev);
1351                 /* Under tx_lock: protects access to rx shared-ring indexes. */
1352                 if (RING_HAS_UNCONSUMED_RESPONSES(&np->rx))
1353                         netif_rx_schedule(dev, &np->napi);
1354         }
1355
1356         spin_unlock_irqrestore(&np->tx_lock, flags);
1357
1358         return IRQ_HANDLED;
1359 }
1360
1361 static int setup_netfront(struct xenbus_device *dev, struct netfront_info *info)
1362 {
1363         struct xen_netif_tx_sring *txs;
1364         struct xen_netif_rx_sring *rxs;
1365         int err;
1366         struct net_device *netdev = info->netdev;
1367
1368         info->tx_ring_ref = GRANT_INVALID_REF;
1369         info->rx_ring_ref = GRANT_INVALID_REF;
1370         info->rx.sring = NULL;
1371         info->tx.sring = NULL;
1372         netdev->irq = 0;
1373
1374         err = xen_net_read_mac(dev, netdev->dev_addr);
1375         if (err) {
1376                 xenbus_dev_fatal(dev, err, "parsing %s/mac", dev->nodename);
1377                 goto fail;
1378         }
1379
1380         txs = (struct xen_netif_tx_sring *)get_zeroed_page(GFP_KERNEL);
1381         if (!txs) {
1382                 err = -ENOMEM;
1383                 xenbus_dev_fatal(dev, err, "allocating tx ring page");
1384                 goto fail;
1385         }
1386         SHARED_RING_INIT(txs);
1387         FRONT_RING_INIT(&info->tx, txs, PAGE_SIZE);
1388
1389         err = xenbus_grant_ring(dev, virt_to_mfn(txs));
1390         if (err < 0) {
1391                 free_page((unsigned long)txs);
1392                 goto fail;
1393         }
1394
1395         info->tx_ring_ref = err;
1396         rxs = (struct xen_netif_rx_sring *)get_zeroed_page(GFP_KERNEL);
1397         if (!rxs) {
1398                 err = -ENOMEM;
1399                 xenbus_dev_fatal(dev, err, "allocating rx ring page");
1400                 goto fail;
1401         }
1402         SHARED_RING_INIT(rxs);
1403         FRONT_RING_INIT(&info->rx, rxs, PAGE_SIZE);
1404
1405         err = xenbus_grant_ring(dev, virt_to_mfn(rxs));
1406         if (err < 0) {
1407                 free_page((unsigned long)rxs);
1408                 goto fail;
1409         }
1410         info->rx_ring_ref = err;
1411
1412         err = xenbus_alloc_evtchn(dev, &info->evtchn);
1413         if (err)
1414                 goto fail;
1415
1416         err = bind_evtchn_to_irqhandler(info->evtchn, xennet_interrupt,
1417                                         IRQF_SAMPLE_RANDOM, netdev->name,
1418                                         netdev);
1419         if (err < 0)
1420                 goto fail;
1421         netdev->irq = err;
1422         return 0;
1423
1424  fail:
1425         return err;
1426 }
1427
1428 /* Common code used when first setting up, and when resuming. */
1429 static int talk_to_backend(struct xenbus_device *dev,
1430                            struct netfront_info *info)
1431 {
1432         const char *message;
1433         struct xenbus_transaction xbt;
1434         int err;
1435
1436         /* Create shared ring, alloc event channel. */
1437         err = setup_netfront(dev, info);
1438         if (err)
1439                 goto out;
1440
1441 again:
1442         err = xenbus_transaction_start(&xbt);
1443         if (err) {
1444                 xenbus_dev_fatal(dev, err, "starting transaction");
1445                 goto destroy_ring;
1446         }
1447
1448         err = xenbus_printf(xbt, dev->nodename, "tx-ring-ref", "%u",
1449                             info->tx_ring_ref);
1450         if (err) {
1451                 message = "writing tx ring-ref";
1452                 goto abort_transaction;
1453         }
1454         err = xenbus_printf(xbt, dev->nodename, "rx-ring-ref", "%u",
1455                             info->rx_ring_ref);
1456         if (err) {
1457                 message = "writing rx ring-ref";
1458                 goto abort_transaction;
1459         }
1460         err = xenbus_printf(xbt, dev->nodename,
1461                             "event-channel", "%u", info->evtchn);
1462         if (err) {
1463                 message = "writing event-channel";
1464                 goto abort_transaction;
1465         }
1466
1467         err = xenbus_printf(xbt, dev->nodename, "request-rx-copy", "%u",
1468                             1);
1469         if (err) {
1470                 message = "writing request-rx-copy";
1471                 goto abort_transaction;
1472         }
1473
1474         err = xenbus_printf(xbt, dev->nodename, "feature-rx-notify", "%d", 1);
1475         if (err) {
1476                 message = "writing feature-rx-notify";
1477                 goto abort_transaction;
1478         }
1479
1480         err = xenbus_printf(xbt, dev->nodename, "feature-sg", "%d", 1);
1481         if (err) {
1482                 message = "writing feature-sg";
1483                 goto abort_transaction;
1484         }
1485
1486         err = xenbus_printf(xbt, dev->nodename, "feature-gso-tcpv4", "%d", 1);
1487         if (err) {
1488                 message = "writing feature-gso-tcpv4";
1489                 goto abort_transaction;
1490         }
1491
1492         err = xenbus_transaction_end(xbt, 0);
1493         if (err) {
1494                 if (err == -EAGAIN)
1495                         goto again;
1496                 xenbus_dev_fatal(dev, err, "completing transaction");
1497                 goto destroy_ring;
1498         }
1499
1500         return 0;
1501
1502  abort_transaction:
1503         xenbus_transaction_end(xbt, 1);
1504         xenbus_dev_fatal(dev, err, "%s", message);
1505  destroy_ring:
1506         xennet_disconnect_backend(info);
1507  out:
1508         return err;
1509 }
1510
1511 static int xennet_set_sg(struct net_device *dev, u32 data)
1512 {
1513         if (data) {
1514                 struct netfront_info *np = netdev_priv(dev);
1515                 int val;
1516
1517                 if (xenbus_scanf(XBT_NIL, np->xbdev->otherend, "feature-sg",
1518                                  "%d", &val) < 0)
1519                         val = 0;
1520                 if (!val)
1521                         return -ENOSYS;
1522         } else if (dev->mtu > ETH_DATA_LEN)
1523                 dev->mtu = ETH_DATA_LEN;
1524
1525         return ethtool_op_set_sg(dev, data);
1526 }
1527
1528 static int xennet_set_tso(struct net_device *dev, u32 data)
1529 {
1530         if (data) {
1531                 struct netfront_info *np = netdev_priv(dev);
1532                 int val;
1533
1534                 if (xenbus_scanf(XBT_NIL, np->xbdev->otherend,
1535                                  "feature-gso-tcpv4", "%d", &val) < 0)
1536                         val = 0;
1537                 if (!val)
1538                         return -ENOSYS;
1539         }
1540
1541         return ethtool_op_set_tso(dev, data);
1542 }
1543
1544 static void xennet_set_features(struct net_device *dev)
1545 {
1546         /* Turn off all GSO bits except ROBUST. */
1547         dev->features &= (1 << NETIF_F_GSO_SHIFT) - 1;
1548         dev->features |= NETIF_F_GSO_ROBUST;
1549         xennet_set_sg(dev, 0);
1550
1551         /* We need checksum offload to enable scatter/gather and TSO. */
1552         if (!(dev->features & NETIF_F_IP_CSUM))
1553                 return;
1554
1555         if (!xennet_set_sg(dev, 1))
1556                 xennet_set_tso(dev, 1);
1557 }
1558
1559 static int xennet_connect(struct net_device *dev)
1560 {
1561         struct netfront_info *np = netdev_priv(dev);
1562         int i, requeue_idx, err;
1563         struct sk_buff *skb;
1564         grant_ref_t ref;
1565         struct xen_netif_rx_request *req;
1566         unsigned int feature_rx_copy;
1567
1568         err = xenbus_scanf(XBT_NIL, np->xbdev->otherend,
1569                            "feature-rx-copy", "%u", &feature_rx_copy);
1570         if (err != 1)
1571                 feature_rx_copy = 0;
1572
1573         if (!feature_rx_copy) {
1574                 dev_info(&dev->dev,
1575                          "backend does not support copying recieve path");
1576                 return -ENODEV;
1577         }
1578
1579         err = talk_to_backend(np->xbdev, np);
1580         if (err)
1581                 return err;
1582
1583         xennet_set_features(dev);
1584
1585         spin_lock_bh(&np->rx_lock);
1586         spin_lock_irq(&np->tx_lock);
1587
1588         /* Step 1: Discard all pending TX packet fragments. */
1589         xennet_release_tx_bufs(np);
1590
1591         /* Step 2: Rebuild the RX buffer freelist and the RX ring itself. */
1592         for (requeue_idx = 0, i = 0; i < NET_RX_RING_SIZE; i++) {
1593                 if (!np->rx_skbs[i])
1594                         continue;
1595
1596                 skb = np->rx_skbs[requeue_idx] = xennet_get_rx_skb(np, i);
1597                 ref = np->grant_rx_ref[requeue_idx] = xennet_get_rx_ref(np, i);
1598                 req = RING_GET_REQUEST(&np->rx, requeue_idx);
1599
1600                 gnttab_grant_foreign_access_ref(
1601                         ref, np->xbdev->otherend_id,
1602                         pfn_to_mfn(page_to_pfn(skb_shinfo(skb)->
1603                                                frags->page)),
1604                         0);
1605                 req->gref = ref;
1606                 req->id   = requeue_idx;
1607
1608                 requeue_idx++;
1609         }
1610
1611         np->rx.req_prod_pvt = requeue_idx;
1612
1613         /*
1614          * Step 3: All public and private state should now be sane.  Get
1615          * ready to start sending and receiving packets and give the driver
1616          * domain a kick because we've probably just requeued some
1617          * packets.
1618          */
1619         netif_carrier_on(np->netdev);
1620         notify_remote_via_irq(np->netdev->irq);
1621         xennet_tx_buf_gc(dev);
1622         xennet_alloc_rx_buffers(dev);
1623
1624         spin_unlock_irq(&np->tx_lock);
1625         spin_unlock_bh(&np->rx_lock);
1626
1627         return 0;
1628 }
1629
1630 /**
1631  * Callback received when the backend's state changes.
1632  */
1633 static void backend_changed(struct xenbus_device *dev,
1634                             enum xenbus_state backend_state)
1635 {
1636         struct netfront_info *np = dev->dev.driver_data;
1637         struct net_device *netdev = np->netdev;
1638
1639         dev_dbg(&dev->dev, "%s\n", xenbus_strstate(backend_state));
1640
1641         switch (backend_state) {
1642         case XenbusStateInitialising:
1643         case XenbusStateInitialised:
1644         case XenbusStateConnected:
1645         case XenbusStateUnknown:
1646         case XenbusStateClosed:
1647                 break;
1648
1649         case XenbusStateInitWait:
1650                 if (dev->state != XenbusStateInitialising)
1651                         break;
1652                 if (xennet_connect(netdev) != 0)
1653                         break;
1654                 xenbus_switch_state(dev, XenbusStateConnected);
1655                 break;
1656
1657         case XenbusStateClosing:
1658                 xenbus_frontend_closed(dev);
1659                 break;
1660         }
1661 }
1662
1663 static struct ethtool_ops xennet_ethtool_ops =
1664 {
1665         .get_tx_csum = ethtool_op_get_tx_csum,
1666         .set_tx_csum = ethtool_op_set_tx_csum,
1667         .get_sg = ethtool_op_get_sg,
1668         .set_sg = xennet_set_sg,
1669         .get_tso = ethtool_op_get_tso,
1670         .set_tso = xennet_set_tso,
1671         .get_link = ethtool_op_get_link,
1672 };
1673
1674 #ifdef CONFIG_SYSFS
1675 static ssize_t show_rxbuf_min(struct device *dev,
1676                               struct device_attribute *attr, char *buf)
1677 {
1678         struct net_device *netdev = to_net_dev(dev);
1679         struct netfront_info *info = netdev_priv(netdev);
1680
1681         return sprintf(buf, "%u\n", info->rx_min_target);
1682 }
1683
1684 static ssize_t store_rxbuf_min(struct device *dev,
1685                                struct device_attribute *attr,
1686                                const char *buf, size_t len)
1687 {
1688         struct net_device *netdev = to_net_dev(dev);
1689         struct netfront_info *np = netdev_priv(netdev);
1690         char *endp;
1691         unsigned long target;
1692
1693         if (!capable(CAP_NET_ADMIN))
1694                 return -EPERM;
1695
1696         target = simple_strtoul(buf, &endp, 0);
1697         if (endp == buf)
1698                 return -EBADMSG;
1699
1700         if (target < RX_MIN_TARGET)
1701                 target = RX_MIN_TARGET;
1702         if (target > RX_MAX_TARGET)
1703                 target = RX_MAX_TARGET;
1704
1705         spin_lock_bh(&np->rx_lock);
1706         if (target > np->rx_max_target)
1707                 np->rx_max_target = target;
1708         np->rx_min_target = target;
1709         if (target > np->rx_target)
1710                 np->rx_target = target;
1711
1712         xennet_alloc_rx_buffers(netdev);
1713
1714         spin_unlock_bh(&np->rx_lock);
1715         return len;
1716 }
1717
1718 static ssize_t show_rxbuf_max(struct device *dev,
1719                               struct device_attribute *attr, char *buf)
1720 {
1721         struct net_device *netdev = to_net_dev(dev);
1722         struct netfront_info *info = netdev_priv(netdev);
1723
1724         return sprintf(buf, "%u\n", info->rx_max_target);
1725 }
1726
1727 static ssize_t store_rxbuf_max(struct device *dev,
1728                                struct device_attribute *attr,
1729                                const char *buf, size_t len)
1730 {
1731         struct net_device *netdev = to_net_dev(dev);
1732         struct netfront_info *np = netdev_priv(netdev);
1733         char *endp;
1734         unsigned long target;
1735
1736         if (!capable(CAP_NET_ADMIN))
1737                 return -EPERM;
1738
1739         target = simple_strtoul(buf, &endp, 0);
1740         if (endp == buf)
1741                 return -EBADMSG;
1742
1743         if (target < RX_MIN_TARGET)
1744                 target = RX_MIN_TARGET;
1745         if (target > RX_MAX_TARGET)
1746                 target = RX_MAX_TARGET;
1747
1748         spin_lock_bh(&np->rx_lock);
1749         if (target < np->rx_min_target)
1750                 np->rx_min_target = target;
1751         np->rx_max_target = target;
1752         if (target < np->rx_target)
1753                 np->rx_target = target;
1754
1755         xennet_alloc_rx_buffers(netdev);
1756
1757         spin_unlock_bh(&np->rx_lock);
1758         return len;
1759 }
1760
1761 static ssize_t show_rxbuf_cur(struct device *dev,
1762                               struct device_attribute *attr, char *buf)
1763 {
1764         struct net_device *netdev = to_net_dev(dev);
1765         struct netfront_info *info = netdev_priv(netdev);
1766
1767         return sprintf(buf, "%u\n", info->rx_target);
1768 }
1769
1770 static struct device_attribute xennet_attrs[] = {
1771         __ATTR(rxbuf_min, S_IRUGO|S_IWUSR, show_rxbuf_min, store_rxbuf_min),
1772         __ATTR(rxbuf_max, S_IRUGO|S_IWUSR, show_rxbuf_max, store_rxbuf_max),
1773         __ATTR(rxbuf_cur, S_IRUGO, show_rxbuf_cur, NULL),
1774 };
1775
1776 static int xennet_sysfs_addif(struct net_device *netdev)
1777 {
1778         int i;
1779         int err;
1780
1781         for (i = 0; i < ARRAY_SIZE(xennet_attrs); i++) {
1782                 err = device_create_file(&netdev->dev,
1783                                            &xennet_attrs[i]);
1784                 if (err)
1785                         goto fail;
1786         }
1787         return 0;
1788
1789  fail:
1790         while (--i >= 0)
1791                 device_remove_file(&netdev->dev, &xennet_attrs[i]);
1792         return err;
1793 }
1794
1795 static void xennet_sysfs_delif(struct net_device *netdev)
1796 {
1797         int i;
1798
1799         for (i = 0; i < ARRAY_SIZE(xennet_attrs); i++)
1800                 device_remove_file(&netdev->dev, &xennet_attrs[i]);
1801 }
1802
1803 #endif /* CONFIG_SYSFS */
1804
1805 static struct xenbus_device_id netfront_ids[] = {
1806         { "vif" },
1807         { "" }
1808 };
1809
1810
1811 static int __devexit xennet_remove(struct xenbus_device *dev)
1812 {
1813         struct netfront_info *info = dev->dev.driver_data;
1814
1815         dev_dbg(&dev->dev, "%s\n", dev->nodename);
1816
1817         unregister_netdev(info->netdev);
1818
1819         xennet_disconnect_backend(info);
1820
1821         del_timer_sync(&info->rx_refill_timer);
1822
1823         xennet_sysfs_delif(info->netdev);
1824
1825         free_netdev(info->netdev);
1826
1827         return 0;
1828 }
1829
1830 static struct xenbus_driver netfront = {
1831         .name = "vif",
1832         .owner = THIS_MODULE,
1833         .ids = netfront_ids,
1834         .probe = netfront_probe,
1835         .remove = __devexit_p(xennet_remove),
1836         .resume = netfront_resume,
1837         .otherend_changed = backend_changed,
1838 };
1839
1840 static int __init netif_init(void)
1841 {
1842         if (!is_running_on_xen())
1843                 return -ENODEV;
1844
1845         if (is_initial_xendomain())
1846                 return 0;
1847
1848         printk(KERN_INFO "Initialising Xen virtual ethernet driver.\n");
1849
1850         return xenbus_register_frontend(&netfront);
1851 }
1852 module_init(netif_init);
1853
1854
1855 static void __exit netif_exit(void)
1856 {
1857         if (is_initial_xendomain())
1858                 return;
1859
1860         return xenbus_unregister_driver(&netfront);
1861 }
1862 module_exit(netif_exit);
1863
1864 MODULE_DESCRIPTION("Xen virtual network device frontend");
1865 MODULE_LICENSE("GPL");