JFIF$        dd7 

Viewing File: /usr/src/kernels/5.14.0-570.32.1.el9_6.x86_64/include/linux/usb/webusb.h

/* SPDX-License-Identifier: GPL-2.0+ */
/*
 * WebUSB descriptors and constants
 *
 * Copyright (C) 2023 Jó Ágila Bitsch <jgilab@gmail.com>
 */

#ifndef	__LINUX_USB_WEBUSB_H
#define	__LINUX_USB_WEBUSB_H

#include "uapi/linux/usb/ch9.h"

/*
 * little endian PlatformCapablityUUID for WebUSB
 * 3408b638-09a9-47a0-8bfd-a0768815b665
 * to identify Platform Device Capability descriptors as referring to WebUSB
 *
 * the UUID above MUST be sent over the wire as the byte sequence:
 * {0x38, 0xB6, 0x08, 0x34, 0xA9, 0x09, 0xA0, 0x47, 0x8B, 0xFD, 0xA0, 0x76, 0x88, 0x15, 0xB6, 0x65}.
 */
#define WEBUSB_UUID \
	UUID_INIT(0x38b60834, 0xa909, 0xa047, 0x8b, 0xfd, 0xa0, 0x76, 0x88, 0x15, 0xb6, 0x65)

/*
 * WebUSB Platform Capability data
 *
 * A device announces support for the
 * WebUSB command set by including the following Platform Descriptor Data in its
 * Binary Object Store associated with the WebUSB_UUID above.
 * See: https://wicg.github.io/webusb/#webusb-platform-capability-descriptor
 */
struct usb_webusb_cap_data {
	__le16 bcdVersion;
#define WEBUSB_VERSION_1_00	cpu_to_le16(0x0100) /* currently only version 1.00 is defined */
	u8  bVendorCode;
	u8  iLandingPage;
#define WEBUSB_LANDING_PAGE_NOT_PRESENT	0
#define WEBUSB_LANDING_PAGE_PRESENT	1 /* we chose the fixed index 1 for the URL descriptor */
} __packed;

#define USB_WEBUSB_CAP_DATA_SIZE	4

/*
 * Get URL Request
 *
 * The request to fetch an URL is defined in https://wicg.github.io/webusb/#get-url as:
 * bmRequestType: (USB_DIR_IN | USB_TYPE_VENDOR) = 11000000B
 * bRequest: bVendorCode
 * wValue: iLandingPage
 * wIndex: GET_URL = 2
 * wLength: Descriptor Length (typically U8_MAX = 255)
 * Data: URL Descriptor
 */
#define WEBUSB_GET_URL 2

/*
 * This descriptor contains a single URL and is returned by the Get URL request.
 *
 * See: https://wicg.github.io/webusb/#url-descriptor
 */
struct webusb_url_descriptor {
	u8  bLength;
#define WEBUSB_URL_DESCRIPTOR_HEADER_LENGTH	3
	u8  bDescriptorType;
#define WEBUSB_URL_DESCRIPTOR_TYPE		3
	u8  bScheme;
#define WEBUSB_URL_SCHEME_HTTP			0
#define WEBUSB_URL_SCHEME_HTTPS			1
#define WEBUSB_URL_SCHEME_NONE			255
	u8  URL[U8_MAX - WEBUSB_URL_DESCRIPTOR_HEADER_LENGTH];
} __packed;

/*
 * Buffer size to hold the longest URL that can be in an URL descriptor
 *
 * The descriptor can be U8_MAX  bytes long.
 * WEBUSB_URL_DESCRIPTOR_HEADER_LENGTH bytes are used for a header.
 * Since the longest prefix that might be stripped is "https://", we may accommodate an additional
 * 8 bytes.
 */
#define WEBUSB_URL_RAW_MAX_LENGTH (U8_MAX - WEBUSB_URL_DESCRIPTOR_HEADER_LENGTH + 8)

#endif /* __LINUX_USB_USBNET_H */
Back to Directory  nL+D550H?Mx ,D"v]qv;6*Zqn)ZP0!1 A "#a$2Qr D8 a Ri[f\mIykIw0cuFcRı?lO7к_f˓[C$殷WF<_W ԣsKcëIzyQy/_LKℂ;C",pFA:/]=H  ~,ls/9ć:[=/#f;)x{ٛEQ )~ =𘙲r*2~ a _V=' kumFD}KYYC)({ *g&f`툪ry`=^cJ.I](*`wq1dđ#̩͑0;H]u搂@:~וKL Nsh}OIR*8:2 !lDJVo(3=M(zȰ+i*NAr6KnSl)!JJӁ* %݉?|D}d5:eP0R;{$X'xF@.ÊB {,WJuQɲRI;9QE琯62fT.DUJ;*cP A\ILNj!J۱+O\͔]ޒS߼Jȧc%ANolՎprULZԛerE2=XDXgVQeӓk yP7U*omQIs,K`)6\G3t?pgjrmۛجwluGtfh9uyP0D;Uڽ"OXlif$)&|ML0Zrm1[HXPlPR0'G=i2N+0e2]]9VTPO׮7h(F*癈'=QVZDF,d߬~TX G[`le69CR(!S2!P <0x<!1AQ "Raq02Br#SCTb ?Ζ"]mH5WR7k.ۛ!}Q~+yԏz|@T20S~Kek *zFf^2X*(@8r?CIuI|֓>^ExLgNUY+{.RѪ τV׸YTD I62'8Y27'\TP.6d&˦@Vqi|8-OΕ]ʔ U=TL8=;6c| !qfF3aů&~$l}'NWUs$Uk^SV:U# 6w++s&r+nڐ{@29 gL u"TÙM=6(^"7r}=6YݾlCuhquympǦ GjhsǜNlɻ}o7#S6aw4!OSrD57%|?x>L |/nD6?/8w#[)L7+6〼T ATg!%5MmZ/c-{1_Je"|^$'O&ޱմTrb$w)R$& N1EtdU3Uȉ1pM"N*(DNyd96.(jQ)X 5cQɎMyW?Q*!R>6=7)Xj5`J]e8%t!+'!1Q5 !1 AQaqё#2"0BRb?Gt^## .llQT $v,,m㵜5ubV =sY+@d{N! dnO<.-B;_wJt6;QJd.Qc%p{ 1,sNDdFHI0ГoXшe黅XۢF:)[FGXƹ/w_cMeD,ʡcc.WDtA$j@:) -# u c1<@ۗ9F)KJ-hpP]_x[qBlbpʖw q"LFGdƶ*s+ډ_Zc"?%t[IP 6J]#=ɺVvvCGsGh1 >)6|ey?Lӣm,4GWUi`]uJVoVDG< SB6ϏQ@ TiUlyOU0kfV~~}SZ@*WUUi##; s/[=!7}"WN]'(L! ~y5g9T̅JkbM' +s:S +B)v@Mj e Cf jE 0Y\QnzG1д~Wo{T9?`Rmyhsy3!HAD]mc1~2LSu7xT;j$`}4->L#vzŏILS ֭T{rjGKC;bpU=-`BsK.SFw4Mq]ZdHS0)tLg