Lines Matching refs:sp
314 cs_socket_t *sp; in cs_deinit() local
344 if ((sp = cs_get_sp(sn)) != NULL) { in cs_deinit()
346 if (sp->client_list) { in cs_deinit()
400 if ((sp = cs_get_sp(sn)) != NULL) { in cs_deinit()
405 UNTIMEOUT(sp->rdybsy_tmo_id); in cs_deinit()
407 if (sp->init_state & SOCKET_INIT_STATE_MUTEX) in cs_deinit()
408 mutex_enter(&sp->lock); in cs_deinit()
409 sp->flags = SOCKET_UNLOAD_MODULE; in cs_deinit()
410 if (sp->init_state & SOCKET_INIT_STATE_SOFTINTR) in cs_deinit()
411 sp->init_state &= ~SOCKET_INIT_STATE_SOFTINTR; in cs_deinit()
412 if (sp->init_state & SOCKET_INIT_STATE_MUTEX) in cs_deinit()
413 mutex_exit(&sp->lock); in cs_deinit()
415 if (sp->init_state & SOCKET_INIT_STATE_MUTEX) in cs_deinit()
416 mutex_enter(&sp->cis_lock); in cs_deinit()
417 (void) cs_destroy_cis(sp); in cs_deinit()
418 if (sp->init_state & SOCKET_INIT_STATE_MUTEX) in cs_deinit()
419 mutex_exit(&sp->cis_lock); in cs_deinit()
425 if (sp->init_state & SOCKET_INIT_STATE_MUTEX) in cs_deinit()
426 mutex_enter(&sp->client_lock); in cs_deinit()
427 if (sp->init_state & SOCKET_INIT_STATE_THREAD) { in cs_deinit()
428 sp->thread_state = SOCKET_THREAD_EXIT; in cs_deinit()
429 cv_broadcast(&sp->thread_cv); in cs_deinit()
430 cv_wait(&sp->caller_cv, &sp->client_lock); in cs_deinit()
432 if (sp->init_state & SOCKET_INIT_STATE_MUTEX) in cs_deinit()
433 mutex_exit(&sp->client_lock); in cs_deinit()
439 if (sp->init_state & SOCKET_INIT_STATE_MUTEX) in cs_deinit()
440 mutex_enter(&sp->ss_thread_lock); in cs_deinit()
441 if (sp->init_state & SOCKET_INIT_STATE_SS_THREAD) { in cs_deinit()
442 sp->ss_thread_state = SOCKET_THREAD_EXIT; in cs_deinit()
443 cv_broadcast(&sp->ss_thread_cv); in cs_deinit()
444 cv_wait(&sp->ss_caller_cv, &sp->ss_thread_lock); in cs_deinit()
447 if (sp->init_state & SOCKET_INIT_STATE_MUTEX) in cs_deinit()
448 mutex_exit(&sp->ss_thread_lock); in cs_deinit()
453 if (sp->init_state & SOCKET_INIT_STATE_MUTEX) { in cs_deinit()
454 mutex_destroy(&sp->lock); in cs_deinit()
455 mutex_destroy(&sp->client_lock); in cs_deinit()
456 mutex_destroy(&sp->cis_lock); in cs_deinit()
457 mutex_destroy(&sp->ss_thread_lock); in cs_deinit()
460 if (sp->init_state & SOCKET_INIT_STATE_CV) { in cs_deinit()
461 cv_destroy(&sp->thread_cv); in cs_deinit()
462 cv_destroy(&sp->caller_cv); in cs_deinit()
463 cv_destroy(&sp->reset_cv); in cs_deinit()
464 cv_destroy(&sp->ss_thread_cv); in cs_deinit()
465 cv_destroy(&sp->ss_caller_cv); in cs_deinit()
472 if (sp->io_mmap_window) in cs_deinit()
473 kmem_free(sp->io_mmap_window, sizeof (io_mmap_window_t)); in cs_deinit()
480 sp->event_mask = 0; in cs_deinit()
481 set_socket.socket = sp->socket_num; in cs_deinit()
488 (void) cs_convert_powerlevel(sp->socket_num, 0, VCC, in cs_deinit()
490 (void) cs_convert_powerlevel(sp->socket_num, 0, VPP1, in cs_deinit()
492 (void) cs_convert_powerlevel(sp->socket_num, 0, VPP2, in cs_deinit()
503 sp->socket_num, ret); in cs_deinit()
925 cs_socket_t *sp; in cs_parse_tuple() local
931 &fn, &sp, &client)) != CS_SUCCESS) in cs_parse_tuple()
948 mutex_enter(&sp->cis_lock); in cs_parse_tuple()
960 if ((sp->cis_flags & CW_VALID_CIS) && in cs_parse_tuple()
961 (sp->cis[fn].flags & CW_VALID_CIS)) { in cs_parse_tuple()
969 mutex_exit(&sp->cis_lock); in cs_parse_tuple()
976 mutex_exit(&sp->cis_lock); in cs_parse_tuple()
1065 cs_socket_t *sp; in cs_get_firstnext_tuple() local
1071 &sp, &client)) != CS_SUCCESS) in cs_get_firstnext_tuple()
1081 mutex_enter(&sp->cis_lock); in cs_get_firstnext_tuple()
1087 if ((!(sp->cis_flags & CW_VALID_CIS)) || in cs_get_firstnext_tuple()
1088 (!(sp->cis[fn].flags & CW_VALID_CIS))) { in cs_get_firstnext_tuple()
1089 mutex_exit(&sp->cis_lock); in cs_get_firstnext_tuple()
1124 if (sp->cis_flags & CW_MULTI_FUNCTION_CIS) { in cs_get_firstnext_tuple()
1126 GET_FIRST_LTUPLE(sp->cis[CS_GLOBAL_CIS].cis, in cs_get_firstnext_tuple()
1128 mutex_exit(&sp->cis_lock); in cs_get_firstnext_tuple()
1132 tuple->CISOffset = sp->cis[0].cis; in cs_get_firstnext_tuple()
1144 mutex_exit(&sp->cis_lock); in cs_get_firstnext_tuple()
1158 if (sp->cis_flags & CW_MULTI_FUNCTION_CIS) { in cs_get_firstnext_tuple()
1161 tp = GET_FIRST_LTUPLE(sp->cis[fn].cis, flags); in cs_get_firstnext_tuple()
1170 mutex_exit(&sp->cis_lock); in cs_get_firstnext_tuple()
1188 if (sp->cis_flags & CW_MULTI_FUNCTION_CIS) { in cs_get_firstnext_tuple()
1191 tp = FIND_FIRST_LTUPLE(sp->cis[fn].cis, in cs_get_firstnext_tuple()
1201 mutex_exit(&sp->cis_lock); in cs_get_firstnext_tuple()
1217 mutex_exit(&sp->cis_lock); in cs_get_firstnext_tuple()
1239 cs_socket_t *sp; in cs_get_tuple_data() local
1248 &sp, &client)) != CS_SUCCESS) in cs_get_tuple_data()
1258 mutex_enter(&sp->cis_lock); in cs_get_tuple_data()
1260 if ((sp->cis_flags & CW_VALID_CIS) && in cs_get_tuple_data()
1261 (sp->cis[fn].flags & CW_VALID_CIS)) { in cs_get_tuple_data()
1268 mutex_exit(&sp->cis_lock); in cs_get_tuple_data()
1287 mutex_exit(&sp->cis_lock); in cs_get_tuple_data()
1297 mutex_exit(&sp->cis_lock); in cs_get_tuple_data()
1341 if (cs_init_cis_window(sp, &newoffset, &cis_handle, in cs_get_tuple_data()
1343 mutex_exit(&sp->cis_lock); in cs_get_tuple_data()
1346 sp->socket_num); in cs_get_tuple_data()
1356 mutex_exit(&sp->cis_lock); in cs_get_tuple_data()
1365 mutex_exit(&sp->cis_lock); in cs_get_tuple_data()
1425 cs_socket_t *sp; in cs_validate_cis() local
1431 &sp, &client)) != CS_SUCCESS) in cs_validate_cis()
1441 mutex_enter(&sp->cis_lock); in cs_validate_cis()
1442 if ((sp->cis_flags & CW_VALID_CIS) && in cs_validate_cis()
1443 (sp->cis[fn].flags & CW_VALID_CIS)) { in cs_validate_cis()
1444 cisinfo->Chains = sp->cis[fn].nchains; in cs_validate_cis()
1445 cisinfo->Tuples = sp->cis[fn].ntuples; in cs_validate_cis()
1448 (sp->cis[CS_GLOBAL_CIS].flags & CW_VALID_CIS)) { in cs_validate_cis()
1449 cisinfo->Chains += sp->cis[CS_GLOBAL_CIS].nchains; in cs_validate_cis()
1450 cisinfo->Tuples += sp->cis[CS_GLOBAL_CIS].ntuples; in cs_validate_cis()
1459 mutex_exit(&sp->cis_lock); in cs_validate_cis()
1492 cs_init_cis_window(cs_socket_t *sp, uint32_t *offset, in cs_init_cis_window() argument
1504 if (!SOCKET_HAS_CIS_WINDOW(sp)) { in cs_init_cis_window()
1507 sp->socket_num); in cs_init_cis_window()
1514 if ((cw = cs_get_wp(sp->cis_win_num)) == NULL) in cs_init_cis_window()
1520 sp->socket_num, cw->state); in cs_init_cis_window()
1529 iw.window = sp->cis_win_num; in cs_init_cis_window()
1541 sw.WindowSize = sp->cis_win_size; in cs_init_cis_window()
1542 set_page.offset = ((*offset / sp->cis_win_size) * in cs_init_cis_window()
1543 sp->cis_win_size); in cs_init_cis_window()
1573 sw.window = sp->cis_win_num; in cs_init_cis_window()
1574 sw.socket = sp->socket_num; in cs_init_cis_window()
1594 sp->cis_win_num = PCMCIA_MAX_WINDOWS; in cs_init_cis_window()
1598 set_page.window = sp->cis_win_num; in cs_init_cis_window()
1605 sp->cis_win_num = PCMCIA_MAX_WINDOWS; in cs_init_cis_window()
1614 gw.window = sp->cis_win_num; in cs_init_cis_window()
1615 gw.socket = sp->socket_num; /* XXX - SS_GetWindow should set this */ in cs_init_cis_window()
1834 cs_socket_t *sp; in cs_add_client_to_socket() local
1842 if ((sp = cs_get_sp(sn)) == NULL) in cs_add_client_to_socket()
1845 EVENT_THREAD_MUTEX_ENTER(client_lock_acquired, sp); in cs_add_client_to_socket()
1858 mutex_enter(&sp->lock); in cs_add_client_to_socket()
1859 client = sp->client_list; in cs_add_client_to_socket()
1863 mutex_exit(&sp->lock); in cs_add_client_to_socket()
1864 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_add_client_to_socket()
1876 mutex_exit(&sp->lock); in cs_add_client_to_socket()
1892 mutex_enter(&sp->lock); in cs_add_client_to_socket()
1894 mutex_exit(&sp->lock); in cs_add_client_to_socket()
1895 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_add_client_to_socket()
1912 mutex_exit(&sp->lock); in cs_add_client_to_socket()
1913 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_add_client_to_socket()
1957 cr->iblk_cookie = sp->iblk; in cs_add_client_to_socket()
1958 cr->idev_cookie = sp->idev; in cs_add_client_to_socket()
2026 get_ss_status.socket = sp->socket_num; in cs_add_client_to_socket()
2029 mutex_exit(&sp->lock); in cs_add_client_to_socket()
2030 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_add_client_to_socket()
2045 sp->num_clients++; in cs_add_client_to_socket()
2046 mutex_exit(&sp->lock); in cs_add_client_to_socket()
2047 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_add_client_to_socket()
2058 cs_socket_t *sp; in cs_deregister_client() local
2073 if ((sp = cs_get_sp(GET_CLIENT_SOCKET(client_handle))) == NULL) in cs_deregister_client()
2076 EVENT_THREAD_MUTEX_ENTER(client_lock_acquired, sp); in cs_deregister_client()
2082 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_deregister_client()
2098 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_deregister_client()
2103 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_deregister_client()
2124 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_deregister_client()
2185 cs_socket_t *sp; in cs_find_client() local
2208 if ((sp = cs_get_sp(GET_CLIENT_SOCKET(client_handle))) == NULL) { in cs_find_client()
2214 clp = sp->client_list; in cs_find_client()
2241 cs_socket_t *sp; in cs_destroy_client_handle() local
2252 if ((sp = cs_get_sp(GET_CLIENT_SOCKET(client_handle))) == NULL) in cs_destroy_client_handle()
2262 mutex_enter(&sp->lock); in cs_destroy_client_handle()
2263 sp->next_cl_minor = GET_CLIENT_MINOR(client_handle); in cs_destroy_client_handle()
2280 sp->client_list = clp->next; in cs_destroy_client_handle()
2291 sp->num_clients--; in cs_destroy_client_handle()
2292 mutex_exit(&sp->lock); in cs_destroy_client_handle()
2313 cs_socket_t *sp; in cs_create_client_handle() local
2317 if ((sp = cs_get_sp(socket_num)) == NULL) in cs_create_client_handle()
2331 cs_create_next_client_minor(socket_num, sp->next_cl_minor))) in cs_create_client_handle()
2358 if (!sp->client_list) { in cs_create_client_handle()
2359 sp->client_list = cclp; in cs_create_client_handle()
2360 clp = sp->client_list; in cs_create_client_handle()
2366 clp = sp->client_list; in cs_create_client_handle()
2385 sp->next_cl_minor = in cs_create_client_handle()
2386 cs_create_next_client_minor(socket_num, sp->next_cl_minor); in cs_create_client_handle()
2453 cs_socket_t *sp; in cs_event() local
2485 if ((sp = cs_get_sp(sn)) == NULL) in cs_event()
2492 if (sp->flags & SOCKET_UNLOAD_MODULE) { in cs_event()
2499 mutex_enter(&sp->lock); in cs_event()
2515 sp->events |= ss_to_cs_events(sp, event); in cs_event()
2532 client = sp->client_list; in cs_event()
2545 client->events |= ((sp->events & ~CS_EVENT_CARD_INSERTION) & in cs_event()
2605 if (sp->events) in cs_event()
2606 sp->flags |= SOCKET_NEEDS_THREAD; in cs_event()
2613 if ((sp->init_state & SOCKET_INIT_STATE_SOFTINTR) && in cs_event()
2615 ddi_trigger_softintr(sp->softint_id); in cs_event()
2617 mutex_exit(&sp->lock); in cs_event()
2643 cs_card_insertion(cs_socket_t *sp, event_t event) in cs_card_insertion() argument
2653 UNTIMEOUT(sp->rdybsy_tmo_id); in cs_card_insertion()
2658 (int)event, sp->socket_num); in cs_card_insertion()
2672 if (!SOCKET_HAS_CIS_WINDOW(sp)) { in cs_card_insertion()
2676 sp->socket_num); in cs_card_insertion()
2684 mutex_enter(&sp->lock); in cs_card_insertion()
2685 sp->event_mask = (CS_EVENT_CARD_REMOVAL | in cs_card_insertion()
2687 mutex_exit(&sp->lock); in cs_card_insertion()
2688 set_socket.socket = sp->socket_num; in cs_card_insertion()
2695 (void) cs_convert_powerlevel(sp->socket_num, 50, VCC, in cs_card_insertion()
2697 (void) cs_convert_powerlevel(sp->socket_num, 50, VPP1, in cs_card_insertion()
2699 (void) cs_convert_powerlevel(sp->socket_num, 50, VPP2, in cs_card_insertion()
2705 sp->socket_num, ret); in cs_card_insertion()
2714 mutex_enter(&sp->lock); in cs_card_insertion()
2716 sp->events &= ~(CS_EVENT_CARD_READY | CS_EVENT_READY_TIMEOUT); in cs_card_insertion()
2717 mutex_exit(&sp->lock); in cs_card_insertion()
2719 SocketServices(SS_ResetSocket, sp->socket_num, in cs_card_insertion()
2728 mutex_enter(&sp->lock); in cs_card_insertion()
2729 sp->thread_state |= SOCKET_RESET_TIMER; in cs_card_insertion()
2730 (void) timeout(cs_ready_timeout, sp, in cs_card_insertion()
2732 cv_wait(&sp->reset_cv, &sp->lock); in cs_card_insertion()
2733 sp->thread_state &= ~SOCKET_RESET_TIMER; in cs_card_insertion()
2734 mutex_exit(&sp->lock); in cs_card_insertion()
2740 sp->socket_num, cs_reset_timeout_time, (int)sp->events); in cs_card_insertion()
2749 if (sp->events & CS_EVENT_CARD_REMOVAL) { in cs_card_insertion()
2756 sp->socket_num); in cs_card_insertion()
2769 gs.socket = sp->socket_num; in cs_card_insertion()
2774 sp->socket_num, ret); in cs_card_insertion()
2778 mutex_enter(&sp->lock); in cs_card_insertion()
2779 if ((sp->events & CS_EVENT_CARD_READY) || in cs_card_insertion()
2785 "READY\n", sp->socket_num); in cs_card_insertion()
2793 "READY timer\n", sp->socket_num); in cs_card_insertion()
2797 sp->rdybsy_tmo_id = timeout(cs_ready_timeout, sp, in cs_card_insertion()
2799 sp->thread_state |= SOCKET_WAIT_FOR_READY; in cs_card_insertion()
2803 mutex_exit(&sp->lock); in cs_card_insertion()
2819 mutex_enter(&sp->lock); in cs_card_insertion()
2820 sp->event_mask = CS_EVENT_CARD_REMOVAL; in cs_card_insertion()
2821 mutex_exit(&sp->lock); in cs_card_insertion()
2822 get_socket.socket = sp->socket_num; in cs_card_insertion()
2826 sp->socket_num); in cs_card_insertion()
2830 set_socket.socket = sp->socket_num; in cs_card_insertion()
2844 sp->socket_num); in cs_card_insertion()
2854 mutex_enter(&sp->cis_lock); in cs_card_insertion()
2856 if ((ret = cs_create_cis(sp)) != CS_SUCCESS) { in cs_card_insertion()
2857 mutex_exit(&sp->cis_lock); in cs_card_insertion()
2861 mutex_exit(&sp->cis_lock); in cs_card_insertion()
2870 if (sp->events & CS_EVENT_CARD_REMOVAL) { in cs_card_insertion()
2871 mutex_enter(&sp->cis_lock); in cs_card_insertion()
2872 (void) cs_destroy_cis(sp); in cs_card_insertion()
2873 mutex_exit(&sp->cis_lock); in cs_card_insertion()
2878 mutex_enter(&sp->ss_thread_lock); in cs_card_insertion()
2879 sp->ss_thread_state |= SOCKET_THREAD_CSCISInit; in cs_card_insertion()
2880 cv_broadcast(&sp->ss_thread_cv); in cs_card_insertion()
2881 mutex_exit(&sp->ss_thread_lock); in cs_card_insertion()
2903 mutex_enter(&sp->lock); in cs_card_insertion()
2904 client = sp->client_list; in cs_card_insertion()
2911 mutex_exit(&sp->lock); in cs_card_insertion()
2927 cs_card_removal(cs_socket_t *sp) in cs_card_removal() argument
2934 cmn_err(CE_CONT, "cs_card_removal: socket %d\n", sp->socket_num); in cs_card_removal()
2941 UNTIMEOUT(sp->rdybsy_tmo_id); in cs_card_removal()
2949 mutex_enter(&sp->lock); in cs_card_removal()
2950 sp->thread_state &= ~(SOCKET_WAIT_FOR_READY | SOCKET_RESET_TIMER); in cs_card_removal()
2956 sp->event_mask = CS_EVENT_CARD_INSERTION; in cs_card_removal()
2957 mutex_exit(&sp->lock); in cs_card_removal()
2958 set_socket.socket = sp->socket_num; in cs_card_removal()
2965 (void) cs_convert_powerlevel(sp->socket_num, 0, VCC, in cs_card_removal()
2967 (void) cs_convert_powerlevel(sp->socket_num, 0, VPP1, in cs_card_removal()
2969 (void) cs_convert_powerlevel(sp->socket_num, 0, VPP2, in cs_card_removal()
2975 sp->socket_num, ret); in cs_card_removal()
2983 sp->socket_num); in cs_card_removal()
2991 mutex_enter(&sp->cis_lock); in cs_card_removal()
2992 (void) cs_destroy_cis(sp); in cs_card_removal()
2993 mutex_exit(&sp->cis_lock); in cs_card_removal()
3001 SocketServices(CSCardRemoved, sp->socket_num); in cs_card_removal()
3018 ss_to_cs_events(cs_socket_t *sp, event_t event) in ss_to_cs_events() argument
3027 if (sp->flags & SOCKET_CARD_INSERTED) { in ss_to_cs_events()
3028 sp->flags &= ~(SOCKET_CARD_INSERTED | SOCKET_IS_IO); in ss_to_cs_events()
3036 sp->events &= ~(CS_EVENT_CARD_INSERTION | in ss_to_cs_events()
3050 sp->thread_state &= ~SOCKET_WAIT_FOR_READY; in ss_to_cs_events()
3055 if (!(sp->flags & SOCKET_CARD_INSERTED)) { in ss_to_cs_events()
3056 sp->flags |= SOCKET_CARD_INSERTED; in ss_to_cs_events()
3061 if (sp->flags & SOCKET_CARD_INSERTED) in ss_to_cs_events()
3065 if (sp->flags & SOCKET_CARD_INSERTED) in ss_to_cs_events()
3069 if (sp->flags & SOCKET_CARD_INSERTED) in ss_to_cs_events()
3073 if (sp->flags & SOCKET_CARD_INSERTED) in ss_to_cs_events()
3110 cs_socket_t *sp = arg; in cs_ready_timeout() local
3113 mutex_enter(&sp->lock); in cs_ready_timeout()
3115 if (sp->thread_state & SOCKET_RESET_TIMER) { in cs_ready_timeout()
3119 sp->socket_num); in cs_ready_timeout()
3123 cvp = &sp->reset_cv; in cs_ready_timeout()
3126 if (sp->thread_state & SOCKET_WAIT_FOR_READY) { in cs_ready_timeout()
3127 sp->events |= CS_EVENT_READY_TIMEOUT; in cs_ready_timeout()
3128 cvp = &sp->thread_cv; in cs_ready_timeout()
3133 "socket %d\n", sp->socket_num); in cs_ready_timeout()
3139 mutex_exit(&sp->lock); in cs_ready_timeout()
3181 cs_socket_t *sp; in cs_socket_event_softintr() local
3213 if ((sp = cs_get_sp(sn)) != NULL) { in cs_socket_event_softintr()
3214 if (sp->init_state & SOCKET_INIT_STATE_READY) { in cs_socket_event_softintr()
3219 if (!(sp->flags & SOCKET_UNLOAD_MODULE) && in cs_socket_event_softintr()
3220 (sp->flags & SOCKET_NEEDS_THREAD)) { in cs_socket_event_softintr()
3222 mutex_enter(&sp->client_lock); in cs_socket_event_softintr()
3223 cv_broadcast(&sp->thread_cv); in cs_socket_event_softintr()
3224 mutex_exit(&sp->client_lock); in cs_socket_event_softintr()
3243 cs_socket_t *sp; in cs_event_thread() local
3247 if ((sp = cs_get_sp(sn)) == NULL) in cs_event_thread()
3253 sp->socket_num); in cs_event_thread()
3257 CALLB_CPR_INIT(&sp->cprinfo_cs, &sp->client_lock, in cs_event_thread()
3260 mutex_enter(&sp->client_lock); in cs_event_thread()
3264 CALLB_CPR_SAFE_BEGIN(&sp->cprinfo_cs); in cs_event_thread()
3265 cv_wait(&sp->thread_cv, &sp->client_lock); in cs_event_thread()
3266 CALLB_CPR_SAFE_END(&sp->cprinfo_cs, &sp->client_lock); in cs_event_thread()
3268 mutex_enter(&sp->lock); in cs_event_thread()
3269 sp->flags &= ~SOCKET_NEEDS_THREAD; in cs_event_thread()
3270 mutex_exit(&sp->lock); in cs_event_thread()
3276 if (sp->thread_state & SOCKET_THREAD_EXIT) { in cs_event_thread()
3281 sp->socket_num); in cs_event_thread()
3284 CALLB_CPR_EXIT(&sp->cprinfo_cs); in cs_event_thread()
3285 cv_broadcast(&sp->caller_cv); /* wakes up cs_deinit */ in cs_event_thread()
3286 mutex_exit(&sp->client_lock); in cs_event_thread()
3293 sp->socket_num, in cs_event_thread()
3294 (int)sp->events); in cs_event_thread()
3301 if (sp->events & CS_EVENT_CARD_INSERTION) { in cs_event_thread()
3302 mutex_enter(&sp->lock); in cs_event_thread()
3303 sp->events &= ~CS_EVENT_CARD_INSERTION; in cs_event_thread()
3304 mutex_exit(&sp->lock); in cs_event_thread()
3311 if ((sp->events & CS_EVENT_CARD_REMOVAL) == 0) { in cs_event_thread()
3312 (void) cs_card_insertion(sp, CS_EVENT_CARD_INSERTION); in cs_event_thread()
3320 "processing\n", sp->socket_num); in cs_event_thread()
3328 if (sp->events & (CS_EVENT_CARD_READY | CS_EVENT_READY_TIMEOUT)) { in cs_event_thread()
3329 mutex_enter(&sp->lock); in cs_event_thread()
3330 sp->events &= ~(CS_EVENT_CARD_READY | CS_EVENT_READY_TIMEOUT); in cs_event_thread()
3331 mutex_exit(&sp->lock); in cs_event_thread()
3332 if (sp->thread_state & SOCKET_WAIT_FOR_READY) { in cs_event_thread()
3333 mutex_enter(&sp->lock); in cs_event_thread()
3334 sp->thread_state &= ~SOCKET_WAIT_FOR_READY; in cs_event_thread()
3335 mutex_exit(&sp->lock); in cs_event_thread()
3336 (void) cs_card_insertion(sp, CS_EVENT_CARD_READY); in cs_event_thread()
3343 if (sp->events & CS_EVENT_SS_UPDATED) { in cs_event_thread()
3344 mutex_enter(&sp->lock); in cs_event_thread()
3345 sp->events &= ~CS_EVENT_SS_UPDATED; in cs_event_thread()
3346 mutex_exit(&sp->lock); in cs_event_thread()
3347 (void) cs_card_insertion(sp, CS_EVENT_SS_UPDATED); in cs_event_thread()
3353 if (sp->events & CS_EVENT_STATUS_CHANGE) { in cs_event_thread()
3356 mutex_enter(&sp->cis_lock); in cs_event_thread()
3357 mutex_enter(&sp->lock); in cs_event_thread()
3358 sp->events &= ~CS_EVENT_STATUS_CHANGE; in cs_event_thread()
3372 client = sp->client_list; in cs_event_thread()
3385 (void) cs_read_event_status(sp, client, in cs_event_thread()
3395 mutex_exit(&sp->lock); in cs_event_thread()
3396 mutex_exit(&sp->cis_lock); in cs_event_thread()
3414 client = sp->client_list; in cs_event_thread()
3457 mutex_enter(&sp->lock); in cs_event_thread()
3462 mutex_exit(&sp->lock); in cs_event_thread()
3475 mutex_enter(&sp->lock); in cs_event_thread()
3477 mutex_exit(&sp->lock); in cs_event_thread()
3491 mutex_enter(&sp->lock); in cs_event_thread()
3495 mutex_exit(&sp->lock); in cs_event_thread()
3510 mutex_enter(&sp->cis_lock); in cs_event_thread()
3511 mutex_enter(&sp->lock); in cs_event_thread()
3512 (void) cs_read_event_status(sp, client, in cs_event_thread()
3524 mutex_exit(&sp->lock); in cs_event_thread()
3525 mutex_exit(&sp->cis_lock); in cs_event_thread()
3543 mutex_enter(&sp->lock); in cs_event_thread()
3545 mutex_exit(&sp->lock); in cs_event_thread()
3562 if (sp->events & CS_EVENT_CARD_REMOVAL) { in cs_event_thread()
3563 mutex_enter(&sp->lock); in cs_event_thread()
3564 sp->events &= ~CS_EVENT_CARD_REMOVAL; in cs_event_thread()
3565 mutex_exit(&sp->lock); in cs_event_thread()
3566 (void) cs_card_removal(sp); in cs_event_thread()
3572 if (sp->thread_state & SOCKET_WAIT_SYNC) { in cs_event_thread()
3573 mutex_enter(&sp->lock); in cs_event_thread()
3574 sp->thread_state &= ~SOCKET_WAIT_SYNC; in cs_event_thread()
3575 mutex_exit(&sp->lock); in cs_event_thread()
3576 cv_broadcast(&sp->caller_cv); in cs_event_thread()
3643 cs_socket_t *sp; in cs_ss_thread() local
3645 if ((sp = cs_get_sp(sn)) == NULL) in cs_ss_thread()
3651 CALLB_CPR_INIT(&sp->cprinfo_ss, &sp->ss_thread_lock, in cs_ss_thread()
3654 mutex_enter(&sp->ss_thread_lock); in cs_ss_thread()
3658 CALLB_CPR_SAFE_BEGIN(&sp->cprinfo_ss); in cs_ss_thread()
3659 cv_wait(&sp->ss_thread_cv, &sp->ss_thread_lock); in cs_ss_thread()
3660 CALLB_CPR_SAFE_END(&sp->cprinfo_ss, &sp->ss_thread_lock); in cs_ss_thread()
3666 if (sp->ss_thread_state & SOCKET_THREAD_EXIT) { in cs_ss_thread()
3671 sp->socket_num); in cs_ss_thread()
3674 CALLB_CPR_EXIT(&sp->cprinfo_ss); in cs_ss_thread()
3675 cv_broadcast(&sp->ss_caller_cv); /* wake up cs_deinit */ in cs_ss_thread()
3676 mutex_exit(&sp->ss_thread_lock); in cs_ss_thread()
3684 (int)sp->socket_num, in cs_ss_thread()
3685 (int)sp->ss_thread_state); in cs_ss_thread()
3693 if (sp->ss_thread_state & SOCKET_THREAD_CSCISInit) { in cs_ss_thread()
3695 sp->ss_thread_state &= ~SOCKET_THREAD_CSCISInit; in cs_ss_thread()
3697 if (!(sp->flags & SOCKET_CARD_INSERTED)) { in cs_ss_thread()
3700 sp->socket_num); in cs_ss_thread()
3706 "CSCISInit\n", sp->socket_num); in cs_ss_thread()
3717 SocketServices(CSCISInit, sp->socket_num); in cs_ss_thread()
3724 mutex_enter(&sp->lock); in cs_ss_thread()
3725 sp->events |= CS_EVENT_SS_UPDATED; in cs_ss_thread()
3726 mutex_exit(&sp->lock); in cs_ss_thread()
3733 cv_broadcast(&sp->thread_cv); in cs_ss_thread()
3748 cs_socket_t *sp; in cs_request_socket_mask() local
3763 if ((sp = cs_get_sp(GET_CLIENT_SOCKET(client_handle))) == NULL) in cs_request_socket_mask()
3766 EVENT_THREAD_MUTEX_ENTER(client_lock_acquired, sp); in cs_request_socket_mask()
3772 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_request_socket_mask()
3776 mutex_enter(&sp->lock); in cs_request_socket_mask()
3783 mutex_exit(&sp->lock); in cs_request_socket_mask()
3784 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_request_socket_mask()
3820 (void) cs_set_socket_event_mask(sp, cs_merge_event_masks(sp, client)); in cs_request_socket_mask()
3822 mutex_exit(&sp->lock); in cs_request_socket_mask()
3828 cv_broadcast(&sp->thread_cv); in cs_request_socket_mask()
3841 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_request_socket_mask()
3857 cs_socket_t *sp; in cs_release_socket_mask() local
3872 if ((sp = cs_get_sp(GET_CLIENT_SOCKET(client_handle))) == NULL) in cs_release_socket_mask()
3875 EVENT_THREAD_MUTEX_ENTER(client_lock_acquired, sp); in cs_release_socket_mask()
3881 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_release_socket_mask()
3885 mutex_enter(&sp->lock); in cs_release_socket_mask()
3892 mutex_exit(&sp->lock); in cs_release_socket_mask()
3893 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_release_socket_mask()
3912 (void) cs_set_socket_event_mask(sp, cs_merge_event_masks(sp, client)); in cs_release_socket_mask()
3914 mutex_exit(&sp->lock); in cs_release_socket_mask()
3915 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_release_socket_mask()
3926 cs_socket_t *sp; in cs_get_event_mask() local
3941 if ((sp = cs_get_sp(GET_CLIENT_SOCKET(client_handle))) == NULL) in cs_get_event_mask()
3944 EVENT_THREAD_MUTEX_ENTER(client_lock_acquired, sp); in cs_get_event_mask()
3950 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_get_event_mask()
3954 mutex_enter(&sp->lock); in cs_get_event_mask()
3964 mutex_exit(&sp->lock); in cs_get_event_mask()
3965 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_get_event_mask()
3983 mutex_exit(&sp->lock); in cs_get_event_mask()
3984 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_get_event_mask()
3992 mutex_exit(&sp->lock); in cs_get_event_mask()
3993 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_get_event_mask()
4004 cs_socket_t *sp; in cs_set_event_mask() local
4019 if ((sp = cs_get_sp(GET_CLIENT_SOCKET(client_handle))) == NULL) in cs_set_event_mask()
4022 EVENT_THREAD_MUTEX_ENTER(client_lock_acquired, sp); in cs_set_event_mask()
4028 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_set_event_mask()
4032 mutex_enter(&sp->lock); in cs_set_event_mask()
4040 mutex_exit(&sp->lock); in cs_set_event_mask()
4041 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_set_event_mask()
4059 mutex_exit(&sp->lock); in cs_set_event_mask()
4060 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_set_event_mask()
4072 (void) cs_set_socket_event_mask(sp, cs_merge_event_masks(sp, client)); in cs_set_event_mask()
4074 mutex_exit(&sp->lock); in cs_set_event_mask()
4075 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_set_event_mask()
4114 cs_read_event_status(cs_socket_t *sp, client_t *client, event_t *revent, in cs_read_event_status() argument
4126 if ((sp->flags & SOCKET_CARD_INSERTED) || in cs_read_event_status()
4128 if (sp->flags & SOCKET_IS_IO) { in cs_read_event_status()
4136 if (cs_init_cis_window(sp, &newoffset, &cis_handle, in cs_read_event_status()
4140 sp->socket_num); in cs_read_event_status()
4237 get_socket.socket = sp->socket_num; in cs_read_event_status()
4239 set_socket.socket = sp->socket_num; in cs_read_event_status()
4262 gs->socket = sp->socket_num; in cs_read_event_status()
4266 if (sp->flags & SOCKET_IS_IO) { in cs_read_event_status()
4328 cs_socket_t *sp; in cs_get_status() local
4346 if ((sp = cs_get_sp(GET_CLIENT_SOCKET(client_handle))) == NULL) in cs_get_status()
4349 EVENT_THREAD_MUTEX_ENTER(client_lock_acquired, sp); in cs_get_status()
4355 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_get_status()
4367 mutex_enter(&sp->cis_lock); in cs_get_status()
4368 if ((error = cs_read_event_status(sp, client, NULL, &get_ss_status, in cs_get_status()
4370 mutex_exit(&sp->cis_lock); in cs_get_status()
4371 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_get_status()
4375 mutex_exit(&sp->cis_lock); in cs_get_status()
4389 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_get_status()
4391 get_socket.socket = sp->socket_num; in cs_get_status()
4397 set_socket.socket = sp->socket_num; in cs_get_status()
4494 cs_merge_event_masks(cs_socket_t *sp, client_t *client) in cs_merge_event_masks() argument
4505 sp->event_mask; in cs_merge_event_masks()
4507 if (!(sp->flags & SOCKET_IS_IO)) { in cs_merge_event_masks()
4550 cs_set_socket_event_mask(cs_socket_t *sp, unsigned event_mask) in cs_set_socket_event_mask() argument
4555 get_socket.socket = sp->socket_num; in cs_set_socket_event_mask()
4559 set_socket.socket = sp->socket_num; in cs_set_socket_event_mask()
4618 cs_socket_t *sp; in cs_request_window() local
4658 if ((sp = cs_get_sp(GET_CLIENT_SOCKET(client_handle))) == NULL) in cs_request_window()
4661 EVENT_THREAD_MUTEX_ENTER(client_lock_acquired, sp); in cs_request_window()
4667 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_request_window()
4672 mutex_enter(&sp->lock); in cs_request_window()
4679 mutex_exit(&sp->lock); in cs_request_window()
4680 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_request_window()
4685 mutex_exit(&sp->lock); in cs_request_window()
4696 if ((error = cs_find_mem_window(sp->socket_num, rw, &aw)) != in cs_request_window()
4698 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_request_window()
4713 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_request_window()
4720 cw->socket_num = sp->socket_num; in cs_request_window()
4732 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_request_window()
4757 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_request_window()
4775 cs_socket_t *sp; in cs_release_window() local
4800 if ((sp = cs_get_sp(GET_CLIENT_SOCKET(cw->client_handle))) == NULL) in cs_release_window()
4803 EVENT_THREAD_MUTEX_ENTER(client_lock_acquired, sp); in cs_release_window()
4809 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_release_window()
4826 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_release_window()
4838 cs_socket_t *sp; in cs_modify_window() local
4859 if ((sp = cs_get_sp(GET_CLIENT_SOCKET(cw->client_handle))) == NULL) in cs_modify_window()
4862 EVENT_THREAD_MUTEX_ENTER(client_lock_acquired, sp); in cs_modify_window()
4865 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_modify_window()
4870 mutex_enter(&sp->lock); in cs_modify_window()
4877 mutex_exit(&sp->lock); in cs_modify_window()
4878 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_modify_window()
4883 mutex_exit(&sp->lock); in cs_modify_window()
4895 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_modify_window()
4900 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_modify_window()
5025 cs_socket_t *sp; in cs_map_mem_page() local
5058 if ((sp = cs_get_sp(GET_CLIENT_SOCKET(cw->client_handle))) == NULL) in cs_map_mem_page()
5061 EVENT_THREAD_MUTEX_ENTER(client_lock_acquired, sp); in cs_map_mem_page()
5064 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_map_mem_page()
5069 mutex_enter(&sp->lock); in cs_map_mem_page()
5076 mutex_exit(&sp->lock); in cs_map_mem_page()
5077 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_map_mem_page()
5082 mutex_exit(&sp->lock); in cs_map_mem_page()
5096 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_map_mem_page()
5110 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_map_mem_page()
5115 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp); in cs_map_mem_page()
5401 cs_socket_t *sp; local
5449 if ((sp = cs_get_sp(GET_CLIENT_SOCKET(client_handle))) == NULL)
5452 EVENT_THREAD_MUTEX_ENTER(client_lock_acquired, sp);
5458 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
5468 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
5477 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
5482 mutex_enter(&sp->lock);
5489 mutex_exit(&sp->lock);
5490 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
5495 mutex_exit(&sp->lock);
5546 if (sp->io_mmap_window) {
5548 io_mmap_window_t *imw = sp->io_mmap_window;
5565 if ((error = cs_find_io_win(sp->socket_num, &iowin_char,
5567 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
5588 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
5602 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
5608 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
5655 if ((error = cs_allocate_io_win(sp->socket_num, ior->Attributes1,
5658 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
5680 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
5700 if ((error = cs_allocate_io_win(sp->socket_num,
5710 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
5737 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
5771 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
5793 cs_socket_t *sp;
5815 if ((sp = cs_get_sp(GET_CLIENT_SOCKET(client_handle))) == NULL)
5818 EVENT_THREAD_MUTEX_ENTER(client_lock_acquired, sp);
5824 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
5834 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
5843 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
5863 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
5876 if (sp->io_mmap_window) {
5877 io_mmap_window_t *imw = sp->io_mmap_window;
5885 sp->socket_num);
5886 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
5931 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
6144 cs_socket_t *sp;
6169 if ((sp = cs_get_sp(GET_CLIENT_SOCKET(client_handle))) == NULL)
6172 EVENT_THREAD_MUTEX_ENTER(client_lock_acquired, sp);
6178 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
6187 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
6195 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
6204 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
6226 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
6247 sp->socket_num,
6257 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
6278 cs_socket_t *sp;
6298 if ((sp = cs_get_sp(GET_CLIENT_SOCKET(client_handle))) == NULL)
6301 EVENT_THREAD_MUTEX_ENTER(client_lock_acquired, sp);
6307 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
6316 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
6324 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
6345 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
6354 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
6387 cs_socket_t *sp;
6416 if ((sp = cs_get_sp(GET_CLIENT_SOCKET(client_handle))) == NULL)
6427 inquire_socket.socket = sp->socket_num;
6437 EVENT_THREAD_MUTEX_ENTER(client_lock_acquired, sp);
6443 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
6452 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
6461 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
6470 mutex_enter(&sp->cis_lock);
6476 get_socket.socket = sp->socket_num;
6479 mutex_exit(&sp->cis_lock);
6480 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
6489 sp->socket_num,
6495 set_socket.socket = sp->socket_num;
6501 if (cs_convert_powerlevel(sp->socket_num, cr->Vcc, VCC,
6503 mutex_exit(&sp->cis_lock);
6504 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
6508 if (cs_convert_powerlevel(sp->socket_num, cr->Vpp1, VPP1,
6510 mutex_exit(&sp->cis_lock);
6511 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
6515 if (cs_convert_powerlevel(sp->socket_num, cr->Vpp2, VPP2,
6517 mutex_exit(&sp->cis_lock);
6518 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
6537 sp->flags &= ~SOCKET_IS_IO;
6538 mutex_exit(&sp->cis_lock);
6539 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
6551 mutex_enter(&sp->lock);
6554 mutex_exit(&sp->lock);
6555 if (cs_init_cis_window(sp, &newoffset, &cis_handle,
6557 mutex_exit(&sp->cis_lock);
6558 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
6560 "CIS window\n", sp->socket_num);
6570 mutex_enter(&sp->lock);
6723 sp->flags |= SOCKET_IS_IO;
6725 mutex_exit(&sp->lock);
6738 set_socket.SCIntMask = cs_merge_event_masks(sp, client);
6753 if (sp->cis_flags & CW_MULTI_FUNCTION_CIS) {
6765 crt->cor, cr->ConfigIndex, cr->Attributes, sp->cis_flags,
6783 sp->flags &= ~SOCKET_IS_IO;
6784 mutex_exit(&sp->cis_lock);
6785 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
6798 mutex_exit(&sp->cis_lock);
6799 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
6817 cs_socket_t *sp;
6837 if ((sp = cs_get_sp(GET_CLIENT_SOCKET(client_handle))) == NULL)
6840 EVENT_THREAD_MUTEX_ENTER(client_lock_acquired, sp);
6846 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
6855 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
6863 sp->cis_flags, CW_MULTI_FUNCTION_CIS);
6866 mutex_enter(&sp->cis_lock);
6878 if (cs_init_cis_window(sp, &newoffset, &cis_handle,
6880 mutex_exit(&sp->cis_lock);
6881 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
6883 "CIS window\n", sp->socket_num);
6887 if (sp->cis_flags & CW_MULTI_FUNCTION_CIS) {
6898 mutex_exit(&sp->cis_lock);
6899 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
6907 get_socket.socket = sp->socket_num;
6910 mutex_exit(&sp->cis_lock);
6911 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
6915 mutex_enter(&sp->lock);
6916 sp->flags &= ~SOCKET_IS_IO;
6917 set_socket.SCIntMask = cs_merge_event_masks(sp, client);
6918 mutex_exit(&sp->lock);
6920 set_socket.socket = sp->socket_num;
6933 mutex_exit(&sp->cis_lock);
6934 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
6943 mutex_exit(&sp->cis_lock);
6944 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
6967 cs_socket_t *sp;
6984 if ((sp = cs_get_sp(GET_CLIENT_SOCKET(client_handle))) == NULL)
6987 EVENT_THREAD_MUTEX_ENTER(client_lock_acquired, sp);
6993 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
7002 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
7011 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
7018 get_socket.socket = sp->socket_num;
7021 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
7030 sp->socket_num, (int)client->irq_alloc.irq,
7034 set_socket.socket = sp->socket_num;
7048 if ((sp->cis_flags & CW_MULTI_FUNCTION_CIS) &&
7058 if (cs_init_cis_window(sp, &newoffset, &cis_handle,
7060 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
7063 "CIS window\n", sp->socket_num);
7093 if (cs_convert_powerlevel(sp->socket_num, mc->Vpp1, VPP1,
7095 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
7103 if (cs_convert_powerlevel(sp->socket_num, mc->Vpp2, VPP2,
7105 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
7116 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
7120 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
7140 cs_socket_t *sp;
7163 if ((sp = cs_get_sp(GET_CLIENT_SOCKET(client_handle))) == NULL)
7166 EVENT_THREAD_MUTEX_ENTER(client_lock_acquired, sp);
7172 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
7181 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
7190 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
7194 mutex_enter(&sp->cis_lock);
7200 if (cs_init_cis_window(sp, &newoffset, &cis_handle,
7202 mutex_exit(&sp->cis_lock);
7203 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
7205 sp->socket_num);
7213 mutex_enter(&sp->lock);
7243 mutex_exit(&sp->lock);
7244 mutex_exit(&sp->cis_lock);
7245 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
7278 cs_socket_t *sp;
7286 if ((sp = cs_get_sp(CS_GET_SOCKET_NUMBER(gci->Socket))) == NULL)
7289 EVENT_THREAD_MUTEX_ENTER(client_lock_acquired, sp);
7290 mutex_enter(&sp->lock);
7294 client = sp->client_list;
7305 mutex_exit(&sp->lock);
7306 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
7310 mutex_exit(&sp->lock);
7311 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
7319 mutex_exit(&sp->lock);
7320 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
7368 cs_socket_t *sp;
7379 if ((sp = cs_get_sp(CS_GET_SOCKET_NUMBER(gpai->PhySocket))) == NULL)
7382 EVENT_THREAD_MUTEX_ENTER(client_lock_acquired, sp);
7389 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
7394 gpai->flags = sp->adapter.flags;
7395 (void) strcpy(gpai->name, sp->adapter.name);
7396 gpai->major = sp->adapter.major;
7397 gpai->minor = sp->adapter.minor;
7398 gpai->instance = sp->adapter.instance;
7399 gpai->number = sp->adapter.number;
7400 gpai->num_sockets = sp->adapter.num_sockets;
7401 gpai->first_socket = sp->adapter.first_socket;
7403 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
7437 cs_socket_t *sp;
7448 if ((sp = cs_get_sp(CS_GET_SOCKET_NUMBER(mls->PhySocket))) == NULL)
7451 EVENT_THREAD_MUTEX_ENTER(client_lock_acquired, sp);
7458 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
7463 mls->PhyAdapter = sp->adapter.number;
7465 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
7621 cs_socket_t *sp;
7637 if ((sp = cs_get_sp(GET_CLIENT_SOCKET(client_handle))) == NULL)
7640 EVENT_THREAD_MUTEX_ENTER(client_lock_acquired, sp);
7646 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
7656 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
7686 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
7724 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
7729 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
7757 cs_socket_t *sp;
7795 if ((sp = cs_get_sp(cdi->Socket)) == NULL)
7798 EVENT_THREAD_MUTEX_ENTER(client_lock_acquired, sp);
7800 client = sp->client_list;
7827 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
7834 EVENT_THREAD_MUTEX_EXIT(client_lock_acquired, sp);
7844 cs_socket_t *sp;
7854 if ((sp = cs_get_sp(sn)) == NULL)
7856 mutex_enter(&sp->client_lock);
7857 mutex_enter(&sp->lock);
7860 sp->events |= csc->Events;
7864 mutex_exit(&sp->lock);
7865 mutex_exit(&sp->client_lock);
7876 sp->thread_state |= SOCKET_WAIT_SYNC;
7877 mutex_exit(&sp->lock);
7878 cv_broadcast(&sp->thread_cv);
7879 cv_wait(&sp->caller_cv, &sp->client_lock);
7881 mutex_exit(&sp->lock);
7882 cv_broadcast(&sp->thread_cv);
7884 mutex_exit(&sp->client_lock);
7904 cs_socket_t *sp = cs_globals.sp;
7909 if ((sp = cs_find_sp(sn)) == NULL)
7912 if (sp->flags & SOCKET_IS_VALID)
7913 return (sp);
7928 cs_socket_t *sp = cs_globals.sp;
7930 while (sp) {
7931 if (sp->socket_num == CS_GET_SOCKET_NUMBER(sn))
7932 return (sp);
7933 sp = sp->next;
7958 cs_socket_t *sp;
7985 if ((sp = cs_find_sp(sn)) == NULL) {
7986 cs_socket_t *spp = cs_globals.sp;
7988 sp = (cs_socket_t *)kmem_zalloc(sizeof (cs_socket_t), KM_SLEEP);
7990 if (cs_globals.sp == NULL)
7991 cs_globals.sp = sp;
7995 spp->next = sp;
8002 if (sp->flags & SOCKET_IS_VALID)
8009 sp->socket_num = sn;
8042 sp->cis_win_num = PCMCIA_MAX_WINDOWS;
8054 if ((ret = cs_find_mem_window(sp->socket_num, &win_req,
8055 &sp->cis_win_num)) != CS_SUCCESS) {
8057 sp->cis_win_num = PCMCIA_MAX_WINDOWS;
8060 sp->socket_num, ret);
8064 if ((cw = cs_get_wp(sp->cis_win_num)) == NULL) {
8069 inquire_window.window = sp->cis_win_num;
8081 sp->cis_win_size = win_req.Size;
8083 sp->cis_win_size = PAGESIZE;
8087 cw->socket_num = sp->socket_num;
8094 "size 0x%x\n", (int)sp->socket_num,
8095 (int)sp->cis_win_num,
8096 (int)sp->cis_win_size);
8106 gcad->socket = sp->socket_num;
8109 "failure\n", sp->socket_num);
8116 sp->iblk = gcad->iblock;
8117 sp->idev = gcad->idevice;
8122 sp->adapter.flags = 0;
8123 (void) strcpy(sp->adapter.name, gcad->adapter_info.name);
8124 sp->adapter.major = gcad->adapter_info.major;
8125 sp->adapter.minor = gcad->adapter_info.minor;
8126 sp->adapter.instance = ddi_get_instance(gcad->dip);
8127 sp->adapter.number = gcad->adapter_info.number;
8128 sp->adapter.num_sockets = gcad->adapter_info.num_sockets;
8129 sp->adapter.first_socket = gcad->adapter_info.first_socket;
8132 mutex_init(&sp->lock, NULL, MUTEX_DRIVER, *(gcad->iblock));
8133 mutex_init(&sp->client_lock, NULL, MUTEX_DRIVER, NULL);
8134 mutex_init(&sp->cis_lock, NULL, MUTEX_DRIVER, NULL);
8137 mutex_init(&sp->ss_thread_lock, NULL, MUTEX_DRIVER, NULL);
8139 sp->init_state |= SOCKET_INIT_STATE_MUTEX;
8142 cv_init(&sp->thread_cv, NULL, CV_DRIVER, NULL);
8143 cv_init(&sp->caller_cv, NULL, CV_DRIVER, NULL);
8144 cv_init(&sp->reset_cv, NULL, CV_DRIVER, NULL);
8147 cv_init(&sp->ss_thread_cv, NULL, CV_DRIVER, NULL);
8148 cv_init(&sp->ss_caller_cv, NULL, CV_DRIVER, NULL);
8150 sp->init_state |= SOCKET_INIT_STATE_CV;
8158 &sp->softint_id,
8163 "softintr\n", sp->socket_num);
8168 cs_globals.softint_id = sp->softint_id;
8179 sp->softint_id = cs_globals.softint_id;
8188 sp->init_state |= SOCKET_INIT_STATE_SOFTINTR;
8197 sp->event_mask = CS_EVENT_CARD_INSERTION;
8198 set_socket.socket = sp->socket_num;
8205 (void) cs_convert_powerlevel(sp->socket_num, 0, VCC,
8207 (void) cs_convert_powerlevel(sp->socket_num, 0, VPP1,
8209 (void) cs_convert_powerlevel(sp->socket_num, 0, VPP2,
8214 "failure %d\n", sp->socket_num, ret);
8228 max(cs_globals.max_socket_num, sp->socket_num + 1);
8230 sp->flags = SOCKET_IS_VALID;
8235 sp->event_thread = CREATE_SOCKET_EVENT_THREAD(cs_event_thread,
8238 mutex_enter(&sp->lock);
8239 sp->init_state |= SOCKET_INIT_STATE_THREAD;
8240 mutex_exit(&sp->lock);
8245 sp->ss_thread = CREATE_SOCKET_EVENT_THREAD(cs_ss_thread,
8248 mutex_enter(&sp->lock);
8249 sp->init_state |= (SOCKET_INIT_STATE_SS_THREAD |
8251 sp->event_mask = CS_EVENT_CARD_INSERTION;
8252 mutex_exit(&sp->lock);
8270 cs_socket_t *sp;
8276 mutex_enter(&sp->client_lock);
8277 sp->thread_state |= SOCKET_THREAD_EXIT;
8278 cv_broadcast(&sp->thread_cv);
8279 cv_wait(&sp->caller_cv, &sp->client_lock);
8280 mutex_exit(&sp->client_lock);
8290 sp->flags &= ~SOCKET_IS_VALID;
8330 cs_socket_t *sp;
8357 if ((sp = cs_get_sp(sn)) == NULL)
8365 *csp = sp;
8370 mutex_enter(&sp->lock);
8372 mutex_exit(&sp->lock);
8383 mutex_exit(&sp->lock);
8576 cs_create_cis(cs_socket_t *sp)
8581 cis_cistpl_std_callout, sp);
8587 sp->socket_num);
8591 sp->socket_num, ret);
8604 if (!(sp->cis_flags & CW_VALID_CIS))
8612 if (!(sp->cis_flags & CW_MULTI_FUNCTION_CIS)) {
8613 bcopy((caddr_t)&sp->cis[CS_GLOBAL_CIS],
8614 (caddr_t)&sp->cis[0], sizeof (cis_info_t));
8615 bzero((caddr_t)&sp->cis[CS_GLOBAL_CIS], sizeof (cis_info_t));
8625 cs_destroy_cis(cs_socket_t *sp)
8627 CIS_PARSER(CISP_CIS_LIST_DESTROY, sp);
8650 cs_socket_t *sp;
8661 if ((sp = cs_get_sp(GET_CLIENT_SOCKET(client_handle))) == NULL)
8664 mutex_enter(&sp->client_lock);
8665 mutex_enter(&sp->lock);
8668 mutex_exit(&sp->lock);
8669 mutex_exit(&sp->client_lock);
8679 mutex_exit(&sp->lock);
8680 mutex_exit(&sp->client_lock);
8691 sp->thread_state |= SOCKET_WAIT_SYNC;
8692 mutex_exit(&sp->lock);
8693 cv_broadcast(&sp->thread_cv);
8694 cv_wait(&sp->caller_cv, &sp->client_lock);
8712 mutex_exit(&sp->client_lock);
8739 cs_socket_t *sp;
8748 if ((sp = cs_get_sp(sn)) != NULL) {
8749 mutex_enter(&sp->client_lock);
8750 if ((client = sp->client_list) != NULL)
8752 mutex_exit(&sp->client_lock);
8761 if ((sp = cs_get_sp(CS_GET_SOCKET_NUMBER(fnc->Socket))) ==
8764 mutex_enter(&sp->client_lock);
8765 if ((client = sp->client_list) == NULL) {
8766 mutex_exit(&sp->client_lock);
8774 fnc->num_clients = sp->num_clients;
8775 mutex_exit(&sp->client_lock);
8781 if ((sp = cs_get_sp(sn)) == NULL)
8784 mutex_enter(&sp->client_lock);
8787 mutex_exit(&sp->client_lock);
8791 mutex_exit(&sp->client_lock);
8794 if ((sp = cs_get_sp(sn)) != NULL) {
8795 mutex_enter(&sp->client_lock);
8796 if ((client = sp->client_list) != NULL)
8798 mutex_exit(&sp->client_lock);
8809 sp = cs_get_sp(GET_CLIENT_SOCKET(fnc->client_handle));
8810 if (sp == NULL)
8812 mutex_enter(&sp->client_lock);
8815 mutex_exit(&sp->client_lock);
8819 mutex_exit(&sp->client_lock);
8827 fnc->num_clients = sp->num_clients;
8828 mutex_exit(&sp->client_lock);