All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC v2 0/2] platform/x86: Allow retrieving the number of WMI object instances
@ 2023-04-26 21:28 Armin Wolf
  2023-04-26 21:28 ` [RFC v2 1/2] platform/x86: wmi: " Armin Wolf
  2023-04-26 21:28 ` [RFC v2 2/2] platform/x86: dell-sysman: Improve instance detection Armin Wolf
  0 siblings, 2 replies; 8+ messages in thread
From: Armin Wolf @ 2023-04-26 21:28 UTC (permalink / raw)
  To: hdegoede, markgross
  Cc: Mario.Limonciello, prasanth.ksr, jorgealtxwork, james,
	Dell.Client.Kernel, platform-driver-x86, linux-kernel

This experimental patch series allows WMI drivers to retrieve
the number of WMI object instances. This functionallity benefits
several current and upcoming WMI drivers, the dell-wmi-sysman driver
is converted to use this new API as an example.

The changes are compile-tested only, the change to the dell-wmi-sysman
driver also needs to be tested on real hardware.

Armin Wolf (2):
  platform/x86: wmi: Allow retrieving the number of WMI object instances
  platform/x86: dell-sysman: Improve instance detection

 .../x86/dell/dell-wmi-sysman/sysman.c         | 15 ++++---
 drivers/platform/x86/wmi.c                    | 40 +++++++++++++++++++
 include/linux/acpi.h                          |  2 +
 include/linux/wmi.h                           |  2 +
 4 files changed, 51 insertions(+), 8 deletions(-)

--
2.30.2


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

* [RFC v2 1/2] platform/x86: wmi: Allow retrieving the number of WMI object instances
  2023-04-26 21:28 [RFC v2 0/2] platform/x86: Allow retrieving the number of WMI object instances Armin Wolf
@ 2023-04-26 21:28 ` Armin Wolf
  2023-04-27  6:19     ` James Seo
  2023-04-27  9:43   ` Hans de Goede
  2023-04-26 21:28 ` [RFC v2 2/2] platform/x86: dell-sysman: Improve instance detection Armin Wolf
  1 sibling, 2 replies; 8+ messages in thread
From: Armin Wolf @ 2023-04-26 21:28 UTC (permalink / raw)
  To: hdegoede, markgross
  Cc: Mario.Limonciello, prasanth.ksr, jorgealtxwork, james,
	Dell.Client.Kernel, platform-driver-x86, linux-kernel

Currently, the WMI driver core knows how many instances of a given
WMI object exist, but WMI drivers cannot access this information.
At the same time, some current and upcoming WMI drivers want to
have access to this information. Add wmi_instance_count() and
wmidev_instance_count() to allow WMI drivers to get the number of
WMI object instances.

Signed-off-by: Armin Wolf <W_Armin@gmx.de>
---
 drivers/platform/x86/wmi.c | 40 ++++++++++++++++++++++++++++++++++++++
 include/linux/acpi.h       |  2 ++
 include/linux/wmi.h        |  2 ++
 3 files changed, 44 insertions(+)

diff --git a/drivers/platform/x86/wmi.c b/drivers/platform/x86/wmi.c
index c226dd4163a1..7c1a904dec5f 100644
--- a/drivers/platform/x86/wmi.c
+++ b/drivers/platform/x86/wmi.c
@@ -263,6 +263,46 @@ int set_required_buffer_size(struct wmi_device *wdev, u64 length)
 }
 EXPORT_SYMBOL_GPL(set_required_buffer_size);

