Lines Matching refs:vecp

93 	apix_vector_t *vecp;
110 vecp = xv_vector(cpun, vector);
111 if (vecp == NULL) {
112 vecp = kmem_zalloc(sizeof (apix_vector_t), KM_NOSLEEP);
113 if (vecp == NULL) {
117 xv_vector(cpun, vector) = vecp;
119 vecp->v_state = APIX_STATE_ALLOCED;
120 vecp->v_type = APIX_TYPE_IPI;
121 vecp->v_cpuid = vecp->v_bound_cpuid = cpun;
122 vecp->v_vector = vector;
123 vecp->v_pri = ipl;
143 apix_vector_t *vecp;
151 vecp = xv_vector(cpun, vector);
152 apix_insert_av(vecp, NULL, xxintr, arg1, arg2, NULL, ipl, NULL);
153 vecp->v_state = APIX_STATE_ENABLED;
191 apix_vector_t *vecp;
202 vecp = apix_init_vector(tocpu, vector);
203 vecp->v_type = (ushort_t)type;
204 vecp->v_inum = inum;
205 vecp->v_flags = (cpuid & IRQ_USER_BOUND) ? APIX_VECT_USER_BOUND : 0;
208 apix_set_dev_map(vecp, dip, inum);
210 return (vecp);
225 apix_vector_t *vecp, *startp = NULL;
266 if ((vecp = apix_init_vector(tocpu, start + i)) == NULL)
269 vecp->v_type = (ushort_t)type;
270 vecp->v_inum = inum + i;
271 vecp->v_flags = flags;
274 apix_set_dev_map(vecp, dip, inum + i);
277 startp = vecp;
284 vecp = xv_vector(tocpu, start + i);
286 apix_cleanup_vector(vecp);
300 apix_pci_msi_enable_vector(apix_vector_t *vecp, dev_info_t *dip, int type,
320 intrmap_tbl[i] = xv_intrmap_private(vecp->v_cpuid, vector + i);
324 xv_intrmap_private(vecp->v_cpuid, vector + i) = intrmap_tbl[i];
326 apic_vt_ops->apic_intrmap_map_entry(vecp->v_intrmap_private,
328 apic_vt_ops->apic_intrmap_record_msi(vecp->v_intrmap_private,
347 if ((vecp->v_flags & APIX_VECT_MASKABLE) == 0)
422 apix_enable_vector(apix_vector_t *vecp)
424 int tocpu = vecp->v_cpuid, type = vecp->v_type;
431 if (vecp->v_flags & APIX_VECT_USER_BOUND)
440 apix_intx_enable(vecp->v_inum);
442 int inum = vecp->v_inum;
443 dev_info_t *dip = APIX_GET_DIP(vecp);
450 uchar_t start_vect = vecp->v_vector + 1 - count;
452 xv_vector(vecp->v_cpuid, start_vect);
465 apix_pci_msi_enable_vector(vecp, dip,
466 type, inum, 1, vecp->v_vector,
471 vecp->v_state = APIX_STATE_ENABLED;
482 apix_disable_vector(apix_vector_t *vecp)
484 struct autovec *avp = vecp->v_autovect;
492 switch (vecp->v_type) {
512 vecp->v_inum);
522 apix_intx_disable(vecp->v_inum);
526 if (!(apic_cpus[vecp->v_cpuid].aci_status & APIC_CPU_SUSPEND))
527 vecp->v_state = APIX_STATE_DISABLED;
528 apic_vt_ops->apic_intrmap_free_entry(&vecp->v_intrmap_private);
529 vecp->v_intrmap_private = NULL;
551 apix_obsolete_vector(apix_vector_t *vecp)
553 struct autovec *avp = vecp->v_autovect;
554 int repeats, tries, ipl, busy = 0, cpuid = vecp->v_cpuid;
559 for (avp = vecp->v_autovect; avp != NULL; avp = avp->av_link) {
572 index = vecp->v_vector / 32;
573 bit = vecp->v_vector % 32;
579 apix_remove_av(vecp, avp);
604 for (ipl = 1; ipl < MIN(LOCK_LEVEL, vecp->v_pri); ipl++)
611 apix_remove_av(vecp, avp);
617 if (vecp->v_state == APIX_STATE_OBSOLETED)
620 vecp->v_state = APIX_STATE_OBSOLETED;
621 vecp->v_next = NULL;
623 apixp->x_obsoletes = vecp;
627 tp->v_next = vecp;
633 if (vecp->v_state == APIX_STATE_OBSOLETED) {
635 apixp->x_obsoletes = vecp->v_next;
636 vecp->v_next = NULL;
638 apix_cleanup_vector(vecp);
695 apix_vector_t *vecp = apixp->x_vectbl[vector];
697 ASSERT(IS_VECT_FREE(vecp));
699 if (vecp == NULL) {
700 vecp = kmem_zalloc(sizeof (apix_vector_t), KM_NOSLEEP);
701 if (vecp == NULL) {
705 apixp->x_vectbl[vector] = vecp;
707 vecp->v_state = APIX_STATE_ALLOCED;
708 vecp->v_cpuid = vecp->v_bound_cpuid = cpuid;
709 vecp->v_vector = vector;
711 return (vecp);
715 apix_cleanup_vector(apix_vector_t *vecp)
717 ASSERT(vecp->v_share == 0);
718 vecp->v_bound_cpuid = IRQ_UNINIT;
719 vecp->v_state = APIX_STATE_FREED;
720 vecp->v_type = 0;
721 vecp->v_flags = 0;
722 vecp->v_busy = 0;
723 vecp->v_intrmap_private = NULL;
727 apix_dprint_vector(apix_vector_t *vecp, dev_info_t *dip, int count)
747 switch (vecp->v_type) {
750 vecp->v_inum);
754 "msi inum %d (count %d)", vecp->v_inum, count);
758 vecp->v_inum);
766 "cpu %d\n", mesg, vecp->v_vector, vecp->v_cpuid));
791 apix_insert_av(apix_vector_t *vecp, void *intr_id, avfunc f, caddr_t arg1,
797 "cpu %d\n", (void *)dip, vecp->v_vector, vecp->v_cpuid));
801 if (vecp->v_type == APIX_TYPE_FIXED && apic_level_intr[vecp->v_inum])
804 vecp->v_share++;
805 vecp->v_pri = (ipl > vecp->v_pri) ? ipl : vecp->v_pri;
806 if (vecp->v_autovect == NULL) { /* Nothing on list - put it at head */
807 vecp->v_autovect = mem;
811 if (DDI_INTR_IS_MSI_OR_MSIX(vecp->v_type)) { /* MSI/X */
812 ASSERT(vecp->v_share == 1); /* No sharing for MSI/X */
814 INIT_AUTOVEC(vecp->v_autovect, intr_id, f, arg1, arg2, ticksp,
816 prep = vecp->v_autovect->av_link;
817 vecp->v_autovect->av_link = NULL;
834 for (p = vecp->v_autovect; p != NULL; p = p->av_link) {
852 mem->av_link = vecp->v_autovect;
853 vecp->v_autovect = mem;
889 apix_remove_av(apix_vector_t *vecp, struct autovec *target)
898 "cpu %d\n", (void *)target->av_dip, vecp->v_vector, vecp->v_cpuid));
900 for (p = vecp->v_autovect; p; p = p->av_link) {
906 vecp->v_share--;
907 vecp->v_pri = hi_pri;
923 apix_wait_till_seen(vecp->v_cpuid, target->av_prilevel);
927 apix_find_av(apix_vector_t *vecp, void *intr_id, avfunc f)
931 for (p = vecp->v_autovect; p; p = p->av_link) {
944 apix_vector_t *vecp;
953 vecp = xv_vector(n, v);
954 if (vecp == NULL ||
955 vecp->v_state <= APIX_STATE_OBSOLETED)
958 if (apix_find_av(vecp, intr_id, f) != NULL)
959 return (vecp);
983 apix_vector_t *vecp;
1006 if ((vecp = apix_alloc_intx(dip, inum, irqno)) == NULL)
1009 cpuid = vecp->v_cpuid;
1010 v = vecp->v_vector;
1014 vecp = xv_vector(cpuid, v);
1015 ASSERT(vecp != NULL);
1019 if (vecp->v_state <= APIX_STATE_OBSOLETED) {
1020 vecp = NULL;
1029 vecp = apix_get_dev_map(dip, hdlp->ih_inum,
1031 ASSERT(vecp->v_state == APIX_STATE_ALLOCED);
1033 if (vecp == NULL) {
1039 cpuid = vecp->v_cpuid;
1040 virt_vect = APIX_VIRTVECTOR(cpuid, vecp->v_vector);
1044 apix_insert_av(vecp, intr_id, xxintr, arg1, arg2, ticksp, ipl, dip);
1065 apix_vector_t *vecp;
1075 vecp = apix_intx_get_vector(virt_vect);
1076 virt_vect = APIX_VIRTVECTOR(vecp->v_cpuid, vecp->v_vector);
1078 vecp = xv_vector(APIX_VIRTVEC_CPU(virt_vect),
1081 if (vecp == NULL) {
1089 if (vecp->v_state <= APIX_STATE_OBSOLETED ||
1090 ((avp = apix_find_av(vecp, intr_id, f)) == NULL)) {
1096 if ((vecp = apix_find_vector_by_avintr(intr_id, f))
1104 virt_vect = APIX_VIRTVECTOR(vecp->v_cpuid, vecp->v_vector);
1105 avp = apix_find_av(vecp, intr_id, f);
1107 cpuid = vecp->v_cpuid;
1114 apix_remove_av(vecp, avp);
1165 apix_set_dev_map(apix_vector_t *vecp, dev_info_t *dip, int inum)
1181 dvp->dv_type == vecp->v_type) {
1191 dvp->dv_type = vecp->v_type;
1196 dvp->dv_vector = vecp;
1197 vecp->v_devp = dvp;
1203 (void *)dip, inum, vecp->v_cpuid, vecp->v_vector));
1212 apix_vector_t *vecp;
1223 vecp = dvp->dv_vector;
1225 return (vecp);
1452 * vecp : Vector to be rebound
1453 * tocpu : Target cpu. IRQ_UNINIT means target is vecp->v_cpuid.
1459 apix_rebind(apix_vector_t *vecp, processorid_t newcpu, int count)
1462 processorid_t oldcpu = vecp->v_cpuid;
1463 uchar_t newvec, oldvec = vecp->v_vector;
1471 if (vecp->v_cpuid == newcpu) /* rebind to the same cpu */
1472 return (vecp);
1479 newp = apix_alloc_vector_oncpu(newcpu, NULL, 0, vecp->v_type);
1481 ASSERT(vecp->v_type == APIX_TYPE_MSI);
1483 vecp->v_type);
1492 apix_dup_vectors(vecp, newp, count);
1497 if (!DDI_INTR_IS_MSI_OR_MSIX(vecp->v_type)) {
1499 if (apix_intx_rebind(vecp->v_inum, newcpu, newvec) != 0) {
1510 apix_set_dev_map(vecp, avp->av_dip,
1520 vecp->v_inum, newcpu));
1525 (void) apix_obsolete_vector(vecp);
1566 apix_vector_t *vecp;
1600 if ((vecp = apix_alloc_vector_oncpu(bindcpu, dip, inum,
1607 vecp->v_inum = irqno;
1608 vecp->v_flags |= APIX_VECT_MASKABLE;
1610 apix_intx_set_vector(irqno, vecp->v_cpuid, vecp->v_vector);
1614 vecp = xv_vector(irqp->airq_cpu, irqp->airq_vector);
1615 ASSERT(!IS_VECT_FREE(vecp));
1618 apix_set_dev_map(vecp, dip, inum);
1623 ((vecp->v_flags & APIX_VECT_USER_BOUND) == 0))
1624 apix_set_dev_binding(dip, vecp->v_cpuid);
1626 apix_dprint_vector(vecp, dip, 1);
1628 return (vecp);
1635 apix_vector_t *vecp;
1666 for (vecp = NULL; rcount > 0; rcount >>= 1) {
1667 vecp = apix_alloc_nvectors_oncpu(bindcpu, dip, inum, rcount,
1669 if (vecp != NULL || behavior == DDI_INTR_ALLOC_STRICT)
1672 for (i = 0; vecp && i < rcount; i++)
1673 xv_vector(vecp->v_cpuid, vecp->v_vector + i)->v_flags |=
1676 if (vecp == NULL) {
1685 ((vecp->v_flags & APIX_VECT_USER_BOUND) == 0))
1686 apix_set_dev_binding(dip, vecp->v_cpuid);
1688 apix_dprint_vector(vecp, dip, rcount);
1696 apix_vector_t *vecp;
1707 if ((vecp = apix_alloc_vector_oncpu(bindcpu, dip, inum + i,
1715 vecp->v_flags |= APIX_VECT_MASKABLE;
1721 ((vecp->v_flags & APIX_VECT_USER_BOUND) == 0))
1722 apix_set_dev_binding(dip, vecp->v_cpuid);
1724 apix_dprint_vector(vecp, dip, 1);
1745 apix_vector_t *vecp;
1754 if ((vecp = apix_get_dev_map(dip, inum, type)) == NULL) {
1762 APIX_ENTER_CPU_LOCK(vecp->v_cpuid);
1763 cpuid = vecp->v_cpuid;
1767 (void *)dip, inum, type, vecp->v_vector, vecp->v_share));
1772 if (vecp->v_type == APIX_TYPE_FIXED) {
1773 if (vecp->v_share > 0) { /* share IRQ line */
1779 apix_intx_free(vecp->v_inum);
1783 apix_cleanup_vector(vecp);
1795 apix_setup_io_intr(apix_vector_t *vecp)
1806 if (apix_is_cpu_enabled(vecp->v_cpuid)) {
1807 apix_enable_vector(vecp);
1808 return (vecp);
1817 if (vecp->v_type == APIX_TYPE_MSI)
1818 return (apix_grp_set_cpu(vecp, bindcpu, &ret));
1820 return (apix_set_cpu(vecp, bindcpu, &ret));
1833 apix_vector_t *vecp;
1854 vecp = xv_vector(irqp->airq_cpu, irqp->airq_vector);
1855 ASSERT(!IS_VECT_FREE(vecp));
1871 vecp = apix_alloc_intx(NULL, 0, irqno);
1876 apix_insert_av(vecp, avp->av_intr_id, avp->av_vector,
1884 (void) apix_setup_io_intr(vecp);