Lines Matching defs:mip

123 	mac_impl_t		*mip;
142 mip = kmem_cache_alloc(i_mac_impl_cachep, KM_SLEEP);
147 mip->mi_state_flags |= MIS_DISABLED;
189 mip->mi_minor = (minor_t)(instance + 1);
190 mip->mi_dip = mregp->m_dip;
191 mip->mi_clients_list = NULL;
192 mip->mi_nclients = 0;
195 mip->mi_pvid = 1;
198 mip->mi_llimit = 1000;
199 mip->mi_ldecay = 200;
201 driver = (char *)ddi_driver_name(mip->mi_dip);
204 (void) snprintf(mip->mi_name, sizeof (mip->mi_name), "%s%d",
207 mip->mi_driver = mregp->m_driver;
209 mip->mi_type = mtype;
210 mip->mi_margin = mregp->m_margin;
211 mip->mi_info.mi_media = mtype->mt_type;
212 mip->mi_info.mi_nativemedia = mtype->mt_nativetype;
220 mip->mi_sdu_min = mregp->m_min_sdu;
221 mip->mi_sdu_max = mregp->m_max_sdu;
222 mip->mi_sdu_multicast = mregp->m_multicast_sdu;
223 mip->mi_info.mi_addr_length = mip->mi_type->mt_addr_length;
228 mip->mi_info.mi_brdcst_addr = mip->mi_type->mt_brdcst_addr;
230 mip->mi_v12n_level = mregp->m_v12n;
238 if (mip->mi_type->mt_addr_length > 0) {
241 mip->mi_info.mi_unicst_addr =
242 kmem_alloc(mip->mi_type->mt_addr_length, KM_SLEEP);
243 bcopy(mregp->m_src_addr, mip->mi_info.mi_unicst_addr,
244 mip->mi_type->mt_addr_length);
251 bcopy(mip->mi_info.mi_unicst_addr, mip->mi_addr,
252 mip->mi_type->mt_addr_length);
265 bcopy(mregp->m_dst_addr, mip->mi_dstaddr,
266 mip->mi_type->mt_addr_length);
267 mip->mi_dstaddr_set = B_TRUE;
279 if (mip->mi_type->mt_ops.mtops_ops & MTOPS_PDATA_VERIFY) {
286 if (!mip->mi_type->mt_ops.mtops_pdata_verify(mregp->m_pdata,
291 mip->mi_pdata =
293 bcopy(mregp->m_pdata, mip->mi_pdata,
295 mip->mi_pdata_size = mregp->m_pdata_size;
309 mac_register_priv_prop(mip, mregp->m_priv_props);
322 mip->mi_callbacks = mregp->m_callbacks;
324 if (mac_capab_get((mac_handle_t)mip, MAC_CAPAB_LEGACY,
325 &mip->mi_capab_legacy)) {
326 mip->mi_state_flags |= MIS_LEGACY;
327 mip->mi_phy_dev = mip->mi_capab_legacy.ml_dev;
329 mip->mi_phy_dev = makedevice(ddi_driver_major(mip->mi_dip),
330 mip->mi_minor);
337 mip->mi_notify_thread = thread_create(NULL, 0, i_mac_notify_thread,
338 mip, 0, &p0, TS_RUN, minclsyspri);
344 bzero(&mip->mi_rx_rings_cap, sizeof (mac_capab_rings_t));
345 bzero(&mip->mi_tx_rings_cap, sizeof (mac_capab_rings_t));
347 if (i_mac_capab_get((mac_handle_t)mip, MAC_CAPAB_VNIC, NULL))
348 mip->mi_state_flags |= MIS_IS_VNIC;
350 if (i_mac_capab_get((mac_handle_t)mip, MAC_CAPAB_AGGR, NULL))
351 mip->mi_state_flags |= MIS_IS_AGGR;
353 mac_addr_factory_init(mip);
358 if (mip->mi_v12n_level & MAC_VIRT_LEVEL1) {
359 if (mac_init_rings(mip, MAC_RING_TYPE_RX) != 0 ||
360 mac_init_rings(mip, MAC_RING_TYPE_TX) != 0)
367 if (mip->mi_rx_groups == NULL)
375 if (mip->mi_rx_groups != NULL) {
386 mac_init_macaddr(mip);
388 mip->mi_share_capab.ms_snum = 0;
389 if (mip->mi_v12n_level & MAC_VIRT_HIO) {
390 (void) mac_capab_get((mac_handle_t)mip, MAC_CAPAB_SHARES,
391 &mip->mi_share_capab);
397 mac_driver_stat_create(mip);
400 bzero(&mip->mi_resource_props, sizeof (mac_resource_props_t));
402 if (mip->mi_minor <= MAC_MAX_MINOR) {
404 if (ddi_create_minor_node(mip->mi_dip, driver, S_IFCHR, 0,
410 if (ddi_create_minor_node(mip->mi_dip, mip->mi_name, S_IFCHR,
411 mip->mi_minor, DDI_NT_NET, 0) != DDI_SUCCESS)
416 mac_flow_l2tab_create(mip, &mip->mi_flow_tab);
420 (mod_hash_key_t)mip->mi_name, (mod_hash_val_t)mip) != 0) {
427 (mac_impl_t *), mip);
432 mip->mi_state_flags &= ~MIS_DISABLED;
437 cmn_err(CE_NOTE, "!%s registered", mip->mi_name);
438 *mhp = (mac_handle_t)mip;
443 ddi_remove_minor_node(mip->mi_dip, mip->mi_name);
446 ddi_remove_minor_node(mip->mi_dip, driver);
448 mac_addr_factory_fini(mip);
451 mac_fini_macaddr(mip);
454 mac_free_rings(mip, MAC_RING_TYPE_RX);
455 mac_free_rings(mip, MAC_RING_TYPE_TX);
458 if (mip->mi_notify_thread != NULL)
459 i_mac_notify_exit(mip);
461 if (mip->mi_info.mi_unicst_addr != NULL) {
462 kmem_free(mip->mi_info.mi_unicst_addr,
463 mip->mi_type->mt_addr_length);
464 mip->mi_info.mi_unicst_addr = NULL;
467 mac_driver_stat_delete(mip);
469 if (mip->mi_type != NULL) {
470 atomic_dec_32(&mip->mi_type->mt_ref);
471 mip->mi_type = NULL;
474 if (mip->mi_pdata != NULL) {
475 kmem_free(mip->mi_pdata, mip->mi_pdata_size);
476 mip->mi_pdata = NULL;
477 mip->mi_pdata_size = 0;
485 mip->mi_state_flags = 0;
486 mac_unregister_priv_prop(mip);
491 mip->mi_state_flags = 0;
493 kmem_cache_free(i_mac_impl_cachep, mip);
504 mac_impl_t *mip = (mac_impl_t *)mh;
515 i_mac_notify_exit(mip);
517 i_mac_perim_enter(mip);
522 if (mip->mi_resource_props.mrp_mask != 0)
523 mac_fastpath_enable((mac_handle_t)mip);
525 if (mip->mi_minor < MAC_MAX_MINOR + 1) {
526 ddi_remove_minor_node(mip->mi_dip, mip->mi_name);
527 ddi_remove_minor_node(mip->mi_dip,
528 (char *)ddi_driver_name(mip->mi_dip));
531 ASSERT(mip->mi_nactiveclients == 0 && !(mip->mi_state_flags &
534 mac_driver_stat_delete(mip);
537 (mod_hash_key_t)mip->mi_name, &val);
538 ASSERT(mip == (mac_impl_t *)val);
543 if (mip->mi_pdata != NULL)
544 kmem_free(mip->mi_pdata, mip->mi_pdata_size);
545 mip->mi_pdata = NULL;
546 mip->mi_pdata_size = 0;
551 for (mmr = mip->mi_mmrp; mmr != NULL; mmr = nextmmr) {
555 mip->mi_mmrp = NULL;
557 mip->mi_linkstate = mip->mi_lowlinkstate = LINK_STATE_UNKNOWN;
558 kmem_free(mip->mi_info.mi_unicst_addr, mip->mi_type->mt_addr_length);
559 mip->mi_info.mi_unicst_addr = NULL;
561 atomic_dec_32(&mip->mi_type->mt_ref);
562 mip->mi_type = NULL;
567 mac_fini_macaddr(mip);
572 mac_free_rings(mip, MAC_RING_TYPE_RX);
573 mac_free_rings(mip, MAC_RING_TYPE_TX);
575 mac_addr_factory_fini(mip);
577 bzero(mip->mi_addr, MAXMACADDRLEN);
578 bzero(mip->mi_dstaddr, MAXMACADDRLEN);
579 mip->mi_dstaddr_set = B_FALSE;
582 mac_flow_tab_destroy(mip->mi_flow_tab);
583 mip->mi_flow_tab = NULL;
585 if (mip->mi_minor > MAC_MAX_MINOR)
586 mac_minor_rele(mip->mi_minor);
588 cmn_err(CE_NOTE, "!%s unregistered", mip->mi_name);
594 i_mac_perim_exit(mip);
595 mip->mi_state_flags = 0;
597 mac_unregister_priv_prop(mip);
599 ASSERT(mip->mi_bridge_link == NULL);
600 kmem_cache_free(i_mac_impl_cachep, mip);
635 mac_impl_t *mip = (mac_impl_t *)mh;
642 if (mip->mi_bridge_link == NULL) {
650 mutex_enter(&mip->mi_bridge_lock);
651 if ((mh = mip->mi_bridge_link) != NULL)
653 mutex_exit(&mip->mi_bridge_lock);
655 mac_rx_common((mac_handle_t)mip, mrh, mp_chain);
670 mac_impl_t *mip = (mac_impl_t *)mh;
672 if (mip->mi_promisc_list != NULL)
673 mac_promisc_dispatch(mip, mp, NULL);
683 mac_impl_t *mip = (mac_impl_t *)mh;
693 if (mip->mi_promisc_list != NULL)
694 mac_promisc_dispatch(mip, mp_chain, NULL);
742 rw_enter(&mip->mi_rw_lock, RW_READER);
743 if (mip->mi_single_active_client != NULL) {
744 flent = mip->mi_single_active_client->mci_flent_list;
746 rw_exit(&mip->mi_rw_lock);
754 rw_exit(&mip->mi_rw_lock);
758 if (!FLOW_TAB_EMPTY(mip->mi_flow_tab)) {
794 mac_impl_t *mip = (mac_impl_t *)mh;
799 mip->mi_lowlinkstate = link;
805 i_mac_notify(mip, MAC_NOTE_LOWLINK);
814 mac_impl_t *mip = (mac_impl_t *)mh;
819 mip->mi_linkstate = link;
825 i_mac_notify(mip, MAC_NOTE_LINK);
863 mac_impl_t *mip = (mac_impl_t *)mh;
865 if (mip->mi_type->mt_addr_length == 0)
868 i_mac_perim_enter(mip);
874 if (bcmp(addr, mip->mi_addr, mip->mi_type->mt_addr_length) != 0) {
875 mac_freshen_macaddr(mac_find_macaddr(mip, mip->mi_addr),
879 i_mac_perim_exit(mip);
884 i_mac_notify(mip, MAC_NOTE_UNICST);
890 mac_impl_t *mip = (mac_impl_t *)mh;
892 if (mip->mi_type->mt_addr_length == 0)
895 i_mac_perim_enter(mip);
896 bcopy(addr, mip->mi_dstaddr, mip->mi_type->mt_addr_length);
897 i_mac_perim_exit(mip);
898 i_mac_notify(mip, MAC_NOTE_DEST);
907 mac_impl_t *mip = (mac_impl_t *)mh;
913 if (!(mip->mi_type->mt_ops.mtops_ops & MTOPS_PDATA_VERIFY))
915 if (!mip->mi_type->mt_ops.mtops_pdata_verify(mac_pdata, dsize))
918 if (mip->mi_pdata != NULL)
919 kmem_free(mip->mi_pdata, mip->mi_pdata_size);
921 mip->mi_pdata = kmem_alloc(dsize, KM_SLEEP);
922 bcopy(mac_pdata, mip->mi_pdata, dsize);
923 mip->mi_pdata_size = dsize;
930 i_mac_notify(mip, MAC_NOTE_FASTPATH_FLUSH);
954 mac_impl_t *mip = (mac_impl_t *)mh;
956 if (sdu_max == 0 || sdu_max < mip->mi_sdu_min)
958 mip->mi_sdu_max = sdu_max;
959 if (mip->mi_sdu_multicast > mip->mi_sdu_max)
960 mip->mi_sdu_multicast = mip->mi_sdu_max;
963 i_mac_notify(mip, MAC_NOTE_SDU_SIZE);
974 mac_impl_t *mip = (mac_impl_t *)mh;
976 if (sdu_max == 0 || sdu_max < mip->mi_sdu_min)
980 if (sdu_multicast > sdu_max || sdu_multicast < mip->mi_sdu_min)
982 mip->mi_sdu_max = sdu_max;
983 mip->mi_sdu_multicast = sdu_multicast;
986 i_mac_notify(mip, MAC_NOTE_SDU_SIZE);
1036 mac_pseudo_ring_intr_retarget(mac_impl_t *mip, mac_ring_t *ring,
1059 i_mac_perim_exit(mip);
1061 * While we know pmip is the aggr's mip, there is a
1063 * the time we exit port's perimeter (mip) and
1069 i_mac_perim_enter(mip);
1078 i_mac_perim_exit(mip);
1080 i_mac_perim_enter(mip);
1092 i_mac_perim_exit(mip);
1106 mac_impl_t *mip = (mac_impl_t *)group->mrg_mh;
1108 i_mac_perim_enter(mip);
1114 mac_pseudo_ring_intr_retarget(mip, ring, ddh);
1119 mac_compare_ddi_handle(mip->mi_rx_groups,
1120 mip->mi_rx_group_count, ring);
1122 mac_compare_ddi_handle(mip->mi_tx_groups,
1123 mip->mi_tx_group_count, ring);
1126 mac_pseudo_ring_intr_retarget(mip, ring, ddh);
1132 i_mac_perim_exit(mip);
1141 i_mac_log_link_state(mac_impl_t *mip)
1146 if (mip->mi_lastlowlinkstate == mip->mi_lowlinkstate)
1149 switch (mip->mi_lowlinkstate) {
1151 if (mip->mi_type->mt_ops.mtops_ops & MTOPS_LINK_DETAILS) {
1154 mip->mi_type->mt_ops.mtops_link_details(det,
1155 sizeof (det), (mac_handle_t)mip, mip->mi_pdata);
1157 cmn_err(CE_NOTE, "!%s link up, %s", mip->mi_name, det);
1159 cmn_err(CE_NOTE, "!%s link up", mip->mi_name);
1167 if (mip->mi_lastlowlinkstate != LINK_STATE_UNKNOWN)
1168 cmn_err(CE_NOTE, "!%s link down", mip->mi_name);
1177 mip->mi_lastlowlinkstate = mip->mi_lowlinkstate;
1186 mac_impl_t *mip = arg;
1192 mcbi = &mip->mi_notify_cb_info;
1202 bits = mip->mi_notify_bits;
1209 mip->mi_notify_bits = 0;
1212 ASSERT(mip->mi_state_flags & MIS_DISABLED);
1226 i_mac_log_link_state(mip);
1227 newstate = mip->mi_lowlinkstate;
1228 if (mip->mi_bridge_link != NULL) {
1229 mutex_enter(&mip->mi_bridge_lock);
1230 if ((mh = mip->mi_bridge_link) != NULL) {
1234 mutex_exit(&mip->mi_bridge_lock);
1236 if (newstate != mip->mi_linkstate) {
1237 mip->mi_linkstate = newstate;
1251 (*mac_notify_cb_list[type])(mip);
1256 MAC_CALLBACK_WALKER_INC(&mip->mi_notify_cb_info);
1257 for (mcb = mip->mi_notify_cb_list; mcb != NULL;
1262 MAC_CALLBACK_WALKER_DCR(&mip->mi_notify_cb_info,
1263 &mip->mi_notify_cb_list);
1269 mip->mi_state_flags |= MIS_NOTIFY_DONE;
1282 i_mac_notify_exit(mac_impl_t *mip)
1286 mcbi = &mip->mi_notify_cb_info;
1289 mip->mi_notify_bits = (1 << MAC_NNOTE);
1293 while ((mip->mi_notify_thread != NULL) &&
1294 !(mip->mi_state_flags & MIS_NOTIFY_DONE)) {
1299 mip->mi_state_flags &= ~MIS_NOTIFY_DONE;
1300 mip->mi_notify_bits = 0;
1301 mip->mi_notify_thread = NULL;
1313 mac_impl_t *mip = (mac_impl_t *)group->mrg_mh;
1316 i_mac_perim_enter(mip);
1318 i_mac_perim_exit(mip);
1331 mac_impl_t *mip = (mac_impl_t *)group->mrg_mh;
1333 i_mac_perim_enter(mip);
1335 i_mac_perim_exit(mip);