Move the code that enumerates the pnpbios device nodes into a

separate function.
This commit is contained in:
thorpej 2001-09-27 17:13:39 +00:00
parent 69ed217599
commit 21056065db
1 changed files with 41 additions and 17 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: pnpbios.c,v 1.24 2001/09/10 21:19:15 chris Exp $ */
/* $NetBSD: pnpbios.c,v 1.25 2001/09/27 17:13:39 thorpej Exp $ */
/*
* Copyright (c) 2000 Jason R. Thorpe. All rights reserved.
@ -140,6 +140,7 @@ static int pnpbios_submatch __P((struct device *parent,
struct cfdata *match, void *aux));
extern int pnpbioscall __P((int));
static void pnpbios_enumerate(struct pnpbios_softc *sc);
static int pnpbios_update_dock_status __P((struct pnpbios_softc *sc));
/* scanning functions */
@ -287,16 +288,14 @@ pnpbios_attach(parent, self, aux)
{
struct pnpbios_softc *sc = (struct pnpbios_softc *)self;
struct pnpbios_attach_args *paa = aux;
struct pnpdevnode *dn;
caddr_t p;
unsigned int codepbase, datapbase, evaddrp;
caddr_t codeva, datava;
extern char pnpbiostramp[], epnpbiostramp[];
int res, num, i, size, idx;
int res, num, size;
#ifdef PNPBIOSEVENTS
int evtype;
#endif
u_int8_t *buf;
pnpbios_softc = sc;
sc->sc_ic = paa->paa_ic;
@ -362,7 +361,6 @@ pnpbios_attach(parent, self, aux)
}
printf(": nodes %d, max len %d\n", num, size);
buf = malloc(size, M_DEVBUF, M_NOWAIT);
#ifdef PNPBIOSEVENTS
EDPRINTF(("%s: event flag vaddr 0x%08x\n", sc->sc_dev.dv_xname,
@ -373,6 +371,44 @@ pnpbios_attach(parent, self, aux)
sc->sc_docked = -1;
(void) pnpbios_update_dock_status(sc);
/* Enumerate the device nodes. */
pnpbios_enumerate(sc);
#ifdef PNPBIOSEVENTS
/* if we have an event mechnism queue a thread to deal with them */
/* XXX need to update with irq if we do that */
if (evtype != PNP_IC_CONTROL_EVENT_NONE) {
if (evtype != PNP_IC_CONTROL_EVENT_POLL || sc->sc_evaddr) {
sc->sc_threadrun = 1;
config_pending_incr();
kthread_create(pnpbios_create_event_thread, sc);
}
}
#endif
}
static void
pnpbios_enumerate(sc)
struct pnpbios_softc *sc;
{
int res, num, i, size, idx;
struct pnpdevnode *dn;
u_int8_t *buf;
res = pnpbios_getnumnodes(&num, &size);
if (res) {
printf("%s: pnpbios_getnumnodes: error %d\n",
sc->sc_dev.dv_xname, res);
return;
}
buf = malloc(size, M_DEVBUF, M_NOWAIT);
if (buf == NULL) {
printf("%s: unable to allocate node buffer\n",
sc->sc_dev.dv_xname);
return;
}
/*
* Loop through the list of indices getting data and match/attaching
* each as appropriate.
@ -437,18 +473,6 @@ pnpbios_attach(parent, self, aux)
printf("%s: last index %d\n", sc->sc_dev.dv_xname, idx);
free(buf, M_DEVBUF);
#ifdef PNPBIOSEVENTS
/* if we have an event mechnism queue a thread to deal with them */
/* XXX need to update with irq if we do that */
if (evtype != PNP_IC_CONTROL_EVENT_NONE) {
if (evtype != PNP_IC_CONTROL_EVENT_POLL || sc->sc_evaddr) {
sc->sc_threadrun = 1;
config_pending_incr();
kthread_create(pnpbios_create_event_thread, sc);
}
}
#endif
}
static int