From owner-newconfig-jp@jp.freebsd.org  Tue Jan  5 20:40:13 1999
Received: (from daemon@localhost)
	by jaz.jp.freebsd.org (8.9.1+3.1W/8.7.3) id UAA07217;
	Tue, 5 Jan 1999 20:40:13 +0900 (JST)
	(envelope-from owner-newconfig-jp@jp.FreeBSD.org)
Received: from sraigw.sra.co.jp (sraigw.sra.co.jp [202.32.10.2])
	by jaz.jp.freebsd.org (8.9.1+3.1W/8.7.3) with ESMTP id UAA07212
	for <newconfig-jp@jp.freebsd.org>; Tue, 5 Jan 1999 20:40:11 +0900 (JST)
	(envelope-from furuta@sra.co.jp)
Received: from sramhc.sra.co.jp (sramhc [133.137.20.31])
	by sraigw.sra.co.jp (8.8.7/3.6Wbeta7-sraigw) with ESMTP id UAA13130
	for <newconfig-jp@jp.freebsd.org>; Tue, 5 Jan 1999 20:40:10 +0900 (JST)
Received: from localhost (furuta@localhost [127.0.0.1])
	by sramhc.sra.co.jp (8.8.7/3.6Wbeta7-srambox) with ESMTP id UAA10082
	for <newconfig-jp@jp.freebsd.org>; Tue, 5 Jan 1999 20:40:10 +0900 (JST)
