Commit 077d64bd authored by Rémi Bernon's avatar Rémi Bernon Committed by Alexandre Julliard

winebus.sys: Use UINT instead of enum and UINT64 instead of unix_device pointer.

parent 3b1354ff
...@@ -86,7 +86,7 @@ struct device_extension ...@@ -86,7 +86,7 @@ struct device_extension
struct list reports; struct list reports;
IRP *pending_read; IRP *pending_read;
struct unix_device *unix_device; UINT64 unix_device;
}; };
static CRITICAL_SECTION device_list_cs; static CRITICAL_SECTION device_list_cs;
...@@ -111,13 +111,15 @@ static NTSTATUS winebus_call(unsigned int code, void *args) ...@@ -111,13 +111,15 @@ static NTSTATUS winebus_call(unsigned int code, void *args)
static void unix_device_remove(DEVICE_OBJECT *device) static void unix_device_remove(DEVICE_OBJECT *device)
{ {
struct device_extension *ext = (struct device_extension *)device->DeviceExtension; 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) static NTSTATUS unix_device_start(DEVICE_OBJECT *device)
{ {
struct device_extension *ext = (struct device_extension *)device->DeviceExtension; 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) 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 ...@@ -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_extension *ext = (struct device_extension *)device->DeviceExtension;
struct device_descriptor_params params = struct device_descriptor_params params =
{ {
.iface = ext->unix_device, .device = ext->unix_device,
.buffer = buffer, .buffer = buffer,
.length = length, .length = length,
.out_length = out_length .out_length = out_length
...@@ -138,7 +140,7 @@ static void unix_device_set_output_report(DEVICE_OBJECT *device, HID_XFER_PACKET ...@@ -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_extension *ext = (struct device_extension *)device->DeviceExtension;
struct device_report_params params = struct device_report_params params =
{ {
.iface = ext->unix_device, .device = ext->unix_device,
.packet = packet, .packet = packet,
.io = io, .io = io,
}; };
...@@ -150,7 +152,7 @@ static void unix_device_get_feature_report(DEVICE_OBJECT *device, HID_XFER_PACKE ...@@ -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_extension *ext = (struct device_extension *)device->DeviceExtension;
struct device_report_params params = struct device_report_params params =
{ {
.iface = ext->unix_device, .device = ext->unix_device,
.packet = packet, .packet = packet,
.io = io, .io = io,
}; };
...@@ -162,7 +164,7 @@ static void unix_device_set_feature_report(DEVICE_OBJECT *device, HID_XFER_PACKE ...@@ -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_extension *ext = (struct device_extension *)device->DeviceExtension;
struct device_report_params params = struct device_report_params params =
{ {
.iface = ext->unix_device, .device = ext->unix_device,
.packet = packet, .packet = packet,
.io = io, .io = io,
}; };
...@@ -284,7 +286,7 @@ static void remove_pending_irps(DEVICE_OBJECT *device) ...@@ -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; struct device_extension *ext;
DEVICE_OBJECT *device; DEVICE_OBJECT *device;
...@@ -292,7 +294,7 @@ static DEVICE_OBJECT *bus_create_hid_device(struct device_desc *desc, struct uni ...@@ -292,7 +294,7 @@ static DEVICE_OBJECT *bus_create_hid_device(struct device_desc *desc, struct uni
WCHAR dev_name[256]; WCHAR dev_name[256];
NTSTATUS status; 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); swprintf(dev_name, ARRAY_SIZE(dev_name), L"\\Device\\WINEBUS#%p", unix_device);
RtlInitUnicodeString(&nameW, dev_name); RtlInitUnicodeString(&nameW, dev_name);
...@@ -323,7 +325,7 @@ static DEVICE_OBJECT *bus_create_hid_device(struct device_desc *desc, struct uni ...@@ -323,7 +325,7 @@ static DEVICE_OBJECT *bus_create_hid_device(struct device_desc *desc, struct uni
return device; 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; struct device_extension *ext;
...@@ -568,7 +570,7 @@ static DWORD CALLBACK bus_main_thread(void *args) ...@@ -568,7 +570,7 @@ static DWORD CALLBACK bus_main_thread(void *args)
case BUS_EVENT_TYPE_DEVICE_REMOVED: case BUS_EVENT_TYPE_DEVICE_REMOVED:
RtlEnterCriticalSection(&device_list_cs); RtlEnterCriticalSection(&device_list_cs);
device = bus_find_unix_device(event->device); 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); else bus_unlink_hid_device(device);
RtlLeaveCriticalSection(&device_list_cs); RtlLeaveCriticalSection(&device_list_cs);
IoInvalidateDeviceRelations(bus_pdo, BusRelations); IoInvalidateDeviceRelations(bus_pdo, BusRelations);
...@@ -578,14 +580,15 @@ static DWORD CALLBACK bus_main_thread(void *args) ...@@ -578,14 +580,15 @@ static DWORD CALLBACK bus_main_thread(void *args)
if (device) IoInvalidateDeviceRelations(bus_pdo, BusRelations); if (device) IoInvalidateDeviceRelations(bus_pdo, BusRelations);
else else
{ {
WARN("failed to create device for %s bus device %p\n", debugstr_w(bus.name), event->device); struct device_remove_params params = {.device = event->device};
winebus_call(device_remove, 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; break;
case BUS_EVENT_TYPE_INPUT_REPORT: case BUS_EVENT_TYPE_INPUT_REPORT:
RtlEnterCriticalSection(&device_list_cs); RtlEnterCriticalSection(&device_list_cs);
device = bus_find_unix_device(event->device); 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); else process_hid_report(device, event->input_report.buffer, event->input_report.length);
RtlLeaveCriticalSection(&device_list_cs); RtlLeaveCriticalSection(&device_list_cs);
break; break;
......
...@@ -91,6 +91,8 @@ struct effect_params ...@@ -91,6 +91,8 @@ struct effect_params
}; };
}; };
struct unix_device;
struct raw_device_vtbl struct raw_device_vtbl
{ {
void (*destroy)(struct unix_device *iface); void (*destroy)(struct unix_device *iface);
......
...@@ -163,7 +163,7 @@ static NTSTATUS mouse_device_create(void *args) ...@@ -163,7 +163,7 @@ static NTSTATUS mouse_device_create(void *args)
{ {
struct device_create_params *params = args; struct device_create_params *params = args;
params->desc = mouse_device_desc; 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; return STATUS_SUCCESS;
} }
...@@ -254,7 +254,7 @@ static NTSTATUS keyboard_device_create(void *args) ...@@ -254,7 +254,7 @@ static NTSTATUS keyboard_device_create(void *args)
{ {
struct device_create_params *params = args; struct device_create_params *params = args;
params->desc = keyboard_device_desc; 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; return STATUS_SUCCESS;
} }
...@@ -285,7 +285,8 @@ static ULONG unix_device_incref(struct unix_device *iface) ...@@ -285,7 +285,8 @@ static ULONG unix_device_incref(struct unix_device *iface)
static NTSTATUS unix_device_remove(void *args) 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); iface->vtbl->stop(iface);
unix_device_decref(iface); unix_device_decref(iface);
return STATUS_SUCCESS; return STATUS_SUCCESS;
...@@ -293,21 +294,22 @@ static NTSTATUS unix_device_remove(void *args) ...@@ -293,21 +294,22 @@ static NTSTATUS unix_device_remove(void *args)
static NTSTATUS unix_device_start(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); return iface->vtbl->start(iface);
} }
static NTSTATUS unix_device_get_report_descriptor(void *args) static NTSTATUS unix_device_get_report_descriptor(void *args)
{ {
struct device_descriptor_params *params = 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); return iface->vtbl->get_report_descriptor(iface, params->buffer, params->length, params->out_length);
} }
static NTSTATUS unix_device_set_output_report(void *args) static NTSTATUS unix_device_set_output_report(void *args)
{ {
struct device_report_params *params = 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); iface->vtbl->set_output_report(iface, params->packet, params->io);
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }
...@@ -315,7 +317,7 @@ static NTSTATUS unix_device_set_output_report(void *args) ...@@ -315,7 +317,7 @@ static NTSTATUS unix_device_set_output_report(void *args)
static NTSTATUS unix_device_get_feature_report(void *args) static NTSTATUS unix_device_get_feature_report(void *args)
{ {
struct device_report_params *params = 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); iface->vtbl->get_feature_report(iface, params->packet, params->io);
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }
...@@ -323,7 +325,7 @@ static NTSTATUS unix_device_get_feature_report(void *args) ...@@ -323,7 +325,7 @@ static NTSTATUS unix_device_get_feature_report(void *args)
static NTSTATUS unix_device_set_feature_report(void *args) static NTSTATUS unix_device_set_feature_report(void *args)
{ {
struct device_report_params *params = 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); iface->vtbl->set_feature_report(iface, params->packet, params->io);
return STATUS_SUCCESS; return STATUS_SUCCESS;
} }
...@@ -351,8 +353,9 @@ const unixlib_entry_t __wine_unix_call_funcs[] = ...@@ -351,8 +353,9 @@ const unixlib_entry_t __wine_unix_call_funcs[] =
void bus_event_cleanup(struct bus_event *event) 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; if (event->type == BUS_EVENT_TYPE_NONE) return;
unix_device_decref(event->device); unix_device_decref(iface);
} }
struct bus_event_entry struct bus_event_entry
...@@ -386,7 +389,7 @@ BOOL bus_event_queue_device_removed(struct list *queue, struct unix_device *devi ...@@ -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.type = BUS_EVENT_TYPE_DEVICE_REMOVED;
entry->event.device = device; entry->event.device = (UINT_PTR)device;
list_add_tail(queue, &entry->entry); list_add_tail(queue, &entry->entry);
return TRUE; return TRUE;
...@@ -405,7 +408,7 @@ BOOL bus_event_queue_device_created(struct list *queue, struct unix_device *devi ...@@ -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.type = BUS_EVENT_TYPE_DEVICE_CREATED;
entry->event.device = device; entry->event.device = (UINT_PTR)device;
entry->event.device_created.desc = *desc; entry->event.device_created.desc = *desc;
list_add_tail(queue, &entry->entry); list_add_tail(queue, &entry->entry);
...@@ -425,7 +428,7 @@ BOOL bus_event_queue_input_report(struct list *queue, struct unix_device *device ...@@ -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.type = BUS_EVENT_TYPE_INPUT_REPORT;
entry->event.device = device; entry->event.device = (UINT_PTR)device;
entry->event.input_report.length = length; entry->event.input_report.length = length;
memcpy(entry->event.input_report.buffer, report, length); memcpy(entry->event.input_report.buffer, report, length);
list_add_tail(queue, &entry->entry); list_add_tail(queue, &entry->entry);
......
...@@ -64,8 +64,6 @@ struct iohid_bus_options ...@@ -64,8 +64,6 @@ struct iohid_bus_options
{ {
}; };
struct unix_device;
enum bus_event_type enum bus_event_type
{ {
BUS_EVENT_TYPE_NONE, BUS_EVENT_TYPE_NONE,
...@@ -76,8 +74,8 @@ enum bus_event_type ...@@ -76,8 +74,8 @@ enum bus_event_type
struct bus_event struct bus_event
{ {
enum bus_event_type type; UINT type;
struct unix_device *device; UINT64 device;
union union
{ {
struct struct
...@@ -96,12 +94,22 @@ struct bus_event ...@@ -96,12 +94,22 @@ struct bus_event
struct device_create_params struct device_create_params
{ {
struct device_desc desc; 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 device_descriptor_params
{ {
struct unix_device *iface; UINT64 device;
BYTE *buffer; BYTE *buffer;
UINT length; UINT length;
UINT *out_length; UINT *out_length;
...@@ -109,7 +117,7 @@ struct device_descriptor_params ...@@ -109,7 +117,7 @@ struct device_descriptor_params
struct device_report_params struct device_report_params
{ {
struct unix_device *iface; UINT64 device;
HID_XFER_PACKET *packet; HID_XFER_PACKET *packet;
IO_STATUS_BLOCK *io; IO_STATUS_BLOCK *io;
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment