1/*- 2 * Copyright (c) 2009-2012 Microsoft Corp. 3 * Copyright (c) 2010-2012 Citrix Inc. 4 * Copyright (c) 2012 NetApp Inc. 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions --- 10 unchanged lines hidden (view full) --- 19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
27 * 28 * $FreeBSD: stable/10/sys/dev/hyperv/netvsc/hv_net_vsc.c 266794 2014-05-28 09:06:36Z marius $ |
29 */ 30 31/** 32 * HyperV vmbus network VSC (virtual services client) module 33 * 34 */ 35 36 --- 139 unchanged lines hidden (view full) --- 176 init_pkt->msgs.vers_1_msgs.send_rx_buf.gpadl_handle = 177 net_dev->rx_buf_gpadl_handle; 178 init_pkt->msgs.vers_1_msgs.send_rx_buf.id = 179 NETVSC_RECEIVE_BUFFER_ID; 180 181 /* Send the gpadl notification request */ 182 183 ret = hv_vmbus_channel_send_packet(device->channel, init_pkt, |
184 sizeof(nvsp_msg), (uint64_t)(uintptr_t)init_pkt, |
185 HV_VMBUS_PACKET_TYPE_DATA_IN_BAND, 186 HV_VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); 187 if (ret != 0) { 188 goto cleanup; 189 } 190 191 sema_wait(&net_dev->channel_init_sema); 192 --- 81 unchanged lines hidden (view full) --- 274 init_pkt->msgs.vers_1_msgs.send_rx_buf.gpadl_handle = 275 net_dev->send_buf_gpadl_handle; 276 init_pkt->msgs.vers_1_msgs.send_rx_buf.id = 277 NETVSC_SEND_BUFFER_ID; 278 279 /* Send the gpadl notification request */ 280 281 ret = hv_vmbus_channel_send_packet(device->channel, init_pkt, |
282 sizeof(nvsp_msg), (uint64_t)(uintptr_t)init_pkt, |
283 HV_VMBUS_PACKET_TYPE_DATA_IN_BAND, 284 HV_VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); 285 if (ret != 0) { 286 goto cleanup; 287 } 288 289 sema_wait(&net_dev->channel_init_sema); 290 --- 37 unchanged lines hidden (view full) --- 328 memset(revoke_pkt, 0, sizeof(nvsp_msg)); 329 330 revoke_pkt->hdr.msg_type = nvsp_msg_1_type_revoke_rx_buf; 331 revoke_pkt->msgs.vers_1_msgs.revoke_rx_buf.id = 332 NETVSC_RECEIVE_BUFFER_ID; 333 334 ret = hv_vmbus_channel_send_packet(net_dev->dev->channel, 335 revoke_pkt, sizeof(nvsp_msg), |
336 (uint64_t)(uintptr_t)revoke_pkt, |
337 HV_VMBUS_PACKET_TYPE_DATA_IN_BAND, 0); 338 339 /* 340 * If we failed here, we might as well return and have a leak 341 * rather than continue and a bugchk 342 */ 343 if (ret != 0) { 344 return (ret); --- 51 unchanged lines hidden (view full) --- 396 397 revoke_pkt->hdr.msg_type = 398 nvsp_msg_1_type_revoke_send_buf; 399 revoke_pkt->msgs.vers_1_msgs.revoke_send_buf.id = 400 NETVSC_SEND_BUFFER_ID; 401 402 ret = hv_vmbus_channel_send_packet(net_dev->dev->channel, 403 revoke_pkt, sizeof(nvsp_msg), |
404 (uint64_t)(uintptr_t)revoke_pkt, |
405 HV_VMBUS_PACKET_TYPE_DATA_IN_BAND, 0); 406 /* 407 * If we failed here, we might as well return and have a leak 408 * rather than continue and a bugchk 409 */ 410 if (ret != 0) { 411 return (ret); 412 } --- 45 unchanged lines hidden (view full) --- 458 /* 459 * Specify parameter as the only acceptable protocol version 460 */ 461 init_pkt->msgs.init_msgs.init.p1.protocol_version = nvsp_ver; 462 init_pkt->msgs.init_msgs.init.protocol_version_2 = nvsp_ver; 463 464 /* Send the init request */ 465 ret = hv_vmbus_channel_send_packet(device->channel, init_pkt, |
466 sizeof(nvsp_msg), (uint64_t)(uintptr_t)init_pkt, |
467 HV_VMBUS_PACKET_TYPE_DATA_IN_BAND, 468 HV_VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); 469 if (ret != 0) 470 return (-1); 471 472 sema_wait(&net_dev->channel_init_sema); 473 474 if (init_pkt->msgs.init_msgs.init_compl.status != nvsp_status_success) --- 27 unchanged lines hidden (view full) --- 502 init_pkt->hdr.msg_type = nvsp_msg_2_type_send_ndis_config; 503 init_pkt->msgs.vers_2_msgs.send_ndis_config.mtu = mtu; 504 init_pkt-> 505 msgs.vers_2_msgs.send_ndis_config.capabilities.u1.u2.ieee8021q 506 = 1; 507 508 /* Send the configuration packet */ 509 ret = hv_vmbus_channel_send_packet(device->channel, init_pkt, |
510 sizeof(nvsp_msg), (uint64_t)(uintptr_t)init_pkt, |
511 HV_VMBUS_PACKET_TYPE_DATA_IN_BAND, 0); 512 if (ret != 0) 513 return (-EINVAL); 514 515 return (0); 516} 517 518/* --- 55 unchanged lines hidden (view full) --- 574 init_pkt->msgs.vers_1_msgs.send_ndis_vers.ndis_major_vers = 575 (ndis_version & 0xFFFF0000) >> 16; 576 init_pkt->msgs.vers_1_msgs.send_ndis_vers.ndis_minor_vers = 577 ndis_version & 0xFFFF; 578 579 /* Send the init request */ 580 581 ret = hv_vmbus_channel_send_packet(device->channel, init_pkt, |
582 sizeof(nvsp_msg), (uint64_t)(uintptr_t)init_pkt, |
583 HV_VMBUS_PACKET_TYPE_DATA_IN_BAND, 0); 584 if (ret != 0) { 585 goto cleanup; 586 } 587 /* 588 * TODO: BUGBUG - We have to wait for the above msg since the netvsp 589 * uses KMCL which acknowledges packet (completion packet) 590 * since our Vmbus always set the --- 233 unchanged lines hidden (view full) --- 824 /* Not using send buffer section */ 825 send_msg.msgs.vers_1_msgs.send_rndis_pkt.send_buf_section_idx = 826 0xFFFFFFFF; 827 send_msg.msgs.vers_1_msgs.send_rndis_pkt.send_buf_section_size = 0; 828 829 if (pkt->page_buf_count) { 830 ret = hv_vmbus_channel_send_packet_pagebuffer(device->channel, 831 pkt->page_buffers, pkt->page_buf_count, |
832 &send_msg, sizeof(nvsp_msg), (uint64_t)(uintptr_t)pkt); |
833 } else { 834 ret = hv_vmbus_channel_send_packet(device->channel, |
835 &send_msg, sizeof(nvsp_msg), (uint64_t)(uintptr_t)pkt, |
836 HV_VMBUS_PACKET_TYPE_DATA_IN_BAND, 837 HV_VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED); 838 } 839 840 /* Record outstanding send only if send_packet() succeeded */ 841 if (ret == 0) 842 atomic_add_int(&net_dev->num_outstanding_sends, 1); 843 --- 300 unchanged lines hidden --- |