Lines Matching refs:sip
74 sfxge_intr_t *sip = &(sp->s_intr);
82 ASSERT3U(sip->si_type, ==, EFX_INTR_LINE);
84 if (sip->si_state != SFXGE_INTR_STARTED &&
85 sip->si_state != SFXGE_INTR_TESTING) {
90 if (sip->si_state == SFXGE_INTR_TESTING) {
91 sip->si_mask |= 1; /* only one interrupt */
111 sip->si_zero_count = 0;
123 if (sip->si_zero_count++ == 0) {
148 sfxge_intr_t *sip = &(sp->s_intr);
153 ASSERT3U(sip->si_type, ==, EFX_INTR_MESSAGE);
155 if (sip->si_state != SFXGE_INTR_STARTED &&
156 sip->si_state != SFXGE_INTR_TESTING) {
161 if (sip->si_state == SFXGE_INTR_TESTING) {
165 mask = sip->si_mask;
166 } while (atomic_cas_64(&(sip->si_mask), mask,
194 sfxge_intr_t *sip = &(sp->s_intr);
204 switch (sip->si_type) {
216 sip->si_type, sip->si_nalloc);
223 for (add_index = 0; add_index < sip->si_nalloc; add_index++) {
227 err = ddi_intr_get_pri(sip->si_table[add_index], &pri);
232 err = ddi_intr_add_handler(sip->si_table[add_index], handler,
238 err, (void *)sip->si_table[add_index], add_index,
239 sip->si_nalloc);
247 err = ddi_intr_get_cap(sip->si_table[0], &(sip->si_cap));
252 err, (void *)sip->si_table[0], 0, sip->si_nalloc);
265 if (sip->si_cap & DDI_INTR_FLAG_BLOCK) {
267 err = ddi_intr_block_enable(sip->si_table, sip->si_nalloc);
272 err, (void *)sip->si_table, sip->si_nalloc);
278 for (en_index = 0; en_index < sip->si_nalloc; en_index++) {
279 err = ddi_intr_enable(sip->si_table[en_index]);
284 err, (void *)sip->si_table[en_index],
285 en_index, sip->si_nalloc);
300 if (!(sip->si_cap & DDI_INTR_FLAG_BLOCK)) {
302 err = ddi_intr_disable(sip->si_table[en_index]);
307 err, (void *)sip->si_table[en_index],
308 en_index, sip->si_nalloc);
317 add_index = sip->si_nalloc;
324 err = ddi_intr_remove_handler(sip->si_table[add_index]);
329 err, (void *)sip->si_table[add_index], add_index,
330 sip->si_nalloc);
344 sfxge_intr_t *sip = &(sp->s_intr);
352 if (sip->si_cap & DDI_INTR_FLAG_BLOCK) {
353 err = ddi_intr_block_disable(sip->si_table, sip->si_nalloc);
358 err, (void *)sip->si_table, sip->si_nalloc);
361 index = sip->si_nalloc;
363 err = ddi_intr_disable(sip->si_table[index]);
368 err, (void *)sip->si_table[index], index,
369 sip->si_nalloc);
374 sip->si_cap = 0;
377 index = sip->si_nalloc;
379 err = ddi_intr_remove_handler(sip->si_table[index]);
384 err, (void *)sip->si_table[index], index,
385 sip->si_nalloc);
395 sfxge_intr_t *sip = &(sp->s_intr);
396 efsys_mem_t *esmp = &(sip->si_mem);
407 if ((rc = efx_intr_init(enp, sip->si_type, esmp)) != 0)
421 for (index = 0; index < sip->si_nalloc; index++) {
440 if ((mask & sip->si_mask) == mask)
457 mask, sip->si_mask);
459 DTRACE_PROBE2(int_test_fail, uint64_t, mask, uint64_t, sip->si_mask);
461 sip->si_mask = 0;
476 sfxge_intr_t *sip = &(sp->s_intr);
479 sip->si_mask = 0;
499 sfxge_intr_t *sip = &(sp->s_intr);
500 efsys_mem_t *esmp = &(sip->si_mem);
510 SFXGE_OBJ_CHECK(sip, sfxge_intr_t);
512 ASSERT3U(sip->si_state, ==, SFXGE_INTR_UNINITIALIZED);
542 sip->si_type = EFX_INTR_MESSAGE;
549 sip->si_type = EFX_INTR_LINE;
588 sip->si_table_size = navail * sizeof (ddi_intr_handle_t);
589 sip->si_table = kmem_zalloc(sip->si_table_size, KM_SLEEP);
597 err = ddi_intr_alloc(dip, sip->si_table, type, 0,
598 navail, &(sip->si_nalloc), DDI_INTR_ALLOC_NORMAL);
606 err, navail, sip->si_nalloc);
621 if (sip->si_nalloc == 0) {
627 nalloc = pow2_le(sip->si_nalloc);
632 index = sip->si_nalloc;
634 (void) ddi_intr_free(sip->si_table[index]);
635 sip->si_table[index] = NULL;
640 sip->si_nalloc = nalloc;
641 DTRACE_PROBE1(nalloc, unsigned int, sip->si_nalloc);
657 sip->si_intr_pri = 0;
658 for (index = 0; index < sip->si_nalloc; index++) {
660 if ((rc = ddi_intr_get_pri(sip->si_table[index], &pri)) != 0)
662 if (pri > sip->si_intr_pri)
663 sip->si_intr_pri = pri;
666 sip->si_state = SFXGE_INTR_INITIALIZED;
678 index = sip->si_nalloc;
680 err = ddi_intr_free(sip->si_table[index]);
685 err, (void *)sip->si_table[index], index,
686 sip->si_nalloc);
688 sip->si_table[index] = NULL;
690 sip->si_nalloc = 0;
698 kmem_free(sip->si_table, sip->si_table_size);
699 sip->si_table = NULL;
700 sip->si_table_size = 0;
706 sip->si_type = EFX_INTR_INVALID;
711 SFXGE_OBJ_CHECK(sip, sfxge_intr_t);
719 sfxge_intr_t *sip = &(sp->s_intr);
722 ASSERT3U(sip->si_state, ==, SFXGE_INTR_INITIALIZED);
728 sip->si_state = SFXGE_INTR_TESTING;
734 sip->si_state = SFXGE_INTR_STARTED;
747 sip->si_state = SFXGE_INTR_INITIALIZED;
755 sfxge_intr_t *sip = &(sp->s_intr);
757 ASSERT3U(sip->si_state, ==, SFXGE_INTR_STARTED);
759 sip->si_state = SFXGE_INTR_INITIALIZED;
771 sfxge_intr_t *sip = &(sp->s_intr);
772 efsys_mem_t *esmp = &(sip->si_mem);
776 ASSERT3U(sip->si_state, ==, SFXGE_INTR_INITIALIZED);
778 sip->si_state = SFXGE_INTR_UNINITIALIZED;
787 index = sip->si_nalloc;
789 err = ddi_intr_free(sip->si_table[index]);
794 err, (void *)sip->si_table[index],
795 index, sip->si_nalloc);
797 sip->si_table[index] = NULL;
799 sip->si_nalloc = 0;
804 kmem_free(sip->si_table, sip->si_table_size);
805 sip->si_table = NULL;
806 sip->si_table_size = 0;
809 sip->si_type = EFX_INTR_INVALID;
811 SFXGE_OBJ_CHECK(sip, sfxge_intr_t);