From patchwork Thu Jul 23 13:05:09 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marc Zyngier X-Patchwork-Id: 6853481 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 4D7EA9F1D4 for ; Thu, 23 Jul 2015 13:05:50 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 6357120651 for ; Thu, 23 Jul 2015 13:05:46 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 884A320781 for ; Thu, 23 Jul 2015 13:05:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753256AbbGWNFg (ORCPT ); Thu, 23 Jul 2015 09:05:36 -0400 Received: from foss.arm.com ([217.140.101.70]:40298 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752759AbbGWNF2 (ORCPT ); Thu, 23 Jul 2015 09:05:28 -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 ADC60545; Thu, 23 Jul 2015 06:05:40 -0700 (PDT) Received: from approximate.cambridge.arm.com (approximate.cambridge.arm.com [10.1.209.148]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 40D043F23A; Thu, 23 Jul 2015 06:05:25 -0700 (PDT) From: Marc Zyngier To: Thomas Gleixner , Jiang Liu , Jason Cooper Cc: , , , Lorenzo Pieralisi , Tomasz Nowicki , Hanjun Guo , "Rafael J. Wysocki" , Suravee Suthikulpanit , Graeme Gregory Subject: [PATCH v2 3/7] genirq: irqdomain: Add irq_create_acpi_mapping Date: Thu, 23 Jul 2015 14:05:09 +0100 Message-Id: <1437656713-9677-4-git-send-email-marc.zyngier@arm.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1437656713-9677-1-git-send-email-marc.zyngier@arm.com> References: <1437656713-9677-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=-8.1 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, 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 Reviewed-by: Hanjun Guo --- 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 d2445fa..2f23ab0 100644 --- a/include/linux/acpi.h +++ b/include/linux/acpi.h @@ -205,6 +205,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 27f4ec7..542cda3 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 @@ -557,6 +558,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 ? d->domain_token : NULL; + 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