diff -ru sdmmc/dev/sdmmc/sdshc.c sdmmc.new/dev/sdmmc/sdshc.c --- sdmmc/dev/sdmmc/sdshc.c 2007-10-27 15:43:39.000000000 +0900 +++ sdmmc.new/dev/sdmmc/sdshc.c 2008-04-22 17:13:40.000000000 +0900 @@ -42,6 +42,9 @@ #include #include #include +#include +#include + #include #include @@ -343,7 +346,7 @@ */ LOG(0x10, (dev, "Setup Intr\n")); error = bus_setup_intr(dev, sc->irq, INTR_TYPE_NET|INTR_MPSAFE , - sdshc_intr, sc, &sc->ih); + NULL, sdshc_intr, sc, &sc->ih); if (error != 0) { MSG((dev, "could not set up interrupt\n")); goto cleanup; @@ -612,19 +615,23 @@ #endif LOG(0x08, (sc->dev, "Resetting device...\n")); + SD_LOCK(sc); SDSHC_WRITE1(sc, RESET, SDSHC_HSR_RESET_ALL); #if defined(SDSHC_CHECK_RESET_DONE) for (cnt = 0; cnt < SDSHC_TIMEOUT_COUNT; cnt++) { if ((SDSHC_READ1(sc, RESET) & SDSHC_HSR_RESET_MASK) == 0) { LOG(0x01, (sc->dev, "Controller reset done\n")); + SD_UNLOCK(sc); return 0; } msleep(sc, &sc->mtx, PPAUSE, "sdshc_reset", sdshc_polling_interval); } + SD_UNLOCK(sc); LOG(0x01, (sc->dev, "Controller reset failure\n")); return ENXIO; #else msleep(sc, &sc->mtx, PPAUSE, "sdshc_reset", hz / 20); + SD_UNLOCK(sc); return 0; #endif } Only in sdmmc.new/dev/sdmmc: sdshc.c~ diff -ru sdmmc/dev/sdmmc/sdshcbus.c sdmmc.new/dev/sdmmc/sdshcbus.c --- sdmmc/dev/sdmmc/sdshcbus.c 2007-06-20 02:42:28.000000000 +0900 +++ sdmmc.new/dev/sdmmc/sdshcbus.c 2008-04-22 17:07:08.000000000 +0900 @@ -35,6 +35,7 @@ #include #include +#include #include #include #include Only in sdmmc.new/dev/sdmmc: sdshcbus.c~ Only in sdmmc.new/modules/sdmmc: @ Only in sdmmc.new/modules/sdmmc: Makefile~ Only in sdmmc.new/modules/sdmmc: bus_if.h Only in sdmmc.new/modules/sdmmc: device_if.h Only in sdmmc.new/modules/sdmmc: export_syms Only in sdmmc.new/modules/sdmmc: machine Only in sdmmc.new/modules/sdmmc: opt_sd.h Only in sdmmc.new/modules/sdmmc: pci_if.h Only in sdmmc.new/modules/sdmmc: sd.o Only in sdmmc.new/modules/sdmmc: sdbus_if.c Only in sdmmc.new/modules/sdmmc: sdbus_if.h Only in sdmmc.new/modules/sdmmc: sdbus_if.o Only in sdmmc.new/modules/sdmmc: sdmmc.kld Only in sdmmc.new/modules/sdmmc: sdmmc.ko Only in sdmmc.new/modules/sdmmc: sdshc.o Only in sdmmc.new/modules/sdmmc: sdshcbus.o