mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2024-11-21 16:46:54 -08:00
Rebase against d744f367d263a131feee96e103fb8220e8400b53
This commit is contained in:
parent
e7bff1bb4f
commit
ec47c04ab3
@ -1,17 +1,16 @@
|
||||
From a08076678e154c913713221f8eea87c70c11d788 Mon Sep 17 00:00:00 2001
|
||||
From 04aceb5470fc9ca9133f7a6269144eb7aa8d6a10 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Sat, 13 Jun 2015 05:03:54 +0200
|
||||
Subject: iphlpapi: Fallback to system ping when ICMP permissions are not
|
||||
present.
|
||||
Subject: [PATCH] iphlpapi: Fallback to system ping when ICMP permissions are
|
||||
not present.
|
||||
|
||||
Based on an idea by Bruno Jesus.
|
||||
---
|
||||
dlls/iphlpapi/icmp.c | 256 ++++++++++++++++++++++++++++++++++++++++-
|
||||
dlls/iphlpapi/tests/iphlpapi.c | 2 +-
|
||||
2 files changed, 251 insertions(+), 7 deletions(-)
|
||||
dlls/iphlpapi/icmp.c | 256 +++++++++++++++++++++++++++++++++++++++++++++++++--
|
||||
1 file changed, 250 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/dlls/iphlpapi/icmp.c b/dlls/iphlpapi/icmp.c
|
||||
index ebc2f2b..330dd73a 100644
|
||||
index 0dc2f12..da3850b 100644
|
||||
--- a/dlls/iphlpapi/icmp.c
|
||||
+++ b/dlls/iphlpapi/icmp.c
|
||||
@@ -5,6 +5,7 @@
|
||||
@ -50,7 +49,7 @@ index ebc2f2b..330dd73a 100644
|
||||
|
||||
#define USE_WS_PREFIX
|
||||
|
||||
@@ -209,6 +216,7 @@ DWORD WINAPI Icmp6SendEcho2(
|
||||
@@ -212,6 +219,7 @@ DWORD WINAPI Icmp6SendEcho2(
|
||||
*/
|
||||
HANDLE WINAPI IcmpCreateFile(VOID)
|
||||
{
|
||||
@ -58,7 +57,7 @@ index ebc2f2b..330dd73a 100644
|
||||
icmp_t* icp;
|
||||
|
||||
int sid=socket(AF_INET,SOCK_RAW,IPPROTO_ICMP);
|
||||
@@ -217,15 +225,14 @@ HANDLE WINAPI IcmpCreateFile(VOID)
|
||||
@@ -220,15 +228,14 @@ HANDLE WINAPI IcmpCreateFile(VOID)
|
||||
/* Mac OS X supports non-privileged ICMP via SOCK_DGRAM type. */
|
||||
sid=socket(AF_INET,SOCK_DGRAM,IPPROTO_ICMP);
|
||||
}
|
||||
@ -78,7 +77,7 @@ index ebc2f2b..330dd73a 100644
|
||||
SetLastError(IP_NO_RESOURCES);
|
||||
return INVALID_HANDLE_VALUE;
|
||||
}
|
||||
@@ -247,11 +254,242 @@ BOOL WINAPI IcmpCloseHandle(HANDLE IcmpHandle)
|
||||
@@ -250,11 +257,242 @@ BOOL WINAPI IcmpCloseHandle(HANDLE IcmpHandle)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@ -322,7 +321,7 @@ index ebc2f2b..330dd73a 100644
|
||||
|
||||
/***********************************************************************
|
||||
* IcmpSendEcho (IPHLPAPI.@)
|
||||
@@ -301,6 +539,12 @@ DWORD WINAPI IcmpSendEcho(
|
||||
@@ -308,6 +546,12 @@ DWORD WINAPI IcmpSendEcho(
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -335,25 +334,6 @@ index ebc2f2b..330dd73a 100644
|
||||
/* Prepare the request */
|
||||
id=getpid() & 0xFFFF;
|
||||
seq=InterlockedIncrement(&icmp_sequence) & 0xFFFF;
|
||||
diff --git a/dlls/iphlpapi/tests/iphlpapi.c b/dlls/iphlpapi/tests/iphlpapi.c
|
||||
index 73e4302..f9c6b99 100644
|
||||
--- a/dlls/iphlpapi/tests/iphlpapi.c
|
||||
+++ b/dlls/iphlpapi/tests/iphlpapi.c
|
||||
@@ -1028,13 +1028,13 @@ todo_wine
|
||||
replysz = sizeof(ICMP_ECHO_REPLY) + ICMP_MINLEN;
|
||||
ret = pIcmpSendEcho(icmp, address, senddata, ICMP_MINLEN, NULL, replydata, replysz, 1000);
|
||||
error = GetLastError();
|
||||
-todo_wine
|
||||
ok (ret, "IcmpSendEcho failed unexpectedly with error %d\n", error);
|
||||
|
||||
SetLastError(0xdeadbeef);
|
||||
replysz = sizeof(ICMP_ECHO_REPLY) + ICMP_MINLEN;
|
||||
ret = pIcmpSendEcho(icmp, address, senddata, ICMP_MINLEN + 1, NULL, replydata, replysz, 1000);
|
||||
error = GetLastError();
|
||||
+todo_wine
|
||||
ok (!ret, "IcmpSendEcho succeeded unexpectedly\n");
|
||||
todo_wine
|
||||
ok (error == IP_GENERAL_FAILURE
|
||||
--
|
||||
2.8.0
|
||||
1.9.1
|
||||
|
||||
|
@ -34,7 +34,7 @@ index e242cb4c0f..fa0ca2da00 100644
|
||||
+ ov.hEvent = CreateEventA(NULL, TRUE, FALSE, NULL);
|
||||
+ ok(ov.hEvent != INVALID_HANDLE_VALUE, "CreateEvent failed, error %u\n", GetLastError());
|
||||
+
|
||||
+ status = create_pipe(&pipe, FILE_SHARE_READ | FILE_SHARE_WRITE, 0 /* OVERLAPPED */);
|
||||
+ status = create_pipe(&pipe, FILE_SHARE_READ | FILE_SHARE_WRITE, 0 /* OVERLAPPED */, 0);
|
||||
+ ok(!status, "NtCreateNamedPipeFile returned %x\n", status);
|
||||
+ status = listen_pipe(pipe, ov.hEvent, &iosb, FALSE);
|
||||
+ ok(status == STATUS_PENDING, "NtFsControlFile returned %x\n", status);
|
||||
|
@ -1,155 +0,0 @@
|
||||
From c6c0b64be4f8505a769aa08dca8fa3078831aed5 Mon Sep 17 00:00:00 2001
|
||||
From: Aric Stewart <aric@codeweavers.com>
|
||||
Date: Tue, 24 Jul 2018 08:16:45 -0500
|
||||
Subject: [PATCH 06/24] hidclass.sys: Unload all devices before unloading a
|
||||
minidriver
|
||||
|
||||
Signed-off-by: Aric Stewart <aric@codeweavers.com>
|
||||
---
|
||||
dlls/hidclass.sys/hid.h | 8 ++++++++
|
||||
dlls/hidclass.sys/main.c | 8 ++++++++
|
||||
dlls/hidclass.sys/pnp.c | 35 +++++++++++++++++++++++++++++++----
|
||||
3 files changed, 47 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/dlls/hidclass.sys/hid.h b/dlls/hidclass.sys/hid.h
|
||||
index 1829319..4e8ba3c 100644
|
||||
--- a/dlls/hidclass.sys/hid.h
|
||||
+++ b/dlls/hidclass.sys/hid.h
|
||||
@@ -70,6 +70,12 @@ void RingBuffer_Destroy(struct ReportRingBuffer *buffer) DECLSPEC_HIDDEN;
|
||||
struct ReportRingBuffer* RingBuffer_Create(UINT buffer_size) DECLSPEC_HIDDEN;
|
||||
NTSTATUS RingBuffer_SetSize(struct ReportRingBuffer *buffer, UINT size) DECLSPEC_HIDDEN;
|
||||
|
||||
+typedef struct _hiddevice
|
||||
+{
|
||||
+ struct list entry;
|
||||
+ DEVICE_OBJECT *device;
|
||||
+} hid_device;
|
||||
+
|
||||
typedef struct _minidriver
|
||||
{
|
||||
struct list entry;
|
||||
@@ -80,6 +86,7 @@ typedef struct _minidriver
|
||||
|
||||
pAddDevice AddDevice;
|
||||
PDRIVER_DISPATCH PNPDispatch;
|
||||
+ struct list device_list;
|
||||
} minidriver;
|
||||
|
||||
NTSTATUS call_minidriver(ULONG code, DEVICE_OBJECT *device, void *in_buff, ULONG in_size, void *out_buff, ULONG out_size) DECLSPEC_HIDDEN;
|
||||
@@ -100,6 +107,7 @@ NTSTATUS WINAPI HID_PNP_Dispatch(DEVICE_OBJECT *device, IRP *irp) DECLSPEC_HIDDE
|
||||
|
||||
/* Pseudo-Plug and Play support*/
|
||||
NTSTATUS WINAPI PNP_AddDevice(DRIVER_OBJECT *driver, DEVICE_OBJECT* PDO) DECLSPEC_HIDDEN;
|
||||
+NTSTATUS PNP_RemoveDevice(minidriver *minidriver, DEVICE_OBJECT* device, IRP* irp) DECLSPEC_HIDDEN;
|
||||
|
||||
/* Parsing HID Report Descriptors into preparsed data */
|
||||
WINE_HIDP_PREPARSED_DATA* ParseDescriptor(BYTE *descriptor, unsigned int length) DECLSPEC_HIDDEN;
|
||||
diff --git a/dlls/hidclass.sys/main.c b/dlls/hidclass.sys/main.c
|
||||
index 1742cfe..8bb423b 100644
|
||||
--- a/dlls/hidclass.sys/main.c
|
||||
+++ b/dlls/hidclass.sys/main.c
|
||||
@@ -49,6 +49,12 @@ static VOID WINAPI UnloadDriver(DRIVER_OBJECT *driver)
|
||||
md = find_minidriver(driver);
|
||||
if (md)
|
||||
{
|
||||
+ hid_device *device, *next;
|
||||
+ TRACE("%i devices to unload\n", list_count(&md->device_list));
|
||||
+ LIST_FOR_EACH_ENTRY_SAFE(device, next, &md->device_list, hid_device, entry)
|
||||
+ {
|
||||
+ PNP_RemoveDevice(md, device->device, NULL);
|
||||
+ }
|
||||
if (md->DriverUnload)
|
||||
md->DriverUnload(md->minidriver.DriverObject);
|
||||
list_remove(&md->entry);
|
||||
@@ -82,6 +88,8 @@ NTSTATUS WINAPI HidRegisterMinidriver(HID_MINIDRIVER_REGISTRATION *registration)
|
||||
driver->minidriver = *registration;
|
||||
list_add_tail(&minidriver_list, &driver->entry);
|
||||
|
||||
+ list_init(&driver->device_list);
|
||||
+
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
diff --git a/dlls/hidclass.sys/pnp.c b/dlls/hidclass.sys/pnp.c
|
||||
index 30d1045..c501a74 100644
|
||||
--- a/dlls/hidclass.sys/pnp.c
|
||||
+++ b/dlls/hidclass.sys/pnp.c
|
||||
@@ -75,6 +75,7 @@ static NTSTATUS get_device_id(DEVICE_OBJECT *device, BUS_QUERY_ID_TYPE type, WCH
|
||||
|
||||
NTSTATUS WINAPI PNP_AddDevice(DRIVER_OBJECT *driver, DEVICE_OBJECT *PDO)
|
||||
{
|
||||
+ hid_device *hiddev;
|
||||
DEVICE_OBJECT *device = NULL;
|
||||
NTSTATUS status;
|
||||
minidriver *minidriver;
|
||||
@@ -96,13 +97,19 @@ NTSTATUS WINAPI PNP_AddDevice(DRIVER_OBJECT *driver, DEVICE_OBJECT *PDO)
|
||||
TRACE("PDO add device(%p:%s)\n", PDO, debugstr_w(PDO_id));
|
||||
minidriver = find_minidriver(driver);
|
||||
|
||||
- status = HID_CreateDevice(PDO, &minidriver->minidriver, &device);
|
||||
+ hiddev = HeapAlloc(GetProcessHeap(), 0, sizeof(*hiddev));
|
||||
+ if (!hiddev)
|
||||
+ return STATUS_NO_MEMORY;
|
||||
+
|
||||
+ status = HID_CreateDevice(PDO, &minidriver->minidriver, &hiddev->device);
|
||||
if (status != STATUS_SUCCESS)
|
||||
{
|
||||
ERR("Failed to create HID object (%x)\n",status);
|
||||
HeapFree(GetProcessHeap(), 0, PDO_id);
|
||||
+ HeapFree(GetProcessHeap(), 0, hiddev);
|
||||
return status;
|
||||
}
|
||||
+ device = hiddev->device;
|
||||
|
||||
ext = device->DeviceExtension;
|
||||
InitializeListHead(&ext->irp_queue);
|
||||
@@ -177,6 +184,8 @@ NTSTATUS WINAPI PNP_AddDevice(DRIVER_OBJECT *driver, DEVICE_OBJECT *PDO)
|
||||
return STATUS_NOT_SUPPORTED;
|
||||
}
|
||||
|
||||
+ list_add_tail(&(minidriver->device_list), &hiddev->entry);
|
||||
+
|
||||
ext->information.DescriptorSize = ext->preparseData->dwSize;
|
||||
|
||||
lstrcpyW(ext->instance_id, device_enumeratorW);
|
||||
@@ -200,6 +209,26 @@ NTSTATUS WINAPI PNP_AddDevice(DRIVER_OBJECT *driver, DEVICE_OBJECT *PDO)
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
+NTSTATUS PNP_RemoveDevice(minidriver *minidriver, DEVICE_OBJECT *device, IRP* irp)
|
||||
+{
|
||||
+ hid_device *hiddev;
|
||||
+ NTSTATUS rc = STATUS_NOT_SUPPORTED;
|
||||
+
|
||||
+ if (irp)
|
||||
+ rc = minidriver->PNPDispatch(device, irp);
|
||||
+ HID_DeleteDevice(&minidriver->minidriver, device);
|
||||
+ LIST_FOR_EACH_ENTRY(hiddev, &minidriver->device_list, hid_device, entry)
|
||||
+ {
|
||||
+ if (hiddev->device == device)
|
||||
+ {
|
||||
+ list_remove(&hiddev->entry);
|
||||
+ HeapFree(GetProcessHeap(), 0, hiddev);
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ return rc;
|
||||
+}
|
||||
+
|
||||
NTSTATUS WINAPI HID_PNP_Dispatch(DEVICE_OBJECT *device, IRP *irp)
|
||||
{
|
||||
NTSTATUS rc = STATUS_NOT_SUPPORTED;
|
||||
@@ -255,9 +284,7 @@ NTSTATUS WINAPI HID_PNP_Dispatch(DEVICE_OBJECT *device, IRP *irp)
|
||||
}
|
||||
case IRP_MN_REMOVE_DEVICE:
|
||||
{
|
||||
- rc = minidriver->PNPDispatch(device, irp);
|
||||
- HID_DeleteDevice(&minidriver->minidriver, device);
|
||||
- return rc;
|
||||
+ return PNP_RemoveDevice(minidriver, device, irp);
|
||||
}
|
||||
default:
|
||||
{
|
||||
--
|
||||
1.9.1
|
||||
|
@ -1,198 +0,0 @@
|
||||
From 6b416c0b1c963ced6ec11ccf46b9e99650267297 Mon Sep 17 00:00:00 2001
|
||||
From: Kai Krakow <kai@kaishome.de>
|
||||
Date: Sat, 28 Jul 2018 10:24:04 +0200
|
||||
Subject: [PATCH 13/24] winebus.sys: Do not report HID report read errors
|
||||
unconditionally
|
||||
|
||||
Device reports may come in faster than our consumers could possibly read
|
||||
them, this is especially true for multi-axis events: When you move a
|
||||
stick across its range, it will always generate at least two events, one
|
||||
for the x axis, and one for the y axis. This is not really an error
|
||||
situation, so let's report this situation only once at most. If we
|
||||
already know the multi-event situation, let's skip logging this
|
||||
completely: We won't loose any information anyway because the report
|
||||
contains a complete device state and only axis positions were updated.
|
||||
|
||||
Thus, this commit adds a parameter to process_hid_report() to let it
|
||||
know if we are currently processing reports that are known to be sent
|
||||
multiple times in sequence (with updated reports).
|
||||
|
||||
Also, if our consumers are slow to respond, then report the issue only
|
||||
once and not per each occurrence during the duration of one consumer
|
||||
read cycle.
|
||||
|
||||
Finally, this is not really an error, it's a warning at most, thus
|
||||
degrade the error message to a warning to not pollute peoples consoles
|
||||
and logs with unimportant stuff.
|
||||
|
||||
Especially during gaming I was seeing screens over screens full of only
|
||||
this single log message. This commit fixes it.
|
||||
|
||||
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=43125
|
||||
CC: Aric Stewart <aric@codeweavers.com>
|
||||
Signed-off-by: Aric Stewart <aric@codeweavers.com>
|
||||
Signed-off-by: Kai Krakow <kai@kaishome.de>
|
||||
---
|
||||
dlls/winebus.sys/bus.h | 2 +-
|
||||
dlls/winebus.sys/bus_iohid.c | 2 +-
|
||||
dlls/winebus.sys/bus_sdl.c | 12 ++++++------
|
||||
dlls/winebus.sys/bus_udev.c | 4 ++--
|
||||
dlls/winebus.sys/main.c | 18 +++++++++++++++---
|
||||
5 files changed, 25 insertions(+), 13 deletions(-)
|
||||
|
||||
diff --git a/dlls/winebus.sys/bus.h b/dlls/winebus.sys/bus.h
|
||||
index bf93c04..1e2989e 100644
|
||||
--- a/dlls/winebus.sys/bus.h
|
||||
+++ b/dlls/winebus.sys/bus.h
|
||||
@@ -45,7 +45,7 @@ DEVICE_OBJECT *bus_create_hid_device(DRIVER_OBJECT *driver, const WCHAR *busidW,
|
||||
DEVICE_OBJECT *bus_find_hid_device(const platform_vtbl *vtbl, void *platform_dev) DECLSPEC_HIDDEN;
|
||||
void bus_remove_hid_device(DEVICE_OBJECT *device) DECLSPEC_HIDDEN;
|
||||
NTSTATUS WINAPI hid_internal_dispatch(DEVICE_OBJECT *device, IRP *irp) DECLSPEC_HIDDEN;
|
||||
-void process_hid_report(DEVICE_OBJECT *device, BYTE *report, DWORD length) DECLSPEC_HIDDEN;
|
||||
+void process_hid_report(DEVICE_OBJECT *device, BYTE *report, DWORD length, BOOL warn_multi_events) DECLSPEC_HIDDEN;
|
||||
DEVICE_OBJECT* bus_enumerate_hid_devices(const platform_vtbl *vtbl, enum_func function, void* context) DECLSPEC_HIDDEN;
|
||||
|
||||
/* General Bus Functions */
|
||||
diff --git a/dlls/winebus.sys/bus_iohid.c b/dlls/winebus.sys/bus_iohid.c
|
||||
index 501a40d..74e5d82 100644
|
||||
--- a/dlls/winebus.sys/bus_iohid.c
|
||||
+++ b/dlls/winebus.sys/bus_iohid.c
|
||||
@@ -135,7 +135,7 @@ static void handle_IOHIDDeviceIOHIDReportCallback(void *context,
|
||||
uint32_t reportID, uint8_t *report, CFIndex report_length)
|
||||
{
|
||||
DEVICE_OBJECT *device = (DEVICE_OBJECT*)context;
|
||||
- process_hid_report(device, report, report_length);
|
||||
+ process_hid_report(device, report, report_length, TRUE);
|
||||
}
|
||||
|
||||
static int compare_platform_device(DEVICE_OBJECT *device, void *platform_dev)
|
||||
diff --git a/dlls/winebus.sys/bus_sdl.c b/dlls/winebus.sys/bus_sdl.c
|
||||
index 159727f..99a206c 100644
|
||||
--- a/dlls/winebus.sys/bus_sdl.c
|
||||
+++ b/dlls/winebus.sys/bus_sdl.c
|
||||
@@ -683,7 +683,7 @@ static BOOL set_report_from_event(SDL_Event *event)
|
||||
|
||||
set_button_value(ie->button, ie->state, private->report_buffer);
|
||||
|
||||
- process_hid_report(device, private->report_buffer, private->buffer_length);
|
||||
+ process_hid_report(device, private->report_buffer, private->buffer_length, TRUE);
|
||||
break;
|
||||
}
|
||||
case SDL_JOYAXISMOTION:
|
||||
@@ -693,7 +693,7 @@ static BOOL set_report_from_event(SDL_Event *event)
|
||||
if (ie->axis < 6)
|
||||
{
|
||||
set_axis_value(private, ie->axis, ie->value);
|
||||
- process_hid_report(device, private->report_buffer, private->buffer_length);
|
||||
+ process_hid_report(device, private->report_buffer, private->buffer_length, FALSE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -702,7 +702,7 @@ static BOOL set_report_from_event(SDL_Event *event)
|
||||
SDL_JoyBallEvent *ie = &event->jball;
|
||||
|
||||
set_ball_value(private, ie->ball, ie->xrel, ie->yrel);
|
||||
- process_hid_report(device, private->report_buffer, private->buffer_length);
|
||||
+ process_hid_report(device, private->report_buffer, private->buffer_length, FALSE);
|
||||
break;
|
||||
}
|
||||
case SDL_JOYHATMOTION:
|
||||
@@ -710,7 +710,7 @@ static BOOL set_report_from_event(SDL_Event *event)
|
||||
SDL_JoyHatEvent *ie = &event->jhat;
|
||||
|
||||
set_hat_value(private, ie->hat, ie->value);
|
||||
- process_hid_report(device, private->report_buffer, private->buffer_length);
|
||||
+ process_hid_report(device, private->report_buffer, private->buffer_length, TRUE);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
@@ -765,7 +765,7 @@ static BOOL set_mapped_report_from_event(SDL_Event *event)
|
||||
if (usage >= 0)
|
||||
{
|
||||
set_button_value(usage, ie->state, private->report_buffer);
|
||||
- process_hid_report(device, private->report_buffer, private->buffer_length);
|
||||
+ process_hid_report(device, private->report_buffer, private->buffer_length, TRUE);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -774,7 +774,7 @@ static BOOL set_mapped_report_from_event(SDL_Event *event)
|
||||
SDL_ControllerAxisEvent *ie = &event->caxis;
|
||||
|
||||
set_axis_value(private, ie->axis, ie->value);
|
||||
- process_hid_report(device, private->report_buffer, private->buffer_length);
|
||||
+ process_hid_report(device, private->report_buffer, private->buffer_length, FALSE);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
diff --git a/dlls/winebus.sys/bus_udev.c b/dlls/winebus.sys/bus_udev.c
|
||||
index d34e18c..47b9758 100644
|
||||
--- a/dlls/winebus.sys/bus_udev.c
|
||||
+++ b/dlls/winebus.sys/bus_udev.c
|
||||
@@ -768,7 +768,7 @@ static DWORD CALLBACK device_report_thread(void *args)
|
||||
else if (size == 0)
|
||||
TRACE_(hid_report)("Failed to read report\n");
|
||||
else
|
||||
- process_hid_report(device, report_buffer, size);
|
||||
+ process_hid_report(device, report_buffer, size, TRUE);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -979,7 +979,7 @@ static DWORD CALLBACK lnxev_device_report_thread(void *args)
|
||||
else if (size == 0)
|
||||
TRACE_(hid_report)("Failed to read report\n");
|
||||
else if (set_report_from_event(private, &ie))
|
||||
- process_hid_report(device, private->current_report_buffer, private->buffer_length);
|
||||
+ process_hid_report(device, private->current_report_buffer, private->buffer_length, TRUE);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
diff --git a/dlls/winebus.sys/main.c b/dlls/winebus.sys/main.c
|
||||
index 2f3c05a..624ddd5 100644
|
||||
--- a/dlls/winebus.sys/main.c
|
||||
+++ b/dlls/winebus.sys/main.c
|
||||
@@ -614,11 +614,12 @@ NTSTATUS WINAPI hid_internal_dispatch(DEVICE_OBJECT *device, IRP *irp)
|
||||
return status;
|
||||
}
|
||||
|
||||
-void process_hid_report(DEVICE_OBJECT *device, BYTE *report, DWORD length)
|
||||
+void process_hid_report(DEVICE_OBJECT *device, BYTE *report, DWORD length, BOOL warn_multi_events)
|
||||
{
|
||||
struct device_extension *ext = (struct device_extension*)device->DeviceExtension;
|
||||
IRP *irp;
|
||||
LIST_ENTRY *entry;
|
||||
+ static int overwrite_reported;
|
||||
|
||||
if (!length || !report)
|
||||
return;
|
||||
@@ -641,8 +642,18 @@ void process_hid_report(DEVICE_OBJECT *device, BYTE *report, DWORD length)
|
||||
ext->buffer_size = length;
|
||||
}
|
||||
|
||||
- if (!ext->last_report_read)
|
||||
- ERR_(hid_report)("Device reports coming in too fast, last report not read yet!\n");
|
||||
+ /*
|
||||
+ * Device reports may come in faster than our consumers could possibly
|
||||
+ * read them, this is especially true for multi-axis events: When you move
|
||||
+ * a stick across its range, it will always generate at least two events,
|
||||
+ * one for the x axis, and one for the y axis. This is not really an error
|
||||
+ * situation, so let's report this situation only once at most. If we
|
||||
+ * already know the multi-event situation, let's skip logging this
|
||||
+ * completely: We won't loose any information anyway because the report
|
||||
+ * contains a complete device state and only axis positions were updated.
|
||||
+ */
|
||||
+ if (warn_multi_events && !ext->last_report_read && !overwrite_reported++)
|
||||
+ WARN_(hid_report)("Device reports coming in too fast, last report not read yet!\n");
|
||||
|
||||
memcpy(ext->last_report, report, length);
|
||||
ext->last_report_size = length;
|
||||
@@ -659,6 +670,7 @@ void process_hid_report(DEVICE_OBJECT *device, BYTE *report, DWORD length)
|
||||
irp->UserBuffer, &irp->IoStatus.Information);
|
||||
ext->last_report_read = TRUE;
|
||||
IoCompleteRequest(irp, IO_NO_INCREMENT);
|
||||
+ overwrite_reported = 0;
|
||||
}
|
||||
LeaveCriticalSection(&ext->report_cs);
|
||||
}
|
||||
--
|
||||
1.9.1
|
||||
|
@ -1,7 +1,7 @@
|
||||
From b1f80a39d2034c62bbbf8a3e79e1d41e4b6257c4 Mon Sep 17 00:00:00 2001
|
||||
From 72b03c09586eea8c5cef4c0234e5f2dceea4cafd Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Sun, 15 Nov 2015 05:06:30 +0100
|
||||
Subject: oleaut32: Implement TMStubImpl_Invoke on x86_64.
|
||||
Subject: [PATCH] oleaut32: Implement TMStubImpl_Invoke on x86_64.
|
||||
|
||||
---
|
||||
dlls/oleaut32/tmarshal.c | 2 +-
|
||||
@ -9,10 +9,10 @@ Subject: oleaut32: Implement TMStubImpl_Invoke on x86_64.
|
||||
2 files changed, 29 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/dlls/oleaut32/tmarshal.c b/dlls/oleaut32/tmarshal.c
|
||||
index 9fd0f0374ba..95bf2a7489a 100644
|
||||
index f27f4c6..16db64f 100644
|
||||
--- a/dlls/oleaut32/tmarshal.c
|
||||
+++ b/dlls/oleaut32/tmarshal.c
|
||||
@@ -2073,7 +2073,7 @@ static HRESULT WINAPI
|
||||
@@ -2137,7 +2137,7 @@ static HRESULT WINAPI
|
||||
TMStubImpl_Invoke(
|
||||
LPRPCSTUBBUFFER iface, RPCOLEMESSAGE* xmsg,IRpcChannelBuffer*rpcchanbuf)
|
||||
{
|
||||
@ -22,12 +22,12 @@ index 9fd0f0374ba..95bf2a7489a 100644
|
||||
const FUNCDESC *fdesc;
|
||||
TMStubImpl *This = impl_from_IRpcStubBuffer(iface);
|
||||
diff --git a/dlls/oleaut32/typelib.c b/dlls/oleaut32/typelib.c
|
||||
index a575597f1f7..b328db924e6 100644
|
||||
index 58a8aae..fa9f4d9 100644
|
||||
--- a/dlls/oleaut32/typelib.c
|
||||
+++ b/dlls/oleaut32/typelib.c
|
||||
@@ -6422,6 +6422,34 @@ __ASM_GLOBAL_FUNC( call_method,
|
||||
/* same function but returning floating point */
|
||||
static double (CDECL * const call_double_method)(void*,int,const DWORD_PTR*) = (void *)call_method;
|
||||
@@ -6433,6 +6433,34 @@ __ASM_GLOBAL_FUNC( call_method,
|
||||
__ASM_GLOBAL_FUNC( call_double_method,
|
||||
"jmp " __ASM_NAME("call_method") )
|
||||
|
||||
+DWORD _invoke(FARPROC func, CALLCONV callconv, int nrargs, DWORD_PTR *args)
|
||||
+{
|
||||
@ -61,5 +61,5 @@ index a575597f1f7..b328db924e6 100644
|
||||
|
||||
extern LONGLONG CDECL call_method( void *func, int nb_stk_args, const DWORD *stk_args, const DWORD *reg_args );
|
||||
--
|
||||
2.14.2
|
||||
1.9.1
|
||||
|
||||
|
@ -52,7 +52,7 @@ usage()
|
||||
# Get the upstream commit sha
|
||||
upstream_commit()
|
||||
{
|
||||
echo "ba9f3dc198dfc81bb40159077b73b797006bb73c"
|
||||
echo "d744f367d263a131feee96e103fb8220e8400b53"
|
||||
}
|
||||
|
||||
# Show version information
|
||||
@ -2354,23 +2354,17 @@ fi
|
||||
# Patchset ml-patches
|
||||
# |
|
||||
# | Modified files:
|
||||
# | * dlls/hidclass.sys/hid.h, dlls/hidclass.sys/main.c, dlls/hidclass.sys/pnp.c, dlls/kernel32/process.c,
|
||||
# | dlls/winebus.sys/bus.h, dlls/winebus.sys/bus_iohid.c, dlls/winebus.sys/bus_sdl.c, dlls/winebus.sys/bus_udev.c,
|
||||
# | dlls/winebus.sys/main.c, libs/wine/loader.c, programs/cmd/tests/test_builtins.cmd,
|
||||
# | * dlls/kernel32/process.c, libs/wine/loader.c, programs/cmd/tests/test_builtins.cmd,
|
||||
# | programs/cmd/tests/test_builtins.cmd.exp, programs/cmd/wcmdmain.c, programs/winecfg/resource.h,
|
||||
# | programs/winecfg/theme.c, programs/winecfg/winecfg.rc, programs/winemenubuilder/winemenubuilder.c
|
||||
# |
|
||||
if test "$enable_ml_patches" -eq 1; then
|
||||
patch_apply ml-patches/0006-hidclass.sys-Unload-all-devices-before-unloading-a-m.patch
|
||||
patch_apply ml-patches/0008-programs-Allow-to-disable-MIME-type-associations.patch
|
||||
patch_apply ml-patches/0013-winebus.sys-Do-not-report-HID-report-read-errors-unc.patch
|
||||
patch_apply ml-patches/0020-libwine-Use-getsegmentdata-3-on-Mac-OS-to-find-the-e.patch
|
||||
patch_apply ml-patches/0022-kernel32-Set-environment-variable-PUBLIC-on-the-proc.patch
|
||||
patch_apply ml-patches/0028-cmd-Handle-quotes-when-parsing-the-folders-in-the-PA.patch
|
||||
(
|
||||
printf '%s\n' '+ { "Aric Stewart", "hidclass.sys: Unload all devices before unloading a minidriver.", 1 },';
|
||||
printf '%s\n' '+ { "Dmitry Timoshkov", "programs: Allow to disable MIME-type associations.", 1 },';
|
||||
printf '%s\n' '+ { "Kai Krakow", "winebus.sys: Do not report HID report read errors unconditionally.", 1 },';
|
||||
printf '%s\n' '+ { "Chip Davis", "libwine: Use getsegmentdata(3) on Mac OS to find the end of the __TEXT segment.", 1 },';
|
||||
printf '%s\n' '+ { "Dmitry Timoshkov", "kernel32: Set environment variable %PUBLIC% on the process start-up.", 1 },';
|
||||
printf '%s\n' '+ { "Fabian Maurer", "cmd: Handle quotes when parsing the folders in the PATH environment variable.", 1 },';
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 7096e603034fef2bbba202144070152ba5a0a32c Mon Sep 17 00:00:00 2001
|
||||
From 45e6befeba8145914fac0e1e9690026145e9ac25 Mon Sep 17 00:00:00 2001
|
||||
From: Sebastian Lackner <sebastian@fds-team.de>
|
||||
Date: Mon, 17 Aug 2015 01:11:47 +0200
|
||||
Subject: [PATCH] server: Store a reference to the parent object for pipe
|
||||
@ -12,10 +12,10 @@ Subject: [PATCH] server: Store a reference to the parent object for pipe
|
||||
4 files changed, 52 insertions(+), 19 deletions(-)
|
||||
|
||||
diff --git a/dlls/ntdll/tests/om.c b/dlls/ntdll/tests/om.c
|
||||
index 43c5ee4..9a1ba67 100644
|
||||
index be137b8..1c65464 100644
|
||||
--- a/dlls/ntdll/tests/om.c
|
||||
+++ b/dlls/ntdll/tests/om.c
|
||||
@@ -1487,14 +1487,11 @@ static void test_query_object(void)
|
||||
@@ -1503,14 +1503,11 @@ static void test_query_object(void)
|
||||
status = pNtQueryObject( handle, ObjectNameInformation, buffer, sizeof(buffer), &len );
|
||||
ok( status == STATUS_SUCCESS , "NtQueryObject returned %x\n", status );
|
||||
str = (UNICODE_STRING *)buffer;
|
||||
@ -31,10 +31,10 @@ index 43c5ee4..9a1ba67 100644
|
||||
"name too short %s\n", wine_dbgstr_w(str->Buffer) );
|
||||
trace( "got %s len %u\n", wine_dbgstr_w(str->Buffer), len );
|
||||
diff --git a/server/named_pipe.c b/server/named_pipe.c
|
||||
index 13cf13b..c7295e2 100644
|
||||
index 141a052..62b6905 100644
|
||||
--- a/server/named_pipe.c
|
||||
+++ b/server/named_pipe.c
|
||||
@@ -155,6 +155,8 @@ static struct security_descriptor *pipe_server_get_sd( struct object *obj );
|
||||
@@ -159,6 +159,8 @@ static struct security_descriptor *pipe_server_get_sd( struct object *obj );
|
||||
static int pipe_server_set_sd( struct object *obj, const struct security_descriptor *sd,
|
||||
unsigned int set_info );
|
||||
static void pipe_server_destroy( struct object *obj);
|
||||
@ -43,7 +43,7 @@ index 13cf13b..c7295e2 100644
|
||||
static int pipe_server_ioctl( struct fd *fd, ioctl_code_t code, struct async *async );
|
||||
static void pipe_server_get_file_info( struct fd *fd, unsigned int info_class );
|
||||
|
||||
@@ -173,8 +175,8 @@ static const struct object_ops pipe_server_ops =
|
||||
@@ -177,8 +179,8 @@ static const struct object_ops pipe_server_ops =
|
||||
pipe_server_get_sd, /* get_sd */
|
||||
pipe_server_set_sd, /* set_sd */
|
||||
no_lookup_name, /* lookup_name */
|
||||
@ -54,7 +54,7 @@ index 13cf13b..c7295e2 100644
|
||||
no_open_file, /* open_file */
|
||||
no_alloc_handle, /* alloc_handle */
|
||||
fd_close_handle, /* close_handle */
|
||||
@@ -201,6 +203,8 @@ static void pipe_client_dump( struct object *obj, int verbose );
|
||||
@@ -205,6 +207,8 @@ static void pipe_client_dump( struct object *obj, int verbose );
|
||||
static struct security_descriptor *pipe_client_get_sd( struct object *obj );
|
||||
static int pipe_client_set_sd( struct object *obj, const struct security_descriptor *sd,
|
||||
unsigned int set_info );
|
||||
@ -63,7 +63,7 @@ index 13cf13b..c7295e2 100644
|
||||
static void pipe_client_destroy( struct object *obj );
|
||||
static int pipe_client_ioctl( struct fd *fd, ioctl_code_t code, struct async *async );
|
||||
static void pipe_client_get_file_info( struct fd *fd, unsigned int info_class );
|
||||
@@ -220,8 +224,8 @@ static const struct object_ops pipe_client_ops =
|
||||
@@ -224,8 +228,8 @@ static const struct object_ops pipe_client_ops =
|
||||
pipe_client_get_sd, /* get_sd */
|
||||
pipe_client_set_sd, /* set_sd */
|
||||
no_lookup_name, /* lookup_name */
|
||||
@ -74,7 +74,7 @@ index 13cf13b..c7295e2 100644
|
||||
no_open_file, /* open_file */
|
||||
no_alloc_handle, /* alloc_handle */
|
||||
fd_close_handle, /* close_handle */
|
||||
@@ -419,6 +423,17 @@ static void pipe_end_destroy( struct pipe_end *pipe_end )
|
||||
@@ -422,6 +426,17 @@ static void pipe_end_destroy( struct pipe_end *pipe_end )
|
||||
if (pipe_end->fd) release_object( pipe_end->fd );
|
||||
}
|
||||
|
||||
@ -92,7 +92,7 @@ index 13cf13b..c7295e2 100644
|
||||
static void pipe_server_destroy( struct object *obj)
|
||||
{
|
||||
struct pipe_server *server = (struct pipe_server *)obj;
|
||||
@@ -441,6 +456,17 @@ static void pipe_server_destroy( struct object *obj)
|
||||
@@ -444,6 +459,17 @@ static void pipe_server_destroy( struct object *obj)
|
||||
release_object( server->pipe );
|
||||
}
|
||||
|
||||
@ -110,7 +110,7 @@ index 13cf13b..c7295e2 100644
|
||||
static void pipe_client_destroy( struct object *obj)
|
||||
{
|
||||
struct pipe_client *client = (struct pipe_client *)obj;
|
||||
@@ -996,9 +1022,10 @@ static void init_pipe_end( struct pipe_end *pipe_end, unsigned int pipe_flags, d
|
||||
@@ -1109,9 +1135,10 @@ static void init_pipe_end( struct pipe_end *pipe_end, unsigned int pipe_flags, d
|
||||
static struct pipe_server *create_pipe_server( struct named_pipe *pipe, unsigned int options,
|
||||
unsigned int pipe_flags )
|
||||
{
|
||||
@ -122,7 +122,7 @@ index 13cf13b..c7295e2 100644
|
||||
if (!server)
|
||||
return NULL;
|
||||
|
||||
@@ -1019,12 +1046,13 @@ static struct pipe_server *create_pipe_server( struct named_pipe *pipe, unsigned
|
||||
@@ -1135,12 +1162,13 @@ static struct pipe_server *create_pipe_server( struct named_pipe *pipe, unsigned
|
||||
return server;
|
||||
}
|
||||
|
||||
@ -138,17 +138,17 @@ index 13cf13b..c7295e2 100644
|
||||
if (!client)
|
||||
return NULL;
|
||||
|
||||
@@ -1102,7 +1130,7 @@ static struct object *named_pipe_open_file( struct object *obj, unsigned int acc
|
||||
@@ -1220,7 +1248,7 @@ static struct object *named_pipe_open_file( struct object *obj, unsigned int acc
|
||||
return NULL;
|
||||
}
|
||||
|
||||
- if ((client = create_pipe_client( options, pipe->flags, pipe->outsize, options )))
|
||||
+ if ((client = create_pipe_client( pipe, options, pipe->flags, pipe->outsize, options )))
|
||||
{
|
||||
set_no_fd_status( server->pipe_end.fd, STATUS_BAD_DEVICE_TYPE );
|
||||
allow_fd_caching( server->pipe_end.fd );
|
||||
if (server->state == ps_wait_open)
|
||||
fd_async_wake_up( server->pipe_end.fd, ASYNC_TYPE_WAIT, STATUS_SUCCESS );
|
||||
diff --git a/server/object.c b/server/object.c
|
||||
index 14cd38e..77772a8 100644
|
||||
index d0750c5..f40aebe 100644
|
||||
--- a/server/object.c
|
||||
+++ b/server/object.c
|
||||
@@ -176,7 +176,7 @@ WCHAR *get_object_full_name( struct object *obj, data_size_t *ret_len )
|
||||
@ -202,7 +202,7 @@ index 14cd38e..77772a8 100644
|
||||
|
||||
/* dump the name of an object to stderr */
|
||||
diff --git a/server/object.h b/server/object.h
|
||||
index 72ad852..ddb4410 100644
|
||||
index 9ff123e..4a5d282 100644
|
||||
--- a/server/object.h
|
||||
+++ b/server/object.h
|
||||
@@ -135,6 +135,8 @@ extern WCHAR *get_object_full_name( struct object *obj, data_size_t *ret_len );
|
||||
@ -215,5 +215,5 @@ index 72ad852..ddb4410 100644
|
||||
const struct unicode_str *name, unsigned int attributes,
|
||||
const struct security_descriptor *sd );
|
||||
--
|
||||
2.7.4
|
||||
1.9.1
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 55ee7e5738f4cb166b806a06a4e2b46bc5cebb3c Mon Sep 17 00:00:00 2001
|
||||
From 0e816291072f8a941ef5af3e91c4ce9184741967 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
|
||||
Date: Fri, 18 Aug 2017 23:22:16 +0200
|
||||
Subject: [PATCH] d3d11/tests: Add basic dual source blend test.
|
||||
@ -8,10 +8,10 @@ Subject: [PATCH] d3d11/tests: Add basic dual source blend test.
|
||||
1 file changed, 169 insertions(+)
|
||||
|
||||
diff --git a/dlls/d3d11/tests/d3d11.c b/dlls/d3d11/tests/d3d11.c
|
||||
index c24287d..083ffe9 100644
|
||||
index e63ed82..44f046b 100644
|
||||
--- a/dlls/d3d11/tests/d3d11.c
|
||||
+++ b/dlls/d3d11/tests/d3d11.c
|
||||
@@ -27603,6 +27603,174 @@ static void test_depth_clip(void)
|
||||
@@ -27825,6 +27825,174 @@ static void test_depth_clip(void)
|
||||
release_test_context(&test_context);
|
||||
}
|
||||
|
||||
@ -186,14 +186,14 @@ index c24287d..083ffe9 100644
|
||||
START_TEST(d3d11)
|
||||
{
|
||||
unsigned int argc, i;
|
||||
@@ -27735,6 +27903,7 @@ START_TEST(d3d11)
|
||||
run_for_each_feature_level_in_range(D3D_FEATURE_LEVEL_10_0, D3D_FEATURE_LEVEL_11_0, test_negative_viewports);
|
||||
test_early_depth_stencil();
|
||||
test_conservative_depth_output();
|
||||
+ test_dual_blending();
|
||||
test_format_compatibility();
|
||||
test_clip_distance();
|
||||
test_combined_clip_and_cull_distances();
|
||||
@@ -27959,6 +28127,7 @@ START_TEST(d3d11)
|
||||
queue_for_each_feature_level_in_range(D3D_FEATURE_LEVEL_10_0, D3D_FEATURE_LEVEL_11_0, test_negative_viewports);
|
||||
queue_test(test_early_depth_stencil);
|
||||
queue_test(test_conservative_depth_output);
|
||||
+ queue_test(test_dual_blending);
|
||||
queue_test(test_format_compatibility);
|
||||
queue_test(test_clip_distance);
|
||||
queue_test(test_combined_clip_and_cull_distances);
|
||||
--
|
||||
1.9.1
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
From 04c44a9f85dc3d28e68c15e910752882e7e9e91c Mon Sep 17 00:00:00 2001
|
||||
From ad754e544f3f9238fc93d9003b4d96f7924d0fca Mon Sep 17 00:00:00 2001
|
||||
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
|
||||
Date: Fri, 1 Jun 2018 14:03:26 +1000
|
||||
Subject: [PATCH] winex11: Specify a default vulkan driver if one not found at
|
||||
@ -11,12 +11,12 @@ vulkan library in backports and not everybody will have this mapped.
|
||||
1 file changed, 13 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git a/dlls/winex11.drv/vulkan.c b/dlls/winex11.drv/vulkan.c
|
||||
index 58c08ad8180..ea03a2c842f 100644
|
||||
index 063281d..9f51270 100644
|
||||
--- a/dlls/winex11.drv/vulkan.c
|
||||
+++ b/dlls/winex11.drv/vulkan.c
|
||||
@@ -42,7 +42,9 @@
|
||||
|
||||
@@ -43,7 +43,9 @@
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(vulkan);
|
||||
WINE_DECLARE_DEBUG_CHANNEL(fps);
|
||||
|
||||
-#ifdef SONAME_LIBVULKAN
|
||||
+#ifndef SONAME_LIBVULKAN
|
||||
@ -25,7 +25,7 @@ index 58c08ad8180..ea03a2c842f 100644
|
||||
|
||||
static CRITICAL_SECTION context_section;
|
||||
static CRITICAL_SECTION_DEBUG critsect_debug =
|
||||
@@ -107,9 +109,17 @@ static void *vulkan_handle;
|
||||
@@ -105,9 +107,17 @@ static void *vulkan_handle;
|
||||
|
||||
static BOOL WINAPI wine_vk_init(INIT_ONCE *once, void *param, void **context)
|
||||
{
|
||||
@ -45,7 +45,7 @@ index 58c08ad8180..ea03a2c842f 100644
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -666,16 +676,3 @@ const struct vulkan_funcs *get_vulkan_driver(UINT version)
|
||||
@@ -593,16 +603,3 @@ const struct vulkan_funcs *get_vulkan_driver(UINT version)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -63,5 +63,5 @@ index 58c08ad8180..ea03a2c842f 100644
|
||||
-
|
||||
-#endif /* SONAME_LIBVULKAN */
|
||||
--
|
||||
2.18.0
|
||||
1.9.1
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user