@@ -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
@@ -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>
-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! :-)
--- /dev/null
+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
--- /dev/null
+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.
+
-$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
@@ -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.
VERSION = 2
PATCHLEVEL = 4
SUBLEVEL = 0
-EXTRAVERSION = -test11
+EXTRAVERSION = -test12
KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
@@ -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
@@ -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)
# 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
@@ -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
@@ -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
@@ -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
#
-# 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
# 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
@@ -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
#
-# 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
@@ -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
#
-# 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
# 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
--- /dev/null
+#
+# 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
@@ -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;
+ }
}
/**
@@ -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;
@@ -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(®s);
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;
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
@@ -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" (®s->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" (®s->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
*/
.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
#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
@@ -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);
#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;
@@ -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)
@@ -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
--- /dev/null
+/*
+ * 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})
+
-/*
- * 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
+
+++ /dev/null
-/*
- * 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})
-
+++ /dev/null
-#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
--- /dev/null
+#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
--- /dev/null
+/*
+ * 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})
--- /dev/null
+/*
+ * 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
+
--- /dev/null
+/*
+ * 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})
+
+
--- /dev/null
+/*
+ * 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})
--- /dev/null
+/*
+ * 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})
--- /dev/null
+/*
+ * 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
+
+
--- /dev/null
+/*
+ * 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})
+
+
--- /dev/null
+/*
+ * 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)
+
+
@@ -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)
{
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;
}
@@ -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
@@ -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;
@@ -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
@@ -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
@@ -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))
@@ -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. */
@@ -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))
{
@@ -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;
@@ -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;
@@ -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 );
}
# 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
. = TEXTADDR;
.init : {
+ _stext = .;
__init_begin = .; /* Init code and data */
*(.text.init)
__proc_info_begin = .;
{
. = TEXTADDR;
.init : { /* Init code and data */
+ _stext = .;
__init_begin = .;
*(.text.init)
__proc_info_begin = .;
@@ -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
@@ -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;
@@ -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
*/
@@ -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));
}
@@ -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);
}
@@ -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
@@ -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.
|
@@ -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
@@ -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)
@@ -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
|
|
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
|
|
.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
|###########################################################################
* 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)
@@ -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 */
+}
+
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);
#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
return ret;
}
+asmlinkage int sys_getpagesize(void)
+{
+ return PAGE_SIZE;
+}
+
/*
* Old cruft
*/
*
* 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)
$(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
--- /dev/null
+/* 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;
+}
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);
}
@@ -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;
+}
@@ -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
========
*/
#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)
{
* 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"
+ */
@@ -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);
}
#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));
}
@@ -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
#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);
* 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;
}
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 */
#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;
}
#
-# $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
@@ -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);
#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);
#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);
#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);
#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);
#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);
#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);
/*
- * $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);
-
/*
- * $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 *.
/*
- * $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);
-
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);
/*
- * $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
*
* 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);
#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);
#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);
#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);
/*
- * $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.
*
-/* $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];
-/* $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
*
-/* $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;
-/* $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;
-/* $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;
-/* $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;
-/* $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];
-/* $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;
-/* $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)
-/* $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):
-/* $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;
-/* $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;
-/* $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;
-/* $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
*
-/* $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;
-/* $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
*
*
*/
#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];
-/* $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
*
*
*/
#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;
-/* $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
*
*/
#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]);
-/* $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;
-/* $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
-/* $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];
-/* $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
-/* $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);
-/* $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
*
-// $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;
-/* $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;
-/* $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
*
*/
#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;
-/* $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;
-/* $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;
-/* $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;
-/* $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
*
*/
#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;
-/* $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];
-/* $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;
-/* $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)
*
-/* $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; \
-/* $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
@@ -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;
-// $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
-/* $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;
-/* $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))) {
-// $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);
-/* $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];
-// $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
#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;
-/* $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];
-/* $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];
-/* $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;
-/* $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];
-/* $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;
-/* $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
*
*/
#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];
-/* $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;
-/* $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;
-/* $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
*
*
*/
#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];
-/* $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];
-/* $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.
*
-/* $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;
-/* $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
-/* $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
-/* $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.
*
-/* $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
-/* $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;
-/* $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).
*
-/* $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).
*
-/* $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()
@@ -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;
-/* 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>
*
* 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)
@@ -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,
};
@@ -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)
+
@@ -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 {
/*
@@ -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);
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);
* 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))
;
@@ -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
#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>
@@ -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;
}
@@ -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;
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;
@@ -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);
}
@@ -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;
}
@@ -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,
};
@@ -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,
};
#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)
+++ /dev/null
-/*
- * 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
#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)
+++ /dev/null
-/*
- * 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
#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
@@ -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
+++ /dev/null
-/*
- * 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
#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
#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)
+++ /dev/null
-/*
- * 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
#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)
+++ /dev/null
-/*
- * 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
#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)
+++ /dev/null
-/*
- * 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
@@ -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
#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)
+++ /dev/null
-/*
- * 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
#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)
+++ /dev/null
-/*
- * 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
#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.
*/
#include <asm/arch/hardware.h>
-#ifdef PARAMS_OFFSET
-#define PARAMS_BASE ((PAGE_OFFSET) + (PARAMS_OFFSET))
-#else
-#define PARAMS_BASE 0
-#endif
-
#endif
#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)
{
@@ -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) \
({ \
@@ -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) \
({ \
#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)
#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
@@ -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 *);
#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()
#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
--- /dev/null
+/*
+ * 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) */
@@ -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,}, \
}
/*
* 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 */
#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)
@@ -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
#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
@@ -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); }
-/* $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 */
-/* $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)
@@ -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;
@@ -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);
@@ -254,7+254,9 @@ static struct dev_name_struct { { "ida/c0d14p",0x48E0 },
{ "ida/c0d15p",0x48F0 },
#endif
-
+#ifdef CONFIG_NFTL
+ { "nftla", 0x5d00 },
+#endif
{ NULL, 0 }
};
@@ -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
@@ -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();
}
#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;
#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);
@@ -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