Nuke another cf_unit abuse.

This commit is contained in:
leo 2001-07-10 20:21:30 +00:00
parent 9c93fee83f
commit 522fff268d
1 changed files with 17 additions and 12 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: ite_cc.c,v 1.15 2000/02/11 21:42:52 leo Exp $ */
/* $NetBSD: ite_cc.c,v 1.16 2001/07/10 20:21:30 leo Exp $ */
/*
* Copyright (c) 1996 Leo Weppelman
@ -131,6 +131,7 @@ struct device *pdp;
struct cfdata *cfp;
void *auxp;
{
static int did_consinit = 0;
static int must_probe = 1;
grf_auxp_t *grf_auxp = auxp;
@ -156,22 +157,23 @@ void *auxp;
if (atari_realconfig == 0) {
/*
* Early console init. Only match unit 0.
* Early console init. Only match first unit.
*/
if (cfp->cf_unit != 0)
if (did_consinit)
return(0);
if (viewopen(0, 0, 0, NULL))
if (viewopen(cfp->cf_unit, 0, 0, NULL))
return(0);
cfdata_grf = cfp;
did_consinit = 1;
return (1);
}
/*
* Normal config. When we are called directly from the grfbus,
* we only match unit 0. The attach function will call us for
* we only match the first unit. The attach function will call us for
* the other configured units.
*/
if (grf_auxp->from_bus_match && (cfp->cf_unit != 0))
if (grf_auxp->from_bus_match && (did_consinit > 1))
return (0);
if (!grf_auxp->from_bus_match && (grf_auxp->unit != cfp->cf_unit))
@ -180,10 +182,11 @@ void *auxp;
/*
* Final constraint: each grf needs a view....
*/
if((cfdata_grf == NULL) || (cfp->cf_unit != 0)) {
if((cfdata_grf == NULL) || (did_consinit > 1)) {
if(viewopen(cfp->cf_unit, 0, 0, NULL))
return(0);
}
did_consinit = 2;
return(1);
}
@ -197,6 +200,7 @@ struct device *pdp, *dp;
void *auxp;
{
static struct grf_softc congrf;
static int first_attach = 1;
grf_auxp_t *grf_bus_auxp = auxp;
grf_auxp_t grf_auxp;
struct grf_softc *gp;
@ -213,9 +217,9 @@ void *auxp;
* Handle exeption case: early console init
*/
if(dp == NULL) {
congrf.g_unit = 0;
congrf.g_unit = cfdata_grf->cf_unit;
congrf.g_grfdev = makedev(maj, congrf.g_unit);
congrf.g_itedev = (dev_t)-1;
congrf.g_grfdev = makedev(maj, 0);
congrf.g_flags = GF_ALIVE;
congrf.g_mode = grf_mode;
congrf.g_conpri = grfcc_cnprobe();
@ -232,7 +236,7 @@ void *auxp;
gp->g_unit = gp->g_device.dv_unit;
grfsp[gp->g_unit] = gp;
if((cfdata_grf != NULL) && (gp->g_unit == 0)) {
if((cfdata_grf != NULL) && (gp->g_unit == congrf.g_unit)) {
/*
* We inited earlier just copy the info, take care
* not to copy the device struct though.
@ -263,9 +267,10 @@ void *auxp;
config_found(dp, gp, grfccprint);
/*
* If attaching unit 0, go ahead and 'find' the rest of us
* If attaching the first unit, go ahead and 'find' the rest of us
*/
if (gp->g_unit == 0) {
if (first_attach) {
first_attach = 0;
grf_auxp.from_bus_match = 0;
for (grf_auxp.unit=1; grf_auxp.unit < NGRFCC; grf_auxp.unit++) {
config_found(pdp, (void*)&grf_auxp, grf_bus_auxp->busprint);