Lines Matching refs:hdlp

154 	ddi_intr_handle_impl_t	*hdlp, tmp_hdl;  in ddi_intr_alloc()  local
316 hdlp = (ddi_intr_handle_impl_t *)kmem_zalloc( in ddi_intr_alloc()
318 rw_init(&hdlp->ih_rwlock, NULL, RW_DRIVER, NULL); in ddi_intr_alloc()
319 h_array[i] = (struct __ddi_intr_handle *)hdlp; in ddi_intr_alloc()
320 hdlp->ih_type = type; in ddi_intr_alloc()
321 hdlp->ih_pri = pri; in ddi_intr_alloc()
322 hdlp->ih_cap = cap; in ddi_intr_alloc()
323 hdlp->ih_ver = DDI_INTR_VERSION; in ddi_intr_alloc()
324 hdlp->ih_state = DDI_IHDL_STATE_ALLOC; in ddi_intr_alloc()
325 hdlp->ih_dip = dip; in ddi_intr_alloc()
326 hdlp->ih_inum = i; in ddi_intr_alloc()
327 i_ddi_alloc_intr_phdl(hdlp); in ddi_intr_alloc()
329 i_ddi_set_intr_handle(dip, hdlp->ih_inum, in ddi_intr_alloc()
330 (ddi_intr_handle_t)hdlp); in ddi_intr_alloc()
349 ddi_intr_handle_impl_t *hdlp = (ddi_intr_handle_impl_t *)h; in ddi_intr_free() local
352 DDI_INTR_APIDBG((CE_CONT, "ddi_intr_free: hdlp = %p\n", (void *)hdlp)); in ddi_intr_free()
354 if (hdlp == NULL) in ddi_intr_free()
357 rw_enter(&hdlp->ih_rwlock, RW_WRITER); in ddi_intr_free()
358 if (((hdlp->ih_flags & DDI_INTR_MSIX_DUP) && in ddi_intr_free()
359 (hdlp->ih_state != DDI_IHDL_STATE_ADDED)) || in ddi_intr_free()
360 ((hdlp->ih_state != DDI_IHDL_STATE_ALLOC) && in ddi_intr_free()
361 (!(hdlp->ih_flags & DDI_INTR_MSIX_DUP)))) { in ddi_intr_free()
362 rw_exit(&hdlp->ih_rwlock); in ddi_intr_free()
367 hdlp->ih_scratch1 = 1; in ddi_intr_free()
369 ret = i_ddi_intr_ops(hdlp->ih_dip, hdlp->ih_dip, in ddi_intr_free()
370 DDI_INTROP_FREE, hdlp, NULL); in ddi_intr_free()
372 rw_exit(&hdlp->ih_rwlock); in ddi_intr_free()
375 if (hdlp->ih_flags & DDI_INTR_MSIX_DUP) in ddi_intr_free()
376 atomic_dec_32(&hdlp->ih_main->ih_dup_cnt); in ddi_intr_free()
380 n = i_ddi_intr_get_current_nintrs(hdlp->ih_dip) - 1; in ddi_intr_free()
381 curr_type = i_ddi_intr_get_current_type(hdlp->ih_dip); in ddi_intr_free()
383 i_ddi_intr_set_current_nintrs(hdlp->ih_dip, n); in ddi_intr_free()
385 if ((i_ddi_irm_supported(hdlp->ih_dip, curr_type) in ddi_intr_free()
387 (void) i_ddi_irm_modify(hdlp->ih_dip, n); in ddi_intr_free()
389 if (hdlp->ih_type & DDI_INTR_TYPE_FIXED) in ddi_intr_free()
390 i_ddi_set_intr_handle(hdlp->ih_dip, in ddi_intr_free()
391 hdlp->ih_inum, NULL); in ddi_intr_free()
393 i_ddi_intr_devi_fini(hdlp->ih_dip); in ddi_intr_free()
394 i_ddi_free_intr_phdl(hdlp); in ddi_intr_free()
396 rw_destroy(&hdlp->ih_rwlock); in ddi_intr_free()
397 kmem_free(hdlp, sizeof (ddi_intr_handle_impl_t)); in ddi_intr_free()
444 ddi_intr_handle_impl_t *hdlp = (ddi_intr_handle_impl_t *)h; in ddi_intr_get_cap() local
448 (void *)hdlp)); in ddi_intr_get_cap()
451 if (hdlp == NULL) in ddi_intr_get_cap()
454 rw_enter(&hdlp->ih_rwlock, RW_READER); in ddi_intr_get_cap()
456 if (hdlp->ih_cap) { in ddi_intr_get_cap()
457 *flagsp = hdlp->ih_cap & ~DDI_INTR_FLAG_MSI64; in ddi_intr_get_cap()
458 rw_exit(&hdlp->ih_rwlock); in ddi_intr_get_cap()
462 ret = i_ddi_intr_ops(hdlp->ih_dip, hdlp->ih_dip, in ddi_intr_get_cap()
463 DDI_INTROP_GETCAP, hdlp, (void *)flagsp); in ddi_intr_get_cap()
466 hdlp->ih_cap = *flagsp; in ddi_intr_get_cap()
472 rw_exit(&hdlp->ih_rwlock); in ddi_intr_get_cap()
479 ddi_intr_handle_impl_t *hdlp = (ddi_intr_handle_impl_t *)h; in ddi_intr_set_cap() local
482 DDI_INTR_APIDBG((CE_CONT, "ddi_intr_set_cap: hdlp = %p", (void *)hdlp)); in ddi_intr_set_cap()
484 if (hdlp == NULL) in ddi_intr_set_cap()
487 rw_enter(&hdlp->ih_rwlock, RW_WRITER); in ddi_intr_set_cap()
488 if (hdlp->ih_state != DDI_IHDL_STATE_ALLOC) { in ddi_intr_set_cap()
489 rw_exit(&hdlp->ih_rwlock); in ddi_intr_set_cap()
496 "can be set\n", ddi_driver_name(hdlp->ih_dip), in ddi_intr_set_cap()
497 ddi_get_instance(hdlp->ih_dip))); in ddi_intr_set_cap()
498 rw_exit(&hdlp->ih_rwlock); in ddi_intr_set_cap()
503 if (!(hdlp->ih_cap & (DDI_INTR_FLAG_EDGE | DDI_INTR_FLAG_LEVEL))) { in ddi_intr_set_cap()
505 " must be supported\n", ddi_driver_name(hdlp->ih_dip), in ddi_intr_set_cap()
506 ddi_get_instance(hdlp->ih_dip))); in ddi_intr_set_cap()
507 rw_exit(&hdlp->ih_rwlock); in ddi_intr_set_cap()
511 ret = i_ddi_intr_ops(hdlp->ih_dip, hdlp->ih_dip, in ddi_intr_set_cap()
512 DDI_INTROP_SETCAP, hdlp, &flags); in ddi_intr_set_cap()
514 rw_exit(&hdlp->ih_rwlock); in ddi_intr_set_cap()
537 ddi_intr_handle_impl_t *hdlp = (ddi_intr_handle_impl_t *)h; in ddi_intr_get_pri() local
541 (void *)hdlp)); in ddi_intr_get_pri()
544 if (hdlp == NULL) in ddi_intr_get_pri()
547 rw_enter(&hdlp->ih_rwlock, RW_READER); in ddi_intr_get_pri()
549 if (hdlp->ih_pri) { in ddi_intr_get_pri()
550 *prip = hdlp->ih_pri; in ddi_intr_get_pri()
551 rw_exit(&hdlp->ih_rwlock); in ddi_intr_get_pri()
555 ret = i_ddi_intr_ops(hdlp->ih_dip, hdlp->ih_dip, in ddi_intr_get_pri()
556 DDI_INTROP_GETPRI, hdlp, (void *)prip); in ddi_intr_get_pri()
559 hdlp->ih_pri = *prip; in ddi_intr_get_pri()
561 rw_exit(&hdlp->ih_rwlock); in ddi_intr_get_pri()
568 ddi_intr_handle_impl_t *hdlp = (ddi_intr_handle_impl_t *)h; in ddi_intr_set_pri() local
571 DDI_INTR_APIDBG((CE_CONT, "ddi_intr_set_pri: hdlp = %p", (void *)hdlp)); in ddi_intr_set_pri()
573 if (hdlp == NULL) in ddi_intr_set_pri()
583 rw_enter(&hdlp->ih_rwlock, RW_WRITER); in ddi_intr_set_pri()
584 if (hdlp->ih_state != DDI_IHDL_STATE_ALLOC) { in ddi_intr_set_pri()
585 rw_exit(&hdlp->ih_rwlock); in ddi_intr_set_pri()
590 if (pri == hdlp->ih_pri) { in ddi_intr_set_pri()
591 rw_exit(&hdlp->ih_rwlock); in ddi_intr_set_pri()
595 ret = i_ddi_intr_ops(hdlp->ih_dip, hdlp->ih_dip, in ddi_intr_set_pri()
596 DDI_INTROP_SETPRI, hdlp, &pri); in ddi_intr_set_pri()
599 hdlp->ih_pri = pri; in ddi_intr_set_pri()
601 rw_exit(&hdlp->ih_rwlock); in ddi_intr_set_pri()
612 ddi_intr_handle_impl_t *hdlp = (ddi_intr_handle_impl_t *)h; in ddi_intr_add_handler() local
616 (void *)hdlp)); in ddi_intr_add_handler()
618 if ((hdlp == NULL) || (inthandler == NULL)) in ddi_intr_add_handler()
621 rw_enter(&hdlp->ih_rwlock, RW_WRITER); in ddi_intr_add_handler()
622 if (hdlp->ih_state != DDI_IHDL_STATE_ALLOC) { in ddi_intr_add_handler()
623 rw_exit(&hdlp->ih_rwlock); in ddi_intr_add_handler()
627 hdlp->ih_cb_func = inthandler; in ddi_intr_add_handler()
628 hdlp->ih_cb_arg1 = arg1; in ddi_intr_add_handler()
629 hdlp->ih_cb_arg2 = arg2; in ddi_intr_add_handler()
631 ret = i_ddi_intr_ops(hdlp->ih_dip, hdlp->ih_dip, in ddi_intr_add_handler()
632 DDI_INTROP_ADDISR, hdlp, NULL); in ddi_intr_add_handler()
635 hdlp->ih_cb_func = NULL; in ddi_intr_add_handler()
636 hdlp->ih_cb_arg1 = NULL; in ddi_intr_add_handler()
637 hdlp->ih_cb_arg2 = NULL; in ddi_intr_add_handler()
639 hdlp->ih_state = DDI_IHDL_STATE_ADDED; in ddi_intr_add_handler()
641 rw_exit(&hdlp->ih_rwlock); in ddi_intr_add_handler()
649 ddi_intr_handle_impl_t *hdlp = (ddi_intr_handle_impl_t *)org; in ddi_intr_dup_handler() local
654 (void *)hdlp)); in ddi_intr_dup_handler()
657 if ((hdlp == NULL) || (*dup != NULL) || (dup_inum < 0)) { in ddi_intr_dup_handler()
663 rw_enter(&hdlp->ih_rwlock, RW_READER); in ddi_intr_dup_handler()
666 if ((hdlp->ih_state == DDI_IHDL_STATE_ALLOC) || /* intr handle alloc? */ in ddi_intr_dup_handler()
667 (hdlp->ih_type != DDI_INTR_TYPE_MSIX) || /* only MSI-X allowed */ in ddi_intr_dup_handler()
668 (hdlp->ih_flags & DDI_INTR_MSIX_DUP)) { /* only dup original */ in ddi_intr_dup_handler()
669 rw_exit(&hdlp->ih_rwlock); in ddi_intr_dup_handler()
673 hdlp->ih_scratch1 = dup_inum; in ddi_intr_dup_handler()
674 ret = i_ddi_intr_ops(hdlp->ih_dip, hdlp->ih_dip, in ddi_intr_dup_handler()
675 DDI_INTROP_DUPVEC, hdlp, NULL); in ddi_intr_dup_handler()
681 atomic_inc_32(&hdlp->ih_dup_cnt); in ddi_intr_dup_handler()
684 bcopy(hdlp, dup_hdlp, sizeof (ddi_intr_handle_impl_t)); in ddi_intr_dup_handler()
694 dup_hdlp->ih_main = hdlp; in ddi_intr_dup_handler()
697 rw_exit(&hdlp->ih_rwlock); in ddi_intr_dup_handler()
704 ddi_intr_handle_impl_t *hdlp = (ddi_intr_handle_impl_t *)h; in ddi_intr_remove_handler() local
708 (void *)hdlp)); in ddi_intr_remove_handler()
710 if (hdlp == NULL) in ddi_intr_remove_handler()
713 rw_enter(&hdlp->ih_rwlock, RW_WRITER); in ddi_intr_remove_handler()
715 if (hdlp->ih_state != DDI_IHDL_STATE_ADDED) { in ddi_intr_remove_handler()
718 } else if (hdlp->ih_flags & DDI_INTR_MSIX_DUP) in ddi_intr_remove_handler()
721 ASSERT(hdlp->ih_dup_cnt == 0); in ddi_intr_remove_handler()
722 if (hdlp->ih_dup_cnt > 0) { in ddi_intr_remove_handler()
724 "dup_cnt %d is not 0\n", hdlp->ih_dup_cnt)); in ddi_intr_remove_handler()
729 ret = i_ddi_intr_ops(hdlp->ih_dip, hdlp->ih_dip, in ddi_intr_remove_handler()
730 DDI_INTROP_REMISR, hdlp, NULL); in ddi_intr_remove_handler()
733 hdlp->ih_state = DDI_IHDL_STATE_ALLOC; in ddi_intr_remove_handler()
734 hdlp->ih_cb_func = NULL; in ddi_intr_remove_handler()
735 hdlp->ih_cb_arg1 = NULL; in ddi_intr_remove_handler()
736 hdlp->ih_cb_arg2 = NULL; in ddi_intr_remove_handler()
740 rw_exit(&hdlp->ih_rwlock); in ddi_intr_remove_handler()
751 ddi_intr_handle_impl_t *hdlp = (ddi_intr_handle_impl_t *)h; in ddi_intr_enable() local
755 (void *)hdlp)); in ddi_intr_enable()
757 if (hdlp == NULL) in ddi_intr_enable()
760 rw_enter(&hdlp->ih_rwlock, RW_WRITER); in ddi_intr_enable()
761 if ((hdlp->ih_state != DDI_IHDL_STATE_ADDED) || in ddi_intr_enable()
762 ((hdlp->ih_type == DDI_INTR_TYPE_MSI) && in ddi_intr_enable()
763 (hdlp->ih_cap & DDI_INTR_FLAG_BLOCK))) { in ddi_intr_enable()
764 rw_exit(&hdlp->ih_rwlock); in ddi_intr_enable()
768 I_DDI_VERIFY_MSIX_HANDLE(hdlp); in ddi_intr_enable()
770 ret = i_ddi_intr_ops(hdlp->ih_dip, hdlp->ih_dip, in ddi_intr_enable()
771 DDI_INTROP_ENABLE, hdlp, NULL); in ddi_intr_enable()
774 hdlp->ih_state = DDI_IHDL_STATE_ENABLE; in ddi_intr_enable()
775 i_ddi_intr_set_current_nenables(hdlp->ih_dip, in ddi_intr_enable()
776 i_ddi_intr_get_current_nenables(hdlp->ih_dip) + 1); in ddi_intr_enable()
779 rw_exit(&hdlp->ih_rwlock); in ddi_intr_enable()
786 ddi_intr_handle_impl_t *hdlp = (ddi_intr_handle_impl_t *)h; in ddi_intr_disable() local
790 (void *)hdlp)); in ddi_intr_disable()
792 if (hdlp == NULL) in ddi_intr_disable()
795 rw_enter(&hdlp->ih_rwlock, RW_WRITER); in ddi_intr_disable()
796 if ((hdlp->ih_state != DDI_IHDL_STATE_ENABLE) || in ddi_intr_disable()
797 ((hdlp->ih_type == DDI_INTR_TYPE_MSI) && in ddi_intr_disable()
798 (hdlp->ih_cap & DDI_INTR_FLAG_BLOCK))) { in ddi_intr_disable()
799 rw_exit(&hdlp->ih_rwlock); in ddi_intr_disable()
803 I_DDI_VERIFY_MSIX_HANDLE(hdlp); in ddi_intr_disable()
805 ret = i_ddi_intr_ops(hdlp->ih_dip, hdlp->ih_dip, in ddi_intr_disable()
806 DDI_INTROP_DISABLE, hdlp, NULL); in ddi_intr_disable()
809 hdlp->ih_state = DDI_IHDL_STATE_ADDED; in ddi_intr_disable()
810 i_ddi_intr_set_current_nenables(hdlp->ih_dip, in ddi_intr_disable()
811 i_ddi_intr_get_current_nenables(hdlp->ih_dip) - 1); in ddi_intr_disable()
814 rw_exit(&hdlp->ih_rwlock); in ddi_intr_disable()
821 ddi_intr_handle_impl_t *hdlp; in ddi_intr_block_enable() local
831 hdlp = (ddi_intr_handle_impl_t *)h_array[i]; in ddi_intr_block_enable()
832 rw_enter(&hdlp->ih_rwlock, RW_READER); in ddi_intr_block_enable()
834 if (hdlp->ih_state != DDI_IHDL_STATE_ADDED || in ddi_intr_block_enable()
835 hdlp->ih_type != DDI_INTR_TYPE_MSI || in ddi_intr_block_enable()
836 !(hdlp->ih_cap & DDI_INTR_FLAG_BLOCK)) { in ddi_intr_block_enable()
837 rw_exit(&hdlp->ih_rwlock); in ddi_intr_block_enable()
840 rw_exit(&hdlp->ih_rwlock); in ddi_intr_block_enable()
843 hdlp = (ddi_intr_handle_impl_t *)h_array[0]; in ddi_intr_block_enable()
844 rw_enter(&hdlp->ih_rwlock, RW_WRITER); in ddi_intr_block_enable()
845 hdlp->ih_scratch1 = count; in ddi_intr_block_enable()
846 hdlp->ih_scratch2 = (void *)h_array; in ddi_intr_block_enable()
848 ret = i_ddi_intr_ops(hdlp->ih_dip, hdlp->ih_dip, in ddi_intr_block_enable()
849 DDI_INTROP_BLOCKENABLE, hdlp, NULL); in ddi_intr_block_enable()
851 rw_exit(&hdlp->ih_rwlock); in ddi_intr_block_enable()
855 hdlp = (ddi_intr_handle_impl_t *)h_array[i]; in ddi_intr_block_enable()
856 rw_enter(&hdlp->ih_rwlock, RW_WRITER); in ddi_intr_block_enable()
857 hdlp->ih_state = DDI_IHDL_STATE_ENABLE; in ddi_intr_block_enable()
858 rw_exit(&hdlp->ih_rwlock); in ddi_intr_block_enable()
860 i_ddi_intr_set_current_nenables(hdlp->ih_dip, 1); in ddi_intr_block_enable()
869 ddi_intr_handle_impl_t *hdlp; in ddi_intr_block_disable() local
879 hdlp = (ddi_intr_handle_impl_t *)h_array[i]; in ddi_intr_block_disable()
880 rw_enter(&hdlp->ih_rwlock, RW_READER); in ddi_intr_block_disable()
881 if (hdlp->ih_state != DDI_IHDL_STATE_ENABLE || in ddi_intr_block_disable()
882 hdlp->ih_type != DDI_INTR_TYPE_MSI || in ddi_intr_block_disable()
883 !(hdlp->ih_cap & DDI_INTR_FLAG_BLOCK)) { in ddi_intr_block_disable()
884 rw_exit(&hdlp->ih_rwlock); in ddi_intr_block_disable()
887 rw_exit(&hdlp->ih_rwlock); in ddi_intr_block_disable()
890 hdlp = (ddi_intr_handle_impl_t *)h_array[0]; in ddi_intr_block_disable()
891 rw_enter(&hdlp->ih_rwlock, RW_WRITER); in ddi_intr_block_disable()
892 hdlp->ih_scratch1 = count; in ddi_intr_block_disable()
893 hdlp->ih_scratch2 = (void *)h_array; in ddi_intr_block_disable()
895 ret = i_ddi_intr_ops(hdlp->ih_dip, hdlp->ih_dip, in ddi_intr_block_disable()
896 DDI_INTROP_BLOCKDISABLE, hdlp, NULL); in ddi_intr_block_disable()
898 rw_exit(&hdlp->ih_rwlock); in ddi_intr_block_disable()
902 hdlp = (ddi_intr_handle_impl_t *)h_array[i]; in ddi_intr_block_disable()
903 rw_enter(&hdlp->ih_rwlock, RW_WRITER); in ddi_intr_block_disable()
904 hdlp->ih_state = DDI_IHDL_STATE_ADDED; in ddi_intr_block_disable()
905 rw_exit(&hdlp->ih_rwlock); in ddi_intr_block_disable()
907 i_ddi_intr_set_current_nenables(hdlp->ih_dip, 0); in ddi_intr_block_disable()
919 ddi_intr_handle_impl_t *hdlp = (ddi_intr_handle_impl_t *)h; in ddi_intr_set_mask() local
923 (void *)hdlp)); in ddi_intr_set_mask()
925 if (hdlp == NULL) in ddi_intr_set_mask()
928 rw_enter(&hdlp->ih_rwlock, RW_WRITER); in ddi_intr_set_mask()
929 if ((hdlp->ih_state != DDI_IHDL_STATE_ENABLE) || in ddi_intr_set_mask()
930 (!(hdlp->ih_cap & DDI_INTR_FLAG_MASKABLE))) { in ddi_intr_set_mask()
931 rw_exit(&hdlp->ih_rwlock); in ddi_intr_set_mask()
935 ret = i_ddi_intr_ops(hdlp->ih_dip, hdlp->ih_dip, in ddi_intr_set_mask()
936 DDI_INTROP_SETMASK, hdlp, NULL); in ddi_intr_set_mask()
938 rw_exit(&hdlp->ih_rwlock); in ddi_intr_set_mask()
945 ddi_intr_handle_impl_t *hdlp = (ddi_intr_handle_impl_t *)h; in ddi_intr_clr_mask() local
949 (void *)hdlp)); in ddi_intr_clr_mask()
951 if (hdlp == NULL) in ddi_intr_clr_mask()
954 rw_enter(&hdlp->ih_rwlock, RW_WRITER); in ddi_intr_clr_mask()
955 if ((hdlp->ih_state != DDI_IHDL_STATE_ENABLE) || in ddi_intr_clr_mask()
956 (!(hdlp->ih_cap & DDI_INTR_FLAG_MASKABLE))) { in ddi_intr_clr_mask()
957 rw_exit(&hdlp->ih_rwlock); in ddi_intr_clr_mask()
961 ret = i_ddi_intr_ops(hdlp->ih_dip, hdlp->ih_dip, in ddi_intr_clr_mask()
962 DDI_INTROP_CLRMASK, hdlp, NULL); in ddi_intr_clr_mask()
964 rw_exit(&hdlp->ih_rwlock); in ddi_intr_clr_mask()
974 ddi_intr_handle_impl_t *hdlp = (ddi_intr_handle_impl_t *)h; in ddi_intr_get_pending() local
978 (void *)hdlp)); in ddi_intr_get_pending()
980 if (hdlp == NULL) in ddi_intr_get_pending()
983 rw_enter(&hdlp->ih_rwlock, RW_READER); in ddi_intr_get_pending()
984 if (!(hdlp->ih_cap & DDI_INTR_FLAG_PENDING)) { in ddi_intr_get_pending()
985 rw_exit(&hdlp->ih_rwlock); in ddi_intr_get_pending()
989 ret = i_ddi_intr_ops(hdlp->ih_dip, hdlp->ih_dip, in ddi_intr_get_pending()
990 DDI_INTROP_GETPENDING, hdlp, (void *)pendingp); in ddi_intr_get_pending()
992 rw_exit(&hdlp->ih_rwlock); in ddi_intr_get_pending()
1041 ddi_softint_hdl_impl_t *hdlp; in ddi_intr_add_softint() local
1062 hdlp = (ddi_softint_hdl_impl_t *)kmem_zalloc( in ddi_intr_add_softint()
1066 rw_init(&hdlp->ih_rwlock, NULL, RW_DRIVER, NULL); in ddi_intr_add_softint()
1067 rw_enter(&hdlp->ih_rwlock, RW_WRITER); in ddi_intr_add_softint()
1068 hdlp->ih_pri = soft_pri; in ddi_intr_add_softint()
1069 hdlp->ih_dip = dip; in ddi_intr_add_softint()
1070 hdlp->ih_cb_func = handler; in ddi_intr_add_softint()
1071 hdlp->ih_cb_arg1 = arg1; in ddi_intr_add_softint()
1073 (void *)hdlp)); in ddi_intr_add_softint()
1076 if ((ret = i_ddi_add_softint(hdlp)) != DDI_SUCCESS) { in ddi_intr_add_softint()
1077 rw_exit(&hdlp->ih_rwlock); in ddi_intr_add_softint()
1078 rw_destroy(&hdlp->ih_rwlock); in ddi_intr_add_softint()
1079 kmem_free(hdlp, sizeof (ddi_softint_hdl_impl_t)); in ddi_intr_add_softint()
1083 *h_p = (ddi_softint_handle_t)hdlp; in ddi_intr_add_softint()
1084 rw_exit(&hdlp->ih_rwlock); in ddi_intr_add_softint()
1094 ddi_softint_hdl_impl_t *hdlp = (ddi_softint_hdl_impl_t *)h; in ddi_intr_remove_softint() local
1097 (void *)hdlp)); in ddi_intr_remove_softint()
1099 if (hdlp == NULL) in ddi_intr_remove_softint()
1102 rw_enter(&hdlp->ih_rwlock, RW_WRITER); in ddi_intr_remove_softint()
1103 i_ddi_remove_softint(hdlp); in ddi_intr_remove_softint()
1104 rw_exit(&hdlp->ih_rwlock); in ddi_intr_remove_softint()
1105 rw_destroy(&hdlp->ih_rwlock); in ddi_intr_remove_softint()
1108 kmem_free(hdlp, sizeof (ddi_softint_hdl_impl_t)); in ddi_intr_remove_softint()
1118 ddi_softint_hdl_impl_t *hdlp = (ddi_softint_hdl_impl_t *)h; in ddi_intr_trigger_softint() local
1121 if (hdlp == NULL) in ddi_intr_trigger_softint()
1124 if ((ret = i_ddi_trigger_softint(hdlp, arg2)) != DDI_SUCCESS) { in ddi_intr_trigger_softint()
1131 hdlp->ih_cb_arg2 = arg2; in ddi_intr_trigger_softint()
1141 ddi_softint_hdl_impl_t *hdlp = (ddi_softint_hdl_impl_t *)h; in ddi_intr_get_softint_pri() local
1146 if (hdlp == NULL) in ddi_intr_get_softint_pri()
1149 rw_enter(&hdlp->ih_rwlock, RW_READER); in ddi_intr_get_softint_pri()
1150 *soft_prip = hdlp->ih_pri; in ddi_intr_get_softint_pri()
1151 rw_exit(&hdlp->ih_rwlock); in ddi_intr_get_softint_pri()
1161 ddi_softint_hdl_impl_t *hdlp = (ddi_softint_hdl_impl_t *)h; in ddi_intr_set_softint_pri() local
1168 if (hdlp == NULL) in ddi_intr_set_softint_pri()
1179 rw_enter(&hdlp->ih_rwlock, RW_WRITER); in ddi_intr_set_softint_pri()
1180 orig_soft_pri = hdlp->ih_pri; in ddi_intr_set_softint_pri()
1181 hdlp->ih_pri = soft_pri; in ddi_intr_set_softint_pri()
1183 if ((ret = i_ddi_set_softint_pri(hdlp, orig_soft_pri)) != DDI_SUCCESS) { in ddi_intr_set_softint_pri()
1186 hdlp->ih_pri = orig_soft_pri; in ddi_intr_set_softint_pri()
1189 rw_exit(&hdlp->ih_rwlock); in ddi_intr_set_softint_pri()