diff options
Diffstat (limited to 'network/rtl-wifi/patch_2_6_24.diff')
-rw-r--r-- | network/rtl-wifi/patch_2_6_24.diff | 536 |
1 files changed, 536 insertions, 0 deletions
diff --git a/network/rtl-wifi/patch_2_6_24.diff b/network/rtl-wifi/patch_2_6_24.diff new file mode 100644 index 0000000000..e13feae1c1 --- /dev/null +++ b/network/rtl-wifi/patch_2_6_24.diff @@ -0,0 +1,536 @@ +diff -U 3 -Nar o/ieee80211/ieee80211_crypt_tkip.c n/ieee80211/ieee80211_crypt_tkip.c +--- o/ieee80211/ieee80211_crypt_tkip.c 2008-02-16 13:47:42.000000000 +0300 ++++ n/ieee80211/ieee80211_crypt_tkip.c 2008-02-16 14:12:34.000000000 +0300 +@@ -412,9 +412,13 @@ + icv[3] = crc >> 24; + + crypto_blkcipher_setkey(tkey->tx_tfm_arc4, rc4key, 16); ++#if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) + sg.page = virt_to_page(pos); + sg.offset = offset_in_page(pos); + sg.length = len + 4; ++#else ++ sg_init_one(&sg, pos, len + 4); ++#endif + #if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18) + return crypto_blkcipher_encrypt(&desc, &sg, &sg, len + 4); + #else +@@ -512,9 +516,13 @@ + plen = skb->len - hdr_len - 12; + + crypto_blkcipher_setkey(tkey->rx_tfm_arc4, rc4key, 16); ++#if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) + sg.page = virt_to_page(pos); + sg.offset = offset_in_page(pos); + sg.length = plen + 4; ++#else ++ sg_init_one(&sg, pos, plen + 4); ++#endif + #if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18) + if (crypto_blkcipher_decrypt(&desc, &sg, &sg, plen + 4)) { + #else +@@ -572,6 +580,7 @@ + printk(KERN_WARNING "michael_mic: tfm_michael == NULL\n"); + return -1; + } ++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24) + sg[0].page = virt_to_page(hdr); + sg[0].offset = offset_in_page(hdr); + sg[0].length = 16; +@@ -579,6 +588,11 @@ + sg[1].page = virt_to_page(data); + sg[1].offset = offset_in_page(data); + sg[1].length = data_len; ++#else ++ sg_init_table(sg, 2); ++ sg_set_buf(&sg[0], hdr, 16); ++ sg_set_buf(&sg[1], data, data_len); ++#endif + + #if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18) + if (crypto_hash_setkey(tfm_michael, key, 8)) +diff -U 3 -Nar o/ieee80211/ieee80211_crypt_wep.c n/ieee80211/ieee80211_crypt_wep.c +--- o/ieee80211/ieee80211_crypt_wep.c 2008-02-16 13:47:42.000000000 +0300 ++++ n/ieee80211/ieee80211_crypt_wep.c 2008-02-16 14:16:59.000000000 +0300 +@@ -187,9 +187,13 @@ + icv[3] = crc >> 24; + + crypto_blkcipher_setkey(wep->tx_tfm, key, klen); ++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24) + sg.page = virt_to_page(pos); + sg.offset = offset_in_page(pos); + sg.length = len + 4; ++#else ++ sg_init_one(&sg, pos, len + 4); ++#endif + #if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18) + return crypto_blkcipher_encrypt(&desc, &sg, &sg, len + 4); + #else +@@ -235,9 +239,13 @@ + plen = skb->len - hdr_len - 8; + + crypto_blkcipher_setkey(wep->rx_tfm, key, klen); ++#if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) + sg.page = virt_to_page(pos); + sg.offset = offset_in_page(pos); + sg.length = plen + 4; ++#else ++ sg_init_one(&sg, pos, plen + 4); ++#endif + #if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18) + if (crypto_blkcipher_decrypt(&desc, &sg, &sg, plen + 4)) + #else +diff -U 3 -Nar o/rtl8187-dev/ieee80211_crypt_wep.c n/rtl8187-dev/ieee80211_crypt_wep.c +--- o/rtl8187-dev/ieee80211_crypt_wep.c 2008-02-16 13:47:45.000000000 +0300 ++++ n/rtl8187-dev/ieee80211_crypt_wep.c 2008-02-16 21:24:09.000000000 +0300 +@@ -64,7 +64,12 @@ + u8 key[WEP_KEY_LEN + 1]; + u8 key_len; + u8 key_idx; ++#if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) + struct crypto_tfm *tfm; ++#else ++ struct crypto_blkcipher *tx_tfm; ++ struct crypto_blkcipher *rx_tfm; ++#endif + }; + + +@@ -85,19 +90,38 @@ + memset(priv, 0, sizeof(*priv)); + priv->key_idx = keyidx; + ++ ++#if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) + priv->tfm = crypto_alloc_tfm("arc4", 0); + if (priv->tfm == NULL) { +- printk(KERN_DEBUG "ieee80211_crypt_wep: could not allocate " +- "crypto API arc4\n"); +- goto fail; ++ printk(KERN_DEBUG "ieee80211_crypt_wep: could not allocate " ++ "crypto API arc4\n"); ++ goto fail; + } +- ++#else ++ priv->tx_tfm = crypto_alloc_blkcipher("ecb(arc4)", 0, CRYPTO_ALG_ASYNC); ++ if (IS_ERR(priv->tx_tfm)) { ++ printk(KERN_DEBUG "ieee80211_crypt_wep: could not allocate " ++ "crypto API arc4\n"); ++ priv->tx_tfm = NULL; ++ goto fail; ++ } ++ priv->rx_tfm = crypto_alloc_blkcipher("ecb(arc4)", 0, CRYPTO_ALG_ASYNC); ++ if (IS_ERR(priv->rx_tfm)) { ++ printk(KERN_DEBUG "ieee80211_crypt_wep: could not allocate " ++ "crypto API arc4\n"); ++ priv->rx_tfm = NULL; ++ goto fail; ++ } ++#endif ++ + /* start WEP IV from a random value */ + get_random_bytes(&priv->iv, 4); + + return priv; + + fail: ++ #if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) + if (priv) { + if (priv->tfm) + crypto_free_tfm(priv->tfm); +@@ -107,8 +131,17 @@ + module_put(THIS_MODULE); + #else + MOD_DEC_USE_COUNT; +-#endif ++#endif ++ #else ++ if (priv) { ++ if (priv->tx_tfm) ++ crypto_free_blkcipher(priv->tx_tfm); ++ if (priv->rx_tfm) ++ crypto_free_blkcipher(priv->rx_tfm); ++ kfree(priv); ++ } + ++ #endif + return NULL; + } + +@@ -116,8 +149,18 @@ + static void prism2_wep_deinit(void *priv) + { + struct prism2_wep_data *_priv = priv; +- if (_priv && _priv->tfm) +- crypto_free_tfm(_priv->tfm); ++#if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) ++ if (_priv && _priv->tfm) ++ crypto_free_tfm(_priv->tfm); ++#else ++ if (_priv) { ++ if (_priv->tx_tfm) ++ crypto_free_blkcipher(_priv->tx_tfm); ++ if (_priv->rx_tfm) ++ crypto_free_blkcipher(_priv->rx_tfm); ++ } ++#endif ++ + kfree(priv); + #ifdef NEW_MODULE_CODE + module_put(THIS_MODULE); +@@ -136,6 +179,10 @@ + static int prism2_wep_encrypt(struct sk_buff *skb, int hdr_len, void *priv) + { + struct prism2_wep_data *wep = priv; ++#if(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21)) ++ struct blkcipher_desc desc = {.tfm = wep->tx_tfm}; ++#endif ++ + u32 crc, klen, len; + u8 key[WEP_KEY_LEN + 3]; + u8 *pos, *icv; +@@ -180,13 +227,24 @@ + icv[2] = crc >> 16; + icv[3] = crc >> 24; + ++ #if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) + crypto_cipher_setkey(wep->tfm, key, klen); + sg.page = virt_to_page(pos); + sg.offset = offset_in_page(pos); + sg.length = len + 4; + crypto_cipher_encrypt(wep->tfm, &sg, &sg, len + 4); +- + return 0; ++ #else ++ crypto_blkcipher_setkey(wep->tx_tfm, key, klen); ++#if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) ++ sg.page = virt_to_page(pos); ++ sg.offset = offset_in_page(pos); ++ sg.length = len + 4; ++#else ++ sg_init_one(&sg, pos, len + 4); ++#endif ++ return crypto_blkcipher_encrypt(&desc, &sg, &sg, len + 4); ++ #endif + } + + +@@ -200,6 +258,9 @@ + static int prism2_wep_decrypt(struct sk_buff *skb, int hdr_len, void *priv) + { + struct prism2_wep_data *wep = priv; ++#if(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21)) ++ struct blkcipher_desc desc = {.tfm = wep->rx_tfm}; ++#endif + u32 crc, klen, plen; + u8 key[WEP_KEY_LEN + 3]; + u8 keyidx, *pos, icv[4]; +@@ -224,11 +285,24 @@ + /* Apply RC4 to data and compute CRC32 over decrypted data */ + plen = skb->len - hdr_len - 8; + ++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21)) + crypto_cipher_setkey(wep->tfm, key, klen); + sg.page = virt_to_page(pos); + sg.offset = offset_in_page(pos); + sg.length = plen + 4; + crypto_cipher_decrypt(wep->tfm, &sg, &sg, plen + 4); ++#else ++ crypto_blkcipher_setkey(wep->rx_tfm, key, klen); ++#if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) ++ sg.page = virt_to_page(pos); ++ sg.offset = offset_in_page(pos); ++ sg.length = plen + 4; ++#else ++ sg_init_one(&sg, pos, plen + 4); ++#endif ++ if (crypto_blkcipher_decrypt(&desc, &sg, &sg, plen + 4)) ++ return -7; ++#endif + + crc = ~crc32_le(~0, pos, plen); + icv[0] = crc; +diff -U 3 -Nar o/rtl8187-dev/ieee80211_module.c n/rtl8187-dev/ieee80211_module.c +--- o/rtl8187-dev/ieee80211_module.c 2008-02-16 13:47:45.000000000 +0300 ++++ n/rtl8187-dev/ieee80211_module.c 2008-02-16 18:50:10.000000000 +0300 +@@ -670,8 +670,14 @@ + ieee->associate_timer.function = ieee80211_associate_abort_; + /* init_waitqueue_head(&ieee->assoc_queue); + ieee->workqueue = create_workqueue(DRV_NAME);*/ ++/* Below is had to be discussed !!! */ ++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)) + INIT_WORK(&ieee->associate_wq,(void(*)(void*)) ieee80211_associate_step1,ieee); + INIT_WORK(&ieee->associate_complete_wq,(void(*)(void*)) ieee80211_associate_complete,ieee); ++#else ++ INIT_WORK(&ieee->associate_wq,(void(*)(void*)) ieee80211_associate_step1); ++ INIT_WORK(&ieee->associate_complete_wq,(void(*)(void*)) ieee80211_associate_complete); ++#endif + init_htables(ieee); + + return ieee; +diff -U 3 -Nar o/rtl8187-dev/ieee80211_rx.c n/rtl8187-dev/ieee80211_rx.c +--- o/rtl8187-dev/ieee80211_rx.c 2008-02-16 13:47:45.000000000 +0300 ++++ n/rtl8187-dev/ieee80211_rx.c 2008-02-16 15:01:25.000000000 +0300 +@@ -1153,8 +1153,13 @@ + if (skb2 != NULL) { + /* send to wireless media */ + skb2->protocol = __constant_htons(ETH_P_802_3); ++/* These needs to be discussed */ ++#if(LINUX_VERSION_CODE < KERNEL_VERSION(2,6,22)) + skb2->mac.raw = skb2->nh.raw = skb2->data; ++#else ++ skb2->mac_header= skb2->network_header = skb2->data; + /* skb2->nh.raw = skb2->data + ETH_HLEN; */ ++#endif + skb2->dev = dev; + dev_queue_xmit(skb2); + } +diff -U 3 -Nar o/rtl8187-dev/r8187_core.c n/rtl8187-dev/r8187_core.c +--- o/rtl8187-dev/r8187_core.c 2008-02-16 13:47:45.000000000 +0300 ++++ n/rtl8187-dev/r8187_core.c 2008-02-16 21:42:41.000000000 +0300 +@@ -89,24 +89,33 @@ + static int hwseqnum = 0; + static int hwwep = 0; + static int channels = 0x3fff; +- ++static int force_card = 0; + + MODULE_LICENSE("GPL"); + MODULE_DEVICE_TABLE(usb, rtl8187_usb_id_tbl); + MODULE_AUTHOR("Andrea Merello <andreamrl@tiscali.it>"); + MODULE_DESCRIPTION("Linux driver for Realtek RTL8187 WiFi cards"); +- ++#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 9) + MODULE_PARM(ifname,"s"); + MODULE_PARM_DESC(devname," Net interface name, wlan%d=default"); + + MODULE_PARM(hwseqnum,"i"); + MODULE_PARM_DESC(hwseqnum," Try to use hardware 802.11 header sequence numbers. Zero=default"); ++ + #if 0 + MODULE_PARM(hwwep,"i"); + MODULE_PARM_DESC(hwwep," Try to use hardware WEP support. Still broken and not available on all cards"); + #endif + MODULE_PARM(channels,"i"); + MODULE_PARM_DESC(channels," Channel bitmask for specific locales. NYI"); ++#else ++module_param(ifname, charp, S_IRUGO|S_IWUSR ); ++/* Uncomment following if needed */ ++/*module_param(hwseqnum,int, S_IRUGO|S_IWUSR); ++module_param(hwwep,int, S_IRUGO|S_IWUSR);*/ ++module_param(channels,int, S_IRUGO|S_IWUSR); ++module_param(force_card, int, S_IRUGO|S_IWUSR); ++#endif + + + static int __devinit rtl8187_usb_probe(struct usb_interface *intf, +@@ -115,7 +124,9 @@ + static void __devexit rtl8187_usb_disconnect(struct usb_interface *intf); + + static struct usb_driver rtl8187_usb_driver = { ++#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 15) + .owner = THIS_MODULE, ++#endif + .name = RTL8187_MODULE_NAME, /* Driver name */ + .id_table = rtl8187_usb_id_tbl, /* PCI_ID table */ + .probe = rtl8187_usb_probe, /* probe fn */ +@@ -479,13 +490,21 @@ + void rtl8180_proc_module_init(void) + { + DMESG("Initializing proc filesystem"); ++#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 24) + rtl8180_proc=create_proc_entry(RTL8187_MODULE_NAME, S_IFDIR, proc_net); ++#else ++ rtl8180_proc=create_proc_entry(RTL8187_MODULE_NAME, S_IFDIR, init_net.proc_net); ++#endif + } + + + void rtl8180_proc_module_remove(void) + { ++#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 24) + remove_proc_entry(RTL8187_MODULE_NAME, proc_net); ++#else ++ remove_proc_entry(RTL8187_MODULE_NAME, init_net.proc_net); ++#endif + } + + +@@ -2978,9 +2997,13 @@ + #endif + #endif + ++#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 20) + INIT_WORK(&priv->IBSS_work,(void(*)(void*)) rtl8180_IBSS_create_wq,dev); + INIT_WORK(&priv->scan_work,(void(*)(void*)) rtl8180_scan_wq,dev); +- ++#else ++ INIT_WORK(&priv->IBSS_work,(void(*)(void*)) rtl8180_IBSS_create_wq); ++ INIT_WORK(&priv->scan_work,(void(*)(void*)) rtl8180_scan_wq); ++#endif + tasklet_init(&priv->irq_rx_tasklet, + (void(*)(unsigned long)) rtl8180_irq_rx_tasklet, + (unsigned long)priv); +@@ -3973,8 +3996,10 @@ + struct usb_device *udev = interface_to_usbdev(intf); + + dev = alloc_etherdev(sizeof(*priv)); +- ++ ++#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 24) + SET_MODULE_OWNER(dev); ++#endif + usb_set_intfdata(intf, dev); + //pci_set_drvdata(pdev, dev); + #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) +diff -U 3 -Nar o/rtl8187-newstack/r8187_core.c n/rtl8187-newstack/r8187_core.c +--- o/rtl8187-newstack/r8187_core.c 2008-02-16 13:47:47.000000000 +0300 ++++ n/rtl8187-newstack/r8187_core.c 2008-02-16 23:37:53.000000000 +0300 +@@ -407,13 +407,21 @@ + void rtl8180_proc_module_init(void)
+ {
+ DMESG("Initializing proc filesystem");
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) + rtl8180_proc=create_proc_entry(RTL8187_MODULE_NAME, S_IFDIR, proc_net);
++#else ++ rtl8180_proc=create_proc_entry(RTL8187_MODULE_NAME, S_IFDIR, init_net.proc_net); ++#endif + }
+
+
+ void rtl8180_proc_module_remove(void)
+ {
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) + remove_proc_entry(RTL8187_MODULE_NAME, proc_net);
++#else ++ remove_proc_entry(RTL8187_MODULE_NAME, init_net.proc_net); ++#endif + }
+
+
+@@ -2407,7 +2415,9 @@ +
+ dev = alloc_ieee80211(sizeof(struct r8180_priv));
+
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) + SET_MODULE_OWNER(dev);
++#endif + usb_set_intfdata(intf, dev);
+
+ SET_NETDEV_DEV(dev, &intf->dev);
+diff -U 3 -Nar o/rtl818x-newstack/r8180.h n/rtl818x-newstack/r8180.h +--- o/rtl818x-newstack/r8180.h 2008-02-16 13:47:49.000000000 +0300 ++++ n/rtl818x-newstack/r8180.h 2008-02-17 01:09:28.000000000 +0300 +@@ -46,13 +46,14 @@ + #include <linux/delay.h> + #include <linux/rtnetlink.h> //for rtnl_lock() + #include <linux/wireless.h> +-#include <net/mac80211.h> +-#include <net/ieee80211softmac.h> ++//#include <net/mac80211.h> ++//#include <net/ieee80211softmac.h> + #include <linux/timer.h> + #include <linux/proc_fs.h> // Necessary because we use the proc fs + #include <linux/if_arp.h> + #include <asm/io.h> + #include <asm/semaphore.h> ++#include "ieee80211.h" + + #define EPROM_93c46 0 + #define EPROM_93c56 1 +@@ -244,44 +245,7 @@ + short ack_tx_to_ieee; + }r8180_priv; + +-enum ieee80211_state { + +- /* the card is not linked at all */ +- IEEE80211_NOLINK = 0, +- +- /* IEEE80211_ASSOCIATING* are for BSS client mode +- * the driver shall not perform RX filtering unless +- * the state is LINKED. +- * The driver shall just check for the state LINKED and +- * defaults to NOLINK for ALL the other states (including +- * LINKED_SCANNING) +- */ +- +- /* the association procedure will start (wq scheduling)*/ +- IEEE80211_ASSOCIATING, +- IEEE80211_ASSOCIATING_RETRY, +- +- /* the association procedure is sending AUTH request*/ +- IEEE80211_ASSOCIATING_AUTHENTICATING, +- +- /* the association procedure has successfully authentcated +- * and is sending association request +- */ +- IEEE80211_ASSOCIATING_AUTHENTICATED, +- +- /* the link is ok. the card associated to a BSS or linked +- * to a ibss cell or acting as an AP and creating the bss +- */ +- IEEE80211_LINKED, +- +- /* same as LINKED, but the driver shall apply RX filter +- * rules as we are in NO_LINK mode. As the card is still +- * logically linked, but it is doing a syncro site survey +- * then it will be back to LINKED state. +- */ +- IEEE80211_LINKED_SCANNING, +- +-}; + + #define BEACON_PRIORITY 3 + #define LOW_PRIORITY 1 +diff -U 3 -Nar o/rtl818x-newstack/r8180_core.c n/rtl818x-newstack/r8180_core.c +--- o/rtl818x-newstack/r8180_core.c 2008-02-16 13:47:49.000000000 +0300 ++++ n/rtl818x-newstack/r8180_core.c 2008-02-17 01:30:29.000000000 +0300 +@@ -529,13 +529,21 @@ + void rtl8180_proc_module_init(void) + { + DMESG("Initializing proc filesystem"); ++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) + rtl8180_proc=create_proc_entry(RTL8180_MODULE_NAME, S_IFDIR, proc_net); ++#else ++ rtl8180_proc=create_proc_entry(RTL8180_MODULE_NAME, S_IFDIR, init_net.proc_net); ++#endif + } + + + void rtl8180_proc_module_remove(void) + { ++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) + remove_proc_entry(RTL8180_MODULE_NAME, proc_net); ++#else ++ remove_proc_entry(RTL8180_MODULE_NAME, init_net.proc_net); ++#endif + } + + +@@ -3265,7 +3273,11 @@ + else + DMESG ("104-bit WEP is NOT supported in hardware"); + } ++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) + if(request_irq(dev->irq, rtl8180_interrupt, SA_SHIRQ, dev->name, dev)){ ++#else ++ if(request_irq(dev->irq, rtl8180_interrupt, IRQF_SHARED, dev->name, dev)){ ++#endif + DMESGE("Error allocating IRQ %d",dev->irq); + return -1; + }else{ +@@ -3949,9 +3961,10 @@ + return -ENOMEM; + priv = ieee80211_priv(dev); + priv->ieee80211 = netdev_priv(dev); +- ++ ++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)) + SET_MODULE_OWNER(dev); +- ++#endif + pci_set_drvdata(pdev, dev); + SET_NETDEV_DEV(dev, &pdev->dev); + |