Lines Matching refs:pic

749 	struct intr_pic *pic;  local
757 SLIST_FOREACH(pic, &pic_list, pic_next) {
758 if ((pic->pic_flags & FLAG_TYPE_MASK) !=
763 if (xref == pic->pic_xref)
764 return (pic);
765 } else if (xref == 0 || pic->pic_xref == 0) {
766 if (dev == pic->pic_dev)
767 return (pic);
768 } else if (xref == pic->pic_xref && dev == pic->pic_dev)
769 return (pic);
780 struct intr_pic *pic; local
783 pic = pic_lookup_locked(dev, xref, flags);
785 return (pic);
794 struct intr_pic *pic; local
797 pic = pic_lookup_locked(dev, xref, flags);
798 if (pic != NULL) {
800 return (pic);
802 pic = malloc(sizeof(*pic), M_INTRNG, M_NOWAIT | M_ZERO);
803 if (pic == NULL) {
807 pic->pic_xref = xref;
808 pic->pic_dev = dev;
809 pic->pic_flags = flags;
810 mtx_init(&pic->pic_child_lock, "pic child lock", NULL, MTX_SPIN);
811 SLIST_INSERT_HEAD(&pic_list, pic, pic_next);
814 return (pic);
823 struct intr_pic *pic; local
826 pic = pic_lookup_locked(dev, xref, flags);
827 if (pic == NULL) {
831 SLIST_REMOVE(&pic_list, pic, intr_pic, pic_next);
834 free(pic, M_INTRNG);
843 struct intr_pic *pic; local
847 pic = pic_create(dev, xref, FLAG_PIC);
848 if (pic == NULL)
851 debugf("PIC %p registered for %s <dev %p, xref %jx>\n", pic,
853 return (pic);
882 struct intr_pic *pic; local
884 pic = pic_lookup(dev, xref, FLAG_PIC);
885 if (pic == NULL) {
890 KASSERT((pic->pic_flags & FLAG_TYPE_MASK) == FLAG_PIC,
892 device_get_name(pic->pic_dev)));
921 intr_pic_add_handler(device_t parent, struct intr_pic *pic, argument
937 newchild->pc_pic = pic;
946 KASSERT(child->pc_pic != pic, ("%s: Adding a child PIC twice",
960 struct intr_pic *pic; local
966 pic = pic_lookup(dev, xref,
968 if (pic == NULL)
973 KASSERT((pic->pic_flags & FLAG_TYPE_MASK) == FLAG_MSI,
975 device_get_name(pic->pic_dev)));
981 KASSERT((pic->pic_flags & FLAG_TYPE_MASK) == FLAG_PIC,
983 device_get_name(pic->pic_dev)));
984 return (PIC_MAP_INTR(pic->pic_dev, data, isrc));
1337 struct intr_pic *pic; local
1341 pic = pic_create(dev, xref, FLAG_MSI);
1342 if (pic == NULL)
1345 debugf("PIC %p registered for %s <dev %p, xref %jx>\n", pic,
1356 struct intr_pic *pic; local
1361 pic = pic_lookup(NULL, xref, FLAG_MSI);
1362 if (pic == NULL)
1365 KASSERT((pic->pic_flags & FLAG_TYPE_MASK) == FLAG_MSI,
1367 device_get_name(pic->pic_dev)));
1373 err = MSI_IOMMU_INIT(pic->pic_dev, child, &domain);
1378 err = MSI_ALLOC_MSI(pic->pic_dev, child, count, maxcount, &pdev, isrc);
1390 irqs[i] = intr_map_irq(pic->pic_dev, xref,
1403 struct intr_pic *pic; local
1407 pic = pic_lookup(NULL, xref, FLAG_MSI);
1408 if (pic == NULL)
1411 KASSERT((pic->pic_flags & FLAG_TYPE_MASK) == FLAG_MSI,
1413 device_get_name(pic->pic_dev)));
1426 MSI_IOMMU_DEINIT(pic->pic_dev, child);
1428 err = MSI_RELEASE_MSI(pic->pic_dev, child, count, isrc);
1444 struct intr_pic *pic; local
1449 pic = pic_lookup(NULL, xref, FLAG_MSI);
1450 if (pic == NULL)
1453 KASSERT((pic->pic_flags & FLAG_TYPE_MASK) == FLAG_MSI,
1455 device_get_name(pic->pic_dev)));
1461 err = MSI_IOMMU_INIT(pic->pic_dev, child, &domain);
1465 err = MSI_ALLOC_MSIX(pic->pic_dev, child, &pdev, &isrc);
1473 *irq = intr_map_irq(pic->pic_dev, xref, (struct intr_map_data *)msi);
1481 struct intr_pic *pic; local
1485 pic = pic_lookup(NULL, xref, FLAG_MSI);
1486 if (pic == NULL)
1489 KASSERT((pic->pic_flags & FLAG_TYPE_MASK) == FLAG_MSI,
1491 device_get_name(pic->pic_dev)));
1504 MSI_IOMMU_DEINIT(pic->pic_dev, child);
1506 err = MSI_RELEASE_MSIX(pic->pic_dev, child, isrc);
1517 struct intr_pic *pic; local
1520 pic = pic_lookup(NULL, xref, FLAG_MSI);
1521 if (pic == NULL)
1524 KASSERT((pic->pic_flags & FLAG_TYPE_MASK) == FLAG_MSI,
1526 device_get_name(pic->pic_dev)));
1532 err = MSI_MAP_MSI(pic->pic_dev, child, isrc, addr, data);