diff options
author | imp <imp@FreeBSD.org> | 2000-09-16 06:52:20 +0000 |
---|---|---|
committer | imp <imp@FreeBSD.org> | 2000-09-16 06:52:20 +0000 |
commit | 3599553fbcfbefde77cf622d92b72f19920e0256 (patch) | |
tree | 5bb347126ae26f0d847b05f98cfdfc753f3b499e /sys/dev/pccard | |
parent | b24c98c76631a06cd67758941dcd0d9002b176f4 (diff) | |
download | FreeBSD-src-3599553fbcfbefde77cf622d92b72f19920e0256.zip FreeBSD-src-3599553fbcfbefde77cf622d92b72f19920e0256.tar.gz |
Change the interface to pccard_function_init. The interface is such
that it looks for an acceptible one. Once it finds it, it should set
the resources for the device. I say "should" because I've not written
that. Also set an ivar for the child of pccard. Minor fix to the
attach message printed, we lose the slot number, which I'll have to
restore later. Adjust the pccard ivar so that we can save the
function that corresponds to this driver so we can enable and disable
it more easily. Save a pointer to the function so we know what we're
dealing with.
There should be some way for the driver to specify which cfg it wants
to activate. For now the pccard_function_init function just picks
one, but we'll have to revisit this going forward. I'm not doing it
now because I'd need some way to activate the card many times and I'm
not sure that is desirable or even safe with some cards.
Diffstat (limited to 'sys/dev/pccard')
-rw-r--r-- | sys/dev/pccard/pccard.c | 20 | ||||
-rw-r--r-- | sys/dev/pccard/pccardvar.h | 5 |
2 files changed, 17 insertions, 8 deletions
diff --git a/sys/dev/pccard/pccard.c b/sys/dev/pccard/pccard.c index 4939412..375b74c 100644 --- a/sys/dev/pccard/pccard.c +++ b/sys/dev/pccard/pccard.c @@ -95,6 +95,7 @@ pccard_attach_card(device_t dev) { struct pccard_softc *sc = PCCARD_SOFTC(dev); struct pccard_function *pf; + struct pccard_ivar *ivar; device_t child; int attached; @@ -147,7 +148,6 @@ pccard_attach_card(device_t dev) STAILQ_FOREACH(pf, &sc->card.pf_head, pf_list) { if (STAILQ_EMPTY(&pf->cfe_head)) continue; - /* XXX */ /* * In NetBSD, the drivers are responsible for activating * each function of a card. I think that in FreeBSD we @@ -160,8 +160,11 @@ pccard_attach_card(device_t dev) * */ device_printf(dev, "Starting to attach....\n"); + /* XXX Need ivars XXXimpXXX */ + ivar = malloc(sizeof(struct pccard_ivar), M_DEVBUF, M_WAITOK); child = device_add_child(dev, NULL, -1); - pccard_function_init(pf, STAILQ_FIRST(&pf->cfe_head)); + device_set_ivars(child, ivar); + pccard_function_init(pf); pccard_function_enable(pf); device_printf(dev, "pf %p pf->sc %p\n", pf, pf->sc); if (device_probe_and_attach(child) == 0) { @@ -228,14 +231,21 @@ pccard_card_gettype(device_t dev, int *type) * disabled. */ void -pccard_function_init(struct pccard_function *pf, - struct pccard_config_entry *cfe) +pccard_function_init(struct pccard_function *pf) { + struct pccard_config_entry *cfe; + if (pf->pf_flags & PFF_ENABLED) panic("pccard_function_init: function is enabled"); /* Remember which configuration entry we are using. */ + /* XXX + * need to look for one we can allocate the resources + * and then set them so the alloc_resources work later. + */ + cfe = STAILQ_FIRST(&pf->cfe_head); pf->cfe = cfe; + } /* Enable a PCCARD function */ @@ -573,7 +583,7 @@ pccard_print_child(device_t dev, device_t child) "%ld"); pccard_print_resources(rl, "drq", SYS_RES_DRQ, PCCARD_NDRQ, "%ld"); - retval += printf(" slot %d", devi->slotnum); + retval += printf(" slot ?"); /* XXX imp */ } retval += bus_print_child_footer(dev, child); diff --git a/sys/dev/pccard/pccardvar.h b/sys/dev/pccard/pccardvar.h index a730459..19a25a3 100644 --- a/sys/dev/pccard/pccardvar.h +++ b/sys/dev/pccard/pccardvar.h @@ -168,7 +168,7 @@ struct pccard_card { /* More later? */ struct pccard_ivar { struct resource_list resources; - int slotnum; + struct pccard_function *fcn; }; struct pccard_softc { @@ -244,8 +244,7 @@ void pccard_ccr_write(struct pccard_function *, int, int); /* The following is the vestages of the NetBSD driver api */ -void pccard_function_init(struct pccard_function *, - struct pccard_config_entry *); +void pccard_function_init(struct pccard_function *); int pccard_function_enable(struct pccard_function *); void pccard_function_disable(struct pccard_function *); |