virtio_net: return NETDEV_TX_BUSY instead of queueing an extra skb.
[linux-flexiantxendom0-3.2.10.git] / drivers / net / virtio_net.c
1 /* A simple network driver using virtio.
2  *
3  * Copyright 2007 Rusty Russell <rusty@rustcorp.com.au> IBM Corporation
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18  */
19 //#define DEBUG
20 #include <linux/netdevice.h>
21 #include <linux/etherdevice.h>
22 #include <linux/ethtool.h>
23 #include <linux/module.h>
24 #include <linux/virtio.h>
25 #include <linux/virtio_ids.h>
26 #include <linux/virtio_net.h>
27 #include <linux/scatterlist.h>
28 #include <linux/if_vlan.h>
29
30 static int napi_weight = 128;
31 module_param(napi_weight, int, 0444);
32
33 static int csum = 1, gso = 1;
34 module_param(csum, bool, 0444);
35 module_param(gso, bool, 0444);
36
37 /* FIXME: MTU in config. */
38 #define MAX_PACKET_LEN (ETH_HLEN + VLAN_HLEN + ETH_DATA_LEN)
39 #define GOOD_COPY_LEN   128
40
41 #define VIRTNET_SEND_COMMAND_SG_MAX    2
42
43 struct virtnet_info
44 {
45         struct virtio_device *vdev;
46         struct virtqueue *rvq, *svq, *cvq;
47         struct net_device *dev;
48         struct napi_struct napi;
49         unsigned int status;
50
51         /* If we need to free in a timer, this is it. */
52         struct timer_list xmit_free_timer;
53
54         /* Number of input buffers, and max we've ever had. */
55         unsigned int num, max;
56
57         /* For cleaning up after transmission. */
58         struct tasklet_struct tasklet;
59         bool free_in_tasklet;
60
61         /* I like... big packets and I cannot lie! */
62         bool big_packets;
63
64         /* Host will merge rx buffers for big packets (shake it! shake it!) */
65         bool mergeable_rx_bufs;
66
67         /* Receive & send queues. */
68         struct sk_buff_head recv;
69         struct sk_buff_head send;
70
71         /* Work struct for refilling if we run low on memory. */
72         struct delayed_work refill;
73
74         /* Chain pages by the private ptr. */
75         struct page *pages;
76 };
77
78 static inline void *skb_vnet_hdr(struct sk_buff *skb)
79 {
80         return (struct virtio_net_hdr *)skb->cb;
81 }
82
83 static void give_a_page(struct virtnet_info *vi, struct page *page)
84 {
85         page->private = (unsigned long)vi->pages;
86         vi->pages = page;
87 }
88
89 static void trim_pages(struct virtnet_info *vi, struct sk_buff *skb)
90 {
91         unsigned int i;
92
93         for (i = 0; i < skb_shinfo(skb)->nr_frags; i++)
94                 give_a_page(vi, skb_shinfo(skb)->frags[i].page);
95         skb_shinfo(skb)->nr_frags = 0;
96         skb->data_len = 0;
97 }
98
99 static struct page *get_a_page(struct virtnet_info *vi, gfp_t gfp_mask)
100 {
101         struct page *p = vi->pages;
102
103         if (p)
104                 vi->pages = (struct page *)p->private;
105         else
106                 p = alloc_page(gfp_mask);
107         return p;
108 }
109
110 static void skb_xmit_done(struct virtqueue *svq)
111 {
112         struct virtnet_info *vi = svq->vdev->priv;
113
114         /* Suppress further interrupts. */
115         svq->vq_ops->disable_cb(svq);
116
117         /* We were probably waiting for more output buffers. */
118         netif_wake_queue(vi->dev);
119
120         if (vi->free_in_tasklet)
121                 tasklet_schedule(&vi->tasklet);
122 }
123
124 static void receive_skb(struct net_device *dev, struct sk_buff *skb,
125                         unsigned len)
126 {
127         struct virtnet_info *vi = netdev_priv(dev);
128         struct virtio_net_hdr *hdr = skb_vnet_hdr(skb);
129         int err;
130         int i;
131
132         if (unlikely(len < sizeof(struct virtio_net_hdr) + ETH_HLEN)) {
133                 pr_debug("%s: short packet %i\n", dev->name, len);
134                 dev->stats.rx_length_errors++;
135                 goto drop;
136         }
137
138         if (vi->mergeable_rx_bufs) {
139                 struct virtio_net_hdr_mrg_rxbuf *mhdr = skb_vnet_hdr(skb);
140                 unsigned int copy;
141                 char *p = page_address(skb_shinfo(skb)->frags[0].page);
142
143                 if (len > PAGE_SIZE)
144                         len = PAGE_SIZE;
145                 len -= sizeof(struct virtio_net_hdr_mrg_rxbuf);
146
147                 memcpy(hdr, p, sizeof(*mhdr));
148                 p += sizeof(*mhdr);
149
150                 copy = len;
151                 if (copy > skb_tailroom(skb))
152                         copy = skb_tailroom(skb);
153
154                 memcpy(skb_put(skb, copy), p, copy);
155
156                 len -= copy;
157
158                 if (!len) {
159                         give_a_page(vi, skb_shinfo(skb)->frags[0].page);
160                         skb_shinfo(skb)->nr_frags--;
161                 } else {
162                         skb_shinfo(skb)->frags[0].page_offset +=
163                                 sizeof(*mhdr) + copy;
164                         skb_shinfo(skb)->frags[0].size = len;
165                         skb->data_len += len;
166                         skb->len += len;
167                 }
168
169                 while (--mhdr->num_buffers) {
170                         struct sk_buff *nskb;
171
172                         i = skb_shinfo(skb)->nr_frags;
173                         if (i >= MAX_SKB_FRAGS) {
174                                 pr_debug("%s: packet too long %d\n", dev->name,
175                                          len);
176                                 dev->stats.rx_length_errors++;
177                                 goto drop;
178                         }
179
180                         nskb = vi->rvq->vq_ops->get_buf(vi->rvq, &len);
181                         if (!nskb) {
182                                 pr_debug("%s: rx error: %d buffers missing\n",
183                                          dev->name, mhdr->num_buffers);
184                                 dev->stats.rx_length_errors++;
185                                 goto drop;
186                         }
187
188                         __skb_unlink(nskb, &vi->recv);
189                         vi->num--;
190
191                         skb_shinfo(skb)->frags[i] = skb_shinfo(nskb)->frags[0];
192                         skb_shinfo(nskb)->nr_frags = 0;
193                         kfree_skb(nskb);
194
195                         if (len > PAGE_SIZE)
196                                 len = PAGE_SIZE;
197
198                         skb_shinfo(skb)->frags[i].size = len;
199                         skb_shinfo(skb)->nr_frags++;
200                         skb->data_len += len;
201                         skb->len += len;
202                 }
203         } else {
204                 len -= sizeof(struct virtio_net_hdr);
205
206                 if (len <= MAX_PACKET_LEN)
207                         trim_pages(vi, skb);
208
209                 err = pskb_trim(skb, len);
210                 if (err) {
211                         pr_debug("%s: pskb_trim failed %i %d\n", dev->name,
212                                  len, err);
213                         dev->stats.rx_dropped++;
214                         goto drop;
215                 }
216         }
217
218         skb->truesize += skb->data_len;
219         dev->stats.rx_bytes += skb->len;
220         dev->stats.rx_packets++;
221
222         if (hdr->flags & VIRTIO_NET_HDR_F_NEEDS_CSUM) {
223                 pr_debug("Needs csum!\n");
224                 if (!skb_partial_csum_set(skb,hdr->csum_start,hdr->csum_offset))
225                         goto frame_err;
226         }
227
228         skb->protocol = eth_type_trans(skb, dev);
229         pr_debug("Receiving skb proto 0x%04x len %i type %i\n",
230                  ntohs(skb->protocol), skb->len, skb->pkt_type);
231
232         if (hdr->gso_type != VIRTIO_NET_HDR_GSO_NONE) {
233                 pr_debug("GSO!\n");
234                 switch (hdr->gso_type & ~VIRTIO_NET_HDR_GSO_ECN) {
235                 case VIRTIO_NET_HDR_GSO_TCPV4:
236                         skb_shinfo(skb)->gso_type = SKB_GSO_TCPV4;
237                         break;
238                 case VIRTIO_NET_HDR_GSO_UDP:
239                         skb_shinfo(skb)->gso_type = SKB_GSO_UDP;
240                         break;
241                 case VIRTIO_NET_HDR_GSO_TCPV6:
242                         skb_shinfo(skb)->gso_type = SKB_GSO_TCPV6;
243                         break;
244                 default:
245                         if (net_ratelimit())
246                                 printk(KERN_WARNING "%s: bad gso type %u.\n",
247                                        dev->name, hdr->gso_type);
248                         goto frame_err;
249                 }
250
251                 if (hdr->gso_type & VIRTIO_NET_HDR_GSO_ECN)
252                         skb_shinfo(skb)->gso_type |= SKB_GSO_TCP_ECN;
253
254                 skb_shinfo(skb)->gso_size = hdr->gso_size;
255                 if (skb_shinfo(skb)->gso_size == 0) {
256                         if (net_ratelimit())
257                                 printk(KERN_WARNING "%s: zero gso size.\n",
258                                        dev->name);
259                         goto frame_err;
260                 }
261
262                 /* Header must be checked, and gso_segs computed. */
263                 skb_shinfo(skb)->gso_type |= SKB_GSO_DODGY;
264                 skb_shinfo(skb)->gso_segs = 0;
265         }
266
267         netif_receive_skb(skb);
268         return;
269
270 frame_err:
271         dev->stats.rx_frame_errors++;
272 drop:
273         dev_kfree_skb(skb);
274 }
275
276 static bool try_fill_recv_maxbufs(struct virtnet_info *vi, gfp_t gfp)
277 {
278         struct sk_buff *skb;
279         struct scatterlist sg[2+MAX_SKB_FRAGS];
280         int num, err, i;
281         bool oom = false;
282
283         sg_init_table(sg, 2+MAX_SKB_FRAGS);
284         for (;;) {
285                 struct virtio_net_hdr *hdr;
286
287                 skb = netdev_alloc_skb(vi->dev, MAX_PACKET_LEN + NET_IP_ALIGN);
288                 if (unlikely(!skb)) {
289                         oom = true;
290                         break;
291                 }
292
293                 skb_reserve(skb, NET_IP_ALIGN);
294                 skb_put(skb, MAX_PACKET_LEN);
295
296                 hdr = skb_vnet_hdr(skb);
297                 sg_set_buf(sg, hdr, sizeof(*hdr));
298
299                 if (vi->big_packets) {
300                         for (i = 0; i < MAX_SKB_FRAGS; i++) {
301                                 skb_frag_t *f = &skb_shinfo(skb)->frags[i];
302                                 f->page = get_a_page(vi, gfp);
303                                 if (!f->page)
304                                         break;
305
306                                 f->page_offset = 0;
307                                 f->size = PAGE_SIZE;
308
309                                 skb->data_len += PAGE_SIZE;
310                                 skb->len += PAGE_SIZE;
311
312                                 skb_shinfo(skb)->nr_frags++;
313                         }
314                 }
315
316                 num = skb_to_sgvec(skb, sg+1, 0, skb->len) + 1;
317                 skb_queue_head(&vi->recv, skb);
318
319                 err = vi->rvq->vq_ops->add_buf(vi->rvq, sg, 0, num, skb);
320                 if (err < 0) {
321                         skb_unlink(skb, &vi->recv);
322                         trim_pages(vi, skb);
323                         kfree_skb(skb);
324                         break;
325                 }
326                 vi->num++;
327         }
328         if (unlikely(vi->num > vi->max))
329                 vi->max = vi->num;
330         vi->rvq->vq_ops->kick(vi->rvq);
331         return !oom;
332 }
333
334 /* Returns false if we couldn't fill entirely (OOM). */
335 static bool try_fill_recv(struct virtnet_info *vi, gfp_t gfp)
336 {
337         struct sk_buff *skb;
338         struct scatterlist sg[1];
339         int err;
340         bool oom = false;
341
342         if (!vi->mergeable_rx_bufs)
343                 return try_fill_recv_maxbufs(vi, gfp);
344
345         for (;;) {
346                 skb_frag_t *f;
347
348                 skb = netdev_alloc_skb(vi->dev, GOOD_COPY_LEN + NET_IP_ALIGN);
349                 if (unlikely(!skb)) {
350                         oom = true;
351                         break;
352                 }
353
354                 skb_reserve(skb, NET_IP_ALIGN);
355
356                 f = &skb_shinfo(skb)->frags[0];
357                 f->page = get_a_page(vi, gfp);
358                 if (!f->page) {
359                         oom = true;
360                         kfree_skb(skb);
361                         break;
362                 }
363
364                 f->page_offset = 0;
365                 f->size = PAGE_SIZE;
366
367                 skb_shinfo(skb)->nr_frags++;
368
369                 sg_init_one(sg, page_address(f->page), PAGE_SIZE);
370                 skb_queue_head(&vi->recv, skb);
371
372                 err = vi->rvq->vq_ops->add_buf(vi->rvq, sg, 0, 1, skb);
373                 if (err < 0) {
374                         skb_unlink(skb, &vi->recv);
375                         kfree_skb(skb);
376                         break;
377                 }
378                 vi->num++;
379         }
380         if (unlikely(vi->num > vi->max))
381                 vi->max = vi->num;
382         vi->rvq->vq_ops->kick(vi->rvq);
383         return !oom;
384 }
385
386 static void skb_recv_done(struct virtqueue *rvq)
387 {
388         struct virtnet_info *vi = rvq->vdev->priv;
389         /* Schedule NAPI, Suppress further interrupts if successful. */
390         if (napi_schedule_prep(&vi->napi)) {
391                 rvq->vq_ops->disable_cb(rvq);
392                 __napi_schedule(&vi->napi);
393         }
394 }
395
396 static void refill_work(struct work_struct *work)
397 {
398         struct virtnet_info *vi;
399         bool still_empty;
400
401         vi = container_of(work, struct virtnet_info, refill.work);
402         napi_disable(&vi->napi);
403         try_fill_recv(vi, GFP_KERNEL);
404         still_empty = (vi->num == 0);
405         napi_enable(&vi->napi);
406
407         /* In theory, this can happen: if we don't get any buffers in
408          * we will *never* try to fill again. */
409         if (still_empty)
410                 schedule_delayed_work(&vi->refill, HZ/2);
411 }
412
413 static int virtnet_poll(struct napi_struct *napi, int budget)
414 {
415         struct virtnet_info *vi = container_of(napi, struct virtnet_info, napi);
416         struct sk_buff *skb = NULL;
417         unsigned int len, received = 0;
418
419 again:
420         while (received < budget &&
421                (skb = vi->rvq->vq_ops->get_buf(vi->rvq, &len)) != NULL) {
422                 __skb_unlink(skb, &vi->recv);
423                 receive_skb(vi->dev, skb, len);
424                 vi->num--;
425                 received++;
426         }
427
428         if (vi->num < vi->max / 2) {
429                 if (!try_fill_recv(vi, GFP_ATOMIC))
430                         schedule_delayed_work(&vi->refill, 0);
431         }
432
433         /* Out of packets? */
434         if (received < budget) {
435                 napi_complete(napi);
436                 if (unlikely(!vi->rvq->vq_ops->enable_cb(vi->rvq))
437                     && napi_schedule_prep(napi)) {
438                         vi->rvq->vq_ops->disable_cb(vi->rvq);
439                         __napi_schedule(napi);
440                         goto again;
441                 }
442         }
443
444         return received;
445 }
446
447 static void free_old_xmit_skbs(struct virtnet_info *vi)
448 {
449         struct sk_buff *skb;
450         unsigned int len;
451
452         while ((skb = vi->svq->vq_ops->get_buf(vi->svq, &len)) != NULL) {
453                 pr_debug("Sent skb %p\n", skb);
454                 __skb_unlink(skb, &vi->send);
455                 vi->dev->stats.tx_bytes += skb->len;
456                 vi->dev->stats.tx_packets++;
457                 kfree_skb(skb);
458         }
459 }
460
461 /* If the virtio transport doesn't always notify us when all in-flight packets
462  * are consumed, we fall back to using this function on a timer to free them. */
463 static void xmit_free(unsigned long data)
464 {
465         struct virtnet_info *vi = (void *)data;
466
467         netif_tx_lock(vi->dev);
468
469         free_old_xmit_skbs(vi);
470
471         if (!skb_queue_empty(&vi->send))
472                 mod_timer(&vi->xmit_free_timer, jiffies + (HZ/10));
473
474         netif_tx_unlock(vi->dev);
475 }
476
477 static int xmit_skb(struct virtnet_info *vi, struct sk_buff *skb)
478 {
479         int num, err;
480         struct scatterlist sg[2+MAX_SKB_FRAGS];
481         struct virtio_net_hdr_mrg_rxbuf *mhdr = skb_vnet_hdr(skb);
482         struct virtio_net_hdr *hdr = skb_vnet_hdr(skb);
483         const unsigned char *dest = ((struct ethhdr *)skb->data)->h_dest;
484
485         sg_init_table(sg, 2+MAX_SKB_FRAGS);
486
487         pr_debug("%s: xmit %p %pM\n", vi->dev->name, skb, dest);
488
489         if (skb->ip_summed == CHECKSUM_PARTIAL) {
490                 hdr->flags = VIRTIO_NET_HDR_F_NEEDS_CSUM;
491                 hdr->csum_start = skb->csum_start - skb_headroom(skb);
492                 hdr->csum_offset = skb->csum_offset;
493         } else {
494                 hdr->flags = 0;
495                 hdr->csum_offset = hdr->csum_start = 0;
496         }
497
498         if (skb_is_gso(skb)) {
499                 hdr->hdr_len = skb_headlen(skb);
500                 hdr->gso_size = skb_shinfo(skb)->gso_size;
501                 if (skb_shinfo(skb)->gso_type & SKB_GSO_TCPV4)
502                         hdr->gso_type = VIRTIO_NET_HDR_GSO_TCPV4;
503                 else if (skb_shinfo(skb)->gso_type & SKB_GSO_TCPV6)
504                         hdr->gso_type = VIRTIO_NET_HDR_GSO_TCPV6;
505                 else if (skb_shinfo(skb)->gso_type & SKB_GSO_UDP)
506                         hdr->gso_type = VIRTIO_NET_HDR_GSO_UDP;
507                 else
508                         BUG();
509                 if (skb_shinfo(skb)->gso_type & SKB_GSO_TCP_ECN)
510                         hdr->gso_type |= VIRTIO_NET_HDR_GSO_ECN;
511         } else {
512                 hdr->gso_type = VIRTIO_NET_HDR_GSO_NONE;
513                 hdr->gso_size = hdr->hdr_len = 0;
514         }
515
516         mhdr->num_buffers = 0;
517
518         /* Encode metadata header at front. */
519         if (vi->mergeable_rx_bufs)
520                 sg_set_buf(sg, mhdr, sizeof(*mhdr));
521         else
522                 sg_set_buf(sg, hdr, sizeof(*hdr));
523
524         num = skb_to_sgvec(skb, sg+1, 0, skb->len) + 1;
525
526         err = vi->svq->vq_ops->add_buf(vi->svq, sg, num, 0, skb);
527         if (err >= 0 && !vi->free_in_tasklet) {
528                 /* Don't wait up for transmitted skbs to be freed. */
529                 skb_orphan(skb);
530                 nf_reset(skb);
531                 mod_timer(&vi->xmit_free_timer, jiffies + (HZ/10));
532         }
533
534         return err;
535 }
536
537 static void xmit_tasklet(unsigned long data)
538 {
539         struct virtnet_info *vi = (void *)data;
540
541         netif_tx_lock_bh(vi->dev);
542         free_old_xmit_skbs(vi);
543         netif_tx_unlock_bh(vi->dev);
544 }
545
546 static netdev_tx_t start_xmit(struct sk_buff *skb, struct net_device *dev)
547 {
548         struct virtnet_info *vi = netdev_priv(dev);
549
550 again:
551         /* Free up any pending old buffers before queueing new ones. */
552         free_old_xmit_skbs(vi);
553
554         /* Put new one in send queue and do transmit */
555         __skb_queue_head(&vi->send, skb);
556         if (likely(xmit_skb(vi, skb) >= 0)) {
557                 vi->svq->vq_ops->kick(vi->svq);
558                 return NETDEV_TX_OK;
559         }
560
561         /* Ring too full for this packet, remove it from queue again. */
562         pr_debug("%s: virtio not prepared to send\n", dev->name);
563         __skb_unlink(skb, &vi->send);
564         netif_stop_queue(dev);
565
566         /* Activate callback for using skbs: if this returns false it
567          * means some were used in the meantime. */
568         if (unlikely(!vi->svq->vq_ops->enable_cb(vi->svq))) {
569                 vi->svq->vq_ops->disable_cb(vi->svq);
570                 netif_start_queue(dev);
571                 goto again;
572         }
573         return NETDEV_TX_BUSY;
574 }
575
576 static int virtnet_set_mac_address(struct net_device *dev, void *p)
577 {
578         struct virtnet_info *vi = netdev_priv(dev);
579         struct virtio_device *vdev = vi->vdev;
580         int ret;
581
582         ret = eth_mac_addr(dev, p);
583         if (ret)
584                 return ret;
585
586         if (virtio_has_feature(vdev, VIRTIO_NET_F_MAC))
587                 vdev->config->set(vdev, offsetof(struct virtio_net_config, mac),
588                                   dev->dev_addr, dev->addr_len);
589
590         return 0;
591 }
592
593 #ifdef CONFIG_NET_POLL_CONTROLLER
594 static void virtnet_netpoll(struct net_device *dev)
595 {
596         struct virtnet_info *vi = netdev_priv(dev);
597
598         napi_schedule(&vi->napi);
599 }
600 #endif
601
602 static int virtnet_open(struct net_device *dev)
603 {
604         struct virtnet_info *vi = netdev_priv(dev);
605
606         napi_enable(&vi->napi);
607
608         /* If all buffers were filled by other side before we napi_enabled, we
609          * won't get another interrupt, so process any outstanding packets
610          * now.  virtnet_poll wants re-enable the queue, so we disable here.
611          * We synchronize against interrupts via NAPI_STATE_SCHED */
612         if (napi_schedule_prep(&vi->napi)) {
613                 vi->rvq->vq_ops->disable_cb(vi->rvq);
614                 __napi_schedule(&vi->napi);
615         }
616         return 0;
617 }
618
619 /*
620  * Send command via the control virtqueue and check status.  Commands
621  * supported by the hypervisor, as indicated by feature bits, should
622  * never fail unless improperly formated.
623  */
624 static bool virtnet_send_command(struct virtnet_info *vi, u8 class, u8 cmd,
625                                  struct scatterlist *data, int out, int in)
626 {
627         struct scatterlist *s, sg[VIRTNET_SEND_COMMAND_SG_MAX + 2];
628         struct virtio_net_ctrl_hdr ctrl;
629         virtio_net_ctrl_ack status = ~0;
630         unsigned int tmp;
631         int i;
632
633         /* Caller should know better */
634         BUG_ON(!virtio_has_feature(vi->vdev, VIRTIO_NET_F_CTRL_VQ) ||
635                 (out + in > VIRTNET_SEND_COMMAND_SG_MAX));
636
637         out++; /* Add header */
638         in++; /* Add return status */
639
640         ctrl.class = class;
641         ctrl.cmd = cmd;
642
643         sg_init_table(sg, out + in);
644
645         sg_set_buf(&sg[0], &ctrl, sizeof(ctrl));
646         for_each_sg(data, s, out + in - 2, i)
647                 sg_set_buf(&sg[i + 1], sg_virt(s), s->length);
648         sg_set_buf(&sg[out + in - 1], &status, sizeof(status));
649
650         BUG_ON(vi->cvq->vq_ops->add_buf(vi->cvq, sg, out, in, vi) < 0);
651
652         vi->cvq->vq_ops->kick(vi->cvq);
653
654         /*
655          * Spin for a response, the kick causes an ioport write, trapping
656          * into the hypervisor, so the request should be handled immediately.
657          */
658         while (!vi->cvq->vq_ops->get_buf(vi->cvq, &tmp))
659                 cpu_relax();
660
661         return status == VIRTIO_NET_OK;
662 }
663
664 static int virtnet_close(struct net_device *dev)
665 {
666         struct virtnet_info *vi = netdev_priv(dev);
667
668         napi_disable(&vi->napi);
669
670         return 0;
671 }
672
673 static int virtnet_set_tx_csum(struct net_device *dev, u32 data)
674 {
675         struct virtnet_info *vi = netdev_priv(dev);
676         struct virtio_device *vdev = vi->vdev;
677
678         if (data && !virtio_has_feature(vdev, VIRTIO_NET_F_CSUM))
679                 return -ENOSYS;
680
681         return ethtool_op_set_tx_hw_csum(dev, data);
682 }
683
684 static void virtnet_set_rx_mode(struct net_device *dev)
685 {
686         struct virtnet_info *vi = netdev_priv(dev);
687         struct scatterlist sg[2];
688         u8 promisc, allmulti;
689         struct virtio_net_ctrl_mac *mac_data;
690         struct dev_addr_list *addr;
691         struct netdev_hw_addr *ha;
692         void *buf;
693         int i;
694
695         /* We can't dynamicaly set ndo_set_rx_mode, so return gracefully */
696         if (!virtio_has_feature(vi->vdev, VIRTIO_NET_F_CTRL_RX))
697                 return;
698
699         promisc = ((dev->flags & IFF_PROMISC) != 0);
700         allmulti = ((dev->flags & IFF_ALLMULTI) != 0);
701
702         sg_init_one(sg, &promisc, sizeof(promisc));
703
704         if (!virtnet_send_command(vi, VIRTIO_NET_CTRL_RX,
705                                   VIRTIO_NET_CTRL_RX_PROMISC,
706                                   sg, 1, 0))
707                 dev_warn(&dev->dev, "Failed to %sable promisc mode.\n",
708                          promisc ? "en" : "dis");
709
710         sg_init_one(sg, &allmulti, sizeof(allmulti));
711
712         if (!virtnet_send_command(vi, VIRTIO_NET_CTRL_RX,
713                                   VIRTIO_NET_CTRL_RX_ALLMULTI,
714                                   sg, 1, 0))
715                 dev_warn(&dev->dev, "Failed to %sable allmulti mode.\n",
716                          allmulti ? "en" : "dis");
717
718         /* MAC filter - use one buffer for both lists */
719         mac_data = buf = kzalloc(((dev->uc.count + dev->mc_count) * ETH_ALEN) +
720                                  (2 * sizeof(mac_data->entries)), GFP_ATOMIC);
721         if (!buf) {
722                 dev_warn(&dev->dev, "No memory for MAC address buffer\n");
723                 return;
724         }
725
726         sg_init_table(sg, 2);
727
728         /* Store the unicast list and count in the front of the buffer */
729         mac_data->entries = dev->uc.count;
730         i = 0;
731         list_for_each_entry(ha, &dev->uc.list, list)
732                 memcpy(&mac_data->macs[i++][0], ha->addr, ETH_ALEN);
733
734         sg_set_buf(&sg[0], mac_data,
735                    sizeof(mac_data->entries) + (dev->uc.count * ETH_ALEN));
736
737         /* multicast list and count fill the end */
738         mac_data = (void *)&mac_data->macs[dev->uc.count][0];
739
740         mac_data->entries = dev->mc_count;
741         addr = dev->mc_list;
742         for (i = 0; i < dev->mc_count; i++, addr = addr->next)
743                 memcpy(&mac_data->macs[i][0], addr->da_addr, ETH_ALEN);
744
745         sg_set_buf(&sg[1], mac_data,
746                    sizeof(mac_data->entries) + (dev->mc_count * ETH_ALEN));
747
748         if (!virtnet_send_command(vi, VIRTIO_NET_CTRL_MAC,
749                                   VIRTIO_NET_CTRL_MAC_TABLE_SET,
750                                   sg, 2, 0))
751                 dev_warn(&dev->dev, "Failed to set MAC fitler table.\n");
752
753         kfree(buf);
754 }
755
756 static void virtnet_vlan_rx_add_vid(struct net_device *dev, u16 vid)
757 {
758         struct virtnet_info *vi = netdev_priv(dev);
759         struct scatterlist sg;
760
761         sg_init_one(&sg, &vid, sizeof(vid));
762
763         if (!virtnet_send_command(vi, VIRTIO_NET_CTRL_VLAN,
764                                   VIRTIO_NET_CTRL_VLAN_ADD, &sg, 1, 0))
765                 dev_warn(&dev->dev, "Failed to add VLAN ID %d.\n", vid);
766 }
767
768 static void virtnet_vlan_rx_kill_vid(struct net_device *dev, u16 vid)
769 {
770         struct virtnet_info *vi = netdev_priv(dev);
771         struct scatterlist sg;
772
773         sg_init_one(&sg, &vid, sizeof(vid));
774
775         if (!virtnet_send_command(vi, VIRTIO_NET_CTRL_VLAN,
776                                   VIRTIO_NET_CTRL_VLAN_DEL, &sg, 1, 0))
777                 dev_warn(&dev->dev, "Failed to kill VLAN ID %d.\n", vid);
778 }
779
780 static const struct ethtool_ops virtnet_ethtool_ops = {
781         .set_tx_csum = virtnet_set_tx_csum,
782         .set_sg = ethtool_op_set_sg,
783         .set_tso = ethtool_op_set_tso,
784         .set_ufo = ethtool_op_set_ufo,
785         .get_link = ethtool_op_get_link,
786 };
787
788 #define MIN_MTU 68
789 #define MAX_MTU 65535
790
791 static int virtnet_change_mtu(struct net_device *dev, int new_mtu)
792 {
793         if (new_mtu < MIN_MTU || new_mtu > MAX_MTU)
794                 return -EINVAL;
795         dev->mtu = new_mtu;
796         return 0;
797 }
798
799 static const struct net_device_ops virtnet_netdev = {
800         .ndo_open            = virtnet_open,
801         .ndo_stop            = virtnet_close,
802         .ndo_start_xmit      = start_xmit,
803         .ndo_validate_addr   = eth_validate_addr,
804         .ndo_set_mac_address = virtnet_set_mac_address,
805         .ndo_set_rx_mode     = virtnet_set_rx_mode,
806         .ndo_change_mtu      = virtnet_change_mtu,
807         .ndo_vlan_rx_add_vid = virtnet_vlan_rx_add_vid,
808         .ndo_vlan_rx_kill_vid = virtnet_vlan_rx_kill_vid,
809 #ifdef CONFIG_NET_POLL_CONTROLLER
810         .ndo_poll_controller = virtnet_netpoll,
811 #endif
812 };
813
814 static void virtnet_update_status(struct virtnet_info *vi)
815 {
816         u16 v;
817
818         if (!virtio_has_feature(vi->vdev, VIRTIO_NET_F_STATUS))
819                 return;
820
821         vi->vdev->config->get(vi->vdev,
822                               offsetof(struct virtio_net_config, status),
823                               &v, sizeof(v));
824
825         /* Ignore unknown (future) status bits */
826         v &= VIRTIO_NET_S_LINK_UP;
827
828         if (vi->status == v)
829                 return;
830
831         vi->status = v;
832
833         if (vi->status & VIRTIO_NET_S_LINK_UP) {
834                 netif_carrier_on(vi->dev);
835                 netif_wake_queue(vi->dev);
836         } else {
837                 netif_carrier_off(vi->dev);
838                 netif_stop_queue(vi->dev);
839         }
840 }
841
842 static void virtnet_config_changed(struct virtio_device *vdev)
843 {
844         struct virtnet_info *vi = vdev->priv;
845
846         virtnet_update_status(vi);
847 }
848
849 static int virtnet_probe(struct virtio_device *vdev)
850 {
851         int err;
852         struct net_device *dev;
853         struct virtnet_info *vi;
854         struct virtqueue *vqs[3];
855         vq_callback_t *callbacks[] = { skb_recv_done, skb_xmit_done, NULL};
856         const char *names[] = { "input", "output", "control" };
857         int nvqs;
858
859         /* Allocate ourselves a network device with room for our info */
860         dev = alloc_etherdev(sizeof(struct virtnet_info));
861         if (!dev)
862                 return -ENOMEM;
863
864         /* Set up network device as normal. */
865         dev->netdev_ops = &virtnet_netdev;
866         dev->features = NETIF_F_HIGHDMA;
867         SET_ETHTOOL_OPS(dev, &virtnet_ethtool_ops);
868         SET_NETDEV_DEV(dev, &vdev->dev);
869
870         /* Do we support "hardware" checksums? */
871         if (csum && virtio_has_feature(vdev, VIRTIO_NET_F_CSUM)) {
872                 /* This opens up the world of extra features. */
873                 dev->features |= NETIF_F_HW_CSUM|NETIF_F_SG|NETIF_F_FRAGLIST;
874                 if (gso && virtio_has_feature(vdev, VIRTIO_NET_F_GSO)) {
875                         dev->features |= NETIF_F_TSO | NETIF_F_UFO
876                                 | NETIF_F_TSO_ECN | NETIF_F_TSO6;
877                 }
878                 /* Individual feature bits: what can host handle? */
879                 if (gso && virtio_has_feature(vdev, VIRTIO_NET_F_HOST_TSO4))
880                         dev->features |= NETIF_F_TSO;
881                 if (gso && virtio_has_feature(vdev, VIRTIO_NET_F_HOST_TSO6))
882                         dev->features |= NETIF_F_TSO6;
883                 if (gso && virtio_has_feature(vdev, VIRTIO_NET_F_HOST_ECN))
884                         dev->features |= NETIF_F_TSO_ECN;
885                 if (gso && virtio_has_feature(vdev, VIRTIO_NET_F_HOST_UFO))
886                         dev->features |= NETIF_F_UFO;
887         }
888
889         /* Configuration may specify what MAC to use.  Otherwise random. */
890         if (virtio_has_feature(vdev, VIRTIO_NET_F_MAC)) {
891                 vdev->config->get(vdev,
892                                   offsetof(struct virtio_net_config, mac),
893                                   dev->dev_addr, dev->addr_len);
894         } else
895                 random_ether_addr(dev->dev_addr);
896
897         /* Set up our device-specific information */
898         vi = netdev_priv(dev);
899         netif_napi_add(dev, &vi->napi, virtnet_poll, napi_weight);
900         vi->dev = dev;
901         vi->vdev = vdev;
902         vdev->priv = vi;
903         vi->pages = NULL;
904         INIT_DELAYED_WORK(&vi->refill, refill_work);
905
906         /* If they give us a callback when all buffers are done, we don't need
907          * the timer. */
908         vi->free_in_tasklet = virtio_has_feature(vdev,VIRTIO_F_NOTIFY_ON_EMPTY);
909
910         /* If we can receive ANY GSO packets, we must allocate large ones. */
911         if (virtio_has_feature(vdev, VIRTIO_NET_F_GUEST_TSO4)
912             || virtio_has_feature(vdev, VIRTIO_NET_F_GUEST_TSO6)
913             || virtio_has_feature(vdev, VIRTIO_NET_F_GUEST_ECN))
914                 vi->big_packets = true;
915
916         if (virtio_has_feature(vdev, VIRTIO_NET_F_MRG_RXBUF))
917                 vi->mergeable_rx_bufs = true;
918
919         /* We expect two virtqueues, receive then send,
920          * and optionally control. */
921         nvqs = virtio_has_feature(vi->vdev, VIRTIO_NET_F_CTRL_VQ) ? 3 : 2;
922
923         err = vdev->config->find_vqs(vdev, nvqs, vqs, callbacks, names);
924         if (err)
925                 goto free;
926
927         vi->rvq = vqs[0];
928         vi->svq = vqs[1];
929
930         if (virtio_has_feature(vi->vdev, VIRTIO_NET_F_CTRL_VQ)) {
931                 vi->cvq = vqs[2];
932
933                 if (virtio_has_feature(vi->vdev, VIRTIO_NET_F_CTRL_VLAN))
934                         dev->features |= NETIF_F_HW_VLAN_FILTER;
935         }
936
937         /* Initialize our empty receive and send queues. */
938         skb_queue_head_init(&vi->recv);
939         skb_queue_head_init(&vi->send);
940
941         tasklet_init(&vi->tasklet, xmit_tasklet, (unsigned long)vi);
942
943         if (!vi->free_in_tasklet)
944                 setup_timer(&vi->xmit_free_timer, xmit_free, (unsigned long)vi);
945
946         err = register_netdev(dev);
947         if (err) {
948                 pr_debug("virtio_net: registering device failed\n");
949                 goto free_vqs;
950         }
951
952         /* Last of all, set up some receive buffers. */
953         try_fill_recv(vi, GFP_KERNEL);
954
955         /* If we didn't even get one input buffer, we're useless. */
956         if (vi->num == 0) {
957                 err = -ENOMEM;
958                 goto unregister;
959         }
960
961         vi->status = VIRTIO_NET_S_LINK_UP;
962         virtnet_update_status(vi);
963         netif_carrier_on(dev);
964
965         pr_debug("virtnet: registered device %s\n", dev->name);
966         return 0;
967
968 unregister:
969         unregister_netdev(dev);
970         cancel_delayed_work_sync(&vi->refill);
971 free_vqs:
972         vdev->config->del_vqs(vdev);
973 free:
974         free_netdev(dev);
975         return err;
976 }
977
978 static void virtnet_remove(struct virtio_device *vdev)
979 {
980         struct virtnet_info *vi = vdev->priv;
981         struct sk_buff *skb;
982
983         /* Stop all the virtqueues. */
984         vdev->config->reset(vdev);
985
986         if (!vi->free_in_tasklet)
987                 del_timer_sync(&vi->xmit_free_timer);
988
989         /* Free our skbs in send and recv queues, if any. */
990         while ((skb = __skb_dequeue(&vi->recv)) != NULL) {
991                 kfree_skb(skb);
992                 vi->num--;
993         }
994         __skb_queue_purge(&vi->send);
995
996         BUG_ON(vi->num != 0);
997
998         unregister_netdev(vi->dev);
999         cancel_delayed_work_sync(&vi->refill);
1000
1001         vdev->config->del_vqs(vi->vdev);
1002
1003         while (vi->pages)
1004                 __free_pages(get_a_page(vi, GFP_KERNEL), 0);
1005
1006         free_netdev(vi->dev);
1007 }
1008
1009 static struct virtio_device_id id_table[] = {
1010         { VIRTIO_ID_NET, VIRTIO_DEV_ANY_ID },
1011         { 0 },
1012 };
1013
1014 static unsigned int features[] = {
1015         VIRTIO_NET_F_CSUM, VIRTIO_NET_F_GUEST_CSUM,
1016         VIRTIO_NET_F_GSO, VIRTIO_NET_F_MAC,
1017         VIRTIO_NET_F_HOST_TSO4, VIRTIO_NET_F_HOST_UFO, VIRTIO_NET_F_HOST_TSO6,
1018         VIRTIO_NET_F_HOST_ECN, VIRTIO_NET_F_GUEST_TSO4, VIRTIO_NET_F_GUEST_TSO6,
1019         VIRTIO_NET_F_GUEST_ECN, VIRTIO_NET_F_GUEST_UFO,
1020         VIRTIO_NET_F_MRG_RXBUF, VIRTIO_NET_F_STATUS, VIRTIO_NET_F_CTRL_VQ,
1021         VIRTIO_NET_F_CTRL_RX, VIRTIO_NET_F_CTRL_VLAN,
1022         VIRTIO_F_NOTIFY_ON_EMPTY,
1023 };
1024
1025 static struct virtio_driver virtio_net = {
1026         .feature_table = features,
1027         .feature_table_size = ARRAY_SIZE(features),
1028         .driver.name =  KBUILD_MODNAME,
1029         .driver.owner = THIS_MODULE,
1030         .id_table =     id_table,
1031         .probe =        virtnet_probe,
1032         .remove =       __devexit_p(virtnet_remove),
1033         .config_changed = virtnet_config_changed,
1034 };
1035
1036 static int __init init(void)
1037 {
1038         return register_virtio_driver(&virtio_net);
1039 }
1040
1041 static void __exit fini(void)
1042 {
1043         unregister_virtio_driver(&virtio_net);
1044 }
1045 module_init(init);
1046 module_exit(fini);
1047
1048 MODULE_DEVICE_TABLE(virtio, id_table);
1049 MODULE_DESCRIPTION("Virtio network driver");
1050 MODULE_LICENSE("GPL");