1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * USB IrDA Bridge Device Definition 4*4882a593Smuzhiyun */ 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun #ifndef __LINUX_USB_IRDA_H 7*4882a593Smuzhiyun #define __LINUX_USB_IRDA_H 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun /* This device should use Application-specific class */ 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #define USB_SUBCLASS_IRDA 0x02 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun /*-------------------------------------------------------------------------*/ 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun /* Class-Specific requests (bRequest field) */ 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun #define USB_REQ_CS_IRDA_RECEIVING 1 18*4882a593Smuzhiyun #define USB_REQ_CS_IRDA_CHECK_MEDIA_BUSY 3 19*4882a593Smuzhiyun #define USB_REQ_CS_IRDA_RATE_SNIFF 4 20*4882a593Smuzhiyun #define USB_REQ_CS_IRDA_UNICAST_LIST 5 21*4882a593Smuzhiyun #define USB_REQ_CS_IRDA_GET_CLASS_DESC 6 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun /*-------------------------------------------------------------------------*/ 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun /* Class-Specific descriptor */ 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun #define USB_DT_CS_IRDA 0x21 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun /*-------------------------------------------------------------------------*/ 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun /* Data sizes */ 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun #define USB_IRDA_DS_2048 (1 << 5) 34*4882a593Smuzhiyun #define USB_IRDA_DS_1024 (1 << 4) 35*4882a593Smuzhiyun #define USB_IRDA_DS_512 (1 << 3) 36*4882a593Smuzhiyun #define USB_IRDA_DS_256 (1 << 2) 37*4882a593Smuzhiyun #define USB_IRDA_DS_128 (1 << 1) 38*4882a593Smuzhiyun #define USB_IRDA_DS_64 (1 << 0) 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun /* Window sizes */ 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun #define USB_IRDA_WS_7 (1 << 6) 43*4882a593Smuzhiyun #define USB_IRDA_WS_6 (1 << 5) 44*4882a593Smuzhiyun #define USB_IRDA_WS_5 (1 << 4) 45*4882a593Smuzhiyun #define USB_IRDA_WS_4 (1 << 3) 46*4882a593Smuzhiyun #define USB_IRDA_WS_3 (1 << 2) 47*4882a593Smuzhiyun #define USB_IRDA_WS_2 (1 << 1) 48*4882a593Smuzhiyun #define USB_IRDA_WS_1 (1 << 0) 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun /* Min turnaround times in usecs */ 51*4882a593Smuzhiyun 52*4882a593Smuzhiyun #define USB_IRDA_MTT_0 (1 << 7) 53*4882a593Smuzhiyun #define USB_IRDA_MTT_10 (1 << 6) 54*4882a593Smuzhiyun #define USB_IRDA_MTT_50 (1 << 5) 55*4882a593Smuzhiyun #define USB_IRDA_MTT_100 (1 << 4) 56*4882a593Smuzhiyun #define USB_IRDA_MTT_500 (1 << 3) 57*4882a593Smuzhiyun #define USB_IRDA_MTT_1000 (1 << 2) 58*4882a593Smuzhiyun #define USB_IRDA_MTT_5000 (1 << 1) 59*4882a593Smuzhiyun #define USB_IRDA_MTT_10000 (1 << 0) 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun /* Baud rates */ 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun #define USB_IRDA_BR_4000000 (1 << 8) 64*4882a593Smuzhiyun #define USB_IRDA_BR_1152000 (1 << 7) 65*4882a593Smuzhiyun #define USB_IRDA_BR_576000 (1 << 6) 66*4882a593Smuzhiyun #define USB_IRDA_BR_115200 (1 << 5) 67*4882a593Smuzhiyun #define USB_IRDA_BR_57600 (1 << 4) 68*4882a593Smuzhiyun #define USB_IRDA_BR_38400 (1 << 3) 69*4882a593Smuzhiyun #define USB_IRDA_BR_19200 (1 << 2) 70*4882a593Smuzhiyun #define USB_IRDA_BR_9600 (1 << 1) 71*4882a593Smuzhiyun #define USB_IRDA_BR_2400 (1 << 0) 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun /* Additional BOFs */ 74*4882a593Smuzhiyun 75*4882a593Smuzhiyun #define USB_IRDA_AB_0 (1 << 7) 76*4882a593Smuzhiyun #define USB_IRDA_AB_1 (1 << 6) 77*4882a593Smuzhiyun #define USB_IRDA_AB_2 (1 << 5) 78*4882a593Smuzhiyun #define USB_IRDA_AB_3 (1 << 4) 79*4882a593Smuzhiyun #define USB_IRDA_AB_6 (1 << 3) 80*4882a593Smuzhiyun #define USB_IRDA_AB_12 (1 << 2) 81*4882a593Smuzhiyun #define USB_IRDA_AB_24 (1 << 1) 82*4882a593Smuzhiyun #define USB_IRDA_AB_48 (1 << 0) 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun /* IRDA Rate Sniff */ 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun #define USB_IRDA_RATE_SNIFF 1 87*4882a593Smuzhiyun 88*4882a593Smuzhiyun /*-------------------------------------------------------------------------*/ 89*4882a593Smuzhiyun 90*4882a593Smuzhiyun struct usb_irda_cs_descriptor { 91*4882a593Smuzhiyun __u8 bLength; 92*4882a593Smuzhiyun __u8 bDescriptorType; 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun __le16 bcdSpecRevision; 95*4882a593Smuzhiyun __u8 bmDataSize; 96*4882a593Smuzhiyun __u8 bmWindowSize; 97*4882a593Smuzhiyun __u8 bmMinTurnaroundTime; 98*4882a593Smuzhiyun __le16 wBaudRate; 99*4882a593Smuzhiyun __u8 bmAdditionalBOFs; 100*4882a593Smuzhiyun __u8 bIrdaRateSniff; 101*4882a593Smuzhiyun __u8 bMaxUnicastList; 102*4882a593Smuzhiyun } __attribute__ ((packed)); 103*4882a593Smuzhiyun 104*4882a593Smuzhiyun /*-------------------------------------------------------------------------*/ 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun /* Data Format */ 107*4882a593Smuzhiyun 108*4882a593Smuzhiyun #define USB_IRDA_STATUS_MEDIA_BUSY (1 << 7) 109*4882a593Smuzhiyun 110*4882a593Smuzhiyun /* The following is a 4-bit value used for both 111*4882a593Smuzhiyun * inbound and outbound headers: 112*4882a593Smuzhiyun * 113*4882a593Smuzhiyun * 0 - speed ignored 114*4882a593Smuzhiyun * 1 - 2400 bps 115*4882a593Smuzhiyun * 2 - 9600 bps 116*4882a593Smuzhiyun * 3 - 19200 bps 117*4882a593Smuzhiyun * 4 - 38400 bps 118*4882a593Smuzhiyun * 5 - 57600 bps 119*4882a593Smuzhiyun * 6 - 115200 bps 120*4882a593Smuzhiyun * 7 - 576000 bps 121*4882a593Smuzhiyun * 8 - 1.152 Mbps 122*4882a593Smuzhiyun * 9 - 4 Mbps 123*4882a593Smuzhiyun * 10..15 - Reserved 124*4882a593Smuzhiyun */ 125*4882a593Smuzhiyun #define USB_IRDA_STATUS_LINK_SPEED 0x0f 126*4882a593Smuzhiyun 127*4882a593Smuzhiyun #define USB_IRDA_LS_NO_CHANGE 0 128*4882a593Smuzhiyun #define USB_IRDA_LS_2400 1 129*4882a593Smuzhiyun #define USB_IRDA_LS_9600 2 130*4882a593Smuzhiyun #define USB_IRDA_LS_19200 3 131*4882a593Smuzhiyun #define USB_IRDA_LS_38400 4 132*4882a593Smuzhiyun #define USB_IRDA_LS_57600 5 133*4882a593Smuzhiyun #define USB_IRDA_LS_115200 6 134*4882a593Smuzhiyun #define USB_IRDA_LS_576000 7 135*4882a593Smuzhiyun #define USB_IRDA_LS_1152000 8 136*4882a593Smuzhiyun #define USB_IRDA_LS_4000000 9 137*4882a593Smuzhiyun 138*4882a593Smuzhiyun /* The following is a 4-bit value used only for 139*4882a593Smuzhiyun * outbound header: 140*4882a593Smuzhiyun * 141*4882a593Smuzhiyun * 0 - No change (BOF ignored) 142*4882a593Smuzhiyun * 1 - 48 BOFs 143*4882a593Smuzhiyun * 2 - 24 BOFs 144*4882a593Smuzhiyun * 3 - 12 BOFs 145*4882a593Smuzhiyun * 4 - 6 BOFs 146*4882a593Smuzhiyun * 5 - 3 BOFs 147*4882a593Smuzhiyun * 6 - 2 BOFs 148*4882a593Smuzhiyun * 7 - 1 BOFs 149*4882a593Smuzhiyun * 8 - 0 BOFs 150*4882a593Smuzhiyun * 9..15 - Reserved 151*4882a593Smuzhiyun */ 152*4882a593Smuzhiyun #define USB_IRDA_EXTRA_BOFS 0xf0 153*4882a593Smuzhiyun 154*4882a593Smuzhiyun struct usb_irda_inbound_header { 155*4882a593Smuzhiyun __u8 bmStatus; 156*4882a593Smuzhiyun }; 157*4882a593Smuzhiyun 158*4882a593Smuzhiyun struct usb_irda_outbound_header { 159*4882a593Smuzhiyun __u8 bmChange; 160*4882a593Smuzhiyun }; 161*4882a593Smuzhiyun 162*4882a593Smuzhiyun #endif /* __LINUX_USB_IRDA_H */ 163*4882a593Smuzhiyun 164