summaryrefslogtreecommitdiffstats
path: root/docs/comparisons
blob: f399a9e8441c93bb3eee4a7382f7dedb03780bf3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
redhat 6.1 (fr?), install 766MB, df 900MB, 35min (asked for all groups except "everything")

upgrade to redhat 6.2, sum 757MB, df 936MB, 20min

mandrake 7.1, install 755MB, df 1091MB, 17min (asked install size 910MB), 515 packages

upgrade to cooker, sum 1000MB, df 1404MB, 35min


redhat 7.0b, install 815MB, df 960MB, 18min
redhat 7.0, install 995MB, df MB, 26min

7.2b, 3.3GB 2h26


7.2b: (lang fr)
compssLevel  df  rpm  	time  fs          df/time
	               	     
100          64   59  	0:59  ext2 500M   1.08
 90         132  127  	1:50  ext2 500M   1.20
 80         226  218  	3:26  ext2 500M	  1.10
 70         449  387  	5:52  ext2 1G	  1.28
 60         614  541  	8:36  ext2 1G	  1.19
 50        1113  943   17:40  ext2 2G	  1.05
 40        1193 1013   20:39  ext2 2G	  0.96
 30        1262 1072   22:28  ext2 2G	  0.94
 20        1445 1219   27:34  ext2 2G	  0.87
 10        1649 1394   36:58  ext2 2G	  0.74
  0        1943 1638   48:02  ext2 2G	  0.67
-10        2957 2519  101:49  ext2 4G 	  0.48

7.2b: (lang all)
compssLevel  df  rpm  	time  fs          df/time

100          70   59  	1:04  ext2 500M   1.09
 90         289  281  	4:20  ext2 500M	  1.11
 80         373  361    5:41  ext2 500M	  1.09
 70         890  794   13:28  ext2 1G	  1.10


mem used 7.2cooker
gtk:   runinstall2 13608(data 9572) + FBDev 2984(data 1544)
newt:  runinstall2  9516(data 7528)
stdio: runinstall2  9160(data 7372)

8.0rc1: (lang fr)

rpmsrate

4   ()        175   139    3:25   reiserfs 2G  0.85
4   all       831   786   18:08   reiserfs 2G  0.76

8.1b

5   ()         77    66    1:24   ext2 300M

8.1pre_rc1     rpm   df                       time/rpm  rpm/df

6   ()         82    66    1:26   ext2 500M   1.05      1.24
5   ()         89    71    1:38   ext2 500M   1.10	1.25
3   ()         94    77    1:46   ext2 500M   1.13	1.22
5   X         145   127    2:09   ext2 500M   0.89	1.14
3   X         231   217    3:26   ext2 500M   0.89	1.06
4   kde       393   316    4:31   ext2 2G     0.69	1.24
4   kde       393   316    4:41   ext2 2G     0.72	1.24
4   kde       393   316    4:43   ext2 4G     0.72	1.24
5   all       367   337    5:02   ext2 500M   0.82	1.09
4   kde+gnome 454   370    5:50   ext2 4G     0.77	1.23
4   kde+gnome 454   370    6:10   ext2 4G     0.81	1.23
4   kde+gnome 454   370    6:24   ext2 4G     0.85	1.23
5   all       489   406    5:55   ext2 4G     0.73	1.20
5   all       490   406    5:18   ext2 1G     0.65	1.21
4   kd+gn+dsk 594   494    7:31   ext2 4G     0.76	1.20
4   prev+dev  827   696   10:27   ext2 4G     0.76	1.19
4   all      1100   988   19:34   ext2 1G     1.07	1.11
3   all      1640  1331   31:33   ext2 2G     1.15	1.23
3   all      1740  1434   39:38   ext2 4G     1.37	1.21
2   all      2252  1843   54:40   ext2 4G     1.46	1.22
-1  all      2490  2048   61:02   ext2 4G     1.47      1.22

# perl -alpe '$F[4] =~ /(.*):(.*)/; $r = ($1 * 60 + $2) / $F[2]; s|\S+(\s+\S+)\s*$|sprintf("%.2f", $r) . "$1"|e;'
# perl -ape '$r = $F[2] / $F[3]; s|\S+\s*$|sprintf "%.2f\n", $r|e;'

