Deleted Added
full compact
35c35
< __FBSDID("$FreeBSD: head/sys/sparc64/pci/schizo.c 227960 2011-11-24 23:48:22Z marius $");
---
> __FBSDID("$FreeBSD: head/sys/sparc64/pci/schizo.c 230664 2012-01-28 22:42:33Z marius $");
180a181,182
> #define SCHIZO_CDMA_TIMEOUT 1 /* 1 second per try */
> #define SCHIZO_CDMA_TRIES 15
709,710c711,713
< (void)schizo_get_intrmap(sc, i, NULL,
< &sc->sc_cdma_clr);
---
> sc->sc_cdma_vec = INTMAP_VEC(sc->sc_ign, i);
> (void)schizo_get_intrmap(sc, i,
> &sc->sc_cdma_map, &sc->sc_cdma_clr);
713a717
> sc->sc_cdma_vec = INTMAP_VEC(sc->sc_ign, i);
715c719
< INTMAP_VEC(sc->sc_ign, i), 1) != 0)
---
> sc->sc_cdma_vec, 1) != 0)
723,724c727,728
< (void)schizo_get_intrmap(sc, i, NULL,
< &sc->sc_cdma_clr);
---
> (void)schizo_get_intrmap(sc, i,
> &sc->sc_cdma_map, &sc->sc_cdma_clr);
991c995,996
< atomic_store_rel_32(&sc->sc_cdma_state, SCHIZO_CDMA_STATE_RECEIVED);
---
> atomic_cmpset_32(&sc->sc_cdma_state, SCHIZO_CDMA_STATE_PENDING,
> SCHIZO_CDMA_STATE_RECEIVED);
1156c1161,1164
< int res;
---
> int i, res;
> #ifdef INVARIANTS
> register_t pil;
> #endif
1172a1181,1185
> critical_enter();
> KASSERT((rdpr(pstate) & PSTATE_IE) != 0,
> ("%s: interrupts disabled", __func__));
> KASSERT((pil = rdpr(pil)) <= PIL_BRIDGE,
> ("%s: PIL too low (%ld)", __func__, pil));
1176,1183c1189,1195
< SCHIZO_PCI_WRITE_8(sc, sc->sc_cdma_clr, INTCLR_RECEIVED);
< microuptime(&cur);
< end.tv_sec = 15;
< end.tv_usec = 0;
< timevaladd(&end, &cur);
< for (; (res = atomic_cmpset_rel_32(&sc->sc_cdma_state,
< SCHIZO_CDMA_STATE_RECEIVED, SCHIZO_CDMA_STATE_IDLE)) ==
< 0 && timevalcmp(&cur, &end, <=);)
---
> SCHIZO_PCI_WRITE_8(sc, sc->sc_cdma_map,
> INTMAP_ENABLE(sc->sc_cdma_vec, PCPU_GET(mid)));
> for (i = 0; i < SCHIZO_CDMA_TRIES; i++) {
> if (i > 0)
> printf("%s: try %d\n", __func__, i);
> SCHIZO_PCI_WRITE_8(sc, sc->sc_cdma_clr,
> INTCLR_RECEIVED);
1184a1197,1207
> end.tv_sec = SCHIZO_CDMA_TIMEOUT;
> end.tv_usec = 0;
> timevaladd(&end, &cur);
> for (; (res = atomic_cmpset_rel_32(&sc->sc_cdma_state,
> SCHIZO_CDMA_STATE_RECEIVED,
> SCHIZO_CDMA_STATE_IDLE)) == 0 &&
> timevalcmp(&cur, &end, <=);)
> microuptime(&cur);
> if (res != 0)
> break;
> }
1186a1210
> critical_exit();
1355c1379
< start, end, count, flags));
---
> start, end, count, flags));