Lines Matching refs:ss

115 static int fcoe_iocmd(fcoe_soft_state_t *ss, intptr_t data, int mode);
305 fcoe_soft_state_t *ss; in fcoe_attach() local
316 ss = ddi_get_soft_state(fcoe_state, instance); in fcoe_attach()
317 ss->ss_dip = dip; in fcoe_attach()
320 fcoe_global_ss = ss; in fcoe_attach()
321 fcoe_ret = fcoe_attach_init(ss); in fcoe_attach()
347 fcoe_soft_state_t *ss; in fcoe_detach() local
350 ss = ddi_get_soft_state(fcoe_state, instance); in fcoe_detach()
351 if (ss == NULL) { in fcoe_detach()
359 fcoe_ret = fcoe_detach_uninit(ss); in fcoe_detach()
448 fcoe_soft_state_t *ss; in fcoe_open() local
462 ss = ddi_get_soft_state(fcoe_state, instance); in fcoe_open()
463 if (ss == NULL) { in fcoe_open()
467 mutex_enter(&ss->ss_ioctl_mutex); in fcoe_open()
468 if (ss->ss_ioctl_flags & FCOE_IOCTL_FLAG_EXCL) { in fcoe_open()
473 mutex_exit(&ss->ss_ioctl_mutex); in fcoe_open()
478 if (ss->ss_ioctl_flags & FCOE_IOCTL_FLAG_OPEN) { in fcoe_open()
483 mutex_exit(&ss->ss_ioctl_mutex); in fcoe_open()
486 ss->ss_ioctl_flags |= FCOE_IOCTL_FLAG_EXCL; in fcoe_open()
489 ss->ss_ioctl_flags |= FCOE_IOCTL_FLAG_OPEN; in fcoe_open()
490 mutex_exit(&ss->ss_ioctl_mutex); in fcoe_open()
500 fcoe_soft_state_t *ss; in fcoe_close() local
507 ss = ddi_get_soft_state(fcoe_state, instance); in fcoe_close()
508 if (ss == NULL) { in fcoe_close()
512 mutex_enter(&ss->ss_ioctl_mutex); in fcoe_close()
513 if ((ss->ss_ioctl_flags & FCOE_IOCTL_FLAG_OPEN) == 0) { in fcoe_close()
514 mutex_exit(&ss->ss_ioctl_mutex); in fcoe_close()
518 ss->ss_ioctl_flags &= ~FCOE_IOCTL_FLAG_MASK; in fcoe_close()
519 mutex_exit(&ss->ss_ioctl_mutex); in fcoe_close()
529 fcoe_soft_state_t *ss; in fcoe_ioctl() local
536 ss = ddi_get_soft_state(fcoe_state, (int32_t)getminor(dev)); in fcoe_ioctl()
537 if (ss == NULL) { in fcoe_ioctl()
541 mutex_enter(&ss->ss_ioctl_mutex); in fcoe_ioctl()
542 if ((ss->ss_ioctl_flags & FCOE_IOCTL_FLAG_OPEN) == 0) { in fcoe_ioctl()
543 mutex_exit(&ss->ss_ioctl_mutex); in fcoe_ioctl()
546 mutex_exit(&ss->ss_ioctl_mutex); in fcoe_ioctl()
550 ret = fcoe_iocmd(ss, data, mode); in fcoe_ioctl()
639 fcoe_iocmd(fcoe_soft_state_t *ss, intptr_t data, int mode) in fcoe_iocmd() argument
657 mutex_enter(&ss->ss_ioctl_mutex); in fcoe_iocmd()
658 if (ss->ss_ioctl_flags & FCOE_IOCTL_FLAG_EXCL) { in fcoe_iocmd()
659 if (ss->ss_ioctl_flags & FCOE_IOCTL_FLAG_EXCL_BUSY) { in fcoe_iocmd()
660 mutex_exit(&ss->ss_ioctl_mutex); in fcoe_iocmd()
665 ss->ss_ioctl_flags |= FCOE_IOCTL_FLAG_EXCL_BUSY; in fcoe_iocmd()
667 mutex_exit(&ss->ss_ioctl_mutex); in fcoe_iocmd()
686 mutex_enter(&ss->ss_ioctl_mutex); in fcoe_iocmd()
689 mutex_exit(&ss->ss_ioctl_mutex); in fcoe_iocmd()
696 mutex_exit(&ss->ss_ioctl_mutex); in fcoe_iocmd()
705 mutex_exit(&ss->ss_ioctl_mutex); in fcoe_iocmd()
745 mutex_exit(&ss->ss_ioctl_mutex); in fcoe_iocmd()
751 ret = fcoe_create_port(ss->ss_dip, in fcoe_iocmd()
763 mutex_exit(&ss->ss_ioctl_mutex); in fcoe_iocmd()
781 mutex_enter(&ss->ss_ioctl_mutex); in fcoe_iocmd()
782 ret = fcoe_delete_port(ss->ss_dip, fcoeio, in fcoe_iocmd()
784 mutex_exit(&ss->ss_ioctl_mutex); in fcoe_iocmd()
800 mutex_enter(&ss->ss_ioctl_mutex); in fcoe_iocmd()
812 mutex_exit(&ss->ss_ioctl_mutex); in fcoe_iocmd()
854 fcoe_attach_init(fcoe_soft_state_t *ss) in fcoe_attach_init() argument
858 if (ddi_create_minor_node(ss->ss_dip, "admin", S_IFCHR, in fcoe_attach_init()
859 ddi_get_instance(ss->ss_dip), DDI_PSEUDO, 0) != DDI_SUCCESS) { in fcoe_attach_init()
869 if ((ss->ss_watchdog_taskq = ddi_taskq_create(NULL, in fcoe_attach_init()
874 ss->ss_ioctl_flags = 0; in fcoe_attach_init()
875 mutex_init(&ss->ss_ioctl_mutex, NULL, MUTEX_DRIVER, NULL); in fcoe_attach_init()
876 list_create(&ss->ss_mac_list, sizeof (fcoe_mac_t), in fcoe_attach_init()
878 list_create(&ss->ss_pfrm_list, sizeof (fcoe_i_frame_t), in fcoe_attach_init()
881 mutex_init(&ss->ss_watch_mutex, 0, MUTEX_DRIVER, 0); in fcoe_attach_init()
882 cv_init(&ss->ss_watch_cv, NULL, CV_DRIVER, NULL); in fcoe_attach_init()
883 ss->ss_flags &= ~SS_FLAG_TERMINATE_WATCHDOG; in fcoe_attach_init()
884 (void) ddi_taskq_dispatch(ss->ss_watchdog_taskq, in fcoe_attach_init()
885 fcoe_watchdog, ss, DDI_SLEEP); in fcoe_attach_init()
886 while ((ss->ss_flags & SS_FLAG_WATCHDOG_RUNNING) == 0) { in fcoe_attach_init()
889 fcoe_nworkers = ddi_prop_get_int(DDI_DEV_T_ANY, ss->ss_dip, in fcoe_attach_init()
896 ddi_report_dev(ss->ss_dip); in fcoe_attach_init()
904 fcoe_detach_uninit(fcoe_soft_state_t *ss) in fcoe_detach_uninit() argument
907 if (!list_is_empty(&ss->ss_mac_list)) { in fcoe_detach_uninit()
919 if (ss->ss_flags & SS_FLAG_WATCHDOG_RUNNING) { in fcoe_detach_uninit()
920 mutex_enter(&ss->ss_watch_mutex); in fcoe_detach_uninit()
921 ss->ss_flags |= SS_FLAG_TERMINATE_WATCHDOG; in fcoe_detach_uninit()
922 cv_broadcast(&ss->ss_watch_cv); in fcoe_detach_uninit()
923 mutex_exit(&ss->ss_watch_mutex); in fcoe_detach_uninit()
924 while (ss->ss_flags & SS_FLAG_WATCHDOG_RUNNING) { in fcoe_detach_uninit()
929 ddi_taskq_destroy(ss->ss_watchdog_taskq); in fcoe_detach_uninit()
930 mutex_destroy(&ss->ss_watch_mutex); in fcoe_detach_uninit()
931 cv_destroy(&ss->ss_watch_cv); in fcoe_detach_uninit()
933 ddi_remove_minor_node(ss->ss_dip, NULL); in fcoe_detach_uninit()
934 mutex_destroy(&ss->ss_ioctl_mutex); in fcoe_detach_uninit()
935 list_destroy(&ss->ss_mac_list); in fcoe_detach_uninit()
1058 fcoe_soft_state_t *ss = (fcoe_soft_state_t *)arg; in fcoe_watchdog() local
1062 FCOE_LOG("fcoe", "fcoe_soft_state is %p", ss); in fcoe_watchdog()
1064 mutex_enter(&ss->ss_watch_mutex); in fcoe_watchdog()
1065 ss->ss_flags |= SS_FLAG_WATCHDOG_RUNNING; in fcoe_watchdog()
1066 while ((ss->ss_flags & SS_FLAG_TERMINATE_WATCHDOG) == 0) { in fcoe_watchdog()
1067 while (fmi = (fcoe_i_frame_t *)list_head(&ss->ss_pfrm_list)) { in fcoe_watchdog()
1068 list_remove(&ss->ss_pfrm_list, fmi); in fcoe_watchdog()
1069 mutex_exit(&ss->ss_watch_mutex); in fcoe_watchdog()
1074 mutex_enter(&ss->ss_watch_mutex); in fcoe_watchdog()
1078 ss->ss_flags |= SS_FLAG_DOG_WAITING; in fcoe_watchdog()
1079 (void) cv_wait(&ss->ss_watch_cv, &ss->ss_watch_mutex); in fcoe_watchdog()
1080 ss->ss_flags &= ~SS_FLAG_DOG_WAITING; in fcoe_watchdog()
1083 ss->ss_flags &= ~SS_FLAG_WATCHDOG_RUNNING; in fcoe_watchdog()
1084 mutex_exit(&ss->ss_watch_mutex); in fcoe_watchdog()