0001
0002
0003
0004 #ifndef __RTL_USB_H__
0005 #define __RTL_USB_H__
0006
0007 #include <linux/skbuff.h>
0008
0009 #define RTL_RX_DESC_SIZE 24
0010
0011 #define RTL_USB_DEVICE(vend, prod, cfg) \
0012 .match_flags = USB_DEVICE_ID_MATCH_DEVICE, \
0013 .idVendor = (vend), \
0014 .idProduct = (prod), \
0015 .driver_info = (kernel_ulong_t)&(cfg)
0016
0017 #define USB_HIGH_SPEED_BULK_SIZE 512
0018 #define USB_FULL_SPEED_BULK_SIZE 64
0019
0020 #define RTL_USB_MAX_TXQ_NUM 4
0021 #define RTL_USB_MAX_EP_NUM 6
0022 #define RTL_USB_MAX_TX_URBS_NUM 8
0023
0024 enum rtl_txq {
0025
0026
0027
0028 RTL_TXQ_BK,
0029 RTL_TXQ_BE,
0030 RTL_TXQ_VI,
0031 RTL_TXQ_VO,
0032
0033 RTL_TXQ_BCN,
0034 RTL_TXQ_MGT,
0035 RTL_TXQ_HI,
0036
0037
0038 __RTL_TXQ_NUM,
0039 };
0040
0041 struct rtl_ep_map {
0042 u32 ep_mapping[__RTL_TXQ_NUM];
0043 };
0044
0045 struct _trx_info {
0046 struct rtl_usb *rtlusb;
0047 u32 ep_num;
0048 };
0049
0050 static inline void _rtl_install_trx_info(struct rtl_usb *rtlusb,
0051 struct sk_buff *skb,
0052 u32 ep_num)
0053 {
0054 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
0055
0056 info->rate_driver_data[0] = rtlusb;
0057 info->rate_driver_data[1] = (void *)(__kernel_size_t)ep_num;
0058 }
0059
0060
0061 enum rtl_usb_state {
0062 USB_STATE_STOP = 0,
0063 USB_STATE_START = 1,
0064 };
0065
0066 #define IS_USB_STOP(rtlusb_ptr) (USB_STATE_STOP == (rtlusb_ptr)->state)
0067 #define IS_USB_START(rtlusb_ptr) (USB_STATE_START == (rtlusb_ptr)->state)
0068 #define SET_USB_STOP(rtlusb_ptr) \
0069 do { \
0070 (rtlusb_ptr)->state = USB_STATE_STOP; \
0071 } while (0)
0072
0073 #define SET_USB_START(rtlusb_ptr) \
0074 do { \
0075 (rtlusb_ptr)->state = USB_STATE_START; \
0076 } while (0)
0077
0078 struct rtl_usb {
0079 struct usb_device *udev;
0080 struct usb_interface *intf;
0081 enum rtl_usb_state state;
0082
0083
0084 u32 reg_bcn_ctrl_val;
0085
0086 u8 disablehwsm;
0087
0088 enum acm_method acm_method;
0089
0090 u32 irq_mask[2];
0091 bool irq_enabled;
0092
0093 u16 (*usb_mq_to_hwq)(__le16 fc, u16 mac80211_queue_index);
0094
0095
0096 u8 out_ep_nums ;
0097 u8 out_queue_sel;
0098 struct rtl_ep_map ep_map;
0099
0100 u32 max_bulk_out_size;
0101 u32 tx_submitted_urbs;
0102 struct sk_buff_head tx_skb_queue[RTL_USB_MAX_EP_NUM];
0103
0104 struct usb_anchor tx_pending[RTL_USB_MAX_EP_NUM];
0105 struct usb_anchor tx_submitted;
0106
0107 struct sk_buff *(*usb_tx_aggregate_hdl)(struct ieee80211_hw *,
0108 struct sk_buff_head *);
0109 int (*usb_tx_post_hdl)(struct ieee80211_hw *,
0110 struct urb *, struct sk_buff *);
0111 void (*usb_tx_cleanup)(struct ieee80211_hw *, struct sk_buff *);
0112
0113
0114 u8 in_ep_nums;
0115 u32 in_ep;
0116 u32 rx_max_size;
0117 u32 rx_urb_num;
0118 struct usb_anchor rx_submitted;
0119 struct usb_anchor rx_cleanup_urbs;
0120 struct tasklet_struct rx_work_tasklet;
0121 struct sk_buff_head rx_queue;
0122 void (*usb_rx_segregate_hdl)(struct ieee80211_hw *, struct sk_buff *,
0123 struct sk_buff_head *);
0124 void (*usb_rx_hdl)(struct ieee80211_hw *, struct sk_buff *);
0125 };
0126
0127 struct rtl_usb_priv {
0128 struct bt_coexist_info bt_coexist;
0129 struct rtl_usb dev;
0130 };
0131
0132 #define rtl_usbpriv(hw) (((struct rtl_usb_priv *)(rtl_priv(hw))->priv))
0133 #define rtl_usbdev(usbpriv) (&((usbpriv)->dev))
0134
0135 int rtl_usb_probe(struct usb_interface *intf,
0136 const struct usb_device_id *id,
0137 struct rtl_hal_cfg *rtl92cu_hal_cfg);
0138 void rtl_usb_disconnect(struct usb_interface *intf);
0139 int rtl_usb_suspend(struct usb_interface *pusb_intf, pm_message_t message);
0140 int rtl_usb_resume(struct usb_interface *pusb_intf);
0141
0142 #endif