Lines Matching full:interrupts

30  * This file manages the interrupts for a hybrid I/O (hio) device.
31 * In the future, it may manage interrupts for all Neptune-based
75 nxge_intr_t *interrupts; /* The global interrupt data. */ in nxge_intr_add() local
103 interrupts = (nxge_intr_t *)&nxge->nxge_intr_type; in nxge_intr_add()
107 if ((status2 = ddi_intr_add_handler(interrupts->htable[vector], in nxge_intr_add()
116 interrupts->intr_added++; in nxge_intr_add()
119 if ((status2 = ddi_intr_enable(interrupts->htable[vector])) in nxge_intr_add()
128 interrupts->intr_enabled = B_TRUE; in nxge_intr_add()
166 nxge_intr_t *interrupts; /* The global interrupt data. */ in nxge_intr_remove() local
195 interrupts = (nxge_intr_t *)&nxge->nxge_intr_type; in nxge_intr_remove()
200 if ((status2 = ddi_intr_disable(interrupts->htable[vector])) in nxge_intr_remove()
209 if ((status2 = ddi_intr_remove_handler(interrupts->htable[vector])) in nxge_intr_remove()
218 interrupts->intr_added--; in nxge_intr_remove()
219 if (interrupts->intr_added == 0) in nxge_intr_remove()
220 interrupts->intr_enabled = B_FALSE; in nxge_intr_remove()
323 nxge_intr_t *interrupts; /* The global interrupt data. */ in nxge_hio_intr_add() local
348 interrupts = (nxge_intr_t *)&nxge->nxge_intr_type; in nxge_hio_intr_add()
363 if ((ddi_status = ddi_intr_add_handler(interrupts->htable[vector], in nxge_hio_intr_add()
373 interrupts->intr_added++; in nxge_hio_intr_add()
376 if ((ddi_status = ddi_intr_enable(interrupts->htable[vector])) in nxge_hio_intr_add()
385 interrupts->intr_enabled = B_TRUE; in nxge_hio_intr_add()
388 * Note: RDC interrupts will be armed in nxge_m_start(). This in nxge_hio_intr_add()
426 nxge_intr_t *interrupts; /* The global interrupt data. */ in nxge_hio_intr_remove() local
458 interrupts = (nxge_intr_t *)&nxge->nxge_intr_type; in nxge_hio_intr_remove()
473 if ((status2 = ddi_intr_disable(interrupts->htable[vector])) in nxge_hio_intr_remove()
483 if ((status2 = ddi_intr_remove_handler(interrupts->htable[vector])) in nxge_hio_intr_remove()
495 interrupts->intr_added--; in nxge_hio_intr_remove()
496 if (interrupts->intr_added == 0) in nxge_hio_intr_remove()
497 interrupts->intr_enabled = B_FALSE; in nxge_hio_intr_remove()
508 * Initialize interrupts in a guest domain.
526 nxge_intr_t *interrupts; in nxge_hio_intr_init() local
538 /* Look up the "interrupts" property. */ in nxge_hio_intr_init()
540 "interrupts", &prop_val, &prop_len)) != DDI_PROP_SUCCESS) { in nxge_hio_intr_init()
542 "==> nxge_hio_intr_init(obp): no 'interrupts' property")); in nxge_hio_intr_init()
547 * For each device assigned, the content of each interrupts in nxge_hio_intr_init()
550 * Assignment of interrupts property is in the the following in nxge_hio_intr_init()
569 interrupts = (nxge_intr_t *)&nxge->nxge_intr_type; in nxge_hio_intr_init()
571 interrupts->intr_registered = B_FALSE; in nxge_hio_intr_init()
572 interrupts->intr_enabled = B_FALSE; in nxge_hio_intr_init()
573 interrupts->start_inum = 0; in nxge_hio_intr_init()
576 nxge->dip, &interrupts->intr_types); in nxge_hio_intr_init()
580 "types = 0x%x", ddi_status, interrupts->intr_types)); in nxge_hio_intr_init()
585 "returned 0x%x, types = 0x%x", ddi_status, interrupts->intr_types)); in nxge_hio_intr_init()
588 interrupts->intr_type = DDI_INTR_TYPE_FIXED; in nxge_hio_intr_init()
591 intr_type = interrupts->intr_type; in nxge_hio_intr_init()
603 "nxge_hio_intr_init: number of available interrupts: %d", navail)); in nxge_hio_intr_init()
615 "nxge_hio_intr_init: number of interrupts: %d", nintrs)); in nxge_hio_intr_init()
617 interrupts->intr_size = navail * sizeof (ddi_intr_handle_t); in nxge_hio_intr_init()
618 interrupts->htable = kmem_alloc(interrupts->intr_size, KM_SLEEP); in nxge_hio_intr_init()
623 * interrupts are are allocated. Otherwise, it fails. in nxge_hio_intr_init()
628 ddi_status = ddi_intr_alloc(nxge->dip, interrupts->htable, intr_type, in nxge_hio_intr_init()
638 "nxge_hio_intr_init: number of interrupts allocated: %d", nactual)); in nxge_hio_intr_init()
644 if ((ddi_status = ddi_intr_get_pri(interrupts->htable[0], in nxge_hio_intr_init()
645 (uint_t *)&interrupts->pri)) != DDI_SUCCESS) { in nxge_hio_intr_init()
651 "nxge_hio_intr_init: interrupt priority: %d", interrupts->pri)); in nxge_hio_intr_init()
654 if ((ddi_status = ddi_intr_get_cap(interrupts->htable[0], in nxge_hio_intr_init()
655 &interrupts->intr_cap)) != DDI_SUCCESS) { in nxge_hio_intr_init()
662 interrupts->intr_cap)); in nxge_hio_intr_init()
664 interrupts->intr_registered = B_TRUE; in nxge_hio_intr_init()
674 * Uninitialize interrupts in a guest domain.
689 nxge_intr_t *interrupts; in nxge_hio_intr_uninit() local
696 interrupts = (nxge_intr_t *)&nxge->nxge_intr_type; in nxge_hio_intr_uninit()
699 * If necessary, disable any currently active interrupts. in nxge_hio_intr_uninit()
701 if (interrupts->intr_enabled) { in nxge_hio_intr_uninit()
726 * Free all of our allocated interrupts. in nxge_hio_intr_uninit()
730 if (interrupts->htable[i]) in nxge_hio_intr_uninit()
731 (void) ddi_intr_free(interrupts->htable[i]); in nxge_hio_intr_uninit()
732 interrupts->htable[i] = 0; in nxge_hio_intr_uninit()
735 interrupts->intr_registered = B_FALSE; in nxge_hio_intr_uninit()
736 KMEM_FREE(interrupts->htable, interrupts->intr_size); in nxge_hio_intr_uninit()
737 interrupts->htable = NULL; in nxge_hio_intr_uninit()
903 * Guest domains can only add interrupts for DMA channels.
904 * They cannot access the MAC, MIF, or SYSERR interrupts.
953 * <hw_config.ldg> is a copy of the "interrupts" property. in nxge_hio_ldsv_add()
1025 * Manage a VLDG's interrupts.