From: patrick Date: Thu, 9 Aug 2018 13:52:36 +0000 (+0000) Subject: Allow passing per-function cookies through the SD/MMC bus to SDIO X-Git-Url: http://artulab.com/gitweb/?a=commitdiff_plain;h=68a1c7f6604e681b21016f4e4f86051794ba0859;p=openbsd Allow passing per-function cookies through the SD/MMC bus to SDIO devices. This allows SDIO device drivers to read information from the ACPI or FDT tables. ok kettenis@ --- diff --git a/sys/dev/sdmmc/sdmmc.c b/sys/dev/sdmmc/sdmmc.c index 7a7fc01389e..87328f0bc47 100644 --- a/sys/dev/sdmmc/sdmmc.c +++ b/sys/dev/sdmmc/sdmmc.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sdmmc.c,v 1.50 2018/03/20 04:18:40 jmatthew Exp $ */ +/* $OpenBSD: sdmmc.c,v 1.51 2018/08/09 13:52:36 patrick Exp $ */ /* * Copyright (c) 2006 Uwe Stuehler @@ -119,6 +119,7 @@ sdmmc_attach(struct device *parent, struct device *self, void *aux) sc->sc_flags = saa->flags; sc->sc_caps = saa->caps; sc->sc_max_xfer = saa->max_xfer; + memcpy(&sc->sc_cookies, &saa->cookies, sizeof(sc->sc_cookies)); if (ISSET(sc->sc_caps, SMC_CAPS_DMA) && sc->sc_dmap == NULL) { error = bus_dmamap_create(sc->sc_dmat, MAXPHYS, SDMMC_MAXNSEGS, diff --git a/sys/dev/sdmmc/sdmmc_io.c b/sys/dev/sdmmc/sdmmc_io.c index 88d011677cb..157f40e6d68 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.39 2018/06/17 17:10:17 patrick Exp $ */ +/* $OpenBSD: sdmmc_io.c,v 1.40 2018/08/09 13:52:36 patrick Exp $ */ /* * Copyright (c) 2006 Uwe Stuehler @@ -160,6 +160,7 @@ sdmmc_io_scan(struct sdmmc_softc *sc) sf = sdmmc_function_alloc(sc); sf->number = i; sf->rca = sf0->rca; + sf->cookie = sc->sc_cookies[i]; SIMPLEQ_INSERT_TAIL(&sc->sf_head, sf, sf_list); } diff --git a/sys/dev/sdmmc/sdmmcchip.h b/sys/dev/sdmmc/sdmmcchip.h index a370bf10638..98b6d292399 100644 --- a/sys/dev/sdmmc/sdmmcchip.h +++ b/sys/dev/sdmmc/sdmmcchip.h @@ -1,4 +1,4 @@ -/* $OpenBSD: sdmmcchip.h,v 1.11 2018/03/20 04:18:40 jmatthew Exp $ */ +/* $OpenBSD: sdmmcchip.h,v 1.12 2018/08/09 13:52:36 patrick Exp $ */ /* * Copyright (c) 2006 Uwe Stuehler @@ -94,6 +94,8 @@ struct sdmmc_chip_functions { #define SDMMC_TIMING_HIGHSPEED 1 #define SDMMC_TIMING_MMC_DDR52 2 +#define SDMMC_MAX_FUNCTIONS 8 + struct sdmmcbus_attach_args { const char *saa_busname; sdmmc_chipset_tag_t sct; @@ -103,6 +105,7 @@ struct sdmmcbus_attach_args { int flags; int caps; long max_xfer; + void *cookies[SDMMC_MAX_FUNCTIONS]; }; void sdmmc_needs_discover(struct device *); diff --git a/sys/dev/sdmmc/sdmmcvar.h b/sys/dev/sdmmc/sdmmcvar.h index af8a2f85506..cd6a3637141 100644 --- a/sys/dev/sdmmc/sdmmcvar.h +++ b/sys/dev/sdmmc/sdmmcvar.h @@ -1,4 +1,4 @@ -/* $OpenBSD: sdmmcvar.h,v 1.29 2018/03/20 04:18:40 jmatthew Exp $ */ +/* $OpenBSD: sdmmcvar.h,v 1.30 2018/08/09 13:52:36 patrick Exp $ */ /* * Copyright (c) 2006 Uwe Stuehler @@ -146,6 +146,7 @@ struct sdmmc_function { int flags; #define SFF_ERROR 0x0001 /* function is poo; ignore it */ #define SFF_SDHC 0x0002 /* SD High Capacity card */ + void *cookie; /* pass extra info from bus to dev */ SIMPLEQ_ENTRY(sdmmc_function) sf_list; /* SD card I/O function members */ int number; /* I/O function number or -1 */ @@ -213,6 +214,7 @@ struct sdmmc_softc { void *sc_scsibus; /* SCSI bus emulation softc */ TAILQ_HEAD(, sdmmc_intr_handler) sc_intrq; /* interrupt handlers */ long sc_max_xfer; /* maximum transfer size */ + void *sc_cookies[SDMMC_MAX_FUNCTIONS]; /* pass extra info from bus to dev */ }; /*