Lines Matching refs:link

564 	viona_link_t *link;  in viona_ioctl()  local
591 if ((link = ss->ss_link) == NULL || link->l_destroyed || in viona_ioctl()
592 vmm_drv_release_reqd(link->l_vm_hold)) { in viona_ioctl()
599 val = VIONA_S_HOSTCAPS | link->l_features_hw; in viona_ioctl()
609 val &= (VIONA_S_HOSTCAPS | link->l_features_hw); in viona_ioctl()
617 link->l_features = val; in viona_ioctl()
620 err = viona_ioc_ring_init(link, dptr, md); in viona_ioctl()
623 err = viona_ioc_ring_reset(link, (uint_t)data); in viona_ioctl()
626 err = viona_ioc_ring_kick(link, (uint_t)data); in viona_ioctl()
629 err = viona_ioc_ring_set_msi(link, dptr, md); in viona_ioctl()
632 err = viona_ioc_ring_intr_clear(link, (uint_t)data); in viona_ioctl()
635 err = viona_ioc_ring_set_state(link, dptr, md); in viona_ioctl()
638 err = viona_ioc_ring_get_state(link, dptr, md); in viona_ioctl()
641 err = viona_ioc_ring_pause(link, (uint_t)data); in viona_ioctl()
645 err = viona_ioc_intr_poll(link, dptr, md, rv); in viona_ioctl()
652 err = viona_ioc_set_notify_ioport(link, (uint16_t)data); in viona_ioctl()
655 err = viona_ioc_set_promisc(link, (viona_promisc_t)data); in viona_ioctl()
658 err = viona_ioc_get_params(link, dptr, md); in viona_ioctl()
661 err = viona_ioc_set_params(link, dptr, md); in viona_ioctl()
664 *rv = (int)link->l_mtu; in viona_ioctl()
670 link->l_mtu = (uint16_t)data; in viona_ioctl()
686 viona_link_t *link; in viona_chpoll() local
694 if ((link = ss->ss_link) == NULL || link->l_destroyed) { in viona_chpoll()
702 if (link->l_vrings[i].vr_intr_enabled != 0) { in viona_chpoll()
709 *phpp = &link->l_pollhead; in viona_chpoll()
717 viona_get_mac_capab(viona_link_t *link) in viona_get_mac_capab() argument
719 mac_handle_t mh = link->l_mh; in viona_get_mac_capab()
723 link->l_features_hw = 0; in viona_get_mac_capab()
730 link->l_features_hw |= VIRTIO_NET_F_CSUM; in viona_get_mac_capab()
732 link->l_cap_csum = cap; in viona_get_mac_capab()
735 if ((link->l_features_hw & VIRTIO_NET_F_CSUM) && in viona_get_mac_capab()
745 link->l_features_hw |= VIRTIO_NET_F_HOST_TSO4; in viona_get_mac_capab()
752 viona_link_t *link = ksp->ks_private; in viona_kstat_update() local
760 mutex_enter(&link->l_stats_lock); in viona_kstat_update()
763 &link->l_vrings[VIONA_VQ_RX].vr_stats; in viona_kstat_update()
764 const viona_transfer_stats_t *link_stats = &link->l_stats.vls_rx; in viona_kstat_update()
775 ring_stats = &link->l_vrings[VIONA_VQ_TX].vr_stats; in viona_kstat_update()
776 link_stats = &link->l_stats.vls_tx; in viona_kstat_update()
787 mutex_exit(&link->l_stats_lock); in viona_kstat_update()
854 viona_link_t *link = NULL; in viona_ioc_create() local
898 link = kmem_zalloc(sizeof (viona_link_t), KM_SLEEP); in viona_ioc_create()
899 link->l_linkid = kvc.c_linkid; in viona_ioc_create()
900 link->l_vm_hold = hold; in viona_ioc_create()
901 link->l_mtu = VIONA_DEFAULT_MTU; in viona_ioc_create()
903 err = mac_open_by_linkid(link->l_linkid, &link->l_mh); in viona_ioc_create()
908 viona_get_mac_capab(link); in viona_ioc_create()
909 viona_params_get_defaults(&link->l_params); in viona_ioc_create()
912 link->l_linkid); in viona_ioc_create()
913 err = mac_client_open(link->l_mh, &link->l_mch, cli_name, 0); in viona_ioc_create()
918 err = mac_unicast_add(link->l_mch, NULL, MAC_UNICAST_PRIMARY, in viona_ioc_create()
919 &link->l_muh, VLAN_ID_NONE, &mac_diag); in viona_ioc_create()
924 viona_ring_alloc(link, &link->l_vrings[VIONA_VQ_RX]); in viona_ioc_create()
925 viona_ring_alloc(link, &link->l_vrings[VIONA_VQ_TX]); in viona_ioc_create()
934 link->l_promisc = VIONA_PROMISC_MULTI; in viona_ioc_create()
935 if ((err = viona_rx_set(link, link->l_promisc)) != 0) { in viona_ioc_create()
939 link->l_neti = nip; in viona_ioc_create()
940 ss->ss_link = link; in viona_ioc_create()
955 if (link != NULL) { in viona_ioc_create()
956 viona_rx_clear(link); in viona_ioc_create()
957 if (link->l_mch != NULL) { in viona_ioc_create()
958 if (link->l_muh != NULL) { in viona_ioc_create()
959 VERIFY0(mac_unicast_remove(link->l_mch, in viona_ioc_create()
960 link->l_muh)); in viona_ioc_create()
961 link->l_muh = NULL; in viona_ioc_create()
963 mac_client_close(link->l_mch, 0); in viona_ioc_create()
965 if (link->l_mh != NULL) { in viona_ioc_create()
966 mac_close(link->l_mh); in viona_ioc_create()
969 viona_ring_free(&link->l_vrings[VIONA_VQ_RX]); in viona_ioc_create()
970 viona_ring_free(&link->l_vrings[VIONA_VQ_TX]); in viona_ioc_create()
972 kmem_free(link, sizeof (viona_link_t)); in viona_ioc_create()
987 viona_link_t *link; in viona_ioc_delete() local
991 if ((link = ss->ss_link) == NULL) { in viona_ioc_delete()
997 if (link->l_destroyed) { in viona_ioc_delete()
1012 link->l_destroyed = B_TRUE; in viona_ioc_delete()
1018 VERIFY0(viona_ioc_set_notify_ioport(link, 0)); in viona_ioc_delete()
1025 VERIFY0(viona_ring_reset(&link->l_vrings[VIONA_VQ_RX], B_FALSE)); in viona_ioc_delete()
1026 VERIFY0(viona_ring_reset(&link->l_vrings[VIONA_VQ_TX], B_FALSE)); in viona_ioc_delete()
1030 if (link->l_mch != NULL) { in viona_ioc_delete()
1032 viona_rx_clear(link); in viona_ioc_delete()
1033 if (link->l_muh != NULL) { in viona_ioc_delete()
1034 VERIFY0(mac_unicast_remove(link->l_mch, link->l_muh)); in viona_ioc_delete()
1035 link->l_muh = NULL; in viona_ioc_delete()
1037 mac_client_close(link->l_mch, 0); in viona_ioc_delete()
1039 if (link->l_mh != NULL) { in viona_ioc_delete()
1040 mac_close(link->l_mh); in viona_ioc_delete()
1042 if (link->l_vm_hold != NULL) { in viona_ioc_delete()
1043 vmm_drv_rele(link->l_vm_hold); in viona_ioc_delete()
1044 link->l_vm_hold = NULL; in viona_ioc_delete()
1047 nip = link->l_neti; in viona_ioc_delete()
1048 link->l_neti = NULL; in viona_ioc_delete()
1050 viona_ring_free(&link->l_vrings[VIONA_VQ_RX]); in viona_ioc_delete()
1051 viona_ring_free(&link->l_vrings[VIONA_VQ_TX]); in viona_ioc_delete()
1052 pollhead_clean(&link->l_pollhead); in viona_ioc_delete()
1062 kmem_free(link, sizeof (viona_link_t)); in viona_ioc_delete()
1067 viona_ioc_ring_init(viona_link_t *link, void *udata, int md) in viona_ioc_ring_init() argument
1082 err = viona_ring_init(link, kri.ri_index, &params); in viona_ioc_ring_init()
1088 viona_ioc_ring_set_state(viona_link_t *link, void *udata, int md) in viona_ioc_ring_set_state() argument
1103 err = viona_ring_init(link, krs.vrs_index, &params); in viona_ioc_ring_set_state()
1109 viona_ioc_ring_get_state(viona_link_t *link, void *udata, int md) in viona_ioc_ring_get_state() argument
1118 int err = viona_ring_get_state(link, krs.vrs_index, &params); in viona_ioc_ring_get_state()
1134 viona_ioc_ring_reset(viona_link_t *link, uint_t idx) in viona_ioc_ring_reset() argument
1141 ring = &link->l_vrings[idx]; in viona_ioc_ring_reset()
1147 viona_ioc_ring_kick(viona_link_t *link, uint_t idx) in viona_ioc_ring_kick() argument
1155 ring = &link->l_vrings[idx]; in viona_ioc_ring_kick()
1183 viona_ioc_ring_pause(viona_link_t *link, uint_t idx) in viona_ioc_ring_pause() argument
1189 viona_vring_t *ring = &link->l_vrings[idx]; in viona_ioc_ring_pause()
1194 viona_ioc_ring_set_msi(viona_link_t *link, void *data, int md) in viona_ioc_ring_set_msi() argument
1206 ring = &link->l_vrings[vrm.rm_index]; in viona_ioc_ring_set_msi()
1219 viona_link_t *link = (viona_link_t *)arg; in viona_notify_iop() local
1225 if (in || port != link->l_notify_ioport) { in viona_notify_iop()
1235 viona_vring_t *ring = &link->l_vrings[vq]; in viona_notify_iop()
1250 viona_ioc_set_notify_ioport(viona_link_t *link, uint16_t ioport) in viona_ioc_set_notify_ioport() argument
1254 if (link->l_notify_ioport != 0) { in viona_ioc_set_notify_ioport()
1255 vmm_drv_ioport_unhook(link->l_vm_hold, &link->l_notify_cookie); in viona_ioc_set_notify_ioport()
1256 link->l_notify_ioport = 0; in viona_ioc_set_notify_ioport()
1260 err = vmm_drv_ioport_hook(link->l_vm_hold, ioport, in viona_ioc_set_notify_ioport()
1261 viona_notify_iop, (void *)link, &link->l_notify_cookie); in viona_ioc_set_notify_ioport()
1263 link->l_notify_ioport = ioport; in viona_ioc_set_notify_ioport()
1270 viona_ioc_set_promisc(viona_link_t *link, viona_promisc_t mode) in viona_ioc_set_promisc() argument
1278 if (mode == link->l_promisc) { in viona_ioc_set_promisc()
1282 if ((err = viona_rx_set(link, mode)) != 0) { in viona_ioc_set_promisc()
1286 link->l_promisc = mode; in viona_ioc_set_promisc()
1367 viona_ioc_get_params(viona_link_t *link, void *udata, int md) in viona_ioc_get_params() argument
1377 if (link != NULL) { in viona_ioc_get_params()
1378 nvl = viona_params_to_nvlist(&link->l_params); in viona_ioc_get_params()
1414 viona_ioc_set_params(viona_link_t *link, void *udata, int md) in viona_ioc_set_params() argument
1448 bcopy(&link->l_params, &new_params, in viona_ioc_set_params()
1457 bcopy(&new_params, &link->l_params, in viona_ioc_set_params()
1502 viona_ioc_ring_intr_clear(viona_link_t *link, uint_t idx) in viona_ioc_ring_intr_clear() argument
1508 link->l_vrings[idx].vr_intr_enabled = 0; in viona_ioc_ring_intr_clear()
1513 viona_ioc_intr_poll(viona_link_t *link, void *udata, int md, int *rv) in viona_ioc_intr_poll() argument
1519 uint_t val = link->l_vrings[i].vr_intr_enabled; in viona_ioc_intr_poll()