+/**
+ * wmi_instance_count - Get number of WMI object instances
+ * @guid_string: 36 char string of the form fa50ff2b-f2e8-45de-83fa-65417f2f49ba
+ * @instance_count: variable to hold the instance count
+ *
+ * Get the number of WMI object instances.
+ *
+ * Returns: acpi_status signaling success or error.
+ */
+acpi_status wmi_instance_count(const char *guid_string, u8 *instance_count)
+{
+	struct wmi_block *wblock;
+	acpi_status status;
+
+	status = find_guid(guid_string, &wblock);
+	if (ACPI_FAILURE(status))
+		return status;
+
+	*instance_count = wmidev_instance_count(&wblock->dev);
+
+	return AE_OK;
+}
+EXPORT_SYMBOL_GPL(wmi_instance_count);
+
+/**
+ * wmidev_instance_count - Get number of WMI object instances
+ * @wdev: A wmi bus device from a driver
+ *
+ * Get the number of WMI object instances.
+ *
+ * Returns: Number of WMI object instances.
+ */
+u8 wmidev_instance_count(struct wmi_device *wdev)
+{
+	struct wmi_block *wblock = container_of(wdev, struct wmi_block, dev);
+
+	return wblock->gblock.instance_count;
+}
+EXPORT_SYMBOL_GPL(wmidev_instance_count);
+
 /**
  * wmi_evaluate_method - Evaluate a WMI method (deprecated)
  * @guid_string: 36 char string of the form fa50ff2b-f2e8-45de-83fa-65417f2f49ba
diff --git a/include/linux/acpi.h b/include/linux/acpi.h
index efff750f326d..ab2a4b23e7a3 100644
--- a/include/linux/acpi.h
+++ b/include/linux/acpi.h
@@ -412,6 +412,8 @@ extern bool acpi_is_pnp_device(struct acpi_device *);

 typedef void (*wmi_notify_handler) (u32 value, void *context);

+acpi_status wmi_instance_count(const char *guid, u8 *instance_count);
+
 extern acpi_status wmi_evaluate_method(const char *guid, u8 instance,
 					u32 method_id,
 					const struct acpi_buffer *in,
diff --git a/include/linux/wmi.h b/include/linux/wmi.h
index c1a3bd4e4838..763bd382cf2d 100644
--- a/include/linux/wmi.h
+++ b/include/linux/wmi.h
@@ -35,6 +35,8 @@ extern acpi_status wmidev_evaluate_method(struct wmi_device *wdev,
 extern union acpi_object *wmidev_block_query(struct wmi_device *wdev,
 					     u8 instance);

+u8 wmidev_instance_count(struct wmi_device *wdev);
+
 extern int set_required_buffer_size(struct wmi_device *wdev, u64 length);

 /**
--
2.30.2


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

* [RFC v2 2/2] platform/x86: dell-sysman: Improve instance detection
  2023-04-26 21:28 [RFC v2 0/2] platform/x86: Allow retrieving the number of WMI object instances Armin Wolf
  2023-04-26 21:28 ` [RFC v2 1/2] platform/x86: wmi: " Armin Wolf
@ 2023-04-26 21:28 ` Armin Wolf
  1 sibling, 0 replies; 8+ messages in thread
From: Armin Wolf @ 2023-04-26 21:28 UTC (permalink / raw)
  To: hdegoede, markgross
  Cc: Mario.Limonciello, prasanth.ksr, jorgealtxwork, james,
	Dell.Client.Kernel, platform-driver-x86, linux-kernel

The WMI driver core already knows how many WMI object instances
are available, use this information instead of probing the WMI object
manually.

Compile-tested only.

Signed-off-by: Armin Wolf <W_Armin@gmx.de>
---
 .../platform/x86/dell/dell-wmi-sysman/sysman.c    | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

diff --git a/drivers/platform/x86/dell/dell-wmi-sysman/sysman.c b/drivers/platform/x86/dell/dell-wmi-sysman/sysman.c
index 0285b47d99d1..526d60b510bb 100644
--- a/drivers/platform/x86/dell/dell-wmi-sysman/sysman.c
+++ b/drivers/platform/x86/dell/dell-wmi-sysman/sysman.c
@@ -7,6 +7,7 @@

 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt

+#include <linux/acpi.h>
 #include <linux/fs.h>
 #include <linux/dmi.h>
 #include <linux/module.h>
@@ -303,16 +304,14 @@ union acpi_object *get_wmiobj_pointer(int instance_id, const char *guid_string)
  */
 int get_instance_count(const char *guid_string)
 {
-	union acpi_object *wmi_obj = NULL;
-	int i = 0;
+	acpi_status status;
+	u8 instance_count;

-	do {
-		kfree(wmi_obj);
-		wmi_obj = get_wmiobj_pointer(i, guid_string);
-		i++;
-	} while (wmi_obj);
+	status = wmi_instance_count(guid_string, &instance_count);
+	if (ACPI_FAILURE(status))
+		return 0;

-	return (i-1);
+	return instance_count;
 }

 /**
--
2.30.2


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

* Re: [RFC v2 1/2] platform/x86: wmi: Allow retrieving the number of WMI object instances
  2023-04-26 21:28 ` [RFC v2 1/2] platform/x86: wmi: " Armin Wolf
@ 2023-04-27  6:19     ` James Seo
  2023-04-27  9:43   ` Hans de Goede
  1 sibling, 0 replies; 8+ messages in thread
From: James Seo @ 2023-04-27  6:19 UTC (permalink / raw)
  To: Armin Wolf
  Cc: hdegoede, markgross, Mario.Limonciello, prasanth.ksr,
	jorgealtxwork, james, Dell.Client.Kernel, platform-driver-x86,
	linux-kernel

On Wed, Apr 26, 2023 at 11:28:47PM +0200, Armin Wolf wrote:
> Currently, the WMI driver core knows how many instances of a given
> WMI object exist, but WMI drivers cannot access this information.
> At the same time, some current and upcoming WMI drivers want to
> have access to this information. Add wmi_instance_count() and
> wmidev_instance_count() to allow WMI drivers to get the number of
> WMI object instances.
> 
> Signed-off-by: Armin Wolf <W_Armin@gmx.de>

Tested-by: James Seo <james@equiv.tech>

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

* Re: [RFC v2 1/2] platform/x86: wmi: Allow retrieving the number of WMI object instances
@ 2023-04-27  6:19     ` James Seo
  0 siblings, 0 replies; 8+ messages in thread
From: James Seo @ 2023-04-27  6:19 UTC (permalink / raw)
  To: Armin Wolf
  Cc: hdegoede, markgross, Mario.Limonciello, prasanth.ksr,
	jorgealtxwork, james, Dell.Client.Kernel, platform-driver-x86,
	linux-kernel

On Wed, Apr 26, 2023 at 11:28:47PM +0200, Armin Wolf wrote:
> Currently, the WMI driver core knows how many instances of a given
> WMI object exist, but WMI drivers cannot access this information.
> At the same time, some current and upcoming WMI drivers want to
> have access to this information. Add wmi_instance_count() and
> wmidev_instance_count() to allow WMI drivers to get the number of
> WMI object instances.
> 
> Signed-off-by: Armin Wolf <W_Armin@gmx.de>

Tested-by: James Seo <james@equiv.tech>

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

* Re: [RFC v2 1/2] platform/x86: wmi: Allow retrieving the number of WMI object instances
  2023-04-26 21:28 ` [RFC v2 1/2] platform/x86: wmi: " Armin Wolf
  2023-04-27  6:19     ` James Seo
@ 2023-04-27  9:43   ` Hans de Goede
  2023-04-27 16:26     ` Armin Wolf
  1 sibling, 1 reply; 8+ messages in thread
From: Hans de Goede @ 2023-04-27  9:43 UTC (permalink / raw)
  To: Armin Wolf, markgross
  Cc: Mario.Limonciello, prasanth.ksr, jorgealtxwork, james,
	Dell.Client.Kernel, platform-driver-x86, linux-kernel

Hi Armin,

Thank you for your work on this.

On 4/26/23 23:28, Armin Wolf wrote:
> Currently, the WMI driver core knows how many instances of a given
> WMI object exist, but WMI drivers cannot access this information.
> At the same time, some current and upcoming WMI drivers want to
> have access to this information. Add wmi_instance_count() and
> wmidev_instance_count() to allow WMI drivers to get the number of
> WMI object instances.
> 
> Signed-off-by: Armin Wolf <W_Armin@gmx.de>
> ---
>  drivers/platform/x86/wmi.c | 40 ++++++++++++++++++++++++++++++++++++++
>  include/linux/acpi.h       |  2 ++
>  include/linux/wmi.h        |  2 ++
>  3 files changed, 44 insertions(+)
> 
> diff --git a/drivers/platform/x86/wmi.c b/drivers/platform/x86/wmi.c
> index c226dd4163a1..7c1a904dec5f 100644
> --- a/drivers/platform/x86/wmi.c
> +++ b/drivers/platform/x86/wmi.c
> @@ -263,6 +263,46 @@ int set_required_buffer_size(struct wmi_device *wdev, u64 length)
>  }
>  EXPORT_SYMBOL_GPL(set_required_buffer_size);
> 
> +/**
> + * wmi_instance_count - Get number of WMI object instances
> + * @guid_string: 36 char string of the form fa50ff2b-f2e8-45de-83fa-65417f2f49ba
> + * @instance_count: variable to hold the instance count
> + *
> + * Get the number of WMI object instances.
> + *
> + * Returns: acpi_status signaling success or error.
> + */
> +acpi_status wmi_instance_count(const char *guid_string, u8 *instance_count)
> +{
> +	struct wmi_block *wblock;
> +	acpi_status status;
> +
> +	status = find_guid(guid_string, &wblock);
> +	if (ACPI_FAILURE(status))
> +		return status;
> +
> +	*instance_count = wmidev_instance_count(&wblock->dev);
> +
> +	return AE_OK;
> +}
> +EXPORT_SYMBOL_GPL(wmi_instance_count);

I would prefer this to have a normal kernel function prototype
which returns -errno rather then returning an acpi_status. E.g. :

/**
 * wmi_instance_count - Get number of WMI object instances
 * @guid_string: 36 char string of the form fa50ff2b-f2e8-45de-83fa-65417f2f49ba
 *
 * Get the number of WMI object instances.
 *
 * Returns: The number of WMI object instances, 0 if the GUID is not found.
 */
int wmi_instance_count(const char *guid_string)
{
	struct wmi_block *wblock;
	acpi_status status;

	status = find_guid(guid_string, &wblock);
	if (ACPI_FAILURE(status))
		return 0;

	return wmidev_instance_count(&wblock->dev);
}
EXPORT_SYMBOL_GPL(wmi_instance_count);

This will also allow this to completely replace
the get_instance_count() function in dell-wmi-sysman.

Note I have just gone with always returning 0 here
on error. I guess you could look at the status and
return 0 for not-found and -errno for other errors
but I don't think any callers will care for the difference,
so just always returning 0 seems easier for callers to
deal with.

As always this is just a suggestion, let me know if
you think this is a bad idea.

Regards,

Hans










> +
> +/**
> + * wmidev_instance_count - Get number of WMI object instances
> + * @wdev: A wmi bus device from a driver
> + *
> + * Get the number of WMI object instances.
> + *
> + * Returns: Number of WMI object instances.
> + */
> +u8 wmidev_instance_count(struct wmi_device *wdev)
> +{
> +	struct wmi_block *wblock = container_of(wdev, struct wmi_block, dev);
> +
> +	return wblock->gblock.instance_count;
> +}
> +EXPORT_SYMBOL_GPL(wmidev_instance_count);
> +
>  /**
>   * wmi_evaluate_method - Evaluate a WMI method (deprecated)
>   * @guid_string: 36 char string of the form fa50ff2b-f2e8-45de-83fa-65417f2f49ba
> diff --git a/include/linux/acpi.h b/include/linux/acpi.h
> index efff750f326d..ab2a4b23e7a3 100644
> --- a/include/linux/acpi.h
> +++ b/include/linux/acpi.h
> @@ -412,6 +412,8 @@ extern bool acpi_is_pnp_device(struct acpi_device *);
> 
>  typedef void (*wmi_notify_handler) (u32 value, void *context);
> 
> +acpi_status wmi_instance_count(const char *guid, u8 *instance_count);
> +
>  extern acpi_status wmi_evaluate_method(const char *guid, u8 instance,
>  					u32 method_id,
>  					const struct acpi_buffer *in,
> diff --git a/include/linux/wmi.h b/include/linux/wmi.h
> index c1a3bd4e4838..763bd382cf2d 100644
> --- a/include/linux/wmi.h
> +++ b/include/linux/wmi.h
> @@ -35,6 +35,8 @@ extern acpi_status wmidev_evaluate_method(struct wmi_device *wdev,
>  extern union acpi_object *wmidev_block_query(struct wmi_device *wdev,
>  					     u8 instance);
> 
> +u8 wmidev_instance_count(struct wmi_device *wdev);
> +
>  extern int set_required_buffer_size(struct wmi_device *wdev, u64 length);
> 
>  /**
> --
> 2.30.2
> 


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

* Re: [RFC v2 1/2] platform/x86: wmi: Allow retrieving the number of WMI object instances
  2023-04-27  9:43   ` Hans de Goede
@ 2023-04-27 16:26     ` Armin Wolf
  2023-04-29  9:27       ` Hans de Goede
  0 siblings, 1 reply; 8+ messages in thread
From: Armin Wolf @ 2023-04-27 16:26 UTC (permalink / raw)
  To: Hans de Goede, markgross
  Cc: Mario.Limonciello, prasanth.ksr, jorgealtxwork, james,
	Dell.Client.Kernel, platform-driver-x86, linux-kernel

Am 27.04.23 um 11:43 schrieb Hans de Goede:

> Hi Armin,
>
> Thank you for your work on this.
>
> On 4/26/23 23:28, Armin Wolf wrote:
>> Currently, the WMI driver core knows how many instances of a given
>> WMI object exist, but WMI drivers cannot access this information.
>> At the same time, some current and upcoming WMI drivers want to
>> have access to this information. Add wmi_instance_count() and
>> wmidev_instance_count() to allow WMI drivers to get the number of
>> WMI object instances.
>>
>> Signed-off-by: Armin Wolf <W_Armin@gmx.de>
>> ---
>>   drivers/platform/x86/wmi.c | 40 ++++++++++++++++++++++++++++++++++++++
>>   include/linux/acpi.h       |  2 ++
>>   include/linux/wmi.h        |  2 ++
>>   3 files changed, 44 insertions(+)
>>
>> diff --git a/drivers/platform/x86/wmi.c b/drivers/platform/x86/wmi.c
>> index c226dd4163a1..7c1a904dec5f 100644
>> --- a/drivers/platform/x86/wmi.c
>> +++ b/drivers/platform/x86/wmi.c
>> @@ -263,6 +263,46 @@ int set_required_buffer_size(struct wmi_device *wdev, u64 length)
>>   }
>>   EXPORT_SYMBOL_GPL(set_required_buffer_size);
>>
>> +/**
>> + * wmi_instance_count - Get number of WMI object instances
>> + * @guid_string: 36 char string of the form fa50ff2b-f2e8-45de-83fa-65417f2f49ba
>> + * @instance_count: variable to hold the instance count
>> + *
>> + * Get the number of WMI object instances.
>> + *
>> + * Returns: acpi_status signaling success or error.
>> + */
>> +acpi_status wmi_instance_count(const char *guid_string, u8 *instance_count)
>> +{
>> +	struct wmi_block *wblock;
>> +	acpi_status status;
>> +
>> +	status = find_guid(guid_string, &wblock);
>> +	if (ACPI_FAILURE(status))
>> +		return status;
>> +
>> +	*instance_count = wmidev_instance_count(&wblock->dev);
>> +
>> +	return AE_OK;
>> +}
>> +EXPORT_SYMBOL_GPL(wmi_instance_count);
> I would prefer this to have a normal kernel function prototype
> which returns -errno rather then returning an acpi_status. E.g. :
>
> /**
>   * wmi_instance_count - Get number of WMI object instances
>   * @guid_string: 36 char string of the form fa50ff2b-f2e8-45de-83fa-65417f2f49ba
>   *
>   * Get the number of WMI object instances.
>   *
>   * Returns: The number of WMI object instances, 0 if the GUID is not found.
>   */
> int wmi_instance_count(const char *guid_string)
> {
> 	struct wmi_block *wblock;
> 	acpi_status status;
>
> 	status = find_guid(guid_string, &wblock);
> 	if (ACPI_FAILURE(status))
> 		return 0;
>
> 	return wmidev_instance_count(&wblock->dev);
> }
> EXPORT_SYMBOL_GPL(wmi_instance_count);
>
> This will also allow this to completely replace
> the get_instance_count() function in dell-wmi-sysman.
>
> Note I have just gone with always returning 0 here
> on error. I guess you could look at the status and
> return 0 for not-found and -errno for other errors
> but I don't think any callers will care for the difference,
> so just always returning 0 seems easier for callers to
> deal with.
>
> As always this is just a suggestion, let me know if
> you think this is a bad idea.
>
> Regards,
>
> Hans
>
I like this idea. Returning a negative errno on error would allow drivers to
distinguish between "WMI object not found" and "zero instances found", which
might be useful for some drivers.

Maybe a function for converting ACPI errors to POSIX errors already exists,
otherwise i will just write one myself.

Armin Wolf

>
>> +
>> +/**
>> + * wmidev_instance_count - Get number of WMI object instances
>> + * @wdev: A wmi bus device from a driver
>> + *
>> + * Get the number of WMI object instances.
>> + *
>> + * Returns: Number of WMI object instances.
>> + */
>> +u8 wmidev_instance_count(struct wmi_device *wdev)
>> +{
>> +	struct wmi_block *wblock = container_of(wdev, struct wmi_block, dev);
>> +
>> +	return wblock->gblock.instance_count;
>> +}
>> +EXPORT_SYMBOL_GPL(wmidev_instance_count);
>> +
>>   /**
>>    * wmi_evaluate_method - Evaluate a WMI method (deprecated)
>>    * @guid_string: 36 char string of the form fa50ff2b-f2e8-45de-83fa-65417f2f49ba
>> diff --git a/include/linux/acpi.h b/include/linux/acpi.h
>> index efff750f326d..ab2a4b23e7a3 100644
>> --- a/include/linux/acpi.h
>> +++ b/include/linux/acpi.h
>> @@ -412,6 +412,8 @@ extern bool acpi_is_pnp_device(struct acpi_device *);
>>
>>   typedef void (*wmi_notify_handler) (u32 value, void *context);
>>
>> +acpi_status wmi_instance_count(const char *guid, u8 *instance_count);
>> +
>>   extern acpi_status wmi_evaluate_method(const char *guid, u8 instance,
>>   					u32 method_id,
>>   					const struct acpi_buffer *in,
>> diff --git a/include/linux/wmi.h b/include/linux/wmi.h
>> index c1a3bd4e4838..763bd382cf2d 100644
>> --- a/include/linux/wmi.h
>> +++ b/include/linux/wmi.h
>> @@ -35,6 +35,8 @@ extern acpi_status wmidev_evaluate_method(struct wmi_device *wdev,
>>   extern union acpi_object *wmidev_block_query(struct wmi_device *wdev,
>>   					     u8 instance);
>>
>> +u8 wmidev_instance_count(struct wmi_device *wdev);
>> +
>>   extern int set_required_buffer_size(struct wmi_device *wdev, u64 length);
>>
>>   /**
>> --
>> 2.30.2
>>

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

* Re: [RFC v2 1/2] platform/x86: wmi: Allow retrieving the number of WMI object instances
  2023-04-27 16:26     ` Armin Wolf
@ 2023-04-29  9:27       ` Hans de Goede
  0 siblings, 0 replies; 8+ messages in thread
From: Hans de Goede @ 2023-04-29  9:27 UTC (permalink / raw)
  To: Armin Wolf, markgross
  Cc: Mario.Limonciello, prasanth.ksr, jorgealtxwork, james,
	Dell.Client.Kernel, platform-driver-x86, linux-kernel

Hi,

On 4/27/23 18:26, Armin Wolf wrote:
> Am 27.04.23 um 11:43 schrieb Hans de Goede:
> 
>> Hi Armin,
>>
>> Thank you for your work on this.
>>
>> On 4/26/23 23:28, Armin Wolf wrote:
>>> Currently, the WMI driver core knows how many instances of a given
>>> WMI object exist, but WMI drivers cannot access this information.
>>> At the same time, some current and upcoming WMI drivers want to
>>> have access to this information. Add wmi_instance_count() and
>>> wmidev_instance_count() to allow WMI drivers to get the number of
>>> WMI object instances.
>>>
>>> Signed-off-by: Armin Wolf <W_Armin@gmx.de>
>>> ---
>>>   drivers/platform/x86/wmi.c | 40 ++++++++++++++++++++++++++++++++++++++
>>>   include/linux/acpi.h       |  2 ++
>>>   include/linux/wmi.h        |  2 ++
>>>   3 files changed, 44 insertions(+)
>>>
>>> diff --git a/drivers/platform/x86/wmi.c b/drivers/platform/x86/wmi.c
>>> index c226dd4163a1..7c1a904dec5f 100644
>>> --- a/drivers/platform/x86/wmi.c
>>> +++ b/drivers/platform/x86/wmi.c
>>> @@ -263,6 +263,46 @@ int set_required_buffer_size(struct wmi_device *wdev, u64 length)
>>>   }
>>>   EXPORT_SYMBOL_GPL(set_required_buffer_size);
>>>
>>> +/**
>>> + * wmi_instance_count - Get number of WMI object instances
>>> + * @guid_string: 36 char string of the form fa50ff2b-f2e8-45de-83fa-65417f2f49ba
>>> + * @instance_count: variable to hold the instance count
>>> + *
>>> + * Get the number of WMI object instances.
>>> + *
>>> + * Returns: acpi_status signaling success or error.
>>> + */
>>> +acpi_status wmi_instance_count(const char *guid_string, u8 *instance_count)
>>> +{
>>> +    struct wmi_block *wblock;
>>> +    acpi_status status;
>>> +
>>> +    status = find_guid(guid_string, &wblock);
>>> +    if (ACPI_FAILURE(status))
>>> +        return status;
>>> +
>>> +    *instance_count = wmidev_instance_count(&wblock->dev);
>>> +
>>> +    return AE_OK;
>>> +}
>>> +EXPORT_SYMBOL_GPL(wmi_instance_count);
>> I would prefer this to have a normal kernel function prototype
>> which returns -errno rather then returning an acpi_status. E.g. :
>>
>> /**
>>   * wmi_instance_count - Get number of WMI object instances
>>   * @guid_string: 36 char string of the form fa50ff2b-f2e8-45de-83fa-65417f2f49ba
>>   *
>>   * Get the number of WMI object instances.
>>   *
>>   * Returns: The number of WMI object instances, 0 if the GUID is not found.
>>   */
>> int wmi_instance_count(const char *guid_string)
>> {
>>     struct wmi_block *wblock;
>>     acpi_status status;
>>
>>     status = find_guid(guid_string, &wblock);
>>     if (ACPI_FAILURE(status))
>>         return 0;
>>
>>     return wmidev_instance_count(&wblock->dev);
>> }
>> EXPORT_SYMBOL_GPL(wmi_instance_count);
>>
>> This will also allow this to completely replace
>> the get_instance_count() function in dell-wmi-sysman.
>>
>> Note I have just gone with always returning 0 here
>> on error. I guess you could look at the status and
>> return 0 for not-found and -errno for other errors
>> but I don't think any callers will care for the difference,
>> so just always returning 0 seems easier for callers to
>> deal with.
>>
>> As always this is just a suggestion, let me know if
>> you think this is a bad idea.
>>
>> Regards,
>>
>> Hans
>>
> I like this idea. Returning a negative errno on error would allow drivers to
> distinguish between "WMI object not found" and "zero instances found", which
> might be useful for some drivers.
> 
> Maybe a function for converting ACPI errors to POSIX errors already exists,
> otherwise i will just write one myself.

Ok, that sounds good to me. I'm looking forward to a non RFC submission
of these changes.

Regards,

Hans



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

end of thread, other threads:[~2023-04-29  9:28 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-04-26 21:28 [RFC v2 0/2] platform/x86: Allow retrieving the number of WMI object instances Armin Wolf
2023-04-26 21:28 ` [RFC v2 1/2] platform/x86: wmi: " Armin Wolf
2023-04-27  6:19   ` James Seo
2023-04-27  6:19     ` James Seo
2023-04-27  9:43   ` Hans de Goede
2023-04-27 16:26     ` Armin Wolf
2023-04-29  9:27       ` Hans de Goede
2023-04-26 21:28 ` [RFC v2 2/2] platform/x86: dell-sysman: Improve instance detection Armin Wolf

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.