diff -urN linux-2.4.21/arch/arm/boot/Makefile linux-2.4.21.zipit/arch/arm/boot/Makefile --- linux-2.4.21/arch/arm/boot/Makefile 2005-02-07 11:17:10.909496919 -0500 +++ linux-2.4.21.zipit/arch/arm/boot/Makefile 2004-03-15 14:53:15.000000000 -0500 @@ -117,6 +117,12 @@ ZRELADDR = 0x20008000 endif +ifeq ($(CONFIG_ARCH_ZIPLINE),y) +ZRELADDR = 0xc0028000 +PARAMS_PHYS = 0xc0020100 +INITRD_PHYS = 0xC0700000 +INITRD_VIRT = 0xFF700000 +endif # # We now have a PIC decompressor implementation. Decompressors running # from RAM should not define ZTEXTADDR. Decompressors running directly diff -urN linux-2.4.21/arch/arm/config.in linux-2.4.21.zipit/arch/arm/config.in --- linux-2.4.21/arch/arm/config.in 2005-02-07 11:17:10.964491890 -0500 +++ linux-2.4.21.zipit/arch/arm/config.in 2004-03-15 14:53:15.000000000 -0500 @@ -155,6 +155,7 @@ dep_bool ' FORTUNET' CONFIG_ARCH_FORTUNET $CONFIG_ARCH_CLPS711X dep_bool ' GUIDEA07' CONFIG_ARCH_GUIDEA07 $CONFIG_ARCH_CLPS711X dep_bool ' P720T' CONFIG_ARCH_P720T $CONFIG_ARCH_CLPS711X +dep_bool ' ZIPLINE' CONFIG_ARCH_ZIPLINE $CONFIG_ARCH_CLPS711X # XXX Maybe these should indicate register compatibility @@ -179,6 +180,9 @@ define_bool CONFIG_ARCH_CDB89712 y fi +if [ "$CONFIG_ARCH_ZIPLINE" = "y" ]; then + bool ' 90MHz' CONFIG_ZIPLINE_90MHZ +fi endmenu # Definitions to make life easier diff -urN linux-2.4.21/arch/arm/defconfig linux-2.4.21.zipit/arch/arm/defconfig --- linux-2.4.21/arch/arm/defconfig 2001-05-19 20:43:05.000000000 -0400 +++ linux-2.4.21.zipit/arch/arm/defconfig 2004-03-15 14:53:15.000000000 -0500 @@ -1,11 +1,15 @@ # -# Automatically generated make config: don't edit +# Automatically generated by make menuconfig: don't edit # CONFIG_ARM=y # CONFIG_EISA is not set # CONFIG_SBUS is not set # CONFIG_MCA is not set 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 @@ -16,82 +20,160 @@ # # Loadable module support # -# CONFIG_MODULES is not set +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +CONFIG_KMOD=y # # System Type # +# CONFIG_ARCH_ANAKIN is not set # CONFIG_ARCH_ARCA5K is not set # CONFIG_ARCH_CLPS7500 is not set +CONFIG_ARCH_CLPS711X=y # CONFIG_ARCH_CO285 is not set # CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_CAMELOT is not set # CONFIG_ARCH_FOOTBRIDGE is not set -CONFIG_ARCH_INTEGRATOR=y +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_OMAHA is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_MX1ADS is not set # CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_RISCSTATION is not set # CONFIG_ARCH_SA1100 is not set -# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_AT91RM9200 is not set # # Archimedes/A5000 Implementations # +# CONFIG_ARCH_ARC is not set +# CONFIG_ARCH_A5K is not set # # 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 # +# CONFIG_SA1100_ACCELENT is not set +# CONFIG_SA1100_ASSABET is not set +# CONFIG_ASSABET_NEPONSET is not set +# CONFIG_SA1100_ADSAGC is not set +# CONFIG_SA1100_ADSBITSY is not set +# CONFIG_SA1100_ADSBITSYPLUS is not set +# CONFIG_SA1100_BRUTUS is not set +# CONFIG_SA1100_CEP is not set +# CONFIG_SA1100_CERF 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_H3600_SLEEVE is not set +# CONFIG_SA1100_EXTENEX1 is not set +# CONFIG_SA1100_FLEXANET is not set +# CONFIG_SA1100_FREEBIRD is not set +# CONFIG_SA1100_FRODO is not set +# CONFIG_SA1100_GRAPHICSCLIENT is not set +# CONFIG_SA1100_GRAPHICSMASTER is not set +# CONFIG_SA1100_HACKKIT is not set +# CONFIG_SA1100_BADGE4 is not set +# CONFIG_SA1100_JORNADA720 is not set +# CONFIG_SA1100_HUW_WEBPANEL is not set +# CONFIG_SA1100_ITSY is not set +# CONFIG_SA1100_LART is not set +# CONFIG_SA1100_NANOENGINE is not set +# CONFIG_SA1100_OMNIMETER is not set +# CONFIG_SA1100_PANGOLIN is not set +# CONFIG_SA1100_PLEB is not set +# CONFIG_SA1100_PT_SYSTEM3 is not set +# CONFIG_SA1100_SHANNON is not set +# CONFIG_SA1100_SHERMAN is not set +# CONFIG_SA1100_SIMPAD is not set +# CONFIG_SA1100_SIMPUTER is not set +# CONFIG_SA1100_PFS168 is not set +# CONFIG_SA1100_VICTOR is not set +# CONFIG_SA1100_XP860 is not set +# CONFIG_SA1100_YOPY is not set +# CONFIG_SA1100_USB is not set +# CONFIG_SA1100_USB_NETLINK is not set +# CONFIG_SA1100_USB_CHAR is not set +# CONFIG_SA1100_SSP is not set + +# +# AT91RM9200 Implementations +# +# CONFIG_ARCH_AT91RM9200DK is not set # # 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_FORTUNET is not set +# CONFIG_ARCH_GUIDEA07 is not set +# CONFIG_ARCH_P720T is not set +CONFIG_ARCH_ZIPLINE=y +# CONFIG_ARCH_EP7211 is not set +# CONFIG_ARCH_EP7212 is not set +CONFIG_ZIPLINE_90MHZ=y # CONFIG_ARCH_ACORN is not set # CONFIG_FOOTBRIDGE is not set # CONFIG_FOOTBRIDGE_HOST is not set # CONFIG_FOOTBRIDGE_ADDIN is not set CONFIG_CPU_32=y # CONFIG_CPU_26 is not set - -# -# Processor Type -# +# CONFIG_CPU_ARM610 is not set +# CONFIG_CPU_ARM710 is not set +CONFIG_CPU_ARM720T=y +# CONFIG_CPU_ARM920T is not set +# CONFIG_CPU_ARM922T is not set +# CONFIG_PLD is not set +# CONFIG_CPU_ARM926T is not set +# CONFIG_CPU_ARM1020 is not set +# CONFIG_CPU_ARM1026 is not set +# CONFIG_CPU_SA110 is not set +# CONFIG_CPU_SA1100 is not set +# CONFIG_CPU_32v3 is not set CONFIG_CPU_32v4=y -CONFIG_CPU_ARM720=y -CONFIG_CPU_ARM920=y -CONFIG_CPU_ARM920_CPU_IDLE=y -CONFIG_CPU_ARM920_I_CACHE_ON=y -CONFIG_CPU_ARM920_D_CACHE_ON=y -# CONFIG_CPU_ARM920_WRITETHROUGH is not set +# CONFIG_ARM_THUMB is not set # CONFIG_DISCONTIGMEM is not set # # General setup # -# CONFIG_ANGELBOOT is not set -CONFIG_PCI_INTEGRATOR=y -CONFIG_PCI=y +# CONFIG_PCI is not set # CONFIG_ISA is not set # CONFIG_ISA_DMA is not set -CONFIG_PCI_NAMES=y +# CONFIG_ZBOOT_ROM is not set +CONFIG_ZBOOT_ROM_TEXT=0 +CONFIG_ZBOOT_ROM_BSS=0 # CONFIG_HOTPLUG is not set # CONFIG_PCMCIA is not set CONFIG_NET=y CONFIG_SYSVIPC=y # CONFIG_BSD_PROCESS_ACCT is not set CONFIG_SYSCTL=y -CONFIG_NWFPE=y +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set +# CONFIG_FPE_FASTFPE is not set CONFIG_KCORE_ELF=y # CONFIG_KCORE_AOUT is not set -CONFIG_BINFMT_AOUT=y +# CONFIG_BINFMT_AOUT is not set CONFIG_BINFMT_ELF=y # CONFIG_BINFMT_MISC is not set # CONFIG_PM is not set # CONFIG_ARTHUR is not set -CONFIG_CMDLINE="root=1f04 mem=32M" -CONFIG_LEDS=y -CONFIG_LEDS_TIMER=y -CONFIG_LEDS_CPU=y +CONFIG_CMDLINE="" CONFIG_ALIGNMENT_TRAP=y # @@ -102,44 +184,77 @@ # # Memory Technology Devices (MTD) # -CONFIG_MTD=y -# CONFIG_MTD_DOC1000 is not set -# CONFIG_MTD_DOC2000 is not set -# CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOCPROBE is not set -# CONFIG_MTD_SLRAM is not set -# CONFIG_MTD_PMC551 is not set -# CONFIG_MTD_MTDRAM is not set +CONFIG_MTD=m +CONFIG_MTD_DEBUG=y +CONFIG_MTD_DEBUG_VERBOSE=3 +# CONFIG_MTD_PARTITIONS is not set +# CONFIG_MTD_CONCAT is not set +# CONFIG_MTD_REDBOOT_PARTS is not set +# CONFIG_MTD_CMDLINE_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set +CONFIG_MTD_CHAR=m +CONFIG_MTD_BLOCK=m +# CONFIG_MTD_BLOCK_RO is not set +# CONFIG_FTL is not set +# CONFIG_NFTL is not set # -# MTD drivers for mapped chips +# RAM/ROM/Flash chip drivers # -CONFIG_MTD_CFI=y -CONFIG_MTD_CFI_INTELEXT=y -# CONFIG_MTD_CFI_AMDSTD is not set -# CONFIG_MTD_JEDEC is not set +CONFIG_MTD_CFI=m +CONFIG_MTD_JEDECPROBE=m +CONFIG_MTD_GEN_PROBE=m +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_CFI_INTELEXT=m +CONFIG_MTD_CFI_AMDSTD=m +CONFIG_MTD_CFI_STAA=m # CONFIG_MTD_RAM is not set # CONFIG_MTD_ROM is not set -# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_ABSENT 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 # -# Drivers for chip mappings +# Mapping drivers for chip access # -# CONFIG_MTD_MIXMEM is not set +CONFIG_MTD_PHYSMAP=m +CONFIG_MTD_PHYSMAP_START=FB000000 +CONFIG_MTD_PHYSMAP_LEN=200000 +CONFIG_MTD_PHYSMAP_BUSWIDTH=2 +CONFIG_MTD_ZIPLINE=m # CONFIG_MTD_NORA is not set -# CONFIG_MTD_OCTAGON is not set -# CONFIG_MTD_PNC2000 is not set -# CONFIG_MTD_RPXLITE is not set -# CONFIG_MTD_VMAX is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +# CONFIG_MTD_CDB89712 is not set +# CONFIG_MTD_SA1100 is not set +# CONFIG_MTD_DC21285 is not set +# CONFIG_MTD_IQ80310 is not set +# CONFIG_MTD_FORTUNET is not set +# CONFIG_MTD_EPXA is not set +# CONFIG_MTD_AUTCPU12 is not set +# CONFIG_MTD_EDB7312 is not set +# CONFIG_MTD_IMPA7 is not set +# CONFIG_MTD_CEIVA is not set +# CONFIG_MTD_PCI is not set +# CONFIG_MTD_PCMCIA is not set # -# User modules and translation layers for MTD devices +# Self-contained MTD device drivers # -CONFIG_MTD_CHAR=y -CONFIG_MTD_BLOCK=y -# CONFIG_FTL is not set -# CONFIG_NFTL is not set -CONFIG_MTD_ARM=y +# CONFIG_MTD_PMC551 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 + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set # # Plug and Play configuration @@ -155,40 +270,57 @@ # 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_UMEM is not set # CONFIG_BLK_DEV_LOOP is not set # CONFIG_BLK_DEV_NBD is not set CONFIG_BLK_DEV_RAM=y -CONFIG_BLK_DEV_RAM_SIZE=4096 -# CONFIG_BLK_DEV_INITRD is not set +CONFIG_BLK_DEV_RAM_SIZE=3072 +CONFIG_BLK_DEV_INITRD=y +# CONFIG_BLK_STATS is not set + +# +# Multi-device support (RAID and LVM) +# +# 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 # -# CONFIG_PACKET is not set -# CONFIG_NETLINK is not set +CONFIG_PACKET=y +CONFIG_PACKET_MMAP=y +# CONFIG_NETLINK_DEV is not set # CONFIG_NETFILTER is not set # CONFIG_FILTER is not set CONFIG_UNIX=y CONFIG_INET=y # CONFIG_IP_MULTICAST is not set # CONFIG_IP_ADVANCED_ROUTER is not set -CONFIG_IP_PNP=y -CONFIG_IP_PNP_BOOTP=y -# CONFIG_IP_PNP_RARP is not set +# CONFIG_IP_PNP is not set # CONFIG_NET_IPIP is not set # CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set # CONFIG_INET_ECN is not set # CONFIG_SYN_COOKIES is not set # CONFIG_IPV6 is not set # CONFIG_KHTTPD is not set # CONFIG_ATM is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set # -# +# Appletalk devices # -# CONFIG_IPX is not set -# CONFIG_ATALK is not set +# CONFIG_DEV_APPLETALK is not set # CONFIG_DECNET is not set # CONFIG_BRIDGE is not set # CONFIG_X25 is not set @@ -206,6 +338,11 @@ # CONFIG_NET_SCHED is not set # +# Network testing +# +# CONFIG_NET_PKTGEN is not set + +# # Network device support # CONFIG_NETDEVICES=y @@ -218,63 +355,57 @@ # CONFIG_BONDING is not set # CONFIG_EQUALIZER is not set # CONFIG_TUN is not set -# CONFIG_NET_SB1000 is not set +# CONFIG_ETHERTAP is not set # # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y +# CONFIG_ARM_AM79C961A is not set +CONFIG_CS89x0=y +# CONFIG_SUNLANCE is not set +# CONFIG_SUNBMAC is not set +# CONFIG_SUNQE is not set +# CONFIG_SUNGEM is not set # CONFIG_NET_VENDOR_3COM is not set # CONFIG_LANCE is not set # CONFIG_NET_VENDOR_SMC is not set # CONFIG_NET_VENDOR_RACAL is not set -# CONFIG_AT1700 is not set -# CONFIG_DEPCA is not set -# CONFIG_HP100 is not set # CONFIG_NET_ISA is not set -CONFIG_NET_PCI=y -# CONFIG_PCNET32 is not set -# CONFIG_ADAPTEC_STARFIRE is not set -# CONFIG_APRICOT is not set -# CONFIG_CS89x0 is not set -CONFIG_TULIP=y -# CONFIG_DE4X5 is not set -# CONFIG_DGRS is not set -# CONFIG_DM9102 is not set -CONFIG_EEPRO100=y -CONFIG_EEPRO100_PM=y -# CONFIG_LNE390 is not set -# CONFIG_NATSEMI is not set -# CONFIG_NE2K_PCI is not set -# CONFIG_NE3210 is not set -# CONFIG_ES3210 is not set -# CONFIG_8139TOO is not set -# CONFIG_RTL8129 is not set -# CONFIG_SIS900 is not set -# CONFIG_EPIC100 is not set -# CONFIG_SUNDANCE is not set -# CONFIG_TLAN is not set -# CONFIG_VIA_RHINE is not set -# CONFIG_WINBOND_840 is not set -# CONFIG_HAPPYMEAL is not set +# CONFIG_NET_PCI is not set # CONFIG_NET_POCKET is not set # # Ethernet (1000 Mbit) # # CONFIG_ACENIC is not set +# CONFIG_DL2K is not set +# CONFIG_E1000 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_R8169 is not set # CONFIG_SK98LIN is not set +# CONFIG_TIGON3 is not set # CONFIG_FDDI is not set # CONFIG_HIPPI is not set +# CONFIG_PLIP is not set # CONFIG_PPP is not set # CONFIG_SLIP is not set # # Wireless LAN (non-hamradio) # -# CONFIG_NET_RADIO is not set +CONFIG_NET_RADIO=y +# CONFIG_STRIP is not set +# CONFIG_WAVELAN is not set +# CONFIG_ARLAN is not set +# CONFIG_AIRONET4500 is not set +# CONFIG_AIRONET4500_NONCS is not set +# CONFIG_AIRONET4500_PROC is not set +# CONFIG_HERMES is not set +# CONFIG_NET_WIRELESS is not set # # Token Ring devices @@ -300,7 +431,7 @@ # CONFIG_IRDA is not set # -# ATA/IDE/MFM/RLL support +# ATA/ATAPI/MFM/RLL support # # CONFIG_IDE is not set # CONFIG_BLK_DEV_IDE_MODES is not set @@ -312,15 +443,16 @@ # CONFIG_SCSI is not set # -# IEEE 1394 (FireWire) support +# Synchronous Serial Interface # -# CONFIG_IEEE1394 is not set +# CONFIG_SSI is not set +# CONFIG_SSI_CLPS711X is not set +# CONFIG_SSI_JUNO is not set # # I2O device support # # CONFIG_I2O is not set -# CONFIG_I2O_PCI is not set # CONFIG_I2O_BLOCK is not set # CONFIG_I2O_LAN is not set # CONFIG_I2O_SCSI is not set @@ -335,20 +467,51 @@ # Input core support # # CONFIG_INPUT is not set +# CONFIG_INPUT_KEYBDEV is not set +# CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set +# CONFIG_INPUT_MX1TS is not set # # Character devices # -CONFIG_VT=y -CONFIG_VT_CONSOLE=y +# CONFIG_VT is not set # CONFIG_SERIAL is not set # CONFIG_SERIAL_EXTENDED is not set # CONFIG_SERIAL_NONSTANDARD is not set -CONFIG_SERIAL_AMBA=y -CONFIG_SERIAL_INTEGRATOR=y -CONFIG_SERIAL_AMBA_CONSOLE=y -CONFIG_UNIX98_PTYS=y -CONFIG_UNIX98_PTY_COUNT=256 + +# +# 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=y +CONFIG_SERIAL_CLPS711X_CONSOLE=y +# 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 is not set +# CONFIG_SERIAL_SA1100_CONSOLE is not set +# CONFIG_SERIAL_OMAHA is not set +# CONFIG_SERIAL_OMAHA_CONSOLE is not set +# CONFIG_SERIAL_AT91 is not set +# CONFIG_SERIAL_AT91_CONSOLE is not set +# CONFIG_SERIAL_8250 is not set +# CONFIG_SERIAL_8250_CONSOLE 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_HUB6 is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_UNIX98_PTYS is not set # # I2C support @@ -356,29 +519,37 @@ # CONFIG_I2C is not set # -# Mice +# L3 serial bus support # -# CONFIG_BUSMOUSE is not set -CONFIG_MOUSE=y -CONFIG_PSMOUSE=y -# CONFIG_82C710_MOUSE is not set -# CONFIG_PC110_PAD is not set +# 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 # -# Joysticks +# Mice # -# CONFIG_JOYSTICK is not set +# CONFIG_BUSMOUSE is not set +# CONFIG_MOUSE is not set # -# Input core support is needed for joysticks +# Joysticks # +# CONFIG_INPUT_GAMEPORT is not set # CONFIG_QIC02_TAPE is not set +# CONFIG_IPMI_HANDLER is not set +# CONFIG_IPMI_PANIC_EVENT is not set +# CONFIG_IPMI_DEVICE_INTERFACE is not set +# CONFIG_IPMI_KCS is not set +# CONFIG_IPMI_WATCHDOG is not set # # Watchdog Cards # # CONFIG_WATCHDOG is not set -# CONFIG_INTEL_RNG is not set +# CONFIG_SCx200_GPIO is not set +# CONFIG_AMD_PM768 is not set # CONFIG_NVRAM is not set # CONFIG_RTC is not set # CONFIG_DTLK is not set @@ -403,22 +574,37 @@ # CONFIG_QUOTA is not set # CONFIG_AUTOFS_FS is not set # CONFIG_AUTOFS4_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_RW is not set # CONFIG_AFFS_FS is not set # CONFIG_HFS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BEFS_DEBUG is not set # CONFIG_BFS_FS is not set +# CONFIG_EXT3_FS is not set +# 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_VFAT_FS is not set # CONFIG_EFS_FS is not set # CONFIG_JFFS_FS is not set +# CONFIG_JFFS2_FS is not set # CONFIG_CRAMFS is not set -# CONFIG_RAMFS is not set +# CONFIG_TMPFS is not set +CONFIG_RAMFS=y # CONFIG_ISO9660_FS is not set # CONFIG_JOLIET is not set +# CONFIG_ZISOFS is not set +# CONFIG_JFS_FS is not set +# CONFIG_JFS_DEBUG is not set +# CONFIG_JFS_STATISTICS is not set # CONFIG_MINIX_FS is not set +# CONFIG_VXFS_FS is not set # CONFIG_NTFS_FS is not set # CONFIG_NTFS_RW is not set # CONFIG_HPFS_FS is not set @@ -426,13 +612,12 @@ # CONFIG_DEVFS_FS is not set # CONFIG_DEVFS_MOUNT is not set # CONFIG_DEVFS_DEBUG is not set -CONFIG_DEVPTS_FS=y +# CONFIG_DEVPTS_FS is not set # CONFIG_QNX4FS_FS is not set # CONFIG_QNX4FS_RW is not set -CONFIG_ROMFS_FS=y +# CONFIG_ROMFS_FS is not set CONFIG_EXT2_FS=y # CONFIG_SYSV_FS is not set -# CONFIG_SYSV_FS_WRITE is not set # CONFIG_UDF_FS is not set # CONFIG_UDF_RW is not set # CONFIG_UFS_FS is not set @@ -442,13 +627,16 @@ # Network File Systems # # CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set CONFIG_NFS_FS=y -# CONFIG_NFS_V3 is not set -CONFIG_ROOT_NFS=y +CONFIG_NFS_V3=y +# CONFIG_ROOT_NFS is not set # CONFIG_NFSD is not set # CONFIG_NFSD_V3 is not set +# CONFIG_NFSD_TCP is not set CONFIG_SUNRPC=y CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y # CONFIG_SMB_FS is not set # CONFIG_NCP_FS is not set # CONFIG_NCPFS_PACKET_SIGNING is not set @@ -457,55 +645,57 @@ # CONFIG_NCPFS_NFS_NS is not set # CONFIG_NCPFS_OS2_NS is not set # CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_MOUNT_SUBDIR is not set -# CONFIG_NCPFS_NDS_DOMAINS is not set # CONFIG_NCPFS_NLS is not set # CONFIG_NCPFS_EXTRAS is not set +# CONFIG_ZISOFS_FS is not set # # Partition Types # -CONFIG_PARTITION_ADVANCED=y -# CONFIG_ACORN_PARTITION is not set -# CONFIG_OSF_PARTITION is not set -# CONFIG_AMIGA_PARTITION is not set -# CONFIG_ATARI_PARTITION is not set -# CONFIG_MAC_PARTITION is not set -# CONFIG_MSDOS_PARTITION is not set -# CONFIG_SGI_PARTITION is not set -# CONFIG_ULTRIX_PARTITION is not set -# CONFIG_SUN_PARTITION is not set +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_SMB_NLS is not set # CONFIG_NLS is not set # -# Console drivers +# Multimedia Capabilities Port drivers # -CONFIG_KMI_KEYB=y -CONFIG_PC_KEYMAP=y -CONFIG_VGA_CONSOLE=y -# CONFIG_FB is not set +# 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 # -# Frame-buffer support -# -# CONFIG_FB is not set - -# -# Sound +# USB support # -# CONFIG_SOUND is not set +# CONFIG_USB is not set # -# USB support +# Bluetooth support # -# CONFIG_USB is not set +# CONFIG_BLUEZ is not set # # Kernel hacking # CONFIG_FRAME_POINTER=y -CONFIG_DEBUG_ERRORS=y CONFIG_DEBUG_USER=y # CONFIG_DEBUG_INFO is not set -CONFIG_MAGIC_SYSRQ=y -CONFIG_DEBUG_LL=y +# CONFIG_NO_PGT_CACHE is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_SLAB is not set +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_WAITQ is not set +CONFIG_DEBUG_BUGVERBOSE=y +CONFIG_DEBUG_ERRORS=y +# CONFIG_DEBUG_LL is not set +# CONFIG_DEBUG_DC21285_PORT is not set +# CONFIG_DEBUG_CLPS711X_UART2 is not set + +# +# Library routines +# +# CONFIG_ZLIB_INFLATE is not set +# CONFIG_ZLIB_DEFLATE is not set diff -urN linux-2.4.21/arch/arm/defconfig.bak linux-2.4.21.zipit/arch/arm/defconfig.bak --- linux-2.4.21/arch/arm/defconfig.bak 1969-12-31 19:00:00.000000000 -0500 +++ linux-2.4.21.zipit/arch/arm/defconfig.bak 2004-03-15 14:53:17.000000000 -0500 @@ -0,0 +1,511 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +# CONFIG_EISA is not set +# CONFIG_SBUS is not set +# CONFIG_MCA is not set +CONFIG_UID16=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +# CONFIG_OBSOLETE is not set + +# +# Loadable module support +# +# CONFIG_MODULES is not set + +# +# System Type +# +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +CONFIG_ARCH_INTEGRATOR=y +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_CLPS711X is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Footbridge Implementations +# + +# +# SA11x0 Implementations +# + +# +# CLPS711X/EP721X Implementations +# +# CONFIG_ARCH_ACORN is not set +# CONFIG_FOOTBRIDGE is not set +# CONFIG_FOOTBRIDGE_HOST is not set +# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_CPU_32=y +# CONFIG_CPU_26 is not set + +# +# Processor Type +# +CONFIG_CPU_32v4=y +CONFIG_CPU_ARM720=y +CONFIG_CPU_ARM920=y +CONFIG_CPU_ARM920_CPU_IDLE=y +CONFIG_CPU_ARM920_I_CACHE_ON=y +CONFIG_CPU_ARM920_D_CACHE_ON=y +# CONFIG_CPU_ARM920_WRITETHROUGH is not set +# CONFIG_DISCONTIGMEM is not set + +# +# General setup +# +# CONFIG_ANGELBOOT is not set +CONFIG_PCI_INTEGRATOR=y +CONFIG_PCI=y +# CONFIG_ISA is not set +# CONFIG_ISA_DMA is not set +CONFIG_PCI_NAMES=y +# CONFIG_HOTPLUG is not set +# CONFIG_PCMCIA is not set +CONFIG_NET=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_NWFPE=y +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +CONFIG_BINFMT_AOUT=y +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="" +CONFIG_LEDS=y +CONFIG_LEDS_TIMER=y +CONFIG_LEDS_CPU=y +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set +# CONFIG_MTD_DOCPROBE is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_MTDRAM is not set + +# +# MTD drivers for mapped chips +# +CONFIG_MTD_CFI=y +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_JEDEC is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_PHYSMAP is not set + +# +# Drivers for chip mappings +# +# CONFIG_MTD_MIXMEM is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_OCTAGON is not set +# CONFIG_MTD_PNC2000 is not set +# CONFIG_MTD_RPXLITE is not set +# CONFIG_MTD_VMAX is not set + +# +# User modules and translation layers for MTD devices +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +CONFIG_MTD_ARM=y + +# +# Plug and Play configuration +# +# CONFIG_PNP is not set +# CONFIG_ISAPNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_XD is not set +# CONFIG_PARIDE is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +# CONFIG_BLK_DEV_INITRD is not set + +# +# Networking options +# +# CONFIG_PACKET is not set +# CONFIG_NETLINK is not set +# CONFIG_NETFILTER is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_PNP=y +CONFIG_IP_PNP_BOOTP=y +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set +# CONFIG_ATM is not set + +# +# +# +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_LLC is not set +# CONFIG_NET_DIVERT is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_NET_FASTROUTE is not set +# CONFIG_NET_HW_FLOWCONTROL is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network device support +# +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set +# CONFIG_NET_SB1000 is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_NET_VENDOR_3COM is not set +# CONFIG_LANCE is not set +# CONFIG_NET_VENDOR_SMC is not set +# CONFIG_NET_VENDOR_RACAL is not set +# CONFIG_AT1700 is not set +# CONFIG_DEPCA is not set +# CONFIG_HP100 is not set +# CONFIG_NET_ISA is not set +CONFIG_NET_PCI=y +# CONFIG_PCNET32 is not set +# CONFIG_ADAPTEC_STARFIRE is not set +# CONFIG_APRICOT is not set +# CONFIG_CS89x0 is not set +CONFIG_TULIP=y +# CONFIG_DE4X5 is not set +# CONFIG_DGRS is not set +# CONFIG_DM9102 is not set +CONFIG_EEPRO100=y +CONFIG_EEPRO100_PM=y +# CONFIG_LNE390 is not set +# CONFIG_NATSEMI is not set +# CONFIG_NE2K_PCI is not set +# CONFIG_NE3210 is not set +# CONFIG_ES3210 is not set +# CONFIG_8139TOO is not set +# CONFIG_RTL8129 is not set +# CONFIG_SIS900 is not set +# CONFIG_EPIC100 is not set +# CONFIG_SUNDANCE is not set +# CONFIG_TLAN is not set +# CONFIG_VIA_RHINE is not set +# CONFIG_WINBOND_840 is not set +# CONFIG_HAPPYMEAL is not set +# CONFIG_NET_POCKET is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_HAMACHI is not set +# CONFIG_YELLOWFIN is not set +# CONFIG_SK98LIN is not set +# CONFIG_FDDI is not set +# CONFIG_HIPPI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices +# +# CONFIG_TR is not set +# CONFIG_NET_FC is not set +# CONFIG_RCPCI is not set +# CONFIG_SHAPER is not set + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# ATA/IDE/MFM/RLL support +# +# CONFIG_IDE is not set +# CONFIG_BLK_DEV_IDE_MODES is not set +# CONFIG_BLK_DEV_HD is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# IEEE 1394 (FireWire) support +# +# CONFIG_IEEE1394 is not set + +# +# I2O device support +# +# CONFIG_I2O is not set +# CONFIG_I2O_PCI is not set +# CONFIG_I2O_BLOCK is not set +# CONFIG_I2O_LAN is not set +# CONFIG_I2O_SCSI is not set +# CONFIG_I2O_PROC is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Input core support +# +# CONFIG_INPUT is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +# CONFIG_SERIAL is not set +# CONFIG_SERIAL_EXTENDED is not set +# CONFIG_SERIAL_NONSTANDARD is not set +CONFIG_SERIAL_AMBA=y +CONFIG_SERIAL_INTEGRATOR=y +CONFIG_SERIAL_AMBA_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=256 + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +CONFIG_MOUSE=y +CONFIG_PSMOUSE=y +# CONFIG_82C710_MOUSE is not set +# CONFIG_PC110_PAD is not set + +# +# Joysticks +# +# CONFIG_JOYSTICK is not set + +# +# Input core support is needed for joysticks +# +# CONFIG_QIC02_TAPE is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set +# CONFIG_ADFS_FS is not set +# CONFIG_ADFS_FS_RW is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_FAT_FS is not set +# CONFIG_MSDOS_FS is not set +# CONFIG_UMSDOS_FS is not set +# CONFIG_VFAT_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_RAMFS is not set +# CONFIG_ISO9660_FS is not set +# CONFIG_JOLIET is not set +# CONFIG_MINIX_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_NTFS_RW is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_DEVFS_MOUNT is not set +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +CONFIG_ROMFS_FS=y +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_SYSV_FS_WRITE is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +CONFIG_ROOT_NFS=y +# CONFIG_NFSD is not set +# CONFIG_NFSD_V3 is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +# CONFIG_SMB_FS is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_MOUNT_SUBDIR is not set +# CONFIG_NCPFS_NDS_DOMAINS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=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 is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_NLS is not set + +# +# Console drivers +# +CONFIG_KMI_KEYB=y +CONFIG_PC_KEYMAP=y +CONFIG_VGA_CONSOLE=y +# CONFIG_FB is not set + +# +# Frame-buffer support +# +# CONFIG_FB is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_ERRORS=y +CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_INFO is not set +CONFIG_MAGIC_SYSRQ=y +CONFIG_DEBUG_LL=y diff -urN linux-2.4.21/arch/arm/kernel/irq.c linux-2.4.21.zipit/arch/arm/kernel/irq.c --- linux-2.4.21/arch/arm/kernel/irq.c 2005-02-07 11:17:11.195470769 -0500 +++ linux-2.4.21.zipit/arch/arm/kernel/irq.c 2004-03-15 14:53:15.000000000 -0500 @@ -145,7 +145,7 @@ *p++ = '\n'; } -#ifdef CONFIG_ARCH_ACORN +#if defined (CONFIG_ARCH_ACORN) || defined (CONFIG_ARCH_ZIPLINE) p += get_fiq_list(p); #endif p += sprintf(p, "Err: %10lu\n", irq_err_count); diff -urN linux-2.4.21/arch/arm/kernel/Makefile linux-2.4.21.zipit/arch/arm/kernel/Makefile --- linux-2.4.21/arch/arm/kernel/Makefile 2005-02-07 11:17:11.126477078 -0500 +++ linux-2.4.21.zipit/arch/arm/kernel/Makefile 2004-03-15 14:53:15.000000000 -0500 @@ -19,6 +19,7 @@ O_OBJS_footbridge = dma-footbridge.o isa.o O_OBJS_l7200 = fiq.o O_OBJS_riscstation = fiq.o dma-riscstation.o +O_OBJS_zipline = fiq.o pci-ftvpci = plx90x0.o pci-footbridge = dec21285.o @@ -59,6 +60,7 @@ obj-$(CONFIG_ARTHUR) += arthur.o obj-$(CONFIG_ISA_DMA) += dma-isa.o obj-$(CONFIG_PCI) += bios32.o $(pci-$(MACHINE)) $(pci-y) +obj-$(CONFIG_ARCH_ZIPLINE) += fiq.o ifneq ($(MACHINE),ebsa110) obj-y += io.o diff -urN linux-2.4.21/arch/arm/lib/delay.txt linux-2.4.21.zipit/arch/arm/lib/delay.txt --- linux-2.4.21/arch/arm/lib/delay.txt 1969-12-31 19:00:00.000000000 -0500 +++ linux-2.4.21.zipit/arch/arm/lib/delay.txt 2004-04-25 14:30:54.000000000 -0400 @@ -0,0 +1,38 @@ + +delay.o: file format elf32-littlearm + +Disassembly of section .text: + +00000000 : + 0: 00000000 andeq r0, r0, r0 + 0: R_ARM_ABS32 loops_per_jiffy + +00000004 <__const_delay>: + 4: e51f300c ldr r3, [pc, #-12] ; 0 + 8: e1a015a0 mov r1, r0, lsr #11 + c: e5932000 ldr r2, [r3] + 10: ea00000b b 34 <__udelay+0x18> + 10: R_ARM_PC24 .text + +00000014 <__ndelay>: + 14: e3a0201b mov r2, #27 ; 0x1b + 18: ea000007 b 24 <__udelay+0x8> + 18: R_ARM_PC24 .text + +0000001c <__udelay>: + 1c: e3a02b1a mov r2, #26624 ; 0x6800 + 20: e38220db orr r2, r2, #219 ; 0xdb + 24: e51f302c ldr r3, [pc, #-44] ; 0 + 28: e0010290 mul r1, r0, r2 + 2c: e5932000 ldr r2, [r3] + 30: e1a015a1 mov r1, r1, lsr #11 + 34: e1a02622 mov r2, r2, lsr #12 + 38: e0000291 mul r0, r1, r2 + 3c: e1b002a0 movs r0, r0, lsr #5 + 40: 01a0f00e moveq pc, lr + +00000044 <__delay>: + 44: e2500001 subs r0, r0, #1 ; 0x1 + 48: 2afffffe bcs 0 + 48: R_ARM_PC24 __delay + 4c: e1a0f00e mov pc, lr diff -urN linux-2.4.21/arch/arm/mach-clps711x/Makefile linux-2.4.21.zipit/arch/arm/mach-clps711x/Makefile --- linux-2.4.21/arch/arm/mach-clps711x/Makefile 2005-02-07 11:17:11.283462722 -0500 +++ linux-2.4.21.zipit/arch/arm/mach-clps711x/Makefile 2004-03-15 14:53:15.000000000 -0500 @@ -27,5 +27,6 @@ obj-$(CONFIG_ARCH_FORTUNET) += fortunet.o leds-$(CONFIG_ARCH_P720T) += p720t-leds.o obj-$(CONFIG_LEDS) += $(leds-y) +obj-$(CONFIG_ARCH_ZIPLINE) += zipline.o include $(TOPDIR)/Rules.make diff -urN linux-2.4.21/arch/arm/mach-clps711x/mm.c linux-2.4.21.zipit/arch/arm/mach-clps711x/mm.c --- linux-2.4.21/arch/arm/mach-clps711x/mm.c 2002-08-02 20:39:42.000000000 -0400 +++ linux-2.4.21.zipit/arch/arm/mach-clps711x/mm.c 2004-03-15 14:53:15.000000000 -0500 @@ -60,7 +60,7 @@ * This maps the generic CLPS711x registers */ static struct map_desc clps711x_io_desc[] __initdata = { - { CLPS7111_VIRT_BASE, CLPS7111_PHYS_BASE, 1048576, DOMAIN_IO, 0, 1 }, + { CLPS7111_VIRT_BASE, CLPS7111_PHYS_BASE, 1048576, DOMAIN_IO, 1, 1 }, LAST_DESC }; diff -urN linux-2.4.21/arch/arm/mach-clps711x/zipline.c linux-2.4.21.zipit/arch/arm/mach-clps711x/zipline.c --- linux-2.4.21/arch/arm/mach-clps711x/zipline.c 1969-12-31 19:00:00.000000000 -0500 +++ linux-2.4.21.zipit/arch/arm/mach-clps711x/zipline.c 2004-04-21 12:01:30.000000000 -0400 @@ -0,0 +1,117 @@ +/* + * linux/arch/arm/mach-clps711x/zipline.c + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +extern void zipline_init_irq(void); +extern void clps711x_init_irq(void); +extern void clps711x_map_io(void); + +#define MB1 1048576 /* one megabyte == size of an MMU section */ + +/* + * The on-chip registers are given a size of 1MB so that a section can + * be used to map them; this saves a page table. This is the place to + * add mappings for ROM, expansion memory, PCMCIA, etc. (if static + * mappings are chosen for those areas). + * + * Here is a physical memory map (to be fleshed out later): + * + * Physical Address Size Description + * ----------------- ----- --------------------------------- + * c0000000-c001ffff 128KB reserved for video RAM [1] + * c0020000-c0023fff 16KB parameters (see Documentation/arm/Setup) + * c0024000-c0027fff 16KB swapper_pg_dir (task 0 page directory) + * c0028000-... kernel image (TEXTADDR) + * + * [1] Unused pages should be given back to the VM; they are not yet. + * The parameter block should also be released (not sure if this + * happens). + */ +static struct map_desc zipline_io_desc[] __initdata = { + /* virtual, physical, length, domain, r, w, c, b */ + + /* Frame Buffer memory */ + { ZIPLINE_VIRT_SDRAM_FRAMEBUFFER, ZIPLINE_PHYS_SDRAM_FRAMEBUFFER, MB1, DOMAIN_IO, 1, 1, 1, 1 }, + + /* Internal SRAM and CS8900A Ethernet chip */ + { ZIPLINE_VIRT_SRAM_CONFIG, ZIPLINE_PHYS_SRAM_CONFIG, MB1, DOMAIN_IO, 1, 1, 1, 1 }, + { ZIPLINE_VIRT_CS8900A, ZIPLINE_PHYS_CS8900A, MB1, DOMAIN_IO, 1, 1, 0, 0 }, + /* Need to add NAND flash, PS/2, IDE, Parallel and others */ + + /* flash banks */ + { ZIPLINE_VIRT_FLASH, ZIPLINE_PHYS_FLASH, MB1 * 16, DOMAIN_IO, 1, 1, 0, 0 }, + + { ZIPLINE_VIRT_RADIO_IO, ZIPLINE_PHYS_RADIO_IO, MB1, DOMAIN_IO, 1, 1, 0, 0 }, + { ZIPLINE_VIRT_RADIO_CONFIG, ZIPLINE_PHYS_RADIO_CONFIG, MB1, DOMAIN_IO, 1, 1, 0, 0 }, + + LAST_DESC +}; + +void __init zipline_map_io(void) +{ + clps711x_map_io(); + iotable_init(zipline_io_desc); +} + +static void __init +fixup_zipline(struct machine_desc *desc, struct param_struct *params, + char **cmdline, struct meminfo *mi) +{ +/* + mi->nr_banks=1; + mi->end = 0xc0FFFFFF; + mi->bank[0].start = 0xc0000000; + mi->bank[0].size = 0x01000000; + mi->bank[0].node = 0; + +#ifdef CONFIG_BLK_DEV_INITRD + params->u1.s.page_size=0x1000; + params->u1.s.nr_pages=0x1000; + params->u1.s.ramdisk_size=0xC00; + params->u1.s.flags=FLAG_RDPROMPT; + params->u1.s.rootdev=0x100; + params->u1.s.initrd_start=__phys_to_virt(0xc0600000); + params->u1.s.initrd_size=0x200000; + params->u1.s.rd_start=0x0; + strcpy(params->commandline, ""); +#endif +*/ +} + + +MACHINE_START(ZIPLINE, "ZipLine - Cirrus Logic 7312") + MAINTAINER("Aeronix, Inc.") + BOOT_MEM(0xc0000000, 0x80000000, 0xff000000) + BOOT_PARAMS(0xc0020000) + FIXUP(fixup_zipline) + MAPIO(zipline_map_io) +/* zipline TODO INITIRQ(ep7312_init_irq)*/ + INITIRQ(clps711x_init_irq) +MACHINE_END diff -urN linux-2.4.21/arch/arm/mm/init.c linux-2.4.21.zipit/arch/arm/mm/init.c --- linux-2.4.21/arch/arm/mm/init.c 2005-02-07 11:17:11.516441418 -0500 +++ linux-2.4.21.zipit/arch/arm/mm/init.c 2004-04-21 11:12:48.000000000 -0400 @@ -383,6 +383,11 @@ reserve_bootmem_node(pgdat, 0xc0000000, 0x00020000); if (machine_is_p720t()) reserve_bootmem_node(pgdat, PHYS_OFFSET, 0x00014000); + +#ifdef CONFIG_ARCH_ZIPLINE + reserve_bootmem_node(pgdat, 0xc0000000, 0x00020000); +#endif + #ifdef CONFIG_SA1111 /* * Because of the SA1111 DMA bug, we want to preserve diff -urN linux-2.4.21/arch/arm/tools/mach-types linux-2.4.21.zipit/arch/arm/tools/mach-types --- linux-2.4.21/arch/arm/tools/mach-types 2005-02-07 11:17:11.660428251 -0500 +++ linux-2.4.21.zipit/arch/arm/tools/mach-types 2004-03-15 14:53:16.000000000 -0500 @@ -139,7 +139,7 @@ s24x ARCH_S24X S24X 128 jtel_clep7312 ARCH_JTEL_CLEP7312 JTEL_CLEP7312 129 cx821xx ARCH_CX821XX CX821XX 130 -edb7312 ARCH_EDB7312 EDB7312 131 +edb7312 ARCH_EDB7312 EDB7312 355 bsa1110 SA1100_BSA1110 BSA1110 132 powerpin ARCH_POWERPIN POWERPIN 133 openarm ARCH_OPENARM OPENARM 134 @@ -363,3 +363,4 @@ ixrd425 ARCH_IXRD425 IXRD425 352 iq80315 ARCH_IQ80315 IQ80315 353 nmp7312 ARCH_NMP7312 NMP7312 354 +zipline ARCH_ZIPLINE ZIPLINE 131 diff -urN linux-2.4.21/drivers/block/rd.c linux-2.4.21.zipit/drivers/block/rd.c --- linux-2.4.21/drivers/block/rd.c 2002-11-28 18:53:12.000000000 -0500 +++ linux-2.4.21.zipit/drivers/block/rd.c 2004-03-15 14:52:32.000000000 -0500 @@ -61,7 +61,11 @@ #include /* The RAM disk size is now a parameter */ -#define NUM_RAMDISKS 16 /* This cannot be overridden (yet) */ +#ifdef CONFIG_ARCH_ZIPLINE +#define NUM_RAMDISKS 1 +#else +#define NUM_RAMDISKS 16 /* This cannot be overridden (yet) */ +#endif /* CONFIG_ARCH_ZIPLINE */ #ifdef CONFIG_BLK_DEV_INITRD static int initrd_users; diff -urN linux-2.4.21/drivers/Makefile linux-2.4.21.zipit/drivers/Makefile --- linux-2.4.21/drivers/Makefile 2005-02-07 11:17:11.834412341 -0500 +++ linux-2.4.21.zipit/drivers/Makefile 2004-03-15 14:52:27.000000000 -0500 @@ -10,7 +10,7 @@ message/i2o message/fusion scsi md ieee1394 pnp isdn atm \ fc4 net/hamradio i2c l3 acpi bluetooth serial -subdir-y := parport serial char block net sound misc media cdrom hotplug pld +subdir-y := parport serial char block net sound misc cdrom hotplug pld subdir-m := $(subdir-y) diff -urN linux-2.4.21/drivers/mtd/chips/cfi_probe.c linux-2.4.21.zipit/drivers/mtd/chips/cfi_probe.c --- linux-2.4.21/drivers/mtd/chips/cfi_probe.c 2005-02-07 11:17:13.033302709 -0500 +++ linux-2.4.21.zipit/drivers/mtd/chips/cfi_probe.c 2004-03-15 14:52:58.000000000 -0500 @@ -65,10 +65,6 @@ return 0; } cfi_send_gen_cmd(0xF0, 0, base, map, cfi, cfi->device_type, NULL); - - /* some devices don't respond to 0xF0, so send 0xFF to be sure */ - cfi_send_gen_cmd(0xFF, 0, base, map, cfi, cfi->device_type, NULL); - cfi_send_gen_cmd(0x98, 0x55, base, map, cfi, cfi->device_type, NULL); if (!qry_present(map,base,cfi)) @@ -88,8 +84,6 @@ /* Eep. This chip also had the QRY marker. * Is it an alias for the new one? */ cfi_send_gen_cmd(0xF0, 0, chips[i].start, map, cfi, cfi->device_type, NULL); - /* some devices don't respond to 0xF0, so send 0xFF to be sure */ - cfi_send_gen_cmd(0xFF, 0, chips[i].start, map, cfi, cfi->device_type, NULL); /* If the QRY marker goes away, it's an alias */ if (!qry_present(map, chips[i].start, cfi)) { @@ -102,8 +96,7 @@ * too and if it's the same, assume it's an alias. */ /* FIXME: Use other modes to do a proper check */ cfi_send_gen_cmd(0xF0, 0, base, map, cfi, cfi->device_type, NULL); - /* some devices don't respond to 0xF0, so send 0xFF to be sure */ - cfi_send_gen_cmd(0xFF, 0, base, map, cfi, cfi->device_type, NULL); + if (qry_present(map, base, cfi)) { printk(KERN_DEBUG "%s: Found an alias at 0x%x for the chip at 0x%lx\n", map->name, base, chips[i].start); @@ -126,10 +119,6 @@ /* Put it back into Read Mode */ cfi_send_gen_cmd(0xF0, 0, base, map, cfi, cfi->device_type, NULL); - /* some devices don't respond to 0xF0, so send 0xFF to be sure */ - cfi_send_gen_cmd(0xFF, 0, base, map, cfi, cfi->device_type, NULL); - - printk(KERN_INFO "%s: Found %d x%d devices at 0x%x in %d-bit mode\n", map->name, cfi->interleave, cfi->device_type*8, base, map->buswidth*8); @@ -176,20 +165,6 @@ cfi->cfiq->InterfaceDesc = le16_to_cpu(cfi->cfiq->InterfaceDesc); cfi->cfiq->MaxBufWriteSize = le16_to_cpu(cfi->cfiq->MaxBufWriteSize); - /* - * ST screwed up the CFI interface for buffer writes on their parts, - * so this needs to be fixed up by hand here. - * - * A possible enhancment is that instead of just reverting back - * to word write (as this does), we could use the ST specific double - * word write instead. - */ - - if (cfi_read_query(map,base) == 0x20){ - cfi->cfiq->BufWriteTimeoutTyp = 0; - cfi->cfiq->BufWriteTimeoutMax = 0; - } - #ifdef DEBUG_CFI /* Dump the information therein */ print_cfi_ident(cfi->cfiq); @@ -207,9 +182,6 @@ /* Put it back into Read Mode */ cfi_send_gen_cmd(0xF0, 0, base, map, cfi, cfi->device_type, NULL); - /* some devices don't respond to 0xF0, so send 0xFF to be sure */ - cfi_send_gen_cmd(0xFF, 0, base, map, cfi, cfi->device_type, NULL); - return 1; } diff -urN linux-2.4.21/drivers/mtd/devices/Config.in linux-2.4.21.zipit/drivers/mtd/devices/Config.in --- linux-2.4.21/drivers/mtd/devices/Config.in 2005-02-07 11:17:13.045301612 -0500 +++ linux-2.4.21.zipit/drivers/mtd/devices/Config.in 2004-03-15 14:52:58.000000000 -0500 @@ -17,15 +17,6 @@ if [ "$CONFIG_SA1100_LART" = "y" ]; then dep_tristate ' 28F160xx flash driver for LART' CONFIG_MTD_LART $CONFIG_MTD fi -if [ "$CONFIG_ARCH_MX1ADS" = "y" ]; then - dep_tristate ' SyncFlash driver for MX1ADS' CONFIG_MTD_SYNCFLASH $CONFIG_MTD -fi -if [ "$CONFIG_ARCH_AT91RM9200" = "y" ]; then - dep_tristate ' AT91RM9200 DataFlash support' CONFIG_MTD_AT91_DATAFLASH $CONFIG_MTD - if [ "$CONFIG_MTD_AT91_DATAFLASH" = "y" -o "$CONFIG_MTD_AT91_DATAFLASH" = "m" ]; then - bool ' Enable DataFlash card? ' CONFIG_MTD_AT91_DATAFLASH_CARD - fi -fi dep_tristate ' Test driver using RAM' CONFIG_MTD_MTDRAM $CONFIG_MTD if [ "$CONFIG_MTD_MTDRAM" = "y" -o "$CONFIG_MTD_MTDRAM" = "m" ]; then int 'MTDRAM device size in KiB' CONFIG_MTDRAM_TOTAL_SIZE 4096 diff -urN linux-2.4.21/drivers/mtd/devices/Makefile linux-2.4.21.zipit/drivers/mtd/devices/Makefile --- linux-2.4.21/drivers/mtd/devices/Makefile 2005-02-07 11:17:13.046301521 -0500 +++ linux-2.4.21.zipit/drivers/mtd/devices/Makefile 2004-03-15 14:52:58.000000000 -0500 @@ -21,7 +21,6 @@ obj-$(CONFIG_MTD_MS02NV) += ms02-nv.o obj-$(CONFIG_MTD_MTDRAM) += mtdram.o obj-$(CONFIG_MTD_LART) += lart.o -obj-$(CONFIG_MTD_SYNCFLASH) += syncflash.o obj-$(CONFIG_MTD_BLKMTD) += blkmtd.o include $(TOPDIR)/Rules.make diff -urN linux-2.4.21/drivers/mtd/devices/syncflash.c linux-2.4.21.zipit/drivers/mtd/devices/syncflash.c --- linux-2.4.21/drivers/mtd/devices/syncflash.c 2005-02-07 11:17:13.049301246 -0500 +++ linux-2.4.21.zipit/drivers/mtd/devices/syncflash.c 1969-12-31 19:00:00.000000000 -0500 @@ -1,615 +0,0 @@ -/* - * MTD driver for Micron SyncFlash flash memory. - * - * Author: Jon McClintock - * - * Based loosely upon the LART flash driver, authored by Abraham vd Merwe - * . - * - * Copyright 2003, Blue Mug, Inc. for Motorola, Inc. - * - * This code is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * References: - * - * [1] Micron SyncFlash homepage - * - http://www.syncflash.com/ - * - * [2] MT28S4M16LC -- 4Mx16 SyncFlash memory datasheet - * - http://syncflash.com/pdfs/datasheets/mt28s4m16lc_6.pdf - * - * [3] MTD internal API documentation - * - http://www.linux-mtd.infradead.org/tech/ - * - * Limitations: - * - * Even though this driver is written for Micron SyncFlash, it is quite - * specific to the Motorola MX1 ADS development board. - */ - -#include -#include -#include -#include -#include -#include -#include - -/* partition support */ -#define HAVE_PARTITIONS -#ifdef HAVE_PARTITIONS -#include -#endif - -#ifndef CONFIG_ARCH_MX1ADS -#error The SyncFlash driver currently only supports the MX1 ADS platform. -#endif - -/* - * General flash configuration parameters. - */ -#define BUSWIDTH 4 -#define FLASH_BLOCKSIZE (256 * 1024 * BUSWIDTH) -#define FLASH_NUMBLOCKS 16 - -#define BUSWIDTH 4 -#define FLASH_ADDRESS IO_ADDRESS(MX1ADS_FLASH_BASE) - -#define FLASH_MANUFACTURER 0x002C002C -#define FLASH_DEVICE_ID 0x00D300D3 - -/* - * The size and extent of the bootloader in flash. - */ -#define NUM_BOOTLOADER_BLOCKS 1 -#define BOOTLOADER_START 0x00000000 -#define BOOTLOADER_LEN (NUM_BOOTLOADER_BLOCKS * FLASH_BLOCKSIZE) - -/* - * The size and extent of the kernel in flash. - */ -#define NUM_KERNEL_BLOCKS 1 -#define KERNEL_START (BOOTLOADER_START + BOOTLOADER_LEN) -#define KERNEL_LEN (NUM_KERNEL_BLOCKS * FLASH_BLOCKSIZE) - -/* File system */ -#define NUM_FILESYSTEM_BLOCKS 14 -#define FILESYSTEM_START (KERNEL_START + KERNEL_LEN) -#define FILESYSTEM_LEN (NUM_FILESYSTEM_BLOCKS * FLASH_BLOCKSIZE) - - -/* - * SDRAM controller register location and values. These are very specific - * to the MX1. - */ -#define SDRAMC_REGISTER IO_ADDRESS(0x00221004) - -/* - * This the mask we use to get the start of a block from a given address. - */ -#define BLOCK_MASK (0xFFF00000) - -/* - * This is the A10 address line of the SyncFlash; it's used to initiate - * a precharge command. - */ -#define SYNCFLASH_A10 (0x00100000) - -/* - * SDRAM controller MODE settings. - */ -#define CMD_NORMAL (0x81020300) /* Normal Mode */ -#define CMD_PREC (CMD_NORMAL + 0x10000000) /* Precharge command */ -#define CMD_AUTO (CMD_NORMAL + 0x20000000) /* Auto refresh */ -#define CMD_LMR (CMD_NORMAL + 0x30000000) /* Load Mode Register */ -#define CMD_LCR (CMD_NORMAL + 0x60000000) /* LCR Command */ -#define CMD_PROGRAM (CMD_NORMAL + 0x70000000) /* SyncFlash Program */ - -/* - * SyncFlash LCR Commands adjusted for the DBMX1 AHB internal address bus . - */ -#define LCR_READ_STATUS (0x0001C000) /* 0x70 */ -#define LCR_READ_CONFIG (0x00024000) /* 0x90 */ -#define LCR_ERASE_CONFIRM (0x00008000) /* 0x20 */ -#define LCR_ERASE_NVMODE (0x0000C000) /* 0x30 */ -#define LCR_PROG_NVMODE (0x00028000) /* 0xA0 */ -#define LCR_SR_CLEAR (0x00014000) /* 0x50 */ - -/* - * Status register bits - */ -#define SR_VPS_ERROR (1 << 8) /* Power-Up status error */ -#define SR_ISM_READY (1 << 7) /* State machine isn't busy */ -#define SR_ERASE_ERROR (1 << 5) /* Erase/Unprotect error */ -#define SR_PROGRAM_ERROR (1 << 4) /* Program/Protect error */ -#define SR_DEVICE_PROTECTED (1 << 3) /* Device is protected */ -#define SR_ISM_STATUS_H (1 << 2) /* Bank ISM status, high bit */ -#define SR_ISM_STATUS_L (1 << 1) /* Bank ISM status, low bit */ -#define SR_DEVICE_ISM_STATUS (1 << 0) /* ISM is device-level */ - -#define SR_ERROR (SR_VPS_ERROR|SR_ERASE_ERROR|SR_PROGRAM_ERROR|SR_DEVICE_PROTECTED) - -#define STATUS_VALUE(a) ((a) | ((a) << 16)) - -/* - * Device configuration register offsets - */ -#define DC_MANUFACTURER (0 * BUSWIDTH) -#define DC_DEVICE_ID (1 * BUSWIDTH) -#define DC_BLOCK_PROTECT (2 * BUSWIDTH) -#define DC_DEVICE_PROTECT (3 * BUSWIDTH) - -#define FL_WORD(addr) (*(volatile unsigned long*)(addr)) - -static char module_name[] = "syncflash"; - -inline __u8 read8 (__u32 offset) -{ - return *(volatile __u8 *) (FLASH_ADDRESS + offset); -} - -inline __u32 read32 (__u32 offset) -{ - return *(volatile __u32 *) (FLASH_ADDRESS + offset); -} - -inline void write32 (__u32 x,__u32 offset) -{ - *(volatile __u32 *) (FLASH_ADDRESS + offset) = x; -} - -static __u32 read_device_configuration_register(__u32 reg_number) -{ - __u32 tmp; - - /* Setup the SDRAM controller to issue an LCR command. */ - FL_WORD(SDRAMC_REGISTER) = CMD_LCR; - - /* Perform a read to issue the Read Device Configuration Command. */ - tmp = read32(LCR_READ_CONFIG); - - /* Return the SDRAM controller to normal mode. */ - FL_WORD(SDRAMC_REGISTER) = CMD_NORMAL; - - /* Return the value of the specified register. */ - tmp = read32(reg_number); - - return tmp; -} - -/* - * Get the status of the flash devices. - */ -static __u32 flash_read_status() -{ - __u32 status, tmp; - - /* Enter the SyncFlash Program READ/WRITE mode. */ - FL_WORD(SDRAMC_REGISTER) = CMD_PROGRAM; - - /* Read the status register. */ - status = read32(LCR_READ_STATUS); - - /* Clear the status register. */ - FL_WORD(SDRAMC_REGISTER) = CMD_LCR; - tmp = read32(LCR_SR_CLEAR); - - /* Return to Normal mode. */ - FL_WORD(SDRAMC_REGISTER) = CMD_NORMAL; - - return status; -} - -/* - * Loop until both write state machines are ready. - */ -static __u32 flash_status_wait() -{ - __u32 status; - do { - status = flash_read_status(); - } while ((status & STATUS_VALUE(SR_ISM_READY)) != - STATUS_VALUE(SR_ISM_READY)); - return status; -} - -/* - * Loop until the Write State machine is ready, then do a full error - * check. Clear status and leave the flash in Read Array mode; return - * 0 for no error, -1 for error. - */ -static int flash_status_full_check() -{ - __u32 status; - - status = flash_status_wait() & STATUS_VALUE(SR_ERROR); - return status ? -EIO : 0; -} - -/* - * Return the flash to the normal mode. - */ -static void flash_normal_mode() -{ - __u32 tmp; - - /* First issue a precharge all command. */ - FL_WORD(SDRAMC_REGISTER) = CMD_PREC; - tmp = read32(SYNCFLASH_A10); - - /* Now place the SDRAM controller in Normal mode. */ - FL_WORD(SDRAMC_REGISTER) = CMD_NORMAL; -} - -/* - * Probe for SyncFlash memory on MX1ADS board. - * - * Returns 1 if we found SyncFlash memory, 0 otherwise. - */ -static int flash_probe (void) -{ - __u32 manufacturer, device_id; - - /* For some reason, the first read doesn't work, so we do it - * twice. */ - manufacturer = read_device_configuration_register(DC_MANUFACTURER); - manufacturer = read_device_configuration_register(DC_MANUFACTURER); - device_id = read_device_configuration_register(DC_DEVICE_ID); - - printk("SyncFlash probe: manufacturer 0x%08lx, device_id 0x%08lx\n", - manufacturer, device_id); - return (manufacturer == FLASH_MANUFACTURER && - device_id == FLASH_DEVICE_ID); -} - -/* - * Erase one block of flash memory at offset ``offset'' which is any - * address within the block which should be erased. - * - * Returns 0 if successful, -1 otherwise. - */ -static inline int erase_block (__u32 offset) -{ - __u32 tmp; - - /* Mask off the lower bits of the address to get the first address - * in the flash block. */ - offset &= (__u32)BLOCK_MASK; - - /* Perform a read and precharge of the bank before the LCR|ACT|WRIT - * sequence to avoid the inadvertent precharge command occurring - * during the LCR_ACT_WRIT sequence. */ - FL_WORD(SDRAMC_REGISTER) = CMD_NORMAL; - tmp = read32(offset); - FL_WORD(SDRAMC_REGISTER) = CMD_PREC; - tmp = read32(offset); - - /* Now start the actual erase. */ - - /* LCR|ACT|WRIT sequence */ - FL_WORD(SDRAMC_REGISTER) = CMD_LCR; - write32(0, offset + LCR_ERASE_CONFIRM); - - /* Return to normal mode to issue the erase confirm. */ - FL_WORD(SDRAMC_REGISTER) = CMD_NORMAL; - write32(0xD0D0D0D0, offset); - - if (flash_status_full_check()) { - printk (KERN_WARNING "%s: erase error at address 0x%.8x.\n", - module_name, offset); - return (-1); - } - - flash_normal_mode(); - - return 0; -} - -static int flash_erase (struct mtd_info *mtd,struct erase_info *instr) -{ - __u32 addr,len; - int i,first; - - /* sanity checks */ - if (instr->addr + instr->len > mtd->size) return (-EINVAL); - - /* - * check that both start and end of the requested erase are - * aligned with the erasesize at the appropriate addresses. - * - * skip all erase regions which are ended before the start of - * the requested erase. Actually, to save on the calculations, - * we skip to the first erase region which starts after the - * start of the requested erase, and then go back one. - */ - for (i = 0; (i < mtd->numeraseregions) && - (instr->addr >= mtd->eraseregions[i].offset); i++) ; - i--; - - /* - * ok, now i is pointing at the erase region in which this - * erase request starts. Check the start of the requested - * erase range is aligned with the erase size which is in - * effect here. - */ - if (instr->addr & (mtd->eraseregions[i].erasesize - 1)) - return (-EINVAL); - - /* Remember the erase region we start on */ - first = i; - - /* - * next, check that the end of the requested erase is aligned - * with the erase region at that address. - * - * as before, drop back one to point at the region in which - * the address actually falls - */ - for (; - (i < mtd->numeraseregions) && - ((instr->addr + instr->len) >= mtd->eraseregions[i].offset) ; - i++) ; - i--; - - /* is the end aligned on a block boundary? */ - if ((instr->addr + instr->len) & (mtd->eraseregions[i].erasesize - 1)) - return (-EINVAL); - - addr = instr->addr; - len = instr->len; - - i = first; - - /* now erase those blocks */ - while (len) - { - if (erase_block (addr)) - { - instr->state = MTD_ERASE_FAILED; - return (-EIO); - } - - addr += mtd->eraseregions[i].erasesize; - len -= mtd->eraseregions[i].erasesize; - - if (addr == (mtd->eraseregions[i].offset + - (mtd->eraseregions[i].erasesize * - mtd->eraseregions[i].numblocks))) - i++; - } - - instr->state = MTD_ERASE_DONE; - if (instr->callback) instr->callback (instr); - - return (0); -} - -static int flash_read (struct mtd_info *mtd, loff_t from, - size_t len, size_t *retlen, u_char *buf) -{ - /* Sanity checks. */ - if (!len) return (0); - if (from + len > mtd->size) return (-EINVAL); - - /* Ensure that we are in normal mode. */ - flash_normal_mode(); - - /* We always read len bytes. */ - *retlen = len; - - /* first, we read bytes until we reach a dword boundary */ - if (from & (BUSWIDTH - 1)) - { - int gap = BUSWIDTH - (from & (BUSWIDTH - 1)); - while (len && gap--) *buf++ = read8(from++), len--; - } - - /* now we read dwords until we reach a non-dword boundary */ - while (len >= BUSWIDTH) - { - *((__u32 *) buf) = read32(from); - - buf += BUSWIDTH; - from += BUSWIDTH; - len -= BUSWIDTH; - } - - /* top up the last unaligned bytes */ - if (len & (BUSWIDTH - 1)) - while (len--) *buf++ = read8(from++); - - return (0); -} - -/* - * Write one dword ``x'' to flash memory at offset ``offset''. ``offset'' - * must be 32 bits, i.e. it must be on a dword boundary. - * - * Returns 0 if successful, -1 otherwise. - */ -static int flash_write_dword(__u32 offset, __u32 x) -{ - __u32 tmp; - - /* First issue a precharge all command. */ - FL_WORD(SDRAMC_REGISTER) = CMD_PREC; - tmp = read32(SYNCFLASH_A10); - - /* Enter the SyncFlash programming mode. */ - FL_WORD(SDRAMC_REGISTER) = CMD_PROGRAM; - write32(x, offset); - - /* Wait for the write to complete. */ - flash_status_wait(); - - /* Return to normal mode. */ - flash_normal_mode(); - - return 0; -} - -static int flash_write (struct mtd_info *mtd,loff_t to,size_t len,size_t *retlen,const u_char *buf) -{ - __u8 tmp[4]; - int i,n; - - *retlen = 0; - - /* Sanity checks */ - if (!len) return (0); - if (to + len > mtd->size) return (-EINVAL); - - /* First, we write a 0xFF.... padded byte until we reach a - * dword boundary. */ - if (to & (BUSWIDTH - 1)) - { - __u32 aligned = to & ~(BUSWIDTH - 1); - int gap = to - aligned; - - i = n = 0; - - while (gap--) tmp[i++] = 0xFF; - while (len && i < BUSWIDTH) tmp[i++] = buf[n++], len--; - while (i < BUSWIDTH) tmp[i++] = 0xFF; - - if (flash_write_dword(aligned, *((__u32 *) tmp))) - return (-EIO); - - to += n; - buf += n; - *retlen += n; - } - - /* Now we write dwords until we reach a non-dword boundary. */ - while (len >= BUSWIDTH) - { - if (flash_write_dword (to,*((__u32 *) buf))) return (-EIO); - - to += BUSWIDTH; - buf += BUSWIDTH; - *retlen += BUSWIDTH; - len -= BUSWIDTH; - } - - /* Top up the last unaligned bytes, padded with 0xFF.... */ - if (len & (BUSWIDTH - 1)) - { - i = n = 0; - - while (len--) tmp[i++] = buf[n++]; - while (i < BUSWIDTH) tmp[i++] = 0xFF; - - if (flash_write_dword (to,*((__u32 *) tmp))) return (-EIO); - - *retlen += n; - } - - return flash_status_full_check(); -} - - - -#define NB_OF(x) (sizeof (x) / sizeof (x[0])) - -static struct mtd_info mtd; - -static struct mtd_erase_region_info erase_regions[] = -{ - /* flash blocks */ - { - offset: 0x00000000, - erasesize: FLASH_BLOCKSIZE, - numblocks: FLASH_NUMBLOCKS - }, -}; - -#ifdef HAVE_PARTITIONS -static struct mtd_partition syncflash_partitions[] = -{ - /* bootloader */ - { - name: "bootloader", - offset: BOOTLOADER_START, - size: BOOTLOADER_LEN, - mask_flags: 0 - }, - /* Kernel */ - { - name: "kernel", - offset: KERNEL_START, /* MTDPART_OFS_APPEND */ - size: KERNEL_LEN, - mask_flags: 0 - }, - /* file system */ - { - name: "file system", - offset: FILESYSTEM_START, /* MTDPART_OFS_APPEND */ - size: FILESYSTEM_LEN, /* MTDPART_SIZ_FULL */ - mask_flags: 0 - } -}; -#endif - -int __init syncflash_init (void) -{ - int result; - - memset (&mtd,0,sizeof (mtd)); - - printk ("MTD driver for Micron SyncFlash.\n"); - printk ("%s: Probing for SyncFlash on MX1ADS...\n",module_name); - - if (!flash_probe ()) - { - printk (KERN_WARNING "%s: Found no SyncFlash devices\n", - module_name); - return (-ENXIO); - } - - printk ("%s: Found a SyncFlash device.\n",module_name); - - mtd.name = module_name; - mtd.type = MTD_NORFLASH; - mtd.flags = MTD_CAP_NORFLASH; - mtd.size = FLASH_BLOCKSIZE * FLASH_NUMBLOCKS; - - mtd.erasesize = FLASH_BLOCKSIZE; - mtd.numeraseregions = NB_OF(erase_regions); - mtd.eraseregions = erase_regions; - - mtd.module = THIS_MODULE; - - mtd.erase = flash_erase; - mtd.read = flash_read; - mtd.write = flash_write; - -#ifndef HAVE_PARTITIONS - result = add_mtd_device(&mtd); -#else - result = add_mtd_partitions(&mtd, - syncflash_partitions, - NB_OF(syncflash_partitions)); -#endif - - return (result); -} - -void __exit syncflash_exit (void) -{ -#ifndef HAVE_PARTITIONS - del_mtd_device (&mtd); -#else - del_mtd_partitions (&mtd); -#endif -} - -module_init (syncflash_init); -module_exit (syncflash_exit); - -MODULE_LICENSE("GPL"); -MODULE_AUTHOR("Jon McClintock "); -MODULE_DESCRIPTION("MTD driver for Micron MT28S4M16LC SyncFlash on MX1ADS board"); - - diff -urN linux-2.4.21/drivers/mtd/maps/Config.in linux-2.4.21.zipit/drivers/mtd/maps/Config.in --- linux-2.4.21/drivers/mtd/maps/Config.in 2005-02-07 11:17:13.060300241 -0500 +++ linux-2.4.21.zipit/drivers/mtd/maps/Config.in 2004-03-15 14:52:58.000000000 -0500 @@ -81,10 +81,10 @@ dep_tristate ' CFI Flash device mapped on StrongARM SA11x0' CONFIG_MTD_SA1100 $CONFIG_MTD_CFI $CONFIG_ARCH_SA1100 $CONFIG_MTD_PARTITIONS dep_tristate ' CFI Flash device mapped on DC21285 Footbridge' CONFIG_MTD_DC21285 $CONFIG_MTD_CFI $CONFIG_ARCH_FOOTBRIDGE dep_tristate ' CFI Flash device mapped on the XScale IQ80310 board' CONFIG_MTD_IQ80310 $CONFIG_MTD_CFI $CONFIG_ARCH_IQ80310 - dep_tristate ' CFI Flash device mapped on the FortuNet board' CONFIG_MTD_FORTUNET $CONFIG_MTD_CFI $CONFIG_MTD_PARTITIONS $CONFIG_ARCH_FORTUNET - dep_tristate ' CFI Flash device mapped on Epxa' CONFIG_MTD_EPXA $CONFIG_MTD_CFI $CONFIG_MTD_PARTITIONS $CONFIG_ARCH_CAMELOT + dep_tristate ' CFI Flash device mapped on Epxa10db' CONFIG_MTD_EPXA10DB $CONFIG_MTD_CFI $CONFIG_MTD_PARTITIONS $CONFIG_ARCH_CAMELOT + dep_tristate ' CFI Flash device mapped on the FortuNet board' CONFIG_MTD_FORTUNET $CONFIG_MTD_CFI $CONFIG_MTD_PARTITIONS $CONFIG_SA1100_FORTUNET dep_tristate ' NV-RAM mapping AUTCPU12 board' CONFIG_MTD_AUTCPU12 $CONFIG_ARCH_AUTCPU12 - dep_tristate ' CFI Flash device mapped on EDB7312' CONFIG_MTD_EDB7312 $CONFIG_ARCH_EDB7212 $CONFIG_MTD_CFI + dep_tristate ' CFI Flash device mapped on EDB7312' CONFIG_MTD_EDB7312 $CONFIG_MTD_CFI dep_tristate ' JEDEC Flash device mapped on impA7' CONFIG_MTD_IMPA7 $CONFIG_MTD_JEDECPROBE dep_tristate ' JEDEC Flash device mapped on Ceiva/Polaroid PhotoMax Digital Picture Frame' CONFIG_MTD_CEIVA $CONFIG_MTD_JEDECPROBE $CONFIG_ARCH_CEIVA fi diff -urN linux-2.4.21/drivers/mtd/maps/epxa10db-flash.c linux-2.4.21.zipit/drivers/mtd/maps/epxa10db-flash.c --- linux-2.4.21/drivers/mtd/maps/epxa10db-flash.c 1969-12-31 19:00:00.000000000 -0500 +++ linux-2.4.21.zipit/drivers/mtd/maps/epxa10db-flash.c 2004-03-15 14:52:58.000000000 -0500 @@ -0,0 +1,233 @@ +/* + * Flash memory access on EPXA based devices + * + * (C) 2000 Nicolas Pitre + * Copyright (C) 2001 Altera Corporation + * Copyright (C) 2001 Red Hat, Inc. + * + * $Id: epxa10db-flash.c,v 1.4 2002/08/22 10:46:19 cdavies Exp $ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#ifdef CONFIG_EPXA10DB +#define BOARD_NAME "EPXA10DB" +#else +#define BOARD_NAME "EPXA1DB" +#endif + +static int nr_parts = 0; +static struct mtd_partition *parts; + +static struct mtd_info *mymtd; + +extern int parse_redboot_partitions(struct mtd_info *, struct mtd_partition **); +static int epxa_default_partitions(struct mtd_info *master, struct mtd_partition **pparts); + +static __u8 epxa_read8(struct map_info *map, unsigned long ofs) +{ + return __raw_readb(map->map_priv_1 + ofs); +} + +static __u16 epxa_read16(struct map_info *map, unsigned long ofs) +{ + return __raw_readw(map->map_priv_1 + ofs); +} + +static __u32 epxa_read32(struct map_info *map, unsigned long ofs) +{ + return __raw_readl(map->map_priv_1 + ofs); +} + +static void epxa_copy_from(struct map_info *map, void *to, unsigned long from, ssize_t len) +{ + memcpy_fromio(to, (void *)(map->map_priv_1 + from), len); +} + +static void epxa_write8(struct map_info *map, __u8 d, unsigned long adr) +{ + __raw_writeb(d, map->map_priv_1 + adr); + mb(); +} + +static void epxa_write16(struct map_info *map, __u16 d, unsigned long adr) +{ + __raw_writew(d, map->map_priv_1 + adr); + mb(); +} + +static void epxa_write32(struct map_info *map, __u32 d, unsigned long adr) +{ + __raw_writel(d, map->map_priv_1 + adr); + mb(); +} + +static void epxa_copy_to(struct map_info *map, unsigned long to, const void *from, ssize_t len) +{ + memcpy_toio((void *)(map->map_priv_1 + to), from, len); +} + + + +static struct map_info epxa_map = { + name: "EPXA flash", + size: FLASH_SIZE, + buswidth: 2, + read8: epxa_read8, + read16: epxa_read16, + read32: epxa_read32, + copy_from: epxa_copy_from, + write8: epxa_write8, + write16: epxa_write16, + write32: epxa_write32, + copy_to: epxa_copy_to +}; + + +static int __init epxa_mtd_init(void) +{ + int i; + + printk(KERN_NOTICE "%s flash device: %x at %x\n", BOARD_NAME, FLASH_SIZE, FLASH_START); + epxa_map.map_priv_1 = (unsigned long)ioremap(FLASH_START, FLASH_SIZE); + if (!epxa_map.map_priv_1) { + printk("Failed to ioremap %s flash\n",BOARD_NAME); + return -EIO; + } + + mymtd = do_map_probe("cfi_probe", &epxa_map); + if (!mymtd) { + iounmap((void *)epxa_map.map_priv_1); + return -ENXIO; + } + + mymtd->module = THIS_MODULE; + + /* Unlock the flash device. */ + if(mymtd->unlock){ + for (i=0; inumeraseregions;i++){ + int j; + for(j=0;jeraseregions[i].numblocks;j++){ + mymtd->unlock(mymtd,mymtd->eraseregions[i].offset + j * mymtd->eraseregions[i].erasesize,mymtd->eraseregions[i].erasesize); + } + } + } + +#ifdef CONFIG_MTD_REDBOOT_PARTS + nr_parts = parse_redboot_partitions(mymtd, &parts); + + if (nr_parts > 0) { + add_mtd_partitions(mymtd, parts, nr_parts); + return 0; + } +#endif +#ifdef CONFIG_MTD_AFS_PARTS + nr_parts = parse_afs_partitions(mymtd, &parts); + + if (nr_parts > 0) { + add_mtd_partitions(mymtd, parts, nr_parts); + return 0; + } +#endif + + /* No recognised partitioning schemes found - use defaults */ + nr_parts = epxa_default_partitions(mymtd, &parts); + if (nr_parts > 0) { + add_mtd_partitions(mymtd, parts, nr_parts); + return 0; + } + + /* If all else fails... */ + add_mtd_device(mymtd); + return 0; +} + +static void __exit epxa_mtd_cleanup(void) +{ + if (mymtd) { + if (nr_parts) + del_mtd_partitions(mymtd); + else + del_mtd_device(mymtd); + map_destroy(mymtd); + } + if (epxa_map.map_priv_1) { + iounmap((void *)epxa_map.map_priv_1); + epxa_map.map_priv_1 = 0; + } +} + + +/* + * This will do for now, once we decide which bootldr we're finally + * going to use then we'll remove this function and do it properly + * + * Partions are currently (as offsets from base of flash): + * 0x00000000 - 0x003FFFFF - bootloader (!) + * 0x00400000 - 0x00FFFFFF - Flashdisk + */ + +static int __init epxa_default_partitions(struct mtd_info *master, struct mtd_partition **pparts) +{ + struct mtd_partition *parts; + int ret, i; + int npartitions = 0; + char *names; + const char *name = "jffs"; + + printk("Using default partitions for %s\n",BOARD_NAME); + npartitions=1; + parts = kmalloc(npartitions*sizeof(*parts)+strlen(name), GFP_KERNEL); + memzero(parts,npartitions*sizeof(*parts)+strlen(name)); + if (!parts) { + ret = -ENOMEM; + goto out; + } + i=0; + names = (char *)&parts[npartitions]; + parts[i].name = names; + names += strlen(name) + 1; + strcpy(parts[i].name, name); + +#ifdef CONFIG_EPXA10DB + parts[i].size = FLASH_SIZE-0x00400000; + parts[i].offset = 0x00400000; +#else + parts[i].size = FLASH_SIZE-0x00180000; + parts[i].offset = 0x00180000; +#endif + + out: + *pparts = parts; + return npartitions; +} + + +module_init(epxa_mtd_init); +module_exit(epxa_mtd_cleanup); + +MODULE_AUTHOR("Clive Davies"); +MODULE_DESCRIPTION("Altera epxa mtd flash map"); +MODULE_LICENSE("GPL"); diff -urN linux-2.4.21/drivers/mtd/maps/epxa-flash.c linux-2.4.21.zipit/drivers/mtd/maps/epxa-flash.c --- linux-2.4.21/drivers/mtd/maps/epxa-flash.c 2005-02-07 11:17:13.064299875 -0500 +++ linux-2.4.21.zipit/drivers/mtd/maps/epxa-flash.c 1969-12-31 19:00:00.000000000 -0500 @@ -1,234 +0,0 @@ -/* - * Flash memory access on EPXA based devices - * - * (C) 2000 Nicolas Pitre - * Copyright (C) 2001 Altera Corporation - * Copyright (C) 2001 Red Hat, Inc. - * - * $Id: epxa10db-flash.c,v 1.4 2002/08/22 10:46:19 cdavies Exp $ - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#ifdef CONFIG_EPXA10DB -#define BOARD_NAME "EPXA10DB" -#else -#define BOARD_NAME "EPXA1DB" -#endif - -static int nr_parts = 0; -static struct mtd_partition *parts; - -static struct mtd_info *mymtd; - -extern int parse_redboot_partitions(struct mtd_info *, struct mtd_partition **); -static int epxa_default_partitions(struct mtd_info *master, struct mtd_partition **pparts); - -static __u8 epxa_read8(struct map_info *map, unsigned long ofs) -{ - return __raw_readb(map->map_priv_1 + ofs); -} - -static __u16 epxa_read16(struct map_info *map, unsigned long ofs) -{ - return __raw_readw(map->map_priv_1 + ofs); -} - -static __u32 epxa_read32(struct map_info *map, unsigned long ofs) -{ - return __raw_readl(map->map_priv_1 + ofs); -} - -static void epxa_copy_from(struct map_info *map, void *to, unsigned long from, ssize_t len) -{ - memcpy_fromio(to, map->map_priv_1 + from, len); -} - -static void epxa_write8(struct map_info *map, __u8 d, unsigned long adr) -{ - __raw_writeb(d, map->map_priv_1 + adr); - mb(); -} - -static void epxa_write16(struct map_info *map, __u16 d, unsigned long adr) -{ - __raw_writew(d, map->map_priv_1 + adr); - mb(); -} - -static void epxa_write32(struct map_info *map, __u32 d, unsigned long adr) -{ - __raw_writel(d, map->map_priv_1 + adr); - mb(); -} - -static void epxa_copy_to(struct map_info *map, unsigned long to, const void *from, ssize_t len) -{ - memcpy_toio(map->map_priv_1 + to, from, len); -} - -static struct map_info epxa_map = { - .name = "EPXA flash", - .size = FLASH_SIZE, - .buswidth = 2, - .read8 = epxa_read8, - .read16 = epxa_read16, - .read32 = epxa_read32, - .copy_from = epxa_copy_from, - .write8 = epxa_write8, - .write16 = epxa_write16, - .write32 = epxa_write32, - .copy_to = epxa_copy_to -}; - -static int __init epxa_mtd_init(void) -{ - int i; - - printk(KERN_NOTICE "%s flash device: %x at %x\n", BOARD_NAME, FLASH_SIZE, FLASH_START); - epxa_map.map_priv_1 = (unsigned long)ioremap_nocache(FLASH_START, FLASH_SIZE); - if (!epxa_map.map_priv_1) { - printk("Failed to ioremap %s flash\n",BOARD_NAME); - return -EIO; - } - - mymtd = do_map_probe("cfi_probe", &epxa_map); - if (!mymtd) { - iounmap((void *)epxa_map.map_priv_1); - return -ENXIO; - } - - mymtd->module = THIS_MODULE; - - /* Unlock the flash device. */ - if(mymtd->unlock){ - for (i=0; inumeraseregions;i++){ - int j; - for(j=0;jeraseregions[i].numblocks;j++){ - mymtd->unlock(mymtd,mymtd->eraseregions[i].offset + j * mymtd->eraseregions[i].erasesize,mymtd->eraseregions[i].erasesize); - } - } - } - -#ifdef CONFIG_MTD_REDBOOT_PARTS - nr_parts = parse_redboot_partitions(mymtd, &parts); - - if (nr_parts > 0) { - add_mtd_partitions(mymtd, parts, nr_parts); - return 0; - } -#endif -#ifdef CONFIG_MTD_AFS_PARTS - nr_parts = parse_afs_partitions(mymtd, &parts); - - if (nr_parts > 0) { - add_mtd_partitions(mymtd, parts, nr_parts); - return 0; - } -#endif - - /* No recognised partitioning schemes found - use defaults */ - nr_parts = epxa_default_partitions(mymtd, &parts); - if (nr_parts > 0) { - add_mtd_partitions(mymtd, parts, nr_parts); - return 0; - } - - /* If all else fails... */ - add_mtd_device(mymtd); - return 0; -} - -static void __exit epxa_mtd_cleanup(void) -{ - if (mymtd) { - if (nr_parts) - del_mtd_partitions(mymtd); - else - del_mtd_device(mymtd); - map_destroy(mymtd); - } - if (epxa_map.map_priv_1) { - iounmap((void *)epxa_map.map_priv_1); - epxa_map.map_priv_1 = 0; - } -} - - -/* - * This will do for now, once we decide which bootldr we're finally - * going to use then we'll remove this function and do it properly - * - * Partions are currently (as offsets from base of flash): - * 0x00000000 - 0x003FFFFF - bootloader (!) - * 0x00400000 - 0x00FFFFFF - Flashdisk - */ - -static int __init epxa_default_partitions(struct mtd_info *master, struct mtd_partition **pparts) -{ - struct mtd_partition *parts; - int ret; - int npartitions = 0; - char *names; - const char *name = "jffs"; - - printk("Using default partitions for %s\n",BOARD_NAME); - npartitions=1; - parts = kmalloc(npartitions*sizeof(*parts)+strlen(name)+1, GFP_KERNEL); - if (!parts) { - ret = -ENOMEM; - goto out; - } - memzero(parts,npartitions*sizeof(*parts)+strlen(name)); - - names = (char *)&parts[npartitions]; - parts[0].name = names; - names += strlen(name) + 1; - strcpy(parts[0].name, name); - -#ifdef CONFIG_EPXA10DB_R2 - parts[0].size = FLASH_SIZE-0x00400000; - parts[0].offset = 0x00400000; -#elif defined CONFIG_EPXA10DB_R3 - parts[0].size = 0x00800000; - parts[0].offset = 0x00800000; -#else - parts[0].size = FLASH_SIZE-0x00180000; - parts[0].offset = 0x00180000; -#endif - ret = npartitions; - - out: - *pparts = parts; - return ret; -} - - -module_init(epxa_mtd_init); -module_exit(epxa_mtd_cleanup); - -MODULE_AUTHOR("Clive Davies"); -MODULE_DESCRIPTION("Altera epxa mtd flash map"); -MODULE_LICENSE("GPL"); diff -urN linux-2.4.21/drivers/mtd/maps/Makefile linux-2.4.21.zipit/drivers/mtd/maps/Makefile --- linux-2.4.21/drivers/mtd/maps/Makefile 2005-02-07 11:17:13.062300058 -0500 +++ linux-2.4.21.zipit/drivers/mtd/maps/Makefile 2004-03-15 14:52:58.000000000 -0500 @@ -3,7 +3,11 @@ # # $Id: Makefile,v 1.37 2003/01/24 14:26:38 dwmw2 Exp $ +BELOW25 := $(shell echo $(PATCHLEVEL) | sed s/[1234]/y/) + +ifeq ($(BELOW25),y) O_TARGET := mapslink.o +endif # Chip mappings obj-$(CONFIG_MTD_CDB89712) += cdb89712.o @@ -13,7 +17,7 @@ obj-$(CONFIG_MTD_DC21285) += dc21285.o obj-$(CONFIG_MTD_DILNETPC) += dilnetpc.o obj-$(CONFIG_MTD_ELAN_104NC) += elan-104nc.o -obj-$(CONFIG_MTD_EPXA) += epxa-flash.o +obj-$(CONFIG_MTD_EPXA10DB) += epxa10db-flash.o obj-$(CONFIG_MTD_IQ80310) += iq80310.o obj-$(CONFIG_MTD_L440GX) += l440gx.o obj-$(CONFIG_MTD_AMD76XROM) += amd76xrom.o @@ -25,9 +29,9 @@ obj-$(CONFIG_MTD_OCTAGON) += octagon-5066.o ifneq ($(CONFIG_MTD_PHYSMAP),n) ifeq ($(CONFIG_MTD_PHYSMAP_BUSWIDTH),8) - obj-$(CONFIG_MTD_PHYSMAP) += physmap64.o + obj-$(CONFIG_MTD_PHYSMAP) += physmap64.o else - obj-$(CONFIG_MTD_PHYSMAP) += physmap.o + obj-$(CONFIG_MTD_PHYSMAP) += physmap.o endif endif obj-$(CONFIG_MTD_PNC2000) += pnc2000.o @@ -35,9 +39,6 @@ obj-$(CONFIG_MTD_RPXLITE) += rpxlite.o obj-$(CONFIG_MTD_TQM8XXL) += tqm8xxl.o obj-$(CONFIG_MTD_SA1100) += sa1100-flash.o -ifeq ($(CONFIG_ASSABET_NEPONSET),y) - obj-$(CONFIG_MTD_SA1100) += neponset-flash.o -endif obj-$(CONFIG_MTD_SBC_GXX) += sbc_gxx.o obj-$(CONFIG_MTD_SC520CDP) += sc520cdp.o obj-$(CONFIG_MTD_NETSC520) += netsc520.o diff -urN linux-2.4.21/drivers/mtd/maps/neponset-flash.c linux-2.4.21.zipit/drivers/mtd/maps/neponset-flash.c --- linux-2.4.21/drivers/mtd/maps/neponset-flash.c 2005-02-07 11:17:13.070299326 -0500 +++ linux-2.4.21.zipit/drivers/mtd/maps/neponset-flash.c 1969-12-31 19:00:00.000000000 -0500 @@ -1,109 +0,0 @@ -/* - * Flash memory access on SA11x0 based devices - * - * (C) 2000 Nicolas Pitre - * - * $Id: neponset-flash.c,v 1.18 2001/07/14 00:59:17 thockin Exp $ - */ - -#include -#include -#include -#include - -#include -#include -#include - -#include -#include -#include - -static __u8 read8(struct map_info *map, unsigned long ofs) -{ - return readb(map->map_priv_1 + ofs); -} - -static __u16 read16(struct map_info *map, unsigned long ofs) -{ - return readw(map->map_priv_1 + ofs); -} - -static __u32 read32(struct map_info *map, unsigned long ofs) -{ - return readl(map->map_priv_1 + ofs); -} - -static void copy_from(struct map_info *map, void *to, unsigned long from, ssize_t len) -{ - memcpy_fromio(to, map->map_priv_1 + from, len); -} - -static void write8(struct map_info *map, __u8 d, unsigned long adr) -{ - writeb(d, map->map_priv_1 + adr); -} - -static void write16(struct map_info *map, __u16 d, unsigned long adr) -{ - writew(d, map->map_priv_1 + adr); -} - -static void write32(struct map_info *map, __u32 d, unsigned long adr) -{ - writel(d, map->map_priv_1 + adr); -} - -static void copy_to(struct map_info *map, unsigned long to, const void *from, ssize_t len) -{ - memcpy_toio(map->map_priv_1 + to, from, len); -} - -#define MAX_SZ (32 * 1024 * 1024) - -static struct map_info neponset_map = { - name: "Neponset", - size: MAX_SZ, - buswidth: 4, - read8: read8, - read16: read16, - read32: read32, - copy_from: copy_from, - write8: write8, - write16: write16, - write32: write32, - copy_to: copy_to, -}; - -extern int parse_redboot_partitions(struct mtd_info *master, struct mtd_partition **pparts); -extern int parse_bootldr_partitions(struct mtd_info *master, struct mtd_partition **pparts); - -static struct mtd_info *neponset_mtd; - -int __init neponset_mtd_init(void) -{ - if (!machine_is_assabet() || !machine_has_neponset()) - return -ENODEV; - - neponset_map.map_priv_1 = (unsigned int)ioremap(0x08000000, MAX_SZ); - if (!neponset_map.map_priv_1) - return -ENOMEM; - - neponset_mtd = do_map_probe("cfi_probe", &neponset_map); - if (!neponset_mtd) - return -ENXIO; - neponset_mtd->module = THIS_MODULE; - add_mtd_device(neponset_mtd); - return 0; -} - -static void __exit neponset_mtd_cleanup(void) -{ - if (neponset_mtd) - map_destroy(neponset_mtd); - if (neponset_map.map_priv_1) - iounmap((void *)neponset_map.map_priv_1); -} - -module_init(neponset_mtd_init); -module_exit(neponset_mtd_cleanup); diff -urN linux-2.4.21/drivers/mtd/maps/physmap.c linux-2.4.21.zipit/drivers/mtd/maps/physmap.c --- linux-2.4.21/drivers/mtd/maps/physmap.c 2003-06-13 10:51:34.000000000 -0400 +++ linux-2.4.21.zipit/drivers/mtd/maps/physmap.c 2004-03-15 14:52:58.000000000 -0500 @@ -121,8 +121,11 @@ const char **type; printk(KERN_NOTICE "physmap flash device: %x at %x\n", WINDOW_SIZE, WINDOW_ADDR); +#ifdef CONFIG_ARCH_ZIPLINE + physmap_map.map_priv_1 = (unsigned long)ioremapi_nocache(WINDOW_ADDR, WINDOW_SIZE); +#else physmap_map.map_priv_1 = (unsigned long)ioremap(WINDOW_ADDR, WINDOW_SIZE); - +#endif if (!physmap_map.map_priv_1) { printk("Failed to ioremap\n"); return -EIO; diff -urN linux-2.4.21/drivers/mtd/maps/sa1100-flash.c linux-2.4.21.zipit/drivers/mtd/maps/sa1100-flash.c --- linux-2.4.21/drivers/mtd/maps/sa1100-flash.c 2005-02-07 11:17:13.075298869 -0500 +++ linux-2.4.21.zipit/drivers/mtd/maps/sa1100-flash.c 2004-03-15 14:52:58.000000000 -0500 @@ -97,32 +97,6 @@ * entries. Thanks. */ -#ifdef CONFIG_SA1100_ADSAGC -#define ADSAGC_FLASH_SIZE 0x02000000 -static struct mtd_partition adsagc_partitions[] = { - { - name: "bootROM", - size: 0x80000, - offset: 0, - mask_flags: MTD_WRITEABLE, /* force read-only */ - }, { - name: "zImage", - size: 0x100000, - offset: MTDPART_OFS_APPEND, - mask_flags: MTD_WRITEABLE, /* force read-only */ - }, { - name: "ramdisk.gz", - size: 0x300000, - offset: MTDPART_OFS_APPEND, - mask_flags: MTD_WRITEABLE, /* force read-only */ - }, { - name: "User FS", - size: MTDPART_SIZ_FULL, - offset: MTDPART_OFS_APPEND, - } -}; -#endif - #ifdef CONFIG_SA1100_ADSBITSY #define ADSBITSY_FLASH_SIZE 0x02000000 static struct mtd_partition adsbitsy_partitions[] = { @@ -149,32 +123,6 @@ }; #endif -#ifdef CONFIG_SA1100_ADSBITSYPLUS -#define ADSBITSYPLUS_FLASH_SIZE 0x02000000 -static struct mtd_partition adsbitsyplus_partitions[] = { - { - name: "bootROM", - size: 0x80000, - offset: 0, - mask_flags: MTD_WRITEABLE, /* force read-only */ - }, { - name: "zImage", - size: 0x100000, - offset: MTDPART_OFS_APPEND, - mask_flags: MTD_WRITEABLE, /* force read-only */ - }, { - name: "ramdisk.gz", - size: 0x300000, - offset: MTDPART_OFS_APPEND, - mask_flags: MTD_WRITEABLE, /* force read-only */ - }, { - name: "User FS", - size: MTDPART_SIZ_FULL, - offset: MTDPART_OFS_APPEND, - } -}; -#endif - #ifdef CONFIG_SA1100_ASSABET /* Phase 4 Assabet has two 28F160B3 flash parts in bank 0: */ #define ASSABET4_FLASH_SIZE 0x00400000 @@ -490,7 +438,7 @@ #endif #ifdef CONFIG_SA1100_GRAPHICSMASTER -#define GRAPHICSMASTER_FLASH_SIZE 0x02000000 +#define GRAPHICSMASTER_FLASH_SIZE 0x01000000 static struct mtd_partition graphicsmaster_partitions[] = { { name: "zImage", @@ -559,38 +507,6 @@ } #endif -#ifdef CONFIG_SA1100_HACKKIT -#define HACKKIT_FLASH_SIZE 0x01000000 -static struct mtd_partition hackkit_partitions[] = { - { - name: "BLOB", - size: 0x00040000, - offset: 0x00000000, - mask_flags: MTD_WRITEABLE, /* force read-only */ - }, { - name: "config", - size: 0x00040000, - offset: MTDPART_OFS_APPEND, - }, { - name: "kernel", - size: 0x00100000, - offset: MTDPART_OFS_APPEND, - }, { - name: "initrd", - size: 0x00180000, - offset: MTDPART_OFS_APPEND, - }, { - name: "rootfs", - size: 0x700000, - offset: MTDPART_OFS_APPEND, - }, { - name: "data", - size: MTDPART_SIZ_FULL, - offset: MTDPART_OFS_APPEND, - } -}; -#endif - #ifdef CONFIG_SA1100_HUW_WEBPANEL #define HUW_WEBPANEL_FLASH_SIZE 0x01000000 static struct mtd_partition huw_webpanel_partitions[] = { @@ -639,12 +555,12 @@ offset: 0x00540000, }, { name: "JORNADA720 usr local", - size: 0, /* will expand to the end of the flash */ + size: 0 /* will expand to the end of the flash */ offset: 0x00d00000, } }; -static void jornada720_set_vpp(struct map_info *map, int vpp) +static void jornada720_set_vpp(int vpp) { if (vpp) PPSR |= 0x80; @@ -655,27 +571,6 @@ #endif -#ifdef CONFIG_SA1100_NANOENGINE -/* nanoEngine has one 28F320B3B Flash part in bank 0: */ -#define NANOENGINE_FLASH_SIZE 0x00400000 -static struct mtd_partition nanoengine_partitions[] = { - { - name: "nanoEngine boot firmware and parameter table", - size: 0x00010000, /* 32K */ - offset: 0x00000000, - mask_flags: MTD_WRITEABLE, /* force read-only */ - },{ - name: "kernel/initrd reserved", - size: 0x002f0000, - offset: 0x00010000, - },{ - name: "experimental filesystem allocation", - size: 0x00100000, - offset: 0x00300000, - } -}; -#endif - #ifdef CONFIG_SA1100_PANGOLIN #define PANGOLIN_FLASH_SIZE 0x04000000 static struct mtd_partition pangolin_partitions[] = { @@ -804,32 +699,6 @@ }; #endif /* CONFIG_SA1100_SIMPAD */ -#ifdef CONFIG_SA1100_SIMPUTER -#define SIMPUTER_FLASH_SIZE 0x02000000 -static struct mtd_partition simputer_partitions[] = { - { - name: "blob+logo", - offset: 0, - size: 0x00040000 - }, - { - name: "kernel", - offset: MTDPART_OFS_APPEND, - size: 0x000C0000 - }, - { - name: "/(cramfs)", - offset: MTDPART_OFS_APPEND, - size: 0x00200000 - }, - { - name: "/usr/local(jffs2)", - offset: MTDPART_OFS_APPEND, - size: MTDPART_SIZ_FULL /* expand till the end */ - } -}; -#endif - #ifdef CONFIG_SA1100_STORK #define STORK_FLASH_SIZE 0x02000000 static struct mtd_partition stork_partitions[] = { @@ -897,7 +766,7 @@ #endif extern int parse_redboot_partitions(struct mtd_info *master, struct mtd_partition **pparts); -extern int parse_cmdline_partitions(struct mtd_info *master, struct mtd_partition **pparts, char *); +extern int parse_bootldr_partitions(struct mtd_info *master, struct mtd_partition **pparts); static struct mtd_partition *parsed_parts; static struct mtd_info *mymtd; @@ -918,14 +787,6 @@ */ part_type = "static"; -#ifdef CONFIG_SA1100_ADSAGC - if (machine_is_adsagc()) { - parts = adsagc_partitions; - nb_parts = ARRAY_SIZE(adsagc_partitions); - sa1100_map.size = ADSAGC_FLASH_SIZE; - sa1100_map.buswidth = (MSC1 & MSC_RBW) ? 2 : 4; - } -#endif #ifdef CONFIG_SA1100_ADSBITSY if (machine_is_adsbitsy()) { parts = adsbitsy_partitions; @@ -934,14 +795,6 @@ sa1100_map.buswidth = (MSC1 & MSC_RBW) ? 2 : 4; } #endif -#ifdef CONFIG_SA1100_ADSBITSYPLUS - if (machine_is_adsbitsyplus()) { - parts = adsbitsyplus_partitions; - nb_parts = ARRAY_SIZE(adsbitsyplus_partitions); - sa1100_map.size = ADSBITSYPLUS_FLASH_SIZE; - sa1100_map.buswidth = (MSC1 & MSC_RBW) ? 2 : 4; - } -#endif #ifdef CONFIG_SA1100_ASSABET if (machine_is_assabet()) { parts = assabet_partitions; @@ -1016,13 +869,6 @@ sa1100_map.set_vpp = h3600_set_vpp; } #endif -#ifdef CONFIG_SA1100_HACKKIT - if (machine_is_hackkit()) { - parts = hackkit_partitions; - nb_parts = ARRAY_SIZE(hackkit_partitions); - sa1100_map.size = HACKKIT_FLASH_SIZE; - } -#endif #ifdef CONFIG_SA1100_HUW_WEBPANEL if (machine_is_huw_webpanel()) { parts = huw_webpanel_partitions; @@ -1038,13 +884,6 @@ sa1100_map.set_vpp = jornada720_set_vpp; } #endif -#ifdef CONFIG_SA1100_NANOENGINE - if (machine_is_nanoengine()) { - parts = nanoengine_partitions; - nb_parts = ARRAY_SIZE(nanoengine_partitions); - sa1100_map.size = NANOENGINE_FLASH_SIZE; - } -#endif #ifdef CONFIG_SA1100_PANGOLIN if (machine_is_pangolin()) { parts = pangolin_partitions; @@ -1080,13 +919,6 @@ sa1100_map.size = SIMPAD_FLASH_SIZE; } #endif -#ifdef CONFIG_SA1100_SIMPUTER - if (machine_is_simputer()) { - parts = simputer_partitions; - nb_parts = ARRAY_SIZE(simputer_partitions); - sa1100_map.size = SIMPUTER_FLASH_SIZE; - } -#endif #ifdef CONFIG_SA1100_STORK if (machine_is_stork()) { parts = stork_partitions; @@ -1121,9 +953,7 @@ * specific machine settings might have been set above. */ printk(KERN_NOTICE "SA1100 flash: probing %d-bit flash bus\n", sa1100_map.buswidth*8); - mymtd = do_map_probe("jedec_probe", &sa1100_map); - if (!mymtd) - mymtd = do_map_probe("cfi_probe", &sa1100_map); + mymtd = do_map_probe("cfi_probe", &sa1100_map); ret = -ENXIO; if (!mymtd) goto out_err; diff -urN linux-2.4.21/drivers/mtd/mtdblock.c linux-2.4.21.zipit/drivers/mtd/mtdblock.c --- linux-2.4.21/drivers/mtd/mtdblock.c 2003-06-13 10:51:34.000000000 -0400 +++ linux-2.4.21.zipit/drivers/mtd/mtdblock.c 2004-03-15 14:52:58.000000000 -0500 @@ -521,6 +521,8 @@ static void mtdblock_request(RQFUNC_ARG) { + printk(KERN_ERR "we are in mtdblock_request"); + /* Don't do anything, except wake the thread if necessary */ wake_up(&thr_wq); } @@ -618,6 +620,7 @@ { int i; + spin_lock_init(&mtdblks_lock); #ifdef CONFIG_DEVFS_FS if (devfs_register_blkdev(MTD_BLOCK_MAJOR, DEVICE_NAME, &mtd_fops)) @@ -642,12 +645,21 @@ mtd_sizes[i] = 0; mtd_blksizes[i] = BLOCK_SIZE; } + DEBUG(MTD_DEBUG_LEVEL2, "mtdblock: init_mtdblock"); init_waitqueue_head(&thr_wq); /* Allow the block size to default to BLOCK_SIZE. */ blksize_size[MAJOR_NR] = mtd_blksizes; blk_size[MAJOR_NR] = mtd_sizes; + DEBUG(MTD_DEBUG_LEVEL2, "mtdblock: blk_init_queue: 0x%08lX", &mtdblock_request); + + { + request_queue_t *q = BLK_DEFAULT_QUEUE(MAJOR_NR); + printk(KERN_ERR "q: 0x%08lX, &head: 0x%08lX, &elevator: 0x%08lX", q, &q->queue_head, &q->elevator); + + } blk_init_queue(BLK_DEFAULT_QUEUE(MAJOR_NR), &mtdblock_request); + DEBUG(MTD_DEBUG_LEVEL2, "mtdblock: init_mtdblock"); kernel_thread (mtdblock_thread, NULL, CLONE_FS|CLONE_FILES|CLONE_SIGHAND); return 0; } diff -urN linux-2.4.21/drivers/net/cirrus.c linux-2.4.21.zipit/drivers/net/cirrus.c --- linux-2.4.21/drivers/net/cirrus.c 2005-02-07 11:17:13.120294754 -0500 +++ linux-2.4.21.zipit/drivers/net/cirrus.c 2004-03-15 14:52:28.000000000 -0500 @@ -67,6 +67,9 @@ #elif CONFIG_ARCH_CDB89712 # define CIRRUS_DEFAULT_IO ETHER_BASE + 0x300 # define CIRRUS_DEFAULT_IRQ IRQ_EINT3 +#elif CONFIG_ARCH_ZIPLINE +# define CIRRUS_DEFAULT_IO ZIPLINE_VIRT_CS8900A +# define CIRRUS_DEFAULT_IRQ IRQ_EINT3 #else # define CIRRUS_DEFAULT_IO 0 # define CIRRUS_DEFAULT_IRQ 0 @@ -621,6 +624,7 @@ return (-EINVAL); } +#ifndef CONFIG_ARCH_ZIPLINE if ((result = check_region (dev->base_addr,16))) { printk (KERN_ERR "%s: can't get I/O port address 0x%lx\n",dev->name,dev->base_addr); return (result); @@ -628,16 +632,27 @@ if (!request_region (dev->base_addr,16,dev->name)) return -EBUSY; - +#endif #ifdef CONFIG_SA1100_FRODO frodo_reset (dev); #endif /* #ifdef CONFIG_SA1100_FRODO */ +#ifdef CONFIG_ARCH_ZIPLINE + { + char ZIPLINE[] = { 0,1,2,3,4,5 }; + + for (i=0; i < ETH_ALEN; i++) + { + dev->dev_addr[i] = ZIPLINE[i]; + } + printk(KERN_WARNING "cs89x0: No EEPROM, hacked in ETHERNET ADDRESS....\n"); + } +#else /* if an EEPROM is present, use it's MAC address */ if (!cirrus_eeprom (dev,&eeprom)) for (i = 0; i < 6; i++) dev->dev_addr[i] = eeprom.mac[i]; - +#endif /* verify EISA registration number for Cirrus Logic */ if ((value = cirrus_read (dev,PP_ProductID)) != EISA_REG_CODE) { printk (KERN_ERR "%s: incorrect signature 0x%.4x\n",dev->name,value); @@ -675,7 +690,9 @@ static void __exit cirrus_cleanup (void) { +#ifndef CONFIG_ARCH_ZIPLINE release_region (dev.base_addr,16); +#endif unregister_netdev (&dev); } diff -urN linux-2.4.21/drivers/net/Config.in linux-2.4.21.zipit/drivers/net/Config.in --- linux-2.4.21/drivers/net/Config.in 2005-02-07 11:17:13.089297589 -0500 +++ linux-2.4.21.zipit/drivers/net/Config.in 2004-03-15 14:52:28.000000000 -0500 @@ -26,7 +26,7 @@ if [ "$CONFIG_NET_ETHERNET" = "y" ]; then if [ "$CONFIG_ARM" = "y" ]; then dep_bool ' ARM EBSA110 AM79C961A support' CONFIG_ARM_AM79C961A $CONFIG_ARCH_EBSA110 - tristate ' Cirrus Logic CS8900A support' CONFIG_ARM_CIRRUS + tristate ' Cirrus Logic CS8900A support' CONFIG_CS89x0 if [ "$CONFIG_ARCH_ACORN" = "y" ]; then source drivers/acorn/net/Config.in fi diff -urN linux-2.4.21/drivers/net/cs89x0.c linux-2.4.21.zipit/drivers/net/cs89x0.c --- linux-2.4.21/drivers/net/cs89x0.c 2005-02-07 11:17:13.134293474 -0500 +++ linux-2.4.21.zipit/drivers/net/cs89x0.c 2004-03-15 14:52:28.000000000 -0500 @@ -164,6 +164,10 @@ static unsigned int netcard_portlist[] __initdata = { 0x0300, 0}; static unsigned int cs8900_irq_map[] = {1,0,0,0}; +#elif defined(CONFIG_ARCH_ZIPLINE) +static unsigned int netcard_portlist[] __initdata = + { 0xfc000003, 0 }; +static unsigned int cs8900_irq_map[] = {7,0,0,0}; #else static unsigned int netcard_portlist[] __initdata = { 0x300, 0x320, 0x340, 0x360, 0x200, 0x220, 0x240, 0x260, 0x280, 0x2a0, 0x2c0, 0x2e0, 0}; @@ -269,7 +273,7 @@ __setup("cs89x0_media=", media_fn); #endif - + /* Check for a network adaptor of this type, and return '0' iff one exists. If dev->base_addr == 0, probe all likely locations. If dev->base_addr == 1, always return failure. @@ -277,7 +281,6 @@ (detachable devices only). Return 0 on success. */ - int __init cs89x0_probe(struct net_device *dev) { int i; @@ -411,6 +414,7 @@ } lp = (struct net_local *)dev->priv; +#ifndef CONFIG_ARCH_ZIPLINE /* Grab the region so we can find another board if autoIRQ fails. */ if (!request_region(ioaddr & ~3, NETCARD_IO_EXTENT, dev->name)) { printk(KERN_ERR "%s: request_region(0x%x, 0x%x) failed\n", @@ -418,6 +422,7 @@ retval = -EBUSY; goto out1; } +#endif /* CONFIG_ARCH_ZIPLINE */ #ifdef CONFIG_SH_HICOSH4 /* truely reset the chip */ @@ -502,7 +507,7 @@ cnt = (*confd++ & 0x00ff) >> 1; while (--cnt > 0) { __u16 j = *confd++; - + switch (j & 0x0fff) { case PP_IA: for (i = 0; i < ETH_ALEN/2; i++) { @@ -518,7 +523,7 @@ } else #endif - if ((readreg(dev, PP_SelfST) & (EEPROM_OK | EEPROM_PRESENT)) == + if ((readreg(dev, PP_SelfST) & (EEPROM_OK | EEPROM_PRESENT)) == (EEPROM_OK|EEPROM_PRESENT)) { /* Load the MAC. */ for (i=0; i < ETH_ALEN/2; i++) { @@ -527,17 +532,17 @@ dev->dev_addr[i*2] = Addr & 0xFF; dev->dev_addr[i*2+1] = Addr >> 8; } - - /* Load the Adapter Configuration. - Note: Barring any more specific information from some - other source (ie EEPROM+Schematics), we would not know - how to operate a 10Base2 interface on the AUI port. - However, since we do read the status of HCB1 and use - settings that always result in calls to control_dc_dc(dev,0) - a BNC interface should work if the enable pin - (dc/dc converter) is on HCB1. It will be called AUI + + /* Load the Adapter Configuration. + Note: Barring any more specific information from some + other source (ie EEPROM+Schematics), we would not know + how to operate a 10Base2 interface on the AUI port. + However, since we do read the status of HCB1 and use + settings that always result in calls to control_dc_dc(dev,0) + a BNC interface should work if the enable pin + (dc/dc converter) is on HCB1. It will be called AUI however. */ - + lp->adapter_cnf = 0; i = readreg(dev, PP_LineCTL); /* Preserve the setting of the HCB1 pin. */ @@ -554,22 +559,22 @@ lp->adapter_cnf |= A_CNF_AUI | A_CNF_MEDIA_AUI; /* Check if the card is in Auto mode. */ if ((i & (AUI_ONLY | AUTO_AUI_10BASET)) == AUTO_AUI_10BASET) - lp->adapter_cnf |= A_CNF_AUI | A_CNF_10B_T | + lp->adapter_cnf |= A_CNF_AUI | A_CNF_10B_T | A_CNF_MEDIA_AUI | A_CNF_MEDIA_10B_T | A_CNF_MEDIA_AUTO; - + if (net_debug > 1) printk(KERN_INFO "%s: PP_LineCTL=0x%x, adapter_cnf=0x%x\n", dev->name, i, lp->adapter_cnf); /* IRQ. Other chips already probe, see below. */ - if (lp->chip_type == CS8900) + if (lp->chip_type == CS8900) lp->isa_config = readreg(dev, PP_CS8900_ISAINT) & INT_NO_MASK; - + printk( "[Cirrus EEPROM] "); } printk("\n"); - + /* First check to see if an EEPROM is attached. */ #ifdef CONFIG_SH_HICOSH4 /* no EEPROM on HiCO, don't hazzle with it here */ if (1) { @@ -577,20 +582,39 @@ } else #endif if ((readreg(dev, PP_SelfST) & EEPROM_PRESENT) == 0) +#ifdef CONFIG_ARCH_ZIPLINE + { + char ZIPLINE[] = { 0,1,2,3,4,5 }; + + for (i=0; i < ETH_ALEN; i++) + { + dev->dev_addr[i] = ZIPLINE[i]; + } + printk(KERN_WARNING "cs89x0: No EEPROM, hacked in ETHERNET ADDRESS....\n"); + + if (!lp->auto_neg_cnf) + lp->auto_neg_cnf = 1; + + /* Store adapter configuration */ + lp->adapter_cnf = A_CNF_MEDIA_10B_T|A_CNF_10B_T|A_CNF_DC_DC_POLARITY; + lp->isa_config = 0; + } +#else printk(KERN_WARNING "cs89x0: No EEPROM, relying on command line....\n"); +#endif /* CONFIG_ARCH_ZIPLINE */ else if (get_eeprom_data(dev, START_EEPROM_DATA,CHKSUM_LEN,eeprom_buff) < 0) { printk(KERN_WARNING "\ncs89x0: EEPROM read failed, relying on command line.\n"); } else if (get_eeprom_cksum(START_EEPROM_DATA,CHKSUM_LEN,eeprom_buff) < 0) { /* Check if the chip was able to read its own configuration starting at 0 in the EEPROM*/ if ((readreg(dev, PP_SelfST) & (EEPROM_OK | EEPROM_PRESENT)) != - (EEPROM_OK|EEPROM_PRESENT)) + (EEPROM_OK|EEPROM_PRESENT)) printk(KERN_WARNING "cs89x0: Extended EEPROM checksum bad and no Cirrus EEPROM, relying on command line\n"); - + } else { /* This reads an extended EEPROM that is not documented in the CS8900 datasheet. */ - + /* get transmission control word but keep the autonegotiation bits */ if (!lp->auto_neg_cnf) lp->auto_neg_cnf = eeprom_buff[AUTO_NEG_CNF_OFFSET/2]; /* Store adapter configuration */ @@ -655,7 +679,7 @@ printk("\ncs89x0: invalid ISA interrupt number %d\n", i); else i = cs8900_irq_map[i]; - + lp->irq_map = CS8900_IRQ_MAP; /* fixed IRQ map for CS8900 */ } else { int irq_map_buff[IRQ_MAP_LEN/2]; @@ -671,7 +695,7 @@ dev->irq = i; } - printk(" IRQ %d", dev->irq); + printk(" IRQ %d, 0x%04X", dev->irq, lp->irq_map); #if ALLOW_DMA if (lp->use_dma) { @@ -708,7 +732,9 @@ printk("cs89x0_probe1() successful\n"); return 0; out2: +#ifndef CONFIG_ARCH_ZIPLINE release_region(ioaddr & ~3, NETCARD_IO_EXTENT); +#endif /* CONFIG_ARCH_ZIPLINE */ out1: kfree(dev->priv); dev->priv = 0; @@ -716,7 +742,7 @@ return retval; } - + /********************************* * This page contains DMA routines **********************************/ @@ -1815,7 +1841,9 @@ kfree(dev_cs89x0.priv); dev_cs89x0.priv = NULL; /* gets re-allocated by cs89x0_probe1 */ /* If we don't do this, we can't re-insmod it later. */ +#ifndef CONFIG_ARCH_ZIPLINE release_region(dev_cs89x0.base_addr, NETCARD_IO_EXTENT); +#endif /* CONFIG_ARCH_ZIPLINE */ } } #endif /* MODULE */ diff -urN linux-2.4.21/drivers/net/cs89x0.h linux-2.4.21.zipit/drivers/net/cs89x0.h --- linux-2.4.21/drivers/net/cs89x0.h 2002-11-28 18:53:13.000000000 -0500 +++ linux-2.4.21.zipit/drivers/net/cs89x0.h 2004-04-20 12:47:29.000000000 -0400 @@ -427,8 +427,8 @@ #define DMA_SIZE (16*1024) /* Size of dma buffer - 16k */ #define CS8900 0x0000 -#define CS8920 0x4000 -#define CS8920M 0x6000 +#define CS8920 0x4000 +#define CS8920M 0x6000 #define REVISON_BITS 0x1F00 #define EEVER_NUMBER 0x12 #define CHKSUM_LEN 0x14 @@ -439,6 +439,8 @@ #define PNP_IRQ_FRMT 0x0022 /* PNP small item IRQ format */ #ifdef CONFIG_SH_HICOSH4 #define CS8900_IRQ_MAP 0x0002 /* HiCO-SH4 board has its IRQ on #1 */ +#elif defined (CONFIG_ARCH_ZIPLINE) +#define CS8900_IRQ_MAP 0x0080 #else #define CS8900_IRQ_MAP 0x1c20 /* This IRQ map is fixed */ #endif diff -urN linux-2.4.21/drivers/serial/clps711x.c linux-2.4.21.zipit/drivers/serial/clps711x.c --- linux-2.4.21/drivers/serial/clps711x.c 2005-02-07 11:17:13.529257357 -0500 +++ linux-2.4.21.zipit/drivers/serial/clps711x.c 2004-03-15 14:53:02.000000000 -0500 @@ -434,7 +434,11 @@ { .iobase = SYSCON1, .irq = IRQ_UTXINT1, /* IRQ_URXINT1, IRQ_UMSINT */ - .uartclk = 3686400, +#ifdef CONFIG_ZIPLINE_90MHZ + uartclk: 4515840, +#else + uartclk: 3686400, +#endif /* CONFIG_ZIPLINE_90MHZ */ .fifosize = 16, .ops = &clps711x_pops, .line = 0, @@ -443,7 +447,11 @@ { .iobase = SYSCON2, .irq = IRQ_UTXINT2, /* IRQ_URXINT2 */ - .uartclk = 3686400, +#ifdef CONFIG_ZIPLINE_90MHZ + uartclk: 4515840, +#else + uartclk: 3686400, +#endif /* CONFIG_ZIPLINE_90MHZ */ .fifosize = 16, .ops = &clps711x_pops, .line = 1, @@ -529,7 +537,33 @@ *bits = 8; quot = ubrlcr & UBRLCR_BAUD_MASK; +#ifdef CONFIG_ZIPLINE_90MHZ + switch(quot) + { + case 4: + *baud = 57600; + break; + + case 14: + *baud = 19200; + break; + + case 19: + *baud = 14400; + break; + + case 58: + *baud = 4800; + break; + + case 28: + default: + *baud = 9600; + break; + } +#else *baud = port->uartclk / (16 * (quot + 1)); +#endif /* CONFIG_ZIPLINE_90MHZ */ } } diff -urN linux-2.4.21/drivers/serial/core.c linux-2.4.21.zipit/drivers/serial/core.c --- linux-2.4.21/drivers/serial/core.c 2005-02-07 11:17:13.541256260 -0500 +++ linux-2.4.21.zipit/drivers/serial/core.c 2004-03-15 14:53:02.000000000 -0500 @@ -352,8 +352,11 @@ ((port->flags & ASYNC_SPD_MASK) == ASYNC_SPD_CUST)) quot = port->custom_divisor; else +#ifdef CONFIG_ZIPLINE_90MHZ + quot = (((port->uartclk * 10) / (16 * baud)) + 5) / 10; +#else quot = port->uartclk / (16 * baud); - +#endif /*CONFIG_ZIPLINE_90MHZ*/ return quot; } @@ -402,7 +405,7 @@ termios->c_cflag |= B9600; } - uart_update_timeout(port, cflag, port->uartclk / (16 * quot)); + uart_update_timeout(port, cflag, baud); if (termios->c_cflag & CRTSCTS) state->info->flags |= UIF_CTS_FLOW; @@ -1926,7 +1929,7 @@ if (flow == 'r') termios.c_cflag |= CRTSCTS; - quot = (port->uartclk / (16 * baud)); + quot = uart_calculate_quot(port, baud); port->ops->change_speed(port, termios.c_cflag, 0, quot); co->cflag = termios.c_cflag; diff -urN linux-2.4.21/include/asm-arm/arch-clps711x/hardware.h linux-2.4.21.zipit/include/asm-arm/arch-clps711x/hardware.h --- linux-2.4.21/include/asm-arm/arch-clps711x/hardware.h 2005-02-07 11:17:14.000000000 -0500 +++ linux-2.4.21.zipit/include/asm-arm/arch-clps711x/hardware.h 2004-04-20 12:46:41.000000000 -0400 @@ -65,6 +65,10 @@ #define EP7212_BASE CLPS7111_VIRT_BASE #include +#elif defined (CONFIG_ARCH_ZIPLINE) +#define ZIPLINE_VIRT_BASE CLPS7111_VIRT_BASE +#define ZIPLINE_BASE CLPS7111_VIRT_BASE +#include #endif @@ -136,10 +140,10 @@ #if defined (CONFIG_ARCH_EDB7211) /* - * The extra 8 lines of the keyboard matrix are wired to chip select 3 (nCS3) + * The extra 8 lines of the keyboard matrix are wired to chip select 3 (nCS3) * and repeat across it. This is the mapping for it. * - * In jumpered boot mode, nCS3 is mapped to 0x4000000, not 0x3000000. This + * In jumpered boot mode, nCS3 is mapped to 0x4000000, not 0x3000000. This * was cause for much consternation and headscratching. This should probably * be made a compile/run time kernel option. */ @@ -149,10 +153,10 @@ /* - * The CS8900A ethernet chip has its I/O registers wired to chip select 2 + * The CS8900A ethernet chip has its I/O registers wired to chip select 2 * (nCS2). This is the mapping for it. * - * In jumpered boot mode, nCS2 is mapped to 0x5000000, not 0x2000000. This + * In jumpered boot mode, nCS2 is mapped to 0x5000000, not 0x2000000. This * was cause for much consternation and headscratching. This should probably * be made a compile/run time kernel option. */ @@ -177,6 +181,70 @@ #endif /* CONFIG_ARCH_EDB7211 */ +#if defined (CONFIG_ARCH_ZIPLINE) +/* + * The extra 8 lines of the keyboard matrix are wired to chip select 3 (nCS3) + * and repeat across it. This is the mapping for it. + * + * In jumpered boot mode, nCS3 is mapped to 0x4000000, not 0x3000000. This + * was cause for much consternation and headscratching. This should probably + * be made a compile/run time kernel option. + */ +#if 0 +#define ZIPLINE_PHYS_EXTKBD CS3_PHYS_BASE /* physical */ + +#define ZIPLINE_VIRT_EXTKBD (0xfd000000) /* virtual */ +#endif +/* + * The CS8900A ethernet chip has its I/O registers wired to chip select 2 + * (nCS2). This is the mapping for it. + * + * In jumpered boot mode, nCS2 is mapped to 0x5000000, not 0x2000000. This + * was cause for much consternation and headscratching. This should probably + * be made a compile/run time kernel option. + */ +#define ZIPLINE_PHYS_CS8900A CS3_PHYS_BASE /* physical */ + +#define ZIPLINE_VIRT_CS8900A (0xfc000000) /* virtual */ + + +/* + * The two flash banks are wired to chip selects 0 and 1. This is the mapping + * for them. + * + * nCS0 and nCS1 are at 0x70000000 and 0x60000000, respectively, when running + * in jumpered boot mode. + */ +#define ZIPLINE_PHYS_FLASH CS0_PHYS_BASE /* physical */ + +#define ZIPLINE_VIRT_FLASH (0xfb000000) /* virtual */ + +/* + * The Radio chip selects are wired to chip selects 1 and 2. This is the mapping + * for them. + */ + +#define ZIPLINE_PHYS_RADIO_IO CS1_PHYS_BASE /* physical */ + +#define ZIPLINE_VIRT_RADIO_IO (0xfa000000) /* virtual */ + +#define ZIPLINE_PHYS_RADIO_CONFIG CS2_PHYS_BASE /* physical */ + +#define ZIPLINE_VIRT_RADIO_CONFIG (0xf9000000) /* virtual */ + +#define ZIPLINE_PHYS_SRAM_CONFIG CS6_PHYS_BASE /* physical */ + +#define ZIPLINE_VIRT_SRAM_CONFIG (0xf8000000) /* virtual */ + +#define FLASH_START CS0_PHYS_BASE +#define FLASH_SIZE 0x00200000 +#define FLASH_WIDTH 2 + +#define ZIPLINE_VIRT_SDRAM_FRAMEBUFFER 0xF7000000 +#define ZIPLINE_PHYS_SDRAM_FRAMEBUFFER 0xC0000000 +#define ZIPLINE_SIZE_SDRAM_FRAMEBUFFER 0x00020000 + +#endif /* CONFIG_ARCH_ZIPLINE */ /* * Relevant bits in port D, which controls power to the various parts of * the LCD on the EDB7211. diff -urN linux-2.4.21/include/asm-arm/arch-clps711x/irq.h linux-2.4.21.zipit/include/asm-arm/arch-clps711x/irq.h --- linux-2.4.21/include/asm-arm/arch-clps711x/irq.h 2002-08-02 20:39:45.000000000 -0400 +++ linux-2.4.21.zipit/include/asm-arm/arch-clps711x/irq.h 2004-04-20 12:53:31.000000000 -0400 @@ -18,3 +18,50 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #define fixup_irq(i) (i) + +#ifdef CONFIG_ARCH_ZIPLINE + +#include +#include + + +static void zipline_mask_irq(unsigned int irq) +{ + if ( irq < 16 ) + ep_writel(ep_readl(INTMR1) & ~(1 << irq), INTMR1); + else if ( irq < 32 ) + ep_writel(ep_readl(INTMR2) & ~(1 << (irq - 16)), INTMR2); + else + ep_writel(ep_readl(INTMR3) & ~(1 << (irq - 32)), INTMR3); +} + + +static void zipline_unmask_irq(unsigned int irq) +{ + if ( irq < 16 ) + ep_writel(ep_readl(INTMR1) | (1 << irq), INTMR1); + else if ( irq < 32 ) + ep_writel(ep_readl(INTMR2) | (1 << (irq - 16)), INTMR2); + else + ep_writel(ep_readl(INTMR3) | (1 << (irq - 32)), INTMR3); +} + + +static __inline__ void zipline_init_irq(void) +{ + int i; + + ep_writel(0, INTMR1); + ep_writel(0, INTMR2); + ep_writel(0, INTMR3); + + for (i = 0; i < NR_IRQS; i++) { + irq_desc[i].valid = 1; + irq_desc[i].probe_ok = 1; + irq_desc[i].mask_ack = zipline_mask_irq; + irq_desc[i].mask = zipline_mask_irq; + irq_desc[i].unmask = zipline_unmask_irq; + } +} + +#endif /* CONFIG_ARCH_ZIPLINE */ diff -urN linux-2.4.21/include/asm-arm/arch-clps711x/irqs.h linux-2.4.21.zipit/include/asm-arm/arch-clps711x/irqs.h --- linux-2.4.21/include/asm-arm/arch-clps711x/irqs.h 2002-08-02 20:39:45.000000000 -0400 +++ linux-2.4.21.zipit/include/asm-arm/arch-clps711x/irqs.h 2004-04-20 12:46:26.000000000 -0400 @@ -49,5 +49,10 @@ #define INT2_IRQS (0x30070000) #define INT2_ACK_IRQS (0x00010000) +#ifdef CONFIG_ARCH_ZIPLINE +#define NR_IRQS 48 +#define FIQ_START 32 +#else #define NR_IRQS 30 +#endif /* CONFIG_ARCH_ZIPLINE */ diff -urN linux-2.4.21/include/asm-arm/arch-clps711x/timex.h linux-2.4.21.zipit/include/asm-arm/arch-clps711x/timex.h --- linux-2.4.21/include/asm-arm/arch-clps711x/timex.h 2002-08-02 20:39:45.000000000 -0400 +++ linux-2.4.21.zipit/include/asm-arm/arch-clps711x/timex.h 2004-04-20 12:46:26.000000000 -0400 @@ -20,4 +20,8 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#ifdef CONFIG_ZIPLINE_90MHZ +#define CLOCK_TICK_RATE 627200 +#else #define CLOCK_TICK_RATE 512000 +#endif /* CONFIG_ZIPLINE_90MHZ */ diff -urN linux-2.4.21/include/asm-arm/hardware/ep7312.h linux-2.4.21.zipit/include/asm-arm/hardware/ep7312.h --- linux-2.4.21/include/asm-arm/hardware/ep7312.h 2005-02-07 11:17:14.000000000 -0500 +++ linux-2.4.21.zipit/include/asm-arm/hardware/ep7312.h 2004-04-20 12:46:41.000000000 -0400 @@ -4,7 +4,7 @@ * This file contains the hardware definitions of the EP7312 internal * registers. * - * Copyright (C) 2003 Roland A.I. Rosier . + * Copyright (C) 2000 Deep Blue Solutions Ltd. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -18,49 +18,114 @@ * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef __ASM_HARDWARE_EP7312_H #define __ASM_HARDWARE_EP7312_H #include -/* - * Include CLPS7111 and EP7212 register definitions - */ - #include -#include /* * define EP7312_BASE to be the base address of the region * you want to access. */ -#define EP7312_PHYS_BASE (0x80000000) +#define EP7312_PHYS_BASE (0x80000000) +#define EP7312_BASE (0xFF000000) + +#ifndef __ASSEMBLY__ +#define ep_readl(off) __raw_readl(EP7312_BASE + (off)) +#define ep_writel(val,off) __raw_writel(val, EP7312_BASE + (off)) + +#define ep_readb(off) __raw_readb(EP7312_BASE + (off)) +#define ep_writeb(val,off) __raw_writeb(val, EP7312_BASE + (off)) +#endif + +/* + * These registers are specific to the EP7312 only + */ +#define DAIR 0x2000 +#define DAIR0 0x2040 +#define DAIDR1 0x2080 +#define DAIDR2 0x20c0 +#define DAISR 0x2100 +#define SYSCON3 0x2200 +#define INTSR3 0x2240 +#define INTMR3 0x2280 +#define LEDFLSH 0x22c0 +#define SDCONF 0x2300 +#define SDRFPR 0x2340 +#define DAI64FS 0x2600 + +#define DAIR_DAIEN (1 << 16) +#define DAIR_ECS (1 << 17) +#define DAIR_LCTM (1 << 19) +#define DAIR_LCRM (1 << 20) +#define DAIR_RCTM (1 << 21) +#define DAIR_RCRM (1 << 22) +#define DAIR_LBM (1 << 23) + +#define DAIDR2_FIFOEN (1 << 15) +#define DAIDR2_FIFOLEFT (0x0d << 16) +#define DAIDR2_FIFORIGHT (0x11 << 16) + +#define DAISR_RCTS (1 << 0) +#define DAISR_RCRS (1 << 1) +#define DAISR_LCTS (1 << 2) +#define DAISR_LCRS (1 << 3) +#define DAISR_RCTU (1 << 4) +#define DAISR_RCRO (1 << 5) +#define DAISR_LCTU (1 << 6) +#define DAISR_LCRO (1 << 7) +#define DAISR_RCNF (1 << 8) +#define DAISR_RCNE (1 << 9) +#define DAISR_LCNF (1 << 10) +#define DAISR_LCNE (1 << 11) +#define DAISR_FIFO (1 << 12) + +#define SYSCON3_ADCCON (1 << 0) +#define SYSCON3_DAISEL (1 << 3) +#define SYSCON3_ADCCKNSEN (1 << 4) +#define SYSCON3_FASTWAKE (1 << 8) +#define SYSCON3_DAIEN (1 << 9) + +#define SDCONF_ACTIVE (1 << 10) +#define SDCONF_CLKCTL (1 << 9) +#define SDCONF_WIDTH_4 (0 << 7) +#define SDCONF_WIDTH_8 (1 << 7) +#define SDCONF_WIDTH_16 (2 << 7) +#define SDCONF_WIDTH_32 (3 << 7) +#define SDCONF_SIZE_16 (0 << 5) +#define SDCONF_SIZE_64 (1 << 5) +#define SDCONF_SIZE_128 (2 << 5) +#define SDCONF_SIZE_256 (3 << 5) +#define SDCONF_CASLAT_2 (2) +#define SDCONF_CASLAT_3 (3) + +#define DAI64FS_I2SF64 (1 << 0) +#define DAI64FS_AUDIOCLKEN (1 << 1) +//#define DAI64FS_AUDCLK11MHZ (1 << 2) +#define DAI64FS_AUDEXTCLK (1 << 2) +#define DAI64FS_MCLKEN (1 << 3) +//#define DAI64FS_22KHZ (4 << 8) +//#define DAI64FS_44KHZ (2 << 8) + +#define DAI64FS_KHZMASK (0x7F << 8) + +#ifdef CONFIG_ZIPLINE_90MHZ + +#define DAI64FS_32KHZ (11 << 8) +#define DAI64FS_44KHZ (8 << 8) +#define DAI64FS_48KHZ ((2 << 8) | DAI64FS_AUDEXTCLK) + +#else + +#define DAI64FS_32KHZ (9 << 8) +#define DAI64FS_44KHZ ((2 << 8) | DAI64FS_AUDEXTCLK) +#define DAI64FS_48KHZ (6 << 8) -#define SDCONF 0x2300 /* SDRAM Configuration register */ -#define SDRFPR 0x2340 /* SDRAM Refresh period register */ -#define UNIQID 0x2440 /* 32 bit unique ID for the EP73xx device */ -#define DAI64FS 0x2600 /* DAI 64Fs Control Register */ -#define PLLW 0x2610 /* Write Register for PLL Multiplier */ -#define PLLR 0xA5A8 /* Read Register for PLL Multiplier */ -#define RANDID0 0x2700 /* Bits 31-0 of 128-bit random ID */ -#define RANDID1 0x2704 /* Bits 63-32 of 128-bit random ID */ -#define RANDID2 0x2708 /* Bits 95-64 of 128-bit random ID */ -#define RANDID3 0x270C /* Bits 127-96 of 128-bit random ID */ - -#define SDCONF_ACTIVE (1 << 10) -#define SDCONF_CLKCTL (1 << 9) -#define SDCONF_WIDTH_4 (0 << 7) -#define SDCONF_WIDTH_8 (1 << 7) -#define SDCONF_WIDTH_16 (2 << 7) -#define SDCONF_WIDTH_32 (3 << 7) -#define SDCONF_SIZE_16 (0 << 5) -#define SDCONF_SIZE_64 (1 << 5) -#define SDCONF_SIZE_128 (2 << 5) -#define SDCONF_SIZE_256 (3 << 5) -#define SDCONF_CASLAT_2 (2) -#define SDCONF_CASLAT_3 (3) +#endif #endif /* __ASM_HARDWARE_EP7312_H */ diff -urN linux-2.4.21/include/asm-arm/hardware/ep7312.h.old linux-2.4.21.zipit/include/asm-arm/hardware/ep7312.h.old --- linux-2.4.21/include/asm-arm/hardware/ep7312.h.old 1969-12-31 19:00:00.000000000 -0500 +++ linux-2.4.21.zipit/include/asm-arm/hardware/ep7312.h.old 2004-03-15 14:52:15.000000000 -0500 @@ -0,0 +1,66 @@ +/* + * linux/include/asm-arm/hardware/ep7312.h + * + * This file contains the hardware definitions of the EP7312 internal + * registers. + * + * Copyright (C) 2003 Roland A.I. Rosier . + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#ifndef __ASM_HARDWARE_EP7312_H +#define __ASM_HARDWARE_EP7312_H + +#include + +/* + * Include CLPS7111 and EP7212 register definitions + */ + +#include +#include + +/* + * define EP7312_BASE to be the base address of the region + * you want to access. + */ + +#define EP7312_PHYS_BASE (0x80000000) + +#define SDCONF 0x2300 /* SDRAM Configuration register */ +#define SDRFPR 0x2340 /* SDRAM Refresh period register */ +#define UNIQID 0x2440 /* 32 bit unique ID for the EP73xx device */ +#define DAI64FS 0x2600 /* DAI 64Fs Control Register */ +#define PLLW 0x2610 /* Write Register for PLL Multiplier */ +#define PLLR 0xA5A8 /* Read Register for PLL Multiplier */ +#define RANDID0 0x2700 /* Bits 31-0 of 128-bit random ID */ +#define RANDID1 0x2704 /* Bits 63-32 of 128-bit random ID */ +#define RANDID2 0x2708 /* Bits 95-64 of 128-bit random ID */ +#define RANDID3 0x270C /* Bits 127-96 of 128-bit random ID */ + +#define SDCONF_ACTIVE (1 << 10) +#define SDCONF_CLKCTL (1 << 9) +#define SDCONF_WIDTH_4 (0 << 7) +#define SDCONF_WIDTH_8 (1 << 7) +#define SDCONF_WIDTH_16 (2 << 7) +#define SDCONF_WIDTH_32 (3 << 7) +#define SDCONF_SIZE_16 (0 << 5) +#define SDCONF_SIZE_64 (1 << 5) +#define SDCONF_SIZE_128 (2 << 5) +#define SDCONF_SIZE_256 (3 << 5) +#define SDCONF_CASLAT_2 (2) +#define SDCONF_CASLAT_3 (3) + +#endif /* __ASM_HARDWARE_EP7312_H */ diff -urN linux-2.4.21/include/asm-arm/hardware/zipline.h linux-2.4.21.zipit/include/asm-arm/hardware/zipline.h --- linux-2.4.21/include/asm-arm/hardware/zipline.h 1969-12-31 19:00:00.000000000 -0500 +++ linux-2.4.21.zipit/include/asm-arm/hardware/zipline.h 2004-04-20 12:46:41.000000000 -0400 @@ -0,0 +1,30 @@ +/* + * linux/include/asm-arm/hardware/zipline.h + * + * This file contains the hardware definitions of the ZIPLINE internal + * registers. + * + * Copyright (C) 2000 Deep Blue Solutions Ltd. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#ifndef __ASM_HARDWARE_ZIPLINE_H +#define __ASM_HARDWARE_ZIPLINE_H + +#include + +#include +#endif + diff -urN linux-2.4.21/include/linux/blk.h linux-2.4.21.zipit/include/linux/blk.h --- linux-2.4.21/include/linux/blk.h 2002-08-02 20:39:45.000000000 -0400 +++ linux-2.4.21.zipit/include/linux/blk.h 2004-04-20 12:47:00.000000000 -0400 @@ -155,7 +155,7 @@ #elif (MAJOR_NR == SCSI_TAPE_MAJOR) #define DEVICE_NAME "scsitape" -#define DEVICE_INTR do_st +#define DEVICE_INTR do_st #define DEVICE_NR(device) (MINOR(device) & 0x7f) #elif (MAJOR_NR == OSST_MAJOR) @@ -364,10 +364,15 @@ #endif #define INIT_REQUEST \ + printk(KERN_ERR "In INIT_REQUEST\n"); \ if (QUEUE_EMPTY) {\ + printk(KERN_ERR "QUEUE_EMPTY\n"); \ CLEAR_INTR; \ + printk(KERN_ERR "CLEAR_INTR\n");\ return; \ } \ + printk(KERN_ERR "MAJOR CURRENT = 0x%08X\n",CURRENT); \ + printk(KERN_ERR "Blk_queue_head = 0x%08X\n", blk_dev[MAJOR_NR].request_queue.queue_head); \ if (MAJOR(CURRENT->rq_dev) != MAJOR_NR) \ panic(DEVICE_NAME ": request list destroyed"); \ if (CURRENT->bh) { \ diff -urN linux-2.4.21/include/linux/mtd/mtd.h linux-2.4.21.zipit/include/linux/mtd/mtd.h --- linux-2.4.21/include/linux/mtd/mtd.h 2003-06-13 10:51:38.000000000 -0400 +++ linux-2.4.21.zipit/include/linux/mtd/mtd.h 2004-03-15 14:52:10.000000000 -0500 @@ -289,7 +289,7 @@ #ifdef CONFIG_MTD_DEBUG #define DEBUG(n, args...) \ if (n <= CONFIG_MTD_DEBUG_VERBOSE) { \ - printk(KERN_INFO args); \ + printk(KERN_ERR args); \ } #else /* CONFIG_MTD_DEBUG */ #define DEBUG(n, args...) diff -urN linux-2.4.21/include/linux/wireless.h linux-2.4.21.zipit/include/linux/wireless.h --- linux-2.4.21/include/linux/wireless.h 2003-06-13 10:51:39.000000000 -0400 +++ linux-2.4.21.zipit/include/linux/wireless.h 2004-04-20 12:50:34.000000000 -0400 @@ -1,7 +1,7 @@ /* * This file define a set of standard wireless extensions * - * Version : 15 12.7.02 + * Version : 16 2.4.03 * * Authors : Jean Tourrilhes - HPL - * Copyright (c) 1997-2002 Jean Tourrilhes, All Rights Reserved. @@ -69,6 +69,8 @@ /***************************** INCLUDES *****************************/ +/* To minimise problems in user space, I might remove those headers + * at some point. Jean II */ #include /* for "caddr_t" et al */ #include /* for "struct sockaddr" et al */ #include /* for IFNAMSIZ and co... */ @@ -80,7 +82,7 @@ * (there is some stuff that will be added in the future...) * I just plan to increment with each new version. */ -#define WIRELESS_EXT 15 +#define WIRELESS_EXT 16 /* * Changes : @@ -163,6 +165,16 @@ * - Add IW_TXPOW_RANGE for range of Tx Powers * - Add IWEVREGISTERED & IWEVEXPIRED events for Access Points * - Add IW_MODE_MONITOR for passive monitor + * + * V15 to V16 + * ---------- + * - Increase the number of bitrates in iw_range to 32 (for 802.11g) + * - Increase the number of frequencies in iw_range to 32 (for 802.11b+a) + * - Reshuffle struct iw_range for increases, add filler + * - Increase IW_MAX_AP to 64 for driver returning a lot of addresses + * - Remove IW_MAX_GET_SPY because conflict with enhanced spy support + * - Add SIOCSIWTHRSPY/SIOCGIWTHRSPY and "struct iw_thrspy" + * - Add IW_ENCODE_TEMP and iw_range->encoding_login_index */ /**************************** CONSTANTS ****************************/ @@ -196,9 +208,11 @@ /* SIOCGIWSTATS is strictly used between user space and the kernel, and * is never passed to the driver (i.e. the driver will never see it). */ -/* Mobile IP support (statistics per MAC address) */ +/* Spy support (statistics per MAC address - used for Mobile IP support) */ #define SIOCSIWSPY 0x8B10 /* set spy addresses */ #define SIOCGIWSPY 0x8B11 /* get spy info (quality of link) */ +#define SIOCSIWTHRSPY 0x8B12 /* set spy threshold (spy event) */ +#define SIOCGIWTHRSPY 0x8B13 /* get spy threshold */ /* Access Point manipulation */ #define SIOCSIWAP 0x8B14 /* set access point MAC addresses */ @@ -294,7 +308,7 @@ #define IW_PRIV_TYPE_FLOAT 0x5000 /* struct iw_freq */ #define IW_PRIV_TYPE_ADDR 0x6000 /* struct sockaddr */ -#define IW_PRIV_SIZE_FIXED 0x0800 /* Variable or fixed nuber of args */ +#define IW_PRIV_SIZE_FIXED 0x0800 /* Variable or fixed number of args */ #define IW_PRIV_SIZE_MASK 0x07FF /* Max number of those args */ @@ -306,13 +320,13 @@ /* ----------------------- OTHER CONSTANTS ----------------------- */ /* Maximum frequencies in the range struct */ -#define IW_MAX_FREQUENCIES 16 +#define IW_MAX_FREQUENCIES 32 /* Note : if you have something like 80 frequencies, * don't increase this constant and don't fill the frequency list. * The user will be able to set by channel anyway... */ /* Maximum bit rates in the range struct */ -#define IW_MAX_BITRATES 8 +#define IW_MAX_BITRATES 32 /* Maximum tx powers in the range struct */ #define IW_MAX_TXPOWER 8 @@ -320,8 +334,7 @@ * a few of them in the struct iw_range. */ /* Maximum of address that you may set with SPY */ -#define IW_MAX_SPY 8 /* set */ -#define IW_MAX_GET_SPY 64 /* get */ +#define IW_MAX_SPY 8 /* Maximum of address that you may get in the list of access points in range */ @@ -354,7 +367,8 @@ #define IW_ENCODE_ENABLED 0x0000 /* Encoding enabled */ #define IW_ENCODE_RESTRICTED 0x4000 /* Refuse non-encoded packets */ #define IW_ENCODE_OPEN 0x2000 /* Accept non-encoded packets */ -#define IW_ENCODE_NOKEY 0x0800 /* Key is write only, so not present */ +#define IW_ENCODE_NOKEY 0x0800 /* Key is write only, so not present */ +#define IW_ENCODE_TEMP 0x0400 /* Temporary key */ /* Power management flags available (along with the value, if any) */ #define IW_POWER_ON 0x0000 /* No details... */ @@ -482,6 +496,17 @@ __u32 beacon; /* Missed beacons/superframe */ }; +/* + * Quality range (for spy threshold) + */ +struct iw_thrspy +{ + struct sockaddr addr; /* Source address (hw/mac) */ + struct iw_quality qual; /* Quality of the link */ + struct iw_quality low; /* Low threshold */ + struct iw_quality high; /* High threshold */ +}; + /* ------------------------ WIRELESS STATS ------------------------ */ /* * Wireless statistics (used for /proc/net/wireless) @@ -534,7 +559,7 @@ struct iw_quality qual; /* Quality part of statistics */ struct sockaddr ap_addr; /* Access point address */ - struct sockaddr addr; /* Destination address (hw) */ + struct sockaddr addr; /* Destination address (hw/mac) */ struct iw_param param; /* Other small parameters */ struct iw_point data; /* Other large parameters */ @@ -582,17 +607,31 @@ __u32 min_nwid; /* Minimal NWID we are able to set */ __u32 max_nwid; /* Maximal NWID we are able to set */ - /* Frequency */ - __u16 num_channels; /* Number of channels [0; num - 1] */ - __u8 num_frequency; /* Number of entry in the list */ - struct iw_freq freq[IW_MAX_FREQUENCIES]; /* list */ - /* Note : this frequency list doesn't need to fit channel numbers */ + /* Old Frequency (backward compat - moved lower ) */ + __u16 old_num_channels; + __u8 old_num_frequency; + /* Filler to keep "version" at the same offset */ + __s32 old_freq[6]; /* signal level threshold range */ __s32 sensitivity; /* Quality of link & SNR stuff */ + /* Quality range (link, level, noise) + * If the quality is absolute, it will be in the range [0 ; max_qual], + * if the quality is dBm, it will be in the range [max_qual ; 0]. + * Don't forget that we use 8 bit arithmetics... */ struct iw_quality max_qual; /* Quality of the link */ + /* This should contain the average/typical values of the quality + * indicator. This should be the threshold between a "good" and + * a "bad" link (example : monitor going from green to orange). + * Currently, user space apps like quality monitors don't have any + * way to calibrate the measurement. With this, they can split + * the range between 0 and max_qual in different quality level + * (using a geometric subdivision centered on the average). + * I expect that people doing the user space apps will feedback + * us on which value we need to put in each driver... */ + struct iw_quality avg_qual; /* Quality of the link */ /* Rates */ __u8 num_bitrates; /* Number of entries in the list */ @@ -619,6 +658,8 @@ __u16 encoding_size[IW_MAX_ENCODING_SIZES]; /* Different token sizes */ __u8 num_encoding_sizes; /* Number of entry in the list */ __u8 max_encoding_tokens; /* Max number of tokens */ + /* For drivers that need a "login/passwd" form */ + __u8 encoding_login_index; /* token index for login token */ /* Transmit power */ __u16 txpower_capa; /* What options are supported */ @@ -638,18 +679,12 @@ __s32 min_r_time; /* Minimal retry lifetime */ __s32 max_r_time; /* Maximal retry lifetime */ - /* Average quality of link & SNR */ - struct iw_quality avg_qual; /* Quality of the link */ - /* This should contain the average/typical values of the quality - * indicator. This should be the threshold between a "good" and - * a "bad" link (example : monitor going from green to orange). - * Currently, user space apps like quality monitors don't have any - * way to calibrate the measurement. With this, they can split - * the range between 0 and max_qual in different quality level - * (using a geometric subdivision centered on the average). - * I expect that people doing the user space apps will feedback - * us on which value we need to put in each driver... - */ + /* Frequency */ + __u16 num_channels; /* Number of channels [0; num - 1] */ + __u8 num_frequency; /* Number of entry in the list */ + struct iw_freq freq[IW_MAX_FREQUENCIES]; /* list */ + /* Note : this frequency list doesn't need to fit channel numbers, + * because each entry contain its channel index */ }; /* diff -urN linux-2.4.21/include/net/iw_handler.h linux-2.4.21.zipit/include/net/iw_handler.h --- linux-2.4.21/include/net/iw_handler.h 2003-06-13 10:51:39.000000000 -0400 +++ linux-2.4.21.zipit/include/net/iw_handler.h 2004-04-20 12:50:34.000000000 -0400 @@ -1,7 +1,7 @@ /* * This file define the new driver API for Wireless Extensions * - * Version : 4 21.6.02 + * Version : 5 4.12.02 * * Authors : Jean Tourrilhes - HPL - * Copyright (c) 2001-2002 Jean Tourrilhes, All Rights Reserved. @@ -206,7 +206,7 @@ * will be needed... * I just plan to increment with each new version. */ -#define IW_HANDLER_VERSION 4 +#define IW_HANDLER_VERSION 5 /* * Changes : @@ -220,10 +220,18 @@ * V3 to V4 * -------- * - Reshuffle IW_HEADER_TYPE_XXX to map IW_PRIV_TYPE_XXX changes + * + * V4 to V5 + * -------- + * - Add new spy support : struct iw_spy_data & prototypes */ /**************************** CONSTANTS ****************************/ +/* Enable enhanced spy support. Disable to reduce footprint */ +#define IW_WIRELESS_SPY +#define IW_WIRELESS_THRSPY + /* Special error message for the driver to indicate that we * should do a commit after return from the iw_handler */ #define EIWCOMMIT EINPROGRESS @@ -315,6 +323,9 @@ * We will automatically export that to user space... */ struct iw_priv_args * private_args; + /* Driver enhanced spy support */ + long spy_offset; /* Spy data offset */ + /* In the long term, get_wireless_stats will move from * 'struct net_device' to here, to minimise bloat. */ }; @@ -350,6 +361,33 @@ /* Need to think of short header translation table. Later. */ +/* --------------------- ENHANCED SPY SUPPORT --------------------- */ +/* + * In the old days, the driver was handling spy support all by itself. + * Now, the driver can delegate this task to Wireless Extensions. + * It needs to include this struct in its private part and use the + * standard spy iw_handler. + */ + +/* + * Instance specific spy data, i.e. addresses spied and quality for them. + */ +struct iw_spy_data +{ +#ifdef IW_WIRELESS_SPY + /* --- Standard spy support --- */ + int spy_number; + u_char spy_address[IW_MAX_SPY][ETH_ALEN]; + struct iw_quality spy_stat[IW_MAX_SPY]; +#ifdef IW_WIRELESS_THRSPY + /* --- Enhanced spy support (event) */ + struct iw_quality spy_thr_low; /* Low threshold */ + struct iw_quality spy_thr_high; /* High threshold */ + u_char spy_thr_under[IW_MAX_SPY]; +#endif /* IW_WIRELESS_THRSPY */ +#endif /* IW_WIRELESS_SPY */ +}; + /**************************** PROTOTYPES ****************************/ /* * Functions part of the Wireless Extensions (defined in net/core/wireless.c). @@ -376,6 +414,31 @@ /* We may need a function to send a stream of events to user space. * More on that later... */ +/* Standard handler for SIOCSIWSPY */ +extern int iw_handler_set_spy(struct net_device * dev, + struct iw_request_info * info, + union iwreq_data * wrqu, + char * extra); +/* Standard handler for SIOCGIWSPY */ +extern int iw_handler_get_spy(struct net_device * dev, + struct iw_request_info * info, + union iwreq_data * wrqu, + char * extra); +/* Standard handler for SIOCSIWTHRSPY */ +extern int iw_handler_set_thrspy(struct net_device * dev, + struct iw_request_info *info, + union iwreq_data * wrqu, + char * extra); +/* Standard handler for SIOCGIWTHRSPY */ +extern int iw_handler_get_thrspy(struct net_device * dev, + struct iw_request_info *info, + union iwreq_data * wrqu, + char * extra); +/* Driver call to update spy records */ +extern void wireless_spy_update(struct net_device * dev, + unsigned char * address, + struct iw_quality * wstats); + /************************* INLINE FUNTIONS *************************/ /* * Function that are so simple that it's more efficient inlining them diff -urN linux-2.4.21/Makefile linux-2.4.21.zipit/Makefile --- linux-2.4.21/Makefile 2005-02-07 11:17:10.000000000 -0500 +++ linux-2.4.21.zipit/Makefile 2004-03-15 14:52:03.000000000 -0500 @@ -5,7 +5,7 @@ KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) -ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/) +ARCH := arm KERNELPATH=kernel-$(shell echo $(KERNELRELEASE) | sed -e "s/-//g") CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \ @@ -19,7 +19,7 @@ HOSTCC = gcc HOSTCFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -CROSS_COMPILE = +CROSS_COMPILE = /tools.3.2/bin/arm-linux- # # Include the make variables (CC, etc...) @@ -182,7 +182,6 @@ DRIVERS-$(CONFIG_HAMRADIO) += drivers/net/hamradio/hamradio.o DRIVERS-$(CONFIG_TC) += drivers/tc/tc.a DRIVERS-$(CONFIG_USB) += drivers/usb/usbdrv.o -DRIVERS-y +=drivers/media/media.o DRIVERS-$(CONFIG_INPUT) += drivers/input/inputdrv.o DRIVERS-$(CONFIG_HIL) += drivers/hil/hil.o DRIVERS-$(CONFIG_I2O) += drivers/message/i2o/i2o.o diff -urN linux-2.4.21/net/core/wireless.c linux-2.4.21.zipit/net/core/wireless.c --- linux-2.4.21/net/core/wireless.c 2003-06-13 10:51:39.000000000 -0400 +++ linux-2.4.21.zipit/net/core/wireless.c 2004-03-15 14:52:22.000000000 -0500 @@ -2,7 +2,7 @@ * This file implement the Wireless Extensions APIs. * * Authors : Jean Tourrilhes - HPL - - * Copyright (c) 1997-2002 Jean Tourrilhes, All Rights Reserved. + * Copyright (c) 1997-2003 Jean Tourrilhes, All Rights Reserved. * * (As all part of the Linux kernel, this file is GPL) */ @@ -43,6 +43,11 @@ * o Turn on WE_STRICT_WRITE by default + kernel warning * o Fix WE_STRICT_WRITE in ioctl_export_private() (32 => iw_num) * o Fix off-by-one in test (extra_size <= IFNAMSIZ) + * + * v6 - 9.01.03 - Jean II + * o Add common spy support : iw_handler_set_spy(), wireless_spy_update() + * o Add enhanced spy support : iw_handler_set_thrspy() and event. + * o Add WIRELESS_EXT version display in /proc/net/wireless */ /***************************** INCLUDES *****************************/ @@ -52,6 +57,7 @@ #include /* off_t */ #include /* struct ifreq, dev_get_by_name() */ #include /* rtnetlink stuff */ +#include /* ARPHRD_ETHER */ #include /* Pretty obvious */ #include /* New driver API */ @@ -65,6 +71,7 @@ /* Debuging stuff */ #undef WE_IOCTL_DEBUG /* Debug IOCTL API */ #undef WE_EVENT_DEBUG /* Debug Event dispatcher */ +#undef WE_SPY_DEBUG /* Debug enhanced spy support */ /* Options */ #define WE_EVENT_NETLINK /* Propagate events using rtnetlink */ @@ -72,7 +79,7 @@ /************************* GLOBAL VARIABLES *************************/ /* - * You should not use global variables, because or re-entrancy. + * You should not use global variables, because of re-entrancy. * On our case, it's only const, so it's OK... */ /* @@ -115,11 +122,11 @@ /* SIOCSIWSPY */ { IW_HEADER_TYPE_POINT, 0, sizeof(struct sockaddr), 0, IW_MAX_SPY, 0}, /* SIOCGIWSPY */ - { IW_HEADER_TYPE_POINT, 0, (sizeof(struct sockaddr) + sizeof(struct iw_quality)), 0, IW_MAX_GET_SPY, 0}, - /* -- hole -- */ - { IW_HEADER_TYPE_NULL, 0, 0, 0, 0, 0}, - /* -- hole -- */ - { IW_HEADER_TYPE_NULL, 0, 0, 0, 0, 0}, + { IW_HEADER_TYPE_POINT, 0, (sizeof(struct sockaddr) + sizeof(struct iw_quality)), 0, IW_MAX_SPY, 0}, + /* SIOCSIWTHRSPY */ + { IW_HEADER_TYPE_POINT, 0, sizeof(struct iw_thrspy), 1, 1, 0}, + /* SIOCGIWTHRSPY */ + { IW_HEADER_TYPE_POINT, 0, sizeof(struct iw_thrspy), 1, 1, 0}, /* SIOCSIWAP */ { IW_HEADER_TYPE_ADDR, 0, 0, 0, 0, 0}, /* SIOCGIWAP */ @@ -377,9 +384,9 @@ struct net_device * dev; size = sprintf(buffer, - "Inter-| sta-| Quality | Discarded packets | Missed\n" - " face | tus | link level noise | nwid crypt frag retry misc | beacon\n" - ); + "Inter-| sta-| Quality | Discarded packets | Missed | WE\n" + " face | tus | link level noise | nwid crypt frag retry misc | beacon | %d\n", + WIRELESS_EXT); pos += size; len += size; @@ -1024,3 +1031,252 @@ return; /* Always success, I guess ;-) */ } + +/********************** ENHANCED IWSPY SUPPORT **********************/ +/* + * In the old days, the driver was handling spy support all by itself. + * Now, the driver can delegate this task to Wireless Extensions. + * It needs to use those standard spy iw_handler in struct iw_handler_def, + * push data to us via XXX and include struct iw_spy_data in its + * private part. + * One of the main advantage of centralising spy support here is that + * it becomes much easier to improve and extend it without having to touch + * the drivers. One example is the addition of the Spy-Threshold events. + * Note : IW_WIRELESS_SPY is defined in iw_handler.h + */ + +/*------------------------------------------------------------------*/ +/* + * Standard Wireless Handler : set Spy List + */ +int iw_handler_set_spy(struct net_device * dev, + struct iw_request_info * info, + union iwreq_data * wrqu, + char * extra) +{ +#ifdef IW_WIRELESS_SPY + struct iw_spy_data * spydata = (dev->priv + + dev->wireless_handlers->spy_offset); + struct sockaddr * address = (struct sockaddr *) extra; + + /* Disable spy collection while we copy the addresses. + * As we don't disable interrupts, we need to do this to avoid races. + * As we are the only writer, this is good enough. */ + spydata->spy_number = 0; + + /* Are there are addresses to copy? */ + if(wrqu->data.length > 0) { + int i; + + /* Copy addresses */ + for(i = 0; i < wrqu->data.length; i++) + memcpy(spydata->spy_address[i], address[i].sa_data, + ETH_ALEN); + /* Reset stats */ + memset(spydata->spy_stat, 0, + sizeof(struct iw_quality) * IW_MAX_SPY); + +#ifdef WE_SPY_DEBUG + printk(KERN_DEBUG "iw_handler_set_spy() : offset %ld, spydata %p, num %d\n", dev->wireless_handlers->spy_offset, spydata, wrqu->data.length); + for (i = 0; i < wrqu->data.length; i++) + printk(KERN_DEBUG + "%02X:%02X:%02X:%02X:%02X:%02X \n", + spydata->spy_address[i][0], + spydata->spy_address[i][1], + spydata->spy_address[i][2], + spydata->spy_address[i][3], + spydata->spy_address[i][4], + spydata->spy_address[i][5]); +#endif /* WE_SPY_DEBUG */ + } + /* Enable addresses */ + spydata->spy_number = wrqu->data.length; + + return 0; +#else /* IW_WIRELESS_SPY */ + return -EOPNOTSUPP; +#endif /* IW_WIRELESS_SPY */ +} + +/*------------------------------------------------------------------*/ +/* + * Standard Wireless Handler : get Spy List + */ +int iw_handler_get_spy(struct net_device * dev, + struct iw_request_info * info, + union iwreq_data * wrqu, + char * extra) +{ +#ifdef IW_WIRELESS_SPY + struct iw_spy_data * spydata = (dev->priv + + dev->wireless_handlers->spy_offset); + struct sockaddr * address = (struct sockaddr *) extra; + int i; + + wrqu->data.length = spydata->spy_number; + + /* Copy addresses. */ + for(i = 0; i < spydata->spy_number; i++) { + memcpy(address[i].sa_data, spydata->spy_address[i], ETH_ALEN); + address[i].sa_family = AF_UNIX; + } + /* Copy stats to the user buffer (just after). */ + if(spydata->spy_number > 0) + memcpy(extra + (sizeof(struct sockaddr) *spydata->spy_number), + spydata->spy_stat, + sizeof(struct iw_quality) * spydata->spy_number); + /* Reset updated flags. */ + for(i = 0; i < spydata->spy_number; i++) + spydata->spy_stat[i].updated = 0; + return 0; +#else /* IW_WIRELESS_SPY */ + return -EOPNOTSUPP; +#endif /* IW_WIRELESS_SPY */ +} + +/*------------------------------------------------------------------*/ +/* + * Standard Wireless Handler : set spy threshold + */ +int iw_handler_set_thrspy(struct net_device * dev, + struct iw_request_info *info, + union iwreq_data * wrqu, + char * extra) +{ +#ifdef IW_WIRELESS_THRSPY + struct iw_spy_data * spydata = (dev->priv + + dev->wireless_handlers->spy_offset); + struct iw_thrspy * threshold = (struct iw_thrspy *) extra; + + /* Just do it */ + memcpy(&(spydata->spy_thr_low), &(threshold->low), + 2 * sizeof(struct iw_quality)); + + /* Clear flag */ + memset(spydata->spy_thr_under, '\0', sizeof(spydata->spy_thr_under)); + +#ifdef WE_SPY_DEBUG + printk(KERN_DEBUG "iw_handler_set_thrspy() : low %d ; high %d\n", spydata->spy_thr_low.level, spydata->spy_thr_high.level); +#endif /* WE_SPY_DEBUG */ + + return 0; +#else /* IW_WIRELESS_THRSPY */ + return -EOPNOTSUPP; +#endif /* IW_WIRELESS_THRSPY */ +} + +/*------------------------------------------------------------------*/ +/* + * Standard Wireless Handler : get spy threshold + */ +int iw_handler_get_thrspy(struct net_device * dev, + struct iw_request_info *info, + union iwreq_data * wrqu, + char * extra) +{ +#ifdef IW_WIRELESS_THRSPY + struct iw_spy_data * spydata = (dev->priv + + dev->wireless_handlers->spy_offset); + struct iw_thrspy * threshold = (struct iw_thrspy *) extra; + + /* Just do it */ + memcpy(&(threshold->low), &(spydata->spy_thr_low), + 2 * sizeof(struct iw_quality)); + + return 0; +#else /* IW_WIRELESS_THRSPY */ + return -EOPNOTSUPP; +#endif /* IW_WIRELESS_THRSPY */ +} + +#ifdef IW_WIRELESS_THRSPY +/*------------------------------------------------------------------*/ +/* + * Prepare and send a Spy Threshold event + */ +static void iw_send_thrspy_event(struct net_device * dev, + struct iw_spy_data * spydata, + unsigned char * address, + struct iw_quality * wstats) +{ + union iwreq_data wrqu; + struct iw_thrspy threshold; + + /* Init */ + wrqu.data.length = 1; + wrqu.data.flags = 0; + /* Copy address */ + memcpy(threshold.addr.sa_data, address, ETH_ALEN); + threshold.addr.sa_family = ARPHRD_ETHER; + /* Copy stats */ + memcpy(&(threshold.qual), wstats, sizeof(struct iw_quality)); + /* Copy also thresholds */ + memcpy(&(threshold.low), &(spydata->spy_thr_low), + 2 * sizeof(struct iw_quality)); + +#ifdef WE_SPY_DEBUG + printk(KERN_DEBUG "iw_send_thrspy_event() : address %02X:%02X:%02X:%02X:%02X:%02X, level %d, up = %d\n", + threshold.addr.sa_data[0], + threshold.addr.sa_data[1], + threshold.addr.sa_data[2], + threshold.addr.sa_data[3], + threshold.addr.sa_data[4], + threshold.addr.sa_data[5], threshold.qual.level); +#endif /* WE_SPY_DEBUG */ + + /* Send event to user space */ + wireless_send_event(dev, SIOCGIWTHRSPY, &wrqu, (char *) &threshold); +} +#endif /* IW_WIRELESS_THRSPY */ + +/* ---------------------------------------------------------------- */ +/* + * Call for the driver to update the spy data. + * For now, the spy data is a simple array. As the size of the array is + * small, this is good enough. If we wanted to support larger number of + * spy addresses, we should use something more efficient... + */ +void wireless_spy_update(struct net_device * dev, + unsigned char * address, + struct iw_quality * wstats) +{ +#ifdef IW_WIRELESS_SPY + struct iw_spy_data * spydata = (dev->priv + + dev->wireless_handlers->spy_offset); + int i; + int match = -1; + +#ifdef WE_SPY_DEBUG + printk(KERN_DEBUG "wireless_spy_update() : offset %ld, spydata %p, address %02X:%02X:%02X:%02X:%02X:%02X\n", dev->wireless_handlers->spy_offset, spydata, address[0], address[1], address[2], address[3], address[4], address[5]); +#endif /* WE_SPY_DEBUG */ + + /* Update all records that match */ + for(i = 0; i < spydata->spy_number; i++) + if(!memcmp(address, spydata->spy_address[i], ETH_ALEN)) { + memcpy(&(spydata->spy_stat[i]), wstats, + sizeof(struct iw_quality)); + match = i; + } +#ifdef IW_WIRELESS_THRSPY + /* Generate an event if we cross the spy threshold. + * To avoid event storms, we have a simple hysteresis : we generate + * event only when we go under the low threshold or above the + * high threshold. */ + if(match >= 0) { + if(spydata->spy_thr_under[match]) { + if(wstats->level > spydata->spy_thr_high.level) { + spydata->spy_thr_under[match] = 0; + iw_send_thrspy_event(dev, spydata, + address, wstats); + } + } else { + if(wstats->level < spydata->spy_thr_low.level) { + spydata->spy_thr_under[match] = 1; + iw_send_thrspy_event(dev, spydata, + address, wstats); + } + } + } +#endif /* IW_WIRELESS_THRSPY */ +#endif /* IW_WIRELESS_SPY */ +} diff -urN linux-2.4.21/net/netsyms.c linux-2.4.21.zipit/net/netsyms.c --- linux-2.4.21/net/netsyms.c 2003-06-13 10:51:39.000000000 -0400 +++ linux-2.4.21.zipit/net/netsyms.c 2004-03-15 14:52:22.000000000 -0500 @@ -601,6 +601,11 @@ #if defined(CONFIG_NET_RADIO) || defined(CONFIG_NET_PCMCIA_RADIO) #include EXPORT_SYMBOL(wireless_send_event); +EXPORT_SYMBOL(iw_handler_set_spy); +EXPORT_SYMBOL(iw_handler_get_spy); +EXPORT_SYMBOL(iw_handler_set_thrspy); +EXPORT_SYMBOL(iw_handler_get_thrspy); +EXPORT_SYMBOL(wireless_spy_update); #endif /* CONFIG_NET_RADIO || CONFIG_NET_PCMCIA_RADIO */ #endif /* CONFIG_NET */ diff -urN linux-2.4.21/net/netsyms.c.orig linux-2.4.21.zipit/net/netsyms.c.orig --- linux-2.4.21/net/netsyms.c.orig 1969-12-31 19:00:00.000000000 -0500 +++ linux-2.4.21.zipit/net/netsyms.c.orig 2004-03-15 14:52:27.000000000 -0500 @@ -0,0 +1,606 @@ +/* + * linux/net/netsyms.c + * + * Symbol table for the linux networking subsystem. Moved here to + * make life simpler in ksyms.c. + */ + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef CONFIG_HIPPI +#include +#endif +#include +#include +#include +#include +#include +#ifdef CONFIG_NET_DIVERT +#include +#endif /* CONFIG_NET_DIVERT */ + +#ifdef CONFIG_NET +extern __u32 sysctl_wmem_max; +extern __u32 sysctl_rmem_max; +#endif + +#ifdef CONFIG_INET +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +extern struct net_proto_family inet_family_ops; + +#if defined(CONFIG_IPV6) || defined (CONFIG_IPV6_MODULE) || defined (CONFIG_KHTTPD) || defined (CONFIG_KHTTPD_MODULE) +#include +#include +#include +#include +#include +#include + +extern int sysctl_local_port_range[2]; +extern int tcp_port_rover; +extern int udp_port_rover; +#endif + +#endif + +extern int netdev_finish_unregister(struct net_device *dev); + +#include + +#ifdef CONFIG_IPX_MODULE +extern struct datalink_proto *make_EII_client(void); +extern struct datalink_proto *make_8023_client(void); +extern void destroy_EII_client(struct datalink_proto *); +extern void destroy_8023_client(struct datalink_proto *); +#endif + +#ifdef CONFIG_ATALK_MODULE +#include +#endif + +#ifdef CONFIG_SYSCTL +extern int sysctl_max_syn_backlog; +#endif + +/* Skbuff symbols. */ +EXPORT_SYMBOL(skb_over_panic); +EXPORT_SYMBOL(skb_under_panic); +EXPORT_SYMBOL(skb_pad); + +/* Socket layer registration */ +EXPORT_SYMBOL(sock_register); +EXPORT_SYMBOL(sock_unregister); + +/* Socket locking */ +EXPORT_SYMBOL(__lock_sock); +EXPORT_SYMBOL(__release_sock); + +/* Socket layer support routines */ +EXPORT_SYMBOL(memcpy_fromiovec); +EXPORT_SYMBOL(memcpy_tokerneliovec); +EXPORT_SYMBOL(sock_create); +EXPORT_SYMBOL(sock_alloc); +EXPORT_SYMBOL(sock_release); +EXPORT_SYMBOL(sock_setsockopt); +EXPORT_SYMBOL(sock_getsockopt); +EXPORT_SYMBOL(sock_sendmsg); +EXPORT_SYMBOL(sock_recvmsg); +EXPORT_SYMBOL(sk_alloc); +EXPORT_SYMBOL(sk_free); +EXPORT_SYMBOL(sock_wake_async); +EXPORT_SYMBOL(sock_alloc_send_skb); +EXPORT_SYMBOL(sock_alloc_send_pskb); +EXPORT_SYMBOL(sock_init_data); +EXPORT_SYMBOL(sock_no_release); +EXPORT_SYMBOL(sock_no_bind); +EXPORT_SYMBOL(sock_no_connect); +EXPORT_SYMBOL(sock_no_socketpair); +EXPORT_SYMBOL(sock_no_accept); +EXPORT_SYMBOL(sock_no_getname); +EXPORT_SYMBOL(sock_no_poll); +EXPORT_SYMBOL(sock_no_ioctl); +EXPORT_SYMBOL(sock_no_listen); +EXPORT_SYMBOL(sock_no_shutdown); +EXPORT_SYMBOL(sock_no_getsockopt); +EXPORT_SYMBOL(sock_no_setsockopt); +EXPORT_SYMBOL(sock_no_sendmsg); +EXPORT_SYMBOL(sock_no_recvmsg); +EXPORT_SYMBOL(sock_no_mmap); +EXPORT_SYMBOL(sock_no_sendpage); +EXPORT_SYMBOL(sock_rfree); +EXPORT_SYMBOL(sock_wfree); +EXPORT_SYMBOL(sock_wmalloc); +EXPORT_SYMBOL(sock_rmalloc); +EXPORT_SYMBOL(skb_linearize); +EXPORT_SYMBOL(skb_checksum); +EXPORT_SYMBOL(skb_checksum_help); +EXPORT_SYMBOL(skb_recv_datagram); +EXPORT_SYMBOL(skb_free_datagram); +EXPORT_SYMBOL(skb_copy_datagram); +EXPORT_SYMBOL(skb_copy_datagram_iovec); +EXPORT_SYMBOL(skb_copy_and_csum_datagram_iovec); +EXPORT_SYMBOL(skb_copy_bits); +EXPORT_SYMBOL(skb_copy_and_csum_bits); +EXPORT_SYMBOL(skb_copy_and_csum_dev); +EXPORT_SYMBOL(skb_copy_expand); +EXPORT_SYMBOL(___pskb_trim); +EXPORT_SYMBOL(__pskb_pull_tail); +EXPORT_SYMBOL(pskb_expand_head); +EXPORT_SYMBOL(pskb_copy); +EXPORT_SYMBOL(skb_realloc_headroom); +EXPORT_SYMBOL(datagram_poll); +EXPORT_SYMBOL(put_cmsg); +EXPORT_SYMBOL(sock_kmalloc); +EXPORT_SYMBOL(sock_kfree_s); + +#ifdef CONFIG_FILTER +EXPORT_SYMBOL(sk_run_filter); +EXPORT_SYMBOL(sk_chk_filter); +#endif + +EXPORT_SYMBOL(neigh_table_init); +EXPORT_SYMBOL(neigh_table_clear); +EXPORT_SYMBOL(neigh_resolve_output); +EXPORT_SYMBOL(neigh_connected_output); +EXPORT_SYMBOL(neigh_update); +EXPORT_SYMBOL(neigh_create); +EXPORT_SYMBOL(neigh_lookup); +EXPORT_SYMBOL(__neigh_event_send); +EXPORT_SYMBOL(neigh_event_ns); +EXPORT_SYMBOL(neigh_ifdown); +#ifdef CONFIG_ARPD +EXPORT_SYMBOL(neigh_app_ns); +#endif +#ifdef CONFIG_SYSCTL +EXPORT_SYMBOL(neigh_sysctl_register); +#endif +EXPORT_SYMBOL(pneigh_lookup); +EXPORT_SYMBOL(pneigh_enqueue); +EXPORT_SYMBOL(neigh_destroy); +EXPORT_SYMBOL(neigh_parms_alloc); +EXPORT_SYMBOL(neigh_parms_release); +EXPORT_SYMBOL(neigh_rand_reach_time); +EXPORT_SYMBOL(neigh_compat_output); + +/* dst_entry */ +EXPORT_SYMBOL(dst_alloc); +EXPORT_SYMBOL(__dst_free); +EXPORT_SYMBOL(dst_destroy); + +/* misc. support routines */ +EXPORT_SYMBOL(net_ratelimit); +EXPORT_SYMBOL(net_random); +EXPORT_SYMBOL(net_srandom); + +/* Needed by smbfs.o */ +EXPORT_SYMBOL(__scm_destroy); +EXPORT_SYMBOL(__scm_send); + +/* Needed by unix.o */ +EXPORT_SYMBOL(scm_fp_dup); +EXPORT_SYMBOL(files_stat); +EXPORT_SYMBOL(memcpy_toiovec); + +#ifdef CONFIG_IPX_MODULE +EXPORT_SYMBOL(make_8023_client); +EXPORT_SYMBOL(destroy_8023_client); +EXPORT_SYMBOL(make_EII_client); +EXPORT_SYMBOL(destroy_EII_client); +#endif + +/* for 801q VLAN support */ +#if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE) +EXPORT_SYMBOL(dev_change_flags); +EXPORT_SYMBOL(vlan_ioctl_hook); +#endif + +EXPORT_SYMBOL(sklist_destroy_socket); +EXPORT_SYMBOL(sklist_insert_socket); + +EXPORT_SYMBOL(scm_detach_fds); + +#if defined(CONFIG_BRIDGE) || defined(CONFIG_BRIDGE_MODULE) +EXPORT_SYMBOL(br_handle_frame_hook); +#ifdef CONFIG_INET +EXPORT_SYMBOL(br_ioctl_hook); +#endif +#endif + +#ifdef CONFIG_NET_DIVERT +EXPORT_SYMBOL(alloc_divert_blk); +EXPORT_SYMBOL(free_divert_blk); +EXPORT_SYMBOL(divert_ioctl); +#endif /* CONFIG_NET_DIVERT */ + +#ifdef CONFIG_INET +/* Internet layer registration */ +EXPORT_SYMBOL(inetdev_lock); +EXPORT_SYMBOL(inet_add_protocol); +EXPORT_SYMBOL(inet_del_protocol); +EXPORT_SYMBOL(inet_register_protosw); +EXPORT_SYMBOL(inet_unregister_protosw); +EXPORT_SYMBOL(ip_route_output_key); +EXPORT_SYMBOL(ip_route_input); +EXPORT_SYMBOL(icmp_send); +EXPORT_SYMBOL(ip_options_compile); +EXPORT_SYMBOL(ip_options_undo); +EXPORT_SYMBOL(arp_send); +EXPORT_SYMBOL(arp_broken_ops); +EXPORT_SYMBOL(__ip_select_ident); +EXPORT_SYMBOL(ip_send_check); +EXPORT_SYMBOL(ip_fragment); +EXPORT_SYMBOL(inet_family_ops); +EXPORT_SYMBOL(in_aton); +EXPORT_SYMBOL(ip_mc_inc_group); +EXPORT_SYMBOL(ip_mc_dec_group); +EXPORT_SYMBOL(ip_finish_output); +EXPORT_SYMBOL(inet_stream_ops); +EXPORT_SYMBOL(inet_dgram_ops); +EXPORT_SYMBOL(ip_cmsg_recv); +EXPORT_SYMBOL(inet_addr_type); +EXPORT_SYMBOL(inet_select_addr); +EXPORT_SYMBOL(ip_dev_find); +EXPORT_SYMBOL(inetdev_by_index); +EXPORT_SYMBOL(in_dev_finish_destroy); +EXPORT_SYMBOL(ip_defrag); + +/* Route manipulation */ +EXPORT_SYMBOL(ip_rt_ioctl); +EXPORT_SYMBOL(devinet_ioctl); +EXPORT_SYMBOL(register_inetaddr_notifier); +EXPORT_SYMBOL(unregister_inetaddr_notifier); + +/* needed for ip_gre -cw */ +EXPORT_SYMBOL(ip_statistics); + +#ifdef CONFIG_DLCI_MODULE +extern int (*dlci_ioctl_hook)(unsigned int, void *); +EXPORT_SYMBOL(dlci_ioctl_hook); +#endif + + +#ifdef CONFIG_IPV6 +EXPORT_SYMBOL(ipv6_addr_type); +EXPORT_SYMBOL(icmpv6_send); +EXPORT_SYMBOL(ndisc_mc_map); +EXPORT_SYMBOL(register_inet6addr_notifier); +EXPORT_SYMBOL(unregister_inet6addr_notifier); +#include +EXPORT_SYMBOL(ip6_route_output); +#ifdef CONFIG_NETFILTER +EXPORT_SYMBOL(ip6_route_me_harder); +#endif +#endif +#if defined (CONFIG_IPV6_MODULE) || defined (CONFIG_KHTTPD) || defined (CONFIG_KHTTPD_MODULE) +/* inet functions common to v4 and v6 */ +EXPORT_SYMBOL(inet_release); +EXPORT_SYMBOL(inet_stream_connect); +EXPORT_SYMBOL(inet_dgram_connect); +EXPORT_SYMBOL(inet_accept); +EXPORT_SYMBOL(inet_listen); +EXPORT_SYMBOL(inet_shutdown); +EXPORT_SYMBOL(inet_setsockopt); +EXPORT_SYMBOL(inet_getsockopt); +EXPORT_SYMBOL(inet_sendmsg); +EXPORT_SYMBOL(inet_recvmsg); +#ifdef INET_REFCNT_DEBUG +EXPORT_SYMBOL(inet_sock_nr); +#endif +EXPORT_SYMBOL(inet_sock_destruct); +EXPORT_SYMBOL(inet_sock_release); + +/* Socket demultiplexing. */ +EXPORT_SYMBOL(tcp_hashinfo); +EXPORT_SYMBOL(tcp_listen_wlock); +EXPORT_SYMBOL(udp_hash); +EXPORT_SYMBOL(udp_hash_lock); + +EXPORT_SYMBOL(tcp_destroy_sock); +EXPORT_SYMBOL(ip_queue_xmit); +EXPORT_SYMBOL(memcpy_fromiovecend); +EXPORT_SYMBOL(csum_partial_copy_fromiovecend); +EXPORT_SYMBOL(tcp_v4_lookup_listener); +/* UDP/TCP exported functions for TCPv6 */ +EXPORT_SYMBOL(udp_ioctl); +EXPORT_SYMBOL(udp_connect); +EXPORT_SYMBOL(udp_disconnect); +EXPORT_SYMBOL(udp_sendmsg); +EXPORT_SYMBOL(tcp_close); +EXPORT_SYMBOL(tcp_disconnect); +EXPORT_SYMBOL(tcp_accept); +EXPORT_SYMBOL(tcp_write_wakeup); +EXPORT_SYMBOL(tcp_write_space); +EXPORT_SYMBOL(tcp_poll); +EXPORT_SYMBOL(tcp_ioctl); +EXPORT_SYMBOL(tcp_shutdown); +EXPORT_SYMBOL(tcp_setsockopt); +EXPORT_SYMBOL(tcp_getsockopt); +EXPORT_SYMBOL(tcp_recvmsg); +EXPORT_SYMBOL(tcp_send_synack); +EXPORT_SYMBOL(tcp_check_req); +EXPORT_SYMBOL(tcp_child_process); +EXPORT_SYMBOL(tcp_parse_options); +EXPORT_SYMBOL(tcp_rcv_established); +EXPORT_SYMBOL(tcp_init_xmit_timers); +EXPORT_SYMBOL(tcp_clear_xmit_timers); +EXPORT_SYMBOL(tcp_statistics); +EXPORT_SYMBOL(tcp_rcv_state_process); +EXPORT_SYMBOL(tcp_timewait_state_process); +EXPORT_SYMBOL(tcp_timewait_cachep); +EXPORT_SYMBOL(tcp_timewait_kill); +EXPORT_SYMBOL(tcp_sendmsg); +EXPORT_SYMBOL(tcp_v4_rebuild_header); +EXPORT_SYMBOL(tcp_v4_send_check); +EXPORT_SYMBOL(tcp_v4_conn_request); +EXPORT_SYMBOL(tcp_create_openreq_child); +EXPORT_SYMBOL(tcp_bucket_create); +EXPORT_SYMBOL(__tcp_put_port); +EXPORT_SYMBOL(tcp_put_port); +EXPORT_SYMBOL(tcp_inherit_port); +EXPORT_SYMBOL(tcp_v4_syn_recv_sock); +EXPORT_SYMBOL(tcp_v4_do_rcv); +EXPORT_SYMBOL(tcp_v4_connect); +EXPORT_SYMBOL(tcp_unhash); +EXPORT_SYMBOL(udp_prot); +EXPORT_SYMBOL(tcp_prot); +EXPORT_SYMBOL(tcp_openreq_cachep); +EXPORT_SYMBOL(ipv4_specific); +EXPORT_SYMBOL(tcp_simple_retransmit); +EXPORT_SYMBOL(tcp_transmit_skb); +EXPORT_SYMBOL(tcp_connect); +EXPORT_SYMBOL(tcp_make_synack); +EXPORT_SYMBOL(tcp_tw_deschedule); +EXPORT_SYMBOL(tcp_delete_keepalive_timer); +EXPORT_SYMBOL(tcp_reset_keepalive_timer); +EXPORT_SYMBOL(sysctl_local_port_range); +EXPORT_SYMBOL(tcp_port_rover); +EXPORT_SYMBOL(udp_port_rover); +EXPORT_SYMBOL(tcp_sync_mss); +EXPORT_SYMBOL(net_statistics); +EXPORT_SYMBOL(__tcp_mem_reclaim); +EXPORT_SYMBOL(tcp_sockets_allocated); +EXPORT_SYMBOL(sysctl_tcp_reordering); +EXPORT_SYMBOL(sysctl_tcp_rmem); +EXPORT_SYMBOL(sysctl_tcp_wmem); +EXPORT_SYMBOL(sysctl_tcp_ecn); +EXPORT_SYMBOL(tcp_cwnd_application_limited); +EXPORT_SYMBOL(tcp_sendpage); +EXPORT_SYMBOL(sysctl_tcp_low_latency); + +EXPORT_SYMBOL(tcp_write_xmit); + +EXPORT_SYMBOL(tcp_v4_remember_stamp); + +extern int sysctl_tcp_tw_recycle; + +#ifdef CONFIG_SYSCTL +EXPORT_SYMBOL(sysctl_tcp_tw_recycle); +EXPORT_SYMBOL(sysctl_max_syn_backlog); +#endif + +#if defined (CONFIG_IPV6_MODULE) +EXPORT_SYMBOL(secure_tcpv6_sequence_number); +EXPORT_SYMBOL(secure_ipv6_id); +#endif + +#endif + +EXPORT_SYMBOL(tcp_read_sock); + +EXPORT_SYMBOL(netlink_set_err); +EXPORT_SYMBOL(netlink_broadcast); +EXPORT_SYMBOL(netlink_unicast); +EXPORT_SYMBOL(netlink_kernel_create); +EXPORT_SYMBOL(netlink_dump_start); +EXPORT_SYMBOL(netlink_ack); +EXPORT_SYMBOL(netlink_set_nonroot); +EXPORT_SYMBOL(netlink_register_notifier); +EXPORT_SYMBOL(netlink_unregister_notifier); +#if defined(CONFIG_NETLINK_DEV) || defined(CONFIG_NETLINK_DEV_MODULE) +EXPORT_SYMBOL(netlink_attach); +EXPORT_SYMBOL(netlink_detach); +EXPORT_SYMBOL(netlink_post); +#endif + +EXPORT_SYMBOL(rtattr_parse); +EXPORT_SYMBOL(rtnetlink_links); +EXPORT_SYMBOL(__rta_fill); +EXPORT_SYMBOL(rtnetlink_dump_ifinfo); +EXPORT_SYMBOL(rtnetlink_put_metrics); +EXPORT_SYMBOL(rtnl); +EXPORT_SYMBOL(neigh_delete); +EXPORT_SYMBOL(neigh_add); +EXPORT_SYMBOL(neigh_dump_info); + +EXPORT_SYMBOL(dev_set_allmulti); +EXPORT_SYMBOL(dev_set_promiscuity); +EXPORT_SYMBOL(sklist_remove_socket); +EXPORT_SYMBOL(rtnl_sem); +EXPORT_SYMBOL(rtnl_lock); +EXPORT_SYMBOL(rtnl_unlock); + +/* ABI emulation layers need this */ +EXPORT_SYMBOL(move_addr_to_kernel); +EXPORT_SYMBOL(move_addr_to_user); + +/* Used by at least ipip.c. */ +EXPORT_SYMBOL(ipv4_config); +EXPORT_SYMBOL(dev_open); + +/* Used by other modules */ +EXPORT_SYMBOL(xrlim_allow); + +EXPORT_SYMBOL(ip_rcv); +EXPORT_SYMBOL(arp_rcv); +EXPORT_SYMBOL(arp_tbl); +EXPORT_SYMBOL(arp_find); + +#endif /* CONFIG_INET */ + +#ifdef CONFIG_TR +EXPORT_SYMBOL(tr_type_trans); +#endif + +/* Device callback registration */ +EXPORT_SYMBOL(register_netdevice_notifier); +EXPORT_SYMBOL(unregister_netdevice_notifier); + +/* support for loadable net drivers */ +#ifdef CONFIG_NET +EXPORT_SYMBOL(loopback_dev); +EXPORT_SYMBOL(register_netdevice); +EXPORT_SYMBOL(unregister_netdevice); +EXPORT_SYMBOL(netdev_state_change); +EXPORT_SYMBOL(dev_new_index); +EXPORT_SYMBOL(dev_get_by_flags); +EXPORT_SYMBOL(__dev_get_by_flags); +EXPORT_SYMBOL(dev_get_by_index); +EXPORT_SYMBOL(__dev_get_by_index); +EXPORT_SYMBOL(dev_get_by_name); +EXPORT_SYMBOL(__dev_get_by_name); +EXPORT_SYMBOL(netdev_finish_unregister); +EXPORT_SYMBOL(netdev_set_master); +EXPORT_SYMBOL(eth_type_trans); +#ifdef CONFIG_FDDI +EXPORT_SYMBOL(fddi_type_trans); +#endif /* CONFIG_FDDI */ +#if 0 +EXPORT_SYMBOL(eth_copy_and_sum); +#endif +EXPORT_SYMBOL(alloc_skb); +EXPORT_SYMBOL(__kfree_skb); +EXPORT_SYMBOL(skb_clone); +EXPORT_SYMBOL(skb_copy); +EXPORT_SYMBOL(netif_rx); +EXPORT_SYMBOL(netif_receive_skb); +EXPORT_SYMBOL(dev_add_pack); +EXPORT_SYMBOL(dev_remove_pack); +EXPORT_SYMBOL(dev_get); +EXPORT_SYMBOL(dev_alloc); +EXPORT_SYMBOL(dev_alloc_name); +EXPORT_SYMBOL(__netdev_watchdog_up); +#ifdef CONFIG_KMOD +EXPORT_SYMBOL(dev_load); +#endif +EXPORT_SYMBOL(dev_ioctl); +EXPORT_SYMBOL(dev_queue_xmit); +#ifdef CONFIG_NET_HW_FLOWCONTROL +EXPORT_SYMBOL(netdev_dropping); +EXPORT_SYMBOL(netdev_register_fc); +EXPORT_SYMBOL(netdev_unregister_fc); +EXPORT_SYMBOL(netdev_fc_xoff); +#endif +EXPORT_SYMBOL(dev_base); +EXPORT_SYMBOL(dev_base_lock); +EXPORT_SYMBOL(dev_close); +EXPORT_SYMBOL(dev_mc_add); +EXPORT_SYMBOL(dev_mc_delete); +EXPORT_SYMBOL(dev_mc_upload); +EXPORT_SYMBOL(__kill_fasync); + +EXPORT_SYMBOL(if_port_text); + +#ifdef CONFIG_HIPPI +EXPORT_SYMBOL(hippi_type_trans); +#endif + +#ifdef CONFIG_NET_FASTROUTE +EXPORT_SYMBOL(netdev_fastroute); +#endif + +#ifdef CONFIG_SYSCTL +EXPORT_SYMBOL(sysctl_wmem_max); +EXPORT_SYMBOL(sysctl_rmem_max); +#ifdef CONFIG_INET +EXPORT_SYMBOL(sysctl_ip_default_ttl); +#endif +#endif + +/* Packet scheduler modules want these. */ +EXPORT_SYMBOL(qdisc_destroy); +EXPORT_SYMBOL(qdisc_reset); +EXPORT_SYMBOL(qdisc_restart); +EXPORT_SYMBOL(qdisc_create_dflt); +EXPORT_SYMBOL(noop_qdisc); +EXPORT_SYMBOL(qdisc_tree_lock); +#ifdef CONFIG_NET_SCHED +PSCHED_EXPORTLIST; +EXPORT_SYMBOL(pfifo_qdisc_ops); +EXPORT_SYMBOL(register_qdisc); +EXPORT_SYMBOL(unregister_qdisc); +EXPORT_SYMBOL(qdisc_get_rtab); +EXPORT_SYMBOL(qdisc_put_rtab); +EXPORT_SYMBOL(qdisc_copy_stats); +#ifdef CONFIG_NET_ESTIMATOR +EXPORT_SYMBOL(qdisc_new_estimator); +EXPORT_SYMBOL(qdisc_kill_estimator); +#endif +#ifdef CONFIG_NET_CLS_POLICE +EXPORT_SYMBOL(tcf_police); +EXPORT_SYMBOL(tcf_police_locate); +EXPORT_SYMBOL(tcf_police_destroy); +EXPORT_SYMBOL(tcf_police_dump); +#endif +#endif +#ifdef CONFIG_NET_CLS +EXPORT_SYMBOL(register_tcf_proto_ops); +EXPORT_SYMBOL(unregister_tcf_proto_ops); +#endif +#ifdef CONFIG_NETFILTER +#include +EXPORT_SYMBOL(nf_register_hook); +EXPORT_SYMBOL(nf_unregister_hook); +EXPORT_SYMBOL(nf_register_sockopt); +EXPORT_SYMBOL(nf_unregister_sockopt); +EXPORT_SYMBOL(nf_reinject); +EXPORT_SYMBOL(nf_register_queue_handler); +EXPORT_SYMBOL(nf_unregister_queue_handler); +EXPORT_SYMBOL(nf_hook_slow); +EXPORT_SYMBOL(nf_hooks); +EXPORT_SYMBOL(nf_setsockopt); +EXPORT_SYMBOL(nf_getsockopt); +EXPORT_SYMBOL(ip_ct_attach); +#ifdef CONFIG_INET +#include +EXPORT_SYMBOL(ip_route_me_harder); +#endif +#endif + +EXPORT_SYMBOL(register_gifconf); + +EXPORT_SYMBOL(softnet_data); + +#if defined(CONFIG_NET_RADIO) || defined(CONFIG_NET_PCMCIA_RADIO) +#include +EXPORT_SYMBOL(wireless_send_event); +#endif /* CONFIG_NET_RADIO || CONFIG_NET_PCMCIA_RADIO */ + +#endif /* CONFIG_NET */