/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ /* Copyright(c) 2025 Realtek Corporation */ #ifndef __RTW89_USB_H__ #define __RTW89_USB_H__ #include "txrx.h" #define RTW89_USB_VENQT 0x05 #define RTW89_USB_VENQT_READ 0xc0 #define RTW89_USB_VENQT_WRITE 0x40 #define RTW89_USB_RECVBUF_SZ 20480 #define RTW89_USB_RXCB_NUM 8 #define RTW89_USB_RX_SKB_NUM 16 #define RTW89_USB_MAX_RXQ_LEN 512 #define RTW89_USB_MOD512_PADDING 4 #define RTW89_MAX_ENDPOINT_NUM 9 #define RTW89_MAX_BULKOUT_NUM 7 struct rtw89_usb_rx_ctrl_block { struct rtw89_dev *rtwdev; struct urb *rx_urb; struct sk_buff *rx_skb; }; struct rtw89_usb_tx_ctrl_block { struct rtw89_dev *rtwdev; u8 txch; struct sk_buff_head tx_ack_queue; }; struct rtw89_usb { struct rtw89_dev *rtwdev; struct usb_device *udev; __le32 *vendor_req_buf; atomic_t continual_io_error; u8 in_pipe; u8 out_pipe[RTW89_MAX_BULKOUT_NUM]; struct workqueue_struct *rxwq; struct rtw89_usb_rx_ctrl_block rx_cb[RTW89_USB_RXCB_NUM]; struct sk_buff_head rx_queue; struct sk_buff_head rx_free_queue; struct work_struct rx_work; struct work_struct rx_urb_work; struct sk_buff_head tx_queue[RTW89_TXCH_NUM]; }; static inline struct rtw89_usb *rtw89_usb_priv(struct rtw89_dev *rtwdev) { return (struct rtw89_usb *)rtwdev->priv; } int rtw89_usb_probe(struct usb_interface *intf, const struct usb_device_id *id); void rtw89_usb_disconnect(struct usb_interface *intf); #endif