diff options
author | 2010-08-24 14:52:23 +0000 | |
---|---|---|
committer | 2010-08-24 14:52:23 +0000 | |
commit | 9de6240f73c2a69fc0b2a579cbfe23bba9d566ed (patch) | |
tree | 594294bc12de104a163005cdee19aefbe4dfae0e /sys/dev/sdmmc | |
parent | legibility fixes: (diff) | |
download | wireguard-openbsd-9de6240f73c2a69fc0b2a579cbfe23bba9d566ed.tar.xz wireguard-openbsd-9de6240f73c2a69fc0b2a579cbfe23bba9d566ed.zip |
lockmgr -> rwlock conversion
and with this, my adventure in sdmmc-land is over
bikeshed is still banana-shaped
ok oga@
Diffstat (limited to 'sys/dev/sdmmc')
-rw-r--r-- | sys/dev/sdmmc/sbt.c | 12 | ||||
-rw-r--r-- | sys/dev/sdmmc/sdmmc.c | 57 | ||||
-rw-r--r-- | sys/dev/sdmmc/sdmmc_cis.c | 6 | ||||
-rw-r--r-- | sys/dev/sdmmc/sdmmc_io.c | 58 | ||||
-rw-r--r-- | sys/dev/sdmmc/sdmmc_mem.c | 20 | ||||
-rw-r--r-- | sys/dev/sdmmc/sdmmc_scsi.c | 6 | ||||
-rw-r--r-- | sys/dev/sdmmc/sdmmcvar.h | 10 |
7 files changed, 84 insertions, 85 deletions
diff --git a/sys/dev/sdmmc/sbt.c b/sys/dev/sdmmc/sbt.c index 107d7b8435f..bc62c4b1bb1 100644 --- a/sys/dev/sdmmc/sbt.c +++ b/sys/dev/sdmmc/sbt.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sbt.c,v 1.16 2010/08/19 17:54:12 jasper Exp $ */ +/* $OpenBSD: sbt.c,v 1.17 2010/08/24 14:52:23 blambert Exp $ */ /* * Copyright (c) 2007 Uwe Stuehler <uwe@openbsd.org> @@ -308,7 +308,7 @@ sbt_read_packet(struct sbt_softc *sc, u_char *buf, size_t *lenp) } out: - SDMMC_LOCK(sc->sc_sf->sc); + rw_enter_write(&sc->sc_sf->sc->sc_lock); if (error) { if (sc->sc_rxtry >= SBT_RXTRY_MAX) { /* Drop and request the next packet. */ @@ -319,14 +319,14 @@ out: sc->sc_rxtry++; CSR_WRITE_1(sc, SBT_REG_RPC, RPC_PCRRT); } - SDMMC_UNLOCK(sc->sc_sf->sc); + rw_exit(&sc->sc_sf->sc->sc_lock); return error; } /* acknowledge read packet */ CSR_WRITE_1(sc, SBT_REG_RPC, 0); - SDMMC_UNLOCK(sc->sc_sf->sc); + rw_exit(&sc->sc_sf->sc->sc_lock); *lenp = len; return 0; @@ -349,10 +349,10 @@ sbt_intr(void *arg) /* Block further SDIO interrupts; XXX not really needed? */ s = splsdmmc(); - SDMMC_LOCK(sc->sc_sf->sc); + rw_enter_write(&sc->sc_sf->sc->sc_lock); status = CSR_READ_1(sc, SBT_REG_ISTAT); CSR_WRITE_1(sc, SBT_REG_ICLR, status); - SDMMC_UNLOCK(sc->sc_sf->sc); + rw_exit(&sc->sc_sf->sc->sc_lock); if ((status & ISTAT_INTRD) == 0) return 0; /* shared SDIO card interrupt? */ diff --git a/sys/dev/sdmmc/sdmmc.c b/sys/dev/sdmmc/sdmmc.c index bb67e6e21e1..a8801c2bc48 100644 --- a/sys/dev/sdmmc/sdmmc.c +++ b/sys/dev/sdmmc/sdmmc.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sdmmc.c,v 1.23 2010/08/19 17:54:12 jasper Exp $ */ +/* $OpenBSD: sdmmc.c,v 1.24 2010/08/24 14:52:23 blambert Exp $ */ /* * Copyright (c) 2006 Uwe Stuehler <uwe@openbsd.org> @@ -28,6 +28,7 @@ #include <sys/kthread.h> #include <sys/malloc.h> #include <sys/proc.h> +#include <sys/rwlock.h> #include <sys/systm.h> #include <scsi/scsi_all.h> @@ -111,7 +112,7 @@ sdmmc_attach(struct device *parent, struct device *self, void *aux) TAILQ_INIT(&sc->sc_intrq); sdmmc_init_task(&sc->sc_discover_task, sdmmc_discover_task, sc); sdmmc_init_task(&sc->sc_intr_task, sdmmc_intr_task, sc); - lockinit(&sc->sc_lock, PRIBIO, DEVNAME(sc), 0, 0); + rw_init(&sc->sc_lock, DEVNAME(sc)); #ifdef SDMMC_IOCTL if (bio_register(self, sdmmc_ioctl) != 0) @@ -198,9 +199,9 @@ restart: splx(s); if (ISSET(sc->sc_flags, SMF_CARD_PRESENT)) { - SDMMC_LOCK(sc); + rw_enter_write(&sc->sc_lock); sdmmc_card_detach(sc, DETACH_FORCE); - SDMMC_UNLOCK(sc); + rw_exit(&sc->sc_lock); } /* @@ -268,9 +269,9 @@ sdmmc_discover_task(void *arg) } else { if (ISSET(sc->sc_flags, SMF_CARD_PRESENT)) { CLR(sc->sc_flags, SMF_CARD_PRESENT); - SDMMC_LOCK(sc); + rw_enter_write(&sc->sc_lock); sdmmc_card_detach(sc, DETACH_FORCE); - SDMMC_UNLOCK(sc); + rw_exit(&sc->sc_lock); } } } @@ -283,7 +284,7 @@ sdmmc_card_attach(struct sdmmc_softc *sc) { DPRINTF(1,("%s: attach card\n", DEVNAME(sc))); - SDMMC_LOCK(sc); + rw_enter_write(&sc->sc_lock); CLR(sc->sc_flags, SMF_CARD_ATTACHED); /* @@ -320,11 +321,11 @@ sdmmc_card_attach(struct sdmmc_softc *sc) sdmmc_io_attach(sc); SET(sc->sc_flags, SMF_CARD_ATTACHED); - SDMMC_UNLOCK(sc); + rw_exit(&sc->sc_lock); return; err: sdmmc_card_detach(sc, DETACH_FORCE); - SDMMC_UNLOCK(sc); + rw_exit(&sc->sc_lock); } /* @@ -336,7 +337,7 @@ sdmmc_card_detach(struct sdmmc_softc *sc, int flags) { struct sdmmc_function *sf, *sfnext; - SDMMC_ASSERT_LOCKED(sc); + rw_assert_wrlock(&sc->sc_lock); DPRINTF(1,("%s: detach card\n", DEVNAME(sc))); @@ -371,7 +372,7 @@ sdmmc_enable(struct sdmmc_softc *sc) u_int32_t host_ocr; int error; - SDMMC_ASSERT_LOCKED(sc); + rw_assert_wrlock(&sc->sc_lock); /* * Calculate the equivalent of the card OCR from the host @@ -422,7 +423,7 @@ sdmmc_disable(struct sdmmc_softc *sc) { /* XXX complete commands if card is still present. */ - SDMMC_ASSERT_LOCKED(sc); + rw_assert_wrlock(&sc->sc_lock); /* Make sure no card is still selected. */ (void)sdmmc_select_card(sc, NULL); @@ -441,7 +442,7 @@ sdmmc_set_bus_power(struct sdmmc_softc *sc, u_int32_t host_ocr, { u_int32_t bit; - SDMMC_ASSERT_LOCKED(sc); + rw_assert_wrlock(&sc->sc_lock); /* Mask off unsupported voltage levels and select the lowest. */ DPRINTF(1,("%s: host_ocr=%x ", DEVNAME(sc), host_ocr)); @@ -489,7 +490,7 @@ int sdmmc_scan(struct sdmmc_softc *sc) { - SDMMC_ASSERT_LOCKED(sc); + rw_assert_wrlock(&sc->sc_lock); /* Scan for I/O functions. */ if (ISSET(sc->sc_flags, SMF_IO_MODE)) @@ -516,7 +517,7 @@ sdmmc_init(struct sdmmc_softc *sc) { struct sdmmc_function *sf; - SDMMC_ASSERT_LOCKED(sc); + rw_assert_wrlock(&sc->sc_lock); /* Initialize all identified card functions. */ SIMPLEQ_FOREACH(sf, &sc->sf_head, sf_list) { @@ -555,7 +556,7 @@ sdmmc_app_command(struct sdmmc_softc *sc, struct sdmmc_command *cmd) struct sdmmc_command acmd; int error; - SDMMC_ASSERT_LOCKED(sc); + rw_assert_wrlock(&sc->sc_lock); bzero(&acmd, sizeof acmd); acmd.c_opcode = MMC_APP_CMD; @@ -586,7 +587,7 @@ sdmmc_mmc_command(struct sdmmc_softc *sc, struct sdmmc_command *cmd) { int error; - SDMMC_ASSERT_LOCKED(sc); + rw_assert_wrlock(&sc->sc_lock); sdmmc_chip_exec_command(sc->sct, sc->sch, cmd); @@ -608,7 +609,7 @@ sdmmc_go_idle_state(struct sdmmc_softc *sc) { struct sdmmc_command cmd; - SDMMC_ASSERT_LOCKED(sc); + rw_assert_wrlock(&sc->sc_lock); bzero(&cmd, sizeof cmd); cmd.c_opcode = MMC_GO_IDLE_STATE; @@ -627,7 +628,7 @@ sdmmc_send_if_cond(struct sdmmc_softc *sc, uint32_t card_ocr) uint8_t pat = 0x23; /* any pattern will do here */ uint8_t res; - SDMMC_ASSERT_LOCKED(sc); + rw_assert_wrlock(&sc->sc_lock); bzero(&cmd, sizeof cmd); @@ -654,7 +655,7 @@ sdmmc_set_relative_addr(struct sdmmc_softc *sc, { struct sdmmc_command cmd; - SDMMC_ASSERT_LOCKED(sc); + rw_assert_wrlock(&sc->sc_lock); bzero(&cmd, sizeof cmd); @@ -685,15 +686,15 @@ sdmmc_set_bus_width(struct sdmmc_function *sf) struct sdmmc_command cmd; int error; - SDMMC_LOCK(sc); + rw_enter_write(&sc->sc_lock); if (!ISSET(sc->sc_flags, SMF_SD_MODE)) { - SDMMC_UNLOCK(sc); + rw_exit(&sc->sc_lock); return EOPNOTSUPP; } if ((error = sdmmc_select_card(sc, sf)) != 0) { - SDMMC_UNLOCK(sc); + rw_exit(&sc->sc_lock); return error; } @@ -702,7 +703,7 @@ sdmmc_set_bus_width(struct sdmmc_function *sf) cmd.c_arg = SD_ARG_BUS_WIDTH_4; cmd.c_flags = SCF_CMD_AC | SCF_RSP_R1; error = sdmmc_app_command(sc, &cmd); - SDMMC_UNLOCK(sc); + rw_exit(&sc->sc_lock); return error; } @@ -712,7 +713,7 @@ sdmmc_select_card(struct sdmmc_softc *sc, struct sdmmc_function *sf) struct sdmmc_command cmd; int error; - SDMMC_ASSERT_LOCKED(sc); + rw_assert_wrlock(&sc->sc_lock); if (sc->sc_card == sf || (sf && sc->sc_card && sc->sc_card->rca == sf->rca)) { @@ -780,12 +781,12 @@ sdmmc_ioctl(struct device *self, u_long request, caddr_t addr) cmd.c_datalen = ucmd->c_datalen; } - SDMMC_LOCK(sc); + rw_enter_write(&sc->sc_lock); if (request == SDIOCEXECMMC) error = sdmmc_mmc_command(sc, &cmd); else error = sdmmc_app_command(sc, &cmd); - SDMMC_UNLOCK(sc); + rw_exit(&sc->sc_lock); if (error && !cmd.c_error) cmd.c_error = error; @@ -814,7 +815,7 @@ sdmmc_dump_command(struct sdmmc_softc *sc, struct sdmmc_command *cmd) { int i; - SDMMC_ASSERT_LOCKED(sc); + rw_assert_wrlock(&sc->sc_lock); DPRINTF(1,("%s: cmd %u arg=%#x data=%#x dlen=%d flags=%#x " "proc=\"%s\" (error %d)\n", DEVNAME(sc), cmd->c_opcode, diff --git a/sys/dev/sdmmc/sdmmc_cis.c b/sys/dev/sdmmc/sdmmc_cis.c index 66a9a6c4e00..bc00b2ba1e2 100644 --- a/sys/dev/sdmmc/sdmmc_cis.c +++ b/sys/dev/sdmmc/sdmmc_cis.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sdmmc_cis.c,v 1.4 2010/08/19 17:54:12 jasper Exp $ */ +/* $OpenBSD: sdmmc_cis.c,v 1.5 2010/08/24 14:52:23 blambert Exp $ */ /* * Copyright (c) 2006 Uwe Stuehler <uwe@openbsd.org> @@ -39,7 +39,7 @@ sdmmc_cisptr(struct sdmmc_function *sf) { u_int32_t cisptr = 0; - SDMMC_ASSERT_LOCKED(sf->sc); + rw_assert_wrlock(&sf->sc->sc_lock); /* XXX where is the per-function CIS pointer register? */ if (sf->number != 0) @@ -60,7 +60,7 @@ sdmmc_read_cis(struct sdmmc_function *sf, struct sdmmc_cis *cis) u_int8_t tplcode; u_int8_t tpllen; - SDMMC_ASSERT_LOCKED(sf->sc); + rw_assert_wrlock(&sf->sc->sc_lock); bzero(cis, sizeof *cis); diff --git a/sys/dev/sdmmc/sdmmc_io.c b/sys/dev/sdmmc/sdmmc_io.c index 815aac6beb8..b7137efb08e 100644 --- a/sys/dev/sdmmc/sdmmc_io.c +++ b/sys/dev/sdmmc/sdmmc_io.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sdmmc_io.c,v 1.18 2010/08/19 17:54:12 jasper Exp $ */ +/* $OpenBSD: sdmmc_io.c,v 1.19 2010/08/24 14:52:23 blambert Exp $ */ /* * Copyright (c) 2006 Uwe Stuehler <uwe@openbsd.org> @@ -72,7 +72,7 @@ sdmmc_io_enable(struct sdmmc_softc *sc) u_int32_t host_ocr; u_int32_t card_ocr; - SDMMC_ASSERT_LOCKED(sc); + rw_assert_wrlock(&sc->sc_lock); /* Set host mode to SD "combo" card. */ SET(sc->sc_flags, SMF_SD_MODE|SMF_IO_MODE|SMF_MEM_MODE); @@ -136,7 +136,7 @@ sdmmc_io_scan(struct sdmmc_softc *sc) struct sdmmc_function *sf0, *sf; int i; - SDMMC_ASSERT_LOCKED(sc); + rw_assert_wrlock(&sc->sc_lock); sf0 = sdmmc_function_alloc(sc); sf0->number = 0; @@ -171,7 +171,7 @@ sdmmc_io_scan(struct sdmmc_softc *sc) int sdmmc_io_init(struct sdmmc_softc *sc, struct sdmmc_function *sf) { - SDMMC_ASSERT_LOCKED(sc); + rw_assert_wrlock(&sc->sc_lock); if (sf->number == 0) { sdmmc_io_write_1(sf, SD_IO_CCCR_BUS_WIDTH, @@ -201,7 +201,7 @@ sdmmc_io_function_ready(struct sdmmc_function *sf) struct sdmmc_function *sf0 = sc->sc_fn0; u_int8_t rv; - SDMMC_ASSERT_LOCKED(sc); + rw_assert_wrlock(&sc->sc_lock); if (sf->number == 0) return 1; /* FN0 is always ready */ @@ -226,11 +226,11 @@ sdmmc_io_function_enable(struct sdmmc_function *sf) if (sf->number == 0) return 0; /* FN0 is always enabled */ - SDMMC_LOCK(sc); + rw_enter_write(&sc->sc_lock); rv = sdmmc_io_read_1(sf0, SD_IO_CCCR_FN_ENABLE); rv |= (1<<sf->number); sdmmc_io_write_1(sf0, SD_IO_CCCR_FN_ENABLE, rv); - SDMMC_UNLOCK(sc); + rw_exit(&sc->sc_lock); while (!sdmmc_io_function_ready(sf) && retry-- > 0) tsleep(&lbolt, PPAUSE, "pause", 0); @@ -248,7 +248,7 @@ sdmmc_io_function_disable(struct sdmmc_function *sf) struct sdmmc_function *sf0 = sc->sc_fn0; u_int8_t rv; - SDMMC_ASSERT_LOCKED(sc); + rw_assert_wrlock(&sc->sc_lock); if (sf->number == 0) return; /* FN0 is always enabled */ @@ -264,7 +264,7 @@ sdmmc_io_attach(struct sdmmc_softc *sc) struct sdmmc_function *sf; struct sdmmc_attach_args saa; - SDMMC_ASSERT_LOCKED(sc); + rw_assert_wrlock(&sc->sc_lock); SIMPLEQ_FOREACH(sf, &sc->sf_head, sf_list) { if (sf->number < 1) @@ -337,7 +337,7 @@ sdmmc_io_detach(struct sdmmc_softc *sc) { struct sdmmc_function *sf; - SDMMC_ASSERT_LOCKED(sc); + rw_assert_wrlock(&sc->sc_lock); SIMPLEQ_FOREACH(sf, &sc->sf_head, sf_list) { if (sf->child != NULL) { @@ -356,11 +356,11 @@ sdmmc_io_rw_direct(struct sdmmc_softc *sc, struct sdmmc_function *sf, struct sdmmc_command cmd; int error; - SDMMC_ASSERT_LOCKED(sc); + rw_assert_wrlock(&sc->sc_lock); /* Make sure the card is selected. */ if ((error = sdmmc_select_card(sc, sf)) != 0) { - SDMMC_UNLOCK(sc); + rw_exit(&sc->sc_lock); return error; } @@ -395,12 +395,12 @@ sdmmc_io_rw_extended(struct sdmmc_softc *sc, struct sdmmc_function *sf, struct sdmmc_command cmd; int error; - SDMMC_ASSERT_LOCKED(sc); + rw_assert_wrlock(&sc->sc_lock); #if 0 /* Make sure the card is selected. */ if ((error = sdmmc_select_card(sc, sf)) != 0) { - SDMMC_UNLOCK(sc); + rw_exit(&sc->sc_lock); return error; } #endif @@ -424,7 +424,7 @@ sdmmc_io_rw_extended(struct sdmmc_softc *sc, struct sdmmc_function *sf, cmd.c_flags |= SCF_CMD_READ; error = sdmmc_mmc_command(sc, &cmd); - SDMMC_UNLOCK(sc); + rw_exit(&sc->sc_lock); return error; } @@ -433,7 +433,7 @@ sdmmc_io_read_1(struct sdmmc_function *sf, int reg) { u_int8_t data = 0; - SDMMC_ASSERT_LOCKED(sf->sc); + rw_assert_wrlock(&sf->sc->sc_lock); (void)sdmmc_io_rw_direct(sf->sc, sf, reg, (u_char *)&data, SD_ARG_CMD52_READ); @@ -443,7 +443,7 @@ sdmmc_io_read_1(struct sdmmc_function *sf, int reg) void sdmmc_io_write_1(struct sdmmc_function *sf, int reg, u_int8_t data) { - SDMMC_ASSERT_LOCKED(sf->sc); + rw_assert_wrlock(&sf->sc->sc_lock); (void)sdmmc_io_rw_direct(sf->sc, sf, reg, (u_char *)&data, SD_ARG_CMD52_WRITE); @@ -454,7 +454,7 @@ sdmmc_io_read_2(struct sdmmc_function *sf, int reg) { u_int16_t data = 0; - SDMMC_ASSERT_LOCKED(sf->sc); + rw_assert_wrlock(&sf->sc->sc_lock); (void)sdmmc_io_rw_extended(sf->sc, sf, reg, (u_char *)&data, 2, SD_ARG_CMD53_READ | SD_ARG_CMD53_INCREMENT); @@ -464,7 +464,7 @@ sdmmc_io_read_2(struct sdmmc_function *sf, int reg) void sdmmc_io_write_2(struct sdmmc_function *sf, int reg, u_int16_t data) { - SDMMC_ASSERT_LOCKED(sf->sc); + rw_assert_wrlock(&sf->sc->sc_lock); (void)sdmmc_io_rw_extended(sf->sc, sf, reg, (u_char *)&data, 2, SD_ARG_CMD53_WRITE | SD_ARG_CMD53_INCREMENT); @@ -475,7 +475,7 @@ sdmmc_io_read_4(struct sdmmc_function *sf, int reg) { u_int32_t data = 0; - SDMMC_ASSERT_LOCKED(sf->sc); + rw_assert_wrlock(&sf->sc->sc_lock); (void)sdmmc_io_rw_extended(sf->sc, sf, reg, (u_char *)&data, 4, SD_ARG_CMD53_READ | SD_ARG_CMD53_INCREMENT); @@ -485,7 +485,7 @@ sdmmc_io_read_4(struct sdmmc_function *sf, int reg) void sdmmc_io_write_4(struct sdmmc_function *sf, int reg, u_int32_t data) { - SDMMC_ASSERT_LOCKED(sf->sc); + rw_assert_wrlock(&sf->sc->sc_lock); (void)sdmmc_io_rw_extended(sf->sc, sf, reg, (u_char *)&data, 4, SD_ARG_CMD53_WRITE | SD_ARG_CMD53_INCREMENT); @@ -497,7 +497,7 @@ sdmmc_io_read_multi_1(struct sdmmc_function *sf, int reg, u_char *data, { int error; - SDMMC_ASSERT_LOCKED(sf->sc); + rw_assert_wrlock(&sf->sc->sc_lock); while (datalen > SD_ARG_CMD53_LENGTH_MAX) { error = sdmmc_io_rw_extended(sf->sc, sf, reg, data, @@ -518,7 +518,7 @@ sdmmc_io_write_multi_1(struct sdmmc_function *sf, int reg, u_char *data, { int error; - SDMMC_ASSERT_LOCKED(sf->sc); + rw_assert_wrlock(&sf->sc->sc_lock); while (datalen > SD_ARG_CMD53_LENGTH_MAX) { error = sdmmc_io_rw_extended(sf->sc, sf, reg, data, @@ -538,7 +538,7 @@ sdmmc_io_xchg(struct sdmmc_softc *sc, struct sdmmc_function *sf, int reg, u_char *datap) { - SDMMC_ASSERT_LOCKED(sc); + rw_assert_wrlock(&sc->sc_lock); return sdmmc_io_rw_direct(sc, sf, reg, datap, SD_ARG_CMD52_WRITE|SD_ARG_CMD52_EXCHANGE); @@ -566,7 +566,7 @@ sdmmc_io_send_op_cond(struct sdmmc_softc *sc, u_int32_t ocr, u_int32_t *ocrp) int error; int i; - SDMMC_ASSERT_LOCKED(sc); + rw_assert_wrlock(&sc->sc_lock); /* * If we change the OCR value, retry the command until the OCR @@ -605,11 +605,11 @@ sdmmc_intr_enable(struct sdmmc_function *sf) struct sdmmc_function *sf0 = sc->sc_fn0; u_int8_t imask; - SDMMC_LOCK(sc); + rw_enter_write(&sc->sc_lock); imask = sdmmc_io_read_1(sf0, SD_IO_CCCR_INT_ENABLE); imask |= 1 << sf->number; sdmmc_io_write_1(sf0, SD_IO_CCCR_INT_ENABLE, imask); - SDMMC_UNLOCK(sc); + rw_exit(&sc->sc_lock); } void @@ -619,11 +619,11 @@ sdmmc_intr_disable(struct sdmmc_function *sf) struct sdmmc_function *sf0 = sc->sc_fn0; u_int8_t imask; - SDMMC_LOCK(sc); + rw_enter_write(&sc->sc_lock); imask = sdmmc_io_read_1(sf0, SD_IO_CCCR_INT_ENABLE); imask &= ~(1 << sf->number); sdmmc_io_write_1(sf0, SD_IO_CCCR_INT_ENABLE, imask); - SDMMC_UNLOCK(sc); + rw_exit(&sc->sc_lock); } /* diff --git a/sys/dev/sdmmc/sdmmc_mem.c b/sys/dev/sdmmc/sdmmc_mem.c index d135fb6b334..eb87d33ea4b 100644 --- a/sys/dev/sdmmc/sdmmc_mem.c +++ b/sys/dev/sdmmc/sdmmc_mem.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sdmmc_mem.c,v 1.15 2010/08/19 17:54:12 jasper Exp $ */ +/* $OpenBSD: sdmmc_mem.c,v 1.16 2010/08/24 14:52:23 blambert Exp $ */ /* * Copyright (c) 2006 Uwe Stuehler <uwe@openbsd.org> @@ -52,7 +52,7 @@ sdmmc_mem_enable(struct sdmmc_softc *sc) u_int32_t host_ocr; u_int32_t card_ocr; - SDMMC_ASSERT_LOCKED(sc); + rw_assert_wrlock(&sc->sc_lock); /* Set host mode to SD "combo" card or SD memory-only. */ SET(sc->sc_flags, SMF_SD_MODE|SMF_MEM_MODE); @@ -122,7 +122,7 @@ sdmmc_mem_scan(struct sdmmc_softc *sc) int error; int i; - SDMMC_ASSERT_LOCKED(sc); + rw_assert_wrlock(&sc->sc_lock); /* * CMD2 is a broadcast command understood by SD cards and MMC @@ -331,7 +331,7 @@ sdmmc_mem_init(struct sdmmc_softc *sc, struct sdmmc_function *sf) { int error = 0; - SDMMC_ASSERT_LOCKED(sc); + rw_assert_wrlock(&sc->sc_lock); if (sdmmc_select_card(sc, sf) != 0 || sdmmc_mem_set_blocklen(sc, sf) != 0) @@ -350,7 +350,7 @@ sdmmc_mem_send_op_cond(struct sdmmc_softc *sc, u_int32_t ocr, int error; int i; - SDMMC_ASSERT_LOCKED(sc); + rw_assert_wrlock(&sc->sc_lock); /* * If we change the OCR value, retry the command until the OCR @@ -392,7 +392,7 @@ sdmmc_mem_set_blocklen(struct sdmmc_softc *sc, struct sdmmc_function *sf) { struct sdmmc_command cmd; - SDMMC_ASSERT_LOCKED(sc); + rw_assert_wrlock(&sc->sc_lock); bzero(&cmd, sizeof cmd); cmd.c_opcode = MMC_SET_BLOCKLEN; @@ -412,7 +412,7 @@ sdmmc_mem_read_block(struct sdmmc_function *sf, int blkno, u_char *data, struct sdmmc_command cmd; int error; - SDMMC_LOCK(sc); + rw_enter_write(&sc->sc_lock); if ((error = sdmmc_select_card(sc, sf)) != 0) goto err; @@ -456,7 +456,7 @@ sdmmc_mem_read_block(struct sdmmc_function *sf, int blkno, u_char *data, } while (!ISSET(MMC_R1(cmd.c_resp), MMC_R1_READY_FOR_DATA)); err: - SDMMC_UNLOCK(sc); + rw_exit(&sc->sc_lock); return error; } @@ -468,7 +468,7 @@ sdmmc_mem_write_block(struct sdmmc_function *sf, int blkno, u_char *data, struct sdmmc_command cmd; int error; - SDMMC_LOCK(sc); + rw_enter_write(&sc->sc_lock); if ((error = sdmmc_select_card(sc, sf)) != 0) goto err; @@ -511,6 +511,6 @@ sdmmc_mem_write_block(struct sdmmc_function *sf, int blkno, u_char *data, } while (!ISSET(MMC_R1(cmd.c_resp), MMC_R1_READY_FOR_DATA)); err: - SDMMC_UNLOCK(sc); + rw_exit(&sc->sc_lock); return error; } diff --git a/sys/dev/sdmmc/sdmmc_scsi.c b/sys/dev/sdmmc/sdmmc_scsi.c index de146606a9a..2393278b082 100644 --- a/sys/dev/sdmmc/sdmmc_scsi.c +++ b/sys/dev/sdmmc/sdmmc_scsi.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sdmmc_scsi.c,v 1.24 2010/08/19 17:54:12 jasper Exp $ */ +/* $OpenBSD: sdmmc_scsi.c,v 1.25 2010/08/24 14:52:23 blambert Exp $ */ /* * Copyright (c) 2006 Uwe Stuehler <uwe@openbsd.org> @@ -97,7 +97,7 @@ sdmmc_scsi_attach(struct sdmmc_softc *sc) struct sdmmc_scsi_softc *scbus; struct sdmmc_function *sf; - SDMMC_ASSERT_LOCKED(sc); + rw_assert_wrlock(&sc->sc_lock); scbus = malloc(sizeof *scbus, M_DEVBUF, M_WAITOK | M_ZERO); @@ -159,7 +159,7 @@ sdmmc_scsi_detach(struct sdmmc_softc *sc) struct sdmmc_ccb *ccb; int s; - SDMMC_ASSERT_LOCKED(sc); + rw_assert_wrlock(&sc->sc_lock); scbus = sc->sc_scsibus; if (scbus == NULL) diff --git a/sys/dev/sdmmc/sdmmcvar.h b/sys/dev/sdmmc/sdmmcvar.h index 169ac764677..3b59d39fc8a 100644 --- a/sys/dev/sdmmc/sdmmcvar.h +++ b/sys/dev/sdmmc/sdmmcvar.h @@ -1,4 +1,4 @@ -/* $OpenBSD: sdmmcvar.h,v 1.17 2010/08/19 17:54:12 jasper Exp $ */ +/* $OpenBSD: sdmmcvar.h,v 1.18 2010/08/24 14:52:23 blambert Exp $ */ /* * Copyright (c) 2006 Uwe Stuehler <uwe@openbsd.org> @@ -20,7 +20,7 @@ #define _SDMMCVAR_H_ #include <sys/queue.h> -#include <sys/lock.h> +#include <sys/rwlock.h> #include <scsi/scsi_all.h> #include <scsi/scsiconf.h> @@ -172,7 +172,7 @@ struct sdmmc_softc { TAILQ_HEAD(, sdmmc_task) sc_tskq; /* task thread work queue */ struct sdmmc_task sc_discover_task; /* card attach/detach task */ struct sdmmc_task sc_intr_task; /* card interrupt task */ - struct lock sc_lock; /* lock around host controller */ + struct rwlock sc_lock; /* lock around host controller */ void *sc_scsibus; /* SCSI bus emulation softc */ TAILQ_HEAD(, sdmmc_intr_handler) sc_intrq; /* interrupt handlers */ long sc_max_xfer; /* maximum transfer size */ @@ -189,10 +189,8 @@ struct sdmmc_attach_args { #define IPL_SDMMC IPL_BIO #define splsdmmc() splbio() -#define SDMMC_LOCK(sc) lockmgr(&(sc)->sc_lock, LK_EXCLUSIVE, NULL) -#define SDMMC_UNLOCK(sc) lockmgr(&(sc)->sc_lock, LK_RELEASE, NULL) #define SDMMC_ASSERT_LOCKED(sc) \ - KASSERT(lockstatus(&((sc))->sc_lock) == LK_EXCLUSIVE) + rw_assert_wrlock(&(sc)->sc_lock) void sdmmc_add_task(struct sdmmc_softc *, struct sdmmc_task *); void sdmmc_del_task(struct sdmmc_task *); |