From af5a895fa40721e40810d847d8692f12526fba14 Mon Sep 17 00:00:00 2001 From: Jerome Duval Date: Thu, 10 Jan 2013 21:40:49 +0100 Subject: [PATCH] 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. --- build/jam/HaikuImage | 2 +- .../ralinkwifi/RT2860_Firmware_V26.zip | Bin 0 -> 4479 bytes .../drivers/network/wlan/ralinkwifi/Jamfile | 6 +- .../network/wlan/ralinkwifi/dev/ral/rt2860.c | 4 ++ .../wlan/ralinkwifi/dev/ral/rt2860var.h | 4 ++ .../drivers/network/wlan/ralinkwifi/glue.c | 55 +++++++++++++----- 6 files changed, 53 insertions(+), 18 deletions(-) create mode 100644 data/system/data/firmware/ralinkwifi/RT2860_Firmware_V26.zip diff --git a/build/jam/HaikuImage b/build/jam/HaikuImage index 614d5f73fdd..9aab5280cce 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 0000000000000000000000000000000000000000..5361dd2147cc22478bbe776c9068bd3026f9cd61 GIT binary patch literal 4479 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 +#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 28a3d59b826..653502be00c 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 53c58ef18f1..e07c1b438a7 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 #include +#include +#include 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;