]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - drivers/net/hyperv/netvsc.c
ea091bc5ff09dad379fde915fbb7ec073c613aa1
[karo-tx-linux.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         u32 page_count = packet->cp_partial ? packet->rmsg_pgcnt :
707                 packet->page_buf_cnt;
708
709         /* Add padding */
710         if (packet->is_data_pkt && packet->xmit_more && remain &&
711             !packet->cp_partial) {
712                 padding = net_device->pkt_align - remain;
713                 packet->rndis_msg->msg_len += padding;
714                 packet->total_data_buflen += padding;
715         }
716
717         for (i = 0; i < page_count; i++) {
718                 char *src = phys_to_virt(packet->page_buf[i].pfn << PAGE_SHIFT);
719                 u32 offset = packet->page_buf[i].offset;
720                 u32 len = packet->page_buf[i].len;
721
722                 memcpy(dest, (src + offset), len);
723                 msg_size += len;
724                 dest += len;
725         }
726
727         if (padding) {
728                 memset(dest, 0, padding);
729                 msg_size += padding;
730         }
731
732         return msg_size;
733 }
734
735 static inline int netvsc_send_pkt(
736         struct hv_netvsc_packet *packet,
737         struct netvsc_device *net_device)
738 {
739         struct nvsp_message nvmsg;
740         struct vmbus_channel *out_channel = packet->channel;
741         u16 q_idx = packet->q_idx;
742         struct net_device *ndev = net_device->ndev;
743         u64 req_id;
744         int ret;
745         struct hv_page_buffer *pgbuf;
746
747         nvmsg.hdr.msg_type = NVSP_MSG1_TYPE_SEND_RNDIS_PKT;
748         if (packet->is_data_pkt) {
749                 /* 0 is RMC_DATA; */
750                 nvmsg.msg.v1_msg.send_rndis_pkt.channel_type = 0;
751         } else {
752                 /* 1 is RMC_CONTROL; */
753                 nvmsg.msg.v1_msg.send_rndis_pkt.channel_type = 1;
754         }
755
756         nvmsg.msg.v1_msg.send_rndis_pkt.send_buf_section_index =
757                 packet->send_buf_index;
758         if (packet->send_buf_index == NETVSC_INVALID_INDEX)
759                 nvmsg.msg.v1_msg.send_rndis_pkt.send_buf_section_size = 0;
760         else
761                 nvmsg.msg.v1_msg.send_rndis_pkt.send_buf_section_size =
762                         packet->total_data_buflen;
763
764         if (packet->send_completion)
765                 req_id = (ulong)packet;
766         else
767                 req_id = 0;
768
769         if (out_channel->rescind)
770                 return -ENODEV;
771
772         if (packet->page_buf_cnt) {
773                 pgbuf = packet->cp_partial ? packet->page_buf +
774                         packet->rmsg_pgcnt : packet->page_buf;
775                 ret = vmbus_sendpacket_pagebuffer(out_channel,
776                                                   pgbuf,
777                                                   packet->page_buf_cnt,
778                                                   &nvmsg,
779                                                   sizeof(struct nvsp_message),
780                                                   req_id);
781         } else {
782                 ret = vmbus_sendpacket(
783                                 out_channel, &nvmsg,
784                                 sizeof(struct nvsp_message),
785                                 req_id,
786                                 VM_PKT_DATA_INBAND,
787                                 VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED);
788         }
789
790         if (ret == 0) {
791                 atomic_inc(&net_device->num_outstanding_sends);
792                 atomic_inc(&net_device->queue_sends[q_idx]);
793
794                 if (hv_ringbuf_avail_percent(&out_channel->outbound) <
795                         RING_AVAIL_PERCENT_LOWATER) {
796                         netif_tx_stop_queue(netdev_get_tx_queue(
797                                             ndev, q_idx));
798
799                         if (atomic_read(&net_device->
800                                 queue_sends[q_idx]) < 1)
801                                 netif_tx_wake_queue(netdev_get_tx_queue(
802                                                     ndev, q_idx));
803                 }
804         } else if (ret == -EAGAIN) {
805                 netif_tx_stop_queue(netdev_get_tx_queue(
806                                     ndev, q_idx));
807                 if (atomic_read(&net_device->queue_sends[q_idx]) < 1) {
808                         netif_tx_wake_queue(netdev_get_tx_queue(
809                                             ndev, q_idx));
810                         ret = -ENOSPC;
811                 }
812         } else {
813                 netdev_err(ndev, "Unable to send packet %p ret %d\n",
814                            packet, ret);
815         }
816
817         return ret;
818 }
819
820 int netvsc_send(struct hv_device *device,
821                 struct hv_netvsc_packet *packet)
822 {
823         struct netvsc_device *net_device;
824         int ret = 0, m_ret = 0;
825         struct vmbus_channel *out_channel;
826         u16 q_idx = packet->q_idx;
827         u32 pktlen = packet->total_data_buflen, msd_len = 0;
828         unsigned int section_index = NETVSC_INVALID_INDEX;
829         unsigned long flag;
830         struct multi_send_data *msdp;
831         struct hv_netvsc_packet *msd_send = NULL, *cur_send = NULL;
832         bool try_batch;
833
834         net_device = get_outbound_net_device(device);
835         if (!net_device)
836                 return -ENODEV;
837
838         out_channel = net_device->chn_table[q_idx];
839         if (!out_channel) {
840                 out_channel = device->channel;
841                 q_idx = 0;
842                 packet->q_idx = 0;
843         }
844         packet->channel = out_channel;
845         packet->send_buf_index = NETVSC_INVALID_INDEX;
846         packet->cp_partial = false;
847
848         msdp = &net_device->msd[q_idx];
849
850         /* batch packets in send buffer if possible */
851         spin_lock_irqsave(&msdp->lock, flag);
852         if (msdp->pkt)
853                 msd_len = msdp->pkt->total_data_buflen;
854
855         try_batch = packet->is_data_pkt && msd_len > 0 && msdp->count <
856                     net_device->max_pkt;
857
858         if (try_batch && msd_len + pktlen + net_device->pkt_align <
859             net_device->send_section_size) {
860                 section_index = msdp->pkt->send_buf_index;
861
862         } else if (try_batch && msd_len + packet->rmsg_size <
863                    net_device->send_section_size) {
864                 section_index = msdp->pkt->send_buf_index;
865                 packet->cp_partial = true;
866
867         } else if (packet->is_data_pkt && pktlen + net_device->pkt_align <
868                    net_device->send_section_size) {
869                 section_index = netvsc_get_next_send_section(net_device);
870                 if (section_index != NETVSC_INVALID_INDEX) {
871                                 msd_send = msdp->pkt;
872                                 msdp->pkt = NULL;
873                                 msdp->count = 0;
874                                 msd_len = 0;
875                 }
876         }
877
878         if (section_index != NETVSC_INVALID_INDEX) {
879                 netvsc_copy_to_send_buf(net_device,
880                                         section_index, msd_len,
881                                         packet);
882
883                 packet->send_buf_index = section_index;
884
885                 if (packet->cp_partial) {
886                         packet->page_buf_cnt -= packet->rmsg_pgcnt;
887                         packet->total_data_buflen = msd_len + packet->rmsg_size;
888                 } else {
889                         packet->page_buf_cnt = 0;
890                         packet->total_data_buflen += msd_len;
891                 }
892
893                 if (msdp->pkt)
894                         netvsc_xmit_completion(msdp->pkt);
895
896                 if (packet->xmit_more && !packet->cp_partial) {
897                         msdp->pkt = packet;
898                         msdp->count++;
899                 } else {
900                         cur_send = packet;
901                         msdp->pkt = NULL;
902                         msdp->count = 0;
903                 }
904         } else {
905                 msd_send = msdp->pkt;
906                 msdp->pkt = NULL;
907                 msdp->count = 0;
908                 cur_send = packet;
909         }
910
911         spin_unlock_irqrestore(&msdp->lock, flag);
912
913         if (msd_send) {
914                 m_ret = netvsc_send_pkt(msd_send, net_device);
915
916                 if (m_ret != 0) {
917                         netvsc_free_send_slot(net_device,
918                                               msd_send->send_buf_index);
919                         netvsc_xmit_completion(msd_send);
920                 }
921         }
922
923         if (cur_send)
924                 ret = netvsc_send_pkt(cur_send, net_device);
925
926         if (ret != 0 && section_index != NETVSC_INVALID_INDEX)
927                 netvsc_free_send_slot(net_device, section_index);
928
929         return ret;
930 }
931
932 static void netvsc_send_recv_completion(struct hv_device *device,
933                                         struct vmbus_channel *channel,
934                                         struct netvsc_device *net_device,
935                                         u64 transaction_id, u32 status)
936 {
937         struct nvsp_message recvcompMessage;
938         int retries = 0;
939         int ret;
940         struct net_device *ndev;
941
942         ndev = net_device->ndev;
943
944         recvcompMessage.hdr.msg_type =
945                                 NVSP_MSG1_TYPE_SEND_RNDIS_PKT_COMPLETE;
946
947         recvcompMessage.msg.v1_msg.send_rndis_pkt_complete.status = status;
948
949 retry_send_cmplt:
950         /* Send the completion */
951         ret = vmbus_sendpacket(channel, &recvcompMessage,
952                                sizeof(struct nvsp_message), transaction_id,
953                                VM_PKT_COMP, 0);
954         if (ret == 0) {
955                 /* success */
956                 /* no-op */
957         } else if (ret == -EAGAIN) {
958                 /* no more room...wait a bit and attempt to retry 3 times */
959                 retries++;
960                 netdev_err(ndev, "unable to send receive completion pkt"
961                         " (tid %llx)...retrying %d\n", transaction_id, retries);
962
963                 if (retries < 4) {
964                         udelay(100);
965                         goto retry_send_cmplt;
966                 } else {
967                         netdev_err(ndev, "unable to send receive "
968                                 "completion pkt (tid %llx)...give up retrying\n",
969                                 transaction_id);
970                 }
971         } else {
972                 netdev_err(ndev, "unable to send receive "
973                         "completion pkt - %llx\n", transaction_id);
974         }
975 }
976
977 static void netvsc_receive(struct netvsc_device *net_device,
978                         struct vmbus_channel *channel,
979                         struct hv_device *device,
980                         struct vmpacket_descriptor *packet)
981 {
982         struct vmtransfer_page_packet_header *vmxferpage_packet;
983         struct nvsp_message *nvsp_packet;
984         struct hv_netvsc_packet nv_pkt;
985         struct hv_netvsc_packet *netvsc_packet = &nv_pkt;
986         u32 status = NVSP_STAT_SUCCESS;
987         int i;
988         int count = 0;
989         struct net_device *ndev;
990
991         ndev = net_device->ndev;
992
993         /*
994          * All inbound packets other than send completion should be xfer page
995          * packet
996          */
997         if (packet->type != VM_PKT_DATA_USING_XFER_PAGES) {
998                 netdev_err(ndev, "Unknown packet type received - %d\n",
999                            packet->type);
1000                 return;
1001         }
1002
1003         nvsp_packet = (struct nvsp_message *)((unsigned long)packet +
1004                         (packet->offset8 << 3));
1005
1006         /* Make sure this is a valid nvsp packet */
1007         if (nvsp_packet->hdr.msg_type !=
1008             NVSP_MSG1_TYPE_SEND_RNDIS_PKT) {
1009                 netdev_err(ndev, "Unknown nvsp packet type received-"
1010                         " %d\n", nvsp_packet->hdr.msg_type);
1011                 return;
1012         }
1013
1014         vmxferpage_packet = (struct vmtransfer_page_packet_header *)packet;
1015
1016         if (vmxferpage_packet->xfer_pageset_id != NETVSC_RECEIVE_BUFFER_ID) {
1017                 netdev_err(ndev, "Invalid xfer page set id - "
1018                            "expecting %x got %x\n", NETVSC_RECEIVE_BUFFER_ID,
1019                            vmxferpage_packet->xfer_pageset_id);
1020                 return;
1021         }
1022
1023         count = vmxferpage_packet->range_cnt;
1024         netvsc_packet->channel = channel;
1025
1026         /* Each range represents 1 RNDIS pkt that contains 1 ethernet frame */
1027         for (i = 0; i < count; i++) {
1028                 /* Initialize the netvsc packet */
1029                 netvsc_packet->status = NVSP_STAT_SUCCESS;
1030                 netvsc_packet->data = (void *)((unsigned long)net_device->
1031                         recv_buf + vmxferpage_packet->ranges[i].byte_offset);
1032                 netvsc_packet->total_data_buflen =
1033                                         vmxferpage_packet->ranges[i].byte_count;
1034
1035                 /* Pass it to the upper layer */
1036                 rndis_filter_receive(device, netvsc_packet);
1037
1038                 if (netvsc_packet->status != NVSP_STAT_SUCCESS)
1039                         status = NVSP_STAT_FAIL;
1040         }
1041
1042         netvsc_send_recv_completion(device, channel, net_device,
1043                                     vmxferpage_packet->d.trans_id, status);
1044 }
1045
1046
1047 static void netvsc_send_table(struct hv_device *hdev,
1048                               struct vmpacket_descriptor *vmpkt)
1049 {
1050         struct netvsc_device *nvscdev;
1051         struct net_device *ndev;
1052         struct nvsp_message *nvmsg;
1053         int i;
1054         u32 count, *tab;
1055
1056         nvscdev = get_outbound_net_device(hdev);
1057         if (!nvscdev)
1058                 return;
1059         ndev = nvscdev->ndev;
1060
1061         nvmsg = (struct nvsp_message *)((unsigned long)vmpkt +
1062                                         (vmpkt->offset8 << 3));
1063
1064         if (nvmsg->hdr.msg_type != NVSP_MSG5_TYPE_SEND_INDIRECTION_TABLE)
1065                 return;
1066
1067         count = nvmsg->msg.v5_msg.send_table.count;
1068         if (count != VRSS_SEND_TAB_SIZE) {
1069                 netdev_err(ndev, "Received wrong send-table size:%u\n", count);
1070                 return;
1071         }
1072
1073         tab = (u32 *)((unsigned long)&nvmsg->msg.v5_msg.send_table +
1074                       nvmsg->msg.v5_msg.send_table.offset);
1075
1076         for (i = 0; i < count; i++)
1077                 nvscdev->send_table[i] = tab[i];
1078 }
1079
1080 void netvsc_channel_cb(void *context)
1081 {
1082         int ret;
1083         struct vmbus_channel *channel = (struct vmbus_channel *)context;
1084         struct hv_device *device;
1085         struct netvsc_device *net_device;
1086         u32 bytes_recvd;
1087         u64 request_id;
1088         struct vmpacket_descriptor *desc;
1089         unsigned char *buffer;
1090         int bufferlen = NETVSC_PACKET_SIZE;
1091         struct net_device *ndev;
1092
1093         if (channel->primary_channel != NULL)
1094                 device = channel->primary_channel->device_obj;
1095         else
1096                 device = channel->device_obj;
1097
1098         net_device = get_inbound_net_device(device);
1099         if (!net_device)
1100                 return;
1101         ndev = net_device->ndev;
1102         buffer = get_per_channel_state(channel);
1103
1104         do {
1105                 ret = vmbus_recvpacket_raw(channel, buffer, bufferlen,
1106                                            &bytes_recvd, &request_id);
1107                 if (ret == 0) {
1108                         if (bytes_recvd > 0) {
1109                                 desc = (struct vmpacket_descriptor *)buffer;
1110                                 switch (desc->type) {
1111                                 case VM_PKT_COMP:
1112                                         netvsc_send_completion(net_device,
1113                                                                 device, desc);
1114                                         break;
1115
1116                                 case VM_PKT_DATA_USING_XFER_PAGES:
1117                                         netvsc_receive(net_device, channel,
1118                                                        device, desc);
1119                                         break;
1120
1121                                 case VM_PKT_DATA_INBAND:
1122                                         netvsc_send_table(device, desc);
1123                                         break;
1124
1125                                 default:
1126                                         netdev_err(ndev,
1127                                                    "unhandled packet type %d, "
1128                                                    "tid %llx len %d\n",
1129                                                    desc->type, request_id,
1130                                                    bytes_recvd);
1131                                         break;
1132                                 }
1133
1134                         } else {
1135                                 /*
1136                                  * We are done for this pass.
1137                                  */
1138                                 break;
1139                         }
1140
1141                 } else if (ret == -ENOBUFS) {
1142                         if (bufferlen > NETVSC_PACKET_SIZE)
1143                                 kfree(buffer);
1144                         /* Handle large packet */
1145                         buffer = kmalloc(bytes_recvd, GFP_ATOMIC);
1146                         if (buffer == NULL) {
1147                                 /* Try again next time around */
1148                                 netdev_err(ndev,
1149                                            "unable to allocate buffer of size "
1150                                            "(%d)!!\n", bytes_recvd);
1151                                 break;
1152                         }
1153
1154                         bufferlen = bytes_recvd;
1155                 }
1156         } while (1);
1157
1158         if (bufferlen > NETVSC_PACKET_SIZE)
1159                 kfree(buffer);
1160         return;
1161 }
1162
1163 /*
1164  * netvsc_device_add - Callback when the device belonging to this
1165  * driver is added
1166  */
1167 int netvsc_device_add(struct hv_device *device, void *additional_info)
1168 {
1169         int ret = 0;
1170         int ring_size =
1171         ((struct netvsc_device_info *)additional_info)->ring_size;
1172         struct netvsc_device *net_device;
1173         struct net_device *ndev;
1174
1175         net_device = alloc_net_device(device);
1176         if (!net_device)
1177                 return -ENOMEM;
1178
1179         net_device->ring_size = ring_size;
1180
1181         /*
1182          * Coming into this function, struct net_device * is
1183          * registered as the driver private data.
1184          * In alloc_net_device(), we register struct netvsc_device *
1185          * as the driver private data and stash away struct net_device *
1186          * in struct netvsc_device *.
1187          */
1188         ndev = net_device->ndev;
1189
1190         /* Add netvsc_device context to netvsc_device */
1191         net_device->nd_ctx = netdev_priv(ndev);
1192
1193         /* Initialize the NetVSC channel extension */
1194         init_completion(&net_device->channel_init_wait);
1195
1196         set_per_channel_state(device->channel, net_device->cb_buffer);
1197
1198         /* Open the channel */
1199         ret = vmbus_open(device->channel, ring_size * PAGE_SIZE,
1200                          ring_size * PAGE_SIZE, NULL, 0,
1201                          netvsc_channel_cb, device->channel);
1202
1203         if (ret != 0) {
1204                 netdev_err(ndev, "unable to open channel: %d\n", ret);
1205                 goto cleanup;
1206         }
1207
1208         /* Channel is opened */
1209         pr_info("hv_netvsc channel opened successfully\n");
1210
1211         net_device->chn_table[0] = device->channel;
1212
1213         /* Connect with the NetVsp */
1214         ret = netvsc_connect_vsp(device);
1215         if (ret != 0) {
1216                 netdev_err(ndev,
1217                         "unable to connect to NetVSP - %d\n", ret);
1218                 goto close;
1219         }
1220
1221         return ret;
1222
1223 close:
1224         /* Now, we can close the channel safely */
1225         vmbus_close(device->channel);
1226
1227 cleanup:
1228         free_netvsc_device(net_device);
1229
1230         return ret;
1231 }