1diff -Naur rtl8187_orig/beta-8187/ieee80211_crypt.h rtl8187_rawtx/beta-8187/ieee80211_crypt.h 2--- rtl8187_orig/beta-8187/ieee80211_crypt.h 2007-03-13 23:45:09.000000000 +0100 3+++ rtl8187_rawtx/beta-8187/ieee80211_crypt.h 2007-06-08 23:30:29.000000000 +0200 4@@ -75,12 +75,12 @@ 5 atomic_t refcnt; 6 }; 7 8-int ieee80211_register_crypto_ops(struct ieee80211_crypto_ops *ops); 9-int ieee80211_unregister_crypto_ops(struct ieee80211_crypto_ops *ops); 10-struct ieee80211_crypto_ops * ieee80211_get_crypto_ops(const char *name); 11-void ieee80211_crypt_deinit_entries(struct ieee80211_device *, int); 12-void ieee80211_crypt_deinit_handler(unsigned long); 13-void ieee80211_crypt_delayed_deinit(struct ieee80211_device *ieee, 14+int ieee80211_register_crypto_ops_rtl7(struct ieee80211_crypto_ops *ops); 15+int ieee80211_unregister_crypto_ops_rtl7(struct ieee80211_crypto_ops *ops); 16+struct ieee80211_crypto_ops * ieee80211_get_crypto_ops_rtl7(const char *name); 17+void ieee80211_crypt_deinit_entries_rtl7(struct ieee80211_device *, int); 18+void ieee80211_crypt_deinit_handler_rtl7(unsigned long); 19+void ieee80211_crypt_delayed_deinit_rtl7(struct ieee80211_device *ieee, 20 struct ieee80211_crypt_data **crypt); 21 22 #endif 23diff -Naur rtl8187_orig/beta-8187/ieee80211.h rtl8187_rawtx/beta-8187/ieee80211.h 24--- rtl8187_orig/beta-8187/ieee80211.h 2007-03-13 23:45:09.000000000 +0100 25+++ rtl8187_rawtx/beta-8187/ieee80211.h 2007-06-08 23:30:29.000000000 +0200 26@@ -156,6 +156,22 @@ 27 struct list_head list; 28 }; 29 30+#define LWNG_CAP_DID_BASE (4 | (1 << 6)) /* section 4, group 1 */ 31+/* ARPHRD_IEEE80211_PRISM uses a bloated version of Prism2 RX frame header 32+ * (from linux-wlan-ng) */ 33+struct linux_wlan_ng_val { 34+ u32 did; 35+ u16 status, len; 36+ u32 data; 37+} __attribute__ ((packed)); 38+ 39+struct linux_wlan_ng_prism_hdr { 40+ u32 msgcode, msglen; 41+ char devname[16]; 42+ struct linux_wlan_ng_val hosttime, mactime, channel, rssi, sq, signal, 43+ noise, rate, istx, frmlen; 44+} __attribute__ ((packed)); 45+ 46 struct ieee80211_hdr { 47 u16 frame_ctl; 48 u16 duration_id; 49@@ -840,14 +856,14 @@ 50 51 52 #if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,11)) 53-extern inline int is_multicast_ether_addr(const u8 *addr) 54+extern inline int is_multicast_ether_addr_rtl7(const u8 *addr) 55 { 56 return ((addr[0] != 0xff) && (0x01 & addr[0])); 57 } 58 #endif 59 60 #if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,13)) 61-extern inline int is_broadcast_ether_addr(const u8 *addr) 62+extern inline int is_broadcast_ether_addr_rtl7(const u8 *addr) 63 { 64 return ((addr[0] == 0xff) && (addr[1] == 0xff) && (addr[2] == 0xff) && \ 65 (addr[3] == 0xff) && (addr[4] == 0xff) && (addr[5] == 0xff)); 66@@ -1015,10 +1031,16 @@ 67 struct timer_list beacon_timer; 68 69 struct work_struct associate_complete_wq; 70+ 71+# if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)) 72+ struct delayed_work associate_retry_wq; 73+ struct delayed_work softmac_scan_wq; 74+#else 75 struct work_struct associate_retry_wq; 76+ struct work_struct softmac_scan_wq; 77+#endif 78 struct work_struct start_ibss_wq; 79 struct work_struct associate_procedure_wq; 80- struct work_struct softmac_scan_wq; 81 struct work_struct wx_sync_scan_wq; 82 83 struct workqueue_struct *wq; 84@@ -1154,12 +1176,12 @@ 85 86 87 88-extern inline void *ieee80211_priv(struct net_device *dev) 89+extern inline void *ieee80211_priv_rtl7(struct net_device *dev) 90 { 91 return ((struct ieee80211_device *)netdev_priv(dev))->priv; 92 } 93 94-extern inline int ieee80211_is_empty_essid(const char *essid, int essid_len) 95+extern inline int ieee80211_is_empty_essid_rtl7(const char *essid, int essid_len) 96 { 97 /* Single white space is for Linksys APs */ 98 if (essid_len == 1 && essid[0] == ' ') 99@@ -1175,7 +1197,7 @@ 100 return 1; 101 } 102 103-extern inline int ieee80211_is_valid_mode(struct ieee80211_device *ieee, int mode) 104+extern inline int ieee80211_is_valid_mode_rtl7(struct ieee80211_device *ieee, int mode) 105 { 106 /* 107 * It is possible for both access points and our device to support 108@@ -1201,7 +1223,7 @@ 109 return 0; 110 } 111 112-extern inline int ieee80211_get_hdrlen(u16 fc) 113+extern inline int ieee80211_get_hdrlen_rtl7(u16 fc) 114 { 115 int hdrlen = 24; 116 117@@ -1229,140 +1251,144 @@ 118 119 120 /* ieee80211.c */ 121-extern void free_ieee80211(struct net_device *dev); 122-extern struct net_device *alloc_ieee80211(int sizeof_priv); 123+extern void free_ieee80211_rtl7(struct net_device *dev); 124+extern struct net_device *alloc_ieee80211_rtl7(int sizeof_priv); 125 126-extern int ieee80211_set_encryption(struct ieee80211_device *ieee); 127+extern int ieee80211_set_encryption_rtl7(struct ieee80211_device *ieee); 128 129 /* ieee80211_tx.c */ 130 131-extern int ieee80211_encrypt_fragment( 132+extern int ieee80211_encrypt_fragment_rtl7( 133 struct ieee80211_device *ieee, 134 struct sk_buff *frag, 135 int hdr_len); 136 137-extern int ieee80211_xmit(struct sk_buff *skb, 138+extern int ieee80211_xmit_rtl7(struct sk_buff *skb, 139 struct net_device *dev); 140-extern void ieee80211_txb_free(struct ieee80211_txb *); 141+extern void ieee80211_txb_free_rtl7(struct ieee80211_txb *); 142 143 144 /* ieee80211_rx.c */ 145-extern int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb, 146+extern int ieee80211_rx_rtl7(struct ieee80211_device *ieee, struct sk_buff *skb, 147 struct ieee80211_rx_stats *rx_stats); 148-extern void ieee80211_rx_mgt(struct ieee80211_device *ieee, 149+extern void ieee80211_rx_mgt_rtl7(struct ieee80211_device *ieee, 150 struct ieee80211_hdr *header, 151 struct ieee80211_rx_stats *stats); 152 153 /* ieee80211_wx.c */ 154-extern int ieee80211_wx_get_scan(struct ieee80211_device *ieee, 155+extern int ieee80211_wx_get_scan_rtl7(struct ieee80211_device *ieee, 156 struct iw_request_info *info, 157 union iwreq_data *wrqu, char *key); 158-extern int ieee80211_wx_set_encode(struct ieee80211_device *ieee, 159+extern int ieee80211_wx_set_encode_rtl7(struct ieee80211_device *ieee, 160 struct iw_request_info *info, 161 union iwreq_data *wrqu, char *key); 162-extern int ieee80211_wx_get_encode(struct ieee80211_device *ieee, 163+extern int ieee80211_wx_get_encode_rtl7(struct ieee80211_device *ieee, 164 struct iw_request_info *info, 165 union iwreq_data *wrqu, char *key); 166 /* ieee80211_softmac.c */ 167-extern short ieee80211_is_54g(struct ieee80211_network net); 168-extern short ieee80211_is_shortslot(struct ieee80211_network net); 169-extern int ieee80211_rx_frame_softmac(struct ieee80211_device *ieee, struct sk_buff *skb, 170+extern short ieee80211_is_54g_rtl7(struct ieee80211_network net); 171+extern short ieee80211_is_shortslot_rtl7(struct ieee80211_network net); 172+extern int ieee80211_rx_frame_softmac_rtl7(struct ieee80211_device *ieee, struct sk_buff *skb, 173 struct ieee80211_rx_stats *rx_stats, u16 type, 174 u16 stype); 175-extern void ieee80211_softmac_new_net(struct ieee80211_device *ieee, struct ieee80211_network *net); 176+extern void ieee80211_softmac_new_net_rtl7(struct ieee80211_device *ieee, struct ieee80211_network *net); 177 178-extern void ieee80211_softmac_xmit(struct ieee80211_txb *txb, struct ieee80211_device *ieee); 179-extern void ieee80211_softmac_check_all_nets(struct ieee80211_device *ieee); 180-extern void ieee80211_start_bss(struct ieee80211_device *ieee); 181-extern void ieee80211_start_master_bss(struct ieee80211_device *ieee); 182-extern void ieee80211_start_ibss(struct ieee80211_device *ieee); 183-extern void ieee80211_softmac_init(struct ieee80211_device *ieee); 184-extern void ieee80211_softmac_free(struct ieee80211_device *ieee); 185-extern void ieee80211_associate_abort(struct ieee80211_device *ieee); 186-extern void ieee80211_disassociate(struct ieee80211_device *ieee); 187-extern void ieee80211_stop_scan(struct ieee80211_device *ieee); 188-extern void ieee80211_start_scan_syncro(struct ieee80211_device *ieee); 189-extern void ieee80211_check_all_nets(struct ieee80211_device *ieee); 190-extern void ieee80211_start_protocol(struct ieee80211_device *ieee); 191-extern void ieee80211_stop_protocol(struct ieee80211_device *ieee); 192-extern void ieee80211_softmac_start_protocol(struct ieee80211_device *ieee); 193-extern void ieee80211_softmac_stop_protocol(struct ieee80211_device *ieee); 194-extern void ieee80211_reset_queue(struct ieee80211_device *ieee); 195-extern void ieee80211_wake_queue(struct ieee80211_device *ieee); 196-extern void ieee80211_stop_queue(struct ieee80211_device *ieee); 197-extern struct sk_buff *ieee80211_get_beacon(struct ieee80211_device *ieee); 198-extern void ieee80211_start_send_beacons(struct ieee80211_device *ieee); 199-extern void ieee80211_stop_send_beacons(struct ieee80211_device *ieee); 200-extern int ieee80211_wpa_supplicant_ioctl(struct ieee80211_device *ieee, struct iw_point *p); 201-extern void notify_wx_assoc_event(struct ieee80211_device *ieee); 202-extern void ieee80211_ps_tx_ack(struct ieee80211_device *ieee, short success); 203+extern void ieee80211_softmac_xmit_rtl7(struct ieee80211_txb *txb, struct ieee80211_device *ieee); 204+extern void ieee80211_softmac_check_all_nets_rtl7(struct ieee80211_device *ieee); 205+extern void ieee80211_start_bss_rtl7(struct ieee80211_device *ieee); 206+extern void ieee80211_start_master_bss_rtl7(struct ieee80211_device *ieee); 207+extern void ieee80211_start_ibss_rtl7(struct ieee80211_device *ieee); 208+extern void ieee80211_softmac_init_rtl7(struct ieee80211_device *ieee); 209+extern void ieee80211_softmac_free_rtl7(struct ieee80211_device *ieee); 210+extern void ieee80211_associate_abort_rtl7(struct ieee80211_device *ieee); 211+extern void ieee80211_disassociate_rtl7(struct ieee80211_device *ieee); 212+extern void ieee80211_stop_scan_rtl7(struct ieee80211_device *ieee); 213+extern void ieee80211_start_scan_syncro_rtl7(struct ieee80211_device *ieee); 214+extern void ieee80211_check_all_nets_rtl7(struct ieee80211_device *ieee); 215+extern void ieee80211_start_protocol_rtl7(struct ieee80211_device *ieee); 216+extern void ieee80211_stop_protocol_rtl7(struct ieee80211_device *ieee); 217+extern void ieee80211_softmac_start_protocol_rtl7(struct ieee80211_device *ieee); 218+extern void ieee80211_softmac_stop_protocol_rtl7(struct ieee80211_device *ieee); 219+extern void ieee80211_reset_queue_rtl7(struct ieee80211_device *ieee); 220+extern void ieee80211_wake_queue_rtl7(struct ieee80211_device *ieee); 221+extern void ieee80211_stop_queue_rtl7(struct ieee80211_device *ieee); 222+extern struct sk_buff *ieee80211_get_beacon_rtl7(struct ieee80211_device *ieee); 223+extern void ieee80211_start_send_beacons_rtl7(struct ieee80211_device *ieee); 224+extern void ieee80211_stop_send_beacons_rtl7(struct ieee80211_device *ieee); 225+extern int ieee80211_wpa_supplicant_ioctl_rtl7(struct ieee80211_device *ieee, struct iw_point *p); 226+extern void notify_wx_assoc_event_rtl7(struct ieee80211_device *ieee); 227+extern void ieee80211_ps_tx_ack_rtl7(struct ieee80211_device *ieee, short success); 228 229 /* ieee80211_softmac_wx.c */ 230 231-extern int ieee80211_wx_get_wap(struct ieee80211_device *ieee, 232+extern int ieee80211_wx_get_wap_rtl7(struct ieee80211_device *ieee, 233 struct iw_request_info *info, 234 union iwreq_data *wrqu, char *ext); 235 236-extern int ieee80211_wx_set_wap(struct ieee80211_device *ieee, 237+extern int ieee80211_wx_set_wap_rtl7(struct ieee80211_device *ieee, 238 struct iw_request_info *info, 239 union iwreq_data *awrq, 240 char *extra); 241 242-extern int ieee80211_wx_get_essid(struct ieee80211_device *ieee, struct iw_request_info *a,union iwreq_data *wrqu,char *b); 243+extern int ieee80211_wx_get_essid_rtl7(struct ieee80211_device *ieee, struct iw_request_info *a,union iwreq_data *wrqu,char *b); 244 245-extern int ieee80211_wx_set_rate(struct ieee80211_device *ieee, 246+extern int ieee80211_wx_set_rate_rtl7(struct ieee80211_device *ieee, 247 struct iw_request_info *info, 248 union iwreq_data *wrqu, char *extra); 249 250-extern int ieee80211_wx_get_rate(struct ieee80211_device *ieee, 251+extern int ieee80211_wx_get_rate_rtl7(struct ieee80211_device *ieee, 252 struct iw_request_info *info, 253 union iwreq_data *wrqu, char *extra); 254 255-extern int ieee80211_wx_set_mode(struct ieee80211_device *ieee, struct iw_request_info *a, 256+extern int ieee80211_wx_set_mode_rtl7(struct ieee80211_device *ieee, struct iw_request_info *a, 257 union iwreq_data *wrqu, char *b); 258 259-extern int ieee80211_wx_set_scan(struct ieee80211_device *ieee, struct iw_request_info *a, 260+extern int ieee80211_wx_set_scan_rtl7(struct ieee80211_device *ieee, struct iw_request_info *a, 261 union iwreq_data *wrqu, char *b); 262 263-extern int ieee80211_wx_set_essid(struct ieee80211_device *ieee, 264+extern int ieee80211_wx_set_essid_rtl7(struct ieee80211_device *ieee, 265 struct iw_request_info *a, 266 union iwreq_data *wrqu, char *extra); 267 268-extern int ieee80211_wx_get_mode(struct ieee80211_device *ieee, struct iw_request_info *a, 269+extern int ieee80211_wx_get_mode_rtl7(struct ieee80211_device *ieee, struct iw_request_info *a, 270 union iwreq_data *wrqu, char *b); 271 272-extern int ieee80211_wx_set_freq(struct ieee80211_device *ieee, struct iw_request_info *a, 273+extern int ieee80211_wx_set_freq_rtl7(struct ieee80211_device *ieee, struct iw_request_info *a, 274 union iwreq_data *wrqu, char *b); 275 276-extern int ieee80211_wx_get_freq(struct ieee80211_device *ieee, struct iw_request_info *a, 277+extern int ieee80211_wx_get_freq_rtl7(struct ieee80211_device *ieee, struct iw_request_info *a, 278 union iwreq_data *wrqu, char *b); 279 280-extern void ieee80211_wx_sync_scan_wq(struct ieee80211_device *ieee); 281+# if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)) 282+extern void ieee80211_wx_sync_scan_wq_rtl7(struct work_struct *work); 283+#else 284+extern void ieee80211_wx_sync_scan_wq_rtl7(struct ieee80211_device *ieee); 285+#endif 286 287-extern int ieee80211_wx_set_rawtx(struct ieee80211_device *ieee, 288+extern int ieee80211_wx_set_rawtx_rtl7(struct ieee80211_device *ieee, 289 struct iw_request_info *info, 290 union iwreq_data *wrqu, char *extra); 291 292-extern int ieee80211_wx_get_name(struct ieee80211_device *ieee, 293+extern int ieee80211_wx_get_name_rtl7(struct ieee80211_device *ieee, 294 struct iw_request_info *info, 295 union iwreq_data *wrqu, char *extra); 296 297-extern int ieee80211_wx_set_power(struct ieee80211_device *ieee, 298+extern int ieee80211_wx_set_power_rtl7(struct ieee80211_device *ieee, 299 struct iw_request_info *info, 300 union iwreq_data *wrqu, char *extra); 301 302-extern int ieee80211_wx_get_power(struct ieee80211_device *ieee, 303+extern int ieee80211_wx_get_power_rtl7(struct ieee80211_device *ieee, 304 struct iw_request_info *info, 305 union iwreq_data *wrqu, char *extra); 306 307-extern const long ieee80211_wlan_frequencies[]; 308+extern const long ieee80211_wlan_frequencies_rtl7[]; 309 310-extern inline void ieee80211_increment_scans(struct ieee80211_device *ieee) 311+extern inline void ieee80211_increment_scans_rtl7(struct ieee80211_device *ieee) 312 { 313 ieee->scans++; 314 } 315 316-extern inline int ieee80211_get_scans(struct ieee80211_device *ieee) 317+extern inline int ieee80211_get_scans_rtl7(struct ieee80211_device *ieee) 318 { 319 return ieee->scans; 320 } 321@@ -1372,7 +1398,7 @@ 322 const char *s = essid; 323 char *d = escaped; 324 325- if (ieee80211_is_empty_essid(essid, essid_len)) { 326+ if (ieee80211_is_empty_essid_rtl7(essid, essid_len)) { 327 memcpy(escaped, "<hidden>", sizeof("<hidden>")); 328 return escaped; 329 } 330diff -Naur rtl8187_orig/beta-8187/Makefile rtl8187_rawtx/beta-8187/Makefile 331--- rtl8187_orig/beta-8187/Makefile 2007-03-13 23:45:09.000000000 +0100 332+++ rtl8187_rawtx/beta-8187/Makefile 2007-05-27 10:47:14.000000000 +0200 333@@ -18,6 +18,8 @@ 334 KVER := $(shell uname -r) 335 KSRC := /lib/modules/$(KVER)/build 336 INSTALL_PREFIX := 337+PWD = $(shell pwd) 338+ 339 all: modules 340 341 clean: 342diff -Naur rtl8187_orig/beta-8187/r8180_93cx6.c rtl8187_rawtx/beta-8187/r8180_93cx6.c 343--- rtl8187_orig/beta-8187/r8180_93cx6.c 2007-03-13 23:45:09.000000000 +0100 344+++ rtl8187_rawtx/beta-8187/r8180_93cx6.c 2007-06-08 23:30:33.000000000 +0200 345@@ -87,7 +87,7 @@ 346 347 u32 eprom_read(struct net_device *dev, u32 addr) 348 { 349- struct r8180_priv *priv = ieee80211_priv(dev); 350+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 351 short read_cmd[]={1,1,0}; 352 short addr_str[8]; 353 int i; 354diff -Naur rtl8187_orig/beta-8187/r8180_hw.h rtl8187_rawtx/beta-8187/r8180_hw.h 355--- rtl8187_orig/beta-8187/r8180_hw.h 2007-03-13 23:45:09.000000000 +0100 356+++ rtl8187_rawtx/beta-8187/r8180_hw.h 2007-06-08 23:30:29.000000000 +0200 357@@ -646,6 +646,7 @@ 358 #define FFER_INTR ((1<<15)) 359 #define FFER_GWAKE ((1<< 4)) 360 361- 362+#define MAX_TX_POWER 27 363+#define MIN_TX_POWER 20 364 365 #endif 366diff -Naur rtl8187_orig/beta-8187/r8180_rtl8225.c rtl8187_rawtx/beta-8187/r8180_rtl8225.c 367--- rtl8187_orig/beta-8187/r8180_rtl8225.c 2007-03-13 23:45:09.000000000 +0100 368+++ rtl8187_rawtx/beta-8187/r8180_rtl8225.c 2007-06-08 23:30:33.000000000 +0200 369@@ -173,7 +173,7 @@ 370 371 void rtl8225_set_gain(struct net_device *dev, short gain) 372 { 373- struct r8180_priv *priv = ieee80211_priv(dev); 374+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 375 376 rtl8180_set_anaparam(dev, RTL8225_ANAPARAM_ON); 377 378@@ -208,7 +208,7 @@ 379 { 380 #ifdef USE_8051_3WIRE 381 382- struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); 383+ struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv_rtl7(dev); 384 struct usb_device *udev = priv->udev; 385 //u8 bit; 386 u16 wReg80, wReg82, wReg84; 387@@ -255,7 +255,7 @@ 388 u16 out,select; 389 u8 bit; 390 u32 bangdata = (data << 4) | (adr & 0xf); 391- struct r8180_priv *priv = ieee80211_priv(dev); 392+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 393 394 out = read_nic_word(dev, RFPinsOutput) & 0xfff3; 395 396@@ -349,7 +349,7 @@ 397 398 void rtl8225_SetTXPowerLevel(struct net_device *dev, short ch) 399 { 400- struct r8180_priv *priv = ieee80211_priv(dev); 401+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 402 403 int GainIdx; 404 int GainSetting; 405@@ -454,9 +454,9 @@ 406 407 void rtl8225_rf_set_chan(struct net_device *dev, short ch) 408 { 409- struct r8180_priv *priv = ieee80211_priv(dev); 410+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 411 short gset = (priv->ieee80211->state == IEEE80211_LINKED && 412- ieee80211_is_54g(priv->ieee80211->current_network)) || 413+ ieee80211_is_54g_rtl7(priv->ieee80211->current_network)) || 414 priv->ieee80211->iw_mode == IW_MODE_MONITOR; 415 416 rtl8225_SetTXPowerLevel(dev, ch); 417@@ -474,7 +474,7 @@ 418 write_nic_byte(dev,DIFS,0x24); //DIFS: 36 419 420 if(priv->ieee80211->state == IEEE80211_LINKED && 421- ieee80211_is_shortslot(priv->ieee80211->current_network)) 422+ ieee80211_is_shortslot_rtl7(priv->ieee80211->current_network)) 423 write_nic_byte(dev,SLOT,0x9); //SLOT: 9 424 425 else 426@@ -546,7 +546,7 @@ 427 428 void rtl8225_rf_init(struct net_device *dev) 429 { 430- struct r8180_priv *priv = ieee80211_priv(dev); 431+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 432 int i; 433 short channel = 1; 434 u16 brsr; 435diff -Naur rtl8187_orig/beta-8187/r8180_rtl8225.h rtl8187_rawtx/beta-8187/r8180_rtl8225.h 436--- rtl8187_orig/beta-8187/r8180_rtl8225.h 2007-03-13 23:45:09.000000000 +0100 437+++ rtl8187_rawtx/beta-8187/r8180_rtl8225.h 2007-06-08 23:30:29.000000000 +0200 438@@ -44,3 +44,5 @@ 439 extern u32 rtl8225_chan[]; 440 441 #endif 442+ 443+void rtl8225z2_SetTXPowerLevel(struct net_device *dev, short ch); 444diff -Naur rtl8187_orig/beta-8187/r8180_rtl8225z2.c rtl8187_rawtx/beta-8187/r8180_rtl8225z2.c 445--- rtl8187_orig/beta-8187/r8180_rtl8225z2.c 2007-03-13 23:45:09.000000000 +0100 446+++ rtl8187_rawtx/beta-8187/r8180_rtl8225z2.c 2007-06-08 23:30:33.000000000 +0200 447@@ -2,12 +2,12 @@ 448 This is part of the rtl8180-sa2400 driver 449 released under the GPL (See file COPYING for details). 450 Copyright (c) 2005 Andrea Merello <andreamrl@tiscali.it> 451- 452- This files contains programming code for the rtl8225 453+ 454+ This files contains programming code for the rtl8225 455 radio frontend. 456- 457+ 458 *Many* thanks to Realtek Corp. for their great support! 459- 460+ 461 */ 462 463 464@@ -32,51 +32,68 @@ 465 }; 466 467 u8 rtl8225z2_gain_a[]={ 468- 0x13,0x27,0x5a,//,0x37,// -82dbm 469- 0x23,0x23,0x58,//,0x37,// -82dbm 470- 0x33,0x1f,0x56,//,0x37,// -82dbm 471- 0x43,0x1b,0x54,//,0x37,// -78dbm 472- 0x53,0x17,0x51,//,0x37,// -74dbm 473- 0x63,0x24,0x4f,//,0x37,// -70dbm 474- 0x73,0x0f,0x4c,//,0x37,// -66dbm 475+ 0x13,0x27,0x5a,//,0x37,// -82dbm 476+ 0x23,0x23,0x58,//,0x37,// -82dbm 477+ 0x33,0x1f,0x56,//,0x37,// -82dbm 478+ 0x43,0x1b,0x54,//,0x37,// -78dbm 479+ 0x53,0x17,0x51,//,0x37,// -74dbm 480+ 0x63,0x24,0x4f,//,0x37,// -70dbm 481+ 0x73,0x0f,0x4c,//,0x37,// -66dbm 482 }; 483 #if 0 484 u32 rtl8225_chan[] = { 485 0, //dummy channel 0 486- 0x085c, //1 487- 0x08dc, //2 488- 0x095c, //3 489- 0x09dc, //4 490- 0x0a5c, //5 491- 0x0adc, //6 492- 0x0b5c, //7 493- 0x0bdc, //8 494- 0x0c5c, //9 495- 0x0cdc, //10 496- 0x0d5c, //11 497- 0x0ddc, //12 498- 0x0e5c, //13 499+ 0x085c, //1 500+ 0x08dc, //2 501+ 0x095c, //3 502+ 0x09dc, //4 503+ 0x0a5c, //5 504+ 0x0adc, //6 505+ 0x0b5c, //7 506+ 0x0bdc, //8 507+ 0x0c5c, //9 508+ 0x0cdc, //10 509+ 0x0d5c, //11 510+ 0x0ddc, //12 511+ 0x0e5c, //13 512 //0x0f5c, //14 513- 0x0f72, // 14 514+ 0x0f72, // 14 515 }; 516 #endif 517 518+#if 0 519 //- 520-u16 rtl8225z2_rxgain[]={ 521+u16 rtl8225z2_rxgain[]={ 522 0x0400, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0408, 0x0409, 523- 0x040a, 0x040b, 0x0502, 0x0503, 0x0504, 0x0505, 0x0540, 0x0541, 524+ 0x040a, 0x040b, 0x0502, 0x0503, 0x0504, 0x0505, 0x0540, 0x0541, 525 0x0542, 0x0543, 0x0544, 0x0545, 0x0580, 0x0581, 0x0582, 0x0583, 526- 0x0584, 0x0585, 0x0588, 0x0589, 0x058a, 0x058b, 0x0643, 0x0644, 527+ 0x0584, 0x0585, 0x0588, 0x0589, 0x058a, 0x058b, 0x0643, 0x0644, 528 0x0645, 0x0680, 0x0681, 0x0682, 0x0683, 0x0684, 0x0685, 0x0688, 529 0x0689, 0x068a, 0x068b, 0x068c, 0x0742, 0x0743, 0x0744, 0x0745, 530 0x0780, 0x0781, 0x0782, 0x0783, 0x0784, 0x0785, 0x0788, 0x0789, 531 0x078a, 0x078b, 0x078c, 0x078d, 0x0790, 0x0791, 0x0792, 0x0793, 532- 0x0794, 0x0795, 0x0798, 0x0799, 0x079a, 0x079b, 0x079c, 0x079d, 533- 0x07a0, 0x07a1, 0x07a2, 0x07a3, 0x07a4, 0x07a5, 0x07a8, 0x07a9, 534- 0x03aa, 0x03ab, 0x03ac, 0x03ad, 0x03b0, 0x03b1, 0x03b2, 0x03b3, 535+ 0x0794, 0x0795, 0x0798, 0x0799, 0x079a, 0x079b, 0x079c, 0x079d, 536+ 0x07a0, 0x07a1, 0x07a2, 0x07a3, 0x07a4, 0x07a5, 0x07a8, 0x07a9, 537+ 0x03aa, 0x03ab, 0x03ac, 0x03ad, 0x03b0, 0x03b1, 0x03b2, 0x03b3, 538 0x03b4, 0x03b5, 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bb 539 540 }; 541+#else 542+u16 rtl8225z2_rxgain[]={ 543+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0008, 0x0009, 544+ 0x000a, 0x000b, 0x0102, 0x0103, 0x0104, 0x0105, 0x0140, 0x0141, 545+ 0x0142, 0x0143, 0x0144, 0x0145, 0x0180, 0x0181, 0x0182, 0x0183, 546+ 0x0184, 0x0185, 0x0188, 0x0189, 0x018a, 0x018b, 0x0243, 0x0244, 547+ 0x0245, 0x0280, 0x0281, 0x0282, 0x0283, 0x0284, 0x0285, 0x0288, 548+ 0x0289, 0x028a, 0x028b, 0x028c, 0x0342, 0x0343, 0x0344, 0x0345, 549+ 0x0380, 0x0381, 0x0382, 0x0383, 0x0384, 0x0385, 0x0388, 0x0389, 550+ 0x038a, 0x038b, 0x038c, 0x038d, 0x0390, 0x0391, 0x0392, 0x0393, 551+ 0x0394, 0x0395, 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 552+ 0x03a0, 0x03a1, 0x03a2, 0x03a3, 0x03a4, 0x03a5, 0x03a8, 0x03a9, 553+ 0x03aa, 0x03ab, 0x03ac, 0x03ad, 0x03b0, 0x03b1, 0x03b2, 0x03b3, 554+ 0x03b4, 0x03b5, 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bb 555+}; 556+#endif 557 558 //2005.11.16, 559 u8 ZEBRA2_CCK_OFDM_GAIN_SETTING[]={ 560@@ -129,23 +146,30 @@ 561 void rtl8225z2_set_gain(struct net_device *dev, short gain) 562 { 563 u8* rtl8225_gain; 564- struct r8180_priv *priv = ieee80211_priv(dev); 565- 566+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 567+ 568 u8 mode = priv->ieee80211->mode; 569- 570- if(mode == IEEE_B || mode == IEEE_G) 571+ 572+ if((mode&IEEE_B) == IEEE_B || (mode&IEEE_G) == IEEE_G) { 573+ //printk(KERN_WARNING "mode ag!\n"); 574 rtl8225_gain = rtl8225z2_gain_bg; 575- else 576+ } else { 577 rtl8225_gain = rtl8225z2_gain_a; 578- 579+ //printk(KERN_WARNING "mode a!\n"); 580+ } 581+ 582 //write_phy_ofdm(dev, 0x0d, rtl8225_gain[gain * 3]); 583 //write_phy_ofdm(dev, 0x19, rtl8225_gain[gain * 3 + 1]); 584 //write_phy_ofdm(dev, 0x1b, rtl8225_gain[gain * 3 + 2]); 585 //2005.11.17, by ch-hsu 586 write_phy_ofdm(dev, 0x0b, rtl8225_gain[gain * 3]); 587+ mdelay(1); 588 write_phy_ofdm(dev, 0x1b, rtl8225_gain[gain * 3 + 1]); 589+ mdelay(1); 590 write_phy_ofdm(dev, 0x1d, rtl8225_gain[gain * 3 + 2]); 591- write_phy_ofdm(dev, 0x21, 0x37); 592+ mdelay(1); 593+ write_phy_ofdm(dev, 0x21, 0x17); 594+ mdelay(1); 595 596 } 597 598@@ -153,33 +177,33 @@ 599 600 void rtl8225_set_gain(struct net_device *dev, short gain) 601 { 602- struct r8180_priv *priv = ieee80211_priv(dev); 603- 604+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 605+ 606 rtl8180_set_anaparam(dev, RTL8225_ANAPARAM_ON); 607- 608+ 609 if(priv->card_8185 == 2) 610 write_phy_ofdm(dev, 0x21, 0x27); 611 else 612 write_phy_ofdm(dev, 0x21, 0x37); 613- 614+ 615 write_phy_ofdm(dev, 0x25, 0x20); 616 write_phy_ofdm(dev, 0x11, 0x6); 617- 618+ 619 if(priv->card_8185 == 1 && priv->card_8185_Bversion) 620 write_phy_ofdm(dev, 0x27, 0x8); 621 else 622 write_phy_ofdm(dev, 0x27, 0x88); 623- 624+ 625 write_phy_ofdm(dev, 0x14, 0); 626 write_phy_ofdm(dev, 0x16, 0); 627 write_phy_ofdm(dev, 0x15, 0x40); 628 write_phy_ofdm(dev, 0x17, 0x40); 629- 630+ 631 write_phy_ofdm(dev, 0x0d, rtl8225_gain[gain * 4]); 632 write_phy_ofdm(dev, 0x23, rtl8225_gain[gain * 4 + 1]); 633 write_phy_ofdm(dev, 0x1b, rtl8225_gain[gain * 4 + 2]); 634 write_phy_ofdm(dev, 0x1d, rtl8225_gain[gain * 4 + 3]); 635- //rtl8225_set_gain_usb(dev, gain); 636+ //rtl8225_set_gain_usb(dev, gain); 637 } 638 #endif 639 640@@ -193,7 +217,7 @@ 641 // ThreeWireReg tdata; 642 int i; 643 short bit, rw; 644- 645+ 646 u8 wLength = 6; 647 u8 rLength = 12; 648 u8 low2high = 0; 649@@ -207,20 +231,20 @@ 650 651 dataRead = 0; 652 653- oval &= ~0xf; 654+ oval &= ~0xf; 655 656 write_nic_word(dev, RFPinsOutput, oval | BB_HOST_BANG_EN ); udelay(4); 657 658 write_nic_word(dev, RFPinsOutput, oval ); udelay(5); 659- 660+ 661 rw = 0; 662- 663+ 664 mask = (low2high) ? 0x01 : (((u32)0x01)<<(32-1)); 665 for(i = 0; i < wLength/2; i++) 666 { 667 bit = ((data2Write&mask) != 0) ? 1 : 0; 668 write_nic_word(dev, RFPinsOutput, bit|oval | rw); udelay(1); 669- 670+ 671 write_nic_word(dev, RFPinsOutput, bit|oval | BB_HOST_BANG_CLK | rw); udelay(2); 672 write_nic_word(dev, RFPinsOutput, bit|oval | BB_HOST_BANG_CLK | rw); udelay(2); 673 674@@ -233,9 +257,9 @@ 675 write_nic_word(dev, RFPinsOutput, bit|oval | rw); udelay(2); 676 break; 677 } 678- 679+ 680 bit = ((data2Write&mask) != 0) ? 1: 0; 681- 682+ 683 write_nic_word(dev, RFPinsOutput, oval|bit|rw| BB_HOST_BANG_CLK); udelay(2); 684 write_nic_word(dev, RFPinsOutput, oval|bit|rw| BB_HOST_BANG_CLK); udelay(2); 685 686@@ -252,22 +276,22 @@ 687 for(i = 0; i < rLength; i++) 688 { 689 write_nic_word(dev, RFPinsOutput, rw|oval); udelay(1); 690- 691+ 692 write_nic_word(dev, RFPinsOutput, rw|oval|BB_HOST_BANG_CLK); udelay(2); 693 write_nic_word(dev, RFPinsOutput, rw|oval|BB_HOST_BANG_CLK); udelay(2); 694 write_nic_word(dev, RFPinsOutput, rw|oval|BB_HOST_BANG_CLK); udelay(2); 695 tmp = read_nic_word(dev, RFPinsInput); 696- 697+ 698 dataRead |= (tmp & BB_HOST_BANG_CLK ? mask : 0); 699 700 write_nic_word(dev, RFPinsOutput, (rw|oval)); udelay(2); 701 702 mask = (low2high) ? (mask<<1) : (mask>>1); 703 } 704- 705+ 706 write_nic_word(dev, RFPinsOutput, BB_HOST_BANG_EN|BB_HOST_BANG_RW|oval); udelay(2); 707 708- write_nic_word(dev, RFPinsEnable, oval2); 709+ write_nic_word(dev, RFPinsEnable, oval2); 710 write_nic_word(dev, RFPinsSelect, oval3); // Set To SW Switch 711 write_nic_word(dev, RFPinsOutput, 0x3a0); 712 713@@ -280,61 +304,61 @@ 714 u16 out,select; 715 u8 bit; 716 u32 bangdata = (data << 4) | (adr & 0xf); 717- struct r8180_priv *priv = ieee80211_priv(dev); 718- 719+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 720+ 721 out = read_nic_word(dev, RFPinsOutput) & 0xfff3; 722- 723+ 724 write_nic_word(dev,RFPinsEnable, 725 (read_nic_word(dev,RFPinsEnable) | 0x7)); 726- 727+ 728 select = read_nic_word(dev, RFPinsSelect); 729- 730- write_nic_word(dev, RFPinsSelect, select | 0x7 | 731+ 732+ write_nic_word(dev, RFPinsSelect, select | 0x7 | 733 ((priv->card_type == USB) ? 0 : SW_CONTROL_GPIO)); 734- 735+ 736 force_pci_posting(dev); 737 udelay(10); 738- 739+ 740 write_nic_word(dev, RFPinsOutput, out | BB_HOST_BANG_EN );//| 0x1fff); 741- 742+ 743 force_pci_posting(dev); 744 udelay(2); 745- 746+ 747 write_nic_word(dev, RFPinsOutput, out); 748- 749+ 750 force_pci_posting(dev); 751 udelay(10); 752- 753- 754+ 755+ 756 for(i=15; i>=0;i--){ 757- 758+ 759 bit = (bangdata & (1<<i)) >> i; 760- 761+ 762 write_nic_word(dev, RFPinsOutput, bit | out); 763- 764+ 765 write_nic_word(dev, RFPinsOutput, bit | out | BB_HOST_BANG_CLK); 766 write_nic_word(dev, RFPinsOutput, bit | out | BB_HOST_BANG_CLK); 767 768 i--; 769 bit = (bangdata & (1<<i)) >> i; 770- 771+ 772 write_nic_word(dev, RFPinsOutput, bit | out | BB_HOST_BANG_CLK); 773 write_nic_word(dev, RFPinsOutput, bit | out | BB_HOST_BANG_CLK); 774 775 write_nic_word(dev, RFPinsOutput, bit | out); 776 777 } 778- 779+ 780 write_nic_word(dev, RFPinsOutput, out | BB_HOST_BANG_EN); 781- 782+ 783 force_pci_posting(dev); 784 udelay(10); 785 786- write_nic_word(dev, RFPinsOutput, out | 787+ write_nic_word(dev, RFPinsOutput, out | 788 ((priv->card_type == USB) ? 4 : BB_HOST_BANG_EN)); 789 790- write_nic_word(dev, RFPinsSelect, select | 791- ((priv->card_type == USB) ? 0 : SW_CONTROL_GPIO)); 792+ write_nic_word(dev, RFPinsSelect, select | 793+ ((priv->card_type == USB) ? 0 : SW_CONTROL_GPIO)); 794 795 if(priv->card_type == USB) 796 mdelay(2); 797@@ -348,30 +372,30 @@ 798 short vz2 = 1; 799 /* sw to reg pg 1 */ 800 write_rtl8225(dev, 0, 0x1b7); 801- 802+ 803 /* reg 8 pg 1 = 23*/ 804 if( read_rtl8225(dev, 8) != 0x588) 805 vz2 = 0; 806- 807- else /* reg 9 pg 1 = 24 */ 808+ 809+ else /* reg 9 pg 1 = 24 */ 810 if( read_rtl8225(dev, 9) != 0x700) 811 vz2 = 0; 812- 813- /* sw back to pg 0 */ 814+ 815+ /* sw back to pg 0 */ 816 write_rtl8225(dev, 0, 0xb7); 817 818 return vz2; 819- 820+ 821 } 822 823 #if 0 824 void rtl8225_rf_close(struct net_device *dev) 825 { 826- write_rtl8225(dev, 0x4, 0x1f); 827- 828+ write_rtl8225(dev, 0x4, 0x1f); 829+ 830 force_pci_posting(dev); 831 mdelay(1); 832- 833+ 834 rtl8180_set_anaparam(dev, RTL8225_ANAPARAM_OFF); 835 rtl8185_set_anaparam2(dev, RTL8225_ANAPARAM2_OFF); 836 } 837@@ -380,24 +404,24 @@ 838 short rtl8225_rf_set_sens(struct net_device *dev, short sens) 839 { 840 if (sens <0 || sens > 6) return -1; 841- 842+ 843 if(sens > 4) 844 write_rtl8225(dev, 0x0c, 0x850); 845- else 846+ else 847 write_rtl8225(dev, 0x0c, 0x50); 848 849 sens= 6-sens; 850 rtl8225_set_gain(dev, sens); 851- 852+ 853 write_phy_cck(dev, 0x41, rtl8225_threshold[sens]); 854 return 0; 855- 856+ 857 } 858 #endif 859 void rtl8225z2_SetTXPowerLevel(struct net_device *dev, short ch) 860 { 861- struct r8180_priv *priv = ieee80211_priv(dev); 862- 863+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 864+ 865 // int GainIdx; 866 // int GainSetting; 867 int i; 868@@ -406,44 +430,47 @@ 869 u8 max_cck_power_level; 870 //u8 min_cck_power_level; 871 u8 max_ofdm_power_level; 872- u8 min_ofdm_power_level; 873+ u8 min_ofdm_power_level; 874 u8 cck_power_level = 0xff & priv->chtxpwr[ch]; 875 u8 ofdm_power_level = 0xff & priv->chtxpwr_ofdm[ch]; 876- 877- 878+ 879+ 880 max_cck_power_level = 15; 881 //min_cck_power_level = 0; 882 max_ofdm_power_level = 25; // 12 -> 25 883 min_ofdm_power_level = 10; 884- 885+ 886 /* CCK power setting */ 887 if(cck_power_level > max_cck_power_level) 888+ { 889 cck_power_level = max_cck_power_level; 890- 891+ priv->chtxpwr[ch] = max_cck_power_level; 892+ } 893+ 894 cck_power_level += priv->cck_txpwr_base; 895- 896+ 897 if(cck_power_level > 35) 898 cck_power_level = 35; 899- 900- if(ch == 14) 901+ 902+ if(ch == 14) 903 cck_power_table = rtl8225z2_tx_power_cck_ch14; 904- else 905+ else 906 cck_power_table = rtl8225z2_tx_power_cck; 907- 908- 909+ 910+ 911 for(i=0;i<8;i++){ 912- 913+ 914 power = cck_power_table[i]; 915 write_phy_cck(dev, 0x44 + i, power); 916 } 917- 918+ 919 //write_nic_byte(dev, TX_GAIN_CCK, power); 920 //2005.11.17, 921 write_nic_byte(dev, TX_GAIN_CCK, ZEBRA2_CCK_OFDM_GAIN_SETTING[cck_power_level]); 922- 923+ 924 force_pci_posting(dev); 925 mdelay(1); 926- 927+ 928 /* OFDM power setting */ 929 // Old: 930 // if(ofdm_power_level > max_ofdm_power_level) 931@@ -454,26 +481,26 @@ 932 ofdm_power_level = max_ofdm_power_level; 933 else 934 ofdm_power_level += min_ofdm_power_level; 935- 936+ 937 ofdm_power_level += priv->ofdm_txpwr_base; 938- 939+ 940 if(ofdm_power_level > 35) 941 ofdm_power_level = 35; 942- 943+ 944 rtl8185_set_anaparam2(dev,RTL8225_ANAPARAM2_ON); 945- 946+ 947 write_phy_ofdm(dev,2,0x42); 948 write_phy_ofdm(dev,5,0); 949 write_phy_ofdm(dev,6,0x40); 950 write_phy_ofdm(dev,7,0); 951- write_phy_ofdm(dev,8,0x40); 952- 953+ write_phy_ofdm(dev,8,0x40); 954+ 955 956 //write_nic_byte(dev, TX_GAIN_OFDM, ofdm_power_level); 957 //2005.11.17, 958 write_nic_byte(dev, TX_GAIN_OFDM, ZEBRA2_CCK_OFDM_GAIN_SETTING[ofdm_power_level]); 959 960- 961+ 962 force_pci_posting(dev); 963 mdelay(1); 964 //write_nic_byte(dev, TX_AGC_CONTROL,4); 965@@ -483,39 +510,39 @@ 966 void rtl8225_set_mode(struct net_device *dev, short modeb) 967 { 968 write_phy_ofdm(dev, 0x15, (modeb ? 0x0 : 0x40)); 969- write_phy_ofdm(dev, 0x17, (modeb ? 0x0 : 0x40)); 970+ write_phy_ofdm(dev, 0x17, (modeb ? 0x0 : 0x40)); 971 } 972 #endif 973 974 void rtl8225z2_rf_set_chan(struct net_device *dev, short ch) 975 { 976- struct r8180_priv *priv = ieee80211_priv(dev); 977+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 978 short gset = (priv->ieee80211->state == IEEE80211_LINKED && 979- ieee80211_is_54g(priv->ieee80211->current_network)) || 980+ ieee80211_is_54g_rtl7(priv->ieee80211->current_network)) || 981 priv->ieee80211->iw_mode == IW_MODE_MONITOR; 982- 983+ 984 rtl8225z2_SetTXPowerLevel(dev, ch); 985- 986+ 987 write_rtl8225(dev, 0x7, rtl8225_chan[ch]); 988- 989+ 990 force_pci_posting(dev); 991 mdelay(10); 992- 993+ 994 write_nic_byte(dev,SIFS,0x22);// SIFS: 0x22 995- 996+ 997 if(gset) 998- write_nic_byte(dev,DIFS,20); //DIFS: 20 999+ write_nic_byte(dev,DIFS,20); //DIFS: 20 1000 else 1001- write_nic_byte(dev,DIFS,0x24); //DIFS: 36 1002- 1003+ write_nic_byte(dev,DIFS,0x24); //DIFS: 36 1004+ 1005 if(priv->ieee80211->state == IEEE80211_LINKED && 1006- ieee80211_is_shortslot(priv->ieee80211->current_network)) 1007+ ieee80211_is_shortslot_rtl7(priv->ieee80211->current_network)) 1008 write_nic_byte(dev,SLOT,0x9); //SLOT: 9 1009- 1010+ 1011 else 1012 write_nic_byte(dev,SLOT,0x14); //SLOT: 20 (0x14) 1013- 1014- 1015+ 1016+ 1017 if(gset){ 1018 write_nic_byte(dev,EIFS,91 - 20); // EIFS: 91 (0x5B) 1019 write_nic_byte(dev,CW_VAL,0x73); //CW VALUE: 0x37 1020@@ -529,68 +556,68 @@ 1021 1022 } 1023 #if 0 1024-void rtl8225_host_pci_init(struct net_device *dev) 1025+void rtl8225_host_pci_init(struct net_device *dev) 1026 { 1027 write_nic_word(dev, RFPinsOutput, 0x480); 1028- 1029+ 1030 rtl8185_rf_pins_enable(dev); 1031- 1032+ 1033 //if(priv->card_8185 == 2 && priv->enable_gpio0 ) /* version D */ 1034 //write_nic_word(dev, RFPinsSelect, 0x88); 1035 //else 1036 write_nic_word(dev, RFPinsSelect, 0x88 | SW_CONTROL_GPIO); /* 0x488 | SW_CONTROL_GPIO */ 1037- 1038+ 1039 write_nic_byte(dev, GP_ENABLE, 0); 1040- 1041+ 1042 force_pci_posting(dev); 1043 mdelay(200); 1044- 1045+ 1046 write_nic_word(dev, GP_ENABLE, 0xff & (~(1<<6))); /* bit 6 is for RF on/off detection */ 1047 1048- 1049+ 1050 } 1051 1052-void rtl8225_host_usb_init(struct net_device *dev) 1053+void rtl8225_host_usb_init(struct net_device *dev) 1054 { 1055 write_nic_byte(dev,RFPinsSelect+1,0); 1056 1057 write_nic_byte(dev,GPIO,0); 1058- 1059+ 1060 write_nic_byte_E(dev,0x53,read_nic_byte_E(dev,0x53) | (1<<7)); 1061- 1062+ 1063 write_nic_byte(dev,RFPinsSelect+1,4); 1064 1065 write_nic_byte(dev,GPIO,0x20); 1066 1067 write_nic_byte(dev,GP_ENABLE,0); 1068 1069- 1070- /* Config BB & RF */ 1071+ 1072+ /* Config BB & RF */ 1073 write_nic_word(dev, RFPinsOutput, 0x80); 1074 1075 write_nic_word(dev, RFPinsSelect, 0x80); 1076 1077 write_nic_word(dev, RFPinsEnable, 0x80); 1078 1079- 1080+ 1081 mdelay(100); 1082 1083- mdelay(1000); 1084+ mdelay(1000); 1085 1086 } 1087 #endif 1088-void rtl8225z2_rf_init(struct net_device *dev) 1089+void rtl8225z2_rf_init(struct net_device *dev) 1090 { 1091- struct r8180_priv *priv = ieee80211_priv(dev); 1092+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 1093 int i; 1094 short channel = 1; 1095 u16 brsr; 1096 u32 data,addr; 1097- 1098+ 1099 priv->chan = channel; 1100 1101 rtl8180_set_anaparam(dev, RTL8225_ANAPARAM_ON); 1102- 1103+ 1104 1105 if(priv->card_type == USB) 1106 rtl8225_host_usb_init(dev); 1107@@ -598,42 +625,42 @@ 1108 rtl8225_host_pci_init(dev); 1109 1110 write_nic_dword(dev, RF_TIMING, 0x000a8008); 1111- 1112+ 1113 brsr = read_nic_word(dev, BRSR); 1114- 1115- write_nic_word(dev, BRSR, 0xffff); 1116+ 1117+ write_nic_word(dev, BRSR, 0xffff); 1118 1119 1120 write_nic_dword(dev, RF_PARA, 0x100044); 1121- 1122+ 1123 #if 1 //0->1 1124 rtl8180_set_mode(dev, EPROM_CMD_CONFIG); 1125 write_nic_byte(dev, CONFIG3, 0x44); 1126 rtl8180_set_mode(dev, EPROM_CMD_NORMAL); 1127 #endif 1128- 1129- 1130+ 1131+ 1132 rtl8185_rf_pins_enable(dev); 1133 1134 // mdelay(1000); 1135 1136 write_rtl8225(dev, 0x0, 0x2bf); mdelay(1); 1137- 1138- 1139+ 1140+ 1141 write_rtl8225(dev, 0x1, 0xee0); mdelay(1); 1142 1143 write_rtl8225(dev, 0x2, 0x44d); mdelay(1); 1144 1145 write_rtl8225(dev, 0x3, 0x441); mdelay(1); 1146 1147- 1148+ 1149 write_rtl8225(dev, 0x4, 0x8c3);mdelay(1); 1150- 1151- 1152- 1153+ 1154+ 1155+ 1156 write_rtl8225(dev, 0x5, 0xc72);mdelay(1); 1157 // } 1158- 1159+ 1160 write_rtl8225(dev, 0x6, 0xe6); mdelay(1); 1161 1162 write_rtl8225(dev, 0x7, ((priv->card_type == USB)? 0x82a : rtl8225_chan[channel])); mdelay(1); 1163@@ -653,28 +680,28 @@ 1164 1165 write_rtl8225(dev, 0xe, 0x2b); mdelay(1); 1166 1167- write_rtl8225(dev, 0xf, 0x114); 1168- 1169- 1170+ write_rtl8225(dev, 0xf, 0x114); 1171+ 1172+ 1173 mdelay(100); 1174- 1175- 1176+ 1177+ 1178 //if(priv->card_type != USB) /* maybe not needed even for 8185 */ 1179-// write_rtl8225(dev, 0x7, rtl8225_chan[channel]); 1180- 1181+// write_rtl8225(dev, 0x7, rtl8225_chan[channel]); 1182+ 1183 write_rtl8225(dev, 0x0, 0x1b7); 1184- 1185+ 1186 for(i=0;i<95;i++){ 1187 write_rtl8225(dev, 0x1, (u8)(i+1)); 1188- 1189+ 1190 #if 0 1191- if(priv->phy_ver == 1) 1192+ if(priv->phy_ver == 1) 1193 /* version A */ 1194 write_rtl8225(dev, 0x2, rtl8225a_rxgain[i]); 1195 else 1196 #endif 1197 /* version B & C & D*/ 1198- 1199+ 1200 write_rtl8225(dev, 0x2, rtl8225z2_rxgain[i]); 1201 } 1202 write_rtl8225(dev, 0x3, 0x80); 1203@@ -683,16 +710,16 @@ 1204 write_rtl8225(dev, 0x0, 0xb7); 1205 1206 write_rtl8225(dev, 0x2, 0xc4d); 1207- 1208+ 1209 if(priv->card_type == USB){ 1210 // force_pci_posting(dev); 1211 mdelay(200); 1212- 1213+ 1214 write_rtl8225(dev, 0x2, 0x44d); 1215- 1216+ 1217 // force_pci_posting(dev); 1218 mdelay(100); 1219- 1220+ 1221 }//End of if(priv->card_type == USB) 1222 /* FIXME!! rtl8187 we have to check if calibrarion 1223 * is successful and eventually cal. again (repeat 1224@@ -713,23 +740,23 @@ 1225 } 1226 } 1227 //force_pci_posting(dev); 1228- 1229- mdelay(200); //200 for 8187 1230- 1231- 1232+ 1233+ mdelay(200); //200 for 8187 1234+ 1235+ 1236 // //if(priv->card_type != USB){ 1237 // write_rtl8225(dev, 0x2, 0x44d); 1238 // write_rtl8225(dev, 0x7, rtl8225_chan[channel]); 1239 // write_rtl8225(dev, 0x2, 0x47d); 1240-// 1241+// 1242 // force_pci_posting(dev); 1243 // mdelay(100); 1244-// 1245+// 1246 // write_rtl8225(dev, 0x2, 0x44d); 1247 // //} 1248- 1249- write_rtl8225(dev, 0x0, 0x2bf); 1250- 1251+ 1252+ write_rtl8225(dev, 0x0, 0x2bf); 1253+ 1254 if(priv->card_type != USB) 1255 rtl8185_rf_pins_enable(dev); 1256 //set up ZEBRA AGC table, 2005.11.17, 1257@@ -744,20 +771,20 @@ 1258 1259 mdelay(1); 1260 } 1261-#if 0 1262+#if 0 1263 for(i=0;i<128;i++){ 1264 write_phy_ofdm(dev, 0xb, rtl8225_agc[i]); 1265- 1266- mdelay(1); 1267+ 1268+ mdelay(1); 1269 write_phy_ofdm(dev, 0xa, (u8)i+ 0x80); 1270- 1271- mdelay(1); 1272+ 1273+ mdelay(1); 1274 } 1275 #endif 1276- 1277+ 1278 force_pci_posting(dev); 1279 mdelay(1); 1280- 1281+ 1282 write_phy_ofdm(dev, 0x0, 0x1); mdelay(1); 1283 write_phy_ofdm(dev, 0x1, 0x2); mdelay(1); 1284 write_phy_ofdm(dev, 0x2, ((priv->card_type == USB)? 0x42 : 0x62)); mdelay(1); 1285@@ -771,20 +798,20 @@ 1286 1287 write_phy_ofdm(dev, 0xa, 0x8); mdelay(1); 1288 1289- //write_phy_ofdm(dev, 0x18, 0xef); 1290+ //write_phy_ofdm(dev, 0x18, 0xef); 1291 // } 1292 //} 1293 write_phy_ofdm(dev, 0xb, 0x80); mdelay(1); 1294 1295 write_phy_ofdm(dev, 0xc, 0x1);mdelay(1); 1296 1297- 1298+ 1299 //if(priv->card_type != USB) 1300- write_phy_ofdm(dev, 0xd, 0x43); 1301- 1302+ write_phy_ofdm(dev, 0xd, 0x43); 1303+ 1304 write_phy_ofdm(dev, 0xe, 0xd3);mdelay(1); 1305 1306- 1307+ 1308 #if 0 1309 if(priv->card_8185 == 1){ 1310 if(priv->card_8185_Bversion) 1311@@ -796,17 +823,17 @@ 1312 write_phy_ofdm(dev, 0xf, 0x38);mdelay(1); 1313 /*ver D & 8187*/ 1314 // } 1315- 1316+ 1317 // if(priv->card_8185 == 1 && priv->card_8185_Bversion) 1318 // write_phy_ofdm(dev, 0x10, 0x04);/*ver B*/ 1319 // else 1320 write_phy_ofdm(dev, 0x10, 0x84);mdelay(1); 1321 /*ver C & D & 8187*/ 1322- 1323+ 1324 write_phy_ofdm(dev, 0x11, 0x07);mdelay(1); 1325 /*agc resp time 700*/ 1326 1327- 1328+ 1329 // if(priv->card_8185 == 2){ 1330 /* Ver D & 8187*/ 1331 write_phy_ofdm(dev, 0x12, 0x20);mdelay(1); 1332@@ -824,47 +851,46 @@ 1333 write_phy_ofdm(dev, 0x15, 0x40); mdelay(1); 1334 write_phy_ofdm(dev, 0x16, 0x0); mdelay(1); 1335 write_phy_ofdm(dev, 0x17, 0x40); mdelay(1); 1336- 1337+ 1338 // if (priv->card_type == USB) 1339 // write_phy_ofdm(dev, 0x18, 0xef); 1340- 1341+ 1342 write_phy_ofdm(dev, 0x18, 0xef);mdelay(1); 1343- 1344+ 1345 1346 write_phy_ofdm(dev, 0x19, 0x19); mdelay(1); 1347 write_phy_ofdm(dev, 0x1a, 0x20); mdelay(1); 1348 write_phy_ofdm(dev, 0x1b, 0x15);mdelay(1); 1349- 1350+ 1351 write_phy_ofdm(dev, 0x1c, 0x4);mdelay(1); 1352 1353 write_phy_ofdm(dev, 0x1d, 0xc5);mdelay(1); //2005.11.17, 1354- 1355+ 1356 write_phy_ofdm(dev, 0x1e, 0x95);mdelay(1); 1357 1358 write_phy_ofdm(dev, 0x1f, 0x75); mdelay(1); 1359 1360 // } 1361- 1362+ 1363 write_phy_ofdm(dev, 0x20, 0x1f);mdelay(1); 1364 1365 write_phy_ofdm(dev, 0x21, 0x17);mdelay(1); 1366- 1367+ 1368 write_phy_ofdm(dev, 0x22, 0x16);mdelay(1); 1369 1370 // if(priv->card_type != USB) 1371 write_phy_ofdm(dev, 0x23, 0x80);mdelay(1); //FIXME maybe not needed // <> 1372- 1373+ 1374 write_phy_ofdm(dev, 0x24, 0x46); mdelay(1); 1375 write_phy_ofdm(dev, 0x25, 0x00); mdelay(1); 1376 write_phy_ofdm(dev, 0x26, 0x90); mdelay(1); 1377 1378 write_phy_ofdm(dev, 0x27, 0x88); mdelay(1); 1379 1380- 1381+ 1382 // <> Set init. gain to m74dBm. 1383- 1384 rtl8225z2_set_gain(dev,4); 1385- 1386+ 1387 write_phy_cck(dev, 0x0, 0x98); mdelay(1); 1388 write_phy_cck(dev, 0x3, 0x20); mdelay(1); 1389 write_phy_cck(dev, 0x4, 0x7e); mdelay(1); 1390@@ -875,6 +901,9 @@ 1391 /* Ver C & D & 8187*/ 1392 1393 write_phy_cck(dev, 0x8, 0x2e);mdelay(1); 1394+ write_phy_cck(dev, 0x9, 0x11);mdelay(1); 1395+ write_phy_cck(dev, 0xa, 0x17);mdelay(1); 1396+ write_phy_cck(dev, 0xb, 0x11);mdelay(1); 1397 1398 write_phy_cck(dev, 0x10, ((priv->card_type == USB) ? 0x9b: 0x93)); mdelay(1); 1399 write_phy_cck(dev, 0x11, 0x88); mdelay(1); 1400@@ -885,52 +914,59 @@ 1401 else 1402 #endif 1403 write_phy_cck(dev, 0x13, 0xd0); /* Ver C & D & 8187*/ 1404- 1405- write_phy_cck(dev, 0x19, 0x0); 1406- write_phy_cck(dev, 0x1a, 0xa0); 1407- write_phy_cck(dev, 0x1b, 0x8); 1408- write_phy_cck(dev, 0x40, 0x86); /* CCK Carrier Sense Threshold */ 1409- 1410- write_phy_cck(dev, 0x41, 0x8d);mdelay(1); 1411 1412- 1413+// write_phy_cck(dev, 0x19, 0x0); 1414+// write_phy_cck(dev, 0x1a, 0xa0); 1415+// write_phy_cck(dev, 0x1b, 0x8); 1416+// write_phy_cck(dev, 0x40, 0x86); /* CCK Carrier Sense Threshold */ 1417+ write_phy_cck(dev, 0x19, 0x0); mdelay(1); 1418+ write_phy_cck(dev, 0x1a, 0xa0); mdelay(1); 1419+ write_phy_cck(dev, 0x1b, 0x8); mdelay(1); 1420+ write_phy_cck(dev, 0x1d, 0x0); mdelay(1); 1421+ write_phy_cck(dev, 0x40, 0x86); /* CCK Carrier Sense Threshold */ mdelay(1); 1422+ write_phy_cck(dev, 0x41, 0x9d); mdelay(1); 1423+ 1424+ 1425+// write_phy_cck(dev, 0x41, 0x8d);mdelay(1); 1426+ 1427+ 1428 write_phy_cck(dev, 0x42, 0x15); mdelay(1); 1429 write_phy_cck(dev, 0x43, 0x18); mdelay(1); 1430- 1431- 1432+ 1433+ 1434 write_phy_cck(dev, 0x44, 0x36); mdelay(1); 1435 write_phy_cck(dev, 0x45, 0x35); mdelay(1); 1436 write_phy_cck(dev, 0x46, 0x2e); mdelay(1); 1437 write_phy_cck(dev, 0x47, 0x25); mdelay(1); 1438 write_phy_cck(dev, 0x48, 0x1c); mdelay(1); 1439 write_phy_cck(dev, 0x49, 0x12); mdelay(1); 1440- write_phy_cck(dev, 0x4a, 0x9); mdelay(1); 1441- write_phy_cck(dev, 0x4b, 0x4); mdelay(1); 1442+ write_phy_cck(dev, 0x4a, 0x09); mdelay(1); 1443+ write_phy_cck(dev, 0x4b, 0x04); mdelay(1); 1444 write_phy_cck(dev, 0x4c, 0x5);mdelay(1); 1445 1446 1447 write_nic_byte(dev, 0x5b, 0x0d); mdelay(1); 1448 1449- 1450+ 1451 1452 // <> 1453 // // TESTR 0xb 8187 1454 // write_phy_cck(dev, 0x10, 0x93);// & 0xfb); 1455-// 1456+// 1457 // //if(priv->card_type != USB){ 1458 // write_phy_ofdm(dev, 0x2, 0x62); 1459 // write_phy_ofdm(dev, 0x6, 0x0); 1460 // write_phy_ofdm(dev, 0x8, 0x0); 1461 // //} 1462- 1463+ 1464 rtl8225z2_SetTXPowerLevel(dev, channel); 1465- 1466+ 1467 write_phy_cck(dev, 0x10, 0x9b); mdelay(1); /* Rx ant A, 0xdb for B */ 1468 write_phy_ofdm(dev, 0x26, 0x90); mdelay(1); /* Rx ant A, 0x10 for B */ 1469- 1470+ 1471 rtl8185_tx_antenna(dev, 0x3); /* TX ant A, 0x0 for B */ 1472- 1473- /* switch to high-speed 3-wire 1474+ 1475+ /* switch to high-speed 3-wire 1476 * last digit. 2 for both cck and ofdm 1477 */ 1478 if(priv->card_type == USB) 1479@@ -943,23 +979,23 @@ 1480 // if(priv->card_type != USB) 1481 // rtl8225_set_gain(dev, 4); /* FIXME this '1' is random */ // <> 1482 // rtl8225_set_mode(dev, 1); /* FIXME start in B mode */ // <> 1483-// 1484+// 1485 // /* make sure is waken up! */ 1486 // write_rtl8225(dev,0x4, 0x9ff); 1487-// rtl8180_set_anaparam(dev, RTL8225_ANAPARAM_ON); 1488+// rtl8180_set_anaparam(dev, RTL8225_ANAPARAM_ON); 1489 // rtl8185_set_anaparam2(dev, RTL8225_ANAPARAM2_ON); 1490- 1491+ 1492 rtl8225_rf_set_chan(dev, priv->chan); 1493 1494 //write_nic_word(dev,BRSR,brsr); 1495- 1496+ 1497 //rtl8225z2_rf_set_mode(dev); 1498 } 1499 1500-void rtl8225z2_rf_set_mode(struct net_device *dev) 1501+void rtl8225z2_rf_set_mode(struct net_device *dev) 1502 { 1503- struct r8180_priv *priv = ieee80211_priv(dev); 1504- 1505+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 1506+ 1507 if(priv->ieee80211->mode == IEEE_A) 1508 { 1509 write_rtl8225(dev, 0x5, 0x1865); 1510@@ -970,15 +1006,15 @@ 1511 write_phy_ofdm(dev, 0xb, 0x99); 1512 write_phy_ofdm(dev, 0xf, 0x20); 1513 write_phy_ofdm(dev, 0x11, 0x7); 1514- 1515+ 1516 rtl8225z2_set_gain(dev,4); 1517- 1518+ 1519 write_phy_ofdm(dev,0x15, 0x40); 1520 write_phy_ofdm(dev,0x17, 0x40); 1521- 1522+ 1523 write_nic_dword(dev, 0x94,0x10000000); 1524 }else{ 1525- 1526+ 1527 write_rtl8225(dev, 0x5, 0x1864); 1528 write_nic_dword(dev, RF_PARA, 0x10044); 1529 write_nic_dword(dev, RF_TIMING, 0xa8008); 1530@@ -987,12 +1023,12 @@ 1531 write_phy_ofdm(dev, 0xb, 0x99); 1532 write_phy_ofdm(dev, 0xf, 0x20); 1533 write_phy_ofdm(dev, 0x11, 0x7); 1534- 1535+ 1536 rtl8225z2_set_gain(dev,4); 1537- 1538+ 1539 write_phy_ofdm(dev,0x15, 0x40); 1540 write_phy_ofdm(dev,0x17, 0x40); 1541- 1542+ 1543 write_nic_dword(dev, 0x94,0x04000002); 1544 } 1545 } 1546diff -Naur rtl8187_orig/beta-8187/r8180_wx.c rtl8187_rawtx/beta-8187/r8180_wx.c 1547--- rtl8187_orig/beta-8187/r8180_wx.c 2007-03-13 23:45:09.000000000 +0100 1548+++ rtl8187_rawtx/beta-8187/r8180_wx.c 2007-06-08 23:30:33.000000000 +0200 1549@@ -1,19 +1,19 @@ 1550-/* 1551+/* 1552 This file contains wireless extension handlers. 1553 1554 This is part of rtl8180 OpenSource driver. 1555- Copyright (C) Andrea Merello 2004-2005 <andreamrl@tiscali.it> 1556+ Copyright (C) Andrea Merello 2004-2005 <andreamrl@tiscali.it> 1557 Released under the terms of GPL (General Public Licence) 1558- 1559- Parts of this driver are based on the GPL part 1560+ 1561+ Parts of this driver are based on the GPL part 1562 of the official realtek driver. 1563- 1564- Parts of this driver are based on the rtl8180 driver skeleton 1565+ 1566+ Parts of this driver are based on the rtl8180 driver skeleton 1567 from Patric Schenke & Andres Salomon. 1568 1569 Parts of this driver are based on the Intel Pro Wireless 2100 GPL driver. 1570- 1571- We want to tanks the Authors of those projects and the Ndiswrapper 1572+ 1573+ We want to tanks the Authors of those projects and the Ndiswrapper 1574 project Authors. 1575 */ 1576 1577@@ -21,20 +21,21 @@ 1578 1579 #include "r8187.h" 1580 #include "r8180_hw.h" 1581+#include "r8180_rtl8225.h" 1582 1583 1584 #define RATE_COUNT 4 1585 u32 rtl8180_rates[] = {1000000,2000000,5500000,11000000, 1586 6000000,9000000,12000000,18000000,24000000,36000000,48000000,54000000}; 1587- 1588+ 1589 1590 static int r8180_wx_get_freq(struct net_device *dev, 1591 struct iw_request_info *a, 1592 union iwreq_data *wrqu, char *b) 1593 { 1594- struct r8180_priv *priv = ieee80211_priv(dev); 1595- 1596- return ieee80211_wx_get_freq(priv->ieee80211,a,wrqu,b); 1597+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 1598+ 1599+ return ieee80211_wx_get_freq_rtl7(priv->ieee80211,a,wrqu,b); 1600 } 1601 1602 1603@@ -45,28 +46,28 @@ 1604 { 1605 int *parms = (int *)b; 1606 int bi = parms[0]; 1607- 1608- struct r8180_priv *priv = ieee80211_priv(dev); 1609- 1610+ 1611+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 1612+ 1613 down(&priv->wx_sem); 1614 DMESG("setting beacon interval to %x",bi); 1615- 1616+ 1617 priv->ieee80211->beacon_interval=bi; 1618 rtl8180_commit(dev); 1619 up(&priv->wx_sem); 1620- 1621- return 0; 1622+ 1623+ return 0; 1624 } 1625 1626 1627 static int r8180_wx_set_forceassociate(struct net_device *dev, struct iw_request_info *aa, 1628 union iwreq_data *wrqu, char *extra) 1629 { 1630- struct r8180_priv *priv=ieee80211_priv(dev); 1631+ struct r8180_priv *priv=ieee80211_priv_rtl7(dev); 1632 int *parms = (int *)extra; 1633- 1634+ 1635 priv->ieee80211->force_associate = (parms[0] > 0); 1636- 1637+ 1638 1639 return 0; 1640 } 1641@@ -75,108 +76,157 @@ 1642 static int r8180_wx_get_mode(struct net_device *dev, struct iw_request_info *a, 1643 union iwreq_data *wrqu, char *b) 1644 { 1645- struct r8180_priv *priv=ieee80211_priv(dev); 1646+ struct r8180_priv *priv=ieee80211_priv_rtl7(dev); 1647 1648- return ieee80211_wx_get_mode(priv->ieee80211,a,wrqu,b); 1649+ return ieee80211_wx_get_mode_rtl7(priv->ieee80211,a,wrqu,b); 1650 } 1651 1652 1653 1654-static int r8180_wx_get_rate(struct net_device *dev, 1655- struct iw_request_info *info, 1656+static int r8180_wx_get_rate(struct net_device *dev, 1657+ struct iw_request_info *info, 1658 union iwreq_data *wrqu, char *extra) 1659 { 1660- struct r8180_priv *priv = ieee80211_priv(dev); 1661- return ieee80211_wx_get_rate(priv->ieee80211,info,wrqu,extra); 1662+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 1663+ return ieee80211_wx_get_rate_rtl7(priv->ieee80211,info,wrqu,extra); 1664 } 1665 1666 1667 1668-static int r8180_wx_set_rate(struct net_device *dev, 1669- struct iw_request_info *info, 1670+static int r8180_wx_set_rate(struct net_device *dev, 1671+ struct iw_request_info *info, 1672 union iwreq_data *wrqu, char *extra) 1673 { 1674 int ret; 1675- struct r8180_priv *priv = ieee80211_priv(dev); 1676- 1677+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 1678+ 1679 down(&priv->wx_sem); 1680+ ret = ieee80211_wx_set_rate_rtl7(priv->ieee80211,info,wrqu,extra); 1681 1682- ret = ieee80211_wx_set_rate(priv->ieee80211,info,wrqu,extra); 1683- 1684 up(&priv->wx_sem); 1685- 1686+ 1687 return ret; 1688 } 1689 1690-static int r8180_wx_set_rawtx(struct net_device *dev, 1691- struct iw_request_info *info, 1692- union iwreq_data *wrqu, char *extra) 1693+static int r8180_wx_get_txpow(struct net_device *dev, 1694+ struct iw_request_info *info, 1695+ union iwreq_data *wrqu, char *extra) 1696 { 1697- struct r8180_priv *priv = ieee80211_priv(dev); 1698- int ret; 1699- 1700+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 1701+ int i=0; 1702 down(&priv->wx_sem); 1703- 1704- ret = ieee80211_wx_set_rawtx(priv->ieee80211, info, wrqu, extra); 1705- 1706+ wrqu->power.value = 0; 1707+ for(i=0; i<15; i++) 1708+ { 1709+ if(priv->chtxpwr[i] > wrqu->power.value) wrqu->power.value = priv->chtxpwr[i]; 1710+ if(priv->chtxpwr_ofdm[i] > wrqu->power.value) wrqu->power.value = priv->chtxpwr_ofdm[i]; 1711+ } 1712+ wrqu->power.fixed = 1; 1713+ wrqu->power.flags = IW_TXPOW_DBM; 1714+ wrqu->power.disabled = 0; 1715 up(&priv->wx_sem); 1716- 1717+ 1718+ return 0; 1719+} 1720+ 1721+#if 1 1722+static int r8180_wx_set_txpow(struct net_device *dev, 1723+ struct iw_request_info *info, 1724+ union iwreq_data *wrqu, char *extra) 1725+{ 1726+ int ret = 0, i=0; 1727+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 1728+ 1729+ down(&priv->wx_sem); 1730+ 1731+ if (wrqu->power.flags != IW_TXPOW_DBM) 1732+ { 1733+ ret = -EINVAL; 1734+ goto out; 1735+ } 1736+ 1737+ if(wrqu->power.value > priv->txpwr_max) 1738+ { 1739+ ret = -EINVAL; 1740+ goto out; 1741+ } 1742+ 1743+ if(wrqu->power.value < 0) 1744+ { 1745+ ret = -EINVAL; 1746+ goto out; 1747+ } 1748+ 1749+ for(i=1;i<15;i++) 1750+ { 1751+ priv->chtxpwr[i] = priv->chtxpwr_orig[i] - (priv->txpwr_max - wrqu->power.value); 1752+ if(priv->chtxpwr[i] > priv->chtxpwr_orig[i]) priv->chtxpwr[i] = 0; 1753+ 1754+ priv->chtxpwr_ofdm[i] = priv->chtxpwr_ofdm_orig[i] - (priv->txpwr_max - wrqu->power.value); 1755+ if(priv->chtxpwr_ofdm[i] > priv->chtxpwr_ofdm_orig[i]) priv->chtxpwr_ofdm[i] = 0; 1756+ } 1757+ rtl8225z2_SetTXPowerLevel(dev, 1); 1758+ 1759+ out: 1760+ up(&priv->wx_sem); 1761+ 1762 return ret; 1763- 1764+ 1765 } 1766+#endif 1767 1768-static int r8180_wx_set_crcmon(struct net_device *dev, 1769- struct iw_request_info *info, 1770+static int r8180_wx_set_crcmon(struct net_device *dev, 1771+ struct iw_request_info *info, 1772 union iwreq_data *wrqu, char *extra) 1773 { 1774- struct r8180_priv *priv = ieee80211_priv(dev); 1775+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 1776 int *parms = (int *)extra; 1777 int enable = (parms[0] > 0); 1778 short prev = priv->crcmon; 1779 1780 down(&priv->wx_sem); 1781- 1782- if(enable) 1783+ 1784+ if(enable) 1785 priv->crcmon=1; 1786- else 1787+ else 1788 priv->crcmon=0; 1789 1790- DMESG("bad CRC in monitor mode are %s", 1791+ DMESG("bad CRC in monitor mode are %s", 1792 priv->crcmon ? "accepted" : "rejected"); 1793 1794 if(prev != priv->crcmon && priv->up){ 1795 rtl8180_down(dev); 1796 rtl8180_up(dev); 1797 } 1798- 1799+ 1800 up(&priv->wx_sem); 1801- 1802+ 1803 return 0; 1804 } 1805 1806 static int r8180_wx_set_mode(struct net_device *dev, struct iw_request_info *a, 1807 union iwreq_data *wrqu, char *b) 1808 { 1809- struct r8180_priv *priv = ieee80211_priv(dev); 1810+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 1811 int ret; 1812- 1813+ 1814 down(&priv->wx_sem); 1815- 1816- ret = ieee80211_wx_set_mode(priv->ieee80211,a,wrqu,b); 1817- 1818+ 1819+ ret = ieee80211_wx_set_mode_rtl7(priv->ieee80211,a,wrqu,b); 1820+ 1821 rtl8187_set_rxconf(dev); 1822- 1823+ 1824 up(&priv->wx_sem); 1825 return ret; 1826 } 1827 1828 1829-static int rtl8180_wx_get_range(struct net_device *dev, 1830- struct iw_request_info *info, 1831+static int rtl8180_wx_get_range(struct net_device *dev, 1832+ struct iw_request_info *info, 1833 union iwreq_data *wrqu, char *extra) 1834 { 1835 struct iw_range *range = (struct iw_range *)extra; 1836- struct r8180_priv *priv = ieee80211_priv(dev); 1837+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 1838 u16 val; 1839 int i; 1840 1841@@ -186,26 +236,26 @@ 1842 /* Let's try to keep this struct in the same order as in 1843 * linux/include/wireless.h 1844 */ 1845- 1846+ 1847 /* TODO: See what values we can set, and remove the ones we can't 1848 * set, or fill them with some default data. 1849 */ 1850 1851 /* ~5 Mb/s real (802.11b) */ 1852- range->throughput = 5 * 1000 * 1000; 1853+ range->throughput = 5 * 1000 * 1000; 1854 1855 // TODO: Not used in 802.11b? 1856 // range->min_nwid; /* Minimal NWID we are able to set */ 1857 // TODO: Not used in 802.11b? 1858 // range->max_nwid; /* Maximal NWID we are able to set */ 1859- 1860+ 1861 /* Old Frequency (backward compat - moved lower ) */ 1862-// range->old_num_channels; 1863+// range->old_num_channels; 1864 // range->old_num_frequency; 1865 // range->old_freq[6]; /* Filler to keep "version" at the same offset */ 1866 if(priv->rf_set_sens != NULL) 1867 range->sensitivity = priv->max_sens; /* signal level threshold range */ 1868- 1869+ 1870 range->max_qual.qual = 100; 1871 /* TODO: Find real max RSSI and stick here */ 1872 range->max_qual.level = 0; 1873@@ -219,14 +269,14 @@ 1874 range->avg_qual.updated = 7; /* Updated all three */ 1875 1876 range->num_bitrates = RATE_COUNT; 1877- 1878+ 1879 for (i = 0; i < RATE_COUNT && i < IW_MAX_BITRATES; i++) { 1880 range->bitrate[i] = rtl8180_rates[i]; 1881 } 1882- 1883+ 1884 range->min_frag = MIN_FRAG_THRESHOLD; 1885 range->max_frag = MAX_FRAG_THRESHOLD; 1886- 1887+ 1888 range->pm_capa = 0; 1889 1890 range->we_version_compiled = WIRELESS_EXT; 1891@@ -243,18 +293,18 @@ 1892 range->num_channels = 14; 1893 1894 for (i = 0, val = 0; i < 14; i++) { 1895- 1896+ 1897 // Include only legal frequencies for some countries 1898 if ((priv->challow)[i+1]) { 1899 range->freq[val].i = i + 1; 1900- range->freq[val].m = ieee80211_wlan_frequencies[i] * 100000; 1901+ range->freq[val].m = ieee80211_wlan_frequencies_rtl7[i] * 100000; 1902 range->freq[val].e = 1; 1903 val++; 1904 } else { 1905 // FIXME: do we need to set anything for channels 1906 // we don't use ? 1907 } 1908- 1909+ 1910 if (val == IW_MAX_FREQUENCIES) 1911 break; 1912 } 1913@@ -267,15 +317,15 @@ 1914 static int r8180_wx_set_scan(struct net_device *dev, struct iw_request_info *a, 1915 union iwreq_data *wrqu, char *b) 1916 { 1917- struct r8180_priv *priv = ieee80211_priv(dev); 1918+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 1919 int ret; 1920- 1921+ 1922 if(!priv->up) return -1; 1923- 1924+ 1925 down(&priv->wx_sem); 1926- 1927- ret = ieee80211_wx_set_scan(priv->ieee80211,a,wrqu,b); 1928- 1929+ 1930+ ret = ieee80211_wx_set_scan_rtl7(priv->ieee80211,a,wrqu,b); 1931+ 1932 up(&priv->wx_sem); 1933 return ret; 1934 } 1935@@ -286,50 +336,50 @@ 1936 { 1937 1938 int ret; 1939- struct r8180_priv *priv = ieee80211_priv(dev); 1940- 1941+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 1942+ 1943 if(!priv->up) return -1; 1944- 1945+ 1946 down(&priv->wx_sem); 1947 1948- ret = ieee80211_wx_get_scan(priv->ieee80211,a,wrqu,b); 1949- 1950+ ret = ieee80211_wx_get_scan_rtl7(priv->ieee80211,a,wrqu,b); 1951+ 1952 up(&priv->wx_sem); 1953- 1954+ 1955 return ret; 1956 } 1957 1958 1959-static int r8180_wx_set_essid(struct net_device *dev, 1960+static int r8180_wx_set_essid(struct net_device *dev, 1961 struct iw_request_info *a, 1962 union iwreq_data *wrqu, char *b) 1963 { 1964- struct r8180_priv *priv = ieee80211_priv(dev); 1965- 1966+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 1967+ 1968 int ret; 1969- 1970+ 1971 down(&priv->wx_sem); 1972- 1973- ret = ieee80211_wx_set_essid(priv->ieee80211,a,wrqu,b); 1974- 1975+ 1976+ ret = ieee80211_wx_set_essid_rtl7(priv->ieee80211,a,wrqu,b); 1977+ 1978 up(&priv->wx_sem); 1979 return ret; 1980 } 1981 1982 1983-static int r8180_wx_get_essid(struct net_device *dev, 1984+static int r8180_wx_get_essid(struct net_device *dev, 1985 struct iw_request_info *a, 1986 union iwreq_data *wrqu, char *b) 1987 { 1988 int ret; 1989- struct r8180_priv *priv = ieee80211_priv(dev); 1990- 1991+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 1992+ 1993 down(&priv->wx_sem); 1994- 1995- ret = ieee80211_wx_get_essid(priv->ieee80211, a, wrqu, b); 1996+ 1997+ ret = ieee80211_wx_get_essid_rtl7(priv->ieee80211, a, wrqu, b); 1998 1999 up(&priv->wx_sem); 2000- 2001+ 2002 return ret; 2003 } 2004 2005@@ -338,30 +388,30 @@ 2006 union iwreq_data *wrqu, char *b) 2007 { 2008 int ret; 2009- struct r8180_priv *priv = ieee80211_priv(dev); 2010- 2011+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 2012+ 2013 down(&priv->wx_sem); 2014- 2015- ret = ieee80211_wx_set_freq(priv->ieee80211, a, wrqu, b); 2016- 2017+ 2018+ ret = ieee80211_wx_set_freq_rtl7(priv->ieee80211, a, wrqu, b); 2019+ 2020 up(&priv->wx_sem); 2021 return ret; 2022 } 2023 2024-static int r8180_wx_get_name(struct net_device *dev, 2025- struct iw_request_info *info, 2026+static int r8180_wx_get_name(struct net_device *dev, 2027+ struct iw_request_info *info, 2028 union iwreq_data *wrqu, char *extra) 2029 { 2030- struct r8180_priv *priv = ieee80211_priv(dev); 2031- return ieee80211_wx_get_name(priv->ieee80211, info, wrqu, extra); 2032+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 2033+ return ieee80211_wx_get_name_rtl7(priv->ieee80211, info, wrqu, extra); 2034 } 2035 2036 2037-static int r8180_wx_set_frag(struct net_device *dev, 2038- struct iw_request_info *info, 2039+static int r8180_wx_set_frag(struct net_device *dev, 2040+ struct iw_request_info *info, 2041 union iwreq_data *wrqu, char *extra) 2042 { 2043- struct r8180_priv *priv = ieee80211_priv(dev); 2044+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 2045 2046 if (wrqu->frag.disabled) 2047 priv->ieee80211->fts = DEFAULT_FRAG_THRESHOLD; 2048@@ -369,7 +419,7 @@ 2049 if (wrqu->frag.value < MIN_FRAG_THRESHOLD || 2050 wrqu->frag.value > MAX_FRAG_THRESHOLD) 2051 return -EINVAL; 2052- 2053+ 2054 priv->ieee80211->fts = wrqu->frag.value & ~0x1; 2055 } 2056 2057@@ -377,11 +427,11 @@ 2058 } 2059 2060 2061-static int r8180_wx_get_frag(struct net_device *dev, 2062- struct iw_request_info *info, 2063+static int r8180_wx_get_frag(struct net_device *dev, 2064+ struct iw_request_info *info, 2065 union iwreq_data *wrqu, char *extra) 2066 { 2067- struct r8180_priv *priv = ieee80211_priv(dev); 2068+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 2069 2070 wrqu->frag.value = priv->ieee80211->fts; 2071 wrqu->frag.fixed = 0; /* no auto select */ 2072@@ -397,49 +447,49 @@ 2073 char *extra) 2074 { 2075 int ret; 2076- struct r8180_priv *priv = ieee80211_priv(dev); 2077- 2078+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 2079+ 2080 down(&priv->wx_sem); 2081- 2082- ret = ieee80211_wx_set_wap(priv->ieee80211,info,awrq,extra); 2083- 2084+ 2085+ ret = ieee80211_wx_set_wap_rtl7(priv->ieee80211,info,awrq,extra); 2086+ 2087 up(&priv->wx_sem); 2088 return ret; 2089- 2090+ 2091 } 2092- 2093 2094-static int r8180_wx_get_wap(struct net_device *dev, 2095- struct iw_request_info *info, 2096+ 2097+static int r8180_wx_get_wap(struct net_device *dev, 2098+ struct iw_request_info *info, 2099 union iwreq_data *wrqu, char *extra) 2100 { 2101- struct r8180_priv *priv = ieee80211_priv(dev); 2102- 2103- return ieee80211_wx_get_wap(priv->ieee80211,info,wrqu,extra); 2104+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 2105+ 2106+ return ieee80211_wx_get_wap_rtl7(priv->ieee80211,info,wrqu,extra); 2107 } 2108 2109 2110-static int r8180_wx_get_enc(struct net_device *dev, 2111- struct iw_request_info *info, 2112+static int r8180_wx_get_enc(struct net_device *dev, 2113+ struct iw_request_info *info, 2114 union iwreq_data *wrqu, char *key) 2115 { 2116- struct r8180_priv *priv = ieee80211_priv(dev); 2117- 2118- return ieee80211_wx_get_encode(priv->ieee80211, info, wrqu, key); 2119+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 2120+ 2121+ return ieee80211_wx_get_encode_rtl7(priv->ieee80211, info, wrqu, key); 2122 } 2123 2124-static int r8180_wx_set_enc(struct net_device *dev, 2125- struct iw_request_info *info, 2126+static int r8180_wx_set_enc(struct net_device *dev, 2127+ struct iw_request_info *info, 2128 union iwreq_data *wrqu, char *key) 2129 { 2130- struct r8180_priv *priv = ieee80211_priv(dev); 2131+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 2132 int ret; 2133- 2134+ 2135 down(&priv->wx_sem); 2136- 2137+ 2138 DMESG("Setting SW wep key"); 2139- ret = ieee80211_wx_set_encode(priv->ieee80211,info,wrqu,key); 2140- 2141+ ret = ieee80211_wx_set_encode_rtl7(priv->ieee80211,info,wrqu,key); 2142+ 2143 up(&priv->wx_sem); 2144 return ret; 2145 } 2146@@ -447,28 +497,28 @@ 2147 2148 static int r8180_wx_set_scan_type(struct net_device *dev, struct iw_request_info *aa, union 2149 iwreq_data *wrqu, char *p){ 2150- 2151- struct r8180_priv *priv = ieee80211_priv(dev); 2152+ 2153+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 2154 int *parms=(int*)p; 2155 int mode=parms[0]; 2156- 2157+ 2158 priv->ieee80211->active_scan = mode; 2159- 2160+ 2161 return 1; 2162 } 2163 2164 2165 2166-static int r8180_wx_set_retry(struct net_device *dev, 2167- struct iw_request_info *info, 2168+static int r8180_wx_set_retry(struct net_device *dev, 2169+ struct iw_request_info *info, 2170 union iwreq_data *wrqu, char *extra) 2171 { 2172- struct r8180_priv *priv = ieee80211_priv(dev); 2173+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 2174 int err = 0; 2175- 2176+ 2177 down(&priv->wx_sem); 2178- 2179- if (wrqu->retry.flags & IW_RETRY_LIFETIME || 2180+ 2181+ if (wrqu->retry.flags & IW_RETRY_LIFETIME || 2182 wrqu->retry.disabled){ 2183 err = -EINVAL; 2184 goto exit; 2185@@ -485,13 +535,13 @@ 2186 if (wrqu->retry.flags & IW_RETRY_MAX) { 2187 priv->retry_rts = wrqu->retry.value; 2188 DMESG("Setting retry for RTS/CTS data to %d", wrqu->retry.value); 2189- 2190+ 2191 }else { 2192 priv->retry_data = wrqu->retry.value; 2193 DMESG("Setting retry for non RTS/CTS data to %d", wrqu->retry.value); 2194 } 2195- 2196- /* FIXME ! 2197+ 2198+ /* FIXME ! 2199 * We might try to write directly the TX config register 2200 * or to restart just the (R)TX process. 2201 * I'm unsure if whole reset is really needed 2202@@ -503,28 +553,28 @@ 2203 rtl8180_rtx_disable(dev); 2204 rtl8180_rx_enable(dev); 2205 rtl8180_tx_enable(dev); 2206- 2207+ 2208 } 2209 */ 2210 exit: 2211 up(&priv->wx_sem); 2212- 2213+ 2214 return err; 2215 } 2216 2217-static int r8180_wx_get_retry(struct net_device *dev, 2218- struct iw_request_info *info, 2219+static int r8180_wx_get_retry(struct net_device *dev, 2220+ struct iw_request_info *info, 2221 union iwreq_data *wrqu, char *extra) 2222 { 2223- struct r8180_priv *priv = ieee80211_priv(dev); 2224- 2225+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 2226+ 2227 2228 wrqu->retry.disabled = 0; /* can't be disabled */ 2229 2230- if ((wrqu->retry.flags & IW_RETRY_TYPE) == 2231- IW_RETRY_LIFETIME) 2232+ if ((wrqu->retry.flags & IW_RETRY_TYPE) == 2233+ IW_RETRY_LIFETIME) 2234 return -EINVAL; 2235- 2236+ 2237 if (wrqu->retry.flags & IW_RETRY_MAX) { 2238 wrqu->retry.flags = IW_RETRY_LIMIT & IW_RETRY_MAX; 2239 wrqu->retry.value = priv->retry_rts; 2240@@ -533,30 +583,30 @@ 2241 wrqu->retry.value = priv->retry_data; 2242 } 2243 //DMESG("returning %d",wrqu->retry.value); 2244- 2245+ 2246 2247 return 0; 2248 } 2249 2250-static int r8180_wx_get_sens(struct net_device *dev, 2251- struct iw_request_info *info, 2252+static int r8180_wx_get_sens(struct net_device *dev, 2253+ struct iw_request_info *info, 2254 union iwreq_data *wrqu, char *extra) 2255 { 2256- struct r8180_priv *priv = ieee80211_priv(dev); 2257- if(priv->rf_set_sens == NULL) 2258+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 2259+ if(priv->rf_set_sens == NULL) 2260 return -1; /* we have not this support for this radio */ 2261 wrqu->sens.value = priv->sens; 2262 return 0; 2263 } 2264 2265 2266-static int r8180_wx_set_sens(struct net_device *dev, 2267- struct iw_request_info *info, 2268+static int r8180_wx_set_sens(struct net_device *dev, 2269+ struct iw_request_info *info, 2270 union iwreq_data *wrqu, char *extra) 2271 { 2272- 2273- struct r8180_priv *priv = ieee80211_priv(dev); 2274- 2275+ 2276+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 2277+ 2278 short err = 0; 2279 down(&priv->wx_sem); 2280 //DMESG("attempt to set sensivity to %ddb",wrqu->sens.value); 2281@@ -571,7 +621,7 @@ 2282 2283 exit: 2284 up(&priv->wx_sem); 2285- 2286+ 2287 return err; 2288 } 2289 2290@@ -623,32 +673,28 @@ 2291 dummy, /* SIOCGIWRTS */ 2292 r8180_wx_set_frag, /* SIOCSIWFRAG */ 2293 r8180_wx_get_frag, /* SIOCGIWFRAG */ 2294- dummy, /* SIOCSIWTXPOW */ 2295- dummy, /* SIOCGIWTXPOW */ 2296+ r8180_wx_set_txpow, /* SIOCSIWTXPOW */ 2297+ r8180_wx_get_txpow, /* SIOCGIWTXPOW */ 2298 r8180_wx_set_retry, /* SIOCSIWRETRY */ 2299 r8180_wx_get_retry, /* SIOCGIWRETRY */ 2300 r8180_wx_set_enc, /* SIOCSIWENCODE */ 2301 r8180_wx_get_enc, /* SIOCGIWENCODE */ 2302 dummy, /* SIOCSIWPOWER */ 2303 dummy, /* SIOCGIWPOWER */ 2304-}; 2305+}; 2306 2307 2308-static const struct iw_priv_args r8180_private_args[] = { 2309- 2310+static const struct iw_priv_args r8180_private_args[] = { 2311+ 2312 { 2313- SIOCIWFIRSTPRIV + 0x0, 2314- IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "badcrc" 2315- }, 2316- 2317+ SIOCIWFIRSTPRIV + 0x0, 2318+ IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "badcrc" 2319+ }, 2320+ 2321 { 2322 SIOCIWFIRSTPRIV + 0x1, 2323 IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "activescan" 2324- 2325- }, 2326- { 2327- SIOCIWFIRSTPRIV + 0x2, 2328- IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1, 0, "rawtx" 2329+ 2330 } 2331 }; 2332 2333@@ -660,13 +706,12 @@ 2334 // r8180_wx_set_beaconinterval, 2335 // r8180_wx_set_monitor_type, 2336 r8180_wx_set_scan_type, 2337- r8180_wx_set_rawtx, 2338 }; 2339 2340-#if WIRELESS_EXT >= 17 2341+#if WIRELESS_EXT >= 17 2342 static struct iw_statistics *r8180_get_wireless_stats(struct net_device *dev) 2343 { 2344- struct r8180_priv *priv = ieee80211_priv(dev); 2345+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 2346 2347 return &priv->wstats; 2348 } 2349@@ -679,8 +724,8 @@ 2350 .private = r8180_private_handler, 2351 .num_private = sizeof(r8180_private_handler) / sizeof(iw_handler), 2352 .num_private_args = sizeof(r8180_private_args) / sizeof(struct iw_priv_args), 2353-#if WIRELESS_EXT >= 17 2354+#if WIRELESS_EXT >= 17 2355 .get_wireless_stats = r8180_get_wireless_stats, 2356 #endif 2357- .private_args = (struct iw_priv_args *)r8180_private_args, 2358+ .private_args = (struct iw_priv_args *)r8180_private_args, 2359 }; 2360diff -Naur rtl8187_orig/beta-8187/r8187_core.c rtl8187_rawtx/beta-8187/r8187_core.c 2361--- rtl8187_orig/beta-8187/r8187_core.c 2007-03-13 23:45:09.000000000 +0100 2362+++ rtl8187_rawtx/beta-8187/r8187_core.c 2007-06-08 23:30:33.000000000 +0200 2363@@ -1,27 +1,27 @@ 2364 /* 2365 This is part of rtl8187 OpenSource driver - v 0.1 2366- Copyright (C) Andrea Merello 2005 <andreamrl@tiscali.it> 2367+ Copyright (C) Andrea Merello 2005 <andreamrl@tiscali.it> 2368 Released under the terms of GPL (General Public License) 2369- 2370- 2371- Parts of this driver are based on the rtl8180 driver skeleton 2372+ 2373+ 2374+ Parts of this driver are based on the rtl8180 driver skeleton 2375 from Patric Schenke & Andres Salomon. 2376 2377 Parts of this driver are based on the Intel Pro Wireless 2*00 GPL drivers. 2378- 2379+ 2380 some ideas might be derived from David Young rtl8180 netbsd driver. 2381- 2382+ 2383 Parts of the usb code are from the r8150.c driver in linux kernel 2384- 2385+ 2386 Some ideas borrowed from the 8139too.c driver included in linux kernel. 2387- 2388- We (I?) want to thanks the Authors of those projecs and also the 2389+ 2390+ We (I?) want to thanks the Authors of those projecs and also the 2391 Ndiswrapper's project Authors. 2392- 2393- A special big thanks goes also to Realtek corp. for their help in my 2394- attempt to add RTL8187 and RTL8225 support, and to David Young also. 2395 2396- - Please note that this file is a modified version from rtl8180-sa2400 2397+ A special big thanks goes also to Realtek corp. for their help in my 2398+ attempt to add RTL8187 and RTL8225 support, and to David Young also. 2399+ 2400+ - Please note that this file is a modified version from rtl8180-sa2400 2401 drv. So some other people have contributed to this project, and they are 2402 thanked in the rtl8180-sa2400 CHANGELOG. 2403 */ 2404@@ -57,6 +57,7 @@ 2405 #undef DEBUG_IRQ_TASKLET 2406 #undef DEBUG_TX_ALLOC 2407 #undef DEBUG_TX_DESC 2408+#undef DEBUG_TX_POWER 2409 2410 //#define CONFIG_RTL8180_IO_MAP 2411 2412@@ -66,6 +67,9 @@ 2413 #include "r8180_93cx6.h" /* Card EEPROM */ 2414 #include "r8180_wx.h" 2415 2416+#if !(defined(CONFIG_USB_EHCI_HCD) || defined (CONFIG_USB_EHCI_HCD_MODULE)) 2417+ #error Build your kernel with ehci_hcd support! 2418+#endif 2419 2420 // FIXME: check if 2.6.7 is ok 2421 #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,7)) 2422@@ -98,6 +102,10 @@ 2423 #endif 2424 static int channels = 0x3fff; 2425 2426+// #define DEBUG_EPROM 2427+// #define DEBUG_REGISTERS 2428+// #define DEBUG_TX_POWER 2429+ 2430 MODULE_LICENSE("GPL"); 2431 MODULE_VERSION("V 1.1"); 2432 MODULE_DEVICE_TABLE(usb, rtl8187_usb_id_tbl); 2433@@ -137,7 +145,7 @@ 2434 2435 static int __devinit rtl8187_usb_probe(struct usb_interface *intf, 2436 const struct usb_device_id *id); 2437- 2438+ 2439 static void __devexit rtl8187_usb_disconnect(struct usb_interface *intf); 2440 2441 static struct usb_driver rtl8187_usb_driver = { 2442@@ -158,13 +166,12 @@ 2443 #endif 2444 }; 2445 2446- 2447 void write_nic_byte_E(struct net_device *dev, int indx, u8 data) 2448 { 2449- 2450- struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); 2451+ 2452+ struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv_rtl7(dev); 2453 struct usb_device *udev = priv->udev; 2454- 2455+ 2456 usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 2457 RTL8187_REQ_SET_REGS, RTL8187_REQT_WRITE, 2458 indx|0xfe00, 0, &data, 1, HZ / 2); 2459@@ -173,10 +180,10 @@ 2460 2461 void write_nic_byte(struct net_device *dev, int indx, u8 data) 2462 { 2463- 2464- struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); 2465+ 2466+ struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv_rtl7(dev); 2467 struct usb_device *udev = priv->udev; 2468- 2469+ 2470 usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 2471 RTL8187_REQ_SET_REGS, RTL8187_REQT_WRITE, 2472 indx|0xff00, 0, &data, 1, HZ / 2); 2473@@ -185,10 +192,10 @@ 2474 2475 void write_nic_word(struct net_device *dev, int indx, u16 data) 2476 { 2477- 2478- struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); 2479+ 2480+ struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv_rtl7(dev); 2481 struct usb_device *udev = priv->udev; 2482- 2483+ 2484 usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 2485 RTL8187_REQ_SET_REGS, RTL8187_REQT_WRITE, 2486 indx|0xff00, 0, &data, 2, HZ / 2); 2487@@ -197,23 +204,23 @@ 2488 2489 void write_nic_dword(struct net_device *dev, int indx, u32 data) 2490 { 2491- 2492- struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); 2493+ 2494+ struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv_rtl7(dev); 2495 struct usb_device *udev = priv->udev; 2496- 2497+ 2498 usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 2499 RTL8187_REQ_SET_REGS, RTL8187_REQT_WRITE, 2500 indx|0xff00, 0, &data, 4, HZ / 2); 2501 } 2502- 2503- 2504- 2505+ 2506+ 2507+ 2508 u8 read_nic_byte(struct net_device *dev, int indx) 2509 { 2510 u8 data; 2511- struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); 2512+ struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv_rtl7(dev); 2513 struct usb_device *udev = priv->udev; 2514- 2515+ 2516 usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), 2517 RTL8187_REQ_GET_REGS, RTL8187_REQT_READ, 2518 indx|0xff00, 0, &data, 1, HZ / 2); 2519@@ -223,22 +230,22 @@ 2520 u8 read_nic_byte_E(struct net_device *dev, int indx) 2521 { 2522 u8 data; 2523- struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); 2524+ struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv_rtl7(dev); 2525 struct usb_device *udev = priv->udev; 2526- 2527+ 2528 usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), 2529 RTL8187_REQ_GET_REGS, RTL8187_REQT_READ, 2530 indx|0xfe00, 0, &data, 1, HZ / 2); 2531 return data; 2532 } 2533 2534- 2535+ 2536 u16 read_nic_word(struct net_device *dev, int indx) 2537 { 2538 u16 data; 2539- struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); 2540+ struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv_rtl7(dev); 2541 struct usb_device *udev = priv->udev; 2542- 2543+ 2544 usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), 2545 RTL8187_REQ_GET_REGS, RTL8187_REQT_READ, 2546 indx|0xff00, 0, &data, 2, HZ / 2); 2547@@ -249,16 +256,16 @@ 2548 u32 read_nic_dword(struct net_device *dev, int indx) 2549 { 2550 u32 data; 2551- struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); 2552+ struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv_rtl7(dev); 2553 struct usb_device *udev = priv->udev; 2554- 2555+ 2556 usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), 2557 RTL8187_REQ_GET_REGS, RTL8187_REQT_READ, 2558 indx|0xff00, 0, &data, 4, HZ / 2); 2559 return data; 2560 } 2561 2562-/* this might still called in what was the PHY rtl8185/rtl8187 common code 2563+/* this might still called in what was the PHY rtl8185/rtl8187 common code 2564 * plans are to possibilty turn it again in one common code... 2565 */ 2566 inline void force_pci_posting(struct net_device *dev) 2567@@ -271,7 +278,12 @@ 2568 //void set_nic_txring(struct net_device *dev); 2569 static struct net_device_stats *rtl8180_stats(struct net_device *dev); 2570 void rtl8180_commit(struct net_device *dev); 2571+ 2572+# if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)) 2573+void rtl8180_restart(struct work_struct *work); 2574+#else 2575 void rtl8180_restart(struct net_device *dev); 2576+#endif 2577 2578 /**************************************************************************** 2579 -----------------------------PROCFS STUFF------------------------- 2580@@ -284,13 +296,13 @@ 2581 int *eof, void *data) 2582 { 2583 struct net_device *dev = data; 2584-// struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); 2585- 2586+// struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv_rtl7(dev); 2587+ 2588 int len = 0; 2589 int i,n; 2590- 2591+ 2592 int max=0xff; 2593- 2594+ 2595 /* This dump the current register page */ 2596 for(n=0;n<=max;) 2597 { 2598@@ -307,7 +319,7 @@ 2599 len += snprintf(page + len, count - len,"\n"); 2600 2601 2602- 2603+ 2604 *eof = 1; 2605 return len; 2606 2607@@ -319,16 +331,16 @@ 2608 int *eof, void *data) 2609 { 2610 struct net_device *dev = data; 2611- struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); 2612- 2613+ struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv_rtl7(dev); 2614+ 2615 int len = 0; 2616- 2617+ 2618 len += snprintf(page + len, count - len, 2619 "NIC int: %lu\n" 2620 "Total int: %lu\n", 2621 priv->stats.ints, 2622 priv->stats.shints); 2623- 2624+ 2625 *eof = 1; 2626 return len; 2627 } 2628@@ -339,10 +351,10 @@ 2629 int *eof, void *data) 2630 { 2631 struct net_device *dev = data; 2632- struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); 2633- 2634+ struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv_rtl7(dev); 2635+ 2636 int len = 0; 2637- 2638+ 2639 len += snprintf(page + len, count - len, 2640 "TX normal priority ok int: %lu\n" 2641 "TX normal priority error int: %lu\n" 2642@@ -359,7 +371,7 @@ 2643 "TX HW queue: %d\n" 2644 "TX lp dropped: %lu\n" 2645 "TX np dropped: %lu\n" 2646- "TX total data packets %lu\n", 2647+ "TX total data packets %lu\n", 2648 // "TX beacon aborted: %lu\n", 2649 priv->stats.txnpokint, 2650 priv->stats.txnperr, 2651@@ -379,10 +391,10 @@ 2652 priv->stats.txdatapkt 2653 // priv->stats.txbeaconerr 2654 ); 2655- 2656+ 2657 *eof = 1; 2658 return len; 2659-} 2660+} 2661 2662 2663 2664@@ -391,10 +403,10 @@ 2665 int *eof, void *data) 2666 { 2667 struct net_device *dev = data; 2668- struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); 2669- 2670+ struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv_rtl7(dev); 2671+ 2672 int len = 0; 2673- 2674+ 2675 len += snprintf(page + len, count - len, 2676 "RX packets: %lu\n" 2677 "RX urb status error: %lu\n" 2678@@ -402,21 +414,22 @@ 2679 priv->stats.rxok, 2680 priv->stats.rxstaterr, 2681 priv->stats.rxurberr); 2682- 2683+ 2684 *eof = 1; 2685 return len; 2686-} 2687- 2688+} 2689 2690+#if WIRELESS_EXT < 17 2691 static struct iw_statistics *r8180_get_wireless_stats(struct net_device *dev) 2692 { 2693- struct r8180_priv *priv = ieee80211_priv(dev); 2694+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 2695 2696 return &priv->wstats; 2697 } 2698+#endif 2699 2700 void rtl8180_proc_module_init(void) 2701-{ 2702+{ 2703 DMESG("Initializing proc filesystem"); 2704 rtl8180_proc=create_proc_entry(RTL8187_MODULE_NAME, S_IFDIR, proc_net); 2705 } 2706@@ -430,7 +443,7 @@ 2707 2708 void rtl8180_proc_remove_one(struct net_device *dev) 2709 { 2710- struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); 2711+ struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv_rtl7(dev); 2712 if (priv->dir_dev) { 2713 // remove_proc_entry("stats-hw", priv->dir_dev); 2714 remove_proc_entry("stats-tx", priv->dir_dev); 2715@@ -447,9 +460,9 @@ 2716 void rtl8180_proc_init_one(struct net_device *dev) 2717 { 2718 struct proc_dir_entry *e; 2719- struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); 2720- priv->dir_dev = create_proc_entry(dev->name, 2721- S_IFDIR | S_IRUGO | S_IXUGO, 2722+ struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv_rtl7(dev); 2723+ priv->dir_dev = create_proc_entry(dev->name, 2724+ S_IFDIR | S_IRUGO | S_IXUGO, 2725 rtl8180_proc); 2726 if (!priv->dir_dev) { 2727 DMESGE("Unable to initialize /proc/net/rtl8187/%s\n", 2728@@ -459,7 +472,7 @@ 2729 #if 0 2730 e = create_proc_read_entry("stats-hw", S_IFREG | S_IRUGO, 2731 priv->dir_dev, proc_get_stats_hw, dev); 2732- 2733+ 2734 if (!e) { 2735 DMESGE("Unable to initialize " 2736 "/proc/net/rtl8187/%s/stats-hw\n", 2737@@ -468,17 +481,17 @@ 2738 #endif 2739 e = create_proc_read_entry("stats-rx", S_IFREG | S_IRUGO, 2740 priv->dir_dev, proc_get_stats_rx, dev); 2741- 2742+ 2743 if (!e) { 2744 DMESGE("Unable to initialize " 2745 "/proc/net/rtl8187/%s/stats-rx\n", 2746 dev->name); 2747 } 2748- 2749- 2750+ 2751+ 2752 e = create_proc_read_entry("stats-tx", S_IFREG | S_IRUGO, 2753 priv->dir_dev, proc_get_stats_tx, dev); 2754- 2755+ 2756 if (!e) { 2757 DMESGE("Unable to initialize " 2758 "/proc/net/rtl8187/%s/stats-tx\n", 2759@@ -487,27 +500,27 @@ 2760 #if 0 2761 e = create_proc_read_entry("stats-ieee", S_IFREG | S_IRUGO, 2762 priv->dir_dev, proc_get_stats_ieee, dev); 2763- 2764+ 2765 if (!e) { 2766 DMESGE("Unable to initialize " 2767 "/proc/net/rtl8187/%s/stats-ieee\n", 2768 dev->name); 2769 } 2770- 2771- 2772+ 2773+ 2774 e = create_proc_read_entry("stats-ap", S_IFREG | S_IRUGO, 2775 priv->dir_dev, proc_get_stats_ap, dev); 2776- 2777+ 2778 if (!e) { 2779 DMESGE("Unable to initialize " 2780 "/proc/net/rtl8187/%s/stats-ap\n", 2781 dev->name); 2782 } 2783 #endif 2784- 2785+ 2786 e = create_proc_read_entry("registers", S_IFREG | S_IRUGO, 2787 priv->dir_dev, proc_get_registers, dev); 2788- 2789+ 2790 if (!e) { 2791 DMESGE("Unable to initialize " 2792 "/proc/net/rtl8187/%s/registers\n", 2793@@ -523,14 +536,14 @@ 2794 { 2795 int i; 2796 u8 *buf =(u8*)buffer; 2797- 2798+ 2799 printk("ASCII BUFFER DUMP (len: %x):\n",len); 2800- 2801+ 2802 for(i=0;i<len;i++) 2803 printk("%c",buf[i]); 2804- 2805+ 2806 printk("\nBINARY BUFFER DUMP (len: %x):\n",len); 2807- 2808+ 2809 for(i=0;i<len;i++) 2810 printk("%x",buf[i]); 2811 2812@@ -539,17 +552,17 @@ 2813 2814 short check_nic_enought_desc(struct net_device *dev, priority_t priority) 2815 { 2816- struct r8180_priv *priv = ieee80211_priv(dev); 2817- 2818- int used = atomic_read((priority == NORM_PRIORITY) ? 2819+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 2820+ 2821+ int used = atomic_read((priority == NORM_PRIORITY) ? 2822 &priv->tx_np_pending : &priv->tx_lp_pending); 2823- 2824+ 2825 return (used < MAX_TX_URB); 2826 } 2827 2828 void tx_timeout(struct net_device *dev) 2829 { 2830- struct r8180_priv *priv = ieee80211_priv(dev); 2831+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 2832 //rtl8180_commit(dev); 2833 schedule_work(&priv->reset_wq); 2834 //DMESG("TXTIMEOUT"); 2835@@ -561,7 +574,20 @@ 2836 { 2837 int i; 2838 for(i=0; i<63; i++) 2839- DMESG("EEPROM addr %x : %x", i, eprom_read(dev,i)); 2840+ DMESG("EEPROM addr %02X : %04X", i, eprom_read(dev,i)); 2841+} 2842+ 2843+/* this is only for debug */ 2844+void dump_tx_power(struct net_device *dev) 2845+{ 2846+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 2847+ int i; 2848+ DMESG("CCK TX-Power (b-mode):"); 2849+ for(i=1; i<=14; i++) 2850+ DMESG("Channel %d: %d", i, priv->chtxpwr[i]); 2851+ DMESG("OFDM TX-Power (g-mode):"); 2852+ for(i=1; i<=14; i++) 2853+ DMESG("Channel %d: %d", i, priv->chtxpwr_ofdm[i]); 2854 } 2855 2856 /* this is only for debug */ 2857@@ -570,14 +596,14 @@ 2858 int i; 2859 int n; 2860 int max=0xff; 2861- 2862- DMESG("Dumping NIC register map"); 2863- 2864+ 2865+ DMESG("Dumping NIC register map"); 2866+ 2867 for(n=0;n<=max;) 2868 { 2869- printk( "\nD: %2x> ", n); 2870+ printk( "\nD: %02X> ", n); 2871 for(i=0;i<16 && n<=max;i++,n++) 2872- printk("%2x ",read_nic_byte(dev,n)); 2873+ printk("%02X ",read_nic_byte(dev,n)); 2874 } 2875 printk("\n"); 2876 } 2877@@ -589,11 +615,11 @@ 2878 2879 void rtl8180_irq_enable(struct net_device *dev) 2880 { 2881- struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); 2882+ struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv_rtl7(dev); 2883 //priv->irq_enabled = 1; 2884 /* 2885- write_nic_word(dev,INTA_MASK,INTA_RXOK | INTA_RXDESCERR | INTA_RXOVERFLOW |\ 2886- INTA_TXOVERFLOW | INTA_HIPRIORITYDESCERR | INTA_HIPRIORITYDESCOK |\ 2887+ write_nic_word(dev,INTA_MASK,INTA_RXOK | INTA_RXDESCERR | INTA_RXOVERFLOW |\ 2888+ INTA_TXOVERFLOW | INTA_HIPRIORITYDESCERR | INTA_HIPRIORITYDESCOK |\ 2889 INTA_NORMPRIORITYDESCERR | INTA_NORMPRIORITYDESCOK |\ 2890 INTA_LOWPRIORITYDESCERR | INTA_LOWPRIORITYDESCOK | INTA_TIMEOUT); 2891 */ 2892@@ -603,7 +629,7 @@ 2893 2894 void rtl8180_irq_disable(struct net_device *dev) 2895 { 2896-// struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); 2897+// struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv_rtl7(dev); 2898 2899 write_nic_word(dev,INTA_MASK,0); 2900 force_pci_posting(dev); 2901@@ -625,115 +651,119 @@ 2902 2903 void rtl8180_update_msr(struct net_device *dev) 2904 { 2905- struct r8180_priv *priv = ieee80211_priv(dev); 2906+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 2907 u8 msr; 2908- 2909+ 2910 msr = read_nic_byte(dev, MSR); 2911 msr &= ~ MSR_LINK_MASK; 2912- 2913+ 2914 /* do not change in link_state != WLAN_LINK_ASSOCIATED. 2915- * msr must be updated if the state is ASSOCIATING. 2916+ * msr must be updated if the state is ASSOCIATING. 2917 * this is intentional and make sense for ad-hoc and 2918 * master (see the create BSS/IBSS func) 2919 */ 2920- if (priv->ieee80211->state == IEEE80211_LINKED){ 2921- 2922+ if (priv->ieee80211->state == IEEE80211_LINKED){ 2923+ 2924 if (priv->ieee80211->iw_mode == IW_MODE_INFRA) 2925 msr |= (MSR_LINK_MANAGED<<MSR_LINK_SHIFT); 2926 else if (priv->ieee80211->iw_mode == IW_MODE_ADHOC) 2927 msr |= (MSR_LINK_ADHOC<<MSR_LINK_SHIFT); 2928 else if (priv->ieee80211->iw_mode == IW_MODE_MASTER) 2929 msr |= (MSR_LINK_MASTER<<MSR_LINK_SHIFT); 2930- 2931+ 2932 }else 2933 msr |= (MSR_LINK_NONE<<MSR_LINK_SHIFT); 2934- 2935+ 2936 write_nic_byte(dev, MSR, msr); 2937 } 2938 2939 void rtl8180_set_chan(struct net_device *dev,short ch) 2940 { 2941- struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); 2942+ struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv_rtl7(dev); 2943 u32 tx; 2944 priv->chan=ch; 2945 #if 0 2946- if(priv->ieee80211->iw_mode == IW_MODE_ADHOC || 2947+ if(priv->ieee80211->iw_mode == IW_MODE_ADHOC || 2948 priv->ieee80211->iw_mode == IW_MODE_MASTER){ 2949- 2950- priv->ieee80211->link_state = WLAN_LINK_ASSOCIATED; 2951+ 2952+ priv->ieee80211->link_state = WLAN_LINK_ASSOCIATED; 2953 priv->ieee80211->master_chan = ch; 2954- rtl8180_update_beacon_ch(dev); 2955+ rtl8180_update_beacon_ch(dev); 2956 } 2957 #endif 2958- 2959+ 2960 /* this hack should avoid frame TX during channel setting*/ 2961 tx = read_nic_dword(dev,TX_CONF); 2962 tx &= ~TX_LOOPBACK_MASK; 2963 2964-#ifndef LOOP_TEST 2965+#ifndef LOOP_TEST 2966 write_nic_dword(dev,TX_CONF, tx |( TX_LOOPBACK_MAC<<TX_LOOPBACK_SHIFT)); 2967- 2968 priv->rf_set_chan(dev,priv->chan); 2969 mdelay(10); 2970- write_nic_dword(dev,TX_CONF,tx | (TX_LOOPBACK_NONE<<TX_LOOPBACK_SHIFT)); 2971+ write_nic_dword(dev,TX_CONF,tx | (TX_LOOPBACK_NONE<<TX_LOOPBACK_SHIFT)); 2972 #endif 2973 } 2974+ 2975+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) 2976 void rtl8187_rx_isr(struct urb *rx_urb, struct pt_regs *regs); 2977+#else 2978+void rtl8187_rx_isr(struct urb *rx_urb); 2979+#endif 2980 2981 2982 void rtl8187_rx_urbsubmit(struct net_device *dev, struct urb* rx_urb) 2983 { 2984- struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); 2985+ struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv_rtl7(dev); 2986 int err; 2987- 2988+ 2989 // u8 *rx; 2990- 2991+ 2992 //DMESG("starting RX"); 2993 /*rx = kmalloc(RX_URB_SIZE*sizeof(u8),GFP_ATOMIC); 2994- if(!rx){ 2995+ if(!rx){ 2996 DMESGE("unable to allocate RX buffer"); 2997 return; 2998 }*/ 2999- 3000+ 3001 usb_fill_bulk_urb(rx_urb,priv->udev, 3002 usb_rcvbulkpipe(priv->udev,0x81), rx_urb->transfer_buffer, 3003 RX_URB_SIZE,rtl8187_rx_isr,dev); 3004- err = usb_submit_urb(rx_urb, GFP_ATOMIC); 3005+ err = usb_submit_urb(rx_urb, GFP_ATOMIC); 3006 if(err && err != -EPERM){ 3007 DMESGE("cannot submit RX command. URB_STATUS %x",rx_urb->status); 3008- 3009+ 3010 } 3011- 3012+ 3013 } 3014 3015 3016 void rtl8187_rx_initiate(struct net_device *dev) 3017 { 3018 int i; 3019- struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); 3020- 3021+ struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv_rtl7(dev); 3022+ 3023 if(!priv->rx_urb) 3024 DMESGE("Cannot intiate RX urb mechanism"); 3025- for(i=0;i<MAX_RX_URB;i++) // RX_MAX_URB is 1 3026+ for(i=0;i<MAX_RX_URB;i++) // RX_MAX_URB is 1 3027 rtl8187_rx_urbsubmit(dev,priv->rx_urb[i]); 3028- 3029+ 3030 } 3031 3032 void rtl8187_set_rxconf(struct net_device *dev) 3033 { 3034- struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); 3035+ struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv_rtl7(dev); 3036 u32 rxconf; 3037- 3038+ 3039 rxconf=read_nic_dword(dev,RX_CONF); 3040 rxconf = rxconf &~ MAC_FILTER_MASK; 3041 rxconf = rxconf | (1<<ACCEPT_MNG_FRAME_SHIFT); 3042 rxconf = rxconf | (1<<ACCEPT_DATA_FRAME_SHIFT); 3043 rxconf = rxconf | (1<<ACCEPT_BCAST_FRAME_SHIFT); 3044 rxconf = rxconf | (1<<ACCEPT_MCAST_FRAME_SHIFT); 3045- rxconf = rxconf | (1<<ACCEPT_CTL_FRAME_SHIFT); 3046+ rxconf = rxconf | (1<<ACCEPT_CTL_FRAME_SHIFT); 3047 3048 if (dev->flags & IFF_PROMISC) DMESG ("NIC in promisc mode"); 3049- 3050+ 3051 if(priv->ieee80211->iw_mode == IW_MODE_MONITOR || \ 3052 dev->flags & IFF_PROMISC){ 3053 rxconf = rxconf | (1<<ACCEPT_ALLMAC_FRAME_SHIFT); 3054@@ -741,40 +771,40 @@ 3055 rxconf = rxconf | (1<<ACCEPT_NICMAC_FRAME_SHIFT); 3056 rxconf = rxconf | (1<<RX_CHECK_BSSID_SHIFT); 3057 } 3058- 3059+ 3060 /*if(priv->ieee80211->iw_mode == IW_MODE_MASTER){ 3061 rxconf = rxconf | (1<<ACCEPT_ALLMAC_FRAME_SHIFT); 3062 rxconf = rxconf | (1<<RX_CHECK_BSSID_SHIFT); 3063 }*/ 3064- 3065+ 3066 if(priv->ieee80211->iw_mode == IW_MODE_MONITOR){ 3067 rxconf = rxconf | (1<<ACCEPT_ICVERR_FRAME_SHIFT); 3068 rxconf = rxconf | (1<<ACCEPT_PWR_FRAME_SHIFT); 3069 } 3070- 3071+ 3072 if( priv->crcmon == 1 && priv->ieee80211->iw_mode == IW_MODE_MONITOR) 3073 rxconf = rxconf | (1<<ACCEPT_CRCERR_FRAME_SHIFT); 3074- 3075- 3076+ 3077+ 3078 rxconf = rxconf &~ RX_FIFO_THRESHOLD_MASK; 3079 rxconf = rxconf | (RX_FIFO_THRESHOLD_NONE<<RX_FIFO_THRESHOLD_SHIFT); 3080- 3081- 3082+ 3083+ 3084 rxconf = rxconf | (1<<RX_AUTORESETPHY_SHIFT); 3085- 3086+ 3087 rxconf = rxconf &~ MAX_RX_DMA_MASK; 3088 rxconf = rxconf | (MAX_RX_DMA_2048<<MAX_RX_DMA_SHIFT); 3089- 3090+ 3091 rxconf = rxconf | RCR_ONLYERLPKT; 3092- 3093+ 3094 // rxconf = rxconf &~ RCR_CS_MASK; 3095 // rxconf = rxconf | (1<<RCR_CS_SHIFT); 3096 3097- write_nic_dword(dev, RX_CONF, rxconf); 3098- 3099+ write_nic_dword(dev, RX_CONF, rxconf); 3100+ 3101 // V rtl suggested V // 3102 // write_nic_dword(dev, RX_CONF, 0x901ce70e); 3103- 3104+ 3105 //fix_rx_fifo(dev); 3106 // //set_nic_rxring(dev); 3107 #ifdef DEBUG_RX 3108@@ -785,23 +815,23 @@ 3109 void rtl8180_rx_enable(struct net_device *dev) 3110 { 3111 u8 cmd; 3112- 3113- 3114+ 3115+ 3116 rtl8187_rx_initiate(dev); 3117 3118- rtl8187_set_rxconf(dev); 3119+ rtl8187_set_rxconf(dev); 3120 3121 cmd=read_nic_byte(dev,CMD); 3122 write_nic_byte(dev,CMD,cmd | (1<<CMD_RX_ENABLE_SHIFT)); 3123 #if 0 3124- /* In rtl8139 driver seems that DMA threshold has to be written 3125- * after enabling RX, so we rewrite RX_CONFIG register 3126+ /* In rtl8139 driver seems that DMA threshold has to be written 3127+ * after enabling RX, so we rewrite RX_CONFIG register 3128 */ 3129 //mdelay(100); 3130- write_nic_dword(dev, RX_CONF, rxconf); 3131- 3132+ write_nic_dword(dev, RX_CONF, rxconf); 3133+ 3134 #endif 3135- 3136+ 3137 } 3138 3139 3140@@ -810,37 +840,37 @@ 3141 u8 cmd; 3142 u8 byte; 3143 u32 txconf; 3144- struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); 3145- 3146+ struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv_rtl7(dev); 3147+ 3148 byte = read_nic_byte(dev,CW_CONF); 3149 byte &= ~(1<<CW_CONF_PERPACKET_CW_SHIFT); 3150 byte &= ~(1<<CW_CONF_PERPACKET_RETRY_SHIFT); 3151 write_nic_byte(dev, CW_CONF, byte); 3152- 3153+ 3154 byte = read_nic_byte(dev, TX_AGC_CTL); 3155 byte &= ~(1<<TX_AGC_CTL_PERPACKET_GAIN_SHIFT); 3156 byte &= ~(1<<TX_AGC_CTL_PERPACKET_ANTSEL_SHIFT); 3157 byte &= ~(1<<TX_AGC_CTL_FEEDBACK_ANT); 3158 write_nic_byte(dev, TX_AGC_CTL, byte); 3159- 3160+ 3161 txconf= read_nic_dword(dev,TX_CONF); 3162- 3163+ 3164 #if 0 3165 if(priv->card_8185){ 3166- 3167+ 3168 txconf = txconf &~ (1<<TCR_PROBE_NOTIMESTAMP_SHIFT); 3169- 3170+ 3171 }else{ 3172- 3173- if(priv->ieee80211->hw_seq) 3174+ 3175+ if(priv->ieee80211->hw_seq) 3176 txconf= txconf &~ (1<<TX_CONF_HEADER_AUTOICREMENT_SHIFT); 3177- else 3178+ else 3179 txconf= txconf | (1<<TX_CONF_HEADER_AUTOICREMENT_SHIFT); 3180 } 3181 #endif 3182 3183 txconf = txconf &~ TX_LOOPBACK_MASK; 3184- 3185+ 3186 #ifndef LOOP_TEST 3187 txconf = txconf | (TX_LOOPBACK_NONE<<TX_LOOPBACK_SHIFT); 3188 #else 3189@@ -848,23 +878,26 @@ 3190 #endif 3191 txconf = txconf &~ TCR_DPRETRY_MASK; 3192 txconf = txconf &~ TCR_RTSRETRY_MASK; 3193- 3194- txconf = txconf | (priv->retry_data<<TX_DPRETRY_SHIFT); // long 3195- txconf = txconf | (priv->retry_rts<<TX_RTSRETRY_SHIFT); // short 3196- 3197+ 3198+ if(priv->ieee80211->iw_mode != IW_MODE_MONITOR) 3199+ { 3200+ txconf = txconf | (priv->retry_data<<TX_DPRETRY_SHIFT); // long 3201+ txconf = txconf | (priv->retry_rts<<TX_RTSRETRY_SHIFT); // short 3202+ } 3203+ 3204 txconf = txconf &~ (1<<TX_NOCRC_SHIFT); 3205- 3206+ 3207 txconf = txconf &~ TCR_MXDMA_MASK; 3208 txconf = txconf | (TCR_MXDMA_2048<<TCR_MXDMA_SHIFT); 3209- 3210+ 3211 txconf = txconf | TCR_CWMIN; 3212 txconf = txconf | TCR_DISCW; 3213 txconf = txconf &~ TCR_SWPLCPLEN; 3214- 3215+ 3216 txconf=txconf | (1<<TX_NOICV_SHIFT); 3217- 3218+ 3219 write_nic_dword(dev,TX_CONF,txconf); 3220- 3221+ 3222 // V RTL suggested V // 3223 // write_nic_dword(dev,TX_CONF,0x00e00707); 3224 3225@@ -872,9 +905,9 @@ 3226 #ifdef DEBUG_TX 3227 DMESG("txconf: %x %x",txconf,read_nic_dword(dev,TX_CONF)); 3228 #endif 3229- 3230+ 3231 cmd=read_nic_byte(dev,CMD); 3232- write_nic_byte(dev,CMD,cmd | (1<<CMD_TX_ENABLE_SHIFT)); 3233+ write_nic_byte(dev,CMD,cmd | (1<<CMD_TX_ENABLE_SHIFT)); 3234 3235 // mdelay(100); 3236 //write_nic_dword(dev,TX_CONF,txconf); 3237@@ -889,18 +922,18 @@ 3238 #if 0 3239 void rtl8180_beacon_tx_enable(struct net_device *dev) 3240 { 3241- struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); 3242+ struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv_rtl7(dev); 3243 priv->dma_poll_mask &=~(1<<TX_DMA_STOP_BEACON_SHIFT); 3244 rtl8180_set_mode(dev,EPROM_CMD_CONFIG); 3245- write_nic_byte(dev,TX_DMA_POLLING,priv->dma_poll_mask); 3246+ write_nic_byte(dev,TX_DMA_POLLING,priv->dma_poll_mask); 3247 rtl8180_set_mode(dev,EPROM_CMD_NORMAL); 3248 } 3249 3250 3251 void rtl8180_ 3252-_disable(struct net_device *dev) 3253+_disable(struct net_device *dev) 3254 { 3255- struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); 3256+ struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv_rtl7(dev); 3257 priv->dma_poll_mask |= (1<<TX_DMA_STOP_BEACON_SHIFT); 3258 rtl8180_set_mode(dev,EPROM_CMD_CONFIG); 3259 write_nic_byte(dev,TX_DMA_POLLING,priv->dma_poll_mask); 3260@@ -914,8 +947,8 @@ 3261 { 3262 u8 cmd; 3263 int i; 3264- struct r8180_priv *priv = ieee80211_priv(dev); 3265- 3266+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 3267+ 3268 cmd=read_nic_byte(dev,CMD); 3269 write_nic_byte(dev, CMD, cmd &~ \ 3270 ((1<<CMD_RX_ENABLE_SHIFT)|(1<<CMD_TX_ENABLE_SHIFT))); 3271@@ -926,9 +959,9 @@ 3272 usb_kill_urb(priv->rx_urb[i]); 3273 } 3274 /*while (read_nic_byte(dev,CMD) & (1<<CMD_RX_ENABLE_SHIFT)) 3275- udelay(10); 3276+ udelay(10); 3277 */ 3278- 3279+ 3280 // if(!priv->rx_skb_complete) 3281 // dev_kfree_skb_any(priv->rx_skb); 3282 } 3283@@ -939,14 +972,14 @@ 3284 #if 0 3285 int i; 3286 u32 *tmp; 3287- struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); 3288- 3289+ struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv_rtl7(dev); 3290+ 3291 priv->txbeaconring = (u32*)pci_alloc_consistent(priv->pdev, 3292- sizeof(u32)*8*count, 3293+ sizeof(u32)*8*count, 3294 &priv->txbeaconringdma); 3295 if (!priv->txbeaconring) return -1; 3296 for (tmp=priv->txbeaconring,i=0;i<count;i++){ 3297- *tmp = *tmp &~ (1<<31); // descriptor empty, owned by the drv 3298+ *tmp = *tmp &~ (1<<31); // descriptor empty, owned by the drv 3299 /* 3300 *(tmp+2) = (u32)dma_tmp; 3301 *(tmp+3) = bufsize; 3302@@ -955,7 +988,7 @@ 3303 *(tmp+4) = (u32)priv->txbeaconringdma+((i+1)*8*4); 3304 else 3305 *(tmp+4) = (u32)priv->txbeaconringdma; 3306- 3307+ 3308 tmp=tmp+8; 3309 } 3310 #endif 3311@@ -965,15 +998,15 @@ 3312 3313 void rtl8180_reset(struct net_device *dev) 3314 { 3315- 3316+ 3317 u8 cr; 3318- 3319+ 3320 /* make sure the analog power is on before 3321 * reset, otherwise reset may fail 3322 */ 3323 rtl8180_set_anaparam(dev, RTL8225_ANAPARAM_ON); 3324 rtl8185_set_anaparam2(dev, RTL8225_ANAPARAM2_ON); 3325- 3326+ 3327 rtl8180_irq_disable(dev); 3328 3329 mdelay(200); 3330@@ -981,19 +1014,19 @@ 3331 write_nic_byte_E(dev,0x18,0x11); 3332 write_nic_byte_E(dev,0x18,0x00); 3333 mdelay(200); 3334- 3335+ 3336 cr=read_nic_byte(dev,CMD); 3337 cr = cr & 2; 3338 cr = cr | (1<<CMD_RST_SHIFT); 3339 write_nic_byte(dev,CMD,cr); 3340- 3341+ 3342 force_pci_posting(dev); 3343- 3344+ 3345 mdelay(200); 3346- 3347- if(read_nic_byte(dev,CMD) & (1<<CMD_RST_SHIFT)) 3348+ 3349+ if(read_nic_byte(dev,CMD) & (1<<CMD_RST_SHIFT)) 3350 DMESGW("Card reset timeout!"); 3351- else 3352+ else 3353 DMESG("Card successfully reset"); 3354 3355 rtl8180_set_mode(dev,EPROM_CMD_LOAD); 3356@@ -1005,13 +1038,13 @@ 3357 */ 3358 rtl8180_set_anaparam(dev, RTL8225_ANAPARAM_ON); 3359 rtl8185_set_anaparam2(dev, RTL8225_ANAPARAM2_ON); 3360- 3361+ 3362 } 3363 3364 inline u16 ieeerate2rtlrate(int rate) 3365 { 3366 switch(rate){ 3367- case 10: 3368+ case 10: 3369 return 0; 3370 case 20: 3371 return 1; 3372@@ -1037,32 +1070,42 @@ 3373 return 11; 3374 default: 3375 return 3; 3376- 3377+ 3378 } 3379 } 3380 static u16 rtl_rate[] = {10,20,55,110,60,90,120,180,240,360,480,540}; 3381 inline u16 rtl8180_rate2rate(short rate) 3382 { 3383 if (rate >11) return 0; 3384- return rtl_rate[rate]; 3385+ return rtl_rate[rate]; 3386+} 3387+ 3388+inline u8 rtl8180_IsWirelessBMode(u16 rate) 3389+{ 3390+ if( ((rate <= 110) && (rate != 60) && (rate != 90)) || (rate == 220) ) 3391+ return 1; 3392+ else return 0; 3393 } 3394- 3395 3396+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) 3397 void rtl8187_rx_isr(struct urb *rx_urb, struct pt_regs *regs) 3398+#else 3399+void rtl8187_rx_isr(struct urb *rx_urb) 3400+#endif 3401 { 3402 struct net_device *dev = (struct net_device*)rx_urb->context; 3403- struct r8180_priv *priv = ieee80211_priv(dev); 3404+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 3405 3406 priv->rxurb_task = rx_urb; 3407 // DMESGW("David: Rx tasklet start!"); 3408- tasklet_schedule(&priv->irq_rx_tasklet); 3409+ tasklet_schedule(&priv->irq_rx_tasklet); 3410 // DMESGW("=David: Rx tasklet finish!"); 3411 } 3412 3413 #if 0 3414 void rtl8180_tx_queues_stop(struct net_device *dev) 3415 { 3416- //struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); 3417+ //struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv_rtl7(dev); 3418 u8 dma_poll_mask = (1<<TX_DMA_STOP_LOWPRIORITY_SHIFT); 3419 dma_poll_mask |= (1<<TX_DMA_STOP_HIPRIORITY_SHIFT); 3420 dma_poll_mask |= (1<<TX_DMA_STOP_NORMPRIORITY_SHIFT); 3421@@ -1078,7 +1121,7 @@ 3422 { 3423 //FIXME !! 3424 #if 0 3425- struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); 3426+ struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv_rtl7(dev); 3427 priv->dma_poll_mask |= (1<<TX_DMA_STOP_LOWPRIORITY_SHIFT); 3428 rtl8180_set_mode(dev,EPROM_CMD_CONFIG); 3429 write_nic_byte(dev,TX_DMA_POLLING,priv->dma_poll_mask); 3430@@ -1091,7 +1134,7 @@ 3431 { 3432 // FIXME !! 3433 #if 0 3434- struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); 3435+ struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv_rtl7(dev); 3436 priv->dma_poll_mask &= ~(1<<TX_DMA_STOP_LOWPRIORITY_SHIFT); 3437 rtl8180_set_mode(dev,EPROM_CMD_CONFIG); 3438 write_nic_byte(dev,TX_DMA_POLLING,priv->dma_poll_mask); 3439@@ -1105,14 +1148,19 @@ 3440 */ 3441 void rtl8180_hard_data_xmit(struct sk_buff *skb, struct net_device *dev, int rate) 3442 { 3443- struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); 3444- 3445- short morefrag = 0; 3446+ struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv_rtl7(dev); 3447+ 3448+ short morefrag = 0; 3449 unsigned long flags; 3450 struct ieee80211_hdr *h = (struct ieee80211_hdr *) skb->data; 3451 3452- if (le16_to_cpu(h->frame_ctl) & IEEE80211_FCTL_MOREFRAGS) 3453- morefrag = 1; 3454+ if(priv->ieee80211->iw_mode != IW_MODE_MONITOR || priv->ieee80211->raw_tx != 1) 3455+ { 3456+ if (le16_to_cpu(h->frame_ctl) & IEEE80211_FCTL_MOREFRAGS) 3457+ { 3458+ morefrag = 1; 3459+ } 3460+ } 3461 // DMESG("%x %x", h->frame_ctl, h->seq_ctl); 3462 /* 3463 * This function doesn't require lock because we make 3464@@ -1121,24 +1169,30 @@ 3465 * the ieee stack, or from the try_wake_queue (again trought 3466 * the ieee stack. 3467 */ 3468- spin_lock_irqsave(&priv->tx_lock,flags); 3469- 3470- //DMESG("TX"); 3471- if (!check_nic_enought_desc(dev, LOW_PRIORITY)){ 3472- DMESG("Error: no TX slot "); 3473- ieee80211_stop_queue(priv->ieee80211); 3474+ spin_lock_irqsave(&priv->tx_lock,flags); 3475+ 3476+ if(priv->ieee80211->iw_mode != IW_MODE_MONITOR) 3477+ { 3478+ //DMESG("TX"); 3479+ if (!check_nic_enought_desc(dev, LOW_PRIORITY)){ 3480+ DMESG("Error: no TX slot "); 3481+ ieee80211_stop_queue_rtl7(priv->ieee80211); 3482+ } 3483 } 3484- 3485+ 3486 rtl8180_tx(dev, (u32*)skb->data, skb->len, LOW_PRIORITY, morefrag, 3487 ieeerate2rtlrate(rate)); 3488 3489- priv->stats.txdatapkt++; 3490- 3491- if (!check_nic_enought_desc(dev, LOW_PRIORITY)) 3492- ieee80211_stop_queue(priv->ieee80211); 3493- 3494- spin_unlock_irqrestore(&priv->tx_lock,flags); 3495- 3496+ if(priv->ieee80211->iw_mode != IW_MODE_MONITOR) 3497+ { 3498+ priv->stats.txdatapkt++; 3499+ 3500+ if (!check_nic_enought_desc(dev, LOW_PRIORITY)) 3501+ ieee80211_stop_queue_rtl7(priv->ieee80211); 3502+ } 3503+ 3504+ spin_unlock_irqrestore(&priv->tx_lock,flags); 3505+ 3506 } 3507 #if 0 3508 /* This is a rough attempt to TX a frame 3509@@ -1148,12 +1202,12 @@ 3510 */ 3511 int rtl8180_hard_start_xmit(struct sk_buff *skb,struct net_device *dev) 3512 { 3513- struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); 3514+ struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv_rtl7(dev); 3515 int ret; 3516 unsigned long flags; 3517- 3518+ 3519 spin_lock_irqsave(&priv->tx_lock,flags); 3520- 3521+ 3522 ret = rtl8180_tx(dev, (u32*)skb->data, skb->len, NORM_PRIORITY, 0,DEFAULT_BASICRATE); 3523 /* 3524 int i; 3525@@ -1163,9 +1217,9 @@ 3526 */ 3527 priv->ieee80211->stats.tx_bytes+=skb->len; 3528 priv->ieee80211->stats.tx_packets++; 3529- 3530- spin_unlock_irqrestore(&priv->tx_lock,flags); 3531- 3532+ 3533+ spin_unlock_irqrestore(&priv->tx_lock,flags); 3534+ 3535 dev_kfree_skb_any(skb); 3536 return ret; 3537 } 3538@@ -1178,7 +1232,7 @@ 3539 u16 duration; 3540 u16 drift; 3541 *ext=0; 3542- 3543+ 3544 switch(rate){ 3545 case 0://1mbps 3546 *ext=0; 3547@@ -1187,7 +1241,7 @@ 3548 if(drift ==0 ) break; 3549 duration++; 3550 break; 3551- 3552+ 3553 case 1://2mbps 3554 *ext=0; 3555 duration = ((len+4)<<4) /0x4; 3556@@ -1195,40 +1249,44 @@ 3557 if(drift ==0 ) break; 3558 duration++; 3559 break; 3560- 3561+ 3562 case 2: //5.5mbps 3563 *ext=0; 3564 duration = ((len+4)<<4) /0xb; 3565 drift = ((len+4)<<4) % 0xb; 3566- if(drift ==0 ) 3567+ if(drift ==0 ) 3568 break; 3569 duration++; 3570 break; 3571- 3572+ 3573 default: 3574- case 3://11mbps 3575+ case 3://11mbps 3576 *ext=0; 3577 duration = ((len+4)<<4) /0x16; 3578 drift = ((len+4)<<4) % 0x16; 3579- if(drift ==0 ) 3580+ if(drift ==0 ) 3581 break; 3582 duration++; 3583- if(drift > 6) 3584+ if(drift > 6) 3585 break; 3586 *ext=1; 3587 break; 3588 } 3589- 3590+ 3591 return duration; 3592 } 3593 #endif 3594 3595 void rtl8180_try_wake_queue(struct net_device *dev, int pri); 3596 3597+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) 3598 void rtl8187_lptx_isr(struct urb *tx_urb, struct pt_regs *regs) 3599+#else 3600+void rtl8187_lptx_isr(struct urb *tx_urb) 3601+#endif 3602 { 3603 struct net_device *dev = (struct net_device*)tx_urb->context; 3604- struct r8180_priv *priv = ieee80211_priv(dev); 3605+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 3606 if(tx_urb->status == 0) 3607 priv->stats.txlpokint++; 3608 else 3609@@ -1249,55 +1307,55 @@ 3610 if ((msrm == (MSR_LINK_ADHOC<<MSR_LINK_SHIFT) || 3611 (msrm == (MSR_LINK_MASTER<<MSR_LINK_SHIFT)))){ 3612 write_nic_byte(dev, MSR, msr2 | MSR_LINK_NONE); 3613- write_nic_byte(dev, MSR, msr); 3614+ write_nic_byte(dev, MSR, msr); 3615 } 3616- 3617- 3618+ 3619+ 3620 } 3621 3622 3623 void rtl8187_net_update(struct net_device *dev) 3624 { 3625 3626- struct r8180_priv *priv = ieee80211_priv(dev); 3627+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 3628 struct ieee80211_network *net; 3629 net = & priv->ieee80211->current_network; 3630- 3631- 3632+ 3633+ 3634 write_nic_dword(dev,BSSID,((u32*)net->bssid)[0]); 3635 write_nic_word(dev,BSSID+4,((u16*)net->bssid)[2]); 3636 //for(i=0;i<ETH_ALEN;i++) 3637 // write_nic_byte(dev,BSSID+i,net->bssid[i]); 3638 3639 rtl8180_update_msr(dev); 3640- 3641+ 3642 // rtl8180_set_mode(dev,EPROM_CMD_CONFIG); 3643 write_nic_word(dev, AtimWnd, 2); 3644- write_nic_word(dev, AtimtrItv, 100); 3645+ write_nic_word(dev, AtimtrItv, 100); 3646 write_nic_word(dev, BEACON_INTERVAL, net->beacon_interval); 3647 write_nic_word(dev, BcnIntTime, 100); 3648- 3649+ 3650 3651 } 3652 3653 void rtl8187_beacon_tx(struct net_device *dev) 3654 { 3655 3656- struct r8180_priv *priv = ieee80211_priv(dev); 3657+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 3658 struct sk_buff *skb; 3659 int i = 0; 3660- 3661+ 3662 rtl8187_net_update(dev); 3663- 3664- skb = ieee80211_get_beacon(priv->ieee80211); 3665- 3666- 3667- if(!skb){ 3668+ 3669+ skb = ieee80211_get_beacon_rtl7(priv->ieee80211); 3670+ 3671+ 3672+ if(!skb){ 3673 DMESG("not enought memory for allocating beacon"); 3674 return; 3675 } 3676- 3677-#if 0 3678+ 3679+#if 0 3680 while(MAX_TX_URB!=atomic_read(&priv->tx_np_pending)){ 3681 msleep_interruptible_rtl(HZ/2); 3682 if(i++ > 20){ 3683@@ -1307,7 +1365,7 @@ 3684 } 3685 #endif 3686 write_nic_byte(dev, BQREQ, read_nic_byte(dev, BQREQ) | (1<<7)); 3687- 3688+ 3689 i=0; 3690 //while(!read_nic_byte(dev,BQREQ & (1<<7))) 3691 while( (read_nic_byte(dev, BQREQ) & (1<<7)) == 0 ) 3692@@ -1318,31 +1376,38 @@ 3693 return ; 3694 } 3695 } 3696- 3697+ 3698 rtl8180_tx(dev, (u32*)skb->data, skb->len, NORM_PRIORITY, 3699 0, priv->ieee80211->basic_rate); 3700- 3701+ 3702 } 3703 3704+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) 3705 void rtl8187_nptx_isr(struct urb *tx_urb, struct pt_regs *regs) 3706+#else 3707+void rtl8187_nptx_isr(struct urb *tx_urb) 3708+#endif 3709 { 3710 struct net_device *dev = (struct net_device*)tx_urb->context; 3711- struct r8180_priv *priv = ieee80211_priv(dev); 3712+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 3713 if(tx_urb->status == 0) 3714 priv->stats.txnpokint++; 3715 else 3716 priv->stats.txnperr++; 3717 kfree(tx_urb->transfer_buffer); 3718 usb_free_urb(tx_urb); 3719- atomic_dec(&priv->tx_np_pending); 3720+ if(priv->ieee80211->iw_mode != IW_MODE_MONITOR) 3721+ { 3722+ atomic_dec(&priv->tx_np_pending); 3723+ } 3724 //rtl8180_try_wake_queue(dev,NORM_PRIORITY); 3725 } 3726 3727 3728-/* This function do the real dirty work: it sends a TX command 3729- * descriptor plus data URB 3730+/* This function do the real dirty work: it sends a TX command 3731+ * descriptor plus data URB 3732 */ 3733- 3734+ 3735 short rtl8180_tx(struct net_device *dev, u32* txbuf, int len, priority_t priority, 3736 short morefrag, short rate) 3737 { 3738@@ -1352,45 +1417,47 @@ 3739 int pend ; 3740 int status; 3741 struct urb *tx_urb; 3742- int urb_len; 3743- struct r8180_priv *priv = ieee80211_priv(dev); 3744+ int urb_len; 3745+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 3746 // int rate = ieeerate2rtlrate(priv->ieee80211->rate); 3747 3748- pend = atomic_read((priority == NORM_PRIORITY)? &priv->tx_np_pending : &priv->tx_lp_pending); 3749- /* we are locked here so the two atomic_read and inc are executed without interleaves */ 3750- if( pend > MAX_TX_URB){ 3751- if(priority == NORM_PRIORITY) 3752- priv->stats.txnpdrop++; 3753- else 3754- priv->stats.txlpdrop++; 3755- return -1; 3756+ if(priv->ieee80211->iw_mode != IW_MODE_MONITOR) 3757+ { 3758+ pend = atomic_read((priority == NORM_PRIORITY)? &priv->tx_np_pending : &priv->tx_lp_pending); 3759+ /* we are locked here so the two atomic_read and inc are executed without interleaves */ 3760+ if( pend > MAX_TX_URB){ 3761+ if(priority == NORM_PRIORITY) 3762+ priv->stats.txnpdrop++; 3763+ else 3764+ priv->stats.txlpdrop++; 3765+ return -1; 3766+ } 3767 } 3768- 3769- 3770+ 3771 //tx = kmalloc((len + 4*3), GFP_ATOMIC); 3772 urb_len = len + 4*3; 3773 if((0 == urb_len%64)||(0 == urb_len%512)) { 3774- urb_len += 1; 3775+ urb_len += 1; 3776 } 3777 tx = kmalloc(urb_len, GFP_ATOMIC); 3778 if(!tx) return -ENOMEM; 3779- //printk(KERN_WARNING "urb_len = %d\n", urb_len); 3780+ //printk(KERN_WARNING "urb_len = %d\n", urb_len); 3781 tx_urb = usb_alloc_urb(0,GFP_ATOMIC); 3782- 3783+ 3784 if(!tx_urb){ 3785- 3786+ 3787 kfree(tx); 3788 return -ENOMEM; 3789 } 3790- 3791+ 3792 memcpy(tx+3,txbuf,len); 3793 tx[0] = 0; 3794 tx[0] |= len & 0xfff; 3795 tx[0] |= (1<<15); 3796- 3797+ 3798 // if(priv->shortpre) 3799 // tx[0] |= (1<<16); 3800- 3801+ 3802 //if(len > priv->rts_threshold){ 3803 // tx[0] |= (1<<23); //ENABLE RTS 3804 // tx[0] |= (1<<18); //ENABLE CTS 3805@@ -1399,18 +1466,18 @@ 3806 tx[0] |= (ieeerate2rtlrate(priv->ieee80211->basic_rate) << 19); /* RTS RATE - should be basic rate */ 3807 tx[0] |= (rate << 24); 3808 tx[1] = 0; 3809- 3810+ 3811 // duration = rtl8180_len2duration(len, 3812-// rate,&ext); 3813+// rate,&ext); 3814 // tx[1] |= (duration & 0x7fff) <<16; 3815 // if(ext) tx[1] |= (1<<31); 3816 3817- 3818+ 3819 // tx[2] = 0x303020; 3820 tx[2] = 3; // CW min 3821 tx[2] |= (7<<4); //CW max 3822 tx[2] |= (11<<8);//(priv->retry_data<<8); //retry lim 3823- 3824+ 3825 // printk("%x\n%x\n",tx[0],tx[1]); 3826 3827 #ifdef DUMP_TX 3828@@ -1421,71 +1488,77 @@ 3829 printk("---------------\n"); 3830 #endif 3831 3832- 3833+ 3834 /* FIXME check what EP is for low/norm PRI */ 3835 usb_fill_bulk_urb(tx_urb,priv->udev, 3836 usb_sndbulkpipe(priv->udev,(priority == LOW_PRIORITY) ? 2:3), tx, 3837 urb_len, (priority == LOW_PRIORITY)?rtl8187_lptx_isr:rtl8187_nptx_isr, dev); 3838 status = usb_submit_urb(tx_urb, GFP_ATOMIC); 3839 if (!status){ 3840- atomic_inc((priority == NORM_PRIORITY)? &priv->tx_np_pending : &priv->tx_lp_pending); 3841+ if(priv->ieee80211->iw_mode != IW_MODE_MONITOR) 3842+ { 3843+ atomic_inc((priority == NORM_PRIORITY)? &priv->tx_np_pending : &priv->tx_lp_pending); 3844+ } 3845 return 0; 3846 }else{ 3847- DMESGE("Error TX URB %d, error %d", 3848- atomic_read((priority == NORM_PRIORITY)? &priv->tx_np_pending : &priv->tx_lp_pending), 3849- status); 3850+ if(priv->ieee80211->iw_mode != IW_MODE_MONITOR) 3851+ { 3852+ DMESGE("Error TX URB %d, error %d", 3853+ atomic_read((priority == NORM_PRIORITY)? &priv->tx_np_pending : &priv->tx_lp_pending), 3854+ status); 3855+ } 3856 return -1; 3857 } 3858 } 3859 3860- 3861+ 3862 3863 void rtl8180_irq_rx_tasklet(struct r8180_priv * priv); 3864 3865 3866 short rtl8187_usb_initendpoints(struct net_device *dev) 3867 { 3868- struct r8180_priv *priv = ieee80211_priv(dev); 3869+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 3870 int i; 3871- 3872+ 3873 priv->rx_urb = (struct urb**) kmalloc (sizeof(struct urb*) * MAX_RX_URB, GFP_KERNEL); 3874- 3875+ 3876 for(i=0;i<MAX_RX_URB;i++){ 3877 priv->rx_urb[i] = usb_alloc_urb(0,GFP_KERNEL); 3878- if(!priv->rx_urb[i]) 3879+ if(!priv->rx_urb[i]) 3880 goto destroy; 3881- 3882+ 3883 priv->rx_urb[i]->transfer_buffer = kmalloc(RX_URB_SIZE, GFP_KERNEL); 3884- if(!priv->rx_urb[i]->transfer_buffer) 3885+ if(!priv->rx_urb[i]->transfer_buffer) 3886 goto destroy1; 3887- 3888+ 3889 priv->rx_urb[i]->transfer_buffer_length = RX_URB_SIZE; 3890 } 3891- 3892+ 3893 return 0; 3894- 3895+ 3896 destroy1: 3897 usb_free_urb(priv->rx_urb[i]); 3898- 3899+ 3900 destroy: 3901 while (--i >= 0){ 3902 kfree(priv->rx_urb[i]->transfer_buffer); 3903 usb_free_urb(priv->rx_urb[i]); 3904 } 3905- 3906+ 3907 kfree(priv->rx_urb); 3908- 3909+ 3910 priv->rx_urb = NULL; 3911 DMESGE("Endpoint Alloc Failure"); 3912 return -ENOMEM; 3913- 3914+ 3915 } 3916 3917 void rtl8187_usb_deleteendpoints(struct net_device *dev) 3918 { 3919- struct r8180_priv *priv = ieee80211_priv(dev); 3920+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 3921 int i; 3922- 3923+ 3924 if(priv->rx_urb){ 3925 for(i=0;i<MAX_RX_URB;i++){ 3926 usb_kill_urb(priv->rx_urb[i]); 3927@@ -1494,9 +1567,9 @@ 3928 } 3929 kfree(priv->rx_urb); 3930 priv->rx_urb = NULL; 3931- 3932+ 3933 } 3934- 3935+ 3936 } 3937 3938 3939@@ -1505,16 +1578,16 @@ 3940 int i; 3941 u16 word; 3942 int basic_rate,min_rr_rate,max_rr_rate; 3943- 3944-// struct r8180_priv *priv = ieee80211_priv(dev); 3945- 3946- //if (ieee80211_is_54g(priv->ieee80211->current_network) && 3947+ 3948+// struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 3949+ 3950+ //if (ieee80211_is_54g_rtl7(priv->ieee80211->current_network) && 3951 // priv->ieee80211->state == IEEE80211_LINKED){ 3952 basic_rate = ieeerate2rtlrate(240); 3953 min_rr_rate = ieeerate2rtlrate(60); 3954 max_rr_rate = ieeerate2rtlrate(240); 3955- 3956-// 3957+ 3958+// 3959 // }else{ 3960 // basic_rate = ieeerate2rtlrate(20); 3961 // min_rr_rate = ieeerate2rtlrate(10); 3962@@ -1526,21 +1599,21 @@ 3963 3964 word = read_nic_word(dev, BRSR); 3965 word &= ~BRSR_MBR_8185; 3966- 3967+ 3968 3969 for(i=0;i<=basic_rate;i++) 3970 word |= (1<<i); 3971 3972 write_nic_word(dev, BRSR, word); 3973- //DMESG("RR:%x BRSR: %x", read_nic_byte(dev,RESP_RATE), read_nic_word(dev,BRSR)); 3974+ DMESG("RR:%x BRSR: %x", read_nic_byte(dev,RESP_RATE), read_nic_word(dev,BRSR)); 3975 } 3976 3977 3978 void rtl8187_link_change(struct net_device *dev) 3979 { 3980 // int i; 3981- 3982- struct r8180_priv *priv = ieee80211_priv(dev); 3983+ 3984+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 3985 //write_nic_word(dev, BintrItv, net->beacon_interval); 3986 rtl8187_net_update(dev); 3987 /*update timing params*/ 3988@@ -1553,24 +1626,24 @@ 3989 3990 short rtl8180_init(struct net_device *dev) 3991 { 3992- 3993- struct r8180_priv *priv = ieee80211_priv(dev); 3994+ 3995+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 3996 int i, j; 3997 u16 word; 3998- int ch; 3999+ int ch, chans; 4000 //u16 version; 4001- //u8 hw_version; 4002- //u8 config3; 4003- 4004+ u8 hw_version; 4005+ u8 config3; 4006+ 4007 //FIXME: these constants are placed in a bad pleace. 4008 4009 // priv->txbuffsize = 1024; 4010 // priv->txringcount = 32; 4011 // priv->rxbuffersize = 1024; 4012-// priv->rxringcount = 32; 4013+// priv->rxringcount = 32; 4014 // priv->txbeaconcount = 3; 4015 // priv->rx_skb_complete = 1; 4016- //priv->txnp_pending.ispending=0; 4017+ //priv->txnp_pending.ispending=0; 4018 /* ^^ the SKB does not containt a partial RXed 4019 * packet (is empty) 4020 */ 4021@@ -1580,15 +1653,24 @@ 4022 return -1; 4023 } 4024 ch=channels; 4025+ chans=0; 4026+ for (i=1; i<=14; i++) { 4027+ if( (u8)(ch & 0x01) ) chans++; 4028+ ch >>= 1; 4029+ } 4030+ DMESG("Enabling %d channels.", chans); 4031+ ch=channels; 4032 // set channels 1..14 allowed in given locale 4033 for (i=1; i<=14; i++) { 4034 (priv->ieee80211->channel_map)[i] = (u8)(ch & 0x01); 4035 ch >>= 1; 4036 } 4037 //memcpy(priv->stats,0,sizeof(struct Stats)); 4038- 4039+ 4040 //priv->irq_enabled=0; 4041- 4042+ 4043+ priv->dev = dev; 4044+ 4045 // priv->stats.rxdmafail=0; 4046 priv->stats.txrdu=0; 4047 // priv->stats.rxrdu=0; 4048@@ -1612,33 +1694,37 @@ 4049 // priv->stats.txbeaconerr=0; 4050 priv->stats.txlperr=0; 4051 priv->stats.txlpokint=0; 4052- 4053+ 4054 priv->ieee80211->iw_mode = IW_MODE_INFRA; 4055- 4056+ 4057 priv->retry_rts = DEFAULT_RETRY_RTS; 4058 priv->retry_data = DEFAULT_RETRY_DATA; 4059 priv->ieee80211->rate = 110; //11 mbps 4060 priv->ieee80211->short_slot = 1; 4061- priv->ieee80211->mode = IEEE_G; 4062+ priv->ieee80211->mode = IEEE_G|IEEE_B; 4063 priv->promisc = (dev->flags & IFF_PROMISC) ? 1:0; 4064 spin_lock_init(&priv->tx_lock); 4065+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20) 4066 INIT_WORK(&priv->reset_wq,(void(*)(void*)) rtl8180_restart,dev); 4067+#else 4068+ INIT_WORK(&priv->reset_wq, rtl8180_restart); 4069+#endif 4070 sema_init(&priv->wx_sem,1); 4071 tasklet_init(&priv->irq_rx_tasklet, 4072 (void(*)(unsigned long))rtl8180_irq_rx_tasklet, 4073 (unsigned long)priv); 4074 4075- //priv->ieee80211->func = 4076+ //priv->ieee80211->func = 4077 // kmalloc(sizeof(struct ieee80211_helper_functions),GFP_KERNEL); 4078 //memset(priv->ieee80211->func, 0, 4079 // sizeof(struct ieee80211_helper_functions)); 4080- priv->ieee80211->current_network.beacon_interval = DEFAULT_BEACONINTERVAL; 4081+ priv->ieee80211->current_network.beacon_interval = DEFAULT_BEACONINTERVAL; 4082 priv->ieee80211->iw_mode = IW_MODE_INFRA; 4083- priv->ieee80211->softmac_features = IEEE_SOFTMAC_SCAN | 4084- IEEE_SOFTMAC_ASSOCIATE | IEEE_SOFTMAC_PROBERQ | 4085+ priv->ieee80211->softmac_features = IEEE_SOFTMAC_SCAN | 4086+ IEEE_SOFTMAC_ASSOCIATE | IEEE_SOFTMAC_PROBERQ | 4087 IEEE_SOFTMAC_PROBERS | IEEE_SOFTMAC_TX_QUEUE | 4088 /*IEEE_SOFTMAC_BEACONS | */IEEE_SOFTMAC_SINGLE_QUEUE; 4089- 4090+ 4091 priv->ieee80211->active_scan = 1; 4092 priv->ieee80211->rate = 110; //11 mbps 4093 priv->ieee80211->modulation = IEEE80211_CCK_MODULATION | IEEE80211_OFDM_MODULATION; 4094@@ -1655,51 +1741,51 @@ 4095 priv->ieee80211->data_hard_resume = rtl8180_data_hard_resume; 4096 //priv->ieee80211->start_send_beacons = NULL; 4097 //priv->ieee80211->stop_send_beacons = NULL; 4098- 4099+ 4100 priv->ieee80211->fts = DEFAULT_FRAG_THRESHOLD; 4101- 4102+ 4103 priv->card_8185 = 2; 4104 priv->phy_ver = 2; 4105 priv->card_type = USB; 4106- 4107+ 4108 #if 0 4109 hw_version =( read_nic_dword(dev, TCR) & TCR_HWVERID_MASK)>>TCR_HWVERID_SHIFT; 4110- 4111+ 4112 switch (hw_version){ 4113 case HW_VERID_R8185_ABC: 4114- DMESG("MAC controller is a RTL8185 b/g"); 4115+ DMESG("MAC controller is a RTL8185 b/g"); 4116 priv->card_8185 = 1; 4117 /* you should not find a card with 8225 PHY ver < C*/ 4118 priv->phy_ver = 2; 4119 break; 4120- 4121+ 4122 case HW_VERID_R8185_D: 4123- DMESG("MAC controller is a RTL8185 b/g (V. D)"); 4124+ DMESG("MAC controller is a RTL8185 b/g (V. D)"); 4125 priv->card_8185 = 2; 4126 /* you should not find a card with 8225 PHY ver < C*/ 4127 priv->phy_ver = 2; 4128 break; 4129- 4130+ 4131 case HW_VERID_R8180_ABCD: 4132 DMESG("MAC controller is a RTL8180"); 4133 priv->card_8185 = 0; 4134 break; 4135- 4136+ 4137 case HW_VERID_R8180_F: 4138 DMESG("MAC controller is a RTL8180 (v. F)"); 4139 priv->card_8185 = 0; 4140 break; 4141- 4142+ 4143 default: 4144 DMESGW("MAC chip not recognized: version %x. Assuming RTL8180",hw_version); 4145 priv->card_8185 = 0; 4146 break; 4147 } 4148- 4149- 4150+ 4151+ 4152 /* you should not found any 8185 Ver B Card */ 4153 priv->card_8185_Bversion = 0; 4154- 4155+ 4156 config3 = read_nic_byte(dev, CONFIG3); 4157 if(config3 & 0x8){ 4158 priv->card_type = CARDBUS; 4159@@ -1715,13 +1801,19 @@ 4160 #endif 4161 priv->enable_gpio0 = 0; 4162 4163- 4164+ 4165+ hw_version =( read_nic_dword(dev, TCR) & TCR_HWVERID_MASK)>>TCR_HWVERID_SHIFT; 4166+ config3 = read_nic_byte(dev, CONFIG3); 4167+ 4168+ DMESG("MAC chip version: %02X", hw_version); 4169+ DMESG("Card type: %02X", config3); 4170+ 4171 /* commented out just because we already do 4172 this when resetting the card 4173 andrea 20050924 4174 */ 4175 #if 0 4176- 4177+ 4178 u8 txcr, txreg50; 4179 u32 txreg54, txreg60; 4180 4181@@ -1757,8 +1849,8 @@ 4182 // DMESG("<<txcr:%x>>", txcr); 4183 4184 #endif 4185- 4186- /*the eeprom type is stored in RCR register bit #6 */ 4187+ 4188+ /*the eeprom type is stored in RCR register bit #6 */ 4189 if (RCR_9356SEL & read_nic_dword(dev, RCR)){ 4190 priv->epromtype=EPROM_93c56; 4191 DMESG("Reported EEPROM chip is a 93c56 (2Kbit)"); 4192@@ -1766,58 +1858,73 @@ 4193 priv->epromtype=EPROM_93c46; 4194 DMESG("Reported EEPROM chip is a 93c46 (1Kbit)"); 4195 } 4196- 4197+ 4198 dev->get_stats = rtl8180_stats; 4199- 4200+ 4201 dev->dev_addr[0]=eprom_read(dev,MAC_ADR) & 0xff; 4202 dev->dev_addr[1]=(eprom_read(dev,MAC_ADR) & 0xff00)>>8; 4203 dev->dev_addr[2]=eprom_read(dev,MAC_ADR+1) & 0xff; 4204 dev->dev_addr[3]=(eprom_read(dev,MAC_ADR+1) & 0xff00)>>8; 4205 dev->dev_addr[4]=eprom_read(dev,MAC_ADR+2) & 0xff; 4206 dev->dev_addr[5]=(eprom_read(dev,MAC_ADR+2) & 0xff00)>>8; 4207- 4208+ 4209 DMESG("Card MAC address is "MAC_FMT, MAC_ARG(dev->dev_addr)); 4210- 4211+ 4212 for(i=1,j=0; i<6; i+=2,j++){ 4213- 4214+ 4215 word = eprom_read(dev,EPROM_TXPW0 + j); 4216 priv->chtxpwr[i]=word & 0xf; 4217 priv->chtxpwr_ofdm[i]=(word & 0xf0)>>4; 4218 priv->chtxpwr[i+1]=(word & 0xf00)>>8; 4219 priv->chtxpwr_ofdm[i+1]=(word & 0xf000)>>12; 4220 } 4221- 4222+ 4223 for(i=1,j=0; i<4; i+=2,j++){ 4224- 4225+ 4226 word = eprom_read(dev,EPROM_TXPW1 + j); 4227 priv->chtxpwr[i+6]=word & 0xf; 4228 priv->chtxpwr_ofdm[i+6]=(word & 0xf0)>>4; 4229 priv->chtxpwr[i+6+1]=(word & 0xf00)>>8; 4230 priv->chtxpwr_ofdm[i+6+1]=(word & 0xf000)>>12; 4231 } 4232- 4233+ 4234 for(i=1,j=0; i<4; i+=2,j++){ 4235- 4236+ 4237 word = eprom_read(dev,EPROM_TXPW2 + j); 4238 priv->chtxpwr[i+6+4]=word & 0xf; 4239 priv->chtxpwr_ofdm[i+6+4]=(word & 0xf0)>>4; 4240 priv->chtxpwr[i+6+4+1]=(word & 0xf00)>>8; 4241 priv->chtxpwr_ofdm[i+6+4+1]=(word & 0xf000)>>12; 4242 } 4243- 4244- 4245+ 4246+ 4247 priv->rf_chip = 0xff & eprom_read(dev,EPROM_RFCHIPID); 4248- 4249+ 4250+#ifdef DEBUG_TX_POWER 4251+ dump_tx_power(dev); 4252+#endif 4253+ 4254+ DMESG("RF Chip ID: %02X", priv->rf_chip); 4255+ 4256 word = eprom_read(dev,EPROM_TXPW_BASE); 4257 priv->cck_txpwr_base = word & 0xf; 4258 priv->ofdm_txpwr_base = (word>>4) & 0xf; 4259- 4260+ 4261+ priv->txpwr_max = 0; 4262+ for(i=1; i<15; i++) 4263+ { 4264+ if(priv->chtxpwr[i] > priv->txpwr_max) priv->txpwr_max = priv->chtxpwr[i]; 4265+ if(priv->chtxpwr_ofdm[i] > priv->txpwr_max) priv->txpwr_max = priv->chtxpwr_ofdm[i]; 4266+ priv->chtxpwr_orig[i] = priv->chtxpwr[i]; 4267+ priv->chtxpwr_ofdm_orig[i] = priv->chtxpwr_ofdm[i]; 4268+ } 4269+ 4270 /* check RF frontend chipset */ 4271- 4272+ 4273 switch (priv->rf_chip) { 4274- 4275+ 4276 case EPROM_RFCHIPID_RTL8225U: 4277- 4278+ 4279 DMESG("Card reports RF frontend Realtek 8225"); 4280 DMESGW("This driver has EXPERIMENTAL support for this chipset."); 4281 DMESGW("use it with care and at your own risk and"); 4282@@ -1834,28 +1941,28 @@ 4283 DMESG("This seems a legacy 1st version radio"); 4284 } 4285 priv->rf_close = rtl8225_rf_close; 4286- 4287+ 4288 priv->max_sens = RTL8225_RF_MAX_SENS; 4289 priv->sens = RTL8225_RF_DEF_SENS; 4290 break; 4291- 4292+ 4293 default: 4294 DMESGW("Unknown RF module %x",priv->rf_chip); 4295 DMESGW("Exiting..."); 4296 return -1; 4297- 4298+ 4299 } 4300- 4301+ 4302 // DMESG("Energy threshold: %x",priv->cs_treshold); 4303 DMESG("PAPE from CONFIG2: %x",read_nic_byte(dev,CONFIG2)&0x7); 4304 //DMESG("CONFIG2: %x ECONFIG2: %x",read_nic_byte(dev,CONFIG2),eprom_read(dev,EPROM_CONFIG2)); 4305- 4306- if(rtl8187_usb_initendpoints(dev)!=0){ 4307+ 4308+ if(rtl8187_usb_initendpoints(dev)!=0){ 4309 DMESG("Endopoints initialization failed"); 4310 return -ENOMEM; 4311 } 4312-#if 0 4313- if (0!=alloc_rx_desc_ring(dev, priv->rxbuffersize, priv->rxringcount)) 4314+#if 0 4315+ if (0!=alloc_rx_desc_ring(dev, priv->rxbuffersize, priv->rxringcount)) 4316 return -ENOMEM; 4317 4318 if (0!=alloc_tx_desc_ring(dev, priv->txbuffsize, priv->txringcount, 4319@@ -1869,16 +1976,16 @@ 4320 if (0!=alloc_tx_desc_ring(dev, priv->txbuffsize, priv->txringcount, 4321 TX_LOWPRIORITY_RING_ADDR)) 4322 return -ENOMEM; 4323- 4324- 4325+ 4326+ 4327 if (0!=alloc_tx_beacon_desc_ring(dev, priv->txbeaconcount)) 4328 return -ENOMEM; 4329 #endif 4330- 4331+ 4332 4333 #ifdef DEBUG_EPROM 4334 dump_eprom(dev); 4335-#endif 4336+#endif 4337 return 0; 4338 4339 } 4340@@ -1898,7 +2005,7 @@ 4341 rtl8180_set_mode(dev, EPROM_CMD_CONFIG); 4342 4343 conf3 = read_nic_byte(dev, CONFIG3); 4344- write_nic_byte(dev, CONFIG3, conf3 | (1<<CONFIG3_ANAPARAM_W_SHIFT)); 4345+ write_nic_byte(dev, CONFIG3, conf3 | (1<<CONFIG3_ANAPARAM_W_SHIFT)); 4346 4347 write_nic_dword(dev, ANAPARAM2, a); 4348 4349@@ -1918,23 +2025,23 @@ 4350 4351 conf3 = read_nic_byte(dev, CONFIG3); 4352 write_nic_byte(dev, CONFIG3, conf3 | (1<<CONFIG3_ANAPARAM_W_SHIFT)); 4353- 4354+ 4355 write_nic_dword(dev, ANAPARAM, a); 4356 4357 conf3 = read_nic_byte(dev, CONFIG3); 4358 write_nic_byte(dev, CONFIG3, conf3 &~(1<<CONFIG3_ANAPARAM_W_SHIFT)); 4359 4360 rtl8180_set_mode(dev, EPROM_CMD_NORMAL); 4361- 4362+ 4363 } 4364 4365 4366 void rtl8185_tx_antenna(struct net_device *dev, u8 ant) 4367 { 4368- write_nic_byte(dev, TX_ANTENNA, ant); 4369+ write_nic_byte(dev, TX_ANTENNA, ant); 4370 force_pci_posting(dev); 4371 mdelay(1); 4372-} 4373+} 4374 4375 4376 void rtl8187_write_phy(struct net_device *dev, u8 adr, u32 data) 4377@@ -1942,26 +2049,26 @@ 4378 //u8 phyr; 4379 u32 phyw; 4380 // int i; 4381- 4382+ 4383 adr |= 0x80; 4384- 4385+ 4386 phyw= ((data<<8) | adr); 4387- 4388- 4389- 4390- // Note that, we must write 0xff7c after 0x7d-0x7f to write BB register. 4391+ 4392+ 4393+ 4394+ // Note that, we must write 0xff7c after 0x7d-0x7f to write BB register. 4395 write_nic_byte(dev, 0x7f, ((phyw & 0xff000000) >> 24)); 4396 write_nic_byte(dev, 0x7e, ((phyw & 0x00ff0000) >> 16)); 4397 write_nic_byte(dev, 0x7d, ((phyw & 0x0000ff00) >> 8)); 4398 write_nic_byte(dev, 0x7c, ((phyw & 0x000000ff) )); 4399 4400 //read_nic_dword(dev, PHY_ADR); 4401-#if 0 4402+#if 0 4403 for(i=0;i<10;i++){ 4404 write_nic_dword(dev, PHY_ADR, 0xffffff7f & phyw); 4405 phyr = read_nic_byte(dev, PHY_READ); 4406 if(phyr == (data&0xff)) break; 4407- 4408+ 4409 } 4410 #endif 4411 /* this is ok to fail when we write AGC table. check for AGC table might be 4412@@ -1988,60 +2095,60 @@ 4413 4414 void rtl8180_adapter_start(struct net_device *dev) 4415 { 4416- struct r8180_priv *priv = ieee80211_priv(dev); 4417+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 4418 //u32 anaparam; 4419 //u8 config3; 4420- 4421+ 4422 //rtl8180_rtx_disable(dev); 4423 rtl8180_reset(dev); 4424 4425 write_nic_byte(dev,0x85,0); 4426 write_nic_byte(dev,0x91,0); 4427- 4428+ 4429 /* light blink! */ 4430 write_nic_byte(dev,0x85,4); 4431 write_nic_byte(dev,0x91,1); 4432 write_nic_byte(dev,0x90,0); 4433- 4434+ 4435 priv->irq_mask = 0xffff; 4436 /* 4437 priv->dma_poll_mask = 0; 4438 priv->dma_poll_mask|= (1<<TX_DMA_STOP_BEACON_SHIFT); 4439-*/ 4440+*/ 4441 // rtl8180_beacon_tx_disable(dev); 4442- 4443+ 4444 rtl8180_set_mode(dev, EPROM_CMD_CONFIG); 4445 write_nic_dword(dev, MAC0, ((u32*)dev->dev_addr)[0]); 4446 write_nic_word(dev, MAC4, ((u32*)dev->dev_addr)[1] & 0xffff ); 4447 4448 rtl8180_set_mode(dev, EPROM_CMD_NORMAL); 4449 rtl8180_update_msr(dev); 4450- 4451+ 4452 rtl8180_set_mode(dev, EPROM_CMD_CONFIG); 4453- 4454+ 4455 write_nic_word(dev,0xf4,0xffff); 4456 write_nic_byte(dev, 4457- CONFIG1, (read_nic_byte(dev,CONFIG1) & 0x3f) | 0x80); 4458+ CONFIG1, (read_nic_byte(dev,CONFIG1) & 0x3f) | 0x80); 4459 4460 rtl8180_set_mode(dev,EPROM_CMD_NORMAL); 4461- 4462- write_nic_dword(dev,INT_TIMEOUT,0); 4463+ 4464+ write_nic_dword(dev,INT_TIMEOUT,0); 4465 4466 #ifdef DEBUG_REGISTERS 4467- rtl8180_dump_reg(dev); 4468+ rtl8180_dump_reg(dev); 4469 #endif 4470- 4471- 4472- write_nic_byte(dev, WPA_CONFIG, 0); 4473+ 4474+ 4475+ write_nic_byte(dev, WPA_CONFIG, 0); 4476 4477 write_nic_byte(dev, RATE_FALLBACK, 0x81); 4478 rtl8187_set_rate(dev); 4479- 4480- priv->rf_init(dev); 4481+ 4482+ priv->rf_init(dev); 4483 4484 if(priv->rf_set_sens != NULL) 4485- priv->rf_set_sens(dev,priv->sens); 4486- 4487+ priv->rf_set_sens(dev,priv->sens); 4488+ 4489 write_nic_word(dev,0x5e,1); 4490 4491 #if 1 4492@@ -2054,13 +2161,13 @@ 4493 write_nic_byte(dev, 0xff, 0x60); 4494 4495 write_nic_word(dev,0x5e,0); 4496- 4497- 4498+ 4499+ 4500 rtl8180_irq_enable(dev); 4501 /*DMESG ("lfree %d",get_curr_tx_free_desc(dev,LOW_PRIORITY)); 4502- 4503+ 4504 DMESG ("nfree %d",get_curr_tx_free_desc(dev,NORM_PRIORITY)); 4505- 4506+ 4507 DMESG ("hfree %d",get_curr_tx_free_desc(dev,HI_PRIORITY)); 4508 if(check_nic_enought_desc(dev,NORM_PRIORITY)) DMESG("NORM OK"); 4509 if(check_nic_enought_desc(dev,HI_PRIORITY)) DMESG("HI OK"); 4510@@ -2077,8 +2184,8 @@ 4511 void rtl8180_start_tx_beacon(struct net_device *dev) 4512 { 4513 int i; 4514- struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); 4515- u16 word; 4516+ struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv_rtl7(dev); 4517+ u16 word; 4518 DMESG("Enabling beacon TX"); 4519 //write_nic_byte(dev, 0x42,0xe6);// TCR 4520 //rtl8180_init_beacon(dev); 4521@@ -2091,41 +2198,41 @@ 4522 //write_nic_word(dev,0x7a,0); 4523 //write_nic_word(dev,0x7a,0x8000); 4524 4525- 4526+ 4527 word = read_nic_word(dev, BcnItv); 4528 word &= ~BcnItv_BcnItv; // clear Bcn_Itv 4529 write_nic_word(dev, BcnItv, word); 4530 4531- write_nic_word(dev, AtimWnd, 4532+ write_nic_word(dev, AtimWnd, 4533 read_nic_word(dev, AtimWnd) &~ AtimWnd_AtimWnd); 4534- 4535+ 4536 word = read_nic_word(dev, BintrItv); 4537 word &= ~BintrItv_BintrItv; 4538- 4539- //word |= priv->ieee80211->beacon_interval * 4540+ 4541+ //word |= priv->ieee80211->beacon_interval * 4542 // ((priv->txbeaconcount > 1)?(priv->txbeaconcount-1):1); 4543 // FIXME:FIXME check if correct ^^ worked with 0x3e8; 4544- 4545+ 4546 write_nic_word(dev, BintrItv, word); 4547- 4548+ 4549 //write_nic_word(dev,0x2e,0xe002); 4550 //write_nic_dword(dev,0x30,0xb8c7832e); 4551 for(i=0; i<ETH_ALEN; i++) 4552 write_nic_byte(dev, BSSID+i, priv->ieee80211->beacon_cell_ssid[i]); 4553- 4554+ 4555 // rtl8180_update_msr(dev); 4556 4557- 4558+ 4559 //write_nic_byte(dev,CONFIG4,3); /* !!!!!!!!!! */ 4560- 4561+ 4562 rtl8180_set_mode(dev, EPROM_CMD_NORMAL); 4563- 4564+ 4565 rtl8180_irq_enable(dev); 4566- 4567+ 4568 /* VV !!!!!!!!!! VV*/ 4569 /* 4570 rtl8180_set_mode(dev,EPROM_CMD_CONFIG); 4571- write_nic_byte(dev,0x9d,0x00); 4572+ write_nic_byte(dev,0x9d,0x00); 4573 rtl8180_set_mode(dev,EPROM_CMD_NORMAL); 4574 */ 4575 } 4576@@ -2135,137 +2242,138 @@ 4577 ***************************************************************************/ 4578 static struct net_device_stats *rtl8180_stats(struct net_device *dev) 4579 { 4580- struct r8180_priv *priv = ieee80211_priv(dev); 4581- 4582+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 4583+ 4584 return &priv->ieee80211->stats; 4585 } 4586 4587 4588 int _rtl8180_up(struct net_device *dev) 4589 { 4590- struct r8180_priv *priv = ieee80211_priv(dev); 4591+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 4592 4593 priv->up=1; 4594- 4595- //DMESG("Bringing up iface"); 4596+ 4597+// DMESG("Bringing up iface"); 4598 4599 rtl8180_adapter_start(dev); 4600- 4601 rtl8180_rx_enable(dev); 4602- 4603 rtl8180_tx_enable(dev); 4604- 4605- ieee80211_softmac_start_protocol(priv->ieee80211); 4606- 4607- ieee80211_reset_queue(priv->ieee80211); 4608+ ieee80211_softmac_start_protocol_rtl7(priv->ieee80211); 4609+ ieee80211_reset_queue_rtl7(priv->ieee80211); 4610 if(!netif_queue_stopped(dev)) 4611 netif_start_queue(dev); 4612 else 4613 netif_wake_queue(dev); 4614- 4615 return 0; 4616 } 4617 4618 4619 int rtl8180_open(struct net_device *dev) 4620 { 4621- struct r8180_priv *priv = ieee80211_priv(dev); 4622+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 4623 int ret; 4624- 4625+ 4626 down(&priv->wx_sem); 4627+ 4628 ret = rtl8180_up(dev); 4629 up(&priv->wx_sem); 4630 return ret; 4631- 4632+ 4633 } 4634 4635 4636 int rtl8180_up(struct net_device *dev) 4637 { 4638- struct r8180_priv *priv = ieee80211_priv(dev); 4639+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 4640 4641 if (priv->up == 1) return -1; 4642- 4643+ 4644 return _rtl8180_up(dev); 4645 } 4646 4647 4648 int rtl8180_close(struct net_device *dev) 4649 { 4650- struct r8180_priv *priv = ieee80211_priv(dev); 4651+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 4652 int ret; 4653- 4654+ 4655 down(&priv->wx_sem); 4656- 4657+ 4658 ret = rtl8180_down(dev); 4659- 4660+ 4661 up(&priv->wx_sem); 4662- 4663+ 4664 return ret; 4665 4666 } 4667 4668 int rtl8180_down(struct net_device *dev) 4669 { 4670- struct r8180_priv *priv = ieee80211_priv(dev); 4671+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 4672 4673 if (priv->up == 0) return -1; 4674- 4675+ 4676 priv->up=0; 4677 4678 /* FIXME */ 4679 if (!netif_queue_stopped(dev)) 4680 netif_stop_queue(dev); 4681- 4682+ 4683 rtl8180_rtx_disable(dev); 4684 rtl8180_irq_disable(dev); 4685 4686- ieee80211_softmac_stop_protocol(priv->ieee80211); 4687- 4688+ ieee80211_softmac_stop_protocol_rtl7(priv->ieee80211); 4689+ 4690 return 0; 4691 } 4692 4693 4694 void rtl8180_commit(struct net_device *dev) 4695 { 4696- struct r8180_priv *priv = ieee80211_priv(dev); 4697+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 4698 4699 if (priv->up == 0) return ; 4700- 4701- ieee80211_softmac_stop_protocol(priv->ieee80211); 4702- 4703+ 4704+ ieee80211_softmac_stop_protocol_rtl7(priv->ieee80211); 4705+ 4706 rtl8180_irq_disable(dev); 4707 rtl8180_rtx_disable(dev); 4708 _rtl8180_up(dev); 4709 } 4710 4711+# if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)) 4712+void rtl8180_restart(struct work_struct *work) 4713+{ 4714+ struct r8180_priv *priv = container_of(work, struct r8180_priv, reset_wq); 4715+ struct net_device *dev = priv->dev; 4716+#else 4717 void rtl8180_restart(struct net_device *dev) 4718 { 4719- struct r8180_priv *priv = ieee80211_priv(dev); 4720- 4721+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 4722+#endif 4723 down(&priv->wx_sem); 4724- 4725 rtl8180_commit(dev); 4726- 4727+ 4728 up(&priv->wx_sem); 4729 } 4730 4731 static void r8180_set_multicast(struct net_device *dev) 4732 { 4733- struct r8180_priv *priv = ieee80211_priv(dev); 4734+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 4735 short promisc; 4736 4737 //down(&priv->wx_sem); 4738- 4739+ 4740 /* FIXME FIXME */ 4741- 4742+ 4743 promisc = (dev->flags & IFF_PROMISC) ? 1:0; 4744- 4745+ 4746 if (promisc != priv->promisc) 4747 // rtl8180_commit(dev); 4748- 4749+ 4750 priv->promisc = promisc; 4751- 4752+ 4753 //schedule_work(&priv->reset_wq); 4754 //up(&priv->wx_sem); 4755 } 4756@@ -2273,17 +2381,17 @@ 4757 4758 int r8180_set_mac_adr(struct net_device *dev, void *mac) 4759 { 4760- struct r8180_priv *priv = ieee80211_priv(dev); 4761+ struct r8180_priv *priv = ieee80211_priv_rtl7(dev); 4762 struct sockaddr *addr = mac; 4763- 4764+ 4765 down(&priv->wx_sem); 4766- 4767+ 4768 memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN); 4769- 4770+ 4771 schedule_work(&priv->reset_wq); 4772- 4773+ 4774 up(&priv->wx_sem); 4775- 4776+ 4777 return 0; 4778 } 4779 4780@@ -2291,16 +2399,18 @@ 4781 /* based on ipw2200 driver */ 4782 int rtl8180_ioctl(struct net_device *dev, struct ifreq *rq, int cmd) 4783 { 4784- struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); 4785- 4786+ struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv_rtl7(dev); 4787+ struct iwreq *wrq; 4788+ int ret; 4789+ 4790 down(&priv->wx_sem); 4791- 4792- struct iwreq *wrq = (struct iwreq *)rq; 4793- 4794- int ret=-1; 4795+ 4796+ wrq = (struct iwreq *)rq; 4797+ 4798+ ret=-1; 4799 switch (cmd) { 4800 case RTL_IOCTL_WPA_SUPPLICANT: 4801- ret = ieee80211_wpa_supplicant_ioctl(priv->ieee80211, &wrq->u.data); 4802+ ret = ieee80211_wpa_supplicant_ioctl_rtl7(priv->ieee80211, &wrq->u.data); 4803 break; 4804 4805 default: 4806@@ -2309,7 +2419,7 @@ 4807 } 4808 4809 up(&priv->wx_sem); 4810- 4811+ 4812 return ret; 4813 } 4814 4815@@ -2320,10 +2430,11 @@ 4816 struct net_device *dev = (struct net_device*)rx_urb->context; 4817 int status,len,flen; 4818 struct sk_buff *skb; 4819- u32 *desc; 4820- 4821+ u8 *desc; 4822+ u8 signal,quality,rate; 4823+ 4824 //DMESG("rtl8187_rx_isr"); 4825- 4826+ 4827 struct ieee80211_rx_stats stats = { 4828 .signal = 0, 4829 .noise = -98, 4830@@ -2332,43 +2443,109 @@ 4831 .freq = IEEE80211_24GHZ_BAND, 4832 }; 4833 4834+ 4835 //DMESG("RX %d ",rx_urb->status); 4836 status = rx_urb->status; 4837 if(status == 0){ 4838- 4839+ 4840 len = rx_urb->actual_length; 4841- // len = len - 4 - 15 - 1; /* CRC, DESC, SEPARATOR*/ 4842+ // len = len - 4 - 15 - 1; /* CRC, DESC, SEPARATOR*/ 4843 len -= 4*4;/* 4 dword and 4 byte CRC */ 4844- 4845+#if 0 4846 desc = (u32*)(rx_urb->transfer_buffer + len); 4847- 4848+ 4849 flen = desc[0] & 0xfff; 4850- 4851+ 4852 if( flen <= rx_urb->actual_length){ 4853- 4854- stats.signal = (desc[1] & 0x7f00)>>8; 4855- stats.noise = desc[1] &0xff; 4856- stats.rate = desc[0] >> 20 & 0xf; 4857+ 4858+ //stats.signal = (desc[1] & 0x7f00)>>8; 4859+ //stats.noise = desc[1] &0xff; 4860+ signal=(desc[1]& (0xff0000))>>16; 4861+ signal=(signal&0xfe)>>1; // Modify by hikaru 6.6 4862+ 4863+ quality=(desc[1] & (0xff)); 4864+ 4865+ rate=(desc[0] &((1<<23)|(1<<22)|(1<<21)|(1<<20)))>>20; 4866+ // printk(KERN_INFO "rate is %d!\n",rate); 4867+ stats.rate = rtl8180_rate2rate(rate); 4868+ // printk(KERN_INFO "stats.rate is %d!\n",stats.rate); 4869+ //stats.rate = desc[0] >> 20 & 0xf; 4870 stats.mac_time[0] = desc[2]; 4871 stats.mac_time[1] = desc[3]; 4872+#endif 4873+ 4874+ desc = rx_urb->transfer_buffer + len; 4875+ 4876+ flen = ((desc[1] & 0x0f) << 8) + (desc[0] & 0xff); 4877+ 4878+ if( flen <= rx_urb->actual_length){ 4879+ //stats.signal = (desc[1] & 0x7f00)>>8; 4880+ //stats.noise = desc[1] &0xff; 4881+ signal=(desc[6]& 0xfe)>>1; 4882+ //signal=(signal&0xfe)>>1; // Modify by hikaru 6.6 4883+ 4884+ quality=desc[4] & 0xff; 4885+ 4886+ //rate=(desc[2] &((1<<7)|(1<<6)|(1<<5)|(1<<4)))>>4; 4887+ rate=(desc[2] & 0xf0)>>4; 4888+ // printk(KERN_INFO "rate is %d!\n",rate); 4889+ stats.rate = rtl8180_rate2rate(rate); 4890+ // printk(KERN_INFO "stats.rate is %d!\n",stats.rate); 4891+ //stats.rate = desc[0] >> 20 & 0xf; 4892+ stats.mac_time[0] = desc[8] + (desc[9]<<8) + (desc[10]<<16) + (desc[11]<<24); 4893+ stats.mac_time[1] = desc[12] + (desc[13]<<8) + (desc[14]<<16) + (desc[15]<<24); 4894+ 4895+ 4896+ //calculate link quality begin 4897+ if(!rtl8180_IsWirelessBMode(stats.rate) ) 4898+ { // OFDM rate. 4899+ if(signal>90) 4900+ signal=90; 4901+ else if(signal<25) 4902+ signal=25; 4903+ signal = (90-signal)*100/65; 4904+ } 4905+ else 4906+ { // CCK rate. 4907+ if(signal>95) 4908+ signal = 95; 4909+ else if(signal<30) 4910+ signal = 30; 4911+ signal =(95-signal )*100/65; 4912+ } 4913+ priv->wstats.qual.level = signal; 4914+ // printk(KERN_INFO "signal is %d!\n",signal); 4915+ if(quality > 64) 4916+ priv ->wstats.qual.qual = 0; 4917+ else 4918+ priv ->wstats.qual.qual = ((64-quality) * 100) / 64; // SQ value is the SIGNAL_QUALITY returned to IORequest, 4919+ //and this value only appear when STA is associated to AP or 4920+ // STA is in IBSS mode 4921+ // printk(KERN_INFO "quality is %d!\n",priv->wstats.qual.qual); 4922+ priv->wstats.qual.noise = 100 - priv ->wstats.qual.qual; 4923+ priv->wstats.qual.updated = 7; 4924+ if(priv->ieee80211->iw_mode == IW_MODE_MONITOR) 4925+ { 4926+ stats.signal = priv->wstats.qual.level; 4927+ stats.noise = priv->wstats.qual.noise; 4928+ } 4929+ //calculate link quality end 4930 skb = dev_alloc_skb(flen-4); 4931- //skb_reserve(skb,2); 4932- if(skb){ 4933+ if(skb){ 4934 memcpy(skb_put(skb,flen-4), 4935 rx_urb->transfer_buffer,flen -4); 4936- 4937+ 4938 #ifdef DUMP_RX 4939 int i; 4940 for(i=0;i<flen-4;i++) 4941 printk("%2x ",((u8*)(rx_urb->transfer_buffer))[i]); 4942 printk("------RATE %x:w---------------\n",stats.rate); 4943- 4944+ 4945 #endif 4946 priv->stats.rxok++; 4947 // priv->rxskb = skb; 4948 // priv->tempstats = &stats; 4949- 4950- if(!ieee80211_rx(priv->ieee80211, 4951+ if(!ieee80211_rx_rtl7(priv->ieee80211, 4952 skb, &stats)) 4953 dev_kfree_skb_any(skb); 4954 } 4955@@ -2376,9 +2553,8 @@ 4956 }else{ 4957 priv->stats.rxstaterr++; 4958 priv->ieee80211->stats.rx_errors++; 4959- 4960 } 4961- 4962+ 4963 if(status != -ENOENT)rtl8187_rx_urbsubmit(dev,rx_urb); 4964 else DMESG("RX process aborted due to explicit shutdown"); 4965 } 4966@@ -2396,20 +2572,20 @@ 4967 struct r8180_priv *priv= NULL; 4968 struct usb_device *udev = interface_to_usbdev(intf); 4969 4970-//printk("===> rtl8187_usb_probe()\n"); 4971- 4972- dev = alloc_ieee80211(sizeof(struct r8180_priv)); 4973- 4974+//printk("===> rtl8187_usb_probe()\n"); 4975+ 4976+ dev = alloc_ieee80211_rtl7(sizeof(struct r8180_priv)); 4977+ 4978 SET_MODULE_OWNER(dev); 4979- usb_set_intfdata(intf, dev); 4980- 4981+ usb_set_intfdata(intf, dev); 4982+ 4983 SET_NETDEV_DEV(dev, &intf->dev); 4984 4985- priv = ieee80211_priv(dev); 4986+ priv = ieee80211_priv_rtl7(dev); 4987 priv->ieee80211 = netdev_priv(dev); 4988- 4989+ 4990 priv->udev=udev; 4991- 4992+ 4993 dev->open = rtl8180_open; 4994 dev->stop = rtl8180_close; 4995 //dev->hard_start_xmit = rtl8180_8023_hard_start_xmit; 4996@@ -2418,41 +2594,46 @@ 4997 dev->do_ioctl = rtl8180_ioctl; 4998 dev->set_multicast_list = r8180_set_multicast; 4999 dev->set_mac_address = r8180_set_mac_adr; 5000+#if WIRELESS_EXT >= 12 5001+#if WIRELESS_EXT < 17 5002 dev->get_wireless_stats = r8180_get_wireless_stats; 5003+#endif 5004+ dev->wireless_handlers = (struct iw_handler_def *) &r8180_wx_handlers_def; 5005+#endif 5006 dev->type=ARPHRD_ETHER; 5007- 5008+ 5009 if (dev_alloc_name(dev, ifname) < 0){ 5010 DMESG("Oops: devname already taken! Trying wlan%%d...\n"); 5011 ifname = "wlan%d"; 5012 dev_alloc_name(dev, ifname); 5013 } 5014- 5015+ 5016 // dev->open=rtl8180_init; 5017- 5018- if(rtl8180_init(dev)!=0){ 5019+ 5020+ if(rtl8180_init(dev)!=0){ 5021 DMESG("Initialization failed"); 5022 goto fail; 5023 } 5024- 5025+ 5026 netif_carrier_off(dev); 5027 netif_stop_queue(dev); 5028- 5029+ 5030 register_netdev(dev); 5031- 5032+ 5033 rtl8180_proc_init_one(dev); 5034- 5035- 5036+ 5037+ 5038 DMESG("Driver probe completed\n"); 5039- return 0; 5040+ return 0; 5041+ 5042 5043- 5044 fail: 5045- free_ieee80211(dev); 5046- 5047+ free_ieee80211_rtl7(dev); 5048+ 5049 DMESG("wlan driver load failed\n"); 5050- 5051+ 5052 return -ENODEV; 5053- 5054+ 5055 } 5056 5057 5058@@ -2461,13 +2642,13 @@ 5059 struct r8180_priv *priv; 5060 struct net_device *dev = usb_get_intfdata(intf); 5061 if(dev){ 5062- 5063+ 5064 unregister_netdev(dev); 5065- 5066- priv=ieee80211_priv(dev); 5067- 5068+ 5069+ priv=ieee80211_priv_rtl7(dev); 5070+ 5071 rtl8180_proc_remove_one(dev); 5072- 5073+ 5074 rtl8180_down(dev); 5075 priv->rf_close(dev); 5076 //rtl8180_rtx_disable(dev); 5077@@ -2478,12 +2659,12 @@ 5078 5079 } 5080 // pci_disable_device(pdev); 5081- free_ieee80211(dev); 5082+ free_ieee80211_rtl7(dev); 5083 DMESG("wlan driver removed\n"); 5084 } 5085 5086 5087-static int __init rtl8187_usb_module_init(void) 5088+static int __init rtl8187_usb_module_init_rtl7(void) 5089 { 5090 printk(KERN_INFO "\nLinux kernel driver for RTL8187 \ 5091 based WLAN cards\n"); 5092@@ -2495,7 +2676,7 @@ 5093 } 5094 5095 5096-static void __exit rtl8187_usb_module_exit(void) 5097+static void __exit rtl8187_usb_module_exit_rtl7(void) 5098 { 5099 usb_deregister(&rtl8187_usb_driver); 5100 5101@@ -2508,14 +2689,14 @@ 5102 { 5103 unsigned long flags; 5104 short enough_desc; 5105- struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv(dev); 5106- 5107+ struct r8180_priv *priv = (struct r8180_priv *)ieee80211_priv_rtl7(dev); 5108+ 5109 spin_lock_irqsave(&priv->tx_lock,flags); 5110 enough_desc = check_nic_enought_desc(dev,pri); 5111- spin_unlock_irqrestore(&priv->tx_lock,flags); 5112- 5113+ spin_unlock_irqrestore(&priv->tx_lock,flags); 5114+ 5115 if(enough_desc) 5116- ieee80211_wake_queue(priv->ieee80211); 5117+ ieee80211_wake_queue_rtl7(priv->ieee80211); 5118 } 5119 5120 5121@@ -2523,5 +2704,5 @@ 5122 /*************************************************************************** 5123 ------------------- module init / exit stubs ---------------- 5124 ****************************************************************************/ 5125-module_init(rtl8187_usb_module_init); 5126-module_exit(rtl8187_usb_module_exit); 5127+module_init(rtl8187_usb_module_init_rtl7); 5128+module_exit(rtl8187_usb_module_exit_rtl7); 5129diff -Naur rtl8187_orig/beta-8187/r8187.h rtl8187_rawtx/beta-8187/r8187.h 5130--- rtl8187_orig/beta-8187/r8187.h 2007-03-13 23:45:09.000000000 +0100 5131+++ rtl8187_rawtx/beta-8187/r8187.h 2007-06-08 23:30:29.000000000 +0200 5132@@ -1,17 +1,17 @@ 5133-/* 5134+/* 5135 This is part of rtl8187 OpenSource driver. 5136- Copyright (C) Andrea Merello 2004-2005 <andreamrl@tiscali.it> 5137+ Copyright (C) Andrea Merello 2004-2005 <andreamrl@tiscali.it> 5138 Released under the terms of GPL (General Public Licence) 5139- 5140- Parts of this driver are based on the GPL part of the 5141+ 5142+ Parts of this driver are based on the GPL part of the 5143 official realtek driver 5144- 5145- Parts of this driver are based on the rtl8180 driver skeleton 5146+ 5147+ Parts of this driver are based on the rtl8180 driver skeleton 5148 from Patric Schenke & Andres Salomon 5149- 5150+ 5151 Parts of this driver are based on the Intel Pro Wireless 2100 GPL driver 5152- 5153- We want to tanks the Authors of those projects and the Ndiswrapper 5154+ 5155+ We want to tanks the Authors of those projects and the Ndiswrapper 5156 project Authors. 5157 */ 5158 5159@@ -26,7 +26,6 @@ 5160 5161 #include <linux/module.h> 5162 #include <linux/kernel.h> 5163-#include <linux/config.h> 5164 #include <linux/init.h> 5165 #include <linux/ioport.h> 5166 #include <linux/sched.h> 5167@@ -47,6 +46,12 @@ 5168 #include <asm/io.h> 5169 #include <asm/semaphore.h> 5170 5171+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) 5172+#include <linux/config.h> 5173+#else 5174+#include <linux/autoconf.h> 5175+#endif 5176+ 5177 #include "ieee80211.h" 5178 5179 #define EPROM_93c46 0 5180@@ -68,7 +73,7 @@ 5181 { 5182 struct buffer *next; 5183 u32 *buf; 5184- 5185+ 5186 } buffer; 5187 5188 #if 0 5189@@ -123,18 +128,18 @@ 5190 short epromtype; 5191 int irq; 5192 struct ieee80211_device *ieee80211; 5193- 5194+ 5195 short card_8185; /* O: rtl8180, 1:rtl8185 V B/C, 2:rtl8185 V D */ 5196 short card_8185_Bversion; /* if TCR reports card V B/C this discriminates */ 5197 short phy_ver; /* meaningful for rtl8225 1:A 2:B 3:C */ 5198 short enable_gpio0; 5199 enum card_type {PCI,MINIPCI,CARDBUS,USB/*rtl8187*/}card_type; 5200 short hw_plcp_len; 5201- 5202+ 5203 // spinlock_t irq_lock; 5204 // spinlock_t irq_th_lock; 5205 spinlock_t tx_lock; 5206- 5207+ 5208 u16 irq_mask; 5209 // short irq_enabled; 5210 struct net_device *dev; 5211@@ -143,13 +148,16 @@ 5212 short max_sens; 5213 u8 chtxpwr[15]; //channels from 1 to 14, 0 not used 5214 u8 chtxpwr_ofdm[15]; //channels from 1 to 14, 0 not used 5215+ u8 chtxpwr_orig[15]; //channels from 1 to 14, 0 not used 5216+ u8 chtxpwr_ofdm_orig[15]; //channels from 1 to 14, 0 not used 5217 u8 cck_txpwr_base; 5218 u8 ofdm_txpwr_base; 5219+ u8 txpwr_max; 5220 u8 challow[15]; //channels from 1 to 14, 0 not used 5221 short up; 5222 short crcmon; //if 1 allow bad crc frame reception in monitor mode 5223-// short prism_hdr; 5224- 5225+ short prism_hdr; 5226+ 5227 // struct timer_list scan_timer; 5228 /*short scanpending; 5229 short stopscan;*/ 5230@@ -158,7 +166,7 @@ 5231 //u8 active_scan_num; 5232 struct semaphore wx_sem; 5233 // short hw_wep; 5234- 5235+ 5236 // short digphy; 5237 // short antb; 5238 // short diversity; 5239@@ -171,31 +179,31 @@ 5240 void (*rf_close)(struct net_device *dev); 5241 void (*rf_init)(struct net_device *dev); 5242 //short rate; 5243- short promisc; 5244+ short promisc; 5245 /*stats*/ 5246 struct Stats stats; 5247 struct iw_statistics wstats; 5248 struct proc_dir_entry *dir_dev; 5249- 5250+ 5251 /*RX stuff*/ 5252 // u32 *rxring; 5253 // u32 *rxringtail; 5254 // dma_addr_t rxringdma; 5255 struct urb **rx_urb; 5256- 5257+ 5258 //struct buffer *rxbuffer; 5259 //struct buffer *rxbufferhead; 5260 //int rxringcount; 5261 //u16 rxbuffersize; 5262- 5263- //struct sk_buff *rx_skb; 5264+ 5265+ //struct sk_buff *rx_skb; 5266 5267 //short rx_skb_complete; 5268 5269 //u32 rx_prevlen; 5270 atomic_t tx_lp_pending; 5271 atomic_t tx_np_pending; 5272-#if 0 5273+#if 0 5274 /*TX stuff*/ 5275 u32 *txlpring; 5276 u32 *txhpring; 5277@@ -225,7 +233,7 @@ 5278 struct urb *rxurb_task; 5279 // u8 dma_poll_mask; 5280 //short tx_suspend; 5281- 5282+ 5283 /* adhoc/master mode stuff */ 5284 #if 0 5285 u32 *txbeacontail; 5286@@ -239,18 +247,18 @@ 5287 //u16 master_beaconinterval; 5288 // u32 master_beaconsize; 5289 //u16 beacon_interval; 5290- 5291+ 5292 u8 retry_data; 5293 u8 retry_rts; 5294- 5295+ 5296 struct work_struct reset_wq; 5297- 5298+ 5299 }r8180_priv; 5300 5301 5302-typedef enum{ 5303+typedef enum{ 5304 LOW_PRIORITY , 5305- NORM_PRIORITY 5306+ NORM_PRIORITY 5307 } priority_t; 5308 5309 5310diff -Naur rtl8187_orig/ieee80211/ieee80211_crypt.c rtl8187_rawtx/ieee80211/ieee80211_crypt.c 5311--- rtl8187_orig/ieee80211/ieee80211_crypt.c 2007-03-13 23:45:09.000000000 +0100 5312+++ rtl8187_rawtx/ieee80211/ieee80211_crypt.c 2007-06-08 23:30:47.000000000 +0200 5313@@ -11,7 +11,6 @@ 5314 * 5315 */ 5316 5317-#include <linux/config.h> 5318 #include <linux/version.h> 5319 #include <linux/module.h> 5320 #include <linux/init.h> 5321@@ -19,6 +18,12 @@ 5322 #include <asm/string.h> 5323 #include <asm/errno.h> 5324 5325+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) 5326+#include <linux/config.h> 5327+#else 5328+#include <linux/autoconf.h> 5329+#endif 5330+ 5331 #include "ieee80211.h" 5332 5333 MODULE_AUTHOR("Jouni Malinen"); 5334@@ -38,7 +43,7 @@ 5335 5336 static struct ieee80211_crypto *hcrypt; 5337 5338-void ieee80211_crypt_deinit_entries(struct ieee80211_device *ieee, 5339+void ieee80211_crypt_deinit_entries_rtl7(struct ieee80211_device *ieee, 5340 int force) 5341 { 5342 struct list_head *ptr, *n; 5343@@ -61,13 +66,13 @@ 5344 } 5345 } 5346 5347-void ieee80211_crypt_deinit_handler(unsigned long data) 5348+void ieee80211_crypt_deinit_handler_rtl7(unsigned long data) 5349 { 5350 struct ieee80211_device *ieee = (struct ieee80211_device *)data; 5351 unsigned long flags; 5352 5353 spin_lock_irqsave(&ieee->lock, flags); 5354- ieee80211_crypt_deinit_entries(ieee, 0); 5355+ ieee80211_crypt_deinit_entries_rtl7(ieee, 0); 5356 if (!list_empty(&ieee->crypt_deinit_list)) { 5357 printk(KERN_DEBUG "%s: entries remaining in delayed crypt " 5358 "deletion list\n", ieee->dev->name); 5359@@ -78,7 +83,7 @@ 5360 5361 } 5362 5363-void ieee80211_crypt_delayed_deinit(struct ieee80211_device *ieee, 5364+void ieee80211_crypt_delayed_deinit_rtl7(struct ieee80211_device *ieee, 5365 struct ieee80211_crypt_data **crypt) 5366 { 5367 struct ieee80211_crypt_data *tmp; 5368@@ -103,7 +108,7 @@ 5369 spin_unlock_irqrestore(&ieee->lock, flags); 5370 } 5371 5372-int ieee80211_register_crypto_ops(struct ieee80211_crypto_ops *ops) 5373+int ieee80211_register_crypto_ops_rtl7(struct ieee80211_crypto_ops *ops) 5374 { 5375 unsigned long flags; 5376 struct ieee80211_crypto_alg *alg; 5377@@ -128,7 +133,7 @@ 5378 return 0; 5379 } 5380 5381-int ieee80211_unregister_crypto_ops(struct ieee80211_crypto_ops *ops) 5382+int ieee80211_unregister_crypto_ops_rtl7(struct ieee80211_crypto_ops *ops) 5383 { 5384 unsigned long flags; 5385 struct list_head *ptr; 5386@@ -159,7 +164,7 @@ 5387 } 5388 5389 5390-struct ieee80211_crypto_ops * ieee80211_get_crypto_ops(const char *name) 5391+struct ieee80211_crypto_ops * ieee80211_get_crypto_ops_rtl7(const char *name) 5392 { 5393 unsigned long flags; 5394 struct list_head *ptr; 5395@@ -186,13 +191,13 @@ 5396 } 5397 5398 5399-static void * ieee80211_crypt_null_init(int keyidx) { return (void *) 1; } 5400-static void ieee80211_crypt_null_deinit(void *priv) {} 5401+static void * ieee80211_crypt_null_init_rtl7(int keyidx) { return (void *) 1; } 5402+static void ieee80211_crypt_null_deinit_rtl7(void *priv) {} 5403 5404 static struct ieee80211_crypto_ops ieee80211_crypt_null = { 5405 .name = "NULL", 5406- .init = ieee80211_crypt_null_init, 5407- .deinit = ieee80211_crypt_null_deinit, 5408+ .init = ieee80211_crypt_null_init_rtl7, 5409+ .deinit = ieee80211_crypt_null_deinit_rtl7, 5410 .encrypt_mpdu = NULL, 5411 .decrypt_mpdu = NULL, 5412 .encrypt_msdu = NULL, 5413@@ -205,7 +210,7 @@ 5414 }; 5415 5416 5417-static int __init ieee80211_crypto_init(void) 5418+static int __init ieee80211_crypto_init_rtl7(void) 5419 { 5420 int ret = -ENOMEM; 5421 5422@@ -217,7 +222,7 @@ 5423 INIT_LIST_HEAD(&hcrypt->algs); 5424 spin_lock_init(&hcrypt->lock); 5425 5426- ret = ieee80211_register_crypto_ops(&ieee80211_crypt_null); 5427+ ret = ieee80211_register_crypto_ops_rtl7(&ieee80211_crypt_null); 5428 if (ret < 0) { 5429 kfree(hcrypt); 5430 hcrypt = NULL; 5431@@ -227,7 +232,7 @@ 5432 } 5433 5434 5435-static void __exit ieee80211_crypto_deinit(void) 5436+static void __exit ieee80211_crypto_deinit_rtl7(void) 5437 { 5438 struct list_head *ptr, *n; 5439 5440@@ -247,13 +252,13 @@ 5441 kfree(hcrypt); 5442 } 5443 5444-EXPORT_SYMBOL(ieee80211_crypt_deinit_entries); 5445-EXPORT_SYMBOL(ieee80211_crypt_deinit_handler); 5446-EXPORT_SYMBOL(ieee80211_crypt_delayed_deinit); 5447- 5448-EXPORT_SYMBOL(ieee80211_register_crypto_ops); 5449-EXPORT_SYMBOL(ieee80211_unregister_crypto_ops); 5450-EXPORT_SYMBOL(ieee80211_get_crypto_ops); 5451+EXPORT_SYMBOL(ieee80211_crypt_deinit_entries_rtl7); 5452+EXPORT_SYMBOL(ieee80211_crypt_deinit_handler_rtl7); 5453+EXPORT_SYMBOL(ieee80211_crypt_delayed_deinit_rtl7); 5454+ 5455+EXPORT_SYMBOL(ieee80211_register_crypto_ops_rtl7); 5456+EXPORT_SYMBOL(ieee80211_unregister_crypto_ops_rtl7); 5457+EXPORT_SYMBOL(ieee80211_get_crypto_ops_rtl7); 5458 5459-module_init(ieee80211_crypto_init); 5460-module_exit(ieee80211_crypto_deinit); 5461+module_init(ieee80211_crypto_init_rtl7); 5462+module_exit(ieee80211_crypto_deinit_rtl7); 5463diff -Naur rtl8187_orig/ieee80211/ieee80211_crypt_ccmp.c rtl8187_rawtx/ieee80211/ieee80211_crypt_ccmp.c 5464--- rtl8187_orig/ieee80211/ieee80211_crypt_ccmp.c 2007-03-13 23:45:09.000000000 +0100 5465+++ rtl8187_rawtx/ieee80211/ieee80211_crypt_ccmp.c 2007-06-08 23:30:47.000000000 +0200 5466@@ -9,7 +9,6 @@ 5467 * more details. 5468 */ 5469 5470-#include <linux/config.h> 5471 #include <linux/version.h> 5472 #include <linux/module.h> 5473 #include <linux/init.h> 5474@@ -22,11 +21,22 @@ 5475 #include <asm/string.h> 5476 #include <linux/wireless.h> 5477 5478+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) 5479+#include <linux/config.h> 5480+#else 5481+#include <linux/autoconf.h> 5482+#endif 5483+ 5484 #include "ieee80211.h" 5485 5486 5487 #include <linux/crypto.h> 5488-#include <asm/scatterlist.h> 5489+ 5490+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20) 5491+ #include <asm/scatterlist.h> 5492+#else 5493+ #include <linux/scatterlist.h> 5494+#endif 5495 5496 MODULE_AUTHOR("Jouni Malinen"); 5497 MODULE_DESCRIPTION("Host AP crypt: CCMP"); 5498@@ -51,7 +61,11 @@ 5499 5500 int key_idx; 5501 5502+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) 5503 struct crypto_tfm *tfm; 5504+#else 5505+ struct crypto_cipher *tfm; 5506+#endif 5507 5508 /* scratch buffers for virt_to_page() (crypto API) */ 5509 u8 tx_b0[AES_BLOCK_LEN], tx_b[AES_BLOCK_LEN], 5510@@ -59,7 +73,8 @@ 5511 u8 rx_b0[AES_BLOCK_LEN], rx_b[AES_BLOCK_LEN], rx_a[AES_BLOCK_LEN]; 5512 }; 5513 5514-void ieee80211_ccmp_aes_encrypt(struct crypto_tfm *tfm, 5515+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) 5516+void ieee80211_ccmp_aes_encrypt_rtl7(struct crypto_tfm *tfm, 5517 const u8 pt[16], u8 ct[16]) 5518 { 5519 struct scatterlist src, dst; 5520@@ -74,8 +89,15 @@ 5521 5522 crypto_cipher_encrypt(tfm, &dst, &src, AES_BLOCK_LEN); 5523 } 5524+#else 5525+static inline void ieee80211_ccmp_aes_encrypt_rtl7(struct crypto_cipher *tfm, 5526+ const u8 pt[16], u8 ct[16]) 5527+{ 5528+ crypto_cipher_encrypt_one(tfm, ct, pt); 5529+} 5530+#endif 5531 5532-static void * ieee80211_ccmp_init(int key_idx) 5533+static void * ieee80211_ccmp_init_rtl7(int key_idx) 5534 { 5535 struct ieee80211_ccmp_data *priv; 5536 5537@@ -85,19 +107,33 @@ 5538 memset(priv, 0, sizeof(*priv)); 5539 priv->key_idx = key_idx; 5540 5541+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) 5542 priv->tfm = crypto_alloc_tfm("aes", 0); 5543 if (priv->tfm == NULL) { 5544 printk(KERN_DEBUG "ieee80211_crypt_ccmp: could not allocate " 5545 "crypto API aes\n"); 5546 goto fail; 5547 } 5548+#else 5549+ priv->tfm = crypto_alloc_cipher("aes", 0, CRYPTO_ALG_ASYNC); 5550+ if (IS_ERR(priv->tfm)) { 5551+ printk(KERN_DEBUG "ieee80211_crypt_ccmp: could not allocate " 5552+ "crypto API aes\n"); 5553+ priv->tfm = NULL; 5554+ goto fail; 5555+ } 5556+#endif 5557 5558 return priv; 5559 5560 fail: 5561 if (priv) { 5562 if (priv->tfm) 5563+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) 5564 crypto_free_tfm(priv->tfm); 5565+#else 5566+ crypto_free_cipher(priv->tfm); 5567+#endif 5568 kfree(priv); 5569 } 5570 5571@@ -105,16 +141,20 @@ 5572 } 5573 5574 5575-static void ieee80211_ccmp_deinit(void *priv) 5576+static void ieee80211_ccmp_deinit_rtl7(void *priv) 5577 { 5578 struct ieee80211_ccmp_data *_priv = priv; 5579 if (_priv && _priv->tfm) 5580+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) 5581 crypto_free_tfm(_priv->tfm); 5582+#else 5583+ crypto_free_cipher(_priv->tfm); 5584+#endif 5585 kfree(priv); 5586 } 5587 5588 5589-static inline void xor_block(u8 *b, u8 *a, size_t len) 5590+static inline void xor_block_rtl7(u8 *b, u8 *a, size_t len) 5591 { 5592 int i; 5593 for (i = 0; i < len; i++) 5594@@ -122,7 +162,11 @@ 5595 } 5596 5597 5598-static void ccmp_init_blocks(struct crypto_tfm *tfm, 5599+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) 5600+static void ccmp_init_blocks_rtl7(struct crypto_tfm *tfm, 5601+#else 5602+static void ccmp_init_blocks_rtl7(struct crypto_cipher *tfm, 5603+#endif 5604 struct ieee80211_hdr *hdr, 5605 u8 *pn, size_t dlen, u8 *b0, u8 *auth, 5606 u8 *s0) 5607@@ -186,18 +230,18 @@ 5608 } 5609 5610 /* Start with the first block and AAD */ 5611- ieee80211_ccmp_aes_encrypt(tfm, b0, auth); 5612- xor_block(auth, aad, AES_BLOCK_LEN); 5613- ieee80211_ccmp_aes_encrypt(tfm, auth, auth); 5614- xor_block(auth, &aad[AES_BLOCK_LEN], AES_BLOCK_LEN); 5615- ieee80211_ccmp_aes_encrypt(tfm, auth, auth); 5616+ ieee80211_ccmp_aes_encrypt_rtl7(tfm, b0, auth); 5617+ xor_block_rtl7(auth, aad, AES_BLOCK_LEN); 5618+ ieee80211_ccmp_aes_encrypt_rtl7(tfm, auth, auth); 5619+ xor_block_rtl7(auth, &aad[AES_BLOCK_LEN], AES_BLOCK_LEN); 5620+ ieee80211_ccmp_aes_encrypt_rtl7(tfm, auth, auth); 5621 b0[0] &= 0x07; 5622 b0[14] = b0[15] = 0; 5623- ieee80211_ccmp_aes_encrypt(tfm, b0, s0); 5624+ ieee80211_ccmp_aes_encrypt_rtl7(tfm, b0, s0); 5625 } 5626 5627 5628-static int ieee80211_ccmp_encrypt(struct sk_buff *skb, int hdr_len, void *priv) 5629+static int ieee80211_ccmp_encrypt_rtl7(struct sk_buff *skb, int hdr_len, void *priv) 5630 { 5631 struct ieee80211_ccmp_data *key = priv; 5632 int data_len, i, blocks, last, len; 5633@@ -237,7 +281,7 @@ 5634 *pos++ = key->tx_pn[0]; 5635 5636 hdr = (struct ieee80211_hdr *) skb->data; 5637- ccmp_init_blocks(key->tfm, hdr, key->tx_pn, data_len, b0, b, s0); 5638+ ccmp_init_blocks_rtl7(key->tfm, hdr, key->tx_pn, data_len, b0, b, s0); 5639 5640 blocks = (data_len + AES_BLOCK_LEN - 1) / AES_BLOCK_LEN; 5641 last = data_len % AES_BLOCK_LEN; 5642@@ -245,13 +289,13 @@ 5643 for (i = 1; i <= blocks; i++) { 5644 len = (i == blocks && last) ? last : AES_BLOCK_LEN; 5645 /* Authentication */ 5646- xor_block(b, pos, len); 5647- ieee80211_ccmp_aes_encrypt(key->tfm, b, b); 5648+ xor_block_rtl7(b, pos, len); 5649+ ieee80211_ccmp_aes_encrypt_rtl7(key->tfm, b, b); 5650 /* Encryption, with counter */ 5651 b0[14] = (i >> 8) & 0xff; 5652 b0[15] = i & 0xff; 5653- ieee80211_ccmp_aes_encrypt(key->tfm, b0, e); 5654- xor_block(pos, e, len); 5655+ ieee80211_ccmp_aes_encrypt_rtl7(key->tfm, b0, e); 5656+ xor_block_rtl7(pos, e, len); 5657 pos += len; 5658 } 5659 5660@@ -262,7 +306,7 @@ 5661 } 5662 5663 5664-static int ieee80211_ccmp_decrypt(struct sk_buff *skb, int hdr_len, void *priv) 5665+static int ieee80211_ccmp_decrypt_rtl7(struct sk_buff *skb, int hdr_len, void *priv) 5666 { 5667 struct ieee80211_ccmp_data *key = priv; 5668 u8 keyidx, *pos; 5669@@ -326,8 +370,8 @@ 5670 return -4; 5671 } 5672 5673- ccmp_init_blocks(key->tfm, hdr, pn, data_len, b0, a, b); 5674- xor_block(mic, b, CCMP_MIC_LEN); 5675+ ccmp_init_blocks_rtl7(key->tfm, hdr, pn, data_len, b0, a, b); 5676+ xor_block_rtl7(mic, b, CCMP_MIC_LEN); 5677 5678 blocks = (data_len + AES_BLOCK_LEN - 1) / AES_BLOCK_LEN; 5679 last = data_len % AES_BLOCK_LEN; 5680@@ -337,11 +381,11 @@ 5681 /* Decrypt, with counter */ 5682 b0[14] = (i >> 8) & 0xff; 5683 b0[15] = i & 0xff; 5684- ieee80211_ccmp_aes_encrypt(key->tfm, b0, b); 5685- xor_block(pos, b, len); 5686+ ieee80211_ccmp_aes_encrypt_rtl7(key->tfm, b0, b); 5687+ xor_block_rtl7(pos, b, len); 5688 /* Authentication */ 5689- xor_block(a, pos, len); 5690- ieee80211_ccmp_aes_encrypt(key->tfm, a, a); 5691+ xor_block_rtl7(a, pos, len); 5692+ ieee80211_ccmp_aes_encrypt_rtl7(key->tfm, a, a); 5693 pos += len; 5694 } 5695 5696@@ -365,11 +409,15 @@ 5697 } 5698 5699 5700-static int ieee80211_ccmp_set_key(void *key, int len, u8 *seq, void *priv) 5701+static int ieee80211_ccmp_set_key_rtl7(void *key, int len, u8 *seq, void *priv) 5702 { 5703 struct ieee80211_ccmp_data *data = priv; 5704 int keyidx; 5705+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) 5706 struct crypto_tfm *tfm = data->tfm; 5707+#else 5708+ struct crypto_cipher *tfm = data->tfm; 5709+#endif 5710 5711 keyidx = data->key_idx; 5712 memset(data, 0, sizeof(*data)); 5713@@ -396,7 +444,7 @@ 5714 } 5715 5716 5717-static int ieee80211_ccmp_get_key(void *key, int len, u8 *seq, void *priv) 5718+static int ieee80211_ccmp_get_key_rtl7(void *key, int len, u8 *seq, void *priv) 5719 { 5720 struct ieee80211_ccmp_data *data = priv; 5721 5722@@ -420,7 +468,7 @@ 5723 } 5724 5725 5726-static char * ieee80211_ccmp_print_stats(char *p, void *priv) 5727+static char * ieee80211_ccmp_print_stats_rtl7(char *p, void *priv) 5728 { 5729 struct ieee80211_ccmp_data *ccmp = priv; 5730 p += sprintf(p, "key[%d] alg=CCMP key_set=%d " 5731@@ -437,34 +485,34 @@ 5732 } 5733 5734 5735-static struct ieee80211_crypto_ops ieee80211_crypt_ccmp = { 5736+static struct ieee80211_crypto_ops ieee80211_crypt_ccmp_rtl7 = { 5737 .name = "CCMP", 5738- .init = ieee80211_ccmp_init, 5739- .deinit = ieee80211_ccmp_deinit, 5740- .encrypt_mpdu = ieee80211_ccmp_encrypt, 5741- .decrypt_mpdu = ieee80211_ccmp_decrypt, 5742+ .init = ieee80211_ccmp_init_rtl7, 5743+ .deinit = ieee80211_ccmp_deinit_rtl7, 5744+ .encrypt_mpdu = ieee80211_ccmp_encrypt_rtl7, 5745+ .decrypt_mpdu = ieee80211_ccmp_decrypt_rtl7, 5746 .encrypt_msdu = NULL, 5747 .decrypt_msdu = NULL, 5748- .set_key = ieee80211_ccmp_set_key, 5749- .get_key = ieee80211_ccmp_get_key, 5750- .print_stats = ieee80211_ccmp_print_stats, 5751+ .set_key = ieee80211_ccmp_set_key_rtl7, 5752+ .get_key = ieee80211_ccmp_get_key_rtl7, 5753+ .print_stats = ieee80211_ccmp_print_stats_rtl7, 5754 .extra_prefix_len = CCMP_HDR_LEN, 5755 .extra_postfix_len = CCMP_MIC_LEN, 5756 .owner = THIS_MODULE, 5757 }; 5758 5759 5760-static int __init ieee80211_crypto_ccmp_init(void) 5761+static int __init ieee80211_crypto_ccmp_init_rtl7(void) 5762 { 5763- return ieee80211_register_crypto_ops(&ieee80211_crypt_ccmp); 5764+ return ieee80211_register_crypto_ops_rtl7(&ieee80211_crypt_ccmp_rtl7); 5765 } 5766 5767 5768-static void __exit ieee80211_crypto_ccmp_exit(void) 5769+static void __exit ieee80211_crypto_ccmp_exit_rtl7(void) 5770 { 5771- ieee80211_unregister_crypto_ops(&ieee80211_crypt_ccmp); 5772+ ieee80211_unregister_crypto_ops_rtl7(&ieee80211_crypt_ccmp_rtl7); 5773 } 5774 5775 5776-module_init(ieee80211_crypto_ccmp_init); 5777-module_exit(ieee80211_crypto_ccmp_exit); 5778+module_init(ieee80211_crypto_ccmp_init_rtl7); 5779+module_exit(ieee80211_crypto_ccmp_exit_rtl7); 5780diff -Naur rtl8187_orig/ieee80211/ieee80211_crypt.h rtl8187_rawtx/ieee80211/ieee80211_crypt.h 5781--- rtl8187_orig/ieee80211/ieee80211_crypt.h 2007-03-13 23:45:09.000000000 +0100 5782+++ rtl8187_rawtx/ieee80211/ieee80211_crypt.h 2007-06-08 23:30:44.000000000 +0200 5783@@ -75,12 +75,12 @@ 5784 atomic_t refcnt; 5785 }; 5786 5787-int ieee80211_register_crypto_ops(struct ieee80211_crypto_ops *ops); 5788-int ieee80211_unregister_crypto_ops(struct ieee80211_crypto_ops *ops); 5789-struct ieee80211_crypto_ops * ieee80211_get_crypto_ops(const char *name); 5790-void ieee80211_crypt_deinit_entries(struct ieee80211_device *, int); 5791-void ieee80211_crypt_deinit_handler(unsigned long); 5792-void ieee80211_crypt_delayed_deinit(struct ieee80211_device *ieee, 5793+int ieee80211_register_crypto_ops_rtl7(struct ieee80211_crypto_ops *ops); 5794+int ieee80211_unregister_crypto_ops_rtl7(struct ieee80211_crypto_ops *ops); 5795+struct ieee80211_crypto_ops * ieee80211_get_crypto_ops_rtl7(const char *name); 5796+void ieee80211_crypt_deinit_entries_rtl7(struct ieee80211_device *, int); 5797+void ieee80211_crypt_deinit_handler_rtl7(unsigned long); 5798+void ieee80211_crypt_delayed_deinit_rtl7(struct ieee80211_device *ieee, 5799 struct ieee80211_crypt_data **crypt); 5800 5801 #endif 5802diff -Naur rtl8187_orig/ieee80211/ieee80211_crypt_tkip.c rtl8187_rawtx/ieee80211/ieee80211_crypt_tkip.c 5803--- rtl8187_orig/ieee80211/ieee80211_crypt_tkip.c 2007-03-13 23:45:09.000000000 +0100 5804+++ rtl8187_rawtx/ieee80211/ieee80211_crypt_tkip.c 2007-06-08 23:30:47.000000000 +0200 5805@@ -9,7 +9,6 @@ 5806 * more details. 5807 */ 5808 5809-#include <linux/config.h> 5810 #include <linux/version.h> 5811 #include <linux/module.h> 5812 #include <linux/init.h> 5813@@ -21,13 +20,24 @@ 5814 #include <linux/if_arp.h> 5815 #include <asm/string.h> 5816 5817+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) 5818+#include <linux/config.h> 5819+#else 5820+#include <linux/autoconf.h> 5821+#endif 5822+ 5823 #include "ieee80211.h" 5824 5825+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20) 5826+ #include <asm/scatterlist.h> 5827+#else 5828+ #include <linux/scatterlist.h> 5829+#endif 5830 5831 #include <linux/crypto.h> 5832-#include <asm/scatterlist.h> 5833 #include <linux/crc32.h> 5834 5835+ 5836 MODULE_AUTHOR("Jouni Malinen"); 5837 MODULE_DESCRIPTION("Host AP crypt: TKIP"); 5838 MODULE_LICENSE("GPL"); 5839@@ -55,14 +65,21 @@ 5840 5841 int key_idx; 5842 5843+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19) 5844 struct crypto_tfm *tfm_arc4; 5845 struct crypto_tfm *tfm_michael; 5846+#else 5847+ struct crypto_blkcipher *rx_tfm_arc4; 5848+ struct crypto_blkcipher *tx_tfm_arc4; 5849+ struct crypto_hash *rx_tfm_michael; 5850+ struct crypto_hash *tx_tfm_michael; 5851+#endif 5852 5853 /* scratch buffers for virt_to_page() (crypto API) */ 5854 u8 rx_hdr[16], tx_hdr[16]; 5855 }; 5856 5857-static void * ieee80211_tkip_init(int key_idx) 5858+static void * ieee80211_tkip_init_rtl7(int key_idx) 5859 { 5860 struct ieee80211_tkip_data *priv; 5861 5862@@ -72,28 +89,74 @@ 5863 memset(priv, 0, sizeof(*priv)); 5864 priv->key_idx = key_idx; 5865 5866+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19) 5867 priv->tfm_arc4 = crypto_alloc_tfm("arc4", 0); 5868 if (priv->tfm_arc4 == NULL) { 5869 printk(KERN_DEBUG "ieee80211_crypt_tkip: could not allocate " 5870 "crypto API arc4\n"); 5871 goto fail; 5872 } 5873- 5874 priv->tfm_michael = crypto_alloc_tfm("michael_mic", 0); 5875 if (priv->tfm_michael == NULL) { 5876 printk(KERN_DEBUG "ieee80211_crypt_tkip: could not allocate " 5877 "crypto API michael_mic\n"); 5878 goto fail; 5879 } 5880+#else 5881+ priv->tx_tfm_arc4 = crypto_alloc_blkcipher("ecb(arc4)", 0, CRYPTO_ALG_ASYNC); 5882+ if (IS_ERR(priv->tx_tfm_arc4)) { 5883+ printk(KERN_DEBUG "ieee80211_crypt_wep: could not allocate " 5884+ "crypto API arc4\n"); 5885+ priv->tx_tfm_arc4 = NULL; 5886+ goto fail; 5887+ } 5888+ 5889+ priv->tx_tfm_michael = crypto_alloc_hash("michael_mic", 0, 5890+ CRYPTO_ALG_ASYNC); 5891+ if (IS_ERR(priv->tx_tfm_michael)) { 5892+ printk(KERN_DEBUG "ieee80211_crypt_tkip: could not allocate " 5893+ "crypto API michael_mic\n"); 5894+ priv->tx_tfm_michael = NULL; 5895+ goto fail; 5896+ } 5897+ 5898+ priv->rx_tfm_arc4 = crypto_alloc_blkcipher("ecb(arc4)", 0, CRYPTO_ALG_ASYNC); 5899+ if (IS_ERR(priv->rx_tfm_arc4)) { 5900+ printk(KERN_DEBUG "ieee80211_crypt_wep: could not allocate " 5901+ "crypto API arc4\n"); 5902+ priv->rx_tfm_arc4 = NULL; 5903+ goto fail; 5904+ } 5905+ 5906+ priv->rx_tfm_michael = crypto_alloc_hash("michael_mic", 0, 5907+ CRYPTO_ALG_ASYNC); 5908+ if (IS_ERR(priv->rx_tfm_michael)) { 5909+ printk(KERN_DEBUG "ieee80211_crypt_tkip: could not allocate " 5910+ "crypto API michael_mic\n"); 5911+ priv->rx_tfm_michael = NULL; 5912+ goto fail; 5913+ } 5914+#endif 5915 5916 return priv; 5917 5918 fail: 5919 if (priv) { 5920+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19) 5921 if (priv->tfm_michael) 5922 crypto_free_tfm(priv->tfm_michael); 5923 if (priv->tfm_arc4) 5924 crypto_free_tfm(priv->tfm_arc4); 5925+#else 5926+ if (priv->tx_tfm_michael) 5927+ crypto_free_hash(priv->tx_tfm_michael); 5928+ if (priv->tx_tfm_arc4) 5929+ crypto_free_blkcipher(priv->tx_tfm_arc4); 5930+ if (priv->rx_tfm_michael) 5931+ crypto_free_hash(priv->rx_tfm_michael); 5932+ if (priv->rx_tfm_arc4) 5933+ crypto_free_blkcipher(priv->rx_tfm_arc4); 5934+#endif 5935 kfree(priv); 5936 } 5937 5938@@ -101,13 +164,26 @@ 5939 } 5940 5941 5942-static void ieee80211_tkip_deinit(void *priv) 5943+static void ieee80211_tkip_deinit_rtl7(void *priv) 5944 { 5945 struct ieee80211_tkip_data *_priv = priv; 5946+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19) 5947 if (_priv && _priv->tfm_michael) 5948 crypto_free_tfm(_priv->tfm_michael); 5949 if (_priv && _priv->tfm_arc4) 5950 crypto_free_tfm(_priv->tfm_arc4); 5951+#else 5952+ if (_priv) { 5953+ if (_priv->tx_tfm_michael) 5954+ crypto_free_hash(_priv->tx_tfm_michael); 5955+ if (_priv->tx_tfm_arc4) 5956+ crypto_free_blkcipher(_priv->tx_tfm_arc4); 5957+ if (_priv->rx_tfm_michael) 5958+ crypto_free_hash(_priv->rx_tfm_michael); 5959+ if (_priv->rx_tfm_arc4) 5960+ crypto_free_blkcipher(_priv->rx_tfm_arc4); 5961+ } 5962+#endif 5963 kfree(priv); 5964 } 5965 5966@@ -200,7 +276,7 @@ 5967 5968 #define PHASE1_LOOP_COUNT 8 5969 5970-static void tkip_mixing_phase1(u16 *TTAK, const u8 *TK, const u8 *TA, u32 IV32) 5971+static void tkip_mixing_phase1_rtl7(u16 *TTAK, const u8 *TK, const u8 *TA, u32 IV32) 5972 { 5973 int i, j; 5974 5975@@ -222,7 +298,7 @@ 5976 } 5977 5978 5979-static void tkip_mixing_phase2(u8 *WEPSeed, const u8 *TK, const u16 *TTAK, 5980+static void tkip_mixing_phase2_rtl7(u8 *WEPSeed, const u8 *TK, const u16 *TTAK, 5981 u16 IV16) 5982 { 5983 /* Make temporary area overlap WEP seed so that the final copy can be 5984@@ -268,7 +344,7 @@ 5985 #endif 5986 } 5987 5988-static int ieee80211_tkip_encrypt(struct sk_buff *skb, int hdr_len, void *priv) 5989+static int ieee80211_tkip_encrypt_rtl7(struct sk_buff *skb, int hdr_len, void *priv) 5990 { 5991 struct ieee80211_tkip_data *tkey = priv; 5992 int len; 5993@@ -276,6 +352,9 @@ 5994 struct ieee80211_hdr *hdr; 5995 u32 crc; 5996 struct scatterlist sg; 5997+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19)) 5998+ struct blkcipher_desc desc = { .tfm = tkey->tx_tfm_arc4 }; 5999+#endif 6000 6001 if (skb_headroom(skb) < 8 || skb_tailroom(skb) < 4 || 6002 skb->len < hdr_len) 6003@@ -283,11 +362,11 @@ 6004 6005 hdr = (struct ieee80211_hdr *) skb->data; 6006 if (!tkey->tx_phase1_done) { 6007- tkip_mixing_phase1(tkey->tx_ttak, tkey->key, hdr->addr2, 6008+ tkip_mixing_phase1_rtl7(tkey->tx_ttak, tkey->key, hdr->addr2, 6009 tkey->tx_iv32); 6010 tkey->tx_phase1_done = 1; 6011 } 6012- tkip_mixing_phase2(rc4key, tkey->key, tkey->tx_ttak, tkey->tx_iv16); 6013+ tkip_mixing_phase2_rtl7(rc4key, tkey->key, tkey->tx_ttak, tkey->tx_iv16); 6014 6015 len = skb->len - hdr_len; 6016 pos = skb_push(skb, 8); 6017@@ -310,11 +389,19 @@ 6018 icv[2] = crc >> 16; 6019 icv[3] = crc >> 24; 6020 6021+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) 6022 crypto_cipher_setkey(tkey->tfm_arc4, rc4key, 16); 6023+#else 6024+ crypto_blkcipher_setkey(tkey->tx_tfm_arc4, rc4key, 16); 6025+#endif 6026 sg.page = virt_to_page(pos); 6027 sg.offset = offset_in_page(pos); 6028 sg.length = len + 4; 6029+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) 6030 crypto_cipher_encrypt(tkey->tfm_arc4, &sg, &sg, len + 4); 6031+#else 6032+ crypto_blkcipher_encrypt(&desc, &sg, &sg, len + 4); 6033+#endif 6034 6035 tkey->tx_iv16++; 6036 if (tkey->tx_iv16 == 0) { 6037@@ -325,7 +412,7 @@ 6038 return 0; 6039 } 6040 6041-static int ieee80211_tkip_decrypt(struct sk_buff *skb, int hdr_len, void *priv) 6042+static int ieee80211_tkip_decrypt_rtl7(struct sk_buff *skb, int hdr_len, void *priv) 6043 { 6044 struct ieee80211_tkip_data *tkey = priv; 6045 u8 rc4key[16]; 6046@@ -337,6 +424,9 @@ 6047 u32 crc; 6048 struct scatterlist sg; 6049 int plen; 6050+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19)) 6051+ struct blkcipher_desc desc = { .tfm = tkey->rx_tfm_arc4 }; 6052+#endif 6053 6054 if (skb->len < hdr_len + 8 + 4) 6055 return -1; 6056@@ -382,18 +472,26 @@ 6057 } 6058 6059 if (iv32 != tkey->rx_iv32 || !tkey->rx_phase1_done) { 6060- tkip_mixing_phase1(tkey->rx_ttak, tkey->key, hdr->addr2, iv32); 6061+ tkip_mixing_phase1_rtl7(tkey->rx_ttak, tkey->key, hdr->addr2, iv32); 6062 tkey->rx_phase1_done = 1; 6063 } 6064- tkip_mixing_phase2(rc4key, tkey->key, tkey->rx_ttak, iv16); 6065+ tkip_mixing_phase2_rtl7(rc4key, tkey->key, tkey->rx_ttak, iv16); 6066 6067 plen = skb->len - hdr_len - 12; 6068 6069+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) 6070 crypto_cipher_setkey(tkey->tfm_arc4, rc4key, 16); 6071+#else 6072+ crypto_blkcipher_setkey(tkey->rx_tfm_arc4, rc4key, 16); 6073+#endif 6074 sg.page = virt_to_page(pos); 6075 sg.offset = offset_in_page(pos); 6076 sg.length = plen + 4; 6077+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) 6078 crypto_cipher_decrypt(tkey->tfm_arc4, &sg, &sg, plen + 4); 6079+#else 6080+ crypto_blkcipher_decrypt(&desc, &sg, &sg, plen + 4); 6081+#endif 6082 6083 crc = ~crc32_le(~0, pos, plen); 6084 icv[0] = crc; 6085@@ -427,13 +525,22 @@ 6086 return keyidx; 6087 } 6088 6089- 6090-static int michael_mic(struct ieee80211_tkip_data *tkey, u8 *key, u8 *hdr, 6091+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19) 6092+static int michael_mic_rtl7(struct ieee80211_tkip_data *tkey, u8 *key, u8 *hdr, 6093 u8 *data, size_t data_len, u8 *mic) 6094 { 6095 struct scatterlist sg[2]; 6096 6097 if (tkey->tfm_michael == NULL) { 6098+#else 6099+static int michael_mic_rtl7(struct crypto_hash *tfm_michael, u8 *key, u8 *hdr, 6100+ u8 *data, size_t data_len, u8 *mic) 6101+{ 6102+ struct hash_desc desc; 6103+ struct scatterlist sg[2]; 6104+ 6105+ if (tfm_michael == NULL) { 6106+#endif 6107 printk(KERN_WARNING "michael_mic: tfm_michael == NULL\n"); 6108 return -1; 6109 } 6110@@ -445,15 +552,24 @@ 6111 sg[1].offset = offset_in_page(data); 6112 sg[1].length = data_len; 6113 6114+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19) 6115 crypto_digest_init(tkey->tfm_michael); 6116 crypto_digest_setkey(tkey->tfm_michael, key, 8); 6117 crypto_digest_update(tkey->tfm_michael, sg, 2); 6118 crypto_digest_final(tkey->tfm_michael, mic); 6119 6120 return 0; 6121+#else 6122+ if (crypto_hash_setkey(tfm_michael, key, 8)) 6123+ return -1; 6124+ 6125+ desc.tfm = tfm_michael; 6126+ desc.flags = 0; 6127+ return crypto_hash_digest(&desc, sg, data_len + 16, mic); 6128+#endif 6129 } 6130 6131-static void michael_mic_hdr(struct sk_buff *skb, u8 *hdr) 6132+static void michael_mic_hdr_rtl7(struct sk_buff *skb, u8 *hdr) 6133 { 6134 struct ieee80211_hdr *hdr11; 6135 6136@@ -483,7 +599,7 @@ 6137 } 6138 6139 6140-static int ieee80211_michael_mic_add(struct sk_buff *skb, int hdr_len, void *priv) 6141+static int ieee80211_michael_mic_add_rtl7(struct sk_buff *skb, int hdr_len, void *priv) 6142 { 6143 struct ieee80211_tkip_data *tkey = priv; 6144 u8 *pos; 6145@@ -495,18 +611,24 @@ 6146 return -1; 6147 } 6148 6149- michael_mic_hdr(skb, tkey->tx_hdr); 6150+ michael_mic_hdr_rtl7(skb, tkey->tx_hdr); 6151 pos = skb_put(skb, 8); 6152- if (michael_mic(tkey, &tkey->key[16], tkey->tx_hdr, 6153+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19) 6154+ if (michael_mic_rtl7(tkey, &tkey->key[16], tkey->tx_hdr, 6155 skb->data + hdr_len, skb->len - 8 - hdr_len, pos)) 6156 return -1; 6157+#else 6158+ if (michael_mic_rtl7(tkey->tx_tfm_michael, &tkey->key[16], tkey->tx_hdr, 6159+ skb->data + hdr_len, skb->len - 8 - hdr_len, pos)) 6160+ return -1; 6161+#endif 6162 6163 return 0; 6164 } 6165 6166 6167 #if WIRELESS_EXT >= 18 6168-static void ieee80211_michael_mic_failure(struct net_device *dev, 6169+static void ieee80211_michael_mic_failure_rtl7(struct net_device *dev, 6170 struct ieee80211_hdr *hdr, 6171 int keyidx) 6172 { 6173@@ -527,7 +649,7 @@ 6174 wireless_send_event(dev, IWEVMICHAELMICFAILURE, &wrqu, (char *) &ev); 6175 } 6176 #elif WIRELESS_EXT >= 15 6177-static void ieee80211_michael_mic_failure(struct net_device *dev, 6178+static void ieee80211_michael_mic_failure_rtl7(struct net_device *dev, 6179 struct ieee80211_hdr *hdr, 6180 int keyidx) 6181 { 6182@@ -543,7 +665,7 @@ 6183 wireless_send_event(dev, IWEVCUSTOM, &wrqu, buf); 6184 } 6185 #else /* WIRELESS_EXT >= 15 */ 6186-static inline void ieee80211_michael_mic_failure(struct net_device *dev, 6187+static inline void ieee80211_michael_mic_failure_rtl7(struct net_device *dev, 6188 struct ieee80211_hdr *hdr, 6189 int keyidx) 6190 { 6191@@ -551,7 +673,7 @@ 6192 #endif /* WIRELESS_EXT >= 15 */ 6193 6194 6195-static int ieee80211_michael_mic_verify(struct sk_buff *skb, int keyidx, 6196+static int ieee80211_michael_mic_verify_rtl7(struct sk_buff *skb, int keyidx, 6197 int hdr_len, void *priv) 6198 { 6199 struct ieee80211_tkip_data *tkey = priv; 6200@@ -560,10 +682,16 @@ 6201 if (!tkey->key_set) 6202 return -1; 6203 6204- michael_mic_hdr(skb, tkey->rx_hdr); 6205- if (michael_mic(tkey, &tkey->key[24], tkey->rx_hdr, 6206+ michael_mic_hdr_rtl7(skb, tkey->rx_hdr); 6207+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19) 6208+ if (michael_mic_rtl7(tkey, &tkey->key[24], tkey->rx_hdr, 6209 skb->data + hdr_len, skb->len - 8 - hdr_len, mic)) 6210 return -1; 6211+#else 6212+ if (michael_mic_rtl7(tkey->rx_tfm_michael, &tkey->key[24], tkey->rx_hdr, 6213+ skb->data + hdr_len, skb->len - 8 - hdr_len, mic)) 6214+ return -1; 6215+#endif 6216 if (memcmp(mic, skb->data + skb->len - 8, 8) != 0) { 6217 struct ieee80211_hdr *hdr; 6218 hdr = (struct ieee80211_hdr *) skb->data; 6219@@ -572,7 +700,7 @@ 6220 skb->dev ? skb->dev->name : "N/A", MAC_ARG(hdr->addr2), 6221 keyidx); 6222 if (skb->dev) 6223- ieee80211_michael_mic_failure(skb->dev, hdr, keyidx); 6224+ ieee80211_michael_mic_failure_rtl7(skb->dev, hdr, keyidx); 6225 tkey->dot11RSNAStatsTKIPLocalMICFailures++; 6226 return -1; 6227 } 6228@@ -588,18 +716,33 @@ 6229 } 6230 6231 6232-static int ieee80211_tkip_set_key(void *key, int len, u8 *seq, void *priv) 6233+static int ieee80211_tkip_set_key_rtl7(void *key, int len, u8 *seq, void *priv) 6234 { 6235 struct ieee80211_tkip_data *tkey = priv; 6236 int keyidx; 6237+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) 6238 struct crypto_tfm *tfm = tkey->tfm_michael; 6239 struct crypto_tfm *tfm2 = tkey->tfm_arc4; 6240+#else 6241+ struct crypto_hash *tfm = tkey->tx_tfm_michael; 6242+ struct crypto_blkcipher *tfm2 = tkey->tx_tfm_arc4; 6243+ struct crypto_hash *tfm3 = tkey->rx_tfm_michael; 6244+ struct crypto_blkcipher *tfm4 = tkey->rx_tfm_arc4; 6245+#endif 6246 6247 keyidx = tkey->key_idx; 6248 memset(tkey, 0, sizeof(*tkey)); 6249 tkey->key_idx = keyidx; 6250+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) 6251 tkey->tfm_michael = tfm; 6252 tkey->tfm_arc4 = tfm2; 6253+#else 6254+ tkey->tx_tfm_michael = tfm; 6255+ tkey->tx_tfm_arc4 = tfm2; 6256+ tkey->rx_tfm_michael = tfm3; 6257+ tkey->rx_tfm_arc4 = tfm4; 6258+#endif 6259+ 6260 if (len == TKIP_KEY_LEN) { 6261 memcpy(tkey->key, key, TKIP_KEY_LEN); 6262 tkey->key_set = 1; 6263@@ -618,7 +761,7 @@ 6264 } 6265 6266 6267-static int ieee80211_tkip_get_key(void *key, int len, u8 *seq, void *priv) 6268+static int ieee80211_tkip_get_key_rtl7(void *key, int len, u8 *seq, void *priv) 6269 { 6270 struct ieee80211_tkip_data *tkey = priv; 6271 6272@@ -648,7 +791,7 @@ 6273 } 6274 6275 6276-static char * ieee80211_tkip_print_stats(char *p, void *priv) 6277+static char * ieee80211_tkip_print_stats_rtl7(char *p, void *priv) 6278 { 6279 struct ieee80211_tkip_data *tkip = priv; 6280 p += sprintf(p, "key[%d] alg=TKIP key_set=%d " 6281@@ -675,34 +818,34 @@ 6282 } 6283 6284 6285-static struct ieee80211_crypto_ops ieee80211_crypt_tkip = { 6286+static struct ieee80211_crypto_ops ieee80211_crypt_tkip_rtl7 = { 6287 .name = "TKIP", 6288- .init = ieee80211_tkip_init, 6289- .deinit = ieee80211_tkip_deinit, 6290- .encrypt_mpdu = ieee80211_tkip_encrypt, 6291- .decrypt_mpdu = ieee80211_tkip_decrypt, 6292- .encrypt_msdu = ieee80211_michael_mic_add, 6293- .decrypt_msdu = ieee80211_michael_mic_verify, 6294- .set_key = ieee80211_tkip_set_key, 6295- .get_key = ieee80211_tkip_get_key, 6296- .print_stats = ieee80211_tkip_print_stats, 6297+ .init = ieee80211_tkip_init_rtl7, 6298+ .deinit = ieee80211_tkip_deinit_rtl7, 6299+ .encrypt_mpdu = ieee80211_tkip_encrypt_rtl7, 6300+ .decrypt_mpdu = ieee80211_tkip_decrypt_rtl7, 6301+ .encrypt_msdu = ieee80211_michael_mic_add_rtl7, 6302+ .decrypt_msdu = ieee80211_michael_mic_verify_rtl7, 6303+ .set_key = ieee80211_tkip_set_key_rtl7, 6304+ .get_key = ieee80211_tkip_get_key_rtl7, 6305+ .print_stats = ieee80211_tkip_print_stats_rtl7, 6306 .extra_prefix_len = 4 + 4, /* IV + ExtIV */ 6307 .extra_postfix_len = 8 + 4, /* MIC + ICV */ 6308 .owner = THIS_MODULE, 6309 }; 6310 6311 6312-static int __init ieee80211_crypto_tkip_init(void) 6313+static int __init ieee80211_crypto_tkip_init_rtl7(void) 6314 { 6315- return ieee80211_register_crypto_ops(&ieee80211_crypt_tkip); 6316+ return ieee80211_register_crypto_ops_rtl7(&ieee80211_crypt_tkip_rtl7); 6317 } 6318 6319 6320-static void __exit ieee80211_crypto_tkip_exit(void) 6321+static void __exit ieee80211_crypto_tkip_exit_rtl7(void) 6322 { 6323- ieee80211_unregister_crypto_ops(&ieee80211_crypt_tkip); 6324+ ieee80211_unregister_crypto_ops_rtl7(&ieee80211_crypt_tkip_rtl7); 6325 } 6326 6327 6328-module_init(ieee80211_crypto_tkip_init); 6329-module_exit(ieee80211_crypto_tkip_exit); 6330+module_init(ieee80211_crypto_tkip_init_rtl7); 6331+module_exit(ieee80211_crypto_tkip_exit_rtl7); 6332diff -Naur rtl8187_orig/ieee80211/ieee80211_crypt_wep.c rtl8187_rawtx/ieee80211/ieee80211_crypt_wep.c 6333--- rtl8187_orig/ieee80211/ieee80211_crypt_wep.c 2007-03-13 23:45:09.000000000 +0100 6334+++ rtl8187_rawtx/ieee80211/ieee80211_crypt_wep.c 2007-06-08 23:30:47.000000000 +0200 6335@@ -9,7 +9,6 @@ 6336 * more details. 6337 */ 6338 6339-#include <linux/config.h> 6340 #include <linux/version.h> 6341 #include <linux/module.h> 6342 #include <linux/init.h> 6343@@ -18,13 +17,24 @@ 6344 #include <linux/skbuff.h> 6345 #include <asm/string.h> 6346 6347+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) 6348+#include <linux/config.h> 6349+#else 6350+#include <linux/autoconf.h> 6351+#endif 6352+ 6353 #include "ieee80211.h" 6354 6355 6356 #include <linux/crypto.h> 6357-#include <asm/scatterlist.h> 6358 #include <linux/crc32.h> 6359 6360+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20) 6361+ #include <asm/scatterlist.h> 6362+#else 6363+ #include <linux/scatterlist.h> 6364+#endif 6365+ 6366 MODULE_AUTHOR("Jouni Malinen"); 6367 MODULE_DESCRIPTION("Host AP crypt: WEP"); 6368 MODULE_LICENSE("GPL"); 6369@@ -36,11 +46,16 @@ 6370 u8 key[WEP_KEY_LEN + 1]; 6371 u8 key_len; 6372 u8 key_idx; 6373+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19) 6374 struct crypto_tfm *tfm; 6375+#else 6376+ struct crypto_blkcipher *rx_tfm; 6377+ struct crypto_blkcipher *tx_tfm; 6378+#endif 6379 }; 6380 6381 6382-static void * prism2_wep_init(int keyidx) 6383+static void * prism2_wep_init_rtl7(int keyidx) 6384 { 6385 struct prism2_wep_data *priv; 6386 6387@@ -50,13 +65,30 @@ 6388 memset(priv, 0, sizeof(*priv)); 6389 priv->key_idx = keyidx; 6390 6391+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19) 6392 priv->tfm = crypto_alloc_tfm("arc4", 0); 6393 if (priv->tfm == NULL) { 6394 printk(KERN_DEBUG "ieee80211_crypt_wep: could not allocate " 6395 "crypto API arc4\n"); 6396 goto fail; 6397 } 6398+#else 6399+ priv->tx_tfm = crypto_alloc_blkcipher("ecb(arc4)", 0, CRYPTO_ALG_ASYNC); 6400+ if (IS_ERR(priv->tx_tfm)) { 6401+ printk(KERN_DEBUG "ieee80211_crypt_wep: could not allocate " 6402+ "crypto API arc4\n"); 6403+ priv->tx_tfm = NULL; 6404+ goto fail; 6405+ } 6406 6407+ priv->rx_tfm = crypto_alloc_blkcipher("ecb(arc4)", 0, CRYPTO_ALG_ASYNC); 6408+ if (IS_ERR(priv->rx_tfm)) { 6409+ printk(KERN_DEBUG "ieee80211_crypt_wep: could not allocate " 6410+ "crypto API arc4\n"); 6411+ priv->rx_tfm = NULL; 6412+ goto fail; 6413+ } 6414+#endif 6415 /* start WEP IV from a random value */ 6416 get_random_bytes(&priv->iv, 4); 6417 6418@@ -64,19 +96,35 @@ 6419 6420 fail: 6421 if (priv) { 6422+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19) 6423 if (priv->tfm) 6424 crypto_free_tfm(priv->tfm); 6425+#else 6426+ if (priv->tx_tfm) 6427+ crypto_free_blkcipher(priv->tx_tfm); 6428+ if (priv->rx_tfm) 6429+ crypto_free_blkcipher(priv->rx_tfm); 6430+#endif 6431 kfree(priv); 6432 } 6433 return NULL; 6434 } 6435 6436 6437-static void prism2_wep_deinit(void *priv) 6438+static void prism2_wep_deinit_rtl7(void *priv) 6439 { 6440 struct prism2_wep_data *_priv = priv; 6441+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19) 6442 if (_priv && _priv->tfm) 6443 crypto_free_tfm(_priv->tfm); 6444+#else 6445+ if (_priv) { 6446+ if (_priv->tx_tfm) 6447+ crypto_free_blkcipher(_priv->tx_tfm); 6448+ if (_priv->rx_tfm) 6449+ crypto_free_blkcipher(_priv->rx_tfm); 6450+ } 6451+#endif 6452 kfree(priv); 6453 } 6454 6455@@ -87,13 +135,16 @@ 6456 * 6457 * WEP frame payload: IV + TX key idx, RC4(data), ICV = RC4(CRC32(data)) 6458 */ 6459-static int prism2_wep_encrypt(struct sk_buff *skb, int hdr_len, void *priv) 6460+static int prism2_wep_encrypt_rtl7(struct sk_buff *skb, int hdr_len, void *priv) 6461 { 6462 struct prism2_wep_data *wep = priv; 6463 u32 crc, klen, len; 6464 u8 key[WEP_KEY_LEN + 3]; 6465 u8 *pos, *icv; 6466 struct scatterlist sg; 6467+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19)) 6468+ struct blkcipher_desc desc = { .tfm = wep->tx_tfm }; 6469+#endif 6470 6471 if (skb_headroom(skb) < 4 || skb_tailroom(skb) < 4 || 6472 skb->len < hdr_len) 6473@@ -134,13 +185,21 @@ 6474 icv[2] = crc >> 16; 6475 icv[3] = crc >> 24; 6476 6477+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) 6478 crypto_cipher_setkey(wep->tfm, key, klen); 6479+#else 6480+ crypto_blkcipher_setkey(wep->tx_tfm, key, klen); 6481+#endif 6482 sg.page = virt_to_page(pos); 6483 sg.offset = offset_in_page(pos); 6484 sg.length = len + 4; 6485- crypto_cipher_encrypt(wep->tfm, &sg, &sg, len + 4); 6486 6487+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) 6488+ crypto_cipher_encrypt(wep->tfm, &sg, &sg, len + 4); 6489 return 0; 6490+#else 6491+ return crypto_blkcipher_encrypt(&desc, &sg, &sg, len + 4); 6492+#endif 6493 } 6494 6495 6496@@ -151,13 +210,16 @@ 6497 * Returns 0 if frame was decrypted successfully and ICV was correct and -1 on 6498 * failure. If frame is OK, IV and ICV will be removed. 6499 */ 6500-static int prism2_wep_decrypt(struct sk_buff *skb, int hdr_len, void *priv) 6501+static int prism2_wep_decrypt_rtl7(struct sk_buff *skb, int hdr_len, void *priv) 6502 { 6503 struct prism2_wep_data *wep = priv; 6504 u32 crc, klen, plen; 6505 u8 key[WEP_KEY_LEN + 3]; 6506 u8 keyidx, *pos, icv[4]; 6507 struct scatterlist sg; 6508+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19)) 6509+ struct blkcipher_desc desc = { .tfm = wep->rx_tfm }; 6510+#endif 6511 6512 if (skb->len < hdr_len + 8) 6513 return -1; 6514@@ -178,11 +240,22 @@ 6515 /* Apply RC4 to data and compute CRC32 over decrypted data */ 6516 plen = skb->len - hdr_len - 8; 6517 6518+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) 6519 crypto_cipher_setkey(wep->tfm, key, klen); 6520+#else 6521+ crypto_blkcipher_setkey(wep->rx_tfm, key, klen); 6522+#endif 6523+ 6524 sg.page = virt_to_page(pos); 6525 sg.offset = offset_in_page(pos); 6526 sg.length = plen + 4; 6527+ 6528+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) 6529 crypto_cipher_decrypt(wep->tfm, &sg, &sg, plen + 4); 6530+#else 6531+ if(crypto_blkcipher_decrypt(&desc, &sg, &sg, plen + 4)) 6532+ return -7; 6533+#endif 6534 6535 crc = ~crc32_le(~0, pos, plen); 6536 icv[0] = crc; 6537@@ -203,7 +276,7 @@ 6538 } 6539 6540 6541-static int prism2_wep_set_key(void *key, int len, u8 *seq, void *priv) 6542+static int prism2_wep_set_key_rtl7(void *key, int len, u8 *seq, void *priv) 6543 { 6544 struct prism2_wep_data *wep = priv; 6545 6546@@ -217,7 +290,7 @@ 6547 } 6548 6549 6550-static int prism2_wep_get_key(void *key, int len, u8 *seq, void *priv) 6551+static int prism2_wep_get_key_rtl7(void *key, int len, u8 *seq, void *priv) 6552 { 6553 struct prism2_wep_data *wep = priv; 6554 6555@@ -230,7 +303,7 @@ 6556 } 6557 6558 6559-static char * prism2_wep_print_stats(char *p, void *priv) 6560+static char * prism2_wep_print_stats_rtl7(char *p, void *priv) 6561 { 6562 struct prism2_wep_data *wep = priv; 6563 p += sprintf(p, "key[%d] alg=WEP len=%d\n", 6564@@ -239,34 +312,34 @@ 6565 } 6566 6567 6568-static struct ieee80211_crypto_ops ieee80211_crypt_wep = { 6569+static struct ieee80211_crypto_ops ieee80211_crypt_wep_rtl7 = { 6570 .name = "WEP", 6571- .init = prism2_wep_init, 6572- .deinit = prism2_wep_deinit, 6573- .encrypt_mpdu = prism2_wep_encrypt, 6574- .decrypt_mpdu = prism2_wep_decrypt, 6575+ .init = prism2_wep_init_rtl7, 6576+ .deinit = prism2_wep_deinit_rtl7, 6577+ .encrypt_mpdu = prism2_wep_encrypt_rtl7, 6578+ .decrypt_mpdu = prism2_wep_decrypt_rtl7, 6579 .encrypt_msdu = NULL, 6580 .decrypt_msdu = NULL, 6581- .set_key = prism2_wep_set_key, 6582- .get_key = prism2_wep_get_key, 6583- .print_stats = prism2_wep_print_stats, 6584+ .set_key = prism2_wep_set_key_rtl7, 6585+ .get_key = prism2_wep_get_key_rtl7, 6586+ .print_stats = prism2_wep_print_stats_rtl7, 6587 .extra_prefix_len = 4, /* IV */ 6588 .extra_postfix_len = 4, /* ICV */ 6589 .owner = THIS_MODULE, 6590 }; 6591 6592 6593-static int __init ieee80211_crypto_wep_init(void) 6594+static int __init ieee80211_crypto_wep_init_rtl7(void) 6595 { 6596- return ieee80211_register_crypto_ops(&ieee80211_crypt_wep); 6597+ return ieee80211_register_crypto_ops_rtl7(&ieee80211_crypt_wep_rtl7); 6598 } 6599 6600 6601-static void __exit ieee80211_crypto_wep_exit(void) 6602+static void __exit ieee80211_crypto_wep_exit_rtl7(void) 6603 { 6604- ieee80211_unregister_crypto_ops(&ieee80211_crypt_wep); 6605+ ieee80211_unregister_crypto_ops_rtl7(&ieee80211_crypt_wep_rtl7); 6606 } 6607 6608 6609-module_init(ieee80211_crypto_wep_init); 6610-module_exit(ieee80211_crypto_wep_exit); 6611+module_init(ieee80211_crypto_wep_init_rtl7); 6612+module_exit(ieee80211_crypto_wep_exit_rtl7); 6613diff -Naur rtl8187_orig/ieee80211/ieee80211.h rtl8187_rawtx/ieee80211/ieee80211.h 6614--- rtl8187_orig/ieee80211/ieee80211.h 2007-03-13 23:45:09.000000000 +0100 6615+++ rtl8187_rawtx/ieee80211/ieee80211.h 2007-06-08 23:30:44.000000000 +0200 6616@@ -156,6 +156,22 @@ 6617 struct list_head list; 6618 }; 6619 6620+#define LWNG_CAP_DID_BASE (4 | (1 << 6)) /* section 4, group 1 */ 6621+/* ARPHRD_IEEE80211_PRISM uses a bloated version of Prism2 RX frame header 6622+ * (from linux-wlan-ng) */ 6623+struct linux_wlan_ng_val { 6624+ u32 did; 6625+ u16 status, len; 6626+ u32 data; 6627+} __attribute__ ((packed)); 6628+ 6629+struct linux_wlan_ng_prism_hdr { 6630+ u32 msgcode, msglen; 6631+ char devname[16]; 6632+ struct linux_wlan_ng_val hosttime, mactime, channel, rssi, sq, signal, 6633+ noise, rate, istx, frmlen; 6634+} __attribute__ ((packed)); 6635+ 6636 struct ieee80211_hdr { 6637 u16 frame_ctl; 6638 u16 duration_id; 6639@@ -840,14 +856,14 @@ 6640 6641 6642 #if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,11)) 6643-extern inline int is_multicast_ether_addr(const u8 *addr) 6644+extern inline int is_multicast_ether_addr_rtl7(const u8 *addr) 6645 { 6646 return ((addr[0] != 0xff) && (0x01 & addr[0])); 6647 } 6648 #endif 6649 6650 #if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,13)) 6651-extern inline int is_broadcast_ether_addr(const u8 *addr) 6652+extern inline int is_broadcast_ether_addr_rtl7(const u8 *addr) 6653 { 6654 return ((addr[0] == 0xff) && (addr[1] == 0xff) && (addr[2] == 0xff) && \ 6655 (addr[3] == 0xff) && (addr[4] == 0xff) && (addr[5] == 0xff)); 6656@@ -1015,10 +1031,16 @@ 6657 struct timer_list beacon_timer; 6658 6659 struct work_struct associate_complete_wq; 6660+ 6661+# if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)) 6662+ struct delayed_work associate_retry_wq; 6663+ struct delayed_work softmac_scan_wq; 6664+#else 6665 struct work_struct associate_retry_wq; 6666+ struct work_struct softmac_scan_wq; 6667+#endif 6668 struct work_struct start_ibss_wq; 6669 struct work_struct associate_procedure_wq; 6670- struct work_struct softmac_scan_wq; 6671 struct work_struct wx_sync_scan_wq; 6672 6673 struct workqueue_struct *wq; 6674@@ -1154,12 +1176,12 @@ 6675 6676 6677 6678-extern inline void *ieee80211_priv(struct net_device *dev) 6679+extern inline void *ieee80211_priv_rtl7(struct net_device *dev) 6680 { 6681 return ((struct ieee80211_device *)netdev_priv(dev))->priv; 6682 } 6683 6684-extern inline int ieee80211_is_empty_essid(const char *essid, int essid_len) 6685+extern inline int ieee80211_is_empty_essid_rtl7(const char *essid, int essid_len) 6686 { 6687 /* Single white space is for Linksys APs */ 6688 if (essid_len == 1 && essid[0] == ' ') 6689@@ -1175,7 +1197,7 @@ 6690 return 1; 6691 } 6692 6693-extern inline int ieee80211_is_valid_mode(struct ieee80211_device *ieee, int mode) 6694+extern inline int ieee80211_is_valid_mode_rtl7(struct ieee80211_device *ieee, int mode) 6695 { 6696 /* 6697 * It is possible for both access points and our device to support 6698@@ -1201,7 +1223,7 @@ 6699 return 0; 6700 } 6701 6702-extern inline int ieee80211_get_hdrlen(u16 fc) 6703+extern inline int ieee80211_get_hdrlen_rtl7(u16 fc) 6704 { 6705 int hdrlen = 24; 6706 6707@@ -1229,140 +1251,144 @@ 6708 6709 6710 /* ieee80211.c */ 6711-extern void free_ieee80211(struct net_device *dev); 6712-extern struct net_device *alloc_ieee80211(int sizeof_priv); 6713+extern void free_ieee80211_rtl7(struct net_device *dev); 6714+extern struct net_device *alloc_ieee80211_rtl7(int sizeof_priv); 6715 6716-extern int ieee80211_set_encryption(struct ieee80211_device *ieee); 6717+extern int ieee80211_set_encryption_rtl7(struct ieee80211_device *ieee); 6718 6719 /* ieee80211_tx.c */ 6720 6721-extern int ieee80211_encrypt_fragment( 6722+extern int ieee80211_encrypt_fragment_rtl7( 6723 struct ieee80211_device *ieee, 6724 struct sk_buff *frag, 6725 int hdr_len); 6726 6727-extern int ieee80211_xmit(struct sk_buff *skb, 6728+extern int ieee80211_xmit_rtl7(struct sk_buff *skb, 6729 struct net_device *dev); 6730-extern void ieee80211_txb_free(struct ieee80211_txb *); 6731+extern void ieee80211_txb_free_rtl7(struct ieee80211_txb *); 6732 6733 6734 /* ieee80211_rx.c */ 6735-extern int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb, 6736+extern int ieee80211_rx_rtl7(struct ieee80211_device *ieee, struct sk_buff *skb, 6737 struct ieee80211_rx_stats *rx_stats); 6738-extern void ieee80211_rx_mgt(struct ieee80211_device *ieee, 6739+extern void ieee80211_rx_mgt_rtl7(struct ieee80211_device *ieee, 6740 struct ieee80211_hdr *header, 6741 struct ieee80211_rx_stats *stats); 6742 6743 /* ieee80211_wx.c */ 6744-extern int ieee80211_wx_get_scan(struct ieee80211_device *ieee, 6745+extern int ieee80211_wx_get_scan_rtl7(struct ieee80211_device *ieee, 6746 struct iw_request_info *info, 6747 union iwreq_data *wrqu, char *key); 6748-extern int ieee80211_wx_set_encode(struct ieee80211_device *ieee, 6749+extern int ieee80211_wx_set_encode_rtl7(struct ieee80211_device *ieee, 6750 struct iw_request_info *info, 6751 union iwreq_data *wrqu, char *key); 6752-extern int ieee80211_wx_get_encode(struct ieee80211_device *ieee, 6753+extern int ieee80211_wx_get_encode_rtl7(struct ieee80211_device *ieee, 6754 struct iw_request_info *info, 6755 union iwreq_data *wrqu, char *key); 6756 /* ieee80211_softmac.c */ 6757-extern short ieee80211_is_54g(struct ieee80211_network net); 6758-extern short ieee80211_is_shortslot(struct ieee80211_network net); 6759-extern int ieee80211_rx_frame_softmac(struct ieee80211_device *ieee, struct sk_buff *skb, 6760+extern short ieee80211_is_54g_rtl7(struct ieee80211_network net); 6761+extern short ieee80211_is_shortslot_rtl7(struct ieee80211_network net); 6762+extern int ieee80211_rx_frame_softmac_rtl7(struct ieee80211_device *ieee, struct sk_buff *skb, 6763 struct ieee80211_rx_stats *rx_stats, u16 type, 6764 u16 stype); 6765-extern void ieee80211_softmac_new_net(struct ieee80211_device *ieee, struct ieee80211_network *net); 6766+extern void ieee80211_softmac_new_net_rtl7(struct ieee80211_device *ieee, struct ieee80211_network *net); 6767 6768-extern void ieee80211_softmac_xmit(struct ieee80211_txb *txb, struct ieee80211_device *ieee); 6769-extern void ieee80211_softmac_check_all_nets(struct ieee80211_device *ieee); 6770-extern void ieee80211_start_bss(struct ieee80211_device *ieee); 6771-extern void ieee80211_start_master_bss(struct ieee80211_device *ieee); 6772-extern void ieee80211_start_ibss(struct ieee80211_device *ieee); 6773-extern void ieee80211_softmac_init(struct ieee80211_device *ieee); 6774-extern void ieee80211_softmac_free(struct ieee80211_device *ieee); 6775-extern void ieee80211_associate_abort(struct ieee80211_device *ieee); 6776-extern void ieee80211_disassociate(struct ieee80211_device *ieee); 6777-extern void ieee80211_stop_scan(struct ieee80211_device *ieee); 6778-extern void ieee80211_start_scan_syncro(struct ieee80211_device *ieee); 6779-extern void ieee80211_check_all_nets(struct ieee80211_device *ieee); 6780-extern void ieee80211_start_protocol(struct ieee80211_device *ieee); 6781-extern void ieee80211_stop_protocol(struct ieee80211_device *ieee); 6782-extern void ieee80211_softmac_start_protocol(struct ieee80211_device *ieee); 6783-extern void ieee80211_softmac_stop_protocol(struct ieee80211_device *ieee); 6784-extern void ieee80211_reset_queue(struct ieee80211_device *ieee); 6785-extern void ieee80211_wake_queue(struct ieee80211_device *ieee); 6786-extern void ieee80211_stop_queue(struct ieee80211_device *ieee); 6787-extern struct sk_buff *ieee80211_get_beacon(struct ieee80211_device *ieee); 6788-extern void ieee80211_start_send_beacons(struct ieee80211_device *ieee); 6789-extern void ieee80211_stop_send_beacons(struct ieee80211_device *ieee); 6790-extern int ieee80211_wpa_supplicant_ioctl(struct ieee80211_device *ieee, struct iw_point *p); 6791-extern void notify_wx_assoc_event(struct ieee80211_device *ieee); 6792-extern void ieee80211_ps_tx_ack(struct ieee80211_device *ieee, short success); 6793+extern void ieee80211_softmac_xmit_rtl7(struct ieee80211_txb *txb, struct ieee80211_device *ieee); 6794+extern void ieee80211_softmac_check_all_nets_rtl7(struct ieee80211_device *ieee); 6795+extern void ieee80211_start_bss_rtl7(struct ieee80211_device *ieee); 6796+extern void ieee80211_start_master_bss_rtl7(struct ieee80211_device *ieee); 6797+extern void ieee80211_start_ibss_rtl7(struct ieee80211_device *ieee); 6798+extern void ieee80211_softmac_init_rtl7(struct ieee80211_device *ieee); 6799+extern void ieee80211_softmac_free_rtl7(struct ieee80211_device *ieee); 6800+extern void ieee80211_associate_abort_rtl7(struct ieee80211_device *ieee); 6801+extern void ieee80211_disassociate_rtl7(struct ieee80211_device *ieee); 6802+extern void ieee80211_stop_scan_rtl7(struct ieee80211_device *ieee); 6803+extern void ieee80211_start_scan_syncro_rtl7(struct ieee80211_device *ieee); 6804+extern void ieee80211_check_all_nets_rtl7(struct ieee80211_device *ieee); 6805+extern void ieee80211_start_protocol_rtl7(struct ieee80211_device *ieee); 6806+extern void ieee80211_stop_protocol_rtl7(struct ieee80211_device *ieee); 6807+extern void ieee80211_softmac_start_protocol_rtl7(struct ieee80211_device *ieee); 6808+extern void ieee80211_softmac_stop_protocol_rtl7(struct ieee80211_device *ieee); 6809+extern void ieee80211_reset_queue_rtl7(struct ieee80211_device *ieee); 6810+extern void ieee80211_wake_queue_rtl7(struct ieee80211_device *ieee); 6811+extern void ieee80211_stop_queue_rtl7(struct ieee80211_device *ieee); 6812+extern struct sk_buff *ieee80211_get_beacon_rtl7(struct ieee80211_device *ieee); 6813+extern void ieee80211_start_send_beacons_rtl7(struct ieee80211_device *ieee); 6814+extern void ieee80211_stop_send_beacons_rtl7(struct ieee80211_device *ieee); 6815+extern int ieee80211_wpa_supplicant_ioctl_rtl7(struct ieee80211_device *ieee, struct iw_point *p); 6816+extern void notify_wx_assoc_event_rtl7(struct ieee80211_device *ieee); 6817+extern void ieee80211_ps_tx_ack_rtl7(struct ieee80211_device *ieee, short success); 6818 6819 /* ieee80211_softmac_wx.c */ 6820 6821-extern int ieee80211_wx_get_wap(struct ieee80211_device *ieee, 6822+extern int ieee80211_wx_get_wap_rtl7(struct ieee80211_device *ieee, 6823 struct iw_request_info *info, 6824 union iwreq_data *wrqu, char *ext); 6825 6826-extern int ieee80211_wx_set_wap(struct ieee80211_device *ieee, 6827+extern int ieee80211_wx_set_wap_rtl7(struct ieee80211_device *ieee, 6828 struct iw_request_info *info, 6829 union iwreq_data *awrq, 6830 char *extra); 6831 6832-extern int ieee80211_wx_get_essid(struct ieee80211_device *ieee, struct iw_request_info *a,union iwreq_data *wrqu,char *b); 6833+extern int ieee80211_wx_get_essid_rtl7(struct ieee80211_device *ieee, struct iw_request_info *a,union iwreq_data *wrqu,char *b); 6834 6835-extern int ieee80211_wx_set_rate(struct ieee80211_device *ieee, 6836+extern int ieee80211_wx_set_rate_rtl7(struct ieee80211_device *ieee, 6837 struct iw_request_info *info, 6838 union iwreq_data *wrqu, char *extra); 6839 6840-extern int ieee80211_wx_get_rate(struct ieee80211_device *ieee, 6841+extern int ieee80211_wx_get_rate_rtl7(struct ieee80211_device *ieee, 6842 struct iw_request_info *info, 6843 union iwreq_data *wrqu, char *extra); 6844 6845-extern int ieee80211_wx_set_mode(struct ieee80211_device *ieee, struct iw_request_info *a, 6846+extern int ieee80211_wx_set_mode_rtl7(struct ieee80211_device *ieee, struct iw_request_info *a, 6847 union iwreq_data *wrqu, char *b); 6848 6849-extern int ieee80211_wx_set_scan(struct ieee80211_device *ieee, struct iw_request_info *a, 6850+extern int ieee80211_wx_set_scan_rtl7(struct ieee80211_device *ieee, struct iw_request_info *a, 6851 union iwreq_data *wrqu, char *b); 6852 6853-extern int ieee80211_wx_set_essid(struct ieee80211_device *ieee, 6854+extern int ieee80211_wx_set_essid_rtl7(struct ieee80211_device *ieee, 6855 struct iw_request_info *a, 6856 union iwreq_data *wrqu, char *extra); 6857 6858-extern int ieee80211_wx_get_mode(struct ieee80211_device *ieee, struct iw_request_info *a, 6859+extern int ieee80211_wx_get_mode_rtl7(struct ieee80211_device *ieee, struct iw_request_info *a, 6860 union iwreq_data *wrqu, char *b); 6861 6862-extern int ieee80211_wx_set_freq(struct ieee80211_device *ieee, struct iw_request_info *a, 6863+extern int ieee80211_wx_set_freq_rtl7(struct ieee80211_device *ieee, struct iw_request_info *a, 6864 union iwreq_data *wrqu, char *b); 6865 6866-extern int ieee80211_wx_get_freq(struct ieee80211_device *ieee, struct iw_request_info *a, 6867+extern int ieee80211_wx_get_freq_rtl7(struct ieee80211_device *ieee, struct iw_request_info *a, 6868 union iwreq_data *wrqu, char *b); 6869 6870-extern void ieee80211_wx_sync_scan_wq(struct ieee80211_device *ieee); 6871+# if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)) 6872+extern void ieee80211_wx_sync_scan_wq_rtl7(struct work_struct *work); 6873+#else 6874+extern void ieee80211_wx_sync_scan_wq_rtl7(struct ieee80211_device *ieee); 6875+#endif 6876 6877-extern int ieee80211_wx_set_rawtx(struct ieee80211_device *ieee, 6878+extern int ieee80211_wx_set_rawtx_rtl7(struct ieee80211_device *ieee, 6879 struct iw_request_info *info, 6880 union iwreq_data *wrqu, char *extra); 6881 6882-extern int ieee80211_wx_get_name(struct ieee80211_device *ieee, 6883+extern int ieee80211_wx_get_name_rtl7(struct ieee80211_device *ieee, 6884 struct iw_request_info *info, 6885 union iwreq_data *wrqu, char *extra); 6886 6887-extern int ieee80211_wx_set_power(struct ieee80211_device *ieee, 6888+extern int ieee80211_wx_set_power_rtl7(struct ieee80211_device *ieee, 6889 struct iw_request_info *info, 6890 union iwreq_data *wrqu, char *extra); 6891 6892-extern int ieee80211_wx_get_power(struct ieee80211_device *ieee, 6893+extern int ieee80211_wx_get_power_rtl7(struct ieee80211_device *ieee, 6894 struct iw_request_info *info, 6895 union iwreq_data *wrqu, char *extra); 6896 6897-extern const long ieee80211_wlan_frequencies[]; 6898+extern const long ieee80211_wlan_frequencies_rtl7[]; 6899 6900-extern inline void ieee80211_increment_scans(struct ieee80211_device *ieee) 6901+extern inline void ieee80211_increment_scans_rtl7(struct ieee80211_device *ieee) 6902 { 6903 ieee->scans++; 6904 } 6905 6906-extern inline int ieee80211_get_scans(struct ieee80211_device *ieee) 6907+extern inline int ieee80211_get_scans_rtl7(struct ieee80211_device *ieee) 6908 { 6909 return ieee->scans; 6910 } 6911@@ -1372,7 +1398,7 @@ 6912 const char *s = essid; 6913 char *d = escaped; 6914 6915- if (ieee80211_is_empty_essid(essid, essid_len)) { 6916+ if (ieee80211_is_empty_essid_rtl7(essid, essid_len)) { 6917 memcpy(escaped, "<hidden>", sizeof("<hidden>")); 6918 return escaped; 6919 } 6920diff -Naur rtl8187_orig/ieee80211/ieee80211_module.c rtl8187_rawtx/ieee80211/ieee80211_module.c 6921--- rtl8187_orig/ieee80211/ieee80211_module.c 2007-03-13 23:45:09.000000000 +0100 6922+++ rtl8187_rawtx/ieee80211/ieee80211_module.c 2007-06-08 23:30:47.000000000 +0200 6923@@ -31,7 +31,6 @@ 6924 *******************************************************************************/ 6925 6926 #include <linux/compiler.h> 6927-#include <linux/config.h> 6928 #include <linux/errno.h> 6929 #include <linux/if_arp.h> 6930 #include <linux/in6.h> 6931@@ -52,6 +51,12 @@ 6932 #include <asm/uaccess.h> 6933 #include <net/arp.h> 6934 6935+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) 6936+#include <linux/config.h> 6937+#else 6938+#include <linux/autoconf.h> 6939+#endif 6940+ 6941 #include "ieee80211.h" 6942 6943 MODULE_DESCRIPTION("802.11 data/management/control stack"); 6944@@ -60,7 +65,7 @@ 6945 6946 #define DRV_NAME "ieee80211" 6947 6948-static inline int ieee80211_networks_allocate(struct ieee80211_device *ieee) 6949+static inline int ieee80211_networks_allocate_rtl7(struct ieee80211_device *ieee) 6950 { 6951 if (ieee->networks) 6952 return 0; 6953@@ -80,7 +85,7 @@ 6954 return 0; 6955 } 6956 6957-static inline void ieee80211_networks_free(struct ieee80211_device *ieee) 6958+static inline void ieee80211_networks_free_rtl7(struct ieee80211_device *ieee) 6959 { 6960 if (!ieee->networks) 6961 return; 6962@@ -88,7 +93,7 @@ 6963 ieee->networks = NULL; 6964 } 6965 6966-static inline void ieee80211_networks_initialize(struct ieee80211_device *ieee) 6967+static inline void ieee80211_networks_initialize_rtl7(struct ieee80211_device *ieee) 6968 { 6969 int i; 6970 6971@@ -99,7 +104,7 @@ 6972 } 6973 6974 6975-struct net_device *alloc_ieee80211(int sizeof_priv) 6976+struct net_device *alloc_ieee80211_rtl7(int sizeof_priv) 6977 { 6978 struct ieee80211_device *ieee; 6979 struct net_device *dev; 6980@@ -113,17 +118,17 @@ 6981 goto failed; 6982 } 6983 ieee = netdev_priv(dev); 6984- dev->hard_start_xmit = ieee80211_xmit; 6985+ dev->hard_start_xmit = ieee80211_xmit_rtl7; 6986 6987 ieee->dev = dev; 6988 6989- err = ieee80211_networks_allocate(ieee); 6990+ err = ieee80211_networks_allocate_rtl7(ieee); 6991 if (err) { 6992 IEEE80211_ERROR("Unable to allocate beacon storage: %d\n", 6993 err); 6994 goto failed; 6995 } 6996- ieee80211_networks_initialize(ieee); 6997+ ieee80211_networks_initialize_rtl7(ieee); 6998 6999 /* Default fragmentation threshold is maximum payload size */ 7000 ieee->fts = DEFAULT_FTS; 7001@@ -138,7 +143,7 @@ 7002 INIT_LIST_HEAD(&ieee->crypt_deinit_list); 7003 init_timer(&ieee->crypt_deinit_timer); 7004 ieee->crypt_deinit_timer.data = (unsigned long)ieee; 7005- ieee->crypt_deinit_timer.function = ieee80211_crypt_deinit_handler; 7006+ ieee->crypt_deinit_timer.function = ieee80211_crypt_deinit_handler_rtl7; 7007 7008 spin_lock_init(&ieee->lock); 7009 7010@@ -149,7 +154,7 @@ 7011 ieee->ieee802_1x = 1; 7012 ieee->raw_tx = 0; 7013 7014- ieee80211_softmac_init(ieee); 7015+ ieee80211_softmac_init_rtl7(ieee); 7016 7017 for (i = 0; i < IEEE_IBSS_MAC_HASH_SIZE; i++) 7018 INIT_LIST_HEAD(&ieee->ibss_mac_hash[i]); 7019@@ -167,7 +172,7 @@ 7020 } 7021 7022 7023-void free_ieee80211(struct net_device *dev) 7024+void free_ieee80211_rtl7(struct net_device *dev) 7025 { 7026 struct ieee80211_device *ieee = netdev_priv(dev); 7027 7028@@ -175,9 +180,9 @@ 7029 struct list_head *p, *q; 7030 7031 7032- ieee80211_softmac_free(ieee); 7033+ ieee80211_softmac_free_rtl7(ieee); 7034 del_timer_sync(&ieee->crypt_deinit_timer); 7035- ieee80211_crypt_deinit_entries(ieee, 1); 7036+ ieee80211_crypt_deinit_entries_rtl7(ieee, 1); 7037 7038 for (i = 0; i < WEP_KEYS; i++) { 7039 struct ieee80211_crypt_data *crypt = ieee->crypt[i]; 7040@@ -191,7 +196,7 @@ 7041 } 7042 } 7043 7044- ieee80211_networks_free(ieee); 7045+ ieee80211_networks_free_rtl7(ieee); 7046 7047 for (i = 0; i < IEEE_IBSS_MAC_HASH_SIZE; i++) { 7048 list_for_each_safe(p, q, &ieee->ibss_mac_hash[i]) { 7049@@ -210,13 +215,13 @@ 7050 u32 ieee80211_debug_level = 0; 7051 struct proc_dir_entry *ieee80211_proc = NULL; 7052 7053-static int show_debug_level(char *page, char **start, off_t offset, 7054+static int show_debug_level_rtl7(char *page, char **start, off_t offset, 7055 int count, int *eof, void *data) 7056 { 7057 return snprintf(page, count, "0x%08X\n", ieee80211_debug_level); 7058 } 7059 7060-static int store_debug_level(struct file *file, const char *buffer, 7061+static int store_debug_level_rtl7(struct file *file, const char *buffer, 7062 unsigned long count, void *data) 7063 { 7064 char buf[] = "0x00000000"; 7065@@ -243,7 +248,7 @@ 7066 return strnlen(buf, count); 7067 } 7068 7069-static int __init ieee80211_init(void) 7070+static int __init ieee80211_init_rtl7(void) 7071 { 7072 struct proc_dir_entry *e; 7073 7074@@ -268,7 +273,7 @@ 7075 return 0; 7076 } 7077 7078-static void __exit ieee80211_exit(void) 7079+static void __exit ieee80211_exit_rtl7(void) 7080 { 7081 if (ieee80211_proc) { 7082 remove_proc_entry("debug_level", ieee80211_proc); 7083@@ -282,9 +287,9 @@ 7084 MODULE_PARM_DESC(debug, "debug output mask"); 7085 7086 7087-module_exit(ieee80211_exit); 7088-module_init(ieee80211_init); 7089+module_exit(ieee80211_exit_rtl7); 7090+module_init(ieee80211_init_rtl7); 7091 #endif 7092 7093-EXPORT_SYMBOL(alloc_ieee80211); 7094-EXPORT_SYMBOL(free_ieee80211); 7095+EXPORT_SYMBOL(alloc_ieee80211_rtl7); 7096+EXPORT_SYMBOL(free_ieee80211_rtl7); 7097diff -Naur rtl8187_orig/ieee80211/ieee80211_rx.c rtl8187_rawtx/ieee80211/ieee80211_rx.c 7098--- rtl8187_orig/ieee80211/ieee80211_rx.c 2007-03-13 23:45:09.000000000 +0100 7099+++ rtl8187_rawtx/ieee80211/ieee80211_rx.c 2007-06-08 23:30:47.000000000 +0200 7100@@ -22,7 +22,6 @@ 7101 7102 7103 #include <linux/compiler.h> 7104-#include <linux/config.h> 7105 #include <linux/errno.h> 7106 #include <linux/if_arp.h> 7107 #include <linux/in6.h> 7108@@ -43,18 +42,85 @@ 7109 #include <asm/uaccess.h> 7110 #include <linux/ctype.h> 7111 7112+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) 7113+#include <linux/config.h> 7114+#else 7115+#include <linux/autoconf.h> 7116+#endif 7117+ 7118+ 7119 #include "ieee80211.h" 7120 7121-static inline void ieee80211_monitor_rx(struct ieee80211_device *ieee, 7122+static inline void ieee80211_monitor_rx_rtl7(struct ieee80211_device *ieee, 7123 struct sk_buff *skb, 7124 struct ieee80211_rx_stats *rx_stats) 7125 { 7126- struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; 7127- u16 fc = le16_to_cpu(hdr->frame_ctl); 7128+ struct ieee80211_hdr *hdr1 = (struct ieee80211_hdr *)skb->data; 7129+ u16 fc = le16_to_cpu(hdr1->frame_ctl); 7130+ int prism_header; 7131+ int hdrlen, phdrlen, head_need, tail_need; 7132+ 7133+ if (ieee->dev->type == ARPHRD_IEEE80211_PRISM) { 7134+ prism_header = 1; 7135+ phdrlen = sizeof(struct linux_wlan_ng_prism_hdr); 7136+ } else { 7137+ prism_header = 0; 7138+ phdrlen = 0; 7139+ } 7140+ 7141+ hdrlen = ieee80211_get_hdrlen_rtl7(fc); 7142+ 7143+ /* check if there is enough room for extra data; if not, expand skb 7144+ * buffer to be large enough for the changes */ 7145+ head_need = phdrlen; 7146+ tail_need = 0; 7147+#ifdef PRISM2_ADD_BOGUS_CRC 7148+ tail_need += 4; 7149+#endif /* PRISM2_ADD_BOGUS_CRC */ 7150+ 7151+ head_need -= skb_headroom(skb); 7152+ tail_need -= skb_tailroom(skb); 7153+ 7154+ if (head_need > 0 || tail_need > 0) { 7155+ if (pskb_expand_head(skb, head_need > 0 ? head_need : 0, 7156+ tail_need > 0 ? tail_need : 0, 7157+ GFP_ATOMIC)) { 7158+ printk(KERN_DEBUG "%s: ieee80211_rx failed to " 7159+ "reallocate skb buffer\n", ieee->dev->name); 7160+ dev_kfree_skb_any(skb); 7161+ return; 7162+ } 7163+ } 7164+ 7165+ if (prism_header == 1) { 7166+ struct linux_wlan_ng_prism_hdr *hdr; 7167+ hdr = (struct linux_wlan_ng_prism_hdr *) 7168+ skb_push(skb, phdrlen); 7169+ memset(hdr, 0, phdrlen); 7170+ hdr->msgcode = LWNG_CAP_DID_BASE; 7171+ hdr->msglen = sizeof(*hdr); 7172+ memcpy(hdr->devname, ieee->dev->name, sizeof(hdr->devname)); 7173+#define LWNG_SETVAL(f,i,s,l,d) \ 7174+hdr->f.did = LWNG_CAP_DID_BASE | (i << 12); \ 7175+hdr->f.status = s; hdr->f.len = l; hdr->f.data = d 7176+ LWNG_SETVAL(hosttime, 1, 0, 4, jiffies); 7177+ LWNG_SETVAL(mactime, 2, 0, 4, ((u32)rx_stats->mac_time)); 7178+ LWNG_SETVAL(channel, 3, 1 /* no value */, 4, 0); 7179+ LWNG_SETVAL(rssi, 4, 1 /* no value */, 4, 0); 7180+ LWNG_SETVAL(sq, 5, 1 /* no value */, 4, 0); 7181+ LWNG_SETVAL(signal, 6, 0, 4, rx_stats->signal); 7182+ LWNG_SETVAL(noise, 7, 0, 4, rx_stats->noise); 7183+ LWNG_SETVAL(rate, 8, 0, 4, rx_stats->rate / 5); 7184+ LWNG_SETVAL(istx, 9, 0, 4, 0); 7185+ LWNG_SETVAL(frmlen, 10, 0, 4, skb->len - phdrlen); 7186+#undef LWNG_SETVAL 7187+ } 7188 7189 skb->dev = ieee->dev; 7190 skb->mac.raw = skb->data; 7191- skb_pull(skb, ieee80211_get_hdrlen(fc)); 7192+ skb_pull(skb, hdrlen); 7193+ if (prism_header) 7194+ skb_pull(skb, phdrlen); 7195 skb->pkt_type = PACKET_OTHERHOST; 7196 skb->protocol = __constant_htons(ETH_P_80211_RAW); 7197 memset(skb->cb, 0, sizeof(skb->cb)); 7198@@ -64,7 +130,7 @@ 7199 7200 /* Called only as a tasklet (software IRQ) */ 7201 static struct ieee80211_frag_entry * 7202-ieee80211_frag_cache_find(struct ieee80211_device *ieee, unsigned int seq, 7203+ieee80211_frag_cache_find_rtl7(struct ieee80211_device *ieee, unsigned int seq, 7204 unsigned int frag, u8 *src, u8 *dst) 7205 { 7206 struct ieee80211_frag_entry *entry; 7207@@ -94,7 +160,7 @@ 7208 7209 /* Called only as a tasklet (software IRQ) */ 7210 static struct sk_buff * 7211-ieee80211_frag_cache_get(struct ieee80211_device *ieee, 7212+ieee80211_frag_cache_get_rtl7(struct ieee80211_device *ieee, 7213 struct ieee80211_hdr *hdr) 7214 { 7215 struct sk_buff *skb = NULL; 7216@@ -133,7 +199,7 @@ 7217 } else { 7218 /* received a fragment of a frame for which the head fragment 7219 * should have already been received */ 7220- entry = ieee80211_frag_cache_find(ieee, seq, frag, hdr->addr2, 7221+ entry = ieee80211_frag_cache_find_rtl7(ieee, seq, frag, hdr->addr2, 7222 hdr->addr1); 7223 if (entry != NULL) { 7224 entry->last_frag = frag; 7225@@ -146,7 +212,7 @@ 7226 7227 7228 /* Called only as a tasklet (software IRQ) */ 7229-static int ieee80211_frag_cache_invalidate(struct ieee80211_device *ieee, 7230+static int ieee80211_frag_cache_invalidate_rtl7(struct ieee80211_device *ieee, 7231 struct ieee80211_hdr *hdr) 7232 { 7233 u16 sc; 7234@@ -156,7 +222,7 @@ 7235 sc = le16_to_cpu(hdr->seq_ctl); 7236 seq = WLAN_GET_SEQ_SEQ(sc); 7237 7238- entry = ieee80211_frag_cache_find(ieee, seq, -1, hdr->addr2, 7239+ entry = ieee80211_frag_cache_find_rtl7(ieee, seq, -1, hdr->addr2, 7240 hdr->addr1); 7241 7242 if (entry == NULL) { 7243@@ -178,7 +244,7 @@ 7244 * 7245 * Called by ieee80211_rx */ 7246 static inline int 7247-ieee80211_rx_frame_mgmt(struct ieee80211_device *ieee, struct sk_buff *skb, 7248+ieee80211_rx_frame_mgmt_rtl7(struct ieee80211_device *ieee, struct sk_buff *skb, 7249 struct ieee80211_rx_stats *rx_stats, u16 type, 7250 u16 stype) 7251 { 7252@@ -187,8 +253,8 @@ 7253 * response parser uses it 7254 */ 7255 rx_stats->len = skb->len; 7256- ieee80211_rx_mgt(ieee,(struct ieee80211_hdr *)skb->data,rx_stats); 7257- ieee80211_rx_frame_softmac(ieee, skb, rx_stats, type, stype); 7258+ ieee80211_rx_mgt_rtl7(ieee,(struct ieee80211_hdr *)skb->data,rx_stats); 7259+ ieee80211_rx_frame_softmac_rtl7(ieee, skb, rx_stats, type, stype); 7260 7261 dev_kfree_skb_any(skb); 7262 7263@@ -253,7 +319,7 @@ 7264 /* No encapsulation header if EtherType < 0x600 (=length) */ 7265 7266 /* Called by ieee80211_rx_frame_decrypt */ 7267-static int ieee80211_is_eapol_frame(struct ieee80211_device *ieee, 7268+static int ieee80211_is_eapol_frame_rtl7(struct ieee80211_device *ieee, 7269 struct sk_buff *skb) 7270 { 7271 struct net_device *dev = ieee->dev; 7272@@ -294,7 +360,7 @@ 7273 7274 /* Called only as a tasklet (software IRQ), by ieee80211_rx */ 7275 static inline int 7276-ieee80211_rx_frame_decrypt(struct ieee80211_device* ieee, struct sk_buff *skb, 7277+ieee80211_rx_frame_decrypt_rtl7(struct ieee80211_device* ieee, struct sk_buff *skb, 7278 struct ieee80211_crypt_data *crypt) 7279 { 7280 struct ieee80211_hdr *hdr; 7281@@ -304,7 +370,7 @@ 7282 return 0; 7283 7284 hdr = (struct ieee80211_hdr *) skb->data; 7285- hdrlen = ieee80211_get_hdrlen(le16_to_cpu(hdr->frame_ctl)); 7286+ hdrlen = ieee80211_get_hdrlen_rtl7(le16_to_cpu(hdr->frame_ctl)); 7287 7288 #ifdef CONFIG_IEEE80211_CRYPT_TKIP 7289 if (ieee->tkip_countermeasures && 7290@@ -339,7 +405,7 @@ 7291 7292 /* Called only as a tasklet (software IRQ), by ieee80211_rx */ 7293 static inline int 7294-ieee80211_rx_frame_decrypt_msdu(struct ieee80211_device* ieee, struct sk_buff *skb, 7295+ieee80211_rx_frame_decrypt_msdu_rtl7(struct ieee80211_device* ieee, struct sk_buff *skb, 7296 int keyidx, struct ieee80211_crypt_data *crypt) 7297 { 7298 struct ieee80211_hdr *hdr; 7299@@ -349,7 +415,7 @@ 7300 return 0; 7301 7302 hdr = (struct ieee80211_hdr *) skb->data; 7303- hdrlen = ieee80211_get_hdrlen(le16_to_cpu(hdr->frame_ctl)); 7304+ hdrlen = ieee80211_get_hdrlen_rtl7(le16_to_cpu(hdr->frame_ctl)); 7305 7306 atomic_inc(&crypt->refcnt); 7307 res = crypt->ops->decrypt_msdu(skb, keyidx, hdrlen, crypt->priv); 7308@@ -367,7 +433,7 @@ 7309 7310 /* this function is stolen from ipw2200 driver*/ 7311 #define IEEE_PACKET_RETRY_TIME (5*HZ) 7312-static int is_duplicate_packet(struct ieee80211_device *ieee, 7313+static int is_duplicate_packet_rtl7(struct ieee80211_device *ieee, 7314 struct ieee80211_hdr *header) 7315 { 7316 // u16 fc = le16_to_cpu(header->frame_ctl); 7317@@ -444,7 +510,7 @@ 7318 /* All received frames are sent to this function. @skb contains the frame in 7319 * IEEE 802.11 format, i.e., in the format it was sent over air. 7320 * This function is called only as a tasklet (software IRQ). */ 7321-int ieee80211_rx(struct ieee80211_device *ieee, struct sk_buff *skb, 7322+int ieee80211_rx_rtl7(struct ieee80211_device *ieee, struct sk_buff *skb, 7323 struct ieee80211_rx_stats *rx_stats) 7324 { 7325 struct net_device *dev = ieee->dev; 7326@@ -483,7 +549,7 @@ 7327 sc = le16_to_cpu(hdr->seq_ctl); 7328 7329 frag = WLAN_GET_SEQ_FRAG(sc); 7330- hdrlen = ieee80211_get_hdrlen(fc); 7331+ hdrlen = ieee80211_get_hdrlen_rtl7(fc); 7332 7333 #ifdef NOT_YET 7334 #if WIRELESS_EXT > 15 7335@@ -501,12 +567,12 @@ 7336 } 7337 #endif /* IW_WIRELESS_SPY */ 7338 #endif /* WIRELESS_EXT > 15 */ 7339- hostap_update_rx_stats(local->ap, hdr, rx_stats); 7340+ hostap_update_rx_stats_rtl7(local->ap, hdr, rx_stats); 7341 #endif 7342 7343 #if WIRELESS_EXT > 15 7344 if (ieee->iw_mode == IW_MODE_MONITOR) { 7345- ieee80211_monitor_rx(ieee, skb, rx_stats); 7346+ ieee80211_monitor_rx_rtl7(ieee, skb, rx_stats); 7347 stats->rx_packets++; 7348 stats->rx_bytes += skb->len; 7349 return 1; 7350@@ -529,7 +595,7 @@ 7351 * stations that do not support WEP key mapping). */ 7352 7353 if (!(hdr->addr1[0] & 0x01) || local->bcrx_sta_key) 7354- (void) hostap_handle_sta_crypto(local, hdr, &crypt, 7355+ (void) hostap_handle_sta_crypto_rtl7(local, hdr, &crypt, 7356 &sta); 7357 #endif 7358 7359@@ -555,7 +621,7 @@ 7360 if (skb->len < IEEE80211_DATA_HDR3_LEN) 7361 goto rx_dropped; 7362 7363- if (is_duplicate_packet(ieee, hdr)) 7364+ if (is_duplicate_packet_rtl7(ieee, hdr)) 7365 goto rx_dropped; 7366 7367 7368@@ -575,7 +641,7 @@ 7369 #endif 7370 7371 7372- if (ieee80211_rx_frame_mgmt(ieee, skb, rx_stats, type, stype)) 7373+ if (ieee80211_rx_frame_mgmt_rtl7(ieee, skb, rx_stats, type, stype)) 7374 goto rx_dropped; 7375 else 7376 goto rx_exit; 7377@@ -606,7 +672,7 @@ 7378 } 7379 7380 #ifdef NOT_YET 7381- if (hostap_rx_frame_wds(ieee, hdr, fc, &wds)) 7382+ if (hostap_rx_frame_wds_rtl7(ieee, hdr, fc, &wds)) 7383 goto rx_dropped; 7384 if (wds) { 7385 skb->dev = dev = wds; 7386@@ -619,7 +685,7 @@ 7387 memcmp(hdr->addr2, ieee->assoc_ap_addr, ETH_ALEN) == 0) { 7388 /* Frame from BSSID of the AP for which we are a client */ 7389 skb->dev = dev = ieee->stadev; 7390- stats = hostap_get_stats(dev); 7391+ stats = hostap_get_stats_rtl7(dev); 7392 from_assoc_ap = 1; 7393 } 7394 #endif 7395@@ -630,7 +696,7 @@ 7396 if ((ieee->iw_mode == IW_MODE_MASTER || 7397 ieee->iw_mode == IW_MODE_REPEAT) && 7398 !from_assoc_ap) { 7399- switch (hostap_handle_sta_rx(ieee, dev, skb, rx_stats, 7400+ switch (hostap_handle_sta_rx_rtl7(ieee, dev, skb, rx_stats, 7401 wds != NULL)) { 7402 case AP_RX_CONTINUE_NOT_AUTHORIZED: 7403 frame_authorized = 0; 7404@@ -664,7 +730,7 @@ 7405 /* skb: hdr + (possibly fragmented, possibly encrypted) payload */ 7406 7407 if (ieee->host_decrypt && (fc & IEEE80211_FCTL_WEP) && 7408- (keyidx = ieee80211_rx_frame_decrypt(ieee, skb, crypt)) < 0) 7409+ (keyidx = ieee80211_rx_frame_decrypt_rtl7(ieee, skb, crypt)) < 0) 7410 goto rx_dropped; 7411 7412 hdr = (struct ieee80211_hdr *) skb->data; 7413@@ -674,7 +740,7 @@ 7414 // ieee->host_decrypt && (fc & IEEE80211_FCTL_WEP) && 7415 if ((frag != 0 || (fc & IEEE80211_FCTL_MOREFRAGS))) { 7416 int flen; 7417- struct sk_buff *frag_skb = ieee80211_frag_cache_get(ieee, hdr); 7418+ struct sk_buff *frag_skb = ieee80211_frag_cache_get_rtl7(ieee, hdr); 7419 IEEE80211_DEBUG_FRAG("Rx Fragment received (%u)\n", frag); 7420 7421 if (!frag_skb) { 7422@@ -694,7 +760,7 @@ 7423 printk(KERN_WARNING "%s: host decrypted and " 7424 "reassembled frame did not fit skb\n", 7425 dev->name); 7426- ieee80211_frag_cache_invalidate(ieee, hdr); 7427+ ieee80211_frag_cache_invalidate_rtl7(ieee, hdr); 7428 goto rx_dropped; 7429 } 7430 7431@@ -722,19 +788,19 @@ 7432 * delivered, so remove skb from fragment cache */ 7433 skb = frag_skb; 7434 hdr = (struct ieee80211_hdr *) skb->data; 7435- ieee80211_frag_cache_invalidate(ieee, hdr); 7436+ ieee80211_frag_cache_invalidate_rtl7(ieee, hdr); 7437 } 7438 7439 /* skb: hdr + (possible reassembled) full MSDU payload; possibly still 7440 * encrypted/authenticated */ 7441 if (ieee->host_decrypt && (fc & IEEE80211_FCTL_WEP) && 7442- ieee80211_rx_frame_decrypt_msdu(ieee, skb, keyidx, crypt)) 7443+ ieee80211_rx_frame_decrypt_msdu_rtl7(ieee, skb, keyidx, crypt)) 7444 goto rx_dropped; 7445 7446 hdr = (struct ieee80211_hdr *) skb->data; 7447 if (crypt && !(fc & IEEE80211_FCTL_WEP) && !ieee->open_wep) { 7448 if (/*ieee->ieee802_1x &&*/ 7449- ieee80211_is_eapol_frame(ieee, skb)) { 7450+ ieee80211_is_eapol_frame_rtl7(ieee, skb)) { 7451 #ifdef CONFIG_IEEE80211_DEBUG 7452 /* pass unencrypted EAPOL frames even if encryption is 7453 * configured */ 7454@@ -763,7 +829,7 @@ 7455 #endif 7456 7457 if (crypt && !(fc & IEEE80211_FCTL_WEP) && !ieee->open_wep && 7458- !ieee80211_is_eapol_frame(ieee, skb)) { 7459+ !ieee80211_is_eapol_frame_rtl7(ieee, skb)) { 7460 IEEE80211_DEBUG_DROP( 7461 "dropped unencrypted RX data " 7462 "frame from " MAC_FMT 7463@@ -896,7 +962,7 @@ 7464 7465 #define MGMT_FRAME_FIXED_PART_LENGTH 0x24 7466 7467-static inline int ieee80211_is_ofdm_rate(u8 rate) 7468+static inline int ieee80211_is_ofdm_rate_rtl7(u8 rate) 7469 { 7470 switch (rate & ~IEEE80211_BASIC_RATE_MASK) { 7471 case IEEE80211_OFDM_RATE_6MB: 7472@@ -913,7 +979,7 @@ 7473 } 7474 7475 7476-static inline int ieee80211_network_init( 7477+static inline int ieee80211_network_init_rtl7( 7478 struct ieee80211_device *ieee, 7479 struct ieee80211_probe_response *beacon, 7480 struct ieee80211_network *network, 7481@@ -964,7 +1030,7 @@ 7482 7483 switch (info_element->id) { 7484 case MFIE_TYPE_SSID: 7485- if (ieee80211_is_empty_essid(info_element->data, 7486+ if (ieee80211_is_empty_essid_rtl7(info_element->data, 7487 info_element->len)) { 7488 network->flags |= NETWORK_EMPTY_ESSID; 7489 break; 7490@@ -991,7 +1057,7 @@ 7491 #ifdef CONFIG_IEEE80211_DEBUG 7492 p += snprintf(p, sizeof(rates_str) - (p - rates_str), "%02X ", network->rates[i]); 7493 #endif 7494- if (ieee80211_is_ofdm_rate(info_element->data[i])) { 7495+ if (ieee80211_is_ofdm_rate_rtl7(info_element->data[i])) { 7496 network->flags |= NETWORK_HAS_OFDM; 7497 if (info_element->data[i] & 7498 IEEE80211_BASIC_RATE_MASK) 7499@@ -1014,7 +1080,7 @@ 7500 #ifdef CONFIG_IEEE80211_DEBUG 7501 p += snprintf(p, sizeof(rates_str) - (p - rates_str), "%02X ", network->rates[i]); 7502 #endif 7503- if (ieee80211_is_ofdm_rate(info_element->data[i])) { 7504+ if (ieee80211_is_ofdm_rate_rtl7(info_element->data[i])) { 7505 network->flags |= NETWORK_HAS_OFDM; 7506 if (info_element->data[i] & 7507 IEEE80211_BASIC_RATE_MASK) 7508@@ -1147,7 +1213,7 @@ 7509 return 1; 7510 } 7511 7512- if (ieee80211_is_empty_essid(network->ssid, network->ssid_len)) 7513+ if (ieee80211_is_empty_essid_rtl7(network->ssid, network->ssid_len)) 7514 network->flags |= NETWORK_EMPTY_ESSID; 7515 7516 memcpy(&network->stats, stats, sizeof(network->stats)); 7517@@ -1155,7 +1221,7 @@ 7518 return 0; 7519 } 7520 7521-static inline int is_same_network(struct ieee80211_network *src, 7522+static inline int is_same_network_rtl7(struct ieee80211_network *src, 7523 struct ieee80211_network *dst) 7524 { 7525 /* A network is only a duplicate if the channel, BSSID, ESSID 7526@@ -1172,7 +1238,7 @@ 7527 (dst->capability & WLAN_CAPABILITY_BSS))); 7528 } 7529 7530-static inline void update_network(struct ieee80211_network *dst, 7531+static inline void update_network_rtl7(struct ieee80211_network *dst, 7532 struct ieee80211_network *src) 7533 { 7534 memcpy(&dst->stats, &src->stats, sizeof(struct ieee80211_rx_stats)); 7535@@ -1204,7 +1270,7 @@ 7536 /* dst->last_associate is not overwritten */ 7537 } 7538 7539-static inline void ieee80211_process_probe_response( 7540+static inline void ieee80211_process_probe_response_rtl7( 7541 struct ieee80211_device *ieee, 7542 struct ieee80211_probe_response *beacon, 7543 struct ieee80211_rx_stats *stats) 7544@@ -1239,7 +1305,7 @@ 7545 (beacon->capability & (1<<0x1)) ? '1' : '0', 7546 (beacon->capability & (1<<0x0)) ? '1' : '0'); 7547 7548- if (ieee80211_network_init(ieee, beacon, &network, stats)) { 7549+ if (ieee80211_network_init_rtl7(ieee, beacon, &network, stats)) { 7550 IEEE80211_DEBUG_SCAN("Dropped '%s' (" MAC_FMT ") via %s.\n", 7551 escape_essid(info_element->data, 7552 info_element->len), 7553@@ -1262,11 +1328,11 @@ 7554 7555 spin_lock_irqsave(&ieee->lock, flags); 7556 7557- if(is_same_network(&ieee->current_network, &network)) 7558- update_network(&ieee->current_network, &network); 7559+ if(is_same_network_rtl7(&ieee->current_network, &network)) 7560+ update_network_rtl7(&ieee->current_network, &network); 7561 7562 list_for_each_entry(target, &ieee->network_list, list) { 7563- if (is_same_network(target, &network)) 7564+ if (is_same_network_rtl7(target, &network)) 7565 break; 7566 7567 if ((oldest == NULL) || 7568@@ -1306,7 +1372,7 @@ 7569 memcpy(target, &network, sizeof(*target)); 7570 list_add_tail(&target->list, &ieee->network_list); 7571 if(ieee->softmac_features & IEEE_SOFTMAC_ASSOCIATE) 7572- ieee80211_softmac_new_net(ieee,&network); 7573+ ieee80211_softmac_new_net_rtl7(ieee,&network); 7574 } else { 7575 IEEE80211_DEBUG_SCAN("Updating '%s' (" MAC_FMT ") via %s.\n", 7576 escape_essid(target->ssid, 7577@@ -1321,15 +1387,15 @@ 7578 * net and call the new_net handler 7579 */ 7580 renew = !time_after(target->last_scanned + ieee->scan_age, jiffies); 7581- update_network(target, &network); 7582+ update_network_rtl7(target, &network); 7583 if(renew && (ieee->softmac_features & IEEE_SOFTMAC_ASSOCIATE)) 7584- ieee80211_softmac_new_net(ieee,&network); 7585+ ieee80211_softmac_new_net_rtl7(ieee,&network); 7586 } 7587 7588 spin_unlock_irqrestore(&ieee->lock, flags); 7589 } 7590 7591-void ieee80211_rx_mgt(struct ieee80211_device *ieee, 7592+void ieee80211_rx_mgt_rtl7(struct ieee80211_device *ieee, 7593 struct ieee80211_hdr *header, 7594 struct ieee80211_rx_stats *stats) 7595 { 7596@@ -1339,7 +1405,7 @@ 7597 IEEE80211_DEBUG_MGMT("received BEACON (%d)\n", 7598 WLAN_FC_GET_STYPE(header->frame_ctl)); 7599 IEEE80211_DEBUG_SCAN("Beacon\n"); 7600- ieee80211_process_probe_response( 7601+ ieee80211_process_probe_response_rtl7( 7602 ieee, (struct ieee80211_probe_response *)header, stats); 7603 break; 7604 7605@@ -1347,7 +1413,7 @@ 7606 IEEE80211_DEBUG_MGMT("received PROBE RESPONSE (%d)\n", 7607 WLAN_FC_GET_STYPE(header->frame_ctl)); 7608 IEEE80211_DEBUG_SCAN("Probe response\n"); 7609- ieee80211_process_probe_response( 7610+ ieee80211_process_probe_response_rtl7( 7611 ieee, (struct ieee80211_probe_response *)header, stats); 7612 break; 7613 7614@@ -1355,5 +1421,5 @@ 7615 } 7616 7617 7618-EXPORT_SYMBOL(ieee80211_rx_mgt); 7619-EXPORT_SYMBOL(ieee80211_rx); 7620+EXPORT_SYMBOL(ieee80211_rx_mgt_rtl7); 7621+EXPORT_SYMBOL(ieee80211_rx_rtl7); 7622diff -Naur rtl8187_orig/ieee80211/ieee80211_softmac.c rtl8187_rawtx/ieee80211/ieee80211_softmac.c 7623--- rtl8187_orig/ieee80211/ieee80211_softmac.c 2007-03-13 23:45:09.000000000 +0100 7624+++ rtl8187_rawtx/ieee80211/ieee80211_softmac.c 2007-06-08 23:30:47.000000000 +0200 7625@@ -1,14 +1,14 @@ 7626 /* IEEE 802.11 SoftMAC layer 7627 * Copyright (c) 2005 Andrea Merello <andreamrl@tiscali.it> 7628 * 7629- * Mostly extracted from the rtl8180-sa2400 driver for the 7630+ * Mostly extracted from the rtl8180-sa2400 driver for the 7631 * in-kernel generic ieee802.11 stack. 7632 * 7633 * Few lines might be stolen from other part of the ieee80211 7634 * stack. Copyright who own it's copyright 7635 * 7636 * WPA code stolen from the ipw2200 driver. 7637- * Copyright who own it's copyright. 7638+ * Copyright who own it's copyright. 7639 * 7640 * released under the GPL 7641 */ 7642@@ -20,12 +20,12 @@ 7643 #include <linux/delay.h> 7644 #include <linux/version.h> 7645 7646-short ieee80211_is_54g(struct ieee80211_network net) 7647+short ieee80211_is_54g_rtl7(struct ieee80211_network net) 7648 { 7649 return ((net.rates_ex_len > 0) || (net.rates_len > 4)); 7650 } 7651 7652-short ieee80211_is_shortslot(struct ieee80211_network net) 7653+short ieee80211_is_shortslot_rtl7(struct ieee80211_network net) 7654 { 7655 return (net.capability & WLAN_CAPABILITY_SHORT_SLOT); 7656 } 7657@@ -34,28 +34,28 @@ 7658 * tag and the EXTENDED RATE MFIE tag if needed. 7659 * It encludes two bytes per tag for the tag itself and its len 7660 */ 7661-unsigned int ieee80211_MFIE_rate_len(struct ieee80211_device *ieee) 7662+unsigned int ieee80211_MFIE_rate_len_rtl7(struct ieee80211_device *ieee) 7663 { 7664 unsigned int rate_len = 0; 7665- 7666+ 7667 if (ieee->modulation & IEEE80211_CCK_MODULATION) 7668 rate_len = IEEE80211_CCK_RATE_LEN + 2; 7669- 7670+ 7671 if (ieee->modulation & IEEE80211_OFDM_MODULATION) 7672- 7673+ 7674 rate_len += IEEE80211_OFDM_RATE_LEN + 2; 7675- 7676+ 7677 return rate_len; 7678 } 7679 7680-/* pleace the MFIE rate, tag to the memory (double) poined. 7681+/* pleace the MFIE rate, tag to the memory (double) poined. 7682 * Then it updates the pointer so that 7683 * it points after the new MFIE tag added. 7684- */ 7685-void ieee80211_MFIE_Brate(struct ieee80211_device *ieee, u8 **tag_p) 7686+ */ 7687+void ieee80211_MFIE_Brate_rtl7(struct ieee80211_device *ieee, u8 **tag_p) 7688 { 7689- u8 *tag = *tag_p; 7690- 7691+ u8 *tag = *tag_p; 7692+ 7693 if (ieee->modulation & IEEE80211_CCK_MODULATION){ 7694 *tag++ = MFIE_TYPE_RATES; 7695 *tag++ = 4; 7696@@ -64,17 +64,17 @@ 7697 *tag++ = IEEE80211_BASIC_RATE_MASK | IEEE80211_CCK_RATE_5MB; 7698 *tag++ = IEEE80211_BASIC_RATE_MASK | IEEE80211_CCK_RATE_11MB; 7699 } 7700- 7701+ 7702 /* We may add an option for custom rates that specific HW might support */ 7703 *tag_p = tag; 7704 } 7705 7706-void ieee80211_MFIE_Grate(struct ieee80211_device *ieee, u8 **tag_p) 7707-{ 7708- u8 *tag = *tag_p; 7709- 7710+void ieee80211_MFIE_Grate_rtl7(struct ieee80211_device *ieee, u8 **tag_p) 7711+{ 7712+ u8 *tag = *tag_p; 7713+ 7714 if (ieee->modulation & IEEE80211_OFDM_MODULATION){ 7715- 7716+ 7717 *tag++ = MFIE_TYPE_RATES_EX; 7718 *tag++ = 8; 7719 *tag++ = IEEE80211_BASIC_RATE_MASK | IEEE80211_OFDM_RATE_6MB; 7720@@ -85,73 +85,73 @@ 7721 *tag++ = IEEE80211_BASIC_RATE_MASK | IEEE80211_OFDM_RATE_36MB; 7722 *tag++ = IEEE80211_BASIC_RATE_MASK | IEEE80211_OFDM_RATE_48MB; 7723 *tag++ = IEEE80211_BASIC_RATE_MASK | IEEE80211_OFDM_RATE_54MB; 7724- 7725+ 7726 } 7727- 7728+ 7729 /* We may add an option for custom rates that specific HW might support */ 7730 *tag_p = tag; 7731 } 7732 7733-void enqueue_mgmt(struct ieee80211_device *ieee, struct sk_buff *skb) 7734+void enqueue_mgmt_rtl7(struct ieee80211_device *ieee, struct sk_buff *skb) 7735 { 7736 int nh; 7737 nh = (ieee->mgmt_queue_head +1) % MGMT_QUEUE_NUM; 7738- 7739+ 7740 /* 7741 * if the queue is full but we have newer frames then 7742 * just overwrites the oldest. 7743- * 7744+ * 7745 * if (nh == ieee->mgmt_queue_tail) 7746 * return -1; 7747- */ 7748+ */ 7749 ieee->mgmt_queue_head = nh; 7750 ieee->mgmt_queue_ring[nh] = skb; 7751- 7752+ 7753 //return 0; 7754 } 7755 7756-struct sk_buff *dequeue_mgmt(struct ieee80211_device *ieee) 7757+struct sk_buff *dequeue_mgmt_rtl7(struct ieee80211_device *ieee) 7758 { 7759 struct sk_buff *ret; 7760- 7761+ 7762 if(ieee->mgmt_queue_tail == ieee->mgmt_queue_head) 7763 return NULL; 7764- 7765+ 7766 ret = ieee->mgmt_queue_ring[ieee->mgmt_queue_tail]; 7767- 7768- ieee->mgmt_queue_tail = 7769+ 7770+ ieee->mgmt_queue_tail = 7771 (ieee->mgmt_queue_tail+1) % MGMT_QUEUE_NUM; 7772- 7773+ 7774 return ret; 7775 } 7776 7777-void init_mgmt_queue(struct ieee80211_device *ieee) 7778+void init_mgmt_queue_rtl7(struct ieee80211_device *ieee) 7779 { 7780 ieee->mgmt_queue_tail = ieee->mgmt_queue_head = 0; 7781 } 7782 7783 7784-void ieee80211_sta_wakeup(struct ieee80211_device *ieee, short nl); 7785+void ieee80211_sta_wakeup_rtl7(struct ieee80211_device *ieee, short nl); 7786 7787-inline void softmac_mgmt_xmit(struct sk_buff *skb, struct ieee80211_device *ieee) 7788+inline void softmac_mgmt_xmit_rtl7(struct sk_buff *skb, struct ieee80211_device *ieee) 7789 { 7790 unsigned long flags; 7791 short single = ieee->softmac_features & IEEE_SOFTMAC_SINGLE_QUEUE; 7792 struct ieee80211_hdr_3addr *header= 7793 (struct ieee80211_hdr_3addr *) skb->data; 7794- 7795- 7796+ 7797+ 7798 spin_lock_irqsave(&ieee->lock, flags); 7799- 7800+ 7801 /* called with 2nd param 0, no mgmt lock required */ 7802- ieee80211_sta_wakeup(ieee,0); 7803- 7804+ ieee80211_sta_wakeup_rtl7(ieee,0); 7805+ 7806 if(single){ 7807- 7808+ 7809 if(ieee->queue_stop){ 7810- 7811- enqueue_mgmt(ieee,skb); 7812- 7813+ 7814+ enqueue_mgmt_rtl7(ieee,skb); 7815+ 7816 }else{ 7817 header->seq_ctl = cpu_to_le16(ieee->seq_ctrl << 4); 7818 7819@@ -159,119 +159,119 @@ 7820 ieee->seq_ctrl = 0; 7821 else 7822 ieee->seq_ctrl++; 7823- 7824+ 7825 /* avoid watchdog triggers */ 7826 ieee->dev->trans_start = jiffies; 7827 ieee->softmac_data_hard_start_xmit(skb,ieee->dev,ieee->basic_rate); 7828 } 7829- 7830+ 7831 spin_unlock_irqrestore(&ieee->lock, flags); 7832 }else{ 7833 spin_unlock_irqrestore(&ieee->lock, flags); 7834 spin_lock_irqsave(&ieee->mgmt_tx_lock, flags); 7835- 7836+ 7837 header->seq_ctl = cpu_to_le16(ieee->seq_ctrl << 4); 7838- 7839+ 7840 if (ieee->seq_ctrl == 0xFFF) 7841 ieee->seq_ctrl = 0; 7842 else 7843 ieee->seq_ctrl++; 7844- 7845+ 7846 ieee->softmac_hard_start_xmit(skb,ieee->dev); 7847- 7848+ 7849 spin_unlock_irqrestore(&ieee->mgmt_tx_lock, flags); 7850 } 7851 } 7852 7853 7854-inline void softmac_ps_mgmt_xmit(struct sk_buff *skb, struct ieee80211_device *ieee) 7855+inline void softmac_ps_mgmt_xmit_rtl7(struct sk_buff *skb, struct ieee80211_device *ieee) 7856 { 7857- 7858+ 7859 short single = ieee->softmac_features & IEEE_SOFTMAC_SINGLE_QUEUE; 7860 struct ieee80211_hdr_3addr *header = 7861 (struct ieee80211_hdr_3addr *) skb->data; 7862- 7863- 7864+ 7865+ 7866 if(single){ 7867- 7868+ 7869 header->seq_ctl = cpu_to_le16(ieee->seq_ctrl << 4); 7870 7871 if (ieee->seq_ctrl == 0xFFF) 7872 ieee->seq_ctrl = 0; 7873 else 7874 ieee->seq_ctrl++; 7875- 7876+ 7877 /* avoid watchdog triggers */ 7878 ieee->dev->trans_start = jiffies; 7879 ieee->softmac_data_hard_start_xmit(skb,ieee->dev,ieee->basic_rate); 7880- 7881+ 7882 }else{ 7883- 7884+ 7885 header->seq_ctl = cpu_to_le16(ieee->seq_ctrl << 4); 7886- 7887+ 7888 if (ieee->seq_ctrl == 0xFFF) 7889 ieee->seq_ctrl = 0; 7890 else 7891 ieee->seq_ctrl++; 7892 7893 ieee->softmac_hard_start_xmit(skb,ieee->dev); 7894- 7895+ 7896 } 7897 } 7898 7899-inline struct sk_buff *ieee80211_probe_req(struct ieee80211_device *ieee) 7900+inline struct sk_buff *ieee80211_probe_req_rtl7(struct ieee80211_device *ieee) 7901 { 7902 unsigned int len,rate_len; 7903 u8 *tag; 7904 struct sk_buff *skb; 7905 struct ieee80211_probe_request *req; 7906- 7907+ 7908 len = ieee->current_network.ssid_len; 7909- 7910- rate_len = ieee80211_MFIE_rate_len(ieee); 7911- 7912+ 7913+ rate_len = ieee80211_MFIE_rate_len_rtl7(ieee); 7914+ 7915 skb = dev_alloc_skb(sizeof(struct ieee80211_probe_request) + 7916 2 + len + rate_len); 7917- 7918- if (!skb) 7919+ 7920+ if (!skb) 7921 return NULL; 7922- 7923+ 7924 req = (struct ieee80211_probe_request *) skb_put(skb,sizeof(struct ieee80211_probe_request)); 7925 req->header.frame_ctl = cpu_to_le16(IEEE80211_STYPE_PROBE_REQ); 7926- req->header.duration_id = 0; //FIXME: is this OK ? 7927- 7928+ req->header.duration_id = 0; //FIXME: is this OK ? 7929+ 7930 memset(req->header.addr1, 0xff, ETH_ALEN); 7931 memcpy(req->header.addr2, ieee->dev->dev_addr, ETH_ALEN); 7932 memset(req->header.addr3, 0xff, ETH_ALEN); 7933- 7934+ 7935 tag = (u8 *) skb_put(skb,len+2+rate_len); 7936- 7937+ 7938 *tag++ = MFIE_TYPE_SSID; 7939 *tag++ = len; 7940 memcpy(tag, ieee->current_network.ssid, len); 7941 tag += len; 7942- 7943- ieee80211_MFIE_Brate(ieee,&tag); 7944- ieee80211_MFIE_Grate(ieee,&tag); 7945+ 7946+ ieee80211_MFIE_Brate_rtl7(ieee,&tag); 7947+ ieee80211_MFIE_Grate_rtl7(ieee,&tag); 7948 return skb; 7949 } 7950 7951-struct sk_buff *ieee80211_get_beacon_(struct ieee80211_device *ieee); 7952-void ieee80211_send_beacon(struct ieee80211_device *ieee) 7953+struct sk_buff *ieee80211_get_beacon__rtl7(struct ieee80211_device *ieee); 7954+void ieee80211_send_beacon_rtl7(struct ieee80211_device *ieee) 7955 { 7956 struct sk_buff *skb; 7957- 7958- unsigned long flags; 7959- 7960- skb = ieee80211_get_beacon_(ieee); 7961+ 7962+ unsigned long flags; 7963+ 7964+ skb = ieee80211_get_beacon__rtl7(ieee); 7965 if (skb){ 7966- softmac_mgmt_xmit(skb, ieee); 7967+ softmac_mgmt_xmit_rtl7(skb, ieee); 7968 ieee->softmac_stats.tx_beacons++; 7969 } 7970 7971- ieee->beacon_timer.expires = jiffies + 7972+ ieee->beacon_timer.expires = jiffies + 7973 (MSECS( ieee->current_network.beacon_interval -5)); 7974- 7975+ 7976 spin_lock_irqsave(&ieee->beacon_lock,flags); 7977 if(ieee->beacon_txing) 7978 add_timer(&ieee->beacon_timer); 7979@@ -279,57 +279,57 @@ 7980 } 7981 7982 7983-void ieee80211_send_beacon_cb(unsigned long _ieee) 7984+void ieee80211_send_beacon_cb_rtl7(unsigned long _ieee) 7985 { 7986 struct ieee80211_device *ieee = 7987 (struct ieee80211_device *) _ieee; 7988- ieee80211_send_beacon(ieee); 7989+ ieee80211_send_beacon_rtl7(ieee); 7990 } 7991 7992 7993-void ieee80211_send_probe(struct ieee80211_device *ieee) 7994+void ieee80211_send_probe_rtl7(struct ieee80211_device *ieee) 7995 { 7996 struct sk_buff *skb; 7997- 7998- skb = ieee80211_probe_req(ieee); 7999+ 8000+ skb = ieee80211_probe_req_rtl7(ieee); 8001 if (skb){ 8002- softmac_mgmt_xmit(skb, ieee); 8003+ softmac_mgmt_xmit_rtl7(skb, ieee); 8004 ieee->softmac_stats.tx_probe_rq++; 8005 } 8006 } 8007 8008-void ieee80211_send_probe_requests(struct ieee80211_device *ieee) 8009+void ieee80211_send_probe_requests_rtl7(struct ieee80211_device *ieee) 8010 { 8011 if (ieee->active_scan && (ieee->softmac_features & IEEE_SOFTMAC_PROBERQ)){ 8012- ieee80211_send_probe(ieee); 8013- ieee80211_send_probe(ieee); 8014+ ieee80211_send_probe_rtl7(ieee); 8015+ ieee80211_send_probe_rtl7(ieee); 8016 } 8017 } 8018 8019 /* this performs syncro scan blocking the caller until all channels 8020- * in the allowed channel map has been checked. 8021+ * in the allowed channel map has been checked. 8022 */ 8023-void ieee80211_softmac_scan_syncro(struct ieee80211_device *ieee) 8024+void ieee80211_softmac_scan_syncro_rtl7(struct ieee80211_device *ieee) 8025 { 8026 short ch = 0; 8027- 8028+ 8029 down(&ieee->scan_sem); 8030- 8031+ 8032 while(1) 8033 { 8034- 8035+ 8036 do{ 8037 ch++; 8038- if (ch > MAX_CHANNEL_NUMBER) 8039+ if (ch > MAX_CHANNEL_NUMBER) 8040 goto out; /* scan completed */ 8041- 8042+ 8043 }while(!ieee->channel_map[ch]); 8044- 8045+ 8046 /* this fuction can be called in two situations 8047 * 1- We have switched to ad-hoc mode and we are 8048 * performing a complete syncro scan before conclude 8049- * there are no interesting cell and to create a 8050- * new one. In this case the link state is 8051+ * there are no interesting cell and to create a 8052+ * new one. In this case the link state is 8053 * IEEE80211_NOLINK until we found an interesting cell. 8054 * If so the ieee8021_new_net, called by the RX path 8055 * will set the state to IEEE80211_LINKED, so we stop 8056@@ -342,24 +342,24 @@ 8057 * not filter RX frames and the channel is changing. 8058 * So the only situation in witch are interested is to check 8059 * if the state become LINKED because of the #1 situation 8060- */ 8061- 8062+ */ 8063+ 8064 if (ieee->state == IEEE80211_LINKED) 8065 goto out; 8066- 8067+ 8068 ieee->set_chan(ieee->dev, ch); 8069- 8070- ieee80211_send_probe_requests(ieee); 8071- 8072+ 8073+ ieee80211_send_probe_requests_rtl7(ieee); 8074+ 8075 /* this prevent excessive time wait when we 8076 * need to wait for a syncro scan to end.. 8077- */ 8078+ */ 8079 if (ieee->sync_scan_hurryup) 8080 goto out; 8081 8082 8083 msleep_interruptible_rtl(IEEE80211_SOFTMAC_SCAN_TIME); 8084- 8085+ 8086 } 8087 out: 8088 ieee->sync_scan_hurryup = 0; 8089@@ -370,43 +370,49 @@ 8090 void ieee80211_softmac_scan(struct ieee80211_device *ieee) 8091 { 8092 short watchdog = 0; 8093- 8094+ 8095 do{ 8096- ieee->current_network.channel = 8097+ ieee->current_network.channel = 8098 (ieee->current_network.channel + 1) % MAX_CHANNEL_NUMBER; 8099- if (watchdog++ > MAX_CHANNEL_NUMBER) 8100+ if (watchdog++ > MAX_CHANNEL_NUMBER) 8101 return; /* no good chans */ 8102- 8103+ 8104 }while(!ieee->channel_map[ieee->current_network.channel]); 8105- 8106+ 8107 8108 schedule_work(&ieee->softmac_scan_wq); 8109 } 8110 #endif 8111 8112-void ieee80211_softmac_scan_wq(struct ieee80211_device *ieee) 8113-{ 8114- down(&ieee->scan_sem); 8115- 8116+# if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)) 8117+void ieee80211_softmac_scan_wq_rtl7(struct work_struct *work) 8118+{ 8119+ struct delayed_work *dwork = container_of(work, struct delayed_work, work); 8120+ struct ieee80211_device *ieee = container_of(dwork, struct ieee80211_device, softmac_scan_wq); 8121+#else 8122+void ieee80211_softmac_scan_wq_rtl7(struct ieee80211_device *ieee) 8123+{ 8124+#endif 8125 short watchdog = 0; 8126- 8127+ down(&ieee->scan_sem); 8128+ 8129 do{ 8130- ieee->current_network.channel = 8131+ ieee->current_network.channel = 8132 (ieee->current_network.channel + 1) % MAX_CHANNEL_NUMBER; 8133- if (watchdog++ > MAX_CHANNEL_NUMBER) 8134+ if (watchdog++ > MAX_CHANNEL_NUMBER) 8135 goto out; /* no good chans */ 8136- 8137+ 8138 }while(!ieee->channel_map[ieee->current_network.channel]); 8139- 8140+ 8141 if (ieee->scanning == 0 ) 8142 goto out; 8143- 8144+ 8145 ieee->set_chan(ieee->dev, ieee->current_network.channel); 8146- ieee80211_send_probe_requests(ieee); 8147+ ieee80211_send_probe_requests_rtl7(ieee); 8148 8149-#if 0 8150+#if 0 8151 ieee->.expires = jiffies + (IEEE80211_SOFTMAC_SCAN_TIME); 8152- if (ieee->scanning == 1) 8153+ if (ieee->scanning == 1) 8154 add_timer(&ieee->scan_timer); 8155 #endif 8156 queue_delayed_work(ieee->wq, &ieee->softmac_scan_wq, IEEE80211_SOFTMAC_SCAN_TIME); 8157@@ -419,7 +425,7 @@ 8158 { 8159 unsigned long flags; 8160 struct ieee80211_device *ieee = (struct ieee80211_device *)_dev; 8161- 8162+ 8163 spin_lock_irqsave(&ieee->lock, flags); 8164 ieee80211_softmac_scan(ieee); 8165 spin_unlock_irqrestore(&ieee->lock, flags); 8166@@ -427,19 +433,19 @@ 8167 #endif 8168 8169 8170-void ieee80211_beacons_start(struct ieee80211_device *ieee) 8171+void ieee80211_beacons_start_rtl7(struct ieee80211_device *ieee) 8172 { 8173- unsigned long flags; 8174+ unsigned long flags; 8175 8176 spin_lock_irqsave(&ieee->beacon_lock,flags); 8177 8178 ieee->beacon_txing = 1; 8179- ieee80211_send_beacon(ieee); 8180- 8181+ ieee80211_send_beacon_rtl7(ieee); 8182+ 8183 spin_unlock_irqrestore(&ieee->beacon_lock,flags); 8184 } 8185 8186-void ieee80211_beacons_stop(struct ieee80211_device *ieee) 8187+void ieee80211_beacons_stop_rtl7(struct ieee80211_device *ieee) 8188 { 8189 unsigned long flags; 8190 8191@@ -453,111 +459,111 @@ 8192 } 8193 8194 8195-void ieee80211_stop_send_beacons(struct ieee80211_device *ieee) 8196+void ieee80211_stop_send_beacons_rtl7(struct ieee80211_device *ieee) 8197 { 8198 if(ieee->stop_send_beacons) 8199 ieee->stop_send_beacons(ieee->dev); 8200 if (ieee->softmac_features & IEEE_SOFTMAC_BEACONS) 8201- ieee80211_beacons_stop(ieee); 8202+ ieee80211_beacons_stop_rtl7(ieee); 8203 } 8204 8205 8206-void ieee80211_start_send_beacons(struct ieee80211_device *ieee) 8207+void ieee80211_start_send_beacons_rtl7(struct ieee80211_device *ieee) 8208 { 8209 if(ieee->start_send_beacons) 8210 ieee->start_send_beacons(ieee->dev); 8211 if(ieee->softmac_features & IEEE_SOFTMAC_BEACONS) 8212- ieee80211_beacons_start(ieee); 8213+ ieee80211_beacons_start_rtl7(ieee); 8214 } 8215 8216 8217-void ieee80211_softmac_stop_scan(struct ieee80211_device *ieee) 8218+void ieee80211_softmac_stop_scan_rtl7(struct ieee80211_device *ieee) 8219 { 8220-// unsigned long flags; 8221- 8222+// unsigned long flags; 8223+ 8224 //ieee->sync_scan_hurryup = 1; 8225- 8226+ 8227 down(&ieee->scan_sem); 8228 // spin_lock_irqsave(&ieee->lock, flags); 8229- 8230+ 8231 if (ieee->scanning == 1){ 8232 ieee->scanning = 0; 8233 //del_timer_sync(&ieee->scan_timer); 8234 cancel_delayed_work(&ieee->softmac_scan_wq); 8235 } 8236- 8237+ 8238 // spin_unlock_irqrestore(&ieee->lock, flags); 8239 up(&ieee->scan_sem); 8240 } 8241 8242-void ieee80211_stop_scan(struct ieee80211_device *ieee) 8243+void ieee80211_stop_scan_rtl7(struct ieee80211_device *ieee) 8244 { 8245 if (ieee->softmac_features & IEEE_SOFTMAC_SCAN) 8246- ieee80211_softmac_stop_scan(ieee); 8247+ ieee80211_softmac_stop_scan_rtl7(ieee); 8248 else 8249 ieee->stop_scan(ieee->dev); 8250 } 8251 8252 /* called with ieee->lock held */ 8253-void ieee80211_start_scan(struct ieee80211_device *ieee) 8254+void ieee80211_start_scan_rtl7(struct ieee80211_device *ieee) 8255 { 8256- if (ieee->softmac_features & IEEE_SOFTMAC_SCAN){ 8257+ if (ieee->softmac_features & IEEE_SOFTMAC_SCAN){ 8258 if (ieee->scanning == 0){ 8259 ieee->scanning = 1; 8260 //ieee80211_softmac_scan(ieee); 8261- queue_work(ieee->wq, &ieee->softmac_scan_wq); 8262+ queue_delayed_work(ieee->wq, &ieee->softmac_scan_wq, 0); 8263 } 8264 }else 8265 ieee->start_scan(ieee->dev); 8266- 8267+ 8268 } 8269 8270 /* called with wx_sem held */ 8271-void ieee80211_start_scan_syncro(struct ieee80211_device *ieee) 8272+void ieee80211_start_scan_syncro_rtl7(struct ieee80211_device *ieee) 8273 { 8274 ieee->sync_scan_hurryup = 0; 8275- 8276+ 8277 if (ieee->softmac_features & IEEE_SOFTMAC_SCAN) 8278- ieee80211_softmac_scan_syncro(ieee); 8279+ ieee80211_softmac_scan_syncro_rtl7(ieee); 8280 else 8281 ieee->scan_syncro(ieee->dev); 8282- 8283+ 8284 } 8285 8286-inline struct sk_buff *ieee80211_authentication_req(struct ieee80211_network *beacon, 8287+inline struct sk_buff *ieee80211_authentication_req_rtl7(struct ieee80211_network *beacon, 8288 struct ieee80211_device *ieee, int challengelen) 8289 { 8290- struct sk_buff *skb; 8291+ struct sk_buff *skb; 8292 struct ieee80211_authentication *auth; 8293- 8294- skb = dev_alloc_skb(sizeof(struct ieee80211_authentication) + challengelen); 8295- 8296+ 8297+ skb = dev_alloc_skb(sizeof(struct ieee80211_authentication) + challengelen); 8298+ 8299 if (!skb) return NULL; 8300- 8301+ 8302 auth = (struct ieee80211_authentication *) 8303 skb_put(skb, sizeof(struct ieee80211_authentication)); 8304- 8305+ 8306 auth->header.frame_ctl = IEEE80211_STYPE_AUTH; 8307 if (challengelen) auth->header.frame_ctl |= IEEE80211_FCTL_WEP; 8308- 8309+ 8310 auth->header.duration_id = 0x013a; //FIXME 8311- 8312+ 8313 memcpy(auth->header.addr1, beacon->bssid, ETH_ALEN); 8314 memcpy(auth->header.addr2, ieee->dev->dev_addr, ETH_ALEN); 8315 memcpy(auth->header.addr3, beacon->bssid, ETH_ALEN); 8316- 8317+ 8318 auth->algorithm = ieee->open_wep ? WLAN_AUTH_OPEN : WLAN_AUTH_SHARED_KEY; 8319- 8320+ 8321 auth->transaction = cpu_to_le16(ieee->associate_seq); 8322 ieee->associate_seq++; 8323- 8324+ 8325 auth->status = cpu_to_le16(WLAN_STATUS_SUCCESS); 8326- 8327+ 8328 return skb; 8329- 8330+ 8331 } 8332 8333-static struct sk_buff* ieee80211_probe_resp(struct ieee80211_device *ieee, u8 *dest) 8334+static struct sk_buff* ieee80211_probe_resp_rtl7(struct ieee80211_device *ieee, u8 *dest) 8335 { 8336 u8 *tag; 8337 int beacon_size; 8338@@ -566,23 +572,23 @@ 8339 int encrypt; 8340 int atim_len,erp_len; 8341 struct ieee80211_crypt_data* crypt; 8342- 8343+ 8344 char *ssid = ieee->current_network.ssid; 8345 int ssid_len = ieee->current_network.ssid_len; 8346 int rate_len = ieee->current_network.rates_len+2; 8347 int rate_ex_len = ieee->current_network.rates_ex_len; 8348 if(rate_ex_len > 0) rate_ex_len+=2; 8349- 8350+ 8351 if(ieee->current_network.capability & WLAN_CAPABILITY_IBSS) 8352 atim_len = 4; 8353 else 8354 atim_len = 0; 8355- 8356- if(ieee80211_is_54g(ieee->current_network)) 8357+ 8358+ if(ieee80211_is_54g_rtl7(ieee->current_network)) 8359 erp_len = 3; 8360 else 8361 erp_len = 0; 8362- 8363+ 8364 beacon_size = sizeof(struct ieee80211_probe_response)+ 8365 ssid_len 8366 +3 //channel 8367@@ -590,72 +596,72 @@ 8368 +rate_ex_len 8369 +atim_len 8370 +erp_len; 8371- 8372+ 8373 skb = dev_alloc_skb(beacon_size); 8374- 8375- if (!skb) 8376+ 8377+ if (!skb) 8378 return NULL; 8379- 8380+ 8381 beacon_buf = (struct ieee80211_probe_response*) skb_put(skb, beacon_size); 8382- 8383+ 8384 memcpy (beacon_buf->header.addr1, dest,ETH_ALEN); 8385 memcpy (beacon_buf->header.addr2, ieee->dev->dev_addr, ETH_ALEN); 8386 memcpy (beacon_buf->header.addr3, ieee->current_network.bssid, ETH_ALEN); 8387 8388 beacon_buf->header.duration_id = 0; //FIXME 8389- beacon_buf->beacon_interval = 8390+ beacon_buf->beacon_interval = 8391 cpu_to_le16(ieee->current_network.beacon_interval); 8392- beacon_buf->capability = 8393+ beacon_buf->capability = 8394 cpu_to_le16(ieee->current_network.capability & WLAN_CAPABILITY_IBSS); 8395- 8396+ 8397 if(ieee->short_slot && (ieee->current_network.capability & WLAN_CAPABILITY_SHORT_SLOT)) 8398- cpu_to_le16((beacon_buf->capability |= WLAN_CAPABILITY_SHORT_SLOT)); 8399- 8400+ cpu_to_le16((beacon_buf->capability |= WLAN_CAPABILITY_SHORT_SLOT)); 8401+ 8402 crypt = ieee->crypt[ieee->tx_keyidx]; 8403 8404- encrypt = ieee->host_encrypt && crypt && crypt->ops && 8405+ encrypt = ieee->host_encrypt && crypt && crypt->ops && 8406 (0 == strcmp(crypt->ops->name, "WEP")); 8407 8408- if (encrypt) 8409+ if (encrypt) 8410 beacon_buf->capability |= cpu_to_le16(WLAN_CAPABILITY_PRIVACY); 8411- 8412- 8413+ 8414+ 8415 beacon_buf->header.frame_ctl = cpu_to_le16(IEEE80211_STYPE_PROBE_RESP); 8416- 8417- beacon_buf->info_element.id = MFIE_TYPE_SSID; 8418+ 8419+ beacon_buf->info_element.id = MFIE_TYPE_SSID; 8420 beacon_buf->info_element.len = ssid_len; 8421- 8422+ 8423 tag = (u8*) beacon_buf->info_element.data; 8424- 8425+ 8426 memcpy(tag, ssid, ssid_len); 8427- 8428+ 8429 tag += ssid_len; 8430- 8431+ 8432 *(tag++) = MFIE_TYPE_RATES; 8433- *(tag++) = rate_len-2; 8434+ *(tag++) = rate_len-2; 8435 memcpy(tag,ieee->current_network.rates,rate_len-2); 8436 tag+=rate_len-2; 8437- 8438+ 8439 *(tag++) = MFIE_TYPE_DS_SET; 8440 *(tag++) = 1; 8441 *(tag++) = ieee->current_network.channel; 8442- 8443+ 8444 if(atim_len){ 8445 *(tag++) = MFIE_TYPE_IBSS_SET; 8446 *(tag++) = 2; 8447 *((u16*)(tag)) = cpu_to_le16(ieee->current_network.atim_window); 8448 tag+=2; 8449 } 8450- 8451+ 8452 if(erp_len){ 8453 *(tag++) = MFIE_TYPE_ERP; 8454 *(tag++) = 1; 8455- *(tag++) = 0; 8456+ *(tag++) = 0; 8457 } 8458- 8459+ 8460 if(rate_ex_len){ 8461 *(tag++) = MFIE_TYPE_RATES_EX; 8462- *(tag++) = rate_ex_len-2; 8463+ *(tag++) = rate_ex_len-2; 8464 memcpy(tag,ieee->current_network.rates_ex,rate_ex_len-2); 8465 tag+=rate_ex_len-2; 8466 } 8467@@ -664,208 +670,208 @@ 8468 } 8469 8470 8471-struct sk_buff* ieee80211_assoc_resp(struct ieee80211_device *ieee, u8 *dest) 8472+struct sk_buff* ieee80211_assoc_resp_rtl7(struct ieee80211_device *ieee, u8 *dest) 8473 { 8474 struct sk_buff *skb; 8475 u8* tag; 8476- 8477+ 8478 struct ieee80211_crypt_data* crypt; 8479 struct ieee80211_assoc_response_frame *assoc; 8480 short encrypt; 8481- 8482- unsigned int rate_len = ieee80211_MFIE_rate_len(ieee); 8483+ 8484+ unsigned int rate_len = ieee80211_MFIE_rate_len_rtl7(ieee); 8485 int len = sizeof(struct ieee80211_assoc_response_frame) + rate_len; 8486- 8487- skb = dev_alloc_skb(len); 8488- 8489- if (!skb) 8490+ 8491+ skb = dev_alloc_skb(len); 8492+ 8493+ if (!skb) 8494 return NULL; 8495- 8496+ 8497 assoc = (struct ieee80211_assoc_response_frame *) 8498 skb_put(skb,sizeof(struct ieee80211_assoc_response_frame)); 8499- 8500+ 8501 assoc->header.frame_ctl = cpu_to_le16(IEEE80211_STYPE_ASSOC_RESP); 8502 memcpy(assoc->header.addr1, dest,ETH_ALEN); 8503 memcpy(assoc->header.addr3, ieee->dev->dev_addr, ETH_ALEN); 8504 memcpy(assoc->header.addr2, ieee->dev->dev_addr, ETH_ALEN); 8505- assoc->capability = cpu_to_le16(ieee->iw_mode == IW_MODE_MASTER ? 8506+ assoc->capability = cpu_to_le16(ieee->iw_mode == IW_MODE_MASTER ? 8507 WLAN_CAPABILITY_BSS : WLAN_CAPABILITY_IBSS); 8508- 8509- 8510+ 8511+ 8512 if(ieee->short_slot) 8513 assoc->capability |= cpu_to_le16(WLAN_CAPABILITY_SHORT_SLOT); 8514- 8515+ 8516 if (ieee->host_encrypt) 8517 crypt = ieee->crypt[ieee->tx_keyidx]; 8518 else crypt = NULL; 8519- 8520+ 8521 encrypt = ( crypt && crypt->ops); 8522- 8523+ 8524 if (encrypt) 8525 assoc->capability |= cpu_to_le16(WLAN_CAPABILITY_PRIVACY); 8526- 8527+ 8528 assoc->status = 0; 8529 assoc->aid = cpu_to_le16(ieee->assoc_id); 8530 if (ieee->assoc_id == 0x2007) ieee->assoc_id=0; 8531 else ieee->assoc_id++; 8532- 8533+ 8534 tag = (u8*) skb_put(skb, rate_len); 8535- 8536- ieee80211_MFIE_Brate(ieee, &tag); 8537- ieee80211_MFIE_Grate(ieee, &tag); 8538- 8539+ 8540+ ieee80211_MFIE_Brate_rtl7(ieee, &tag); 8541+ ieee80211_MFIE_Grate_rtl7(ieee, &tag); 8542+ 8543 return skb; 8544 } 8545 8546-struct sk_buff* ieee80211_auth_resp(struct ieee80211_device *ieee,int status, u8 *dest) 8547+struct sk_buff* ieee80211_auth_resp_rtl7(struct ieee80211_device *ieee,int status, u8 *dest) 8548 { 8549 struct sk_buff *skb; 8550 struct ieee80211_authentication *auth; 8551- 8552- skb = dev_alloc_skb(sizeof(struct ieee80211_authentication)+1); 8553- 8554- if (!skb) 8555+ 8556+ skb = dev_alloc_skb(sizeof(struct ieee80211_authentication)+1); 8557+ 8558+ if (!skb) 8559 return NULL; 8560- 8561+ 8562 skb->len = sizeof(struct ieee80211_authentication); 8563- 8564+ 8565 auth = (struct ieee80211_authentication *)skb->data; 8566- 8567+ 8568 auth->status = cpu_to_le16(status); 8569 auth->transaction = cpu_to_le16(2); 8570 auth->algorithm = cpu_to_le16(WLAN_AUTH_OPEN); 8571- 8572+ 8573 memcpy(auth->header.addr3, ieee->dev->dev_addr, ETH_ALEN); 8574 memcpy(auth->header.addr2, ieee->dev->dev_addr, ETH_ALEN); 8575 memcpy(auth->header.addr1, dest, ETH_ALEN); 8576- auth->header.frame_ctl = cpu_to_le16(IEEE80211_STYPE_AUTH); 8577+ auth->header.frame_ctl = cpu_to_le16(IEEE80211_STYPE_AUTH); 8578 return skb; 8579- 8580- 8581+ 8582+ 8583 } 8584 8585-struct sk_buff* ieee80211_null_func(struct ieee80211_device *ieee,short pwr) 8586+struct sk_buff* ieee80211_null_func_rtl7(struct ieee80211_device *ieee,short pwr) 8587 { 8588 struct sk_buff *skb; 8589 struct ieee80211_hdr_3addr* hdr; 8590- 8591- skb = dev_alloc_skb(sizeof(struct ieee80211_hdr_3addr)); 8592- 8593- if (!skb) 8594+ 8595+ skb = dev_alloc_skb(sizeof(struct ieee80211_hdr_3addr)); 8596+ 8597+ if (!skb) 8598 return NULL; 8599- 8600+ 8601 hdr = (struct ieee80211_hdr_3addr*)skb_put(skb,sizeof(struct ieee80211_hdr_3addr)); 8602- 8603+ 8604 memcpy(hdr->addr1, ieee->current_network.bssid, ETH_ALEN); 8605 memcpy(hdr->addr2, ieee->dev->dev_addr, ETH_ALEN); 8606 memcpy(hdr->addr3, ieee->current_network.bssid, ETH_ALEN); 8607- 8608- hdr->frame_ctl = cpu_to_le16(IEEE80211_FTYPE_DATA | 8609- IEEE80211_STYPE_NULLFUNC | IEEE80211_FCTL_TODS | 8610- (pwr ? IEEE80211_FCTL_PM:0)); 8611- 8612+ 8613+ hdr->frame_ctl = cpu_to_le16(IEEE80211_FTYPE_DATA | 8614+ IEEE80211_STYPE_NULLFUNC | IEEE80211_FCTL_TODS | 8615+ (pwr ? IEEE80211_FCTL_PM:0)); 8616+ 8617 return skb; 8618- 8619- 8620+ 8621+ 8622 } 8623 8624 8625-void ieee80211_resp_to_assoc_rq(struct ieee80211_device *ieee, u8* dest) 8626+void ieee80211_resp_to_assoc_rq_rtl7(struct ieee80211_device *ieee, u8* dest) 8627 { 8628- struct sk_buff *buf = ieee80211_assoc_resp(ieee, dest); 8629- 8630+ struct sk_buff *buf = ieee80211_assoc_resp_rtl7(ieee, dest); 8631+ 8632 if (buf) 8633- softmac_mgmt_xmit(buf, ieee); 8634+ softmac_mgmt_xmit_rtl7(buf, ieee); 8635 } 8636 8637 8638-void ieee80211_resp_to_auth(struct ieee80211_device *ieee, int s, u8* dest) 8639+void ieee80211_resp_to_auth_rtl7(struct ieee80211_device *ieee, int s, u8* dest) 8640 { 8641- struct sk_buff *buf = ieee80211_auth_resp(ieee, s, dest); 8642- 8643+ struct sk_buff *buf = ieee80211_auth_resp_rtl7(ieee, s, dest); 8644+ 8645 if (buf) 8646- softmac_mgmt_xmit(buf, ieee); 8647+ softmac_mgmt_xmit_rtl7(buf, ieee); 8648 } 8649 8650 8651-void ieee80211_resp_to_probe(struct ieee80211_device *ieee, u8 *dest) 8652+void ieee80211_resp_to_probe_rtl7(struct ieee80211_device *ieee, u8 *dest) 8653 { 8654- 8655- struct sk_buff *buf = ieee80211_probe_resp(ieee, dest); 8656- 8657- if (buf) 8658- softmac_mgmt_xmit(buf, ieee); 8659+ 8660+ struct sk_buff *buf = ieee80211_probe_resp_rtl7(ieee, dest); 8661+ 8662+ if (buf) 8663+ softmac_mgmt_xmit_rtl7(buf, ieee); 8664 } 8665 8666 8667-inline struct sk_buff *ieee80211_association_req(struct ieee80211_network *beacon,struct ieee80211_device *ieee) 8668+inline struct sk_buff *ieee80211_association_req_rtl7(struct ieee80211_network *beacon,struct ieee80211_device *ieee) 8669 { 8670 struct sk_buff *skb; 8671- 8672+ 8673 struct ieee80211_assoc_request_frame *hdr; 8674 u8 *tag; 8675- 8676+ 8677 unsigned int wpa_len = beacon->wpa_ie_len; 8678- 8679- unsigned int rate_len = ieee80211_MFIE_rate_len(ieee); 8680- 8681- 8682- 8683+ 8684+ unsigned int rate_len = ieee80211_MFIE_rate_len_rtl7(ieee); 8685+ 8686+ 8687+ 8688 int len=sizeof(struct ieee80211_assoc_request_frame)+ 8689 + beacon->ssid_len//essid tagged val 8690 + rate_len//rates tagged val 8691 + wpa_len; 8692- 8693+ 8694 skb = dev_alloc_skb(len); 8695- 8696- if (!skb) 8697+ 8698+ if (!skb) 8699 return NULL; 8700- 8701+ 8702 hdr = (struct ieee80211_assoc_request_frame *) 8703 skb_put(skb, sizeof(struct ieee80211_assoc_request_frame)); 8704- 8705- 8706+ 8707+ 8708 hdr->header.frame_ctl = IEEE80211_STYPE_ASSOC_REQ; 8709 hdr->header.duration_id= 37; //FIXME 8710 memcpy(hdr->header.addr1, beacon->bssid, ETH_ALEN); 8711 memcpy(hdr->header.addr2, ieee->dev->dev_addr, ETH_ALEN); 8712 memcpy(hdr->header.addr3, beacon->bssid, ETH_ALEN); 8713- 8714+ 8715 hdr->capability = cpu_to_le16(WLAN_CAPABILITY_BSS); 8716- if (beacon->capability & WLAN_CAPABILITY_PRIVACY ) 8717+ if (beacon->capability & WLAN_CAPABILITY_PRIVACY ) 8718 hdr->capability |= cpu_to_le16(WLAN_CAPABILITY_PRIVACY); 8719- 8720+ 8721 if(ieee->short_slot) 8722 hdr->capability |= cpu_to_le16(WLAN_CAPABILITY_SHORT_SLOT); 8723- 8724+ 8725 hdr->listen_interval = 0xa; //FIXME 8726- 8727+ 8728 hdr->info_element.id = MFIE_TYPE_SSID; 8729 8730 hdr->info_element.len = beacon->ssid_len; 8731 tag = skb_put(skb, beacon->ssid_len); 8732 memcpy(tag, beacon->ssid, beacon->ssid_len); 8733- 8734- tag = skb_put(skb, rate_len); 8735- 8736- ieee80211_MFIE_Brate(ieee, &tag); 8737- ieee80211_MFIE_Grate(ieee, &tag); 8738- 8739+ 8740+ tag = skb_put(skb, rate_len); 8741+ 8742+ ieee80211_MFIE_Brate_rtl7(ieee, &tag); 8743+ ieee80211_MFIE_Grate_rtl7(ieee, &tag); 8744+ 8745 tag = skb_put(skb,wpa_len); 8746- 8747+ 8748 memcpy(tag,beacon->wpa_ie,wpa_len); 8749- 8750+ 8751 return skb; 8752 } 8753 8754-void ieee80211_associate_abort(struct ieee80211_device *ieee) 8755+void ieee80211_associate_abort_rtl7(struct ieee80211_device *ieee) 8756 { 8757- 8758+ 8759 unsigned long flags; 8760 spin_lock_irqsave(&ieee->lock, flags); 8761- 8762+ 8763 ieee->associate_seq++; 8764- 8765+ 8766 /* don't scan, and avoid to have the RX path possibily 8767 * try again to associate. Even do not react to AUTH or 8768 * ASSOC response. Just wait for the retry wq to be scheduled. 8769@@ -873,103 +879,109 @@ 8770 * with, so we retry or just get back to NO_LINK and scanning 8771 */ 8772 if (ieee->state == IEEE80211_ASSOCIATING_AUTHENTICATING){ 8773- IEEE80211_DEBUG_MGMT("Authentication failed\n"); 8774+ IEEE80211_DEBUG_MGMT("Authentication failed\n"); 8775 ieee->softmac_stats.no_auth_rs++; 8776 }else{ 8777- IEEE80211_DEBUG_MGMT("Association failed\n"); 8778+ IEEE80211_DEBUG_MGMT("Association failed\n"); 8779 ieee->softmac_stats.no_ass_rs++; 8780 } 8781- 8782+ 8783 ieee->state = IEEE80211_ASSOCIATING_RETRY; 8784- 8785+ 8786 queue_delayed_work(ieee->wq, &ieee->associate_retry_wq, IEEE80211_SOFTMAC_ASSOC_RETRY_TIME); 8787- 8788+ 8789 spin_unlock_irqrestore(&ieee->lock, flags); 8790 } 8791 8792-void ieee80211_associate_abort_cb(unsigned long dev) 8793+void ieee80211_associate_abort_cb_rtl7(unsigned long dev) 8794 { 8795- ieee80211_associate_abort((struct ieee80211_device *) dev); 8796+ ieee80211_associate_abort_rtl7((struct ieee80211_device *) dev); 8797 } 8798 8799 8800-void ieee80211_associate_step1(struct ieee80211_device *ieee) 8801+void ieee80211_associate_step1_rtl7(struct ieee80211_device *ieee) 8802 { 8803 struct ieee80211_network *beacon = &ieee->current_network; 8804 struct sk_buff *skb; 8805- 8806+ 8807 IEEE80211_DEBUG_MGMT("Stopping scan\n"); 8808- 8809+ 8810 ieee->softmac_stats.tx_auth_rq++; 8811- skb=ieee80211_authentication_req(beacon, ieee, 0); 8812- 8813- if (!skb) 8814- ieee80211_associate_abort(ieee); 8815- else{ 8816+ skb=ieee80211_authentication_req_rtl7(beacon, ieee, 0); 8817+ 8818+ if (!skb) 8819+ ieee80211_associate_abort_rtl7(ieee); 8820+ else{ 8821 ieee->state = IEEE80211_ASSOCIATING_AUTHENTICATING ; 8822 IEEE80211_DEBUG_MGMT("Sending authentication request\n"); 8823- softmac_mgmt_xmit(skb, ieee); 8824+ softmac_mgmt_xmit_rtl7(skb, ieee); 8825 ieee->associate_timer.expires = jiffies + (HZ / 2); 8826 add_timer(&ieee->associate_timer); 8827- } 8828+ } 8829 } 8830 8831-void ieee80211_auth_challenge(struct ieee80211_device *ieee, u8 *challenge, int chlen) 8832+void ieee80211_auth_challenge_rtl7(struct ieee80211_device *ieee, u8 *challenge, int chlen) 8833 { 8834- u8 *c; 8835+ u8 *c; 8836 struct sk_buff *skb; 8837 struct ieee80211_network *beacon = &ieee->current_network; 8838 // int hlen = sizeof(struct ieee80211_authentication); 8839- 8840+ 8841 ieee->associate_seq++; 8842 ieee->softmac_stats.tx_auth_rq++; 8843- 8844- skb = ieee80211_authentication_req(beacon, ieee, chlen+2); 8845- if (!skb) 8846- ieee80211_associate_abort(ieee); 8847+ 8848+ skb = ieee80211_authentication_req_rtl7(beacon, ieee, chlen+2); 8849+ if (!skb) 8850+ ieee80211_associate_abort_rtl7(ieee); 8851 else{ 8852 c = skb_put(skb, chlen+2); 8853 *(c++) = MFIE_TYPE_CHALLENGE; 8854 *(c++) = chlen; 8855 memcpy(c, challenge, chlen); 8856- 8857+ 8858 IEEE80211_DEBUG_MGMT("Sending authentication challenge response\n"); 8859- 8860- ieee80211_encrypt_fragment(ieee, skb, sizeof(struct ieee80211_hdr_3addr )); 8861- 8862- softmac_mgmt_xmit(skb, ieee); 8863+ 8864+ ieee80211_encrypt_fragment_rtl7(ieee, skb, sizeof(struct ieee80211_hdr_3addr )); 8865+ 8866+ softmac_mgmt_xmit_rtl7(skb, ieee); 8867 ieee->associate_timer.expires = jiffies + (HZ / 2); 8868 add_timer(&ieee->associate_timer); 8869- } 8870+ } 8871 kfree(challenge); 8872 } 8873 8874-void ieee80211_associate_step2(struct ieee80211_device *ieee) 8875+void ieee80211_associate_step2_rtl7(struct ieee80211_device *ieee) 8876 { 8877 struct sk_buff* skb; 8878 struct ieee80211_network *beacon = &ieee->current_network; 8879- 8880+ 8881 del_timer_sync(&ieee->associate_timer); 8882- 8883+ 8884 IEEE80211_DEBUG_MGMT("Sending association request\n"); 8885- 8886+ 8887 ieee->softmac_stats.tx_ass_rq++; 8888- skb=ieee80211_association_req(beacon, ieee); 8889- if (!skb) 8890- ieee80211_associate_abort(ieee); 8891+ skb=ieee80211_association_req_rtl7(beacon, ieee); 8892+ if (!skb) 8893+ ieee80211_associate_abort_rtl7(ieee); 8894 else{ 8895- softmac_mgmt_xmit(skb, ieee); 8896+ softmac_mgmt_xmit_rtl7(skb, ieee); 8897 ieee->associate_timer.expires = jiffies + (HZ / 2); 8898 add_timer(&ieee->associate_timer); 8899- } 8900+ } 8901 } 8902 8903-void ieee80211_associate_complete_wq(struct ieee80211_device *ieee) 8904+# if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)) 8905+void ieee80211_associate_complete_wq_rtl7(struct work_struct *work) 8906 { 8907+ struct ieee80211_device *ieee = container_of(work, struct ieee80211_device, associate_complete_wq); 8908+#else 8909+void ieee80211_associate_complete_wq_rtl7(struct ieee80211_device *ieee) 8910+{ 8911+#endif 8912 printk(KERN_INFO "Associated successfully\n"); 8913- if(ieee80211_is_54g(ieee->current_network) && 8914+ if(ieee80211_is_54g_rtl7(ieee->current_network) && 8915 (ieee->modulation & IEEE80211_OFDM_MODULATION)){ 8916- 8917+ 8918 ieee->rate = 540; 8919 printk(KERN_INFO"Using G rates\n"); 8920 }else{ 8921@@ -977,62 +989,67 @@ 8922 printk(KERN_INFO"Using B rates\n"); 8923 } 8924 ieee->link_change(ieee->dev); 8925- notify_wx_assoc_event(ieee); 8926+ notify_wx_assoc_event_rtl7(ieee); 8927 if (ieee->data_hard_resume) 8928 ieee->data_hard_resume(ieee->dev); 8929 netif_carrier_on(ieee->dev); 8930 } 8931 8932-void ieee80211_associate_complete(struct ieee80211_device *ieee) 8933+void ieee80211_associate_complete_rtl7(struct ieee80211_device *ieee) 8934 { 8935 8936 del_timer_sync(&ieee->associate_timer); 8937- 8938+ 8939 ieee->seq_ctrl = 0; 8940 ieee->state = IEEE80211_LINKED; 8941 IEEE80211_DEBUG_MGMT("Successfully associated\n"); 8942- 8943+ 8944 queue_work(ieee->wq, &ieee->associate_complete_wq); 8945 } 8946 8947-void ieee80211_associate_procedure_wq(struct ieee80211_device *ieee) 8948+# if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)) 8949+void ieee80211_associate_procedure_wq_rtl7(struct work_struct *work) 8950+{ 8951+ struct ieee80211_device *ieee = container_of(work, struct ieee80211_device, associate_procedure_wq); 8952+#else 8953+void ieee80211_associate_procedure_wq_rtl7(struct ieee80211_device *ieee) 8954 { 8955+#endif 8956 ieee->sync_scan_hurryup = 1; 8957 down(&ieee->wx_sem); 8958- 8959 if (ieee->data_hard_stop) 8960 ieee->data_hard_stop(ieee->dev); 8961- 8962- ieee80211_stop_scan(ieee); 8963+ 8964+ ieee80211_stop_scan_rtl7(ieee); 8965 ieee->set_chan(ieee->dev, ieee->current_network.channel); 8966- 8967+ 8968 ieee->associate_seq = 1; 8969- ieee80211_associate_step1(ieee); 8970- 8971+ ieee80211_associate_step1_rtl7(ieee); 8972+ 8973 up(&ieee->wx_sem); 8974 } 8975 8976-inline void ieee80211_softmac_new_net(struct ieee80211_device *ieee, struct ieee80211_network *net) 8977+inline void ieee80211_softmac_new_net_rtl7(struct ieee80211_device *ieee, struct ieee80211_network *net) 8978 { 8979- 8980+ 8981 u8 tmp_ssid[IW_ESSID_MAX_SIZE+1]; 8982 int tmp_ssid_len = 0; 8983- 8984+ 8985 short apset,ssidset,ssidbroad,apmatch,ssidmatch; 8986- 8987- /* we are interested in new new only if we are not associated 8988+ 8989+ /* we are interested in new new only if we are not associated 8990 * and we are not associating / authenticating 8991 */ 8992 if (ieee->state != IEEE80211_NOLINK) 8993- return; 8994- 8995+ return; 8996+ 8997 if ((ieee->iw_mode == IW_MODE_INFRA) && !(net->capability & WLAN_CAPABILITY_BSS)) 8998 return; 8999- 9000+ 9001 if ((ieee->iw_mode == IW_MODE_ADHOC) && !(net->capability & WLAN_CAPABILITY_IBSS)) 9002 return; 9003 9004- 9005+ 9006 if (ieee->iw_mode == IW_MODE_INFRA || ieee->iw_mode == IW_MODE_ADHOC){ 9007 /* if the user specified the AP MAC, we need also the essid 9008 * This could be obtained by beacons or, if the network does not 9009@@ -1043,23 +1060,23 @@ 9010 ssidbroad = !(net->ssid_len == 0 || net->ssid[0]== '\0'); 9011 apmatch = (memcmp(ieee->current_network.bssid, net->bssid, ETH_ALEN)==0); 9012 ssidmatch = (0==strncmp(ieee->current_network.ssid, net->ssid, net->ssid_len)); 9013- 9014- 9015- 9016+ 9017+ 9018+ 9019 if ( /* if the user set the AP check if match. 9020 * if the network does not broadcast essid we check the user supplyed ANY essid 9021 * if the network does broadcast and the user does not set essid it is OK 9022 * if the network does broadcast and the user did set essid chech if essid match 9023 */ 9024- ( apset && apmatch && 9025- ((ssidset && ssidbroad && ssidmatch) || (ssidbroad && !ssidset) || (!ssidbroad && ssidset)) ) || 9026+ ( apset && apmatch && 9027+ ((ssidset && ssidbroad && ssidmatch) || (ssidbroad && !ssidset) || (!ssidbroad && ssidset)) ) || 9028 /* if the ap is not set, check that the user set the bssid 9029 * and the network does bradcast and that those two bssid matches 9030- */ 9031- (!apset && ssidset && ssidbroad && ssidmatch) 9032+ */ 9033+ (!apset && ssidset && ssidbroad && ssidmatch) 9034 ){ 9035- 9036- 9037+ 9038+ 9039 /* if the essid is hidden replace it with the 9040 * essid provided by the user. 9041 */ 9042@@ -1068,18 +1085,18 @@ 9043 tmp_ssid_len = ieee->current_network.ssid_len; 9044 } 9045 memcpy(&ieee->current_network, net, sizeof(struct ieee80211_network)); 9046- 9047+ 9048 if (!ssidbroad){ 9049 strncpy(ieee->current_network.ssid, tmp_ssid, IW_ESSID_MAX_SIZE); 9050 ieee->current_network.ssid_len = tmp_ssid_len; 9051 } 9052 printk(KERN_INFO"Linking with %s\n",ieee->current_network.ssid); 9053- 9054+ 9055 if (ieee->iw_mode == IW_MODE_INFRA){ 9056 ieee->state = IEEE80211_ASSOCIATING; 9057 queue_work(ieee->wq, &ieee->associate_procedure_wq); 9058 }else{ 9059- if(ieee80211_is_54g(ieee->current_network) && 9060+ if(ieee80211_is_54g_rtl7(ieee->current_network) && 9061 (ieee->modulation & IEEE80211_OFDM_MODULATION)){ 9062 ieee->rate = 540; 9063 printk(KERN_INFO"Using G rates\n"); 9064@@ -1089,42 +1106,40 @@ 9065 } 9066 ieee->state = IEEE80211_LINKED; 9067 } 9068- 9069+ 9070 } 9071 } 9072- 9073 } 9074 9075-void ieee80211_softmac_check_all_nets(struct ieee80211_device *ieee) 9076+void ieee80211_softmac_check_all_nets_rtl7(struct ieee80211_device *ieee) 9077 { 9078- 9079+ 9080 unsigned long flags; 9081 struct ieee80211_network *target; 9082- 9083+ 9084 spin_lock_irqsave(&ieee->lock, flags); 9085- 9086 list_for_each_entry(target, &ieee->network_list, list) { 9087- 9088+ 9089 /* if the state become different that NOLINK means 9090 * we had found what we are searching for 9091 */ 9092- if (ieee->state != IEEE80211_NOLINK) 9093+ if (ieee->state != IEEE80211_NOLINK) 9094 break; 9095- 9096+ 9097 //if (ieee->scan_age == 0 || time_after(target->last_scanned + ieee->scan_age, jiffies)) 9098- ieee80211_softmac_new_net(ieee, target); 9099+ ieee80211_softmac_new_net_rtl7(ieee, target); 9100 } 9101- 9102+ 9103 spin_unlock_irqrestore(&ieee->lock, flags); 9104- 9105+ 9106 } 9107 9108 9109-static inline u16 auth_parse(struct sk_buff *skb, u8** challenge, int *chlen) 9110+static inline u16 auth_parse_rtl7(struct sk_buff *skb, u8** challenge, int *chlen) 9111 { 9112 struct ieee80211_authentication *a; 9113 u8 *t; 9114- if (skb->len < (sizeof(struct ieee80211_authentication)-sizeof(struct ieee80211_info_element))){ 9115+ if (skb->len < (sizeof(struct ieee80211_authentication)-sizeof(struct ieee80211_info_element))){ 9116 IEEE80211_DEBUG_MGMT("invalid len in auth resp: %d\n",skb->len); 9117 return 0xcafe; 9118 } 9119@@ -1132,58 +1147,58 @@ 9120 a = (struct ieee80211_authentication*) skb->data; 9121 if(skb->len > (sizeof(struct ieee80211_authentication) +3)){ 9122 t = skb->data + sizeof(struct ieee80211_authentication); 9123- 9124+ 9125 if(*(t++) == MFIE_TYPE_CHALLENGE){ 9126 *chlen = *(t++); 9127 *challenge = (u8*)kmalloc(*chlen, GFP_ATOMIC); 9128 memcpy(*challenge, t, *chlen); 9129 } 9130 } 9131- 9132+ 9133 return cpu_to_le16(a->status); 9134- 9135+ 9136 } 9137 9138 9139-int auth_rq_parse(struct sk_buff *skb,u8* dest) 9140+int auth_rq_parse_rtl7(struct sk_buff *skb,u8* dest) 9141 { 9142 struct ieee80211_authentication *a; 9143- 9144- if (skb->len < (sizeof(struct ieee80211_authentication)-sizeof(struct ieee80211_info_element))){ 9145- IEEE80211_DEBUG_MGMT("invalid len in auth request: %d\n",skb->len); 9146+ 9147+ if (skb->len < (sizeof(struct ieee80211_authentication)-sizeof(struct ieee80211_info_element))){ 9148+ IEEE80211_DEBUG_MGMT("invalid len in auth request: %d\n",skb->len); 9149 return -1; 9150 } 9151 a = (struct ieee80211_authentication*) skb->data; 9152- 9153+ 9154 memcpy(dest,a->header.addr2, ETH_ALEN); 9155- 9156- if (le16_to_cpu(a->algorithm) != WLAN_AUTH_OPEN) 9157+ 9158+ if (le16_to_cpu(a->algorithm) != WLAN_AUTH_OPEN) 9159 return WLAN_STATUS_NOT_SUPPORTED_AUTH_ALG; 9160- 9161+ 9162 return WLAN_STATUS_SUCCESS; 9163 } 9164 9165-static short probe_rq_parse(struct ieee80211_device *ieee, struct sk_buff *skb, u8 *src) 9166+static short probe_rq_parse_rtl7(struct ieee80211_device *ieee, struct sk_buff *skb, u8 *src) 9167 { 9168 u8 *tag; 9169 u8 *skbend; 9170 u8 *ssid=NULL; 9171 u8 ssidlen = 0; 9172- 9173+ 9174 struct ieee80211_hdr_3addr *header = 9175 (struct ieee80211_hdr_3addr *) skb->data; 9176- 9177- if (skb->len < sizeof (struct ieee80211_hdr_3addr )) 9178+ 9179+ if (skb->len < sizeof (struct ieee80211_hdr_3addr )) 9180 return -1; /* corrupted */ 9181- 9182+ 9183 memcpy(src,header->addr2, ETH_ALEN); 9184- 9185+ 9186 skbend = (u8*)skb->data + skb->len; 9187- 9188+ 9189 tag = skb->data + sizeof (struct ieee80211_hdr_3addr ); 9190- 9191+ 9192 while (tag+1 < skbend){ 9193- if (*tag == 0){ 9194+ if (*tag == 0){ 9195 ssid = tag+2; 9196 ssidlen = *(tag+1); 9197 break; 9198@@ -1192,88 +1207,88 @@ 9199 tag = tag + *(tag); /* point to the last data byte of the tag */ 9200 tag++; /* point to the next tag */ 9201 } 9202- 9203+ 9204 //IEEE80211DMESG("Card MAC address is "MACSTR, MAC2STR(src)); 9205 if (ssidlen == 0) return 1; 9206- 9207+ 9208 if (!ssid) return 1; /* ssid not found in tagged param */ 9209 return (!strncmp(ssid, ieee->current_network.ssid, ssidlen)); 9210- 9211+ 9212 } 9213 9214-int assoc_rq_parse(struct sk_buff *skb,u8* dest) 9215+int assoc_rq_parse_rtl7(struct sk_buff *skb,u8* dest) 9216 { 9217 struct ieee80211_assoc_request_frame *a; 9218- 9219- if (skb->len < (sizeof(struct ieee80211_assoc_request_frame) - 9220- sizeof(struct ieee80211_info_element))) { 9221- 9222+ 9223+ if (skb->len < (sizeof(struct ieee80211_assoc_request_frame) - 9224+ sizeof(struct ieee80211_info_element))) { 9225+ 9226 IEEE80211_DEBUG_MGMT("invalid len in auth request:%d \n", skb->len); 9227 return -1; 9228 } 9229- 9230+ 9231 a = (struct ieee80211_assoc_request_frame*) skb->data; 9232- 9233+ 9234 memcpy(dest,a->header.addr2,ETH_ALEN); 9235- 9236+ 9237 return 0; 9238 } 9239 9240-static inline u16 assoc_parse(struct sk_buff *skb, int *aid) 9241+static inline u16 assoc_parse_rtl7(struct sk_buff *skb, int *aid) 9242 { 9243 struct ieee80211_assoc_response_frame *a; 9244- if (skb->len < sizeof(struct ieee80211_assoc_response_frame)){ 9245+ if (skb->len < sizeof(struct ieee80211_assoc_response_frame)){ 9246 IEEE80211_DEBUG_MGMT("invalid len in auth resp: %d\n", skb->len); 9247 return 0xcafe; 9248 } 9249- 9250+ 9251 a = (struct ieee80211_assoc_response_frame*) skb->data; 9252 *aid = le16_to_cpu(a->aid) & 0x3fff; 9253 return le16_to_cpu(a->status); 9254 } 9255 9256 static inline void 9257-ieee80211_rx_probe_rq(struct ieee80211_device *ieee, struct sk_buff *skb) 9258+ieee80211_rx_probe_rq_rtl7(struct ieee80211_device *ieee, struct sk_buff *skb) 9259 { 9260 u8 dest[ETH_ALEN]; 9261- 9262+ 9263 //IEEE80211DMESG("Rx probe"); 9264 ieee->softmac_stats.rx_probe_rq++; 9265 //DMESG("Dest is "MACSTR, MAC2STR(dest)); 9266- if (probe_rq_parse(ieee, skb, dest)){ 9267+ if (probe_rq_parse_rtl7(ieee, skb, dest)){ 9268 //IEEE80211DMESG("Was for me!"); 9269 ieee->softmac_stats.tx_probe_rs++; 9270- ieee80211_resp_to_probe(ieee, dest); 9271+ ieee80211_resp_to_probe_rtl7(ieee, dest); 9272 } 9273 } 9274 9275 static inline void 9276-ieee80211_rx_auth_rq(struct ieee80211_device *ieee, struct sk_buff *skb) 9277+ieee80211_rx_auth_rq_rtl7(struct ieee80211_device *ieee, struct sk_buff *skb) 9278 { 9279 u8 dest[ETH_ALEN]; 9280 int status; 9281 //IEEE80211DMESG("Rx probe"); 9282 ieee->softmac_stats.rx_auth_rq++; 9283- 9284- if ((status = auth_rq_parse(skb, dest))!= -1){ 9285- ieee80211_resp_to_auth(ieee, status, dest); 9286+ 9287+ if ((status = auth_rq_parse_rtl7(skb, dest))!= -1){ 9288+ ieee80211_resp_to_auth_rtl7(ieee, status, dest); 9289 } 9290 //DMESG("Dest is "MACSTR, MAC2STR(dest)); 9291- 9292+ 9293 } 9294 9295 static inline void 9296-ieee80211_rx_assoc_rq(struct ieee80211_device *ieee, struct sk_buff *skb) 9297+ieee80211_rx_assoc_rq_rtl7(struct ieee80211_device *ieee, struct sk_buff *skb) 9298 { 9299- 9300+ 9301 u8 dest[ETH_ALEN]; 9302 //unsigned long flags; 9303- 9304+ 9305 ieee->softmac_stats.rx_ass_rq++; 9306- if (assoc_rq_parse(skb,dest) != -1){ 9307- ieee80211_resp_to_assoc_rq(ieee, dest); 9308+ if (assoc_rq_parse_rtl7(skb,dest) != -1){ 9309+ ieee80211_resp_to_assoc_rq_rtl7(ieee, dest); 9310 } 9311- 9312+ 9313 printk(KERN_INFO"New client associated: "MAC_FMT"\n", MAC_ARG(dest)); 9314 //FIXME 9315 #if 0 9316@@ -1285,25 +1300,25 @@ 9317 9318 9319 9320-void ieee80211_sta_ps_send_null_frame(struct ieee80211_device *ieee, short pwr) 9321+void ieee80211_sta_ps_send_null_frame_rtl7(struct ieee80211_device *ieee, short pwr) 9322 { 9323- 9324- struct sk_buff *buf = ieee80211_null_func(ieee, pwr); 9325- 9326+ 9327+ struct sk_buff *buf = ieee80211_null_func_rtl7(ieee, pwr); 9328+ 9329 if (buf) 9330- softmac_ps_mgmt_xmit(buf, ieee); 9331+ softmac_ps_mgmt_xmit_rtl7(buf, ieee); 9332 9333-} 9334+} 9335 9336 9337-short ieee80211_sta_ps_sleep(struct ieee80211_device *ieee, u32 *time_h, u32 *time_l) 9338-{ 9339+short ieee80211_sta_ps_sleep_rtl7(struct ieee80211_device *ieee, u32 *time_h, u32 *time_l) 9340+{ 9341 int timeout = ieee->ps_timeout; 9342 u8 dtim; 9343 /*if(ieee->ps == IEEE80211_PS_DISABLED || 9344- ieee->iw_mode != IW_MODE_INFRA || 9345+ ieee->iw_mode != IW_MODE_INFRA || 9346 ieee->state != IEEE80211_LINKED) 9347- 9348+ 9349 return 0; 9350 */ 9351 dtim = ieee->current_network.dtim_data; 9352@@ -1312,133 +1327,133 @@ 9353 return 0; 9354 //printk("VALID\n"); 9355 ieee->current_network.dtim_data = IEEE80211_DTIM_INVALID; 9356- 9357+ 9358 if(dtim & ((IEEE80211_DTIM_UCAST | IEEE80211_DTIM_MBCAST)& ieee->ps)) 9359 return 2; 9360- 9361+ 9362 if(!time_after(jiffies, ieee->dev->trans_start + MSECS(timeout))) 9363 return 0; 9364- 9365+ 9366 if(!time_after(jiffies, ieee->last_rx_ps_time + MSECS(timeout))) 9367 return 0; 9368- 9369+ 9370 if((ieee->softmac_features & IEEE_SOFTMAC_SINGLE_QUEUE ) && 9371 (ieee->mgmt_queue_tail != ieee->mgmt_queue_head)) 9372 return 0; 9373- 9374+ 9375 if(time_l){ 9376- *time_l = ieee->current_network.last_dtim_sta_time[0] 9377- + (ieee->current_network.beacon_interval 9378+ *time_l = ieee->current_network.last_dtim_sta_time[0] 9379+ + (ieee->current_network.beacon_interval 9380 * ieee->current_network.dtim_period) * 1000; 9381 } 9382- 9383+ 9384 if(time_h){ 9385 *time_h = ieee->current_network.last_dtim_sta_time[1]; 9386 if(time_l && *time_l < ieee->current_network.last_dtim_sta_time[0]) 9387 *time_h += 1; 9388 } 9389- 9390+ 9391 return 1; 9392- 9393- 9394+ 9395+ 9396 } 9397 9398-inline void ieee80211_sta_ps(struct ieee80211_device *ieee) 9399+inline void ieee80211_sta_ps_rtl7(struct ieee80211_device *ieee) 9400 { 9401 9402 u32 th,tl; 9403 short sleep; 9404- 9405+ 9406 unsigned long flags,flags2; 9407- 9408+ 9409 spin_lock_irqsave(&ieee->lock, flags); 9410- 9411+ 9412 if((ieee->ps == IEEE80211_PS_DISABLED || 9413- ieee->iw_mode != IW_MODE_INFRA || 9414+ ieee->iw_mode != IW_MODE_INFRA || 9415 ieee->state != IEEE80211_LINKED)){ 9416- 9417- #warning CHECK_LOCK_HERE 9418+ 9419+// #warning CHECK_LOCK_HERE 9420 spin_lock_irqsave(&ieee->mgmt_tx_lock, flags2); 9421- 9422- ieee80211_sta_wakeup(ieee, 1); 9423- 9424+ 9425+ ieee80211_sta_wakeup_rtl7(ieee, 1); 9426+ printk(KERN_WARNING "wakeup 1!\n" ); 9427 spin_unlock_irqrestore(&ieee->mgmt_tx_lock, flags2); 9428 } 9429- 9430- sleep = ieee80211_sta_ps_sleep(ieee,&th, &tl); 9431+ 9432+ sleep = ieee80211_sta_ps_sleep_rtl7(ieee,&th, &tl); 9433 /* 2 wake, 1 sleep, 0 do nothing */ 9434 if(sleep == 0) 9435 goto out; 9436- 9437+ 9438 if(sleep == 1){ 9439- 9440+ 9441 if(ieee->sta_sleep == 1) 9442 ieee->enter_sleep_state(ieee->dev,th,tl); 9443- 9444+ 9445 else if(ieee->sta_sleep == 0){ 9446 // printk("send null 1\n"); 9447 spin_lock_irqsave(&ieee->mgmt_tx_lock, flags2); 9448- 9449+ 9450 if(ieee->ps_is_queue_empty(ieee->dev)){ 9451- 9452- 9453+ 9454+ 9455 ieee->sta_sleep = 2; 9456- 9457+ 9458 ieee->ps_request_tx_ack(ieee->dev); 9459- 9460- ieee80211_sta_ps_send_null_frame(ieee,1); 9461- 9462+ 9463+ ieee80211_sta_ps_send_null_frame_rtl7(ieee,1); 9464+ 9465 ieee->ps_th = th; 9466 ieee->ps_tl = tl; 9467- } 9468+ } 9469 spin_unlock_irqrestore(&ieee->mgmt_tx_lock, flags2); 9470- 9471+ 9472 } 9473- 9474- 9475+ 9476+ 9477 }else if(sleep == 2){ 9478-#warning CHECK_LOCK_HERE 9479+// #warning CHECK_LOCK_HERE 9480 spin_lock_irqsave(&ieee->mgmt_tx_lock, flags2); 9481- 9482- ieee80211_sta_wakeup(ieee,1); 9483- 9484+ 9485+ ieee80211_sta_wakeup_rtl7(ieee,1); 9486+ printk(KERN_WARNING "wakeup 2!\n" ); 9487 spin_unlock_irqrestore(&ieee->mgmt_tx_lock, flags2); 9488 } 9489 9490-out: 9491+out: 9492 spin_unlock_irqrestore(&ieee->lock, flags); 9493- 9494+ 9495 } 9496 9497-void ieee80211_sta_wakeup(struct ieee80211_device *ieee, short nl) 9498+void ieee80211_sta_wakeup_rtl7(struct ieee80211_device *ieee, short nl) 9499 { 9500 if(ieee->sta_sleep == 0){ 9501 if(nl){ 9502 printk("Warning: driver is probably failing to report TX ps error\n"); 9503 ieee->ps_request_tx_ack(ieee->dev); 9504- ieee80211_sta_ps_send_null_frame(ieee, 0); 9505+ ieee80211_sta_ps_send_null_frame_rtl7(ieee, 0); 9506 } 9507 return; 9508- 9509+ 9510 } 9511- 9512- if(ieee->sta_sleep == 1) 9513+ 9514+ if(ieee->sta_sleep == 1) 9515 ieee->sta_wake_up(ieee->dev); 9516- 9517+ 9518 ieee->sta_sleep = 0; 9519- 9520+ 9521 if(nl){ 9522 ieee->ps_request_tx_ack(ieee->dev); 9523- ieee80211_sta_ps_send_null_frame(ieee, 0); 9524+ ieee80211_sta_ps_send_null_frame_rtl7(ieee, 0); 9525 } 9526 } 9527 9528-void ieee80211_ps_tx_ack(struct ieee80211_device *ieee, short success) 9529+void ieee80211_ps_tx_ack_rtl7(struct ieee80211_device *ieee, short success) 9530 { 9531 unsigned long flags,flags2; 9532- 9533+ 9534 spin_lock_irqsave(&ieee->lock, flags); 9535- 9536+ 9537 if(ieee->sta_sleep == 2){ 9538 /* Null frame with PS bit set */ 9539 if(success){ 9540@@ -1451,10 +1466,10 @@ 9541 } 9542 /* 21112005 - tx again null without PS bit if lost */ 9543 else { 9544- 9545+ 9546 if((ieee->sta_sleep == 0) && !success){ 9547 spin_lock_irqsave(&ieee->mgmt_tx_lock, flags2); 9548- ieee80211_sta_ps_send_null_frame(ieee, 0); 9549+ ieee80211_sta_ps_send_null_frame_rtl7(ieee, 0); 9550 spin_unlock_irqrestore(&ieee->mgmt_tx_lock, flags2); 9551 } 9552 } 9553@@ -1462,129 +1477,132 @@ 9554 } 9555 9556 inline int 9557-ieee80211_rx_frame_softmac(struct ieee80211_device *ieee, struct sk_buff *skb, 9558+ieee80211_rx_frame_softmac_rtl7(struct ieee80211_device *ieee, struct sk_buff *skb, 9559 struct ieee80211_rx_stats *rx_stats, u16 type, 9560 u16 stype) 9561 { 9562 struct ieee80211_hdr_3addr *header; 9563- header = (struct ieee80211_hdr_3addr *) skb->data; 9564 u16 errcode; 9565 u8* challenge; 9566 int chlen; 9567 int aid; 9568- 9569+ 9570+ chlen = 0; 9571+ 9572+ header = (struct ieee80211_hdr_3addr *) skb->data; 9573+ 9574 if(!ieee->proto_started) 9575 return 0; 9576- 9577+ 9578 if(ieee->sta_sleep || (ieee->ps != IEEE80211_PS_DISABLED && 9579- ieee->iw_mode == IW_MODE_INFRA && 9580+ ieee->iw_mode == IW_MODE_INFRA && 9581 ieee->state == IEEE80211_LINKED)) 9582- 9583+ 9584 tasklet_schedule(&ieee->ps_task); 9585- 9586+ 9587 if(WLAN_FC_GET_STYPE(header->frame_ctl) != IEEE80211_STYPE_PROBE_RESP && 9588 WLAN_FC_GET_STYPE(header->frame_ctl) != IEEE80211_STYPE_BEACON) 9589 ieee->last_rx_ps_time = jiffies; 9590- 9591+ 9592 switch (WLAN_FC_GET_STYPE(header->frame_ctl)) { 9593- 9594+ 9595 case IEEE80211_STYPE_ASSOC_RESP: 9596 case IEEE80211_STYPE_REASSOC_RESP: 9597- 9598+ 9599 IEEE80211_DEBUG_MGMT("received [RE]ASSOCIATION RESPONSE (%d)\n", 9600 WLAN_FC_GET_STYPE(header->frame_ctl)); 9601 if ((ieee->softmac_features & IEEE_SOFTMAC_ASSOCIATE) && 9602- ieee->state == IEEE80211_ASSOCIATING_AUTHENTICATED && 9603+ ieee->state == IEEE80211_ASSOCIATING_AUTHENTICATED && 9604 ieee->iw_mode == IW_MODE_INFRA){ 9605- if (0 == (errcode=assoc_parse(skb, &aid))){ 9606- 9607+ if (0 == (errcode=assoc_parse_rtl7(skb, &aid))){ 9608+ 9609 ieee->state=IEEE80211_LINKED; 9610 ieee->assoc_id = aid; 9611 ieee->softmac_stats.rx_ass_ok++; 9612- 9613- ieee80211_associate_complete(ieee); 9614+ 9615+ ieee80211_associate_complete_rtl7(ieee); 9616 }else{ 9617 ieee->softmac_stats.rx_ass_err++; 9618 IEEE80211_DEBUG_MGMT( 9619 "Association response status code 0x%x\n", 9620 errcode); 9621- ieee80211_associate_abort(ieee); 9622+ ieee80211_associate_abort_rtl7(ieee); 9623 } 9624 } 9625 break; 9626- 9627+ 9628 case IEEE80211_STYPE_ASSOC_REQ: 9629 case IEEE80211_STYPE_REASSOC_REQ: 9630- 9631+ 9632 if ((ieee->softmac_features & IEEE_SOFTMAC_ASSOCIATE) && 9633 ieee->iw_mode == IW_MODE_MASTER) 9634- 9635- ieee80211_rx_assoc_rq(ieee, skb); 9636+ 9637+ ieee80211_rx_assoc_rq_rtl7(ieee, skb); 9638 break; 9639- 9640+ 9641 case IEEE80211_STYPE_AUTH: 9642- 9643+ 9644 if (ieee->softmac_features & IEEE_SOFTMAC_ASSOCIATE){ 9645- if (ieee->state == IEEE80211_ASSOCIATING_AUTHENTICATING && 9646+ if (ieee->state == IEEE80211_ASSOCIATING_AUTHENTICATING && 9647 ieee->iw_mode == IW_MODE_INFRA){ 9648- 9649+ 9650 IEEE80211_DEBUG_MGMT("Received authentication response"); 9651- 9652- if (0 == (errcode=auth_parse(skb, &challenge, &chlen))){ 9653+ 9654+ if (0 == (errcode=auth_parse_rtl7(skb, &challenge, &chlen))){ 9655 if(ieee->open_wep || !challenge){ 9656 ieee->state = IEEE80211_ASSOCIATING_AUTHENTICATED; 9657 ieee->softmac_stats.rx_auth_rs_ok++; 9658- 9659- ieee80211_associate_step2(ieee); 9660+ 9661+ ieee80211_associate_step2_rtl7(ieee); 9662 }else{ 9663- ieee80211_auth_challenge(ieee, challenge, chlen); 9664+ ieee80211_auth_challenge_rtl7(ieee, challenge, chlen); 9665 } 9666 }else{ 9667 ieee->softmac_stats.rx_auth_rs_err++; 9668 IEEE80211_DEBUG_MGMT("Authentication respose status code 0x%x",errcode); 9669- ieee80211_associate_abort(ieee); 9670+ ieee80211_associate_abort_rtl7(ieee); 9671 } 9672- 9673+ 9674 }else if (ieee->iw_mode == IW_MODE_MASTER){ 9675- ieee80211_rx_auth_rq(ieee, skb); 9676+ ieee80211_rx_auth_rq_rtl7(ieee, skb); 9677 } 9678 } 9679 break; 9680- 9681+ 9682 case IEEE80211_STYPE_PROBE_REQ: 9683- 9684- if ((ieee->softmac_features & IEEE_SOFTMAC_PROBERS) && 9685- ((ieee->iw_mode == IW_MODE_ADHOC || 9686+ 9687+ if ((ieee->softmac_features & IEEE_SOFTMAC_PROBERS) && 9688+ ((ieee->iw_mode == IW_MODE_ADHOC || 9689 ieee->iw_mode == IW_MODE_MASTER) && 9690 ieee->state == IEEE80211_LINKED)) 9691- 9692- ieee80211_rx_probe_rq(ieee, skb); 9693+ 9694+ ieee80211_rx_probe_rq_rtl7(ieee, skb); 9695 break; 9696- 9697+ 9698 case IEEE80211_STYPE_DISASSOC: 9699 case IEEE80211_STYPE_DEAUTH: 9700- /* FIXME for now repeat all the association procedure 9701+ /* FIXME for now repeat all the association procedure 9702 * both for disassociation and deauthentication 9703 */ 9704 if ((ieee->softmac_features & IEEE_SOFTMAC_ASSOCIATE) && 9705- ieee->state == IEEE80211_LINKED && 9706+ ieee->state == IEEE80211_LINKED && 9707 ieee->iw_mode == IW_MODE_INFRA){ 9708- 9709+ 9710 ieee->state = IEEE80211_ASSOCIATING; 9711 ieee->softmac_stats.reassoc++; 9712- 9713- notify_wx_assoc_event(ieee); 9714- 9715+ 9716+ notify_wx_assoc_event_rtl7(ieee); 9717+ 9718 queue_work(ieee->wq, &ieee->associate_procedure_wq); 9719 } 9720- 9721+ 9722 break; 9723- 9724- default: 9725+ 9726+ default: 9727 return -1; 9728 break; 9729 } 9730- 9731+ 9732 //dev_kfree_skb_any(skb); 9733 return 0; 9734 } 9735@@ -1602,21 +1620,21 @@ 9736 * This might be useful if each fragment need it's own 9737 * descriptor, thus just keep a total free memory > than 9738 * the max fragmentation treshold is not enought.. If the 9739- * ieee802.11 stack passed a TXB struct then you needed 9740- * to keep N free descriptors where 9741+ * ieee802.11 stack passed a TXB struct then you needed 9742+ * to keep N free descriptors where 9743 * N = MAX_PACKET_SIZE / MIN_FRAG_TRESHOLD 9744 * In this way you need just one and the 802.11 stack 9745- * will take care of buffering fragments and pass them to 9746+ * will take care of buffering fragments and pass them to 9747 * to the driver later, when it wakes the queue. 9748- */ 9749- 9750-void ieee80211_softmac_xmit(struct ieee80211_txb *txb, struct ieee80211_device *ieee) 9751+ */ 9752+ 9753+void ieee80211_softmac_xmit_rtl7(struct ieee80211_txb *txb, struct ieee80211_device *ieee) 9754 { 9755- 9756- 9757+ 9758+ 9759 unsigned long flags; 9760 int i; 9761- 9762+ 9763 spin_lock_irqsave(&ieee->lock,flags); 9764 #if 0 9765 if(ieee->queue_stop){ 9766@@ -1627,13 +1645,13 @@ 9767 err = 1; 9768 goto exit; 9769 } 9770- 9771+ 9772 ieee->stats.tx_bytes+=skb->len; 9773- 9774- 9775+ 9776+ 9777 txb=ieee80211_skb_to_txb(ieee,skb); 9778- 9779- 9780+ 9781+ 9782 if(txb==NULL){ 9783 IEEE80211DMESG("WW: IEEE stack failed to provide txb"); 9784 //dev_kfree_skb_any(skb); 9785@@ -1641,12 +1659,12 @@ 9786 goto exit; 9787 } 9788 #endif 9789- 9790+ 9791 /* called with 2nd parm 0, no tx mgmt lock required */ 9792- ieee80211_sta_wakeup(ieee,0); 9793+ ieee80211_sta_wakeup_rtl7(ieee,0); 9794 9795 for(i = 0; i < txb->nr_frags; i++) { 9796- 9797+ 9798 if (ieee->queue_stop){ 9799 ieee->tx_pending.txb = txb; 9800 ieee->tx_pending.frag = i; 9801@@ -1658,29 +1676,29 @@ 9802 //(i+1)<txb->nr_frags); 9803 ieee->stats.tx_packets++; 9804 ieee->stats.tx_bytes += txb->fragments[i]->len; 9805- ieee->dev->trans_start = jiffies; 9806+ ieee->dev->trans_start = jiffies; 9807 } 9808- } 9809- 9810- ieee80211_txb_free(txb); 9811- 9812+ } 9813+ 9814+ ieee80211_txb_free_rtl7(txb); 9815+ 9816 exit: 9817 spin_unlock_irqrestore(&ieee->lock,flags); 9818- 9819+ 9820 } 9821 9822 /* called with ieee->lock acquired */ 9823-void ieee80211_resume_tx(struct ieee80211_device *ieee) 9824+void ieee80211_resume_tx_rtl7(struct ieee80211_device *ieee) 9825 { 9826 int i; 9827 for(i = ieee->tx_pending.frag; i < ieee->tx_pending.txb->nr_frags; i++) { 9828- 9829+ 9830 if (ieee->queue_stop){ 9831 ieee->tx_pending.frag = i; 9832 return; 9833 }else{ 9834- 9835- ieee->softmac_data_hard_start_xmit( 9836+ 9837+ ieee->softmac_data_hard_start_xmit( 9838 ieee->tx_pending.txb->fragments[i], 9839 ieee->dev,ieee->rate); 9840 //(i+1)<ieee->tx_pending.txb->nr_frags); 9841@@ -1688,21 +1706,21 @@ 9842 ieee->dev->trans_start = jiffies; 9843 } 9844 } 9845- 9846- 9847- ieee80211_txb_free(ieee->tx_pending.txb); 9848+ 9849+ 9850+ ieee80211_txb_free_rtl7(ieee->tx_pending.txb); 9851 ieee->tx_pending.txb = NULL; 9852 } 9853 9854 9855-void ieee80211_reset_queue(struct ieee80211_device *ieee) 9856+void ieee80211_reset_queue_rtl7(struct ieee80211_device *ieee) 9857 { 9858 unsigned long flags; 9859- 9860+ 9861 spin_lock_irqsave(&ieee->lock,flags); 9862- init_mgmt_queue(ieee); 9863+ init_mgmt_queue_rtl7(ieee); 9864 if (ieee->tx_pending.txb){ 9865- ieee80211_txb_free(ieee->tx_pending.txb); 9866+ ieee80211_txb_free_rtl7(ieee->tx_pending.txb); 9867 ieee->tx_pending.txb = NULL; 9868 } 9869 ieee->queue_stop = 0; 9870@@ -1710,23 +1728,23 @@ 9871 9872 } 9873 9874-void ieee80211_wake_queue(struct ieee80211_device *ieee) 9875+void ieee80211_wake_queue_rtl7(struct ieee80211_device *ieee) 9876 { 9877 9878 unsigned long flags; 9879 struct sk_buff *skb; 9880 struct ieee80211_hdr_3addr *header; 9881- 9882+ 9883 spin_lock_irqsave(&ieee->lock,flags); 9884 if (! ieee->queue_stop) goto exit; 9885- 9886+ 9887 ieee->queue_stop = 0; 9888- 9889+ 9890 if(ieee->softmac_features & IEEE_SOFTMAC_SINGLE_QUEUE){ 9891- while (!ieee->queue_stop && (skb = dequeue_mgmt(ieee))){ 9892- 9893+ while (!ieee->queue_stop && (skb = dequeue_mgmt_rtl7(ieee))){ 9894+ 9895 header = (struct ieee80211_hdr_3addr *) skb->data; 9896- 9897+ 9898 header->seq_ctl = cpu_to_le16(ieee->seq_ctrl << 4); 9899 9900 if (ieee->seq_ctrl == 0xFFF) 9901@@ -1738,19 +1756,19 @@ 9902 } 9903 } 9904 if (!ieee->queue_stop && ieee->tx_pending.txb) 9905- ieee80211_resume_tx(ieee); 9906- 9907+ ieee80211_resume_tx_rtl7(ieee); 9908+ 9909 if (!ieee->queue_stop && netif_queue_stopped(ieee->dev)){ 9910 ieee->softmac_stats.swtxawake++; 9911 netif_wake_queue(ieee->dev); 9912 } 9913- 9914+ 9915 exit : 9916 spin_unlock_irqrestore(&ieee->lock,flags); 9917 } 9918 9919 9920-void ieee80211_stop_queue(struct ieee80211_device *ieee) 9921+void ieee80211_stop_queue_rtl7(struct ieee80211_device *ieee) 9922 { 9923 //unsigned long flags; 9924 //spin_lock_irqsave(&ieee->lock,flags); 9925@@ -1761,81 +1779,88 @@ 9926 } 9927 ieee->queue_stop = 1; 9928 //spin_unlock_irqrestore(&ieee->lock,flags); 9929- 9930+ 9931 } 9932 9933 9934-inline void ieee80211_randomize_cell(struct ieee80211_device *ieee) 9935+inline void ieee80211_randomize_cell_rtl7(struct ieee80211_device *ieee) 9936 { 9937- 9938+ 9939 get_random_bytes(ieee->current_network.bssid, ETH_ALEN); 9940- 9941+ 9942 /* an IBSS cell address must have the two less significant 9943- * bits of the first byte = 2 9944+ * bits of the first byte = 2 9945 */ 9946 ieee->current_network.bssid[0] &= ~0x01; 9947 ieee->current_network.bssid[0] |= 0x02; 9948 } 9949 9950 /* called in user context only */ 9951-void ieee80211_start_master_bss(struct ieee80211_device *ieee) 9952+void ieee80211_start_master_bss_rtl7(struct ieee80211_device *ieee) 9953 { 9954 ieee->assoc_id = 1; 9955- 9956+ 9957 if (ieee->current_network.ssid_len == 0){ 9958- strncpy(ieee->current_network.ssid, 9959+ strncpy(ieee->current_network.ssid, 9960 IEEE80211_DEFAULT_TX_ESSID, 9961 IW_ESSID_MAX_SIZE); 9962- 9963+ 9964 ieee->current_network.ssid_len = strlen(IEEE80211_DEFAULT_TX_ESSID); 9965 ieee->ssid_set = 1; 9966 } 9967- 9968+ 9969 memcpy(ieee->current_network.bssid, ieee->dev->dev_addr, ETH_ALEN); 9970- 9971+ 9972 ieee->set_chan(ieee->dev, ieee->current_network.channel); 9973 ieee->state = IEEE80211_LINKED; 9974 ieee->link_change(ieee->dev); 9975- notify_wx_assoc_event(ieee); 9976- 9977+ notify_wx_assoc_event_rtl7(ieee); 9978+ 9979 if (ieee->data_hard_resume) 9980 ieee->data_hard_resume(ieee->dev); 9981- 9982+ 9983 netif_carrier_on(ieee->dev); 9984 } 9985 9986-void ieee80211_start_monitor_mode(struct ieee80211_device *ieee) 9987+void ieee80211_start_monitor_mode_rtl7(struct ieee80211_device *ieee) 9988 { 9989 if(ieee->raw_tx){ 9990- 9991+ 9992 if (ieee->data_hard_resume) 9993 ieee->data_hard_resume(ieee->dev); 9994- 9995+ 9996 netif_carrier_on(ieee->dev); 9997 } 9998 } 9999-void ieee80211_start_ibss_wq(struct ieee80211_device *ieee) 10000+ 10001+# if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)) 10002+void ieee80211_start_ibss_wq_rtl7(struct work_struct *work) 10003 { 10004- 10005+ struct ieee80211_device *ieee = container_of(work, struct ieee80211_device, start_ibss_wq); 10006+#else 10007+void ieee80211_start_ibss_wq_rtl7(struct ieee80211_device *ieee) 10008+{ 10009+#endif 10010+ 10011 /* iwconfig mode ad-hoc will schedule this and return 10012 * on the other hand this will block further iwconfig SET 10013 * operations because of the wx_sem hold. 10014 * Anyway some most set operations set a flag to speed-up 10015- * (abort) this wq (when syncro scanning) before sleeping 10016+ * (abort) this wq (when syncro scanning) before sleeping 10017 * on the semaphore 10018 */ 10019- 10020+ 10021 down(&ieee->wx_sem); 10022- 10023+ 10024 if (ieee->current_network.ssid_len == 0){ 10025 strcpy(ieee->current_network.ssid,IEEE80211_DEFAULT_TX_ESSID); 10026 ieee->current_network.ssid_len = strlen(IEEE80211_DEFAULT_TX_ESSID); 10027 ieee->ssid_set = 1; 10028- } 10029- 10030+ } 10031+ 10032 /* check if we have this cell in our network list */ 10033- ieee80211_softmac_check_all_nets(ieee); 10034- 10035+ ieee80211_softmac_check_all_nets_rtl7(ieee); 10036+ 10037 /* if not then the state is not linked. Maybe the user swithced to 10038 * ad-hoc mode just after being in monitor mode, or just after 10039 * being very few time in managed mode (so the card have had no 10040@@ -1851,29 +1876,29 @@ 10041 * associated. 10042 */ 10043 if (ieee->state == IEEE80211_NOLINK) 10044- ieee80211_start_scan_syncro(ieee); 10045+ ieee80211_start_scan_syncro_rtl7(ieee); 10046 10047 /* the network definitively is not here.. create a new cell */ 10048 if (ieee->state == IEEE80211_NOLINK){ 10049- printk("creating new IBSS cell\n"); 10050+ printk("creating new IBSS cell\n"); 10051 if(!ieee->wap_set) 10052- ieee80211_randomize_cell(ieee); 10053- 10054+ ieee80211_randomize_cell_rtl7(ieee); 10055+ 10056 if(ieee->modulation & IEEE80211_CCK_MODULATION){ 10057- 10058+ 10059 ieee->current_network.rates_len = 4; 10060- 10061+ 10062 ieee->current_network.rates[0] = IEEE80211_BASIC_RATE_MASK | IEEE80211_CCK_RATE_1MB; 10063 ieee->current_network.rates[1] = IEEE80211_BASIC_RATE_MASK | IEEE80211_CCK_RATE_2MB; 10064 ieee->current_network.rates[2] = IEEE80211_BASIC_RATE_MASK | IEEE80211_CCK_RATE_5MB; 10065 ieee->current_network.rates[3] = IEEE80211_BASIC_RATE_MASK | IEEE80211_CCK_RATE_11MB; 10066- 10067+ 10068 }else 10069 ieee->current_network.rates_len = 0; 10070- 10071+ 10072 if(ieee->modulation & IEEE80211_OFDM_MODULATION){ 10073 ieee->current_network.rates_ex_len = 8; 10074- 10075+ 10076 ieee->current_network.rates_ex[0] = IEEE80211_BASIC_RATE_MASK | IEEE80211_OFDM_RATE_6MB; 10077 ieee->current_network.rates_ex[1] = IEEE80211_BASIC_RATE_MASK | IEEE80211_OFDM_RATE_9MB; 10078 ieee->current_network.rates_ex[2] = IEEE80211_BASIC_RATE_MASK | IEEE80211_OFDM_RATE_12MB; 10079@@ -1882,44 +1907,44 @@ 10080 ieee->current_network.rates_ex[5] = IEEE80211_BASIC_RATE_MASK | IEEE80211_OFDM_RATE_36MB; 10081 ieee->current_network.rates_ex[6] = IEEE80211_BASIC_RATE_MASK | IEEE80211_OFDM_RATE_48MB; 10082 ieee->current_network.rates_ex[7] = IEEE80211_BASIC_RATE_MASK | IEEE80211_OFDM_RATE_54MB; 10083- 10084+ 10085 ieee->rate = 540; 10086 }else{ 10087 ieee->current_network.rates_ex_len = 0; 10088 ieee->rate = 110; 10089 } 10090- 10091+ 10092 ieee->current_network.atim_window = 0; 10093 ieee->current_network.capability = WLAN_CAPABILITY_IBSS; 10094 if(ieee->short_slot) 10095 ieee->current_network.capability |= WLAN_CAPABILITY_SHORT_SLOT; 10096- 10097+ 10098 } 10099- 10100+ 10101 ieee->state = IEEE80211_LINKED; 10102- 10103+ 10104 ieee->set_chan(ieee->dev, ieee->current_network.channel); 10105 ieee->link_change(ieee->dev); 10106- 10107- notify_wx_assoc_event(ieee); 10108- 10109- ieee80211_start_send_beacons(ieee); 10110- 10111+ 10112+ notify_wx_assoc_event_rtl7(ieee); 10113+ 10114+ ieee80211_start_send_beacons_rtl7(ieee); 10115+ 10116 if (ieee->data_hard_resume) 10117 ieee->data_hard_resume(ieee->dev); 10118- 10119+ 10120 netif_carrier_on(ieee->dev); 10121- 10122+ 10123 up(&ieee->wx_sem); 10124 } 10125 10126-inline void ieee80211_start_ibss(struct ieee80211_device *ieee) 10127+inline void ieee80211_start_ibss_rtl7(struct ieee80211_device *ieee) 10128 { 10129 queue_work(ieee->wq, &ieee->start_ibss_wq); 10130 } 10131 10132 /* this is called only in user context, with wx_sem held */ 10133-void ieee80211_start_bss(struct ieee80211_device *ieee) 10134+void ieee80211_start_bss_rtl7(struct ieee80211_device *ieee) 10135 { 10136 unsigned long flags; 10137 /* check if we have already found the net we 10138@@ -1927,8 +1952,8 @@ 10139 * if not (we are disassociated and we are not 10140 * in associating / authenticating phase) start the background scanning. 10141 */ 10142- ieee80211_softmac_check_all_nets(ieee); 10143- 10144+ ieee80211_softmac_check_all_nets_rtl7(ieee); 10145+ 10146 /* ensure no-one start an associating process (thus setting 10147 * the ieee->state to ieee80211_ASSOCIATING) while we 10148 * have just cheked it and we are going to enable scan. 10149@@ -1937,41 +1962,49 @@ 10150 * the rx path), so we cannot be in the middle of such function 10151 */ 10152 spin_lock_irqsave(&ieee->lock, flags); 10153- 10154 if (ieee->state == IEEE80211_NOLINK) 10155- ieee80211_start_scan(ieee); 10156- 10157+ ieee80211_start_scan_rtl7(ieee); 10158+ 10159 spin_unlock_irqrestore(&ieee->lock, flags); 10160 } 10161 10162 /* called only in userspace context */ 10163-void ieee80211_disassociate(struct ieee80211_device *ieee) 10164+void ieee80211_disassociate_rtl7(struct ieee80211_device *ieee) 10165 { 10166 netif_carrier_off(ieee->dev); 10167- 10168+ 10169 if (ieee->softmac_features & IEEE_SOFTMAC_TX_QUEUE) 10170- ieee80211_reset_queue(ieee); 10171- 10172+ ieee80211_reset_queue_rtl7(ieee); 10173+ 10174 if (ieee->data_hard_stop) 10175 ieee->data_hard_stop(ieee->dev); 10176- 10177+ 10178 ieee->state = IEEE80211_NOLINK; 10179 ieee->link_change(ieee->dev); 10180- notify_wx_assoc_event(ieee); 10181- 10182+ notify_wx_assoc_event_rtl7(ieee); 10183+ 10184 } 10185-void ieee80211_associate_retry_wq(struct ieee80211_device *ieee) 10186+ 10187+# if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)) 10188+void ieee80211_associate_retry_wq_rtl7(struct work_struct *work) 10189 { 10190+ struct delayed_work *dwork = container_of(work, struct delayed_work, work); 10191+ struct ieee80211_device *ieee = container_of(dwork, struct ieee80211_device, associate_retry_wq); 10192+#else 10193+void ieee80211_associate_retry_wq_rtl7(struct ieee80211_device *ieee) 10194+{ 10195+#endif 10196 unsigned long flags; 10197- 10198+ 10199 down(&ieee->wx_sem); 10200+ 10201 if(!ieee->proto_started) 10202 goto exit; 10203- 10204+ 10205 if(ieee->state != IEEE80211_ASSOCIATING_RETRY) 10206 goto exit; 10207- 10208- /* until we do not set the state to IEEE80211_NOLINK 10209+ 10210+ /* until we do not set the state to IEEE80211_NOLINK 10211 * there are no possibility to have someone else trying 10212 * to start an association procdure (we get here with 10213 * ieee->state = IEEE80211_ASSOCIATING). 10214@@ -1981,122 +2014,120 @@ 10215 * RX path works with ieee->lock held so there are no 10216 * problems. If we are still disassociated then start a scan. 10217 * the lock here is necessary to ensure no one try to start 10218- * an association procedure when we have just checked the 10219+ * an association procedure when we have just checked the 10220 * state and we are going to start the scan. 10221 */ 10222 ieee->state = IEEE80211_NOLINK; 10223 10224- ieee80211_softmac_check_all_nets(ieee); 10225- 10226+ ieee80211_softmac_check_all_nets_rtl7(ieee); 10227+ 10228 spin_lock_irqsave(&ieee->lock, flags); 10229- 10230+ 10231 if(ieee->state == IEEE80211_NOLINK) 10232- ieee80211_start_scan(ieee); 10233- 10234+ ieee80211_start_scan_rtl7(ieee); 10235+ 10236 spin_unlock_irqrestore(&ieee->lock, flags); 10237 10238 exit: 10239 up(&ieee->wx_sem); 10240 } 10241 10242-struct sk_buff *ieee80211_get_beacon_(struct ieee80211_device *ieee) 10243+struct sk_buff *ieee80211_get_beacon__rtl7(struct ieee80211_device *ieee) 10244 { 10245 u8 broadcast_addr[] = {0xff,0xff,0xff,0xff,0xff,0xff}; 10246- 10247+ 10248 struct sk_buff *skb; 10249 struct ieee80211_probe_response *b; 10250- 10251- skb = ieee80211_probe_resp(ieee, broadcast_addr); 10252- 10253- if (!skb) 10254+ 10255+ skb = ieee80211_probe_resp_rtl7(ieee, broadcast_addr); 10256+ 10257+ if (!skb) 10258 return NULL; 10259- 10260+ 10261 b = (struct ieee80211_probe_response *) skb->data; 10262 b->header.frame_ctl = cpu_to_le16(IEEE80211_STYPE_BEACON); 10263- 10264+ 10265 return skb; 10266- 10267+ 10268 } 10269 10270-struct sk_buff *ieee80211_get_beacon(struct ieee80211_device *ieee) 10271+struct sk_buff *ieee80211_get_beacon_rtl7(struct ieee80211_device *ieee) 10272 { 10273 struct sk_buff *skb; 10274 struct ieee80211_probe_response *b; 10275- 10276- skb = ieee80211_get_beacon_(ieee); 10277- if(!skb) 10278+ 10279+ skb = ieee80211_get_beacon__rtl7(ieee); 10280+ if(!skb) 10281 return NULL; 10282- 10283- b = (struct ieee80211_probe_response *) skb->data; 10284+ 10285+ b = (struct ieee80211_probe_response *) skb->data; 10286 b->header.seq_ctrl = cpu_to_le16(ieee->seq_ctrl << 4); 10287- 10288+ 10289 if (ieee->seq_ctrl == 0xFFF) 10290 ieee->seq_ctrl = 0; 10291 else 10292 ieee->seq_ctrl++; 10293- 10294+ 10295 return skb; 10296 } 10297 10298-void ieee80211_softmac_stop_protocol(struct ieee80211_device *ieee) 10299+void ieee80211_softmac_stop_protocol_rtl7(struct ieee80211_device *ieee) 10300 { 10301 ieee->sync_scan_hurryup = 1; 10302 down(&ieee->wx_sem); 10303- ieee80211_stop_protocol(ieee); 10304+ 10305+ ieee80211_stop_protocol_rtl7(ieee); 10306 up(&ieee->wx_sem); 10307 } 10308 10309 10310-void ieee80211_stop_protocol(struct ieee80211_device *ieee) 10311+void ieee80211_stop_protocol_rtl7(struct ieee80211_device *ieee) 10312 { 10313 if (!ieee->proto_started) 10314 return; 10315- 10316+ 10317 ieee->proto_started = 0; 10318- 10319- ieee80211_stop_send_beacons(ieee); 10320- 10321+ 10322+ ieee80211_stop_send_beacons_rtl7(ieee); 10323+ 10324 del_timer_sync(&ieee->associate_timer); 10325- cancel_delayed_work(&ieee->associate_retry_wq); 10326- 10327- ieee80211_stop_scan(ieee); 10328+ cancel_delayed_work(&ieee->associate_retry_wq); 10329 10330- ieee80211_disassociate(ieee); 10331+ ieee80211_stop_scan_rtl7(ieee); 10332+ 10333+ ieee80211_disassociate_rtl7(ieee); 10334 } 10335 10336-void ieee80211_softmac_start_protocol(struct ieee80211_device *ieee) 10337+void ieee80211_softmac_start_protocol_rtl7(struct ieee80211_device *ieee) 10338 { 10339 ieee->sync_scan_hurryup = 0; 10340 down(&ieee->wx_sem); 10341- ieee80211_start_protocol(ieee); 10342+ ieee80211_start_protocol_rtl7(ieee); 10343 up(&ieee->wx_sem); 10344 } 10345 10346-void ieee80211_start_protocol(struct ieee80211_device *ieee) 10347+void ieee80211_start_protocol_rtl7(struct ieee80211_device *ieee) 10348 { 10349 short ch = 0; 10350- 10351 if (ieee->proto_started) 10352 return; 10353- 10354+ 10355 ieee->proto_started = 1; 10356- 10357+ 10358 if (ieee->current_network.channel == 0){ 10359 do{ 10360 ch++; 10361- if (ch > MAX_CHANNEL_NUMBER) 10362+ if (ch > MAX_CHANNEL_NUMBER) 10363 return; /* no channel found */ 10364- 10365+ 10366 }while(!ieee->channel_map[ch]); 10367- 10368+ 10369 ieee->current_network.channel = ch; 10370 } 10371- 10372+ 10373 if (ieee->current_network.beacon_interval == 0) 10374 ieee->current_network.beacon_interval = 100; 10375- 10376 ieee->set_chan(ieee->dev,ieee->current_network.channel); 10377- 10378 ieee->last_seq_num = -1; 10379 ieee->last_frag_num = -1; 10380 ieee->last_packet_time = 0; 10381@@ -2107,30 +2138,27 @@ 10382 * attempts does not fail just because the user provide the essid 10383 * and the nic is still checking for the AP MAC ?? 10384 */ 10385- 10386+ 10387 if (ieee->iw_mode == IW_MODE_INFRA) 10388- ieee80211_start_bss(ieee); 10389- 10390+ ieee80211_start_bss_rtl7(ieee); 10391 else if (ieee->iw_mode == IW_MODE_ADHOC) 10392- ieee80211_start_ibss(ieee); 10393- 10394+ ieee80211_start_ibss_rtl7(ieee); 10395 else if (ieee->iw_mode == IW_MODE_MASTER) 10396- ieee80211_start_master_bss(ieee); 10397- 10398+ ieee80211_start_master_bss_rtl7(ieee); 10399 else if(ieee->iw_mode == IW_MODE_MONITOR) 10400- ieee80211_start_monitor_mode(ieee); 10401+ ieee80211_start_monitor_mode_rtl7(ieee); 10402 } 10403 10404 10405 #define DRV_NAME "Ieee80211" 10406-void ieee80211_softmac_init(struct ieee80211_device *ieee) 10407+void ieee80211_softmac_init_rtl7(struct ieee80211_device *ieee) 10408 { 10409 memset(&ieee->current_network, 0, sizeof(struct ieee80211_network)); 10410- 10411+ 10412 ieee->state = IEEE80211_NOLINK; 10413 ieee->sync_scan_hurryup = 0; 10414 ieee->seq_ctrl = 0; 10415- 10416+ 10417 ieee->assoc_id = 0; 10418 ieee->queue_stop = 0; 10419 ieee->scanning = 0; 10420@@ -2142,66 +2170,75 @@ 10421 ieee->rate = 3; 10422 ieee->ps = IEEE80211_PS_DISABLED; 10423 ieee->sta_sleep = 0; 10424- 10425- init_mgmt_queue(ieee); 10426+ 10427+ init_mgmt_queue_rtl7(ieee); 10428 #if 0 10429 init_timer(&ieee->scan_timer); 10430 ieee->scan_timer.data = (unsigned long)ieee; 10431 ieee->scan_timer.function = ieee80211_softmac_scan_cb; 10432 #endif 10433 ieee->tx_pending.txb = NULL; 10434- 10435+ 10436 init_timer(&ieee->associate_timer); 10437 ieee->associate_timer.data = (unsigned long)ieee; 10438- ieee->associate_timer.function = ieee80211_associate_abort_cb; 10439+ ieee->associate_timer.function = ieee80211_associate_abort_cb_rtl7; 10440 10441 init_timer(&ieee->beacon_timer); 10442 ieee->beacon_timer.data = (unsigned long) ieee; 10443- ieee->beacon_timer.function = ieee80211_send_beacon_cb; 10444- 10445+ ieee->beacon_timer.function = ieee80211_send_beacon_cb_rtl7; 10446+ 10447 #ifdef PF_SYNCTHREAD 10448 ieee->wq = create_workqueue(DRV_NAME,0); 10449-#else 10450+#else 10451 ieee->wq = create_workqueue(DRV_NAME); 10452 #endif 10453- 10454- INIT_WORK(&ieee->start_ibss_wq,(void(*)(void*)) ieee80211_start_ibss_wq,ieee); 10455- INIT_WORK(&ieee->associate_retry_wq,(void(*)(void*)) ieee80211_associate_retry_wq,ieee); 10456- INIT_WORK(&ieee->associate_complete_wq,(void(*)(void*)) ieee80211_associate_complete_wq,ieee); 10457- INIT_WORK(&ieee->associate_procedure_wq,(void(*)(void*)) ieee80211_associate_procedure_wq,ieee); 10458- INIT_WORK(&ieee->softmac_scan_wq,(void(*)(void*)) ieee80211_softmac_scan_wq,ieee); 10459- INIT_WORK(&ieee->wx_sync_scan_wq,(void(*)(void*)) ieee80211_wx_sync_scan_wq,ieee); 10460- 10461+ 10462+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20) 10463+ INIT_WORK(&ieee->start_ibss_wq,(void(*)(void*)) ieee80211_start_ibss_wq_rtl7,ieee); 10464+ INIT_WORK(&ieee->associate_retry_wq,(void(*)(void*)) ieee80211_associate_retry_wq_rtl7,ieee); 10465+ INIT_WORK(&ieee->associate_complete_wq,(void(*)(void*)) ieee80211_associate_complete_wq_rtl7,ieee); 10466+ INIT_WORK(&ieee->associate_procedure_wq,(void(*)(void*)) ieee80211_associate_procedure_wq_rtl7,ieee); 10467+ INIT_WORK(&ieee->softmac_scan_wq,(void(*)(void*)) ieee80211_softmac_scan_wq_rtl7,ieee); 10468+ INIT_WORK(&ieee->wx_sync_scan_wq,(void(*)(void*)) ieee80211_wx_sync_scan_wq_rtl7,ieee); 10469+#else 10470+ INIT_WORK(&ieee->start_ibss_wq, ieee80211_start_ibss_wq_rtl7); 10471+ INIT_DELAYED_WORK(&ieee->associate_retry_wq, ieee80211_associate_retry_wq_rtl7); 10472+ INIT_WORK(&ieee->associate_complete_wq, ieee80211_associate_complete_wq_rtl7); 10473+ INIT_WORK(&ieee->associate_procedure_wq, ieee80211_associate_procedure_wq_rtl7); 10474+ INIT_DELAYED_WORK(&ieee->softmac_scan_wq, ieee80211_softmac_scan_wq_rtl7); 10475+ INIT_WORK(&ieee->wx_sync_scan_wq, ieee80211_wx_sync_scan_wq_rtl7); 10476+#endif 10477+ 10478 sema_init(&ieee->wx_sem, 1); 10479 sema_init(&ieee->scan_sem, 1); 10480- 10481+ 10482 spin_lock_init(&ieee->mgmt_tx_lock); 10483 spin_lock_init(&ieee->beacon_lock); 10484- 10485+ 10486 tasklet_init(&ieee->ps_task, 10487- (void(*)(unsigned long)) ieee80211_sta_ps, 10488+ (void(*)(unsigned long)) ieee80211_sta_ps_rtl7, 10489 (unsigned long)ieee); 10490 10491 } 10492 10493-void ieee80211_softmac_free(struct ieee80211_device *ieee) 10494+void ieee80211_softmac_free_rtl7(struct ieee80211_device *ieee) 10495 { 10496 down(&ieee->wx_sem); 10497- 10498+ 10499 del_timer_sync(&ieee->associate_timer); 10500 cancel_delayed_work(&ieee->associate_retry_wq); 10501 destroy_workqueue(ieee->wq); 10502- 10503+ 10504 up(&ieee->wx_sem); 10505 } 10506 10507-/******************************************************** 10508+/******************************************************** 10509 * Start of WPA code. * 10510 * this is stolen from the ipw2200 driver * 10511 ********************************************************/ 10512 10513- 10514-static int ieee80211_wpa_enable(struct ieee80211_device *ieee, int value) 10515+ 10516+static int ieee80211_wpa_enable_rtl7(struct ieee80211_device *ieee, int value) 10517 { 10518 /* This is called when wpa_supplicant loads and closes the driver 10519 * interface. */ 10520@@ -2210,19 +2247,19 @@ 10521 return 0; 10522 } 10523 10524- 10525-void ieee80211_wpa_assoc_frame(struct ieee80211_device *ieee, char *wpa_ie, int wpa_ie_len) 10526+ 10527+void ieee80211_wpa_assoc_frame_rtl7(struct ieee80211_device *ieee, char *wpa_ie, int wpa_ie_len) 10528 { 10529 /* make sure WPA is enabled */ 10530- ieee80211_wpa_enable(ieee, 1); 10531+ ieee80211_wpa_enable_rtl7(ieee, 1); 10532 10533- ieee80211_disassociate(ieee); 10534+ ieee80211_disassociate_rtl7(ieee); 10535 } 10536 10537 10538-static int ieee80211_wpa_mlme(struct ieee80211_device *ieee, int command, int reason) 10539+static int ieee80211_wpa_mlme_rtl7(struct ieee80211_device *ieee, int command, int reason) 10540 { 10541- 10542+ 10543 int ret = 0; 10544 10545 switch (command) { 10546@@ -2231,7 +2268,7 @@ 10547 break; 10548 10549 case IEEE_MLME_STA_DISASSOC: 10550- ieee80211_disassociate(ieee); 10551+ ieee80211_disassociate_rtl7(ieee); 10552 break; 10553 10554 default: 10555@@ -2243,7 +2280,7 @@ 10556 } 10557 10558 10559-static int ieee80211_wpa_set_wpa_ie(struct ieee80211_device *ieee, 10560+static int ieee80211_wpa_set_wpa_ie_rtl7(struct ieee80211_device *ieee, 10561 struct ieee_param *param, int plen) 10562 { 10563 u8 *buf; 10564@@ -2267,16 +2304,16 @@ 10565 ieee->wpa_ie_len = 0; 10566 } 10567 10568- ieee80211_wpa_assoc_frame(ieee, ieee->wpa_ie, ieee->wpa_ie_len); 10569+ ieee80211_wpa_assoc_frame_rtl7(ieee, ieee->wpa_ie, ieee->wpa_ie_len); 10570 return 0; 10571 } 10572 10573 #define AUTH_ALG_OPEN_SYSTEM 0x1 10574 #define AUTH_ALG_SHARED_KEY 0x2 10575 10576-static int ieee80211_wpa_set_auth_algs(struct ieee80211_device *ieee, int value) 10577+static int ieee80211_wpa_set_auth_algs_rtl7(struct ieee80211_device *ieee, int value) 10578 { 10579- 10580+ 10581 struct ieee80211_security sec = { 10582 .flags = SEC_AUTH_MODE, 10583 }; 10584@@ -2300,13 +2337,13 @@ 10585 10586 10587 10588-static int ieee80211_wpa_set_param(struct ieee80211_device *ieee, u8 name, u32 value) 10589+static int ieee80211_wpa_set_param_rtl7(struct ieee80211_device *ieee, u8 name, u32 value) 10590 { 10591 int ret=0; 10592 10593 switch (name) { 10594 case IEEE_PARAM_WPA_ENABLED: 10595- ret = ieee80211_wpa_enable(ieee, value); 10596+ ret = ieee80211_wpa_enable_rtl7(ieee, value); 10597 break; 10598 10599 case IEEE_PARAM_TKIP_COUNTERMEASURES: 10600@@ -2351,7 +2388,7 @@ 10601 break; 10602 10603 case IEEE_PARAM_AUTH_ALGS: 10604- ret = ieee80211_wpa_set_auth_algs(ieee, value); 10605+ ret = ieee80211_wpa_set_auth_algs_rtl7(ieee, value); 10606 break; 10607 10608 case IEEE_PARAM_IEEE_802_1X: 10609@@ -2368,11 +2405,11 @@ 10610 10611 /* implementation borrowed from hostap driver */ 10612 10613-static int ieee80211_wpa_set_encryption(struct ieee80211_device *ieee, 10614+static int ieee80211_wpa_set_encryption_rtl7(struct ieee80211_device *ieee, 10615 struct ieee_param *param, int param_len) 10616 { 10617 int ret = 0; 10618- 10619+ 10620 struct ieee80211_crypto_ops *ops; 10621 struct ieee80211_crypt_data **crypt; 10622 10623@@ -2407,7 +2444,7 @@ 10624 //sec.encrypt = 0; 10625 sec.level = SEC_LEVEL_0; 10626 sec.flags |= SEC_ENABLED | SEC_LEVEL; 10627- ieee80211_crypt_delayed_deinit(ieee, crypt); 10628+ ieee80211_crypt_delayed_deinit_rtl7(ieee, crypt); 10629 } 10630 goto done; 10631 } 10632@@ -2421,16 +2458,16 @@ 10633 strcmp(param->u.crypt.alg, "TKIP")) 10634 goto skip_host_crypt; 10635 10636- ops = ieee80211_get_crypto_ops(param->u.crypt.alg); 10637+ ops = ieee80211_get_crypto_ops_rtl7(param->u.crypt.alg); 10638 if (ops == NULL && strcmp(param->u.crypt.alg, "WEP") == 0) { 10639- request_module("ieee80211_crypt_wep"); 10640- ops = ieee80211_get_crypto_ops(param->u.crypt.alg); 10641+ request_module("ieee80211_crypt_wep_rtl7"); 10642+ ops = ieee80211_get_crypto_ops_rtl7(param->u.crypt.alg); 10643 } else if (ops == NULL && strcmp(param->u.crypt.alg, "TKIP") == 0) { 10644- request_module("ieee80211_crypt_tkip"); 10645- ops = ieee80211_get_crypto_ops(param->u.crypt.alg); 10646+ request_module("ieee80211_crypt_tkip_rtl7"); 10647+ ops = ieee80211_get_crypto_ops_rtl7(param->u.crypt.alg); 10648 } else if (ops == NULL && strcmp(param->u.crypt.alg, "CCMP") == 0) { 10649- request_module("ieee80211_crypt_ccmp"); 10650- ops = ieee80211_get_crypto_ops(param->u.crypt.alg); 10651+ request_module("ieee80211_crypt_ccmp_rtl7"); 10652+ ops = ieee80211_get_crypto_ops_rtl7(param->u.crypt.alg); 10653 } 10654 if (ops == NULL) { 10655 printk("unknown crypto alg '%s'\n", param->u.crypt.alg); 10656@@ -2442,7 +2479,7 @@ 10657 if (*crypt == NULL || (*crypt)->ops != ops) { 10658 struct ieee80211_crypt_data *new_crypt; 10659 10660- ieee80211_crypt_delayed_deinit(ieee, crypt); 10661+ ieee80211_crypt_delayed_deinit_rtl7(ieee, crypt); 10662 10663 new_crypt = (struct ieee80211_crypt_data *) 10664 kmalloc(sizeof(*new_crypt), GFP_KERNEL); 10665@@ -2525,7 +2562,7 @@ 10666 10667 10668 10669-int ieee80211_wpa_supplicant_ioctl(struct ieee80211_device *ieee, struct iw_point *p) 10670+int ieee80211_wpa_supplicant_ioctl_rtl7(struct ieee80211_device *ieee, struct iw_point *p) 10671 { 10672 struct ieee_param *param; 10673 int ret=0; 10674@@ -2537,7 +2574,7 @@ 10675 ret = -EINVAL; 10676 goto out; 10677 } 10678- 10679+ 10680 param = (struct ieee_param *)kmalloc(p->length, GFP_KERNEL); 10681 if (param == NULL){ 10682 ret = -ENOMEM; 10683@@ -2552,20 +2589,20 @@ 10684 switch (param->cmd) { 10685 10686 case IEEE_CMD_SET_WPA_PARAM: 10687- ret = ieee80211_wpa_set_param(ieee, param->u.wpa_param.name, 10688+ ret = ieee80211_wpa_set_param_rtl7(ieee, param->u.wpa_param.name, 10689 param->u.wpa_param.value); 10690 break; 10691 10692 case IEEE_CMD_SET_WPA_IE: 10693- ret = ieee80211_wpa_set_wpa_ie(ieee, param, p->length); 10694+ ret = ieee80211_wpa_set_wpa_ie_rtl7(ieee, param, p->length); 10695 break; 10696 10697 case IEEE_CMD_SET_ENCRYPTION: 10698- ret = ieee80211_wpa_set_encryption(ieee, param, p->length); 10699+ ret = ieee80211_wpa_set_encryption_rtl7(ieee, param, p->length); 10700 break; 10701 10702 case IEEE_CMD_MLME: 10703- ret = ieee80211_wpa_mlme(ieee, param->u.mlme.command, 10704+ ret = ieee80211_wpa_mlme_rtl7(ieee, param->u.mlme.command, 10705 param->u.mlme.reason_code); 10706 break; 10707 10708@@ -2581,11 +2618,11 @@ 10709 kfree(param); 10710 out: 10711 up(&ieee->wx_sem); 10712- 10713+ 10714 return ret; 10715 } 10716 10717-void notify_wx_assoc_event(struct ieee80211_device *ieee) 10718+void notify_wx_assoc_event_rtl7(struct ieee80211_device *ieee) 10719 { 10720 union iwreq_data wrqu; 10721 wrqu.ap_addr.sa_family = ARPHRD_ETHER; 10722@@ -2597,14 +2634,14 @@ 10723 } 10724 10725 10726-EXPORT_SYMBOL(ieee80211_get_beacon); 10727-EXPORT_SYMBOL(ieee80211_wake_queue); 10728-EXPORT_SYMBOL(ieee80211_stop_queue); 10729-EXPORT_SYMBOL(ieee80211_reset_queue); 10730-EXPORT_SYMBOL(ieee80211_softmac_stop_protocol); 10731-EXPORT_SYMBOL(ieee80211_softmac_start_protocol); 10732-EXPORT_SYMBOL(ieee80211_is_shortslot); 10733-EXPORT_SYMBOL(ieee80211_is_54g); 10734-EXPORT_SYMBOL(ieee80211_wpa_supplicant_ioctl); 10735-EXPORT_SYMBOL(ieee80211_ps_tx_ack); 10736-//EXPORT_SYMBOL(ieee80211_sta_ps_send_null_frame); 10737+EXPORT_SYMBOL(ieee80211_get_beacon_rtl7); 10738+EXPORT_SYMBOL(ieee80211_wake_queue_rtl7); 10739+EXPORT_SYMBOL(ieee80211_stop_queue_rtl7); 10740+EXPORT_SYMBOL(ieee80211_reset_queue_rtl7); 10741+EXPORT_SYMBOL(ieee80211_softmac_stop_protocol_rtl7); 10742+EXPORT_SYMBOL(ieee80211_softmac_start_protocol_rtl7); 10743+EXPORT_SYMBOL(ieee80211_is_shortslot_rtl7); 10744+EXPORT_SYMBOL(ieee80211_is_54g_rtl7); 10745+EXPORT_SYMBOL(ieee80211_wpa_supplicant_ioctl_rtl7); 10746+EXPORT_SYMBOL(ieee80211_ps_tx_ack_rtl7); 10747+//EXPORT_SYMBOL(ieee80211_sta_ps_send_null_frame_rtl7); 10748diff -Naur rtl8187_orig/ieee80211/ieee80211_softmac_wx.c rtl8187_rawtx/ieee80211/ieee80211_softmac_wx.c 10749--- rtl8187_orig/ieee80211/ieee80211_softmac_wx.c 2007-03-13 23:45:09.000000000 +0100 10750+++ rtl8187_rawtx/ieee80211/ieee80211_softmac_wx.c 2007-06-08 23:30:47.000000000 +0200 10751@@ -1,7 +1,7 @@ 10752 /* IEEE 802.11 SoftMAC layer 10753 * Copyright (c) 2005 Andrea Merello <andreamrl@tiscali.it> 10754 * 10755- * Mostly extracted from the rtl8180-sa2400 driver for the 10756+ * Mostly extracted from the rtl8180-sa2400 driver for the 10757 * in-kernel generic ieee802.11 stack. 10758 * 10759 * Some pieces of code might be stolen from ipw2100 driver 10760@@ -18,23 +18,23 @@ 10761 10762 /* FIXME: add A freqs */ 10763 10764-const long ieee80211_wlan_frequencies[] = { 10765- 2412, 2417, 2422, 2427, 10766- 2432, 2437, 2442, 2447, 10767- 2452, 2457, 2462, 2467, 10768- 2472, 2484 10769+const long ieee80211_wlan_frequencies_rtl7[] = { 10770+ 2412, 2417, 2422, 2427, 10771+ 2432, 2437, 2442, 2447, 10772+ 2452, 2457, 2462, 2467, 10773+ 2472, 2484 10774 }; 10775 10776 10777-int ieee80211_wx_set_freq(struct ieee80211_device *ieee, struct iw_request_info *a, 10778+int ieee80211_wx_set_freq_rtl7(struct ieee80211_device *ieee, struct iw_request_info *a, 10779 union iwreq_data *wrqu, char *b) 10780 { 10781 int ret; 10782 struct iw_freq *fwrq = & wrqu->freq; 10783 10784 down(&ieee->wx_sem); 10785- 10786- if(ieee->iw_mode == IW_MODE_INFRA){ 10787+ 10788+ if(ieee->iw_mode == IW_MODE_INFRA){ 10789 ret = -EOPNOTSUPP; 10790 goto out; 10791 } 10792@@ -45,31 +45,31 @@ 10793 fwrq->m <= (int) 2.487e8)) { 10794 int f = fwrq->m / 100000; 10795 int c = 0; 10796- 10797- while ((c < 14) && (f != ieee80211_wlan_frequencies[c])) 10798+ 10799+ while ((c < 14) && (f != ieee80211_wlan_frequencies_rtl7[c])) 10800 c++; 10801- 10802+ 10803 /* hack to fall through */ 10804 fwrq->e = 0; 10805 fwrq->m = c + 1; 10806 } 10807 } 10808- 10809- if (fwrq->e > 0 || fwrq->m > 14 || fwrq->m < 1 ){ 10810+ 10811+ if (fwrq->e > 0 || fwrq->m > 14 || fwrq->m < 1 ){ 10812 ret = -EOPNOTSUPP; 10813 goto out; 10814- 10815+ 10816 }else { /* Set the channel */ 10817- 10818- 10819+ 10820+ 10821 ieee->current_network.channel = fwrq->m; 10822 ieee->set_chan(ieee->dev, ieee->current_network.channel); 10823- 10824+ 10825 if(ieee->iw_mode == IW_MODE_ADHOC || ieee->iw_mode == IW_MODE_MASTER) 10826 if(ieee->state == IEEE80211_LINKED){ 10827- 10828- ieee80211_stop_send_beacons(ieee); 10829- ieee80211_start_send_beacons(ieee); 10830+ 10831+ ieee80211_stop_send_beacons_rtl7(ieee); 10832+ ieee80211_start_send_beacons_rtl7(ieee); 10833 } 10834 } 10835 10836@@ -80,7 +80,7 @@ 10837 } 10838 10839 10840-int ieee80211_wx_get_freq(struct ieee80211_device *ieee, 10841+int ieee80211_wx_get_freq_rtl7(struct ieee80211_device *ieee, 10842 struct iw_request_info *a, 10843 union iwreq_data *wrqu, char *b) 10844 { 10845@@ -88,110 +88,110 @@ 10846 10847 if (ieee->current_network.channel == 0) 10848 return -1; 10849- 10850+ 10851 fwrq->m = ieee->current_network.channel; 10852 fwrq->e = 0; 10853- 10854+ 10855 return 0; 10856 } 10857 10858-int ieee80211_wx_get_wap(struct ieee80211_device *ieee, 10859- struct iw_request_info *info, 10860+int ieee80211_wx_get_wap_rtl7(struct ieee80211_device *ieee, 10861+ struct iw_request_info *info, 10862 union iwreq_data *wrqu, char *extra) 10863 { 10864- unsigned long flags; 10865- 10866+ unsigned long flags; 10867+ 10868 wrqu->ap_addr.sa_family = ARPHRD_ETHER; 10869- 10870+ 10871 if (ieee->iw_mode == IW_MODE_MONITOR) 10872 return -1; 10873- 10874+ 10875 /* We want avoid to give to the user inconsistent infos*/ 10876 spin_lock_irqsave(&ieee->lock, flags); 10877- 10878- if (ieee->state != IEEE80211_LINKED && 10879+ 10880+ if (ieee->state != IEEE80211_LINKED && 10881 ieee->state != IEEE80211_LINKED_SCANNING && 10882 ieee->wap_set == 0) 10883- 10884+ 10885 memset(wrqu->ap_addr.sa_data, 0, ETH_ALEN); 10886 else 10887- memcpy(wrqu->ap_addr.sa_data, 10888+ memcpy(wrqu->ap_addr.sa_data, 10889 ieee->current_network.bssid, ETH_ALEN); 10890- 10891+ 10892 spin_unlock_irqrestore(&ieee->lock, flags); 10893- 10894+ 10895 return 0; 10896 } 10897 10898 10899-int ieee80211_wx_set_wap(struct ieee80211_device *ieee, 10900+int ieee80211_wx_set_wap_rtl7(struct ieee80211_device *ieee, 10901 struct iw_request_info *info, 10902 union iwreq_data *awrq, 10903 char *extra) 10904 { 10905- 10906+ 10907 int ret = 0; 10908 u8 zero[] = {0,0,0,0,0,0}; 10909 unsigned long flags; 10910- 10911+ 10912+ struct sockaddr *temp = NULL; 10913 short ifup = ieee->proto_started;//dev->flags & IFF_UP; 10914- 10915+ 10916 ieee->sync_scan_hurryup = 1; 10917- 10918+ 10919 down(&ieee->wx_sem); 10920- 10921- struct sockaddr *temp = (struct sockaddr *)awrq; 10922- 10923+ 10924+ temp = (struct sockaddr *)awrq; 10925 /* use ifconfig hw ether */ 10926 if (ieee->iw_mode == IW_MODE_MASTER){ 10927 ret = -1; 10928 goto out; 10929 } 10930- 10931+ 10932 if (temp->sa_family != ARPHRD_ETHER){ 10933 ret = -EINVAL; 10934 goto out; 10935 } 10936- 10937+ 10938 if (ifup) 10939- ieee80211_stop_protocol(ieee); 10940- 10941+ ieee80211_stop_protocol_rtl7(ieee); 10942+ 10943 /* just to avoid to give inconsistent infos in the 10944- * get wx method. not really needed otherwise 10945+ * get wx method. not really needed otherwise 10946 */ 10947 spin_lock_irqsave(&ieee->lock, flags); 10948- 10949- memcpy(ieee->current_network.bssid, temp->sa_data, ETH_ALEN); 10950+ 10951+ memcpy(ieee->current_network.bssid, temp->sa_data, ETH_ALEN); 10952 ieee->wap_set = memcmp(temp->sa_data, zero,ETH_ALEN)!=0; 10953- 10954+ 10955 spin_unlock_irqrestore(&ieee->lock, flags); 10956- 10957+ 10958 if (ifup) 10959- ieee80211_start_protocol(ieee); 10960- 10961+ ieee80211_start_protocol_rtl7(ieee); 10962+ 10963 out: 10964 up(&ieee->wx_sem); 10965 return ret; 10966 } 10967- 10968- int ieee80211_wx_get_essid(struct ieee80211_device *ieee, struct iw_request_info *a,union iwreq_data *wrqu,char *b) 10969+ 10970+ int ieee80211_wx_get_essid_rtl7(struct ieee80211_device *ieee, struct iw_request_info *a,union iwreq_data *wrqu,char *b) 10971 { 10972 int len,ret = 0; 10973 unsigned long flags; 10974- 10975+ 10976 if (ieee->iw_mode == IW_MODE_MONITOR) 10977 return -1; 10978- 10979- /* We want avoid to give to the user inconsistent infos*/ 10980+ 10981+ /* We want avoid to give to the user inconsistent infos*/ 10982 spin_lock_irqsave(&ieee->lock, flags); 10983- 10984+ 10985 if (ieee->current_network.ssid[0] == '\0' || 10986- ieee->current_network.ssid_len == 0){ 10987+ ieee->current_network.ssid_len == 0){ 10988 ret = -1; 10989 goto out; 10990 } 10991- 10992- if (ieee->state != IEEE80211_LINKED && 10993+ 10994+ if (ieee->state != IEEE80211_LINKED && 10995 ieee->state != IEEE80211_LINKED_SCANNING && 10996 ieee->ssid_set == 0){ 10997 ret = -1; 10998@@ -204,59 +204,76 @@ 10999 11000 out: 11001 spin_unlock_irqrestore(&ieee->lock, flags); 11002- 11003+ 11004 return ret; 11005- 11006+ 11007 } 11008 11009-int ieee80211_wx_set_rate(struct ieee80211_device *ieee, 11010+int ieee80211_wx_set_rate_rtl7(struct ieee80211_device *ieee, 11011 struct iw_request_info *info, 11012 union iwreq_data *wrqu, char *extra) 11013 { 11014 11015 u32 target_rate = wrqu->bitrate.value; 11016- 11017+ 11018 ieee->rate = target_rate/100000; 11019 //FIXME: we might want to limit rate also in management protocols. 11020- return 0; 11021+ return 0; 11022 } 11023 11024 11025 11026-int ieee80211_wx_get_rate(struct ieee80211_device *ieee, 11027- struct iw_request_info *info, 11028+int ieee80211_wx_get_rate_rtl7(struct ieee80211_device *ieee, 11029+ struct iw_request_info *info, 11030 union iwreq_data *wrqu, char *extra) 11031 { 11032- 11033+ 11034 wrqu->bitrate.value = ieee->rate * 100000; 11035- 11036+ 11037 return 0; 11038 } 11039 11040-int ieee80211_wx_set_mode(struct ieee80211_device *ieee, struct iw_request_info *a, 11041+int ieee80211_wx_set_mode_rtl7(struct ieee80211_device *ieee, struct iw_request_info *a, 11042 union iwreq_data *wrqu, char *b) 11043 { 11044- 11045+ short prev = ieee->raw_tx; 11046+ 11047 ieee->sync_scan_hurryup = 1; 11048- 11049+ 11050 down(&ieee->wx_sem); 11051- 11052+ 11053 if (wrqu->mode == ieee->iw_mode) 11054 goto out; 11055- 11056+ 11057 if (wrqu->mode == IW_MODE_MONITOR){ 11058- 11059- ieee->dev->type = ARPHRD_IEEE80211; 11060+ ieee->dev->type = ARPHRD_IEEE80211_PRISM; 11061 }else{ 11062 ieee->dev->type = ARPHRD_ETHER; 11063 } 11064- 11065+ 11066 if (!ieee->proto_started){ 11067 ieee->iw_mode = wrqu->mode; 11068 }else{ 11069- ieee80211_stop_protocol(ieee); 11070+ ieee80211_stop_protocol_rtl7(ieee); 11071 ieee->iw_mode = wrqu->mode; 11072- ieee80211_start_protocol(ieee); 11073+ ieee80211_start_protocol_rtl7(ieee); 11074+ } 11075+ 11076+ if(ieee->iw_mode == IW_MODE_MONITOR) 11077+ { 11078+ ieee->raw_tx = 1; 11079+ if(prev == 0 && ieee->raw_tx){ 11080+ if (ieee->data_hard_resume) 11081+ ieee->data_hard_resume(ieee->dev); 11082+ 11083+ netif_carrier_on(ieee->dev); 11084+ } 11085+ 11086+ netif_carrier_on(ieee->dev); 11087+ } 11088+ else 11089+ { 11090+ ieee->raw_tx = 0; 11091 } 11092 11093 out: 11094@@ -264,120 +281,132 @@ 11095 return 0; 11096 } 11097 11098-void ieee80211_wx_sync_scan_wq(struct ieee80211_device *ieee) 11099+# if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,20)) 11100+void ieee80211_wx_sync_scan_wq_rtl7(struct work_struct *work) 11101 { 11102+ struct ieee80211_device *ieee = container_of(work, struct ieee80211_device, wx_sync_scan_wq); 11103+#else 11104+void ieee80211_wx_sync_scan_wq_rtl7(struct ieee80211_device *ieee) 11105+{ 11106+#endif 11107 short chan; 11108 11109 chan = ieee->current_network.channel; 11110- 11111+ 11112 netif_carrier_off(ieee->dev); 11113- 11114+ 11115 if (ieee->data_hard_stop) 11116 ieee->data_hard_stop(ieee->dev); 11117- 11118- ieee80211_stop_send_beacons(ieee); 11119- 11120+ 11121+ ieee80211_stop_send_beacons_rtl7(ieee); 11122+ 11123 ieee->state = IEEE80211_LINKED_SCANNING; 11124 ieee->link_change(ieee->dev); 11125- 11126- ieee80211_start_scan_syncro(ieee); 11127- 11128+ 11129+ ieee80211_start_scan_syncro_rtl7(ieee); 11130+ 11131 ieee->set_chan(ieee->dev, chan); 11132- 11133+ 11134 ieee->state = IEEE80211_LINKED; 11135 ieee->link_change(ieee->dev); 11136- 11137+ 11138 if (ieee->data_hard_resume) 11139 ieee->data_hard_resume(ieee->dev); 11140- 11141+ 11142 if(ieee->iw_mode == IW_MODE_ADHOC || ieee->iw_mode == IW_MODE_MASTER) 11143- ieee80211_start_send_beacons(ieee); 11144- 11145+ ieee80211_start_send_beacons_rtl7(ieee); 11146+ 11147 netif_carrier_on(ieee->dev); 11148- 11149+ 11150 up(&ieee->wx_sem); 11151- 11152+ 11153 } 11154 11155-int ieee80211_wx_set_scan(struct ieee80211_device *ieee, struct iw_request_info *a, 11156+int ieee80211_wx_set_scan_rtl7(struct ieee80211_device *ieee, struct iw_request_info *a, 11157 union iwreq_data *wrqu, char *b) 11158 { 11159 int ret = 0; 11160- 11161+ 11162 down(&ieee->wx_sem); 11163- 11164- if (ieee->iw_mode == IW_MODE_MONITOR || !(ieee->proto_started)){ 11165+ 11166+ if (ieee->iw_mode == IW_MODE_MONITOR || !(ieee->proto_started)){ 11167 ret = -1; 11168 goto out; 11169 } 11170- 11171+ 11172 if ( ieee->state == IEEE80211_LINKED){ 11173 queue_work(ieee->wq, &ieee->wx_sync_scan_wq); 11174 /* intentionally forget to up sem */ 11175 return 0; 11176 } 11177- 11178+ 11179 out: 11180 up(&ieee->wx_sem); 11181 return ret; 11182 } 11183 11184-int ieee80211_wx_set_essid(struct ieee80211_device *ieee, 11185+int ieee80211_wx_set_essid_rtl7(struct ieee80211_device *ieee, 11186 struct iw_request_info *a, 11187 union iwreq_data *wrqu, char *extra) 11188 { 11189- 11190+ 11191 int ret=0,len; 11192 short proto_started; 11193 unsigned long flags; 11194- 11195+ 11196 ieee->sync_scan_hurryup = 1; 11197- 11198+ 11199 down(&ieee->wx_sem); 11200- 11201+ 11202 proto_started = ieee->proto_started; 11203- 11204+ 11205 if (wrqu->essid.length > IW_ESSID_MAX_SIZE){ 11206 ret= -E2BIG; 11207 goto out; 11208 } 11209- 11210+ 11211 if (ieee->iw_mode == IW_MODE_MONITOR){ 11212 ret= -1; 11213 goto out; 11214 } 11215- 11216+ 11217 if(proto_started) 11218- ieee80211_stop_protocol(ieee); 11219- 11220+ ieee80211_stop_protocol_rtl7(ieee); 11221+ 11222 /* this is just to be sure that the GET wx callback 11223 * has consisten infos. not needed otherwise 11224 */ 11225 spin_lock_irqsave(&ieee->lock, flags); 11226- 11227+ 11228 if (wrqu->essid.flags && wrqu->essid.length) { 11229+#if WIRELESS_EXT > 20 11230+ len = min((int)wrqu->essid.length, IW_ESSID_MAX_SIZE); 11231+#else 11232 len = ((wrqu->essid.length-1) < IW_ESSID_MAX_SIZE) ? (wrqu->essid.length-1) : IW_ESSID_MAX_SIZE; 11233- 11234+#endif 11235+ 11236 strncpy(ieee->current_network.ssid, extra, len); 11237 ieee->current_network.ssid_len = len; 11238 ieee->ssid_set = 1; 11239 } 11240- else{ 11241+ else{ 11242 ieee->ssid_set = 0; 11243 ieee->current_network.ssid[0] = '\0'; 11244 ieee->current_network.ssid_len = 0; 11245 } 11246- 11247+ 11248 spin_unlock_irqrestore(&ieee->lock, flags); 11249- 11250+ 11251 if (proto_started) 11252- ieee80211_start_protocol(ieee); 11253+ ieee80211_start_protocol_rtl7(ieee); 11254 out: 11255 up(&ieee->wx_sem); 11256+ 11257+ 11258 return ret; 11259 } 11260 11261- int ieee80211_wx_get_mode(struct ieee80211_device *ieee, struct iw_request_info *a, 11262+ int ieee80211_wx_get_mode_rtl7(struct ieee80211_device *ieee, struct iw_request_info *a, 11263 union iwreq_data *wrqu, char *b) 11264 { 11265 11266@@ -385,23 +414,23 @@ 11267 return 0; 11268 } 11269 11270- int ieee80211_wx_set_rawtx(struct ieee80211_device *ieee, 11271- struct iw_request_info *info, 11272+ int ieee80211_wx_set_rawtx_rtl7(struct ieee80211_device *ieee, 11273+ struct iw_request_info *info, 11274 union iwreq_data *wrqu, char *extra) 11275 { 11276- 11277+ 11278 int *parms = (int *)extra; 11279 int enable = (parms[0] > 0); 11280 short prev = ieee->raw_tx; 11281 11282 down(&ieee->wx_sem); 11283- 11284- if(enable) 11285+ 11286+ if(enable) 11287 ieee->raw_tx = 1; 11288- else 11289+ else 11290 ieee->raw_tx = 0; 11291 11292- printk(KERN_INFO"raw TX is %s\n", 11293+ printk(KERN_INFO"raw TX is %s\n", 11294 ieee->raw_tx ? "enabled" : "disabled"); 11295 11296 if(ieee->iw_mode == IW_MODE_MONITOR) 11297@@ -409,21 +438,21 @@ 11298 if(prev == 0 && ieee->raw_tx){ 11299 if (ieee->data_hard_resume) 11300 ieee->data_hard_resume(ieee->dev); 11301- 11302- netif_carrier_on(ieee->dev); 11303+ 11304+ netif_carrier_on(ieee->dev); 11305 } 11306- 11307+ 11308 if(prev && ieee->raw_tx == 1) 11309- netif_carrier_off(ieee->dev); 11310+ netif_carrier_off(ieee->dev); 11311 } 11312- 11313+ 11314 up(&ieee->wx_sem); 11315- 11316+ 11317 return 0; 11318 } 11319- 11320-int ieee80211_wx_get_name(struct ieee80211_device *ieee, 11321- struct iw_request_info *info, 11322+ 11323+int ieee80211_wx_get_name_rtl7(struct ieee80211_device *ieee, 11324+ struct iw_request_info *info, 11325 union iwreq_data *wrqu, char *extra) 11326 { 11327 strcpy(wrqu->name, "802.11"); 11328@@ -433,20 +462,20 @@ 11329 strcat(wrqu->name, "/g"); 11330 }else if(ieee->modulation & IEEE80211_OFDM_MODULATION) 11331 strcat(wrqu->name, "g"); 11332- 11333- if((ieee->state == IEEE80211_LINKED) || 11334+ 11335+ if((ieee->state == IEEE80211_LINKED) || 11336 (ieee->state == IEEE80211_LINKED_SCANNING)) 11337 strcat(wrqu->name," linked"); 11338 else if(ieee->state != IEEE80211_NOLINK) 11339 strcat(wrqu->name," link.."); 11340- 11341- 11342+ 11343+ 11344 return 0; 11345 } 11346 11347 11348 /* this is mostly stolen from hostap */ 11349-int ieee80211_wx_set_power(struct ieee80211_device *ieee, 11350+int ieee80211_wx_set_power_rtl7(struct ieee80211_device *ieee, 11351 struct iw_request_info *info, 11352 union iwreq_data *wrqu, char *extra) 11353 { 11354@@ -457,50 +486,50 @@ 11355 (!ieee->ps_request_tx_ack) || 11356 (!ieee->enter_sleep_state) || 11357 (!ieee->ps_is_queue_empty)){ 11358- 11359+ 11360 printk("ERROR. PS mode is tryied to be use but\ 11361-driver missed a callback\n\n"); 11362- 11363+driver missed a callback\n\n"); 11364+ 11365 return -1; 11366 } 11367- 11368+ 11369 down(&ieee->wx_sem); 11370- 11371+ 11372 if (wrqu->power.disabled){ 11373 ieee->ps = IEEE80211_PS_DISABLED; 11374- 11375+ 11376 goto exit; 11377 } 11378 switch (wrqu->power.flags & IW_POWER_MODE) { 11379 case IW_POWER_UNICAST_R: 11380 ieee->ps = IEEE80211_PS_UNICAST; 11381- 11382+ 11383 break; 11384 case IW_POWER_ALL_R: 11385- ieee->ps = IEEE80211_PS_UNICAST | IEEE80211_PS_MBCAST; 11386+ ieee->ps = IEEE80211_PS_UNICAST | IEEE80211_PS_MBCAST; 11387 break; 11388- 11389+ 11390 case IW_POWER_ON: 11391 ieee->ps = IEEE80211_PS_DISABLED; 11392 break; 11393- 11394+ 11395 default: 11396 ret = -EINVAL; 11397 goto exit; 11398 } 11399 11400 if (wrqu->power.flags & IW_POWER_TIMEOUT) { 11401- 11402+ 11403 ieee->ps_timeout = wrqu->power.value / 1000; 11404 printk("Timeout %d\n",ieee->ps_timeout); 11405 } 11406- 11407+ 11408 if (wrqu->power.flags & IW_POWER_PERIOD) { 11409- 11410+ 11411 ret = -EOPNOTSUPP; 11412 goto exit; 11413 //wrq->value / 1024; 11414- 11415+ 11416 } 11417 exit: 11418 up(&ieee->wx_sem); 11419@@ -509,15 +538,15 @@ 11420 } 11421 11422 /* this is stolen from hostap */ 11423-int ieee80211_wx_get_power(struct ieee80211_device *ieee, 11424+int ieee80211_wx_get_power_rtl7(struct ieee80211_device *ieee, 11425 struct iw_request_info *info, 11426 union iwreq_data *wrqu, char *extra) 11427 { 11428 int ret =0; 11429- 11430+ 11431 down(&ieee->wx_sem); 11432- 11433- if(ieee->ps == IEEE80211_PS_DISABLED){ 11434+ 11435+ if(ieee->ps == IEEE80211_PS_DISABLED){ 11436 wrqu->power.disabled = 1; 11437 goto exit; 11438 } 11439@@ -547,19 +576,19 @@ 11440 11441 } 11442 11443-EXPORT_SYMBOL(ieee80211_wx_get_essid); 11444-EXPORT_SYMBOL(ieee80211_wx_set_essid); 11445-EXPORT_SYMBOL(ieee80211_wx_set_rate); 11446-EXPORT_SYMBOL(ieee80211_wx_get_rate); 11447-EXPORT_SYMBOL(ieee80211_wx_set_wap); 11448-EXPORT_SYMBOL(ieee80211_wx_get_wap); 11449-EXPORT_SYMBOL(ieee80211_wx_set_mode); 11450-EXPORT_SYMBOL(ieee80211_wx_get_mode); 11451-EXPORT_SYMBOL(ieee80211_wx_set_scan); 11452-EXPORT_SYMBOL(ieee80211_wx_get_freq); 11453-EXPORT_SYMBOL(ieee80211_wx_set_freq); 11454-EXPORT_SYMBOL(ieee80211_wx_set_rawtx); 11455-EXPORT_SYMBOL(ieee80211_wx_get_name); 11456-EXPORT_SYMBOL(ieee80211_wx_set_power); 11457-EXPORT_SYMBOL(ieee80211_wx_get_power); 11458-EXPORT_SYMBOL(ieee80211_wlan_frequencies); 11459+EXPORT_SYMBOL(ieee80211_wx_get_essid_rtl7); 11460+EXPORT_SYMBOL(ieee80211_wx_set_essid_rtl7); 11461+EXPORT_SYMBOL(ieee80211_wx_set_rate_rtl7); 11462+EXPORT_SYMBOL(ieee80211_wx_get_rate_rtl7); 11463+EXPORT_SYMBOL(ieee80211_wx_set_wap_rtl7); 11464+EXPORT_SYMBOL(ieee80211_wx_get_wap_rtl7); 11465+EXPORT_SYMBOL(ieee80211_wx_set_mode_rtl7); 11466+EXPORT_SYMBOL(ieee80211_wx_get_mode_rtl7); 11467+EXPORT_SYMBOL(ieee80211_wx_set_scan_rtl7); 11468+EXPORT_SYMBOL(ieee80211_wx_get_freq_rtl7); 11469+EXPORT_SYMBOL(ieee80211_wx_set_freq_rtl7); 11470+EXPORT_SYMBOL(ieee80211_wx_set_rawtx_rtl7); 11471+EXPORT_SYMBOL(ieee80211_wx_get_name_rtl7); 11472+EXPORT_SYMBOL(ieee80211_wx_set_power_rtl7); 11473+EXPORT_SYMBOL(ieee80211_wx_get_power_rtl7); 11474+EXPORT_SYMBOL(ieee80211_wlan_frequencies_rtl7); 11475diff -Naur rtl8187_orig/ieee80211/ieee80211_tx.c rtl8187_rawtx/ieee80211/ieee80211_tx.c 11476--- rtl8187_orig/ieee80211/ieee80211_tx.c 2007-03-13 23:45:09.000000000 +0100 11477+++ rtl8187_rawtx/ieee80211/ieee80211_tx.c 2007-06-08 23:30:47.000000000 +0200 11478@@ -32,7 +32,6 @@ 11479 ******************************************************************************/ 11480 11481 #include <linux/compiler.h> 11482-#include <linux/config.h> 11483 #include <linux/errno.h> 11484 #include <linux/if_arp.h> 11485 #include <linux/in6.h> 11486@@ -52,6 +51,12 @@ 11487 #include <linux/etherdevice.h> 11488 #include <asm/uaccess.h> 11489 11490+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)) 11491+#include <linux/config.h> 11492+#else 11493+#include <linux/autoconf.h> 11494+#endif 11495+ 11496 #include "ieee80211.h" 11497 11498 11499@@ -155,7 +160,7 @@ 11500 static u8 P802_1H_OUI[P80211_OUI_LEN] = { 0x00, 0x00, 0xf8 }; 11501 static u8 RFC1042_OUI[P80211_OUI_LEN] = { 0x00, 0x00, 0x00 }; 11502 11503-static inline int ieee80211_put_snap(u8 *data, u16 h_proto) 11504+static inline int ieee80211_put_snap_rtl7(u8 *data, u16 h_proto) 11505 { 11506 struct ieee80211_snap_hdr *snap; 11507 u8 *oui; 11508@@ -178,7 +183,7 @@ 11509 return SNAP_SIZE + sizeof(u16); 11510 } 11511 11512-int ieee80211_encrypt_fragment( 11513+int ieee80211_encrypt_fragment_rtl7( 11514 struct ieee80211_device *ieee, 11515 struct sk_buff *frag, 11516 int hdr_len) 11517@@ -225,7 +230,7 @@ 11518 } 11519 11520 11521-void ieee80211_txb_free(struct ieee80211_txb *txb) { 11522+void ieee80211_txb_free_rtl7(struct ieee80211_txb *txb) { 11523 int i; 11524 if (unlikely(!txb)) 11525 return; 11526@@ -235,7 +240,7 @@ 11527 kfree(txb); 11528 } 11529 11530-struct ieee80211_txb *ieee80211_alloc_txb(int nr_frags, int txb_size, 11531+struct ieee80211_txb *ieee80211_alloc_txb_rtl7(int nr_frags, int txb_size, 11532 int gfp_mask) 11533 { 11534 struct ieee80211_txb *txb; 11535@@ -267,7 +272,7 @@ 11536 } 11537 11538 /* SKBs are added to the ieee->tx_queue. */ 11539-int ieee80211_xmit(struct sk_buff *skb, 11540+int ieee80211_xmit_rtl7(struct sk_buff *skb, 11541 struct net_device *dev) 11542 { 11543 struct ieee80211_device *ieee = netdev_priv(dev); 11544@@ -397,7 +402,7 @@ 11545 /* When we allocate the TXB we allocate enough space for the reserve 11546 * and full fragment bytes (bytes_per_frag doesn't include prefix, 11547 * postfix, header, FCS, etc.) */ 11548- txb = ieee80211_alloc_txb(nr_frags, frag_size, GFP_ATOMIC); 11549+ txb = ieee80211_alloc_txb_rtl7(nr_frags, frag_size, GFP_ATOMIC); 11550 if (unlikely(!txb)) { 11551 printk(KERN_WARNING "%s: Could not allocate TXB\n", 11552 ieee->dev->name); 11553@@ -432,7 +437,7 @@ 11554 11555 /* Put a SNAP header on the first fragment */ 11556 if (i == 0) { 11557- ieee80211_put_snap( 11558+ ieee80211_put_snap_rtl7( 11559 skb_put(skb_frag, SNAP_SIZE + sizeof(u16)), 11560 ether_type); 11561 bytes -= SNAP_SIZE + sizeof(u16); 11562@@ -446,7 +451,7 @@ 11563 /* Encryption routine will move the header forward in order 11564 * to insert the IV between the header and the payload */ 11565 if (encrypt) 11566- ieee80211_encrypt_fragment(ieee, skb_frag, hdr_len); 11567+ ieee80211_encrypt_fragment_rtl7(ieee, skb_frag, hdr_len); 11568 if (ieee->config & 11569 (CFG_IEEE80211_COMPUTE_FCS | CFG_IEEE80211_RESERVE_FCS)) 11570 skb_put(skb_frag, 4); 11571@@ -458,13 +463,14 @@ 11572 ieee->seq_ctrl++; 11573 //--- 11574 }else{ 11575- if (unlikely(skb->len < sizeof(struct ieee80211_hdr_3addr))) { 11576+// if (unlikely(skb->len < sizeof(struct ieee80211_hdr_3addr))) { 11577+ if (unlikely(skb->len < 14)) { 11578 printk(KERN_WARNING "%s: skb too small (%d).\n", 11579 ieee->dev->name, skb->len); 11580 goto success; 11581 } 11582 11583- txb = ieee80211_alloc_txb(1, skb->len, GFP_ATOMIC); 11584+ txb = ieee80211_alloc_txb_rtl7(1, skb->len, GFP_ATOMIC); 11585 if(!txb){ 11586 printk(KERN_WARNING "%s: Could not allocate TXB\n", 11587 ieee->dev->name); 11588@@ -481,14 +487,14 @@ 11589 dev_kfree_skb_any(skb); 11590 if (txb) { 11591 if (ieee->softmac_features & IEEE_SOFTMAC_TX_QUEUE){ 11592- ieee80211_softmac_xmit(txb, ieee); 11593+ ieee80211_softmac_xmit_rtl7(txb, ieee); 11594 }else{ 11595 if ((*ieee->hard_start_xmit)(txb, dev) == 0) { 11596 stats->tx_packets++; 11597 stats->tx_bytes += txb->payload_size; 11598 return 0; 11599 } 11600- ieee80211_txb_free(txb); 11601+ ieee80211_txb_free_rtl7(txb); 11602 } 11603 11604 11605@@ -504,4 +510,4 @@ 11606 11607 } 11608 11609-EXPORT_SYMBOL(ieee80211_txb_free); 11610+EXPORT_SYMBOL(ieee80211_txb_free_rtl7); 11611diff -Naur rtl8187_orig/ieee80211/ieee80211_wx.c rtl8187_rawtx/ieee80211/ieee80211_wx.c 11612--- rtl8187_orig/ieee80211/ieee80211_wx.c 2007-03-13 23:45:09.000000000 +0100 11613+++ rtl8187_rawtx/ieee80211/ieee80211_wx.c 2007-06-08 23:30:47.000000000 +0200 11614@@ -40,7 +40,7 @@ 11615 }; 11616 11617 #define MAX_CUSTOM_LEN 64 11618-static inline char *ipw2100_translate_scan(struct ieee80211_device *ieee, 11619+static inline char *ipw2100_translate_scan_rtl7(struct ieee80211_device *ieee, 11620 char *start, char *stop, 11621 struct ieee80211_network *network) 11622 { 11623@@ -207,7 +207,7 @@ 11624 return start; 11625 } 11626 11627-int ieee80211_wx_get_scan(struct ieee80211_device *ieee, 11628+int ieee80211_wx_get_scan_rtl7(struct ieee80211_device *ieee, 11629 struct iw_request_info *info, 11630 union iwreq_data *wrqu, char *extra) 11631 { 11632@@ -220,13 +220,14 @@ 11633 11634 IEEE80211_DEBUG_WX("Getting scan\n"); 11635 down(&ieee->wx_sem); 11636+ printk("GOT WX GET SCAN WX_SEM LOCK"); 11637 spin_lock_irqsave(&ieee->lock, flags); 11638 11639 list_for_each_entry(network, &ieee->network_list, list) { 11640 i++; 11641 if (ieee->scan_age == 0 || 11642 time_after(network->last_scanned + ieee->scan_age, jiffies)) 11643- ev = ipw2100_translate_scan(ieee, ev, stop, network); 11644+ ev = ipw2100_translate_scan_rtl7(ieee, ev, stop, network); 11645 else 11646 IEEE80211_DEBUG_SCAN( 11647 "Not showing network '%s (" 11648@@ -247,7 +248,7 @@ 11649 return 0; 11650 } 11651 11652-int ieee80211_wx_set_encode(struct ieee80211_device *ieee, 11653+int ieee80211_wx_set_encode_rtl7(struct ieee80211_device *ieee, 11654 struct iw_request_info *info, 11655 union iwreq_data *wrqu, char *keybuf) 11656 { 11657@@ -281,7 +282,7 @@ 11658 if (key_provided && *crypt) { 11659 IEEE80211_DEBUG_WX("Disabling encryption on key %d.\n", 11660 key); 11661- ieee80211_crypt_delayed_deinit(ieee, crypt); 11662+ ieee80211_crypt_delayed_deinit_rtl7(ieee, crypt); 11663 } else 11664 IEEE80211_DEBUG_WX("Disabling encryption.\n"); 11665 11666@@ -291,7 +292,7 @@ 11667 if (ieee->crypt[i] != NULL) { 11668 if (key_provided) 11669 break; 11670- ieee80211_crypt_delayed_deinit( 11671+ ieee80211_crypt_delayed_deinit_rtl7( 11672 ieee, &ieee->crypt[i]); 11673 } 11674 } 11675@@ -314,7 +315,7 @@ 11676 strcmp((*crypt)->ops->name, "WEP") != 0) { 11677 /* changing to use WEP; deinit previously used algorithm 11678 * on this key */ 11679- ieee80211_crypt_delayed_deinit(ieee, crypt); 11680+ ieee80211_crypt_delayed_deinit_rtl7(ieee, crypt); 11681 } 11682 11683 if (*crypt == NULL) { 11684@@ -326,10 +327,10 @@ 11685 if (new_crypt == NULL) 11686 return -ENOMEM; 11687 memset(new_crypt, 0, sizeof(struct ieee80211_crypt_data)); 11688- new_crypt->ops = ieee80211_get_crypto_ops("WEP"); 11689+ new_crypt->ops = ieee80211_get_crypto_ops_rtl7("WEP"); 11690 if (!new_crypt->ops) { 11691- request_module("ieee80211_crypt_wep"); 11692- new_crypt->ops = ieee80211_get_crypto_ops("WEP"); 11693+ request_module("ieee80211_crypt_wep_rtl"); 11694+ new_crypt->ops = ieee80211_get_crypto_ops_rtl7("WEP"); 11695 } 11696 11697 if (new_crypt->ops && try_module_get(new_crypt->ops->owner)) 11698@@ -340,7 +341,7 @@ 11699 new_crypt = NULL; 11700 11701 printk(KERN_WARNING "%s: could not initialize WEP: " 11702- "load module ieee80211_crypt_wep\n", 11703+ "load module ieee80211_crypt_wep_rtl\n", 11704 dev->name); 11705 return -EOPNOTSUPP; 11706 } 11707@@ -418,7 +419,7 @@ 11708 return 0; 11709 } 11710 11711-int ieee80211_wx_get_encode(struct ieee80211_device *ieee, 11712+int ieee80211_wx_get_encode_rtl7(struct ieee80211_device *ieee, 11713 struct iw_request_info *info, 11714 union iwreq_data *wrqu, char *keybuf) 11715 { 11716@@ -430,7 +431,7 @@ 11717 11718 if(ieee->iw_mode == IW_MODE_MONITOR) 11719 return -1; 11720- 11721+ 11722 key = erq->flags & IW_ENCODE_INDEX; 11723 if (key) { 11724 if (key > WEP_KEYS) 11725@@ -470,6 +471,6 @@ 11726 } 11727 11728 11729-EXPORT_SYMBOL(ieee80211_wx_get_scan); 11730-EXPORT_SYMBOL(ieee80211_wx_set_encode); 11731-EXPORT_SYMBOL(ieee80211_wx_get_encode); 11732+EXPORT_SYMBOL(ieee80211_wx_get_scan_rtl7); 11733+EXPORT_SYMBOL(ieee80211_wx_set_encode_rtl7); 11734+EXPORT_SYMBOL(ieee80211_wx_get_encode_rtl7); 11735diff -Naur rtl8187_orig/ieee80211/Makefile rtl8187_rawtx/ieee80211/Makefile 11736--- rtl8187_orig/ieee80211/Makefile 2007-03-13 23:45:09.000000000 +0100 11737+++ rtl8187_rawtx/ieee80211/Makefile 2007-05-27 10:47:26.000000000 +0200 11738@@ -17,6 +17,7 @@ 11739 KVER := $(shell uname -r) 11740 KSRC := /lib/modules/$(KVER)/build 11741 INSTALL_PREFIX := 11742+PWD = $(shell pwd) 11743 11744 all: modules 11745 11746diff -Naur rtl8187_orig/Makefile rtl8187_rawtx/Makefile 11747--- rtl8187_orig/Makefile 1970-01-01 01:00:00.000000000 +0100 11748+++ rtl8187_rawtx/Makefile 2007-05-26 10:39:10.000000000 +0200 11749@@ -0,0 +1,36 @@ 11750+prefix = /lib/modules/$(shell uname -r)/kernel/drivers/net/wireless 11751+r8187dir = $(prefix)/rtl8187 11752+ieeedir = $(prefix)/rtl_ieee80211 11753+ 11754+default: all 11755+ 11756+all: 11757+ $(MAKE) -C ieee80211 $(@) 11758+ -chmod +x symvers 11759+ -./symvers 11760+ $(MAKE) -C beta-8187 $(@) 11761+ 11762+install: 11763+ install -d $(ieeedir) 11764+ install -d $(r8187dir) 11765+ install -m 644 ./ieee80211/*.ko $(ieeedir) 11766+ install -m 644 ./beta-8187/*.ko $(r8187dir) 11767+ -depmod -ae 11768+ 11769+uninstall: 11770+ -rm -f $(ieeedir)/ieee80211-rtl.ko 11771+ -rm -f $(ieeedir)/ieee80211_crypt-rtl.ko 11772+ -rm -f $(ieeedir)/ieee80211_crypt_ccmp-rtl.ko 11773+ -rm -f $(ieeedir)/ieee80211_crypt_tkip-rtl.ko 11774+ -rm -f $(ieeedir)/ieee80211_crypt_wep-rtl.ko 11775+ -rm -f $(r8187dir)/r8187.ko 11776+ -rm -fr $(ieeedir) 11777+ -rm -fr $(r8187dir) 11778+ -depmod -ae 11779+ 11780+clean: 11781+ $(MAKE) -C ieee80211 $(@) 11782+ $(MAKE) -C beta-8187 $(@) 11783+ 11784+distclean: clean 11785+ 11786diff -Naur rtl8187_orig/symvers rtl8187_rawtx/symvers 11787--- rtl8187_orig/symvers 1970-01-01 01:00:00.000000000 +0100 11788+++ rtl8187_rawtx/symvers 2007-05-26 10:39:22.000000000 +0200 11789@@ -0,0 +1,25 @@ 11790+#!/bin/sh 11791+ 11792+cd beta-8187 11793+ 11794+if [ -e Module.symvers ] 11795+then 11796+ rm Module.symvers 11797+fi 11798+ 11799+if [ -e Modules.symvers ] 11800+then 11801+ rm Modules.symvers 11802+fi 11803+ 11804+if [ -e ../ieee80211/Module.symvers ] 11805+then 11806+ ln -sf ../ieee80211/Module.symvers ./ 11807+fi 11808+ 11809+if [ -e ../ieee80211/Modules.symvers ] 11810+then 11811+ ln -sf ../ieee80211/Modules.symvers ./ 11812+fi 11813+ 11814+cd .. 11815