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 <linux/vmalloc.h> 32 #include <asm/sync_bitops.h> 33 34 #include "hyperv_net.h" 35 36 /* 37 * Switch the data path from the synthetic interface to the VF 38 * interface. 39 */ 40 void netvsc_switch_datapath(struct net_device *ndev, bool vf) 41 { 42 struct net_device_context *net_device_ctx = netdev_priv(ndev); 43 struct hv_device *dev = net_device_ctx->device_ctx; 44 struct netvsc_device *nv_dev = net_device_ctx->nvdev; 45 struct nvsp_message *init_pkt = &nv_dev->channel_init_pkt; 46 47 memset(init_pkt, 0, sizeof(struct nvsp_message)); 48 init_pkt->hdr.msg_type = NVSP_MSG4_TYPE_SWITCH_DATA_PATH; 49 if (vf) 50 init_pkt->msg.v4_msg.active_dp.active_datapath = 51 NVSP_DATAPATH_VF; 52 else 53 init_pkt->msg.v4_msg.active_dp.active_datapath = 54 NVSP_DATAPATH_SYNTHETIC; 55 56 vmbus_sendpacket(dev->channel, init_pkt, 57 sizeof(struct nvsp_message), 58 (unsigned long)init_pkt, 59 VM_PKT_DATA_INBAND, 0); 60 } 61 62 static struct netvsc_device *alloc_net_device(void) 63 { 64 struct netvsc_device *net_device; 65 66 net_device = kzalloc(sizeof(struct netvsc_device), GFP_KERNEL); 67 if (!net_device) 68 return NULL; 69 70 net_device->chan_table[0].mrc.buf 71 = vzalloc(NETVSC_RECVSLOT_MAX * sizeof(struct recv_comp_data)); 72 73 init_waitqueue_head(&net_device->wait_drain); 74 net_device->destroy = false; 75 atomic_set(&net_device->open_cnt, 0); 76 net_device->max_pkt = RNDIS_MAX_PKT_DEFAULT; 77 net_device->pkt_align = RNDIS_PKT_ALIGN_DEFAULT; 78 init_completion(&net_device->channel_init_wait); 79 80 return net_device; 81 } 82 83 static void free_netvsc_device(struct netvsc_device *nvdev) 84 { 85 int i; 86 87 for (i = 0; i < VRSS_CHANNEL_MAX; i++) 88 vfree(nvdev->chan_table[i].mrc.buf); 89 90 kfree(nvdev); 91 } 92 93 94 static inline bool netvsc_channel_idle(const struct netvsc_device *net_device, 95 u16 q_idx) 96 { 97 const struct netvsc_channel *nvchan = &net_device->chan_table[q_idx]; 98 99 return atomic_read(&net_device->num_outstanding_recvs) == 0 && 100 atomic_read(&nvchan->queue_sends) == 0; 101 } 102 103 static struct netvsc_device *get_outbound_net_device(struct hv_device *device) 104 { 105 struct netvsc_device *net_device = hv_device_to_netvsc_device(device); 106 107 if (net_device && net_device->destroy) 108 net_device = NULL; 109 110 return net_device; 111 } 112 113 static void netvsc_destroy_buf(struct hv_device *device) 114 { 115 struct nvsp_message *revoke_packet; 116 struct net_device *ndev = hv_get_drvdata(device); 117 struct netvsc_device *net_device = net_device_to_netvsc_device(ndev); 118 int ret; 119 120 /* 121 * If we got a section count, it means we received a 122 * SendReceiveBufferComplete msg (ie sent 123 * NvspMessage1TypeSendReceiveBuffer msg) therefore, we need 124 * to send a revoke msg here 125 */ 126 if (net_device->recv_section_cnt) { 127 /* Send the revoke receive buffer */ 128 revoke_packet = &net_device->revoke_packet; 129 memset(revoke_packet, 0, sizeof(struct nvsp_message)); 130 131 revoke_packet->hdr.msg_type = 132 NVSP_MSG1_TYPE_REVOKE_RECV_BUF; 133 revoke_packet->msg.v1_msg. 134 revoke_recv_buf.id = NETVSC_RECEIVE_BUFFER_ID; 135 136 ret = vmbus_sendpacket(device->channel, 137 revoke_packet, 138 sizeof(struct nvsp_message), 139 (unsigned long)revoke_packet, 140 VM_PKT_DATA_INBAND, 0); 141 /* 142 * If we failed here, we might as well return and 143 * have a leak rather than continue and a bugchk 144 */ 145 if (ret != 0) { 146 netdev_err(ndev, "unable to send " 147 "revoke receive buffer to netvsp\n"); 148 return; 149 } 150 } 151 152 /* Teardown the gpadl on the vsp end */ 153 if (net_device->recv_buf_gpadl_handle) { 154 ret = vmbus_teardown_gpadl(device->channel, 155 net_device->recv_buf_gpadl_handle); 156 157 /* If we failed here, we might as well return and have a leak 158 * rather than continue and a bugchk 159 */ 160 if (ret != 0) { 161 netdev_err(ndev, 162 "unable to teardown receive buffer's gpadl\n"); 163 return; 164 } 165 net_device->recv_buf_gpadl_handle = 0; 166 } 167 168 if (net_device->recv_buf) { 169 /* Free up the receive buffer */ 170 vfree(net_device->recv_buf); 171 net_device->recv_buf = NULL; 172 } 173 174 if (net_device->recv_section) { 175 net_device->recv_section_cnt = 0; 176 kfree(net_device->recv_section); 177 net_device->recv_section = NULL; 178 } 179 180 /* Deal with the send buffer we may have setup. 181 * If we got a send section size, it means we received a 182 * NVSP_MSG1_TYPE_SEND_SEND_BUF_COMPLETE msg (ie sent 183 * NVSP_MSG1_TYPE_SEND_SEND_BUF msg) therefore, we need 184 * to send a revoke msg here 185 */ 186 if (net_device->send_section_size) { 187 /* Send the revoke receive buffer */ 188 revoke_packet = &net_device->revoke_packet; 189 memset(revoke_packet, 0, sizeof(struct nvsp_message)); 190 191 revoke_packet->hdr.msg_type = 192 NVSP_MSG1_TYPE_REVOKE_SEND_BUF; 193 revoke_packet->msg.v1_msg.revoke_send_buf.id = 194 NETVSC_SEND_BUFFER_ID; 195 196 ret = vmbus_sendpacket(device->channel, 197 revoke_packet, 198 sizeof(struct nvsp_message), 199 (unsigned long)revoke_packet, 200 VM_PKT_DATA_INBAND, 0); 201 /* If we failed here, we might as well return and 202 * have a leak rather than continue and a bugchk 203 */ 204 if (ret != 0) { 205 netdev_err(ndev, "unable to send " 206 "revoke send buffer to netvsp\n"); 207 return; 208 } 209 } 210 /* Teardown the gpadl on the vsp end */ 211 if (net_device->send_buf_gpadl_handle) { 212 ret = vmbus_teardown_gpadl(device->channel, 213 net_device->send_buf_gpadl_handle); 214 215 /* If we failed here, we might as well return and have a leak 216 * rather than continue and a bugchk 217 */ 218 if (ret != 0) { 219 netdev_err(ndev, 220 "unable to teardown send buffer's gpadl\n"); 221 return; 222 } 223 net_device->send_buf_gpadl_handle = 0; 224 } 225 if (net_device->send_buf) { 226 /* Free up the send buffer */ 227 vfree(net_device->send_buf); 228 net_device->send_buf = NULL; 229 } 230 kfree(net_device->send_section_map); 231 } 232 233 static int netvsc_init_buf(struct hv_device *device) 234 { 235 int ret = 0; 236 struct netvsc_device *net_device; 237 struct nvsp_message *init_packet; 238 struct net_device *ndev; 239 size_t map_words; 240 int node; 241 242 net_device = get_outbound_net_device(device); 243 if (!net_device) 244 return -ENODEV; 245 ndev = hv_get_drvdata(device); 246 247 node = cpu_to_node(device->channel->target_cpu); 248 net_device->recv_buf = vzalloc_node(net_device->recv_buf_size, node); 249 if (!net_device->recv_buf) 250 net_device->recv_buf = vzalloc(net_device->recv_buf_size); 251 252 if (!net_device->recv_buf) { 253 netdev_err(ndev, "unable to allocate receive " 254 "buffer of size %d\n", net_device->recv_buf_size); 255 ret = -ENOMEM; 256 goto cleanup; 257 } 258 259 /* 260 * Establish the gpadl handle for this buffer on this 261 * channel. Note: This call uses the vmbus connection rather 262 * than the channel to establish the gpadl handle. 263 */ 264 ret = vmbus_establish_gpadl(device->channel, net_device->recv_buf, 265 net_device->recv_buf_size, 266 &net_device->recv_buf_gpadl_handle); 267 if (ret != 0) { 268 netdev_err(ndev, 269 "unable to establish receive buffer's gpadl\n"); 270 goto cleanup; 271 } 272 273 /* Notify the NetVsp of the gpadl handle */ 274 init_packet = &net_device->channel_init_pkt; 275 276 memset(init_packet, 0, sizeof(struct nvsp_message)); 277 278 init_packet->hdr.msg_type = NVSP_MSG1_TYPE_SEND_RECV_BUF; 279 init_packet->msg.v1_msg.send_recv_buf. 280 gpadl_handle = net_device->recv_buf_gpadl_handle; 281 init_packet->msg.v1_msg. 282 send_recv_buf.id = NETVSC_RECEIVE_BUFFER_ID; 283 284 /* Send the gpadl notification request */ 285 ret = vmbus_sendpacket(device->channel, init_packet, 286 sizeof(struct nvsp_message), 287 (unsigned long)init_packet, 288 VM_PKT_DATA_INBAND, 289 VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); 290 if (ret != 0) { 291 netdev_err(ndev, 292 "unable to send receive buffer's gpadl to netvsp\n"); 293 goto cleanup; 294 } 295 296 wait_for_completion(&net_device->channel_init_wait); 297 298 /* Check the response */ 299 if (init_packet->msg.v1_msg. 300 send_recv_buf_complete.status != NVSP_STAT_SUCCESS) { 301 netdev_err(ndev, "Unable to complete receive buffer " 302 "initialization with NetVsp - status %d\n", 303 init_packet->msg.v1_msg. 304 send_recv_buf_complete.status); 305 ret = -EINVAL; 306 goto cleanup; 307 } 308 309 /* Parse the response */ 310 311 net_device->recv_section_cnt = init_packet->msg. 312 v1_msg.send_recv_buf_complete.num_sections; 313 314 net_device->recv_section = kmemdup( 315 init_packet->msg.v1_msg.send_recv_buf_complete.sections, 316 net_device->recv_section_cnt * 317 sizeof(struct nvsp_1_receive_buffer_section), 318 GFP_KERNEL); 319 if (net_device->recv_section == NULL) { 320 ret = -EINVAL; 321 goto cleanup; 322 } 323 324 /* 325 * For 1st release, there should only be 1 section that represents the 326 * entire receive buffer 327 */ 328 if (net_device->recv_section_cnt != 1 || 329 net_device->recv_section->offset != 0) { 330 ret = -EINVAL; 331 goto cleanup; 332 } 333 334 /* Now setup the send buffer. 335 */ 336 net_device->send_buf = vzalloc_node(net_device->send_buf_size, node); 337 if (!net_device->send_buf) 338 net_device->send_buf = vzalloc(net_device->send_buf_size); 339 if (!net_device->send_buf) { 340 netdev_err(ndev, "unable to allocate send " 341 "buffer of size %d\n", net_device->send_buf_size); 342 ret = -ENOMEM; 343 goto cleanup; 344 } 345 346 /* Establish the gpadl handle for this buffer on this 347 * channel. Note: This call uses the vmbus connection rather 348 * than the channel to establish the gpadl handle. 349 */ 350 ret = vmbus_establish_gpadl(device->channel, net_device->send_buf, 351 net_device->send_buf_size, 352 &net_device->send_buf_gpadl_handle); 353 if (ret != 0) { 354 netdev_err(ndev, 355 "unable to establish send buffer's gpadl\n"); 356 goto cleanup; 357 } 358 359 /* Notify the NetVsp of the gpadl handle */ 360 init_packet = &net_device->channel_init_pkt; 361 memset(init_packet, 0, sizeof(struct nvsp_message)); 362 init_packet->hdr.msg_type = NVSP_MSG1_TYPE_SEND_SEND_BUF; 363 init_packet->msg.v1_msg.send_send_buf.gpadl_handle = 364 net_device->send_buf_gpadl_handle; 365 init_packet->msg.v1_msg.send_send_buf.id = NETVSC_SEND_BUFFER_ID; 366 367 /* Send the gpadl notification request */ 368 ret = vmbus_sendpacket(device->channel, init_packet, 369 sizeof(struct nvsp_message), 370 (unsigned long)init_packet, 371 VM_PKT_DATA_INBAND, 372 VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); 373 if (ret != 0) { 374 netdev_err(ndev, 375 "unable to send send buffer's gpadl to netvsp\n"); 376 goto cleanup; 377 } 378 379 wait_for_completion(&net_device->channel_init_wait); 380 381 /* Check the response */ 382 if (init_packet->msg.v1_msg. 383 send_send_buf_complete.status != NVSP_STAT_SUCCESS) { 384 netdev_err(ndev, "Unable to complete send buffer " 385 "initialization with NetVsp - status %d\n", 386 init_packet->msg.v1_msg. 387 send_send_buf_complete.status); 388 ret = -EINVAL; 389 goto cleanup; 390 } 391 392 /* Parse the response */ 393 net_device->send_section_size = init_packet->msg. 394 v1_msg.send_send_buf_complete.section_size; 395 396 /* Section count is simply the size divided by the section size. 397 */ 398 net_device->send_section_cnt = 399 net_device->send_buf_size / net_device->send_section_size; 400 401 netdev_dbg(ndev, "Send section size: %d, Section count:%d\n", 402 net_device->send_section_size, net_device->send_section_cnt); 403 404 /* Setup state for managing the send buffer. */ 405 map_words = DIV_ROUND_UP(net_device->send_section_cnt, BITS_PER_LONG); 406 407 net_device->send_section_map = kcalloc(map_words, sizeof(ulong), GFP_KERNEL); 408 if (net_device->send_section_map == NULL) { 409 ret = -ENOMEM; 410 goto cleanup; 411 } 412 413 goto exit; 414 415 cleanup: 416 netvsc_destroy_buf(device); 417 418 exit: 419 return ret; 420 } 421 422 /* Negotiate NVSP protocol version */ 423 static int negotiate_nvsp_ver(struct hv_device *device, 424 struct netvsc_device *net_device, 425 struct nvsp_message *init_packet, 426 u32 nvsp_ver) 427 { 428 struct net_device *ndev = hv_get_drvdata(device); 429 int ret; 430 431 memset(init_packet, 0, sizeof(struct nvsp_message)); 432 init_packet->hdr.msg_type = NVSP_MSG_TYPE_INIT; 433 init_packet->msg.init_msg.init.min_protocol_ver = nvsp_ver; 434 init_packet->msg.init_msg.init.max_protocol_ver = nvsp_ver; 435 436 /* Send the init request */ 437 ret = vmbus_sendpacket(device->channel, init_packet, 438 sizeof(struct nvsp_message), 439 (unsigned long)init_packet, 440 VM_PKT_DATA_INBAND, 441 VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); 442 443 if (ret != 0) 444 return ret; 445 446 wait_for_completion(&net_device->channel_init_wait); 447 448 if (init_packet->msg.init_msg.init_complete.status != 449 NVSP_STAT_SUCCESS) 450 return -EINVAL; 451 452 if (nvsp_ver == NVSP_PROTOCOL_VERSION_1) 453 return 0; 454 455 /* NVSPv2 or later: Send NDIS config */ 456 memset(init_packet, 0, sizeof(struct nvsp_message)); 457 init_packet->hdr.msg_type = NVSP_MSG2_TYPE_SEND_NDIS_CONFIG; 458 init_packet->msg.v2_msg.send_ndis_config.mtu = ndev->mtu + ETH_HLEN; 459 init_packet->msg.v2_msg.send_ndis_config.capability.ieee8021q = 1; 460 461 if (nvsp_ver >= NVSP_PROTOCOL_VERSION_5) { 462 init_packet->msg.v2_msg.send_ndis_config.capability.sriov = 1; 463 464 /* Teaming bit is needed to receive link speed updates */ 465 init_packet->msg.v2_msg.send_ndis_config.capability.teaming = 1; 466 } 467 468 ret = vmbus_sendpacket(device->channel, init_packet, 469 sizeof(struct nvsp_message), 470 (unsigned long)init_packet, 471 VM_PKT_DATA_INBAND, 0); 472 473 return ret; 474 } 475 476 static int netvsc_connect_vsp(struct hv_device *device) 477 { 478 int ret; 479 struct netvsc_device *net_device; 480 struct nvsp_message *init_packet; 481 int ndis_version; 482 const u32 ver_list[] = { 483 NVSP_PROTOCOL_VERSION_1, NVSP_PROTOCOL_VERSION_2, 484 NVSP_PROTOCOL_VERSION_4, NVSP_PROTOCOL_VERSION_5 }; 485 int i; 486 487 net_device = get_outbound_net_device(device); 488 if (!net_device) 489 return -ENODEV; 490 491 init_packet = &net_device->channel_init_pkt; 492 493 /* Negotiate the latest NVSP protocol supported */ 494 for (i = ARRAY_SIZE(ver_list) - 1; i >= 0; i--) 495 if (negotiate_nvsp_ver(device, net_device, init_packet, 496 ver_list[i]) == 0) { 497 net_device->nvsp_version = ver_list[i]; 498 break; 499 } 500 501 if (i < 0) { 502 ret = -EPROTO; 503 goto cleanup; 504 } 505 506 pr_debug("Negotiated NVSP version:%x\n", net_device->nvsp_version); 507 508 /* Send the ndis version */ 509 memset(init_packet, 0, sizeof(struct nvsp_message)); 510 511 if (net_device->nvsp_version <= NVSP_PROTOCOL_VERSION_4) 512 ndis_version = 0x00060001; 513 else 514 ndis_version = 0x0006001e; 515 516 init_packet->hdr.msg_type = NVSP_MSG1_TYPE_SEND_NDIS_VER; 517 init_packet->msg.v1_msg. 518 send_ndis_ver.ndis_major_ver = 519 (ndis_version & 0xFFFF0000) >> 16; 520 init_packet->msg.v1_msg. 521 send_ndis_ver.ndis_minor_ver = 522 ndis_version & 0xFFFF; 523 524 /* Send the init request */ 525 ret = vmbus_sendpacket(device->channel, init_packet, 526 sizeof(struct nvsp_message), 527 (unsigned long)init_packet, 528 VM_PKT_DATA_INBAND, 0); 529 if (ret != 0) 530 goto cleanup; 531 532 /* Post the big receive buffer to NetVSP */ 533 if (net_device->nvsp_version <= NVSP_PROTOCOL_VERSION_2) 534 net_device->recv_buf_size = NETVSC_RECEIVE_BUFFER_SIZE_LEGACY; 535 else 536 net_device->recv_buf_size = NETVSC_RECEIVE_BUFFER_SIZE; 537 net_device->send_buf_size = NETVSC_SEND_BUFFER_SIZE; 538 539 ret = netvsc_init_buf(device); 540 541 cleanup: 542 return ret; 543 } 544 545 static void netvsc_disconnect_vsp(struct hv_device *device) 546 { 547 netvsc_destroy_buf(device); 548 } 549 550 /* 551 * netvsc_device_remove - Callback when the root bus device is removed 552 */ 553 void netvsc_device_remove(struct hv_device *device) 554 { 555 struct net_device *ndev = hv_get_drvdata(device); 556 struct net_device_context *net_device_ctx = netdev_priv(ndev); 557 struct netvsc_device *net_device = net_device_ctx->nvdev; 558 559 netvsc_disconnect_vsp(device); 560 561 net_device_ctx->nvdev = NULL; 562 563 /* 564 * At this point, no one should be accessing net_device 565 * except in here 566 */ 567 netdev_dbg(ndev, "net device safe to remove\n"); 568 569 /* Now, we can close the channel safely */ 570 vmbus_close(device->channel); 571 572 /* Release all resources */ 573 free_netvsc_device(net_device); 574 } 575 576 #define RING_AVAIL_PERCENT_HIWATER 20 577 #define RING_AVAIL_PERCENT_LOWATER 10 578 579 /* 580 * Get the percentage of available bytes to write in the ring. 581 * The return value is in range from 0 to 100. 582 */ 583 static inline u32 hv_ringbuf_avail_percent( 584 struct hv_ring_buffer_info *ring_info) 585 { 586 u32 avail_read, avail_write; 587 588 hv_get_ringbuffer_availbytes(ring_info, &avail_read, &avail_write); 589 590 return avail_write * 100 / ring_info->ring_datasize; 591 } 592 593 static inline void netvsc_free_send_slot(struct netvsc_device *net_device, 594 u32 index) 595 { 596 sync_change_bit(index, net_device->send_section_map); 597 } 598 599 static void netvsc_send_tx_complete(struct netvsc_device *net_device, 600 struct vmbus_channel *incoming_channel, 601 struct hv_device *device, 602 struct vmpacket_descriptor *packet) 603 { 604 struct sk_buff *skb = (struct sk_buff *)(unsigned long)packet->trans_id; 605 struct net_device *ndev = hv_get_drvdata(device); 606 struct net_device_context *net_device_ctx = netdev_priv(ndev); 607 struct vmbus_channel *channel = device->channel; 608 u16 q_idx = 0; 609 int queue_sends; 610 611 /* Notify the layer above us */ 612 if (likely(skb)) { 613 const struct hv_netvsc_packet *packet 614 = (struct hv_netvsc_packet *)skb->cb; 615 u32 send_index = packet->send_buf_index; 616 struct netvsc_stats *tx_stats; 617 618 if (send_index != NETVSC_INVALID_INDEX) 619 netvsc_free_send_slot(net_device, send_index); 620 q_idx = packet->q_idx; 621 channel = incoming_channel; 622 623 tx_stats = &net_device->chan_table[q_idx].tx_stats; 624 625 u64_stats_update_begin(&tx_stats->syncp); 626 tx_stats->packets += packet->total_packets; 627 tx_stats->bytes += packet->total_bytes; 628 u64_stats_update_end(&tx_stats->syncp); 629 630 dev_consume_skb_any(skb); 631 } 632 633 queue_sends = 634 atomic_dec_return(&net_device->chan_table[q_idx].queue_sends); 635 636 if (net_device->destroy && queue_sends == 0) 637 wake_up(&net_device->wait_drain); 638 639 if (netif_tx_queue_stopped(netdev_get_tx_queue(ndev, q_idx)) && 640 !net_device_ctx->start_remove && 641 (hv_ringbuf_avail_percent(&channel->outbound) > RING_AVAIL_PERCENT_HIWATER || 642 queue_sends < 1)) 643 netif_tx_wake_queue(netdev_get_tx_queue(ndev, q_idx)); 644 } 645 646 static void netvsc_send_completion(struct netvsc_device *net_device, 647 struct vmbus_channel *incoming_channel, 648 struct hv_device *device, 649 struct vmpacket_descriptor *packet) 650 { 651 struct nvsp_message *nvsp_packet; 652 struct net_device *ndev = hv_get_drvdata(device); 653 654 nvsp_packet = (struct nvsp_message *)((unsigned long)packet + 655 (packet->offset8 << 3)); 656 657 switch (nvsp_packet->hdr.msg_type) { 658 case NVSP_MSG_TYPE_INIT_COMPLETE: 659 case NVSP_MSG1_TYPE_SEND_RECV_BUF_COMPLETE: 660 case NVSP_MSG1_TYPE_SEND_SEND_BUF_COMPLETE: 661 case NVSP_MSG5_TYPE_SUBCHANNEL: 662 /* Copy the response back */ 663 memcpy(&net_device->channel_init_pkt, nvsp_packet, 664 sizeof(struct nvsp_message)); 665 complete(&net_device->channel_init_wait); 666 break; 667 668 case NVSP_MSG1_TYPE_SEND_RNDIS_PKT_COMPLETE: 669 netvsc_send_tx_complete(net_device, incoming_channel, 670 device, packet); 671 break; 672 673 default: 674 netdev_err(ndev, 675 "Unknown send completion type %d received!!\n", 676 nvsp_packet->hdr.msg_type); 677 } 678 } 679 680 static u32 netvsc_get_next_send_section(struct netvsc_device *net_device) 681 { 682 unsigned long *map_addr = net_device->send_section_map; 683 unsigned int i; 684 685 for_each_clear_bit(i, map_addr, net_device->send_section_cnt) { 686 if (sync_test_and_set_bit(i, map_addr) == 0) 687 return i; 688 } 689 690 return NETVSC_INVALID_INDEX; 691 } 692 693 static u32 netvsc_copy_to_send_buf(struct netvsc_device *net_device, 694 unsigned int section_index, 695 u32 pend_size, 696 struct hv_netvsc_packet *packet, 697 struct rndis_message *rndis_msg, 698 struct hv_page_buffer **pb, 699 struct sk_buff *skb) 700 { 701 char *start = net_device->send_buf; 702 char *dest = start + (section_index * net_device->send_section_size) 703 + pend_size; 704 int i; 705 u32 msg_size = 0; 706 u32 padding = 0; 707 u32 remain = packet->total_data_buflen % net_device->pkt_align; 708 u32 page_count = packet->cp_partial ? packet->rmsg_pgcnt : 709 packet->page_buf_cnt; 710 711 /* Add padding */ 712 if (skb && skb->xmit_more && remain && 713 !packet->cp_partial) { 714 padding = net_device->pkt_align - remain; 715 rndis_msg->msg_len += padding; 716 packet->total_data_buflen += padding; 717 } 718 719 for (i = 0; i < page_count; i++) { 720 char *src = phys_to_virt((*pb)[i].pfn << PAGE_SHIFT); 721 u32 offset = (*pb)[i].offset; 722 u32 len = (*pb)[i].len; 723 724 memcpy(dest, (src + offset), len); 725 msg_size += len; 726 dest += len; 727 } 728 729 if (padding) { 730 memset(dest, 0, padding); 731 msg_size += padding; 732 } 733 734 return msg_size; 735 } 736 737 static inline int netvsc_send_pkt( 738 struct hv_device *device, 739 struct hv_netvsc_packet *packet, 740 struct netvsc_device *net_device, 741 struct hv_page_buffer **pb, 742 struct sk_buff *skb) 743 { 744 struct nvsp_message nvmsg; 745 struct netvsc_channel *nvchan 746 = &net_device->chan_table[packet->q_idx]; 747 struct vmbus_channel *out_channel = nvchan->channel; 748 struct net_device *ndev = hv_get_drvdata(device); 749 struct netdev_queue *txq = netdev_get_tx_queue(ndev, packet->q_idx); 750 u64 req_id; 751 int ret; 752 struct hv_page_buffer *pgbuf; 753 u32 ring_avail = hv_ringbuf_avail_percent(&out_channel->outbound); 754 755 nvmsg.hdr.msg_type = NVSP_MSG1_TYPE_SEND_RNDIS_PKT; 756 if (skb != NULL) { 757 /* 0 is RMC_DATA; */ 758 nvmsg.msg.v1_msg.send_rndis_pkt.channel_type = 0; 759 } else { 760 /* 1 is RMC_CONTROL; */ 761 nvmsg.msg.v1_msg.send_rndis_pkt.channel_type = 1; 762 } 763 764 nvmsg.msg.v1_msg.send_rndis_pkt.send_buf_section_index = 765 packet->send_buf_index; 766 if (packet->send_buf_index == NETVSC_INVALID_INDEX) 767 nvmsg.msg.v1_msg.send_rndis_pkt.send_buf_section_size = 0; 768 else 769 nvmsg.msg.v1_msg.send_rndis_pkt.send_buf_section_size = 770 packet->total_data_buflen; 771 772 req_id = (ulong)skb; 773 774 if (out_channel->rescind) 775 return -ENODEV; 776 777 if (packet->page_buf_cnt) { 778 pgbuf = packet->cp_partial ? (*pb) + 779 packet->rmsg_pgcnt : (*pb); 780 ret = vmbus_sendpacket_pagebuffer_ctl(out_channel, 781 pgbuf, 782 packet->page_buf_cnt, 783 &nvmsg, 784 sizeof(struct nvsp_message), 785 req_id, 786 VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); 787 } else { 788 ret = vmbus_sendpacket_ctl(out_channel, &nvmsg, 789 sizeof(struct nvsp_message), 790 req_id, 791 VM_PKT_DATA_INBAND, 792 VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); 793 } 794 795 if (ret == 0) { 796 atomic_inc_return(&nvchan->queue_sends); 797 798 if (ring_avail < RING_AVAIL_PERCENT_LOWATER) 799 netif_tx_stop_queue(txq); 800 } else if (ret == -EAGAIN) { 801 netif_tx_stop_queue(txq); 802 if (atomic_read(&nvchan->queue_sends) < 1) { 803 netif_tx_wake_queue(txq); 804 ret = -ENOSPC; 805 } 806 } else { 807 netdev_err(ndev, "Unable to send packet %p ret %d\n", 808 packet, ret); 809 } 810 811 return ret; 812 } 813 814 /* Move packet out of multi send data (msd), and clear msd */ 815 static inline void move_pkt_msd(struct hv_netvsc_packet **msd_send, 816 struct sk_buff **msd_skb, 817 struct multi_send_data *msdp) 818 { 819 *msd_skb = msdp->skb; 820 *msd_send = msdp->pkt; 821 msdp->skb = NULL; 822 msdp->pkt = NULL; 823 msdp->count = 0; 824 } 825 826 int netvsc_send(struct hv_device *device, 827 struct hv_netvsc_packet *packet, 828 struct rndis_message *rndis_msg, 829 struct hv_page_buffer **pb, 830 struct sk_buff *skb) 831 { 832 struct netvsc_device *net_device; 833 int ret = 0; 834 struct netvsc_channel *nvchan; 835 u32 pktlen = packet->total_data_buflen, msd_len = 0; 836 unsigned int section_index = NETVSC_INVALID_INDEX; 837 struct multi_send_data *msdp; 838 struct hv_netvsc_packet *msd_send = NULL, *cur_send = NULL; 839 struct sk_buff *msd_skb = NULL; 840 bool try_batch; 841 bool xmit_more = (skb != NULL) ? skb->xmit_more : false; 842 843 net_device = get_outbound_net_device(device); 844 if (!net_device) 845 return -ENODEV; 846 847 /* We may race with netvsc_connect_vsp()/netvsc_init_buf() and get 848 * here before the negotiation with the host is finished and 849 * send_section_map may not be allocated yet. 850 */ 851 if (!net_device->send_section_map) 852 return -EAGAIN; 853 854 nvchan = &net_device->chan_table[packet->q_idx]; 855 packet->send_buf_index = NETVSC_INVALID_INDEX; 856 packet->cp_partial = false; 857 858 /* Send control message directly without accessing msd (Multi-Send 859 * Data) field which may be changed during data packet processing. 860 */ 861 if (!skb) { 862 cur_send = packet; 863 goto send_now; 864 } 865 866 /* batch packets in send buffer if possible */ 867 msdp = &nvchan->msd; 868 if (msdp->pkt) 869 msd_len = msdp->pkt->total_data_buflen; 870 871 try_batch = (skb != NULL) && msd_len > 0 && msdp->count < 872 net_device->max_pkt; 873 874 if (try_batch && msd_len + pktlen + net_device->pkt_align < 875 net_device->send_section_size) { 876 section_index = msdp->pkt->send_buf_index; 877 878 } else if (try_batch && msd_len + packet->rmsg_size < 879 net_device->send_section_size) { 880 section_index = msdp->pkt->send_buf_index; 881 packet->cp_partial = true; 882 883 } else if ((skb != NULL) && pktlen + net_device->pkt_align < 884 net_device->send_section_size) { 885 section_index = netvsc_get_next_send_section(net_device); 886 if (section_index != NETVSC_INVALID_INDEX) { 887 move_pkt_msd(&msd_send, &msd_skb, msdp); 888 msd_len = 0; 889 } 890 } 891 892 if (section_index != NETVSC_INVALID_INDEX) { 893 netvsc_copy_to_send_buf(net_device, 894 section_index, msd_len, 895 packet, rndis_msg, pb, skb); 896 897 packet->send_buf_index = section_index; 898 899 if (packet->cp_partial) { 900 packet->page_buf_cnt -= packet->rmsg_pgcnt; 901 packet->total_data_buflen = msd_len + packet->rmsg_size; 902 } else { 903 packet->page_buf_cnt = 0; 904 packet->total_data_buflen += msd_len; 905 } 906 907 if (msdp->pkt) { 908 packet->total_packets += msdp->pkt->total_packets; 909 packet->total_bytes += msdp->pkt->total_bytes; 910 } 911 912 if (msdp->skb) 913 dev_consume_skb_any(msdp->skb); 914 915 if (xmit_more && !packet->cp_partial) { 916 msdp->skb = skb; 917 msdp->pkt = packet; 918 msdp->count++; 919 } else { 920 cur_send = packet; 921 msdp->skb = NULL; 922 msdp->pkt = NULL; 923 msdp->count = 0; 924 } 925 } else { 926 move_pkt_msd(&msd_send, &msd_skb, msdp); 927 cur_send = packet; 928 } 929 930 if (msd_send) { 931 int m_ret = netvsc_send_pkt(device, msd_send, net_device, 932 NULL, msd_skb); 933 934 if (m_ret != 0) { 935 netvsc_free_send_slot(net_device, 936 msd_send->send_buf_index); 937 dev_kfree_skb_any(msd_skb); 938 } 939 } 940 941 send_now: 942 if (cur_send) 943 ret = netvsc_send_pkt(device, cur_send, net_device, pb, skb); 944 945 if (ret != 0 && section_index != NETVSC_INVALID_INDEX) 946 netvsc_free_send_slot(net_device, section_index); 947 948 return ret; 949 } 950 951 static int netvsc_send_recv_completion(struct vmbus_channel *channel, 952 u64 transaction_id, u32 status) 953 { 954 struct nvsp_message recvcompMessage; 955 int ret; 956 957 recvcompMessage.hdr.msg_type = 958 NVSP_MSG1_TYPE_SEND_RNDIS_PKT_COMPLETE; 959 960 recvcompMessage.msg.v1_msg.send_rndis_pkt_complete.status = status; 961 962 /* Send the completion */ 963 ret = vmbus_sendpacket(channel, &recvcompMessage, 964 sizeof(struct nvsp_message_header) + sizeof(u32), 965 transaction_id, VM_PKT_COMP, 0); 966 967 return ret; 968 } 969 970 static inline void count_recv_comp_slot(struct netvsc_device *nvdev, u16 q_idx, 971 u32 *filled, u32 *avail) 972 { 973 struct multi_recv_comp *mrc = &nvdev->chan_table[q_idx].mrc; 974 u32 first = mrc->first; 975 u32 next = mrc->next; 976 977 *filled = (first > next) ? NETVSC_RECVSLOT_MAX - first + next : 978 next - first; 979 980 *avail = NETVSC_RECVSLOT_MAX - *filled - 1; 981 } 982 983 /* Read the first filled slot, no change to index */ 984 static inline struct recv_comp_data *read_recv_comp_slot(struct netvsc_device 985 *nvdev, u16 q_idx) 986 { 987 struct multi_recv_comp *mrc = &nvdev->chan_table[q_idx].mrc; 988 u32 filled, avail; 989 990 if (unlikely(!mrc->buf)) 991 return NULL; 992 993 count_recv_comp_slot(nvdev, q_idx, &filled, &avail); 994 if (!filled) 995 return NULL; 996 997 return mrc->buf + mrc->first * sizeof(struct recv_comp_data); 998 } 999 1000 /* Put the first filled slot back to available pool */ 1001 static inline void put_recv_comp_slot(struct netvsc_device *nvdev, u16 q_idx) 1002 { 1003 struct multi_recv_comp *mrc = &nvdev->chan_table[q_idx].mrc; 1004 int num_recv; 1005 1006 mrc->first = (mrc->first + 1) % NETVSC_RECVSLOT_MAX; 1007 1008 num_recv = atomic_dec_return(&nvdev->num_outstanding_recvs); 1009 1010 if (nvdev->destroy && num_recv == 0) 1011 wake_up(&nvdev->wait_drain); 1012 } 1013 1014 /* Check and send pending recv completions */ 1015 static void netvsc_chk_recv_comp(struct netvsc_device *nvdev, 1016 struct vmbus_channel *channel, u16 q_idx) 1017 { 1018 struct recv_comp_data *rcd; 1019 int ret; 1020 1021 while (true) { 1022 rcd = read_recv_comp_slot(nvdev, q_idx); 1023 if (!rcd) 1024 break; 1025 1026 ret = netvsc_send_recv_completion(channel, rcd->tid, 1027 rcd->status); 1028 if (ret) 1029 break; 1030 1031 put_recv_comp_slot(nvdev, q_idx); 1032 } 1033 } 1034 1035 #define NETVSC_RCD_WATERMARK 80 1036 1037 /* Get next available slot */ 1038 static inline struct recv_comp_data *get_recv_comp_slot( 1039 struct netvsc_device *nvdev, struct vmbus_channel *channel, u16 q_idx) 1040 { 1041 struct multi_recv_comp *mrc = &nvdev->chan_table[q_idx].mrc; 1042 u32 filled, avail, next; 1043 struct recv_comp_data *rcd; 1044 1045 if (unlikely(!nvdev->recv_section)) 1046 return NULL; 1047 1048 if (unlikely(!mrc->buf)) 1049 return NULL; 1050 1051 if (atomic_read(&nvdev->num_outstanding_recvs) > 1052 nvdev->recv_section->num_sub_allocs * NETVSC_RCD_WATERMARK / 100) 1053 netvsc_chk_recv_comp(nvdev, channel, q_idx); 1054 1055 count_recv_comp_slot(nvdev, q_idx, &filled, &avail); 1056 if (!avail) 1057 return NULL; 1058 1059 next = mrc->next; 1060 rcd = mrc->buf + next * sizeof(struct recv_comp_data); 1061 mrc->next = (next + 1) % NETVSC_RECVSLOT_MAX; 1062 1063 atomic_inc(&nvdev->num_outstanding_recvs); 1064 1065 return rcd; 1066 } 1067 1068 static void netvsc_receive(struct net_device *ndev, 1069 struct netvsc_device *net_device, 1070 struct net_device_context *net_device_ctx, 1071 struct hv_device *device, 1072 struct vmbus_channel *channel, 1073 struct vmtransfer_page_packet_header *vmxferpage_packet, 1074 struct nvsp_message *nvsp) 1075 { 1076 char *recv_buf = net_device->recv_buf; 1077 u32 status = NVSP_STAT_SUCCESS; 1078 int i; 1079 int count = 0; 1080 int ret; 1081 struct recv_comp_data *rcd; 1082 u16 q_idx = channel->offermsg.offer.sub_channel_index; 1083 1084 /* Make sure this is a valid nvsp packet */ 1085 if (unlikely(nvsp->hdr.msg_type != NVSP_MSG1_TYPE_SEND_RNDIS_PKT)) { 1086 netif_err(net_device_ctx, rx_err, ndev, 1087 "Unknown nvsp packet type received %u\n", 1088 nvsp->hdr.msg_type); 1089 return; 1090 } 1091 1092 if (unlikely(vmxferpage_packet->xfer_pageset_id != NETVSC_RECEIVE_BUFFER_ID)) { 1093 netif_err(net_device_ctx, rx_err, ndev, 1094 "Invalid xfer page set id - expecting %x got %x\n", 1095 NETVSC_RECEIVE_BUFFER_ID, 1096 vmxferpage_packet->xfer_pageset_id); 1097 return; 1098 } 1099 1100 count = vmxferpage_packet->range_cnt; 1101 1102 /* Each range represents 1 RNDIS pkt that contains 1 ethernet frame */ 1103 for (i = 0; i < count; i++) { 1104 void *data = recv_buf 1105 + vmxferpage_packet->ranges[i].byte_offset; 1106 u32 buflen = vmxferpage_packet->ranges[i].byte_count; 1107 1108 /* Pass it to the upper layer */ 1109 status = rndis_filter_receive(ndev, net_device, device, 1110 channel, data, buflen); 1111 } 1112 1113 if (!net_device->chan_table[q_idx].mrc.buf) { 1114 ret = netvsc_send_recv_completion(channel, 1115 vmxferpage_packet->d.trans_id, 1116 status); 1117 if (ret) 1118 netdev_err(ndev, "Recv_comp q:%hd, tid:%llx, err:%d\n", 1119 q_idx, vmxferpage_packet->d.trans_id, ret); 1120 return; 1121 } 1122 1123 rcd = get_recv_comp_slot(net_device, channel, q_idx); 1124 1125 if (!rcd) { 1126 netdev_err(ndev, "Recv_comp full buf q:%hd, tid:%llx\n", 1127 q_idx, vmxferpage_packet->d.trans_id); 1128 return; 1129 } 1130 1131 rcd->tid = vmxferpage_packet->d.trans_id; 1132 rcd->status = status; 1133 } 1134 1135 static void netvsc_send_table(struct hv_device *hdev, 1136 struct nvsp_message *nvmsg) 1137 { 1138 struct net_device *ndev = hv_get_drvdata(hdev); 1139 struct net_device_context *net_device_ctx = netdev_priv(ndev); 1140 int i; 1141 u32 count, *tab; 1142 1143 count = nvmsg->msg.v5_msg.send_table.count; 1144 if (count != VRSS_SEND_TAB_SIZE) { 1145 netdev_err(ndev, "Received wrong send-table size:%u\n", count); 1146 return; 1147 } 1148 1149 tab = (u32 *)((unsigned long)&nvmsg->msg.v5_msg.send_table + 1150 nvmsg->msg.v5_msg.send_table.offset); 1151 1152 for (i = 0; i < count; i++) 1153 net_device_ctx->tx_send_table[i] = tab[i]; 1154 } 1155 1156 static void netvsc_send_vf(struct net_device_context *net_device_ctx, 1157 struct nvsp_message *nvmsg) 1158 { 1159 net_device_ctx->vf_alloc = nvmsg->msg.v4_msg.vf_assoc.allocated; 1160 net_device_ctx->vf_serial = nvmsg->msg.v4_msg.vf_assoc.serial; 1161 } 1162 1163 static inline void netvsc_receive_inband(struct hv_device *hdev, 1164 struct net_device_context *net_device_ctx, 1165 struct nvsp_message *nvmsg) 1166 { 1167 switch (nvmsg->hdr.msg_type) { 1168 case NVSP_MSG5_TYPE_SEND_INDIRECTION_TABLE: 1169 netvsc_send_table(hdev, nvmsg); 1170 break; 1171 1172 case NVSP_MSG4_TYPE_SEND_VF_ASSOCIATION: 1173 netvsc_send_vf(net_device_ctx, nvmsg); 1174 break; 1175 } 1176 } 1177 1178 static void netvsc_process_raw_pkt(struct hv_device *device, 1179 struct vmbus_channel *channel, 1180 struct netvsc_device *net_device, 1181 struct net_device *ndev, 1182 u64 request_id, 1183 struct vmpacket_descriptor *desc) 1184 { 1185 struct net_device_context *net_device_ctx = netdev_priv(ndev); 1186 struct nvsp_message *nvmsg 1187 = (struct nvsp_message *)((unsigned long)desc 1188 + (desc->offset8 << 3)); 1189 1190 switch (desc->type) { 1191 case VM_PKT_COMP: 1192 netvsc_send_completion(net_device, channel, device, desc); 1193 break; 1194 1195 case VM_PKT_DATA_USING_XFER_PAGES: 1196 netvsc_receive(ndev, net_device, net_device_ctx, 1197 device, channel, 1198 (struct vmtransfer_page_packet_header *)desc, 1199 nvmsg); 1200 break; 1201 1202 case VM_PKT_DATA_INBAND: 1203 netvsc_receive_inband(device, net_device_ctx, nvmsg); 1204 break; 1205 1206 default: 1207 netdev_err(ndev, "unhandled packet type %d, tid %llx\n", 1208 desc->type, request_id); 1209 break; 1210 } 1211 } 1212 1213 void netvsc_channel_cb(void *context) 1214 { 1215 struct vmbus_channel *channel = context; 1216 u16 q_idx = channel->offermsg.offer.sub_channel_index; 1217 struct hv_device *device; 1218 struct netvsc_device *net_device; 1219 struct vmpacket_descriptor *desc; 1220 struct net_device *ndev; 1221 bool need_to_commit = false; 1222 1223 if (channel->primary_channel != NULL) 1224 device = channel->primary_channel->device_obj; 1225 else 1226 device = channel->device_obj; 1227 1228 ndev = hv_get_drvdata(device); 1229 if (unlikely(!ndev)) 1230 return; 1231 1232 net_device = net_device_to_netvsc_device(ndev); 1233 if (unlikely(!net_device)) 1234 return; 1235 1236 if (unlikely(net_device->destroy && 1237 netvsc_channel_idle(net_device, q_idx))) 1238 return; 1239 1240 /* commit_rd_index() -> hv_signal_on_read() needs this. */ 1241 init_cached_read_index(channel); 1242 1243 while ((desc = get_next_pkt_raw(channel)) != NULL) { 1244 netvsc_process_raw_pkt(device, channel, net_device, 1245 ndev, desc->trans_id, desc); 1246 1247 put_pkt_raw(channel, desc); 1248 need_to_commit = true; 1249 } 1250 1251 if (need_to_commit) 1252 commit_rd_index(channel); 1253 1254 netvsc_chk_recv_comp(net_device, channel, q_idx); 1255 } 1256 1257 /* 1258 * netvsc_device_add - Callback when the device belonging to this 1259 * driver is added 1260 */ 1261 int netvsc_device_add(struct hv_device *device, 1262 const struct netvsc_device_info *device_info) 1263 { 1264 int i, ret = 0; 1265 int ring_size = device_info->ring_size; 1266 struct netvsc_device *net_device; 1267 struct net_device *ndev = hv_get_drvdata(device); 1268 struct net_device_context *net_device_ctx = netdev_priv(ndev); 1269 1270 net_device = alloc_net_device(); 1271 if (!net_device) 1272 return -ENOMEM; 1273 1274 net_device->ring_size = ring_size; 1275 1276 /* Open the channel */ 1277 ret = vmbus_open(device->channel, ring_size * PAGE_SIZE, 1278 ring_size * PAGE_SIZE, NULL, 0, 1279 netvsc_channel_cb, device->channel); 1280 1281 if (ret != 0) { 1282 netdev_err(ndev, "unable to open channel: %d\n", ret); 1283 goto cleanup; 1284 } 1285 1286 /* Channel is opened */ 1287 netdev_dbg(ndev, "hv_netvsc channel opened successfully\n"); 1288 1289 /* If we're reopening the device we may have multiple queues, fill the 1290 * chn_table with the default channel to use it before subchannels are 1291 * opened. 1292 */ 1293 for (i = 0; i < VRSS_CHANNEL_MAX; i++) 1294 net_device->chan_table[i].channel = device->channel; 1295 1296 /* Writing nvdev pointer unlocks netvsc_send(), make sure chn_table is 1297 * populated. 1298 */ 1299 wmb(); 1300 1301 net_device_ctx->nvdev = net_device; 1302 1303 /* Connect with the NetVsp */ 1304 ret = netvsc_connect_vsp(device); 1305 if (ret != 0) { 1306 netdev_err(ndev, 1307 "unable to connect to NetVSP - %d\n", ret); 1308 goto close; 1309 } 1310 1311 return ret; 1312 1313 close: 1314 /* Now, we can close the channel safely */ 1315 vmbus_close(device->channel); 1316 1317 cleanup: 1318 free_netvsc_device(net_device); 1319 1320 return ret; 1321 } 1322