Ticket #5089: iprowifi4965-r34504.diff
File iprowifi4965-r34504.diff, 2.7 KB (added by , 14 years ago) |
---|
-
iprowifi4965/glue.c
21 21 22 22 HAIKU_FBSD_WLAN_DRIVER_GLUE(iprowifi4965, iwn, pci) 23 23 NO_HAIKU_FBSD_MII_DRIVER(); 24 HAIKU_DRIVER_REQUIREMENTS(FBSD_TASKQUEUES|FBSD_WLAN); 24 NO_HAIKU_REENABLE_INTERRUPTS(); 25 HAIKU_DRIVER_REQUIREMENTS(FBSD_TASKQUEUES | FBSD_WLAN); 25 26 HAIKU_FIRMWARE_VERSION(44417); 26 27 27 28 … … 29 30 HAIKU_CHECK_DISABLE_INTERRUPTS(device_t dev) 30 31 { 31 32 struct iwn_softc* sc = (struct iwn_softc*)device_get_softc(dev); 32 uint32 r1, r2;33 uint32_t r1, r2; 33 34 HAIKU_INTR_REGISTER_STATE; 34 35 35 HAIKU_INTR_REGISTER_ENTER(); 36 // Locking of sc with IWN_LOCK is infeasible due to disabled interrupts. 37 38 /* disable interrupts */ 39 IWN_WRITE(sc, IWN_MASK, 0); 40 36 41 r1 = IWN_READ(sc, IWN_INTR); 37 42 r2 = IWN_READ(sc, IWN_INTR_STATUS); 38 43 39 44 if (r1 == 0 && r2 == 0) { 40 45 /* not for us */ 41 46 IWN_WRITE(sc, IWN_MASK, IWN_INTR_MASK); 42 HAIKU_INTR_REGISTER_LEAVE();43 47 return 0; 44 48 } 45 49 46 if (r1 == 0xffffffff) { 47 /* hardware gone */ 48 HAIKU_INTR_REGISTER_LEAVE(); 50 if (r1 == 0xffffffff) /* hardware gone */ 49 51 return 0; 50 }51 52 52 /* disable interrupts */53 IWN_WRITE(sc, IWN_MASK, 0);54 53 HAIKU_INTR_REGISTER_ENTER(); 54 sc->sc_lastisr = r1; 55 sc->sc_lastisr_status = r2; 55 56 HAIKU_INTR_REGISTER_LEAVE(); 56 57 57 58 return 1; 58 59 } 59 60 61 void62 HAIKU_REENABLE_INTERRUPTS(device_t dev)63 {64 struct iwn_softc* sc = (struct iwn_softc*)device_get_softc(dev);65 66 /* enable interrupts */67 IWN_WRITE(sc, IWN_MASK, IWN_INTR_MASK);68 } -
iprowifi4965/dev/iwn/if_iwnvar.h
200 200 int16_t eeprom_voltage; 201 201 int8_t maxpwr2GHz; 202 202 int8_t maxpwr5GHz; 203 204 uint32_t sc_lastisr; 205 uint32_t sc_lastisr_status; 203 206 }; 204 207 205 208 #define IWN_LOCK_INIT(_sc) \ -
iprowifi4965/dev/iwn/if_iwn.c
1805 1805 { 1806 1806 struct iwn_softc *sc = arg; 1807 1807 uint32_t r1, r2; 1808 HAIKU_INTR_REGISTER_STATE; 1808 1809 1809 1810 IWN_LOCK(sc); 1810 1811 1811 /* disable interrupts */ 1812 IWN_WRITE(sc, IWN_MASK, 0); 1812 HAIKU_INTR_REGISTER_ENTER(); 1813 r1 = sc->sc_lastisr; 1814 r2 = sc->sc_lastisr_status; 1815 HAIKU_INTR_REGISTER_LEAVE(); 1813 1816 1814 r1 = IWN_READ(sc, IWN_INTR);1815 r2 = IWN_READ(sc, IWN_INTR_STATUS);1816 1817 if (r1 == 0 && r2 == 0) {1818 IWN_WRITE(sc, IWN_MASK, IWN_INTR_MASK);1819 goto done; /* not for us */1820 }1821 1822 if (r1 == 0xffffffff)1823 goto done; /* hardware gone */1824 1825 1817 /* ack interrupts */ 1826 1818 IWN_WRITE(sc, IWN_INTR, r1); 1827 1819 IWN_WRITE(sc, IWN_INTR_STATUS, r2);