Lines Matching refs:headlessif
291 headless_set_detaching(if_headless_ref headlessif) in headless_set_detaching() argument
293 headlessif->iff_flags |= IFF_FLAGS_DETACHING; in headless_set_detaching()
297 headless_is_detaching(if_headless_ref headlessif) in headless_is_detaching() argument
299 return (headlessif->iff_flags & IFF_FLAGS_DETACHING) != 0; in headless_is_detaching()
303 headless_using_multibuflets(if_headless_ref headlessif) in headless_using_multibuflets() argument
305 return (headlessif->iff_flags & IFF_FLAGS_MULTIBUFLETS) != 0; in headless_using_multibuflets()
315 static void headless_ifnet_set_attrs(if_headless_ref headlessif, ifnet_t ifp);
316 static void headless_free(if_headless_ref headlessif);
370 if_headless_ref headlessif; in headless_max_mtu() local
374 headlessif = ifnet_get_if_headless(ifp); in headless_max_mtu()
375 if (headlessif != NULL) { in headless_max_mtu()
376 max_mtu = headlessif->iff_max_mtu; in headless_max_mtu()
390 headless_free(if_headless_ref headlessif) in headless_free() argument
392 assert(headlessif->iff_retain_count == 0); in headless_free()
393 if (headlessif->iff_fpp != NULL) { in headless_free()
394 headless_packet_pool_free(headlessif->iff_fpp); in headless_free()
397 HEADLESS_DPRINTF("%s\n", headlessif->iff_name); in headless_free()
398 if_clone_softc_deallocate(headlessif->iff_cloner, headlessif); in headless_free()
402 headless_release(if_headless_ref headlessif) in headless_release() argument
406 old_retain_count = OSDecrementAtomic(&headlessif->iff_retain_count); in headless_release()
412 headless_free(headlessif); in headless_release()
421 headless_retain(if_headless_ref headlessif) in headless_retain() argument
423 OSIncrementAtomic(&headlessif->iff_retain_count); in headless_retain()
535 if_headless_ref headlessif; in headless_nexus_context() local
537 headlessif = (if_headless_ref)kern_nexus_get_context(nexus); in headless_nexus_context()
538 assert(headlessif != NULL); in headless_nexus_context()
539 return headlessif; in headless_nexus_context()
547 if_headless_ref headlessif; in headless_nx_ring_init() local
550 headlessif = headless_nexus_context(nexus); in headless_nx_ring_init()
551 if (headless_is_detaching(headlessif)) { in headless_nx_ring_init()
556 assert(headlessif->iff_tx_ring[0] == NULL); in headless_nx_ring_init()
557 headlessif->iff_tx_ring[0] = ring; in headless_nx_ring_init()
559 assert(headlessif->iff_rx_ring[0] == NULL); in headless_nx_ring_init()
560 headlessif->iff_rx_ring[0] = ring; in headless_nx_ring_init()
564 headlessif->iff_name, is_tx_ring ? "TX" : "RX"); in headless_nx_ring_init()
573 if_headless_ref headlessif; in headless_nx_ring_fini() local
577 headlessif = headless_nexus_context(nexus); in headless_nx_ring_fini()
578 if (headlessif->iff_rx_ring[0] == ring) { in headless_nx_ring_fini()
579 headlessif->iff_rx_ring[0] = NULL; in headless_nx_ring_fini()
580 HEADLESS_DPRINTF("%s: RX ring fini\n", headlessif->iff_name); in headless_nx_ring_fini()
581 } else if (headlessif->iff_tx_ring[0] == ring) { in headless_nx_ring_fini()
582 tcall = headlessif->iff_doorbell_tcall; in headless_nx_ring_fini()
583 headlessif->iff_doorbell_tcall = NULL; in headless_nx_ring_fini()
584 headlessif->iff_tx_ring[0] = NULL; in headless_nx_ring_fini()
592 headlessif->iff_name, in headless_nx_ring_fini()
596 if (headlessif->iff_tcall_active) { in headless_nx_ring_fini()
597 headlessif->iff_waiting_for_tcall = TRUE; in headless_nx_ring_fini()
599 headlessif->iff_name); in headless_nx_ring_fini()
601 msleep(headlessif, &headless_lck_mtx, in headless_nx_ring_fini()
603 } while (headlessif->iff_tcall_active); in headless_nx_ring_fini()
605 headlessif->iff_name); in headless_nx_ring_fini()
606 headlessif->iff_waiting_for_tcall = FALSE; in headless_nx_ring_fini()
612 headlessif->iff_name, in headless_nx_ring_fini()
614 headless_release(headlessif); in headless_nx_ring_fini()
633 if_headless_ref headlessif; in headless_nx_connected() local
635 headlessif = headless_nexus_context(nexus); in headless_nx_connected()
637 if (headless_is_detaching(headlessif)) { in headless_nx_connected()
641 headless_retain(headlessif); in headless_nx_connected()
642 headlessif->iff_channel_connected = TRUE; in headless_nx_connected()
645 headlessif->iff_name, channel); in headless_nx_connected()
654 if_headless_ref headlessif; in headless_nx_pre_disconnect() local
656 headlessif = headless_nexus_context(nexus); in headless_nx_pre_disconnect()
658 headlessif->iff_name, channel); in headless_nx_pre_disconnect()
660 if_down(headlessif->iff_ifp); in headless_nx_pre_disconnect()
662 headlessif->iff_channel_connected = FALSE; in headless_nx_pre_disconnect()
671 if_headless_ref headlessif; in headless_nx_disconnected() local
673 headlessif = headless_nexus_context(nexus); in headless_nx_disconnected()
675 headlessif->iff_name, channel); in headless_nx_disconnected()
676 headless_release(headlessif); in headless_nx_disconnected()
702 if_headless_ref headlessif; in headless_nx_sync_tx() local
712 headlessif = headless_nexus_context(nexus); in headless_nx_sync_tx()
713 HEADLESS_DPRINTF("%s ring %d flags 0x%x\n", headlessif->iff_name, in headless_nx_sync_tx()
717 if (headless_is_detaching(headlessif) || in headless_nx_sync_tx()
718 !headlessif->iff_channel_connected) { in headless_nx_sync_tx()
723 ifp = headlessif->iff_ifp; in headless_nx_sync_tx()
733 kern_pbufpool_free(headlessif->iff_fpp->fpp_pp, ph); in headless_nx_sync_tx()
751 if_headless_ref headlessif; in headless_nx_sync_rx_null() local
754 headlessif = headless_nexus_context(nexus); in headless_nx_sync_rx_null()
755 HEADLESS_DPRINTF("%s:\n", headlessif->iff_name); in headless_nx_sync_rx_null()
765 if_headless_ref headlessif; in headless_nx_sync_rx() local
776 headlessif = headless_nexus_context(nexus); in headless_nx_sync_rx()
777 HEADLESS_DPRINTF("%s ring %d flags 0x%x\n", headlessif->iff_name, in headless_nx_sync_rx()
781 if (headless_is_detaching(headlessif) || in headless_nx_sync_rx()
782 !headlessif->iff_channel_connected) { in headless_nx_sync_rx()
787 ifp = headlessif->iff_ifp; in headless_nx_sync_rx()
789 kern_pbufpool_t pp = headlessif->iff_fpp->fpp_pp; in headless_nx_sync_rx()
838 if_headless_ref headlessif = (if_headless_ref)arg0; in headless_async_doorbell() local
843 ring = headlessif->iff_tx_ring[0]; in headless_async_doorbell()
844 if (headless_is_detaching(headlessif) || in headless_async_doorbell()
845 !headlessif->iff_channel_connected || in headless_async_doorbell()
849 headlessif->iff_tcall_active = TRUE; in headless_async_doorbell()
855 headlessif->iff_name, error); in headless_async_doorbell()
857 HEADLESS_DPRINTF("%s: TX refilled\n", headlessif->iff_name); in headless_async_doorbell()
862 headlessif->iff_tcall_active = FALSE; in headless_async_doorbell()
863 if (headlessif->iff_waiting_for_tcall) { in headless_async_doorbell()
865 headlessif->iff_name); in headless_async_doorbell()
866 wakeup((caddr_t)headlessif); in headless_async_doorbell()
872 headless_schedule_async_doorbell(if_headless_ref headlessif) in headless_schedule_async_doorbell() argument
877 if (headless_is_detaching(headlessif) || in headless_schedule_async_doorbell()
878 !headlessif->iff_channel_connected) { in headless_schedule_async_doorbell()
882 tcall = headlessif->iff_doorbell_tcall; in headless_schedule_async_doorbell()
887 (thread_call_param_t)headlessif, in headless_schedule_async_doorbell()
892 __func__, headlessif->iff_name); in headless_schedule_async_doorbell()
894 headlessif->iff_doorbell_tcall = tcall; in headless_schedule_async_doorbell()
895 headless_retain(headlessif); in headless_schedule_async_doorbell()
908 if_headless_ref headlessif; in headless_nx_tx_doorbell() local
910 headlessif = headless_nexus_context(nexus); in headless_nx_tx_doorbell()
911 HEADLESS_DPRINTF("%s\n", headlessif->iff_name); in headless_nx_tx_doorbell()
920 headlessif->iff_name, error); in headless_nx_tx_doorbell()
923 headlessif->iff_name); in headless_nx_tx_doorbell()
927 headlessif->iff_name); in headless_nx_tx_doorbell()
928 headless_schedule_async_doorbell(headlessif); in headless_nx_tx_doorbell()
936 if_headless_ref headlessif; in headless_netif_prepare() local
938 headlessif = (if_headless_ref)kern_nexus_get_context(nexus); in headless_netif_prepare()
939 headless_ifnet_set_attrs(headlessif, ifp); in headless_netif_prepare()
944 create_netif_provider_and_instance(if_headless_ref headlessif, in create_netif_provider_and_instance() argument
969 if (headlessif->iff_cloner == &headless_zero_cloner) { in create_netif_provider_and_instance()
972 } else if (headlessif->iff_cloner == &headless_null_cloner) { in create_netif_provider_and_instance()
980 "com.apple.netif.%s", headlessif->iff_name); in create_netif_provider_and_instance()
999 net_init.nxneti_rx_pbufpool = headlessif->iff_fpp->fpp_pp; in create_netif_provider_and_instance()
1000 net_init.nxneti_tx_pbufpool = headlessif->iff_fpp->fpp_pp; in create_netif_provider_and_instance()
1003 headlessif, in create_netif_provider_and_instance()
1026 headless_attach_netif_nexus(if_headless_ref headlessif, in headless_attach_netif_nexus() argument
1030 headless_nx_t nx = &headlessif->iff_nx; in headless_attach_netif_nexus()
1033 multi_buflet = headless_using_multibuflets(headlessif); in headless_attach_netif_nexus()
1034 fpp = headless_packet_pool_alloc(multi_buflet, headlessif->iff_max_mtu); in headless_attach_netif_nexus()
1038 headlessif->iff_fpp = fpp; in headless_attach_netif_nexus()
1039 return create_netif_provider_and_instance(headlessif, init_params, ifp, in headless_attach_netif_nexus()
1080 headless_ifnet_set_attrs(if_headless_ref headlessif, ifnet_t ifp) in headless_ifnet_set_attrs() argument
1090 if ((headlessif->iff_flags & IFF_FLAGS_HWCSUM) != 0) { in headless_ifnet_set_attrs()
1133 if_headless_ref headlessif; in headless_clone_create() local
1138 headlessif = if_clone_softc_allocate(ifc); in headless_clone_create()
1139 if (headlessif == NULL) { in headless_clone_create()
1142 headlessif->iff_retain_count = 1; in headless_clone_create()
1144 headlessif->iff_cloner = &headless_zero_cloner; in headless_clone_create()
1148 headlessif->iff_cloner = &headless_null_cloner; in headless_clone_create()
1154 headlessif->iff_max_mtu = if_headless_max_mtu; in headless_clone_create()
1158 snprintf(headlessif->iff_name, sizeof(headlessif->iff_name), "%s%d", in headless_clone_create()
1159 ifc->ifc_name, unit) >= sizeof(headlessif->iff_name)) { in headless_clone_create()
1160 headless_release(headlessif); in headless_clone_create()
1168 headlessif->iff_flags |= IFF_FLAGS_MULTIBUFLETS; in headless_clone_create()
1171 headlessif->iff_tx_headroom = if_headless_tx_headroom; in headless_clone_create()
1172 headless_init.tx_headroom = headlessif->iff_tx_headroom; in headless_clone_create()
1176 headless_init.uniqueid = headlessif->iff_name; in headless_clone_create()
1177 headless_init.uniqueid_len = (uint32_t)strlen(headlessif->iff_name); in headless_clone_create()
1187 headless_init.softc = headlessif; in headless_clone_create()
1193 error = headless_attach_netif_nexus(headlessif, &headless_init, &ifp); in headless_clone_create()
1195 headless_release(headlessif); in headless_clone_create()
1199 headless_retain(headlessif); in headless_clone_create()
1200 headlessif->iff_ifp = ifp; in headless_clone_create()
1201 headlessif->iff_media_count = default_media_words_count; in headless_clone_create()
1202 bcopy(default_media_words, headlessif->iff_media_list, in headless_clone_create()
1217 if_headless_ref headlessif; in headless_clone_destroy() local
1223 headlessif = ifnet_get_if_headless(ifp); in headless_clone_destroy()
1224 if (headlessif == NULL || headless_is_detaching(headlessif)) { in headless_clone_destroy()
1228 headless_set_detaching(headlessif); in headless_clone_destroy()
1230 nx = headlessif->iff_nx; in headless_clone_destroy()
1231 bzero(&headlessif->iff_nx, sizeof(headlessif->iff_nx)); in headless_clone_destroy()
1236 headless_release(headlessif); in headless_clone_destroy()
1245 if_headless_ref headlessif; in headless_set_media() local
1253 headlessif = ifnet_get_if_headless(ifp); in headless_set_media()
1254 if (headlessif == NULL) { in headless_set_media()
1258 headlessif->iff_media_count = iffr->iffr_media.iffm_count; in headless_set_media()
1259 bcopy(iffr->iffr_media.iffm_list, headlessif->iff_media_list, in headless_set_media()
1260 iffr->iffr_media.iffm_count * sizeof(headlessif->iff_media_list[0])); in headless_set_media()
1264 headlessif->iff_media_current = iffr->iffr_media.iffm_current; in headless_set_media()
1349 if_headless_ref headlessif; in headless_ioctl() local
1362 headlessif = ifnet_get_if_headless(ifp); in headless_ioctl()
1363 if (headlessif == NULL) { in headless_ioctl()
1367 status = (headlessif->iff_peer != NULL) in headless_ioctl()
1379 ifmr->ifm_count = headlessif->iff_media_count; in headless_ioctl()
1381 if (count > headlessif->iff_media_count) { in headless_ioctl()
1382 count = headlessif->iff_media_count; in headless_ioctl()
1385 error = copyout(&headlessif->iff_media_list, user_addr, in headless_ioctl()
1469 if_headless_ref headlessif; in headless_if_free() local
1475 headlessif = ifnet_get_if_headless(ifp); in headless_if_free()
1476 if (headlessif == NULL) { in headless_if_free()
1481 assert(headlessif->iff_doorbell_tcall == NULL); in headless_if_free()
1483 headless_release(headlessif); in headless_if_free()