Lines Matching refs:virq

32 static void irq_domain_free_one_irq(struct irq_domain *domain, unsigned int virq);
355 * static virq assignments (non-DT boot) then it will set that up correctly.
548 "virq%i doesn't exist; cannot disassociate\n", irq))
578 static int irq_domain_associate_locked(struct irq_domain *domain, unsigned int virq,
581 struct irq_data *irq_data = irq_get_irq_data(virq);
587 if (WARN(!irq_data, "error: virq%i is not allocated", virq))
589 if (WARN(irq_data->domain, "error: virq%i is already associated", virq))
595 ret = domain->ops->map(domain, virq, hwirq);
604 domain->name, hwirq, virq, ret);
615 irq_clear_status_flags(virq, IRQ_NOREQUEST);
620 int irq_domain_associate(struct irq_domain *domain, unsigned int virq,
626 ret = irq_domain_associate_locked(domain, virq, hwirq);
662 unsigned int virq;
668 virq = irq_alloc_desc_from(1, of_node_to_nid(of_node));
669 if (!virq) {
670 pr_debug("create_direct virq allocation failed\n");
673 if (virq >= domain->hwirq_max) {
676 irq_free_desc(virq);
679 pr_debug("create_direct obtained virq %d\n", virq);
681 if (irq_domain_associate(domain, virq, virq)) {
682 irq_free_desc(virq);
686 return virq;
696 int virq;
701 virq = irq_domain_alloc_descs(-1, 1, hwirq, of_node_to_nid(of_node),
703 if (virq <= 0) {
704 pr_debug("-> virq allocation failed\n");
708 if (irq_domain_associate_locked(domain, virq, hwirq)) {
709 irq_free_desc(virq);
714 hwirq, of_node_full_name(of_node), virq);
716 return virq;
734 int virq;
747 virq = irq_find_mapping(domain, hwirq);
748 if (virq) {
749 pr_debug("existing mapping on virq %d\n", virq);
753 virq = irq_create_mapping_affinity_locked(domain, hwirq, affinity);
757 return virq;
798 int virq;
830 virq = irq_find_mapping(domain, hwirq);
831 if (virq) {
837 if (type == IRQ_TYPE_NONE || type == irq_get_trigger_type(virq))
844 if (irq_get_trigger_type(virq) == IRQ_TYPE_NONE) {
845 irq_data = irq_get_irq_data(virq);
847 virq = 0;
857 virq = 0;
864 virq = msi_device_domain_alloc_wired(domain, hwirq, type);
867 virq = irq_domain_alloc_irqs_locked(domain, -1, 1, NUMA_NO_NODE,
869 if (virq <= 0) {
870 virq = 0;
875 virq = irq_create_mapping_affinity_locked(domain, hwirq, NULL);
876 if (!virq)
880 irq_data = irq_get_irq_data(virq);
882 virq = 0;
891 return virq;
908 * @virq: linux irq number of the interrupt to unmap
910 void irq_dispose_mapping(unsigned int virq)
912 struct irq_data *irq_data = irq_get_irq_data(virq);
915 if (!virq || !irq_data)
923 irq_domain_free_one_irq(domain, virq);
925 irq_domain_disassociate(domain, virq);
926 irq_free_desc(virq);
1088 int irq_domain_alloc_descs(int virq, unsigned int cnt, irq_hw_number_t hwirq,
1093 if (virq >= 0) {
1094 virq = __irq_alloc_descs(virq, virq, cnt, node, THIS_MODULE,
1100 virq = __irq_alloc_descs(-1, hint, cnt, node, THIS_MODULE,
1102 if (virq <= 0 && hint > 1) {
1103 virq = __irq_alloc_descs(-1, 1, cnt, node, THIS_MODULE,
1108 return virq;
1166 static void irq_domain_insert_irq(int virq)
1170 for (data = irq_get_irq_data(virq); data; data = data->parent_data) {
1177 irq_clear_status_flags(virq, IRQ_NOREQUEST);
1180 static void irq_domain_remove_irq(int virq)
1184 irq_set_status_flags(virq, IRQ_NOREQUEST);
1185 irq_set_chip_and_handler(virq, NULL, NULL);
1186 synchronize_irq(virq);
1189 for (data = irq_get_irq_data(virq); data; data = data->parent_data) {
1226 static void irq_domain_free_irq_data(unsigned int virq, unsigned int nr_irqs)
1232 irq_data = irq_get_irq_data(virq + i);
1244 * @virq: IRQ number where the hierarchy is to be trimmed
1246 * Marks the @virq level belonging to @domain as disconnected.
1247 * Returns -EINVAL if @virq doesn't have a valid irq_data pointing
1255 unsigned int virq)
1259 irqd = irq_domain_get_irq_data(domain, virq);
1268 static int irq_domain_trim_hierarchy(unsigned int virq)
1272 irq_data = irq_get_irq_data(virq);
1306 virq, tail->parent_data->domain->name);
1318 unsigned int virq, unsigned int nr_irqs)
1326 irq_data = irq_get_irq_data(virq + i);
1332 irq_domain_free_irq_data(virq, i + 1);
1342 * irq_domain_get_irq_data - Get irq_data associated with @virq and @domain
1344 * @virq: IRQ number to get irq_data
1347 unsigned int virq)
1351 for (irq_data = irq_get_irq_data(virq); irq_data;
1361 * irq_domain_set_hwirq_and_chip - Set hwirq and irqchip of @virq at @domain
1363 * @virq: IRQ number
1368 int irq_domain_set_hwirq_and_chip(struct irq_domain *domain, unsigned int virq,
1373 struct irq_data *irq_data = irq_domain_get_irq_data(domain, virq);
1387 * irq_domain_set_info - Set the complete data for a @virq in @domain
1389 * @virq: IRQ number
1397 void irq_domain_set_info(struct irq_domain *domain, unsigned int virq,
1402 irq_domain_set_hwirq_and_chip(domain, virq, hwirq, chip, chip_data);
1403 __irq_set_handler(virq, handler, 0, handler_name);
1404 irq_set_handler_data(virq, handler_data);
1411 * @virq: IRQ number to start with
1414 void irq_domain_free_irqs_common(struct irq_domain *domain, unsigned int virq,
1421 irq_data = irq_domain_get_irq_data(domain, virq + i);
1425 irq_domain_free_irqs_parent(domain, virq, nr_irqs);
1432 * @virq: IRQ number to start with
1435 void irq_domain_free_irqs_top(struct irq_domain *domain, unsigned int virq,
1441 irq_set_handler_data(virq + i, NULL);
1442 irq_set_handler(virq + i, NULL);
1444 irq_domain_free_irqs_common(domain, virq, nr_irqs);
1478 int i, ret, virq;
1481 virq = irq_base;
1483 virq = irq_domain_alloc_descs(irq_base, nr_irqs, 0, node,
1485 if (virq < 0) {
1488 return virq;
1492 if (irq_domain_alloc_irq_data(domain, virq, nr_irqs)) {
1493 pr_debug("cannot allocate memory for IRQ%d\n", virq);
1498 ret = irq_domain_alloc_irqs_hierarchy(domain, virq, nr_irqs, arg);
1503 ret = irq_domain_trim_hierarchy(virq + i);
1509 irq_domain_insert_irq(virq + i);
1511 return virq;
1514 irq_domain_free_irq_data(virq, nr_irqs);
1516 irq_free_descs(virq, nr_irqs);
1587 * @virq: Irq to push the domain in to.
1595 int irq_domain_push_irq(struct irq_domain *domain, int virq, void *arg)
1597 struct irq_data *irq_data = irq_get_irq_data(virq);
1603 * Check that no action has been set, which indicates the virq
1611 desc = irq_to_desc(virq);
1651 rv = irq_domain_alloc_irqs_hierarchy(domain, virq, 1, arg);
1671 * @virq: Irq to remove the domain from.
1676 int irq_domain_pop_irq(struct irq_domain *domain, int virq)
1678 struct irq_data *irq_data = irq_get_irq_data(virq);
1684 * Check that no action is set, which indicates the virq is in
1692 desc = irq_to_desc(virq);
1704 tmp_irq_data = irq_domain_get_irq_data(domain, virq);
1722 irq_domain_free_irqs_hierarchy(domain, virq, 1);
1739 * @virq: base IRQ number
1742 void irq_domain_free_irqs(unsigned int virq, unsigned int nr_irqs)
1744 struct irq_data *data = irq_get_irq_data(virq);
1756 irq_domain_remove_irq(virq + i);
1757 irq_domain_free_irqs_hierarchy(domain, virq, nr_irqs);
1760 irq_domain_free_irq_data(virq, nr_irqs);
1761 irq_free_descs(virq, nr_irqs);
1764 static void irq_domain_free_one_irq(struct irq_domain *domain, unsigned int virq)
1767 msi_device_domain_free_wired(domain, virq);
1769 irq_domain_free_irqs(virq, 1);
1883 * irq_domain_get_irq_data - Get irq_data associated with @virq and @domain
1885 * @virq: IRQ number to get irq_data
1888 unsigned int virq)
1890 struct irq_data *irq_data = irq_get_irq_data(virq);
1897 * irq_domain_set_info - Set the complete data for a @virq in @domain
1899 * @virq: IRQ number
1907 void irq_domain_set_info(struct irq_domain *domain, unsigned int virq,
1912 irq_set_chip_and_handler_name(virq, chip, handler, handler_name);
1913 irq_set_chip_data(virq, chip_data);
1914 irq_set_handler_data(virq, handler_data);
1925 static void irq_domain_free_one_irq(struct irq_domain *domain, unsigned int virq) { }