[ar71xx] fix Ubiquiti RouterStation images
[openwrt/svn-archive/archive.git] / package / mac80211 / patches / 405-ath9k-move-PCI-code-into-separate-file.patch
index 2e673ed5ddac904ed5ed1057d5c1f9047b38fe2d..4a55ded9e79e8090a3966469ee73277671e6bea3 100644 (file)
@@ -1,19 +1,22 @@
-From 957a60be8a6b55da588df12e160ac53e3b36238e Mon Sep 17 00:00:00 2001
+From 4803193b165c67abcd7cb10dd0c178dbcffb6cc7 Mon Sep 17 00:00:00 2001
 From: Gabor Juhos <juhosg@openwrt.org>
-Date: Fri, 2 Jan 2009 16:10:25 +0100
-Subject: [RFC 05/12] ath9k: move PCI code into separate file
+Date: Mon, 5 Jan 2009 11:01:09 +0100
+Subject: [PATCH v3 05/11] ath9k: move PCI code into separate file
 
-Convert 'struct pci_dev' to 'struct device' to make it usable on the AHB
-bus as well.
+Now that we have converted all bus specific routines to replaceable, we
+can move the PCI specific codes into a separate file.
+
+Changes-licensed-under: ISC
 
 Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
 Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
 ---
  drivers/net/wireless/ath9k/Makefile |    1 +
- drivers/net/wireless/ath9k/core.h   |   16 ++
- drivers/net/wireless/ath9k/main.c   |  368 ++---------------------------------
- drivers/net/wireless/ath9k/pci.c    |  357 +++++++++++++++++++++++++++++++++
- 4 files changed, 395 insertions(+), 347 deletions(-)
+ drivers/net/wireless/ath9k/core.h   |   19 ++-
+ drivers/net/wireless/ath9k/main.c   |  300 +++--------------------------------
+ drivers/net/wireless/ath9k/pci.c    |  287 +++++++++++++++++++++++++++++++++
+ 4 files changed, 328 insertions(+), 279 deletions(-)
+ create mode 100644 drivers/net/wireless/ath9k/pci.c
 
 --- a/drivers/net/wireless/ath9k/Makefile
 +++ b/drivers/net/wireless/ath9k/Makefile
@@ -27,13 +30,23 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
  obj-$(CONFIG_ATH9K) += ath9k.o
 --- a/drivers/net/wireless/ath9k/core.h
 +++ b/drivers/net/wireless/ath9k/core.h
