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