|
|
1.1 root 1: lono driver config internals
2:
3: * IODeviceDescription has new ivar, IOConfigTable *configTable.
4:
5: * In kernel, IOConfigTable's _private ivar merely points to a char array
6: which consists of the contents of a device instance file.
7:
8: * kern_dev.dconf, a dev_conf_t, will become a pointer to IODeviceDescription.
9: (Note that nrw should probably do this too). For now, kern_dev will
10: have both.
11:
12: * Kernel IOConfigTable will use the routines in config_table.c to parse
13: the config table text.
14:
15: * There's a static copy of the *current system config table" in
16: KERNBOOTSTRUCT. That's what is returned in _IOGetSystemConfig().
17:
18: * boot sequence
19: {
20: booter writes KERNBOOTSTRUCT to ??somewhere??
21: kernel comes up, eventually calls:
22: autoconf() {
23: registerIndirClasses(); // registers SCSIDisk, etc.
24: probeNativeDevices(); // see below
25: probeHardware(); // nop on i386
26: probeDirectDevices(); // nop on i386
27: probePseudoDevices(); // starts up EventDriver, etc.
28: }
29:
30: /*
31: * At this time, kernel can access boot device (at least).
32: * rc starts running; driverLoader starts up and does the rest of this.
33: */
34: for each device in System config's "Boot Drivers" list {
35: for each instance > 0 {
36: /*
37: * Booter only loads in instance 0.
38: */
39: IOLoadDevice();
40: }
41: }
42:
43: for each driver in System config's "Active Drivers" list {
44: if there's a .o {
45: kern_load it;
46: }
47: for each instance {
48: IOLoadDevice();
49: }
50: }
51: }
52:
53: /*
54: * This is the kernel's routine which configures and probes the boot
55: * device and possibly additional drivers which either the booter passes
56: * in config table info for, or which have statically declared config
57: * tables.
58: */
59: probeNativeDevices() {
60: for each config table passed in from booter {
61: create an IODeviceDescription;
62: probe the associated driver;
63: }
64: for each statically configured device {
65: /*
66: * This is temporary, for internal development only
67: */
68: create an IODeviceDescription;
69: probe the associated driver;
70: }
71: }
72:
73: .......................
74:
75: call graph in autoconfg_i386
76:
77: IOProbeDriver
78: configureThread
79: configureDriver
80: configTableToClassName (config_table.c)
81: configureDriverClass
82:
83: probeNativeDevices
84: configureDriver
85: configDataToClassName() (config_table.c)
86: configureDriverClass
87:
88: probePseudoDevices
89: probeClass
90: configureDriverClass
91:
92: configureDriverClass
93: configDataToDev() (config_table.c)
94: [IOEISADeviceDescription _initFromKernDev:]
95: [devDesc setConfigTable:]
96: [devDesc setDevicePort:];
97: [devDesc setDeviceMaster:];
98: [IODevice addLoadedClass];
99:
100: .....................
101: functions to keep in autoconf_i386
102:
103: /* called by MI probePseudoDevices() */
104: BOOL probeClass(port_name_t deviceMasterUport,
105: IODeviceNumber devNum,
106: const char *className,
107: IODeviceDescription **deviceDescP);
108:
109: /*
110: * Called from MD probeNativeDevices() and from configureThread(), the
111: * IOTask version of IOProbeDriver().
112: */
113: static BOOL configureDriver(const char *configData, port_t deviceMaster);
114:
115: /*
116: * Given a class name and an IOConfigTable,
117: * create a kern_dev and an IODeviceDescription and probe the class.
118: * This is used both at boot time - for the boot device and (temporarily)
119: * any native drivers with static config tables - and by IOProbeDriver().
120: */
121: static BOOL configureDriverClass(const char *className,
122: IOConfigTable *configData,
123: port_t deviceMaster);
124:
125:
126:
127: ......................
128: to do (2 Feb 93)
129:
130: * add pointer to IODeviceDescription to kern_dev_t. DONE
131: * when creating kern_dev, also create IODeviceDescription if valid
132: IOConfigTable exists. DONE
133: * Move relevant stuff from configTable.c to IOEISADeviceDescription.
134: * configureDriverClass() should take an (IOConfigTable *) instead of
135: char *configData.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.