From patchwork Tue Jul 21 10:07:58 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marc Zyngier X-Patchwork-Id: 6834391 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 B35429F380 for ; Tue, 21 Jul 2015 10:09:49 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id E3646206B5 for ; Tue, 21 Jul 2015 10:09:48 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 03CED20690 for ; Tue, 21 Jul 2015 10:09:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755430AbbGUKJU (ORCPT ); Tue, 21 Jul 2015 06:09:20 -0400 Received: from foss.arm.com ([217.140.101.70]:59030 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754906AbbGUKIQ (ORCPT ); Tue, 21 Jul 2015 06:08:16 -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 92A74524; Tue, 21 Jul 2015 03:08:31 -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 892EA3F21A; Tue, 21 Jul 2015 03:08:14 -0700 (PDT) From: Marc Zyngier To: Thomas Gleixner , Jiang Liu , Jason Cooper Cc: , , , Lorenzo Pieralisi , Tomasz Nowicki , Hanjun Guo , "Rafael J. Wysocki" , Suravee Suthikulpanit Subject: [PATCH 3/5] genirq: irqdomain: Add irq_create_acpi_mappings Date: Tue, 21 Jul 2015 11:07:58 +0100 Message-Id: <1437473280-11431-4-git-send-email-marc.zyngier@arm.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1437473280-11431-1-git-send-email-marc.zyngier@arm.com> References: <1437473280-11431-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 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 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