42 #include <linux/if_ether.h> 43 #include <linux/kernel.h> 46 #include <rtwlan_io.h> 48 #define IEEE80211_1ADDR_LEN 10 49 #define IEEE80211_2ADDR_LEN 16 50 #define IEEE80211_3ADDR_LEN 24 51 #define IEEE80211_4ADDR_LEN 30 52 #define IEEE80211_FCS_LEN 4 53 #define IEEE80211_HLEN (IEEE80211_4ADDR_LEN) 54 #define IEEE80211_FRAME_LEN (IEEE80211_DATA_LEN + IEEE80211_HLEN) 56 #define MIN_FRAG_THRESHOLD 256U 57 #define MAX_FRAG_THRESHOLD 2346U 60 #define IEEE80211_FCTL_VERS 0x0003 61 #define IEEE80211_FCTL_FTYPE 0x000c 62 #define IEEE80211_FCTL_STYPE 0x00f0 63 #define IEEE80211_FCTL_TODS 0x0100 64 #define IEEE80211_FCTL_FROMDS 0x0200 65 #define IEEE80211_FCTL_MOREFRAGS 0x0400 66 #define IEEE80211_FCTL_RETRY 0x0800 67 #define IEEE80211_FCTL_PM 0x1000 68 #define IEEE80211_FCTL_MOREDATA 0x2000 69 #define IEEE80211_FCTL_PROTECTED 0x4000 70 #define IEEE80211_FCTL_ORDER 0x8000 72 #define IEEE80211_FTYPE_MGMT 0x0000 73 #define IEEE80211_FTYPE_CTL 0x0004 74 #define IEEE80211_FTYPE_DATA 0x0008 77 #define IEEE80211_STYPE_ASSOC_REQ 0x0000 78 #define IEEE80211_STYPE_ASSOC_RESP 0x0010 79 #define IEEE80211_STYPE_REASSOC_REQ 0x0020 80 #define IEEE80211_STYPE_REASSOC_RESP 0x0030 81 #define IEEE80211_STYPE_PROBE_REQ 0x0040 82 #define IEEE80211_STYPE_PROBE_RESP 0x0050 83 #define IEEE80211_STYPE_BEACON 0x0080 84 #define IEEE80211_STYPE_ATIM 0x0090 85 #define IEEE80211_STYPE_DISASSOC 0x00A0 86 #define IEEE80211_STYPE_AUTH 0x00B0 87 #define IEEE80211_STYPE_DEAUTH 0x00C0 88 #define IEEE80211_STYPE_ACTION 0x00D0 91 #define IEEE80211_STYPE_PSPOLL 0x00A0 92 #define IEEE80211_STYPE_RTS 0x00B0 93 #define IEEE80211_STYPE_CTS 0x00C0 94 #define IEEE80211_STYPE_ACK 0x00D0 95 #define IEEE80211_STYPE_CFEND 0x00E0 96 #define IEEE80211_STYPE_CFENDACK 0x00F0 99 #define IEEE80211_STYPE_DATA 0x0000 100 #define IEEE80211_STYPE_DATA_CFACK 0x0010 101 #define IEEE80211_STYPE_DATA_CFPOLL 0x0020 102 #define IEEE80211_STYPE_DATA_CFACKPOLL 0x0030 103 #define IEEE80211_STYPE_NULLFUNC 0x0040 104 #define IEEE80211_STYPE_CFACK 0x0050 105 #define IEEE80211_STYPE_CFPOLL 0x0060 106 #define IEEE80211_STYPE_CFACKPOLL 0x0070 107 #define IEEE80211_STYPE_QOS_DATA 0x0080 109 #define RTWLAN_SCTL_SEQ 0xFFF0 111 #define WLAN_FC_GET_VERS(fc) ((fc)&IEEE80211_FCTL_VERS) 112 #define WLAN_FC_GET_TYPE(fc) ((fc)&IEEE80211_FCTL_FTYPE) 113 #define WLAN_FC_GET_STYPE(fc) ((fc)&IEEE80211_FCTL_STYPE) 115 #define IEEE80211_DSSS_RATE_1MB 0x02 116 #define IEEE80211_DSSS_RATE_2MB 0x04 117 #define IEEE80211_DSSS_RATE_5MB 0x0B 118 #define IEEE80211_DSSS_RATE_11MB 0x16 119 #define IEEE80211_OFDM_RATE_6MB 0x0C 120 #define IEEE80211_OFDM_RATE_9MB 0x12 121 #define IEEE80211_OFDM_RATE_12MB 0x18 122 #define IEEE80211_OFDM_RATE_18MB 0x24 123 #define IEEE80211_OFDM_RATE_24MB 0x30 124 #define IEEE80211_OFDM_RATE_36MB 0x48 125 #define IEEE80211_OFDM_RATE_48MB 0x60 126 #define IEEE80211_OFDM_RATE_54MB 0x6C 127 #define IEEE80211_BASIC_RATE_MASK 0x80 129 #define MAC_FMT "%02x:%02x:%02x:%02x:%02x:%02x" 131 ((u8 *)(x))[0], ((u8 *)(x))[1], ((u8 *)(x))[2], ((u8 *)(x))[3], \ 132 ((u8 *)(x))[4], ((u8 *)(x))[5] 134 #ifdef CONFIG_RTWLAN_DEBUG 135 #define RTWLAN_DEBUG_PRINTK(__message...) \ 137 rtdm_printk(__message); \ 139 #define RTWLAN_DEBUG(__message, __args...) \ 140 RTWLAN_DEBUG_PRINTK(KERN_DEBUG "rtwlan->%s: Debug - " __message, \ 141 __FUNCTION__, ##__args); 143 #define RTWLAN_DEBUG(__message...) \ 148 struct rtwlan_stats {
149 unsigned long rx_packets;
150 unsigned long tx_packets;
151 unsigned long tx_retry;
154 struct rtwlan_device {
155 struct rtwlan_stats stats;
157 struct rtskb_pool skb_pool;
161 int (*hard_start_xmit)(
struct rtskb *rtskb,
162 struct rtnet_device *rtnet_dev);
171 struct ieee80211_hdr {
177 struct ieee80211_hdr_3addr {
187 static inline int ieee80211_get_hdrlen(u16 fc)
189 int hdrlen = IEEE80211_3ADDR_LEN;
190 u16 stype = WLAN_FC_GET_STYPE(fc);
192 switch (WLAN_FC_GET_TYPE(fc)) {
193 case IEEE80211_FTYPE_DATA:
194 if ((fc & IEEE80211_FCTL_FROMDS) && (fc & IEEE80211_FCTL_TODS))
195 hdrlen = IEEE80211_4ADDR_LEN;
196 if (stype & IEEE80211_STYPE_QOS_DATA)
200 case IEEE80211_FTYPE_CTL:
201 switch (WLAN_FC_GET_STYPE(fc)) {
202 case IEEE80211_STYPE_CTS:
203 case IEEE80211_STYPE_ACK:
204 hdrlen = IEEE80211_1ADDR_LEN;
208 hdrlen = IEEE80211_2ADDR_LEN;
217 static inline int ieee80211_is_ofdm_rate(u8 rate)
219 switch (rate & ~IEEE80211_BASIC_RATE_MASK) {
220 case IEEE80211_OFDM_RATE_6MB:
221 case IEEE80211_OFDM_RATE_9MB:
222 case IEEE80211_OFDM_RATE_12MB:
223 case IEEE80211_OFDM_RATE_18MB:
224 case IEEE80211_OFDM_RATE_24MB:
225 case IEEE80211_OFDM_RATE_36MB:
226 case IEEE80211_OFDM_RATE_48MB:
227 case IEEE80211_OFDM_RATE_54MB:
233 static inline int ieee80211_is_dsss_rate(u8 rate)
235 switch (rate & ~IEEE80211_BASIC_RATE_MASK) {
236 case IEEE80211_DSSS_RATE_1MB:
237 case IEEE80211_DSSS_RATE_2MB:
238 case IEEE80211_DSSS_RATE_5MB:
239 case IEEE80211_DSSS_RATE_11MB:
245 static inline void *rtwlan_priv(
struct rtwlan_device *rtwlan_dev)
247 return (
void *)rtwlan_dev +
sizeof(
struct rtwlan_device);
250 struct rtnet_device *rtwlan_alloc_dev(
unsigned sizeof_priv,
251 unsigned dev_pool_size);
252 int rtwlan_rx(
struct rtskb *rtskb,
struct rtnet_device *rtnet_dev);
253 int rtwlan_tx(
struct rtskb *rtskb,
struct rtnet_device *rtnet_dev);
255 #ifdef CONFIG_XENO_DRIVERS_NET_RTWLAN 256 int __init rtwlan_init(
void);
257 void rtwlan_exit(
void);
259 #define rtwlan_init() 0 260 #define rtwlan_exit() static int __attribute__((cold))
Test if a mutex structure contains a valid autoinitializer.
Definition: mutex.c:177