Lines Matching refs:domain
79 static void msi_check_level(struct irq_domain *domain, struct msi_msg *msg)
81 struct msi_domain_info *info = domain->host_data;
111 msi_check_level(irq_data->domain, msg);
118 static int msi_domain_activate(struct irq_domain *domain,
124 msi_check_level(irq_data->domain, msg);
129 static void msi_domain_deactivate(struct irq_domain *domain,
138 static int msi_domain_alloc(struct irq_domain *domain, unsigned int virq,
141 struct msi_domain_info *info = domain->host_data;
146 if (irq_find_mapping(domain, hwirq) > 0)
149 if (domain->parent) {
150 ret = irq_domain_alloc_irqs_parent(domain, virq, nr_irqs, arg);
156 ret = ops->msi_init(domain, info, virq + i, hwirq + i, arg);
160 ops->msi_free(domain, info, virq + i);
162 irq_domain_free_irqs_top(domain, virq, nr_irqs);
170 static void msi_domain_free(struct irq_domain *domain, unsigned int virq,
173 struct msi_domain_info *info = domain->host_data;
178 info->ops->msi_free(domain, info, virq + i);
180 irq_domain_free_irqs_top(domain, virq, nr_irqs);
196 static int msi_domain_ops_prepare(struct irq_domain *domain, struct device *dev,
209 static int msi_domain_ops_init(struct irq_domain *domain,
214 irq_domain_set_hwirq_and_chip(domain, virq, hwirq, info->chip,
224 static int msi_domain_ops_check(struct irq_domain *domain,
280 * msi_create_irq_domain - Create a MSI interrupt domain
282 * @info: MSI domain info
283 * @parent: Parent irq domain
289 struct irq_domain *domain;
295 domain = irq_domain_create_hierarchy(parent, IRQ_DOMAIN_FLAG_MSI, 0,
298 if (domain && !domain->name && info->chip)
299 domain->name = info->chip->name;
301 return domain;
310 int msi_domain_prepare_irqs(struct irq_domain *domain, struct device *dev,
313 struct msi_domain_info *info = domain->host_data;
317 ret = ops->msi_check(domain, info, dev);
319 ret = ops->msi_prepare(domain, dev, nvec, arg);
324 int msi_domain_populate_irqs(struct irq_domain *domain, struct device *dev,
327 struct msi_domain_info *info = domain->host_data;
343 /* Assumes the domain mutex is held! */
344 ret = irq_domain_alloc_irqs_hierarchy(domain, desc->irq, 1,
358 irq_domain_free_irqs_common(domain, desc->irq, 1);
376 static bool msi_check_reservation_mode(struct irq_domain *domain,
382 switch(domain->bus_token) {
404 int __msi_domain_alloc_irqs(struct irq_domain *domain, struct device *dev,
407 struct msi_domain_info *info = domain->host_data;
415 ret = msi_domain_prepare_irqs(domain, dev, nvec, &arg);
424 virq = __irq_domain_alloc_irqs(domain, -1, desc->nvec_used,
430 ret = ops->handle_error(domain, desc, ret);
445 can_reserve = msi_check_reservation_mode(domain, info, dev);
462 irq_data = irq_domain_get_irq_data(domain, i);
465 if (domain->flags & IRQ_DOMAIN_MSI_NOMASK_QUIRK)
487 irq_data = irq_domain_get_irq_data(domain, i);
494 msi_domain_free_irqs(domain, dev);
499 * msi_domain_alloc_irqs - Allocate interrupts from a MSI interrupt domain
500 * @domain: The domain to allocate from
507 int msi_domain_alloc_irqs(struct irq_domain *domain, struct device *dev,
510 struct msi_domain_info *info = domain->host_data;
513 return ops->domain_alloc_irqs(domain, dev, nvec);
516 void __msi_domain_free_irqs(struct irq_domain *domain, struct device *dev)
523 irq_data = irq_domain_get_irq_data(domain, i);
542 * __msi_domain_free_irqs - Free interrupts from a MSI interrupt @domain associated tp @dev
543 * @domain: The domain to managing the interrupts
547 void msi_domain_free_irqs(struct irq_domain *domain, struct device *dev)
549 struct msi_domain_info *info = domain->host_data;
552 return ops->domain_free_irqs(domain, dev);
556 * msi_get_domain_info - Get the MSI interrupt domain info for @domain
557 * @domain: The interrupt domain to retrieve data from
560 * @domain->host_data.
562 struct msi_domain_info *msi_get_domain_info(struct irq_domain *domain)
564 return (struct msi_domain_info *)domain->host_data;