To: newconfig-jp@jp.freebsd.org
X-Mailer: Mew version 1.92.4 on Emacs 19.28 / Mule 2.2 (WAKAMURASAKI) PL02
Mime-Version: 1.0
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
Message-Id: <19990105204009F.furuta@sra.co.jp>
Date: Tue, 05 Jan 1999 20:40:09 +0900
From: Atsushi Furuta <furuta@sra.co.jp>
X-Dispatcher: imput version 971024
Lines: 168
Reply-To: newconfig-jp@jp.freebsd.org
Precedence: list
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+981115
X-Sequence: newconfig-jp 813
Subject: [newconfig-jp 813] dynamic configuration design
Errors-To: owner-newconfig-jp@jp.freebsd.org
Sender: owner-newconfig-jp@jp.freebsd.org
X-Originator: furuta@sra.co.jp

  $B8EED$G$9!#(B

  KLD $B$d(B UserConfig $B$r<BAu$9$k$N$K!"F0E*$K(B cfdata $B%(%s%H%j$rDI2C$7$?$j(B
$B:o=|$7$?$j$9$k$N$,I,MW$G$9!#$=$N<BAu$N0Y$KI,MW$J%a%+%K%:%`$r9M$($F$$$k(B
$B$N$G$9$,!"$A$g$C$H<Q5M$^$C$F$-$?$N$G!"%3%a%s%H(B/$B%"%$%G%#%"Jg=8$J$N$G$9!#(B
KLD $B$r<BAu$9$k$K$OH4$1$,$@$$$V$"$j$=$&$G$9$,!D(B
-- 
$B8EED(B $BFX(B
furuta@sra.co.jp

================
###
parent vector $B9=B$$NJQ99(B:

	$B8=>u$G$O!"3F(B cfdata $B9=B$BN$O?F(B device $B$NL>A0$d?F(B device 
	$B$=$N$b$N$r?F>pJs$H$7$F;}$D$N$G$O$J$/!"?F(B device $B$N$b$N$H(B
	$B$J$j$&$k(B cfdata $B9=B$BN$X$N%]%$%s%?$NG[Ns$r;2>H$9$kJ}K!$G!"(B
	$B?F%G%P%$%9$N>pJs$r;}$C$F$$$k!#(B

	$B$3$l$O(B config_search() $B$G<+J,$N?F$rFCDj$9$k$N$K$OET9g$,(B
	$BNI$$$,!"?7$7$$(B cfdata $B%(%s%H%j$rDI2C$7$F!"$=$l$,?7$7$/$"$k(B
	device $B$N?F$H$J$C$?$j$9$k>l9g$K$OET9g$,0-$$!#(B
	($BNc$($P(B scbus $B$N?F$G$"$k(B SCSI controller $B$N(B cfdata $B$rF0E*$K(B
	$BDI2C$7$?>l9g(B)

	$B$=$3$G!"2DG=@-$N$"$k?F$r(B cfdata $B9=B$BN$H$7$F;}$D$N$G$O$J$/!"(B
	$B?F$NL>A0(B + unit $BHV9f(B($B$"$k$$$O(B wildcard) $B$r0l<!>pJs$H$7$F;}$D(B
	$B$h$&$K(B config.new, sys/device.h kern/subr_autoconf.c $B$r(B
	$BJQ99$9$k!#(B

	XXX --- root vector $B$N9=B$$bF1$807$$$,$$$k$+$b!D(B

###
int
config_new_unit(struct cfdriver *drv);

$B@bL@(B:
	$B<!$K$=$N%G%P%$%9$N(B wildcard $B$K3d$jEv$F$k$Y$-:G>.$N(B
	unit $BHV9f$rJV$9!#(Bwildcard $B$G$J$$(B cfdata->cf_unit $B$H(B
	$B$=$N;~E@$N(B attach $B:Q$_(B device $B$N(B unit $BHV9f$N:GBgCM(B + 1$B!#(B

	struct cfdata $B$N(B cf_unit $B$N07$$$NJQ99(B:
	unit $BHV9f$N0UL#O@$rJQ99$7!"(B
	WILDCARD $B;~$O(B cf_unit $B$O0UL#$r;}$?$J$$$b$N$H$9$k!#(B
	$BI,MW$J$i(B config_new_unit $B$r8F=P$7$FF0E*$K7W;;$9$k!#(B

	XXX --- unit allocation code $B$N<BAu!"(B
	unit identifier $B$r(B cfdriver $B$KF~$l$k!#(B

###
struct cfdriver *
config_make_basedev(char *name, enum devclass cls);

$B@bL@(B:
	$BL>A0(B name $B$G(B cfdriver $B9=B$BN$r:n@.$9$k!#(B
	cfdata TAILQ (devhead) $B$r(B scan $B$7$FF1$8L>A0$N(B cfdriver
	$B9=B$BN$,$"$l$P!"$=$l$rJV$9!#(B(devclass $B$,0lCW$7$J$1$l$P(B
	NULL $B$rJV$9(B)

###
struct cfattach *
config_make_attach(size_t devsize,
	cfmatch_t match,
	void (*attach)(struct device *, struct device * void*),
	int (*detach)(struct device *, int),
	int (*activate)(struct device * enum devact));

$B@bL@(B:
	cfattach $B9=B$BN$r:n@.$7$FJV$9!#(B
	ca_level = 1, ca_aux = NULL;

###
struct cfparams {
	int flag;
	struct cfdata **parents;
	int *locators;
	char **locnames;
};

$B@bL@(B:
	config_add_cfdata() $B$N0z?t$K;H$&9=B$BN!#(B
	parents, locators, locnames $B$O(B malloced $B$G$J$1$l$P$J$i$J$$!#(B

###
struct cfdata *
config_add_cfdata(struct cfdata *before,
	int aflag,
	struct cfattach *attach,
	struct cfdriver *basedev,
	short unit, /* if -1 given, to be wildcard */
	struct cfparams *params);

$B@bL@(B:
	cfdata $B9=B$BN$r:n@.$7$F!"(BTAILQ (devhead) $B$N(B before $B$ND>8e$K(B
	$BDI2C!#(B
	aflag $B$K$O(B CFAF_BOOTTIME $B$+(B CFAF_RUNTIME $B$r;XDj$9$k!#(B
	CFAF_REMOVABLE $B$,<+F0@_Dj$5$l$k!#(B

	unit $B$K(B -1 $B$,;XDj$5$l$?$i!"(Bwildcard $B07$$!#(Bcf_fstate $B$K(B
	FSTATE_STAR $B$rBeF~$9$k!#(B
	unit $B$K@5$NCM$,;XDj$5$l$?$i!"$=$N(B unit $B$N(B device $B$,(B
	$B$9$G$K(B attach $B:Q$_$I$&$+$r%A%'%C%/$7!"$"$l$P(B NULL $B$rJV$9!#(B
	(XXX $B$3$N;EMM$GNI$$$+(B?)
	OK $B$J$i$=$NCM$r(B cf_unit $B$K@_Dj$7!"(Bcf_fstate $B$K(B
	FSTATE_NOTFOUND $B$r@_Dj$9$k!#(B

###

int
config_remove_cfdata(struct cfdata *cfdata);

$B@bL@(B:
	$B;XDj$7$?(B cfdata $B9=B$BN$r:o=|$9$k!#(B
	$B:o=|$K@.8y$9$l$P!"(B0 $B0J>e$NCM$rJV$9!#(B
	cf_aflag $B$K(B CFAF_REMOVABLE $B$,$J$1$l$P2?$b$;$:Ii$NCM$rJV$9!#(B
	cf_loc, cf_parents, cf_locnames $B$NNN0h$O2rJ|$9$k!#(B
	$BB>$K(B cf_attach $B$r;2>H$7$F$$$k(B cfdata $B$,L5$1$l$P!"(B
	cf_attach $B$r2rJ|$9$k!#(B
	$BB>$K(B cf_driver $B$r;2>H$7$F$$$k(B cfdata $B$,L5$1$l$P!"(B
	cf_driver $B$r2rJ|$9$k!#(B

	XXX --- $B?F$J$7(B cf_driver $B$rKI$0$?$a!"(Bdv_cfdata $B$K$h$C$F(B
	$B$I$N(B device $B$,$I$N(B cfdata $B$K$h$k$b$N$+$r4IM}$9$k!#(B
	$B$=$N(B cfdata $B$K$h$k(B instance $B$,B8:_$9$k>l9g!"(B
		1. $B:o=|$K<:GT$9$k!#(B
		2. instance $B$r6/@)(B config_detach() $B$9$k!#(B
	$B$N$I$A$i$+!#(B(1. $B$K$7$?$$(B)

	XXX --- cf_driver $B$O@8$-$F$$$k$1$I!"$=$l$r;X$9(B cfdata $B$O(B
	$BA4$F2rJ|$5$l$F$$$k$3$H$,$"$j$($k$+$b!#(B(unit identifier)
	---> $B$=$N;~E@$G@8$-$F$$$k(B cfdriver $B$N%j%9%H$r:n$k$Y$-$+(B?

###

$B8!:w4X?t(B:
	$B$"$kFCDj$N>r7o(B($B%G%P%$%9L>(B + UNIT$B!"?F%G%P%$%9L>(B + UNIT) $B$r(B
	$B;XDj$7$F!"$=$N>r7o$K0lCW$9$k(B cfdata $B$r8!:w$9$k(B?

###

UserConfig, clone $B9=J8(B:

	* clone <$B%G%P%$%9L>(B><unit $BHV9f(B> [<$B?F%G%P%$%9L>(B><unit $BHV9f(B>|?]
	ex.
		> clone ed1 pci?
		> clone sa0

	<$B%G%P%$%9L>(B> + "*" $B$G(B configure $B$5$l$?(B cfdata $B$,$"$k;~!"(B
	$B$=$N(B unit $BHV9f$G(B cfdata $B$r%3%T!<$7$FDI2C$9$k!#(B

	$BDI2C$7$?(B cfdata $B$O!"85$+$i$"$k(B cfdata $B$HF1MM$K(B locator $B$r(B
	$B;XDj$G$-$k!#(B

	* unclone <$B%G%P%$%9L>(B><unit $BHV9f(B> [<$B?F%G%P%$%9L>(B><unit $BHV9f(B>|?]

	$B$=$N(B clone cfdata $B$r:o=|$9$k!#(B

###

driver specific parameter:

	newconfig $B$N85!9$NOHAH$G$O!"?F%G%P%$%9$K$h$C$F$=$N%I%i%$%P$K(B
	$BM?$($k$Y$-(B locator $B$,FCDj$5$l$k$,!"(B(new-bus $B$KBP93$9$k$?$a$K$b(B)
	$B$h$j=@Fp$J(B parameter $B;XDj$NOHAH$,I,MW$G$"$k!#(B
	$BFCDj$N?F$@$1$G$J$/!"FCDj$N(B frontend $B$dFCDj$N(B backend $BKh$K(B
	parameter $B$r;XDj$G$-$k$h$&$K$7$?$$!#(B

================
