From bfe69c5264c6bfae799a45657e9b2b6b47c6ccdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Colin=20G=C3=BCnther?= Date: Mon, 14 Dec 2009 23:00:33 +0000 Subject: [PATCH] * The ralinkwifi driver links now. * There is firmware needed, which can be distributed with Haiku: a) Get the firmware from www.ralinktech.com -> Software -> Linux -> Firmware RT2501(RT2561/RT2661) b) Extract the three binaries to /system/data/firmware/ralinkwifi/ c) Rename them by removing the '.bin' ending and append fw instead (e.g.: rt2561.bin -> rt2561fw) git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34663 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../drivers/network/wlan/ralinkwifi/Jamfile | 1 + .../drivers/network/wlan/ralinkwifi/glue.c | 56 +++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 src/add-ons/kernel/drivers/network/wlan/ralinkwifi/glue.c diff --git a/src/add-ons/kernel/drivers/network/wlan/ralinkwifi/Jamfile b/src/add-ons/kernel/drivers/network/wlan/ralinkwifi/Jamfile index 43c689cd9c..b35841b74f 100644 --- a/src/add-ons/kernel/drivers/network/wlan/ralinkwifi/Jamfile +++ b/src/add-ons/kernel/drivers/network/wlan/ralinkwifi/Jamfile @@ -18,6 +18,7 @@ KernelAddon ralinkwifi : if_ral_pci.c rt2560.c rt2661.c + glue.c : libfreebsd_wlan.a libfreebsd_network.a diff --git a/src/add-ons/kernel/drivers/network/wlan/ralinkwifi/glue.c b/src/add-ons/kernel/drivers/network/wlan/ralinkwifi/glue.c new file mode 100644 index 0000000000..c91a6040fd --- /dev/null +++ b/src/add-ons/kernel/drivers/network/wlan/ralinkwifi/glue.c @@ -0,0 +1,56 @@ +/* + * Copyright 2009, Colin Günther, coling@gmx.de. + * All Rights Reserved. Distributed under the terms of the MIT License. + */ + + +#include +#include + +#include + +#include + +#include +#include + +#include +#include + +#include +#include + + +HAIKU_FBSD_WLAN_DRIVER_GLUE(ralinkwifi, ral, pci) +NO_HAIKU_FBSD_MII_DRIVER(); +NO_HAIKU_REENABLE_INTERRUPTS(); +HAIKU_DRIVER_REQUIREMENTS(FBSD_TASKQUEUES | FBSD_SWI_TASKQUEUE | FBSD_WLAN); +HAIKU_FIRMWARE_VERSION(0); + + +#define RT2661_INT_MASK_CSR 0x346c +#define RT2661_MCU_INT_MASK_CSR 0x0018 + + +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 + 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; + + return 1; +}