get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/2218209/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "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"
    ]
}