-@@ -857,4 +857,20 @@ static inline void ath_bus_cleanup(struc
+@@ -18,7 +18,7 @@
+ #define CORE_H
+ #include <linux/etherdevice.h>
+-#include <linux/pci.h>
++#include <linux/device.h>
+ #include <net/mac80211.h>
+ #include <linux/leds.h>
+ #include <linux/rfkill.h>
+@@ -767,4 +767,21 @@ static inline void ath_bus_cleanup(struc
        sc->bus_ops->cleanup(sc);
  }
  
 +extern struct ieee80211_ops ath9k_ops;
 +
 +irqreturn_t ath_isr(int irq, void *dev);
++void ath_cleanup(struct ath_softc *sc);
 +int ath_attach(u16 devid, struct ath_softc *sc);
 +void ath_detach(struct ath_softc *sc);
 +const char *ath_mac_bb_name(u32 mac_bb_version);
@@ -50,7 +63,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
  #endif /* CORE_H */
 --- a/drivers/net/wireless/ath9k/main.c
 +++ b/drivers/net/wireless/ath9k/main.c
-@@ -28,37 +28,6 @@ MODULE_DESCRIPTION("Support for Atheros 
+@@ -28,39 +28,6 @@ MODULE_DESCRIPTION("Support for Atheros 
  MODULE_SUPPORTED_DEVICE("Atheros 802.11n WLAN cards");
  MODULE_LICENSE("Dual BSD/GPL");
  
@@ -65,13 +78,16 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
 -};
 -
 -static void ath_detach(struct ath_softc *sc);
+-static void ath_cleanup(struct ath_softc *sc);
 -
 -/* return bus cachesize in 4B word units */
+-
 -static void ath_pci_read_cachesize(struct ath_softc *sc, int *csz)
 -{
 -      u8 u8tmp;
 -
--      pci_read_config_byte(sc->pdev, PCI_CACHE_LINE_SIZE, (u8 *)&u8tmp);
+-      pci_read_config_byte(to_pci_dev(sc->dev), PCI_CACHE_LINE_SIZE,
+-                           (u8 *)&u8tmp);
 -      *csz = (int)u8tmp;
 -
 -      /*
@@ -84,11 +100,10 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
 -              *csz = DEFAULT_CACHELINE >> 2;   /* Use the default size */
 -}
 -
--
static void ath_setcurmode(struct ath_softc *sc, enum wireless_mode mode)
+ static void ath_cache_conf_rate(struct ath_softc *sc,
                              struct ieee80211_conf *conf)
  {
-       sc->cur_rate_table = sc->hw_rate_table[mode];
-@@ -499,7 +468,7 @@ static void ath9k_tasklet(unsigned long 
+@@ -500,7 +467,7 @@ static void ath9k_tasklet(unsigned long 
        ath9k_hw_set_interrupts(sc->sc_ah, sc->sc_imask);
  }
  
@@ -97,16 +112,25 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
  {
        struct ath_softc *sc = dev;
        struct ath_hal *ah = sc->sc_ah;
-@@ -1287,7 +1256,7 @@ static int ath_start_rfkill_poll(struct 
+@@ -1281,7 +1248,7 @@ static int ath_start_rfkill_poll(struct 
  }
  #endif /* CONFIG_RFKILL */
  
+-static void ath_cleanup(struct ath_softc *sc)
++void ath_cleanup(struct ath_softc *sc)
+ {
+       ath_detach(sc);
+       free_irq(sc->irq, sc);
+@@ -1289,7 +1256,7 @@ static void ath_cleanup(struct ath_softc
+       ieee80211_free_hw(sc->hw);
+ }
 -static void ath_detach(struct ath_softc *sc)
 +void ath_detach(struct ath_softc *sc)
  {
        struct ieee80211_hw *hw = sc->hw;
        int i = 0;
-@@ -1538,7 +1507,7 @@ bad:
+@@ -1543,7 +1510,7 @@ bad:
        return error;
  }
  
@@ -115,7 +139,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
  {
        struct ieee80211_hw *hw = sc->hw;
        int error = 0;
-@@ -2466,7 +2435,7 @@ static int ath9k_ampdu_action(struct iee
+@@ -2466,7 +2433,7 @@ static int ath9k_ampdu_action(struct iee
        return ret;
  }
  
@@ -124,7 +148,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
        .tx                 = ath9k_tx,
        .start              = ath9k_start,
        .stop               = ath9k_stop,
-@@ -2510,7 +2479,7 @@ static struct {
+@@ -2510,7 +2477,7 @@ static struct {
  /*
   * Return the MAC/BB name. "????" is returned if the MAC/BB is unknown.
   */
@@ -133,7 +157,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
  ath_mac_bb_name(u32 mac_bb_version)
  {
        int i;
-@@ -2527,7 +2496,7 @@ ath_mac_bb_name(u32 mac_bb_version)
+@@ -2527,7 +2494,7 @@ ath_mac_bb_name(u32 mac_bb_version)
  /*
   * Return the RF name. "????" is returned if the RF is unknown.
   */
@@ -142,95 +166,21 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
  ath_rf_name(u16 rf_version)
  {
        int i;
-@@ -2541,306 +2510,7 @@ ath_rf_name(u16 rf_version)
+@@ -2541,234 +2508,7 @@ ath_rf_name(u16 rf_version)
        return "????";
  }
  
--static dma_addr_t ath_pci_map_single_to_device(struct ath_softc *sc,
--                                             void *p, size_t size)
--{
--      return pci_map_single(sc->pdev, p, size, PCI_DMA_TODEVICE);
--}
--
--static void ath_pci_unmap_single_to_device(struct ath_softc *sc,
--                                         dma_addr_t da, size_t size)
--{
--      pci_unmap_single(sc->pdev, da, size, PCI_DMA_TODEVICE);
--}
--
--static dma_addr_t ath_pci_map_single_from_device(struct ath_softc *sc,
--                                               void *p, size_t size)
--{
--      return pci_map_single(sc->pdev, p, size, PCI_DMA_FROMDEVICE);
--}
--
--static void ath_pci_unmap_single_from_device(struct ath_softc *sc,
--                                           dma_addr_t da, size_t size)
--{
--      pci_unmap_single(sc->pdev, da, size, PCI_DMA_FROMDEVICE);
--}
--
--static int ath_pci_dma_mapping_error(struct ath_softc *sc, dma_addr_t da)
--{
--      return pci_dma_mapping_error(sc->pdev, da);
--}
--
--static void ath_pci_sync_single_for_cpu(struct ath_softc *sc, dma_addr_t da,
--                                     size_t size)
--{
--      pci_dma_sync_single_for_cpu(sc->pdev, da, size,
--                                  PCI_DMA_FROMDEVICE);
--}
--
--static void *ath_pci_dma_alloc(struct ath_softc *sc, size_t size,
--                                     dma_addr_t *pda)
--{
--      return pci_alloc_consistent(sc->pdev, size, pda);
--}
--
--static void ath_pci_dma_free(struct ath_softc *sc, size_t size,
--                                  void *p, dma_addr_t da)
--{
--      pci_free_consistent(sc->pdev, size, p, da);
--}
--
--static u32 ath_pci_reg_read(struct ath_hal *ah, unsigned reg)
--{
--      return ioread32(ah->ah_sh + reg);
--}
--
--static void ath_pci_reg_write(struct ath_hal *ah, unsigned reg, u32 val)
--{
--      iowrite32(val, ah->ah_sh + reg);
--}
--
 -static void ath_pci_cleanup(struct ath_softc *sc)
 -{
--      ath_detach(sc);
--      if (sc->pdev->irq)
--              free_irq(sc->pdev->irq, sc);
--      pci_iounmap(sc->pdev, sc->mem);
--      pci_release_region(sc->pdev, 0);
--      pci_disable_device(sc->pdev);
--      ieee80211_free_hw(sc->hw);
--}
--
--static struct ath_bus_ops ath_pci_bus_ops  = {
--      .dma_map_single_to_device = ath_pci_map_single_to_device,
--      .dma_unmap_single_to_device = ath_pci_unmap_single_to_device,
--      .dma_map_single_from_device = ath_pci_map_single_from_device,
--      .dma_unmap_single_from_device = ath_pci_unmap_single_from_device,
--      .dma_map_single_to_device = ath_pci_map_single_to_device,
--      .dma_mapping_error = ath_pci_dma_mapping_error,
--      .dma_sync_single_for_cpu = ath_pci_sync_single_for_cpu,
--      .dma_alloc = ath_pci_dma_alloc,
--      .dma_free = ath_pci_dma_free,
+-      struct pci_dev *pdev = to_pci_dev(sc->dev);
 -
--      .reg_read = ath_pci_reg_read,
--      .reg_write = ath_pci_reg_write,
+-      pci_iounmap(pdev, sc->mem);
+-      pci_release_region(pdev, 0);
+-      pci_disable_device(pdev);
+-}
 -
+-static struct ath_bus_ops ath_pci_bus_ops = {
 -      .read_cachesize = ath_pci_read_cachesize,
--
 -      .cleanup = ath_pci_cleanup,
 -};
 -
@@ -320,7 +270,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
 -
 -      sc = hw->priv;
 -      sc->hw = hw;
--      sc->pdev = pdev;
+-      sc->dev = &pdev->dev;
 -      sc->mem = mem;
 -      sc->bus_ops = &ath_pci_bus_ops;
 -
@@ -338,6 +288,8 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
 -              goto bad4;
 -      }
 -
+-      sc->irq = pdev->irq;
+-
 -      ah = sc->sc_ah;
 -      printk(KERN_INFO
 -             "%s: Atheros AR%s MAC/BB Rev:%x "
@@ -368,7 +320,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
 -      struct ieee80211_hw *hw = pci_get_drvdata(pdev);
 -      struct ath_softc *sc = hw->priv;
 -
--      ath_pci_cleanup(sc);
+-      ath_cleanup(sc);
 -}
 -
 -#ifdef CONFIG_PM
@@ -450,7 +402,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
  {
        int error;
  
-@@ -2852,26 +2522,30 @@ static int __init init_ath_pci(void)
+@@ -2780,26 +2520,30 @@ static int __init init_ath_pci(void)
                printk(KERN_ERR
                        "Unable to register rate control algorithm: %d\n",
                        error);
@@ -493,7 +445,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
 +module_exit(ath9k_exit);
 --- /dev/null
 +++ b/drivers/net/wireless/ath9k/pci.c
-@@ -0,0 +1,357 @@
+@@ -0,0 +1,287 @@
 +/*
 + * Copyright (c) 2008 Atheros Communications Inc.
 + *
@@ -511,6 +463,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
 + */
 +
 +#include <linux/nl80211.h>
++#include <linux/pci.h>
 +#include "core.h"
 +#include "reg.h"
 +#include "hw.h"
@@ -530,7 +483,8 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
 +{
 +      u8 u8tmp;
 +
-+      pci_read_config_byte(sc->pdev, PCI_CACHE_LINE_SIZE, (u8 *)&u8tmp);
++      pci_read_config_byte(to_pci_dev(sc->dev), PCI_CACHE_LINE_SIZE,
++                           (u8 *)&u8tmp);
 +      *csz = (int)u8tmp;
 +
 +      /*
@@ -543,91 +497,17 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
 +              *csz = DEFAULT_CACHELINE >> 2;   /* Use the default size */
 +}
 +
-+static dma_addr_t ath_pci_map_single_to_device(struct ath_softc *sc,
-+                                             void *p, size_t size)
-+{
-+      return pci_map_single(sc->pdev, p, size, PCI_DMA_TODEVICE);
-+}
-+
-+static void ath_pci_unmap_single_to_device(struct ath_softc *sc,
-+                                         dma_addr_t da, size_t size)
-+{
-+      pci_unmap_single(sc->pdev, da, size, PCI_DMA_TODEVICE);
-+}
-+
-+static dma_addr_t ath_pci_map_single_from_device(struct ath_softc *sc,
-+                                               void *p, size_t size)
-+{
-+      return pci_map_single(sc->pdev, p, size, PCI_DMA_FROMDEVICE);
-+}
-+
-+static void ath_pci_unmap_single_from_device(struct ath_softc *sc,
-+                                           dma_addr_t da, size_t size)
-+{
-+      pci_unmap_single(sc->pdev, da, size, PCI_DMA_FROMDEVICE);
-+}
-+
-+static int ath_pci_dma_mapping_error(struct ath_softc *sc, dma_addr_t da)
-+{
-+      return pci_dma_mapping_error(sc->pdev, da);
-+}
-+
-+static void ath_pci_sync_single_for_cpu(struct ath_softc *sc, dma_addr_t da,
-+                                     size_t size)
-+{
-+      pci_dma_sync_single_for_cpu(sc->pdev, da, size,
-+                                  PCI_DMA_FROMDEVICE);
-+}
-+
-+static void *ath_pci_dma_alloc(struct ath_softc *sc, size_t size,
-+                                     dma_addr_t *pda)
-+{
-+      return pci_alloc_consistent(sc->pdev, size, pda);
-+}
-+
-+static void ath_pci_dma_free(struct ath_softc *sc, size_t size,
-+                                  void *p, dma_addr_t da)
-+{
-+      pci_free_consistent(sc->pdev, size, p, da);
-+}
-+
-+static u32 ath_pci_reg_read(struct ath_hal *ah, unsigned reg)
-+{
-+      return ioread32(ah->ah_sh + reg);
-+}
-+
-+static void ath_pci_reg_write(struct ath_hal *ah, unsigned reg, u32 val)
-+{
-+      iowrite32(val, ah->ah_sh + reg);
-+}
-+
 +static void ath_pci_cleanup(struct ath_softc *sc)
 +{
-+      ath_detach(sc);
-+      if (sc->pdev->irq)
-+              free_irq(sc->pdev->irq, sc);
-+      pci_iounmap(sc->pdev, sc->mem);
-+      pci_release_region(sc->pdev, 0);
-+      pci_disable_device(sc->pdev);
-+      ieee80211_free_hw(sc->hw);
-+}
-+
-+static struct ath_bus_ops ath_pci_bus_ops  = {
-+      .dma_map_single_to_device = ath_pci_map_single_to_device,
-+      .dma_unmap_single_to_device = ath_pci_unmap_single_to_device,
-+      .dma_map_single_from_device = ath_pci_map_single_from_device,
-+      .dma_unmap_single_from_device = ath_pci_unmap_single_from_device,
-+      .dma_map_single_to_device = ath_pci_map_single_to_device,
-+      .dma_mapping_error = ath_pci_dma_mapping_error,
-+      .dma_sync_single_for_cpu = ath_pci_sync_single_for_cpu,
-+      .dma_alloc = ath_pci_dma_alloc,
-+      .dma_free = ath_pci_dma_free,
++      struct pci_dev *pdev = to_pci_dev(sc->dev);
 +
-+      .reg_read = ath_pci_reg_read,
-+      .reg_write = ath_pci_reg_write,
++      pci_iounmap(pdev, sc->mem);
++      pci_release_region(pdev, 0);
++      pci_disable_device(pdev);
++}
 +
++static struct ath_bus_ops ath_pci_bus_ops = {
 +      .read_cachesize = ath_pci_read_cachesize,
-+
 +      .cleanup = ath_pci_cleanup,
 +};
 +
@@ -717,7 +597,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
 +
 +      sc = hw->priv;
 +      sc->hw = hw;
-+      sc->pdev = pdev;
++      sc->dev = &pdev->dev;
 +      sc->mem = mem;
 +      sc->bus_ops = &ath_pci_bus_ops;
 +
@@ -735,6 +615,8 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
 +              goto bad4;
 +      }
 +
++      sc->irq = pdev->irq;
++
 +      ah = sc->sc_ah;
 +      printk(KERN_INFO
 +             "%s: Atheros AR%s MAC/BB Rev:%x "
@@ -765,7 +647,7 @@ Signed-off-by: Imre Kaloz <kaloz@openwrt.org>
 +      struct ieee80211_hw *hw = pci_get_drvdata(pdev);
 +      struct ath_softc *sc = hw->priv;
 +
-+      ath_pci_cleanup(sc);
++      ath_cleanup(sc);
 +}
 +
 +#ifdef CONFIG_PM