[haiku-commits] haiku: hrev45145 - data/system/data/firmware/ralinkwifi src/add-ons/kernel/drivers/network/wlan/ralinkwifi

  • From: korli@xxxxxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Thu, 10 Jan 2013 21:49:18 +0100 (CET)

hrev45145 adds 1 changeset to branch 'master'
old head: c7e76f70bc8ae9edd12dadfd9af11e741583c455
new head: af5a895fa40721e40810d847d8692f12526fba14
overview: http://cgit.haiku-os.org/haiku/log/?qt=range&q=af5a895+%5Ec7e76f7

----------------------------------------------------------------------------

af5a895: ralinkwifi: takes rt2860 into account, untested
  
  * remove ralink2860 driver
  * added firmware for RT2860, get it onto the image
  * added interrupt handler case for rt2860 devices.

                                   [ Jerome Duval <jerome.duval@xxxxxxxxx> ]

----------------------------------------------------------------------------

Revision:    hrev45145
Commit:      af5a895fa40721e40810d847d8692f12526fba14
URL:         http://cgit.haiku-os.org/haiku/commit/?id=af5a895
Author:      Jerome Duval <jerome.duval@xxxxxxxxx>
Date:        Thu Jan 10 20:40:49 2013 UTC

----------------------------------------------------------------------------

6 files changed, 53 insertions(+), 18 deletions(-)
build/jam/HaikuImage                             |   2 +-
.../firmware/ralinkwifi/RT2860_Firmware_V26.zip  | Bin 0 -> 4479 bytes
.../drivers/network/wlan/ralinkwifi/Jamfile      |   6 +-
.../network/wlan/ralinkwifi/dev/ral/rt2860.c     |   4 ++
.../network/wlan/ralinkwifi/dev/ral/rt2860var.h  |   4 ++
.../drivers/network/wlan/ralinkwifi/glue.c       |  55 ++++++++++++++-----

----------------------------------------------------------------------------

diff --git a/build/jam/HaikuImage b/build/jam/HaikuImage
index 614d5f7..9aab5280 100644
--- a/build/jam/HaikuImage
+++ b/build/jam/HaikuImage
@@ -170,7 +170,7 @@ SYSTEM_ADD_ONS_DRIVERS_NET = [ FFilterByBuildFeatures
                aironetwifi atheroswifi broadcom43xx
                iprowifi2100 iprowifi2200 iprowifi3945
                iprowifi4965 marvell88w8363 marvell88w8335
-               ralink2860 ralinkwifi wavelanwifi
+               ralinkwifi wavelanwifi
        }@ # x86
 
        # WWAN drivers
diff --git a/data/system/data/firmware/ralinkwifi/RT2860_Firmware_V26.zip 
b/data/system/data/firmware/ralinkwifi/RT2860_Firmware_V26.zip
new file mode 100644
index 0000000..5361dd2
Binary files /dev/null and 
b/data/system/data/firmware/ralinkwifi/RT2860_Firmware_V26.zip differ
diff --git a/src/add-ons/kernel/drivers/network/wlan/ralinkwifi/Jamfile 
b/src/add-ons/kernel/drivers/network/wlan/ralinkwifi/Jamfile
index f519213..ccdfb5b 100644
--- a/src/add-ons/kernel/drivers/network/wlan/ralinkwifi/Jamfile
+++ b/src/add-ons/kernel/drivers/network/wlan/ralinkwifi/Jamfile
@@ -26,7 +26,9 @@ KernelAddon ralinkwifi :
        libfreebsd_network.a
        ;
 
-HAIKU_WIFI_FIRMWARE_PACKAGE on ralinkwifi = RT61_Firmware_V1.2 ;
-HAIKU_WIFI_FIRMWARE_ARCHIVE on ralinkwifi = RT61_Firmware_V1.2.zip ;
+HAIKU_WIFI_FIRMWARE_PACKAGES on ralinkwifi = RT61_Firmware_V1.2
+       RT2860_Firmware_V26 ;
+HAIKU_WIFI_FIRMWARE_ARCHIVES on ralinkwifi = RT61_Firmware_V1.2.zip
+       RT2860_Firmware_V26.zip ;
 HAIKU_WIFI_FIRMWARE_DO_EXTRACT on ralinkwifi = true ;
 
diff --git 
a/src/add-ons/kernel/drivers/network/wlan/ralinkwifi/dev/ral/rt2860.c 
b/src/add-ons/kernel/drivers/network/wlan/ralinkwifi/dev/ral/rt2860.c
index 4a5aa25..f3a6bd6 100644
--- a/src/add-ons/kernel/drivers/network/wlan/ralinkwifi/dev/ral/rt2860.c
+++ b/src/add-ons/kernel/drivers/network/wlan/ralinkwifi/dev/ral/rt2860.c
@@ -1414,6 +1414,7 @@ rt2860_intr(void *arg)
 
        RAL_LOCK(sc);
 
+#ifndef __HAIKU__
        r = RAL_READ(sc, RT2860_INT_STATUS);
        if (__predict_false(r == 0xffffffff)) {
                RAL_UNLOCK(sc);
@@ -1423,6 +1424,9 @@ rt2860_intr(void *arg)
                RAL_UNLOCK(sc);
                return; /* not for us */
        }
