public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3] platform/x86: alienware-wmi-base: Transition to new WMI API
@ 2026-03-31 16:20 Kurt Borja
  2026-04-13  6:25 ` Armin Wolf
  0 siblings, 1 reply; 3+ messages in thread
From: Kurt Borja @ 2026-03-31 16:20 UTC (permalink / raw)
  To: Ilpo Järvinen, Armin Wolf, Hans de Goede
  Cc: platform-driver-x86, Dell.Client.Kernel, linux-kernel, Kurt Borja

Transition to the new wmi_buffer based WMI API.

Signed-off-by: Kurt Borja <kuurtb@gmail.com>
---
v3:
  - Use __free() instead of manual cleanup.
  - Include <linux/types.h>

v2: https://patch.msgid.link/20260331-aw-new-api-v2-1-3b0d33bf8d22@gmail.com
  - Cast wmi_buffer data to __le32 and then use le32_to_cpu() before
    returning

v1: https://patch.msgid.link/20260330-aw-new-api-v1-1-95910bfa1b38@gmail.com
---
 drivers/platform/x86/dell/alienware-wmi-base.c | 34 ++++++++++++++++----------
 1 file changed, 21 insertions(+), 13 deletions(-)

diff --git a/drivers/platform/x86/dell/alienware-wmi-base.c b/drivers/platform/x86/dell/alienware-wmi-base.c
index 64562b92314f..38a903734fa3 100644
--- a/drivers/platform/x86/dell/alienware-wmi-base.c
+++ b/drivers/platform/x86/dell/alienware-wmi-base.c
@@ -12,8 +12,13 @@
 #include <linux/cleanup.h>
 #include <linux/module.h>
 #include <linux/platform_device.h>
+#include <linux/slab.h>
+#include <linux/types.h>
 #include <linux/dmi.h>
 #include <linux/leds.h>
+
+#include <asm/byteorder.h>
+
 #include "alienware-wmi.h"
 
 MODULE_AUTHOR("Mario Limonciello <mario.limonciello@outlook.com>");
@@ -150,22 +155,25 @@ u8 alienware_interface;
 int alienware_wmi_command(struct wmi_device *wdev, u32 method_id,
 			  void *in_args, size_t in_size, u32 *out_data)
 {
-	struct acpi_buffer out = {ACPI_ALLOCATE_BUFFER, NULL};
-	struct acpi_buffer in = {in_size, in_args};
-	acpi_status ret;
+	struct wmi_buffer out, in = {
+		.data = in_args,
+		.length = in_size,
+	};
+	int ret;
 
-	ret = wmidev_evaluate_method(wdev, 0, method_id, &in, out_data ? &out : NULL);
-	if (ACPI_FAILURE(ret))
-		return -EIO;
+	ret = wmidev_invoke_method(wdev, 0, method_id, &in, out_data ? &out : NULL);
+	if (ret)
+		return ret;
 
-	union acpi_object *obj __free(kfree) = out.pointer;
+	if (!out_data)
+		return 0;
 
-	if (out_data) {
-		if (obj && obj->type == ACPI_TYPE_INTEGER)
-			*out_data = (u32)obj->integer.value;
-		else
-			return -ENOMSG;
-	}
+	__le32 *data __free(kfree) = out.data;
+
+	if (out.length < sizeof(*out_data))
+		return -ENOMSG;
+
+	*out_data = le32_to_cpu(*data);
 
 	return 0;
 }

---
base-commit: fab7c51693e95aa874d6d9db22bfae7bd0b23c66
change-id: 20260123-aw-new-api-1c18f1011f35

-- 
Thanks, 
 ~ Kurt


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH v3] platform/x86: alienware-wmi-base: Transition to new WMI API
  2026-03-31 16:20 [PATCH v3] platform/x86: alienware-wmi-base: Transition to new WMI API Kurt Borja
@ 2026-04-13  6:25 ` Armin Wolf
  2026-04-20 16:29   ` Kurt Borja
  0 siblings, 1 reply; 3+ messages in thread
From: Armin Wolf @ 2026-04-13  6:25 UTC (permalink / raw)
  To: Kurt Borja, Ilpo Järvinen, Hans de Goede
  Cc: platform-driver-x86, Dell.Client.Kernel, linux-kernel

Am 31.03.26 um 18:20 schrieb Kurt Borja:
> Transition to the new wmi_buffer based WMI API.

Hi,

i think you will have to adapt this patch to the changes i made to
wmidev_invoke_method(). Said function now takes an additional parameter
specifying the minimum size of the output data.

In your case this would replace the size check when output data is 
expected, otherwise you should call wmidev_invoke_procedure.

Thanks,
Armin Wolf


> 
> Signed-off-by: Kurt Borja <kuurtb@gmail.com>
> ---
> v3:
>    - Use __free() instead of manual cleanup.
>    - Include <linux/types.h>
> 
> v2: https://patch.msgid.link/20260331-aw-new-api-v2-1-3b0d33bf8d22@gmail.com
>    - Cast wmi_buffer data to __le32 and then use le32_to_cpu() before
>      returning
> 
> v1: https://patch.msgid.link/20260330-aw-new-api-v1-1-95910bfa1b38@gmail.com
> ---
>   drivers/platform/x86/dell/alienware-wmi-base.c | 34 ++++++++++++++++----------
>   1 file changed, 21 insertions(+), 13 deletions(-)
> 
> diff --git a/drivers/platform/x86/dell/alienware-wmi-base.c b/drivers/platform/x86/dell/alienware-wmi-base.c
> index 64562b92314f..38a903734fa3 100644
> --- a/drivers/platform/x86/dell/alienware-wmi-base.c
> +++ b/drivers/platform/x86/dell/alienware-wmi-base.c
> @@ -12,8 +12,13 @@
>   #include <linux/cleanup.h>
>   #include <linux/module.h>
>   #include <linux/platform_device.h>
> +#include <linux/slab.h>
> +#include <linux/types.h>
>   #include <linux/dmi.h>
>   #include <linux/leds.h>
> +
> +#include <asm/byteorder.h>
> +
>   #include "alienware-wmi.h"
>   
>   MODULE_AUTHOR("Mario Limonciello <mario.limonciello@outlook.com>");
> @@ -150,22 +155,25 @@ u8 alienware_interface;
>   int alienware_wmi_command(struct wmi_device *wdev, u32 method_id,
>   			  void *in_args, size_t in_size, u32 *out_data)
>   {
> -	struct acpi_buffer out = {ACPI_ALLOCATE_BUFFER, NULL};
> -	struct acpi_buffer in = {in_size, in_args};
> -	acpi_status ret;
> +	struct wmi_buffer out, in = {
> +		.data = in_args,
> +		.length = in_size,
> +	};
> +	int ret;
>   
> -	ret = wmidev_evaluate_method(wdev, 0, method_id, &in, out_data ? &out : NULL);
> -	if (ACPI_FAILURE(ret))
> -		return -EIO;
> +	ret = wmidev_invoke_method(wdev, 0, method_id, &in, out_data ? &out : NULL);
> +	if (ret)
> +		return ret;
>   
> -	union acpi_object *obj __free(kfree) = out.pointer;
> +	if (!out_data)
> +		return 0;
>   
> -	if (out_data) {
> -		if (obj && obj->type == ACPI_TYPE_INTEGER)
> -			*out_data = (u32)obj->integer.value;
> -		else
> -			return -ENOMSG;
> -	}
> +	__le32 *data __free(kfree) = out.data;
> +
> +	if (out.length < sizeof(*out_data))
> +		return -ENOMSG;
> +
> +	*out_data = le32_to_cpu(*data);
>   
>   	return 0;
>   }
> 
> ---
> base-commit: fab7c51693e95aa874d6d9db22bfae7bd0b23c66
> change-id: 20260123-aw-new-api-1c18f1011f35
> 


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH v3] platform/x86: alienware-wmi-base: Transition to new WMI API
  2026-04-13  6:25 ` Armin Wolf
@ 2026-04-20 16:29   ` Kurt Borja
  0 siblings, 0 replies; 3+ messages in thread
From: Kurt Borja @ 2026-04-20 16:29 UTC (permalink / raw)
  To: Armin Wolf, Kurt Borja, Ilpo Järvinen, Hans de Goede
  Cc: platform-driver-x86, Dell.Client.Kernel, linux-kernel

On Mon Apr 13, 2026 at 1:25 AM -05, Armin Wolf wrote:
> Am 31.03.26 um 18:20 schrieb Kurt Borja:
>> Transition to the new wmi_buffer based WMI API.
>
> Hi,
>
> i think you will have to adapt this patch to the changes i made to
> wmidev_invoke_method(). Said function now takes an additional parameter
> specifying the minimum size of the output data.

Hi Armin,

I'll go for this!

>
> In your case this would replace the size check when output data is 
> expected, otherwise you should call wmidev_invoke_procedure.
>
> Thanks,
> Armin Wolf

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-04-20 16:30 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-31 16:20 [PATCH v3] platform/x86: alienware-wmi-base: Transition to new WMI API Kurt Borja
2026-04-13  6:25 ` Armin Wolf
2026-04-20 16:29   ` Kurt Borja

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox