Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
usb.h
Go to the documentation of this file.
1 /******************************************************************************
2  *
3  * Copyright(c) 2009-2012 Realtek Corporation. All rights reserved.
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms of version 2 of the GNU General Public License as
7  * published by the Free Software Foundation.
8  *
9  * This program is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12  * more details.
13  *
14  * You should have received a copy of the GNU General Public License along with
15  * this program; if not, write to the Free Software Foundation, Inc.,
16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
17  *
18  * The full GNU General Public License is included in this distribution in the
19  * file called LICENSE.
20  *
21  * Contact Information:
22  * wlanfae <[email protected]>
23  * Realtek Corporation, No. 2, Innovation Road II, Hsinchu Science Park,
24  * Hsinchu 300, Taiwan.
25  *
26  *****************************************************************************/
27 
28 #ifndef __RTL_USB_H__
29 #define __RTL_USB_H__
30 
31 #include <linux/skbuff.h>
32 
33 #define RTL_RX_DESC_SIZE 24
34 
35 #define RTL_USB_DEVICE(vend, prod, cfg) \
36  .match_flags = USB_DEVICE_ID_MATCH_DEVICE, \
37  .idVendor = (vend), \
38  .idProduct = (prod), \
39  .driver_info = (kernel_ulong_t)&(cfg)
40 
41 #define USB_HIGH_SPEED_BULK_SIZE 512
42 #define USB_FULL_SPEED_BULK_SIZE 64
43 
44 
45 #define RTL_USB_MAX_TXQ_NUM 4 /* max tx queue */
46 #define RTL_USB_MAX_EP_NUM 6 /* max ep number */
47 #define RTL_USB_MAX_TX_URBS_NUM 8
48 
49 enum rtl_txq {
50  /* These definitions shall be consistent with value
51  * returned by skb_get_queue_mapping
52  *------------------------------------*/
57  /*------------------------------------*/
61 
62  /* Must be last */
64 };
65 
66 struct rtl_ep_map {
68 };
69 
70 struct _trx_info {
71  struct rtl_usb *rtlusb;
73 };
74 
75 static inline void _rtl_install_trx_info(struct rtl_usb *rtlusb,
76  struct sk_buff *skb,
77  u32 ep_num)
78 {
79  struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
80  info->rate_driver_data[0] = rtlusb;
81  info->rate_driver_data[1] = (void *)(__kernel_size_t)ep_num;
82 }
83 
84 
85 /* Add suspend/resume later */
89 };
90 
91 #define IS_USB_STOP(rtlusb_ptr) (USB_STATE_STOP == (rtlusb_ptr)->state)
92 #define IS_USB_START(rtlusb_ptr) (USB_STATE_START == (rtlusb_ptr)->state)
93 #define SET_USB_STOP(rtlusb_ptr) \
94  do { \
95  (rtlusb_ptr)->state = USB_STATE_STOP; \
96  } while (0)
97 
98 #define SET_USB_START(rtlusb_ptr) \
99  do { \
100  (rtlusb_ptr)->state = USB_STATE_START; \
101  } while (0)
102 
103 struct rtl_usb {
104  struct usb_device *udev;
107 
108  /* Bcn control register setting */
110  /* for 88/92cu card disable */
112  /*QOS & EDCA */
114  /* irq . HIMR,HIMR_EX */
117 
118  u16 (*usb_mq_to_hwq)(__le16 fc, u16 mac80211_queue_index);
119 
120  /* Tx */
124 
128 
129  struct usb_anchor tx_pending[RTL_USB_MAX_EP_NUM];
130  struct usb_anchor tx_submitted;
131 
132  struct sk_buff *(*usb_tx_aggregate_hdl)(struct ieee80211_hw *,
133  struct sk_buff_head *);
135  struct urb *, struct sk_buff *);
136  void (*usb_tx_cleanup)(struct ieee80211_hw *, struct sk_buff *);
137 
138  /* Rx */
140  u32 in_ep; /* Bulk IN endpoint number */
141  u32 rx_max_size; /* Bulk IN max buffer size */
142  u32 rx_urb_num; /* How many Bulk INs are submitted to host. */
143  struct usb_anchor rx_submitted;
145  struct sk_buff_head *);
146  void (*usb_rx_hdl)(struct ieee80211_hw *, struct sk_buff *);
147 };
148 
149 struct rtl_usb_priv {
150  struct rtl_usb dev;
152 };
153 
154 #define rtl_usbpriv(hw) (((struct rtl_usb_priv *)(rtl_priv(hw))->priv))
155 #define rtl_usbdev(usbpriv) (&((usbpriv)->dev))
156 
157 
158 
160  const struct usb_device_id *id);
162 int rtl_usb_suspend(struct usb_interface *pusb_intf, pm_message_t message);
163 int rtl_usb_resume(struct usb_interface *pusb_intf);
164 
165 #endif