9.0beta1

5   ()         89    71    1:35   ext2 500M
3   X         240   231    3:41   ext2 500M
5   all       306   293    3:36   ext2 500M
4   all       808   731    6:48   ext2 1G
4   all      1433  1331   21:44   ext2 2G
4   X+kde     822   749    6:05   ext2 2G
4   X+gnome   369   319    5:58   ext2 2G


redhat 7.3:
- do not halt the box when "halt" is used
- no sysreq
- kdm has gnome entry whereas gnome is not installed
  => choosing gnome gives a flashing black screen and kdm reruns

- repartition of packages on various CDs is crap

- bootloader: handling of multiple disks is more powerful in redhat, but more
dangerous (proposed to everyone, but not proposed especially to people having
a dangerous combinaison)
- why still asking about lba32!!

* anaconda 7.3 vs 7.3.92
  - skipddc option (locks some machines) ??
    maybe because it's done at the beginning of their install?
  
  - LVM
    - lvm_dialog_gui.py
    - Physical Extent 1MB 2MB 4MB ... 16GB
      (vgcreate -s ${PhysicalExtentSize}k)
    - see lvm_sanity_checks.txt, take them
    - lvm on / (mkinitrd)
    - handle upgrade when lvm on /
    - vgcreate -An (ie --autobackup no) ??
      (also for lvcreate vgchange lvremove
    - see clampPVSize in lvm.py

  - RAID
    - Number of spares ??
    - mkraid --dangerous-no-resync  ??
  
  - progress bar in ext2 formatting
  
  - ctrl-alt-suppr during install => reboots
  
  - user names: the regexp is [a-zA-Z][^\0-\x20:,\n]*  or  [A-Za-z][A-Za-z0-9]{0,7}   (depending on wether you're in text mode or graphic mode :)
  - check the user name created is not a system one (see systemUsers)
  
  - SMB authentification
  - cloneDrive ?

  - edd dropped (was to detect lba32 capability, which was dumb)

  - reconfig type of installed removed (was something between install & upgrade)

  - ddcprobe code removed -> moved to kudzu
    changes: sigprocmask and movl added around lrmi_vm86

  - $ENV{GDK_USE_XFT} = 0

* kudzu 0.99.52 vs 0.99.55
  - blacklisting modules.pcimap e100 and bcm5700

* hwdata 0.14 vs 0.32
  - dropped XFree86 3.3.6 support

  - upgradelist: list of (old_module => new_module) for upgrades
    (a simpler way would be to drop entries in modules.conf that concern
    obsolete (and not available anymore) modules, relying on auto-detection to
    add the new one)

  - CardMonitorCombos (for laptops)

redhat 8.0:

  (legend: + pros  - cons  / notice)
  
  Install steps difference
  + firewall wizard
  + md5sum check when booting install
  - no upgrade packages installation during install
  - no services configuration (chkconfig)
  - no printer configuration
  - no autologin
  - no real small installation
  - no small packages (groff-for-man, perl-base...)
  / still propose non-MD5 or non-shadow passwords
  / post install tool (firstconfig)
  
  General install behaviour, eye-candiness
  + package selection a la Windows
  + in language selection languages displayed in native language
  + candy timezone selection
  + help uses bold/italic/big-font
  - no one CD install
  / not using fb at install
  / python + gtk2  vs  perl + gtk
  / ask many things before doing anything (esp. delayed partitioning, swap not available when selecting packages!(?))
  - more width-hard-coded dialog boxes (harder for translations)
  / use a loopback file from the CD then copied on system
  
  Partitioning
  - no diskdruid after install
  - no partitioning wizard
  - no devfs
  - no xfs (but now has reiserfs/jfs)
  - no loopback crypted fs
  - no file swap (?)
  - no supermount
  + LABELed entries in fstab
  + progress bar while formatting
  
  Bootloader
  + bootloader configuration less awkward
  - no automatic handling of bios ordering with many harddrives
  - propose to manually change bios ordering even with one harddrive
  - LBA32 checkbox
  / defaults to grub
  
  Network
  - awkward question apropos hostname when using DHCP
  - no default choice for netmask/gateway/DNS based on IP
  
  XFree
  - no wacom configuration
  - no graphic card multi-head configuration
  - no ATI tvout configuration
  - no prompt for logout after changing X config
  - VideoRam prompted for everybody
  / no XFree3
  / no Utah GLX
  / load module "fbdevhw" "record", but not "v4l"
  / always load module "glx" and "dri"
  
  Keyboard
  - many non useful keyboard entries (eg: latin0)
  - no way to choose the toggle key to choose between latin/non-latin keyboard 
  - no loadkeys done during install for console
  
  Mouse
  - no way to test mouse choice
  - mouse choices include many non-useful choices, badly sorted
    (Intellimouse must be sought in Microsoft whereas it's used by many others)
  
  Multimedia
  - no bttv configuration (including webcams)
  - missing audio modules (alsa, audigy...)

* anaconda 8.0 (rel. 4) vs 8.0.92
  - use vte instead of gnome.zvt
  - add alpha (axp) partitioning code
  - remove label "nofb" and options "devfs=nomount ramdisk_size=9216" from syslinux.cfg
  - edd (ddc probe) moved to kudzu
  - add "-Odir_index" option to ext3 tunefs 
  - screenshoting in directory /root/anaconda-screenshots/ instead of using exported display
  - assembler code change in cpuid, smp.c
  - there is some code to read the "raid superblock" (see doGetRaidSuperblock in isys/isys.c)
  - new code for choosing to upgrade or not
  - hack to remove /var/lib/rpm/__db.00[123] (with comment "make sure that the rpmdb doesn't have stale locks :/")

* anaconda 8.0.92 vs 8.0.93 (rel. 0.20030108205243)
  - drop xmode (bring up text mode in a remote xterm)
  - code available to check the ability to do a mkbootdisk 
    (check size of vmlinuz + initrd, check size of floppy)
  - drop "-Odir_index" option to ext3 tunefs 
    (with comment "add back -Odir_index when htree is safe")
  - waitForLink added to loader2/net.c using added ethtool thingy (get_ethtool_link_status, get_link_status)
  - OS390 fdasd & z/IPL changes
  - for kickstart, new option "--ignoremissing", (there were --ignoredeps and --resolvedeps)
  - /usr/kerberos/lib in LD_LIBRARY_PATH
  - these are symlinks so you cant make them mount points
    otherexcept = ['/var/mail', '/usr/bin/X11', '/usr/lib/X11', '/usr/tmp']

	    elif self.mountpoint in otherexcept:
                return _("The mount point %s cannot be used.  It must "
			 "be a symbolic link for proper system "
			 "operation.  Please select a different "
			 "mount point.") % (self.mountpoint,)
		

* hwdata 0.47 (redhat 8.0) vs 0.62 (redhat 8.1 beta1 phoebe)
  - pcitable & upgradelist
     - replace eepro100 with e100
     - switch 0x1106 0x3059 "via82cxxx_audio" to "unknown"
  - Cards
     - remove most swcursor with comment:
        # mharris - Nov 23, 2002 - Commented out the swcursor option, if it is still
        # needed, then lets disable it right in the driver completely, or possibly
        # fix it.
     - using driver "nv" for GeForce4 and Quadro4 with comment:
        # mharris - Nov 23, 2002 - enabling "nv" driver for GeForce 4 and Quadro 4 as
        # CVS XFree86 support them now in 4.2.99.2
     - special options "externDisp" and "internDisp" for NeoMagic cards
       together with CHIPSET

* kudzu 0.99.69 (redhat 8.0) vs 0.99.83 (redhat 8.1 beta1 phoebe)
  - don't read eepro100 entries from the pcitable
  - handle compressed modules
  - many changes in PS/2 mouse detection, and handle "intellips/2" mouse
  - changes in PnP serial modem detection
  - use "udf,iso9660" option for cdrom entry in fstab 
    (note that comma separated choice of filesystems *is* allowed, though not
     documented in fstab(5))
21 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766
package modules; # $Id$

use strict;
use vars qw(%drivers);

use common qw(:common :file :system :functional);
use detect_devices;
use run_program;
use log;


my %conf;
my $scsi = 0;
my %deps = ();

my @drivers_by_category = (
[ 'net', {
if_(arch() =~ /ppc/,
  "mace" => "Apple PowerMac Ethernet",
  "bmac" => "Apple G3 Ethernet",
  "gmac" => "Apple G4/iBook Ethernet",
),
if_(arch() =~ /^sparc/,
  "myri_sbus" => "MyriCOM Gigabit Ethernet",
  "sunbmac" => "Sun BigMac Ethernet",
  "sunqe" => "Sun Quad Ethernet",
),
if_(arch() !~ /alpha/ && arch() !~ /sparc/,
  "3c501" => "3com 3c501",
  "3c503" => "3com 3c503",
  "3c505" => "3com 3c505",
  "3c507" => "3com 3c507",
  "3c509" => "3com 3c509",
  "3c515" => "3com 3c515",
  "3c90x" => "3Com 3c90x (Cyclone/Hurricane/Tornado)",
  "82596" => "Apricot 82596",
  "abyss" => "Smart 16/4 PCI Ringnode (token ring)",
  "ac3200" => "Ansel Communication AC3200",
  "acenic" => "AceNIC Gigabit Ethernet",
  "aironet4500_card" => "aironet4500_card",
  "at1700" => "Allied Telesis AT1700",
  "atp" => "ATP", # builtin the kernel
  "com20020-pci" => "com20020-pci",
  "cs89x0" => "CS89x0",
  "de600" => "D-Link DE-600 pocket adapter",
  "de620" => "D-Link DE-620 pocket adapter",
  "defxx" => "DEC DEFPA FDDI", # most unused
  "depca" => "Digital DEPCA and EtherWORKS",
  "dgrs" => "Digi International RightSwitch",
  "dmfe" => "dmfe",
  "e100" => "Intel Ethernet Pro 100", #- newer Intel version of eepro100
  "e1000" => "Intel Gigabit Ethernet",
  "e2100" => "Cabletron E2100",
  "eepro" => "Intel EtherExpress Pro",
  "eepro100" => "Intel EtherExpress Pro 100", #- should run on sparc but no memory on floppy
  "eexpress" => "Intel EtherExpress",
  "epic100" => "SMC 83c170 EPIC/100",
  "eth16i" => "ICL EtherTeam 16i",
  "ewrk3" => "Digital EtherWORKS 3",
  "hamachi" => "hamachi",
  "hp" => "HP LAN/AnyLan",
  "hp-plus" => "HP PCLAN/plus",
  "hp100" => "HP10/100VG any LAN ",
  "ibmtr" => "Token Ring Tropic",
# requires scsi_mod???  "iph5526" => "iph5526",
  "lance" => "Lance",
  "natsemi" => "National Semiconductor 10/100",
  "ne" => "NE2000 and compatible",
  "ne2k-pci" => "NE2000 PCI",
  "ni5010" => "NI 5010",
  "ni52" => "NI 5210",
  "ni65" => "NI 6510",
  "old_tulip" => "Digital 21040/21041/21140 (old Tulip driver)",
  "olympic" => "olympic",
  "pcnet32" => "AMD PC/Net 32",
  "plip" => "PLIP (parallel port)",
  "rcpci" => "Red Creek Hardware VPN",
  "rrunner" => "Roadrunner serial HIPPI", # mostly unused
  "sb1000" => "sb1000",
  "sis900" => "sis900",
  "sk98lin" => "Syskonnect (Schneider & Koch)|Gigabit Ethernet",
  "sktr" => "Syskonnect Token ring adaptor",
  "smc-ultra" => "SMC Ultra",
  "smc9194" => "SMC 9000 series",
  "starfire" => "Adaptec StarFire",
  "tlan" => "Compaq Netelligent",
  "tmspci" => "tmspci (token ring)",
  "tulip" => "Digital 21040/21041/21140 (Tulip)",
  "via-rhine" => "VIA Rhine",
#  "wavelan" => "AT&T WaveLAN & DEC RoamAbout DS", # TODO is a "AT&T GIS WaveLAN ISA" ?
  "wd" => "WD8003, WD8013 and compatible",
  "winbond-840" => "Compex RL100-ATX",
  "yellowfin" => "Symbios Yellowfin G-NIC",
#******(missing-2.4)    "smc-ultra32" => "SMC Ultra 32",
#******(missing-2.4)  "rl100a" => "rl100a",
#******(missing-2.4)  "z85230" => "Z85x30",
),
  "3c59x" => "3com 3c59x (Vortex)",
  "8139too" => "Realtek RTL-8139",
  "de4x5" => "Digital 425,434,435,450,500",
  "rtl8139" => "RealTek RTL8129/8139",
  "sunhme" => "Sun Happy Meal Ethernet",
  "sundance" => "sundance",
}],
[ 'net_raw', {
  "8390" => "8390",
  "af_packet" => "packet socket",
  "nfs" => "Network File System (nfs)",
  "lockd" => "lockd",
  "parport" => "parport",
  "parport_pc" => "parport_pc",
  "sunrpc" => "sunrpc",
  "pci-scan" => "pci-scan",
}],
[ 'isdn', {
   "hisax" => "hisax",
   "hysdn" => "hysdn",
   "b1pci" => "b1pci",
   "t1pci" => "t1pci",
   "c4" => "c4",
}],
[ 'media', {
   "ns558" => "Creative Labs SB Live! joystick",
   "radio-maxiradio" => "radio-maxiradio",
}],
[ 'scsi', {
if_(arch() =~ /ppc/,
  "mesh" => "Apple Internal SCSI",
  "mac53c94" => "Apple External SCSI",
),
if_(arch() =~ /^sparc/,
  "qlogicpti" => "Performance Technologies ISP",
),
if_(arch() !~ /alpha/ && arch() !~ /sparc/,
  "3w-xxxx" => "3ware ATA-RAID",
  "53c7,8xx" => "NCR 53c7xx",
  "AM53C974" => "AMD SCSI",
  "BusLogic" => "BusLogic Adapters",
  "NCR53c406a" => "NCR 53c406a",
  "a100u2w" => "a100u2w",
  "advansys" => "AdvanSys Adapters",
  "aha152x" => "Adaptec 152x",
  "aha1542" => "Adaptec 1542",
  "aha1740" => "Adaptec 1740",
  "atp870u" => "atp870u (Acard/Artop)",
  "dc395x_trm" => "dc395x_trm",
  "dtc" => "DTC 3180/3280",
  "fdomain" => "Future Domain TMC-16x0",
  "g_NCR5380" => "NCR 5380",
  "in2000" => "Always IN2000",
  "initio" => "Initio",
  "pci2220i" => "Perceptive Solutions 2240I",
  "psi240i" => "psi240i",
  "qla1280" => "Q Logic QLA1280",
  "qla2x00" => "Q Logic QLA2200",
  "qlogicfas" => "Qlogic FAS",
  "qlogicfc" => "qlogicfc",
  "seagate" => "Seagate ST01/02",
  "sim710" => "sim710",
  "sym53c416" => "sym53c416",
  "t128" => "Trantor T128/T128F/T228",
  "tmscsim" => "tmscsim",
  "u14-34f" => "UltraStor 14F/34F",
  "ultrastor" => "UltraStor 14F/24F/34F",
  "wd7000" => "Western Digital wd7000",
),
  "aic7xxx" => "Adaptec 2740, 2840, 2940",
  "ncr53c8xx" => "NCR 53C8xx PCI",
  "pci2000" => "Perceptive Solutions PCI-2000", # TODO
  "qlogicisp" => "Qlogic ISP",
  "sym53c8xx" => "Symbios 53c8xx",
}],
[ 'scsi_raw', {
  "scsi_mod" => "scsi_mod",
  "sd_mod" => "sd_mod",
#-  "ide-mod" => "ide-mod",
#-  "ide-probe" => "ide-probe",
#-  "ide-probe-mod" => "ide-probe-mod",
}],
[ 'disk', {
if_(arch() =~ /^sparc/,
  "pluto" => "Sun SparcSTORAGE Array SCSI", #- name it "fc4:soc:pluto" ?
),
if_(arch() !~ /alpha/ && arch() !~ /sparc/,
  "DAC960" => "Mylex DAC960",
  "dpt_i2o" => "Distributed Tech SmartCache/Raid I-V Controller",
  "megaraid" => "AMI MegaRAID",
  "aacraid" => "AACxxx Raid Controller",
  "cciss" => "Compaq Smart Array 5300 Controller",
  "cpqarray" => "Compaq Smart-2/P RAID Controller",
  "gdth" => "ICP Disk Array Controller",
  "i2o_block" => "Intel Integrated RAID",
  "ips" => "IBM ServeRAID controller",
  "eata" => "EATA SCSI PM2x24/PM3224",
  "eata_pio" => "EATA PIO Adapters",
  "eata_dma" => "EATA DMA Adapters",
  "ppa" => "Iomega PPA3 (parallel port Zip)",
  "imm" => "Iomega Zip (new driver)",
),
}],
[ 'disk_raw', {
#-  "ide-disk" => "IDE disk",
}],
[ 'cdrom', {
if_(arch() !~ /alpha/ && arch() !~ /sparc/,
#******(missing-2.4)  "sbpcd" => "SoundBlaster/Panasonic",
#******(missing-2.4)  "aztcd" => "Aztech CD",
#******(missing-2.4)  "gscd" => "Goldstar R420",
#******(missing-2.4)  "isp16" => "ISP16/MAD16/Mozart",
#******(missing-2.4)  "mcd" => "Mitsumi", #- removed for space
#******(missing-2.4)  "mcdx" => "Mitsumi (alternate)",
#******(missing-2.4)  "optcd" => "Optics Storage 8000",
#******(missing-2.4)  "cm206" => "Phillips CM206/CM260",
#******(missing-2.4)  "sjcd" => "Sanyo",
#******(missing-2.4)  "cdu31a" => "Sony CDU-31A",
#******(missing-2.4) "sonycd535" => "Sony CDU-5xx",
),
}],
[ 'cdrom_raw', {
  "isofs" => "iso9660",
  "ide-cd" => "ide-cd",
  "sr_mod" => "SCSI CDROM support",
  "cdrom" => "cdrom",
}],
[ 'sound', {
if_(arch() =~ /ppc/,
  "dmasound" => "Amiga or PowerMac DMA sound",
),
if_(arch() !~ /^sparc/,
  "cmpci" => "C-Media Electronics CMI8338A CMI8338B CMI8738",
  "cs46xx" => "CrystalClear SoundFusion (cs46xx)",
  "cs4281" => "Crystal CS4281",
  "es1370" => "Ensoniq ES1370 [AudioPCI]",
  "es1371" => "Ensoniq ES1371 [AudioPCI-97]",
  "esssolo1" => "ESS Technology ES1969 Solo-1 Audiodrive",
  "i810_audio" => "i810 integrated sound card",
  "maestro" => "Maestro",
  "maestro3" => "ESS Maestro-3",
  "nm256" => "Neomagic MagicMedia 256AV",
  "pas16" => "Pro Audio Spectrum/Studio 16",
  "trident" => "M5451 PCI South Bridge Audio",
  "via82cxxx" => "VIA VT82C686_5",
  "via82cxxx_audio" => "VT82C686 (Apollo Super AC97)",
  "sonicvibes" => "S3 SonicVibes",
  "snd-card-ice1712" => "IC Ensemble Inc|ICE1712 [Envy24]",
  "emu10k1" => "Creative Labs|SB Live! (audio)",
  "ymfpci" => "Yamaha YMF-740, DS-1",
#  "au8820" => "Aureal Semiconductor|Vortex 1",
#  "au8830" => "Aureal Semiconductor|Vortex 2",
  "snd-card-cmipci" => "CMI",
  "snd-card-cs461x" => "Cirrus Logic|CS 4610/11 [CrystalClear SoundFusion Audio Accelerator]",
  "snd-card-ens1371" => "Ensoniq/Creative Labs ES1371",
  "snd-card-es1938" => "ESS Technology|ES1969 Solo-1 Audiodrive",
  "snd-card-fm801" => "Fortemedia, Inc|Xwave QS3000A [FM801]<>Fortemedia, Inc|FM801 PCI Audio",
  "snd-card-intel8x0" => "Intel Corporation|82440MX AC'97 Audio Controller<>Intel Corporation",
  "snd-card-rme96" => "Xilinx, Inc.|RME Digi96<>Xilinx, Inc.",
  "snd-card-trident" => "Silicon Integrated Systems [SiS]|7018 PCI Audio",
  "snd-card-via686a" => "VIA Technologies|VT82C686 [Apollo Super AC97/Audio]",
  "snd-card-ymfpci" => "Yamaha Corporation|YMF-740",
),
}],
[ 'pcmcia', {
if_(arch() !~ /^sparc/,
  "ide_cs" => "ide_cs",
  "fmvj18x_cs" => "fmvj18x_cs",
  "fdomain_cs" => "fdomain_cs",
  "netwave_cs" => "netwave_cs",
  "serial_cs" => "serial_cs",
  "wavelan_cs" => "wavelan_cs",
  "pcnet_cs" => "pcnet_cs",
  "aha152x_cs" => "aha152x_cs",
  "xirc2ps_cs" => "xirc2ps_cs",
  "3c574_cs" => "3c574_cs",
  "qlogic_cs" => "qlogic_cs",
  "nmclan_cs" => "nmclan_cs",
#******(missing-2.4)   "ibmtr_cs" => "ibmtr_cs",
#  "dummy_cs" => "dummy_cs",
#  "memory_cs" => "memory_cs",
  "ftl_cs" => "ftl_cs",
  "smc91c92_cs" => "smc91c92_cs",
  "3c589_cs" => "3c589_cs",
#******(missing-2.4)   "parport_cs" => "parport_cs", 
  "3c575_cb" => "3c575_cb",
  "apa1480_cb" => "apa1480_cb",
  "cb_enabler" => "cb_enabler",
  "epic_cb" => "epic_cb",
  "iflash2+_mtd" => "iflash2+_mtd",
  "iflash2_mtd" => "iflash2_mtd",
#  "memory_cb" => "memory_cb",
  "serial_cb" => "serial_cb",
#  "sram_mtd" => "sram_mtd",
  "tulip_cb" => "tulip_cb",

),
}],
[ 'pcmcia_everywhere', {
if_(arch() !~ /^sparc/,
  "pcmcia_core" => "PCMCIA core support",
  "tcic" => "PCMCIA tcic controller",
  "ds" => "PCMCIA card support",
  "i82365" => "PCMCIA i82365 controller",
),
}],
[ 'paride', {
if_(arch() !~ /^sparc/,
  "aten" => "ATEN EH-100",
  "bpck" => "Microsolutions backpack",
  "comm" => "DataStor (older type) commuter adapter",
  "dstr" => "DataStor EP-2000",
  "epat" => "Shuttle EPAT",
  "epia" => "Shuttle EPIA",
  "fit2" => "Fidelity Intl. (older type)",
  "fit3" => "Fidelity Intl. TD-3000",
  "frpw" => "Freecom Power",
  "friq" => "Freecom IQ (ASIC-2)",
  "kbic" => "KingByte KBIC-951A and KBIC-971A",
  "ktti" => "KT Tech. PHd",
  "on20" => "OnSpec 90c20",
  "on26" => "OnSpec 90c26",
  "pd"   => "Parallel port IDE disks",
  "pcd"  => "Parallel port CD-ROM",
  "pf"   => "Parallel port ATAPI disk",
  "paride" => "Main parallel port module",
),
}],
[ 'raid', {
  "linear" => "linear",
  "raid0" => "raid0",
  "raid1" => "raid1",
  "raid5" => "raid5",
}],
[ 'mouse', {
if_(arch() !~ /^sparc/,
  "busmouse" => "busmouse",
  "msbusmouse" => "msbusmouse",
  "serial" => "serial",
  "qpmouse" => "qpmouse",
  "atixlmouse" => "atixlmouse",
),
}],
[ 'usb', {
  "usb-uhci" => "USB (uhci)",
  "usb-ohci" => "USB (ohci)",
  "usb-ohci-hcd" => "USB (ohci-hcd)",
}],
[ 'fs', {
  "smbfs" => "Windows SMB",
  "fat" => "fat",
  "msdos" => "msdos",
  "romfs" => "romfs",
  "vfat" => "vfat",
}],
[ 'other', {
  "agpgart" => "agpgart",
  "bttv" => "Brooktree Corporation|Bt8xx Video Capture",
  "buz" => "Zoran Corporation|ZR36057PQC Video cutting chipset",
  "defxx" => "DEC|DEFPA",
  "i810_rng" => "i810_rng",
  "ide-floppy" => "ide-floppy",
  "ide-scsi" => "ide-scsi",
  "ide-tape" => "ide-tape",
  "loop" => "Loopback device",
  "lp" => "Parallel Printer",
  "nbd" => "nbd",
  "rrunner" => "Essential Communications|Roadrunner serial HIPPI",
  "sg" => "sg",
  "st" => "st",
}],
);

my %type_aliases = (
  scsi => 'disk',
);

my @skip_big_modules_on_stage1 = (
# dgrs e1000
qw(
sk98lin acenic
aironet4500_card com20020-pci hamachi starfire winbond-840

dc395x_trm
BusLogic seagate fdomain g_NCR5380 tmscsim
)
); #******(missing-2.4)  dpt_i2o aztcd gscd isp16 mcd mcdx optcd cm206 sjcd cdu31a

my @skip_modules_on_stage1 = (
  qw(olympic sktr tmspci ibmtr abyss), # token ring
  qw(old_tulip rtl8139), # doesn't exist in 2.4
  if_(arch() =~ /alpha|ppc/, qw(sb1000)),
  "apa1480_cb",
  "imm",
  "ppa",
  "parport",
  "parport_pc",
  "plip",
  qw(3w-xxxx pci2220i qla1280 qla2x00 i2o_block),
  qw(gdth eata eata_pio eata_dma ips),
);


my @drivers_fields = qw(text type);
%drivers = ();

foreach (@drivers_by_category) {
    my ($type, $l) = @$_;
    foreach (keys %$l) { $drivers{$_} = [ $l->{$_}, $type ]; }
}
while (my ($k, $v) = each %drivers) {
    my %l; @l{@drivers_fields} = @$v;
    $drivers{$k} = \%l;
}

sub module_of_type__4update_kernel {
    my ($type) = @_;
    $type = join "|", map { $_, $_ . "_raw" } split ' ', $type;
    my %skip; 
    @skip{@skip_modules_on_stage1} = ();
    @skip{@skip_big_modules_on_stage1} = () if $type !~ /big/;
    "big" =~ /^($type)$/ ? @skip_big_modules_on_stage1 : (),
      grep { !exists $skip{$_} } grep { $drivers{$_}{type} =~ /^($type)$/ } keys %drivers;
}
sub module_of_type {
    my ($type) = @_;
    my $alias = $type_aliases{$type} || $type;
    grep { $drivers{$_}{type} =~ /^(($type)|$alias)$/ } keys %drivers;
}
sub module2text { $drivers{$_[0]}{text} or log::l("trying to get text of unknown module $_[0]"), return $_[0] }

sub get_alias {
    my ($alias) = @_;
    $conf{$alias}{alias};
}
sub get_options {
    my ($name) = @_;
    $conf{$name}{options};
}

sub add_alias { 
    my ($alias, $name) = @_;
    $name =~ /ignore/ and return;
    /\Q$alias/ && $conf{$_}{alias} && $conf{$_}{alias} eq $name and return $_ foreach keys %conf;
    $alias .= $scsi++ || '' if $alias eq 'scsi_hostadapter';
    log::l("adding alias $alias to $name");
    $conf{$alias}{alias} ||= $name;
    if ($name =~ /^snd-card-/) {
	$conf{$name}{"post-install"} = "modprobe snd-pcm-oss";
    }
    $alias;
}

sub remove_alias($) {
    my ($name) = @_;
    foreach (keys %conf) {
	$conf{$_}{alias} && $conf{$_}{alias} eq $name or next;
	delete $conf{$_}{alias};
	return 1;
    }
    0;
}

sub when_load {
    my ($name, $type, @options) = @_;
    if ($type =~ /\bscsi\b/ || $type eq $type_aliases{scsi}) {
	add_alias('scsi_hostadapter', $name), eval { load('sd_mod') };
    }
    if ($type eq 'sound') {
	#- mainly for ppc
	add_alias('sound-slot-0', $name);
    }
    if ($name =~ /^snd-card-/) {
	load('snd-pcm-oss', 'prereq');
    }
    $conf{$name}{options} = join " ", @options if @options;
}

sub load {
    my ($name, $type, @options) = @_;

    my @netdev = detect_devices::getNet() if $type eq 'net';

    if ($::testing) {
	log::l("i try to install $name module (@options)");