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_info { 24 u32 usb_host_request_2; 25 u32 usb_wlan0_1; 26 u32 hci_func_en; 27 u32 usb3_mac_npi_config_intf_0; 28 u32 usb_endpoint_0; 29 u32 usb_endpoint_2; 30 u8 bulkout_id[RTW89_DMA_CH_NUM]; 31 }; 32 33 struct rtw89_usb_rx_ctrl_block { 34 struct rtw89_dev *rtwdev; 35 struct urb *rx_urb; 36 struct sk_buff *rx_skb; 37 }; 38 39 struct rtw89_usb_tx_ctrl_block { 40 struct rtw89_dev *rtwdev; 41 u8 txch; 42 struct sk_buff_head tx_ack_queue; 43 }; 44 45 struct rtw89_usb { 46 struct rtw89_dev *rtwdev; 47 struct usb_device *udev; 48 const struct rtw89_usb_info *info; 49 50 __le32 *vendor_req_buf; 51 52 atomic_t continual_io_error; 53 54 u8 in_pipe; 55 u8 out_pipe[RTW89_MAX_BULKOUT_NUM]; 56 57 struct workqueue_struct *rxwq; 58 struct rtw89_usb_rx_ctrl_block rx_cb[RTW89_USB_RXCB_NUM]; 59 struct sk_buff_head rx_queue; 60 struct sk_buff_head rx_free_queue; 61 struct work_struct rx_work; 62 struct work_struct rx_urb_work; 63 struct usb_anchor tx_submitted; 64 65 struct sk_buff_head tx_queue[RTW89_TXCH_NUM]; 66 }; 67 68 static inline struct rtw89_usb *rtw89_usb_priv(struct rtw89_dev *rtwdev) 69 { 70 return (struct rtw89_usb *)rtwdev->priv; 71 } 72 73 int rtw89_usb_probe(struct usb_interface *intf, 74 const struct usb_device_id *id); 75 void rtw89_usb_disconnect(struct usb_interface *intf); 76 77 #endif 78