[haiku-commits] r34814 - in haiku/trunk/src/add-ons/kernel/drivers/network/wlan/iprowifi2100: . dev/ipw

  • From: coling@xxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Tue, 29 Dec 2009 23:20:54 +0100 (CET)

Author: colin
Date: 2009-12-29 23:20:54 +0100 (Tue, 29 Dec 2009)
New Revision: 34814
Changeset: http://dev.haiku-os.org/changeset/34814/haiku

Modified:
   
haiku/trunk/src/add-ons/kernel/drivers/network/wlan/iprowifi2100/dev/ipw/if_ipw.c
   
haiku/trunk/src/add-ons/kernel/drivers/network/wlan/iprowifi2100/dev/ipw/if_ipwvar.h
   haiku/trunk/src/add-ons/kernel/drivers/network/wlan/iprowifi2100/glue.c
Log:
* Ensuring that reading interrupt status register and disabling interrupts
  is done only once.
* Coding style cleanup.


Modified: 
haiku/trunk/src/add-ons/kernel/drivers/network/wlan/iprowifi2100/dev/ipw/if_ipw.c
===================================================================
--- 
haiku/trunk/src/add-ons/kernel/drivers/network/wlan/iprowifi2100/dev/ipw/if_ipw.c
   2009-12-29 22:10:04 UTC (rev 34813)
+++ 
haiku/trunk/src/add-ons/kernel/drivers/network/wlan/iprowifi2100/dev/ipw/if_ipw.c
   2009-12-29 22:20:54 UTC (rev 34814)
@@ -1070,7 +1070,7 @@
 
        case IPW_STATE_DISABLED:
                /* XXX? is this right? */
-               sc->flags &= ~(IPW_FLAG_HACK | IPW_FLAG_SCANNING | 
+               sc->flags &= ~(IPW_FLAG_HACK | IPW_FLAG_SCANNING |
                    IPW_FLAG_ASSOCIATING | IPW_FLAG_ASSOCIATED);
                DPRINTFN(2, ("Firmware disabled (%s flags 0x%x)\n",
                        IEEESTATE(vap), sc->flags));
@@ -1392,12 +1392,16 @@
 
        IPW_LOCK(sc);
 
+#if !defined(__HAIKU__)
        r = CSR_READ_4(sc, IPW_CSR_INTR);
        if (r == 0 || r == 0xffffffff)
                goto done;
 
        /* disable interrupts */
        CSR_WRITE_4(sc, IPW_CSR_INTR_MASK, 0);
+#else
+       r = atomic_get((int32 *)&sc->sc_intr_status);
+#endif
 
        /* acknowledge all interrupts */
        CSR_WRITE_4(sc, IPW_CSR_INTR, r);

Modified: 
haiku/trunk/src/add-ons/kernel/drivers/network/wlan/iprowifi2100/dev/ipw/if_ipwvar.h
===================================================================
--- 
haiku/trunk/src/add-ons/kernel/drivers/network/wlan/iprowifi2100/dev/ipw/if_ipwvar.h
        2009-12-29 22:10:04 UTC (rev 34813)
+++ 
haiku/trunk/src/add-ons/kernel/drivers/network/wlan/iprowifi2100/dev/ipw/if_ipwvar.h
        2009-12-29 22:20:54 UTC (rev 34814)
@@ -158,6 +158,10 @@
 
        struct ipw_rx_radiotap_header   sc_rxtap;
        struct ipw_tx_radiotap_header   sc_txtap;
+
+#if defined(__HAIKU__)
+       uint32_t sc_intr_status;
+#endif
 };
 
 /*

Modified: 
haiku/trunk/src/add-ons/kernel/drivers/network/wlan/iprowifi2100/glue.c
===================================================================
--- haiku/trunk/src/add-ons/kernel/drivers/network/wlan/iprowifi2100/glue.c     
2009-12-29 22:10:04 UTC (rev 34813)
+++ haiku/trunk/src/add-ons/kernel/drivers/network/wlan/iprowifi2100/glue.c     
2009-12-29 22:20:54 UTC (rev 34814)
@@ -20,6 +20,7 @@
 
 HAIKU_FBSD_WLAN_DRIVER_GLUE(iprowifi2100, ipw, pci)
 NO_HAIKU_FBSD_MII_DRIVER();
+NO_HAIKU_REENABLE_INTERRUPTS();
 HAIKU_DRIVER_REQUIREMENTS(FBSD_TASKQUEUES | FBSD_SWI_TASKQUEUE | FBSD_WLAN);
 HAIKU_FIRMWARE_VERSION(130);
 
@@ -29,28 +30,14 @@
 {
        struct ipw_softc* sc = (struct ipw_softc*)device_get_softc(dev);
        uint32 r;
-       HAIKU_INTR_REGISTER_STATE;
 
-       HAIKU_INTR_REGISTER_ENTER();
-       if ((r = CSR_READ_4(sc, IPW_CSR_INTR)) == 0 || r == 0xffffffff) {
-               HAIKU_INTR_REGISTER_LEAVE();
+       r = CSR_READ_4(sc, IPW_CSR_INTR);
+       if (r  == 0 || r == 0xffffffff)
                return 0;
-       }
 
-       /* disable interrupts */
-       CSR_WRITE_4(sc, IPW_CSR_INTR_MASK, 0);
-       
-       HAIKU_INTR_REGISTER_LEAVE();
+       atomic_set((int32*)&sc->sc_intr_status, r);
 
+       CSR_WRITE_4(sc, IPW_CSR_INTR_MASK, 0);
+               // disable interrupts
        return 1;
 }
-
-
-void
-HAIKU_REENABLE_INTERRUPTS(device_t dev)
-{
-       struct ipw_softc* sc = (struct ipw_softc*)device_get_softc(dev);
-
-       /* enable interrupts */
-       CSR_WRITE_4(sc, IPW_CSR_INTR_MASK, IPW_INTR_MASK);
-}


Other related posts:

  • » [haiku-commits] r34814 - in haiku/trunk/src/add-ons/kernel/drivers/network/wlan/iprowifi2100: . dev/ipw - coling