- pre1: (for ISDN synchronization _ONLY_! Not complete!)2.4.0-test12pre1
authorLinus Torvalds<torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:40:16 +0000 (23 15:40 -0500)
committerLinus Torvalds<torvalds@linuxfoundation.org>
Fri, 23 Nov 2007 20:40:16 +0000 (23 15:40 -0500)
 - Byron Stanoszek: correct decimal precision for CPU MHz in
   /proc/cpuinfo
 - Ollie Lho: SiS pirq routing.
 - Andries Brouwer: isofs cleanups
 - Matt Kraai: /proc read() on directories should return EISDIR, not EINVAL
 - Linus: be stricter about what we accept as a PCI bridge setup.
 - Linus: always set PCI interrupts to be level-triggered when we enable them.
 - Linus: updated PageDirty and swap cache handling
 - Peter Anvin: update A20 code to work without keyboard controller
 - Kai Germaschewski: ISDN updates
 - Russell King: ARM updates
 - Geert Uytterhoeven: m68k updates

233 files changed:
Documentation/Configure.help
Documentation/arm/README
Documentation/arm/SA1100/GraphicsClient[moved from Documentation/arm/SA1100/ThinClient with 74% similarity]
Documentation/arm/SA1100/Pangolin[new file with mode: 0644]
Documentation/arm/SA1100/serial_UART[new file with mode: 0644]
Documentation/isdn/INTERFACE.fax
Documentation/isdn/README.HiSax
Makefile
arch/arm/boot/Makefile
arch/arm/boot/compressed/Makefile
arch/arm/def-configs/a5k
arch/arm/def-configs/assabet
arch/arm/def-configs/brutus
arch/arm/def-configs/cerf
arch/arm/def-configs/ebsa110
arch/arm/def-configs/footbridge
arch/arm/def-configs/graphicsclient[copied from arch/arm/def-configs/assabet with 84% similarity]
arch/arm/def-configs/integrator[copied from arch/arm/def-configs/ebsa110 with 60% similarity]
arch/arm/def-configs/neponset[copied from arch/arm/def-configs/assabet with 90% similarity]
arch/arm/def-configs/pangolin[moved from arch/arm/def-configs/thinclient with 63% similarity]
arch/arm/def-configs/rpc
arch/arm/def-configs/sherman[new file with mode: 0644]
arch/arm/kernel/bios32.c
arch/arm/kernel/dec21285.c
arch/arm/kernel/dma-arc.c
arch/arm/kernel/entry-armv.S
arch/arm/kernel/fiq.c
arch/arm/kernel/head-armo.S
arch/arm/kernel/head-armv.S
arch/arm/kernel/oldlatches.c
arch/arm/kernel/traps.c
arch/arm/kernel/via82c505.c
arch/arm/lib/Makefile
arch/arm/lib/ecard.S[new file with mode: 0644]
arch/arm/lib/io-acorn.S
arch/arm/lib/io-ebsa110.S[deleted file]
arch/arm/lib/io-footbridge.S[deleted file]
arch/arm/lib/io-pcio.S[new file with mode: 0644]
arch/arm/lib/io-readsb.S[new file with mode: 0644]
arch/arm/lib/io-readsl.S[new file with mode: 0644]
arch/arm/lib/io-readsw-armv3.S[new file with mode: 0644]
arch/arm/lib/io-readsw-armv4.S[new file with mode: 0644]
arch/arm/lib/io-writesb.S[new file with mode: 0644]
arch/arm/lib/io-writesl.S[new file with mode: 0644]
arch/arm/lib/io-writesw-armv3.S[new file with mode: 0644]
arch/arm/lib/io-writesw-armv4.S[new file with mode: 0644]
arch/arm/mach-footbridge/netwinder-hw.c
arch/arm/mm/fault-common.c
arch/arm/mm/init.c
arch/arm/mm/mm-armv.c
arch/arm/mm/proc-arm720.S
arch/arm/nwfpe/double_cpdo.c
arch/arm/nwfpe/extended_cpdo.c
arch/arm/nwfpe/fpa11_cpdo.c
arch/arm/nwfpe/fpa11_cpdt.c
arch/arm/nwfpe/fpa11_cprt.c
arch/arm/nwfpe/fpmodule.c
arch/arm/nwfpe/softfloat.c
arch/arm/tools/mach-types
arch/arm/vmlinux-armo.lds.in
arch/arm/vmlinux-armv.lds.in
arch/i386/boot/setup.S
arch/i386/kernel/pci-irq.c
arch/i386/kernel/process.c
arch/i386/kernel/setup.c
arch/m68k/amiga/config.c
arch/m68k/fpsp040/bindec.S
arch/m68k/fpsp040/decbin.S
arch/m68k/fpsp040/do_func.S
arch/m68k/fpsp040/get_op.S
arch/m68k/fpsp040/util.S
arch/m68k/fpsp040/x_store.S
arch/m68k/ifpsp060/os.S
arch/m68k/kernel/entry.S
arch/m68k/kernel/ints.c
arch/m68k/kernel/m68k_ksyms.c
arch/m68k/kernel/sys_m68k.c
arch/m68k/kernel/traps.c
arch/m68k/lib/Makefile
arch/m68k/lib/muldi3.c[new file with mode: 0644]
arch/m68k/mm/fault.c
arch/m68k/mvme147/config.c
arch/m68k/q40/README
arch/m68k/q40/config.c
arch/m68k/q40/q40ints.c
arch/ppc/amiga/config.c
drivers/block/z2ram.c
drivers/char/Makefile
drivers/char/amigamouse.c
drivers/char/serial167.c
drivers/char/vme_scc.c
drivers/isdn/avmb1/Makefile
drivers/isdn/avmb1/avm_cs.c
drivers/isdn/avmb1/b1.c
drivers/isdn/avmb1/b1dma.c
drivers/isdn/avmb1/b1isa.c
drivers/isdn/avmb1/b1pci.c
drivers/isdn/avmb1/b1pcmcia.c
drivers/isdn/avmb1/c4.c
drivers/isdn/avmb1/capi.c
drivers/isdn/avmb1/capidev.h
drivers/isdn/avmb1/capidrv.c
drivers/isdn/avmb1/capifs.c
drivers/isdn/avmb1/capiutil.c
drivers/isdn/avmb1/kcapi.c
drivers/isdn/avmb1/t1isa.c
drivers/isdn/avmb1/t1pci.c
drivers/isdn/divert/divert_procfs.c
drivers/isdn/hisax/amd7930.c
drivers/isdn/hisax/arcofi.c
drivers/isdn/hisax/asuscom.c
drivers/isdn/hisax/avm_a1.c
drivers/isdn/hisax/avm_a1p.c
drivers/isdn/hisax/avm_pci.c
drivers/isdn/hisax/bkm_a4t.c
drivers/isdn/hisax/bkm_a8.c
drivers/isdn/hisax/bkm_ax.h
drivers/isdn/hisax/callc.c
drivers/isdn/hisax/config.c
drivers/isdn/hisax/diva.c
drivers/isdn/hisax/elsa.c
drivers/isdn/hisax/elsa_ser.c
drivers/isdn/hisax/fsm.c
drivers/isdn/hisax/gazel.c
drivers/isdn/hisax/hfc_2bds0.c
drivers/isdn/hisax/hfc_2bs0.c
drivers/isdn/hisax/hfc_pci.c
drivers/isdn/hisax/hfc_sx.c
drivers/isdn/hisax/hfcscard.c
drivers/isdn/hisax/hisax.h
drivers/isdn/hisax/hscx.c
drivers/isdn/hisax/hscx_irq.c
drivers/isdn/hisax/icc.c
drivers/isdn/hisax/isac.c
drivers/isdn/hisax/isar.c
drivers/isdn/hisax/isdnl1.c
drivers/isdn/hisax/isdnl2.c
drivers/isdn/hisax/isdnl3.c
drivers/isdn/hisax/isurf.c
drivers/isdn/hisax/ix1_micro.c
drivers/isdn/hisax/jade.c
drivers/isdn/hisax/jade_irq.c
drivers/isdn/hisax/l3_1tr6.c
drivers/isdn/hisax/l3dss1.c
drivers/isdn/hisax/l3ni1.c
drivers/isdn/hisax/l3ni1.h
drivers/isdn/hisax/mic.c
drivers/isdn/hisax/netjet.c
drivers/isdn/hisax/netjet.h
drivers/isdn/hisax/niccy.c
drivers/isdn/hisax/nj_s.c
drivers/isdn/hisax/nj_u.c
drivers/isdn/hisax/s0box.c
drivers/isdn/hisax/saphir.c
drivers/isdn/hisax/sedlbauer.c
drivers/isdn/hisax/sportster.c
drivers/isdn/hisax/tei.c
drivers/isdn/hisax/teleint.c
drivers/isdn/hisax/teles0.c
drivers/isdn/hisax/teles3.c
drivers/isdn/hisax/telespci.c
drivers/isdn/hisax/w6692.c
drivers/isdn/hysdn/boardergo.c
drivers/isdn/hysdn/hycapi.c
drivers/isdn/hysdn/hysdn_defs.h
drivers/isdn/hysdn/hysdn_proclog.c
drivers/isdn/hysdn/hysdn_sched.c
drivers/isdn/isdn_cards.c
drivers/isdn/isdn_common.c
drivers/isdn/isdn_common.h
drivers/isdn/isdn_ppp.c
drivers/isdn/isdn_tty.c
drivers/net/apne.c
drivers/parport/parport_amiga.c
drivers/parport/parport_atari.c
drivers/parport/parport_mfc3.c
drivers/pci/pci.c
drivers/scsi/aha1542.c
drivers/scsi/wd33c93.c
drivers/video/Makefile
drivers/video/macmodes.c
fs/isofs/dir.c
fs/isofs/inode.c
fs/isofs/namei.c
fs/isofs/rock.c
fs/proc/generic.c
fs/proc/root.c
include/asm-arm/arch-arc/memory.h
include/asm-arm/arch-arc/processor.h[deleted file]
include/asm-arm/arch-cl7500/memory.h
include/asm-arm/arch-cl7500/processor.h[deleted file]
include/asm-arm/arch-ebsa285/hardware.h
include/asm-arm/arch-ebsa285/memory.h
include/asm-arm/arch-ebsa285/processor.h[deleted file]
include/asm-arm/arch-l7200/hardware.h
include/asm-arm/arch-l7200/memory.h
include/asm-arm/arch-l7200/processor.h[deleted file]
include/asm-arm/arch-nexuspci/memory.h
include/asm-arm/arch-nexuspci/processor.h[deleted file]
include/asm-arm/arch-rpc/memory.h
include/asm-arm/arch-rpc/processor.h[deleted file]
include/asm-arm/arch-rpc/uncompress.h
include/asm-arm/arch-shark/memory.h
include/asm-arm/arch-shark/processor.h[deleted file]
include/asm-arm/arch-tbox/memory.h
include/asm-arm/arch-tbox/processor.h[deleted file]
include/asm-arm/bitops.h
include/asm-arm/hardware.h
include/asm-arm/pci.h
include/asm-arm/proc-armo/processor.h
include/asm-arm/proc-armv/processor.h
include/asm-arm/proc-armv/ptrace.h
include/asm-arm/proc-armv/system.h
include/asm-arm/processor.h
include/asm-arm/system.h
include/asm-m68k/mman.h
include/asm-m68k/parport.h[new file with mode: 0644]
include/asm-m68k/processor.h
include/asm-m68k/q40_master.h
include/asm-m68k/q40ints.h
include/asm-m68k/siginfo.h
include/asm-m68k/unistd.h
include/linux/highmem.h
include/linux/isdn.h
include/linux/isdnif.h
include/linux/iso_fs.h
include/video/fbcon.h
init/main.c
ipc/shm.c
kernel/module.c
mm/highmem.c
mm/swap_state.c
mm/vmscan.c

index ee2e3e8..4fd971b 100644 (file)
@@ -16263,12+16263,6 @@ CONFIG_SA1100_LART
   (also known as the LART).  See http://www.lart.tudelft.nl/ for
   information on the LART.
 
-Include support for ThinClient
-CONFIG_SA1100_THINCLIENT
-  Say Y here if you are using an Applied Data Systems Intel(R)
-  StrongARM(R) SA-1100 based Thin Client SBC.  See
-  http://www.flatpanels.com/ for information on this system.
-
 Include support for GraphicsClient
 CONFIG_SA1100_GRAPHICSCLIENT
   Say Y here if you are using an Applied Data Systems Intel(R)
@@ -16303,6+16297,27 @@ Support ARM920
 CONFIG_CPU_ARM920
   Say Y here if you wish to include support for the ARM920 processor.
 
+Support ARM610 processor
+CONFIG_CPU_ARM6
+  Say Y here if you wish to include support for the ARM610 processor.
+
+Support ARM710 processor
+CONFIG_CPU_ARM7
+  Say Y here if you wish to include support for the ARM710 processor.
+
+Support StrongARM(R) SA-110 processor
+CONFIG_CPU_SA110
+  Say Y here if you wish to include support for the Intel(R)
+  StrongARM(R) SA-110 processor.
+
+Support ARM720 processor
+CONFIG_CPU_ARM720
+  Say Y here if you wish to include support for the ARM720 processor.
+
+Support ARM920
+CONFIG_CPU_ARM920
+  Say Y here if you wish to include support for the ARM920 processor.
+
 Math emulation
 CONFIG_NWFPE
   Say Y to include the NWFPE floating point emulator in the kernel.
@@ -16426,6+16441,17 @@ 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.
 
+SA1100 serial port support
+CONFIG_SERIAL_SA1100
+  If you have a machine based on a SA1100/SA1110 StrongARM CPU you can
+  enable its onboard serial port by enabling this option.
+  Please read Documentation/arm/SA1100/serial_UART for further info.
+
+Console on SA1100 serial port
+CONFIG_SERIAL_SA1100_CONSOLE
+  If you have enabled the serial port on the SA1100/SA1110 StrongARM
+  CPU you can make it the console by answering Y to this option.
+
 L7200 serial port support
 CONFIG_SERIAL_L7200
   If you have a LinkUp Systems L7200 board you can enable its two
index 96bdfe3..8514dac 100644 (file)
@@ -157,7+157,8 @@ Kernel entry (head-armv.S)
   the mail a subject of 'Register new architecture':
 
     Name: <name of your architecture>
-    ARCHDIR: <name of include/asm-arm/arch-* directory>
+    ArchDir: <name of include/asm-arm/arch-* directory>
+    Type: <MACH_TYPE_* macro name>
     Description:
     <description of your architecture>
 
similarity index 74%
rename from Documentation/arm/SA1100/ThinClient
rename to Documentation/arm/SA1100/GraphicsClient
index d5d7625..01f3f05 100644 (file)
-Thin Client / Single Board Computer
-
-The Thin Client, a low cost high power single board computer, has been
-designed to provide intuitive graphical displays in embedded systems.
+ADS GraphicsClient/ThinClient Single Board Computer
 
 For more details, contact Applied Data Systems or see
 http://www.flatpanels.com/products.html
 
-Current Linux support for this product has been provided by Nicolas Pitre
-<nico@cam.org>.
+The original Linux support for this product has been provided by 
+Nicolas Pitre <nico@cam.org>.
 
 It's currently possible to mount a root filesystem via NFS providing a
 complete Linux environment.  Otherwise a ramdisk image may be used.  Use
-'make thinclient_config' before any 'make config'.  This will set up
-defaults for ThinClient support.
+'make graphicsclient_config' before any 'make config'.  This will set up
+defaults for GraphicsClient/ThinClient support.
 
 The kernel zImage is linked to be loaded and executed at 0xc0200000.  
 Also the following registers should have the specified values upon entry:
 
        r0 = 0
-       r1 = 24 (this is the ThinClient architecture number)
+       r1 = 29 (this is the GraphicsClient architecture number)
 
 Here is a tipical angel.opt option file if the kernel is loaded through
 the Angel Debug Monitor:
@@ -27,7+24,7 @@ the Angel Debug Monitor:
 base 0xc0200000
 entry 0xc0200000
 r0 0x00000000
-r1 0x00000018
+r1 0x0000001d
 device /dev/ttyS1
 options "9600 8N1"
 baud 115200
@@ -41,7+38,7 @@ uncommented) would be loaded with:
 
        angelboot -f angelboot.opt zImage
 
-Here it is assumed that the ThinClient is connected to ttyS1 on your PC
+Here it is assumed that the board is connected to ttyS1 on your PC
 and that minicom is preconfigured with /dev/ttyS1, 9600 baud, 8N1, no flow
 control by default.
 
@@ -54,13+51,13 @@ Supported peripherals:
 - on-board SMC 92C94 ethernet NIC
 - SA1100 serial port
 - flash memory access
+- pcmcia
 - possibly UCB1200 audio (not tested yet)
 
 To do:
 - touchscreen driver
 - 16bpp frame buffer support
 - extra (external) serial port driver
-- pcmcia
 - some console keyboard support (maybe IR?)
 - everything else!  :-)
 
diff --git a/Documentation/arm/SA1100/Pangolin b/Documentation/arm/SA1100/Pangolin
new file mode 100644 (file)
index 0000000..88cff5b
--- /dev/null
@@ -0,0 +1,25 @@
+Pangolin is a StrongARM 1110-based evaluation  platform produced
+by Dialogue Technoloy (http://www.dialogue.com.tw/).
+It has EISA slots for ease of configuration with SDRAM/Flash
+memory card, USB/Serial/Audio card, Compact Flash card,
+and TFT-LCD card.
+This platform is currently under development.
+
+To compile for Pangolin, you must issue the following commands:
+
+       make pangolin_config
+       make config
+       [accept all defaults]
+       make dep
+       make zImage
+
+Supported peripherals:
+- SA1110 serial port
+- flash memory access
+
+Testing:
+- pcmcia driver
+- sound driver
+
+To do:
+- MQ-200 driver
diff --git a/Documentation/arm/SA1100/serial_UART b/Documentation/arm/SA1100/serial_UART
new file mode 100644 (file)
index 0000000..3807dea
--- /dev/null
@@ -0,0 +1,65 @@
+The SA1100 serial port finally had its major/minor numbers officially 
+assigned:
+
+> Date: Sun, 24 Sep 2000 21:40:27 -0700
+> From: H. Peter Anvin <hpa@transmeta.com>
+> To: Nicolas Pitre <nico@CAM.ORG>
+> Cc: Device List Maintainer <device@lanana.org>
+> Subject: Re: device
+> 
+> Okay.  Note that device numbers 204 and 205 are used for "low density
+> serial devices", so you will have a range of minors on those majors (the
+> tty device layer handles this just fine, so you don't have to worry about
+> doing anything special.)
+> 
+> So your assignments are:
+> 
+> 204 char        Low-density serial ports
+>                   5 = /dev/ttySA0               SA1100 builtin serial port 0
+>                   6 = /dev/ttySA1               SA1100 builtin serial port 1
+>                   7 = /dev/ttySA2               SA1100 builtin serial port 2
+> 
+> 205 char        Low-density serial ports (alternate device)
+>                   5 = /dev/cusa0                Callout device for ttySA0
+>                   6 = /dev/cusa1                Callout device for ttySA1
+>                   7 = /dev/cusa2                Callout device for ttySA2
+>
+
+So, if you're not using devfs, you must create those inodes in /dev
+on the root filesystem used by your SA1100-based device:
+
+       mknod ttySA0 c 204 5
+       mknod ttySA1 c 204 6
+       mknod ttySA2 c 204 7
+       mknod cusa0 c 205 5
+       mknod cusa1 c 205 6
+       mknod cusa2 c 205 7
+
+Note that the old incorrect use of /dev/ttyS0 in order to use the serial port 
+won't work anymore.  This device node is reserved to the conventionnal 16x50
+UART which may appear on devices like PCMCIA modem, etc.
+
+In addition to the creation of the appropriate device nodes above, you must
+ensure your user space applications make use of the correct device name.
+The classic example is the content of the /etc/inittab where you might have 
+a getty process started on ttyS0.  In this case you have two choices:
+
+1- replace occurences of ttyS0 with ttySA0, ttyS1 with ttySA1, etc.
+
+2- in the occurence of 'ttyS0', you may consider replacing it with 'console'.
+   as in "T0:12345:respawn:/sbin/getty -L console 9600 vt100"
+
+(don't forget to add 'ttySA0', 'console', or the appropriate tty name 
+ in /etc/securetty for root to be allowed to login as well.)
+
+The use of /dev/console has the advantage of being independent of the real
+serial device used.  The kernel automatically forward all operations on
+/dev/console to the apropriate serial device.  The nature of the console may
+also be modified with a kernel command line parameter (see
+Documentation/serial-console.txt for the details).  Of course, 
+/dev/console must have been created as a char device with major 5 minor 1.
+
+Using /dev/console is also compatible with older kernels that used /dev/ttyS0.
+Therefore it is handy for ramdisk images which are targetted for different
+StrongARM platforms and older kernels.
+
index 4c164b8..7e57313 100644 (file)
@@ -1,4+1,4 @@
-$Id: INTERFACE.fax,v 1.1 1999/08/11 20:30:28 armin Exp $
+$Id: INTERFACE.fax,v 1.2 2000/08/06 09:22:50 armin Exp $
 
 
 Description of the fax-subinterface between linklevel and hardwarelevel of 
index 2dddf96..3e0d6f5 100644 (file)
@@ -54,6+54,7 @@ Sedlbauer ISDN-Controller PC/104
 USR Sportster internal TA (compatible Stollmann tina-pp V3)
 ith Kommunikationstechnik GmbH MIC 16 ISA card
 Traverse Technologie NETjet PCI S0 card and NETspider U card
+Ovislink ISDN sc100-p card (NETjet driver)
 Dr. Neuhaus Niccy PnP/PCI
 Siemens I-Surf 1.0
 Siemens I-Surf 2.0 (with IPAC, try type 12 asuscom) 
@@ -191,8+192,9 @@ Card types:
    34  Gazel ISDN cards (PCI)   none
    35  HFC 2BDS0 PCI            none
    36  W6692 based PCI cards    none
-   37  HFC 2BDS0 S+, SP/PCMCIA  irq,io (pcmcia must be set with cardmgr)
+   37  HFC 2BDS0 S+, SP         irq,io
    38  NETspider U PCI card     none
+   39  HFC 2BDS0 SP/PCMCIA      irq,io (set with cardmgr)
 
 At the moment IRQ sharing is only possible with PCI cards. Please make sure
 that your IRQ is free and enabled for ISA use.
index e87bfc0..de12c26 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,7+1,7 @@
 VERSION = 2
 PATCHLEVEL = 4
 SUBLEVEL = 0
-EXTRAVERSION = -test11
+EXTRAVERSION = -test12
 
 KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
 
index 6fbdb5e..f74033b 100644 (file)
@@ -35,16+35,21 @@ INITRD_PHYS  = 0x00800000
 INITRD_VIRT     = 0xc0800000
 endif
 
+ifeq ($(CONFIG_ARCH_SHARK),y)
+ZTEXTADDR       = 0x08508000
+ZRELADDR        = 0x08008000
+endif
+
 ifeq ($(CONFIG_FOOTBRIDGE),y)
 ZTEXTADDR       = 0x00008000
-PARAMS          = 0x00000100
+PARAMS_PHYS     = 0x00000100
 INITRD_PHYS     = 0x00800000
 INITRD_VIRT     = 0xc0800000
 endif
 
 ifeq ($(CONFIG_ARCH_INTEGRATOR),y)
 ZTEXTADDR       = 0x00008000
-PARAMS          = 0x00000100
+PARAMS_PHYS     = 0x00000100
 INITRD_PHYS     = 0x00800000
 INITRD_VIRT     = 0xc0800000
 endif
@@ -65,6+70,14 @@ ZRELADDR      = 0xf0008000
 ZBSSADDR        = 0xf03e0000
 endif
 
+ifeq ($(CONFIG_ARCH_P720T),y)
+ZTEXTADDR       = 0xc0018000
+ZRELADDR        = 0xc0018000
+PARAMS_PHYS     = 0xc0000100
+INITRD_PHYS     = 0xc0400000
+INITRD_VIRT     = 0xc0400000
+endif
+
 ifeq ($(CONFIG_ARCH_SA1100),y)
 ZTEXTADDR       = 0xc0008000
 ZRELADDR        = 0xc0008000
@@ -72,8+85,9 @@ ifeq ($(CONFIG_SA1100_VICTOR),y)
   ZTEXTADDR     = 0x00002000
   ZBSSADDR      = 0xc0100000
 endif
-ifeq ($(CONFIG_SA1100_THINCLIENT),y)
-  ZTEXTADDR     = 0xC0200000
+ifeq ($(CONFIG_SA1100_SHERMAN),y)
+  ZTEXTADDR      = 0x00050000   
+  ZBSSADDR       = 0xc0100000
 endif
 ifeq ($(CONFIG_SA1100_GRAPHICSCLIENT),y)
   ZTEXTADDR     = 0xC0200000
index 46b754e..bf8f1c9 100644 (file)
@@ -18,6+18,7 @@ ZLDFLAGS       = -p -X -T vmlinux.lds
 #
 ifeq ($(CONFIG_ARCH_ACORN),y)
 OBJS           += ll_char_wr.o font.o
+ZLDFLAGS       += -defsym params=$(PARAMS_PHYS)
 endif
 
 ifeq ($(CONFIG_ARCH_NETWINDER),y)
@@ -36,6+37,11 @@ ifeq ($(CONFIG_ARCH_L7200),y)
 OBJS           += head-l7200.o
 endif
 
+ifeq ($(CONFIG_ARCH_P720T),y)
+# Borrow this code from SA1100
+OBJS           += head-sa1100.o
+endif
+
 ifeq ($(CONFIG_ARCH_SA1100),y)
 OBJS           += head-sa1100.o setup-sa1100.o
 ifeq ($(CONFIG_SA1100_NANOENGINE),y)
index 11a1dfd..c8ede2f 100644 (file)
 # Automatically generated make config: don't edit
 #
 CONFIG_ARM=y
+# CONFIG_SBUS is not set
+CONFIG_UID16=y
 
 #
 # Code maturity level options
 #
 CONFIG_EXPERIMENTAL=y
+CONFIG_OBSOLETE=y
 
 #
-# System and processor type
+# Loadable module support
+#
+CONFIG_MODULES=y
+# CONFIG_MODVERSIONS is not set
+CONFIG_KMOD=y
+
+#
+# System Type
+#
+CONFIG_ARCH_ARCA5K=y
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+
+#
+# Archimedes/A5000 Implementations
+#
+
+#
+# Archimedes/A5000 Implementations (select only ONE)
 #
 # CONFIG_ARCH_ARC is not set
 CONFIG_ARCH_A5K=y
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_FOOTBRIDGE is not set
+
+#
+# Footbridge Implementations
+#
+
+#
+# SA11x0 Implementations
+#
 CONFIG_ARCH_ACORN=y
+# CONFIG_FOOTBRIDGE is not set
+# CONFIG_FOOTBRIDGE_HOST is not set
+# CONFIG_FOOTBRIDGE_ADDIN is not set
 # CONFIG_CPU_32 is not set
 CONFIG_CPU_26=y
 # CONFIG_PAGESIZE_16 is not set
-# CONFIG_ISA_DMA is not set
 
 #
-# Loadable module support
+# Processor Type
 #
-CONFIG_MODULES=y
-# CONFIG_MODVERSIONS is not set
-CONFIG_KMOD=y
+# CONFIG_DISCONTIGMEM is not set
 
 #
 # General setup
 #
+# CONFIG_PCI is not set
+# CONFIG_ISA is not set
+# CONFIG_ISA_DMA is not set
+# CONFIG_HOTPLUG is not set
+# CONFIG_PCMCIA is not set
 CONFIG_NET=y
 CONFIG_SYSVIPC=y
 # CONFIG_BSD_PROCESS_ACCT is not set
@@ -42,9+78,15 @@ CONFIG_KCORE_ELF=y
 CONFIG_BINFMT_AOUT=y
 # CONFIG_BINFMT_ELF is not set
 # CONFIG_BINFMT_MISC is not set
+# CONFIG_PM is not set
+
+#
+# Parallel port support
+#
 CONFIG_PARPORT=m
 CONFIG_PARPORT_PC=m
 # CONFIG_PARPORT_PC_FIFO is not set
+CONFIG_PARPORT_PC_SUPERIO=y
 # CONFIG_PARPORT_ARC is not set
 # CONFIG_PARPORT_AMIGA is not set
 # CONFIG_PARPORT_MFC3 is not set
@@ -54,14+96,9 @@ CONFIG_PARPORT_PC=m
 # CONFIG_PARPORT_1284 is not set
 
 #
-# I2O device support
+# Memory Technology Devices (MTD)
 #
-# CONFIG_I2O is not set
-# CONFIG_I2O_PCI is not set
-# CONFIG_I2O_BLOCK is not set
-# CONFIG_I2O_LAN is not set
-# CONFIG_I2O_SCSI is not set
-# CONFIG_I2O_PROC is not set
+# CONFIG_MTD is not set
 
 #
 # Plug and Play configuration
@@ -73,37+110,16 @@ CONFIG_PARPORT_PC=m
 # Block devices
 #
 CONFIG_BLK_DEV_FD=y
-CONFIG_BLK_DEV_IDE=y
-
-#
-# Please see Documentation/ide.txt for help/info on IDE drives
-#
-# CONFIG_BLK_DEV_HD_IDE is not set
-CONFIG_BLK_DEV_IDEDISK=y
-# CONFIG_IDEDISK_MULTI_MODE is not set
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-
-#
-# IDE chipset support/bugfixes
-#
-# CONFIG_BLK_DEV_CMD640 is not set
-CONFIG_BLK_DEV_IDE_ICSIDE=y
-# CONFIG_BLK_DEV_IDEDMA_ICS is not set
-# CONFIG_BLK_DEV_IDE_RAPIDE is not set
-# CONFIG_IDE_CHIPSETS is not set
+# CONFIG_BLK_DEV_XD is not set
+# CONFIG_PARIDE is not set
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
 CONFIG_BLK_DEV_LOOP=m
 # CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_MD is not set
 CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_SIZE=4096
 CONFIG_BLK_DEV_INITRD=y
-# CONFIG_BLK_DEV_XD is not set
-CONFIG_PARIDE_PARPORT=m
-# CONFIG_PARIDE is not set
-# CONFIG_BLK_DEV_IDE_MODES is not set
-# CONFIG_BLK_DEV_HD is not set
 
 #
 # Acorn-specific block devices
@@ -113,100+129,6 @@ CONFIG_BLK_DEV_MFM=m
 CONFIG_BLK_DEV_MFM_AUTODETECT=y
 
 #
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_SERIAL=y
-CONFIG_SERIAL_CONSOLE=y
-# CONFIG_ATOMWIDE_SERIAL is not set
-# CONFIG_DUALSP_SERIAL is not set
-# CONFIG_SERIAL_EXTENDED is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-# CONFIG_UNIX98_PTYS is not set
-# CONFIG_PRINTER is not set
-# CONFIG_PPDEV is not set
-
-#
-# Mice
-#
-# CONFIG_BUSMOUSE is not set
-CONFIG_MOUSE=y
-# CONFIG_PSMOUSE is not set
-# CONFIG_82C710_MOUSE is not set
-# CONFIG_PC110_PAD is not set
-
-#
-# Joysticks
-#
-# CONFIG_JOYSTICK is not set
-# CONFIG_QIC02_TAPE is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_RTC is not set
-
-#
-# Video For Linux
-#
-# CONFIG_VIDEO_DEV is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-# CONFIG_FTAPE is not set
-# CONFIG_DRM is not set
-# CONFIG_DRM_TDFX is not set
-
-#
-# PCMCIA character device support
-#
-# CONFIG_PCMCIA_SERIAL_CS is not set
-# CONFIG_AGP is not set
-
-#
-# Support for USB
-#
-# CONFIG_USB is not set
-
-#
-# Console drivers
-#
-CONFIG_FB=y
-
-#
-# Frame-buffer support
-#
-CONFIG_FB=y
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FB_ACORN=y
-# CONFIG_FB_MATROX is not set
-# CONFIG_FB_ATY is not set
-# CONFIG_FB_ATY128 is not set
-# CONFIG_FB_3DFX is not set
-# CONFIG_FB_VIRTUAL is not set
-# CONFIG_FBCON_ADVANCED is not set
-CONFIG_FBCON_MFB=y
-CONFIG_FBCON_CFB2=y
-CONFIG_FBCON_CFB4=y
-CONFIG_FBCON_CFB8=y
-# CONFIG_FBCON_FONTWIDTH8_ONLY is not set
-CONFIG_FBCON_FONTS=y
-# CONFIG_FONT_8x8 is not set
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-CONFIG_FONT_ACORN_8x8=y
-
-#
 # Networking options
 #
 # CONFIG_PACKET is not set
@@ -218,16+140,10 @@ CONFIG_INET=y
 # CONFIG_IP_MULTICAST is not set
 # CONFIG_IP_ADVANCED_ROUTER is not set
 # CONFIG_IP_PNP is not set
-# CONFIG_IP_ROUTER is not set
 # CONFIG_NET_IPIP is not set
 # CONFIG_NET_IPGRE is not set
-# CONFIG_IP_ALIAS is not set
+# CONFIG_INET_ECN is not set
 # CONFIG_SYN_COOKIES is not set
-
-#
-# (it is safe to leave these untouched)
-#
-# CONFIG_SKB_LARGE is not set
 # CONFIG_IPV6 is not set
 # CONFIG_KHTTPD is not set
 # CONFIG_ATM is not set
@@ -238,9+154,9 @@ CONFIG_INET=y
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
 # CONFIG_DECNET is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_X25 is not set
 # CONFIG_LAPB is not set
-# CONFIG_BRIDGE is not set
 # CONFIG_LLC is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
@@ -253,16+169,6 @@ CONFIG_INET=y
 # CONFIG_NET_SCHED is not set
 
 #
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-# CONFIG_IRDA is not set
-
-#
 # Network device support
 #
 CONFIG_NETDEVICES=y
@@ -272,7+178,9 @@ CONFIG_NETDEVICES=y
 #
 # CONFIG_ARCNET is not set
 # CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
 # CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
 # CONFIG_NET_SB1000 is not set
 
 #
@@ -286,19+194,18 @@ CONFIG_ARM_ETHER3=y
 # CONFIG_LANCE is not set
 # CONFIG_NET_VENDOR_SMC is not set
 # CONFIG_NET_VENDOR_RACAL is not set
-# CONFIG_RTL8139 is not set
-# CONFIG_DM9102 is not set
 # CONFIG_AT1700 is not set
 # CONFIG_DEPCA is not set
 # CONFIG_NET_ISA is not set
-# CONFIG_NET_EISA is not set
+# CONFIG_NET_PCI is not set
 # CONFIG_NET_POCKET is not set
 
 #
 # Ethernet (1000 Mbit)
 #
-# CONFIG_YELLOWFIN is not set
 # CONFIG_ACENIC is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
 # CONFIG_SK98LIN is not set
 # CONFIG_FDDI is not set
 # CONFIG_HIPPI is not set
@@ -312,7+219,7 @@ CONFIG_ARM_ETHER3=y
 # CONFIG_NET_RADIO is not set
 
 #
-# Token Ring driver support
+# Token Ring devices
 #
 # CONFIG_TR is not set
 # CONFIG_NET_FC is not set
@@ -325,9+232,62 @@ CONFIG_ARM_ETHER3=y
 # CONFIG_WAN is not set
 
 #
-# PCMCIA network device support
+# Amateur Radio support
+#
+# CONFIG_HAMRADIO is not set
+
+#
+# IrDA (infrared) support
+#
+# CONFIG_IRDA is not set
+
+#
+# ATA/IDE/MFM/RLL support
+#
+CONFIG_IDE=y
+
+#
+# IDE, ATA and ATAPI Block devices
+#
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_HD_IDE is not set
+# CONFIG_BLK_DEV_HD is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set
+# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set
+# CONFIG_BLK_DEV_IDEDISK_IBM is not set
+# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set
+# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set
+# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set
+# CONFIG_BLK_DEV_IDEDISK_WD is not set
+# CONFIG_BLK_DEV_COMMERIAL is not set
+# CONFIG_BLK_DEV_TIVO is not set
+# CONFIG_BLK_DEV_IDECS is not set
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+
+#
+# IDE chipset support/bugfixes
 #
-# CONFIG_NET_PCMCIA is not set
+# CONFIG_BLK_DEV_CMD640 is not set
+# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
+# CONFIG_BLK_DEV_ISAPNP is not set
+CONFIG_BLK_DEV_IDE_ICSIDE=y
+# CONFIG_BLK_DEV_IDEDMA_ICS is not set
+# CONFIG_IDEDMA_ICS_AUTO is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+# CONFIG_BLK_DEV_IDE_RAPIDE is not set
+# CONFIG_IDE_CHIPSETS is not set
+# CONFIG_IDEDMA_AUTO is not set
+# CONFIG_DMA_NONPCI is not set
+# CONFIG_BLK_DEV_IDE_MODES is not set
 
 #
 # SCSI support
@@ -335,16+295,90 @@ CONFIG_ARM_ETHER3=y
 # CONFIG_SCSI is not set
 
 #
-# Sound
+# I2O device support
 #
-# CONFIG_SOUND is not set
+# CONFIG_I2O is not set
+# CONFIG_I2O_BLOCK is not set
+# CONFIG_I2O_LAN is not set
+# CONFIG_I2O_SCSI is not set
+# CONFIG_I2O_PROC is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_SERIAL=y
+CONFIG_SERIAL_CONSOLE=y
+# CONFIG_ATOMWIDE_SERIAL is not set
+# CONFIG_DUALSP_SERIAL is not set
+# CONFIG_SERIAL_EXTENDED is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+# CONFIG_UNIX98_PTYS is not set
+# CONFIG_PRINTER is not set
+# CONFIG_PPDEV is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+CONFIG_I2C_ALGOBIT=y
+# CONFIG_I2C_PHILIPSPAR is not set
+# CONFIG_I2C_ELV is not set
+# CONFIG_I2C_VELLEMAN is not set
+# CONFIG_I2C_ALGOPCF is not set
+CONFIG_I2C_CHARDEV=y
+
+#
+# Mice
+#
+# CONFIG_BUSMOUSE is not set
+CONFIG_MOUSE=y
+# CONFIG_PSMOUSE is not set
+# CONFIG_82C710_MOUSE is not set
+# CONFIG_PC110_PAD is not set
+
+#
+# Joysticks
+#
+# CONFIG_JOYSTICK is not set
+
+#
+# Input core support is needed for joysticks
+#
+# CONFIG_QIC02_TAPE is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_INTEL_RNG is not set
+# CONFIG_NVRAM is not set
+# CONFIG_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_FTAPE is not set
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
 
 #
-# Filesystems
+# File systems
 #
 # CONFIG_QUOTA is not set
 # CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=y
 CONFIG_ADFS_FS=y
+# CONFIG_ADFS_FS_RW is not set
 # CONFIG_AFFS_FS is not set
 # CONFIG_HFS_FS is not set
 # CONFIG_BFS_FS is not set
@@ -353,37+387,60 @@ CONFIG_MSDOS_FS=m
 # CONFIG_UMSDOS_FS is not set
 # CONFIG_VFAT_FS is not set
 # CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_RAMFS is not set
 # CONFIG_ISO9660_FS is not set
 # CONFIG_JOLIET is not set
 # CONFIG_MINIX_FS is not set
 # CONFIG_NTFS_FS is not set
+# CONFIG_NTFS_RW is not set
 # CONFIG_HPFS_FS is not set
 CONFIG_PROC_FS=y
+# CONFIG_DEVFS_FS is not set
+# CONFIG_DEVFS_MOUNT is not set
+# CONFIG_DEVFS_DEBUG is not set
+# CONFIG_DEVPTS_FS is not set
 # CONFIG_QNX4FS_FS is not set
+# CONFIG_QNX4FS_RW is not set
 # CONFIG_ROMFS_FS is not set
 CONFIG_EXT2_FS=y
 # CONFIG_SYSV_FS is not set
+# CONFIG_SYSV_FS_WRITE is not set
 # CONFIG_UDF_FS is not set
+# CONFIG_UDF_RW is not set
 # CONFIG_UFS_FS is not set
+# CONFIG_UFS_FS_WRITE is not set
 
 #
 # Network File Systems
 #
 # CONFIG_CODA_FS is not set
 CONFIG_NFS_FS=y
+# CONFIG_NFS_V3 is not set
+# CONFIG_ROOT_NFS is not set
 # CONFIG_NFSD is not set
+# CONFIG_NFSD_V3 is not set
 CONFIG_SUNRPC=y
 CONFIG_LOCKD=y
 # CONFIG_SMB_FS is not set
 # CONFIG_NCP_FS is not set
+# CONFIG_NCPFS_PACKET_SIGNING is not set
+# CONFIG_NCPFS_IOCTL_LOCKING is not set
+# CONFIG_NCPFS_STRONG is not set
+# CONFIG_NCPFS_NFS_NS is not set
+# CONFIG_NCPFS_OS2_NS is not set
+# CONFIG_NCPFS_SMALLDOS is not set
+# CONFIG_NCPFS_MOUNT_SUBDIR is not set
+# CONFIG_NCPFS_NDS_DOMAINS is not set
+# CONFIG_NCPFS_NLS is not set
+# CONFIG_NCPFS_EXTRAS is not set
 
 #
 # Partition Types
 #
 # CONFIG_PARTITION_ADVANCED is not set
 CONFIG_MSDOS_PARTITION=y
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
 CONFIG_ACORN_PARTITION=y
 CONFIG_ACORN_PARTITION_ADFS=y
 CONFIG_ACORN_PARTITION_ICS=y
@@ -394,6+451,7 @@ CONFIG_NLS=y
 #
 # Native Language Support
 #
+CONFIG_NLS_DEFAULT="iso8859-1"
 # CONFIG_NLS_CODEPAGE_437 is not set
 # CONFIG_NLS_CODEPAGE_737 is not set
 # CONFIG_NLS_CODEPAGE_775 is not set
@@ -410,6+468,10 @@ CONFIG_NLS=y
 # CONFIG_NLS_CODEPAGE_866 is not set
 # CONFIG_NLS_CODEPAGE_869 is not set
 # CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
 # CONFIG_NLS_ISO8859_1 is not set
 # CONFIG_NLS_ISO8859_2 is not set
 # CONFIG_NLS_ISO8859_3 is not set
@@ -422,6+484,45 @@ CONFIG_NLS=y
 # CONFIG_NLS_ISO8859_14 is not set
 # CONFIG_NLS_ISO8859_15 is not set
 # CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_UTF8 is not set
+
+#
+# Console drivers
+#
+CONFIG_FB=y
+
+#
+# Frame-buffer support
+#
+CONFIG_FB=y
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FB_ACORN=y
+# CONFIG_FB_CYBER2000 is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FBCON_ADVANCED is not set
+CONFIG_FBCON_MFB=y
+CONFIG_FBCON_CFB2=y
+CONFIG_FBCON_CFB4=y
+CONFIG_FBCON_CFB8=y
+# CONFIG_FBCON_FONTWIDTH8_ONLY is not set
+CONFIG_FBCON_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+CONFIG_FONT_ACORN_8x8=y
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# USB support
+#
+# CONFIG_USB is not set
 
 #
 # Kernel hacking
index 7a4cd17..8cf335a 100644 (file)
@@ -12,57+12,75 @@ CONFIG_EXPERIMENTAL=y
 # CONFIG_OBSOLETE is not set
 
 #
+# Loadable module support
+#
+CONFIG_MODULES=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_KMOD is not set
+
+#
 # System Type
 #
-# CONFIG_ARCH_ARC is not set
-# CONFIG_ARCH_A5K is not set
+# CONFIG_ARCH_ARCA5K is not set
+# CONFIG_ARCH_CLPS7500 is not set
 # CONFIG_ARCH_CO285 is not set
 # CONFIG_ARCH_EBSA110 is not set
 # CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_INTEGRATOR is not set
 # CONFIG_ARCH_RPC is not set
 CONFIG_ARCH_SA1100=y
 
 #
+# Archimedes/A5000 Implementations
+#
+
+#
+# Footbridge Implementations
+#
+
+#
 # SA11x0 Implementations
 #
 CONFIG_SA1100_ASSABET=y
 # CONFIG_ASSABET_NEPONSET is not set
 # CONFIG_SA1100_BRUTUS is not set
+# CONFIG_SA1100_CERF is not set
 # CONFIG_SA1100_BITSY is not set
 # CONFIG_SA1100_LART is not set
-# CONFIG_SA1100_THINCLIENT is not set
 # CONFIG_SA1100_GRAPHICSCLIENT is not set
+# CONFIG_SA1100_NANOENGINE is not set
 # CONFIG_SA1100_VICTOR is not set
+# CONFIG_SA1100_SHERMAN is not set
+# CONFIG_SA1100_XP860 is not set
+# CONFIG_SA1100_PANGOLIN is not set
 CONFIG_ANGELBOOT=y
-# CONFIG_SA1100_FREQUENCY_SCALE is not set
+CONFIG_SA1100_FREQUENCY_SCALE=y
 # CONFIG_SA1100_VOLTAGE_SCALE is not set
-CONFIG_CPU_32=y
-# CONFIG_CPU_26 is not set
-CONFIG_CPU_32v4=y
-CONFIG_CPU_SA1100=y
 # CONFIG_ARCH_ACORN is not set
 # CONFIG_FOOTBRIDGE is not set
 # CONFIG_FOOTBRIDGE_HOST is not set
 # CONFIG_FOOTBRIDGE_ADDIN is not set
-CONFIG_DISCONTIGMEM=y
-# CONFIG_PCI is not set
-# CONFIG_ISA is not set
-# CONFIG_ISA_DMA is not set
+CONFIG_CPU_32=y
+# CONFIG_CPU_26 is not set
 
 #
-# Loadable module support
+# Processor Type
 #
-CONFIG_MODULES=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_KMOD is not set
+CONFIG_CPU_32v4=y
+CONFIG_CPU_SA1100=y
+CONFIG_DISCONTIGMEM=y
 
 #
 # General setup
 #
+# CONFIG_PCI is not set
+# CONFIG_ISA is not set
+# CONFIG_ISA_DMA is not set
+CONFIG_PC_KEYMAP=y
 CONFIG_HOTPLUG=y
 
 #
-# PC Card support
+# PCMCIA/CardBus support
 #
 CONFIG_PCMCIA=y
 # CONFIG_PCMCIA_DEBUG is not set
@@ -135,16+153,10 @@ CONFIG_INET=y
 # CONFIG_IP_MULTICAST is not set
 # CONFIG_IP_ADVANCED_ROUTER is not set
 # CONFIG_IP_PNP is not set
-# CONFIG_IP_ROUTER is not set
 # CONFIG_NET_IPIP is not set
 # CONFIG_NET_IPGRE is not set
-# CONFIG_IP_ALIAS is not set
+# CONFIG_INET_ECN is not set
 # CONFIG_SYN_COOKIES is not set
-
-#
-# (it is safe to leave these untouched)
-#
-CONFIG_SKB_LARGE=y
 # CONFIG_IPV6 is not set
 # CONFIG_KHTTPD is not set
 # CONFIG_ATM is not set
@@ -181,13+193,13 @@ CONFIG_NETDEVICES=y
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
 # CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
 # CONFIG_NET_SB1000 is not set
 
 #
 # Ethernet (10 or 100Mbit)
 #
 CONFIG_NET_ETHERNET=y
-# CONFIG_ARM_AM79C961A is not set
 # CONFIG_NET_VENDOR_3COM is not set
 # CONFIG_LANCE is not set
 # CONFIG_NET_VENDOR_SMC is not set
@@ -320,13+332,14 @@ CONFIG_BLK_DEV_IDECS=y
 #
 CONFIG_VT=y
 # CONFIG_VT_CONSOLE is not set
-CONFIG_SERIAL_SA1100=y
-CONFIG_SERIAL_SA1100_CONSOLE=y
-# CONFIG_TOUCHSCREEN_SA1100 is not set
-# CONFIG_TOUCHSCREEN_BITSY is not set
 # CONFIG_SERIAL is not set
 # CONFIG_SERIAL_EXTENDED is not set
 # CONFIG_SERIAL_NONSTANDARD is not set
+CONFIG_SERIAL_SA1100=y
+CONFIG_SERIAL_SA1100_CONSOLE=y
+CONFIG_SA1100_DEFAULT_BAUDRATE=9600
+CONFIG_TOUCHSCREEN_UCB1200=y
+# CONFIG_TOUCHSCREEN_BITSY is not set
 CONFIG_UNIX98_PTYS=y
 CONFIG_UNIX98_PTY_COUNT=32
 
@@ -345,6+358,10 @@ CONFIG_UNIX98_PTY_COUNT=32
 # Joysticks
 #
 # CONFIG_JOYSTICK is not set
+
+#
+# Input core support is needed for joysticks
+#
 # CONFIG_QIC02_TAPE is not set
 
 #
@@ -354,11+371,6 @@ CONFIG_UNIX98_PTY_COUNT=32
 # CONFIG_INTEL_RNG is not set
 # CONFIG_NVRAM is not set
 # CONFIG_RTC is not set
-
-#
-# Video For Linux
-#
-# CONFIG_VIDEO_DEV is not set
 # CONFIG_DTLK is not set
 # CONFIG_R3964 is not set
 # CONFIG_APPLICOM is not set
@@ -367,10+379,9 @@ CONFIG_UNIX98_PTY_COUNT=32
 # Ftape, the floppy tape device driver
 #
 # CONFIG_FTAPE is not set
+# CONFIG_AGP is not set
 # CONFIG_DRM is not set
-# CONFIG_DRM_TDFX is not set
 # CONFIG_PCMCIA_SERIAL is not set
-# CONFIG_AGP is not set
 
 #
 # File systems
@@ -451,12+462,14 @@ CONFIG_MSDOS_PARTITION=y
 # CONFIG_SOLARIS_X86_PARTITION is not set
 # CONFIG_UNIXWARE_DISKLABEL is not set
 # CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
 # CONFIG_SUN_PARTITION is not set
 CONFIG_NLS=y
 
 #
 # Native Language Support
 #
+CONFIG_NLS_DEFAULT="iso8859-1"
 CONFIG_NLS_CODEPAGE_437=y
 # CONFIG_NLS_CODEPAGE_737 is not set
 # CONFIG_NLS_CODEPAGE_775 is not set
@@ -473,6+486,10 @@ CONFIG_NLS_CODEPAGE_437=y
 # CONFIG_NLS_CODEPAGE_866 is not set
 # CONFIG_NLS_CODEPAGE_869 is not set
 # CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
 # CONFIG_NLS_ISO8859_1 is not set
 # CONFIG_NLS_ISO8859_2 is not set
 # CONFIG_NLS_ISO8859_3 is not set
@@ -485,6+502,7 @@ CONFIG_NLS_CODEPAGE_437=y
 # CONFIG_NLS_ISO8859_14 is not set
 # CONFIG_NLS_ISO8859_15 is not set
 # CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_UTF8 is not set
 
 #
 # Console drivers
@@ -497,7+515,9 @@ CONFIG_FB=y
 #
 CONFIG_FB=y
 CONFIG_DUMMY_CONSOLE=y
+# CONFIG_FB_CYBER2000 is not set
 CONFIG_FB_SA1100=y
+# CONFIG_FB_MQ200 is not set
 # CONFIG_FB_VIRTUAL is not set
 # CONFIG_FBCON_ADVANCED is not set
 CONFIG_FBCON_CFB2=y
@@ -517,8+537,10 @@ CONFIG_FONT_8x8=y
 #
 CONFIG_SOUND=y
 CONFIG_SOUND_UDA1341=y
+# CONFIG_SOUND_SA1100_SSP is not set
 # CONFIG_SOUND_CMPCI is not set
 # CONFIG_SOUND_EMU10K1 is not set
+# CONFIG_SOUND_FUSION is not set
 # CONFIG_SOUND_ES1370 is not set
 # CONFIG_SOUND_ES1371 is not set
 # CONFIG_SOUND_ESSSOLO1 is not set
index 3439181..bdd14f5 100644 (file)
@@ -12,10+12,17 @@ CONFIG_EXPERIMENTAL=y
 # CONFIG_OBSOLETE is not set
 
 #
+# Loadable module support
+#
+CONFIG_MODULES=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_KMOD is not set
+
+#
 # System Type
 #
-# CONFIG_ARCH_ARC is not set
-# CONFIG_ARCH_A5K is not set
+# CONFIG_ARCH_ARCA5K is not set
+# CONFIG_ARCH_CLPS7500 is not set
 # CONFIG_ARCH_CO285 is not set
 # CONFIG_ARCH_EBSA110 is not set
 # CONFIG_ARCH_FOOTBRIDGE is not set
@@ -27,33+34,30 @@ CONFIG_ARCH_SA1100=y
 #
 # CONFIG_SA1100_ASSABET is not set
 CONFIG_SA1100_BRUTUS=y
+# CONFIG_SA1100_CERF is not set
 # CONFIG_SA1100_BITSY is not set
 # CONFIG_SA1100_LART is not set
 # CONFIG_SA1100_THINCLIENT is not set
 # CONFIG_SA1100_GRAPHICSCLIENT is not set
+# CONFIG_SA1100_NANOENGINE is not set
 # CONFIG_SA1100_VICTOR is not set
+# CONFIG_SA1100_XP860 is not set
 CONFIG_ANGELBOOT=y
 # CONFIG_SA1100_FREQUENCY_SCALE is not set
 # CONFIG_SA1100_VOLTAGE_SCALE is not set
-CONFIG_CPU_32=y
-# CONFIG_CPU_26 is not set
-CONFIG_CPU_32v4=y
-CONFIG_CPU_SA1100=y
 # CONFIG_ARCH_ACORN is not set
 # CONFIG_FOOTBRIDGE is not set
 # CONFIG_FOOTBRIDGE_HOST is not set
 # CONFIG_FOOTBRIDGE_ADDIN is not set
+CONFIG_CPU_32=y
+# CONFIG_CPU_26 is not set
+CONFIG_CPU_32v4=y
+CONFIG_CPU_SA1100=y
 CONFIG_DISCONTIGMEM=y
 # CONFIG_PCI is not set
 # CONFIG_ISA is not set
 # CONFIG_ISA_DMA is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_KMOD is not set
+CONFIG_PC_KEYMAP=y
 
 #
 # General setup
@@ -147,7+151,7 @@ CONFIG_VT=y
 # CONFIG_VT_CONSOLE is not set
 CONFIG_SERIAL_SA1100=y
 CONFIG_SERIAL_SA1100_CONSOLE=y
-# CONFIG_TOUCHSCREEN_SA1100 is not set
+# CONFIG_TOUCHSCREEN_UCB1200 is not set
 # CONFIG_TOUCHSCREEN_BITSY is not set
 # CONFIG_SERIAL is not set
 # CONFIG_SERIAL_EXTENDED is not set
@@ -192,9+196,8 @@ CONFIG_UNIX98_PTY_COUNT=32
 # Ftape, the floppy tape device driver
 #
 # CONFIG_FTAPE is not set
-# CONFIG_DRM is not set
-# CONFIG_DRM_TDFX is not set
 # CONFIG_AGP is not set
+# CONFIG_DRM is not set
 
 #
 # File systems
@@ -256,6+259,7 @@ CONFIG_FB=y
 #
 CONFIG_FB=y
 CONFIG_DUMMY_CONSOLE=y
+# CONFIG_FB_CYBER2000 is not set
 CONFIG_FB_SA1100=y
 # CONFIG_FB_VIRTUAL is not set
 # CONFIG_FBCON_ADVANCED is not set
index accb50b..e2bf1e0 100644 (file)
@@ -21,8+21,8 @@ CONFIG_MODULES=y
 #
 # System Type
 #
-# CONFIG_ARCH_ARC is not set
-# CONFIG_ARCH_A5K is not set
+# CONFIG_ARCH_ARCA5K is not set
+# CONFIG_ARCH_CLPS7500 is not set
 # CONFIG_ARCH_CO285 is not set
 # CONFIG_ARCH_EBSA110 is not set
 # CONFIG_ARCH_FOOTBRIDGE is not set
@@ -35,34+35,39 @@ CONFIG_ARCH_SA1100=y
 # CONFIG_SA1100_ASSABET is not set
 # CONFIG_SA1100_BRUTUS is not set
 CONFIG_SA1100_CERF=y
+CONFIG_SA1100_CERF_32MB=y
 # CONFIG_SA1100_BITSY is not set
 # CONFIG_SA1100_LART is not set
 # CONFIG_SA1100_THINCLIENT is not set
 # CONFIG_SA1100_GRAPHICSCLIENT is not set
+# CONFIG_SA1100_NANOENGINE is not set
 # CONFIG_SA1100_VICTOR is not set
+# CONFIG_SA1100_XP860 is not set
 # CONFIG_ANGELBOOT is not set
 # CONFIG_SA1100_FREQUENCY_SCALE is not set
 # CONFIG_SA1100_VOLTAGE_SCALE is not set
-CONFIG_CPU_32=y
-# CONFIG_CPU_26 is not set
-CONFIG_CPU_32v4=y
-CONFIG_CPU_SA1100=y
 # CONFIG_ARCH_ACORN is not set
 # CONFIG_FOOTBRIDGE is not set
 # CONFIG_FOOTBRIDGE_HOST is not set
 # CONFIG_FOOTBRIDGE_ADDIN is not set
+CONFIG_CPU_32=y
+# CONFIG_CPU_26 is not set
+CONFIG_CPU_32v4=y
+CONFIG_CPU_SA1100=y
 CONFIG_DISCONTIGMEM=y
 # CONFIG_PCI is not set
 # CONFIG_ISA is not set
 # CONFIG_ISA_DMA is not set
+CONFIG_PC_KEYMAP=y
 
 #
 # General setup
 #
+# CONFIG_SA1100_CERF_CMDLINE is not set
 CONFIG_HOTPLUG=y
 
 #
-# PC Card support
+# PCMCIA/CardBus support
 #
 CONFIG_PCMCIA=y
 # CONFIG_PCMCIA_DEBUG is not set
@@ -70,7+75,7 @@ CONFIG_SA1100_PCMCIA=y
 CONFIG_VIRTUAL_BUS=y
 CONFIG_NET=y
 CONFIG_SYSVIPC=y
-# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_BSD_PROCESS_ACCT=y
 CONFIG_SYSCTL=y
 CONFIG_NWFPE=y
 CONFIG_KCORE_ELF=y
@@ -80,7+85,7 @@ CONFIG_BINFMT_ELF=y
 # CONFIG_BINFMT_MISC is not set
 # CONFIG_PM is not set
 # CONFIG_ARTHUR is not set
-CONFIG_CMDLINE="keepinitrd"
+CONFIG_CMDLINE="console=ttyS0,38400"
 CONFIG_LEDS=y
 CONFIG_LEDS_TIMER=y
 CONFIG_LEDS_CPU=y
@@ -126,7+131,9 @@ CONFIG_UNIX=y
 CONFIG_INET=y
 # CONFIG_IP_MULTICAST is not set
 # CONFIG_IP_ADVANCED_ROUTER is not set
-# CONFIG_IP_PNP is not set
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
 # CONFIG_IP_ROUTER is not set
 # CONFIG_NET_IPIP is not set
 # CONFIG_NET_IPGRE is not set
@@ -282,10+289,11 @@ CONFIG_BLK_DEV_IDECS=y
 #
 # Character devices
 #
-# CONFIG_VT is not set
+CONFIG_VT=y
+# CONFIG_VT_CONSOLE is not set
 CONFIG_SERIAL_SA1100=y
 CONFIG_SERIAL_SA1100_CONSOLE=y
-# CONFIG_TOUCHSCREEN_UCB1200 is not set
+CONFIG_TOUCHSCREEN_UCB1200=y
 # CONFIG_TOUCHSCREEN_BITSY is not set
 # CONFIG_SERIAL is not set
 # CONFIG_SERIAL_EXTENDED is not set
@@ -329,9+337,9 @@ CONFIG_UNIX98_PTY_COUNT=32
 # Ftape, the floppy tape device driver
 #
 # CONFIG_FTAPE is not set
+# CONFIG_AGP is not set
 # CONFIG_DRM is not set
 # CONFIG_PCMCIA_SERIAL is not set
-# CONFIG_AGP is not set
 
 #
 # File systems
@@ -345,6+353,7 @@ CONFIG_UNIX98_PTY_COUNT=32
 # CONFIG_BFS_FS is not set
 # CONFIG_FAT_FS is not set
 # CONFIG_EFS_FS is not set
+CONFIG_JFFS_FS_VERBOSE=0
 # CONFIG_CRAMFS is not set
 # CONFIG_RAMFS is not set
 # CONFIG_ISO9660_FS is not set
@@ -367,6+376,7 @@ CONFIG_EXT2_FS=y
 # CONFIG_CODA_FS is not set
 CONFIG_NFS_FS=y
 # CONFIG_NFS_V3 is not set
+# CONFIG_ROOT_NFS is not set
 # CONFIG_NFSD is not set
 CONFIG_SUNRPC=y
 CONFIG_LOCKD=y
@@ -376,36+386,37 @@ CONFIG_LOCKD=y
 #
 # Partition Types
 #
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
+# CONFIG_PARTITION_ADVANCED is not set
 CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
 # CONFIG_NLS is not set
 
 #
+# Console drivers
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_FB=y
+
+#
+# Frame-buffer support
+#
+CONFIG_FB=y
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FB_SA1100=y
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FBCON_ADVANCED is not set
+CONFIG_FBCON_CFB2=y
+CONFIG_FBCON_CFB4=y
+CONFIG_FBCON_CFB8=y
+CONFIG_FBCON_CFB16=y
+# CONFIG_FBCON_FONTWIDTH8_ONLY is not set
+# CONFIG_FBCON_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+
+#
 # Sound
 #
-CONFIG_SOUND=y
-# CONFIG_SOUND_CMPCI is not set
-# CONFIG_SOUND_EMU10K1 is not set
-# CONFIG_SOUND_ES1370 is not set
-# CONFIG_SOUND_ES1371 is not set
-# CONFIG_SOUND_ESSSOLO1 is not set
-# CONFIG_SOUND_MAESTRO is not set
-# CONFIG_SOUND_SONICVIBES is not set
-# CONFIG_SOUND_TRIDENT is not set
-# CONFIG_SOUND_MSNDCLAS is not set
-# CONFIG_SOUND_MSNDPIN is not set
-# CONFIG_SOUND_OSS is not set
+# CONFIG_SOUND is not set
 
 #
 # USB support
index c2c7e0d..8f79819 100644 (file)
 #
-# Automatically generated by make menuconfig: don't edit
+# Automatically generated make config: don't edit
 #
 CONFIG_ARM=y
+# CONFIG_EISA is not set
 # CONFIG_SBUS is not set
+# CONFIG_MCA is not set
 CONFIG_UID16=y
 
 #
 # Code maturity level options
 #
 CONFIG_EXPERIMENTAL=y
+# CONFIG_OBSOLETE is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+# CONFIG_MODVERSIONS is not set
+CONFIG_KMOD=y
 
 #
 # System Type
 #
-# CONFIG_ARCH_ARC is not set
-# CONFIG_ARCH_A5K is not set
+# CONFIG_ARCH_ARCA5K is not set
+# CONFIG_ARCH_CLPS7500 is not set
 # CONFIG_ARCH_CO285 is not set
 CONFIG_ARCH_EBSA110=y
 # CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_INTEGRATOR is not set
 # CONFIG_ARCH_RPC is not set
 # CONFIG_ARCH_SA1100 is not set
-CONFIG_CPU_32=y
-# CONFIG_CPU_26 is not set
-CONFIG_CPU_32v4=y
-CONFIG_CPU_SA110=y
+# CONFIG_ARCH_CLPS711X is not set
+
+#
+# Archimedes/A5000 Implementations
+#
+
+#
+# Footbridge Implementations
+#
+
+#
+# SA11x0 Implementations
+#
+
+#
+# CLPS711X/EP721X Implementations
+#
 # CONFIG_ARCH_ACORN is not set
 # CONFIG_FOOTBRIDGE is not set
 # CONFIG_FOOTBRIDGE_HOST is not set
 # CONFIG_FOOTBRIDGE_ADDIN is not set
-# CONFIG_DISCONTIGMEM is not set
-# CONFIG_PCI is not set
-# CONFIG_ISA is not set
-# CONFIG_ISA_DMA is not set
+CONFIG_CPU_32=y
+# CONFIG_CPU_26 is not set
 
 #
-# Loadable module support
+# Processor Type
 #
-CONFIG_MODULES=y
-# CONFIG_MODVERSIONS is not set
-CONFIG_KMOD=y
+CONFIG_CPU_32v4=y
+CONFIG_CPU_SA110=y
+# CONFIG_DISCONTIGMEM is not set
 
 #
 # General setup
 #
+# CONFIG_ANGELBOOT is not set
+# CONFIG_PCI is not set
+# CONFIG_ISA is not set
+# CONFIG_ISA_DMA is not set
 # CONFIG_HOTPLUG is not set
 # CONFIG_PCMCIA is not set
 CONFIG_NET=y
 CONFIG_SYSVIPC=y
-# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_BSD_PROCESS_ACCT=y
 CONFIG_SYSCTL=y
 # CONFIG_NWFPE is not set
 CONFIG_KCORE_ELF=y
@@ -55,6+81,7 @@ CONFIG_KCORE_ELF=y
 CONFIG_BINFMT_AOUT=y
 CONFIG_BINFMT_ELF=y
 # CONFIG_BINFMT_MISC is not set
+# CONFIG_PM is not set
 # CONFIG_ARTHUR is not set
 CONFIG_CMDLINE="root=/dev/nfs rw mem=16M console=ttyS1,38400n8"
 CONFIG_LEDS=y
@@ -66,7+93,7 @@ CONFIG_LEDS_TIMER=y
 CONFIG_PARPORT=y
 CONFIG_PARPORT_PC=y
 CONFIG_PARPORT_PC_FIFO=y
-CONFIG_PARPORT_PC_SUPERIO=y
+# CONFIG_PARPORT_PC_SUPERIO is not set
 # CONFIG_PARPORT_ARC is not set
 # CONFIG_PARPORT_AMIGA is not set
 # CONFIG_PARPORT_MFC3 is not set
@@ -76,6+103,11 @@ CONFIG_PARPORT_PC_SUPERIO=y
 CONFIG_PARPORT_1284=y
 
 #
+# Memory Technology Devices (MTD)
+#
+# CONFIG_MTD is not set
+
+#
 # Plug and Play configuration
 #
 # CONFIG_PNP is not set
@@ -88,15+120,12 @@ CONFIG_PARPORT_1284=y
 # CONFIG_BLK_DEV_XD is not set
 # CONFIG_PARIDE is not set
 # CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
 # CONFIG_BLK_DEV_DAC960 is not set
 # CONFIG_BLK_DEV_LOOP is not set
 # CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_LVM is not set
-# CONFIG_BLK_DEV_MD is not set
-# CONFIG_MD_LINEAR is not set
-# CONFIG_MD_RAID0 is not set
-# CONFIG_RAID15_DANGEROUS is not set
 CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_SIZE=4096
 # CONFIG_BLK_DEV_INITRD is not set
 
 #
@@ -126,14+155,12 @@ CONFIG_IP_ROUTE_VERBOSE=y
 CONFIG_IP_PNP=y
 CONFIG_IP_PNP_BOOTP=y
 # CONFIG_IP_PNP_RARP is not set
-# CONFIG_IP_ROUTER is not set
 # CONFIG_NET_IPIP is not set
 # CONFIG_NET_IPGRE is not set
 # CONFIG_IP_MROUTE is not set
-CONFIG_IP_ALIAS=y
 # CONFIG_ARPD is not set
+# CONFIG_INET_ECN is not set
 CONFIG_SYN_COOKIES=y
-# CONFIG_SKB_LARGE is not set
 
 #
 #   IP: Netfilter Configuration
@@ -164,9+191,25 @@ CONFIG_IP_NF_TARGET_LOG=m
 CONFIG_IP_NF_COMPAT_IPCHAINS=m
 CONFIG_IP_NF_NAT_NEEDED=y
 # CONFIG_IP_NF_COMPAT_IPFWADM is not set
-# CONFIG_IPV6 is not set
+CONFIG_IPV6=m
+CONFIG_IPV6_EUI64=y
+# CONFIG_IPV6_NO_PB is not set
+
+#
+#   IPv6: Netfilter Configuration
+#
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_MATCH_LIMIT=m
+CONFIG_IP6_NF_MATCH_MARK=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_TARGET_MARK=m
 # CONFIG_KHTTPD is not set
 # CONFIG_ATM is not set
+
+#
+#  
+#
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
 # CONFIG_DECNET is not set
@@ -174,6+217,7 @@ CONFIG_IP_NF_NAT_NEEDED=y
 # CONFIG_X25 is not set
 # CONFIG_LAPB is not set
 # CONFIG_LLC is not set
+# CONFIG_NET_DIVERT is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
 # CONFIG_NET_FASTROUTE is not set
@@ -196,6+240,7 @@ CONFIG_NETDEVICES=y
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
 # CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
 # CONFIG_ETHERTAP is not set
 # CONFIG_NET_SB1000 is not set
 
@@ -217,8+262,9 @@ CONFIG_ARM_AM79C961A=y
 #
 # Ethernet (1000 Mbit)
 #
-# CONFIG_YELLOWFIN is not set
 # CONFIG_ACENIC is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
 # CONFIG_SK98LIN is not set
 # CONFIG_FDDI is not set
 # CONFIG_HIPPI is not set
@@ -287,6+333,11 @@ CONFIG_PPP_BSDCOMP=m
 # CONFIG_ISDN is not set
 
 #
+# Input core support
+#
+# CONFIG_INPUT is not set
+
+#
 # Character devices
 #
 # CONFIG_VT is not set
@@ -299,7+350,8 @@ CONFIG_SERIAL_EXTENDED=y
 # CONFIG_SERIAL_MULTIPORT is not set
 # CONFIG_HUB6 is not set
 # CONFIG_SERIAL_NONSTANDARD is not set
-# CONFIG_UNIX98_PTYS is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_UNIX98_PTY_COUNT=256
 CONFIG_PRINTER=m
 # CONFIG_LP_CONSOLE is not set
 # CONFIG_PPDEV is not set
@@ -319,6+371,10 @@ CONFIG_PRINTER=m
 # Joysticks
 #
 # CONFIG_JOYSTICK is not set
+
+#
+# Input core support is needed for joysticks
+#
 # CONFIG_QIC02_TAPE is not set
 
 #
@@ -326,19+382,17 @@ CONFIG_PRINTER=m
 #
 CONFIG_WATCHDOG=y
 # CONFIG_WATCHDOG_NOWAYOUT is not set
+CONFIG_SOFT_WATCHDOG=y
 # CONFIG_WDT is not set
 # CONFIG_WDTPCI is not set
-CONFIG_SOFT_WATCHDOG=y
 # CONFIG_PCWATCHDOG is not set
 # CONFIG_ACQUIRE_WDT is not set
+# CONFIG_60XX_WDT is not set
 # CONFIG_MIXCOMWD is not set
+# CONFIG_I810_TCO is not set
+# CONFIG_INTEL_RNG is not set
 # CONFIG_NVRAM is not set
 # CONFIG_RTC is not set
-
-#
-# Video For Linux
-#
-# CONFIG_VIDEO_DEV is not set
 # CONFIG_DTLK is not set
 # CONFIG_R3964 is not set
 # CONFIG_APPLICOM is not set
@@ -347,9+401,13 @@ CONFIG_SOFT_WATCHDOG=y
 # Ftape, the floppy tape device driver
 #
 # CONFIG_FTAPE is not set
-# CONFIG_DRM is not set
-# CONFIG_DRM_TDFX is not set
 # CONFIG_AGP is not set
+# CONFIG_DRM is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
 
 #
 # File systems
@@ -367,6+425,7 @@ CONFIG_AUTOFS4_FS=y
 # CONFIG_UMSDOS_FS is not set
 # CONFIG_VFAT_FS is not set
 # CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
 # CONFIG_CRAMFS is not set
 # CONFIG_RAMFS is not set
 # CONFIG_ISO9660_FS is not set
@@ -400,7+459,6 @@ CONFIG_NFS_FS=y
 CONFIG_ROOT_NFS=y
 # CONFIG_NFSD is not set
 # CONFIG_NFSD_V3 is not set
-# CONFIG_NFSD_TCP is not set
 CONFIG_SUNRPC=y
 CONFIG_LOCKD=y
 # CONFIG_SMB_FS is not set
@@ -427,6+485,7 @@ CONFIG_PARTITION_ADVANCED=y
 # CONFIG_MAC_PARTITION is not set
 # CONFIG_MSDOS_PARTITION is not set
 # CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
 # CONFIG_SUN_PARTITION is not set
 # CONFIG_NLS is not set
 
@@ -438,7+497,7 @@ CONFIG_PARTITION_ADVANCED=y
 #
 # Kernel hacking
 #
-# CONFIG_FRAME_POINTER is not set
+CONFIG_FRAME_POINTER=y
 CONFIG_DEBUG_ERRORS=y
 # CONFIG_DEBUG_USER is not set
 # CONFIG_DEBUG_INFO is not set
index af2ccd0..255c999 100644 (file)
 # Automatically generated make config: don't edit
 #
 CONFIG_ARM=y
+# CONFIG_EISA is not set
+# CONFIG_SBUS is not set
+# CONFIG_MCA is not set
 CONFIG_UID16=y
 
 #
 # Code maturity level options
 #
 CONFIG_EXPERIMENTAL=y
+# CONFIG_OBSOLETE is not set
 
 #
-# System and Processor Type
+# Loadable module support
 #
-# CONFIG_ARCH_ARC is not set
-# CONFIG_ARCH_A5K is not set
-# CONFIG_ARCH_RPC is not set
+CONFIG_MODULES=y
+# CONFIG_MODVERSIONS is not set
+CONFIG_KMOD=y
+
+#
+# System Type
+#
+# CONFIG_ARCH_ARCA5K is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CO285 is not set
 # CONFIG_ARCH_EBSA110 is not set
-CONFIG_FOOTBRIDGE=y
-CONFIG_HOST_FOOTBRIDGE=y
-# CONFIG_ADDIN_FOOTBRIDGE is not set
+CONFIG_ARCH_FOOTBRIDGE=y
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_CLPS711X is not set
+
+#
+# Archimedes/A5000 Implementations
+#
 
 #
 # Footbridge Implementations
 #
-CONFIG_ARCH_EBSA285=y
 # CONFIG_ARCH_CATS is not set
-CONFIG_ARCH_NETWINDER=y
 # CONFIG_ARCH_PERSONAL_SERVER is not set
+# CONFIG_ARCH_EBSA285_ADDIN is not set
+CONFIG_ARCH_EBSA285_HOST=y
+CONFIG_ARCH_NETWINDER=y
+
+#
+# SA11x0 Implementations
+#
+
+#
+# CLPS711X/EP721X Implementations
+#
 # CONFIG_ARCH_ACORN is not set
+CONFIG_FOOTBRIDGE=y
+CONFIG_FOOTBRIDGE_HOST=y
+# CONFIG_FOOTBRIDGE_ADDIN is not set
+CONFIG_ARCH_EBSA285=y
 CONFIG_CPU_32=y
 # CONFIG_CPU_26 is not set
-CONFIG_CPU_32v4=y
-CONFIG_CPU_SA110=y
-CONFIG_PCI=y
-CONFIG_PCI_NAMES=y
-CONFIG_ISA=y
-CONFIG_ISA_DMA=y
-# CONFIG_SBUS is not set
-# CONFIG_PCMCIA is not set
-CONFIG_ALIGNMENT_TRAP=y
 
 #
-# Loadable module support
+# Processor Type
 #
-CONFIG_MODULES=y
-# CONFIG_MODVERSIONS is not set
-CONFIG_KMOD=y
+CONFIG_CPU_32v4=y
+CONFIG_CPU_SA110=y
+# CONFIG_DISCONTIGMEM is not set
 
 #
 # General setup
 #
+# CONFIG_ANGELBOOT is not set
+CONFIG_PCI=y
+CONFIG_ISA=y
+CONFIG_ISA_DMA=y
+CONFIG_PCI_NAMES=y
+# CONFIG_HOTPLUG is not set
+# CONFIG_PCMCIA is not set
 CONFIG_NET=y
 CONFIG_SYSVIPC=y
 CONFIG_BSD_PROCESS_ACCT=y
@@ -60,7+88,12 @@ CONFIG_KCORE_ELF=y
 CONFIG_BINFMT_AOUT=y
 CONFIG_BINFMT_ELF=y
 # CONFIG_BINFMT_MISC is not set
+# CONFIG_PM is not set
 # CONFIG_ARTHUR is not set
+CONFIG_LEDS=y
+CONFIG_LEDS_TIMER=y
+# CONFIG_LEDS_CPU is not set
+CONFIG_ALIGNMENT_TRAP=y
 
 #
 # Parallel port support
@@ -76,25+109,11 @@ CONFIG_PARPORT_PC_FIFO=y
 # CONFIG_PARPORT_SUNBPP is not set
 # CONFIG_PARPORT_OTHER is not set
 CONFIG_PARPORT_1284=y
-CONFIG_CMDLINE="root=/dev/hda1 ro mem=32M parport=0x378,7 ide0=autotune"
-CONFIG_LEDS=y
-CONFIG_LEDS_TIMER=y
-# CONFIG_LEDS_CPU is not set
 
 #
-# IEEE 1394 (FireWire) support
+# Memory Technology Devices (MTD)
 #
-# CONFIG_IEEE1394 is not set
-
-#
-# I2O device support
-#
-# CONFIG_I2O is not set
-# CONFIG_I2O_PCI is not set
-# CONFIG_I2O_BLOCK is not set
-# CONFIG_I2O_LAN is not set
-# CONFIG_I2O_SCSI is not set
-# CONFIG_I2O_PROC is not set
+# CONFIG_MTD is not set
 
 #
 # Plug and Play configuration
@@ -137,185+156,13 @@ CONFIG_PARIDE_KTTI=m
 CONFIG_PARIDE_ON20=m
 CONFIG_PARIDE_ON26=m
 # CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
 # CONFIG_BLK_DEV_DAC960 is not set
 CONFIG_BLK_DEV_LOOP=m
 CONFIG_BLK_DEV_NBD=m
-# CONFIG_BLK_DEV_LVM is not set
-# CONFIG_BLK_DEV_MD is not set
-# CONFIG_MD_LINEAR is not set
-# CONFIG_MD_RAID0 is not set
-# CONFIG_RAID15_DANGEROUS is not set
 CONFIG_BLK_DEV_RAM=y
-# CONFIG_BLK_DEV_INITRD is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_SERIAL=y
-CONFIG_SERIAL_CONSOLE=y
-# CONFIG_SERIAL_EXTENDED is not set
-CONFIG_SERIAL_NONSTANDARD=y
-# CONFIG_COMPUTONE is not set
-# CONFIG_ROCKETPORT is not set
-# CONFIG_CYCLADES is not set
-CONFIG_SERIAL_21285=y
-CONFIG_SERIAL_21285_CONSOLE=y
-# CONFIG_DIGIEPCA is not set
-# CONFIG_DIGI is not set
-# CONFIG_ESPSERIAL is not set
-# CONFIG_MOXA_INTELLIO is not set
-# CONFIG_MOXA_SMARTIO is not set
-# CONFIG_ISI is not set
-# CONFIG_SYNCLINK is not set
-# CONFIG_N_HDLC is not set
-# CONFIG_RISCOM8 is not set
-# CONFIG_SPECIALIX is not set
-# CONFIG_SX is not set
-# CONFIG_STALDRV is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_UNIX98_PTY_COUNT=256
-CONFIG_PRINTER=m
-# CONFIG_LP_CONSOLE is not set
-# CONFIG_PPDEV is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=m
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_CHARDEV is not set
-
-#
-# Mice
-#
-# CONFIG_BUSMOUSE is not set
-CONFIG_MOUSE=y
-CONFIG_PSMOUSE=y
-# CONFIG_82C710_MOUSE is not set
-# CONFIG_PC110_PAD is not set
-
-#
-# Joysticks
-#
-# CONFIG_JOYSTICK is not set
-# CONFIG_QIC02_TAPE is not set
-
-#
-# Watchdog Cards
-#
-CONFIG_WATCHDOG=y
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-# CONFIG_WDT is not set
-# CONFIG_WDTPCI is not set
-CONFIG_SOFT_WATCHDOG=y
-# CONFIG_PCWATCHDOG is not set
-# CONFIG_ACQUIRE_WDT is not set
-# CONFIG_MIXCOMWD is not set
-CONFIG_21285_WATCHDOG=m
-CONFIG_977_WATCHDOG=m
-CONFIG_DS1620=y
-CONFIG_NWBUTTON=y
-CONFIG_NWBUTTON_REBOOT=y
-CONFIG_NWFLASH=m
-CONFIG_NVRAM=m
-CONFIG_RTC=y
-
-#
-# Video For Linux
-#
-CONFIG_VIDEO_DEV=y
-# CONFIG_I2C_PARPORT is not set
-
-#
-# Radio Adapters
-#
-# CONFIG_RADIO_CADET is not set
-# CONFIG_RADIO_RTRACK is not set
-# CONFIG_RADIO_RTRACK2 is not set
-# CONFIG_RADIO_AZTECH is not set
-# CONFIG_RADIO_GEMTEK is not set
-# CONFIG_RADIO_MIROPCM20 is not set
-# CONFIG_RADIO_SF16FMI is not set
-# CONFIG_RADIO_TERRATEC is not set
-# CONFIG_RADIO_TRUST is not set
-# CONFIG_RADIO_TYPHOON is not set
-# CONFIG_RADIO_ZOLTRIX is not set
-
-#
-# Video Adapters
-#
-# CONFIG_VIDEO_PMS is not set
-# CONFIG_VIDEO_BWQCAM is not set
-# CONFIG_VIDEO_CQCAM is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_TUNER_3036 is not set
-# CONFIG_VIDEO_STRADIS is not set
-# CONFIG_VIDEO_ZORAN is not set
-# CONFIG_VIDEO_BUZ is not set
-# CONFIG_VIDEO_ZR36120 is not set
-CONFIG_VIDEO_CYBERPRO=m
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-# CONFIG_FTAPE is not set
-# CONFIG_DRM is not set
-# CONFIG_DRM_TDFX is not set
-# CONFIG_AGP is not set
-
-#
-# Console drivers
-#
-CONFIG_VGA_CONSOLE=y
-CONFIG_FB=y
-
-#
-# Frame-buffer support
-#
-CONFIG_FB=y
-CONFIG_DUMMY_CONSOLE=y
-# CONFIG_FB_RIVA is not set
-# CONFIG_FB_CLGEN is not set
-# CONFIG_FB_PM2 is not set
-CONFIG_FB_CYBER2000=y
-# CONFIG_FB_MATROX is not set
-# CONFIG_FB_ATY is not set
-# CONFIG_FB_ATY128 is not set
-# CONFIG_FB_3DFX is not set
-# CONFIG_FB_VIRTUAL is not set
-CONFIG_FBCON_ADVANCED=y
-# CONFIG_FBCON_MFB is not set
-# CONFIG_FBCON_CFB2 is not set
-# CONFIG_FBCON_CFB4 is not set
-CONFIG_FBCON_CFB8=y
-CONFIG_FBCON_CFB16=y
-CONFIG_FBCON_CFB24=y
-# CONFIG_FBCON_CFB32 is not set
-# CONFIG_FBCON_AFB is not set
-# CONFIG_FBCON_ILBM is not set
-# CONFIG_FBCON_IPLAN2P2 is not set
-# CONFIG_FBCON_IPLAN2P4 is not set
-# CONFIG_FBCON_IPLAN2P8 is not set
-# CONFIG_FBCON_MAC is not set
-# CONFIG_FBCON_VGA_PLANES is not set
-CONFIG_FBCON_VGA=y
-# CONFIG_FBCON_HGA is not set
-# CONFIG_FBCON_FONTWIDTH8_ONLY is not set
-CONFIG_FBCON_FONTS=y
-# CONFIG_FONT_8x8 is not set
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-CONFIG_FONT_ACORN_8x8=y
+CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BLK_DEV_INITRD=y
 
 #
 # Networking options
@@ -327,24+174,21 @@ CONFIG_PACKET_MMAP=y
 # CONFIG_FILTER is not set
 CONFIG_UNIX=y
 CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
+CONFIG_IP_MULTICAST=y
 # CONFIG_IP_ADVANCED_ROUTER is not set
 CONFIG_IP_PNP=y
 CONFIG_IP_PNP_BOOTP=y
 # CONFIG_IP_PNP_RARP is not set
-# CONFIG_IP_ROUTER is not set
 # CONFIG_NET_IPIP is not set
 # CONFIG_NET_IPGRE is not set
-CONFIG_IP_ALIAS=y
+# CONFIG_IP_MROUTE is not set
+# CONFIG_INET_ECN is not set
 CONFIG_SYN_COOKIES=y
-
-#
-# (it is safe to leave these untouched)
-#
-# CONFIG_SKB_LARGE is not set
 # CONFIG_IPV6 is not set
 # CONFIG_KHTTPD is not set
-# CONFIG_ATM is not set
+CONFIG_ATM=y
+# CONFIG_ATM_CLIP is not set
+# CONFIG_ATM_LANE is not set
 
 #
 #  
@@ -352,10+196,11 @@ CONFIG_SYN_COOKIES=y
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
 # CONFIG_DECNET is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_X25 is not set
 # CONFIG_LAPB is not set
-# CONFIG_BRIDGE is not set
 # CONFIG_LLC is not set
+# CONFIG_NET_DIVERT is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
 # CONFIG_NET_FASTROUTE is not set
@@ -367,55+212,6 @@ CONFIG_SYN_COOKIES=y
 # CONFIG_NET_SCHED is not set
 
 #
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-CONFIG_IRDA=m
-
-#
-# IrDA protocols
-#
-CONFIG_IRLAN=m
-CONFIG_IRCOMM=m
-CONFIG_IRDA_ULTRA=y
-CONFIG_IRDA_OPTIONS=y
-
-#
-#   IrDA options
-#
-CONFIG_IRDA_CACHE_LAST_LSAP=y
-CONFIG_IRDA_FAST_RR=y
-# CONFIG_IRDA_DEBUG is not set
-# CONFIG_IRDA_COMPRESSION is not set
-
-#
-# Infrared-port device drivers
-#
-
-#
-# SIR device drivers
-#
-# CONFIG_IRTTY_SIR is not set
-# CONFIG_IRPORT_SIR is not set
-
-#
-# FIR device drivers
-#
-# CONFIG_NSC_FIR is not set
-CONFIG_WINBOND_FIR=m
-# CONFIG_TOSHIBA_FIR is not set
-# CONFIG_SMC_IRCC_FIR is not set
-
-#
-# Dongle support
-#
-# CONFIG_DONGLE is not set
-
-#
 # Network device support
 #
 CONFIG_NETDEVICES=y
@@ -427,13+223,13 @@ CONFIG_NETDEVICES=y
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
 # CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
 # CONFIG_NET_SB1000 is not set
 
 #
 # Ethernet (10 or 100Mbit)
 #
 CONFIG_NET_ETHERNET=y
-# CONFIG_ARM_AM79C961A is not set
 CONFIG_NET_VENDOR_3COM=y
 # CONFIG_EL1 is not set
 # CONFIG_EL2 is not set
@@ -441,12+237,15 @@ CONFIG_NET_VENDOR_3COM=y
 # CONFIG_EL16 is not set
 # CONFIG_EL3 is not set
 # CONFIG_3C515 is not set
+# CONFIG_ELMC is not set
+# CONFIG_ELMC_II is not set
 CONFIG_VORTEX=y
 # CONFIG_LANCE is not set
 # CONFIG_NET_VENDOR_SMC is not set
 # CONFIG_NET_VENDOR_RACAL is not set
 # CONFIG_AT1700 is not set
 # CONFIG_DEPCA is not set
+# CONFIG_HP100 is not set
 # CONFIG_NET_ISA is not set
 CONFIG_NET_PCI=y
 # CONFIG_PCNET32 is not set
@@ -454,28+253,34 @@ CONFIG_NET_PCI=y
 # CONFIG_AC3200 is not set
 # CONFIG_APRICOT is not set
 # CONFIG_CS89x0 is not set
-# CONFIG_DE4X5 is not set
 CONFIG_TULIP=m
+# CONFIG_DE4X5 is not set
 # CONFIG_DGRS is not set
 # CONFIG_DM9102 is not set
 # CONFIG_EEPRO100 is not set
+# CONFIG_EEPRO100_PM is not set
 # CONFIG_LNE390 is not set
-# CONFIG_NE3210 is not set
+# CONFIG_NATSEMI is not set
 CONFIG_NE2K_PCI=y
-# CONFIG_RTL8129 is not set
+# CONFIG_NE3210 is not set
+# CONFIG_ES3210 is not set
 # CONFIG_8139TOO is not set
+# CONFIG_RTL8129 is not set
 # CONFIG_SIS900 is not set
+# CONFIG_EPIC100 is not set
+# CONFIG_SUNDANCE is not set
 # CONFIG_TLAN is not set
 # CONFIG_VIA_RHINE is not set
-# CONFIG_ES3210 is not set
-# CONFIG_EPIC100 is not set
+# CONFIG_WINBOND_840 is not set
+# CONFIG_HAPPYMEAL is not set
 # CONFIG_NET_POCKET is not set
 
 #
 # Ethernet (1000 Mbit)
 #
-# CONFIG_YELLOWFIN is not set
 # CONFIG_ACENIC is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
 # CONFIG_SK98LIN is not set
 # CONFIG_FDDI is not set
 # CONFIG_HIPPI is not set
@@ -498,138+303,306 @@ CONFIG_SLIP_MODE_SLIP6=y
 # CONFIG_NET_RADIO is not set
 
 #
-# Token Ring devices
+# Token Ring devices
+#
+# CONFIG_TR is not set
+# CONFIG_NET_FC is not set
+# CONFIG_RCPCI is not set
+# CONFIG_SHAPER is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+
+#
+# Amateur Radio support
+#
+# CONFIG_HAMRADIO is not set
+
+#
+# IrDA (infrared) support
+#
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+CONFIG_IRDA_ULTRA=y
+CONFIG_IRDA_OPTIONS=y
+
+#
+#   IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+CONFIG_IRDA_DEBUG=y
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+# CONFIG_IRTTY_SIR is not set
+# CONFIG_IRPORT_SIR is not set
+
+#
+# FIR device drivers
+#
+# CONFIG_NSC_FIR is not set
+CONFIG_WINBOND_FIR=m
+# CONFIG_TOSHIBA_FIR is not set
+# CONFIG_SMC_IRCC_FIR is not set
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# ATA/IDE/MFM/RLL support
+#
+CONFIG_IDE=y
+
+#
+# IDE, ATA and ATAPI Block devices
+#
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_HD_IDE is not set
+# CONFIG_BLK_DEV_HD is not set
+CONFIG_BLK_DEV_IDEDISK=y
+CONFIG_IDEDISK_MULTI_MODE=y
+# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set
+# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set
+# CONFIG_BLK_DEV_IDEDISK_IBM is not set
+# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set
+# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set
+# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set
+# CONFIG_BLK_DEV_IDEDISK_WD is not set
+# CONFIG_BLK_DEV_COMMERIAL is not set
+# CONFIG_BLK_DEV_TIVO is not set
+# CONFIG_BLK_DEV_IDECS is not set
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+
+#
+# IDE chipset support/bugfixes
+#
+# CONFIG_BLK_DEV_CMD640 is not set
+# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
+# CONFIG_BLK_DEV_ISAPNP is not set
+# CONFIG_BLK_DEV_RZ1000 is not set
+CONFIG_BLK_DEV_IDEPCI=y
+CONFIG_IDEPCI_SHARE_IRQ=y
+CONFIG_BLK_DEV_IDEDMA_PCI=y
+CONFIG_BLK_DEV_OFFBOARD=y
+CONFIG_IDEDMA_PCI_AUTO=y
+CONFIG_BLK_DEV_IDEDMA=y
+# CONFIG_IDEDMA_PCI_WIP is not set
+# CONFIG_IDEDMA_NEW_DRIVE_LISTINGS is not set
+# CONFIG_BLK_DEV_AEC62XX is not set
+# CONFIG_AEC62XX_TUNING is not set
+# CONFIG_BLK_DEV_ALI15X3 is not set
+# CONFIG_WDC_ALI15X3 is not set
+# CONFIG_BLK_DEV_AMD7409 is not set
+# CONFIG_AMD7409_OVERRIDE is not set
+# CONFIG_BLK_DEV_CMD64X is not set
+CONFIG_BLK_DEV_CY82C693=y
+# CONFIG_BLK_DEV_CS5530 is not set
+# CONFIG_BLK_DEV_HPT34X is not set
+# CONFIG_HPT34X_AUTODMA is not set
+# CONFIG_BLK_DEV_HPT366 is not set
+# CONFIG_BLK_DEV_NS87415 is not set
+# CONFIG_BLK_DEV_OPTI621 is not set
+CONFIG_BLK_DEV_PDC202XX=y
+# CONFIG_PDC202XX_BURST is not set
+# CONFIG_BLK_DEV_OSB4 is not set
+# CONFIG_BLK_DEV_SIS5513 is not set
+# CONFIG_BLK_DEV_SLC90E66 is not set
+# CONFIG_BLK_DEV_TRM290 is not set
+# CONFIG_BLK_DEV_VIA82CXXX is not set
+CONFIG_BLK_DEV_SL82C105=y
+# CONFIG_IDE_CHIPSETS is not set
+CONFIG_IDEDMA_AUTO=y
+# CONFIG_IDEDMA_IVB is not set
+# CONFIG_DMA_NONPCI is not set
+CONFIG_BLK_DEV_IDE_MODES=y
+
+#
+# SCSI support
+#
+# CONFIG_SCSI is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_IEEE1394 is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+# CONFIG_I2O_PCI is not set
+# CONFIG_I2O_BLOCK is not set
+# CONFIG_I2O_LAN is not set
+# CONFIG_I2O_SCSI is not set
+# CONFIG_I2O_PROC is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input core support
+#
+# CONFIG_INPUT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_SERIAL=y
+CONFIG_SERIAL_CONSOLE=y
+# CONFIG_SERIAL_EXTENDED is not set
+CONFIG_SERIAL_NONSTANDARD=y
+# CONFIG_COMPUTONE is not set
+# CONFIG_ROCKETPORT is not set
+# CONFIG_CYCLADES is not set
+# CONFIG_DIGIEPCA is not set
+# CONFIG_DIGI is not set
+# CONFIG_ESPSERIAL is not set
+# CONFIG_MOXA_INTELLIO is not set
+# CONFIG_MOXA_SMARTIO is not set
+# CONFIG_ISI is not set
+# CONFIG_SYNCLINK is not set
+# CONFIG_N_HDLC is not set
+# CONFIG_RISCOM8 is not set
+# CONFIG_SPECIALIX is not set
+# CONFIG_SX is not set
+# CONFIG_RIO is not set
+# CONFIG_STALDRV is not set
+CONFIG_SERIAL_21285=y
+CONFIG_SERIAL_21285_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_UNIX98_PTY_COUNT=256
+CONFIG_PRINTER=m
+# CONFIG_LP_CONSOLE is not set
+# CONFIG_PPDEV is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=m
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_CHARDEV is not set
+
+#
+# Mice
+#
+# CONFIG_BUSMOUSE is not set
+CONFIG_MOUSE=y
+CONFIG_PSMOUSE=y
+# CONFIG_82C710_MOUSE is not set
+# CONFIG_PC110_PAD is not set
+
+#
+# Joysticks
 #
-# CONFIG_TR is not set
-# CONFIG_NET_FC is not set
-# CONFIG_RCPCI is not set
-# CONFIG_SHAPER is not set
+# CONFIG_JOYSTICK is not set
 
 #
-# Wan interfaces
+# Input core support is needed for joysticks
 #
-# CONFIG_WAN is not set
+# CONFIG_QIC02_TAPE is not set
 
 #
-# ATA/IDE/MFM/RLL support
+# Watchdog Cards
 #
-CONFIG_IDE=y
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+CONFIG_SOFT_WATCHDOG=y
+# CONFIG_WDT is not set
+# CONFIG_WDTPCI is not set
+# CONFIG_PCWATCHDOG is not set
+# CONFIG_ACQUIRE_WDT is not set
+# CONFIG_60XX_WDT is not set
+# CONFIG_MIXCOMWD is not set
+# CONFIG_I810_TCO is not set
+CONFIG_21285_WATCHDOG=m
+CONFIG_977_WATCHDOG=m
+CONFIG_DS1620=y
+CONFIG_NWBUTTON=y
+CONFIG_NWBUTTON_REBOOT=y
+CONFIG_NWFLASH=m
+# CONFIG_INTEL_RNG is not set
+CONFIG_NVRAM=m
+CONFIG_RTC=y
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
 
 #
-# IDE, ATA and ATAPI Block devices
+# Ftape, the floppy tape device driver
 #
-CONFIG_BLK_DEV_IDE=y
+# CONFIG_FTAPE is not set
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
 
 #
-# Please see Documentation/ide.txt for help/info on IDE drives
+# Multimedia devices
 #
-# CONFIG_BLK_DEV_HD_IDE is not set
-# CONFIG_BLK_DEV_HD is not set
-CONFIG_BLK_DEV_IDEDISK=y
-CONFIG_IDEDISK_MULTI_MODE=y
-# CONFIG_BLK_DEV_IDECS is not set
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
+CONFIG_VIDEO_DEV=m
 
 #
-# IDE chipset support/bugfixes
+# Video For Linux
 #
-# CONFIG_BLK_DEV_CMD640 is not set
-# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
-# CONFIG_BLK_DEV_ISAPNP is not set
-# CONFIG_BLK_DEV_RZ1000 is not set
-CONFIG_BLK_DEV_IDEPCI=y
-CONFIG_IDEPCI_SHARE_IRQ=y
-CONFIG_BLK_DEV_IDEDMA_PCI=y
-CONFIG_BLK_DEV_OFFBOARD=y
-CONFIG_IDEDMA_PCI_AUTO=y
-CONFIG_BLK_DEV_IDEDMA=y
-CONFIG_IDEDMA_PCI_EXPERIMENTAL=y
-# CONFIG_IDEDMA_PCI_WIP is not set
-# CONFIG_IDEDMA_NEW_DRIVE_LISTINGS is not set
-# CONFIG_BLK_DEV_AEC62XX is not set
-# CONFIG_AEC62XX_TUNING is not set
-# CONFIG_BLK_DEV_ALI15X3 is not set
-# CONFIG_WDC_ALI15X3 is not set
-# CONFIG_BLK_DEV_AMD7409 is not set
-# CONFIG_AMD7409_OVERRIDE is not set
-# CONFIG_BLK_DEV_CMD64X is not set
-# CONFIG_CMD64X_RAID is not set
-CONFIG_BLK_DEV_CY82C693=y
-# CONFIG_BLK_DEV_CS5530 is not set
-# CONFIG_BLK_DEV_HPT34X is not set
-# CONFIG_HPT34X_AUTODMA is not set
-# CONFIG_BLK_DEV_HPT366 is not set
-# CONFIG_HPT366_FIP is not set
-# CONFIG_HPT366_MODE3 is not set
-# CONFIG_BLK_DEV_NS87415 is not set
-# CONFIG_BLK_DEV_OPTI621 is not set
-CONFIG_BLK_DEV_PDC202XX=y
-# CONFIG_PDC202XX_BURST is not set
-# CONFIG_PDC202XX_MASTER is not set
-# CONFIG_BLK_DEV_SIS5513 is not set
-# CONFIG_BLK_DEV_TRM290 is not set
-# CONFIG_BLK_DEV_VIA82CXXX is not set
-# CONFIG_VIA82CXXX_TUNING is not set
-CONFIG_BLK_DEV_SL82C105=y
-# CONFIG_IDE_CHIPSETS is not set
-CONFIG_IDEDMA_AUTO=y
-CONFIG_BLK_DEV_IDE_MODES=y
+CONFIG_VIDEO_PROC_FS=y
+# CONFIG_I2C_PARPORT is not set
 
 #
-# SCSI support
+# Video Adapters
 #
-# CONFIG_SCSI is not set
+# CONFIG_VIDEO_PMS is not set
+# CONFIG_VIDEO_BWQCAM is not set
+# CONFIG_VIDEO_CQCAM is not set
+# CONFIG_VIDEO_CPIA is not set
+# CONFIG_VIDEO_SAA5249 is not set
+# CONFIG_TUNER_3036 is not set
+# CONFIG_VIDEO_STRADIS is not set
+# CONFIG_VIDEO_ZORAN is not set
+# CONFIG_VIDEO_BUZ is not set
+# CONFIG_VIDEO_ZR36120 is not set
+CONFIG_VIDEO_CYBERPRO=m
 
 #
-# Sound
+# Radio Adapters
 #
-CONFIG_SOUND=m
-# CONFIG_SOUND_CMPCI is not set
-# CONFIG_SOUND_EMU10K1 is not set
-# CONFIG_SOUND_ES1370 is not set
-# CONFIG_SOUND_ES1371 is not set
-# CONFIG_SOUND_ESSSOLO1 is not set
-# CONFIG_SOUND_MAESTRO is not set
-# CONFIG_SOUND_SONICVIBES is not set
-# CONFIG_SOUND_TRIDENT is not set
-# CONFIG_SOUND_MSNDCLAS is not set
-# CONFIG_SOUND_MSNDPIN is not set
-# CONFIG_SOUND_VIA82CXXX is not set
-CONFIG_SOUND_OSS=m
-# CONFIG_SOUND_TRACEINIT is not set
-# CONFIG_SOUND_DMAP is not set
-# CONFIG_SOUND_AD1816 is not set
-# CONFIG_SOUND_SGALAXY is not set
-CONFIG_SOUND_ADLIB=m
-# CONFIG_SOUND_ACI_MIXER is not set
-# CONFIG_SOUND_CS4232 is not set
-# CONFIG_SOUND_SSCAPE is not set
-# CONFIG_SOUND_GUS is not set
-# CONFIG_SOUND_ICH is not set
-# CONFIG_SOUND_VMIDI is not set
-# CONFIG_SOUND_TRIX is not set
-# CONFIG_SOUND_MSS is not set
-# CONFIG_SOUND_MPU401 is not set
-# CONFIG_SOUND_NM256 is not set
-# CONFIG_SOUND_MAD16 is not set
-# CONFIG_SOUND_PAS is not set
-# CONFIG_PAS_JOYSTICK is not set
-# CONFIG_SOUND_PSS is not set
-# CONFIG_SOUND_SOFTOSS is not set
-CONFIG_SOUND_SB=m
-# CONFIG_SOUND_AWE32_SYNTH is not set
-# CONFIG_SOUND_WAVEFRONT is not set
-# CONFIG_SOUND_MAUI is not set
-# CONFIG_SOUND_YM3812 is not set
-# CONFIG_SOUND_OPL3SA1 is not set
-# CONFIG_SOUND_OPL3SA2 is not set
-# CONFIG_SOUND_UART6850 is not set
-# CONFIG_SOUND_AEDSP16 is not set
-# CONFIG_SOUND_VIDC is not set
-CONFIG_SOUND_WAVEARTIST=m
+# CONFIG_RADIO_CADET is not set
+# CONFIG_RADIO_RTRACK is not set
+# CONFIG_RADIO_RTRACK2 is not set
+# CONFIG_RADIO_AZTECH is not set
+# CONFIG_RADIO_GEMTEK is not set
+# CONFIG_RADIO_MAESTRO is not set
+# CONFIG_RADIO_MIROPCM20 is not set
+# CONFIG_RADIO_SF16FMI is not set
+# CONFIG_RADIO_TERRATEC is not set
+# CONFIG_RADIO_TRUST is not set
+# CONFIG_RADIO_TYPHOON is not set
+# CONFIG_RADIO_ZOLTRIX is not set
 
 #
 # File systems
@@ -647,6+620,7 @@ CONFIG_MSDOS_FS=m
 # CONFIG_UMSDOS_FS is not set
 CONFIG_VFAT_FS=m
 # CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
 # CONFIG_CRAMFS is not set
 # CONFIG_RAMFS is not set
 CONFIG_ISO9660_FS=m
@@ -713,12+687,14 @@ CONFIG_MSDOS_PARTITION=y
 # CONFIG_SOLARIS_X86_PARTITION is not set
 # CONFIG_UNIXWARE_DISKLABEL is not set
 # CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
 # CONFIG_SUN_PARTITION is not set
 CONFIG_NLS=y
 
 #
 # Native Language Support
 #
+CONFIG_NLS_DEFAULT="iso8859-1"
 CONFIG_NLS_CODEPAGE_437=m
 # CONFIG_NLS_CODEPAGE_737 is not set
 # CONFIG_NLS_CODEPAGE_775 is not set
@@ -735,6+711,10 @@ CONFIG_NLS_CODEPAGE_852=m
 # CONFIG_NLS_CODEPAGE_866 is not set
 # CONFIG_NLS_CODEPAGE_869 is not set
 # CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
 CONFIG_NLS_ISO8859_1=m
 CONFIG_NLS_ISO8859_2=m
 # CONFIG_NLS_ISO8859_3 is not set
@@ -747,6+727,110 @@ CONFIG_NLS_ISO8859_2=m
 # CONFIG_NLS_ISO8859_14 is not set
 CONFIG_NLS_ISO8859_15=m
 # CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_UTF8 is not set
+
+#
+# Console drivers
+#
+CONFIG_PC_KEYB=y
+CONFIG_PC_KEYMAP=y
+CONFIG_VGA_CONSOLE=y
+CONFIG_FB=y
+
+#
+# Frame-buffer support
+#
+CONFIG_FB=y
+CONFIG_DUMMY_CONSOLE=y
+# CONFIG_FB_RIVA is not set
+# CONFIG_FB_CLGEN is not set
+# CONFIG_FB_PM2 is not set
+# CONFIG_FB_ACORN is not set
+# CONFIG_FB_CLPS711X is not set
+CONFIG_FB_CYBER2000=y
+# CONFIG_FB_SA1100 is not set
+# CONFIG_FB_MATROX is not set
+# CONFIG_FB_ATY is not set
+# CONFIG_FB_ATY128 is not set
+# CONFIG_FB_3DFX is not set
+# CONFIG_FB_SIS is not set
+# CONFIG_FB_VIRTUAL is not set
+CONFIG_FBCON_ADVANCED=y
+# CONFIG_FBCON_MFB is not set
+# CONFIG_FBCON_CFB2 is not set
+# CONFIG_FBCON_CFB4 is not set
+CONFIG_FBCON_CFB8=y
+CONFIG_FBCON_CFB16=y
+CONFIG_FBCON_CFB24=y
+# CONFIG_FBCON_CFB32 is not set
+# CONFIG_FBCON_AFB is not set
+# CONFIG_FBCON_ILBM is not set
+# CONFIG_FBCON_IPLAN2P2 is not set
+# CONFIG_FBCON_IPLAN2P4 is not set
+# CONFIG_FBCON_IPLAN2P8 is not set
+# CONFIG_FBCON_MAC is not set
+# CONFIG_FBCON_VGA_PLANES is not set
+CONFIG_FBCON_VGA=y
+# CONFIG_FBCON_HGA is not set
+# CONFIG_FBCON_FONTWIDTH8_ONLY is not set
+CONFIG_FBCON_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+CONFIG_FONT_ACORN_8x8=y
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+# CONFIG_SOUND_CMPCI is not set
+# CONFIG_SOUND_EMU10K1 is not set
+# CONFIG_SOUND_FUSION is not set
+# CONFIG_SOUND_CS4281 is not set
+# CONFIG_SOUND_ES1370 is not set
+# CONFIG_SOUND_ES1371 is not set
+# CONFIG_SOUND_ESSSOLO1 is not set
+# CONFIG_SOUND_MAESTRO is not set
+# CONFIG_SOUND_SONICVIBES is not set
+# CONFIG_SOUND_TRIDENT is not set
+# CONFIG_SOUND_MSNDCLAS is not set
+# CONFIG_SOUND_MSNDPIN is not set
+# CONFIG_SOUND_VIA82CXXX is not set
+CONFIG_SOUND_OSS=m
+# CONFIG_SOUND_TRACEINIT is not set
+# CONFIG_SOUND_DMAP is not set
+# CONFIG_SOUND_AD1816 is not set
+# CONFIG_SOUND_SGALAXY is not set
+CONFIG_SOUND_ADLIB=m
+# CONFIG_SOUND_ACI_MIXER is not set
+# CONFIG_SOUND_CS4232 is not set
+# CONFIG_SOUND_SSCAPE is not set
+# CONFIG_SOUND_GUS is not set
+# CONFIG_SOUND_ICH is not set
+# CONFIG_SOUND_VMIDI is not set
+# CONFIG_SOUND_TRIX is not set
+# CONFIG_SOUND_MSS is not set
+# CONFIG_SOUND_MPU401 is not set
+# CONFIG_SOUND_NM256 is not set
+# CONFIG_SOUND_MAD16 is not set
+# CONFIG_SOUND_PAS is not set
+# CONFIG_PAS_JOYSTICK is not set
+# CONFIG_SOUND_PSS is not set
+CONFIG_SOUND_SB=m
+# CONFIG_SOUND_AWE32_SYNTH is not set
+# CONFIG_SOUND_WAVEFRONT is not set
+# CONFIG_SOUND_MAUI is not set
+# CONFIG_SOUND_YM3812 is not set
+# CONFIG_SOUND_OPL3SA1 is not set
+# CONFIG_SOUND_OPL3SA2 is not set
+# CONFIG_SOUND_YMPCI is not set
+# CONFIG_SOUND_UART6850 is not set
+# CONFIG_SOUND_AEDSP16 is not set
+CONFIG_SOUND_WAVEARTIST=m
+# CONFIG_SOUND_TVMIXER is not set
 
 #
 # USB support
@@ -757,7+841,8 @@ CONFIG_USB_DEBUG=y
 #
 # Miscellaneous USB options
 #
-# CONFIG_USB_DEVICEFS is not set
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
 
 #
 # USB Controllers
@@ -770,7+855,8 @@ CONFIG_USB_OHCI=m
 # USB Devices
 #
 CONFIG_USB_PRINTER=m
-CONFIG_USB_SCANNER=m
+# CONFIG_USB_SCANNER is not set
+# CONFIG_USB_MICROTEK is not set
 CONFIG_USB_AUDIO=m
 # CONFIG_USB_ACM is not set
 # CONFIG_USB_SERIAL is not set
@@ -785,19+871,16 @@ CONFIG_USB_AUDIO=m
 # CONFIG_USB_PEGASUS is not set
 # CONFIG_USB_RIO500 is not set
 # CONFIG_USB_DSBR is not set
+# CONFIG_USB_BLUETOOTH is not set
+# CONFIG_USB_NET1080 is not set
+
+#
+# USB Human Interface Devices (HID)
+#
 
 #
-# USB HID
+#   Input core support is needed for USB HID
 #
-# CONFIG_USB_HID is not set
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-# CONFIG_USB_WACOM is not set
-# CONFIG_USB_WMFORCE is not set
-# CONFIG_INPUT_KEYBDEV is not set
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_EVDEV is not set
 
 #
 # Kernel hacking
similarity index 84%
copy from arch/arm/def-configs/assabet
copy to arch/arm/def-configs/graphicsclient
index 7a4cd17..92079d3 100644 (file)
@@ -12,57+12,73 @@ CONFIG_EXPERIMENTAL=y
 # CONFIG_OBSOLETE is not set
 
 #
+# Loadable module support
+#
+CONFIG_MODULES=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_KMOD is not set
+
+#
 # System Type
 #
-# CONFIG_ARCH_ARC is not set
-# CONFIG_ARCH_A5K is not set
+# CONFIG_ARCH_ARCA5K is not set
+# CONFIG_ARCH_CLPS7500 is not set
 # CONFIG_ARCH_CO285 is not set
 # CONFIG_ARCH_EBSA110 is not set
 # CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_INTEGRATOR is not set
 # CONFIG_ARCH_RPC is not set
 CONFIG_ARCH_SA1100=y
 
 #
+# Archimedes/A5000 Implementations
+#
+
+#
+# Footbridge Implementations
+#
+
+#
 # SA11x0 Implementations
 #
-CONFIG_SA1100_ASSABET=y
-# CONFIG_ASSABET_NEPONSET is not set
+# CONFIG_SA1100_ASSABET is not set
 # CONFIG_SA1100_BRUTUS is not set
+# CONFIG_SA1100_CERF is not set
 # CONFIG_SA1100_BITSY is not set
 # CONFIG_SA1100_LART is not set
-# CONFIG_SA1100_THINCLIENT is not set
-# CONFIG_SA1100_GRAPHICSCLIENT is not set
+CONFIG_SA1100_GRAPHICSCLIENT=y
+# CONFIG_SA1100_NANOENGINE is not set
 # CONFIG_SA1100_VICTOR is not set
-CONFIG_ANGELBOOT=y
+# CONFIG_SA1100_SHERMAN is not set
+# CONFIG_SA1100_XP860 is not set
+# CONFIG_ANGELBOOT is not set
 # CONFIG_SA1100_FREQUENCY_SCALE is not set
 # CONFIG_SA1100_VOLTAGE_SCALE is not set
-CONFIG_CPU_32=y
-# CONFIG_CPU_26 is not set
-CONFIG_CPU_32v4=y
-CONFIG_CPU_SA1100=y
 # CONFIG_ARCH_ACORN is not set
 # CONFIG_FOOTBRIDGE is not set
 # CONFIG_FOOTBRIDGE_HOST is not set
 # CONFIG_FOOTBRIDGE_ADDIN is not set
-CONFIG_DISCONTIGMEM=y
-# CONFIG_PCI is not set
-# CONFIG_ISA is not set
-# CONFIG_ISA_DMA is not set
+CONFIG_CPU_32=y
+# CONFIG_CPU_26 is not set
 
 #
-# Loadable module support
+# Processor Type
 #
-CONFIG_MODULES=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_KMOD is not set
+CONFIG_CPU_32v4=y
+CONFIG_CPU_SA1100=y
+CONFIG_DISCONTIGMEM=y
 
 #
 # General setup
 #
+# CONFIG_PCI is not set
+# CONFIG_ISA is not set
+# CONFIG_ISA_DMA is not set
+CONFIG_PC_KEYMAP=y
 CONFIG_HOTPLUG=y
 
 #
-# PC Card support
+# PCMCIA/CardBus support
 #
 CONFIG_PCMCIA=y
 # CONFIG_PCMCIA_DEBUG is not set
@@ -80,10+96,8 @@ CONFIG_BINFMT_ELF=y
 # CONFIG_BINFMT_MISC is not set
 # CONFIG_PM is not set
 # CONFIG_ARTHUR is not set
-CONFIG_CMDLINE="keepinitrd"
-CONFIG_LEDS=y
-CONFIG_LEDS_TIMER=y
-CONFIG_LEDS_CPU=y
+CONFIG_CMDLINE="root=nfs"
+# CONFIG_LEDS is not set
 CONFIG_ALIGNMENT_TRAP=y
 
 #
@@ -119,14+133,15 @@ CONFIG_ALIGNMENT_TRAP=y
 # CONFIG_MD_RAID1 is not set
 # CONFIG_MD_RAID5 is not set
 CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BLK_DEV_RAM_SIZE=8192
 CONFIG_BLK_DEV_INITRD=y
 # CONFIG_BLK_DEV_FLASH is not set
 
 #
 # Networking options
 #
-# CONFIG_PACKET is not set
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
 # CONFIG_NETLINK is not set
 # CONFIG_NETFILTER is not set
 # CONFIG_FILTER is not set
@@ -134,17+149,13 @@ CONFIG_UNIX=y
 CONFIG_INET=y
 # CONFIG_IP_MULTICAST is not set
 # CONFIG_IP_ADVANCED_ROUTER is not set
-# CONFIG_IP_PNP is not set
-# CONFIG_IP_ROUTER is not set
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
 # CONFIG_NET_IPIP is not set
 # CONFIG_NET_IPGRE is not set
-# CONFIG_IP_ALIAS is not set
+# CONFIG_INET_ECN is not set
 # CONFIG_SYN_COOKIES is not set
-
-#
-# (it is safe to leave these untouched)
-#
-CONFIG_SKB_LARGE=y
 # CONFIG_IPV6 is not set
 # CONFIG_KHTTPD is not set
 # CONFIG_ATM is not set
@@ -181,6+192,7 @@ CONFIG_NETDEVICES=y
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
 # CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
 # CONFIG_NET_SB1000 is not set
 
 #
@@ -190,7+202,11 @@ CONFIG_NET_ETHERNET=y
 # CONFIG_ARM_AM79C961A is not set
 # CONFIG_NET_VENDOR_3COM is not set
 # CONFIG_LANCE is not set
-# CONFIG_NET_VENDOR_SMC is not set
+CONFIG_NET_VENDOR_SMC=y
+# CONFIG_WD80x3 is not set
+# CONFIG_ULTRA is not set
+# CONFIG_ULTRA32 is not set
+CONFIG_SMC9194=y
 # CONFIG_NET_VENDOR_RACAL is not set
 # CONFIG_AT1700 is not set
 # CONFIG_DEPCA is not set
@@ -234,14+250,13 @@ CONFIG_NET_PCMCIA=y
 # CONFIG_PCMCIA_3C589 is not set
 # CONFIG_PCMCIA_3C574 is not set
 # CONFIG_PCMCIA_FMVJ18X is not set
-CONFIG_PCMCIA_PCNET=y
+CONFIG_PCMCIA_PCNET=m
 # CONFIG_PCMCIA_NMCLAN is not set
 # CONFIG_PCMCIA_SMC91C92 is not set
 # CONFIG_PCMCIA_XIRC2PS is not set
 # CONFIG_ARCNET_COM20020_CS is not set
 # CONFIG_PCMCIA_IBMTR is not set
 # CONFIG_NET_PCMCIA_RADIO is not set
-CONFIG_PCMCIA_NETCARD=y
 
 #
 # Amateur Radio support
@@ -256,19+271,19 @@ CONFIG_PCMCIA_NETCARD=y
 #
 # ATA/IDE/MFM/RLL support
 #
-CONFIG_IDE=y
+CONFIG_IDE=m
 
 #
 # IDE, ATA and ATAPI Block devices
 #
-CONFIG_BLK_DEV_IDE=y
+CONFIG_BLK_DEV_IDE=m
 
 #
 # Please see Documentation/ide.txt for help/info on IDE drives
 #
 # CONFIG_BLK_DEV_HD_IDE is not set
 # CONFIG_BLK_DEV_HD is not set
-CONFIG_BLK_DEV_IDEDISK=y
+CONFIG_BLK_DEV_IDEDISK=m
 # CONFIG_IDEDISK_MULTI_MODE is not set
 # CONFIG_BLK_DEV_IDEDISK_VENDOR is not set
 # CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set
@@ -279,7+294,7 @@ CONFIG_BLK_DEV_IDEDISK=y
 # CONFIG_BLK_DEV_IDEDISK_WD is not set
 # CONFIG_BLK_DEV_COMMERIAL is not set
 # CONFIG_BLK_DEV_TIVO is not set
-CONFIG_BLK_DEV_IDECS=y
+CONFIG_BLK_DEV_IDECS=m
 # CONFIG_BLK_DEV_IDECD is not set
 # CONFIG_BLK_DEV_IDETAPE is not set
 # CONFIG_BLK_DEV_IDEFLOPPY is not set
@@ -320,13+335,14 @@ CONFIG_BLK_DEV_IDECS=y
 #
 CONFIG_VT=y
 # CONFIG_VT_CONSOLE is not set
-CONFIG_SERIAL_SA1100=y
-CONFIG_SERIAL_SA1100_CONSOLE=y
-# CONFIG_TOUCHSCREEN_SA1100 is not set
-# CONFIG_TOUCHSCREEN_BITSY is not set
 # CONFIG_SERIAL is not set
 # CONFIG_SERIAL_EXTENDED is not set
 # CONFIG_SERIAL_NONSTANDARD is not set
+CONFIG_SERIAL_SA1100=y
+CONFIG_SERIAL_SA1100_CONSOLE=y
+CONFIG_SA1100_DEFAULT_BAUDRATE=38400
+# CONFIG_TOUCHSCREEN_UCB1200 is not set
+# CONFIG_TOUCHSCREEN_BITSY is not set
 CONFIG_UNIX98_PTYS=y
 CONFIG_UNIX98_PTY_COUNT=32
 
@@ -345,6+361,10 @@ CONFIG_UNIX98_PTY_COUNT=32
 # Joysticks
 #
 # CONFIG_JOYSTICK is not set
+
+#
+# Input core support is needed for joysticks
+#
 # CONFIG_QIC02_TAPE is not set
 
 #
@@ -354,11+374,6 @@ CONFIG_UNIX98_PTY_COUNT=32
 # CONFIG_INTEL_RNG is not set
 # CONFIG_NVRAM is not set
 # CONFIG_RTC is not set
-
-#
-# Video For Linux
-#
-# CONFIG_VIDEO_DEV is not set
 # CONFIG_DTLK is not set
 # CONFIG_R3964 is not set
 # CONFIG_APPLICOM is not set
@@ -367,10+382,9 @@ CONFIG_UNIX98_PTY_COUNT=32
 # Ftape, the floppy tape device driver
 #
 # CONFIG_FTAPE is not set
+# CONFIG_AGP is not set
 # CONFIG_DRM is not set
-# CONFIG_DRM_TDFX is not set
 # CONFIG_PCMCIA_SERIAL is not set
-# CONFIG_AGP is not set
 
 #
 # File systems
@@ -383,14+397,14 @@ CONFIG_UNIX98_PTY_COUNT=32
 # CONFIG_AFFS_FS is not set
 # CONFIG_HFS_FS is not set
 # CONFIG_BFS_FS is not set
-CONFIG_FAT_FS=y
-CONFIG_MSDOS_FS=y
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
 # CONFIG_UMSDOS_FS is not set
-# CONFIG_VFAT_FS is not set
+CONFIG_VFAT_FS=m
 # CONFIG_EFS_FS is not set
 # CONFIG_JFFS_FS is not set
 # CONFIG_CRAMFS is not set
-# CONFIG_RAMFS is not set
+CONFIG_RAMFS=y
 # CONFIG_ISO9660_FS is not set
 # CONFIG_JOLIET is not set
 # CONFIG_MINIX_FS is not set
@@ -419,7+433,7 @@ CONFIG_EXT2_FS=y
 # CONFIG_CODA_FS is not set
 CONFIG_NFS_FS=y
 # CONFIG_NFS_V3 is not set
-# CONFIG_ROOT_NFS is not set
+CONFIG_ROOT_NFS=y
 # CONFIG_NFSD is not set
 # CONFIG_NFSD_V3 is not set
 CONFIG_SUNRPC=y
@@ -440,24+454,15 @@ CONFIG_LOCKD=y
 #
 # Partition Types
 #
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ATARI_PARTITION is not set
-# CONFIG_MAC_PARTITION is not set
+# CONFIG_PARTITION_ADVANCED is not set
 CONFIG_MSDOS_PARTITION=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_UNIXWARE_DISKLABEL is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_SUN_PARTITION is not set
 CONFIG_NLS=y
 
 #
 # Native Language Support
 #
-CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+# CONFIG_NLS_CODEPAGE_437 is not set
 # CONFIG_NLS_CODEPAGE_737 is not set
 # CONFIG_NLS_CODEPAGE_775 is not set
 # CONFIG_NLS_CODEPAGE_850 is not set
@@ -473,6+478,10 @@ CONFIG_NLS_CODEPAGE_437=y
 # CONFIG_NLS_CODEPAGE_866 is not set
 # CONFIG_NLS_CODEPAGE_869 is not set
 # CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
 # CONFIG_NLS_ISO8859_1 is not set
 # CONFIG_NLS_ISO8859_2 is not set
 # CONFIG_NLS_ISO8859_3 is not set
@@ -485,6+494,7 @@ CONFIG_NLS_CODEPAGE_437=y
 # CONFIG_NLS_ISO8859_14 is not set
 # CONFIG_NLS_ISO8859_15 is not set
 # CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_UTF8 is not set
 
 #
 # Console drivers
@@ -497,6+507,7 @@ CONFIG_FB=y
 #
 CONFIG_FB=y
 CONFIG_DUMMY_CONSOLE=y
+# CONFIG_FB_CYBER2000 is not set
 CONFIG_FB_SA1100=y
 # CONFIG_FB_VIRTUAL is not set
 # CONFIG_FBCON_ADVANCED is not set
@@ -506,8+517,8 @@ CONFIG_FBCON_CFB8=y
 CONFIG_FBCON_CFB16=y
 CONFIG_FBCON_FONTWIDTH8_ONLY=y
 CONFIG_FBCON_FONTS=y
-CONFIG_FONT_8x8=y
-# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_8x8 is not set
+CONFIG_FONT_8x16=y
 # CONFIG_FONT_SUN8x16 is not set
 # CONFIG_FONT_PEARL_8x8 is not set
 # CONFIG_FONT_ACORN_8x8 is not set
@@ -515,21+526,7 @@ CONFIG_FONT_8x8=y
 #
 # Sound
 #
-CONFIG_SOUND=y
-CONFIG_SOUND_UDA1341=y
-# CONFIG_SOUND_CMPCI is not set
-# CONFIG_SOUND_EMU10K1 is not set
-# CONFIG_SOUND_ES1370 is not set
-# CONFIG_SOUND_ES1371 is not set
-# CONFIG_SOUND_ESSSOLO1 is not set
-# CONFIG_SOUND_MAESTRO is not set
-# CONFIG_SOUND_SONICVIBES is not set
-# CONFIG_SOUND_TRIDENT is not set
-# CONFIG_SOUND_MSNDCLAS is not set
-# CONFIG_SOUND_MSNDPIN is not set
-# CONFIG_SOUND_VIA82CXXX is not set
-# CONFIG_SOUND_OSS is not set
-# CONFIG_SOUND_TVMIXER is not set
+# CONFIG_SOUND is not set
 
 #
 # USB support
similarity index 60%
copy from arch/arm/def-configs/ebsa110
copy to arch/arm/def-configs/integrator
index c2c7e0d..07133bf 100644 (file)
 #
-# Automatically generated by make menuconfig: don't edit
+# Automatically generated make config: don't edit
 #
 CONFIG_ARM=y
+# CONFIG_EISA is not set
 # CONFIG_SBUS is not set
+# CONFIG_MCA is not set
 CONFIG_UID16=y
 
 #
 # Code maturity level options
 #
 CONFIG_EXPERIMENTAL=y
+# CONFIG_OBSOLETE is not set
+
+#
+# Loadable module support
+#
+# CONFIG_MODULES is not set
 
 #
 # System Type
 #
-# CONFIG_ARCH_ARC is not set
-# CONFIG_ARCH_A5K is not set
+# CONFIG_ARCH_ARCA5K is not set
+# CONFIG_ARCH_CLPS7500 is not set
 # CONFIG_ARCH_CO285 is not set
-CONFIG_ARCH_EBSA110=y
+# CONFIG_ARCH_EBSA110 is not set
 # CONFIG_ARCH_FOOTBRIDGE is not set
+CONFIG_ARCH_INTEGRATOR=y
 # CONFIG_ARCH_RPC is not set
 # CONFIG_ARCH_SA1100 is not set
-CONFIG_CPU_32=y
-# CONFIG_CPU_26 is not set
-CONFIG_CPU_32v4=y
-CONFIG_CPU_SA110=y
+# CONFIG_ARCH_CLPS711X is not set
+
+#
+# Archimedes/A5000 Implementations
+#
+
+#
+# Footbridge Implementations
+#
+
+#
+# SA11x0 Implementations
+#
+
+#
+# CLPS711X/EP721X Implementations
+#
 # CONFIG_ARCH_ACORN is not set
 # CONFIG_FOOTBRIDGE is not set
 # CONFIG_FOOTBRIDGE_HOST is not set
 # CONFIG_FOOTBRIDGE_ADDIN is not set
-# CONFIG_DISCONTIGMEM is not set
-# CONFIG_PCI is not set
-# CONFIG_ISA is not set
-# CONFIG_ISA_DMA is not set
+CONFIG_CPU_32=y
+# CONFIG_CPU_26 is not set
 
 #
-# Loadable module support
+# Processor Type
 #
-CONFIG_MODULES=y
-# CONFIG_MODVERSIONS is not set
-CONFIG_KMOD=y
+CONFIG_CPU_32v4=y
+CONFIG_CPU_ARM720=y
+CONFIG_CPU_ARM920=y
+CONFIG_CPU_ARM920_CPU_IDLE=y
+CONFIG_CPU_ARM920_I_CACHE_ON=y
+CONFIG_CPU_ARM920_D_CACHE_ON=y
+# CONFIG_CPU_ARM920_WRITETHROUGH is not set
+# CONFIG_DISCONTIGMEM is not set
 
 #
 # General setup
 #
+# CONFIG_ANGELBOOT is not set
+CONFIG_PCI_INTEGRATOR=y
+CONFIG_PCI=y
+# CONFIG_ISA is not set
+# CONFIG_ISA_DMA is not set
+CONFIG_PCI_NAMES=y
 # CONFIG_HOTPLUG is not set
 # CONFIG_PCMCIA is not set
 CONFIG_NET=y
 CONFIG_SYSVIPC=y
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
-# CONFIG_NWFPE is not set
+CONFIG_NWFPE=y
 CONFIG_KCORE_ELF=y
 # CONFIG_KCORE_AOUT is not set
 CONFIG_BINFMT_AOUT=y
 CONFIG_BINFMT_ELF=y
 # CONFIG_BINFMT_MISC is not set
+# CONFIG_PM is not set
 # CONFIG_ARTHUR is not set
-CONFIG_CMDLINE="root=/dev/nfs rw mem=16M console=ttyS1,38400n8"
+CONFIG_CMDLINE="root=1f04 mem=32M"
 CONFIG_LEDS=y
 CONFIG_LEDS_TIMER=y
+CONFIG_LEDS_CPU=y
+CONFIG_ALIGNMENT_TRAP=y
 
 #
 # Parallel port support
 #
-CONFIG_PARPORT=y
-CONFIG_PARPORT_PC=y
-CONFIG_PARPORT_PC_FIFO=y
-CONFIG_PARPORT_PC_SUPERIO=y
-# CONFIG_PARPORT_ARC is not set
-# CONFIG_PARPORT_AMIGA is not set
-# CONFIG_PARPORT_MFC3 is not set
-# CONFIG_PARPORT_ATARI is not set
-# CONFIG_PARPORT_SUNBPP is not set
-# CONFIG_PARPORT_OTHER is not set
-CONFIG_PARPORT_1284=y
+# CONFIG_PARPORT is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DOC1000 is not set
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOCPROBE is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_MTDRAM is not set
+
+#
+# MTD drivers for mapped chips
+#
+CONFIG_MTD_CFI=y
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_JEDEC is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_PHYSMAP is not set
+
+#
+# Drivers for chip mappings
+#
+# CONFIG_MTD_MIXMEM is not set
+# CONFIG_MTD_NORA is not set
+# CONFIG_MTD_OCTAGON is not set
+# CONFIG_MTD_PNC2000 is not set
+# CONFIG_MTD_RPXLITE is not set
+# CONFIG_MTD_VMAX is not set
+
+#
+# User modules and translation layers for MTD devices
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+CONFIG_MTD_ARM=y
 
 #
 # Plug and Play configuration
@@ -88,85+154,39 @@ CONFIG_PARPORT_1284=y
 # CONFIG_BLK_DEV_XD is not set
 # CONFIG_PARIDE is not set
 # CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
 # CONFIG_BLK_DEV_DAC960 is not set
 # CONFIG_BLK_DEV_LOOP is not set
 # CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_LVM is not set
-# CONFIG_BLK_DEV_MD is not set
-# CONFIG_MD_LINEAR is not set
-# CONFIG_MD_RAID0 is not set
-# CONFIG_RAID15_DANGEROUS is not set
 CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_SIZE=4096
 # CONFIG_BLK_DEV_INITRD is not set
 
 #
 # Networking options
 #
-CONFIG_PACKET=m
-# CONFIG_PACKET_MMAP is not set
-CONFIG_NETLINK=y
-CONFIG_RTNETLINK=y
-# CONFIG_NETLINK_DEV is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
+# CONFIG_PACKET is not set
+# CONFIG_NETLINK is not set
+# CONFIG_NETFILTER is not set
 # CONFIG_FILTER is not set
 CONFIG_UNIX=y
 CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-CONFIG_IP_ADVANCED_ROUTER=y
-CONFIG_RTNETLINK=y
-CONFIG_NETLINK=y
-CONFIG_IP_MULTIPLE_TABLES=y
-CONFIG_IP_ROUTE_FWMARK=y
-CONFIG_IP_ROUTE_NAT=y
-# CONFIG_IP_ROUTE_MULTIPATH is not set
-# CONFIG_IP_ROUTE_TOS is not set
-CONFIG_IP_ROUTE_VERBOSE=y
-# CONFIG_IP_ROUTE_LARGE_TABLES is not set
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
 CONFIG_IP_PNP=y
 CONFIG_IP_PNP_BOOTP=y
 # CONFIG_IP_PNP_RARP is not set
-# CONFIG_IP_ROUTER is not set
 # CONFIG_NET_IPIP is not set
 # CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-CONFIG_IP_ALIAS=y
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_SKB_LARGE is not set
-
-#
-#   IP: Netfilter Configuration
-#
-CONFIG_IP_NF_CONNTRACK=m
-CONFIG_IP_NF_FTP=m
-# CONFIG_IP_NF_QUEUE is not set
-CONFIG_IP_NF_IPTABLES=m
-CONFIG_IP_NF_MATCH_LIMIT=m
-# CONFIG_IP_NF_MATCH_MAC is not set
-CONFIG_IP_NF_MATCH_MARK=m
-CONFIG_IP_NF_MATCH_MULTIPORT=m
-CONFIG_IP_NF_MATCH_TOS=m
-CONFIG_IP_NF_MATCH_STATE=m
-CONFIG_IP_NF_MATCH_UNCLEAN=m
-# CONFIG_IP_NF_MATCH_OWNER is not set
-CONFIG_IP_NF_FILTER=m
-CONFIG_IP_NF_TARGET_REJECT=m
-# CONFIG_IP_NF_TARGET_MIRROR is not set
-CONFIG_IP_NF_NAT=m
-CONFIG_IP_NF_NAT_NEEDED=y
-CONFIG_IP_NF_TARGET_MASQUERADE=m
-CONFIG_IP_NF_TARGET_REDIRECT=m
-CONFIG_IP_NF_MANGLE=m
-CONFIG_IP_NF_TARGET_TOS=m
-CONFIG_IP_NF_TARGET_MARK=m
-CONFIG_IP_NF_TARGET_LOG=m
-CONFIG_IP_NF_COMPAT_IPCHAINS=m
-CONFIG_IP_NF_NAT_NEEDED=y
-# CONFIG_IP_NF_COMPAT_IPFWADM is not set
+# CONFIG_INET_ECN is not set
+# CONFIG_SYN_COOKIES is not set
 # CONFIG_IPV6 is not set
 # CONFIG_KHTTPD is not set
 # CONFIG_ATM is not set
+
+#
+#  
+#
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
 # CONFIG_DECNET is not set
@@ -174,6+194,7 @@ CONFIG_IP_NF_NAT_NEEDED=y
 # CONFIG_X25 is not set
 # CONFIG_LAPB is not set
 # CONFIG_LLC is not set
+# CONFIG_NET_DIVERT is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
 # CONFIG_NET_FASTROUTE is not set
@@ -196,40+217,58 @@ CONFIG_NETDEVICES=y
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
 # CONFIG_EQUALIZER is not set
-# CONFIG_ETHERTAP is not set
+# CONFIG_TUN is not set
 # CONFIG_NET_SB1000 is not set
 
 #
 # Ethernet (10 or 100Mbit)
 #
 CONFIG_NET_ETHERNET=y
-CONFIG_ARM_AM79C961A=y
 # CONFIG_NET_VENDOR_3COM is not set
 # CONFIG_LANCE is not set
 # CONFIG_NET_VENDOR_SMC is not set
 # CONFIG_NET_VENDOR_RACAL is not set
 # CONFIG_AT1700 is not set
 # CONFIG_DEPCA is not set
+# CONFIG_HP100 is not set
 # CONFIG_NET_ISA is not set
-# CONFIG_NET_PCI is not set
+CONFIG_NET_PCI=y
+# CONFIG_PCNET32 is not set
+# CONFIG_ADAPTEC_STARFIRE is not set
+# CONFIG_APRICOT is not set
+# CONFIG_CS89x0 is not set
+CONFIG_TULIP=y
+# CONFIG_DE4X5 is not set
+# CONFIG_DGRS is not set
+# CONFIG_DM9102 is not set
+CONFIG_EEPRO100=y
+CONFIG_EEPRO100_PM=y
+# CONFIG_LNE390 is not set
+# CONFIG_NATSEMI is not set
+# CONFIG_NE2K_PCI is not set
+# CONFIG_NE3210 is not set
+# CONFIG_ES3210 is not set
+# CONFIG_8139TOO is not set
+# CONFIG_RTL8129 is not set
+# CONFIG_SIS900 is not set
+# CONFIG_EPIC100 is not set
+# CONFIG_SUNDANCE is not set
+# CONFIG_TLAN is not set
+# CONFIG_VIA_RHINE is not set
+# CONFIG_WINBOND_840 is not set
+# CONFIG_HAPPYMEAL is not set
 # CONFIG_NET_POCKET is not set
 
 #
 # Ethernet (1000 Mbit)
 #
-# CONFIG_YELLOWFIN is not set
 # CONFIG_ACENIC is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
 # CONFIG_SK98LIN is not set
 # CONFIG_FDDI is not set
 # CONFIG_HIPPI is not set
-# CONFIG_PLIP is not set
-CONFIG_PPP=y
-# CONFIG_PPP_MULTILINK is not set
-CONFIG_PPP_ASYNC=y
-# CONFIG_PPP_SYNC_TTY is not set
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-# CONFIG_PPPOE is not set
+# CONFIG_PPP is not set
 # CONFIG_SLIP is not set
 
 #
@@ -273,9+312,15 @@ CONFIG_PPP_BSDCOMP=m
 # CONFIG_SCSI is not set
 
 #
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_IEEE1394 is not set
+
+#
 # I2O device support
 #
 # CONFIG_I2O is not set
+# CONFIG_I2O_PCI is not set
 # CONFIG_I2O_BLOCK is not set
 # CONFIG_I2O_LAN is not set
 # CONFIG_I2O_SCSI is not set
@@ -287,22+332,23 @@ CONFIG_PPP_BSDCOMP=m
 # CONFIG_ISDN is not set
 
 #
+# Input core support
+#
+# CONFIG_INPUT is not set
+
+#
 # Character devices
 #
-# CONFIG_VT is not set
-CONFIG_SERIAL=y
-CONFIG_SERIAL_CONSOLE=y
-CONFIG_SERIAL_EXTENDED=y
-# CONFIG_SERIAL_MANY_PORTS is not set
-# CONFIG_SERIAL_SHARE_IRQ is not set
-# CONFIG_SERIAL_DETECT_IRQ is not set
-# CONFIG_SERIAL_MULTIPORT is not set
-# CONFIG_HUB6 is not set
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+# CONFIG_SERIAL is not set
+# CONFIG_SERIAL_EXTENDED is not set
 # CONFIG_SERIAL_NONSTANDARD is not set
-# CONFIG_UNIX98_PTYS is not set
-CONFIG_PRINTER=m
-# CONFIG_LP_CONSOLE is not set
-# CONFIG_PPDEV is not set
+CONFIG_SERIAL_AMBA=y
+CONFIG_SERIAL_INTEGRATOR=y
+CONFIG_SERIAL_AMBA_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_UNIX98_PTY_COUNT=256
 
 #
 # I2C support
@@ -313,32+359,28 @@ CONFIG_PRINTER=m
 # Mice
 #
 # CONFIG_BUSMOUSE is not set
-# CONFIG_MOUSE is not set
+CONFIG_MOUSE=y
+CONFIG_PSMOUSE=y
+# CONFIG_82C710_MOUSE is not set
+# CONFIG_PC110_PAD is not set
 
 #
 # Joysticks
 #
 # CONFIG_JOYSTICK is not set
+
+#
+# Input core support is needed for joysticks
+#
 # CONFIG_QIC02_TAPE is not set
 
 #
 # Watchdog Cards
 #
-CONFIG_WATCHDOG=y
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-# CONFIG_WDT is not set
-# CONFIG_WDTPCI is not set
-CONFIG_SOFT_WATCHDOG=y
-# CONFIG_PCWATCHDOG is not set
-# CONFIG_ACQUIRE_WDT is not set
-# CONFIG_MIXCOMWD is not set
+# CONFIG_WATCHDOG is not set
+# CONFIG_INTEL_RNG is not set
 # CONFIG_NVRAM is not set
 # CONFIG_RTC is not set
-
-#
-# Video For Linux
-#
-# CONFIG_VIDEO_DEV is not set
 # CONFIG_DTLK is not set
 # CONFIG_R3964 is not set
 # CONFIG_APPLICOM is not set
@@ -347,16+389,20 @@ CONFIG_SOFT_WATCHDOG=y
 # Ftape, the floppy tape device driver
 #
 # CONFIG_FTAPE is not set
-# CONFIG_DRM is not set
-# CONFIG_DRM_TDFX is not set
 # CONFIG_AGP is not set
+# CONFIG_DRM is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
 
 #
 # File systems
 #
 # CONFIG_QUOTA is not set
 # CONFIG_AUTOFS_FS is not set
-CONFIG_AUTOFS4_FS=y
+# CONFIG_AUTOFS4_FS is not set
 # CONFIG_ADFS_FS is not set
 # CONFIG_ADFS_FS_RW is not set
 # CONFIG_AFFS_FS is not set
@@ -367,11+413,12 @@ CONFIG_AUTOFS4_FS=y
 # CONFIG_UMSDOS_FS is not set
 # CONFIG_VFAT_FS is not set
 # CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
 # CONFIG_CRAMFS is not set
 # CONFIG_RAMFS is not set
 # CONFIG_ISO9660_FS is not set
 # CONFIG_JOLIET is not set
-CONFIG_MINIX_FS=m
+# CONFIG_MINIX_FS is not set
 # CONFIG_NTFS_FS is not set
 # CONFIG_NTFS_RW is not set
 # CONFIG_HPFS_FS is not set
@@ -379,11+426,11 @@ CONFIG_PROC_FS=y
 # CONFIG_DEVFS_FS is not set
 # CONFIG_DEVFS_MOUNT is not set
 # CONFIG_DEVFS_DEBUG is not set
-# CONFIG_DEVPTS_FS is not set
+CONFIG_DEVPTS_FS=y
 # CONFIG_QNX4FS_FS is not set
 # CONFIG_QNX4FS_RW is not set
-# CONFIG_ROMFS_FS is not set
-# CONFIG_EXT2_FS is not set
+CONFIG_ROMFS_FS=y
+CONFIG_EXT2_FS=y
 # CONFIG_SYSV_FS is not set
 # CONFIG_SYSV_FS_WRITE is not set
 # CONFIG_UDF_FS is not set
@@ -400,7+447,6 @@ CONFIG_NFS_FS=y
 CONFIG_ROOT_NFS=y
 # CONFIG_NFSD is not set
 # CONFIG_NFSD_V3 is not set
-# CONFIG_NFSD_TCP is not set
 CONFIG_SUNRPC=y
 CONFIG_LOCKD=y
 # CONFIG_SMB_FS is not set
@@ -427,10+473,29 @@ CONFIG_PARTITION_ADVANCED=y
 # CONFIG_MAC_PARTITION is not set
 # CONFIG_MSDOS_PARTITION is not set
 # CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
 # CONFIG_SUN_PARTITION is not set
 # CONFIG_NLS is not set
 
 #
+# Console drivers
+#
+CONFIG_KMI_KEYB=y
+CONFIG_PC_KEYMAP=y
+CONFIG_VGA_CONSOLE=y
+# CONFIG_FB is not set
+
+#
+# Frame-buffer support
+#
+# CONFIG_FB is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
 # USB support
 #
 # CONFIG_USB is not set
@@ -438,9+503,9 @@ CONFIG_PARTITION_ADVANCED=y
 #
 # Kernel hacking
 #
-# CONFIG_FRAME_POINTER is not set
+CONFIG_FRAME_POINTER=y
 CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_USER is not set
+CONFIG_DEBUG_USER=y
 # CONFIG_DEBUG_INFO is not set
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_DEBUG_LL is not set
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_DEBUG_LL=y
similarity index 90%
copy from arch/arm/def-configs/assabet
copy to arch/arm/def-configs/neponset
index 7a4cd17..b77cbd1 100644 (file)
@@ -12,57+12,75 @@ CONFIG_EXPERIMENTAL=y
 # CONFIG_OBSOLETE is not set
 
 #
+# Loadable module support
+#
+CONFIG_MODULES=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_KMOD is not set
+
+#
 # System Type
 #
-# CONFIG_ARCH_ARC is not set
-# CONFIG_ARCH_A5K is not set
+# CONFIG_ARCH_ARCA5K is not set
+# CONFIG_ARCH_CLPS7500 is not set
 # CONFIG_ARCH_CO285 is not set
 # CONFIG_ARCH_EBSA110 is not set
 # CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_INTEGRATOR is not set
 # CONFIG_ARCH_RPC is not set
 CONFIG_ARCH_SA1100=y
 
 #
+# Archimedes/A5000 Implementations
+#
+
+#
+# Footbridge Implementations
+#
+
+#
 # SA11x0 Implementations
 #
 CONFIG_SA1100_ASSABET=y
-# CONFIG_ASSABET_NEPONSET is not set
+CONFIG_ASSABET_NEPONSET=y
 # CONFIG_SA1100_BRUTUS is not set
+# CONFIG_SA1100_CERF is not set
 # CONFIG_SA1100_BITSY is not set
 # CONFIG_SA1100_LART is not set
-# CONFIG_SA1100_THINCLIENT is not set
 # CONFIG_SA1100_GRAPHICSCLIENT is not set
+# CONFIG_SA1100_NANOENGINE is not set
 # CONFIG_SA1100_VICTOR is not set
+# CONFIG_SA1100_SHERMAN is not set
+# CONFIG_SA1100_XP860 is not set
 CONFIG_ANGELBOOT=y
-# CONFIG_SA1100_FREQUENCY_SCALE is not set
+CONFIG_SA1111=y
+CONFIG_SA1100_FREQUENCY_SCALE=y
 # CONFIG_SA1100_VOLTAGE_SCALE is not set
-CONFIG_CPU_32=y
-# CONFIG_CPU_26 is not set
-CONFIG_CPU_32v4=y
-CONFIG_CPU_SA1100=y
 # CONFIG_ARCH_ACORN is not set
 # CONFIG_FOOTBRIDGE is not set
 # CONFIG_FOOTBRIDGE_HOST is not set
 # CONFIG_FOOTBRIDGE_ADDIN is not set
-CONFIG_DISCONTIGMEM=y
-# CONFIG_PCI is not set
-# CONFIG_ISA is not set
-# CONFIG_ISA_DMA is not set
+CONFIG_CPU_32=y
+# CONFIG_CPU_26 is not set
 
 #
-# Loadable module support
+# Processor Type
 #
-CONFIG_MODULES=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_KMOD is not set
+CONFIG_CPU_32v4=y
+CONFIG_CPU_SA1100=y
+CONFIG_DISCONTIGMEM=y
 
 #
 # General setup
 #
+# CONFIG_PCI is not set
+# CONFIG_ISA is not set
+# CONFIG_ISA_DMA is not set
+CONFIG_PC_KEYMAP=y
 CONFIG_HOTPLUG=y
 
 #
-# PC Card support
+# PCMCIA/CardBus support
 #
 CONFIG_PCMCIA=y
 # CONFIG_PCMCIA_DEBUG is not set
@@ -135,16+153,10 @@ CONFIG_INET=y
 # CONFIG_IP_MULTICAST is not set
 # CONFIG_IP_ADVANCED_ROUTER is not set
 # CONFIG_IP_PNP is not set
-# CONFIG_IP_ROUTER is not set
 # CONFIG_NET_IPIP is not set
 # CONFIG_NET_IPGRE is not set
-# CONFIG_IP_ALIAS is not set
+# CONFIG_INET_ECN is not set
 # CONFIG_SYN_COOKIES is not set
-
-#
-# (it is safe to leave these untouched)
-#
-CONFIG_SKB_LARGE=y
 # CONFIG_IPV6 is not set
 # CONFIG_KHTTPD is not set
 # CONFIG_ATM is not set
@@ -181,6+193,7 @@ CONFIG_NETDEVICES=y
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
 # CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
 # CONFIG_NET_SB1000 is not set
 
 #
@@ -190,7+203,11 @@ CONFIG_NET_ETHERNET=y
 # CONFIG_ARM_AM79C961A is not set
 # CONFIG_NET_VENDOR_3COM is not set
 # CONFIG_LANCE is not set
-# CONFIG_NET_VENDOR_SMC is not set
+CONFIG_NET_VENDOR_SMC=y
+# CONFIG_WD80x3 is not set
+# CONFIG_ULTRA is not set
+# CONFIG_ULTRA32 is not set
+CONFIG_SMC9194=y
 # CONFIG_NET_VENDOR_RACAL is not set
 # CONFIG_AT1700 is not set
 # CONFIG_DEPCA is not set
@@ -320,13+337,14 @@ CONFIG_BLK_DEV_IDECS=y
 #
 CONFIG_VT=y
 # CONFIG_VT_CONSOLE is not set
-CONFIG_SERIAL_SA1100=y
-CONFIG_SERIAL_SA1100_CONSOLE=y
-# CONFIG_TOUCHSCREEN_SA1100 is not set
-# CONFIG_TOUCHSCREEN_BITSY is not set
 # CONFIG_SERIAL is not set
 # CONFIG_SERIAL_EXTENDED is not set
 # CONFIG_SERIAL_NONSTANDARD is not set
+CONFIG_SERIAL_SA1100=y
+CONFIG_SERIAL_SA1100_CONSOLE=y
+CONFIG_SA1100_DEFAULT_BAUDRATE=9600
+CONFIG_TOUCHSCREEN_UCB1200=y
+# CONFIG_TOUCHSCREEN_BITSY is not set
 CONFIG_UNIX98_PTYS=y
 CONFIG_UNIX98_PTY_COUNT=32
 
@@ -339,12+357,19 @@ CONFIG_UNIX98_PTY_COUNT=32
 # Mice
 #
 # CONFIG_BUSMOUSE is not set
-# CONFIG_MOUSE is not set
+CONFIG_MOUSE=y
+CONFIG_PSMOUSE=y
+# CONFIG_82C710_MOUSE is not set
+# CONFIG_PC110_PAD is not set
 
 #
 # Joysticks
 #
 # CONFIG_JOYSTICK is not set
+
+#
+# Input core support is needed for joysticks
+#
 # CONFIG_QIC02_TAPE is not set
 
 #
@@ -354,11+379,6 @@ CONFIG_UNIX98_PTY_COUNT=32
 # CONFIG_INTEL_RNG is not set
 # CONFIG_NVRAM is not set
 # CONFIG_RTC is not set
-
-#
-# Video For Linux
-#
-# CONFIG_VIDEO_DEV is not set
 # CONFIG_DTLK is not set
 # CONFIG_R3964 is not set
 # CONFIG_APPLICOM is not set
@@ -367,10+387,9 @@ CONFIG_UNIX98_PTY_COUNT=32
 # Ftape, the floppy tape device driver
 #
 # CONFIG_FTAPE is not set
+# CONFIG_AGP is not set
 # CONFIG_DRM is not set
-# CONFIG_DRM_TDFX is not set
 # CONFIG_PCMCIA_SERIAL is not set
-# CONFIG_AGP is not set
 
 #
 # File systems
@@ -451,12+470,14 @@ CONFIG_MSDOS_PARTITION=y
 # CONFIG_SOLARIS_X86_PARTITION is not set
 # CONFIG_UNIXWARE_DISKLABEL is not set
 # CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
 # CONFIG_SUN_PARTITION is not set
 CONFIG_NLS=y
 
 #
 # Native Language Support
 #
+CONFIG_NLS_DEFAULT="iso8859-1"
 CONFIG_NLS_CODEPAGE_437=y
 # CONFIG_NLS_CODEPAGE_737 is not set
 # CONFIG_NLS_CODEPAGE_775 is not set
@@ -473,6+494,10 @@ CONFIG_NLS_CODEPAGE_437=y
 # CONFIG_NLS_CODEPAGE_866 is not set
 # CONFIG_NLS_CODEPAGE_869 is not set
 # CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
 # CONFIG_NLS_ISO8859_1 is not set
 # CONFIG_NLS_ISO8859_2 is not set
 # CONFIG_NLS_ISO8859_3 is not set
@@ -485,6+510,7 @@ CONFIG_NLS_CODEPAGE_437=y
 # CONFIG_NLS_ISO8859_14 is not set
 # CONFIG_NLS_ISO8859_15 is not set
 # CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_UTF8 is not set
 
 #
 # Console drivers
@@ -497,7+523,9 @@ CONFIG_FB=y
 #
 CONFIG_FB=y
 CONFIG_DUMMY_CONSOLE=y
+# CONFIG_FB_CYBER2000 is not set
 CONFIG_FB_SA1100=y
+# CONFIG_FB_MQ200 is not set
 # CONFIG_FB_VIRTUAL is not set
 # CONFIG_FBCON_ADVANCED is not set
 CONFIG_FBCON_CFB2=y
@@ -519,6+547,7 @@ CONFIG_SOUND=y
 CONFIG_SOUND_UDA1341=y
 # CONFIG_SOUND_CMPCI is not set
 # CONFIG_SOUND_EMU10K1 is not set
+# CONFIG_SOUND_FUSION is not set
 # CONFIG_SOUND_ES1370 is not set
 # CONFIG_SOUND_ES1371 is not set
 # CONFIG_SOUND_ESSSOLO1 is not set
similarity index 63%
rename from arch/arm/def-configs/thinclient
rename to arch/arm/def-configs/pangolin
index 5ad8986..6aebc40 100644 (file)
 #
-# Automatically generated make config: don't edit
+# Automatically generated by make menuconfig: don't edit
 #
 CONFIG_ARM=y
+# CONFIG_SBUS is not set
 CONFIG_UID16=y
 
 #
 # Code maturity level options
 #
 CONFIG_EXPERIMENTAL=y
+# CONFIG_OBSOLETE is not set
 
 #
-# System and processor type
+# Loadable module support
 #
-# CONFIG_ARCH_ARC is not set
-# CONFIG_ARCH_A5K is not set
-# CONFIG_ARCH_RPC is not set
+CONFIG_MODULES=y
+CONFIG_MODVERSIONS=y
+CONFIG_KMOD=y
+
+#
+# System Type
+#
+# CONFIG_ARCH_ARCA5K is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CO285 is not set
 # CONFIG_ARCH_EBSA110 is not set
-# CONFIG_FOOTBRIDGE is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_RPC is not set
 CONFIG_ARCH_SA1100=y
+
+#
+# Archimedes/A5000 Implementations
+#
+
+#
+# Footbridge Implementations
+#
+
+#
+# SA11x0 Implementations
+#
 # CONFIG_SA1100_ASSABET is not set
 # CONFIG_SA1100_BRUTUS is not set
-# CONFIG_SA1100_EMPEG is not set
-# CONFIG_SA1100_ITSY is not set
+# CONFIG_SA1100_CERF is not set
 # CONFIG_SA1100_BITSY is not set
 # CONFIG_SA1100_LART is not set
-# CONFIG_SA1100_PLEB is not set
-CONFIG_SA1100_THINCLIENT=y
 # CONFIG_SA1100_GRAPHICSCLIENT is not set
+# CONFIG_SA1100_NANOENGINE is not set
 # CONFIG_SA1100_VICTOR is not set
-# CONFIG_SA1100_TIFON is not set
-CONFIG_DISCONTIGMEM=y
+# CONFIG_SA1100_SHERMAN is not set
+# CONFIG_SA1100_XP860 is not set
+CONFIG_SA1100_PANGOLIN=y
+# CONFIG_ANGELBOOT is not set
+# CONFIG_SA1100_FREQUENCY_SCALE is not set
+# CONFIG_SA1100_VOLTAGE_SCALE is not set
 # CONFIG_ARCH_ACORN is not set
+# CONFIG_FOOTBRIDGE is not set
+# CONFIG_FOOTBRIDGE_HOST is not set
+# CONFIG_FOOTBRIDGE_ADDIN is not set
 CONFIG_CPU_32=y
 # CONFIG_CPU_26 is not set
 CONFIG_CPU_32v4=y
 CONFIG_CPU_SA1100=y
-# CONFIG_PCI is not set
-# CONFIG_ISA is not set
-# CONFIG_ISA_DMA is not set
-# CONFIG_SBUS is not set
-# CONFIG_PCMCIA is not set
-CONFIG_ALIGNMENT_TRAP=y
+CONFIG_DISCONTIGMEM=y
 
 #
-# Loadable module support
+# General setup
 #
-CONFIG_MODULES=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_KMOD is not set
+# CONFIG_PCI is not set
+# CONFIG_ISA is not set
+# CONFIG_ISA_DMA is not set
+CONFIG_PC_KEYMAP=y
+CONFIG_HOTPLUG=y
 
 #
-# General setup
+# PCMCIA/CardBus support
 #
+CONFIG_PCMCIA=y
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_SA1100_PCMCIA=y
+CONFIG_VIRTUAL_BUS=y
 CONFIG_NET=y
 CONFIG_SYSVIPC=y
 # CONFIG_BSD_PROCESS_ACCT is not set
@@ -59,26+88,48 @@ CONFIG_SYSCTL=y
 CONFIG_NWFPE=y
 CONFIG_KCORE_ELF=y
 # CONFIG_KCORE_AOUT is not set
-CONFIG_BINFMT_AOUT=y
+# CONFIG_BINFMT_AOUT is not set
 CONFIG_BINFMT_ELF=y
 # CONFIG_BINFMT_MISC is not set
+# CONFIG_PM is not set
 # CONFIG_ARTHUR is not set
+CONFIG_CMDLINE="keepinitrd"
+# CONFIG_LEDS is not set
+CONFIG_ALIGNMENT_TRAP=y
 
 #
 # Parallel port support
 #
 # CONFIG_PARPORT is not set
-CONFIG_CMDLINE="root=nfs"
-# CONFIG_LEDS is not set
 
 #
-# I2O device support
-#
-# CONFIG_I2O is not set
-# CONFIG_I2O_BLOCK is not set
-# CONFIG_I2O_LAN is not set
-# CONFIG_I2O_SCSI is not set
-# CONFIG_I2O_PROC is not set
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DOC1000 is not set
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOCPROBE is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_MTDRAM is not set
+CONFIG_MTD_CFI=y
+CONFIG_MTD_CFI_INTELEXT=y
+CONFIG_MTD_CFI_AMDSTD=y
+# CONFIG_MTD_JEDEC is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_MIXMEM is not set
+# CONFIG_MTD_NORA is not set
+# CONFIG_MTD_OCTAGON is not set
+# CONFIG_MTD_PNC2000 is not set
+# CONFIG_MTD_RPXLITE is not set
+# CONFIG_MTD_VMAX is not set
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
 
 #
 # Plug and Play configuration
@@ -94,95+145,20 @@ CONFIG_CMDLINE="root=nfs"
 # CONFIG_PARIDE is not set
 # CONFIG_BLK_CPQ_DA is not set
 # CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_BLK_DEV_LOOP is not set
+CONFIG_BLK_DEV_LOOP=y
 # CONFIG_BLK_DEV_NBD is not set
 # CONFIG_BLK_DEV_LVM is not set
 # CONFIG_BLK_DEV_MD is not set
 # CONFIG_MD_LINEAR is not set
-# CONFIG_MD_STRIPED is not set
+# CONFIG_MD_RAID0 is not set
+# CONFIG_MD_RAID1 is not set
+# CONFIG_MD_RAID5 is not set
 CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_SIZE=4096
 CONFIG_BLK_DEV_INITRD=y
 CONFIG_BLK_DEV_FLASH=y
 
 #
-# Character devices
-#
-CONFIG_VT=y
-# CONFIG_VT_CONSOLE is not set
-CONFIG_SERIAL_SA1100=y
-CONFIG_SERIAL_SA1100_CONSOLE=y
-# CONFIG_SERIAL is not set
-# CONFIG_SERIAL_EXTENDED is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_UNIX98_PTY_COUNT=32
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# Mice
-#
-# CONFIG_BUSMOUSE is not set
-# CONFIG_MOUSE is not set
-
-#
-# Joysticks
-#
-# CONFIG_JOYSTICK is not set
-# CONFIG_QIC02_TAPE is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_RTC is not set
-
-#
-# Video For Linux
-#
-# CONFIG_VIDEO_DEV is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-# CONFIG_FTAPE is not set
-# CONFIG_DRM is not set
-# CONFIG_DRM_TDFX is not set
-# CONFIG_AGP is not set
-
-#
-# Console drivers
-#
-# CONFIG_VGA_CONSOLE is not set
-CONFIG_FB=y
-
-#
-# Frame-buffer support
-#
-CONFIG_FB=y
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FB_SA1100=y
-# CONFIG_FB_VIRTUAL is not set
-# CONFIG_FBCON_ADVANCED is not set
-CONFIG_FBCON_CFB2=y
-CONFIG_FBCON_CFB4=y
-CONFIG_FBCON_CFB8=y
-CONFIG_FBCON_FONTWIDTH8_ONLY=y
-CONFIG_FBCON_FONTS=y
-# CONFIG_FONT_8x8 is not set
-CONFIG_FONT_8x16=y
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-# CONFIG_FONT_ACORN_8x8 is not set
-
-#
 # Networking options
 #
 CONFIG_PACKET=y
@@ -194,32+170,20 @@ CONFIG_UNIX=y
 CONFIG_INET=y
 # CONFIG_IP_MULTICAST is not set
 # CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_PNP=y
-CONFIG_IP_PNP_BOOTP=y
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_IP_ROUTER is not set
+# CONFIG_IP_PNP is not set
 # CONFIG_NET_IPIP is not set
 # CONFIG_NET_IPGRE is not set
-# CONFIG_IP_ALIAS is not set
+# CONFIG_INET_ECN is not set
 # CONFIG_SYN_COOKIES is not set
-
-#
-# (it is safe to leave these untouched)
-#
-CONFIG_SKB_LARGE=y
 # CONFIG_IPV6 is not set
 # CONFIG_KHTTPD is not set
 # CONFIG_ATM is not set
-
-#
-#  
-#
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
 # CONFIG_DECNET is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_X25 is not set
 # CONFIG_LAPB is not set
-# CONFIG_BRIDGE is not set
 # CONFIG_LLC is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
@@ -232,16+196,6 @@ CONFIG_SKB_LARGE=y
 # CONFIG_NET_SCHED is not set
 
 #
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-# CONFIG_IRDA is not set
-
-#
 # Network device support
 #
 CONFIG_NETDEVICES=y
@@ -250,9+204,10 @@ CONFIG_NETDEVICES=y
 # ARCnet devices
 #
 # CONFIG_ARCNET is not set
-# CONFIG_DUMMY is not set
+CONFIG_DUMMY=y
 # CONFIG_BONDING is not set
 # CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
 # CONFIG_NET_SB1000 is not set
 
 #
@@ -262,11+217,7 @@ CONFIG_NET_ETHERNET=y
 # CONFIG_ARM_AM79C961A is not set
 # CONFIG_NET_VENDOR_3COM is not set
 # CONFIG_LANCE is not set
-CONFIG_NET_VENDOR_SMC=y
-# CONFIG_WD80x3 is not set
-# CONFIG_ULTRA is not set
-# CONFIG_ULTRA32 is not set
-CONFIG_SMC9194=y
+# CONFIG_NET_VENDOR_SMC is not set
 # CONFIG_NET_VENDOR_RACAL is not set
 # CONFIG_AT1700 is not set
 # CONFIG_DEPCA is not set
@@ -304,11+255,65 @@ CONFIG_SMC9194=y
 # CONFIG_WAN is not set
 
 #
+# PCMCIA network device support
+#
+CONFIG_NET_PCMCIA=y
+# CONFIG_PCMCIA_3C589 is not set
+# CONFIG_PCMCIA_3C574 is not set
+# CONFIG_PCMCIA_FMVJ18X is not set
+CONFIG_PCMCIA_PCNET=y
+# CONFIG_PCMCIA_NMCLAN is not set
+# CONFIG_PCMCIA_SMC91C92 is not set
+# CONFIG_PCMCIA_XIRC2PS is not set
+# CONFIG_ARCNET_COM20020_CS is not set
+# CONFIG_PCMCIA_IBMTR is not set
+# CONFIG_NET_PCMCIA_RADIO is not set
+CONFIG_PCMCIA_NETCARD=y
+
+#
+# Amateur Radio support
+#
+# CONFIG_HAMRADIO is not set
+
+#
+# IrDA (infrared) support
+#
+# CONFIG_IRDA is not set
+
+#
 # ATA/IDE/MFM/RLL support
 #
-# CONFIG_IDE is not set
-# CONFIG_BLK_DEV_IDE_MODES is not set
+CONFIG_IDE=y
+
+#
+# IDE, ATA and ATAPI Block devices
+#
+CONFIG_BLK_DEV_IDE=y
+# CONFIG_BLK_DEV_HD_IDE is not set
 # CONFIG_BLK_DEV_HD is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set
+# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set
+# CONFIG_BLK_DEV_IDEDISK_IBM is not set
+# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set
+# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set
+# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set
+# CONFIG_BLK_DEV_IDEDISK_WD is not set
+# CONFIG_BLK_DEV_COMMERIAL is not set
+# CONFIG_BLK_DEV_TIVO is not set
+CONFIG_BLK_DEV_IDECS=y
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_BLK_DEV_CMD640 is not set
+# CONFIG_BLK_DEV_CMD640_ENHANCED is not set
+# CONFIG_BLK_DEV_ISAPNP is not set
+# CONFIG_IDE_CHIPSETS is not set
+# CONFIG_IDEDMA_AUTO is not set
+# CONFIG_DMA_NONPCI is not set
+# CONFIG_BLK_DEV_IDE_MODES is not set
 
 #
 # SCSI support
@@ -316,6+321,72 @@ CONFIG_SMC9194=y
 # CONFIG_SCSI is not set
 
 #
+# I2O device support
+#
+# CONFIG_I2O is not set
+# CONFIG_I2O_BLOCK is not set
+# CONFIG_I2O_LAN is not set
+# CONFIG_I2O_SCSI is not set
+# CONFIG_I2O_PROC is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+# CONFIG_VT_CONSOLE is not set
+# CONFIG_SERIAL is not set
+# CONFIG_SERIAL_EXTENDED is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+CONFIG_SERIAL_SA1100=y
+CONFIG_SERIAL_SA1100_CONSOLE=y
+CONFIG_SA1100_DEFAULT_BAUDRATE=115200
+# CONFIG_TOUCHSCREEN_UCB1200 is not set
+# CONFIG_TOUCHSCREEN_BITSY is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_UNIX98_PTY_COUNT=32
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# Mice
+#
+# CONFIG_BUSMOUSE is not set
+# CONFIG_MOUSE is not set
+
+#
+# Joysticks
+#
+# CONFIG_JOYSTICK is not set
+# CONFIG_QIC02_TAPE is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_INTEL_RNG is not set
+# CONFIG_NVRAM is not set
+# CONFIG_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_FTAPE is not set
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
+# CONFIG_PCMCIA_SERIAL is not set
+
+#
 # File systems
 #
 # CONFIG_QUOTA is not set
@@ -331,8+402,10 @@ CONFIG_SMC9194=y
 # CONFIG_UMSDOS_FS is not set
 # CONFIG_VFAT_FS is not set
 # CONFIG_EFS_FS is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_RAMFS is not set
+CONFIG_JFFS_FS=y
+CONFIG_JFFS_FS_VERBOSE=1
+CONFIG_CRAMFS=y
+CONFIG_RAMFS=y
 # CONFIG_ISO9660_FS is not set
 # CONFIG_JOLIET is not set
 # CONFIG_MINIX_FS is not set
@@ -361,7+434,7 @@ CONFIG_EXT2_FS=y
 # CONFIG_CODA_FS is not set
 CONFIG_NFS_FS=y
 # CONFIG_NFS_V3 is not set
-CONFIG_ROOT_NFS=y
+# CONFIG_ROOT_NFS is not set
 # CONFIG_NFSD is not set
 # CONFIG_NFSD_V3 is not set
 CONFIG_SUNRPC=y
@@ -387,6+460,22 @@ CONFIG_MSDOS_PARTITION=y
 # CONFIG_NLS is not set
 
 #
+# Console drivers
+#
+# CONFIG_VGA_CONSOLE is not set
+# CONFIG_FB is not set
+
+#
+# Frame-buffer support
+#
+# CONFIG_FB is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
 # USB support
 #
 # CONFIG_USB is not set
@@ -397,6+486,6 @@ CONFIG_MSDOS_PARTITION=y
 CONFIG_FRAME_POINTER=y
 CONFIG_DEBUG_ERRORS=y
 CONFIG_DEBUG_USER=y
-CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_INFO is not set
 # CONFIG_MAGIC_SYSRQ is not set
 # CONFIG_DEBUG_LL is not set
index afbfda2..6d744d3 100644 (file)
 # Automatically generated make config: don't edit
 #
 CONFIG_ARM=y
+# CONFIG_EISA is not set
+# CONFIG_SBUS is not set
+# CONFIG_MCA is not set
 CONFIG_UID16=y
 
 #
 # Code maturity level options
 #
 CONFIG_EXPERIMENTAL=y
+# CONFIG_OBSOLETE is not set
 
 #
-# System and Processor Type
+# Loadable module support
 #
-# CONFIG_ARCH_ARC is not set
-# CONFIG_ARCH_A5K is not set
-CONFIG_ARCH_RPC=y
+CONFIG_MODULES=y
+# CONFIG_MODVERSIONS is not set
+CONFIG_KMOD=y
+
+#
+# System Type
+#
+# CONFIG_ARCH_ARCA5K is not set
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CO285 is not set
 # CONFIG_ARCH_EBSA110 is not set
-# CONFIG_FOOTBRIDGE is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+CONFIG_ARCH_RPC=y
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_CLPS711X is not set
+
+#
+# Archimedes/A5000 Implementations
+#
+
+#
+# Footbridge Implementations
+#
+
+#
+# SA11x0 Implementations
+#
+
+#
+# CLPS711X/EP721X Implementations
+#
 CONFIG_ARCH_ACORN=y
+# CONFIG_FOOTBRIDGE is not set
+# CONFIG_FOOTBRIDGE_HOST is not set
+# CONFIG_FOOTBRIDGE_ADDIN is not set
 CONFIG_CPU_32=y
 # CONFIG_CPU_26 is not set
+
+#
+# Processor Type
+#
 CONFIG_CPU_32v3=y
 CONFIG_CPU_ARM6=y
 CONFIG_CPU_ARM7=y
 CONFIG_CPU_SA110=y
-# CONFIG_PCI is not set
-# CONFIG_ISA is not set
-# CONFIG_ISA_DMA is not set
-# CONFIG_SBUS is not set
-# CONFIG_PCMCIA is not set
-# CONFIG_ALIGNMENT_TRAP is not set
-
-#
-# Loadable module support
-#
-CONFIG_MODULES=y
-# CONFIG_MODVERSIONS is not set
-CONFIG_KMOD=y
+# CONFIG_DISCONTIGMEM is not set
 
 #
 # General setup
 #
+# CONFIG_ANGELBOOT is not set
+# CONFIG_PCI is not set
+# CONFIG_ISA is not set
+# CONFIG_ISA_DMA is not set
+# CONFIG_HOTPLUG is not set
+# CONFIG_PCMCIA is not set
 CONFIG_NET=y
 CONFIG_SYSVIPC=y
 # CONFIG_BSD_PROCESS_ACCT is not set
@@ -51,7+83,9 @@ CONFIG_KCORE_ELF=y
 CONFIG_BINFMT_AOUT=y
 CONFIG_BINFMT_ELF=y
 # CONFIG_BINFMT_MISC is not set
+# CONFIG_PM is not set
 # CONFIG_ARTHUR is not set
+# CONFIG_ALIGNMENT_TRAP is not set
 
 #
 # Parallel port support
@@ -69,13+103,9 @@ CONFIG_PARPORT_PC_SUPERIO=y
 # CONFIG_PARPORT_1284 is not set
 
 #
-# I2O device support
+# Memory Technology Devices (MTD)
 #
-# CONFIG_I2O is not set
-# CONFIG_I2O_BLOCK is not set
-# CONFIG_I2O_LAN is not set
-# CONFIG_I2O_SCSI is not set
-# CONFIG_I2O_PROC is not set
+# CONFIG_MTD is not set
 
 #
 # Plug and Play configuration
@@ -90,15+120,12 @@ CONFIG_BLK_DEV_FD=y
 # CONFIG_BLK_DEV_XD is not set
 # CONFIG_PARIDE is not set
 # CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
 # CONFIG_BLK_DEV_DAC960 is not set
 CONFIG_BLK_DEV_LOOP=m
 # CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_LVM is not set
-# CONFIG_BLK_DEV_MD is not set
-# CONFIG_MD_LINEAR is not set
-# CONFIG_MD_RAID0 is not set
-# CONFIG_RAID15_DANGEROUS is not set
 CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_SIZE=4096
 CONFIG_BLK_DEV_INITRD=y
 
 #
@@ -106,114+133,6 @@ CONFIG_BLK_DEV_INITRD=y
 #
 
 #
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_SERIAL=y
-# CONFIG_SERIAL_CONSOLE is not set
-CONFIG_ATOMWIDE_SERIAL=y
-CONFIG_DUALSP_SERIAL=y
-# CONFIG_SERIAL_EXTENDED is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-# CONFIG_UNIX98_PTYS is not set
-CONFIG_PRINTER=m
-# CONFIG_LP_CONSOLE is not set
-# CONFIG_PPDEV is not set
-
-#
-# I2C support
-#
-CONFIG_I2C=y
-CONFIG_I2C_ALGOBIT=y
-# CONFIG_I2C_PHILIPSPAR is not set
-# CONFIG_I2C_ELV is not set
-# CONFIG_I2C_VELLEMAN is not set
-# CONFIG_I2C_ALGOPCF is not set
-CONFIG_I2C_CHARDEV=y
-
-#
-# Mice
-#
-CONFIG_BUSMOUSE=y
-# CONFIG_ATIXL_BUSMOUSE is not set
-# CONFIG_LOGIBUSMOUSE is not set
-# CONFIG_MS_BUSMOUSE is not set
-CONFIG_MOUSE=y
-# CONFIG_PSMOUSE is not set
-# CONFIG_82C710_MOUSE is not set
-# CONFIG_PC110_PAD is not set
-
-#
-# Joysticks
-#
-# CONFIG_JOYSTICK is not set
-# CONFIG_QIC02_TAPE is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_NVRAM is not set
-# CONFIG_RTC is not set
-
-#
-# Video For Linux
-#
-# CONFIG_VIDEO_DEV is not set
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-
-#
-# Ftape, the floppy tape device driver
-#
-# CONFIG_FTAPE is not set
-# CONFIG_DRM is not set
-# CONFIG_DRM_TDFX is not set
-# CONFIG_AGP is not set
-CONFIG_RPCMOUSE=y
-
-#
-# Console drivers
-#
-CONFIG_FB=y
-
-#
-# Frame-buffer support
-#
-CONFIG_FB=y
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_FB_ACORN=y
-# CONFIG_FB_VIRTUAL is not set
-CONFIG_FBCON_ADVANCED=y
-CONFIG_FBCON_MFB=y
-CONFIG_FBCON_CFB2=y
-CONFIG_FBCON_CFB4=y
-CONFIG_FBCON_CFB8=y
-CONFIG_FBCON_CFB16=y
-CONFIG_FBCON_CFB24=y
-CONFIG_FBCON_CFB32=y
-# CONFIG_FBCON_AFB is not set
-# CONFIG_FBCON_ILBM is not set
-# CONFIG_FBCON_IPLAN2P2 is not set
-# CONFIG_FBCON_IPLAN2P4 is not set
-# CONFIG_FBCON_IPLAN2P8 is not set
-# CONFIG_FBCON_MAC is not set
-# CONFIG_FBCON_VGA_PLANES is not set
-# CONFIG_FBCON_VGA is not set
-# CONFIG_FBCON_HGA is not set
-# CONFIG_FBCON_FONTWIDTH8_ONLY is not set
-CONFIG_FBCON_FONTS=y
-# CONFIG_FONT_8x8 is not set
-# CONFIG_FONT_8x16 is not set
-# CONFIG_FONT_SUN8x16 is not set
-# CONFIG_FONT_SUN12x22 is not set
-# CONFIG_FONT_6x11 is not set
-# CONFIG_FONT_PEARL_8x8 is not set
-CONFIG_FONT_ACORN_8x8=y
-
-#
 # Networking options
 #
 # CONFIG_PACKET is not set
@@ -222,19+141,14 @@ CONFIG_FONT_ACORN_8x8=y
 # CONFIG_FILTER is not set
 CONFIG_UNIX=y
 CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
+CONFIG_IP_MULTICAST=y
 # CONFIG_IP_ADVANCED_ROUTER is not set
 # CONFIG_IP_PNP is not set
-# CONFIG_IP_ROUTER is not set
 # CONFIG_NET_IPIP is not set
 # CONFIG_NET_IPGRE is not set
-# CONFIG_IP_ALIAS is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_INET_ECN is not set
 # CONFIG_SYN_COOKIES is not set
-
-#
-# (it is safe to leave these untouched)
-#
-CONFIG_SKB_LARGE=y
 # CONFIG_IPV6 is not set
 # CONFIG_KHTTPD is not set
 # CONFIG_ATM is not set
@@ -245,10+159,11 @@ CONFIG_SKB_LARGE=y
 # CONFIG_IPX is not set
 # CONFIG_ATALK is not set
 # CONFIG_DECNET is not set
+# CONFIG_BRIDGE is not set
 # CONFIG_X25 is not set
 # CONFIG_LAPB is not set
-# CONFIG_BRIDGE is not set
 # CONFIG_LLC is not set
+# CONFIG_NET_DIVERT is not set
 # CONFIG_ECONET is not set
 # CONFIG_WAN_ROUTER is not set
 # CONFIG_NET_FASTROUTE is not set
@@ -260,16+175,6 @@ CONFIG_SKB_LARGE=y
 # CONFIG_NET_SCHED is not set
 
 #
-# Amateur Radio support
-#
-# CONFIG_HAMRADIO is not set
-
-#
-# IrDA (infrared) support
-#
-# CONFIG_IRDA is not set
-
-#
 # Network device support
 #
 CONFIG_NETDEVICES=y
@@ -281,14+186,15 @@ CONFIG_NETDEVICES=y
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
 # CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
 # CONFIG_NET_SB1000 is not set
 
 #
 # Ethernet (10 or 100Mbit)
 #
 CONFIG_NET_ETHERNET=y
-CONFIG_ARM_ETHER1=m
-CONFIG_ARM_ETHER3=m
+CONFIG_ARM_ETHER1=y
+CONFIG_ARM_ETHER3=y
 CONFIG_ARM_ETHERH=y
 # CONFIG_NET_VENDOR_3COM is not set
 # CONFIG_LANCE is not set
@@ -303,8+209,9 @@ CONFIG_ARM_ETHERH=y
 #
 # Ethernet (1000 Mbit)
 #
-# CONFIG_YELLOWFIN is not set
 # CONFIG_ACENIC is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
 # CONFIG_SK98LIN is not set
 # CONFIG_FDDI is not set
 # CONFIG_HIPPI is not set
@@ -337,6+244,16 @@ CONFIG_PPPOE=m
 # CONFIG_WAN is not set
 
 #
+# Amateur Radio support
+#
+# CONFIG_HAMRADIO is not set
+
+#
+# IrDA (infrared) support
+#
+# CONFIG_IRDA is not set
+
+#
 # ATA/IDE/MFM/RLL support
 #
 CONFIG_IDE=y
@@ -353,6+270,15 @@ CONFIG_BLK_DEV_IDE=y
 # CONFIG_BLK_DEV_HD is not set
 CONFIG_BLK_DEV_IDEDISK=y
 CONFIG_IDEDISK_MULTI_MODE=y
+# CONFIG_BLK_DEV_IDEDISK_VENDOR is not set
+# CONFIG_BLK_DEV_IDEDISK_FUJITSU is not set
+# CONFIG_BLK_DEV_IDEDISK_IBM is not set
+# CONFIG_BLK_DEV_IDEDISK_MAXTOR is not set
+# CONFIG_BLK_DEV_IDEDISK_QUANTUM is not set
+# CONFIG_BLK_DEV_IDEDISK_SEAGATE is not set
+# CONFIG_BLK_DEV_IDEDISK_WD is not set
+# CONFIG_BLK_DEV_COMMERIAL is not set
+# CONFIG_BLK_DEV_TIVO is not set
 # CONFIG_BLK_DEV_IDECS is not set
 CONFIG_BLK_DEV_IDECD=y
 # CONFIG_BLK_DEV_IDETAPE is not set
@@ -372,6+298,8 @@ CONFIG_BLK_DEV_IDEDMA=y
 CONFIG_BLK_DEV_IDE_RAPIDE=y
 # CONFIG_IDE_CHIPSETS is not set
 CONFIG_IDEDMA_AUTO=y
+# CONFIG_IDEDMA_IVB is not set
+# CONFIG_DMA_NONPCI is not set
 # CONFIG_BLK_DEV_IDE_MODES is not set
 
 #
@@ -427,14+355,14 @@ CONFIG_SCSI_IMM=m
 # CONFIG_SCSI_IZIP_EPP16 is not set
 # CONFIG_SCSI_IZIP_SLOW_CTR is not set
 # CONFIG_SCSI_NCR53C406A is not set
-# CONFIG_SCSI_SYM53C416 is not set
-# CONFIG_SCSI_SIM710 is not set
 # CONFIG_SCSI_NCR53C7xx is not set
 # CONFIG_SCSI_PAS16 is not set
 # CONFIG_SCSI_PCI2000 is not set
 # CONFIG_SCSI_PCI2220I is not set
 # CONFIG_SCSI_PSI240I is not set
 # CONFIG_SCSI_QLOGIC_FAS is not set
+# CONFIG_SCSI_SIM710 is not set
+# CONFIG_SCSI_SYM53C416 is not set
 # CONFIG_SCSI_T128 is not set
 # CONFIG_SCSI_U14_34F is not set
 # CONFIG_SCSI_DEBUG is not set
@@ -444,7+372,7 @@ CONFIG_SCSI_ACORNSCSI_SYNC=y
 CONFIG_SCSI_ARXESCSI=m
 CONFIG_SCSI_CUMANA_2=m
 CONFIG_SCSI_EESOXSCSI=m
-CONFIG_SCSI_POWERTECSCSI=m
+CONFIG_SCSI_POWERTECSCSI=y
 
 #
 # The following drivers are not fully supported
@@ -453,52+381,101 @@ CONFIG_SCSI_CUMANA_1=m
 CONFIG_SCSI_OAK1=m
 
 #
-# Sound
+# I2O device support
 #
-CONFIG_SOUND=m
-# CONFIG_SOUND_CMPCI is not set
-# CONFIG_SOUND_EMU10K1 is not set
-# CONFIG_SOUND_ES1370 is not set
-# CONFIG_SOUND_ES1371 is not set
-# CONFIG_SOUND_ESSSOLO1 is not set
-# CONFIG_SOUND_MAESTRO is not set
-# CONFIG_SOUND_SONICVIBES is not set
-# CONFIG_SOUND_TRIDENT is not set
-# CONFIG_SOUND_MSNDCLAS is not set
-# CONFIG_SOUND_MSNDPIN is not set
-# CONFIG_SOUND_VIA82CXXX is not set
-CONFIG_SOUND_OSS=m
-# CONFIG_SOUND_TRACEINIT is not set
-# CONFIG_SOUND_DMAP is not set
-# CONFIG_SOUND_AD1816 is not set
-# CONFIG_SOUND_SGALAXY is not set
-# CONFIG_SOUND_ADLIB is not set
-# CONFIG_SOUND_ACI_MIXER is not set
-# CONFIG_SOUND_CS4232 is not set
-# CONFIG_SOUND_SSCAPE is not set
-# CONFIG_SOUND_GUS is not set
-# CONFIG_SOUND_ICH is not set
-# CONFIG_SOUND_VMIDI is not set
-# CONFIG_SOUND_TRIX is not set
-# CONFIG_SOUND_MSS is not set
-# CONFIG_SOUND_MPU401 is not set
-# CONFIG_SOUND_NM256 is not set
-# CONFIG_SOUND_MAD16 is not set
-# CONFIG_SOUND_PAS is not set
-# CONFIG_PAS_JOYSTICK is not set
-# CONFIG_SOUND_PSS is not set
-CONFIG_SOUND_SOFTOSS=m
-# CONFIG_SOUND_SB is not set
-# CONFIG_SOUND_AWE32_SYNTH is not set
-# CONFIG_SOUND_WAVEFRONT is not set
-# CONFIG_SOUND_MAUI is not set
-# CONFIG_SOUND_YM3812 is not set
-# CONFIG_SOUND_OPL3SA1 is not set
-# CONFIG_SOUND_OPL3SA2 is not set
-# CONFIG_SOUND_UART6850 is not set
-# CONFIG_SOUND_AEDSP16 is not set
-CONFIG_SOUND_VIDC=m
-# CONFIG_SOUND_WAVEARTIST is not set
+# CONFIG_I2O is not set
+# CONFIG_I2O_BLOCK is not set
+# CONFIG_I2O_LAN is not set
+# CONFIG_I2O_SCSI is not set
+# CONFIG_I2O_PROC is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input core support
+#
+# CONFIG_INPUT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_SERIAL=y
+CONFIG_SERIAL_CONSOLE=y
+CONFIG_ATOMWIDE_SERIAL=y
+CONFIG_DUALSP_SERIAL=y
+CONFIG_SERIAL_EXTENDED=y
+# CONFIG_SERIAL_MANY_PORTS is not set
+CONFIG_SERIAL_SHARE_IRQ=y
+# CONFIG_SERIAL_DETECT_IRQ is not set
+# CONFIG_SERIAL_MULTIPORT is not set
+# CONFIG_HUB6 is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+# CONFIG_UNIX98_PTYS is not set
+CONFIG_PRINTER=m
+# CONFIG_LP_CONSOLE is not set
+# CONFIG_PPDEV is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+CONFIG_I2C_ALGOBIT=y
+# CONFIG_I2C_PHILIPSPAR is not set
+# CONFIG_I2C_ELV is not set
+# CONFIG_I2C_VELLEMAN is not set
+# CONFIG_I2C_ALGOPCF is not set
+CONFIG_I2C_CHARDEV=y
+
+#
+# Mice
+#
+CONFIG_BUSMOUSE=y
+# CONFIG_ATIXL_BUSMOUSE is not set
+# CONFIG_LOGIBUSMOUSE is not set
+# CONFIG_MS_BUSMOUSE is not set
+CONFIG_MOUSE=y
+# CONFIG_PSMOUSE is not set
+# CONFIG_82C710_MOUSE is not set
+# CONFIG_PC110_PAD is not set
+
+#
+# Joysticks
+#
+# CONFIG_JOYSTICK is not set
+
+#
+# Input core support is needed for joysticks
+#
+# CONFIG_QIC02_TAPE is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_INTEL_RNG is not set
+# CONFIG_NVRAM is not set
+# CONFIG_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_FTAPE is not set
+# CONFIG_AGP is not set
+# CONFIG_DRM is not set
+CONFIG_RPCMOUSE=y
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
 
 #
 # File systems
@@ -516,6+493,7 @@ CONFIG_ADFS_FS=y
 # CONFIG_UMSDOS_FS is not set
 # CONFIG_VFAT_FS is not set
 # CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
 # CONFIG_CRAMFS is not set
 # CONFIG_RAMFS is not set
 CONFIG_ISO9660_FS=y
@@ -582,12+560,14 @@ CONFIG_BSD_DISKLABEL=y
 CONFIG_SOLARIS_X86_PARTITION=y
 # CONFIG_UNIXWARE_DISKLABEL is not set
 CONFIG_SGI_PARTITION=y
+# CONFIG_ULTRIX_PARTITION is not set
 CONFIG_SUN_PARTITION=y
 CONFIG_NLS=y
 
 #
 # Native Language Support
 #
+CONFIG_NLS_DEFAULT="iso8859-1"
 CONFIG_NLS_CODEPAGE_437=m
 CONFIG_NLS_CODEPAGE_737=m
 CONFIG_NLS_CODEPAGE_775=m
@@ -604,6+584,10 @@ CONFIG_NLS_CODEPAGE_865=m
 CONFIG_NLS_CODEPAGE_866=m
 CONFIG_NLS_CODEPAGE_869=m
 CONFIG_NLS_CODEPAGE_874=m
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
 CONFIG_NLS_ISO8859_1=m
 CONFIG_NLS_ISO8859_2=m
 CONFIG_NLS_ISO8859_3=m
@@ -616,6+600,99 @@ CONFIG_NLS_ISO8859_9=m
 # CONFIG_NLS_ISO8859_14 is not set
 # CONFIG_NLS_ISO8859_15 is not set
 CONFIG_NLS_KOI8_R=m
+# CONFIG_NLS_UTF8 is not set
+
+#
+# Console drivers
+#
+CONFIG_FB=y
+
+#
+# Frame-buffer support
+#
+CONFIG_FB=y
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FB_ACORN=y
+# CONFIG_FB_CLPS711X is not set
+# CONFIG_FB_CYBER2000 is not set
+# CONFIG_FB_SA1100 is not set
+# CONFIG_FB_VIRTUAL is not set
+CONFIG_FBCON_ADVANCED=y
+CONFIG_FBCON_MFB=y
+CONFIG_FBCON_CFB2=y
+CONFIG_FBCON_CFB4=y
+CONFIG_FBCON_CFB8=y
+CONFIG_FBCON_CFB16=y
+CONFIG_FBCON_CFB24=y
+CONFIG_FBCON_CFB32=y
+# CONFIG_FBCON_AFB is not set
+# CONFIG_FBCON_ILBM is not set
+# CONFIG_FBCON_IPLAN2P2 is not set
+# CONFIG_FBCON_IPLAN2P4 is not set
+# CONFIG_FBCON_IPLAN2P8 is not set
+# CONFIG_FBCON_MAC is not set
+# CONFIG_FBCON_VGA_PLANES is not set
+# CONFIG_FBCON_VGA is not set
+# CONFIG_FBCON_HGA is not set
+# CONFIG_FBCON_FONTWIDTH8_ONLY is not set
+CONFIG_FBCON_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+CONFIG_FONT_ACORN_8x8=y
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+# CONFIG_SOUND_CMPCI is not set
+# CONFIG_SOUND_EMU10K1 is not set
+# CONFIG_SOUND_FUSION is not set
+# CONFIG_SOUND_CS4281 is not set
+# CONFIG_SOUND_ES1370 is not set
+# CONFIG_SOUND_ES1371 is not set
+# CONFIG_SOUND_ESSSOLO1 is not set
+# CONFIG_SOUND_MAESTRO is not set
+# CONFIG_SOUND_SONICVIBES is not set
+# CONFIG_SOUND_TRIDENT is not set
+# CONFIG_SOUND_MSNDCLAS is not set
+# CONFIG_SOUND_MSNDPIN is not set
+# CONFIG_SOUND_VIA82CXXX is not set
+CONFIG_SOUND_OSS=m
+# CONFIG_SOUND_TRACEINIT is not set
+# CONFIG_SOUND_DMAP is not set
+# CONFIG_SOUND_AD1816 is not set
+# CONFIG_SOUND_SGALAXY is not set
+# CONFIG_SOUND_ADLIB is not set
+# CONFIG_SOUND_ACI_MIXER is not set
+# CONFIG_SOUND_CS4232 is not set
+# CONFIG_SOUND_SSCAPE is not set
+# CONFIG_SOUND_GUS is not set
+# CONFIG_SOUND_ICH is not set
+# CONFIG_SOUND_VMIDI is not set
+# CONFIG_SOUND_TRIX is not set
+# CONFIG_SOUND_MSS is not set
+# CONFIG_SOUND_MPU401 is not set
+# CONFIG_SOUND_NM256 is not set
+# CONFIG_SOUND_MAD16 is not set
+# CONFIG_SOUND_PAS is not set
+# CONFIG_PAS_JOYSTICK is not set
+# CONFIG_SOUND_PSS is not set
+# CONFIG_SOUND_SB is not set
+# CONFIG_SOUND_AWE32_SYNTH is not set
+# CONFIG_SOUND_WAVEFRONT is not set
+# CONFIG_SOUND_MAUI is not set
+# CONFIG_SOUND_YM3812 is not set
+# CONFIG_SOUND_OPL3SA1 is not set
+# CONFIG_SOUND_OPL3SA2 is not set
+# CONFIG_SOUND_YMPCI is not set
+# CONFIG_SOUND_UART6850 is not set
+# CONFIG_SOUND_AEDSP16 is not set
+CONFIG_SOUND_VIDC=m
+# CONFIG_SOUND_TVMIXER is not set
 
 #
 # USB support
@@ -627,7+704,7 @@ CONFIG_NLS_KOI8_R=m
 #
 CONFIG_FRAME_POINTER=y
 CONFIG_DEBUG_ERRORS=y
-# CONFIG_DEBUG_USER is not set
+CONFIG_DEBUG_USER=y
 # CONFIG_DEBUG_INFO is not set
 CONFIG_MAGIC_SYSRQ=y
 CONFIG_DEBUG_LL=y
diff --git a/arch/arm/def-configs/sherman b/arch/arm/def-configs/sherman
new file mode 100644 (file)
index 0000000..453fbf2
--- /dev/null
@@ -0,0 +1,210 @@
+#
+# Automatically generated make config: don't edit
+#
+CONFIG_ARM=y
+
+#
+# System and processor type
+#
+# CONFIG_ARCH_ARC is not set
+# CONFIG_ARCH_A5K is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_FOOTBRIDGE is not set
+CONFIG_ARCH_SA1100=y
+CONFIG_CPU_SA1100=y
+# CONFIG_SA1100_BRUTUS is not set
+# CONFIG_SA1100_EMPEG is not set
+# CONFIG_SA1100_ITSY is not set
+# CONFIG_SA1100_PLEB is not set
+# CONFIG_SA1100_VICTOR is not set
+CONFIG_SA1100_SHERMAN=y
+# CONFIG_VICTOR_BOARD1 is not set
+# CONFIG_ARCH_ACORN is not set
+# CONFIG_ISA_DMA is not set
+CONFIG_CPU_32=y
+# CONFIG_CPU_26 is not set
+# CONFIG_CPU_ARM2 is not set
+# CONFIG_CPU_ARM3 is not set
+# CONFIG_CPU_ARM6 is not set
+# CONFIG_CPU_ARM7 is not set
+CONFIG_CPU_SA110=y
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+# CONFIG_ALIGNMENT_TRAP is not set
+# CONFIG_TEXT_SECTIONS is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_KMOD is not set
+
+#
+# General setup
+#
+# CONFIG_NET is not set
+# CONFIG_SYSVIPC is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_SYSCTL is not set
+CONFIG_NWFPE=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_MISC is not set
+# CONFIG_ARTHUR is not set
+# CONFIG_PARPORT is not set
+CONFIG_CMDLINE=""
+
+#
+# Plug and Play support
+#
+# CONFIG_PNP is not set
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_DEV_IDE is not set
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_HD_IDE is not set
+# CONFIG_BLK_DEV_IDEDISK is not set
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_BLK_DEV_CMD640 is not set
+# CONFIG_IDE_CHIPSETS is not set
+
+#
+# Additional Block Devices
+#
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_MD is not set
+CONFIG_BLK_DEV_RAM=y
+# CONFIG_BLK_DEV_INITRD is not set
+# CONFIG_BLK_DEV_XD is not set
+# CONFIG_PARIDE_PARPORT is not set
+# CONFIG_PARIDE is not set
+# CONFIG_BLK_DEV_HD is not set
+CONFIG_BLK_DEV_FLASH=y
+
+#
+# Character devices
+#
+# CONFIG_VT is not set
+CONFIG_SERIAL_SA1100=y
+CONFIG_SERIAL_SA1100_CONSOLE=y
+# CONFIG_SERIAL is not set
+# CONFIG_SERIAL_EXTENDED is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+# CONFIG_UNIX98_PTYS is not set
+# CONFIG_MOUSE is not set
+# CONFIG_QIC02_TAPE is not set
+# CONFIG_WATCHDOG is not set
+# CONFIG_NVRAM is not set
+# CONFIG_RTC is not set
+
+#
+# Video For Linux
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Joystick support
+#
+# CONFIG_JOYSTICK is not set
+# CONFIG_DTLK is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_FTAPE is not set
+
+#
+# SCSI support
+#
+# CONFIG_SCSI is not set
+
+#
+# Filesystems
+#
+# CONFIG_QUOTA is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_FAT_FS is not set
+# CONFIG_MSDOS_FS is not set
+# CONFIG_UMSDOS_FS is not set
+# CONFIG_VFAT_FS is not set
+# CONFIG_ISO9660_FS is not set
+# CONFIG_JOLIET is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_NTFS_FS is not set
+# CONFIG_HPFS_FS is not set
+CONFIG_PROC_FS=y
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_EXT2_FS=y
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+# CONFIG_MSDOS_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ACORN_PARTITION is not set
+CONFIG_NLS=y
+
+#
+# Native Language Support
+#
+# CONFIG_NLS_CODEPAGE_437 is not set
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_1 is not set
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+
+#
+# Kernel hacking
+#
+CONFIG_FRAME_POINTER=y
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_USER=y
+CONFIG_DEBUG_INFO=y
+# CONFIG_MAGIC_SYSRQ is not set
+CONFIG_DEBUG_LL=y
index e79dd71..3ee0d03 100644 (file)
@@ -463,8+463,29 @@ char * __init pcibios_setup(char *str)
        return str;
 }
 
+/*
+ * From arch/i386/kernel/pci-i386.c:
+ *
+ * We need to avoid collisions with `mirrored' VGA ports
+ * and other strange ISA hardware, so we always want the
+ * addresses to be allocated in the 0x000-0x0ff region
+ * modulo 0x400.
+ *
+ * Why? Because some silly external IO cards only decode
+ * the low 10 bits of the IO address. The 0x00-0xff region
+ * is reserved for motherboard devices that decode all 16
+ * bits, so it's ok to allocate at, say, 0x2800-0x28ff,
+ * but we want to try to avoid allocating at 0x2900-0x2bff
+ * which might have be mirrored at 0x0100-0x03ff..
+ */
 void pcibios_align_resource(void *data, struct resource *res, unsigned long size)
 {
+       if (res->flags & IORESOURCE_IO) {
+               unsigned long start = res->start;
+
+               if (start & 0x300)
+                       res->start = (start + 0x3ff) & ~0x3ff;
+       }
 }
 
 /**
index 8c427b3..bf265fa 100644 (file)
@@ -258,17+258,21 @@ static void dc21285_parity_irq(int irq, void *dev_id, struct pt_regs *regs)
 void __init dc21285_init(struct arm_pci_sysdata *sysdata)
 {
        unsigned long cntl;
-       unsigned int mem_size;
+       unsigned int mem_size, mem_mask;
        unsigned int pci_cmd = PCI_COMMAND_IO | PCI_COMMAND_MEMORY |
                                PCI_COMMAND_MASTER | PCI_COMMAND_INVALIDATE;
        int cfn_mode;
 
+       mem_size = (unsigned int)high_memory - PAGE_OFFSET;
+       for (mem_mask = 0x00100000; mem_mask < 0x10000000; mem_mask <<= 1)
+               if (mem_mask >= mem_size)
+                       break;          
+
        /*
         * These registers need to be set up whether we're the
         * central function or not.
         */
-       mem_size = (unsigned int)high_memory - PAGE_OFFSET;
-       *CSR_SDRAMBASEMASK    = (mem_size - 1) & 0x0ffc0000;
+       *CSR_SDRAMBASEMASK    = (mem_mask - 1) & 0x0ffc0000;
        *CSR_SDRAMBASEOFFSET  = 0;
        *CSR_ROMBASEMASK      = 0x80000000;
        *CSR_CSRBASEMASK      = 0;
index 2ad2edf..121a279 100644 (file)
@@ -156,7+156,7 @@ static void a5k_floppy_enable_dma(dmach_t channel, dma_t *dma)
        memcpy((void *)0x1c, fiqhandler_start, fiqhandler_length);
        regs.ARM_r9 = dma->buf.length;
        regs.ARM_r10 = dma->buf.address;
-       regs.ARM_fp = (int)PCIO_FLOPPYDMABASE;
+       regs.ARM_fp = FLOPPYDMA_BASE;
        set_fiq_regs(&regs);
        enable_irq(dma->dma_irq);
 }
@@ -191,7+191,7 @@ static struct dma_ops sound_dma_ops = {
 void __init arch_dma_init(dma_t *dma)
 {
 #if defined(CONFIG_BLK_DEV_FD1772) || defined(CONFIG_BLK_DEV_FD1772_MODULE)
-       if (machine_is_arc()) {
+       if (machine_is_archimedes()) {
                dma[DMA_VIRTUAL_FLOPPY0].dma_irq = 64;
                dma[DMA_VIRTUAL_FLOPPY0].d_ops   = &arc_floppy_data_dma_ops;
                dma[DMA_VIRTUAL_FLOPPY1].dma_irq = 65;
index c8c7374..e659b96 100644 (file)
                strb    r12, [r12, #0x38]       @ Disable FIQ register
                .endm
 
-               .macro  get_irqnr_and_base, irqnr, irqstat, base
+               .macro  get_irqnr_and_base, irqnr, irqstat, base, tmp
                mov     r4, #ioc_base_high              @ point at IOC
                .if     ioc_base_low
                orr     r4, r4, #ioc_base_low
@@ -165,36+165,23 @@ irq_prio_h:       .byte    0, 8, 9, 8,10,10,10,10,11,11,11,11,10,10,10,10
                .macro  disable_fiq
                .endm
 
-               .macro  get_irqnr_and_base, irqnr, irqstat, base
-               mov     r4, #0xf3000000
-               ldrb    \irqstat, [r4]                  @ get interrupts
-               adr     \base, irq_prio_ebsa110
-
-               teq     \irqstat, #0
-               ldrneb  \irqnr, [\base, \irqstat]       @ get IRQ number
+               .macro  get_irqnr_and_base, irqnr, stat, base, tmp
+               mov     \base, #IRQ_STAT
+               ldrb    \stat, [\base]                  @ get interrupts
+               mov     \irqnr, #0
+               tst     \stat, #15
+               addeq   \irqnr, \irqnr, #4
+               moveq   \stat, \stat, lsr #4
+               tst     \stat, #3
+               addeq   \irqnr, \irqnr, #2
+               moveq   \stat, \stat, lsr #2
+               tst     \stat, #1
+               addeq   \irqnr, \irqnr, #1
+               moveq   \stat, \stat, lsr #1
+               tst     \stat, #1                       @ bit 0 should be set
                .endm
 
                .macro  irq_prio_table
-irq_prio_ebsa110:
-               .byte    0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 1, 1, 2, 2, 2, 2
-               .byte    4, 4, 1, 1, 2, 2, 2, 2, 3, 3, 1, 1, 2, 2, 2, 2
-               .byte    5, 5, 1, 1, 2, 2, 2, 2, 3, 3, 1, 1, 2, 2, 2, 2
-               .byte    5, 5, 1, 1, 2, 2, 2, 2, 3, 3, 1, 1, 2, 2, 2, 2
-
-               .byte    6, 6, 6, 6, 2, 2, 2, 2, 3, 3, 6, 6, 2, 2, 2, 2
-               .byte    6, 6, 6, 6, 2, 2, 2, 2, 3, 3, 6, 6, 2, 2, 2, 2
-               .byte    6, 6, 6, 6, 2, 2, 2, 2, 3, 3, 6, 6, 2, 2, 2, 2
-               .byte    6, 6, 6, 6, 2, 2, 2, 2, 3, 3, 6, 6, 2, 2, 2, 2
-
-               .byte    7, 0, 1, 1, 2, 2, 2, 2, 3, 3, 1, 1, 2, 2, 2, 2
-               .byte    4, 4, 1, 1, 2, 2, 2, 2, 3, 3, 1, 1, 2, 2, 2, 2
-               .byte    5, 5, 1, 1, 2, 2, 2, 2, 3, 3, 1, 1, 2, 2, 2, 2
-               .byte    5, 5, 1, 1, 2, 2, 2, 2, 3, 3, 1, 1, 2, 2, 2, 2
-
-               .byte    6, 6, 6, 6, 2, 2, 2, 2, 3, 3, 6, 6, 2, 2, 2, 2
-               .byte    6, 6, 6, 6, 2, 2, 2, 2, 3, 3, 6, 6, 2, 2, 2, 2
-               .byte    6, 6, 6, 6, 2, 2, 2, 2, 3, 3, 6, 6, 2, 2, 2, 2
-               .byte    6, 6, 6, 6, 2, 2, 2, 2, 3, 3, 6, 6, 2, 2, 2, 2
                .endm
 
 #elif defined(CONFIG_ARCH_SHARK)
@@ -202,7+189,7 @@ irq_prio_ebsa110:
                .macro  disable_fiq
                .endm
 
-               .macro  get_irqnr_and_base, irqnr, irqstat, base
+               .macro  get_irqnr_and_base, irqnr, irqstat, base, tmp
                mov     r4, #0xe0000000
                orr     r4, r4, #0x20
 
@@ -238,7+225,7 @@ irq_prio_ebsa110:
                .equ    dc21285_high, ARMCSR_BASE & 0xff000000
                .equ    dc21285_low, ARMCSR_BASE & 0x00ffffff
 
-               .macro  get_irqnr_and_base, irqnr, irqstat, base
+               .macro  get_irqnr_and_base, irqnr, irqstat, base, tmp
                mov     r4, #dc21285_high
                .if     dc21285_low
                orr     r4, r4, #dc21285_low
@@ -334,7+321,7 @@ irq_prio_ebsa110:
                .macro  disable_fiq
                .endm
 
-               .macro  get_irqnr_and_base, irqnr, irqstat, base
+               .macro  get_irqnr_and_base, irqnr, irqstat, base, tmp
                ldr     \irqstat, =INTCONT_BASE
                ldr     \base, =soft_irq_mask
                ldr     \irqstat, [\irqstat]            @ get interrupts
@@ -362,7+349,7 @@ ENTRY(soft_irq_mask)
                .macro  disable_fiq
                .endm
 
-               .macro  get_irqnr_and_base, irqnr, irqstat, base
+               .macro  get_irqnr_and_base, irqnr, irqstat, base, tmp
                ldr     \irqstat, =0xffff7000
                ldr     \irqstat, [\irqstat]            @ get interrupts
                ldr     \base, =soft_irq_mask
@@ -390,7+377,7 @@ ENTRY(soft_irq_mask)
                .macro  disable_fiq
                .endm
 
-               .macro  get_irqnr_and_base, irqnr, irqstat, base
+               .macro  get_irqnr_and_base, irqnr, irqstat, base, tmp
                mov     r4, #0xfa000000                 @ ICIP = 0xfa050000
                add     r4, r4, #0x00050000
                ldr     \irqstat, [r4]                  @ get irqs
@@ -428,7+415,7 @@ ENTRY(soft_irq_mask)
                .macro  disable_fiq
                .endm
  
-               .macro  get_irqnr_and_base, irqnr, irqstat, base
+               .macro  get_irqnr_and_base, irqnr, irqstat, base, tmp
                mov     \irqstat, #irq_base_addr                @ Virt addr IRQ regs
                add     \irqstat, \irqstat, #0x00001000         @ Status reg
                ldr     \irqstat, [\irqstat, #0]                @ get interrupts
@@ -449,7+436,7 @@ ENTRY(soft_irq_mask)
                .macro  disable_fiq
                .endm
 
-               .macro  get_irqnr_and_base, irqnr, irqstat, base
+               .macro  get_irqnr_and_base, irqnr, irqstat, base, tmp
 /* FIXME: should not be using soo many LDRs here */
                ldr     \irqnr, =IO_ADDRESS(INTEGRATOR_IC_BASE)
                ldr     \irqstat, [\irqnr, #IRQ_STATUS]         @ get masked status
@@ -470,6+457,50 @@ ENTRY(soft_irq_mask)
                .macro  irq_prio_table
                .endm
 
+#elif defined(CONFIG_ARCH_P720T)
+
+               .macro  disable_fiq
+               .endm
+
+#if (INTSR2 - INTSR1) != (INTMR2 - INTMR1)
+#error INTSR stride != INTMR stride
+#endif
+
+               .macro  get_irqnr_and_base, irqnr, stat, base, mask
+               mov     \base, #CLPS7111_BASE
+               ldr     \stat, [\base, #INTSR1]
+               ldr     \mask, [\base, #INTMR1]
+               mov     \irqnr, #4
+               mov     \mask, \mask, lsl #16
+               and     \stat, \stat, \mask, lsr #16
+               movs    \stat, \stat, lsr #4
+               bne     1001f
+
+               add     \base, \base, #INTSR2 - INTSR1
+               ldr     \stat, [\base, #INTSR1]
+               ldr     \mask, [\base, #INTMR1]
+               mov     \irqnr, #16
+               mov     \mask, \mask, lsl #16
+               and     \stat, \stat, \mask, lsr #16
+
+1001:          tst     \stat, #255
+               addeq   \irqnr, \irqnr, #8
+               moveq   \stat, \stat, lsr #8
+               tst     \stat, #15
+               addeq   \irqnr, \irqnr, #4
+               moveq   \stat, \stat, lsr #4
+               tst     \stat, #3
+               addeq   \irqnr, \irqnr, #2
+               moveq   \stat, \stat, lsr #2
+               tst     \stat, #1
+               addeq   \irqnr, \irqnr, #1
+               moveq   \stat, \stat, lsr #1
+               tst     \stat, #1                       @ bit 0 should be set
+               .endm
+
+               .macro  irq_prio_table
+               .endm
+
 #else
 #error Unknown architecture
 #endif
@@ -594,7+625,7 @@ fpe_not_present:
                adr     r10, wfs_mask_data
                ldmia   r10, {r4, r5, r6, r7, r8}
                ldr     r10, [sp, #S_PC]                @ Load PC
-               sub     r10, r10, #-4
+               sub     r10, r10, #4
                mask_pc r10, r10
                ldrt    r10, [r10]                      @ get instruction
                and     r5, r10, r5
@@ -660,7+691,7 @@ __irq_svc:  sub     sp, sp, #S_FRAME_SIZE
                add     r4, sp, #S_SP
                mov     r6, lr
                stmia   r4, {r5, r6, r7, r8, r9}        @ save sp_SVC, lr_SVC, pc, cpsr, old_ro
-1:             get_irqnr_and_base r0, r6, r5
+1:             get_irqnr_and_base r0, r6, r5, lr
                movne   r1, sp
                @
                @ routine called with r0 = irq number, r1 = struct pt_regs *
@@ -695,6+726,28 @@ __und_svc: sub     sp, sp, #S_FRAME_SIZE
                ldmia   sp, {r0 - pc}^                  @ Restore SVC registers
 
                .align  5
+__pabt_svc:    sub     sp, sp, #S_FRAME_SIZE
+               stmia   sp, {r0 - r12}                  @ save r0 - r12
+               ldr     r2, .LCabt
+               add     r0, sp, #S_FRAME_SIZE
+               ldmia   r2, {r2 - r4}                   @ get pc, cpsr
+               add     r5, sp, #S_SP
+               mov     r1, lr
+               stmia   r5, {r0 - r4}                   @ save sp_SVC, lr_SVC, pc, cpsr, old_ro
+               mrs     r9, cpsr                        @ Enable interrupts if they were
+               tst     r3, #I_BIT
+               biceq   r9, r9, #I_BIT                  @ previously
+               msr     cpsr_c, r9
+               mov     r0, r2                          @ address (pc)
+               mov     r1, sp                          @ regs
+               bl      SYMBOL_NAME(do_PrefetchAbort)   @ call abort handler
+               mov     r0, #I_BIT | MODE_SVC
+               msr     cpsr_c, r0
+               ldr     r0, [sp, #S_PSR]
+               msr     spsr, r0
+               ldmia   sp, {r0 - pc}^                  @ load r0 - pc, cpsr
+
+               .align  5
 .LCirq:                .word   __temp_irq
 .LCund:                .word   __temp_und
 .LCabt:                .word   __temp_abt
@@ -744,7+797,7 @@ __irq_usr:  sub     sp, sp, #S_FRAME_SIZE
                stmdb   r8, {sp, lr}^
                alignment_trap r4, r7, __temp_irq
                zero_fp
-1:             get_irqnr_and_base r0, r6, r5
+1:             get_irqnr_and_base r0, r6, r5, lr
                movne   r1, sp
                adrsvc  ne, lr, 1b
                @
@@ -762,7+815,7 @@ __und_usr:  sub     sp, sp, #S_FRAME_SIZE           @ Allocate frame size in one go
                add     r8, sp, #S_PC
                ldmia   r4, {r5 - r7}
                stmia   r8, {r5 - r7}                   @ Save USR pc, cpsr, old_r0
-               stmdb   r8, {sp, lr}^                   @ Save user r0 - r12
+               stmdb   r8, {sp, lr}^                   @ Save user sp, lr
                alignment_trap r4, r7, __temp_und
                zero_fp
                adrsvc  al, r9, ret_from_sys_call       @ r9  = normal FP return
@@ -960,12+1013,25 @@ vector_prefetch:
                msr     spsr_c, r13                     @ switch to SVC_32 mode
 
                ands    lr, lr, #15
-               ldreq   lr, .LCtab_pabt
-               ldrne   lr, .LCtab_pabt + 4
+               ldr     lr, [pc, lr, lsl #2]
                movs    pc, lr
 
-.LCtab_pabt:   .word   __pabt_usr
-               .word   __pabt_invalid
+.LCtab_pabt:   .word   __pabt_usr                      @  0 (USR_26 / USR_32)
+               .word   __pabt_invalid                  @  1 (FIQ_26 / FIQ_32)
+               .word   __pabt_invalid                  @  2 (IRQ_26 / IRQ_32)
+               .word   __pabt_svc                      @  3 (SVC_26 / SVC_32)
+               .word   __pabt_invalid                  @  4
+               .word   __pabt_invalid                  @  5
+               .word   __pabt_invalid                  @  6
+               .word   __pabt_invalid                  @  7
+               .word   __pabt_invalid                  @  8
+               .word   __pabt_invalid                  @  9
+               .word   __pabt_invalid                  @  a
+               .word   __pabt_invalid                  @  b
+               .word   __pabt_invalid                  @  c
+               .word   __pabt_invalid                  @  d
+               .word   __pabt_invalid                  @  e
+               .word   __pabt_invalid                  @  f
 
                .align  5
 
index b74d755..1be23e8 100644 (file)
@@ -131,15+131,14 @@ void set_fiq_regs(struct pt_regs *regs)
 #endif
 #ifdef CONFIG_CPU_32
        "mrs    %0, cpsr
-       bic     %1, %0, #0xf
-       orr     %1, %1, #0xc1
-       msr     cpsr, %1        @ select FIQ mode
+       mov     %1, #0xc1
+       msr     cpsr_c, %1      @ select FIQ mode
        mov     r0, r0
        ldmia   %2, {r8 - r14}
-       msr     cpsr, %0        @ return to SVC mode
+       msr     cpsr_c, %0      @ return to SVC mode
        mov     r0, r0"
 #endif
-       : "=r" (tmp), "=r" (tmp2)
+       : "=&r" (tmp), "=&r" (tmp2)
        : "r" (&regs->ARM_r8)
        /* These registers aren't modified by the above code in a way
           visible to the compiler, but we mark them as clobbers anyway
@@ -164,15+163,14 @@ void get_fiq_regs(struct pt_regs *regs)
 #endif
 #ifdef CONFIG_CPU_32
        "mrs    %0, cpsr
-       bic     %1, %0, #0xf
-       orr     %1, %1, #0xc1
-       msr     cpsr, %1        @ select FIQ mode
+       mov     %1, #0xc1
+       msr     cpsr_c, %1      @ select FIQ mode
        mov     r0, r0
        stmia   %2, {r8 - r14}
-       msr     cpsr, %0        @ return to SVC mode
+       msr     cpsr_c, %0      @ return to SVC mode
        mov     r0, r0"
 #endif
-       : "=r" (tmp), "=r" (tmp2)
+       : "=&r" (tmp), "=&r" (tmp2)
        : "r" (&regs->ARM_r8)
        /* These registers aren't modified by the above code in a way
           visible to the compiler, but we mark them as clobbers anyway
index f42f333..13dd0d0 100644 (file)
  */
                .section ".text.init",#alloc,#execinstr
 ENTRY(stext)
-ENTRY(_stext)
 __entry:       cmp     pc, #0x02000000
                ldrlt   pc, LC0                 @ if 0x01800000, call at 0x02080000
                teq     r0, #0                  @ Check for old calling method
index 5e141bf..5e529e7 100644 (file)
 #include <asm/mach-types.h>
 #include <asm/mach/arch.h>
 
-#if (TEXTADDR & 0xffff) != 0x8000
-#error TEXTADDR must start at 0xXXXX8000
-#endif
-
 #define K(a,b,c)       ((a) << 24 | (b) << 12 | (c))
 
 /*
- * swapper_pg_dir is the virtual address of the "init_task" page tables.
- * SWAPPER_PGDIR_OFFSET is the offset from the start of memory of the
- * page tables.
+ * We place the page tables 16K below TEXTADDR.  Therefore, we must make sure
+ * that TEXTADDR is correctly set.  Currently, we expect the least significant
+ * "short" to be 0x8000, but we could probably relax this restriction to
+ * TEXTADDR > PAGE_OFFSET + 0x4000
  *
- * Note that at the moment, we assume TEXTADDR is the virtual equivalent
- * of start of memory + 0x8000
+ * Note that swapper_pg_dir is the virtual address of the page tables, and
+ * pgtbl gives us a position-independent reference to these tables.  We can
+ * do this because stext == TEXT_ADDR
  */
-#define SWAPPER_PGDIR_OFFSET   0x4000
+#if (TEXTADDR & 0xffff) != 0x8000
+#error TEXTADDR must start at 0xXXXX8000
+#endif
+
                .globl  SYMBOL_NAME(swapper_pg_dir)
-               .equ    SYMBOL_NAME(swapper_pg_dir),    TEXTADDR - 0x8000 + SWAPPER_PGDIR_OFFSET
+               .equ    SYMBOL_NAME(swapper_pg_dir), TEXTADDR - 0x4000
+
+               .macro  pgtbl, reg
+               adr     \reg, stext
+               sub     \reg, \reg, #0x4000
+               .endm
 
                .section ".text.init",#alloc,#execinstr
                .type   stext, #function
 ENTRY(stext)
-ENTRY(_stext)
 /*
  * Entry point.  The general rules are:
  *  should be called with r0 == 0
@@ -185,7+190,7 @@ __mmap_switched:
  * r8 = page table flags
  */
 __create_page_tables:
-               add     r4, r5, #SWAPPER_PGDIR_OFFSET
+               pgtbl   r4
                mov     r0, r4
                mov     r3, #0
                add     r2, r0, #0x4000                 @ 16k of page table
index fe40c58..7d8858b 100644 (file)
@@ -26,12+26,12 @@ static unsigned char latch_b_copy;
 /* newval=(oldval & ~mask)|newdata */
 void oldlatch_aupdate(unsigned char mask,unsigned char newdata)
 {
-       if (machine_is_arc()) {
+       if (machine_is_archimedes()) {
                latch_a_copy = (latch_a_copy & ~mask) | newdata;
 
                printk("Latch: A = 0x%02x\n", latch_a_copy);
 
-               outb(latch_a_copy, LATCHAADDR);
+               __raw_writeb(latch_a_copy, LATCHA_BASE);
        } else
                BUG();
 }
@@ -40,19+40,19 @@ void oldlatch_aupdate(unsigned char mask,unsigned char newdata)
 /* newval=(oldval & ~mask)|newdata */
 void oldlatch_bupdate(unsigned char mask,unsigned char newdata)
 {
-       if (machine_is_arc()) {
+       if (machine_is_archimedes()) {
                latch_b_copy = (latch_b_copy & ~mask) | newdata;
 
                printk("Latch: B = 0x%02x\n", latch_b_copy);
 
-               outb(latch_b_copy, LATCHBADDR);
+               __raw_writeb(latch_b_copy, LATCHB_BASE);
        } else
                BUG();
 }
 
 static void __init oldlatch_init(void)
 {
-       if (machine_is_arc()) {
+       if (machine_is_archimedes()) {
                oldlatch_aupdate(0xff, 0xff);
                /* Thats no FDC reset...*/
                oldlatch_bupdate(0xff, LATCHB_FDCRESET);
index 8e8e367..76db09e 100644 (file)
 #include "ptrace.h"
 
 extern void c_backtrace (unsigned long fp, int pmode);
+extern void show_pte(struct mm_struct *mm, unsigned long addr);
 
 const char *processor_modes[]=
 { "USER_26", "FIQ_26" , "IRQ_26" , "SVC_26" , "UK4_26" , "UK5_26" , "UK6_26" , "UK7_26" ,
@@ -72,10+73,14 @@ void dump_mem(unsigned long bottom, unsigned long top)
                printk("%08lx: ", p);
 
                for (i = 0; i < 8; i++, p += 4) {
+                       unsigned int val;
+
                        if (p < bottom || p >= top)
                                printk("         ");
-                       else
-                               printk("%08lx ", *(unsigned long *)p);
+                       else {
+                               __get_user(val, (unsigned long *)p);
+                               printk("%08x ", val);
+                       }
                        if (i == 3)
                                printk(" ");
                }
@@ -91,45+96,57 @@ void dump_mem(unsigned long bottom, unsigned long top)
 #define VMALLOC_OFFSET (8*1024*1024)
 #define MODULE_RANGE (8*1024*1024)
 
-static void dump_instr(unsigned long pc, int user)
+static void dump_instr(struct pt_regs *regs)
 {
-       int pmin = -2, pmax = 3, ok = 0;
-       extern char start_kernel, _etext;
-
-       if (!user) {
-               unsigned long module_start, module_end;
-               unsigned long kernel_start, kernel_end;
-
-               module_start = VMALLOC_START;
-               module_end   = module_start + MODULE_RANGE;
-
-               kernel_start = (unsigned long)&start_kernel;
-               kernel_end   = (unsigned long)&_etext;
-
-               if (pc >= kernel_start && pc < kernel_end) {
-                       if (pc + pmin < kernel_start)
-                               pmin = kernel_start - pc;
-                       if (pc + pmax > kernel_end)
-                               pmax = kernel_end - pc;
-                       ok = 1;
-               } else if (pc >= module_start && pc < module_end) {
-                       if (pc + pmin < module_start)
-                               pmin = module_start - pc;
-                       if (pc + pmax > module_end)
-                               pmax = module_end - pc;
-                       ok = 1;
+       unsigned long addr = instruction_pointer(regs);
+       const int thumb = thumb_mode(regs);
+       const int width = thumb ? 4 : 8;
+       int i;
+
+       printk("Code: ");
+       for (i = -2; i < 3; i++) {
+               unsigned int val, bad;
+
+               if (thumb)
+                       bad = __get_user(val, &((u16 *)addr)[i]);
+               else
+                       bad = __get_user(val, &((u32 *)addr)[i]);
+
+               if (!bad)
+                       printk(i == 0 ? "(%0*x) " : "%0*x", width, val);
+               else {
+                       printk("bad PC value.");
+                       break;
                }
-       } else
-               ok = verify_area(VERIFY_READ, (void *)(pc + pmin), pmax - pmin) == 0;
-
-       printk ("Code: ");
-       if (ok) {
-               int i;
-               for (i = pmin; i < pmax; i++)
-                       printk(i == 0 ? "(%08lx) " : "%08lx ", ((unsigned long *)pc)[i]);
-               printk ("\n");
-       } else
-               printk ("pc not in code space\n");
+       }
+       printk("\n");
+}
+
+static void dump_stack(struct task_struct *tsk, unsigned long sp)
+{
+       printk("Stack:\n");
+       dump_mem(sp - 16, 8192+(unsigned long)tsk);
+}
+
+static void dump_backtrace(struct pt_regs *regs, struct task_struct *tsk)
+{
+       unsigned int fp;
+       int ok = 1;
+
+       printk("Backtrace: ");
+       fp = regs->ARM_fp;
+       if (!fp) {
+               printk("no frame pointer");
+               ok = 0;
+       } else if (verify_stack(fp)) {
+               printk("invalid frame pointer %08lx", fp);
+               ok = 0;
+       } else if (fp < 4096+(unsigned long)tsk)
+               printk("frame pointer underflow");
+       printk("\n");
+
+       if (ok)
+               c_backtrace(fp, processor_mode(regs));
 }
 
 spinlock_t die_lock = SPIN_LOCK_UNLOCKED;
@@ -141,9+158,9 @@ void die(const char *str, struct pt_regs *regs, int err)
 {
        struct task_struct *tsk = current;
 
+       console_verbose();
        spin_lock_irq(&die_lock);
 
-       console_verbose();
        printk("Internal error: %s: %x\n", str, err);
        printk("CPU: %d\n", smp_processor_id());
        show_regs(regs);
@@ -151,39+168,22 @@ void die(const char *str, struct pt_regs *regs, int err)
                current->comm, current->pid, 4096+(unsigned long)tsk);
 
        if (!user_mode(regs)) {
-               unsigned long sp = (unsigned long)(regs + 1);
-               unsigned long fp;
-               int dump_info = 1;
-
-               printk("Stack: ");
-               if (verify_stack(sp)) {
-                       printk("invalid kernel stack pointer %08lx", sp);
-                       dump_info = 0;
-               } else if (sp < 4096+(unsigned long)tsk)
-                       printk("kernel stack pointer underflow");
-               printk("\n");
-
-               if (dump_info)
-                       dump_mem(sp - 16, 8192+(unsigned long)tsk);
-
-               dump_info = 1;
-
-               printk("Backtrace: ");
-               fp = regs->ARM_fp;
-               if (!fp) {
-                       printk("no frame pointer");
-                       dump_info = 0;
-               } else if (verify_stack(fp)) {
-                       printk("invalid frame pointer %08lx", fp);
-                       dump_info = 0;
-               } else if (fp < 4096+(unsigned long)tsk)
-                       printk("frame pointer underflow");
-               printk("\n");
-
-               if (dump_info)
-                       c_backtrace(fp, processor_mode(regs));
-
-               dump_instr(instruction_pointer(regs), 0);
+               mm_segment_t fs;
+
+               /*
+                * We need to switch to kernel mode so that we can
+                * use __get_user to safely read from kernel space.
+                * Note that we now dump the code first, just in case
+                * the backtrace kills us.
+                */
+               fs = get_fs();
+               set_fs(KERNEL_DS);
+
+               dump_instr(regs);
+               dump_stack(tsk, (unsigned long)(regs + 1));
+               dump_backtrace(regs, tsk);
+
+               set_fs(fs);
        }
 
        spin_unlock_irq(&die_lock);
@@ -206,6+206,7 @@ asmlinkage void do_undefinstr(int address, struct pt_regs *regs, int mode)
 #ifdef CONFIG_DEBUG_USER
        printk(KERN_INFO "%s (%d): undefined instruction: pc=%08lx\n",
                current->comm, current->pid, addr);
+       dump_instr(regs);
 #endif
 
        current->thread.error_code = 0;
@@ -228,6+229,7 @@ asmlinkage void do_excpt(int address, struct pt_regs *regs, int mode)
 #ifdef CONFIG_DEBUG_USER
        printk(KERN_INFO "%s (%d): address exception: pc=%08lx\n",
                current->comm, current->pid, instruction_pointer(regs));
+       dump_instr(regs);
 #endif
 
        current->thread.error_code = 0;
@@ -275,7+277,7 @@ asmlinkage void bad_mode(struct pt_regs *regs, int reason, int proc_mode)
 
        die("Oops", regs, 0);
        cli();
-       while(1);
+       panic("bad mode");
 }
 
 /*
@@ -332,6+334,7 @@ asmlinkage int arm_syscall(int no, struct pt_regs *regs)
                 * something catastrophic has happened
                 */
                printk("[%d] %s: arm syscall %d\n", current->pid, current->comm, no);
+               dump_instr(regs);
                if (user_mode(regs)) {
                        show_regs(regs);
                        c_backtrace(regs->ARM_fp, processor_mode(regs));
@@ -359,8+362,9 @@ asmlinkage void deferred(int n, struct pt_regs *regs)
        }
 
 #ifdef CONFIG_DEBUG_USER
-       printk(KERN_ERR "[%d] %s: obsolete system call %08x.\n", current->pid, 
-              current->comm, n);
+       printk(KERN_ERR "[%d] %s: obsolete system call %08x.\n",
+               current->pid, current->comm, n);
+       dump_instr(regs);
 #endif
        force_sig(SIGILL, current);
        die_if_kernel("Oops", regs, n);
@@ -384,21+388,10 @@ baddataabort(int code, unsigned long instr, struct pt_regs *regs)
        siginfo_t info;
 
 #ifdef CONFIG_DEBUG_USER
-       dump_instr(addr, 1);
-       {
-               pgd_t *pgd;
-
-               pgd = pgd_offset(current->mm, addr);
-               printk ("*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");
-       }
+       printk(KERN_ERR "[%d] %s: bad data abort: code %d instr 0x%08lx\n",
+               current->pid, current->comm, code, instr);
+       dump_instr(regs);
+       show_pte(current->mm, addr);
 #endif
 
        info.si_signo = SIGILL;
index 42a2bb4..ab97b6e 100644 (file)
@@ -76,7+76,7 @@ static struct pci_ops via82c505_ops = {
 
 #ifdef CONFIG_ARCH_SHARK
 
-static char size_wanted = 0;
+static char size_wanted;
 
 static int
 dummy_read_config_byte(struct pci_dev *dev, int where, u8 *value)
index b7e29ca..fa7f101 100644 (file)
@@ -13,19+13,35 @@ L_OBJS   := changebit.o csumipv6.o csumpartial.o csumpartialcopy.o \
            strncpy_from_user.o strnlen_user.o strchr.o strrchr.o  \
            testchangebit.o testclearbit.o testsetbit.o uaccess.o
 
+l-obj-y        :=
+l-obj-n        :=
+
 O_TARGET := lib.o
 O_OBJS   := backtrace.o delay.o
 
-L_OBJS_arc             := io-acorn.o floppydma.o
-L_OBJS_rpc             := io-acorn.o floppydma.o
+ifeq ($(CONFIG_ARCH_ACORN),y)
+  half := n
+  full := y
+else
+  half := y
+  full := n
+endif
+
+L_OBJS_arc             := ecard.o io-acorn.o floppydma.o
+L_OBJS_rpc             := ecard.o io-acorn.o floppydma.o
 L_OBJS_clps7500                := io-acorn.o
-L_OBJS_ebsa110         := io-ebsa110.o
-L_OBJS_footbridge      := io-footbridge.o
+L_OBJS_footbridge      := io-pcio.o
 L_OBJS_l7200           := io-acorn.o
-L_OBJS_nexuspci                := io-footbridge.o
-L_OBJS_sa1100          := io-footbridge.o
+L_OBJS_nexuspci                := io-pcio.o
+L_OBJS_sa1100          := io-pcio.o
 L_OBJS_shark           := io-shark.o
-L_OBJS_integrator      := io-shark.o
+L_OBJS_integrator      := io-pcio.o
+L_OBJS_clps711x                := io-shark.o
+
+l-obj-y                        += io-readsb.o io-writesb.o
+l-obj-$(full)          += io-readsw-armv3.o io-writesw-armv3.o
+l-obj-$(half)          += io-readsw-armv4.o io-writesw-armv4.o
+l-obj-y                        += io-readsl.o io-writesl.o
 
 ifeq ($(PROCESSOR),armo)
   L_OBJS += uaccess-armo.o
@@ -35,7+51,7 @@ ifneq ($(MACHINE),ebsa110)
   OX_OBJS += io.o
 endif
 
-L_OBJS += $(L_OBJS_$(MACHINE))
+L_OBJS += $(L_OBJS_$(MACHINE)) $(l-obj-y)
 
 include $(TOPDIR)/Rules.make
 
diff --git a/arch/arm/lib/ecard.S b/arch/arm/lib/ecard.S
new file mode 100644 (file)
index 0000000..9b0452d
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ *  linux/arch/arm/lib/ecard.S
+ *
+ *  Copyright (C) 1995, 1996 Russell King
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+#include <linux/config.h> /* for CONFIG_CPU_nn */
+#include <linux/linkage.h>
+#include <asm/assembler.h>
+#include <asm/hardware.h>
+
+#if defined(CONFIG_CPU_26)
+#define CPSR2SPSR(rt)
+#else
+#define CPSR2SPSR(rt) \
+               mrs     rt, cpsr; \
+               msr     spsr, rt
+#endif
+
+@ Purpose: call an expansion card loader to read bytes.
+@ Proto  : char read_loader(int offset, char *card_base, char *loader);
+@ Returns: byte read
+
+ENTRY(ecard_loader_read)
+               stmfd   sp!, {r4 - r12, lr}
+               mov     r11, r1
+               mov     r1, r0
+               CPSR2SPSR(r0)
+               mov     lr, pc
+               mov     pc, r2
+               LOADREGS(fd, sp!, {r4 - r12, pc})
+
+@ Purpose: call an expansion card loader to reset the card
+@ Proto  : void read_loader(int card_base, char *loader);
+@ Returns: byte read
+
+ENTRY(ecard_loader_reset)
+               stmfd   sp!, {r4 - r12, lr}
+               mov     r11, r0
+               CPSR2SPSR(r0)
+               mov     lr, pc
+               add     pc, r1, #8
+               LOADREGS(fd, sp!, {r4 - r12, pc})
+
dissimilarity index 82%
index bc40496..a40272f 100644 (file)
-/*
- *  linux/arch/arm/lib/io-acorn.S
- *
- *  Copyright (C) 1995, 1996 Russell King
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-#include <linux/config.h> /* for CONFIG_CPU_nn */
-#include <linux/linkage.h>
-#include <asm/assembler.h>
-#include <asm/hardware.h>
-
-               .text
-               .align
-
-               .equ    diff_pcio_base, PCIO_BASE - IO_BASE
-
-               .macro  outw2   rd
-               mov     r8, \rd, lsl #16
-               orr     r8, r8, r8, lsr #16
-               str     r8, [r3, r0, lsl #2]
-               mov     r8, \rd, lsr #16
-               orr     r8, r8, r8, lsl #16
-               str     r8, [r3, r0, lsl #2]
-               .endm
-
-               .macro  inw2    rd, mask, temp
-               ldr     \rd, [r0]
-               and     \rd, \rd, \mask
-               ldr     \temp, [r0]
-               orr     \rd, \rd, \temp, lsl #16
-               .endm
-
-               .macro  addr    rd
-               tst     \rd, #0x80000000
-               mov     \rd, \rd, lsl #2
-               add     \rd, \rd, #IO_BASE
-               addeq   \rd, \rd, #diff_pcio_base
-               .endm
-
-.iosw_bad_align_msg:
-               .ascii  "insw: bad buffer alignment (%p), called from %08lX\n\0"
-.iosl_warning:
-               .ascii  "<4>insl/outsl not implemented, called from %08lX\0"
-               .align
-
-/*
- * These make no sense on Acorn machines.
- * Print a warning message.
- */
-ENTRY(insl)
-ENTRY(outsl)
-               adr     r0, .iosl_warning
-               mov     r1, lr
-               b       SYMBOL_NAME(printk)
-
-.iosw_bad_alignment:
-               adr     r0, .iosw_bad_align_msg
-               mov     r2, lr
-               b       SYMBOL_NAME(panic)
-
-
-/* Purpose: read a block of data from a hardware register to memory.
- * Proto  : void insw(int from_port, void *to, int len_in_words);
- * Notes  : increment to, 'to' must be 16-bit aligned
- */
-
-.insw_align:   tst     r1, #1
-               bne     .iosw_bad_alignment
-
-               ldr     r3, [r0]
-               strb    r3, [r1], #1
-               mov     r3, r3, lsr #8
-               strb    r3, [r1], #1
-
-               subs    r2, r2, #1
-               bne     .insw_aligned
-
-ENTRY(insw)
-               teq     r2, #0
-               RETINSTR(moveq,pc,lr)
-               addr    r0
-               tst     r1, #3
-               bne     .insw_align
-
-.insw_aligned: mov     ip, #0xff
-               orr     ip, ip, ip, lsl #8
-               stmfd   sp!, {r4, r5, r6, lr}
-
-               subs    r2, r2, #8
-               bmi     .no_insw_8
-
-.insw_8_lp:    ldr     r3, [r0]
-               and     r3, r3, ip
-               ldr     r4, [r0]
-               orr     r3, r3, r4, lsl #16
-
-               ldr     r4, [r0]
-               and     r4, r4, ip
-               ldr     r5, [r0]
-               orr     r4, r4, r5, lsl #16
-
-               ldr     r5, [r0]
-               and     r5, r5, ip
-               ldr     r6, [r0]
-               orr     r5, r5, r6, lsl #16
-
-               ldr     r6, [r0]
-               and     r6, r6, ip
-               ldr     lr, [r0]
-               orr     r6, r6, lr, lsl #16
-
-               stmia   r1!, {r3 - r6}
-               subs    r2, r2, #8
-               bpl     .insw_8_lp
-               tst     r2, #7
-               LOADREGS(eqfd, sp!, {r4, r5, r6, pc})
-
-.no_insw_8:    tst     r2, #4
-               beq     .no_insw_4
-
-               ldr     r3, [r0]
-               and     r3, r3, ip
-               ldr     r4, [r0]
-               orr     r3, r3, r4, lsl #16
-
-               ldr     r4, [r0]
-               and     r4, r4, ip
-               ldr     r5, [r0]
-               orr     r4, r4, r5, lsl #16
-
-               stmia   r1!, {r3, r4}
-
-.no_insw_4:    tst     r2, #2
-               beq     .no_insw_2
-
-               ldr     r3, [r0]
-               and     r3, r3, ip
-               ldr     r4, [r0]
-               orr     r3, r3, r4, lsl #16
-
-               str     r3, [r1], #4
-
-.no_insw_2:    tst     r2, #1
-               ldrne   r3, [r0]
-               strneb  r3, [r1], #1
-               movne   r3, r3, lsr #8
-               strneb  r3, [r1]
-               LOADREGS(fd, sp!, {r4, r5, r6, pc})
-
-@ Purpose: write a block of data from memory to a hardware register.
-@ Proto  : outsw(int to_reg, void *from, int len_in_words);
-@ Notes  : increments from
-
-.outsw_align:  tst     r1, #1
-               bne     .iosw_bad_alignment
-
-               add     r1, r1, #2
-
-               ldr     r3, [r1, #-4]
-               mov     r3, r3, lsr #16
-               orr     r3, r3, r3, lsl #16
-               str     r3, [r0]
-               subs    r2, r2, #1
-               bne     .outsw_aligned
-
-ENTRY(outsw)
-               teq     r2, #0
-               RETINSTR(moveq,pc,lr)
-               addr    r0
-               tst     r1, #3
-               bne     .outsw_align
-
-.outsw_aligned:        stmfd   sp!, {r4, r5, r6, lr}
-
-               subs    r2, r2, #8
-               bmi     .no_outsw_8
-.outsw_8_lp:   ldmia   r1!, {r3, r4, r5, r6}
-
-               mov     ip, r3, lsl #16
-               orr     ip, ip, ip, lsr #16
-               str     ip, [r0]
-
-               mov     ip, r3, lsr #16
-               orr     ip, ip, ip, lsl #16
-               str     ip, [r0]
-
-               mov     ip, r4, lsl #16
-               orr     ip, ip, ip, lsr #16
-               str     ip, [r0]
-
-               mov     ip, r4, lsr #16
-               orr     ip, ip, ip, lsl #16
-               str     ip, [r0]
-
-               mov     ip, r5, lsl #16
-               orr     ip, ip, ip, lsr #16
-               str     ip, [r0]
-
-               mov     ip, r5, lsr #16
-               orr     ip, ip, ip, lsl #16
-               str     ip, [r0]
-
-               mov     ip, r6, lsl #16
-               orr     ip, ip, ip, lsr #16
-               str     ip, [r0]
-
-               mov     ip, r6, lsr #16
-               orr     ip, ip, ip, lsl #16
-               str     ip, [r0]
-
-               subs    r2, r2, #8
-               bpl     .outsw_8_lp
-               tst     r2, #7
-               LOADREGS(eqfd, sp!, {r4, r5, r6, pc})
-
-.no_outsw_8:   tst     r2, #4
-               beq     .no_outsw_4
-
-               ldmia   r1!, {r3, r4}
-
-               mov     ip, r3, lsl #16
-               orr     ip, ip, ip, lsr #16
-               str     ip, [r0]
-
-               mov     ip, r3, lsr #16
-               orr     ip, ip, ip, lsl #16
-               str     ip, [r0]
-
-               mov     ip, r4, lsl #16
-               orr     ip, ip, ip, lsr #16
-               str     ip, [r0]
-
-               mov     ip, r4, lsr #16
-               orr     ip, ip, ip, lsl #16
-               str     ip, [r0]
-
-.no_outsw_4:   tst     r2, #2
-               beq     .no_outsw_2
-
-               ldr     r3, [r1], #4
-
-               mov     ip, r3, lsl #16
-               orr     ip, ip, ip, lsr #16
-               str     ip, [r0]
-
-               mov     ip, r3, lsr #16
-               orr     ip, ip, ip, lsl #16
-               str     ip, [r0]
-
-.no_outsw_2:   tst     r2, #1
-
-               ldrne   r3, [r1]
-
-               movne   ip, r3, lsl #16
-               orrne   ip, ip, ip, lsr #16
-               strne   ip, [r0]
-
-               LOADREGS(fd, sp!, {r4, r5, r6, pc})
-
-.insb_align:   rsb     ip, ip, #4
-               cmp     ip, r2
-               movgt   ip, r2
-               cmp     ip, #2
-               ldrb    r3, [r0]
-               strb    r3, [r1], #1
-               ldrgeb  r3, [r0]
-               strgeb  r3, [r1], #1
-               ldrgtb  r3, [r0]
-               strgtb  r3, [r1], #1
-               subs    r2, r2, ip
-               bne     .insb_aligned
-
-ENTRY(insb)
-               teq     r2, #0
-               moveq   pc, lr
-               addr    r0
-               ands    ip, r1, #3
-               bne     .insb_align
-
-.insb_aligned: stmfd   sp!, {r4 - r6, lr}
-
-               subs    r2, r2, #16
-               bmi     .insb_no_16
-
-.insb_16_lp:   ldrb    r3, [r0]
-               ldrb    r4, [r0]
-               orr     r3, r3, r4, lsl #8
-               ldrb    r4, [r0]
-               orr     r3, r3, r4, lsl #16
-               ldrb    r4, [r0]
-               orr     r3, r3, r4, lsl #24
-               ldrb    r4, [r0]
-               ldrb    r5, [r0]
-               orr     r4, r4, r5, lsl #8
-               ldrb    r5, [r0]
-               orr     r4, r4, r5, lsl #16
-               ldrb    r5, [r0]
-               orr     r4, r4, r5, lsl #24
-               ldrb    r5, [r0]
-               ldrb    r6, [r0]
-               orr     r5, r5, r6, lsl #8
-               ldrb    r6, [r0]
-               orr     r5, r5, r6, lsl #16
-               ldrb    r6, [r0]
-               orr     r5, r5, r6, lsl #24
-               ldrb    r6, [r0]
-               ldrb    ip, [r0]
-               orr     r6, r6, ip, lsl #8
-               ldrb    ip, [r0]
-               orr     r6, r6, ip, lsl #16
-               ldrb    ip, [r0]
-               orr     r6, r6, ip, lsl #24
-               stmia   r1!, {r3 - r6}
-               subs    r2, r2, #16
-               bpl     .insb_16_lp
-
-               tst     r2, #15
-               LOADREGS(eqfd, sp!, {r4 - r6, pc})
-
-.insb_no_16:   tst     r2, #8
-               beq     .insb_no_8
-
-               ldrb    r3, [r0]
-               ldrb    r4, [r0]
-               orr     r3, r3, r4, lsl #8
-               ldrb    r4, [r0]
-               orr     r3, r3, r4, lsl #16
-               ldrb    r4, [r0]
-               orr     r3, r3, r4, lsl #24
-               ldrb    r4, [r0]
-               ldrb    r5, [r0]
-               orr     r4, r4, r5, lsl #8
-               ldrb    r5, [r0]
-               orr     r4, r4, r5, lsl #16
-               ldrb    r5, [r0]
-               orr     r4, r4, r5, lsl #24
-               stmia   r1!, {r3, r4}
-
-.insb_no_8:    tst     r2, #4
-               bne     .insb_no_4
-
-               ldrb    r3, [r0]
-               ldrb    r4, [r0]
-               orr     r3, r3, r4, lsl #8
-               ldrb    r4, [r0]
-               orr     r3, r3, r4, lsl #16
-               ldrb    r4, [r0]
-               orr     r3, r3, r4, lsl #24
-               str     r3, [r1], #4
-
-.insb_no_4:    ands    r2, r2, #3
-               LOADREGS(eqfd, sp!, {r4 - r6, pc})
-               cmp     r2, #2
-               ldrb    r3, [r0]
-               strb    r3, [r1], #1
-               ldrgeb  r3, [r0]
-               strgeb  r3, [r1], #1
-               ldrgtb  r3, [r0]
-               strgtb  r3, [r1]
-               LOADREGS(fd, sp!, {r4 - r6, pc})
-
-
-
-.outsb_align:  rsb     ip, ip, #4
-               cmp     ip, r2
-               mov     ip, r2
-               cmp     ip, #2
-               ldrb    r3, [r1], #1
-               strb    r3, [r0]
-               ldrgeb  r3, [r1], #1
-               strgeb  r3, [r0]
-               ldrgtb  r3, [r1], #1
-               strgtb  r3, [r0]
-               subs    r2, r2, ip
-               bne     .outsb_aligned
-
-ENTRY(outsb)
-               teq     r2, #0
-               moveq   pc, lr
-               addr    r0
-               ands    ip, r1, #3
-               bne     .outsb_align
-
-.outsb_aligned:        stmfd   sp!, {r4 - r6, lr}
-
-               subs    r2, r2, #16
-               bmi     .outsb_no_16
-
-.outsb_16_lp:  ldmia   r1!, {r3 - r6}
-               strb    r3, [r0]
-               mov     r3, r3, lsr #8
-               strb    r3, [r0]
-               mov     r3, r3, lsr #8
-               strb    r3, [r0]
-               mov     r3, r3, lsr #8
-               strb    r3, [r0]
-
-               strb    r4, [r0]
-               mov     r4, r4, lsr #8
-               strb    r4, [r0]
-               mov     r4, r4, lsr #8
-               strb    r4, [r0]
-               mov     r4, r4, lsr #8
-               strb    r4, [r0]
-
-               strb    r5, [r0]
-               mov     r5, r5, lsr #8
-               strb    r5, [r0]
-               mov     r5, r5, lsr #8
-               strb    r5, [r0]
-               mov     r5, r5, lsr #8
-               strb    r5, [r0]
-
-               strb    r6, [r0]
-               mov     r6, r6, lsr #8
-               strb    r6, [r0]
-               mov     r6, r6, lsr #8
-               strb    r6, [r0]
-               mov     r6, r6, lsr #8
-               strb    r6, [r0]
-               subs    r2, r2, #16
-               bpl     .outsb_16_lp
-
-               tst     r2, #15
-               LOADREGS(eqfd, sp!, {r4 - r6, pc})
-
-.outsb_no_16:  tst     r2, #8
-               beq     .outsb_no_8
-
-               ldmia   r1, {r3, r4}
-               strb    r3, [r0]
-               mov     r3, r3, lsr #8
-               strb    r3, [r0]
-               mov     r3, r3, lsr #8
-               strb    r3, [r0]
-               mov     r3, r3, lsr #8
-               strb    r3, [r0]
-
-               strb    r4, [r0]
-               mov     r4, r4, lsr #8
-               strb    r4, [r0]
-               mov     r4, r4, lsr #8
-               strb    r4, [r0]
-               mov     r4, r4, lsr #8
-               strb    r4, [r0]
-
-.outsb_no_8:   tst     r2, #4
-               bne     .outsb_no_4
-
-               ldr     r3, [r1], #4
-               strb    r3, [r0]
-               mov     r3, r3, lsr #8
-               strb    r3, [r0]
-               mov     r3, r3, lsr #8
-               strb    r3, [r0]
-               mov     r3, r3, lsr #8
-               strb    r3, [r0]
-
-.outsb_no_4:   ands    r2, r2, #3
-               LOADREGS(eqfd, sp!, {r4 - r6, pc})
-               cmp     r2, #2
-               ldrb    r3, [r1], #1
-               strb    r3, [r0]
-               ldrgeb  r3, [r1], #1
-               strgeb  r3, [r0]
-               ldrgtb  r3, [r1]
-               strgtb  r3, [r0]
-               LOADREGS(fd, sp!, {r4 - r6, pc})
-
-
-
-
-@ Purpose: write a memc register
-@ Proto  : void memc_write(int register, int value);
-@ Returns: nothing
-
-#if defined(CONFIG_CPU_26)
-ENTRY(memc_write)
-               cmp     r0, #7
-               RETINSTR(movgt,pc,lr)
-               mov     r0, r0, lsl #17
-               mov     r1, r1, lsl #15
-               mov     r1, r1, lsr #17
-               orr     r0, r0, r1, lsl #2
-               add     r0, r0, #0x03600000
-               strb    r0, [r0]
-               RETINSTR(mov,pc,lr)
-#define CPSR2SPSR(rt)
-#else
-#define CPSR2SPSR(rt) \
-               mrs     rt, cpsr; \
-               msr     spsr, rt
-#endif
-
-@ Purpose: call an expansion card loader to read bytes.
-@ Proto  : char read_loader(int offset, char *card_base, char *loader);
-@ Returns: byte read
-
-ENTRY(ecard_loader_read)
-               stmfd   sp!, {r4 - r12, lr}
-               mov     r11, r1
-               mov     r1, r0
-               CPSR2SPSR(r0)
-               mov     lr, pc
-               mov     pc, r2
-               LOADREGS(fd, sp!, {r4 - r12, pc})
-
-@ Purpose: call an expansion card loader to reset the card
-@ Proto  : void read_loader(int card_base, char *loader);
-@ Returns: byte read
-
-ENTRY(ecard_loader_reset)
-               stmfd   sp!, {r4 - r12, lr}
-               mov     r11, r0
-               CPSR2SPSR(r0)
-               mov     lr, pc
-               add     pc, r1, #8
-               LOADREGS(fd, sp!, {r4 - r12, pc})
-
-
-#if 0
-               mov     r2, r2, lsl#1
-               mov     ip, sp
-               stmfd   sp!, {r4 - r10, fp, ip, lr, pc}
-               sub     fp, ip, #4
-               addr    r3, r0
-               add     r0, r3, r0, lsl #2
-               tst     r1, #3
-               beq     Linswok
-               tst     r1, #1
-               bne     Linsw_notaligned
-               cmp     r2, #1
-               ldrge   r4, [r0]
-               strgeb  r4, [r1], #1
-               movgt   r4, r4, LSR#8
-               strgtb  r4, [r1], #1
-               LOADREGS(leea, fp, {r4 - r10, fp, sp, pc})
-               sub     r2, r2, #2
-Linswok:       mov     ip, #0xFF
-               orr     ip, ip, ip, lsl #8
-Linswlp:       subs    r2, r2, #64
-               bmi     Linsw_toosmall
-               IN(r3)
-               IN(r4)
-               IN(r5)
-               IN(r6)
-               IN(r7)
-               IN(r8)
-               IN(r9)
-               IN(r10)
-               stmia   r1!, {r3 - r10}
-               IN(r3)
-               IN(r4)
-               IN(r5)
-               IN(r6)
-               IN(r7)
-               IN(r8)
-               IN(r9)
-               IN(r10)
-               stmia   r1!, {r3 - r10}
-               bne     Linswlp
-               LOADREGS(ea, fp, {r4 - r10, fp, sp, pc})
-Linsw_toosmall:
-               adds    r2, r2, #32
-               bmi     Linsw_toosmall2
-Linsw2lp:      IN(r3)
-               IN(r4)
-               IN(r5)
-               IN(r6)
-               IN(r7)
-               IN(r8)
-               IN(r9)
-               IN(r10)
-               stmia   r1!, {r3 - r10}
-               LOADREGS(eqea, fp, {r4 - r10, fp, sp, pc})
-               b       Linsw_notaligned
-Linsw_toosmall2:
-               add     r2, r2, #32
-Linsw_notaligned:
-               cmp     r2, #1
-               LOADREGS(ltea, fp, {r4 - r10, fp, sp, pc})
-               ldr     r4, [r0]
-               strb    r4, [r1], #1
-               movgt   r4, r4, LSR#8
-               strgtb  r4, [r1], #1
-               subs    r2, r2, #2
-               bgt     Linsw_notaligned
-               LOADREGS(ea, fp, {r4 - r10, fp, sp, pc})
-
-
-ENTRY(outsw)
-               mov     r2, r2, lsl#1
-               mov     ip, sp
-               stmfd   sp!, {r4 - r8, fp, ip, lr, pc}
-               sub     fp, ip, #4
-               addr    r3, r0
-               tst     r1, #2
-               beq     1f
-               ldr     r4, [r1], #2
-               mov     r4, r4, lsl #16
-               orr     r4, r4, r4, lsr #16
-               str     r4, [r3, r0, lsl #2]
-               subs    r2, r2, #2
-               LOADREGS(eqea, fp, {r4 - r8, fp, sp, pc})
-1:             subs    r2, r2, #32
-               blt     2f
-               ldmia   r1!, {r4, r5, r6, r7}
-               OUT(r4)
-               OUT(r5)
-               OUT(r6)
-               OUT(r7)
-               ldmia   r1!, {r4, r5, r6, r7}
-               OUT(r4)
-               OUT(r5)
-               OUT(r6)
-               OUT(r7)
-               bne     1b
-               LOADREGS(ea, fp, {r4 - r8, fp, sp, pc})
-2:             adds    r2, r2, #32
-               LOADREGS(eqea, fp, {r4 - r8, fp, sp, pc})
-3:             ldr     r4, [r1],#2
-               mov     r4, r4, lsl#16
-               orr     r4, r4, r4, lsr#16
-               str     r4, [r3, r0, lsl#2]
-               subs    r2, r2, #2
-               bgt     3b
-               LOADREGS(ea, fp, {r4 - r8, fp, sp, pc})
-
-#endif
-
+/*
+ *  linux/arch/arm/lib/io-acorn.S
+ *
+ *  Copyright (C) 1995, 1996 Russell King
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+#include <linux/config.h> /* for CONFIG_CPU_nn */
+#include <linux/linkage.h>
+#include <asm/assembler.h>
+#include <asm/hardware.h>
+
+               .text
+               .align
+
+               .equ    diff_pcio_base, PCIO_BASE - IO_BASE
+
+               .macro  outw2   rd
+               mov     r8, \rd, lsl #16
+               orr     r8, r8, r8, lsr #16
+               str     r8, [r3, r0, lsl #2]
+               mov     r8, \rd, lsr #16
+               orr     r8, r8, r8, lsl #16
+               str     r8, [r3, r0, lsl #2]
+               .endm
+
+               .macro  inw2    rd, mask, temp
+               ldr     \rd, [r0]
+               and     \rd, \rd, \mask
+               ldr     \temp, [r0]
+               orr     \rd, \rd, \temp, lsl #16
+               .endm
+
+               .macro  addr    rd
+               tst     \rd, #0x80000000
+               mov     \rd, \rd, lsl #2
+               add     \rd, \rd, #IO_BASE
+               addeq   \rd, \rd, #diff_pcio_base
+               .endm
+
+.iosl_warning:
+               .ascii  "<4>insl/outsl not implemented, called from %08lX\0"
+               .align
+
+/*
+ * These make no sense on Acorn machines.
+ * Print a warning message.
+ */
+ENTRY(insl)
+ENTRY(outsl)
+               adr     r0, .iosl_warning
+               mov     r1, lr
+               b       SYMBOL_NAME(printk)
+
+/* Purpose: read a block of data from a hardware register to memory.
+ * Proto  : void insw(int from_port, void *to, int len_in_words);
+ * Notes  : increment to, 'to' must be 16-bit aligned
+ */
+
+ENTRY(insw)
+               teq     r2, #0
+               RETINSTR(moveq, pc, lr)
+               addr    r0
+               b       __arch_readsw
+
+ENTRY(insb)
+               teq     r2, #0
+               RETINSTR(moveq, pc, lr)
+               addr    r0
+               b       __arch_readsb
+
+@ Purpose: write a block of data from memory to a hardware register.
+@ Proto  : outsw(int to_reg, void *from, int len_in_words);
+@ Notes  : increments from
+
+ENTRY(outsw)
+               teq     r2, #0
+               RETINSTR(moveq, pc, lr)
+               addr    r0
+               b       __arch_writesw
+
+ENTRY(outsb)
+               teq     r2, #0
+               RETINSTR(moveq, pc, lr)
+               addr    r0
+               b       __arch_writesb
+
+@ Purpose: write a memc register
+@ Proto  : void memc_write(int register, int value);
+@ Returns: nothing
+
+#if defined(CONFIG_CPU_26)
+ENTRY(memc_write)
+               cmp     r0, #7
+               RETINSTR(movgt,pc,lr)
+               mov     r0, r0, lsl #17
+               mov     r1, r1, lsl #15
+               mov     r1, r1, lsr #17
+               orr     r0, r0, r1, lsl #2
+               add     r0, r0, #0x03600000
+               strb    r0, [r0]
+               RETINSTR(mov,pc,lr)
+#endif
+
diff --git a/arch/arm/lib/io-ebsa110.S b/arch/arm/lib/io-ebsa110.S
deleted file mode 100644 (file)
index b1c5078..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- *  linux/arch/arm/lib/io-ebsa.S
- *
- *  Copyright (C) 1995, 1996 Russell King
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-#include <linux/linkage.h>
-#include <asm/assembler.h>
-               .text
-               .align
-
-#define OUT(reg)                                       \
-               mov     r8, reg, lsl $16                ;\
-               orr     r8, r8, r8, lsr $16             ;\
-               str     r8, [r3, r0, lsl $2]            ;\
-               mov     r8, reg, lsr $16                ;\
-               orr     r8, r8, r8, lsl $16             ;\
-               str     r8, [r3, r0, lsl $2]
-
-#define IN(reg)                                                \
-               ldr     reg, [r0]                       ;\
-               and     reg, reg, ip                    ;\
-               ldr     lr, [r0]                        ;\
-               orr     reg, reg, lr, lsl $16
-
-/*
- * These make no sense on these machines.
- * Print a warning message.
- */
-ENTRY(insl)
-ENTRY(outsl)
-ENTRY(insb)
-ENTRY(outsb)
-               adr     r0, io_long_warning
-               mov     r1, lr
-               b       SYMBOL_NAME(printk)
-
-io_long_warning:
-               .ascii  "<4>ins?/outs? not implemented on this architecture\0"
-               .align
-
-@ Purpose: read a block of data from a hardware register to memory.
-@ Proto  : insw(int from_port, void *to, int len_in_words);
-@ Proto  : inswb(int from_port, void *to, int len_in_bytes);
-@ Notes  : increment to
-
-ENTRY(insw)
-               mov     r2, r2, lsl#1
-ENTRY(inswb)
-               mov     ip, sp
-               stmfd   sp!, {r4 - r10 ,fp ,ip ,lr ,pc}
-               sub     fp, ip, #4
-               cmp     r0, #0x00c00000
-               movge   r3, #0
-               movlt   r3, #0xf0000000
-               add     r0, r3, r0, lsl #2
-               tst     r1, #3
-               beq     Linswok
-               tst     r1, #1
-               bne     Linsw_notaligned
-               cmp     r2, #1
-               ldrge   r4, [r0]
-               strgeb  r4, [r1], #1
-               movgt   r4, r4, LSR#8
-               strgtb  r4, [r1], #1
-               ldmleea fp, {r4 - r10, fp, sp, pc}^
-               sub     r2, r2, #2
-Linswok:       mov     ip, #0xFF
-               orr     ip, ip, ip, lsl #8
-Linswlp:       subs    r2, r2, #64
-               bmi     Linsw_toosmall
-               IN(r3)
-               IN(r4)
-               IN(r5)
-               IN(r6)
-               IN(r7)
-               IN(r8)
-               IN(r9)
-               IN(r10)
-               stmia   r1!, {r3 - r10}
-               IN(r3)
-               IN(r4)
-               IN(r5)
-               IN(r6)
-               IN(r7)
-               IN(r8)
-               IN(r9)
-               IN(r10)
-               stmia   r1!, {r3 - r10}
-               bne     Linswlp
-               LOADREGS(ea, fp, {r4 - r10, fp, sp, pc})
-Linsw_toosmall:
-               add     r2, r2, #32
-               bmi     Linsw_toosmall2
-Linsw2lp:      IN(r3)
-               IN(r4)
-               IN(r5)
-               IN(r6)
-               IN(r7)
-               IN(r8)
-               IN(r9)
-               IN(r10)
-               stmia   r1!, {r3 - r10}
-               LOADREGS(eqea, fp, {r4 - r10, fp, sp, pc})
-               b       Linsw_notaligned
-Linsw_toosmall2:
-               add     r2, r2, #32
-Linsw_notaligned:
-               cmp     r2, #1
-               LOADREGS(ltea, fp, {r4 - r10, fp, sp, pc})
-               ldr     r4, [r0]
-               strb    r4, [r1], #1
-               movgt   r4, r4, LSR#8
-               strgtb  r4, [r1], #1
-               subs    r2, r2, #2
-               bgt     Linsw_notaligned
-               LOADREGS(ea, fp, {r4 - r10, fp, sp, pc})
-
-@ Purpose: write a block of data from memory to a hardware register.
-@ Proto  : outsw(int to_reg, void *from, int len_in_words);
-@ Proto  : outswb(int to_reg, void *from, int len_in_bytes);
-@ Notes  : increments from
-
-ENTRY(outsw)
-               mov     r2, r2, LSL#1
-ENTRY(outswb)
-               mov     ip, sp
-               stmfd   sp!, {r4 - r8, fp, ip, lr, pc}
-               sub     fp, ip, #4
-               cmp     r0, #0x00c00000
-               movge   r3, #0
-               movlt   r3, #0xf0000000
-               tst     r1, #2
-               beq     Loutsw32lp
-               ldr     r4, [r1], #2
-               mov     r4, r4, lsl #16
-               orr     r4, r4, r4, lsr #16
-               str     r4, [r3, r0, lsl #2]
-               sub     r2, r2, #2
-               teq     r2, #0
-               LOADREGS(eqea, fp, {r4 - r8, fp, sp, pc})
-Loutsw32lp:    subs    r2,r2,#32
-               blt     Loutsw_toosmall
-               ldmia   r1!,{r4,r5,r6,r7}
-               OUT(r4)
-               OUT(r5)
-               OUT(r6)
-               OUT(r7)
-               ldmia   r1!,{r4,r5,r6,r7}
-               OUT(r4)
-               OUT(r5)
-               OUT(r6)
-               OUT(r7)
-               LOADREGS(eqea, fp, {r4 - r8, fp, sp, pc})
-               b       Loutsw32lp
-Loutsw_toosmall:
-               adds    r2,r2,#32
-               LOADREGS(eqea, fp, {r4 - r8, fp, sp, pc})
-Llpx:          ldr     r4,[r1],#2
-               mov     r4,r4,LSL#16
-               orr     r4,r4,r4,LSR#16
-               str     r4,[r3,r0,LSL#2]
-               subs    r2,r2,#2
-               bgt     Llpx
-               LOADREGS(ea, fp, {r4 - r8, fp, sp, pc})
-
diff --git a/arch/arm/lib/io-footbridge.S b/arch/arm/lib/io-footbridge.S
deleted file mode 100644 (file)
index 98f7512..0000000
+++ /dev/null
@@ -1,202 +0,0 @@
-#include <linux/linkage.h>
-#include <asm/hardware.h>
-
-               .equ    pcio_high, PCIO_BASE & 0xff000000
-               .equ    pcio_low,  PCIO_BASE & 0x00ffffff
-
-               .macro  ioaddr, rd,rn
-               add     \rd, \rn, #pcio_high
-               .if     pcio_low
-               add     \rd, \rd, #pcio_low
-               .endif
-               .endm
-
-ENTRY(insl)
-               ioaddr  r0, r0
-               ands    ip, r1, #3
-               bne     2f
-
-1:             ldr     r3, [r0]
-               str     r3, [r1], #4
-               subs    r2, r2, #1
-               bne     1b
-               mov     pc, lr
-
-2:             cmp     ip, #2
-               ldr     ip, [r0]
-               blt     4f
-               bgt     6f
-
-               strh    ip, [r1], #2
-               mov     ip, ip, lsr #16
-3:             subs    r2, r2, #1
-               ldrne   r3, [r0]
-               orrne   ip, ip, r3, lsl #16
-               strne   ip, [r1], #4
-               movne   ip, r3, lsr #16
-               bne     3b
-               strh    ip, [r1], #2
-               mov     pc, lr
-
-4:             strb    ip, [r1], #1
-               mov     ip, ip, lsr #8
-               strh    ip, [r1], #2
-               mov     ip, ip, lsr #16
-5:             subs    r2, r2, #1
-               ldrne   r3, [r0]
-               orrne   ip, ip, r3, lsl #8
-               strne   ip, [r1], #4
-               movne   ip, r3, lsr #24
-               bne     5b
-               strb    ip, [r1], #1
-               mov     pc, lr
-
-6:             strb    ip, [r1], #1
-               mov     ip, ip, lsr #8
-7:             subs    r2, r2, #1
-               ldrne   r3, [r0]
-               orrne   ip, ip, r3, lsl #24
-               strne   ip, [r1], #4
-               movne   ip, r3, lsr #8
-               bne     7b
-               strb    ip, [r1], #1
-               mov     ip, ip, lsr #8
-               strh    ip, [r1], #2
-               mov     pc, lr
-
-ENTRY(outsl)
-               ioaddr  r0, r0
-               ands    ip, r1, #3
-               bne     2f
-
-1:             ldr     r3, [r1], #4
-               str     r3, [r0]
-               subs    r2, r2, #1
-               bne     1b
-               mov     pc, lr
-
-2:             bic     r1, r1, #3
-               cmp     ip, #2
-               ldr     ip, [r1], #4
-               mov     ip, ip, lsr #16
-               blt     4f
-               bgt     5f
-
-3:             ldr     r3, [r1], #4
-               orr     ip, ip, r3, lsl #16
-               str     ip, [r0]
-               mov     ip, r3, lsr #16
-               subs    r2, r2, #1
-               bne     3b
-               mov     pc, lr
-
-4:             ldr     r3, [r1], #4
-               orr     ip, ip, r3, lsl #8
-               str     ip, [r0]
-               mov     ip, r3, lsr #24
-               subs    r2, r2, #1
-               bne     4b
-               mov     pc, lr
-
-5:             ldr     r3, [r1], #4
-               orr     ip, ip, r3, lsl #24
-               str     ip, [r0]
-               mov     ip, r3, lsr #8
-               subs    r2, r2, #1
-               bne     5b
-               mov     pc, lr
-
-               /* Nobody could say these are optimal, but not to worry. */
-
-ENTRY(outswb)
-               mov     r2, r2, lsr #1
-ENTRY(outsw)
-               ioaddr  r0, r0
-1:             subs    r2, r2, #1
-               ldrgeh  r3, [r1], #2
-               strgeh  r3, [r0]
-               bgt     1b
-               mov     pc, lr
-
-ENTRY(inswb)
-               mov     r2, r2, lsr #1
-ENTRY(insw)
-               stmfd   sp!, {r4, r5, lr}
-               ioaddr  r0, r0
-                                               @ + 8 + 9 +10 +11 +12 +13 +14 +15 +16 +17
-               subs    ip, r2, #8
-               blo     too_little
-                                               @ + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9
-               ands    lr, r1, #3              @ check alignment
-               beq     1f
-
-               ldrh    r3, [r0]
-               strh    r3, [r1], #2
-               sub     ip, ip, #1
-               cmn     ip, #8
-               blo     too_little
-
-1:             ldrh    r2, [r0]
-               ldrh    r3, [r0]
-               orr     r2, r2, r3, lsl #16
-               ldrh    r3, [r0]
-               ldrh    r4, [r0]
-               orr     r3, r3, r4, lsl #16
-               ldrh    r4, [r0]
-               ldrh    r5, [r0]
-               orr     r4, r4, r5, lsl #16
-               ldrh    r5, [r0]
-               ldrh    lr, [r0]
-               orr     r5, r5, lr, lsl #16
-               stmia   r1!, {r2, r3, r4, r5}
-               subs    ip, ip, #8
-                                               @ - 8 - 7 - 6 - 5 - 4 - 3 - 2 - 1 + 0 + 1
-               bhs     1b
-                                               @ - 8 - 7 - 6 - 5 - 4 - 3 - 2 - 1 - 8 - 7
-               cmn     ip, #4
-               ldrhsh  r2, [r0]                @ ... ... ... ... - 4 - 3 - 2 - 1 ... ...
-               ldrhsh  r3, [r0]
-               orrhs   r2, r2, r3, lsl #16
-               ldrhsh  r3, [r0]
-               ldrhsh  r4, [r0]
-               orrhs   r3, r3, r4, lsl #16
-               stmhsia r1!, {r2, r3}
-
-               tst     ip, #2
-               ldrneh  r2, [r0]                @ ... ... - 6 - 5 ... ... - 2 - 1 ... ...
-               ldrneh  r3, [r0]
-               orrne   r2, r2, r3, lsl #16
-               strne   r2, [r1], #4
-
-               tst     ip, #1
-               ldrneh  r2, [r0]
-               strneh  r2, [r1], #2
-
-               ldmfd   sp!, {r4, r5, pc}
-
-too_little:    subs    r2, r2, #1
-               ldrgeh  r3, [r0]
-               strgeh  r3, [r1], #2
-               bgt     too_little
-
-               ldmfd   sp!, {r4, r5, pc}
-
-
-ENTRY(insb)
-               ioaddr  r0, r0
-1:             teq     r2, #0
-               ldrneb  r3, [r0]
-               strneb  r3, [r1], #1
-               subne   r2, r2, #1
-               bne     1b
-               mov     pc, lr
-
-
-ENTRY(outsb)
-               ioaddr  r0, r0
-1:             teq     r2, #0
-               ldrneb  r3, [r1], #1
-               strneb  r3, [r0]
-               subne   r2, r2, #1
-               bne     1b
-               mov     pc, lr
diff --git a/arch/arm/lib/io-pcio.S b/arch/arm/lib/io-pcio.S
new file mode 100644 (file)
index 0000000..f57abfc
--- /dev/null
@@ -0,0 +1,38 @@
+#include <linux/linkage.h>
+#include <asm/hardware.h>
+
+               .equ    pcio_high, PCIO_BASE & 0xff000000
+               .equ    pcio_low,  PCIO_BASE & 0x00ffffff
+
+               .macro  ioaddr, rd,rn
+               add     \rd, \rn, #pcio_high
+               .if     pcio_low
+               add     \rd, \rd, #pcio_low
+               .endif
+               .endm
+
+ENTRY(insl)
+               ioaddr  r0, r0
+               b       __arch_readsl
+
+ENTRY(outsl)
+               ioaddr  r0, r0
+               b       __arch_writesl
+
+               /* Nobody could say these are optimal, but not to worry. */
+
+ENTRY(outsw)
+               ioaddr  r0, r0
+               b       __arch_writesw
+
+ENTRY(insw)
+               ioaddr  r0, r0
+               b       __arch_readsw
+
+ENTRY(insb)
+               ioaddr  r0, r0
+               b       __arch_readsb
+
+ENTRY(outsb)
+               ioaddr  r0, r0
+               b       __arch_writesb
diff --git a/arch/arm/lib/io-readsb.S b/arch/arm/lib/io-readsb.S
new file mode 100644 (file)
index 0000000..23cca89
--- /dev/null
@@ -0,0 +1,111 @@
+/*
+ *  linux/arch/arm/lib/io-readsb.S
+ *
+ *  Copyright (C) 1995-2000 Russell King
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+#include <linux/linkage.h>
+#include <asm/assembler.h>
+#include <asm/hardware.h>
+
+.insb_align:   rsb     ip, ip, #4
+               cmp     ip, r2
+               movgt   ip, r2
+               cmp     ip, #2
+               ldrb    r3, [r0]
+               strb    r3, [r1], #1
+               ldrgeb  r3, [r0]
+               strgeb  r3, [r1], #1
+               ldrgtb  r3, [r0]
+               strgtb  r3, [r1], #1
+               subs    r2, r2, ip
+               bne     .insb_aligned
+
+ENTRY(__arch_readsb)
+               ands    ip, r1, #3
+               bne     .insb_align
+
+.insb_aligned: stmfd   sp!, {r4 - r6, lr}
+
+               subs    r2, r2, #16
+               bmi     .insb_no_16
+
+.insb_16_lp:   ldrb    r3, [r0]
+               ldrb    r4, [r0]
+               orr     r3, r3, r4, lsl #8
+               ldrb    r4, [r0]
+               orr     r3, r3, r4, lsl #16
+               ldrb    r4, [r0]
+               orr     r3, r3, r4, lsl #24
+               ldrb    r4, [r0]
+               ldrb    r5, [r0]
+               orr     r4, r4, r5, lsl #8
+               ldrb    r5, [r0]
+               orr     r4, r4, r5, lsl #16
+               ldrb    r5, [r0]
+               orr     r4, r4, r5, lsl #24
+               ldrb    r5, [r0]
+               ldrb    r6, [r0]
+               orr     r5, r5, r6, lsl #8
+               ldrb    r6, [r0]
+               orr     r5, r5, r6, lsl #16
+               ldrb    r6, [r0]
+               orr     r5, r5, r6, lsl #24
+               ldrb    r6, [r0]
+               ldrb    ip, [r0]
+               orr     r6, r6, ip, lsl #8
+               ldrb    ip, [r0]
+               orr     r6, r6, ip, lsl #16
+               ldrb    ip, [r0]
+               orr     r6, r6, ip, lsl #24
+               stmia   r1!, {r3 - r6}
+               subs    r2, r2, #16
+               bpl     .insb_16_lp
+
+               tst     r2, #15
+               LOADREGS(eqfd, sp!, {r4 - r6, pc})
+
+.insb_no_16:   tst     r2, #8
+               beq     .insb_no_8
+
+               ldrb    r3, [r0]
+               ldrb    r4, [r0]
+               orr     r3, r3, r4, lsl #8
+               ldrb    r4, [r0]
+               orr     r3, r3, r4, lsl #16
+               ldrb    r4, [r0]
+               orr     r3, r3, r4, lsl #24
+               ldrb    r4, [r0]
+               ldrb    r5, [r0]
+               orr     r4, r4, r5, lsl #8
+               ldrb    r5, [r0]
+               orr     r4, r4, r5, lsl #16
+               ldrb    r5, [r0]
+               orr     r4, r4, r5, lsl #24
+               stmia   r1!, {r3, r4}
+
+.insb_no_8:    tst     r2, #4
+               bne     .insb_no_4
+
+               ldrb    r3, [r0]
+               ldrb    r4, [r0]
+               orr     r3, r3, r4, lsl #8
+               ldrb    r4, [r0]
+               orr     r3, r3, r4, lsl #16
+               ldrb    r4, [r0]
+               orr     r3, r3, r4, lsl #24
+               str     r3, [r1], #4
+
+.insb_no_4:    ands    r2, r2, #3
+               LOADREGS(eqfd, sp!, {r4 - r6, pc})
+               cmp     r2, #2
+               ldrb    r3, [r0]
+               strb    r3, [r1], #1
+               ldrgeb  r3, [r0]
+               strgeb  r3, [r1], #1
+               ldrgtb  r3, [r0]
+               strgtb  r3, [r1]
+               LOADREGS(fd, sp!, {r4 - r6, pc})
diff --git a/arch/arm/lib/io-readsl.S b/arch/arm/lib/io-readsl.S
new file mode 100644 (file)
index 0000000..5301754
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ *  linux/arch/arm/lib/io-readsb.S
+ *
+ *  Copyright (C) 1995-2000 Russell King
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+#include <linux/linkage.h>
+#include <asm/assembler.h>
+#include <asm/hardware.h>
+
+ENTRY(__arch_readsl)
+               ands    ip, r1, #3
+               bne     2f
+
+1:             ldr     r3, [r0]
+               str     r3, [r1], #4
+               subs    r2, r2, #1
+               bne     1b
+               mov     pc, lr
+
+2:             cmp     ip, #2
+               ldr     ip, [r0]
+               blt     4f
+               bgt     6f
+
+               strh    ip, [r1], #2
+               mov     ip, ip, lsr #16
+3:             subs    r2, r2, #1
+               ldrne   r3, [r0]
+               orrne   ip, ip, r3, lsl #16
+               strne   ip, [r1], #4
+               movne   ip, r3, lsr #16
+               bne     3b
+               strh    ip, [r1], #2
+               mov     pc, lr
+
+4:             strb    ip, [r1], #1
+               mov     ip, ip, lsr #8
+               strh    ip, [r1], #2
+               mov     ip, ip, lsr #16
+5:             subs    r2, r2, #1
+               ldrne   r3, [r0]
+               orrne   ip, ip, r3, lsl #8
+               strne   ip, [r1], #4
+               movne   ip, r3, lsr #24
+               bne     5b
+               strb    ip, [r1], #1
+               mov     pc, lr
+
+6:             strb    ip, [r1], #1
+               mov     ip, ip, lsr #8
+7:             subs    r2, r2, #1
+               ldrne   r3, [r0]
+               orrne   ip, ip, r3, lsl #24
+               strne   ip, [r1], #4
+               movne   ip, r3, lsr #8
+               bne     7b
+               strb    ip, [r1], #1
+               mov     ip, ip, lsr #8
+               strh    ip, [r1], #2
+               mov     pc, lr
+
diff --git a/arch/arm/lib/io-readsw-armv3.S b/arch/arm/lib/io-readsw-armv3.S
new file mode 100644 (file)
index 0000000..65fb94e
--- /dev/null
@@ -0,0 +1,102 @@
+/*
+ *  linux/arch/arm/lib/io-readsb.S
+ *
+ *  Copyright (C) 1995-2000 Russell King
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+#include <linux/linkage.h>
+#include <asm/assembler.h>
+#include <asm/hardware.h>
+
+.insw_bad_alignment:
+               adr     r0, .insw_bad_align_msg
+               mov     r2, lr
+               b       SYMBOL_NAME(panic)
+.insw_bad_align_msg:
+               .asciz  "insw: bad buffer alignment (0x%p, lr=0x%08lX)\n"
+               .align
+
+.insw_align:   tst     r1, #1
+               bne     .insw_bad_alignment
+
+               ldr     r3, [r0]
+               strb    r3, [r1], #1
+               mov     r3, r3, lsr #8
+               strb    r3, [r1], #1
+
+               subs    r2, r2, #1
+               RETINSTR(moveq, pc, lr)
+
+ENTRY(__arch_readsw)
+               tst     r1, #3
+               bne     .insw_align
+
+.insw_aligned: mov     ip, #0xff
+               orr     ip, ip, ip, lsl #8
+               stmfd   sp!, {r4, r5, r6, lr}
+
+               subs    r2, r2, #8
+               bmi     .no_insw_8
+
+.insw_8_lp:    ldr     r3, [r0]
+               and     r3, r3, ip
+               ldr     r4, [r0]
+               orr     r3, r3, r4, lsl #16
+
+               ldr     r4, [r0]
+               and     r4, r4, ip
+               ldr     r5, [r0]
+               orr     r4, r4, r5, lsl #16
+
+               ldr     r5, [r0]
+               and     r5, r5, ip
+               ldr     r6, [r0]
+               orr     r5, r5, r6, lsl #16
+
+               ldr     r6, [r0]
+               and     r6, r6, ip
+               ldr     lr, [r0]
+               orr     r6, r6, lr, lsl #16
+
+               stmia   r1!, {r3 - r6}
+               subs    r2, r2, #8
+               bpl     .insw_8_lp
+               tst     r2, #7
+               LOADREGS(eqfd, sp!, {r4, r5, r6, pc})
+
+.no_insw_8:    tst     r2, #4
+               beq     .no_insw_4
+
+               ldr     r3, [r0]
+               and     r3, r3, ip
+               ldr     r4, [r0]
+               orr     r3, r3, r4, lsl #16
+
+               ldr     r4, [r0]
+               and     r4, r4, ip
+               ldr     r5, [r0]
+               orr     r4, r4, r5, lsl #16
+
+               stmia   r1!, {r3, r4}
+
+.no_insw_4:    tst     r2, #2
+               beq     .no_insw_2
+
+               ldr     r3, [r0]
+               and     r3, r3, ip
+               ldr     r4, [r0]
+               orr     r3, r3, r4, lsl #16
+
+               str     r3, [r1], #4
+
+.no_insw_2:    tst     r2, #1
+               ldrne   r3, [r0]
+               strneb  r3, [r1], #1
+               movne   r3, r3, lsr #8
+               strneb  r3, [r1]
+               LOADREGS(fd, sp!, {r4, r5, r6, pc})
+
+
diff --git a/arch/arm/lib/io-readsw-armv4.S b/arch/arm/lib/io-readsw-armv4.S
new file mode 100644 (file)
index 0000000..6f1750a
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+ *  linux/arch/arm/lib/io-readsb.S
+ *
+ *  Copyright (C) 1995-2000 Russell King
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+#include <linux/linkage.h>
+#include <asm/assembler.h>
+#include <asm/hardware.h>
+
+.insw_bad_alignment:
+               adr     r0, .insw_bad_align_msg
+               mov     r2, lr
+               b       SYMBOL_NAME(panic)
+.insw_bad_align_msg:
+               .asciz  "insw: bad buffer alignment (0x%p, lr=0x%08lX)\n"
+               .align
+
+.insw_align:   tst     r1, #1
+               bne     .insw_bad_alignment
+
+               ldrh    r3, [r0]
+               strh    r3, [r1], #2
+
+               subs    r2, r2, #1
+               RETINSTR(moveq, pc, lr)
+
+ENTRY(__arch_readsw)
+               tst     r1, #3
+               bne     .insw_align
+
+               stmfd   sp!, {r4, r5, lr}
+
+               subs    r2, r2, #8
+               bmi     .no_insw_8
+
+.insw_8_lp:    ldrh    r3, [r0]
+               ldrh    r4, [r0]
+               orr     r3, r3, r4, lsl #16
+
+               ldrh    r4, [r0]
+               ldrh    r5, [r0]
+               orr     r4, r4, r5, lsl #16
+
+               ldrh    r5, [r0]
+               ldrh    r6, [r0]
+               orr     r5, r5, r6, lsl #16
+
+               ldrh    ip, [r0]
+               ldrh    lr, [r0]
+               orr     ip, ip, lr, lsl #16
+
+               stmia   r1!, {r3 - r5, ip}
+               subs    r2, r2, #8
+               bpl     .insw_8_lp
+               tst     r2, #7
+               LOADREGS(eqfd, sp!, {r4, r5, pc})
+
+.no_insw_8:    tst     r2, #4
+               beq     .no_insw_4
+
+               ldrh    r3, [r0]
+               ldrh    r4, [r0]
+               orr     r3, r3, r4, lsl #16
+
+               ldrh    r4, [r0]
+               ldrh    ip, [r0]
+               orr     r4, r4, ip, lsl #16
+
+               stmia   r1!, {r3, r4}
+
+.no_insw_4:    tst     r2, #2
+               beq     .no_insw_2
+
+               ldrh    r3, [r0]
+               ldrh    ip, [r0]
+               orr     r3, r3, ip, lsl #16
+
+               str     r3, [r1], #4
+
+.no_insw_2:    tst     r2, #1
+               ldrneh  r3, [r0]
+               strneh  r3, [r1]
+               LOADREGS(fd, sp!, {r4, r5, pc})
diff --git a/arch/arm/lib/io-writesb.S b/arch/arm/lib/io-writesb.S
new file mode 100644 (file)
index 0000000..b919fda
--- /dev/null
@@ -0,0 +1,115 @@
+/*
+ *  linux/arch/arm/lib/io-readsb.S
+ *
+ *  Copyright (C) 1995-2000 Russell King
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+#include <linux/linkage.h>
+#include <asm/assembler.h>
+#include <asm/hardware.h>
+
+.outsb_align:  rsb     ip, ip, #4
+               cmp     ip, r2
+               mov     ip, r2
+               cmp     ip, #2
+               ldrb    r3, [r1], #1
+               strb    r3, [r0]
+               ldrgeb  r3, [r1], #1
+               strgeb  r3, [r0]
+               ldrgtb  r3, [r1], #1
+               strgtb  r3, [r0]
+               subs    r2, r2, ip
+               bne     .outsb_aligned
+
+ENTRY(__arch_writesb)
+               ands    ip, r1, #3
+               bne     .outsb_align
+
+.outsb_aligned:        stmfd   sp!, {r4 - r6, lr}
+
+               subs    r2, r2, #16
+               bmi     .outsb_no_16
+
+.outsb_16_lp:  ldmia   r1!, {r3 - r6}
+               strb    r3, [r0]
+               mov     r3, r3, lsr #8
+               strb    r3, [r0]
+               mov     r3, r3, lsr #8
+               strb    r3, [r0]
+               mov     r3, r3, lsr #8
+               strb    r3, [r0]
+
+               strb    r4, [r0]
+               mov     r4, r4, lsr #8
+               strb    r4, [r0]
+               mov     r4, r4, lsr #8
+               strb    r4, [r0]
+               mov     r4, r4, lsr #8
+               strb    r4, [r0]
+
+               strb    r5, [r0]
+               mov     r5, r5, lsr #8
+               strb    r5, [r0]
+               mov     r5, r5, lsr #8
+               strb    r5, [r0]
+               mov     r5, r5, lsr #8
+               strb    r5, [r0]
+
+               strb    r6, [r0]
+               mov     r6, r6, lsr #8
+               strb    r6, [r0]
+               mov     r6, r6, lsr #8
+               strb    r6, [r0]
+               mov     r6, r6, lsr #8
+               strb    r6, [r0]
+               subs    r2, r2, #16
+               bpl     .outsb_16_lp
+
+               tst     r2, #15
+               LOADREGS(eqfd, sp!, {r4 - r6, pc})
+
+.outsb_no_16:  tst     r2, #8
+               beq     .outsb_no_8
+
+               ldmia   r1, {r3, r4}
+               strb    r3, [r0]
+               mov     r3, r3, lsr #8
+               strb    r3, [r0]
+               mov     r3, r3, lsr #8
+               strb    r3, [r0]
+               mov     r3, r3, lsr #8
+               strb    r3, [r0]
+
+               strb    r4, [r0]
+               mov     r4, r4, lsr #8
+               strb    r4, [r0]
+               mov     r4, r4, lsr #8
+               strb    r4, [r0]
+               mov     r4, r4, lsr #8
+               strb    r4, [r0]
+
+.outsb_no_8:   tst     r2, #4
+               bne     .outsb_no_4
+
+               ldr     r3, [r1], #4
+               strb    r3, [r0]
+               mov     r3, r3, lsr #8
+               strb    r3, [r0]
+               mov     r3, r3, lsr #8
+               strb    r3, [r0]
+               mov     r3, r3, lsr #8
+               strb    r3, [r0]
+
+.outsb_no_4:   ands    r2, r2, #3
+               LOADREGS(eqfd, sp!, {r4 - r6, pc})
+               cmp     r2, #2
+               ldrb    r3, [r1], #1
+               strb    r3, [r0]
+               ldrgeb  r3, [r1], #1
+               strgeb  r3, [r0]
+               ldrgtb  r3, [r1]
+               strgtb  r3, [r0]
+               LOADREGS(fd, sp!, {r4 - r6, pc})
diff --git a/arch/arm/lib/io-writesl.S b/arch/arm/lib/io-writesl.S
new file mode 100644 (file)
index 0000000..ccda08c
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ *  linux/arch/arm/lib/io-readsb.S
+ *
+ *  Copyright (C) 1995-2000 Russell King
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+#include <linux/linkage.h>
+#include <asm/assembler.h>
+#include <asm/hardware.h>
+
+ENTRY(__arch_writesl)
+               ands    ip, r1, #3
+               bne     2f
+
+1:             ldr     r3, [r1], #4
+               str     r3, [r0]
+               subs    r2, r2, #1
+               bne     1b
+               mov     pc, lr
+
+2:             bic     r1, r1, #3
+               cmp     ip, #2
+               ldr     ip, [r1], #4
+               mov     ip, ip, lsr #16
+               blt     4f
+               bgt     5f
+
+3:             ldr     r3, [r1], #4
+               orr     ip, ip, r3, lsl #16
+               str     ip, [r0]
+               mov     ip, r3, lsr #16
+               subs    r2, r2, #1
+               bne     3b
+               mov     pc, lr
+
+4:             ldr     r3, [r1], #4
+               orr     ip, ip, r3, lsl #8
+               str     ip, [r0]
+               mov     ip, r3, lsr #24
+               subs    r2, r2, #1
+               bne     4b
+               mov     pc, lr
+
+5:             ldr     r3, [r1], #4
+               orr     ip, ip, r3, lsl #24
+               str     ip, [r0]
+               mov     ip, r3, lsr #8
+               subs    r2, r2, #1
+               bne     5b
+               mov     pc, lr
+
+
diff --git a/arch/arm/lib/io-writesw-armv3.S b/arch/arm/lib/io-writesw-armv3.S
new file mode 100644 (file)
index 0000000..29c94cc
--- /dev/null
@@ -0,0 +1,125 @@
+/*
+ *  linux/arch/arm/lib/io-readsb.S
+ *
+ *  Copyright (C) 1995-2000 Russell King
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+#include <linux/linkage.h>
+#include <asm/assembler.h>
+#include <asm/hardware.h>
+
+.outsw_bad_alignment:
+               adr     r0, .outsw_bad_align_msg
+               mov     r2, lr
+               b       SYMBOL_NAME(panic)
+.outsw_bad_align_msg:
+               .asciz  "outsw: bad buffer alignment (0x%p, lr=0x%08lX)\n"
+               .align
+
+.outsw_align:  tst     r1, #1
+               bne     .outsw_bad_alignment
+
+               add     r1, r1, #2
+
+               ldr     r3, [r1, #-4]
+               mov     r3, r3, lsr #16
+               orr     r3, r3, r3, lsl #16
+               str     r3, [r0]
+               subs    r2, r2, #1
+               RETINSTR(moveq, pc, lr)
+
+ENTRY(__arch_writesw)
+               tst     r1, #3
+               bne     .outsw_align
+
+.outsw_aligned:        stmfd   sp!, {r4, r5, r6, lr}
+
+               subs    r2, r2, #8
+               bmi     .no_outsw_8
+.outsw_8_lp:   ldmia   r1!, {r3, r4, r5, r6}
+
+               mov     ip, r3, lsl #16
+               orr     ip, ip, ip, lsr #16
+               str     ip, [r0]
+
+               mov     ip, r3, lsr #16
+               orr     ip, ip, ip, lsl #16
+               str     ip, [r0]
+
+               mov     ip, r4, lsl #16
+               orr     ip, ip, ip, lsr #16
+               str     ip, [r0]
+
+               mov     ip, r4, lsr #16
+               orr     ip, ip, ip, lsl #16
+               str     ip, [r0]
+
+               mov     ip, r5, lsl #16
+               orr     ip, ip, ip, lsr #16
+               str     ip, [r0]
+
+               mov     ip, r5, lsr #16
+               orr     ip, ip, ip, lsl #16
+               str     ip, [r0]
+
+               mov     ip, r6, lsl #16
+               orr     ip, ip, ip, lsr #16
+               str     ip, [r0]
+
+               mov     ip, r6, lsr #16
+               orr     ip, ip, ip, lsl #16
+               str     ip, [r0]
+
+               subs    r2, r2, #8
+               bpl     .outsw_8_lp
+               tst     r2, #7
+               LOADREGS(eqfd, sp!, {r4, r5, r6, pc})
+
+.no_outsw_8:   tst     r2, #4
+               beq     .no_outsw_4
+
+               ldmia   r1!, {r3, r4}
+
+               mov     ip, r3, lsl #16
+               orr     ip, ip, ip, lsr #16
+               str     ip, [r0]
+
+               mov     ip, r3, lsr #16
+               orr     ip, ip, ip, lsl #16
+               str     ip, [r0]
+
+               mov     ip, r4, lsl #16
+               orr     ip, ip, ip, lsr #16
+               str     ip, [r0]
+
+               mov     ip, r4, lsr #16
+               orr     ip, ip, ip, lsl #16
+               str     ip, [r0]
+
+.no_outsw_4:   tst     r2, #2
+               beq     .no_outsw_2
+
+               ldr     r3, [r1], #4
+
+               mov     ip, r3, lsl #16
+               orr     ip, ip, ip, lsr #16
+               str     ip, [r0]
+
+               mov     ip, r3, lsr #16
+               orr     ip, ip, ip, lsl #16
+               str     ip, [r0]
+
+.no_outsw_2:   tst     r2, #1
+
+               ldrne   r3, [r1]
+
+               movne   ip, r3, lsl #16
+               orrne   ip, ip, ip, lsr #16
+               strne   ip, [r0]
+
+               LOADREGS(fd, sp!, {r4, r5, r6, pc})
+
+
diff --git a/arch/arm/lib/io-writesw-armv4.S b/arch/arm/lib/io-writesw-armv4.S
new file mode 100644 (file)
index 0000000..0f96d13
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+ *  linux/arch/arm/lib/io-readsb.S
+ *
+ *  Copyright (C) 1995-2000 Russell King
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+#include <linux/linkage.h>
+#include <asm/assembler.h>
+#include <asm/hardware.h>
+
+.outsw_bad_alignment:
+               adr     r0, .outsw_bad_align_msg
+               mov     r2, lr
+               b       SYMBOL_NAME(panic)
+.outsw_bad_align_msg:
+               .asciz  "outsw: bad buffer alignment (0x%p, lr=0x%08lX)\n"
+               .align
+
+.outsw_align:  tst     r1, #1
+               bne     .outsw_bad_alignment
+
+               ldrh    r3, [r1], #2
+               strh    r3, [r0]
+
+               subs    r2, r2, #1
+               RETINSTR(moveq, pc, lr)
+
+ENTRY(__arch_writesw)
+               tst     r1, #3
+               bne     .outsw_align
+
+               subs    r2, r2, #8
+               bmi     .no_outsw_8
+
+               stmfd   sp!, {r4, r5, lr}
+
+.outsw_8_lp:   ldmia   r1!, {r3, r4, r5, ip}
+
+               strh    r3, [r0]
+               mov     r3, r3, lsr #16
+               strh    r3, [r0]
+               strh    r4, [r0]
+               mov     r4, r4, lsr #16
+               strh    r4, [r0]
+               strh    r5, [r0]
+               mov     r5, r5, lsr #16
+               strh    r5, [r0]
+               strh    ip, [r0]
+               mov     ip, ip, lsr #16
+               strh    ip, [r0]
+
+               subs    r2, r2, #8
+               bpl     .outsw_8_lp
+               ldmfd   sp!, {r4, r5, lr}
+               tst     r2, #7
+               RETINSTR(moveq, pc, lr)
+
+.no_outsw_8:   tst     r2, #4
+               ldmneia r1!, {r3, ip}
+               strneh  r3, [r0]
+               movne   r3, r3, lsr #16
+               strneh  r3, [r0]
+               strneh  ip, [r0]
+               movne   ip, ip, lsr #16
+               strneh  ip, [r0]
+               tst     r2, #2
+               ldrne   r3, [r1], #4
+               strneh  r3, [r0]
+               movne   r3, r3, lsr #16
+               strneh  r3, [r0]
+               tst     r2, #1
+               ldrneh  r3, [r1]
+               strneh  r3, [r0]
+               RETINSTR(mov, pc, lr)
+
+
index 4b47b6e..1a7a790 100644 (file)
@@ -65,9+65,9 @@ static inline void wb977_ww(int reg, int val)
  */
 spinlock_t gpio_lock = SPIN_LOCK_UNLOCKED;
 
-static unsigned int current_gpio_op = 0;
-static unsigned int current_gpio_io = 0;
-static unsigned int current_cpld = 0;
+static unsigned int current_gpio_op;
+static unsigned int current_gpio_io;
+static unsigned int current_cpld;
 
 void gpio_modify_op(int mask, int set)
 {
index 0e198ab..1cbdd77 100644 (file)
@@ -126,6+126,39 @@ out:
        return fault;
 }
 
+static int __do_vmalloc_fault(unsigned long addr, struct mm_struct *mm)
+{
+       /* Synchronise this task's top level page-table
+        * with the 'reference' page table.
+        */
+       int offset = __pgd_offset(addr);
+       pgd_t *pgd, *pgd_k;
+       pmd_t *pmd, *pmd_k;
+
+       pgd_k = init_mm.pgd + offset;
+       if (!pgd_present(*pgd_k))
+               goto bad_area;
+
+       pgd = mm->pgd + offset;
+#if 0  /* note that we are two-level */
+       if (!pgd_present(*pgd))
+               set_pgd(pgd, *pgd_k);
+#endif
+
+       pmd_k = pmd_offset(pgd_k, addr);
+       if (pmd_none(*pmd_k))
+               goto bad_area;
+
+       pmd = pmd_offset(pgd, addr);
+       if (!pmd_none(*pmd))
+               goto bad_area;
+       set_pmd(pmd, *pmd_k);
+       return 1;
+
+bad_area:
+       return -2;
+}
+
 static int do_page_fault(unsigned long addr, int mode, struct pt_regs *regs)
 {
        struct task_struct *tsk;
@@ -137,6+170,18 @@ static int do_page_fault(unsigned long addr, int mode, struct pt_regs *regs)
        mm  = tsk->mm;
 
        /*
+        * We fault-in kernel-space virtual memory on-demand. The
+        * 'reference' page table is init_mm.pgd.
+        *
+        * NOTE! We MUST NOT take any locks for this case. We may
+        * be in an interrupt or a critical region, and should
+        * only copy the information from the master page table,
+        * nothing more.
+        */
+       if (addr >= TASK_SIZE)
+               goto vmalloc_fault;
+
+       /*
         * If we're in an interrupt or have no user
         * context, we must not take the fault..
         */
@@ -147,6+192,7 @@ static int do_page_fault(unsigned long addr, int mode, struct pt_regs *regs)
        fault = __do_page_fault(mm, addr, mode, tsk);
        up(&mm->mmap_sem);
 
+ret:
        /*
         * Handle the "normal" case first
         */
@@ -240,4+286,8 @@ no_context:
        do_exit(SIGKILL);
 
        return 0;
+
+vmalloc_fault:
+       fault = __do_vmalloc_fault(addr, mm);
+       goto ret;
 }
index ea833c5..bfa085a 100644 (file)
@@ -377,34+377,48 @@ static int __init check_initrd(struct meminfo *mi)
 /*
  * Reserve the various regions of node 0
  */
-static inline void reserve_node_zero(unsigned int bootmap_pfn, unsigned int bootmap_pages)
+static __init void reserve_node_zero(unsigned int bootmap_pfn, unsigned int bootmap_pages)
 {
+       pg_data_t *pgdat = NODE_DATA(0);
+
        /*
         * Register the kernel text and data with bootmem.
         * Note that this can only be in node 0.
         */
-       reserve_bootmem_node(NODE_DATA(0), __pa(&_stext), &_end - &_stext);
+       reserve_bootmem_node(pgdat, __pa(&_stext), &_end - &_stext);
 
 #ifdef CONFIG_CPU_32
        /*
         * Reserve the page tables.  These are already in use,
         * and can only be in node 0.
         */
-       reserve_bootmem_node(NODE_DATA(0), __pa(swapper_pg_dir),
+       reserve_bootmem_node(pgdat, __pa(swapper_pg_dir),
                             PTRS_PER_PGD * sizeof(void *));
-#else
-       /*
-        * Stop this memory from being grabbed - its special DMA
-        * memory that is required for the screen.
-        */
-       reserve_bootmem_node(NODE_DATA(0), 0x02000000, 0x00080000);
 #endif
        /*
         * And don't forget to reserve the allocator bitmap,
         * which will be freed later.
         */
-       reserve_bootmem_node(NODE_DATA(0), bootmap_pfn << PAGE_SHIFT,
+       reserve_bootmem_node(pgdat, bootmap_pfn << PAGE_SHIFT,
                             bootmap_pages << PAGE_SHIFT);
+
+       /*
+        * Hmm... This should go elsewhere, but we really really
+        * need to stop things allocating the low memory; we need
+        * a better implementation of GFP_DMA which does not assume
+        * that DMA-able memory starts at zero.
+        */
+       if (machine_is_integrator())
+               reserve_bootmem_node(pgdat, 0, __pa(swapper_pg_dir));
+       /*
+        * These should likewise go elsewhere.  They pre-reserve
+        * the screen memory region at the start of main system
+        * memory.
+        */
+       if (machine_is_archimedes() || machine_is_a5k())
+               reserve_bootmem_node(pgdat, 0x02000000, 0x00080000);
+       if (machine_is_p720t())
+               reserve_bootmem_node(pgdat, 0xc0000000, 0x00014000);
 }
 
 /*
@@ -412,11+426,12 @@ static inline void reserve_node_zero(unsigned int bootmap_pfn, unsigned int boot
  */
 static inline void free_bootmem_node_bank(int node, struct meminfo *mi)
 {
+       pg_data_t *pgdat = NODE_DATA(node);
        int bank;
 
        for (bank = 0; bank < mi->nr_banks; bank++)
                if (mi->bank[bank].node == node)
-                       free_bootmem_node(NODE_DATA(node), mi->bank[bank].start,
+                       free_bootmem_node(pgdat, mi->bank[bank].start,
                                          mi->bank[bank].size);
 }
 
@@ -632,9+647,11 @@ static inline void free_area(unsigned long addr, unsigned long end, char *s)
 
 void free_initmem(void)
 {
-       free_area((unsigned long)(&__init_begin),
-                 (unsigned long)(&__init_end),
-                 "init");
+       if (!machine_is_integrator()) {
+               free_area((unsigned long)(&__init_begin),
+                         (unsigned long)(&__init_end),
+                         "init");
+       }
 }
 
 #ifdef CONFIG_BLK_DEV_INITRD
index 2ace55d..d96fcbc 100644 (file)
@@ -361,6+361,7 @@ void __init memtable_init(struct meminfo *mi)
                p ++;
        }
 
+#ifdef FLUSH_BASE
        p->physical   = FLUSH_BASE_PHYS;
        p->virtual    = FLUSH_BASE;
        p->length     = PGDIR_SIZE;
@@ -371,6+372,7 @@ void __init memtable_init(struct meminfo *mi)
        p->bufferable = 1;
 
        p ++;
+#endif
 
 #ifdef FLUSH_BASE_MINICACHE
        p->physical   = FLUSH_BASE_PHYS + PGDIR_SIZE;
index 13620ad..e6fc86b 100644 (file)
@@ -139,7+139,7 @@ Ldata_ldmstm:       tst     r4, #1 << 21                    @ check writeback bit
 Ldata_saver7:  str     r7, [sp, r5, lsr #14]           @ Put register
 Ldata_simple:  mrc     p15, 0, r0, c6, c0, 0           @ get FAR
                mrc     p15, 0, r3, c5, c0, 0           @ get FSR
-               and     r3, r3, #15
+               and     r3, r3, #255
                mov     pc, lr
 
 ENTRY(cpu_arm720_data_abort)
@@ -155,7+155,7 @@ ENTRY(cpu_arm720_data_abort)
                b       Ldata_unknown
                b       Ldata_unknown
                b       Ldata_lateldrpostconst          @ ldr   rd, [rn], #m
-               b       Ldata_lateldrpreconst           @ ldr   rd, [rn, #m]    @ RegVal
+               b       Ldata_lateldrpreconst           @ ldr   rd, [rn, #m] 
                b       Ldata_lateldrpostreg            @ ldr   rd, [rn], rm
                b       Ldata_lateldrprereg             @ ldr   rd, [rn, rm]
                b       Ldata_ldmstm                    @ ldm*a rn, <rlist>
@@ -177,25+177,14 @@ Ldata_lateldrhpre:
                tst     r4, #1 << 21                    @ check writeback bit
                beq     Ldata_simple
 Ldata_lateldrhpost:
-               tst     r4, #1 << 22                    @ check if register or immediate offset
-               beq     Ldata_lateldrhpostreg
-Ldata_lateldrhpostconst:
-               and     r2, r4, #0xf                    @ load and clear low nibble of const offset
-               and     r5, r4, #0xf00                  @ load and clear high nibble of const offset
-               orrs    r2, r2, r5, lsr #4              @ create offset
-               beq     Ldata_simple                    @ don't have to do anything if zero
-               and     r5, r4, #0xf << 16              @ get Rn
-               ldr     r0, [sp, r5, lsr #14]
+               and     r5, r4, #0x00f                  @ get Rm / low nibble of immediate value
+               tst     r4, #1 << 22                    @ if (immediate offset)
+               andne   r2, r4, #0xf00                  @ { immediate high nibble
+               orrne   r2, r5, r2, lsr #4              @   combine nibbles } else
+               ldreq   r2, [sp, r5, lsl #2]            @ { load Rm value }
+               and     r5, r4, #15 << 16               @ get Rn
+               ldr     r0, [sp, r5, lsr #14]           @ load Rn value
                tst     r4, #1 << 23                    @ U bit
-               subne   r7, r0, r2, lsr #20
-               addeq   r7, r0, r2, lsr #20
-               b       Ldata_saver7
-Ldata_lateldrhpostreg:
-               and     r5, r4, #0xf
-               ldr     r2, [sp, r5, lsl #2]            @ get Rm
-               and     r5, r4, #0xf << 16
-               ldr     r0, [sp, r5, lsr #14]           @ get Rn
-               tst     r4, #1 << 23
                subne   r7, r0, r2
                addeq   r7, r0, r2
                b       Ldata_saver7
@@ -385,7+374,7 @@ ENTRY(cpu_arm720_reset)
 
        
 cpu_armvlsi_name:
-               .asciz  "ARM/VLSI"
+               .asciz  "ARM"
 cpu_arm720_name:
                .asciz  "ARM720T"
                .align
@@ -471,8+460,8 @@ cpu_elf_name:       .asciz  "v4"
 __arm720_proc_info:
                .long   0x41807200                              @ cpu_val
                .long   0xffffff00                              @ cpu_mask
-               .long   0x00000c0e                              @ __cpu_mmu_flags
-               b       __arm720_setup                          @ --cpu_flush
+               .long   0x00000c1e                              @ section_mmu_flags
+               b       __arm720_setup                          @ cpu_flush
                .long   cpu_arch_name                           @ arch_name
                .long   cpu_elf_name                            @ elf_name
                .long   HWCAP_SWP | HWCAP_HALF | HWCAP_26BIT    @ elf_hwcap
index 0415f31..5e5d4fd 100644 (file)
@@ -44,7+44,7 @@ unsigned int DoubleCPDO(const unsigned int opcode)
    float64 rFm, rFn;
    unsigned int Fd, Fm, Fn, nRc = 1;
 
-   //fp_printk("DoubleCPDO(0x%08x)\n",opcode);
+   //printk("DoubleCPDO(0x%08x)\n",opcode);
    
    Fm = getFm(opcode);
    if (CONSTANT_FM(opcode))
@@ -65,7+65,7 @@ unsigned int DoubleCPDO(const unsigned int opcode)
 
         case typeExtended:
             // !! patb
-           //fp_printk("not implemented! why not?\n");
+           //printk("not implemented! why not?\n");
             //!! ScottB
             // should never get here, if extended involved
             // then other operand should be promoted then
index 810f571..762b1a0 100644 (file)
@@ -42,7+42,7 @@ unsigned int ExtendedCPDO(const unsigned int opcode)
    floatx80 rFm, rFn;
    unsigned int Fd, Fm, Fn, nRc = 1;
 
-   //fp_printk("ExtendedCPDO(0x%08x)\n",opcode);
+   //printk("ExtendedCPDO(0x%08x)\n",opcode);
    
    Fm = getFm(opcode);
    if (CONSTANT_FM(opcode))
index fd39a59..b2eaf1a 100644 (file)
@@ -30,7+30,7 @@ unsigned int EmulateCPDO(const unsigned int opcode)
 {
    unsigned int Fd, nType, nDest, nRc = 1;
    
-   //fp_printk("EmulateCPDO(0x%08x)\n",opcode);
+   //printk("EmulateCPDO(0x%08x)\n",opcode);
 
    /* Get the destination size.  If not valid let Linux perform
       an invalid instruction trap. */
index 0bad187..d6a7bdc 100644 (file)
@@ -189,7+189,7 @@ unsigned int PerformLDF(const unsigned int opcode)
    unsigned int *pBase, *pAddress, *pFinal, nRc = 1,
      write_back = WRITE_BACK(opcode);
 
-   //fp_printk("PerformLDF(0x%08x), Fd = 0x%08x\n",opcode,getFd(opcode));
+   //printk("PerformLDF(0x%08x), Fd = 0x%08x\n",opcode,getFd(opcode));
 
    pBase = (unsigned int*)readRegister(getRn(opcode));
    if (REG_PC == getRn(opcode))
@@ -223,7+223,7 @@ unsigned int PerformSTF(const unsigned int opcode)
    unsigned int *pBase, *pAddress, *pFinal, nRc = 1,
      write_back = WRITE_BACK(opcode);
    
-   //fp_printk("PerformSTF(0x%08x), Fd = 0x%08x\n",opcode,getFd(opcode));
+   //printk("PerformSTF(0x%08x), Fd = 0x%08x\n",opcode,getFd(opcode));
    SetRoundingMode(ROUND_TO_NEAREST);
    
    pBase = (unsigned int*)readRegister(getRn(opcode));
@@ -322,7+322,7 @@ unsigned int EmulateCPDT(const unsigned int opcode)
 {
   unsigned int nRc = 0;
 
-  //fp_printk("EmulateCPDT(0x%08x)\n",opcode);
+  //printk("EmulateCPDT(0x%08x)\n",opcode);
   
   if (LDF_OP(opcode))
   {
index d479ee9..c17c694 100644 (file)
@@ -44,7+44,7 @@ unsigned int EmulateCPRT(const unsigned int opcode)
 {
   unsigned int nRc = 1;
 
-  //fp_printk("EmulateCPRT(0x%08x)\n",opcode);
+  //printk("EmulateCPRT(0x%08x)\n",opcode);
 
   if (opcode & 0x800000)
   {
@@ -188,7+188,7 @@ static unsigned int PerformComparison(const unsigned int opcode)
    int n_flag = opcode & 0x200000;     /* 1 if CNxx */
    unsigned int flags = 0;
 
-   //fp_printk("PerformComparison(0x%08x)\n",opcode);
+   //printk("PerformComparison(0x%08x)\n",opcode);
 
    Fn = getFn(opcode);
    Fm = getFm(opcode);
@@ -201,21+201,21 @@ static unsigned int PerformComparison(const unsigned int opcode)
    switch (fpa11->fType[Fn])
    {
       case typeSingle: 
-        //fp_printk("single.\n");
+        //printk("single.\n");
        if (float32_is_nan(fpa11->fpreg[Fn].fSingle))
           goto unordered;
         rFn = float32_to_floatx80(fpa11->fpreg[Fn].fSingle);
       break;
 
       case typeDouble: 
-        //fp_printk("double.\n");
+        //printk("double.\n");
        if (float64_is_nan(fpa11->fpreg[Fn].fDouble))
           goto unordered;
         rFn = float64_to_floatx80(fpa11->fpreg[Fn].fDouble);
       break;
       
       case typeExtended: 
-        //fp_printk("extended.\n");
+        //printk("extended.\n");
        if (floatx80_is_nan(fpa11->fpreg[Fn].fExtended))
           goto unordered;
         rFn = fpa11->fpreg[Fn].fExtended;
@@ -226,32+226,32 @@ static unsigned int PerformComparison(const unsigned int opcode)
 
    if (CONSTANT_FM(opcode))
    {
-     //fp_printk("Fm is a constant: #%d.\n",Fm);
+     //printk("Fm is a constant: #%d.\n",Fm);
      rFm = getExtendedConstant(Fm);
      if (floatx80_is_nan(rFm))
         goto unordered;
    }
    else
    {
-     //fp_printk("Fm = r%d which contains a ",Fm);
+     //printk("Fm = r%d which contains a ",Fm);
       switch (fpa11->fType[Fm])
       {
          case typeSingle: 
-           //fp_printk("single.\n");
+           //printk("single.\n");
           if (float32_is_nan(fpa11->fpreg[Fm].fSingle))
              goto unordered;
            rFm = float32_to_floatx80(fpa11->fpreg[Fm].fSingle);
          break;
 
          case typeDouble: 
-           //fp_printk("double.\n");
+           //printk("double.\n");
           if (float64_is_nan(fpa11->fpreg[Fm].fDouble))
              goto unordered;
            rFm = float64_to_floatx80(fpa11->fpreg[Fm].fDouble);
          break;
       
          case typeExtended: 
-           //fp_printk("extended.\n");
+           //printk("extended.\n");
           if (floatx80_is_nan(fpa11->fpreg[Fm].fExtended))
              goto unordered;
            rFm = fpa11->fpreg[Fm].fExtended;
index 9d4f157..24fa277 100644 (file)
@@ -46,7+46,6 @@ extern FPA11 *fpa11;
 typedef struct task_struct*    PTASK;
 
 #ifdef MODULE
-int fp_printk(const char *,...);
 void fp_send_sig(unsigned long sig, PTASK p, int priv);
 #if LINUX_VERSION_CODE > 0x20115
 MODULE_AUTHOR("Scott Bambrough <scottb@rebel.com>");
@@ -54,7+53,6 @@ MODULE_DESCRIPTION("NWFPE floating point emulator");
 #endif
 
 #else
-#define fp_printk      printk
 #define fp_send_sig    send_sig
 #define kern_fp_enter  fp_enter
 #endif
@@ -74,23+72,14 @@ extern void nwfpe_enter(void);
 /* Address of user registers on the kernel stack. */
 unsigned int *userRegisters;
 
-void __init fpe_version(void)
-{
-  static const char szTitle[] = "<4>NetWinder Floating Point Emulator ";
-  static const char szVersion[] = "V0.95 ";
-  static const char szCopyright[] = "(c) 1998-1999 Rebel.com\n";
-  fp_printk(szTitle);
-  fp_printk(szVersion);
-  fp_printk(szCopyright);
-}
-
 int __init fpe_init(void)
 {
   if (sizeof(FPA11) > sizeof(union fp_state))
     printk(KERN_ERR "nwfpe: bad structure size\n");
   else {
     /* Display title, version and copyright information. */
-    fpe_version();
+    printk(KERN_WARNING "NetWinder Floating Point Emulator V0.95 "
+          "(c) 1998-1999 Rebel.com\n");
 
     /* Save pointer to the old FP handler and then patch ourselves in */
     orig_fp_enter = kern_fp_enter;
index a7fc76c..a6e0000 100644 (file)
@@ -39,7+39,7 @@ and exception flags.
 */
 int8 float_rounding_mode = float_round_nearest_even;
 int8 floatx80_rounding_precision = 80;
-int8 float_exception_flags = 0;
+int8 float_exception_flags;
 
 /*
 -------------------------------------------------------------------------------
@@ -418,9+418,8 @@ static float64 roundAndPackFloat64( flag zSign, int16 zExp, bits64 zSig )
              || (    ( zExp == 0x7FD )
                   && ( (sbits64) ( zSig + roundIncrement ) < 0 ) )
            ) {
-            //register int lr;
-            //__asm__("mov %0, lr" :: "g" (lr));
-            //fp_printk("roundAndPackFloat64 called from 0x%08x\n",lr);
+            //register int lr = __builtin_return_address(0);
+            //printk("roundAndPackFloat64 called from 0x%08x\n",lr);
             float_raise( float_flag_overflow | float_flag_inexact );
             return packFloat64( zSign, 0x7FF, 0 ) - ( roundIncrement == 0 );
         }
index f3d1fb0..ff7ccec 100644 (file)
@@ -1,7+1,10 @@
 # Database of machine macros and numbers
 #
-# To add an entry into this database, please see
-# Documentation/arm/README
+# Please do not send patches to this file; it is automatically generated!
+# To add an entry into this database, please see Documentation/arm/README,
+# or contact rmk@arm.linux.org.uk
+#
+# Last update: Mon Nov 20 22:59:11 2000
 #
 # machine_is_xxx       CONFIG_xxxx             MACH_TYPE_xxx           number
 #
@@ -14,7+17,7 @@ cats                  ARCH_CATS               CATS                    6
 tbox                   ARCH_TBOX               TBOX                    7
 co285                  ARCH_CO285              CO285                   8
 clps7110               ARCH_CLPS7110           CLPS7110                9
-arc                    ARCH_ARC                ARCHIMEDES              10
+archimedes             ARCH_ARC                ARCHIMEDES              10
 a5k                    ARCH_A5K                A5K                     11
 etoile                 ARCH_ETOILE             ETOILE                  12
 lacie_nas              ARCH_LACIE_NAS          LACIE_NAS               13
@@ -28,7+31,7 @@ pleb                  SA1100_PLEB             PLEB                    20
 integrator             ARCH_INTEGRATOR         INTEGRATOR              21
 bitsy                  SA1100_BITSY            BITSY                   22
 ixp1200                        ARCH_IXP1200            IXP1200                 23
-thinclient             SA1100_THINCLIENT       THINCLIENT              24
+p720t                  ARCH_P720T              P720T                   24
 assabet                        SA1100_ASSABET          ASSABET                 25
 victor                 SA1100_VICTOR           VICTOR                  26
 lart                   SA1100_LART             LART                    27
@@ -42,8+45,16 @@ extenex1             SA1100_EXTENEX1         EXTENEX1                34
 sherman                        SA1100_SHERMAN          SHERMAN                 35
 accelent_sa            SA1100_ACCELENT         ACCELENT_SA             36
 accelent_l7200         ARCH_L7200_ACCELENT     ACCELENT_L7200          37
+netport                        SA1100_NETPORT          NETPORT                 38
+pangolin               SA1100_PANGOLIN         PANGOLIN                39
+yopy                   SA1100_YOPY             YOPY                    40
+sa1100                 SA1100_SA1100           SA1100                  41
+huw_webpanel           ARCH_HUW_WEBPANEL       HUW_WEBPANEL            42
+spotme                 ARCH_SPOTME             SPOTME                  43
+freebird               ARCH_FREEBIRD           FREEBIRD                44
+ti925                  ARCH_TI925              TI925                   45
+riscstation            ARCH_RISCSTATION        RISCSTATION             46
+cavy                   SA1100_CAVY             CAVY                    47
 
 # The following are unallocated
 empeg                  SA1100_EMPEG            EMPEG
-tifon                  SA1100_TIFON            TIFON
-penny                  SA1100_PENNY            PENNY
index 5353e7f..0c0e720 100644 (file)
@@ -9,6+9,7 @@ SECTIONS
        . = TEXTADDR;
 
        .init : {
+               _stext = .;
                __init_begin = .;       /* Init code and data           */
                        *(.text.init)
                __proc_info_begin = .;
index b54f2bd..b039885 100644 (file)
@@ -8,6+8,7 @@ SECTIONS
 {
        . = TEXTADDR;
        .init : {                       /* Init code and data           */
+               _stext = .;
                __init_begin = .;
                        *(.text.init)
                __proc_info_begin = .;
index 0da4e86..276c633 100644 (file)
@@ -631,39+631,43 @@ end_move_self:                                    # now we are at the right place
                                                # appropriate
 
 # that was painless, now we enable a20
+
+#
+# First, try the "fast A20 gate".
+#
+       inb     $0x92,%al
+       orb     $0x02,%al                       # Fast A20 on
+       andb    $0xfe,%al                       # Don't reset CPU!
+       outb    %al,$0x92
+
+#
+# Now comes the tricky part: some machines don't have a KBC and thus
+# would end up looping almost indefinitely here.  HOWEVER, once we
+# have done the first command write, we must not stop the sequence.
+# Therefore, the first empty_8042 should check to see if the fast A20
+# did the trick and stop its probing at that stage; but subsequent ones
+# must not do so.
+#
+       movb    $0x01,%dl                       # A20-sensitive
        call    empty_8042
+       jnz     a20_wait                        # A20 already on?
 
        movb    $0xD1, %al                      # command write
        outb    %al, $0x64
-       call    empty_8042
+       call    empty_8042_no_a20_exit
 
        movb    $0xDF, %al                      # A20 on
        outb    %al, $0x60
-       call    empty_8042
-
-#
-#      You must preserve the other bits here. Otherwise embarrasing things
-#      like laptops powering off on boot happen. Corrected version by Kira
-#      Brown from Linux 2.2
-#
-       inb     $0x92, %al                      # 
-       orb     $02, %al                        # "fast A20" version
-       outb    %al, $0x92                      # some chips have only this
+       call    empty_8042_no_a20_exit
 
 # wait until a20 really *is* enabled; it can take a fair amount of
 # time on certain systems; Toshiba Tecras are known to have this
 # problem.  The memory location used here (0x200) is the int 0x80
 # vector, which should be safe to use.
 
-       xorw    %ax, %ax                        # segment 0x0000
-       movw    %ax, %fs
-       decw    %ax                             # segment 0xffff (HMA)
-       movw    %ax, %gs
 a20_wait:
-       incw    %ax                             # unused memory location <0xfff0
-       movw    %ax, %fs:(0x200)                # we use the "int 0x80" vector
-       cmpw    %gs:(0x210), %ax                # and its corresponding HMA addr
-       je      a20_wait                        # loop until no longer aliased
+       call    a20_test
+       jz      a20_wait
 
 # make sure any possible coprocessor is properly reset..
        xorw    %ax, %ax
@@ -825,14+829,26 @@ bootsect_panic_mess:
 #
 # Some machines have delusions that the keyboard buffer is always full
 # with no keyboard attached...
+#
+# If %dl is nonzero on entry, terminate with ZF=0 if A20 becomes alive,
+# otherwise terminate with ZF=1.
 
+empty_8042_no_a20_exit:
+       xorb    %dl,%dl                         # Not A20-sensitive
 empty_8042:
        pushl   %ecx
-       movl    $0x00FFFFFF, %ecx
+       movl    $0x000FFFFF, %ecx
 
 empty_8042_loop:
        decl    %ecx
-       jz      empty_8042_end_loop
+       jz      empty_8042_end_loop             # ZF=1
+
+       # Always call the test routine to keep delays constant
+       call    a20_test
+       jz      ignore_a20
+       and     %dl,%dl
+       jnz     empty_8042_end_loop             # ZF=0
+ignore_a20:
 
        call    delay
 
@@ -847,10+863,38 @@ empty_8042_loop:
 no_output:
        testb   $2, %al                         # is input buffer full?
        jnz     empty_8042_loop                 # yes - loop
+       # ZF=1
+
 empty_8042_end_loop:
        popl    %ecx
        ret
 
+a20_test:
+       pushw   %ax
+       pushw   %cx
+       pushw   %fs
+       pushw   %gs
+       xorw    %ax, %ax                        # segment 0x0000
+       movw    %ax, %fs
+       decw    %ax                             # segment 0xffff (HMA)
+       movw    %ax, %gs
+       movw    0x100,%cx
+       movw    %fs:(0x200),%ax                 # So we keep cycling...
+       pushw   %ax                             # Be extra paranoid...
+a20_loop:
+       incw    %ax                             # unused memory location <0xfff0
+       movw    %ax, %fs:(0x200)                # we use the "int 0x80" vector
+       cmpw    %gs:(0x210), %ax                # and its corresponding HMA addr
+       jnz     a20_ret                         # if ZF not set A20 is functional
+       loop    a20_loop
+a20_ret:
+       popw    %fs:(0x200)
+       popw    %gs
+       popw    %fs
+       popw    %cx
+       popw    %ax
+       ret                                     # if ZF set A20 is not operational
+
 # Read the cmos clock. Return the seconds in al
 gettime:
        pushw   %cx
@@ -867,7+911,8 @@ gettime:
 
 # Delay is needed after doing I/O
 delay:
-       jmp     .+2                             # jmp $+2
+       outb    %al,$0x80                       # What the main kernel uses
+       outb    %al,$0x80
        ret
 
 # Descriptor tables
index 17a929b..d9bd520 100644 (file)
@@ -176,7+176,6 @@ static void pirq_ali_ide_interrupt(struct pci_dev *router, unsigned reg, unsigne
        pci_read_config_byte(router, reg, &x);
        x = (x & 0xe0) | val;   /* clear the level->edge transform */
        pci_write_config_byte(router, reg, x);
-       eisa_set_level_irq(irq);
 }
 
 static int pirq_ali_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
@@ -196,7+195,6 @@ static int pirq_ali_set(struct pci_dev *router, struct pci_dev *dev, int pirq, i
                        pirq_ali_ide_interrupt(router, 0x75, val, irq);
                        break;
                }
-               eisa_set_level_irq(irq);
                return 1;
        }
        return 0;
@@ -279,6+277,27 @@ static int pirq_cyrix_set(struct pci_dev *router, struct pci_dev *dev, int pirq,
        return 1;
 }
 
+static int pirq_sis_get(struct pci_dev *router, struct pci_dev *dev, int pirq)
+{
+       u8 x;
+       int reg = 0x41 + (pirq - 'A') ;
+
+       pci_read_config_byte(router, reg, &x);
+       return (x & 0x80) ? 0 : (x & 0x0f);
+}
+
+static int pirq_sis_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
+{
+       u8 x;
+       int reg = 0x41 + (pirq - 'A') ;
+
+       pci_read_config_byte(router, reg, &x);
+       x = (pirq & 0x20) ? 0 : (irq & 0x0f);
+       pci_write_config_byte(router, reg, x);
+
+       return 1;
+}
+
 #ifdef CONFIG_PCI_BIOS
 
 static int pirq_bios_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
@@ -309,7+328,7 @@ static struct irq_router pirq_routers[] = {
        { "OPTI", PCI_VENDOR_ID_OPTI, PCI_DEVICE_ID_OPTI_82C700, pirq_opti_get, pirq_opti_set },
 
        { "NatSemi", PCI_VENDOR_ID_CYRIX, PCI_DEVICE_ID_CYRIX_5520, pirq_cyrix_get, pirq_cyrix_set },
-
+       { "SIS", PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_503, pirq_sis_get, pirq_sis_set },
        { "default", 0, 0, NULL, NULL }
 };
 
@@ -427,6+446,7 @@ static int pcibios_lookup_irq(struct pci_dev *dev, int assign)
        } else if (newirq && r->set && (dev->class >> 8) != PCI_CLASS_DISPLAY_VGA) {
                DBG(" -> assigning IRQ %d", newirq);
                if (r->set(pirq_router_dev, d, pirq, newirq)) {
+                       eisa_set_level_irq(newirq);
                        DBG(" ... OK\n");
                        msg = "Assigned";
                        irq = newirq;
index 6d3cf4d..8e7176c 100644 (file)
@@ -496,9+496,9 @@ void release_thread(struct task_struct *dead_task)
 void copy_segments(struct task_struct *p, struct mm_struct *new_mm)
 {
        struct mm_struct * old_mm = current->mm;
-       void * old_ldt = old_mm->segments, * ldt = old_ldt;
+       void * old_ldt = old_mm->segments, * ldt;
 
-       if (!old_mm->segments) {
+       if (!old_ldt) {
                /*
                 * default LDT - use the one from init_task
                 */
index 692965a..7c9dc14 100644 (file)
@@ -2113,7+2113,7 @@ int get_cpuinfo(char * buffer)
                        p += sprintf(p, "stepping\t: unknown\n");
 
                if ( test_bit(X86_FEATURE_TSC, &c->x86_capability) ) {
-                       p += sprintf(p, "cpu MHz\t\t: %lu.%06lu\n",
+                       p += sprintf(p, "cpu MHz\t\t: %lu.%03lu\n",
                                cpu_khz / 1000, (cpu_khz % 1000));
                }
 
index 528f206..f139fd8 100644 (file)
@@ -43,11+43,28 @@ unsigned char amiga_vblank;
 unsigned char amiga_psfreq;
 struct amiga_hw_present amiga_hw_present;
 
-static const char *amiga_models[] = {
-    "A500", "A500+", "A600", "A1000", "A1200", "A2000", "A2500", "A3000",
-    "A3000T", "A3000+", "A4000", "A4000T", "CDTV", "CD32", "Draco"
+static const char s_a500[] __initdata = "A500";
+static const char s_a500p[] __initdata = "A500+";
+static const char s_a600[] __initdata = "A600";
+static const char s_a1000[] __initdata = "A1000";
+static const char s_a1200[] __initdata = "A1200";
+static const char s_a2000[] __initdata = "A2000";
+static const char s_a2500[] __initdata = "A2500";
+static const char s_a3000[] __initdata = "A3000";
+static const char s_a3000t[] __initdata = "A3000T";
+static const char s_a3000p[] __initdata = "A3000+";
+static const char s_a4000[] __initdata = "A4000";
+static const char s_a4000t[] __initdata = "A4000T";
+static const char s_cdtv[] __initdata = "CDTV";
+static const char s_cd32[] __initdata = "CD32";
+static const char s_draco[] __initdata = "Draco";
+static const char *amiga_models[] __initdata = {
+    s_a500, s_a500p, s_a600, s_a1000, s_a1200, s_a2000, s_a2500, s_a3000,
+    s_a3000t, s_a3000p, s_a4000, s_a4000t, s_cdtv, s_cd32, s_draco,
 };
 
+static char amiga_model_name[13] = "Amiga ";
+
 extern char m68k_debug_device[];
 
 static void amiga_sched_init(void (*handler)(int, void *, struct pt_regs *));
@@ -127,6+144,8 @@ static struct resource rtc_resource = {
     NULL, 0x00dc0000, 0x00dcffff
 };
 
+static struct resource ram_resource[NUM_MEMINFO];
+
 
     /*
      *  Parse an Amiga-specific record in the bootinfo
@@ -200,8+219,10 @@ static void __init amiga_identify(void)
   memset(&amiga_hw_present, 0, sizeof(amiga_hw_present));
 
   printk("Amiga hardware found: ");
-  if (amiga_model >= AMI_500 && amiga_model <= AMI_DRACO)
+  if (amiga_model >= AMI_500 && amiga_model <= AMI_DRACO) {
     printk("[%s] ", amiga_models[amiga_model-AMI_500]);
+    strcat(amiga_model_name, amiga_models[amiga_model-AMI_500]);
+  }
 
   switch(amiga_model) {
   case AMI_UNKNOWN:
@@ -447,6+468,17 @@ void __init config_amiga(void)
             disabled_z2mem>>10);
   }
 
+  /* request all RAM */
+  for (i = 0; i < m68k_num_memory; i++) {
+    ram_resource[i].name =
+      (m68k_memory[i].addr >= 0x01000000) ? "32-bit Fast RAM" :
+      (m68k_memory[i].addr < 0x00c00000) ? "16-bit Fast RAM" :
+      "16-bit Slow RAM";
+    ram_resource[i].start = m68k_memory[i].addr;
+    ram_resource[i].end = m68k_memory[i].addr+m68k_memory[i].size-1;
+    request_resource(&iomem_resource, &ram_resource[i]);
+  }
+
   /* initialize chipram allocator */
   amiga_chip_init ();
 
@@ -478,8+510,11 @@ static unsigned short jiffy_ticks;
 static void __init amiga_sched_init(void (*timer_routine)(int, void *,
                                                          struct pt_regs *))
 {
+       static struct resource sched_res = { "timer" };
        jiffy_ticks = (amiga_eclock+HZ/2)/HZ;
 
+       if (!request_mem_region(CIAB_PHYSADDR+0x400, 0x200, "timer"))
+           printk("Cannot allocate ciab.ta{lo,hi}\n");
        ciab.cra &= 0xC0;   /* turn off timer A, continuous mode, from Eclk */
        ciab.talo = jiffy_ticks % 256;
        ciab.tahi = jiffy_ticks / 256;
@@ -933,9+968,7 @@ static void amiga_heartbeat(int on)
 
 static void amiga_get_model(char *model)
 {
-    strcpy(model, "Amiga ");
-    if (amiga_model >= AMI_500 && amiga_model <= AMI_DRACO)
-       strcat(model, amiga_models[amiga_model-AMI_500]);
+    strcpy(model, amiga_model_name);
 }
 
 
index ef3a627..9fb65e3 100644 (file)
@@ -484,7+484,7 @@ A9_str:
        fmovex  (%a0),%fp0      |load X from memory
        fabsx   %fp0            |use abs(X)
        tstw    %d5             |LAMBDA is in lower word of d5
-       bnes    sc_mul          |if neg (LAMBDA = 1), scale by mul
+       bne     sc_mul          |if neg (LAMBDA = 1), scale by mul
        fdivx   %fp1,%fp0               |calculate X / SCALE -> Y to fp0
        bras    A10_st          |branch to A10
 
index af1279a..d2bf1b6 100644 (file)
@@ -230,7+230,7 @@ nextlw:
 |
 m_sign:
        btst    #31,(%a0)       |test sign of the mantissa
-       beqs    ap_st_z         |if clear, go to append/strip zeros
+       beq     ap_st_z         |if clear, go to append/strip zeros
        fnegx   %fp0            |if set, negate fp0
        
 |
@@ -288,7+288,7 @@ ap_st_z:
        cmpl    #27,%d1         |test is with 27
        ble     pwrten          |if abs(expA) <28, skip ap/st zeros
        btst    #30,(%a0)       |check sign of exp
-       bnes    ap_st_n         |if neg, go to neg side
+       bne     ap_st_n         |if neg, go to neg side
        clrl    %d1             |zero count reg
        movel   (%a0),%d4               |load lword 1 to d4
        bfextu  %d4{#28:#4},%d0 |get M16 in d0
@@ -336,7+336,7 @@ ap_p_en:
        tstl    %d0             |check if d0 is zero
        bnes    ap_p_el         |if not, get next bit
        fmulx   %fp1,%fp0               |mul mantissa by 10**(no_bits_shifted)
-       bras    pwrten          |go calc pwrten
+       bra     pwrten          |go calc pwrten
 |
 | This section handles a negative adjusted exponent.
 |
index 2df0c37..0a9c776 100644 (file)
@@ -77,7+77,7 @@ not_fmovecr:
        movew   CMDREG1B(%a6),%d0
        andl    #0x7F,%d0
        cmpil   #0x38,%d0               |if the extension is >= $38, 
-       bges    serror          |it is illegal
+       bge     serror          |it is illegal
        bfextu  STAG(%a6){#0:#3},%d1
        lsll    #3,%d0          |make room for STAG
        addl    %d1,%d0         |combine for final index into table
index 2bd236d..480405d 100644 (file)
@@ -171,7+171,7 @@ PTENRP:
 get_op:
        clrb    DY_MO_FLG(%a6)
        tstb    UFLG_TMP(%a6)   |test flag for unsupp/unimp state
-       beqs    uni_getop
+       beq     uni_getop
 
 uns_getop:
        btstb   #direction_bit,CMDREG1B(%a6)
index e59b352..cc9ae01 100644 (file)
@@ -138,20+138,20 @@ ovf_e1_exc:
 |
 ovf_fsgl:
        clrl    %d0
-       bras    ovf_res
+       bra     ovf_res
 
 ovff_sgl:
        movel   #0x00000001,%d0         |set single
-       bras    ovf_res
+       bra     ovf_res
 ovff_dbl:
        movel   #0x00000002,%d0         |set double
-       bras    ovf_res
+       bra     ovf_res
 |
 | The precision is in the fpcr.
 |
 ovf_fpcr:
        bfextu  FPCR_MODE(%a6){#0:#2},%d0 |set round precision
-       bras    ovf_res
+       bra     ovf_res
        
 |
 |
index a3468f3..b3357fd 100644 (file)
@@ -92,7+92,7 @@ opc011:
        cmpil   #0,%d0          |if dest format is extended
        beq     dest_ext        |then branch
        cmpil   #1,%d0          |if dest format is single
-       beqs    dest_sgl        |then branch
+       beq     dest_sgl        |then branch
 |
 |      fall through to dest_dbl
 |
index 4bbf86f..037aa6c 100644 (file)
 |
        .global         _060_dmem_write
 _060_dmem_write:
+       subq.l          #1,%d0
        btst            #0x5,0x4(%a6)           | check for supervisor state
        beqs            user_write
 super_write:
        move.b          (%a0)+,(%a1)+           | copy 1 byte
-       subq.l          #0x1,%d0                | decr byte counter
-       bnes            super_write             | quit if ctr = 0
+       dbra            %d0,super_write         | quit if --ctr < 0
        clr.l           %d1                     | return success
        rts
 user_write:
-       move.l          %d0,-(%sp)              | pass: counter
-       move.l          %a1,-(%sp)              | pass: user dst
-       move.l          %a0,-(%sp)              | pass: supervisor src
-       bsr.l           _copyout                | write byte to user mem
-       move.l          %d0,%d1                 | return success
-       add.l           #0xc, %sp               | clear 3 lw params
+       move.b          (%a0)+,%d1              | copy 1 byte
+copyoutae:
+       movs.b          %d1,(%a1)+
+       dbra            %d0,user_write          | quit if --ctr < 0
+       clr.l           %d1                     | return success
        rts
 
 |
@@ -119,21+118,20 @@ user_write:
        .global         _060_dmem_read
 _060_imem_read:
 _060_dmem_read:
+       subq.l          #1,%d0
        btst            #0x5,0x4(%a6)           | check for supervisor state
        beqs            user_read
 super_read:
        move.b          (%a0)+,(%a1)+           | copy 1 byte
-       subq.l          #0x1,%d0                | decr byte counter
-       bnes            super_read              | quit if ctr = 0
+       dbra            %d0,super_read          | quit if --ctr < 0
        clr.l           %d1                     | return success
        rts
 user_read:
-       move.l          %d0,-(%sp)              | pass: counter
-       move.l          %a1,-(%sp)              | pass: super dst
-       move.l          %a0,-(%sp)              | pass: user src
-       bsr.l           _copyin                 | read byte from user mem
-       move.l          %d0,%d1                 | return success
-       add.l           #0xc,%sp                | clear 3 lw params
+copyinae:
+       movs.b          (%a0)+,%d1
+       move.b          %d1,(%a1)+              | copy 1 byte
+       dbra            %d0,user_read           | quit if --ctr < 0
+       clr.l           %d1                     | return success
        rts
 
 |
@@ -150,14+148,13 @@ user_read:
 |
        .global                 _060_dmem_read_byte
 _060_dmem_read_byte:
+       clr.l           %d0                     | clear whole longword
+       clr.l           %d1                     | assume success
        btst            #0x5,0x4(%a6)           | check for supervisor state
        bnes            dmrbs                   | supervisor
-dmrbu: clr.l           %d0                     | clear whole longword
 dmrbuae:movs.b         (%a0),%d0               | fetch user byte
-       bras            dmrbr
-dmrbs: clr.l           %d0                     | clear whole longword
-       move.b          (%a0),%d0               | fetch super byte
-dmrbr: clr.l           %d1                     | return success
+       rts
+dmrbs: move.b          (%a0),%d0               | fetch super byte
        rts
 
 |
@@ -187,14+184,13 @@ dmrbr:    clr.l           %d1                     | return success
        .global                 _060_imem_read_word
 _060_dmem_read_word:
 _060_imem_read_word:
+       clr.l           %d1                     | assume success
+       clr.l           %d0                     | clear whole longword
        btst            #0x5,0x4(%a6)           | check for supervisor state
        bnes            dmrws                   | supervisor
-dmrwu: clr.l           %d0                     | clear whole longword
 dmrwuae:movs.w         (%a0), %d0              | fetch user word
-       bras            dmrwr
-dmrws: clr.l           %d0                     | clear whole longword
-       move.w          (%a0), %d0              | fetch super word
-dmrwr: clr.l           %d1                     | return success
+       rts
+dmrws: move.w          (%a0), %d0              | fetch super word
        rts
 
 |
@@ -224,13+220,12 @@ dmrwr:    clr.l           %d1                     | return success
        .global                 _060_imem_read_long
 _060_dmem_read_long:
 _060_imem_read_long:
+       clr.l           %d1                     | assume success
        btst            #0x5,0x4(%a6)           | check for supervisor state
        bnes            dmrls                   | supervisor
-dmrlu:
 dmrluae:movs.l         (%a0),%d0               | fetch user longword
-       bras            dmrlr
+       rts
 dmrls: move.l          (%a0),%d0               | fetch super longword
-dmrlr: clr.l           %d1                     | return success
        rts
 
 |
@@ -247,13+242,12 @@ dmrlr:    clr.l           %d1                     | return success
 |
        .global                 _060_dmem_write_byte
 _060_dmem_write_byte:
+       clr.l           %d1                     | assume success
        btst            #0x5,0x4(%a6)           | check for supervisor state
        bnes            dmwbs                   | supervisor
-dmwbu:
 dmwbuae:movs.b         %d0,(%a0)               | store user byte
-       bras            dmwbr
+       rts
 dmwbs: move.b          %d0,(%a0)               | store super byte
-dmwbr: clr.l           %d1                     | return success
        rts
 
 |
@@ -270,6+264,7 @@ dmwbr:      clr.l           %d1                     | return success
 |
        .global                 _060_dmem_write_word
 _060_dmem_write_word:
+       clr.l           %d1                     | assume success
        btst            #0x5,0x4(%a6)           | check for supervisor state
        bnes            dmwws                   | supervisor
 dmwwu:
@@ -293,16+288,16 @@ dmwwr:    clr.l           %d1                     | return success
 |
        .global                 _060_dmem_write_long
 _060_dmem_write_long:
+       clr.l           %d1                     | assume success
        btst            #0x5,0x4(%a6)           | check for supervisor state
        bnes            dmwls                   | supervisor
-dmwlu:
 dmwluae:movs.l         %d0,(%a0)               | store user longword
-       bra             dmwlr
+       rts
 dmwls: move.l          %d0,(%a0)               | store super longword
-dmwlr: clr.l           %d1                     | return success
        rts
 
 
+#if 0
 |###############################################
 
 |
@@ -323,7+318,7 @@ _copyout:
        move.l          4(%sp),%a0              | source
        move.l          8(%sp),%a1              | destination
        move.l          12(%sp),%d0             | count
-    subq.l      #1,%d0
+       subq.l          #1,%d0
 moreout:
        move.b          (%a0)+,%d1              | fetch supervisor byte
 copyoutae:
@@ -348,6+343,7 @@ copyinae:
        dbra            %d0,morein              | are we through yet?
        moveq           #0,%d0                  | return success
        rts
+#endif
 
 |###########################################################################
 
index 165809c..20bb8e1 100644 (file)
  * 12/03/96 Jes: Currently we only support m68k single-cpu systems, so
  *               all pointers that used to be 'current' are now entry
  *               number 0 in the 'current_set' list.
+ *
+ *  6/05/00 RZ:         addedd writeback completion after return from sighandler
+ *              for 68040
  */
 
 #include <linux/sys.h>
@@ -104,8+107,18 @@ do_trace:
        jbsr    SYMBOL_NAME(syscall_trace)
 
 SYMBOL_NAME_LABEL(ret_from_signal)
-       RESTORE_SWITCH_STACK
+       RESTORE_SWITCH_STACK 
        addql   #4,%sp
+/* on 68040 complete pending writebacks if any */      
+#ifdef CONFIG_M68040
+       bfextu  %sp@(PT_VECTOR){#0,#4},%d0  
+       subql   #7,%d0                          | bus error frame ?
+       jbne    1f
+       movel   %sp,%sp@-
+       jbsr    SYMBOL_NAME(berr_040cleanup)
+       addql   #4,%sp
+1:     
+#endif 
        jra     SYMBOL_NAME(ret_from_exception)
 
 ENTRY(system_call)
@@ -578,7+591,7 @@ SYMBOL_NAME_LABEL(sys_call_table)
        .long SYMBOL_NAME(sys_mremap)
        .long SYMBOL_NAME(sys_setresuid16)
        .long SYMBOL_NAME(sys_getresuid16)      /* 165 */
-       .long SYMBOL_NAME(sys_ni_syscall)       /* for vm86 */
+       .long SYMBOL_NAME(sys_getpagesize)
        .long SYMBOL_NAME(sys_query_module)
        .long SYMBOL_NAME(sys_poll)
        .long SYMBOL_NAME(sys_nfsservctl)
index 74e1e4c..805ce9b 100644 (file)
@@ -71,6+71,8 @@ int (*mach_request_irq) (unsigned int, void (*)(int, void *, struct pt_regs *),
                       unsigned long, const char *, void *) = dummy_request_irq;
 void (*mach_free_irq) (unsigned int, void *) = dummy_free_irq;
 
+void init_irq_proc(void);
+
 /*
  * void init_IRQ(void)
  *
@@ -257,3+259,9 @@ int get_irq_list(char *buf)
        len += mach_get_irq_list(buf+len);
        return len;
 }
+
+void init_irq_proc(void)
+{
+       /* Insert /proc/irq driver here */
+}
+
index 7bf4614..35d1946 100644 (file)
 
 asmlinkage long long __ashrdi3 (long long, int);
 asmlinkage long long __lshrdi3 (long long, int);
+asmlinkage long long __muldi3 (long long, long long);
 extern char m68k_debug_device[];
 
 extern void dump_thread(struct pt_regs *, struct user *);
@@ -72,6+73,7 @@ EXPORT_SYMBOL_NOVERS(memcpy);
 EXPORT_SYMBOL_NOVERS(memset);
 EXPORT_SYMBOL_NOVERS(memcmp);
 EXPORT_SYMBOL_NOVERS(memscan);
+EXPORT_SYMBOL_NOVERS(__muldi3);
 
 EXPORT_SYMBOL_NOVERS(__down_failed);
 EXPORT_SYMBOL_NOVERS(__down_failed_interruptible);
index 86637d4..f7386cb 100644 (file)
 #include <asm/cachectl.h>
 #include <asm/traps.h>
 #include <asm/ipc.h>
+#include <asm/page.h>
 
 /*
  * sys_pipe() is the normal C calling standard for creating
@@ -661,6+662,11 @@ out:
        return ret;
 }
 
+asmlinkage int sys_getpagesize(void)
+{
+       return PAGE_SIZE;
+}
+
 /*
  * Old cruft
  */
index 5fd9dc0..a4c0cea 100644 (file)
@@ -5,6+5,7 @@
  *
  *  68040 fixes by Michael Rausch
  *  68040 fixes by Martin Apel
+ *  68040 fixes and writeback by Richard Zidlicky
  *  68060 fixes by Roman Hodek
  *  68060 fixes by Jesper Skov
  *
@@ -195,6+196,7 @@ static char *space_names[] = {
 void die_if_kernel(char *,struct pt_regs *,int);
 asmlinkage int do_page_fault(struct pt_regs *regs, unsigned long address,
                              unsigned long error_code);
+int send_fault_sig(struct pt_regs *regs);
 
 asmlinkage void trap_c(struct frame *fp);
 
@@ -214,26+216,33 @@ static inline void access_error060 (struct frame *fp)
                                      "movec %/d0,%/cacr"
                                      : : : "d0" );
                /* return if there's no other error */
-               if ((!(fslw & MMU060_ERR_BITS)) && !(fslw & MMU060_SEE))
+               if (!(fslw & MMU060_ERR_BITS) && !(fslw & MMU060_SEE))
                        return;
        }
 
        if (fslw & (MMU060_DESC_ERR | MMU060_WP | MMU060_SP)) {
                unsigned long errorcode;
                unsigned long addr = fp->un.fmt4.effaddr;
-               errorcode = ((fslw & MMU060_WP) ? 1 : 0) |
-                                       ((fslw & MMU060_W)  ? 2 : 0);
+
+               if (fslw & MMU060_MA)
+                       addr = (addr + 7) & -8;
+
+               errorcode = 1;
+               if (fslw & MMU060_DESC_ERR) {
+                       __flush_tlb040_one(addr);
+                       errorcode = 0;
+               }
+               if (fslw & MMU060_W)
+                       errorcode |= 2;
 #ifdef DEBUG
                printk("errorcode = %d\n", errorcode );
 #endif
-               if (fslw & MMU060_MA)
-                       addr = PAGE_ALIGN(addr);
                do_page_fault(&fp->ptregs, addr, errorcode);
        } else if (fslw & (MMU060_SEE)){
-               /* Software Emulation Error. Probably an instruction
-                * using an unsupported addressing mode
+               /* Software Emulation Error.
+                * fault during mem_read/mem_write in ifpsp060/os.S
                 */
-               send_sig (SIGSEGV, current, 1);
+               send_fault_sig(&fp->ptregs);
        } else {
                printk("pc=%#lx, fa=%#lx\n", fp->ptregs.pc, fp->un.fmt4.effaddr);
                printk( "68060 access error, fslw=%lx\n", fslw );
@@ -243,74+252,113 @@ static inline void access_error060 (struct frame *fp)
 #endif /* CONFIG_M68060 */
 
 #if defined (CONFIG_M68040)
-static inline unsigned long probe040 (int iswrite, int fc, unsigned long addr)
+static inline unsigned long probe040(int iswrite, unsigned long addr)
 {
        unsigned long mmusr;
-       mm_segment_t fs = get_fs();
 
-       set_fs (MAKE_MM_SEG(fc));
+       asm volatile (".chip 68040");
 
        if (iswrite)
-               /* write */
-               asm volatile (".chip 68040\n\t"
-                             "ptestw (%1)\n\t"
-                             "movec %%mmusr,%0\n\t"
-                             ".chip 68k"
-                             : "=r" (mmusr)
-                             : "a" (addr));
+               asm volatile ("ptestw (%0)" : : "a" (addr));
        else
-               asm volatile (".chip 68040\n\t"
-                             "ptestr (%1)\n\t"
-                             "movec %%mmusr,%0\n\t"
-                             ".chip 68k"
-                             : "=r" (mmusr)
-                             : "a" (addr));
+               asm volatile ("ptestr (%0)" : : "a" (addr));
+
+       asm volatile ("movec %%mmusr,%0" : "=r" (mmusr));
 
-       set_fs (fs);
+       asm volatile (".chip 68k");
 
        return mmusr;
 }
 
-static inline void do_040writeback (unsigned short ssw,
-                            unsigned short wbs,
-                            unsigned long wba,
-                            unsigned long wbd,
-                            struct frame *fp)
+static inline int do_040writeback1(unsigned short wbs, unsigned long wba,
+                                  unsigned long wbd)
 {
-       mm_segment_t fs = get_fs ();
-       unsigned long mmusr;
-       unsigned long errorcode;
+       int res = 0;
 
-       /*
-        * No special handling for the second writeback anymore.
-        * It misinterpreted the misaligned status sometimes.
-        * This way an extra page-fault may be caused (Martin Apel).
-        */
-
-       mmusr = probe040 (1, wbs & WBTM_040,  wba);
-       errorcode = (mmusr & MMU_R_040) ? 3 : 2;
-       if (do_page_fault (&fp->ptregs, wba, errorcode))
-         /* just return if we can't perform the writeback */
-         return;
+       set_fs(MAKE_MM_SEG(wbs));
 
-       set_fs (MAKE_MM_SEG(wbs & WBTM_040));
        switch (wbs & WBSIZ_040) {
-           case BA_SIZE_BYTE:
-               put_user (wbd & 0xff, (char *)wba);
+       case BA_SIZE_BYTE:
+               res = put_user(wbd & 0xff, (char *)wba);
                break;
-           case BA_SIZE_WORD:
-               put_user (wbd & 0xffff, (short *)wba);
+       case BA_SIZE_WORD:
+               res = put_user(wbd & 0xffff, (short *)wba);
                break;
-           case BA_SIZE_LONG:
-               put_user (wbd, (int *)wba);
+       case BA_SIZE_LONG:
+               res = put_user(wbd, (int *)wba);
                break;
        }
-       set_fs (fs);
+
+#ifdef DEBUG
+       printk("do_040writeback1, res=%d\n",res);
+#endif
+
+       return res;
+}
+
+/* after an exception in a writeback the stack frame coresponding
+ * to that exception is discarded, set a few bits in the old frame 
+ * to simulate what it should look like
+ */
+static inline void fix_xframe040(struct frame *fp, unsigned short wbs)
+{
+       fp->un.fmt7.faddr = current->thread.faddr;
+       fp->un.fmt7.ssw = wbs & 0xff;
+}
+
+static inline void do_040writebacks(struct frame *fp)
+{
+       int res = 0;
+#if 0
+       if (fp->un.fmt7.wb1s & WBV_040)
+               printk("access_error040: cannot handle 1st writeback. oops.\n");
+#endif
+
+       if ((fp->un.fmt7.wb2s & WBV_040) &&
+           !(fp->un.fmt7.wb2s & WBTT_040)) {
+               res = do_040writeback1(fp->un.fmt7.wb2s, fp->un.fmt7.wb2a,
+                                      fp->un.fmt7.wb2d);
+               if (res)
+                       fix_xframe040(fp, fp->un.fmt7.wb2s);
+               else 
+                       fp->un.fmt7.wb2s = 0;
+       }
+
+       /* do the 2nd wb only if the first one was succesful (except for a kernel wb) */
+       if (fp->un.fmt7.wb3s & WBV_040 && (!res || fp->un.fmt7.wb3s & 4)) {
+               res = do_040writeback1(fp->un.fmt7.wb3s, fp->un.fmt7.wb3a,
+                                      fp->un.fmt7.wb3d);
+               if (res)
+                       fix_xframe040(fp, fp->un.fmt7.wb3s);
+               else
+                       fp->un.fmt7.wb3s = 0;
+       }
+
+       if (res)
+               send_fault_sig(&fp->ptregs);
+}
+
+/*
+ * called from sigreturn(), must ensure userspace code didn't
+ * manipulate exception frame to circumvent protection, then complete
+ * pending writebacks
+ * we just clear TM2 to turn it into an userspace access
+ */
+asmlinkage void berr_040cleanup(struct frame *fp)
+{
+       mm_segment_t old_fs = get_fs();
+
+       fp->un.fmt7.wb2s &= ~4;
+       fp->un.fmt7.wb3s &= ~4;
+
+       do_040writebacks(fp);
+       set_fs(old_fs);
 }
 
-static inline void access_error040 (struct frame *fp)
+static inline void access_error040(struct frame *fp)
 {
        unsigned short ssw = fp->un.fmt7.ssw;
+       mm_segment_t old_fs = get_fs();
        unsigned long mmusr;
 
 #ifdef DEBUG
@@ -322,7+370,6 @@ static inline void access_error040 (struct frame *fp)
                fp->un.fmt7.wb2d, fp->un.fmt7.wb3d);
 #endif
 
-
        if (ssw & ATC_040) {
                unsigned long addr = fp->un.fmt7.faddr;
                unsigned long errorcode;
@@ -332,56+379,50 @@ static inline void access_error040 (struct frame *fp)
                 * has been corrected if there was a misaligned access (MA).
                 */
                if (ssw & MA_040)
-                       addr = PAGE_ALIGN (addr);
+                       addr = (addr + 7) & -8;
 
+               set_fs(MAKE_MM_SEG(ssw));
                /* MMU error, get the MMUSR info for this access */
-               mmusr = probe040 (!(ssw & RW_040), ssw & TM_040, addr);
+               mmusr = probe040(!(ssw & RW_040), addr);
 #ifdef DEBUG
                printk("mmusr = %lx\n", mmusr);
 #endif
-               errorcode = ((mmusr & MMU_R_040) ? 1 : 0) |
-                       ((ssw & RW_040) ? 0 : 2);
-#ifdef CONFIG_FTRACE
-               {
-                       unsigned long flags;
-
-                       save_flags(flags);
-                       cli();
-                       do_ftrace(0xfa000000 | errorcode);
-                       do_ftrace(mmusr);
-                       restore_flags(flags);
+               errorcode = 1;
+               if (!(mmusr & MMU_R_040)) {
+                       /* clear the invalid atc entry */
+                       __flush_tlb040_one(addr);
+                       errorcode = 0;
                }
+               if (!(ssw & RW_040))
+                       errorcode |= 2;
+               if (do_page_fault(&fp->ptregs, addr, errorcode)) {
+#ifdef DEBUG
+                       printk("do_page_fault() !=0 \n");
 #endif
-               do_page_fault (&fp->ptregs, addr, errorcode);
+                       if (user_mode(&fp->ptregs)){
+                               /* delay writebacks after signal delivery */
+#ifdef DEBUG
+                               printk(".. was usermode - return\n");
+#endif
+                               return;
+                       }
+                       /* disable writeback into user space from kernel
+                        * (if do_page_fault didn't fix the mapping,
+                         * the writeback won't do good)
+                        */
+#ifdef DEBUG
+                       printk(".. disabling wb2\n");
+#endif
+                       if (fp->un.fmt7.wb2a == fp->un.fmt7.faddr)
+                               fp->un.fmt7.wb2s &= ~WBV_040;
+               }
        } else {
-               printk ("68040 access error, ssw=%x\n", ssw);
-               trap_c (fp);
+               printk("68040 access error, ssw=%x\n", ssw);
+               trap_c(fp);
        }
 
-#if 0
-       if (fp->un.fmt7.wb1s & WBV_040)
-               printk("access_error040: cannot handle 1st writeback. oops.\n");
-#endif
-
-/*
- *  We may have to do a couple of writebacks here.
- *
- *  MR: we can speed up the thing a little bit and let do_040writeback()
- *  not produce another page fault as wb2 corresponds to the address that
- *  caused the fault. on write faults no second fault is generated, but
- *  on read faults for security reasons (although per definitionem impossible)
- */
-
-       if (fp->un.fmt7.wb2s & WBV_040 && (fp->un.fmt7.wb2s &
-                                          WBTT_040) != BA_TT_MOVE16)
-               do_040writeback (ssw,
-                                fp->un.fmt7.wb2s, fp->un.fmt7.wb2a,
-                                fp->un.fmt7.wb2d, fp);
-
-       if (fp->un.fmt7.wb3s & WBV_040)
-               do_040writeback (ssw, fp->un.fmt7.wb3s,
-                                fp->un.fmt7.wb3a, fp->un.fmt7.wb3d,
-                                fp);
+       do_040writebacks(fp);
+       set_fs(old_fs);
 }
 #endif /* CONFIG_M68040 */
 
@@ -470,12+511,14 @@ extern inline void bus_error030 (struct frame *fp)
                else if (buserr_type & SUN3_BUSERR_INVALID)
                        errorcode = 0x00;
                else {
+#ifdef DEBUG
                        printk ("*** unexpected busfault type=%#04x\n", buserr_type);
                        printk ("invalid %s access at %#lx from pc %#lx\n",
                                !(ssw & RW) ? "write" : "read", addr,
                                fp->ptregs.pc);
+#endif
                        die_if_kernel ("Oops", &fp->ptregs, buserr_type);
-                       force_sig (SIGSEGV, current);
+                       force_sig (SIGBUS, current);
                        return;
                }
 
@@ -596,7+639,7 @@ static inline void bus_error030 (struct frame *fp)
            printk ("mmusr is %#x for addr %#lx in task %p\n",
                    mmusr, addr, current);
            printk ("descriptor address is %#lx, contents %#lx\n",
-                   mm_ptov(desc), *(unsigned long *)mm_ptov(desc));
+                   __va(desc), *(unsigned long *)__va(desc));
 #endif
 
            errorcode = (mmusr & MMU_I) ? 0 : 1;
@@ -694,7+737,7 @@ static inline void bus_error030 (struct frame *fp)
        printk ("mmusr is %#x for addr %#lx in task %p\n",
                mmusr, addr, current);
        printk ("descriptor address is %#lx, contents %#lx\n",
-               mm_ptov(desc), *(unsigned long *)mm_ptov(desc));
+               __va(desc), *(unsigned long *)__va(desc));
 #endif
 
        if (mmusr & MMU_I)
index b9480ae..a230bad 100644 (file)
@@ -6,6+6,6 @@
        $(CC) $(AFLAGS) -traditional -c $< -o $@
 
 L_TARGET = lib.a
-L_OBJS  = ashrdi3.o lshrdi3.o checksum.o memcpy.o memcmp.o memset.o semaphore.o
+L_OBJS  = ashrdi3.o lshrdi3.o checksum.o memcpy.o memcmp.o memset.o semaphore.o muldi3.o
 
 include $(TOPDIR)/Rules.make
diff --git a/arch/m68k/lib/muldi3.c b/arch/m68k/lib/muldi3.c
new file mode 100644 (file)
index 0000000..9ea8812
--- /dev/null
@@ -0,0 +1,63 @@
+/* muldi3.c extracted from gcc-2.7.2.3/libgcc2.c and 
+                          gcc-2.7.2.3/longlong.h which is: */
+/* Copyright (C) 1989, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
+
+This file is part of GNU CC.
+
+GNU CC is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU CC is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+#define BITS_PER_UNIT 8
+
+#define umul_ppmm(w1, w0, u, v) \
+  __asm__ ("mulu%.l %3,%1:%0"                                          \
+           : "=d" ((USItype)(w0)),                                     \
+             "=d" ((USItype)(w1))                                      \
+           : "%0" ((USItype)(u)),                                      \
+             "dmi" ((USItype)(v)))
+
+#define __umulsidi3(u, v) \
+  ({DIunion __w;                                                       \
+    umul_ppmm (__w.s.high, __w.s.low, u, v);                           \
+    __w.ll; })
+
+typedef         int SItype     __attribute__ ((mode (SI)));
+typedef unsigned int USItype   __attribute__ ((mode (SI)));
+typedef                 int DItype     __attribute__ ((mode (DI)));
+typedef int word_type __attribute__ ((mode (__word__)));
+
+struct DIstruct {SItype high, low;};
+
+typedef union
+{
+  struct DIstruct s;
+  DItype ll;
+} DIunion;
+
+DItype
+__muldi3 (DItype u, DItype v)
+{
+  DIunion w;
+  DIunion uu, vv;
+
+  uu.ll = u,
+  vv.ll = v;
+
+  w.ll = __umulsidi3 (uu.s.low, vv.s.low);
+  w.s.high += ((USItype) uu.s.low * (USItype) vv.s.high
+              + (USItype) uu.s.high * (USItype) vv.s.low);
+
+  return w.ll;
+}
index 3eba3d1..8dc87eb 100644 (file)
 extern void die_if_kernel(char *, struct pt_regs *, long);
 extern const int frame_extra_sizes[]; /* in m68k/kernel/signal.c */
 
+int send_fault_sig(struct pt_regs *regs)
+{
+       siginfo_t siginfo = { 0, 0, 0, };
+
+       siginfo.si_signo = current->thread.signo;
+       siginfo.si_code = current->thread.code;
+       siginfo.si_addr = (void *)current->thread.faddr;
+       printk("send_fault_sig: %p,%d,%d\n", siginfo.si_addr, siginfo.si_signo, siginfo.si_code);
+
+       if (user_mode(regs)) {
+               force_sig_info(siginfo.si_signo,
+                              &siginfo, current);
+       } else {
+               unsigned long fixup;
+
+               /* Are we prepared to handle this kernel fault? */
+               if ((fixup = search_exception_table(regs->pc))) {
+                       struct pt_regs *tregs;
+                       /* Create a new four word stack frame, discarding the old
+                          one.  */
+                       regs->stkadj = frame_extra_sizes[regs->format];
+                       tregs = (struct pt_regs *)((ulong)regs + regs->stkadj);
+                       tregs->vector = regs->vector;
+                       tregs->format = 0;
+                       tregs->pc = fixup;
+                       tregs->sr = regs->sr;
+                       return -1;
+               }
+
+               //if (siginfo.si_signo == SIGBUS)
+               //      force_sig_info(siginfo.si_signo,
+               //                     &siginfo, current);
+
+               /*
+                * Oops. The kernel tried to access some bad page. We'll have to
+                * terminate things with extreme prejudice.
+                */
+               if ((unsigned long)siginfo.si_addr < PAGE_SIZE)
+                       printk(KERN_ALERT "Unable to handle kernel NULL pointer dereference");
+               else
+                       printk(KERN_ALERT "Unable to handle kernel access");
+               printk(" at virtual address %p\n", siginfo.si_addr);
+               die_if_kernel("Oops", regs, 0 /*error_code*/);
+               do_exit(SIGKILL);
+       }
+
+       return 1;
+}
+
 /*
  * This routine handles page faults.  It determines the problem, and
  * then passes it off to one of the appropriate routines.
@@ -30,16+79,15 @@ extern const int frame_extra_sizes[]; /* in m68k/kernel/signal.c */
  * If this routine detects a bad access, it returns 1, otherwise it
  * returns 0.
  */
-asmlinkage int do_page_fault(struct pt_regs *regs, unsigned long address,
+int do_page_fault(struct pt_regs *regs, unsigned long address,
                              unsigned long error_code)
 {
        struct mm_struct *mm = current->mm;
        struct vm_area_struct * vma;
-       unsigned long fixup;
        int write, fault;
 
 #ifdef DEBUG
-       printk ("regs->sr=%#x, regs->pc=%#lx, address=%#lx, %ld, %p\n",
+       printk ("do page fault:\nregs->sr=%#x, regs->pc=%#lx, address=%#lx, %ld, %p\n",
                regs->sr, regs->pc, address, error_code,
                current->mm->pgd);
 #endif
@@ -55,43+103,46 @@ asmlinkage int do_page_fault(struct pt_regs *regs, unsigned long address,
 
        vma = find_vma(mm, address);
        if (!vma)
-               goto bad_area;
+               goto map_err;
        if (vma->vm_flags & VM_IO)
-               goto bad_area;
+               goto acc_err;
        if (vma->vm_start <= address)
                goto good_area;
        if (!(vma->vm_flags & VM_GROWSDOWN))
-               goto bad_area;
+               goto map_err;
        if (user_mode(regs)) {
                /* Accessing the stack below usp is always a bug.  The
                   "+ 256" is there due to some instructions doing
                   pre-decrement on the stack and that doesn't show up
                   until later.  */
                if (address + 256 < rdusp())
-                       goto bad_area;
+                       goto map_err;
        }
        if (expand_stack(vma, address))
-               goto bad_area;
+               goto map_err;
 
 /*
  * Ok, we have a good vm_area for this memory access, so
  * we can handle it..
  */
 good_area:
+#ifdef DEBUG
+       printk("do_page_fault: good_area\n");
+#endif
        write = 0;
        switch (error_code & 3) {
                default:        /* 3: write, present */
                        /* fall through */
                case 2:         /* write, not present */
                        if (!(vma->vm_flags & VM_WRITE))
-                               goto bad_area;
+                               goto acc_err;
                        write++;
                        break;
                case 1:         /* read, present */
-                       goto bad_area;
+                       goto acc_err;
                case 0:         /* read, not present */
                        if (!(vma->vm_flags & (VM_READ | VM_EXEC)))
-                               goto bad_area;
+                               goto acc_err;
        }
 
        /*
@@ -100,87+151,56 @@ good_area:
         * the fault.
         */
        fault = handle_mm_fault(mm, vma, address, write);
+#ifdef DEBUG
+       printk("handle_mm_fault returns %d\n",fault);
+#endif
        if (fault < 0)
                goto out_of_memory;
        if (!fault)
-               goto do_sigbus;
+               goto bus_err;
 
        /* There seems to be a missing invalidate somewhere in do_no_page.
         * Until I found it, this one cures the problem and makes
         * 1.2 run on the 68040 (Martin Apel).
         */
+       #warning should be obsolete now...
        if (CPU_IS_040_OR_060)
                flush_tlb_page(vma, address);
        up(&mm->mmap_sem);
        return 0;
 
 /*
- * 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 (user_mode(regs)) {
-               siginfo_t info;
-               info.si_signo = SIGSEGV;
-               info.si_code = SEGV_MAPERR;
-               info.si_addr = (void *)address;
-               force_sig_info(SIGSEGV, &info, current);
-               return 1;
-       }
-
-no_context:
-       /* Are we prepared to handle this kernel fault?  */
-       if ((fixup = search_exception_table(regs->pc)) != 0) {
-               struct pt_regs *tregs;
-               /* Create a new four word stack frame, discarding the old
-                  one.  */
-               regs->stkadj = frame_extra_sizes[regs->format];
-               tregs = (struct pt_regs *)((ulong)regs + regs->stkadj);
-               tregs->vector = regs->vector;
-               tregs->format = 0;
-               tregs->pc = fixup;
-               tregs->sr = regs->sr;
-               return -1;
-       }
-
-/*
- * Oops. The kernel tried to access some bad page. We'll have to
- * terminate things with extreme prejudice.
- */
-       if ((unsigned long) address < PAGE_SIZE) {
-               printk(KERN_ALERT "Unable to handle kernel NULL pointer dereference");
-       } else
-               printk(KERN_ALERT "Unable to handle kernel access");
-       printk(" at virtual address %08lx\n",address);
-       die_if_kernel("Oops", regs, error_code);
-       do_exit(SIGKILL);
-
-/*
  * We ran out of memory, or some other thing happened to us that made
  * us unable to handle the page fault gracefully.
  */
 out_of_memory:
-       up(&mm->mmap_sem);
        printk("VM: killing process %s\n", current->comm);
-       if (error_code & 4)
+       if (user_mode(regs))
                do_exit(SIGKILL);
-       goto no_context;
 
-do_sigbus:
+no_context:
+       current->thread.signo = SIGBUS;
+       current->thread.faddr = address;
+       return send_fault_sig(regs);
+
+bus_err:
+       current->thread.signo = SIGBUS;
+       current->thread.code = BUS_ADRERR;
+       current->thread.faddr = address;
+       goto send_sig;
+
+map_err:
+       current->thread.signo = SIGSEGV;
+       current->thread.code = SEGV_MAPERR;
+       current->thread.faddr = address;
+       goto send_sig;
+
+acc_err:
+       current->thread.signo = SIGSEGV;
+       current->thread.code = SEGV_ACCERR;
+       current->thread.faddr = address;
+
+send_sig:
        up(&mm->mmap_sem);
-
-       /*
-        * Send a sigbus, regardless of whether we were in kernel
-        * or user mode.
-        */
-       force_sig(SIGBUS, current);
-
-       /* Kernel mode? Handle exceptions or die */
-       if (!user_mode(regs))
-               goto no_context;
-
-       return 1;
+       return send_fault_sig(regs);
 }
index d48a020..06ffa56 100644 (file)
@@ -201,15+201,6 @@ int mvme147_keyb_init (void)
 
 /*-------------------  Serial console stuff ------------------------*/
 
-void m147_scc_write(struct console *co, const char *str, unsigned cnt);
-
-
-void mvme147_init_console_port (struct console *co, int cflag)
-{
-       co->write = m147_scc_write;
-}
-
-
 static void scc_delay (void)
 {
        int n;
@@ -250,3+241,31 @@ void m147_scc_write (struct console *co, const char *str, unsigned count)
        restore_flags(flags);
 }
 
+
+static int m147_scc_wait_key (struct console *co)
+{
+       volatile unsigned char *p = (volatile char *)M147_SCC_A_ADDR;
+       unsigned long   flags;
+       int             c;
+
+       /* wait for rx buf filled */
+       while ((*p & 0x01) == 0)
+               ;
+
+       save_flags(flags);
+       cli();
+
+       *p = 8;
+       scc_delay();
+       c = *p;
+
+       restore_flags(flags);
+       return c;
+}
+
+
+void mvme147_init_console_port (struct console *co, int cflag)
+{
+       co->write    = m147_scc_write;
+       co->wait_key = m147_scc_wait_key;
+}
index 60134d9..b61ee9c 100644 (file)
@@ -56,8+56,7 @@ SRAM can also be used as additional console device, use debug=mem.
 This will save kernel startup msgs into SRAM, the screen will display 
 only the penguin - and shell prompt if it gets that far..
 
-Serial console works and can also be used for debugging, provided serial
-initialisation works.
+Serial console works and can also be used for debugging, see loader_txt
 
 Most problems seem to be caused by fawlty or badly configured io-cards or 
 harddrives anyway..there are so many things that can go wrong here.
@@ -82,8+81,9 @@ The main interrupt register IIRQ_REG will indicate whether an IRQ was internal
 or from some ISA devices, EIRQ_REG can distinguish up to 8 ISA IRQs.
 
 The Q40 custom chip is programmable to provide 2 periodic timers:
-       - 50 or 200 Hz - level 2,  !!THIS CANT BE DISABLED!!
-       - 10 or 20 KHz - level 4 (and possibly 6 - hardware decoding..)
+       - 50 or 200 Hz - level 2,
+       - 10 or 20 KHz - level 4 
+  !!THIS CANT BE DISABLED!!
 
 Linux uses the 200 Hz interrupt for timer and beep by default.
 
@@ -92,9+92,6 @@ Interrupts
 ==========
 
 q40 master chip handles only level triggered interrupts :-((
-further limitation is no disabling etc. There is NO WAY to remove
-an ISA irq request other than serve the HW specific control register,
-the ISA irq lines are connected straight to the CPU ipl1 pin..
 
 IRQ sharing is not yet implemented but this should be only a minor
 problem..
@@ -102,12+99,17 @@ problem..
 Linux has some requirements wrt interrupt architecture, these are
 to my knowledge:
        (a) interrupt handler must not be reentered even when sti() is called
+           from within handler
        (b) working enable/disable_irq
 
 Luckily these requirements are only important for drivers shared
 with other architectures - ide,serial,parallel, ethernet..
-q40ints.c now contains a trivial hack for (a), however (b) could
-be only solved by driver-specific code
+q40ints.c now contains a trivial hack for (a), (b) is more difficult
+because only irq's 4-15 can be disabled - and only all o them at once.
+Thus disable_irq() can effectively block the machine if the driver goes
+asleep.
+One thing to keep in minde when hacking around the interrupt code is 
+that there is no way to find out which IRQ caused a request.
 
 Keyboard
 ========
index 2496aa9..3b70dfc 100644 (file)
  */
 
 #include <linux/config.h>
+#include <stdarg.h>
 #include <linux/types.h>
 #include <linux/kernel.h>
 #include <linux/mm.h>
 #include <linux/linkage.h>
 #include <linux/init.h>
 #include <linux/major.h>
+#include <linux/serial_reg.h>
 
 #include <asm/rtc.h>
 #include <asm/bootinfo.h>
 #include <asm/q40_master.h>
 #include <asm/keyboard.h>
 
-extern void fd_floppy_eject(void);
-extern void fd_floppy_setup(char *str, int *ints);
+extern void floppy_eject(void);
+extern void floppy_setup(char *str, int *ints);
 
 extern void q40_process_int (int level, struct pt_regs *regs);
 extern void (*q40_sys_default_handler[]) (int, void *, struct pt_regs *);  /* added just for debugging */
@@ -65,9+67,12 @@ extern char *saved_command_line;
 extern char m68k_debug_device[];
 static void q40_mem_console_write(struct console *co, const char *b,
                                    unsigned int count);
+#if 0
+extern int ql_ticks=0;
+extern int sound_ticks=0;
+#endif
 
-static int ql_ticks=0;
-static int sound_ticks=0;
+extern int ql_ticks;
 
 static unsigned char bcd2bin (unsigned char b);
 static unsigned char bin2bcd (unsigned char b);
@@ -81,12+86,6 @@ static struct console q40_console_driver = {
 };
 
 
-/* Save tick handler routine pointer, will point to do_timer() in
- * kernel/sched.c */
-
-/* static void (*tick_handler)(int, void *, struct pt_regs *); */
-
-
 /* early debugging function:*/
 extern char *q40_mem_cptr; /*=(char *)0xff020000;*/
 static int _cpleft;
@@ -140,6+139,41 @@ static void q40_get_model(char *model)
     sprintf(model, "Q40");
 }
 
+/* pasted code to make parport_pc happy */
+extern __inline__ int __get_order(unsigned long size)
+{
+       int order;
+
+       size = (size-1) >> (PAGE_SHIFT-1);
+       order = -1;
+       do {
+               size >>= 1;
+               order++;
+       } while (size);
+       return order;
+}
+void *pci_alloc_consistent(void *hwdev, size_t size,
+                          dma_addr_t *dma_handle)
+{
+       void *ret;
+       int gfp = GFP_ATOMIC;
+
+       ret = (void *)__get_free_pages(gfp, __get_order(size));
+
+       if (ret != NULL) {
+               memset(ret, 0, size);
+               *dma_handle = virt_to_bus(ret);
+       }
+       return ret;
+}
+
+void pci_free_consistent(void *hwdev, size_t size,
+                        void *vaddr, dma_addr_t dma_handle)
+{
+       free_pages((unsigned long)vaddr, __get_order(size));
+}
+/* end pasted code */
+
 
 /* No hardware options on Q40? */
 
@@ -149,6+183,16 @@ static int q40_get_hardware_list(char *buffer)
     return 0;
 }
 
+static unsigned int serports[]={0x3f8,0x2f8,0x3e8,0x2e8,0};
+void q40_disable_irqs(void)
+{
+  unsigned i,j;
+  
+  j=0;
+  while((i=serports[j++])) outb(0,i+UART_IER);
+  master_outb(0,EXT_ENABLE_REG);
+  master_outb(0,KEY_IRQ_ENABLE_REG);
+}
 
 void __init config_q40(void)
 {
@@ -177,13+221,14 @@ void __init config_q40(void)
     mach_sysrq_key       = 0x54;
 #endif
     conswitchp = &dummy_con;
-#ifdef CONFIG_BLK_DEV_FD
-    mach_floppy_setup    = fd_floppy_setup;
-    mach_floppy_eject    = fd_floppy_eject;
+#if 0 /*def CONFIG_BLK_DEV_FD*/
+    mach_floppy_setup    = floppy_setup;
+    mach_floppy_eject    = floppy_eject;
     /**/
 #endif
 
-    mach_max_dma_address = 0;   /* no DMA at all */
+    q40_disable_irqs();
+    mach_max_dma_address = 32*1024*1024;   /* no DMA at all, but ide-scsi requires it.. */
 
 
 /* userfull for early debuging stages writes kernel messages into SRAM */
@@ -203,6+248,7 @@ int q40_parse_bootinfo(const struct bi_record *rec)
   return 1;  /* unknown */
 }
 
+#if 0
 #define DAC_LEFT  ((unsigned char *)0xff008000)
 #define DAC_RIGHT ((unsigned char *)0xff008004)
 void q40_mksound(unsigned int hz, unsigned int ticks)
@@ -258,7+304,11 @@ static void q40_timer_int (int irq, void *dev_id, struct pt_regs *fp)
 #endif
     q40_timer_routine(irq, dev_id, fp);
 }
+#endif
 
+#if 0
+extern void (*q40_timer_routine)(int, void *, struct pt_regs *);
+extern void q40_timer_int();
 
 void q40_sched_init (void (*timer_routine)(int, void *, struct pt_regs *))
 {
@@ -289,7+339,7 @@ void q40_sched_init (void (*timer_routine)(int, void *, struct pt_regs *))
 #endif
 #endif
 }
-
+#endif
 
 unsigned long q40_gettimeoffset (void)
 {
index c6625aa..96d9414 100644 (file)
  * License.  See the file COPYING in the main directory of this archive
  * for more details.
  *
- * losely based on bvme6000ints.c
+ * .. used to be losely based on bvme6000ints.c
  *
  */
 
+#include <linux/config.h>
 #include <linux/types.h>
 #include <linux/kernel.h>
 #include <linux/errno.h>
 #include <linux/string.h>
+#include <linux/sched.h>
 
+#include <asm/rtc.h>
 #include <asm/ptrace.h>
 #include <asm/system.h>
 #include <asm/irq.h>
+#include <asm/hardirq.h>
 #include <asm/traps.h>
 
 #include <asm/q40_master.h>
@@ -71,13+75,16 @@ short unsigned q40_ablecount[Q40_IRQ_MAX+1];
  * the q40 IRQ handling routines.
  */
 
+static int disabled=0;
+
 void q40_init_IRQ (void)
 {
        int i;
 
+       disabled=0;
        for (i = 0; i <= Q40_IRQ_MAX; i++) {
                irq_tab[i].handler = q40_defhand;
-               irq_tab[i].flags = IRQ_FLG_STD;
+               irq_tab[i].flags = 0;
                irq_tab[i].dev_id = NULL;
                /*              irq_tab[i].next = NULL;*/
                irq_tab[i].devname[0] = 0;
@@ -87,14+94,10 @@ void q40_init_IRQ (void)
        }
 
        /* setup handler for ISA ints */
-       sys_request_irq(IRQ2,q40_irq2_handler, IRQ_FLG_LOCK, "q40 ISA and master chip", NULL);
+       sys_request_irq(IRQ2,q40_irq2_handler, 0, "q40 ISA and master chip", NULL);
 
        /* now enable some ints.. */
-
-#if 0  /* has been abandoned */
-       master_outb(1,SER_ENABLE_REG);
-#endif
-       master_outb(1,EXT_ENABLE_REG);
+       master_outb(1,EXT_ENABLE_REG);  /* hm, aint that too early? */
 
        /* would be spurious ints by now, q40kbd_init_hw() does that */
        master_outb(0,KEY_IRQ_ENABLE_REG);
@@ -124,24+127,20 @@ int q40_request_irq(unsigned int irq,
          default:
          }
 
-       if (irq<Q40_IRQ_TIMER)
+       if (irq<Q40_IRQ_SAMPLE)
          {
-           if (!(irq_tab[irq].flags & IRQ_FLG_STD)) 
-             {
-               if (irq_tab[irq].flags & IRQ_FLG_LOCK) 
+           if (irq_tab[irq].dev_id != NULL) 
                  {
                    printk("%s: IRQ %d from %s is not replaceable\n",
                           __FUNCTION__, irq, irq_tab[irq].devname);
                    return -EBUSY;
                  }
-               if (flags & IRQ_FLG_REPLACE) 
+           /*printk("IRQ %d set to handler %p\n",irq,handler);*/
+           if (dev_id==NULL)
                  {
-                   printk("%s: %s can't replace IRQ %d from %s\n",
-                          __FUNCTION__, devname, irq, irq_tab[irq].devname);
-                   return -EBUSY;
-                 }
+               printk("WARNING: dev_id == NULL in request_irq\n");
+               dev_id=1;
              }
-           /*printk("IRQ %d set to handler %p\n",irq,handler);*/
            irq_tab[irq].handler = handler;
            irq_tab[irq].flags   = flags;
            irq_tab[irq].dev_id  = dev_id;
@@ -150,7+149,7 @@ int q40_request_irq(unsigned int irq,
            return 0;
          }
        else {
-         /* Q40_IRQ_TIMER :somewhat special actions required here ..*/
+         /* Q40_IRQ_SAMPLE :somewhat special actions required here ..*/
          sys_request_irq(4,handler,flags,devname,dev_id);
          sys_request_irq(6,handler,flags,devname,dev_id);
          return 0;
@@ -175,31+174,120 @@ void q40_free_irq(unsigned int irq, void *dev_id)
          default:
          }
        
-       if (irq<Q40_IRQ_TIMER)
+       if (irq<Q40_IRQ_SAMPLE)
          {
            if (irq_tab[irq].dev_id != dev_id)
              printk("%s: Removing probably wrong IRQ %d from %s\n",
                     __FUNCTION__, irq, irq_tab[irq].devname);
            
            irq_tab[irq].handler = q40_defhand;
-           irq_tab[irq].flags   = IRQ_FLG_STD;
+           irq_tab[irq].flags   = 0;
            irq_tab[irq].dev_id  = NULL;
            /* irq_tab[irq].devname = NULL; */
            /* do not reset state !! */
          }
        else
-         { /* == Q40_IRQ_TIMER */
+         { /* == Q40_IRQ_SAMPLE */
            sys_free_irq(4,dev_id);
            sys_free_irq(6,dev_id);
          }
 }
 
-#if 1
+
 void q40_process_int (int level, struct pt_regs *fp)
 {
   printk("unexpected interrupt %x\n",level);
 }
+
+/* 
+ * this stuff doesn't really belong here..
+*/
+int ql_ticks=0;
+static int sound_ticks=0;
+
+#define SVOL 45
+
+void q40_mksound(unsigned int hz, unsigned int ticks)
+{
+  /* for now ignore hz, except that hz==0 switches off sound */
+  /* simply alternate the ampl (128-SVOL)-(128+SVOL)-..-.. at 200Hz */
+  if (hz==0)
+    {
+      if (sound_ticks)
+       sound_ticks=1; /* atomic - no irq spinlock used */
+
+      *DAC_LEFT=128;
+      *DAC_RIGHT=128;
+
+      return;
+    }
+  /* sound itself is done in q40_timer_int */
+  if (sound_ticks == 0) sound_ticks=1000; /* pretty long beep */
+  sound_ticks=ticks<<1;
+}
+
+static void (*q40_timer_routine)(int, void *, struct pt_regs *);
+static short rtc_oldsecs=0;
+unsigned rtc_irq_flags=0;
+unsigned rtc_irq_ctrl=0;
+
+static void q40_timer_int (int irq, void * dev, struct pt_regs * regs)
+{
+
+  
+#if (HZ==100)
+    ql_ticks = ql_ticks ? 0 : 1;
+    if (sound_ticks)
+      {
+       unsigned char sval=(sound_ticks & 1) ? 128-SVOL : 128+SVOL;
+       sound_ticks--;
+       *DAC_LEFT=sval;
+       *DAC_RIGHT=sval;
+      }
+#ifdef CONFIG_Q40RTC
+    if (rtc_irq_ctrl && (rtc_oldsecs != RTC_SECS))
+      {
+       rtc_oldsecs = RTC_SECS;
+       rtc_irq_flags = RTC_UIE;
+       rtc_interrupt();
+      }
 #endif
+    if (ql_ticks) return;
+#endif
+    q40_timer_routine(irq, dev, regs);
+}
+
+void q40_sched_init (void (*timer_routine)(int, void *, struct pt_regs *))
+{
+    int timer_irq;
+
+    q40_timer_routine = timer_routine;
+
+#if (HZ==10000)
+    timer_irq=Q40_IRQ_SAMPLE;
+#else
+    timer_irq=Q40_IRQ_FRAME;
+#endif
+
+    /*printk("registering sched/timer IRQ %d, handler %p\n", timer_irq,q40_timer_int);*/
+    /*printk("timer routine %p\n",q40_timer_routine);*/
+
+    if (request_irq(timer_irq, q40_timer_int, 0,
+                               "timer", q40_timer_int))
+       panic ("Couldn't register timer int");
+
+#if (HZ==10000)
+    master_outb(SAMPLE_LOW,SAMPLE_RATE_REG);
+    master_outb(-1,SAMPLE_CLEAR_REG);
+    master_outb(1,SAMPLE_ENABLE_REG);
+#else
+    master_outb(-1,FRAME_CLEAR_REG);   /* not necessary ? */
+#if (HZ==100)
+    master_outb( 1,FRAME_RATE_REG);
+#endif
+#endif
+}
+
 
 /* 
  * tables to translate bits into IRQ numbers 
@@ -208,11+296,12 @@ void q40_process_int (int level, struct pt_regs *fp)
 */
 
 struct IRQ_TABLE{ unsigned mask; int irq ;};
-
+#if 0
 static struct IRQ_TABLE iirqs[]={
   {IRQ_FRAME_MASK,Q40_IRQ_FRAME},
   {IRQ_KEYB_MASK,Q40_IRQ_KEYBOARD},
   {0,0}};
+#endif
 static struct IRQ_TABLE eirqs[]={
   {IRQ3_MASK,3},                   /* ser 1 */
   {IRQ4_MASK,4},                   /* ser 2 */
@@ -231,103+320,124 @@ static struct IRQ_TABLE eirqs[]={
 
 /* complain only this many times about spurious ints : */
 static int ccleirq=60;    /* ISA dev IRQ's*/
-static int cclirq=60;     /* internal */
+/*static int cclirq=60;*/     /* internal */
 
 /* FIX: add shared ints,mask,unmask,probing.... */
 
-/* this is an awfull hack.. */
+
 #define IRQ_INPROGRESS 1
-static int disabled=0;
 /*static unsigned short saved_mask;*/
+static int do_tint=0;
+
+#define DEBUG_Q40INT
+#define IP_USE_DISABLE /* would be nice, but crashes ???? */
+/*static int dd_count=0;*/
 
+static int mext_disabled=0;  /* ext irq disabled by master chip? */
+static int aliased_irq=0;  /* how many times inside handler ?*/
+
+
+/* got level 2 interrupt, dispatch to ISA or keyboard/timer IRQs */
 void q40_irq2_handler (int vec, void *devname, struct pt_regs *fp)
 {
-  /* got level 2 interrupt, dispatch to ISA or keyboard IRQs */
-
-        unsigned mir=master_inb(IIRQ_REG);
+  unsigned mir;
        unsigned mer;
        int irq,i;
 
+ repeat:
+  mir=master_inb(IIRQ_REG);
+  if (mir&IRQ_FRAME_MASK) 
+    { /* dont loose  ticks */
+      do_tint++;
+      master_outb(-1,FRAME_CLEAR_REG);
+    }
        if ((mir&IRQ_SER_MASK) || (mir&IRQ_EXT_MASK)) 
          {
-           
            /* some ISA dev caused the int */
-           
            mer=master_inb(EIRQ_REG);
-           
            for (i=0; eirqs[i].mask; i++)
              {
                if (mer&(eirqs[i].mask)) 
                  {
                    irq=eirqs[i].irq;
-                   irq_tab[irq].count++;
+/*
+ * There is a little mess wrt which IRQ really caused this irq request. The
+ * main problem is that IIRQ_REG and EIRQ_REG reflect the state when they
+ * are read - which is long after the request came in. In theory IRQs should
+ * not just go away but they occassionally do
+ */
+             if (irq>4 && irq<=15 && mext_disabled) 
+               {
+                 /*aliased_irq++;*/
+                 goto iirq;
+               }
                    if (irq_tab[irq].handler == q40_defhand )
                      {
                        printk("handler for IRQ %d not defined\n",irq);
                        continue; /* ignore uninited INTs :-( */
                      }
-
                    if ( irq_tab[irq].state & IRQ_INPROGRESS )
                      {
+                 /* some handlers do sti() for irq latency reasons, */
+                 /* however reentering an active irq handler is not permitted */
+#ifdef IP_USE_DISABLE
+                 /* in theory this is the better way to do it because it still */
+                 /* lets through eg the serial irqs, unfortunately it crashes */
+                 disable_irq(irq);
+                 disabled=1;
+#else
                        /*printk("IRQ_INPROGRESS detected for irq %d, disabling - %s disabled\n",irq,disabled ? "already" : "not yet"); */
-
-                       /*saved_mask = fp->sr;*/
-                       fp->sr = (fp->sr & (~0x700))+0x200;
+                 fp->sr = (((fp->sr) & (~0x700))+0x200);
                        disabled=1;
-                       return;
+#endif
+                 goto iirq;
                      }
+             irq_tab[irq].count++; 
                    irq_tab[irq].state |= IRQ_INPROGRESS;
                    irq_tab[irq].handler(irq,irq_tab[irq].dev_id,fp);
+             irq_tab[irq].state &= ~IRQ_INPROGRESS;
 
                    /* naively enable everything, if that fails than    */
                    /* this function will be reentered immediately thus */
                    /* getting another chance to disable the IRQ        */
 
-                   irq_tab[irq].state &= ~IRQ_INPROGRESS;
                    if ( disabled ) 
                      {
+#ifdef IP_USE_DISABLE
+                 if (irq>4){
+                   disabled=0;
+                   /*dd_count--;*/
+                   enable_irq(irq);}
+#else
+                 disabled=0;
                        /*printk("reenabling irq %d\n",irq); */
-                       fp->sr = (fp->sr & (~0x700)); /*saved_mask; */
-                       disabled=0;
+#if 0
+                 fp->sr = ((fp->sr) & (~0x700)); /* unneeded ?! */
+#endif
+#endif
                      }
-                   else if ( fp->sr &0x200 )
-                     printk("exiting irq handler: fp->sr &0x200 !!\n");
-
-                   return;
+             goto repeat;  /* return;  */
                  }
              }
-           if (ccleirq>0
+      if (mer && ccleirq>0 && !aliased_irq
              printk("ISA interrupt from unknown source? EIRQ_REG = %x\n",mer),ccleirq--;
          } 
-       else 
+ iirq:
+  mir=master_inb(IIRQ_REG);
+  if (mir&IRQ_FRAME_MASK) 
          {
-           /* internal */
-
-           for (i=0; iirqs[i].mask; i++)
+      do_tint++;
+      master_outb(-1,FRAME_CLEAR_REG);
+    }
+  for(;do_tint>0;do_tint--) 
              {
-               if (mir&(iirqs[i].mask)) 
-                 {
-                   irq=iirqs[i].irq;
-                   irq_tab[irq].count++;
-                   if (irq_tab[irq].handler == q40_defhand )
-                     continue; /* ignore uninited INTs :-( */
-                   
-                   /* the INPROGRESS stuff should be completely useless*/
-                   /* for internal ints, nevertheless test it..*/
-                   if ( irq_tab[irq].state & IRQ_INPROGRESS )
+      irq_tab[Q40_IRQ_FRAME].count++;
+      irq_tab[Q40_IRQ_FRAME].handler(Q40_IRQ_FRAME,irq_tab[Q40_IRQ_FRAME].dev_id,fp);    
+    }
+  if (mir&IRQ_KEYB_MASK) /* may handle it even if actually disabled*/
                      {
-                       /*disable_irq(irq);
-                         return;*/
-                       printk("rentering handler for IRQ %d !!\n",irq);
-                     }
-                   irq_tab[irq].handler(irq,irq_tab[irq].dev_id,fp);
-                   irq_tab[irq].state &= ~IRQ_INPROGRESS;
-                   /*enable_irq(irq);*/ /* better not try luck !*/
-                   return;
-                 }
-             }
-           if (cclirq>0)
-             printk("internal level 2 interrupt from unknown source ? IIRQ_REG=%x\n",mir),cclirq--;
+      irq_tab[Q40_IRQ_KEYBOARD].count++;
+      irq_tab[Q40_IRQ_KEYBOARD].handler(Q40_IRQ_KEYBOARD,irq_tab[Q40_IRQ_KEYBOARD].dev_id,fp);
          }
 }
 
@@ -335,9+445,11 @@ int q40_get_irq_list (char *buf)
 {
        int i, len = 0;
 
-       for (i = 0; i <= Q40_IRQ_MAX; i++) {
+       for (i = 0; i <= Q40_IRQ_MAX; i++) 
+         {
                if (irq_tab[i].count)
-                       len += sprintf (buf+len, "Vec 0x%02x: %8d  %s%s\n",
+             len += sprintf (buf+len, "%sIRQ %02d: %8d  %s%s\n",
+                             (i<=15) ? "ISA-" : "    " ,               
                            i, irq_tab[i].count,
                            irq_tab[i].devname[0] ? irq_tab[i].devname : "?",
                            irq_tab[i].handler == q40_defhand ? 
@@ -370,30+482,17 @@ static void sys_default_handler(int lev, void *dev_id, struct pt_regs *regs)
    sys_default_handler,sys_default_handler,sys_default_handler,sys_default_handler
  };
 
-int irq_disabled=0;
+
 void q40_enable_irq (unsigned int irq)
 {
-  /* enable ISA iqs */
-  if ( irq>=0 && irq<=15 ) /* the moderately bad case */
+  if ( irq>=5 && irq<=15 )
+  {
+    mext_disabled--;
+    if (mext_disabled>0)
+         printk("q40_enable_irq : nested disable/enable\n"); 
+    if (mext_disabled==0)
     master_outb(1,EXT_ENABLE_REG);
-#if 0
-  unsigned long flags;
-  int i;
-
-  if (irq>=10 && irq <= 15)
-    {
-      if ( !(--q40_ablecount[irq]))
-       for (i=10,irq_disabled=0; i<=15; i++)
-         {
-           irq_disabled |= (q40_ablecount[irq] !=0);
-         }
-      if ( !irq_disabled )
-       {
-         save_flags(flags);
-         restore_flags(flags & (~0x700));
-       }
     }
-#endif
 }
 
 
@@ -404,19+503,12 @@ void q40_disable_irq (unsigned int irq)
   * Any driver should not attempt to sleep accross disable_irq !!
   */
 
-  if ( irq>=10 && irq<=15 ) /* the moderately bad case */
-    master_outb(0,EXT_ENABLE_REG);
-#if 0
-  unsigned long flags;
-
-  if (irq>=10 && irq <= 15)
+  if ( irq>=5 && irq<=15 ) 
     {
-      save_flags(flags);
-      restore_flags(flags | 0x200 );
-      irq_disabled=1;
-      q40_ablecount[irq]++;
+    master_outb(0,EXT_ENABLE_REG);
+      mext_disabled++;
+      if (mext_disabled>1) printk("disable_irq nesting count %d\n",mext_disabled);
     }
-#endif
 }
 
 unsigned long q40_probe_irq_on (void)
@@ -428,3+520,7 @@ int q40_probe_irq_off (unsigned long irqs)
 {
   return -1;
 }
+/*
+ * Local variables:
+ * compile-command: "m68k-linux-gcc -D__KERNEL__ -I/home/rz/lx/linux-2.2.6/include -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -pipe -fno-strength-reduce -ffixed-a2 -m68040   -c -o q40ints.o q40ints.c"
+ */
index 83e33e1..c2c0eb9 100644 (file)
@@ -49,11+49,28 @@ unsigned char amiga_vblank;
 unsigned char amiga_psfreq;
 struct amiga_hw_present amiga_hw_present;
 
-static const char *amiga_models[] = {
-    "A500", "A500+", "A600", "A1000", "A1200", "A2000", "A2500", "A3000",
-    "A3000T", "A3000+", "A4000", "A4000T", "CDTV", "CD32", "Draco"
+static const char s_a500[] __initdata = "A500";
+static const char s_a500p[] __initdata = "A500+";
+static const char s_a600[] __initdata = "A600";
+static const char s_a1000[] __initdata = "A1000";
+static const char s_a1200[] __initdata = "A1200";
+static const char s_a2000[] __initdata = "A2000";
+static const char s_a2500[] __initdata = "A2500";
+static const char s_a3000[] __initdata = "A3000";
+static const char s_a3000t[] __initdata = "A3000T";
+static const char s_a3000p[] __initdata = "A3000+";
+static const char s_a4000[] __initdata = "A4000";
+static const char s_a4000t[] __initdata = "A4000T";
+static const char s_cdtv[] __initdata = "CDTV";
+static const char s_cd32[] __initdata = "CD32";
+static const char s_draco[] __initdata = "Draco";
+static const char *amiga_models[] __initdata = {
+    s_a500, s_a500p, s_a600, s_a1000, s_a1200, s_a2000, s_a2500, s_a3000,
+    s_a3000t, s_a3000p, s_a4000, s_a4000t, s_cdtv, s_cd32, s_draco,
 };
 
+static char amiga_model_name[13] = "Amiga ";
+
 extern char m68k_debug_device[];
 
 static void amiga_sched_init(void (*handler)(int, void *, struct pt_regs *));
@@ -117,6+134,26 @@ static char amiga_sysrq_xlate[128] =
 
 extern void (*kd_mksound)(unsigned int, unsigned int);
 
+
+    /*
+     *  Motherboard Resources present in all Amiga models
+     */
+
+static struct resource mb_res[] = {
+    { "Ranger Memory", 0x00c00000, 0x00c7ffff },
+    { "CIA B", 0x00bfd000, 0x00bfdfff },
+    { "CIA A", 0x00bfe000, 0x00bfefff },
+    { "Custom I/O", 0x00dff000, 0x00dfffff },
+    { "Kickstart ROM", 0x00f80000, 0x00ffffff }
+};
+
+static struct resource rtc_resource = {
+    "A2000 RTC", 0x00dc0000, 0x00dcffff
+};
+
+static struct resource ram_resource[NUM_MEMINFO];
+
+
     /*
      *  Parse an Amiga-specific record in the bootinfo
      */
@@ -157,11+194,15 @@ int amiga_parse_bootinfo(const struct bi_record *record)
            break;
 
        case BI_AMIGA_AUTOCON:
-           if (zorro_num_autocon < ZORRO_NUM_AUTO)
-               memcpy(&zorro_autocon[zorro_num_autocon++],
-                      (const struct ConfigDev *)data,
-                      sizeof(struct ConfigDev));
-           else
+           if (zorro_num_autocon < ZORRO_NUM_AUTO) {
+               const struct ConfigDev *cd = (struct ConfigDev *)data;
+               struct zorro_dev *dev = &zorro_autocon[zorro_num_autocon++];
+               dev->rom = cd->cd_Rom;
+               dev->slotaddr = cd->cd_SlotAddr;
+               dev->slotsize = cd->cd_SlotSize;
+               dev->resource.start = (unsigned long)cd->cd_BoardAddr;
+               dev->resource.end = dev->resource.start+cd->cd_BoardSize-1;
+           } else
                printk("amiga_parse_bootinfo: too many AutoConfig devices\n");
            break;
 
@@ -188,8+229,10 @@ static void __init amiga_identify(void)
   memset(&amiga_hw_present, 0, sizeof(amiga_hw_present));
 
   printk("Amiga hardware found: ");
-  if (amiga_model >= AMI_500 && amiga_model <= AMI_DRACO)
+  if (amiga_model >= AMI_500 && amiga_model <= AMI_DRACO) {
     printk("[%s] ", amiga_models[amiga_model-AMI_500]);
+    strcat(amiga_model_name, amiga_models[amiga_model-AMI_500]);
+  }
 
   switch(amiga_model) {
   case AMI_UNKNOWN:
@@ -342,9+385,19 @@ static void __init amiga_identify(void)
 
 void __init config_amiga(void)
 {
+  int i;
+
   amiga_debug_init();
   amiga_identify();
 
+  /* Some APUS boxes may have PCI memory, but ... */
+  iomem_resource.name = "Memory";
+  request_resource(&iomem_resource, &ranger_resource);
+  request_resource(&iomem_resource, &ciab_resource);
+  request_resource(&iomem_resource, &ciaa_resource);
+  request_resource(&iomem_resource, &custom_chips_resource);
+  request_resource(&iomem_resource, &kickstart_resource);
+
   mach_sched_init      = amiga_sched_init;
   mach_keyb_init       = amiga_keyb_init;
   mach_kbdrate         = amiga_kbdrate;
@@ -362,9+415,12 @@ void __init config_amiga(void)
   mach_gettimeoffset   = amiga_gettimeoffset;
   if (AMIGAHW_PRESENT(A3000_CLK)){
     mach_gettod  = a3000_gettod;
+    rtc_resource.name[1] = '3';
+    request_resource(&iomem_resource, &rtc_resource);
   }
   else{ /* if (AMIGAHW_PRESENT(A2000_CLK)) */
     mach_gettod  = a2000_gettod;
+    request_resource(&iomem_resource, &rtc_resource);
   }
 
   mach_max_dma_address = 0xffffffff; /*
@@ -404,6+460,17 @@ void __init config_amiga(void)
   /* ensure that the DMA master bit is set */
   custom.dmacon = DMAF_SETCLR | DMAF_MASTER;
 
+  /* request all RAM */
+  for (i = 0; i < m68k_num_memory; i++) {
+    ram_resource[i].name =
+      (m68k_memory[i].addr >= 0x01000000) ? "32-bit Fast RAM" :
+      (m68k_memory[i].addr < 0x00c00000) ? "16-bit Fast RAM" :
+      "16-bit Slow RAM";
+    ram_resource[i].start = m68k_memory[i].addr;
+    ram_resource[i].end = m68k_memory[i].addr+m68k_memory[i].size-1;
+    request_resource(&iomem_resource, &ram_resource[i]);
+  }
+
   /* initialize chipram allocator */
   amiga_chip_init ();
 
@@ -437,6+504,8 @@ static void __init amiga_sched_init(void (*timer_routine)(int, void *,
 {
        jiffy_ticks = (amiga_eclock+HZ/2)/HZ;
 
+       if (!request_mem_region(CIAB_PHYSADDR+0x400, 0x200, "timer"))
+           printk("Cannot allocate ciab.ta{lo,hi}\n");
        ciab.cra &= 0xC0;   /* turn off timer A, continuous mode, from Eclk */
        ciab.talo = jiffy_ticks % 256;
        ciab.tahi = jiffy_ticks / 256;
@@ -840,9+909,7 @@ static void amiga_heartbeat(int on)
 
 static void amiga_get_model(char *model)
 {
-    strcpy(model, "Amiga ");
-    if (amiga_model >= AMI_500 && amiga_model <= AMI_DRACO)
-       strcat(model, amiga_models[amiga_model-AMI_500]);
+    strcpy(model, amiga_model_name);
 }
 
 
index 8876446..5aedc25 100644 (file)
 
 #include <linux/major.h>
 #include <linux/malloc.h>
+#include <linux/vmalloc.h>
 #include <linux/blk.h>
 #include <linux/init.h>
 #include <linux/module.h>
@@ -201,8+202,6 @@ z2_open( struct inode *inode, struct file *filp )
 #ifdef __powerpc__
                /* FIXME: ioremap doesn't build correct memory tables. */
                {
-                       extern void* vmalloc (unsigned long);
-                       extern void vfree (void*);
                        vfree(vmalloc (size));
                }
 
index 1136cc0..993f0f2 100644 (file)
@@ -131,6+131,9 @@ obj-$(CONFIG_AMIGA_BUILTIN_SERIAL) += amiserial.o
 obj-$(CONFIG_SX) += sx.o generic_serial.o
 obj-$(CONFIG_RIO) += rio/rio.o generic_serial.o
 obj-$(CONFIG_SH_SCI) += sh-sci.o generic_serial.o
+obj-$(CONFIG_SERIAL167) += serial167.o
+obj-$(CONFIG_MVME162_SCC) += generic_serial.o vme_scc.o
+obj-$(CONFIG_BVME6000_SCC) += generic_serial.o vme_scc.o
 
 ifeq ($(CONFIG_RIO),y)
   SUB_DIRS += rio
index b7b6c3c..f3eecc1 100644 (file)
 #include <linux/random.h>
 #include <linux/poll.h>
 #include <linux/init.h>
+#include <linux/ioport.h>
 #include <linux/logibusmouse.h>
 
 #include <asm/setup.h>
@@ -185,6+186,8 @@ static int __init amiga_mouse_init(void)
 {
        if (!MACH_IS_AMIGA || !AMIGAHW_PRESENT(AMI_MOUSE))
                return -ENODEV;
+       if (!request_mem_region(CUSTOM_PHYSADDR+10, 2, "amigamouse [Denise]"))
+               return -EBUSY;
 
        custom.joytest = 0;     /* reset counters */
 #if AMIGA_OLD_INT
@@ -201,6+204,7 @@ static int __init amiga_mouse_init(void)
 static void __exit amiga_mouse_exit(void)
 {
        unregister_busmouse(msedev);
+       release_mem_region(CUSTOM_PHYSADDR+10, 2);
 }
 
 module_init(amiga_mouse_init);
index 3496229..a7ccb1d 100644 (file)
  * Revision 1.36.1.4  1995/03/29  06:14:14  bentson
  * disambiguate between Cyclom-16Y and Cyclom-32Ye;
  *
+ * Changes:
+ *
  * 200 lines of changes record removed - RGH 11-10-95, starting work on
  * converting this to drive serial ports on mvme166 (cd2401).
+ *
+ * Arnaldo Carvalho de Melo <acme@conectiva.com.br> - 2000/08/25
+ * - get rid of verify_area
+ * - use get_user to access memory from userspace in set_threshold,
+ *   set_default_threshold and set_timeout
+ * - don't use the panic function in serial167_init
+ * - do resource release on failure on serial167_init
+ * - include missing restore_flags in mvme167_serial_console_setup
  */
 
 #include <linux/config.h>
 #include <asm/uaccess.h>
 #include <linux/init.h>
 
-#define cy_put_user    put_user
-
-static unsigned long cy_get_user(unsigned long *addr)
-{
-       unsigned long result = 0;
-       int error = get_user (result, addr);
-       if (error)
-               printk ("serial167: cy_get_user: error == %d\n", error);
-       return result;
-}
-
 #define SERIAL_PARANOIA_CHECK
 #undef  SERIAL_DEBUG_OPEN
 #undef  SERIAL_DEBUG_THROTTLE
@@ -1259,7+1258,11 @@ cy_write(struct tty_struct * tty, int from_user,
 
        if (from_user) {
            down(&tmp_buf_sem);
-           copy_from_user(tmp_buf, buf, c);
+           if (copy_from_user(tmp_buf, buf, c)) {
+               up(&tmp_buf_sem);
+               restore_flags(flags);
+               return 0;
+           }
            c = MIN(c, MIN(SERIAL_XMIT_SIZE - info->xmit_cnt - 1,
                       SERIAL_XMIT_SIZE - info->xmit_head));
            memcpy(info->xmit_buf + info->xmit_head, tmp_buf, c);
@@ -1435,8+1438,7 @@ get_serial_info(struct cyclades_port * info,
     tmp.close_delay = info->close_delay;
     tmp.custom_divisor = 0;     /*!!!*/
     tmp.hub6 = 0;               /*!!!*/
-    copy_to_user(retinfo,&tmp,sizeof(*retinfo));
-    return 0;
+    return copy_to_user(retinfo,&tmp,sizeof(*retinfo)) ? -EFAULT : 0;
 } /* get_serial_info */
 
 static int
@@ -1449,7+1451,8 @@ set_serial_info(struct cyclades_port * info,
 /* CP('s'); */
     if (!new_info)
            return -EFAULT;
-    copy_from_user(&new_serial,new_info,sizeof(new_serial));
+    if (copy_from_user(&new_serial,new_info,sizeof(new_serial)))
+           return -EFAULT;
     old_info = *info;
 
     if (!suser()) {
@@ -1503,8+1506,7 @@ get_modem_info(struct cyclades_port * info, unsigned int *value)
             | ((status  & CyDCD) ? TIOCM_CAR : 0)
             | ((status  & CyDSR) ? TIOCM_DSR : 0)
             | ((status  & CyCTS) ? TIOCM_CTS : 0);
-    cy_put_user(result,(unsigned int *) value);
-    return 0;
+    return put_user(result,(unsigned int *) value);
 } /* get_modem_info */
 
 static int
@@ -1514,8+1516,10 @@ set_modem_info(struct cyclades_port * info, unsigned int cmd,
   int channel;
   volatile unsigned char *base_addr = (u_char *)BASE_ADDR;
   unsigned long flags;
-  unsigned int arg = cy_get_user((unsigned long *) value);
-
+  unsigned int arg;
+         
+    if (get_user(arg, (unsigned long *) value))
+       return -EFAULT;
     channel = info->line;
 
     switch (cmd) {
@@ -1612,7+1616,8 @@ static int
 get_mon_info(struct cyclades_port * info, struct cyclades_monitor * mon)
 {
 
-   copy_to_user(mon, &info->mon, sizeof(struct cyclades_monitor));
+   if (copy_to_user(mon, &info->mon, sizeof(struct cyclades_monitor)))
+          return -EFAULT;
    info->mon.int_count  = 0;
    info->mon.char_count = 0;
    info->mon.char_max   = 0;
@@ -1621,13+1626,16 @@ get_mon_info(struct cyclades_port * info, struct cyclades_monitor * mon)
 }
 
 static int
-set_threshold(struct cyclades_port * info, unsigned long value)
+set_threshold(struct cyclades_port * info, unsigned long *arg)
 {
    volatile unsigned char *base_addr = (u_char *)BASE_ADDR;
+   unsigned long value;
    int channel;
    
-   channel = info->line;
+   if (get_user(value, arg))
+          return -EFAULT;
 
+   channel = info->line;
    info->cor4 &= ~CyREC_FIFO;
    info->cor4 |= value & CyREC_FIFO;
    base_addr[CyCOR4] = info->cor4;
@@ -1644,13+1652,17 @@ get_threshold(struct cyclades_port * info, unsigned long *value)
    channel = info->line;
 
    tmp = base_addr[CyCOR4] & CyREC_FIFO;
-   cy_put_user(tmp,value);
-   return 0;
+   return put_user(tmp,value);
 }
 
 static int
-set_default_threshold(struct cyclades_port * info, unsigned long value)
+set_default_threshold(struct cyclades_port * info, unsigned long *arg)
 {
+   unsigned long value;
+
+   if (get_user(value, arg))
+       return -EFAULT;
+
    info->default_threshold = value & 0x0f;
    return 0;
 }
@@ -1658,15+1670,18 @@ set_default_threshold(struct cyclades_port * info, unsigned long value)
 static int
 get_default_threshold(struct cyclades_port * info, unsigned long *value)
 {
-   cy_put_user(info->default_threshold,value);
-   return 0;
+   return put_user(info->default_threshold,value);
 }
 
 static int
-set_timeout(struct cyclades_port * info, unsigned long value)
+set_timeout(struct cyclades_port * info, unsigned long *arg)
 {
    volatile unsigned char *base_addr = (u_char *)BASE_ADDR;
    int channel;
+   unsigned long value;
+
+   if (get_user(value, arg))
+          return -EFAULT;
    
    channel = info->line;
 
@@ -1685,8+1700,7 @@ get_timeout(struct cyclades_port * info, unsigned long *value)
    channel = info->line;
 
    tmp = base_addr[CyRTPRL];
-   cy_put_user(tmp,value);
-   return 0;
+   return put_user(tmp,value);
 }
 
 static int
@@ -1699,15+1713,14 @@ set_default_timeout(struct cyclades_port * info, unsigned long value)
 static int
 get_default_timeout(struct cyclades_port * info, unsigned long *value)
 {
-   cy_put_user(info->default_timeout,value);
-   return 0;
+   return put_user(info->default_timeout,value);
 }
 
 static int
 cy_ioctl(struct tty_struct *tty, struct file * file,
             unsigned int cmd, unsigned long arg)
 {
-  int error;
+  unsigned long val;
   struct cyclades_port * info = (struct cyclades_port *)tty->driver_data;
   int ret_val = 0;
 
@@ -1717,57+1730,27 @@ cy_ioctl(struct tty_struct *tty, struct file * file,
 
     switch (cmd) {
         case CYGETMON:
-            error = verify_area(VERIFY_WRITE, (void *) arg
-                                ,sizeof(struct cyclades_monitor));
-            if (error){
-                ret_val = error;
-                break;
-            }
             ret_val = get_mon_info(info, (struct cyclades_monitor *)arg);
            break;
         case CYGETTHRESH:
-            error = verify_area(VERIFY_WRITE, (void *) arg
-                                ,sizeof(unsigned long));
-            if (error){
-                ret_val = error;
-                break;
-            }
            ret_val = get_threshold(info, (unsigned long *)arg);
            break;
         case CYSETTHRESH:
-            ret_val = set_threshold(info, (unsigned long)arg);
+            ret_val = set_threshold(info, (unsigned long *)arg);
            break;
         case CYGETDEFTHRESH:
-            error = verify_area(VERIFY_WRITE, (void *) arg
-                                ,sizeof(unsigned long));
-            if (error){
-                ret_val = error;
-                break;
-            }
            ret_val = get_default_threshold(info, (unsigned long *)arg);
            break;
         case CYSETDEFTHRESH:
-            ret_val = set_default_threshold(info, (unsigned long)arg);
+            ret_val = set_default_threshold(info, (unsigned long *)arg);
            break;
         case CYGETTIMEOUT:
-            error = verify_area(VERIFY_WRITE, (void *) arg
-                                ,sizeof(unsigned long));
-            if (error){
-                ret_val = error;
-                break;
-            }
            ret_val = get_timeout(info, (unsigned long *)arg);
            break;
         case CYSETTIMEOUT:
-            ret_val = set_timeout(info, (unsigned long)arg);
+            ret_val = set_timeout(info, (unsigned long *)arg);
            break;
         case CYGETDEFTIMEOUT:
-            error = verify_area(VERIFY_WRITE, (void *) arg
-                                ,sizeof(unsigned long));
-            if (error){
-                ret_val = error;
-                break;
-            }
            ret_val = get_default_timeout(info, (unsigned long *)arg);
            break;
         case CYSETDEFTIMEOUT:
@@ -1776,7+1759,7 @@ cy_ioctl(struct tty_struct *tty, struct file * file,
         case TCSBRK:    /* SVID version: non-zero arg --> no break */
            ret_val = tty_check_change(tty);
            if (ret_val)
-               return ret_val;
+                   break;
             tty_wait_until_sent(tty,0);
             if (!arg)
                 send_break(info, HZ/4); /* 1/4 second */
@@ -1784,7+1767,7 @@ cy_ioctl(struct tty_struct *tty, struct file * file,
         case TCSBRKP:   /* support for POSIX tcsendbreak() */
            ret_val = tty_check_change(tty);
            if (ret_val)
-               return ret_val;
+               break;
             tty_wait_until_sent(tty,0);
             send_break(info, arg ? arg*(HZ/10) : HZ/4);
             break;
@@ -1796,46+1779,20 @@ cy_ioctl(struct tty_struct *tty, struct file * file,
 
 /* The following commands are incompletely implemented!!! */
         case TIOCGSOFTCAR:
-            error = verify_area(VERIFY_WRITE, (void *) arg
-                                ,sizeof(unsigned int *));
-            if (error){
-                ret_val = error;
-                break;
-            }
-            cy_put_user(C_CLOCAL(tty) ? 1 : 0,
-                        (unsigned long *) arg);
+            ret_val = put_user(C_CLOCAL(tty) ? 1 : 0, (unsigned long *) arg);
             break;
         case TIOCSSOFTCAR:
-           error = verify_area(VERIFY_READ, (void *) arg
-                               ,sizeof(unsigned long *));
-            if (error){
-                ret_val = error;
-                break;
-            }
-
-            arg = cy_get_user((unsigned long *) arg);
+            ret_val = get_user(val, (unsigned long *) arg);
+           if (ret_val)
+                   break;
             tty->termios->c_cflag =
-                    ((tty->termios->c_cflag & ~CLOCAL) |
-                     (arg ? CLOCAL : 0));
+                    ((tty->termios->c_cflag & ~CLOCAL) | (val ? CLOCAL : 0));
             break;
         case TIOCMGET:
-            error = verify_area(VERIFY_WRITE, (void *) arg
-                                ,sizeof(unsigned int *));
-            if (error){
-                ret_val = error;
-                break;
-            }
             ret_val = get_modem_info(info, (unsigned int *) arg);
             break;
         case TIOCGSERIAL:
-            error = verify_area(VERIFY_WRITE, (void *) arg
-                                ,sizeof(struct serial_struct));
-            if (error){
-                ret_val = error;
-                break;
-            }
-            ret_val = get_serial_info(info,
-                                   (struct serial_struct *) arg);
+            ret_val = get_serial_info(info, (struct serial_struct *) arg);
             break;
         case TIOCSSERIAL:
             ret_val = set_serial_info(info,
@@ -2288,6+2245,7 @@ mvme167_serial_console_setup(int cflag)
 
         my_udelay(20000L);     /* Allow time for any active o/p to complete */
         if(base_addr[CyCCR] != 0x00){
+            restore_flags(flags);
             /* printk(" chip is never idle (CCR != 0)\n"); */
             return;
         }
@@ -2296,6+2254,7 @@ mvme167_serial_console_setup(int cflag)
         my_udelay(1000L);
 
         if(base_addr[CyGFRCR] == 0x00){
+            restore_flags(flags);
             /* printk(" chip is not responding (GFRCR stayed 0)\n"); */
             return;
         }
@@ -2384,6+2343,7 @@ int
 serial167_init(void)
 {
   struct cyclades_port *info;
+  int ret = 0;
   int good_ports = 0;
   int port_num = 0;
   int index;
@@ -2456,10+2416,16 @@ scrn[1] = '\0';
     cy_callout_driver.major = TTYAUX_MAJOR;
     cy_callout_driver.subtype = SERIAL_TYPE_CALLOUT;
 
-    if (tty_register_driver(&cy_serial_driver))
-           panic("Couldn't register Cyclom serial driver\n");
-    if (tty_register_driver(&cy_callout_driver))
-           panic("Couldn't register Cyclom callout driver\n");
+    ret = tty_register_driver(&cy_serial_driver);
+    if (ret) {
+           printk(KERN_ERR "Couldn't register MVME166/7 serial driver\n");
+           return ret;
+    }
+    ret = tty_register_driver(&cy_callout_driver);
+    if (ret) {
+           printk(KERN_ERR "Couldn't register MVME166/7 callout driver\n");
+           goto cleanup_serial_driver;
+    }
 
     init_bh(CYCLADES_BH, do_cyclades_bh);
 
@@ -2529,16+2495,32 @@ scrn[1] = '\0';
 #ifdef CONFIG_REMOTE_DEBUG
     debug_setup();
 #endif
-    if (request_irq (MVME167_IRQ_SER_ERR, cd2401_rxerr_interrupt, 0,
-                               "cd2401_errors", cd2401_rxerr_interrupt) ||
-       request_irq (MVME167_IRQ_SER_MODEM, cd2401_modem_interrupt, 0,
-                               "cd2401_modem", cd2401_modem_interrupt) ||
-       request_irq (MVME167_IRQ_SER_TX, cd2401_tx_interrupt, 0,
-                               "cd2401_txints", cd2401_tx_interrupt) ||
-       request_irq (MVME167_IRQ_SER_RX, cd2401_rx_interrupt, 0,
-                               "cd2401_rxints", cd2401_rx_interrupt))
-    {
-       panic ("Couldn't get serial IRQs");
+    ret = request_irq(MVME167_IRQ_SER_ERR, cd2401_rxerr_interrupt, 0,
+                               "cd2401_errors", cd2401_rxerr_interrupt);
+    if (ret) {
+           printk(KERN_ERR "Could't get cd2401_errors IRQ");
+           goto cleanup_callout_driver;
+    }
+
+    ret = request_irq(MVME167_IRQ_SER_MODEM, cd2401_modem_interrupt, 0,
+                               "cd2401_modem", cd2401_modem_interrupt);
+    if (ret) {
+           printk(KERN_ERR "Could't get cd2401_modem IRQ");
+           goto cleanup_irq_cd2401_errors;
+    }
+
+    ret = request_irq(MVME167_IRQ_SER_TX, cd2401_tx_interrupt, 0,
+                               "cd2401_txints", cd2401_tx_interrupt);
+    if (ret) {
+           printk(KERN_ERR "Could't get cd2401_txints IRQ");
+           goto cleanup_irq_cd2401_modem;
+    }
+
+    ret = request_irq(MVME167_IRQ_SER_RX, cd2401_rx_interrupt, 0,
+                               "cd2401_rxints", cd2401_rx_interrupt);
+    if (ret) {
+           printk(KERN_ERR "Could't get cd2401_rxints IRQ");
+           goto cleanup_irq_cd2401_txints;
     }
 
     /* Now we have registered the interrupt handlers, allow the interrupts */
@@ -2550,6+2532,19 @@ scrn[1] = '\0';
     pcc2chip[PccIMLR] = 3;                     /* Allow PCC2 ints above 3!? */
 
     return 0;
+cleanup_irq_cd2401_txints:
+    free_irq(MVME167_IRQ_SER_TX, cd2401_tx_interrupt);
+cleanup_irq_cd2401_modem:
+    free_irq(MVME167_IRQ_SER_MODEM, cd2401_modem_interrupt);
+cleanup_irq_cd2401_errors:
+    free_irq(MVME167_IRQ_SER_ERR, cd2401_rxerr_interrupt);
+cleanup_callout_driver:
+    if (tty_unregister_driver(&cy_callout_driver))
+           printk(KERN_ERR "Couldn't unregister MVME166/7 callout driver\n");
+cleanup_serial_driver:
+    if (tty_unregister_driver(&cy_serial_driver))
+           printk(KERN_ERR "Couldn't unregister MVME166/7 serial driver\n");
+    return ret;
 } /* serial167_init */
 
 
index ecf7cf0..d6bc4e6 100644 (file)
 #include <asm/bvme6000hw.h>
 #endif
 
-#include "generic_serial.h"
+#include <linux/generic_serial.h>
 #include "scc.h"
 
 
@@ -75,7+75,7 @@ static void scc_disable_rx_interrupts(void * ptr);
 static void scc_enable_rx_interrupts(void * ptr);
 static int  scc_get_CD(void * ptr);
 static void scc_shutdown_port(void * ptr);
-static void scc_set_real_termios(void  *ptr);
+static int scc_set_real_termios(void  *ptr);
 static void scc_hungup(void  *ptr);
 static void scc_close(void  *ptr);
 static int scc_chars_in_buffer(void * ptr);
@@ -688,7+688,7 @@ static void scc_shutdown_port(void *ptr)
 }
 
 
-static void scc_set_real_termios (void *ptr)
+static int scc_set_real_termios (void *ptr)
 {
        /* the SCC has char sizes 5,7,6,8 in that order! */
        static int chsize_map[4] = { 0, 2, 1, 3 };
@@ -697,12+697,12 @@ static void scc_set_real_termios (void *ptr)
        struct scc_port *port = ptr;
        SCC_ACCESS_INIT(port);
 
-       if (!port->gs.tty || !port->gs.tty->termios) return;
+       if (!port->gs.tty || !port->gs.tty->termios) return 0;
 
        channel = port->channel;
 
        if (channel == CHANNEL_A)
-               return;         /* Settings controlled by boot PROM */
+               return 0;               /* Settings controlled by boot PROM */
 
        cflag  = port->gs.tty->termios->c_cflag;
        baud = port->gs.baud;
@@ -714,13+714,13 @@ static void scc_set_real_termios (void *ptr)
                cli();
                SCCmod(TX_CTRL_REG, ~TCR_DTR, 0);
                restore_flags(flags);
-               return;
+               return 0;
        }
        else if ((MACH_IS_MVME16x && (baud < 50 || baud > 38400)) ||
                 (MACH_IS_MVME147 && (baud < 50 || baud > 19200)) ||
                 (MACH_IS_BVME6000 &&(baud < 50 || baud > 76800))) {
                printk("SCC: Bad speed requested, %d\n", baud);
-               return;
+               return 0;
        }
 
        if (cflag & CLOCAL)
@@ -769,6+769,8 @@ static void scc_set_real_termios (void *ptr)
        SCCmod(DPLL_CTRL_REG, 0xff, DCR_BRG_ENAB);
 
        restore_flags(flags);
+
+       return 0;
 }
 
 
index 56f7ac4..a076ef7 100644 (file)
@@ -1,5+1,5 @@
 #
-# $Id: Makefile,v 1.21 2000/11/01 14:05:02 calle Exp $
+# $Id: Makefile,v 1.22 2000/11/23 20:45:14 kai Exp $
 #
 # Makefile for the CAPI and AVM-B1 device drivers.
 #
 # parent makes..
 #
 # $Log: Makefile,v $
+# Revision 1.22  2000/11/23 20:45:14  kai
+# fixed module_init/exit stuff
+# Note: compiled-in kernel doesn't work pre 2.2.18 anymore.
+#
 # Revision 1.21  2000/11/01 14:05:02  calle
 # - use module_init/module_exit from linux/init.h.
 # - all static struct variables are initialized with "membername:" now.
@@ -150,19+154,19 @@ ifeq ($(CONFIG_ISDN_CAPI),y)
   OX_OBJS  += kcapi.o
   O_OBJS   += capi.o
   ifdef CONFIG_ISDN_CAPIFS
-       OX_OBJS   += capifs.o
+       OX_OBJS   += capifs.o
   endif
   ifdef CONFIG_ISDN_DRV_AVMB1_B1ISA
-       O_OBJS   += b1isa.o
+       O_OBJS   += b1isa.o
   endif
   ifdef CONFIG_ISDN_DRV_AVMB1_B1PCI
-       O_OBJS  += b1pci.o
+       O_OBJS  += b1pci.o
   endif
   ifdef CONFIG_ISDN_DRV_AVMB1_T1ISA
-       O_OBJS   += t1isa.o
+       O_OBJS   += t1isa.o
   endif
   ifdef CONFIG_ISDN_DRV_AVMB1_B1PCMCIA
-       OX_OBJS   += b1pcmcia.o
+       OX_OBJS   += b1pcmcia.o
        ifeq ($(CONFIG_HOTPLUG),y)
                ifneq ($(CONFIG_PCMCIA),n)
                        M_OBJS   += avm_cs.o
@@ -170,44+174,44 @@ ifeq ($(CONFIG_ISDN_CAPI),y)
        endif
   endif
   ifdef CONFIG_ISDN_DRV_AVMB1_T1PCI
-       O_OBJS   += t1pci.o
+       O_OBJS   += t1pci.o
   endif
   ifdef CONFIG_ISDN_DRV_AVMB1_C4
-       O_OBJS   += c4.o
+       O_OBJS   += c4.o
   endif
   OX_OBJS  += capiutil.o capidrv.o b1.o b1dma.o
 else
   ifeq ($(CONFIG_ISDN_CAPI),m)
-       O_TARGET += kernelcapi.o
-       OX_OBJS  += kcapi.o
-       M_OBJS   += capi.o kernelcapi.o
-       ifdef CONFIG_ISDN_CAPIFS
-               MX_OBJS   += capifs.o
-       endif
-       ifdef CONFIG_ISDN_DRV_AVMB1_B1ISA
-               M_OBJS   += b1isa.o
-       endif
-       ifdef CONFIG_ISDN_DRV_AVMB1_B1PCI
-               M_OBJS  += b1pci.o
-       endif
-       ifdef CONFIG_ISDN_DRV_AVMB1_T1ISA
-               M_OBJS   += t1isa.o
-       endif
-       ifdef CONFIG_ISDN_DRV_AVMB1_B1PCMCIA
-               MX_OBJS  += b1pcmcia.o
+       O_TARGET += kernelcapi.o
+       OX_OBJS  += kcapi.o
+       M_OBJS   += capi.o kernelcapi.o
+       ifdef CONFIG_ISDN_CAPIFS
+               MX_OBJS   += capifs.o
+       endif
+       ifdef CONFIG_ISDN_DRV_AVMB1_B1ISA
+               M_OBJS   += b1isa.o
+       endif
+       ifdef CONFIG_ISDN_DRV_AVMB1_B1PCI
+               M_OBJS  += b1pci.o
+       endif
+       ifdef CONFIG_ISDN_DRV_AVMB1_T1ISA
+               M_OBJS   += t1isa.o
+       endif
+       ifdef CONFIG_ISDN_DRV_AVMB1_B1PCMCIA
+               MX_OBJS  += b1pcmcia.o
                ifeq ($(CONFIG_HOTPLUG),y)
                        ifneq ($(CONFIG_PCMCIA),n)
-                               M_OBJS   += avm_cs.o
+                               M_OBJS   += avm_cs.o
                        endif
                endif
-       endif
-       ifdef CONFIG_ISDN_DRV_AVMB1_T1PCI
-               M_OBJS   += t1pci.o
-       endif
-       ifdef CONFIG_ISDN_DRV_AVMB1_C4
-               M_OBJS   += c4.o
-       endif
-       MX_OBJS  += capiutil.o capidrv.o b1.o b1dma.o
+       endif
+       ifdef CONFIG_ISDN_DRV_AVMB1_T1PCI
+               M_OBJS   += t1pci.o
+       endif
+       ifdef CONFIG_ISDN_DRV_AVMB1_C4
+               M_OBJS   += c4.o
+       endif
+       MX_OBJS  += capiutil.o capidrv.o b1.o b1dma.o
   endif
 endif
 
index f1538b4..3b184c5 100644 (file)
@@ -145,9+145,7 @@ static dev_link_t *avmcs_attach(void)
     /* The io structure describes IO port mapping */
     link->io.NumPorts1 = 16;
     link->io.Attributes1 = IO_DATA_PATH_WIDTH_8;
-    link->io.NumPorts2 = 16;
-    link->io.Attributes2 = IO_DATA_PATH_WIDTH_16;
-    link->io.IOAddrLines = 5;
+    link->io.NumPorts2 = 0;
 
     /* Interrupt setup */
     link->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
@@ -329,9+327,10 @@ static void avmcs_config(dev_link_t *link)
                link->conf.ConfigIndex = cf->index;
                link->io.BasePort1 = cf->io.win[0].base;
                link->io.NumPorts1 = cf->io.win[0].len;
+               link->io.NumPorts2 = 0;
                 printk(KERN_INFO "avm_cs: testing i/o %#x-%#x\n",
                        link->io.BasePort1,
-                       link->io.BasePort1+link->io.NumPorts1);
+                       link->io.BasePort1+link->io.NumPorts1-1);
                i = CardServices(RequestIO, link->handle, &link->io);
                if (i == CS_SUCCESS) goto found_port;
            }
@@ -504,7+503,7 @@ static int avmcs_event(event_t event, int priority,
 
 /*====================================================================*/
 
-int init_module(void)
+static int __init avmcs_init(void)
 {
     servinfo_t serv;
     CardServices(GetCardServicesInfo, &serv);
@@ -517,7+516,7 @@ int init_module(void)
     return 0;
 }
 
-void cleanup_module(void)
+static void __exit avmcs_exit(void)
 {
     unregister_pccard_driver(&dev_info);
     while (dev_list != NULL) {
@@ -526,3+525,6 @@ void cleanup_module(void)
        avmcs_detach(dev_list);
     }
 }
+
+module_init(avmcs_init);
+module_exit(avmcs_exit);
index 747b5ea..b55573a 100644 (file)
 #include <linux/ioport.h>
 #include <linux/capi.h>
 #include <asm/io.h>
+#include <linux/init.h>
 #include <asm/uaccess.h>
 #include <linux/netdevice.h>
 #include "capilli.h"
 #include "capicmd.h"
 #include "capiutil.h"
 
-static char *revision = "$Revision: 1.16 $";
+static char *revision = "$Revision: 1.20 $";
 
 /* ------------------------------------------------------------- */
 
@@ -728,12+729,7 @@ EXPORT_SYMBOL(b1_handle_interrupt);
 
 EXPORT_SYMBOL(b1ctl_read_proc);
 
-#ifdef MODULE
-#define b1_init init_module
-void cleanup_module(void);
-#endif
-
-int b1_init(void)
+static int __init b1_init(void)
 {
        char *p;
        char rev[10];
@@ -750,8+746,9 @@ int b1_init(void)
        return 0;
 }
 
-#ifdef MODULE
-void cleanup_module(void)
+static void __exit b1_exit(void)
 {
 }
-#endif
+
+module_init(b1_init);
+module_exit(b1_exit);
index 6cdc6c5..8d8030c 100644 (file)
 #include <linux/ioport.h>
 #include <linux/capi.h>
 #include <asm/io.h>
+#include <linux/init.h>
 #include <asm/uaccess.h>
 #include <linux/netdevice.h>
 #include "capilli.h"
 #include "capicmd.h"
 #include "capiutil.h"
 
-static char *revision = "$Revision: 1.9 $";
+static char *revision = "$Revision: 1.11 $";
 
 /* ------------------------------------------------------------- */
 
@@ -978,11+979,6 @@ EXPORT_SYMBOL(b1dma_release_appl);
 EXPORT_SYMBOL(b1dma_send_message);
 EXPORT_SYMBOL(b1dmactl_read_proc);
 
-#ifdef MODULE
-#define b1dma_init init_module
-void cleanup_module(void);
-#endif
-
 int b1dma_init(void)
 {
        char *p;
@@ -1000,8+996,9 @@ int b1dma_init(void)
        return 0;
 }
 
-#ifdef MODULE
-void cleanup_module(void)
+void b1dma_exit(void)
 {
 }
-#endif
+
+module_init(b1dma_init);
+module_exit(b1dma_exit);
index 486a0f2..07301a3 100644 (file)
 #include <linux/interrupt.h>
 #include <linux/ioport.h>
 #include <linux/capi.h>
+#include <linux/init.h>
 #include <asm/io.h>
 #include "capicmd.h"
 #include "capiutil.h"
 #include "capilli.h"
 #include "avmcard.h"
 
-static char *revision = "$Revision: 1.8 $";
+static char *revision = "$Revision: 1.10 $";
 
 /* ------------------------------------------------------------- */
 
@@ -260,12+261,7 @@ static struct capi_driver b1isa_driver = {
     add_card: b1isa_add_card,
 };
 
-#ifdef MODULE
-#define b1isa_init init_module
-void cleanup_module(void);
-#endif
-
-int b1isa_init(void)
+static int __init b1isa_init(void)
 {
        struct capi_driver *driver = &b1isa_driver;
        char *p;
@@ -292,9+288,10 @@ int b1isa_init(void)
        return retval;
 }
 
-#ifdef MODULE
-void cleanup_module(void)
+static void __exit b1isa_exit(void)
 {
     detach_capi_driver(&b1isa_driver);
 }
-#endif
+
+module_init(b1isa_init);
+module_exit(b1isa_exit);
index 27af2e2..e86dfdb 100644 (file)
 #include <linux/pci.h>
 #include <linux/capi.h>
 #include <asm/io.h>
+#include <linux/init.h>
 #include "capicmd.h"
 #include "capiutil.h"
 #include "capilli.h"
 #include "avmcard.h"
 
-static char *revision = "$Revision: 1.27 $";
+static char *revision = "$Revision: 1.29 $";
 
 /* ------------------------------------------------------------- */
 
@@ -481,11+482,6 @@ static struct capi_driver b1pciv4_driver = {
 
 #endif /* CONFIG_ISDN_DRV_AVMB1_B1PCIV4 */
 
-#ifdef MODULE
-#define b1pci_init init_module
-void cleanup_module(void);
-#endif
-
 static int ncards = 0;
 
 static int add_card(struct pci_dev *dev)
@@ -548,7+544,7 @@ static int add_card(struct pci_dev *dev)
        return retval;
 }
 
-int b1pci_init(void)
+static int __init b1pci_init(void)
 {
        struct capi_driver *driver = &b1pci_driver;
 #ifdef CONFIG_ISDN_DRV_AVMB1_B1PCIV4
@@ -640,12+636,13 @@ int b1pci_init(void)
 #endif
 }
 
-#ifdef MODULE
-void cleanup_module(void)
+static void __exit b1pci_exit(void)
 {
     detach_capi_driver(&b1pci_driver);
 #ifdef CONFIG_ISDN_DRV_AVMB1_B1PCIV4
     detach_capi_driver(&b1pciv4_driver);
 #endif
 }
-#endif
+
+module_init(b1pci_init);
+module_exit(b1pci_exit);
index 20b8515..1bb50b0 100644 (file)
 #include <linux/mm.h>
 #include <linux/interrupt.h>
 #include <linux/ioport.h>
+#include <linux/init.h>
 #include <asm/io.h>
 #include <linux/capi.h>
 #include <linux/b1pcmcia.h>
 #include "capilli.h"
 #include "avmcard.h"
 
-static char *revision = "$Revision: 1.10 $";
+static char *revision = "$Revision: 1.12 $";
 
 /* ------------------------------------------------------------- */
 
@@ -300,12+301,7 @@ EXPORT_SYMBOL(b1pcmcia_delcard);
 
 /* ------------------------------------------------------------- */
 
-#ifdef MODULE
-#define b1pcmcia_init init_module
-void cleanup_module(void);
-#endif
-
-int b1pcmcia_init(void)
+static int __init b1pcmcia_init(void)
 {
        struct capi_driver *driver = &b1pcmcia_driver;
        char *p;
@@ -332,9+328,10 @@ int b1pcmcia_init(void)
        return retval;
 }
 
-#ifdef MODULE
-void cleanup_module(void)
+static void __exit b1pcmcia_exit(void)
 {
     detach_capi_driver(&b1pcmcia_driver);
 }
-#endif
+
+module_init(b1pcmcia_init);
+module_exit(b1pcmcia_exit);
index 7f13400..67deb1d 100644 (file)
 #include <linux/ioport.h>
 #include <linux/pci.h>
 #include <linux/capi.h>
+#include <linux/init.h>
 #include <asm/io.h>
 #include <asm/uaccess.h>
 #include <linux/netdevice.h>
 #include "capilli.h"
 #include "avmcard.h"
 
-static char *revision = "$Revision: 1.18 $";
+static char *revision = "$Revision: 1.20 $";
 
 #undef CONFIG_C4_DEBUG
 #undef CONFIG_C4_POLLDEBUG
@@ -1327,15+1328,9 @@ static struct capi_driver c4_driver = {
 };
 
 
-#ifdef MODULE
-#define c4_init init_module
-void cleanup_module(void);
-#endif
-
-
 static int ncards = 0;
 
-int c4_init(void)
+static int __init c4_init(void)
 {
        struct capi_driver *driver = &c4_driver;
        struct pci_dev *dev = NULL;
@@ -1419,9+1414,10 @@ int c4_init(void)
 #endif
 }
 
-#ifdef MODULE
-void cleanup_module(void)
+static void __exit c4_exit(void)
 {
     detach_capi_driver(&c4_driver);
 }
-#endif
+
+module_init(c4_init);
+module_exit(c4_exit);
index 69385b4..22f6344 100644 (file)
 /*
- * $Id: capi.c,v 1.39 2000/07/24 13:42:50 calle Exp $
+ * $Id: capi.c,v 1.44 2000/11/25 17:00:59 kai Exp $
  *
  * CAPI 2.0 Interface for Linux
  *
  * Copyright 1996 by Carsten Paeth (calle@calle.in-berlin.de)
  *
  * $Log: capi.c,v $
+ * Revision 1.44  2000/11/25 17:00:59  kai
+ * compatibility cleanup - final part for the time being
+ *
+ * Revision 1.43  2000/11/23 20:45:14  kai
+ * fixed module_init/exit stuff
+ * Note: compiled-in kernel doesn't work pre 2.2.18 anymore.
+ *
+ * Revision 1.42  2000/11/19 17:03:55  kai
+ * compatibility cleanup - part 5
+ *
+ * Revision 1.41  2000/11/01 14:05:02  calle
+ * - use module_init/module_exit from linux/init.h.
+ * - all static struct variables are initialized with "membername:" now.
+ * - avm_cs.c, let it work with newer pcmcia-cs.
+ *
+ * Revision 1.40  2000/10/24 15:15:04  calle
+ * Workaround: pppd calls restoretty before reseting the ldisc and
+ *   ldisc "ppp_sync" didn't support this. So we call n_tty_ioctl
+ *   in the driver ioctl function. (remember: driver ioctl function is
+ *   only called if ldisc ioctl function did not handle the call)
+ *
  * Revision 1.39  2000/07/24 13:42:50  calle
  * - lock_kernel/unlock_kernel for _release functions. (from 2.4)
  *
 #include <linux/poll.h>
 #include <linux/capi.h>
 #include <linux/kernelcapi.h>
+#include <linux/init.h>
 #include <linux/devfs_fs_kernel.h>
 #include <linux/init.h>
 #include "capiutil.h"
 #endif /* CONFIG_ISDN_CAPI_MIDDLEWARE */
 #include <linux/slab.h>
 
-static char *revision = "$Revision: 1.39 $";
+static char *revision = "$Revision: 1.44 $";
 
 MODULE_AUTHOR("Carsten Paeth (calle@calle.in-berlin.de)");
 
@@ -1667,7+1689,13 @@ int capinc_tty_chars_in_buffer(struct tty_struct *tty)
 int capinc_tty_ioctl(struct tty_struct *tty, struct file * file,
                    unsigned int cmd, unsigned long arg)
 {
-       return -ENOIOCTLCMD;
+       int error = 0;
+       switch (cmd) {
+       default:
+               error = n_tty_ioctl (tty, file, cmd, arg);
+               break;
+       }
+       return error;
 }
 
 void capinc_tty_set_termios(struct tty_struct *tty, struct termios * old)
@@ -1960,7+1988,7 @@ static void __exit proc_exit(void)
 /* -------- init function and module interface ---------------------- */
 
 
-static void alloc_exit(void)
+static void __exit alloc_exit(void)
 {
        if (capidev_cachep) {
                (void)kmem_cache_destroy(capidev_cachep);
@@ -2060,7+2088,7 @@ static struct capi_interface_user cuser = {
 
 static char rev[10];
 
-int __init capi_init(void)
+static int __init capi_init(void)
 {
        char *p;
 
@@ -2173,8+2201,5 @@ static void __exit capi_exit(void)
        printk(KERN_NOTICE "capi: Rev%s: unloaded\n", rev);
 }
 
-#ifdef MODULE
 module_init(capi_init);
-#endif
 module_exit(capi_exit);
-
index 6f1d9a4..7221784 100644 (file)
 /*
- * $Id: capidev.h,v 1.5 2000/03/03 15:50:42 calle Exp $
+ * $Id: capidev.h,v 1.6 2000/11/25 17:00:59 kai Exp $
  *
  * CAPI 2.0 Interface for Linux
  *
  * (c) Copyright 1996 by Carsten Paeth (calle@calle.in-berlin.de)
  *
  * $Log: capidev.h,v $
+ * Revision 1.6  2000/11/25 17:00:59  kai
+ * compatibility cleanup - final part for the time being
+ *
  * Revision 1.5  2000/03/03 15:50:42  calle
  * - kernel CAPI:
  *   - Changed parameter "param" in capi_signal from __u32 to void *.
index e512c86..24eeb37 100644 (file)
 /*
- * $Id: capidrv.c,v 1.36 2000/06/26 15:13:41 keil Exp $
+ * $Id: capidrv.c,v 1.39 2000/11/23 20:45:14 kai Exp $
  *
  * ISDN4Linux Driver, using capi20 interface (kernelcapi)
  *
  * Copyright 1997 by Carsten Paeth (calle@calle.in-berlin.de)
  *
  * $Log: capidrv.c,v $
+ * Revision 1.39  2000/11/23 20:45:14  kai
+ * fixed module_init/exit stuff
+ * Note: compiled-in kernel doesn't work pre 2.2.18 anymore.
+ *
+ * Revision 1.38  2000/11/14 08:43:07  calle
+ * Bugfix for v110. Connectparamters where setup for sync ...
+ *
+ * Revision 1.37  2000/11/01 14:05:02  calle
+ * - use module_init/module_exit from linux/init.h.
+ * - all static struct variables are initialized with "membername:" now.
+ * - avm_cs.c, let it work with newer pcmcia-cs.
+ *
  * Revision 1.36  2000/06/26 15:13:41  keil
  * features should be or'ed
  *
 #include "capicmd.h"
 #include "capidrv.h"
 
-static char *revision = "$Revision: 1.36 $";
+static char *revision = "$Revision: 1.39 $";
 static int debugmode = 0;
 
 MODULE_AUTHOR("Carsten Paeth <calle@calle.in-berlin.de>");
@@ -2468,7+2480,7 @@ static struct capi_interface_user cuser = {
        callback: lower_callback
 };
 
-int __init capidrv_init(void)
+static int __init capidrv_init(void)
 {
        struct capi_register_params rparam;
        capi_profile profile;
@@ -2550,8+2562,5 @@ static void __exit capidrv_exit(void)
        printk(KERN_NOTICE "capidrv: Rev%s: unloaded\n", rev);
 }
 
-#ifdef MODULE
 module_init(capidrv_init);
-#endif
 module_exit(capidrv_exit);
-
index b932c17..9b64c9a 100644 (file)
 
 MODULE_AUTHOR("Carsten Paeth <calle@calle.de>");
 
-static char *revision = "$Revision: 1.10 $";
+static char *revision = "$Revision: 1.14 $";
 
 struct capifs_ncci {
        struct inode *inode;
@@ -558,7+558,7 @@ void capifs_free_ncci(char type, unsigned int num)
        }
 }
 
-int __init capifs_init(void)
+static int __init capifs_init(void)
 {
        char rev[10];
        char *p;
@@ -587,7+587,7 @@ int __init capifs_init(void)
        return 0;
 }
 
-void capifs_exit(void)
+static void __exit capifs_exit(void)
 {
        unregister_filesystem(&capifs_fs_type);
 }
@@ -595,16+595,5 @@ void capifs_exit(void)
 EXPORT_SYMBOL(capifs_new_ncci);
 EXPORT_SYMBOL(capifs_free_ncci);
 
-#ifdef MODULE
-
-int init_module(void)
-{
-       return capifs_init();
-}
-
-void cleanup_module(void)
-{
-       capifs_exit();
-}
-
-#endif
+module_init(capifs_init);
+module_exit(capifs_exit);
index 6f10025..2ed1ec1 100644 (file)
@@ -1,5+1,5 @@
 /*
- * $Id: capiutil.c,v 1.11 2000/03/03 15:50:42 calle Exp $
+ * $Id: capiutil.c,v 1.13 2000/11/23 20:45:14 kai Exp $
  *
  * CAPI 2.0 convert capi message to capi message struct
  *
@@ -7,6+7,15 @@
  * Rewritten for Linux 1996 by Carsten Paeth (calle@calle.in-berlin.de)
  *
  * $Log: capiutil.c,v $
+ * Revision 1.13  2000/11/23 20:45:14  kai
+ * fixed module_init/exit stuff
+ * Note: compiled-in kernel doesn't work pre 2.2.18 anymore.
+ *
+ * Revision 1.12  2000/11/01 14:05:02  calle
+ * - use module_init/module_exit from linux/init.h.
+ * - all static struct variables are initialized with "membername:" now.
+ * - avm_cs.c, let it work with newer pcmcia-cs.
+ *
  * Revision 1.11  2000/03/03 15:50:42  calle
  * - kernel CAPI:
  *   - Changed parameter "param" in capi_signal from __u32 to void *.
 #include <linux/stddef.h>
 #include <linux/kernel.h>
 #include <linux/mm.h>
+#include <linux/init.h>
 #include <asm/segment.h>
 #include <linux/config.h>
 
@@ -978,7+988,6 @@ char *capi_cmsg2str(_cmsg * cmsg)
        return buf;
 }
 
-
 EXPORT_SYMBOL(capi_cmsg2message);
 EXPORT_SYMBOL(capi_message2cmsg);
 EXPORT_SYMBOL(capi_cmsg_header);
@@ -987,15+996,14 @@ EXPORT_SYMBOL(capi_cmsg2str);
 EXPORT_SYMBOL(capi_message2str);
 EXPORT_SYMBOL(capi_info2str);
 
-#ifdef MODULE
-
-int init_module(void)
+static int __init capiutil_init(void)
 {
        return 0;
 }
 
-void cleanup_module(void)
+static void __exit capiutil_exit(void)
 {
 }
 
-#endif
+module_init(capiutil_init);
+module_exit(capiutil_exit);
index fd18bf9..adbaf98 100644 (file)
 #include <linux/capi.h>
 #include <linux/kernelcapi.h>
 #include <linux/locks.h>
+#include <linux/init.h>
 #include <asm/uaccess.h>
 #include "capicmd.h"
 #include "capiutil.h"
 #include <linux/b1lli.h>
 #endif
 
-static char *revision = "$Revision: 1.18 $";
+static char *revision = "$Revision: 1.21 $";
 
 /* ------------------------------------------------------------- */
 
@@ -1724,36+1725,11 @@ EXPORT_SYMBOL(detach_capi_interface);
 EXPORT_SYMBOL(attach_capi_driver);
 EXPORT_SYMBOL(detach_capi_driver);
 
-#ifndef MODULE
-#ifdef CONFIG_ISDN_DRV_AVMB1_B1ISA
-extern int b1isa_init(void);
-#endif
-#ifdef CONFIG_ISDN_DRV_AVMB1_B1PCI
-extern int b1pci_init(void);
-#endif
-#ifdef CONFIG_ISDN_DRV_AVMB1_T1ISA
-extern int t1isa_init(void);
-#endif
-#ifdef CONFIG_ISDN_DRV_AVMB1_B1PCMCIA
-extern int b1pcmcia_init(void);
-#endif
-#ifdef CONFIG_ISDN_DRV_AVMB1_T1PCI
-extern int t1pci_init(void);
-#endif
-#ifdef CONFIG_ISDN_DRV_AVMB1_C4
-extern int c4_init(void);
-#endif
-#endif
-
 /*
  * init / exit functions
  */
 
-#ifdef MODULE
-#define kcapi_init init_module
-#endif
-
-int kcapi_init(void)
+static int __init kcapi_init(void)
 {
        char *p;
        char rev[10];
@@ -1761,7+1737,6 @@ int kcapi_init(void)
        MOD_INC_USE_COUNT;
 
        skb_queue_head_init(&recv_queue);
-       /* init_bh(CAPI_BH, do_capi_bh); */
 
        tq_state_notify.routine = notify_handler;
        tq_state_notify.data = 0;
@@ -1782,31+1757,12 @@ int kcapi_init(void)
         printk(KERN_NOTICE "CAPI-driver Rev%s: loaded\n", rev);
 #else
        printk(KERN_NOTICE "CAPI-driver Rev%s: started\n", rev);
-#ifdef CONFIG_ISDN_DRV_AVMB1_B1ISA
-       (void)b1isa_init();
-#endif
-#ifdef CONFIG_ISDN_DRV_AVMB1_B1PCI
-       (void)b1pci_init();
-#endif
-#ifdef CONFIG_ISDN_DRV_AVMB1_T1ISA
-       (void)t1isa_init();
-#endif
-#ifdef CONFIG_ISDN_DRV_AVMB1_B1PCMCIA
-       (void)b1pcmcia_init();
-#endif
-#ifdef CONFIG_ISDN_DRV_AVMB1_T1PCI
-       (void)t1pci_init();
-#endif
-#ifdef CONFIG_ISDN_DRV_AVMB1_C4
-       (void)c4_init();
-#endif
 #endif
        MOD_DEC_USE_COUNT;
        return 0;
 }
 
-#ifdef MODULE
-void cleanup_module(void)
+static void __exit kcapi_exit(void)
 {
        char rev[10];
        char *p;
@@ -1822,4+1778,6 @@ void cleanup_module(void)
         proc_capi_exit();
        printk(KERN_NOTICE "CAPI-driver Rev%s: unloaded\n", rev);
 }
-#endif
+
+module_init(kcapi_init);
+module_exit(kcapi_exit);
index ff77c5f..c548d9d 100644 (file)
 #include "capilli.h"
 #include "avmcard.h"
 
-static char *revision = "$Revision: 1.15 $";
+static char *revision = "$Revision: 1.16 $";
 
 /* ------------------------------------------------------------- */
 
@@ -613,12+613,7 @@ static struct capi_driver t1isa_driver = {
     add_card: t1isa_add_card,
 };
 
-#ifdef MODULE
-#define t1isa_init init_module
-void cleanup_module(void);
-#endif
-
-int t1isa_init(void)
+static int __init t1isa_init(void)
 {
        struct capi_driver *driver = &t1isa_driver;
        char *p;
@@ -646,9+641,10 @@ int t1isa_init(void)
        return retval;
 }
 
-#ifdef MODULE
-void cleanup_module(void)
+static void __exit t1isa_exit(void)
 {
     detach_capi_driver(&t1isa_driver);
 }
-#endif
+
+module_init(t1isa_init);
+module_exit(t1isa_exit);
index 50ecc72..5b3b263 100644 (file)
 #include <linux/ioport.h>
 #include <linux/pci.h>
 #include <linux/capi.h>
+#include <linux/init.h>
 #include <asm/io.h>
 #include "capicmd.h"
 #include "capiutil.h"
 #include "capilli.h"
 #include "avmcard.h"
 
-static char *revision = "$Revision: 1.11 $";
+static char *revision = "$Revision: 1.13 $";
 
 #undef CONFIG_T1PCI_DEBUG
 #undef CONFIG_T1PCI_POLLDEBUG
@@ -275,14+276,9 @@ static struct capi_driver t1pci_driver = {
     add_card: 0, /* no add_card function */
 };
 
-#ifdef MODULE
-#define t1pci_init init_module
-void cleanup_module(void);
-#endif
-
 static int ncards = 0;
 
-int t1pci_init(void)
+static int __init t1pci_init(void)
 {
        struct capi_driver *driver = &t1pci_driver;
        struct pci_dev *dev = NULL;
@@ -320,7+316,7 @@ int t1pci_init(void)
                struct capicardparams param;
 
                param.port = pci_resource_start(dev, 1);
-               param.irq = dev->irq;
+               param.irq = dev->irq;
                param.membase = pci_resource_start(dev, 0);
 
                retval = pci_enable_device (dev);
@@ -364,9+360,10 @@ int t1pci_init(void)
 #endif
 }
 
-#ifdef MODULE
-void cleanup_module(void)
+static void __exit t1pci_exit(void)
 {
     detach_capi_driver(&t1pci_driver);
 }
-#endif
+
+module_init(t1pci_init);
+module_exit(t1pci_exit);
index 8cff168..492f8f5 100644 (file)
@@ -1,5+1,5 @@
 /*
- * $Id: divert_procfs.c,v 1.10 2000/11/13 22:51:47 kai Exp $
+ * $Id: divert_procfs.c,v 1.11 2000/11/25 17:01:00 kai Exp $
  *
  * Filesystem handling for the diversion supplementary services.
  *
index d4fb045..1a8c75a 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: amd7930.c,v 1.4 2000/06/26 08:59:12 keil Exp $
+/* $Id: amd7930.c,v 1.5 2000/11/24 17:05:37 kai Exp $
  *
  * HiSax ISDN driver - chip specific routines for AMD 7930
  *
 #include "rawhdlc.h"
 #include <linux/interrupt.h>
 
-static const char *amd7930_revision = "$Revision: 1.4 $";
+static const char *amd7930_revision = "$Revision: 1.5 $";
 
 #define RCV_BUFSIZE    1024    /* Size of raw receive buffer in bytes */
 #define RCV_BUFBLKS    4       /* Number of blocks to divide buffer into
@@ -734,8+734,8 @@ amd7930_card_msg(struct IsdnCardState *cs, int mt, void *arg)
        return(0);
 }
 
-__initfunc(int
-setup_amd7930(struct IsdnCard *card))
+int __init
+setup_amd7930(struct IsdnCard *card)
 {
        struct IsdnCardState *cs = card->cs;
        char tmp[64];
index 7708afd..4ff4d7a 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: arcofi.c,v 1.11 2000/06/26 08:59:12 keil Exp $
+/* $Id: arcofi.c,v 1.12 2000/11/25 17:01:00 kai Exp $
  *
  * arcofi.c   Ansteuerung ARCOFI 2165
  *
index b86f5db..01b668d 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: asuscom.c,v 1.10 2000/06/26 08:59:12 keil Exp $
+/* $Id: asuscom.c,v 1.11 2000/11/24 17:05:37 kai Exp $
  *
  * asuscom.c     low level stuff for ASUSCOM NETWORK INC. ISDNLink cards
  *
  */
 
 #define __NO_VERSION__
+#include <linux/init.h>
 #include "hisax.h"
 #include "isac.h"
 #include "ipac.h"
 
 extern const char *CardType[];
 
-const char *Asuscom_revision = "$Revision: 1.10 $";
+const char *Asuscom_revision = "$Revision: 1.11 $";
 
 #define byteout(addr,val) outb(val,addr)
 #define bytein(addr) inb(addr)
@@ -306,8+307,8 @@ Asus_card_msg(struct IsdnCardState *cs, int mt, void *arg)
        return(0);
 }
 
-__initfunc(int
-setup_asuscom(struct IsdnCard *card))
+int __init
+setup_asuscom(struct IsdnCard *card)
 {
        int bytecnt;
        struct IsdnCardState *cs = card->cs;
index cc3ce44..e276597 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: avm_a1.c,v 2.12 2000/06/26 08:59:12 keil Exp $
+/* $Id: avm_a1.c,v 2.13 2000/11/24 17:05:37 kai Exp $
  *
  * avm_a1.c     low level stuff for AVM A1 (Fritz) isdn cards
  *
  *
  */
 #define __NO_VERSION__
+#include <linux/init.h>
 #include "hisax.h"
 #include "isac.h"
 #include "hscx.h"
 #include "isdnl1.h"
 
 extern const char *CardType[];
-static const char *avm_revision = "$Revision: 2.12 $";
+static const char *avm_revision = "$Revision: 2.13 $";
 
 #define         AVM_A1_STAT_ISAC       0x01
 #define         AVM_A1_STAT_HSCX       0x02
@@ -171,8+172,8 @@ AVM_card_msg(struct IsdnCardState *cs, int mt, void *arg)
        return(0);
 }
 
-__initfunc(int
-setup_avm_a1(struct IsdnCard *card))
+int __init
+setup_avm_a1(struct IsdnCard *card)
 {
        u_char val;
        struct IsdnCardState *cs = card->cs;
index a9a132b..2f81340 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: avm_a1p.c,v 2.6 2000/06/26 08:59:12 keil Exp $
+/* $Id: avm_a1p.c,v 2.7 2000/11/24 17:05:37 kai Exp $
  *
  * avm_a1p.c    low level stuff for the following AVM cards:
  *              A1 PCMCIA
  *  This file is (c) under GNU PUBLIC LICENSE
  */
 #define __NO_VERSION__
+#include <linux/init.h>
 #include "hisax.h"
 #include "isac.h"
 #include "hscx.h"
 #define byteout(addr,val) outb(val,addr)
 #define bytein(addr) inb(addr)
 
-static const char *avm_revision = "$Revision: 2.6 $";
+static const char *avm_revision = "$Revision: 2.7 $";
 
 static inline u_char
 ReadISAC(struct IsdnCardState *cs, u_char offset)
@@ -244,8+245,8 @@ AVM_card_msg(struct IsdnCardState *cs, int mt, void *arg)
        return 0;
 }
 
-__initfunc(int
-setup_avm_a1_pcmcia(struct IsdnCard *card))
+int __devinit
+setup_avm_a1_pcmcia(struct IsdnCard *card)
 {
        u_char model, vers;
        struct IsdnCardState *cs = card->cs;
index 4302585..55219d7 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: avm_pci.c,v 1.18 2000/08/20 07:34:04 keil Exp $
+/* $Id: avm_pci.c,v 1.22 2000/11/24 17:05:37 kai Exp $
  *
  * avm_pci.c    low level stuff for AVM Fritz!PCI and ISA PnP isdn cards
  *              Thanks to AVM, Berlin for informations
  */
 #define __NO_VERSION__
 #include <linux/config.h>
+#include <linux/init.h>
 #include "hisax.h"
 #include "isac.h"
 #include "isdnl1.h"
 #include <linux/interrupt.h>
 
 extern const char *CardType[];
-static const char *avm_pci_rev = "$Revision: 1.18 $";
+static const char *avm_pci_rev = "$Revision: 1.22 $";
 
 #define  AVM_FRITZ_PCI         1
 #define  AVM_FRITZ_PNP         2
@@ -649,8+650,8 @@ setstack_hdlc(struct PStack *st, struct BCState *bcs)
        return (0);
 }
 
-HISAX_INITFUNC(void
-clear_pending_hdlc_ints(struct IsdnCardState *cs))
+void __init
+clear_pending_hdlc_ints(struct IsdnCardState *cs)
 {
        u_int val;
 
@@ -679,8+680,8 @@ clear_pending_hdlc_ints(struct IsdnCardState *cs))
        }
 }
 
-HISAX_INITFUNC(void
-inithdlc(struct IsdnCardState *cs))
+void __init
+inithdlc(struct IsdnCardState *cs)
 {
        cs->bcs[0].BC_SetStack = setstack_hdlc;
        cs->bcs[1].BC_SetStack = setstack_hdlc;
@@ -764,10+765,10 @@ AVM_card_msg(struct IsdnCardState *cs, int mt, void *arg)
        return(0);
 }
 
-static         struct pci_dev *dev_avm __initdata = NULL;
+static struct pci_dev *dev_avm __initdata;
 
-__initfunc(int
-setup_avm_pcipnp(struct IsdnCard *card))
+int __init
+setup_avm_pcipnp(struct IsdnCard *card)
 {
        u_int val, ver;
        struct IsdnCardState *cs = card->cs;
index 75729c2..b641e7e 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: bkm_a4t.c,v 1.11 2000/06/26 08:59:12 keil Exp $
+/* $Id: bkm_a4t.c,v 1.13 2000/11/24 17:05:37 kai Exp $
  * bkm_a4t.c    low level stuff for T-Berkom A4T
  *              derived from the original file sedlbauer.c
  *              derived from the original file niccy.c
 #define __NO_VERSION__
 
 #include <linux/config.h>
+#include <linux/init.h>
 #include "hisax.h"
 #include "isac.h"
 #include "hscx.h"
 
 extern const char *CardType[];
 
-const char *bkm_a4t_revision = "$Revision: 1.11 $";
+const char *bkm_a4t_revision = "$Revision: 1.13 $";
 
 
 static inline u_char
@@ -263,10+264,10 @@ BKM_card_msg(struct IsdnCardState *cs, int mt, void *arg)
        return (0);
 }
 
-static struct pci_dev *dev_a4t __initdata = NULL;
+static struct pci_dev *dev_a4t __initdata;
 
-__initfunc(int
-          setup_bkm_a4t(struct IsdnCard *card))
+int __init
+setup_bkm_a4t(struct IsdnCard *card)
 {
        struct IsdnCardState *cs = card->cs;
        char tmp[64];
index 6f00073..010b9e9 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: bkm_a8.c,v 1.12 2000/06/26 08:59:12 keil Exp $
+/* $Id: bkm_a8.c,v 1.14 2000/11/24 17:05:37 kai Exp $
  * bkm_a8.c     low level stuff for Scitel Quadro (4*S0, passive)
  *              derived from the original file sedlbauer.c
  *              derived from the original file niccy.c
 #define __NO_VERSION__
 
 #include <linux/config.h>
+#include <linux/init.h>
 #include "hisax.h"
 #include "isac.h"
 #include "ipac.h"
 
 extern const char *CardType[];
 
-const char sct_quadro_revision[] = "$Revision: 1.12 $";
+const char sct_quadro_revision[] = "$Revision: 1.14 $";
 
 static const char *sct_quadro_subtypes[] =
 {
@@ -268,8+269,8 @@ BKM_card_msg(struct IsdnCardState *cs, int mt, void *arg)
        return (0);
 }
 
-__initfunc(int
-sct_alloc_io(u_int adr, u_int len))
+int __init
+sct_alloc_io(u_int adr, u_int len)
 {
        if (check_region(adr, len)) {
                printk(KERN_WARNING
@@ -282,17+283,17 @@ sct_alloc_io(u_int adr, u_int len))
        return(0);
 }
 
-static struct pci_dev *dev_a8 __initdata = NULL;
-static u16  sub_vendor_id __initdata = 0;
-static u16  sub_sys_id __initdata = 0;
-static u_char pci_bus __initdata = 0;
-static u_char pci_device_fn __initdata = 0;
-static u_char pci_irq __initdata = 0;
+static struct pci_dev *dev_a8 __initdata;
+static u16  sub_vendor_id __initdata;
+static u16  sub_sys_id __initdata;
+static u_char pci_bus __initdata;
+static u_char pci_device_fn __initdata;
+static u_char pci_irq __initdata;
 
 #endif /* CONFIG_PCI */
 
-__initfunc(int
-setup_sct_quadro(struct IsdnCard *card))
+int __init
+setup_sct_quadro(struct IsdnCard *card)
 {
 #if CONFIG_PCI
        struct IsdnCardState *cs = card->cs;
index e513c81..6452da4 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: bkm_ax.h,v 1.4 2000/06/26 08:59:12 keil Exp $
+/* $Id: bkm_ax.h,v 1.5 2000/11/19 17:41:03 kai Exp $
  * bkm_ax.h   low level decls for T-Berkom cards A4T and Scitel Quadro (4*S0, passive)
  *
  * Author     Roland Klabunde (R.Klabunde@Berkom.de)
index 4d32903..ced19e4 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: callc.c,v 2.47 2000/06/26 08:59:12 keil Exp $
+/* $Id: callc.c,v 2.51 2000/11/24 17:05:37 kai Exp $
  *
  * Author       Karsten Keil (keil@isdn4linux.de)
  *              based on the teles driver from Jan den Ouden
  *              Fritz Elfert
  *
  */
-
 #define __NO_VERSION__
+#include <linux/init.h>
 #include "hisax.h"
 #include "../avmb1/capicmd.h"  /* this should be moved in a common place */
 
 #define MOD_USE_COUNT ( GET_USE_COUNT (&__this_module))
 #endif /* MODULE */
 
-const char *lli_revision = "$Revision: 2.47 $";
+const char *lli_revision = "$Revision: 2.51 $";
 
 extern struct IsdnCard cards[];
 extern int nrcards;
@@ -30,10+30,8 @@ extern void HiSax_mod_inc_use_count(void);
 static int init_b_st(struct Channel *chanp, int incoming);
 static void release_b_st(struct Channel *chanp);
 
-static struct Fsm callcfsm =
-{NULL, 0, 0, NULL, NULL};
-
-static int chancount = 0;
+static struct Fsm callcfsm;
+static int chancount;
 
 /* experimental REJECT after ALERTING for CALLBACK to beat the 4s delay */
 #define ALERT_REJECT 0
@@ -782,7+780,7 @@ lli_failure_a(struct FsmInst *fi, int event, void *arg)
 }
 
 /* *INDENT-OFF* */
-static struct FsmNode fnlist[] HISAX_INITDATA =
+static struct FsmNode fnlist[] __initdata =
 {
         {ST_NULL,               EV_DIAL,                lli_prep_dialout},
         {ST_NULL,               EV_RESUME,              lli_resume},
@@ -852,8+850,8 @@ static struct FsmNode fnlist[] HISAX_INITDATA =
 
 #define FNCOUNT (sizeof(fnlist)/sizeof(struct FsmNode))
 
-HISAX_INITFUNC(void
-CallcNew(void))
+void __init
+CallcNew(void)
 {
        callcfsm.state_count = STATE_COUNT;
        callcfsm.event_count = EVENT_COUNT;
@@ -880,6+878,7 @@ release_b_st(struct Channel *chanp)
                                releasestack_isdnl2(st);
                                break;
                        case (ISDN_PROTO_L2_HDLC):
+                       case (ISDN_PROTO_L2_HDLC_56K):
                        case (ISDN_PROTO_L2_TRANS):
                        case (ISDN_PROTO_L2_MODEM):
                        case (ISDN_PROTO_L2_FAX):
@@ -1273,6+1272,9 @@ init_b_st(struct Channel *chanp, int incoming)
                case (ISDN_PROTO_L2_HDLC):
                        st->l1.mode = L1_MODE_HDLC;
                        break;
+               case (ISDN_PROTO_L2_HDLC_56K):
+                       st->l1.mode = L1_MODE_HDLC_56K;
+                       break;
                case (ISDN_PROTO_L2_TRANS):
                        st->l1.mode = L1_MODE_TRANS;
                        break;
@@ -1309,6+1311,7 @@ init_b_st(struct Channel *chanp, int incoming)
                        st->l2.debug = chanp->debug & 64;
                        break;
                case (ISDN_PROTO_L2_HDLC):
+               case (ISDN_PROTO_L2_HDLC_56K):
                case (ISDN_PROTO_L2_TRANS):
                case (ISDN_PROTO_L2_MODEM):
                case (ISDN_PROTO_L2_FAX):
index 614f145..d889792 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: config.c,v 2.50 2000/07/04 10:24:32 keil Exp $
+/* $Id: config.c,v 2.57 2000/11/25 17:01:00 kai Exp $
  *
  * Author       Karsten Keil (keil@isdn4linux.de)
  *              based on the teles driver from Jan den Ouden
  *   36 Winbond 6692 PCI        none
  *   37 HFC 2BDS0 S+/SP         p0=irq p1=iobase
  *   38 Travers Technologies NETspider-U PCI card
+ *   39 HFC 2BDS0-SP PCMCIA     p0=irq p1=iobase
  *
  * protocol can be either ISDN_PTYPE_EURO or ISDN_PTYPE_1TR6 or ISDN_PTYPE_NI1
  *
@@ -81,7+82,7 @@ const char *CardType[] =
  "AMD 7930", "NICCY", "S0Box", "AVM A1 (PCMCIA)", "AVM Fritz PnP/PCI",
  "Sedlbauer Speed Fax +", "Siemens I-Surf", "Acer P10", "HST Saphir",
  "Telekom A4T", "Scitel Quadro", "Gazel", "HFC 2BDS0 PCI", "Winbond 6692",
- "HFC 2BDS0 SX", "NETspider-U",
+ "HFC 2BDS0 SX", "NETspider-U", "HFC-2BDS0-SP PCMCIA",
 };
 
 void HiSax_closecard(int cardnr);
@@ -221,6+222,8 @@ EXPORT_SYMBOL(sedl_init_pcmcia);
 #undef DEFAULT_CFG
 #define DEFAULT_CARD ISDN_CTYPE_HFC_SX
 #define DEFAULT_CFG {5,0x2E0,0,0}
+int hfc_init_pcmcia(void*, int, int*, int);
+EXPORT_SYMBOL(hfc_init_pcmcia);
 #endif
 
 
@@ -336,18+339,14 @@ struct IsdnCard cards[] =
        EMPTY_CARD,
 };
 
-static char HiSaxID[64] HISAX_INITDATA = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" \
-"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" \
-"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
-char *HiSax_id HISAX_INITDATA = HiSaxID;
+static char HiSaxID[64] __devinitdata;
+
+char *HiSax_id __devinitdata = HiSaxID;
 #ifdef MODULE
 /* Variables for insmod */
-static int type[] HISAX_INITDATA =
-{0, 0, 0, 0, 0, 0, 0, 0};
-static int protocol[] HISAX_INITDATA =
-{0, 0, 0, 0, 0, 0, 0, 0};
-static int io[] HISAX_INITDATA =
-{0, 0, 0, 0, 0, 0, 0, 0};
+static int type[8] __devinitdata;
+static int protocol[8] __devinitdata;
+static int io[8] __devinitdata;
 #undef IO0_IO1
 #ifdef CONFIG_HISAX_16_3
 #define IO0_IO1
@@ -357,16+356,12 @@ static int io[] HISAX_INITDATA =
 #define IO0_IO1
 #endif
 #ifdef IO0_IO1
-static int io0[] HISAX_INITDATA =
-{0, 0, 0, 0, 0, 0, 0, 0};
-static int io1[] HISAX_INITDATA =
-{0, 0, 0, 0, 0, 0, 0, 0};
+static int io0[8] __devinitdata;
+static int io1[8] __devinitdata;
 #endif
-static int irq[] HISAX_INITDATA =
-{0, 0, 0, 0, 0, 0, 0, 0};
-static int mem[] HISAX_INITDATA =
-{0, 0, 0, 0, 0, 0, 0, 0};
-static char *id HISAX_INITDATA = HiSaxID;
+static int irq[8] __devinitdata;
+static int mem[8] __devinitdata;
+static char *id __devinitdata = HiSaxID;
 
 MODULE_AUTHOR("Karsten Keil");
 MODULE_PARM(type, "1-8i");
@@ -381,7+376,7 @@ MODULE_PARM(io1, "1-8i");
 #endif /* IO0_IO1 */
 #endif /* MODULE */
 
-int nrcards;
+static int nrcards;
 
 extern char *l1_revision;
 extern char *l2_revision;
@@ -389,8+384,8 @@ extern char *l3_revision;
 extern char *lli_revision;
 extern char *tei_revision;
 
-HISAX_INITFUNC(char *
-HiSax_getrev(const char *revision))
+char *
+HiSax_getrev(const char *revision)
 {
        char *rev;
        char *p;
@@ -404,8+399,8 @@ HiSax_getrev(const char *revision))
        return rev;
 }
 
-HISAX_INITFUNC(void
-HiSaxVersion(void))
+void __init
+HiSaxVersion(void)
 {
        char tmp[64];
 
@@ -440,9+435,7 @@ HiSax_mod_inc_use_count(void)
        MOD_INC_USE_COUNT;
 }
 
-#ifdef MODULE
-#define HiSax_init init_module
-#else
+#ifndef MODULE
 #define MAX_ARG        (HISAX_MAX_CARDS*5)
 static int __init
 HiSax_setup(char *line)
@@ -863,7+856,8 @@ closecard(int cardnr)
        ll_unload(csta);
 }
 
-HISAX_INITFUNC(static int init_card(struct IsdnCardState *cs))
+static int __devinit
+init_card(struct IsdnCardState *cs)
 {
        int irq_cnt, cnt = 3;
        long flags;
@@ -910,8+904,8 @@ HISAX_INITFUNC(static int init_card(struct IsdnCardState *cs))
        return(3);
 }
 
-HISAX_INITFUNC(static int
-checkcard(int cardnr, char *id, int *busy_flag))
+static int __devinit
+checkcard(int cardnr, char *id, int *busy_flag)
 {
        long flags;
        int ret = 0;
@@ -973,6+967,7 @@ checkcard(int cardnr, char *id, int *busy_flag))
                cs->iif.features =
                        ISDN_FEATURE_L2_X75I |
                        ISDN_FEATURE_L2_HDLC |
+                       ISDN_FEATURE_L2_HDLC_56K |
                        ISDN_FEATURE_L2_TRANS |
                        ISDN_FEATURE_L3_TRANS |
 #ifdef CONFIG_HISAX_1TR6
@@ -1208,8+1203,8 @@ checkcard(int cardnr, char *id, int *busy_flag))
        return (1);
 }
 
-HISAX_INITFUNC(void
-HiSax_shiftcards(int idx))
+void __devinit
+HiSax_shiftcards(int idx)
 {
        int i;
 
@@ -1217,8+1212,8 @@ HiSax_shiftcards(int idx))
                memcpy(&cards[i], &cards[i + 1], sizeof(cards[i]));
 }
 
-HISAX_INITFUNC(int
-HiSax_inithardware(int *busy_flag))
+int __devinit
+HiSax_inithardware(int *busy_flag)
 {
        int foundcards = 0;
        int i = 0;
@@ -1332,20+1327,26 @@ HiSax_reportcard(int cardnr, int sel)
 }
 
 
-__initfunc(int
-HiSax_init(void))
+#ifdef MODULE
+#define HiSax_init init_module
+#endif
+
+int __init
+HiSax_init(void)
 {
        int i,j;
+       int nzproto = 0;
+
+       HiSaxVersion();
+       CallcNew();
+       Isdnl3New();
+       Isdnl2New();
+       TeiNew();
+       Isdnl1New();
 
 #ifdef MODULE
-       int nzproto = 0;
        if (!type[0]) {
                /* We 'll register drivers later, but init basic functions*/
-               CallcNew();
-               Isdnl3New();
-               Isdnl2New();
-               TeiNew();
-               Isdnl1New();
                return 0;
        }
 #ifdef CONFIG_HISAX_ELSA
@@ -1366,9+1367,14 @@ HiSax_init(void))
                return 0;
        }
 #endif
+#ifdef CONFIG_HISAX_HFC_SX
+       if (type[0] == ISDN_CTYPE_HFC_SP_PCMCIA) {
+               /* we have to export  and return in this case */
+               return 0;
+       }
+#endif
 #endif
        nrcards = 0;
-       HiSaxVersion();
 #ifdef MODULE
        if (id)                 /* If id= string used */
                HiSax_id = id;
@@ -1430,6+1436,7 @@ HiSax_init(void))
                        case ISDN_CTYPE_HSTSAPHIR:
                        case ISDN_CTYPE_GAZEL:
                        case ISDN_CTYPE_HFC_SX:
+                       case ISDN_CTYPE_HFC_SP_PCMCIA:
                                cards[j].para[0] = irq[i];
                                cards[j].para[1] = io[i];
                                break;
@@ -1469,7+1476,6 @@ HiSax_init(void))
        }
        if (!nzproto) {
                printk(KERN_WARNING "HiSax: Warning - no protocol specified\n");
-               printk(KERN_WARNING "HiSax: Note! module load syntax has changed.\n");
                printk(KERN_WARNING "HiSax: using protocol %s\n", DEFAULT_PROTO_NAME);
        }
 #endif
@@ -1483,15+1489,8 @@ HiSax_init(void))
        printk(KERN_DEBUG "HiSax: Total %d card%s defined\n",
               nrcards, (nrcards > 1) ? "s" : "");
 
-       CallcNew();
-       Isdnl3New();
-       Isdnl2New();
-       TeiNew();
-       Isdnl1New();
        if (HiSax_inithardware(NULL)) {
                /* Install only, if at least one card found */
-#ifdef MODULE
-#endif /* MODULE */
                return (0);
        } else {
                Isdnl1Free();
@@ -1529,10+1528,49 @@ int elsa_init_pcmcia(void *pcm_iob, int pcm_irq, int *busy_flag, int prot)
 {
 #ifdef MODULE
        int i;
+
+       nrcards = 0;
+       /* Initialize all structs, even though we only accept
+          two pcmcia cards
+          */
+       for (i = 0; i < HISAX_MAX_CARDS; i++) {
+               cards[i].para[0] = irq[i];
+               cards[i].para[1] = io[i];
+               cards[i].typ = type[i];
+               if (protocol[i]) {
+                       cards[i].protocol = protocol[i];
+               }
+       }
+       cards[0].para[0] = pcm_irq;
+       cards[0].para[1] = (int)pcm_iob;
+       cards[0].protocol = prot;
+       cards[0].typ = ISDN_CTYPE_ELSA_PCMCIA;
+
+       if (!HiSax_id)
+               HiSax_id = HiSaxID;
+       if (!HiSaxID[0])
+               strcpy(HiSaxID, "HiSax");
+       for (i = 0; i < HISAX_MAX_CARDS; i++)
+               if (cards[i].typ > 0)
+                       nrcards++;
+       printk(KERN_DEBUG "HiSax: Total %d card%s defined\n",
+              nrcards, (nrcards > 1) ? "s" : "");
+
+       HiSax_inithardware(busy_flag);
+       printk(KERN_NOTICE "HiSax: module installed\n");
+#endif
+       return (0);
+}
+#endif
+
+#ifdef CONFIG_HISAX_HFC_SX
+int hfc_init_pcmcia(void *pcm_iob, int pcm_irq, int *busy_flag, int prot)
+{
+#ifdef MODULE
+       int i;
        int nzproto = 0;
 
        nrcards = 0;
-       HiSaxVersion();
        /* Initialize all structs, even though we only accept
           two pcmcia cards
           */
@@ -1548,7+1586,7 @@ int elsa_init_pcmcia(void *pcm_iob, int pcm_irq, int *busy_flag, int prot)
        cards[0].para[0] = pcm_irq;
        cards[0].para[1] = (int)pcm_iob;
        cards[0].protocol = prot;
-       cards[0].typ = 10;
+       cards[0].typ = ISDN_CTYPE_HFC_SP_PCMCIA;
        nzproto = 1;
 
        if (!HiSax_id)
@@ -1561,11+1599,6 @@ int elsa_init_pcmcia(void *pcm_iob, int pcm_irq, int *busy_flag, int prot)
        printk(KERN_DEBUG "HiSax: Total %d card%s defined\n",
               nrcards, (nrcards > 1) ? "s" : "");
 
-       Isdnl1New();
-       CallcNew();
-       Isdnl3New();
-       Isdnl2New();
-       TeiNew();
        HiSax_inithardware(busy_flag);
        printk(KERN_NOTICE "HiSax: module installed\n");
 #endif
@@ -1581,7+1614,6 @@ int sedl_init_pcmcia(void *pcm_iob, int pcm_irq, int *busy_flag, int prot)
        int nzproto = 0;
 
        nrcards = 0;
-       HiSaxVersion();
        /* Initialize all structs, even though we only accept
           two pcmcia cards
           */
@@ -1610,11+1642,6 @@ int sedl_init_pcmcia(void *pcm_iob, int pcm_irq, int *busy_flag, int prot)
        printk(KERN_DEBUG "HiSax: Total %d card%s defined\n",
               nrcards, (nrcards > 1) ? "s" : "");
 
-       CallcNew();
-       Isdnl3New();
-       Isdnl2New();
-       Isdnl1New();
-       TeiNew();
        HiSax_inithardware(busy_flag);
        printk(KERN_NOTICE "HiSax: module installed\n");
 #endif
@@ -1630,7+1657,6 @@ int avm_a1_init_pcmcia(void *pcm_iob, int pcm_irq, int *busy_flag, int prot)
        int nzproto = 0;
 
        nrcards = 0;
-       HiSaxVersion();
        /* Initialize all structs, even though we only accept
           two pcmcia cards
           */
@@ -1659,11+1685,6 @@ int avm_a1_init_pcmcia(void *pcm_iob, int pcm_irq, int *busy_flag, int prot)
        printk(KERN_DEBUG "HiSax: Total %d card%s defined\n",
               nrcards, (nrcards > 1) ? "s" : "");
 
-       Isdnl1New();
-       CallcNew();
-       Isdnl3New();
-       Isdnl2New();
-       TeiNew();
        HiSax_inithardware(busy_flag);
        printk(KERN_NOTICE "HiSax: module installed\n");
 #endif
@@ -1671,7+1692,7 @@ int avm_a1_init_pcmcia(void *pcm_iob, int pcm_irq, int *busy_flag, int prot)
 }
 #endif
 
-int hisax_init_pcmcia(void *pcm_iob, int *busy_flag, struct IsdnCard *card)
+int __devinit hisax_init_pcmcia(void *pcm_iob, int *busy_flag, struct IsdnCard *card)
 {
        u_char ids[16];
        int ret = -1;
index f39dd75..da9ea63 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: diva.c,v 1.21 2000/06/26 08:59:12 keil Exp $
+/* $Id: diva.c,v 1.25 2000/11/24 17:05:37 kai Exp $
  *
  * diva.c     low level stuff for Eicon.Diehl Diva Family ISDN cards
  *
  */
 
 #define __NO_VERSION__
+#include <linux/init.h>
 #include <linux/config.h>
 #include "hisax.h"
 #include "isac.h"
 
 extern const char *CardType[];
 
-const char *Diva_revision = "$Revision: 1.21 $";
+const char *Diva_revision = "$Revision: 1.25 $";
 
 #define byteout(addr,val) outb(val,addr)
 #define bytein(addr) inb(addr)
@@ -833,12+834,12 @@ Diva_card_msg(struct IsdnCardState *cs, int mt, void *arg)
        return(0);
 }
 
-static         struct pci_dev *dev_diva __initdata = NULL;
-static         struct pci_dev *dev_diva_u __initdata = NULL;
-static         struct pci_dev *dev_diva201 __initdata = NULL;
+static         struct pci_dev *dev_diva __initdata;
+static         struct pci_dev *dev_diva_u __initdata;
+static         struct pci_dev *dev_diva201 __initdata;
 
-__initfunc(int
-setup_diva(struct IsdnCard *card))
+int __init
+setup_diva(struct IsdnCard *card)
 {
        int bytecnt;
        u_char val;
index f2357cc..b5b3b5b 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: elsa.c,v 2.23 2000/06/26 08:59:12 keil Exp $
+/* $Id: elsa.c,v 2.26 2000/11/24 17:05:37 kai Exp $
  *
  * elsa.c     low level stuff for Elsa isdn cards
  *
  */
 
 #define __NO_VERSION__
+#include <linux/init.h>
 #include <linux/config.h>
 #include "hisax.h"
 #include "arcofi.h"
 
 extern const char *CardType[];
 
-const char *Elsa_revision = "$Revision: 2.23 $";
+const char *Elsa_revision = "$Revision: 2.26 $";
 const char *Elsa_Types[] =
 {"None", "PC", "PCC-8", "PCC-16", "PCF", "PCF-Pro",
  "PCMCIA", "QS 1000", "QS 3000", "Microlink PCI", "QS 3000 PCI", 
@@ -865,10+866,10 @@ probe_elsa(struct IsdnCardState *cs)
        return (CARD_portlist[i]);
 }
 
-static         struct pci_dev *dev_qs1000 __initdata = NULL;
-static         struct pci_dev *dev_qs3000 __initdata = NULL;
+static         struct pci_dev *dev_qs1000 __devinitdata = NULL;
+static         struct pci_dev *dev_qs3000 __devinitdata = NULL;
 
-int
+int __devinit
 setup_elsa(struct IsdnCard *card)
 {
        long flags;
index 7f439e1..74bedf8 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: elsa_ser.c,v 2.9 2000/06/26 08:59:12 keil Exp $
+/* $Id: elsa_ser.c,v 2.10 2000/11/19 17:02:47 kai Exp $
  *
  * stuff for the serial modem on ELSA cards
  *
index a483b58..28a7592 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: fsm.c,v 1.13 2000/06/26 08:59:12 keil Exp $
+/* $Id: fsm.c,v 1.14 2000/11/24 17:05:37 kai Exp $
  *
  * Author       Karsten Keil (keil@isdn4linux.de)
  *              based on the teles driver from Jan den Ouden
  *
  */
 #define __NO_VERSION__
+#include <linux/init.h>
 #include "hisax.h"
 
 #define FSM_TIMER_DEBUG 0
 
-HISAX_INITFUNC(void
-FsmNew(struct Fsm *fsm,
-       struct FsmNode *fnlist, int fncount))
+void __init
+FsmNew(struct Fsm *fsm, struct FsmNode *fnlist, int fncount)
 {
        int i;
 
index eb777b1..3b9287f 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: gazel.c,v 2.8 2000/06/26 08:59:12 keil Exp $
+/* $Id: gazel.c,v 2.11 2000/11/24 17:05:37 kai Exp $
  *
  * gazel.c     low level stuff for Gazel isdn cards
  *
@@ -9,6+9,7 @@
  *
  */
 #include <linux/config.h>
+#include <linux/init.h>
 #define __NO_VERSION__
 #include "hisax.h"
 #include "isac.h"
 #include <linux/pci.h>
 
 extern const char *CardType[];
-const char *gazel_revision = "$Revision: 2.8 $";
+const char *gazel_revision = "$Revision: 2.11 $";
 
 #define R647      1
 #define R685      2
@@ -557,7+558,7 @@ setup_gazelisa(struct IsdnCard *card, struct IsdnCardState *cs)
        return (0);
 }
 
-static struct pci_dev *dev_tel __initdata = NULL;
+static struct pci_dev *dev_tel __initdata;
 
 static int
 setup_gazelpci(struct IsdnCardState *cs)
@@ -645,8+646,8 @@ setup_gazelpci(struct IsdnCardState *cs)
        return (0);
 }
 
-__initfunc(int
-          setup_gazel(struct IsdnCard *card))
+int __init
+setup_gazel(struct IsdnCard *card)
 {
        struct IsdnCardState *cs = card->cs;
        char tmp[64];
index 9e03c11..73c6fb4 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: hfc_2bds0.c,v 1.13 2000/06/26 08:59:12 keil Exp $
+/* $Id: hfc_2bds0.c,v 1.15 2000/11/24 17:05:37 kai Exp $
  *
  *  specific routines for CCD's HFC 2BDS0
  *
@@ -8,6+8,7 @@
  *
  */
 #define __NO_VERSION__
+#include <linux/init.h>
 #include "hisax.h"
 #include "hfc_2bds0.h"
 #include "isdnl1.h"
@@ -1104,8+1105,8 @@ hfc_dbusy_timer(struct IsdnCardState *cs)
 {
 }
 
-__initfunc(unsigned int
-*init_send_hfcd(int cnt))
+unsigned int __init
+*init_send_hfcd(int cnt)
 {
        int i, *send;
 
@@ -1119,8+1120,8 @@ __initfunc(unsigned int
        return(send);
 }
 
-__initfunc(void
-init2bds0(struct IsdnCardState *cs))
+void __init
+init2bds0(struct IsdnCardState *cs)
 {
        cs->setstack_d = setstack_hfcd;
        cs->dbusytimer.function = (void *) hfc_dbusy_timer;
index bd14420..22e94c0 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: hfc_2bs0.c,v 1.15 2000/07/26 20:46:47 keil Exp $
+/* $Id: hfc_2bs0.c,v 1.17 2000/11/24 17:05:37 kai Exp $
  *
  *  specific routines for CCD's HFC 2BS0
  *
@@ -9,6+9,7 @@
  */
 
 #define __NO_VERSION__
+#include <linux/init.h>
 #include "hisax.h"
 #include "hfc_2bs0.h"
 #include "isac.h"
@@ -570,8+571,8 @@ setstack_hfc(struct PStack *st, struct BCState *bcs)
        return (0);
 }
 
-__initfunc(void
-init_send(struct BCState *bcs))
+void __init
+init_send(struct BCState *bcs)
 {
        int i;
 
@@ -584,8+585,8 @@ init_send(struct BCState *bcs))
                bcs->hw.hfc.send[i] = 0x1fff;
 }
 
-__initfunc(void
-inithfc(struct IsdnCardState *cs))
+void __init
+inithfc(struct IsdnCardState *cs)
 {
        init_send(&cs->bcs[0]);
        init_send(&cs->bcs[1]);
index ac03922..0a709fa 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: hfc_pci.c,v 1.31 2000/08/20 07:32:55 keil Exp $
+/* $Id: hfc_pci.c,v 1.34 2000/11/24 17:05:37 kai Exp $
 
  * hfc_pci.c     low level driver for CCD´s hfc-pci based cards
  *
  *
  */
 
+#include <linux/init.h>
 #include <linux/config.h>
 #define __NO_VERSION__
 #include "hisax.h"
 #include "isdnl1.h"
 #include <linux/pci.h>
 #include <linux/interrupt.h>
-#include <linux/init.h>
 
 extern const char *CardType[];
 
-static const char *hfcpci_revision = "$Revision: 1.31 $";
+static const char *hfcpci_revision = "$Revision: 1.34 $";
 
 /* table entry in the PCI devices list */
 typedef struct {
@@ -1571,8+1571,8 @@ hfcpci_bh(struct IsdnCardState *cs)
 /********************************/
 /* called for card init message */
 /********************************/
-__initfunc(void
-          inithfcpci(struct IsdnCardState *cs))
+void __init
+inithfcpci(struct IsdnCardState *cs)
 {
        cs->setstack_d = setstack_hfcpci;
        cs->dbusytimer.function = (void *) hfcpci_dbusy_timer;
index 36c26cb..c19f27d 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: hfc_sx.c,v 1.6 2000/06/26 08:59:13 keil Exp $
+/* $Id: hfc_sx.c,v 1.9 2000/11/24 17:05:37 kai Exp $
 
  * hfc_sx.c     low level driver for CCD´s hfc-s+/sp based cards
  *
  */
 
 #define __NO_VERSION__
+#include <linux/init.h>
 #include "hisax.h"
 #include "hfc_sx.h"
 #include "isdnl1.h"
 
 extern const char *CardType[];
 
-static const char *hfcsx_revision = "$Revision: 1.6 $";
+static const char *hfcsx_revision = "$Revision: 1.9 $";
 
 /***************************************/
 /* IRQ-table for CCDs demo board       */
@@ -1415,8+1416,8 @@ hfcsx_bh(struct IsdnCardState *cs)
 /********************************/
 /* called for card init message */
 /********************************/
-__initfunc(void
-          inithfcsx(struct IsdnCardState *cs))
+void __devinit
+inithfcsx(struct IsdnCardState *cs)
 {
        cs->setstack_d = setstack_hfcsx;
        cs->dbusytimer.function = (void *) hfcsx_dbusy_timer;
@@ -1472,8+1473,8 @@ hfcsx_card_msg(struct IsdnCardState *cs, int mt, void *arg)
 
 
 
-__initfunc(int
-          setup_hfcsx(struct IsdnCard *card))
+int __devinit
+setup_hfcsx(struct IsdnCard *card)
 {
        struct IsdnCardState *cs = card->cs;
        char tmp[64];
@@ -1486,7+1487,8 @@ __initfunc(int
        cs->hw.hfcsx.int_s1 = 0;
        cs->dc.hfcsx.ph_state = 0;
        cs->hw.hfcsx.fifo = 255;
-       if (cs->typ == ISDN_CTYPE_HFC_SX) {
+       if ((cs->typ == ISDN_CTYPE_HFC_SX) ||
+           (cs->typ == ISDN_CTYPE_HFC_SP_PCMCIA)) {
                if ((!cs->hw.hfcsx.base) || 
                    check_region((cs->hw.hfcsx.base), 2)) {
                  printk(KERN_WARNING
index 18993bf..6c06186 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: hfcscard.c,v 1.7 2000/06/26 08:59:13 keil Exp $
+/* $Id: hfcscard.c,v 1.8 2000/11/24 17:05:37 kai Exp $
  *
  * hfcscard.c     low level stuff for hfcs based cards (Teles3c, ACER P10)
  *
  */
 
 #define __NO_VERSION__
+#include <linux/init.h>
 #include "hisax.h"
 #include "hfc_2bds0.h"
 #include "isdnl1.h"
 
 extern const char *CardType[];
 
-static const char *hfcs_revision = "$Revision: 1.7 $";
+static const char *hfcs_revision = "$Revision: 1.8 $";
 
 static void
 hfcs_interrupt(int intno, void *dev_id, struct pt_regs *regs)
@@ -136,8+137,8 @@ hfcs_card_msg(struct IsdnCardState *cs, int mt, void *arg)
        return(0);
 }
 
-__initfunc(int
-setup_hfcs(struct IsdnCard *card))
+int __init
+setup_hfcs(struct IsdnCard *card)
 {
        struct IsdnCardState *cs = card->cs;
        char tmp[64];
index abc215f..97211bc 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: hisax.h,v 2.48 2000/07/04 10:24:32 keil Exp $
+/* $Id: hisax.h,v 2.52 2000/11/25 17:01:00 kai Exp $
  *
  *   Basic declarations, defines and prototypes
  *
@@ -476,6+476,7 @@ struct amd7930_hw {
 #define L1_MODE_TRANS  1
 #define L1_MODE_HDLC   2
 #define L1_MODE_EXTRN  3
+#define L1_MODE_HDLC_56K 4
 #define L1_MODE_MODEM  7
 #define L1_MODE_V32    8
 #define L1_MODE_FAX    9
@@ -987,24+988,14 @@ struct IsdnCardState {
 #define  ISDN_CTYPE_W6692      36
 #define  ISDN_CTYPE_HFC_SX      37
 #define  ISDN_CTYPE_NETJET_U   38
-#define  ISDN_CTYPE_COUNT      38
+#define  ISDN_CTYPE_HFC_SP_PCMCIA      39
+#define  ISDN_CTYPE_COUNT      39
 
 
 #ifdef ISDN_CHIP_ISAC
 #undef ISDN_CHIP_ISAC
 #endif
 
-#ifndef __initfunc
-#define __initfunc(__arginit) __arginit
-#endif
-
-#ifndef __initdata
-#define __initdata
-#endif
-
-#define HISAX_INITFUNC(__arginit) __initfunc(__arginit)
-#define HISAX_INITDATA __initdata
-
 #ifdef CONFIG_HISAX_16_0
 #define  CARD_TELES0 1
 #ifndef ISDN_CHIP_ISAC
@@ -1064,10+1055,6 @@ struct IsdnCardState {
 #ifndef ISDN_CHIP_ISAC
 #define ISDN_CHIP_ISAC 1
 #endif
-#undef HISAX_INITFUNC
-#define HISAX_INITFUNC(__arginit) __arginit
-#undef HISAX_INITDATA
-#define HISAX_INITDATA
 #else
 #define  CARD_ELSA  0
 #endif
index 6cae36e..d8338bc 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: hscx.c,v 1.19 2000/06/26 08:59:13 keil Exp $
+/* $Id: hscx.c,v 1.21 2000/11/24 17:05:37 kai Exp $
  *
  * hscx.c   HSCX specific routines
  *
  */
 
 #define __NO_VERSION__
+#include <linux/init.h>
 #include "hisax.h"
 #include "hscx.h"
 #include "isac.h"
 #include "isdnl1.h"
 #include <linux/interrupt.h>
 
-static char *HSCXVer[] HISAX_INITDATA =
+static char *HSCXVer[] __initdata =
 {"A1", "?1", "A2", "?3", "A3", "V2.1", "?6", "?7",
  "?8", "?9", "?10", "?11", "?12", "?13", "?14", "???"};
 
-HISAX_INITFUNC(int
-HscxVersion(struct IsdnCardState *cs, char *s))
+int __init
+HscxVersion(struct IsdnCardState *cs, char *s)
 {
        int verA, verB;
 
@@ -218,8+219,8 @@ setstack_hscx(struct PStack *st, struct BCState *bcs)
        return (0);
 }
 
-HISAX_INITFUNC(void
-clear_pending_hscx_ints(struct IsdnCardState *cs))
+void __init
+clear_pending_hscx_ints(struct IsdnCardState *cs)
 {
        int val, eval;
 
@@ -244,8+245,8 @@ clear_pending_hscx_ints(struct IsdnCardState *cs))
        cs->BC_Write_Reg(cs, 1, HSCX_MASK, 0xFF);
 }
 
-HISAX_INITFUNC(void
-inithscx(struct IsdnCardState *cs))
+void __init
+inithscx(struct IsdnCardState *cs)
 {
        cs->bcs[0].BC_SetStack = setstack_hscx;
        cs->bcs[1].BC_SetStack = setstack_hscx;
@@ -261,8+262,8 @@ inithscx(struct IsdnCardState *cs))
        modehscx(cs->bcs + 1, 0, 0);
 }
 
-HISAX_INITFUNC(void
-inithscxisac(struct IsdnCardState *cs, int part))
+void __init
+inithscxisac(struct IsdnCardState *cs, int part)
 {
        if (part & 1) {
                clear_pending_isac_ints(cs);
index 581cf92..c28f070 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: hscx_irq.c,v 1.15 2000/06/26 08:59:13 keil Exp $
+/* $Id: hscx_irq.c,v 1.16 2000/11/19 17:02:47 kai Exp $
  *
  * hscx_irq.c     low level b-channel stuff for Siemens HSCX
  *
index 5f2740e..fb44959 100644 (file)
@@ -1,4+1,4 @@
-// $Id: icc.c,v 1.3 2000/08/20 07:34:04 keil Exp $
+// $Id: icc.c,v 1.5 2000/11/24 17:05:37 kai Exp $
 //-----------------------------------------------------------------------------
 //
 // ICC specific routines
 //-----------------------------------------------------------------------------
 
 #define __NO_VERSION__
+#include <linux/init.h>
 #include "hisax.h"
 #include "icc.h"
 // #include "arcofi.h"
 #define DBUSY_TIMER_VALUE 80
 #define ARCOFI_USE 0
 
-static char *ICCVer[] HISAX_INITDATA =
+static char *ICCVer[] __initdata =
 {"2070 A1/A3", "2070 B1", "2070 B2/B3", "2070 V2.4"};
 
 void
@@ -622,8+623,8 @@ dbusy_timer_handler(struct IsdnCardState *cs)
        }
 }
 
-HISAX_INITFUNC(void
-initicc(struct IsdnCardState *cs))
+void __init
+initicc(struct IsdnCardState *cs)
 {
        cs->tqueue.routine = (void *) (void *) icc_bh;
        cs->setstack_d = setstack_icc;
@@ -659,8+660,8 @@ initicc(struct IsdnCardState *cs))
        ph_command(cs, ICC_CMD_DI);
 }
 
-HISAX_INITFUNC(void
-clear_pending_icc_ints(struct IsdnCardState *cs))
+void __init
+clear_pending_icc_ints(struct IsdnCardState *cs)
 {
        int val, eval;
 
index 363408a..ae68aea 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: isac.c,v 1.26 2000/06/26 08:59:13 keil Exp $
+/* $Id: isac.c,v 1.28 2000/11/24 17:05:37 kai Exp $
  *
  * isac.c   ISAC specific routines
  *
 #include "arcofi.h"
 #include "isdnl1.h"
 #include <linux/interrupt.h>
+#include <linux/init.h>
 
 #define DBUSY_TIMER_VALUE 80
 #define ARCOFI_USE 1
 
-static char *ISACVer[] HISAX_INITDATA =
+static char *ISACVer[] __devinitdata =
 {"2086/2186 V1.1", "2085 B1", "2085 B2",
  "2085 V2.3"};
 
@@ -620,8+621,8 @@ dbusy_timer_handler(struct IsdnCardState *cs)
        }
 }
 
-HISAX_INITFUNC(void
-initisac(struct IsdnCardState *cs))
+void __devinit
+initisac(struct IsdnCardState *cs)
 {
        cs->tqueue.routine = (void *) (void *) isac_bh;
        cs->setstack_d = setstack_isac;
@@ -656,8+657,8 @@ initisac(struct IsdnCardState *cs))
        cs->writeisac(cs, ISAC_MASK, 0x0);
 }
 
-HISAX_INITFUNC(void
-clear_pending_isac_ints(struct IsdnCardState *cs))
+void __devinit
+clear_pending_isac_ints(struct IsdnCardState *cs)
 {
        int val, eval;
 
index d91f86f..27987e2 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: isar.c,v 1.15 2000/06/26 08:59:13 keil Exp $
+/* $Id: isar.c,v 1.17 2000/11/24 17:05:37 kai Exp $
  *
  * isar.c   ISAR (Siemens PSB 7110) specific routines
  *
@@ -9,6+9,7 @@
  */
 
 #define __NO_VERSION__
+#include <linux/init.h>
 #include "hisax.h"
 #include "isar.h"
 #include "isdnl1.h"
@@ -1782,8+1783,8 @@ isar_auxcmd(struct IsdnCardState *cs, isdn_ctrl *ic) {
        return(0);
 }
 
-HISAX_INITFUNC(void 
-initisar(struct IsdnCardState *cs))
+void __devinit
+initisar(struct IsdnCardState *cs)
 {
        cs->bcs[0].BC_SetStack = setstack_isar;
        cs->bcs[1].BC_SetStack = setstack_isar;
index f523f37..a651035 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: isdnl1.c,v 2.39 2000/06/26 08:59:13 keil Exp $
+/* $Id: isdnl1.c,v 2.41 2000/11/24 17:05:37 kai Exp $
  *
  * isdnl1.c     common low level stuff for Siemens Chipsetbased isdn cards
  *              based on the teles driver from Jan den Ouden
  *
  */
 
-const char *l1_revision = "$Revision: 2.39 $";
+const char *l1_revision = "$Revision: 2.41 $";
 
 #define __NO_VERSION__
+#include <linux/init.h>
 #include "hisax.h"
 #include "isdnl1.h"
 
 #define TIMER3_VALUE 7000
 
-static
-struct Fsm l1fsm_b =
-{NULL, 0, 0, NULL, NULL};
-
-static
-struct Fsm l1fsm_s =
-{NULL, 0, 0, NULL, NULL};
+static struct Fsm l1fsm_b;
+static struct Fsm l1fsm_s;
 
 enum {
        ST_L1_F2,
@@ -584,7+580,7 @@ l1_activate_no(struct FsmInst *fi, int event, void *arg)
        }
 }
 
-static struct FsmNode L1SFnList[] HISAX_INITDATA =
+static struct FsmNode L1SFnList[] __initdata =
 {
        {ST_L1_F3, EV_PH_ACTIVATE, l1_activate_s},
        {ST_L1_F6, EV_PH_ACTIVATE, l1_activate_no},
@@ -669,7+665,7 @@ l1_activate_u(struct FsmInst *fi, int event, void *arg)
        st->l1.l1hw(st, HW_INFO1 | REQUEST, NULL);
 }
 
-static struct FsmNode L1UFnList[] HISAX_INITDATA =
+static struct FsmNode L1UFnList[] __initdata =
 {
        {ST_L1_RESET, EV_DEACT_IND, l1_deact_req_u},
        {ST_L1_DEACT, EV_DEACT_IND, l1_deact_req_u},
@@ -731,7+727,7 @@ l1b_timer_deact(struct FsmInst *fi, int event, void *arg)
        st->l2.l2l1(st, PH_DEACTIVATE | CONFIRM, NULL);
 }
 
-static struct FsmNode L1BFnList[] HISAX_INITDATA =
+static struct FsmNode L1BFnList[] __initdata =
 {
        {ST_L1_NULL, EV_PH_ACTIVATE, l1b_activate},
        {ST_L1_WAIT_ACT, EV_TIMER_ACT, l1b_timer_act},
@@ -741,7+737,8 @@ static struct FsmNode L1BFnList[] HISAX_INITDATA =
 
 #define L1B_FN_COUNT (sizeof(L1BFnList)/sizeof(struct FsmNode))
 
-HISAX_INITFUNC(void Isdnl1New(void))
+void __init
+Isdnl1New(void)
 {
 #ifdef HISAX_UINTERFACE
        l1fsm_u.state_count = L1U_STATE_COUNT;
index c20d0d2..59d461c 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: isdnl2.c,v 2.23 2000/06/26 08:59:13 keil Exp $
+/* $Id: isdnl2.c,v 2.25 2000/11/24 17:05:38 kai Exp $
  *
  * Author       Karsten Keil (keil@isdn4linux.de)
  *              based on the teles driver from Jan den Ouden
  *
  */
 #define __NO_VERSION__
+#include <linux/init.h>
 #include "hisax.h"
 #include "isdnl2.h"
 
-const char *l2_revision = "$Revision: 2.23 $";
+const char *l2_revision = "$Revision: 2.25 $";
 
 static void l2m_debug(struct FsmInst *fi, char *fmt, ...);
 
-static
-struct Fsm l2fsm =
-{NULL, 0, 0, NULL, NULL};
+static struct Fsm l2fsm;
 
 enum {
        ST_L2_1,
@@ -1535,7+1534,7 @@ l2_frame_error_reest(struct FsmInst *fi, int event, void *arg)
        test_and_clear_bit(FLG_L3_INIT, &st->l2.flag);
 }
 
-static struct FsmNode L2FnList[] HISAX_INITDATA =
+static struct FsmNode L2FnList[] __initdata =
 {
        {ST_L2_1, EV_L2_DL_ESTABLISH_REQ, l2_mdl_assign},
        {ST_L2_2, EV_L2_DL_ESTABLISH_REQ, l2_go_st3},
@@ -1832,8+1831,8 @@ releasestack_transl2(struct PStack *st)
 {
 }
 
-HISAX_INITFUNC(void
-Isdnl2New(void))
+void __init
+Isdnl2New(void)
 {
        l2fsm.state_count = L2_STATE_COUNT;
        l2fsm.event_count = L2_EVENT_COUNT;
index b4e4736..c5fa0a0 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: isdnl3.c,v 2.14 2000/06/26 08:59:13 keil Exp $
+/* $Id: isdnl3.c,v 2.17 2000/11/24 17:05:38 kai Exp $
  *
  * Author       Karsten Keil (keil@isdn4linux.de)
  *              based on the teles driver from Jan den Ouden
  *              Fritz Elfert
  *
  */
+
 #define __NO_VERSION__
+#include <linux/init.h>
 #include "hisax.h"
 #include "isdnl3.h"
 #include <linux/config.h>
 
-const char *l3_revision = "$Revision: 2.14 $";
+const char *l3_revision = "$Revision: 2.17 $";
 
-static
-struct Fsm l3fsm =
-{NULL, 0, 0, NULL, NULL};
+static struct Fsm l3fsm;
 
 enum {
        ST_L3_LC_REL,
@@ -303,7+303,10 @@ release_l3_process(struct l3_process *p)
                                if (!skb_queue_len(&p->st->l3.squeue)) {
                                        if (p->debug)
                                                l3_debug(p->st, "release_l3_process: release link");
-                                       FsmEvent(&p->st->l3.l3m, EV_RELEASE_REQ, NULL);
+                                       if (p->st->protocol != ISDN_PTYPE_NI1)
+                                               FsmEvent(&p->st->l3.l3m, EV_RELEASE_REQ, NULL);
+                                       else
+                                               FsmEvent(&p->st->l3.l3m, EV_RELEASE_IND, NULL);
                                } else {
                                        if (p->debug)
                                                l3_debug(p->st, "release_l3_process: not release link");
@@ -521,7+524,7 @@ lc_release_cnf(struct FsmInst *fi, int event, void *arg)
 
 
 /* *INDENT-OFF* */
-static struct FsmNode L3FnList[] HISAX_INITDATA =
+static struct FsmNode L3FnList[] __initdata =
 {
        {ST_L3_LC_REL,          EV_ESTABLISH_REQ,       lc_activate},
        {ST_L3_LC_REL,          EV_ESTABLISH_IND,       lc_connect},
@@ -530,7+533,7 @@ static struct FsmNode L3FnList[] HISAX_INITDATA =
        {ST_L3_LC_ESTAB_WAIT,   EV_RELEASE_REQ,         lc_start_delay},
        {ST_L3_LC_ESTAB_WAIT,   EV_RELEASE_IND,         lc_release_ind},
        {ST_L3_LC_ESTAB,        EV_RELEASE_IND,         lc_release_ind},
-       {ST_L3_LC_ESTAB,        EV_RELEASE_REQ,         lc_start_delay},
+       {ST_L3_LC_ESTAB,        EV_RELEASE_REQ,         lc_start_delay_check},
         {ST_L3_LC_REL_DELAY,    EV_RELEASE_IND,         lc_release_ind},
         {ST_L3_LC_REL_DELAY,    EV_ESTABLISH_REQ,       lc_connected},
         {ST_L3_LC_REL_DELAY,    EV_TIMEOUT,             lc_release_req},
@@ -576,8+579,8 @@ l3_msg(struct PStack *st, int pr, void *arg)
        }
 }
 
-HISAX_INITFUNC(void
-Isdnl3New(void))
+void __init
+Isdnl3New(void)
 {
        l3fsm.state_count = L3_STATE_COUNT;
        l3fsm.event_count = L3_EVENT_COUNT;
index bc08daf..e703ecf 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: isurf.c,v 1.9 2000/06/26 08:59:13 keil Exp $
+/* $Id: isurf.c,v 1.10 2000/11/24 17:05:38 kai Exp $
  *
  * isurf.c  low level stuff for Siemens I-Surf/I-Talk cards
  *
@@ -9,6+9,7 @@
  */
 
 #define __NO_VERSION__
+#include <linux/init.h>
 #include "hisax.h"
 #include "isac.h"
 #include "isar.h"
 
 extern const char *CardType[];
 
-static const char *ISurf_revision = "$Revision: 1.9 $";
+static const char *ISurf_revision = "$Revision: 1.10 $";
 
 #define byteout(addr,val) outb(val,addr)
 #define bytein(addr) inb(addr)
@@ -190,8+191,8 @@ isurf_auxcmd(struct IsdnCardState *cs, isdn_ctrl *ic) {
        return(isar_auxcmd(cs, ic));
 }
 
-__initfunc(int
-setup_isurf(struct IsdnCard *card))
+int __init
+setup_isurf(struct IsdnCard *card)
 {
        int ver;
        struct IsdnCardState *cs = card->cs;
index 01976b8..11e5bd3 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: ix1_micro.c,v 2.9 2000/06/26 08:59:13 keil Exp $
+/* $Id: ix1_micro.c,v 2.10 2000/11/24 17:05:38 kai Exp $
  *
  * ix1_micro.c  low level stuff for ITK ix1-micro Rev.2 isdn cards
  *              derived from the original file teles3.c from Karsten Keil
 
 
 #define __NO_VERSION__
+#include <linux/init.h>
 #include "hisax.h"
 #include "isac.h"
 #include "hscx.h"
 #include "isdnl1.h"
 
 extern const char *CardType[];
-const char *ix1_revision = "$Revision: 2.9 $";
+const char *ix1_revision = "$Revision: 2.10 $";
 
 #define byteout(addr,val) outb(val,addr)
 #define bytein(addr) inb(addr)
@@ -243,8+244,8 @@ ix1_card_msg(struct IsdnCardState *cs, int mt, void *arg)
 }
 
 
-__initfunc(int
-setup_ix1micro(struct IsdnCard *card))
+int __init
+setup_ix1micro(struct IsdnCard *card)
 {
        struct IsdnCardState *cs = card->cs;
        char tmp[64];
index b2586eb..fc96b6e 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: jade.c,v 1.4 2000/06/26 08:59:14 keil Exp $
+/* $Id: jade.c,v 1.6 2000/11/24 17:05:38 kai Exp $
  *
  * jade.c   JADE stuff (derived from original hscx.c)
  *
 
 
 #define __NO_VERSION__
+#include <linux/init.h>
 #include "hisax.h"
 #include "hscx.h"
 #include "jade.h"
 #include <linux/interrupt.h>
 
 
-HISAX_INITFUNC(int
-JadeVersion(struct IsdnCardState *cs, char *s))
+int __init
+JadeVersion(struct IsdnCardState *cs, char *s)
 {
     int ver,i;
     int to = 50;
@@ -262,8+263,8 @@ setstack_jade(struct PStack *st, struct BCState *bcs)
        return (0);
 }
 
-HISAX_INITFUNC(void
-clear_pending_jade_ints(struct IsdnCardState *cs))
+void __init
+clear_pending_jade_ints(struct IsdnCardState *cs)
 {
        int val;
        char tmp[64];
@@ -288,8+289,8 @@ clear_pending_jade_ints(struct IsdnCardState *cs))
        cs->BC_Write_Reg(cs, 1, jade_HDLC_IMR, 0xF8);
 }
 
-HISAX_INITFUNC(void
-initjade(struct IsdnCardState *cs))
+void __init
+initjade(struct IsdnCardState *cs)
 {
        cs->bcs[0].BC_SetStack = setstack_jade;
        cs->bcs[1].BC_SetStack = setstack_jade;
index beb10d2..d9d2898 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: jade_irq.c,v 1.4 2000/06/26 08:59:14 keil Exp $
+/* $Id: jade_irq.c,v 1.5 2000/11/19 17:02:48 kai Exp $
  *
  * jade_irq.c   Low level JADE IRQ stuff (derived from original hscx_irq.c)
  *
index 831d788..fcb34f4 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: l3_1tr6.c,v 2.12 2000/08/20 07:31:30 keil Exp $
+/* $Id: l3_1tr6.c,v 2.13 2000/11/19 17:02:48 kai Exp $
  *
  *  German 1TR6 D-channel protocol
  *
 #include <linux/ctype.h>
 
 extern char *HiSax_getrev(const char *revision);
-const char *l3_1tr6_revision = "$Revision: 2.12 $";
+const char *l3_1tr6_revision = "$Revision: 2.13 $";
 
 #define MsgHead(ptr, cref, mty, dis) \
        *ptr++ = dis; \
index 8778bf3..cc714ce 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: l3dss1.c,v 2.29 2000/06/26 08:59:14 keil Exp $
+/* $Id: l3dss1.c,v 2.30 2000/11/19 17:02:48 kai Exp $
  *
  * EURO/DSS1 D-channel protocol
  *
 #include <linux/config.h>
 
 extern char *HiSax_getrev(const char *revision);
-const char *dss1_revision = "$Revision: 2.29 $";
+const char *dss1_revision = "$Revision: 2.30 $";
 
 #define EXT_BEARER_CAPS 1
 
index ec28539..0bbe83a 100644 (file)
@@ -443,6+443,27 @@ l3ni1_message(struct l3_process *pc, u_char mt)
 }
 
 static void
+l3ni1_message_plus_chid(struct l3_process *pc, u_char mt)
+/* sends an l3 messages plus channel id -  added GE 05/09/00 */
+{
+       struct sk_buff *skb;
+       u_char tmp[16];
+       u_char *p = tmp;
+       u_char chid;
+
+       chid = (u_char)(pc->para.bchannel & 0x03) | 0x88;
+       MsgHead(p, pc->callref, mt);
+       *p++ = IE_CHANNEL_ID;
+       *p++ = 0x01;
+       *p++ = chid;
+
+       if (!(skb = l3_alloc_skb(7)))
+               return;
+       memcpy(skb_put(skb, 7), tmp, 7);
+       l3_msg(pc->st, DL_DATA | REQUEST, skb);
+}
+
+static void
 l3ni1_message_cause(struct l3_process *pc, u_char mt, u_char cause)
 {
        struct sk_buff *skb;
@@ -1175,9+1196,9 @@ l3ni1_setup_req(struct l3_process *pc, u_char pr,
        case 1:                   /* Telephony                                */
                *p++ = IE_BEARER;
                *p++ = 0x3;       /* Length                                   */
-               *p++ = 0x90;      /* Coding Std. CCITT, 3.1 kHz audio         */
+               *p++ = 0x90;      /* 3.1khz Audio                             */
                *p++ = 0x90;      /* Circuit-Mode 64kbps                      */
-               *p++ = 0xa3;      /* A-Law Audio                              */
+               *p++ = 0xa2;      /* u-Law Audio                              */
                break;
        case 5:                   /* Datatransmission 64k, BTX                */
        case 7:                   /* Datatransmission 64k                     */
@@ -1240,7+1261,7 @@ l3ni1_setup_req(struct l3_process *pc, u_char pr,
                        *p++ = 0x3;     /* Length                                   */
                        *p++ = 0x90;    /* Coding Std. CCITT, 3.1 kHz audio         */
                        *p++ = 0x90;    /* Circuit-Mode 64kbps                      */
-                       *p++ = 0xa3;    /* A-Law Audio                              */
+                       *p++ = 0xa2;    /* u-Law Audio                              */
                        break;
                case 5:                 /* Datatransmission 64k, BTX                */
                case 7:                 /* Datatransmission 64k                     */
@@ -1641,7+1662,9 @@ l3ni1_setup_rsp(struct l3_process *pc, u_char pr,
            return;
          }
        newl3state(pc, 8);
-       l3ni1_message(pc, MT_CONNECT);
+       if (pc->debug & L3_DEB_WARN)
+               l3_debug(pc->st, "D-chan connect for waiting call");
+       l3ni1_message_plus_chid(pc, MT_CONNECT); /* GE 05/09/00 */
        L3DelTimer(&pc->timer);
        L3AddTimer(&pc->timer, T313, CC_T313);
 }
@@ -2544,6+2567,7 @@ l3ni1_global_restart(struct l3_process *pc, u_char pr, void *arg)
                        up->st->lli.l4l3(up->st, CC_RESTART | REQUEST, up);
                else if (up->para.bchannel == chan)
                        up->st->lli.l4l3(up->st, CC_RESTART | REQUEST, up);
+
                up = up->next;
        }
        p = tmp;
index 24c919a..9fd7ce8 100644 (file)
@@ -1,4+1,4 @@
-// $Id: l3ni1.h,v 2.2 2000/06/26 08:59:14 keil Exp $
+// $Id: l3ni1.h,v 2.3 2000/11/16 13:50:43 keil Exp $
 //-----------------------------------------------------------------------------
 //
 // NI1 D-channel protocol
 // driver written by Karsten Keil et al.  Thanks also for the 
 // code provided by Ragnar Paulson.
 //
+//
 // This file is (c) under GNU PUBLIC LICENSE
 //
 //-----------------------------------------------------------------------------
 #define T313   4000
 #define T318   4000
 #define T319   4000
-#define TSPID  2000
+#define TSPID  5000 /* was 2000 - Guy Ellis */
 
 /*
  * Message-Types
index db5d2ee..abb5448 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: mic.c,v 1.9 2000/06/26 08:59:14 keil Exp $
+/* $Id: mic.c,v 1.10 2000/11/24 17:05:38 kai Exp $
  *
  * mic.c  low level stuff for mic cards
  *
  */
 
 #define __NO_VERSION__
+#include <linux/init.h>
 #include "hisax.h"
 #include "isac.h"
 #include "hscx.h"
 
 extern const char *CardType[];
 
-const char *mic_revision = "$Revision: 1.9 $";
+const char *mic_revision = "$Revision: 1.10 $";
 
 #define byteout(addr,val) outb(val,addr)
 #define bytein(addr) inb(addr)
@@ -198,8+199,8 @@ mic_card_msg(struct IsdnCardState *cs, int mt, void *arg)
        return(0);
 }
 
-__initfunc(int
-setup_mic(struct IsdnCard *card))
+int __init
+setup_mic(struct IsdnCard *card)
 {
        int bytecnt;
        struct IsdnCardState *cs = card->cs;
index 6be8a49..c460ffa 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: netjet.c,v 1.20 2000/06/26 08:59:14 keil Exp $
+/* $Id: netjet.c,v 1.24 2000/11/24 17:05:38 kai Exp $
  *
  * netjet.c     low level stuff for Traverse Technologie NETJet ISDN cards
  *
  */
 
 #define __NO_VERSION__
+#include <linux/config.h>
+#include <linux/init.h>
 #include "hisax.h"
 #include "isac.h"
 #include "hscx.h"
 #define virt_to_bus (u_int)
 #endif
 
-const char *NETjet_revision = "$Revision: 1.20 $";
+const char *NETjet_revision = "$Revision: 1.24 $";
 
 /* Interface functions */
 
@@ -176,7+178,8 @@ mode_tiger(struct BCState *bcs, int mode, int bc)
                                cs->hw.njet.dmactrl = 1;
                                byteout(cs->hw.njet.base + NETJET_DMACTRL,
                                        cs->hw.njet.dmactrl);
-                               byteout(cs->hw.njet.base + NETJET_IRQMASK0, 0x3f);
+                               byteout(cs->hw.njet.base + NETJET_IRQMASK0, 0x0f);
+                       /* was 0x3f now 0x0f for TJ300 and TJ320  GE 13/07/00 */
                        }
                        bcs->hw.tiger.sendp = bcs->hw.tiger.send;
                        bcs->hw.tiger.free = NETJET_DMA_TXSIZE;
@@ -214,6+217,8 @@ static void printframe(struct IsdnCardState *cs, u_char *buf, int count, char *s
        }
 }
 
+// macro for 64k
+
 #define MAKE_RAW_BYTE for (j=0; j<8; j++) { \
                        bitcnt++;\
                        s_val >>= 1;\
@@ -242,6+247,7 @@ static void printframe(struct IsdnCardState *cs, u_char *buf, int count, char *s
                }
 
 static int make_raw_data(struct BCState *bcs) {
+// this make_raw is for 64k
        register u_int i,s_cnt=0;
        register u_char j;
        register u_char val;
@@ -297,6+303,113 @@ static int make_raw_data(struct BCState *bcs) {
        return(0);
 }
 
+// macro for 56k
+
+#define MAKE_RAW_BYTE_56K for (j=0; j<8; j++) { \
+                       bitcnt++;\
+                       s_val >>= 1;\
+                       if (val & 1) {\
+                               s_one++;\
+                               s_val |= 0x80;\
+                       } else {\
+                               s_one = 0;\
+                               s_val &= 0x7f;\
+                       }\
+                       if (bitcnt==7) {\
+                               s_val >>= 1;\
+                               s_val |= 0x80;\
+                               bcs->hw.tiger.sendbuf[s_cnt++] = s_val;\
+                               bitcnt = 0;\
+                       }\
+                       if (s_one == 5) {\
+                               s_val >>= 1;\
+                               s_val &= 0x7f;\
+                               bitcnt++;\
+                               s_one = 0;\
+                       }\
+                       if (bitcnt==7) {\
+                               s_val >>= 1;\
+                               s_val |= 0x80;\
+                               bcs->hw.tiger.sendbuf[s_cnt++] = s_val;\
+                               bitcnt = 0;\
+                       }\
+                       val >>= 1;\
+               }
+
+static int make_raw_data_56k(struct BCState *bcs) {
+// this make_raw is for 56k
+       register u_int i,s_cnt=0;
+       register u_char j;
+       register u_char val;
+       register u_char s_one = 0;
+       register u_char s_val = 0;
+       register u_char bitcnt = 0;
+       u_int fcs;
+
+       if (!bcs->tx_skb) {
+               debugl1(bcs->cs, "tiger make_raw_56k: NULL skb");
+               return(1);
+       }
+       val = HDLC_FLAG_VALUE;
+       for (j=0; j<8; j++) {
+               bitcnt++;
+               s_val >>= 1;
+               if (val & 1)
+                       s_val |= 0x80;
+               else
+                       s_val &= 0x7f;
+               if (bitcnt==7) {
+                       s_val >>= 1;
+                       s_val |= 0x80;
+                       bcs->hw.tiger.sendbuf[s_cnt++] = s_val;
+                       bitcnt = 0;
+               }
+               val >>= 1;
+       };
+       fcs = PPP_INITFCS;
+       for (i=0; i<bcs->tx_skb->len; i++) {
+               val = bcs->tx_skb->data[i];
+               fcs = PPP_FCS (fcs, val);
+               MAKE_RAW_BYTE_56K;
+       }
+       fcs ^= 0xffff;
+       val = fcs & 0xff;
+       MAKE_RAW_BYTE_56K;
+       val = (fcs>>8) & 0xff;
+       MAKE_RAW_BYTE_56K;
+       val = HDLC_FLAG_VALUE;
+       for (j=0; j<8; j++) {
+               bitcnt++;
+               s_val >>= 1;
+               if (val & 1)
+                       s_val |= 0x80;
+               else
+                       s_val &= 0x7f;
+               if (bitcnt==7) {
+                       s_val >>= 1;
+                       s_val |= 0x80;
+                       bcs->hw.tiger.sendbuf[s_cnt++] = s_val;
+                       bitcnt = 0;
+               }
+               val >>= 1;
+       }
+       if (bcs->cs->debug & L1_DEB_HSCX)
+               debugl1(bcs->cs,"tiger make_raw_56k: in %ld out %d.%d",
+                       bcs->tx_skb->len, s_cnt, bitcnt);
+       if (bitcnt) {
+               while (8>bitcnt++) {
+                       s_val >>= 1;
+                       s_val |= 0x80;
+               }
+               bcs->hw.tiger.sendbuf[s_cnt++] = s_val;
+               bcs->hw.tiger.sendbuf[s_cnt++] = 0xff;  // NJ<->NJ thoughput bug fix
+       }
+       bcs->hw.tiger.sendcnt = s_cnt;
+       bcs->tx_cnt -= bcs->tx_skb->len;
+       bcs->hw.tiger.sp = bcs->hw.tiger.sendbuf;
+       return(0);
+}
+
 static void got_frame(struct BCState *bcs, int count) {
        struct sk_buff *skb;
                
@@ -505,9+618,10 @@ void read_tiger(struct IsdnCardState *cs) {
                p = cs->bcs[0].hw.tiger.rec + NETJET_DMA_RXSIZE - 1;
        else
                p = cs->bcs[0].hw.tiger.rec + cnt - 1;
-       if (cs->bcs[0].mode == L1_MODE_HDLC)
+       if ((cs->bcs[0].mode == L1_MODE_HDLC) || (cs->bcs[0].mode == L1_MODE_HDLC_56K))
                read_raw(cs->bcs, p, cnt);
-       if (cs->bcs[1].mode == L1_MODE_HDLC)
+
+       if ((cs->bcs[1].mode == L1_MODE_HDLC) || (cs->bcs[1].mode == L1_MODE_HDLC_56K))
                read_raw(cs->bcs + 1, p, cnt);
        cs->hw.njet.irqstat0 &= ~NETJET_IRQM0_READ;
 }
@@ -682,9+796,9 @@ void write_tiger(struct IsdnCardState *cs) {
                p = cs->bcs[0].hw.tiger.send + NETJET_DMA_TXSIZE - 1;
        else
                p = cs->bcs[0].hw.tiger.send + cnt - 1;
-       if (cs->bcs[0].mode == L1_MODE_HDLC)
+       if ((cs->bcs[0].mode == L1_MODE_HDLC) || (cs->bcs[0].mode == L1_MODE_HDLC_56K))
                write_raw(cs->bcs, p, cnt);
-       if (cs->bcs[1].mode == L1_MODE_HDLC)
+       if ((cs->bcs[1].mode == L1_MODE_HDLC) || (cs->bcs[1].mode == L1_MODE_HDLC_56K))
                write_raw(cs->bcs + 1, p, cnt);
        cs->hw.njet.irqstat0 &= ~NETJET_IRQM0_WRITE;
 }
@@ -807,8+921,8 @@ setstack_tiger(struct PStack *st, struct BCState *bcs)
 }
 
  
-__initfunc(void
-inittiger(struct IsdnCardState *cs))
+void __init
+inittiger(struct IsdnCardState *cs)
 {
        if (!(cs->bcs[0].hw.tiger.send = kmalloc(NETJET_DMA_TXSIZE * sizeof(unsigned int),
                GFP_KERNEL | GFP_DMA))) {
index d7dede4..9d9c533 100644 (file)
@@ -1,4+1,4 @@
-// $Id: netjet.h,v 2.3 2000/06/26 08:59:14 keil Exp $
+// $Id: netjet.h,v 2.5 2000/11/24 17:05:38 kai Exp $
 //-----------------------------------------------------------------------------
 //
 // NETjet common header file
@@ -72,6+72,6 @@ void write_tiger(struct IsdnCardState *cs);
 
 void netjet_fill_dma(struct BCState *bcs);
 void netjet_interrupt(int intno, void *dev_id, struct pt_regs *regs);
-__initfunc(void inittiger(struct IsdnCardState *cs));
+void inittiger(struct IsdnCardState *cs);
 void release_io_netjet(struct IsdnCardState *cs);
 
index 4428483..ca707ea 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: niccy.c,v 1.12 2000/06/26 08:59:14 keil Exp $
+/* $Id: niccy.c,v 1.15 2000/11/24 17:05:38 kai Exp $
  *
  * niccy.c  low level stuff for Dr. Neuhaus NICCY PnP and NICCY PCI and
  *          compatible (SAGEM cybermodem)
 
 #define __NO_VERSION__
 #include <linux/config.h>
+#include <linux/init.h>
 #include "hisax.h"
 #include "isac.h"
 #include "hscx.h"
 #include <linux/pci.h>
 
 extern const char *CardType[];
-const char *niccy_revision = "$Revision: 1.12 $";
+const char *niccy_revision = "$Revision: 1.15 $";
 
 #define byteout(addr,val) outb(val,addr)
 #define bytein(addr) inb(addr)
@@ -240,10+241,10 @@ niccy_card_msg(struct IsdnCardState *cs, int mt, void *arg)
        return(0);
 }
 
-static         struct pci_dev *niccy_dev __initdata = NULL;
+static struct pci_dev *niccy_dev __initdata;
 
-__initfunc(int
-setup_niccy(struct IsdnCard *card))
+int __init
+setup_niccy(struct IsdnCard *card)
 {
        struct IsdnCardState *cs = card->cs;
        char tmp[64];
index 1ff42d3..ea74ed1 100644 (file)
@@ -1,9+1,11 @@
-// $Id: nj_s.c,v 2.3 2000/06/26 08:59:14 keil Exp $
+// $Id: nj_s.c,v 2.7 2000/11/24 17:05:38 kai Exp $
 //
 // This file is (c) under GNU PUBLIC LICENSE
 //
+
 #define __NO_VERSION__
 #include <linux/config.h>
+#include <linux/init.h>
 #include "hisax.h"
 #include "isac.h"
 #include "isdnl1.h"
 #include <linux/ppp_defs.h>
 #include "netjet.h"
 
-const char *NETjet_S_revision = "$Revision: 2.3 $";
+const char *NETjet_S_revision = "$Revision: 2.7 $";
 
 static u_char dummyrr(struct IsdnCardState *cs, int chan, u_char off)
 {
@@ -47,28+49,37 @@ netjet_s_interrupt(int intno, void *dev_id, struct pt_regs *regs)
        }
        save_flags(flags);
        cli();
-       if ((sval = bytein(cs->hw.njet.base + NETJET_IRQSTAT0))) {
+       /* start new code 13/07/00 GE */
+       /* set bits in sval to indicate which page is free */
+       if (inl(cs->hw.njet.base + NETJET_DMA_WRITE_ADR) <
+               inl(cs->hw.njet.base + NETJET_DMA_WRITE_IRQ))
+               /* the 2nd write page is free */
+               sval = 0x08;
+       else    /* the 1st write page is free */
+               sval = 0x04;
+       if (inl(cs->hw.njet.base + NETJET_DMA_READ_ADR) <
+               inl(cs->hw.njet.base + NETJET_DMA_READ_IRQ))
+               /* the 2nd read page is free */
+               sval = sval | 0x02;
+       else    /* the 1st read page is free */
+               sval = sval | 0x01;
+       if (sval != cs->hw.njet.last_is0) /* we have a DMA interrupt */
+       {
                if (test_and_set_bit(FLG_LOCK_ATOMIC, &cs->HW_Flags)) {
                        restore_flags(flags);
                        return;
                }
                cs->hw.njet.irqstat0 = sval;
                restore_flags(flags);
-/*             debugl1(cs, "tiger: ist0 %x  %x %x  %x/%x  pulse=%d",
-                       sval, 
-                       bytein(cs->hw.njet.base + NETJET_DMACTRL),
-                       bytein(cs->hw.njet.base + NETJET_IRQMASK0),
-                       inl(cs->hw.njet.base + NETJET_DMA_READ_ADR),
-                       inl(cs->hw.njet.base + NETJET_DMA_WRITE_ADR),
-                       bytein(cs->hw.njet.base + NETJET_PULSE_CNT));
-*/
-/*             cs->hw.njet.irqmask0 = ((0x0f & cs->hw.njet.irqstat0) ^ 0x0f) | 0x30;
-*/             byteout(cs->hw.njet.base + NETJET_IRQSTAT0, cs->hw.njet.irqstat0);
-/*             byteout(cs->hw.njet.base + NETJET_IRQMASK0, cs->hw.njet.irqmask0);
-*/             if (cs->hw.njet.irqstat0 & NETJET_IRQM0_READ)
+               if ((cs->hw.njet.irqstat0 & NETJET_IRQM0_READ) !=
+                       (cs->hw.njet.last_is0 & NETJET_IRQM0_READ))
+                       /* we have a read dma int */
                        read_tiger(cs);
-               if (cs->hw.njet.irqstat0 & NETJET_IRQM0_WRITE)
+               if (cs->hw.njet.irqstat0 & NETJET_IRQM0_WRITE) !=
+                       (cs->hw.njet.last_is0 & NETJET_IRQM0_WRITE))
+                       /* we have a write dma int */
                        write_tiger(cs);
+               /* end new code 13/07/00 GE */
                test_and_clear_bit(FLG_LOCK_ATOMIC, &cs->HW_Flags);
        } else
                restore_flags(flags);
@@ -93,7+104,8 @@ reset_netjet_s(struct IsdnCardState *cs)
        byteout(cs->hw.njet.base + NETJET_CTRL, cs->hw.njet.ctrl_reg);
        set_current_state(TASK_UNINTERRUPTIBLE);
        schedule_timeout((10*HZ)/1000); /* Timeout 10ms */
-       cs->hw.njet.ctrl_reg = 0x00;  /* Reset Off and status read clear */
+       cs->hw.njet.ctrl_reg = 0x40;  /* Reset Off and status read clear */
+       /* now edge triggered for TJ320 GE 13/07/00 */
        byteout(cs->hw.njet.base + NETJET_CTRL, cs->hw.njet.ctrl_reg);
        set_current_state(TASK_UNINTERRUPTIBLE);
        schedule_timeout((10*HZ)/1000); /* Timeout 10ms */
@@ -128,17+140,16 @@ NETjet_S_card_msg(struct IsdnCardState *cs, int mt, void *arg)
        return(0);
 }
 
-static         struct pci_dev *dev_netjet __initdata = NULL;
+static struct pci_dev *dev_netjet __initdata;
 
-__initfunc(int
-setup_netjet_s(struct IsdnCard *card))
+int __init
+setup_netjet_s(struct IsdnCard *card)
 {
        int bytecnt;
        struct IsdnCardState *cs = card->cs;
        char tmp[64];
        long flags;
-#if CONFIG_PCI
-#endif
+
 #ifdef __BIG_ENDIAN
 #error "not running on big endian machines now"
 #endif
index 57de4b4..8fdea1a 100644 (file)
 #include <linux/ppp_defs.h>
 #include "netjet.h"
 
-const char *NETjet_U_revision = "$Revision: 2.4 $";
+const char *NETjet_U_revision = "$Revision: 2.8 $";
 
 static u_char dummyrr(struct IsdnCardState *cs, int chan, u_char off)
 {
@@ -94,7+94,8 @@ reset_netjet_u(struct IsdnCardState *cs)
        byteout(cs->hw.njet.base + NETJET_CTRL, cs->hw.njet.ctrl_reg);
        set_current_state(TASK_UNINTERRUPTIBLE);
        schedule_timeout((10*HZ)/1000); /* Timeout 10ms */
-       cs->hw.njet.ctrl_reg = 0x00;  /* Reset Off and status read clear */
+       cs->hw.njet.ctrl_reg = 0x40;  /* Reset Off and status read clear */
+       /* now edge triggered for TJ320 GE 13/07/00 */
        byteout(cs->hw.njet.base + NETJET_CTRL, cs->hw.njet.ctrl_reg);
        set_current_state(TASK_UNINTERRUPTIBLE);
        schedule_timeout((10*HZ)/1000); /* Timeout 10ms */
@@ -130,10+131,10 @@ NETjet_U_card_msg(struct IsdnCardState *cs, int mt, void *arg)
        return(0);
 }
 
-static         struct pci_dev *dev_netjet __initdata = NULL;
+static struct pci_dev *dev_netjet __initdata;
 
-__initfunc(int
-setup_netjet_u(struct IsdnCard *card))
+int __init
+setup_netjet_u(struct IsdnCard *card)
 {
        int bytecnt;
        struct IsdnCardState *cs = card->cs;
@@ -155,7+156,7 @@ setup_netjet_u(struct IsdnCard *card))
        for ( ;; )
        {
                if (!pci_present()) {
-                       printk(KERN_ERR "NETspider-U: no PCI bus present\n");
+                       printk(KERN_ERR "Netjet: no PCI bus present\n");
                        return(0);
                }
                if ((dev_netjet = pci_find_device(PCI_VENDOR_ID_TIGERJET,
@@ -241,7+242,7 @@ setup_netjet_u(struct IsdnCard *card))
                       cs->hw.njet.base + bytecnt);
                return (0);
        } else {
-               request_region(cs->hw.njet.base, bytecnt, "netjet-u isdn");
+               request_region(cs->hw.njet.base, bytecnt, "netspider-u isdn");
        }
        reset_netjet_u(cs);
        cs->readisac  = &NETjet_ReadIC;
index 6b102bc..c29e765 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: s0box.c,v 2.3 2000/06/26 08:59:14 keil Exp $
+/* $Id: s0box.c,v 2.4 2000/11/24 17:05:38 kai Exp $
  *
  * s0box.c      low level stuff for Creatix S0BOX
  *
  *
  */
 #define __NO_VERSION__
+#include <linux/init.h>
 #include "hisax.h"
 #include "isac.h"
 #include "hscx.h"
 #include "isdnl1.h"
 
 extern const char *CardType[];
-const char *s0box_revision = "$Revision: 2.3 $";
+const char *s0box_revision = "$Revision: 2.4 $";
 
 static inline void
 writereg(unsigned int padr, signed int addr, u_char off, u_char val) {
@@ -213,8+214,8 @@ S0Box_card_msg(struct IsdnCardState *cs, int mt, void *arg)
        return(0);
 }
 
-__initfunc(int
-setup_s0box(struct IsdnCard *card))
+int __init
+setup_s0box(struct IsdnCard *card)
 {
        struct IsdnCardState *cs = card->cs;
        char tmp[64];
index af2023b..8f4b7c4 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: saphir.c,v 1.7 2000/06/26 08:59:14 keil Exp $
+/* $Id: saphir.c,v 1.8 2000/11/24 17:05:38 kai Exp $
  *
  * saphir.c low level stuff for HST Saphir 1
  *
 
 
 #define __NO_VERSION__
+#include <linux/init.h>
 #include "hisax.h"
 #include "isac.h"
 #include "hscx.h"
 #include "isdnl1.h"
 
 extern const char *CardType[];
-static char *saphir_rev = "$Revision: 1.7 $";
+static char *saphir_rev = "$Revision: 1.8 $";
 
 #define byteout(addr,val) outb(val,addr)
 #define bytein(addr) inb(addr)
@@ -253,8+254,8 @@ saphir_card_msg(struct IsdnCardState *cs, int mt, void *arg)
 }
 
 
-__initfunc(int
-setup_saphir(struct IsdnCard *card))
+int __init
+setup_saphir(struct IsdnCard *card)
 {
        struct IsdnCardState *cs = card->cs;
        char tmp[64];
index 192c496..cea237f 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: sedlbauer.c,v 1.23 2000/06/26 08:59:14 keil Exp $
+/* $Id: sedlbauer.c,v 1.25 2000/11/24 17:05:38 kai Exp $
  *
  * sedlbauer.c  low level stuff for Sedlbauer cards
  *              includes support for the Sedlbauer speed star (speed star II),
 */
 
 #define __NO_VERSION__
+#include <linux/init.h>
 #include <linux/config.h>
 #include "hisax.h"
 #include "isac.h"
 
 extern const char *CardType[];
 
-const char *Sedlbauer_revision = "$Revision: 1.23 $";
+const char *Sedlbauer_revision = "$Revision: 1.25 $";
 
 const char *Sedlbauer_Types[] =
        {"None", "speed card/win", "speed star", "speed fax+", 
@@ -534,10+535,10 @@ Sedl_card_msg(struct IsdnCardState *cs, int mt, void *arg)
        return(0);
 }
 
-static         struct pci_dev *dev_sedl __initdata = NULL;
+static         struct pci_dev *dev_sedl __devinitdata;
 
-__initfunc(int
-setup_sedlbauer(struct IsdnCard *card))
+int __devinit
+setup_sedlbauer(struct IsdnCard *card)
 {
        int bytecnt, ver, val;
        struct IsdnCardState *cs = card->cs;
index 6b64077..b72ff03 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: sportster.c,v 1.13 2000/06/26 08:59:14 keil Exp $
+/* $Id: sportster.c,v 1.14 2000/11/24 17:05:38 kai Exp $
  *
  * sportster.c     low level stuff for USR Sportster internal TA
  *
  *
  */
 #define __NO_VERSION__
+#include <linux/init.h>
 #include "hisax.h"
 #include "isac.h"
 #include "hscx.h"
 #include "isdnl1.h"
 
 extern const char *CardType[];
-const char *sportster_revision = "$Revision: 1.13 $";
+const char *sportster_revision = "$Revision: 1.14 $";
 
 #define byteout(addr,val) outb(val,addr)
 #define bytein(addr) inb(addr)
@@ -181,8+182,8 @@ Sportster_card_msg(struct IsdnCardState *cs, int mt, void *arg)
        return(0);
 }
 
-__initfunc(int
-get_io_range(struct IsdnCardState *cs))
+static int __init
+get_io_range(struct IsdnCardState *cs)
 {
        int i, j, adr;
        
@@ -207,8+208,8 @@ get_io_range(struct IsdnCardState *cs))
        }
 }
 
-__initfunc(int
-setup_sportster(struct IsdnCard *card))
+int __init
+setup_sportster(struct IsdnCard *card)
 {
        struct IsdnCardState *cs = card->cs;
        char tmp[64];
index 2a84aa2..41a7446 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: tei.c,v 2.15 2000/06/26 08:59:14 keil Exp $
+/* $Id: tei.c,v 2.17 2000/11/24 17:05:38 kai Exp $
  *
  * Author       Karsten Keil (keil@isdn4linux.de)
  *              based on the teles driver from Jan den Ouden
 #define __NO_VERSION__
 #include "hisax.h"
 #include "isdnl2.h"
+#include <linux/init.h>
 #include <linux/random.h>
 
-const char *tei_revision = "$Revision: 2.15 $";
+const char *tei_revision = "$Revision: 2.17 $";
 
 #define ID_REQUEST     1
 #define ID_ASSIGNED    2
@@ -28,9+29,7 @@ const char *tei_revision = "$Revision: 2.15 $";
 
 #define TEI_ENTITY_ID  0xf
 
-static
-struct Fsm teifsm =
-{NULL, 0, 0, NULL, NULL};
+static struct Fsm teifsm;
 
 void tei_handler(struct PStack *st, u_char pr, struct sk_buff *skb);
 
@@ -430,7+429,7 @@ release_tei(struct IsdnCardState *cs)
        }
 }
 
-static struct FsmNode TeiFnList[] HISAX_INITDATA =
+static struct FsmNode TeiFnList[] __initdata =
 {
        {ST_TEI_NOP, EV_IDREQ, tei_id_request},
        {ST_TEI_NOP, EV_ASSIGN, tei_id_test_dup},
@@ -447,8+446,8 @@ static struct FsmNode TeiFnList[] HISAX_INITDATA =
 
 #define TEI_FN_COUNT (sizeof(TeiFnList)/sizeof(struct FsmNode))
 
-HISAX_INITFUNC(void
-TeiNew(void))
+void __init
+TeiNew(void)
 {
        teifsm.state_count = TEI_STATE_COUNT;
        teifsm.event_count = TEI_EVENT_COUNT;
index 90e0e2e..eb65d3c 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: teleint.c,v 1.13 2000/06/26 08:59:14 keil Exp $
+/* $Id: teleint.c,v 1.14 2000/11/24 17:05:38 kai Exp $
  *
  * teleint.c     low level stuff for TeleInt isdn cards
  *
@@ -9,6+9,7 @@
  */
 
 #define __NO_VERSION__
+#include <linux/init.h>
 #include "hisax.h"
 #include "isac.h"
 #include "hfc_2bs0.h"
 
 extern const char *CardType[];
 
-const char *TeleInt_revision = "$Revision: 1.13 $";
+const char *TeleInt_revision = "$Revision: 1.14 $";
 
 #define byteout(addr,val) outb(val,addr)
 #define bytein(addr) inb(addr)
@@ -260,8+261,8 @@ TeleInt_card_msg(struct IsdnCardState *cs, int mt, void *arg)
        return(0);
 }
 
-__initfunc(int
-setup_TeleInt(struct IsdnCard *card))
+int __init
+setup_TeleInt(struct IsdnCard *card)
 {
        struct IsdnCardState *cs = card->cs;
        char tmp[64];
index c9c5838..efbd152 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: teles0.c,v 2.12 2000/06/26 08:59:14 keil Exp $
+/* $Id: teles0.c,v 2.13 2000/11/24 17:05:38 kai Exp $
  *
  * teles0.c     low level stuff for Teles Memory IO isdn cards
  *              based on the teles driver from Jan den Ouden
  *
  */
 #define __NO_VERSION__
+#include <linux/init.h>
 #include "hisax.h"
 #include "isdnl1.h"
 #include "isac.h"
 
 extern const char *CardType[];
 
-const char *teles0_revision = "$Revision: 2.12 $";
+const char *teles0_revision = "$Revision: 2.13 $";
 
 #define TELES_IOMEM_SIZE       0x400
 #define byteout(addr,val) outb(val,addr)
@@ -260,8+261,8 @@ Teles_card_msg(struct IsdnCardState *cs, int mt, void *arg)
        return(0);
 }
 
-__initfunc(int
-setup_teles0(struct IsdnCard *card))
+int __init
+setup_teles0(struct IsdnCard *card)
 {
        u_char val;
        struct IsdnCardState *cs = card->cs;
index 3cdbfbe..3fdcfb0 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: teles3.c,v 2.16 2000/06/26 08:59:15 keil Exp $
+/* $Id: teles3.c,v 2.17 2000/11/24 17:05:38 kai Exp $
  *
  * teles3.c     low level stuff for Teles 16.3 & PNP isdn cards
  *
  *
  */
 #define __NO_VERSION__
+#include <linux/init.h>
 #include "hisax.h"
 #include "isac.h"
 #include "hscx.h"
 #include "isdnl1.h"
 
 extern const char *CardType[];
-const char *teles3_revision = "$Revision: 2.16 $";
+const char *teles3_revision = "$Revision: 2.17 $";
 
 #define byteout(addr,val) outb(val,addr)
 #define bytein(addr) inb(addr)
@@ -253,8+254,8 @@ Teles_card_msg(struct IsdnCardState *cs, int mt, void *arg)
        return(0);
 }
 
-__initfunc(int
-setup_teles3(struct IsdnCard *card))
+int __devinit
+setup_teles3(struct IsdnCard *card)
 {
        u_char val;
        struct IsdnCardState *cs = card->cs;
index eb17ce3..69c6f84 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: telespci.c,v 2.13 2000/06/26 08:59:15 keil Exp $
+/* $Id: telespci.c,v 2.16 2000/11/24 17:05:38 kai Exp $
  *
  * telespci.c     low level stuff for Teles PCI isdn cards
  *
@@ -9,6+9,7 @@
  *
  */
 #define __NO_VERSION__
+#include <linux/init.h>
 #include <linux/config.h>
 #include "hisax.h"
 #include "isac.h"
 #include <linux/pci.h>
 
 extern const char *CardType[];
-const char *telespci_revision = "$Revision: 2.13 $";
+const char *telespci_revision = "$Revision: 2.16 $";
 
 #define ZORAN_PO_RQ_PEN        0x02000000
 #define ZORAN_PO_WR    0x00800000
@@ -280,10+281,10 @@ TelesPCI_card_msg(struct IsdnCardState *cs, int mt, void *arg)
        return(0);
 }
 
-static         struct pci_dev *dev_tel __initdata = NULL;
+static struct pci_dev *dev_tel __initdata;
 
-__initfunc(int
-setup_telespci(struct IsdnCard *card))
+int __init
+setup_telespci(struct IsdnCard *card)
 {
        struct IsdnCardState *cs = card->cs;
        char tmp[64];
index 0a2e1d4..989e4a3 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: w6692.c,v 1.8 2000/09/07 20:33:30 werner Exp $
+/* $Id: w6692.c,v 1.12 2000/11/24 17:05:38 kai Exp $
  *
  * w6692.c   Winbond W6692 specific routines
  *
  */
 
 #include <linux/config.h>
+#include <linux/init.h>
 #define __NO_VERSION__
 #include "hisax.h"
 #include "w6692.h"
@@ -46,11+47,11 @@ static const PCI_ENTRY id_list[] =
 
 extern const char *CardType[];
 
-const char *w6692_revision = "$Revision: 1.8 $";
+const char *w6692_revision = "$Revision: 1.12 $";
 
 #define DBUSY_TIMER_VALUE 80
 
-static char *W6692Ver[] HISAX_INITDATA =
+static char *W6692Ver[] __initdata =
 {"W6692 V00", "W6692 V01", "W6692 V10",
  "W6692 V11"};
 
@@ -869,7+870,7 @@ setstack_w6692(struct PStack *st, struct BCState *bcs)
        return (0);
 }
 
-HISAX_INITFUNC(void initW6692(struct IsdnCardState *cs, int part))
+void __init initW6692(struct IsdnCardState *cs, int part)
 {
        if (part & 1) {
                cs->tqueue.routine = (void *) (void *) W6692_bh;
@@ -966,11+967,12 @@ w6692_card_msg(struct IsdnCardState *cs, int mt, void *arg)
        return (0);
 }
 
-static int id_idx = 0;
+static int id_idx ;
 
-static struct pci_dev *dev_w6692 __initdata = NULL;
+static struct pci_dev *dev_w6692 __initdata;
 
-__initfunc(int setup_w6692(struct IsdnCard *card))
+int __init
+setup_w6692(struct IsdnCard *card)
 {
        struct IsdnCardState *cs = card->cs;
        char tmp[64];
index 17fc82f..2a2d93b 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: boardergo.c,v 1.4 2000/11/13 22:51:47 kai Exp $
+/* $Id: boardergo.c,v 1.5 2000/11/22 17:13:13 kai Exp $
 
  * Linux driver for HYSDN cards, specific routines for ergo type boards.
  *
index f90d902..ddc0082 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: hycapi.c,v 1.7 2000/11/13 22:51:47 kai Exp $
+/* $Id: hycapi.c,v 1.8 2000/11/22 17:13:13 kai Exp $
  *
  * Linux driver for HYSDN cards, CAPI2.0-Interface.
  * written by Ulrich Albrecht (u.albrecht@hypercope.de) for Hypercope GmbH
 #include "hysdn_defs.h"
 #include <linux/kernelcapi.h>
 
-static char hycapi_revision[]="$Revision: 1.7 $";
+static char hycapi_revision[]="$Revision: 1.8 $";
 
 typedef struct _hycapi_appl {
        unsigned int ctrl_mask;
index 0e4794c..8046f35 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: hysdn_defs.h,v 1.4 2000/11/13 22:51:47 kai Exp $
+/* $Id: hysdn_defs.h,v 1.5 2000/11/22 17:13:13 kai Exp $
 
  * Linux driver for HYSDN cards, global definitions and exported vars and functions.
  * written by Werner Cornelius (werner@titro.de) for Hypercope GmbH
index 09c5952..19f55c0 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: hysdn_proclog.c,v 1.8 2000/11/13 22:51:47 kai Exp $
+/* $Id: hysdn_proclog.c,v 1.9 2000/11/25 17:01:01 kai Exp $
 
  * Linux driver for HYSDN cards, /proc/net filesystem log functions.
  * written by Werner Cornelius (werner@titro.de) for Hypercope GmbH
index 3091c2b..276f44d 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: hysdn_sched.c,v 1.4 2000/11/13 22:51:47 kai Exp $
+/* $Id: hysdn_sched.c,v 1.5 2000/11/22 17:13:13 kai Exp $
 
  * Linux driver for HYSDN cards, scheduler routines for handling exchange card <-> pc.
  *
index 1441328..8c7636b 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: isdn_cards.c,v 1.13 2000/10/28 23:03:38 kai Exp $
+/* $Id: isdn_cards.c,v 1.14 2000/11/23 20:45:14 kai Exp $
 
  * Linux ISDN subsystem, initialization for non-modularized drivers.
  *
@@ -38,11+38,6 @@ extern void pcbit_init(void);
 extern void eicon_init(void);
 #endif
 
-#ifdef CONFIG_ISDN_DRV_AVMB1
-extern void kcapi_init(void);
-extern void capi_init(void);
-extern void capidrv_init(void);
-#endif
 #if CONFIG_ISDN_DRV_ACT2000
 extern void act2000_init(void);
 #endif
@@ -59,11+54,6 @@ isdn_cards_init(void)
 #if CONFIG_ISDN_DRV_PCBIT
        pcbit_init();
 #endif
-#ifdef CONFIG_ISDN_DRV_AVMB1
-       kcapi_init();
-       capi_init();
-       capidrv_init();
-#endif
 #if CONFIG_ISDN_DRV_ACT2000
        act2000_init();
 #endif
index dc117e8..eea8839 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: isdn_common.c,v 1.113 2000/11/01 17:54:00 detabc Exp $
+/* $Id: isdn_common.c,v 1.114 2000/11/25 17:00:59 kai Exp $
 
  * Linux ISDN subsystem, common used functions (linklevel).
  *
 
 isdn_dev *dev;
 
-static char *isdn_revision = "$Revision: 1.113 $";
+static char *isdn_revision = "$Revision: 1.114 $";
 
 extern char *isdn_net_revision;
 extern char *isdn_tty_revision;
index b23506e..3ee6928 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: isdn_common.h,v 1.20 2000/06/16 13:00:27 keil Exp $
+/* $Id: isdn_common.h,v 1.21 2000/11/25 17:00:59 kai Exp $
 
  * header for Linux ISDN subsystem, common used functions and debugging-switches (linklevel).
  *
index 5ad0edc..37991ae 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: isdn_ppp.c,v 1.84 2000/11/13 22:51:46 kai Exp $
+/* $Id: isdn_ppp.c,v 1.85 2000/11/25 17:00:59 kai Exp $
  *
  * Linux ISDN subsystem, functions for synchronous PPP (linklevel).
  *
index 25e1139..ccf9ecf 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: isdn_tty.c,v 1.93 2000/08/05 09:58:26 armin Exp $
+/* $Id: isdn_tty.c,v 1.94 2000/11/25 17:00:59 kai Exp $
 
  * Linux ISDN subsystem, tty functions and AT-command emulator (linklevel).
  *
@@ -66,7+66,7 @@ static int bit2si[8] =
 static int si2bit[8] =
 {4, 1, 4, 4, 4, 4, 4, 4};
 
-char *isdn_tty_revision = "$Revision: 1.93 $";
+char *isdn_tty_revision = "$Revision: 1.94 $";
 
 
 /* isdn_tty_try_read() is called from within isdn_tty_rcv_skb()
index fe24eff..ec318c9 100644 (file)
@@ -384,9+384,8 @@ apne_get_8390_hdr(struct net_device *dev, struct e8390_pkt_hdr *hdr, int ring_pa
     /* This *shouldn't* happen. If it does, it's the last thing you'll see */
     if (ei_status.dmaing) {
        printk("%s: DMAing conflict in ne_get_8390_hdr "
-          "[DMAstat:%d][irqlock:%d][intr:%ld].\n",
-          dev->name, ei_status.dmaing, ei_status.irqlock,
-          dev->interrupt);
+          "[DMAstat:%d][irqlock:%d][intr:%d].\n",
+          dev->name, ei_status.dmaing, ei_status.irqlock, dev->irq);
        return;
     }
 
@@ -433,9+432,8 @@ apne_block_input(struct net_device *dev, int count, struct sk_buff *skb, int rin
     /* This *shouldn't* happen. If it does, it's the last thing you'll see */
     if (ei_status.dmaing) {
        printk("%s: DMAing conflict in ne_block_input "
-          "[DMAstat:%d][irqlock:%d][intr:%ld].\n",
-          dev->name, ei_status.dmaing, ei_status.irqlock,
-          dev->interrupt);
+          "[DMAstat:%d][irqlock:%d][intr:%d].\n",
+          dev->name, ei_status.dmaing, ei_status.irqlock, dev->irq);
        return;
     }
     ei_status.dmaing |= 0x01;
@@ -482,9+480,8 @@ apne_block_output(struct net_device *dev, int count,
     /* This *shouldn't* happen. If it does, it's the last thing you'll see */
     if (ei_status.dmaing) {
        printk("%s: DMAing conflict in ne_block_output."
-          "[DMAstat:%d][irqlock:%d][intr:%ld]\n",
-          dev->name, ei_status.dmaing, ei_status.irqlock,
-          dev->interrupt);
+          "[DMAstat:%d][irqlock:%d][intr:%d]\n",
+          dev->name, ei_status.dmaing, ei_status.irqlock, dev->irq);
        return;
     }
     ei_status.dmaing |= 0x01;
index 3c675b8..e5314ce 100644 (file)
@@ -1,4+1,4 @@
-/* Low-level parallel port routines for the Amiga buildin port
+/* Low-level parallel port routines for the Amiga built-in port
  *
  * Author: Joerg Dorchain <joerg@dorchain.net>
  *
@@ -6,9+6,9 @@
  * lp_intern. code.
  *
  * The built-in Amiga parallel port provides one port at a fixed address
- * with 8 bisdirecttional data lines (D0 - D7) and 3 bidirectional status
- * lines (BUSY, POUT, SEL), 1 output control line /STROBE (raised automatically in
- * hardware when the data register is accessed), and 1 input control line
+ * with 8 bidirectional data lines (D0 - D7) and 3 bidirectional status
+ * lines (BUSY, POUT, SEL), 1 output control line /STROBE (raised automatically
+ * in hardware when the data register is accessed), and 1 input control line
  * /ACK, able to cause an interrupt, but both not directly settable by
  * software.
  */
 #include <asm/setup.h>
 #include <asm/amigahw.h>
 #include <asm/irq.h>
+#include <asm/io.h>
 #include <asm/amigaints.h>
 
 #undef DEBUG
 #ifdef DEBUG
 #define DPRINTK printk
 #else
-static inline void DPRINTK(void *nothing, ...) {}
+#define DPRINTK(x...)  do { } while (0)
 #endif
 
 static struct parport *this_port = NULL;
 
 static void amiga_write_data(struct parport *p, unsigned char data)
 {
-DPRINTK("write_data %c\n",data);
+       DPRINTK("write_data %c\n",data);
        /* Triggers also /STROBE. This behavior cannot be changed */
        ciaa.prb = data;
+       mb();
 }
 
 static unsigned char amiga_read_data(struct parport *p)
@@ -71,13+73,13 @@ static unsigned char control_amiga_to_pc(unsigned char control)
 
 static void amiga_write_control(struct parport *p, unsigned char control)
 {
-DPRINTK("write_control %02x\n",control);
+       DPRINTK("write_control %02x\n",control);
        /* No implementation possible */
 }
        
 static unsigned char amiga_read_control( struct parport *p)
 {
-DPRINTK("read_control \n");
+       DPRINTK("read_control \n");
        return control_amiga_to_pc(0);
 }
 
@@ -85,7+87,7 @@ static unsigned char amiga_frob_control( struct parport *p, unsigned char mask,
 {
        unsigned char old;
 
-DPRINTK("frob_control mask %02x, value %02x\n",mask,val);
+       DPRINTK("frob_control mask %02x, value %02x\n",mask,val);
        old = amiga_read_control(p);
        amiga_write_control(p, (old & ~mask) ^ val);
        return old;
@@ -130,7+132,7 @@ static unsigned char amiga_read_status(struct parport *p)
        unsigned char status;
 
        status = status_amiga_to_pc(ciab.pra & 7);
-DPRINTK("read_status %02x\n", status);
+       DPRINTK("read_status %02x\n", status);
        return status;
 }
 
@@ -154,12+156,14 @@ static void amiga_data_forward(struct parport *p)
 {
        DPRINTK("forward\n");
        ciaa.ddrb = 0xff; /* all pins output */
+       mb();
 }
 
 static void amiga_data_reverse(struct parport *p)
 {
        DPRINTK("reverse\n");
        ciaa.ddrb = 0; /* all pins input */
+       mb();
 }
 
 static void amiga_init_state(struct pardevice *dev, struct parport_state *s)
@@ -172,18+176,22 @@ static void amiga_init_state(struct pardevice *dev, struct parport_state *s)
 
 static void amiga_save_state(struct parport *p, struct parport_state *s)
 {
+       mb();
        s->u.amiga.data = ciaa.prb;
        s->u.amiga.datadir = ciaa.ddrb;
        s->u.amiga.status = ciab.pra & 7;
        s->u.amiga.statusdir = ciab.ddra & 7;
+       mb();
 }
 
 static void amiga_restore_state(struct parport *p, struct parport_state *s)
 {
+       mb();
        ciaa.prb = s->u.amiga.data;
        ciaa.ddrb = s->u.amiga.datadir;
        ciab.pra |= (ciab.pra & 0xf8) | s->u.amiga.status;
        ciab.ddra |= (ciab.ddra & 0xf8) | s->u.amiga.statusdir;
+       mb();
 }
 
 static void amiga_inc_use_count(void)
@@ -238,56+246,58 @@ static struct parport_operations pp_amiga_ops = {
 int __init parport_amiga_init(void)
 {
        struct parport *p;
+       int err;
 
-       if (MACH_IS_AMIGA && AMIGAHW_PRESENT(AMI_PARALLEL)) {
-               if (!request_mem_region(CIAA_PHYSADDR+0x100, 1, "parallel"))
-                       return 0;
-               ciaa.ddrb = 0xff;
-               ciab.ddra &= 0xf8;
-               if (!(p = parport_register_port((unsigned long)&ciaa.prb,
-                                       IRQ_AMIGA_CIAA_FLG, PARPORT_DMA_NONE,
-                                       &pp_amiga_ops))) {
-                       release_mem_region(CIAA_PHYSADDR+0x100, 1);
-                       return 0;
-               }
-               if (!request_irq(IRQ_AMIGA_CIAA_FLG, amiga_interrupt, 0, p->name, p)) {
-                       parport_unregister_port (p);
-                       release_mem_region(CIAA_PHYSADDR+0x100, 1);
-                       return 0;
-               }
-
-               this_port = p;
-               printk(KERN_INFO "%s: Amiga built-in port using irq\n", p->name);
-               /* XXX: set operating mode */
-               parport_proc_register(p);
-
-               parport_announce_port(p);
-
-               return 1;
-
-       }
-       return 0;
-}
+       if (!MACH_IS_AMIGA || !AMIGAHW_PRESENT(AMI_PARALLEL))
+               return -ENODEV;
 
-#ifdef MODULE
+       err = -EBUSY;
+       if (!request_mem_region(CIAA_PHYSADDR-1+0x100, 0x100, "parallel"))
+               goto out_mem;
 
-MODULE_AUTHOR("Joerg Dorchain <joerg@dorchain.net>");
-MODULE_DESCRIPTION("Parport Driver for Amiga builtin Port");
-MODULE_SUPPORTED_DEVICE("Amiga builtin Parallel Port");
+       ciaa.ddrb = 0xff;
+       ciab.ddra &= 0xf8;
+       mb();
 
-int init_module(void)
-{
-       return ! parport_amiga_init();
+       p = parport_register_port((unsigned long)&ciaa.prb, IRQ_AMIGA_CIAA_FLG,
+                                  PARPORT_DMA_NONE, &pp_amiga_ops);
+       if (!p)
+               goto out_port;
+
+       err = request_irq(IRQ_AMIGA_CIAA_FLG, amiga_interrupt, 0, p->name, p);
+       if (err)
+               goto out_irq;
+
+       this_port = p;
+       printk(KERN_INFO "%s: Amiga built-in port using irq\n", p->name);
+       /* XXX: set operating mode */
+       parport_proc_register(p);
+
+       parport_announce_port(p);
+
+       return 0;
+
+out_irq:
+       parport_unregister_port(p);
+out_port:
+       release_mem_region(CIAA_PHYSADDR-1+0x100, 0x100);
+out_mem:
+       return err;
 }
 
-void cleanup_module(void)
+void __exit parport_amiga_exit(void)
 {
        if (this_port->irq != PARPORT_IRQ_NONE)
                free_irq(IRQ_AMIGA_CIAA_FLG, this_port);
        parport_proc_unregister(this_port);
        parport_unregister_port(this_port);
-       release_mem_region(CIAA_PHYSADDR+0x100, 1);
+       release_mem_region(CIAA_PHYSADDR-1+0x100, 0x100);
 }
-#endif
 
 
+MODULE_AUTHOR("Joerg Dorchain <joerg@dorchain.net>");
+MODULE_DESCRIPTION("Parport Driver for Amiga builtin Port");
+MODULE_SUPPORTED_DEVICE("Amiga builtin Parallel Port");
+
+module_init(parport_amiga_init)
+module_exit(parport_amiga_exit)
index 8df0e5a..c6ee0ac 100644 (file)
@@ -113,6+113,46 @@ parport_atari_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 }
 
 static void
+parport_atari_enable_irq(struct parport *p)
+{
+       enable_irq(IRQ_MFP_BUSY);
+}
+
+static void
+parport_atari_disable_irq(struct parport *p)
+{
+       disable_irq(IRQ_MFP_BUSY);
+}
+
+static void
+parport_atari_data_forward(struct parport *p)
+{
+       unsigned long flags;
+
+       save_flags(flags);
+       cli();
+       /* Soundchip port B as output. */
+       sound_ym.rd_data_reg_sel = 7;
+       sound_ym.wd_data = sound_ym.rd_data_reg_sel | 0x40;
+       restore_flags(flags);
+}
+
+static void
+parport_atari_data_reverse(struct parport *p)
+{
+#if 0 /* too dangerous, can kill sound chip */
+       unsigned long flags;
+
+       save_flags(flags);
+       cli();
+       /* Soundchip port B as input. */
+       sound_ym.rd_data_reg_sel = 7;
+       sound_ym.wd_data = sound_ym.rd_data_reg_sel & ~0x40;
+       restore_flags(flags);
+#endif
+}
+
+static void
 parport_atari_inc_use_count(void)
 {
        MOD_INC_USE_COUNT;
@@ -134,11+174,11 @@ static struct parport_operations parport_atari_ops = {
 
        parport_atari_read_status,
 
-       NULL, /* enable_irq - FIXME */
-       NULL, /* disable_irq - FIXME */
+       parport_atari_enable_irq,
+       parport_atari_disable_irq,
 
-       NULL, /* data_forward - FIXME */
-       NULL, /* data_reverse - FIXME */
+       parport_atari_data_forward,
+       parport_atari_data_reverse,
 
        parport_atari_init_state,
        parport_atari_save_state,
@@ -147,18+187,18 @@ static struct parport_operations parport_atari_ops = {
        parport_atari_inc_use_count,
        parport_atari_dec_use_count,
 
-       NULL, /* epp_write_data */
-       NULL, /* epp_read_data */
-       NULL, /* epp_write_addr */
-       NULL, /* epp_read_addr */
+       parport_ieee1284_epp_write_data,
+       parport_ieee1284_epp_read_data,
+       parport_ieee1284_epp_write_addr,
+       parport_ieee1284_epp_read_addr,
 
-       NULL, /* ecp_write_data */
-       NULL, /* ecp_read_data */
-       NULL, /* ecp_write_addr */
+       parport_ieee1284_ecp_write_data,
+       parport_ieee1284_ecp_read_data,
+       parport_ieee1284_ecp_write_addr,
 
-       NULL, /* compat_write_data */
-       NULL, /* nibble_read_data */
-       NULL, /* byte_read_data */
+       parport_ieee1284_write_compat,
+       parport_ieee1284_read_nibble,
+       parport_ieee1284_read_byte,
 };
 
 
index 1904543..51e80b4 100644 (file)
@@ -332,75+332,83 @@ static struct parport_operations pp_mfc3_ops = {
 int __init parport_mfc3_init(void)
 {
        struct parport *p;
-       int pias = 0;
+       int pias;
        struct pia *pp;
        struct zorro_dev *z = NULL;
 
        if (!MACH_IS_AMIGA)
-               return 0;
+               return -ENODEV;
 
        while ((z = zorro_find_device(ZORRO_PROD_BSC_MULTIFACE_III, z))) {
                unsigned long piabase = z->resource.start+PIABASE;
                if (!request_mem_region(piabase, sizeof(struct pia), "PIA"))
                        continue;
+
                pp = (struct pia *)ZTWO_VADDR(piabase);
-               if (pias < MAX_MFC) {
-                       pp->crb = 0;
-                       pp->pddrb = 255; /* all data pins output */
-                       pp->crb = PIA_DDR|32|8;
-                       dummy = pp->pddrb; /* reading clears interrupt */
-                       pp->cra = 0;
-                       pp->pddra = 0xe0; /* /RESET,  /DIR ,/AUTO-FEED output */
-                       pp->cra = PIA_DDR;
-                       pp->ppra = 0; /* reset printer */
-                       udelay(10);
-                       pp->ppra = 128;
-                       if ((p = parport_register_port((unsigned long)pp,
-                               IRQ_AMIGA_PORTS, PARPORT_DMA_NONE,
-                               &pp_mfc3_ops))) {
-                               this_port[pias++] = p;
-                               printk(KERN_INFO "%s: Multiface III port using irq\n", p->name);
-                               /* XXX: set operating mode */
-                               parport_proc_register(p);
-
-                               if (p->irq != PARPORT_IRQ_NONE)
-                                       if (use_cnt++ == 0)
-                                               if (request_irq(IRQ_AMIGA_PORTS, mfc3_interrupt, SA_SHIRQ, p->name, &pp_mfc3_ops))
-                                                       use_cnt--;
-
-                               p->private_data = (void *)piabase;
-                               parport_announce_port (p);
-                       }
+               pp->crb = 0;
+               pp->pddrb = 255; /* all data pins output */
+               pp->crb = PIA_DDR|32|8;
+               dummy = pp->pddrb; /* reading clears interrupt */
+               pp->cra = 0;
+               pp->pddra = 0xe0; /* /RESET,  /DIR ,/AUTO-FEED output */
+               pp->cra = PIA_DDR;
+               pp->ppra = 0; /* reset printer */
+               udelay(10);
+               pp->ppra = 128;
+               p = parport_register_port((unsigned long)pp, IRQ_AMIGA_PORTS,
+                                         PARPORT_DMA_NONE, &pp_mfc3_ops);
+               if (!p)
+                       goto out_port;
+
+               if (p->irq != PARPORT_IRQ_NONE) {
+                       if (use_cnt++ == 0)
+                               if (request_irq(IRQ_AMIGA_PORTS, mfc3_interrupt, SA_SHIRQ, p->name, &pp_mfc3_ops))
+                                       goto out_irq;
                }
-       }
-       return pias;
-}
 
-#ifdef MODULE
+               this_port[pias++] = p;
+               printk(KERN_INFO "%s: Multiface III port using irq\n", p->name);
+               /* XXX: set operating mode */
+               parport_proc_register(p);
 
-MODULE_AUTHOR("Joerg Dorchain <joerg@dorchain.net>");
-MODULE_DESCRIPTION("Parport Driver for Multiface 3 expansion cards Paralllel Port");
-MODULE_SUPPORTED_DEVICE("Multiface 3 Parallel Port");
+               p->private_data = (void *)piabase;
+               parport_announce_port (p);
 
-int init_module(void)
-{
-       return ! parport_mfc3_init();
+               if (pias >= MAX_MFC)
+                       break;
+               continue;
+
+       out_irq:
+               parport_unregister_port(p);
+       out_port:
+               release_mem_region(piabase, sizeof(struct pia));
+       }
+
+       return pias ? 0 : -ENODEV;
 }
 
-void cleanup_module(void)
+void __exit parport_mfc3_exit(void)
 {
        int i;
 
-       for (i = 0; i < MAX_MFC; i++)
-               if (this_port[i] != NULL) {
-                       if (p->irq != PARPORT_IRQ_NONE) 
-                               if (--use_cnt == 0) 
-                       free_irq(IRQ_AMIGA_PORTS, &pp_mfc3_ops);
-                       parport_proc_unregister(this_port[i]);
-                       parport_unregister_port(this_port[i]);
-                       release_mem_region(ZTWO_PADDR(this_port[i]->private_data), sizeof(struct pia));
+       for (i = 0; i < MAX_MFC; i++) {
+               if (!this_port[i])
+                       continue;
+               if (!this_port[i]->irq != PARPORT_IRQ_NONE) {
+                       if (--use_cnt == 0) 
+                               free_irq(IRQ_AMIGA_PORTS, &pp_mfc3_ops);
                }
+               parport_proc_unregister(this_port[i]);
+               parport_unregister_port(this_port[i]);
+               release_mem_region(ZTWO_PADDR(this_port[i]->private_data), sizeof(struct pia));
+       }
 }
-#endif
 
 
+MODULE_AUTHOR("Joerg Dorchain <joerg@dorchain.net>");
+MODULE_DESCRIPTION("Parport Driver for Multiface 3 expansion cards Paralllel Port");
+MODULE_SUPPORTED_DEVICE("Multiface 3 Parallel Port");
+
+module_init(parport_mfc3_init)
+module_exit(parport_mfc3_exit)
+
index f90c235..ad3c532 100644 (file)
@@ -755,7+755,7 @@ static int __init pci_scan_bridge(struct pci_bus *bus, struct pci_dev * dev, int
 
        pci_read_config_dword(dev, PCI_PRIMARY_BUS, &buses);
        DBG("Scanning behind PCI bridge %s, config %06x, pass %d\n", dev->slot_name, buses & 0xffffff, pass);
-       if ((buses & 0xffffff) && !pcibios_assign_all_busses()) {
+       if ((buses & 0xffff00) && !pcibios_assign_all_busses()) {
                /*
                 * Bus already configured by firmware, process it in the first
                 * pass and just note the configuration.
@@ -772,8+772,10 @@ static int __init pci_scan_bridge(struct pci_bus *bus, struct pci_dev * dev, int
                        if (cmax > max) max = cmax;
                } else {
                        int i;
+                       unsigned int cmax = child->subordinate;
                        for (i = 0; i < 4; i++)
                                child->resource[i] = &dev->resource[PCI_BRIDGE_RESOURCES+i];
+                       if (cmax > max) max = cmax;
                }
        } else {
                /*
index 9d3584a..dd5f627 100644 (file)
@@ -1416,6+1416,7 @@ int aha1542_dev_reset(Scsi_Cmnd * SCpnt)
                        SCtmp = HOSTDATA(SCpnt->host)->SCint[i];
                        if (SCtmp->host_scribble) {
                                scsi_free(SCtmp->host_scribble, 512);
+                               SCtmp->host_scribble = NULL;
                        }
                        HOSTDATA(SCpnt->host)->SCint[i] = NULL;
                        HOSTDATA(SCpnt->host)->mb[i].status = 0;
@@ -1478,6+1479,7 @@ int aha1542_bus_reset(Scsi_Cmnd * SCpnt)
                        }
                        if (SCtmp->host_scribble) {
                                scsi_free(SCtmp->host_scribble, 512);
+                               SCtmp->host_scribble = NULL;
                        }
                        HOSTDATA(SCpnt->host)->SCint[i] = NULL;
                        HOSTDATA(SCpnt->host)->mb[i].status = 0;
@@ -1546,6+1548,7 @@ int aha1542_host_reset(Scsi_Cmnd * SCpnt)
                        }
                        if (SCtmp->host_scribble) {
                                scsi_free(SCtmp->host_scribble, 512);
+                               SCtmp->host_scribble = NULL;
                        }
                        HOSTDATA(SCpnt->host)->SCint[i] = NULL;
                        HOSTDATA(SCpnt->host)->mb[i].status = 0;
@@ -1681,8+1684,10 @@ int aha1542_old_reset(Scsi_Cmnd * SCpnt, unsigned int reset_flags)
                                Scsi_Cmnd *SCtmp;
                                SCtmp = HOSTDATA(SCpnt->host)->SCint[i];
                                SCtmp->result = DID_RESET << 16;
-                               if (SCtmp->host_scribble)
+                               if (SCtmp->host_scribble) {
                                        scsi_free(SCtmp->host_scribble, 512);
+                                       SCtmp->host_scribble = NULL;
+                               }
                                printk(KERN_WARNING "Sending DID_RESET for target %d\n", SCpnt->target);
                                SCtmp->scsi_done(SCpnt);
 
@@ -1725,8+1730,10 @@ fail:
                                                Scsi_Cmnd *SCtmp;
                                                SCtmp = HOSTDATA(SCpnt->host)->SCint[i];
                                                SCtmp->result = DID_RESET << 16;
-                                               if (SCtmp->host_scribble)
+                                               if (SCtmp->host_scribble) {
                                                        scsi_free(SCtmp->host_scribble, 512);
+                                                       SCtmp->host_scribble = NULL;
+                                               }
                                                printk(KERN_WARNING "Sending DID_RESET for target %d\n", SCpnt->target);
                                                SCtmp->scsi_done(SCpnt);
 
index 7400892..0aa3b16 100644 (file)
  * this thing into as good a shape as possible, and I'm positive
  * there are lots of lurking bugs and "Stupid Places".
  *
+ * Updates:
+ *
+ * Added support for pre -A chips, which don't have advanced features
+ * and will generate CSR_RESEL rather than CSR_RESEL_AM.
+ *     Richard Hirst <richard@sleepie.demon.co.uk>  August 2000
  */
 
 #include <linux/module.h>
@@ -1251,11+1256,16 @@ DB(DB_INTR,printk(":%d",cmd->SCp.Status))
 
 
       case CSR_RESEL_AM:
-DB(DB_INTR,printk("RESEL"))
-
-   /* First we have to make sure this reselection didn't */
-   /* happen during Arbitration/Selection of some other device. */
-   /* If yes, put losing command back on top of input_Q. */
+      case CSR_RESEL:
+DB(DB_INTR,printk("RESEL%s", sr == CSR_RESEL_AM ? "_AM" : ""))
+
+   /* Old chips (pre -A ???) don't have advanced features and will
+    * generate CSR_RESEL.  In that case we have to extract the LUN the
+    * hard way (see below).
+    * First we have to make sure this reselection didn't
+    * happen during Arbitration/Selection of some other device.
+    * If yes, put losing command back on top of input_Q.
+    */
 
          if (hostdata->level2 <= L2_NONE) {
 
@@ -1295,10+1305,53 @@ DB(DB_INTR,printk("RESEL"))
     * not the right way to go, but...)
     */
 
-         lun = read_wd33c93(regp, WD_DATA);
-         if (hostdata->level2 < L2_RESELECT)
-            write_wd33c93_cmd(regp,WD_CMD_NEGATE_ACK);
-         lun &= 7;
+         if (sr == CSR_RESEL_AM) {
+            lun = read_wd33c93(regp, WD_DATA);
+            if (hostdata->level2 < L2_RESELECT)
+               write_wd33c93_cmd(regp,WD_CMD_NEGATE_ACK);
+            lun &= 7;
+         }
+         else {
+            /* Old chip; wait for msgin phase to pick up the LUN. */
+            for (lun = 255; lun; lun--) {
+               if ((asr = READ_AUX_STAT()) & ASR_INT)
+                  break;
+               udelay(10);
+            }
+            if (!(asr & ASR_INT)) {
+               printk("wd33c93: Reselected without IDENTIFY\n");
+               lun = 0;
+            }
+            else {
+               /* Verify this is a change to MSG_IN and read the message */
+               sr = read_wd33c93(regp, WD_SCSI_STATUS);
+               if (sr == (CSR_ABORT   | PHS_MESS_IN) ||
+                   sr == (CSR_UNEXP   | PHS_MESS_IN) ||
+                   sr == (CSR_SRV_REQ | PHS_MESS_IN)) {
+                  /* Got MSG_IN, grab target LUN */
+                  lun = read_1_byte(regp);
+                  /* Now we expect a 'paused with ACK asserted' int.. */
+                  asr = READ_AUX_STAT();
+                  if (!(asr & ASR_INT)) {
+                     udelay(10);
+                     asr = READ_AUX_STAT();
+                     if (!(asr & ASR_INT))
+                        printk("wd33c93: No int after LUN on RESEL (%02x)\n",
+                              asr);
+                  }
+                  sr = read_wd33c93(regp, WD_SCSI_STATUS);
+                  if (sr != CSR_MSGIN)
+                     printk("wd33c93: Not paused with ACK on RESEL (%02x)\n",
+                           sr);
+                  lun &= 7;
+                  write_wd33c93_cmd(regp,WD_CMD_NEGATE_ACK);
+               }
+               else {
+                  printk("wd33c93: Not MSG_IN on reselect (%02x)\n", sr);
+                  lun = 0;
+               }
+            }
+         }
 
    /* Now we look for the command that's reconnecting. */
 
@@ -1372,6+1425,9 @@ uchar sr;
    write_wd33c93(regp, WD_SYNCHRONOUS_TRANSFER,
                  calc_sync_xfer(hostdata->default_sx_per/4,DEFAULT_SX_OFF));
    write_wd33c93(regp, WD_COMMAND, WD_CMD_RESET);
+#ifdef CONFIG_MVME147_SCSI
+   udelay(25); /* The old wd33c93 on MVME147 needs this, at least */
+#endif
 
    while (!(READ_AUX_STAT() & ASR_INT))
       ;
index 331343d..c0fa166 100644 (file)
@@ -68,7+68,7 @@ obj-$(CONFIG_FB_CYBER)            += cyberfb.o
 obj-$(CONFIG_FB_CYBER2000)        += cyber2000fb.o
 obj-$(CONFIG_FB_SGIVW)            += sgivwfb.o
 obj-$(CONFIG_FB_3DFX)             += tdfxfb.o
-obj-$(CONFIG_FB_MAC)              += macfb.o
+obj-$(CONFIG_FB_MAC)              += macfb.o macmodes.o
 obj-$(CONFIG_FB_HP300)            += hpfb.o
 obj-$(CONFIG_FB_OF)               += offb.o
 obj-$(CONFIG_FB_IMSTT)            += imsttfb.o
index 8f984ae..d1ff9c8 100644 (file)
 #include <linux/fb.h>
 #include <linux/string.h>
 
+#ifdef CONFIG_FB_COMPAT_XPMAC
 #include <asm/vc_ioctl.h>
+#endif
 
 #include <video/fbcon.h>
 #include <video/macmodes.h>
index c9915cf..6423b0e 100644 (file)
@@ -115,9+115,6 @@ static int do_isofs_readdir(struct inode *inode, struct file *filp,
        char *p = NULL;         /* Quiet GCC */
        struct iso_directory_record *de;
 
-       if (filp->f_pos >= inode->i_size)
-               return 0;
        offset = filp->f_pos & (bufsize - 1);
        block = filp->f_pos >> bufbits;
        high_sierra = inode->i_sb->u.isofs_sb.s_high_sierra;
@@ -132,7+129,8 @@ static int do_isofs_readdir(struct inode *inode, struct file *filp,
                }
 
                de = (struct iso_directory_record *) (bh->b_data + offset);
-               if (first_de) inode_number = (bh->b_blocknr << bufbits) + offset;
+               if (first_de)
+                       inode_number = (bh->b_blocknr << bufbits) + offset;
 
                de_len = *(unsigned char *) de;
 
@@ -207,7+205,7 @@ static int do_isofs_readdir(struct inode *inode, struct file *filp,
                map = 1;
                if (inode->i_sb->u.isofs_sb.s_rock) {
                        len = get_rock_ridge_filename(de, tmpname, inode);
-                       if (len != 0) {
+                       if (len != 0) {         /* may be -1 */
                                p = tmpname;
                                map = 0;
                        }
index 453e4a4..d75edcc 100644 (file)
@@ -45,14+45,14 @@ static int check_bread = 0;
 
 static int isofs_hashi(struct dentry *parent, struct qstr *qstr);
 static int isofs_hash(struct dentry *parent, struct qstr *qstr);
-static int isofs_cmpi(struct dentry *dentry, struct qstr *a, struct qstr *b);
-static int isofs_cmp(struct dentry *dentry, struct qstr *a, struct qstr *b);
+static int isofs_dentry_cmpi(struct dentry *dentry, struct qstr *a, struct qstr *b);
+static int isofs_dentry_cmp(struct dentry *dentry, struct qstr *a, struct qstr *b);
 
 #ifdef CONFIG_JOLIET
 static int isofs_hashi_ms(struct dentry *parent, struct qstr *qstr);
 static int isofs_hash_ms(struct dentry *parent, struct qstr *qstr);
-static int isofs_cmpi_ms(struct dentry *dentry, struct qstr *a, struct qstr *b);
-static int isofs_cmp_ms(struct dentry *dentry, struct qstr *a, struct qstr *b);
+static int isofs_dentry_cmpi_ms(struct dentry *dentry, struct qstr *a, struct qstr *b);
+static int isofs_dentry_cmp_ms(struct dentry *dentry, struct qstr *a, struct qstr *b);
 #endif
 
 static void isofs_put_super(struct super_block *sb)
@@ -84,20+84,20 @@ static struct super_operations isofs_sops = {
 static struct dentry_operations isofs_dentry_ops[] = {
        {
                d_hash:         isofs_hash,
-               d_compare:      isofs_cmp,
+               d_compare:      isofs_dentry_cmp,
        },
        {
                d_hash:         isofs_hashi,
-               d_compare:      isofs_cmpi,
+               d_compare:      isofs_dentry_cmpi,
        },
 #ifdef CONFIG_JOLIET
        {
                d_hash:         isofs_hash_ms,
-               d_compare:      isofs_cmp_ms,
+               d_compare:      isofs_dentry_cmp_ms,
        },
        {
                d_hash:         isofs_hashi_ms,
-               d_compare:      isofs_cmpi_ms,
+               d_compare:      isofs_dentry_cmpi_ms,
        }
 #endif
 };
@@ -173,7+173,7 @@ isofs_hashi_common(struct dentry *dentry, struct qstr *qstr, int ms)
  * Case insensitive compare of two isofs names.
  */
 static int
-isofs_cmpi_common(struct dentry *dentry,struct qstr *a,struct qstr *b,int ms)
+isofs_dentry_cmpi_common(struct dentry *dentry,struct qstr *a,struct qstr *b,int ms)
 {
        int alen, blen;
 
@@ -197,7+197,7 @@ isofs_cmpi_common(struct dentry *dentry,struct qstr *a,struct qstr *b,int ms)
  * Case sensitive compare of two isofs names.
  */
 static int
-isofs_cmp_common(struct dentry *dentry,struct qstr *a,struct qstr *b,int ms)
+isofs_dentry_cmp_common(struct dentry *dentry,struct qstr *a,struct qstr *b,int ms)
 {
        int alen, blen;
 
@@ -230,15+230,15 @@ isofs_hashi(struct dentry *dentry, struct qstr *qstr)
 }
 
 static int
-isofs_cmp(struct dentry *dentry,struct qstr *a,struct qstr *b)
+isofs_dentry_cmp(struct dentry *dentry,struct qstr *a,struct qstr *b)
 {
-       return isofs_cmp_common(dentry, a, b, 0);
+       return isofs_dentry_cmp_common(dentry, a, b, 0);
 }
 
 static int
-isofs_cmpi(struct dentry *dentry,struct qstr *a,struct qstr *b)
+isofs_dentry_cmpi(struct dentry *dentry,struct qstr *a,struct qstr *b)
 {
-       return isofs_cmpi_common(dentry, a, b, 0);
+       return isofs_dentry_cmpi_common(dentry, a, b, 0);
 }
 
 #ifdef CONFIG_JOLIET
@@ -255,15+255,15 @@ isofs_hashi_ms(struct dentry *dentry, struct qstr *qstr)
 }
 
 static int
-isofs_cmp_ms(struct dentry *dentry,struct qstr *a,struct qstr *b)
+isofs_dentry_cmp_ms(struct dentry *dentry,struct qstr *a,struct qstr *b)
 {
-       return isofs_cmp_common(dentry, a, b, 1);
+       return isofs_dentry_cmp_common(dentry, a, b, 1);
 }
 
 static int
-isofs_cmpi_ms(struct dentry *dentry,struct qstr *a,struct qstr *b)
+isofs_dentry_cmpi_ms(struct dentry *dentry,struct qstr *a,struct qstr *b)
 {
-       return isofs_cmpi_common(dentry, a, b, 1);
+       return isofs_dentry_cmpi_common(dentry, a, b, 1);
 }
 #endif
 
@@ -500,15+500,13 @@ static struct super_block *isofs_read_super(struct super_block *s, void *data,
         * that value.
         */
        blocksize = get_hardblocksize(dev);
-       if(    (blocksize != 0)
-           && (blocksize > opt.blocksize) )
-         {
+       if(blocksize > opt.blocksize) {
            /*
             * Force the blocksize we are going to use to be the
             * hardware blocksize.
             */
            opt.blocksize = blocksize;
-         }
+       }
  
        blocksize_bits = 0;
        {
@@ -605,9+603,8 @@ static struct super_block *isofs_read_super(struct super_block *s, void *data,
        pri_bh = NULL;
 
 root_found:
-       brelse(pri_bh);
 
-       if (joliet_level && opt.rock == 'n') {
+       if (joliet_level && (pri == NULL || opt.rock == 'n')) {
            /* This is the case of Joliet with the norock mount flag.
             * A disc with both Joliet and Rock Ridge is handled later
             */
@@ -704,6+701,7 @@ root_found:
         * We're all done using the volume descriptor, and may need
         * to change the device blocksize, so release the buffer now.
         */
+       brelse(pri_bh);
        brelse(bh);
 
        /*
@@ -873,7+871,7 @@ static int isofs_statfs (struct super_block *sb, struct statfs *buf)
 /* Life is simpler than for other filesystem since we never
  * have to create a new block, only find an existing one.
  */
-int isofs_get_block(struct inode *inode, long iblock,
+static int isofs_get_block(struct inode *inode, long iblock,
                    struct buffer_head *bh_result, int create)
 {
        unsigned long b_off;
@@ -940,26+938,26 @@ abort:
        return err;
 
 abort_create_attempted:
-       printk("_isofs_bmap: Kernel tries to allocate a block\n");
+       printk("isofs_get_block: Kernel tries to allocate a block\n");
        goto abort;
 
 abort_negative:
-       printk("_isofs_bmap: block < 0\n");
+       printk("isofs_get_block: block < 0\n");
        goto abort;
 
 abort_beyond_end:
-       printk("_isofs_bmap: block >= EOF (%ld, %ld)\n",
+       printk("isofs_get_block: block >= EOF (%ld, %ld)\n",
               iblock, (unsigned long) inode->i_size);
        goto abort;
 
 abort_too_many_sections:
-       printk("isofs_bmap: More than 100 file sections ?!?, aborting...\n");
-       printk("isofs_bmap: ino=%lu block=%ld firstext=%u sect_size=%u nextino=%lu\n",
+       printk("isofs_get_block: More than 100 file sections ?!?, aborting...\n");
+       printk("isofs_get_block: ino=%lu block=%ld firstext=%u sect_size=%u nextino=%lu\n",
               inode->i_ino, iblock, firstext, (unsigned) sect_size, nextino);
        goto abort;
 }
 
-int isofs_bmap(struct inode *inode, int block)
+static int isofs_bmap(struct inode *inode, int block)
 {
        struct buffer_head dummy;
        int error;
index 4473f7c..2487297 100644 (file)
@@ -53,9+53,7 @@ isofs_cmp(struct dentry * dentry, const char * compare, int dlen)
  *     isofs_find_entry()
  *
  * finds an entry in the specified directory with the wanted name. It
- * returns the cache buffer in which the entry was found, and the entry
- * itself (as an inode number). It does NOT read the inode of the
- * entry - you'll have to do that yourself if you want to.
+ * returns the inode number of the found entry, or 0 on error.
  */
 static unsigned long
 isofs_find_entry(struct inode *dir, struct dentry *dentry,
@@ -123,7+121,7 @@ isofs_find_entry(struct inode *dir, struct dentry *dentry,
 
                if (dir->i_sb->u.isofs_sb.s_rock &&
                    ((i = get_rock_ridge_filename(de, tmpname, dir)))) {
-                       dlen = i;
+                       dlen = i;       /* possibly -1 */
                        dpnt = tmpname;
 #ifdef CONFIG_JOLIET
                } else if (dir->i_sb->u.isofs_sb.s_joliet_level) {
@@ -142,8+140,9 @@ isofs_find_entry(struct inode *dir, struct dentry *dentry,
                 * Skip hidden or associated files unless unhide is set 
                 */
                match = 0;
-               if ((!(de->flags[-dir->i_sb->u.isofs_sb.s_high_sierra] & 5)
-                   || dir->i_sb->u.isofs_sb.s_unhide == 'y') && dlen)
+               if (dlen > 0 &&
+                   (!(de->flags[-dir->i_sb->u.isofs_sb.s_high_sierra] & 5)
+                    || dir->i_sb->u.isofs_sb.s_unhide == 'y'))
                {
                        match = (isofs_cmp(dentry,dpnt,dlen) == 0);
                }
index b2eff87..a251144 100644 (file)
@@ -152,6+152,7 @@ int find_rock_ridge_relocation(struct iso_directory_record * de,
   return retval;
 }
 
+/* return length of name field; 0: not found, -1: to be ignored */
 int get_rock_ridge_filename(struct iso_directory_record * de,
                            char * retname, struct inode * inode)
 {
@@ -215,7+216,7 @@ int get_rock_ridge_filename(struct iso_directory_record * de,
        printk("RR: RE (%x)\n", inode->i_ino);
 #endif
        if (buffer) kfree(buffer);
-       return 0;
+       return -1;
       default:
        break;
       }
index e58b04e..96509df 100644 (file)
@@ -336,6+336,7 @@ int proc_readdir(struct file * filp,
  * the /proc directory.
  */
 static struct file_operations proc_dir_operations = {
+       read:                   generic_read_dir,
        readdir:                proc_readdir,
 };
 
index cae8619..c54369a 100644 (file)
@@ -82,6+82,7 @@ static int proc_root_readdir(struct file * filp,
  * directory handling functions for that..
  */
 static struct file_operations proc_root_operations = {
+       read:            generic_read_dir,
        readdir:         proc_root_readdir,
 };
 
index fb4d819..3c21224 100644 (file)
 #define TASK_SIZE_26   (0x01a00000UL)
 
 /*
+ * This decides where the kernel will search for a free chunk of vm
+ * space during mmap's.
+ */
+#define TASK_UNMAPPED_BASE (TASK_SIZE / 3)
+
+/*
  * Page offset: 32MB
  */
 #define PAGE_OFFSET    (0x02000000UL)
diff --git a/include/asm-arm/arch-arc/processor.h b/include/asm-arm/arch-arc/processor.h
deleted file mode 100644 (file)
index 7eea170..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- *  linux/include/asm-arm/arch-arc/processor.h
- *
- *  Copyright (c) 1996-1999 Russell King.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- *  Changelog:
- *   10-Sep-1996 RMK   Created
- *   21-Mar-1999 RMK   Added asm/arch/memory.h
- */
-
-#ifndef __ASM_ARCH_PROCESSOR_H
-#define __ASM_ARCH_PROCESSOR_H
-
-/*
- * Bus types
- */
-#define EISA_bus 0
-#define EISA_bus__is_a_macro /* for versions in ksyms.c */
-#define MCA_bus 0
-#define MCA_bus__is_a_macro /* for versions in ksyms.c */
-
-/* This decides where the kernel will search for a free chunk of vm
- * space during mmap's.
- */
-#define TASK_UNMAPPED_BASE (TASK_SIZE / 3)
-
-#endif
index a1811df..56e1d3b 100644 (file)
 #define TASK_SIZE_26   (0x04000000UL)
 
 /*
+ * This decides where the kernel will search for a free chunk of vm
+ * space during mmap's.
+ */
+#define TASK_UNMAPPED_BASE (TASK_SIZE / 3)
+
+/*
  * Page offset: 3GB
  */
 #define PAGE_OFFSET    (0xc0000000UL)
diff --git a/include/asm-arm/arch-cl7500/processor.h b/include/asm-arm/arch-cl7500/processor.h
deleted file mode 100644 (file)
index 3f75f16..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * linux/include/asm-arm/arch-cl7500/processor.h
- *
- * Copyright (c) 1996-1999 Russell King.
- *
- * Changelog:
- *  10-Sep-1996        RMK     Created
- *  21-Mar-1999        RMK     Added asm/arch/memory.h
- */
-
-#ifndef __ASM_ARCH_PROCESSOR_H
-#define __ASM_ARCH_PROCESSOR_H
-
-/*
- * Bus types
- */
-#define EISA_bus 0
-#define EISA_bus__is_a_macro /* for versions in ksyms.c */
-#define MCA_bus 0
-#define MCA_bus__is_a_macro /* for versions in ksyms.c */
-
-/* This decides where the kernel will search for a free chunk of vm
- * space during mmap's.
- */
-#define TASK_UNMAPPED_BASE (TASK_SIZE / 3)
-
-#endif
index 4474737..21157a5 100644 (file)
 #define XBUS_SWITCH_J17_11     ((*XBUS_SWITCH) & (1 << 5))
 #define XBUS_SWITCH_J17_9      ((*XBUS_SWITCH) & (1 << 6))
 
-#define PARAMS_OFFSET          0x0100
-
 #define FLUSH_BASE_PHYS                0x50000000
 #define UNCACHEABLE_ADDR       (ARMCSR_BASE + 0x108)
 
@@ -133,4+131,9 @@ extern int  gpio_read(void);
 extern void cpld_modify(int mask, int set);
 #endif
 
+#define pcibios_assign_all_busses()    1
+
+#define PCIBIOS_MIN_IO         0x6000
+#define PCIBIOS_MIN_MEM        0x40000000
+
 #endif
index 9817267..41e730c 100644 (file)
@@ -67,6+67,12 @@ extern unsigned long __bus_to_virt(unsigned long);
 #define PHYS_OFFSET            (0x00000000UL)
 
 /*
+ * This decides where the kernel will search for a free chunk of vm
+ * space during mmap's.
+ */
+#define TASK_UNMAPPED_BASE (TASK_SIZE / 3)
+
+/*
  * The DRAM is always contiguous.
  */
 #define __virt_to_phys__is_a_macro
diff --git a/include/asm-arm/arch-ebsa285/processor.h b/include/asm-arm/arch-ebsa285/processor.h
deleted file mode 100644 (file)
index 1c05610..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- *  linux/include/asm-arm/arch-ebsa110/processor.h
- *
- *  Copyright (C) 1996-1999 Russell King
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- *  Changelog:
- *   21-Mar-1999 RMK   Added asm/arch/memory.h
- */
-
-#ifndef __ASM_ARCH_PROCESSOR_H
-#define __ASM_ARCH_PROCESSOR_H
-
-/*
- * Bus types
- */
-#define EISA_bus 0
-#define EISA_bus__is_a_macro /* for versions in ksyms.c */
-#define MCA_bus 0
-#define MCA_bus__is_a_macro /* for versions in ksyms.c */
-
-/* This decides where the kernel will search for a free chunk of vm
- * space during mmap's.
- */
-#define TASK_UNMAPPED_BASE (TASK_SIZE / 3)
-
-#endif
index a9209af..506192b 100644 (file)
 #define FLUSH_BASE_PHYS                0x40000000      /* ROM */
 #define FLUSH_BASE             0xdf000000
 
-#define PARAMS_OFFSET          (0x0100)
-#define Z_PARAMS_BASE          (RAM_START + PARAMS_OFFSET)
-
 #define PCIO_BASE              IO_BASE
 
 #endif
index d07a1dd..a34a0f9 100644 (file)
 #define TASK_SIZE_26    (0x04000000UL)
 
 /*
+ * This decides where the kernel will search for a free chunk of vm
+ * space during mmap's.
+ */
+#define TASK_UNMAPPED_BASE (TASK_SIZE / 3)
+
+/*
  * Page offset: 3GB
  */
 #define PAGE_OFFSET     (0xc0000000UL)
diff --git a/include/asm-arm/arch-l7200/processor.h b/include/asm-arm/arch-l7200/processor.h
deleted file mode 100644 (file)
index ee4b4b2..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * linux/include/asm-arm/arch-l7200/processor.h
- *
- * Copyright (c) 2000 Steven Hill (sjhill@cotw.com)
- *
- * Changelog:
- *  03-21-2000 SJH     Created
- *  05-03-2000 SJH     Comment cleaning
- */
-
-#ifndef __ASM_ARCH_PROCESSOR_H
-#define __ASM_ARCH_PROCESSOR_H
-
-/*
- * Bus types
- */
-#define EISA_bus 0
-#define EISA_bus__is_a_macro /* for versions in ksyms.c */
-#define MCA_bus 0
-#define MCA_bus__is_a_macro /* for versions in ksyms.c */
-
-/* This decides where the kernel will search for a free chunk of vm
- * space during mmap's.
- */
-#define TASK_UNMAPPED_BASE (TASK_SIZE / 3)
-
-#endif
index de0429b..a7e6442 100644 (file)
 #define TASK_SIZE_26   (0x04000000UL)
 
 /*
+ * This decides where the kernel will search for a free chunk of vm
+ * space during mmap's.
+ */
+#define TASK_UNMAPPED_BASE (TASK_SIZE / 3)
+
+/*
  * Page offset: 3GB
  */
 #define PAGE_OFFSET    (0xc0000000UL)
diff --git a/include/asm-arm/arch-nexuspci/processor.h b/include/asm-arm/arch-nexuspci/processor.h
deleted file mode 100644 (file)
index 542dd91..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * linux/include/asm-arm/arch-nexuspci/processor.h
- *  from linux/include/asm-arm/arch-ebsa110/processor.h
- *
- * Copyright (C) 1996-1999 Russell King
- *
- * Changelog:
- *  21-Mar-1999        RMK     Added asm/arch/memory.h
- */
-
-#ifndef __ASM_ARCH_PROCESSOR_H
-#define __ASM_ARCH_PROCESSOR_H
-
-/*
- * Bus types
- */
-#define EISA_bus 0
-#define EISA_bus__is_a_macro /* for versions in ksyms.c */
-#define MCA_bus 0
-#define MCA_bus__is_a_macro /* for versions in ksyms.c */
-
-/* This decides where the kernel will search for a free chunk of vm
- * space during mmap's.
- */
-#define TASK_UNMAPPED_BASE (TASK_SIZE / 3)
-
-#endif
index 2b38991..cf562f8 100644 (file)
 #define TASK_SIZE_26   (0x04000000UL)
 
 /*
+ * This decides where the kernel will search for a free chunk of vm
+ * space during mmap's.
+ */
+#define TASK_UNMAPPED_BASE (TASK_SIZE / 3)
+
+/*
  * Page offset: 3GB
  */
 #define PAGE_OFFSET    (0xc0000000UL)
diff --git a/include/asm-arm/arch-rpc/processor.h b/include/asm-arm/arch-rpc/processor.h
deleted file mode 100644 (file)
index b64eaeb..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- *  linux/include/asm-arm/arch-rpc/processor.h
- *
- *  Copyright (C) 1996-1999 Russell King.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- *  Changelog:
- *   10-Sep-1996 RMK   Created
- *   21-Mar-1999 RMK   Added asm/arch/memory.h
- */
-
-#ifndef __ASM_ARCH_PROCESSOR_H
-#define __ASM_ARCH_PROCESSOR_H
-
-/*
- * Bus types
- */
-#define EISA_bus 0
-#define EISA_bus__is_a_macro /* for versions in ksyms.c */
-#define MCA_bus 0
-#define MCA_bus__is_a_macro /* for versions in ksyms.c */
-
-/* This decides where the kernel will search for a free chunk of vm
- * space during mmap's.
- */
-#define TASK_UNMAPPED_BASE (TASK_SIZE / 3)
-
-#endif
index 0834d28..dde1bfc 100644 (file)
@@ -56,7+56,7 @@ static const unsigned long palette_4[16] = {
 #define palette_setpixel(p)    *(unsigned long *)(IO_START+0x00400000) = 0x10000000|((p) & 255)
 #define palette_write(v)       *(unsigned long *)(IO_START+0x00400000) = 0x00000000|((v) & 0x00ffffff)
 
-static struct param_struct * const params = (struct param_struct *)Z_PARAMS_BASE;
+extern struct param_struct params;
 
 #ifndef STANDALONE_DEBUG 
 /*
@@ -69,8+69,8 @@ static void puts(const char *s)
        unsigned char c;
        char *ptr;
 
-       x = params->video_x;
-       y = params->video_y;
+       x = params.video_x;
+       y = params.video_y;
 
        while ( ( c = *(unsigned char *)s++ ) != '\0' ) {
                if ( c == '\n' ) {
@@ -79,7+79,7 @@ static void puts(const char *s)
                                y--;
                        }
                } else {
-                       ptr = VIDMEM + ((y*video_num_columns*params->bytes_per_char_v+x)*bytes_per_char_h);
+                       ptr = VIDMEM + ((y*video_num_columns*params.bytes_per_char_v+x)*bytes_per_char_h);
                        ll_write_char(ptr, c|(white<<16));
                        if ( ++x >= video_num_columns ) {
                                x = 0;
@@ -90,8+90,8 @@ static void puts(const char *s)
                }
        }
 
-       params->video_x = x;
-       params->video_y = y;
+       params.video_x = x;
+       params.video_y = y;
 }
 
 static void error(char *x);
@@ -103,9+103,9 @@ static void arch_decomp_setup(void)
 {
        int i;
        
-       video_num_lines = params->video_num_rows;
-       video_num_columns = params->video_num_cols;
-       bytes_per_char_h = params->bytes_per_char_h;
+       video_num_lines = params.video_num_rows;
+       video_num_columns = params.video_num_cols;
+       bytes_per_char_h = params.bytes_per_char_h;
        video_size_row = video_num_columns * bytes_per_char_h;
        if (bytes_per_char_h == 4)
                for (i = 0; i < 256; i++)
@@ -140,7+140,7 @@ static void arch_decomp_setup(void)
                white = 7;
        }
 
-       if (params->nr_pages * params->page_size < 4096*1024) error("<4M of mem\n");
+       if (params.nr_pages * params.page_size < 4096*1024) error("<4M of mem\n");
 }
 #endif
 
index d3ede01..96b2405 100644 (file)
 #define TASK_SIZE_26   (0x04000000UL)
 
 /*
+ * This decides where the kernel will search for a free chunk of vm
+ * space during mmap's.
+ */
+#define TASK_UNMAPPED_BASE (TASK_SIZE / 3)
+
+/*
  * Page offset: = 3GB
  */
 #define PAGE_OFFSET    (0xC0000000UL)
diff --git a/include/asm-arm/arch-shark/processor.h b/include/asm-arm/arch-shark/processor.h
deleted file mode 100644 (file)
index bd99869..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * linux/include/asm-arm/arch-ebsa110/processor.h
- *
- * Copyright (C) 1996-1999 Russell King
- *
- * Changelog:
- *  21-Mar-1999        RMK     Added asm/arch/memory.h
- */
-
-#ifndef __ASM_ARCH_PROCESSOR_H
-#define __ASM_ARCH_PROCESSOR_H
-
-#include <asm/arch/memory.h>
-
-/*
- * Bus types
- */
-#define EISA_bus 0
-#define EISA_bus__is_a_macro /* for versions in ksyms.c */
-#define MCA_bus 0
-#define MCA_bus__is_a_macro /* for versions in ksyms.c */
-
-/* This decides where the kernel will search for a free chunk of vm
- * space during mmap's.
- */
-#define TASK_UNMAPPED_BASE (TASK_SIZE / 3)
-
-#endif
index e066821..e93d0af 100644 (file)
 #define TASK_SIZE_26   (0x04000000UL)
 
 /*
+ * This decides where the kernel will search for a free chunk of vm
+ * space during mmap's.
+ */
+#define TASK_UNMAPPED_BASE (TASK_SIZE / 3)
+
+/*
  * Page offset: 3GB
  */
 #define PAGE_OFFSET            (0xc0000000UL)
diff --git a/include/asm-arm/arch-tbox/processor.h b/include/asm-arm/arch-tbox/processor.h
deleted file mode 100644 (file)
index 0f8e712..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * linux/include/asm-arm/arch-tbox/processor.h
- *  from linux/include/asm-arm/arch-ebsa110/processor.h
- *
- * Copyright (C) 1996,1997,1998 Russell King
- */
-
-#ifndef __ASM_ARCH_PROCESSOR_H
-#define __ASM_ARCH_PROCESSOR_H
-
-/*
- * Bus types
- */
-#define EISA_bus 0
-#define EISA_bus__is_a_macro /* for versions in ksyms.c */
-#define MCA_bus 0
-#define MCA_bus__is_a_macro /* for versions in ksyms.c */
-
-/* This decides where the kernel will search for a free chunk of vm
- * space during mmap's.
- */
-#define TASK_UNMAPPED_BASE (TASK_SIZE / 3)
-
-#endif
index 9773f67..9bfe932 100644 (file)
 
 #ifdef __KERNEL__
 
+#define smp_mb__before_clear_bit()     do { } while (0)
+#define smp_mb__after_clear_bit()      do { } while (0)
+
 /*
  * Function prototypes to keep gcc -Wall happy.
  */
index 4ded5b8..1fd1a5b 100644 (file)
 
 #include <asm/arch/hardware.h>
 
-#ifdef PARAMS_OFFSET
-#define PARAMS_BASE            ((PAGE_OFFSET) + (PARAMS_OFFSET))
-#else
-#define PARAMS_BASE            0
-#endif
-
 #endif
index 63c1ee9..c32ddbc 100644 (file)
@@ -3,10+3,7 @@
 
 #ifdef __KERNEL__
 
-#define pcibios_assign_all_busses()    0
-
-#define PCIBIOS_MIN_IO         0x8000
-#define PCIBIOS_MIN_MEM                0x40000000
+#include <asm/arch/hardware.h>
 
 extern inline void pcibios_set_master(struct pci_dev *dev)
 {
index 5812363..43cbb22 100644 (file)
@@ -57,7+57,7 @@ extern uaccess_t uaccess_user, uaccess_kernel;
        uaccess_t       *uaccess;               /* User access functions*/
 
 #define EXTRA_THREAD_STRUCT_INIT               \
-       ,&uaccess_kernel
+       uaccess:        &uaccess_kernel,
 
 #define start_thread(regs,pc,sp)                                       \
 ({                                                                     \
index ab7f31d..775ebfc 100644 (file)
@@ -41,9+41,9 @@ struct context_save_struct {
        unsigned int    domain;
 
 #define EXTRA_THREAD_STRUCT_INIT                                       \
-       , domain_val(DOMAIN_USER, DOMAIN_CLIENT) |                      \
-         domain_val(DOMAIN_KERNEL, DOMAIN_MANAGER) |                   \
-         domain_val(DOMAIN_IO, DOMAIN_CLIENT)
+       domain:   domain_val(DOMAIN_USER, DOMAIN_CLIENT) |              \
+                 domain_val(DOMAIN_KERNEL, DOMAIN_MANAGER) |           \
+                 domain_val(DOMAIN_IO, DOMAIN_CLIENT)
 
 #define start_thread(regs,pc,sp)                                       \
 ({                                                                     \
index d15d5a6..190caa1 100644 (file)
 #ifndef __ASM_PROC_PTRACE_H
 #define __ASM_PROC_PTRACE_H
 
+#include <linux/config.h>
+
 #define USR26_MODE     0x00
 #define FIQ26_MODE     0x01
 #define IRQ26_MODE     0x02
@@ -64,8+66,12 @@ struct pt_regs {
 #define user_mode(regs)        \
        (((regs)->ARM_cpsr & 0xf) == 0)
 
+#ifdef CONFIG_ARM_THUMB
 #define thumb_mode(regs) \
        (((regs)->ARM_cpsr & T_BIT))
+#else
+#define thumb_mode(regs) (0)
+#endif
 
 #define processor_mode(regs) \
        ((regs)->ARM_cpsr & MODE_MASK)
index 247ed3e..becb31c 100644 (file)
 #ifndef __ASM_PROC_SYSTEM_H
 #define __ASM_PROC_SYSTEM_H
 
-extern __inline__ unsigned long __xchg(unsigned long x, volatile void *ptr, int size)
-{
-       extern void __bad_xchg(volatile void *, int);
-
-       switch (size) {
-               case 1: __asm__ __volatile__ ("swpb %0, %1, [%2]" : "=r" (x) : "r" (x), "r" (ptr) : "memory");
-                       break;
-               case 4: __asm__ __volatile__ ("swp %0, %1, [%2]" : "=r" (x) : "r" (x), "r" (ptr) : "memory");
-                       break;
-               default: __bad_xchg(ptr, size);
-       }
-       return x;
-}
+#include <linux/config.h>
 
 #define set_cr(x)                                      \
        __asm__ __volatile__(                           \
@@ -131,4+119,61 @@ extern unsigned long cr_alignment; /* defined in entry-armv.S */
        : "r" (x)                                               \
        : "memory")
 
+#if defined(CONFIG_CPU_SA1100) || defined(CONFIG_CPU_SA110)
+/*
+ * On the StrongARM, "swp" is terminally broken since it bypasses the
+ * cache totally.  This means that the cache becomes inconsistent, and,
+ * since we use normal loads/stores as well, this is really bad.
+ * Typically, this causes oopsen in filp_close, but could have other,
+ * more disasterous effects.  There are two work-arounds:
+ *  1. Disable interrupts and emulate the atomic swap
+ *  2. Clean the cache, perform atomic swap, flush the cache
+ *
+ * We choose (1) since its the "easiest" to achieve here and is not
+ * dependent on the processor type.
+ */
+#define swp_is_buggy
+#endif
+
+extern __inline__ unsigned long __xchg(unsigned long x, volatile void *ptr, int size)
+{
+       extern void __bad_xchg(volatile void *, int);
+       unsigned long ret;
+#ifdef swp_is_buggy
+       unsigned long flags;
+#endif
+
+       switch (size) {
+#ifdef swp_is_buggy
+               case 1:
+                       __save_flags_cli(flags);
+                       ret = *(volatile unsigned char *)ptr;
+                       *(volatile unsigned char *)ptr = x;
+                       __restore_flags(flags);
+                       break;
+
+               case 4:
+                       __save_flags_cli(flags);
+                       ret = *(volatile unsigned long *)ptr;
+                       *(volatile unsigned long *)ptr = x;
+                       __restore_flags(flags);
+                       break;
+#else
+               case 1: __asm__ __volatile__ ("swpb %0, %1, [%2]"
+                                       : "=r" (ret)
+                                       : "r" (x), "r" (ptr)
+                                       : "memory");
+                       break;
+               case 4: __asm__ __volatile__ ("swp %0, %1, [%2]"
+                                       : "=r" (ret)
+                                       : "r" (x), "r" (ptr)
+                                       : "memory");
+                       break;
+#endif
+               default: __bad_xchg(ptr, size);
+       }
+
+       return ret;
+}
+
 #endif
index cf21f2c..f84c5d2 100644 (file)
@@ -36,12+36,12 @@ typedef unsigned long mm_segment_t;         /* domain register      */
 
 #ifdef __KERNEL__
 
-#define NR_DEBUGS      5
+#define EISA_bus 0
+#define MCA_bus 0
 
 #include <asm/atomic.h>
 #include <asm/ptrace.h>
 #include <asm/arch/memory.h>
-#include <asm/arch/processor.h>
 #include <asm/proc/processor.h>
 
 struct debug_info {
@@ -67,18+67,16 @@ struct thread_struct {
        EXTRA_THREAD_STRUCT
 };
 
-#define INIT_MMAP \
-{ &init_mm, 0, 0, NULL, PAGE_SHARED, VM_READ | VM_WRITE | VM_EXEC, 1, NULL, NULL }
-
-#define INIT_THREAD  {                         \
-       ATOMIC_INIT(1),                         \
-       0,                                      \
-       0,                                      \
-       0,                                      \
-       { { { 0, }, }, },                       \
-       { 0, },                                 \
-       (struct context_save_struct *)0 \
-       EXTRA_THREAD_STRUCT_INIT                \
+#define INIT_MMAP {                                    \
+       vm_mm:          &init_mm,                       \
+       vm_page_prot:   PAGE_SHARED,                    \
+       vm_flags:       VM_READ | VM_WRITE | VM_EXEC,   \
+       vm_avl_height:  1,                              \
+}
+
+#define INIT_THREAD  {                                 \
+       refcount:       ATOMIC_INIT(1),                 \
+       EXTRA_THREAD_STRUCT_INIT                        \
 }
 
 /*
@@ -104,7+102,6 @@ extern __inline__ void init_thread_css(struct context_save_struct *save)
 
 /* Forward declaration, a strange C thing */
 struct task_struct;
-struct mm_struct;
 
 /* Free all resources held by a thread. */
 extern void release_thread(struct task_struct *);
index a1142be..f19eaed 100644 (file)
@@ -4,7+4,7 @@
 #ifdef __KERNEL__
 
 #include <linux/config.h>
-#include <linux/linkage.h>
+#include <linux/kernel.h>
 
 /* information about the system we're running on */
 extern unsigned int system_rev;
@@ -64,8+64,17 @@ extern struct task_struct *__switch_to(struct task_struct *prev, struct task_str
 
 #ifdef CONFIG_SMP
 #error SMP not supported
+
+#define smp_mb()               mb()
+#define smp_rmb()              rmb()
+#define smp_wmb()              wmb()
+
 #else
 
+#define smp_mb()               barrier()
+#define smp_rmb()              barrier()
+#define smp_wmb()              barrier()
+
 #define cli()                  __cli()
 #define sti()                  __sti()
 #define clf()                  __clf()
index cbee6c9..8255e9d 100644 (file)
 #define MCL_CURRENT    1               /* lock all current mappings */
 #define MCL_FUTURE     2               /* lock all future mappings */
 
+#define MADV_NORMAL    0x0             /* default page-in behavior */
+#define MADV_RANDOM    0x1             /* page-in minimum required */
+#define MADV_SEQUENTIAL        0x2             /* read-ahead aggressively */
+#define MADV_WILLNEED  0x3             /* pre-fault pages */
+#define MADV_DONTNEED  0x4             /* discard these pages */
+
 /* compatibility flags */
 #define MAP_ANON       MAP_ANONYMOUS
 #define MAP_FILE       0
diff --git a/include/asm-m68k/parport.h b/include/asm-m68k/parport.h
new file mode 100644 (file)
index 0000000..98a228a
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * parport.h: platform-specific PC-style parport initialisation
+ *
+ * Copyright (C) 1999, 2000  Tim Waugh <tim@cyberelk.demon.co.uk>
+ *
+ * This file should only be included by drivers/parport/parport_pc.c.
+ *
+ * RZ: for use with Q40 and other ISA machines
+ */
+
+#ifndef _ASM_M68K_PARPORT_H
+#define _ASM_M68K_PARPORT_H 1
+
+/* no dma, or IRQ autoprobing */
+static int __devinit parport_pc_find_isa_ports (int autoirq, int autodma);
+static int __devinit parport_pc_find_nonpci_ports (int autoirq, int autodma)
+{
+        if (! (MACH_IS_Q40))
+         return 0; /* count=0 */
+       return parport_pc_find_isa_ports (PARPORT_IRQ_NONE, PARPORT_DMA_NONE);
+}
+
+#endif /* !(_ASM_M68K_PARPORT_H) */
index 79d81ad..1bba127 100644 (file)
@@ -71,6+71,8 @@ struct thread_struct {
        unsigned short fs;              /* saved fs (sfc, dfc) */
        unsigned long  crp[2];          /* cpu root pointer */
        unsigned long  esp0;            /* points to SR of stack frame */
+       unsigned long  faddr;           /* info about last fault */
+       int            signo, code;
        unsigned long  fp[8*3];
        unsigned long  fpcntl[3];       /* fp control regs */
        unsigned char  fpstate[FPSTATESIZE];  /* floating point state */
@@ -81,7+83,6 @@ struct thread_struct {
 #define INIT_THREAD  { \
        sizeof(init_stack) + (unsigned long) init_stack, 0, \
        PS_S, __KERNEL_DS, \
-       {0, 0}, 0, {0,}, {0, 0, 0}, {0,}, \
 }
 
 /*
index b7e365b..dd34c1b 100644 (file)
  * RTC stuff merged for compactnes..
 */
 
-#if 1
+#ifndef _Q40_MASTER_H
+#define _Q40_MASTER_H
+
+#include <asm/io.h>
+
+
 #define q40_master_addr 0xff000000
 #define q40_rtc_addr    0xff021ffc
-#else
-extern unsigned long q40_master_addr;  /* wherever it is mapped ... */
-extern unsigned long q40_rtc_addr;
-#endif
 
 #define IIRQ_REG            0x0       /* internal IRQ reg */
 #define EIRQ_REG            0x4       /* external ... */
@@ -22,7+23,7 @@ extern unsigned long q40_rtc_addr;
 #define KEYBOARD_UNLOCK_REG 0x20      /* clear kb int */
 
 #define SAMPLE_ENABLE_REG   0x14      /* generate SAMPLE ints */
-#define SAMPLE_RATE_REG     0x28
+#define SAMPLE_RATE_REG     0x2c
 #define SAMPLE_CLEAR_REG    0x28
 #define SAMPLE_LOW          0x00
 #define SAMPLE_HIGH         0x01
@@ -34,9+35,13 @@ extern unsigned long q40_rtc_addr;
 #endif
 #define EXT_ENABLE_REG      0x10      /* ... rest of the ISA ints ... */
 
+#if 0
 #define master_inb(_reg_)           (*(((unsigned char *)q40_master_addr)+_reg_))
 #define master_outb(_b_,_reg_)      (*(((unsigned char *)q40_master_addr)+_reg_)=(_b_))
-
+#else
+#define master_inb(_reg_)      native_inb((unsigned char *)q40_master_addr+_reg_)
+#define master_outb(_b_,_reg_)  native_outb(_b_,(unsigned char *)q40_master_addr+_reg_)
+#endif
 
 /* define some Q40 specific ints */
 #include "q40ints.h"
@@ -55,21+60,13 @@ extern unsigned long q40_rtc_addr;
 #define RTC_CTRL        (*(unsigned char *)(Q40_RTC_BASE-28))
 
 
-#if 0
-struct RTC_STRUCT{ 
-  unsigned char bcd_year;
-  unsigned char bcd_mth;
-  unsigned char bcd_dom;
-  unsigned char bcd_dayofweek;
-  unsigned char bcd_hr;
-  unsigned char bcd_min;
-  unsigned char bcd_sec;
-  unsigned char ctrl;
-};
-typedef struct RTC_STRUCT *RtcPtr_t;
-#endif
-
-
 /* some control bits */
 #define RTC_READ   64  /* prepare for reading */
 #define RTC_WRITE  128
+
+
+/* misc defs */
+#define DAC_LEFT  ((unsigned char *)0xff008000)
+#define DAC_RIGHT ((unsigned char *)0xff008004)
+
+#endif /* _Q40_MASTER_H */
index f5e29c9..8aaca40 100644 (file)
@@ -4,7+4,7 @@
 
 #define Q40_IRQ_MAX      (34)
 
-#define Q40_IRQ_TIMER    (34)
+#define Q40_IRQ_SAMPLE    (34)
 #define Q40_IRQ_KEYBOARD (32)
 #define Q40_IRQ_FRAME    (33)
 
index 2a57829..6b48063 100644 (file)
@@ -23,8+23,9 @@ typedef struct siginfo {
 
                /* kill() */
                struct {
-                       pid_t _pid;             /* sender's pid */
-                       uid_t _uid;             /* sender's uid */
+                       __kernel_pid_t _pid;    /* sender's pid */
+                       __kernel_uid_t _uid;    /* backwards compatibility */
+                       __kernel_uid32_t _uid32; /* sender's uid */
                } _kill;
 
                /* POSIX.1b timers */
@@ -35,18+36,20 @@ typedef struct siginfo {
 
                /* POSIX.1b signals */
                struct {
-                       pid_t _pid;             /* sender's pid */
-                       uid_t _uid;             /* sender's uid */
+                       __kernel_pid_t _pid;    /* sender's pid */
+                       __kernel_uid_t _uid;    /* backwards compatibility */
                        sigval_t _sigval;
+                       __kernel_uid32_t _uid32; /* sender's uid */
                } _rt;
 
                /* SIGCHLD */
                struct {
-                       pid_t _pid;             /* which child */
-                       uid_t _uid;             /* sender's uid */
+                       __kernel_pid_t _pid;    /* which child */
+                       __kernel_uid_t _uid;    /* backwards compatibility */
                        int _status;            /* exit code */
                        clock_t _utime;
                        clock_t _stime;
+                       __kernel_uid32_t _uid32; /* sender's uid */
                } _sigchld;
 
                /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
@@ -62,11+65,18 @@ typedef struct siginfo {
        } _sifields;
 } siginfo_t;
 
+#define UID16_SIGINFO_COMPAT_NEEDED
+
 /*
  * How these fields are to be accessed.
  */
 #define si_pid         _sifields._kill._pid
+#ifdef __KERNEL__
+#define si_uid         _sifields._kill._uid32
+#define si_uid16       _sifields._kill._uid
+#else
 #define si_uid         _sifields._kill._uid
+#endif /* __KERNEL__ */
 #define si_status      _sifields._sigchld._status
 #define si_utime       _sifields._sigchld._utime
 #define si_stime       _sifields._sigchld._stime
index 9b88477..4c43eb8 100644 (file)
 #define __NR_sigpending                 73
 #define __NR_sethostname        74
 #define __NR_setrlimit          75
-#define __NR_old_getrlimit      76
+#define __NR_getrlimit          76
 #define __NR_getrusage          77
 #define __NR_gettimeofday       78
 #define __NR_settimeofday       79
 #define __NR_mremap            163
 #define __NR_setresuid         164
 #define __NR_getresuid         165
+#define __NR_getpagesize       166
 #define __NR_query_module      167
 #define __NR_poll              168
 #define __NR_nfsservctl                169
 #define __NR_getpmsg           188     /* some people actually want streams */
 #define __NR_putpmsg           189     /* some people actually want streams */
 #define __NR_vfork             190
-#define __NR_getrlimit         191
+#define __NR_ugetrlimit                191
 #define __NR_mmap2             192
 #define __NR_truncate64                193
 #define __NR_ftruncate64       194
index 9cac775..8c8b1f7 100644 (file)
@@ -13,7+13,6 @@ extern struct page *highmem_start_page;
 /* declarations for linux/mm/highmem.c */
 FASTCALL(unsigned int nr_free_highpages(void));
 
-extern struct page * prepare_highmem_swapout(struct page *);
 extern struct page * replace_with_highmem(struct page *);
 extern struct buffer_head * create_bounce(int rw, struct buffer_head * bh_orig);
 
@@ -31,7+30,6 @@ static inline void bh_kunmap(struct buffer_head *bh)
 #else /* CONFIG_HIGHMEM */
 
 static inline unsigned int nr_free_highpages(void) { return 0; }
-#define prepare_highmem_swapout(page) page
 #define replace_with_highmem(page) page
 
 static inline void *kmap(struct page *page) { return page_address(page); }
index 51c06ae..23cf7ed 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: isdn.h,v 1.110 2000/11/01 17:54:01 detabc Exp $
+/* $Id: isdn.h,v 1.111 2000/11/25 17:01:02 kai Exp $
 
  * Main header for the Linux ISDN subsystem (linklevel).
  *
@@ -684,10+684,8 @@ typedef struct isdn_devt {
 extern isdn_dev *dev;
 
 
-
 /* Utility-Macros */
 #define MIN(a,b) ((a<b)?a:b)
 #define MAX(a,b) ((a>b)?a:b)
-
 #endif /* __KERNEL__ */
 #endif /* isdn_h */
index 15ebaff..1d5d4f8 100644 (file)
@@ -1,4+1,4 @@
-/* $Id: isdnif.h,v 1.35 2000/06/16 13:19:38 keil Exp $
+/* $Id: isdnif.h,v 1.37 2000/11/19 17:01:54 kai Exp $
 
  * Linux ISDN subsystem
  *
 #define ISDN_PROTO_L2_V11038 9   /* V.110 bitrate adaption 38400 Baud */
 #define ISDN_PROTO_L2_MODEM  10  /* Analog Modem on Board */
 #define ISDN_PROTO_L2_FAX    11  /* Fax Group 2/3         */
+#define ISDN_PROTO_L2_HDLC_56K 12   /* HDLC 56k                          */
 #define ISDN_PROTO_L2_MAX    15  /* Max. 16 Protocols                 */
 
 /*
@@ -253,6+254,7 @@ typedef struct
 #define ISDN_FEATURE_L2_V11038  (0x0001 << ISDN_PROTO_L2_V11038)
 #define ISDN_FEATURE_L2_MODEM   (0x0001 << ISDN_PROTO_L2_MODEM)
 #define ISDN_FEATURE_L2_FAX    (0x0001 << ISDN_PROTO_L2_FAX)
+#define ISDN_FEATURE_L2_HDLC_56K (0x0001 << ISDN_PROTO_L2_HDLC_56K)
 
 #define ISDN_FEATURE_L2_MASK    (0x0FFFF) /* Max. 16 protocols */
 #define ISDN_FEATURE_L2_SHIFT   (0)
index 471c9af..e664eed 100644 (file)
@@ -185,8+185,6 @@ int get_joliet_filename(struct iso_directory_record *, unsigned char *, struct i
 int get_acorn_filename(struct iso_directory_record *, char *, struct inode *);
 
 extern struct dentry *isofs_lookup(struct inode *, struct dentry *);
-extern int isofs_get_block(struct inode *, long, struct buffer_head *, int);
-extern int isofs_bmap(struct inode *, int);
 extern struct buffer_head *isofs_bread(struct inode *, unsigned int, unsigned int);
 
 extern struct inode_operations isofs_dir_inode_operations;
index 332cabf..3dfb644 100644 (file)
@@ -290,13+290,19 @@ static __inline__ void *fb_memclear_small(void *s, size_t count)
       "1: lsrl   #1,%1 ; jcc 1f ; movew %2,%0@-\n\t"
       "1: lsrl   #1,%1 ; jcc 1f ; movel %2,%0@-\n\t"
       "1: lsrl   #1,%1 ; jcc 1f ; movel %2,%0@- ; movel %2,%0@-\n\t"
-      "1: subql  #1,%1 ; jcs 3f\n\t"
-      "2: moveml %2/%3/%4/%5,%0@-\n\t"
+      "1:"
+         : "=a" (s), "=d" (count)
+         : "d" (0), "0" ((char *)s+count), "1" (count)
+   );
+   __asm__ __volatile__(
+         "subql  #1,%1 ; jcs 3f\n\t"
+        "movel %2,%%d4; movel %2,%%d5; movel %2,%%d6\n\t"
+      "2: moveml %2/%%d4/%%d5/%%d6,%0@-\n\t"
          "dbra %1,2b\n\t"
       "3:"
          : "=a" (s), "=d" (count)
-         :  "d" (0), "d" (0), "d" (0), "d" (0),
-            "0" ((char *)s+count), "1" (count)
+         : "d" (0), "0" (s), "1" (count)
+        : "d4", "d5", "d6"
   );
 
    return(0);
@@ -355,13+361,19 @@ static __inline__ void *fb_memset255(void *s, size_t count)
       "1: lsrl   #1,%1 ; jcc 1f ; movew %2,%0@-\n\t"
       "1: lsrl   #1,%1 ; jcc 1f ; movel %2,%0@-\n\t"
       "1: lsrl   #1,%1 ; jcc 1f ; movel %2,%0@- ; movel %2,%0@-\n\t"
-      "1: subql  #1,%1 ; jcs 3f\n\t"
-      "2: moveml %2/%3/%4/%5,%0@-\n\t"
+      "1:"
+         : "=a" (s), "=d" (count)
+         : "d" (-1), "0" ((char *)s+count), "1" (count)
+   );
+   __asm__ __volatile__(
+         "subql  #1,%1 ; jcs 3f\n\t"
+        "movel %2,%%d4; movel %2,%%d5; movel %2,%%d6\n\t"
+      "2: moveml %2/%%d4/%%d5/%%d6,%0@-\n\t"
          "dbra %1,2b\n\t"
       "3:"
          : "=a" (s), "=d" (count)
-         :  "d" (-1), "d" (-1), "d" (-1), "d" (-1),
-            "0" ((char *) s + count), "1" (count)
+         : "d" (-1), "0" (s), "1" (count)
+        : "d4", "d5", "d6"
   );
 
    return(0);
index f748644..f933d29 100644 (file)
@@ -254,7+254,9 @@ static struct dev_name_struct {
        { "ida/c0d14p",0x48E0 },
        { "ida/c0d15p",0x48F0 },
 #endif
-
+#ifdef CONFIG_NFTL
+       { "nftla", 0x5d00 },
+#endif
        { NULL, 0 }
 };
 
index c4607fd..9164664 100644 (file)
--- a/ipc/shm.c
+++ b/ipc/shm.c
@@ -1484,8+1484,6 @@ static int shm_swap_core(struct shmid_kernel *shp, unsigned long idx, swp_entry_
                return RETRY;
 
        lock_page(page_map);
-       if (!(page_map = prepare_highmem_swapout(page_map)))
-               return FAILED;
        SHM_ENTRY (shp, idx) = swp_entry_to_pte(swap_entry);
 
        /* add the locked page to the swap cache before allowing
index e89149d..889025c 100644 (file)
@@ -100,7+100,8 @@ void inter_module_register(const char *im_name, struct module *owner, const void
                        spin_unlock(&ime_lock);
                        kfree(ime_new);
                        /* Program logic error, fatal */
-                       panic("inter_module_register: duplicate im_name '%s'", im_name);
+                       printk(KERN_ERR "inter_module_register: duplicate im_name '%s'", im_name);
+                       BUG();
                }
        }
        list_add(&(ime_new->list), &ime_list);
@@ -140,7+141,8 @@ void inter_module_unregister(const char *im_name)
        }
        else {
                /* Program logic error, fatal */
-               panic("inter_module_unregister: no entry for '%s'", im_name);
+               printk(KERN_ERR "inter_module_unregister: no entry for '%s'", im_name);
+               BUG();
        }
 }
 
@@ -211,7+213,8 @@ void inter_module_put(const char *im_name)
                }
        }
        spin_unlock(&ime_lock);
-       panic("inter_module_put: no entry for '%s'", im_name);
+       printk(KERN_ERR "inter_module_put: no entry for '%s'", im_name);
+       BUG();
 }
 
 
index 5e8ebde..ac8f69e 100644 (file)
 #include <linux/swap.h>
 #include <linux/slab.h>
 
-/*
- * Take one locked page, return another low-memory locked page.
- */
-struct page * prepare_highmem_swapout(struct page * page)
-{
-       struct page *new_page;
-       unsigned long regular_page;
-
-       /*
-        * If this is a highmem page so it can't be swapped out directly
-        * otherwise the b_data buffer addresses will break
-        * the lowlevel device drivers.
-        */
-       if (!PageHighMem(page))
-               return page;
-
-       /*
-        * Here we break the page lock, and we split the
-        * dirty page into two. We can unlock the old page,
-        * and we'll now have two of them. Too bad, it would
-        * have been nice to continue to potentially share
-        * across a fork().
-        */
-       UnlockPage(page);
-       regular_page = __get_free_page(GFP_ATOMIC);
-       if (!regular_page)
-               return NULL;
-
-       copy_page((void *)regular_page, kmap(page));
-       kunmap(page);
-
-       /*
-        * ok, we can just forget about our highmem page since 
-        * we stored its data into the new regular_page.
-        */
-       page_cache_release(page);
-       new_page = virt_to_page(regular_page);
-       LockPage(new_page);
-       return new_page;
-}
-
 struct page * replace_with_highmem(struct page * page)
 {
        struct page *highpage;
index 3a91d95..94a4087 100644 (file)
 
 #include <asm/pgtable.h>
 
+static int swap_writepage(struct file *file, struct page *page)
+{
+       rw_swap_page(WRITE, page, 0);
+       return 0;
+}
+
 static struct address_space_operations swap_aops = {
-       sync_page: block_sync_page
+       writepage: swap_writepage,
+       sync_page: block_sync_page,
 };
 
 struct address_space swapper_space = {
@@ -106,6+113,7 @@ void delete_from_swap_cache_nolock(struct page *page)
                lru_cache_del(page);
 
        spin_lock(&pagecache_lock);
+       ClearPageDirty(page);
        __delete_from_swap_cache(page);
        spin_unlock(&pagecache_lock);
        page_cache_release(page);
index dd92afe..c5b2d28 100644 (file)
@@ -91,6+91,7 @@ static int try_to_swap_out(struct mm_struct * mm, struct vm_area_struct* vma, un
         */
        if (PageSwapCache(page)) {
                entry.val = page->index;
+set_swap_pte:
                swap_duplicate(entry);
                set_pte(page_table, swp_entry_to_pte(entry));
 drop_pte:
@@ -99,7+100,8 @@ drop_pte:
                flush_tlb_page(vma, address);
                deactivate_page(page);
                page_cache_release(page);
-               goto out_failed;
+out_failed:
+               return 0;
        }
 
        /*
@@ -185,31+187,14 @@ drop_pte:
        if (!entry.val)
                goto out_unlock_restore; /* No swap space left */
 
-       /* Make sure to flush the TLB _before_ we start copying things.. */
-       flush_tlb_page(vma, address);
-       if (!(page = prepare_highmem_swapout(page)))
-               goto out_swap_free;
-
-       swap_duplicate(entry);  /* One for the process, one for the swap cache */
-
-       /* Add it to the swap cache */
+       /* Add it to the swap cache and mark it dirty */
        add_to_swap_cache(page, entry);
-
-       /* Put the swap entry into the pte after the page is in swapcache */
-       mm->rss--;
-       set_pte(page_table, swp_entry_to_pte(entry));
-       spin_unlock(&mm->page_table_lock);
-
-       /* OK, do a physical asynchronous write to swap.  */
-       rw_swap_page(WRITE, page, 0);
-       deactivate_page(page);
+       SetPageDirty(page);
+       goto set_swap_pte;
 
 out_free_success:
        page_cache_release(page);
        return 1;
-out_swap_free:
-       set_pte(page_table, pte);
-       swap_free(entry);
 out_failed:
        return 0;
 out_unlock_restore:
@@ -616,6+601,35 @@ dirty_page_rescan:
                }
 
                /*
+                * Dirty swap-cache page? Write it out if
+                * last copy..
+                */
+               if (PageDirty(page)) {
+                       int (*writepage)(struct file *, struct page *) = page->mapping->a_ops->writepage;
+                       if (!writepage)
+                               goto page_active;
+
+                       /* Can't start IO? Move it to the back of the list */
+                       if (!can_get_io_locks) {
+                               list_del(page_lru);
+                               list_add(page_lru, &inactive_dirty_list);
+                               UnlockPage(page);
+                               continue;
+                       }
+
+                       /* OK, do a physical asynchronous write to swap.  */
+                       ClearPageDirty(page);
+                       page_cache_get(page);
+                       spin_unlock(&pagemap_lru_lock);
+
+                       writepage(NULL, page);
+                       page_cache_release(page);
+
+                       /* And re-start the thing.. */
+                       goto dirty_page_rescan;
+               }
+
+               /*
                 * If the page has buffers, try to free the buffer mappings
                 * associated with this page. If we succeed we either free
                 * the page (in case it was a buffercache only page) or we
@@ -701,6+715,7 @@ dirty_page_rescan:
                        UnlockPage(page);
                        cleaned_pages++;
                } else {
+page_active:
                        /*
                         * OK, we don't know what to do with the page.
                         * It's no use keeping it here, so we move it to
close