| @@ -1,14 +1,14 @@ | | | @@ -1,14 +1,14 @@ |
1 | /* $NetBSD: sdmmc_mem.c,v 1.74 2021/08/03 07:54:39 msaitoh Exp $ */ | | 1 | /* $NetBSD: sdmmc_mem.c,v 1.75 2023/04/29 13:21:31 jmcneill Exp $ */ |
2 | /* $OpenBSD: sdmmc_mem.c,v 1.10 2009/01/09 10:55:22 jsg Exp $ */ | | 2 | /* $OpenBSD: sdmmc_mem.c,v 1.10 2009/01/09 10:55:22 jsg Exp $ */ |
3 | | | 3 | |
4 | /* | | 4 | /* |
5 | * Copyright (c) 2006 Uwe Stuehler <uwe@openbsd.org> | | 5 | * Copyright (c) 2006 Uwe Stuehler <uwe@openbsd.org> |
6 | * | | 6 | * |
7 | * Permission to use, copy, modify, and distribute this software for any | | 7 | * Permission to use, copy, modify, and distribute this software for any |
8 | * purpose with or without fee is hereby granted, provided that the above | | 8 | * purpose with or without fee is hereby granted, provided that the above |
9 | * copyright notice and this permission notice appear in all copies. | | 9 | * copyright notice and this permission notice appear in all copies. |
10 | * | | 10 | * |
11 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | | 11 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
12 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | | 12 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
13 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | | 13 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
14 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | | 14 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
| @@ -35,27 +35,27 @@ | | | @@ -35,27 +35,27 @@ |
35 | * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. | | 35 | * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
36 | * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | | 36 | * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
37 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | | 37 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
38 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | | 38 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
39 | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | | 39 | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
40 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | | 40 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
41 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | | 41 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
42 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | | 42 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
43 | */ | | 43 | */ |
44 | | | 44 | |
45 | /* Routines for SD/MMC memory cards. */ | | 45 | /* Routines for SD/MMC memory cards. */ |
46 | | | 46 | |
47 | #include <sys/cdefs.h> | | 47 | #include <sys/cdefs.h> |
48 | __KERNEL_RCSID(0, "$NetBSD: sdmmc_mem.c,v 1.74 2021/08/03 07:54:39 msaitoh Exp $"); | | 48 | __KERNEL_RCSID(0, "$NetBSD: sdmmc_mem.c,v 1.75 2023/04/29 13:21:31 jmcneill Exp $"); |
49 | | | 49 | |
50 | #ifdef _KERNEL_OPT | | 50 | #ifdef _KERNEL_OPT |
51 | #include "opt_sdmmc.h" | | 51 | #include "opt_sdmmc.h" |
52 | #endif | | 52 | #endif |
53 | | | 53 | |
54 | #include <sys/param.h> | | 54 | #include <sys/param.h> |
55 | #include <sys/kernel.h> | | 55 | #include <sys/kernel.h> |
56 | #include <sys/malloc.h> | | 56 | #include <sys/malloc.h> |
57 | #include <sys/systm.h> | | 57 | #include <sys/systm.h> |
58 | #include <sys/device.h> | | 58 | #include <sys/device.h> |
59 | #include <sys/bitops.h> | | 59 | #include <sys/bitops.h> |
60 | #include <sys/evcnt.h> | | 60 | #include <sys/evcnt.h> |
61 | | | 61 | |
| @@ -2115,27 +2115,28 @@ out: | | | @@ -2115,27 +2115,28 @@ out: |
2115 | return error; | | 2115 | return error; |
2116 | } | | 2116 | } |
2117 | | | 2117 | |
2118 | int | | 2118 | int |
2119 | sdmmc_mem_write_block(struct sdmmc_function *sf, uint32_t blkno, u_char *data, | | 2119 | sdmmc_mem_write_block(struct sdmmc_function *sf, uint32_t blkno, u_char *data, |
2120 | size_t datalen) | | 2120 | size_t datalen) |
2121 | { | | 2121 | { |
2122 | struct sdmmc_softc *sc = sf->sc; | | 2122 | struct sdmmc_softc *sc = sf->sc; |
2123 | int error; | | 2123 | int error; |
2124 | | | 2124 | |
2125 | SDMMC_LOCK(sc); | | 2125 | SDMMC_LOCK(sc); |
2126 | mutex_enter(&sc->sc_mtx); | | 2126 | mutex_enter(&sc->sc_mtx); |
2127 | | | 2127 | |
2128 | if (sdmmc_chip_write_protect(sc->sc_sct, sc->sc_sch)) { | | 2128 | if (ISSET(sc->sc_flags, SMF_SD_MODE) && |
| | | 2129 | sdmmc_chip_write_protect(sc->sc_sct, sc->sc_sch)) { |
2129 | aprint_normal_dev(sc->sc_dev, "write-protected\n"); | | 2130 | aprint_normal_dev(sc->sc_dev, "write-protected\n"); |
2130 | error = EIO; | | 2131 | error = EIO; |
2131 | goto out; | | 2132 | goto out; |
2132 | } | | 2133 | } |
2133 | | | 2134 | |
2134 | if (ISSET(sc->sc_caps, SMC_CAPS_SINGLE_ONLY)) { | | 2135 | if (ISSET(sc->sc_caps, SMC_CAPS_SINGLE_ONLY)) { |
2135 | error = sdmmc_mem_single_write_block(sf, blkno, data, datalen); | | 2136 | error = sdmmc_mem_single_write_block(sf, blkno, data, datalen); |
2136 | goto out; | | 2137 | goto out; |
2137 | } | | 2138 | } |
2138 | | | 2139 | |
2139 | if (!ISSET(sc->sc_caps, SMC_CAPS_DMA)) { | | 2140 | if (!ISSET(sc->sc_caps, SMC_CAPS_DMA)) { |
2140 | error = sdmmc_mem_write_block_subr(sf, sc->sc_dmap, blkno, data, | | 2141 | error = sdmmc_mem_write_block_subr(sf, sc->sc_dmap, blkno, data, |
2141 | datalen); | | 2142 | datalen); |