diff -u --recursive --new-file v2.1.128/linux/Documentation/Configure.help linux/Documentation/Configure.help --- v2.1.128/linux/Documentation/Configure.help Thu Nov 12 16:21:17 1998 +++ linux/Documentation/Configure.help Fri Nov 13 10:29:43 1998 @@ -1759,6 +1759,58 @@ which includes a server that supports the frame buffer device directly (XF68_FBDev). +Matrox unified accelerated driver +CONFIG_FB_MATROX + Say Y here if you have Matrox Millenium, Matrox Millenium II, Matrox + Mystique, Matrox Mystique 220 or Matrox Productiva G100 in your box. + At this time, G100 support is untested and G200 support does not + exist at all. If you want, you can select M, in this case module + matroxfb.o will be created. + You can pass parameters into driver if it is compiled into kernel by + specifying "video=matrox:XXX", where meaning of XXX you can found at + the end of main source file (drivers/video/matroxfb.c) at boottime. + Same parameters can be passed into insmod if driver is used as + module. + +Matrox Millenium support +CONFIG_FB_MATROX_MILLENIUM + Say Y here if you have Matrox Millenium or Matrox Millenium II in the + box. If you select "Advanced lowlevel driver options", you should + check 4 bpp packed pixel, 8 bpp packed pixel, 16 bpp packed pixel, 24 + bpp packed pixel and 32 bpp packed pixel. You can also use font + widths different from 8. + +Matrox Mystique support +CONFIG_FB_MATROX_MYSTIQUE + Say Y here if you have Matrox Mystique or Matrox Mystique 220 in the + box. If you select "Advanced lowlevel driver options", you should + check 8 bpp packed pixel, 16 bpp packed pixel, 24 bpp packed pixel + and 32 bpp packed pixel. You can also use font widths different + from 8. + +Matrox G100 support +CONFIG_FB_MATROX_G100 + Say Y here if you have Matrox Productiva G100 in the box. But THIS + DRIVER IS NOT TESTED BECAUSE OF I HAVE NO G100 board and G100 + technical sheets are top secret at this time. But driver should not + cause any damage to your computer. + If you select "Advanced lowlevel driver options", you should check + 8 bpp packed pixel, 16 bpp packed pixel, 24 bpp packed pixel and + 32 bpp packed pixel. You can also use font widths different from 8. + +Matrox unified driver multihead support +CONFIG_FB_MATROX_MULTIHEAD + Say Y here if you have more than one (supported) Matrox device in + computer and you want to use all of them. If you have only one + device, you should say N because of driver compiled with Y is larger + and a bit slower, especially on ia32 (ix86). + If you compiled driver as module, you are VERY interested in speed + and you can use 40KB of memory per each Matrox device, you can + compile driver without multihead support and instead of it insmod + more module instances. In this case, you MUST specify parameter dev=N + to insmod, where N is sequential number of Matrox device (0 = first, + 1 = second and so on). + MDA text console (dual-headed) CONFIG_MDA_CONSOLE Say Y here if you have an old MDA or monochrome Hercules graphics @@ -3740,6 +3792,13 @@ The module will be called fdomain.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. +Future Domain MCS-600/700 SCSI support +CONFIG_SCSI_FD_MCS + This is support for Future Domain MCS 600/700 MCA SCSI adapters. Some + PS/2s are also equipped with IBM Fast SCSI Adapter/A which is an OEM + of the MCS 700. This driver also supports Reply SB16/SCSI card (the + SCSI part). It supports multiple adapters in the same system. + Generic NCR5380/53c400 SCSI support CONFIG_SCSI_GENERIC_NCR5380 This is the generic NCR family of SCSI controllers, not to be @@ -5013,9 +5072,9 @@ Comtrol Hostess SV-11 support CONFIG_HOSTESS_SV11 - This is a network card for high speed synchronous serial links. It - is commonly used to connect to Cisco equipment over HSSI links. At - this point, the driver can only be compiled as a module. + This is a network card for low speed synchronous serial links, at + up to 256Kbits. It supports both PPP and Cisco HDLC + At this point, the driver can only be compiled as a module. WAN Drivers CONFIG_WAN_DRIVERS @@ -5576,7 +5635,7 @@ is for you, read the Ethernet-HOWTO, available via FTP (user: anonymous) from ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO. -AT1700 support +AT1700/1720 support CONFIG_AT1700 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in diff -u --recursive --new-file v2.1.128/linux/Documentation/networking/ltpc.txt linux/Documentation/networking/ltpc.txt --- v2.1.128/linux/Documentation/networking/ltpc.txt Sat May 2 14:19:51 1998 +++ linux/Documentation/networking/ltpc.txt Fri Nov 13 10:29:43 1998 @@ -6,18 +6,37 @@ driver applies only to the one with the 65c02 processor chip on it. To include it in the kernel, select the CONFIG_LTPC switch in the -configuration dialog; at this time (kernel 2.1.23) compiling it as -a module will not work. +configuration dialog. You can also compile it as a module. + +While the driver will attempt to autoprobe the I/O port address, IRQ +line, and DMA channel of the card, this does not always work. For +this reason, you should be prepared to supply these parameters +yourself. (see "Card Configuration" below for how to determine or +change the settings on your card) + +When the driver is compiled into the kernel, you can add a line such +as the following to your /etc/lilo.conf: + + append="ltpc=0x240,9,1" + +where the parameters (in order) are the port address, IRQ, and DMA +channel. The second and third values can be omitted, in which case +the driver will try to determine them itself. + +If you load the driver as a module, you can pass the parameters "io=", +"irq=", and "dma=" on the command line with insmod or modprobe, or add +them as options in /etc/conf.modules: + + alias lt0 ltpc # autoload the module when the interface is configured + options ltpc io=0x240 irq=9 dma=1 Before starting up the netatalk demons (perhaps in rc.local), you need to add a line such as: -/sbin/ifconfig ltalk0 127.0.0.42 - + /sbin/ifconfig lt0 127.0.0.42 -The driver will autoprobe, and you should see a message like: -"LocalTalk card found at 240, IR9, DMA1." -at bootup. +The address is unimportant - however, the card needs to be configured +with ifconfig so that Netatalk can find it. The appropriate netatalk configuration depends on whether you are attached to a network that includes AppleTalk routers or not. If, @@ -25,22 +44,22 @@ printers, you need to set up netatalk to "seed". The way I do this is to have the lines -dummy -seed -phase 2 -net 2000 -addr 2000.26 -zone "1033" -ltalk0 -seed -phase 1 -net 1033 -addr 1033.27 -zone "1033" + dummy -seed -phase 2 -net 2000 -addr 2000.26 -zone "1033" + lt0 -seed -phase 1 -net 1033 -addr 1033.27 -zone "1033" in my atalkd.conf. What is going on here is that I need to fool netatalk into thinking that there are two AppleTalk interfaces -present -- otherwise it refuses to seed. This is a hack, and a -more permanent solution would be to alter the netatalk code. -Note that the dummy driver needs to accept multicasts also -- earlier -versions of dummy.c may need to be patched. - +present; otherwise, it refuses to seed. This is a hack, and a more +permanent solution would be to alter the netatalk code. Also, make +sure you have the correct name for the dummy interface - If it's +compiled as a module, you will need to refer to it as "dummy0" or some +such. If you are attached to an extended AppleTalk network, with routers on it, then you don't need to fool around with this -- the appropriate line in atalkd.conf is -ltalk0 -phase 1 + lt0 -phase 1 -------------------------------------- @@ -74,19 +93,32 @@ -------------------------------------- IP: - Many people are interested in this driver in order to use IP -when LocalTalk, but no Ethernet, is available. While the code to do -this is not strictly speaking part of this driver, an experimental -version is available which seems to work under kernel 2.0.xx. It is -not yet functional in the 2.1.xx kernels. + +Yes, it is possible to do IP over LocalTalk. However, you can't just +treat the LocalTalk device like an ordinary Ethernet device, even if +that's what it looks like to Netatalk. + +Instead, you follow the same procedure as for doing IP in EtherTalk. +See Documentation/networking/ipddp.txt for more information about the +kernel driver and userspace tools needed. -------------------------------------- BUGS: -2.0.xx: - -2.1.xx: The module support doesn't work yet. +IRQ autoprobing often doesn't work on a cold boot. To get around +this, either compile the driver as a module, or pass the parameters +for the card to the kernel as described above. + +Also, as usual, autoprobing is not recommended when you use the driver +as a module. (though it usually works at boot time, at least) + +Polled mode is *really* slow sometimes, but this seems to depend on +the configuration of the network. + +It may theoretically be possible to use two LTPC cards in the same +machine, but this is unsupported, so if you really want to do this, +you'll probably have to hack the initialization code a bit. ______________________________________ @@ -96,3 +128,4 @@ -- Bradford Johnson +-- Updated 11/09/1998 by David Huggins-Daines diff -u --recursive --new-file v2.1.128/linux/Documentation/sysctl/README linux/Documentation/sysctl/README --- v2.1.128/linux/Documentation/sysctl/README Wed Jun 24 22:54:02 1998 +++ linux/Documentation/sysctl/README Fri Nov 13 10:07:26 1998 @@ -1,4 +1,4 @@ -Documentation for /proc/sys/*/* version 0.1 +Documentation for /proc/sys/ kernel version 2.1.128 (c) 1998, Rik van Riel 'Why', I hear you ask, 'would anyone even _want_ documentation @@ -12,6 +12,9 @@ Furthermore, the programmers who built sysctl have built it to be actually used, not just for the fun of programming it :-) +If you prefer HTML, feel free to visit the Linux-MM homepage +... + ============================================================== Legal blurb: @@ -58,9 +61,9 @@ debug/ dev/ device specific information (eg dev/cdrom/info) fs/ specific filesystems + filehandle, inode, dentry and quota tuning binfmt_misc kernel/ global kernel info / tuning - open file / inode tuning miscellaneous stuff net/ networking stuff, for documentation look in: diff -u --recursive --new-file v2.1.128/linux/Documentation/sysctl/fs.txt linux/Documentation/sysctl/fs.txt --- v2.1.128/linux/Documentation/sysctl/fs.txt Wed Dec 31 16:00:00 1969 +++ linux/Documentation/sysctl/fs.txt Fri Nov 13 10:07:26 1998 @@ -0,0 +1,116 @@ +Documentation for /proc/sys/fs/* kernel version 2.1.128 + (c) 1998, Rik van Riel + +For general info and legal blurb, please look in README. + +============================================================== + +This file contains documentation for the sysctl files in +/proc/sys/fs/ and is valid for Linux kernel version 2.1. + +The files in this directory can be used to tune and monitor +miscellaneous and general things in the operation of the Linux +kernel. Since some of the files _can_ be used to screw up your +system, it is advisable to read both documentation and source +before actually making adjustments. + +Currently, these files are in /proc/sys/fs: +- dentry-state +- dquot-max +- dquot-nr +- file-max +- file-nr +- inode-max +- inode-nr +- inode-state + +Documentation for the files in /proc/sys/fs/binfmt_misc is +in Documentation/binfmt_misc.txt. + +============================================================== + +dentry-state: + +From linux/fs/dentry.c: +-------------------------------------------------------------- +struct { + int nr_dentry; + int nr_unused; + int age_limit; /* age in seconds */ + int want_pages; /* pages requested by system */ + int dummy[2]; +} dentry_stat = {0, 0, 45, 0,}; +-------------------------------------------------------------- + +Dentries are dynamically allocated and deallocated, and +nr_dentry seems to be 0 all the time. Hence it's safe to +assume that only nr_unused, age_limit and want_pages are +used. Nr_unused seems to be exactly what its name says. +Age_limit is the age in seconds after which dcache entries +can be reclaimed when memory is short and want_pages is +nonzero when shrink_dcache_pages() has been called and the +dcache isn't pruned yet. + +============================================================== + +dquot-max & dquot-nr: + +The file dquot-max shows the maximum number of cached disk +quota entries. + +The file dquot-nr shows the number of allocated disk quota +entries and the number of free disk quota entries. + +If the number of free cached disk quotas is very low and +you have some awesome number of simultaneous system users, +you might want to raise the limit. + +============================================================== + +file-max & file-nr: + +The kernel allocates file handles dynamically, but as yet it +doesn't free them again. + +The value in file-max denotes the maximum number of file- +handles that the Linux kernel will allocate. When you get lots +of error messages about running out of file handles, you might +want to increase this limit. + +The three values in file-nr denote the number of allocated +file handles, the number of used file handles and the maximum +number of file handles. When the allocated file handles come +close to the maximum, but the number of actually used ones is +far behind, you've encountered a peak in your usage of file +handles and you don't need to increase the maximum. + +============================================================== + +inode-max, inode-nr & inode-state: + +As with file handles, the kernel allocates the inode structures +dynamically, but can't free them yet. + +The value in inode-max denotes the maximum number of inode +handlers. This value should be 3-4 times larger than the value +in file-max, since stdin, stdout and network sockets also +need an inode struct to handle them. When you regularly run +out of inodes, you need to increase this value. + +The file inode-nr contains the first two items from +inode-state, so we'll skip to that file... + +Inode-state contains three actual numbers and four dummies. +The actual numbers are, in order of appearance, nr_inodes, +nr_free_inodes and preshrink. + +Nr_inodes stands for the number of inodes the system has +allocated, this can be slightly more than inode-max because +Linux allocates them one pageful at a time. + +Nr_free_inodes represents the number of free inodes (?) and +preshrink is nonzero when the nr_inodes > inode-max and the +system needs to prune the inode list instead of allocating +more. + + diff -u --recursive --new-file v2.1.128/linux/Documentation/sysctl/kernel.txt linux/Documentation/sysctl/kernel.txt --- v2.1.128/linux/Documentation/sysctl/kernel.txt Thu Nov 12 16:21:17 1998 +++ linux/Documentation/sysctl/kernel.txt Fri Nov 13 10:07:26 1998 @@ -1,4 +1,4 @@ -Documentation for /proc/sys/kernel/* version 0.1 +Documentation for /proc/sys/kernel/* kernel version 2.1.128 (c) 1998, Rik van Riel For general info and legal blurb, please look in README. @@ -14,26 +14,27 @@ system, it is advisable to read both documentation and source before actually making adjustments. -Currently, these files are in /proc/sys/kernel: +Currently, these files might (depending on your configuration) +show up in /proc/sys/kernel: - acct - ctrl-alt-del - dentry-state - domainname -- file-max -- file-nr - hostname -- inode-max -- inode-nr -- inode-state +- htab-reclaim [ PPC only ] +- java-appletviewer [ binfmt_java, obsolete ] +- java-interpreter [ binfmt_java, obsolete ] - modprobe ==> Documentation/kmod.txt - osrelease - ostype - panic +- powersave-nap [ PPC only ] - printk - real-root-dev ==> Documentation/initrd.txt -- reboot-cmd ==> SPARC specific -- securelevel +- reboot-cmd [ SPARC only ] +- sg-big-buff [ generic SCSI device (sg) ] - version +- zero-paged [ PPC only ] ============================================================== @@ -69,30 +70,6 @@ ============================================================== -dentry-state: - -From linux/fs/dentry.c: --------------------------------------------------------------- -struct { - int nr_dentry; - int nr_unused; - int age_limit; /* age in seconds */ - int want_pages; /* pages requested by system */ - int dummy[2]; -} dentry_stat = {0, 0, 45, 0,}; --------------------------------------------------------------- - -Dentries are dynamically allocated and deallocated, and -nr_dentry seems to be 0 all the time. Hence it's safe to -assume that only nr_unused, age_limit and want_pages are -used. Nr_unused seems to be exactly what its name says. -Age_limit is the age in seconds after which dcache entries -can be reclaimed when memory is short and want_pages is -nonzero when shrink_dcache_pages() has been called and the -dcache isn't pruned yet. - -============================================================== - domainname & hostname: These files can be controlled to set the domainname and @@ -104,52 +81,12 @@ ============================================================== -file-max & file-nr: - -The kernel allocates file handles dynamically, but as yet it -doesn't free them again. - -The value in file-max denotes the maximum number of file- -handles that the Linux kernel will allocate. When you get lots -of error messages about running out of file handles, you might -want to increase this limit. - -The three values in file-nr denote the number of allocated -file handles, the number of used file handles and the maximum -number of file handles. When the allocated file handles come -close to the maximum, but the number of actually used ones is -far behind, you've encountered a peak in your usage of file -handles and you don't need to increase the maximum. - -============================================================== - -inode-max, inode-nr & inode-state: - -As with file handles, the kernel allocates the inode structures -dynamically, but can't free them yet. - -The value in inode-max denotes the maximum number of inode -handlers. This value should be 3-4 times larger than the value -in file-max, since stdin, stdout and network sockets also -need an inode struct to handle them. When you regularly run -out of inodes, you need to increase this value. - -The file inode-nr contains the first two items from -inode-state, so we'll skip to that file... - -Inode-state contains three actual numbers and four dummies. -The actual numbers are, in order of appearance, nr_inodes, -nr_free_inodes and preshrink. - -Nr_inodes stands for the number of inodes the system has -allocated, this can be slightly more than inode-max because -Linux allocates them one pageful at a time. - -Nr_free_inodes represents the number of free inodes (?) and -preshrink is nonzero when the nr_inodes > inode-max and the -system needs to prune the inode list instead of allocating -more. +htab-reclaim: (PPC only) +Setting this to a non-zero value, the PowerPC htab +(see Documentation/powerpc/ppc_htab.txt) is pruned +each time the system hits the idle loop. + ============================================================== osrelease, ostype & version: @@ -177,6 +114,13 @@ ============================================================== +powersave-nap: (PPC only) + +If set, Linux-PPC will use the 'nap' mode of powersaving, +otherwise the 'doze' mode will be used. + +============================================================== + printk: The four values in printk denote: console_loglevel, @@ -202,27 +146,30 @@ ============================================================== -securelevel: +reboot-cmd: (Sparc only) -When the value in this file is nonzero, root is prohibited -from: -- changing the immutable and append-only flags on files -- changing sysctl things (limited ???) +??? This seems to be a way to give an argument to the Sparc +ROM/Flash boot loader. Maybe to tell it what to do after +rebooting. ??? ============================================================== -real-root-dev: (CONFIG_INITRD only) +sg-big-buff: -This file is used to configure the real root device when using -an initial ramdisk to configure the system before switching to -the 'real' root device. See linux/Documentation/initrd.txt for -more info. +This file shows the size of the generic SCSI (sg) buffer. +You can't tune it just yet, but you could change it on +compile time by editing include/scsi/sg.h and changing +the value of SG_BIG_BUFF. -============================================================== +There shouldn't be any reason to change this value. If +you can come up with one, you probably know what you +are doing anyway :) -reboot-cmd: (Sparc only) +============================================================== -??? This seems to be a way to give an argument to the Sparc -ROM/Flash boot loader. Maybe to tell it what to do after -rebooting. ??? +zero-paged: (PPC only) +When enabled (non-zero), Linux-PPC will pre-zero pages in +the idle loop, possibly speeding up get_free_pages. Since +this only affects what the idle loop is doing, you should +enable this and see if anything changes. diff -u --recursive --new-file v2.1.128/linux/Documentation/sysctl/vm.txt linux/Documentation/sysctl/vm.txt --- v2.1.128/linux/Documentation/sysctl/vm.txt Wed Jun 24 22:54:02 1998 +++ linux/Documentation/sysctl/vm.txt Fri Nov 13 10:07:26 1998 @@ -1,4 +1,4 @@ -Documentation for /proc/sys/vm/* version 0.1 +Documentation for /proc/sys/vm/* kernel version 2.1.128 (c) 1998, Rik van Riel For general info and legal blurb, please look in README. @@ -20,8 +20,8 @@ - kswapd - overcommit_memory - pagecache +- pagetable_cache - swapctl -- swapout_interval ============================================================== @@ -56,7 +56,7 @@ } bdf_prm = {{40, 500, 64, 256, 15, 30*HZ, 5*HZ, 1884, 2}}; -------------------------------------------------------------- -The first parameter governs the maximum number of of dirty +The first parameter governs the maximum number of dirty buffers in the buffer cache. Dirty means that the contents of the buffer still have to be written to disk (as opposed to a clean buffer, which can just be forgotten about). @@ -101,8 +101,9 @@ min_percent -- this is the minimum percentage of memory that should be spent on buffer memory borrow_percent -- when Linux is short on memory, and the - buffer cache uses more memory, free pages - are stolen from it + buffer cache uses more memory than this, + the MM subsystem will prune the buffercache + more heavily than other memory max_percent -- this is the maximum amount of memory that can be used for buffer memory @@ -112,25 +113,17 @@ This file contains the values in the struct freepages. That struct contains three members: min, low and high. -Although the goal of the Linux memory management subsystem -is to avoid fragmentation and make large chunks of free -memory (so that we can hand out DMA buffers and such), there -still are some page-based limits in the system, mainly to -make sure we don't waste too much memory trying to get large -free area's. - The meaning of the numbers is: freepages.min When the number of free pages in the system reaches this number, only the kernel can allocate more memory. -freepages.low If memory is too fragmented, the swapout - daemon is started, except when the number - of free pages is larger than freepages.low. -freepages.high The swapping daemon exits when memory is - sufficiently defragmented, when the number - of free pages reaches freepages.high or when - it has tried the maximum number of times. +freepages.low If the number of free pages gets below this + point, the kernel starts swapping agressively. +freepages.high The kernel tries to keep up to this amount of + memory free; if memory comes below this point, + the kernel gently starts swapping in the hopes + that it never has to do real agressive swapping. ============================================================== @@ -210,7 +203,8 @@ This file does exactly the same as buffermem, only this file controls the struct page_cache, and thus controls -the amount of memory allowed for memory mapping of files. +the amount of memory allowed for memory mapping and generic +caching of files. You don't want the minimum level to be too low, otherwise your system might thrash when memory is tight or fragmentation @@ -218,6 +212,23 @@ ============================================================== +pagetable_cache: + +The kernel keeps a number of page tables in a per-processor +cache (this helps a lot on SMP systems). The cache size for +each processor will be between the low and the high value. + +On a low-memory, single CPU system you can safely set these +values to 0 so you don't waste the memory. On SMP systems it +is used so that the system can do fast pagetable allocations +without having to aquire the kernel memory lock. + +For large systems, the settings are probably OK. For normal +systems they won't hurt a bit. For small systems (<16MB ram) +it might be advantageous to set both values to 0. + +============================================================== + swapctl: This file contains no less than 8 variables. @@ -274,14 +285,4 @@ might want to either increase sc_bufferout_weight, or decrease the value of sc_pageout_weight. -============================================================== - -swapout_interval: - -The single value in this file controls the amount of time -between successive wakeups of kswapd when nr_free_pages is -between free_pages_low and free_pages_high. The default value -of HZ/4 is usually right, but when kswapd can't keep up with -the number of allocations in your system, you might want to -decrease this number. diff -u --recursive --new-file v2.1.128/linux/Makefile linux/Makefile --- v2.1.128/linux/Makefile Thu Nov 12 16:21:17 1998 +++ linux/Makefile Thu Nov 12 16:21:37 1998 @@ -1,6 +1,6 @@ VERSION = 2 PATCHLEVEL = 1 -SUBLEVEL = 128 +SUBLEVEL = 129 ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/) diff -u --recursive --new-file v2.1.128/linux/arch/i386/kernel/i386_ksyms.c linux/arch/i386/kernel/i386_ksyms.c --- v2.1.128/linux/arch/i386/kernel/i386_ksyms.c Tue Jul 28 14:21:07 1998 +++ linux/arch/i386/kernel/i386_ksyms.c Fri Nov 13 10:29:44 1998 @@ -98,6 +98,9 @@ EXPORT_SYMBOL(mca_set_adapter_procfn); EXPORT_SYMBOL(mca_isenabled); EXPORT_SYMBOL(mca_isadapter); +EXPORT_SYMBOL(mca_mark_as_used); +EXPORT_SYMBOL(mca_mark_as_unused); +EXPORT_SYMBOL(mca_find_unused_adapter); #endif #ifdef CONFIG_VT diff -u --recursive --new-file v2.1.128/linux/drivers/block/Config.in linux/drivers/block/Config.in --- v2.1.128/linux/drivers/block/Config.in Fri Oct 23 22:01:20 1998 +++ linux/drivers/block/Config.in Fri Nov 13 10:29:44 1998 @@ -77,7 +77,7 @@ fi fi if [ "$CONFIG_MCA" = "y" ]; then - bool 'PS/2 ESDI hard disk support' CONFIG_BLK_DEV_PS2 + tristate 'PS/2 ESDI hard disk support' CONFIG_BLK_DEV_PS2 fi if [ "$CONFIG_ZORRO" = "y" ]; then tristate 'Amiga Zorro II ramdisk support' CONFIG_AMIGA_Z2RAM @@ -94,7 +94,9 @@ comment 'Additional Block Devices' tristate 'Loopback device support' CONFIG_BLK_DEV_LOOP -tristate 'Network block device support' CONFIG_BLK_DEV_NBD +if [ "$CONFIG_NET" = "y" ]; then + tristate 'Network block device support' CONFIG_BLK_DEV_NBD +fi bool 'Multiple devices driver support' CONFIG_BLK_DEV_MD if [ "$CONFIG_BLK_DEV_MD" = "y" ]; then tristate ' Linear (append) mode' CONFIG_MD_LINEAR diff -u --recursive --new-file v2.1.128/linux/drivers/block/ide-probe.c linux/drivers/block/ide-probe.c --- v2.1.128/linux/drivers/block/ide-probe.c Thu Sep 17 17:53:35 1998 +++ linux/drivers/block/ide-probe.c Fri Nov 13 09:55:31 1998 @@ -78,8 +78,18 @@ ide_fixstring (id->serial_no, sizeof(id->serial_no), bswap); id->model[sizeof(id->model)-1] = '\0'; /* we depend on this a lot! */ - drive->present = 1; printk("%s: %s, ", drive->name, id->model); + drive->present = 1; + + /* + * Prevent long system lockup probing later for non-existant + * slave drive if the hwif is actually a Kodak CompactFlash card. + */ + if (!strcmp(id->model, "KODAK ATA_FLASH")) { + ide_drive_t *mate = &HWIF(drive)->drives[1^drive->select.b.unit]; + mate->present = 0; + mate->noprobe = 1; + } /* * Check for an ATAPI device diff -u --recursive --new-file v2.1.128/linux/drivers/block/via82c586.c linux/drivers/block/via82c586.c --- v2.1.128/linux/drivers/block/via82c586.c Thu Sep 17 17:53:35 1998 +++ linux/drivers/block/via82c586.c Fri Nov 13 10:29:44 1998 @@ -1,5 +1,5 @@ /* - * linux/drivers/block/via82C586.c Version 0.01 Aug 16, 1998 + * linux/drivers/block/via82c586.c Version 0.01 Aug 16, 1998 * * Copyright (C) 1998 Michel Aubry * Copyright (C) 1998 Andre Hedrick diff -u --recursive --new-file v2.1.128/linux/drivers/cdrom/cdrom.c linux/drivers/cdrom/cdrom.c --- v2.1.128/linux/drivers/cdrom/cdrom.c Sun Nov 8 14:02:52 1998 +++ linux/drivers/cdrom/cdrom.c Fri Nov 13 10:29:44 1998 @@ -174,7 +174,9 @@ struct cdrom_device_ops * cdo); static void sanitize_format(union cdrom_addr *addr, u_char * curr, u_char requested); +#ifdef CONFIG_SYSCTL static void cdrom_sysctl_register(void); +#endif /* CONFIG_SYSCTL */ static struct cdrom_device_info *topCdromPtr = NULL; struct file_operations cdrom_fops = diff -u --recursive --new-file v2.1.128/linux/drivers/char/random.c linux/drivers/char/random.c --- v2.1.128/linux/drivers/char/random.c Fri Oct 9 13:27:08 1998 +++ linux/drivers/char/random.c Fri Nov 13 10:29:44 1998 @@ -1407,19 +1407,15 @@ switch (cmd) { case RNDGETENTCNT: - retval = verify_area(VERIFY_WRITE, (void *) arg, sizeof(int)); - if (retval) - return(retval); ent_count = random_state.entropy_count; - put_user(ent_count, (int *) arg); + if (put_user(ent_count, (int *) arg)) + return -EFAULT; return 0; case RNDADDTOENTCNT: if (!capable(CAP_SYS_ADMIN)) return -EPERM; - retval = verify_area(VERIFY_READ, (void *) arg, sizeof(int)); - if (retval) - return(retval); - get_user(ent_count, (int *) arg); + if (get_user(ent_count, (int *) arg)) + return -EFAULT; /* * Add i to entropy_count, limiting the result to be * between 0 and POOLBITS. @@ -1446,16 +1442,14 @@ if (!capable(CAP_SYS_ADMIN)) return -EPERM; p = (int *) arg; - retval = verify_area(VERIFY_WRITE, (void *) p, sizeof(int)); - if (retval) - return(retval); ent_count = random_state.entropy_count; - put_user(ent_count, p++); - retval = verify_area(VERIFY_WRITE, (void *) p, sizeof(int)); - if (retval) - return(retval); - get_user(size, p); - put_user(POOLWORDS, p++); + if (put_user(ent_count, p++)) + return -EFAULT; + + if (get_user(size, p)) + return -EFAULT; + if (put_user(POOLWORDS, p++)) + return -EFAULT; if (size < 0) return -EINVAL; if (size > POOLWORDS) @@ -1467,16 +1461,12 @@ if (!capable(CAP_SYS_ADMIN)) return -EPERM; p = (int *) arg; - retval = verify_area(VERIFY_READ, (void *) p, 2*sizeof(int)); - if (retval) - return(retval); - get_user(ent_count, p++); + if (get_user(ent_count, p++)) + return -EFAULT; if (ent_count < 0) return -EINVAL; - get_user(size, p++); - retval = verify_area(VERIFY_READ, (void *) p, size); - if (retval) - return retval; + if (get_user(size, p++)) + return -EFAULT; retval = random_write(file, (const char *) p, size, &file->f_pos); if (retval < 0) diff -u --recursive --new-file v2.1.128/linux/drivers/misc/parport_arc.c linux/drivers/misc/parport_arc.c --- v2.1.128/linux/drivers/misc/parport_arc.c Fri Oct 23 22:01:21 1998 +++ linux/drivers/misc/parport_arc.c Fri Nov 13 10:29:44 1998 @@ -141,7 +141,9 @@ printk(KERN_INFO "%s: Archimedes on-board port, using irq %d\n", p->irq); +#ifdef CONFIG_PROC_FS parport_proc_register(p); +#endif p->flags |= PARPORT_FLAG_COMA; if (parport_probe_hook) diff -u --recursive --new-file v2.1.128/linux/drivers/misc/parport_ax.c linux/drivers/misc/parport_ax.c --- v2.1.128/linux/drivers/misc/parport_ax.c Fri Oct 23 22:01:21 1998 +++ linux/drivers/misc/parport_ax.c Fri Nov 13 10:29:44 1998 @@ -585,7 +585,9 @@ printmode(ECPPS2); } printk("]\n"); +#ifdef CONFIG_PROC_FS parport_proc_register(p); +#endif p->flags |= PARPORT_FLAG_COMA; p->ops->write_control(p, 0x0c); @@ -628,7 +630,9 @@ if (p->modes & PARPORT_MODE_PCSPP) { if (!(p->flags & PARPORT_FLAG_COMA)) parport_quiesce(p); +#ifdef CONFIG_PROC_FS parport_proc_unregister(p); +#endif parport_unregister_port(p); } p = tmp; diff -u --recursive --new-file v2.1.128/linux/drivers/misc/parport_init.c linux/drivers/misc/parport_init.c --- v2.1.128/linux/drivers/misc/parport_init.c Tue Apr 14 14:29:20 1998 +++ linux/drivers/misc/parport_init.c Fri Nov 13 10:29:44 1998 @@ -98,13 +98,17 @@ #ifdef MODULE int init_module(void) { +#ifdef CONFIG_PROC_FS (void)parport_proc_init(); /* We can go on without it. */ +#endif return 0; } void cleanup_module(void) { +#ifdef CONFIG_PROC_FS parport_proc_cleanup(); +#endif } #else __initfunc(int parport_init(void)) @@ -115,7 +119,9 @@ #ifdef CONFIG_PNP_PARPORT parport_probe_hook = &parport_probe_one; #endif +#ifdef CONFIG_PROC_FS parport_proc_init(); +#endif #ifdef CONFIG_PARPORT_PC parport_pc_init(io, irq, dma); #endif @@ -139,8 +145,10 @@ EXPORT_SYMBOL(parport_enumerate); EXPORT_SYMBOL(parport_ieee1284_nibble_mode_ok); EXPORT_SYMBOL(parport_wait_peripheral); +#ifdef CONFIG_PROC_FS EXPORT_SYMBOL(parport_proc_register); EXPORT_SYMBOL(parport_proc_unregister); +#endif EXPORT_SYMBOL(parport_probe_hook); EXPORT_SYMBOL(parport_parse_irqs); diff -u --recursive --new-file v2.1.128/linux/drivers/misc/parport_pc.c linux/drivers/misc/parport_pc.c --- v2.1.128/linux/drivers/misc/parport_pc.c Sun Nov 8 14:02:59 1998 +++ linux/drivers/misc/parport_pc.c Fri Nov 13 10:29:44 1998 @@ -755,9 +755,11 @@ } #undef printmode printk("]\n"); +#ifdef CONFIG_PROC_FS if (probedirq != PARPORT_IRQ_NONE) printk("%s: detected irq %d; use procfs to enable interrupt-driven operation.\n", p->name, probedirq); parport_proc_register(p); +#endif p->flags |= PARPORT_FLAG_COMA; /* Done probing. Now put the port into a sensible start-up state. */ @@ -821,7 +823,9 @@ if (p->modes & PARPORT_MODE_PCSPP) { if (!(p->flags & PARPORT_FLAG_COMA)) parport_quiesce(p); +#ifdef CONFIG_PROC_FS parport_proc_unregister(p); +#endif parport_unregister_port(p); } p = tmp; diff -u --recursive --new-file v2.1.128/linux/drivers/net/3c59x.c linux/drivers/net/3c59x.c --- v2.1.128/linux/drivers/net/3c59x.c Thu Nov 12 16:21:19 1998 +++ linux/drivers/net/3c59x.c Fri Nov 13 10:29:44 1998 @@ -77,7 +77,6 @@ #include #include #include -#include #include #include diff -u --recursive --new-file v2.1.128/linux/drivers/net/Space.c linux/drivers/net/Space.c --- v2.1.128/linux/drivers/net/Space.c Thu Nov 12 16:21:19 1998 +++ linux/drivers/net/Space.c Fri Nov 13 10:29:43 1998 @@ -559,7 +559,7 @@ #if defined(CONFIG_LTPC) extern int ltpc_probe(struct device *); static struct device dev_ltpc = { - "ltalk0\0 ", + "lt0\0 ", 0, 0, 0, 0, 0x0, 0, 0, 0, 0, NEXT_DEV, ltpc_probe }; diff -u --recursive --new-file v2.1.128/linux/drivers/net/hamradio/mkiss.c linux/drivers/net/hamradio/mkiss.c --- v2.1.128/linux/drivers/net/hamradio/mkiss.c Sun Jul 26 11:57:16 1998 +++ linux/drivers/net/hamradio/mkiss.c Fri Nov 13 10:29:44 1998 @@ -894,7 +894,6 @@ static int ax25_disp_ioctl(struct tty_struct *tty, void *file, int cmd, void *arg) { struct ax_disp *ax = (struct ax_disp *)tty->disc_data; - int err; unsigned int tmp; /* First make sure we're connected. */ diff -u --recursive --new-file v2.1.128/linux/drivers/net/hostess_sv11.c linux/drivers/net/hostess_sv11.c --- v2.1.128/linux/drivers/net/hostess_sv11.c Fri Oct 23 22:01:21 1998 +++ linux/drivers/net/hostess_sv11.c Fri Nov 13 10:29:44 1998 @@ -160,8 +160,8 @@ static int hostess_ioctl(struct device *d, struct ifreq *ifr, int cmd) { - struct sv11_device *sv11=d->priv; - /* z8530_ioctl(d,&sv11->sync.chanA,ifr,cmd) */ + /* struct sv11_device *sv11=d->priv; + z8530_ioctl(d,&sv11->sync.chanA,ifr,cmd) */ return sppp_do_ioctl(d, ifr,cmd); } diff -u --recursive --new-file v2.1.128/linux/drivers/net/ltpc.c linux/drivers/net/ltpc.c --- v2.1.128/linux/drivers/net/ltpc.c Fri Oct 23 22:01:21 1998 +++ linux/drivers/net/ltpc.c Fri Nov 13 10:29:43 1998 @@ -67,6 +67,25 @@ * Hacked about a bit to clean things up - Alan Cox * Probably broken it from the origina 1.8 * + + * 1998/11/09: David Huggins-Daines + * Cleaned up the initialization code to use the standard autoirq methods, + and to probe for things in the standard order of i/o, irq, dma. This + removes the "reset the reset" hack, because I couldn't figure out an + easy way to get the card to trigger an interrupt after it. + * Added support for passing configuration parameters on the kernel command + line and through insmod + * Changed the device name from "ltalk0" to "lt0", both to conform with the + other localtalk driver, and to clear up the inconsistency between the + module and the non-module versions of the driver :-) + * Added a bunch of comments (I was going to make some enums for the state + codes and the register offsets, but I'm still not sure exactly what their + semantics are) + * Don't poll anymore in interrupt-driven mode + * It seems to work as a module now (as of 2.1.127), but I don't think + I'm responsible for that... + + * * Revision 1.7 1996/12/12 03:42:33 bradford * DMA alloc cribbed from 3c505.c. * @@ -180,6 +199,9 @@ #define DEBUG_UPPER 2 #define DEBUG_LOWER 4 +static int io=0; +static int irq=0; +static int dma=0; #ifdef MODULE #include @@ -245,25 +267,34 @@ return __get_dma_pages(GFP_KERNEL, order); } +/* DMA data buffer, DMA command buffer */ static unsigned char *ltdmabuf; static unsigned char *ltdmacbuf; +/* private struct, holds our appletalk address */ + struct ltpc_private { struct net_device_stats stats; struct at_addr my_addr; }; +/* transmit queue element struct */ + struct xmitQel { struct xmitQel *next; + /* command buffer */ unsigned char *cbuf; short cbuflen; + /* data buffer */ unsigned char *dbuf; short dbuflen; unsigned char QWrite; /* read or write data */ unsigned char mailbox; }; +/* the transmit queue itself */ + static struct xmitQel *xmQhd=NULL,*xmQtl=NULL; static void enQ(struct xmitQel *qel) @@ -310,8 +341,10 @@ return qel; } +/* and... the queue elements we'll be using */ static struct xmitQel qels[16]; +/* and their corresponding mailboxes */ static unsigned char mailbox[16]; static unsigned char mboxinuse[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; @@ -331,6 +364,8 @@ return 1; /* timed out */ } +/* get the first free mailbox */ + static int getmbox(void) { unsigned long flags; @@ -347,6 +382,7 @@ return 0; } +/* read a command from the card */ static void handlefc(struct device *dev) { /* called *only* from idle, non-reentrant */ @@ -370,6 +406,7 @@ if ( wait_timeout(dev,0xfc) ) printk("timed out in handlefc\n"); } +/* read data from the card */ static void handlefd(struct device *dev) { int dma = dev->dma; @@ -463,7 +500,8 @@ if ( wait_timeout(dev,0xfa) ) printk("timed out in handlecommand\n"); } -static unsigned char rescbuf[2] = {0,0}; +/* ready made command for getting the result from the card */ +static unsigned char rescbuf[2] = {LT_GETRESULT,0}; static unsigned char resdbuf[2]; static int QInIdle=0; @@ -482,7 +520,7 @@ struct xmitQel *q=0; int oops; int i; - int statusPort = dev->base_addr+6; + int base = dev->base_addr; save_flags(flags); cli(); @@ -495,8 +533,8 @@ restore_flags(flags); - - (void) inb_p(statusPort); /* this tri-states the IRQ line */ + /* this tri-states the IRQ line */ + (void) inb_p(base+6); oops = 100; @@ -506,19 +544,22 @@ goto done; } - state = inb_p(statusPort); - if (state != inb_p(statusPort)) goto loop; + state = inb_p(base+6); + if (state != inb_p(base+6)) goto loop; switch(state) { - case 0xfc: + case 0xfc: + /* incoming command */ if (debug&DEBUG_LOWER) printk("idle: fc\n"); handlefc(dev); break; - case 0xfd: + case 0xfd: + /* incoming data */ if(debug&DEBUG_LOWER) printk("idle: fd\n"); handlefd(dev); break; - case 0xf9: + case 0xf9: + /* result ready */ if (debug&DEBUG_LOWER) printk("idle: f9\n"); if(!mboxinuse[0]) { mboxinuse[0] = 1; @@ -536,6 +577,7 @@ printk("timed out idle f9\n"); break; case 0xf8: + /* ?? */ if (xmQhd) { inb_p(dev->base_addr+1); inb_p(dev->base_addr+0); @@ -545,7 +587,8 @@ goto done; } break; - case 0xfa: + case 0xfa: + /* waiting for command */ if(debug&DEBUG_LOWER) printk("idle: fa\n"); if (xmQhd) { q=deQ(); @@ -561,7 +604,7 @@ printk("\n"); } handlecommand(dev); - if(0xfa==inb_p(statusPort)) { + if(0xfa==inb_p(base+6)) { /* we timed out, so return */ goto done; } @@ -582,13 +625,17 @@ } } break; - case 0xfb: + case 0Xfb: + /* data transfer ready */ if(debug&DEBUG_LOWER) printk("idle: fb\n"); if(q->QWrite) { memcpy(ltdmabuf,q->dbuf,q->dbuflen); handlewrite(dev); } else { handleread(dev); + /* non-zero mailbox numbers are for + commmands, 0 is for GETRESULT + requests */ if(q->mailbox) { memcpy(q->dbuf,ltdmabuf,q->dbuflen); } else { @@ -605,13 +652,14 @@ QInIdle=0; /* now set the interrupts back as appropriate */ - /* the first 7 takes it out of tri-state (but still high) */ + /* the first read takes it out of tri-state (but still high) */ /* the second resets it */ - /* note that after this point, any read of 6 will trigger an interrupt */ + /* note that after this point, any read of base+6 will + trigger an interrupt */ if (dev->irq) { - inb_p(dev->base_addr+7); - inb_p(dev->base_addr+7); + inb_p(base+7); + inb_p(base+7); } return; } @@ -703,6 +751,8 @@ return do_write(dev, &c, sizeof(c.setflags),&c,0); } +/* LLAP to DDP translation */ + static int sendup_buffer (struct device *dev) { /* on entry, command is in ltdmacbuf, data in ltdmabuf */ @@ -912,23 +962,14 @@ if (!dev) return; /* we've been downed */ - if (dev->irq) - { - /* we're set up for interrupts */ - if (0xf8 != inb_p(dev->base_addr+7)) { - /* trigger an interrupt */ - (void) inb_p(dev->base_addr+6); - } - ltpc_timer.expires = jiffies+100; - } else { - /* we're strictly polling mode */ - idle(dev); - ltpc_timer.expires = jiffies+5; - } - + idle(dev); + ltpc_timer.expires = jiffies+5; + add_timer(<pc_timer); } +/* DDP to LLAP translation */ + static int ltpc_xmit(struct sk_buff *skb, struct device *dev) { /* in kernel 1.3.xx, on entry skb->data points to ddp header, @@ -975,150 +1016,18 @@ return stats; } -static unsigned short irqhitmask; - -__initfunc(static void lt_probe_handler(int irq, void *dev_id, struct pt_regs *reg_ptr)) -{ - irqhitmask |= 1<jiffies) ; /* wait for strays */ - - straymask = irqhitmask; /* pick up any strays */ - - /* if someone already owns this address, don't probe */ - if (!check_region(0x220,8)) { - inb_p(0x227); - inb_p(0x227); - x=inb_p(0x226); - timeout = jiffies+2; - while(timeout>jiffies) ; - if(straymask != irqhitmask) base = 0x220; - } - if (!check_region(0x240,8)) { - inb_p(0x247); - inb_p(0x247); - y=inb_p(0x246); - timeout = jiffies+2; - while(timeout>jiffies) ; - if(straymask != irqhitmask) base = 0x240; - } - - /* at this point, either we have an irq and the base addr, or - * there isn't any irq and we don't know the base address, but - * in either event the card is no longer latched in reset and - * the irq request line is tri-stated. - */ - - cli(); - - if (!probe3) free_irq(3,dev); - if (!probe4) free_irq(4,dev); - if (!probe9) free_irq(9,dev); - - sti(); - - irqhitmask &= ~straymask; - - irq = ffz(~irqhitmask); - if (irqhitmask != 1<=0xf0) ) base = 0x220; - } - - if (!check_region(0x240,8)) { - y = inb_p(0x240+6); - if ( (y!=0xff) && (y>=0xf0) ) base = 0x240; - } - } - - if(base) { - request_region(base,8,"ltpc"); - } else { - printk("LocalTalk card not found; 220 = %02x, 240 = %02x.\n",x,y); - restore_flags(flags); - return -1; - } - - ltdmabuf = (unsigned char *) dma_mem_alloc(1000); - - if (ltdmabuf) ltdmacbuf = <dmabuf[800]; - - if (!ltdmabuf) { - printk("ltpc: mem alloc failed\n"); - restore_flags(flags); - return(-1); - } - - if(debug&DEBUG_VERBOSE) { - printk("ltdmabuf pointer %08lx\n",(unsigned long) ltdmabuf); - } - - /* reset the card */ - - inb_p(base+1); - inb_p(base+3); - timeout = jiffies+2; - while(timeout>jiffies) ; /* hold it in reset for a coupla jiffies */ - inb_p(base+0); - inb_p(base+2); - inb_p(base+7); /* clear reset */ - inb_p(base+4); - inb_p(base+5); - inb_p(base+5); /* enable dma */ - inb_p(base+6); /* tri-state interrupt line */ - - timeout = jiffies+100; - - while(timeout>jiffies) { - /* wait for the card to complete initialization */ - } - - /* now, figure out which dma channel we're using */ - - /* set up both dma 1 and 3 for read call */ - - if (!request_dma(1,"ltpc")) { - - f=claim_dma_lock(); - disable_dma(1); - clear_dma_ff(1); + int dma = 0; + int timeout; + unsigned long f; + + if (!request_dma(1,"ltpc")) { + f=claim_dma_lock(); + disable_dma(1); + clear_dma_ff(1); set_dma_mode(1,DMA_MODE_WRITE); set_dma_addr(1,virt_to_bus(ltdmabuf)); set_dma_count(1,sizeof(struct lt_mem)); @@ -1142,26 +1051,26 @@ /* FIXME -- do timings better! */ - ltdmabuf[0] = 2; /* read request */ + ltdmabuf[0] = LT_READMEM; ltdmabuf[1] = 1; /* mailbox */ ltdmabuf[2] = 0; ltdmabuf[3] = 0; /* address */ ltdmabuf[4] = 0; ltdmabuf[5] = 1; /* read 0x0100 bytes */ ltdmabuf[6] = 0; /* dunno if this is necessary */ - inb_p(base+1); - inb_p(base+0); + inb_p(io+1); + inb_p(io+0); timeout = jiffies+100; while(timeout>jiffies) { - if ( 0xfa == inb_p(base+6) ) break; + if ( 0xfa == inb_p(io+6) ) break; } - inb_p(base+3); - inb_p(base+2); + inb_p(io+3); + inb_p(io+2); while(timeout>jiffies) { - if ( 0xfb == inb_p(base+6) ) break; + if ( 0xfb == inb_p(io+6) ) break; } - /* release the other dma channel */ + /* release the other dma channel (if we opened both of them) */ if ( (dma&0x2) && (get_dma_residue(3)==sizeof(struct lt_mem)) ){ dma&=1; @@ -1172,31 +1081,134 @@ dma&=0x2; free_dma(1); } - - if (!dma) { /* no dma channel */ - printk("No DMA channel found on ltpc card.\n"); - restore_flags(flags); - return -1; - } - + /* fix up dma number */ dma|=1; - /* set up read */ + return dma; +} + +__initfunc(int ltpc_probe(struct device *dev)) +{ + int err; + int x=0,y=0; + int timeout; + int autoirq; + unsigned long flags; + unsigned long f; + + save_flags(flags); + + /* probe for the I/O port address */ + if (io != 0x240 && !check_region(0x220,8)) { + x = inb_p(0x220+6); + if ( (x!=0xff) && (x>=0xf0) ) io = 0x220; + } + + if (io != 0x220 && !check_region(0x240,8)) { + y = inb_p(0x240+6); + if ( (y!=0xff) && (y>=0xf0) ) io = 0x240; + } + + if(io) { + /* found it, now grab it */ + request_region(io,8,"ltpc"); + } else { + /* give up in despair */ + printk ("LocalTalk card not found; 220 = %02x, 240 = %02x.\n", + x,y); + restore_flags(flags); + return -1; + } + + /* probe for the IRQ line */ + if (irq < 2) { + autoirq_setup(2); + + /* reset the interrupt line */ + inb_p(io+7); + inb_p(io+7); + /* trigger an interrupt (I hope) */ + inb_p(io+6); + + autoirq = autoirq_report(1); + + if (autoirq == 0) { + printk("ltpc: probe at %#x failed to detect IRQ line.\n", + io); + } + else { + irq = autoirq; + } + } + + /* allocate a DMA buffer */ + ltdmabuf = (unsigned char *) dma_mem_alloc(1000); + + if (ltdmabuf) ltdmacbuf = <dmabuf[800]; + + if (!ltdmabuf) { + printk("ltpc: mem alloc failed\n"); + restore_flags(flags); + return(-1); + } + + if(debug&DEBUG_VERBOSE) { + printk("ltdmabuf pointer %08lx\n",(unsigned long) ltdmabuf); + } + + /* reset the card */ + + inb_p(io+1); + inb_p(io+3); + timeout = jiffies+2; + while(timeout>jiffies) ; /* hold it in reset for a coupla jiffies */ + inb_p(io+0); + inb_p(io+2); + inb_p(io+7); /* clear reset */ + inb_p(io+4); + inb_p(io+5); + inb_p(io+5); /* enable dma */ + inb_p(io+6); /* tri-state interrupt line */ + + timeout = jiffies+100; + + while(timeout>jiffies) { + /* wait for the card to complete initialization */ + } + + /* now, figure out which dma channel we're using, unless it's + already been specified */ + /* well, 0 is a legal DMA channel, but the LTPC card doesn't + use it... */ + if (dma == 0) { + dma = ltpc_probe_dma(io); + if (!dma) { /* no dma channel */ + printk("No DMA channel found on ltpc card.\n"); + restore_flags(flags); + return -1; + } + } + + /* print out friendly message */ if(irq) - printk("LocalTalk card found at %03x, IR%d, DMA%d.\n",base,irq,dma); + printk("Apple/Farallon LocalTalk-PC card at %03x, IR%d, DMA%d.\n",io,irq,dma); else - printk("LocalTalk card found at %03x, DMA%d. Using polled mode.\n",base,dma); - - dev->base_addr = base; + printk("Apple/Farallon LocalTalk-PC card at %03x, DMA%d. Using polled mode.\n",io,dma); + + /* seems more logical to do this *after* probing the card... */ + err = ltpc_init(dev); + if (err) return err; + + dev->base_addr = io; dev->irq = irq; dev->dma = dma; - if(debug&DEBUG_VERBOSE) { - printk("finishing up transfer\n"); - } - + /* the card will want to send a result at this point */ + /* (I think... leaving out this part makes the kernel crash, + so I put it back in...) */ + f=claim_dma_lock(); disable_dma(dma); clear_dma_ff(dma); @@ -1206,41 +1218,65 @@ enable_dma(dma); release_dma_lock(f); - (void) inb_p(base+3); - (void) inb_p(base+2); + (void) inb_p(io+3); + (void) inb_p(io+2); timeout = jiffies+100; while(timeout>jiffies) { - if( 0xf9 == inb_p(base+6)) break; + if( 0xf9 == inb_p(io+6)) break; } if(debug&DEBUG_VERBOSE) { printk("setting up timer and irq\n"); } - init_timer(<pc_timer); - ltpc_timer.function=ltpc_poll; - ltpc_timer.data = (unsigned long) dev; - if (irq) { + /* grab it and don't let go :-) */ (void) request_irq( irq, <pc_interrupt, 0, "ltpc", dev); - (void) inb_p(base+7); /* enable interrupts from board */ - (void) inb_p(base+7); /* and reset irq line */ - ltpc_timer.expires = 100; - /* poll it once per second just in case */ + (void) inb_p(io+7); /* enable interrupts from board */ + (void) inb_p(io+7); /* and reset irq line */ } else { - ltpc_timer.expires = 5; - /* polled mode -- 20 times per second */ - } - - ltpc_timer.expires += jiffies; /* 1.2 to 1.3 change... */ + /* polled mode -- 20 times per second */ + /* this is really, really slow... should it poll more often? */ + init_timer(<pc_timer); + ltpc_timer.function=ltpc_poll; + ltpc_timer.data = (unsigned long) dev; - add_timer(<pc_timer); - - restore_flags(flags); + ltpc_timer.expires = jiffies + 5; + add_timer(<pc_timer); + restore_flags(flags); + } return 0; } +/* handles "ltpc=io,irq,dma" kernel command lines */ +__initfunc(void ltpc_setup(char *str, int *ints)) +{ + if (ints[0] == 0) { + if (str && !strncmp(str, "auto", 4)) { + /* do nothing :-) */ + } + else { + /* usage message */ + printk (KERN_ERR + "ltpc: usage: ltpc=auto|iobase[,irq[,dma]]\n"); + } + return; + } else { + io = ints[1]; + if (ints[0] > 1) { + irq = ints[2]; + return; + } + if (ints[0] > 2) { + dma = ints[3]; + return; + } + /* ignore any other paramters */ + } + return; +} + #ifdef MODULE static char dev_name[8]; @@ -1251,17 +1287,28 @@ 0x0, 0, 0, 0, 0, NULL, ltpc_probe }; +MODULE_PARM(debug, "i"); +MODULE_PARM(io, "i"); +MODULE_PARM(irq, "i"); +MODULE_PARM(dma, "i"); + int init_module(void) { + int err, result; + + if(io == 0) + printk(KERN_NOTICE + "ltpc: Autoprobing is not recommended for modules\n"); + /* Find a name for this unit */ - int err=dev_alloc_name(&dev_ltpc,"lt%d"); + err=dev_alloc_name(&dev_ltpc,"lt%d"); if(err<0) return err; - if (register_netdev(&dev_ltpc) != 0) { - if(debug&DEBUG_VERBOSE) printk("EIO from register_netdev\n"); - return -EIO; + if ((result = register_netdev(&dev_ltpc)) != 0) { + printk(KERN_DEBUG "could not register Localtalk-PC device\n"); + return result; } else { if(debug&DEBUG_VERBOSE) printk("0 from register_netdev\n"); return 0; @@ -1322,3 +1369,4 @@ if(debug&DEBUG_VERBOSE) printk("returning from cleanup_module\n"); } #endif /* MODULE */ + diff -u --recursive --new-file v2.1.128/linux/drivers/net/shaper.c linux/drivers/net/shaper.c --- v2.1.128/linux/drivers/net/shaper.c Tue Aug 18 22:02:04 1998 +++ linux/drivers/net/shaper.c Fri Nov 13 10:29:44 1998 @@ -157,7 +157,7 @@ skb->shapelatency=0; skb->shapeclock=shaper->recovery; - if(skb->shapeclockshapeclock, jiffies)) skb->shapeclock=jiffies; skb->priority=0; /* short term bug fix */ skb->shapestamp=jiffies; @@ -320,7 +320,7 @@ if(sh_debug) printk("Clock = %d, jiffies = %ld\n", skb->shapeclock, jiffies); - if(skb->shapeclock <= jiffies + SHAPER_BURST) + if(skb->shapeclock - jiffies <= SHAPER_BURST) { /* * Pull the frame and get interrupts back on. @@ -385,10 +385,14 @@ /* * Can't open until attached. + * Also can't open until speed is set, or we'll get + * a division by zero. */ if(shaper->dev==NULL) return -ENODEV; + if(shaper->bitspersec==0) + return -EINVAL; MOD_INC_USE_COUNT; return 0; } @@ -543,6 +547,7 @@ shdev->type=dev->type; shdev->addr_len=dev->addr_len; shdev->mtu=dev->mtu; + sh->bitspersec=0; return 0; } @@ -564,7 +569,7 @@ case SHAPER_GET_DEV: if(sh->dev==NULL) return -ENODEV; - memcpy(ss->ss_name, sh->dev->name, sizeof(ss->ss_name)); + strcpy(ss->ss_name, sh->dev->name); return 0; case SHAPER_SET_SPEED: shaper_setspeed(sh,ss->ss_speed); diff -u --recursive --new-file v2.1.128/linux/drivers/net/syncppp.c linux/drivers/net/syncppp.c --- v2.1.128/linux/drivers/net/syncppp.c Fri Oct 23 22:01:21 1998 +++ linux/drivers/net/syncppp.c Fri Nov 13 10:29:44 1998 @@ -859,6 +859,9 @@ if(dev->flags&IFF_UP) return -EBUSY; + if(!capable(CAP_NET_ADMIN)) + return -EPERM; + switch(cmd) { case SPPPIOCCISCO: @@ -872,11 +875,7 @@ case SPPPIOCDEBUG: sp->pp_flags&=~PP_DEBUG; if(ifr->ifr_flags) - { - if(!capable(CAP_NET_ADMIN)) - return -EPERM; sp->pp_flags|=PP_DEBUG; - } break; default: return -EINVAL; diff -u --recursive --new-file v2.1.128/linux/drivers/scsi/NCR5380.c linux/drivers/scsi/NCR5380.c --- v2.1.128/linux/drivers/scsi/NCR5380.c Wed Sep 9 14:51:08 1998 +++ linux/drivers/scsi/NCR5380.c Fri Nov 13 10:29:44 1998 @@ -686,7 +686,7 @@ save_flags(flags); cli(); for (; expires_first && - ((struct NCR5380_hostdata *)expires_first->hostdata)->time_expires <= jiffies; ) + time_before_eq(((struct NCR5380_hostdata *)expires_first->hostdata)->time_expires, jiffies); ) { instance = ((struct NCR5380_hostdata *) expires_first->hostdata)->next_timer; ((struct NCR5380_hostdata *) expires_first->hostdata)->next_timer = NULL; @@ -776,7 +776,7 @@ NCR5380_write(INITIATOR_COMMAND_REG, ICR_BASE | ICR_ASSERT_DATA | ICR_ASSERT_SEL); - while (probe_irq == IRQ_NONE && jiffies < timeout) + while (probe_irq == IRQ_NONE && time_before(jiffies,timeout)) barrier(); NCR5380_write(SELECT_ENABLE_REG, 0); @@ -1123,7 +1123,7 @@ printk("scsi%d: SCSI bus busy, waiting up to five seconds\n", instance->host_no); timeout = jiffies + 5 * HZ; - while (jiffies < timeout && (NCR5380_read(STATUS_REG) & SR_BSY)); + while (time_before(jiffies,timeout) && (NCR5380_read(STATUS_REG) & SR_BSY)); break; case 2: printk("scsi%d: bus busy, attempting abort\n", @@ -1417,7 +1417,7 @@ && !hostdata->dmalen #endif #ifdef USLEEP - && (!hostdata->time_expires || hostdata->time_expires <= jiffies) + && (!hostdata->time_expires || time_before_eq(hostdata->time_expires, jiffies)) #endif ) { restore_flags(flags); @@ -1532,10 +1532,10 @@ spin_unlock_irq(&io_request_lock); while (NCR5380_read(BUS_AND_STATUS_REG) & BASR_ACK - && jiffies < timeout); + && time_before(jiffies, timeout)); spin_lock_irq(&io_request_lock); - if (jiffies >= timeout) + if (time_after_eq(jiffies, timeout) ) printk("scsi%d: timeout at NCR5380.c:%d\n", host->host_no, __LINE__); } @@ -1681,11 +1681,11 @@ spin_unlock_irq(&io_request_lock); while (!(NCR5380_read(INITIATOR_COMMAND_REG) & ICR_ARBITRATION_PROGRESS) - && jiffies < timeout); + && time_before(jiffies,timeout)); spin_lock_irq(&io_request_lock); - if (jiffies >= timeout) { + if (time_after_eq(jiffies,timeout)) { printk("scsi: arbitration timeout at %d\n", __LINE__); NCR5380_write(MODE_REG, MR_BASE); NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask); @@ -1844,7 +1844,7 @@ waiting period */ #else spin_unlock_irq(&io_request_lock); - while ((jiffies < timeout) && !(NCR5380_read(STATUS_REG) & + while (time_before(jiffies, timeout) && !(NCR5380_read(STATUS_REG) & (SR_BSY | SR_IO))); spin_lock_irq(&io_request_lock); #endif @@ -1915,10 +1915,10 @@ unsigned long timeout = jiffies + NCR_TIMEOUT; spin_unlock_irq(&io_request_lock); - while (!(NCR5380_read(STATUS_REG) & SR_REQ) && jiffies < timeout); + while (!(NCR5380_read(STATUS_REG) & SR_REQ) && time_before(jiffies, timeout)); spin_lock_irq(&io_request_lock); - if (jiffies >= timeout) { + if (time_after_eq(jiffies, timeout)) { printk("scsi%d: timeout at NCR5380.c:%d\n", __LINE__); NCR5380_write(SELECT_ENABLE_REG, hostdata->id_mask); return -1; @@ -3082,7 +3082,7 @@ { /* RvC: go to sleep if polling time expired */ - if (!cmd->device->disconnect && jiffies >= poll_time) + if (!cmd->device->disconnect && time_after_eq(jiffies, poll_time)) { hostdata->time_expires = jiffies + USLEEP_SLEEP; #if (NDEBUG & NDEBUG_USLEEP) diff -u --recursive --new-file v2.1.128/linux/drivers/scsi/scsi.c linux/drivers/scsi/scsi.c --- v2.1.128/linux/drivers/scsi/scsi.c Fri Oct 23 22:01:21 1998 +++ linux/drivers/scsi/scsi.c Fri Nov 13 10:16:15 1998 @@ -226,6 +226,7 @@ {"MEDIAVIS","RENO CD-ROMX2A","2.03",BLIST_NOLUN},/*Responds to all lun */ {"MICROP", "4110", "*", BLIST_NOTQ}, /* Buggy Tagged Queuing */ {"NEC","CD-ROM DRIVE:841","1.0", BLIST_NOLUN}, /* Locks-up when LUN>0 polled. */ +{"PHILIPS", "PCA80SC", "V4-2", BLIST_NOLUN}, /* Responds to all lun */ {"RODIME","RO3000S","2.33", BLIST_NOLUN}, /* Locks up if polled for lun != 0 */ {"SANYO", "CRD-250S", "1.20", BLIST_NOLUN}, /* causes failed REQUEST SENSE on lun 1 * for aha152x controller, which causes diff -u --recursive --new-file v2.1.128/linux/drivers/scsi/scsi_proc.c linux/drivers/scsi/scsi_proc.c --- v2.1.128/linux/drivers/scsi/scsi_proc.c Tue Jun 23 10:01:24 1998 +++ linux/drivers/scsi/scsi_proc.c Fri Nov 13 10:16:15 1998 @@ -110,14 +110,29 @@ return(-EBADF); } +static void scsi_proc_fill_inode(struct inode *inode, int fill) +{ +Scsi_Host_Template *shpnt; + +shpnt = scsi_hosts; +while (shpnt && shpnt->proc_dir->low_ino != inode->i_ino) + shpnt = shpnt->next; +if (!shpnt || !shpnt->module) + return; +if (fill) + __MOD_INC_USE_COUNT(shpnt->module); +else + __MOD_DEC_USE_COUNT(shpnt->module); +} + void build_proc_dir_entries(Scsi_Host_Template *tpnt) { struct Scsi_Host *hpnt; - struct scsi_dir *scsi_hba_dir; proc_scsi_register(0, tpnt->proc_dir); - + tpnt->proc_dir->fill_inode = &scsi_proc_fill_inode; + hpnt = scsi_hostlist; while (hpnt) { if (tpnt == hpnt->hostt) { diff -u --recursive --new-file v2.1.128/linux/drivers/sound/ad1848.c linux/drivers/sound/ad1848.c --- v2.1.128/linux/drivers/sound/ad1848.c Thu Nov 12 16:21:21 1998 +++ linux/drivers/sound/ad1848.c Fri Nov 13 10:29:44 1998 @@ -1934,7 +1934,7 @@ if (!share_dma) { - if (irq > 0) + if (devc->irq > 0) /* There is no point in freeing irq, if it wasn't allocated */ free_irq(devc->irq, (void *)devc->dev_no); sound_free_dma(audio_devs[dev]->dmap_out->dma); diff -u --recursive --new-file v2.1.128/linux/drivers/sound/soundcard.c linux/drivers/sound/soundcard.c --- v2.1.128/linux/drivers/sound/soundcard.c Thu Nov 12 16:21:22 1998 +++ linux/drivers/sound/soundcard.c Fri Nov 13 10:29:44 1998 @@ -292,11 +292,13 @@ return len; } +#ifdef CONFIG_PROC_FS static struct proc_dir_entry proc_root_sound = { PROC_SOUND, 5, "sound", S_IFREG | S_IRUGO, 1, 0, 0, 0, NULL, sound_proc_get_info }; +#endif #ifndef MIN #define MIN(a,b) (((a) < (b)) ? (a) : (b)) @@ -842,8 +844,10 @@ audio_init_devices(); } #endif +#ifdef CONFIG_PROC_FS if (proc_register(&proc_root, &proc_root_sound)) printk(KERN_ERR "sound: registering /proc/sound failed\n"); +#endif } static int sound[20] = { diff -u --recursive --new-file v2.1.128/linux/drivers/video/Config.in linux/drivers/video/Config.in --- v2.1.128/linux/drivers/video/Config.in Fri Oct 23 22:01:22 1998 +++ linux/drivers/video/Config.in Fri Nov 13 10:10:11 1998 @@ -22,6 +22,7 @@ tristate 'Amiga CyberVision support' CONFIG_FB_CYBER if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then bool 'Amiga CyberVision3D support (experimental)' CONFIG_FB_VIRGE + bool 'Amiga CyberVisionPPC support (experimental)' CONFIG_FB_CVPPC tristate 'Amiga RetinaZ3 support' CONFIG_FB_RETINAZ3 tristate 'Amiga CLgen driver' CONFIG_FB_CLGEN fi @@ -55,6 +56,17 @@ bool 'VESA VGA graphics console' CONFIG_FB_VESA define_bool CONFIG_VIDEO_SELECT y fi + if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then + if [ "$CONFIG_PCI" != "n" ]; then + tristate 'Matrox acceleration' CONFIG_FB_MATROX + if [ "$CONFIG_FB_MATROX" != "n" ]; then + bool ' Millenium I/II support' CONFIG_FB_MATROX_MILLENIUM + bool ' Mystique support' CONFIG_FB_MATROX_MYSTIQUE + bool ' G100/G200 support' CONFIG_FB_MATROX_G100 + bool ' Multihead support' CONFIG_FB_MATROX_MULTIHEAD + fi + fi + fi if [ "$ARCH" = "sparc" -o "$ARCH" = "sparc64" ]; then bool 'SBUS and UPA framebuffers' CONFIG_FB_SBUS if [ "$CONFIG_FB_SBUS" != "n" ]; then @@ -141,8 +153,9 @@ "$CONFIG_FB_TCX" = "y" -o "$CONFIG_FB_CGTHREE" = "y" -o \ "$CONFIG_FB_CONTROL" = "y" -o "$CONFIG_FB_CLGEN" = "y" -o \ "$CONFIG_FB_CGFOURTEEN" = "y" -o "$CONFIG_FB_G364" = "y" -o \ + "$CONFIG_FB_VIRGE" = "y" -o "$CONFIG_FB_CYBER" = "y" -o \ "$CONFIG_FB_VALKYRIE" = "y" -o "$CONFIG_FB_PLATINUM" = "y" -o \ - "$CONFIG_FB_IGA" = "y" ]; then + "$CONFIG_FB_IGA" = "y" -o "$CONFIG_FB_MATROX" = "y" ]; then define_bool CONFIG_FBCON_CFB8 y else if [ "$CONFIG_FB_ACORN" = "m" -o "$CONFIG_FB_ATARI" = "m" -o \ @@ -152,8 +165,9 @@ "$CONFIG_FB_TCX" = "m" -o "$CONFIG_FB_CGTHREE" = "m" -o \ "$CONFIG_FB_CONTROL" = "m" -o "$CONFIG_FB_CLGEN" = "m" -o \ "$CONFIG_FB_CGFOURTEEN" = "m" -o "$CONFIG_FB_G364" = "m" -o \ + "$CONFIG_FB_VIRGE" = "m" -o "$CONFIG_FB_CYBER" = "m" -o \ "$CONFIG_FB_VALKYRIE" = "m" -o "$CONFIG_FB_PLATINUM" = "m" -o \ - "$CONFIG_FB_IGA" = "y" ]; then + "$CONFIG_FB_IGA" = "m" -o "$CONFIG_FB_MATROX" = "m" ]; then define_bool CONFIG_FBCON_CFB8 m fi fi @@ -161,36 +175,44 @@ "$CONFIG_FB_MAC" = "y" -o "$CONFIG_FB_VESA" = "y" -o \ "$CONFIG_FB_VIRTUAL" = "y" -o "$CONFIG_FB_TBOX" = "y" -o \ "$CONFIG_FB_CONTROL" = "y" -o "$CONFIG_FB_CLGEN" = "y" -o \ - "$CONFIG_FB_VALKYRIE" = "y" -o "$CONFIG_FB_PLATINUM" = "y" ]; then + "$CONFIG_FB_VIRGE" = "y" -o "$CONFIG_FB_CYBER" = "y" -o \ + "$CONFIG_FB_VALKYRIE" = "y" -o "$CONFIG_FB_PLATINUM" = "y" -o \ + "$CONFIG_FB_MATROX" = "y" ]; then define_bool CONFIG_FBCON_CFB16 y else if [ "$CONFIG_FB_ATARI" = "m" -o "$CONFIG_FB_ATY" = "m" -o \ "$CONFIG_FB_MAC" = "m" -o "$CONFIG_FB_VESA" = "m" -o \ "$CONFIG_FB_VIRTUAL" = "m" -o "$CONFIG_FB_TBOX" = "m" -o \ "$CONFIG_FB_CONTROL" = "m" -o "$CONFIG_FB_CLGEN" = "m" -o \ - "$CONFIG_FB_VALKYRIE" = "m" -o "$CONFIG_FB_PLATINUM" = "m" ]; then + "$CONFIG_FB_VIRGE" = "m" -o "$CONFIG_FB_CYBER" = "m" -o \ + "$CONFIG_FB_VALKYRIE" = "m" -o "$CONFIG_FB_PLATINUM" = "m" -o \ + "$CONFIG_FB_MATROX" = "m" ]; then define_bool CONFIG_FBCON_CFB16 m fi fi if [ "$CONFIG_FB_ATY" = "y" -o "$CONFIG_FB_VIRTUAL" = "y" -o \ - "$CONFIG_FB_CLGEN" = "y" -o "$CONFIG_FB_VESA" = "y" ]; then + "$CONFIG_FB_CLGEN" = "y" -o "$CONFIG_FB_VESA" = "y" -o \ + "$CONFIG_FB_MATROX" = "y" ]; then define_bool CONFIG_FBCON_CFB24 y else if [ "$CONFIG_FB_ATY" = "m" -o "$CONFIG_FB_VIRTUAL" = "m" -o \ - "$CONFIG_FB_CLGEN" = "m" -o "$CONFIG_FB_VESA" = "m" ]; then + "$CONFIG_FB_CLGEN" = "m" -o "$CONFIG_FB_VESA" = "m" -o \ + "$CONFIG_FB_MATROX" = "m" ]; then define_bool CONFIG_FBCON_CFB24 m fi fi if [ "$CONFIG_FB_ATARI" = "y" -o "$CONFIG_FB_ATY" = "y" -o \ "$CONFIG_FB_VESA" = "y" -o "$CONFIG_FB_VIRTUAL" = "y" -o \ "$CONFIG_FB_CONTROL" = "y" -o "$CONFIG_FB_CLGEN" = "y" -o \ - "$CONFIG_FB_TGA" = "y" -o "$CONFIG_FB_PLATINUM" = "y" ]; then + "$CONFIG_FB_TGA" = "y" -o "$CONFIG_FB_PLATINUM" = "y" -o \ + "$CONFIG_FB_MATROX" = "y" ]; then define_bool CONFIG_FBCON_CFB32 y else if [ "$CONFIG_FB_ATARI" = "m" -o "$CONFIG_FB_ATY" = "m" -o \ "$CONFIG_FB_VESA" = "m" -o "$CONFIG_FB_VIRTUAL" = "m" -o \ "$CONFIG_FB_CONTROL" = "m" -o "$CONFIG_FB_CLGEN" = "m" -o \ - "$CONFIG_FB_TGA" = "m" -o "$CONFIG_FB_PLATINUM" = "m" ]; then + "$CONFIG_FB_TGA" = "m" -o "$CONFIG_FB_PLATINUM" = "m" -o \ + "$CONFIG_FB_MATROX" = "m" ]; then define_bool CONFIG_FBCON_CFB32 m fi fi diff -u --recursive --new-file v2.1.128/linux/drivers/video/Makefile linux/drivers/video/Makefile --- v2.1.128/linux/drivers/video/Makefile Fri Oct 23 22:01:22 1998 +++ linux/drivers/video/Makefile Fri Nov 13 10:10:11 1998 @@ -123,6 +123,11 @@ endif endif +ifeq ($(CONFIG_FB_CVPPC),y) +L_OBJS += cvppcfb.o +CONFIG_FBGEN_BUILTIN = y +endif + ifeq ($(CONFIG_FB_MAC),y) L_OBJS += macfb.o endif @@ -308,6 +313,14 @@ else ifdef CONFIG_FBGEN_MODULE MX_OBJS += fbgen.o + endif +endif + +ifeq ($(CONFIG_FB_MATROX),y) +L_OBJS += matroxfb.o +else + ifeq ($(CONFIG_FB_MATROX),m) + M_OBJS += matroxfb.o endif endif diff -u --recursive --new-file v2.1.128/linux/drivers/video/amifb.c linux/drivers/video/amifb.c --- v2.1.128/linux/drivers/video/amifb.c Fri Oct 9 13:27:11 1998 +++ linux/drivers/video/amifb.c Fri Nov 13 10:10:11 1998 @@ -60,6 +60,7 @@ #include #include #include +#include #include