From e55731453739921ad238dae186975185d2966010 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Colin=20G=C3=BCnther?= Date: Tue, 1 Dec 2009 15:46:52 +0000 Subject: [PATCH] iprowifi4965 now links. Still needs to be tested as I don't own the required hardware myself. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34414 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../drivers/network/wlan/iprowifi4965/Jamfile | 1 + .../drivers/network/wlan/iprowifi4965/glue.c | 67 +++++++++++++++++++ 2 files changed, 68 insertions(+) create mode 100644 src/add-ons/kernel/drivers/network/wlan/iprowifi4965/glue.c diff --git a/src/add-ons/kernel/drivers/network/wlan/iprowifi4965/Jamfile b/src/add-ons/kernel/drivers/network/wlan/iprowifi4965/Jamfile index 20c1e9692e..947944eaf6 100644 --- a/src/add-ons/kernel/drivers/network/wlan/iprowifi4965/Jamfile +++ b/src/add-ons/kernel/drivers/network/wlan/iprowifi4965/Jamfile @@ -17,6 +17,7 @@ SEARCH_SOURCE += [ FDirName $(SUBDIR) dev iwn ] ; KernelAddon iprowifi4965 : if_iwn.c + glue.c : libfreebsd_wlan.a libfreebsd_network.a diff --git a/src/add-ons/kernel/drivers/network/wlan/iprowifi4965/glue.c b/src/add-ons/kernel/drivers/network/wlan/iprowifi4965/glue.c new file mode 100644 index 0000000000..dbd9ab0d2a --- /dev/null +++ b/src/add-ons/kernel/drivers/network/wlan/iprowifi4965/glue.c @@ -0,0 +1,67 @@ +/* + * 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 + + +HAIKU_FBSD_WLAN_DRIVER_GLUE(iprowifi4965, iwn, pci) +NO_HAIKU_FBSD_MII_DRIVER(); +HAIKU_DRIVER_REQUIREMENTS(FBSD_TASKQUEUES|FBSD_WLAN); +HAIKU_FIRMWARE_VERSION(44417); + + +int +HAIKU_CHECK_DISABLE_INTERRUPTS(device_t dev) +{ + struct iwn_softc* sc = (struct iwn_softc*)device_get_softc(dev); + uint32 r1, r2; + HAIKU_INTR_REGISTER_STATE; + + HAIKU_INTR_REGISTER_ENTER(); + r1 = IWN_READ(sc, IWN_INTR); + r2 = IWN_READ(sc, IWN_INTR_STATUS); + + if (r1 == 0 && r2 == 0) { + /* not for us */ + IWN_WRITE(sc, IWN_MASK, IWN_INTR_MASK); + HAIKU_INTR_REGISTER_LEAVE(); + return 0; + } + + if (r1 == 0xffffffff) { + /* hardware gone */ + HAIKU_INTR_REGISTER_LEAVE(); + return 0; + } + + /* disable interrupts */ + IWN_WRITE(sc, IWN_MASK, 0); + + HAIKU_INTR_REGISTER_LEAVE(); + + return 1; +} + + +void +HAIKU_REENABLE_INTERRUPTS(device_t dev) +{ + struct iwn_softc* sc = (struct iwn_softc*)device_get_softc(dev); + + /* enable interrupts */ + IWN_WRITE(sc, IWN_MASK, IWN_INTR_MASK); +}