Lines Matching defs:softsp
195 static int glvc_peek(glvc_soft_state_t *softsp,
199 static int glvc_ioctl_opt_op(glvc_soft_state_t *softsp,
257 glvc_soft_state_t *softsp;
296 softsp = ddi_get_soft_state(glvc_ssp, instance);
299 softsp->dip = dip;
301 softsp->open_state = GLVC_NO_OPEN;
302 softsp->send_complete_flag = 1;
305 softsp->dip, DDI_PROP_DONTPASS, "glvc_debug", glvc_debug);
307 if ((softsp->s_id = (uint64_t)ddi_getprop(DDI_DEV_T_ANY,
308 softsp->dip, DDI_PROP_DONTPASS, "channel#", -1))
314 if ((softsp->mtu = (uint64_t)ddi_getprop(DDI_DEV_T_ANY,
315 softsp->dip, DDI_PROP_DONTPASS, "mtu", -1))
321 softsp->mb_recv_buf =
322 (char *)kmem_zalloc(softsp->mtu, KM_NOSLEEP);
323 if (softsp->mb_recv_buf == NULL) {
327 softsp->mb_recv_buf_pa =
328 va_to_pa((caddr_t)softsp->mb_recv_buf);
330 softsp->mb_send_buf =
331 (char *)kmem_zalloc(softsp->mtu, KM_NOSLEEP);
332 if (softsp->mb_send_buf == NULL) {
333 kmem_free(softsp->mb_recv_buf, softsp->mtu);
337 softsp->mb_send_buf_pa =
338 va_to_pa((caddr_t)softsp->mb_send_buf);
343 kmem_free(softsp->mb_recv_buf, softsp->mtu);
344 kmem_free(softsp->mb_send_buf, softsp->mtu);
349 mutex_init(&(softsp->open_mutex), NULL, MUTEX_DRIVER, NULL);
350 mutex_init(&(softsp->recv_mutex), NULL, MUTEX_DRIVER, NULL);
351 mutex_init(&(softsp->send_complete_mutex), NULL,
353 mutex_init(&(softsp->statusreg_mutex), NULL,
355 cv_init(&(softsp->recv_cv), NULL, CV_DRIVER, NULL);
356 cv_init(&(softsp->send_complete_cv), NULL, CV_DRIVER, NULL);
365 kmem_free(softsp->mb_recv_buf, softsp->mtu);
366 kmem_free(softsp->mb_send_buf, softsp->mtu);
375 if (softsp->intr_mode == GLVC_POLLING_MODE)
376 ddi_trigger_softintr(softsp->poll_mode_softint_id);
381 "mtu %lu attached\n", instance, softsp->s_id,
382 softsp->mtu));
392 cv_destroy(&(softsp->send_complete_cv));
393 cv_destroy(&(softsp->recv_cv));
394 mutex_destroy(&(softsp->open_mutex));
395 mutex_destroy(&(softsp->send_complete_mutex));
396 mutex_destroy(&(softsp->recv_mutex));
397 mutex_destroy(&(softsp->statusreg_mutex));
415 glvc_soft_state_t *softsp;
422 softsp = ddi_get_soft_state(glvc_ssp, instance);
424 cv_destroy(&(softsp->send_complete_cv));
425 cv_destroy(&(softsp->recv_cv));
426 mutex_destroy(&(softsp->open_mutex));
427 mutex_destroy(&(softsp->statusreg_mutex));
428 mutex_destroy(&(softsp->send_complete_mutex));
429 mutex_destroy(&(softsp->recv_mutex));
431 kmem_free(softsp->mb_recv_buf, softsp->mtu);
432 kmem_free(softsp->mb_send_buf, softsp->mtu);
462 glvc_soft_state_t *softsp;
467 softsp = ddi_get_soft_state(glvc_ssp, instance);
469 if ((uint64_t)ddi_getprop(DDI_DEV_T_ANY, softsp->dip,
472 (caddr_t)softsp);
480 softsp->intr_mode = GLVC_INTR_MODE;
482 softsp->dip, DDI_PROP_DONTPASS, "intrmode_poll",
486 softsp->polling_interval = drv_usectohz(polling_interval);
490 softsp->intr_mode = GLVC_POLLING_MODE;
493 softsp->dip, DDI_PROP_DONTPASS, "pollmode_poll",
497 softsp->polling_interval =
502 if (softsp->intr_mode == GLVC_INTR_MODE) {
503 err = hv_service_setstatus(softsp->s_id,
515 &softsp->poll_mode_softint_id, NULL, NULL,
516 glvc_soft_intr, (caddr_t)softsp);
525 glvc_soft_state_t *softsp;
528 softsp = ddi_get_soft_state(glvc_ssp, instance);
530 if (softsp->intr_mode == GLVC_INTR_MODE)
533 ddi_remove_softintr(softsp->poll_mode_softint_id);
535 softsp->intr_mode = GLVC_MODE_NONE;
536 softsp->polling_interval = 0;
559 glvc_soft_state_t *softsp;
563 softsp = ddi_get_soft_state(glvc_ssp, instance);
565 mutex_enter(&softsp->open_mutex);
567 switch (softsp->open_state) {
570 softsp->open_state = GLVC_EXCL_OPEN;
572 softsp->open_state = GLVC_OPEN;
587 softsp->open_state);
592 mutex_exit(&softsp->open_mutex);
601 glvc_soft_state_t *softsp;
607 softsp = ddi_get_soft_state(glvc_ssp, instance);
609 mutex_enter(&softsp->open_mutex);
610 if (softsp->open_state == GLVC_NO_OPEN) {
615 softsp->open_state = GLVC_NO_OPEN;
617 mutex_exit(&softsp->open_mutex);
626 glvc_soft_state_t *softsp;
634 softsp = ddi_get_soft_state(glvc_ssp, instance);
636 mutex_enter(&softsp->recv_mutex);
638 hverr = hv_service_getstatus(softsp->s_id, &status_reg);
650 rv = cv_reltimedwait_sig(&softsp->recv_cv,
651 &softsp->recv_mutex, softsp->polling_interval,
657 mutex_exit(&softsp->recv_mutex);
665 ddi_trigger_softintr(softsp->poll_mode_softint_id);
667 hverr = hv_service_getstatus(softsp->s_id, &status_reg);
673 hverr = hv_service_recv(softsp->s_id, softsp->mb_recv_buf_pa,
674 softsp->mtu, &recv_count);
685 mutex_exit(&softsp->recv_mutex);
689 error = uiomove(softsp->mb_recv_buf, recv_count,
696 if (hv_service_clrstatus(softsp->s_id, GLVC_REG_RECV) != H_EOK) {
701 if (softsp->intr_mode == GLVC_INTR_MODE)
702 if (hv_service_setstatus(softsp->s_id, GLVC_REG_RECV_ENA)
707 mutex_exit(&softsp->recv_mutex);
716 glvc_soft_state_t *softsp;
723 softsp = ddi_get_soft_state(glvc_ssp, instance);
725 if (uiop->uio_resid > softsp->mtu)
732 mutex_enter(&softsp->send_complete_mutex);
733 while (softsp->send_complete_flag == 0) {
734 rv = cv_reltimedwait_sig(&softsp->send_complete_cv,
735 &softsp->send_complete_mutex, softsp->polling_interval,
741 mutex_exit(&softsp->send_complete_mutex);
749 ddi_trigger_softintr(softsp->poll_mode_softint_id);
754 error = uiomove(softsp->mb_send_buf, send_count,
758 hverr = hv_service_send(softsp->s_id,
759 softsp->mb_send_buf_pa, send_count, &send_count);
766 softsp->send_complete_flag = 0;
768 mutex_exit(&softsp->send_complete_mutex);
779 glvc_soft_state_t *softsp = (glvc_soft_state_t *)arg;
785 mutex_enter(&softsp->recv_mutex);
786 mutex_enter(&softsp->send_complete_mutex);
787 hverr = hv_service_getstatus(softsp->s_id, &status_reg);
796 if ((softsp->intr_mode == GLVC_INTR_MODE) &&
800 if ((hverr = hv_service_clrstatus(softsp->s_id, clr_bits))
804 mutex_exit(&softsp->send_complete_mutex);
805 mutex_exit(&softsp->recv_mutex);
810 cv_broadcast(&softsp->recv_cv);
815 softsp->send_complete_flag = 1;
816 cv_broadcast(&softsp->send_complete_cv);
820 mutex_exit(&softsp->send_complete_mutex);
821 mutex_exit(&softsp->recv_mutex);
832 glvc_peek(glvc_soft_state_t *softsp, glvc_xport_msg_peek_t *msg_peek)
839 mutex_enter(&softsp->recv_mutex);
841 hverr = hv_service_getstatus(softsp->s_id, &status_reg);
852 rv = cv_reltimedwait_sig(&softsp->recv_cv,
853 &softsp->recv_mutex, softsp->polling_interval,
859 mutex_exit(&softsp->recv_mutex);
867 ddi_trigger_softintr(softsp->poll_mode_softint_id);
869 hverr = hv_service_getstatus(softsp->s_id, &status_reg);
875 hverr = hv_service_recv(softsp->s_id, softsp->mb_recv_buf_pa,
876 softsp->mtu, &recv_count);
882 softsp->mb_recv_buf, recv_count);
888 mutex_exit(&softsp->recv_mutex);
894 glvc_ioctl_opt_op(glvc_soft_state_t *softsp, intptr_t arg, int mode)
909 glvc_xport_cmd.opt_val = softsp->mtu;
920 mutex_enter(&softsp->statusreg_mutex);
921 hverr = hv_service_getstatus(softsp->s_id, &status_reg);
922 mutex_exit(&softsp->statusreg_mutex);
951 glvc_soft_state_t *softsp;
958 softsp = ddi_get_soft_state(glvc_ssp, instance);
962 retval = glvc_ioctl_opt_op(softsp, arg, mode);
967 (char *)kmem_zalloc(softsp->mtu, KM_NOSLEEP);
970 retval = glvc_peek(softsp, &glvc_peek_msg);
1039 kmem_free(glvc_peek_msg.buf, softsp->mtu);