Lines Matching refs:mip
529 mac_impl_t *mip = buf; in i_mac_constructor() local
533 mip->mi_linkstate = LINK_STATE_UNKNOWN; in i_mac_constructor()
535 rw_init(&mip->mi_rw_lock, NULL, RW_DRIVER, NULL); in i_mac_constructor()
536 mutex_init(&mip->mi_notify_lock, NULL, MUTEX_DRIVER, NULL); in i_mac_constructor()
537 mutex_init(&mip->mi_promisc_lock, NULL, MUTEX_DRIVER, NULL); in i_mac_constructor()
538 mutex_init(&mip->mi_ring_lock, NULL, MUTEX_DEFAULT, NULL); in i_mac_constructor()
540 mip->mi_notify_cb_info.mcbi_lockp = &mip->mi_notify_lock; in i_mac_constructor()
541 cv_init(&mip->mi_notify_cb_info.mcbi_cv, NULL, CV_DRIVER, NULL); in i_mac_constructor()
542 mip->mi_promisc_cb_info.mcbi_lockp = &mip->mi_promisc_lock; in i_mac_constructor()
543 cv_init(&mip->mi_promisc_cb_info.mcbi_cv, NULL, CV_DRIVER, NULL); in i_mac_constructor()
545 mutex_init(&mip->mi_bridge_lock, NULL, MUTEX_DEFAULT, NULL); in i_mac_constructor()
554 mac_impl_t *mip = buf; in i_mac_destructor() local
557 ASSERT(mip->mi_ref == 0); in i_mac_destructor()
558 ASSERT(mip->mi_active == 0); in i_mac_destructor()
559 ASSERT(mip->mi_linkstate == LINK_STATE_UNKNOWN); in i_mac_destructor()
560 ASSERT(mip->mi_devpromisc == 0); in i_mac_destructor()
561 ASSERT(mip->mi_ksp == NULL); in i_mac_destructor()
562 ASSERT(mip->mi_kstat_count == 0); in i_mac_destructor()
563 ASSERT(mip->mi_nclients == 0); in i_mac_destructor()
564 ASSERT(mip->mi_nactiveclients == 0); in i_mac_destructor()
565 ASSERT(mip->mi_single_active_client == NULL); in i_mac_destructor()
566 ASSERT(mip->mi_state_flags == 0); in i_mac_destructor()
567 ASSERT(mip->mi_factory_addr == NULL); in i_mac_destructor()
568 ASSERT(mip->mi_factory_addr_num == 0); in i_mac_destructor()
569 ASSERT(mip->mi_default_tx_ring == NULL); in i_mac_destructor()
571 mcbi = &mip->mi_notify_cb_info; in i_mac_destructor()
573 ASSERT(mip->mi_notify_bits == 0); in i_mac_destructor()
574 ASSERT(mip->mi_notify_thread == NULL); in i_mac_destructor()
575 ASSERT(mcbi->mcbi_lockp == &mip->mi_notify_lock); in i_mac_destructor()
578 mcbi = &mip->mi_promisc_cb_info; in i_mac_destructor()
579 ASSERT(mcbi->mcbi_del_cnt == 0 && mip->mi_promisc_list == NULL); in i_mac_destructor()
580 ASSERT(mip->mi_promisc_list == NULL); in i_mac_destructor()
581 ASSERT(mcbi->mcbi_lockp == &mip->mi_promisc_lock); in i_mac_destructor()
584 ASSERT(mip->mi_bcast_ngrps == 0 && mip->mi_bcast_grp == NULL); in i_mac_destructor()
585 ASSERT(mip->mi_perim_owner == NULL && mip->mi_perim_ocnt == 0); in i_mac_destructor()
587 rw_destroy(&mip->mi_rw_lock); in i_mac_destructor()
589 mutex_destroy(&mip->mi_promisc_lock); in i_mac_destructor()
590 cv_destroy(&mip->mi_promisc_cb_info.mcbi_cv); in i_mac_destructor()
591 mutex_destroy(&mip->mi_notify_lock); in i_mac_destructor()
592 cv_destroy(&mip->mi_notify_cb_info.mcbi_cv); in i_mac_destructor()
593 mutex_destroy(&mip->mi_ring_lock); in i_mac_destructor()
595 ASSERT(mip->mi_bridge_link == NULL); in i_mac_destructor()
791 i_mac_promisc_walker_cleanup(mac_impl_t *mip) in i_mac_promisc_walker_cleanup() argument
803 rmlist = mac_callback_walker_cleanup(&mip->mi_promisc_cb_info, in i_mac_promisc_walker_cleanup()
804 &mip->mi_promisc_list); in i_mac_promisc_walker_cleanup()
809 VERIFY(mac_callback_remove(&mip->mi_promisc_cb_info, in i_mac_promisc_walker_cleanup()
818 i_mac_notify(mac_impl_t *mip, mac_notify_type_t type) in i_mac_notify() argument
830 if (mip->mi_state_flags & MIS_DISABLED) in i_mac_notify()
840 mcbi = &mip->mi_notify_cb_info; in i_mac_notify()
842 mip->mi_notify_bits |= (1 << type); in i_mac_notify()
855 i_mac_perim_enter(mac_impl_t *mip) in i_mac_perim_enter() argument
859 if (mip->mi_state_flags & MIS_IS_VNIC) { in i_mac_perim_enter()
864 mcip = mac_vnic_lower(mip); in i_mac_perim_enter()
865 mip = mcip->mci_mip; in i_mac_perim_enter()
868 mutex_enter(&mip->mi_perim_lock); in i_mac_perim_enter()
869 if (mip->mi_perim_owner == curthread) { in i_mac_perim_enter()
870 mip->mi_perim_ocnt++; in i_mac_perim_enter()
871 mutex_exit(&mip->mi_perim_lock); in i_mac_perim_enter()
875 while (mip->mi_perim_owner != NULL) in i_mac_perim_enter()
876 cv_wait(&mip->mi_perim_cv, &mip->mi_perim_lock); in i_mac_perim_enter()
878 mip->mi_perim_owner = curthread; in i_mac_perim_enter()
879 ASSERT(mip->mi_perim_ocnt == 0); in i_mac_perim_enter()
880 mip->mi_perim_ocnt++; in i_mac_perim_enter()
882 mip->mi_perim_stack_depth = getpcstack(mip->mi_perim_stack, in i_mac_perim_enter()
885 mutex_exit(&mip->mi_perim_lock); in i_mac_perim_enter()
889 i_mac_perim_enter_nowait(mac_impl_t *mip) in i_mac_perim_enter_nowait() argument
898 if (mip->mi_state_flags & MIS_IS_VNIC) { in i_mac_perim_enter_nowait()
899 i_mac_perim_enter(mip); in i_mac_perim_enter_nowait()
903 mutex_enter(&mip->mi_perim_lock); in i_mac_perim_enter_nowait()
904 if (mip->mi_perim_owner != NULL) { in i_mac_perim_enter_nowait()
905 mutex_exit(&mip->mi_perim_lock); in i_mac_perim_enter_nowait()
908 ASSERT(mip->mi_perim_ocnt == 0); in i_mac_perim_enter_nowait()
909 mip->mi_perim_owner = curthread; in i_mac_perim_enter_nowait()
910 mip->mi_perim_ocnt++; in i_mac_perim_enter_nowait()
911 mutex_exit(&mip->mi_perim_lock); in i_mac_perim_enter_nowait()
917 i_mac_perim_exit(mac_impl_t *mip) in i_mac_perim_exit() argument
921 if (mip->mi_state_flags & MIS_IS_VNIC) { in i_mac_perim_exit()
926 mcip = mac_vnic_lower(mip); in i_mac_perim_exit()
927 mip = mcip->mci_mip; in i_mac_perim_exit()
930 ASSERT(mip->mi_perim_owner == curthread && mip->mi_perim_ocnt != 0); in i_mac_perim_exit()
932 mutex_enter(&mip->mi_perim_lock); in i_mac_perim_exit()
933 if (--mip->mi_perim_ocnt == 0) { in i_mac_perim_exit()
934 mip->mi_perim_owner = NULL; in i_mac_perim_exit()
935 cv_signal(&mip->mi_perim_cv); in i_mac_perim_exit()
937 mutex_exit(&mip->mi_perim_lock); in i_mac_perim_exit()
947 mac_impl_t *mip = (mac_impl_t *)mh; in mac_perim_held() local
950 if (mip->mi_state_flags & MIS_IS_VNIC) { in mac_perim_held()
955 mcip = mac_vnic_lower(mip); in mac_perim_held()
956 mip = mcip->mci_mip; in mac_perim_held()
958 return (mip->mi_perim_owner == curthread); in mac_perim_held()
968 mac_impl_t *mip = (mac_impl_t *)mh; in mac_perim_enter_by_mh() local
970 i_mac_perim_enter(mip); in mac_perim_enter_by_mh()
976 MAC_ENCODE_MPH(*mphp, mip, 0); in mac_perim_enter_by_mh()
1010 mac_impl_t *mip; in mac_perim_exit() local
1013 MAC_DECODE_MPH(mph, mip, need_close); in mac_perim_exit()
1014 i_mac_perim_exit(mip); in mac_perim_exit()
1016 mac_close((mac_handle_t)mip); in mac_perim_exit()
1022 mac_impl_t *mip; in mac_hold() local
1037 (mod_hash_val_t *)&mip); in mac_hold()
1044 if (mip->mi_state_flags & MIS_DISABLED) { in mac_hold()
1049 if (mip->mi_state_flags & MIS_EXCLUSIVE_HELD) { in mac_hold()
1054 mip->mi_ref++; in mac_hold()
1057 *pmip = mip; in mac_hold()
1062 mac_rele(mac_impl_t *mip) in mac_rele() argument
1065 ASSERT(mip->mi_ref != 0); in mac_rele()
1066 if (--mip->mi_ref == 0) { in mac_rele()
1067 ASSERT(mip->mi_nactiveclients == 0 && in mac_rele()
1068 !(mip->mi_state_flags & MIS_EXCLUSIVE)); in mac_rele()
1079 mac_impl_t *mip = (mac_impl_t *)mh; in mac_start() local
1083 ASSERT(MAC_PERIM_HELD((mac_handle_t)mip)); in mac_start()
1084 ASSERT(mip->mi_start != NULL); in mac_start()
1089 if (mip->mi_active++ == 0) { in mac_start()
1095 err = mip->mi_start(mip->mi_driver); in mac_start()
1097 mip->mi_active--; in mac_start()
1104 if (mip->mi_default_tx_ring != NULL) { in mac_start()
1106 ring = (mac_ring_t *)mip->mi_default_tx_ring; in mac_start()
1110 mip->mi_active--; in mac_start()
1116 if ((defgrp = MAC_DEFAULT_RX_GROUP(mip)) != NULL) { in mac_start()
1125 mip->mi_active--; in mac_start()
1144 mac_impl_t *mip = (mac_impl_t *)mh; in mac_stop() local
1147 ASSERT(mip->mi_stop != NULL); in mac_stop()
1148 ASSERT(MAC_PERIM_HELD((mac_handle_t)mip)); in mac_stop()
1153 ASSERT(mip->mi_active != 0); in mac_stop()
1154 if (--mip->mi_active == 0) { in mac_stop()
1155 if ((grp = MAC_DEFAULT_RX_GROUP(mip)) != NULL) { in mac_stop()
1171 mip->mi_nactiveclients == 0); in mac_stop()
1176 if (mip->mi_default_tx_ring != NULL) { in mac_stop()
1179 ring = (mac_ring_t *)mip->mi_default_tx_ring; in mac_stop()
1189 mip->mi_stop(mip->mi_driver); in mac_stop()
1194 i_mac_promisc_set(mac_impl_t *mip, boolean_t on) in i_mac_promisc_set() argument
1198 ASSERT(MAC_PERIM_HELD((mac_handle_t)mip)); in i_mac_promisc_set()
1199 ASSERT(mip->mi_setpromisc != NULL); in i_mac_promisc_set()
1205 if (mip->mi_devpromisc++ == 0) { in i_mac_promisc_set()
1206 err = mip->mi_setpromisc(mip->mi_driver, B_TRUE); in i_mac_promisc_set()
1208 mip->mi_devpromisc--; in i_mac_promisc_set()
1211 i_mac_notify(mip, MAC_NOTE_DEVPROMISC); in i_mac_promisc_set()
1214 if (mip->mi_devpromisc == 0) in i_mac_promisc_set()
1221 if (--mip->mi_devpromisc == 0) { in i_mac_promisc_set()
1222 err = mip->mi_setpromisc(mip->mi_driver, B_FALSE); in i_mac_promisc_set()
1224 mip->mi_devpromisc++; in i_mac_promisc_set()
1227 i_mac_notify(mip, MAC_NOTE_DEVPROMISC); in i_mac_promisc_set()
1242 mac_impl_t *mip = (mac_impl_t *)mh; in mac_promisc_get() local
1247 return (mip->mi_devpromisc != 0); in mac_promisc_get()
1259 mac_addr_factory_init(mac_impl_t *mip) in mac_addr_factory_init() argument
1269 if (!i_mac_capab_get((mac_handle_t)mip, MAC_CAPAB_MULTIFACTADDR, in mac_addr_factory_init()
1282 capab.mcm_getaddr(mip->mi_driver, capab.mcm_naddr, addr); in mac_addr_factory_init()
1284 mip->mi_factory_addr_num = capab.mcm_naddr; in mac_addr_factory_init()
1285 mip->mi_factory_addr = kmem_zalloc(mip->mi_factory_addr_num * in mac_addr_factory_init()
1290 mip->mi_factory_addr[i].mfa_addr, in mac_addr_factory_init()
1291 mip->mi_type->mt_addr_length); in mac_addr_factory_init()
1292 mip->mi_factory_addr[i].mfa_in_use = B_FALSE; in mac_addr_factory_init()
1299 mac_addr_factory_fini(mac_impl_t *mip) in mac_addr_factory_fini() argument
1301 if (mip->mi_factory_addr == NULL) { in mac_addr_factory_fini()
1302 ASSERT(mip->mi_factory_addr_num == 0); in mac_addr_factory_fini()
1306 kmem_free(mip->mi_factory_addr, mip->mi_factory_addr_num * in mac_addr_factory_fini()
1309 mip->mi_factory_addr = NULL; in mac_addr_factory_fini()
1310 mip->mi_factory_addr_num = 0; in mac_addr_factory_fini()
1327 mac_impl_t *mip = mcip->mci_mip; in mac_addr_factory_reserve() local
1330 i_mac_perim_enter(mip); in mac_addr_factory_reserve()
1335 rw_enter(&mip->mi_rw_lock, RW_WRITER); in mac_addr_factory_reserve()
1337 if (mip->mi_factory_addr_num == 0) { in mac_addr_factory_reserve()
1344 if (*slot < 1 || *slot > mip->mi_factory_addr_num) { in mac_addr_factory_reserve()
1348 if (mip->mi_factory_addr[*slot-1].mfa_in_use) { in mac_addr_factory_reserve()
1354 for (i = 0; i < mip->mi_factory_addr_num; i++) { in mac_addr_factory_reserve()
1355 if (!mip->mi_factory_addr[i].mfa_in_use) in mac_addr_factory_reserve()
1359 if (i == mip->mi_factory_addr_num) { in mac_addr_factory_reserve()
1366 mip->mi_factory_addr[*slot-1].mfa_in_use = B_TRUE; in mac_addr_factory_reserve()
1367 mip->mi_factory_addr[*slot-1].mfa_client = mcip; in mac_addr_factory_reserve()
1370 rw_exit(&mip->mi_rw_lock); in mac_addr_factory_reserve()
1371 i_mac_perim_exit(mip); in mac_addr_factory_reserve()
1382 mac_impl_t *mip = mcip->mci_mip; in mac_addr_factory_release() local
1384 i_mac_perim_enter(mip); in mac_addr_factory_release()
1389 rw_enter(&mip->mi_rw_lock, RW_WRITER); in mac_addr_factory_release()
1391 ASSERT(slot > 0 && slot <= mip->mi_factory_addr_num); in mac_addr_factory_release()
1392 ASSERT(mip->mi_factory_addr[slot-1].mfa_in_use); in mac_addr_factory_release()
1394 mip->mi_factory_addr[slot-1].mfa_in_use = B_FALSE; in mac_addr_factory_release()
1396 rw_exit(&mip->mi_rw_lock); in mac_addr_factory_release()
1397 i_mac_perim_exit(mip); in mac_addr_factory_release()
1409 mac_impl_t *mip = (mac_impl_t *)mh; in mac_addr_factory_value() local
1412 ASSERT(slot > 0 && slot <= mip->mi_factory_addr_num); in mac_addr_factory_value()
1418 rw_enter(&mip->mi_rw_lock, RW_READER); in mac_addr_factory_value()
1419 bcopy(mip->mi_factory_addr[slot-1].mfa_addr, mac_addr, MAXMACADDRLEN); in mac_addr_factory_value()
1420 *addr_len = mip->mi_type->mt_addr_length; in mac_addr_factory_value()
1421 in_use = mip->mi_factory_addr[slot-1].mfa_in_use; in mac_addr_factory_value()
1423 bcopy(mip->mi_factory_addr[slot-1].mfa_client->mci_name, in mac_addr_factory_value()
1428 rw_exit(&mip->mi_rw_lock); in mac_addr_factory_value()
1439 mac_impl_t *mip = (mac_impl_t *)mh; in mac_addr_factory_num() local
1441 return (mip->mi_factory_addr_num); in mac_addr_factory_num()
1679 mac_impl_t *mip = mcip->mci_mip; in mac_hwring_send_priv() local
1681 MAC_TX(mip, rh, mp, mcip); in mac_hwring_send_priv()
1704 mac_impl_t *mip = (mac_impl_t *)mh; in mac_hwring_set_default() local
1708 VERIFY(mip->mi_state_flags & MIS_IS_AGGR); in mac_hwring_set_default()
1713 mip->mi_default_tx_ring = rh; in mac_hwring_set_default()
2096 mac_impl_t *mip = mcip->mci_mip; in mac_srs_perm_quiesce() local
2100 ASSERT(MAC_PERIM_HELD((mac_handle_t)mip)); in mac_srs_perm_quiesce()
2120 mac_impl_t *mip = mcip->mci_mip; in mac_rx_client_quiesce() local
2122 ASSERT(MAC_PERIM_HELD((mac_handle_t)mip)); in mac_rx_client_quiesce()
2136 mac_impl_t *mip = mcip->mci_mip; in mac_rx_client_restart() local
2138 ASSERT(MAC_PERIM_HELD((mac_handle_t)mip)); in mac_rx_client_restart()
2324 mac_impl_t *mip = (mac_impl_t *)mh; in mac_no_notification() local
2326 return (((mip->mi_state_flags & MIS_LEGACY) != 0) ? in mac_no_notification()
2327 mip->mi_capab_legacy.ml_unsup_note : 0); in mac_no_notification()
2334 i_mac_disable(mac_impl_t *mip) in i_mac_disable() argument
2339 if (mip->mi_state_flags & MIS_DISABLED) { in i_mac_disable()
2351 if (mip->mi_ref > 0) { in i_mac_disable()
2363 ASSERT(mip->mi_bcast_ngrps == 0); in i_mac_disable()
2371 mcip = mac_primary_client_handle(mip); in i_mac_disable()
2377 mip->mi_state_flags |= MIS_DISABLED; in i_mac_disable()
2385 mac_impl_t *mip = (mac_impl_t *)mh; in mac_disable_nowait() local
2388 if ((err = i_mac_perim_enter_nowait(mip)) != 0) in mac_disable_nowait()
2390 err = i_mac_disable(mip); in mac_disable_nowait()
2391 i_mac_perim_exit(mip); in mac_disable_nowait()
2398 mac_impl_t *mip = (mac_impl_t *)mh; in mac_disable() local
2401 i_mac_perim_enter(mip); in mac_disable()
2402 err = i_mac_disable(mip); in mac_disable()
2403 i_mac_perim_exit(mip); in mac_disable()
2409 i_mac_notify_exit(mip); in mac_disable()
2421 mac_rx_classify(mac_impl_t *mip, mac_resource_handle_t mrh, mblk_t *mp) in mac_rx_classify() argument
2437 if ((mip->mi_state_flags & MIS_EXCLUSIVE) != 0) in mac_rx_classify()
2440 err = mac_flow_lookup(mip->mi_flow_tab, mp, flags, &flent); in mac_rx_classify()
2471 mac_impl_t *mip = (mac_impl_t *)mh; in mac_rx_flow() local
2486 if (mac_rx_classify(mip, mrh, bp1) != NULL) { in mac_rx_flow()
2505 i_mac_tx_srs_notify(mac_impl_t *mip, mac_ring_handle_t ring) in i_mac_tx_srs_notify() argument
2520 if (mip->mi_state_flags & MIS_DISABLED) { in i_mac_tx_srs_notify()
2528 rw_enter(&mip->mi_rw_lock, RW_READER); in i_mac_tx_srs_notify()
2529 for (cclient = mip->mi_clients_list; cclient != NULL; in i_mac_tx_srs_notify()
2549 rw_exit(&mip->mi_rw_lock); in i_mac_tx_srs_notify()
2558 mac_impl_t *mip = (mac_impl_t *)mh; in mac_multicast_refresh() local
2566 refresh = mip->mi_multicst; in mac_multicast_refresh()
2567 arg = mip->mi_driver; in mac_multicast_refresh()
2570 mac_bcast_refresh(mip, refresh, arg, add); in mac_multicast_refresh()
2577 mac_impl_t *mip = (mac_impl_t *)mh; in mac_promisc_refresh() local
2584 refresh = mip->mi_setpromisc; in mac_promisc_refresh()
2585 arg = mip->mi_driver; in mac_promisc_refresh()
2592 refresh(arg, (mip->mi_devpromisc != 0)); in mac_promisc_refresh()
2606 mac_impl_t *mip = (mac_impl_t *)mh; in mac_margin_add() local
2610 rw_enter(&(mip->mi_rw_lock), RW_WRITER); in mac_margin_add()
2612 *marginp = mip->mi_margin; in mac_margin_add()
2618 if (*marginp > mip->mi_margin) { in mac_margin_add()
2627 for (pp = &mip->mi_mmrp; (p = *pp) != NULL; pp = &p->mmr_nextp) { in mac_margin_add()
2648 rw_exit(&(mip->mi_rw_lock)); in mac_margin_add()
2659 mac_impl_t *mip = (mac_impl_t *)mh; in mac_margin_remove() local
2663 rw_enter(&(mip->mi_rw_lock), RW_WRITER); in mac_margin_remove()
2667 for (pp = &(mip->mi_mmrp); (p = *pp) != NULL; pp = &(p->mmr_nextp)) { in mac_margin_remove()
2696 rw_exit(&(mip->mi_rw_lock)); in mac_margin_remove()
2703 mac_impl_t *mip = (mac_impl_t *)mh; in mac_margin_update() local
2706 rw_enter(&(mip->mi_rw_lock), RW_WRITER); in mac_margin_update()
2708 if (mip->mi_mmrp != NULL) in mac_margin_update()
2709 margin_needed = mip->mi_mmrp->mmr_margin; in mac_margin_update()
2712 mip->mi_margin = margin; in mac_margin_update()
2714 rw_exit(&(mip->mi_rw_lock)); in mac_margin_update()
2717 i_mac_notify(mip, MAC_NOTE_MARGIN); in mac_margin_update()
2735 mac_impl_t *mip = (mac_impl_t *)mh; in mac_mtu_add() local
2740 i_mac_perim_enter(mip); in mac_mtu_add()
2741 rw_enter(&mip->mi_rw_lock, RW_WRITER); in mac_mtu_add()
2744 *mtup = mip->mi_sdu_max; in mac_mtu_add()
2748 rw_exit(&mip->mi_rw_lock); in mac_mtu_add()
2749 i_mac_perim_exit(mip); in mac_mtu_add()
2753 if (*mtup > mip->mi_sdu_max || in mac_mtu_add()
2755 rw_exit(&mip->mi_rw_lock); in mac_mtu_add()
2756 i_mac_perim_exit(mip); in mac_mtu_add()
2761 for (cur = mip->mi_mtrp; cur != NULL; cur = cur->mtr_nextp) { in mac_mtu_add()
2764 rw_exit(&mip->mi_rw_lock); in mac_mtu_add()
2765 i_mac_perim_exit(mip); in mac_mtu_add()
2782 cur->mtr_nextp = mip->mi_mtrp; in mac_mtu_add()
2783 mip->mi_mtrp = cur; in mac_mtu_add()
2786 rw_exit(&mip->mi_rw_lock); in mac_mtu_add()
2787 i_mac_perim_exit(mip); in mac_mtu_add()
2794 mac_impl_t *mip = (mac_impl_t *)mh; in mac_mtu_remove() local
2797 i_mac_perim_enter(mip); in mac_mtu_remove()
2798 rw_enter(&mip->mi_rw_lock, RW_WRITER); in mac_mtu_remove()
2801 for (cur = mip->mi_mtrp; cur != NULL; cur = cur->mtr_nextp) { in mac_mtu_remove()
2807 mip->mi_mtrp = cur->mtr_nextp; in mac_mtu_remove()
2813 rw_exit(&mip->mi_rw_lock); in mac_mtu_remove()
2814 i_mac_perim_exit(mip); in mac_mtu_remove()
2821 rw_exit(&mip->mi_rw_lock); in mac_mtu_remove()
2822 i_mac_perim_exit(mip); in mac_mtu_remove()
3171 mac_impl_t *mip = (mac_impl_t *)mh; in mac_set_prop() local
3190 if (mip->mi_state_flags & MIS_IS_VNIC) in mac_set_prop()
3209 (mip->mi_state_flags & MIS_IS_VNIC)) in mac_set_prop()
3215 mip->mi_llimit = learnval; in mac_set_prop()
3217 mip->mi_ldecay = learnval; in mac_set_prop()
3224 if (mip->mi_callbacks->mc_callbacks & MC_SETPROP) { in mac_set_prop()
3225 err = mip->mi_callbacks->mc_setprop(mip->mi_driver, in mac_set_prop()
3245 mac_impl_t *mip = (mac_impl_t *)mh; in mac_get_prop() local
3277 if (mip->mi_state_flags & MIS_IS_VNIC) in mac_get_prop()
3285 if (mip->mi_state_flags & MIS_IS_VNIC) in mac_get_prop()
3288 bcopy(&mip->mi_llimit, val, sizeof (mip->mi_llimit)); in mac_get_prop()
3290 bcopy(&mip->mi_ldecay, val, sizeof (mip->mi_ldecay)); in mac_get_prop()
3343 if (mip->mi_callbacks->mc_callbacks & MC_GETPROP) { in mac_get_prop()
3344 err = mip->mi_callbacks->mc_getprop(mip->mi_driver, name, id, in mac_get_prop()
3375 mac_impl_t *mip = (mac_impl_t *)mh; in mac_prop_info() local
3415 if ((mip->mi_state_flags & MIS_IS_VNIC) && in mac_prop_info()
3427 if (mip->mi_state_flags & MIS_IS_VNIC) in mac_prop_info()
3429 mip = (mac_impl_t *)mh; in mac_prop_info()
3431 mip->mi_rx_group_type == MAC_GROUP_TYPE_STATIC) || in mac_prop_info()
3433 mip->mi_tx_group_type == MAC_GROUP_TYPE_STATIC)) { in mac_prop_info()
3498 if (mip->mi_callbacks->mc_callbacks & MC_PROPINFO) { in mac_prop_info()
3526 mip->mi_callbacks->mc_propinfo(mip->mi_driver, name, id, in mac_prop_info()
3565 if (mip->mi_info.mi_media == DL_ETHER) in mac_prop_info()
3579 mac_impl_t *mip = (mac_impl_t *)mh; in mac_fastpath_disable() local
3581 if ((mip->mi_state_flags & MIS_LEGACY) == 0) in mac_fastpath_disable()
3584 return (mip->mi_capab_legacy.ml_fastpath_disable(mip->mi_driver)); in mac_fastpath_disable()
3590 mac_impl_t *mip = (mac_impl_t *)mh; in mac_fastpath_enable() local
3592 if ((mip->mi_state_flags & MIS_LEGACY) == 0) in mac_fastpath_enable()
3595 mip->mi_capab_legacy.ml_fastpath_enable(mip->mi_driver); in mac_fastpath_enable()
3599 mac_register_priv_prop(mac_impl_t *mip, char **priv_props) in mac_register_priv_prop() argument
3613 mip->mi_priv_prop = kmem_zalloc(nprops * sizeof (char *), KM_SLEEP); in mac_register_priv_prop()
3616 mip->mi_priv_prop[i] = kmem_zalloc(MAXLINKPROPNAME, KM_SLEEP); in mac_register_priv_prop()
3617 (void) strlcpy(mip->mi_priv_prop[i], priv_props[i], in mac_register_priv_prop()
3621 mip->mi_priv_prop_count = nprops; in mac_register_priv_prop()
3625 mac_unregister_priv_prop(mac_impl_t *mip) in mac_unregister_priv_prop() argument
3629 if (mip->mi_priv_prop_count == 0) { in mac_unregister_priv_prop()
3630 ASSERT(mip->mi_priv_prop == NULL); in mac_unregister_priv_prop()
3634 for (i = 0; i < mip->mi_priv_prop_count; i++) in mac_unregister_priv_prop()
3635 kmem_free(mip->mi_priv_prop[i], MAXLINKPROPNAME); in mac_unregister_priv_prop()
3636 kmem_free(mip->mi_priv_prop, mip->mi_priv_prop_count * in mac_unregister_priv_prop()
3639 mip->mi_priv_prop = NULL; in mac_unregister_priv_prop()
3640 mip->mi_priv_prop_count = 0; in mac_unregister_priv_prop()
3654 mac_ring_alloc(mac_impl_t *mip) in mac_ring_alloc() argument
3658 mutex_enter(&mip->mi_ring_lock); in mac_ring_alloc()
3659 if (mip->mi_ring_freelist != NULL) { in mac_ring_alloc()
3660 ring = mip->mi_ring_freelist; in mac_ring_alloc()
3661 mip->mi_ring_freelist = ring->mr_next; in mac_ring_alloc()
3663 mutex_exit(&mip->mi_ring_lock); in mac_ring_alloc()
3665 mutex_exit(&mip->mi_ring_lock); in mac_ring_alloc()
3673 mac_ring_free(mac_impl_t *mip, mac_ring_t *ring) in mac_ring_free() argument
3677 mutex_enter(&mip->mi_ring_lock); in mac_ring_free()
3680 ring->mr_next = mip->mi_ring_freelist; in mac_ring_free()
3682 mip->mi_ring_freelist = ring; in mac_ring_free()
3684 mutex_exit(&mip->mi_ring_lock); in mac_ring_free()
3688 mac_ring_freeall(mac_impl_t *mip) in mac_ring_freeall() argument
3691 mutex_enter(&mip->mi_ring_lock); in mac_ring_freeall()
3692 mac_ring_t *ring = mip->mi_ring_freelist; in mac_ring_freeall()
3698 mip->mi_ring_freelist = NULL; in mac_ring_freeall()
3699 mutex_exit(&mip->mi_ring_lock); in mac_ring_freeall()
3802 mac_init_ring(mac_impl_t *mip, mac_group_t *group, int index, in mac_init_ring() argument
3809 ring = mac_ring_alloc(mip); in mac_init_ring()
3834 cap_rings->mr_rget(mip->mi_driver, group->mrg_type, group->mrg_index, in mac_init_ring()
3878 mac_compare_ddi_handle(mip->mi_rx_groups, in mac_init_ring()
3879 mip->mi_rx_group_count, ring); in mac_init_ring()
3892 ring->mr_mip = mip; in mac_init_ring()
3903 mac_init_group(mac_impl_t *mip, mac_group_t *group, int size, in mac_init_group() argument
3913 (void) mac_init_ring(mip, group, index, cap_rings); in mac_init_group()
3917 mac_init_rings(mac_impl_t *mip, mac_ring_type_t rtype) in mac_init_rings() argument
3933 ASSERT(mip->mi_rx_groups == NULL); in mac_init_rings()
3935 cap_rings = &mip->mi_rx_rings_cap; in mac_init_rings()
3939 ASSERT(mip->mi_tx_groups == NULL); in mac_init_rings()
3941 cap_rings = &mip->mi_tx_rings_cap; in mac_init_rings()
3948 if (!i_mac_capab_get((mac_handle_t)mip, MAC_CAPAB_RINGS, cap_rings)) in mac_init_rings()
3961 (mip->mi_state_flags & MIS_IS_AGGR) == 0) { in mac_init_rings()
3988 group->mrg_mh = (mac_handle_t)mip; in mac_init_rings()
4005 cap_rings->mr_gget(mip->mi_driver, rtype, g, &group_info, in mac_init_rings()
4014 char *, mip->mi_name, in mac_init_rings()
4033 char *, mip->mi_name); in mac_init_rings()
4040 char *, mip->mi_name, in mac_init_rings()
4053 char *, mip->mi_name, in mac_init_rings()
4070 char *, mip->mi_name, in mac_init_rings()
4097 mac_init_group(mip, group, group_info.mgi_count, cap_rings); in mac_init_rings()
4111 group->mrg_mh = (mac_handle_t)mip; in mac_init_rings()
4121 mac_init_group(mip, group, ring_left, cap_rings); in mac_init_rings()
4140 mip->mi_rx_group_type = cap_rings->mr_group_type; in mac_init_rings()
4141 mip->mi_rx_group_count = cap_rings->mr_gnum; in mac_init_rings()
4142 mip->mi_rx_groups = groups; in mac_init_rings()
4143 mip->mi_rx_donor_grp = groups; in mac_init_rings()
4144 if (mip->mi_rx_group_type == MAC_GROUP_TYPE_DYNAMIC) { in mac_init_rings()
4149 mip->mi_rxrings_avail = in mac_init_rings()
4150 mip->mi_rx_groups->mrg_cur_count - 1; in mac_init_rings()
4151 mip->mi_rxrings_rsvd = 1; in mac_init_rings()
4157 mip->mi_rxhwclnt_avail = mip->mi_rx_group_count - 1; in mac_init_rings()
4158 mip->mi_rxhwclnt_used = 1; in mac_init_rings()
4161 mip->mi_tx_group_type = pseudo_txgrp ? MAC_GROUP_TYPE_DYNAMIC : in mac_init_rings()
4163 mip->mi_tx_group_count = grpcnt; in mac_init_rings()
4164 mip->mi_tx_group_free = group_free; in mac_init_rings()
4165 mip->mi_tx_groups = groups; in mac_init_rings()
4176 ASSERT(mip->mi_state_flags & MIS_IS_AGGR); in mac_init_rings()
4181 cap_rings->mr_gget(mip->mi_driver, rtype, 0, NULL, in mac_init_rings()
4197 mip->mi_default_tx_ring = (mac_ring_handle_t)ring; in mac_init_rings()
4199 if (mip->mi_tx_group_type == MAC_GROUP_TYPE_DYNAMIC) { in mac_init_rings()
4200 mip->mi_txrings_avail = group->mrg_cur_count - 1; in mac_init_rings()
4204 mip->mi_txrings_rsvd = 1; in mac_init_rings()
4210 mip->mi_txhwclnt_avail = mip->mi_tx_group_count; in mac_init_rings()
4211 mip->mi_txhwclnt_used = 1; in mac_init_rings()
4218 mac_free_rings(mip, rtype); in mac_init_rings()
4265 mac_free_rings(mac_impl_t *mip, mac_ring_type_t rtype) in mac_free_rings() argument
4272 if (mip->mi_rx_groups == NULL) in mac_free_rings()
4275 groups = mip->mi_rx_groups; in mac_free_rings()
4276 group_count = mip->mi_rx_group_count; in mac_free_rings()
4278 mip->mi_rx_groups = NULL; in mac_free_rings()
4279 mip->mi_rx_donor_grp = NULL; in mac_free_rings()
4280 mip->mi_rx_group_count = 0; in mac_free_rings()
4283 ASSERT(mip->mi_tx_group_count == mip->mi_tx_group_free); in mac_free_rings()
4285 if (mip->mi_tx_groups == NULL) in mac_free_rings()
4288 groups = mip->mi_tx_groups; in mac_free_rings()
4289 group_count = mip->mi_tx_group_count; in mac_free_rings()
4291 mip->mi_tx_groups = NULL; in mac_free_rings()
4292 mip->mi_tx_group_count = 0; in mac_free_rings()
4293 mip->mi_tx_group_free = 0; in mac_free_rings()
4294 mip->mi_default_tx_ring = NULL; in mac_free_rings()
4310 mac_ring_free(mip, ring); in mac_free_rings()
4315 mac_ring_freeall(mip); in mac_free_rings()
4360 mac_bridge_tx(mac_impl_t *mip, mac_ring_handle_t rh, mblk_t *mp) in mac_bridge_tx() argument
4369 mutex_enter(&mip->mi_bridge_lock); in mac_bridge_tx()
4370 if ((mh = mip->mi_bridge_link) != NULL) in mac_bridge_tx()
4372 mutex_exit(&mip->mi_bridge_lock); in mac_bridge_tx()
4374 MAC_RING_TX(mip, rh, mp, mp); in mac_bridge_tx()
4410 mac_impl_t *mip = (mac_impl_t *)group->mrg_mh; in i_mac_group_add_ring() local
4417 ASSERT(MAC_PERIM_HELD((mac_handle_t)mip)); in i_mac_group_add_ring()
4421 cap_rings = &mip->mi_rx_rings_cap; in i_mac_group_add_ring()
4422 group_type = mip->mi_rx_group_type; in i_mac_group_add_ring()
4425 cap_rings = &mip->mi_tx_rings_cap; in i_mac_group_add_ring()
4426 group_type = mip->mi_tx_group_type; in i_mac_group_add_ring()
4446 ring = mac_init_ring(mip, group, index, cap_rings); in i_mac_group_add_ring()
4512 mac_ring_free(mip, ring); in i_mac_group_add_ring()
4614 if (mip->mi_state_flags & MIS_IS_AGGR && in i_mac_group_add_ring()
4615 mip->mi_default_tx_ring == NULL && in i_mac_group_add_ring()
4617 mip->mi_default_tx_ring = (mac_ring_handle_t)ring; in i_mac_group_add_ring()
4634 mac_impl_t *mip = (mac_impl_t *)group->mrg_mh; in i_mac_group_rem_ring() local
4638 ASSERT(MAC_PERIM_HELD((mac_handle_t)mip)); in i_mac_group_rem_ring()
4649 group_type = mip->mi_rx_group_type; in i_mac_group_rem_ring()
4650 cap_rings = &mip->mi_rx_rings_cap; in i_mac_group_rem_ring()
4700 if (mip->mi_state_flags & MIS_IS_AGGR && in i_mac_group_rem_ring()
4701 mip->mi_default_tx_ring == in i_mac_group_rem_ring()
4704 mip->mi_default_tx_ring = in i_mac_group_rem_ring()
4732 ASSERT(ring != (mac_ring_t *)mip->mi_default_tx_ring); in i_mac_group_rem_ring()
4733 group_type = mip->mi_tx_group_type; in i_mac_group_rem_ring()
4734 cap_rings = &mip->mi_tx_rings_cap; in i_mac_group_rem_ring()
4742 defgrp = MAC_DEFAULT_TX_GROUP(mip); in i_mac_group_rem_ring()
4837 mac_ring_free(mip, ring); in i_mac_group_rem_ring()
4849 mac_group_mov_ring(mac_impl_t *mip, mac_group_t *d_group, mac_ring_t *ring) in mac_group_mov_ring() argument
4854 ASSERT(MAC_PERIM_HELD((mac_handle_t)mip)); in mac_group_mov_ring()
4878 mip->mi_name, (void *)ring); in mac_group_mov_ring()
4889 mac_find_macaddr(mac_impl_t *mip, uint8_t *mac_addr) in mac_find_macaddr() argument
4893 ASSERT(MAC_PERIM_HELD((mac_handle_t)mip)); in mac_find_macaddr()
4895 for (map = mip->mi_addresses; map != NULL; map = map->ma_next) { in mac_find_macaddr()
4920 mac_impl_t *mip = map->ma_mip; in mac_free_macaddr() local
4922 ASSERT(MAC_PERIM_HELD((mac_handle_t)mip)); in mac_free_macaddr()
4923 ASSERT(mip->mi_addresses != NULL); in mac_free_macaddr()
4925 map = mac_find_macaddr(mip, map->ma_addr); in mac_free_macaddr()
4930 if (map == mip->mi_addresses) { in mac_free_macaddr()
4931 mip->mi_addresses = map->ma_next; in mac_free_macaddr()
4935 pre = mip->mi_addresses; in mac_free_macaddr()
4957 mac_add_macaddr(mac_impl_t *mip, mac_group_t *group, uint8_t *mac_addr, in mac_add_macaddr() argument
4964 ASSERT(MAC_PERIM_HELD((mac_handle_t)mip)); in mac_add_macaddr()
4966 map = mac_find_macaddr(mip, mac_addr); in mac_add_macaddr()
4974 map->ma_len = mip->mi_type->mt_addr_length; in mac_add_macaddr()
4978 map->ma_mip = mip; in mac_add_macaddr()
4981 map->ma_next = mip->mi_addresses; in mac_add_macaddr()
4982 mip->mi_addresses = map; in mac_add_macaddr()
5025 (bcmp(map->ma_addr, mip->mi_addr, map->ma_len) == 0)) { in mac_add_macaddr()
5034 if ((err = i_mac_promisc_set(mip, B_TRUE)) == 0) { in mac_add_macaddr()
5060 mac_impl_t *mip = map->ma_mip; in mac_remove_macaddr() local
5063 ASSERT(MAC_PERIM_HELD((mac_handle_t)mip)); in mac_remove_macaddr()
5065 ASSERT(map == mac_find_macaddr(mip, map->ma_addr)); in mac_remove_macaddr()
5093 err = i_mac_promisc_set(mip, B_FALSE); in mac_remove_macaddr()
5106 if (bcmp(map->ma_addr, mip->mi_addr, map->ma_len) != 0) in mac_remove_macaddr()
5119 mac_impl_t *mip = map->ma_mip; in mac_update_macaddr() local
5122 ASSERT(MAC_PERIM_HELD((mac_handle_t)mip)); in mac_update_macaddr()
5123 ASSERT(mac_find_macaddr(mip, mac_addr) == NULL); in mac_update_macaddr()
5131 if (mip->mi_rx_groups == NULL) { in mac_update_macaddr()
5132 err = mip->mi_unicst(mip->mi_driver, (const uint8_t *) in mac_update_macaddr()
5191 mac_impl_t *mip = map->ma_mip; in mac_freshen_macaddr() local
5193 ASSERT(MAC_PERIM_HELD((mac_handle_t)mip)); in mac_freshen_macaddr()
5194 ASSERT(mac_find_macaddr(mip, mac_addr) == NULL); in mac_freshen_macaddr()
5200 bcopy(mac_addr, mip->mi_addr, map->ma_len); in mac_freshen_macaddr()
5205 mac_unicast_update_clients(mip, map); in mac_freshen_macaddr()
5212 mac_init_macaddr(mac_impl_t *mip) in mac_init_macaddr() argument
5221 map->ma_len = mip->mi_type->mt_addr_length; in mac_init_macaddr()
5222 bcopy(mip->mi_addr, map->ma_addr, map->ma_len); in mac_init_macaddr()
5229 if (mip->mi_rx_groups == NULL) in mac_init_macaddr()
5232 map->ma_mip = mip; in mac_init_macaddr()
5234 mip->mi_addresses = map; in mac_init_macaddr()
5242 mac_fini_macaddr(mac_impl_t *mip) in mac_fini_macaddr() argument
5244 mac_address_t *map = mip->mi_addresses; in mac_fini_macaddr()
5257 mip->mi_addresses = NULL; in mac_fini_macaddr()
5534 i_mac_impl_log(mac_impl_t *mip, i_mac_log_state_t *lstate) in i_mac_impl_log() argument
5539 i_mac_perim_enter(mip); in i_mac_impl_log()
5543 if ((mip->mi_state_flags & MIS_DISABLED) || in i_mac_impl_log()
5544 ((mip->mi_state_flags & MIS_IS_VNIC) && in i_mac_impl_log()
5545 (mac_get_lower_mac_handle((mac_handle_t)mip) != NULL))) { in i_mac_impl_log()
5546 i_mac_perim_exit(mip); in i_mac_impl_log()
5550 for (mcip = mip->mi_clients_list; mcip != NULL; in i_mac_impl_log()
5570 i_mac_perim_exit(mip); in i_mac_impl_log()
5583 i_mac_perim_exit(mip); in i_mac_impl_log()
5599 i_mac_perim_exit(mip); in i_mac_impl_log()
5611 mac_impl_t *mip = (mac_impl_t *)val; in i_mac_impl_list_walker() local
5613 if ((mip->mi_state_flags & MIS_DISABLED) == 0) { in i_mac_impl_list_walker()
5614 list_insert_tail(list, mip); in i_mac_impl_list_walker()
5615 mip->mi_ref++; in i_mac_impl_list_walker()
5625 mac_impl_t *mip; in i_mac_log_info() local
5636 for (mip = list_head(&mac_impl_list); mip != NULL; in i_mac_log_info()
5637 mip = list_next(&mac_impl_list, mip)) { in i_mac_log_info()
5638 if (i_mac_impl_log(mip, lstate) != 0) in i_mac_log_info()
5644 while ((mip = list_remove_tail(&mac_impl_list)) != NULL) { in i_mac_log_info()
5645 mip->mi_ref--; in i_mac_log_info()
5890 mac_reserve_tx_ring(mac_impl_t *mip, mac_ring_t *desired_ring) in mac_reserve_tx_ring() argument
5897 ASSERT(MAC_PERIM_HELD((mac_handle_t)mip)); in mac_reserve_tx_ring()
5904 group = MAC_DEFAULT_TX_GROUP(mip); in mac_reserve_tx_ring()
5907 ASSERT(desired_ring != (mac_ring_t *)mip->mi_default_tx_ring); in mac_reserve_tx_ring()
5960 mac_reclaim_ring_from_grp(mac_impl_t *mip, mac_ring_type_t ring_type, in mac_reclaim_ring_from_grp() argument
5980 defgrp = mip->mi_rx_donor_grp; in mac_reclaim_ring_from_grp()
6003 if (mac_group_mov_ring(mip, group, tring) != 0) in mac_reclaim_ring_from_grp()
6005 if (mac_group_mov_ring(mip, defgrp, ring) != 0) { in mac_reclaim_ring_from_grp()
6006 (void) mac_group_mov_ring(mip, defgrp, tring); in mac_reclaim_ring_from_grp()
6014 defgrp = MAC_DEFAULT_TX_GROUP(mip); in mac_reclaim_ring_from_grp()
6015 if (ring == (mac_ring_t *)mip->mi_default_tx_ring) { in mac_reclaim_ring_from_grp()
6026 for (i = 0; i < mip->mi_tx_group_count; i++) { in mac_reclaim_ring_from_grp()
6027 tgrp = &mip->mi_tx_groups[i]; in mac_reclaim_ring_from_grp()
6083 mip->mi_default_tx_ring = (mac_ring_handle_t)tring; in mac_reclaim_ring_from_grp()
6108 if (tring == (mac_ring_t *)mip->mi_default_tx_ring) in mac_reclaim_ring_from_grp()
6125 if (mac_group_mov_ring(mip, group, tring) != 0) { in mac_reclaim_ring_from_grp()
6129 if (mac_group_mov_ring(mip, defgrp, ring) != 0) { in mac_reclaim_ring_from_grp()
6130 (void) mac_group_mov_ring(mip, defgrp, tring); in mac_reclaim_ring_from_grp()
6148 i_mac_group_allocate_rings(mac_impl_t *mip, mac_ring_type_t ring_type, in i_mac_group_allocate_rings() argument
6157 mip->mi_rx_group_type == MAC_GROUP_TYPE_DYNAMIC) || in i_mac_group_allocate_rings()
6159 mip->mi_tx_group_type == MAC_GROUP_TYPE_DYNAMIC)); in i_mac_group_allocate_rings()
6166 mip->mi_share_capab.ms_squery(share, ring_type, NULL, &nrings); in i_mac_group_allocate_rings()
6170 mip->mi_share_capab.ms_squery(share, ring_type, in i_mac_group_allocate_rings()
6180 ring == (mac_ring_t *)mip->mi_default_tx_ring) { in i_mac_group_allocate_rings()
6181 if (mac_reclaim_ring_from_grp(mip, ring_type, in i_mac_group_allocate_rings()
6207 ring == (mac_ring_t *)mip->mi_default_tx_ring) { in i_mac_group_allocate_rings()
6233 rv = mac_group_mov_ring(mip, new_group, rings[i]); in i_mac_group_allocate_rings()
6237 (void) mac_group_mov_ring(mip, in i_mac_group_allocate_rings()
6251 tmp_ring = mac_reserve_tx_ring(mip, rings[i]); in i_mac_group_allocate_rings()
6257 rv = mac_group_mov_ring(mip, new_group, rings[i]); in i_mac_group_allocate_rings()
6261 (void) mac_group_mov_ring(mip, in i_mac_group_allocate_rings()
6262 MAC_DEFAULT_TX_GROUP(mip), in i_mac_group_allocate_rings()
6274 mip->mi_share_capab.ms_sadd(share, new_group->mrg_driver); in i_mac_group_allocate_rings()
6332 mac_impl_t *mip = mcip->mci_mip; in mac_reserve_rx_group() local
6350 ASSERT(MAC_PERIM_HELD((mac_handle_t)mip)); in mac_reserve_rx_group()
6358 if (!move && (map = mac_find_macaddr(mip, mac_addr)) != NULL) { in mac_reserve_rx_group()
6362 if (mip->mi_rx_groups == NULL || mip->mi_rx_group_count == 0) in mac_reserve_rx_group()
6373 mip->mi_rx_group_type == MAC_GROUP_TYPE_DYNAMIC) { in mac_reserve_rx_group()
6381 mip->mi_rx_group_type == MAC_GROUP_TYPE_STATIC) { in mac_reserve_rx_group()
6398 } else if (isprimary && mip->mi_nactiveclients == 1 && in mac_reserve_rx_group()
6399 mip->mi_rx_group_type == MAC_GROUP_TYPE_DYNAMIC) { in mac_reserve_rx_group()
6410 donorgrp = mip->mi_rx_donor_grp; in mac_reserve_rx_group()
6432 for (i = 1; i < mip->mi_rx_group_count; i++) { in mac_reserve_rx_group()
6433 grp = &mip->mi_rx_groups[i]; in mac_reserve_rx_group()
6435 DTRACE_PROBE3(rx__group__trying, char *, mip->mi_name, in mac_reserve_rx_group()
6455 donorgrp == MAC_DEFAULT_RX_GROUP(mip)) { in mac_reserve_rx_group()
6484 if (mip->mi_rx_group_type != MAC_GROUP_TYPE_DYNAMIC) in mac_reserve_rx_group()
6501 err = i_mac_group_allocate_rings(mip, MAC_RING_TYPE_RX, in mac_reserve_rx_group()
6515 mip->mi_rx_donor_grp = grp; in mac_reserve_rx_group()
6521 mip->mi_name, int, grp->mrg_index, int, err); in mac_reserve_rx_group()
6530 if (i >= mip->mi_rx_group_count) { in mac_reserve_rx_group()
6544 donorgrp != MAC_DEFAULT_RX_GROUP(mip) && in mac_reserve_rx_group()
6561 if (grp == mip->mi_rx_donor_grp) in mac_reserve_rx_group()
6564 MAC_DEFAULT_RX_GROUP(mip)) != 0) { in mac_reserve_rx_group()
6568 mip->mi_rx_donor_grp = in mac_reserve_rx_group()
6569 MAC_DEFAULT_RX_GROUP(mip); in mac_reserve_rx_group()
6570 donorgrp = MAC_DEFAULT_RX_GROUP(mip); in mac_reserve_rx_group()
6582 if (mip->mi_rx_group_type != MAC_GROUP_TYPE_DYNAMIC) in mac_reserve_rx_group()
6588 err = i_mac_group_allocate_rings(mip, MAC_RING_TYPE_RX, in mac_reserve_rx_group()
6602 char *, mip->mi_name, int, grp->mrg_index); in mac_reserve_rx_group()
6606 mip->mi_name, int, grp->mrg_index, int, err); in mac_reserve_rx_group()
6614 char *, mip->mi_name, int, grp->mrg_index); in mac_reserve_rx_group()
6629 mac_impl_t *mip = mcip->mci_mip; in mac_release_rx_group() local
6632 ASSERT(group != MAC_DEFAULT_RX_GROUP(mip)); in mac_release_rx_group()
6634 if (mip->mi_rx_donor_grp == group) in mac_release_rx_group()
6635 mip->mi_rx_donor_grp = MAC_DEFAULT_RX_GROUP(mip); in mac_release_rx_group()
6660 mip->mi_share_capab.ms_sremove(mcip->mci_share, in mac_release_rx_group()
6664 if (mip->mi_rx_group_type == MAC_GROUP_TYPE_DYNAMIC) { in mac_release_rx_group()
6672 (void) mac_group_mov_ring(mip, mip->mi_rx_donor_grp, in mac_release_rx_group()
6698 mac_impl_t *mip = mcip->mci_mip; in mac_rx_move_macaddr_prim() local
6714 (grp != MAC_DEFAULT_RX_GROUP(mip) || in mac_rx_move_macaddr_prim()
6721 (void) mac_add_macaddr(mip, tgrp, maddr, prim); in mac_rx_move_macaddr_prim()
6739 mac_impl_t *mip = mcip->mci_mip; in mac_rx_move_macaddr() local
6768 if ((err = mac_add_macaddr(mip, tgrp, maddr, prim)) != 0) { in mac_rx_move_macaddr()
6770 if ((err = mac_add_macaddr(mip, fgrp, maddr, prim)) != 0) { in mac_rx_move_macaddr()
6787 mcip->mci_unicast = mac_find_macaddr(mip, maddr); in mac_rx_move_macaddr()
6809 mac_impl_t *mip = mcip->mci_mip; in mac_rx_switch_group() local
6825 if (fgrp != MAC_DEFAULT_RX_GROUP(mip)) { in mac_rx_switch_group()
6872 MAC_DEFAULT_RX_GROUP(mip), B_TRUE); in mac_rx_switch_group()
6896 mac_impl_t *mip = mcip->mci_mip; in mac_reserve_tx_group() local
6925 for (gclient = mip->mi_clients_list; gclient != NULL; in mac_reserve_tx_group()
6934 if (mip->mi_tx_groups == NULL || mip->mi_tx_group_count == 0) in mac_reserve_tx_group()
6939 mip->mi_tx_group_type == MAC_GROUP_TYPE_DYNAMIC) { in mac_reserve_tx_group()
6947 mip->mi_tx_group_type == MAC_GROUP_TYPE_STATIC) { in mac_reserve_tx_group()
6966 defgrp = MAC_DEFAULT_TX_GROUP(mip); in mac_reserve_tx_group()
6982 for (i = 0; i < mip->mi_tx_group_count; i++) { in mac_reserve_tx_group()
6983 grp = &mip->mi_tx_groups[i]; in mac_reserve_tx_group()
7015 if (mip->mi_tx_group_type != MAC_GROUP_TYPE_DYNAMIC || in mac_reserve_tx_group()
7026 if (i >= mip->mi_tx_group_count) { in mac_reserve_tx_group()
7054 if (mip->mi_tx_group_type != MAC_GROUP_TYPE_DYNAMIC) in mac_reserve_tx_group()
7060 err = i_mac_group_allocate_rings(mip, MAC_RING_TYPE_TX, in mac_reserve_tx_group()
7073 mip->mi_tx_group_free--; in mac_reserve_tx_group()
7077 mip->mi_name, int, grp->mrg_index, int, err); in mac_reserve_tx_group()
7085 if (mip->mi_tx_group_type != MAC_GROUP_TYPE_DYNAMIC) { in mac_reserve_tx_group()
7086 mip->mi_tx_group_free--; in mac_reserve_tx_group()
7090 rv = i_mac_group_allocate_rings(mip, MAC_RING_TYPE_TX, defgrp, grp, in mac_reserve_tx_group()
7094 char *, mip->mi_name, int, grp->mrg_index, int, rv); in mac_reserve_tx_group()
7106 mip->mi_tx_group_free--; in mac_reserve_tx_group()
7113 mac_impl_t *mip = mcip->mci_mip; in mac_release_tx_group() local
7119 defgrp = MAC_DEFAULT_TX_GROUP(mip); in mac_release_tx_group()
7137 mip->mi_share_capab.ms_sremove(share, grp->mrg_driver); in mac_release_tx_group()
7140 if (mip->mi_tx_group_type == MAC_GROUP_TYPE_DYNAMIC) { in mac_release_tx_group()
7142 (void) mac_group_mov_ring(mip, defgrp, ring); in mac_release_tx_group()
7145 mip->mi_tx_group_free++; in mac_release_tx_group()
7192 mac_impl_t *mip = mcip->mci_mip; in mac_tx_switch_group() local
7199 defgrp = MAC_DEFAULT_TX_GROUP(mip); in mac_tx_switch_group()
7258 (mac_ring_t *)mip->mi_default_tx_ring) { in mac_tx_switch_group()
7406 mac_impl_t *mip = (mac_impl_t *)mh; in mac_bridge_set() local
7409 mutex_enter(&mip->mi_bridge_lock); in mac_bridge_set()
7410 if (mip->mi_bridge_link == NULL) { in mac_bridge_set()
7411 mip->mi_bridge_link = link; in mac_bridge_set()
7416 mutex_exit(&mip->mi_bridge_lock); in mac_bridge_set()
7430 mac_impl_t *mip = (mac_impl_t *)mh; in mac_bridge_clear() local
7432 mutex_enter(&mip->mi_bridge_lock); in mac_bridge_clear()
7433 ASSERT(mip->mi_bridge_link == link); in mac_bridge_clear()
7434 mip->mi_bridge_link = NULL; in mac_bridge_clear()
7435 mutex_exit(&mip->mi_bridge_lock); in mac_bridge_clear()
7443 mac_impl_t *mip = (mac_impl_t *)mh; in mac_no_active() local
7445 i_mac_perim_enter(mip); in mac_no_active()
7446 mip->mi_state_flags |= MIS_NO_ACTIVE; in mac_no_active()
7447 i_mac_perim_exit(mip); in mac_no_active()
7458 mac_set_prim_vlan_rings(mac_impl_t *mip, mac_resource_props_t *mrp) in mac_set_prim_vlan_rings() argument
7463 for (vmcip = mip->mi_clients_list; vmcip != NULL; in mac_set_prim_vlan_rings()
7510 mac_impl_t *mip = mcip->mci_mip; in mac_group_ring_modify() local
7542 if (mip->mi_rx_donor_grp == group) { in mac_group_ring_modify()
7544 mip->mi_rx_donor_grp = defgrp; in mac_group_ring_modify()
7546 defgrp = mip->mi_rx_donor_grp; in mac_group_ring_modify()
7555 rv = mac_group_mov_ring(mip, defgrp, ring); in mac_group_ring_modify()
7559 (void) mac_group_mov_ring(mip, group, in mac_group_ring_modify()
7576 if (group != mip->mi_rx_donor_grp) in mac_group_ring_modify()
7577 defgrp = mip->mi_rx_donor_grp; in mac_group_ring_modify()
7583 mip->mi_rx_donor_grp = defgrp; in mac_group_ring_modify()
7585 end = mip->mi_rx_group_count; in mac_group_ring_modify()
7588 end = mip->mi_tx_group_count - 1; in mac_group_ring_modify()
7599 tgrp = &mip->mi_rx_groups[i]; in mac_group_ring_modify()
7620 tgrp = &mip->mi_tx_groups[i]; in mac_group_ring_modify()
7646 if ((rv = i_mac_group_allocate_rings(mip, group->mrg_type, defgrp, in mac_group_ring_modify()
7746 mac_impl_t *mip = (mac_impl_t *)val; in mac_pool_link_update() local
7755 i_mac_perim_enter(mip); in mac_pool_link_update()
7756 for (mcip = mip->mi_clients_list; mcip != NULL; in mac_pool_link_update()
7840 i_mac_perim_exit(mip); in mac_pool_link_update()
7909 mac_impl_t *mip = mcip->mci_mip; in mac_set_rings_effective() local
7919 defgrp = MAC_DEFAULT_RX_GROUP(mip); in mac_set_rings_effective()
7959 defgrp = MAC_DEFAULT_TX_GROUP(mip); in mac_set_rings_effective()
8005 mac_impl_t *mip = mcip->mci_mip; in mac_check_primary_relocation() local
8006 mac_group_t *defgrp = MAC_DEFAULT_RX_GROUP(mip); in mac_check_primary_relocation()
8024 if (rxhw && mip->mi_rxhwclnt_avail < 2) in mac_check_primary_relocation()
8032 ASSERT(mip->mi_nactiveclients == 2); in mac_check_primary_relocation()
8047 mac_transceiver_init(mac_impl_t *mip) in mac_transceiver_init() argument
8049 if (mac_capab_get((mac_handle_t)mip, MAC_CAPAB_TRANSCEIVER, in mac_transceiver_init()
8050 &mip->mi_transceiver)) { in mac_transceiver_init()
8055 if (mip->mi_transceiver.mct_flags != 0) { in mac_transceiver_init()
8056 dev_err(mip->mi_dip, CE_WARN, "driver set transceiver " in mac_transceiver_init()
8058 "capability", mip->mi_transceiver.mct_flags); in mac_transceiver_init()
8059 bzero(&mip->mi_transceiver, in mac_transceiver_init()
8063 bzero(&mip->mi_transceiver, in mac_transceiver_init()
8071 mac_impl_t *mip = (mac_impl_t *)mh; in mac_transceiver_count() local
8075 if (mip->mi_transceiver.mct_ntransceivers == 0) in mac_transceiver_count()
8078 *countp = mip->mi_transceiver.mct_ntransceivers; in mac_transceiver_count()
8089 mac_impl_t *mip = (mac_impl_t *)mh; in mac_transceiver_info() local
8093 if (mip->mi_transceiver.mct_info == NULL || in mac_transceiver_info()
8094 mip->mi_transceiver.mct_ntransceivers == 0) in mac_transceiver_info()
8097 if (tranid >= mip->mi_transceiver.mct_ntransceivers) in mac_transceiver_info()
8101 if ((ret = mip->mi_transceiver.mct_info(mip->mi_driver, tranid, in mac_transceiver_info()
8117 mac_impl_t *mip = (mac_impl_t *)mh; in mac_transceiver_read() local
8121 if (mip->mi_transceiver.mct_read == NULL) in mac_transceiver_read()
8124 if (tranid >= mip->mi_transceiver.mct_ntransceivers) in mac_transceiver_read()
8137 ret = mip->mi_transceiver.mct_read(mip->mi_driver, tranid, page, buf, in mac_transceiver_read()
8140 dev_err(mip->mi_dip, CE_PANIC, "driver wrote %lu bytes into " in mac_transceiver_read()
8149 mac_led_init(mac_impl_t *mip) in mac_led_init() argument
8151 mip->mi_led_modes = MAC_LED_DEFAULT; in mac_led_init()
8153 if (!mac_capab_get((mac_handle_t)mip, MAC_CAPAB_LED, &mip->mi_led)) { in mac_led_init()
8154 bzero(&mip->mi_led, sizeof (mac_capab_led_t)); in mac_led_init()
8158 if (mip->mi_led.mcl_flags != 0) { in mac_led_init()
8159 dev_err(mip->mi_dip, CE_WARN, "driver set led capability " in mac_led_init()
8161 "capability", mip->mi_transceiver.mct_flags); in mac_led_init()
8162 bzero(&mip->mi_led, sizeof (mac_capab_led_t)); in mac_led_init()
8166 if ((mip->mi_led.mcl_modes & ~MAC_LED_ALL) != 0) { in mac_led_init()
8167 dev_err(mip->mi_dip, CE_WARN, "driver set led capability " in mac_led_init()
8169 "capability", mip->mi_transceiver.mct_flags); in mac_led_init()
8170 bzero(&mip->mi_led, sizeof (mac_capab_led_t)); in mac_led_init()
8178 mac_impl_t *mip = (mac_impl_t *)mh; in mac_led_get() local
8182 if (mip->mi_led.mcl_set == NULL) in mac_led_get()
8185 *supported = mip->mi_led.mcl_modes; in mac_led_get()
8186 *active = mip->mi_led_modes; in mac_led_get()
8202 mac_impl_t *mip = (mac_impl_t *)mh; in mac_led_set() local
8214 if (mip->mi_led.mcl_set == NULL) in mac_led_set()
8224 if ((desired & ~mip->mi_led.mcl_modes) != 0) in mac_led_set()
8230 if (desired == mip->mi_led_modes) in mac_led_set()
8249 if ((ret = mip->mi_led.mcl_set(mip->mi_driver, driver, 0)) == 0) { in mac_led_set()
8250 mip->mi_led_modes = desired; in mac_led_set()