lines    added  deleted
linux/CREDITS                                   :      23       10        0
linux/Documentation/00-INDEX                    :      49        6        6
linux/Documentation/ARM-README                  :      35        7        7
linux/Documentation/Changes                     :      28        4        4
linux/Documentation/Configure.help              :    1293      522      258
linux/Documentation/arm/Netwinder               :      78       78        0
linux/Documentation/arm/README                  :     139      139        0
linux/Documentation/arm/nwfpe/NOTES             :      29       29        0
linux/Documentation/arm/nwfpe/README            :      70       70        0
linux/Documentation/arm/nwfpe/README.FPE        :     156      156        0
linux/Documentation/arm/nwfpe/TODO              :      67       67        0
linux/Documentation/digiboard.txt               :      29        4        4
linux/Documentation/digiepca.txt                :      17        2        2
linux/Documentation/fb/matroxfb.txt             :     137       27       27
linux/Documentation/fb/vesafb.txt               :      51        8        8
linux/Documentation/filesystems/00-INDEX        :       7        2        0
linux/Documentation/filesystems/adfs.txt        :      57       57        0
linux/Documentation/filesystems/coda.txt        :       8        1        1
linux/Documentation/filesystems/smbfs.txt       :       8        1        1
linux/Documentation/filesystems/vfat.txt        :       8        1        1
linux/Documentation/ftape.txt                   :      12        3        3
linux/Documentation/kernel-docs.txt             :      48        7        7
linux/Documentation/m68k/kernel-options.txt     :     192       83       29
linux/Documentation/mtrr.txt                    :      23       17        0
linux/Documentation/networking/filter.txt       :       8        1        1
linux/Documentation/networking/ip-sysctl.txt    :      32        4        4
linux/Documentation/networking/ipddp.txt        :      59       13       13
linux/Documentation/networking/lapb-module.txt  :       8        1        1
linux/Documentation/networking/pt.txt           :       8        1        1
linux/Documentation/networking/routing.txt      :       7        1        1
linux/Documentation/powerpc/smp.txt             :      22        7        4
linux/Documentation/sound/AD1816                :      32       12        3
linux/Documentation/sound/AWE32                 :       8        1        1
linux/Documentation/sound/AudioExcelDSP16       :       8        1        1
linux/Documentation/sound/ChangeLog.awe         :       8        1        1
linux/Documentation/sound/INSTALL.awe           :      35        4        4
linux/Documentation/sound/Introduction          :      17        2        2
linux/Documentation/sound/MAD16                 :      12        9        0
linux/Documentation/sound/OPL3-SA               :      36        6        6
linux/Documentation/sound/README.OSS            :      28        4        4
linux/Documentation/sound/README.awe            :      86       14       14
linux/Documentation/sound/Wavefront             :       8        1        1
linux/Documentation/sysctl/vm.txt               :       8        1        1
linux/Documentation/video4linux/bttv/INSTALL    :       8        1        1
linux/MAINTAINERS                               :      16        2        2
linux/Makefile                                  :       7        1        1
linux/REPORTING-BUGS                            :      21        3        3
linux/arch/alpha/config.in                      :      33        1        8
linux/arch/alpha/kernel/entry.S                 :     757      269      277
linux/arch/alpha/kernel/osf_sys.c               :      84       28       10
linux/arch/alpha/kernel/process.c               :      78       19       12
linux/arch/alpha/kernel/smp.c                   :      73       21        4
linux/arch/alpha/kernel/traps.c                 :     138       29       37
linux/arch/alpha/lib/copy_user.S                :       8        1        1
linux/arch/alpha/math-emu/fp-emul.c             :     170       50       39
linux/arch/alpha/math-emu/ieee-math.c           :      50       39        0
linux/arch/alpha/math-emu/ieee-math.h           :       7        2        0
linux/arch/arm/kernel/sys_arm.c                 :      16        4        2
linux/arch/arm/mm/Makefile                      :      47       10       17
linux/arch/arm/mm/fault-armo.c                  :     234       26      135
linux/arch/arm/mm/fault-armv.c                  :     642      353      172
linux/arch/arm/mm/fault-common.c                :     188      188        0
linux/arch/arm/mm/init.c                        :     172       66       24
linux/arch/arm/mm/ioremap.c                     :     149      149        0
linux/arch/arm/mm/mm-arc.c                      :      82        0       82
linux/arch/arm/mm/mm-armv.c                     :      19        4        2
linux/arch/arm/mm/mm-ebsa285.c                  :      39        0       39
linux/arch/arm/mm/mm-footbridge.c               :      91       91        0
linux/arch/arm/mm/mm-vnc.c                      :      31        0       31
linux/arch/arm/mm/proc-arm2,3.S                 :      72       12        8
linux/arch/arm/mm/proc-arm6,7.S                 :     102       48       13
linux/arch/arm/mm/proc-sa110.S                  :     301       71       51
linux/arch/arm/mm/small_page.c                  :     165       49       24
linux/arch/i386/kernel/entry.S                  :       9        2        0
linux/arch/i386/kernel/i386_ksyms.c             :      16        2        1
linux/arch/i386/kernel/io_apic.c                :      39        6        4
linux/arch/i386/kernel/irq.c                    :     133       30       17
linux/arch/i386/kernel/irq.h                    :      24        2        2
linux/arch/i386/kernel/mca.c                    :     171       32       19
linux/arch/i386/kernel/mtrr.c                   :    1249      696      211
linux/arch/i386/kernel/process.c                :      17        4        0
linux/arch/i386/kernel/setup.c                  :     129       24       17
linux/arch/i386/kernel/smp.c                    :     207       99       26
linux/arch/i386/kernel/time.c                   :      43        7        5
linux/arch/i386/kernel/visws_apic.c             :      16        5        3
linux/arch/m68k/Makefile                        :      35       15        0
linux/arch/m68k/bvme6000/config.c               :      12        2        2
linux/arch/m68k/config.in                       :     214      101       12
linux/arch/m68k/kernel/entry.S                  :      42       19        1
linux/arch/m68k/kernel/head.S                   :     300      139        9
linux/arch/m68k/kernel/ints.c                   :      35       14        0
linux/arch/m68k/kernel/m68k_defs.h              :      50       44        3
linux/arch/m68k/kernel/m68k_ksyms.c             :      22        4        0
linux/arch/m68k/kernel/process.c                :      25        2       10
linux/arch/m68k/kernel/ptrace.c                 :      42        6        5
linux/arch/m68k/kernel/setup.c                  :     148       85        3
linux/arch/m68k/kernel/time.c                   :       6        1        1
linux/arch/m68k/lib/semaphore.S                 :      16       10        0
linux/arch/m68k/mm/init.c                       :      70       13        9
linux/arch/m68k/mm/kmap.c                       :      83       21        6
linux/arch/m68k/mm/memory.c                     :      52        7        7
linux/arch/m68k/mvme147/147ints.c               :     142      142        0
linux/arch/m68k/mvme147/Makefile                :      14       14        0
linux/arch/m68k/mvme147/config.c                :     240      240        0
linux/arch/m68k/mvme16x/config.c                :      12        2        2
linux/arch/m68k/q40/Makefile                    :      14       14        0
linux/arch/m68k/q40/README                      :     121      121        0
linux/arch/m68k/q40/config.c                    :     425      425        0
linux/arch/m68k/q40/q40ints.c                   :     347      347        0
linux/arch/m68k/sun3x/Makefile                  :      14       14        0
linux/arch/m68k/sun3x/config.c                  :     128      128        0
linux/arch/m68k/sun3x/dvma.c                    :     162      162        0
linux/arch/m68k/sun3x/sbus.c                    :      44       44        0
linux/arch/m68k/sun3x/time.c                    :      83       83        0
linux/arch/m68k/sun3x/time.h                    :       9        9        0
linux/arch/mips/kernel/irixioctl.c              :      17        4        2
linux/arch/mips/kernel/sysirix.c                :     481       90       91
linux/arch/ppc/boot/Makefile                    :      35        4        4
linux/arch/ppc/boot/head.S                      :      42       16        6
linux/arch/ppc/boot/kbd.c                       :      11        5        0
linux/arch/ppc/boot/misc.c                      :     157       46       17
linux/arch/ppc/boot/mkprep.c                    :      28        2        9
linux/arch/ppc/common_defconfig                 :     235       91       15
linux/arch/ppc/config.in                        :      56       20        7
linux/arch/ppc/defconfig                        :     232       73       24
linux/arch/ppc/kernel/Makefile                  :      18        3        2
linux/arch/ppc/kernel/align.c                   :      45        4       20
linux/arch/ppc/kernel/apus_setup.c              :     255      231        0
linux/arch/ppc/kernel/chrp_pci.c                :     382      145      128
linux/arch/ppc/kernel/chrp_setup.c              :     568      431       48
linux/arch/ppc/kernel/head.S                    :     268       87       65
linux/arch/ppc/kernel/i8259.c                   :     130      130        0
linux/arch/ppc/kernel/i8259.h                   :      12       12        0
linux/arch/ppc/kernel/idle.c                    :      22        9        2
linux/arch/ppc/kernel/indirect_pci.c            :     121      121        0
linux/arch/ppc/kernel/irq.c                     :    1012       81      800
linux/arch/ppc/kernel/local_irq.h               :      45       45        0
linux/arch/ppc/kernel/mbx_pci.c                 :      20       17        0
linux/arch/ppc/kernel/mbx_setup.c               :     404      351       26
linux/arch/ppc/kernel/misc.S                    :      93       31       14
linux/arch/ppc/kernel/mk_defs.c                 :      16        1        2
linux/arch/ppc/kernel/open_pic.c                :      48       48        0
linux/arch/ppc/kernel/open_pic.h                :      11       11        0
linux/arch/ppc/kernel/openpic.c                 :       9        3        0
linux/arch/ppc/kernel/pci.c                     :     301       14      235
linux/arch/ppc/kernel/pci.h                     :      36       36        0
linux/arch/ppc/kernel/pmac_pci.c                :      59       47        0
linux/arch/ppc/kernel/pmac_pic.c                :     362      362        0
linux/arch/ppc/kernel/pmac_pic.h                :      15       15        0
linux/arch/ppc/kernel/pmac_setup.c              :     242      206        6
linux/arch/ppc/kernel/ppc8xx_pic.c              :      49       49        0
linux/arch/ppc/kernel/ppc8xx_pic.h              :       9        9        0
linux/arch/ppc/kernel/ppc_ksyms.c               :      89       14       12
linux/arch/ppc/kernel/prep_nvram.c              :     173      173        0
linux/arch/ppc/kernel/prep_pci.c                :     910      559      180
linux/arch/ppc/kernel/prep_setup.c              :     625      562        1
linux/arch/ppc/kernel/prep_time.c               :     360      136      167
linux/arch/ppc/kernel/process.c                 :     207       53       44
linux/arch/ppc/kernel/prom.c                    :      63       10        3
linux/arch/ppc/kernel/ptrace.c                  :      32        4       15
linux/arch/ppc/kernel/setup.c                   :     761      225      370
linux/arch/ppc/kernel/signal.c                  :      40        5       15
linux/arch/ppc/kernel/smp.c                     :      22        5        1
linux/arch/ppc/kernel/syscalls.c                :      16        4        1
linux/arch/ppc/kernel/time.c                    :     290       20      211
linux/arch/ppc/kernel/time.h                    :      40        2       19
linux/arch/ppc/kernel/traps.c                   :      15        2        7
linux/arch/ppc/lib/strcase.c                    :      14       11        0
linux/arch/ppc/mbxboot/head.S                   :      17        2        2
linux/arch/ppc/mm/fault.c                       :       9        2        1
linux/arch/ppc/mm/init.c                        :     226       92       29
linux/arch/sparc/kernel/entry.S                 :      14        2        2
linux/arch/sparc/kernel/process.c               :      23        5        1
linux/arch/sparc/kernel/sun4d_smp.c             :      15        2        0
linux/arch/sparc/kernel/sun4m_smp.c             :      15        2        0
linux/arch/sparc/kernel/sys_sparc.c             :      14        2        2
linux/arch/sparc/mm/iommu.c                     :      85        9       54
linux/arch/sparc64/kernel/cpu.c                 :       8        1        1
linux/arch/sparc64/kernel/devices.c             :      10        4        1
linux/arch/sparc64/kernel/ebus.c                :      25        1        7
linux/arch/sparc64/kernel/entry.S               :      13        2        1
linux/arch/sparc64/kernel/ioctl32.c             :     321      282        1
linux/arch/sparc64/kernel/process.c             :      23        5        1
linux/arch/sparc64/kernel/smp.c                 :      50        3        7
linux/arch/sparc64/kernel/sparc64_ksyms.c       :      21        1        3
linux/arch/sparc64/mm/init.c                    :      15        2        3
linux/drivers/Makefile                          :      12        5        1
linux/drivers/block/Config.in                   :      22        9        7
linux/drivers/block/ide-cd.h                    :       8        1        1
linux/drivers/block/ide.c                       :       8        1        1
linux/drivers/block/rd.c                        :     273       90       29
linux/drivers/cdrom/cdrom.c                     :      69       14        9
linux/drivers/cdrom/mcdx.h                      :      10        2        0
linux/drivers/char/Config.in                    :       9        3        0
linux/drivers/char/Makefile                     :      29       10        2
linux/drivers/char/adbmouse.c                   :       8        1        1
linux/drivers/char/isicom.c                     :      23       17        0
linux/drivers/char/lp.c                         :      38        7        7
linux/drivers/char/mem.c                        :      28        9        1
linux/drivers/char/planb.c                      :    2389     2389        0
linux/drivers/char/planb.h                      :     229      229        0
linux/drivers/char/radio-cadet.c                :     426      241       30
linux/drivers/char/radio-typhoon.c              :      10        4        0
linux/drivers/char/radio-zoltrix.c              :     134       26       30
linux/drivers/char/saa7196.h                    :     117      117        0
linux/drivers/char/specialix.c                  :       9        3        0
linux/drivers/isdn/act2000/act2000.h            :       8        1        1
linux/drivers/isdn/act2000/module.c             :      81       12       12
linux/drivers/macintosh/Makefile                :      23        9        1
linux/drivers/macintosh/adb.c                   :     281      134       50
linux/drivers/macintosh/mac_keyb.c              :     431      240       71
linux/drivers/macintosh/macio-adb.c             :      61       25        7
linux/drivers/macintosh/macserial.c             :     233      150       12
linux/drivers/macintosh/nvram.c                 :      70       30        2
linux/drivers/macintosh/via-cuda.c              :     141       41       16
linux/drivers/macintosh/via-pmu.c               :     385      125       99
linux/drivers/misc/Makefile                     :      43       30        0
linux/drivers/misc/multiface.h                  :      20       20        0
linux/drivers/misc/parport_amiga.c              :     322      322        0
linux/drivers/misc/parport_atari.c              :     263      263        0
linux/drivers/misc/parport_ieee1284.c           :      30        5        8
linux/drivers/misc/parport_init.c               :      15        9        0
linux/drivers/misc/parport_mfc3.c               :     420      420        0
linux/drivers/misc/parport_pc.c                 :     148       72       11
linux/drivers/net/3c507.c                       :      68       14        0
linux/drivers/net/3c509.c                       :       8        1        1
linux/drivers/net/8390.c                        :      19        2        4
linux/drivers/net/de4x5.c                       :     199       69       44
linux/drivers/net/de4x5.h                       :       5        2        0
linux/drivers/net/eexpress.c                    :      96       28        0
linux/drivers/net/epic100.c                     :       7        1        0
linux/drivers/net/eql.c                         :       9        1        1
linux/drivers/net/ethertap.c                    :      24       13        3
linux/drivers/net/ibmtr.c                       :      43        5        3
linux/drivers/net/ppp.c                         :     215       69       17
linux/drivers/net/via-rhine.c                   :      19        3        2
linux/drivers/net/wavelan.c                     :     593      108      124
linux/drivers/net/wavelan.p.h                   :     121       48       28
linux/drivers/sbus/char/pcikbd.c                :      13        2        1
linux/drivers/scsi/Config.in                    :      10        1        3
linux/drivers/scsi/Makefile                     :      12        4        1
linux/drivers/scsi/README.ibmmca                :     979      979        0
linux/drivers/scsi/ibmmca.c                     :    3983     1923     1618
linux/drivers/scsi/ibmmca.h                     :      94       52       11
linux/drivers/scsi/imm.c                        :      18        3        0
linux/drivers/scsi/megaraid.c                   :    1130      420      255
linux/drivers/scsi/megaraid.h                   :     107       29       25
linux/drivers/scsi/ppa.c                        :      18        4        0
linux/drivers/scsi/scsi.c                       :      26        9        1
linux/drivers/scsi/scsi_ioctl.c                 :      19        4        3
linux/drivers/scsi/sd.c                         :      43       16        0
linux/drivers/scsi/sg.c                         :     499       91       96
linux/drivers/scsi/sr_ioctl.c                   :      47        9        5
linux/drivers/scsi/sr_vendor.c                  :      44        5        5
linux/drivers/sound/ad1816.c                    :      83       23        7
linux/drivers/sound/sb_ess.c                    :      81       29        4
linux/drivers/usb/CREDITS                       :     151      132        1
linux/drivers/usb/Config.in                     :      10        4        0
linux/drivers/usb/Makefile                      :      25       14        1
linux/drivers/usb/README.ohci                   :      30       22        4
linux/drivers/usb/README.ohci_hcd               :     112      112        0
linux/drivers/usb/hub.c                         :      42       15        2
linux/drivers/usb/inits.h                       :       5        2        0
linux/drivers/usb/mouse.c                       :      33        5       11
linux/drivers/usb/ohci-debug.c                  :     236      113       74
linux/drivers/usb/ohci-hcd.c                    :    1489     1489        0
linux/drivers/usb/ohci-hcd.h                    :     404      404        0
linux/drivers/usb/ohci-root-hub.c               :     604      604        0
linux/drivers/usb/ohci-root-hub.h               :      71       71        0
linux/drivers/usb/ohci.c                        :    1662      896      267
linux/drivers/usb/ohci.h                        :     190       76       28
linux/drivers/usb/restart                       :      37       12        9
linux/drivers/usb/stopusb                       :      11        3        4
linux/drivers/usb/uhci.c                        :      56       14        3
linux/drivers/usb/usb.c                         :     127       73       16
linux/drivers/usb/usb.h                         :     100       21       16
linux/drivers/video/matroxfb.c                  :      36        3       10
linux/drivers/video/offb.c                      :      18        2        3
linux/drivers/video/vesafb.c                    :      18        0        3
linux/fs/adfs/namei.c                           :       8        1        1
linux/fs/autofs/root.c                          :      17        2        2
linux/fs/binfmt_aout.c                          :      21       13        2
linux/fs/binfmt_elf.c                           :      12        5        1
linux/fs/buffer.c                               :     397      136      174
linux/fs/coda/dir.c                             :      17        2        2
linux/fs/devpts/root.c                          :      17        2        2
linux/fs/dquot.c                                :     128       38       59
linux/fs/exec.c                                 :       7        0        1
linux/fs/ext2/inode.c                           :      36       15        5
linux/fs/ext2/namei.c                           :       8        0        2
linux/fs/hfs/sysdep.c                           :      17        2        2
linux/fs/inode.c                                :       7        1        0
linux/fs/isofs/namei.c                          :       7        0        1
linux/fs/locks.c                                :      20        4        2
linux/fs/minix/namei.c                          :      63        1       28
linux/fs/namei.c                                :      63        6       18
linux/fs/ncpfs/dir.c                            :      25        3        3
linux/fs/nfs/dir.c                              :     130       57       22
linux/fs/nfs/file.c                             :      11        2        2
linux/fs/nfs/inode.c                            :      22       16        0
linux/fs/proc/array.c                           :      18        3        2
linux/fs/qnx4/namei.c                           :      14        2        6
linux/fs/smbfs/dir.c                            :      25        3        3
linux/fs/super.c                                :      32       13        2
linux/fs/sysv/namei.c                           :       8        0        2
linux/fs/ufs/namei.c                            :       8        0        2
linux/fs/umsdos/dir.c                           :      17        2        2
linux/fs/vfat/namei.c                           :      17        2        2
linux/include/asm-alpha/fpu.h                   :      18       12        0
linux/include/asm-alpha/pgtable.h               :      19        0       13
linux/include/asm-alpha/semaphore.h             :       8        1        1
linux/include/asm-alpha/system.h                :      62       36        4
linux/include/asm-arm/a.out.h                   :       9        2        0
linux/include/asm-arm/arch-arc/a.out.h          :      20        4        6
linux/include/asm-arm/arch-arc/hardware.h       :      72       17        7
linux/include/asm-arm/arch-arc/irq.h            :      28       11        1
linux/include/asm-arm/arch-arc/keyboard.h       :      20        1        6
linux/include/asm-arm/arch-arc/memory.h         :      41       41        0
linux/include/asm-arm/arch-arc/mmu.h            :      29        0       29
linux/include/asm-arm/arch-arc/oldlatches.h     :       8        2        0
linux/include/asm-arm/arch-arc/processor.h      :      38        5       10
linux/include/asm-arm/arch-arc/time.h           :     181      128       31
linux/include/asm-arm/arch-arc/uncompress.h     :       8        0        2
linux/include/asm-arm/arch-ebsa110/a.out.h      :      21        6        5
linux/include/asm-arm/arch-ebsa110/hardware.h   :      56        8       14
linux/include/asm-arm/arch-ebsa110/irq.h        :       8        2        0
linux/include/asm-arm/arch-ebsa110/memory.h     :      35       35        0
linux/include/asm-arm/arch-ebsa110/mm-init.h    :       5        0        5
linux/include/asm-arm/arch-ebsa110/mmu.h        :      23        0       23
linux/include/asm-arm/arch-ebsa110/oldlatches.h :       9        0        9
linux/include/asm-arm/arch-ebsa110/processor.h  :      36        6        9
linux/include/asm-arm/arch-ebsa110/time.h       :      97       34       30
linux/include/asm-arm/arch-ebsa285/a.out.h      :      21        6        5
linux/include/asm-arm/arch-ebsa285/dma.h        :      31       10        6
linux/include/asm-arm/arch-ebsa285/hardware.h   :     149      102       14
linux/include/asm-arm/arch-ebsa285/io.h         :     303      123      128
linux/include/asm-arm/arch-ebsa285/irq.h        :     300      164       94
linux/include/asm-arm/arch-ebsa285/irqs.h       :     127       72       42
linux/include/asm-arm/arch-ebsa285/keyboard.h   :      98       41       35
linux/include/asm-arm/arch-ebsa285/memory.h     :      74       74        0
linux/include/asm-arm/arch-ebsa285/mm-init.h    :       5        0        5
linux/include/asm-arm/arch-ebsa285/mmu.h        :      28        0       28
linux/include/asm-arm/arch-ebsa285/oldlatches.h :       9        0        9
linux/include/asm-arm/arch-ebsa285/processor.h  :      36        6        9
linux/include/asm-arm/arch-ebsa285/serial.h     :      24        2        9
linux/include/asm-arm/arch-ebsa285/system.h     :      53       32        7
linux/include/asm-arm/arch-ebsa285/time.h       :     425      309       79
linux/include/asm-arm/arch-ebsa285/timex.h      :      11        3        3
linux/include/asm-arm/arch-ebsa285/uncompress.h :      13        4        1
linux/include/asm-arm/arch-nexuspci/a.out.h     :      21        6        5
linux/include/asm-arm/arch-nexuspci/hardware.h  :      43        5       13
linux/include/asm-arm/arch-nexuspci/irq.h       :       8        2        0
linux/include/asm-arm/arch-nexuspci/memory.h    :      37       37        0
linux/include/asm-arm/arch-nexuspci/mm-init.h   :       5        0        5
linux/include/asm-arm/arch-nexuspci/mmu.h       :      26        0       26
linux/include/asm-arm/arch-nexuspci/processor.h :      38        7       10
linux/include/asm-arm/arch-nexuspci/time.h      :      59       22        6
linux/include/asm-arm/arch-rpc/a.out.h          :      21        6        5
linux/include/asm-arm/arch-rpc/hardware.h       :      84        9       11
linux/include/asm-arm/arch-rpc/irq.h            :       9        3        0
linux/include/asm-arm/arch-rpc/keyboard.h       :      24        1       10
linux/include/asm-arm/arch-rpc/memory.h         :      41       41        0
linux/include/asm-arm/arch-rpc/mmu.h            :      27        0       27
linux/include/asm-arm/arch-rpc/oldlatches.h     :       9        0        9
linux/include/asm-arm/arch-rpc/processor.h      :      38        5       10
linux/include/asm-arm/arch-rpc/system.h         :       8        1        1
linux/include/asm-arm/arch-rpc/time.h           :     189      136       31
linux/include/asm-arm/arch-rpc/uncompress.h     :       7        0        1
linux/include/asm-arm/arch-vnc/a.out.h          :      14        0       14
linux/include/asm-arm/arch-vnc/dma.h            :      19        0       19
linux/include/asm-arm/arch-vnc/hardware.h       :      74        0       74
linux/include/asm-arm/arch-vnc/ide.h            :      42        0       42
linux/include/asm-arm/arch-vnc/io.h             :     176        0      176
linux/include/asm-arm/arch-vnc/irq.h            :     156        0      156
linux/include/asm-arm/arch-vnc/irqs.h           :      67        0       67
linux/include/asm-arm/arch-vnc/keyboard.h       :      36        0       36
linux/include/asm-arm/arch-vnc/mm-init.h        :       5        0        5
linux/include/asm-arm/arch-vnc/mmu.h            :      26        0       26
linux/include/asm-arm/arch-vnc/oldlatches.h     :       9        0        9
linux/include/asm-arm/arch-vnc/param.h          :       8        0        8
linux/include/asm-arm/arch-vnc/processor.h      :      31        0       31
linux/include/asm-arm/arch-vnc/serial.h         :      43        0       43
linux/include/asm-arm/arch-vnc/shmparam.h       :       5        0        5
linux/include/asm-arm/arch-vnc/system.h         :      37        0       37
linux/include/asm-arm/arch-vnc/time.h           :     232        0      232
linux/include/asm-arm/arch-vnc/timex.h          :      13        0       13
linux/include/asm-arm/arch-vnc/uncompress.h     :      34        0       34
linux/include/asm-arm/dec21285.h                :      55       31        1
linux/include/asm-arm/dma.h                     :      26        6        6
linux/include/asm-arm/ecard.h                   :      52       12        5
linux/include/asm-arm/fiq.h                     :       6        1        0
linux/include/asm-arm/floppy.h                  :      20       15        0
linux/include/asm-arm/hardware.h                :      10        0        4
linux/include/asm-arm/init.h                    :       8        1        1
linux/include/asm-arm/io.h                      :      94       56       15
linux/include/asm-arm/ioc.h                     :      13        3        0
linux/include/asm-arm/iomd.h                    :      16        3        0
linux/include/asm-arm/irq.h                     :      11        3        1
linux/include/asm-arm/leds.h                    :      34       19        2
linux/include/asm-arm/memc.h                    :      14        4        0
linux/include/asm-arm/mm-init.h                 :      46        0       46
linux/include/asm-arm/page.h                    :      18        3        3
linux/include/asm-arm/posix_types.h             :      16        4        0
linux/include/asm-arm/proc-armo/mm-init-flat.h  :      82        0       82
linux/include/asm-arm/proc-armo/mm-init.h       :      49        7       12
linux/include/asm-arm/proc-armo/page.h          :       7        0        1
linux/include/asm-arm/proc-armo/pgtable-flat.h  :     307        0      307
linux/include/asm-arm/proc-armo/pgtable.h       :     148       47        8
linux/include/asm-arm/proc-armo/processor.h     :      93        8       47
linux/include/asm-arm/proc-armo/ptrace.h        :      15        7        2
linux/include/asm-arm/proc-armo/semaphore.h     :     115       56       27
linux/include/asm-arm/proc-armv/io.h            :      26        9       12
linux/include/asm-arm/proc-armv/mm-init.h       :     122       43       30
linux/include/asm-arm/proc-armv/pgtable.h       :     884      311      379
linux/include/asm-arm/proc-armv/processor.h     :      83        7       50
linux/include/asm-arm/proc-armv/ptrace.h        :      36       18        2
linux/include/asm-arm/proc-armv/semaphore.h     :      32       26        0
linux/include/asm-arm/proc-armv/uaccess.h       :      23        3        0
linux/include/asm-arm/proc-fns.h                :      52       13        5
linux/include/asm-arm/processor.h               :     106       57       19
linux/include/asm-arm/semaphore-helper.h        :      84       84        0
linux/include/asm-arm/semaphore.h               :      51        2       36
linux/include/asm-arm/system.h                  :     164      104       15
linux/include/asm-arm/unistd.h                  :      58        6       29
linux/include/asm-arm/vga.h                     :      11        2        1
linux/include/asm-i386/bugs.h                   :     116       56        2
linux/include/asm-i386/irq.h                    :       7        1        0
linux/include/asm-i386/msr.h                    :      30       30        0
linux/include/asm-i386/mtrr.h                   :      31        6        5
linux/include/asm-i386/processor.h              :      33        7        0
linux/include/asm-i386/system.h                 :      37        7       13
linux/include/asm-i386/timex.h                  :      16        2        1
linux/include/asm-m68k/atari_SCCserial.h        :       8        2        0
linux/include/asm-m68k/bootinfo.h               :      11        2        1
linux/include/asm-m68k/dvma.h                   :     165      165        0
linux/include/asm-m68k/floppy.h                 :     239      239        0
linux/include/asm-m68k/ide.h                    :     176       65       10
linux/include/asm-m68k/keyboard.h               :      46       20        0
linux/include/asm-m68k/mvme147hw.h              :     110      110        0
linux/include/asm-m68k/oplib.h                  :       8        8        0
linux/include/asm-m68k/page.h                   :      23       16        1
linux/include/asm-m68k/pgtable.h                :      34       17        4
linux/include/asm-m68k/q40_keyboard.h           :      54       54        0
linux/include/asm-m68k/q40_master.h             :      75       75        0
linux/include/asm-m68k/q40ints.h                :      29       29        0
linux/include/asm-m68k/scatterlist.h            :      14        8        0
linux/include/asm-m68k/semaphore-helper.h       :     136      136        0
linux/include/asm-m68k/semaphore.h              :     162       33       69
linux/include/asm-m68k/serial.h                 :     518       70      434
linux/include/asm-m68k/setup.h                  :     133       63        8
linux/include/asm-m68k/sun3x.h                  :      24       24        0
linux/include/asm-m68k/system.h                 :      25        6        2
linux/include/asm-m68k/uaccess.h                :      10        4        0
linux/include/asm-ppc/adb.h                     :      72       39        7
linux/include/asm-ppc/cuda.h                    :      24        1       10
linux/include/asm-ppc/dma.h                     :      58        4       32
linux/include/asm-ppc/hardirq.h                 :      44        7        7
linux/include/asm-ppc/ide.h                     :     308       40      196
linux/include/asm-ppc/io.h                      :      26        2        4
linux/include/asm-ppc/irq.h                     :      24        9        2
linux/include/asm-ppc/keyboard.h                :     161       21      109
linux/include/asm-ppc/machdep.h                 :      75       65        1
linux/include/asm-ppc/mk48t59.h                 :      35       35        0
linux/include/asm-ppc/page.h                    :       8        1        1
linux/include/asm-ppc/pgtable.h                 :      34       11        7
linux/include/asm-ppc/pmu.h                     :      21        3        1
linux/include/asm-ppc/posix_types.h             :       9        2        1
linux/include/asm-ppc/prep_nvram.h              :     146      146        0
linux/include/asm-ppc/processor.h               :     107        9       68
linux/include/asm-ppc/raven.h                   :      33       33        0
linux/include/asm-ppc/smp.h                     :       7        1        0
linux/include/asm-ppc/softirq.h                 :      70       12       11
linux/include/asm-ppc/string.h                  :       6        1        0
linux/include/asm-ppc/system.h                  :      51       13        7
linux/include/asm-ppc/vga.h                     :       9        2        1
linux/include/asm-sparc/siginfo.h               :       5        1        1
linux/include/asm-sparc/smp.h                   :       7        1        0
linux/include/asm-sparc/system.h                :      68       21       11
linux/include/asm-sparc64/mmu_context.h         :      35        1        6
linux/include/asm-sparc64/system.h              :      90       20       30
linux/include/asm-sparc64/uaccess.h             :      26        1        5
linux/include/linux/capability.h                :       7        0        1
linux/include/linux/dcache.h                    :       8        1        1
linux/include/linux/fs.h                        :      18       12        0
linux/include/linux/nfs_fs.h                    :       8        2        0
linux/include/linux/pagemap.h                   :      27       21        0
linux/include/linux/parport_pc.h                :      44       16        4
linux/include/linux/sched.h                     :      11        1        1
linux/include/linux/smp.h                       :      40       13        6
linux/include/linux/videodev.h                  :      16        3        0
linux/include/net/tcp.h                         :      30       17        0
linux/include/scsi/sg.h                         :      46       14        2
linux/init/main.c                               :      74       14        5
linux/ipc/shm.c                                 :       8        1        1
linux/kernel/exit.c                             :      11        2        2
linux/kernel/sched.c                            :     878      383      275
linux/kernel/signal.c                           :       8        1        1
linux/mm/filemap.c                              :     483       67       72
linux/mm/mmap.c                                 :      19        3        3
linux/mm/page_alloc.c                           :      18        6        6
linux/net/TUNABLE                               :      29        0       12
linux/net/core/iovec.c                          :      16        8        1
linux/net/core/sock.c                           :      17        2        2
linux/net/ipv4/devinet.c                        :      16        2        1
linux/net/ipv4/route.c                          :      30        9        6
linux/net/ipv4/tcp_input.c                      :      18        2        3
linux/net/ipv4/tcp_ipv4.c                       :      17        2        2
linux/net/ipv4/tcp_output.c                     :      55       23        8
linux/net/ipv4/tcp_timer.c                      :      90       26       27
linux/net/ipv4/udp.c                            :      17        2        2
linux/net/ipv6/udp.c                            :      26        3        3
linux/net/irda/ircomm/ircomm_common.c           :      32        3        9
linux/net/irda/irlan/irlan_common.c             :      35        4       11
linux/net/irda/irlpt/irlpt_cli.c                :      34        4       10
linux/net/irda/irlpt/irlpt_srvr.c               :      34        4       10
linux/net/irda/irproc.c                         :     298       21      235
linux/net/sunrpc/sched.c                        :      27        5        2
linux/net/sunrpc/svcsock.c                      :      19        4        2
linux/net/sunrpc/xprt.c                         :      23        3        0
linux/net/unix/af_unix.c                        :      29        6        3
linux/scripts/Menuconfig                        :       8        1        1
linux/scripts/tkgen.c                           :      12        4        1
linux/scripts/tkparse.c                         :      16        6        1
-- 
Thomas Koenig, Thomas...@ciw.uni-karlsruhe.de, ig...@dkauni2.bitnet.
The joy of engineering is to find a straight line on a double
logarithmic diagram.
#!/bin/sh
# This is a shell archive
# To extract the files from this archive, save it to a file, remove
# everything above the "!/bin/sh" line above, and type "sh file_name".
# existing files will NOT be overwritten unless -c is specified
#
# This is part 01 of a 33 - part archive
# do not concatenate these parts, unpack them in order with /bin/sh
#
if test -r _shar_seq_.tmp; then
        echo 'Must unpack archives in sequence!'
        echo Please unpack part `cat _shar_seq_.tmp` next
        exit 1
fi
# ============= patch-2.2.8 ==============
if test -f 'patch-2.2.8' -a X"$1" != X"-c"; then
        echo 'x - skipping patch-2.2.8 (File already exists)'
        rm -f _shar_wnt_.tmp
else
> _shar_wnt_.tmp
echo 'x - extracting patch-2.2.8 (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'patch-2.2.8' &&
diff -u --recursive --new-file v2.2.7/linux/CREDITS linux/CREDITS
--- v2.2.7/linux/CREDITS	Wed Apr 28 11:37:29 1999
+++ linux/CREDITS	Tue May 11 09:57:14 1999
@@ -256,6 +256,10 @@
X D: Configuration help text support
X D: Linux CD and Support Giveaway List
X 
+N: Zoltan Boszormenyi
+E: zbo...@mol.hu
+D: MTRR emulation with Cyrix style ARR registers
+
X N: John Boyd
X E: bo...@cis.ohio-state.edu
X D: Co-author of wd7000 SCSI driver
@@ -2217,6 +2221,12 @@
X S: 1507 145th Place SE #B5
X S: Bellevue, Washington 98007
X S: USA
+
+N: Richard Zidlicky
+E: rdzi...@geocities.com,rdzi...@cip.informatik.uni-erlangen.de
+W: http://www.geocities.com/SiliconValley/Bay/2602/
+D: Q40 port - see arch/m68k/q40/README
+S: Germany
X 
X N: Werner Zimmermann
X E: Werner.Z...@fht-esslingen.de
diff -u --recursive --new-file v2.2.7/linux/Documentation/00-INDEX linux/Documentation/00-INDEX
--- v2.2.7/linux/Documentation/00-INDEX	Tue Feb 23 15:21:31 1999
+++ linux/Documentation/00-INDEX	Thu Apr 29 11:53:41 1999
@@ -38,7 +38,7 @@
X digiepca.txt
X 	- info on Digi Intl. {PC,PCI,EISA}Xx and Xem series cards.
X exception.txt
-	- how linux v2.1 handles exceptions without verify_area etc.
+	- how Linux v2.2 handles exceptions without verify_area etc.
X filesystems/
X 	- directory with info on the various filesystems that Linux supports.
X ftape.txt
@@ -52,11 +52,11 @@
X ioctl-number.txt
X 	- how to implement and register device/driver ioctl calls.
X isdn/
-	- directory with info on the linux ISDN support, and supported cards.
+	- directory with info on the Linux ISDN support, and supported cards.
X java.txt
X 	- info on the in-kernel binary support for Java(tm)
X joystick.txt
-	- info on using joystick devices (and driver) with linux.
+	- info on using joystick devices (and driver) with Linux.
X kbuild/
X 	- directory with info about the kernel build process
X kmod.txt
@@ -72,7 +72,7 @@
X magic-number.txt
X 	- list of magic numbers used to mark/protect kernel data structures.
X mandatory.txt
-	- info on the linux implementation of Sys V mandatory file locking.
+	- info on the Linux implementation of Sys V mandatory file locking.
X mca.txt
X 	- info on supporting Micro Channel Architecture (e.g. PS/2) systems.
X md.txt
@@ -100,7 +100,7 @@
X pcwd-watchdog.txt
X 	- info and sample code for using with the PC Watchdog reset card.
X powerpc/
-	- directory with info on using linux with the PowerPC.
+	- directory with info on using Linux with the PowerPC.
X ramdisk.txt
X 	- short guide on how to set up and use the RAM disk.
X riscom8.txt
@@ -110,7 +110,7 @@
X scsi.txt
X 	- short blurb on using SCSI support as a module.
X serial-console.txt
-	- how to set up linux with a serial line console as the default.
+	- how to set up Linux with a serial line console as the default.
X smart-config.txt
X 	- description of the Smart Config makefile feature.
X smp.tex
diff -u --recursive --new-file v2.2.7/linux/Documentation/ARM-README linux/Documentation/ARM-README
--- v2.2.7/linux/Documentation/ARM-README	Sun Jun  7 11:16:25 1998
+++ linux/Documentation/ARM-README	Thu Apr 29 11:53:41 1999
@@ -70,8 +70,8 @@
X   a 'make zImage' instead of 'make all'.
X 
X 
-Bug reports etc
----------------
+Bug reports etc.
+----------------
X 
X   Please send patches, bug reports and code for the ARM Linux project
X   to li...@arm.uk.linux.org.  Patches will not be included into future
@@ -116,7 +116,7 @@
X   at the top of the screen.  The colours have the following significance
X   when run in a 16 colour mode with the default palette:
X 
-    Stripes of White,Red,Yellow,Green:
+    Stripes of white, red, yellow, and green:
X        Kernel does not support the processor architecture detected.
X 
X 
@@ -142,11 +142,11 @@
X   HDC base to the source.
X 
X   As of 31/3/96 it works with two drives (you should get the ADFS
-  *configure harddrive set to 2). I've got an internal 20MB and a great
-  big external 5.25" FH 64MB drive (who could ever want more :-) ).
+  *configure hard drive set to 2). I've got an internal 20 MB and a great
+  big external 5.25" FH 64 MB drive (who could ever want more :-) ).
X 
-  I've just got 240K/s off it (a dd with bs=128k); thats about half of what
-  RiscOS gets; but it's a heck of a lot better than the 50K/s I was getting
+  I've just got 240 K/s off it (a dd with bs=128k); that's about half of what
+  RiscOS gets, but it's a heck of a lot better than the 50 K/s I was getting
X   last week :-)
X 
X   Known bug: Drive data errors can cause a hang; including cases where
diff -u --recursive --new-file v2.2.7/linux/Documentation/Changes linux/Documentation/Changes
--- v2.2.7/linux/Documentation/Changes	Fri Apr 16 14:47:30 1999
+++ linux/Documentation/Changes	Fri May  7 09:31:25 1999
@@ -105,7 +105,7 @@
X 
X   none            /dev/pts        devpts	gid=5,mode=620    0 0
X 
-   (Note:  gid=5 is applicable for RedHat systems for which group "tty" has
+   (Note:  gid=5 is applicable for Red Hat systems for which group "tty" has
X    gid 5.  Adjust according to your distribution.  Use mode=600 if you want
X    "mesg n" to be default.)
X - Mount /dev/pts
@@ -433,7 +433,7 @@
X Xosview
X =======
X 
-   /proc interface changes require a recent xosview.
+   Changes to the /proc interface require a recent xosview.
X 
X RealPlayer
X ==========
@@ -444,8 +444,8 @@
X software available shortly.  In the mean time, you can always try
X backing up your copy of rvplayer, and then editing it by:
X 
-   dd if=/dev/zero of=rvplayer bs=1 count=1 seek=657586 conv=notrunc dd
-if=/dev/zero of=rvplayer bs=1 count=1 seek=665986 conv=notrunc
+   dd if=/dev/zero of=rvplayer bs=1 count=1 seek=657586 conv=notrunc
+   dd if=/dev/zero of=rvplayer bs=1 count=1 seek=665986 conv=notrunc
X 
X    If you're lucky, you'll then have sound....
X 
diff -u --recursive --new-file v2.2.7/linux/Documentation/Configure.help linux/Documentation/Configure.help
--- v2.2.7/linux/Documentation/Configure.help	Wed Apr 28 11:37:29 1999
+++ linux/Documentation/Configure.help	Tue May 11 09:57:14 1999
@@ -17,6 +17,8 @@
X #     ftp://ftp-pavia1.linux.it/pub/linux/Configure.help
X #   - Polish, by Cezar Cichocki (ce...@cs.net.pl), at
X #     http://www.cs.net.pl/~cezar/Kernel
+#   - German, by Jörg Strebel (jstr...@suse.de) and Karl Eichwalder
+#     (k...@suse.de), at http://www.suse.de/~ke/kernel/Configure.de.help.gz
X #
X # Information about what a kernel is, what it does, how to patch and
X # compile it and much more is contained in the Kernel-HOWTO, available
@@ -69,7 +71,7 @@
X   in some special cases. Detailed bug reports from people familiar
X   with the kernel internals are usually welcomed by the developers
X   (before submitting bug reports, please read the documents README,
-  MAINTAINERS, Documentation/BUG-HUNTING, and
+  MAINTAINERS, REPORTING_BUGS, Documentation/BUG-HUNTING, and
X   Documentation/oops-tracing.txt in the kernel source). 
X 
X   Unless you intend to help test and develop a feature or driver that
@@ -127,12 +129,38 @@
X   available via FTP (user: anonymous) in
X   ftp://metalab.unc.edu/pub/Linux/docs/HOWTO.) This means that it is a
X   good idea to say Y here if you intend to use this kernel on
-  different machines. More information about the internals of Linux
-  math coprocessor emulation can be found in
-  arch/i386/math-emu/README.
+  different machines. 
+
+  More information about the internals of the Linux math coprocessor
+  emulation can be found in arch/i386/math-emu/README.
X 
X   If you are not sure, say Y; apart from resulting in a 45 KB bigger
X   kernel, it won't hurt.
+  
+Timer and CPU usage LEDs
+CONFIG_LEDS
+  If you define this option, the LEDs on your machine will be used
+  to provide useful information about your current system status.
+
+  If you are compiling a kernel for a NetWinder or EBSA-285, you
+  will be able to select which LEDs are active using the options
+  below. If you are compiling a kernel for the EBSA-110 however,
+  the red LED will simply flash regularly to indicate that the
+  system is still functional. It is still safe to say yes here if
+  you have a CATS system, but the driver will do nothing.
+
+Timer LED
+CONFIG_LEDS_TIMER
+  If you say yes here, one of the system LEDs (the green one on the
+  NetWinder or the amber one on the EBSA285) will flash regularly to
+  indicate that the system is still operational. This is mainly
+  useful to kernel hackers who are debugging unstable kernels.
+
+CPU usage LED
+CONFIG_LEDS_CPU
+  If you say yes here, the red LED will be used to give a good real
+  time indication of CPU usage, by lighting whenever the idle task
+  is not currently executing.
X 
X Kernel FP software completion
X CONFIG_MATHEMU
@@ -218,8 +246,8 @@
X 
X   To use the loop device, you need the losetup utility and a recent
X   version of the mount program, both contained in the util-linux
-  package (available via FTP (user: anonymous) from
-  ftp://ftp.win.tue.nl/pub/linux/util/).
+  package. The location and current version number of util-linux is
+  contained in the file Documentation/Changes.
X 
X   Note that this loop device has nothing to do with the loopback
X   device used for network connections from the machine to itself.
@@ -276,7 +304,7 @@
X 
X   To fine-tune IDE drive/interface parameters for improved
X   performance, look for the hdparm package at
-  ftp://metalab.unc.edu:/pub/Linux/kernel/patches/diskdrives/
+  ftp://metalab.unc.edu/pub/Linux/kernel/patches/diskdrives/
X 
X   If you want to compile this driver as a module ( = code which can be
X   inserted in and removed from the running kernel whenever you want),
@@ -475,7 +503,7 @@
X 
X Generic PCI IDE chipset support
X CONFIG_BLK_DEV_IDEPCI
-  Enable this for PCI systems which use IDE drive(s).
+  Say Y here for PCI systems which use IDE drive(s).
X   This option helps the IDE driver to automatically detect and
X   configure all PCI-based IDE interfaces in your system.
X   
@@ -560,15 +588,16 @@
X   This driver is enabled at runtime using the "ide0=dtc2278" kernel
X   boot parameter. It enables support for the secondary IDE interface
X   of the DTC-2278 card, and permits faster I/O speeds to be set as
-  well. See the Documentation/ide.txt and dtc2278.c files for more
-  info.
+  well. See the Documentation/ide.txt and drivers/block/dtc2278.c
+  files for more info.
X 
X Holtek HT6560B support
X CONFIG_BLK_DEV_HT6560B
X   This driver is enabled at runtime using the "ide0=ht6560b" kernel
X   boot parameter. It enables support for the secondary IDE interface
X   of the Holtek card, and permits faster I/O speeds to be set as well.
-  See the Documentation/ide.txt and ht6560b.c files for more info.
+  See the Documentation/ide.txt and drivers/block/ht6560b.c files for
+  more info.
X 
X PROMISE DC4030 support (EXPERIMENTAL)
X CONFIG_BLK_DEV_PDC4030
@@ -618,36 +647,26 @@
X   If you say Y here, you also need to say Y to "Use DMA by default
X   when available", above.
X 
-  Please read the comments at the top of drivers/block/via82C586.c
-
X   If unsure, say N.
X 
X CMD646 chipset support (EXPERIMENTAL)
X CONFIG_BLK_DEV_CMD646
X   Say Y here if you have an IDE controller like this.
X 
-HPT343 chipset support (EXPERIMENTAL)
-CONFIG_BLK_DEV_HPT343
-  This driver adds up to 4 more EIDE devices sharing a single
-  interrupt. The HPT343 chipset in its current form is a non-bootable
-  PCI UDMA controller. This driver requires dynamic tuning of the
-  chipset during the ide-probe at boot. It is reported to support DVD
-  II drives, by the manufacturer.
-
-  Please read the comments at the top of drivers/block/hpt343.c
-
X QDI QD6580 support
X CONFIG_BLK_DEV_QD6580
X   This driver is enabled at runtime using the "ide0=qd6580" kernel
X   boot parameter. It permits faster I/O speeds to be set. See the
-  files Documentation/ide.txt and qd6580.c for more info.
+  files Documentation/ide.txt and drivers/block/qd6580.c for more
+  info.
X 
X UMC 8672 support
X CONFIG_BLK_DEV_UMC8672
X   This driver is enabled at runtime using the "ide0=umc8672" kernel
X   boot parameter. It enables support for the secondary IDE interface
X   of the UMC-8672, and permits faster I/O speeds to be set as well.
-  See the files Documentation/ide.txt and umc8672.c for more info.
+  See the files Documentation/ide.txt and drivers/block/umc8672.c for
+  more info.
X 
X ALI M14xx support
X CONFIG_BLK_DEV_ALI14XX
@@ -655,7 +674,7 @@
X   boot parameter. It enables support for the secondary IDE interface
X   of the ALI M1439/1443/1445/1487/1489 chipsets, and permits faster
X   I/O speeds to be set as well. See the files Documentation/ide.txt
-  and ali14xx.c for more info.
+  and drivers/block/ali14xx.c for more info.
X 
X XT hard disk support
X CONFIG_BLK_DEV_XD
@@ -1034,6 +1053,24 @@
X   board uses the R4300 and a R5230 CPUs. For more information about
X   this board see http://www.algor.co.uk.
X 
+IDE card support
+CONFIG_BLK_DEV_IDE_CARDS
+  On Acorn systems, enable this if you wish to use an IDE interface
+  expansion card. If you do not or are unsure, say N to this.
+
+ICS IDE interface
+CONFIG_BLK_DEV_IDE_ICS
+  On Acorn systems, enable this if you wish to use the ICS IDE
+  interface card.  This is not required for ICS partition support.
+  If you are unsure, say N to this.
+
+ADFS partition support
+CONFIG_BLK_DEV_PART
+  This allows Linux on Acorn systems to determine its partitions in
+  the 'non-ADFS' partition area of the hard disk - usually located
+  after the ADFS partition.  You are probably using this system, so
+  you should enable it.
+
X Support for Mips Magnum 4000
X CONFIG_MIPS_MAGNUM_4000
X   This is a machine with a R4000 100 MHz CPU. To compile a Linux
@@ -1870,7 +1907,7 @@
X   card. You do this by inserting several instances of the module 
X   matroxfb.o into the kernel with insmod, supplying the parameter
X   "dev=N" where N is 0, 1, etc. for the different Matrox devices.
-  
+
X MDA text console (dual-headed)
X CONFIG_MDA_CONSOLE
X   Say Y here if you have an old MDA or monochrome Hercules graphics
@@ -2030,7 +2067,7 @@
X Parallel-port support
X CONFIG_PARPORT
X   If you want to use devices connected to your machine's parallel port
-  (the connector at the computer with 25 holes), e.g. printer, Zip
+  (the connector at the computer with 25 holes), e.g. printer, ZIP
X   drive, PLIP link (Parallel Line Internet Protocol is mainly used to
X   create a mini network by connecting the parallel ports of two local
X   machines) etc., then you need to say Y here; please read
@@ -2057,10 +2094,13 @@
X CONFIG_PARPORT_PC
X   You should say Y here if you have a PC-style parallel port. All IBM
X   PC compatible computers and some Alphas have PC-style parallel
-  ports. This code is also available as a module. If you want to it as
-  a module ( = code which can be inserted in and removed from the
+  ports. 
+
+  This code is also available as a module. If you want to compile it
+  as a module ( = code which can be inserted in and removed from the
X   running kernel whenever you want), say M here and read
X   Documentation/modules.txt. The module will be called parport_pc.o.
+  
X   If unsure, say Y.
X 
X Support foreign hardware
@@ -2231,8 +2271,18 @@
X   the Linux router will also be able to take the packet's source
X   address into account. Furthermore, if you also say Y to "IP: use TOS
X   value as routing key" below, the TOS (Type-Of-Service) field of the
-  packet can be used for routing decisions as well.
-
+  packet can be used for routing decisions as well. In addition, if
+  you say Y here and to "IP: fast network address translation" below,
+  the router will also be able to modify source and destination
+  addresses of forwarded packets.
+
+  If you are interested in this, please see the preliminary
+  documentation at http://www.compendium.com.ar/policy-routing.txt and
+  ftp://post.tepkom.ru/pub/vol2/Linux/docs/advanced-routing.tex. You
+  will need supporting software from ftp://ftp.inr.ac.ru/ip-routing/
+  
+  If unsure, say N.
+  
X IP: equal cost multipath
X CONFIG_IP_ROUTE_MULTIPATH
X   Normally, the routing tables specify a single action to be taken in
@@ -2275,9 +2325,9 @@
X CONFIG_IP_ROUTE_NAT
X   If you say Y here, your router will be able to modify source and
X   destination addresses of packets that pass through it, in a manner
-  you specify. Please see
-  http://www.csn.tu-chemnitz.de/HyperNews/get/linux-ip-nat.html for
-  details. 
+  you specify. General information about Network Address Translation
+  can be gotten from the document
+  http://www.csn.tu-chemnitz.de/~mha/linux-ip-nat/diplom/nat.html
X 
X IP: optimize as router not host
X CONFIG_IP_ROUTER
@@ -2601,12 +2651,12 @@
X   Sometimes it is useful to give several IP addresses to a single
X   physical network interface (serial port or Ethernet card). The most
X   common case is that you want to serve different WWW or ftp documents
-  to the outside according to which of your host names was used to
+  to the outside depending on which of your host names was used to
X   connect to you. This is called "multihosting" or "virtual domains"
X   or "virtual hosting services" and is explained in detail on the WWW
X   at http://www.thesphere.com/~dlp/TwoServers/ (to browse the WWW, you
X   need to have access to a machine on the Internet that has a program
-  like lynx or netscape) and also in the Virtual-Hosting-HOWTO,
+  like lynx or netscape) and also in the Virtual-Services-HOWTO,
X   available via FTP (user: anonymous) from
X   ftp://metalab.unc.edu/pub/Linux/docs/HOWTO.
X 
@@ -2920,36 +2970,45 @@
X CONFIG_IPDDP
X   This allows IP networking for users who only have AppleTalk
X   networking available. This feature is experimental. With this
-  driver, you can either encapsulate IP inside AppleTalk (e.g. if your
-  Linux box is stuck on an AppleTalk only network) or decapsulate
-  (e.g. if you want your Linux box to act as an Internet gateway for a
-  zoo of AppleTalk connected Macs). You decide which one of the two
-  you want in the following two questions; you can say Y to only one
-  of them. Please see Documentation/networking/ipddp.txt for more
-  information.
+  driver, you can encapsulate IP inside AppleTalk (e.g. if your Linux
+  box is stuck on an AppleTalk only network) or decapsulate (e.g. if
+  you want your Linux box to act as an Internet gateway for a zoo of
+  AppleTalk connected Macs). Please see the file
+  Documentation/networking/ipddp.txt for more information.
+
+  If you say Y here, the AppleTalk-IP support will be compiled into
+  the kernel. In this case, you can either use encapsulation or
+  decapsulation, but not both. With the following two questions, you
+  decide which one you want.
X 
-  This driver is also available as a module ( = code which can be
-  inserted in and removed from the running kernel whenever you want).
-  The module is called ipddp.o. If you want to compile it as a module,
-  say M here and read Documentation/modules.txt.
+  If you say M here, the AppleTalk-IP support will be compiled as a
+  module ( = code which can be inserted in and removed from the
+  running kernel whenever you want, read Documentation/modules.txt).
+  The module is called ipddp.o. In this case, you will be able to use
+  both encapsulation and decapsulation simultaneously, by loading two
+  copies of the module and specifying different values for the module
+  option ipddp_mode. 
X 
X IP to AppleTalk-IP Encapsulation support
X CONFIG_IPDDP_ENCAP
-  If you say Y here, the kernel will be able to encapsulate IP packets
-  inside AppleTalk frames; this is useful if your Linux box is stuck
-  on an AppleTalk network (which hopefully contains a decapsulator
-  somewhere). Please see Documentation/networking/ipddp.txt for more
-  information. If you say Y here, you cannot say Y to "AppleTalk-IP to
-  IP Decapsulation support", below.
+  If you say Y here, the AppleTalk-IP code will be able to encapsulate
+  IP packets inside AppleTalk frames; this is useful if your Linux box
+  is stuck on an AppleTalk network (which hopefully contains a
+  decapsulator somewhere). Please see
+  Documentation/networking/ipddp.txt for more information. If you said
+  Y to "AppleTalk-IP driver support" above and you say Y here, then
+  you cannot say Y to "AppleTalk-IP to IP Decapsulation support",
+  below.
X 
X AppleTalk-IP to IP Decapsulation support
X CONFIG_IPDDP_DECAP
-  If you say Y here, the kernel will be able to decapsulate
+  If you say Y here, the AppleTalk-IP code will be able to decapsulate
X   AppleTalk-IP frames to IP packets; this is useful if you want your
-  Linux box to act as an Internet gateway for an AppleTalk
-  network. Please see Documentation/networking/ipddp.txt for more
-  information. If you say Y here, you cannot say Y to "IP to
-  AppleTalk-IP Encapsulation support", above.
+  Linux box to act as an Internet gateway for an AppleTalk network.
+  Please see Documentation/networking/ipddp.txt for more information.
+  If you said Y to "AppleTalk-IP driver support" above and you say Y
+  here, then you cannot say Y to "IP to AppleTalk-IP Encapsulation
+  support", above.
X 
X Apple/Farallon LocalTalk PC card support
X CONFIG_LTPC
@@ -3526,7 +3585,7 @@
X CONFIG_BLK_DEV_SR
X   If you want to use a SCSI CDROM under Linux, say Y and read the
X   SCSI-HOWTO and the CDROM-HOWTO from
-  ftp://metalab.unc.edu:/pub/Linux/docs/HOWTO. Also make sure to say Y
+  ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Also make sure to say Y
X   or M to "ISO 9660 CDROM filesystem support" later.
X 
X   This driver is also available as a module ( = code which can be
@@ -3554,7 +3613,8 @@
X   other devices, it's possible that you'll have to write the driver
X   software yourself, so have a look at the SCSI-HOWTO and at the
X   SCSI-Programming-HOWTO, both available via FTP (user: anonymous) in
-  ftp://metalab.unc.edu:/pub/Linux/docs/HOWTO.
+  ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Please read the file
+  Documentation/scsi-generic.txt for more information.
X 
X   If you want to compile this as a module ( = code which can be
X   inserted in and removed from the running kernel whenever you want),
@@ -3956,33 +4016,33 @@
X   tagged command queuing and fast synchronous data transfers up to 80
X   MB/s with wide FAST-40 LVD devices and controllers.
X 
-  An additionnal driver named SYM53C8XX (a.k.a 896 driver) can also be 
-  configured. See the help on the SYM53C8XX driver for more information.
+  Recent versions of the 53C8XX chips are better supported by the
+  option "SYM53C8XX SCSI support", below.
X 
-  Note: there is another driver for the 53c8xx family of controllers
+  Note: there is yet another driver for the 53c8xx family of controllers
X   ("NCR53c7,8xx SCSI support" above). If you want to use them both,
X   you need to say M to both and build them as modules, but only one
-  may be active at a time. If you have a 53c8xx board, it's best to
-  use this driver.
+  may be active at a time. If you have a 53c8xx board, you probably do
+  not want to use the "NCR53c7,8xx SCSI support".
X 
X   Please read drivers/scsi/README.ncr53c8xx for more information.
X 
X SYM53C8XX SCSI support
X CONFIG_SCSI_SYM53C8XX
-  The 896 driver for Linux (a.k.a. sym53c8xx) is derivated from the 
-  ncr53c8xx driver and has been heavily reworked and enhanced to 
-  fully support all the features of recent 53C8XX chips, notably the 
-  hardware phase mismatch feature of the SYM53C896.
-
-  For that to be achieved without additionnal complexity, support of 
-  old 8XX chips has been dropped. If your system uses either a 
-  810 rev. < 16, a 815, or a 825 rev. < 16 PCI SCSI processor, you must 
-  use the generic NCR53C8XX driver or configure both the NCR53C8XX and 
-  the SYM53C8XX drivers either as module or linked to the kernel image.
+  This driver supports all the features of recent 53C8XX chips (used
+  in PCI SCSI controllers), notably the hardware phase mismatch
+  feature of the SYM53C896.
+
+  Older versions of the 53C8XX chips are not supported by this
+  driver. If your system uses either a 810 rev. < 16, a 815, or a 825
+  rev. < 16 PCI SCSI processor, you must use the generic NCR53C8XX
+  driver ("NCR53C8XX SCSI support" above) or configure both the
+  NCR53C8XX and this SYM53C8XX drivers either as module or linked to
+  the kernel image.
X 
X   When both drivers are linked to the kernel, the SYM53C8XX driver is 
X   called first at initialization and you can use the 'excl=ioaddr' 
-  driver boot option to exclude attachement of adapters by the SYM53C8XX 
+  driver boot option to exclude attachment of adapters by the SYM53C8XX 
X   driver. For instance, entering 'sym53c8xx=excl:0xb400,excl=0xc000' at 
X   lilo prompt prevents adapters at io address 0xb400 and 0xc000 from 
X   being attached by the SYM53C8XX driver, thus allowing the NCR53C8XX 
@@ -4105,12 +4165,11 @@
X 
X include support for the NCR PQS/PDS SCSI card
X CONFIG_SCSI_NCR53C8XX_PQS_PDS
-  This allows the driver to detect a special adapter produced by NCR
+  Say Y here if you have a special SCSI adapter produced by NCR
X   corporation called a PCI Quad SCSI or PCI Dual SCSI. You do not need
-  this if you do not have one of these adapters. However, since this 
-  device is detected as a specific PCI device, this option is quite 
-  safe. This option is only supported by the SYM53C8XX driver (not 
-  by the NCR53C8XX driver).
+  this if you do not have one of these adapters. However, since this
+  device is detected as a specific PCI device, this option is quite
+  safe.
X 
X   The common answer here is N, but answering Y is safe.
X 
@@ -4215,17 +4274,6 @@
X   say M here and read Documentation/modules.txt. The module will be
X   called initio.o
X 
-Initio 91XXU(W) SCSI support
-CONFIG_SCSI_INITIO
-  This is support for the Initio 91XXU(W) SCSI host adapter.
-  Please read the SCSI-HOWTO, available via FTP (user: anonymous) at
-  ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO.
-
-  If you want to compile this as a module ( = code which can be
-  inserted in and removed from the running kernel whenever you want),
-  say M here and read Documentation/modules.txt. The module will be
-  called initio.o
-
X PAS16 SCSI support
X CONFIG_SCSI_PAS16
X   This is support for a SCSI host adapter. It is explained in section
@@ -4243,7 +4291,7 @@
X CONFIG_SCSI_INIA100
X   This is support for the Initio INI-A100U2W SCSI host adapter.
X   Please read the SCSI-HOWTO, available via FTP (user: anonymous) at
-  ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO.
+  ftp://metalab.unc.edu/pub/Linux/docs/HOWTO.
X 
X   If you want to compile this as a module ( = code which can be 
X   inserted in and removed from the running kernel whenever you want),
@@ -4309,8 +4357,8 @@
X   IQ-PCI-10, IQ_PCI-D) except for the PCI-basic card. (This latter
X   card is supported by the "AM53/79C974 PCI SCSI" driver). 
X 
-  If you say Y here, make sure to say Y to choose "BIOS" at the
-  question "PCI access mode".
+  If you say Y here, make sure to choose "BIOS" at the question "PCI
+  access mode".
X 
X   Please read the file drivers/scsi/README.qlogicisp. You should also
X   read the SCSI-HOWTO, available via FTP (user: anonymous) at
@@ -4321,6 +4369,15 @@
X   The module will be called qlogicisp.o. If you want to compile it as
X   a module, say M here and read Documentation/modules.txt.
X 
+Qlogic ISP FC SCSI support
+CONFIG_SCSI_QLOGIC_FC
+  This is a driver for the QLogic ISP2100 SCSI-FCP host adapter.
+
+  This driver is also available as a module ( = code which can be
+  inserted in and removed from the running kernel whenever you want).
+  The module will be called qlogicfc.o. If you want to compile it as
+  a module, say M here and read Documentation/modules.txt.
+
X Seagate ST-02 and Future Domain TMC-8xx SCSI support
X CONFIG_SCSI_SEAGATE
X   These are 8-bit SCSI controllers; the ST-01 is also supported by
@@ -4444,20 +4501,22 @@
X 
X Symbios Logic sym53c416 support
X CONFIG_SCSI_SYM53C416
-  This is support for the sym53c416 SCSI host adapter. This is the
-  SCSI adapter that comes with some hp scanners. This driver requires that
-  the sym53c416 is configured first using some sort of pnp configuration
-  program (e.g. isapnp) or by a PnP aware BIOS. If you are using isapnp then
-  you need to compile it as a module and then load it using insmod after
-  isapnp has run. The parameters of the configured card(s) should be passed
-  to the driver. The format is:
+  This is support for the sym53c416 SCSI host adapter, the SCSI
+  adapter that comes with some HP scanners. This driver requires that
+  the sym53c416 is configured first using some sort of pnp
+  configuration program (e.g. isapnp) or by a PnP aware BIOS. If you
+  are using isapnp then you need to compile this driver as a module
+  and then load it using insmod after isapnp has run. The parameters
+  of the configured card(s) should be passed to the driver. The format
+  is:
X 
X     insmod sym53c416 sym53c416=<base>,<irq> [sym53c416_1=<base>,<irq>]
X 
-  There is support for up to four adapters. If you want to compile this
-  driver as a module ( = code which can be inserted in and removed from
-  the running kernel whenever you want), say M here and read
-  Documentation/modules.txt.
+  There is support for up to four adapters. If you want to compile
+  this driver as a module ( = code which can be inserted in and
+  removed from the running kernel whenever you want), say M here and
+  read Documentation/modules.txt. The module will be called
+  sym53c416.o. 
X 
X Tekram DC390(T) and Am53/79C974 (PCscsi) SCSI support
X CONFIG_SCSI_DC390T
@@ -4518,6 +4577,12 @@
X   say M here and read Documentation/modules.txt. The module will be
X   called megaraid.o.
X 
+###
+### What is this?
+###
+#Concurrent IO commands on MegaRAID
+#CONFIG_MEGARAID_MULTI_IO
+
X GDT SCSI Disk Array Controller support
X CONFIG_SCSI_GDTH
X   This is a driver for all SCSI Disk Array Controllers (EISA/ISA/PCI) 
@@ -4710,7 +4775,7 @@
X   you want to use under Linux (make sure you know its name because you
X   will be asked for it and read the Ethernet-HOWTO (especially if you
X   plan to use more than one network card under Linux), available from
-  ftp://metalab.unc.edu:/pub/Linux/docs/HOWTO/mini) or if you want to
+  ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/mini) or if you want to
X   use SLIP (Serial Line Internet Protocol is the protocol used to send
X   Internet traffic over telephone lines or null modem cables) or CSLIP
X   (compressed SLIP) or PPP (Point to Point Protocol, a better and
@@ -4721,7 +4786,7 @@
X 
X   Make sure to read the NET-3-HOWTO. Eventually, you will have to read
X   Olaf Kirch's excellent and free book "Network Administrator's
-  Guide", to be found in ftp://metalab.unc.edu:/pub/Linux/docs/LDP. If
+  Guide", to be found in ftp://metalab.unc.edu/pub/Linux/docs/LDP. If
X   unsure, say Y.
X 
X Dummy net driver support
@@ -4827,7 +4892,7 @@
X 
X   To use PPP, you need an additional program called pppd as described
X   in Documentation/networking/ppp.txt and in the PPP-HOWTO, available
-  from ftp://metalab.unc.edu:/pub/Linux/docs/HOWTO. If you upgrade
+  from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If you upgrade
X   from an older kernel, you might need to upgrade pppd as well. The
X   PPP option enlarges your kernel by about 16 KB.
X 
@@ -5142,11 +5207,13 @@
X 
X     *** This option is NOT COMPATIBLE with several important ***
X     *** networking options: especially CONFIG*FIREWALL.      ***
+    *** Say N here if you intend to use Linux as a firewall. ***
X 
X   However, it will work with all options in CONFIG_IP_ADVANCED_ROUTER
-  section (except for CONFIG_IP_ROUTE_TOS&FWMARK). At the moment, few devices
-  support fast switching (tulip is one of them, modified 8390 can be
-  found at ftp://ftp.inr.ac.ru/ip-routing/fastroute-8390.tar.gz). 
+  section (except for CONFIG_IP_ROUTE_TOS and CONFIG_IP_ROUTE_FWMARK).
+  At the moment, few devices support fast switching (tulip is one of
+  them, modified 8390 can be found at
+  ftp://ftp.inr.ac.ru/ip-routing/fastroute-8390.tar.gz).
X 
X   If unsure, say N.
X 
@@ -5752,6 +5819,18 @@
X   module, say M here and read Documentation/modules.txt as well as
X   Documentation/networking/net-modules.txt.
X 
+3c527 support
+CONFIG_ELMC_II
+  If you have a network (Ethernet) card of this type, say Y and read
+  the Ethernet-HOWTO, available via FTP (user: anonymous) in
+  ftp://metalab.unc.edu/pub/Linux/docs/HOWTO.
+
+  This driver is also available as a module ( = code which can be
+  inserted in and removed from the running kernel whenever you want).
+  The module will be called 3c527.o. If you want to compile it as a
+  module, say M here and read Documentation/modules.txt as well as
+  Documentation/networking/net-modules.txt.
+
X 3c509/3c579 support
X CONFIG_EL3
X   If you have a network (Ethernet) card belonging to the 3Com
@@ -6560,6 +6639,20 @@
X   The module will be called mcd.o. If you want to compile it as a
X   module, say M here and read Documentation/modules.txt.
X 
+IRQ channel for Mitsumi CD-ROM
+CONFIG_MCD_IRQ
+  This allows you to specify the default value of the IRQ used by the
+  driver. This setting can be overridden by passing the "mcd="
+  parameter to the kernel at boot time (or at module load time if you
+  said M to "Standard Mitsumi CDROM support").
+
+I/O base address for Mitsumi CD-ROM
+CONFIG_MCD_BASE
+  This allows you to specify the default value of the I/O base address
+  used by the driver. This setting can be overridden by passing the
+  "mcd=" parameter to the kernel at boot time (or at module load time
+  if you said M to "Standard Mitsumi CDROM support").
+
X Mitsumi [XA/MultiSession] support
X CONFIG_MCDX
X   Use this driver if you want to be able to read XA or MultiSession
@@ -6750,6 +6843,13 @@
X   ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/mini. Probably the quota
X   support is only useful for multi user systems. If unsure, say N.
X 
+Acorn's ADFS filesystem support (read only) (EXPERIMENTAL)
+CONFIG_ADFS_FS
+  The Advanced Disk File System is the filesystem used on floppy and
+  hard disks by Acorn Systems.  Currently in development, as a read-
+  only driver for hard disks.  These should be the first partition
+  (eg. /dev/[sh]d?1) on each of your drives.  If unsure, say N.
+
X Minix fs support
X CONFIG_MINIX_FS
X   Minix is a simple operating system used in many classes about OS's.
@@ -7032,10 +7132,13 @@
X   should say N here, or you can say Y and use this new experimental
X   kernel based NFS server. The advantage of the kernel based solution
X   is that it is faster; it might not be completely stable yet, though.
-  You will need the support software from the linux-nfs package
-  available at ftp://ftp.mathematik.th-darmstadt.de/pub/linux/okir/.
+
+  In either case, you will need support software; the respective
+  locations are given in the file Documentation/Changes in the NFS
+  section.
+
X   Please read the NFS-HOWTO, available via FTP (user: anonymous) from
-  ftp://metalab.unc.edu:/pub/Linux/docs/HOWTO. 
+  ftp://metalab.unc.edu/pub/Linux/docs/HOWTO.
X 
X   The NFS server is also available as a module ( = code which can be
X   inserted in and removed from the running kernel whenever you want).
@@ -7213,7 +7316,8 @@
X   Unixes can create and mount hard disk partitions and diskettes using
X   this filesystem as well. Saying Y here will allow you to read from
X   these partitions; if you also want to write to them, say Y to the
-  experimental "UFS filesystem write support", below.
+  experimental "UFS filesystem write support", below. Please read the
+  file Documentation/filesystems/ufs.txt for more information.
X 
X   If you only intend to mount files from some other Unix over the
X   network using NFS, you don't need the UFS filesystem support (but
@@ -7333,7 +7437,7 @@
X SMB filesystem support (to mount Windows shares etc...)
X CONFIG_SMB_FS
X   SMB (Server Message Block) is the protocol Windows for Workgroups
-  (WfW), Windows 95, Windows NT and OS/2 Lan Manager use to share
+  (WfW), Windows 95/98, Windows NT and OS/2 Lan Manager use to share
X   files and printers over local networks. Saying Y here allows you to
X   mount their filesystems (often called "shares" in this context) and
X   access them just like any other Unix directory. Currently, this
@@ -7397,7 +7501,7 @@
X   mount NetWare file server volumes and to access them just like any
X   other Unix directory. For details, please read the file
X   Documentation/filesystems/ncpfs.txt in the kernel source and the
-  IPX-HOWTO on ftp://metalab.unc.edu:/pub/Linux/docs/howto.
+  IPX-HOWTO on ftp://metalab.unc.edu/pub/Linux/docs/howto.
X 
X   You do not have to say Y here if you want your Linux box to act as a
X   file *server* for Novell NetWare clients.
@@ -7445,23 +7549,22 @@
X 
X Lowercase DOS filenames on LONG namespace volume
X CONFIG_NCPFS_SMALLDOS
-  Saying Y here will convert every filename with creator/owner DOS
-  namespace on NetWare servers to lowercase characters as silently
-  kernel does when you mount  NetWare file server volumes with DOS
-  namespace without OS2/LONG namespace support. Saying N here will
-  give you these filenames with uppercase characters.
-  
-  This is  only cosmetic option  because of OS2/LONG  namespace is
-  case  insensitive.  The  only major  reason for  this option  is
-  backward  compatibility when  you want  to do  step from  DOS to
-  OS2/LONG  namespace support.  Long filenames  (created by Win95)
-  will not be affected.
-
-  This  option  does not  solve a  problem that  filenames  appear
-  differently  in Linux box  and in MS  environment because  of MS
-  does an additional  conversions on client side.  You can achieve
-  simillar effects  enabling ncpfs  option "Allow  using of Native
-  Language Support" below.
+  If you say Y here, every filename on a NetWare server volume using
+  the OS2/LONG namespace will be converted to lowercase characters.
+  (For regular NetWare file server volumes with DOS namespace, this is
+  done automatically, even if you say N here.) Saying N here will give
+  you these filenames in uppercase.
+  
+  This is only a cosmetic option since the OS2/LONG namespace is case
+  insensitive. The only major reason for this option is backward
+  compatibility when moving from DOS to OS2/LONG namespace support.
+  Long filenames (created by Win95) will not be affected.
+
+  This option does not solve the problem that filenames appear
+  differently under Linux and under Windows, since Windows does an
+  additional conversions on the client side. You can achieve similar
+  effects by saying Y to "Allow using of Native Language Support"
+  below.
X 
X Allow mounting of volume subdirectories
X CONFIG_NCPFS_MOUNT_SUBDIR
@@ -7483,10 +7586,10 @@
X 
X Allow using of Native Language Support
X CONFIG_NCPFS_NLS
-  Allows you to use codepages and I/O charsets for file name translation
-  between file system on server and input/output. This may be useful,
-  if you want to access to the server with other operating systems,
-  e.g. Windows 95. See also NLS for more Information.
+  Allows you to use codepages and I/O charsets for file name
+  translation between the server file system and input/output. This
+  may be useful, if you want to access the server with other operating
+  systems, e.g. Windows 95. See also NLS for more Information.
X 
X   To select codepages and I/O charsets use ncpfs-2.2.0.13 or newer.
X 
@@ -7494,12 +7597,11 @@
X CONFIG_NCPFS_EXTRAS
X   This enables the use of symbolic links and an execute permission
X   bit on NCPFS. The file server need not have long name space or NFS
-  name space loaded for these to work, they are stored using rarely
-  found combinations of Hidden, System and Shared flags.
+  name space loaded for these to work.
+
+  To use the new attributes, it is recommended to use the flags
+  '-f 600 -d 755' on the ncpmount command line.
X 
-  To use the new attributes, you are recommended to use the flags
-  '-f 600 -d 755' on the ncpmount commandline.
-  
X nls codepage 437
X CONFIG_NLS_CODEPAGE_437
X   The Microsoft fat filesystem family can deal with filenames in
@@ -8035,14 +8137,24 @@
X   Provides support for the SyncLink ISA and PCI
X   multiprotocol serial adapters. These adapters
X   support asynchronous and HDLC bit synchronous
-  communication up to 10Mbps (PCI adapter)
+  communication up to 10Mbps (PCI adapter).
+
+  This driver can only be built as a module ( = code which can be
+  inserted in and removed from the running kernel whenever you want).
+  The module will be called synclink.o. If you want to do that, say M
+  here.
X 
X Synchronous HDLC line discipline support
X CONFIG_N_HDLC
X   Allows synchronous HDLC communications with
X   tty device drivers that support synchronous
X   HDLC such as the Microgate SyncLink adapter.
-  
+
+  This driver can only be built as a module ( = code which can be
+  inserted in and removed from the running kernel whenever you want).
+  The module will be called n_hdlc.o. If you want to do that, say M
+  here.
+
X Hayes ESP serial port support
X CONFIG_ESPSERIAL
X   This is a driver which supports Hayes ESP serial ports. Both single
@@ -8087,7 +8199,7 @@
X   If you want to say Y here, you need to have the C library glibc 2.1
X   or later (equal to libc-6.1, check with "ls -l /lib/libc.so.*").
X   Read the instructions in Documentation/Changes pertaining to pseudo
-  terminals. It's save to say N.
+  terminals. It's safe to say N.
X 
X Maximum number of Unix98 PTYs in use (0-2048)
X CONFIG_UNIX98_PTY_COUNT
@@ -8183,7 +8295,7 @@
X   When using a PS/2 mouse, you can get problems if you want to use the
X   mouse both on the Linux console and under X. Using the "-R" option
X   of the Linux mouse managing program gpm (available from
-  ftp://metalab.unc.edu:/pub/Linux/system/Daemons) solves this
+  ftp://metalab.unc.edu/pub/Linux/system/Daemons) solves this
X   problem, or you can get the "mconv" utility also from metalab.
X 
X C&T 82C710 mouse port support (as on TI Travelmate)
@@ -8554,17 +8666,24 @@
X 
X MTRR control and configuration
X CONFIG_MTRR
-  On Intel Pentium Pro and Pentium II systems the Memory Type Range
-  Registers (MTRRs) may be used to control processor access to memory
-  ranges. This is most useful when you have a video (VGA) card on a
-  PCI or AGP bus. Enabling write-combining allows bus write transfers
-  to be combined into a larger transfer before bursting over the
-  PCI/AGP bus. This can increase performance of image write operations
-  2.5 times or more. This option creates a /proc/mtrr file which may
-  be used to manipulate your MTRRs. Typically the X server should use
-  this. This should have a reasonably generic interface so that
-  similar control registers on other processors can be easily
-  supported.
+  On Intel P6 family processors (Pentium Pro, Pentium II and later)
+  the Memory Type Range Registers (MTRRs) may be used to control
+  processor access to memory ranges. This is most useful when you have
+  a video (VGA) card on a PCI or AGP bus. Enabling write-combining
+  allows bus write transfers to be combined into a larger transfer
+  before bursting over the PCI/AGP bus. This can increase performance
+  of image write operations 2.5 times or more. This option creates a
+  /proc/mtrr file which may be used to manipulate your
+  MTRRs. Typically the X server should use this. This should have a
+  reasonably generic interface so that similar control registers on
+  other processors can be easily supported.
+
+  The Cyrix 6x86, 6x86MX and M II processors have Address Range
+  Registers (ARRs) which provide a similar functionality to MTRRs. For
+  these, the ARRs are used to emulate the MTRRs.
+
+  The AMD K6-2 (stepping 8 and above) and K6-3 processors have two
+  MTRRs. These are supported.
X 
X   Saying Y here also fixes a problem with buggy SMP BIOSes which only
X   set the MTRRs for the boot CPU and not the secondary CPUs. This can
@@ -8893,6 +9012,17 @@
X   The module will be called nvram.o. If you want to compile it as a
X   module, say M here and read Documentation/modules.txt.
X 
+Atomwide Serial Support
+CONFIG_ATOMWIDE_SERIAL
+  If you have an Atomwide Serial card for an Acorn system, say Y to
+  this option.  The driver can handle 1, 2, or 3 port cards.
+  If unsure, say N
+
+The Serial Port Dual Serial Port
+CONFIG_DUALSP_SERIAL
+  If you have the Serial Port's dual serial card for an Acorn system,
+  say Y to this option.  If unsure, say N
+
X Joystick support
X CONFIG_JOYSTICK
X   If you have a joystick, you can say Y here to enable generic
@@ -8996,6 +9126,35 @@
X   If you have the Serial Port's dual serial card for an Acorn system,
X   say Y to this option. If unsure, say N
X 
+NetWinder Button
+CONFIG_NWBUTTON
+  If you enable this driver and create a character device node
+  /dev/nwbutton with major and minor numbers 10 and 158 ("man mknod"),
+  then every time the orange button is pressed a number of times, the
+  number of times the button was pressed will be written to that device.
+  This is most useful for applications, as yet unwritten, which perform
+  actions based on how many times the button is pressed in a row.
+  Do not hold the button down for too long, as the driver does not alter
+  the behaviour of the hardware reset circuitry attached to the button;
+  it will still execute a hard reset if the button is held down for
+  longer than approximately five seconds.
+  This driver is also available as a module ( = code which can be
+  inserted in and removed from the running kernel whenever you want).
+  If you want to compile it as a module, say M here and read
+  Documentation/modules.txt. The module will be called nwbutton.o.
+  Most people will answer Y to this question and "Reboot Using Button"
+  below to be able to initiate a system shutdown from the button.
+
+Reboot Using Button
+CONFIG_NWBUTTON_REBOOT
+  If you enable this option, then you will be able to initiate a system
+  shutdown and reboot by pressing the orange button a number of times.
+  The number of presses to initiate the shutdown is two by default, but
+  this can be altered by modifying the value of NUM_PRESSES_REBOOT in
+  nwbutton.h and recompiling the driver or, if you compile the driver as
+  a module, you can specify the number of presses at load time with
+  "insmod button reboot_count=<something>".
+
X Sound card support
X CONFIG_SOUND
X   If you have a sound card in your computer, i.e. if it can say more
@@ -9037,18 +9196,19 @@
X 
X Persistent DMA buffers
X CONFIG_SOUND_DMAP
-  Linux can often have problems allocating DMA buffers for ISA cards on
-  machines with more than 16MB of RAM. This is because ISA DMA buffers
-  must exist below the 16MB boundry and it is quite possible that we
-  can't find a large enough free block in this region after the machine
-  has been running for any amount of time. If you say Y here the DMA
-  buffers (64Kb) will be allocated at boot time and kept until the
-  shutdown. This option is only usefull if you say Y to OSS sound
-  modules. If you say M to OSS sound modules then you can just pass to
-  the sound.o module a "dmabuf=1" command-line argument.
+  Linux can often have problems allocating DMA buffers for ISA sound
+  cards on machines with more than 16MB of RAM. This is because ISA
+  DMA buffers must exist below the 16MB boundary and it is quite
+  possible that a large enough free block in this region cannot be
+  found after the machine has been running for a while. If you say Y
+  here the DMA buffers (64Kb) will be allocated at boot time and kept
+  until the shutdown. This option is only useful if you said Y to
+  "OSS sound modules", above. If you said M to "OSS sound modules"
+  then you can get the persistent DMA buffer functionality by passing
+  the command-line argument "dmabuf=1" to the sound.o module.
X 
X   Say Y unless you have 16MB or less RAM or a PCI sound card.
- 
+
X Support for Aztech Sound Galaxy (non-PnP) cards
X CONFIG_SOUND_SGALAXY
X   This module initializes the older non Plug and Play sound galaxy
@@ -9556,6 +9716,11 @@
X   differs slightly from OSS/Free, so PLEASE READ
X   Documentation/sound/sonicvibes.
X 
+Rockwell WaveArtist
+CONFIG_SOUND_WAVEARTIST
+  Say Y here to include support for the Rockwell WaveArtist sound
+  system.  This driver is mainly for the NetWinder.
+
X Are you using a crosscompiler
X CONFIG_CROSSCOMPILE
X   Say Y here if you are compiling the kernel on a different
@@ -10005,27 +10170,11 @@
X   MC68EC040 will not work, as it does not include an MMU (Memory
X   Management Unit).
X 
-Use -m68040 flag for 68040 specific optimizations
-CONFIG_OPTIMIZE_040
-  If you will only be running this kernel on a 68040-series processor,
-  this will make the kernel run somewhat faster. However, it will no
-  longer run on a 68020 or 68030, no matter whether you included 68020
-  and 68030 support or not. Say N unless the only processor you are
-  compiling support for is the 68040 (or 68LC040).
-
X 68060 support
X CONFIG_M68060
X   If you anticipate running this kernel on a computer with a MC68060
X   processor, say Y. Otherwise, say N.
X 
-Use -m68060 flag for 68060 specific optimizations
-CONFIG_OPTIMIZE_060
-  If you will only be running this kernel on a 68060-series processor,
-  this will make the kernel run somewhat faster. However, it will no
-  longer run on a 68020, 68030 or 68040, no matter whether you
-  included support for those processors or not. Say N unless the only
-  processor you are compiling support for is the 68060.
-
X Advanced processor options
X CONFIG_ADVANCED_CPU
X   This gives you access to some advanced options for the CPU. The
@@ -10058,25 +10207,9 @@
X   Note that even if you say N here, you can still use your expansion
X   cards. If in doubt, say Y.
X 
-Amiga OCS chipset support
-CONFIG_AMIFB_OCS
-  This enables support for the original Agnus and Denise video chips,
-  found in the Amiga 1000 and most A500's and A2000's. If you intend
-  to run Linux on any of these systems, say Y; otherwise say N.
-
-Amiga ECS chipset support
-CONFIG_AMIFB_ECS
-  This enables support for the Enhanced Chip Set, found in later
-  A500's, later A2000's, the A600, the A3000, the A3000T and CDTV. If
-  you intend to run Linux on any of these systems, say Y; otherwise
-  say N.
-
-Amiga AGA chipset support
-CONFIG_AMIFB_AGA
-  This enables support for the Advanced Graphics Architecture (also
-  known as the AGA or AA) Chip Set, found in the A1200, A4000, A4000T
-  and CD32. If you intend to run Linux on any of these systems, say Y;
-  otherwise say N.
+CONFIG_AMIGA_PCMCIA
+  Include support in the kernel for pcmcia on Amiga 1200 and Amiga 600.
+  If you intend to use pcmcia cards say Y; otherwise say N.
X 
X Amiga GSP (TMS340x0) support
X CONFIG_AMIGA_GSP
@@ -10282,6 +10415,16 @@
X   want). The module is called hydra.o. If you want to compile it as a
X   module, say M here and read Documentation/modules.txt.
X 
+Pcmcia NE2000 compatible support
+CONFIG_APNE
+  If you have a pcmcia ne2000 compatible adapter, say Y.  Otherwise,
+  say N.
+
+  This driver is also available as a module ( = code which can be
+  inserted in and removed from the running kernel whenever you
+  want). The module is called apne.o. If you want to compile it as a
+  module, say M here and read Documentation/modules.txt.
+
X Atari Lance support
X CONFIG_ATARILANCE
X   Say Y to include support for several Atari Ethernet adapters based
@@ -10513,11 +10656,21 @@
X   motherboard will usually use a MACE (Medium Access Control for
X   Ethernet) interface. Say Y to include support for the MACE chip.
X 
+  This driver is also available as a module called mace.o ( = code
+  which can be inserted in and removed from the running kernel
+  whenever you want). If you want to compile it as a module, say M
+  here and read Documentation/modules.txt.
+
X BMAC (G3 ethernet) support
X CONFIG_BMAC
X   Say Y for support of BMAC Ethernet interfaces. These are used on G3
X   computers. 
X 
+  This driver is also available as a module called bmac.o ( = code
+  which can be inserted in and removed from the running kernel
+  whenever you want). If you want to compile it as a module, say M
+  here and read Documentation/modules.txt.
+
X Video For Linux
X CONFIG_VIDEO_DEV
X   Support for audio/video capture and overlay devices and FM radio
@@ -10686,11 +10839,27 @@
X CONFIG_RADIO_ZOLTRIX_PORT
X   Enter the I/O port of your Zoltrix radio card.
X 
+ADS Cadet AM/FM Tuner
+CONFIG_RADIO_CADET
+  Say Y here if this is your AM/FM radio card.
+
+  In order to control your radio card, you will need to use programs
+  that are compatible with the Video for Linux API. Information on 
+  this API and pointers to "v4l" programs may be found on the WWW at
+  http://roadrunner.swansea.uk.linux.org/v4l.shtml; to browse the WWW,
+  you need to have access to a machine on the Internet that has a 
+  program like lynx or netscape.
+
+  If you want to compile this driver as a module ( = code which can be
+  inserted in and removed from the running kernel whenever you want),
+  say M here and read Documentation/modules.txt. The module will be
+  called radio-cadet.o
+
X Miro PCM20 Radio
X CONFIG_RADIO_MIROPCM20
-  Choose Y here if you have this FM radio card. You also need the
-  PCM12/PCM20 ACI mixer in additional low level sound drivers for this
-  to work.
+  Choose Y here if you have this FM radio card. You also need to say Y
+  to "ACI mixer (miroPCM12/PCM20)" (in "additional low level sound
+  drivers") for this to work.
X 
X   In order to control your radio card, you will need to use programs
X   that are compatible with the Video for Linux API. Information on 
@@ -10772,6 +10941,9 @@
X   from the running kernel whenever you want). If you want to compile
X   it as a module, say M here and read Documentation/modules.txt.
X 
+#
+# ARM options
+#
X CPU Optimization
X CONFIG_CPU_ARM2
X   This selects the processor type of your CPU. This is only used to
@@ -10788,40 +10960,154 @@
X   to set this option to, please consult any information supplied with
X   your system.
X 
-Include support for CATS boards
+Include support for Chalice CATS boards
X CONFIG_CATS
-  Say Y here if you wish to include support for the extra hardware
-  found in Chalice CATS machines. The resulting kernel will still run
-  on an EBSA-285 but will be slightly larger. If in doubt say N.
+  Say Y here if you intend to run this kernel on a CATS system.
+
+Include support for Intel EBSA285
+CONFIG_ARCH_EBSA285
+  Say Y here if you intend to run this kernel on an EBSA-285 evaluation
+  board.
+
+Include support for the NetWinder
+CONFIG_ARCH_NETWINDER
+  Say Y here if you intend to run this kernel on the NetWinder.
+
+Math emulation
+CONFIG_NWFPE
+  Say Y to include the NWFPE floating point emulator in the kernel. This
+  is necessary to run most binaries. Linux does not currently support
+  floating point hardware so you need to say Y here even if your machine
+  has an FPA or floating point co-processor podule.
+
+  It is also possible to say M to build the emulator as a module
+  (nwfpe.o) or indeed to leave it out altogether. However, unless you
+  know what you are doing this can easily render your machine unbootable.
+  Saying Y is the safe option.
+
+  You may say N here if you are going to load the Acorn FPEmulator
+  early in the bootup.
+
+DS1620 Thermometer support
+CONFIG_DS1620
+  Say Y here to include support for the thermal management hardware
+  found in the NetWinder. This driver allows the user to control the
+  temperature set points and to read the current temperature.
+
+  It is also possible to say M here to build it as a module (ds1620.o)
+  It is recommended to be used on a NetWinder, but it is not a
+  necessity.
X 
-Debug kernel errors
+Verbose kernel error messages
X CONFIG_DEBUG_ERRORS
X   This option controls verbose debugging information which can be
-  printed when the kernel detects an internal error. Verbose debugging
-  information is useful when tracking down kernel problems, but it
-  will be meaning less for non-kernel hackers. It's safe for everyone
-  to say Y.
-
-Build Tools Selection
-CONFIG_BINUTILS_NEW
-  Say Y here if and only if you're using GCC 2.8.1/EGCS with a
-  binutils version >= 2.8.1 to compile the kernel (check with "gcc
-  --version" and "ld -v").
+  printed when the kernel detects an internal error. This debugging
+  information is useful to kernel hackers when tracking down problems,
+  but mostly meaningless to other people. It's safe to say Y unless
+  you are concerned with the code size or don't want to see these
+  messages.
X 
X Compile kernel with frame pointer
X CONFIG_FRAME_POINTER
-  If you say Y here, the resulting kernel will be slightly larger, but
-  it will give useful debugging/error results. If you don't debug the
-  kernel, you can say N.
+  If you say Y here, the resulting kernel will be slightly larger and
+  slower, but it will give useful debugging information. If you don't
+  debug the kernel, you can say N.
+
+User fault debugging
+CONFIG_DEBUG_USER
+  When a user program crashes due to an exception, the kernel can print
+  a brief message explaining what the problem was. This is sometimes
+  helpful for debugging but serves no purpose on a production system.
+  Most people should say N here.
+
+Include gdb debugging information in kernel binary
+CONFIG_DEBUG_INFO
+  Say Y here to include source-level debugging information in the
+  `vmlinux' binary image. This is handy if you want to use gdb or
+  addr2line to debug the kernel. It has no impact on the in-memory
+  footprint of the running kernel but it can increase the amount of
+  time and disk space needed for compilation. If in doubt say N.
+
+Split initialisation functions into discardable section
+CONFIG_TEXT_SECTIONS
+  Normally code that is only used during initialisation is collected
+  into a special area of the kernel so that it can be discarded and
+  the memory reclaimed when initialisation is complete. In addition,
SHAR_EOF
true || echo 'restore of patch-2.2.8 failed'
fi
echo 'End of  part 01'
echo 'File patch-2.2.8 is continued in part 02'
echo 02 > _shar_seq_.tmp
exit 0
#!/bin/sh
# this is part 02 of a 33 - part archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file patch-2.2.8 continued
if test ! -r _shar_seq_.tmp; then
        echo 'Please unpack part 1 first!'
        exit 1
fi
(read Scheck
if test "$Scheck" != 02; then
        echo Please unpack part "$Scheck" next!
        exit 1
 else
        exit 0
 fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
echo 'x - still skipping patch-2.2.8'
else
echo 'x - continuing with patch-2.2.8'
sed 's/^X//' << 'SHAR_EOF' >> 'patch-2.2.8' &&
+  if the kernel you wish to build is able to run on multiple
+  architectures, it allows the unused code to be discarded. Some
+  versions of binutils, however, have a bug that causes the kernel
+  to crash during startup when this option is enabled. Say Y unless
+  you experience problems that you suspect may be caused by this.
+
+Disable pgtable cache
+CONFIG_NO_PGT_CACHE
+  Normally the kernel maintains a `quicklist' of preallocated pagetable
+  structures in order to increase performance. On machines with very
+  few pages this may however be a loss. Say Y here to disable the pgtable
+  cache.
+
+RISC OS personality
+CONFIG_ARTHUR
+  Say Y here to include the kernel code necessary if you want to run
+  Acorn RISC OS/Arthur binaries under Linux. This code is still very 
+  experimental; if this sounds frightening, say N and sleep in peace.
+  You can also say M here to compile this support as a module (which
+  will be called arthur.o).
X 
X Initial kernel command line
X CONFIG_CMDLINE
-  On some architectures (EBSA285, EBSA110 and Corel NetWinder), there
-  is currently no way for the boot loader to pass arguments to the
-  kernel. For these architectures, you should supply some command-line
-  options at build time by entering them here. As a minimum, you
-  should specify the memory size and the root device (e.g., mem=64M
-  root=/dev/nfs)
+  On some architectures (EBSA110 and CATS), there is currently no way
+  for the boot loader to pass arguments to the kernel. For these
+  architectures, you should supply some command-line options at build
+  time by entering them here. As a minimum, you should specify the
+  memory size and the root device (eg, mem=64M root=/dev/nfs)
+
+Hardware alignment trap
+CONFIG_ALIGNMENT_TRAP
+  ARM processors can not fetch/store information which is not naturally
+  aligned on the bus, ie, a 4 byte fetch must start at an address divisable
+  by 4.  On 32-bit ARM processors, these instructions can be emulated in
+  software with a severe performance impact. This is necessary for correct
+  operation of some network protocols.  With an IP-only configuration
+  it is safe to say N, otherwise say Y.
+
+21285 serial port support
+CONFIG_SERIAL_21285
+  If you have a machine based on a 21285 (Footbridge) StrongARM/PCI
+  bridge you can enable its onboard serial port by enabling this
+  option. The device has major ID 4, minor 64.
+
+Console on 21285 serial port
+CONFIG_SERIAL_21285_CONSOLE
+  If you have enabled the serial port on the 21285 footbridge you can
+  make it the console by answering 'Y' to this option.
+
+Footbridge Mode
+CONFIG_HOST_FOOTBRIDGE
+  The 21285 Footbridge chip can operate in either `host mode' or
+  `add-in' mode.  Say Y if your 21285 is in host mode, and therefore
+  is the configuration master, otherwise say N.
+
+MFM harddisk support
+CONFIG_BLK_DEV_MFM
+  Support the MFM hard drives on the Acorn Archimedes both
+  on-board the A4x0 motherboards and via the Acorn MFM podules.
+  Drives upto 64MB are supported. If you haven't got one of these
+  machines or drives just say 'N'.
+
+Old Archimedes floppy (1772) support
+CONFIG_BLK_DEV_FD1772
+  Support the floppy drive on the Acorn Archimedes (A300, A4x0, A540,
+  R140 and R260) series of computers; it supports only 720K floppies
+  at the moment. If you don't have one of these machines just answer
+  'N'.
+
+Autodetect hard drive geometry
+CONFIG_BLK_DEV_MFM_AUTODETECT
+  If you answer 'Y' the MFM code will attempt to automatically detect
+  the cylinders/heads/sectors count on your hard drive. WARNING: This
+  sometimes doesn't work and it also does some dodgy stuff which
+  potentially might damage your drive.
X 
X IrDA Protocols
X CONFIG_IRDA
@@ -10834,7 +11120,7 @@
X   as well. For more information, see the file
X   Documentation/networking/irda.txt. You also want to read the
X   IR-HOWTO, available from
-  ftp://metalab.unc.edu:/pub/Linux/docs/HOWTO.
+  ftp://metalab.unc.edu/pub/Linux/docs/HOWTO.
X 
X   This support is also available as a module. If you want to compile
X   it as a module, say M here and read Documentation/modules.txt. The
@@ -10864,17 +11150,6 @@
X 
X   If unsure, say N.
X 
-IrDA Recycle RR's
-CONFIG_IRDA_RECYCLE_RR
-  In the normal life of the IrLAP protocol, it sends a lot of small RR
-  (Receive Ready) frames over the link (at least when it has nothing
-  else to do). Saying Y to this option will make IrLAP recycle these
-  frames thus avoiding many alloc_skb's and kfree_skb's. To do this it
-  will only buffer one of these frame which is enough for the normal
-  case.
-
-  If unsure, say Y.
-
X IrDA Debug
X CONFIG_IRDA_DEBUG
X   Say Y here if you want the IrDA subsystem to write debug information
@@ -10912,21 +11187,9 @@
X 
X   The IrLAN protocol can be used to talk with infrared access points 
X   like the HP NetbeamIR, or the ESI JetEye NET. You can also connect 
-  to another Linux machine running the IrLAN protocol for ac-hoc 
+  to another Linux machine running the IrLAN protocol for ad-hoc 
X   networking!
X 
-IrOBEX Protocol
-CONFIG_IROBEX
-  Say Y here if you want to build support for the IrOBEX protocol. If
-  you want to compile it as a module, say M here and read
-  Documentation/modules.txt. The module does not actually implement
-  the IrOBEX protocol since that protocol lives in user space, but it 
-  contains the necessary functions to interface the user-space stuff
-  with the kernel. So you will need to have the user-space library and
-  programs that can use this library installed as well to be able to
-  use the IrOBEX protocol. This module will hopefully be replaced by
-  IrDA sockets in the future.
-
X IrCOMM Protocol
X CONFIG_IRCOMM
X   Say Y here if you want to build support for the IrCOMM protocol. If
@@ -11331,7 +11594,7 @@
X # LocalWords:  COSA SRP muni cz kas cosa Alteon AceNIC acenic VTOC OSes GMT SAx
X # LocalWords:  Inspiron localtime INTS Thinkpads Ralf Brown's Flightstick NNN
X # LocalWords:  Xterminator Blackhawk NN mpu ioports DCA HPDCA HPLANCE DIO Corel
-# LocalWords:  GemTek gemtek CMDLINE IrDA PDA's irmanager irattach RR AVA DN
+# LocalWords:  GemTek gemtek CMDLINE IrDA PDA's irmanager irattach RR AVA DN rg
X # LocalWords:  uit dagb irda LSAP IrLMP RR's IrLAP IR alloc skb's kfree skb's
X # LocalWords:  GZIP IrLAN NetbeamIR ESI JetEye IrOBEX IrCOMM TTY's minicom dti
X # LocalWords:  ircomm ircomm pluto thiguchi IrTTY Linux's bps NetWinder MIR NSC
@@ -11340,3 +11603,4 @@
X # LocalWords:  alphalinux GOBIOS csn chemnitz nat ACARD AMI MegaRAID megaraid
X # LocalWords:  QNXFS ISI isicom xterms Apollos VPN RCPCI rcpci sgi visws pcmcia
X # LocalWords:  IrLPT UIRCC Tecra
+
diff -u --recursive --new-file v2.2.7/linux/Documentation/arm/Netwinder linux/Documentation/arm/Netwinder
--- v2.2.7/linux/Documentation/arm/Netwinder	Wed Dec 31 16:00:00 1969
+++ linux/Documentation/arm/Netwinder	Sun May  2 09:51:16 1999
@@ -0,0 +1,78 @@
+NetWinder specific documentation
+================================
+
+The NetWinder is a small low-power computer, primarily designed
+to run Linux.  It is based around the StrongARM RISC processor,
+DC21285 PCI bridge, with PC-type hardware glued around it.
+
+Port usage
+==========
+
+Min    - Max	Description
+---------------------------
+0x0000 - 0x000f	DMA1
+0x0020 - 0x0021	PIC1
+0x0060 - 0x006f	Keyboard
+0x0070 - 0x007f	RTC
+0x0080 - 0x0087	DMA1
+0x0088 - 0x008f	DMA2
+0x00a0 - 0x00a3	PIC2
+0x00c0 - 0x00df	DMA2
+0x0180 - 0x0187	IRDA
+0x01f0 - 0x01f6	ide0
+0x0201		Game port
+0x0203		RWA010 configuration read
+0x0220 - ?	SoundBlaster
+0x0250 - ?	WaveArtist
+0x0279		RWA010 configuration index
+0x02f8 - 0x02ff	Serial ttyS1
+0x0300 - 0x031f	Ether10
+0x0338		GPIO1
+0x033a		GPIO2
+0x0370 - 0x0371	W83977F configuration registers
+0x0388 - ?	AdLib
+0x03c0 - 0x03df	VGA
+0x03f6		ide0
+0x03f8 - 0x03ff	Serial ttyS0
+0x0400 - 0x0408	DC21143
+0x0480 - 0x0487	DMA1
+0x0488 - 0x048f	DMA2
+0x0a79		RWA010 configuration write
+0xe800 - 0xe80f	ide0/ide1 BM DMA
+
+
+Interrupt usage
+===============
+
+IRQ	type	Description
+---------------------------
+ 0	ISA	100Hz timer
+ 1	ISA	Keyboard
+ 2	ISA	cascade
+ 3	ISA	Serial ttyS1
+ 4	ISA	Serial ttyS0
+ 5	ISA	PS/2 mouse
+ 6	ISA	IRDA
+ 7	ISA	Printer
+ 8	ISA	RTC alarm
+ 9	ISA
+10	ISA	GP10 (Orange reset button)
+11	ISA
+12	ISA	WaveArtist
+13	ISA
+14	ISA	hda1
+15	ISA
+
+DMA usage
+=========
+
+DMA	type	Description
+---------------------------
+ 0	ISA	IRDA
+ 1	ISA
+ 2	ISA	cascade
+ 3	ISA	WaveArtist
+ 4	ISA
+ 5	ISA
+ 6	ISA
+ 7	ISA	WaveArtist
diff -u --recursive --new-file v2.2.7/linux/Documentation/arm/README linux/Documentation/arm/README
--- v2.2.7/linux/Documentation/arm/README	Wed Dec 31 16:00:00 1969
+++ linux/Documentation/arm/README	Sun May  2 09:51:16 1999
@@ -0,0 +1,139 @@
+			   ARM Linux 2.2.3
+			   ===============
+
+      * NOTE * The ARM support in the mainstream Linux kernel sources
+    is not up to date.  Please check ftp.arm.uk.linux.org:/pub/armlinux
+                             for latest updates.
+
+Compilation of kernel
+---------------------
+
+  In order to compile ARM Linux, you will need a compiler capable of
+  generating ARM ELF code with GNU extensions.  GCC-2.7.2.2 ELF, GCC 2.8.1
+  and EGCS are good compilers.  Note that GCC-2.7.2.2 ELF is rare, and
+  you probably don't have it.
+
+  To build ARM Linux natively, you shouldn't have to alter the ARCH = line in
+  the top level Makefile.  However, if you don't have the ARM Linux ELF tools
+  installed as default, then you should change the CROSS_COMPILE line as
+  detailed below.
+
+  If you wish to cross-compile, then alter the following lines in the top
+  level make file:
+
+    ARCH = <whatever>
+	with
+    ARCH = arm
+
+	and
+
+    CROSS_COMPILE=
+	to
+    CROSS_COMPILE=<your-path-to-your-compiler-without-gcc>
+	eg.
+    CROSS_COMPILE=arm-linux-
+
+  Do a 'make config', followed by 'make dep', and finally 'make Image' to
+  build the kernel (arch/arm/boot/Image).  A compressed image can be built
+  by doing a 'make zImage' instead of 'make Image'.
+
+
+Bug reports etc
+---------------
+
+  Please send patches, bug reports and code for the ARM Linux project
+  to li...@arm.linux.org.uk  Patches will not be included into future
+  kernels unless they come to me (or the relevant person concerned).
+
+  When sending bug reports, please ensure that they contain all relevant
+  information, eg. the kernel messages that were printed before/during
+  the problem, what you were doing, etc.
+
+  For patches, please include some explanation as to what the patch does
+  and why (if relevant).
+
+
+Modules
+-------
+
+  Although modularisation is supported (and required for the FP emulator),
+  each module on an arm2/arm250/arm3 machine when is loaded will take
+  memory up to the next 32k boundary due to the size of the pages.  Hence is
+  modularisation on these machines really worth it?
+
+  However, arm6 and up machines allow modules to take multiples of 4k, and
+  as such Acorn RiscPCs and other architectures using these processors can
+  make good use of modularisation.
+
+
+ADFS Image files
+----------------
+
+  You can access image files on your ADFS partitions by mounting the ADFS
+  partition, and then using the loopback device driver.  You must have
+  losetup installed.
+
+  Please note that the PCEmulator DOS partitions have a partition table at
+  the start, and as such, you will have to give '-o offset' to losetup.
+
+
+Request to developers
+---------------------
+
+  When writing device drivers which include a separate assembler file, please
+  include it in with the C file, and not the arch/arm/lib directory.  This
+  allows the driver to be compiled as a loadable module without requiring
+  half the code to be compiled into the kernel image.
+
+  In general, try to avoid using assembler unless it is really necessary.  It
+  makes drivers far less easy to port to other hardware.
+
+
+ST506 hard drives
+-----------------
+
+  The ST506 hard drive controllers seem to be working fine (if a little
+  slowly).  At the moment they will only work off the controllers on an
+  A4x0's motherboard, but for it to work off a Podule just requires
+  someone with a podule to add the addresses for the IRQ mask and the
+  HDC base to the source.
+
+  As of 31/3/96 it works with two drives (you should get the ADFS
+  *configure harddrive set to 2). I've got an internal 20MB and a great
+  big external 5.25" FH 64MB drive (who could ever want more :-) ).
+
+  I've just got 240K/s off it (a dd with bs=128k); thats about half of what
+  RiscOS gets; but it's a heck of a lot better than the 50K/s I was getting
+  last week :-)
+
+  Known bug: Drive data errors can cause a hang; including cases where
+  the controller has fixed the error using ECC. (Possibly ONLY
+  in that case...hmm).
+
+
+1772 Floppy
+-----------
+  This also seems to work OK, but hasn't been stressed much lately.  It
+  hasn't got any code for disc change detection in there at the moment which
+  could be a bit of a problem!  Suggestions on the correct way to do this
+  are welcome.
+
+
+Kernel entry (head-armv.S)
+--------------------------
+  The initial entry into the kernel made via head-armv.S uses architecture
+  independent code.  The architecture is selected by the value of 'r1' on
+  entry, which must be kept unique.  You can register a new architecture
+  by mailing the following details to r...@arm.uk.linux.org.  Please give
+  the mail a subject of 'Register new architecture':
+
+    Name: <name of your architecture>
+    ARCHDIR: <name of include/asm-arm/arch-* directory>
+    Description:
+    <description of your architecture>
+
+  Please follow this format - it is an automated system.  You should
+  receive a reply the next day.
+
+---
+Russell King (27/03/1999)
diff -u --recursive --new-file v2.2.7/linux/Documentation/arm/nwfpe/NOTES linux/Documentation/arm/nwfpe/NOTES
--- v2.2.7/linux/Documentation/arm/nwfpe/NOTES	Wed Dec 31 16:00:00 1969
+++ linux/Documentation/arm/nwfpe/NOTES	Sun May  2 09:51:16 1999
@@ -0,0 +1,29 @@
+There seems to be a problem with exp(double) and our emulator.  I haven't
+been able to track it down yet.  This does not occur with the emulator
+supplied by Russell King.
+
+I also found one oddity in the emulator.  I don't think it is serious but
+will point it out.  The ARM calling conventions require floating point
+registers f4-f7 to be preserved over a function call.  The compiler quite
+often uses an stfe instruction to save f4 on the stack upon entry to a
+function, and an ldfe instruction to restore it before returning.
+
+I was looking at some code, that calculated a double result, stored it in f4
+then made a function call. Upon return from the function call the number in
+f4 had been converted to an extended value in the emulator.
+
+This is a side effect of the stfe instruction.  The double in f4 had to be
+converted to extended, then stored.  If an lfm/sfm combination had been used,
+then no conversion would occur.  This has performance considerations.  The
+result from the function call and f4 were used in a multiplication.  If the
+emulator sees a multiply of a double and extended, it promotes the double to
+extended, then does the multiply in extended precision.
+
+This code will cause this problem:
+
+double x, y, z;
+z = log(x)/log(y);
+
+The result of log(x) (a double) will be calculated, returned in f0, then
+moved to f4 to preserve it over the log(y) call.  The division will be done
+in extended precision, due to the stfe instruction used to save f4 in log(y).
diff -u --recursive --new-file v2.2.7/linux/Documentation/arm/nwfpe/README linux/Documentation/arm/nwfpe/README
--- v2.2.7/linux/Documentation/arm/nwfpe/README	Wed Dec 31 16:00:00 1969
+++ linux/Documentation/arm/nwfpe/README	Sun May  2 09:51:16 1999
@@ -0,0 +1,70 @@
+This directory contains the version 0.92 test release of the NetWinder 
+Floating Point Emulator.
+
+The majority of the code was written by me, Scott Bambrough It is
+written in C, with a small number of routines in inline assembler
+where required.  It was written quickly, with a goal of implementing a
+working version of all the floating point instructions the compiler
+emits as the first target.  I have attempted to be as optimal as
+possible, but there remains much room for improvement.
+
+I have attempted to make the emulator as portable as possible.  One of
+the problems is with leading underscores on kernel symbols.  Elf
+kernels have no leading underscores, a.out compiled kernels do.  I
+have attempted to use the C_SYMBOL_NAME macro wherever this may be
+important.
+
+Another choice I made was in the file structure.  I have attempted to
+contain all operating system specfic code in one module (fpmodule.*).
+All the other files contain emulator specific code.  This should allow
+others to port the emulator to NetBSD for instance relatively easily.
+
+The floating point operations are based on SoftFloat Release 2, by
+John Hauser.  SoftFloat is a software implementation of floating-point
+that conforms to the IEC/IEEE Standard for Binary Floating-point
+Arithmetic.  As many as four formats are supported: single precision,
+double precision, extended double precision, and quadruple precision.
+All operations required by the standard are implemented, except for
+conversions to and from decimal.  We use only the single precision,
+double precision and extended double precision formats.  The port of
+SoftFloat to the ARM was done by Phil Blundell, based on an earlier
+port of SoftFloat version 1 by Neil Carson for NetBSD/arm32.
+
+The file README.FPE contains a description of what has been implemented
+so far in the emulator.  The file TODO contains a information on what 
+remains to be done, and other ideas for the emulator.
+
+Bug reports, comments, suggestions should be directed to me at
+<sco...@corelcomputer.com>.  General reports of "this program doesn't
+work correctly when your emulator is installed" are useful for
+determining that bugs still exist; but are virtually useless when
+attempting to isolate the problem.  Please report them, but don't
+expect quick action.  Bugs still exist.  The problem remains in isolating
+which instruction contains the bug.  Small programs illustrating a specific
+problem are a godsend.
+
+Legal Notices
+-------------
+
+The NetWinder Floating Point Emulator is free software.  Everything Corel
+has written is provided under the GNU GPL.  See the file COPYING for copying
+conditions.  Excluded from the above is the SoftFloat code.  John Hauser's 
+legal notice for SoftFloat is included below.
+
+-------------------------------------------------------------------------------
+SoftFloat Legal Notice
+
+SoftFloat was written by John R. Hauser.  This work was made possible in
+part by the International Computer Science Institute, located at Suite 600,
+1947 Center Street, Berkeley, California 94704.  Funding was partially
+provided by the National Science Foundation under grant MIP-9311980.  The
+original version of this code was written as part of a project to build
+a fixed-point vector processor in collaboration with the University of
+California at Berkeley, overseen by Profs. Nelson Morgan and John Wawrzynek.
+
+THIS SOFTWARE IS DISTRIBUTED AS IS, FOR FREE.  Although reasonable effort
+has been made to avoid it, THIS SOFTWARE MAY CONTAIN FAULTS THAT WILL AT
+TIMES RESULT IN INCORRECT BEHAVIOR.  USE OF THIS SOFTWARE IS RESTRICTED TO
+PERSONS AND ORGANIZATIONS WHO CAN AND WILL TAKE FULL RESPONSIBILITY FOR ANY
+AND ALL LOSSES, COSTS, OR OTHER PROBLEMS ARISING FROM ITS USE.
+-------------------------------------------------------------------------------
diff -u --recursive --new-file v2.2.7/linux/Documentation/arm/nwfpe/README.FPE linux/Documentation/arm/nwfpe/README.FPE
--- v2.2.7/linux/Documentation/arm/nwfpe/README.FPE	Wed Dec 31 16:00:00 1969
+++ linux/Documentation/arm/nwfpe/README.FPE	Sun May  2 09:51:16 1999
@@ -0,0 +1,156 @@
+The following describes the current state of the NetWinder's floating point
+emulator.
+
+In the following nomenclature is used to describe the floating point
+instructions.  It follows the conventions in the ARM manual.
+
+<S|D|E> = <single|double|extended>, no default
+{P|M|Z} = {round to +infinity,round to -infinity,round to zero},
+          default = round to nearest
+
+Note: items enclosed in {} are optional.
+
+Floating Point Coprocessor Data Transfer Instructions (CPDT)
+------------------------------------------------------------
+
+LDF/STF - load and store floating
+
+<LDF|STF>{cond}<S|D|E> Fd, Rn
+<LDF|STF>{cond}<S|D|E> Fd, [Rn, #<expression>]{!}
+<LDF|STF>{cond}<S|D|E> Fd, [Rn], #<expression>
+
+These instructions are fully implemented.
+
+LFM/SFM - load and store multiple floating
+
+Form 1 syntax:
+<LFM|SFM>{cond}<S|D|E> Fd, <count>, [Rn]
+<LFM|SFM>{cond}<S|D|E> Fd, <count>, [Rn, #<expression>]{!}
+<LFM|SFM>{cond}<S|D|E> Fd, <count>, [Rn], #<expression>
+
+Form 2 syntax:
+<LFM|SFM>{cond}<FD,EA> Fd, <count>, [Rn]{!}
+
+These instructions are fully implemented.  They store/load three words
+for each floating point register into the memory location given in the 
+instruction.  The format in memory is unlikely to be compatible with
+other implementations, in particular the actual hardware.  Specific
+mention of this is made in the ARM manuals.  
+
+Floating Point Coprocessor Register Transfer Instructions (CPRT)
+----------------------------------------------------------------
+
+Conversions, read/write status/control register instructions
+
+FLT{cond}<S,D,E>{P,M,Z} Fn, Rd          Convert integer to floating point
+FIX{cond}{P,M,Z} Rd, Fn                 Convert floating point to integer
+WFS{cond} Rd                            Write floating point status register
+RFS{cond} Rd                            Read floating point status register
+WFC{cond} Rd                            Write floating point control register
+RFC{cond} Rd                            Read floating point control register
+
+FLT/FIX are fully implemented.
+
+RFS/WFS are fully implemented.
+
+RFC/WFC are fully implemented.  RFC/WFC are supervisor only instructions, and
+presently check the CPU mode, and do an invalid instruction trap if not called
+from supervisor mode.
+
+Compare instructions
+
+CMF{cond} Fn, Fm        Compare floating
+CMFE{cond} Fn, Fm       Compare floating with exception
+CNF{cond} Fn, Fm        Compare negated floating
+CNFE{cond} Fn, Fm       Compare negated floating with exception
+
+These are fully implemented.
+
+Floating Point Coprocessor Data Instructions (CPDT)
+---------------------------------------------------
+
+Dyadic operations:
+
+ADF{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - add
+SUF{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - subtract
+RSF{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - reverse subtract
+MUF{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - multiply
+DVF{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - divide
+RDV{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - reverse divide
+
+These are fully implemented.
+
+FML{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - fast multiply
+FDV{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - fast divide
+FRD{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - fast reverse divide
+
+These are fully implemented as well.  They use the same algorithm as the
+non-fast versions.  Hence, in this implementation their performance is
+equivalent to the MUF/DVF/RDV instructions.  This is acceptable according
+to the ARM manual.  The manual notes these are defined only for single
+operands, on the actual FPA11 hardware they do not work for double or
+extended precision operands.  The emulator currently does not check
+the requested permissions conditions, and performs the requested operation.
+
+RMF{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - IEEE remainder
+
+This is fully implemented.
+
+Monadic operations:
+
+MVF{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - move
+MNF{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - move negated
+
+These are fully implemented.
+
+ABS{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - absolute value
+SQT{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - square root
+RND{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - round
+
+These are fully implemented.
+
+URD{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - unnormalized round
+NRM{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - normalize
+
+These are implemented.  URD is implemented using the same code as the RND
+instruction.  Since URD cannot return a unnormalized number, NRM becomes
+a NOP.
+
+Library calls:
+
+POW{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - power
+RPW{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - reverse power
+POL{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - polar angle (arctan2)
+
+LOG{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - logarithm to base 10
+LGN{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - logarithm to base e 
+EXP{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - exponent
+SIN{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - sine
+COS{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - cosine
+TAN{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - tangent
+ASN{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - arcsine
+ACS{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - arccosine
+ATN{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - arctangent
+
+These are not implemented.  They are not currently issued by the compiler,
+and are handled by routines in libc.  These are not implemented by the FPA11
+hardware, but are handled by the floating point support code.  They should 
+be implemented in future versions.
+
+Signalling:
+
+Signals are implemented.  However current ELF kernels produced by Corel
+Computer have a bug in them that prevents the module from generating a 
+SIGFPE.  This is caused by a failure to alias fp_current to the kernel
+variable current_set[0] correctly.
+
+The kernel provided with this distribution (vmlinux-nwfpe-0.93) contains
+a fix for this problem and also incorporates the current version of the
+emulator directly.  It is possible to run with no floating point module
+loaded with this kernel.  It is provided as a demonstration of the 
+technology and for those who want to do floating point work that depends
+on signals.  It is not strictly necessary to use the module.
+
+A module (either the one provided by Russell King, or the one in this 
+distribution) can be loaded to replace the functionality of the emulator
+built into the kernel.
diff -u --recursive --new-file v2.2.7/linux/Documentation/arm/nwfpe/TODO linux/Documentation/arm/nwfpe/TODO
--- v2.2.7/linux/Documentation/arm/nwfpe/TODO	Wed Dec 31 16:00:00 1969
+++ linux/Documentation/arm/nwfpe/TODO	Sun May  2 09:51:16 1999
@@ -0,0 +1,67 @@
+TODO LIST
+---------
+
+POW{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - power
+RPW{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - reverse power
+POL{cond}<S|D|E>{P,M,Z} Fd, Fn, <Fm,#value> - polar angle (arctan2)
+
+LOG{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - logarithm to base 10
+LGN{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - logarithm to base e 
+EXP{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - exponent
+SIN{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - sine
+COS{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - cosine
+TAN{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - tangent
+ASN{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - arcsine
+ACS{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - arccosine
+ATN{cond}<S|D|E>{P,M,Z} Fd, <Fm,#value> - arctangent
+
+These are not implemented.  They are not currently issued by the compiler,
+and are handled by routines in libc.  These are not implemented by the FPA11
+hardware, but are handled by the floating point support code.  They should 
+be implemented in future versions.
+
+There are a couple of ways to approach the implementation of these.  One
+method would be to use accurate table methods for these routines.  I have 
+a couple of papers by S. Gal from IBM's research labs in Haifa, Israel that
+seem to promise extreme accuracy (in the order of 99.8%) and reasonable speed.
+These methods are used in GLIBC for some of the transcendental functions.
+
+Another approach, which I know little about is CORDIC.  This stands for
+Coordinate Rotation Digital Computer, and is a method of computing 
+transcendental functions using mostly shifts and adds and a few
+multiplications and divisions.  The ARM excels at shifts and adds,
+so such a method could be promising, but requires more research to 
+determine if it is feasible.
+
+Rounding Methods
+
+The IEEE standard defines 4 rounding modes.  Round to nearest is the
+default, but rounding to + or - infinity or round to zero are also allowed.
+Many architectures allow the rounding mode to be specified by modifying bits
+in a control register.  Not so with the ARM FPA11 architecture.  To change
+the rounding mode one must specify it with each instruction.
+
+This has made porting some benchmarks difficult.  It is possible to
+introduce such a capability into the emulator.  The FPCR contains 
+bits describing the rounding mode.  The emulator could be altered to 
+examine a flag, which if set forced it to ignore the rounding mode in
+the instruction, and use the mode specified in the bits in the FPCR.
+
+This would require a method of getting/setting the flag, and the bits
+in the FPCR.  This requires a kernel call in ArmLinux, as WFC/RFC are
+supervisor only instructions.  If anyone has any ideas or comments I
+would like to hear them.
+
+[NOTE: pulled out from some docs on ARM floating point, specifically
+ for the Acorn FPE, but not limited to it:
+
+ The floating point control register (FPCR) may only be present in some
+ implementations: it is there to control the hardware in an implementation-
+ specific manner, for example to disable the floating point system.  The user
+ mode of the ARM is not permitted to use this register (since the right is
+ reserved to alter it between implementations) and the WFC and RFC
+ instructions will trap if tried in user mode.
+
+ Hence, the answer is yes, you could do this, but then you will run a high
+ risk of becoming isolated if and when hardware FP emulation comes out
+		-- Russell].
diff -u --recursive --new-file v2.2.7/linux/Documentation/digiboard.txt linux/Documentation/digiboard.txt
--- v2.2.7/linux/Documentation/digiboard.txt	Fri Jan  8 22:35:58 1999
+++ linux/Documentation/digiboard.txt	Thu Apr 29 11:53:41 1999
@@ -111,7 +111,7 @@
X Boot-time configuration when linked into the kernel
X ---------------------------------------------------
X 
-Per Board to be configured, pass a digi= commandline parameter to the
+Per board to be configured, pass a digi= command-line parameter to the
X kernel using lilo or loadlin. It consists of a string of comma separated
X identifiers or integers.  The 6 values in order are:
X 
@@ -142,7 +142,7 @@
X 
X    append="digi=1,0,0,16,512,851968"
X 
-If you don't give a digi= commandline, the compiled-in defaults of
+If you don't give a digi= command line, the compiled-in defaults of
X board 1: io=0x200, membase=0xd0000, altpin=off and numports=16 are used.
X 
X If you have the resources (io&mem) free for use, configure your board to
@@ -153,9 +153,9 @@
X Sources of Information
X ----------------------
X 
-Webpage: http://private.fuller.edu/clameter/digi.html
+Web page: http://private.fuller.edu/clameter/digi.html
X 
-Mailing List: digi...@list.fuller.edu
+Mailing list: digi...@list.fuller.edu
X 
X (Write e-mail to that address to subscribe. Common ListServ commands work.
X Archive of messages available)
diff -u --recursive --new-file v2.2.7/linux/Documentation/digiepca.txt linux/Documentation/digiepca.txt
--- v2.2.7/linux/Documentation/digiepca.txt	Fri Jan  8 22:35:58 1999
+++ linux/Documentation/digiepca.txt	Thu Apr 29 11:53:41 1999
@@ -11,7 +11,7 @@
X 
X The Linux MAKEDEV command does not support generating the Digiboard
X Devices.  Users executing digiConfig to setup EISA and PC series cards
-will have their device nodes automaticly constructed (cud?? for ~CLOCAL,
+will have their device nodes automatically constructed (cud?? for ~CLOCAL,
X and ttyD?? for CLOCAL).  Users wishing to boot their board from the LILO
X prompt, or those users booting PCI cards may use buildDIGI to construct 
X the necessary nodes. 
@@ -19,7 +19,7 @@
X Notes:
X ------
X This driver may be configured via LILO.  For users who have already configured
-their driver using digiConfig, configuring from lilo will override previous 
+their driver using digiConfig, configuring from LILO will override previous 
X settings.  Multiple boards may be configured by issuing multiple LILO command 
X lines.  For examples see the bottom of this document.
X 
diff -u --recursive --new-file v2.2.7/linux/Documentation/fb/matroxfb.txt linux/Documentation/fb/matroxfb.txt
--- v2.2.7/linux/Documentation/fb/matroxfb.txt	Wed Apr 28 11:37:29 1999
+++ linux/Documentation/fb/matroxfb.txt	Thu Apr 29 11:53:41 1999
@@ -95,11 +95,11 @@
X =======
X 
X Driver contains SVGALib compatibility code. It is turned on by choosing textual
-mode for console. You can do it at boottime by using videomode
+mode for console. You can do it at boot time by using videomode
X 2,3,7,0x108-0x10C or 0x1C0. At runtime, `fbset -depth 0' does this work.
X Unfortunately, after SVGALib application exits, screen contents is corrupted.
-Switching to another console and back fixes it. I hope that it is SVGALib and
-not mine problem, but I'm not sure.
+Switching to another console and back fixes it. I hope that it is SVGALib's
+problem and not mine, but I'm not sure.
X 
X 
X Configuration
@@ -113,7 +113,7 @@
X mem:X    - size of memory (X can be in megabytes, kilobytes or bytes)
X            You can only decrease value determined by driver because of
X 	   it always probe for memory. Default is to use whole detected
-	   memory usable for on-screen display (i.e. max. 8MB).
+	   memory usable for on-screen display (i.e. max. 8 MB).
X disabled - do not load driver; you can use also `off', but `disabled'
X            is here too.
X enabled  - load driver, if you have `video=matrox:disabled' in LILO
@@ -159,7 +159,7 @@
X inv24    - change timings parameters for 24bpp modes on Millenium and
X            Millenium II. Specify this if you see strange color shadows around
X 	   characters.
-noinv24  - use standard timmings. It is default.
+noinv24  - use standard timings. It is the default.
X inverse  - invert colors on screen (for LCD displays)
X noinverse - show true colors on screen. It is default.
X dev:X    - bind driver to device X. Driver numbers device from 0 up to N,
@@ -252,25 +252,25 @@
X    access to /dev/fb* - everyone with access to this device can destroy
X    your monitor, believe me...).
X  + 24bpp does not support correctly XF-FBDev on big-endian architectures.
- + interlaced text mode is not supported; it looks like hardware limitiation,
+ + interlaced text mode is not supported; it looks like hardware limitation,
X    but I'm not sure.
X  + G200 SGRAM/SDRAM is not autodetected.
X  + maybe more...
X And following misfeatures:
X  + SVGALib does not restore screen on exit.
X  + pixclock for text modes is limited by hardware to
-    83MHz on G200
-    66MHz on Millenium I
-    60MHz on Millenium II
-   Because of I have not access to other devices, I do not know specific
+    83 MHz on G200
+    66 MHz on Millennium I
+    60 MHz on Millennium II
+   Because I have no access to other devices, I do not know specific
X    frequencies for them. So driver does not check this and allows you to
-   set frequency higher that this. It cause sparks, black holes and other
-   pretty effects on screen. Device was not destroyed during tests :-)
- + my Millenium G200 oscillator has frequency range from 35MHz to 380MHz
-   (and it works with 8bpp on about 320MHz dotclocks (and changed mclk)).
-   But Matrox says on product sheet that VCO limit is 50-250MHz, so I believe
-   them (maybe that chip overheates, but it has very big cooler (G100 has
-   not one), so it should work).
+   set frequency higher that this. It causes sparks, black holes and other
+   pretty effects on screen. Device was not destroyed during tests. :-)
+ + my Millennium G200 oscillator has frequency range from 35 MHz to 380 MHz
+   (and it works with 8bpp on about 320 MHz dotclocks (and changed mclk)).
+   But Matrox says on product sheet that VCO limit is 50-250 MHz, so I believe
+   them (maybe that chip overheats, but it has a very big cooler (G100 has
+   none), so it should work).
X  + special mixed video/graphics videomodes of Mystique and Gx00 - 2G8V16 and
X    G16V16 are not supported
X  + color keying is not supported
@@ -281,14 +281,14 @@
X    specify vslen=4000 and so on).
X  + maybe more...
X And following features:
- + 4bpp is available only on Millenium I and Millenium II. It is hardware
-   limitiation.
+ + 4bpp is available only on Millennium I and Millennium II. It is hardware
+   limitation.
X  + current fbset is not able to set 15bpp videomode: you must specify
X    depth==16 and green.length==5. fbset does not allow you to set 
X    green.length.
X  + text mode uses 6 bit VGA palette instead of 8 bit (one of 262144 colors
X    instead of one of 16M colors). It is due to hardware limitation of 
-   MilleniumI/II and SVGALib compatibility.
+   Millennium I/II and SVGALib compatibility.
X 
X 
X Benchmarks
@@ -296,14 +296,14 @@
X It is time to redraw whole screen 1000 times in 1024x768, 60Hz. It is
X time for draw 6144000 characters on screen through /dev/vcsa
X (for 32bpp it is about 3GB of data (exactly 3000 MB); for 8x16 font in 
-16 seconds, i.e. 187MBps).
+16 seconds, i.e. 187 MBps).
X Times were obtained from one older version of driver, now they are about 3%
-faster, it is kernel-space only time on P-II/350MHz, Millenium I in 33MHz
+faster, it is kernel-space only time on P-II/350 MHz, Millennium I in 33 MHz
X PCI slot, G200 in AGP 2x slot. I did not test vgacon.
X 
X NOACCEL
X         8x16                 12x22
-        MilleniumI   G200    MilleniumI   G200
+        Millennium I  G200   Millennium I  G200
X 8bpp    16.42         9.54   12.33         9.13
X 16bpp   21.00        15.70   19.11        15.02
X 24bpp   36.66        36.66   35.00        35.00
@@ -311,7 +311,7 @@
X 
X ACCEL, nofastfont
X         8x16                 12x22                6x11
-	MilleniumI   G200    MilleniumI   G200    MilleniumI   G200
+	Millennium I  G200   Millennium I  G200    Millennium I G200
X 8bpp     7.79         7.24   13.55         7.78   30.00        21.01
X 16bpp    9.13         7.78   16.16         7.78   30.00        21.01
X 24bpp   14.17        10.72   18.69        10.24   34.99        21.01
@@ -319,7 +319,7 @@
X 
X ACCEL, fastfont
X         8x16                 12x22                6x11
-	MilleniumI   G200    MilleniumI   G200    MilleniumI   G200
+	Millennium I  G200    Millennium I G200   Millennium I  G200
X 8bpp     8.41         6.01    6.54         4.37   16.00        10.51
X 16bpp    9.54         9.12    8.76         6.17   17.52        14.01
X 24bpp   15.00        12.36   11.67        10.00   22.01        18.32
@@ -327,10 +327,10 @@
X 
X TEXT
X         8x16
-	MilleniumI   G200
+	Millennium I  G200
X TEXT     3.29         1.50
X 
X 	
-* Yes, it is slower than Millenium I.
+* Yes, it is slower than Millennium I.
X --
X Petr Vandrovec <vand...@vc.cvut.cz>
diff -u --recursive --new-file v2.2.7/linux/Documentation/fb/vesafb.txt linux/Documentation/fb/vesafb.txt
--- v2.2.7/linux/Documentation/fb/vesafb.txt	Fri Apr 16 14:47:30 1999
+++ linux/Documentation/fb/vesafb.txt	Thu Apr 29 11:53:41 1999
@@ -10,7 +10,7 @@
X 
X This means we decide at boot time whenever we want to run in text or
X graphics mode.  Switching mode later on (in protected mode) is
-impossible; BIOS calls work in real mode only.  VESA BIOS Extentions
+impossible; BIOS calls work in real mode only.  VESA BIOS Extensions
X Version 2.0 are required, because we need a linear frame buffer.
X 
X Advantages:
@@ -66,10 +66,10 @@
X mode at the "vga=ask" prompt. For example if you like to use 
X 1024x768x256 colors you have to say "305" at this prompt.
X 
-If this does not work, this might be becauce your BIOS does not support
-linear framebuffers or becauce it does not support this mode at all.
+If this does not work, this might be because your BIOS does not support
+linear framebuffers or because it does not support this mode at all.
X Even if your board does, it might be the BIOS which does not.  VESA BIOS
-Extentions v2.0 are required, 1.2 is NOT sufficient.  You will get a
+Extensions v2.0 are required, 1.2 is NOT sufficient.  You will get a
X "bad mode number" message if something goes wrong.
X 
X 1. Note: LILO cannot handle hex, for booting directly with 
@@ -99,8 +99,8 @@
X    available) and boot linux with loadlin.
X  * use a native driver (matroxfb/atyfb) instead if vesafb.  If none
X    is available, write a new one!
- * VBE 3.0 might work too.  I havn't neither a gfx board with VBE 3.0
-   support nor the specs, so I havn't checked this yet.  But maybe...
+ * VBE 3.0 might work too.  I have neither a gfx board with VBE 3.0
+   support nor the specs, so I have not checked this yet.
X 
X 
X Configuration
@@ -108,7 +108,7 @@
X 
X The VESA BIOS provides protected mode interface for changing
X some parameters.  vesafb can use it for palette changes and
-to pan the display.  It is turned off by default becauce it
+to pan the display.  It is turned off by default because it
X seems not to work with some BIOS versions, but there are options
X to turn it on.
X 
@@ -124,7 +124,7 @@
X 	interface.  The visible screen is just a window of the
X 	video memory, console scrolling is done by changing the
X 	start of the window.
-	pro:	* scrolling (fullscreen) is fast, becauce there is
+	pro:	* scrolling (fullscreen) is fast, because there is
X 		  no need to copy around data.
X 		* You'll get scrollback (the Shift-PgUp thing),
X 		  the video memory can be used as scrollback buffer
diff -u --recursive --new-file v2.2.7/linux/Documentation/filesystems/00-INDEX linux/Documentation/filesystems/00-INDEX
--- v2.2.7/linux/Documentation/filesystems/00-INDEX	Fri Apr 16 14:47:30 1999
+++ linux/Documentation/filesystems/00-INDEX	Sun May  2 09:51:16 1999
@@ -1,5 +1,7 @@
X 00-INDEX
X 	- this file (info on some of the filesystems supported by linux).
+adfs.txt
+	- info and mount options for the Acorn Advanced Disc Filing System.
X affs.txt
X 	- info and mount options for the Amiga Fast File System.
X coda.txt
diff -u --recursive --new-file v2.2.7/linux/Documentation/filesystems/adfs.txt linux/Documentation/filesystems/adfs.txt
--- v2.2.7/linux/Documentation/filesystems/adfs.txt	Wed Dec 31 16:00:00 1969
+++ linux/Documentation/filesystems/adfs.txt	Sun May  2 09:51:16 1999
@@ -0,0 +1,57 @@
+Mount options for ADFS
+----------------------
+
+  uid=nnn	All files in the partition will be owned by
+		user id nnn.  Default 0 (root).
+  gid=nnn	All files in the partition willbe in group
+		nnn.  Default 0 (root).
+  ownmask=nnn	The permission mask for ADFS 'owner' permissions
+		will be nnn.  Default 0700.
+  othmask=nnn	The permission mask for ADFS 'other' permissions
+		will be nnn.  Default 0077.
+
+Mapping of ADFS permissions to Linux permissions
+------------------------------------------------
+
+  ADFS permissions consist of the following:
+
+	Owner read
+	Owner write
+	Other read
+	Other write
+
+  (In older versions, an 'execute' permission did exist, but this
+   does not hold the same meaning as the Linux 'execute' permission
+   and is now obsolete).
+
+  The mapping is performed as follows:
+
+	Owner read				-> -r--r--r--
+	Owner write				-> --w--w---w
+	Owner read and filetype UnixExec	-> ---x--x--x
+    These are then masked by ownmask, eg 700	-> -rwx------
+	Possible owner mode permissions		-> -rwx------
+
+	Other read				-> -r--r--r--
+	Other write				-> --w--w--w-
+	Other read and filetype UnixExec	-> ---x--x--x
+    These are then masked by othmask, eg 077	-> ----rwxrwx
+	Possible other mode permissions		-> ----rwxrwx
+
+  Hence, with the default masks, if a file is owner read/write, and
+  not a UnixExec filetype, then the permissions will be:
+
+			-rw-------
+
+  However, if the masks were ownmask=0770,othmask=0007, then this would
+  be modified to:
+			-rw-rw----
+
+  There is no restriction on what you can do with these masks.  You may
+  wish that either read bits give read access to the file for all, but
+  keep the default write protection (ownmask=0755,othmask=0577):
+
+			-rw-r--r--
+
+  You can therefore tailor the permission translation to whatever you
+  desire the permissions should be under Linux.
diff -u --recursive --new-file v2.2.7/linux/Documentation/filesystems/coda.txt linux/Documentation/filesystems/coda.txt
--- v2.2.7/linux/Documentation/filesystems/coda.txt	Wed Jun 24 22:54:02 1998
+++ linux/Documentation/filesystems/coda.txt	Thu Apr 29 11:53:41 1999
@@ -776,7 +776,7 @@
X   indicate confusion between the system call creat and the VFS operation
X   create. The VFS operation create is only called to create new objects.
X   This create call differs from the Unix one in that it is not invoked
-  to return a file descriptor. The trunctate and exclusive options,
+  to return a file descriptor. The truncate and exclusive options,
X   together with the mode, could simply be part of the mode as it is
X   under Unix.  There should be no flags argument; this is used in open
X   (2) to return a file descriptor for READ or WRITE mode.
diff -u --recursive --new-file v2.2.7/linux/Documentation/filesystems/smbfs.txt linux/Documentation/filesystems/smbfs.txt
--- v2.2.7/linux/Documentation/filesystems/smbfs.txt	Fri Jan 23 18:10:31 1998
+++ linux/Documentation/filesystems/smbfs.txt	Thu Apr 29 11:53:41 1999
@@ -1,7 +1,7 @@
X Smbfs is a filesystem that implements the SMB protocol, which is the
X protocol used by Windows for Workgroups, Windows 95 and Windows NT.
X Smbfs was inspired by Samba, the program written by Andrew Tridgell
-that turns any unix host into a file server for DOS or Windows clients.
+that turns any Unix host into a file server for DOS or Windows clients.
X See ftp://nimbus.anu.edu.au/pub/tridge/samba/ for this interesting
X program suite and much more information on SMB, NetBIOS over TCP/IP,
X and explanations for concepts like netbios name or share.
diff -u --recursive --new-file v2.2.7/linux/Documentation/filesystems/vfat.txt linux/Documentation/filesystems/vfat.txt
--- v2.2.7/linux/Documentation/filesystems/vfat.txt	Wed Jun 24 22:54:02 1998
+++ linux/Documentation/filesystems/vfat.txt	Thu Apr 29 11:53:41 1999
@@ -177,7 +177,7 @@
X 
X Because the extended FAT system is backward compatible, it is
X possible for old software to modify directory entries.  Measures must
-be taken to insure the validity of slots.  An extended FAT system can
+be taken to ensure the validity of slots.  An extended FAT system can
X verify that a slot does in fact belong to an 8.3 directory entry by
X the following:
X 
diff -u --recursive --new-file v2.2.7/linux/Documentation/ftape.txt linux/Documentation/ftape.txt
--- v2.2.7/linux/Documentation/ftape.txt	Sun Jun  7 11:16:25 1998
+++ linux/Documentation/ftape.txt	Mon May 10 13:00:10 1999
@@ -267,9 +267,9 @@
X 
X    ii.  Hardware setup
X 	BASE is the base address of your floppy disk controller,
-        IRQ and DMA give its interrupt and dma channel, respectively.
-        BOOL is an integer, "0" means: "NO!", any other value means:
-	"YES!". You don't need to specify anything if connecting your tape
+        IRQ and DMA give its interrupt and DMA channel, respectively.
+        BOOL is an integer, "0" means "no"; any other value means
+	"yes". You don't need to specify anything if connecting your tape
X         drive to the standard floppy disk controller. All of these
X 	values have reasonable defaults. The defaults can be modified
X 	during kernel configuration, i.e. while running "make config",
diff -u --recursive --new-file v2.2.7/linux/Documentation/kernel-docs.txt linux/Documentation/kernel-docs.txt
--- v2.2.7/linux/Documentation/kernel-docs.txt	Thu Jan  7 15:11:35 1999
+++ linux/Documentation/kernel-docs.txt	Mon May 10 13:00:10 1999
@@ -18,7 +18,7 @@
X    Fortunately, as more and more people get to GNU/Linux, more and more
X    get interested in the Kernel. But reading the sources is not always
X    enough. It is easy to understand the code, but miss the concepts, the
-   philosophy and design decissions behind this code.
+   philosophy and design decisions behind this code.
X    
X    Unfortunately, not many documents are available for beginners to
X    start. And, even if they exist, there was no "well-known" place which
@@ -33,7 +33,7 @@
X    The papers that follow are listed in no particular order. All are
X    catalogued with the following fields: the document's "Title", the
X    "Author"/s, the "URL" where they can be found, some "Keywords"
-   helpfull when searching for specific topics, and a brief "Description"
+   helpful when searching for specific topics, and a brief "Description"
X    of the Document.
X    
X    Enjoy!
@@ -170,9 +170,9 @@
X             http://anchor.cs.binghamton.edu/courses/cs628/linux-net.html
X             Keywords: files, sk_buffs.
X             Description: A short description of files under the net/
-            directory. Each file has a one or two lines paragrahp
-            description. sk_buffs explained, too, with some beatiful
-            pictures. A little bit outdated.
+            directory. Each file has a one- or two-line paragraph to
+            describe it. Also, sk_buffs is explained with some
+            beautiful pictures. A little bit outdated.
X    
X           + Title: "Linux ioctl() Primer"
X             Author: Vipul Gupta.
@@ -222,7 +222,7 @@
X             ftp://ftp.llp.fu-berlin.de/pub/linux/LINUX-LAB/whitepapers/dr
X             ivers.ps.gz
X             Keywords: character device drivers, I/O, signals, DMA,
-            accesing ports in user space, kernel environment.
+            accessing ports in user space, kernel environment.
X             Description: 68 pages paper on writing character drivers. A
X             little bit old (1.993, 1.994) although still useful.
X        
@@ -298,7 +298,7 @@
X             Description: The title says it all. There's a fixed kernel
X             section summarizing developers' work, bug fixes, new features
X             and versions produced during the week. Published every
-            thursday.
+            Thursday.
X        
X           + Name: CuTTiNG.eDGe.LiNuX.
X             URL: http://edge.linuxhq.com
diff -u --recursive --new-file v2.2.7/linux/Documentation/m68k/kernel-options.txt linux/Documentation/m68k/kernel-options.txt
--- v2.2.7/linux/Documentation/m68k/kernel-options.txt	Fri Jan  8 22:35:59 1999
+++ linux/Documentation/m68k/kernel-options.txt	Tue May 11 09:57:14 1999
@@ -3,10 +3,10 @@
X 				  Command Line Options for Linux/m68k
X 				  ===================================
X 
-Last Update: Nov 28, 1997
-Linux/m68k version: 2.1.64
+Last Update: 2 May 1999
+Linux/m68k version: 2.2.6
X Author: Roman...@informatik.uni-erlangen.de (Roman Hodek)
-Update: j...@kom.auc.dk (Jes Sorensen)
+Update: j...@kom.auc.dk (Jes Sorensen) and f...@linux-m68k.org (Chris Lawrence)
X 
X 0) Introduction
X ===============
@@ -145,7 +145,7 @@
X 
X These two options tell the kernel whether it should mount the root
X filesystem read-only or read-write. The default is read-only, except
-for ramdisks which are read-write.
+for ramdisks, which default to read-write.
X 
X 
X 2.3) debug
@@ -216,23 +216,10 @@
X 
X 
X 2.7) swap=
------------
-
-Syntax: swap=<max_age>,<adv>,<decl>,<init_age>,<cl_fract>,<cl_min>,\
-        <pgout_wgt>,<bfout_wgt>
-(All optional)
-
-TODO
-
-
X 2.8) buff=
X -----------
X 
-Syntax: buff=<max_age>,<adv>,<decl>,<init_age>,<bfout_wgt>,<mem_grace>
-(All optional)
-
-TODO
-
+  I can't find any sign of these options in 2.2.6.
X 
X 
X 3) General Device Options (Amiga and Atari)
@@ -311,7 +298,7 @@
X =========================
X 
X 4.1) video=
---------------
+-----------
X 
X Syntax: video=<fbname>:<sub-options...>
X 
@@ -322,8 +309,8 @@
X 
X NB: Please notice that this option was renamed from `atavideo' to
X     `video' during the development of the 1.3.x kernels, thus you
-    might need to update your boot-scripts if upgrading to 2.0.x from
-    an 1.2.13ply kernel.
+    might need to update your boot-scripts if upgrading to 2.x from
+    an 1.2.x kernel.
X 
X NBB: The behavior of video= was changed in 2.1.57 so the recommended
X option is to specify the name of the frame buffer.
@@ -705,10 +692,11 @@
X Syntax: video=<fbname>:<sub-options...>
X 
X The <fbname> parameter specifies the name of the frame buffer, valid
-options are `amifb', `cyberfb', `retz3' and `clgen', provided that the
-respective frame buffer devices have been compiled into the kernel (or
-compiled as loadable modules). The behavior of the <fbname> option was
-changed in 2.1.57 so it is now recommended to specify this option.
+options are `amifb', `cyber', 'virge', `retz3' and `clgen', provided
+that the respective frame buffer devices have been compiled into the
+kernel (or compiled as loadable modules). The behavior of the <fbname>
+option was changed in 2.1.57 so it is now recommended to specify this
+option.
X 
X The <sub-options> is a comma-separated list of the sub-options listed
X below. This option is organized similar to the Atari version of the
@@ -762,8 +750,8 @@
X 5.1.3) inverse
X --------------
X 
-Use inverted display. Functionally the same as the "inverse"
-sub-option for the Atari.
+Use inverted display (black on white). Functionally the same as the
+"inverse" sub-option for the Atari.
X 
X 5.1.4) font
X -----------
@@ -787,7 +775,7 @@
X your monitor can work with, in Hz. <hmin> and <hmax> are the same for
X the horizontal frequency, in kHz.
X 
-  The defaults are 50;90;15;38 (Generic Amiga monitor).
+  The defaults are 50;90;15;38 (Generic Amiga multisync monitor).
X 
X 
X 5.2) fd_def_df0=
@@ -804,6 +792,9 @@
X 
X Syntax: wd33c93=<sub-options...>
X 
+These options affect the A590/A2091, A3000 and GVP Series II SCSI
+controllers.
+
X The <sub-options> is a comma-separated list of the sub-options listed
X below.
X 
@@ -861,7 +852,7 @@
X -----------
X 
X   No argument. Used to separate blocks of keywords when there's more
-than one host adapter in the system.
+than one wd33c93-based host adapter in the system.
X 
X 5.3.7) nodma
X ------------
@@ -903,6 +894,69 @@
X 32 bit address range for DMA. The correct setting depends on your
X controller and should be autodetected by the driver. An example is the
X 24 bit region which is specified by a mask of 0x00fffffe.
+
+
+5.5) 53c7xx=
+------------
+
+Syntax: 53c7xx=<sub-options...>
+
+These options affect the A4000T, A4091, WarpEngine, Blizzard 603e+,
+and GForce 040/060 SCSI controllers on the Amiga, as well as the
+builtin MVME 16x SCSI controller.
+
+The <sub-options> is a comma-separated list of the sub-options listed
+below.
+
+5.5.1) nosync
+-------------
+
+Syntax: nosync:0
+
+  Disables sync negotiation for all devices.  Any value after the
+  colon is acceptable (and has the same effect).
+
+5.5.2) noasync
+--------------
+
+Syntax: noasync:0
+
+  Disables async and sync negotiation for all devices.  Any value
+  after the colon is acceptable (and has the same effect).
+
+5.5.3) nodisconnect
+-------------------
+
+Syntax: nodisconnect:0
+
+  Disables SCSI disconnects.  Any value after the colon is acceptable
+  (and has the same effect).
+
+5.5.4) validids
+---------------
+
+Syntax: validids:0xNN
+
+  Specify which SCSI ids the driver should pay attention to.  This is
+  a bitmask (i.e. to only pay attention to ID#4, you'd use 0x10).
+  Default is 0x7f (devices 0-6).
+
+5.5.5) opthi
+5.5.6) optlo
+------------
+
+Syntax: opthi:M,optlo:N
+
+  Specify options for "hostdata->options".  The acceptable definitions
+  are listed in drivers/scsi/53c7xx.h; the 32 high bits should be in
+  opthi and the 32 low bits in optlo.  They must be specified in the
+  order opthi=M,optlo=N.
+
+5.5.7) next
+-----------
+
+  No argument. Used to separate blocks of keywords when there's more
+  than one 53c7xx host adapter in the system.
X 
X 
X /* Local Variables: */
diff -u --recursive --new-file v2.2.7/linux/Documentation/mtrr.txt linux/Documentation/mtrr.txt
--- v2.2.7/linux/Documentation/mtrr.txt	Thu May  7 22:51:46 1998
+++ linux/Documentation/mtrr.txt	Mon May 10 10:32:45 1999
@@ -62,6 +62,23 @@
X ioctl() interface, so users won't have to do anything. If you use a
X commercial X server, lobby your vendor to add support for MTRRs.
X ===============================================================================
+Creating overlapping MTRRs:
+
+%echo "base=0xfb000000 size=0x1000000 type=write-combining" >/proc/mtrr
+%echo "base=0xfb000000 size=0x1000 type=uncachable" >/proc/mtrr
+
+And the results: cat /proc/mtrr
+reg00: base=0x00000000 (   0MB), size=  64MB: write-back, count=1
+reg01: base=0xfb000000 (4016MB), size=  16MB: write-combining, count=1
+reg02: base=0xfb000000 (4016MB), size=   4kB: uncachable, count=1
+
+Some cards (especially Voodoo Graphics boards) need this 4 kB area 
+excluded from the beginning of the region because it is used for
+registers.
+
+NOTE: You can only create type=uncachable region, if the first
+region that you created is type=write-combining.
+===============================================================================
X Removing MTRRs from the shell:
X % echo "disable=2" >! /proc/mtrr
X ===============================================================================
diff -u --recursive --new-file v2.2.7/linux/Documentation/networking/filter.txt linux/Documentation/networking/filter.txt
--- v2.2.7/linux/Documentation/networking/filter.txt	Sun Jun  7 11:16:26 1998
+++ linux/Documentation/networking/filter.txt	Thu Apr 29 11:53:41 1999
@@ -12,7 +12,7 @@
X attach a filter onto any socket and allow or disallow certain
X types of data to come through the socket. LSF follows exactly
X the same filter code structure as the BSD Berkeley Packet Filter
-(BPF), so refering to the BSD bpf.4 manpage is very helpful in
SHAR_EOF
true || echo 'restore of patch-2.2.8 failed'
fi
echo 'End of  part 02'
echo 'File patch-2.2.8 is continued in part 03'
echo 03 > _shar_seq_.tmp
#!/bin/sh
# this is part 03 of a 33 - part archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file patch-2.2.8 continued
if test ! -r _shar_seq_.tmp; then
        echo 'Please unpack part 1 first!'
        exit 1
fi
(read Scheck
if test "$Scheck" != 03; then
        echo Please unpack part "$Scheck" next!
        exit 1
 else
        exit 0
 fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
echo 'x - still skipping patch-2.2.8'
else
echo 'x - continuing with patch-2.2.8'
sed 's/^X//' << 'SHAR_EOF' >> 'patch-2.2.8' &&
+(BPF), so referring to the BSD bpf.4 manpage is very helpful in
X creating filters.
X 
X LSF is much simpler than BPF. One does not have to worry about
diff -u --recursive --new-file v2.2.7/linux/Documentation/networking/ip-sysctl.txt linux/Documentation/networking/ip-sysctl.txt
--- v2.2.7/linux/Documentation/networking/ip-sysctl.txt	Thu Jan  7 15:11:35 1999
+++ linux/Documentation/networking/ip-sysctl.txt	Mon May 10 09:55:25 1999
@@ -96,7 +96,7 @@
X 	Enable timestamps as defined in RFC1323.
X 
X tcp_sack - BOOLEAN
-	Enable select acknowledgements.
+	Enable select acknowledgments.
X 
X tcp_retrans_collapse - BOOLEAN
X 	Bug-to-bug compatibility with some broken printers.
@@ -119,7 +119,7 @@
X icmp_paramprob_rate - INTEGER
X icmp_timeexceed_rate - INTEGER
X icmp_echoreply_rate - INTEGER (not enabled per default)
-	Limit the maximal rates for sending ICMP packets to specifc targets.
+	Limit the maximal rates for sending ICMP packets to specific targets.
X 	0 to disable any limiting, otherwise the maximal rate in jiffies(1)
X 	See the source for more information.
X 
@@ -173,7 +173,7 @@
X bootp_relay - BOOLEAN
X 	Accept packets with source address 0.b.c.d destined
X 	not to this host as local ones. It is supposed, that
-	BOOTP relay deamon will catch and forward such packets.
+	BOOTP relay daemon will catch and forward such packets.
X 
X 	default FALSE
X 	Not Implemented Yet.
@@ -211,4 +211,4 @@
X Updated by:
X Andi Kleen
X a...@muc.de
-$Id: ip-sysctl.txt,v 1.8 1999/01/02 16:37:06 davem Exp $
+$Id: ip-sysctl.txt,v 1.9 1999/05/08 02:58:44 davem Exp $
diff -u --recursive --new-file v2.2.7/linux/Documentation/networking/ipddp.txt linux/Documentation/networking/ipddp.txt
--- v2.2.7/linux/Documentation/networking/ipddp.txt	Sat May  2 14:19:51 1998
+++ linux/Documentation/networking/ipddp.txt	Thu Apr 29 11:53:41 1999
@@ -14,7 +14,7 @@
X IP over an AppleTalk network or you can provide IP gatewaying functions
X for your AppleTalk users.
X 
-You can currently Encapsulate or Decapsulate AppleTalk-IP on LocalTalk,
+You can currently encapsulate or decapsulate AppleTalk-IP on LocalTalk,
X EtherTalk and PPPTalk. The only limit on the protocol is that of what
X kernel AppleTalk layer and drivers are available.
X 
@@ -23,22 +23,22 @@
X Compiling AppleTalk-IP Decapsulation/Encapsulation
X =================================================
X 
-AppleTalk-IP Decapsulation needs to be compiled into your kernel. You
-will need to turn on Appletalk-IP driver support. Then you will need to
-select ONE of the two options; IP to AppleTalk-IP Encapsulation support or
-AppleTalk-IP to IP Decapsulation support. If you compile the driver
+AppleTalk-IP decapsulation needs to be compiled into your kernel. You
+will need to turn on AppleTalk-IP driver support. Then you will need to
+select ONE of the two options; IP to AppleTalk-IP encapsulation support or
+AppleTalk-IP to IP decapsulation support. If you compile the driver
X statically you will only be able to use the driver for the function you have
X enabled in the kernel. If you compile the driver as a module you can
X select what mode you want it to run in via a module loading param.
-ipddp_mode=1 for AppleTalk-IP Encapsulation and ipddp_mode=2 for
-AppleTalk-IP to IP Decapsulation.
+ipddp_mode=1 for AppleTalk-IP encapsulation and ipddp_mode=2 for
+AppleTalk-IP to IP decapsulation.
X 
X Basic instructions for user space tools
X =======================================
X 
-To enable AppleTalk-IP Decapsulation/Encapsulation you will need the 
-proper tools. You can get the tools for Decapsulation from
-http://spacs1.spacs.k12.wi.us/~jschlst/MacGate and for Encapsulation
+To enable AppleTalk-IP decapsulation/encapsulation you will need the 
+proper tools. You can get the tools for decapsulation from
+http://spacs1.spacs.k12.wi.us/~jschlst/MacGate and for encapsulation
X from http://www.maths.unm.edu/~bradford/ltpc.html
X 
X I will briefly describe the operation of the tools, but you will
@@ -61,8 +61,8 @@
X 
X Common Uses of ipddp.c
X ----------------------
-Of course AppleTalk-IP Decapsulation and Encapsulation, but specificly
-Decapsulation is being used most for connecting LocalTalk networks to
+Of course AppleTalk-IP decapsulation and encapsulation, but specifically
+decapsulation is being used most for connecting LocalTalk networks to
X IP networks. Although it has been used on EtherTalk networks to allow
X Macs that are only able to tunnel IP over EtherTalk.
X 
@@ -73,6 +73,6 @@
X Further Assistance
X -------------------
X You can contact me (Jay Schulist <Jay.Sc...@spacs.k12.wi.us>) with any
-questions reguarding Decapsulation or Encapsulation. Bradford W. Johnson
+questions regarding decapsulation or encapsulation. Bradford W. Johnson
X <john...@maroon.tc.umn.edu> originally wrote the ipddp.c driver for IP
X encapsulation in AppleTalk.
diff -u --recursive --new-file v2.2.7/linux/Documentation/networking/lapb-module.txt linux/Documentation/networking/lapb-module.txt
--- v2.2.7/linux/Documentation/networking/lapb-module.txt	Sun Jun  7 11:16:26 1998
+++ linux/Documentation/networking/lapb-module.txt	Mon May 10 13:00:10 1999
@@ -216,7 +216,7 @@
X 
X This is called by the LAPB module when an event occurs after the device
X driver has called lapb_disconnect_request (see above). The reason indicates
-what has happended. In all cases the LAPB link can be regarded as being
+what has happened. In all cases the LAPB link can be regarded as being
X terminated. The values for reason are:
X 
X LAPB_OK			The LAPB link was terminated normally.
diff -u --recursive --new-file v2.2.7/linux/Documentation/networking/pt.txt linux/Documentation/networking/pt.txt
--- v2.2.7/linux/Documentation/networking/pt.txt	Sat May  2 14:19:51 1998
+++ linux/Documentation/networking/pt.txt	Mon May 10 13:00:10 1999
@@ -2,7 +2,7 @@
X ALPHA for Linux 1.3.43.
X 
X These files will allow you to talk to the PackeTwin (now know as PT) and
-connect through it just like a pair of TNC's.  To do this you will also
+connect through it just like a pair of TNCs.  To do this you will also
X require the AX.25 code in the kernel enabled.
X 
X There are four files in this archive; this readme, a patch file, a .c file
diff -u --recursive --new-file v2.2.7/linux/Documentation/networking/routing.txt linux/Documentation/networking/routing.txt
--- v2.2.7/linux/Documentation/networking/routing.txt	Thu May 14 19:47:37 1998
+++ linux/Documentation/networking/routing.txt	Mon May 10 13:00:10 1999
@@ -1,6 +1,6 @@
X The directory ftp.inr.ac.ru:/ip-routing contains:
X 
-- iproute.c - "professional" routing table maintainance utility.
+- iproute.c - "professional" routing table maintenance utility.
X 
X - rdisc.tar.gz - rdisc daemon, ported from Sun.
X 	STRONGLY RECOMMENDED FOR ALL HOSTS.
diff -u --recursive --new-file v2.2.7/linux/Documentation/powerpc/smp.txt linux/Documentation/powerpc/smp.txt
--- v2.2.7/linux/Documentation/powerpc/smp.txt	Fri Oct 23 22:01:18 1998
+++ linux/Documentation/powerpc/smp.txt	Thu Apr 29 12:39:07 1999
@@ -5,11 +5,10 @@
X (Cort Dougan, co...@cs.nmt.edu) please email me if you have questions,
X comments or corrections.
X 
-Last Change: 10.8.98
+Last Change: 3.31.99
X 
-SMP support for Linux/PPC is still in its early stages and likely to
-be buggy for a while.  If you want to help by writing code or testing
-different hardware please email me!
+If you want to help by writing code or testing different hardware please
+email me!
X 
X 1. State of Supported Hardware
X 
@@ -29,3 +28,7 @@
X   BeBox
X     BeBox support hasn't been added to the 2.1.X kernels from 2.0.X
X     but work is being done and SMP support for BeBox is in the works.
+
+  CHRP
+    CHRP SMP works and is fairly solid.  It's been tested on the IBM F50
+    with 4 processors for quite some time now.
diff -u --recursive --new-file v2.2.7/linux/Documentation/sound/AD1816 linux/Documentation/sound/AD1816
--- v2.2.7/linux/Documentation/sound/AD1816	Tue Dec 22 14:16:53 1998
+++ linux/Documentation/sound/AD1816	Mon May 10 13:00:10 1999
@@ -70,7 +70,16 @@
X - Acer FX-3D
X - SY-1816 
X - Highscreen Sound-Boostar 32 Wave 3D
-- ...
+- Highscreen Sound-Boostar 16 
+- AVM Apex Pro card 
+- (Aztech SC-16 3D) 
+- (Newcom SC-16 3D) 
+- (Terratec EWS64S) 
+
+Cards listed in brackets are not supported reliable. If you have such a card 
+you should add the extra parameter:
+  options=1
+when loading the ad1816 module via modprobe. 
X 
X 
X Troubleshooting:
@@ -105,7 +114,7 @@
X 
X As the driver is still experimental and under development, you should
X watch out for updates.  Updates of the driver are available on the
-internet from one of my home pages:
+Internet from one of my home pages:
X   http://www.student.informatik.tu-darmstadt.de/~tek/projects/linux.html
X or:
X   http://www.tu-darmstadt.de/~tek01/projects/linux.html
@@ -115,4 +124,4 @@
X 
X 
X Thorsten Knabe <t...@rbg.informatik.tu-darmstadt.de>
-          Last modified: 1998/11/06
+          Last modified: 1999/05/02
diff -u --recursive --new-file v2.2.7/linux/Documentation/sound/AWE32 linux/Documentation/sound/AWE32
--- v2.2.7/linux/Documentation/sound/AWE32	Thu Jan  7 15:11:35 1999
+++ linux/Documentation/sound/AWE32	Thu Apr 29 11:53:41 1999
@@ -53,7 +53,7 @@
X (IO 2 (BASE 0x0E20)) (ACT Y) ))"
X 
X Resources 0x0620, 0x0A20 and 0x0E20 should work. Other on-board devices: 
-Gameport and StereoEnhance are not required to be inited.
+Gameport and StereoEnhance are not required to be initialized.
X 
X Now you can execute "isapnp /etc/isapnp.conf". No errors should be reported.
X If you correctly installed isapnptools, then isapnp will run every boot time.
diff -u --recursive --new-file v2.2.7/linux/Documentation/sound/AudioExcelDSP16 linux/Documentation/sound/AudioExcelDSP16
--- v2.2.7/linux/Documentation/sound/AudioExcelDSP16	Fri Jan  8 22:35:59 1999
+++ linux/Documentation/sound/AudioExcelDSP16	Thu Apr 29 11:53:41 1999
@@ -80,7 +80,7 @@
X 2) Install your new kernel as the default boot kernel.
X 3) Boot MS-DOS and configure the audio card with the boot time device
X    driver, for MSS irq10 dma3 in our example.
-4) <ctrl>-<alt>-<del> and boot Linux. This will mantain the DOS configuration
+4) <ctrl>-<alt>-<del> and boot Linux. This will maintain the DOS configuration
X    and will boot the new kernel with sound driver. The sound driver will find
X    the audio card and will recognize and attach it.
X 
diff -u --recursive --new-file v2.2.7/linux/Documentation/sound/ChangeLog.awe linux/Documentation/sound/ChangeLog.awe
--- v2.2.7/linux/Documentation/sound/ChangeLog.awe	Tue Dec 22 14:16:53 1998
+++ linux/Documentation/sound/ChangeLog.awe	Thu Apr 29 11:53:41 1999
@@ -81,7 +81,7 @@
X 
X ver.0.3.3b
X 	- Fix version number in awe_version.h
-	- Fix a small bug in noteoff/relese all
+	- Fix a small bug in noteoff/release all
X 
X ver.0.3.3a
X 	- Fix all notes/sounds off
diff -u --recursive --new-file v2.2.7/linux/Documentation/sound/INSTALL.awe linux/Documentation/sound/INSTALL.awe
--- v2.2.7/linux/Documentation/sound/INSTALL.awe	Tue Dec 22 14:16:53 1998
+++ linux/Documentation/sound/INSTALL.awe	Thu Apr 29 11:53:41 1999
@@ -17,7 +17,7 @@
X 	http://www-jcr.lmh.ox.ac.uk/~pnp/
X 
X ----------------------------------------------------------------
-* Installation on RedHat 5.0 Sound Driver
+* Installation on Red Hat 5.0 Sound Driver
X 
X Please use install-rh.sh under RedHat5.0 directory.
X DO NOT USE install.sh below.
@@ -31,7 +31,7 @@
X 	% su
X 
X   2. If you have never configured the kernel tree yet, run make config
-    once (to make depencies and symlinks).
+    once (to make dependencies and symlinks).
X 
X 	# cd /usr/src/linux
X 	# make xconfig
@@ -40,7 +40,7 @@
X 
X 	# sh ./install.sh
X 
-  4. Configure your kenrel
+  4. Configure your kernel
X 
X 	(for Linux 2.[01].x user)
X 	# cd /usr/src/linux
@@ -77,7 +77,7 @@
X     do it by isapnp tools.  Otherwise, skip to 8.
X 
X 	This section described only a brief explanation.  For more
-	detaills, please see AWE64-Mini-HOWTO or isapnp tools FAQ.
+	details, please see the AWE64-Mini-HOWTO or isapnp tools FAQ.
X 
X 	7a. If you have no isapnp.conf file, generate it by pnpdump.
X 	    Otherwise, skip to 7d.
diff -u --recursive --new-file v2.2.7/linux/Documentation/sound/Introduction linux/Documentation/sound/Introduction
--- v2.2.7/linux/Documentation/sound/Introduction	Tue Dec 22 14:16:53 1998
+++ linux/Documentation/sound/Introduction	Thu Apr 29 11:53:41 1999
@@ -214,7 +214,7 @@
X 
X 3)  In /etc/conf.modules when using modprobe.
X 
-4)  Via RedHat's /usr/sbin/sndconfig program (text based).
+4)  Via Red Hat's /usr/sbin/sndconfig program (text based).
X 
X 5)  Via the OSS soundconf program (with the commercial version
X     of the OSS driver.
@@ -240,7 +240,7 @@
X 
X 6)  The comments and code in linux/drivers/sound.
X 
-7)  The sndconfig and rhsound documentation from RedHat.
+7)  The sndconfig and rhsound documentation from Red Hat.
X 
X 8)  The Linux-sound mailing list:  sound...@redhat.com
X 
diff -u --recursive --new-file v2.2.7/linux/Documentation/sound/MAD16 linux/Documentation/sound/MAD16
--- v2.2.7/linux/Documentation/sound/MAD16	Wed Apr  8 19:36:24 1998
+++ linux/Documentation/sound/MAD16	Thu Apr 29 11:53:41 1999
@@ -23,3 +23,12 @@
X alias char-major-14 mad16
X options sb mad16=1
X options mad16 io=0x530 irq=7 dma=0 dma16=1  && /usr/local/bin/aumix -w 15 -p 20 -m 0 -1 0 -2 0 -3 0 -i 0
+
+
+To get the built in mixer to work this needs to be:
+
+options adlib_card io=0x388     # FM synthesizer
+options sb mad16=1
+options mad16 io=0x530 irq=7 dma=0 dma16=1 mpu_io=816 mpu_irq=5 && /usr/local/bin/aumix -w 15 -p 20 -m 0 -1 0 -2 0 -3 0 -i 0
+
+The addition of the "mpu_io=816 mpu_irq=5" to the mad16 options line is
diff -u --recursive --new-file v2.2.7/linux/Documentation/sound/OPL3-SA linux/Documentation/sound/OPL3-SA
--- v2.2.7/linux/Documentation/sound/OPL3-SA	Tue Feb 23 15:21:32 1999
+++ linux/Documentation/sound/OPL3-SA	Thu Apr 29 11:53:41 1999
@@ -15,7 +15,7 @@
X You'll need to know all of the relevant info (irq, dma, and io port) for the
X chip's WSS mode, since that is the mode the kernel sound driver uses, and of
X course you'll also need to know about where the MPU401 and OPL3 ports and
-irq's are if you want to use those.
+IRQs are if you want to use those.
X 
X Here's the skinny on how to load it as a module:
X 
@@ -24,14 +24,14 @@
X Module options in detail:
X 
X 	io:	This is the WSS's port base.
-	irq:	This is the WSS's irq.
-	dma:	This is the WSS's dma line. In my BIOS setup screen this was
+	irq:	This is the WSS's IRQ.
+	dma:	This is the WSS's DMA line. In my BIOS setup screen this was
X 		listed as "WSS Play DMA"
-	dma2:	This is the WSS's secondary dma line. My BIOS calls it the
+	dma2:	This is the WSS's secondary DMA line. My BIOS calls it the
X 		"WSS capture DMA"
X 	
X 	mpu_io:	This is the MPU401's port base.
-	mpu_irq: This is the MPU401's irq.
+	mpu_irq: This is the MPU401's IRQ.
X 
X If you'd like to use the OPL3 FM Synthesizer, make sure you enable
X CONFIG_YM3812 (in 'make config'). That'll build the opl3.o module.
@@ -43,7 +43,7 @@
X 
X Say 'y' or 'm' to "SoftOSS software wave table engine" in make config.
X 
-If you said yes, the software synth is availible once you boot your new
+If you said yes, the software synth is available once you boot your new
X kernel.
X 
X If you chose to build it as a module, just insmod the resulting softoss2.o
diff -u --recursive --new-file v2.2.7/linux/Documentation/sound/README.OSS linux/Documentation/sound/README.OSS
--- v2.2.7/linux/Documentation/sound/README.OSS	Tue Jan 19 11:32:50 1999
+++ linux/Documentation/sound/README.OSS	Thu Apr 29 11:53:41 1999
@@ -58,7 +58,7 @@
X 	Mika Liljeberg	uLaw encoding and decoding routines
X 	Jeff Tranter	Linux SOUND HOWTO document
X 	Greg Lee	Volume computation algorithm for the GUS and
-			lot's of valuable suggestions.
+			lots of valuable suggestions.
X 	Andy Warner	ISC port
X 	Jim Lowe,
X 	Amancio Hasty Jr	FreeBSD/NetBSD port
@@ -96,7 +96,7 @@
X or before even starting to do any work. Tell me what you suggest to be
X changed or what you have planned to do. Also ensure you are using the
X very latest (development) version of OSS/Free since the change may already be
-implemented there. In general it's major waste of time to try to improve
+implemented there. In general it's a major waste of time to try to improve a
X several months old version. Information about the latest version can be found
X from http://www.opensound.com/ossfree. In general there is no point in
X sending me patches relative to production kernels.
@@ -1314,8 +1314,8 @@
X This ESS proprietary feature is supported only by OSS/Linux.
X 
X There are ES1688 based cards which use different interrupt pin assignment than
-recommended by ESS (5, 7, 9/2 and 10). In this case all IRQ's don't work.
-At least a card called (Pearl?) Hypersound 16 supports IRQ15 but it doesn't
+recommended by ESS (5, 7, 9/2 and 10). In this case all IRQs don't work.
+At least a card called (Pearl?) Hypersound 16 supports IRQ 15 but it doesn't
X work.
X 
X ES1868 is a PnP chip which is (supposed to be) compatible with ESS1688
diff -u --recursive --new-file v2.2.7/linux/Documentation/sound/README.awe linux/Documentation/sound/README.awe
--- v2.2.7/linux/Documentation/sound/README.awe	Tue Dec 22 14:16:53 1998
+++ linux/Documentation/sound/README.awe	Thu Apr 29 11:53:41 1999
@@ -9,8 +9,8 @@
X 
X This is a sound driver extension for SoundBlaster AWE32 and other
X compatible cards (AWE32-PnP, SB32, SB32-PnP, AWE64 & etc) to enable
-the wave synth operations.  The driver is provided for both Linux
-1.2.x and 2.[01].x kernels, and also FreeBSD, on Intel x86 and DEC
+the wave synth operations.  The driver is provided for Linux 1.2.x
+and 2.[012].x kernels, as well as FreeBSD, on Intel x86 and DEC
X Alpha systems.
X 
X This driver was written by Takashi Iwai <iw...@ww.uni-erlangen.de>,
@@ -76,7 +76,7 @@
X 	% sfxload synthgm
X 	% drvmidi -L 2mbgmgs foo.mid
X 
-This makes a big differece (believe me)!  For more details, please
+This makes a big difference (believe me)!  For more details, please
X refer to the FAQ list which is available on the URL above.
X 
X The current chorus, reverb and equalizer status can be changed by
@@ -97,14 +97,14 @@
X shell script.
X 
X - AWE_MODULE_SUPPORT
-    indicates your linux kernel supports module for each soundcard
-    (in recent 2.1 kernels and unofficial patched 2.0 kernels as
-     distributed in the RH5.0 package).
+    indicates your Linux kernel supports module for each sound card
+    (in recent 2.1 or 2.2 kernels and unofficial patched 2.0 kernels
+    as distributed in the RH5.0 package).
X     This flag is automatically set when you're using 2.1.x kernels.
X     You can pass the base address and memory size via the following
X     module options,
X 	io = base I/O port address (eg. 0x620)
-	memsize = DRAM size in Kbyes (eg. 512)
+	memsize = DRAM size in kilobytes (eg. 512)
X     As default, AWE driver probes these values automatically.
X 
X 
@@ -117,15 +117,15 @@
X     0 means to autodetect the address.
X 
X - AWE_DEFAULT_MEM_SIZE		(default: not defined)
-    specifies the memory size of your AWE32 card in kilo bytes.
+    specifies the memory size of your AWE32 card in kilobytes.
X     -1 means to autodetect its size.
X     
X 
X [Sample Table Size]
X From ver.0.4.0, sample tables are allocated dynamically (except
X Linux-1.2.x system), so you need NOT to touch these parameters.
-Linux-1.2.x users may need to increase these values to apropriate size 
-if larger DRAM is equipped with the soundcard.
+Linux-1.2.x users may need to increase these values to appropriate size 
+if the sound card is equipped with more DRAM.
X 
X - AWE_MAX_SF_LISTS, AWE_MAX_SAMPLES, AWE_MAX_INFOS
X 
@@ -139,7 +139,7 @@
X     passthrough channels. 
X 
X - AWE_DEBUG_ON			(default: defined)
-    turns on debuggin messages if defined.
+    turns on debugging messages if defined.
X 
X - AWE_HAS_GUS_COMPATIBILITY	(default: defined)
X     Enables GUS compatibility mode if defined, reading GUS patches and 
@@ -170,7 +170,7 @@
X - AWE_ALLOW_SAMPLE_SHARING	(default: defined)
X    Allow sample sharing for differently loaded patches.
X    This function is available only together with awesfx-0.4.3p3.
-   Note that this is still an experimantal option.
+   Note that this is still an experimental option.
X 
X - DEF_FM_CHORUS_DEPTH		(default: 0x10)
X     The default strength to be sent to the chorus effect engine.
@@ -183,8 +183,8 @@
X 
X * ACKNOWLEDGMENTS
X 
-Thanks to Witold Jachimczyk (wi...@xfactor.wpi.edu) for many advices
-to programming of AWE32.  Many codes are brought from his AWE32-native 
+Thanks to Witold Jachimczyk (wi...@xfactor.wpi.edu) for much advice
+on programming of AWE32.  Much code is brought from his AWE32-native 
X MOD player, ALMP.
X The port of awedrv to FreeBSD is done by Randall Hopper
X (r...@ct.picker.com).
diff -u --recursive --new-file v2.2.7/linux/Documentation/sound/Wavefront linux/Documentation/sound/Wavefront
--- v2.2.7/linux/Documentation/sound/Wavefront	Thu Sep 17 17:53:34 1998
+++ linux/Documentation/sound/Wavefront	Thu Apr 29 11:53:41 1999
@@ -149,7 +149,7 @@
X    .
X    .
X    .
-   make modules_isntall
+   make modules_install
X 
X Here's my autoconf.h SOUND section:
X 
diff -u --recursive --new-file v2.2.7/linux/Documentation/sysctl/vm.txt linux/Documentation/sysctl/vm.txt
--- v2.2.7/linux/Documentation/sysctl/vm.txt	Fri Apr 16 14:47:30 1999
+++ linux/Documentation/sysctl/vm.txt	Thu Apr 29 11:53:41 1999
@@ -178,7 +178,7 @@
X 
X The Linux VM subsystem avoids excessive disk seeks by reading
X multiple pages on a page fault. The number of pages it reads
-is dependant on the amount of memory in your machine.
+is dependent on the amount of memory in your machine.
X 
X The number of pages the kernel reads in at once is equal to
X 2 ^ page-cluster. Values above 2 ^ 5 don't make much sense
diff -u --recursive --new-file v2.2.7/linux/Documentation/video4linux/bttv/INSTALL linux/Documentation/video4linux/bttv/INSTALL
--- v2.2.7/linux/Documentation/video4linux/bttv/INSTALL	Tue Feb 23 15:21:32 1999
+++ linux/Documentation/video4linux/bttv/INSTALL	Mon May 10 13:00:10 1999
@@ -38,7 +38,7 @@
X     7: Matrix Vision MV-Delta
X     8: Fly Video II
X     9: TurboTV
-   10: Newer Hauppage (Bt878)
+   10: Newer Hauppauge (Bt878)
X    11: Miro PCTV Pro
X    12: ADS Tech Channel Surfer TV (and maybe TV+FM)
X    13: AVerMedia TVCapture 98
diff -u --recursive --new-file v2.2.7/linux/MAINTAINERS linux/MAINTAINERS
--- v2.2.7/linux/MAINTAINERS	Wed Apr 28 11:37:29 1999
+++ linux/MAINTAINERS	Sat May  8 12:49:46 1999
@@ -779,14 +779,14 @@
X USB HUB AND UHCI DRIVERS
X P:	Johannes Erdfelt
X M:	jerd...@sventech.com
-L:	linu...@peloncho.fis.ucm.es
+L:	linu...@suse.com
X S:	Maintained
X 
X USB OHCI DRIVER
X P:	Gregory P. Smith
X M:	gr...@electricrain.com
X M:	gr...@suitenine.com
-L:	linu...@peloncho.fis.ucm.es
+L:	linu...@suse.com
X S:	Maintained (not yet usable)
X W:	http://suitenine.com/usb/
X 
diff -u --recursive --new-file v2.2.7/linux/Makefile linux/Makefile
--- v2.2.7/linux/Makefile	Wed Apr 28 11:37:29 1999
+++ linux/Makefile	Wed Apr 28 11:38:52 1999
@@ -1,6 +1,6 @@
X VERSION = 2
X PATCHLEVEL = 2
-SUBLEVEL = 7
+SUBLEVEL = 8
X EXTRAVERSION =
X 
X 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.2.7/linux/REPORTING-BUGS linux/REPORTING-BUGS
--- v2.2.7/linux/REPORTING-BUGS	Tue Jan 19 11:32:50 1999
+++ linux/REPORTING-BUGS	Thu Apr 29 11:53:41 1999
@@ -1,6 +1,6 @@
X [Some of this is taken from Frohwalt Egerer's original linux-kernel FAQ]
X 
-     What follows is a suggested proceedure for reporting Linux bugs. You
+     What follows is a suggested procedure for reporting Linux bugs. You
X aren't obliged to use the bug reporting format, it is provided as a guide
X to the kind of information that can be useful to developers - no more.
X 
@@ -23,11 +23,11 @@
X This is a suggested format for a bug report sent to the Linux kernel mailing 
X list. Having a standardized bug report form makes it easier  for you not to 
X overlook things, and easier for the developers to find the pieces of 
-information they're really interested in.
+information they're really interested in. Don't feel you have to follow it.
X 
X    First run the ver_linux script included as scripts/ver_linux or
X at <URL:ftp://ftp.sai.msu.su/pub/Linux/ver_linux> It checks out
-the version of some important subsystems. Run it with the commnd
+the version of some important subsystems.  Run it with the command
X "sh scripts/ver_linux"
X 
X Use that information to fill in all fields of the bug report form, and
diff -u --recursive --new-file v2.2.7/linux/arch/alpha/config.in linux/arch/alpha/config.in
--- v2.2.7/linux/arch/alpha/config.in	Tue Feb 23 15:21:32 1999
+++ linux/arch/alpha/config.in	Mon May 10 09:55:21 1999
@@ -54,12 +54,10 @@
X unset CONFIG_ALPHA_LCA CONFIG_ALPHA_APECS CONFIG_ALPHA_CIA
X unset CONFIG_ALPHA_T2 CONFIG_ALPHA_PYXIS CONFIG_ALPHA_POLARIS
X unset CONFIG_ALPHA_TSUNAMI CONFIG_ALPHA_MCPCIA
-unset CONFIG_ALPHA_NEED_ROUNDING_EMULATION
X 
X if [ "$CONFIG_ALPHA_GENERIC" = "y" ]
X then
X 	define_bool CONFIG_PCI y
-	define_bool CONFIG_ALPHA_NEED_ROUNDING_EMULATION y
X fi
X if [ "$CONFIG_ALPHA_BOOK1" = "y" ]
X then
@@ -108,7 +106,7 @@
X 	then
X 		define_bool CONFIG_ALPHA_EV5 y
X 	else
-	define_bool CONFIG_ALPHA_EV4 y
+		define_bool CONFIG_ALPHA_EV4 y
X 	fi
X 	define_bool CONFIG_ALPHA_T2 y
X fi
@@ -140,11 +138,6 @@
X if [ "$CONFIG_ALPHA_JENSEN" = "y" ]
X then
X 	define_bool CONFIG_ALPHA_EV4 y
-fi
-if [ "$CONFIG_ALPHA_EV4" = "y" ]
-then
-	# EV45 and older do not support all rounding modes in hw:
-	define_bool CONFIG_ALPHA_NEED_ROUNDING_EMULATION y
X fi
X 
X if [ "$CONFIG_ALPHA_CABRIOLET" = "y" -o "$CONFIG_ALPHA_AVANTI" = "y" \
diff -u --recursive --new-file v2.2.7/linux/arch/alpha/kernel/entry.S linux/arch/alpha/kernel/entry.S
--- v2.2.7/linux/arch/alpha/kernel/entry.S	Tue Feb 23 15:21:32 1999
+++ linux/arch/alpha/kernel/entry.S	Mon May 10 09:55:21 1999
@@ -6,8 +6,6 @@
X 
X #include <asm/system.h>
X 
-#define halt	.long PAL_halt
-#define rti	.long PAL_rti
X #define SIGCHLD 20
X 
X #define NR_SYSCALLS 371
@@ -98,7 +96,7 @@
X 	call_pal PAL_swpipl;		\
X 	stq	$21,HAE_CACHE($19);	\
X 	stq	$21,0($20);		\
-	bis	$0,$0,$16;		\
+	mov	$0,$16;			\
X 	call_pal PAL_swpipl;		\
X 	ldq	$0,0($30);		\
X 	ldq	$1,8($30);		\
@@ -127,8 +125,8 @@
X entInt:
X 	SAVE_ALL
X 	lda	$8,0x3fff
-	bic	$30,$8,$8
X 	lda	$26,ret_from_sys_call
+	bic	$30,$8,$8
X 	jsr	$31,do_entInt
X .end entInt
X 
@@ -170,8 +168,8 @@
X entArith:
X 	SAVE_ALL
X 	lda	$8,0x3fff
-	bic	$30,$8,$8
X 	lda	$26,ret_from_sys_call
+	bic	$30,$8,$8
X 	jsr	$31,do_entArith
X .end entArith
X 
@@ -181,8 +179,8 @@
X entIF:
X 	SAVE_ALL
X 	lda	$8,0x3fff
-	bic	$30,$8,$8
X 	lda	$26,ret_from_sys_call
+	bic	$30,$8,$8
X 	jsr	$31,do_entIF
X .end entIF
X 
@@ -192,8 +190,8 @@
X entDbg:
X 	SAVE_ALL
X 	lda	$8,0x3fff
-	bic	$30,$8,$8
X 	lda	$26,ret_from_sys_call
+	bic	$30,$8,$8
X 	jsr	$31,do_entDbg
X .end entDbg
X 
@@ -212,18 +210,18 @@
X kernel_clone:
X 	.frame $30, 0, $26
X 	.prologue 0
-	subq $30,6*8,$30
-	stq $31,0($30)
-	stq $26,8($30)
-	stq $29,16($30)
-	stq $16,24($30)
-	stq $17,32($30)
-	stq $18,40($30)
-	bis $31,2,$0	/* Register v0: syscall nr for fork() */
+	subq	$30,6*8,$30
+	stq	$31,0($30)
+	stq	$26,8($30)
+	stq	$29,16($30)
+	stq	$16,24($30)
+	stq	$17,32($30)
+	stq	$18,40($30)
+	bis	$31,2,$0	/* Register v0: syscall nr for fork() */
X 	SAVE_ALL
-	bsr $26,sys_clone
-	stq $0,0($30)
-	br $31,ret_from_sys_call
+	bsr	$26,sys_clone
+	stq	$0,0($30)
+	br	ret_from_sys_call
X .end	kernel_clone
X 
X /*
@@ -233,32 +231,32 @@
X .globl	__kernel_thread
X .ent	__kernel_thread
X __kernel_thread:
-	ldgp $29,0($27)		/* we can be called from a module */
+	ldgp	$29,0($27)	/* we can be called from a module */
X 	.frame $30, 4*8, $26
-	subq $30,4*8,$30
-	stq $10,16($30)
-	stq $9,8($30)
-	stq $26,0($30)
+	subq	$30,4*8,$30
+	stq	$10,16($30)
+	stq	$9,8($30)
+	stq	$26,0($30)
X 	.prologue 1
-	bis $17,$17,$9		/* save fn */
-	bis $18,$18,$10		/* save arg */
-	bsr $26,kernel_clone
-	bne $20,1f		/* $20 is non-zero in child */
-	ldq $26,0($30)
-	ldq $9,8($30)
-	ldq $10,16($30)
-	addq $30,4*8,$30
-	ret $31,($26),1
+	mov	$17,$9		/* save fn */		
+	mov	$18,$10		/* save arg */
+	bsr	$26,kernel_clone
+	bne	$20,1f		/* $20 is non-zero in child */
+	ldq	$26,0($30)
+	ldq	$9,8($30)
+	ldq	$10,16($30)
+	addq	$30,4*8,$30
+	ret	$31,($26),1
X /* this is in child: look out as we don't have any stack here.. */
-1:	bis $9,$9,$27		/* get fn */
-	lda $8,0x3fff
-	bis $10,$10,$16		/* get arg */
-	bic $30,$8,$8		/* get current */
-	jsr $26,($27)
+1:	mov	$9,$27		/* get fn */
+	lda	$8,0x3fff
+	mov	$10,$16		/* get arg */
+	bic	$30,$8,$8	/* get current */
+	jsr	$26,($27)
X 	ldgp	$29,0($26)
-	bis $0,$0,$16
-	jsr $26,sys_exit
-	call_pal PAL_halt
+	mov	$0,$16
+	mov	$31,$26
+	jsr	$31,sys_exit
X .end	__kernel_thread
X 
X /*
@@ -286,202 +284,199 @@
X .align 3
X .ent	do_switch_stack
X do_switch_stack:
-	lda $30,-SWITCH_STACK_SIZE($30)
-	stq  $9,0($30)
-	stq $10,8($30)
-	stq $11,16($30)
-	stq $12,24($30)
-	stq $13,32($30)
-	stq $14,40($30)
-	stq $15,48($30)
-	stq $26,56($30)
-	stt $f0,64($30)
-	stt $f1,72($30)
-	stt $f2,80($30)
-	stt $f3,88($30)
-	stt $f4,96($30)
-	stt $f5,104($30)
-	stt $f6,112($30)
-	stt $f7,120($30)
-	stt $f8,128($30)
-	stt $f9,136($30)
-	stt $f10,144($30)
-	stt $f11,152($30)
-	stt $f12,160($30)
-	stt $f13,168($30)
-	stt $f14,176($30)
-	stt $f15,184($30)
-	stt $f16,192($30)
-	stt $f17,200($30)
-	stt $f18,208($30)
-	stt $f19,216($30)
-	stt $f20,224($30)
-	stt $f21,232($30)
-	stt $f22,240($30)
-	stt $f23,248($30)
-	stt $f24,256($30)
-	stt $f25,264($30)
-	stt $f26,272($30)
-	stt $f27,280($30)
-	mf_fpcr $f0		# get fpcr
-	stt $f28,288($30)
-	stt $f29,296($30)
-	stt $f30,304($30)
-	stt $f0,312($30)	# save fpcr in slot of $f31
-	ldt $f0,64($30)		# dont let "do_switch_stack" change fp state.
-	ret $31,($1),1
+	lda	$30,-SWITCH_STACK_SIZE($30)
+	stq	$9,0($30)
+	stq	$10,8($30)
+	stq	$11,16($30)
+	stq	$12,24($30)
+	stq	$13,32($30)
+	stq	$14,40($30)
+	stq	$15,48($30)
+	stq	$26,56($30)
+	stt	$f0,64($30)
+	stt	$f1,72($30)
+	stt	$f2,80($30)
+	stt	$f3,88($30)
+	stt	$f4,96($30)
+	stt	$f5,104($30)
+	stt	$f6,112($30)
+	stt	$f7,120($30)
+	stt	$f8,128($30)
+	stt	$f9,136($30)
+	stt	$f10,144($30)
+	stt	$f11,152($30)
+	stt	$f12,160($30)
+	stt	$f13,168($30)
+	stt	$f14,176($30)
+	stt	$f15,184($30)
+	stt	$f16,192($30)
+	stt	$f17,200($30)
+	stt	$f18,208($30)
+	stt	$f19,216($30)
+	stt	$f20,224($30)
+	stt	$f21,232($30)
+	stt	$f22,240($30)
+	stt	$f23,248($30)
+	stt	$f24,256($30)
+	stt	$f25,264($30)
+	stt	$f26,272($30)
+	stt	$f27,280($30)
+	mf_fpcr	$f0		# get fpcr
+	stt	$f28,288($30)
+	stt	$f29,296($30)
+	stt	$f30,304($30)
+	stt	$f0,312($30)	# save fpcr in slot of $f31
+	ldt	$f0,64($30)	# dont let "do_switch_stack" change fp state.
+	ret	$31,($1),1
X .end do_switch_stack
X 
X .align 3
X .ent	undo_switch_stack
X undo_switch_stack:
-	ldq  $9,0($30)
-	ldq $10,8($30)
-	ldq $11,16($30)
-	ldq $12,24($30)
-	ldq $13,32($30)
-	ldq $14,40($30)
-	ldq $15,48($30)
-	ldq $26,56($30)
-	ldt $f30,312($30)	# get saved fpcr
-	ldt $f0,64($30)
-	ldt $f1,72($30)
-	ldt $f2,80($30)
-	ldt $f3,88($30)
-	mt_fpcr $f30		# install saved fpcr
-	ldt $f4,96($30)
-	ldt $f5,104($30)
-	ldt $f6,112($30)
-	ldt $f7,120($30)
-	ldt $f8,128($30)
-	ldt $f9,136($30)
-	ldt $f10,144($30)
-	ldt $f11,152($30)
-	ldt $f12,160($30)
-	ldt $f13,168($30)
-	ldt $f14,176($30)
-	ldt $f15,184($30)
-	ldt $f16,192($30)
-	ldt $f17,200($30)
-	ldt $f18,208($30)
-	ldt $f19,216($30)
-	ldt $f20,224($30)
-	ldt $f21,232($30)
-	ldt $f22,240($30)
-	ldt $f23,248($30)
-	ldt $f24,256($30)
-	ldt $f25,264($30)
-	ldt $f26,272($30)
-	ldt $f27,280($30)
-	ldt $f28,288($30)
-	ldt $f29,296($30)
-	ldt $f30,304($30)
-	lda $30,SWITCH_STACK_SIZE($30)
-	ret $31,($1),1
+	ldq	$9,0($30)
+	ldq	$10,8($30)
+	ldq	$11,16($30)
+	ldq	$12,24($30)
+	ldq	$13,32($30)
+	ldq	$14,40($30)
+	ldq	$15,48($30)
+	ldq	$26,56($30)
+	ldt	$f30,312($30)	# get saved fpcr
+	ldt	$f0,64($30)
+	ldt	$f1,72($30)
+	ldt	$f2,80($30)
+	ldt	$f3,88($30)
+	mt_fpcr	$f30		# install saved fpcr
+	ldt	$f4,96($30)
+	ldt	$f5,104($30)
+	ldt	$f6,112($30)
+	ldt	$f7,120($30)
+	ldt	$f8,128($30)
+	ldt	$f9,136($30)
+	ldt	$f10,144($30)
+	ldt	$f11,152($30)
+	ldt	$f12,160($30)
+	ldt	$f13,168($30)
+	ldt	$f14,176($30)
+	ldt	$f15,184($30)
+	ldt	$f16,192($30)
+	ldt	$f17,200($30)
+	ldt	$f18,208($30)
+	ldt	$f19,216($30)
+	ldt	$f20,224($30)
+	ldt	$f21,232($30)
+	ldt	$f22,240($30)
+	ldt	$f23,248($30)
+	ldt	$f24,256($30)
+	ldt	$f25,264($30)
+	ldt	$f26,272($30)
+	ldt	$f27,280($30)
+	ldt	$f28,288($30)
+	ldt	$f29,296($30)
+	ldt	$f30,304($30)
+	lda	$30,SWITCH_STACK_SIZE($30)
+	ret	$31,($1),1
X .end undo_switch_stack
X 
X .align 3
X .globl	entUna
X .ent	entUna
X entUna:
-	lda $30,-256($30)
-	stq $0,0($30)
-	ldq $0,256($30)		/* get PS */
-	stq $1,8($30)
-	stq $2,16($30)
-	stq $3,24($30)
-	and $0,8,$0		/* user mode? */
-	stq $4,32($30)
-	bne $0,entUnaUser	/* yup -> do user-level unaligned fault */
-	stq $5,40($30)
-	stq $6,48($30)
-	stq $7,56($30)
-	stq $8,64($30)
-	stq $9,72($30)
-	stq $10,80($30)
-	stq $11,88($30)
-	stq $12,96($30)
-	stq $13,104($30)
-	stq $14,112($30)
-	stq $15,120($30)
+	lda	$30,-256($30)
+	stq	$0,0($30)
+	ldq	$0,256($30)	/* get PS */
+	stq	$1,8($30)
+	stq	$2,16($30)
+	stq	$3,24($30)
+	and	$0,8,$0		/* user mode? */
+	stq	$4,32($30)
+	bne	$0,entUnaUser	/* yup -> do user-level unaligned fault */
+	stq	$5,40($30)
+	stq	$6,48($30)
+	stq	$7,56($30)
+	stq	$8,64($30)
+	stq	$9,72($30)
+	stq	$10,80($30)
+	stq	$11,88($30)
+	stq	$12,96($30)
+	stq	$13,104($30)
+	stq	$14,112($30)
+	stq	$15,120($30)
X 	/* 16-18 PAL-saved */
-	stq $19,152($30)
-	stq $20,160($30)
-	stq $21,168($30)
-	stq $22,176($30)
-	stq $23,184($30)
-	stq $24,192($30)
-	stq $25,200($30)
-	stq $26,208($30)
-	stq $27,216($30)
-	stq $28,224($30)
-	stq $29,232($30)
-	stq $30,240($30)
-	stq $31,248($30)
-	lda $8,0x3fff
-	bic $30,$8,$8
-	jsr $26,do_entUna
-	ldq $0,0($30)
-	ldq $1,8($30)
-	ldq $2,16($30)
-	ldq $3,24($30)
-	ldq $4,32($30)
-	ldq $5,40($30)
-	ldq $6,48($30)
-	ldq $7,56($30)
-	ldq $8,64($30)
-	ldq $9,72($30)
-	ldq $10,80($30)
-	ldq $11,88($30)
-	ldq $12,96($30)
-	ldq $13,104($30)
-	ldq $14,112($30)
-	ldq $15,120($30)
+	stq	$19,152($30)
+	stq	$20,160($30)
+	stq	$21,168($30)
+	stq	$22,176($30)
+	stq	$23,184($30)
+	stq	$24,192($30)
+	stq	$25,200($30)
+	stq	$26,208($30)
+	stq	$27,216($30)
+	stq	$28,224($30)
+	stq	$29,232($30)
+	lda	$8,0x3fff
+	stq	$31,248($30)
+	bic	$30,$8,$8
+	jsr	$26,do_entUna
+	ldq	$0,0($30)
+	ldq	$1,8($30)
+	ldq	$2,16($30)
+	ldq	$3,24($30)
+	ldq	$4,32($30)
+	ldq	$5,40($30)
+	ldq	$6,48($30)
+	ldq	$7,56($30)
+	ldq	$8,64($30)
+	ldq	$9,72($30)
+	ldq	$10,80($30)
+	ldq	$11,88($30)
+	ldq	$12,96($30)
+	ldq	$13,104($30)
+	ldq	$14,112($30)
+	ldq	$15,120($30)
X 	/* 16-18 PAL-saved */
-	ldq $19,152($30)
-	ldq $20,160($30)
-	ldq $21,168($30)
-	ldq $22,176($30)
-	ldq $23,184($30)
-	ldq $24,192($30)
-	ldq $25,200($30)
-	ldq $26,208($30)
-	ldq $27,216($30)
-	ldq $28,224($30)
-	ldq $29,232($30)
-	ldq $30,240($30)
-	lda $30,256($30)
-	rti
+	ldq	$19,152($30)
+	ldq	$20,160($30)
+	ldq	$21,168($30)
+	ldq	$22,176($30)
+	ldq	$23,184($30)
+	ldq	$24,192($30)
+	ldq	$25,200($30)
+	ldq	$26,208($30)
+	ldq	$27,216($30)
+	ldq	$28,224($30)
+	ldq	$29,232($30)
+	lda	$30,256($30)
+	call_pal PAL_rti
X .end entUna
X 
X .align 3
X .ent	entUnaUser
X entUnaUser:
-	ldq $0,0($30)			/* restore original $0 */
-	lda $30,256($30)		/* pop entUna's stack frame */
-	SAVE_ALL			/* setup normal kernel stack */
-	lda $30,-56($30)
-	stq $9,0($30)
-	stq $10,8($30)
-	stq $11,16($30)
-	stq $12,24($30)
-	stq $13,32($30)
-	stq $14,40($30)
-	stq $15,48($30)
-	lda $8,0x3fff
-	addq $30,56,$19
-	bic $30,$8,$8
-	jsr $26,do_entUnaUser
-	ldq $9,0($30)
-	ldq $10,8($30)
-	ldq $11,16($30)
-	ldq $12,24($30)
-	ldq $13,32($30)
-	ldq $14,40($30)
-	ldq $15,48($30)
-	lda $30,56($30)
-	br $31,ret_from_sys_call
-
+	ldq	$0,0($30)	/* restore original $0 */
+	lda	$30,256($30)	/* pop entUna's stack frame */
+	SAVE_ALL		/* setup normal kernel stack */
+	lda	$30,-56($30)
+	stq	$9,0($30)
+	stq	$10,8($30)
+	stq	$11,16($30)
+	stq	$12,24($30)
+	stq	$13,32($30)
+	stq	$14,40($30)
+	stq	$15,48($30)
+	lda	$8,0x3fff
+	addq	$30,56,$19
+	bic	$30,$8,$8
+	jsr	$26,do_entUnaUser
+	ldq	$9,0($30)
+	ldq	$10,8($30)
+	ldq	$11,16($30)
+	ldq	$12,24($30)
+	ldq	$13,32($30)
+	ldq	$14,40($30)
+	ldq	$15,48($30)
+	lda	$30,56($30)
+	br	ret_from_sys_call
X .end	entUnaUser
X 
X /*
@@ -491,36 +486,36 @@
X .globl	sys_fork
X .ent	sys_fork
X sys_fork:
-	bsr $1,do_switch_stack
-	bis $31,SIGCHLD,$16
-	bis $31,$31,$17
-	bis $30,$30,$18
-	jsr $26,alpha_clone
-	bsr $1,undo_switch_stack
-	ret $31,($26),1
+	bsr	$1,do_switch_stack
+	bis	$31,SIGCHLD,$16
+	mov	$31,$17
+	mov	$30,$18
+	jsr	$26,alpha_clone
+	bsr	$1,undo_switch_stack
+	ret	$31,($26),1
X .end	sys_fork
X 
X .align 3
X .globl	sys_clone
X .ent	sys_clone
X sys_clone:
-	bsr $1,do_switch_stack
+	bsr	$1,do_switch_stack
X 	/* arg1 and arg2 come from the user */
-	bis $30,$30,$18
-	jsr $26,alpha_clone
-	bsr $1,undo_switch_stack
-	ret $31,($26),1
+	mov	$30,$18
+	jsr	$26,alpha_clone
+	bsr	$1,undo_switch_stack
+	ret	$31,($26),1
X .end	sys_clone
X 
X .align 3
X .globl	sys_vfork
X .ent	sys_vfork
X sys_vfork:
-	bsr $1,do_switch_stack
-	bis $30,$30,$16
-	jsr $26,alpha_vfork
-	bsr $1,undo_switch_stack
-	ret $31,($26),1
+	bsr	$1,do_switch_stack
+	mov	$30,$16
+	jsr	$26,alpha_vfork
+	bsr	$1,undo_switch_stack
+	ret	$31,($26),1
X .end	sys_vfork
X 
X .align 3
@@ -528,12 +523,12 @@
X .ent    alpha_switch_to
X alpha_switch_to:
X 	.prologue 0
-	bsr $1,do_switch_stack
+	bsr	$1,do_switch_stack
X 	call_pal PAL_swpctx
-	lda $16,-2($31)
-	call_pal PAL_tbi
-	bsr $1,undo_switch_stack
-	ret $31,($26),1
+	unop
+	bsr	$1,undo_switch_stack
+	mov	$17,$0
+	ret	$31,($26),1
X .end alpha_switch_to
X 
X /*
@@ -592,7 +587,7 @@
X 	bne	$5,signal_return
X restore_all:
X 	RESTORE_ALL
-	rti
+	call_pal PAL_rti
X 
X 
X /* PTRACE syscall handler */
@@ -620,7 +615,7 @@
X 	s8addq	$0,$2,$2
X 	beq	$1,1f
X 	ldq	$27,0($2)
-1:	jsr	$26,($27),alpha_ni_syscall
+1:	jsr	$26,($27),sys_gettimeofday
X 	ldgp	$29,0($26)
X 
X 	/* check return.. */
@@ -646,15 +641,15 @@
X 	stq	$1,72($30)	/* a3 for return */
X 
X 	bsr	$1,do_switch_stack
-	bis	$19,$19,$9	/* save old syscall number */
-	bis	$20,$20,$10	/* save old a3 */
+	mov	$19,$9		/* save old syscall number */
+	mov	$20,$10		/* save old a3 */
X 	jsr     $26,syscall_trace
-	bis	$9,$9,$19
-	bis	$10,$10,$20
+	mov	$9,$19
+	mov	$10,$20
X 	bsr	$1,undo_switch_stack
X 
-	bis	$31,$31,$26	/* tell "ret_from_sys_call" that we can restart */
-	br	$31,ret_from_sys_call
+	mov	$31,$26		/* tell "ret_from_sys_call" we can restart */
+	br	ret_from_sys_call
X 
X 	.align 3
X handle_bottom_half:
@@ -665,7 +660,7 @@
X 	ldq	$19,0($30)
X 	ldq	$20,8($30)
X 	addq	$30,16,$30
-	br	$31,ret_from_handle_bh
+	br	ret_from_handle_bh
X 
X 	.align 3
X syscall_error:
@@ -683,38 +678,35 @@
X 	subq	$31,$0,$0	/* with error in v0 */
X 	addq	$31,1,$1	/* set a3 for errno return */
X 	stq	$0,0($30)
-	bis	$31,$31,$26	/* tell "ret_from_sys_call" we can restart */
+	mov	$31,$26		/* tell "ret_from_sys_call" we can restart */
X 	stq	$1,72($30)	/* a3 for return */
-	br	$31,ret_from_sys_call
+	br	ret_from_sys_call
X 
X ret_success:
X 	stq	$0,0($30)
X 	stq	$31,72($30)	/* a3=0 => no error */
-	br	$31,ret_from_sys_call
+	br	ret_from_sys_call
X 
X .align 3
X signal_return:
-	bis	$30,$30,$17
+	mov	$30,$17
X 	br	$1,do_switch_stack
-	bis	$30,$30,$18
-	bis	$31,$31,$16
+	mov	$30,$18
+	mov	$31,$16
X 	jsr	$26,do_signal
X 	bsr	$1,undo_switch_stack
-	br	$31,restore_all
+	br	restore_all
X .end entSys
X 
X #ifdef __SMP__
-        .globl  ret_from_smpfork
+        .globl  ret_from_smp_fork
X .align 3
-.ent ret_from_smpfork
-ret_from_smpfork:
-	.set at
-	mb	/* Make the changed data visible before the freed lock. */
-	stq	$31,scheduler_lock	
+.ent ret_from_smp_fork
+ret_from_smp_fork:
X 	lda	$26,ret_from_sys_call
+	mov	$17,$16
X 	jsr	$31,schedule_tail
-	.set noat
-.end ret_from_smpfork
+.end ret_from_smp_fork
X #endif /* __SMP__ */
X 
X .align 3
@@ -727,51 +719,51 @@
X 	ldq	$19,0($30)
X 	ldq	$20,8($30)
X 	addq	$30,16,$30
-	br	$31,ret_from_reschedule
+	br	ret_from_reschedule
X .end reschedule
X 
X .align 3
X .ent sys_sigreturn
X sys_sigreturn:
-	bis	$30,$30,$17
+	mov	$30,$17
+	lda	$18,-SWITCH_STACK_SIZE($30)
X 	lda	$30,-SWITCH_STACK_SIZE($30)
-	bis	$30,$30,$18
X 	jsr	$26,do_sigreturn
X 	br	$1,undo_switch_stack
-	br	$31,ret_from_sys_call
+	br	ret_from_sys_call
X .end sys_sigreturn
X 
X .align 3
X .ent sys_rt_sigreturn
X sys_rt_sigreturn:
-	bis	$30,$30,$17
+	mov	$30,$17
+	lda	$18,-SWITCH_STACK_SIZE($30)
X 	lda	$30,-SWITCH_STACK_SIZE($30)
-	bis	$30,$30,$18
X 	jsr	$26,do_rt_sigreturn
X 	br	$1,undo_switch_stack
-	br	$31,ret_from_sys_call
+	br	ret_from_sys_call
X .end sys_rt_sigreturn
X 
X .align 3
X .ent sys_sigsuspend
X sys_sigsuspend:
-	bis	$30,$30,$17
+	mov	$30,$17
X 	br	$1,do_switch_stack
-	bis	$30,$30,$18
+	mov	$30,$18
X 	jsr	$26,do_sigsuspend
X 	lda	$30,SWITCH_STACK_SIZE($30)
-	br	$31,ret_from_sys_call
+	br	ret_from_sys_call
X .end sys_sigsuspend
X 
X .align 3
X .ent sys_rt_sigsuspend
X sys_rt_sigsuspend:
-	bis	$30,$30,$18
+	mov	$30,$18
X 	br	$1,do_switch_stack
-	bis	$30,$30,$19
+	mov	$30,$19
X 	jsr	$26,do_rt_sigsuspend
X 	lda	$30,SWITCH_STACK_SIZE($30)
-	br	$31,ret_from_sys_call
+	br	ret_from_sys_call
X .end sys_rt_sigsuspend
X 
X 	.data
diff -u --recursive --new-file v2.2.7/linux/arch/alpha/kernel/osf_sys.c linux/arch/alpha/kernel/osf_sys.c
--- v2.2.7/linux/arch/alpha/kernel/osf_sys.c	Tue Mar 23 14:35:46 1999
+++ linux/arch/alpha/kernel/osf_sys.c	Mon May 10 09:55:21 1999
@@ -141,6 +141,7 @@
X 	struct inode *inode;
X 	struct osf_dirent_callback buf;
X 
+	lock_kernel();
X 	error = -EBADF;
X 	file = fget(fd);
X 	if (!file)
@@ -173,6 +174,7 @@
X out_putf:
X 	fput(file);
X out:
+	unlock_kernel();
X 	return error;
X }
X 
@@ -883,7 +885,21 @@
X 	case GSI_IEEE_FP_CONTROL:
X 		/* Return current software fp control & status bits.  */
X 		/* Note that DU doesn't verify available space here.  */
-		w = current->tss.flags & IEEE_SW_MASK;
+
+		/* EV6 implements most of the bits in hardware.  If
+		   UNDZ is not set, UNFD is maintained in software.  */
+		if (implver() == IMPLVER_EV6) {
+			unsigned long fpcr = rdfpcr();
+			w = ieee_fpcr_to_swcr(fpcr);
+			if (!(fpcr & FPCR_UNDZ)) {
+				w &= ~IEEE_TRAP_ENABLE_UNF;
+				w |= current->tss.flags & IEEE_TRAP_ENABLE_UNF;
+			}
+		} else {
+			/* Otherwise we are forced to do everything in sw.  */
+			w = current->tss.flags & IEEE_SW_MASK;
+		}
+
X 		if (put_user(w, (unsigned long *) buffer))
X 			return -EFAULT;
X 		return 0;
@@ -933,7 +949,7 @@
X {
X 	switch (op) {
X 	case SSI_IEEE_FP_CONTROL: {
-		unsigned long swcr, fpcr;
+		unsigned long swcr, fpcr, undz;
X 
X 		/* 
X 		 * Alpha Architecture Handbook 4.7.7.3:
@@ -948,11 +964,12 @@
X 		current->tss.flags &= ~IEEE_SW_MASK;
X 		current->tss.flags |= swcr & IEEE_SW_MASK;
X 
-		/* Update the real fpcr.  For exceptions that are disabled in
-		   software but have not been seen, enable the exception in
-		   hardware so that we can update our software status mask.  */
-		fpcr = rdfpcr() & (~FPCR_MASK | FPCR_DYN_MASK);
-		fpcr |= ieee_swcr_to_fpcr(swcr | (~swcr & IEEE_STATUS_MASK)>>16);
+		/* Update the real fpcr.  Keep UNFD off if not UNDZ.  */
+		fpcr = rdfpcr();
+		undz = (fpcr & FPCR_UNDZ);
+		fpcr &= ~(FPCR_MASK | FPCR_DYN_MASK | FPCR_UNDZ);
+		fpcr |= ieee_swcr_to_fpcr(swcr);
+		fpcr &= ~(undz << 1);
X 		wrfpcr(fpcr);
X 		   
X 		return 0;
@@ -1407,8 +1424,9 @@
X 	    copy_from_user(&txc.tick, &txc_p->tick, sizeof(struct timex32) - 
X 			   offsetof(struct timex32, time)))
X 	  return -EFAULT;
-	
-	if ((ret = do_adjtimex(&txc)))
+
+	ret = do_adjtimex(&txc);	
+	if (ret < 0)
X 	  return ret;
X 	
X 	/* copy back to timex32 */
@@ -1418,5 +1436,5 @@
X 	    (put_tv32(&txc_p->time, &txc.time)))
X 	  return -EFAULT;
X 
-	return 0;
+	return ret;
X }
diff -u --recursive --new-file v2.2.7/linux/arch/alpha/kernel/process.c linux/arch/alpha/kernel/process.c
--- v2.2.7/linux/arch/alpha/kernel/process.c	Wed Jan 20 23:14:04 1999
+++ linux/arch/alpha/kernel/process.c	Mon May 10 09:55:21 1999
@@ -237,10 +237,13 @@
X 
X void flush_thread(void)
X {
-	/* Arrange for each exec'ed process to start off with a 
-	   clean slate with respect to the FPU.  */
+	/* Arrange for each exec'ed process to start off with a clean slate
+	   with respect to the FPU.  This is all exceptions disabled.  Note
+           that EV6 defines UNFD valid only with UNDZ, which we don't want
+	   for IEEE conformance -- so that disabled bit remains in software.  */
+
X 	current->tss.flags &= ~IEEE_SW_MASK;
-	wrfpcr(FPCR_DYN_NORMAL);
+	wrfpcr(FPCR_DYN_NORMAL | FPCR_INVD | FPCR_DZED | FPCR_OVFD | FPCR_INED);
X }
X 
X void release_thread(struct task_struct *dead_task)
@@ -270,8 +273,6 @@
X 			(struct pt_regs *) (swstack+1));
X }
X 
-extern void ret_from_sys_call(void);
-extern void ret_from_smpfork(void);
X /*
X  * Copy an alpha thread..
X  *
@@ -282,9 +283,13 @@
X  * Use the passed "regs" pointer to determine how much space we need
X  * for a kernel fork().
X  */
+
X int copy_thread(int nr, unsigned long clone_flags, unsigned long usp,
X 	struct task_struct * p, struct pt_regs * regs)
X {
+	extern void ret_from_sys_call(void);
+	extern void ret_from_smp_fork(void);
+
X 	struct pt_regs * childregs;
X 	struct switch_stack * childstack, *stack;
X 	unsigned long stack_offset;
@@ -292,18 +297,18 @@
X 	stack_offset = PAGE_SIZE - sizeof(struct pt_regs);
X 	if (!(regs->ps & 8))
X 		stack_offset = (PAGE_SIZE-1) & (unsigned long) regs;
-	childregs = (struct pt_regs *) (stack_offset + PAGE_SIZE + (unsigned long)p);
+	childregs = (struct pt_regs *) (stack_offset + PAGE_SIZE + (long)p);
X 		
X 	*childregs = *regs;
X 	childregs->r0 = 0;
X 	childregs->r19 = 0;
-	childregs->r20 = 1;	/* OSF/1 has some strange fork() semantics.. */
+	childregs->r20 = 1;	/* OSF/1 has some strange fork() semantics.  */
X 	regs->r20 = 0;
X 	stack = ((struct switch_stack *) regs) - 1;
X 	childstack = ((struct switch_stack *) childregs) - 1;
X 	*childstack = *stack;
X #ifdef __SMP__
-	childstack->r26 = (unsigned long) ret_from_smpfork;
+	childstack->r26 = (unsigned long) ret_from_smp_fork;
X #else
X 	childstack->r26 = (unsigned long) ret_from_sys_call;
X #endif
@@ -328,10 +333,12 @@
X 	dump->start_code  = current->mm->start_code;
X 	dump->start_data  = current->mm->start_data;
X 	dump->start_stack = rdusp() & ~(PAGE_SIZE - 1);
-	dump->u_tsize = (current->mm->end_code - dump->start_code) >> PAGE_SHIFT;
-	dump->u_dsize = (current->mm->brk + (PAGE_SIZE - 1) - dump->start_data) >> PAGE_SHIFT;
-	dump->u_ssize =
-	  (current->mm->start_stack - dump->start_stack + PAGE_SIZE - 1) >> PAGE_SHIFT;
+	dump->u_tsize = ((current->mm->end_code - dump->start_code)
+			 >> PAGE_SHIFT);
+	dump->u_dsize = ((current->mm->brk + PAGE_SIZE-1 - dump->start_data)
+			 >> PAGE_SHIFT);
+	dump->u_ssize = (current->mm->start_stack - dump->start_stack
+			 + PAGE_SIZE-1) >> PAGE_SHIFT;
X 
X 	/*
X 	 * We store the registers in an order/format that is
diff -u --recursive --new-file v2.2.7/linux/arch/alpha/kernel/smp.c linux/arch/alpha/kernel/smp.c
--- v2.2.7/linux/arch/alpha/kernel/smp.c	Mon Mar 29 11:09:11 1999
+++ linux/arch/alpha/kernel/smp.c	Mon May 10 09:55:21 1999
@@ -37,7 +37,18 @@
X #define DBGS(args)
X #endif
X 
-struct ipi_msg_flush_tb_struct ipi_msg_flush_tb __cacheline_aligned;
+struct ipi_msg_flush_tb_struct {
+	volatile unsigned int flush_tb_mask;
+	union {
+		struct mm_struct *	flush_mm;
+		struct vm_area_struct *	flush_vma;
+	} p;
+	unsigned long flush_addr;
+	unsigned long flush_end;
+};
+
+static struct ipi_msg_flush_tb_struct ipi_msg_flush_tb __cacheline_aligned;
+static spinlock_t flush_tb_lock = SPIN_LOCK_UNLOCKED;
X 
X struct cpuinfo_alpha cpu_data[NR_CPUS];
X 
@@ -786,7 +797,7 @@
X 	unsigned long to_whom = cpu_present_map ^ (1 << smp_processor_id());
X 	long timeout = 1000000;
X 
-	spin_lock_own(&kernel_flag, "flush_tlb_all");
+	spin_lock(&flush_tb_lock);
X 
X 	ipi_msg_flush_tb.flush_tb_mask = to_whom;
X 	send_ipi_message(to_whom, IPI_TLB_ALL);
@@ -803,6 +814,8 @@
X 		       ipi_msg_flush_tb.flush_tb_mask);
X 		ipi_msg_flush_tb.flush_tb_mask = 0;
X 	}
+
+	spin_unlock(&flush_tb_lock);
X }
X 
X void
@@ -811,7 +824,7 @@
X 	unsigned long to_whom = cpu_present_map ^ (1 << smp_processor_id());
X 	long timeout = 1000000;
X 
-	spin_lock_own(&kernel_flag, "flush_tlb_mm");
+	spin_lock(&flush_tb_lock);
X 
X 	ipi_msg_flush_tb.flush_tb_mask = to_whom;
X 	ipi_msg_flush_tb.p.flush_mm = mm;
@@ -833,6 +846,8 @@
X 		       ipi_msg_flush_tb.flush_tb_mask);
X 		ipi_msg_flush_tb.flush_tb_mask = 0;
X 	}
+
+	spin_unlock(&flush_tb_lock);
X }
X 
X void
@@ -843,7 +858,7 @@
X 	struct mm_struct * mm = vma->vm_mm;
X 	int timeout = 1000000;
X 
-	spin_lock_own(&kernel_flag, "flush_tlb_page");
+	spin_lock(&flush_tb_lock);
X 
X 	ipi_msg_flush_tb.flush_tb_mask = to_whom;
X 	ipi_msg_flush_tb.p.flush_vma = vma;
@@ -866,6 +881,8 @@
X 		       ipi_msg_flush_tb.flush_tb_mask);
X 		ipi_msg_flush_tb.flush_tb_mask = 0;
X 	}
+
+	spin_unlock(&flush_tb_lock);
X }
X 
X void
diff -u --recursive --new-file v2.2.7/linux/arch/alpha/kernel/traps.c linux/arch/alpha/kernel/traps.c
--- v2.2.7/linux/arch/alpha/kernel/traps.c	Tue Feb 23 15:21:32 1999
+++ linux/arch/alpha/kernel/traps.c	Mon May 10 09:55:21 1999
@@ -125,13 +125,16 @@
X 	    unsigned long a2, unsigned long a3, unsigned long a4,
X 	    unsigned long a5, struct pt_regs regs)
X {
-	if ((summary & 1)) {
-		/*
-		 * Software-completion summary bit is set, so try to
-		 * emulate the instruction.
-		 */
-		if (alpha_fp_emul_imprecise(®s, write_mask)) {
-			return;		/* emulation was successful */
+	if (summary & 1) {
+		/* Software-completion summary bit is set, so try to
+		   emulate the instruction.  */
+		if (implver() == IMPLVER_EV6) {
+			/* Whee!  EV6 has precice exceptions.  */
+			if (alpha_fp_emul(regs.pc - 4))
+				return;
+		} else {
+			if (alpha_fp_emul_imprecise(®s, write_mask))
+				return;
X 		}
X 	}
X 
@@ -141,7 +144,7 @@
X 		current->comm, regs.pc, summary, write_mask);
X #endif
X 	die_if_kernel("Arithmetic fault", ®s, 0, 0);
-	force_sig(SIGFPE, current);
+	send_sig(SIGFPE, current, 1);
X 	unlock_kernel();
X }
X 
@@ -150,14 +153,17 @@
X 	 unsigned long a2, unsigned long a3, unsigned long a4,
X 	 unsigned long a5, struct pt_regs regs)
X {
-	lock_kernel();
X 	die_if_kernel("Instruction fault", ®s, type, 0);
X 	switch (type) {
X 	      case 0: /* breakpoint */
X 		if (ptrace_cancel_bpt(current)) {
X 			regs.pc -= 4;	/* make pc point to former bpt */
X 		}
-		force_sig(SIGTRAP, current);
+		send_sig(SIGTRAP, current, 1);
+		break;
+
+	      case 1: /* bugcheck */
+		send_sig(SIGTRAP, current, 1);
X 		break;
X 
X 	      case 2: /* gentrap */
@@ -171,14 +177,13 @@
X 		switch ((long) regs.r16) {
X 		      case GEN_INTOVF: case GEN_INTDIV: case GEN_FLTOVF:
X 		      case GEN_FLTDIV: case GEN_FLTUND: case GEN_FLTINV:
-		      case GEN_FLTINE:
-			force_sig(SIGFPE, current);
+		      case GEN_FLTINE: case GEN_ROPRAND:
+			send_sig(SIGFPE, current, 1);
X 			break;
X 
X 		      case GEN_DECOVF:
X 		      case GEN_DECDIV:
X 		      case GEN_DECINV:
-		      case GEN_ROPRAND:
X 		      case GEN_ASSERTERR:
X 		      case GEN_NULPTRERR:
X 		      case GEN_STKOVF:
@@ -193,42 +198,29 @@
X 		      case GEN_SUBRNG5:
X 		      case GEN_SUBRNG6:
X 		      case GEN_SUBRNG7:
-			force_sig(SIGILL, current);
+			send_sig(SIGTRAP, current, 1);
X 			break;
X 		}
X 		break;
X 
-	      case 1: /* bugcheck */
X 	      case 3: /* FEN fault */
-		force_sig(SIGILL, current);
+		send_sig(SIGILL, current, 1);
X 		break;
X 
X 	      case 4: /* opDEC */
-#ifdef CONFIG_ALPHA_NEED_ROUNDING_EMULATION
-		{
-			unsigned int opcode;
-
-			/* get opcode of faulting instruction: */
-			get_user(opcode, (__u32*)(regs.pc - 4));
-			opcode >>= 26;
-			if (opcode == 0x16) {
-				/*
-				 * It's a FLTI instruction, emulate it
-				 * (we don't do no stinkin' VAX fp...)
-				 */
-				if (!alpha_fp_emul(regs.pc - 4))
-					force_sig(SIGFPE, current);
-				break;
-			}
+		if (implver() == IMPLVER_EV4) {
+			/* EV4 does not implement anything except normal
+			   rounding.  Everything else will come here as
+			   an illegal instruction.  Emulate them.  */
+			if (alpha_fp_emul(regs.pc - 4))
+				return;
X 		}
-#endif
-		force_sig(SIGILL, current);
+		send_sig(SIGILL, current, 1);
X 		break;
X 
X 	      default:
X 		panic("do_entIF: unexpected instruction-fault type");
X 	}
-	unlock_kernel();
X }
X 
X /* There is an ifdef in the PALcode in MILO that enables a 
@@ -877,14 +869,14 @@
X give_sigsegv:
X 	regs->pc -= 4;  /* make pc point to faulting insn */
X 	lock_kernel();
-	force_sig(SIGSEGV, current);
+	send_sig(SIGSEGV, current, 1);
X 	unlock_kernel();
X 	return;
X 
X give_sigbus:
X 	regs->pc -= 4;
X 	lock_kernel();
-	force_sig(SIGBUS, current);
+	send_sig(SIGBUS, current, 1);
X 	unlock_kernel();
X 	return;
X }
diff -u --recursive --new-file v2.2.7/linux/arch/alpha/lib/copy_user.S linux/arch/alpha/lib/copy_user.S
--- v2.2.7/linux/arch/alpha/lib/copy_user.S	Wed Apr 28 11:37:29 1999
+++ linux/arch/alpha/lib/copy_user.S	Fri Apr 30 08:22:19 1999
@@ -109,7 +109,7 @@
X $66:
X 	EXI( ldq $1,0($7) )
X 	subq $4,8,$4
-	stq $1,0($6)
+	EXO( stq $1,0($6) )
X 	addq $7,8,$7
X 	subq $0,8,$0
X 	addq $6,8,$6
diff -u --recursive --new-file v2.2.7/linux/arch/alpha/math-emu/fp-emul.c linux/arch/alpha/math-emu/fp-emul.c
--- v2.2.7/linux/arch/alpha/math-emu/fp-emul.c	Tue Aug 18 22:02:02 1998
+++ linux/arch/alpha/math-emu/fp-emul.c	Mon May 10 09:55:21 1999
@@ -13,6 +13,7 @@
X #define OPC_INTL	0x11
X #define OPC_INTS	0x12
X #define OPC_INTM	0x13
+#define OPC_FLTC	0x14
X #define OPC_FLTV	0x15
X #define OPC_FLTI	0x16
X #define OPC_FLTL	0x17
@@ -21,33 +22,37 @@
X 
X #define	OPC_JSR		0x1a
X 
+#define OP_FUN(OP,FUN)	((OP << 26) | (FUN << 5))
+
X /*
- * "Base" function codes for the FLTI-class instructions.  These
- * instructions all have opcode 0x16.  Note that in most cases these
- * actually correspond to the "chopped" form of the instruction.  Not
- * to worry---we extract the qualifier bits separately and deal with
- * them separately.  Notice that base function code 0x2c is used for
- * both CVTTS and CVTST.  The other bits in the function code are used
- * to distinguish the two.
+ * "Base" function codes for the FLTI-class instructions.
+ * Note that in most cases these actually correspond to the "chopped"
+ * form of the instruction.  Not to worry---we extract the qualifier
+ * bits separately and deal with them separately.  Notice that base
+ * function code 0x2c is used for both CVTTS and CVTST.  The other bits
+ * in the function code are used to distinguish the two.
X  */
-#define FLTI_FUNC_ADDS			0x000
-#define FLTI_FUNC_ADDT			0x020
-#define FLTI_FUNC_CMPTEQ		0x025
-#define FLTI_FUNC_CMPTLT		0x026
-#define FLTI_FUNC_CMPTLE		0x027
-#define FLTI_FUNC_CMPTUN		0x024
-#define FLTI_FUNC_CVTTS_or_CVTST	0x02c
-#define FLTI_FUNC_CVTTQ			0x02f
-#define FLTI_FUNC_CVTQS			0x03c
-#define FLTI_FUNC_CVTQT			0x03e
-#define FLTI_FUNC_DIVS			0x003
-#define FLTI_FUNC_DIVT			0x023
-#define FLTI_FUNC_MULS			0x002
-#define FLTI_FUNC_MULT			0x022
-#define FLTI_FUNC_SUBS			0x001
-#define FLTI_FUNC_SUBT			0x021
+#define FLTI_FUNC_ADDS			OP_FUN(OPC_FLTI, 0x000)
+#define FLTI_FUNC_ADDT			OP_FUN(OPC_FLTI, 0x020)
+#define FLTI_FUNC_CMPTEQ		OP_FUN(OPC_FLTI, 0x025)
+#define FLTI_FUNC_CMPTLT		OP_FUN(OPC_FLTI, 0x026)
+#define FLTI_FUNC_CMPTLE		OP_FUN(OPC_FLTI, 0x027)
+#define FLTI_FUNC_CMPTUN		OP_FUN(OPC_FLTI, 0x024)
+#define FLTI_FUNC_CVTTS_or_CVTST	OP_FUN(OPC_FLTI, 0x02c)
+#define FLTI_FUNC_CVTTQ			OP_FUN(OPC_FLTI, 0x02f)
+#define FLTI_FUNC_CVTQS			OP_FUN(OPC_FLTI, 0x03c)
+#define FLTI_FUNC_CVTQT			OP_FUN(OPC_FLTI, 0x03e)
+#define FLTI_FUNC_DIVS			OP_FUN(OPC_FLTI, 0x003)
+#define FLTI_FUNC_DIVT			OP_FUN(OPC_FLTI, 0x023)
+#define FLTI_FUNC_MULS			OP_FUN(OPC_FLTI, 0x002)
+#define FLTI_FUNC_MULT			OP_FUN(OPC_FLTI, 0x022)
+#define FLTI_FUNC_SUBS			OP_FUN(OPC_FLTI, 0x001)
+#define FLTI_FUNC_SUBT			OP_FUN(OPC_FLTI, 0x021)
+
+#define FLTC_FUNC_SQRTS			OP_FUN(OPC_FLTC, 0x00B)
+#define FLTC_FUNC_SQRTT			OP_FUN(OPC_FLTC, 0x02B)
X 
-#define FLTI_FUNC_CVTQL			0x030	/* opcode 0x17 */
+#define FLTL_FUNC_CVTQL			OP_FUN(OPC_FLTL, 0x030)
X 
X #define MISC_TRAPB	0x0000
X #define MISC_EXCB	0x0400
@@ -101,7 +106,7 @@
X long
X alpha_fp_emul (unsigned long pc)
X {
-	unsigned long opcode, fa, fb, fc, func, mode;
+	unsigned long op_fun, fa, fb, fc, func, mode;
X 	unsigned long fpcw = current->tss.flags;
X 	unsigned long va, vb, vc, res, fpcr;
X 	__u32 insn;
@@ -110,10 +115,11 @@
X 
X 	get_user(insn, (__u32*)pc);
X 	fc     = (insn >>  0) &  0x1f;	/* destination register */
-	func   = (insn >>  5) & 0x7ff;
X 	fb     = (insn >> 16) &  0x1f;
X 	fa     = (insn >> 21) &  0x1f;
-	opcode = insn >> 26;
+	func   = (insn >>  5) & 0x7ff;
+	mode   = (insn >>  5) & 0xc0;
+	op_fun = insn & OP_FUN(0x3f, 0x3f);
X 	
X 	va = alpha_read_fp_reg(fa);
X 	vb = alpha_read_fp_reg(fb);
@@ -123,7 +129,6 @@
X 	 * Try the operation in software.  First, obtain the rounding
X 	 * mode...
X 	 */
-	mode = func & 0xc0;
X 	if (mode == 0xc0) {
X 	    /* dynamic---get rounding mode from fpcr: */
X 	    mode = ((fpcr & FPCR_DYN_MASK) >> FPCR_DYN_SHIFT) << ROUND_SHIFT;
@@ -135,8 +140,7 @@
X 		something_is_wrong();
X 	}
X 
-	/* least 6 bits contain operation code: */
-	switch (func & 0x3f) {
+	switch (op_fun) {
X 	      case FLTI_FUNC_CMPTEQ:
X 		res = ieee_CMPTEQ(va, vb, &vc);
X 		break;
@@ -153,7 +157,7 @@
X 		res = ieee_CMPTUN(va, vb, &vc);
X 		break;
X 
-	      case FLTI_FUNC_CVTQL:
+	      case FLTL_FUNC_CVTQL:
X 		/*
X 		 * Notice: We can get here only due to an integer
X 		 * overflow.  Such overflows are reported as invalid
@@ -222,6 +226,14 @@
X 		res = ieee_CVTTQ(mode, vb, &vc);
X 		break;
X 
+	      case FLTC_FUNC_SQRTS:
+		res = ieee_SQRTS(mode, vb, &vc);
+		break;
+
+	      case FLTC_FUNC_SQRTT:
+		res = ieee_SQRTT(mode, vb, &vc);
+		break;
+
X 	      default:
SHAR_EOF
true || echo 'restore of patch-2.2.8 failed'
fi
echo 'End of  part 03'
echo 'File patch-2.2.8 is continued in part 04'
echo 04 > _shar_seq_.tmp
#!/bin/sh
# this is part 04 of a 33 - part archive
# do not concatenate these parts, unpack them in order with /bin/sh
# file patch-2.2.8 continued
if test ! -r _shar_seq_.tmp; then
        echo 'Please unpack part 1 first!'
        exit 1
fi
(read Scheck
if test "$Scheck" != 04; then
        echo Please unpack part "$Scheck" next!
        exit 1
 else
        exit 0
 fi
) < _shar_seq_.tmp || exit 1
if test ! -f _shar_wnt_.tmp; then
echo 'x - still skipping patch-2.2.8'
else
echo 'x - continuing with patch-2.2.8'
sed 's/^X//' << 'SHAR_EOF' >> 'patch-2.2.8' &&
X 		printk("alpha_fp_emul: unexpected function code %#lx at %#lx\n",
X 		       func & 0x3f, pc);
@@ -247,7 +259,7 @@
X 
X 		/* Update hardware control register */
X 		fpcr &= (~FPCR_MASK | FPCR_DYN_MASK);
-		fpcr |= ieee_swcr_to_fpcr(fpcw | (~fpcw&IEEE_STATUS_MASK)>>16);
+		fpcr |= ieee_swcr_to_fpcr(fpcw);
X 		wrfpcr(fpcr);
X 
X 		/* Do we generate a signal?  */
@@ -319,6 +331,7 @@
X 			write_mask &= ~(1UL << rc);
X 			break;
X 
+		      case OPC_FLTC:
X 		      case OPC_FLTV:
X 		      case OPC_FLTI:
X 		      case OPC_FLTL:
@@ -326,13 +339,11 @@
X 			break;
X 		}
X 		if (!write_mask) {
-			if ((opcode == OPC_FLTI || opcode == OPC_FLTL)
-			    && alpha_fp_emul(trigger_pc))
-			{
-			    /* re-execute insns in trap-shadow: */
-			    regs->pc = trigger_pc + 4;
-			    MOD_DEC_USE_COUNT;
-			    return 1;
+			if (alpha_fp_emul(trigger_pc)) {
+				/* re-execute insns in trap-shadow: */
+				regs->pc = trigger_pc + 4;
+				MOD_DEC_USE_COUNT;
+				return 1;
X 			}
X 			break;
X 		}
diff -u --recursive --new-file v2.2.7/linux/arch/alpha/math-emu/ieee-math.c linux/arch/alpha/math-emu/ieee-math.c
--- v2.2.7/linux/arch/alpha/math-emu/ieee-math.c	Wed Sep  9 14:51:04 1998
+++ linux/arch/alpha/math-emu/ieee-math.c	Mon May 10 09:55:21 1999
@@ -22,6 +22,7 @@
X  * functions are used on exceptional numbers only (well, assuming you
X  * don't turn on the "trap on inexact"...).
X  */
+#include <linux/sched.h>
X #include "ieee-math.h"
X 
X #define STICKY_S	0x20000000	/* both in longword 0 of fraction */
@@ -1339,4 +1340,42 @@
X 	normalize(&op_c);
X 	op_c.e -= 9;		/* remove excess exp from original shift */
X 	return round_t_ieee(f, &op_c, c);
+}
+
+/*
+ * Sqrt a = b, where a and b are ieee s-floating numbers.  "f"
+ * contains the rounding mode etc.
+ */
+unsigned long
+ieee_SQRTS (int f, unsigned long a, unsigned long *b)
+{
+	fpclass_t a_type;
+	EXTENDED op_a, op_b;
+
+	*b = IEEE_QNaN;
+	a_type = extend_ieee(a, &op_a, SINGLE);
+	if (op_a.s == 0) {
+		/* FIXME -- handle positive denormals.  */
+		send_sig(SIGFPE, current, 1);
+	}
+	return FPCR_INV;
+}
+
+/*
+ * Sqrt a = b, where a and b are ieee t-floating numbers.  "f"
+ * contains the rounding mode etc.
+ */
+unsigned long
+ieee_SQRTT (int f, unsigned long a, unsigned long *b)
+{
+	fpclass_t a_type;
+	EXTENDED op_a, op_b;
+
+	*b = IEEE_QNaN;
+	a_type = extend_ieee(a, &op_a, DOUBLE);
+	if (op_a.s == 0) {
+		/* FIXME -- handle positive denormals.  */
+		send_sig(SIGFPE, current, 1);
+	}
+	return FPCR_INV;
X }
diff -u --recursive --new-file v2.2.7/linux/arch/alpha/math-emu/ieee-math.h linux/arch/alpha/math-emu/ieee-math.h
--- v2.2.7/linux/arch/alpha/math-emu/ieee-math.h	Thu Dec 21 22:22:05 1995
+++ linux/arch/alpha/math-emu/ieee-math.h	Mon May 10 09:55:21 1999
@@ -48,5 +48,7 @@
X 				unsigned long *c);
X extern unsigned long ieee_DIVT (int rm, unsigned long a, unsigned long b,
X 				unsigned long *c);
+extern unsigned long ieee_SQRTS (int rm, unsigned long a, unsigned long *b);
+extern unsigned long ieee_SQRTT (int rm, unsigned long a, unsigned long *b);
X 
X #endif /* __ieee_math_h__ */
diff -u --recursive --new-file v2.2.7/linux/arch/arm/kernel/sys_arm.c linux/arch/arm/kernel/sys_arm.c
--- v2.2.7/linux/arch/arm/kernel/sys_arm.c	Tue Dec 22 14:16:53 1998
+++ linux/arch/arm/kernel/sys_arm.c	Sat May  8 11:14:01 1999
@@ -77,12 +77,14 @@
X 		goto out;
X 	if (!(a.flags & MAP_ANONYMOUS)) {
X 		error = -EBADF;
-		if (a.fd >= current->files->max_fds || 
-		    !(file = current->files->fd[a.fd]))
+		file = fget(a.fd);
+		if (!file)
X 			goto out;
X 	}
X 	a.flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE);
X 	error = do_mmap(file, a.addr, a.len, a.prot, a.flags, a.offset);
+	if (file)
+		fput(file);
X out:
X 	unlock_kernel();
X 	return error;
diff -u --recursive --new-file v2.2.7/linux/arch/arm/mm/Makefile linux/arch/arm/mm/Makefile
--- v2.2.7/linux/arch/arm/mm/Makefile	Fri May  8 23:14:42 1998
+++ linux/arch/arm/mm/Makefile	Sat May  8 11:06:56 1999
@@ -8,37 +8,30 @@
X # Note 2! The CFLAGS definition is now in the main makefile...
X 
X all:	lib first_rule
-ifeq ($(MACHINE),a5k)
-MMARCH=arc
-else
-MMARCH=$(MACHINE)
-endif
X 
X O_TARGET := mm.o
-O_OBJS   := init.o extable.o fault-$(PROCESSOR).o mm-$(MMARCH).o
+O_OBJS   := init.o extable.o fault-$(PROCESSOR).o small_page.o
X 
X ifeq ($(PROCESSOR),armo)
X  O_OBJS += proc-arm2,3.o
X endif
X 
X ifeq ($(PROCESSOR),armv)
- O_OBJS += small_page.o proc-arm6,7.o proc-sa110.o
+ O_OBJS += mm-$(MACHINE).o proc-arm6,7.o proc-sa110.o ioremap.o
X endif
X 
X include $(TOPDIR)/Rules.make
X 
-proc-arm2,3.o:	../lib/constants.h
-proc-arm6,7.o:	../lib/constants.h
-proc-sa110.o:	../lib/constants.h
-
X %.o: %.S
-ifneq ($(CONFIG_BINUTILS_NEW),y)
-	$(CC) $(CFLAGS) -D__ASSEMBLY__ -E $< | tr ';$$' '\n#' > ..$@.tmp.s
-	$(CC) $(CFLAGS:-pipe=) -c -o $@ ..$@.tmp.s
-	$(RM) ..$@.tmp.s
-else
X 	$(CC) $(CFLAGS) -D__ASSEMBLY__ -c -o $@ $<
-endif
X 
X .PHONY:	lib
X lib:;	@$(MAKE) -C ../lib constants.h
+
+# Special dependencies
+fault-armv.o: fault-common.c
+fault-armo.o: fault-common.c
+proc-arm2,3.o:	../lib/constants.h
+proc-arm6,7.o:	../lib/constants.h
+proc-sa110.o:	../lib/constants.h
+
diff -u --recursive --new-file v2.2.7/linux/arch/arm/mm/fault-armo.c linux/arch/arm/mm/fault-armo.c
--- v2.2.7/linux/arch/arm/mm/fault-armo.c	Tue Dec 22 14:16:53 1998
+++ linux/arch/arm/mm/fault-armo.c	Sat May  8 11:06:56 1999
@@ -1,11 +1,10 @@
X /*
- *  linux/arch/arm/mm/fault.c
+ *  linux/arch/arm/mm/fault-armo.c
X  *
X  *  Copyright (C) 1995  Linus Torvalds
- *  Modifications for ARM processor (c) 1995, 1996 Russell King
+ *  Modifications for ARM processor (c) 1995-1999 Russell King
X  */
X 
-#include <linux/config.h>
X #include <linux/signal.h>
X #include <linux/sched.h>
X #include <linux/kernel.h>
@@ -15,8 +14,7 @@
X #include <linux/ptrace.h>
X #include <linux/mman.h>
X #include <linux/mm.h>
-#include <linux/smp.h>
-#include <linux/smp_lock.h>
+#include <linux/interrupt.h>
X 
X #include <asm/system.h>
X #include <asm/uaccess.h>
@@ -27,35 +25,32 @@
X #define FAULT_CODE_WRITE	0x02
X #define FAULT_CODE_USER		0x01
X 
-struct pgtable_cache_struct quicklists;
+#define DO_COW(m)		((m) & (FAULT_CODE_WRITE|FAULT_CODE_FORCECOW))
+#define READ_FAULT(m)		(!((m) & FAULT_CODE_WRITE))
X 
-void __bad_pmd(pmd_t *pmd)
+#include "fault-common.c"
+
+static void *alloc_table(int size, int prio)
X {
-	printk("Bad pmd in pte_alloc: %08lx\n", pmd_val(*pmd));
-#ifdef CONFIG_DEBUG_ERRORS
-	__backtrace();
-#endif
-	set_pmd(pmd, mk_pmd(BAD_PAGETABLE));
+	if (size != 128)
+		printk("invalid table size\n");
+	return (void *)get_page_8k(prio);
X }
X 
-void __bad_pmd_kernel(pmd_t *pmd)
+void free_table(void *table)
X {
-	printk("Bad pmd in pte_alloc_kernel: %08lx\n", pmd_val(*pmd));
-#ifdef CONFIG_DEBUG_ERRORS
-	__backtrace();
-#endif
-	set_pmd(pmd, mk_pmd(BAD_PAGETABLE));
+	free_page_8k((unsigned long)table);
X }
X 
X pgd_t *get_pgd_slow(void)
X {
-	pgd_t *pgd = (pgd_t *) kmalloc(PTRS_PER_PGD * BYTES_PER_PTR, GFP_KERNEL);
+	pgd_t *pgd = (pgd_t *)alloc_table(PTRS_PER_PGD * BYTES_PER_PTR, GFP_KERNEL);
X 	pgd_t *init;
-	
+
X 	if (pgd) {
X 		init = pgd_offset(&init_mm, 0);
-		memzero (pgd, USER_PTRS_PER_PGD * BYTES_PER_PTR);
-		memcpy (pgd + USER_PTRS_PER_PGD, init + USER_PTRS_PER_PGD,
+		memzero(pgd, USER_PTRS_PER_PGD * BYTES_PER_PTR);
+		memcpy(pgd + USER_PTRS_PER_PGD, init + USER_PTRS_PER_PGD,
X 			(PTRS_PER_PGD - USER_PTRS_PER_PGD) * BYTES_PER_PTR);
X 	}
X 	return pgd;
@@ -65,17 +60,17 @@
X {
X 	pte_t *pte;
X 
-	pte = (pte_t *) kmalloc (PTRS_PER_PTE * BYTES_PER_PTR, GFP_KERNEL);
+	pte = (pte_t *)alloc_table(PTRS_PER_PTE * BYTES_PER_PTR, GFP_KERNEL);
X 	if (pmd_none(*pmd)) {
X 		if (pte) {
-			memzero (pte, PTRS_PER_PTE * BYTES_PER_PTR);
+			memzero(pte, PTRS_PER_PTE * BYTES_PER_PTR);
X 			set_pmd(pmd, mk_pmd(pte));
X 			return pte + offset;
X 		}
X 		set_pmd(pmd, mk_pmd(BAD_PAGETABLE));
X 		return NULL;
X 	}
-	kfree (pte);
+	free_table((void *)pte);
X 	if (pmd_bad(*pmd)) {
X 		__bad_pmd(pmd);
X 		return NULL;
@@ -83,126 +78,22 @@
X 	return (pte_t *) pmd_page(*pmd) + offset;
X }
X 
-extern void die_if_kernel(char *msg, struct pt_regs *regs, unsigned int err, unsigned int ret);
-
-static void kernel_page_fault (unsigned long addr, int mode, struct pt_regs *regs,
-			       struct task_struct *tsk, struct mm_struct *mm)
-{
-	/*
-	 * Oops. The kernel tried to access some bad page. We'll have to
-	 * terminate things with extreme prejudice.
-	 */
-	pgd_t *pgd;
-	if (addr < PAGE_SIZE)
-	    printk (KERN_ALERT "Unable to handle kernel NULL pointer dereference");
-	else
-	    printk (KERN_ALERT "Unable to handle kernel paging request");
-	printk (" at virtual address %08lx\n", addr);
-	printk (KERN_ALERT "current->tss.memmap = %08lX\n", tsk->tss.memmap);
-	pgd = pgd_offset (mm, addr);
-	printk (KERN_ALERT "*pgd = %08lx", pgd_val (*pgd));
-	if (!pgd_none (*pgd)) {
-		pmd_t *pmd;
-		pmd = pmd_offset (pgd, addr);
-		printk (", *pmd = %08lx", pmd_val (*pmd));
-		if (!pmd_none (*pmd))
-			printk (", *pte = %08lx", pte_val (*pte_offset (pmd, addr)));
-	}
-	printk ("\n");
-	die_if_kernel ("Oops", regs, mode, SIGKILL);
-	do_exit (SIGKILL);
-}
-
-static void
-handle_dataabort (unsigned long addr, int mode, struct pt_regs *regs)
-{
-	struct task_struct *tsk;
-	struct mm_struct *mm;
-	struct vm_area_struct *vma;
-	unsigned long fixup;
-
-	lock_kernel();
-	tsk = current;
-	mm = tsk->mm;
-
-	down(&mm->mmap_sem);
-	vma = find_vma (mm, addr);
-	if (!vma)
-		goto bad_area;
-	if (addr >= vma->vm_start)
-		goto good_area;
-	if (!(vma->vm_flags & VM_GROWSDOWN) || expand_stack (vma, addr))
-		goto bad_area;
-
-	/*
-	 * Ok, we have a good vm_area for this memory access, so
-	 * we can handle it..
-	 */
-good_area:
-	if (!(mode & FAULT_CODE_WRITE)) { /* write? */
-		if (!(vma->vm_flags & (VM_READ|VM_EXEC)))
-			goto bad_area;
-	} else {
-		if (!(vma->vm_flags & VM_WRITE))
-			goto bad_area;
-	}
-	handle_mm_fault (tsk, vma, addr, mode & (FAULT_CODE_WRITE|FAULT_CODE_FORCECOW));
-	up(&mm->mmap_sem);
-	goto out;
-
-	/*
-	 * Something tried to access memory that isn't in our memory map..
-	 * Fix it, but check if it's kernel or user first..
-	 */
-bad_area:
-	up(&mm->mmap_sem);
-	if (mode & FAULT_CODE_USER) {
-//extern int console_loglevel;
-//cli();
-		tsk->tss.error_code = mode;
-		tsk->tss.trap_no = 14;
-//console_loglevel = 9;
-		printk ("%s: memory violation at pc=0x%08lx, lr=0x%08lx (bad address=0x%08lx, code %d)\n",
-			tsk->comm, regs->ARM_pc, regs->ARM_lr, addr, mode);
-//#ifdef DEBUG
-		show_regs (regs);
-		c_backtrace (regs->ARM_fp, 0);
-//#endif
-		force_sig(SIGSEGV, tsk);
-//while (1);
-		goto out;
-	}
-
-	/* Are we prepared to handle this kernel fault?  */
-	if ((fixup = search_exception_table(instruction_pointer(regs))) != 0) {
-		printk(KERN_DEBUG "%s: Exception at [<%lx>] addr=%lx (fixup: %lx)\n",
-			tsk->comm, regs->ARM_pc, addr, fixup);
-		regs->ARM_pc = fixup;
-		goto out;
-	}
-
-
-	kernel_page_fault (addr, mode, regs, tsk, mm);
-out:
-	unlock_kernel();
-}
-
X /*
X  * Handle a data abort.  Note that we have to handle a range of addresses
X  * on ARM2/3 for ldm.  If both pages are zero-mapped, then we have to force
- * a copy-on-write
+ * a copy-on-write.  However, on the second page, we always force COW.
X  */
X asmlinkage void
-do_DataAbort (unsigned long min_addr, unsigned long max_addr, int mode, struct pt_regs *regs)
+do_DataAbort(unsigned long min_addr, unsigned long max_addr, int mode, struct pt_regs *regs)
X {
-	handle_dataabort (min_addr, mode, regs);
+	do_page_fault(min_addr, mode, regs);
X 
X 	if ((min_addr ^ max_addr) >> PAGE_SHIFT)
-		handle_dataabort (max_addr, mode | FAULT_CODE_FORCECOW, regs);
+		do_page_fault(max_addr, mode | FAULT_CODE_FORCECOW, regs);
X }
X 
X asmlinkage int
-do_PrefetchAbort (unsigned long addr, int mode, struct pt_regs *regs)
+do_PrefetchAbort(unsigned long addr, struct pt_regs *regs)
X {
X #if 0
X 	if (the memc mapping for this page exists - can check now...) {
@@ -210,6 +101,6 @@
X 		return 0;
X 	}
X #endif
-	handle_dataabort (addr, mode, regs);
+	do_page_fault(addr, FAULT_CODE_USER|FAULT_CODE_PREFETCH, regs);
X 	return 1;
X }
diff -u --recursive --new-file v2.2.7/linux/arch/arm/mm/fault-armv.c linux/arch/arm/mm/fault-armv.c
--- v2.2.7/linux/arch/arm/mm/fault-armv.c	Tue Dec 22 14:16:53 1998
+++ linux/arch/arm/mm/fault-armv.c	Sat May  8 11:06:56 1999
@@ -1,10 +1,11 @@
X /*
- *  linux/arch/arm/mm/fault.c
+ *  linux/arch/arm/mm/fault-armv.c
X  *
X  *  Copyright (C) 1995  Linus Torvalds
- *  Modifications for ARM processor (c) 1995, 1996 Russell King
+ *  Modifications for ARM processor (c) 1995-1999 Russell King
X  */
X 
+#include <linux/config.h>
X #include <linux/signal.h>
X #include <linux/sched.h>
X #include <linux/kernel.h>
@@ -14,43 +15,37 @@
X #include <linux/ptrace.h>
X #include <linux/mman.h>
X #include <linux/mm.h>
-#include <linux/smp.h>
-#include <linux/smp_lock.h>
+#include <linux/interrupt.h>
+#include <linux/proc_fs.h>
+#include <linux/init.h>
X 
X #include <asm/system.h>
X #include <asm/uaccess.h>
X #include <asm/pgtable.h>
+#include <asm/unaligned.h>
X 
X #define FAULT_CODE_READ		0x02
X #define FAULT_CODE_USER		0x01
X 
-struct pgtable_cache_struct quicklists;
+#define DO_COW(m)		(!((m) & FAULT_CODE_READ))
+#define READ_FAULT(m)		((m) & FAULT_CODE_READ)
X 
-void __bad_pmd(pmd_t *pmd)
-{
-	printk("Bad pmd in pte_alloc: %08lx\n", pmd_val(*pmd));
-	set_pmd(pmd, mk_user_pmd(BAD_PAGETABLE));
-}
-
-void __bad_pmd_kernel(pmd_t *pmd)
-{
-	printk("Bad pmd in pte_alloc: %08lx\n", pmd_val(*pmd));
-	set_pmd(pmd, mk_kernel_pmd(BAD_PAGETABLE));
-}
+#include "fault-common.c"
X 
X pgd_t *get_pgd_slow(void)
X {
X 	/*
X 	 * need to get a 16k page for level 1
X 	 */
-	pgd_t *pgd = (pgd_t *) __get_free_pages(GFP_KERNEL,2);
+	pgd_t *pgd = (pgd_t *)__get_free_pages(GFP_KERNEL,2);
X 	pgd_t *init;
-	
+
X 	if (pgd) {
X 		init = pgd_offset(&init_mm, 0);
-		memzero ((void *)pgd, USER_PTRS_PER_PGD * BYTES_PER_PTR);
-		memcpy (pgd + USER_PTRS_PER_PGD, init + USER_PTRS_PER_PGD,
+		memzero(pgd, USER_PTRS_PER_PGD * BYTES_PER_PTR);
+		memcpy(pgd + USER_PTRS_PER_PGD, init + USER_PTRS_PER_PGD,
X 			(PTRS_PER_PGD - USER_PTRS_PER_PGD) * BYTES_PER_PTR);
+		clean_cache_area(pgd, PTRS_PER_PGD * BYTES_PER_PTR);
X 	}
X 	return pgd;
X }
@@ -59,17 +54,19 @@
X {
X 	pte_t *pte;
X 
-	pte = (pte_t *) get_small_page(GFP_KERNEL);
+	pte = (pte_t *)get_page_2k(GFP_KERNEL);
X 	if (pmd_none(*pmd)) {
X 		if (pte) {
-			memzero (pte, PTRS_PER_PTE * BYTES_PER_PTR);
+			memzero(pte, 2 * PTRS_PER_PTE * BYTES_PER_PTR);
+			clean_cache_area(pte, PTRS_PER_PTE * BYTES_PER_PTR);
+			pte += PTRS_PER_PTE;
X 			set_pmd(pmd, mk_user_pmd(pte));
X 			return pte + offset;
X 		}
X 		set_pmd(pmd, mk_user_pmd(BAD_PAGETABLE));
X 		return NULL;
X 	}
-	free_small_page ((unsigned long) pte);
+	free_page_2k((unsigned long)pte);
X 	if (pmd_bad(*pmd)) {
X 		__bad_pmd(pmd);
X 		return NULL;
@@ -81,17 +78,19 @@
X {
X 	pte_t *pte;
X 
-	pte = (pte_t *) get_small_page(GFP_KERNEL);
+	pte = (pte_t *)get_page_2k(GFP_KERNEL);
X 	if (pmd_none(*pmd)) {
X 		if (pte) {
-			memzero (pte, PTRS_PER_PTE * BYTES_PER_PTR);
+			memzero(pte, 2 * PTRS_PER_PTE * BYTES_PER_PTR);
+			clean_cache_area(pte, PTRS_PER_PTE * BYTES_PER_PTR);
+			pte += PTRS_PER_PTE;
X 			set_pmd(pmd, mk_kernel_pmd(pte));
X 			return pte + offset;
X 		}
X 		set_pmd(pmd, mk_kernel_pmd(BAD_PAGETABLE));
X 		return NULL;
X 	}
-	free_small_page ((unsigned long) pte);
+	free_page_2k((unsigned long)pte);
X 	if (pmd_bad(*pmd)) {
X 		__bad_pmd_kernel(pmd);
X 		return NULL;
@@ -99,10 +98,8 @@
X 	return (pte_t *) pmd_page(*pmd) + offset;
X }
X 
-extern void die_if_kernel(char *msg, struct pt_regs *regs, unsigned int err, unsigned int ret);
-
X #ifdef DEBUG
-static int sp_valid (unsigned long *sp)
+static int sp_valid(unsigned long *sp)
X {
X 	unsigned long addr = (unsigned long) sp;
X 
@@ -114,187 +111,371 @@
X }
X #endif
X 
-static void kernel_page_fault (unsigned long addr, int mode, struct pt_regs *regs,
-			       struct task_struct *tsk, struct mm_struct *mm)
+#ifdef CONFIG_ALIGNMENT_TRAP
+/*
+ * 32-bit misaligned trap handler (c) 1998 San Mehat (CCC) -July 1998
+ * /proc/sys/debug/alignment, modified and integrated into
+ * Linux 2.1 by Russell King
+ *
+ * NOTE!!! This is not portable onto the ARM6/ARM7 processors yet.  Also,
+ * it seems to give a severe performance impact (1 abort/ms - NW runs at
+ * ARM6 speeds) with GCC 2.7.2.2 - needs checking with a later GCC/EGCS.
+ *
+ * IMHO, I don't think that the trap handler is advantageous on ARM6,7
+ * processors (they'll run like an ARM3).  We'll see.
+ */
+#define CODING_BITS(i)	(i & 0x0e000000)
+
+#define LDST_I_BIT(i)	(i & (1 << 26))		/* Immediate constant	*/
+#define LDST_P_BIT(i)	(i & (1 << 24))		/* Preindex		*/
+#define LDST_U_BIT(i)	(i & (1 << 23))		/* Add offset		*/
+#define LDST_W_BIT(i)	(i & (1 << 21))		/* Writeback		*/
+#define LDST_L_BIT(i)	(i & (1 << 20))		/* Load			*/
+
+#define LDSTH_I_BIT(i)	(i & (1 << 22))		/* half-word immed	*/
+#define LDM_S_BIT(i)	(i & (1 << 22))		/* write CPSR from SPSR	*/
+
+#define RN_BITS(i)	((i >> 16) & 15)	/* Rn			*/
+#define RD_BITS(i)	((i >> 12) & 15)	/* Rd			*/
+#define RM_BITS(i)	(i & 15)		/* Rm			*/
+
+#define REGMASK_BITS(i)	(i & 0xffff)
+#define OFFSET_BITS(i)	(i & 0x0fff)
+
+#define IS_SHIFT(i)	(i & 0x0ff0)
+#define SHIFT_BITS(i)	((i >> 7) & 0x1f)
+#define SHIFT_TYPE(i)	(i & 0x60)
+#define SHIFT_LSL	0x00
+#define SHIFT_LSR	0x20
+#define SHIFT_ASR	0x40
+#define SHIFT_RORRRX	0x60
+
+static unsigned long ai_user;
+static unsigned long ai_sys;
+static unsigned long ai_skipped;
+static unsigned long ai_half;
+static unsigned long ai_word;
+static unsigned long ai_multi;
+
+static int proc_alignment_read(char *page, char **start, off_t off,
+			       int count, int *eof, void *data)
X {
-	/*
-	 * Oops. The kernel tried to access some bad page. We'll have to
-	 * terminate things with extreme prejudice.
-	 */
-	pgd_t *pgd;
-	if (addr < PAGE_SIZE)
-	    printk (KERN_ALERT "Unable to handle kernel NULL pointer dereference");
-	else
-	    printk (KERN_ALERT "Unable to handle kernel paging request");
-	printk (" at virtual address %08lx\n", addr);
-	printk (KERN_ALERT "current->tss.memmap = %08lX\n", tsk->tss.memmap);
-	pgd = pgd_offset (mm, addr);
-	printk (KERN_ALERT "*pgd = %08lx", pgd_val (*pgd));
-	if (!pgd_none (*pgd)) {
-		pmd_t *pmd;
-		pmd = pmd_offset (pgd, addr);
-		printk (", *pmd = %08lx", pmd_val (*pmd));
-		if (!pmd_none (*pmd))
-			printk (", *pte = %08lx", pte_val (*pte_offset (pmd, addr)));
-	}
-	printk ("\n");
-	die_if_kernel ("Oops", regs, mode, SIGKILL);
-	do_exit (SIGKILL);
+	char *p = page;
+	int len;
+
+	p += sprintf(p, "User:\t\t%li\n", ai_user);
+	p += sprintf(p, "System:\t\t%li\n", ai_sys);
+	p += sprintf(p, "Skipped:\t%li\n", ai_skipped);
+	p += sprintf(p, "Half:\t\t%li\n", ai_half);
+	p += sprintf(p, "Word:\t\t%li\n", ai_word);
+	p += sprintf(p, "Multi:\t\t%li\n", ai_multi);
+
+	len = (p - page) - off;
+	if (len < 0)
+		len = 0;
+
+	*eof = (len <= count) ? 1 : 0;
+	*start = page + off;
+
+	return len;
X }
X 
-static void page_fault (unsigned long addr, int mode, struct pt_regs *regs)
+/*
+ * This needs to be done after sysctl_init, otherwise sys/
+ * will be overwritten.
+ */
+void __init alignment_init(void)
X {
-	struct task_struct *tsk;
-	struct mm_struct *mm;
-	struct vm_area_struct *vma;
-	unsigned long fixup;
-
-	lock_kernel();
-	tsk = current;
-	mm = tsk->mm;
-
-	down(&mm->mmap_sem);
-	vma = find_vma (mm, addr);
-	if (!vma)
-		goto bad_area;
-	if (vma->vm_start <= addr)
-		goto good_area;
-	if (!(vma->vm_flags & VM_GROWSDOWN) || expand_stack (vma, addr))
-		goto bad_area;
+	struct proc_dir_entry *e;
X 
-	/*
-	 * Ok, we have a good vm_area for this memory access, so
-	 * we can handle it..
-	 */
-good_area:
-	if (mode & FAULT_CODE_READ) { /* read? */
-		if (!(vma->vm_flags & (VM_READ|VM_EXEC)))
-			goto bad_area;
-	} else {
-		if (!(vma->vm_flags & VM_WRITE))
-			goto bad_area;
+	e = create_proc_entry("sys/debug/alignment", S_IFREG | S_IRUGO, NULL);
+
+	if (e)
+		e->read_proc = proc_alignment_read;
+}
+
+static int
+do_alignment_exception(struct pt_regs *regs)
+{
+	unsigned int instr, rd, rn, correction, nr_regs, regbits;
+	unsigned long eaddr;
+	union { unsigned long un; signed long sn; } offset;
+
+	if (user_mode(regs)) {
+		set_cr(cr_no_alignment);
+		ai_user += 1;
+		return 0;
X 	}
-	handle_mm_fault (tsk, vma, addr & PAGE_MASK, !(mode & FAULT_CODE_READ));
-	up(&mm->mmap_sem);
-	goto out;
X 
-	/*
-	 * Something tried to access memory that isn't in our memory map..
-	 * Fix it, but check if it's kernel or user first..
-	 */
-bad_area:
-	up(&mm->mmap_sem);
-	if (mode & FAULT_CODE_USER) {
-		tsk->tss.error_code = mode;
-		tsk->tss.trap_no = 14;
-		printk ("%s: memory violation at pc=0x%08lx, lr=0x%08lx (bad address=0x%08lx, code %d)\n",
-			tsk->comm, regs->ARM_pc, regs->ARM_lr, addr, mode);
-#ifdef DEBUG
-		{
-			unsigned int i, j;
-			unsigned long *sp = (unsigned long *) (regs->ARM_sp - 128);
-			for (j = 0; j < 20 && sp_valid (sp); j++) {
-				printk ("%p: ", sp);
-				for (i = 0; i < 8 && sp_valid (sp); i += 1, sp++)
-					printk ("%08lx ", *sp);
-				printk ("\n");
+	ai_sys += 1;
+
+	instr = *(unsigned long *)instruction_pointer(regs);
+	correction = 4; /* sometimes 8 on ARMv3 */
+	regs->ARM_pc += correction + 4;
+
+	rd = RD_BITS(instr);
+	rn = RN_BITS(instr);
+	eaddr = regs->uregs[rn];
+
+	switch(CODING_BITS(instr)) {
+	case 0x00000000:
+		if ((instr & 0x0ff00ff0) == 0x01000090) {
+			ai_skipped += 1;
+			printk(KERN_ERR "Unaligned trap: not handling swp instruction\n");
+			return 1;
+		}
+
+		if (((instr & 0x0e000090) == 0x00000090) && (instr & 0x60) != 0) {
+			ai_half += 1;
+			if (LDSTH_I_BIT(instr))
+				offset.un = (instr & 0xf00) >> 4 | (instr & 15);
+			else
+				offset.un = regs->uregs[RM_BITS(instr)];
+
+			if (LDST_P_BIT(instr)) {
+				if (LDST_U_BIT(instr))
+					eaddr += offset.un;
+				else
+					eaddr -= offset.un;
X 			}
+
+			if (LDST_L_BIT(instr))
+				regs->uregs[rd] = get_unaligned((unsigned short *)eaddr);
+			else
+				put_unaligned(regs->uregs[rd], (unsigned short *)eaddr);
+
+			/* signed half-word? */
+			if (instr & 0x40)
+				regs->uregs[rd] = (long)((short) regs->uregs[rd]);
+
+			if (!LDST_P_BIT(instr)) {
+				if (LDST_U_BIT(instr))
+					eaddr += offset.un;
+				else
+					eaddr -= offset.un;
+				regs->uregs[rn] = eaddr;
+			} else if (LDST_W_BIT(instr))
+				regs->uregs[rn] = eaddr;
+			break;
X 		}
-		show_regs (regs);
-		c_backtrace (regs->ARM_fp, regs->ARM_cpsr);
-#endif
-		force_sig(SIGSEGV, tsk);
-		goto out;
-	}
X 
-	/* Are we prepared to handle this kernel fault?  */
-	if ((fixup = search_exception_table(instruction_pointer(regs))) != 0) {
-		printk(KERN_DEBUG "%s: Exception at [<%lx>] addr=%lx (fixup: %lx)\n",
-			tsk->comm, regs->ARM_pc, addr, fixup);
-		regs->ARM_pc = fixup;
-		goto out;
+	default:
+		ai_skipped += 1;
+		panic("Alignment trap: not handling instruction %08X at %08lX",
+				instr, regs->ARM_pc - correction - 4);
+		break;
+
+	case 0x04000000:
+		offset.un = OFFSET_BITS(instr);
+		goto ldr_str;
+
+	case 0x06000000:
+		offset.un = regs->uregs[RM_BITS(instr)];
+
+		if (IS_SHIFT(instr)) {
+			unsigned int shiftval = SHIFT_BITS(instr);
+
+			switch(SHIFT_TYPE(instr)) {
+			case SHIFT_LSL:
+				offset.un <<= shiftval;
+				break;
+
+			case SHIFT_LSR:
+				offset.un >>= shiftval;
+				break;
+
+			case SHIFT_ASR:
+				offset.sn >>= shiftval;
+				break;
+
+			case SHIFT_RORRRX:
+				if (shiftval == 0) {
+					offset.un >>= 1;
+					if (regs->ARM_cpsr & CC_C_BIT)
+						offset.un |= 1 << 31;
+				} else
+					offset.un = offset.un >> shiftval |
+							  offset.un << (32 - shiftval);
+				break;
+			}
+		}
+
+	ldr_str:
+		ai_word += 1;
+		if (LDST_P_BIT(instr)) {
+			if (LDST_U_BIT(instr))
+				eaddr += offset.un;
+			else
+				eaddr -= offset.un;
+		} else {
+			if (LDST_W_BIT(instr)) {
+				printk(KERN_ERR "Not handling ldrt/strt correctly\n");
+				return 1;
+			}
+		}
+
+		if (LDST_L_BIT(instr)) {
+			regs->uregs[rd] = get_unaligned((unsigned long *)eaddr);
+			if (rd == 15)
+				correction = 0;
+		} else
+			put_unaligned(regs->uregs[rd], (unsigned long *)eaddr);
+
+		if (!LDST_P_BIT(instr)) {
+			if (LDST_U_BIT(instr))
+				eaddr += offset.un;
+			else
+				eaddr -= offset.un;
+
+			regs->uregs[rn] = eaddr;
+		} else if (LDST_W_BIT(instr))
+			regs->uregs[rn] = eaddr;
+		break;
+
+	case 0x08000000:
+		if (LDM_S_BIT(instr))
+			panic("Alignment trap: not handling LDM with s-bit\n");
+		ai_multi += 1;
+
+		for (regbits = REGMASK_BITS(instr), nr_regs = 0; regbits; regbits >>= 1)
+			nr_regs += 4;
+
+		if  (!LDST_U_BIT(instr))
+			eaddr -= nr_regs;
+
+		if ((LDST_U_BIT(instr) == 0 && LDST_P_BIT(instr) == 0) ||
+		    (LDST_U_BIT(instr)      && LDST_P_BIT(instr)))
+			eaddr += 4;
+
+		for (regbits = REGMASK_BITS(instr), rd = 0; regbits; regbits >>= 1, rd += 1)
+			if (regbits & 1) {
+				if (LDST_L_BIT(instr)) {
+					regs->uregs[rd] = get_unaligned((unsigned long *)eaddr);
+					if (rd == 15)
+						correction = 0;
+				} else
+					put_unaligned(regs->uregs[rd], (unsigned long *)eaddr);
+				eaddr += 4;
+			}
+
+		if (LDST_W_BIT(instr)) {
+			if (LDST_P_BIT(instr) && !LDST_U_BIT(instr))
+				eaddr -= nr_regs;
+			else if (LDST_P_BIT(instr))
+				eaddr -= 4;
+			else if (!LDST_U_BIT(instr))
+				eaddr -= 4 + nr_regs;
+			regs->uregs[rn] = eaddr;
+		}
+		break;
X 	}
X 
-	kernel_page_fault (addr, mode, regs, tsk, mm);
-out:
-	unlock_kernel();
+	regs->ARM_pc -= correction;
+
+	return 0;
X }
X 
-/*
- * Handle a data abort.  Note that we have to handle a range of addresses
- * on ARM2/3 for ldm.  If both pages are zero-mapped, then we have to force
- * a copy-on-write
- */
+#endif
+
X asmlinkage void
-do_DataAbort (unsigned long addr, int fsr, int error_code, struct pt_regs *regs)
+do_DataAbort(unsigned long addr, int fsr, int error_code, struct pt_regs *regs)
X {
X 	if (user_mode(regs))
X 		error_code |= FAULT_CODE_USER;
+
X #define DIE(signr,nam)\
X 		force_sig(signr, current);\
-		die_if_kernel(nam, regs, fsr, signr);\
-		break;
+		die(nam, regs, fsr);\
+		do_exit(signr);\
+		break
X 
X 	switch (fsr & 15) {
-	case 2:
-		DIE(SIGKILL, "Terminal exception")
+	/*
+	 *  0 - vector exception
+	 */
X 	case 0:
-		DIE(SIGSEGV, "Vector exception")
+		force_sig(SIGSEGV, current);
+		if (!user_mode(regs)) {
+			die("vector exception", regs, fsr);
+			do_exit(SIGSEGV);
+		}
+		break;
+
+	/*
+	 * 15 - permission fault on page
+	 *  5 - page-table entry descriptor fault
+	 *  7 - first-level descriptor fault
+	 */
+	case 15: case 5: case 7:
+		do_page_fault(addr, error_code, regs);
+		break;
+
+	/*
+	 * 13 - permission fault on section
+	 */
+	case 13:
+		force_sig(SIGSEGV, current);
+		if (!user_mode(regs)) {
+			die("section permission fault", regs, fsr);
+			do_exit(SIGSEGV);
+		} else {
+#ifdef CONFIG_DEBUG_USER
+			printk("%s: permission fault on section, "
+			       "address=0x%08lx, code %d\n",
+			       current->comm, addr, error_code);
+#ifdef DEBUG
+			{
+				unsigned int i, j;
+				unsigned long *sp;
+
+				sp = (unsigned long *) (regs->ARM_sp - 128);
+				for (j = 0; j < 20 && sp_valid(sp); j++) {
+					printk("%p: ", sp);
+					for (i = 0; i < 8 && sp_valid(sp); i += 1, sp++)
+						printk("%08lx ", *sp);
+					printk("\n");
+				}
+				show_regs(regs);
+				c_backtrace(regs->ARM_fp, regs->ARM_cpsr);
+			}
+#endif
+#endif
+		}
+		break;
+
X 	case 1:
X 	case 3:
-		DIE(SIGBUS, "Alignment exception")
+#ifdef CONFIG_ALIGNMENT_TRAP
+		if (!do_alignment_exception(regs))
+			break;
+#endif
+		/*
+		 * this should never happen
+		 */
+		DIE(SIGBUS, "Alignment exception");
+		break;
+
+	case 2:
+		DIE(SIGKILL, "Terminal exception");
X 	case 12:
X 	case 14:
-		DIE(SIGBUS, "External abort on translation")
+		DIE(SIGBUS, "External abort on translation");
X 	case 9:
X 	case 11:
-		DIE(SIGSEGV, "Domain fault")
-	case 13:/* permission fault on section */
-#ifdef DEBUG
-		{
-			unsigned int i, j;
-			unsigned long *sp;
-
-			printk ("%s: section permission fault (bad address=0x%08lx, code %d)\n",
-				current->comm, addr, error_code);
-			sp = (unsigned long *) (regs->ARM_sp - 128);
-			for (j = 0; j < 20 && sp_valid (sp); j++) {
-				printk ("%p: ", sp);
-				for (i = 0; i < 8 && sp_valid (sp); i += 1, sp++)
-					printk ("%08lx ", *sp);
-				printk ("\n");
-			}
-			show_regs (regs);
-			c_backtrace(regs->ARM_fp, regs->ARM_cpsr);
-		}
-#endif
-		DIE(SIGSEGV, "Permission fault")
+		DIE(SIGSEGV, "Domain fault");
X 
-	case 15:/* permission fault on page */
-	case 5:	/* page-table entry descriptor fault */
-	case 7:	/* first-level descriptor fault */
-		page_fault (addr, error_code, regs);
-		break;
X 	case 4:
X 	case 6:
-		DIE(SIGBUS, "External abort on linefetch")
+		DIE(SIGBUS, "External abort on linefetch");
X 	case 8:
X 	case 10:
-		DIE(SIGBUS, "External abort on non-linefetch")
+		DIE(SIGBUS, "External abort on non-linefetch");
X 	}
X }
X 
X asmlinkage int
-do_PrefetchAbort (unsigned long addr, struct pt_regs *regs)
+do_PrefetchAbort(unsigned long addr, struct pt_regs *regs)
X {
-#if 0
-	/* does this still apply ? */
-	if (the memc mapping for this page exists - can check now...) {
-		printk ("Page in, but got abort (undefined instruction?)\n");
-		return 0;
-	}
-#endif
-	page_fault (addr, FAULT_CODE_USER|FAULT_CODE_READ, regs);
+	do_page_fault(addr, FAULT_CODE_USER|FAULT_CODE_READ, regs);
X 	return 1;
X }
-
diff -u --recursive --new-file v2.2.7/linux/arch/arm/mm/fault-common.c linux/arch/arm/mm/fault-common.c
--- v2.2.7/linux/arch/arm/mm/fault-common.c	Wed Dec 31 16:00:00 1969
+++ linux/arch/arm/mm/fault-common.c	Sat May  8 11:06:56 1999
@@ -0,0 +1,188 @@
+/*
+ *  linux/arch/arm/mm/fault-common.c
+ *
+ *  Copyright (C) 1995  Linus Torvalds
+ *  Modifications for ARM processor (c) 1995-1999 Russell King
+ */
+#include <linux/config.h>
+
+extern void die(char *msg, struct pt_regs *regs, unsigned int err);
+
+void __bad_pmd(pmd_t *pmd)
+{
+	printk("Bad pmd in pte_alloc: %08lx\n", pmd_val(*pmd));
+#ifdef CONFIG_DEBUG_ERRORS
+	__backtrace();
+#endif
+	set_pmd(pmd, mk_user_pmd(BAD_PAGETABLE));
+}
+
+void __bad_pmd_kernel(pmd_t *pmd)
+{
+	printk("Bad pmd in pte_alloc_kernel: %08lx\n", pmd_val(*pmd));
+#ifdef CONFIG_DEBUG_ERRORS
+	__backtrace();
+#endif
+	set_pmd(pmd, mk_kernel_pmd(BAD_PAGETABLE));
+}
+
+static void
+kernel_page_fault(unsigned long addr, int mode, struct pt_regs *regs,
+		  struct task_struct *tsk, struct mm_struct *mm)
+{
+	char *reason;
+	/*
+	 * Oops. The kernel tried to access some bad page. We'll have to
+	 * terminate things with extreme prejudice.
+	 */
+	pgd_t *pgd;
+
+	if (addr < PAGE_SIZE)
+		reason = "NULL pointer dereference";
+	else
+		reason = "paging request";
+
+	printk(KERN_ALERT "Unable to handle kernel %s at virtual address %08lx\n",
+		reason, addr);
+	printk(KERN_ALERT "memmap = %08lX, pgd = %p\n", tsk->tss.memmap, mm->pgd);
+	pgd = pgd_offset(mm, addr);
+	printk(KERN_ALERT "*pgd = %08lx", pgd_val(*pgd));
+
+	do {
+		pmd_t *pmd;
+		pte_t *pte;
+
+		if (pgd_none(*pgd))
+			break;
+
+		if (pgd_bad(*pgd)) {
+			printk("(bad)\n");
+			break;
+		}
+
+		pmd = pmd_offset(pgd, addr);
+		printk(", *pmd = %08lx", pmd_val(*pmd));
+
+		if (pmd_none(*pmd))
+			break;
+
+		if (pmd_bad(*pmd)) {
+			printk("(bad)\n");
+			break;
+		}
+
+		pte = pte_offset(pmd, addr);
+		printk(", *pte = %08lx", pte_val(*pte));
+		printk(", *ppte = %08lx", pte_val(pte[-PTRS_PER_PTE]));
+	} while(0);
+
+	printk("\n");
+	die("Oops", regs, mode);
+
+	do_exit(SIGKILL);
+}
+
+static void do_page_fault(unsigned long addr, int mode, struct pt_regs *regs)
+{
+	struct task_struct *tsk;
+	struct mm_struct *mm;
+	struct vm_area_struct *vma;
+	unsigned long fixup;
+
+	tsk = current;
+	mm  = tsk->mm;
+
+	/*
+	 * If we're in an interrupt or have no user
+	 * context, we must not take the fault..
+	 */
+	if (in_interrupt() || mm == &init_mm)
+		goto no_context;
+
+	down(&mm->mmap_sem);
+	vma = find_vma(mm, addr);
+	if (!vma)
+		goto bad_area;
+	if (vma->vm_start <= addr)
+		goto good_area;
+	if (!(vma->vm_flags & VM_GROWSDOWN) || expand_stack(vma, addr))
+		goto bad_area;
+
+	/*
+	 * Ok, we have a good vm_area for this memory access, so
+	 * we can handle it..
+	 */
+good_area:
+	if (READ_FAULT(mode)) { /* read? */
+		if (!(vma->vm_flags & (VM_READ|VM_EXEC)))
+			goto bad_area;
+	} else {
+		if (!(vma->vm_flags & VM_WRITE))
+			goto bad_area;
+	}
+
+	/*
+	 * If for any reason at all we couldn't handle the fault,
+	 * make sure we exit gracefully rather than endlessly redo
+	 * the fault.
+	 */
+	if (!handle_mm_fault(tsk, vma, addr & PAGE_MASK, DO_COW(mode)))
+		goto do_sigbus;
+
+	up(&mm->mmap_sem);
+	return;
+
+	/*
+	 * Something tried to access memory that isn't in our memory map..
+	 * Fix it, but check if it's kernel or user first..
+	 */
+bad_area:
+	up(&mm->mmap_sem);
+
+	/* User mode accesses just cause a SIGSEGV */
+	if (mode & FAULT_CODE_USER) {
+		tsk->tss.error_code = mode;
+		tsk->tss.trap_no = 14;
+#ifdef CONFIG_DEBUG_USER
+		printk("%s: memory violation at pc=0x%08lx, lr=0x%08lx (bad address=0x%08lx, code %d)\n",
+			tsk->comm, regs->ARM_pc, regs->ARM_lr, addr, mode);
+#endif
+		force_sig(SIGSEGV, tsk);
+		return;
+	}
+
+no_context:
+	/* Are we prepared to handle this kernel fault?  */
+	if ((fixup = search_exception_table(instruction_pointer(regs))) != 0) {
+#ifdef DEBUG
+		printk(KERN_DEBUG "%s: Exception at [<%lx>] addr=%lx (fixup: %lx)\n",
+			tsk->comm, regs->ARM_pc, addr, fixup);
+#endif
+		regs->ARM_pc = fixup;
+		return;
+	}
+
+	kernel_page_fault(addr, mode, regs, tsk, mm);
+	return;
+
+do_sigbus:
+	/*
+	 * We ran out of memory, or some other thing happened to us that made
+	 * us unable to handle the page fault gracefully.
+	 */
+	up(&mm->mmap_sem);
+
+	/*
+	 * Send a sigbus, regardless of whether we were in kernel
+	 * or user mode.
+	 */
+	tsk->tss.error_code = mode;
+	tsk->tss.trap_no = 14;
+	force_sig(SIGBUS, tsk);
+
+	/* Kernel mode? Handle exceptions or die */
+	if (!(mode & FAULT_CODE_USER))
+		goto no_context;
+}
+
+
diff -u --recursive --new-file v2.2.7/linux/arch/arm/mm/init.c linux/arch/arm/mm/init.c
--- v2.2.7/linux/arch/arm/mm/init.c	Tue Dec 22 14:16:53 1998
+++ linux/arch/arm/mm/init.c	Sat May  8 11:06:56 1999
@@ -29,6 +29,9 @@
X #include <asm/proc/mm-init.h>
X 
X pgd_t swapper_pg_dir[PTRS_PER_PGD];
+#ifndef CONFIG_NO_PGT_CACHE
+struct pgtable_cache_struct quicklists;
+#endif
X 
X extern char _etext, _stext, _edata, __bss_start, _end;
X extern char __init_begin, __init_end;
@@ -36,6 +39,7 @@
X int do_check_pgt_cache(int low, int high)
X {
X 	int freed = 0;
+#ifndef CONFIG_NO_PGT_CACHE
X 	if(pgtable_cache_size > high) {
X 		do {
X 			if(pgd_quicklist)
@@ -46,6 +50,7 @@
X 				free_pte_slow(get_pte_fast()), freed++;
X 		} while(pgtable_cache_size > low);
X 	}
+#endif
X 	return freed;
X }
X 
@@ -63,17 +68,18 @@
X  * data and COW.
X  */
X #if PTRS_PER_PTE != 1
-unsigned long *empty_bad_page_table;
+pte_t *empty_bad_page_table;
X 
X pte_t *__bad_pagetable(void)
X {
-	int i;
X 	pte_t bad_page;
+	int i;
X 
X 	bad_page = BAD_PAGE;
X 	for (i = 0; i < PTRS_PER_PTE; i++)
-		empty_bad_page_table[i] = (unsigned long)pte_val(bad_page);
-	return (pte_t *) empty_bad_page_table;
+		set_pte(empty_bad_page_table + i, bad_page);
+
+	return empty_bad_page_table;
X }
X #endif
X 
@@ -128,8 +134,11 @@
X 	empty_bad_page = (unsigned long *)start_mem;
X 	start_mem += PAGE_SIZE;
X #if PTRS_PER_PTE != 1
-	empty_bad_page_table = (unsigned long *)start_mem;
-	start_mem += PTRS_PER_PTE * sizeof (void *);
+#ifdef CONFIG_CPU_32
+	start_mem += PTRS_PER_PTE * BYTES_PER_PTR;
+#endif
+	empty_bad_page_table = (pte_t *)start_mem;
+	start_mem += PTRS_PER_PTE * BYTES_PER_PTR;
X #endif
X 	memzero (empty_zero_page, PAGE_SIZE);
X 	start_mem = setup_pagetables (start_mem, end_mem);
@@ -137,6 +146,9 @@
X 	flush_tlb_all();
X 	update_memc_all();
X 
+	end_mem &= PAGE_MASK;
+	high_memory = (void *)end_mem;
+
X 	return free_area_init(start_mem, end_mem);
X }
X 
@@ -161,19 +173,18 @@
X 	/* mark usable pages in the mem_map[] */
X 	mark_usable_memory_areas(&start_mem, end_mem);
X 
+#define BETWEEN(w,min,max) ((w) >= (unsigned long)(min) && \
+			    (w) < (unsigned long)(max))
+
X 	for (tmp = PAGE_OFFSET; tmp < end_mem ; tmp += PAGE_SIZE) {
X 		if (PageReserved(mem_map+MAP_NR(tmp))) {
-			if (tmp >= KERNTOPHYS(_stext) &&
-			    tmp < KERNTOPHYS(_edata)) {
-				if (tmp < KERNTOPHYS(_etext))
-					codepages++;
-				else
-					datapages++;
-			} else if (tmp >= KERNTOPHYS(__init_begin)
-				   && tmp < KERNTOPHYS(__init_end))
+			if (BETWEEN(tmp, &__init_begin, &__init_end))
X 				initpages++;
-			else if (tmp >= KERNTOPHYS(__bss_start)
-				 && tmp < (unsigned long) start_mem)
+			else if (BETWEEN(tmp, &_stext, &_etext))
+				codepages++;
+			else if (BETWEEN(tmp, &_etext, &_edata))
+				datapages++;
+			else if (BETWEEN(tmp, &__bss_start, start_mem))
X 				datapages++;
X 			else
X 				reservedpages++;
@@ -181,13 +192,16 @@
X 		}
X 		atomic_set(&mem_map[MAP_NR(tmp)].count, 1);
X #ifdef CONFIG_BLK_DEV_INITRD
-		if (!initrd_start || (tmp < initrd_start || tmp >= initrd_end))
+		if (!initrd_start || !BETWEEN(tmp, initrd_start, initrd_end))
X #endif
X 			free_page(tmp);
X 	}
-	printk ("Memory: %luk/%luk available (%dk kernel code, %dk reserved, %dk data, %dk init)\n",
+
+#undef BETWEEN
+
+	printk ("Memory: %luk/%luM available (%dk code, %dk reserved, %dk data, %dk init)\n",
X 		 (unsigned long) nr_free_pages << (PAGE_SHIFT-10),
-		 max_mapnr << (PAGE_SHIFT-10),
+		 max_mapnr >> (20 - PAGE_SHIFT),
X 		 codepages << (PAGE_SHIFT-10),
X 		 reservedpages << (PAGE_SHIFT-10),
X 		 datapages << (PAGE_SHIFT-10),
@@ -203,17 +217,45 @@
X #endif
X }
X 
-void free_initmem (void)
+static void free_area(unsigned long addr, unsigned long end, char *s)
X {
-	unsigned long addr;
+	unsigned int size = (end - addr) >> 10;
X 
-	addr = (unsigned long)(&__init_begin);
-	for (; addr < (unsigned long)(&__init_end); addr += PAGE_SIZE) {
+	for (; addr < end; addr += PAGE_SIZE) {
X 		mem_map[MAP_NR(addr)].flags &= ~(1 << PG_reserved);
X 		atomic_set(&mem_map[MAP_NR(addr)].count, 1);
X 		free_page(addr);
X 	}
-	printk ("Freeing unused kernel memory: %dk freed\n", (&__init_end - &__init_begin) >> 10);
+
+	if (size)
+		printk(" %dk %s", size, s);
+}
+
+void free_initmem (void)
+{
+	printk("Freeing unused kernel memory:");
+
+	free_area((unsigned long)(&__init_begin),
+		  (unsigned long)(&__init_end),
+		  "init");
+
+#ifdef CONFIG_FOOTBRIDGE
+	{
+	extern int __netwinder_begin, __netwinder_end, __ebsa285_begin, __ebsa285_end;
+
+	if (!machine_is_netwinder())
+		free_area((unsigned long)(&__netwinder_begin),
+			  (unsigned long)(&__netwinder_end),
+			  "netwinder");
+
+	if (!machine_is_ebsa285() && !machine_is_cats())
+		free_area((unsigned long)(&__ebsa285_begin),
+			  (unsigned long)(&__ebsa285_end),
+			  "ebsa285/cats");
+	}
+#endif
+
+	printk("\n");
X }
X 
X void si_meminfo(struct sysinfo *val)
diff -u --recursive --new-file v2.2.7/linux/arch/arm/mm/ioremap.c linux/arch/arm/mm/ioremap.c
--- v2.2.7/linux/arch/arm/mm/ioremap.c	Wed Dec 31 16:00:00 1969
+++ linux/arch/arm/mm/ioremap.c	Sat May  8 11:06:56 1999
@@ -0,0 +1,149 @@
+/*
+ * arch/arm/mm/ioremap.c
+ *
+ * Re-map IO memory to kernel address space so that we can access it.
+ *
+ * (C) Copyright 1995 1996 Linus Torvalds
+ *
+ * Hacked for ARM by Phil Blundell <ph...@gnu.org>
+ * Hacked to allow all architectures to build, and various cleanups
+ * by Russell King
+ */
+
+/*
+ * This allows a driver to remap an arbitrary region of bus memory into
+ * virtual space.  One should *only* use readl, writel, memcpy_toio and
+ * so on with such remapped areas.
+ *
+ * Because the ARM only has a 32-bit address space we can't address the
+ * whole of the (physical) PCI space at once.  PCI huge-mode addressing
+ * allows us to circumvent this restriction by splitting PCI space into
+ * two 2GB chunks and mapping only one at a time into processor memory.
+ * We use MMU protection domains to trap any attempt to access the bank
+ * that is not currently mapped.  (This isn't fully implemented yet.)
+ *
+ * DC21285 currently has a bug in that the PCI address extension
+ * register affects the address of any writes waiting in the outbound
+ * FIFO.  Unfortunately, it is not possible to tell the DC21285 to
+ * flush this - flushing the area causes the bus to lock.
+ */
+
+#include <linux/vmalloc.h>
+#include <asm/io.h>
+
+static inline void remap_area_pte(pte_t * pte, unsigned long address, unsigned long size,
+	unsigned long phys_addr, pgprot_t pgprot)
+{
+	unsigned long end;
+
+	address &= ~PMD_MASK;
+	end = address + size;
+	if (end > PMD_SIZE)
+		end = PMD_SIZE;
+	do {
+		if (!pte_none(*pte))
+			printk("remap_area_pte: page already exists\n");
+		set_pte(pte, mk_pte_phys(phys_addr, pgprot));
+		address += PAGE_SIZE;
+		phys_addr += PAGE_SIZE;
+		pte++;
+	} while (address < end);
+}
+
+static inline int remap_area_pmd(pmd_t * pmd, unsigned long address, unsigned long size,
+	unsigned long phys_addr, unsigned long flags)
+{
+	unsigned long end;
+	pgprot_t pgprot;
+
+	address &= ~PGDIR_MASK;
+	end = address + size;
+
+	if (end > PGDIR_SIZE)
+		end = PGDIR_SIZE;
+
+	phys_addr -= address;
+	pgprot = __pgprot(L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY | L_PTE_WRITE | flags);
+	do {
+		pte_t * pte = pte_alloc_kernel(pmd, address);
+		if (!pte)
+			return -ENOMEM;
+		remap_area_pte(pte, address, end - address, address + phys_addr, pgprot);
+		address = (address + PMD_SIZE) & PMD_MASK;
+		pmd++;
+	} while (address < end);
+	return 0;
+}
+
+static int remap_area_pages(unsigned long address, unsigned long phys_addr,
+				 unsigned long size, unsigned long flags)
+{
+	pgd_t * dir;
+	unsigned long end = address + size;
+
+	phys_addr -= address;
+	dir = pgd_offset(&init_mm, address);
+	flush_cache_all();
+	while (address < end) {
+		pmd_t *pmd = pmd_alloc_kernel(dir, address);
+		if (!pmd)
+			return -ENOMEM;
+		if (remap_area_pmd(pmd, address, end - address,
+					 phys_addr + address, flags))
+			return -ENOMEM;
+		set_pgdir(address, *dir);
+		address = (address + PGDIR_SIZE) & PGDIR_MASK;
+		dir++;
+	}
+	flush_tlb_all();
+	return 0;
+}
+
+/*
+ * Remap an arbitrary physical address space into the kernel virtual
+ * address space. Needed when the kernel wants to access high addresses
+ * directly.
+ *
+ * NOTE! We need to allow non-page-aligned mappings too: we will obviously
+ * have to convert them into an offset in a page-aligned mapping, but the
+ * caller shouldn't need to know that small detail.
+ *
+ * 'flags' are the extra L_PTE_ flags that you want to specify for this
+ * mapping.  See include/asm-arm/proc-armv/pgtable.h for more information.
+ */
+void * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags)
+{
+	void * addr;
+	struct vm_struct * area;
+	unsigned long offset;
+
+	/*
+	 * Mappings have to be page-aligned
+	 */
+	offset = phys_addr & ~PAGE_MASK;
+	size = PAGE_ALIGN(size + offset);
+
+	/*
+	 * Don't allow mappings that wrap..
+	 */
+	if (!size || size > phys_addr + size)
+		return NULL;
+
+	/*
+	 * Ok, go for it..
+	 */
+	area = get_vm_area(size);
+	if (!area)
+		return NULL;
+	addr = area->addr;
+	if (remap_area_pages(VMALLOC_VMADDR(addr), phys_addr, size, flags)) {
+		vfree(addr);
+		return NULL;
+	}
+	return (void *) (offset + (char *)addr);
+}
+
+void iounmap(void *addr)
+{
+	return vfree((void *) (PAGE_MASK & (unsigned long) addr));
+}
diff -u --recursive --new-file v2.2.7/linux/arch/arm/mm/mm-arc.c linux/arch/arm/mm/mm-arc.c
--- v2.2.7/linux/arch/arm/mm/mm-arc.c	Tue Jul 21 00:15:30 1998
+++ linux/arch/arm/mm/mm-arc.c	Wed Dec 31 16:00:00 1969
@@ -1,82 +0,0 @@
-/*
- * arch/arm/mm/mm-arc.c
- *
- * Extra MM routines for the Archimedes architecture
- *
- * Copyright (C) 1998 Russell King
- */
-#include <linux/init.h>
-#include <asm/hardware.h>
-#include <asm/pgtable.h>
-
-unsigned long phys_screen_end;
-
-/*
- * This routine needs more work to make it dynamically release/allocate mem!
- */
-__initfunc(unsigned long map_screen_mem(unsigned long log_start, unsigned long kmem, int update))
-{
-	static int updated = 0;
-
-	if (updated)
-		return 0;
-
-	updated = update;
-
-	if (update) {
-		unsigned long address = log_start, offset;
-		pgd_t *pgdp;
-
-		kmem = (kmem + 3) & ~3;
-
-		pgdp = pgd_offset (&init_mm, address);				/* +31 */
-		offset = SCREEN_START;
-		while (address < SCREEN1_END) {
-			unsigned long addr_pmd, end_pmd;
-			pmd_t *pmdp;
-
-			/* if (pgd_none (*pgdp)) alloc pmd */
-			pmdp = pmd_offset (pgdp, address);			/* +0 */
-			addr_pmd = address & ~PGDIR_MASK;			/* 088000 */
-			end_pmd = addr_pmd + SCREEN1_END - address;		/* 100000 */
-			if (end_pmd > PGDIR_SIZE)
-				end_pmd = PGDIR_SIZE;
-
-			do {
-				unsigned long addr_pte, end_pte;
-				pte_t *ptep;
-
-				if (pmd_none (*pmdp)) {
-					pte_t *new_pte = (pte_t *)kmem;
-					kmem += PTRS_PER_PTE * BYTES_PER_PTR;
-					memzero (new_pte, PTRS_PER_PTE * BYTES_PER_PTR);
-					set_pmd (pmdp, mk_pmd(new_pte));
-				}
-
-				ptep = pte_offset (pmdp, addr_pmd);		/* +11 */
-				addr_pte = addr_pmd & ~PMD_MASK;		/* 088000 */
-				end_pte = addr_pte + end_pmd - addr_pmd;	/* 100000 */
-				if (end_pte > PMD_SIZE)
-					end_pte = PMD_SIZE;
-
-				do {
-					set_pte (ptep, mk_pte(offset, PAGE_KERNEL));
-					addr_pte += PAGE_SIZE;
-					offset += PAGE_SIZE;
-					ptep++;
-				} while (addr_pte < end_pte);
-
-				pmdp++;
-				addr_pmd = (addr_pmd + PMD_SIZE) & PMD_MASK;
-			} while (addr_pmd < end_pmd);
-
-			address = (address + PGDIR_SIZE) & PGDIR_MASK;
-			pgdp ++;
-		}
-
-		phys_screen_end = offset;
-		flush_tlb_all ();
-		update_memc_all ();
-	}
-	return kmem;
-}
diff -u --recursive --new-file v2.2.7/linux/arch/arm/mm/mm-armv.c linux/arch/arm/mm/mm-armv.c
--- v2.2.7/linux/arch/arm/mm/mm-armv.c	Wed Sep  9 14:51:05 1998
+++ linux/arch/arm/mm/mm-armv.c	Sat May  8 11:06:57 1999
@@ -37,7 +37,8 @@
X 		virtual = mp->virtual;
X 		physical = mp->physical;
X 		length = mp->length;
-		prot = (mp->prot_read ? PTE_AP_READ : 0) | (mp->prot_write ? PTE_AP_WRITE : 0);
+		prot = (mp->prot_read ? L_PTE_USER : 0) | (mp->prot_write ? L_PTE_WRITE : 0)
+			| L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY;
X 
X 		while ((virtual & 1048575 || physical & 1048575) && length >= PAGE_SIZE) {
X 			alloc_init_page(&start_mem, virtual, physical, mp->domain, prot);
@@ -56,7 +57,8 @@
X 			physical += 1048576;
X 		}
X 
-		prot = (mp->prot_read ? PTE_AP_READ : 0) | (mp->prot_write ? PTE_AP_WRITE : 0);
+		prot = (mp->prot_read ? L_PTE_USER : 0) | (mp->prot_write ? L_PTE_WRITE : 0)
+			| L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_DIRTY;
X 
X 		while (length >= PAGE_SIZE) {
X 			alloc_init_page(&start_mem, virtual, physical, mp->domain, prot);
diff -u --recursive --new-file v2.2.7/linux/arch/arm/mm/mm-ebsa285.c linux/arch/arm/mm/mm-ebsa285.c
--- v2.2.7/linux/arch/arm/mm/mm-ebsa285.c	Tue Dec 22 14:16:53 1998
+++ linux/arch/arm/mm/mm-ebsa285.c	Wed Dec 31 16:00:00 1969
@@ -1,39 +0,0 @@
-/*
- * arch/arm/mm/mm-ebsa285.c
- *
- * Extra MM routines for the EBSA285 architecture
- *
- * Copyright (C) 1998 Russell King, Dave Gilbert.
- */
-#include <linux/sched.h>
-#include <linux/mm.h>
-#include <linux/init.h>
- 
-#include <asm/pgtable.h>
-#include <asm/page.h>
-#include <asm/io.h>
-#include <asm/proc/mm-init.h>
-#include <asm/dec21285.h>
-
-/*
- * This is to allow us to fiddle with the EEPROM
- *  This entry will go away in time, once the fmu
- *  can mmap() the flash.
- *
- * These ones are so that we can fiddle
- *  with the various cards (eg VGA)
- *  until we're happy with them...
- */
-#define MAPPING \
-  { 0xd8000000, DC21285_FLASH,		      0x00400000, DOMAIN_USER, 1, 1 },	/* EEPROM */	    \
-  { 0xdc000000, 0x7c000000,		      0x00100000, DOMAIN_USER, 1, 1 },	/* VGA */	    \
-  { 0xe0000000, DC21285_PCI_MEM,	      0x18000000, DOMAIN_USER, 1, 1 },	/* VGA */	    \
-  { 0xf8000000, DC21285_PCI_TYPE_0_CONFIG,    0x01000000, DOMAIN_IO  , 0, 1 },	/* Type 0 Config */ \
-  { 0xf9000000, DC21285_PCI_TYPE_1_CONFIG,    0x01000000, DOMAIN_IO  , 0, 1 },	/* Type 1 Config */ \
-  { PCI_IACK,	DC21285_PCI_IACK,	      0x01000000, DOMAIN_IO  , 0, 1 },	/* PCI IACK	 */ \
-  { 0xfd000000, DC21285_OUTBOUND_WRITE_FLUSH, 0x01000000, DOMAIN_IO  , 0, 1 },	/* Out wrflsh	 */ \
-  { 0xfe000000, DC21285_ARMCSR_BASE,	      0x01000000, DOMAIN_IO  , 0, 1 },	/* CSR		 */ \
-  { 0xffe00000, DC21285_PCI_IO, 	      0x00100000, DOMAIN_IO  , 0, 1 },	/* PCI I/O	 */ \
-  { 0xfff00000, 0x40000000,		      0x00100000, DOMAIN_IO  , 0, 1 },	/* X-Bus	 */
-
-#include "mm-armv.c"
diff -u --recursive --new-file v2.2.7/linux/arch/arm/mm/mm-footbridge.c linux/arch/arm/mm/mm-footbridge.c
--- v2.2.7/linux/arch/arm/mm/mm-footbridge.c	Wed Dec 31 16:00:00 1969
+++ linux/arch/arm/mm/mm-footbridge.c	Sat May  8 11:06:57 1999
@@ -0,0 +1,91 @@
+/*
+ * arch/arm/mm/mm-ebsa285.c
+ *
+ * Extra MM routines for the EBSA285 architecture
+ *
+ * Copyright (C) 1998 Russell King, Dave Gilbert.
+ */
+#include <linux/config.h>
+#include <linux/sched.h>
+#include <linux/mm.h>
+#include <linux/init.h>
+ 
+#include <asm/pgtable.h>
+#include <asm/page.h>
+#include <asm/io.h>
+#include <asm/proc/mm-init.h>
+#include <asm/dec21285.h>
+
+/*
+ * The first entry allows us to fiddle with the EEPROM from user-space.
+ *  This entry will go away in time, once the fmu32 can mmap() the
+ *  flash.  It can't at the moment.
+ *
+ * If you want to fiddle with PCI VGA cards from user space, then
+ * change the '0, 1 }' for the PCI MEM and PCI IO to '1, 1 }'
+ * You can then access the PCI bus at 0xe0000000 and 0xffe00000.
+ */
+
+#ifdef CONFIG_HOST_FOOTBRIDGE
+
+/*
+ * The mapping when the footbridge is in host mode.
+ */
+#define MAPPING \
+ { FLASH_BASE,   DC21285_FLASH,			FLASH_SIZE,	DOMAIN_IO, 0, 1 }, \
+ { PCIMEM_BASE,  DC21285_PCI_MEM,		PCIMEM_SIZE,	DOMAIN_IO, 0, 1 }, \
+ { PCICFG0_BASE, DC21285_PCI_TYPE_0_CONFIG,	PCICFG0_SIZE,	DOMAIN_IO, 0, 1 }, \
+ { PCICFG1_BASE, DC21285_PCI_TYPE_1_CONFIG,	PCICFG1_SIZE,	DOMAIN_IO, 0, 1 }, \
+ { PCIIACK_BASE, DC21285_PCI_IACK,		PCIIACK_SIZE,	DOMAIN_IO, 0, 1 }, \
+ { WFLUSH_BASE,  DC21285_OUTBOUND_WRITE_FLUSH,	WFLUSH_SIZE,	DOMAIN_IO, 0, 1 }, \
+ { ARMCSR_BASE,  DC21285_ARMCSR_BASE,		ARMCSR_SIZE,	DOMAIN_IO, 0, 1 }, \
+ { PCIO_BASE,    DC21285_PCI_IO,		PCIO_SIZE,	DOMAIN_IO, 0, 1 }, \
+ { XBUS_BASE,    0x40000000,			XBUS_SIZE,	DOMAIN_IO, 0, 1 }
+
+#else
+
+/*
+ * These two functions convert virtual addresses to PCI addresses
+ * and PCI addresses to virtual addresses.  Note that it is only
+ * legal to use these on memory obtained via get_free_page or
+ * kmalloc.
+ */
+unsigned long __virt_to_bus(unsigned long res)
+{
+#ifdef CONFIG_DEBUG_ERRORS
+	if (res < PAGE_OFFSET || res >= (unsigned long)high_memory) {
+		printk("__virt_to_phys: invalid virtual address 0x%08lx\n", res);
+		__backtrace();
+	}
+#endif
+	return (res - PAGE_OFFSET) + (*CSR_PCISDRAMBASE & 0xfffffff0);
+}
+
+unsigned long __bus_to_virt(unsigned long res)
+{
+	res -= (*CSR_PCISDRAMBASE & 0xfffffff0);
+	res += PAGE_OFFSET;
+
+#ifdef CONFIG_DEBUG_ERRORS
+	if (res < PAGE_OFFSET || res >= (unsigned long)high_memory) {
+		printk("__phys_to_virt: invalid virtual address 0x%08lx\n", res);
+		__backtrace();
+	}
+#endif
+	return res;
+}
+
+/*
+ * The mapping when the footbridge is in add-in mode.
+ */
+#define MAPPING \
+ { PCIO_BASE,	 DC21285_PCI_IO,		PCIO_SIZE,	DOMAIN_IO, 0, 1 }, \
+ { XBUS_BASE,	 0x40000000,			XBUS_SIZE,	DOMAIN_IO, 0, 1 }, \
+ { ARMCSR_BASE,  DC21285_ARMCSR_BASE,		ARMCSR_SIZE,	DOMAIN_IO, 0, 1 }, \
+ { WFLUSH_BASE,	 DC21285_OUTBOUND_WRITE_FLUSH,	WFLUSH_SIZE,	DOMAIN_IO, 0, 1 }, \
+ { FLASH_BASE,	 DC21285_FLASH,			FLASH_SIZE,	DOMAIN_IO, 0, 1 }, \
+ { PCIMEM_BASE,	 DC21285_PCI_MEM,		PCIMEM_SIZE,	DOMAIN_IO, 0, 1 }
+
+#endif
+
+#include "mm-armv.c"
diff -u --recursive --new-file v2.2.7/linux/arch/arm/mm/mm-vnc.c linux/arch/arm/mm/mm-vnc.c
--- v2.2.7/linux/arch/arm/mm/mm-vnc.c	Tue Dec 22 14:16:53 1998
+++ linux/arch/arm/mm/mm-vnc.c	Wed Dec 31 16:00:00 1969
@@ -1,31 +0,0 @@
-/*
- * arch/arm/mm/mm-vnc.c
- *
- * Extra MM routines for the Corel VNC architecture
- *
- * Copyright (C) 1998 Russell King
- */
-#include <linux/sched.h>
-#include <linux/mm.h>
-#include <linux/init.h>
- 
-#include <asm/pgtable.h>
-#include <asm/page.h>
-#include <asm/io.h>
-#include <asm/proc/mm-init.h>
-#include <asm/dec21285.h>
-
-/* Table describing the MMU translation mapping
- * mainly used to set up the I/O mappings.
- */ 
-#define MAPPING \
-  { 0xd0000000, DC21285_FLASH,		      0x00800000, DOMAIN_IO  , 0, 1 },	/* Flash	 */ \
-  { 0xe0000000, DC21285_PCI_MEM,	      0x18000000, DOMAIN_IO  , 0, 1 },	/* PCI Mem 	 */ \
-  { 0xf8000000, DC21285_PCI_TYPE_0_CONFIG,    0x01000000, DOMAIN_IO  , 0, 1 },	/* Type 0 Config */ \
-  { 0xf9000000, DC21285_PCI_TYPE_1_CONFIG,    0x01000000, DOMAIN_IO  , 0, 1 },	/* Type 1 Config */ \
-  { PCI_IACK,	DC21285_PCI_IACK,	      0x01000000, DOMAIN_IO  , 0, 1 },	/* PCI IACK	 */ \
-  { 0xfd000000, DC21285_OUTBOUND_WRITE_FLUSH, 0x01000000, DOMAIN_IO  , 0, 1 },	/* Out wrflsh	 */ \
-  { 0xfe000000, DC21285_ARMCSR_BASE,	      0x01000000, DOMAIN_IO  , 0, 1 },	/* CSR		 */ \
-  { 0xffe00000, DC21285_PCI_IO, 	      0x00100000, DOMAIN_IO  , 0, 1 },	/* PCI I/O	 */ \
-
-#include "mm-armv.c"
diff -u --recursive --new-file v2.2.7/linux/arch/arm/mm/proc-arm2,3.S linux/arch/arm/mm/proc-arm2,3.S
--- v2.2.7/linux/arch/arm/mm/proc-arm2,3.S	Sun Jun  7 11:16:26 1998
+++ linux/arch/arm/mm/proc-arm2,3.S	Sat May  8 11:07:16 1999
@@ -193,7 +193,7 @@
X 		movs	pc, lr
X 
X _arm2_3_check_bugs:
-		movs	pc, lr
+		bics	pc, lr, #0x04000000		@ Clear FIQ disable bit
X 
X /*
X  * Processor specific - ARM2
@@ -206,6 +206,8 @@
X  * Params  : prev	Old task structure
X  *	   : next	New task structure for process to run
X  *
+ * Returns : prev
+ *
X  * Purpose : Perform a task switch, saving the old processes state, and restoring
X  *	     the new.
X  *
@@ -218,15 +220,15 @@
X 		str	sp, [r0, #TSS_SAVE]		@ Save sp_SVC
X 		ldr	sp, [r1, #TSS_SAVE]		@ Get saved sp_SVC
X 		mov	r4, r1
-		add	r0, r1, #TSS_MEMCMAP		@ Remap MEMC
+		add	r7, r1, #TSS_MEMCMAP		@ Remap MEMC
X 		ldr	r1, LC0
X 		ldr	r1, [r1]
-1:		ldmia	r0!, {r2, r3, r5, r6}
+1:		ldmia	r7!, {r2, r3, r5, r6}
X 		strb	r2, [r2]
X 		strb	r3, [r3]
X 		strb	r5, [r5]
X 		strb	r6, [r6]
-		ldmia	r0!, {r2, r3, r5, r6}
+		ldmia	r7!, {r2, r3, r5, r6}
X 		strb	r2, [r2]
X 		strb	r3, [r3]
X 		strb	r5, [r5]
@@ -318,6 +320,8 @@
X  * Params  : prev	Old task structure
X  *	   : next	New task structure for process to run
X  *
+ * Returns : prev
+ *
X  * Purpose : Perform a task switch, saving the old processes state, and restoring
X  *	     the new.
X  *
@@ -330,22 +334,22 @@
X 		str	sp, [r0, #TSS_SAVE]		@ Save sp_SVC
X 		ldr	sp, [r1, #TSS_SAVE]		@ Get saved sp_SVC
X 		mov	r4, r1
-		add	r0, r1, #TSS_MEMCMAP		@ Remap MEMC
+		add	r7, r1, #TSS_MEMCMAP		@ Remap MEMC
X 		ldr	r1, LC0
X 		ldr	r1, [r1]
-1:		ldmia	r0!, {r2, r3, r5, r6}
+1:		ldmia	r7!, {r2, r3, r5, r6}
X 		strb	r2, [r2]
X 		strb	r3, [r3]
X 		strb	r5, [r5]
X 		strb	r6, [r6]
-		ldmia	r0!, {r2, r3, r5, r6}
+		ldmia	r7!, {r2, r3, r5, r6}
X 		strb	r2, [r2]
X 		strb	r3, [r3]
X 		strb	r5, [r5]
X 		strb	r6, [r6]
X 		subs	r1, r1, #8
X 		bhi	1b
-		mcr	p15, 0, r0, c1, c0, 0		@ flush cache
+		mcr	p15, 0, r7, c1, c0, 0		@ flush cache
X 		ldmfd	sp!, {r4 - r9, fp, pc}^		@ Load all regs saved previously
X /*
X  * Function: arm3_remap_memc (struct task_struct *tsk)
diff -u --recursive --new-file v2.2.7/linux/arch/arm/mm/proc-arm6,7.S linux/arch/arm/mm/proc-arm6,7.S
--- v2.2.7/linux/arch/arm/mm/proc-arm6,7.S	Wed Sep  9 14:51:05 1998
+++ linux/arch/arm/mm/proc-arm6,7.S	Sat May  8 11:07:16 1999
@@ -52,13 +52,14 @@
X 		blt	1b
X 		mov	pc, lr
X 
-@LC0:		.word	_current
X /*
X  * Function: arm6_7_switch_to (struct task_struct *prev, struct task_struct *next)
X  *
X  * Params  : prev	Old task structure
X  *	   : next	New task structure for process to run
X  *
+ * Returns : prev
+ *
X  * Purpose : Perform a task switch, saving the old processes state, and restoring
X  *	     the new.
X  *
@@ -72,15 +73,15 @@
X 		stmfd	sp!, {ip}			@ Save cpsr_SVC
X 		str	sp, [r0, #TSS_SAVE]		@ Save sp_SVC
X 		ldr	sp, [r1, #TSS_SAVE]		@ Get saved sp_SVC
-		ldr	r0, [r1, #TSK_ADDR_LIMIT]
-		teq	r0, #0
-		moveq	r0, #DOM_KERNELDOMAIN
-		movne	r0, #DOM_USERDOMAIN
-		mcr	p15, 0, r0, c3, c0		@ Set domain reg
-		ldr	r0, [r1, #TSS_MEMMAP]		@ Page table pointer
+		ldr	r2, [r1, #TSK_ADDR_LIMIT]
+		teq	r2, #0
+		moveq	r2, #DOM_KERNELDOMAIN
+		movne	r2, #DOM_USERDOMAIN
+		mcr	p15, 0, r2, c3, c0		@ Set domain reg
+		ldr	r2, [r1, #TSS_MEMMAP]		@ Page table pointer
X 		mov	r1, #0
X 		mcr	p15, 0, r1, c7, c0, 0		@ flush cache
-		mcr	p15, 0, r0, c2, c0, 0		@ update page table ptr
+		mcr	p15, 0, r2, c2, c0, 0		@ update page table ptr
X 		mcr	p15, 0, r1, c5, c0, 0		@ flush TLBs
X 		ldmfd	sp!, {ip}
X 		msr	spsr, ip			@ Save tasks CPSR into SPSR for this return
@@ -369,6 +370,35 @@
X 		mov	pc, lr
X 
X /*
+ * Function: arm6_7_set_pte(pte_t *ptep, pte_t pte)
+ * Params  : r0 = Address to set
+ *	   : r1 = value to set
+ * Purpose : Set a PTE and flush it out of any WB cache
+ */
+		.align	5
+_arm6_7_set_pte:
+		str	r1, [r0], #-1024		@ linux version
+
+		bic	r2, r1, #0xff0
+		bic	r2, r2, #3
+		orr	r2, r2, #HPTE_TYPE_SMALL
+
+		tst	r1, #LPTE_USER | LPTE_EXEC
+		orrne	r2, r2, #HPTE_AP_READ
+
+		tst	r1, #LPTE_WRITE
+		tstne	r1, #LPTE_DIRTY
+		orrne	r2, r2, #HPTE_AP_WRITE
+
+		tst	r1, #LPTE_PRESENT
+		tstne	r1, #LPTE_YOUNG
+		moveq	r2, #0
+
+		str	r2, [r0]			@ hardware version
+		mcr	p15, 0, r0, c7, c10, 1		@ clean D entry	 (drain is done by TLB fns)
+		mov	pc, lr
+
+/*
X  * Function: _arm6_7_reset
X  *
X  * Notes   : This sets up everything for a reset
@@ -405,8 +435,12 @@
X 		.word	_arm6_7_flush_tlb_all		@ 44
X 		.word	_arm6_7_flush_tlb_area		@ 48
X 		.word	_arm6_set_pmd			@ 52
-		.word	_arm6_7_reset			@ 54
-		.word	_arm6_7_flush_cache		@ 58
+		.word	_arm6_7_set_pte			@ 56
+		.word	_arm6_7_reset			@ 60
+		.word	_arm6_7_flush_cache		@ 64
+
+		.word	_arm6_7_flush_cache		@ 68
+		.word	_arm6_7_flush_cache		@ 72
X 
X /*
X  * Purpose : Function pointers used to access above functions - all calls
@@ -431,8 +465,9 @@
SHAR_EOF
true || echo 'restore of patch-2.2.8 failed'
fi
echo 'End of  part 04'
echo 'File patch-2.2.8 is continued in part 05'
echo 05 > _shar_seq_.tmp