Lines Matching refs:smp

75 _sfxge_mac_stat_update(sfxge_mac_t *smp, int tries, int delay_usec)  in _sfxge_mac_stat_update()  argument
77 sfxge_t *sp = smp->sm_sp; in _sfxge_mac_stat_update()
78 efsys_mem_t *esmp = &(smp->sm_mem); in _sfxge_mac_stat_update()
81 ASSERT(mutex_owned(&(smp->sm_lock))); in _sfxge_mac_stat_update()
82 ASSERT3U(smp->sm_state, !=, SFXGE_MAC_UNINITIALIZED); in _sfxge_mac_stat_update()
85 if (smp->sm_mac_stats_timer_reqd && !smp->sm_mac_stats_pend) in _sfxge_mac_stat_update()
90 if (efx_mac_stats_update(sp->s_enp, esmp, smp->sm_stat, in _sfxge_mac_stat_update()
102 smp->sm_mac_stats_pend = B_FALSE; in _sfxge_mac_stat_update()
103 smp->sm_lbolt = ddi_get_lbolt(); in _sfxge_mac_stat_update()
107 sfxge_mac_stat_update_quick(sfxge_mac_t *smp) in sfxge_mac_stat_update_quick() argument
114 _sfxge_mac_stat_update(smp, 2, 50); in sfxge_mac_stat_update_quick()
118 sfxge_mac_stat_update_wait(sfxge_mac_t *smp) in sfxge_mac_stat_update_wait() argument
121 _sfxge_mac_stat_update(smp, 20, 500); in sfxge_mac_stat_update_wait()
127 sfxge_mac_t *smp = ksp->ks_private; in sfxge_mac_kstat_update() local
138 ASSERT(mutex_owned(&(smp->sm_lock))); in sfxge_mac_kstat_update()
140 if (smp->sm_state != SFXGE_MAC_STARTED) in sfxge_mac_kstat_update()
143 sfxge_mac_stat_update_quick(smp); in sfxge_mac_kstat_update()
145 knp = smp->sm_stat; in sfxge_mac_kstat_update()
148 knp->value.ui64 = (smp->sm_link_up) ? 1 : 0; in sfxge_mac_kstat_update()
151 knp->value.ui64 = smp->sm_link_speed; in sfxge_mac_kstat_update()
154 knp->value.ui64 = smp->sm_link_duplex; in sfxge_mac_kstat_update()
157 knp->value.ui64 = (smp->sm_fcntl & EFX_FCNTL_GENERATE) ? 1 : 0; in sfxge_mac_kstat_update()
160 knp->value.ui64 = (smp->sm_fcntl & EFX_FCNTL_RESPOND) ? 1 : 0; in sfxge_mac_kstat_update()
163 sfxge_ev_moderation_get(smp->sm_sp, &val); in sfxge_mac_kstat_update()
167 sfxge_rx_coalesce_mode_get(smp->sm_sp, &rxmode); in sfxge_mac_kstat_update()
171 if (sfxge_rx_scale_count_get(smp->sm_sp, &val) != 0) in sfxge_mac_kstat_update()
188 sfxge_mac_t *smp = &(sp->s_mac); in sfxge_mac_kstat_init() local
206 smp->sm_ksp = ksp; in sfxge_mac_kstat_init()
209 ksp->ks_private = smp; in sfxge_mac_kstat_init()
210 ksp->ks_lock = &(smp->sm_lock); in sfxge_mac_kstat_init()
213 smp->sm_stat = knp = ksp->ks_data; in sfxge_mac_kstat_init()
242 sfxge_mac_t *smp = &(sp->s_mac); in sfxge_mac_kstat_fini() local
245 kstat_delete(smp->sm_ksp); in sfxge_mac_kstat_fini()
246 smp->sm_ksp = NULL; in sfxge_mac_kstat_fini()
247 smp->sm_stat = NULL; in sfxge_mac_kstat_fini()
253 sfxge_mac_t *smp = &(sp->s_mac); in sfxge_mac_stat_get() local
256 mutex_enter(&(smp->sm_lock)); in sfxge_mac_stat_get()
258 if (smp->sm_state != SFXGE_MAC_STARTED) in sfxge_mac_stat_get()
261 sfxge_mac_stat_update_quick(smp); in sfxge_mac_stat_get()
263 *valp = smp->sm_stat[id].value.ui64; in sfxge_mac_stat_get()
266 mutex_exit(&(smp->sm_lock)); in sfxge_mac_stat_get()
274 sfxge_mac_t *smp = &(sp->s_mac); in sfxge_mac_poll() local
275 efsys_mem_t *esmp = &(smp->sm_mem); in sfxge_mac_poll()
279 mutex_enter(&(smp->sm_lock)); in sfxge_mac_poll()
280 while (smp->sm_state == SFXGE_MAC_STARTED) { in sfxge_mac_poll()
283 if (smp->sm_mac_stats_pend) in sfxge_mac_poll()
284 sfxge_mac_stat_update_wait(smp); in sfxge_mac_poll()
291 if ((smp->sm_link_poll_reqd == B_FALSE) && in sfxge_mac_poll()
292 (smp->sm_mac_stats_timer_reqd == B_FALSE)) in sfxge_mac_poll()
299 if (smp->sm_link_up && in sfxge_mac_poll()
301 smp->sm_mac_stats_pend = B_TRUE; in sfxge_mac_poll()
306 while (smp->sm_state == SFXGE_MAC_STARTED) { in sfxge_mac_poll()
307 if (cv_timedwait(&(smp->sm_link_poll_kv), in sfxge_mac_poll()
308 &(smp->sm_lock), timeout) < 0) { in sfxge_mac_poll()
315 mutex_exit(&(smp->sm_lock)); in sfxge_mac_poll()
322 sfxge_mac_t *smp = &(sp->s_mac); in sfxge_mac_poll_start() local
324 ASSERT(mutex_owned(&(smp->sm_lock))); in sfxge_mac_poll_start()
325 ASSERT3U(smp->sm_state, ==, SFXGE_MAC_STARTED); in sfxge_mac_poll_start()
328 (void) ddi_taskq_dispatch(smp->sm_tqp, sfxge_mac_poll, sp, DDI_SLEEP); in sfxge_mac_poll_start()
334 sfxge_mac_t *smp = &(sp->s_mac); in sfxge_mac_poll_stop() local
336 ASSERT(mutex_owned(&(smp->sm_lock))); in sfxge_mac_poll_stop()
337 ASSERT3U(smp->sm_state, ==, SFXGE_MAC_INITIALIZED); in sfxge_mac_poll_stop()
339 cv_broadcast(&(smp->sm_link_poll_kv)); in sfxge_mac_poll_stop()
342 mutex_exit(&(smp->sm_lock)); in sfxge_mac_poll_stop()
343 ddi_taskq_wait(smp->sm_tqp); in sfxge_mac_poll_stop()
344 mutex_enter(&(smp->sm_lock)); in sfxge_mac_poll_stop()
347 sfxge_mac_stat_update_wait(smp); in sfxge_mac_poll_stop()
353 sfxge_mac_t *smp = &(sp->s_mac); in sfxge_mac_init() local
354 efsys_mem_t *esmp = &(smp->sm_mem); in sfxge_mac_init()
362 SFXGE_OBJ_CHECK(smp, sfxge_mac_t); in sfxge_mac_init()
364 ASSERT3U(smp->sm_state, ==, SFXGE_MAC_UNINITIALIZED); in sfxge_mac_init()
366 smp->sm_sp = sp; in sfxge_mac_init()
368 smp->sm_link_poll_reqd = (~encp->enc_features & in sfxge_mac_init()
370 smp->sm_mac_stats_timer_reqd = (~encp->enc_features & in sfxge_mac_init()
373 mutex_init(&(smp->sm_lock), NULL, MUTEX_DRIVER, in sfxge_mac_init()
375 cv_init(&(smp->sm_link_poll_kv), NULL, CV_DRIVER, NULL); in sfxge_mac_init()
378 smp->sm_tqp = ddi_taskq_create(dip, "mac_tq", 1, TASKQ_DEFAULTPRI, 0); in sfxge_mac_init()
379 if (smp->sm_tqp == NULL) { in sfxge_mac_init()
401 smp->sm_fcntl = EFX_FCNTL_RESPOND | EFX_FCNTL_GENERATE; in sfxge_mac_init()
416 bcopy(bytes, smp->sm_bia, ETHERADDRL); in sfxge_mac_init()
428 bcopy(encp->enc_mac_addr, smp->sm_bia, ETHERADDRL); in sfxge_mac_init()
438 smp->sm_state = SFXGE_MAC_INITIALIZED; in sfxge_mac_init()
459 ddi_taskq_destroy(smp->sm_tqp); in sfxge_mac_init()
460 smp->sm_tqp = NULL; in sfxge_mac_init()
465 cv_destroy(&(smp->sm_link_poll_kv)); in sfxge_mac_init()
467 mutex_destroy(&(smp->sm_lock)); in sfxge_mac_init()
469 smp->sm_sp = NULL; in sfxge_mac_init()
478 sfxge_mac_t *smp = &(sp->s_mac); in sfxge_mac_filter_apply() local
481 ASSERT(mutex_owned(&(smp->sm_lock))); in sfxge_mac_filter_apply()
483 if (smp->sm_state == SFXGE_MAC_STARTED) { in sfxge_mac_filter_apply()
489 all_unicst = (smp->sm_promisc == SFXGE_PROMISC_ALL_PHYS); in sfxge_mac_filter_apply()
490 mulcst = (smp->sm_mcast_count > 0); in sfxge_mac_filter_apply()
491 all_mulcst = (smp->sm_promisc >= SFXGE_PROMISC_ALL_MULTI); in sfxge_mac_filter_apply()
499 smp->sm_mcast_addr, smp->sm_mcast_count)) != 0) in sfxge_mac_filter_apply()
516 sfxge_mac_t *smp = &(sp->s_mac); in sfxge_mac_start() local
517 efsys_mem_t *esmp = &(smp->sm_mem); in sfxge_mac_start()
522 mutex_enter(&(smp->sm_lock)); in sfxge_mac_start()
524 ASSERT3U(smp->sm_state, ==, SFXGE_MAC_INITIALIZED); in sfxge_mac_start()
541 if ((rc = efx_mac_fcntl_set(enp, smp->sm_fcntl, B_TRUE)) != 0) in sfxge_mac_start()
545 if ((rc = efx_mac_addr_set(enp, (smp->sm_laa_valid) ? in sfxge_mac_start()
546 smp->sm_laa : smp->sm_bia)) != 0) in sfxge_mac_start()
552 if (!smp->sm_mac_stats_timer_reqd) { in sfxge_mac_start()
561 smp->sm_state = SFXGE_MAC_STARTED; in sfxge_mac_start()
569 mutex_exit(&(smp->sm_lock)); in sfxge_mac_start()
591 mutex_exit(&(smp->sm_lock)); in sfxge_mac_start()
600 sfxge_mac_t *smp = &(sp->s_mac); in sfxge_mac_link_update_locked() local
604 ASSERT(mutex_owned(&(smp->sm_lock))); in sfxge_mac_link_update_locked()
605 if (smp->sm_state != SFXGE_MAC_STARTED) in sfxge_mac_link_update_locked()
608 if (smp->sm_link_mode == mode) in sfxge_mac_link_update_locked()
611 smp->sm_link_mode = mode; in sfxge_mac_link_update_locked()
612 smp->sm_link_up = B_TRUE; in sfxge_mac_link_update_locked()
614 switch (smp->sm_link_mode) { in sfxge_mac_link_update_locked()
617 smp->sm_link_speed = 0; in sfxge_mac_link_update_locked()
618 smp->sm_link_duplex = SFXGE_LINK_DUPLEX_UNKNOWN; in sfxge_mac_link_update_locked()
619 smp->sm_link_up = B_FALSE; in sfxge_mac_link_update_locked()
624 smp->sm_link_speed = 10; in sfxge_mac_link_update_locked()
625 smp->sm_link_duplex = (smp->sm_link_mode == EFX_LINK_10HDX) ? in sfxge_mac_link_update_locked()
631 smp->sm_link_speed = 100; in sfxge_mac_link_update_locked()
632 smp->sm_link_duplex = (smp->sm_link_mode == EFX_LINK_100HDX) ? in sfxge_mac_link_update_locked()
638 smp->sm_link_speed = 1000; in sfxge_mac_link_update_locked()
639 smp->sm_link_duplex = (smp->sm_link_mode == EFX_LINK_1000HDX) ? in sfxge_mac_link_update_locked()
644 smp->sm_link_speed = 10000; in sfxge_mac_link_update_locked()
645 smp->sm_link_duplex = SFXGE_LINK_DUPLEX_FULL; in sfxge_mac_link_update_locked()
649 smp->sm_link_speed = 40000; in sfxge_mac_link_update_locked()
650 smp->sm_link_duplex = SFXGE_LINK_DUPLEX_FULL; in sfxge_mac_link_update_locked()
658 duplex = (smp->sm_link_duplex == SFXGE_LINK_DUPLEX_FULL) ? in sfxge_mac_link_update_locked()
660 change = (smp->sm_link_up) ? "UP" : "DOWN"; in sfxge_mac_link_update_locked()
662 smp->sm_link_speed, duplex); in sfxge_mac_link_update_locked()
665 change, smp->sm_link_up ? info : ""); in sfxge_mac_link_update_locked()
674 sfxge_mac_t *smp = &(sp->s_mac); in sfxge_mac_link_update() local
676 mutex_enter(&(smp->sm_lock)); in sfxge_mac_link_update()
678 mutex_exit(&(smp->sm_lock)); in sfxge_mac_link_update()
684 sfxge_mac_t *smp = &(sp->s_mac); in sfxge_mac_link_check() local
686 mutex_enter(&(smp->sm_lock)); in sfxge_mac_link_check()
687 *upp = smp->sm_link_up; in sfxge_mac_link_check()
688 mutex_exit(&(smp->sm_lock)); in sfxge_mac_link_check()
694 sfxge_mac_t *smp = &(sp->s_mac); in sfxge_mac_link_speed_get() local
696 mutex_enter(&(smp->sm_lock)); in sfxge_mac_link_speed_get()
697 *speedp = smp->sm_link_speed; in sfxge_mac_link_speed_get()
698 mutex_exit(&(smp->sm_lock)); in sfxge_mac_link_speed_get()
704 sfxge_mac_t *smp = &(sp->s_mac); in sfxge_mac_link_duplex_get() local
706 mutex_enter(&(smp->sm_lock)); in sfxge_mac_link_duplex_get()
707 *duplexp = smp->sm_link_duplex; in sfxge_mac_link_duplex_get()
708 mutex_exit(&(smp->sm_lock)); in sfxge_mac_link_duplex_get()
714 sfxge_mac_t *smp = &(sp->s_mac); in sfxge_mac_fcntl_get() local
716 mutex_enter(&(smp->sm_lock)); in sfxge_mac_fcntl_get()
717 *fcntlp = smp->sm_fcntl; in sfxge_mac_fcntl_get()
718 mutex_exit(&(smp->sm_lock)); in sfxge_mac_fcntl_get()
724 sfxge_mac_t *smp = &(sp->s_mac); in sfxge_mac_fcntl_set() local
727 mutex_enter(&(smp->sm_lock)); in sfxge_mac_fcntl_set()
729 if (smp->sm_fcntl == fcntl) in sfxge_mac_fcntl_set()
732 smp->sm_fcntl = fcntl; in sfxge_mac_fcntl_set()
734 if (smp->sm_state != SFXGE_MAC_STARTED) in sfxge_mac_fcntl_set()
737 if ((rc = efx_mac_fcntl_set(sp->s_enp, smp->sm_fcntl, B_TRUE)) != 0) in sfxge_mac_fcntl_set()
741 mutex_exit(&(smp->sm_lock)); in sfxge_mac_fcntl_set()
748 mutex_exit(&(smp->sm_lock)); in sfxge_mac_fcntl_set()
756 sfxge_mac_t *smp = &(sp->s_mac); in sfxge_mac_unicst_get() local
764 mutex_enter(&(smp->sm_lock)); in sfxge_mac_unicst_get()
766 if (smp->sm_state != SFXGE_MAC_INITIALIZED && in sfxge_mac_unicst_get()
767 smp->sm_state != SFXGE_MAC_STARTED) { in sfxge_mac_unicst_get()
774 bcopy(smp->sm_bia, addr, ETHERADDRL); in sfxge_mac_unicst_get()
778 if (!(smp->sm_laa_valid)) { in sfxge_mac_unicst_get()
783 bcopy(smp->sm_laa, addr, ETHERADDRL); in sfxge_mac_unicst_get()
791 mutex_exit(&(smp->sm_lock)); in sfxge_mac_unicst_get()
801 mutex_exit(&(smp->sm_lock)); in sfxge_mac_unicst_get()
812 sfxge_mac_t *smp = &(sp->s_mac); in sfxge_mac_unicst_set() local
818 mutex_enter(&(smp->sm_lock)); in sfxge_mac_unicst_set()
820 old_mac_valid = smp->sm_laa_valid; in sfxge_mac_unicst_set()
822 bcopy(smp->sm_laa, old_mac, ETHERADDRL); in sfxge_mac_unicst_set()
824 bcopy(addr, smp->sm_laa, ETHERADDRL); in sfxge_mac_unicst_set()
825 smp->sm_laa_valid = B_TRUE; in sfxge_mac_unicst_set()
827 if (smp->sm_state != SFXGE_MAC_STARTED) in sfxge_mac_unicst_set()
831 if ((rc = efx_mac_addr_set(enp, smp->sm_laa)) != 0) { in sfxge_mac_unicst_set()
838 mutex_exit(&smp->sm_lock); in sfxge_mac_unicst_set()
843 mutex_enter(&(smp->sm_lock)); in sfxge_mac_unicst_set()
846 mutex_enter(&smp->sm_lock); in sfxge_mac_unicst_set()
849 if ((rc = efx_mac_addr_set(enp, smp->sm_laa)) != 0) in sfxge_mac_unicst_set()
853 mutex_exit(&(smp->sm_lock)); in sfxge_mac_unicst_set()
859 bcopy(old_mac, smp->sm_laa, ETHERADDRL); in sfxge_mac_unicst_set()
861 smp->sm_laa_valid = B_FALSE; in sfxge_mac_unicst_set()
865 mutex_exit(&(smp->sm_lock)); in sfxge_mac_unicst_set()
873 sfxge_mac_t *smp = &(sp->s_mac); in sfxge_mac_promisc_set() local
876 mutex_enter(&(smp->sm_lock)); in sfxge_mac_promisc_set()
878 if (smp->sm_promisc == promisc) in sfxge_mac_promisc_set()
881 smp->sm_promisc = promisc; in sfxge_mac_promisc_set()
887 mutex_exit(&(smp->sm_lock)); in sfxge_mac_promisc_set()
892 mutex_exit(&(smp->sm_lock)); in sfxge_mac_promisc_set()
900 sfxge_mac_t *smp = &(sp->s_mac); in sfxge_mac_multicst_add() local
904 mutex_enter(&(smp->sm_lock)); in sfxge_mac_multicst_add()
913 while (i < smp->sm_mcast_count) { in sfxge_mac_multicst_add()
914 if (bcmp(smp->sm_mcast_addr + (i * ETHERADDRL), in sfxge_mac_multicst_add()
921 if (smp->sm_mcast_count >= EFX_MAC_MULTICAST_LIST_MAX) { in sfxge_mac_multicst_add()
927 bcopy(addr, smp->sm_mcast_addr + (smp->sm_mcast_count++ * ETHERADDRL), in sfxge_mac_multicst_add()
934 mutex_exit(&(smp->sm_lock)); in sfxge_mac_multicst_add()
939 smp->sm_mcast_count--; in sfxge_mac_multicst_add()
942 mutex_exit(&(smp->sm_lock)); in sfxge_mac_multicst_add()
950 sfxge_mac_t *smp = &(sp->s_mac); in sfxge_mac_multicst_remove() local
954 mutex_enter(&(smp->sm_lock)); in sfxge_mac_multicst_remove()
957 while (i < smp->sm_mcast_count) { in sfxge_mac_multicst_remove()
958 if (bcmp(smp->sm_mcast_addr + (i * ETHERADDRL), in sfxge_mac_multicst_remove()
960 (void) memmove(smp->sm_mcast_addr + (i * ETHERADDRL), in sfxge_mac_multicst_remove()
961 smp->sm_mcast_addr + ((i + 1) * ETHERADDRL), in sfxge_mac_multicst_remove()
962 (smp->sm_mcast_count - (i + 1)) * ETHERADDRL); in sfxge_mac_multicst_remove()
963 smp->sm_mcast_count--; in sfxge_mac_multicst_remove()
971 mutex_exit(&(smp->sm_lock)); in sfxge_mac_multicst_remove()
976 mutex_exit(&(smp->sm_lock)); in sfxge_mac_multicst_remove()
984 sfxge_mac_t *smp = &(sp->s_mac); in sfxge_mac_stop() local
986 efsys_mem_t *esmp = &(smp->sm_mem); in sfxge_mac_stop()
988 mutex_enter(&(smp->sm_lock)); in sfxge_mac_stop()
990 ASSERT3U(smp->sm_state, ==, SFXGE_MAC_STARTED); in sfxge_mac_stop()
991 ASSERT3P(smp->sm_sp, ==, sp); in sfxge_mac_stop()
992 smp->sm_state = SFXGE_MAC_INITIALIZED; in sfxge_mac_stop()
995 if (!smp->sm_mac_stats_timer_reqd) in sfxge_mac_stop()
1000 smp->sm_lbolt = 0; in sfxge_mac_stop()
1002 smp->sm_link_up = B_FALSE; in sfxge_mac_stop()
1003 smp->sm_link_speed = 0; in sfxge_mac_stop()
1004 smp->sm_link_duplex = SFXGE_LINK_DUPLEX_UNKNOWN; in sfxge_mac_stop()
1009 smp->sm_link_mode = EFX_LINK_UNKNOWN; in sfxge_mac_stop()
1013 mutex_exit(&(smp->sm_lock)); in sfxge_mac_stop()
1019 sfxge_mac_t *smp = &(sp->s_mac); in sfxge_mac_fini() local
1020 efsys_mem_t *esmp = &(smp->sm_mem); in sfxge_mac_fini()
1022 ASSERT3U(smp->sm_state, ==, SFXGE_MAC_INITIALIZED); in sfxge_mac_fini()
1023 ASSERT3P(smp->sm_sp, ==, sp); in sfxge_mac_fini()
1029 smp->sm_state = SFXGE_MAC_UNINITIALIZED; in sfxge_mac_fini()
1030 smp->sm_link_mode = EFX_LINK_UNKNOWN; in sfxge_mac_fini()
1031 smp->sm_promisc = SFXGE_PROMISC_OFF; in sfxge_mac_fini()
1033 bzero(smp->sm_mcast_addr, sizeof (smp->sm_mcast_addr)); in sfxge_mac_fini()
1034 smp->sm_mcast_count = 0; in sfxge_mac_fini()
1036 bzero(smp->sm_laa, ETHERADDRL); in sfxge_mac_fini()
1037 smp->sm_laa_valid = B_FALSE; in sfxge_mac_fini()
1039 bzero(smp->sm_bia, ETHERADDRL); in sfxge_mac_fini()
1041 smp->sm_fcntl = 0; in sfxge_mac_fini()
1050 ddi_taskq_destroy(smp->sm_tqp); in sfxge_mac_fini()
1051 smp->sm_tqp = NULL; in sfxge_mac_fini()
1053 mutex_destroy(&(smp->sm_lock)); in sfxge_mac_fini()
1055 smp->sm_sp = NULL; in sfxge_mac_fini()