On Fri, Jul 08, 2011 at 04:34:36PM -0700, Matthew Dempsky wrote:
> autoconf doesn't allow you to attach multiple child devices to the
> same device with different attach arg types. sdmmc(4) tries to attach
> both scsibus(4) and SDIO devices (currently just the disabled sbt(4)
> bluetooth adapter). The way it does this is by creating a
> sdmmc_attach_args structure that was compatible with
> scsibus_attach_args, and then new SDIO-specific fields at the bottom.
>
> However, I've added new fields to scsibus_attach_args, which
> sdmmc_attach_args doesn't know about. The stupid kludge for now is to
> just include a complete "struct scsibus_attach_args" in
> sdmmc_attach_args instead of replicating its fields.
>
> There are better fixes for this, but the sdmmc stuff is too tangled,
> and I want to finish with my SCSI diffs before messing with this more.
>
> ok?
sure. ok krw@
.... Ken
>
> Index: sdmmcvar.h
> ===================================================================
> RCS file: /home/mdempsky/anoncvs/cvs/src/sys/dev/sdmmc/sdmmcvar.h,v
> retrieving revision 1.18
> diff -u -p -r1.18 sdmmcvar.h
> --- sdmmcvar.h 24 Aug 2010 14:52:23 -0000 1.18
> +++ sdmmcvar.h 8 Jul 2011 23:27:33 -0000
> @@ -182,7 +182,7 @@ struct sdmmc_softc {
> * Attach devices at the sdmmc bus.
> */
> struct sdmmc_attach_args {
> - struct scsi_link *scsi_link; /* XXX */
> + struct scsibus_attach_args saa; /* XXX */
> struct sdmmc_function *sf;
> };
>
> Index: sdmmc_scsi.c
> ===================================================================
> RCS file: /home/mdempsky/anoncvs/cvs/src/sys/dev/sdmmc/sdmmc_scsi.c,v
> retrieving revision 1.27
> diff -u -p -r1.27 sdmmc_scsi.c
> --- sdmmc_scsi.c 16 Jun 2011 01:09:16 -0000 1.27
> +++ sdmmc_scsi.c 8 Jul 2011 23:28:14 -0000
> @@ -139,9 +139,9 @@ sdmmc_scsi_attach(struct sdmmc_softc *sc
> scbus->sc_link.pool = &scbus->sc_iopool;
>
> bzero(&saa, sizeof(saa));
> - saa.scsi_link = &scbus->sc_link;
> + saa.saa.saa_sc_link = &scbus->sc_link;
>
> - scbus->sc_child = config_found(&sc->sc_dev, &saa, scsiprint);
> + scbus->sc_child = config_found(&sc->sc_dev, &saa.saa, scsiprint);
> if (scbus->sc_child == NULL) {
> printf("%s: can't attach scsibus\n", sc->sc_dev.dv_xname);
> goto free_ccbs;