aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMinsoo Choo <minsoochoo0122@proton.me>2026-01-06 16:57:25 +0000
committerWarner Losh <imp@FreeBSD.org>2026-01-09 20:17:12 +0000
commit2727bdebb366c3741509eb3553f0fee2453729d3 (patch)
tree874c9d9993a0814484c5fa9324e9e3fb516de2bb
parent930a1341d62ccc4be969c2261e3abaf0c0573a9f (diff)
-rw-r--r--sys/dev/sdio/sdio_subr.c30
-rw-r--r--sys/dev/sdio/sdio_subr.h2
2 files changed, 32 insertions, 0 deletions
diff --git a/sys/dev/sdio/sdio_subr.c b/sys/dev/sdio/sdio_subr.c
index f234eb8bdc84..64b1145e2057 100644
--- a/sys/dev/sdio/sdio_subr.c
+++ b/sys/dev/sdio/sdio_subr.c
@@ -166,6 +166,36 @@ sdio_write_1(struct sdio_func *f, uint32_t addr, uint8_t val, int *err)
*err = error;
}
+uint16_t
+sdio_read_2(struct sdio_func *f, uint32_t addr, int *err)
+{
+ int error;
+ uint16_t v;
+
+ error = SDIO_READ_EXTENDED(device_get_parent(f->dev), f->fn, addr,
+ sizeof(v), (uint8_t *)&v, true);
+ if (error) {
+ if (err != NULL)
+ *err = error;
+ return (0xffff);
+ } else {
+ if (err != NULL)
+ *err = 0;
+ return (le16toh(v));
+ }
+}
+
+void
+sdio_write_2(struct sdio_func *f, uint32_t addr, uint16_t val, int *err)
+{
+ int error;
+
+ error = SDIO_WRITE_EXTENDED(device_get_parent(f->dev), f->fn, addr,
+ sizeof(val), (uint8_t *)&val, true);
+ if (err != NULL)
+ *err = error;
+}
+
uint32_t
sdio_read_4(struct sdio_func *f, uint32_t addr, int *err)
{
diff --git a/sys/dev/sdio/sdio_subr.h b/sys/dev/sdio/sdio_subr.h
index 2d2ae9b01230..96df2e7d658a 100644
--- a/sys/dev/sdio/sdio_subr.h
+++ b/sys/dev/sdio/sdio_subr.h
@@ -95,6 +95,8 @@ int sdio_set_block_size(struct sdio_func *, uint16_t);
uint8_t sdio_read_1(struct sdio_func *, uint32_t, int *);
void sdio_write_1(struct sdio_func *, uint32_t, uint8_t, int *);
+uint16_t sdio_read_2(struct sdio_func *, uint32_t, int *);
+void sdio_write_2(struct sdio_func *, uint32_t, uint16_t, int *);
uint32_t sdio_read_4(struct sdio_func *, uint32_t, int *);
void sdio_write_4(struct sdio_func *, uint32_t, uint32_t, int *);