From nobody Wed May 15 09:11:09 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of seabios.org designates 78.46.105.101 as permitted sender) client-ip=78.46.105.101; envelope-from=seabios-bounces@seabios.org; helo=coreboot.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of seabios.org designates 78.46.105.101 as permitted sender) smtp.mailfrom=seabios-bounces@seabios.org; arc=fail (BodyHash is different from the expected one); dmarc=fail(p=none dis=none) header.from=outlook.com Return-Path: Received: from coreboot.org (coreboot.org [78.46.105.101]) by mx.zohomail.com with SMTPS id 1669217945533625.5523743199709; Wed, 23 Nov 2022 07:39:05 -0800 (PST) Received: from authenticated-user (PRIMARY_HOSTNAME [PUBLIC_IP]) by coreboot.org (Postfix) with ESMTPA id 84F93212AD; Wed, 23 Nov 2022 15:39:01 +0000 (UTC) Received: from authenticated-user (PRIMARY_HOSTNAME [PUBLIC_IP]) by coreboot.org (Postfix) with ESMTP id 067222068D for ; Wed, 23 Nov 2022 15:38:44 +0000 (UTC) Received: from authenticated-user (PRIMARY_HOSTNAME [PUBLIC_IP]) SYZP282MB3309.AUSP282.PROD.OUTLOOK.COM (2603:10c6:10:16a::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5834.15; Wed, 23 Nov 2022 15:38:40 +0000 Received: from authenticated-user (PRIMARY_HOSTNAME [PUBLIC_IP]) ([fe80::3021:4e2f:269f:86a2]) by SYZP282MB3252.AUSP282.PROD.OUTLOOK.COM ([fe80::3021:4e2f:269f:86a2%9]) with mapi id 15.20.5857.018; Wed, 23 Nov 2022 15:38:40 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=SKfFHLedQsx/+ZejFfZmtw05cYH8ljpxzuvKmQ+/SHK4FxKbn95NolXgCeDUyqAGWE/KNbMXqjH6nhL6/mByr4m+YtXxrKslfZTHM7Pr4lqUrdYmkwq2N0GLnrVEk87jI+KMFBbQpjviP39VsIJRFrNVblkEaQGRIUJA0L3/K7DZDu0wsuF0W2yXDH93eqlkFyBt1ZF7xNzce2I2aJRYxT/wY0CJ1b84otQ8tRldVjdjVNk8gggAoieEIlHXj/bxk576v35bV4ipNd9GbC4Lnisn0qgNJ7i53EIE67aYLyDrISFSkitsmfcvfx+Uv5g07ZTTMaD5Zlog/uAEG4J/kg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=X6Yg19z+jHfbksE3ffROJ30g9/ZrEuPThWNnpkjRNJ4=; b=cKLT17agwjuKy7fRAKv0rTOMwa9kj0L+mzxMC80s6CPccyLB5UMNDFVQVwx0d3kcYcaFy8obAYwmytyLTMOa7a51pyfXev8EOe0Xqi9Xu51c3npgJcIZnwR9u7NTanKYeiJ1Ix+GP0GkTtsAfAkbbLEtcP7o8sLUkNHV0SdLPxYdfY3L8QH3EJGNvBHG/4pEXLXYurXs0ilgz8UeS8a5boJl4Upq3RGNy0MuySzR3VMv3ibzIUF4J34kJeo2We5J9CDRgBrcmbchnn5NnBZC8ZPJkBnkf+1CHwZ+ctLOGPgeH62xfHlo/EUqwuT/ro3JypcC1qmeycTLkSCaGV2mOA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=X6Yg19z+jHfbksE3ffROJ30g9/ZrEuPThWNnpkjRNJ4=; b=GAnOhv8kGQTrjkcKMAL7z/YahXoKYzedTB5aM1Ey5OQDsv6zeyZ2gse8kJuPRnFfrIK34SjC+Hao/Ye0bKscP2RPBtaxcz1IAZ12+PROzUlZi+yplpzKZlcPXBQ7fErxAcbrjkC3g2NyBTdbnw+82KWhun6Sg8yE2DaGKYSpaxWOYrQDvfdsGLA1tw7gdbip/gcsSYu81cLxE0NzagbyDya50dwA6axQA2Sr9O/xX9O4VnyFRpfNxZLyNBRUlslapXQE8euVf35yzg+Y7F1/kk+SrMuNobnq3gn0IUI02WeO7kIOjEfguDE6LYnyD2eO2U5BPUTTLgCg/CWYkI0yUg== From: qi zhou To: Kevin O'Connor Thread-Topic: [SeaBIOS] [PATCH] fix wrong init of keyboard/mouse's if first interface is not boot protocol Thread-Index: AQHY+CiUwZq49N9z4keT8mcA80nVza5LTnWAgAFPireAABMgxw== Date: Wed, 23 Nov 2022 15:38:40 +0000 Message-ID: References: In-Reply-To: Accept-Language: en-US, zh-CN Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: x-ms-exchange-messagesentrepresentingtype: 1 x-tmn: [w8HEu+wBAvyJpjnvAmiPC8AsjTIy5Z3s] x-ms-publictraffictype: Email x-ms-traffictypediagnostic: SYZP282MB3252:EE_|SYZP282MB3309:EE_ x-ms-office365-filtering-correlation-id: 0abf34b9-f611-4936-962d-08dacd68cb9a x-ms-exchange-slblob-mailprops: QTH5HqBtTM9VAsi1JxC6Ml+Hf6/NwDWVdRJOIvyxqzzyE2ApilPP8UCGvats091BqexrnnGqd2bXLC/9os1R8JCPlsuhFgKdrPT3Owa64kgfWze+1cmxDwOpby0ePDtRrVHOnDXTK3kucf2IHa7FN3I8f5Xd9lxtzSFF+Sp7VKyvgErpqmWSA0BlZjsucy5YRzrGZ6XABV9blAd4i33CqUol9RVCdqNPn4JGg1OHsHUABhU/MxyIzpfratMFjDU2qKtJF5cXreAYUOirpa7K/PgC5W8hE9PKFnqHgOPF/c+2LLGpBcOdcKQx6am1x7tszA/p+Lx/TH4UEpHjHPkLjAWqmgq8RzZzfuUYTpQGzX0XoUfYEiiTYTQIikAQgnPYRyEkWhV+2lBlmZ3TQJos8IzhSPRcxgizouI1BmpsasVo3GsvALoBw+BaWaQP4t0tjdY5RRokmwLV/4N0lIKXqWaESKETz/DtibSii6BiMsLLXpoceZ8RBtDtJIRVwL2i/pEtxz/DBPSw8A2SFlrmsc9qhnX5dulYMabMwkiu8KjAvEhHa+xOhQwVjt5FXhgr46n6aZKC4uRPeZ4pPXnUJVVMTCOPxAzI7GqRrF8suNaWJh/xGo3JSLQeOFKIO7htk5wr6ttspSNCqM7KvyKkH9queOTbgXwclA+ATk0CxRDX92F1P0kWOb3kROYKq4HdIH2EQGhY6V5vPfqgmz54LcRbLvygOhIy7WiNWE6F11+RCDb5i3cKtCLymhi7ixg6DfEWuC6EUMlvZh0DuI3jrCrec3GoUWyM46j1fIkR4nu3d6LdjYyLeuOa31fDN5iPWsErt/t7ME8= x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 5bRLwggZrVNl3DaNb1xI7z49GNWxpbAq30WS03CYqedj8G0tHN6Kb4JNeyMqS8nyoY25IR50iK4WUYhHNwLO8KUm8InYLTEQgS51V01n9sjmdEouPuNDEMlLmSi2sixNo1Nlz4o3F3FgjsNO/0JtKoARsQo8lrZIbCDAoZKUDkEqTs3pzyXLFqyK02RIngDETyQw/4c9HzQe7zuky1Fx5NmsUZng7FYbPXfBmUC99B7wNEtXvyi4ma7AJRYgLcpu4l8u2VO7vXz2SuEc2xyHXhgana6mJBbCgs4Fty/xTO7QHu35FBShgK4RBMAGS1D2HMXcwUQy1ElZ9gduzp5O4pD6PbBRzvKCysQ3iy1KLz18J4hedEofSA9NyNDW0qAtupKg8wNhfR+zNzETkNmmcHxBA7t40wK1zQhLc0kX7kYfoiqts+aweoO5kIK4onD8u69y2i67QbQ8XQCsdcyjoMivX+pv4O6iFuWmp1FtufDft0ORxI027xNhMMlkmQKl6AWclJa9e9nmqIZVuA1mk5pqE0HTOkB1E6QW9XRj9YEm9v+/REVoET5Wc39GlIUU/VNAoq0cVtcieot0YWEHA0T/Ov7/g0bRZ583Ce5RH7Gxb0mK5vxh22EaF1BC0Lqq7JzOb3T6CQuFWImGHvNrEPs/1Dtu4JDTdrOR9totF7I= x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?AIuPiRw9P8SolWBoxuF8eQSHikZ8u0nkh9tq8vXyfFsn0OnMm5Ns3KveSJ?= =?iso-8859-1?Q?uKP+juR7nvm8EWjey/kgIKI/RNidKYpGsAtkaaNPDQQ2kbfngiHoECJAcz?= =?iso-8859-1?Q?y66EWnii2aHLjYYe9kmK3PYTDYH2zBuEMfIwHEpXqyijq8xwa9zepJWZbO?= =?iso-8859-1?Q?UuRyuJ4T+TopQPgwGzAnkokeSmaFwYb8taDh/qYLLL1HRJwOWYfyk/FVa6?= =?iso-8859-1?Q?ZmKes47OHMusISGv6OCj1WmZySoXsDrV7TM66obqWOP/x8TRC2TVb5dsBq?= =?iso-8859-1?Q?k7lYtJO/yd8r83xdk+To6ydnTSgnsU4smErGmW8PKMyuMq0kH116qq9b8W?= =?iso-8859-1?Q?MA2SRefdlTJeeA8g2qUSBQ6gf8RkSlrV86kjyJOThGQtj3SGL/r7YYP6o2?= =?iso-8859-1?Q?jaKDCSK9VdmWLxsiHCplFMjU5NsmKCUATP5nphTc/B7wCekMDCtcdjuPn2?= =?iso-8859-1?Q?VjQGJ2Jz9ppBpp28ef/ziLWvdnPLxhpc6cdFr7LURP/Y+ZGCmHv4oulFKO?= =?iso-8859-1?Q?Fepy9mSsmmuGD/McWcrml9C0nBE4JHQF/iumG5qbRTVnNQ7ebY2qxPpAeO?= =?iso-8859-1?Q?prRsySj50/o3HdCK4qbonwI+Kq/zLYIkKl5je4tu9OoZLO8hFvbFfSzJ1g?= =?iso-8859-1?Q?v7LBtpn7BD9o/h5HdUX84dtQaajWo4Dad50G6WybzQF4UKBgQTXMLt7lJi?= =?iso-8859-1?Q?P7U+Rc59s8aTu1DI9BTC+0kjOfQnEM0SuRM+pEowlGrJn/hQMK82ONl1Cl?= =?iso-8859-1?Q?6KLLGh5wAOeFvbaDz9avJEjih0Wjk97OenhqR+ZJ19b5K4loZ59pxYmJBc?= =?iso-8859-1?Q?jItQKui1miYaFMS4oL9EekDtQlnAS+FGiDVHPqbe7pLHJslQkh1aBrkD4/?= =?iso-8859-1?Q?OCgPRPGZ+Gny1Qvvhy6BdPIjpsa0gapdrR9zXOkS00z3r6hpe9mlBzyYnQ?= =?iso-8859-1?Q?yKRSt98EL0/70PD5/wU70QCY+YHUn5G5fw7VS2DRXw8qdpZEZ0f8+DQyYG?= =?iso-8859-1?Q?uXLMgd4xNzFXNUpwlzdyiZazXTGicBe1K/dS/ibtzBifRV3RRepkeKdafC?= =?iso-8859-1?Q?1lXOKqSMffIQo9hOMam9rIU0SWC0lQSQySiV6twFWsTAdCyXJdIqqR2jY2?= =?iso-8859-1?Q?4+i2F7BxFmBLYf0YFdlr4xACWYjVVsJu3MvgOFtbnHmujPYhDmtvOTiA/0?= =?iso-8859-1?Q?zv+256YsvL7kouC4A+296JPxAcY/9gfnCbMzM1UO3dY7IU/s5C4Wj8RJT8?= =?iso-8859-1?Q?RIq23ehz+9rfRocwaNOhh0GBJk4/sVsQ+n60OZJ2F4eFJvX+fB05roh8q1?= =?iso-8859-1?Q?XUSl?= MIME-Version: 1.0 X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SYZP282MB3252.AUSP282.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: 0abf34b9-f611-4936-962d-08dacd68cb9a X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Nov 2022 15:38:40.1920 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SYZP282MB3309 Message-ID-Hash: MUT6XAA7AXV44XOTB574JOJOSUDUG73W X-Message-ID-Hash: MUT6XAA7AXV44XOTB574JOJOSUDUG73W X-MailFrom: ATMGND@OUTLOOK.COM X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-seabios.seabios.org-0; header-match-seabios.seabios.org-1; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: "seabios@seabios.org" , qi zhou X-Mailman-Version: 3.3.6b1 Precedence: list Subject: [SeaBIOS] Re: [PATCH] fix wrong init of keyboard/mouse's if first interface is not boot protocol List-Id: SeaBIOS mailing list Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Content-Transfer-Encoding: quoted-printable Authentication-Results: coreboot.org; auth=pass smtp.auth=mailman@coreboot.org smtp.mailfrom=seabios-bounces@seabios.org X-Spamd-Bar: ---- X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1669217947573100001 Content-Type: text/plain; charset="utf-8" Below is the full modification I have made, maybe someone can review it. th= e logic is traverse all=C2=A0Interface Descriptors, and if found any mouse = boot protocol, then use mouse protocol. Or just use the orginal patch I sent before From 6d7c25a249e31b3e5c4b30ce23cae89d70548df6 Mon Sep 17 00:00:00 2001 From: Qi Zhou Date: Mon, 14 Nov 2022 20:55:44 +0800 Subject: [PATCH] fix wrong init of keyboard/mouse if first interface is not =C2=A0boot protocol There is always some endpoint descriptors after each interface descriptor, = We should only decrement num_iface if interface type is USB_DT_INTERFACE, see https://www.beyondlogic.org/usbnutshell/usb5.shtml#ConfigurationDescriptors Signed-off-by: Qi Zhou --- =C2=A0src/hw/usb-hid.c | 13 ++++++++----- =C2=A0src/hw/usb.c =C2=A0 =C2=A0 | 33 +++++++++++++++++++++------------ =C2=A02 files changed, 29 insertions(+), 17 deletions(-) diff --git a/src/hw/usb-hid.c b/src/hw/usb-hid.c index 92c6b19..dec198a 100644 --- a/src/hw/usb-hid.c +++ b/src/hw/usb-hid.c @@ -22,13 +22,13 @@ struct usb_pipe *mouse_pipe VARFSEG; =C2=A0 =C2=A0// Send USB HID protocol message. =C2=A0static int -set_protocol(struct usb_pipe *pipe, u16 val) +set_protocol(struct usb_pipe *pipe, u16 val, u16 inferface) =C2=A0{ =C2=A0 =C2=A0 =C2=A0struct usb_ctrlrequest req; =C2=A0 =C2=A0 =C2=A0req.bRequestType =3D USB_DIR_OUT | USB_TYPE_CLASS | USB= _RECIP_INTERFACE; =C2=A0 =C2=A0 =C2=A0req.bRequest =3D HID_REQ_SET_PROTOCOL; =C2=A0 =C2=A0 =C2=A0req.wValue =3D val; - =C2=A0 =C2=A0req.wIndex =3D 0; + =C2=A0 =C2=A0req.wIndex =3D inferface; =C2=A0 =C2=A0 =C2=A0req.wLength =3D 0; =C2=A0 =C2=A0 =C2=A0return usb_send_default_control(pipe, &req, NULL); =C2=A0} @@ -76,9 +76,12 @@ usb_kbd_setup(struct usbdevice_s *usbdev =C2=A0 =C2=A0 =C2=A0} =C2=A0 =C2=A0 =C2=A0 =C2=A0// Enable "boot" protocol. - =C2=A0 =C2=A0int ret =3D set_protocol(usbdev->defpipe, 0); - =C2=A0 =C2=A0if (ret) + =C2=A0 =C2=A0int ret =3D set_protocol(usbdev->defpipe, 0, usbdev->iface->= bInterfaceNumber); + =C2=A0 =C2=A0if (ret) { + =C2=A0 =C2=A0 =C2=A0 =C2=A0dprintf(3, "Failed to set boot protocol\n"); =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0return -1; + =C2=A0 =C2=A0} + =C2=A0 =C2=A0 =C2=A0// Periodically send reports to enable key repeat. =C2=A0 =C2=A0 =C2=A0ret =3D set_idle(usbdev->defpipe, KEYREPEATMS); =C2=A0 =C2=A0 =C2=A0if (ret) @@ -118,7 +121,7 @@ usb_mouse_setup(struct usbdevice_s *usbdev =C2=A0 =C2=A0 =C2=A0} =C2=A0 =C2=A0 =C2=A0 =C2=A0// Enable "boot" protocol. - =C2=A0 =C2=A0int ret =3D set_protocol(usbdev->defpipe, 0); + =C2=A0 =C2=A0int ret =3D set_protocol(usbdev->defpipe, 0, usbdev->iface->= bInterfaceNumber); =C2=A0 =C2=A0 =C2=A0if (ret) =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0return -1; =C2=A0 diff --git a/src/hw/usb.c b/src/hw/usb.c index 38a866a..00fe586 100644 --- a/src/hw/usb.c +++ b/src/hw/usb.c @@ -370,22 +370,31 @@ configure_usb_device(struct usbdevice_s *usbdev) =C2=A0 =C2=A0 =C2=A0// interfaces of the first configuration. =C2=A0 =C2=A0 =C2=A0int num_iface =3D config->bNumInterfaces; =C2=A0 =C2=A0 =C2=A0void *config_end =3D (void*)config + config->wTotalLeng= th; - =C2=A0 =C2=A0struct usb_interface_descriptor *iface =3D (void*)(&config[1= ]); + =C2=A0 =C2=A0struct usb_interface_descriptor *iface_walker =3D (void*)(&c= onfig[1]), *iface =3D NULL; =C2=A0 =C2=A0 =C2=A0for (;;) { - =C2=A0 =C2=A0 =C2=A0 =C2=A0if (!num_iface-- || (void*)iface + iface->bLen= gth > config_end) - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0// Not a supported device. - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0goto fail; - =C2=A0 =C2=A0 =C2=A0 =C2=A0if (iface->bDescriptorType =3D=3D USB_DT_INTER= FACE - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0&& (iface->bInterfaceClass =3D= =3D USB_CLASS_HUB - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|| (iface->bInterf= aceClass =3D=3D USB_CLASS_MASS_STORAGE - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0&& (= iface->bInterfaceProtocol =3D=3D US_PR_BULK - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0|| iface->bInterfaceProtocol =3D=3D US_PR_UAS)) - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|| (iface->bInterf= aceClass =3D=3D USB_CLASS_HID - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0&& i= face->bInterfaceSubClass =3D=3D USB_INTERFACE_SUBCLASS_BOOT))) + =C2=A0 =C2=A0 =C2=A0 =C2=A0if (!num_iface || (void*)iface_walker + iface_= walker->bLength > config_end) =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0break; - =C2=A0 =C2=A0 =C2=A0 =C2=A0iface =3D (void*)iface + iface->bLength; + =C2=A0 =C2=A0 =C2=A0 =C2=A0if (iface_walker->bDescriptorType =3D=3D USB_D= T_INTERFACE) { + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0num_iface--; + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if(iface_walker->bInterfaceClass= =3D=3D USB_CLASS_HUB + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0|| (iface_walker->= bInterfaceClass =3D=3D USB_CLASS_MASS_STORAGE + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0&& (= iface_walker->bInterfaceProtocol =3D=3D US_PR_BULK + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0|| iface_walker->bInterfaceProtocol =3D=3D US_PR_UAS))){ + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0iface =3D iface_wa= lker; + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0break; + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0} else if(iface_walker->bInterfa= ceClass =3D=3D USB_CLASS_HID + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0&& i= face_walker->bInterfaceSubClass =3D=3D USB_INTERFACE_SUBCLASS_BOOT) { + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (iface =3D=3D N= ULL || iface_walker->bInterfaceProtocol =3D=3D USB_INTERFACE_PROTOCOL_MOUSE) + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0ifac= e =3D iface_walker; + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0} + =C2=A0 =C2=A0 =C2=A0 =C2=A0} + =C2=A0 =C2=A0 =C2=A0 =C2=A0iface_walker =3D (void*)iface_walker + iface_w= alker->bLength; =C2=A0 =C2=A0 =C2=A0} =C2=A0 + =C2=A0 =C2=A0if(iface =3D=3D NULL) + =C2=A0 =C2=A0 =C2=A0 =C2=A0// Not a supported device. + =C2=A0 =C2=A0 =C2=A0 =C2=A0goto fail; + =C2=A0 =C2=A0 =C2=A0// Set the configuration. =C2=A0 =C2=A0 =C2=A0ret =3D set_configuration(usbdev->defpipe, config->bCon= figurationValue); =C2=A0 =C2=A0 =C2=A0if (ret) --=20 2.25.1 From: qi zhou Sent: Wednesday, November 23, 2022 23:31 To: Kevin O'Connor Cc: seabios@seabios.org Subject: Re: [SeaBIOS] [PATCH] fix wrong init of keyboard/mouse's if first = interface is not boot protocol=20 =C2=A0 I found this problem when I use qemu with usb passthrough. The original problem is a little more complex, The patch I send only fix pa= rt of it The problem is I have a rapoo keyboard and a rapoo mouse. The rapoo mouse, it report 2 boot protocols on first configuration descript= or, first one is keyboard protocol, second one is mouse protocol. So when boot, seabios will found two devices with keyboard boot protocol on= first config descriptor's first Interface Descriptor. but seabios can use = only one keyboard. see definition of global variable keyboard_pipe In some situation, if seabios initialize the buggy mouse after keyboard, It= treat the mouse as keyboard, and ignore the true keyboard. the result is I= cannot use the true keyboard I think this mouse may buggy or less common, so I did not include all modif= iecations in the patch But I do found the code in=C2=A0 configure_usb_device=C2=A0 is wrong. may b= e there is some keyboard/mouse's boot protocol interface is not the first i= nterface ? The rapoo mouse's device descriptor root@h470:~# lsusb -d 24ae:4104 -v Bus 001 Device 012: ID 24ae:4104 Rapoo Rapoo Gaming Mouse Device Descriptor: =C2=A0 bLength=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 18 =C2=A0 bDescriptorType=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1 =C2=A0 bcdUSB=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0 2.00 =C2=A0 bDeviceClass=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 0=20 =C2=A0 bDeviceSubClass=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0=20 =C2=A0 bDeviceProtocol=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0=20 =C2=A0 bMaxPacketSize0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 8 =C2=A0 idVendor=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= 0x24ae=20 =C2=A0 idProduct=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x41= 04=20 =C2=A0 bcdDevice=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 2.0d =C2=A0 iManufacturer=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 1 Rapoo =C2=A0 iProduct=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 2 Rapoo Gaming Mouse =C2=A0 iSerial=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0=20 =C2=A0 bNumConfigurations=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1 =C2=A0 Configuration Descriptor: =C2=A0=C2=A0=C2=A0 bLength=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 9 =C2=A0=C2=A0=C2=A0 bDescriptorType=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 2 =C2=A0=C2=A0=C2=A0 wTotalLength=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0x005b =C2=A0=C2=A0=C2=A0 bNumInterfaces=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 3 =C2=A0=C2=A0=C2=A0 bConfigurationValue=C2=A0=C2=A0=C2=A0=C2=A0 1 =C2=A0=C2=A0=C2=A0 iConfiguration=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0 0=20 =C2=A0=C2=A0=C2=A0 bmAttributes=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 0xa0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 (Bus Powered) =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Remote Wakeup =C2=A0=C2=A0=C2=A0 MaxPower=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 350mA =C2=A0=C2=A0=C2=A0 Interface Descriptor: =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bLength=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 9 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bDescriptorType=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 4 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bInterfaceNumber=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bAlternateSetting=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bNumEndpoints=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bInterfaceClass=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 3 Human Interface Device =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bInterfaceSubClass=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 1 Boot Interface Subclass =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bInterfaceProtocol=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 1 Keyboard =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 iInterface=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0=20 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 HID Device Descriptor: =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bLength=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 9 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bDescriptorType=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 33 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bcdHID=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1.= 10 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bCountryCode=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0 Not supported =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bNumDescriptors=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bDescriptorType=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 34 Report =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 wDescriptorLength=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 59 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Report Descriptors:=20 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ** UNAVAILABLE= ** =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Endpoint Descriptor: =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bLength=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 7 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bDescriptorType=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 5 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bEndpointAddress=C2=A0=C2=A0=C2= =A0=C2=A0 0x81=C2=A0 EP 1 IN =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bmAttributes=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 3 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Transfer Type=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Interrupt =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Synch Type=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= None =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Usage Type=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= Data =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 wMaxPacketSize=C2=A0=C2=A0=C2=A0= =C2=A0 0x0008=C2=A0 1x 8 bytes =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bInterval=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 4 =C2=A0=C2=A0=C2=A0 Interface Descriptor: =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bLength=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 9 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bDescriptorType=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 4 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bInterfaceNumber=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 1 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bAlternateSetting=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bNumEndpoints=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bInterfaceClass=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 3 Human Interface Device =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bInterfaceSubClass=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 1 Boot Interface Subclass =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bInterfaceProtocol=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 2 Mouse =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 iInterface=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0=20 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 HID Device Descriptor: =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bLength=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 9 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bDescriptorType=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 33 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bcdHID=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1.= 10 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bCountryCode=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0 Not supported =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bNumDescriptors=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bDescriptorType=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 34 Report =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 wDescriptorLength=C2= =A0=C2=A0=C2=A0=C2=A0 148 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Report Descriptors:=20 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ** UNAVAILABLE= ** =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Endpoint Descriptor: =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bLength=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 7 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bDescriptorType=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 5 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bEndpointAddress=C2=A0=C2=A0=C2= =A0=C2=A0 0x82=C2=A0 EP 2 IN =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bmAttributes=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 3 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Transfer Type=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Interrupt =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Synch Type=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= None =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Usage Type=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= Data =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 wMaxPacketSize=C2=A0=C2=A0=C2=A0= =C2=A0 0x0008=C2=A0 1x 8 bytes =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bInterval=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1 =C2=A0=C2=A0=C2=A0 Interface Descriptor: =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bLength=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 9 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bDescriptorType=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 4 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bInterfaceNumber=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0 2 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bAlternateSetting=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bNumEndpoints=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 2 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bInterfaceClass=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0 3 Human Interface Device =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bInterfaceSubClass=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 0=20 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bInterfaceProtocol=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0 0=20 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 iInterface=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0=20 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 HID Device Descriptor: =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bLength=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0 9 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bDescriptorType=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 33 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bcdHID=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1.= 10 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bCountryCode=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 0 Not supported =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bNumDescriptors=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 1 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bDescriptorType=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 34 Report =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 wDescriptorLength=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0 33 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Report Descriptors:=20 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 ** UNAVAILABLE= ** =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Endpoint Descriptor: =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bLength=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 7 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bDescriptorType=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 5 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bEndpointAddress=C2=A0=C2=A0=C2= =A0=C2=A0 0x83=C2=A0 EP 3 IN =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bmAttributes=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 3 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Transfer Type=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Interrupt =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Synch Type=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= None =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Usage Type=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= Data =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 wMaxPacketSize=C2=A0=C2=A0=C2=A0= =C2=A0 0x0020=C2=A0 1x 32 bytes =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bInterval=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 4 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Endpoint Descriptor: =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bLength=C2=A0=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 7 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bDescriptorType=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 5 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bEndpointAddress=C2=A0=C2=A0=C2= =A0=C2=A0 0x04=C2=A0 EP 4 OUT =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bmAttributes=C2=A0=C2=A0=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 3 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Transfer Type=C2=A0= =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Interrupt =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Synch Type=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= None =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 Usage Type=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0= Data =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 wMaxPacketSize=C2=A0=C2=A0=C2=A0= =C2=A0 0x0020=C2=A0 1x 32 bytes =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 bInterval=C2=A0=C2=A0=C2=A0=C2= =A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 4 can't get device qualifier: Resource temporarily unavailable can't get debug descriptor: Resource temporarily unavailable Device Status:=C2=A0=C2=A0=C2=A0=C2=A0 0x0000 =C2=A0 (Bus Powered) root@h470:~# From: Kevin O'Connor Sent: Wednesday, November 23, 2022 2:22 To: qi zhou Cc: seabios@seabios.org Subject: Re: [SeaBIOS] [PATCH] fix wrong init of keyboard/mouse's if first = interface is not boot protocol=20 =C2=A0 On Mon, Nov 14, 2022 at 12:59:25PM +0000, qi zhou wrote: > From 987b295099267bac3012fd401dc3ea34c3e40071 Mon Sep 17 00:00:00 2001 > From: Qi Zhou > Date: Mon, 14 Nov 2022 20:55:44 +0800 > Subject: [PATCH] fix wrong init of keyboard/mouse's if first interface is= not >=C2=A0 boot protocol >=20 > There is always some endpoint descriptors after each interface descriptor= , We > should only decrement num_iface if interface type is USB_DT_INTERFACE, see > https://www.beyondlogic.org/usbnutshell/usb5.shtml#ConfigurationDescripto= rs Thanks.=C2=A0 The change looks fine to me.=C2=A0 Did this change fix a prob= lem with a particular device, and if so can you provide some details on that device?=C2=A0 Was it on qemu or coreboot? Thanks, -Kevin _______________________________________________ SeaBIOS mailing list -- seabios@seabios.org To unsubscribe send an email to seabios-leave@seabios.org