1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * USB virtual root hub descriptors 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * (C) Copyright 2014 5*4882a593Smuzhiyun * Stephen Warren swarren@wwwdotorg.org 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * Based on ohci-hcd.c 8*4882a593Smuzhiyun * 9*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 10*4882a593Smuzhiyun */ 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #ifndef __USBROOTHUBDES_H__ 13*4882a593Smuzhiyun #define __USBROOTHUBDES_H__ 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun /* Device descriptor */ 16*4882a593Smuzhiyun static __u8 root_hub_dev_des[] = { 17*4882a593Smuzhiyun 0x12, /* __u8 bLength; */ 18*4882a593Smuzhiyun 0x01, /* __u8 bDescriptorType; Device */ 19*4882a593Smuzhiyun 0x10, /* __u16 bcdUSB; v1.1 */ 20*4882a593Smuzhiyun 0x01, 21*4882a593Smuzhiyun 0x09, /* __u8 bDeviceClass; HUB_CLASSCODE */ 22*4882a593Smuzhiyun 0x00, /* __u8 bDeviceSubClass; */ 23*4882a593Smuzhiyun 0x00, /* __u8 bDeviceProtocol; */ 24*4882a593Smuzhiyun 0x08, /* __u8 bMaxPacketSize0; 8 Bytes */ 25*4882a593Smuzhiyun 0x00, /* __u16 idVendor; */ 26*4882a593Smuzhiyun 0x00, 27*4882a593Smuzhiyun 0x00, /* __u16 idProduct; */ 28*4882a593Smuzhiyun 0x00, 29*4882a593Smuzhiyun 0x00, /* __u16 bcdDevice; */ 30*4882a593Smuzhiyun 0x00, 31*4882a593Smuzhiyun 0x00, /* __u8 iManufacturer; */ 32*4882a593Smuzhiyun 0x01, /* __u8 iProduct; */ 33*4882a593Smuzhiyun 0x00, /* __u8 iSerialNumber; */ 34*4882a593Smuzhiyun 0x01, /* __u8 bNumConfigurations; */ 35*4882a593Smuzhiyun }; 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun /* Configuration descriptor */ 38*4882a593Smuzhiyun static __u8 root_hub_config_des[] = { 39*4882a593Smuzhiyun 0x09, /* __u8 bLength; */ 40*4882a593Smuzhiyun 0x02, /* __u8 bDescriptorType; Configuration */ 41*4882a593Smuzhiyun 0x19, /* __u16 wTotalLength; */ 42*4882a593Smuzhiyun 0x00, 43*4882a593Smuzhiyun 0x01, /* __u8 bNumInterfaces; */ 44*4882a593Smuzhiyun 0x01, /* __u8 bConfigurationValue; */ 45*4882a593Smuzhiyun 0x00, /* __u8 iConfiguration; */ 46*4882a593Smuzhiyun 0x40, /* __u8 bmAttributes; 47*4882a593Smuzhiyun * Bit 7: Bus-powered 48*4882a593Smuzhiyun * 6: Self-powered, 49*4882a593Smuzhiyun * 5 Remote-wakwup, 50*4882a593Smuzhiyun * 4..0: resvd 51*4882a593Smuzhiyun */ 52*4882a593Smuzhiyun 0x00, /* __u8 MaxPower; */ 53*4882a593Smuzhiyun /* interface */ 54*4882a593Smuzhiyun 0x09, /* __u8 if_bLength; */ 55*4882a593Smuzhiyun 0x04, /* __u8 if_bDescriptorType; Interface */ 56*4882a593Smuzhiyun 0x00, /* __u8 if_bInterfaceNumber; */ 57*4882a593Smuzhiyun 0x00, /* __u8 if_bAlternateSetting; */ 58*4882a593Smuzhiyun 0x01, /* __u8 if_bNumEndpoints; */ 59*4882a593Smuzhiyun 0x09, /* __u8 if_bInterfaceClass; HUB_CLASSCODE */ 60*4882a593Smuzhiyun 0x00, /* __u8 if_bInterfaceSubClass; */ 61*4882a593Smuzhiyun 0x00, /* __u8 if_bInterfaceProtocol; */ 62*4882a593Smuzhiyun 0x00, /* __u8 if_iInterface; */ 63*4882a593Smuzhiyun /* endpoint */ 64*4882a593Smuzhiyun 0x07, /* __u8 ep_bLength; */ 65*4882a593Smuzhiyun 0x05, /* __u8 ep_bDescriptorType; Endpoint */ 66*4882a593Smuzhiyun 0x81, /* __u8 ep_bEndpointAddress; IN Endpoint 1 */ 67*4882a593Smuzhiyun 0x03, /* __u8 ep_bmAttributes; Interrupt */ 68*4882a593Smuzhiyun 0x02, /* __u16 ep_wMaxPacketSize; ((MAX_ROOT_PORTS + 1) / 8 */ 69*4882a593Smuzhiyun 0x00, 70*4882a593Smuzhiyun 0xff, /* __u8 ep_bInterval; 255 ms */ 71*4882a593Smuzhiyun }; 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun #ifdef WANT_USB_ROOT_HUB_HUB_DES 74*4882a593Smuzhiyun static unsigned char root_hub_hub_des[] = { 75*4882a593Smuzhiyun 0x09, /* __u8 bLength; */ 76*4882a593Smuzhiyun 0x29, /* __u8 bDescriptorType; Hub-descriptor */ 77*4882a593Smuzhiyun 0x02, /* __u8 bNbrPorts; */ 78*4882a593Smuzhiyun 0x00, /* __u16 wHubCharacteristics; */ 79*4882a593Smuzhiyun 0x00, 80*4882a593Smuzhiyun 0x01, /* __u8 bPwrOn2pwrGood; 2ms */ 81*4882a593Smuzhiyun 0x00, /* __u8 bHubContrCurrent; 0 mA */ 82*4882a593Smuzhiyun 0x00, /* __u8 DeviceRemovable; *** 7 Ports max *** */ 83*4882a593Smuzhiyun 0xff, /* __u8 PortPwrCtrlMask; *** 7 ports max *** */ 84*4882a593Smuzhiyun }; 85*4882a593Smuzhiyun #endif 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun static unsigned char root_hub_str_index0[] = { 88*4882a593Smuzhiyun 0x04, /* __u8 bLength; */ 89*4882a593Smuzhiyun 0x03, /* __u8 bDescriptorType; String-descriptor */ 90*4882a593Smuzhiyun 0x09, /* __u8 lang ID */ 91*4882a593Smuzhiyun 0x04, /* __u8 lang ID */ 92*4882a593Smuzhiyun }; 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun static unsigned char root_hub_str_index1[] = { 95*4882a593Smuzhiyun 32, /* __u8 bLength; */ 96*4882a593Smuzhiyun 0x03, /* __u8 bDescriptorType; String-descriptor */ 97*4882a593Smuzhiyun 'U', /* __u8 Unicode */ 98*4882a593Smuzhiyun 0, /* __u8 Unicode */ 99*4882a593Smuzhiyun '-', /* __u8 Unicode */ 100*4882a593Smuzhiyun 0, /* __u8 Unicode */ 101*4882a593Smuzhiyun 'B', /* __u8 Unicode */ 102*4882a593Smuzhiyun 0, /* __u8 Unicode */ 103*4882a593Smuzhiyun 'o', /* __u8 Unicode */ 104*4882a593Smuzhiyun 0, /* __u8 Unicode */ 105*4882a593Smuzhiyun 'o', /* __u8 Unicode */ 106*4882a593Smuzhiyun 0, /* __u8 Unicode */ 107*4882a593Smuzhiyun 't', /* __u8 Unicode */ 108*4882a593Smuzhiyun 0, /* __u8 Unicode */ 109*4882a593Smuzhiyun ' ', /* __u8 Unicode */ 110*4882a593Smuzhiyun 0, /* __u8 Unicode */ 111*4882a593Smuzhiyun 'R', /* __u8 Unicode */ 112*4882a593Smuzhiyun 0, /* __u8 Unicode */ 113*4882a593Smuzhiyun 'o', /* __u8 Unicode */ 114*4882a593Smuzhiyun 0, /* __u8 Unicode */ 115*4882a593Smuzhiyun 'o', /* __u8 Unicode */ 116*4882a593Smuzhiyun 0, /* __u8 Unicode */ 117*4882a593Smuzhiyun 't', /* __u8 Unicode */ 118*4882a593Smuzhiyun 0, /* __u8 Unicode */ 119*4882a593Smuzhiyun ' ', /* __u8 Unicode */ 120*4882a593Smuzhiyun 0, /* __u8 Unicode */ 121*4882a593Smuzhiyun 'H', /* __u8 Unicode */ 122*4882a593Smuzhiyun 0, /* __u8 Unicode */ 123*4882a593Smuzhiyun 'u', /* __u8 Unicode */ 124*4882a593Smuzhiyun 0, /* __u8 Unicode */ 125*4882a593Smuzhiyun 'b', /* __u8 Unicode */ 126*4882a593Smuzhiyun 0, /* __u8 Unicode */ 127*4882a593Smuzhiyun }; 128*4882a593Smuzhiyun 129*4882a593Smuzhiyun #endif 130