Author: colin Date: 2009-12-29 23:31:43 +0100 (Tue, 29 Dec 2009) New Revision: 34815 Changeset: http://dev.haiku-os.org/changeset/34815/haiku Modified: haiku/trunk/src/add-ons/kernel/drivers/network/wlan/iprowifi2200/dev/iwi/if_iwi.c haiku/trunk/src/add-ons/kernel/drivers/network/wlan/iprowifi2200/dev/iwi/if_iwivar.h haiku/trunk/src/add-ons/kernel/drivers/network/wlan/iprowifi2200/glue.c Log: * Ensuring reading of interrupt status is done only once. * Code style cleanup. * Automatic white space cleanup. Modified: haiku/trunk/src/add-ons/kernel/drivers/network/wlan/iprowifi2200/dev/iwi/if_iwi.c =================================================================== --- haiku/trunk/src/add-ons/kernel/drivers/network/wlan/iprowifi2200/dev/iwi/if_iwi.c 2009-12-29 22:20:54 UTC (rev 34814) +++ haiku/trunk/src/add-ons/kernel/drivers/network/wlan/iprowifi2200/dev/iwi/if_iwi.c 2009-12-29 22:31:43 UTC (rev 34815) @@ -395,11 +395,11 @@ val = iwi_read_prom_word(sc, IWI_EEPROM_MAC + 2); macaddr[4] = val & 0xff; macaddr[5] = val >> 8; - + bands = 0; setbit(&bands, IEEE80211_MODE_11B); setbit(&bands, IEEE80211_MODE_11G); - if (pci_get_device(dev) >= 0x4223) + if (pci_get_device(dev) >= 0x4223) setbit(&bands, IEEE80211_MODE_11A); ieee80211_init_channels(ic, NULL, &bands); @@ -567,7 +567,7 @@ error = bus_dma_tag_create(bus_get_dma_tag(sc->sc_dev), 4, 0, BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL, - count * IWI_CMD_DESC_SIZE, 1, count * IWI_CMD_DESC_SIZE, 0, + count * IWI_CMD_DESC_SIZE, 1, count * IWI_CMD_DESC_SIZE, 0, NULL, NULL, &ring->desc_dmat); if (error != 0) { device_printf(sc->sc_dev, "could not create desc DMA tag\n"); @@ -612,7 +612,7 @@ } if (ring->desc_dmat != NULL) - bus_dma_tag_destroy(ring->desc_dmat); + bus_dma_tag_destroy(ring->desc_dmat); } static int @@ -629,7 +629,7 @@ error = bus_dma_tag_create(bus_get_dma_tag(sc->sc_dev), 4, 0, BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL, - count * IWI_TX_DESC_SIZE, 1, count * IWI_TX_DESC_SIZE, 0, NULL, + count * IWI_TX_DESC_SIZE, 1, count * IWI_TX_DESC_SIZE, 0, NULL, NULL, &ring->desc_dmat); if (error != 0) { device_printf(sc->sc_dev, "could not create desc DMA tag\n"); @@ -908,7 +908,7 @@ sc->sc_node_free(ni); } -/* +/* * Convert h/w rate code to IEEE rate code. */ static int @@ -1657,10 +1657,14 @@ IWI_LOCK(sc); +#if !defined(__HAIKU__) if ((r = CSR_READ_4(sc, IWI_CSR_INTR)) == 0 || r == 0xffffffff) { IWI_UNLOCK(sc); return; } +#else + r = atomic_get((int32 *)&sc->sc_intr_status); +#endif /* acknowledge interrupts */ CSR_WRITE_4(sc, IWI_CSR_INTR, r); @@ -2901,7 +2905,7 @@ * key setup. This typically is due to a user app bug * but if we blindly grab the key the firmware will * barf so avoid it for now. - */ + */ if (vap->iv_def_txkey != IEEE80211_KEYIX_NONE) assoc->auth |= vap->iv_def_txkey << 4; Modified: haiku/trunk/src/add-ons/kernel/drivers/network/wlan/iprowifi2200/dev/iwi/if_iwivar.h =================================================================== --- haiku/trunk/src/add-ons/kernel/drivers/network/wlan/iprowifi2200/dev/iwi/if_iwivar.h 2009-12-29 22:20:54 UTC (rev 34814) +++ haiku/trunk/src/add-ons/kernel/drivers/network/wlan/iprowifi2200/dev/iwi/if_iwivar.h 2009-12-29 22:31:43 UTC (rev 34815) @@ -216,6 +216,10 @@ struct iwi_rx_radiotap_header sc_rxtap; struct iwi_tx_radiotap_header sc_txtap; + +#if defined(__HAIKU__) + uint32_t sc_intr_status; +#endif; }; #define IWI_STATE_BEGIN(_sc, _state) do { \ Modified: haiku/trunk/src/add-ons/kernel/drivers/network/wlan/iprowifi2200/glue.c =================================================================== --- haiku/trunk/src/add-ons/kernel/drivers/network/wlan/iprowifi2200/glue.c 2009-12-29 22:20:54 UTC (rev 34814) +++ haiku/trunk/src/add-ons/kernel/drivers/network/wlan/iprowifi2200/glue.c 2009-12-29 22:31:43 UTC (rev 34815) @@ -29,19 +29,15 @@ { struct iwi_softc* sc = (struct iwi_softc*)device_get_softc(dev); uint32 r; - HAIKU_INTR_REGISTER_STATE; - HAIKU_INTR_REGISTER_ENTER(); - if ((r = CSR_READ_4(sc, IWI_CSR_INTR)) == 0 || r == 0xffffffff) { - HAIKU_INTR_REGISTER_LEAVE(); + r = CSR_READ_4(sc, IWI_CSR_INTR); + if (r == 0 || r == 0xffffffff) return 0; - } - /* disable interrupts */ - CSR_WRITE_4(sc, IWI_CSR_INTR_MASK, 0); - - HAIKU_INTR_REGISTER_LEAVE(); + atomic_set((int32*)&sc->sc_intr_status, r); + CSR_WRITE_4(sc, IWI_CSR_INTR_MASK, 0); + // disable interrupts return 1; } @@ -51,6 +47,6 @@ { struct iwi_softc* sc = (struct iwi_softc*)device_get_softc(dev); - /* enable interrupts */ CSR_WRITE_4(sc, IWI_CSR_INTR_MASK, IWI_INTR_MASK); + // reenable interrupts }