Lines Matching refs:fwspec
1426 static int gic_irq_domain_translate(struct irq_domain *d, struct irq_fwspec *fwspec,
1429 if (fwspec->param_count == 1 && fwspec->param[0] < GIC_IRQ_PARAMETER_VALUE_SIXTEEN) {
1430 *hwirq = fwspec->param[0];
1435 if (is_of_node(fwspec->fwnode)) {
1436 if (fwspec->param_count < GIC_IRQ_PARAMETER_COUNT_THREE) {
1440 switch (fwspec->param[0]) {
1442 *hwirq = fwspec->param[1] + GIC_IRQ_REG_OFFSET_TWO;
1445 *hwirq = fwspec->param[1] + GIC_IRQ_REG_OFFSET_ONE;
1448 *hwirq = fwspec->param[1] + ESPI_BASE_INTID;
1451 *hwirq = fwspec->param[1] + EPPI_BASE_INTID;
1454 *hwirq = fwspec->param[1];
1457 *hwirq = fwspec->param[1];
1458 if (fwspec->param[1] >= GIC_IRQ_PARAMETER_VALUE_SIXTEEN) {
1468 *type = fwspec->param[GIC_IRQ_BUF_INDEX_TWO] & IRQ_TYPE_SENSE_MASK;
1474 WARN_ON(*type == IRQ_TYPE_NONE && fwspec->param[0] != GIC_IRQ_TYPE_PARTITION);
1478 if (is_fwnode_irqchip(fwspec->fwnode)) {
1479 if (fwspec->param_count != GIC_IRQ_PARAMETER_COUNT_TWO) {
1483 if (fwspec->param[0] < GIC_IRQ_PARAMETER_VALUE_SIXTEEN) {
1485 fwspec->param[0]);
1489 *hwirq = fwspec->param[0];
1490 *type = fwspec->param[1];
1504 struct irq_fwspec *fwspec = arg;
1506 ret = gic_irq_domain_translate(domain, fwspec, &hwirq, &type);
1532 static int gic_irq_domain_select(struct irq_domain *d, struct irq_fwspec *fwspec, enum irq_domain_bus_token bus_token)
1535 if (fwspec->fwnode != d->fwnode) {
1540 if (!is_of_node(fwspec->fwnode)) {
1548 if (fwspec->param_count >= 0x4 && fwspec->param[0] == 0x1 && fwspec->param[GIC_IRQ_BUF_INDEX_THREE] != 0 &&
1550 return d == partition_get_domain(gic_data.ppi_descs[fwspec->param[1]]);
1563 static int partition_domain_translate(struct irq_domain *d, struct irq_fwspec *fwspec, unsigned long *hwirq,
1573 np = of_find_node_by_phandle(fwspec->param[GIC_IRQ_BUF_INDEX_THREE]);
1578 ret = partition_translate_id(gic_data.ppi_descs[fwspec->param[1]], of_node_to_fwnode(np));
1584 *type = fwspec->param[GIC_IRQ_BUF_INDEX_TWO] & IRQ_TYPE_SENSE_MASK;