From patchwork Mon Sep 28 16:42:55 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marc Zyngier X-Patchwork-Id: 7278981 Return-Path: X-Original-To: patchwork-linux-acpi@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 497389F32B for ; Mon, 28 Sep 2015 16:46:24 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 61E3E2070D for ; Mon, 28 Sep 2015 16:46:23 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 74C7120705 for ; Mon, 28 Sep 2015 16:46:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934382AbbI1Qn0 (ORCPT ); Mon, 28 Sep 2015 12:43:26 -0400 Received: from foss.arm.com ([217.140.101.70]:51675 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933867AbbI1QnY (ORCPT ); Mon, 28 Sep 2015 12:43:24 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 4A3C861; Mon, 28 Sep 2015 09:43:27 -0700 (PDT) Received: from approximate.cambridge.arm.com (unknown [10.1.209.148]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id A53A33F2E5; Mon, 28 Sep 2015 09:43:21 -0700 (PDT) From: Marc Zyngier To: Thomas Gleixner , Jiang Liu , Jason Cooper , "Rafael J. Wysocki" , Mark Rutland , Rob Herring , Frank Rowand Cc: , , , devicetree@vger.kernel.org, Lorenzo Pieralisi , Tomasz Nowicki , Hanjun Guo , Suravee Suthikulpanit , Graeme Gregory , Jake Oshins Subject: [PATCH v4 2/9] genirq/irqdomain: Add irq_create_acpi_mapping Date: Mon, 28 Sep 2015 17:42:55 +0100 Message-Id: <1443458582-7497-3-git-send-email-marc.zyngier@arm.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1443458582-7497-1-git-send-email-marc.zyngier@arm.com> References: <1443458582-7497-1-git-send-email-marc.zyngier@arm.com> Sender: linux-acpi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP In order to help ACPI on arm64 to make use of most of the irqdomain goodies, add a new entry point (irq_create_acpi_mapping) which mimics irq_create_of_mapping, except that it takes a new struct acpi_gsi_descriptor, which is the pendent of of_phandle_args in the OF world. We assume that the way the acpi_gsi_descriptor is populated matches that of of_phandle_args, as the latter is still the building block for interrupt descriptor in the whole kernel. Eventually, these two representations should be merged in a single structure, but that's probably for another day. Signed-off-by: Marc Zyngier --- include/linux/acpi.h | 9 +++++++++ kernel/irq/irqdomain.c | 18 ++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/include/linux/acpi.h b/include/linux/acpi.h index 7235c48..4db2f01 100644 --- a/include/linux/acpi.h +++ b/include/linux/acpi.h @@ -201,6 +201,15 @@ int acpi_register_gsi (struct device *dev, u32 gsi, int triggering, int polarity int acpi_gsi_to_irq (u32 gsi, unsigned int *irq); int acpi_isa_irq_to_gsi (unsigned isa_irq, u32 *gsi); +#define MAX_GSI_DESC_PARAMS 16 +struct acpi_gsi_descriptor { + int param_count; + u32 param[MAX_GSI_DESC_PARAMS]; +}; + +unsigned int irq_create_acpi_mapping(struct irq_domain *d, + struct acpi_gsi_descriptor *irq_data); + #ifdef CONFIG_X86_IO_APIC extern int acpi_get_override_irq(u32 gsi, int *trigger, int *polarity); #else diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c index dc9d27c..e5c1e4c 100644 --- a/kernel/irq/irqdomain.c +++ b/kernel/irq/irqdomain.c @@ -1,5 +1,6 @@ #define pr_fmt(fmt) "irq: " fmt +#include #include #include #include @@ -522,6 +523,23 @@ unsigned int irq_create_of_mapping(struct of_phandle_args *irq_data) } EXPORT_SYMBOL_GPL(irq_create_of_mapping); +#ifdef CONFIG_ACPI +unsigned int irq_create_acpi_mapping(struct irq_domain *d, + struct acpi_gsi_descriptor *irq_data) +{ + struct of_phandle_args args; + int i; + + for (i = 0; i < min(irq_data->param_count, MAX_PHANDLE_ARGS); i++) + args.args[i] = irq_data->param[i]; + + args.np = d->of_node; + args.args_count = i; + + return irq_create_of_mapping(&args); +} +#endif + /** * irq_dispose_mapping() - Unmap an interrupt * @virq: linux irq number of the interrupt to unmap