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. Zeebstatic 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