Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2218209/?format=api
{ "id": 2218209, "url": "http://patchwork.ozlabs.org/api/patches/2218209/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260331170823.72511-3-soumyajyotisarkar23@gmail.com/", "project": { "id": 14, "url": "http://patchwork.ozlabs.org/api/projects/14/?format=api", "name": "QEMU Development", "link_name": "qemu-devel", "list_id": "qemu-devel.nongnu.org", "list_email": "qemu-devel@nongnu.org", "web_url": "", "scm_url": "", "webscm_url": "", "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20260331170823.72511-3-soumyajyotisarkar23@gmail.com>", "list_archive_url": null, "date": "2026-03-31T17:08:20", "name": "[RFC,2/5] usb/hid: add enhanced wheel mouse report descriptor and packet size", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "989681665ef35aa047b3d6fc5b9430a5daf54c0f", "submitter": { "id": 91019, "url": "http://patchwork.ozlabs.org/api/people/91019/?format=api", "name": "Soumyajyotii Ssarkar", "email": "soumyajyotisarkar23@gmail.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260331170823.72511-3-soumyajyotisarkar23@gmail.com/mbox/", "series": [ { "id": 498231, "url": "http://patchwork.ozlabs.org/api/series/498231/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=498231", "date": "2026-03-31T17:08:18", "name": "Add high-resolution 2D mouse wheel support to USB HID", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/498231/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2218209/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2218209/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256\n header.s=20251104 header.b=U0afqVX5;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)" ], "Received": [ "from lists.gnu.org (lists.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4flZMq3bjJz1y1q\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 01 Apr 2026 04:08:55 +1100 (AEDT)", "from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1w7ca6-0003ce-UN; Tue, 31 Mar 2026 13:08:47 -0400", "from eggs.gnu.org ([2001:470:142:3::10])\n by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <soumyajyotisarkar23@gmail.com>)\n id 1w7ca6-0003c2-7x\n for qemu-devel@nongnu.org; Tue, 31 Mar 2026 13:08:46 -0400", "from mail-pf1-x443.google.com ([2607:f8b0:4864:20::443])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.90_1) (envelope-from <soumyajyotisarkar23@gmail.com>)\n id 1w7ca4-0003Bp-8S\n for qemu-devel@nongnu.org; Tue, 31 Mar 2026 13:08:46 -0400", "by mail-pf1-x443.google.com with SMTP id\n d2e1a72fcca58-8296dabef74so5683895b3a.1\n for <qemu-devel@nongnu.org>; Tue, 31 Mar 2026 10:08:43 -0700 (PDT)", "from fedora ([103.2.232.250]) by smtp.gmail.com with ESMTPSA id\n d2e1a72fcca58-82ca843b818sm13647889b3a.6.2026.03.31.10.08.37\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Tue, 31 Mar 2026 10:08:41 -0700 (PDT)" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=gmail.com; s=20251104; t=1774976922; x=1775581722; darn=nongnu.org;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:from:to:cc:subject:date\n :message-id:reply-to;\n bh=qK+TYXGeyXHMsmqfAHL+L670U9yf6uTftVNC0MvGN18=;\n b=U0afqVX533VURfpQkX6fUqKQA0AeAT7OdlFJFeels4z6dYYkQpMM2i6wiJCfsT8w/L\n NTGcyHy10wa0oaaMpdHPYtWsB+5UtfGUpqUkrWb4R9a4hJqWDHNBncFXXJDKxf0ZR7bj\n if/qbAQd9LOWzVL0Dj6+AoPoFnuUwM6wr7nl+yQl+IJ7N21DPyMgmiQsbv0/r8DZACnF\n lh7m/5kajZnLI24o1FcpvZRqS3t3I/UYCPGISSTv8rg8LDkpswnX+m9wS/Xbw/hDXG1F\n uGD7kfpHRGpfX1FUDApQ5avgjbBROqySn1bxlGj6BvKU2Dnx166jDzNVGyyLIxvQC1NP\n 6+BA==", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1774976922; x=1775581722;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from\n :to:cc:subject:date:message-id:reply-to;\n bh=qK+TYXGeyXHMsmqfAHL+L670U9yf6uTftVNC0MvGN18=;\n b=phOtZD+8RxKtXW7YPn7FON82btTAZtcM5CEOvbk3J7fxYuuCfQ+vyxcDtANNtZUIKr\n x1g872wBQpmYbICavKsXWtW34qKnHz8F5XC+JS1OYGryKpqOBteoqOlw5uXkvThIn3Jf\n t+0pMIU8Zfo2B8it8AXPUxtKZQiiBOcSxUEi32S6/rcaJsoqaDEHh53loa2RycXfV9Cq\n eLSrELm7u2swkutnD+OSBmp29U9bVDZmGfjPKUftLqFInTpdw5AYwx87Qx/+nfK2P7Oz\n Q7zuH8HFGgMzbItKIKUG1o8YA8QqM04sdU/lXTCb5bft73K9YUpasdMME/gpSGLei7ac\n YqPA==", "X-Gm-Message-State": "AOJu0YyA7yYOcJibXkSOMsSXHgXgJOdoU/lx643jPx34+DLgzm6SlqvV\n W9ro+AXWRkh6LuDbfzu10JHqCeXnJZTwmZu9IOYfA+sjM1T76WFJj+MJbaftG78M", "X-Gm-Gg": "ATEYQzzcF9z2SPrPIDRVWenGhmrsCjkAqqw0ffIlwZlfzXZphbWL5/0xvpiuLA/RsTj\n 6WWCQXUC7s4JmoIOohv1ICTV3o9yY8wxZutyqKMViG4/+RkgELewoKDFbIGt/eNmM0tI7wcHkm/\n VCKdl0afMe/JL6ZU/y6y683UKLVlTNzVCxO+Ey4lRUAOl7sWp/iGQrPb5KwKyjRCZ7WJ9PZdOj5\n Dtta05AhnKHJi9zKlqfqGwAyGzkNC679IUhCEwyc8nMmI2LMmhkVE6fp2N0EVZ6kntptyc76G15\n mxRFSEsnf9EAssYq/PkXxZGKCECHfUnGnSfJU4KRztFvFGn5ywN2HKchmC+AiqZDZtfwQfAA0xd\n iEclG6ke874oqU/C6HqjsgLhYko6FhC6spUQCvQugdSWS/lVdtBxwRuOx2fTA5tW71YipzSw/Np\n bXE/qur5/VM431DRZw3rNu6TjBsAeNzAsx0UoC9Nn8zKlNMCbaYyrmSSgcePeyDmOSHsgGDII1c\n pKndeeSHJktOW1iofSV9Bj2x3YOwZlqrkg5jg2hUXhybLpHZh6zXUNbNv9dMOlSE+jAYIM11A==", "X-Received": "by 2002:a05:6a00:a228:b0:82a:17b6:53ca with SMTP id\n d2e1a72fcca58-82ce8ad21c2mr376006b3a.38.1774976922035;\n Tue, 31 Mar 2026 10:08:42 -0700 (PDT)", "From": "Soumyajyotii Ssarkar <soumyajyotisarkar23@gmail.com>", "To": "qemu-devel@nongnu.org", "Cc": "Richard Henderson <richard.henderson@linaro.org>,\n Paolo Bonzini <pbonzini@redhat.com>,\n Soumyajyotii Ssarkar <sarkarsoumyajyoti23@gmail.com>,\n Michael Tokarev <mjt@tls.msk.ru>, Thomas Lambertz <patch@thomaslambertz.de>,\n\t=?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= <philmd@linaro.org>,\n Alex Golovko <alex@browserling.com>, ShengYi Hung <aokblast@FreeBSD.org>,\n Soumyajyotii Ssarkar <soumyajyotisarkar23@gmail.com>", "Subject": "[RFC PATCH 2/5] usb/hid: add enhanced wheel mouse report descriptor\n and packet size", "Date": "Tue, 31 Mar 2026 22:38:20 +0530", "Message-ID": "<20260331170823.72511-3-soumyajyotisarkar23@gmail.com>", "X-Mailer": "git-send-email 2.53.0", "In-Reply-To": "<20260331170823.72511-1-soumyajyotisarkar23@gmail.com>", "References": "<20260331170823.72511-1-soumyajyotisarkar23@gmail.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "Received-SPF": "pass client-ip=2607:f8b0:4864:20::443;\n envelope-from=soumyajyotisarkar23@gmail.com; helo=mail-pf1-x443.google.com", "X-Spam_score_int": "-17", "X-Spam_score": "-1.8", "X-Spam_bar": "-", "X-Spam_report": "(-1.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001,\n RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,\n SPF_PASS=-0.001 autolearn=ham autolearn_force=no", "X-Spam_action": "no action", "X-BeenThere": "qemu-devel@nongnu.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "qemu development <qemu-devel.nongnu.org>", "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>", "List-Archive": "<https://lists.nongnu.org/archive/html/qemu-devel>", "List-Post": "<mailto:qemu-devel@nongnu.org>", "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>", "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>", "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org", "Sender": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org" }, "content": "Build on top of the simple mouse HID report descriptor with an enhanced version\nthat supports report IDs and feature reports for high resolution mouse\nwheel control. As per the documentation structure.\n\nCheck: https://download.microsoft.com/download/b/d/1/bd1f7ef4-7d72-419e-bc5c-9f79ad7bb66e/wheel.docx\n\nChanges:\n- Increase HID descriptor length from 52 to 144 bytes\n- Add report IDs (0x01 input, 0x02 feature)\n- Implement feature reports for wheel/pan resolution multipliers\n- Add AC Pan (horizontal scroll) usage\n- Increase endpoint packet size from 4 to 6 bytes for pan byte\n\nThis enables guests to configure resolution multipliers (+-1, +-4, +-8, +-16)\nto control scroll acceleration and precision.\n\nSigned-off-by: Soumyajyotii Ssarkar <soumyajyotisarkar23@gmail.com>\n---\n hw/usb/dev-hid.c | 126 +++++++++++++++++++++++++++++++++++------------\n 1 file changed, 95 insertions(+), 31 deletions(-)\n\n--\n2.53.0", "diff": "diff --git a/hw/usb/dev-hid.c b/hw/usb/dev-hid.c\nindex ae19d60203..49e23c2319 100644\n--- a/hw/usb/dev-hid.c\n+++ b/hw/usb/dev-hid.c\n@@ -93,7 +93,7 @@ static const USBDescIface desc_iface_mouse = {\n 0x00, /* u8 country_code */\n 0x01, /* u8 num_descriptors */\n USB_DT_REPORT, /* u8 type: Report */\n- 52, 0, /* u16 len */\n+ 144, 0, /* u16 len */\n },\n },\n },\n@@ -101,7 +101,7 @@ static const USBDescIface desc_iface_mouse = {\n {\n .bEndpointAddress = USB_DIR_IN | 0x01,\n .bmAttributes = USB_ENDPOINT_XFER_INT,\n- .wMaxPacketSize = 4,\n+ .wMaxPacketSize = 6,\n .bInterval = 0x0a,\n },\n },\n@@ -124,7 +124,7 @@ static const USBDescIface desc_iface_mouse2 = {\n 0x00, /* u8 country_code */\n 0x01, /* u8 num_descriptors */\n USB_DT_REPORT, /* u8 type: Report */\n- 52, 0, /* u16 len */\n+ 144, 0, /* u16 len */\n },\n },\n },\n@@ -132,7 +132,7 @@ static const USBDescIface desc_iface_mouse2 = {\n {\n .bEndpointAddress = USB_DIR_IN | 0x01,\n .bmAttributes = USB_ENDPOINT_XFER_INT,\n- .wMaxPacketSize = 4,\n+ .wMaxPacketSize = 6,\n .bInterval = 7, /* 2 ^ (8-1) * 125 usecs = 8 ms */\n },\n },\n@@ -454,33 +454,97 @@ static const USBDesc desc_keyboard2 = {\n };\n\n static const uint8_t qemu_mouse_hid_report_descriptor[] = {\n- 0x05, 0x01,\t\t/* Usage Page (Generic Desktop) */\n- 0x09, 0x02,\t\t/* Usage (Mouse) */\n- 0xa1, 0x01,\t\t/* Collection (Application) */\n- 0x09, 0x01,\t\t/* Usage (Pointer) */\n- 0xa1, 0x00,\t\t/* Collection (Physical) */\n- 0x05, 0x09,\t\t/* Usage Page (Button) */\n- 0x19, 0x01,\t\t/* Usage Minimum (1) */\n- 0x29, 0x05,\t\t/* Usage Maximum (5) */\n- 0x15, 0x00,\t\t/* Logical Minimum (0) */\n- 0x25, 0x01,\t\t/* Logical Maximum (1) */\n- 0x95, 0x05,\t\t/* Report Count (5) */\n- 0x75, 0x01,\t\t/* Report Size (1) */\n- 0x81, 0x02,\t\t/* Input (Data, Variable, Absolute) */\n- 0x95, 0x01,\t\t/* Report Count (1) */\n- 0x75, 0x03,\t\t/* Report Size (3) */\n- 0x81, 0x01,\t\t/* Input (Constant) */\n- 0x05, 0x01,\t\t/* Usage Page (Generic Desktop) */\n- 0x09, 0x30,\t\t/* Usage (X) */\n- 0x09, 0x31,\t\t/* Usage (Y) */\n- 0x09, 0x38,\t\t/* Usage (Wheel) */\n- 0x15, 0x81,\t\t/* Logical Minimum (-0x7f) */\n- 0x25, 0x7f,\t\t/* Logical Maximum (0x7f) */\n- 0x75, 0x08,\t\t/* Report Size (8) */\n- 0x95, 0x03,\t\t/* Report Count (3) */\n- 0x81, 0x06,\t\t/* Input (Data, Variable, Relative) */\n- 0xc0,\t\t/* End Collection */\n- 0xc0,\t\t/* End Collection */\n+ 0x05, 0x01, /* Usage Page (Generic Desktop) */\n+ 0x09, 0x02, /* Usage (Mouse) */\n+ 0xA1, 0x01, /* Collection (Application) */\n+\n+ 0x09, 0x02, /* Usage (Mouse) */\n+ 0xA1, 0x02, /* Collection (Logical) */\n+\n+ 0x85, 0x01, /* Report ID (0x01) */\n+ 0x09, 0x01, /* Usage (Pointer) */\n+ 0xA1, 0x00, /* Collection (Physical) */\n+\n+ 0x05, 0x09, /* Usage Page (Button) */\n+ 0x19, 0x01, /* Usage Minimum (1) */\n+ 0x29, 0x05, /* Usage Maximum (5) */\n+ 0x15, 0x00, /* Logical Minimum (0) */\n+ 0x25, 0x01, /* Logical Maximum (1) */\n+ 0x95, 0x05, /* Report Count (5) */\n+ 0x75, 0x01, /* Report Size (1) */\n+ 0x81, 0x02, /* Input (Data,Var,Abs) */\n+\n+ 0x95, 0x01, /* Report Count (1) */\n+ 0x75, 0x03, /* Report Size (3) */\n+ 0x81, 0x01, /* Input (Const) */\n+\n+ 0x05, 0x01, /* Usage Page (Generic Desktop) */\n+ 0x09, 0x30, /* Usage (X) */\n+ 0x09, 0x31, /* Usage (Y) */\n+ 0x95, 0x02, /* Report Count (2) */\n+ 0x75, 0x08, /* Report Size (8) */\n+ 0x15, 0x81, /* Logical Minimum (-127) */\n+ 0x25, 0x7F, /* Logical Maximum (127) */\n+ 0x81, 0x06, /* Input (Data,Var,Rel) */\n+\n+ /* Vertical wheel logical collection */\n+ 0xA1, 0x02, /* Collection (Logical) */\n+\n+ 0x85, 0x02, /* Report ID (0x02) */\n+ 0x09, 0x48, /* Usage (Resolution Multiplier) */\n+ 0x15, 0x00, /* Logical Minimum (0) */\n+ 0x25, 0x01, /* Logical Maximum (1) */\n+ 0x35, 0x01, /* Physical Minimum (1) */\n+ 0x45, 0x04, /* Physical Maximum (4) */\n+ 0x75, 0x02, /* Report Size (2) */\n+ 0x95, 0x01, /* Report Count (1) */\n+ 0xB1, 0x02, /* Feature (Data,Var,Abs) */\n+\n+ 0x85, 0x01, /* Report ID (0x01) */\n+ 0x09, 0x38, /* Usage (Wheel) */\n+ 0x35, 0x00, /* Physical Minimum (0) */\n+ 0x45, 0x00, /* Physical Maximum (0) */\n+ 0x15, 0x81, /* Logical Minimum (-0x7f) */\n+ 0x25, 0x7F, /* Logical Maximum (0x7f) */\n+ 0x75, 0x08, /* Report Size (8) */\n+ 0x95, 0x01, /* Report Count (1) */\n+ 0x81, 0x06, /* Input (Data,Var,Rel) */\n+\n+ 0xC0, /* End Collection */\n+\n+ /* Horizontal wheel logical collection */\n+ 0xA1, 0x02, /* Collection (Logical) */\n+\n+ 0x85, 0x02, /* Report ID (0x02) */\n+ 0x09, 0x48, /* Usage (Resolution Multiplier) */\n+ 0x15, 0x00, /* Logical Minimum (0) */\n+ 0x25, 0x01, /* Logical Maximum (1) */\n+ 0x35, 0x01, /* Physical Minimum (1) */\n+ 0x45, 0x04, /* Physical Maximum (4) */\n+ 0x75, 0x02, /* Report Size (2) */\n+ 0x95, 0x01, /* Report Count (1) */\n+ 0xB1, 0x02, /* Feature (Data,Var,Abs) */\n+\n+ 0x35, 0x00, /* Physical Minimum (0) */\n+ 0x45, 0x00, /* Physical Maximum (0) */\n+ 0x75, 0x04, /* Report Size (4) */\n+ 0x95, 0x01, /* Report Count (1) */\n+ 0xB1, 0x01, /* Feature (Const) */\n+\n+ 0x85, 0x01, /* Report ID (0x01) */\n+ 0x05, 0x0C, /* Usage Page (Consumer Devices) */\n+ 0x0A, 0x38, 0x02, /* Usage (AC Pan) */\n+ 0x15, 0x81, /* Logical Minimum (-0x7f) */\n+ 0x25, 0x7F, /* Logical Maximum (0x7f) */\n+ 0x75, 0x08, /* Report Size (8) */\n+ 0x95, 0x01, /* Report Count (1) */\n+ 0x81, 0x06, /* Input (Data,Var,Rel) */\n+\n+ 0xC0, /* End Collection */\n+\n+ 0xC0, /* End Collection (Physical) */\n+ 0xC0, /* End Collection (Logical) */\n+ 0xC0 /* End Collection (Application) */\n };\n\n static const uint8_t qemu_tablet_hid_report_descriptor[] = {\n", "prefixes": [ "RFC", "2/5" ] }