Deleted Added
full compact
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,
182 sizeof(nvsp_msg), (uint64_t)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,
280 sizeof(nvsp_msg), (uint64_t)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),
334 (uint64_t)revoke_pkt,
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),
402 (uint64_t)revoke_pkt,
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,
464 sizeof(nvsp_msg), (uint64_t)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,
508 sizeof(nvsp_msg), (uint64_t)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,
580 sizeof(nvsp_msg), (uint64_t)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,
830 &send_msg, sizeof(nvsp_msg), (uint64_t)pkt);
832 &send_msg, sizeof(nvsp_msg), (uint64_t)(uintptr_t)pkt);
833 } else {
834 ret = hv_vmbus_channel_send_packet(device->channel,
833 &send_msg, sizeof(nvsp_msg), (uint64_t)pkt,
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 ---