[PATCH 2/2] winebus.sys: Use UINT instead of enum and UINT64 instead of unix_device pointer.

Rémi Bernon wine at gitlab.winehq.org
Mon Jun 27 08:14:11 CDT 2022


From: Rémi Bernon <rbernon at codeweavers.com>

Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
 dlls/winebus.sys/main.c         | 31 +++++++++++++++++--------------
 dlls/winebus.sys/unix_private.h |  2 ++
 dlls/winebus.sys/unixlib.c      | 27 +++++++++++++++------------
 dlls/winebus.sys/unixlib.h      | 22 +++++++++++++++-------
 4 files changed, 49 insertions(+), 33 deletions(-)

diff --git a/dlls/winebus.sys/main.c b/dlls/winebus.sys/main.c
index 35db8a5fb9a..1037295c955 100644
--- a/dlls/winebus.sys/main.c
+++ b/dlls/winebus.sys/main.c
@@ -86,7 +86,7 @@ struct device_extension
     struct list reports;
     IRP *pending_read;
 
-    struct unix_device *unix_device;
+    UINT64 unix_device;
 };
 
 static CRITICAL_SECTION device_list_cs;
@@ -111,13 +111,15 @@ static NTSTATUS winebus_call(unsigned int code, void *args)
 static void unix_device_remove(DEVICE_OBJECT *device)
 {
     struct device_extension *ext = (struct device_extension *)device->DeviceExtension;
-    winebus_call(device_remove, ext->unix_device);
+    struct device_remove_params params = {.device = ext->unix_device};
+    winebus_call(device_remove, &params);
 }
 
 static NTSTATUS unix_device_start(DEVICE_OBJECT *device)
 {
     struct device_extension *ext = (struct device_extension *)device->DeviceExtension;
-    return winebus_call(device_start, ext->unix_device);
+    struct device_start_params params = {.device = ext->unix_device};
+    return winebus_call(device_start, &params);
 }
 
 static NTSTATUS unix_device_get_report_descriptor(DEVICE_OBJECT *device, BYTE *buffer, UINT length, UINT *out_length)
