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