+#else
+       r = atomic_get((int32 *)&sc->sc_intr_status);
+#endif
 
        /* acknowledge interrupts */
        RAL_WRITE(sc, RT2860_INT_STATUS, r);
diff --git 
a/src/add-ons/kernel/drivers/network/wlan/ralinkwifi/dev/ral/rt2860var.h 
b/src/add-ons/kernel/drivers/network/wlan/ralinkwifi/dev/ral/rt2860var.h
index 28a3d59..653502b 100644
--- a/src/add-ons/kernel/drivers/network/wlan/ralinkwifi/dev/ral/rt2860var.h
+++ b/src/add-ons/kernel/drivers/network/wlan/ralinkwifi/dev/ral/rt2860var.h
@@ -196,6 +196,10 @@ struct rt2860_softc {
        int                             sc_rxtap_len;
        struct rt2860_tx_radiotap_header sc_txtap;
        int                             sc_txtap_len;
+
+#if defined(__HAIKU__)
+       uint32_t sc_intr_status;
+#endif
 };
 
 int    rt2860_attach(device_t, int);
diff --git a/src/add-ons/kernel/drivers/network/wlan/ralinkwifi/glue.c 
b/src/add-ons/kernel/drivers/network/wlan/ralinkwifi/glue.c
index 53c58ef..e07c1b4 100644
--- a/src/add-ons/kernel/drivers/network/wlan/ralinkwifi/glue.c
+++ b/src/add-ons/kernel/drivers/network/wlan/ralinkwifi/glue.c
@@ -19,13 +19,16 @@
 
 #include <dev/ral/rt2560reg.h>
 #include <dev/ral/rt2560var.h>
+#include <dev/ral/rt2860reg.h>
+#include <dev/ral/rt2860var.h>
 
 
 HAIKU_FBSD_WLAN_DRIVER_GLUE(ralinkwifi, ral, pci)
 HAIKU_DRIVER_REQUIREMENTS(FBSD_TASKQUEUES | FBSD_SWI_TASKQUEUE | FBSD_WLAN);
 HAIKU_FIRMWARE_VERSION(0);
-HAIKU_FIRMWARE_NAME_MAP(3) = {{"rt2561fw", "rt2561.bin"},
-       {"rt2561sfw", "rt2561s.bin"}, {"rt2661fw", "rt2661.bin"}};
+HAIKU_FIRMWARE_NAME_MAP(4) = {{"rt2561fw", "rt2561.bin"},
+       {"rt2561sfw", "rt2561s.bin"}, {"rt2661fw", "rt2661.bin"},
+       {"rt2860fw", "rt2860.bin"}};
 
 NO_HAIKU_FBSD_MII_DRIVER();
 NO_HAIKU_REENABLE_INTERRUPTS();
@@ -39,21 +42,43 @@ int
 HAIKU_CHECK_DISABLE_INTERRUPTS(device_t dev)
 {
        struct rt2560_softc* sc = (struct rt2560_softc*)device_get_softc(dev);
-               // assuming that rt2560 and rt2661 share a common context data 
structure
+               // sc_ifp is common between context data structures
        struct ifnet* ifp = sc->sc_ifp;
 
-       if (pci_get_device(dev) == 0x0201) {
-               // disable interrupts
-               RAL_WRITE(sc, RT2560_CSR8, 0xffffffff);
-       } else {
-               // disable MAC and MCU interrupts
-               RAL_WRITE(sc, RT2661_INT_MASK_CSR, 0xffffff7f);
-               RAL_WRITE(sc, RT2661_MCU_INT_MASK_CSR, 0xffffffff);
-       }
-
-       if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
-               // don't re-enable interrupts if we're shutting down
-               return 0;
+       switch (pci_get_device(dev)) {
+               case 0x0201:
+                       // disable interrupts
+                       RAL_WRITE(sc, RT2560_CSR8, 0xffffffff);
+
+                       if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
+                               // don't re-enable interrupts if we're shutting 
down
+                               return 0;
+                       }
+                       break;
+               case 0x0301:
+               case 0x0302:
+               case 0x0401:
+                       // disable MAC and MCU interrupts
+                       RAL_WRITE(sc, RT2661_INT_MASK_CSR, 0xffffff7f);
+                       RAL_WRITE(sc, RT2661_MCU_INT_MASK_CSR, 0xffffffff);
+
+                       if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
+                               // don't re-enable interrupts if we're shutting 
down
+                               return 0;
+                       }
+                       break;
+               default:
+               {
+                       uint32 r;
+                       struct rt2860_softc* sc =
+                               (struct rt2860_softc*)device_get_softc(dev);
+                       r = RAL_READ(sc, RT2860_INT_STATUS);
+                       if (r == 0 || r == 0xffffffff)
+                               return 0;
+
+                       atomic_set((int32*)&sc->sc_intr_status, r);
+                       break;
+               }
        }
 
        return 1;


Other related posts:

  • » [haiku-commits] haiku: hrev45145 - data/system/data/firmware/ralinkwifi src/add-ons/kernel/drivers/network/wlan/ralinkwifi - korli