From: Raul E Rangel <rrangel@chromium.org>
To: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: linux-acpi@vger.kernel.org, linux-input@vger.kernel.org,
jingle.wu@emc.com.tw, mario.limonciello@amd.com,
timvp@google.com, linus.walleij@linaro.org, hdegoede@redhat.com,
rafael@kernel.org, Dan Williams <dan.j.williams@intel.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Jonathan Cameron <Jonathan.Cameron@huawei.com>,
Len Brown <lenb@kernel.org>, Terry Bowman <terry.bowman@amd.com>,
Wolfram Sang <wsa@kernel.org>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 06/13] ACPI: resources: Add wake_capable parameter to acpi_dev_irq_flags
Date: Wed, 14 Sep 2022 14:49:22 -0600 [thread overview]
Message-ID: <YyI+Un/1O36Zkuko@google.com> (raw)
In-Reply-To: <YyC8C+ZH57xHYLQd@smile.fi.intel.com>
On Tue, Sep 13, 2022 at 08:21:15PM +0300, Andy Shevchenko wrote:
> On Mon, Sep 12, 2022 at 04:13:10PM -0600, Raul E Rangel wrote:
> > ACPI IRQ/Interrupt resources contain a bit that describes if the
> > interrupt should wake the system. This change exposes that bit via
> > a new IORESOURCE_IRQ_WAKECAPABLE flag. Drivers should check this flag
> > before arming an IRQ to wake the system.
>
> ...
>
> > static inline void acpi_irq_parse_one_match(struct fwnode_handle *fwnode,
> > u32 hwirq, u8 triggering,
> > u8 polarity, u8 shareable,
> > + u8 wake_capable,
> > struct acpi_irq_parse_one_ctx *ctx)
>
> This function is used only in scope of a single C-file. Why instead not
> converting it to use some internal structure and acpi_irq_parse_one_cb()
> becomes like:
>
> struct internal_struct s;
>
> switch (ares->type) {
> case ACPI_RESOURCE_TYPE_IRQ:
> ...fill internal_struct...
> break;
> case ACPI_RESOURCE_TYPE_EXTENDED_IRQ:
> ...fill internal_struct...
> break;
> default:
> return AE_OK;
>
> acpi_irq_parse_one_match(&s);
> return AE_CTRL_TERMINATE;
>
> ?
>
> ...
>
> > + acpi_dev_get_irqresource(res,
> > + ext_irq->interrupts[index],
> > + ext_irq->triggering,
> > + ext_irq->polarity,
> > + ext_irq->shareable,
> > + ext_irq->wake_capable, false);
>
> Ditto.
>
> Actually it can be shared structure for these too.
>
I tried your suggestion, but I honestly think it hurts readability. It's
also a little scary because the compiler doesn't guarantee all the
members of the struct are filled out, unlike having the explicit
parameters. Here is the patch:
diff --git a/drivers/acpi/irq.c b/drivers/acpi/irq.c
index 5483cf9a28e3a0..8549ccefa5d03c 100644
--- a/drivers/acpi/irq.c
+++ b/drivers/acpi/irq.c
@@ -139,35 +139,37 @@ struct acpi_irq_parse_one_ctx {
struct irq_fwspec *fwspec;
};
+struct acpi_irq_parse_one_match_params {
+ struct fwnode_handle *fwnode;
+ u32 hwirq;
+ u8 triggering;
+ u8 polarity;
+ u8 shareable;
+ u8 wake_capable;
+}
+
/**
- * acpi_irq_parse_one_match - Handle a matching IRQ resource.
- * @fwnode: matching fwnode
- * @hwirq: hardware IRQ number
- * @triggering: triggering attributes of hwirq
- * @polarity: polarity attributes of hwirq
- * @polarity: polarity attributes of hwirq
- * @shareable: shareable attributes of hwirq
- * @wake_capable: wake capable attribute of hwirq
+ * acpi_irq_parse_update_ctx - Handle a matching IRQ resource.
+ * @params: IRQ parameters
* @ctx: acpi_irq_parse_one_ctx updated by this function
*
* Description:
- * Handle a matching IRQ resource by populating the given ctx with
- * the information passed.
+ * Update the given ctx with the IRQ information passed.
*/
-static inline void acpi_irq_parse_one_match(struct fwnode_handle *fwnode,
- u32 hwirq, u8 triggering,
- u8 polarity, u8 shareable,
- u8 wake_capable,
- struct acpi_irq_parse_one_ctx *ctx)
+static inline void
+acpi_irq_parse_update_ctx(const struct parse_one_match *params,
+ struct acpi_irq_parse_one_ctx *ctx)
{
- if (!fwnode)
+ if (!params->fwnode)
return;
ctx->rc = 0;
- *ctx->res_flags = acpi_dev_irq_flags(triggering, polarity, shareable,
- wake_capable);
- ctx->fwspec->fwnode = fwnode;
- ctx->fwspec->param[0] = hwirq;
- ctx->fwspec->param[1] = acpi_dev_get_irq_type(triggering, polarity);
+ *ctx->res_flags =
+ acpi_dev_irq_flags(params->triggering, params->polarity,
+ params->shareable, params->wake_capable);
+ ctx->fwspec->fwnode = params->fwnode;
+ ctx->fwspec->param[0] = params->hwirq;
+ ctx->fwspec->param[1] =
+ acpi_dev_get_irq_type(params->triggering, params->polarity);
ctx->fwspec->param_count = 2;
}
@@ -182,7 +184,7 @@ static inline void acpi_irq_parse_one_match(struct fwnode_handle *fwnode,
* might contain multiple interrupts we check if the index is within this
* one's interrupt array, otherwise we subtract the current resource IRQ
* count from the lookup index to prepare for the next resource.
- * Once a match is found we call acpi_irq_parse_one_match to populate
+ * Once a match is found we call acpi_irq_parse_update_ctx to populate
* the result and end the walk by returning AE_CTRL_TERMINATE.
*
* Return:
@@ -195,7 +197,7 @@ static acpi_status acpi_irq_parse_one_cb(struct acpi_resource *ares,
struct acpi_irq_parse_one_ctx *ctx = context;
struct acpi_resource_irq *irq;
struct acpi_resource_extended_irq *eirq;
- struct fwnode_handle *fwnode;
+ struct acpi_irq_parse_one_match_params params = {0};
switch (ares->type) {
case ACPI_RESOURCE_TYPE_IRQ:
@@ -204,11 +206,13 @@ static acpi_status acpi_irq_parse_one_cb(struct acpi_resource *ares,
ctx->index -= irq->interrupt_count;
return AE_OK;
}
- fwnode = acpi_get_gsi_domain_id(irq->interrupts[ctx->index]);
- acpi_irq_parse_one_match(fwnode, irq->interrupts[ctx->index],
- irq->triggering, irq->polarity,
- irq->shareable, irq->wake_capable,
- ctx);
+ params.fwnode =
+ acpi_get_gsi_domain_id(irq->interrupts[ctx->index]);
+ params.hwirq = irq->interrupts[ctx->index];
+ params.triggering = irq->triggering;
+ params.polarity = irq->polarity;
+ params.shareable = irq->shareable;
+ params.wake_capable = irq->wake_capable;
return AE_CTRL_TERMINATE;
case ACPI_RESOURCE_TYPE_EXTENDED_IRQ:
eirq = &ares->data.extended_irq;
@@ -218,16 +222,22 @@ static acpi_status acpi_irq_parse_one_cb(struct acpi_resource *ares,
ctx->index -= eirq->interrupt_count;
return AE_OK;
}
- fwnode = acpi_get_irq_source_fwhandle(&eirq->resource_source,
- eirq->interrupts[ctx->index]);
- acpi_irq_parse_one_match(fwnode, eirq->interrupts[ctx->index],
- eirq->triggering, eirq->polarity,
- eirq->shareable, eirq->wake_capable,
- ctx);
- return AE_CTRL_TERMINATE;
+ params.fwnode = acpi_get_irq_source_fwhandle(
+ &eirq->resource_source, eirq->interrupts[ctx->index]);
+ params.hwirq = eirq->interrupts[ctx->index];
+ params.triggering = eirq->triggering;
+ params.polarity = eirq->polarity;
+ params.shareable = eirq->shareable;
+ params.wake_capable = eirq->wake_capable;
+
+ default:
+ return AE_OK;
}
- return AE_OK;
+ acpi_irq_parse_update_ctx(¶ms, ctx);
+
+ return AE_CTRL_TERMINATE;
+
}
/**
next prev parent reply other threads:[~2022-09-14 20:49 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-12 22:13 [PATCH v2 00/13] acpi: i2c: Use SharedAndWake and ExclusiveAndWake to enable wake irq Raul E Rangel
2022-09-12 22:13 ` [PATCH v2 01/13] HID: i2c-hid: Use PM subsystem to manage " Raul E Rangel
2022-09-12 22:13 ` [PATCH v2 02/13] Input: elan_i2c - " Raul E Rangel
2022-09-12 22:13 ` [PATCH v2 03/13] Input: elants_i2c " Raul E Rangel
2022-09-12 22:13 ` [PATCH v2 04/13] Input: raydium_ts_i2c " Raul E Rangel
2022-09-12 22:13 ` [PATCH v2 05/13] gpiolib: acpi: Add wake_capable parameter to acpi_dev_gpio_irq_get_by Raul E Rangel
2022-09-13 17:10 ` Andy Shevchenko
2022-09-14 5:55 ` Mika Westerberg
2022-09-14 15:21 ` Raul Rangel
2022-09-12 22:13 ` [PATCH v2 06/13] ACPI: resources: Add wake_capable parameter to acpi_dev_irq_flags Raul E Rangel
2022-09-13 17:21 ` Andy Shevchenko
2022-09-14 20:49 ` Raul E Rangel [this message]
2022-09-12 22:13 ` [PATCH v2 07/13] i2c: acpi: Use ACPI wake capability bit to set wake_irq Raul E Rangel
2022-09-13 7:28 ` Wolfram Sang
2022-09-13 15:51 ` Raul Rangel
2022-09-13 17:26 ` Andy Shevchenko
2022-09-13 18:07 ` Raul Rangel
2022-09-13 18:33 ` Andy Shevchenko
2022-09-13 18:56 ` Raul Rangel
2022-09-14 9:42 ` Andy Shevchenko
2022-09-14 18:33 ` Raul Rangel
2022-09-14 5:54 ` Mika Westerberg
2022-09-14 21:00 ` Raul Rangel
2022-09-12 22:13 ` [PATCH v2 08/13] ACPI: PM: Take wake IRQ into consideration when entering suspend-to-idle Raul E Rangel
2022-09-12 22:13 ` [PATCH v2 09/13] HID: i2c-hid: acpi: Stop setting wakeup_capable Raul E Rangel
2022-09-12 22:13 ` [PATCH v2 10/13] HID: i2c-hid: Don't set wake_capable and wake_irq Raul E Rangel
2022-09-12 22:13 ` [PATCH v2 11/13] Input: elan_i2c - " Raul E Rangel
2022-09-12 22:13 ` [PATCH v2 12/13] Input: elants_i2c " Raul E Rangel
2022-09-12 22:13 ` [PATCH v2 13/13] Input: raydium_ts_i2c " Raul E Rangel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YyI+Un/1O36Zkuko@google.com \
--to=rrangel@chromium.org \
--cc=Jonathan.Cameron@huawei.com \
--cc=andriy.shevchenko@linux.intel.com \
--cc=dan.j.williams@intel.com \
--cc=gregkh@linuxfoundation.org \
--cc=hdegoede@redhat.com \
--cc=jingle.wu@emc.com.tw \
--cc=lenb@kernel.org \
--cc=linus.walleij@linaro.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mario.limonciello@amd.com \
--cc=rafael@kernel.org \
--cc=terry.bowman@amd.com \
--cc=timvp@google.com \
--cc=wsa@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.