Commit c662921a authored by Linus Torvalds's avatar Linus Torvalds

Merge bk://bk.arm.linux.org.uk

into home.transmeta.com:/home/torvalds/v2.5/linux
parents 007427b9 bf3abfa9
...@@ -15,7 +15,14 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y ...@@ -15,7 +15,14 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y
# Code maturity level options # Code maturity level options
# #
CONFIG_EXPERIMENTAL=y CONFIG_EXPERIMENTAL=y
# CONFIG_OBSOLETE is not set
#
# General setup
#
CONFIG_NET=y
# CONFIG_SYSVIPC is not set
# CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_SYSCTL=y
# #
# Loadable module support # Loadable module support
...@@ -27,6 +34,7 @@ CONFIG_KMOD=y ...@@ -27,6 +34,7 @@ CONFIG_KMOD=y
# #
# System Type # System Type
# #
# CONFIG_ARCH_ADIFCC is not set
# CONFIG_ARCH_ANAKIN is not set # CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set # CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set # CONFIG_ARCH_CLPS7500 is not set
...@@ -36,6 +44,7 @@ CONFIG_KMOD=y ...@@ -36,6 +44,7 @@ CONFIG_KMOD=y
# CONFIG_ARCH_CAMELOT is not set # CONFIG_ARCH_CAMELOT is not set
# CONFIG_ARCH_FOOTBRIDGE is not set # CONFIG_ARCH_FOOTBRIDGE is not set
# CONFIG_ARCH_INTEGRATOR is not set # CONFIG_ARCH_INTEGRATOR is not set
# CONFIG_ARCH_IOP310 is not set
# CONFIG_ARCH_L7200 is not set # CONFIG_ARCH_L7200 is not set
# CONFIG_ARCH_RPC is not set # CONFIG_ARCH_RPC is not set
CONFIG_ARCH_SA1100=y CONFIG_ARCH_SA1100=y
...@@ -48,15 +57,23 @@ CONFIG_ARCH_SA1100=y ...@@ -48,15 +57,23 @@ CONFIG_ARCH_SA1100=y
# #
# Archimedes/A5000 Implementations (select only ONE) # Archimedes/A5000 Implementations (select only ONE)
# #
# CONFIG_ARCH_ARC is not set
# CONFIG_ARCH_A5K is not set
# #
# Footbridge Implementations # Footbridge Implementations
# #
# CONFIG_ARCH_CATS is not set
# CONFIG_ARCH_PERSONAL_SERVER is not set
# CONFIG_ARCH_EBSA285_ADDIN is not set
# CONFIG_ARCH_EBSA285_HOST is not set
# CONFIG_ARCH_NETWINDER is not set
# #
# SA11x0 Implementations # SA11x0 Implementations
# #
# CONFIG_SA1100_ASSABET is not set # CONFIG_SA1100_ASSABET is not set
# CONFIG_ASSABET_NEPONSET is not set
# CONFIG_SA1100_ADSBITSY is not set # CONFIG_SA1100_ADSBITSY is not set
# CONFIG_SA1100_BRUTUS is not set # CONFIG_SA1100_BRUTUS is not set
# CONFIG_SA1100_CERF is not set # CONFIG_SA1100_CERF is not set
...@@ -78,6 +95,7 @@ CONFIG_SA1100_BADGE4=y ...@@ -78,6 +95,7 @@ CONFIG_SA1100_BADGE4=y
# CONFIG_SA1100_OMNIMETER is not set # CONFIG_SA1100_OMNIMETER is not set
# CONFIG_SA1100_PANGOLIN is not set # CONFIG_SA1100_PANGOLIN is not set
# CONFIG_SA1100_PLEB is not set # CONFIG_SA1100_PLEB is not set
# CONFIG_SA1100_PT_SYSTEM3 is not set
# CONFIG_SA1100_SHANNON is not set # CONFIG_SA1100_SHANNON is not set
# CONFIG_SA1100_SHERMAN is not set # CONFIG_SA1100_SHERMAN is not set
# CONFIG_SA1100_SIMPAD is not set # CONFIG_SA1100_SIMPAD is not set
...@@ -85,15 +103,23 @@ CONFIG_SA1100_BADGE4=y ...@@ -85,15 +103,23 @@ CONFIG_SA1100_BADGE4=y
# CONFIG_SA1100_VICTOR is not set # CONFIG_SA1100_VICTOR is not set
# CONFIG_SA1100_XP860 is not set # CONFIG_SA1100_XP860 is not set
# CONFIG_SA1100_YOPY is not set # CONFIG_SA1100_YOPY is not set
# CONFIG_SA1100_STORK is not set
CONFIG_SA1111=y CONFIG_SA1111=y
CONFIG_FORCE_MAX_ZONEORDER=9 CONFIG_FORCE_MAX_ZONEORDER=9
CONFIG_SA1100_USB=m # CONFIG_SA1100_USB is not set
CONFIG_SA1100_USB_NETLINK=m # CONFIG_SA1100_USB_NETLINK is not set
CONFIG_SA1100_USB_CHAR=m # CONFIG_SA1100_USB_CHAR is not set
# CONFIG_H3600_SLEEVE is not set
# #
# CLPS711X/EP721X Implementations # CLPS711X/EP721X Implementations
# #
# CONFIG_ARCH_AUTCPU12 is not set
# CONFIG_ARCH_CDB89712 is not set
# CONFIG_ARCH_CLEP7312 is not set
# CONFIG_ARCH_EDB7211 is not set
# CONFIG_ARCH_P720T is not set
# CONFIG_ARCH_FORTUNET is not set
# CONFIG_ARCH_EP7211 is not set # CONFIG_ARCH_EP7211 is not set
# CONFIG_ARCH_EP7212 is not set # CONFIG_ARCH_EP7212 is not set
# CONFIG_ARCH_ACORN is not set # CONFIG_ARCH_ACORN is not set
...@@ -117,6 +143,7 @@ CONFIG_CPU_32v4=y ...@@ -117,6 +143,7 @@ CONFIG_CPU_32v4=y
# CONFIG_CPU_ARM1020 is not set # CONFIG_CPU_ARM1020 is not set
# CONFIG_CPU_SA110 is not set # CONFIG_CPU_SA110 is not set
CONFIG_CPU_SA1100=y CONFIG_CPU_SA1100=y
# CONFIG_XSCALE_PMU is not set
# CONFIG_ARM_THUMB is not set # CONFIG_ARM_THUMB is not set
CONFIG_DISCONTIGMEM=y CONFIG_DISCONTIGMEM=y
...@@ -126,6 +153,7 @@ CONFIG_DISCONTIGMEM=y ...@@ -126,6 +153,7 @@ CONFIG_DISCONTIGMEM=y
# CONFIG_PCI is not set # CONFIG_PCI is not set
CONFIG_ISA=y CONFIG_ISA=y
# CONFIG_ISA_DMA is not set # CONFIG_ISA_DMA is not set
# CONFIG_FIQ is not set
CONFIG_CPU_FREQ=y CONFIG_CPU_FREQ=y
CONFIG_HOTPLUG=y CONFIG_HOTPLUG=y
...@@ -134,13 +162,11 @@ CONFIG_HOTPLUG=y ...@@ -134,13 +162,11 @@ CONFIG_HOTPLUG=y
# #
CONFIG_PCMCIA=y CONFIG_PCMCIA=y
CONFIG_PCMCIA_PROBE=y CONFIG_PCMCIA_PROBE=y
# CONFIG_I82092 is not set
# CONFIG_I82365 is not set # CONFIG_I82365 is not set
# CONFIG_TCIC is not set # CONFIG_TCIC is not set
# CONFIG_PCMCIA_CLPS6700 is not set
CONFIG_PCMCIA_SA1100=y CONFIG_PCMCIA_SA1100=y
CONFIG_NET=y
# CONFIG_SYSVIPC is not set
# CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_SYSCTL=y
# #
# At least one math emulation must be selected # At least one math emulation must be selected
...@@ -153,6 +179,8 @@ CONFIG_BINFMT_AOUT=m ...@@ -153,6 +179,8 @@ CONFIG_BINFMT_AOUT=m
CONFIG_BINFMT_ELF=y CONFIG_BINFMT_ELF=y
CONFIG_BINFMT_MISC=m CONFIG_BINFMT_MISC=m
# CONFIG_PM is not set # CONFIG_PM is not set
# CONFIG_PREEMPT is not set
# CONFIG_APM is not set
CONFIG_ARTHUR=m CONFIG_ARTHUR=m
CONFIG_CMDLINE="init=/linuxrc root=/dev/mtdblock3" CONFIG_CMDLINE="init=/linuxrc root=/dev/mtdblock3"
# CONFIG_LEDS is not set # CONFIG_LEDS is not set
...@@ -161,14 +189,23 @@ CONFIG_ALIGNMENT_TRAP=y ...@@ -161,14 +189,23 @@ CONFIG_ALIGNMENT_TRAP=y
# #
# Parallel port support # Parallel port support
# #
# CONFIG_PARPORT is not set CONFIG_PARPORT=m
# CONFIG_PARPORT_PC is not set
# 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_GSC is not set
# CONFIG_PARPORT_SUNBPP is not set
# CONFIG_PARPORT_OTHER is not set
# CONFIG_PARPORT_1284 is not set
# #
# Memory Technology Devices (MTD) # Memory Technology Devices (MTD)
# #
CONFIG_MTD=y CONFIG_MTD=y
CONFIG_MTD_DEBUG=y CONFIG_MTD_DEBUG=y
CONFIG_MTD_DEBUG_VERBOSE=1 CONFIG_MTD_DEBUG_VERBOSE=0
CONFIG_MTD_PARTITIONS=y CONFIG_MTD_PARTITIONS=y
# CONFIG_MTD_REDBOOT_PARTS is not set # CONFIG_MTD_REDBOOT_PARTS is not set
# CONFIG_MTD_BOOTLDR_PARTS is not set # CONFIG_MTD_BOOTLDR_PARTS is not set
...@@ -205,6 +242,9 @@ CONFIG_MTD_RAM=y ...@@ -205,6 +242,9 @@ CONFIG_MTD_RAM=y
# CONFIG_MTD_ROM is not set # CONFIG_MTD_ROM is not set
# CONFIG_MTD_ABSENT is not set # CONFIG_MTD_ABSENT is not set
# CONFIG_MTD_OBSOLETE_CHIPS is not set # CONFIG_MTD_OBSOLETE_CHIPS is not set
# CONFIG_MTD_AMDSTD is not set
# CONFIG_MTD_SHARP is not set
# CONFIG_MTD_JEDEC is not set
# #
# Mapping drivers for chip access # Mapping drivers for chip access
...@@ -212,17 +252,21 @@ CONFIG_MTD_RAM=y ...@@ -212,17 +252,21 @@ CONFIG_MTD_RAM=y
# CONFIG_MTD_PHYSMAP is not set # CONFIG_MTD_PHYSMAP is not set
# CONFIG_MTD_NORA is not set # CONFIG_MTD_NORA is not set
# CONFIG_MTD_ARM_INTEGRATOR is not set # CONFIG_MTD_ARM_INTEGRATOR is not set
# CONFIG_MTD_CDB89712 is not set
CONFIG_MTD_SA1100=y CONFIG_MTD_SA1100=y
# CONFIG_MTD_2PARTS_IPAQ is not set
# CONFIG_MTD_DC21285 is not set
# CONFIG_MTD_IQ80310 is not set # CONFIG_MTD_IQ80310 is not set
# CONFIG_MTD_EPXA10DB is not set
# CONFIG_MTD_PCI is not set
# #
# Self-contained MTD device drivers # Self-contained MTD device drivers
# #
# CONFIG_MTD_PMC551 is not set
# CONFIG_MTD_SLRAM is not set # CONFIG_MTD_SLRAM is not set
CONFIG_MTD_MTDRAM=m # CONFIG_MTD_MTDRAM is not set
CONFIG_MTDRAM_TOTAL_SIZE=4096 # CONFIG_MTD_BLKMTD is not set
CONFIG_MTDRAM_ERASE_SIZE=128
CONFIG_MTD_BLKMTD=m
# #
# Disk-On-Chip Device Drivers # Disk-On-Chip Device Drivers
...@@ -241,22 +285,35 @@ CONFIG_MTD_BLKMTD=m ...@@ -241,22 +285,35 @@ CONFIG_MTD_BLKMTD=m
# Plug and Play configuration # Plug and Play configuration
# #
# CONFIG_PNP is not set # CONFIG_PNP is not set
# CONFIG_ISAPNP is not set
# CONFIG_PNPBIOS is not set
# #
# Block devices # Block devices
# #
# CONFIG_BLK_DEV_FD is not set # CONFIG_BLK_DEV_FD is not set
# CONFIG_BLK_DEV_XD 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_CISS_SCSI_TAPE is not set
# CONFIG_BLK_DEV_DAC960 is not set
CONFIG_BLK_DEV_LOOP=y CONFIG_BLK_DEV_LOOP=y
CONFIG_BLK_DEV_NBD=m CONFIG_BLK_DEV_NBD=m
CONFIG_BLK_DEV_RAM=y # CONFIG_BLK_DEV_RAM is not set
CONFIG_BLK_DEV_RAM_SIZE=4096
# CONFIG_BLK_DEV_INITRD is not set # CONFIG_BLK_DEV_INITRD is not set
# #
# Multi-device support (RAID and LVM) # Multi-device support (RAID and LVM)
# #
# CONFIG_MD is not set # CONFIG_MD is not set
# CONFIG_BLK_DEV_MD is not set
# CONFIG_MD_LINEAR is not set
# CONFIG_MD_RAID0 is not set
# CONFIG_MD_RAID1 is not set
# CONFIG_MD_RAID5 is not set
# CONFIG_MD_MULTIPATH is not set
# CONFIG_BLK_DEV_LVM is not set
# #
# Networking options # Networking options
...@@ -325,9 +382,16 @@ CONFIG_NETDEVICES=y ...@@ -325,9 +382,16 @@ CONFIG_NETDEVICES=y
# #
# Ethernet (1000 Mbit) # Ethernet (1000 Mbit)
# #
# CONFIG_ACENIC_OMIT_TIGON_I is not set # CONFIG_ACENIC is not set
# CONFIG_DL2K is not set
# CONFIG_MYRI_SBUS is not set
# CONFIG_NS83820 is not set
# CONFIG_HAMACHI is not set
# CONFIG_YELLOWFIN is not set
# CONFIG_SK98LIN is not set
# CONFIG_FDDI is not set # CONFIG_FDDI is not set
# CONFIG_HIPPI is not set # CONFIG_HIPPI is not set
# CONFIG_PLIP is not set
# CONFIG_PPP is not set # CONFIG_PPP is not set
# CONFIG_SLIP is not set # CONFIG_SLIP is not set
...@@ -336,15 +400,23 @@ CONFIG_NETDEVICES=y ...@@ -336,15 +400,23 @@ CONFIG_NETDEVICES=y
# #
CONFIG_NET_RADIO=y CONFIG_NET_RADIO=y
# CONFIG_STRIP is not set # CONFIG_STRIP is not set
# CONFIG_WAVELAN is not set
# CONFIG_ARLAN is not set # CONFIG_ARLAN is not set
# CONFIG_AIRONET4500 is not set # CONFIG_AIRONET4500 is not set
# CONFIG_AIRONET4500_NONCS is not set
# CONFIG_AIRONET4500_PROC is not set
#
# Wireless ISA/PCI cards support
#
# CONFIG_WAVELAN is not set
# CONFIG_AIRO is not set # CONFIG_AIRO is not set
CONFIG_HERMES=y CONFIG_HERMES=y
# #
# Wireless Pcmcia cards support # Wireless Pcmcia/Cardbus cards support
# #
CONFIG_PCMCIA_NETWAVE=m
CONFIG_PCMCIA_WAVELAN=m
CONFIG_PCMCIA_HERMES=y CONFIG_PCMCIA_HERMES=y
CONFIG_AIRO_CS=m CONFIG_AIRO_CS=m
CONFIG_NET_WIRELESS=y CONFIG_NET_WIRELESS=y
...@@ -354,6 +426,7 @@ CONFIG_NET_WIRELESS=y ...@@ -354,6 +426,7 @@ CONFIG_NET_WIRELESS=y
# #
# CONFIG_TR is not set # CONFIG_TR is not set
# CONFIG_NET_FC is not set # CONFIG_NET_FC is not set
# CONFIG_RCPCI is not set
# CONFIG_SHAPER is not set # CONFIG_SHAPER is not set
# #
...@@ -369,14 +442,15 @@ CONFIG_PCMCIA_3C589=y ...@@ -369,14 +442,15 @@ CONFIG_PCMCIA_3C589=y
CONFIG_PCMCIA_3C574=m CONFIG_PCMCIA_3C574=m
CONFIG_PCMCIA_FMVJ18X=m CONFIG_PCMCIA_FMVJ18X=m
CONFIG_PCMCIA_PCNET=y CONFIG_PCMCIA_PCNET=y
CONFIG_PCMCIA_AXNET=m
CONFIG_PCMCIA_NMCLAN=m CONFIG_PCMCIA_NMCLAN=m
CONFIG_PCMCIA_SMC91C92=m CONFIG_PCMCIA_SMC91C92=m
CONFIG_PCMCIA_XIRC2PS=m CONFIG_PCMCIA_XIRC2PS=m
CONFIG_PCMCIA_AXNET=m
# CONFIG_ARCNET_COM20020_CS is not set
# CONFIG_PCMCIA_IBMTR is not set
CONFIG_NET_PCMCIA_RADIO=y CONFIG_NET_PCMCIA_RADIO=y
CONFIG_PCMCIA_RAYCS=m CONFIG_PCMCIA_RAYCS=m
CONFIG_PCMCIA_NETWAVE=m # CONFIG_AIRONET4500_CS is not set
CONFIG_PCMCIA_WAVELAN=m
# #
# Amateur Radio support # Amateur Radio support
...@@ -392,9 +466,16 @@ CONFIG_IRDA=y ...@@ -392,9 +466,16 @@ CONFIG_IRDA=y
# IrDA protocols # IrDA protocols
# #
CONFIG_IRLAN=y CONFIG_IRLAN=y
# CONFIG_IRNET is not set
CONFIG_IRCOMM=y CONFIG_IRCOMM=y
CONFIG_IRDA_ULTRA=y CONFIG_IRDA_ULTRA=y
# CONFIG_IRDA_OPTIONS is not set
#
# IrDA options
#
# CONFIG_IRDA_CACHE_LAST_LSAP is not set
# CONFIG_IRDA_FAST_RR is not set
# CONFIG_IRDA_DEBUG is not set
# #
# Infrared-port device drivers # Infrared-port device drivers
...@@ -440,23 +521,36 @@ CONFIG_BLK_DEV_IDE=m ...@@ -440,23 +521,36 @@ CONFIG_BLK_DEV_IDE=m
# CONFIG_BLK_DEV_HD is not set # CONFIG_BLK_DEV_HD is not set
CONFIG_BLK_DEV_IDEDISK=m CONFIG_BLK_DEV_IDEDISK=m
# CONFIG_IDEDISK_MULTI_MODE is not set # CONFIG_IDEDISK_MULTI_MODE is not set
# CONFIG_IDEDISK_STROKE is not set
# CONFIG_BLK_DEV_IDEDISK_VENDOR 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_COMMERIAL is not set
# CONFIG_BLK_DEV_TIVO is not set
# CONFIG_BLK_DEV_IDECS is not set # CONFIG_BLK_DEV_IDECS is not set
CONFIG_BLK_DEV_IDECD=m CONFIG_BLK_DEV_IDECD=m
CONFIG_BLK_DEV_IDETAPE=m # CONFIG_BLK_DEV_IDETAPE is not set
CONFIG_BLK_DEV_IDEFLOPPY=m CONFIG_BLK_DEV_IDEFLOPPY=m
CONFIG_BLK_DEV_IDESCSI=m CONFIG_BLK_DEV_IDESCSI=m
# CONFIG_IDE_TASK_IOCTL is not set
# #
# IDE chipset support/bugfixes # IDE chipset support/bugfixes
# #
# CONFIG_BLK_DEV_CMD640 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_IDE_CHIPSETS is not set
# CONFIG_IDEDMA_AUTO is not set # CONFIG_IDEDMA_AUTO is not set
# CONFIG_DMA_NONPCI is not set # CONFIG_DMA_NONPCI is not set
# CONFIG_BLK_DEV_IDE_MODES is not set # CONFIG_BLK_DEV_IDE_MODES is not set
# CONFIG_BLK_DEV_ATARAID is not set # CONFIG_BLK_DEV_ATARAID is not set
# CONFIG_BLK_DEV_ATARAID_PDC is not set
# CONFIG_BLK_DEV_ATARAID_HPT is not set
# #
# SCSI support # SCSI support
...@@ -469,7 +563,7 @@ CONFIG_SCSI=y ...@@ -469,7 +563,7 @@ CONFIG_SCSI=y
CONFIG_BLK_DEV_SD=y CONFIG_BLK_DEV_SD=y
CONFIG_SD_EXTRA_DEVS=40 CONFIG_SD_EXTRA_DEVS=40
CONFIG_CHR_DEV_ST=m CONFIG_CHR_DEV_ST=m
CONFIG_CHR_DEV_OSST=m # CONFIG_CHR_DEV_OSST is not set
CONFIG_BLK_DEV_SR=m CONFIG_BLK_DEV_SR=m
# CONFIG_BLK_DEV_SR_VENDOR is not set # CONFIG_BLK_DEV_SR_VENDOR is not set
CONFIG_SR_EXTRA_DEVS=2 CONFIG_SR_EXTRA_DEVS=2
...@@ -478,7 +572,6 @@ CONFIG_CHR_DEV_SG=y ...@@ -478,7 +572,6 @@ CONFIG_CHR_DEV_SG=y
# #
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs # Some SCSI devices (e.g. CD jukebox) support multiple LUNs
# #
# CONFIG_SCSI_DEBUG_QUEUES is not set
# CONFIG_SCSI_MULTI_LUN is not set # CONFIG_SCSI_MULTI_LUN is not set
# CONFIG_SCSI_CONSTANTS is not set # CONFIG_SCSI_CONSTANTS is not set
# CONFIG_SCSI_LOGGING is not set # CONFIG_SCSI_LOGGING is not set
...@@ -496,8 +589,10 @@ CONFIG_CHR_DEV_SG=y ...@@ -496,8 +589,10 @@ CONFIG_CHR_DEV_SG=y
# CONFIG_SCSI_DPT_I2O is not set # CONFIG_SCSI_DPT_I2O is not set
# CONFIG_SCSI_ADVANSYS is not set # CONFIG_SCSI_ADVANSYS is not set
# CONFIG_SCSI_IN2000 is not set # CONFIG_SCSI_IN2000 is not set
# CONFIG_SCSI_AM53C974 is not set
# CONFIG_SCSI_MEGARAID is not set # CONFIG_SCSI_MEGARAID is not set
# CONFIG_SCSI_BUSLOGIC is not set # CONFIG_SCSI_BUSLOGIC is not set
# CONFIG_SCSI_DMX3191D is not set
# CONFIG_SCSI_DTC3280 is not set # CONFIG_SCSI_DTC3280 is not set
# CONFIG_SCSI_EATA is not set # CONFIG_SCSI_EATA is not set
# CONFIG_SCSI_EATA_DMA is not set # CONFIG_SCSI_EATA_DMA is not set
...@@ -505,10 +600,12 @@ CONFIG_CHR_DEV_SG=y ...@@ -505,10 +600,12 @@ CONFIG_CHR_DEV_SG=y
# CONFIG_SCSI_FUTURE_DOMAIN is not set # CONFIG_SCSI_FUTURE_DOMAIN is not set
# CONFIG_SCSI_GDTH is not set # CONFIG_SCSI_GDTH is not set
# CONFIG_SCSI_GENERIC_NCR5380 is not set # CONFIG_SCSI_GENERIC_NCR5380 is not set
# CONFIG_SCSI_INITIO is not set
# CONFIG_SCSI_INIA100 is not set
# CONFIG_SCSI_PPA is not set
# CONFIG_SCSI_IMM is not set
# CONFIG_SCSI_NCR53C406A is not set # CONFIG_SCSI_NCR53C406A is not set
# CONFIG_SCSI_NCR53C7xx_sync is not set # CONFIG_SCSI_NCR53C7xx is not set
# CONFIG_SCSI_NCR53C7xx_FAST is not set
# CONFIG_SCSI_NCR53C7xx_DISCONNECT is not set
# CONFIG_SCSI_PAS16 is not set # CONFIG_SCSI_PAS16 is not set
# CONFIG_SCSI_PCI2000 is not set # CONFIG_SCSI_PCI2000 is not set
# CONFIG_SCSI_PCI2220I is not set # CONFIG_SCSI_PCI2220I is not set
...@@ -528,11 +625,11 @@ CONFIG_CHR_DEV_SG=y ...@@ -528,11 +625,11 @@ CONFIG_CHR_DEV_SG=y
# #
# I2O device support # I2O device support
# #
CONFIG_I2O=m # CONFIG_I2O is not set
CONFIG_I2O_BLOCK=m # CONFIG_I2O_BLOCK is not set
CONFIG_I2O_LAN=m # CONFIG_I2O_LAN is not set
CONFIG_I2O_SCSI=m # CONFIG_I2O_SCSI is not set
CONFIG_I2O_PROC=m # CONFIG_I2O_PROC is not set
# #
# ISDN subsystem # ISDN subsystem
...@@ -540,40 +637,75 @@ CONFIG_I2O_PROC=m ...@@ -540,40 +637,75 @@ CONFIG_I2O_PROC=m
# CONFIG_ISDN is not set # CONFIG_ISDN is not set
# #
# Input core support # Input device support
# #
CONFIG_INPUT=m # CONFIG_INPUT is not set
CONFIG_INPUT_KEYBDEV=m # CONFIG_INPUT_KEYBDEV is not set
# CONFIG_INPUT_MOUSEDEV is not set # CONFIG_INPUT_MOUSEDEV is not set
# CONFIG_INPUT_JOYDEV is not set # CONFIG_INPUT_JOYDEV is not set
# CONFIG_INPUT_EVDEV is not set # CONFIG_INPUT_EVDEV is not set
# CONFIG_GAMEPORT is not set
CONFIG_SOUND_GAMEPORT=y
# CONFIG_GAMEPORT_NS558 is not set
# CONFIG_GAMEPORT_L4 is not set
# CONFIG_INPUT_EMU10K1 is not set
# CONFIG_GAMEPORT_PCIGAME is not set
# CONFIG_GAMEPORT_FM801 is not set
# CONFIG_GAMEPORT_CS461x is not set
# CONFIG_SERIO is not set
# CONFIG_SERIO_SERPORT is not set
# #
# Character devices # Character devices
# #
# CONFIG_VT is not set # CONFIG_VT is not set
# CONFIG_SERIAL is not set # CONFIG_SERIAL is not set
# CONFIG_SERIAL_EXTENDED is not set
# CONFIG_SERIAL_NONSTANDARD is not set # CONFIG_SERIAL_NONSTANDARD is not set
# #
# Serial drivers # Serial drivers
# #
# CONFIG_SERIAL_ANAKIN is not set
# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
# CONFIG_SERIAL_AMBA is not set
# CONFIG_SERIAL_AMBA_CONSOLE is not set
# CONFIG_SERIAL_CLPS711X is not set
# CONFIG_SERIAL_CLPS711X_CONSOLE is not set
# CONFIG_SERIAL_21285 is not set
# CONFIG_SERIAL_21285_OLD is not set
# CONFIG_SERIAL_21285_CONSOLE is not set
# CONFIG_SERIAL_UART00 is not set
# CONFIG_SERIAL_UART00_CONSOLE is not set
CONFIG_SERIAL_SA1100=y CONFIG_SERIAL_SA1100=y
CONFIG_SERIAL_SA1100_CONSOLE=y CONFIG_SERIAL_SA1100_CONSOLE=y
CONFIG_SA1100_DEFAULT_BAUDRATE=115200 CONFIG_SA1100_DEFAULT_BAUDRATE=115200
# CONFIG_SERIAL_8250 is not set # CONFIG_SERIAL_8250 is not set
# CONFIG_SERIAL_8250_CONSOLE is not set
# CONFIG_ATOMWIDE_SERIAL is not set
# CONFIG_DUALSP_SERIAL is not set
# CONFIG_SERIAL_8250_EXTENDED is not set
# CONFIG_SERIAL_8250_MANY_PORTS is not set
# CONFIG_SERIAL_8250_SHARE_IRQ is not set
# CONFIG_SERIAL_8250_DETECT_IRQ is not set
# CONFIG_SERIAL_8250_MULTIPORT is not set
# CONFIG_SERIAL_8250_RSA is not set
CONFIG_SERIAL_CORE=y CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_UNIX98_PTYS=y CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=256 CONFIG_UNIX98_PTY_COUNT=256
# CONFIG_PRINTER is not set
# CONFIG_PPDEV is not set
# #
# I2C support # I2C support
# #
CONFIG_I2C=m CONFIG_I2C=m
CONFIG_I2C_ALGOBIT=m CONFIG_I2C_ALGOBIT=m
# CONFIG_I2C_PHILIPSPAR is not set
CONFIG_I2C_ELV=m CONFIG_I2C_ELV=m
CONFIG_I2C_VELLEMAN=m CONFIG_I2C_VELLEMAN=m
# CONFIG_I2C_BIT_SA1100_GPIO is not set
CONFIG_I2C_ALGOPCF=m CONFIG_I2C_ALGOPCF=m
CONFIG_I2C_ELEKTOR=m CONFIG_I2C_ELEKTOR=m
CONFIG_I2C_CHARDEV=m CONFIG_I2C_CHARDEV=m
...@@ -582,11 +714,14 @@ CONFIG_I2C_PROC=m ...@@ -582,11 +714,14 @@ CONFIG_I2C_PROC=m
# #
# L3 serial bus support # L3 serial bus support
# #
CONFIG_L3=m CONFIG_L3=y
# CONFIG_L3_ALGOBIT is not set
# CONFIG_L3_BIT_SA1100_GPIO is not set
# #
# Other L3 adapters # Other L3 adapters
# #
CONFIG_L3_SA1111=y
# CONFIG_BIT_SA1100_GPIO is not set # CONFIG_BIT_SA1100_GPIO is not set
# #
...@@ -594,17 +729,6 @@ CONFIG_L3=m ...@@ -594,17 +729,6 @@ CONFIG_L3=m
# #
# CONFIG_BUSMOUSE is not set # CONFIG_BUSMOUSE is not set
# CONFIG_MOUSE is not set # CONFIG_MOUSE is not set
#
# Joysticks
#
# CONFIG_INPUT_GAMEPORT is not set
# CONFIG_INPUT_SERIO is not set
#
# Joysticks
#
# CONFIG_INPUT_IFORCE_USB is not set
# CONFIG_QIC02_TAPE is not set # CONFIG_QIC02_TAPE is not set
# #
...@@ -618,6 +742,8 @@ CONFIG_SOFT_WATCHDOG=m ...@@ -618,6 +742,8 @@ CONFIG_SOFT_WATCHDOG=m
# CONFIG_PCWATCHDOG is not set # CONFIG_PCWATCHDOG is not set
# CONFIG_ACQUIRE_WDT is not set # CONFIG_ACQUIRE_WDT is not set
# CONFIG_ADVANTECH_WDT is not set # CONFIG_ADVANTECH_WDT is not set
# CONFIG_21285_WATCHDOG is not set
# CONFIG_977_WATCHDOG is not set
CONFIG_SA1100_WATCHDOG=m CONFIG_SA1100_WATCHDOG=m
# CONFIG_EUROTECH_WDT is not set # CONFIG_EUROTECH_WDT is not set
# CONFIG_IB700_WDT is not set # CONFIG_IB700_WDT is not set
...@@ -626,6 +752,7 @@ CONFIG_SA1100_WATCHDOG=m ...@@ -626,6 +752,7 @@ CONFIG_SA1100_WATCHDOG=m
# CONFIG_60XX_WDT is not set # CONFIG_60XX_WDT is not set
# CONFIG_W83877F_WDT is not set # CONFIG_W83877F_WDT is not set
# CONFIG_MACHZ_WDT is not set # CONFIG_MACHZ_WDT is not set
# CONFIG_INTEL_RNG is not set
# CONFIG_NVRAM is not set # CONFIG_NVRAM is not set
CONFIG_RTC=m CONFIG_RTC=m
CONFIG_SA1100_RTC=m CONFIG_SA1100_RTC=m
...@@ -647,7 +774,51 @@ CONFIG_SA1100_RTC=m ...@@ -647,7 +774,51 @@ CONFIG_SA1100_RTC=m
# #
# Multimedia devices # Multimedia devices
# #
# CONFIG_VIDEO_DEV is not set CONFIG_VIDEO_DEV=y
#
# Video For Linux
#
CONFIG_VIDEO_PROC_FS=y
# CONFIG_I2C_PARPORT is not set
#
# Video Adapters
#
# CONFIG_VIDEO_BT848 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_ZORAN_BUZ is not set
# CONFIG_VIDEO_ZORAN_DC10 is not set
# CONFIG_VIDEO_ZORAN_LML33 is not set
# CONFIG_VIDEO_ZR36120 is not set
# CONFIG_VIDEO_MEYE is not set
# CONFIG_VIDEO_CYBERPRO 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_GEMTEK_PCI is not set
# CONFIG_RADIO_MAXIRADIO is not set
# CONFIG_RADIO_MAESTRO is not set
# CONFIG_RADIO_MIROPCM20 is not set
# CONFIG_RADIO_MIROPCM20_RDS 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 # File systems
...@@ -656,15 +827,18 @@ CONFIG_SA1100_RTC=m ...@@ -656,15 +827,18 @@ CONFIG_SA1100_RTC=m
# CONFIG_AUTOFS_FS is not set # CONFIG_AUTOFS_FS is not set
# CONFIG_AUTOFS4_FS is not set # CONFIG_AUTOFS4_FS is not set
# CONFIG_REISERFS_FS is not set # CONFIG_REISERFS_FS is not set
# CONFIG_REISERFS_CHECK is not set
# CONFIG_REISERFS_PROC_INFO is not set
# CONFIG_ADFS_FS is not set # CONFIG_ADFS_FS is not set
# CONFIG_ADFS_FS_RW is not set
# CONFIG_AFFS_FS is not set # CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set # CONFIG_HFS_FS is not set
# CONFIG_BFS_FS is not set # CONFIG_BFS_FS is not set
CONFIG_EXT3_FS=m CONFIG_EXT3_FS=m
CONFIG_JBD=m CONFIG_JBD=m
# CONFIG_JBD_DEBUG is not set # CONFIG_JBD_DEBUG is not set
CONFIG_FAT_FS=m CONFIG_FAT_FS=y
CONFIG_MSDOS_FS=m CONFIG_MSDOS_FS=y
# CONFIG_UMSDOS_FS is not set # CONFIG_UMSDOS_FS is not set
CONFIG_VFAT_FS=m CONFIG_VFAT_FS=m
# CONFIG_EFS_FS is not set # CONFIG_EFS_FS is not set
...@@ -672,12 +846,15 @@ CONFIG_VFAT_FS=m ...@@ -672,12 +846,15 @@ CONFIG_VFAT_FS=m
CONFIG_JFFS2_FS=y CONFIG_JFFS2_FS=y
CONFIG_JFFS2_FS_DEBUG=0 CONFIG_JFFS2_FS_DEBUG=0
CONFIG_CRAMFS=m CONFIG_CRAMFS=m
# CONFIG_TMPFS is not set CONFIG_TMPFS=y
# CONFIG_RAMFS is not set CONFIG_RAMFS=y
# CONFIG_ISO9660_FS is not set # CONFIG_ISO9660_FS is not set
# CONFIG_JOLIET is not set
# CONFIG_ZISOFS is not set
CONFIG_MINIX_FS=m CONFIG_MINIX_FS=m
# CONFIG_VXFS_FS is not set # CONFIG_VXFS_FS is not set
# CONFIG_NTFS_FS is not set # CONFIG_NTFS_FS is not set
# CONFIG_NTFS_RW is not set
# CONFIG_HPFS_FS is not set # CONFIG_HPFS_FS is not set
CONFIG_PROC_FS=y CONFIG_PROC_FS=y
CONFIG_DEVFS_FS=y CONFIG_DEVFS_FS=y
...@@ -685,11 +862,14 @@ CONFIG_DEVFS_MOUNT=y ...@@ -685,11 +862,14 @@ CONFIG_DEVFS_MOUNT=y
# CONFIG_DEVFS_DEBUG is not set # CONFIG_DEVFS_DEBUG is not set
# CONFIG_DEVPTS_FS is not set # CONFIG_DEVPTS_FS is not set
# CONFIG_QNX4FS_FS is not set # CONFIG_QNX4FS_FS is not set
# CONFIG_QNX4FS_RW is not set
# CONFIG_ROMFS_FS is not set # CONFIG_ROMFS_FS is not set
CONFIG_EXT2_FS=m CONFIG_EXT2_FS=m
# CONFIG_SYSV_FS is not set # CONFIG_SYSV_FS is not set
# CONFIG_UDF_FS is not set # CONFIG_UDF_FS is not set
# CONFIG_UDF_RW is not set
# CONFIG_UFS_FS is not set # CONFIG_UFS_FS is not set
# CONFIG_UFS_FS_WRITE is not set
# #
# Network File Systems # Network File Systems
...@@ -698,21 +878,43 @@ CONFIG_EXT2_FS=m ...@@ -698,21 +878,43 @@ CONFIG_EXT2_FS=m
# CONFIG_INTERMEZZO_FS is not set # CONFIG_INTERMEZZO_FS is not set
CONFIG_NFS_FS=m CONFIG_NFS_FS=m
CONFIG_NFS_V3=y CONFIG_NFS_V3=y
# CONFIG_ROOT_NFS is not set
# CONFIG_NFSD is not set # CONFIG_NFSD is not set
# CONFIG_NFSD_V3 is not set
CONFIG_SUNRPC=m CONFIG_SUNRPC=m
CONFIG_LOCKD=m CONFIG_LOCKD=m
CONFIG_LOCKD_V4=y CONFIG_LOCKD_V4=y
CONFIG_SMB_FS=m CONFIG_SMB_FS=m
# CONFIG_SMB_NLS_DEFAULT is not set # CONFIG_SMB_NLS_DEFAULT is not set
# CONFIG_NCP_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_NLS is not set
# CONFIG_NCPFS_EXTRAS is not set
# CONFIG_ZISOFS_FS is not set # CONFIG_ZISOFS_FS is not set
CONFIG_ZLIB_FS_INFLATE=m
# #
# Partition Types # Partition Types
# #
# CONFIG_PARTITION_ADVANCED is not set 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_MSDOS_PARTITION=y CONFIG_MSDOS_PARTITION=y
# CONFIG_BSD_DISKLABEL is not set
# CONFIG_MINIX_SUBPARTITION is not set
# CONFIG_SOLARIS_X86_PARTITION is not set
# CONFIG_UNIXWARE_DISKLABEL is not set
# CONFIG_LDM_PARTITION is not set
# CONFIG_SGI_PARTITION is not set
# CONFIG_ULTRIX_PARTITION is not set
# CONFIG_SUN_PARTITION is not set
CONFIG_SMB_NLS=y CONFIG_SMB_NLS=y
CONFIG_NLS=y CONFIG_NLS=y
...@@ -761,26 +963,56 @@ CONFIG_NLS_DEFAULT="iso8859-1" ...@@ -761,26 +963,56 @@ CONFIG_NLS_DEFAULT="iso8859-1"
# Sound # Sound
# #
CONFIG_SOUND=y CONFIG_SOUND=y
#
# Open Sound System
#
CONFIG_SOUND_PRIME=y
# CONFIG_SOUND_BT878 is not set # CONFIG_SOUND_BT878 is not set
# CONFIG_SOUND_CMPCI is not set
# CONFIG_SOUND_EMU10K1 is not set
# CONFIG_MIDI_EMU10K1 is not set
# CONFIG_SOUND_FUSION is not set # CONFIG_SOUND_FUSION is not set
# CONFIG_SOUND_CS4281 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_ESSSOLO1 is not set
# CONFIG_SOUND_MAESTRO is not set # CONFIG_SOUND_MAESTRO is not set
# CONFIG_SOUND_MAESTRO3 is not set
# CONFIG_SOUND_ICH is not set
# CONFIG_SOUND_RME96XX is not set
# CONFIG_SOUND_SONICVIBES is not set # CONFIG_SOUND_SONICVIBES is not set
# CONFIG_SOUND_TRIDENT is not set # CONFIG_SOUND_TRIDENT is not set
# CONFIG_SOUND_MSNDCLAS is not set # CONFIG_SOUND_MSNDCLAS is not set
# CONFIG_SOUND_MSNDPIN is not set # CONFIG_SOUND_MSNDPIN is not set
# CONFIG_SOUND_VIA82CXXX is not set
# CONFIG_MIDI_VIA82CXXX is not set
CONFIG_SOUND_SA1100=y CONFIG_SOUND_SA1100=y
CONFIG_SOUND_UDA1341=m CONFIG_SOUND_UDA1341=y
CONFIG_SOUND_SA1111_UDA1341=m # CONFIG_SOUND_ASSABET_UDA1341 is not set
CONFIG_SOUND_SA1100SSP=m # CONFIG_SOUND_H3600_UDA1341 is not set
# CONFIG_SOUND_PANGOLIN_UDA1341 is not set
CONFIG_SOUND_SA1111_UDA1341=y
# CONFIG_SOUND_STORK_UDA1341 is not set
# CONFIG_SOUND_SA1100SSP is not set
# CONFIG_SOUND_STORK_AC97 is not set
# CONFIG_SOUND_OSS is not set # CONFIG_SOUND_OSS is not set
# CONFIG_SOUND_WAVEARTIST is not set
# CONFIG_SOUND_TVMIXER is not set # CONFIG_SOUND_TVMIXER is not set
#
# Advanced Linux Sound Architecture
#
# CONFIG_SND is not set
# #
# Multimedia Capabilities Port drivers # Multimedia Capabilities Port drivers
# #
# CONFIG_MCP is not set CONFIG_MCP=y
CONFIG_MCP_SA1100=y
# CONFIG_MCP_UCB1200 is not set
# CONFIG_MCP_UCB1200_AUDIO is not set
# CONFIG_MCP_UCB1200_TS is not set
# #
# USB support # USB support
...@@ -796,8 +1028,10 @@ CONFIG_USB_DEVICEFS=y ...@@ -796,8 +1028,10 @@ CONFIG_USB_DEVICEFS=y
# CONFIG_USB_LONG_TIMEOUT is not set # CONFIG_USB_LONG_TIMEOUT is not set
# #
# USB Controllers # USB Host Controller Drivers
# #
# CONFIG_USB_EHCI_HCD is not set
# CONFIG_USB_OHCI_HCD is not set
# CONFIG_USB_UHCI is not set # CONFIG_USB_UHCI is not set
# CONFIG_USB_UHCI_ALT is not set # CONFIG_USB_UHCI_ALT is not set
# CONFIG_USB_OHCI is not set # CONFIG_USB_OHCI is not set
...@@ -810,24 +1044,23 @@ CONFIG_USB_AUDIO=y ...@@ -810,24 +1044,23 @@ CONFIG_USB_AUDIO=y
CONFIG_USB_BLUETOOTH=m CONFIG_USB_BLUETOOTH=m
CONFIG_USB_STORAGE=y CONFIG_USB_STORAGE=y
CONFIG_USB_STORAGE_DEBUG=y CONFIG_USB_STORAGE_DEBUG=y
CONFIG_USB_STORAGE_DATAFAB=y # CONFIG_USB_STORAGE_DATAFAB is not set
CONFIG_USB_STORAGE_FREECOM=y # CONFIG_USB_STORAGE_FREECOM is not set
CONFIG_USB_STORAGE_ISD200=y # CONFIG_USB_STORAGE_ISD200 is not set
CONFIG_USB_STORAGE_DPCM=y # CONFIG_USB_STORAGE_DPCM is not set
CONFIG_USB_STORAGE_HP8200e=y # CONFIG_USB_STORAGE_HP8200e is not set
CONFIG_USB_STORAGE_SDDR09=y # CONFIG_USB_STORAGE_SDDR09 is not set
CONFIG_USB_STORAGE_JUMPSHOT=y # CONFIG_USB_STORAGE_JUMPSHOT is not set
CONFIG_USB_ACM=m CONFIG_USB_ACM=m
CONFIG_USB_PRINTER=m CONFIG_USB_PRINTER=m
# #
# USB Human Interface Devices (HID) # USB Human Interface Devices (HID)
# #
CONFIG_USB_HID=m
# CONFIG_USB_HIDDEV is not set #
CONFIG_USB_KBD=m # Input core support is needed for USB HID
CONFIG_USB_MOUSE=m #
CONFIG_USB_WACOM=m
# #
# USB Imaging devices # USB Imaging devices
...@@ -841,10 +1074,15 @@ CONFIG_USB_HPUSBSCSI=m ...@@ -841,10 +1074,15 @@ CONFIG_USB_HPUSBSCSI=m
# #
# USB Multimedia devices # USB Multimedia devices
# #
CONFIG_USB_IBMCAM=m
# CONFIG_USB_OV511=m
# Video4Linux support is needed for USB Multimedia device support CONFIG_USB_PWC=m
# CONFIG_USB_SE401=m
# CONFIG_USB_STV680 is not set
CONFIG_USB_VICAM=m
CONFIG_USB_DSBR=m
CONFIG_USB_DABUSB=m
CONFIG_USB_KONICAWC=m
# #
# USB Network adaptors # USB Network adaptors
...@@ -858,18 +1096,20 @@ CONFIG_USB_USBNET=m ...@@ -858,18 +1096,20 @@ CONFIG_USB_USBNET=m
# #
# USB port drivers # USB port drivers
# #
CONFIG_USB_USS720=m
# #
# USB Serial Converter support # USB Serial Converter support
# #
CONFIG_USB_SERIAL=m CONFIG_USB_SERIAL=m
# CONFIG_USB_SERIAL_GENERIC is not set CONFIG_USB_SERIAL_GENERIC=y
CONFIG_USB_SERIAL_BELKIN=m CONFIG_USB_SERIAL_BELKIN=m
CONFIG_USB_SERIAL_WHITEHEAT=m CONFIG_USB_SERIAL_WHITEHEAT=m
CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
CONFIG_USB_SERIAL_EMPEG=m CONFIG_USB_SERIAL_EMPEG=m
CONFIG_USB_SERIAL_FTDI_SIO=m CONFIG_USB_SERIAL_FTDI_SIO=m
CONFIG_USB_SERIAL_VISOR=m CONFIG_USB_SERIAL_VISOR=m
# CONFIG_USB_SERIAL_IPAQ is not set
CONFIG_USB_SERIAL_IR=m CONFIG_USB_SERIAL_IR=m
CONFIG_USB_SERIAL_EDGEPORT=m CONFIG_USB_SERIAL_EDGEPORT=m
CONFIG_USB_SERIAL_KEYSPAN_PDA=m CONFIG_USB_SERIAL_KEYSPAN_PDA=m
...@@ -883,6 +1123,7 @@ CONFIG_USB_SERIAL_KEYSPAN=m ...@@ -883,6 +1123,7 @@ CONFIG_USB_SERIAL_KEYSPAN=m
# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set # CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set # CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
CONFIG_USB_SERIAL_MCT_U232=m CONFIG_USB_SERIAL_MCT_U232=m
# CONFIG_USB_SERIAL_KLSI is not set
CONFIG_USB_SERIAL_PL2303=m CONFIG_USB_SERIAL_PL2303=m
CONFIG_USB_SERIAL_CYBERJACK=m CONFIG_USB_SERIAL_CYBERJACK=m
CONFIG_USB_SERIAL_XIRCOM=m CONFIG_USB_SERIAL_XIRCOM=m
...@@ -892,6 +1133,7 @@ CONFIG_USB_SERIAL_OMNINET=m ...@@ -892,6 +1133,7 @@ CONFIG_USB_SERIAL_OMNINET=m
# USB Miscellaneous drivers # USB Miscellaneous drivers
# #
CONFIG_USB_RIO500=m CONFIG_USB_RIO500=m
# CONFIG_USB_AUERSWALD is not set
# #
# Bluetooth support # Bluetooth support
...@@ -920,4 +1162,12 @@ CONFIG_MAGIC_SYSRQ=y ...@@ -920,4 +1162,12 @@ CONFIG_MAGIC_SYSRQ=y
CONFIG_DEBUG_BUGVERBOSE=y CONFIG_DEBUG_BUGVERBOSE=y
CONFIG_DEBUG_ERRORS=y CONFIG_DEBUG_ERRORS=y
CONFIG_DEBUG_LL=y CONFIG_DEBUG_LL=y
CONFIG_DEBUG_LL_SER3=y # CONFIG_DEBUG_DC21285_PORT is not set
# CONFIG_DEBUG_CLPS711X_UART2 is not set
#
# Library routines
#
# CONFIG_CRC32 is not set
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
# #
# Automatically generated make config: don't edit # Automatically generated by make menuconfig: don't edit
# #
CONFIG_ARM=y CONFIG_ARM=y
# CONFIG_EISA is not set # CONFIG_EISA is not set
# CONFIG_SBUS is not set # CONFIG_SBUS is not set
# CONFIG_MCA is not set # CONFIG_MCA is not set
CONFIG_UID16=y CONFIG_UID16=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
# CONFIG_GENERIC_BUST_SPINLOCK is not set
# CONFIG_GENERIC_ISA_DMA is not set
# #
# Code maturity level options # Code maturity level options
...@@ -23,24 +27,23 @@ CONFIG_KMOD=y ...@@ -23,24 +27,23 @@ CONFIG_KMOD=y
# #
# System Type # System Type
# #
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set # CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set # CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
# CONFIG_ARCH_CO285 is not set # CONFIG_ARCH_CO285 is not set
# CONFIG_ARCH_EBSA110 is not set # CONFIG_ARCH_EBSA110 is not set
# CONFIG_ARCH_L7200 is not set # CONFIG_ARCH_CAMELOT is not set
# CONFIG_ARCH_FOOTBRIDGE is not set # CONFIG_ARCH_FOOTBRIDGE is not set
# CONFIG_ARCH_INTEGRATOR is not set # CONFIG_ARCH_INTEGRATOR is not set
# CONFIG_ARCH_L7200 is not set
# CONFIG_ARCH_RPC is not set # CONFIG_ARCH_RPC is not set
CONFIG_ARCH_SA1100=y CONFIG_ARCH_SA1100=y
# CONFIG_ARCH_CLPS711X is not set # CONFIG_ARCH_SHARK is not set
# #
# Archimedes/A5000 Implementations # Archimedes/A5000 Implementations
# #
#
# Archimedes/A5000 Implementations (select only ONE)
#
# CONFIG_ARCH_ARC is not set # CONFIG_ARCH_ARC is not set
# CONFIG_ARCH_A5K is not set # CONFIG_ARCH_A5K is not set
...@@ -58,12 +61,18 @@ CONFIG_ARCH_SA1100=y ...@@ -58,12 +61,18 @@ CONFIG_ARCH_SA1100=y
# #
# CONFIG_SA1100_ASSABET is not set # CONFIG_SA1100_ASSABET is not set
# CONFIG_ASSABET_NEPONSET is not set # CONFIG_ASSABET_NEPONSET is not set
# CONFIG_SA1100_ADSBITSY is not set
# CONFIG_SA1100_BRUTUS is not set # CONFIG_SA1100_BRUTUS is not set
# CONFIG_SA1100_CERF is not set # CONFIG_SA1100_CERF is not set
# CONFIG_SA1100_BITSY is not set # CONFIG_SA1100_H3100 is not set
# CONFIG_SA1100_H3600 is not set
# CONFIG_SA1100_H3800 is not set
# CONFIG_SA1100_H3XXX is not set
# CONFIG_SA1100_EXTENEX1 is not set # CONFIG_SA1100_EXTENEX1 is not set
# CONFIG_SA1100_FLEXANET is not set
# CONFIG_SA1100_FREEBIRD is not set # CONFIG_SA1100_FREEBIRD is not set
# CONFIG_SA1100_GRAPHICSCLIENT is not set # CONFIG_SA1100_GRAPHICSCLIENT is not set
# CONFIG_SA1100_GRAPHICSMASTER is not set
CONFIG_SA1100_JORNADA720=y CONFIG_SA1100_JORNADA720=y
# CONFIG_SA1100_HUW_WEBPANEL is not set # CONFIG_SA1100_HUW_WEBPANEL is not set
# CONFIG_SA1100_ITSY is not set # CONFIG_SA1100_ITSY is not set
...@@ -72,70 +81,75 @@ CONFIG_SA1100_JORNADA720=y ...@@ -72,70 +81,75 @@ CONFIG_SA1100_JORNADA720=y
# CONFIG_SA1100_OMNIMETER is not set # CONFIG_SA1100_OMNIMETER is not set
# CONFIG_SA1100_PANGOLIN is not set # CONFIG_SA1100_PANGOLIN is not set
# CONFIG_SA1100_PLEB is not set # CONFIG_SA1100_PLEB is not set
# CONFIG_SA1100_SHANNON is not set
# CONFIG_SA1100_SHERMAN is not set # CONFIG_SA1100_SHERMAN is not set
# CONFIG_SA1100_SIMPAD is not set
# CONFIG_SA1100_PFS168 is not set # CONFIG_SA1100_PFS168 is not set
# CONFIG_SA1100_VICTOR is not set # CONFIG_SA1100_VICTOR is not set
# CONFIG_SA1100_XP860 is not set # CONFIG_SA1100_XP860 is not set
# CONFIG_SA1100_YOPY is not set # CONFIG_SA1100_YOPY is not set
CONFIG_SA1111=y CONFIG_SA1111=y
CONFIG_FORCE_MAX_ZONEORDER=9
# CONFIG_SA1100_USB is not set # CONFIG_SA1100_USB is not set
# CONFIG_SA1100_USB_NETLINK is not set # CONFIG_SA1100_USB_NETLINK is not set
# CONFIG_SA1100_USB_CHAR is not set # CONFIG_SA1100_USB_CHAR is not set
# CONFIG_SA1100_FREQUENCY_SCALE is not set # CONFIG_REGISTERS is not set
# CONFIG_SA1100_VOLTAGE_SCALE is not set
# #
# CLPS711X/EP721X Implementations # CLPS711X/EP721X Implementations
# #
# CONFIG_ARCH_AUTCPU12 is not set
# CONFIG_ARCH_CDB89712 is not set
# CONFIG_ARCH_CLEP7312 is not set
# CONFIG_ARCH_EDB7211 is not set
# CONFIG_ARCH_P720T is not set # CONFIG_ARCH_P720T is not set
# CONFIG_ARCH_EP7211 is not set
# CONFIG_ARCH_EP7212 is not set
# CONFIG_ARCH_ACORN is not set # CONFIG_ARCH_ACORN is not set
# CONFIG_FOOTBRIDGE is not set # CONFIG_FOOTBRIDGE is not set
# CONFIG_FOOTBRIDGE_HOST is not set # CONFIG_FOOTBRIDGE_HOST is not set
# CONFIG_FOOTBRIDGE_ADDIN is not set # CONFIG_FOOTBRIDGE_ADDIN is not set
CONFIG_CPU_32=y CONFIG_CPU_32=y
# CONFIG_CPU_26 is not set # CONFIG_CPU_26 is not set
#
# Processor Type
#
# CONFIG_CPU_32v3 is not set # CONFIG_CPU_32v3 is not set
CONFIG_CPU_32v4=y CONFIG_CPU_32v4=y
# CONFIG_CPU_ARM610 is not set # CONFIG_CPU_ARM610 is not set
# CONFIG_CPU_ARM710 is not set # CONFIG_CPU_ARM710 is not set
# CONFIG_CPU_ARM720T is not set # CONFIG_CPU_ARM720T is not set
# CONFIG_CPU_ARM920T is not set # CONFIG_CPU_ARM920T is not set
# CONFIG_CPU_ARM922T is not set
# CONFIG_CPU_ARM926T is not set
# CONFIG_CPU_ARM1020 is not set # CONFIG_CPU_ARM1020 is not set
# CONFIG_CPU_SA110 is not set # CONFIG_CPU_SA110 is not set
CONFIG_CPU_SA1100=y CONFIG_CPU_SA1100=y
# CONFIG_ARM_THUMB is not set
CONFIG_DISCONTIGMEM=y CONFIG_DISCONTIGMEM=y
# #
# General setup # General setup
# #
#
# Please ensure that you have read the help on the next option
#
# CONFIG_ANGELBOOT is not set
# CONFIG_PCI is not set # CONFIG_PCI is not set
# CONFIG_ISA is not set CONFIG_ISA=y
# CONFIG_ISA_DMA is not set # CONFIG_ISA_DMA is not set
# CONFIG_CPU_FREQ is not set
CONFIG_HOTPLUG=y CONFIG_HOTPLUG=y
# #
# PCMCIA/CardBus support # PCMCIA/CardBus support
# #
CONFIG_PCMCIA=y CONFIG_PCMCIA=y
# CONFIG_I82092 is not set
# CONFIG_I82365 is not set # CONFIG_I82365 is not set
# CONFIG_TCIC is not set # CONFIG_TCIC is not set
# CONFIG_PCMCIA_CLPS6700 is not set # CONFIG_PCMCIA_CLPS6700 is not set
CONFIG_PCMCIA_SA1100=y CONFIG_PCMCIA_SA1100=y
# CONFIG_MERCURY_BACKPAQ is not set
CONFIG_NET=y CONFIG_NET=y
CONFIG_SYSVIPC=y CONFIG_SYSVIPC=y
# CONFIG_BSD_PROCESS_ACCT is not set # CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_SYSCTL=y CONFIG_SYSCTL=y
CONFIG_FPE_NWFPE=y CONFIG_FPE_NWFPE=y
# CONFIG_FPE_FASTFPE is not set CONFIG_FPE_FASTFPE=y
CONFIG_KCORE_ELF=y CONFIG_KCORE_ELF=y
# CONFIG_KCORE_AOUT is not set # CONFIG_KCORE_AOUT is not set
CONFIG_BINFMT_AOUT=m CONFIG_BINFMT_AOUT=m
...@@ -145,10 +159,8 @@ CONFIG_PM=y ...@@ -145,10 +159,8 @@ CONFIG_PM=y
# CONFIG_APM is not set # CONFIG_APM is not set
# CONFIG_ARTHUR is not set # CONFIG_ARTHUR is not set
CONFIG_CMDLINE="keepinitrd" CONFIG_CMDLINE="keepinitrd"
# CONFIG_PFS168_CMDLINE is not set
# CONFIG_LEDS is not set # CONFIG_LEDS is not set
# CONFIG_ALIGNMENT_TRAP is not set CONFIG_ALIGNMENT_TRAP=y
# CONFIG_UCB1200 is not set
# #
# Parallel port support # Parallel port support
...@@ -159,63 +171,72 @@ CONFIG_CMDLINE="keepinitrd" ...@@ -159,63 +171,72 @@ CONFIG_CMDLINE="keepinitrd"
# Memory Technology Devices (MTD) # Memory Technology Devices (MTD)
# #
CONFIG_MTD=y CONFIG_MTD=y
# CONFIG_MTD_DEBUG is not set CONFIG_MTD_DEBUG=y
CONFIG_MTD_DEBUG_VERBOSE=1
# CONFIG_MTD_PARTITIONS=y
# Disk-On-Chip Device Drivers # CONFIG_MTD_REDBOOT_PARTS is not set
# CONFIG_MTD_BOOTLDR_PARTS=y
# CONFIG_MTD_DOC1000 is not set # CONFIG_MTD_AFS_PARTS is not set
# CONFIG_MTD_DOC2000 is not set CONFIG_MTD_CHAR=m
# CONFIG_MTD_DOC2001 is not set CONFIG_MTD_BLOCK=y
# CONFIG_MTD_DOCPROBE is not set # CONFIG_FTL is not set
# CONFIG_NFTL is not set
#
# RAM/ROM Device Drivers
#
# CONFIG_MTD_PMC551 is not set
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_RAM is not set
# CONFIG_MTD_ROM is not set
# CONFIG_MTD_MTDRAM is not set
# #
# Linearly Mapped Flash Device Drivers # RAM/ROM/Flash chip drivers
# #
CONFIG_MTD_CFI=y CONFIG_MTD_CFI=y
# CONFIG_MTD_CFI_ADV_OPTIONS is not set # CONFIG_MTD_JEDECPROBE is not set
CONFIG_MTD_GEN_PROBE=y
CONFIG_MTD_CFI_ADV_OPTIONS=y
CONFIG_MTD_CFI_NOSWAP=y
# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
CONFIG_MTD_CFI_GEOMETRY=y
# CONFIG_MTD_CFI_B1 is not set
CONFIG_MTD_CFI_B2=y
CONFIG_MTD_CFI_B4=y
CONFIG_MTD_CFI_I1=y
CONFIG_MTD_CFI_I2=y
# CONFIG_MTD_CFI_I4 is not set
CONFIG_MTD_CFI_INTELEXT=y CONFIG_MTD_CFI_INTELEXT=y
# CONFIG_MTD_CFI_AMDSTD is not set # CONFIG_MTD_CFI_AMDSTD is not set
# CONFIG_MTD_RAM is not set
# CONFIG_MTD_ROM is not set
# CONFIG_MTD_ABSENT is not set
# CONFIG_MTD_OBSOLETE_CHIPS is not set
# CONFIG_MTD_AMDSTD is not set # CONFIG_MTD_AMDSTD is not set
# CONFIG_MTD_SHARP is not set # CONFIG_MTD_SHARP is not set
# CONFIG_MTD_JEDEC is not set
#
# Mapping drivers for chip access
#
# CONFIG_MTD_PHYSMAP is not set # CONFIG_MTD_PHYSMAP is not set
# CONFIG_MTD_NORA is not set # CONFIG_MTD_NORA is not set
# CONFIG_MTD_PNC2000 is not set # CONFIG_MTD_ARM_INTEGRATOR is not set
# CONFIG_MTD_RPXLITE is not set # CONFIG_MTD_CDB89712 is not set
# CONFIG_MTD_SC520CDP is not set
# CONFIG_MTD_SBC_MEDIAGX is not set
# CONFIG_MTD_ELAN_104NC is not set
CONFIG_MTD_SA1100=y CONFIG_MTD_SA1100=y
# CONFIG_MTD_H3600_BACKPAQ is not set
# CONFIG_MTD_DC21285 is not set # CONFIG_MTD_DC21285 is not set
# CONFIG_MTD_IQ80310 is not set # CONFIG_MTD_IQ80310 is not set
# CONFIG_MTD_CSTM_CFI_JEDEC is not set
# CONFIG_MTD_JEDEC is not set
# CONFIG_MTD_MIXMEM is not set
# CONFIG_MTD_OCTAGON is not set
# CONFIG_MTD_VMAX is not set
# #
# NAND Flash Device Drivers # Self-contained MTD device drivers
# #
# CONFIG_MTD_NAND is not set # CONFIG_MTD_PMC551 is not set
# CONFIG_MTD_NAND_SPIA is not set # CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_MTDRAM is not set
# CONFIG_MTD_BLKMTD is not set
# CONFIG_MTD_DOC1000 is not set
# CONFIG_MTD_DOC2000 is not set
# CONFIG_MTD_DOC2001 is not set
# CONFIG_MTD_DOCPROBE is not set
# #
# User Modules And Translation Layers # NAND Flash Device Drivers
# #
CONFIG_MTD_CHAR=y # CONFIG_MTD_NAND is not set
CONFIG_MTD_BLOCK=y
# CONFIG_FTL is not set
# CONFIG_NFTL is not set
# #
# Plug and Play configuration # Plug and Play configuration
...@@ -246,6 +267,7 @@ CONFIG_BLK_DEV_NBD=m ...@@ -246,6 +267,7 @@ CONFIG_BLK_DEV_NBD=m
# CONFIG_MD_RAID0 is not set # CONFIG_MD_RAID0 is not set
# CONFIG_MD_RAID1 is not set # CONFIG_MD_RAID1 is not set
# CONFIG_MD_RAID5 is not set # CONFIG_MD_RAID5 is not set
# CONFIG_MD_MULTIPATH is not set
# CONFIG_BLK_DEV_LVM is not set # CONFIG_BLK_DEV_LVM is not set
# #
...@@ -258,7 +280,7 @@ CONFIG_RTNETLINK=y ...@@ -258,7 +280,7 @@ CONFIG_RTNETLINK=y
# CONFIG_NETLINK_DEV is not set # CONFIG_NETLINK_DEV is not set
CONFIG_NETFILTER=y CONFIG_NETFILTER=y
# CONFIG_NETFILTER_DEBUG is not set # CONFIG_NETFILTER_DEBUG is not set
# CONFIG_FILTER is not set CONFIG_FILTER=y
CONFIG_UNIX=y CONFIG_UNIX=y
CONFIG_INET=y CONFIG_INET=y
CONFIG_IP_MULTICAST=y CONFIG_IP_MULTICAST=y
...@@ -282,10 +304,7 @@ CONFIG_IP_MULTICAST=y ...@@ -282,10 +304,7 @@ CONFIG_IP_MULTICAST=y
# CONFIG_IPV6 is not set # CONFIG_IPV6 is not set
# CONFIG_KHTTPD is not set # CONFIG_KHTTPD is not set
# CONFIG_ATM is not set # CONFIG_ATM is not set
# CONFIG_VLAN_8021Q is not set
#
#
#
# CONFIG_IPX is not set # CONFIG_IPX is not set
# CONFIG_ATALK is not set # CONFIG_ATALK is not set
# CONFIG_DECNET is not set # CONFIG_DECNET is not set
...@@ -318,7 +337,6 @@ CONFIG_NETDEVICES=y ...@@ -318,7 +337,6 @@ CONFIG_NETDEVICES=y
# CONFIG_EQUALIZER is not set # CONFIG_EQUALIZER is not set
# CONFIG_TUN is not set # CONFIG_TUN is not set
# CONFIG_ETHERTAP is not set # CONFIG_ETHERTAP is not set
# CONFIG_NET_SB1000 is not set
# #
# Ethernet (10 or 100Mbit) # Ethernet (10 or 100Mbit)
...@@ -329,18 +347,44 @@ CONFIG_NETDEVICES=y ...@@ -329,18 +347,44 @@ CONFIG_NETDEVICES=y
# Ethernet (1000 Mbit) # Ethernet (1000 Mbit)
# #
# CONFIG_ACENIC is not set # CONFIG_ACENIC is not set
# CONFIG_DL2K is not set
# CONFIG_MYRI_SBUS is not set
# CONFIG_NS83820 is not set
# CONFIG_HAMACHI is not set # CONFIG_HAMACHI is not set
# CONFIG_YELLOWFIN is not set # CONFIG_YELLOWFIN is not set
# CONFIG_SK98LIN is not set # CONFIG_SK98LIN is not set
# CONFIG_FDDI is not set # CONFIG_FDDI is not set
# CONFIG_HIPPI is not set # CONFIG_HIPPI is not set
# CONFIG_PPP is not set # CONFIG_PLIP is not set
CONFIG_PPP=m
# CONFIG_PPP_MULTILINK is not set
# CONFIG_PPP_FILTER is not set
CONFIG_PPP_ASYNC=m
# CONFIG_PPP_SYNC_TTY is not set
CONFIG_PPP_DEFLATE=m
CONFIG_PPP_BSDCOMP=m
# CONFIG_PPPOE is not set
# CONFIG_SLIP is not set # CONFIG_SLIP is not set
# #
# Wireless LAN (non-hamradio) # Wireless LAN (non-hamradio)
# #
# CONFIG_NET_RADIO is not set CONFIG_NET_RADIO=y
# CONFIG_STRIP is not set
CONFIG_WAVELAN=m
CONFIG_ARLAN=m
CONFIG_AIRONET4500=m
CONFIG_AIRONET4500_NONCS=m
# CONFIG_AIRONET4500_PNP is not set
# CONFIG_AIRONET4500_PCI is not set
# CONFIG_AIRONET4500_ISA is not set
# CONFIG_AIRONET4500_I365 is not set
# CONFIG_AIRONET4500_PROC is not set
# CONFIG_AIRO is not set
CONFIG_HERMES=m
CONFIG_PCMCIA_HERMES=m
CONFIG_AIRO_CS=m
CONFIG_NET_WIRELESS=y
# #
# Token Ring devices # Token Ring devices
...@@ -366,11 +410,11 @@ CONFIG_PCMCIA_PCNET=m ...@@ -366,11 +410,11 @@ CONFIG_PCMCIA_PCNET=m
CONFIG_PCMCIA_NMCLAN=m CONFIG_PCMCIA_NMCLAN=m
CONFIG_PCMCIA_SMC91C92=m CONFIG_PCMCIA_SMC91C92=m
CONFIG_PCMCIA_XIRC2PS=m CONFIG_PCMCIA_XIRC2PS=m
# CONFIG_PCMCIA_AXNET is not set
# CONFIG_ARCNET_COM20020_CS is not set # CONFIG_ARCNET_COM20020_CS is not set
# CONFIG_PCMCIA_IBMTR is not set # CONFIG_PCMCIA_IBMTR is not set
CONFIG_NET_PCMCIA_RADIO=y CONFIG_NET_PCMCIA_RADIO=y
# CONFIG_PCMCIA_RAYCS is not set # CONFIG_PCMCIA_RAYCS is not set
# CONFIG_PCMCIA_HERMES is not set
# CONFIG_PCMCIA_NETWAVE is not set # CONFIG_PCMCIA_NETWAVE is not set
CONFIG_PCMCIA_WAVELAN=m CONFIG_PCMCIA_WAVELAN=m
CONFIG_AIRONET4500_CS=m CONFIG_AIRONET4500_CS=m
...@@ -384,10 +428,6 @@ CONFIG_AIRONET4500_CS=m ...@@ -384,10 +428,6 @@ CONFIG_AIRONET4500_CS=m
# IrDA (infrared) support # IrDA (infrared) support
# #
CONFIG_IRDA=m CONFIG_IRDA=m
#
# IrDA protocols
#
CONFIG_IRLAN=m CONFIG_IRLAN=m
# CONFIG_IRNET is not set # CONFIG_IRNET is not set
CONFIG_IRCOMM=m CONFIG_IRCOMM=m
...@@ -397,27 +437,18 @@ CONFIG_IRCOMM=m ...@@ -397,27 +437,18 @@ CONFIG_IRCOMM=m
# #
# Infrared-port device drivers # Infrared-port device drivers
# #
#
# SIR device drivers
#
# CONFIG_IRTTY_SIR is not set # CONFIG_IRTTY_SIR is not set
# CONFIG_IRPORT_SIR is not set # CONFIG_IRPORT_SIR is not set
# CONFIG_DONGLE is not set
# # CONFIG_USB_IRDA is not set
# FIR device drivers
#
# CONFIG_NSC_FIR is not set # CONFIG_NSC_FIR is not set
# CONFIG_WINBOND_FIR is not set # CONFIG_WINBOND_FIR is not set
# CONFIG_TOSHIBA_FIR is not set # CONFIG_TOSHIBA_FIR is not set
# CONFIG_SMC_IRCC_FIR is not set # CONFIG_SMC_IRCC_FIR is not set
# CONFIG_ALI_FIR is not set
# CONFIG_VLSI_FIR is not set
CONFIG_SA1100_FIR=m CONFIG_SA1100_FIR=m
#
# Dongle support
#
# CONFIG_DONGLE is not set
# #
# ATA/IDE/MFM/RLL support # ATA/IDE/MFM/RLL support
# #
...@@ -427,10 +458,6 @@ CONFIG_IDE=m ...@@ -427,10 +458,6 @@ CONFIG_IDE=m
# IDE, ATA and ATAPI Block devices # IDE, ATA and ATAPI Block devices
# #
CONFIG_BLK_DEV_IDE=m 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_IDE is not set
# CONFIG_BLK_DEV_HD is not set # CONFIG_BLK_DEV_HD is not set
CONFIG_BLK_DEV_IDEDISK=m CONFIG_BLK_DEV_IDEDISK=m
...@@ -445,14 +472,10 @@ CONFIG_BLK_DEV_IDEDISK=m ...@@ -445,14 +472,10 @@ CONFIG_BLK_DEV_IDEDISK=m
# CONFIG_BLK_DEV_COMMERIAL is not set # CONFIG_BLK_DEV_COMMERIAL is not set
# CONFIG_BLK_DEV_TIVO is not set # CONFIG_BLK_DEV_TIVO is not set
CONFIG_BLK_DEV_IDECS=m CONFIG_BLK_DEV_IDECS=m
# CONFIG_BLK_DEV_IDECD is not set CONFIG_BLK_DEV_IDECD=m
# CONFIG_BLK_DEV_IDETAPE is not set # CONFIG_BLK_DEV_IDETAPE is not set
# CONFIG_BLK_DEV_IDEFLOPPY is not set # CONFIG_BLK_DEV_IDEFLOPPY is not set
# CONFIG_BLK_DEV_IDESCSI 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 is not set
# CONFIG_BLK_DEV_CMD640_ENHANCED is not set # CONFIG_BLK_DEV_CMD640_ENHANCED is not set
# CONFIG_BLK_DEV_ISAPNP is not set # CONFIG_BLK_DEV_ISAPNP is not set
...@@ -460,6 +483,9 @@ CONFIG_BLK_DEV_IDECS=m ...@@ -460,6 +483,9 @@ CONFIG_BLK_DEV_IDECS=m
# CONFIG_IDEDMA_AUTO is not set # CONFIG_IDEDMA_AUTO is not set
# CONFIG_DMA_NONPCI is not set # CONFIG_DMA_NONPCI is not set
# CONFIG_BLK_DEV_IDE_MODES is not set # CONFIG_BLK_DEV_IDE_MODES is not set
# CONFIG_BLK_DEV_ATARAID is not set
# CONFIG_BLK_DEV_ATARAID_PDC is not set
# CONFIG_BLK_DEV_ATARAID_HPT is not set
# #
# SCSI support # SCSI support
...@@ -483,7 +509,13 @@ CONFIG_BLK_DEV_IDECS=m ...@@ -483,7 +509,13 @@ CONFIG_BLK_DEV_IDECS=m
# #
# Input core support # Input core support
# #
# CONFIG_INPUT is not set CONFIG_INPUT=y
# CONFIG_INPUT_KEYBDEV is not set
CONFIG_INPUT_MOUSEDEV=y
CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=240
# CONFIG_INPUT_JOYDEV is not set
# CONFIG_INPUT_EVDEV is not set
# #
# Character devices # Character devices
...@@ -493,25 +525,52 @@ CONFIG_VT_CONSOLE=y ...@@ -493,25 +525,52 @@ CONFIG_VT_CONSOLE=y
CONFIG_SERIAL=m CONFIG_SERIAL=m
# CONFIG_SERIAL_EXTENDED is not set # CONFIG_SERIAL_EXTENDED is not set
# CONFIG_SERIAL_NONSTANDARD is not set # CONFIG_SERIAL_NONSTANDARD is not set
#
# Serial drivers
#
# CONFIG_SERIAL_ANAKIN is not set
# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
# CONFIG_SERIAL_AMBA is not set
# CONFIG_SERIAL_AMBA_CONSOLE is not set
# CONFIG_SERIAL_CLPS711X is not set
# CONFIG_SERIAL_CLPS711X_CONSOLE is not set
# CONFIG_SERIAL_21285 is not set
# CONFIG_SERIAL_21285_OLD is not set
# CONFIG_SERIAL_21285_CONSOLE is not set
# CONFIG_SERIAL_UART00 is not set
# CONFIG_SERIAL_UART00_CONSOLE is not set
CONFIG_SERIAL_SA1100=y CONFIG_SERIAL_SA1100=y
CONFIG_SERIAL_SA1100_CONSOLE=y CONFIG_SERIAL_SA1100_CONSOLE=y
CONFIG_SA1100_DEFAULT_BAUDRATE=115200 CONFIG_SA1100_DEFAULT_BAUDRATE=115200
# CONFIG_TOUCHSCREEN_UCB1200 is not set # CONFIG_SERIAL_8250 is not set
# CONFIG_TOUCHSCREEN_BITSY is not set # CONFIG_SERIAL_8250_CONSOLE is not set
CONFIG_PROFILER=m # CONFIG_SERIAL_8250_EXTENDED is not set
# CONFIG_PFS168_SPI is not set # CONFIG_SERIAL_8250_MANY_PORTS is not set
# CONFIG_PFS168_DTMF is not set # CONFIG_SERIAL_8250_SHARE_IRQ is not set
# CONFIG_PFS168_MISC is not set # CONFIG_SERIAL_8250_DETECT_IRQ is not set
# CONFIG_SERIAL_8250_MULTIPORT is not set
# CONFIG_SERIAL_8250_HUB6 is not set
CONFIG_SERIAL_CORE=y CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_UNIX98_PTYS=y CONFIG_UNIX98_PTYS=y
CONFIG_UNIX98_PTY_COUNT=32 CONFIG_UNIX98_PTY_COUNT=32
# CONFIG_NEWTONKBD is not set
# #
# I2C support # I2C support
# #
# CONFIG_I2C is not set # CONFIG_I2C is not set
#
# L3 serial bus support
#
# CONFIG_L3 is not set
# CONFIG_L3_ALGOBIT is not set
# CONFIG_L3_BIT_SA1100_GPIO is not set
# CONFIG_L3_SA1111 is not set
# CONFIG_BIT_SA1100_GPIO is not set
# #
# Mice # Mice
# #
...@@ -524,11 +583,33 @@ CONFIG_MOUSE=m ...@@ -524,11 +583,33 @@ CONFIG_MOUSE=m
# #
# Joysticks # Joysticks
# #
# CONFIG_JOYSTICK is not set # CONFIG_INPUT_GAMEPORT is not set
# CONFIG_INPUT_NS558 is not set
# # CONFIG_INPUT_LIGHTNING is not set
# Input core support is needed for joysticks # CONFIG_INPUT_PCIGAME is not set
# # CONFIG_INPUT_CS461X is not set
# CONFIG_INPUT_EMU10K1 is not set
# CONFIG_INPUT_SERIO is not set
# CONFIG_INPUT_SERPORT is not set
# CONFIG_INPUT_ANALOG is not set
# CONFIG_INPUT_A3D is not set
# CONFIG_INPUT_ADI is not set
# CONFIG_INPUT_COBRA is not set
# CONFIG_INPUT_GF2K is not set
# CONFIG_INPUT_GRIP is not set
# CONFIG_INPUT_INTERACT is not set
# CONFIG_INPUT_TMDC is not set
# CONFIG_INPUT_SIDEWINDER is not set
# CONFIG_INPUT_IFORCE_USB is not set
# CONFIG_INPUT_IFORCE_232 is not set
# CONFIG_INPUT_WARRIOR is not set
# CONFIG_INPUT_MAGELLAN is not set
# CONFIG_INPUT_SPACEORB is not set
# CONFIG_INPUT_SPACEBALL is not set
# CONFIG_INPUT_STINGER is not set
# CONFIG_INPUT_DB9 is not set
# CONFIG_INPUT_GAMECON is not set
# CONFIG_INPUT_TURBOGRAFX is not set
# CONFIG_QIC02_TAPE is not set # CONFIG_QIC02_TAPE is not set
# #
...@@ -553,12 +634,13 @@ CONFIG_SA1100_RTC=m ...@@ -553,12 +634,13 @@ CONFIG_SA1100_RTC=m
# #
# PCMCIA character devices # PCMCIA character devices
# #
CONFIG_PCMCIA_SERIAL_CS=m # CONFIG_PCMCIA_SERIAL_CS is not set
# #
# Multimedia devices # Multimedia devices
# #
# CONFIG_VIDEO_DEV is not set # CONFIG_VIDEO_DEV is not set
# CONFIG_V4L2_DEV is not set
# #
# File systems # File systems
...@@ -568,37 +650,45 @@ CONFIG_PCMCIA_SERIAL_CS=m ...@@ -568,37 +650,45 @@ CONFIG_PCMCIA_SERIAL_CS=m
# CONFIG_AUTOFS4_FS is not set # CONFIG_AUTOFS4_FS is not set
# CONFIG_REISERFS_FS is not set # CONFIG_REISERFS_FS is not set
# CONFIG_REISERFS_CHECK is not set # CONFIG_REISERFS_CHECK is not set
# CONFIG_REISERFS_PROC_INFO is not set
# CONFIG_ADFS_FS is not set # CONFIG_ADFS_FS is not set
# CONFIG_ADFS_FS_RW is not set # CONFIG_ADFS_FS_RW is not set
# CONFIG_AFFS_FS is not set # CONFIG_AFFS_FS is not set
# CONFIG_HFS_FS is not set # CONFIG_HFS_FS is not set
# CONFIG_BFS_FS is not set # CONFIG_BFS_FS is not set
CONFIG_FAT_FS=m # CONFIG_EXT3_FS is not set
CONFIG_MSDOS_FS=m # CONFIG_JBD is not set
# CONFIG_JBD_DEBUG is not set
# CONFIG_FAT_FS is not set
# CONFIG_MSDOS_FS is not set
# CONFIG_UMSDOS_FS is not set # CONFIG_UMSDOS_FS is not set
CONFIG_VFAT_FS=m # CONFIG_VFAT_FS is not set
# CONFIG_EFS_FS is not set # CONFIG_EFS_FS is not set
# CONFIG_JFFS_FS is not set # CONFIG_JFFS_FS is not set
# CONFIG_JFFS2_FS is not set CONFIG_JFFS2_FS=y
CONFIG_CRAMFS=y CONFIG_JFFS2_FS_DEBUG=2
# CONFIG_CRAMFS is not set
# CONFIG_TMPFS is not set
CONFIG_RAMFS=y CONFIG_RAMFS=y
# CONFIG_ISO9660_FS is not set CONFIG_ISO9660_FS=m
# CONFIG_JOLIET is not set # CONFIG_JOLIET is not set
# CONFIG_ZISOFS is not set
# CONFIG_MINIX_FS is not set # CONFIG_MINIX_FS is not set
# CONFIG_VXFS_FS is not set
# CONFIG_NTFS_FS is not set # CONFIG_NTFS_FS is not set
# CONFIG_NTFS_RW is not set # CONFIG_NTFS_RW is not set
# CONFIG_HPFS_FS is not set # CONFIG_HPFS_FS is not set
CONFIG_PROC_FS=y CONFIG_PROC_FS=y
# CONFIG_DEVFS_FS is not set CONFIG_DEVFS_FS=y
# CONFIG_DEVFS_MOUNT is not set CONFIG_DEVFS_MOUNT=y
# CONFIG_DEVFS_DEBUG is not set CONFIG_DEVFS_DEBUG=y
# CONFIG_DRIVERFS_FS is not set
CONFIG_DEVPTS_FS=y CONFIG_DEVPTS_FS=y
# CONFIG_QNX4FS_FS is not set # CONFIG_QNX4FS_FS is not set
# CONFIG_QNX4FS_RW is not set # CONFIG_QNX4FS_RW is not set
# CONFIG_ROMFS_FS is not set # CONFIG_ROMFS_FS is not set
CONFIG_EXT2_FS=y CONFIG_EXT2_FS=y
# CONFIG_SYSV_FS is not set # CONFIG_SYSV_FS is not set
# CONFIG_SYSV_FS_WRITE is not set
# CONFIG_UDF_FS is not set # CONFIG_UDF_FS is not set
# CONFIG_UDF_RW is not set # CONFIG_UDF_RW is not set
# CONFIG_UFS_FS is not set # CONFIG_UFS_FS is not set
...@@ -608,6 +698,7 @@ CONFIG_EXT2_FS=y ...@@ -608,6 +698,7 @@ CONFIG_EXT2_FS=y
# Network File Systems # Network File Systems
# #
# CONFIG_CODA_FS is not set # CONFIG_CODA_FS is not set
# CONFIG_INTERMEZZO_FS is not set
CONFIG_NFS_FS=m CONFIG_NFS_FS=m
CONFIG_NFS_V3=y CONFIG_NFS_V3=y
# CONFIG_ROOT_NFS is not set # CONFIG_ROOT_NFS is not set
...@@ -616,8 +707,7 @@ CONFIG_NFS_V3=y ...@@ -616,8 +707,7 @@ CONFIG_NFS_V3=y
CONFIG_SUNRPC=m CONFIG_SUNRPC=m
CONFIG_LOCKD=m CONFIG_LOCKD=m
CONFIG_LOCKD_V4=y CONFIG_LOCKD_V4=y
CONFIG_SMB_FS=m # CONFIG_SMB_FS is not set
# CONFIG_SMB_NLS_DEFAULT is not set
# CONFIG_NCP_FS is not set # CONFIG_NCP_FS is not set
# CONFIG_NCPFS_PACKET_SIGNING is not set # CONFIG_NCPFS_PACKET_SIGNING is not set
# CONFIG_NCPFS_IOCTL_LOCKING is not set # CONFIG_NCPFS_IOCTL_LOCKING is not set
...@@ -627,59 +717,22 @@ CONFIG_SMB_FS=m ...@@ -627,59 +717,22 @@ CONFIG_SMB_FS=m
# CONFIG_NCPFS_SMALLDOS is not set # CONFIG_NCPFS_SMALLDOS is not set
# CONFIG_NCPFS_NLS is not set # CONFIG_NCPFS_NLS is not set
# CONFIG_NCPFS_EXTRAS is not set # CONFIG_NCPFS_EXTRAS is not set
# CONFIG_ZISOFS_FS is not set
# CONFIG_ZLIB_FS_INFLATE is not set
# #
# Partition Types # Partition Types
# #
# CONFIG_PARTITION_ADVANCED is not set # CONFIG_PARTITION_ADVANCED is not set
CONFIG_MSDOS_PARTITION=y CONFIG_MSDOS_PARTITION=y
CONFIG_SMB_NLS=y # CONFIG_SMB_NLS is not set
CONFIG_NLS=y # CONFIG_NLS is not set
#
# 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
# 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_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
# 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_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 # Console drivers
# #
CONFIG_PC_KEYMAP=y CONFIG_PC_KEYMAP=y
# CONFIG_VGA_CONSOLE is not set # CONFIG_VGA_CONSOLE is not set
CONFIG_FB=y
# #
# Frame-buffer support # Frame-buffer support
...@@ -687,16 +740,17 @@ CONFIG_FB=y ...@@ -687,16 +740,17 @@ CONFIG_FB=y
CONFIG_FB=y CONFIG_FB=y
CONFIG_DUMMY_CONSOLE=y CONFIG_DUMMY_CONSOLE=y
# CONFIG_FB_ACORN is not set # CONFIG_FB_ACORN is not set
# CONFIG_FB_ANAKIN is not set
# CONFIG_FB_CLPS711X is not set # CONFIG_FB_CLPS711X is not set
# CONFIG_FB_SA1100 is not set
CONFIG_FB_EPSON1356=y CONFIG_FB_EPSON1356=y
# CONFIG_FB_CYBER2000 is not set # CONFIG_FB_CYBER2000 is not set
# CONFIG_FB_SA1100 is not set
# CONFIG_FB_VIRTUAL is not set # CONFIG_FB_VIRTUAL is not set
CONFIG_FBCON_ADVANCED=y CONFIG_FBCON_ADVANCED=y
# CONFIG_FBCON_MFB is not set # CONFIG_FBCON_MFB is not set
# CONFIG_FBCON_CFB2 is not set # CONFIG_FBCON_CFB2 is not set
# CONFIG_FBCON_CFB4 is not set # CONFIG_FBCON_CFB4 is not set
CONFIG_FBCON_CFB8=y # CONFIG_FBCON_CFB8 is not set
CONFIG_FBCON_CFB16=y CONFIG_FBCON_CFB16=y
# CONFIG_FBCON_CFB24 is not set # CONFIG_FBCON_CFB24 is not set
# CONFIG_FBCON_CFB32 is not set # CONFIG_FBCON_CFB32 is not set
...@@ -721,10 +775,10 @@ CONFIG_FONT_8x8=y ...@@ -721,10 +775,10 @@ CONFIG_FONT_8x8=y
# Sound # Sound
# #
CONFIG_SOUND=m CONFIG_SOUND=m
CONFIG_SOUND_UDA1341=m # CONFIG_SOUND_BT878 is not set
# CONFIG_SOUND_SA1100_SSP is not set
# CONFIG_SOUND_CMPCI is not set # CONFIG_SOUND_CMPCI is not set
# CONFIG_SOUND_EMU10K1 is not set # CONFIG_SOUND_EMU10K1 is not set
# CONFIG_MIDI_EMU10K1 is not set
# CONFIG_SOUND_FUSION is not set # CONFIG_SOUND_FUSION is not set
# CONFIG_SOUND_CS4281 is not set # CONFIG_SOUND_CS4281 is not set
# CONFIG_SOUND_ES1370 is not set # CONFIG_SOUND_ES1370 is not set
...@@ -733,28 +787,121 @@ CONFIG_SOUND_UDA1341=m ...@@ -733,28 +787,121 @@ CONFIG_SOUND_UDA1341=m
# CONFIG_SOUND_MAESTRO is not set # CONFIG_SOUND_MAESTRO is not set
# CONFIG_SOUND_MAESTRO3 is not set # CONFIG_SOUND_MAESTRO3 is not set
# CONFIG_SOUND_ICH is not set # CONFIG_SOUND_ICH is not set
# CONFIG_SOUND_RME96XX is not set
# CONFIG_SOUND_SONICVIBES is not set # CONFIG_SOUND_SONICVIBES is not set
# CONFIG_SOUND_TRIDENT is not set # CONFIG_SOUND_TRIDENT is not set
# CONFIG_SOUND_MSNDCLAS is not set # CONFIG_SOUND_MSNDCLAS is not set
# CONFIG_SOUND_MSNDPIN is not set # CONFIG_SOUND_MSNDPIN is not set
# CONFIG_SOUND_VIA82CXXX is not set # CONFIG_SOUND_VIA82CXXX is not set
# CONFIG_MIDI_VIA82CXXX is not set
CONFIG_SOUND_SA1100=m
# CONFIG_SOUND_UDA1341 is not set
# CONFIG_SOUND_ASSABET_UDA1341 is not set
# CONFIG_SOUND_H3600_UDA1341 is not set
# CONFIG_SOUND_PANGOLIN_UDA1341 is not set
# CONFIG_SOUND_SA1111_UDA1341 is not set
# CONFIG_SOUND_SA1100SSP is not set
# CONFIG_SOUND_OSS is not set # CONFIG_SOUND_OSS is not set
# CONFIG_SOUND_WAVEARTIST is not set
# CONFIG_SOUND_TVMIXER is not set # CONFIG_SOUND_TVMIXER is not set
#
# Multimedia Capabilities Port drivers
#
# CONFIG_MCP is not set
# CONFIG_MCP_SA1100 is not set
# CONFIG_MCP_UCB1200 is not set
# CONFIG_MCP_UCB1200_AUDIO is not set
# CONFIG_MCP_UCB1200_TS is not set
# #
# USB support # USB support
# #
# CONFIG_USB is not set # CONFIG_USB is not set
# CONFIG_USB_UHCI is not set
# CONFIG_USB_UHCI_ALT is not set
# CONFIG_USB_OHCI is not set
# CONFIG_USB_OHCI_SA1111 is not set
# CONFIG_USB_AUDIO is not set
# CONFIG_USB_BLUETOOTH is not set
# CONFIG_USB_STORAGE is not set
# CONFIG_USB_STORAGE_DEBUG is not set
# CONFIG_USB_STORAGE_DATAFAB is not set
# CONFIG_USB_STORAGE_FREECOM is not set
# CONFIG_USB_STORAGE_ISD200 is not set
# CONFIG_USB_STORAGE_DPCM is not set
# CONFIG_USB_STORAGE_HP8200e is not set
# CONFIG_USB_STORAGE_SDDR09 is not set
# CONFIG_USB_STORAGE_JUMPSHOT is not set
# CONFIG_USB_ACM is not set
# CONFIG_USB_PRINTER is not set
# CONFIG_USB_HID is not set
# CONFIG_USB_HIDDEV is not set
# CONFIG_USB_KBD is not set
# CONFIG_USB_MOUSE is not set
# CONFIG_USB_WACOM is not set
# CONFIG_USB_DC2XX is not set
# CONFIG_USB_MDC800 is not set
# CONFIG_USB_SCANNER is not set
# CONFIG_USB_MICROTEK is not set
# CONFIG_USB_HPUSBSCSI is not set
# CONFIG_USB_PEGASUS is not set
# CONFIG_USB_KAWETH is not set
# CONFIG_USB_CATC is not set
# CONFIG_USB_CDCETHER is not set
# CONFIG_USB_USBNET is not set
# CONFIG_USB_USS720 is not set
#
# USB Serial Converter support
#
# CONFIG_USB_SERIAL is not set
# CONFIG_USB_SERIAL_GENERIC is not set
# CONFIG_USB_SERIAL_BELKIN is not set
# CONFIG_USB_SERIAL_WHITEHEAT is not set
# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
# CONFIG_USB_SERIAL_EMPEG is not set
# CONFIG_USB_SERIAL_FTDI_SIO is not set
# CONFIG_USB_SERIAL_VISOR is not set
# CONFIG_USB_SERIAL_IR is not set
# CONFIG_USB_SERIAL_EDGEPORT is not set
# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
# CONFIG_USB_SERIAL_KEYSPAN is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
# CONFIG_USB_SERIAL_MCT_U232 is not set
# CONFIG_USB_SERIAL_PL2303 is not set
# CONFIG_USB_SERIAL_CYBERJACK is not set
# CONFIG_USB_SERIAL_XIRCOM is not set
# CONFIG_USB_SERIAL_OMNINET is not set
# CONFIG_USB_RIO500 is not set
#
# Bluetooth support
#
# CONFIG_BLUEZ is not set
# #
# Kernel hacking # Kernel hacking
# #
# CONFIG_NO_FRAME_POINTER is not set # CONFIG_NO_FRAME_POINTER is not set
CONFIG_DEBUG_ERRORS=y
# CONFIG_DEBUG_USER is not set # CONFIG_DEBUG_USER is not set
# CONFIG_DEBUG_INFO is not set # CONFIG_DEBUG_INFO is not set
# CONFIG_MAGIC_SYSRQ is not set
# CONFIG_NO_PGT_CACHE is not set # CONFIG_NO_PGT_CACHE is not set
CONFIG_DEBUG_KERNEL=y
CONFIG_DEBUG_SLAB=y
# CONFIG_MAGIC_SYSRQ is not set
# CONFIG_DEBUG_SPINLOCK is not set
# CONFIG_DEBUG_WAITQ is not set
# CONFIG_DEBUG_BUGVERBOSE is not set
CONFIG_DEBUG_ERRORS=y
CONFIG_DEBUG_LL=y CONFIG_DEBUG_LL=y
# CONFIG_DEBUG_DC21285_PORT is not set # CONFIG_DEBUG_DC21285_PORT is not set
# CONFIG_DEBUG_CLPS711X_UART2 is not set # CONFIG_DEBUG_CLPS711X_UART2 is not set
# CONFIG_DEBUG_LL_SER3 is not set
...@@ -286,3 +286,5 @@ EXPORT_SYMBOL(set_dma_page); ...@@ -286,3 +286,5 @@ EXPORT_SYMBOL(set_dma_page);
EXPORT_SYMBOL(get_dma_residue); EXPORT_SYMBOL(get_dma_residue);
EXPORT_SYMBOL(set_dma_sg); EXPORT_SYMBOL(set_dma_sg);
EXPORT_SYMBOL(set_dma_speed); EXPORT_SYMBOL(set_dma_speed);
EXPORT_SYMBOL(dma_spin_lock);
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include <linux/config.h> #include <linux/config.h>
#include "entry-header.S" #include "entry-header.S"
#include <asm/thread_info.h> #include <asm/thread_info.h>
#include <asm/glue.h>
#ifdef IOC_BASE #ifdef IOC_BASE
...@@ -681,12 +682,12 @@ __dabt_svc: sub sp, sp, #S_FRAME_SIZE ...@@ -681,12 +682,12 @@ __dabt_svc: sub sp, sp, #S_FRAME_SIZE
/* /*
* This routine must not corrupt r9 * This routine must not corrupt r9
*/ */
#ifdef MULTI_CPU #ifdef MULTI_ABORT
ldr r4, .LCprocfns @ pass r0, r3 to ldr r4, .LCprocfns @ pass r0, r3 to
mov lr, pc @ processor code mov lr, pc @ processor code
ldr pc, [r4] @ call processor specific code ldr pc, [r4] @ call processor specific code
#else #else
bl cpu_data_abort bl CPU_ABORT_HANDLER
#endif #endif
msr cpsr_c, r9 msr cpsr_c, r9
mov r2, sp mov r2, sp
...@@ -799,7 +800,7 @@ __pabt_svc: sub sp, sp, #S_FRAME_SIZE ...@@ -799,7 +800,7 @@ __pabt_svc: sub sp, sp, #S_FRAME_SIZE
.LCirq: .word __temp_irq .LCirq: .word __temp_irq
.LCund: .word __temp_und .LCund: .word __temp_und
.LCabt: .word __temp_abt .LCabt: .word __temp_abt
#ifdef MULTI_CPU #ifdef MULTI_ABORT
.LCprocfns: .word SYMBOL_NAME(processor) .LCprocfns: .word SYMBOL_NAME(processor)
#endif #endif
.LCfp: .word SYMBOL_NAME(fp_enter) .LCfp: .word SYMBOL_NAME(fp_enter)
...@@ -823,12 +824,12 @@ __dabt_usr: sub sp, sp, #S_FRAME_SIZE @ Allocate frame size in one go ...@@ -823,12 +824,12 @@ __dabt_usr: sub sp, sp, #S_FRAME_SIZE @ Allocate frame size in one go
alignment_trap r7, r7, __temp_abt alignment_trap r7, r7, __temp_abt
zero_fp zero_fp
mov r0, r2 @ remove once everyones in sync mov r0, r2 @ remove once everyones in sync
#ifdef MULTI_CPU #ifdef MULTI_ABORT
ldr r4, .LCprocfns @ pass r0, r3 to ldr r4, .LCprocfns @ pass r0, r3 to
mov lr, pc @ processor code mov lr, pc @ processor code
ldr pc, [r4] @ call processor specific code ldr pc, [r4] @ call processor specific code
#else #else
bl cpu_data_abort bl CPU_ABORT_HANDLER
#endif #endif
set_cpsr_c r2, #MODE_SVC @ Enable interrupts set_cpsr_c r2, #MODE_SVC @ Enable interrupts
mov r2, sp mov r2, sp
......
...@@ -76,6 +76,9 @@ struct processor processor; ...@@ -76,6 +76,9 @@ struct processor processor;
#ifdef MULTI_TLB #ifdef MULTI_TLB
struct cpu_tlb_fns cpu_tlb; struct cpu_tlb_fns cpu_tlb;
#endif #endif
#ifdef MULTI_USER
struct cpu_user_fns cpu_user;
#endif
unsigned char aux_device_present; unsigned char aux_device_present;
char elf_platform[ELF_PLATFORM_SIZE]; char elf_platform[ELF_PLATFORM_SIZE];
...@@ -248,6 +251,9 @@ static void __init setup_processor(void) ...@@ -248,6 +251,9 @@ static void __init setup_processor(void)
#ifdef MULTI_TLB #ifdef MULTI_TLB
cpu_tlb = *list->tlb; cpu_tlb = *list->tlb;
#endif #endif
#ifdef MULTI_USER
cpu_user = *list->user;
#endif
printk("Processor: %s %s revision %d\n", printk("Processor: %s %s revision %d\n",
proc_info.manufacturer, proc_info.cpu_name, proc_info.manufacturer, proc_info.cpu_name,
......
...@@ -113,7 +113,6 @@ static int __init integrator_map_irq(struct pci_dev *dev, u8 slot, u8 pin) ...@@ -113,7 +113,6 @@ static int __init integrator_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
extern void pci_v3_init(void *); extern void pci_v3_init(void *);
struct hw_pci integrator_pci __initdata = { struct hw_pci integrator_pci __initdata = {
mem_offset: 0x40000000,
swizzle: integrator_swizzle, swizzle: integrator_swizzle,
map_irq: integrator_map_irq, map_irq: integrator_map_irq,
setup: pci_v3_setup, setup: pci_v3_setup,
......
...@@ -435,7 +435,7 @@ static int __init pci_v3_setup_resources(struct resource **resource) ...@@ -435,7 +435,7 @@ static int __init pci_v3_setup_resources(struct resource **resource)
resource[1] = &non_mem; resource[1] = &non_mem;
resource[2] = &pre_mem; resource[2] = &pre_mem;
return 0; return 1;
} }
/* /*
...@@ -529,8 +529,10 @@ int __init pci_v3_setup(int nr, struct pci_sys_data *sys) ...@@ -529,8 +529,10 @@ int __init pci_v3_setup(int nr, struct pci_sys_data *sys)
{ {
int ret = 0; int ret = 0;
if (nr == 0) if (nr == 0) {
sys->mem_offset = 0x40000000;
ret = pci_v3_setup_resources(sys->resource); ret = pci_v3_setup_resources(sys->resource);
}
return ret; return ret;
} }
...@@ -634,7 +636,6 @@ void __init pci_v3_preinit(void) ...@@ -634,7 +636,6 @@ void __init pci_v3_preinit(void)
void __init pci_v3_postinit(void) void __init pci_v3_postinit(void)
{ {
unsigned int pci_cmd; unsigned int pci_cmd;
int ret;
pci_cmd = PCI_COMMAND_MEMORY | pci_cmd = PCI_COMMAND_MEMORY |
PCI_COMMAND_MASTER | PCI_COMMAND_INVALIDATE; PCI_COMMAND_MASTER | PCI_COMMAND_INVALIDATE;
......
...@@ -47,23 +47,44 @@ static u_long iq80310_read_timer (void) ...@@ -47,23 +47,44 @@ static u_long iq80310_read_timer (void)
u_long b0, b1, b2, b3, val; u_long b0, b1, b2, b3, val;
b0 = *la0; b1 = *la1; b2 = *la2; b3 = *la3; b0 = *la0; b1 = *la1; b2 = *la2; b3 = *la3;
b0 = (((b0 & 0x20) >> 1) | (b0 & 0x1f)); b0 = (((b0 & 0x40) >> 1) | (b0 & 0x1f));
b1 = (((b1 & 0x20) >> 1) | (b1 & 0x1f)); b1 = (((b1 & 0x40) >> 1) | (b1 & 0x1f));
b2 = (((b2 & 0x20) >> 1) | (b2 & 0x1f)); b2 = (((b2 & 0x40) >> 1) | (b2 & 0x1f));
b3 = (b3 & 0x0f); b3 = (b3 & 0x0f);
val = ((b0 << 0) | (b1 << 6) | (b2 << 12) | (b3 << 18)); val = ((b0 << 0) | (b1 << 6) | (b2 << 12) | (b3 << 18));
return val; return val;
} }
/* IRQs are disabled before entering here from do_gettimeofday() */ /*
* IRQs are disabled before entering here from do_gettimeofday().
* Note that the counter may wrap. When it does, 'elapsed' will
* be small, but we will have a pending interrupt.
*/
static unsigned long iq80310_gettimeoffset (void) static unsigned long iq80310_gettimeoffset (void)
{ {
unsigned long elapsed, usec; unsigned long elapsed, usec, tmp1;
unsigned int stat1, stat2;
/* We need elapsed timer ticks since last interrupt */ stat1 = *(volatile u8 *)IQ80310_INT_STAT;
elapsed = iq80310_read_timer(); elapsed = iq80310_read_timer();
stat2 = *(volatile u8 *)IQ80310_INT_STAT;
/*
* If an interrupt was pending before we read the timer,
* we've already wrapped. Factor this into the time.
* If an interrupt was pending after we read the timer,
* it may have wrapped between checking the interrupt
* status and reading the timer. Re-read the timer to
* be sure its value is after the wrap.
*/
if (stat1 & 1)
elapsed += LATCH;
else if (stat2 & 1)
elapsed = LATCH + iq80310_read_timer();
/* Now convert them to usec */ /*
* Now convert them to usec.
*/
usec = (unsigned long)(elapsed*tick)/LATCH; usec = (unsigned long)(elapsed*tick)/LATCH;
return usec; return usec;
...@@ -92,9 +113,7 @@ static void iq80310_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) ...@@ -92,9 +113,7 @@ static void iq80310_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
* *
* -DS * -DS
*/ */
irq_exit(smp_processor_id(), irq);
do_timer(regs); do_timer(regs);
irq_enter(smp_processor_id(), irq);
} }
extern unsigned long (*gettimeoffset)(void); extern unsigned long (*gettimeoffset)(void);
...@@ -116,4 +135,3 @@ void __init time_init(void) ...@@ -116,4 +135,3 @@ void __init time_init(void)
*timer_en |= 2; *timer_en |= 2;
*timer_en |= 1; *timer_en |= 1;
} }
...@@ -14,69 +14,105 @@ obj-y := generic.o irq.o dma.o ...@@ -14,69 +14,105 @@ obj-y := generic.o irq.o dma.o
obj-m := obj-m :=
obj-n := obj-n :=
obj- := obj- :=
led-y := leds.o
export-objs := assabet.o dma.o flexanet.o freebird.o generic.o h3600.o \ export-objs := dma.o generic.o irq.o pcipool.o sa1111.o sa1111-pcibuf.o \
huw_webpanel.o irq.o pcipool.o sa1111.o sa1111-pcibuf.o \ usb_ctl.o usb_recv.o usb_send.o pm.o
yopy.o usb_ctl.o usb_recv.o usb_send.o
# This needs to be cleaned up. We probably need to have SA1100 # This needs to be cleaned up. We probably need to have SA1100
# and SA1110 config symbols. # and SA1110 config symbols.
# #
# We link the CPU support next, so that RAM timings can be tuned. # We link the CPU support next, so that RAM timings can be tuned.
ifeq ($(CONFIG_CPU_FREQ),y) ifeq ($(CONFIG_CPU_FREQ),y)
obj-$(CONFIG_SA1100_ASSABET) += cpu-sa1110.o obj-$(CONFIG_SA1100_ASSABET) += cpu-sa1110.o
obj-$(CONFIG_SA1100_CERF) += cpu-sa1110.o obj-$(CONFIG_SA1100_CERF) += cpu-sa1110.o
obj-$(CONFIG_SA1100_PT_SYSTEM3) += cpu-sa1110.o obj-$(CONFIG_SA1100_LART) += cpu-sa1100.o
obj-$(CONFIG_SA1100_LART) += cpu-sa1100.o obj-$(CONFIG_SA1100_PT_SYSTEM3) += cpu-sa1110.o
endif endif
# Next, the SA1111 stuff. # Next, the SA1111 stuff.
obj-$(CONFIG_SA1111) += sa1111.o obj-$(CONFIG_SA1111) += sa1111.o
obj-$(CONFIG_USB_OHCI_SA1111) += sa1111-pcibuf.o pcipool.o obj-$(CONFIG_USB_OHCI_SA1111) += sa1111-pcibuf.o pcipool.o
# Specific board support # Specific board support
obj-$(CONFIG_SA1100_ADSBITSY) += adsbitsy.o obj-$(CONFIG_SA1100_ADSBITSY) += adsbitsy.o
obj-$(CONFIG_SA1100_ASSABET) += assabet.o led-$(CONFIG_SA1100_ADSBITSY) += leds-adsbitsy.o
obj-$(CONFIG_ASSABET_NEPONSET) += neponset.o
obj-$(CONFIG_SA1100_BRUTUS) += brutus.o obj-$(CONFIG_SA1100_ASSABET) += assabet.o
obj-$(CONFIG_SA1100_CERF) += cerf.o export-objs += assabet.o
obj-$(CONFIG_SA1100_EMPEG) += empeg.o led-$(CONFIG_SA1100_ASSABET) += leds-assabet.o
obj-$(CONFIG_SA1100_FLEXANET) += flexanet.o obj-$(CONFIG_ASSABET_NEPONSET) += neponset.o
obj-$(CONFIG_SA1100_FREEBIRD) += freebird.o
obj-$(CONFIG_SA1100_GRAPHICSCLIENT) += graphicsclient.o obj-$(CONFIG_SA1100_BADGE4) += badge4.o
obj-$(CONFIG_SA1100_GRAPHICSMASTER) += graphicsmaster.o export-objs += badge4.o
obj-$(CONFIG_SA1100_H3600) += h3600.o
obj-$(CONFIG_SA1100_HUW_WEBPANEL) += huw_webpanel.o obj-$(CONFIG_SA1100_BRUTUS) += brutus.o
obj-$(CONFIG_SA1100_ITSY) += itsy.o led-$(CONFIG_SA1100_BRUTUS) += leds-brutus.o
obj-$(CONFIG_SA1100_JORNADA720) += jornada720.o
obj-$(CONFIG_SA1100_LART) += lart.o obj-$(CONFIG_SA1100_CERF) += cerf.o
obj-$(CONFIG_SA1100_NANOENGINE) += nanoengine.o led-$(CONFIG_SA1100_CERF) += leds-cerf.o
obj-$(CONFIG_SA1100_OMNIMETER) += omnimeter.o
obj-$(CONFIG_SA1100_PANGOLIN) += pangolin.o obj-$(CONFIG_SA1100_EMPEG) += empeg.o
obj-$(CONFIG_SA1100_PFS168) += pfs168.o
obj-$(CONFIG_SA1100_PLEB) += pleb.o obj-$(CONFIG_SA1100_FLEXANET) += flexanet.o
obj-$(CONFIG_SA1100_SHANNON) += shannon.o export-objs += flexanet.o
obj-$(CONFIG_SA1100_SHERMAN) += sherman.o led-$(CONFIG_SA1100_FLEXANET) += leds-flexanet.o
obj-$(CONFIG_SA1100_PT_SYSTEM3) += system3.o
obj-$(CONFIG_SA1100_SIMPAD) += simpad.o obj-$(CONFIG_SA1100_FREEBIRD) += freebird.o
obj-$(CONFIG_SA1100_VICTOR) += victor.o export-objs += freebird.o
obj-$(CONFIG_SA1100_XP860) += xp860.o
obj-$(CONFIG_SA1100_YOPY) += yopy.o obj-$(CONFIG_SA1100_GRAPHICSCLIENT) += graphicsclient.o
led-$(CONFIG_SA1100_GRAPHICSCLIENT) += leds-graphicsclient.o
obj-$(CONFIG_SA1100_GRAPHICSMASTER) += graphicsmaster.o
led-$(CONFIG_SA1100_GRAPHICSMASTER) += leds-graphicsmaster.o
obj-$(CONFIG_SA1100_H3600) += h3600.o
export-objs += h3600.o
obj-$(CONFIG_SA1100_HUW_WEBPANEL) += huw_webpanel.o
export-objs += huw_webpanel.o
obj-$(CONFIG_SA1100_ITSY) += itsy.o
obj-$(CONFIG_SA1100_JORNADA720) += jornada720.o
obj-$(CONFIG_SA1100_LART) += lart.o
led-$(CONFIG_SA1100_LART) += leds-lart.o
obj-$(CONFIG_SA1100_NANOENGINE) += nanoengine.o
obj-$(CONFIG_SA1100_OMNIMETER) += omnimeter.o
obj-$(CONFIG_SA1100_PANGOLIN) += pangolin.o
obj-$(CONFIG_SA1100_PFS168) += pfs168.o
led-$(CONFIG_SA1100_PFS168) += leds-pfs168.o
obj-$(CONFIG_SA1100_PLEB) += pleb.o
obj-$(CONFIG_SA1100_PT_SYSTEM3) += system3.o
led-$(CONFIG_SA1100_PT_SYSTEM3) += leds-system3.o
obj-$(CONFIG_SA1100_SHANNON) += shannon.o
obj-$(CONFIG_SA1100_SHERMAN) += sherman.o
obj-$(CONFIG_SA1100_SIMPAD) += simpad.o
led-$(CONFIG_SA1100_SIMPAD) += leds-simpad.o
obj-$(CONFIG_SA1100_STORK) += stork.o
export-objs += stork.o
obj-$(CONFIG_SA1100_VICTOR) += victor.o
obj-$(CONFIG_SA1100_XP860) += xp860.o
obj-$(CONFIG_SA1100_YOPY) += yopy.o
export-objs += yopy.o
# LEDs support # LEDs support
leds-y := leds.o obj-$(CONFIG_LEDS) += $(led-y)
leds-$(CONFIG_SA1100_ADSBITSY) += leds-adsbitsy.o
leds-$(CONFIG_SA1100_ASSABET) += leds-assabet.o
leds-$(CONFIG_SA1100_BRUTUS) += leds-brutus.o
leds-$(CONFIG_SA1100_CERF) += leds-cerf.o
leds-$(CONFIG_SA1100_FLEXANET) += leds-flexanet.o
leds-$(CONFIG_SA1100_GRAPHICSCLIENT) += leds-graphicsclient.o
leds-$(CONFIG_SA1100_GRAPHICSMASTER) += leds-graphicsmaster.o
leds-$(CONFIG_SA1100_LART) += leds-lart.o
leds-$(CONFIG_SA1100_PFS168) += leds-pfs168.o
leds-$(CONFIG_SA1100_SIMPAD) += leds-simpad.o
leds-$(CONFIG_SA1100_PT_SYSTEM3) += leds-system3.o
obj-$(CONFIG_LEDS) += $(leds-y)
# SA1110 USB client support # SA1110 USB client support
list-multi += sa1100usb_core.o list-multi += sa1100usb_core.o
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* *
* Copyright (C) 2001 Russell King * Copyright (C) 2001 Russell King
* *
* $Id: cpu-sa1110.c,v 1.6 2001/10/22 11:53:47 rmk Exp $ * $Id: cpu-sa1110.c,v 1.8 2002/01/09 17:13:27 rmk Exp $
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License version 2 as
...@@ -69,13 +69,23 @@ static struct sdram_params tc59sm716_cl3_params __initdata = { ...@@ -69,13 +69,23 @@ static struct sdram_params tc59sm716_cl3_params __initdata = {
}; };
static struct sdram_params samsung_k4s641632d_tc75 __initdata = { static struct sdram_params samsung_k4s641632d_tc75 __initdata = {
rows: 14, rows: 14,
tck: 9, tck: 9,
trcd: 27, trcd: 27,
trp: 20, trp: 20,
twr: 9, twr: 9,
refresh: 64000, refresh: 64000,
cas_latency: 3, cas_latency: 3,
};
static struct sdram_params samsung_km416s4030ct __initdata = {
rows: 13,
tck: 8,
trcd: 24, /* 3 CLKs */
trp: 24, /* 3 CLKs */
twr: 16, /* Trdl: 2 CLKs */
refresh: 64000,
cas_latency: 3,
}; };
static struct sdram_params sdram_params; static struct sdram_params sdram_params;
...@@ -273,6 +283,8 @@ static int __init sa1110_clk_init(void) ...@@ -273,6 +283,8 @@ static int __init sa1110_clk_init(void)
if (machine_is_pt_system3()) if (machine_is_pt_system3())
sdram = &samsung_k4s641632d_tc75; sdram = &samsung_k4s641632d_tc75;
if (machine_is_h3100())
sdram = &samsung_km416s4030ct;
if (sdram) { if (sdram) {
printk(KERN_DEBUG "SDRAM: tck: %d trcd: %d trp: %d" printk(KERN_DEBUG "SDRAM: tck: %d trcd: %d trp: %d"
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
* in the platform specific files. * in the platform specific files.
*/ */
#include <linux/config.h> #include <linux/config.h>
#include <linux/module.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/pm.h> #include <linux/pm.h>
#include <linux/slab.h> #include <linux/slab.h>
...@@ -27,6 +28,7 @@ ...@@ -27,6 +28,7 @@
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <linux/sysctl.h> #include <linux/sysctl.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/cpufreq.h>
#include <asm/hardware.h> #include <asm/hardware.h>
#include <asm/memory.h> #include <asm/memory.h>
...@@ -210,3 +212,5 @@ static int __init pm_init(void) ...@@ -210,3 +212,5 @@ static int __init pm_init(void)
__initcall(pm_init); __initcall(pm_init);
#endif #endif
EXPORT_SYMBOL(pm_do_suspend);
...@@ -99,10 +99,9 @@ extern void convert_to_tag_list(struct param_struct *params, int mem_init); ...@@ -99,10 +99,9 @@ extern void convert_to_tag_list(struct param_struct *params, int mem_init);
*/ */
static struct map_desc system3_io_desc[] __initdata = { static struct map_desc system3_io_desc[] __initdata = {
/* virtual physical length domain r w c b */ /* virtual physical length domain r w c b */
{ 0xe8000000, 0x00000000, 0x01000000, DOMAIN_IO, 0, 1, 0, 0 }, /* Flash bank 0 */ { 0xf3000000, PT_CPLD_BASE, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* System Registers */
{ 0xf3000000, PT_CPLD_BASE, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* System Registers */ { 0xf4000000, PT_SA1111_BASE, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* SA-1111 */
{ 0xf4000000, PT_SA1111_BASE, 0x00100000, DOMAIN_IO, 0, 1, 0, 0 }, /* SA-1111 */
LAST_DESC LAST_DESC
}; };
......
#include <linux/linkage.h> #include <linux/linkage.h>
#include <asm/assembler.h> #include <asm/assembler.h>
/* /*
* Function: armv4_early_abort * Function: v4_early_abort
* *
* Params : r2 = address of aborted instruction * Params : r2 = address of aborted instruction
* : r3 = saved SPSR * : r3 = saved SPSR
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
* picture. Unfortunately, this does happen. We live with it. * picture. Unfortunately, this does happen. We live with it.
*/ */
.align 5 .align 5
ENTRY(armv4_early_abort) ENTRY(v4_early_abort)
mrc p15, 0, r1, c5, c0, 0 @ get FSR mrc p15, 0, r1, c5, c0, 0 @ get FSR
mrc p15, 0, r0, c6, c0, 0 @ get FAR mrc p15, 0, r0, c6, c0, 0 @ get FAR
ldr r3, [r2] @ read aborted ARM instruction ldr r3, [r2] @ read aborted ARM instruction
......
#include <linux/linkage.h> #include <linux/linkage.h>
#include <asm/assembler.h> #include <asm/assembler.h>
/* /*
* Function: armv4t_early_abort * Function: v4t_early_abort
* *
* Params : r2 = address of aborted instruction * Params : r2 = address of aborted instruction
* : r3 = saved SPSR * : r3 = saved SPSR
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
* picture. Unfortunately, this does happen. We live with it. * picture. Unfortunately, this does happen. We live with it.
*/ */
.align 5 .align 5
ENTRY(armv4t_early_abort) ENTRY(v4t_early_abort)
mrc p15, 0, r1, c5, c0, 0 @ get FSR mrc p15, 0, r1, c5, c0, 0 @ get FSR
mrc p15, 0, r0, c6, c0, 0 @ get FAR mrc p15, 0, r0, c6, c0, 0 @ get FAR
tst r3, #PSR_T_BIT tst r3, #PSR_T_BIT
......
#include <linux/linkage.h> #include <linux/linkage.h>
#include <asm/assembler.h> #include <asm/assembler.h>
/* /*
* Function: armv5ej_early_abort * Function: v5ej_early_abort
* *
* Params : r2 = address of aborted instruction * Params : r2 = address of aborted instruction
* : r3 = saved SPSR * : r3 = saved SPSR
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
* picture. Unfortunately, this does happen. We live with it. * picture. Unfortunately, this does happen. We live with it.
*/ */
.align 5 .align 5
ENTRY(armv5ej_early_abort) ENTRY(v5ej_early_abort)
mrc p15, 0, r1, c5, c0, 0 @ get FSR mrc p15, 0, r1, c5, c0, 0 @ get FSR
mrc p15, 0, r0, c6, c0, 0 @ get FAR mrc p15, 0, r0, c6, c0, 0 @ get FAR
tst r3, #PSR_J_BIT tst r3, #PSR_J_BIT
......
#include <linux/linkage.h> #include <linux/linkage.h>
#include <asm/assembler.h> #include <asm/assembler.h>
/* /*
* Function: armv4t_late_abort * Function: v4t_late_abort
* *
* Params : r2 = address of aborted instruction * Params : r2 = address of aborted instruction
* : r3 = saved SPSR * : r3 = saved SPSR
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
* abort here if the I-TLB and D-TLB aren't seeing the same * abort here if the I-TLB and D-TLB aren't seeing the same
* picture. Unfortunately, this does happen. We live with it. * picture. Unfortunately, this does happen. We live with it.
*/ */
ENTRY(armv4t_late_abort) ENTRY(v4t_late_abort)
tst r3, #PSR_T_BIT @ check for thumb mode tst r3, #PSR_T_BIT @ check for thumb mode
mrc p15, 0, r1, c5, c0, 0 @ get FSR mrc p15, 0, r1, c5, c0, 0 @ get FSR
mrc p15, 0, r0, c6, c0, 0 @ get FAR mrc p15, 0, r0, c6, c0, 0 @ get FAR
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
* *
* FIXME: do we need to handle cache stuff... * FIXME: do we need to handle cache stuff...
*/ */
ENTRY(armv3_copy_user_page) ENTRY(v3_copy_user_page)
stmfd sp!, {r4, lr} @ 2 stmfd sp!, {r4, lr} @ 2
mov r2, #PAGE_SZ/64 @ 1 mov r2, #PAGE_SZ/64 @ 1
ldmia r1!, {r3, r4, ip, lr} @ 4+1 ldmia r1!, {r3, r4, ip, lr} @ 4+1
...@@ -42,7 +42,7 @@ ENTRY(armv3_copy_user_page) ...@@ -42,7 +42,7 @@ ENTRY(armv3_copy_user_page)
* *
* FIXME: do we need to handle cache stuff... * FIXME: do we need to handle cache stuff...
*/ */
ENTRY(armv3_clear_user_page) ENTRY(v3_clear_user_page)
str lr, [sp, #-4]! str lr, [sp, #-4]!
mov r1, #PAGE_SZ/64 @ 1 mov r1, #PAGE_SZ/64 @ 1
mov r2, #0 @ 1 mov r2, #0 @ 1
...@@ -57,3 +57,8 @@ ENTRY(armv3_clear_user_page) ...@@ -57,3 +57,8 @@ ENTRY(armv3_clear_user_page)
bne 1b @ 1 bne 1b @ 1
ldr pc, [sp], #4 ldr pc, [sp], #4
.section ".text.init", #alloc, #execinstr
ENTRY(v3_user_fns)
.long v3_clear_user_page
.long v3_copy_user_page
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
* instruction. If your processor does not supply this, you have to write your * instruction. If your processor does not supply this, you have to write your
* own copy_user_page that does the right thing. * own copy_user_page that does the right thing.
*/ */
ENTRY(armv4_copy_user_page) ENTRY(v4_copy_user_page)
stmfd sp!, {r4, lr} @ 2 stmfd sp!, {r4, lr} @ 2
mov r2, #PAGE_SZ/64 @ 1 mov r2, #PAGE_SZ/64 @ 1
ldmia r1!, {r3, r4, ip, lr} @ 4 ldmia r1!, {r3, r4, ip, lr} @ 4
...@@ -51,7 +51,7 @@ ENTRY(armv4_copy_user_page) ...@@ -51,7 +51,7 @@ ENTRY(armv4_copy_user_page)
* *
* Same story as above. * Same story as above.
*/ */
ENTRY(armv4_clear_user_page) ENTRY(v4_clear_user_page)
str lr, [sp, #-4]! str lr, [sp, #-4]!
mov r1, #PAGE_SZ/64 @ 1 mov r1, #PAGE_SZ/64 @ 1
mov r2, #0 @ 1 mov r2, #0 @ 1
...@@ -68,3 +68,10 @@ ENTRY(armv4_clear_user_page) ...@@ -68,3 +68,10 @@ ENTRY(armv4_clear_user_page)
bne 1b @ 1 bne 1b @ 1
mcr p15, 0, r1, c7, c10, 4 @ 1 drain WB mcr p15, 0, r1, c7, c10, 4 @ 1 drain WB
ldr pc, [sp], #4 ldr pc, [sp], #4
.section ".text.init", #alloc, #execinstr
ENTRY(v4_user_fns)
.long v4_clear_user_page
.long v4_copy_user_page
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
* instruction. If your processor does not supply this, you have to write your * instruction. If your processor does not supply this, you have to write your
* own copy_user_page that does the right thing. * own copy_user_page that does the right thing.
*/ */
ENTRY(armv4_mc_copy_user_page) ENTRY(v4_mc_copy_user_page)
stmfd sp!, {r4, lr} @ 2 stmfd sp!, {r4, lr} @ 2
mov r4, r0 mov r4, r0
mov r0, r1 mov r0, r1
...@@ -53,7 +53,7 @@ ENTRY(armv4_mc_copy_user_page) ...@@ -53,7 +53,7 @@ ENTRY(armv4_mc_copy_user_page)
* *
* Same story as above. * Same story as above.
*/ */
ENTRY(armv4_mc_clear_user_page) ENTRY(v4_mc_clear_user_page)
str lr, [sp, #-4]! str lr, [sp, #-4]!
mov r1, #PAGE_SZ/64 @ 1 mov r1, #PAGE_SZ/64 @ 1
mov r2, #0 @ 1 mov r2, #0 @ 1
...@@ -69,3 +69,10 @@ ENTRY(armv4_mc_clear_user_page) ...@@ -69,3 +69,10 @@ ENTRY(armv4_mc_clear_user_page)
subs r1, r1, #1 @ 1 subs r1, r1, #1 @ 1
bne 1b @ 1 bne 1b @ 1
ldr pc, [sp], #4 ldr pc, [sp], #4
.section ".text.init", #alloc, #execinstr
ENTRY(v4_mc_user_fns)
.long v4_mc_clear_user_page
.long v4_mc_copy_user_page
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
* page. We rely on the mini-cache being smaller than one page, so we'll * page. We rely on the mini-cache being smaller than one page, so we'll
* cycle through the complete cache anyway. * cycle through the complete cache anyway.
*/ */
ENTRY(armv5te_copy_user_page) ENTRY(v5te_mc_copy_user_page)
stmfd sp!, {r4, r5, lr} stmfd sp!, {r4, r5, lr}
mov r5, r0 mov r5, r0
mov r0, r1 mov r0, r1
...@@ -62,7 +62,7 @@ ENTRY(armv5te_copy_user_page) ...@@ -62,7 +62,7 @@ ENTRY(armv5te_copy_user_page)
* r0 = destination * r0 = destination
* r1 = virtual user address of ultimate destination page * r1 = virtual user address of ultimate destination page
*/ */
ENTRY(armv5te_clear_user_page) ENTRY(v5te_mc_clear_user_page)
str lr, [sp, #-4]! str lr, [sp, #-4]!
mov r1, #PAGE_SZ/32 mov r1, #PAGE_SZ/32
mov r2, #0 mov r2, #0
...@@ -77,3 +77,9 @@ ENTRY(armv5te_clear_user_page) ...@@ -77,3 +77,9 @@ ENTRY(armv5te_clear_user_page)
subs r1, r1, #1 subs r1, r1, #1
bne 1b bne 1b
ldr pc, [sp], #4 ldr pc, [sp], #4
.section ".text.init", #alloc, #execinstr
ENTRY(v5te_mc_user_fns)
.long v5te_mc_clear_user_page
.long v5te_mc_copy_user_page
...@@ -181,7 +181,7 @@ static void adjust_pte(struct vm_area_struct *vma, unsigned long address) ...@@ -181,7 +181,7 @@ static void adjust_pte(struct vm_area_struct *vma, unsigned long address)
static void static void
make_coherent(struct vm_area_struct *vma, unsigned long addr, struct page *page) make_coherent(struct vm_area_struct *vma, unsigned long addr, struct page *page)
{ {
struct vm_area_struct *mpnt; struct list_head *l;
struct mm_struct *mm = vma->vm_mm; struct mm_struct *mm = vma->vm_mm;
unsigned long pgoff = (addr - vma->vm_start) >> PAGE_SHIFT; unsigned long pgoff = (addr - vma->vm_start) >> PAGE_SHIFT;
int aliases = 0; int aliases = 0;
...@@ -191,10 +191,12 @@ make_coherent(struct vm_area_struct *vma, unsigned long addr, struct page *page) ...@@ -191,10 +191,12 @@ make_coherent(struct vm_area_struct *vma, unsigned long addr, struct page *page)
* space, then we need to handle them specially to maintain * space, then we need to handle them specially to maintain
* cache coherency. * cache coherency.
*/ */
for (mpnt = page->mapping->i_mmap_shared; mpnt; list_for_each(l, &page->mapping->i_mmap_shared) {
mpnt = mpnt->vm_next_share) { struct vm_area_struct *mpnt;
unsigned long off; unsigned long off;
mpnt = list_entry(l, struct vm_area_struct, shared);
/* /*
* If this VMA is not in our MM, we can ignore it. * If this VMA is not in our MM, we can ignore it.
* Note that we intentionally don't mask out the VMA * Note that we intentionally don't mask out the VMA
......
/* /*
* linux/arch/arm/mm/init.c * linux/arch/arm/mm/init.c
* *
* Copyright (C) 1995-2000 Russell King * Copyright (C) 1995-2002 Russell King
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License version 2 as
...@@ -46,7 +46,7 @@ ...@@ -46,7 +46,7 @@
#define TABLE_OFFSET 0 #define TABLE_OFFSET 0
#endif #endif
#define TABLE_SIZE ((TABLE_OFFSET + PTRS_PER_PTE) * sizeof(void *)) #define TABLE_SIZE ((TABLE_OFFSET + PTRS_PER_PTE) * sizeof(pte_t))
static unsigned long totalram_pages; static unsigned long totalram_pages;
extern pgd_t swapper_pg_dir[PTRS_PER_PGD]; extern pgd_t swapper_pg_dir[PTRS_PER_PGD];
...@@ -319,7 +319,7 @@ static __init void reserve_node_zero(unsigned int bootmap_pfn, unsigned int boot ...@@ -319,7 +319,7 @@ static __init void reserve_node_zero(unsigned int bootmap_pfn, unsigned int boot
* and can only be in node 0. * and can only be in node 0.
*/ */
reserve_bootmem_node(pgdat, __pa(swapper_pg_dir), reserve_bootmem_node(pgdat, __pa(swapper_pg_dir),
PTRS_PER_PGD * sizeof(void *)); PTRS_PER_PGD * sizeof(pgd_t));
#endif #endif
/* /*
* And don't forget to reserve the allocator bitmap, * And don't forget to reserve the allocator bitmap,
......
/* /*
* linux/arch/arm/mm/mm-armv.c * linux/arch/arm/mm/mm-armv.c
* *
* Copyright (C) 1998-2000 Russell King * Copyright (C) 1998-2002 Russell King
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License version 2 as
...@@ -82,9 +82,6 @@ pgd_t *get_pgd_slow(struct mm_struct *mm) ...@@ -82,9 +82,6 @@ pgd_t *get_pgd_slow(struct mm_struct *mm)
init_pgd = pgd_offset_k(0); init_pgd = pgd_offset_k(0);
if (vectors_base() == 0) { if (vectors_base() == 0) {
init_pmd = pmd_offset(init_pgd, 0);
init_pte = pte_offset(init_pmd, 0);
/* /*
* This lock is here just to satisfy pmd_alloc and pte_lock * This lock is here just to satisfy pmd_alloc and pte_lock
*/ */
...@@ -172,11 +169,14 @@ void free_pgd_slow(pgd_t *pgd) ...@@ -172,11 +169,14 @@ void free_pgd_slow(pgd_t *pgd)
static inline void static inline void
alloc_init_section(unsigned long virt, unsigned long phys, int prot) alloc_init_section(unsigned long virt, unsigned long phys, int prot)
{ {
pmd_t pmd; pmd_t *pmdp, pmd;
pmd_val(pmd) = phys | prot; pmdp = pmd_offset(pgd_offset_k(virt), virt);
if (virt & (1 << PMD_SHIFT))
pmdp++;
set_pmd(pmd_offset(pgd_offset_k(virt), virt), pmd); pmd_val(pmd) = phys | prot;
set_pmd(pmdp, pmd);
} }
/* /*
...@@ -189,18 +189,19 @@ alloc_init_section(unsigned long virt, unsigned long phys, int prot) ...@@ -189,18 +189,19 @@ alloc_init_section(unsigned long virt, unsigned long phys, int prot)
static inline void static inline void
alloc_init_page(unsigned long virt, unsigned long phys, int domain, int prot) alloc_init_page(unsigned long virt, unsigned long phys, int domain, int prot)
{ {
pmd_t *pmdp; pmd_t *pmdp, pmd;
pte_t *ptep; pte_t *ptep;
pmdp = pmd_offset(pgd_offset_k(virt), virt); pmdp = pmd_offset(pgd_offset_k(virt), virt);
if (pmd_none(*pmdp)) { if (pmd_none(*pmdp)) {
pte_t *ptep = alloc_bootmem_low_pages(2 * PTRS_PER_PTE * ptep = alloc_bootmem_low_pages(2 * PTRS_PER_PTE *
sizeof(pte_t)); sizeof(pte_t));
ptep += PTRS_PER_PTE; pmd_val(pmd) = __pa(ptep) | PMD_TYPE_TABLE | PMD_DOMAIN(domain);
set_pmd(pmdp, pmd);
set_pmd(pmdp, __mk_pmd(ptep, PMD_TYPE_TABLE | PMD_DOMAIN(domain))); pmd_val(pmd) += 256 * sizeof(pte_t);
set_pmd(pmdp + 1, pmd);
} }
ptep = pte_offset_kernel(pmdp, virt); ptep = pte_offset_kernel(pmdp, virt);
...@@ -266,11 +267,11 @@ static void __init create_mapping(struct map_desc *md) ...@@ -266,11 +267,11 @@ static void __init create_mapping(struct map_desc *md)
length -= PAGE_SIZE; length -= PAGE_SIZE;
} }
while (length >= PGDIR_SIZE) { while (length >= (PGDIR_SIZE / 2)) {
alloc_init_section(virt, virt + off, prot_sect); alloc_init_section(virt, virt + off, prot_sect);
virt += PGDIR_SIZE; virt += (PGDIR_SIZE / 2);
length -= PGDIR_SIZE; length -= (PGDIR_SIZE / 2);
} }
while (length >= PAGE_SIZE) { while (length >= PAGE_SIZE) {
...@@ -463,41 +464,3 @@ void __init create_memmap_holes(struct meminfo *mi) ...@@ -463,41 +464,3 @@ void __init create_memmap_holes(struct meminfo *mi)
for (node = 0; node < numnodes; node++) for (node = 0; node < numnodes; node++)
free_unused_memmap_node(node, mi); free_unused_memmap_node(node, mi);
} }
/*
* PTE table allocation cache.
*
* This is a move away from our custom 2K page allocator. We now use the
* slab cache to keep track of these objects.
*
* With this, it is questionable as to whether the PGT cache gains us
* anything. We may be better off dropping the PTE stuff from our PGT
* cache implementation.
*/
kmem_cache_t *pte_cache;
/*
* The constructor gets called for each object within the cache when the
* cache page is created. Note that if slab tries to misalign the blocks,
* we BUG() loudly.
*/
static void pte_cache_ctor(void *pte, kmem_cache_t *cache, unsigned long flags)
{
unsigned long block = (unsigned long)pte;
if (block & 2047)
BUG();
memzero(pte, 2 * PTRS_PER_PTE * sizeof(pte_t));
cpu_cache_clean_invalidate_range(block, block +
PTRS_PER_PTE * sizeof(pte_t), 0);
}
void __init pgtable_cache_init(void)
{
pte_cache = kmem_cache_create("pte-cache",
2 * PTRS_PER_PTE * sizeof(pte_t), 0, 0,
pte_cache_ctor, NULL);
if (!pte_cache)
BUG();
}
...@@ -499,7 +499,9 @@ ENTRY(cpu_arm1020_set_pmd) ...@@ -499,7 +499,9 @@ ENTRY(cpu_arm1020_set_pmd)
*/ */
.align 5 .align 5
ENTRY(cpu_arm1020_set_pte) ENTRY(cpu_arm1020_set_pte)
str r1, [r0], #-1024 @ linux version tst r0, #2048
streq r0, [r0, -r0] @ BUG_ON
str r1, [r0], #-2048 @ linux version
eor r1, r1, #LPTE_PRESENT | LPTE_YOUNG | LPTE_WRITE | LPTE_DIRTY eor r1, r1, #LPTE_PRESENT | LPTE_YOUNG | LPTE_WRITE | LPTE_DIRTY
...@@ -608,7 +610,7 @@ __arm1020_setup: ...@@ -608,7 +610,7 @@ __arm1020_setup:
*/ */
.type arm1020_processor_functions, #object .type arm1020_processor_functions, #object
arm1020_processor_functions: arm1020_processor_functions:
.word armv4t_early_abort .word v4t_early_abort
.word cpu_arm1020_check_bugs .word cpu_arm1020_check_bugs
.word cpu_arm1020_proc_init .word cpu_arm1020_proc_init
.word cpu_arm1020_proc_fin .word cpu_arm1020_proc_fin
...@@ -635,10 +637,6 @@ arm1020_processor_functions: ...@@ -635,10 +637,6 @@ arm1020_processor_functions:
.word cpu_arm1020_set_pmd .word cpu_arm1020_set_pmd
.word cpu_arm1020_set_pte .word cpu_arm1020_set_pte
/* misc */
.word armv4_clear_user_page
.word armv4_copy_user_page
.size arm1020_processor_functions, . - arm1020_processor_functions .size arm1020_processor_functions, . - arm1020_processor_functions
.type cpu_arm1020_info, #object .type cpu_arm1020_info, #object
...@@ -672,4 +670,5 @@ __arm1020_proc_info: ...@@ -672,4 +670,5 @@ __arm1020_proc_info:
.long cpu_arm1020_info .long cpu_arm1020_info
.long arm1020_processor_functions .long arm1020_processor_functions
.long v4wbi_tlb_fns .long v4wbi_tlb_fns
.long v4_user_fns
.size __arm1020_proc_info, . - __arm1020_proc_info .size __arm1020_proc_info, . - __arm1020_proc_info
...@@ -342,6 +342,7 @@ arm3_elf_name: .asciz "v2" ...@@ -342,6 +342,7 @@ arm3_elf_name: .asciz "v2"
.long cpu_arm2_info .long cpu_arm2_info
.long SYMBOL_NAME(arm2_processor_functions) .long SYMBOL_NAME(arm2_processor_functions)
.long 0 .long 0
.long 0
.long 0x41560250 .long 0x41560250
.long 0xfffffff0 .long 0xfffffff0
...@@ -353,6 +354,7 @@ arm3_elf_name: .asciz "v2" ...@@ -353,6 +354,7 @@ arm3_elf_name: .asciz "v2"
.long cpu_arm250_info .long cpu_arm250_info
.long SYMBOL_NAME(arm250_processor_functions) .long SYMBOL_NAME(arm250_processor_functions)
.long 0 .long 0
.long 0
.long 0x41560300 .long 0x41560300
.long 0xfffffff0 .long 0xfffffff0
...@@ -364,3 +366,5 @@ arm3_elf_name: .asciz "v2" ...@@ -364,3 +366,5 @@ arm3_elf_name: .asciz "v2"
.long cpu_arm3_info .long cpu_arm3_info
.long SYMBOL_NAME(arm3_processor_functions) .long SYMBOL_NAME(arm3_processor_functions)
.long 0 .long 0
.long 0
...@@ -274,7 +274,9 @@ ENTRY(cpu_arm7_set_pmd) ...@@ -274,7 +274,9 @@ ENTRY(cpu_arm7_set_pmd)
.align 5 .align 5
ENTRY(cpu_arm6_set_pte) ENTRY(cpu_arm6_set_pte)
ENTRY(cpu_arm7_set_pte) ENTRY(cpu_arm7_set_pte)
str r1, [r0], #-1024 @ linux version tst r0, #2048
streq r0, [r0, -r0] @ BUG_ON
str r1, [r0], #-2048 @ linux version
eor r1, r1, #LPTE_PRESENT | LPTE_YOUNG | LPTE_WRITE | LPTE_DIRTY eor r1, r1, #LPTE_PRESENT | LPTE_YOUNG | LPTE_WRITE | LPTE_DIRTY
...@@ -373,10 +375,6 @@ ENTRY(arm6_processor_functions) ...@@ -373,10 +375,6 @@ ENTRY(arm6_processor_functions)
.word cpu_arm6_set_pmd .word cpu_arm6_set_pmd
.word cpu_arm6_set_pte .word cpu_arm6_set_pte
/* other */
.word armv3_clear_user_page
.word armv3_copy_user_page
.size arm6_processor_functions, . - arm6_processor_functions .size arm6_processor_functions, . - arm6_processor_functions
/* /*
...@@ -412,10 +410,6 @@ ENTRY(arm7_processor_functions) ...@@ -412,10 +410,6 @@ ENTRY(arm7_processor_functions)
.word cpu_arm7_set_pmd .word cpu_arm7_set_pmd
.word cpu_arm7_set_pte .word cpu_arm7_set_pte
/* other */
.word armv3_clear_user_page
.word armv3_copy_user_page
.size arm7_processor_functions, . - arm7_processor_functions .size arm7_processor_functions, . - arm7_processor_functions
.type cpu_arm6_info, #object .type cpu_arm6_info, #object
...@@ -465,6 +459,7 @@ __arm6_proc_info: ...@@ -465,6 +459,7 @@ __arm6_proc_info:
.long cpu_arm6_info .long cpu_arm6_info
.long arm6_processor_functions .long arm6_processor_functions
.long v3_tlb_fns .long v3_tlb_fns
.long v3_user_fns
.size __arm6_proc_info, . - __arm6_proc_info .size __arm6_proc_info, . - __arm6_proc_info
.type __arm610_proc_info, #object .type __arm610_proc_info, #object
...@@ -479,6 +474,7 @@ __arm610_proc_info: ...@@ -479,6 +474,7 @@ __arm610_proc_info:
.long cpu_arm610_info .long cpu_arm610_info
.long arm6_processor_functions .long arm6_processor_functions
.long v3_tlb_fns .long v3_tlb_fns
.long v3_user_fns
.size __arm610_proc_info, . - __arm610_proc_info .size __arm610_proc_info, . - __arm610_proc_info
.type __arm7_proc_info, #object .type __arm7_proc_info, #object
...@@ -493,6 +489,7 @@ __arm7_proc_info: ...@@ -493,6 +489,7 @@ __arm7_proc_info:
.long cpu_arm7_info .long cpu_arm7_info
.long arm7_processor_functions .long arm7_processor_functions
.long v3_tlb_fns .long v3_tlb_fns
.long v3_user_fns
.size __arm7_proc_info, . - __arm7_proc_info .size __arm7_proc_info, . - __arm7_proc_info
.type __arm710_proc_info, #object .type __arm710_proc_info, #object
...@@ -507,4 +504,5 @@ __arm710_proc_info: ...@@ -507,4 +504,5 @@ __arm710_proc_info:
.long cpu_arm710_info .long cpu_arm710_info
.long arm7_processor_functions .long arm7_processor_functions
.long v3_tlb_fns .long v3_tlb_fns
.long v3_user_fns
.size __arm710_proc_info, . - __arm710_proc_info .size __arm710_proc_info, . - __arm710_proc_info
...@@ -136,7 +136,9 @@ ENTRY(cpu_arm720_set_pmd) ...@@ -136,7 +136,9 @@ ENTRY(cpu_arm720_set_pmd)
*/ */
.align 5 .align 5
ENTRY(cpu_arm720_set_pte) ENTRY(cpu_arm720_set_pte)
str r1, [r0], #-1024 @ linux version tst r0, #2048
streq r0, [r0, -r0] @ BUG_ON
str r1, [r0], #-2048 @ linux version
eor r1, r1, #LPTE_PRESENT | LPTE_YOUNG | LPTE_WRITE | LPTE_DIRTY eor r1, r1, #LPTE_PRESENT | LPTE_YOUNG | LPTE_WRITE | LPTE_DIRTY
...@@ -199,7 +201,7 @@ __arm720_setup: mov r0, #0 ...@@ -199,7 +201,7 @@ __arm720_setup: mov r0, #0
*/ */
.type arm720_processor_functions, #object .type arm720_processor_functions, #object
ENTRY(arm720_processor_functions) ENTRY(arm720_processor_functions)
.word armv4t_late_abort .word v4t_late_abort
.word cpu_arm720_check_bugs .word cpu_arm720_check_bugs
.word cpu_arm720_proc_init .word cpu_arm720_proc_init
.word cpu_arm720_proc_fin .word cpu_arm720_proc_fin
...@@ -226,10 +228,6 @@ ENTRY(arm720_processor_functions) ...@@ -226,10 +228,6 @@ ENTRY(arm720_processor_functions)
.word cpu_arm720_set_pmd .word cpu_arm720_set_pmd
.word cpu_arm720_set_pte .word cpu_arm720_set_pte
/* misc */
.word armv4_clear_user_page
.word armv4_copy_user_page
.size arm720_processor_functions, . - arm720_processor_functions .size arm720_processor_functions, . - arm720_processor_functions
.type cpu_arm720_info, #object .type cpu_arm720_info, #object
...@@ -265,4 +263,5 @@ __arm720_proc_info: ...@@ -265,4 +263,5 @@ __arm720_proc_info:
.long cpu_arm720_info @ info .long cpu_arm720_info @ info
.long arm720_processor_functions .long arm720_processor_functions
.long v4_tlb_fns .long v4_tlb_fns
.long v4_user_fns
.size __arm720_proc_info, . - __arm720_proc_info .size __arm720_proc_info, . - __arm720_proc_info
...@@ -420,7 +420,9 @@ ENTRY(cpu_arm920_set_pmd) ...@@ -420,7 +420,9 @@ ENTRY(cpu_arm920_set_pmd)
*/ */
.align 5 .align 5
ENTRY(cpu_arm920_set_pte) ENTRY(cpu_arm920_set_pte)
str r1, [r0], #-1024 @ linux version tst r0, #2048
streq r0, [r0, -r0] @ BUG_ON
str r1, [r0], #-2048 @ linux version
eor r1, r1, #LPTE_PRESENT | LPTE_YOUNG | LPTE_WRITE | LPTE_DIRTY eor r1, r1, #LPTE_PRESENT | LPTE_YOUNG | LPTE_WRITE | LPTE_DIRTY
...@@ -511,7 +513,7 @@ __arm920_setup: ...@@ -511,7 +513,7 @@ __arm920_setup:
*/ */
.type arm920_processor_functions, #object .type arm920_processor_functions, #object
arm920_processor_functions: arm920_processor_functions:
.word armv4t_early_abort .word v4t_early_abort
.word cpu_arm920_check_bugs .word cpu_arm920_check_bugs
.word cpu_arm920_proc_init .word cpu_arm920_proc_init
.word cpu_arm920_proc_fin .word cpu_arm920_proc_fin
...@@ -538,10 +540,6 @@ arm920_processor_functions: ...@@ -538,10 +540,6 @@ arm920_processor_functions:
.word cpu_arm920_set_pmd .word cpu_arm920_set_pmd
.word cpu_arm920_set_pte .word cpu_arm920_set_pte
/* misc */
.word armv4_clear_user_page
.word armv4_copy_user_page
.size arm920_processor_functions, . - arm920_processor_functions .size arm920_processor_functions, . - arm920_processor_functions
.type cpu_arm920_info, #object .type cpu_arm920_info, #object
...@@ -575,4 +573,5 @@ __arm920_proc_info: ...@@ -575,4 +573,5 @@ __arm920_proc_info:
.long cpu_arm920_info .long cpu_arm920_info
.long arm920_processor_functions .long arm920_processor_functions
.long v4wbi_tlb_fns .long v4wbi_tlb_fns
.long v4_user_fns
.size __arm920_proc_info, . - __arm920_proc_info .size __arm920_proc_info, . - __arm920_proc_info
...@@ -421,7 +421,9 @@ ENTRY(cpu_arm922_set_pmd) ...@@ -421,7 +421,9 @@ ENTRY(cpu_arm922_set_pmd)
*/ */
.align 5 .align 5
ENTRY(cpu_arm922_set_pte) ENTRY(cpu_arm922_set_pte)
str r1, [r0], #-1024 @ linux version tst r0, #2048
streq r0, [r0, -r0] @ BUG_ON
str r1, [r0], #-2048 @ linux version
eor r1, r1, #LPTE_PRESENT | LPTE_YOUNG | LPTE_WRITE | LPTE_DIRTY eor r1, r1, #LPTE_PRESENT | LPTE_YOUNG | LPTE_WRITE | LPTE_DIRTY
...@@ -512,7 +514,7 @@ __arm922_setup: ...@@ -512,7 +514,7 @@ __arm922_setup:
*/ */
.type arm922_processor_functions, #object .type arm922_processor_functions, #object
arm922_processor_functions: arm922_processor_functions:
.word armv4t_early_abort .word v4t_early_abort
.word cpu_arm922_check_bugs .word cpu_arm922_check_bugs
.word cpu_arm922_proc_init .word cpu_arm922_proc_init
.word cpu_arm922_proc_fin .word cpu_arm922_proc_fin
...@@ -539,10 +541,6 @@ arm922_processor_functions: ...@@ -539,10 +541,6 @@ arm922_processor_functions:
.word cpu_arm922_set_pmd .word cpu_arm922_set_pmd
.word cpu_arm922_set_pte .word cpu_arm922_set_pte
/* misc */
.word armv4_clear_user_page
.word armv4_copy_user_page
.size arm922_processor_functions, . - arm922_processor_functions .size arm922_processor_functions, . - arm922_processor_functions
.type cpu_arm922_info, #object .type cpu_arm922_info, #object
...@@ -576,4 +574,5 @@ __arm922_proc_info: ...@@ -576,4 +574,5 @@ __arm922_proc_info:
.long cpu_arm922_info .long cpu_arm922_info
.long arm922_processor_functions .long arm922_processor_functions
.long v4wbi_tlb_fns .long v4wbi_tlb_fns
.long v4_user_fns
.size __arm922_proc_info, . - __arm922_proc_info .size __arm922_proc_info, . - __arm922_proc_info
...@@ -443,7 +443,9 @@ ENTRY(cpu_arm926_set_pmd) ...@@ -443,7 +443,9 @@ ENTRY(cpu_arm926_set_pmd)
*/ */
.align 5 .align 5
ENTRY(cpu_arm926_set_pte) ENTRY(cpu_arm926_set_pte)
str r1, [r0], #-1024 @ linux version tst r0, #2048
streq r0, [r0, -r0] @ BUG_ON
str r1, [r0], #-2048 @ linux version
eor r1, r1, #LPTE_PRESENT | LPTE_YOUNG | LPTE_WRITE | LPTE_DIRTY eor r1, r1, #LPTE_PRESENT | LPTE_YOUNG | LPTE_WRITE | LPTE_DIRTY
...@@ -549,7 +551,7 @@ __arm926_setup: ...@@ -549,7 +551,7 @@ __arm926_setup:
*/ */
.type arm926_processor_functions, #object .type arm926_processor_functions, #object
arm926_processor_functions: arm926_processor_functions:
.word armv5ej_early_abort .word v5ej_early_abort
.word cpu_arm926_check_bugs .word cpu_arm926_check_bugs
.word cpu_arm926_proc_init .word cpu_arm926_proc_init
.word cpu_arm926_proc_fin .word cpu_arm926_proc_fin
...@@ -576,10 +578,6 @@ arm926_processor_functions: ...@@ -576,10 +578,6 @@ arm926_processor_functions:
.word cpu_arm926_set_pmd .word cpu_arm926_set_pmd
.word cpu_arm926_set_pte .word cpu_arm926_set_pte
/* misc */
.word armv4_clear_user_page
.word armv4_copy_user_page
.size arm926_processor_functions, . - arm926_processor_functions .size arm926_processor_functions, . - arm926_processor_functions
.type cpu_arm926_info, #object .type cpu_arm926_info, #object
...@@ -613,4 +611,5 @@ __arm926_proc_info: ...@@ -613,4 +611,5 @@ __arm926_proc_info:
.long cpu_arm926_info .long cpu_arm926_info
.long arm926_processor_functions .long arm926_processor_functions
.long v4wbi_tlb_fns .long v4wbi_tlb_fns
.long v4_user_fns
.size __arm926_proc_info, . - __arm926_proc_info .size __arm926_proc_info, . - __arm926_proc_info
/* /*
* linux/arch/arm/mm/proc-sa110.S * linux/arch/arm/mm/proc-sa110.S
* *
* Copyright (C) 1997-2000 Russell King * Copyright (C) 1997-2002 Russell King
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License version 2 as
...@@ -468,7 +468,9 @@ ENTRY(cpu_sa1100_set_pmd) ...@@ -468,7 +468,9 @@ ENTRY(cpu_sa1100_set_pmd)
.align 5 .align 5
ENTRY(cpu_sa110_set_pte) ENTRY(cpu_sa110_set_pte)
ENTRY(cpu_sa1100_set_pte) ENTRY(cpu_sa1100_set_pte)
str r1, [r0], #-1024 @ linux version tst r0, #2048
streq r0, [r0, -r0] @ BUG_ON
str r1, [r0], #-2048 @ linux version
eor r1, r1, #L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_WRITE | L_PTE_DIRTY eor r1, r1, #L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_WRITE | L_PTE_DIRTY
...@@ -538,7 +540,7 @@ __setup_common: ...@@ -538,7 +540,7 @@ __setup_common:
.type sa110_processor_functions, #object .type sa110_processor_functions, #object
ENTRY(sa110_processor_functions) ENTRY(sa110_processor_functions)
.word armv4_early_abort .word v4_early_abort
.word cpu_sa110_check_bugs .word cpu_sa110_check_bugs
.word cpu_sa110_proc_init .word cpu_sa110_proc_init
.word cpu_sa110_proc_fin .word cpu_sa110_proc_fin
...@@ -565,10 +567,6 @@ ENTRY(sa110_processor_functions) ...@@ -565,10 +567,6 @@ ENTRY(sa110_processor_functions)
.word cpu_sa110_set_pmd .word cpu_sa110_set_pmd
.word cpu_sa110_set_pte .word cpu_sa110_set_pte
/* misc */
.word armv4_clear_user_page
.word armv4_copy_user_page
.size sa110_processor_functions, . - sa110_processor_functions .size sa110_processor_functions, . - sa110_processor_functions
.type cpu_sa110_info, #object .type cpu_sa110_info, #object
...@@ -610,10 +608,6 @@ ENTRY(sa1100_processor_functions) ...@@ -610,10 +608,6 @@ ENTRY(sa1100_processor_functions)
.word cpu_sa1100_set_pmd .word cpu_sa1100_set_pmd
.word cpu_sa1100_set_pte .word cpu_sa1100_set_pte
/* misc */
.word armv4_mc_clear_user_page
.word armv4_mc_copy_user_page
.size sa1100_processor_functions, . - sa1100_processor_functions .size sa1100_processor_functions, . - sa1100_processor_functions
cpu_sa1100_info: cpu_sa1100_info:
...@@ -651,6 +645,7 @@ __sa110_proc_info: ...@@ -651,6 +645,7 @@ __sa110_proc_info:
.long cpu_sa110_info .long cpu_sa110_info
.long sa110_processor_functions .long sa110_processor_functions
.long v4wb_tlb_fns .long v4wb_tlb_fns
.long v4_user_fns
.size __sa110_proc_info, . - __sa110_proc_info .size __sa110_proc_info, . - __sa110_proc_info
.type __sa1100_proc_info,#object .type __sa1100_proc_info,#object
...@@ -665,6 +660,7 @@ __sa1100_proc_info: ...@@ -665,6 +660,7 @@ __sa1100_proc_info:
.long cpu_sa1100_info .long cpu_sa1100_info
.long sa1100_processor_functions .long sa1100_processor_functions
.long v4wb_tlb_fns .long v4wb_tlb_fns
.long v4_mc_user_fns
.size __sa1100_proc_info, . - __sa1100_proc_info .size __sa1100_proc_info, . - __sa1100_proc_info
.type __sa1110_proc_info,#object .type __sa1110_proc_info,#object
...@@ -679,4 +675,5 @@ __sa1110_proc_info: ...@@ -679,4 +675,5 @@ __sa1110_proc_info:
.long cpu_sa1110_info .long cpu_sa1110_info
.long sa1100_processor_functions .long sa1100_processor_functions
.long v4wb_tlb_fns .long v4wb_tlb_fns
.long v4_mc_user_fns
.size __sa1110_proc_info, . - __sa1110_proc_info .size __sa1110_proc_info, . - __sa1110_proc_info
...@@ -602,7 +602,9 @@ ENTRY(cpu_xscale_set_pmd) ...@@ -602,7 +602,9 @@ ENTRY(cpu_xscale_set_pmd)
*/ */
.align 5 .align 5
ENTRY(cpu_xscale_set_pte) ENTRY(cpu_xscale_set_pte)
str r1, [r0], #-1024 @ linux version tst r0, #2048
streq r0, [r0, -r0] @ BUG_ON
str r1, [r0], #-2048 @ linux version
bic r2, r1, #0xff0 bic r2, r1, #0xff0
orr r2, r2, #PTE_TYPE_EXT @ extended page orr r2, r2, #PTE_TYPE_EXT @ extended page
...@@ -695,7 +697,7 @@ __xscale_setup: ...@@ -695,7 +697,7 @@ __xscale_setup:
.type xscale_processor_functions, #object .type xscale_processor_functions, #object
ENTRY(xscale_processor_functions) ENTRY(xscale_processor_functions)
.word armv4t_early_abort .word v4t_early_abort
.word cpu_xscale_check_bugs .word cpu_xscale_check_bugs
.word cpu_xscale_proc_init .word cpu_xscale_proc_init
.word cpu_xscale_proc_fin .word cpu_xscale_proc_fin
...@@ -722,10 +724,6 @@ ENTRY(xscale_processor_functions) ...@@ -722,10 +724,6 @@ ENTRY(xscale_processor_functions)
.word cpu_xscale_set_pmd .word cpu_xscale_set_pmd
.word cpu_xscale_set_pte .word cpu_xscale_set_pte
/* misc */
.word armv5te_clear_user_page
.word armv5te_copy_user_page
.size xscale_processor_functions, . - xscale_processor_functions .size xscale_processor_functions, . - xscale_processor_functions
.type cpu_80200_info, #object .type cpu_80200_info, #object
...@@ -765,6 +763,7 @@ __80200_proc_info: ...@@ -765,6 +763,7 @@ __80200_proc_info:
.long cpu_80200_info .long cpu_80200_info
.long xscale_processor_functions .long xscale_processor_functions
.long v4wbi_tlb_fns .long v4wbi_tlb_fns
.long v5te_mc_user_fns
.size __80200_proc_info, . - __80200_proc_info .size __80200_proc_info, . - __80200_proc_info
.type __pxa250_proc_info,#object .type __pxa250_proc_info,#object
...@@ -779,6 +778,7 @@ __pxa250_proc_info: ...@@ -779,6 +778,7 @@ __pxa250_proc_info:
.long cpu_pxa250_info .long cpu_pxa250_info
.long xscale_processor_functions .long xscale_processor_functions
.long v4wbi_tlb_fns .long v4wbi_tlb_fns
.long v5te_mc_user_fns
.size __cotulla_proc_info, . - __cotulla_proc_info .size __cotulla_proc_info, . - __cotulla_proc_info
.size __pxa250_proc_info, . - __pxa250_proc_info .size __pxa250_proc_info, . - __pxa250_proc_info
...@@ -14,6 +14,9 @@ ...@@ -14,6 +14,9 @@
*/ */
#include <linux/init.h> #include <linux/init.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/time.h>
#include <linux/miscdevice.h>
#include <linux/rtc.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/i2c-algo-bit.h> #include <linux/i2c-algo-bit.h>
...@@ -21,15 +24,19 @@ ...@@ -21,15 +24,19 @@
#include <asm/io.h> #include <asm/io.h>
#include <asm/hardware/ioc.h> #include <asm/hardware/ioc.h>
#include <asm/system.h> #include <asm/system.h>
#include <asm/uaccess.h>
#include "pcf8583.h" #include "pcf8583.h"
extern unsigned long
mktime(unsigned int year, unsigned int mon, unsigned int day,
unsigned int hour, unsigned int min, unsigned int sec);
extern int (*set_rtc)(void); extern int (*set_rtc)(void);
static struct i2c_client *rtc_client; static struct i2c_client *rtc_client;
static const unsigned char days_in_mon[] =
{ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
static unsigned int rtc_epoch = 1900;
#define CMOS_CHECKSUM (63)
#define CMOS_YEAR (64 + 128)
static inline int rtc_command(int cmd, void *data) static inline int rtc_command(int cmd, void *data)
{ {
...@@ -44,12 +51,10 @@ static inline int rtc_command(int cmd, void *data) ...@@ -44,12 +51,10 @@ static inline int rtc_command(int cmd, void *data)
/* /*
* Read the current RTC time and date, and update xtime. * Read the current RTC time and date, and update xtime.
*/ */
static void get_rtc_time(void) static void get_rtc_time(struct rtc_tm *rtctm, unsigned int *year)
{ {
unsigned char ctrl; unsigned char ctrl, yr[2];
unsigned char year; struct mem rtcmem = { CMOS_YEAR, sizeof(yr), yr };
struct rtc_tm rtctm;
struct mem rtcmem = { 0xc0, 1, &year };
/* /*
* Ensure that the RTC is running. * Ensure that the RTC is running.
...@@ -73,22 +78,53 @@ static void get_rtc_time(void) ...@@ -73,22 +78,53 @@ static void get_rtc_time(void)
if (rtc_command(MEM_READ, &rtcmem)) if (rtc_command(MEM_READ, &rtcmem))
return; return;
if (rtc_command(RTC_GETDATETIME, &rtctm)) if (rtc_command(RTC_GETDATETIME, rtctm))
return; return;
if (year < 70) *year = yr[1] * 100 + yr[0];
year += 100; }
static int set_rtc_time(struct rtc_tm *rtctm, unsigned int year)
{
unsigned char yr[2], leap, chk;
struct mem cmos_year = { CMOS_YEAR, sizeof(yr), yr };
struct mem cmos_check = { CMOS_CHECKSUM, 1, &chk };
int ret;
leap = (!(year % 4) && (year % 100)) || !(year % 400);
if (rtctm->mon > 12 || rtctm->mday == 0)
return -EINVAL;
if (rtctm->mday > (days_in_mon[rtctm->mon] + (rtctm->mon == 2 && leap)))
return -EINVAL;
if (rtctm->hours >= 24 || rtctm->mins >= 60 || rtctm->secs >= 60)
return -EINVAL;
xtime.tv_usec = rtctm.cs * 10000; ret = rtc_command(RTC_SETDATETIME, rtctm);
xtime.tv_sec = mktime(1900 + year, rtctm.mon, rtctm.mday, if (ret == 0) {
rtctm.hours, rtctm.mins, rtctm.secs); rtc_command(MEM_READ, &cmos_check);
rtc_command(MEM_READ, &cmos_year);
chk -= yr[1] + yr[0];
yr[1] = year / 100;
yr[0] = year % 100;
chk += yr[1] + yr[0];
rtc_command(MEM_WRITE, &cmos_year);
rtc_command(MEM_WRITE, &cmos_check);
}
return ret;
} }
/* /*
* Set the RTC time only. Note that * Set the RTC time only. Note that
* we do not touch the date. * we do not touch the date.
*/ */
static int set_rtc_time(void) static int k_set_rtc_time(void)
{ {
struct rtc_tm new_rtctm, old_rtctm; struct rtc_tm new_rtctm, old_rtctm;
unsigned long nowtime = xtime.tv_sec; unsigned long nowtime = xtime.tv_sec;
...@@ -110,13 +146,70 @@ static int set_rtc_time(void) ...@@ -110,13 +146,70 @@ static int set_rtc_time(void)
* [ rtc: 1/1/2000 23:58:00, real 2/1/2000 00:01:00, * [ rtc: 1/1/2000 23:58:00, real 2/1/2000 00:01:00,
* rtc gets set to 1/1/2000 00:01:00 ] * rtc gets set to 1/1/2000 00:01:00 ]
*/ */
if ((old_rtctm.hours == 23 && old_rtctm.mins == 59) || if ((old_rtctm.hours == 23 && old_rtctm.mins == 59) ||
(new_rtctm.hours == 23 && new_rtctm.mins == 59)) (new_rtctm.hours == 23 && new_rtctm.mins == 59))
return 1; return 1;
return rtc_command(RTC_SETTIME, &new_rtctm); return rtc_command(RTC_SETTIME, &new_rtctm);
} }
static int rtc_ioctl(struct inode *inode, struct file *file,
unsigned int cmd, unsigned long arg)
{
unsigned int year;
struct rtc_time rtctm;
struct rtc_tm rtc_raw;
switch (cmd) {
case RTC_ALM_READ:
case RTC_ALM_SET:
break;
case RTC_RD_TIME:
get_rtc_time(&rtc_raw, &year);
rtctm.tm_sec = rtc_raw.secs;
rtctm.tm_min = rtc_raw.mins;
rtctm.tm_hour = rtc_raw.hours;
rtctm.tm_mday = rtc_raw.mday;
rtctm.tm_mon = rtc_raw.mon - 1; /* month starts at 0 */
rtctm.tm_year = year - 1900; /* starts at 1900 */
return copy_to_user((void *)arg, &rtctm, sizeof(rtctm))
? -EFAULT : 0;
case RTC_SET_TIME:
if (!capable(CAP_SYS_TIME))
return -EACCES;
if (copy_from_user(&rtctm, (void *)arg, sizeof(rtctm)))
return -EFAULT;
rtc_raw.secs = rtctm.tm_sec;
rtc_raw.mins = rtctm.tm_min;
rtc_raw.hours = rtctm.tm_hour;
rtc_raw.mday = rtctm.tm_mday;
rtc_raw.mon = rtctm.tm_mon + 1;
rtc_raw.year_off = 2;
year = rtctm.tm_year + 1900;
return set_rtc_time(&rtc_raw, year);
break;
case RTC_EPOCH_READ:
return put_user(rtc_epoch, (unsigned long *)arg);
}
return -EINVAL;
}
static struct file_operations rtc_fops = {
ioctl: rtc_ioctl,
};
static struct miscdevice rtc_dev = {
minor: RTC_MINOR,
name: "rtc",
fops: &rtc_fops,
};
/* IOC / IOMD i2c driver */
#define FORCE_ONES 0xdc #define FORCE_ONES 0xdc
#define SCL 0x02 #define SCL 0x02
...@@ -184,9 +277,16 @@ static int ioc_client_reg(struct i2c_client *client) ...@@ -184,9 +277,16 @@ static int ioc_client_reg(struct i2c_client *client)
{ {
if (client->id == I2C_DRIVERID_PCF8583 && if (client->id == I2C_DRIVERID_PCF8583 &&
client->addr == 0x50) { client->addr == 0x50) {
struct rtc_tm rtctm;
unsigned int year;
rtc_client = client; rtc_client = client;
get_rtc_time(); get_rtc_time(&rtctm, &year);
set_rtc = set_rtc_time;
xtime.tv_usec = rtctm.cs * 10000;
xtime.tv_sec = mktime(year, rtctm.mon, rtctm.mday,
rtctm.hours, rtctm.mins, rtctm.secs);
set_rtc = k_set_rtc_time;
} }
return 0; return 0;
...@@ -212,9 +312,16 @@ static struct i2c_adapter ioc_ops = { ...@@ -212,9 +312,16 @@ static struct i2c_adapter ioc_ops = {
static int __init i2c_ioc_init(void) static int __init i2c_ioc_init(void)
{ {
int ret;
force_ones = FORCE_ONES | SCL | SDA; force_ones = FORCE_ONES | SCL | SDA;
return i2c_bit_add_bus(&ioc_ops); ret = i2c_bit_add_bus(&ioc_ops);
if (ret >= 0)
misc_register(&rtc_dev);
return ret;
} }
__initcall(i2c_ioc_init); __initcall(i2c_ioc_init);
...@@ -20,7 +20,4 @@ ...@@ -20,7 +20,4 @@
#define MY_PORT_ADDRESS(port,cardaddr) \ #define MY_PORT_ADDRESS(port,cardaddr) \
((cardaddr) + 0x200 - (port) * 0x100) ((cardaddr) + 0x200 - (port) * 0x100)
#define INIT serial_card_atomwide_init
#define EXIT serial_card_atomwide_exit
#include "serial-card.c" #include "serial-card.c"
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include <linux/types.h> #include <linux/types.h>
#include <linux/serial.h> #include <linux/serial.h>
#include <linux/errno.h> #include <linux/errno.h>
#include <linux/ioport.h>
#include <linux/init.h> #include <linux/init.h>
#include <asm/ecard.h> #include <asm/ecard.h>
...@@ -38,95 +39,84 @@ ...@@ -38,95 +39,84 @@
#define NUM_SERIALS MY_NUMPORTS * MAX_ECARDS #define NUM_SERIALS MY_NUMPORTS * MAX_ECARDS
#endif #endif
#ifdef MODULE static int serial_ports[NUM_SERIALS];
static int __serial_ports[NUM_SERIALS]; static int serial_pcount;
static int __serial_pcount; static int serial_addr[NUM_SERIALS];
static int __serial_addr[NUM_SERIALS];
static struct expansion_card *expcard[MAX_ECARDS]; static struct expansion_card *expcard[MAX_ECARDS];
#define ADD_ECARD(ec,card) expcard[(card)] = (ec)
#define ADD_PORT(port,addr) \
do { \
__serial_ports[__serial_pcount] = (port); \
__serial_addr[__serial_pcount] = (addr); \
__serial_pcount += 1; \
} while (0)
#else
#define ADD_ECARD(ec,card)
#define ADD_PORT(port,addr)
#endif
static const card_ids serial_cids[] = { MY_CARD_LIST, { 0xffff, 0xffff } }; static const card_ids serial_cids[] = { MY_CARD_LIST, { 0xffff, 0xffff } };
static inline int serial_register_onedev (unsigned long port, int irq) static inline int serial_register_onedev (unsigned long port, int irq)
{ {
struct serial_struct req; struct serial_struct req;
memset(&req, 0, sizeof(req)); memset(&req, 0, sizeof(req));
req.baud_base = MY_BAUD_BASE; req.baud_base = MY_BAUD_BASE;
req.irq = irq; req.irq = irq;
req.port = port; req.port = port;
req.flags = 0; req.flags = 0;
return register_serial(&req); return register_serial(&req);
} }
static int __init INIT (void) static int __init serial_card_init(void)
{ {
int card = 0; int card = 0;
ecard_startfind (); ecard_startfind ();
do { do {
struct expansion_card *ec; struct expansion_card *ec;
unsigned long cardaddr; unsigned long cardaddr;
int port; int port;
ec = ecard_find (0, serial_cids); ec = ecard_find (0, serial_cids);
if (!ec) if (!ec)
break; break;
cardaddr = MY_BASE_ADDRESS(ec); cardaddr = MY_BASE_ADDRESS(ec);
for (port = 0; port < MY_NUMPORTS; port ++) { for (port = 0; port < MY_NUMPORTS; port ++) {
unsigned long address; unsigned long address;
int line; int line;
address = MY_PORT_ADDRESS(port, cardaddr); address = MY_PORT_ADDRESS(port, cardaddr);
line = serial_register_onedev (address, ec->irq); line = serial_register_onedev (address, ec->irq);
if (line < 0) if (line < 0)
break; break;
ADD_PORT(line, address); serial_ports[serial_pcount] = line;
} serial_addr[serial_pcount] = address;
serial_pcount += 1;
if (port) { }
ecard_claim (ec);
ADD_ECARD(ec, card); if (port) {
} else ecard_claim (ec);
break; expcard[card] = ec;
} while (++card < MAX_ECARDS); } else
return card ? 0 : -ENODEV; break;
} while (++card < MAX_ECARDS);
return card ? 0 : -ENODEV;
} }
static void __exit EXIT (void) static void __exit serial_card_exit(void)
{ {
#ifdef MODULE int i;
int i;
for (i = 0; i < __serial_pcount; i++) { for (i = 0; i < serial_pcount; i++) {
unregister_serial(__serial_ports[i]); unregister_serial(serial_ports[i]);
release_region(__serial_addr[i], 8); release_region(serial_addr[i], 8);
} }
for (i = 0; i < MAX_ECARDS; i++) for (i = 0; i < MAX_ECARDS; i++)
if (expcard[i]) if (expcard[i])
ecard_release (expcard[i]); ecard_release (expcard[i]);
#endif
} }
EXPORT_NO_SYMBOLS; EXPORT_NO_SYMBOLS;
MODULE_AUTHOR("Russell King");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
module_init(INIT); module_init(serial_card_init);
module_exit(EXIT); module_exit(serial_card_exit);
...@@ -18,7 +18,4 @@ ...@@ -18,7 +18,4 @@
#define MY_PORT_ADDRESS(port,cardaddress) \ #define MY_PORT_ADDRESS(port,cardaddress) \
((cardaddress) + (port) * 8) ((cardaddress) + (port) * 8)
#define INIT serial_card_dualsp_init
#define EXIT serial_card_dualsp_exit
#include "serial-card.c" #include "serial-card.c"
...@@ -718,7 +718,7 @@ dropping:{ ...@@ -718,7 +718,7 @@ dropping:{
/* /*
* Don't print this message too many times... * Don't print this message too many times...
*/ */
if (jiffies - last_warned > 30 * HZ) { if (time_after(jiffies, last_warned + 10 * HZ)) {
last_warned = jiffies; last_warned = jiffies;
printk("%s: memory squeeze, dropping packet.\n", dev->name); printk("%s: memory squeeze, dropping packet.\n", dev->name);
} }
......
/* /*
* linux/drivers/acorn/net/etherh.c * linux/drivers/acorn/net/etherh.c
* *
* Copyright (C) 2000 Russell King * Copyright (C) 2000-2002 Russell King
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License version 2 as
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
* 12-10-1999 CK/TEW EtherM driver first release * 12-10-1999 CK/TEW EtherM driver first release
* 21-12-2000 TTC EtherH/EtherM integration * 21-12-2000 TTC EtherH/EtherM integration
* 25-12-2000 RMK 1.08 Clean integration of EtherM into this driver. * 25-12-2000 RMK 1.08 Clean integration of EtherM into this driver.
* 03-01-2002 RMK 1.09 Always enable IRQs if we're in the nic slot.
*/ */
#include <linux/module.h> #include <linux/module.h>
...@@ -64,13 +65,18 @@ static const card_ids __init etherh_cids[] = { ...@@ -64,13 +65,18 @@ static const card_ids __init etherh_cids[] = {
{ 0xffff, 0xffff } { 0xffff, 0xffff }
}; };
struct etherh_priv {
unsigned int id;
unsigned int ctrl_port;
unsigned int ctrl;
};
MODULE_AUTHOR("Russell King"); MODULE_AUTHOR("Russell King");
MODULE_DESCRIPTION("EtherH/EtherM driver"); MODULE_DESCRIPTION("EtherH/EtherM driver");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
static char version[] __initdata = static char version[] __initdata =
"EtherH/EtherM Driver (c) 2000 Russell King v1.08\n"; "EtherH/EtherM Driver (c) 2002 Russell King v1.09\n";
#define ETHERH500_DATAPORT 0x200 /* MEMC */ #define ETHERH500_DATAPORT 0x200 /* MEMC */
#define ETHERH500_NS8390 0x000 /* MEMC */ #define ETHERH500_NS8390 0x000 /* MEMC */
...@@ -97,18 +103,61 @@ static char version[] __initdata = ...@@ -97,18 +103,61 @@ static char version[] __initdata =
#define ETHERM_TX_START_PAGE 64 #define ETHERM_TX_START_PAGE 64
#define ETHERM_STOP_PAGE 127 #define ETHERM_STOP_PAGE 127
/* --------------------------------------------------------------------------- */ /* ------------------------------------------------------------------------ */
static inline void etherh_set_ctrl(struct etherh_priv *eh, unsigned int mask)
{
eh->ctrl |= mask;
outb(eh->ctrl, eh->ctrl_port);
}
static inline void etherh_clr_ctrl(struct etherh_priv *eh, unsigned int mask)
{
eh->ctrl &= ~mask;
outb(eh->ctrl, eh->ctrl_port);
}
static inline unsigned int etherh_get_stat(struct etherh_priv *eh)
{
return inb(eh->ctrl_port);
}
static void etherh_irq_enable(ecard_t *ec, int irqnr)
{
struct etherh_priv *eh = ec->irq_data;
etherh_set_ctrl(eh, ETHERH_CP_IE);
}
static void etherh_irq_disable(ecard_t *ec, int irqnr)
{
struct etherh_priv *eh = ec->irq_data;
etherh_clr_ctrl(eh, ETHERH_CP_IE);
}
static expansioncard_ops_t etherh_ops = {
irqenable: etherh_irq_enable,
irqdisable: etherh_irq_disable,
};
static void static void
etherh_setif(struct net_device *dev) etherh_setif(struct net_device *dev)
{ {
struct ei_device *ei_local = (struct ei_device *) dev->priv; struct ei_device *ei_local = (struct ei_device *) dev->priv;
struct etherh_priv *eh = (struct etherh_priv *)dev->rmem_start;
unsigned long addr, flags; unsigned long addr, flags;
save_flags_cli(flags); local_irq_save(flags);
/* set the interface type */ /* set the interface type */
switch (dev->mem_end) { switch (eh->id) {
case PROD_I3_ETHERLAN600: case PROD_I3_ETHERLAN600:
case PROD_I3_ETHERLAN600A: case PROD_I3_ETHERLAN600A:
addr = dev->base_addr + EN0_RCNTHI; addr = dev->base_addr + EN0_RCNTHI;
...@@ -124,14 +173,13 @@ etherh_setif(struct net_device *dev) ...@@ -124,14 +173,13 @@ etherh_setif(struct net_device *dev)
break; break;
case PROD_I3_ETHERLAN500: case PROD_I3_ETHERLAN500:
addr = dev->rmem_start;
switch (dev->if_port) { switch (dev->if_port) {
case IF_PORT_10BASE2: case IF_PORT_10BASE2:
outb(inb(addr) & ~ETHERH_CP_IF, addr); etherh_clr_ctrl(eh, ETHERH_CP_IF);
break; break;
case IF_PORT_10BASET: case IF_PORT_10BASET:
outb(inb(addr) | ETHERH_CP_IF, addr); etherh_set_ctrl(eh, ETHERH_CP_IF);
break; break;
} }
break; break;
...@@ -140,16 +188,17 @@ etherh_setif(struct net_device *dev) ...@@ -140,16 +188,17 @@ etherh_setif(struct net_device *dev)
break; break;
} }
restore_flags(flags); local_irq_restore(flags);
} }
static int static int
etherh_getifstat(struct net_device *dev) etherh_getifstat(struct net_device *dev)
{ {
struct ei_device *ei_local = (struct ei_device *) dev->priv; struct ei_device *ei_local = (struct ei_device *) dev->priv;
struct etherh_priv *eh = (struct etherh_priv *)dev->rmem_start;
int stat = 0; int stat = 0;
switch (dev->mem_end) { switch (eh->id) {
case PROD_I3_ETHERLAN600: case PROD_I3_ETHERLAN600:
case PROD_I3_ETHERLAN600A: case PROD_I3_ETHERLAN600A:
switch (dev->if_port) { switch (dev->if_port) {
...@@ -168,7 +217,7 @@ etherh_getifstat(struct net_device *dev) ...@@ -168,7 +217,7 @@ etherh_getifstat(struct net_device *dev)
stat = 1; stat = 1;
break; break;
case IF_PORT_10BASET: case IF_PORT_10BASET:
stat = inb(dev->rmem_start) & ETHERH_CP_HEARTBEAT; stat = etherh_get_stat(eh) & ETHERH_CP_HEARTBEAT;
break; break;
} }
break; break;
...@@ -251,7 +300,13 @@ etherh_block_output (struct net_device *dev, int count, const unsigned char *buf ...@@ -251,7 +300,13 @@ etherh_block_output (struct net_device *dev, int count, const unsigned char *buf
return; return;
} }
ei_local->dmaing |= 1; /*
* Make sure we have a round number of bytes if we're in word mode.
*/
if (count & 1 && ei_local->word16)
count++;
ei_local->dmaing = 1;
addr = dev->base_addr; addr = dev->base_addr;
dma_addr = dev->mem_start; dma_addr = dev->mem_start;
...@@ -291,7 +346,7 @@ etherh_block_output (struct net_device *dev, int count, const unsigned char *buf ...@@ -291,7 +346,7 @@ etherh_block_output (struct net_device *dev, int count, const unsigned char *buf
} }
outb (ENISR_RDC, addr + EN0_ISR); outb (ENISR_RDC, addr + EN0_ISR);
ei_local->dmaing &= ~1; ei_local->dmaing = 0;
} }
/* /*
...@@ -311,7 +366,7 @@ etherh_block_input (struct net_device *dev, int count, struct sk_buff *skb, int ...@@ -311,7 +366,7 @@ etherh_block_input (struct net_device *dev, int count, struct sk_buff *skb, int
return; return;
} }
ei_local->dmaing |= 1; ei_local->dmaing = 1;
addr = dev->base_addr; addr = dev->base_addr;
dma_addr = dev->mem_start; dma_addr = dev->mem_start;
...@@ -332,7 +387,7 @@ etherh_block_input (struct net_device *dev, int count, struct sk_buff *skb, int ...@@ -332,7 +387,7 @@ etherh_block_input (struct net_device *dev, int count, struct sk_buff *skb, int
insb (dma_addr, buf, count); insb (dma_addr, buf, count);
outb (ENISR_RDC, addr + EN0_ISR); outb (ENISR_RDC, addr + EN0_ISR);
ei_local->dmaing &= ~1; ei_local->dmaing = 0;
} }
/* /*
...@@ -351,7 +406,7 @@ etherh_get_header (struct net_device *dev, struct e8390_pkt_hdr *hdr, int ring_p ...@@ -351,7 +406,7 @@ etherh_get_header (struct net_device *dev, struct e8390_pkt_hdr *hdr, int ring_p
return; return;
} }
ei_local->dmaing |= 1; ei_local->dmaing = 1;
addr = dev->base_addr; addr = dev->base_addr;
dma_addr = dev->mem_start; dma_addr = dev->mem_start;
...@@ -369,7 +424,7 @@ etherh_get_header (struct net_device *dev, struct e8390_pkt_hdr *hdr, int ring_p ...@@ -369,7 +424,7 @@ etherh_get_header (struct net_device *dev, struct e8390_pkt_hdr *hdr, int ring_p
insb (dma_addr, hdr, sizeof (*hdr)); insb (dma_addr, hdr, sizeof (*hdr));
outb (ENISR_RDC, addr + EN0_ISR); outb (ENISR_RDC, addr + EN0_ISR);
ei_local->dmaing &= ~1; ei_local->dmaing = 0;
} }
/* /*
...@@ -427,23 +482,6 @@ etherh_close(struct net_device *dev) ...@@ -427,23 +482,6 @@ etherh_close(struct net_device *dev)
return 0; return 0;
} }
static void etherh_irq_enable(ecard_t *ec, int irqnr)
{
unsigned int ctrl_addr = (unsigned int)ec->irq_data;
outb(inb(ctrl_addr) | ETHERH_CP_IE, ctrl_addr);
}
static void etherh_irq_disable(ecard_t *ec, int irqnr)
{
unsigned int ctrl_addr = (unsigned int)ec->irq_data;
outb(inb(ctrl_addr) & ~ETHERH_CP_IE, ctrl_addr);
}
static expansioncard_ops_t etherh_ops = {
irqenable: etherh_irq_enable,
irqdisable: etherh_irq_disable,
};
/* /*
* Initialisation * Initialisation
*/ */
...@@ -506,6 +544,7 @@ static struct net_device * __init etherh_init_one(struct expansion_card *ec) ...@@ -506,6 +544,7 @@ static struct net_device * __init etherh_init_one(struct expansion_card *ec)
{ {
struct ei_device *ei_local; struct ei_device *ei_local;
struct net_device *dev; struct net_device *dev;
struct etherh_priv *eh;
const char *dev_type; const char *dev_type;
int i, size; int i, size;
...@@ -517,6 +556,10 @@ static struct net_device * __init etherh_init_one(struct expansion_card *ec) ...@@ -517,6 +556,10 @@ static struct net_device * __init etherh_init_one(struct expansion_card *ec)
if (!dev) if (!dev)
goto out; goto out;
eh = kmalloc(sizeof(struct etherh_priv), GFP_KERNEL);
if (!eh)
goto out_nopriv;
SET_MODULE_OWNER(dev); SET_MODULE_OWNER(dev);
dev->open = etherh_open; dev->open = etherh_open;
...@@ -524,8 +567,15 @@ static struct net_device * __init etherh_init_one(struct expansion_card *ec) ...@@ -524,8 +567,15 @@ static struct net_device * __init etherh_init_one(struct expansion_card *ec)
dev->set_config = etherh_set_config; dev->set_config = etherh_set_config;
dev->irq = ec->irq; dev->irq = ec->irq;
dev->base_addr = ecard_address(ec, ECARD_MEMC, 0); dev->base_addr = ecard_address(ec, ECARD_MEMC, 0);
dev->mem_end = ec->cid.product; dev->rmem_start = (unsigned long)eh;
/*
* IRQ and control port handling
*/
ec->ops = &etherh_ops; ec->ops = &etherh_ops;
ec->irq_data = eh;
eh->ctrl = 0;
eh->id = ec->cid.product;
switch (ec->cid.product) { switch (ec->cid.product) {
case PROD_ANT_ETHERM: case PROD_ANT_ETHERM:
...@@ -533,7 +583,7 @@ static struct net_device * __init etherh_init_one(struct expansion_card *ec) ...@@ -533,7 +583,7 @@ static struct net_device * __init etherh_init_one(struct expansion_card *ec)
goto free; goto free;
dev->base_addr += ETHERM_NS8390; dev->base_addr += ETHERM_NS8390;
dev->mem_start = dev->base_addr + ETHERM_DATAPORT; dev->mem_start = dev->base_addr + ETHERM_DATAPORT;
ec->irq_data = (void *)(dev->base_addr + ETHERM_CTRLPORT); eh->ctrl_port = dev->base_addr + ETHERM_CTRLPORT;
break; break;
case PROD_I3_ETHERLAN500: case PROD_I3_ETHERLAN500:
...@@ -541,8 +591,7 @@ static struct net_device * __init etherh_init_one(struct expansion_card *ec) ...@@ -541,8 +591,7 @@ static struct net_device * __init etherh_init_one(struct expansion_card *ec)
goto free; goto free;
dev->base_addr += ETHERH500_NS8390; dev->base_addr += ETHERH500_NS8390;
dev->mem_start = dev->base_addr + ETHERH500_DATAPORT; dev->mem_start = dev->base_addr + ETHERH500_DATAPORT;
dev->rmem_start = (unsigned long) eh->ctrl_port = ecard_address (ec, ECARD_IOC, ECARD_FAST)
ec->irq_data = (void *)ecard_address (ec, ECARD_IOC, ECARD_FAST)
+ ETHERH500_CTRLPORT; + ETHERH500_CTRLPORT;
break; break;
...@@ -551,8 +600,8 @@ static struct net_device * __init etherh_init_one(struct expansion_card *ec) ...@@ -551,8 +600,8 @@ static struct net_device * __init etherh_init_one(struct expansion_card *ec)
if (etherh_addr(dev->dev_addr, ec)) if (etherh_addr(dev->dev_addr, ec))
goto free; goto free;
dev->base_addr += ETHERH600_NS8390; dev->base_addr += ETHERH600_NS8390;
dev->mem_start = dev->base_addr + ETHERH600_DATAPORT; dev->mem_start = dev->base_addr + ETHERH600_DATAPORT;
ec->irq_data = (void *)(dev->base_addr + ETHERH600_CTRLPORT); eh->ctrl_port = dev->base_addr + ETHERH600_CTRLPORT;
break; break;
default: default:
...@@ -571,6 +620,12 @@ static struct net_device * __init etherh_init_one(struct expansion_card *ec) ...@@ -571,6 +620,12 @@ static struct net_device * __init etherh_init_one(struct expansion_card *ec)
if (ethdev_init(dev)) if (ethdev_init(dev))
goto release; goto release;
/*
* If we're in the NIC slot, make sure the IRQ is enabled
*/
if (dev->irq == 11)
etherh_set_ctrl(eh, ETHERH_CP_IE);
/* /*
* Unfortunately, ethdev_init eventually calls * Unfortunately, ethdev_init eventually calls
* ether_setup, which re-writes dev->flags. * ether_setup, which re-writes dev->flags.
...@@ -636,6 +691,8 @@ static struct net_device * __init etherh_init_one(struct expansion_card *ec) ...@@ -636,6 +691,8 @@ static struct net_device * __init etherh_init_one(struct expansion_card *ec)
release: release:
release_region(dev->base_addr, 16); release_region(dev->base_addr, 16);
free: free:
kfree(eh);
out_nopriv:
unregister_netdev(dev); unregister_netdev(dev);
kfree(dev); kfree(dev);
out: out:
...@@ -696,6 +753,7 @@ static void __exit etherh_exit(void) ...@@ -696,6 +753,7 @@ static void __exit etherh_exit(void)
} }
if (e_card[i]) { if (e_card[i]) {
e_card[i]->ops = NULL; e_card[i]->ops = NULL;
kfree(e_card[i]->irq_data);
ecard_release(e_card[i]); ecard_release(e_card[i]);
e_card[i] = NULL; e_card[i] = NULL;
} }
......
...@@ -2583,10 +2583,10 @@ int acornscsi_queuecmd(Scsi_Cmnd *SCpnt, void (*done)(Scsi_Cmnd *)) ...@@ -2583,10 +2583,10 @@ int acornscsi_queuecmd(Scsi_Cmnd *SCpnt, void (*done)(Scsi_Cmnd *))
done(SCpnt); done(SCpnt);
return 0; return 0;
} }
save_flags_cli(flags); local_irq_save(flags);
if (host->scsi.phase == PHASE_IDLE) if (host->scsi.phase == PHASE_IDLE)
acornscsi_kick(host); acornscsi_kick(host);
restore_flags(flags); local_irq_restore(flags);
} }
return 0; return 0;
} }
......
...@@ -2137,7 +2137,7 @@ int fas216_command(Scsi_Cmnd *SCpnt) ...@@ -2137,7 +2137,7 @@ int fas216_command(Scsi_Cmnd *SCpnt)
* However, we must re-enable interrupts, or else we'll be * However, we must re-enable interrupts, or else we'll be
* waiting forever. * waiting forever.
*/ */
spin_unlock_irq(&io_request_lock); spin_unlock_irq(info->host->host_lock);
while (!info->internal_done) { while (!info->internal_done) {
/* /*
...@@ -2149,13 +2149,13 @@ int fas216_command(Scsi_Cmnd *SCpnt) ...@@ -2149,13 +2149,13 @@ int fas216_command(Scsi_Cmnd *SCpnt)
* to be some time (eg, disconnected). * to be some time (eg, disconnected).
*/ */
if (inb(REG_STAT(info)) & STAT_INT) { if (inb(REG_STAT(info)) & STAT_INT) {
spin_lock_irq(&io_request_lock); spin_lock_irq(info->host->host_lock);
fas216_intr(info->host); fas216_intr(info->host);
spin_unlock_irq(&io_request_lock); spin_unlock_irq(info->host->host_lock);
} }
} }
spin_lock_irq(&io_request_lock); spin_lock_irq(info->host->host_lock);
return SCpnt->result; return SCpnt->result;
} }
...@@ -2459,13 +2459,13 @@ int fas216_eh_host_reset(Scsi_Cmnd *SCpnt) ...@@ -2459,13 +2459,13 @@ int fas216_eh_host_reset(Scsi_Cmnd *SCpnt)
/* /*
* Ugly ugly ugly! * Ugly ugly ugly!
* We need to release the io_request_lock and enable * We need to release the host_lock and enable
* IRQs if we sleep, but we must relock and disable * IRQs if we sleep, but we must relock and disable
* IRQs after the sleep. * IRQs after the sleep.
*/ */
spin_unlock_irq(&io_request_lock); spin_unlock_irq(info->host->host_lock);
scsi_sleep(25*HZ/100); scsi_sleep(25*HZ/100);
spin_lock_irq(&io_request_lock); spin_lock_irq(info->host->host_lock);
/* /*
* Release the SCSI reset. * Release the SCSI reset.
...@@ -2628,9 +2628,9 @@ int fas216_init(struct Scsi_Host *instance) ...@@ -2628,9 +2628,9 @@ int fas216_init(struct Scsi_Host *instance)
/* /*
* scsi standard says wait 250ms * scsi standard says wait 250ms
*/ */
spin_unlock_irq(&io_request_lock); spin_unlock_irq(info->host->host_lock);
scsi_sleep(25*HZ/100); scsi_sleep(25*HZ/100);
spin_lock_irq(&io_request_lock); spin_lock_irq(info->host->host_lock);
outb(info->scsi.cfg[0], REG_CNTL1(info)); outb(info->scsi.cfg[0], REG_CNTL1(info));
inb(REG_INST(info)); inb(REG_INST(info));
......
...@@ -82,6 +82,68 @@ static struct pcmcia_low_level *pcmcia_low_level; ...@@ -82,6 +82,68 @@ static struct pcmcia_low_level *pcmcia_low_level;
static struct timer_list poll_timer; static struct timer_list poll_timer;
static struct tq_struct sa1100_pcmcia_task; static struct tq_struct sa1100_pcmcia_task;
/*
* sa1100_pcmcia_default_mecr_timing
* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
*
* Calculate MECR clock wait states for given CPU clock
* speed and command wait state. This function can be over-
* written by a board specific version.
*
* The default is to simply calculate the BS values as specified in
* the INTEL SA1100 development manual
* "Expansion Memory (PCMCIA) Configuration Register (MECR)"
* that's section 10.2.5 in _my_ version of the manuial ;)
*/
static int sa1100_pcmcia_default_mecr_timing(unsigned int sock, unsigned int cpu_speed,
unsigned int cmd_time )
{
return sa1100_pcmcia_mecr_bs( cmd_time, cpu_speed );
}
/* sa1100_pcmcia_set_mecr()
* ^^^^^^^^^^^^^^^^^^^^^^^^^^^
*
* set MECR value for socket <sock> based on this sockets
* io, mem and attribute space access speed.
* Call board specific BS value calculation to allow boards
* to tweak the BS values.
*/
static int sa1100_pcmcia_set_mecr( int sock )
{
struct sa1100_pcmcia_socket *skt;
u32 mecr;
int clock;
long flags;
unsigned int bs;
if ( sock<0 || sock>SA1100_PCMCIA_MAX_SOCK )
return -1;
skt = PCMCIA_SOCKET( sock );
local_irq_save(flags);
clock = cpufreq_get(0);
bs = pcmcia_low_level->socket_get_timing( sock, clock, skt->speed_io);
mecr = MECR;
MECR_FAST_SET(mecr, sock, 0);
MECR_BSIO_SET(mecr, sock, bs );
MECR_BSA_SET(mecr, sock, bs );
MECR_BSM_SET(mecr, sock, bs );
MECR = mecr;
local_irq_restore(flags);
DEBUG(4, "%s(): FAST%u %lx BSM%u %lx BSA%u %lx BSIO%u %lx\n",
__FUNCTION__, sock, MECR_FAST_GET(mecr, sock), sock,
MECR_BSM_GET(mecr, sock), sock, MECR_BSA_GET(mecr, sock),
sock, MECR_BSIO_GET(mecr, sock));
return 0;
}
/* /*
* sa1100_pcmcia_state_to_config * sa1100_pcmcia_state_to_config
* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...@@ -586,26 +648,10 @@ sa1100_pcmcia_set_io_map(unsigned int sock, struct pccard_io_map *map) ...@@ -586,26 +648,10 @@ sa1100_pcmcia_set_io_map(unsigned int sock, struct pccard_io_map *map)
} }
if (map->flags & MAP_ACTIVE) { if (map->flags & MAP_ACTIVE) {
unsigned int clock, speed = map->speed; if ( map->speed == 0)
unsigned long mecr; map->speed = SA1100_PCMCIA_IO_ACCESS;
if (speed == 0) sa1100_pcmcia_set_mecr( sock );
speed = SA1100_PCMCIA_IO_ACCESS;
clock = cpufreq_get(0);
mecr = MECR;
MECR_BSIO_SET(mecr, sock, sa1100_pcmcia_mecr_bs(speed, clock));
skt->speed_io = speed;
DEBUG(4, "%s(): FAST%u %lx BSM%u %lx BSA%u %lx BSIO%u %lx\n",
__FUNCTION__, sock, MECR_FAST_GET(mecr, sock), sock,
MECR_BSM_GET(mecr, sock), sock, MECR_BSA_GET(mecr, sock),
sock, MECR_BSIO_GET(mecr, sock));
MECR = mecr;
} }
if (map->stop == 1) if (map->stop == 1)
...@@ -683,39 +729,19 @@ sa1100_pcmcia_set_mem_map(unsigned int sock, struct pccard_mem_map *map) ...@@ -683,39 +729,19 @@ sa1100_pcmcia_set_mem_map(unsigned int sock, struct pccard_mem_map *map)
} }
if (map->flags & MAP_ACTIVE) { if (map->flags & MAP_ACTIVE) {
unsigned int clock, speed = map->speed; /*
unsigned long mecr; * When clients issue RequestMap, the access speed is not always
* properly configured. Choose some sensible defaults.
/* */
* When clients issue RequestMap, the access speed is not always if (map->speed == 0) {
* properly configured. Choose some sensible defaults. if (skt->cs_state.Vcc == 33)
*/ map->speed = SA1100_PCMCIA_3V_MEM_ACCESS;
if (speed == 0) { else
if (skt->cs_state.Vcc == 33) map->speed = SA1100_PCMCIA_5V_MEM_ACCESS;
speed = SA1100_PCMCIA_3V_MEM_ACCESS; }
else
speed = SA1100_PCMCIA_5V_MEM_ACCESS; sa1100_pcmcia_set_mecr( sock );
}
clock = cpufreq_get(0);
/* Fixme: MECR is not pre-empt safe. */
mecr = MECR;
if (map->flags & MAP_ATTRIB) {
MECR_BSA_SET(mecr, sock, sa1100_pcmcia_mecr_bs(speed, clock));
skt->speed_attr = speed;
} else {
MECR_BSM_SET(mecr, sock, sa1100_pcmcia_mecr_bs(speed, clock));
skt->speed_mem = speed;
}
DEBUG(4, "%s(): FAST%u %lx BSM%u %lx BSA%u %lx BSIO%u %lx\n",
__FUNCTION__, sock, MECR_FAST_GET(mecr, sock), sock,
MECR_BSM_GET(mecr, sock), sock, MECR_BSA_GET(mecr, sock),
sock, MECR_BSIO_GET(mecr, sock));
MECR = mecr;
} }
start = (map->flags & MAP_ATTRIB) ? skt->phys_attr : skt->phys_mem; start = (map->flags & MAP_ATTRIB) ? skt->phys_attr : skt->phys_mem;
...@@ -857,20 +883,10 @@ static struct pccard_operations sa1100_pcmcia_operations = { ...@@ -857,20 +883,10 @@ static struct pccard_operations sa1100_pcmcia_operations = {
static void sa1100_pcmcia_update_mecr(unsigned int clock) static void sa1100_pcmcia_update_mecr(unsigned int clock)
{ {
unsigned int sock; unsigned int sock;
unsigned long mecr = MECR;
for(sock = 0; sock < SA1100_PCMCIA_MAX_SOCK; ++sock){
struct sa1100_pcmcia_socket *skt = PCMCIA_SOCKET(sock);
MECR_BSIO_SET(mecr, sock, for (sock = 0; sock < SA1100_PCMCIA_MAX_SOCK; ++sock) {
sa1100_pcmcia_mecr_bs(skt->speed_io, clock)); sa1100_pcmcia_set_mecr( sock );
MECR_BSA_SET(mecr, sock,
sa1100_pcmcia_mecr_bs(skt->speed_attr, clock));
MECR_BSM_SET(mecr, sock,
sa1100_pcmcia_mecr_bs(skt->speed_mem, clock));
} }
MECR = mecr;
} }
/* sa1100_pcmcia_notifier() /* sa1100_pcmcia_notifier()
...@@ -929,8 +945,7 @@ int sa1100_register_pcmcia(struct pcmcia_low_level *ops) ...@@ -929,8 +945,7 @@ int sa1100_register_pcmcia(struct pcmcia_low_level *ops)
struct pcmcia_init pcmcia_init; struct pcmcia_init pcmcia_init;
struct pcmcia_state state[SA1100_PCMCIA_MAX_SOCK]; struct pcmcia_state state[SA1100_PCMCIA_MAX_SOCK];
struct pcmcia_state_array state_array; struct pcmcia_state_array state_array;
unsigned int i, clock; unsigned int i;
unsigned long mecr;
int ret; int ret;
/* /*
...@@ -941,6 +956,13 @@ int sa1100_register_pcmcia(struct pcmcia_low_level *ops) ...@@ -941,6 +956,13 @@ int sa1100_register_pcmcia(struct pcmcia_low_level *ops)
pcmcia_low_level = ops; pcmcia_low_level = ops;
/*
* set default MECR calculation if the board specific
* code did not specify one...
*/
if (!pcmcia_low_level->socket_get_timing)
pcmcia_low_level->socket_get_timing = sa1100_pcmcia_default_mecr_timing;
pcmcia_init.handler = sa1100_pcmcia_interrupt; pcmcia_init.handler = sa1100_pcmcia_interrupt;
ret = ops->init(&pcmcia_init); ret = ops->init(&pcmcia_init);
if (ret < 0) { if (ret < 0) {
...@@ -967,10 +989,6 @@ int sa1100_register_pcmcia(struct pcmcia_low_level *ops) ...@@ -967,10 +989,6 @@ int sa1100_register_pcmcia(struct pcmcia_low_level *ops)
* We initialize the MECR to default values here, because we are * We initialize the MECR to default values here, because we are
* not guaranteed to see a SetIOMap operation at runtime. * not guaranteed to see a SetIOMap operation at runtime.
*/ */
mecr = 0;
clock = cpufreq_get(0);
for (i = 0; i < sa1100_pcmcia_socket_count; i++) { for (i = 0; i < sa1100_pcmcia_socket_count; i++) {
struct sa1100_pcmcia_socket *skt = PCMCIA_SOCKET(i); struct sa1100_pcmcia_socket *skt = PCMCIA_SOCKET(i);
struct pcmcia_irq_info irq_info; struct pcmcia_irq_info irq_info;
...@@ -1000,13 +1018,9 @@ int sa1100_register_pcmcia(struct pcmcia_low_level *ops) ...@@ -1000,13 +1018,9 @@ int sa1100_register_pcmcia(struct pcmcia_low_level *ops)
goto out_err; goto out_err;
} }
MECR_FAST_SET(mecr, i, 0); sa1100_pcmcia_set_mecr( i );
MECR_BSIO_SET(mecr, i, sa1100_pcmcia_mecr_bs(skt->speed_io, clock));
MECR_BSA_SET(mecr, i, sa1100_pcmcia_mecr_bs(skt->speed_attr, clock));
MECR_BSM_SET(mecr, i, sa1100_pcmcia_mecr_bs(skt->speed_mem, clock));
} }
MECR = mecr;
/* Only advertise as many sockets as we can detect */ /* Only advertise as many sockets as we can detect */
ret = register_ss_entry(sa1100_pcmcia_socket_count, ret = register_ss_entry(sa1100_pcmcia_socket_count,
......
...@@ -69,6 +69,12 @@ struct pcmcia_low_level { ...@@ -69,6 +69,12 @@ struct pcmcia_low_level {
* Disable card status IRQs and PCMCIA bus on suspend. * Disable card status IRQs and PCMCIA bus on suspend.
*/ */
int (*socket_suspend)(int sock); int (*socket_suspend)(int sock);
/*
* Calculate MECR timing clock wait states
*/
int (*socket_get_timing)(unsigned int sock, unsigned int cpu_speed,
unsigned int cmd_time );
}; };
extern int sa1100_register_pcmcia(struct pcmcia_low_level *); extern int sa1100_register_pcmcia(struct pcmcia_low_level *);
......
...@@ -17,29 +17,34 @@ ...@@ -17,29 +17,34 @@
* will stop our MCLK signal (which provides the clock for the glue * will stop our MCLK signal (which provides the clock for the glue
* logic, and therefore the timer interrupt). * logic, and therefore the timer interrupt).
* *
* Instead, we spin, waiting for either hlt_counter or need_resched() * Instead, we spin, polling the IRQ_STAT register for the occurrence
* to be set. If we have been spinning for 2cs, then we drop the * of any interrupt with core clock down to the memory clock.
* core clock down to the memory clock.
*/ */
static void arch_idle(void) static void arch_idle(void)
{ {
unsigned long start_idle; const char *irq_stat = (char *)0xff000000;
long flags;
start_idle = jiffies; if (!hlt_counter)
return;
do { do {
if (need_resched() || hlt_counter) /* disable interrupts */
goto slow_out; cli();
} while (time_before(jiffies, start_idle + HZ/50)); /* check need_resched here to avoid races */
if (need_resched()) {
cpu_do_idle(IDLE_CLOCK_SLOW); sti();
return;
while (!need_resched() && !hlt_counter) { }
/* do nothing slowly */ /* disable clock switching */
} asm volatile ("mcr%? p15, 0, ip, c15, c2, 2");
/* wait for an interrupt to occur */
cpu_do_idle(IDLE_CLOCK_FAST); while (!*irq_stat);
slow_out: /* enable clock switching */
asm volatile ("mcr%? p15, 0, ip, c15, c1, 2");
/* allow the interrupt to happen */
sti();
} while (!need_resched());
} }
#define arch_reset(mode) cpu_reset(0x80000000) #define arch_reset(mode) cpu_reset(0x80000000)
......
...@@ -107,18 +107,12 @@ extern struct processor { ...@@ -107,18 +107,12 @@ extern struct processor {
*/ */
void (*set_pte)(pte_t *ptep, pte_t pte); void (*set_pte)(pte_t *ptep, pte_t pte);
} pgtable; } pgtable;
struct { /* other */
void (*clear_user_page)(void *page, unsigned long u_addr);
void (*copy_user_page)(void *to, void *from, unsigned long u_addr);
} misc;
} processor; } processor;
extern const struct processor arm6_processor_functions; extern const struct processor arm6_processor_functions;
extern const struct processor arm7_processor_functions; extern const struct processor arm7_processor_functions;
extern const struct processor sa110_processor_functions; extern const struct processor sa110_processor_functions;
#define cpu_data_abort(pc) processor._data_abort(pc)
#define cpu_check_bugs() processor._check_bugs() #define cpu_check_bugs() processor._check_bugs()
#define cpu_proc_init() processor._proc_init() #define cpu_proc_init() processor._proc_init()
#define cpu_proc_fin() processor._proc_fin() #define cpu_proc_fin() processor._proc_fin()
...@@ -141,9 +135,6 @@ extern const struct processor sa110_processor_functions; ...@@ -141,9 +135,6 @@ extern const struct processor sa110_processor_functions;
#define cpu_set_pmd(pmdp, pmd) processor.pgtable.set_pmd(pmdp, pmd) #define cpu_set_pmd(pmdp, pmd) processor.pgtable.set_pmd(pmdp, pmd)
#define cpu_set_pte(ptep, pte) processor.pgtable.set_pte(ptep, pte) #define cpu_set_pte(ptep, pte) processor.pgtable.set_pte(ptep, pte)
#define cpu_copy_user_page(to,from,uaddr) processor.misc.copy_user_page(to,from,uaddr)
#define cpu_clear_user_page(page,uaddr) processor.misc.clear_user_page(page,uaddr)
#define cpu_switch_mm(pgd,tsk) cpu_set_pgd(__virt_to_phys((unsigned long)(pgd))) #define cpu_switch_mm(pgd,tsk) cpu_set_pgd(__virt_to_phys((unsigned long)(pgd)))
#define cpu_get_pgd() \ #define cpu_get_pgd() \
......
...@@ -22,7 +22,6 @@ ...@@ -22,7 +22,6 @@
* function pointers for this lot. Otherwise, we can optimise the * function pointers for this lot. Otherwise, we can optimise the
* table away. * table away.
*/ */
#define cpu_data_abort __cpu_fn(CPU_ABRT,_abort)
#define cpu_check_bugs __cpu_fn(CPU_NAME,_check_bugs) #define cpu_check_bugs __cpu_fn(CPU_NAME,_check_bugs)
#define cpu_proc_init __cpu_fn(CPU_NAME,_proc_init) #define cpu_proc_init __cpu_fn(CPU_NAME,_proc_init)
#define cpu_proc_fin __cpu_fn(CPU_NAME,_proc_fin) #define cpu_proc_fin __cpu_fn(CPU_NAME,_proc_fin)
...@@ -40,8 +39,6 @@ ...@@ -40,8 +39,6 @@
#define cpu_set_pgd __cpu_fn(CPU_NAME,_set_pgd) #define cpu_set_pgd __cpu_fn(CPU_NAME,_set_pgd)
#define cpu_set_pmd __cpu_fn(CPU_NAME,_set_pmd) #define cpu_set_pmd __cpu_fn(CPU_NAME,_set_pmd)
#define cpu_set_pte __cpu_fn(CPU_NAME,_set_pte) #define cpu_set_pte __cpu_fn(CPU_NAME,_set_pte)
#define cpu_copy_user_page __cpu_fn(MMU_ARCH,_copy_user_page)
#define cpu_clear_user_page __cpu_fn(MMU_ARCH,_clear_user_page)
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
...@@ -74,9 +71,6 @@ extern void cpu_set_pgd(unsigned long pgd_phys); ...@@ -74,9 +71,6 @@ extern void cpu_set_pgd(unsigned long pgd_phys);
extern void cpu_set_pmd(pmd_t *pmdp, pmd_t pmd); extern void cpu_set_pmd(pmd_t *pmdp, pmd_t pmd);
extern void cpu_set_pte(pte_t *ptep, pte_t pte); extern void cpu_set_pte(pte_t *ptep, pte_t pte);
extern void cpu_copy_user_page(void *to, void *from, unsigned long u_addr);
extern void cpu_clear_user_page(void *page, unsigned long u_addr);
extern volatile void cpu_reset(unsigned long addr); extern volatile void cpu_reset(unsigned long addr);
#define cpu_switch_mm(pgd,tsk) cpu_set_pgd(__virt_to_phys((unsigned long)(pgd))) #define cpu_switch_mm(pgd,tsk) cpu_set_pgd(__virt_to_phys((unsigned long)(pgd)))
......
...@@ -24,14 +24,21 @@ ...@@ -24,14 +24,21 @@
#endif #endif
#define __glue(name,fn) ____glue(name,fn) #define __glue(name,fn) ____glue(name,fn)
/*
* Select MMU TLB handling.
*/
/* /*
* ARMv3 MMU * MMU TLB Model
* =============
*
* We have the following to choose from:
* v3 - ARMv3
* v4 - ARMv4 without write buffer
* v4wb - ARMv4 with write buffer without I TLB flush entry instruction
* v4wbi - ARMv4 with write buffer with I TLB flush entry instruction
*/ */
#undef _TLB #undef _TLB
#undef MULTI_TLB
#if defined(CONFIG_CPU_ARM610) || defined(CONFIG_CPU_ARM710) #if defined(CONFIG_CPU_ARM610) || defined(CONFIG_CPU_ARM710)
# ifdef _TLB # ifdef _TLB
# define MULTI_TLB 1 # define MULTI_TLB 1
...@@ -40,9 +47,6 @@ ...@@ -40,9 +47,6 @@
# endif # endif
#endif #endif
/*
* ARMv4 MMU without write buffer
*/
#if defined(CONFIG_CPU_ARM720T) #if defined(CONFIG_CPU_ARM720T)
# ifdef _TLB # ifdef _TLB
# define MULTI_TLB 1 # define MULTI_TLB 1
...@@ -51,9 +55,6 @@ ...@@ -51,9 +55,6 @@
# endif # endif
#endif #endif
/*
* ARMv4 MMU with write buffer, with invalidate I TLB entry instruction
*/
#if defined(CONFIG_CPU_ARM920T) || defined(CONFIG_CPU_ARM922T) || \ #if defined(CONFIG_CPU_ARM920T) || defined(CONFIG_CPU_ARM922T) || \
defined(CONFIG_CPU_ARM926T) || defined(CONFIG_CPU_ARM1020) || \ defined(CONFIG_CPU_ARM926T) || defined(CONFIG_CPU_ARM1020) || \
defined(CONFIG_CPU_XSCALE) defined(CONFIG_CPU_XSCALE)
...@@ -64,9 +65,6 @@ ...@@ -64,9 +65,6 @@
# endif # endif
#endif #endif
/*
* ARMv4 MMU with write buffer, without invalidate I TLB entry instruction
*/
#if defined(CONFIG_CPU_SA110) || defined(CONFIG_CPU_SA1100) #if defined(CONFIG_CPU_SA110) || defined(CONFIG_CPU_SA1100)
# ifdef _TLB # ifdef _TLB
# define MULTI_TLB 1 # define MULTI_TLB 1
...@@ -75,4 +73,134 @@ ...@@ -75,4 +73,134 @@
# endif # endif
#endif #endif
#ifndef _TLB
#error Unknown TLB model
#endif
/*
* Data Abort Model
* ================
*
* We have the following to choose from:
* arm6 - ARM6 style
* arm7 - ARM7 style
* v4_early - ARMv4 without Thumb early abort handler
* v4t_late - ARMv4 with Thumb late abort handler
* v4t_early - ARMv4 with Thumb early abort handler
* v5ej_early - ARMv5 with Thumb and Java early abort handler
*/
#undef CPU_ABORT_HANDLER
#undef MULTI_ABORT
#if defined(CONFIG_CPU_ARM610)
# ifdef CPU_ABORT_HANDLER
# define MULTI_ABORT 1
# else
# define CPU_ABORT_HANDLER cpu_arm6_data_abort
# endif
#endif
#if defined(CONFIG_CPU_ARM710)
# ifdef CPU_ABORT_HANDLER
# define MULTI_ABORT 1
# else
# define CPU_ABORT_HANDLER cpu_arm7_data_abort
# endif
#endif
#if defined(CONFIG_CPU_ARM720T)
# ifdef CPU_ABORT_HANDLER
# define MULTI_ABORT 1
# else
# define CPU_ABORT_HANDLER v4t_late_abort
# endif
#endif
#if defined(CONFIG_CPU_SA110) || defined(CONFIG_CPU_SA1100)
# ifdef CPU_ABORT_HANDLER
# define MULTI_ABORT 1
# else
# define CPU_ABORT_HANDLER v4_early_abort
# endif
#endif
#if defined(CONFIG_CPU_ARM920T) || defined(CONFIG_CPU_ARM922T) || \
defined(CONFIG_CPU_ARM1020) || defined(CONFIG_CPU_XSCALE)
# ifdef CPU_ABORT_HANDLER
# define MULTI_ABORT 1
# else
# define CPU_ABORT_HANDLER v4t_early_abort
# endif
#endif
#if defined(CONFIG_CPU_ARM926T)
# ifdef CPU_ABORT_HANDLER
# define MULTI_ABORT 1
# else
# define CPU_ABORT_HANDLER v5ej_early_abort
# endif
#endif
#ifndef CPU_ABORT_HANDLER
#error Unknown data abort handler type
#endif
/*
* User Space Model
* ================
*
* This section selects the correct set of functions for dealing with
* page-based copying and clearing for user space for the particular
* processor(s) we're building for.
*
* We have the following to choose from:
* v3 - ARMv3
* v4 - ARMv4 without minicache
* v4_mc - ARMv4 with minicache
* v5te_mc - ARMv5TE with minicache
*/
#undef _USER
#undef MULTI_USER
#if defined(CONFIG_CPU_ARM610) || defined(CONFIG_CPU_ARM710)
# ifdef _USER
# define MULTI_USER 1
# else
# define _USER v3
# endif
#endif
#if defined(CONFIG_CPU_ARM720T) || defined(CONFIG_CPU_ARM920T) || \
defined(CONFIG_CPU_ARM922T) || defined(CONFIG_CPU_ARM926T) || \
defined(CONFIG_CPU_SA110) || defined(CONFIG_CPU_ARM1020)
# ifdef _USER
# define MULTI_USER 1
# else
# define _USER v4
# endif
#endif
#if defined(CONFIG_CPU_SA1100)
# ifdef _USER
# define MULTI_USER 1
# else
# define _USER v4_mc
# endif
#endif
#if defined(CONFIG_CPU_XSCALE)
# ifdef _USER
# define MULTI_USER 1
# else
# define _USER v5te_mc
# endif
#endif
#ifndef _USER
#error Unknown user operations model
#endif
#endif #endif
...@@ -19,12 +19,6 @@ struct hw_pci { ...@@ -19,12 +19,6 @@ struct hw_pci {
/* Setup bus resources */ /* Setup bus resources */
void (*setup_resources)(struct resource **); void (*setup_resources)(struct resource **);
/*
* This is the offset of PCI memory base registers
* to physical memory.
*/
unsigned long mem_offset;
/* IRQ swizzle */ /* IRQ swizzle */
u8 (*swizzle)(struct pci_dev *dev, u8 *pin); u8 (*swizzle)(struct pci_dev *dev, u8 *pin);
......
#ifndef _ASMARM_PAGE_H #ifndef _ASMARM_PAGE_H
#define _ASMARM_PAGE_H #define _ASMARM_PAGE_H
#include <asm/proc/page.h> #include <linux/config.h>
#define PAGE_SIZE (1UL << PAGE_SHIFT)
#define PAGE_MASK (~(PAGE_SIZE-1))
#ifdef __KERNEL__ #ifdef __KERNEL__
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
#define STRICT_MM_TYPECHECKS #include <asm/glue.h>
#define clear_page(page) memzero((void *)(page), PAGE_SIZE) struct cpu_user_fns {
extern void copy_page(void *to, void *from); void (*cpu_clear_user_page)(void *p, unsigned long user);
void (*cpu_copy_user_page)(void *to, const void *from,
unsigned long user);
};
#ifdef MULTI_USER
extern struct cpu_user_fns cpu_user;
#define __cpu_clear_user_page cpu_user.cpu_clear_user_page
#define __cpu_copy_user_page cpu_user.cpu_copy_user_page
#else
#define __cpu_clear_user_page __glue(_USER,_clear_user_page)
#define __cpu_copy_user_page __glue(_USER,_copy_user_page)
extern void __cpu_clear_user_page(void *p, unsigned long user);
extern void __cpu_copy_user_page(void *to, const void *from,
unsigned long user);
#endif
#define clear_user_page(addr,vaddr) \ #define clear_user_page(addr,vaddr) \
do { \ do { \
preempt_disable(); \ preempt_disable(); \
cpu_clear_user_page(addr, vaddr); \ __cpu_clear_user_page(addr, vaddr); \
preempt_enable(); \ preempt_enable(); \
} while (0) } while (0)
#define copy_user_page(to,from,vaddr) \ #define copy_user_page(to,from,vaddr) \
do { \ do { \
preempt_disable(); \ preempt_disable(); \
cpu_copy_user_page(to, from, vaddr); \ __cpu_copy_user_page(to, from, vaddr); \
preempt_enable(); \ preempt_enable(); \
} while (0) } while (0)
#define clear_page(page) memzero((void *)(page), PAGE_SIZE)
extern void copy_page(void *to, void *from);
#undef STRICT_MM_TYPECHECKS
#ifdef STRICT_MM_TYPECHECKS #ifdef STRICT_MM_TYPECHECKS
/* /*
* These are used to make use of C type-checking.. * These are used to make use of C type-checking..
*/ */
typedef struct { unsigned long pte; } pte_t; typedef struct { unsigned long pte; } pte_t;
typedef struct { unsigned long pmd; } pmd_t; typedef struct { unsigned long pmd; } pmd_t;
typedef struct { unsigned long pgd; } pgd_t;
typedef struct { unsigned long pgprot; } pgprot_t; typedef struct { unsigned long pgprot; } pgprot_t;
#define pte_val(x) ((x).pte) #define pte_val(x) ((x).pte)
#define pmd_val(x) ((x).pmd) #define pmd_val(x) ((x).pmd)
#define pgd_val(x) ((x).pgd)
#define pgprot_val(x) ((x).pgprot) #define pgprot_val(x) ((x).pgprot)
#define __pte(x) ((pte_t) { (x) } ) #define __pte(x) ((pte_t) { (x) } )
#define __pmd(x) ((pmd_t) { (x) } ) #define __pmd(x) ((pmd_t) { (x) } )
#define __pgd(x) ((pgd_t) { (x) } )
#define __pgprot(x) ((pgprot_t) { (x) } ) #define __pgprot(x) ((pgprot_t) { (x) } )
#else #else
...@@ -53,25 +71,29 @@ typedef struct { unsigned long pgprot; } pgprot_t; ...@@ -53,25 +71,29 @@ typedef struct { unsigned long pgprot; } pgprot_t;
*/ */
typedef unsigned long pte_t; typedef unsigned long pte_t;
typedef unsigned long pmd_t; typedef unsigned long pmd_t;
typedef unsigned long pgd_t;
typedef unsigned long pgprot_t; typedef unsigned long pgprot_t;
#define pte_val(x) (x) #define pte_val(x) (x)
#define pmd_val(x) (x) #define pmd_val(x) (x)
#define pgd_val(x) (x)
#define pgprot_val(x) (x) #define pgprot_val(x) (x)
#define __pte(x) (x) #define __pte(x) (x)
#define __pmd(x) (x) #define __pmd(x) (x)
#define __pgd(x) (x)
#define __pgprot(x) (x) #define __pgprot(x) (x)
#endif #endif /* STRICT_MM_TYPECHECKS */
#endif /* !__ASSEMBLY__ */ #endif /* !__ASSEMBLY__ */
#endif /* __KERNEL__ */
#include <asm/proc/page.h>
#define PAGE_SIZE (1UL << PAGE_SHIFT)
#define PAGE_MASK (~(PAGE_SIZE-1))
/* to align the pointer to the (next) page boundary */ /* to align the pointer to the (next) page boundary */
#define PAGE_ALIGN(addr) (((addr)+PAGE_SIZE-1)&PAGE_MASK) #define PAGE_ALIGN(addr) (((addr)+PAGE_SIZE-1)&PAGE_MASK)
#ifdef __KERNEL__
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
#ifdef CONFIG_DEBUG_BUGVERBOSE #ifdef CONFIG_DEBUG_BUGVERBOSE
...@@ -105,7 +127,6 @@ static inline int get_order(unsigned long size) ...@@ -105,7 +127,6 @@ static inline int get_order(unsigned long size)
#endif /* !__ASSEMBLY__ */ #endif /* !__ASSEMBLY__ */
#include <linux/config.h>
#include <asm/arch/memory.h> #include <asm/arch/memory.h>
#define __pa(x) __virt_to_phys((unsigned long)(x)) #define __pa(x) __virt_to_phys((unsigned long)(x))
...@@ -120,6 +141,6 @@ static inline int get_order(unsigned long size) ...@@ -120,6 +141,6 @@ static inline int get_order(unsigned long size)
#define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \ #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \
VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
#endif #endif /* __KERNEL__ */
#endif #endif
/* /*
* linux/include/asm-arm/pgtable.h * linux/include/asm-arm/pgtable.h
* *
* Copyright (C) 2000-2001 Russell King * Copyright (C) 2000-2002 Russell King
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License version 2 as
...@@ -19,7 +19,11 @@ ...@@ -19,7 +19,11 @@
* PGDIR_SHIFT determines what a third-level page table entry can map * PGDIR_SHIFT determines what a third-level page table entry can map
*/ */
#define PMD_SHIFT 20 #define PMD_SHIFT 20
#ifdef CONFIG_CPU_32
#define PGDIR_SHIFT 21
#else
#define PGDIR_SHIFT 20 #define PGDIR_SHIFT 20
#endif
#define LIBRARY_TEXT_START 0x0c000000 #define LIBRARY_TEXT_START 0x0c000000
...@@ -93,7 +97,6 @@ extern struct page *empty_zero_page; ...@@ -93,7 +97,6 @@ extern struct page *empty_zero_page;
#define pmd_none(pmd) (!pmd_val(pmd)) #define pmd_none(pmd) (!pmd_val(pmd))
#define pmd_present(pmd) (pmd_val(pmd)) #define pmd_present(pmd) (pmd_val(pmd))
#define pmd_clear(pmdp) set_pmd(pmdp, __pmd(0))
/* /*
* Permanent address of a page. We never have highmem, so this is trivial. * Permanent address of a page. We never have highmem, so this is trivial.
...@@ -106,18 +109,10 @@ extern struct page *empty_zero_page; ...@@ -106,18 +109,10 @@ extern struct page *empty_zero_page;
*/ */
static inline pte_t mk_pte_phys(unsigned long physpage, pgprot_t pgprot) static inline pte_t mk_pte_phys(unsigned long physpage, pgprot_t pgprot)
{ {
pte_t pte; return __pte(physpage | pgprot_val(pgprot));
pte_val(pte) = physpage | pgprot_val(pgprot);
return pte;
} }
#define mk_pte(page,pgprot) \ #define mk_pte(page,pgprot) mk_pte_phys(__pa(page_address(page)), pgprot)
({ \
pte_t __pte; \
pte_val(__pte) = __pa(page_address(page)) + \
pgprot_val(pgprot); \
__pte; \
})
/* /*
* The "pgd_xxx()" functions here are trivial for a folded two-level * The "pgd_xxx()" functions here are trivial for a folded two-level
...@@ -127,7 +122,7 @@ static inline pte_t mk_pte_phys(unsigned long physpage, pgprot_t pgprot) ...@@ -127,7 +122,7 @@ static inline pte_t mk_pte_phys(unsigned long physpage, pgprot_t pgprot)
#define pgd_none(pgd) (0) #define pgd_none(pgd) (0)
#define pgd_bad(pgd) (0) #define pgd_bad(pgd) (0)
#define pgd_present(pgd) (1) #define pgd_present(pgd) (1)
#define pgd_clear(pgdp) #define pgd_clear(pgdp) do { } while (0)
#define page_pte_prot(page,prot) mk_pte(page, prot) #define page_pte_prot(page,prot) mk_pte(page, prot)
#define page_pte(page) mk_pte(page, __pgprot(0)) #define page_pte(page) mk_pte(page, __pgprot(0))
...@@ -147,15 +142,6 @@ static inline pte_t mk_pte_phys(unsigned long physpage, pgprot_t pgprot) ...@@ -147,15 +142,6 @@ static inline pte_t mk_pte_phys(unsigned long physpage, pgprot_t pgprot)
/* Find an entry in the third-level page table.. */ /* Find an entry in the third-level page table.. */
#define __pte_index(addr) (((addr) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1)) #define __pte_index(addr) (((addr) >> PAGE_SHIFT) & (PTRS_PER_PTE - 1))
#define pmd_page(dir) ((struct page *)__pmd_page(dir))
#define __pte_offset(dir, addr) ((pte_t *)__pmd_page(*(dir)) + __pte_index(addr))
#define pte_offset_kernel __pte_offset
#define pte_offset_map __pte_offset
#define pte_offset_map_nested __pte_offset
#define pte_unmap(pte) do { } while (0)
#define pte_unmap_nested(pte) do { } while (0)
#include <asm/proc/pgtable.h> #include <asm/proc/pgtable.h>
static inline pte_t pte_modify(pte_t pte, pgprot_t newprot) static inline pte_t pte_modify(pte_t pte, pgprot_t newprot)
...@@ -182,8 +168,6 @@ extern pgd_t swapper_pg_dir[PTRS_PER_PGD]; ...@@ -182,8 +168,6 @@ extern pgd_t swapper_pg_dir[PTRS_PER_PGD];
#include <asm-generic/pgtable.h> #include <asm-generic/pgtable.h>
extern void pgtable_cache_init(void);
/* /*
* remap a physical address `phys' of size `size' with page protection `prot' * remap a physical address `phys' of size `size' with page protection `prot'
* into virtual address `from' * into virtual address `from'
......
/* /*
* linux/include/asm-arm/proc-armo/page.h * linux/include/asm-arm/proc-armo/page.h
* *
* Copyright (C) 1995, 1996 Russell King * Copyright (C) 1995-2002 Russell King
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License version 2 as
...@@ -21,4 +21,20 @@ ...@@ -21,4 +21,20 @@
#define EXEC_PAGESIZE 32768 #define EXEC_PAGESIZE 32768
#ifndef __ASSEMBLY__
#ifdef STRICT_MM_TYPECHECKS
typedef struct { unsigned long pgd; } pgd_t;
#define pgd_val(x) ((x).pgd)
#else
typedef unsigned long pgd_t;
#define pgd_val(x) (x)
#endif
#endif /* __ASSEMBLY__ */
#endif /* __ASM_PROC_PAGE_H */ #endif /* __ASM_PROC_PAGE_H */
/* /*
* linux/include/asm-arm/proc-armo/pgalloc.h * linux/include/asm-arm/proc-armo/pgalloc.h
* *
* Copyright (C) 2001 Russell King * Copyright (C) 2001-2002 Russell King
* *
* Page table allocation/freeing primitives for 26-bit ARM processors. * Page table allocation/freeing primitives for 26-bit ARM processors.
*/ */
/* unfortunately, this includes linux/mm.h and the rest of the universe. */
#include <linux/slab.h> #include <linux/slab.h>
extern kmem_cache_t *pte_cache; extern kmem_cache_t *pte_cache;
/* static inline pte_t *
* Allocate one PTE table. pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr)
*
* Note that we keep the processor copy of the PTE entries separate
* from the Linux copy. The processor copies are offset by -PTRS_PER_PTE
* words from the Linux copy.
*/
static inline pte_t *pte_alloc_one(struct mm_struct *mm, unsigned long address)
{ {
return kmem_cache_alloc(pte_cache, GFP_KERNEL); return kmem_cache_alloc(pte_cache, GFP_KERNEL);
} }
/* static inline void pte_free_kernel(pte_t *pte)
* Free one PTE table.
*/
static inline void pte_free_slow(pte_t *pte)
{ {
if (pte) if (pte)
kmem_cache_free(pte_cache, pte); kmem_cache_free(pte_cache, pte);
...@@ -39,9 +29,16 @@ static inline void pte_free_slow(pte_t *pte) ...@@ -39,9 +29,16 @@ static inline void pte_free_slow(pte_t *pte)
* If 'mm' is the init tasks mm, then we are doing a vmalloc, and we * If 'mm' is the init tasks mm, then we are doing a vmalloc, and we
* need to set stuff up correctly for it. * need to set stuff up correctly for it.
*/ */
#define pmd_populate(mm,pmdp,pte) \ static inline void
do { \ pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmdp, pte_t *ptep)
set_pmd(pmdp, __mk_pmd(pte, _PAGE_TABLE)); \ {
} while (0) set_pmd(pmdp, __mk_pmd(ptep, _PAGE_TABLE));
}
/*
* We use the old 2.5.5-rmk1 hack for this.
* This is not truely correct, but should be functional.
*/
#define pte_alloc_one(mm,addr) ((struct page *)pte_alloc_one_kernel(mm,addr))
#define pte_free(pte) pte_free_kernel((pte_t *)pte)
#define pmd_populate(mm,pmdp,ptep) pmd_populate_kernel(mm,pmdp,(pte_t *)ptep)
/* /*
* linux/include/asm-arm/proc-armo/pgtable.h * linux/include/asm-arm/proc-armo/pgtable.h
* *
* Copyright (C) 1995-2001 Russell King * Copyright (C) 1995-2002 Russell King
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License version 2 as
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#define pmd_bad(pmd) ((pmd_val(pmd) & 0xfc000002)) #define pmd_bad(pmd) ((pmd_val(pmd) & 0xfc000002))
#define set_pmd(pmdp,pmd) ((*(pmdp)) = (pmd)) #define set_pmd(pmdp,pmd) ((*(pmdp)) = (pmd))
#define pmd_clear(pmdp) set_pmd(pmdp, __pmd(0))
static inline pmd_t __mk_pmd(pte_t *ptep, unsigned long prot) static inline pmd_t __mk_pmd(pte_t *ptep, unsigned long prot)
{ {
...@@ -48,6 +49,12 @@ static inline unsigned long pmd_page(pmd_t pmd) ...@@ -48,6 +49,12 @@ static inline unsigned long pmd_page(pmd_t pmd)
return __phys_to_virt(pmd_val(pmd) & ~_PAGE_TABLE); return __phys_to_virt(pmd_val(pmd) & ~_PAGE_TABLE);
} }
#define pte_offset_kernel(dir,addr) (pmd_page_kernel(*(dir)) + __pte_index(addr))
#define pte_offset_map(dir,addr) (pmd_page_kernel(*(dir)) + __pte_index(addr))
#define pte_offset_map_nested(dir,addr) (pmd_page_kernel(*(dir)) + __pte_index(addr))
#define pte_unmap(pte) do { } while (0)
#define pte_unmap_nested(pte) do { } while (0)
#define set_pte(pteptr, pteval) ((*(pteptr)) = (pteval)) #define set_pte(pteptr, pteval) ((*(pteptr)) = (pteval))
#define _PAGE_PRESENT 0x01 #define _PAGE_PRESENT 0x01
...@@ -89,11 +96,11 @@ static inline pte_t pte_mkexec(pte_t pte) { pte_val(pte) &= ~_PAGE_NOT_USE ...@@ -89,11 +96,11 @@ static inline pte_t pte_mkexec(pte_t pte) { pte_val(pte) &= ~_PAGE_NOT_USE
static inline pte_t pte_mkdirty(pte_t pte) { pte_val(pte) &= ~_PAGE_CLEAN; return pte; } static inline pte_t pte_mkdirty(pte_t pte) { pte_val(pte) &= ~_PAGE_CLEAN; return pte; }
static inline pte_t pte_mkyoung(pte_t pte) { pte_val(pte) &= ~_PAGE_OLD; return pte; } static inline pte_t pte_mkyoung(pte_t pte) { pte_val(pte) &= ~_PAGE_OLD; return pte; }
#define pte_alloc_kernel pte_alloc
/* /*
* We don't store cache state bits in the page table here. * We don't store cache state bits in the page table here.
*/ */
#define pgprot_noncached(prot) (prot) #define pgprot_noncached(prot) (prot)
extern void pgtable_cache_init(void);
#endif /* __ASM_PROC_PGTABLE_H */ #endif /* __ASM_PROC_PGTABLE_H */
/* /*
* linux/include/asm-arm/proc-armv/cache.h * linux/include/asm-arm/proc-armv/cache.h
* *
* Copyright (C) 1999-2001 Russell King * Copyright (C) 1999-2002 Russell King
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License version 2 as
...@@ -134,7 +134,8 @@ static __inline__ void flush_page_to_ram(struct page *page) ...@@ -134,7 +134,8 @@ static __inline__ void flush_page_to_ram(struct page *page)
#define clean_dcache_range(_s,_e) cpu_dcache_clean_range((_s),(_e)) #define clean_dcache_range(_s,_e) cpu_dcache_clean_range((_s),(_e))
#define flush_dcache_range(_s,_e) cpu_cache_clean_invalidate_range((_s),(_e),0) #define flush_dcache_range(_s,_e) cpu_cache_clean_invalidate_range((_s),(_e),0)
#define mapping_mapped(map) ((map)->i_mmap || (map)->i_mmap_shared) #define mapping_mapped(map) (!list_empty(&(map)->i_mmap) || \
!list_empty(&(map)->i_mmap_shared))
/* /*
* flush_dcache_page is used when the kernel has written to the page * flush_dcache_page is used when the kernel has written to the page
...@@ -204,7 +205,7 @@ static inline void flush_icache_page(struct vm_area_struct *vma, struct page *pa ...@@ -204,7 +205,7 @@ static inline void flush_icache_page(struct vm_area_struct *vma, struct page *pa
* TLB Management * TLB Management
* ============== * ==============
* *
* The arch/arm/mm/tlb-*.S files implement this methods. * The arch/arm/mm/tlb-*.S files implement these methods.
* *
* The TLB specific code is expected to perform whatever tests it * The TLB specific code is expected to perform whatever tests it
* needs to determine if it should invalidate the TLB for each * needs to determine if it should invalidate the TLB for each
......
/* /*
* linux/include/asm-arm/proc-armv/page.h * linux/include/asm-arm/proc-armv/page.h
* *
* Copyright (C) 1995, 1996 Russell King * Copyright (C) 1995-2002 Russell King
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License version 2 as
...@@ -15,4 +15,23 @@ ...@@ -15,4 +15,23 @@
#define EXEC_PAGESIZE 4096 #define EXEC_PAGESIZE 4096
#ifndef __ASSEMBLY__
#ifdef STRICT_MM_TYPECHECKS
typedef struct {
unsigned long pgd0;
unsigned long pgd1;
} pgd_t;
#define pgd_val(x) ((x).pgd0)
#else
typedef unsigned long pgd_t[2];
#define pgd_val(x) ((x)[0])
#endif
#endif /* __ASSEMBLY__ */
#endif /* __ASM_PROC_PAGE_H */ #endif /* __ASM_PROC_PAGE_H */
/* /*
* linux/include/asm-arm/proc-armv/pgalloc.h * linux/include/asm-arm/proc-armv/pgalloc.h
* *
* Copyright (C) 2001 Russell King * Copyright (C) 2001-2002 Russell King
* *
* Page table allocation/freeing primitives for 32-bit ARM processors. * Page table allocation/freeing primitives for 32-bit ARM processors.
*/ */
#include "pgtable.h"
/* unfortunately, this includes linux/mm.h and the rest of the universe. */
#include <linux/slab.h>
extern kmem_cache_t *pte_cache;
/* /*
* Allocate one PTE table. * Allocate one PTE table.
* *
* Note that we keep the processor copy of the PTE entries separate * This actually allocates two hardware PTE tables, but we wrap this up
* from the Linux copy. The processor copies are offset by -PTRS_PER_PTE * into one table thus:
* words from the Linux copy. *
* +------------+
* | h/w pt 0 |
* +------------+
* | h/w pt 1 |
* +------------+
* | Linux pt 0 |
* +------------+
* | Linux pt 1 |
* +------------+
*/ */
static inline pte_t * static inline pte_t *
pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr) pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr)
{ {
int count = 0;
pte_t *pte; pte_t *pte;
pte = kmem_cache_alloc(pte_cache, GFP_KERNEL); do {
if (pte) pte = (pte_t *)__get_free_page(GFP_KERNEL);
if (!pte) {
current->state = TASK_UNINTERRUPTIBLE;
schedule_timeout(HZ);
}
} while (!pte && (count++ < 10));
if (pte) {
clear_page(pte);
clean_dcache_area(pte, sizeof(pte_t) * PTRS_PER_PTE);
pte += PTRS_PER_PTE; pte += PTRS_PER_PTE;
}
return pte; return pte;
} }
static inline struct page * static inline struct page *
pte_alloc_one(struct mm_struct *mm, unsigned long addr) pte_alloc_one(struct mm_struct *mm, unsigned long addr)
{ {
pte_t *pte; struct page *pte;
int count = 0;
pte = kmem_cache_alloc(pte_cache, GFP_KERNEL); do {
if (pte) pte = alloc_pages(GFP_KERNEL, 0);
pte += PTRS_PER_PTE; if (!pte) {
return (struct page *)pte; current->state = TASK_UNINTERRUPTIBLE;
schedule_timeout(HZ);
}
} while (!pte && (count++ < 10));
if (pte) {
void *page = page_address(pte);
clear_page(page);
clean_dcache_area(page, sizeof(pte_t) * PTRS_PER_PTE);
}
return pte;
} }
/* /*
...@@ -47,34 +76,49 @@ static inline void pte_free_kernel(pte_t *pte) ...@@ -47,34 +76,49 @@ static inline void pte_free_kernel(pte_t *pte)
{ {
if (pte) { if (pte) {
pte -= PTRS_PER_PTE; pte -= PTRS_PER_PTE;
kmem_cache_free(pte_cache, pte); free_page((unsigned long)pte);
} }
} }
static inline void pte_free(struct page *pte) static inline void pte_free(struct page *pte)
{ {
pte_t *_pte = (pte_t *)pte; __free_page(pte);
if (pte) {
_pte -= PTRS_PER_PTE;
kmem_cache_free(pte_cache, _pte);
}
} }
/* /*
* Populate the pmdp entry with a pointer to the pte. This pmd is part * Populate the pmdp entry with a pointer to the pte. This pmd is part
* of the mm address space. * of the mm address space.
* *
* If 'mm' is the init tasks mm, then we are doing a vmalloc, and we * Ensure that we always set both PMD entries.
* need to set stuff up correctly for it.
*/ */
#define pmd_populate_kernel(mm,pmdp,pte) \ static inline void
do { \ pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmdp, pte_t *ptep)
BUG_ON(mm != &init_mm); \ {
set_pmd(pmdp, __mk_pmd(pte, _PAGE_KERNEL_TABLE));\ unsigned long pte_ptr = (unsigned long)ptep;
} while (0) pmd_t pmd;
#define pmd_populate(mm,pmdp,pte) \ BUG_ON(mm != &init_mm);
do { \
BUG_ON(mm == &init_mm); \ /*
set_pmd(pmdp, __mk_pmd(pte, _PAGE_USER_TABLE)); \ * The pmd must be loaded with the physical
} while (0) * address of the PTE table
*/
pte_ptr -= PTRS_PER_PTE * sizeof(void *);
pmd_val(pmd) = __pa(pte_ptr) | _PAGE_KERNEL_TABLE;
set_pmd(pmdp, pmd);
pmd_val(pmd) += 256 * sizeof(pte_t);
set_pmd(pmdp + 1, pmd);
}
static inline void
pmd_populate(struct mm_struct *mm, pmd_t *pmdp, struct page *ptep)
{
pmd_t pmd;
BUG_ON(mm == &init_mm);
pmd_val(pmd) = __pa(page_address(ptep)) | _PAGE_USER_TABLE;
set_pmd(pmdp, pmd);
pmd_val(pmd) += 256 * sizeof(pte_t);
set_pmd(pmdp + 1, pmd);
}
/* /*
* linux/include/asm-arm/proc-armv/pgtable.h * linux/include/asm-arm/proc-armv/pgtable.h
* *
* Copyright (C) 1995-2001 Russell King * Copyright (C) 1995-2002 Russell King
* *
* This program is free software; you can redistribute it and/or modify * 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 * it under the terms of the GNU General Public License version 2 as
...@@ -16,12 +16,17 @@ ...@@ -16,12 +16,17 @@
#define __ASM_PROC_PGTABLE_H #define __ASM_PROC_PGTABLE_H
/* /*
* entries per page directory level: they are two-level, so * We pull a couple of tricks here:
* we don't really have any PMD directory. * 1. We wrap the PMD into the PGD.
* 2. We lie about the size of the PTE and PGD.
* Even though we have 256 PTE entries and 4096 PGD entries, we tell
* Linux that we actually have 512 PTE entries and 2048 PGD entries.
* Each "Linux" PGD entry is made up of two hardware PGD entries, and
* each PTE table is actually two hardware PTE tables.
*/ */
#define PTRS_PER_PTE 256 #define PTRS_PER_PTE 512
#define PTRS_PER_PMD 1 #define PTRS_PER_PMD 1
#define PTRS_PER_PGD 4096 #define PTRS_PER_PGD 2048
/* /*
* Hardware page table definitions. * Hardware page table definitions.
...@@ -109,33 +114,30 @@ ...@@ -109,33 +114,30 @@
#define pmd_bad(pmd) (pmd_val(pmd) & 2) #define pmd_bad(pmd) (pmd_val(pmd) & 2)
#define set_pmd(pmdp,pmd) cpu_set_pmd(pmdp, pmd) #define set_pmd(pmdp,pmd) cpu_set_pmd(pmdp, pmd)
static inline pmd_t __mk_pmd(pte_t *ptep, unsigned long prot) static inline void pmd_clear(pmd_t *pmdp)
{ {
unsigned long pte_ptr = (unsigned long)ptep; set_pmd(pmdp, __pmd(0));
pmd_t pmd; set_pmd(pmdp + 1, __pmd(0));
pte_ptr -= PTRS_PER_PTE * sizeof(void *);
/*
* The pmd must be loaded with the physical
* address of the PTE table
*/
pmd_val(pmd) = __virt_to_phys(pte_ptr) | prot;
return pmd;
} }
static inline unsigned long __pmd_page(pmd_t pmd) static inline pte_t *pmd_page_kernel(pmd_t pmd)
{ {
unsigned long ptr; unsigned long ptr;
ptr = pmd_val(pmd) & ~(PTRS_PER_PTE * sizeof(void *) - 1); ptr = pmd_val(pmd) & ~(PTRS_PER_PTE * sizeof(void *) - 1);
ptr += PTRS_PER_PTE * sizeof(void *); ptr += PTRS_PER_PTE * sizeof(void *);
return __phys_to_virt(ptr); return __va(ptr);
} }
#define pmd_page(pmd) virt_to_page(__va(pmd_val(pmd)))
#define pte_offset_kernel(dir,addr) (pmd_page_kernel(*(dir)) + __pte_index(addr))
#define pte_offset_map(dir,addr) (pmd_page_kernel(*(dir)) + __pte_index(addr))
#define pte_offset_map_nested(dir,addr) (pmd_page_kernel(*(dir)) + __pte_index(addr))
#define pte_unmap(pte) do { } while (0)
#define pte_unmap_nested(pte) do { } while (0)
#define set_pte(ptep, pte) cpu_set_pte(ptep,pte) #define set_pte(ptep, pte) cpu_set_pte(ptep,pte)
/* /*
...@@ -183,6 +185,8 @@ PTE_BIT_FUNC(mkyoung, |= L_PTE_YOUNG); ...@@ -183,6 +185,8 @@ PTE_BIT_FUNC(mkyoung, |= L_PTE_YOUNG);
*/ */
#define pgprot_noncached(prot) __pgprot(pgprot_val(prot) & ~(L_PTE_CACHEABLE | L_PTE_BUFFERABLE)) #define pgprot_noncached(prot) __pgprot(pgprot_val(prot) & ~(L_PTE_CACHEABLE | L_PTE_BUFFERABLE))
#define pgtable_cache_init() do { } while (0)
#endif /* __ASSEMBLY__ */ #endif /* __ASSEMBLY__ */
#endif /* __ASM_PROC_PGTABLE_H */ #endif /* __ASM_PROC_PGTABLE_H */
...@@ -28,8 +28,6 @@ ...@@ -28,8 +28,6 @@
/* /*
* CPU_NAME - the prefix for CPU related functions * CPU_NAME - the prefix for CPU related functions
* CPU_ABRT - the prefix for the CPU abort decoding function
* MMU_ARCH - the prefix for copy_user_page/clear_user_page
*/ */
#ifdef CONFIG_CPU_32 #ifdef CONFIG_CPU_32
...@@ -40,8 +38,6 @@ ...@@ -40,8 +38,6 @@
# define MULTI_CPU # define MULTI_CPU
# else # else
# define CPU_NAME cpu_arm6 # define CPU_NAME cpu_arm6
# define CPU_ABRT cpu_arm6
# define MMU_ARCH armv3
# endif # endif
# endif # endif
# ifdef CONFIG_CPU_ARM710 # ifdef CONFIG_CPU_ARM710
...@@ -50,8 +46,6 @@ ...@@ -50,8 +46,6 @@
# define MULTI_CPU # define MULTI_CPU
# else # else
# define CPU_NAME cpu_arm7 # define CPU_NAME cpu_arm7
# define CPU_ABRT cpu_arm7
# define MMU_ARCH armv3
# endif # endif
# endif # endif
# ifdef CONFIG_CPU_ARM720T # ifdef CONFIG_CPU_ARM720T
...@@ -60,8 +54,6 @@ ...@@ -60,8 +54,6 @@
# define MULTI_CPU # define MULTI_CPU
# else # else
# define CPU_NAME cpu_arm720 # define CPU_NAME cpu_arm720
# define CPU_ABRT armv4t_late
# define MMU_ARCH armv4
# endif # endif
# endif # endif
# ifdef CONFIG_CPU_ARM920T # ifdef CONFIG_CPU_ARM920T
...@@ -70,8 +62,6 @@ ...@@ -70,8 +62,6 @@
# define MULTI_CPU # define MULTI_CPU
# else # else
# define CPU_NAME cpu_arm920 # define CPU_NAME cpu_arm920
# define CPU_ABRT armv4t_early
# define MMU_ARCH armv4
# endif # endif
# endif # endif
# ifdef CONFIG_CPU_ARM922T # ifdef CONFIG_CPU_ARM922T
...@@ -80,8 +70,6 @@ ...@@ -80,8 +70,6 @@
# define MULTI_CPU # define MULTI_CPU
# else # else
# define CPU_NAME cpu_arm922 # define CPU_NAME cpu_arm922
# define CPU_ABRT armv4t_early
# define MMU_ARCH armv4
# endif # endif
# endif # endif
# ifdef CONFIG_CPU_ARM926T # ifdef CONFIG_CPU_ARM926T
...@@ -90,8 +78,6 @@ ...@@ -90,8 +78,6 @@
# define MULTI_CPU # define MULTI_CPU
# else # else
# define CPU_NAME cpu_arm926 # define CPU_NAME cpu_arm926
# define CPU_ABRT armv5ej_early
# define MMU_ARCH armv4
# endif # endif
# endif # endif
# ifdef CONFIG_CPU_SA110 # ifdef CONFIG_CPU_SA110
...@@ -100,8 +86,6 @@ ...@@ -100,8 +86,6 @@
# define MULTI_CPU # define MULTI_CPU
# else # else
# define CPU_NAME cpu_sa110 # define CPU_NAME cpu_sa110
# define CPU_ABRT armv4_early
# define MMU_ARCH armv4
# endif # endif
# endif # endif
# ifdef CONFIG_CPU_SA1100 # ifdef CONFIG_CPU_SA1100
...@@ -110,8 +94,6 @@ ...@@ -110,8 +94,6 @@
# define MULTI_CPU # define MULTI_CPU
# else # else
# define CPU_NAME cpu_sa1100 # define CPU_NAME cpu_sa1100
# define CPU_ABRT armv4_early
# define MMU_ARCH armv4_mc
# endif # endif
# endif # endif
# ifdef CONFIG_CPU_ARM1020 # ifdef CONFIG_CPU_ARM1020
...@@ -120,8 +102,6 @@ ...@@ -120,8 +102,6 @@
# define MULTI_CPU # define MULTI_CPU
# else # else
# define CPU_NAME cpu_arm1020 # define CPU_NAME cpu_arm1020
# define CPU_ABRT armv4t_early
# define MMU_ARCH armv4
# endif # endif
# endif # endif
# ifdef CONFIG_CPU_XSCALE # ifdef CONFIG_CPU_XSCALE
...@@ -130,8 +110,6 @@ ...@@ -130,8 +110,6 @@
# define MULTI_CPU # define MULTI_CPU
# else # else
# define CPU_NAME cpu_xscale # define CPU_NAME cpu_xscale
# define CPU_ABRT armv4t_early
# define MMU_ARCH armv5te
# endif # endif
# endif # endif
#endif #endif
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
#include <asm/proc-fns.h> #include <asm/proc-fns.h>
struct cpu_tlb_fns; struct cpu_tlb_fns;
struct cpu_user_fns;
struct processor; struct processor;
struct proc_info_item { struct proc_info_item {
...@@ -32,21 +33,22 @@ struct proc_info_item { ...@@ -32,21 +33,22 @@ struct proc_info_item {
* arch/arm/mm/proc-*.S and arch/arm/kernel/head-armv.S * arch/arm/mm/proc-*.S and arch/arm/kernel/head-armv.S
*/ */
struct proc_info_list { struct proc_info_list {
unsigned int cpu_val; unsigned int cpu_val;
unsigned int cpu_mask; unsigned int cpu_mask;
unsigned long __cpu_mmu_flags; /* used by head-armv.S */ unsigned long __cpu_mmu_flags; /* used by head-armv.S */
unsigned long __cpu_flush; /* used by head-armv.S */ unsigned long __cpu_flush; /* used by head-armv.S */
const char *arch_name; const char *arch_name;
const char *elf_name; const char *elf_name;
unsigned int elf_hwcap; unsigned int elf_hwcap;
struct proc_info_item *info; struct proc_info_item *info;
struct processor *proc; struct processor *proc;
struct cpu_tlb_fns *tlb; struct cpu_tlb_fns *tlb;
struct cpu_user_fns *user;
}; };
#endif /* __ASSEMBLY__ */ #endif /* __ASSEMBLY__ */
#define PROC_INFO_SZ 40 #define PROC_INFO_SZ 44
#define HWCAP_SWP 1 #define HWCAP_SWP 1
#define HWCAP_HALF 2 #define HWCAP_HALF 2
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment