|
@@ -21,14 +21,26 @@
|
|
#include <linux/wmi.h>
|
|
#include <linux/wmi.h>
|
|
#include "dell-wmi-descriptor.h"
|
|
#include "dell-wmi-descriptor.h"
|
|
|
|
|
|
|
|
+#define DELL_WMI_DESCRIPTOR_GUID "8D9DDCBC-A997-11DA-B012-B622A1EF5492"
|
|
|
|
+
|
|
struct descriptor_priv {
|
|
struct descriptor_priv {
|
|
struct list_head list;
|
|
struct list_head list;
|
|
u32 interface_version;
|
|
u32 interface_version;
|
|
u32 size;
|
|
u32 size;
|
|
};
|
|
};
|
|
|
|
+static int descriptor_valid = -EPROBE_DEFER;
|
|
static LIST_HEAD(wmi_list);
|
|
static LIST_HEAD(wmi_list);
|
|
static DEFINE_MUTEX(list_mutex);
|
|
static DEFINE_MUTEX(list_mutex);
|
|
|
|
|
|
|
|
+int dell_wmi_get_descriptor_valid(void)
|
|
|
|
+{
|
|
|
|
+ if (!wmi_has_guid(DELL_WMI_DESCRIPTOR_GUID))
|
|
|
|
+ return -ENODEV;
|
|
|
|
+
|
|
|
|
+ return descriptor_valid;
|
|
|
|
+}
|
|
|
|
+EXPORT_SYMBOL_GPL(dell_wmi_get_descriptor_valid);
|
|
|
|
+
|
|
bool dell_wmi_get_interface_version(u32 *version)
|
|
bool dell_wmi_get_interface_version(u32 *version)
|
|
{
|
|
{
|
|
struct descriptor_priv *priv;
|
|
struct descriptor_priv *priv;
|
|
@@ -91,6 +103,7 @@ static int dell_wmi_descriptor_probe(struct wmi_device *wdev)
|
|
if (obj->type != ACPI_TYPE_BUFFER) {
|
|
if (obj->type != ACPI_TYPE_BUFFER) {
|
|
dev_err(&wdev->dev, "Dell descriptor has wrong type\n");
|
|
dev_err(&wdev->dev, "Dell descriptor has wrong type\n");
|
|
ret = -EINVAL;
|
|
ret = -EINVAL;
|
|
|
|
+ descriptor_valid = ret;
|
|
goto out;
|
|
goto out;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -102,6 +115,7 @@ static int dell_wmi_descriptor_probe(struct wmi_device *wdev)
|
|
"Dell descriptor buffer has unexpected length (%d)\n",
|
|
"Dell descriptor buffer has unexpected length (%d)\n",
|
|
obj->buffer.length);
|
|
obj->buffer.length);
|
|
ret = -EINVAL;
|
|
ret = -EINVAL;
|
|
|
|
+ descriptor_valid = ret;
|
|
goto out;
|
|
goto out;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -111,8 +125,10 @@ static int dell_wmi_descriptor_probe(struct wmi_device *wdev)
|
|
dev_err(&wdev->dev, "Dell descriptor buffer has invalid signature (%8ph)\n",
|
|
dev_err(&wdev->dev, "Dell descriptor buffer has invalid signature (%8ph)\n",
|
|
buffer);
|
|
buffer);
|
|
ret = -EINVAL;
|
|
ret = -EINVAL;
|
|
|
|
+ descriptor_valid = ret;
|
|
goto out;
|
|
goto out;
|
|
}
|
|
}
|
|
|
|
+ descriptor_valid = 0;
|
|
|
|
|
|
if (buffer[2] != 0 && buffer[2] != 1)
|
|
if (buffer[2] != 0 && buffer[2] != 1)
|
|
dev_warn(&wdev->dev, "Dell descriptor buffer has unknown version (%lu)\n",
|
|
dev_warn(&wdev->dev, "Dell descriptor buffer has unknown version (%lu)\n",
|