[PATCH 6/7] winebus.sys: Merge begin_report_processing with start_device.
Rémi Bernon
rbernon at codeweavers.com
Tue Aug 17 03:19:15 CDT 2021
Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
dlls/winebus.sys/bus.h | 1 -
dlls/winebus.sys/bus_iohid.c | 27 ++++-------
dlls/winebus.sys/bus_sdl.c | 6 ---
dlls/winebus.sys/bus_udev.c | 94 ++++++++++++++++--------------------
dlls/winebus.sys/main.c | 17 -------
5 files changed, 51 insertions(+), 94 deletions(-)
diff --git a/dlls/winebus.sys/bus.h b/dlls/winebus.sys/bus.h
index d07b33e86b3..5f763acbf3e 100644
--- a/dlls/winebus.sys/bus.h
+++ b/dlls/winebus.sys/bus.h
@@ -42,7 +42,6 @@ typedef struct
NTSTATUS (*start_device)(DEVICE_OBJECT *device);
NTSTATUS (*get_reportdescriptor)(DEVICE_OBJECT *device, BYTE *buffer, DWORD length, DWORD *out_length);
NTSTATUS (*get_string)(DEVICE_OBJECT *device, DWORD index, WCHAR *buffer, DWORD length);
- NTSTATUS (*begin_report_processing)(DEVICE_OBJECT *device);
NTSTATUS (*set_output_report)(DEVICE_OBJECT *device, UCHAR id, BYTE *report, DWORD length, ULONG_PTR *written);
NTSTATUS (*get_feature_report)(DEVICE_OBJECT *device, UCHAR id, BYTE *report, DWORD length, ULONG_PTR *read);
NTSTATUS (*set_feature_report)(DEVICE_OBJECT *device, UCHAR id, BYTE *report, DWORD length, ULONG_PTR *written);
diff --git a/dlls/winebus.sys/bus_iohid.c b/dlls/winebus.sys/bus_iohid.c
index 9b9e93f5c49..394e3228838 100644
--- a/dlls/winebus.sys/bus_iohid.c
+++ b/dlls/winebus.sys/bus_iohid.c
@@ -150,6 +150,15 @@ static int compare_platform_device(DEVICE_OBJECT *device, void *platform_dev)
static NTSTATUS start_device(DEVICE_OBJECT *device)
{
+ DWORD length;
+ struct platform_private *private = impl_from_DEVICE_OBJECT(device);
+ CFNumberRef num;
+
+ num = IOHIDDeviceGetProperty(private->device, CFSTR(kIOHIDMaxInputReportSizeKey));
+ length = CFNumberToDWORD(num);
+ private->buffer = HeapAlloc(GetProcessHeap(), 0, length);
+
+ IOHIDDeviceRegisterInputReportCallback(private->device, private->buffer, length, handle_IOHIDDeviceIOHIDReportCallback, device);
return STATUS_SUCCESS;
}
@@ -204,23 +213,6 @@ static NTSTATUS get_string(DEVICE_OBJECT *device, DWORD index, WCHAR *buffer, DW
return STATUS_SUCCESS;
}
-static NTSTATUS begin_report_processing(DEVICE_OBJECT *device)
-{
- DWORD length;
- struct platform_private *private = impl_from_DEVICE_OBJECT(device);
- CFNumberRef num;
-
- if (private->buffer)
- return STATUS_SUCCESS;
-
- num = IOHIDDeviceGetProperty(private->device, CFSTR(kIOHIDMaxInputReportSizeKey));
- length = CFNumberToDWORD(num);
- private->buffer = HeapAlloc(GetProcessHeap(), 0, length);
-
- IOHIDDeviceRegisterInputReportCallback(private->device, private->buffer, length, handle_IOHIDDeviceIOHIDReportCallback, device);
- return STATUS_SUCCESS;
-}
-
static NTSTATUS set_output_report(DEVICE_OBJECT *device, UCHAR id, BYTE *report, DWORD length, ULONG_PTR *written)
{
IOReturn result;
@@ -282,7 +274,6 @@ static const platform_vtbl iohid_vtbl =
start_device,
get_reportdescriptor,
get_string,
- begin_report_processing,
set_output_report,
get_feature_report,
set_feature_report,
diff --git a/dlls/winebus.sys/bus_sdl.c b/dlls/winebus.sys/bus_sdl.c
index 21eac3c67f4..4770de02ffe 100644
--- a/dlls/winebus.sys/bus_sdl.c
+++ b/dlls/winebus.sys/bus_sdl.c
@@ -536,11 +536,6 @@ static NTSTATUS get_string(DEVICE_OBJECT *device, DWORD index, WCHAR *buffer, DW
return STATUS_SUCCESS;
}
-static NTSTATUS begin_report_processing(DEVICE_OBJECT *device)
-{
- return STATUS_SUCCESS;
-}
-
static NTSTATUS set_output_report(DEVICE_OBJECT *device, UCHAR id, BYTE *report, DWORD length, ULONG_PTR *written)
{
struct platform_private *ext = impl_from_DEVICE_OBJECT(device);
@@ -606,7 +601,6 @@ static const platform_vtbl sdl_vtbl =
start_device,
get_reportdescriptor,
get_string,
- begin_report_processing,
set_output_report,
get_feature_report,
set_feature_report,
diff --git a/dlls/winebus.sys/bus_udev.c b/dlls/winebus.sys/bus_udev.c
index 25c8b5f0b36..977e5f2972a 100644
--- a/dlls/winebus.sys/bus_udev.c
+++ b/dlls/winebus.sys/bus_udev.c
@@ -558,8 +558,27 @@ static int compare_platform_device(DEVICE_OBJECT *device, void *platform_dev)
return strcmp(udev_device_get_syspath(dev1), udev_device_get_syspath(dev2));
}
+static DWORD CALLBACK device_report_thread(void *args);
+
static NTSTATUS hidraw_start_device(DEVICE_OBJECT *device)
{
+ struct platform_private *private = impl_from_DEVICE_OBJECT(device);
+
+ if (pipe(private->control_pipe) != 0)
+ {
+ ERR("Control pipe creation failed\n");
+ return STATUS_UNSUCCESSFUL;
+ }
+
+ private->report_thread = CreateThread(NULL, 0, device_report_thread, device, 0, NULL);
+ if (!private->report_thread)
+ {
+ ERR("Unable to create device report thread\n");
+ close(private->control_pipe[0]);
+ close(private->control_pipe[1]);
+ return STATUS_UNSUCCESSFUL;
+ }
+
return STATUS_SUCCESS;
}
@@ -697,31 +716,6 @@ static DWORD CALLBACK device_report_thread(void *args)
return 0;
}
-static NTSTATUS begin_report_processing(DEVICE_OBJECT *device)
-{
- struct platform_private *private = impl_from_DEVICE_OBJECT(device);
-
- if (private->report_thread)
- return STATUS_SUCCESS;
-
- if (pipe(private->control_pipe) != 0)
- {
- ERR("Control pipe creation failed\n");
- return STATUS_UNSUCCESSFUL;
- }
-
- private->report_thread = CreateThread(NULL, 0, device_report_thread, device, 0, NULL);
- if (!private->report_thread)
- {
- ERR("Unable to create device report thread\n");
- close(private->control_pipe[0]);
- close(private->control_pipe[1]);
- return STATUS_UNSUCCESSFUL;
- }
- else
- return STATUS_SUCCESS;
-}
-
static NTSTATUS hidraw_set_output_report(DEVICE_OBJECT *device, UCHAR id, BYTE *report, DWORD length, ULONG_PTR *written)
{
struct platform_private* ext = impl_from_DEVICE_OBJECT(device);
@@ -826,7 +820,6 @@ static const platform_vtbl hidraw_vtbl =
hidraw_start_device,
hidraw_get_reportdescriptor,
hidraw_get_string,
- begin_report_processing,
hidraw_set_output_report,
hidraw_get_feature_report,
hidraw_set_feature_report,
@@ -860,10 +853,32 @@ static void lnxev_free_device(DEVICE_OBJECT *device)
udev_device_unref(ext->base.udev_device);
}
+static DWORD CALLBACK lnxev_device_report_thread(void *args);
+
static NTSTATUS lnxev_start_device(DEVICE_OBJECT *device)
{
struct wine_input_private *ext = input_impl_from_DEVICE_OBJECT(device);
- return build_report_descriptor(ext, ext->base.udev_device);
+ NTSTATUS status;
+
+ if ((status = build_report_descriptor(ext, ext->base.udev_device)))
+ return status;
+
+ if (pipe(ext->base.control_pipe) != 0)
+ {
+ ERR("Control pipe creation failed\n");
+ return STATUS_UNSUCCESSFUL;
+ }
+
+ ext->base.report_thread = CreateThread(NULL, 0, lnxev_device_report_thread, device, 0, NULL);
+ if (!ext->base.report_thread)
+ {
+ ERR("Unable to create device report thread\n");
+ close(ext->base.control_pipe[0]);
+ close(ext->base.control_pipe[1]);
+ return STATUS_UNSUCCESSFUL;
+ }
+
+ return STATUS_SUCCESS;
}
static NTSTATUS lnxev_get_reportdescriptor(DEVICE_OBJECT *device, BYTE *buffer, DWORD length, DWORD *out_length)
@@ -934,30 +949,6 @@ static DWORD CALLBACK lnxev_device_report_thread(void *args)
return 0;
}
-static NTSTATUS lnxev_begin_report_processing(DEVICE_OBJECT *device)
-{
- struct wine_input_private *private = input_impl_from_DEVICE_OBJECT(device);
-
- if (private->base.report_thread)
- return STATUS_SUCCESS;
-
- if (pipe(private->base.control_pipe) != 0)
- {
- ERR("Control pipe creation failed\n");
- return STATUS_UNSUCCESSFUL;
- }
-
- private->base.report_thread = CreateThread(NULL, 0, lnxev_device_report_thread, device, 0, NULL);
- if (!private->base.report_thread)
- {
- ERR("Unable to create device report thread\n");
- close(private->base.control_pipe[0]);
- close(private->base.control_pipe[1]);
- return STATUS_UNSUCCESSFUL;
- }
- return STATUS_SUCCESS;
-}
-
static NTSTATUS lnxev_set_output_report(DEVICE_OBJECT *device, UCHAR id, BYTE *report, DWORD length, ULONG_PTR *written)
{
*written = 0;
@@ -982,7 +973,6 @@ static const platform_vtbl lnxev_vtbl = {
lnxev_start_device,
lnxev_get_reportdescriptor,
lnxev_get_string,
- lnxev_begin_report_processing,
lnxev_set_output_report,
lnxev_get_feature_report,
lnxev_set_feature_report,
diff --git a/dlls/winebus.sys/main.c b/dlls/winebus.sys/main.c
index 5db80784a5b..c5408f29beb 100644
--- a/dlls/winebus.sys/main.c
+++ b/dlls/winebus.sys/main.c
@@ -504,11 +504,6 @@ static NTSTATUS mouse_get_string(DEVICE_OBJECT *device, DWORD index, WCHAR *buff
return STATUS_SUCCESS;
}
-static NTSTATUS mouse_begin_report_processing(DEVICE_OBJECT *device)
-{
- return STATUS_SUCCESS;
-}
-
static NTSTATUS mouse_set_output_report(DEVICE_OBJECT *device, UCHAR id, BYTE *report, DWORD length, ULONG_PTR *ret_length)
{
FIXME("id %u, stub!\n", id);
@@ -533,7 +528,6 @@ static const platform_vtbl mouse_vtbl =
.start_device = mouse_start_device,
.get_reportdescriptor = mouse_get_reportdescriptor,
.get_string = mouse_get_string,
- .begin_report_processing = mouse_begin_report_processing,
.set_output_report = mouse_set_output_report,
.get_feature_report = mouse_get_feature_report,
.set_feature_report = mouse_set_feature_report,
@@ -584,11 +578,6 @@ static NTSTATUS keyboard_get_string(DEVICE_OBJECT *device, DWORD index, WCHAR *b
return STATUS_SUCCESS;
}
-static NTSTATUS keyboard_begin_report_processing(DEVICE_OBJECT *device)
-{
- return STATUS_SUCCESS;
-}
-
static NTSTATUS keyboard_set_output_report(DEVICE_OBJECT *device, UCHAR id, BYTE *report, DWORD length, ULONG_PTR *ret_length)
{
FIXME("id %u, stub!\n", id);
@@ -613,7 +602,6 @@ static const platform_vtbl keyboard_vtbl =
.start_device = keyboard_start_device,
.get_reportdescriptor = keyboard_get_reportdescriptor,
.get_string = keyboard_get_string,
- .begin_report_processing = keyboard_begin_report_processing,
.set_output_report = keyboard_set_output_report,
.get_feature_report = keyboard_get_feature_report,
.set_feature_report = keyboard_set_feature_report,
@@ -923,9 +911,6 @@ static NTSTATUS WINAPI hid_internal_dispatch(DEVICE_OBJECT *device, IRP *irp)
{
HID_XFER_PACKET *packet = (HID_XFER_PACKET*)(irp->UserBuffer);
TRACE_(hid_report)("IOCTL_HID_GET_INPUT_REPORT\n");
- irp->IoStatus.Status = ext->vtbl->begin_report_processing(device);
- if (irp->IoStatus.Status != STATUS_SUCCESS) break;
-
irp->IoStatus.Status = deliver_last_report(ext,
packet->reportBufferLen, packet->reportBuffer,
&irp->IoStatus.Information);
@@ -937,8 +922,6 @@ static NTSTATUS WINAPI hid_internal_dispatch(DEVICE_OBJECT *device, IRP *irp)
case IOCTL_HID_READ_REPORT:
{
TRACE_(hid_report)("IOCTL_HID_READ_REPORT\n");
- irp->IoStatus.Status = ext->vtbl->begin_report_processing(device);
- if (irp->IoStatus.Status != STATUS_SUCCESS) break;
if (!ext->last_report_read)
{
irp->IoStatus.Status = deliver_last_report(ext,
--
2.32.0
More information about the wine-devel
mailing list