From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail05.groups.io (mail05.groups.io [45.79.224.7]) by spool.mail.gandi.net (Postfix) with ESMTPS id 249EB780091 for ; Thu, 24 Oct 2024 18:51:54 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=SFLdE2rZQC0ex+sdcIP84orR8SZkHwOaYqeq2pYxqhU=; c=relaxed/simple; d=groups.io; h=From:To:Subject:Thread-Topic:Thread-Index:Date:Message-ID:Accept-Language:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Resent-Date:Resent-From:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Language:Content-Type; s=20240830; t=1729795914; v=1; x=1730055113; b=ToHEYbEq49YsoDtcbUVgAUiSTGDuqqD7ELIP4Duz+PYH44sOMtveUsiSTcYFgO8Dv5DiIYcG J53Gng7pT2p/DZbuh9/TBLcJ+xdORj8j7vHIXnhol2LWGIiGzrsI9hIdqnsMCb6aNleqeP7P/fC lN36JGggQfg+jZX0FckCaD/bXakuBHi8M0bUInn0H0+g2T0zsqfsnfTQ+gl/8tLJ8OkybCk+A8/ q+aNerLa1JNzm0uic4/R50P4LqnZZ2L0ViorKkstl94lrVq70qeiP36/adRxNJZXFtDf/J2R+10 e3MoySlxWPc4KiFRhvHWUfVWosa8sDQ5N0nZ5hf28SRgg== X-Received: by 127.0.0.2 with SMTP id 4PEmYY7687511xrMF02OOwyS; Thu, 24 Oct 2024 11:51:53 -0700 X-Received: from NAM11-BN8-obe.outbound.protection.outlook.com (NAM11-BN8-obe.outbound.protection.outlook.com [40.107.236.97]) by mx.groups.io with SMTP id smtpd.web10.3572.1729794130968565414 for ; Thu, 24 Oct 2024 11:22:11 -0700 X-Received: from BL3PR10MB6164.namprd10.prod.outlook.com (2603:10b6:208:3bf::8) by SA1PR10MB7594.namprd10.prod.outlook.com (2603:10b6:806:38b::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8048.16; Thu, 24 Oct 2024 18:22:06 +0000 X-Received: from BL3PR10MB6164.namprd10.prod.outlook.com ([fe80::e044:7d54:67d6:d308]) by BL3PR10MB6164.namprd10.prod.outlook.com ([fe80::e044:7d54:67d6:d308%5]) with mapi id 15.20.8093.014; Thu, 24 Oct 2024 18:22:06 +0000 From: "Oleg Ilyasov via groups.io" To: "devel@edk2.groups.io" Subject: [edk2-devel] RFC: UsbIo extensions Thread-Topic: RFC: UsbIo extensions Thread-Index: AdsmQWzG3NC7SxisRxyQMzs0NOgXxA== Date: Thu, 24 Oct 2024 18:22:06 +0000 Message-ID: Accept-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: BL3PR10MB6164:EE_|SA1PR10MB7594:EE_ x-ms-office365-filtering-correlation-id: 8b2f9d10-fceb-4703-ae67-08dcf458c40a x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam-message-info: =?us-ascii?Q?vJD9EUTja0mFHQoZl3Gv2OAMl3GHsxpvKRC4un2RGqfBUPNQxXuZa75b/xz7?= =?us-ascii?Q?hwn4X+6oMhW/mfrkL/Ck1sv3IEZSejrp5tb8qR6BpRpB3WgfnZqA8oEuL68t?= =?us-ascii?Q?nC5Ed32r3qkCgM5nKSQcYS+LgKcto0ADlrjrriWbXTFIRF0/XiGrQx7NpuQH?= =?us-ascii?Q?tt97bLucZlBs3BN3ruSAAKSYpHIAcByRO4FMI7bncXMeuh3fmrnQptSyfT46?= =?us-ascii?Q?y4DrwgAEqcLfsDKTFN/fVR9if3NHY9UqSldPchzwD0KCDIAJ/NrI7iVqDPf/?= =?us-ascii?Q?Kg4zh1ei4wkXhfTlPgoMfuxGB/ZBYHS9u7OQm6P0bpBlbNcmZK48+ApYRNuI?= =?us-ascii?Q?OUL4O7KPehj9eJCWbJQXPVRk4dwj2w+sJpgLYz3tZ00eglv4+A0E9LQ/T3iW?= =?us-ascii?Q?HJf31xFfgJwEDywrllMQ1C96SoezXmplWZ8XYd6EL9RN0c0QlfyTZl3dMiZp?= =?us-ascii?Q?t3bPswx08paAvmPdr8zT23KhYW4h7tMx1llzVvB/nGYr4zs4yczkWy61dYN3?= =?us-ascii?Q?Rp4X7YlHXa8ZhH03nezOxCxeSqs9QpUbjWg7svvjbpzvzIpfgg1jUkBruZ4w?= =?us-ascii?Q?6czQVlYwqfRVXlzEW4uGzuzZUFWTG1gvfWQSuJ52E/fQtUy4DyeIXh4el0rv?= =?us-ascii?Q?mqQSiOVSVcRiDXKKiSYrhVwxlWZncEePsqpYzd6d/hsN9eMtDHeuKTTKALiA?= =?us-ascii?Q?NalLG1wBpqJgmwbnE6T8r9DSmjUu/Ma3bTFhQQ2PvtaJXpSBemKkWh6gRpDX?= =?us-ascii?Q?F9QxLK6mDXXTPFn+LDPUYBlofEcXUQbU9JtBUswaBQqVkWjui/NozWRJStPw?= =?us-ascii?Q?9loKiiCzDS+V55/Ae7kskE2nCtjAJiXCqSLOqKuvE6l557Ro9tYEnfTVA23Y?= =?us-ascii?Q?QK+BGZ7PumIClJtgKJ9KLE6JUA/OlPCrVpwO0sRqyUdOcY3WTkwO3ZlW6Nhx?= =?us-ascii?Q?iRK8MqLA6H57uaUwuqhujwSGDi1ly8QZV5caqFlDnVwJhKhL6twWmAm+mnGJ?= =?us-ascii?Q?0jQwmF+i/Qi9l18W7LzY1GYwWvXOyl9I94ruvHTrzNQKAhuno36/vbLKMDUz?= =?us-ascii?Q?k47uA2ixCcL0Ia1S5knKlkrKvUOrD1FMAAsoBpTRdp3Ht0n8fAlvtMIhFg6k?= =?us-ascii?Q?2DQugPenLeHwBcKLIYtws32/efdgbBg2WzrUftYMS6ZQzKCYX9ImEk3PUrcv?= =?us-ascii?Q?uePwvth0h2wT46BT2ddQQ7ntvzqxlTxns9tzbce6wrYn2Ht0L9XFmM1yzdJk?= =?us-ascii?Q?Ac02H/PqvYPIEh2Zmt3xDAJBJl8f+DRZhhoZLhowWOGQPsl17daEIJlWhPUQ?= =?us-ascii?Q?ZYS3VFoE7kyCw59D3t2h2TOA?= x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?kY26UeWXVIZmA4KtAfkgOfmga2xz17+8YcVZFdcUh9c6jKML1I5Kk11XiANB?= =?us-ascii?Q?1qskFhty5H+j78KmnGnk9SV+FjPDbig/BKsl5PwPwLz539lDtr5BmRSwNdWl?= =?us-ascii?Q?6f6tX9N9lDs6E4b7zgVoXf8BQyC+g/m0Ul0NwafIEc8GaQkWASTU0SIgtEsD?= =?us-ascii?Q?S3zb9vyDhyDmtjKvQY9vIk2eZcYCGspls6umh8mGfwV7hT2JtmNjonepi+Zn?= =?us-ascii?Q?FRti452CPEZzffSKCZP+Fz7okWqJKYYWU8f2pwReC9GBlcPfdusi0ETKQ9Kt?= =?us-ascii?Q?7LKik43P9nz/sFNDX4FxMXZeSbsFAzXWC2WA0H8u+YQdQKoiewjwFyO4KN2+?= =?us-ascii?Q?Tb5GlQ+eUZD6Fsn2zVIq7VAZ4QIiODkL5VnKHPDra4XOfzIumV26hrhYPMYb?= =?us-ascii?Q?jEtRGbmJkHvNI3PLj7Ayt2ThDOYdtKEoI4zuyIxbDHfgiJRpzpZTfyFLh3l0?= =?us-ascii?Q?MlXn1O1jONkbhwqJea+gRvYPWofJcUHk2LyLdXs6JvpIB93XoifBpvo6D4/z?= =?us-ascii?Q?GzY+bTGRyl43AgMXZGiEK3OghRgzaxxszCfxu3J3vPzA6vn5FXqCqKNtF00W?= =?us-ascii?Q?0v7m/2Spzp9fR2Pvd8YD8ki4Mil9oTdoi2X/YJjy6MOKk0xM7Ml3iLhjYaKB?= =?us-ascii?Q?YFudC6XnGiZUGs+26qd/L5WvyNDl2RFAyD800gBKGBg5usfxUKB1ESR6WHRn?= =?us-ascii?Q?odsAfKpmIYUwjABifx1gBOWvthCjFUDgf0VAZ7yp+grC1FNXrTAL+ERjPBLD?= =?us-ascii?Q?TbgKDI3v8JGPDpykrKsLqRaOYs/eimmx1SeZOKavArrIpJru6ehBXA/XEbJZ?= =?us-ascii?Q?2IrO8Q7juoVKxxvMwoNvNs/KbtI/uTtewmkmLvNOApZD0kB2E5PnGPaHLDuJ?= =?us-ascii?Q?TqNnyYkoESIlYNX5a+X+/JOJK6qY/rzRdQ6bLPppcuph3netIcaO0wDqKKr8?= =?us-ascii?Q?xtP1qdzkUL1OWXyEze0qXDjzMzc86HvxsjFrpTP3sUlJhrqME6h8jC2I+P2+?= =?us-ascii?Q?1nxegxrrLlQwgSf0hTR4mS6TWL5ucJKRfOOTdZwJRqzuBRxH65jgFBfdH92J?= =?us-ascii?Q?MFpR/k3YDDdAdW7huahF3teG0yYuBMOaNWZVfcO16lwtgWqzgCQ95ZV9RxTj?= =?us-ascii?Q?7Z8kqVQeLbyzW6HECz+xLs3RxQsu4ifEWrVuEYL+XGiy6EpcIyIWYvQ0VeMu?= =?us-ascii?Q?Nd0uyCCy5d/06VDyNyDNRA6PPDIp7bnbodPMJo9frKlVZUk4r/lXsQXNEqRg?= =?us-ascii?Q?niwVSxObgbVpovBBImvmW16OQr+jYvJA+qzEoBmHZ/UEwJug2V+J+UWLSo3S?= =?us-ascii?Q?P+b0RfWisRjttwjiv4c8xifyOrkIkmvulN5pOM1nPGBRUfaXV4+vqu151wwM?= =?us-ascii?Q?Zjo028QLb6m18r7CEcl6TWUePBRDA9jQV17uzBczSGY5eLHkJxcYvkblIskw?= =?us-ascii?Q?H2NjtFVG12B11sq8FCfRdxoR3tdbGKgPdjagJtNlJlR+srofxlX+OW+zGKnH?= =?us-ascii?Q?cqIqjNGYt5xS0DY1tTZ+lPhQ+cJsvZDQz6OQcfTFix6amW68Zs+8nx5KqISF?= =?us-ascii?Q?dM4RjcYPQg+Y//9w0Mg=3D?= MIME-Version: 1.0 X-OriginatorOrg: ami.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BL3PR10MB6164.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8b2f9d10-fceb-4703-ae67-08dcf458c40a X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Oct 2024 18:22:06.2749 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 27e97857-e15f-486c-b58e-86c2b3040f93 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Iho4YBV3pCEcQRL1rMhlmdJccZjm62yBlGJwn05VxXcOojW1Xj0QQK2QgZMkjQIg X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR10MB7594 Precedence: Bulk List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Resent-Date: Thu, 24 Oct 2024 11:51:52 -0700 Resent-From: OlegI@ami.com Reply-To: devel@edk2.groups.io,OlegI@ami.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: yBuJGjShAaq9v8zFu84HWTnLx7686176AA= Content-Language: en-US Content-Type: multipart/related; boundary="_004_BL3PR10MB616496E03BBB80D2FAD18D8EB84E2BL3PR10MB6164namp_"; type="multipart/alternative" X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20240830 header.b=ToHEYbEq; dmarc=pass (policy=none) header.from=groups.io; spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 45.79.224.7 as permitted sender) smtp.mailfrom=bounce@groups.io --_004_BL3PR10MB616496E03BBB80D2FAD18D8EB84E2BL3PR10MB6164namp_ Content-Type: multipart/alternative; boundary="_000_BL3PR10MB616496E03BBB80D2FAD18D8EB84E2BL3PR10MB6164namp_" --_000_BL3PR10MB616496E03BBB80D2FAD18D8EB84E2BL3PR10MB6164namp_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi, All As currently defined, UsbIo protocol performs USB transfers on an interface= as well as it returns various descriptors data for the selected device con= figuration. This functionality is sufficient for common device drivers - mass storage, = keyboard/mouse. However, more complex devices implement several types of de= scriptors that are not supported by UsbIo. These are Class Specific interfa= ce and endpoint descriptors, as well as interface association descriptors. Also, when an interface descriptor contains multiple alternate settings, cu= rrently it is impossible to retrieve the data of non-default setting withou= t selecting this setting. And this selection involves USB transaction with = SET_INTERFACE command. Issuing this command might change the device state a= nd may not be desirable. The list of such "complex" devices includes USB cameras, audio devices, com= munication devices, modems, network controllers. Writing UEFI device driver= for these using existing UsbIo is challenging. A new protocol UsbIoExt extends the functionality of UsbDxeBus and aims to = overcome the above mentioned problems. PR: https://github.com/tianocore/edk2/pull/6368 It implements a protocol that 1) retrieves class specific descriptors 2) al= lows to get data from different alt setting without switching to this setti= ng Interface Association descriptor support will be a different PR that makes = use of this UsbIoExt protocol. Please review and respond. [cid:image001.png@01DB2620.1A038990] Oleg Ilyasov BIOS Core Group American Megatrends International LLC. +1(770)246-8798 -The information contained in this message may be confidential and propriet= ary to American Megatrends (AMI). This communication is intended to be read= only by the individual or entity to whom it is addressed or by their desig= nee. If the reader of this message is not the intended recipient, you are o= n notice that any distribution of this message, in any form, is strictly pr= ohibited. Please promptly notify the sender by reply e-mail or by telephone= at 770-246-8600, and then delete or destroy all copies of the transmission= . -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#120683): https://edk2.groups.io/g/devel/message/120683 Mute This Topic: https://groups.io/mt/109195507/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- --_000_BL3PR10MB616496E03BBB80D2FAD18D8EB84E2BL3PR10MB6164namp_ Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable

Hi, All

 

As currently defined, UsbIo protocol performs USB tr= ansfers on an interface as well as it returns various descriptors data for = the selected device configuration.

 

This functionality is sufficient for common device d= rivers - mass storage, keyboard/mouse. However, more complex devices implem= ent several types of descriptors that are not supported by UsbIo. These are= Class Specific interface and endpoint descriptors, as well as interface association descriptors.

 

Also, when an interface descriptor contains multiple= alternate settings, currently it is impossible to retrieve the data of non= -default setting without selecting this setting. And this selection involve= s USB transaction with SET_INTERFACE command. Issuing this command might change the device state and may not be= desirable.

 

The list of such "complex" devices include= s USB cameras, audio devices, communication devices, modems, network contro= llers. Writing UEFI device driver for these using existing UsbIo is challen= ging.

 

A new protocol UsbIoExt extends the functionality of= UsbDxeBus and aims to overcome the above mentioned problems.

PR: https://github.com/tianocore/edk2/pull/6368

 

It implements a protocol that 1) retrieves class spe= cific descriptors 2) allows to get data from different alt setting without = switching to this setting

 

