Merge branch 'drm-patches' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied...
[pandora-kernel.git] / drivers / net / wireless / hostap / hostap_plx.c
index 474ef83..e235e06 100644 (file)
@@ -7,8 +7,6 @@
  */
 
 
  */
 
 
-#include <linux/config.h>
-#include <linux/version.h>
 #include <linux/module.h>
 #include <linux/init.h>
 #include <linux/if.h>
 #include <linux/module.h>
 #include <linux/init.h>
 #include <linux/if.h>
@@ -68,10 +66,12 @@ static struct pci_device_id prism2_plx_id_table[] __devinitdata = {
        PLXDEV(0x10b7, 0x7770, "3Com AirConnect PCI 777A"),
        PLXDEV(0x111a, 0x1023, "Siemens SpeedStream SS1023"),
        PLXDEV(0x126c, 0x8030, "Nortel emobility"),
        PLXDEV(0x10b7, 0x7770, "3Com AirConnect PCI 777A"),
        PLXDEV(0x111a, 0x1023, "Siemens SpeedStream SS1023"),
        PLXDEV(0x126c, 0x8030, "Nortel emobility"),
+       PLXDEV(0x1562, 0x0001, "Symbol LA-4123"),
        PLXDEV(0x1385, 0x4100, "Netgear MA301"),
        PLXDEV(0x15e8, 0x0130, "National Datacomm NCP130 (PLX9052)"),
        PLXDEV(0x15e8, 0x0131, "National Datacomm NCP130 (TMD7160)"),
        PLXDEV(0x1638, 0x1100, "Eumitcom WL11000"),
        PLXDEV(0x1385, 0x4100, "Netgear MA301"),
        PLXDEV(0x15e8, 0x0130, "National Datacomm NCP130 (PLX9052)"),
        PLXDEV(0x15e8, 0x0131, "National Datacomm NCP130 (TMD7160)"),
        PLXDEV(0x1638, 0x1100, "Eumitcom WL11000"),
+       PLXDEV(0x16ab, 0x1100, "Global Sun Tech GL24110P"),
        PLXDEV(0x16ab, 0x1101, "Global Sun Tech GL24110P (?)"),
        PLXDEV(0x16ab, 0x1102, "Linksys WPC11 with WDT11"),
        PLXDEV(0x16ab, 0x1103, "Longshine 8031"),
        PLXDEV(0x16ab, 0x1101, "Global Sun Tech GL24110P (?)"),
        PLXDEV(0x16ab, 0x1102, "Linksys WPC11 with WDT11"),
        PLXDEV(0x16ab, 0x1103, "Longshine 8031"),
@@ -328,8 +328,6 @@ static struct prism2_helper_functions prism2_plx_funcs =
 {
        .card_present   = NULL,
        .cor_sreset     = prism2_plx_cor_sreset,
 {
        .card_present   = NULL,
        .cor_sreset     = prism2_plx_cor_sreset,
-       .dev_open       = NULL,
-       .dev_close      = NULL,
        .genesis_reset  = prism2_plx_genesis_reset,
        .hw_type        = HOSTAP_HW_PLX,
 };
        .genesis_reset  = prism2_plx_genesis_reset,
        .hw_type        = HOSTAP_HW_PLX,
 };
@@ -366,12 +364,12 @@ static int prism2_plx_check_cis(void __iomem *attr_mem, int attr_len,
 
        pos = 0;
        while (pos < CIS_MAX_LEN - 1 && cis[pos] != CISTPL_END) {
 
        pos = 0;
        while (pos < CIS_MAX_LEN - 1 && cis[pos] != CISTPL_END) {
-               if (pos + cis[pos + 1] >= CIS_MAX_LEN)
+               if (pos + 2 + cis[pos + 1] > CIS_MAX_LEN)
                        goto cis_error;
 
                switch (cis[pos]) {
                case CISTPL_CONFIG:
                        goto cis_error;
 
                switch (cis[pos]) {
                case CISTPL_CONFIG:
-                       if (cis[pos + 1] < 1)
+                       if (cis[pos + 1] < 2)
                                goto cis_error;
                        rmsz = (cis[pos + 2] & 0x3c) >> 2;
                        rasz = cis[pos + 2] & 0x03;
                                goto cis_error;
                        rmsz = (cis[pos + 2] & 0x3c) >> 2;
                        rasz = cis[pos + 2] & 0x03;
@@ -449,13 +447,12 @@ static int prism2_plx_probe(struct pci_dev *pdev,
        int tmd7160;
        struct hostap_plx_priv *hw_priv;
 
        int tmd7160;
        struct hostap_plx_priv *hw_priv;
 
-       hw_priv = kmalloc(sizeof(*hw_priv), GFP_KERNEL);
+       hw_priv = kzalloc(sizeof(*hw_priv), GFP_KERNEL);
        if (hw_priv == NULL)
                return -ENOMEM;
        if (hw_priv == NULL)
                return -ENOMEM;
-       memset(hw_priv, 0, sizeof(*hw_priv));
 
        if (pci_enable_device(pdev))
 
        if (pci_enable_device(pdev))
-               return -EIO;
+               goto err_out_free;
 
        /* National Datacomm NCP130 based on TMD7160, not PLX9052. */
        tmd7160 = (pdev->vendor == 0x15e8) && (pdev->device == 0x0131);
 
        /* National Datacomm NCP130 based on TMD7160, not PLX9052. */
        tmd7160 = (pdev->vendor == 0x15e8) && (pdev->device == 0x0131);
@@ -554,7 +551,7 @@ static int prism2_plx_probe(struct pci_dev *pdev,
 
        pci_set_drvdata(pdev, dev);
 
 
        pci_set_drvdata(pdev, dev);
 
-       if (request_irq(dev->irq, prism2_interrupt, SA_SHIRQ, dev->name,
+       if (request_irq(dev->irq, prism2_interrupt, IRQF_SHARED, dev->name,
                        dev)) {
                printk(KERN_WARNING "%s: request_irq failed\n", dev->name);
                goto fail;
                        dev)) {
                printk(KERN_WARNING "%s: request_irq failed\n", dev->name);
                goto fail;
@@ -570,11 +567,6 @@ static int prism2_plx_probe(struct pci_dev *pdev,
        return hostap_hw_ready(dev);
 
  fail:
        return hostap_hw_ready(dev);
 
  fail:
-       kfree(hw_priv);
-       if (local)
-               local->hw_priv = NULL;
-       prism2_free_local_data(dev);
-
        if (irq_registered && dev)
                free_irq(dev->irq, dev);
 
        if (irq_registered && dev)
                free_irq(dev->irq, dev);
 
@@ -582,6 +574,10 @@ static int prism2_plx_probe(struct pci_dev *pdev,
                iounmap(attr_mem);
 
        pci_disable_device(pdev);
                iounmap(attr_mem);
 
        pci_disable_device(pdev);
+       prism2_free_local_data(dev);
+
+ err_out_free:
+       kfree(hw_priv);
 
        return -ENODEV;
 }
 
        return -ENODEV;
 }
@@ -606,9 +602,8 @@ static void prism2_plx_remove(struct pci_dev *pdev)
        if (dev->irq)
                free_irq(dev->irq, dev);
 
        if (dev->irq)
                free_irq(dev->irq, dev);
 
-       kfree(iface->local->hw_priv);
-       iface->local->hw_priv = NULL;
        prism2_free_local_data(dev);
        prism2_free_local_data(dev);
+       kfree(hw_priv);
        pci_disable_device(pdev);
 }
 
        pci_disable_device(pdev);
 }
 
@@ -616,7 +611,7 @@ static void prism2_plx_remove(struct pci_dev *pdev)
 MODULE_DEVICE_TABLE(pci, prism2_plx_id_table);
 
 static struct pci_driver prism2_plx_drv_id = {
 MODULE_DEVICE_TABLE(pci, prism2_plx_id_table);
 
 static struct pci_driver prism2_plx_drv_id = {
-       .name           = "prism2_plx",
+       .name           = "hostap_plx",
        .id_table       = prism2_plx_id_table,
        .probe          = prism2_plx_probe,
        .remove         = prism2_plx_remove,
        .id_table       = prism2_plx_id_table,
        .probe          = prism2_plx_probe,
        .remove         = prism2_plx_remove,