@@ -125,7 +127,7 @@ static NTSTATUS unix_device_get_report_descriptor(DEVICE_OBJECT *device, BYTE *b
     struct device_extension *ext = (struct device_extension *)device->DeviceExtension;
     struct device_descriptor_params params =
     {
-        .iface = ext->unix_device,
+        .device = ext->unix_device,
         .buffer = buffer,
         .length = length,
         .out_length = out_length
@@ -138,7 +140,7 @@ static void unix_device_set_output_report(DEVICE_OBJECT *device, HID_XFER_PACKET
     struct device_extension *ext = (struct device_extension *)device->DeviceExtension;
     struct device_report_params params =
     {
-        .iface = ext->unix_device,
+        .device = ext->unix_device,
         .packet = packet,
         .io = io,
     };
@@ -150,7 +152,7 @@ static void unix_device_get_feature_report(DEVICE_OBJECT *device, HID_XFER_PACKE
     struct device_extension *ext = (struct device_extension *)device->DeviceExtension;
     struct device_report_params params =
     {
-        .iface = ext->unix_device,
+        .device = ext->unix_device,
         .packet = packet,
         .io = io,
     };
@@ -162,7 +164,7 @@ static void unix_device_set_feature_report(DEVICE_OBJECT *device, HID_XFER_PACKE
     struct device_extension *ext = (struct device_extension *)device->DeviceExtension;
     struct device_report_params params =
     {
-        .iface = ext->unix_device,
+        .device = ext->unix_device,
         .packet = packet,
         .io = io,
     };
@@ -284,7 +286,7 @@ static void remove_pending_irps(DEVICE_OBJECT *device)
     }
 }
 
-static DEVICE_OBJECT *bus_create_hid_device(struct device_desc *desc, struct unix_device *unix_device)
+static DEVICE_OBJECT *bus_create_hid_device(struct device_desc *desc, UINT64 unix_device)
 {
     struct device_extension *ext;
     DEVICE_OBJECT *device;
@@ -292,7 +294,7 @@ static DEVICE_OBJECT *bus_create_hid_device(struct device_desc *desc, struct uni
     WCHAR dev_name[256];
     NTSTATUS status;
 
-    TRACE("desc %s, unix_device %p\n", debugstr_device_desc(desc), unix_device);
+    TRACE("desc %s, unix_device %#I64x\n", debugstr_device_desc(desc), unix_device);
 
     swprintf(dev_name, ARRAY_SIZE(dev_name), L"\\Device\\WINEBUS#%p", unix_device);
     RtlInitUnicodeString(&nameW, dev_name);
@@ -323,7 +325,7 @@ static DEVICE_OBJECT *bus_create_hid_device(struct device_desc *desc, struct uni
     return device;
 }
 
-static DEVICE_OBJECT *bus_find_unix_device(struct unix_device *unix_device)
+static DEVICE_OBJECT *bus_find_unix_device(UINT64 unix_device)
 {
     struct device_extension *ext;
 
@@ -568,7 +570,7 @@ static DWORD CALLBACK bus_main_thread(void *args)
         case BUS_EVENT_TYPE_DEVICE_REMOVED:
             RtlEnterCriticalSection(&device_list_cs);
             device = bus_find_unix_device(event->device);
-            if (!device) WARN("could not find device for %s bus device %p\n", debugstr_w(bus.name), event->device);
+            if (!device) WARN("could not find device for %s bus device %#I64x\n", debugstr_w(bus.name), event->device);
             else bus_unlink_hid_device(device);
             RtlLeaveCriticalSection(&device_list_cs);
             IoInvalidateDeviceRelations(bus_pdo, BusRelations);
@@ -578,14 +580,15 @@ static DWORD CALLBACK bus_main_thread(void *args)
             if (device) IoInvalidateDeviceRelations(bus_pdo, BusRelations);
             else
             {
-                WARN("failed to create device for %s bus device %p\n", debugstr_w(bus.name), event->device);
-                winebus_call(device_remove, event->device);
+                struct device_remove_params params = {.device = event->device};
+                WARN("failed to create device for %s bus device %#I64x\n", debugstr_w(bus.name), event->device);
+                winebus_call(device_remove, &params);
             }
             break;
         case BUS_EVENT_TYPE_INPUT_REPORT:
             RtlEnterCriticalSection(&device_list_cs);
             device = bus_find_unix_device(event->device);
-            if (!device) WARN("could not find device for %s bus device %p\n", debugstr_w(bus.name), event->device);
+            if (!device) WARN("could not find device for %s bus device %#I64x\n", debugstr_w(bus.name), event->device);
             else process_hid_report(device, event->input_report.buffer, event->input_report.length);
             RtlLeaveCriticalSection(&device_list_cs);
             break;
diff --git a/dlls/winebus.sys/unix_private.h b/dlls/winebus.sys/unix_private.h
index 85eab6ccf5d..3001c32e89e 100644
--- a/dlls/winebus.sys/unix_private.h
+++ b/dlls/winebus.sys/unix_private.h
@@ -91,6 +91,8 @@ struct effect_params
     };
 };
 
+struct unix_device;
+
 struct raw_device_vtbl
 {
     void (*destroy)(struct unix_device *iface);
diff --git a/dlls/winebus.sys/unixlib.c b/dlls/winebus.sys/unixlib.c
index 8fd43d3dff5..75d33399738 100644
--- a/dlls/winebus.sys/unixlib.c
+++ b/dlls/winebus.sys/unixlib.c
@@ -163,7 +163,7 @@ static NTSTATUS mouse_device_create(void *args)
 {
     struct device_create_params *params = args;
     params->desc = mouse_device_desc;
-    params->device = hid_device_create(&mouse_vtbl, sizeof(struct mouse_device));
+    params->device = (UINT_PTR)hid_device_create(&mouse_vtbl, sizeof(struct mouse_device));
     return STATUS_SUCCESS;
 }
 
@@ -254,7 +254,7 @@ static NTSTATUS keyboard_device_create(void *args)
 {
     struct device_create_params *params = args;
     params->desc = keyboard_device_desc;
-    params->device = hid_device_create(&keyboard_vtbl, sizeof(struct keyboard_device));
+    params->device = (UINT_PTR)hid_device_create(&keyboard_vtbl, sizeof(struct keyboard_device));
     return STATUS_SUCCESS;
 }
 
@@ -285,7 +285,8 @@ static ULONG unix_device_incref(struct unix_device *iface)
 
 static NTSTATUS unix_device_remove(void *args)
 {
-    struct unix_device *iface = args;
+    struct device_remove_params *params = args;
+    struct unix_device *iface = (struct unix_device *)(UINT_PTR)params->device;
     iface->vtbl->stop(iface);
     unix_device_decref(iface);
     return STATUS_SUCCESS;
@@ -293,21 +294,22 @@ static NTSTATUS unix_device_remove(void *args)
 
 static NTSTATUS unix_device_start(void *args)
 {
-    struct unix_device *iface = args;
+    struct device_start_params *params = args;
+    struct unix_device *iface = (struct unix_device *)(UINT_PTR)params->device;
     return iface->vtbl->start(iface);
 }
 
 static NTSTATUS unix_device_get_report_descriptor(void *args)
 {
     struct device_descriptor_params *params = args;
-    struct unix_device *iface = params->iface;
+    struct unix_device *iface = (struct unix_device *)(UINT_PTR)params->device;
     return iface->vtbl->get_report_descriptor(iface, params->buffer, params->length, params->out_length);
 }
 
 static NTSTATUS unix_device_set_output_report(void *args)
 {
     struct device_report_params *params = args;
-    struct unix_device *iface = params->iface;
+    struct unix_device *iface = (struct unix_device *)(UINT_PTR)params->device;
     iface->vtbl->set_output_report(iface, params->packet, params->io);
     return STATUS_SUCCESS;
 }
@@ -315,7 +317,7 @@ static NTSTATUS unix_device_set_output_report(void *args)
 static NTSTATUS unix_device_get_feature_report(void *args)
 {
     struct device_report_params *params = args;
-    struct unix_device *iface = params->iface;
+    struct unix_device *iface = (struct unix_device *)(UINT_PTR)params->device;
     iface->vtbl->get_feature_report(iface, params->packet, params->io);
     return STATUS_SUCCESS;
 }
@@ -323,7 +325,7 @@ static NTSTATUS unix_device_get_feature_report(void *args)
 static NTSTATUS unix_device_set_feature_report(void *args)
 {
     struct device_report_params *params = args;
-    struct unix_device *iface = params->iface;
+    struct unix_device *iface = (struct unix_device *)(UINT_PTR)params->device;
     iface->vtbl->set_feature_report(iface, params->packet, params->io);
     return STATUS_SUCCESS;
 }
@@ -351,8 +353,9 @@ const unixlib_entry_t __wine_unix_call_funcs[] =
 
 void bus_event_cleanup(struct bus_event *event)
 {
+    struct unix_device *iface = (struct unix_device *)(UINT_PTR)event->device;
     if (event->type == BUS_EVENT_TYPE_NONE) return;
-    unix_device_decref(event->device);
+    unix_device_decref(iface);
 }
 
 struct bus_event_entry
@@ -386,7 +389,7 @@ BOOL bus_event_queue_device_removed(struct list *queue, struct unix_device *devi
     }
 
     entry->event.type = BUS_EVENT_TYPE_DEVICE_REMOVED;
-    entry->event.device = device;
+    entry->event.device = (UINT_PTR)device;
     list_add_tail(queue, &entry->entry);
 
     return TRUE;
@@ -405,7 +408,7 @@ BOOL bus_event_queue_device_created(struct list *queue, struct unix_device *devi
     }
 
     entry->event.type = BUS_EVENT_TYPE_DEVICE_CREATED;
-    entry->event.device = device;
+    entry->event.device = (UINT_PTR)device;
     entry->event.device_created.desc = *desc;
     list_add_tail(queue, &entry->entry);
 
@@ -425,7 +428,7 @@ BOOL bus_event_queue_input_report(struct list *queue, struct unix_device *device
     }
 
     entry->event.type = BUS_EVENT_TYPE_INPUT_REPORT;
-    entry->event.device = device;
+    entry->event.device = (UINT_PTR)device;
     entry->event.input_report.length = length;
     memcpy(entry->event.input_report.buffer, report, length);
     list_add_tail(queue, &entry->entry);
diff --git a/dlls/winebus.sys/unixlib.h b/dlls/winebus.sys/unixlib.h
index 532cb92a2f4..68d59ac0333 100644
--- a/dlls/winebus.sys/unixlib.h
+++ b/dlls/winebus.sys/unixlib.h
@@ -64,8 +64,6 @@ struct iohid_bus_options
 {
 };
 
-struct unix_device;
-
 enum bus_event_type
 {
     BUS_EVENT_TYPE_NONE,
@@ -76,8 +74,8 @@ enum bus_event_type
 
 struct bus_event
 {
-    enum bus_event_type type;
-    struct unix_device *device;
+    UINT type;
+    UINT64 device;
     union
     {
         struct
@@ -96,12 +94,22 @@ struct bus_event
 struct device_create_params
 {
     struct device_desc desc;
-    struct unix_device *device;
+    UINT64 device;
+};
+
+struct device_remove_params
+{
+    UINT64 device;
+};
+
+struct device_start_params
+{
+    UINT64 device;
 };
 
 struct device_descriptor_params
 {
-    struct unix_device *iface;
+    UINT64 device;
     BYTE *buffer;
     UINT length;
     UINT *out_length;
@@ -109,7 +117,7 @@ struct device_descriptor_params
 
 struct device_report_params
 {
-    struct unix_device *iface;
+    UINT64 device;
     HID_XFER_PACKET *packet;
     IO_STATUS_BLOCK *io;
 };
-- 
GitLab

https://gitlab.winehq.org/wine/wine/-/merge_requests/323



More information about the wine-devel mailing list