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