Interface Association descriptor support will be a d= ifferent PR that makes use of this UsbIoExt protocol.

 

Please review and respond.

 

 

Oleg Ilyasov

 

BIOS Core Group

American Megatrends International LLC.

 

+1(770)246-8798

 

-The information contained in this message may be confidential and propriet= ary to American Megatrends (AMI). This communication is intended to be read= only by the individual or entity to whom it is addressed or by their desig= nee. If the reader of this message is not the intended recipient, you are on notice that any distribution of = this message, in any form, is strictly prohibited. Please promptly notify t= he sender by reply e-mail or by telephone at 770-246-8600, and then delete = or destroy all copies of the transmission.
_._,_._,_

Groups.io Links:

=20 You receive all messages sent to this group. =20 =20

View/Reply Online (#120683) | =20 | Mute= This Topic | New Topic
Your Subscriptio= n | Contact Group Owner | Unsubscribe [rebecca@openfw.io]

_._,_._,_
--_000_BL3PR10MB616496E03BBB80D2FAD18D8EB84E2BL3PR10MB6164namp_-- --_004_BL3PR10MB616496E03BBB80D2FAD18D8EB84E2BL3PR10MB6164namp_ Content-Type: image/png; name="image001.png" Content-Description: image001.png Content-Disposition: inline; filename="image001.png"; size=5507; creation-date="Thu, 24 Oct 2024 18:22:05 GMT"; modification-date="Thu, 24 Oct 2024 18:22:06 GMT" Content-ID: Content-Transfer-Encoding: base64 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 --_004_BL3PR10MB616496E03BBB80D2FAD18D8EB84E2BL3PR10MB6164namp_--