xref: /linux/drivers/net/wireless/realtek/rtw89/usb.h (revision 8be4d31cb8aaeea27bde4b7ddb26e28a89062ebf)
1 /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
2 /* Copyright(c) 2025  Realtek Corporation
3  */
4 
5 #ifndef __RTW89_USB_H__
6 #define __RTW89_USB_H__
7 
8 #include "txrx.h"
9 
10 #define RTW89_USB_VENQT			0x05
11 #define RTW89_USB_VENQT_READ		0xc0
12 #define RTW89_USB_VENQT_WRITE		0x40
13 
14 #define RTW89_USB_RECVBUF_SZ		20480
15 #define RTW89_USB_RXCB_NUM		8
16 #define RTW89_USB_RX_SKB_NUM		16
17 #define RTW89_USB_MAX_RXQ_LEN		512
18 #define RTW89_USB_MOD512_PADDING	4
19 
20 #define RTW89_MAX_ENDPOINT_NUM		9
21 #define RTW89_MAX_BULKOUT_NUM		7
22 
23 struct rtw89_usb_rx_ctrl_block {
24 	struct rtw89_dev *rtwdev;
25 	struct urb *rx_urb;
26 	struct sk_buff *rx_skb;
27 };
28 
29 struct rtw89_usb_tx_ctrl_block {
30 	struct rtw89_dev *rtwdev;
31 	u8 txch;
32 	struct sk_buff_head tx_ack_queue;
33 };
34 
35 struct rtw89_usb {
36 	struct rtw89_dev *rtwdev;
37 	struct usb_device *udev;
38 
39 	__le32 *vendor_req_buf;
40 
41 	atomic_t continual_io_error;
42 
43 	u8 in_pipe;
44 	u8 out_pipe[RTW89_MAX_BULKOUT_NUM];
45 
46 	struct workqueue_struct *rxwq;
47 	struct rtw89_usb_rx_ctrl_block rx_cb[RTW89_USB_RXCB_NUM];
48 	struct sk_buff_head rx_queue;
49 	struct sk_buff_head rx_free_queue;
50 	struct work_struct rx_work;
51 	struct work_struct rx_urb_work;
52 
53 	struct sk_buff_head tx_queue[RTW89_TXCH_NUM];
54 };
55 
rtw89_usb_priv(struct rtw89_dev * rtwdev)56 static inline struct rtw89_usb *rtw89_usb_priv(struct rtw89_dev *rtwdev)
57 {
58 	return (struct rtw89_usb *)rtwdev->priv;
59 }
60 
61 int rtw89_usb_probe(struct usb_interface *intf,
62 		    const struct usb_device_id *id);
63 void rtw89_usb_disconnect(struct usb_interface *intf);
64 
65 #endif
66