Merge tag 'wireless-drivers-next-for-davem-2015-04-01' of git://git.kernel.org/pub...
[linux-2.6-block.git] / drivers / net / hyperv / netvsc.c
1 /*
2  * Copyright (c) 2009, Microsoft Corporation.
3  *
4  * This program is free software; you can redistribute it and/or modify it
5  * under the terms and conditions of the GNU General Public License,
6  * version 2, as published by the Free Software Foundation.
7  *
8  * This program is distributed in the hope it will be useful, but WITHOUT
9  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
11  * more details.
12  *
13  * You should have received a copy of the GNU General Public License along with
14  * this program; if not, see <http://www.gnu.org/licenses/>.
15  *
16  * Authors:
17  *   Haiyang Zhang <haiyangz@microsoft.com>
18  *   Hank Janssen  <hjanssen@microsoft.com>
19  */
20 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
21
22 #include <linux/kernel.h>
23 #include <linux/sched.h>
24 #include <linux/wait.h>
25 #include <linux/mm.h>
26 #include <linux/delay.h>
27 #include <linux/io.h>
28 #include <linux/slab.h>
29 #include <linux/netdevice.h>
30 #include <linux/if_ether.h>
31 #include <asm/sync_bitops.h>
32
33 #include "hyperv_net.h"
34
35
36 static struct netvsc_device *alloc_net_device(struct hv_device *device)
37 {
38         struct netvsc_device *net_device;
39         struct net_device *ndev = hv_get_drvdata(device);
40         int i;
41
42         net_device = kzalloc(sizeof(struct netvsc_device), GFP_KERNEL);
43         if (!net_device)
44                 return NULL;
45
46         net_device->cb_buffer = kzalloc(NETVSC_PACKET_SIZE, GFP_KERNEL);
47         if (!net_device->cb_buffer) {
48                 kfree(net_device);
49                 return NULL;
50         }
51
52         init_waitqueue_head(&net_device->wait_drain);
53         net_device->start_remove = false;
54         net_device->destroy = false;
55         net_device->dev = device;
56         net_device->ndev = ndev;
57         net_device->max_pkt = RNDIS_MAX_PKT_DEFAULT;
58         net_device->pkt_align = RNDIS_PKT_ALIGN_DEFAULT;
59
60         for (i = 0; i < num_online_cpus(); i++)
61                 spin_lock_init(&net_device->msd[i].lock);
62
63         hv_set_drvdata(device, net_device);
64         return net_device;
65 }
66
67 static void free_netvsc_device(struct netvsc_device *nvdev)
68 {
69         kfree(nvdev->cb_buffer);
70         kfree(nvdev);
71 }
72
73 static struct netvsc_device *get_outbound_net_device(struct hv_device *device)
74 {
75         struct netvsc_device *net_device;
76
77         net_device = hv_get_drvdata(device);
78         if (net_device && net_device->destroy)
79                 net_device = NULL;
80
81         return net_device;
82 }
83
84 static struct netvsc_device *get_inbound_net_device(struct hv_device *device)
85 {
86         struct netvsc_device *net_device;
87
88         net_device = hv_get_drvdata(device);
89
90         if (!net_device)
91                 goto get_in_err;
92
93         if (net_device->destroy &&
94                 atomic_read(&net_device->num_outstanding_sends) == 0)
95                 net_device = NULL;
96
97 get_in_err:
98         return net_device;
99 }
100
101
102 static int netvsc_destroy_buf(struct netvsc_device *net_device)
103 {
104         struct nvsp_message *revoke_packet;
105         int ret = 0;
106         struct net_device *ndev = net_device->ndev;
107
108         /*
109          * If we got a section count, it means we received a
110          * SendReceiveBufferComplete msg (ie sent
111          * NvspMessage1TypeSendReceiveBuffer msg) therefore, we need
112          * to send a revoke msg here
113          */
114         if (net_device->recv_section_cnt) {
115                 /* Send the revoke receive buffer */
116                 revoke_packet = &net_device->revoke_packet;
117                 memset(revoke_packet, 0, sizeof(struct nvsp_message));
118
119                 revoke_packet->hdr.msg_type =
120                         NVSP_MSG1_TYPE_REVOKE_RECV_BUF;
121                 revoke_packet->msg.v1_msg.
122                 revoke_recv_buf.id = NETVSC_RECEIVE_BUFFER_ID;
123
124                 ret = vmbus_sendpacket(net_device->dev->channel,
125                                        revoke_packet,
126                                        sizeof(struct nvsp_message),
127                                        (unsigned long)revoke_packet,
128                                        VM_PKT_DATA_INBAND, 0);
129                 /*
130                  * If we failed here, we might as well return and
131                  * have a leak rather than continue and a bugchk
132                  */
133                 if (ret != 0) {
134                         netdev_err(ndev, "unable to send "
135                                 "revoke receive buffer to netvsp\n");
136                         return ret;
137                 }
138         }
139
140         /* Teardown the gpadl on the vsp end */
141         if (net_device->recv_buf_gpadl_handle) {
142                 ret = vmbus_teardown_gpadl(net_device->dev->channel,
143                            net_device->recv_buf_gpadl_handle);
144
145                 /* If we failed here, we might as well return and have a leak
146                  * rather than continue and a bugchk
147                  */
148                 if (ret != 0) {
149                         netdev_err(ndev,
150                                    "unable to teardown receive buffer's gpadl\n");
151                         return ret;
152                 }
153                 net_device->recv_buf_gpadl_handle = 0;
154         }
155
156         if (net_device->recv_buf) {
157                 /* Free up the receive buffer */
158                 vfree(net_device->recv_buf);
159                 net_device->recv_buf = NULL;
160         }
161
162         if (net_device->recv_section) {
163                 net_device->recv_section_cnt = 0;
164                 kfree(net_device->recv_section);
165                 net_device->recv_section = NULL;
166         }
167
168         /* Deal with the send buffer we may have setup.
169          * If we got a  send section size, it means we received a
170          * NVSP_MSG1_TYPE_SEND_SEND_BUF_COMPLETE msg (ie sent
171          * NVSP_MSG1_TYPE_SEND_SEND_BUF msg) therefore, we need
172          * to send a revoke msg here
173          */
174         if (net_device->send_section_size) {
175                 /* Send the revoke receive buffer */
176                 revoke_packet = &net_device->revoke_packet;
177                 memset(revoke_packet, 0, sizeof(struct nvsp_message));
178
179                 revoke_packet->hdr.msg_type =
180                         NVSP_MSG1_TYPE_REVOKE_SEND_BUF;
181                 revoke_packet->msg.v1_msg.revoke_send_buf.id =
182                         NETVSC_SEND_BUFFER_ID;
183
184                 ret = vmbus_sendpacket(net_device->dev->channel,
185                                        revoke_packet,
186                                        sizeof(struct nvsp_message),
187                                        (unsigned long)revoke_packet,
188                                        VM_PKT_DATA_INBAND, 0);
189                 /* If we failed here, we might as well return and
190                  * have a leak rather than continue and a bugchk
191                  */
192                 if (ret != 0) {
193                         netdev_err(ndev, "unable to send "
194                                    "revoke send buffer to netvsp\n");
195                         return ret;
196                 }
197         }
198         /* Teardown the gpadl on the vsp end */
199         if (net_device->send_buf_gpadl_handle) {
200                 ret = vmbus_teardown_gpadl(net_device->dev->channel,
201                                            net_device->send_buf_gpadl_handle);
202
203                 /* If we failed here, we might as well return and have a leak
204                  * rather than continue and a bugchk
205                  */
206                 if (ret != 0) {
207                         netdev_err(ndev,
208                                    "unable to teardown send buffer's gpadl\n");
209                         return ret;
210                 }
211                 net_device->send_buf_gpadl_handle = 0;
212         }
213         if (net_device->send_buf) {
214                 /* Free up the send buffer */
215                 vfree(net_device->send_buf);
216                 net_device->send_buf = NULL;
217         }
218         kfree(net_device->send_section_map);
219
220         return ret;
221 }
222
223 static int netvsc_init_buf(struct hv_device *device)
224 {
225         int ret = 0;
226         unsigned long t;
227         struct netvsc_device *net_device;
228         struct nvsp_message *init_packet;
229         struct net_device *ndev;
230
231         net_device = get_outbound_net_device(device);
232         if (!net_device)
233                 return -ENODEV;
234         ndev = net_device->ndev;
235
236         net_device->recv_buf = vzalloc(net_device->recv_buf_size);
237         if (!net_device->recv_buf) {
238                 netdev_err(ndev, "unable to allocate receive "
239                         "buffer of size %d\n", net_device->recv_buf_size);
240                 ret = -ENOMEM;
241                 goto cleanup;
242         }
243
244         /*
245          * Establish the gpadl handle for this buffer on this
246          * channel.  Note: This call uses the vmbus connection rather
247          * than the channel to establish the gpadl handle.
248          */
249         ret = vmbus_establish_gpadl(device->channel, net_device->recv_buf,
250                                     net_device->recv_buf_size,
251                                     &net_device->recv_buf_gpadl_handle);
252         if (ret != 0) {
253                 netdev_err(ndev,
254                         "unable to establish receive buffer's gpadl\n");
255                 goto cleanup;
256         }
257
258
259         /* Notify the NetVsp of the gpadl handle */
260         init_packet = &net_device->channel_init_pkt;
261
262         memset(init_packet, 0, sizeof(struct nvsp_message));
263
264         init_packet->hdr.msg_type = NVSP_MSG1_TYPE_SEND_RECV_BUF;
265         init_packet->msg.v1_msg.send_recv_buf.
266                 gpadl_handle = net_device->recv_buf_gpadl_handle;
267         init_packet->msg.v1_msg.
268                 send_recv_buf.id = NETVSC_RECEIVE_BUFFER_ID;
269
270         /* Send the gpadl notification request */
271         ret = vmbus_sendpacket(device->channel, init_packet,
272                                sizeof(struct nvsp_message),
273                                (unsigned long)init_packet,
274                                VM_PKT_DATA_INBAND,
275                                VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED);
276         if (ret != 0) {
277                 netdev_err(ndev,
278                         "unable to send receive buffer's gpadl to netvsp\n");
279                 goto cleanup;
280         }
281
282         t = wait_for_completion_timeout(&net_device->channel_init_wait, 5*HZ);
283         BUG_ON(t == 0);
284
285
286         /* Check the response */
287         if (init_packet->msg.v1_msg.
288             send_recv_buf_complete.status != NVSP_STAT_SUCCESS) {
289                 netdev_err(ndev, "Unable to complete receive buffer "
290                            "initialization with NetVsp - status %d\n",
291                            init_packet->msg.v1_msg.
292                            send_recv_buf_complete.status);
293                 ret = -EINVAL;
294                 goto cleanup;
295         }
296
297         /* Parse the response */
298
299         net_device->recv_section_cnt = init_packet->msg.
300                 v1_msg.send_recv_buf_complete.num_sections;
301
302         net_device->recv_section = kmemdup(
303                 init_packet->msg.v1_msg.send_recv_buf_complete.sections,
304                 net_device->recv_section_cnt *
305                 sizeof(struct nvsp_1_receive_buffer_section),
306                 GFP_KERNEL);
307         if (net_device->recv_section == NULL) {
308                 ret = -EINVAL;
309                 goto cleanup;
310         }
311
312         /*
313          * For 1st release, there should only be 1 section that represents the
314          * entire receive buffer
315          */
316         if (net_device->recv_section_cnt != 1 ||
317             net_device->recv_section->offset != 0) {
318                 ret = -EINVAL;
319                 goto cleanup;
320         }
321
322         /* Now setup the send buffer.
323          */
324         net_device->send_buf = vzalloc(net_device->send_buf_size);
325         if (!net_device->send_buf) {
326                 netdev_err(ndev, "unable to allocate send "
327                            "buffer of size %d\n", net_device->send_buf_size);
328                 ret = -ENOMEM;
329                 goto cleanup;
330         }
331
332         /* Establish the gpadl handle for this buffer on this
333          * channel.  Note: This call uses the vmbus connection rather
334          * than the channel to establish the gpadl handle.
335          */
336         ret = vmbus_establish_gpadl(device->channel, net_device->send_buf,
337                                     net_device->send_buf_size,
338                                     &net_device->send_buf_gpadl_handle);
339         if (ret != 0) {
340                 netdev_err(ndev,
341                            "unable to establish send buffer's gpadl\n");
342                 goto cleanup;
343         }
344
345         /* Notify the NetVsp of the gpadl handle */
346         init_packet = &net_device->channel_init_pkt;
347         memset(init_packet, 0, sizeof(struct nvsp_message));
348         init_packet->hdr.msg_type = NVSP_MSG1_TYPE_SEND_SEND_BUF;
349         init_packet->msg.v1_msg.send_send_buf.gpadl_handle =
350                 net_device->send_buf_gpadl_handle;
351         init_packet->msg.v1_msg.send_send_buf.id = NETVSC_SEND_BUFFER_ID;
352
353         /* Send the gpadl notification request */
354         ret = vmbus_sendpacket(device->channel, init_packet,
355                                sizeof(struct nvsp_message),
356                                (unsigned long)init_packet,
357                                VM_PKT_DATA_INBAND,
358                                VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED);
359         if (ret != 0) {
360                 netdev_err(ndev,
361                            "unable to send send buffer's gpadl to netvsp\n");
362                 goto cleanup;
363         }
364
365         t = wait_for_completion_timeout(&net_device->channel_init_wait, 5*HZ);
366         BUG_ON(t == 0);
367
368         /* Check the response */
369         if (init_packet->msg.v1_msg.
370             send_send_buf_complete.status != NVSP_STAT_SUCCESS) {
371                 netdev_err(ndev, "Unable to complete send buffer "
372                            "initialization with NetVsp - status %d\n",
373                            init_packet->msg.v1_msg.
374                            send_send_buf_complete.status);
375                 ret = -EINVAL;
376                 goto cleanup;
377         }
378
379         /* Parse the response */
380         net_device->send_section_size = init_packet->msg.
381                                 v1_msg.send_send_buf_complete.section_size;
382
383         /* Section count is simply the size divided by the section size.
384          */
385         net_device->send_section_cnt =
386                 net_device->send_buf_size/net_device->send_section_size;
387
388         dev_info(&device->device, "Send section size: %d, Section count:%d\n",
389                  net_device->send_section_size, net_device->send_section_cnt);
390
391         /* Setup state for managing the send buffer. */
392         net_device->map_words = DIV_ROUND_UP(net_device->send_section_cnt,
393                                              BITS_PER_LONG);
394
395         net_device->send_section_map =
396                 kzalloc(net_device->map_words * sizeof(ulong), GFP_KERNEL);
397         if (net_device->send_section_map == NULL) {
398                 ret = -ENOMEM;
399                 goto cleanup;
400         }
401
402         goto exit;
403
404 cleanup:
405         netvsc_destroy_buf(net_device);
406
407 exit:
408         return ret;
409 }
410
411
412 /* Negotiate NVSP protocol version */
413 static int negotiate_nvsp_ver(struct hv_device *device,
414                               struct netvsc_device *net_device,
415                               struct nvsp_message *init_packet,
416                               u32 nvsp_ver)
417 {
418         int ret;
419         unsigned long t;
420
421         memset(init_packet, 0, sizeof(struct nvsp_message));
422         init_packet->hdr.msg_type = NVSP_MSG_TYPE_INIT;
423         init_packet->msg.init_msg.init.min_protocol_ver = nvsp_ver;
424         init_packet->msg.init_msg.init.max_protocol_ver = nvsp_ver;
425
426         /* Send the init request */
427         ret = vmbus_sendpacket(device->channel, init_packet,
428                                sizeof(struct nvsp_message),
429                                (unsigned long)init_packet,
430                                VM_PKT_DATA_INBAND,
431                                VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED);
432
433         if (ret != 0)
434                 return ret;
435
436         t = wait_for_completion_timeout(&net_device->channel_init_wait, 5*HZ);
437
438         if (t == 0)
439                 return -ETIMEDOUT;
440
441         if (init_packet->msg.init_msg.init_complete.status !=
442             NVSP_STAT_SUCCESS)
443                 return -EINVAL;
444
445         if (nvsp_ver == NVSP_PROTOCOL_VERSION_1)
446                 return 0;
447
448         /* NVSPv2 only: Send NDIS config */
449         memset(init_packet, 0, sizeof(struct nvsp_message));
450         init_packet->hdr.msg_type = NVSP_MSG2_TYPE_SEND_NDIS_CONFIG;
451         init_packet->msg.v2_msg.send_ndis_config.mtu = net_device->ndev->mtu +
452                                                        ETH_HLEN;
453         init_packet->msg.v2_msg.send_ndis_config.capability.ieee8021q = 1;
454
455         ret = vmbus_sendpacket(device->channel, init_packet,
456                                 sizeof(struct nvsp_message),
457                                 (unsigned long)init_packet,
458                                 VM_PKT_DATA_INBAND, 0);
459
460         return ret;
461 }
462
463 static int netvsc_connect_vsp(struct hv_device *device)
464 {
465         int ret;
466         struct netvsc_device *net_device;
467         struct nvsp_message *init_packet;
468         int ndis_version;
469         struct net_device *ndev;
470         u32 ver_list[] = { NVSP_PROTOCOL_VERSION_1, NVSP_PROTOCOL_VERSION_2,
471                 NVSP_PROTOCOL_VERSION_4, NVSP_PROTOCOL_VERSION_5 };
472         int i, num_ver = 4; /* number of different NVSP versions */
473
474         net_device = get_outbound_net_device(device);
475         if (!net_device)
476                 return -ENODEV;
477         ndev = net_device->ndev;
478
479         init_packet = &net_device->channel_init_pkt;
480
481         /* Negotiate the latest NVSP protocol supported */
482         for (i = num_ver - 1; i >= 0; i--)
483                 if (negotiate_nvsp_ver(device, net_device, init_packet,
484                                        ver_list[i])  == 0) {
485                         net_device->nvsp_version = ver_list[i];
486                         break;
487                 }
488
489         if (i < 0) {
490                 ret = -EPROTO;
491                 goto cleanup;
492         }
493
494         pr_debug("Negotiated NVSP version:%x\n", net_device->nvsp_version);
495
496         /* Send the ndis version */
497         memset(init_packet, 0, sizeof(struct nvsp_message));
498
499         if (net_device->nvsp_version <= NVSP_PROTOCOL_VERSION_4)
500                 ndis_version = 0x00060001;
501         else
502                 ndis_version = 0x0006001e;
503
504         init_packet->hdr.msg_type = NVSP_MSG1_TYPE_SEND_NDIS_VER;
505         init_packet->msg.v1_msg.
506                 send_ndis_ver.ndis_major_ver =
507                                 (ndis_version & 0xFFFF0000) >> 16;
508         init_packet->msg.v1_msg.
509                 send_ndis_ver.ndis_minor_ver =
510                                 ndis_version & 0xFFFF;
511
512         /* Send the init request */
513         ret = vmbus_sendpacket(device->channel, init_packet,
514                                 sizeof(struct nvsp_message),
515                                 (unsigned long)init_packet,
516                                 VM_PKT_DATA_INBAND, 0);
517         if (ret != 0)
518                 goto cleanup;
519
520         /* Post the big receive buffer to NetVSP */
521         if (net_device->nvsp_version <= NVSP_PROTOCOL_VERSION_2)
522                 net_device->recv_buf_size = NETVSC_RECEIVE_BUFFER_SIZE_LEGACY;
523         else
524                 net_device->recv_buf_size = NETVSC_RECEIVE_BUFFER_SIZE;
525         net_device->send_buf_size = NETVSC_SEND_BUFFER_SIZE;
526
527         ret = netvsc_init_buf(device);
528
529 cleanup:
530         return ret;
531 }
532
533 static void netvsc_disconnect_vsp(struct netvsc_device *net_device)
534 {
535         netvsc_destroy_buf(net_device);
536 }
537
538 /*
539  * netvsc_device_remove - Callback when the root bus device is removed
540  */
541 int netvsc_device_remove(struct hv_device *device)
542 {
543         struct netvsc_device *net_device;
544         unsigned long flags;
545
546         net_device = hv_get_drvdata(device);
547
548         netvsc_disconnect_vsp(net_device);
549
550         /*
551          * Since we have already drained, we don't need to busy wait
552          * as was done in final_release_stor_device()
553          * Note that we cannot set the ext pointer to NULL until
554          * we have drained - to drain the outgoing packets, we need to
555          * allow incoming packets.
556          */
557
558         spin_lock_irqsave(&device->channel->inbound_lock, flags);
559         hv_set_drvdata(device, NULL);
560         spin_unlock_irqrestore(&device->channel->inbound_lock, flags);
561
562         /*
563          * At this point, no one should be accessing net_device
564          * except in here
565          */
566         dev_notice(&device->device, "net device safe to remove\n");
567
568         /* Now, we can close the channel safely */
569         vmbus_close(device->channel);
570
571         /* Release all resources */
572         vfree(net_device->sub_cb_buf);
573         free_netvsc_device(net_device);
574         return 0;
575 }
576
577
578 #define RING_AVAIL_PERCENT_HIWATER 20
579 #define RING_AVAIL_PERCENT_LOWATER 10
580
581 /*
582  * Get the percentage of available bytes to write in the ring.
583  * The return value is in range from 0 to 100.
584  */
585 static inline u32 hv_ringbuf_avail_percent(
586                 struct hv_ring_buffer_info *ring_info)
587 {
588         u32 avail_read, avail_write;
589
590         hv_get_ringbuffer_availbytes(ring_info, &avail_read, &avail_write);
591
592         return avail_write * 100 / ring_info->ring_datasize;
593 }
594
595 static inline void netvsc_free_send_slot(struct netvsc_device *net_device,
596                                          u32 index)
597 {
598         sync_change_bit(index, net_device->send_section_map);
599 }
600
601 static void netvsc_send_completion(struct netvsc_device *net_device,
602                                    struct hv_device *device,
603                                    struct vmpacket_descriptor *packet)
604 {
605         struct nvsp_message *nvsp_packet;
606         struct hv_netvsc_packet *nvsc_packet;
607         struct net_device *ndev;
608         u32 send_index;
609
610         ndev = net_device->ndev;
611
612         nvsp_packet = (struct nvsp_message *)((unsigned long)packet +
613                         (packet->offset8 << 3));
614
615         if ((nvsp_packet->hdr.msg_type == NVSP_MSG_TYPE_INIT_COMPLETE) ||
616             (nvsp_packet->hdr.msg_type ==
617              NVSP_MSG1_TYPE_SEND_RECV_BUF_COMPLETE) ||
618             (nvsp_packet->hdr.msg_type ==
619              NVSP_MSG1_TYPE_SEND_SEND_BUF_COMPLETE) ||
620             (nvsp_packet->hdr.msg_type ==
621              NVSP_MSG5_TYPE_SUBCHANNEL)) {
622                 /* Copy the response back */
623                 memcpy(&net_device->channel_init_pkt, nvsp_packet,
624                        sizeof(struct nvsp_message));
625                 complete(&net_device->channel_init_wait);
626         } else if (nvsp_packet->hdr.msg_type ==
627                    NVSP_MSG1_TYPE_SEND_RNDIS_PKT_COMPLETE) {
628                 int num_outstanding_sends;
629                 u16 q_idx = 0;
630                 struct vmbus_channel *channel = device->channel;
631                 int queue_sends;
632
633                 /* Get the send context */
634                 nvsc_packet = (struct hv_netvsc_packet *)(unsigned long)
635                         packet->trans_id;
636
637                 /* Notify the layer above us */
638                 if (nvsc_packet) {
639                         send_index = nvsc_packet->send_buf_index;
640                         if (send_index != NETVSC_INVALID_INDEX)
641                                 netvsc_free_send_slot(net_device, send_index);
642                         q_idx = nvsc_packet->q_idx;
643                         channel = nvsc_packet->channel;
644                         nvsc_packet->send_completion(nvsc_packet->
645                                                      send_completion_ctx);
646                 }
647
648                 num_outstanding_sends =
649                         atomic_dec_return(&net_device->num_outstanding_sends);
650                 queue_sends = atomic_dec_return(&net_device->
651                                                 queue_sends[q_idx]);
652
653                 if (net_device->destroy && num_outstanding_sends == 0)
654                         wake_up(&net_device->wait_drain);
655
656                 if (netif_tx_queue_stopped(netdev_get_tx_queue(ndev, q_idx)) &&
657                     !net_device->start_remove &&
658                     (hv_ringbuf_avail_percent(&channel->outbound) >
659                      RING_AVAIL_PERCENT_HIWATER || queue_sends < 1))
660                                 netif_tx_wake_queue(netdev_get_tx_queue(
661                                                     ndev, q_idx));
662         } else {
663                 netdev_err(ndev, "Unknown send completion packet type- "
664                            "%d received!!\n", nvsp_packet->hdr.msg_type);
665         }
666
667 }
668
669 static u32 netvsc_get_next_send_section(struct netvsc_device *net_device)
670 {
671         unsigned long index;
672         u32 max_words = net_device->map_words;
673         unsigned long *map_addr = (unsigned long *)net_device->send_section_map;
674         u32 section_cnt = net_device->send_section_cnt;
675         int ret_val = NETVSC_INVALID_INDEX;
676         int i;
677         int prev_val;
678
679         for (i = 0; i < max_words; i++) {
680                 if (!~(map_addr[i]))
681                         continue;
682                 index = ffz(map_addr[i]);
683                 prev_val = sync_test_and_set_bit(index, &map_addr[i]);
684                 if (prev_val)
685                         continue;
686                 if ((index + (i * BITS_PER_LONG)) >= section_cnt)
687                         break;
688                 ret_val = (index + (i * BITS_PER_LONG));
689                 break;
690         }
691         return ret_val;
692 }
693
694 static u32 netvsc_copy_to_send_buf(struct netvsc_device *net_device,
695                                    unsigned int section_index,
696                                    u32 pend_size,
697                                    struct hv_netvsc_packet *packet)
698 {
699         char *start = net_device->send_buf;
700         char *dest = start + (section_index * net_device->send_section_size)
701                      + pend_size;
702         int i;
703         u32 msg_size = 0;
704         u32 padding = 0;
705         u32 remain = packet->total_data_buflen % net_device->pkt_align;
706
707         /* Add padding */
708         if (packet->is_data_pkt && packet->xmit_more && remain) {
709                 padding = net_device->pkt_align - remain;
710                 packet->rndis_msg->msg_len += padding;
711                 packet->total_data_buflen += padding;
712         }
713
714         for (i = 0; i < packet->page_buf_cnt; i++) {
715                 char *src = phys_to_virt(packet->page_buf[i].pfn << PAGE_SHIFT);
716                 u32 offset = packet->page_buf[i].offset;
717                 u32 len = packet->page_buf[i].len;
718
719                 memcpy(dest, (src + offset), len);
720                 msg_size += len;
721                 dest += len;
722         }
723
724         if (padding) {
725                 memset(dest, 0, padding);
726                 msg_size += padding;
727         }
728
729         return msg_size;
730 }
731
732 static inline int netvsc_send_pkt(
733         struct hv_netvsc_packet *packet,
734         struct netvsc_device *net_device)
735 {
736         struct nvsp_message nvmsg;
737         struct vmbus_channel *out_channel = packet->channel;
738         u16 q_idx = packet->q_idx;
739         struct net_device *ndev = net_device->ndev;
740         u64 req_id;
741         int ret;
742
743         nvmsg.hdr.msg_type = NVSP_MSG1_TYPE_SEND_RNDIS_PKT;
744         if (packet->is_data_pkt) {
745                 /* 0 is RMC_DATA; */
746                 nvmsg.msg.v1_msg.send_rndis_pkt.channel_type = 0;
747         } else {
748                 /* 1 is RMC_CONTROL; */
749                 nvmsg.msg.v1_msg.send_rndis_pkt.channel_type = 1;
750         }
751
752         nvmsg.msg.v1_msg.send_rndis_pkt.send_buf_section_index =
753                 packet->send_buf_index;
754         if (packet->send_buf_index == NETVSC_INVALID_INDEX)
755                 nvmsg.msg.v1_msg.send_rndis_pkt.send_buf_section_size = 0;
756         else
757                 nvmsg.msg.v1_msg.send_rndis_pkt.send_buf_section_size =
758                         packet->total_data_buflen;
759
760         if (packet->send_completion)
761                 req_id = (ulong)packet;
762         else
763                 req_id = 0;
764
765         if (out_channel->rescind)
766                 return -ENODEV;
767
768         if (packet->page_buf_cnt) {
769                 ret = vmbus_sendpacket_pagebuffer(out_channel,
770                                                   packet->page_buf,
771                                                   packet->page_buf_cnt,
772                                                   &nvmsg,
773                                                   sizeof(struct nvsp_message),
774                                                   req_id);
775         } else {
776                 ret = vmbus_sendpacket(
777                                 out_channel, &nvmsg,
778                                 sizeof(struct nvsp_message),
779                                 req_id,
780                                 VM_PKT_DATA_INBAND,
781                                 VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED);
782         }
783
784         if (ret == 0) {
785                 atomic_inc(&net_device->num_outstanding_sends);
786                 atomic_inc(&net_device->queue_sends[q_idx]);
787
788                 if (hv_ringbuf_avail_percent(&out_channel->outbound) <
789                         RING_AVAIL_PERCENT_LOWATER) {
790                         netif_tx_stop_queue(netdev_get_tx_queue(
791                                             ndev, q_idx));
792
793                         if (atomic_read(&net_device->
794                                 queue_sends[q_idx]) < 1)
795                                 netif_tx_wake_queue(netdev_get_tx_queue(
796                                                     ndev, q_idx));
797                 }
798         } else if (ret == -EAGAIN) {
799                 netif_tx_stop_queue(netdev_get_tx_queue(
800                                     ndev, q_idx));
801                 if (atomic_read(&net_device->queue_sends[q_idx]) < 1) {
802                         netif_tx_wake_queue(netdev_get_tx_queue(
803                                             ndev, q_idx));
804                         ret = -ENOSPC;
805                 }
806         } else {
807                 netdev_err(ndev, "Unable to send packet %p ret %d\n",
808                            packet, ret);
809         }
810
811         return ret;
812 }
813
814 int netvsc_send(struct hv_device *device,
815                 struct hv_netvsc_packet *packet)
816 {
817         struct netvsc_device *net_device;
818         int ret = 0, m_ret = 0;
819         struct vmbus_channel *out_channel;
820         u16 q_idx = packet->q_idx;
821         u32 pktlen = packet->total_data_buflen, msd_len = 0;
822         unsigned int section_index = NETVSC_INVALID_INDEX;
823         struct sk_buff *skb = NULL;
824         unsigned long flag;
825         struct multi_send_data *msdp;
826         struct hv_netvsc_packet *msd_send = NULL, *cur_send = NULL;
827
828         net_device = get_outbound_net_device(device);
829         if (!net_device)
830                 return -ENODEV;
831
832         out_channel = net_device->chn_table[q_idx];
833         if (!out_channel) {
834                 out_channel = device->channel;
835                 q_idx = 0;
836                 packet->q_idx = 0;
837         }
838         packet->channel = out_channel;
839         packet->send_buf_index = NETVSC_INVALID_INDEX;
840
841         msdp = &net_device->msd[q_idx];
842
843         /* batch packets in send buffer if possible */
844         spin_lock_irqsave(&msdp->lock, flag);
845         if (msdp->pkt)
846                 msd_len = msdp->pkt->total_data_buflen;
847
848         if (packet->is_data_pkt && msd_len > 0 &&
849             msdp->count < net_device->max_pkt &&
850             msd_len + pktlen + net_device->pkt_align <
851             net_device->send_section_size) {
852                 section_index = msdp->pkt->send_buf_index;
853
854         } else if (packet->is_data_pkt && pktlen + net_device->pkt_align <
855                    net_device->send_section_size) {
856                 section_index = netvsc_get_next_send_section(net_device);
857                 if (section_index != NETVSC_INVALID_INDEX) {
858                                 msd_send = msdp->pkt;
859                                 msdp->pkt = NULL;
860                                 msdp->count = 0;
861                                 msd_len = 0;
862                 }
863         }
864
865         if (section_index != NETVSC_INVALID_INDEX) {
866                 netvsc_copy_to_send_buf(net_device,
867                                         section_index, msd_len,
868                                         packet);
869                 if (!packet->part_of_skb) {
870                         skb = (struct sk_buff *)
871                                 (unsigned long)
872                                 packet->send_completion_tid;
873
874                         packet->send_completion_tid = 0;
875                 }
876
877                 packet->page_buf_cnt = 0;
878                 packet->send_buf_index = section_index;
879                 packet->total_data_buflen += msd_len;
880
881                 kfree(msdp->pkt);
882                 if (packet->xmit_more) {
883                         msdp->pkt = packet;
884                         msdp->count++;
885                 } else {
886                         cur_send = packet;
887                         msdp->pkt = NULL;
888                         msdp->count = 0;
889                 }
890         } else {
891                 msd_send = msdp->pkt;
892                 msdp->pkt = NULL;
893                 msdp->count = 0;
894                 cur_send = packet;
895         }
896
897         spin_unlock_irqrestore(&msdp->lock, flag);
898
899         if (msd_send) {
900                 m_ret = netvsc_send_pkt(msd_send, net_device);
901
902                 if (m_ret != 0) {
903                         netvsc_free_send_slot(net_device,
904                                               msd_send->send_buf_index);
905                         kfree(msd_send);
906                 }
907         }
908
909         if (cur_send)
910                 ret = netvsc_send_pkt(cur_send, net_device);
911
912         if (ret != 0) {
913                 if (section_index != NETVSC_INVALID_INDEX)
914                         netvsc_free_send_slot(net_device, section_index);
915         } else if (skb) {
916                 dev_kfree_skb_any(skb);
917         }
918
919         return ret;
920 }
921
922 static void netvsc_send_recv_completion(struct hv_device *device,
923                                         struct vmbus_channel *channel,
924                                         struct netvsc_device *net_device,
925                                         u64 transaction_id, u32 status)
926 {
927         struct nvsp_message recvcompMessage;
928         int retries = 0;
929         int ret;
930         struct net_device *ndev;
931
932         ndev = net_device->ndev;
933
934         recvcompMessage.hdr.msg_type =
935                                 NVSP_MSG1_TYPE_SEND_RNDIS_PKT_COMPLETE;
936
937         recvcompMessage.msg.v1_msg.send_rndis_pkt_complete.status = status;
938
939 retry_send_cmplt:
940         /* Send the completion */
941         ret = vmbus_sendpacket(channel, &recvcompMessage,
942                                sizeof(struct nvsp_message), transaction_id,
943                                VM_PKT_COMP, 0);
944         if (ret == 0) {
945                 /* success */
946                 /* no-op */
947         } else if (ret == -EAGAIN) {
948                 /* no more room...wait a bit and attempt to retry 3 times */
949                 retries++;
950                 netdev_err(ndev, "unable to send receive completion pkt"
951                         " (tid %llx)...retrying %d\n", transaction_id, retries);
952
953                 if (retries < 4) {
954                         udelay(100);
955                         goto retry_send_cmplt;
956                 } else {
957                         netdev_err(ndev, "unable to send receive "
958                                 "completion pkt (tid %llx)...give up retrying\n",
959                                 transaction_id);
960                 }
961         } else {
962                 netdev_err(ndev, "unable to send receive "
963                         "completion pkt - %llx\n", transaction_id);
964         }
965 }
966
967 static void netvsc_receive(struct netvsc_device *net_device,
968                         struct vmbus_channel *channel,
969                         struct hv_device *device,
970                         struct vmpacket_descriptor *packet)
971 {
972         struct vmtransfer_page_packet_header *vmxferpage_packet;
973         struct nvsp_message *nvsp_packet;
974         struct hv_netvsc_packet nv_pkt;
975         struct hv_netvsc_packet *netvsc_packet = &nv_pkt;
976         u32 status = NVSP_STAT_SUCCESS;
977         int i;
978         int count = 0;
979         struct net_device *ndev;
980
981         ndev = net_device->ndev;
982
983         /*
984          * All inbound packets other than send completion should be xfer page
985          * packet
986          */
987         if (packet->type != VM_PKT_DATA_USING_XFER_PAGES) {
988                 netdev_err(ndev, "Unknown packet type received - %d\n",
989                            packet->type);
990                 return;
991         }
992
993         nvsp_packet = (struct nvsp_message *)((unsigned long)packet +
994                         (packet->offset8 << 3));
995
996         /* Make sure this is a valid nvsp packet */
997         if (nvsp_packet->hdr.msg_type !=
998             NVSP_MSG1_TYPE_SEND_RNDIS_PKT) {
999                 netdev_err(ndev, "Unknown nvsp packet type received-"
1000                         " %d\n", nvsp_packet->hdr.msg_type);
1001                 return;
1002         }
1003
1004         vmxferpage_packet = (struct vmtransfer_page_packet_header *)packet;
1005
1006         if (vmxferpage_packet->xfer_pageset_id != NETVSC_RECEIVE_BUFFER_ID) {
1007                 netdev_err(ndev, "Invalid xfer page set id - "
1008                            "expecting %x got %x\n", NETVSC_RECEIVE_BUFFER_ID,
1009                            vmxferpage_packet->xfer_pageset_id);
1010                 return;
1011         }
1012
1013         count = vmxferpage_packet->range_cnt;
1014         netvsc_packet->device = device;
1015         netvsc_packet->channel = channel;
1016
1017         /* Each range represents 1 RNDIS pkt that contains 1 ethernet frame */
1018         for (i = 0; i < count; i++) {
1019                 /* Initialize the netvsc packet */
1020                 netvsc_packet->status = NVSP_STAT_SUCCESS;
1021                 netvsc_packet->data = (void *)((unsigned long)net_device->
1022                         recv_buf + vmxferpage_packet->ranges[i].byte_offset);
1023                 netvsc_packet->total_data_buflen =
1024                                         vmxferpage_packet->ranges[i].byte_count;
1025
1026                 /* Pass it to the upper layer */
1027                 rndis_filter_receive(device, netvsc_packet);
1028
1029                 if (netvsc_packet->status != NVSP_STAT_SUCCESS)
1030                         status = NVSP_STAT_FAIL;
1031         }
1032
1033         netvsc_send_recv_completion(device, channel, net_device,
1034                                     vmxferpage_packet->d.trans_id, status);
1035 }
1036
1037
1038 static void netvsc_send_table(struct hv_device *hdev,
1039                               struct vmpacket_descriptor *vmpkt)
1040 {
1041         struct netvsc_device *nvscdev;
1042         struct net_device *ndev;
1043         struct nvsp_message *nvmsg;
1044         int i;
1045         u32 count, *tab;
1046
1047         nvscdev = get_outbound_net_device(hdev);
1048         if (!nvscdev)
1049                 return;
1050         ndev = nvscdev->ndev;
1051
1052         nvmsg = (struct nvsp_message *)((unsigned long)vmpkt +
1053                                         (vmpkt->offset8 << 3));
1054
1055         if (nvmsg->hdr.msg_type != NVSP_MSG5_TYPE_SEND_INDIRECTION_TABLE)
1056                 return;
1057
1058         count = nvmsg->msg.v5_msg.send_table.count;
1059         if (count != VRSS_SEND_TAB_SIZE) {
1060                 netdev_err(ndev, "Received wrong send-table size:%u\n", count);
1061                 return;
1062         }
1063
1064         tab = (u32 *)((unsigned long)&nvmsg->msg.v5_msg.send_table +
1065                       nvmsg->msg.v5_msg.send_table.offset);
1066
1067         for (i = 0; i < count; i++)
1068                 nvscdev->send_table[i] = tab[i];
1069 }
1070
1071 void netvsc_channel_cb(void *context)
1072 {
1073         int ret;
1074         struct vmbus_channel *channel = (struct vmbus_channel *)context;
1075         struct hv_device *device;
1076         struct netvsc_device *net_device;
1077         u32 bytes_recvd;
1078         u64 request_id;
1079         struct vmpacket_descriptor *desc;
1080         unsigned char *buffer;
1081         int bufferlen = NETVSC_PACKET_SIZE;
1082         struct net_device *ndev;
1083
1084         if (channel->primary_channel != NULL)
1085                 device = channel->primary_channel->device_obj;
1086         else
1087                 device = channel->device_obj;
1088
1089         net_device = get_inbound_net_device(device);
1090         if (!net_device)
1091                 return;
1092         ndev = net_device->ndev;
1093         buffer = get_per_channel_state(channel);
1094
1095         do {
1096                 ret = vmbus_recvpacket_raw(channel, buffer, bufferlen,
1097                                            &bytes_recvd, &request_id);
1098                 if (ret == 0) {
1099                         if (bytes_recvd > 0) {
1100                                 desc = (struct vmpacket_descriptor *)buffer;
1101                                 switch (desc->type) {
1102                                 case VM_PKT_COMP:
1103                                         netvsc_send_completion(net_device,
1104                                                                 device, desc);
1105                                         break;
1106
1107                                 case VM_PKT_DATA_USING_XFER_PAGES:
1108                                         netvsc_receive(net_device, channel,
1109                                                        device, desc);
1110                                         break;
1111
1112                                 case VM_PKT_DATA_INBAND:
1113                                         netvsc_send_table(device, desc);
1114                                         break;
1115
1116                                 default:
1117                                         netdev_err(ndev,
1118                                                    "unhandled packet type %d, "
1119                                                    "tid %llx len %d\n",
1120                                                    desc->type, request_id,
1121                                                    bytes_recvd);
1122                                         break;
1123                                 }
1124
1125                         } else {
1126                                 /*
1127                                  * We are done for this pass.
1128                                  */
1129                                 break;
1130                         }
1131
1132                 } else if (ret == -ENOBUFS) {
1133                         if (bufferlen > NETVSC_PACKET_SIZE)
1134                                 kfree(buffer);
1135                         /* Handle large packet */
1136                         buffer = kmalloc(bytes_recvd, GFP_ATOMIC);
1137                         if (buffer == NULL) {
1138                                 /* Try again next time around */
1139                                 netdev_err(ndev,
1140                                            "unable to allocate buffer of size "
1141                                            "(%d)!!\n", bytes_recvd);
1142                                 break;
1143                         }
1144
1145                         bufferlen = bytes_recvd;
1146                 }
1147         } while (1);
1148
1149         if (bufferlen > NETVSC_PACKET_SIZE)
1150                 kfree(buffer);
1151         return;
1152 }
1153
1154 /*
1155  * netvsc_device_add - Callback when the device belonging to this
1156  * driver is added
1157  */
1158 int netvsc_device_add(struct hv_device *device, void *additional_info)
1159 {
1160         int ret = 0;
1161         int ring_size =
1162         ((struct netvsc_device_info *)additional_info)->ring_size;
1163         struct netvsc_device *net_device;
1164         struct net_device *ndev;
1165
1166         net_device = alloc_net_device(device);
1167         if (!net_device)
1168                 return -ENOMEM;
1169
1170         net_device->ring_size = ring_size;
1171
1172         /*
1173          * Coming into this function, struct net_device * is
1174          * registered as the driver private data.
1175          * In alloc_net_device(), we register struct netvsc_device *
1176          * as the driver private data and stash away struct net_device *
1177          * in struct netvsc_device *.
1178          */
1179         ndev = net_device->ndev;
1180
1181         /* Initialize the NetVSC channel extension */
1182         init_completion(&net_device->channel_init_wait);
1183
1184         set_per_channel_state(device->channel, net_device->cb_buffer);
1185
1186         /* Open the channel */
1187         ret = vmbus_open(device->channel, ring_size * PAGE_SIZE,
1188                          ring_size * PAGE_SIZE, NULL, 0,
1189                          netvsc_channel_cb, device->channel);
1190
1191         if (ret != 0) {
1192                 netdev_err(ndev, "unable to open channel: %d\n", ret);
1193                 goto cleanup;
1194         }
1195
1196         /* Channel is opened */
1197         pr_info("hv_netvsc channel opened successfully\n");
1198
1199         net_device->chn_table[0] = device->channel;
1200
1201         /* Connect with the NetVsp */
1202         ret = netvsc_connect_vsp(device);
1203         if (ret != 0) {
1204                 netdev_err(ndev,
1205                         "unable to connect to NetVSP - %d\n", ret);
1206                 goto close;
1207         }
1208
1209         return ret;
1210
1211 close:
1212         /* Now, we can close the channel safely */
1213         vmbus_close(device->channel);
1214
1215 cleanup:
1216         free_netvsc_device(net_device);
1217
1218         return ret;
1219 }