summaryrefslogtreecommitdiffstats
path: root/sys/dev/sdmmc/sdmmc_mem.c
diff options
context:
space:
mode:
authoruwe <uwe@openbsd.org>2007-03-18 22:07:16 +0000
committeruwe <uwe@openbsd.org>2007-03-18 22:07:16 +0000
commit1b5fa04a2d459e68de79684cfb85d78b29d28fba (patch)
tree9ebccb575086c41d8941298f850be6a24412ad8a /sys/dev/sdmmc/sdmmc_mem.c
parentEnable pxammc and sdmmc in RAMDISK, too. (diff)
downloadwireguard-openbsd-1b5fa04a2d459e68de79684cfb85d78b29d28fba.tar.xz
wireguard-openbsd-1b5fa04a2d459e68de79684cfb85d78b29d28fba.zip
DHC automatically sends a CMD12 after multiple-block transfers, but other
controllers don't. Put in a temporary hack for pxammc on Zaurus.
Diffstat (limited to 'sys/dev/sdmmc/sdmmc_mem.c')
-rw-r--r--sys/dev/sdmmc/sdmmc_mem.c27
1 files changed, 26 insertions, 1 deletions
diff --git a/sys/dev/sdmmc/sdmmc_mem.c b/sys/dev/sdmmc/sdmmc_mem.c
index 3ec17a1a5c3..a6354363de6 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.6 2006/11/29 14:16:43 uwe Exp $ */
+/* $OpenBSD: sdmmc_mem.c,v 1.7 2007/03/18 22:07:16 uwe Exp $ */
/*
* Copyright (c) 2006 Uwe Stuehler <uwe@openbsd.org>
@@ -410,6 +410,19 @@ sdmmc_mem_read_block(struct sdmmc_function *sf, int blkno, u_char *data,
if (error != 0)
goto err;
+ /* XXX sdhc(4) does not need this */
+#ifdef __zaurus__
+ if (cmd.c_opcode == MMC_READ_BLOCK_MULTIPLE) {
+ bzero(&cmd, sizeof cmd);
+ cmd.c_opcode = MMC_STOP_TRANSMISSION;
+ cmd.c_arg = MMC_ARG_RCA(sf->rca);
+ cmd.c_flags = SCF_CMD_AC | SCF_RSP_R1B;
+ error = sdmmc_mmc_command(sc, &cmd);
+ if (error != 0)
+ goto err;
+ }
+#endif
+
do {
bzero(&cmd, sizeof cmd);
cmd.c_opcode = MMC_SEND_STATUS;
@@ -452,6 +465,18 @@ sdmmc_mem_write_block(struct sdmmc_function *sf, int blkno, u_char *data,
if (error != 0)
goto err;
+ /* XXX sdhc(4) does not need this */
+#ifdef __zaurus__
+ if (cmd.c_opcode == MMC_WRITE_BLOCK_MULTIPLE) {
+ bzero(&cmd, sizeof cmd);
+ cmd.c_opcode = MMC_STOP_TRANSMISSION;
+ cmd.c_flags = SCF_CMD_AC | SCF_RSP_R1B;
+ error = sdmmc_mmc_command(sc, &cmd);
+ if (error != 0)
+ goto err;
+ }
+#endif
+
do {
bzero(&cmd, sizeof cmd);
cmd.c_opcode = MMC_SEND_STATUS;