diff -Naur linux-2.4.23/.config linux-2.4.23_TS_2_5/.config --- linux-2.4.23/.config Wed Dec 31 17:00:00 1969 +++ linux-2.4.23_TS_2_5/.config Tue Aug 10 15:49:37 2004 @@ -0,0 +1,1047 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_X86=y +# CONFIG_SBUS is not set +CONFIG_UID16=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +CONFIG_KMOD=y + +# +# Processor type and features +# +# CONFIG_M386 is not set +CONFIG_M486=y +# CONFIG_M586 is not set +# CONFIG_M586TSC is not set +# CONFIG_M586MMX is not set +# CONFIG_M686 is not set +# CONFIG_MPENTIUMIII is not set +# CONFIG_MPENTIUM4 is not set +# CONFIG_MK6 is not set +# CONFIG_MK7 is not set +# CONFIG_MK8 is not set +# CONFIG_MELAN is not set +# CONFIG_MCRUSOE is not set +# CONFIG_MWINCHIPC6 is not set +# CONFIG_MWINCHIP2 is not set +# CONFIG_MWINCHIP3D is not set +# CONFIG_MCYRIXIII is not set +# CONFIG_MVIAC3_2 is not set +CONFIG_X86_WP_WORKS_OK=y +CONFIG_X86_INVLPG=y +CONFIG_X86_CMPXCHG=y +CONFIG_X86_XADD=y +CONFIG_X86_BSWAP=y +CONFIG_X86_POPAD_OK=y +# CONFIG_RWSEM_GENERIC_SPINLOCK is not set +CONFIG_RWSEM_XCHGADD_ALGORITHM=y +CONFIG_X86_L1_CACHE_SHIFT=4 +CONFIG_X86_USE_STRING_486=y +CONFIG_X86_ALIGNMENT_16=y +CONFIG_X86_PPRO_FENCE=y +# CONFIG_X86_F00F_WORKS_OK is not set +CONFIG_X86_MCE=y +TSYSTEMS=y +CONFIG_TS_M486=y +# CONFIG_TOSHIBA is not set +# CONFIG_I8K is not set +# CONFIG_MICROCODE is not set +# CONFIG_X86_MSR is not set +# CONFIG_X86_CPUID is not set +# CONFIG_EDD is not set +CONFIG_NOHIGHMEM=y +# CONFIG_HIGHMEM4G is not set +# CONFIG_HIGHMEM64G is not set +# CONFIG_HIGHMEM is not set +CONFIG_MATH_EMULATION=y +# CONFIG_MTRR is not set +# CONFIG_SMP is not set +# CONFIG_X86_UP_APIC is not set +# CONFIG_X86_TSC_DISABLE is not set + +# +# General setup +# +CONFIG_NET=y +CONFIG_PCI=y +# CONFIG_PCI_GOBIOS is not set +CONFIG_PCI_GODIRECT=y +# CONFIG_PCI_GOANY is not set +CONFIG_PCI_DIRECT=y +CONFIG_ISA=y +# CONFIG_PCI_NAMES is not set +# CONFIG_EISA is not set +# CONFIG_MCA is not set +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +CONFIG_PCMCIA=m +CONFIG_CARDBUS=y +# CONFIG_TCIC is not set +# CONFIG_I82092 is not set +CONFIG_I82365=y + +# +# PCI Hotplug Support +# +CONFIG_HOTPLUG_PCI=m +# CONFIG_HOTPLUG_PCI_COMPAQ is not set +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +CONFIG_BINFMT_AOUT=y +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_MISC=y +# CONFIG_PM is not set +# CONFIG_APM_IGNORE_USER_SUSPEND is not set +# CONFIG_APM_DO_ENABLE is not set +# CONFIG_APM_CPU_IDLE is not set +# CONFIG_APM_DISPLAY_BLANK is not set +# CONFIG_APM_RTC_IS_GMT is not set +# CONFIG_APM_ALLOW_INTS is not set +# CONFIG_APM_REAL_MODE_POWER_OFF is not set + +# +# ACPI Support +# +# CONFIG_ACPI is not set + +# +# Memory Technology Devices (MTD) +# +# CONFIG_MTD is not set + +# +# Parallel port support +# +CONFIG_PARPORT=m +# CONFIG_PARPORT_PC is not set +# CONFIG_PARPORT_AMIGA is not set +# CONFIG_PARPORT_MFC3 is not set +# CONFIG_PARPORT_ATARI is not set +# CONFIG_PARPORT_GSC is not set +# CONFIG_PARPORT_SUNBPP is not set +# CONFIG_PARPORT_OTHER is not set +# CONFIG_PARPORT_1284 is not set + +# +# Plug and Play configuration +# +# CONFIG_PNP 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_UMEM is not set +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_NBD=y +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y +# CONFIG_BLK_STATS is not set +CONFIG_BLK_DEV_MSYS_DOC=m + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +# CONFIG_NETLINK_DEV is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG 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_DHCP=y +# CONFIG_IP_PNP_BOOTP is not set +# CONFIG_IP_PNP_RARP 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 + +# +# IP: Netfilter Configuration +# +CONFIG_IP_NF_CONNTRACK=m +# CONFIG_IP_NF_FTP is not set +# CONFIG_IP_NF_AMANDA is not set +# CONFIG_IP_NF_TFTP is not set +# CONFIG_IP_NF_IRC is not set +# CONFIG_IP_NF_QUEUE is not set +CONFIG_IP_NF_IPTABLES=m +# CONFIG_IP_NF_MATCH_LIMIT is not set +# CONFIG_IP_NF_MATCH_MAC is not set +# CONFIG_IP_NF_MATCH_PKTTYPE is not set +# CONFIG_IP_NF_MATCH_MARK is not set +# CONFIG_IP_NF_MATCH_MULTIPORT is not set +# CONFIG_IP_NF_MATCH_TOS is not set +# CONFIG_IP_NF_MATCH_RECENT is not set +# CONFIG_IP_NF_MATCH_ECN is not set +# CONFIG_IP_NF_MATCH_DSCP is not set +# CONFIG_IP_NF_MATCH_AH_ESP is not set +# CONFIG_IP_NF_MATCH_LENGTH is not set +# CONFIG_IP_NF_MATCH_TTL is not set +# CONFIG_IP_NF_MATCH_TCPMSS is not set +# CONFIG_IP_NF_MATCH_HELPER is not set +# CONFIG_IP_NF_MATCH_STATE is not set +# CONFIG_IP_NF_MATCH_CONNTRACK is not set +# CONFIG_IP_NF_MATCH_UNCLEAN is not set +# CONFIG_IP_NF_MATCH_OWNER is not set +# CONFIG_IP_NF_FILTER is not set +# CONFIG_IP_NF_NAT is not set +# CONFIG_IP_NF_MANGLE is not set +# CONFIG_IP_NF_TARGET_LOG is not set +# CONFIG_IP_NF_TARGET_ULOG is not set +# CONFIG_IP_NF_TARGET_TCPMSS is not set +# CONFIG_IP_NF_ARPTABLES is not set +# CONFIG_IP_NF_COMPAT_IPCHAINS is not set +# CONFIG_IP_NF_COMPAT_IPFWADM is not set + +# +# IP: Virtual Server Configuration +# +# CONFIG_IP_VS is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set + +# +# SCTP Configuration (EXPERIMENTAL) +# +CONFIG_IPV6_SCTP__=y +# CONFIG_IP_SCTP 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_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 testing +# +# CONFIG_NET_PKTGEN is not set + +# +# Telephony Support +# +# CONFIG_PHONE is not set + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=y + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +CONFIG_BLK_DEV_HD_IDE=y +CONFIG_BLK_DEV_HD=y +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_IDEDISK_MULTI_MODE is not set +# CONFIG_IDEDISK_STROKE is not set +CONFIG_BLK_DEV_IDECS=m +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +CONFIG_BLK_DEV_IDESCSI=m +# CONFIG_IDE_TASK_IOCTL is not set + +# +# IDE chipset support/bugfixes +# +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_IDEPCI is not set +# CONFIG_IDE_CHIPSETS is not set +# CONFIG_IDEDMA_AUTO is not set +# CONFIG_DMA_NONPCI is not set +CONFIG_BLK_DEV_IDE_MODES=y +# CONFIG_BLK_DEV_ATARAID is not set + +# +# SCSI support +# +CONFIG_SCSI=m + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=m +CONFIG_SD_EXTRA_DEVS=10 +# CONFIG_CHR_DEV_ST is not set +# CONFIG_CHR_DEV_OSST is not set +# CONFIG_BLK_DEV_SR is not set +# CONFIG_CHR_DEV_SG is not set + +# +# Some SCSI devices (e.g. CD jukebox) support multiple LUNs +# +# CONFIG_SCSI_DEBUG_QUEUES is not set +CONFIG_SCSI_MULTI_LUN=y +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set + +# +# SCSI low-level drivers +# +# CONFIG_BLK_DEV_3W_XXXX_RAID is not set +# CONFIG_SCSI_7000FASST is not set +# CONFIG_SCSI_ACARD is not set +# CONFIG_SCSI_AHA152X is not set +# CONFIG_SCSI_AHA1542 is not set +# CONFIG_SCSI_AHA1740 is not set +# CONFIG_SCSI_AACRAID is not set +# CONFIG_SCSI_AIC7XXX is not set +# CONFIG_SCSI_AIC79XX is not set +# CONFIG_SCSI_AIC7XXX_OLD is not set +# CONFIG_SCSI_DPT_I2O is not set +# CONFIG_SCSI_ADVANSYS is not set +# CONFIG_SCSI_IN2000 is not set +# CONFIG_SCSI_AM53C974 is not set +# CONFIG_SCSI_MEGARAID is not set +# CONFIG_SCSI_MEGARAID2 is not set +# CONFIG_SCSI_BUSLOGIC is not set +# CONFIG_SCSI_CPQFCTS is not set +# CONFIG_SCSI_DMX3191D is not set +# CONFIG_SCSI_DTC3280 is not set +# CONFIG_SCSI_EATA is not set +# CONFIG_SCSI_EATA_DMA is not set +# CONFIG_SCSI_EATA_PIO is not set +# CONFIG_SCSI_FUTURE_DOMAIN is not set +# CONFIG_SCSI_GDTH is not set +# CONFIG_SCSI_GENERIC_NCR5380 is not set +# CONFIG_SCSI_IPS is not set +# CONFIG_SCSI_INITIO is not set +# CONFIG_SCSI_INIA100 is not set +# CONFIG_SCSI_PPA is not set +# CONFIG_SCSI_IMM is not set +# CONFIG_SCSI_NCR53C406A is not set +# CONFIG_SCSI_NCR53C7xx is not set +# CONFIG_SCSI_SYM53C8XX_2 is not set +# CONFIG_SCSI_NCR53C8XX is not set +CONFIG_SCSI_SYM53C8XX=m +CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=4 +CONFIG_SCSI_NCR53C8XX_MAX_TAGS=32 +CONFIG_SCSI_NCR53C8XX_SYNC=20 +# CONFIG_SCSI_NCR53C8XX_PROFILE is not set +# CONFIG_SCSI_NCR53C8XX_IOMAPPED is not set +# CONFIG_SCSI_NCR53C8XX_PQS_PDS is not set +# CONFIG_SCSI_NCR53C8XX_SYMBIOS_COMPAT is not set +# CONFIG_SCSI_PAS16 is not set +# CONFIG_SCSI_PCI2000 is not set +# CONFIG_SCSI_PCI2220I is not set +# CONFIG_SCSI_PSI240I is not set +# CONFIG_SCSI_QLOGIC_FAS is not set +# CONFIG_SCSI_QLOGIC_ISP is not set +# CONFIG_SCSI_QLOGIC_FC is not set +# CONFIG_SCSI_QLOGIC_1280 is not set +# CONFIG_SCSI_SEAGATE is not set +# CONFIG_SCSI_SIM710 is not set +# CONFIG_SCSI_SYM53C416 is not set +# CONFIG_SCSI_DC390T is not set +# CONFIG_SCSI_T128 is not set +# CONFIG_SCSI_U14_34F is not set +# CONFIG_SCSI_ULTRASTOR is not set +# CONFIG_SCSI_NSP32 is not set +# CONFIG_SCSI_DEBUG is not set + +# +# PCMCIA SCSI adapter support +# +# CONFIG_SCSI_PCMCIA is not set + +# +# Fusion MPT device support +# +# CONFIG_FUSION is not set +# CONFIG_FUSION_BOOT is not set +# CONFIG_FUSION_ISENSE is not set +# CONFIG_FUSION_CTL is not set +# CONFIG_FUSION_LAN is not set + +# +# IEEE 1394 (FireWire) support (EXPERIMENTAL) +# +# CONFIG_IEEE1394 is not set + +# +# I2O device support +# +# CONFIG_I2O 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_ETHERTAP is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_HAPPYMEAL is not set +# CONFIG_SUNGEM is not set +CONFIG_NET_VENDOR_3COM=y +CONFIG_EL1=m +CONFIG_EL2=m +CONFIG_ELPLUS=m +CONFIG_EL16=m +CONFIG_EL3=m +CONFIG_3C515=m +CONFIG_VORTEX=m +CONFIG_TYPHOON=m +CONFIG_LANCE=m +CONFIG_NET_VENDOR_SMC=y +CONFIG_WD80x3=m +CONFIG_ULTRA=m +CONFIG_SMC9194=m +# 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_AMD8111_ETH is not set +# CONFIG_ADAPTEC_STARFIRE is not set +# CONFIG_AC3200 is not set +# CONFIG_APRICOT is not set +# CONFIG_B44 is not set +CONFIG_CS89x0=m +CONFIG_TULIP=m +# CONFIG_TULIP_MWI is not set +# CONFIG_TULIP_MMIO is not set +# CONFIG_DE4X5 is not set +# CONFIG_DGRS is not set +CONFIG_DM9102=y +# CONFIG_EEPRO100 is not set +# CONFIG_E100 is not set +# CONFIG_FEALNX is not set +CONFIG_NATSEMI=m +# CONFIG_NE2K_PCI is not set +CONFIG_8139CP=m +CONFIG_8139TOO=m +# CONFIG_8139TOO_PIO is not set +# CONFIG_8139TOO_TUNE_TWISTER is not set +# CONFIG_8139TOO_8129 is not set +# CONFIG_8139_OLD_RX_RESET is not set +# CONFIG_SIS900 is not set +CONFIG_EPIC100=m +# CONFIG_SUNDANCE is not set +# CONFIG_TLAN is not set +# CONFIG_VIA_RHINE is not set +# CONFIG_WINBOND_840 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_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=m +# CONFIG_PPP_MULTILINK is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +# CONFIG_PPP_DEFLATE is not set +# CONFIG_PPP_BSDCOMP is not set +# CONFIG_PPPOE is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +CONFIG_NET_RADIO=y +CONFIG_STRIP=m +CONFIG_WAVELAN=m +CONFIG_ARLAN=m +CONFIG_AIRONET4500=m +CONFIG_AIRONET4500_NONCS=m +CONFIG_AIRONET4500_PNP=y +CONFIG_AIRONET4500_PCI=y +# CONFIG_AIRONET4500_ISA is not set +# CONFIG_AIRONET4500_I365 is not set +CONFIG_AIRONET4500_PROC=m +CONFIG_AIRO=m +CONFIG_HERMES=m +CONFIG_PLX_HERMES=m +CONFIG_TMD_HERMES=m +CONFIG_PCI_HERMES=m + +# +# Wireless Pcmcia cards support +# +CONFIG_PCMCIA_HERMES=m +CONFIG_AIRO_CS=m +CONFIG_NET_WIRELESS=y + +# +# 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 + +# +# PCMCIA network device support +# +CONFIG_NET_PCMCIA=y +CONFIG_PCMCIA_3C589=m +CONFIG_PCMCIA_3C574=m +CONFIG_PCMCIA_FMVJ18X=m +CONFIG_PCMCIA_PCNET=m +CONFIG_PCMCIA_AXNET=m +CONFIG_PCMCIA_NMCLAN=m +CONFIG_PCMCIA_SMC91C92=m +CONFIG_PCMCIA_XIRC2PS=m +CONFIG_PCMCIA_XIRCOM=m +# CONFIG_PCMCIA_XIRTULIP is not set +CONFIG_NET_PCMCIA_RADIO=y +CONFIG_PCMCIA_RAYCS=m +CONFIG_PCMCIA_NETWAVE=m +CONFIG_PCMCIA_WAVELAN=m +CONFIG_AIRONET4500_CS=m + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Old CD-ROM drivers (not SCSI, not IDE) +# +# CONFIG_CD_NO_IDESCSI is not set + +# +# Input core support +# +CONFIG_INPUT=m +CONFIG_INPUT_KEYBDEV=m +CONFIG_INPUT_MOUSEDEV=m +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_SERIAL=y +CONFIG_SERIAL_CONSOLE=y +CONFIG_SERIAL_EXTENDED=y +CONFIG_SERIAL_MANY_PORTS=y +CONFIG_SERIAL_SHARE_IRQ=y +# CONFIG_SERIAL_DETECT_IRQ is not set +# CONFIG_SERIAL_MULTIPORT is not set +# CONFIG_HUB6 is not set +# CONFIG_SERIAL_NONSTANDARD is not set +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=256 +# CONFIG_PRINTER is not set +# CONFIG_PPDEV is not set +# CONFIG_TIPAR is not set + +# +# 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 +# CONFIG_MK712_MOUSE is not set + +# +# Joysticks +# +# CONFIG_INPUT_GAMEPORT is not set +# CONFIG_INPUT_SERIO is not set + +# +# Joysticks +# +# CONFIG_INPUT_IFORCE_USB is not set +# CONFIG_INPUT_DB9 is not set +# CONFIG_INPUT_GAMECON is not set +# CONFIG_INPUT_TURBOGRAFX is not set +# CONFIG_QIC02_TAPE is not set +# CONFIG_IPMI_HANDLER is not set + +# +# Watchdog Cards +# +CONFIG_WATCHDOG=y +# CONFIG_WATCHDOG_NOWAYOUT is not set +# CONFIG_ACQUIRE_WDT is not set +# CONFIG_ADVANTECH_WDT is not set +# CONFIG_ALIM1535_WDT is not set +# CONFIG_ALIM7101_WDT is not set +# CONFIG_SC520_WDT is not set +CONFIG_TS486_WDT=y +# CONFIG_PCWATCHDOG is not set +# CONFIG_EUROTECH_WDT is not set +# CONFIG_IB700_WDT is not set +# CONFIG_WAFER_WDT is not set +# CONFIG_I810_TCO is not set +# CONFIG_MIXCOMWD is not set +# CONFIG_60XX_WDT is not set +# CONFIG_SC1200_WDT is not set +# CONFIG_SCx200_WDT is not set +# CONFIG_SOFT_WATCHDOG is not set +# CONFIG_W83877F_WDT is not set +# CONFIG_WDT is not set +# CONFIG_WDTPCI is not set +# CONFIG_MACHZ_WDT is not set +# CONFIG_AMD7XX_TCO is not set +# CONFIG_SCx200_GPIO is not set +# CONFIG_AMD_RNG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_HW_RANDOM is not set +# CONFIG_AMD_PM768 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 +# CONFIG_SONYPI is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set + +# +# Direct Rendering Manager (XFree86 DRI support) +# +# CONFIG_DRM is not set + +# +# PCMCIA character devices +# +CONFIG_PCMCIA_SERIAL_CS=m +# CONFIG_SYNCLINK_CS is not set +# CONFIG_MWAVE is not set +CONFIG_TSA2D=m +CONFIG_TS9700=m +CONFIG_TSKEYPAD=m + +# +# Multimedia devices +# +CONFIG_VIDEO_DEV=m + +# +# Video For Linux +# +CONFIG_VIDEO_PROC_FS=y + +# +# Video Adapters +# +# CONFIG_VIDEO_PMS is not set +# CONFIG_VIDEO_BWQCAM is not set +# CONFIG_VIDEO_CQCAM is not set +# CONFIG_VIDEO_CPIA is not set +# CONFIG_VIDEO_STRADIS is not set + +# +# Radio Adapters +# +# CONFIG_RADIO_CADET is not set +# CONFIG_RADIO_RTRACK is not set +# CONFIG_RADIO_RTRACK2 is not set +# CONFIG_RADIO_AZTECH is not set +# CONFIG_RADIO_GEMTEK is not set +# CONFIG_RADIO_GEMTEK_PCI is not set +# CONFIG_RADIO_MAXIRADIO is not set +# CONFIG_RADIO_MAESTRO is not set +# CONFIG_RADIO_SF16FMI is not set +# CONFIG_RADIO_SF16FMR2 is not set +# CONFIG_RADIO_TERRATEC is not set +# CONFIG_RADIO_TRUST is not set +# CONFIG_RADIO_TYPHOON is not set +# CONFIG_RADIO_ZOLTRIX is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +CONFIG_AUTOFS4_FS=y +CONFIG_REISERFS_FS=m +# CONFIG_REISERFS_CHECK is not set +# CONFIG_REISERFS_PROC_INFO is not set +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +CONFIG_EXT3_FS=y +CONFIG_JBD=y +# CONFIG_JBD_DEBUG is not set +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +CONFIG_UMSDOS_FS=m +# CONFIG_VFAT_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_CRAMFS is not set +CONFIG_TMPFS=y +CONFIG_RAMFS=y +CONFIG_ISO9660_FS=m +# CONFIG_JOLIET is not set +# CONFIG_ZISOFS is not set +# CONFIG_JFS_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_NTFS_FS is not set +# CONFIG_HPFS_FS is not set +CONFIG_PROC_FS=y +CONFIG_DEVFS_FS=y +CONFIG_DEVFS_MOUNT=y +# CONFIG_DEVFS_DEBUG is not set +CONFIG_DEVPTS_FS=y +# CONFIG_QNX4FS_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_UDF_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +# CONFIG_NFS_DIRECTIO is not set +CONFIG_ROOT_NFS=y +CONFIG_NFSD=y +CONFIG_NFSD_V3=y +# CONFIG_NFSD_TCP is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +CONFIG_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +# CONFIG_NCP_FS is not set +# CONFIG_ZISOFS_FS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +CONFIG_SMB_NLS=y +CONFIG_NLS=y + +# +# Native Language Support +# +CONFIG_NLS_DEFAULT="iso8859-1" +# CONFIG_NLS_CODEPAGE_437 is not set +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ISO8859_1 is not set +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_UTF8 is not set + +# +# Console drivers +# +CONFIG_VGA_CONSOLE=y +# CONFIG_VIDEO_SELECT is not set +# CONFIG_MDA_CONSOLE is not set + +# +# Frame-buffer support +# +# CONFIG_FB is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +CONFIG_USB=m +# CONFIG_USB_DEBUG is not set + +# +# Miscellaneous USB options +# +CONFIG_USB_DEVICEFS=y +# CONFIG_USB_BANDWIDTH is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_EHCI_HCD is not set +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +CONFIG_USB_OHCI=m +# CONFIG_USB_SL811HS_ALT is not set +# CONFIG_USB_SL811HS is not set + +# +# USB Device Class drivers +# +CONFIG_USB_BLUETOOTH=m +CONFIG_USB_STORAGE=m +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +CONFIG_USB_STORAGE_SDDR09=y +# CONFIG_USB_STORAGE_SDDR55 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +CONFIG_USB_ACM=m +CONFIG_USB_PRINTER=m + +# +# USB Human Interface Devices (HID) +# +CONFIG_USB_HID=m +# CONFIG_USB_HIDINPUT is not set +# CONFIG_USB_HIDDEV is not set +CONFIG_USB_KBD=m +CONFIG_USB_MOUSE=m +# CONFIG_USB_AIPTEK is not set +# CONFIG_USB_WACOM is not set +# CONFIG_USB_KBTAB is not set +# CONFIG_USB_POWERMATE is not set + +# +# USB Imaging devices +# +CONFIG_USB_DC2XX=m +# CONFIG_USB_MDC800 is not set +CONFIG_USB_SCANNER=m +CONFIG_USB_MICROTEK=m +CONFIG_USB_HPUSBSCSI=m + +# +# USB Multimedia devices +# +CONFIG_USB_IBMCAM=m +# CONFIG_USB_KONICAWC is not set +CONFIG_USB_OV511=m +CONFIG_USB_PWC=m +CONFIG_USB_SE401=m +CONFIG_USB_STV680=m +CONFIG_USB_VICAM=m +CONFIG_USB_DSBR=m +CONFIG_USB_DABUSB=m + +# +# USB Network adaptors +# +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_AX8817X is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_USBNET is not set + +# +# USB port drivers +# +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +CONFIG_USB_SERIAL=m +CONFIG_USB_SERIAL_GENERIC=y +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +CONFIG_USB_SERIAL_VISOR=m +CONFIG_USB_SERIAL_IPAQ=m +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_EDGEPORT_TI is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_KLSI is not set +# CONFIG_USB_SERIAL_KOBIL_SCT is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OMNINET is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_AUERSWALD is not set +# CONFIG_USB_TIGL is not set +# CONFIG_USB_BRLVGER is not set +# CONFIG_USB_LCD is not set + +# +# Support for USB gadgets +# +# CONFIG_USB_GADGET is not set + +# +# Bluetooth support +# +# CONFIG_BLUEZ is not set + +# +# Kernel hacking +# +# CONFIG_DEBUG_KERNEL is not set +CONFIG_LOG_BUF_SHIFT=0 + +# +# Cryptographic options +# +# CONFIG_CRYPTO is not set + +# +# Library routines +# +# CONFIG_CRC32 is not set +# CONFIG_ZLIB_INFLATE is not set +# CONFIG_ZLIB_DEFLATE is not set +# CONFIG_FW_LOADER is not set diff -Naur linux-2.4.23/Documentation/Configure.help linux-2.4.23_TS_2_5/Documentation/Configure.help --- linux-2.4.23/Documentation/Configure.help Fri Nov 28 11:26:19 2003 +++ linux-2.4.23_TS_2_5/Documentation/Configure.help Tue Dec 2 18:02:34 2003 @@ -1623,6 +1623,10 @@ say M here and read . The module will be called DAC960.o. +M-Systems DiskOnChip 2000 Support +CONFIG_BLK_DEV_MSYS_DOC + This driver adds support for the M-Systems DiskOnChip Flash devices. + Parallel port IDE device support CONFIG_PARIDE There are many external CD-ROM and disk devices that connect through @@ -3948,6 +3952,25 @@ The module will be called mwave.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. +Analog to Digital driver for Technologic Systems SBC +CONFIG_TSA2D + Most SBCs from Technologic Systems have the option to support + an Analog to Digital Converter. This adds the generic driver + support for the AtoD option. + +Technologic Systems TS-9700 driver support (DAC/AtoD) +CONFIG_TS9700 + This adds driver support for the TS-9700 from Technologic + Systems. The TS-9700 is a PC/104 daughter board that + features both a Digital to Analog Converter and an + Analog to Digital Converter. + +Technologic Systems support for Matrix Keypad +CONFIG_TSKEYPAD + Technologic Systems offers a simple Matrix Keypad that + can be wired to their Single Board Computers. This adds + driver support and exports a /dev/SBC/keypad device + /dev/agpgart (AGP Support) CONFIG_AGP AGP (Accelerated Graphics Port) is a bus system mainly used to @@ -20159,7 +20182,16 @@ If you want to compile it as a module, say M here and read . The module will be called wafer5823wdt.o - + +Technologic Systems SBC support +TSYSTEMS + This tailors the kernel to support the Technologic Systems Single + Board Computers. If your SBC is a 3x00 series board, then choose a + processor type of i386. + If your board is a 5x00 series board, then choose the processor + type of i486. + + Machine Check Exception CONFIG_X86_MCE Machine Check Exception support allows the processor to notify the @@ -20171,6 +20203,16 @@ For pentium machines the mce support defaults to off as the mainboard support is not always present. You must activate it as a boot option. +Technologic Systems SBC support +CONFIG_TSYSTEMS + This tailors the kernel to support the Technologic Systems Single Board + Computers. If your SBC is a 3x00 series board, then choose a processor + type of i386. + If your board is a 5x00 series board, then choose the processor type + of i486 + + More information can be found at www.embeddedx86.com + Toshiba Laptop support CONFIG_TOSHIBA This adds a driver to safely access the System Management Mode of @@ -20312,6 +20354,11 @@ You can compile this driver directly into the kernel, or use it as a module. The module will be called sc520_wdt.o. + +Technologic Systems 5x00 SBC Watchdog Timer +CONFIG_TS486_WDT + Technologic Systems AMD Elan SC520 SBCs only. The SC520 Elan + has a built in Watchdog Timer. This is the driver for that WDT Enhanced Real Time Clock Support CONFIG_RTC diff -Naur linux-2.4.23/Makefile linux-2.4.23_TS_2_5/Makefile --- linux-2.4.23/Makefile Fri Nov 28 11:26:21 2003 +++ linux-2.4.23_TS_2_5/Makefile Thu Jun 10 13:31:37 2004 @@ -1,7 +1,7 @@ VERSION = 2 PATCHLEVEL = 4 SUBLEVEL = 23 -EXTRAVERSION = +EXTRAVERSION = -2.5-ts KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) @@ -137,9 +137,9 @@ DRIVERS-$(CONFIG_ACPI_BOOT) += drivers/acpi/acpi.o DRIVERS-$(CONFIG_PARPORT) += drivers/parport/driver.o -DRIVERS-y += drivers/char/char.o \ +DRIVERS-y += drivers/misc/misc.o \ + drivers/char/char.o \ drivers/block/block.o \ - drivers/misc/misc.o \ drivers/net/net.o DRIVERS-$(CONFIG_AGP) += drivers/char/agp/agp.o DRIVERS-$(CONFIG_DRM_NEW) += drivers/char/drm/drm.o diff -Naur linux-2.4.23/TS-README linux-2.4.23_TS_2_5/TS-README --- linux-2.4.23/TS-README Wed Dec 31 17:00:00 1969 +++ linux-2.4.23_TS_2_5/TS-README Wed Dec 3 13:45:31 2003 @@ -0,0 +1,20 @@ +Please visit www.embeddedx86.com for up-to-date patches, +and the Changelogs associated with those patches. + +codenames refer to a particular build. The patches (and their +corresponding CVS tags) refer to released patches and released +kernel builds against certain kernel trees in the 2.4.xx tree. + +Codenames: + parthenope kernel is built for 3x00 SBCs + ligeia kernel is built for 5x00 SBCs + leucosia kernel is built for 5x00 SBCs with PCMCIA + +TAGS: + TS-2.4 first patch against kernel 2.4.23 + + TS-2.3 first patch against kernel 2.4.22 + + TS-2.2 These patches are against 2.4.18 kernels + TS-2.1 + TS-2.0 diff -Naur linux-2.4.23/TSConfigFile linux-2.4.23_TS_2_5/TSConfigFile --- linux-2.4.23/TSConfigFile Wed Dec 31 17:00:00 1969 +++ linux-2.4.23_TS_2_5/TSConfigFile Wed Dec 3 13:41:09 2003 @@ -0,0 +1,767 @@ +# +# Automatically generated by make menuconfig: don't edit +# +CONFIG_X86=y +# CONFIG_SBUS is not set +CONFIG_UID16=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +CONFIG_KMOD=y + +# +# Processor type and features +# +CONFIG_M386=y +# CONFIG_M486 is not set +# CONFIG_M586 is not set +# CONFIG_M586TSC is not set +# CONFIG_M586MMX is not set +# CONFIG_M686 is not set +# CONFIG_MPENTIUMIII is not set +# CONFIG_MPENTIUM4 is not set +# CONFIG_MK6 is not set +# CONFIG_MK7 is not set +# CONFIG_MK8 is not set +# CONFIG_MELAN is not set +# CONFIG_MCRUSOE is not set +# CONFIG_MWINCHIPC6 is not set +# CONFIG_MWINCHIP2 is not set +# CONFIG_MWINCHIP3D is not set +# CONFIG_MCYRIXIII is not set +# CONFIG_MVIAC3_2 is not set +# CONFIG_X86_CMPXCHG is not set +# CONFIG_X86_XADD is not set +CONFIG_X86_L1_CACHE_SHIFT=4 +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set +CONFIG_X86_PPRO_FENCE=y +# CONFIG_X86_F00F_WORKS_OK is not set +CONFIG_X86_MCE=y +TSYSTEMS=y +CONFIG_TS_M386=y +# CONFIG_TOSHIBA is not set +# CONFIG_I8K is not set +# CONFIG_MICROCODE is not set +# CONFIG_X86_MSR is not set +# CONFIG_X86_CPUID is not set +# CONFIG_EDD is not set +CONFIG_NOHIGHMEM=y +# CONFIG_HIGHMEM4G is not set +# CONFIG_HIGHMEM64G is not set +# CONFIG_HIGHMEM is not set +CONFIG_MATH_EMULATION=y +# CONFIG_MTRR is not set +# CONFIG_SMP is not set +# CONFIG_X86_UP_APIC is not set +# CONFIG_X86_UP_IOAPIC is not set +# CONFIG_X86_TSC_DISABLE is not set + +# +# General setup +# +CONFIG_NET=y +CONFIG_PCI=y +# CONFIG_PCI_GOBIOS is not set +CONFIG_PCI_GODIRECT=y +# CONFIG_PCI_GOANY is not set +CONFIG_PCI_DIRECT=y +CONFIG_ISA=y +# CONFIG_PCI_NAMES is not set +# CONFIG_EISA is not set +# CONFIG_MCA is not set +# CONFIG_HOTPLUG is not set +# CONFIG_PCMCIA is not set +# CONFIG_HOTPLUG_PCI is not set +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +CONFIG_BINFMT_AOUT=y +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_MISC=y +# CONFIG_PM is not set +# CONFIG_APM is not set + +# +# ACPI Support +# +# CONFIG_ACPI is not set + +# +# Memory Technology Devices (MTD) +# +# CONFIG_MTD is not set + +# +# Parallel port support +# +CONFIG_PARPORT=m +# CONFIG_PARPORT_PC is not set +# CONFIG_PARPORT_AMIGA is not set +# CONFIG_PARPORT_MFC3 is not set +# CONFIG_PARPORT_ATARI is not set +# CONFIG_PARPORT_GSC is not set +# CONFIG_PARPORT_SUNBPP is not set +# CONFIG_PARPORT_OTHER is not set +# CONFIG_PARPORT_1284 is not set + +# +# 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_CISS_SCSI_TAPE is not set +# CONFIG_CISS_MONITOR_THREAD is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_NBD=y +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y +# CONFIG_BLK_STATS is not set +CONFIG_BLK_DEV_MSYS_DOC=m + +# +# 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=y +# CONFIG_PACKET_MMAP is not set +# CONFIG_NETLINK_DEV is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG 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_DHCP=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_ARPD is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set + +# +# IP: Netfilter Configuration +# +CONFIG_IP_NF_CONNTRACK=m +# CONFIG_IP_NF_FTP is not set +# CONFIG_IP_NF_AMANDA is not set +# CONFIG_IP_NF_TFTP is not set +# CONFIG_IP_NF_IRC is not set +# CONFIG_IP_NF_QUEUE is not set +CONFIG_IP_NF_IPTABLES=m +# CONFIG_IP_NF_MATCH_LIMIT is not set +# CONFIG_IP_NF_MATCH_MAC is not set +# CONFIG_IP_NF_MATCH_PKTTYPE is not set +# CONFIG_IP_NF_MATCH_MARK is not set +# CONFIG_IP_NF_MATCH_MULTIPORT is not set +# CONFIG_IP_NF_MATCH_TOS is not set +# CONFIG_IP_NF_MATCH_RECENT is not set +# CONFIG_IP_NF_MATCH_ECN is not set +# CONFIG_IP_NF_MATCH_DSCP is not set +# CONFIG_IP_NF_MATCH_AH_ESP is not set +# CONFIG_IP_NF_MATCH_LENGTH is not set +# CONFIG_IP_NF_MATCH_TTL is not set +# CONFIG_IP_NF_MATCH_TCPMSS is not set +# CONFIG_IP_NF_MATCH_HELPER is not set +# CONFIG_IP_NF_MATCH_STATE is not set +# CONFIG_IP_NF_MATCH_CONNTRACK is not set +# CONFIG_IP_NF_MATCH_UNCLEAN is not set +# CONFIG_IP_NF_MATCH_OWNER is not set +# CONFIG_IP_NF_FILTER is not set +# CONFIG_IP_NF_NAT is not set +# CONFIG_IP_NF_MANGLE is not set +# CONFIG_IP_NF_TARGET_LOG is not set +# CONFIG_IP_NF_TARGET_ULOG is not set +# CONFIG_IP_NF_TARGET_TCPMSS is not set +# CONFIG_IP_NF_ARPTABLES is not set +# CONFIG_IP_NF_COMPAT_IPCHAINS is not set +# CONFIG_IP_NF_COMPAT_IPFWADM is not set + +# +# IP: Virtual Server Configuration +# +# CONFIG_IP_VS is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set + +# +# SCTP Configuration (EXPERIMENTAL) +# +CONFIG_IPV6_SCTP__=y +# CONFIG_IP_SCTP 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_DEV_APPLETALK 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 testing +# +# CONFIG_NET_PKTGEN is not set + +# +# Telephony Support +# +# CONFIG_PHONE is not set +# CONFIG_PHONE_IXJ is not set +# CONFIG_PHONE_IXJ_PCMCIA is not set + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=y + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=y +CONFIG_BLK_DEV_HD_IDE=y +CONFIG_BLK_DEV_HD=y +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_IDEDISK_MULTI_MODE is not set +# CONFIG_IDEDISK_STROKE is not set +# CONFIG_BLK_DEV_IDECS is not set +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_BLK_DEV_IDESCSI is not set +# CONFIG_IDE_TASK_IOCTL is not set +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_BLK_DEV_IDEPCI is not set +# CONFIG_IDE_CHIPSETS is not set +CONFIG_IDEDMA_AUTO=y +# CONFIG_IDEDMA_IVB is not set +# CONFIG_DMA_NONPCI is not set +CONFIG_BLK_DEV_PDC202XX=y +CONFIG_BLK_DEV_IDE_MODES=y +# CONFIG_BLK_DEV_ATARAID is not set +# CONFIG_BLK_DEV_ATARAID_PDC is not set +# CONFIG_BLK_DEV_ATARAID_HPT is not set +# CONFIG_BLK_DEV_ATARAID_SII is not set + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# Fusion MPT device support +# +# CONFIG_FUSION is not set +# CONFIG_FUSION_BOOT is not set +# CONFIG_FUSION_ISENSE is not set +# CONFIG_FUSION_CTL is not set +# CONFIG_FUSION_LAN is not set + +# +# IEEE 1394 (FireWire) support (EXPERIMENTAL) +# +# 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 + +# +# 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_ETHERTAP is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_SUNLANCE is not set +# CONFIG_HAPPYMEAL 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=y +# CONFIG_E2100 is not set +# CONFIG_EWRK3 is not set +# CONFIG_EEXPRESS is not set +# CONFIG_EEXPRESS_PRO is not set +# CONFIG_HPLAN_PLUS is not set +# CONFIG_HPLAN is not set +# CONFIG_LP486E is not set +# CONFIG_ETH16I is not set +# CONFIG_NE2000 is not set +CONFIG_NET_PCI=y +# CONFIG_PCNET32 is not set +# CONFIG_AMD8111_ETH is not set +# CONFIG_ADAPTEC_STARFIRE is not set +# CONFIG_AC3200 is not set +# CONFIG_APRICOT is not set +# CONFIG_B44 is not set +CONFIG_CS89x0=y +# CONFIG_TULIP is not set +# CONFIG_DE4X5 is not set +# CONFIG_DGRS is not set +CONFIG_DM9102=y +# CONFIG_EEPRO100 is not set +# CONFIG_EEPRO100_PIO is not set +# CONFIG_E100 is not set +# CONFIG_LNE390 is not set +# CONFIG_FEALNX 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_8139CP is not set +# CONFIG_8139TOO is not set +# CONFIG_8139TOO_PIO is not set +# CONFIG_8139TOO_TUNE_TWISTER is not set +# CONFIG_8139TOO_8129 is not set +# CONFIG_8139_OLD_RX_RESET is not set +# CONFIG_SIS900 is not set +# CONFIG_EPIC100 is not set +# CONFIG_SUNDANCE is not set +# CONFIG_SUNDANCE_MMIO is not set +# CONFIG_TLAN is not set +# CONFIG_VIA_RHINE is not set +# CONFIG_VIA_RHINE_MMIO is not set +# CONFIG_WINBOND_840 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=m +# CONFIG_PPP_MULTILINK is not set +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +# CONFIG_PPP_DEFLATE is not set +# CONFIG_PPP_BSDCOMP is not set +# CONFIG_PPPOE 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 + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Old CD-ROM drivers (not SCSI, not IDE) +# +# CONFIG_CD_NO_IDESCSI is not set + +# +# 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 + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_SERIAL=y +CONFIG_SERIAL_CONSOLE=y +CONFIG_SERIAL_EXTENDED=y +CONFIG_SERIAL_MANY_PORTS=y +CONFIG_SERIAL_SHARE_IRQ=y +# CONFIG_SERIAL_DETECT_IRQ is not set +# CONFIG_SERIAL_MULTIPORT is not set +# CONFIG_HUB6 is not set +# CONFIG_SERIAL_NONSTANDARD is not set +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=256 +# CONFIG_PRINTER is not set +# CONFIG_PPDEV is not set +# CONFIG_TIPAR is not set + +# +# 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 +# CONFIG_MK712_MOUSE is not set + +# +# 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=y +# CONFIG_WATCHDOG_NOWAYOUT is not set +# CONFIG_ACQUIRE_WDT is not set +# CONFIG_ADVANTECH_WDT is not set +# CONFIG_ALIM1535_WDT is not set +# CONFIG_ALIM7101_WDT is not set +# CONFIG_SC520_WDT is not set +# CONFIG_PCWATCHDOG is not set +# CONFIG_EUROTECH_WDT is not set +# CONFIG_IB700_WDT is not set +# CONFIG_WAFER_WDT is not set +# CONFIG_I810_TCO is not set +# CONFIG_MIXCOMWD is not set +# CONFIG_60XX_WDT is not set +# CONFIG_SC1200_WDT is not set +# CONFIG_SCx200_WDT is not set +# CONFIG_SOFT_WATCHDOG is not set +# CONFIG_W83877F_WDT is not set +# CONFIG_WDT is not set +# CONFIG_WDTPCI is not set +# CONFIG_MACHZ_WDT is not set +# CONFIG_AMD7XX_TCO is not set +# CONFIG_SCx200_GPIO is not set +# CONFIG_AMD_RNG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_HW_RANDOM is not set +# CONFIG_AMD_PM768 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 +# CONFIG_SONYPI is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set + +# +# Direct Rendering Manager (XFree86 DRI support) +# +# CONFIG_DRM is not set +# CONFIG_MWAVE is not set +CONFIG_TSA2D=m +CONFIG_TS9700=m +CONFIG_TSKEYPAD=m + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_QFMT_V2 is not set +# CONFIG_AUTOFS_FS is not set +CONFIG_AUTOFS4_FS=y +CONFIG_REISERFS_FS=m +# 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_HFSPLUS_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=y +CONFIG_JBD=y +# CONFIG_JBD_DEBUG is not set +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +CONFIG_UMSDOS_FS=m +# 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_TMPFS=y +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 +CONFIG_PROC_FS=y +CONFIG_DEVFS_FS=y +CONFIG_DEVFS_MOUNT=y +# CONFIG_DEVFS_DEBUG is not set +# CONFIG_DEVPTS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX4FS_RW is not set +# CONFIG_ROMFS_FS is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_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_INTERMEZZO_FS is not set +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +# CONFIG_NFS_DIRECTIO is not set +CONFIG_ROOT_NFS=y +CONFIG_NFSD=y +# 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=m +# CONFIG_SMB_NLS_DEFAULT is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set +# CONFIG_ZISOFS_FS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +CONFIG_SMB_NLS=y +CONFIG_NLS=y + +# +# Native Language Support +# +CONFIG_NLS_DEFAULT="iso8859-1" +# CONFIG_NLS_CODEPAGE_437 is not set +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ISO8859_1 is not set +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_UTF8 is not set + +# +# Console drivers +# +CONFIG_VGA_CONSOLE=y +# CONFIG_VIDEO_SELECT is not set +# CONFIG_MDA_CONSOLE is not set + +# +# Frame-buffer support +# +# CONFIG_FB is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# Support for USB gadgets +# +# CONFIG_USB_GADGET is not set + +# +# Bluetooth support +# +# CONFIG_BLUEZ is not set + +# +# Kernel hacking +# +# CONFIG_DEBUG_KERNEL is not set +CONFIG_LOG_BUF_SHIFT=0 + +# +# Cryptographic options +# +# CONFIG_CRYPTO is not set + +# +# Library routines +# +# CONFIG_CRC32 is not set +# CONFIG_ZLIB_INFLATE is not set +# CONFIG_ZLIB_DEFLATE is not set diff -Naur linux-2.4.23/TSConfigFile.5500 linux-2.4.23_TS_2_5/TSConfigFile.5500 --- linux-2.4.23/TSConfigFile.5500 Wed Dec 31 17:00:00 1969 +++ linux-2.4.23_TS_2_5/TSConfigFile.5500 Wed Dec 3 13:41:09 2003 @@ -0,0 +1,1019 @@ +# +# Automatically generated by make menuconfig: don't edit +# +CONFIG_X86=y +# CONFIG_SBUS is not set +CONFIG_UID16=y + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODVERSIONS is not set +CONFIG_KMOD=y + +# +# Processor type and features +# +# CONFIG_M386 is not set +CONFIG_M486=y +# CONFIG_M586 is not set +# CONFIG_M586TSC is not set +# CONFIG_M586MMX is not set +# CONFIG_M686 is not set +# CONFIG_MPENTIUMIII is not set +# CONFIG_MPENTIUM4 is not set +# CONFIG_MK6 is not set +# CONFIG_MK7 is not set +# CONFIG_MK8 is not set +# CONFIG_MELAN is not set +# CONFIG_MCRUSOE is not set +# CONFIG_MWINCHIPC6 is not set +# CONFIG_MWINCHIP2 is not set +# CONFIG_MWINCHIP3D is not set +# CONFIG_MCYRIXIII is not set +# CONFIG_MVIAC3_2 is not set +CONFIG_X86_WP_WORKS_OK=y +CONFIG_X86_INVLPG=y +CONFIG_X86_CMPXCHG=y +CONFIG_X86_XADD=y +CONFIG_X86_BSWAP=y +CONFIG_X86_POPAD_OK=y +# CONFIG_RWSEM_GENERIC_SPINLOCK is not set +CONFIG_RWSEM_XCHGADD_ALGORITHM=y +CONFIG_X86_L1_CACHE_SHIFT=4 +CONFIG_X86_USE_STRING_486=y +CONFIG_X86_ALIGNMENT_16=y +CONFIG_X86_PPRO_FENCE=y +# CONFIG_X86_F00F_WORKS_OK is not set +CONFIG_X86_MCE=y +TSYSTEMS=y +CONFIG_TS_M486=y +# CONFIG_TOSHIBA is not set +# CONFIG_I8K is not set +# CONFIG_MICROCODE is not set +# CONFIG_X86_MSR is not set +# CONFIG_X86_CPUID is not set +# CONFIG_EDD is not set +CONFIG_NOHIGHMEM=y +# CONFIG_HIGHMEM4G is not set +# CONFIG_HIGHMEM64G is not set +# CONFIG_HIGHMEM is not set +CONFIG_MATH_EMULATION=y +# CONFIG_MTRR is not set +# CONFIG_SMP is not set +# CONFIG_X86_UP_APIC is not set +# CONFIG_X86_UP_IOAPIC is not set +# CONFIG_X86_TSC_DISABLE is not set + +# +# General setup +# +CONFIG_NET=y +CONFIG_PCI=y +# CONFIG_PCI_GOBIOS is not set +CONFIG_PCI_GODIRECT=y +# CONFIG_PCI_GOANY is not set +CONFIG_PCI_DIRECT=y +CONFIG_ISA=y +# CONFIG_PCI_NAMES is not set +# CONFIG_EISA is not set +# CONFIG_MCA is not set +CONFIG_HOTPLUG=y + +# +# PCMCIA/CardBus support +# +# CONFIG_PCMCIA is not set + +# +# PCI Hotplug Support +# +# CONFIG_HOTPLUG_PCI is not set +# CONFIG_HOTPLUG_PCI_COMPAQ is not set +# CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM is not set +# CONFIG_HOTPLUG_PCI_IBM is not set +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +CONFIG_BINFMT_AOUT=y +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_MISC=y +# CONFIG_PM is not set +# CONFIG_APM is not set + +# +# ACPI Support +# +# CONFIG_ACPI is not set + +# +# Memory Technology Devices (MTD) +# +# CONFIG_MTD is not set + +# +# Parallel port support +# +CONFIG_PARPORT=m +# CONFIG_PARPORT_PC is not set +# CONFIG_PARPORT_AMIGA is not set +# CONFIG_PARPORT_MFC3 is not set +# CONFIG_PARPORT_ATARI is not set +# CONFIG_PARPORT_GSC is not set +# CONFIG_PARPORT_SUNBPP is not set +# CONFIG_PARPORT_OTHER is not set +# CONFIG_PARPORT_1284 is not set + +# +# 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_CISS_SCSI_TAPE is not set +# CONFIG_CISS_MONITOR_THREAD is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_NBD=y +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=4096 +CONFIG_BLK_DEV_INITRD=y +# CONFIG_BLK_STATS is not set +# CONFIG_BLK_DEV_MSYS_DOC 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=y +# CONFIG_PACKET_MMAP is not set +# CONFIG_NETLINK_DEV is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG 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_DHCP=y +# CONFIG_IP_PNP_BOOTP is not set +# CONFIG_IP_PNP_RARP 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 + +# +# IP: Netfilter Configuration +# +CONFIG_IP_NF_CONNTRACK=m +# CONFIG_IP_NF_FTP is not set +# CONFIG_IP_NF_AMANDA is not set +# CONFIG_IP_NF_TFTP is not set +# CONFIG_IP_NF_IRC is not set +# CONFIG_IP_NF_QUEUE is not set +CONFIG_IP_NF_IPTABLES=m +# CONFIG_IP_NF_MATCH_LIMIT is not set +# CONFIG_IP_NF_MATCH_MAC is not set +# CONFIG_IP_NF_MATCH_PKTTYPE is not set +# CONFIG_IP_NF_MATCH_MARK is not set +# CONFIG_IP_NF_MATCH_MULTIPORT is not set +# CONFIG_IP_NF_MATCH_TOS is not set +# CONFIG_IP_NF_MATCH_RECENT is not set +# CONFIG_IP_NF_MATCH_ECN is not set +# CONFIG_IP_NF_MATCH_DSCP is not set +# CONFIG_IP_NF_MATCH_AH_ESP is not set +# CONFIG_IP_NF_MATCH_LENGTH is not set +# CONFIG_IP_NF_MATCH_TTL is not set +# CONFIG_IP_NF_MATCH_TCPMSS is not set +# CONFIG_IP_NF_MATCH_HELPER is not set +# CONFIG_IP_NF_MATCH_STATE is not set +# CONFIG_IP_NF_MATCH_CONNTRACK is not set +# CONFIG_IP_NF_MATCH_UNCLEAN is not set +# CONFIG_IP_NF_MATCH_OWNER is not set +# CONFIG_IP_NF_FILTER is not set +# CONFIG_IP_NF_NAT is not set +# CONFIG_IP_NF_MANGLE is not set +# CONFIG_IP_NF_TARGET_LOG is not set +# CONFIG_IP_NF_TARGET_ULOG is not set +# CONFIG_IP_NF_TARGET_TCPMSS is not set +# CONFIG_IP_NF_ARPTABLES is not set +# CONFIG_IP_NF_COMPAT_IPCHAINS is not set +# CONFIG_IP_NF_COMPAT_IPFWADM is not set + +# +# IP: Virtual Server Configuration +# +# CONFIG_IP_VS is not set +# CONFIG_IPV6 is not set +# CONFIG_KHTTPD is not set + +# +# SCTP Configuration (EXPERIMENTAL) +# +CONFIG_IPV6_SCTP__=y +# CONFIG_IP_SCTP 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_DEV_APPLETALK 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 testing +# +# CONFIG_NET_PKTGEN is not set + +# +# Telephony Support +# +# CONFIG_PHONE is not set +# CONFIG_PHONE_IXJ is not set +# CONFIG_PHONE_IXJ_PCMCIA is not set + +# +# ATA/IDE/MFM/RLL support +# +CONFIG_IDE=y + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=y +CONFIG_BLK_DEV_HD_IDE=y +CONFIG_BLK_DEV_HD=y +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_IDEDISK_MULTI_MODE is not set +# CONFIG_IDEDISK_STROKE is not set +# CONFIG_BLK_DEV_IDECS is not set +# CONFIG_BLK_DEV_IDECD is not set +# CONFIG_BLK_DEV_IDETAPE is not set +# CONFIG_BLK_DEV_IDEFLOPPY is not set +CONFIG_BLK_DEV_IDESCSI=m +# CONFIG_IDE_TASK_IOCTL is not set +# CONFIG_BLK_DEV_CMD640 is not set +# CONFIG_BLK_DEV_CMD640_ENHANCED is not set +# CONFIG_BLK_DEV_ISAPNP is not set +# CONFIG_BLK_DEV_IDEPCI is not set +# CONFIG_IDE_CHIPSETS is not set +CONFIG_IDEDMA_AUTO=y +# CONFIG_IDEDMA_IVB is not set +# CONFIG_DMA_NONPCI is not set +CONFIG_BLK_DEV_PDC202XX=y +CONFIG_BLK_DEV_IDE_MODES=y +# CONFIG_BLK_DEV_ATARAID is not set +# CONFIG_BLK_DEV_ATARAID_PDC is not set +# CONFIG_BLK_DEV_ATARAID_HPT is not set +# CONFIG_BLK_DEV_ATARAID_SII is not set + +# +# SCSI support +# +CONFIG_SCSI=m +CONFIG_BLK_DEV_SD=m +CONFIG_SD_EXTRA_DEVS=10 +# CONFIG_CHR_DEV_ST is not set +# CONFIG_CHR_DEV_OSST is not set +# CONFIG_BLK_DEV_SR is not set +# CONFIG_CHR_DEV_SG is not set +# CONFIG_SCSI_DEBUG_QUEUES is not set +CONFIG_SCSI_MULTI_LUN=y +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set + +# +# SCSI low-level drivers +# +# CONFIG_BLK_DEV_3W_XXXX_RAID is not set +# CONFIG_SCSI_7000FASST is not set +# CONFIG_SCSI_ACARD is not set +# CONFIG_SCSI_AHA152X is not set +# CONFIG_SCSI_AHA1542 is not set +# CONFIG_SCSI_AHA1740 is not set +# CONFIG_SCSI_AACRAID is not set +# CONFIG_SCSI_AIC7XXX is not set +# CONFIG_SCSI_AIC79XX is not set +# CONFIG_SCSI_AIC7XXX_OLD is not set +# CONFIG_SCSI_DPT_I2O is not set +# CONFIG_SCSI_ADVANSYS is not set +# CONFIG_SCSI_IN2000 is not set +# CONFIG_SCSI_AM53C974 is not set +# CONFIG_SCSI_MEGARAID is not set +# CONFIG_SCSI_MEGARAID2 is not set +# CONFIG_SCSI_BUSLOGIC is not set +# CONFIG_SCSI_CPQFCTS is not set +# CONFIG_SCSI_DMX3191D is not set +# CONFIG_SCSI_DTC3280 is not set +# CONFIG_SCSI_EATA is not set +# CONFIG_SCSI_EATA_DMA is not set +# CONFIG_SCSI_EATA_PIO is not set +# CONFIG_SCSI_FUTURE_DOMAIN is not set +# CONFIG_SCSI_GDTH is not set +# CONFIG_SCSI_GENERIC_NCR5380 is not set +# CONFIG_SCSI_IPS is not set +# CONFIG_SCSI_INITIO is not set +# CONFIG_SCSI_INIA100 is not set +# CONFIG_SCSI_PPA is not set +# CONFIG_SCSI_IMM is not set +# CONFIG_SCSI_NCR53C406A is not set +# CONFIG_SCSI_NCR53C7xx is not set +# CONFIG_SCSI_SYM53C8XX_2 is not set +# CONFIG_SCSI_NCR53C8XX is not set +CONFIG_SCSI_SYM53C8XX=m +CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=4 +CONFIG_SCSI_NCR53C8XX_MAX_TAGS=32 +CONFIG_SCSI_NCR53C8XX_SYNC=20 +# CONFIG_SCSI_NCR53C8XX_PROFILE is not set +# CONFIG_SCSI_NCR53C8XX_IOMAPPED is not set +# CONFIG_SCSI_NCR53C8XX_PQS_PDS is not set +# CONFIG_SCSI_NCR53C8XX_SYMBIOS_COMPAT is not set +# CONFIG_SCSI_PAS16 is not set +# CONFIG_SCSI_PCI2000 is not set +# CONFIG_SCSI_PCI2220I is not set +# CONFIG_SCSI_PSI240I is not set +# CONFIG_SCSI_QLOGIC_FAS is not set +# CONFIG_SCSI_QLOGIC_ISP is not set +# CONFIG_SCSI_QLOGIC_FC is not set +# CONFIG_SCSI_QLOGIC_1280 is not set +# CONFIG_SCSI_SEAGATE is not set +# CONFIG_SCSI_SIM710 is not set +# CONFIG_SCSI_SYM53C416 is not set +# CONFIG_SCSI_DC390T is not set +# CONFIG_SCSI_T128 is not set +# CONFIG_SCSI_U14_34F is not set +# CONFIG_SCSI_ULTRASTOR is not set +# CONFIG_SCSI_NSP32 is not set +# CONFIG_SCSI_DEBUG is not set + +# +# Fusion MPT device support +# +# CONFIG_FUSION is not set +# CONFIG_FUSION_BOOT is not set +# CONFIG_FUSION_ISENSE is not set +# CONFIG_FUSION_CTL is not set +# CONFIG_FUSION_LAN is not set + +# +# IEEE 1394 (FireWire) support (EXPERIMENTAL) +# +# 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 + +# +# 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_ETHERTAP is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_SUNLANCE is not set +# CONFIG_HAPPYMEAL 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_AMD8111_ETH is not set +# CONFIG_ADAPTEC_STARFIRE is not set +# CONFIG_AC3200 is not set +# CONFIG_APRICOT is not set +# CONFIG_B44 is not set +# CONFIG_CS89x0 is not set +# CONFIG_TULIP is not set +# CONFIG_DE4X5 is not set +# CONFIG_DGRS is not set +CONFIG_DM9102=y +# CONFIG_EEPRO100 is not set +# CONFIG_EEPRO100_PIO is not set +# CONFIG_E100 is not set +# CONFIG_LNE390 is not set +# CONFIG_FEALNX 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_8139CP is not set +# CONFIG_8139TOO is not set +# CONFIG_8139TOO_PIO is not set +# CONFIG_8139TOO_TUNE_TWISTER is not set +# CONFIG_8139TOO_8129 is not set +# CONFIG_8139_OLD_RX_RESET is not set +# CONFIG_SIS900 is not set +# CONFIG_EPIC100 is not set +# CONFIG_SUNDANCE is not set +# CONFIG_SUNDANCE_MMIO is not set +# CONFIG_TLAN is not set +# CONFIG_VIA_RHINE is not set +# CONFIG_VIA_RHINE_MMIO is not set +# CONFIG_WINBOND_840 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=m +# CONFIG_PPP_MULTILINK is not set +# CONFIG_PPP_FILTER is not set +CONFIG_PPP_ASYNC=m +# CONFIG_PPP_SYNC_TTY is not set +# CONFIG_PPP_DEFLATE is not set +# CONFIG_PPP_BSDCOMP is not set +# CONFIG_PPPOE is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +CONFIG_NET_RADIO=y +CONFIG_STRIP=m +# 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_AIRO is not set +# CONFIG_HERMES is not set +# CONFIG_PLX_HERMES is not set +# CONFIG_TMD_HERMES is not set +# CONFIG_PCI_HERMES is not set +CONFIG_NET_WIRELESS=y + +# +# 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 + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Old CD-ROM drivers (not SCSI, not IDE) +# +# CONFIG_CD_NO_IDESCSI is not set + +# +# Input core support +# +CONFIG_INPUT=m +CONFIG_INPUT_KEYBDEV=m +CONFIG_INPUT_MOUSEDEV=m +CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 +CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 +# CONFIG_INPUT_JOYDEV is not set +# CONFIG_INPUT_EVDEV is not set + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_SERIAL=y +CONFIG_SERIAL_CONSOLE=y +CONFIG_SERIAL_EXTENDED=y +CONFIG_SERIAL_MANY_PORTS=y +CONFIG_SERIAL_SHARE_IRQ=y +# CONFIG_SERIAL_DETECT_IRQ is not set +# CONFIG_SERIAL_MULTIPORT is not set +# CONFIG_HUB6 is not set +# CONFIG_SERIAL_NONSTANDARD is not set +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=256 +# CONFIG_PRINTER is not set +# CONFIG_PPDEV is not set +# CONFIG_TIPAR is not set + +# +# 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 +# CONFIG_MK712_MOUSE is not set + +# +# Joysticks +# +# CONFIG_INPUT_GAMEPORT is not set +# CONFIG_INPUT_NS558 is not set +# CONFIG_INPUT_LIGHTNING is not set +# CONFIG_INPUT_PCIGAME is not set +# CONFIG_INPUT_CS461X is not set +# CONFIG_INPUT_EMU10K1 is not set +# CONFIG_INPUT_SERIO is not set +# CONFIG_INPUT_SERPORT is not set +# CONFIG_INPUT_ANALOG is not set +# CONFIG_INPUT_A3D is not set +# CONFIG_INPUT_ADI is not set +# CONFIG_INPUT_COBRA is not set +# CONFIG_INPUT_GF2K is not set +# CONFIG_INPUT_GRIP is not set +# CONFIG_INPUT_INTERACT is not set +# CONFIG_INPUT_TMDC is not set +# CONFIG_INPUT_SIDEWINDER is not set +# CONFIG_INPUT_IFORCE_USB is not set +# CONFIG_INPUT_IFORCE_232 is not set +# CONFIG_INPUT_WARRIOR is not set +# CONFIG_INPUT_MAGELLAN is not set +# CONFIG_INPUT_SPACEORB is not set +# CONFIG_INPUT_SPACEBALL is not set +# CONFIG_INPUT_STINGER is not set +# CONFIG_INPUT_DB9 is not set +# CONFIG_INPUT_GAMECON is not set +# CONFIG_INPUT_TURBOGRAFX is not set +# CONFIG_QIC02_TAPE is not set +# CONFIG_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=y +# CONFIG_WATCHDOG_NOWAYOUT is not set +# CONFIG_ACQUIRE_WDT is not set +# CONFIG_ADVANTECH_WDT is not set +# CONFIG_ALIM1535_WDT is not set +# CONFIG_ALIM7101_WDT is not set +# CONFIG_SC520_WDT is not set +CONFIG_TS486_WDT=y +# CONFIG_PCWATCHDOG is not set +# CONFIG_EUROTECH_WDT is not set +# CONFIG_IB700_WDT is not set +# CONFIG_WAFER_WDT is not set +# CONFIG_I810_TCO is not set +# CONFIG_MIXCOMWD is not set +# CONFIG_60XX_WDT is not set +# CONFIG_SC1200_WDT is not set +# CONFIG_SCx200_WDT is not set +# CONFIG_SOFT_WATCHDOG is not set +# CONFIG_W83877F_WDT is not set +# CONFIG_WDT is not set +# CONFIG_WDTPCI is not set +# CONFIG_MACHZ_WDT is not set +# CONFIG_AMD7XX_TCO is not set +# CONFIG_SCx200_GPIO is not set +# CONFIG_AMD_RNG is not set +# CONFIG_INTEL_RNG is not set +# CONFIG_HW_RANDOM is not set +# CONFIG_AMD_PM768 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 +# CONFIG_SONYPI is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set + +# +# Direct Rendering Manager (XFree86 DRI support) +# +# CONFIG_DRM is not set +# CONFIG_MWAVE is not set +CONFIG_TSA2D=m +CONFIG_TS9700=m +CONFIG_TSKEYPAD=m + +# +# Multimedia devices +# +CONFIG_VIDEO_DEV=m + +# +# Video For Linux +# +CONFIG_VIDEO_PROC_FS=y +# CONFIG_I2C_PARPORT is not set +# CONFIG_VIDEO_BT848 is not set +# CONFIG_VIDEO_PMS is not set +# CONFIG_VIDEO_BWQCAM is not set +# CONFIG_VIDEO_CQCAM is not set +# CONFIG_VIDEO_CPIA is not set +# CONFIG_VIDEO_SAA5249 is not set +# CONFIG_TUNER_3036 is not set +# CONFIG_VIDEO_STRADIS is not set +# CONFIG_VIDEO_ZORAN is not set +# CONFIG_VIDEO_ZORAN_BUZ is not set +# CONFIG_VIDEO_ZORAN_DC10 is not set +# CONFIG_VIDEO_ZORAN_LML33 is not set +# CONFIG_VIDEO_ZR36120 is not set +# CONFIG_VIDEO_MEYE is not set + +# +# Radio Adapters +# +# CONFIG_RADIO_CADET is not set +# CONFIG_RADIO_RTRACK is not set +# CONFIG_RADIO_RTRACK2 is not set +# CONFIG_RADIO_AZTECH is not set +# CONFIG_RADIO_GEMTEK is not set +# CONFIG_RADIO_GEMTEK_PCI is not set +# CONFIG_RADIO_MAXIRADIO is not set +# CONFIG_RADIO_MAESTRO is not set +# CONFIG_RADIO_MIROPCM20 is not set +# CONFIG_RADIO_MIROPCM20_RDS is not set +# CONFIG_RADIO_SF16FMI is not set +# CONFIG_RADIO_SF16FMR2 is not set +# CONFIG_RADIO_TERRATEC is not set +# CONFIG_RADIO_TRUST is not set +# CONFIG_RADIO_TYPHOON is not set +# CONFIG_RADIO_ZOLTRIX is not set + +# +# File systems +# +# CONFIG_QUOTA is not set +# CONFIG_QFMT_V2 is not set +# CONFIG_AUTOFS_FS is not set +CONFIG_AUTOFS4_FS=y +CONFIG_REISERFS_FS=m +# 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_HFSPLUS_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=y +CONFIG_JBD=y +# CONFIG_JBD_DEBUG is not set +CONFIG_FAT_FS=m +CONFIG_MSDOS_FS=m +CONFIG_UMSDOS_FS=m +# 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_TMPFS=y +CONFIG_RAMFS=y +CONFIG_ISO9660_FS=m +# 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 +CONFIG_PROC_FS=y +CONFIG_DEVFS_FS=y +CONFIG_DEVFS_MOUNT=y +# 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 is not set +CONFIG_EXT2_FS=y +# CONFIG_SYSV_FS is not set +# CONFIG_UDF_FS is not set +# CONFIG_UDF_RW is not set +# CONFIG_UFS_FS is not set +# CONFIG_UFS_FS_WRITE is not set + +# +# Network File Systems +# +# CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +# CONFIG_NFS_DIRECTIO is not set +CONFIG_ROOT_NFS=y +CONFIG_NFSD=y +CONFIG_NFSD_V3=y +# CONFIG_NFSD_TCP is not set +CONFIG_SUNRPC=y +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +CONFIG_SMB_FS=m +# CONFIG_SMB_NLS_DEFAULT is not set +# CONFIG_NCP_FS is not set +# CONFIG_NCPFS_PACKET_SIGNING is not set +# CONFIG_NCPFS_IOCTL_LOCKING is not set +# CONFIG_NCPFS_STRONG is not set +# CONFIG_NCPFS_NFS_NS is not set +# CONFIG_NCPFS_OS2_NS is not set +# CONFIG_NCPFS_SMALLDOS is not set +# CONFIG_NCPFS_NLS is not set +# CONFIG_NCPFS_EXTRAS is not set +# CONFIG_ZISOFS_FS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y +CONFIG_SMB_NLS=y +CONFIG_NLS=y + +# +# Native Language Support +# +CONFIG_NLS_DEFAULT="iso8859-1" +# CONFIG_NLS_CODEPAGE_437 is not set +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ISO8859_1 is not set +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_UTF8 is not set + +# +# Console drivers +# +CONFIG_VGA_CONSOLE=y +# CONFIG_VIDEO_SELECT is not set +# CONFIG_MDA_CONSOLE is not set + +# +# Frame-buffer support +# +# CONFIG_FB is not set + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# USB support +# +CONFIG_USB=m +# CONFIG_USB_DEBUG is not set +CONFIG_USB_DEVICEFS=y +# CONFIG_USB_BANDWIDTH is not set +# CONFIG_USB_EHCI_HCD is not set +# CONFIG_USB_UHCI is not set +# CONFIG_USB_UHCI_ALT is not set +CONFIG_USB_OHCI=m +# CONFIG_USB_SL811HS_ALT is not set +# CONFIG_USB_SL811HS is not set +# CONFIG_USB_AUDIO is not set +# CONFIG_USB_EMI26 is not set +CONFIG_USB_BLUETOOTH=m +# CONFIG_USB_MIDI is not set +CONFIG_USB_STORAGE=m +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_DPCM is not set +# CONFIG_USB_STORAGE_HP8200e is not set +CONFIG_USB_STORAGE_SDDR09=y +# CONFIG_USB_STORAGE_SDDR55 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +CONFIG_USB_ACM=m +CONFIG_USB_PRINTER=m +CONFIG_USB_HID=m +# CONFIG_USB_HIDINPUT is not set +# CONFIG_USB_HIDDEV is not set +CONFIG_USB_KBD=m +CONFIG_USB_MOUSE=m +# CONFIG_USB_AIPTEK is not set +# CONFIG_USB_WACOM is not set +# CONFIG_USB_KBTAB is not set +# CONFIG_USB_POWERMATE is not set +CONFIG_USB_DC2XX=m +# CONFIG_USB_MDC800 is not set +CONFIG_USB_SCANNER=m +CONFIG_USB_MICROTEK=m +CONFIG_USB_HPUSBSCSI=m +CONFIG_USB_IBMCAM=m +# CONFIG_USB_KONICAWC is not set +CONFIG_USB_OV511=m +CONFIG_USB_PWC=m +CONFIG_USB_SE401=m +CONFIG_USB_STV680=m +# CONFIG_USB_W9968CF is not set +CONFIG_USB_VICAM=m +CONFIG_USB_DSBR=m +CONFIG_USB_DABUSB=m +# CONFIG_USB_PEGASUS is not set +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_KAWETH is not set +# CONFIG_USB_CATC is not set +# CONFIG_USB_AX8817X is not set +# CONFIG_USB_CDCETHER is not set +# CONFIG_USB_USBNET is not set +# CONFIG_USB_USS720 is not set + +# +# USB Serial Converter support +# +CONFIG_USB_SERIAL=m +# CONFIG_USB_SERIAL_DEBUG is not set +CONFIG_USB_SERIAL_GENERIC=y +# CONFIG_USB_SERIAL_BELKIN is not set +# CONFIG_USB_SERIAL_WHITEHEAT is not set +CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m +# CONFIG_USB_SERIAL_EMPEG is not set +# CONFIG_USB_SERIAL_FTDI_SIO is not set +CONFIG_USB_SERIAL_VISOR=m +CONFIG_USB_SERIAL_IPAQ=m +# CONFIG_USB_SERIAL_IR is not set +# CONFIG_USB_SERIAL_EDGEPORT is not set +# CONFIG_USB_SERIAL_EDGEPORT_TI is not set +# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set +# CONFIG_USB_SERIAL_KEYSPAN is not set +# CONFIG_USB_SERIAL_MCT_U232 is not set +# CONFIG_USB_SERIAL_KLSI is not set +# CONFIG_USB_SERIAL_KOBIL_SCT is not set +# CONFIG_USB_SERIAL_PL2303 is not set +# CONFIG_USB_SERIAL_CYBERJACK is not set +# CONFIG_USB_SERIAL_XIRCOM is not set +# CONFIG_USB_SERIAL_OMNINET is not set +# CONFIG_USB_RIO500 is not set +# CONFIG_USB_AUERSWALD is not set +# CONFIG_USB_TIGL is not set +# CONFIG_USB_BRLVGER is not set +# CONFIG_USB_LCD is not set + +# +# Support for USB gadgets +# +# CONFIG_USB_GADGET is not set + +# +# Bluetooth support +# +# CONFIG_BLUEZ is not set + +# +# Kernel hacking +# +# CONFIG_DEBUG_KERNEL is not set +CONFIG_LOG_BUF_SHIFT=0 + +# +# Cryptographic options +# +# CONFIG_CRYPTO is not set + +# +# Library routines +# +# CONFIG_CRC32 is not set +# CONFIG_ZLIB_INFLATE is not set +# CONFIG_ZLIB_DEFLATE is not set +# CONFIG_FW_LOADER is not set diff -Naur linux-2.4.23/arch/i386/config.in linux-2.4.23_TS_2_5/arch/i386/config.in --- linux-2.4.23/arch/i386/config.in Fri Nov 28 11:26:19 2003 +++ linux-2.4.23_TS_2_5/arch/i386/config.in Tue Dec 2 18:04:16 2003 @@ -47,7 +47,6 @@ # # Define implied options from the CPU selection here # - if [ "$CONFIG_M386" = "y" ]; then define_bool CONFIG_X86_CMPXCHG n define_bool CONFIG_X86_XADD n @@ -193,6 +192,22 @@ fi bool 'Machine Check Exception' CONFIG_X86_MCE + +bool 'Technologic Systems SBC support' TSYSTEMS + +if [ "$CONFIG_M386" = "y" ]; then + if [ "$TSYSTEMS" = "y" ]; then + define_bool CONFIG_TS_M386 y + fi +fi + +if [ "$CONFIG_M486" = "y" ]; then + if [ "$TSYSTEMS" = "y" ]; then + define_bool CONFIG_TS_M486 y + fi +fi + + tristate 'Toshiba Laptop support' CONFIG_TOSHIBA tristate 'Dell laptop support' CONFIG_I8K diff -Naur linux-2.4.23/arch/i386/defconfig linux-2.4.23_TS_2_5/arch/i386/defconfig --- linux-2.4.23/arch/i386/defconfig Fri Nov 28 11:26:19 2003 +++ linux-2.4.23_TS_2_5/arch/i386/defconfig Wed Dec 3 11:34:35 2003 @@ -51,6 +51,7 @@ CONFIG_X86_PGE=y CONFIG_X86_USE_PPRO_CHECKSUM=y CONFIG_X86_MCE=y +# TSYSTEMS is not set # CONFIG_TOSHIBA is not set # CONFIG_I8K is not set # CONFIG_MICROCODE is not set @@ -555,6 +556,9 @@ # CONFIG_SERIAL_NONSTANDARD is not set CONFIG_UNIX98_PTYS=y CONFIG_UNIX98_PTY_COUNT=256 +# CONFIG_TSA2D is not set +# CONFIG_TS9700 is not set +# CONFIG_TSKEYPAD is not set # # I2C support diff -Naur linux-2.4.23/arch/i386/kernel/process.c linux-2.4.23_TS_2_5/arch/i386/kernel/process.c --- linux-2.4.23/arch/i386/kernel/process.c Fri Nov 28 11:26:19 2003 +++ linux-2.4.23_TS_2_5/arch/i386/kernel/process.c Tue Dec 2 18:04:20 2003 @@ -282,6 +282,16 @@ { unsigned long flags; +#ifdef CONFIG_TS_M386 +// 20010219 mtj this enables the watchdog on the intel 386EX, the watchdog +// output is tied to the PLD and causes the system reset line to assert. + outw( 0x0000, 0xF4C0 ); + outw( 0x0020, 0xF4C2 ); + outw( 0xF01E, 0xF4C8 ); + outw( 0x0FE1, 0xF4C8 ); +#endif + + cli(); /* Write zero to CMOS register number 0x0f, which the BIOS POST diff -Naur linux-2.4.23/drivers/Makefile linux-2.4.23_TS_2_5/drivers/Makefile --- linux-2.4.23/drivers/Makefile Fri Nov 28 11:26:19 2003 +++ linux-2.4.23_TS_2_5/drivers/Makefile Tue Dec 2 18:04:22 2003 @@ -10,7 +10,7 @@ message/i2o message/fusion scsi md ieee1394 pnp isdn atm \ fc4 net/hamradio i2c acpi bluetooth usb/gadget -subdir-y := parport char block net sound misc media cdrom hotplug +subdir-y := parport misc block net sound char media cdrom hotplug subdir-m := $(subdir-y) diff -Naur linux-2.4.23/drivers/block/Config.in linux-2.4.23_TS_2_5/drivers/block/Config.in --- linux-2.4.23/drivers/block/Config.in Fri Nov 28 11:26:19 2003 +++ linux-2.4.23_TS_2_5/drivers/block/Config.in Tue Dec 2 18:04:23 2003 @@ -51,4 +51,6 @@ bool 'Per partition statistics in /proc/partitions' CONFIG_BLK_STATS +dep_tristate 'M-Systems DOC device support' CONFIG_BLK_DEV_MSYS_DOC m + endmenu diff -Naur linux-2.4.23/drivers/block/Makefile linux-2.4.23_TS_2_5/drivers/block/Makefile --- linux-2.4.23/drivers/block/Makefile Fri Jun 13 07:51:32 2003 +++ linux-2.4.23_TS_2_5/drivers/block/Makefile Tue Dec 2 18:04:23 2003 @@ -34,4 +34,7 @@ subdir-$(CONFIG_PARIDE) += paride +obj-$(CONFIG_BLK_DEV_MSYS_DOC) += doc/doc.o +subdir-$(CONFIG_BLK_DEV_MSYS_DOC) += doc + include $(TOPDIR)/Rules.make diff -Naur linux-2.4.23/drivers/block/doc/Makefile linux-2.4.23_TS_2_5/drivers/block/doc/Makefile --- linux-2.4.23/drivers/block/doc/Makefile Wed Dec 31 17:00:00 1969 +++ linux-2.4.23_TS_2_5/drivers/block/doc/Makefile Tue Dec 2 18:04:25 2003 @@ -0,0 +1,19 @@ +# Makefile for a block device driver +# for the DiskOnChip flash module from M-Systems + +ifndef TOPDIR +TOPDIR = ../../../ +endif + +O_TARGET := doc.o +list-multi := doc.o +obj-$(CONFIG_BLK_DEV_MSYS_DOC) += doc.o +doc-objs := fldrvlnx.o libosak + +include $(TOPDIR)/Rules.make + +doc.o: $(doc-objs) + $(LD) -r -o $@ $(doc-objs) + +fldrvlnx.c: fldrvlnx.h + diff -Naur linux-2.4.23/drivers/block/doc/fldrvlnx.c linux-2.4.23_TS_2_5/drivers/block/doc/fldrvlnx.c --- linux-2.4.23/drivers/block/doc/fldrvlnx.c Wed Dec 31 17:00:00 1969 +++ linux-2.4.23_TS_2_5/drivers/block/doc/fldrvlnx.c Tue Aug 10 15:17:44 2004 @@ -0,0 +1,1947 @@ +/* + * $Log: fldrvlnx.c,v $ + * Revision 1.2 2004/08/10 22:17:44 eddie + * This library is required to compile the disk on chip module. + * + * + */ + +/***********************************************************************************/ +/* M-Systems Confidential */ +/* Copyright (C) M-Systems Flash Disk Pioneers Ltd. 1995-2002 */ +/* All Rights Reserved */ +/***********************************************************************************/ +/* NOTICE OF M-SYSTEMS OEM */ +/* SOFTWARE LICENSE AGREEMENT */ +/* */ +/* THE USE OF THIS SOFTWARE IS GOVERNED BY A SEPARATE LICENSE */ +/* AGREEMENT BETWEEN THE OEM AND M-SYSTEMS. REFER TO THAT AGREEMENT */ +/* FOR THE SPECIFIC TERMS AND CONDITIONS OF USE, */ +/* OR CONTACT M-SYSTEMS FOR LICENSE ASSISTANCE: */ +/* E-MAIL = info@m-sys.com */ +/***********************************************************************************/ + +/* get the kernel version */ +#include +/* older kernels didn't define this */ +#ifndef KERNEL_VERSION + #define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) +#endif + +/* not supported kernels */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0) +# error "Linux Kernel Version 2.5.0 and later not supported" +#else +# if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) +# else +# if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,0) +# error "Linux Kernel Version 2.3.0 not supported" +# else +# if LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,0) +# else +# if LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,0) +# error "Linux Kernel Version 2.1.0 not supported" +# else +# if LINUX_VERSION_CODE >= KERNEL_VERSION(2,0,0) +# else +# error "Linux Kernel Version less that 2.0.0 not supported" +# endif +# endif +# endif +# endif +# endif +#endif + +#ifndef MODVERSIONS +# define MODVERSIONS +# include +#endif +#include /* must be included after */ + +short GetFlDebugParam(void); +#define DebugPrintk(fmt,args...) if(GetFlDebugParam()){printk(KERN_DEBUG"fl: "fmt,## args);} + +#include "fldrvlnx.h" + +#include /* isa_write...() */ +#include /* request_mem_reqion() */ +#include /* udelay() */ + +#ifdef DEEPDEBUG + #define LOG_DELAY flsleep(1) +#else + #define LOG_DELAY +#endif + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + +#include /* __initdata */ +#include +#include /* printk() */ +#include /* kmalloc() */ +#include +#include /* everything... */ +#include /* error codes */ +#include +#include /* O_ACCMODE */ +#include /* HDIO_GETGEO */ +#include /* devfs_handle_t */ +#include /* lock_kernel() */ +#include /* create_proc_read_entry() */ +#include /* cli(), *_flags */ +#include /* verify_area() */ + +#define grab_io_request_lock(flags) spin_lock_irqsave(&io_request_lock,flags) +#define rlse_io_request_lock(flags) spin_unlock_irqrestore(&io_request_lock,flags) +static devfs_handle_t devfs_handle = NULL; + +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,0) + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +extern spinlock_t io_request_lock; +#define grab_io_request_lock(flags) spin_lock_irqsave(&io_request_lock,flags) +#define rlse_io_request_lock(flags) spin_unlock_irqrestore(&io_request_lock,flags) + +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,0,0) + +#include +#include +#include +#include +#include /* kmalloc() */ +#include /* struct hd_geometry */ +#include +#include +#include +//extern unsigned long loops_per_sec; /* needed by macro udelay() */ + +//#include /* macro udelay() */ +#include /* memcpy_*io() */ +#ifndef __KERNEL_SYSCALLS__ +/* need this to get declaration of kernel_thread() */ +#define __KERNEL_SYSCALLS__ +#endif +#include /* kernel_thread() */ +#include /* jiffies */ + +typedef struct spinlock +{ + int lock; +}spinlock_t; + +#define test_and_set_bit(bnr,lp) set_bit(bnr,lp) +#define test_and_clear_bit(bnr,lp) clear_bit(bnr,lp) +#define set_current_state(state_value) do {current->state = state_value; } while (0) +#define grab_io_request_lock(flags) do { save_flags(flags); cli(); } while (0) + /* spin_lock_irqsave(&io_request_lock,*(flgptr)) */ +#define rlse_io_request_lock(flags) do { restore_flags(flags); } while (0) + /* spin_unlock_irqsave(&io_request_lock,*(flgptr)) */ +#define lock_kernel() /* ToDo */ +#define unlock_kernel() /* ToDo */ +#define sigmask(signum) (1UL << ((signum) - 1)) + +/* Kernel threads. */ +#define exit_fs(foo) +#define exit_files(foo) + +static void siginitsetinv(sigset_t *set, unsigned long mask); +static void sigemptyset(sigset_t *set); +static inline unsigned long copy_to_user(void *to,const void *from, unsigned long n); +static void spin_lock_init(spinlock_t *splp); +static void spin_lock(spinlock_t *splp); +static void spin_unlock(spinlock_t *splp); +static inline unsigned long copy_to_user(void *to,const void *from, unsigned long n); + +#endif + +/* definitions for blk.h */ + +#include +int flMajor; /* our major device number */ +#define MAJOR_NR flMajor +#define DEVICE_NAME "fl" +#define DEVICE_OFF(d) +#define DEVICE_REQUEST fl_request_fn1 +#define DEVICE_NR(device) (MINOR(device)>>FL_SHIFT) +#define DEVICE_NO_RANDOM +#include +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,3,0) +#include +#endif + +/* defines after blk.h - need struct request from blkdev.h */ +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,1,0) +static int end_that_request_first(struct request *req,int uptodate,char *devname); +static void end_that_request_last(struct request *req); +#endif + +/* end of blk.h definitions */ + +/* private includes for M-Systems OSAK */ +#include "tffs2lnx.h" + +/* module parameters */ + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,0) +MODULE_AUTHOR("yurid@msys.com"); + +MODULE_PARM(major, "i"); /* set to zero to get dynamic major */ +MODULE_PARM_DESC(major, "Major device number to use."); + +MODULE_PARM(rahead, "i"); +MODULE_PARM_DESC(rahead, "Set readahead flag for driver."); + +MODULE_PARM(hardsect, "1-4i"); /* NB this should be the same as MAX_DEVICES */ +MODULE_PARM_DESC(hardsect, "Set hardsect parameter for each DOC device."); + +MODULE_PARM(blksize, "1-4i"); /* NB this should be the same as MAX_DEVICES */ +MODULE_PARM_DESC(blksize, "Set blksize parameter for each DOC device."); + +MODULE_PARM(prio,"i"); + +MODULE_PARM(fl_debug,"h"); +MODULE_PARM(fl_winl,"l"); +MODULE_PARM(fl_winh,"l"); +MODULE_PARM(fl_part_prot,"h"); +MODULE_PARM(fl_key_prot,"s"); + +MODULE_PARM(fl_nftl_cache,"h"); +MODULE_PARM(fl_is_ram_check,"h"); +MODULE_PARM(fl_8bit_access,"h"); +MODULE_PARM(fl_mtd_bus_access_type,"l"); +MODULE_PARM(fl_verify_write_bdtl,"l"); +MODULE_PARM(fl_verify_write_binary,"l"); +MODULE_PARM(fl_verify_write_other,"l"); +MODULE_PARM(fl_sectors_verified_per_folding,"l"); + +#else +#warning No parameters yet. +#endif + +/* these are used only during module initialization */ +#ifndef __initdata +# define __initdata +#endif + +static int __initdata major = FLASH_MAJOR; +static int __initdata rahead = 0; +static int __initdata hardsect[MAX_DEVICES]; +static int __initdata blksize[MAX_DEVICES]; +#ifdef DEEPDEBUG +static short __initdata fl_debug=1; +#else +static short __initdata fl_debug=0; +#endif +static unsigned long __initdata fl_winl=FL_DOC_PHYS_ADDR_LOW; +static unsigned long __initdata fl_winh=FL_DOC_PHYS_ADDR_HIGH; +static void * __initdata fl_virl=NULL; +static void * __initdata fl_virh=NULL; +static short __initdata fl_part_prot=MAX_DEVICES; +static char * __initdata fl_key_prot=NULL; +static short __initdata fl_nftl_cache=1; +static short __initdata fl_is_ram_check=0; +static short __initdata fl_8bit_access=1; +static unsigned long __initdata fl_mtd_bus_access_type=7; /* FL_BUS_HAS_8BIT_ACCESS|FL_BUS_HAS_16BIT_ACCESS|FL_BUS_HAS_32BIT_ACCESS|FL_NO_ADDR_SHIFT) */ +static unsigned long __initdata fl_verify_write_bdtl=0; +static unsigned long __initdata fl_verify_write_binary=0; +static unsigned long __initdata fl_verify_write_other=0; +static unsigned long __initdata fl_sectors_verified_per_folding=64; + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) +static int __initdata prio=-10; /* max -20 */ +#else +static int __initdata prio=30; /* max 40 */ +#endif + +#define FL_SHIFT 6 +#define MINOR_NR(r) (r<= KERNEL_VERSION(2,4,0) +static DECLARE_MUTEX_LOCKED(start_stop_sem); +#else +static struct semaphore start_stop_sem = MUTEX_LOCKED; +#endif + +#define SHUTDOWN_SIGS (sigmask(SIGKILL)|sigmask(SIGINT)|sigmask(SIGTERM)|sigmask(SIGQUIT)) + +static void fl_setsid(void) +{ + /* Simple setsid, used at start of kernel thread, + no error checks needed, or at least none made :). */ + current->leader = 1; + current->session = current->pgrp = current->pid; + current->tty = NULL; + current->tty_old_pgrp = 0; +} + +static spinlock_t o_c_lock; + +// private structure for driver +typedef struct Fl_Dev +{ + int volume; // DOC volume number + int size; // DOC volume size in XXX kb + int usage; + int heads; + int sectors; + int cylinders; + int read_only; + unsigned int requests; + unsigned int requests_Read; + unsigned int requests_Write; + + // Every once in a while the DOC wants to "think" for a while. We + // can't sleep while this is happening if we are in the ordinary + // request fn context. What we do instead is use the reqest fn to + // move the requests to a private, per device list, and schedule + // a kernel task (capable of sleeping when required) to complete + // the requests. +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + struct list_head queue_head; // private list for I/O requests +#else + struct request *queue; // Older kernels used singly linked list + struct request *revq; // reversed list, used to simplify transfer +#endif + struct semaphore *sem; + int terminating; +}FL_DEV; + +// Start of structures dynamically allocated with kmalloc() during init and +// (if a module) de-allocated with kfree() if unloaded. + +// per DEVICE structures +static FL_DEV*Fl_devices; // this is an array FL_Flash_Devices in length + +// per DEVICE*MINOR structures +static int*Fl_blksize_size; // used in global blksize_size array +static int*Fl_hardsect_size; // used in global hardsect_size array +static int*Fl_blk_size; // used in gendisk structure and global blk_size array + +static struct hd_struct *Fl_partitions; + +// End of dynamically allocated structures. + +// function declarations + +int fl_open(struct inode *inode, struct file *filp); +int fl_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg); +int fl_check_change(kdev_t i_rdev); +int fl_revalidate(kdev_t i_rdev); +int fl_init(void); +static void fl_geninit(struct gendisk *); + +// copies flioctl_t data into kernel +/* static char * fl_usr2kern(unsigned long); */ + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,0) +int fl_release(struct inode *inode, struct file *filp); +#else // > 2.1.0 +void fl_release(struct inode *inode, struct file *filp); +#endif // > 2.1.0 + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) +void fl_request_fn1(request_queue_t *q); +#else +void fl_request_fn1(void); +#endif // < 2.4.0 + +// driver globals +int flMajor; // our major device number +int Fl_read_ahead; // used in global read_ahead array + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + +static struct block_device_operations fl_fops = +{ + open: fl_open, // open + release: fl_release, // release + ioctl: fl_ioctl, // ioctl +}; + +static struct gendisk fl_gendisk = +{ + 0, // major Major number, assigned at runtime + DEVICE_NAME, // major_name Major name + FL_SHIFT, // minor_shift Bits to shift to get real from partition + MINOR_NR(1), // max_p Number of partitions per real + NULL, // hd struct + NULL, // block sizes + 0, // nr_real maximum number of real, assigned at runtime + NULL, // internal + NULL, // next linked list (not used for modules) + &fl_fops, + NULL, + NULL +}; + +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,0) + +static struct file_operations fl_fops = +{ + NULL, // lseek - default + block_read, // read - block dev read + block_write, // write - block dev write + NULL, // readdir - not here! + NULL, // select + fl_ioctl, // ioctl + NULL, // mmap + fl_open, // open + NULL, // flush + fl_release, // release + block_fsync, // fsync + NULL, // media change + fl_revalidate, // revalidate + NULL +}; + +static struct gendisk fl_gendisk = +{ + 0, // major Major number, assigned at runtime + DEVICE_NAME, // major_name Major name + FL_SHIFT, // minor_shift Bits to shift to get real from partition + MINOR_NR(1), // max_p Number of partitions per real + 0, // max_nr maximum number of real, assigned at runtime + fl_geninit, // init init function + NULL, // part hd struct (partition table), assigned at runtime + NULL, // sizes block sizes, assigned at runtime + 0, // nr_real number, assigned at runtime + NULL, // real_devices internal use + NULL // next linked list (not used for modules) +}; + +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,0,0) + +static struct file_operations fl_fops = +{ + NULL, // lseek - default + block_read, // read - block dev read + block_write, // write - block dev write + NULL, // readdir - not here! + NULL, // select + fl_ioctl, // ioctl + NULL, // mmap + fl_open, // open + fl_release, // release + block_fsync, // fsync + NULL, // media change + fl_revalidate // revalidate +}; + +static struct gendisk fl_gendisk = +{ + 0, // major Major number, assigned at runtime + DEVICE_NAME, // major_name Major name + FL_SHIFT, // minor_shift Bits to shift to get real from partition + MINOR_NR(1), // max_p Number of partitions per real + 0, // max_nr maximum number of real, assigned at runtime + fl_geninit, // init init function + NULL, // part hd struct (partition table), assigned at runtime + NULL, // sizes block sizes, assigned at runtime + 0, // nr_real number, assigned at runtime + NULL, // real_devices internal use + NULL // next linked list (not used for modules) +}; + +#else +#error "OS Not supported" +#endif + +/* __init ckmalloc() + * + * kmalloc and clear, only used during init + */ +#if defined(__init) +void * __init ckmalloc(int size, int mode) +#elif defined(__initfunc) +__initfunc( void * ckmalloc(int size, int mode)) +#else +void * ckmalloc(int size, int mode) +#endif +{ + void *ptr; + if ((ptr = kmalloc(size, mode))) + memset(ptr, 0, size); + return(ptr); +} + +/* IFF !NULL free and set to NULL */ +void lkfree(void **ptr) +{ + if(*ptr) + { + kfree(*ptr); + *ptr = NULL; + } +} + +int fl_open(struct inode *inode, struct file *filp) +{ + FL_DEV*dev; /* device information */ + int dev_nr; + + /* get the real device number */ + /* (device&0xff)>>6) */ + dev_nr = DEVICE_NR(inode->i_rdev); + + if (dev_nr >= fl_gendisk.nr_real) + { + return -ENODEV; + } + + if(FlGetProtection(dev_nr)) + { + if (filp->f_mode & 0x02) + { + return -EROFS; + } + } + + /* get pointer to device structure and increment use count */ + dev = Fl_devices + dev_nr; + + spin_lock(&o_c_lock); + dev->usage++; + MOD_INC_USE_COUNT; + spin_unlock(&o_c_lock); + return 0; /* success */ +} + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,0) +int +#else +void +#endif +fl_release(struct inode *inode, struct file *filp) +{ + FL_DEV *dev; // device information + int dev_nr; + + // get the real device number + dev_nr = DEVICE_NR(inode->i_rdev); + + if (dev_nr >= fl_gendisk.nr_real) + { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,0) + return -ENODEV; +#else + return; +#endif + } + + dev = Fl_devices + dev_nr; + + // lock and dec usage count + spin_lock(&o_c_lock); + dev->usage--; + // if there are no more open we want to ensure that we flush all blocks. + // sync_dev can cause sleep, so this should be _before_ MOD_DEC_USE_COUNT. + if (!dev->usage) + { + // flush it right now + sync_dev(inode->i_rdev); + invalidate_buffers(inode->i_rdev); + } + MOD_DEC_USE_COUNT; + spin_unlock(&o_c_lock); + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,0) + return (0); +#endif +} + +/* Derived from OSAK dosformt.c getDriveGeometry() */ +static void get_drive_geo(long capacity, struct hd_geometry *geo) +{ + unsigned long temp; + + geo->heads = 16; /* Max out number of heads */ + geo->cylinders=1024; + temp = geo->cylinders * geo->heads; /* Compute divisor for heads */ + geo->sectors = capacity / temp; /* Compute value for sectors per track */ + while (geo->sectors > 0x3f ){ /* While number of sectors too big */ + geo->heads *= 2; /* use one more head */ + temp = geo->cylinders * geo->heads; /* Recompute divisor for heads */ + geo->sectors = capacity / temp; /* Recompute sectors per track */ + } + if (capacity % temp) { /* If no remainder, done! */ + geo->sectors++; /* Else, increment number of sectors */ + temp = geo->cylinders * geo->sectors; /* Compute divisor for heads */ + geo->heads = capacity / temp; /* Compute value for heads */ + if (capacity % temp) { /* If no remainder, done! */ + geo->heads++; /* Else, increment number of heads */ + temp = geo->heads * geo->sectors; /* Compute divisor for cylinders */ + geo->cylinders = (unsigned long)(capacity / temp); /* Compute number of cylinders */ + } + } +/* + geo->heads = 16; + geo->cylinders = 1024; + temp = geo->cylinders * geo->heads; + geo->sectors = capacity / temp; + + if (capacity % temp) + { + geo->sectors++; + temp = geo->cylinders * geo->sectors; + geo->heads = capacity / temp; + if (capacity % temp) + { + geo->heads++; + temp = geo->heads * geo->sectors; + geo->cylinders = capacity / temp; + } + } +*/ +} + +/* The ioctl() implementation */ +int fl_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg) +{ + int size; + unsigned int dev_nr; + FL_DEV*device; + int res; + + dev_nr = DEVICE_NR(inode->i_rdev); + device = Fl_devices + dev_nr; + + /* verify we have sysadmin capabilities for certain ioctl calls */ + switch (cmd) + { + case FL_IOCTL_GET_INFO: + case FL_IOCTL_DEFRAGMENT: + case FL_IOCTL_WRITE_PROTECT: + case FL_IOCTL_MOUNT_VOLUME: + case FL_IOCTL_FORMAT_VOLUME: + case FL_IOCTL_BDK_OPERATION: + case FL_IOCTL_DELETE_SECTORS: + case FL_IOCTL_READ_SECTORS: + case FL_IOCTL_WRITE_SECTORS: + case FL_IOCTL_FORMAT_PHYSICAL_DRIVE: + case FL_IOCTL_FORMAT_LOGICAL_DRIVE: + case FL_IOCTL_BDTL_HW_PROTECTION: + case FL_IOCTL_BINARY_HW_PROTECTION: + case FL_IOCTL_OTP: + case FL_IOCTL_CUSTOMER_ID: + case FL_IOCTL_UNIQUE_ID: + case FL_IOCTL_NUMBER_OF_PARTITIONS: + case FL_IOCTL_INQUIRE_CAPABILITIES: + case FL_IOCTL_SET_ENVIRONMENT_VARIABLES: + case FL_IOCTL_PLACE_EXB_BY_BUFFER: + case FL_IOCTL_WRITE_IPL: + case FL_IOCTL_DEEP_POWER_DOWN_MODE: + case FL_IOCTL_EXTENDED_ENVIRONMENT_VARIABLES: + case FL_IOCTL_VERIFY_VOLUME: + case FL_IOCTL_SET_ACCESS_ROUTINE: + case FL_IOCTL_GET_ACCESS_ROUTINE: + case FL_IOCTL_EXTENDED_WRITE_IPL: + case FL_IOCTL_LNX: +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,0) + if (!capable(CAP_SYS_ADMIN)) + { + return -EACCES; + } +#endif + } + /* ioctl's that don't require libosak access */ + switch(cmd) + { + case BLKGETSIZE: + // Return the device size, expressed in sectors + if(!arg) + { + return -EINVAL; /* NULL pointer: not valid */ + } + if((res=verify_area(VERIFY_WRITE, (long *) arg, sizeof(long)))) + { + return res; + } + size = fl_gendisk.part[MINOR(inode->i_rdev)].nr_sects; + put_user(size, (long *) arg); + return 0; + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0) + case BLKRAGET: // return the readahead value + + if (!arg) + return -EINVAL; + + if ((res = verify_area(VERIFY_WRITE, (long *) arg, sizeof(long)))) + { + return res; + } + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,0) + /* QQQ no need for verify area? ask SL */ + put_user_ret(read_ahead[MAJOR(inode->i_rdev)], (long *) arg, -EFAULT); +#else + put_user(read_ahead[MAJOR(inode->i_rdev)], (long *) arg); +#endif + return 0; +#endif /* < 2.4.0 */ + + case HDIO_GETGEO: + { + struct hd_geometry *geo = (struct hd_geometry *) arg; + struct hd_geometry geometry; + + /* check arg */ + if (geo == NULL) + { + return -EINVAL; + } + if ((res = verify_area(VERIFY_WRITE, geo, sizeof(*geo)))) + { + return res; + } + size = device->size; + + memset(&geometry,0,sizeof(geometry)); + get_drive_geo(size, &geometry); + geometry.start = fl_gendisk.part[MINOR(inode->i_rdev)].start_sect; + + copy_to_user(geo, &geometry, sizeof(geometry)); + return 0; + } + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + // This is a list of "standard" ioctls. + // The ones that modify things are protected by a semaphore below. + case BLKROSET: + case BLKROGET: + // case BLKRASET: + case BLKRAGET: + // case BLKPG: + res = blk_ioctl(inode->i_rdev, cmd, arg); + return(res); + case BLKPG: // play with partitions + case BLKFLSBUF: // flush + // This will call the low-level block I/O functions which lock + // libosak access themselves, so we'd better not do it here. + res = blk_ioctl(inode->i_rdev, cmd, arg); + return(res); +#elif LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0) + + case BLKFLSBUF: // flush + fsync_dev(inode->i_rdev); + invalidate_buffers(inode->i_rdev); + break; + + // The default RO operations + RO_IOCTLS(inode->i_rdev, arg); +#endif // >= 2.4.0 + + case BLKRRPART: // re-read partition table + // This will call the low-level block I/O functions which lock + // libosak access themselves, so we'd better not do it here. + res = fl_revalidate(inode->i_rdev); + return(res); + } + + // ioctl's that require libosak access (we are modifying something) + res = 0; + switch(cmd) + { + /* private stuff */ + case FL_IOCTL_GET_INFO: + case FL_IOCTL_DEFRAGMENT: + case FL_IOCTL_WRITE_PROTECT: + case FL_IOCTL_MOUNT_VOLUME: + case FL_IOCTL_FORMAT_VOLUME: + case FL_IOCTL_BDK_OPERATION: + case FL_IOCTL_DELETE_SECTORS: + case FL_IOCTL_READ_SECTORS: + case FL_IOCTL_WRITE_SECTORS: + case FL_IOCTL_FORMAT_PHYSICAL_DRIVE: + case FL_IOCTL_FORMAT_LOGICAL_DRIVE: + case FL_IOCTL_BDTL_HW_PROTECTION: + case FL_IOCTL_BINARY_HW_PROTECTION: + case FL_IOCTL_OTP: + case FL_IOCTL_CUSTOMER_ID: + case FL_IOCTL_UNIQUE_ID: + case FL_IOCTL_NUMBER_OF_PARTITIONS: + case FL_IOCTL_INQUIRE_CAPABILITIES: + case FL_IOCTL_SET_ENVIRONMENT_VARIABLES: + case FL_IOCTL_PLACE_EXB_BY_BUFFER: + case FL_IOCTL_WRITE_IPL: + case FL_IOCTL_DEEP_POWER_DOWN_MODE: + case FL_IOCTL_EXTENDED_ENVIRONMENT_VARIABLES: + case FL_IOCTL_VERIFY_VOLUME: + case FL_IOCTL_SET_ACCESS_ROUTINE: + case FL_IOCTL_GET_ACCESS_ROUTINE: + case FL_IOCTL_EXTENDED_WRITE_IPL: + case FL_IOCTL_LNX: + if(!FlIoctl(DEVICE_NR(inode->i_rdev), cmd, arg)) + { + res=-EINVAL; + } + break; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + + case BLKRASET: // set the readahead value + res = blk_ioctl(inode->i_rdev, cmd, arg); + break; +#else //>= 2.4.0 + + case BLKRASET: // set the readahead value + if (arg > 0xff) + { + res = -EINVAL; // limit it + break; + } + read_ahead[MAJOR(inode->i_rdev)] = arg; + break; +#endif /* >= 2.4.0 */ + default: // unknown command + res = -EINVAL; /* ? ENOSYS ? */ + } + return res; +} + +/* Support for removable devices */ +int fl_check_change(kdev_t i_rdev) +{ + // TODO + return 0; +} + +int fl_revalidate(kdev_t i_rdev) +{ + // first partition, # of partitions + int part1 = MINOR_NR(DEVICE_NR(i_rdev)) + 1; + int npart = MINOR_NR(1) - 1; + int dev_nr; + + // first clear old partition information + memset(fl_gendisk.sizes + part1, 0, npart * sizeof(int)); + memset(fl_gendisk.part + part1, 0, npart * sizeof(struct hd_struct)); + + // then fill new info + dev_nr = DEVICE_NR(i_rdev); + // The partition code eventually wants to read + // a block and wait for it. We'd better not lock out the + // low level routine fl_do1_request() or we're hosed. +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + grok_partitions(&fl_gendisk, dev_nr, fl_gendisk.max_p,Fl_devices[dev_nr].size); + /* device->size); */ +#else + resetup_one_dev(&fl_gendisk, dev_nr); +#endif + return 0; +} + +/* Block-driver specific functions */ +static int fl_do1_request(FL_DEV *device, struct request *req) +{ + /* Do the I/O for _one_ request, but don't mess with the request queues. */ + /* All validity checking done before calling this fn. */ + + unsigned int blocks; + unsigned int block; + void *buffer; + int minor; + int dev_nr; + int fl_last_error=0; + + // get device information + dev_nr = DEVICE_NR(req->rq_dev); + minor = MINOR(req->rq_dev); + + // get io information + blocks = req->current_nr_sectors; + buffer = req->buffer; + block = req->sector; + + // translate through partition table + block += Fl_partitions[minor].start_sect; + + /* iterate doing io until we are done */ + for (; blocks--; block++, buffer += 512) + { + // determine if we are READing or WRITEing, then select io type + switch (req->cmd) + { + case READ: + device->requests_Read++; + fl_last_error=FlRead(dev_nr, buffer, block, 1); + if(!fl_last_error) + { + return 0; + } + break; + + case WRITE: + device->requests_Write++; + fl_last_error=FlWrite(dev_nr, buffer, block, 1); + if(!fl_last_error) + { + return 0; + } + break; + } + } + return 1; +} + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) +void fl_request_fn1(request_queue_t *q) +#else +void fl_request_fn1(void) +#endif /* < 2.4.0 */ +{ + // Move all the requests into the private device queue. + struct request *req; + FL_DEV *device; + int minor; + int dev_nr; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + int code; +#endif + + // Standard block device request loop + // +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + while (code = 0, !QUEUE_EMPTY) +#else + while (1) +#endif + { + // Standard block device boiler plate + INIT_REQUEST; + req = CURRENT; + + // get device information + dev_nr = CURRENT_DEV; + minor = MINOR(req->rq_dev); + + // Check if the minor number is in range + if ((dev_nr > fl_gendisk.nr_real) || (minor > MINOR_NR(fl_gendisk.nr_real))) + { + static int count = 0; + if (count++ < 5) // print the message at most five times + printk(KERN_WARNING DEVICE_NAME": _request_fn: request for non-existent device\n"); + end_request(0); + continue; + } + // get device structure + device = Fl_devices + dev_nr; + device->requests++; + // check we are in range + if ((req->sector + req->current_nr_sectors) > fl_gendisk.part[minor].nr_sects) + { + printk(KERN_WARNING DEVICE_NAME": _request_fn: request past end of device: %4lx >= %4lx\n",req->sector + req->current_nr_sectors, fl_gendisk.part[minor].nr_sects); + if (req->sector != 0) + { + end_request(0); + continue; + } + } + // check we have a valid command + if (req->cmd != READ && req->cmd != WRITE) + { + end_request(0); + continue; + } + + // Check that there is somebody to handle it :). + if (NULL == device->sem) + { + // Oops, there isn't. + end_request(0); + continue; + } + + if(req->cmd==WRITE && FlGetProtection(DEVICE_NR(req->rq_dev))>=1) + { + end_request(0); + continue; + } + if(req->cmd==READ && FlGetProtection(DEVICE_NR(req->rq_dev))>=2) + { + end_request(0); + continue; + } + + // Move to private list (io_request_lock aquired before calling this request fn). +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + list_del(&req->queue); + INIT_LIST_HEAD(&req->queue); + list_add_tail(&req->queue,&device->queue_head); +#else + // no easy way to add to tail for singly linked list, + // so build list in reverse order and flip it when processing starts + CURRENT = req->next; + req->next = device->revq; + device->revq = req; +#endif + // Make sure the next stage is set up to run. We can + // do this more than once because it's a semaphore, + // and we _must_ do it now because some kernel versions + // have a function exit inside the INIT_REQUEST macro + // used above. + up(device->sem); + } +} + +static struct request*gimme_req(FL_DEV *device) +{ + struct request *req; + unsigned long flags; + + // Use the same lock that's protecting fl_request_fn1() + grab_io_request_lock(flags); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + req = list_empty(&device->queue_head) ? NULL :list_entry(device->queue_head.next,struct request,queue); +#else + if (NULL == (req = device->queue) && NULL != (req = device->revq)) + { + // There are none on the private queue, but the reversed + // queue has at least one, flip the reversed queue into + // the private queue. + do{ + device->revq = req->next; + req->next = device->queue; + device->queue = req; + }while (NULL != (req = device->revq)); + // Pick up the first request + req = device->queue; + } +#endif + /* A tiny bit of paranoia from INIT_REQ */ + if (NULL != req && NULL != req->bh) + { + if (!buffer_locked(req->bh)) + panic(DEVICE_NAME ": block not locked"); + } + /* End paranoia */ + rlse_io_request_lock(flags); + return(req); +} + +static void request_completed(FL_DEV *device, struct request *req,int result) +{ + // Do the equivalent of end_request(1), but don't use "CURRENT" + unsigned long flags; + /* We really don't need to lock just yet, because the request is in + our private queue and we won't be returning it to the public free + list until _after_ end_that_request_first() returns 0. */ + if (end_that_request_first(req,result,DEVICE_NAME)) + { + // This request is multi-sector and is not finished yet, + // the various buffer pointers and counters have been adjusted, + // but we need another crack at the remaining sectors. + return; + } +#if !defined(DEVICE_NO_RANDOM) + add_blkdev_randomness(MAJOR(req->rq_dev)); +#endif + grab_io_request_lock(flags); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + blkdev_dequeue_request(req); + INIT_LIST_HEAD(&req->queue); +#else + device->queue = req->next; + req->next = NULL; +#endif + end_that_request_last(req); + rlse_io_request_lock(flags); +} + +/* Note: this runs as a kernel thread without aquired locks, so any list operations must aquire the appropriate lock. (See gimme_req() and request_completed(), above.) */ +/* struct task_struct current */ +int fl_request_fn2(void *data) +{ + FL_DEV *device = (FL_DEV *) data; + struct request *req; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + DECLARE_MUTEX_LOCKED(reqs2do); +#else + struct semaphore reqs2do = MUTEX_LOCKED; +#endif + struct semaphore *initterm = device->sem; + + /* Detach as best we can from the process that started us. */ + lock_kernel(); + exit_mm(current); + exit_files(current); + exit_fs(current); + fl_setsid(); + current->exit_signal = SIGCHLD; + /* QQQ should terminate when we detect 'em.....if we detect 'em */ + siginitsetinv(¤t->blocked, SHUTDOWN_SIGS); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + spin_lock(¤t->sigmask_lock); + flush_signals(current); + spin_unlock(¤t->sigmask_lock); +#else + sigemptyset(¤t->signal); +#endif + /* Name this thread */ + sprintf(current->comm, "msys/fl%c", 'a'+(device-Fl_devices)); + /* Run at a high priority, ahead of sync and friends */ + /* QQQ priority > bdflush??? */ + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + current->nice = prio; +#else + current->priority = prio; +#endif + current->policy = SCHED_OTHER; + /* Replace the initialization/termination semaphore with our "requests to do" semaphore. */ + device->sem = &reqs2do; + unlock_kernel(); + + /* Let the process that started us know we are ready to roll. */ + up(initterm); + // Process all requests for this device. + while (!device->terminating) + { + /* Wait for some requests. */ + down(device->sem); + /* Do 'em. */ + while (NULL != (req = gimme_req(device))) + { + request_completed(device,req,fl_do1_request(device,req)); + } + } + // Let the process terminating us know we are done. */ + up(initterm); + return(0); +} + +static void kickoff_thread(FL_DEV *device, int (*th_fn)(void *data)) +{ + device->terminating = 0; + device->sem = &start_stop_sem; + kernel_thread(th_fn,(void *)device,0); + /* Wait for the function to finish initialization. */ + down(&start_stop_sem); +} + +static void killoff_thread(FL_DEV *device) +{ + if (NULL == device->sem || device->terminating) + { + /* It's already dead or dying. */ + return; + } + /* Tell the thread to quit. */ + device->terminating = 1; + /* Wake up the function for the last time (if it isn't already awake). */ + up(device->sem); + /* Wait for the function to finish termination. */ + down(&start_stop_sem); + /* Make sure no one tries to wake up the function again. */ + device->sem = NULL; +} + +#define fl_init init_module + +static void fl_geninit(struct gendisk *gendisk) +{ + int mdev; + FL_DEV*device; + int bDevice; + + /* iterate across the per minor device arrays and prepare them */ + for (mdev = 0; mdev < MINOR_NR(gendisk->nr_real); mdev++) + { + /* prepare the Fl_blksize_size array and zero it */ + Fl_blksize_size[mdev] = blksize[mdev>>FL_SHIFT]; + /* prepare the Fl_hardsect_size array and zero it */ + Fl_hardsect_size[mdev] = hardsect[mdev>>FL_SHIFT]; + Fl_blk_size[mdev] = 0; + } + + /* iterate across the flash devices filling in the device information structure */ + for(bDevice=0;bDevicenr_real;bDevice++) + { + // we still increment dev + // so that we can access the underlying device via ioctls for formatting etc + device = Fl_devices + bDevice; + + /* We have a private queue per physical device, but only one "public" queue for the major number */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + INIT_LIST_HEAD(&device->queue_head); +#else + device->queue = device->revq = NULL; +#endif + kickoff_thread(device,fl_request_fn2); + + /* remove read protection */ + if(bDevice==fl_part_prot) + { + if(!FlRemoveProtectionFromParm(fl_part_prot,fl_key_prot)) + { + printk(KERN_ERR DEVICE_NAME": device %d: Error removing protection.\n",(int)bDevice); + } + } + /* does this DOC volume exist? */ + if(FlMount(bDevice)) + { + /* start to fill in the required info */ + device->volume = bDevice; + device->size=FlGetNumberOfSectors(bDevice); + + Fl_blk_size[MINOR_NR(bDevice)] = device->size; + Fl_blksize_size[MINOR_NR(bDevice)] = 1024; + Fl_partitions[MINOR_NR(bDevice)].start_sect = 0; + Fl_partitions[MINOR_NR(bDevice)].nr_sects = 0; + } + else + { + /* start to fill in the required info */ + device->volume = -1; + device->size = 0; + + Fl_blk_size[MINOR_NR(bDevice)] = 0; + Fl_blksize_size[MINOR_NR(bDevice)] = 0; + Fl_partitions[MINOR_NR(bDevice)].start_sect = 0; + Fl_partitions[MINOR_NR(bDevice)].nr_sects = 0; + } + } + + /* fill in partition info for whole disks so we can do resetup_one_dev() */ + for (bDevice=0;bDevicenr_real;bDevice++) + { + device = Fl_devices+bDevice; + Fl_partitions[MINOR_NR(bDevice)].nr_sects = device->size; + } + + /* fill in the gendisk structure */ + gendisk->sizes = Fl_blk_size; + + /* set global variables */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + blk_init_queue(BLK_DEFAULT_QUEUE(flMajor),fl_request_fn1); +#elif LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0) + blk_dev[flMajor].request_fn = fl_request_fn1; +#endif /* >= 2.4.0 */ + read_ahead[flMajor] = Fl_read_ahead; + blk_size[flMajor] = Fl_blk_size; + blksize_size[flMajor] = Fl_blksize_size; + hardsect_size[flMajor] = Fl_hardsect_size; + + // call resetup/register_disk for each physical device + for(bDevice=0;bDevicenr_real;bDevice++) + { + device = Fl_devices+bDevice; + if (device->size) + { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + register_disk(gendisk,MKDEV(flMajor,(bDevice<minor_shift)),gendisk->max_p,gendisk->fops,device->size); +#else + resetup_one_dev(gendisk,bDevice); +#endif + } + } + + // grab blk_size information and spit out some info + for (mdev = 0; mdev < MINOR_NR(gendisk->nr_real); mdev++) + { + Fl_blk_size[mdev] = Fl_partitions[mdev].nr_sects / 2; + + if ((mdev%64 == 0) || (mdev%64 == 1) || (mdev%64 == 2) || (mdev%64 == 3)) + { + printk(KERN_INFO DEVICE_NAME": partition: %d: start_sect: %lx, nr_sects: %lx Fl_blk_size[]: %xkb\n",mdev, Fl_partitions[mdev].start_sect, Fl_partitions[mdev].nr_sects, Fl_blk_size[mdev]); + } + } + + return; +} + +/* DDD Here for debugging + * print out the size of the request queue when /proc/fla_queue is read. */ +static int fl_read_proc(char *buffer, char **start, off_t offset,int length, int *eof, void *data) +{ + int len; + off_t begin=0; + + len = sprintf(buffer, "ReadQ WriteQ\n%5d %6d\n",Fl_devices->requests_Read,Fl_devices->requests_Write); + + if (len length) + { + len = length; + } + return len; +} + +#ifdef COTULLA +#define MSC2_CNTR_REG_ADDR 0x48000000 +#define MSC2_OFFSET 0x10 +#define MCS5_INIT_VAL 0xFFF80000 +#endif + +/* Init DiskOnChip CS in H/W if needed */ +void fl_docCsInit( void ) +{ +#ifdef COTULLA + volatile void *myMSC2ptr; + unsigned long msc2Val; + + myMSC2ptr = (volatile void *)ioremap_nocache(MSC2_CNTR_REG_ADDR, 0x1000); + /* MSC2 Static Memory Control Register - 16-bit mode for CS5 */ + msc2Val = readl( myMSC2ptr + MSC2_OFFSET ); + writel( ((msc2Val & 0x0000FFFF) | MCS5_INIT_VAL), myMSC2ptr + MSC2_OFFSET ); +/* *(myMCS5 + 4) = MCS5_INIT_VAL; */ + iounmap( (void *)myMSC2ptr ); +#endif +} + +/* Initialize the DiskOnChip Memory and Chip Select if needed */ +int fl_mapPhysMem( unsigned long winl, unsigned long winh ) +{ + unsigned long docSize = FL_DOC_WIN_SIZE + (winh - winl); + unsigned long docAddr = winl; + + /* Init DiskOnChip CS in H/W if needed */ + fl_docCsInit(); + +#if 0 + if( !request_mem_region( docAddr, docSize, "fla") ) { + printk(KERN_ERR "fl_mapPhysMem: request region failure %lx\n",docAddr); + return 1; + } +#endif + + /* Get Mapped address */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + fl_virl = (void *)ioremap_nocache( docAddr, docSize ); +#else + fl_virl = docAddr; +#endif + fl_virh = fl_virl + (docSize - FL_DOC_WIN_SIZE); + return 0; +} + +/* Release the DiskOnChip Memory */ +void fl_releasePhysMem( unsigned long winl, unsigned long winh ) +{ +#if 0 + unsigned long docSize = FL_DOC_WIN_SIZE + (winh - winl); +#endif + if( fl_virl ) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + iounmap( fl_virl ); +#endif +#if 0 + release_mem_region( winl, docSize ); +#endif + } +} + +/* Initialize the driver, register major and link into gendisk_list. */ +#if defined(__init) +int __init fl_init(void) +#elif defined(__initfunc) +__initfunc( int fl_init(void)) +#else +int fl_init(void) +#endif +{ + int result = 0; + int i; + +#ifdef DEEPDEBUG + printk(KERN_DEBUG"linuxdrv begin\n"); +#endif /* DEEPDEBUG */ + + // Map Physical Memory of the DiskOnChip window + if( fl_mapPhysMem( fl_winl, fl_winh ) ) { + printk(KERN_ERR"Cannot Map M-Systems DiskOnChip Memory\n"); + goto fl_init_error; + } + + // Copy the (static) cfg variables to public prefixed ones to allow snoozing with a debugger. + // major device number + flMajor = major; /* 100 by default */ + Fl_read_ahead = rahead; /* 0 by default */ + + // set default blksize and hardsect if they where not passed as module parameters + for (i = 0; i < MAX_DEVICES; i++) + { + if (!blksize[i]) + blksize[i] = 1024; + if (!hardsect[i]) + hardsect[i] = 512; + } + + spin_lock_init(&o_c_lock); + + // can we initialize OSAK? + if(!FlInit()) + { + printk(KERN_ERR DEVICE_NAME": Cannot initialize M-Systems DOC 2000 OSAK\n"); + goto fl_init_error; + } + + DebugPrintk("fl_init: FlInit OK\n"); + + /* find out how many devices we have */ + if(!(fl_gendisk.nr_real=FlGetNumberOfDevices(MAX_DEVICES))) + { + printk(KERN_ERR DEVICE_NAME": Cannot find any M-Systems flash devices\n"); + goto fl_init_error; + } + DebugPrintk("fl_init: Found %d devices\n",fl_gendisk.nr_real); + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0) + fl_gendisk.max_nr = fl_gendisk.nr_real; // for the sake of parnoia... +#endif + // partition array must be allocated here, setup_dev() accesses it before calling fl_genit() + if (!(Fl_partitions = ckmalloc(MINOR_NR(fl_gendisk.nr_real) * sizeof(struct hd_struct), GFP_KERNEL))) + goto fl_init_error; + + // allocate per device dynamic structures, these are done here so we can release ckmalloc() + if (!(Fl_devices = ckmalloc(fl_gendisk.nr_real * sizeof(FL_DEV), GFP_KERNEL))) + goto fail_malloc; + + // allocate per device * minor blk dynamic arrays + if (!(Fl_blksize_size = ckmalloc(MINOR_NR(fl_gendisk.nr_real) * sizeof(unsigned int), GFP_KERNEL))) + goto fail_malloc; + + if (!(Fl_hardsect_size = ckmalloc(MINOR_NR(fl_gendisk.nr_real) * sizeof(unsigned int), GFP_KERNEL))) + goto fail_malloc; + + if (!(Fl_blk_size = ckmalloc(MINOR_NR(fl_gendisk.nr_real) * sizeof(unsigned int), GFP_KERNEL))) + goto fail_malloc; + + // setup gendisk structure with partition information + fl_gendisk.part = Fl_partitions; + + /* ok, we have at least one DOC, proceed */ + printk(KERN_INFO DEVICE_NAME": Flash disk driver for DiskOnChip\n"); + printk(KERN_INFO DEVICE_NAME": DOC device(s) found: %d\n", fl_gendisk.nr_real); + + // Register your major, and/or accept a dynamic number +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + if ((result = devfs_register_blkdev(flMajor,DEVICE_NAME,&fl_fops)) < 0) +#else + if ((result = register_blkdev(flMajor,DEVICE_NAME,&fl_fops)) < 0) +#endif + { + printk(KERN_WARNING DEVICE_NAME": can't get major %d\n",flMajor); + goto fail_malloc; + } + + /* save major if we are using a dynamic major */ + if (flMajor == 0) + { + flMajor = result; /* dynamic */ + } + + fl_gendisk.major = flMajor; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + devfs_handle = devfs_mk_dir(NULL, fl_gendisk.major_name, NULL); + /* DDD this is in here for debugging */ + create_proc_read_entry("fl_queue", 0, 0, fl_read_proc, NULL); +#endif // >= 2.4.0 + + printk(KERN_INFO DEVICE_NAME": _init: registered device at major: %d\n",flMajor); + + /* link into global gendisk list */ + fl_gendisk.next = gendisk_head; + gendisk_head = &fl_gendisk; + + fl_geninit(&fl_gendisk); + + return 0; + +fail_malloc: + + // Reset global block array entries + // QQQ - the first part of this cleanup does not make real sense, + // we have not done the setup until fl_geninit(), and we + // will not be getting to here once we have called it. +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + blk_cleanup_queue(BLK_DEFAULT_QUEUE(flMajor)); + devfs_unregister_blkdev(flMajor,DEVICE_NAME); +#else + blk_dev[flMajor].request_fn = NULL; +#endif // >= 2.4.0 + read_ahead[flMajor] = 0; + blk_size[flMajor] = NULL; + blksize_size[flMajor] = NULL; + hardsect_size[flMajor] = NULL; + + // Failed, free any memory that was allocated and set pointers to NULL + lkfree((void **)&Fl_devices); + lkfree((void **)&Fl_blksize_size); + lkfree((void **)&Fl_hardsect_size); + lkfree((void **)&Fl_blk_size); + lkfree((void **)&Fl_partitions); + +fl_init_error: + fl_releasePhysMem( fl_winl, fl_winh ); + return(1); +} + +void cleanup_module(void) +{ + int i; + struct gendisk**gd; + int bDevice; + + /* first of all, flush it all and reset all the data structures */ + for (i = 0; i < MINOR_NR(fl_gendisk.nr_real); i++) + { + fsync_dev(MKDEV(flMajor, i)); /* flush the devices */ + } + + /* Terminate the request threads. */ + for (i = 0; i < fl_gendisk.nr_real; i++) + { + killoff_thread(Fl_devices+i); + } + + for(bDevice=0;bDevicenext)) + { + if (*gd == &fl_gendisk) + { + *gd = (*gd)->next; + break; + } + } + + // complain if we didn't find ourselves in gendisk list + if (!*gd) + { + printk(KERN_ERR DEVICE_NAME": cleanup_module: entry in gendisk chain missing!\n" ); + } + + // reset global blk array entries + read_ahead[flMajor] = 0; + blk_size[flMajor] = NULL; + blksize_size[flMajor] = NULL; + hardsect_size[flMajor] = NULL; + + // unregister our device +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + devfs_unregister_blkdev(flMajor, DEVICE_NAME); + blk_cleanup_queue(BLK_DEFAULT_QUEUE(flMajor)); + devfs_unregister(devfs_handle); + devfs_handle = NULL; + // DDD again, this is for debugging + remove_proc_entry("fl_queue", 0); +#else + blk_dev[flMajor].request_fn = NULL; + unregister_blkdev(flMajor, DEVICE_NAME); +#endif /* >= 2.4.0 */ + + /* free our data structures */ + lkfree((void **)&Fl_blk_size); + lkfree((void **)&Fl_blksize_size); + lkfree((void **)&Fl_hardsect_size); + lkfree((void **)&Fl_devices); + lkfree((void **)&Fl_partitions); + printk(KERN_INFO DEVICE_NAME": Driver removed.\n"); +} + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,1,0) + +static void spin_lock_init(spinlock_t *splp) +{ + splp->lock = 0; +} + +static void spin_lock(spinlock_t *splp) +{ + /* spin on bit lock */ + while (set_bit(0,&(splp->lock)) != 0)/* spin */; +} + +static void spin_unlock(spinlock_t *splp) +{ + /* unlock simple bit lock */ + if (clear_bit(0,&(splp->lock)) == 0) + { + printk(KERN_ERR DEVICE_NAME": spin_unlock() failed\n"); + } +} + +/* Signals */ + +static void siginitsetinv(sigset_t *set, unsigned long mask) +{ + *set = ~mask; +} + +static void sigemptyset(sigset_t *set) +{ + *set = 0; +} + +/* copy user space to/from kernel space */ + +static inline unsigned long copy_to_user(void *to,const void *from, unsigned long n) +{ + int i; + if ((i = verify_area(VERIFY_WRITE, to, n)) != 0) + return i; + memcpy_tofs(to, from, n); + return 0; +} + +static inline unsigned long copy_from_user(void *to,const void *from, unsigned long n) +{ + int i; + if ((i = verify_area(VERIFY_READ, from, n)) != 0) + { + return i; + } + memcpy_fromfs(to, from, n); + return 0; +} + +/* I/O requests and locking */ + +static int end_that_request_first(struct request *req,int uptodate,char *devname) +{ + struct buffer_head * bh; + int nsect; + + req->errors = 0; + if (!uptodate) + { + printk(KERN_ERR DEVICE_NAME": msys/fl/end_request_1st: I/O error, dev %s (%s), sector %lu\n",kdevname(req->rq_dev), devname, req->sector); + if (NULL != (bh = req->bh)) + { + nsect = bh->b_size >> 9; + req->nr_sectors--; + req->nr_sectors &= ~(nsect - 1); + req->sector += nsect; + req->sector &= ~(nsect - 1); + } + } + + if (NULL != (bh = req->bh)) + { + req->bh = bh->b_reqnext; + bh->b_reqnext = NULL; + + mark_buffer_uptodate(bh, uptodate); + unlock_buffer(bh); + if (NULL != (bh = req->bh)) + { + req->current_nr_sectors = bh->b_size >> 9; + if (req->nr_sectors < req->current_nr_sectors) + { + req->nr_sectors = req->current_nr_sectors; + printk(KERN_ERR DEVICE_NAME": msys/fl/end_request_1st: buffer-list destroyed\n"); + } + req->buffer = bh->b_data; + return 1; + } + } + return 0; +} + +static void end_that_request_last(struct request *req) +{ + if (NULL != req->sem) + { + up(req->sem); + } + req->rq_status = RQ_INACTIVE; + wake_up(&wait_for_request); +} + +#endif /* LINUX_VERSION_CODE < 2.1.0 */ + +/***************** EXPORTED TO TRUEFFS *****************/ + +short GetFlDebugParam(void) +{ + return fl_debug; +} + +void GetFlParams(unsigned long*p_fl_winl,unsigned long*p_fl_winh, + unsigned char*p_fl_is_ram_check,unsigned char*p_fl_nftl_cache, + unsigned char*p_fl_8bit_access,unsigned long*p_fl_mtd_bus_access_type, + unsigned long*p_fl_verify_write_bdtl,unsigned long*p_fl_verify_write_binary, + unsigned long*p_fl_verify_write_other,unsigned long*p_fl_sectors_verified_per_folding) +{ + *p_fl_winl=(unsigned long)fl_virl; + *p_fl_winh=(unsigned long)fl_virh; + *p_fl_is_ram_check=fl_is_ram_check; + *p_fl_nftl_cache=fl_nftl_cache; + *p_fl_8bit_access=fl_8bit_access; + *p_fl_mtd_bus_access_type=fl_mtd_bus_access_type; + *p_fl_verify_write_bdtl=fl_verify_write_bdtl; + *p_fl_verify_write_binary=fl_verify_write_binary; + *p_fl_verify_write_other=fl_verify_write_other; + *p_fl_sectors_verified_per_folding=fl_sectors_verified_per_folding; +} + +/* The following are the Linux versions of various things required by the M-Systems OSAK that must be compiled here in the Linux kernel environment. */ +void flDelayMsecs(unsigned milliseconds) +{ + register int i; + for (i = 0; i < milliseconds; i++) + udelay(1000L); +} + +void flsleep(unsigned long milliseconds) +{ + unsigned long deltaj; + /* Timeout has to be expressed in jiffies, there are HZ jiffies/sec. + We add one to it anyway, because the "first" jiffy is really some + random fraction of a jiffy. */ + deltaj = 1 + ((HZ * milliseconds) / 1000); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,1,0) + /* QQQ: why TASK_UNINTERRUPTIBLE? */ + current->state = TASK_UNINTERRUPTIBLE; + while ((deltaj = schedule_timeout(deltaj)) > 0) /* skip */ ; +#else + current->timeout = jiffies + deltaj; + current->state = TASK_INTERRUPTIBLE; /* uninterruptible => no timeout ! */ + schedule(); + current->timeout = 0; +#endif +} + +void *flmemcpy(void *dest, const void *src, size_t length) +{ + return(memcpy(dest, src, length)); +} + +void *flmemset(void *dest, int value, unsigned int length) +{ + return(memset(dest, value, length)); +} + +int flmemcmp(const void * dest,const void *src,size_t count) +{ + return(memcmp(dest, src, count)); +} + +/* + * Do not use isa_xxx() functions in order to access memory because + * they are x86 specific and doesn't get proper virtual address from MMU + * Instead use the pointer from ioremap_nocache(physAddr) with usual access + * functions. + */ +void flmemcpy_fromio(void *dest, const void * src, unsigned int length) +{ +/*#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + isa_memcpy_fromio(dest, (unsigned long)src, length); +#else + memcpy_fromio(dest, src, length); +#endif +*/ + memcpy_fromio(dest, src, length); +} + +void flmemcpy_toio(void *dest, const void * src, unsigned int length) +{ +/*#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + isa_memcpy_toio((unsigned long)dest, src, length); +#else + memcpy_toio(dest, src, length); +#endif +*/ + memcpy_toio(dest, src, length); +} + +void flmemset_io(void *dest, int value, unsigned int length) +{ +/*#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0) + isa_memset_io((unsigned long)dest, value, length); +#else + memset_io(dest, value, length); +#endif +*/ + memset_io(dest, value, length); +} + +void *flmalloc(unsigned long size) +{ + return vmalloc(size); +} + +void flfree(void*addr) +{ + vfree(addr); +} + +void FlDebugPrint(char*str) +{ + if(GetFlDebugParam()) + { + LOG_DELAY; + printk(KERN_DEBUG DEVICE_NAME": %s",str); + } +} + +void FlErrorPrint(char*str,int stat) +{ + LOG_DELAY; + printk(KERN_DEBUG DEVICE_NAME": Error %s: %d\n",str,stat); +} + +#ifdef DEEPDEBUG +int FlPrintk(const char *fmt, ...) +{ + va_list args; + char buf[1024]; // hopefully enough, kernel/printk.c thinks so + int i; + + va_start(args, fmt); + i = vsprintf(buf, fmt, args); + va_end(args); + // make sure we have terminated the string + buf[i--] = '\0'; + + // libosak uses \n\r, this make kerneld unhappy + if (buf[i-1] == '\n' && buf[i] == '\r') + buf[i--] = '\0'; + LOG_DELAY; + printk(KERN_DEBUG"fl :%s",buf); + return(i); +} + +void FlLogData(unsigned short*wBuffPtr,unsigned short wLen,unsigned char fWrite) +{ + unsigned short w=0; + + LOG_DELAY; + if(fWrite) + { + printk(KERN_DEBUG DEVICE_NAME": Write %u words\n",wLen); + } + else + { + printk(KERN_DEBUG DEVICE_NAME": Read %u words\n",wLen); + } + + LOG_DELAY; + while(w> 1) & 0xff; +} + +void *flAddLongToFarPointer(void*ptr, unsigned long offset) +{ + return (void*)(((unsigned long)(ptr)) + offset); +} + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,0) +static struct semaphore osak_sem; +#else +static struct semaphore osak_sem=MUTEX_LOCKED; +#endif + +void flSysfunInit(void) +{ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,0) + sema_init(&osak_sem,1); +#endif +} + +int flCreateMutex(int*mutex) +{ + up(&osak_sem); + return 0; +} + +void flDeleteMutex(int*mutex) +{ + up(&osak_sem); +} + +int flTakeMutex(int*mutex) +{ + down(&osak_sem); + return 1; +} + +void flFreeMutex(int*mutex) +{ + up(&osak_sem); +} diff -Naur linux-2.4.23/drivers/block/doc/fldrvlnx.h linux-2.4.23_TS_2_5/drivers/block/doc/fldrvlnx.h --- linux-2.4.23/drivers/block/doc/fldrvlnx.h Wed Dec 31 17:00:00 1969 +++ linux-2.4.23_TS_2_5/drivers/block/doc/fldrvlnx.h Tue Aug 10 15:17:44 2004 @@ -0,0 +1,61 @@ +/* + * $Log: fldrvlnx.h,v $ + * Revision 1.2 2004/08/10 22:17:44 eddie + * This library is required to compile the disk on chip module. + * + */ + +/***********************************************************************************/ +/* M-Systems Confidential */ +/* Copyright (C) M-Systems Flash Disk Pioneers Ltd. 1995-2001 */ +/* All Rights Reserved */ +/***********************************************************************************/ +/* NOTICE OF M-SYSTEMS OEM */ +/* SOFTWARE LICENSE AGREEMENT */ +/* */ +/* THE USE OF THIS SOFTWARE IS GOVERNED BY A SEPARATE LICENSE */ +/* AGREEMENT BETWEEN THE OEM AND M-SYSTEMS. REFER TO THAT AGREEMENT */ +/* FOR THE SPECIFIC TERMS AND CONDITIONS OF USE, */ +/* OR CONTACT M-SYSTEMS FOR LICENSE ASSISTANCE: */ +/* E-MAIL = info@m-sys.com */ +/***********************************************************************************/ + +#ifndef __FLDRVLNX__H__ +#define __FLDRVLNX__H__ + +#include /* for SIOCDEVPRIVATE */ + +typedef enum{FL_IOCTL_GET_INFO = SIOCDEVPRIVATE, + FL_IOCTL_DEFRAGMENT, + FL_IOCTL_WRITE_PROTECT, + FL_IOCTL_MOUNT_VOLUME, + FL_IOCTL_FORMAT_VOLUME, + FL_IOCTL_BDK_OPERATION, + FL_IOCTL_DELETE_SECTORS, + FL_IOCTL_READ_SECTORS, + FL_IOCTL_WRITE_SECTORS, + FL_IOCTL_FORMAT_PHYSICAL_DRIVE, + FL_IOCTL_FORMAT_LOGICAL_DRIVE, + FL_IOCTL_BDTL_HW_PROTECTION, + FL_IOCTL_BINARY_HW_PROTECTION, + FL_IOCTL_OTP, + FL_IOCTL_CUSTOMER_ID, + FL_IOCTL_UNIQUE_ID, + FL_IOCTL_NUMBER_OF_PARTITIONS, + FL_IOCTL_INQUIRE_CAPABILITIES, + FL_IOCTL_SET_ENVIRONMENT_VARIABLES, /* No longer supported */ + FL_IOCTL_PLACE_EXB_BY_BUFFER, + FL_IOCTL_WRITE_IPL, /* No longer supported */ + FL_IOCTL_DEEP_POWER_DOWN_MODE, + FL_IOCTL_EXTENDED_ENVIRONMENT_VARIABLES, + FL_IOCTL_VERIFY_VOLUME, + FL_IOCTL_SET_ACCESS_ROUTINE, + FL_IOCTL_GET_ACCESS_ROUTINE, + FL_IOCTL_EXTENDED_WRITE_IPL +} flIOctlFunctionNo; + +#ifndef FLASH_MAJOR +#define FLASH_MAJOR 100 +#endif + +#endif /*#ifndef __FLDRVLNX__H__*/ diff -Naur linux-2.4.23/drivers/block/doc/libosak linux-2.4.23_TS_2_5/drivers/block/doc/libosak --- linux-2.4.23/drivers/block/doc/libosak Wed Dec 31 17:00:00 1969 +++ linux-2.4.23_TS_2_5/drivers/block/doc/libosak Tue Aug 10 15:17:44 2004 @@ -0,0 +1,569 @@ +! +/ 1037556717 0 0 0 3916 ` +¹��������������������������������^�^�c´c´c´c´c´u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�u�€¬€¬€¬€¬€¬€¬€¬� � � � � � � ˜Ä§T§T§TÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄæàæàö,ö,ö,ö,? ? ? ? CØP|P|P|P|P|P|P|P|P|P|P|P|P|P|P|P|P|P|ƒÄƒÄƒÄ¸è¸è¸èDDDDDDDD—¸—¸—¸—¸—¸—¸—¸©h©h©h©h©h©h©h©h©h©h©h©h©h¿P¿P¿P¿P¿PinitDoneinitGlobalVarsDoneflMsecCounterflSectorsVerifiedPerFoldingflSetEnvVolumeflInitGlobalVarsflMaxUnitChainflMarkDeleteOnFlashflSuspendModeflExitflPolicyflVerifyWriteflBusConfigflSetEnvSocketflSetEnvAllflSetDocBusRoutineflGetDocBusRoutinevolshandleConversionTableflMutexdismountVolumesetBusyfindSectorabsMountVolumetffscpytffssetreplaceFATsectorflBuildGeometrybdCallflInittffscmpnoOfDrivesdocSocketInitdocMtdVarsgetExbInfoexbswaitForFullBufferfirstTimeInitplaceExbByBuffernoOfSocketsflSocketNoOfflSocketOfflBufferOfflReadBackBufferOfflWriteProtectedflGetMappingContextflMapflSetWindowBusWidthflSetWindowSpeedflSetWindowSizeflSocketSetBusyflIntervalRoutineflNeedVccflDontNeedVccflSetPowerOnCallbackupdateSocketParametersflExitSocketflInitSocketsnoOfMTDsflFlashOfflIntelIdentifyflIntelSizeflIdentifyFlashmtdTabledataErrorObjectmarkUnitBadflPreMountnoOfTLstlTableflMountflFormatnoFormatflIOctlffCheckBeforeWriteflffControlflffInfoflDocMemWinSizeNoShiftflDocMemWinSizeSingleShiftflDocMemWinSizeDoubleShiftflWrite16bitDummyflWrite16bitUsing16bitsNoShiftflWrite16bitUsing32bitsSingleShiftflRead16bitDummyflRead16bitUsing16bitsNoShiftflRead16bitUsing32bitsSingleShiftflWrite8bitUsing8bitsNoShiftflWrite8bitUsing16bitsNoShiftflWrite8bitUsing16bitsSingleShiftflWrite8bitUsing32bitsSingleShiftflWrite8bitUsing32bitsDoubleShiftflRead8bitUsing8bitsNoShiftflRead8bitUsing16bitsNoShiftflRead8bitUsing16bitsSingleShiftflRead8bitUsing32bitsSingleShiftflRead8bitUsing32bitsDoubleShiftfl8bitDocReadNoShiftfl8bitDocWriteNoShiftfl8bitDocSetNoShiftfl8bitDocReadSingleShiftfl8bitDocWriteSingleShiftfl8bitDocSetSingleShiftfl8bitDocReadDoubleShiftfl8bitDocWriteDoubleShiftfl8bitDocSetDoubleShiftfl16bitDocReadNoShiftfl16bitDocWriteNoShiftfl16bitDocSetNoShiftfl16bitDocReadNoShiftIgnoreHigher8bitsfl16bitDocWriteNoShiftIgnoreHigher8bitsfl16bitDocSetNoShiftIgnoreHigher8bitsfl16bitDocReadSingleShiftfl16bitDocWriteSingleShiftfl16bitDocSetSingleShiftfl16bitDocReadSingleShiftIgnoreHigher8bitsfl16bitDocWriteSingleShiftIgnoreHigher8bitsfl16bitDocSetSingleShiftIgnoreHigher8bitssetBusTypeOfFlashflDecodeEDCflCheckAndFixEDCswapUnitsgetAnandRecffflRegisterNFTLtoUNALfromUNALtoUNALLONGfromUNALLONGflDosFormatbdkVolbdkVolsbdkInitbdkRetrieveHeaderbdkGetBootPartitionInfobdkCopyBootAreaInitbdkCopyBootAreaBlockbdkUpdateBootAreaInitbdkUpdateBootAreaBlockbdkEraseBootAreabdkCreateBootAreabdkGetProtectionTypebdkInsertKeybdkRemoveKeybdkLockEnablebdkChangeKeybdkSetProtectionTypebdkCallcheckWinForDOCflRegisterDOCSOCflRegisterDOC2000retrieveHeaderinitCatchflRegisterINFTLsetIplSizePlusreleasePowerDownchkASICmodecheckWinForDOCPLUSchangeInterleavedocPlusIdentifyflRegisterDOCPLUSSOCflRegisterDOCPLUSsetStickyBitprotectionBoundriestryKeyprotectionKeyInsertprotectionKeyRemoveprotectionTypeprotectionSetFlInitFlMountFlGetProtectionFlIsExistFlIsReadProtFlIsWriteProtFlDismountFlGetNumberOfDevicesFlGetNumberOfSectorsFlReadFlWriteFlRemoveProtectionFromParmFlIoctlflSetEnvVarflUse8BitflUseNFTLCacheflUseisRAMflRegisterComponentsblockdev.o/ 1037556705 0 0 100644 20164 ` +ELF˜04( UWVSƒì ‹l$0ŠD$(…í‹\$ ‹t$,¶|$$ˆD$ uƒì héP�vƒû tsƒû wƒûtƒût0ëz‰öƒûf„ƒ�ûÊt3ëe��Fÿƒøvpƒì h@é �v÷ÆtXƒì h€éô�vƒþtC…öt?ƒþt:ƒì hÀéÖ�ƒþv'ƒþt"ƒì hÀé¾�ƒþvƒì h 髉öƒûfwƒûesbƒû ‡©ƒû‚ ëv‰ö�ûˇ��ûÉ‚„€|$ w�ûËu€|$ u +ƒì h`ëQ‰ú€úvyƒì hÀë@�v‰ù€ùv ƒì hÀë,�v€|$ ÿtQƒì h ë�v‰ø,ÿu€|$ ÿt7ƒì h`èüÿÿÿƒÄ¸3éÕ�ƒì hÀèüÿÿÿƒÄ¸j麉öèüÿÿÿƒû„Bƒûw9ƒû„¬ƒûwƒûtrƒû„�élƒû„£ƒû„²éU��ûÉ„à�ûÉwƒû „§ƒûe„é)��ûÊ„Ü�ûË„àé �v¶‰ò‰Eˆé�¶‰ñ‰Eˆ éï�¶‰E‰ð¢é؉ö¶‰ò‰Eˆé¿�¶‰ñ‰Eˆ é§�…öu€=tèüÿÿÿ¶‰E‰ð¢é~‰ù¶D$ ¶Ñ¶„�‰Eëg�¡‰E‰5ëV‰ù¶T$ ¶Á�Âë�‰ù¶T$ ¶Á�DÂë ‰ù¶Á�ʶ‰U‰òˆë�‰ù¶ÁÁ๋‰U‰41ÀƒÄ [^_]ÃUWVSƒì ŠD$$‹t$ ˆD$ 1Û1À�þÊ‹l$(‹|$,w-�þÉs1ƒþfw`ƒþer[ƒì WUhÿ¶D$#PVèüÿÿÿƒÄ ëx�þËtë6‰öƒì WUj¶D$#PVèüÿÿÿƒÄ €ûwQ…ÀuMƒì WU¶ÃP¶D$#PVCë܉ö€|$ ÿtƒì hàèüÿÿÿƒÄ¸3ë‰öƒì WUhÿhÿVèüÿÿÿƒÄ ƒÄ [^_]ÃUWVSƒì ‹t$ ƒþe‹l$$‹|$(r4ƒþfv�þËw'�þÉr1Û�WU¶ÃPVCèüÿÿÿƒÄ€ûw…Àtçë�ƒì WUhÿhÿVèüÿÿÿƒÄ ƒÄ [^_]ÃVSQŠ\$€û‹t$vƒì h èüÿÿÿƒÄ¸jé�‰ö…öuƒì h€èüÿÿÿƒÄ¸3ës�èüÿÿÿƒì ¶ÛSèüÿÿÿ‹V ‰�ˆ‹V‰�Œ‹V‰��‹V ‰�”‹V‰�˜‹V‰� ‹V‰�œ‹V‰�¤‹V$‰�¨Ç�1ÀƒÄZ[^ÉöVSVŠ\$€û‹t$vƒì h èüÿÿÿƒÄ¸j鎉ö…öuƒì h€èüÿÿÿƒÄ¸3ëq�èüÿÿÿƒì ¶ÛSèüÿÿÿ‹�ˆ‰V ‹�Œ‰V‹��‰V‹�”‰V ‹�˜‰V‹� ‰V‹�œ‰V‹�¤‹€¨‰F$‹�‰‰V1ÀƒÄ[[^ÃVSRƒ=„�Ç1öƒì Vèüÿÿÿ‰Á1҃ķÂBf�ú«Ævñ�µÇ€1Ò‰Á»�v·ÂBÈfƒúÆvð1Ò� õ»‰ö·ÂBÈfƒúÆvðFƒþ~ŽÇ@ÆÆÆX[^Ã�vSƒì‹\$ÿs8ÿsxèüÿÿÿƒÄ…Àuƒì ‹C8PÿPLƒÄ€ 1ÀƒÄ[Ã�v‹D$€ þÃWVSSŠ ŠD$ŠT$€ùˆD$ˆT$w0¶Ñ�ÒÁà)кö‚ t‰Ó�A€ùw¶Ñ�ÒÁà)Ðöƒ ué€ù ¸to¶t$¶D$�µˆŒ¶Á� ÀÁá)Á�öÁàÁá)ð�y0»�ÂÁà‰—‹Tp‹D0‰‰T p¸ŠT$ˆTŠT$ˆTÆ 1ÀY[^_Ã�vUWVSƒì¶\$,�ÛÁà)Ø�…PèüÿÿÿƒÄ…Àu^¿�,�‰ú¶Â�tІ<ÿt6¶À�ÀÁâ)Â�•ƒì �ƒPèüÿÿÿƒÄ…ÀuƆÿƃG‰ø<v°1ÀƒÄ [^_]ÉöSƒì‹\$öt ƒì ÿs<ÿS\ƒÄÆ 1ÀƒÄ[Ã�WVS1ÿƒ|$‹\$‹t$uTƒì ÿs4èüÿÿÿƒÄ…Àu +¸ ëu�v‹Cxƒì‰òˆPjÿsxèüÿÿÿYÿsxèüÿÿÿƒÄötJƒìjÿs<ÿSX‰Çë8�vötƒìjÿs<ÿSX‰ÇƒÄƒì ÿsxèüÿÿÿXZjÿsxèüÿÿÿ^ÿs4èüÿÿÿƒÄ‰ø[^_Éöƒì‹D$jÿt$ÿp<ÿPDƒÄÃ�WVS‹t$‰óƒì �ëiÛ‹¯øŠVèüÿÿÿÁûƒÄ…À…ðƒì ÿv8j�Fét+‹%ÿÿ=ë�tƒì hÀèüÿÿÿƒÄ¸ +é�vƒì �F PèüÿÿÿƒÄf=tC¸ éâ�ƒì ‹D$\ÿp<ÿP\ƒÄ¸éljöƒì ‹T$\ÿr<ÿR\ƒÄ¸髉ö¶F ‹L$P‰A¶F‰A‹\$P·V·NS�‰K ‰S‰C¶F¯ÁÂƒì ‰S$�FPèüÿÿÿ·ÀÁàHÁè @‰C(C$‰C,�F‰$èüÿÿÿ·ÀƒÄ…Àu‹F ‹T$PB+B,‰Ñ1Ò÷q@=ô‰Aw€ ‹\$P‹CÁà ‰C ÇC0€ 1ÀƒÄ<[^_]Ã�vƒì‹T$ƒÂ‹D$Rÿp<ÿP`ƒÄÃ�vUWVS�옋„$°‹h ÇD$ŠÆD$"ÆD$!‹E‰D$ŠEˆD$ ŠEˆD$6ÆD$I‹E‰D$L‹E ‰D$Tƒâ‹E f‰D$X¶Ú‹E$ÇD$$ÇD$(‰D$\ÆD$,ÇD$DÆD$5SèúÿÿƒÄ…À…7�ÛÁà)Ø‹”$¤�4…÷B �¾tRÿ¶8�D$PSèüÿÿÿƒÄ…Àtzéô�ƒì ÿ¶8j�Gë>‹T$$ÇB;D$s+�vRVSÿu<ÿUHƒÄ…Àu‹T$$‹B@‰BC�Æ;D$rØ1ÀƒÄ [^_]Éöƒì‹L$‹T$‹ABÿqPÿr<ÿRTƒÄÃ�Sƒì �D$‹T$‹\$P‹CBPÿr<ÿRDƒÄ…Àt=u¸ë�‹D$‰C1Àë�¸ƒÄ[ÉöWVS‹T$‹D$ƒì‹X ÿrRèüÿÿÿ‰ÆƒÄ…ö¸t�þ¸t ü¹ ‰ßó¥1À[^_Ã�vVS�ì$‹œ$0‰Ø-iÀ‹¯øŠÁø‰$‹C÷؉D$�D$ ÇD$‰D$ ƒì�t$VSèëûÿÿƒÄ…ÀuHƒìj�„$ÒPèüÿÿÿZYÿs|�„$ÖPèüÿÿÿYXÿ³€�„$ÚPèüÿÿÿ€#ïXZVSè¿ýÿÿƒÄ�Ä$[^Ã�vVSS‹T$‹B ‹‹p‹B�ñCMœ&�öÙûØ ƒø‹\$t5ƒør\ƒø…‡‹C|9Èu9³€t…Àul‹‹€…Éub€#ï1Àëh�v9K|uS9³€uKƒì ǃ€ÇC|SèÙþÿÿƒÄë9‹S|…Òu%‹ƒ€…Àuƒì ‰K|‰³€Sè±þÿÿƒÄ€ ë�¸ë�¸[[^Ã�v‹D$‹@x‹@,Áà ‹T$‰1ÀÉöVSV‹t$‹V8‹\$‹K f‹f‰‹B‰A·B$¯B‰A‹B‰A ¿B,‰A¶Bƒøw6ÿ$…�vÆAë&‰öÆAë‰öÆAë‰öÆAë‰öÆAë‰öÆAƒì�CPVègÿÿÿƒÄ1À[^Ã�vUWVSƒì ‹l$ ‹t$$‹]8‹N‹~·C$�¯C9Â~ ¸3ëH‰ö‹C‰D$1Ò‰È÷t$)T$;|$¸3(ƒì ·FP·FPÿv ÿvÿu8ÿS@‰ÂƒÄ 1À…Ò”ÀH!ÐƒÄ [^_]ÉöUWVSƒì ‹l$ ‹t$$‹]8‹N‹~·C$�¯C9Â~ ¸3ëF‰ö‹C‰D$1Ò‰È÷t$)T$;|$¸3&ƒì ·FPÿvÿv ÿvÿu8ÿSD‰ÂƒÄ 1À…Ò”ÀH!ÐƒÄ [^_]ÃUWVSƒì ‹|$ ‹_8·S$¯S‹t$$‰Ð1Ò÷s‹n‰Án9͸3 U·FP·FPÿw8ÿSH‰ÂƒÄ1À…Ò”ÀH!ÐƒÄ [^_]Éöƒì ‹D$©‹L$tƒì hèüÿÿÿƒÄ¸ë4�v‹QX…Òtƒì·ÀPÿt$QÿÒƒÄë‰öƒì h@èüÿÿÿƒÄ¸jƒÄ Ã�vƒì ‹L$¶Aƒøt,ƒø|'ƒø"‹QT…Òtƒì ÿt$(j·D$,Pÿt$,QÿÒƒÄ ë¸jƒÄ Ã�v‹T$‹ƒèƒø ‹L$ÇwLÿ$… �‹Id…Éë!�‹Ahë�vöA.ë‰ö‹Ip…Éë �‹�€…ÀtÇÃ�vŠAƒè<wÇÃ�vWVS‹D$ ‹|$H‹\$‹t$ÇuHÇ>k>‹D$1Ò÷ñ…Ò‰„•@‰‹¯È1Ò‹D$÷ñ…Ò‰t@‰‹ ¯È1Ò‹D$÷ñ‰ëk�vÇ‹Áá‹D$1Òë�‹Ñà‰‹¯È1Ò‹D$÷ñƒø?‰wæ1Ò‹D$÷ñ…Òt.‹@‰‹¯È1Ò‹D$÷ñ…Ò‰t�P‰¯‹D$‰Ó1Ò÷ó‰Á‰[^_ÃUWVSƒì|‹„$”‹x ÆD$‹‹¬$�‰D$P÷Euƒì Uè—êÿÿƒÄ…À…ÆD$�D$0‰D$\ƒì�D$XPUèÝûÿÿƒÄ…À…ò‹D$0f‰G ‹D$4f‰G‹D$8‰GŠD$2ˆGPj +j�wVÿƒÄ j +j�_"SÿƒÄ jhVÿƒÄ jhSÿ[^�GPUèNûÿÿƒÄ…Àuƒì�D$(Pÿu<ÿUlƒÄ…Àuj‹D$ ‰‹D$$ƒì ‰Gj�G4P�G0P�G,Pÿt$<èüÿÿÿ‹D$X™÷|$T‹L$H‹U8‰Ã¯Z‰È1Ò÷ó¹ +1Ò÷ñˆÐ@ˆGƒÄ €|$u ƒì Uè­éÿÿƒÄ1ÀƒÄ|[^_]ÃUWVSƒì,‹|$DŠƒàˆD$ ‹%ð‰Æ‹1íÁî…Ò‹\$@u èüÿÿÿ…À…w‰ð…íˆD$ …‰ŠD$ :s€|$ v +¸éL¶D$ ¶T$ Š”��ƒoþÿÿ=ÆwŠT$ €D$ ë1�v€úÿ¸„�ƒCýÿÿƒøbw€|$ ¸…÷ÆD$ ¶Ò�ÒÁà)Ð�,…P¶D$PjUèüÿÿÿŠUƒÄ÷‰ƈÑtO�ƒ6ýÿÿƒøv8�û+t0�ûÌt(�û/t �û0t�û1t�ûÅt�ûÆu ¾éG‰ö�ƒoþÿÿ=ÆwC�ƒþÿÿƒøv +Æ…ˆÿŠMƒáuƒì Uèøçÿÿ‰ÆƒÄ…ö…Vÿu8WSèüÿÿÿéë�v�ƒCýÿÿƒø{wYÿ$…P‰öƒâ„·ƒì UèæçÿÿƒÄ馉öƒâuƒì Uèšçÿÿ‰ÆƒÄë�v1ö…ö„‚ƒì Uè±çÿÿƒÄé’�ˆÐƒà„Àt]ƒâub�û-tZ�û.tR�û/tJ�û2tB�û3t:�û0t2�û1t*�û,t"�ûÍt�û5t�û6t +¾7é!�ƒCýÿÿƒø{‡ ÿ$…@‰öƒì�GPUèêÿÿéê‰öƒì UèüÿÿÿéÚ‰ö1öéÞ�ƒìÿw ÿ7èüÿÿÿ‰$èüÿÿÿ鶉ö‹Ut…Ò„a�GP�GPÿw ÿu<ÿÒ锃ìWUèÎìÿÿé…�ƒìWUèÚìÿÿéu�ƒìWUè¦îÿÿée�ƒìWUèšñÿÿéU�ƒì ·GP·GPÿwÿw Uèüÿÿÿ‰ÆƒÄ é>�ƒìWUèúñÿÿé!�ƒì Uèüÿÿÿé‰öƒìWUèòÿÿé�ƒìWUè:õÿÿéñ�ƒìWUè +õÿÿéá�ƒìWUèôÿÿéÑ�ƒìWUèVõÿÿéÁ�ƒìWUè2öÿÿé±�ƒìWUè÷ÿÿé¡�ƒìWUè~÷ÿÿé‘�ƒìWUèî÷ÿÿé��ƒìWUèZøÿÿéq�‹U8‹Zd…Û„f‹Gf‰D$�D$P�GP�GPÿu8ÿRd‰Æ·D$‰GƒÄéA‹E8‹P`…Ò„Þ·GPÿw ·GPÿu8ÿÒé�v‹E8‹P\…Ò„¶Q·GPÿw ÿu8ÿÒéë�v‹E8‹@h…À„’ƒìÿw ÿu8ÿÐéʉö‹E8‹@h…Àtvƒì�\$Sÿu8ÿÐƒÄ jSÿw ‰ÆÿƒÄé¥ÿwÿwÿw ÿu8è+øÿÿ邉öPÿwÿw ÿu8è±÷ÿÿëo�v‹E8‹�€…Òtƒì·GPÿu8ÿÒ1öƒÄëX�v¾jëN�ƒì�GPÿu8èøÿÿƒÄë9ƒìWUèFùÿÿë ƒì ¶D$PèåÿÿƒÄ…ÀuCVÿu8WSèüÿÿÿ‰ÆƒÄë�¾…öuQ¶D$PjUèüÿÿÿ‰ÆëR¶D$PjUèüÿÿÿƒÄ‰ðƒÄ,[^_]ÃUWVSƒì,‹=…ÿ…¼èüÿÿÿèüÿÿÿ€=u ÇÇÇëÇÇÇVh€jhÿ1Û¾ƒÄ�ƒûw;ƒì Sèüÿÿÿ‰Fx‰$èüÿÿÿƒÄ ‰F8jljÿvxÿ‹Fx‰ƒÄƆˆÿë +�vÇF8CÇF4�ÆŒƒûv¦èüÿÿÿ¾Ç»¹1Ò‰ö�RBÁàƒúÇ0ÇÇ~ßÇÇÇÆÇèüÿÿÿ…À…vèüÿÿÿèüÿÿÿ…Àtéc¸éY‰ö1Û€=t4¿ƒì �4�VèüÿÿÿƒÄ…ÀuÍ�ÛÁà)؉t‡0C¶9ÃrÑSj hÿhÿ¶ÇD$ƒÄ…À¾£„߉öŠ$‹$ˆ•ˆFAÆF@Æ Qÿv8�D$Ph'èüÿÿÿƒÄ…À…Œ‹$»�…;\$‰F4st‹ ƒùwi½¿‰ö‹$Š�ƒˆ��ÉÁà)È‹VxÁà‰TpƒÀ0‹V8‰(Š$ˆT8ˆ\8‹V4‰�Æ ¡C@;\$£s‰Áƒùv£‹$B¶�ÆŒ9‰$‚#ÿÿÿ1ÀƒÄ,[^_]Ã�WV‹5S…ö»‰ß„¼1ö‰öö t9Q¶C@PjSèüÿÿÿƒÄ…Àu$ƒì Sèüÿÿÿ‰$èÁàÿÿƒÄ ¶C@PjSèüÿÿÿƒÄF�ÃŒƒþv¶1ö€=‰ûtM�R¶C@PjSèüÿÿÿƒÄ…Àuƒì ÿs4èüÿÿÿXÿs4èüÿÿÿƒÄƒì ÿsxFèüÿÿÿ¶ƒÄ�ÃŒ9Ær´ÇÇ[^_Ã@01.01ERROR - prevValue argument is NULL. +Debug: Error - Chains length must between 0 and 32. +Debug: Error - sector verification numbr must be even. +Debug: Error - verify write of BDTL can not accept this value. +Debug: Error - Value must be either FL_ON (1) or FL_OFF(0). +Debug: Error - No such volume, therefore can not change environment variable. +Debug: Error - No such socket, therefore can not change environment variable. +Debug: Error - This global variable is common to all volumes. +Debug: Error - This global variable is common to all sockets and volumes. +Debug: Unknown variable type. +Debug: Variable type is either unknown or not socket related. +Error : change SOCKETS definition in flcustom.h to support that many sockets. +ERROR - structPtr argument is NULL. +Debug: did not recognize format. +ERROR - Must read a multiplication of 512 bytes. +ERROR - Read IPL routine is not registered. +”œ¤´¬¼ü  ü08888888888Ü8888lÜllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllÜÜÜÜÜÜÜ8llllllllllllÜ€!¼!ä!X"p"„"@!P!`!p! "("l | œ < Ð"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"ø"å"å"å"å"å"å"å"°"ôÐ Œ 0!  \ !!à ð !À Ä"ø"å"5.1.4GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.3 2.96-113).symtab.strtab.shstrtab.rel.text.data.bss.note.rodata.str1.32.rel.rodata.rodata.str1.1.comment4ä& Œ>ø %'+('0('62@'€ JÀ+0F „F@ R2ð/aö/7-0jÈ2À % ˆ9ñÿ à1):ÍIìŽ_€ +±k4 |P Ú‹,¡0”¶Ä7ÆüàÎö×á4Jì€EóÈ¡lÅ4L‰*Ø~7X|EÔZS0a[”EdÜe x` +ƒŒŸ­ ÉpØå,±öòÿ)òÿ=òÿK &ØR òÿ[ @òÿi òÿupÔ„Dl�°¾£­p¼ÀÐÜ €òÿá òÿ÷ òÿÿ|# ¦"2<JVH a` pxˆ•ž§òÿ¯»Æ×òÿßÜ=ðûDÐ t¼0#Û!,CNZclòÿt}Š’šòÿ¥®ÃËÙçõblockdev.cgcc2_compiled.mountLowLeveldismountLowLevelfindFreeVolumedismountPhysicalDrivemountVolumedefragmentVolumebdFormatVolumebdFormatPhysicalDrivebdFormatLogicalDrivesectorsInVolumeabsReadabsWriteabsDeleteabsAddressgetBPBchangePasswordwriteProtectsocketInfogetPhysicalInfophysicalReadphysicalWritephysicalErasereadIPLwriteIPLinquireCapabilitiesvolumeInfoinitDoneinitGlobalVarsDoneflMsecCounterflSectorsVerifiedPerFoldingflSetEnvVolumeFlDebugPrintflInitGlobalVarsflUseisRAMflUseNFTLCacheflUse8BitflMaxUnitChainflMarkDeleteOnFlashflSuspendModeflExitflPolicyflVerifyWriteflBusConfigflSetEnvSocketflSetEnvAllflSetDocBusRoutineflFlashOfflGetDocBusRoutineflIdentifyFlashnoOfSocketsvolshandleConversionTableflMutexdismountVolumesetBusyflTakeMutexflSocketSetBusyflNeedVccflDontNeedVccflFreeMutexfindSectorabsMountVolumeflMountdataErrorObjectfromUNALLONGfromUNALflFormattffscpyflDosFormatgetExbInfoplaceExbByBuffertffssetreplaceFATsectortoUNALLONGflBuildGeometrybdCallflInitbdkCallflSocketOfupdateSocketParametersflPreMountflSetEnvVarflmemcpyflmemcmptffscmpflmemsetflSysfunInittlTablenoOfTLsnoOfDrivesnoOfMTDsflRegisterComponentsbdkInitflInitSocketsflCreateMutexflDeleteMutexflExitSocket(l„¢ºÍ*;Oc}‚*˜�*±+K,V,c-n-{.….“/ž/«0¶0Æ1Î2Õ1ß1ö3( +(=4Y5»)ß)*5)}6¡)ÄÉ*äé*ù+9]5„‰*¤©*¹+Å951&>&M9p5}3ž4¼(Æ/Í0Ô1ï;"<G=‰>§=­?¶=Ê== @+>J=P@]>d=»BáCêD$ E0 C9 Fn =z @Ÿ I¼ GË J +K" +K8 +KH +KY +Kž +HÔ +Gç +JY K} KÑ Gé J  *0 LÁ Là L==M1=>Ig=rM­HíNOûN$N\=�P¹M>0=6HG=T=wO�@Ø=îQI=dI’H£O³@zG†J–N·RìGÿJˆL•LïGvSZJ–GªJÚ=&T8TMT�FK*|�*÷£R´R¾!ÅNÏ!ÖN%U“%¥WÅ<é>D=SAüXî @) Y1 Z± QÕ HL"Nì"[ #A#A9#%F#+K#\Q#.Z#N^#]d#_h#^n#Rr#`z#N~#]„#Rˆ#`Ž#_’#^Ÿ#=¥#R¬#=¾#YÉ#9Ü#R$a$b$c#$b($bS$%]$cg$dq$<x$e�$fŽ$g“$h°$<¸$=Â$?È$iã$<ô$>ú$R%<%=%d-%>J%[d%?s%d}%=‚%=�%d–%>Å%=Í%dØ%dì%<&%&=7&AG&@_&Av&<Š&Aœ&F¥&j´&k»&<Î&%Ø&&  $(,048<@DPTX\`dhlptx|€„ˆŒ�”˜œ ¤¨¬°´¸¼ÀÄÈÌÐÔØÜàäèìðôøü  $(,048<@DHLPTX\`dhlptx|€„ˆŒ�”˜œ ¤¨¬°´¸¼ÀÄÈÌÐÔØÜàäèìðôøü  $(,048<@DHLPTX\`dhlptx|€„ˆŒ�”˜œ ¤¨¬°´¸¼ÀÄÈÌÐÔØÜàäèìðôøü  $(,048<@DHLPTX\`dhlptx|€„ˆŒ�”˜œ ¤¨¬°´¸¼ÀÄÈÌÐÔØÜàäèìðôøü  $(,docsoc.o/ 1037556705 0 0 100644 1256 ` +ELF44( +¸ÉöÃ�vÃ�v1ÀÃ�Ã�vÃ�v1ÀÃ�1ÀÃ�Ã�v‹D$Ç@DÇ@HÇ@L Ç@PÇ@TÇ@XÇ@\Ç@` Ç@dÇ@h$Ã�01.01GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.3 2.96-113).symtab.strtab.shstrtab.rel.text.data.bss.note.comment4t  H%¨+¨0¨6¼7ó?Ä0  ô¬ñÿ +&, 3>HZy ˆ$“(K¡ €òÿdocsoc.cgcc2_compiled.cardDetectedVccOnVccOffinitSocketsetWindowsetMappingContextgetAndClearCardChangeIndicatorwriteProtectedfreeSocketdocSocketInitdocMtdVars/6=DKRY`ndoc2exb.o/ 1037556706 0 0 100644 4512 ` +ELF 4( +UWVSƒì‹\$0‹t$4jÿt$0èüÿÿÿ‹T$4‰Ç‹B �€�…ƒÄ9Ãs ¸éЉöQjhÿt$0ÿƒÄ…À…§�æ ‰òfÁê „Ò…“Rjh‹\$0ƒÃSÿƒÄ…ÀtPjh +SÿƒÄ…À…\‹\$ ‹C8¶@Hƒøwÿ$…°ë°ë°ë ¸jé8‰ö‹\$$‹K 1Ò…Ét'¶À9t ‰Î‰ÃB¶ÂƒÇ9ðs9uñë �v‹|$$J‹O ¶Â9ȃí�€ƒì�…Pÿt$0èüÿÿÿ‹T$0�êiÒ‹¯øŠÁê¶Ò�R�’‰ÇÁâ‹G�j0‰…‹G»‰D�J ‹w ‰±‹G‰� ‹|$4‹G‰‹�‰ð)ÈÁè f‰DƒÄ‹T$ ‹B8¶@ƒøtEƒøHt!ëO�vƒøG‹…)ð‹\$ ‰ƒ„ë;�v‹…)ð@‹|$ ‰‡„ë�v‹…)È‹T$ ‰‚„ë¸3ë�1ÀƒÄ [^_]ÉöUWVSƒì ‹T$ �êiÒ‹¯øŠ‰ÐÁèƒ|$0ºtº¶À�@�€·Ò�<…‰T$�o·…‹L$,)‹9ЉÁ~‰Ñ‰ÎS·ÞS)D$0ÿt$0ÿt$0èüÿÿÿZYP·…‡8Pÿ‹T$<Ÿ$‹)؉fµ؃Ä;D$}1Àë�fÇ…¸ƒÄ [^_]ÉöUWVSƒì‹\$0€»ˆÿ‹t$4‹|$D‹l$H…¤º)ò‰ÐÁàЉÂÁâЉÂÁâÐ÷؃ì ÁøPèüÿÿÿ‰F8·ÅPÿt$Pÿt$PSèüÿÿÿƒÄ …À…\öuƒì SèüÿÿÿƒÄ…À…C‰à‹T$@ƒì‰B Pÿs<ÿSlƒÄ…À…%‹S8·B$‹R¯Ð‰è% ‹L$ fÁè Óêf…À‰Vu�RÁè @f‰FÇF +ë��„RfÇF‰FÇG ‹D$@‰x Qÿs8Ph÷èüÿÿÿ‰Â‹ƒ„ƒÄ9G r…Òt ¸4éŸ�‹S8¶JHÓè@‰GÇG ÆGRÿs8ÿt$Hh”èüÿÿÿƒÄ…Àul÷ÅuE‹ƒ„ÆG‰G¡€Pÿs8ÿt$Hh‘èüÿÿÿƒÄ…Àu6Whhÿÿv8ÿƒÄÇF$fÇFfÇFf‰.ƃˆ1ÀƒÄ[^_]ÉöUWVSƒì|‹„$œf‰D$&‹„$ f‰D$$‹„$˜‹¬$�‰D$(�D$.‰D$ ‰è-iÀ‹¯øŠÁø¶À�@�€�4…fÇD$.ÆD$.UÆD$/UPjh�\$�vƒì VÿVPƒÄ…Àu-ƒì VÿVLG¶ÇFÇF ƒÄƒÆl9Ç‚?ÿÿÿ1À[^_Ã�01.01Debug: failed allocating sector buffer. +Debug: failed allocating readBack buffer. +GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.3 2.96-113).symtab.strtab.shstrtab.rel.text.data.bss.note.rodata.str1.32.comment48  +È %l+€  0€62 € F 7WO`0 +  �ˆñÿ ` ` +€ :FS^ i( |4�D¡LW§¤»¸ÌÌÜì<ìˆ\þ (:d$t9ä!PM]dXßr{flsocket.cgcc2_compiled.volsvolBuffersreadBackBuffernoOfSocketsflSocketNoOfflSocketOfflBufferOfflReadBackBufferOfflWriteProtectedflGetMappingContextflMapflSetWindowBusWidthflSetWindowSpeedflSetWindowSizeflSocketSetBusyflIntervalRoutineflVerifyWriteflNeedVccflDontNeedVccflSetPowerOnCallbackupdateSocketParametersflExitSocketflfreeflInitSocketsflmallocFlDebugPrint#/ &6;D^ ez„Ž¡!³½ Í!Øâ ç" ÿQflflash.o/ 1037556706 0 0 100644 3108 ` +ELFÈ4( ‹T$�’�‚�B�…Ã�vƒì ‹D$‹@4‰D$ƒÄ éüÿÿÿ‰öSƒì ·D$ ‹T$‹\$Pƒì Pÿt$,RÿR<ƒÄPSÿƒÄ1À[øÉö¸Éöƒì‹D$jjÿp4èüÿÿÿƒÄÃ�UWVSƒìÿt$0‹D$,ÿp4èüÿÿÿÆD$ƒÄ‹T$$1í…҉ÿðu¿ÿ1ö�‰ú…öˆˆuŠˆD$ ‹D$$…ÀtSh�‹D$0ðPÿt$,ÿT$4ƒÄëÆ�…öu¶+ë3�vЉê8ÐuŠ8D$ tЉèf¶ÒÁà ЋT$ f‰‰øˆë�v‰úˆFƒþ~��Fÿ…ðt‹D$ fÇë �v‹T$ f‰r,ƒÄ [^_]ÃUWVSƒì ‹\$$…Û‹l$ ÆD$ ðuÆD$ ÿQjÿt$0UÿU<ƒÄ‹T$$…Ò‰ÆtVh�jUÿT$4ƒÄë�Æ�fÇE$�vPj·E$¯ED$0PUÿU<‹}$ƒÄf…ÿ‰Æ‰ût!Š¿M,‰ÂŠ1Áâf¶À Âf;U„‡ë�¿M,1Àf…Û”À‰Ã9Ë}_‰ö‹|$$…ÿt Vh�·E$¯ED$0ØPUÿT$4ƒÄë�Æ3�Š3‰Â¿E,�Š0Áâf¶À Âf;Uu&ŠD$ ˆ3¿E,C9Ã|¦‹}$‰øE,f=Ïf‰E$†8ÿÿÿQjÿt$0UÿU<‰ÆŠD$ˆ1Àfƒ}$”ÀƒÄH[ƒàæ^ƒÀ_]ÃSƒì‹D$jÿp4èüÿÿÿ‰ÃŠˆD$ƒÄ„ÀÇD$•ÂJ‹D$ˆ‹D$Š¶È¾Â9Áu%‹D$ŠT$ˆƒì hèüÿÿÿƒÄ¸ë�v1ÀƒÄ[Ã�WVS‹t$‹\$€=¿‰s4uƒì SèkÿÿÿƒÄ…Àt ¸éЉöƒì fÇÆCfÇC"fÇC.ÇC<ÇC@0ÇCLpÇCHhÇCD`ÇCPÇCTÇCXÇCdÇC`ÇC\ÇChÇClÇCpÇCtÇCxÇC|ǃ„ǃ€VèüÿÿÿƒÄ�<…tZǃŒÇƒ�ǃ”ǃ˜ÇƒœÇƒ Çƒ¤ÇƒˆÇƒ¨ÆC ÆCÆC1ö;5ÇCÇCfÇC$fÇC,ÇC ÇC(ÇC †ëƒì SÿµFƒÄ;5‰Ç} …ÿtƒÿouÞƒÿouƒì h@èüÿÿÿƒÄ¸oë8‰ö…ÿtƒì h€èüÿÿÿƒÄ¸ë�‹CÑèÆCt 1Ò�vBÑèuûˆS1À[^_Éö01.01Debug: error, socket window looks like RAM. +Debug: Flash media reported bad download error. +Debug: did not identify flash media. +GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.3 2.96-113).symtab.strtab.shstrtab.rel.text.data.bss.note.rodata.str1.32.comment4( l ¸ %\+`` 0`62€À F@7wO€à + ` + ñÿ `(002`?hLpZ¬o`isy�–ˆÜ¦dH²¿ +ÏÚçóòÿüòÿflflash.cgcc2_compiled.volsflashMapflashReadflashNoWriteflashNoErasesetNoCallbackisRAMnoOfMTDsflFlashOfflMaptffscpyflSetPowerOnCallbackflIntelIdentifyflIntelSizeFlDebugPrintflIdentifyFlashflUseisRAMflSocketNoOfflBusConfigmtdTabledataErrorObjectU›ºþ )ov}„‹ùw³½× Üô ù*fltl.o/ 1037556706 0 0 100644 2940 ` +ELF”4( WVS‹\$‹|$1öë�·C"Æ;ss"ƒì jjh¶K‰øÓàðPSÿSDƒÄ …ÀuÓ[1À^_Ã�UWVSƒì(‹T$@Šƒà¶À‹l$<‹|$DPèüÿÿÿƒÄ�ý'¾u…Àt‹X4…Ûu‹\$4ÇC1À鯉öƒìWPèüÿÿÿ‰D$(ƒÄ…Àt ƒø…¦1Û‹ ë'�[‹……Òt�D$PWÿt$ x ’ ÂÔÙýH   $(,048<@DHLPTX\`dhptx|€„ˆ�”˜œ ¤¨°´¸¼ÀÄÈfatfilt.o/ 1037556707 0 0 100644 7288 ` +ELFà4( +UWVSƒì ‹l$ …ít31ö�} �µ‹;…Àt ƒì PèüÿÿÿƒÄFƒþ Ç;~ÙÇEƒÄ [^1À_]ÃUWVSƒì ‹l$ …í‹|$$tƒÿ ‹E‰ÂÁúƒàƒâƒøƒú~¸ëv�ƒì j(èüÿÿÿ‰ÃƒÄ…Û¾?t[‹EÁç�u ‰‹7…ÀÇCÿÿÿÿÇCÇC ÇCÇCÿÿÿÿÇCÿÿÿÿÇC ÇC$t ƒì PèüÿÿÿƒÄ‰71ö‰ðƒÄ [^_]Ã�vSƒì‹\$‹Cƒø ƒìPSè.ÿÿÿƒÄ…ÀuÿC1ÀƒÄ[Ã�Sƒì‹D$‰ÂƒâÁøƒàƒúƒø~¸ëV���…‹ƒ …Àt@ƒì Pè�þÿÿ‹ƒ ‹@@ƒÄ…Àt ƒì PèüÿÿÿƒÄƒì ÿ³ èüÿÿÿƒÄǃ 1ÀƒÄ[Ã�UWVSƒì ‹l$ ‰ï‰îÁþƒçƒæƒÿƒþ~ +¸錃ì UèKÿÿÿƒÄ…Àu|ƒì jDèüÿÿÿ‰ÃƒÄ…Û¸?tdƒì hèüÿÿÿƒÄ…À‰C@uƒì SèüÿÿÿƒÄ¸?ë:‰ö‰+ÇCÇC1À�S �vÇ‚@ƒø ~ó�¾‰… ÇC<1ÀƒÄ [^_]ÃVS‹\$ …Û‹D$t'1Ò‹H9Ê}‹p‹[<�v�29Øu ¸ë ‰öB9Ê|ë1À[^Éöƒì ‹T$f�ºþUªt*¸ëC�vÁàƒì �DPèüÿÿÿ‹T$$‰ƒÄ1Àë#�v�о1ÀŠ’Â‰ö€útË@ƒø~õ¸ƒÄ ÃWVS‹|$‹G …À‹t$u +1Àé“�vƒì �F PèüÿÿÿƒÄf=uhƒì �FPèüÿÿÿ·ÀƒÄ…Àu‹F ;GuJ·NO;O¸uL·V�D +ÿ;Gu,¶F¯Ðƒì �F� +Pèüÿÿÿ·ÀÁàHÁè �DƒÄ;G t¸ë ¶V 1À9W$•À[^_ÃWVS1ÿ�v‰û1öƒã�‰ðƒàÁàƒì ØPFèPýÿÿƒÄƒþ~䉸ƒì ƒàPèºýÿÿƒÄ…ÀuGƒÿ~ÁÇ1À[^_Ã�UWVSƒìL‹t$`‹\$`Áûƒæ¶ƒã9Æ}ƒû~ ¸é׉ö�³‹<… …ÿuƒì ÿt$lèNýÿÿƒÄ…À…°�³‹… ‰D$‹h@…í¸A„’‰l$ ƒì ÿt$èeûÿÿ‹D$p‰D$0ÇD$@ÇD$D‰l$‰ö‹T$@‹J;s|(;s#‰ð)È‹T$@Áà B QPVSèøûÿÿƒÄ…Àt ë3�v‹Wë �v‹D$@‹W‹HE9ÕŒMÿÿÿ‹D$@‹XF� 9ÆŒ.ÿÿÿ1ÀƒÄ,[^_]ÃUWVSƒì ‹ …É‹l$ ‹|$$uè’õÿÿ‰î‰ëÁûƒæ¶ƒã9Æ}xƒûs�³‹… …Òuƒì UèRóÿÿƒÄ…À…-�³‹… ‹Cƒøu ¸é�v…Àu$‹D$(…Àu1Àéû�ƒì UèoõÿÿƒÄ…À…æ;{}ƒÿ ~ +¸éÒƒ|$(¾3tƒ|$(r%ƒ|$(tVé±�ƒì ÇCUè õÿÿ‰Æé–�…ÿy 1É�C �v‹ˆ…ÒtÇB Aƒù ~ìëU‰ö�C ‹¸…ÀtIÇ@ ë@�ƒ{uZ…ÿxV�C ‹¸…ÀtL‹@ƒøtƒø@t ë*‰öƒøtƒøu�C ‹¸Ç@ 1öë�ƒì hë +‰öƒì h@èüÿÿÿƒÄ‰ðƒÄ [^_]ÉöWV‹S…Ò‹|$uèôÿÿ‰þ‰ûÁûƒæ¶ƒã9Æ}Dƒû?�³‹… …Àuƒì WèÆñÿÿƒÄ…Àu!�³‹… ‹s…öuƒì Wè ôÿÿƒÄ…Àt1Àë‰ö‰Ø[^_Éö01.01Debug: checking FAT type. +Debug: FAT32 detected. +Debug: FAT12 detected. +Debug: FAT16 detected. +Debug: BPB update detected. +Debug: can't ctrl non-existent partition. +Debug: can't ctrl non-FAT12/16 partition. +GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.3 2.96-113).symtab.strtab.shstrtab.rel.text.data.bss.note.rodata.rodata.str1.1.rodata.str1.32.comment4  h %`  +06  >2 …M2À€ ]@7wfè@  (@ñÿ $ €+2LCLµO+^0j°Àrp:ƒ¬`” °¡¼W§±(•¾À ÷ ÒÙâïø ¸ T+ ’7 ~fatfilt.cgcc2_compiled.resetDoneffDiskzeroesdiscardDiskPartsaddDiskPartaddNewDiskPartdiscardDisknewDiskisPartTableWriteisExtPartPresentisBPBchangedresetparseDiskpartEnableFFpartFreeDelClustersflfreeflmallocfromUNALLONGfromUNALnoOfSocketsbdCallFlDebugPrintffCheckBeforeWriteflffControlflffInfo'Šë`s†’— ò  [Ô0E‹,NsÄz¾ 3q49 \rAZÏáæ “   ¥  æ ü Š +! 1 ‹ Á á  $ Š � � •  7Mo|ˆ� ¤ÃÙ÷docsys.o/ 1037556707 0 0 100644 8860 ` +ELF(4( ¸ Éö¸@Éö¸€Ã‰öƒì ÇD$ƒÄ éüÿÿÿ�ƒì ‹D$fÑè·ÀÑàD$·T$‰D$‰T$ƒÄ éüÿÿÿƒì ‹D$fÑè·ÀÁàD$·T$‰D$‰T$ƒÄ éüÿÿÿ�vƒìh`èüÿÿÿ1ÀƒÄÃ�ƒì‹D$ fÑè·ÀÑàD$Pèüÿÿÿ·ÀƒÄÃì‹D$ fÑè·ÀÁàD$Pèüÿÿÿ·ÀƒÄÃ�vƒì ·T$ŠD$T$¶À‰T$‰D$ƒÄ éüÿÿÿ�ƒì ‹D$fÑè·ÀÑàD$ŠT$‰D$¶Â‰D$ƒÄ éüÿÿÿ‰öƒì ·T$ŠD$ÑâT$¶À‰T$‰D$ƒÄ éüÿÿÿ�vƒì ‹D$fÑè·ÀÁàD$ŠT$‰D$¶Â‰D$ƒÄ éüÿÿÿ�ƒì ·T$ŠD$ÁâT$¶À‰T$‰D$ƒÄ éüÿÿÿ‰öƒì·D$ D$Pèüÿÿÿ¶ÀƒÄÃ�vƒì ‹D$©‹T$tfÑè·Àƒì �BPèüÿÿÿƒÄ¶ÄëfÑè·Àƒì �BPèüÿÿÿƒÄ¶ÀƒÄ Ãì·D$ ÑàD$Pèüÿÿÿ¶ÀƒÄÃ�ƒì ‹D$©‹T$tfÑè·Àƒì �‚PèüÿÿÿƒÄ¶ÄëfÑè·Àƒì �‚PèüÿÿÿƒÄ¶ÀƒÄ Ãì·D$ ÁàD$Pèüÿÿÿ¶ÀƒÄÃSƒì‹D$f…À‹\$‹T$‹L$t'·ÀÆÆDÿ‰D$·Á�‰D$‰T$ƒÄ[éüÿÿÿ�ƒÄ[Ã�vSƒì‹L$·T$‹\$·D$щ\$‰D$‰L$ƒÄ[éüÿÿÿ�vSƒì‹L$·T$Š\$·D$‰D$ѶÉD$‰L$ƒÄ[éüÿÿÿUWVSƒì ·D$$‹T$,�<|$ f…Ò‹l$(t+·ò1Û9óÆEÆD.ÿ}‰öƒì �_Pèüÿÿÿˆ+CƒÄ9ó|éƒÄ [^_]Ã�UWVSƒì ·D$$�<1Û·t$,|$ 9ó‹l$(}‰öƒì�_P¶+PCèüÿÿÿƒÄ9ó|çƒÄ [^_]Ã�vUWVSƒì ·D$$�<1Û·t$(|$ 9óŠT$,}¶ê�vƒì�_PUCèüÿÿÿƒÄ9ó|ëƒÄ [^_]Ã�vUWVSƒì ·D$$‹T$,�<…|$ f…Ò‹l$(t+·ò1Û9óÆEÆD.ÿ}‰öƒì �ŸPèüÿÿÿˆ+CƒÄ9ó|éƒÄ [^_]Ã�UWVSƒì ·D$$�<…1Û·t$,|$ 9ó‹l$(}‰öƒì�ŸP¶+PCèüÿÿÿƒÄ9ó|çƒÄ [^_]Ã�vUWVSƒì ·D$$�<…1Û·t$(|$ 9óŠT$,}¶ê�vƒì�ŸPUCèüÿÿÿƒÄ9ó|ëƒÄ [^_]Ã�vUWVSƒì ‹T$,‹L$ ·D$$f…Ò‹|$(�,t}·ò÷ÇÆÆD>ÿt)1Û9ó}d�vƒì Uèüÿÿÿˆ;CfÁèˆ;CƒÄ9ó|äëC‰ö€=uRV�PWèüÿÿÿƒÄë'‰öfÑê1Û·ò9ó}ƒì �D]Pèüÿÿÿf‰_CƒÄ9ó|çƒÄ [^_]Ã�vUWVSƒì ‹|$(‹L$ ·T$$÷Ç‹D$,�, +t51Û·ð9ó}vf¶D;f¶;ÁàƒìÂU·ÒRƒÃèüÿÿÿƒÄ9ó|ÙëM�v€=u·À‰D$(� +‰|$$‰D$ ƒÄ [^_]éüÿÿÿ�fÑè1Û·ð9ó}ƒìU·_PCèüÿÿÿƒÄ9ó|êƒÄ [^_]ÉöUWVSƒì ¶T$,·|$$‰ÐÁà|$ €=‹L$(�u·Á‰|$ ‰D$(‰T$$ƒÄ [^_]éüÿÿÿ�v1Û·ñ9ó}·èƒìWUƒÃèüÿÿÿƒÄ9ó|ìƒÄ [^_]ÃUWVSƒì ‹D$,·|$$|$ f…À‹l$(t*·ð1Û9óÆEÆD.ÿ}�ƒì �_Pèüÿÿÿˆ+CƒÄ9ó|éƒÄ [^_]Ã�UWVSƒì ·|$$1Û·t$,|$ 9ó‹l$(}�ƒìW¶+PCèüÿÿÿƒÄ9ó|êƒÄ [^_]ÉöUWVSƒì ¶T$,·|$$‰Ð1Û·t$(Áà|$ 9ó�}·è�ƒìWUCèüÿÿÿƒÄ9ó|îƒÄ [^_]ÉöUWVSƒì ‹D$$fÑè·À‹T$,�<…|$ f…Ò‹l$(t`·ò÷ÅÆEÆD.ÿt'1Û9ó}F�ƒì Wèüÿÿÿˆ+CÁèˆ+CƒÄ9ó|åë(�vfÑê1Û·ò9ó}ƒì �ŸPèüÿÿÿf‰D]CƒÄ9ó|çƒÄ [^_]Ã�vUWVSƒì ‹D$$fÑè·À‹l$(�<…|$ ÷Å‹T$,t01Û·ò9ó}J�v¶D+¶+ƒìÁàÂWRƒÃèüÿÿÿƒÄ9ó|Þë#fÑê1Û·ò9ó}ƒìW·D]PCèüÿÿÿƒÄ9ó|éƒÄ [^_]Ã�UWVSƒì ‹D$$fÑè·À�<…¶D$,‰ÂÁâ‰Ð1Û·t$(Áà|$ 9ó�,}�ƒìWUƒÃèüÿÿÿƒÄ9ó|ìƒÄ [^_]ÃUWVSƒì ‹D$$fÑè·À‹T$,�<…|$ f…Ò‹l$(t*·ò1Û9óÆEÆD.ÿ}�ƒì �ŸPèüÿÿÿˆ+CƒÄ9ó|éƒÄ [^_]Ã�UWVSƒì ‹D$$fÑè·À�<…1Û·t$,|$ 9ó‹l$(}�ƒìW¶+PCèüÿÿÿƒÄ9ó|êƒÄ [^_]ÉöUWVSƒì ‹D$$fÑè·À�<…¶D$,‰ÂÁâ‰Ð1Û·t$(Áà|$ 9ó�,}�ƒìWUCèüÿÿÿƒÄ9ó|îƒÄ [^_]Éöƒì ‹T$…Ò‹L$u ƒì hÀét÷Á…{‰È%ðƒø„pƒøw …ÀtéB‰öƒø „§é2‰ö‰È%Ç‚ˆt=t~ƒì h é�÷Áuƒì hèüÿÿÿÇ$`éï�vÇ‚œÇ‚˜Ç‚ Ç‚¤Ç‚ŒÇ‚�Ç‚”é±�÷Áuƒì h èüÿÿÿÇ$é�v‰È% =Ç‚œÇ‚˜Ç‚ Ç‚¤t=t3ƒì h@é2‰öÇ‚ŒÇ‚�Ç‚”é�Ç‚ŒÇ‚�Ç‚”éù�‰È%Ç‚ˆt=t~ƒì h éÁ�÷Áuƒì h èüÿÿÿÇ$éŸ�vÇ‚œÇ‚˜Ç‚ Ç‚¤Ç‚ŒÇ‚�Ç‚”éa�÷Áuƒì h`èüÿÿÿÇ$Àé/�v‰È% =Ç‚œÇ‚˜Ç‚ Ç‚¤t=t3ƒì h@éâ‰öÇ‚ŒÇ‚�Ç‚”éÍ�Ç‚ŒÇ‚�Ç‚”é©�÷ÁÇ‚ˆtƒì h€èüÿÿÿÇ$Àëp÷Áuƒì h`èüÿÿÿÇ$ ëR‰öÇ‚œÇ‚˜Ç‚ Ç‚¤Ç‚ŒÇ‚�Ç‚”ëƒì h èüÿÿÿƒÄ¸3ë�‰J1ÀƒÄ Ã�v01.01Wrong customization - 16bit write was used with no implemented. +Wrong customization - 16bit read was issued with no implementation. +Flash record passed to setBusTypeOfFlash is NULL. +ERROR: TrueFFS requires 8-bit access to DiskOnChip memory window + for 8-bit DiskOnChip connected with no address shift. +ERROR: TrueFFS requires 16-bit access to DiskOnChip memory window + for 16-bit DiskOnChip connected with no address shift. +TrueFFS does not support this flash access type (setBusTypeOfFlash). +TrueFFS does not support this number of DiskOnChip data bits (setBusTypeOfFlash). + for 8-bit DiskOnChip connected with a single address shift. +ERROR: TrueFFS requires 32-bit access to DiskOnChip memory window + for 16-bit DiskOnChip connected with a single address shift. + for 8-bit DiskOnChip connected with a double address shift. +TrueFFS does not support this number of DiskOnChip data bits +when connected with a double address shift (setBusTypeOfFlash). +TrueFFS does not support this kind of address shifting (setBusTypeOfFlash). +GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.3 2.96-113).symtab.strtab.shstrtab.rel.text.data.bss.note.rodata.str1.32.comment4À  ÜÀ %ô +ô 0ô 62 € F 7×OàÐ +  °)ñÿ +0Kfx…,(¤­T)ÐÙ€ê” ´!2:Ø#W`ü*~(% P+Â|&ä¤ÀH%F$HglˆˆE�­Ð-ÃÑ0åñ0S +„E$ÌE<WUlIo¸I‡¥�§¬ª¾XpÓÈOú>"XFH ‘b4‡}¼X– [Áp Jí¼ V +©docsys.cgcc2_compiled.flDocMemWinSizeNoShiftflDocMemWinSizeSingleShiftflDocMemWinSizeDoubleShiftflWrite16bitDummyFlDebugPrintflWrite16bitUsing16bitsNoShiftflwritewflWrite16bitUsing32bitsSingleShiftflwritelflRead16bitDummyflRead16bitUsing16bitsNoShiftflreadwflRead16bitUsing32bitsSingleShiftflreadlflWrite8bitUsing8bitsNoShiftflwritebflWrite8bitUsing16bitsNoShiftflWrite8bitUsing16bitsSingleShiftflWrite8bitUsing32bitsSingleShiftflWrite8bitUsing32bitsDoubleShiftflRead8bitUsing8bitsNoShiftflreadbflRead8bitUsing16bitsNoShiftflRead8bitUsing16bitsSingleShiftflRead8bitUsing32bitsSingleShiftflRead8bitUsing32bitsDoubleShiftfl8bitDocReadNoShiftflmemcpy_fromiofl8bitDocWriteNoShiftflmemcpy_toiofl8bitDocSetNoShiftflmemset_iofl8bitDocReadSingleShiftfl8bitDocWriteSingleShiftfl8bitDocSetSingleShiftfl8bitDocReadDoubleShiftfl8bitDocWriteDoubleShiftfl8bitDocSetDoubleShiftfl16bitDocReadNoShiftflUse8Bitfl16bitDocWriteNoShiftfl16bitDocSetNoShiftfl16bitDocReadNoShiftIgnoreHigher8bitsfl16bitDocWriteNoShiftIgnoreHigher8bitsfl16bitDocSetNoShiftIgnoreHigher8bitsfl16bitDocReadSingleShiftfl16bitDocWriteSingleShiftfl16bitDocSetSingleShiftfl16bitDocReadSingleShiftIgnoreHigher8bitsfl16bitDocWriteSingleShiftIgnoreHigher8bitsfl16bitDocSetSingleShiftIgnoreHigher8bitssetBusTypeOfFlash„‰ ©Ê²àúD^}l¶þT¢îEb0q$‘ô0Ct0µC‹éƒ¨ X § ÿ ' +y + Š +  +¥ + ¬ +¾ +È +Ò +Ü + æ +#ð +%ú +'    : D N X i z 3„ 4Ž 5ž /¨ 1² 2É  +Ú ð õ  ü    " ,  6 )@ *J +` e  l Š ” !ž ¨ ¹ Ê 9Ô :Þ ;î 6ø 7 8  " '  . @ E  L Z d "n x  ‚ ,Œ -– .  ¥  ' Py÷"IwžÃ$ù&,('&™(reedsol.o/ 1037556708 0 0 100644 3856 ` +ELF< 4( +S‹L$ŠQƒâf¶Áâ‹\$ Ðf‰ŠA¾Qƒà�âüf˜ÁúÁà Ðf‰CŠA¾Qƒà?�âðf˜ÁúÁà Ðf‰C¾Qf¶A�âÀÁúÁà Ðf‰C[ÃVS‹t$¿ÆÑà1ÉD$f9ñ‹\$ �Pþ}�v‰ØƒàAf‰fÑûƒêf9ñ|ì[^Ã�WVS‹T$‰Ñ¿ÁÑàD$1ÿIf…Ò�Xþ¾~‰öf‹ƒëf…Àt ÷‰ÈÑæIf…Àé[¿Ç^_Éöƒì¿D$P誺ÿf)¿҉$è_˜ƒÄÉöVSQ‹D$f…À‹t$tf…öu1Àë9�vƒì ˜Pèj‰Ã¿Æ‰$è]�ƒÄf=ÿ~-ÿƒì ˜Pè +˜ƒÄZ[^ÉöSƒì¿D$ ¿\$PèlÿÿÿZY˜PSèŠÿÿÿ˜ƒÄ[ÃUWVSƒì fÇD$ +fÇD$þ�v‹D$ ƒì f‹8¿D$P诉Ãf‹D$ÀƒÄf=þ~-ÿÀf=þ~-ÿƒì ˜Pè�f‰D$¾ƒÄ¿ë�ƒì¿ÛS‹T$,¿Æ¿BPèÿÿÿ1ÇXZSUFèôþÿÿƒÄfƒþ‰Ã~уì¿D$P¿ÇPè/ÿÿÿ¿T$‹L$4f‰QƒÄfÿD$ +fÿD$fƒ|$ +ŽEÿÿÿƒÄ [^_]Ã�‹L$1Òf9ʸ}#Ñàf=ÿ~©t -ë‰ö-÷Bf9Ê|ݘÃ�v‹L$1Àf…ɺu ¸ÿÿÿÿÉö˜Ã‰öf9Êt÷Ñâf�úÿ~÷Ât +�êë‰ö�ê÷@f=ÿ~Ó1ÀÃUWVSƒì ‹D$(1íf9Åf‰D$ +fÇD$�ü‰ö¿D$‹T$$‹L$ f‹B¿A�€�Dú‰ÇfÁÿ�ýf)ÐGfƒøuE‹L$,¿Õ�Gf‰Q‰Øƒà‹L$0Áàf‰QE‹D$,¿ÕfÑûf‰‹|$,¿Öf‹Wf9Ouf…öx ‹D$0f Pë‰ö‹\$,Ff‹K¿Æf‰C‹|$0f‹Of‰GfÿD$f9l$|¤ƒÄ [�F^˜_]Ãì¿D$Pè +þÿÿƒÄ1É�1Ò©tºÑà%ÿA Ðfƒù~âƒì ˜Pè¤ýÿÿ˜ƒÄÃ�vUWVSƒì\‹l$p1Ò1Û�¿Ãfƒ|EtBCfƒû~íf…Òu1Àé�fƒúŽÎƒì¿EP¿EPèPüÿÿZY‰Æ¿EP¿EPè=üÿÿ_‰ÃX¿EP¿EPè*üÿÿƒÄf9Þ…Šf9Ã…�ƒì ¿ÛSèAýÿÿƒÄf=žl‹T$tf‰ƒì Sèpûÿÿ‰Â1ÛƒÄ�ƒì¿ÂPPCè‚ûÿÿƒÄfƒû‰Â~ç¿EƒìPƒì ¿ÆP¿ÂPè_ûÿÿƒÄ˜PèUûÿÿ‹Œ$ˆf‰ƒÄ¸é7‰öƒì¿EP¿EPè*ûÿÿZY‰Ã¿EPP‰ÞèûÿÿƒÄf1Æ„’ƒì¿EP¿EPèûúÿÿ_‰ÃX¿EPPèìúÿÿ‰ÚƒÄf1„cƒì¿ö¿ÂVPè&ûÿÿY[‰Ç¿EP¿EPè»úÿÿ‰ÃXZ¿EP¿EPè¨úÿÿ‰ÚƒÄf1„ƒìV¿ÂPèåúÿÿ[^˜‰D$PPèúÿÿZY˜P¿ÇPèÊúÿÿƒÄ �T$Rj +˜Pè½ùÿÿƒÄfƒ|$¸ÿÿÿÿ…F‹|$f‹T$"‰ø1Ðf‰D$<‹D$‰Áf3D$1ø‹\$‰Þ1Ã1Ñf‰T$8f‰D$2‰Úf‹D$3T$ 1È1Ðf3t$f‰D$>f3D$1ð1Øf‰T$@f‰t$:f‰L$6f‰\$0f‰D$4fÇD$Bƒìj +�D$ùÿÿ‹”$ˆf‰‰<$èLüÿÿ‰ÃXZWWèÉøÿÿ‰ÂXY¿ÂP¿ÃPèùÿÿY_‰ÃV¿ÃPèªøÿÿ‰ÃƒÄf…Û¸ÿÿÿÿ„�ƒìÿt$ ¿EPè†øÿÿ‰ÂƒÄf3Uu¸ÿÿÿÿëmƒì¿ÃP¿ÂPè¼øÿÿ‹Œ$ˆf‰AƒÄ‹D$ f9D$~+‹T$tf‰f‹L$f‰J‹D$xf‹‹L$xf‹@f‰f‰Që�vf‹T$‹D$tf‰‹L$ f‰H¸ƒÄ\[^_]Ã�vUWVSƒì4�t$(‹\$HVSèÎöÿÿf¶[f‰\$[_�\$ SVèKøÿÿƒÄ �D$‰D$ P�|$WSètûÿÿƒÄf…Àu1Àé��f…Ày¸ët1É¿Ø9Ù}‰þ½ž� ‰èAf+29Ùf‰2|îƒì ÿt$Xÿt$XSÿt$ Wè@ùÿÿ‹T$dˆƒÄ ‹\$D1ɾ1Ò9Á}‹\$Hf�ƒÄ…À…‹C4f‹4xf‰t$ë)�€út 1À€úU”À‰D$PW·D$"PSè]èÿÿf‰D$*EƒÄf‹D$fƒøÿt)ƒý?w$ƒì·ÀPSèæÿÿZYD$PSèZéÿÿˆÂƒÄ€úÿu¤ƒý@u‹S0fÇD$ÿÿ·Æ€$€‹S0€ jfƒ|$ÿ…ݶ‹S49Åf‹4zr2QjWSè‹ôÿÿƒÄ…Àtƒøv…YƒìWSèiƒÄ…À…D‹S4f‹zf9ðt +‰ÆÇD$ ƒì�D$"PSèþûÿÿƒÄ…À…RW·D$"PSèÙðÿÿƒÄ…À…ü‹C4f‹xf9ðt +‰ÆÇD$ ‹D$…Àt6‹l$ …ít.ƒì·ÆPSèåÿÿY_D$PSè^èÿÿƒÄSjWVèËñÿÿƒÄ…Àtƒøv…ïƒìWV詃ąÀ…ÚQjUVè�çÿÿ‰ÃƒÄ�T$‰T$ ÆD$ÆD$RjSVècåÿÿƒÄ€=u‹Nh‹A4¶P¶€¼‚u +‹F<…Àu‹Nhƒì jjÿt$ �CPÿvhÿQDƒÄ ‹N$‰ÚÓê·Ú‹N0Š <ÿt <ïtƒà<@w3€< y‹F4f‹xf‹D$f9F.v·ÒŠ +©tHˆ +ë¸ë�ÿD$ÿF\‹T$8E9T$‚¶þÿÿ1ÀƒÄ[^_]Ã1ÀÃ�UWVSƒì ‹l$$fÇD$ÿÿÇD$‹]1ÿƒûÿ‹t$ ……‹^…Ût ¸éµ�vƒì�D$PVè6õÿÿ‰ÇƒÄ…ÿt fƒ~ „�·F ¯F‰E1Àé~‹L$…Étf‹D$ +f‰D$ÇD$ë‹D$f;D$ +uƒìSVèßôÿÿ‰ÇƒÄ…ÿu5‹]·N ‹V‰È¯Â9Øs)‹V…Ò…gÿÿÿƒì�\$SVè¢÷ÿÿ‰ÇƒÄ…ÿt‘·N ‹V¯Ê‰M‰øƒÄ [^_]Éö‹D$‹@(ÃSƒì‹\$‹C0…Àt ƒì PèüÿÿÿƒÄ‹C4…Àt ƒì PèüÿÿÿƒÄ‹C8…ÀÇC0ÇC4t ƒì PèüÿÿÿƒÄ‹C<…Àt ƒì PèüÿÿÿƒÄÇC8ÇC<ƒÄ[Ã�v‹D$ÁàÃ�vUWVSƒì‹|$(‹Gh·T$,‹@4Ç@ RWè<àÿÿ‰Æ‹O$¸Óà�,0ƒÄ9‰öƒì ‹GhjhÿwlVÿwhÿP@1ÛƒÄ Pjh·ÃGlPÿƒÄ…Àu8ƒÃf�ûÿvÚƒì ‹GhjjÿwlVÿwhÿP@ƒÄjhÿwlÿƒÄ…Àt1Àë�Æ9îr‚¸ƒÄ [^_]Ã�UWVSƒìx‹œ$ŒfÇD$HÇD$DÇD$@ÇD$<hÀèüÿÿÿ^_Áãÿ´$��«UèæÿÿƒÄ…À…Ö Qjj�t$\VÿƒÄ‹D$ƒì �D$fPèüÿÿÿ‹L$Lf‰M"‰D$P‹M$¸ÓàH‰Eƒé ¸Óà‰E‹”$”»d¶B‰Þ·M")Ưñ‰ð·} )Ï™÷ÿ‰Á‹„$”(H·} f¶H·u"‰|$)t$f‰M¶P)Ó¯\$‰Øº…ëQ÷ê‰ØÁøÁú)ÂÑ·ÁƉ\$ƒÄ9÷f‰M¸@Žw‹M$ÇD$DÓd$D‹E f+E"ƒì f‰EUèääÿÿ‰ÃƒÄ…Û…G·M ·U"‰È)Ð1ÿ9Ã}1Û‹u4fÇ^ÿÿ·M G·U"‰È·ß)Ð9Ã|æ‹E f9ErQÇD$@Qjhÿhÿ1ÿƒÄf;} s_�vƒì·ß‹u0SUèØûÿÿƒÄ…À²ÿu1Òˆ3Gf;} rÛë5�ƒì ‹]hjQÿu0·EPUè Üÿÿ_ZPÿuhÿS@‰D$TƒÄ …À…x‹E0€8u ¸wév‰öfƒE‹”$ˆöB.„Ì·B$¯B¶Z ¿1Ò÷ó9߉D$(�«�‹D$(¯Ç‹M$Óø·Ø‰\$ ‹E0€<ÿuÇD$0Æ‹M$V+M¸ÓàÓã·À‹UhP·ÃPRÿRH‰D$DƒÄ…À…Ö1öƒì ‹]hjjhÿt$8Uè/ÛÿÿZ‰òÁâ YÐPÿuhÿSD‰D$TƒÄ …À…œFƒþ~‹Œ$ˆG¶A 9ÇŒVÿÿÿ1ÿ‹U f9×s·Ï‹E0€<ÿtÆk‹U Gf9×rçfÇE"1ÿ1Òf;|$fƒ|$>†mÿÿÿ‹Œ$„öA…0fƒ}"„%ÆD$Vjh�\$TSÿƒÄ jjF�D$XPÿÇD$T‹M$Ód$T1ÿƒÄ鱉ö‹D$‹”$„;B(u"‹B Š@ˆD$Sj‹B ƒÀP�L$TQÿƒÄ‹D$D9D$4fÇD$<}W‹uh1Ûƒì jj�T$\Rÿt$0Uè~ÖÿÿZY¶T$7ØÐPÿuhÿVD‰D$T‹Eh‰ÆƒÄ f‹NfL$<·D$<‰Ã;\$D}‹D$4…Àt®‹L$4…Ét ëy‹„$„ÿ@(Gf;}"sh·×‰T$‹E0€<ÿu߃ìRUèÉÞÿÿ‰D$DƒÄ…À„"ÿÿÿë=‹Ef‹|$>f9Çf‰D$s+‰ö·×‹E0€<tƒìRUèŽÞÿÿƒÄ‹Ef‰D$Gf;|$r׋T$4…Òt3ƒì hàë1�ƒì Uè»ôÿÿƒÄ¸@ë5�ƒì Uè§ôÿÿƒÄ¸ë!�ƒì h èüÿÿÿƒÄƒì Uèƒôÿÿ‹D$DƒÄƒÄl[^_]ÃVS‹T$ ‹t$‹B(‹Z$‰ˆÙ·B"Óà‰F‹Bx‰F‰^ 1À[^Ã�UWVSƒì ‹|$ ¹…ëQ‰È·W ÷ê‰Ð1Ûf‹O ‹l$,Áèf9Ë‹t$$ÇEs_·À‰D$‰ö·Ó‹G0€<kuD‹E;D$w#‹O$ƒìÓâ@‰‰EjVèüÿÿÿ‰ÆƒÄf‹O ë‰öƒì h@èüÿÿÿƒÄ¸@ë�Cf9Ërª·G ‹O$Óà‹T$(‰1ÀƒÄ [^_]Ã�UWVSƒì`‹D$xÇD$0ÇD$$¶P‹|$t‹\$|jjÁç�l$L¶‡UÆ„ÂÿÇ$ èüÿÿÿYXS�·VèíÚÿÿƒÄ…À…—‹‡h‹T$|‰f‹‡ ‰Âf…ÒLJxfLJtU‰ï�vƒì jjW·FP‹^hVèÊÓÿÿ]ZPÿvhÿS@ƒÄjhWÿƒÄ…Àtf‹F@f‹V f9Ðf‰Fr·ë�f‹V f‹Ff9Ðrƒì h)èüÿÿÿƒÄ¸éò�@f9Ðf‰F +sR�|$0‰öƒì jjW·F +P‹^hVèFÓÿÿZYPÿvhÿS@ƒÄjhWÿƒÄ…Àtf‹F +@f‹V f9Ðf‰F +r·ë�f‹V f9V +rfÇF +ÿÿf‹D$Ff‰F ‹D$Hƒì f‰F"�D$VP¿èüÿÿÿf‹V"‹^$fV ˆÙ‰úƒë ‰|$ÓâˆÙÓd$‰ÅÁí ‹D$J‰V�T(ÿ‰T$‰F‰Ð1Ò÷t$‰Áf‰NˆÙ‰n(·V Óí·N"·Å)ʃÄ9Ð~~fƒ~ +ÿtkf‹D$6f‰F ‹D$8ƒì f‰F"�D$FPèüÿÿÿf‹V"‹^$fV ˆÙ‰úƒë Óâ‰ÅˆÙÓçÁí J�D/ÿ‰V1Ò÷÷‰Áf‰NˆÙ‰n(·V Óí·N"·Å)ʃÄ9Љ~~ ¸é‡‰öƒì Vè#ÚÿÿƒÄ…À…qƒì j·F Pÿv0·FP‹^hVèÑÑÿÿ_]PÿvhÿS@‰ÃƒÄ …ÛtAfƒ~ +ÿ„Ûƒì j·F Pÿv0·F +P‹^hVè”ÑÿÿZYPÿvhÿS@‰ÃƒÄ …Û…™1Àf;FfÇD$&s ‹V4�v·ÀfÇBÿÿf‹D$&@f;Ff‰D$&ræ1É1Àf;N fÇD$&sN�f;F"rf;Ftf;F +t·À‹V0€<ÿtë‹V0·Á€<ÿtÆkë‰öÆjf‹L$&�A‰Áf;N f‰D$&r³1É1Àf;N fÇD$&sK‰ö·À‹V0Šƒèj<v)P�D$0P·ÁPVè8èÿÿ‰ÃƒÄ…Û…Ë‹D$,Fxf‹L$&�A‰Áf;N f‰D$&r·f‹F"‰Áf;N fÇF f‰D$&sP·Ø‰ÚV0Š<t<�u"ƒìSVèLÝÿÿƒÄf‹L$&f;N|ufÇF|ÿÿë‰ö<ïuÆÿf‹L$&�A‰Áf;N f‰D$&r°f‹F"f‹V f9ÐfÇF f‰D$&‰Ás'‹^0�v·À€<ÿu fÿF f‹L$&�Af9Ðf‰D$&‰Árßf‹F"fƒ~|ÿf‰F,ÇF\ÇFXÇFTÇFdÇF`„‘�D$*P�D$,P·F|PVè¬Ïÿÿ‹D$8%ÿf‰D$8ƒÄf;Fs·T$(‹F4f‹Pf;F f‰D$&rƒì h€èüÿÿÿ‰4$èqîÿÿƒÄéEýÿÿ�·Ð‹F0€$€·T$&‹F0€ jUj·D$0PVèÿÝÿÿƒÄ…À…¥fƒ~ uƒì�D$.PVè£âÿÿƒÄ‹\$t‰3ƒì ÇCèÇC ÜÇCŒÇC$4ÇC(Ø5ÇC,0ÇC0Ä*ÇC0ÇC 8ÇC8ð*ÇCÇChCèüÿÿÿƒÄ€=u·F ƒì ÁàPèüÿÿÿ‰F8ƒÄë�ÇF8‹F8…Àt:fƒ~ fÇD$&t<‰Â‰ö·D$&fÇ‚­ÞfÇD‚­Þf‹D$&@f;F f‰D$&rÝë�vƒì hÀèüÿÿÿƒÄ€=u#‹N$·F ƒé Óà‰D$ ƒì Pèüÿÿÿ‰F<ƒÄë ‰öÇF<‹V<…Òt.1À;D$ s6ëƒì VèïìÿÿƒÄ‰ØëU‹V<�ÆU@;D$ rñë�vƒì hèüÿÿÿƒÄ‹Nxºðÿ‰Ó‰È1Ò÷óf¶Òf‰Vt·V‰Ó‰È1Ò÷óÇFf‰Vv1ÀƒÄ\[^_]Ã�vW‹VƒúS¸fe�RÁàÇ€ +Ç€Œ �B£1Ò¿¾»¹ �‰ÐÁàBƒÀ0ƒúÇ8Ç0ÇÇvÖ1À[^_ÃVSƒì‹t$‹\$ h@èüÿÿÿ‹FhƒÄ ‹@4Ç@ jSVè€Ïÿÿ‹FhÇ$jhƒÃSÿvhÿPDƒÄ$[^Ã�vUWVSƒì‹t$0‹F(9FLƒ5ƒì ¶Pèüÿÿÿ‰ÅƒÄ…íuƒì h€èüÿÿÿƒÄé �v‹^L1Ò‰Ø÷v‰Áf‰L$‹V()Ú;T$4v‹T$4‰T$4‹Fh‹@4Ç@ WhhÿÿvlÿƒÄ‹\$4…Û„´‹^L1Ò‰Ø÷vÁâ ‹N$·úºÓâ)ú‹L$4Áê 9щL$v‰T$·D$‰D$‹F4‹L$f‹Hfƒøÿu �‰FLéMƒì·ÀPVè§Ëÿÿø‰D$ƒÄ‹L$1ÿ…É„)�D$‰$�ÇD$ÿÿÿÿRÿt$ÿvLVè:Ðÿÿ‰ÃƒÄƒûÿu‰ú¶ÂÁà ‹\$ ÃìSVè¤ÎÿÿƒÄ,ÿuEƒì ‹FhjhUSÿvhÿP@ƒÄ …À…×PhUÿvlÿƒÄ…À„”ƒìSé‚�ƒì ‹FhjhUSÿvhÿP@ƒÄ …Àt"ƒø…�ƒìSVèáýÿÿY[ÿt$ VèáÝÿÿƒÄ‹T$ƒúÿtCƒì ‹FhjhURÿvhÿP@ƒÄ …ÀuORhUÿvlÿƒÄ…Àtƒìÿt$ Vè‰ýÿÿƒÄG‰ùÿFL¶Á;D$‚ßþÿÿ‹D$fÿD$)D$4…Lþÿÿ1ÀƒÄ[^_]Éöƒìjÿÿt$èšýÿÿƒÄÉöVSS‹\$fƒ{ ‹t$uƒì�D$ +PSè¬ÝÿÿƒÄ…ÀuQj·ÆPSèÔØÿÿƒÄZ[^Ã�UÿKâ“÷UU01.01Debug: media is not fit for NFTL format. +Debug: failed allocating conversion tables for NFTL. +writeAndCheck : The sector was not erased and is ignored +Debug: starting NFTL format. +Debug: NFTL failed while formating the binary partition. +Debug: finished NFTL format. +Debug: ERROR to many bad blocks. +ERROR - a bad unit header encountered. +Debug: NFTL runs without U-cache +Debug: NFTL runs without S-cache +markAsIgnored : A sector is being marked as ignored + +Debug : Can not verify sectors since no buffer was allocated +ANAND„¨¬ Debug: starting NFTL mount. +Debug: not NFTL format. +Debug: finished NFTL mount. +GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.3 2.96-113).symtab.strtab.shstrtab.rel.text.data.bss.note.rodata.str1.32.rodata.str1.1.rodata.comment4(6 HEð %\6 +€6 0€662 6À F2`9aUÁ9]Ã97ú9fh<0 ; ˜A¯ñÿ '1 A0$MTîYDme´'}Ü•‘t ”S¶èÇAÓLTá Pïð[øLS 9Ü+ +(,3Q6 ›B¤ iM [Y°8fôCoì5;|h‰‰€3V—8€§¸õµèµ¿ ŽÉ0ªàܮ쌤ù04ú08u+0ÀË9DŒ 8 +OÄ*+Xð*¯` + jØ5v „“ ­¸ËÔÜêl ùô$-4° @òÿCKX`k��°2|Ÿ§nftllite.cgcc2_compiled.scacheTableonesCountunitBaseAddressgetUnitDatasetUnitDatagetNextUnitgetSectorFlagsFromCachesetSectorFlagsCachegetSectorFlagsfindEndOfEndlessChainvirtual2PhysicalgetFoldMarkgetUnitTailersetUnitTailerinitNFTLinitTablesmarkUnitBadformatUnitwriteAndCheckmarkAsIgnoredlastInChainassignUnitformatChainallocateUnitfoldUnitcheckFoldingfindFreeUnitverifySectorscreateUnitCountfoldBestChainmapSectormountUnitallocateAndWriteSectorwriteSectordeleteSectortlSetBusydefragmentsectorsInVolumedismountNFTLvolsisErasedcheckSum.0formatNFTLNFTLInforeadBBTmountNFTLcheckVolumesectorFlags.1flMaxUnitChainFlDebugPrintflSocketNoOfflBufferOfflReadBackBufferOfflmalloctffssetflVerifyWriteswapUnitsflSectorsVerifiedPerFoldingflMarkDeleteOnFlashflPolicyflfreegetAnandRecfftffscmpfromUNALLONGtffscpytoUNALLONGflAddLongToFarPointerflUseNFTLCacheflRegisterNFTLnoOfTLstlTableÖª;Ð;<2==>"=*?Z@k@„‰<z A +B¹ +¾ +<ã +=÷ +B@=TB`D*=<BP;/C~E•FLG_G€G“G¸ I- J\ Ie Jº ¿ <Ñ ò A!!5!1ÓàÂRUÿU@ƒÄ …Àtƒì hèüÿÿÿƒÄ1ÀëZ�P¡jƒÀPVÿƒÄ…ÀuOCf…ÿ‹ t)f‹q f9ów 1Ò‰Øf÷q·Â‹Q@;B(s�fZ(f9ó†tÿÿÿ·Ã¶I>ÓàƒÄ [^_]Ã�vUWVSƒì ‹D$ f‰D$ +è·…À…]ƒì hèüÿÿÿ‹ƒÄötVVjÿt$,�CPÿƒÄ…Àu8‹ŠC8Cu0f‹T$ +f;Sr%¶K>‹C Óè·S·D$ +9‡óë�‹Qjÿt$,�CPÿ‹ŠBˆB¡f‹L$f‰HfÇ@ +Ç@Ç@ Ç$@èüÿÿÿ‹‹C@f‹sf‹K‰D$1ÿƒÄf9ΉÝ‡‰ð‰úf÷s·Â‹T$éì‰öƒì h€èüÿÿÿ‹Ç$�BjP¶J>·Æ¶ZÓàÃSÿt$ ‹L$$ÿQ@ƒÄ …À… ƒì hÀèüÿÿÿƒÄ ¡jƒÀPÿt$0ÿƒÄ…ÀuXf…ÿu ¡f‰p +¡‹P G…Òf‰p u9f;|$ +v2UjhƒÀPÿƒÄ…Àu‹·T$ +·Ç)жK>Óà‰C ‹Ff‹Kf9ΉÝw$1Ò‰ðf÷s·Â‹S@;B(ƒ ÿÿÿfr(f9Άÿÿÿf;|$ +wƒì hèüÿÿÿƒÄ¸4ëH‰ö·÷¶U>‰ðˆÑ‹{ Óà…ÿ‰Cu ·D$ +)ÆÓæ‰s Rj¡ÿt$,ƒÀPÿ¡€ƒÄ1ÀƒÄ [^_]ÉöUWVSƒì ‹D$4Œ‰D$¡‹x@hjÿt$<ÿÇD$(ÆD$#ƒÄŠL$:O ƒò‰ö‹l$¡fo(·@D$·õ;t$ÇD$ s~1ÛëP‰öƒì jhŒÿt$(¶O‰ò¶ÃÓâÁà ÂRWÿW@ƒÄ …Àt +ƒì h@ëTRjhÿt$ ÿƒÄ…ÀtC€ûv­E·Å‰Æ;t$s‹D$ …Àu1Ûëã�ÇD$ ë݉ö‹l$ …íuƒì h€èüÿÿÿƒÄ¸ë/�1Û‰ö¶Ã‹L$‹�C‹L$0 �€û"véþD$ŠD$:G ‚ÿÿÿ1ÀƒÄ[^_]ÉöUWVS�ìl‹‹z@ÆD$ö…!ŠGˆB>·G$‰D$ ‹_‹5‰Ý¶N>¶W ¯èÓí¶O‰T$™÷|$Óë‰ÑL$ ‰È™÷|$‰Á·Û¯Ùƒì f‰^hÀèüÿÿÿf‹G.ƒÄ©tQjh!�„$\PÿƒÄf‹G.©tRjh�„$\PÿƒÄf‹G.ƒàuƒì hèüÿÿÿƒÄ¸j鳉ö‹_(9ësL�´$@‰öƒì jjV¡¶H>‰ØÓàPWÿW@ƒÄ …À…|Pj�„$XPVÿƒÄ…ÀtC9ër½9ëuƒì h`èüÿÿÿƒÄ¸é@�vf‹G.©t8ƒì h èüÿÿÿƒÄ‹…ÛfÇBt �Cÿf‰BëfÇBÆD$f‹G.ƒà„2ƒì hÀèüÿÿÿÆD$/Y�D$,PèüÿÿÿƒÄ…À…ÉöD$S �\$Du%€=uƒì hèüÿÿÿƒÄ¸4雉ö¶‰ÂÁâÂ�•‰¶T$ƒú¶t$4�ªöC „ �æÿ¿�vþD$·C‰ñ‹-Óàf‰E‹C@Óà¶Hf‰E‰ÐÁàЋD‡@‰E@ŠCˆE;‹ f‹C ¶f‰A<‰ÐÁàÐÁàf‹Tf‰QŠD>ˆA>¶D$¶ЃDƒÃƒø +öC …nÿÿÿ1ö‰ó:\$sZ¶�<@½Š �v¶Á‰ÂÁâÂÁâ�‚‰ó‰D$¶ÃøFˆ (‰ðA:D$Æ‚r΋T$‰ˆ €=w¶¶�@�º€<ÿuƒì h@èüÿÿÿƒÄ¸ë�v¶‰ÐÁàÐ�…£1À�Äl[^_]ÃUWVSƒì‹t$,Ç‹T$4‹D$8‹l$0·\$(ÇPSè]øÿÿ‹=‹W‰‹w ‰u·W¶O>)ÓÓã)Þ‰u‹W@‹R‹L$<‰ƒÄ[^_]Ã�vUWVSƒì‹|$(‹l$,·÷ÿt$0VèøÿÿƒÄ…ÀuS‹·K‰ð)ȶK>Óà‹S )Â9Õvƒì h'èüÿÿÿƒÄ¸4ë�ƒì f‰{‰k$VèÐöÿÿ‹‰B,ƒÄ1ÀƒÄ [^_]ÉöUWVSƒì ·D$$‹5‹n@‰D$‹E9D$w ‹T$;V$v ¸éD�vH‹V,…Ð…Ó¶N>‰ÓÓëf‹N f9ˇ�1Ò‰Øf÷v·Â;E(s](f9ˇ��vƒì jj�|$W¶N>·Ó¶FÓâÐPUÿU@‰ÆƒÄ …ö…°V¡jƒÀPWÿƒÄ…Àt1‹5Cf‹N f9Ëw'1Ò‰Øf÷v·Â‹V@;B(s–fZ(f9Ëv�ë �v‹5f;^ ¸4wx¶N>·ÃÓà‰F,fÿF‹5‹D$‹V$9Ðv‰Ð€~‰Ât€~°u1Àƒì ¶ÀP·ÚSÿt$4ÿv,UÿU@‰ÆƒÄ …ötƒì hèüÿÿÿƒÄ‰ðë�v¡X,)X$1ÀƒÄ [^_]Ã�vUWVSƒì‹t$(‹l$,‹|$0·Þÿt$4SèöÿÿƒÄ…ÀuG‹¶J>‹BÓè·À)ØÓà9ès¸4ë&‰ø‰j4f‰r8ˆB:ƒì Sè×ôÿÿ‹‰B0€"÷1ÀƒÄƒÄ [^_]ÉöUWVSƒì,‹5‹F@·T$D‰D$‰T$‹@9Âw;V4v ¸éÖ�H‹V0…Ð…`¶N>‰ÓÓëf‹N f9ˇ¥1Ò‰Øf÷v·Â‹T$;B(sfZ(f9ˇ„‰öƒì jj�|$4W¶N>·ë¶FÓåèPÿt$4‹L$8ÿQ@‰ÆƒÄ …ö…<Q¡jƒÀPWÿƒÄ…Àt.‹5Cf‹N f9Ëw$1Ò‰Øf÷v·Â‹V@;B(s�fZ(f9Ëv†ë‹5f;^ ¸4‡öF:t!Rj·ëUÿt$$‹T$(ÿRHƒÄ…ÀtéÜ�v·ëë �v‹5‹L$‹A9F4wöF:tPjh�FPÿƒÄëY�f‹^8¿ë �‹5‰ö·Ç‰D$1҉ع +f÷ñ�B0·Ë‹T$ˆD2�‰�€�A‰ÂÁâÐ��Áè‰ÃOfÁëfƒÿw´‹¶J>ƒì Óå‰j0fÿB8jj�BP¶BB0Pÿt$4‹L$8ÿQD‰ÆƒÄ ƒþ…›ƒì jj�\$4S‹¶BB0Pÿt$4‹T$8ÿR@ƒÄ¡jƒÀPSÿƒÄ…Àt ¸鿉öWjh�D$0PÿƒÄ…Àt4ÇD$ƒì jj�D$0P‹¶BB0Pÿt$4‹L$8ÿQDƒÄ …Àuo‹5‹D$‹V49Ðv‰Ð€~‰Ât€~°u1Àƒì ¶ÀP·ÚSÿt$Tÿv0ÿt$4‹T$8ÿRDƒÄ …Àtë$�vƒì hèüÿÿÿƒÄ‰ðë ¡X0)X41ÀƒÄ,[^_]Ã�vUWVSƒì ‹D$$f‰D$ +‹‹j@ÿt$(j·D$¶J>ÓàP·D$,PèüÿÿÿƒÄ…À…eRj¡ÿt$0ƒÀPÿƒÄ j¡hƒÀPÿ‹¶K>‹C0fÇD$ƒÄ‰Æf‹D$ +Óîf9D$ƒëH�v¸4éü‰ö¸éð‰öƒì hèüÿÿÿƒÄ‰Øé×�‹ë F‹f;s w»1Ò‰ðf÷s·Ò‹C@;P(s +fp(f;s wªƒì jj�CP·þ¶K>‰ø¶SÓàÂRUÿU@‰ÃƒÄ …ÛuŒPj¡ÿt$0ƒÀPÿƒÄ…Àu�SjWUÿUHƒÄ…ÀuNƒì j‹j�BP¶J>¶BÓçøPUÿUDƒÄ …Àu%fÿD$f‹D$ +Ff9D$‚9ÿÿÿ‹ÇC41ÀƒÄ [^_]ÉöUWVSƒì ‹D$ f‰D$‹\$(¡ƒ;ÿ‹h@uƒì h€èüÿÿÿƒÄ¸3é¸�ÿt$$j·D$¶MÓàPjèüÿÿÿƒÄ…À…“Vj¡SƒÀPÿƒÄ j¡hƒÀPÿ‹¶K>‹C0fÇD$ƒÄ‰Æf‹D$Óîf9D$ƒ3ë/�vƒì hèüÿÿÿƒÄ‰Øé �¸4é‰ö‹‰öf‹K f9·•1Ò‰ðf÷s·Â‹S@;B(s fr(f9Îwy�vƒì jj�|$W¶K>·Æ¶SÓàÂRUÿU@‰ÃƒÄ …Û…{ÿÿÿSjWÿt$0ÿƒÄ…Àt.‹Ff‹K f9Îw$1Ò‰ðf÷s·Â‹S@;B(s›fr(f9Îv’ë‹f;s ‡@ÿÿÿQj·ÞSUÿUHƒÄ…ÀuMƒì j‹j�BP¶J>¶BÓãØPUÿUDƒÄ …Àu$fÿD$f‹D$f9D$‚üþÿÿ‹ÇC41ÀƒÄ [^_]Ã�ƒì è¬òÿÿ…ÀuJ‹‹B@ö@.tƒì hÀèüÿÿÿƒÄ¸jë$‰ööB<uƒì hèüÿÿÿƒÄ¸më�v1ÀƒÄ Éöƒì èœÿÿÿ…À…ƒ‹öB<@u ƒì hCë)‰ö‹B@‹Hl…Ét‹H|…Ét‹Hp…Ét‹Hx…Éuƒì h èüÿÿÿƒÄ¸jë5‰öPÿt$¶B;Pÿr@ÿуÄ…ÀuP‹‹J@h^¶B;Pÿr@ÿQpƒÄƒÄ Ã�Sƒì‹\$èÿþÿÿ…ÀtƒømtNëQ‹‹B@‹Hx…ɸjtéÙ�ƒþutcéΉö�þåt$�þå ƒþyto鲉ö�þæté£�vfÇå˜ÇA@ëd‰öfÇæ˜ÇA€ëT‰öfÇs˜ÇAë@‰öfÇu˜ÇAë0‰ö�ËfÇv˜f‰Y.ÇAë�ËfÇw˜f‰Y.ÇAfÑbf�I.ë‰ö‹Q0‰ñf¶Áf;u‰ûf¶Ãf;Bu +¸ë�v1À[^_ÉöUWVSƒì‹\$(‹l$,ÆD$h�Sè!ëÿÿZYjSèCãÿÿƒÄ j‹C0·@(Pÿs8ÿ“œ‹C0ƒÄö@tPjhÿs8ÿ“œƒÄƒìjSèãÿÿÇ$ +èüÿÿÿ1öƒÄ�ƒìh ÿs8ÿ“˜ŠT$ÂFˆT$ƒÄƒþ~Ü‹C0ö@t'ƒìhÿs8ÿ“˜ŠT$ˆT$^_hë(�vƒìh ÿs8ÿ“˜ŠT$ˆT$‹C0ZY·@(Pÿs8ÿ“˜‰ÇƒÄƒì j +èüÿÿÿ1öƒÄ‰öƒìh ÿs8ÿ“˜ŠT$ÂFˆT$ƒÄƒþ~Ü‹C0ö@t'ƒìhÿs8ÿ“˜ŠT$ˆT$^Xhë(�vƒìh ÿs8ÿ“˜ŠT$ˆT$‹C0ZY·@(Pÿs8ÿ“˜ƒÄU¶À‰úP¶ÂPSèÎûÿÿƒÄHt1ÀëZƒìfÿC$jSè©áÿÿƒÄ…íu?‹K0€yu6fÇAfÇA +f‹C"H·À‰A·Q·C"¯Ð‰S‹C‰Ó1Ò÷óf‰A ÆA¸ƒÄ [^_]ÉöUWVSƒì(‹t$<ÆD$ÇD$ ÿv4èüÿÿÿˆÃ¶ÛÇ$Àèüÿÿÿ�[Áà‰F0X‹�Z PVèüÿÿÿƒÄ…À…îƒì Sèüÿÿÿ‹V0‰B$‰$èüÿÿÿ‹V0‰B _]jÿv4èüÿÿÿY[húÿv4èüÿÿÿ‹F0Ç@ÆF Æ@fÇF$ÇF fÇF,XZjÿv4èüÿÿÿ‹V0‰B,‰F8‹j,ƒÄ…í„nƒìh„Vè3áÿÿ[_h…Vè&áÿÿZYhÿv8ÿ–˜¶ÀƒÄƒø tKƒø0…1Ûƒìhÿv8ÿ–˜CˆD$+ƒÄƒû~âŠD$<0”°(ЈF‹F0fƒHfÇ@(ë‰ö‹F0fƒ`÷fÇ@(ÆFƒì�D$‰D$ PVè<èÿÿ‹F0ƒÄö@t ƒìhÿv8ÿ–˜ˆD$+]Xhë‰öƒìhÿv8ÿ–˜ˆD$+[_hÿv8ÿ–˜ŠT$+1ˆT$*ƒÄŠD$ƒà„NÇD$ ‹F0Æ@ëEQ¶BPhÿv8ÿ–œ1ÛƒÄ�vƒì¶ÃPVèßÿÿ]XhÿVCèñæÿÿƒÄƒû|Ý‹F0þ@‹F0€x‰Âv°Æ@W‹F0¶@Phÿv8ÿ–œY[jVèßÞÿÿ1ÿƒÄ‰ö1Û;\$ �‚�l$‹D$‰D$ƒìUVè"çÿÿXZSVèAûÿÿƒÄHu+�GˆD$ ‰ø„Àu¿F,‹V0¯FB¿F,¯FD$ë-‰ö‰ø„Àt‹\$ ¿ë�v‰\$ ‰Ú¯V¿N,‹F0¯Ñ‰PC;\$ |‚G‰ø<†gÿÿÿ‹F0Æ@S‹F0¶@Phÿv8ÿ–œƒÄfƒ~$uƒì hèüÿÿÿƒÄ¸é“�ÇD$ƒìÿt$ VèSæÿÿŠD$ˆF ‰4$èÜÿÿƒÄ€~ÇFD°ÇFHÇF@DÇF§äޯĸäQÏ8 ÔÚ +Pâ\ +Fî¤ +Kõð +¿û° Hø JD µü 0, Ñ+G8DHeS°¸]hÛkD½t e‰x3‘¬–™D†¦Ì²ä òÂÏÕÐÔäîú *2@QYfq„�£´Ø$ŠÅÑÜêúd%$ diskonc.cgcc2_compiled.eccONreadeccONwriteeccOFFeccErrormakeCommandbusywaitForReadywriteSignalsselectChipchkASICmodesetASICmodecheckToggleforceDownLoadreadIPLwriteIPLflDocWindowBaseAddresssetAddresscommandselectFloormapWinrdBufwrBufwrSetreadStatusreadCommandwriteCommandwriteExecuteanandMark.0writeOneSectordoc2WritereadOneSectordoc2ReadcheckErasedoc2Erasedoc2MapreadBBTisKnownMediareadFlashIDdoc2000IdentifyFlDebugPrintflMapcheckWinForDOCflFlashOfflBusConfigsetBusTypeOfFlashflDelayMsecsflWriteProtectedtffscmpflSuspendModeflCheckAndFixEDCtffssetflSocketNoOfdocMtdVarsflReadBackBufferOfflBufferOfflSetWindowBusWidthflSetWindowSpeedflRegisterDOCSOCnoOfSocketsflSocketOfdocSocketInitflSetWindowSizeflRegisterDOC2000noOfMTDsmtdTable% *12à4í5ú6×7l ¤ ©1(425?6· +2, 11g8¡ 9 1V9|‚9ñ:©;¸ ½1v:7:W8( -1]<ù* 9ã< *>7Õ7!= ! !1!>'!54!6H!?V!@h!Aw!B¨!2%$ *$1j$q$x$$ˆ$’$™$ $À$ Å$1Û$Dõ$Dü$D +%D%E%D#%F-%Ge%Iw%J{%�%Iinftl.o/ 1037556714 0 0 100644 35556 ` +ELFu4( ŠT$1À„Òt‰ö÷Ât@Ðêuó¶ÀÃ�vUWVSƒì‹\$,‹|$4‹l$8‹3jj�D$P·SF·D$<¶KpÐÓàD$HPÿ3ÿV@f‹T$& T$$f‰‹T$ ‰UƒÄ,[^_]ÃUWVSƒì ‹D$(‹L$,‹\$ ‹l$0f‰D$f‰D$‰ $·T$$‰æƒì ‹;jjV·CF¶KpÂÓâêRÿ3ÿWDƒÄ,[^_]Ã�vVSƒì‹t$ ‹F ·\$$Ækf‹FHf…ÀtHf‰FHƒì h�D$ P�D$"PSVèÿÿÿ‰ÁƒÄ …Éuƒì hÿt$ jSVèRÿÿÿ‰ÁƒÄ ‹V…Òt�[ÑàfÇ­ÞfÇD­ÞƒÄ‰È[^ÃUWVSƒì‹l$0‹t$,h�D$P�D$P·ýWVè°þÿÿ‰ÃƒÄ …Û…‹V…Òt�ÑàÆDÿfÇÿÿfÇDÿÿ‹VÆDÿ‹V…Òt&P¶Npƒé ¸ÓàP‰øÓàhÿ�PÿƒÄƒì ‹jjh·FF¶NpøÓàƒÀPÿ6ÿRD¶Nn¸ÓàƒÄ·À‹PfnF·ÅÓà·ÀPÿ6ÿRHÿF<‰Ã‹D$@‰D$ƒÄ…ÀuÇD$…Ûuƒì ÿt$4ÿt$hi<WVè#þÿÿ‰ÃƒÄ …ÛtƒìWVèdþÿÿƒÄ‰Øë�‹F €<ÿtÆÿfÿFH1ÀƒÄ [^_]Ã�UWVSƒì,‹l$@ÆD$‹M…É‹D$DtQ·À‰D$�@�f‹f=­ÞtAf�|­Þt8‹\$Hf‰f‹D‹\$Lf‰ŠD‹L$Pˆ‹EŠD‹\$Tˆé¼‰ö·À‰D$‹D$XÆƒì ‹Ejj�t$4V·UFT$ ¶MpÓâƒÂRÿuÿP@ƒÄ …À…†‹D$ ‹T$Hf‰f‹D$"‹L$Lf‰ŠD$$‹\$PˆŠD$%‹T$Tˆ1ÿ�v‹L$Hfƒ9ÿuJ‹\$Lfƒ;ÿu@‹D$P€8ÿu7‹T$T€:ÿu.€~ÿu(…ÿ„ÑQhÿt$Uè ýÿÿƒÄ…À„¶éŠF5ªƒì ¶ÀPè4üÿÿƒÄ<vARhÿt$UèeýÿÿƒÄ…À…Ì‹L$HfÇÿÿ‹\$LfÇÿÿ‹D$PÆÿ‹T$TÆÿéV�‹L$HŠA2ƒì ¶ÀPè×ûÿÿ1ۃăàt³‹T$LŠB2ƒì ¶ÀPè¶ûÿÿƒÄƒàtƒËƒì ¶FPèžûÿÿƒÄƒàtƒËƒì ¶FPè†ûÿÿƒÄƒàtƒËˆØ2F÷Ѓà<ˆD<„Î…ÿ~aŠD$ˆD$ŠL$L$©t‹D$ ‹\$Hf‰ŠD$©tf‹F‹T$Lf‰ŠD$©t ŠF‹L$PˆŠD$ƒàtuŠF‹\$Tˆëj�ƒì ‹Ujj�D$$P·EFD$ ¶MpÓàPÿuÿR@ƒÄ …À…†‹D$‹T$Hf‰f‹D$‹L$Lf‰ŠD$‹\$PˆGŠD$‹T$TƒÿˆŽûýÿÿ‹M…Ét>€|$u7‹\$�[‹\$Hf‹Ñâf‰‹\$Lf‹f‰D‹\$PŠˆD‹\$T‹MŠˆDŠD$‹T$Xˆ1ÀƒÄ,[^_]ÉöSƒì‹L$·T$‹A €<‹\$y +¸ÿÿë@�vP�D$ P�D$P�D$P�D$P�D$PRQèüÿÿƒÄ €|$uf;$t¸þÿë·D$ƒÄ[Éö‹L$‹T$‰È+B@Áè ‹RfÁ鶃áÓøƒà¶€Ã�WVS‹D$‹p…ö‹\$ŠL$„Š‹x@‰Ø)øÁè Š0¶ÁƒøU±tƒøU1É…Àë=ÿ±t±‰ØfÁèƒàƒøtƒø…Àtë<ƒøt#ƒøt*ë0�âüë&�âó�� Âë�v�âÏÁáë�ƒâ?Áá Ê)ûÁë ˆ3[^_ÃUWVSƒì ‹l$ ÆD$ ‹]…Ût%ƒìÿt$,UèÿÿÿˆD$ƒÄ<t ¶D$ éõ�vƒì ‹Ujj�\$S‹D$<ƒÀPÿuÿR@ŠD$*ƒÄ :D$ u<ÿtŠ_ˆ^oˆ^p‰ø·P$¯P¶ËÓê�ú€v €ûw�CˆFpŠFp*Foƒì ˆFn‹ÿp4èüÿÿÿ‰$èüÿÿÿ‰F[ÿw4èüÿÿÿ‰$èüÿÿÿ‰F‹G4Ç@ ƒÄ1À[^_Ã�vWVS‹t$…ö‹|$tQj|jWÿZÿv4èüÿÿÿˆGmƒÄƒìVWèÿÿÿƒÄ…Àur·^$¯^¶wp�N÷ºÓâf¶Gp‰ñƒè f‰WTÓëJf‰GVÇG ÇGÇGÇGÇG`ÿÿÿÿfÇGRfÇGFf‰WXf‰_LÇGtÇGd1À[^_Ã�vSƒì‹\$·CLPèüÿÿÿƒÄfƒ{J‰C t·CJƒì ÑàPèüÿÿÿ‰CƒÄ‹S …Òt‹C…Àufƒ{Jt ƒì hëD�¶Cmº Š A„Ɉ u@ƒì hèüÿÿÿ¶Sm¹€‰‘¶Cm‹�ƒÄ…Ûuƒì h@èüÿÿÿƒÄ¸?ë‰ö1ÀƒÄ[Ã�UWVSƒì,‹t$D‰ófƒûÿ‹|$@‹l$HfÇD$u…ítf‰u·ÃéJ‰ö·Ó‹G €<y…ítfÇEÿÿ‰Ðé+�vS�D$/‰D$P�D$2‰D$P�D$5‰D$P�D$6P�D$8PRWècóÿÿƒÄ €|$+t%ƒì h€èüÿÿÿƒÄ…í„ÔfÇEÿÿéɉöf‰t$f‹\$&f;_Lƒ³fƒûÿ„©�D$"‰D$�D$ ‰D$ ‰öQÿt$ÿt$ÿt$ÿt$ÿt$ ·óVWèåòÿÿƒÄ €|$+u‚‹G €<y‹T$$‹D$ f9Âu…ít f‹D$f‰E‰ðëL‹T$$‹D$ f9Ðt…ítfÇEÿÿ·D$ë.‰öf‰\$fÿD$f‹\$"f;_Lsfƒ|$?w +fƒûÿ…iÿÿÿ¸þÿƒÄ,[^_]ÃUWVSƒì ‹|$ ‹‹C4¶P¶Gm¶„Â…À‹L$0‰ÝtHt·ñé��v·ñ‰ðGh9Gd‡‰ë�·ñ‹E4Æ@ƒì ‰ð‹Áà jPÿwÿt$<ÿ7ÿR@ƒÄ …À…÷1Ò9ò}P‰ñ‰ö1Û‹G�vƒ<˜ÿuC�û€|ñB9Ê|äë.‰öƒì‹D$,Áâ ÐPWèúÿÿÇ$ÀèüÿÿÿƒÄ¸é¡‹ƒì ·D$8P‰ðÁà Pÿt$<ÿt$<ÿ7ÿSD‰Å‹‹H4¶Q¶GmƒÄ €¼ÂtÆAƒýu9ƒì h1ÛèüÿÿÿƒÄ9ó}F�v‰ØƒìÁà D$,PWCèˆùÿÿƒÄ9ó|åë&�v1Û9ó}‰öP‰ØjUÁà D$,PWCèÈôÿÿƒÄ9ó|å‰èƒÄ [^_]Ã�vUWVSƒì ŠT$,‹|$ ‹D$(ˆT$ f9GR‹l$$ŠL$0v#·ð‹Wfƒ‰L$�v‰þÁî ·UX‰ð!Ћ ……ÉuƒìWUèFòÿÿˆD$N·UXƒÄ�‡‰ÃÁë ‰D$‰Ø!Ћ……Àuƒìÿt$Uèòÿÿ‹T$ˆBƒÄ·UXŠD$>‹L$:A…Ñ!Ó‹�…Û…À!Ö‹ µ…É…¯¶ÀƒøU„¯ƒøU…À„¢éƒ�=ÿ…wƒì ‹Ejhÿt$(WÿuÿP@ƒÄ …À…èRhÿt$ÿuÿƒÄ…ÀtƒìWUèNõÿÿ^Xÿt$Uè2ýÿÿƒÄSh‹D$PÿuÿƒÄ…À„ýƒìÿt$UèõÿÿZYéÃ�vƒì ‹Ejhÿt$(WÿuÿP@ƒÄ ƒø…¬ƒì ‹Ejhÿt$(WÿuÿP@ƒÄ …ÀtQƒìWUè·ôÿÿ‹EÇ$hÿt$(�ŸSÿuÿP@ƒÄ …ÀtƒìSë:‰öÁë ·EX!ÃÇ�ë+‰ö‰ø·UXÁè !ЃìÇ…�‡PUèJôÿÿƒÄƒìÿt$Uè*üÿÿƒÄë�‰øÁè ·UX!ÐÇ…�Çé�v1Ûë·UX‰øÁè !Ѓ<…„ҷËT$¶ƒøUtsƒøU +…Àtjé´�=ÿ…¨ƒì ‹Ejhÿt$(WÿuÿP@ƒÄ …À…Phÿt$ÿuÿƒÄ…ÀtkƒìWUè‚óÿÿY^ÿt$UèfûÿÿƒÄëP�ƒì ‹Ejhÿt$(WÿuÿP@ƒÄ ƒøuƒìWUèFóÿÿXZÿt$Uè*ûÿÿƒÄ‰øÁè ·UX!ÐÇ…C�Çfƒû†ÿÿÿ€D$¶D$;D$‚¤üÿÿþD$€|$„eüÿÿVÿt$ÿt$Uè²íÿÿ‰ÃƒÄfƒûþt€|$?vƒì h èüÿÿÿƒÄ¸ë+�·ËfC‰ $…üÿÿ‹D$Ed‹T$fÿD$ )T$d…€ûÿÿ1ÀƒÄL[^_]Éöƒìjÿÿt$èÎúÿÿƒÄÉöUWVSƒìL‹t$`‹T$d‹Ff‰T$6·úf‹x¸ÿÿÇD$,ÇD$$ÿÿÿÿf‰D$"f‰D$J‹‹H4¶Q¶Fm€¼‚Š”ÂÇD$ˆT$”D$f;^L¸ƒ¡ÇA ·NVÓç·ÛÿF4‰|$0‰\$‰\$·FF‰ÝŶNpÓå€|$u!ƒìÿ5Vè úÿÿƒÄ…À…S‹D$0‰Fhƒ|$u7Q�D$NPÿt$Vè;õÿÿf‰D$2ƒÄfƒøþ„å·VF·D$"¶NpÐÓà‰D$$f‹D$6f9FRvU‹V ‹L$öuKƒ|$ufƒ|$Jÿt·D$JÆ€ƒì·D$*Pë�‹Vƒì·ÀfÇBÿÿÿt$Vè�øÿÿƒÄé±�v‹V ‹D$€<ˆ_ÇD$(fƒ~T„W�T$D‰T$ ÇD$Dÿt$ jÿÿt$8Vèñÿÿ‰ÃƒÄ9ëu#¶D$…ÀtHtë +�‹L$0;Nds ÿD$,鿉ö1ÿƒûÿto�ƒûþ„ïƒì ‹jhÿvSÿ6ÿP@ƒÄ …ÀtIƒø…ƒì hàèüÿÿÿ‰øƒÄ:r ¸éä‰öÿt$ Sÿt$8Vèqðÿÿ‰ÃƒÄGƒûÿu’ƒûÿtiÿD$,9ëta‹‹@4¶P¶Fm€¼‚u;\$$uD‹T$D…Òu ‹D$h…À„dƒì jjÿvUVèõÿÿƒÄ ÿF0…Àtƒø…f‹|$h…ÿ„$�D$$ÿFhÿD$(ÿD$0·FT�Å9D$(Œ±þÿÿƒ|$huNƒì h �D$PP�D$RPÿt$,Vè’äÿÿƒÄ …À…ƒì hÿt$P·D$RPÿt$,Vè¿äÿÿƒÄ …À…Þ‹\$,…ÛŽ´Q�D$AP�D$DP�D$GP�D$HP�D$JPÿt$,Vè˜æÿÿƒÄ …À…£€|$=¸…“‹‹@4¶P¶Fm€¼‚u&·T$J‹F € €Rh·D$*PVèåÿÿƒÄëY�v‹F ‹T$€ €·L$8‰L$ë0‰ö¸ë7�ƒì h èüÿÿÿƒÄ¸vë�·T$6‹FfÇPÿÿƒìÿt$VèÙõÿÿƒÄƒÄL[^_]ÉöUWVSƒìºÿÿ‹D$4fÇD$ +ÿÿfÇD$‹|$0f‰ÇD$�vfÇD$ ÿÿfÇD$f‹GT@fÇD$f‰D$f‹OJf9L$ƒ1‰ö·\$‹Gf‹Xfƒøÿ„ ·è‹W ŠD<ÿt(ƒà<@v!f‹T$f‰T$ +ƒì h€èüÿÿÿƒÄéщöf‹D$f9GRw4f�|$ÿv fƒ|$ ÿ…ÃìSWèbõÿÿf‹D$@fÿD$f‰GRƒÄ‹W ŠD¾f!Æ„Ïf9t$rw„ÀxsS�D$P�D$"P�D$%P�D$&P�D$(PUWè·äÿÿ‰ÃƒÄ …Û…œ€|$…€f‹T$f9T$utf9t$u f¶D$f9D$sf¶D$f‹T$f‰D$f‰t$f‰T$ f‹OJfÿD$f9L$‚Ñþÿÿfƒ|$ ÿ„µQj·t$‹G·pPWèKðÿÿ‹T$DƒÄfƒøþf‰u¸é�f‹D$f‰D$ ë·RjVWèúùÿÿ‰ÃƒÄ…Ûtƒûvt4ƒì h`èüÿÿÿƒÄ‰ØéË�fƒHwlƒì hÀèüÿÿÿƒÄëK�vƒì hèüÿÿÿ‹G·p‹G Æ`‹T$DfÇÿÿƒÄë�vfƒ|$ +ÿu#‹D$4fƒ8ÿ„&ée�ÿD$ƒ|$ ޵ýÿÿfƒ|$ +ÿ„Iƒì hèüÿÿÿƒÄ‹T$4fƒ:ÿ…ƒì h@èüÿÿÿƒÄfƒHtCf‹_P‰Ø‰ö@f;GLf‰GPrfÇGP·WP‹G €<ÿuPh RWè±áÿÿƒÄ…ÀtRf‹GPf9ØuÅ‹D$4fƒ8ÿ…›ƒì hàèüÿÿÿƒÄ j·\$‹G·XPWèÊîÿÿ‹T$DƒÄfƒøþf‰u&ézþÿÿ�f‹GP‹T$4f‰ƒì h èüÿÿÿƒÄëš�vƒìSWèÆòÿÿƒÄ jSWè^øÿÿ‰ÃƒÄ…Ût!éFƒì hÀèüÿÿÿƒÄ¸?é,‰öfÇD$f‹OJf9L$ƒ‰ö·t$‹GfƒòÿÿÇ$ èüÿÿÿƒÄ �D$P�D$"P�D$%P�D$&P�D$(P‹G·pPWè°áÿÿƒÄ …À…—€|$…{ýÿÿf‹D$f9D$…kýÿÿ‹T$4·Uj‹G·pPWèŽíÿÿ‹T$DƒÄ f‰h SWèàÿÿƒÄ…ÀuGƒì ¶D$&P¶D$)PVSWèZðÿÿƒÄ …Àu)SjVWè)÷ÿÿ‰ÃƒÄ…Ûuf‹OJfÿD$f9L$‚ðþÿÿ1ÀƒÄ[^_]ÉöWVSƒì‹\$ f‹sPfƒ{H‹|$$‰ðw-ƒìWSèÿúÿÿƒÄƒø?…™ƒì h`èüÿÿÿƒÄf‹CP�v@f;CLf‰CPrfÇCP·SP‹C €<ÿuNƒì h�D$P�D$PRSèÞÿÿƒÄ …ÀuDf�|$ +ir4‹F €<x+Pjÿt$$VèîÿÿƒÄ…ÀtUÿt$ PVèÄ÷ÿÿƒÄ…À…Oƒì�D$>PVè×öÿÿƒÄ…À…6‹F‹L$f‹HfƒûÿuÆD$>ÆD$=ëZ�vW�D$CP�D$FP�D$IP�D$JP�D$LP·ûWVèŒ×ÿÿƒÄ …À…ç€|$?…Ò‹D$ f9D$8…ËF €<yÆD$>ƒì ¶D$JP¶D$MPÿt$0·D$NPVèVæÿÿƒÄ …À…•fCu ·T$6‹F Æ€f‹\$6ë‰Ã‹T$dƒì ·D$@‰VhPjÿt$|·VF·Ã¶NpÐÓà·T$2ÐPVèƒäÿÿƒÄ …ÀuB‹L$ f9NRv6‹F‹T$·ƒìÓà‰EjUèüÿÿÿ‹T$<‰Å‹@‰ƒÄ‰ÂF9Þs;T$r´ë‰ö‹L$,‹;T$„$ÿÿÿß;|$‚Hÿÿÿ‹D$ ¶HpÓd$‹D$(‹T$‰1ÀƒÄ [^_]ÃUWVSƒì ‹D$$‹\$(ŠT$01öf9Ø‹|$ ‹l$,ˆT$ t8‰öfƒøþtfƒþ?v¸ë2�ŠL$ ‹W ·Àˆ Q·ÕRPWèÊÿÿFƒÄf9ØuÊ‹G ·ÓŠL$ ˆ 1ÀƒÄ [^_]Ã�vWVSƒì‹t$,h�D$P�D$P·|$ë�v1ÀƒÄ[^ÃUWVSƒì<‹|$P‹t$T·Þ‹G Š<tI<�tE<tA<‚t=ƒì h�D$HP�D$JPSWèÃÂÿÿ‰ÂƒÄ …Ò…=‹D$8GþÿÿƒÄ…Àupë}�·D$0‹W Š<t<�t·Îf‰t$,‰L$ ÆéN‹D$$f9D$*uÆ‹G·T$.f‰4PéÝþÿÿfƒ|$*ÿu ‹G f‰4iëP�vƒìSWèÎýÿÿƒÄ…Àt‹G Æé¬þÿÿ�vƒì·l$2UWè©ýÿÿƒÄ…Àt"‹G ÆD‹G·T$.f‰4P‹G Æ�ésþÿÿ‰ö‹G ƃì h@ +èüÿÿÿƒÄéUþÿÿ‹G Æé²·Þ‹G Š<t<�u7f9t$*…–ƒì j·\$6S·ÅPÿt$8Wèçûÿÿ‹T$L‹Gf‰XƒÄ éþÿÿRÿt$ ÿt$ ÿt$ ÿt$ ÿt$ SWèìÂÿÿ‰ÂƒÄ …Ò…þ€|$5…xÿÿÿf‹L$&f9L$.u*ŠD$3@:D$)u‹G Ɖõ‹t$0ŠD$3fƒþÿˆD$)…Nÿÿÿfƒ|$*ÿu2ƒì j·t$6V·ÝSÿt$8WèIûÿÿ‰Â‹G Æ�‹L$L‹Gf‰ pé~ƒì·\$2SWè]üÿÿƒÄ…Àt>‹G Æ‹G·T$.‹L$,ƒì f‰ Pj·D$6P·ÝSÿt$8Wèêúÿÿ‰Â‹G Æ�ë-�vƒì h@ +èüÿÿÿ·D$6Ç$P·ÅPÿt$8Wè´úÿÿ‰ÂƒÄ ‰ÐƒÄ<[^_]Ã�VSƒì‹t$h€ +èüÿÿÿƒÄ �D$PjVèáñÿÿƒÄ…À…¢ƒì ‹jhÿv¶T$·FD¶NpÐÓàPÿ6ÿS@ƒÄ …Àuu‹V�z,UUªªuif‹f‰FHf‹Bf‰FPf‹Bf‰FR‹B ‰F$‹B‰F(‹B‰F,‹B‰F0‹B‰F4f‹B f‰F8f‹B$f‰F:‹B(‰F<‹B4‰Fdƒì hÀ +èüÿÿÿƒÄ¸ë�ƒì h èüÿÿÿƒÄ1À[[^ÉöVSR1ö€=‹\$u·CL�@ƒì ÑàPèüÿÿÿ‰CƒÄëÇC‹K…Ét21Òfƒ{Lt9ë�v‹K��RÑàfÇ­ÞfÇD­ÞB·CL9Âráë�vƒì h@ èüÿÿÿƒÄ€=u¶Kp·sLƒé ƒì ÓæVèüÿÿÿ‰CƒÄë�ÇC‹S…Òt1À9ðs$ë‰ö‹S�ÆU@9ðróë�ÇD$€ X[^éüÿÿÿ^[^ÃUWVSƒì(‹T$<‰ÐÁà)Ð�<…hÀ èüÿÿÿƒÄ j|j�·Vÿ]Xÿt$@Vè…Êÿÿ‰ÃƒÄ…Ûujj�l$UVèüÿÿÿ‰ÃƒÄ…ۉ؅b‹T$4‹¯¶B;Erƒì hà èüÿÿÿƒÄ¸é5�LJ<‹—‹D$<‰‹U �Õ)ÐÁà·À�D($‰D$f‹@f‰‡N‹L$4¶Q�Õ)Ћ\$�ƒ‰\$ŠEf‹‹T$ˆ‡lf‹Bf‰‡Df‹B¶—pˆÑf‰‡F·ÀÓà‰‡@‹L$‹ˆÑÓàÁè ‰‡\‹T$f‹Bf+B@f9Ãf‰ŸJf‰‡Lvƒì h èüÿÿÿƒÄ¸éV‰öƒì VèûÉÿÿ‰ÃƒÄ…Û…>ƒì Vèüÿÿÿ‹L$D¶Q¶‡mƄƒÄ÷Etƒì VèuüÿÿƒÄ…À…>ƒìjÿ· ¶‡nP·‡LP·‡FPÿ·‹\$XLJtÿSP‰ÃƒÄ …Ûtƒì hé‰ö1Àf;‡LfÇD$s+‰ö·À‹V €<ÿtÆkë‰öÆÿf‹D$@f;FLf‰D$r×1Û‹:X s9�l$‰ï¶ÃÑàf‹8f‹NFf)Êf;VLf‰T$sf9 (v +·Ò‹F ÆkC‹:X rÍ1Àf;FJfÇD$s ‹V�v·ÀfÇBÿÿf‹D$@f;FJf‰D$ræ1É1Àf;NLfÇD$s9�·Ð‹F €<ktƒìRVè®÷ÿÿ‰ÃƒÄ…Û…1f‹L$�A‰Áf;NLf‰D$rÈ1À1Éf;FLfÇFHfÇD$ƒŒ�·À‹V ¶=�t#=� ƒøtƒøtëS=‚t=ÿuEë:·Á€$€ë5�vƒì h"èüÿÿÿY[·D$PVèÅõÿÿƒÄ…Àu·T$‹F ÆÿfÿFHf‹L$�Af;FLf‰D$‰Á‚uÿÿÿ‹N<ºðÿ‰Ó‰È1Ò÷óf‰V8·VJ‰Ó‰È1Ò÷ófÇFPÇF,ÇF(ÇF$ÇF4ÇF0f‰V:fƒ~HuMƒì�D$PVèÖÿÿ‰ÃƒÄ…Ût6ƒû?t!阃ì h€ èüÿÿÿ‰4$è¯îÿÿƒÄ‰Øë|ƒì hÀ èüÿÿÿƒÄ‹D$4Ç@ ¤,Ç@ð/Ç@x.Ç@$41Ç@(p‰0Ç@H$Ç@,Ô1Ç@0¸9Ç@Ð1Ç@ p5Ç@$'Ç@8ä9ƒì h èüÿÿÿƒÄ1ÀƒÄ[^_]ÃUWVSƒì<‹T$P‹l$T‹2ÆD$÷E Š]u +¸méN‹D$\-"ƒø†³‹D$XŠ@ˆD$‹Vx…Ò¸j„!Q�D$2P¶ûWVÿ҉‹L$h·D$>ƒÄ…Ò‰A‰Ð…ù�|$\!tföD$. uƒì h èüÿÿÿƒÄ¸sé΋Fl…Àt‹N|…Ét‹Fp…Àuƒì h6é�‰ö÷E @u ¸né—�RhTWVÿЃÄ‹D$\-!ƒø‡uÿ$…‰ö‹T$X‹BƒÈ÷E @‰Bt&ƒà@…Mƒì h€ èüÿÿÿƒÄ¸é5�vƒà¿‹L$X‰Aé!�ŠD$ƒàt ‹T$XƒJë �‹L$Xƒa÷1ÿ‰ø:F ƒ÷�T$(�L$$‰T$‰L$ ¶ë‰øƒì ¶ØSÿt$ÿt$ UVÿVl‰ÂƒÄ …Òu8S¶F H1Ò9ÔÂRjÿt$4ÿt$4‹\$<…Û¸t‹T$l·BPUVÿV|‰ÂƒÄ …Ò…�G‰ù:N r™éx1ÿ‰ø:F ƒk�T$(�L$$‰T$‰L$ ¶ë‰øƒì ¶ØSÿt$ÿt$ UVÿVl‰ÂƒÄ …Òu9S¶F H1Ò9ÔÂR‹T$`ÿr ÿt$4ÿt$4‹L$<…ɸt·BPUVÿV|‰ÂƒÄ …Ò…ôG‰ù:N r˜éë�vŠD$ƒà:D$u ŠD$ƒàu +¸3éÊ1ÿ‰ú:V ƒ»�L$(�D$$‰L$‰D$ ¶ë‰úƒì ¶ÚSÿt$ÿt$ UVÿVl‰ÂƒÄ …Òu5S¶F H1Ò9ÔÂRjÿt$4ÿt$4‹\$<…Û¸t¶D$$PUVÿV|‰ÂƒÄ …ÒuLG‰ù:N r ëF‰ö‹Vt…Òt ƒìë(‹Vp…Òuƒì h]èüÿÿÿƒÄ¸jë‰öQ‹D$\ÿp ¶ÃPVÿÒƒÄë‰Ðë1ÀƒÄ<[^_]ÉöUWVSƒì8‹T$PŠƒà¶Ð‰ÐÁà)ЋT$P�…‹%ðÁè‹|$L‹l$XˆD$ hà èüÿÿÿXZÿt$P�³VèQÁÿÿƒÄ…Àujj�D$ PVèüÿÿÿƒÄ…À…¾�ÿ'ÇEu‹ƒ¶@‹T$D‰Bé—�v‹ƒ¶$;P�X$v +ÇEë�P �Õ)Ð�ƒ�ÿ!rY�ÿ&v5�ÿ8uIƒ}tKW‹C+C¶NnÓà·ÀP‹CÓà·ÀPÿt$T‹T$XÿRHëƒ}tWÿt$HSVèZûÿÿ‰EƒÄë +‰ö¸3ë�1ÀƒÄ,[^_]ÉöWVSƒì‹\$(…Û‹|$ ‹t$$t2�Fƒì·ÀP‹¶Op‹BÓèf¯B$·ÀPÿӉÃÄ…Ût ƒì W霃ì h�D$P�D$P·öVW謳ÿÿ‰ÃƒÄ …Ûu$R¶On¸Óà·À‹P‰ðÓà·ÀPÿ7ÿRH‰ÃƒÄ…Ûu2‹D$ @…À‰D$ uÇD$ ƒì hÿt$hi<VW袳ÿÿ‰ÃƒÄ …Ût!ƒì h èüÿÿÿYXVWè׳ÿÿ‰<$èwèÿÿƒÄ‰ØƒÄ[^_Ã�vUWVS�ìü‹”$‰ÐÁà)Ð�…‰„$Œ‹„$‹@‰„$ˆ‹„$‹@ ‰„$„‹”$ŠRˆT$vˆT$u‹Œ$ŠI�œ$ÈL$vÆD$`fÇD$XÆD$WÆD$VÆD$w‰\$‰Ú¾D$wfÇBþD$w€|$w~êƒì h`èüÿÿÿƒÄ j|jÿ´$˜ÿƒÄ‹´$ŠF„À„‚‹n(…í~<„s€|$v�hƒìÿ´$ ÿ´$˜è,¿ÿÿƒÄ…À…X‹„$Š@ ‹”$ŒˆD$^ƒì fÇBJR豿ÿÿ‰ÃƒÄ…Û…<‹Œ$Œ‹1¶Ap·~$ˆÁ‹VÓê‰ø¶n ·Ê™÷ý‰Ó�;™÷ý¯Èf‰Œ$À‹œ$¶S·É¯Ñ¹…ëQ‰È÷âÁêJf‰”$¸1ÿ€~ vG�Œ$¸�”$À‰L$$‰Ë‰T$ ‰Õ‰ñ�v�?‹„$Àf‰*‹„$¸f‰G�W¶A 9ÂrÛë��œ$À�´$¸‰\$ ‰t$$·„$À‹”$Œ� ?¯øf‹BL‹\$ f)øf‰‹´$¶V·À»…ëQ¯Ð‰Ø÷âÁê‹\$$Jf‰ŠFÀèƒàPj�´$¸‰t$8Vÿ´$˜èüÿÿÿƒÄ h‰Ã‹„$”ÿp�”$ü‰T$XRÿ�Œ$$‰Œ$€ƒÄ‹´$€~…(ÆD$_ŠV 8T$_ƒ‰öf¶D$_f¯„$À�h‹Œ$Œ·õ‹A €<…݃ì jhÿq‹„$¤¶Hp‰ðÓàPÿ´$4‹”$8ÿR@ƒÄ …Àt=ƒì jh‹Œ$ ÿq‹„$¤¶Hp‰ðÓàPÿ´$4‹”$8ÿR@ƒÄ …ÀuEWjh‹Œ$˜ÿqÿƒÄ…Àu2QjVÿ´$$‹´$(ÿVHƒÄ…Ûu"»ë"�v‹„$ŠP 닌$ŠQ ë +‹´$ŠV þD$_8T$_‚ìþÿÿƒûu‹”$ŠB©t%÷ˆBƒûpuƒì ÿ´$˜èNäÿÿƒÄ¸péH�‹Œ$Œ‹A €8uƒì Qè(äÿÿƒÄ¸wé"�vÆD$_Š\$^1í1ÿ8\$_ƒ“ÇD$,‹L$ �œ$¨‰ö¶T$_Ñâ· +Çf‹ +‹T$,9úf‰D$xs0‰ö‹´$Œ‹F €<ÿt fÿL$xÆkë�ÆÿE·Å9ø‰D$,‰ÂrÒfÿL$x¶D$_Ñà‹t$x‹T$$f;4‚ +f‰4þD$_ŠD$^8D$_r‚‹T$p�¬$¦‰”$€fÇD$xfÇD$z1ÿ‰è‰öÆGƒÿvö‹Œ$ŠQ÷„ò‹ƒøÿu‹\$Lƒâ ‹C €ú ‰tÆAë‰ö‹t$L;F �ß 1ÿ9Ç}`‰ë1ö�‹”$€f‹fT$z‹Œ$€öA t2‹”$¶B‹I9Áƒr f‹D$z‰òf÷´$¸@ˆ‹Œ$‹Gƒ„$€9Ç|¥‹„$€+D$p�À�Ð�Ð�ЉÑÁáÊ�Ð÷ÚÁêf‹\$zˆT$vˆT$`f‰\$x‹„$Š@D$v‹”$ŠRT$v€|$v� R�„$ô‹”$„f)¸f)зÀPjÿ´$ŒÿÆ„$‡ƒÄ‹Œ$€y„®�‹œ$„‹…Àt‹´$ŒH¶NpÓè·À@ë�v1À‹”$„…À‰u$‹Œ$‹A(…Àu €|$w„„€|$w…y‹œ$„‹‹´$€‰¶C ‰F ƒÃf‹ƒÆþD$wfD$x‰œ$„‰´$€‹Œ$¾T$w¶A9ÂŒSÿÿÿ‹„$‹@ ‰„$„‹”$‹B(…ÀŽíöB…㋜$Œ¶KpHÓø·À@‰B(f‹r(ft$xWjhz�„$¤PÿƒÄ jjF�„$¨PÿƒÄ‹„$€xt ‹@(‹T$pëj‰ö‹Œ$ÆA‹A(‹œ$€‰€|$ut"‹´$„¶F ‰C ŠFˆ„$áë�v‹„$€Ç@ �”$Љ”$„ƒ„$€þD$v‹œ$Œ¶Kn‹´$Óf(‹Œ$¶Q¾D$v‹\$L)ЉC ‹D$x1Òf÷´$¸ˆD$]f¶D$^f‰T$JfD$xVjhSÿƒÄ jh�„$üƒÀPÿ‹´$$¶F‰C ‹”$œ¶Bn‰CÇC¶FÆ„$‡ƒÄƒø‰C†*‹Œ$ˆ‹‹œ$;C‚W…Àt‹´$ŒH¶NpÓè·À@ë�v1À‹”$€‰‹Œ$ˆ‹A‰BÇB @‹œ$€f‹‰ÐfAfD$xfS¶A @·Ê‰C ·´$À‰È1Ò÷ö‰ÃC¯Þ‹´$¶V¸d)Я؉غ…ëQ÷âÁêÑ�I‹Œ$·A"‰Ñ¾t$wÁ�\6þt‹”$Œ�Aÿ¶JpÓè@‹L$f‰ ë ‰ö‹D$fÇ‹T$f‹trþþD$wft$xƒ„$ˆ ƒ„$€¶D$w‹L$L;A‚Öþÿÿ‹œ$f¶CfD$xÆD$_ŠD$^1ÿ8D$_s‹T$$¶D$_·BŠL$^þD$_Ç8L$_r狜$€ÇC À‹´$¶F‰C‹”$Œ·BLH‰C¶D$^·T$x�8)Љf‹Cf·È·´$À‰È1Ò÷ö‰ÃC¯Þ‹´$¶V¸d)Я؉غ…ëQ÷âÁêÑ�I‹\$L‹Œ$·A"ÇC‰Ñ¾t$wÁ�\6þt‹”$Œ�Aÿ¶JpÓè@‹L$f‰ ë �v‹D$fÇ‹T$‹œ$€‹ ¿Drþ)Á…ɉ „Ћ´$Œ·FL9Á‡½‹”$¶B C ŠL$v‹\$pˆL$w‰œ$€ë]‰ö‹´$€‹F ©t>‹”$‹Z|…ۄ݃à@tþD$W¶B¶T$W)ЉFë¶D$V‹Œ$€‰AþD$VþL$wƒ„$€€|$wž¶T$W‹œ$;S ‡m¶D$VжS1ÿ9Ð~)éW�vQ‰úhT¶ÂPÿ´$$‹Œ$(ÿQpƒÄG‹œ$¶C9ÇrÐ1Òf‹D$zf÷´$¸ŠT$^8ЈD$_ƒ �‹Œ$1ÿ€yt~�Š\$_8/wd‹´$€~u +�W‰Óë �v�?�P�X¶D$_PjhT‹„$$¶HÓãSÓâR‰új¶ÂPÿ´$4‹Œ$8ÿQ|‰ÃƒÄ …Û…¿‹œ$G¶C9ÇrƒþD$_ŠD$^8D$_‚aÿÿÿƒì h èüÿÿÿf‹„$Š1Òf÷´$ȈD$o¶ÀÑàf‰T$X‹Œ$$‹\$@‹T$4f‹,‹´$€‹If‹fÇ„$ŽÆ„$‡ÿ‰Œ$˜‰´$�f‰„$ŒƒÄEfƒ|$z„{‹D$H¶T$`f‰D$zf)D$|�Õ)Ð�4†‰´$€1ÿ‰T$@�vƒì jh‹”$ ÿr� ?‹\$H‰L$\·¶JpÓàPÿ´$4‹´$8ÿV@‰ÃƒÄ …Û… R‹D$DÁà+D$DÁàP‹”$”‹BƒÀ$Pÿt$|ÿƒÄ ‹Œ$ÿq0‹\$8‹t$L·Pÿ´$˜èÖðÿÿ‰ÃƒÄ…Û…W‹D$D1ö‰D$<�vƒì jh�„$P‹L$H‹\$T‹„$¤· ¶HpÓâ‰ñ¶ÁÁà ÂRÿ´$4‹œ$8ÿSD‰ÃƒÄ …Û…äF‰ð<v¥G¶D$_9džçþÿÿ·Õfƒ|$H‰T$,t+‹Œ$Œ‹A ‰öE·Ý‰\$,€<ktòfÿL$zuëë�·õ‰t$,�„$¨‰D$(é©�ƒì ÿ´$˜èYÙÿÿƒÄ¸@éSPhj�„$üPÿ]ÿ´$˜è)ÙÿÿƒÄ¸é#ƒì ÿ´$˜è ÙÿÿƒÄ¸3éƒì ÿ´$˜èñØÿÿƒÄ¸jéëƒì ÿ´$˜èÕØÿÿƒÄ‰ØéÒ�v·Õ‰T$,�¶L$_� ‹D$(f‹fƒ|$|f‰D$x„Í€|$vˆÂ‰L$8‰T$4fƒ|$~…ÜþL$v‹Œ$€‹T$,‰Qf‹Af‹Ðf‰D$~‹Q ‰Ñ�á@tþD$w¾D$w‹\$f‹CfD$~…Éte…Òy1Wj‹„$ƒÀP�„$œPÿ‹´$$f¶vf‰t$hë_‰öVj‹„$�ƒÀP�„$œPÿ‹„$˜f¶@f‰D$hë.�Sj‹„$ŒƒÀ P�„$œPÿ‹”$”f¶Rf‰T$hƒÄ‹L$|f9L$~v·ùf)L$~fÇD$|ëf‹\$~·|$~f)\$|fÇD$~f‰l$Z‹´$€‹N ÷Á@„@ŠD$]8D$_u)·T$J·D$x)Ћ\$$‹t$4¯ø·)Ó‰ø1Ò÷ó‰\$ë·D$x¯ø‹T$$‹\$4·4‰ø1Ò÷ö‰Ç…ÿ„Ùë +‰ö·Õ‰T$,�‹Œ$Œ‹A ‹\$,€<ÿuX¾D$w�‹t$f‹2f…Àxf…Àu +‹Œ$€‰YH‹\$f‰Q‹´$ÿv0ÿt$4ÿ´$˜è8íÿÿ‰ÃOƒÄ…ÛtMé��‹„$‹P0…Òt9�Eƒì·ÀP‹œ$˜‹´$$¶Kp‹FÓèf¯F$·ÀPÿ҉ÃÄ…Û…]ýÿÿE…ÿ…<ÿÿÿ·Å‰D$,‹”$€‹J fƒ|$~uƒ„$ˆ ÷Á „…‹Œ$€‹A…ÿ‰A„I‰ö‹œ$Œ‹C ‹t$,€<ÿ…ØR‹„$ÿp0VSèjìÿÿ‰ÃOƒÄ…Û…Ã1ö‰ö‹”$‹B(…À~.ƒì H‰B(jj�„$¬P‹œ$¤¶Kp‹D$DÓà�D0Pë6�vƒì jj‹„$˜ƒÀP‹Œ$œ‹œ$¤¶Q‹D$D¶KpÓàòÂRÿ´$4‹”$8ÿRD‰ÃƒÄ …Û…Güÿÿ‹œ$Œ¶Ko¸ÓàÆ¶Kp‰ðÓè…À„OÿÿÿëH�‹´$‹V0…Òt9�Eƒì·ÀP‹œ$$‹„$˜¶Hp‹CÓèf¯C$·ÀPÿ҉ÃÄ…Û…ÙûÿÿE·õ…ÿ‰t$,…¹þÿÿfƒ|$~uƒ„$„‹”$€‹J ë �‹œ$€‹K ƒát{ÿt$8j�„$˜P‹T$8‹D$,‹L$@J·4‰Ð‹œ$˜™¶Kp÷þÓâR‹t$0‹\$Df‹D$j1Òf÷43·ÒÓâR·D$lP‹´$˜¶FPÿ´$4‹”$8ÿR|‰ÃƒÄ …Û…"ûÿÿfƒ|$~u‹D$,‹Œ$€H‰AƒÁ‰Œ$€fƒ|$|t €|$v‰Fûÿÿ¶D$_·”$À‹\$ · C¯Â�<‹T$,9úƒŒ�v‹´$Œ‹F €<ÿu P‹„$ÿp0RVè&êÿÿ‰ÃƒÄ…ÛtL鋌$‹Q0…Òt9�Eƒì·ÀP‹œ$˜‹´$$¶Kp‹FÓèf¯F$·ÀPÿ҉ÃÄ…Û…MúÿÿE·Å9ø‰D$,‰Â‚wÿÿÿfƒ|$~u‹”$€öBó@t‹D$,H‰Bì¶D$_Sj‹L$8·A‰ÆVÿ´$˜èƒéÿÿ‰ÃƒÄ…Û…Ý1ÿƒì jh�„$P‹œ$¤¶Kp‰ò‰øÓâÁà ÂRÿ´$4‹”$8ÿRD‰ÃƒÄ …Û…©ùÿÿGƒÿv³þD$_ŠL$^8L$_sa¶D$_Ñà‹\$0‹t$$f‹,f‹0f‰D$|‹D$pE;„$€‡ƒùÿÿ�vÇ@Ç@Ç@ƒÀ;„$€v߷ʼnD$,é[ùÿÿ�vƒì hèüÿÿÿYÿ´$˜èþÑÿÿƒÄ1À�Äü[^_]Éö‹VƒúS¸f�ƒ�RÁàÇ€xBÇ€ÐJÇ€M�B£1Ò¸ �vÆÿBƒú~ö1Ò¹ ¾»�‰ÐÁà)ÐÁàBǃÀƒúÇ0ÇÇ~Ñ1À[^ÃUÿ01.01XH€JŒJ¤HLIÜIsetUnitData : Failed setting unit data +markAsIgnored : A sector is being marked as ignored + +Debug: media is not fit for INFTL format. + +DEBUG : MTD read BBT routine was not initialized + +Debug: failed allocating conversion tables for INFTL. + +Debug: failed allocating multi-sector buffers for INFTL. + +First In chain found bad unit header +writeAndCheck : The sector was not erased and is ignored +writeAndCheck : Write of a sector failed and was marked as ignored + +Debug : Can not verify sectors since no buffer was allocated + +verifySectors : Bad chain was found +foldUnit : EDC error on folding +foldUnit : Failed to write a sector while folding but will not force folding +FoldBestChains : Skiped unavailable unit +foldBestChains : Folding success, but need more units. +foldBestChains : Failed folding, mark as unavailable and try folding another +foldBestChains : ERROR - Failed folding, with status diffrent then flCanNotFold. +foldBestChains : Failed - not enough units on flash. +foldBestChains : Found a frozen unit. +foldBestChains : No free unit was found so far, so search for one. +foldBestChains : Found a free unit for folding not in place. +foldBestChains : Will force folding on Frozen candidate +foldBestChains : Now free all frozen units. +Debug: Using last free unit of the media. +checkFolding : Perform folding not in place + +writeFullUnit: Found a brocken chain +delete sector : Unit does not apear to have any sectors + +Debug: Too many Bad blocks in quick mount area + +Debug: starting INFTL dismount. + +Debug: with save operation of quick mount data. +Debug: ERROR writing quick mount information. +Debug: Error erasing quick mount information. +Debug: finished INFTL dismount. +Debug: ERROR too many bad blocks (can not find place for INFTL header. +Debug: ERROR reading original unit header. +Debug: Media header was not found on all copies. +Debug: ERROR unerasable BBT not supported by MTD. +Debug: ERROR to many bad blocks. +Debug: We have reached a unit twice while mounting. +Debug: trying to read quick mount information. +Debug: quick mount information was successfuly restored. +Debug: Error getting quick mount information. +Debug: INFTL runs without U-cache +Debug: INFTL runs without S-cache +Debug: starting INFTL mount. +Debug: wrong partition number. +Reported no of virtual unit is larger then no of physical units +Debug: Error going along INFTL chains. +Debug: Not enough free units. Media is read only. +Debug: finished INFTL mount. +Please insert key before trying to change protection attributes +Debug: INFTL reported CHANGEALE protection, but MTD does not allow it. +Debug: starting INFTL preMount operation. +Debug: ERROR failed formating unit. +Debug: starting INFTL format by verifying arguments. +Debug: INFTL format arguments have been verified, starting format. +Debug: finished INFTL format. +BNANDDebug: Error reading BBT. +Orphan unit found +Protection routine are NULL +00000000Protection routine is NULL +„¨¬ 5140GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.3 2.96-113).symtab.strtab.shstrtab.rel.text.data.bss.note.rel.rodata.rodata.str1.32.rodata.str1.1.comment4 d ì�È %Td+`dÀ 0`d:€d06 ´Š0 B2Àd  R2às„adt7›tj8w K H}¡ñÿ $. T<tQJÈ€V`H?kˆ:wÄfƒ,+›X¨¯6¾8kÊФ +Jæôð +J< <x Å"@ ±,ô ¯7 M€ \¤„i(yw¤Ð‚tjŽàkž®L"¼pÈ„"ѨÚß„!ÑìX"Ïù(# H$ð8%ì"$'.<(ºFø+ªT¤,-`Ô,¡nx.xð/DŒ41™—Ð1¡Ô1±Ü1Ö¾´2¼Íp5ÿ Û¸9,åä9píT;uúÌ; +�<Œ=“%°@æ9xBÔD€ILG‚YÐJ>gLõqMz +}…’Ÿª½ÆÔãëô 6JRYp7Eh˜Aàr�„cœ‘™inftl.cgcc2_compiled.scacheTableonesCountgetUnitTailersetUnitTailermarkUnitBaddiscard.0formatUnitgetUnitDatagetPrevUnitgetSectorFlagsFromCachesetSectorFlagsCachegetSectorFlagssetUnitDatatmp.1discardQuickMountInfosectorFlags.2markAsIgnoredvirtual2PhysicalinitINFTLbasicinitINFTLinitTablesmultiSectorBufCountermultiSectorBuffirstInChainwriteAndCheckassignUnitformatChaincreateUnitCountscannedBlocks.3verifySectorscheckVolumefoldUnitfoldBestChainallocateUnitcheckFoldingapplyWearlevelingmapSectorread2SectorsreadSectorsallocateAndWriteSectorswrite2SectorswriteSectorwriteFullUnitwriteMultiSectordeleteSectordefragmenttlSetBusysectorsInVolumeputGetBufferquickMountDatadismountINFTLINFTLInforeadBBTconvertChaineraseOrphanUnitcheckUnitHeadgoAlongChaincheckQuickMountInfomountINFTLvolsprotectionINFTLpreMountINFTLeraseUnitformatINFTLtffssetFlDebugPrintflSocketNoOfflBufferOfflReadBackBufferOfflmallocflVerifyWriteflMaxUnitChaintffscmpflPolicyflSectorsVerifiedPerFoldingdataErrorObjectflAddLongToFarPointerflMarkDeleteOnFlashtffscpyflfreeretrieveHeaderinitCatchflUseNFTLCacheflRegisterINFTLnoOfTLstlTableÉKÚ R´K- +2 +Là + þ + L'  ‘ – L³ ¸ L M N M# OW K` MPPAMePn‡ŒL38LDQâçL+Q?FLúRlO„LÐKJPK¨Û%�SÆSt‘ÊòYSÇ(-LÑTÙQ6UšŸLªRóTTlqLAFLœ¡L»ÀLÐÕL38LQVL¹¾Lÿ L8 = L¥ ª L¹!¾!Lw"|"Lá"Rþ$VÖ&Kþ&W¥'W(Wa*RE,Tl-q-LŽ-Rú.W>/WX/TÐ/W�0X§0T11L3 3Lê3Y4Y4Y84Y/5YC5Yz55L¡5¦5L +6K”6 6¥6L²6¼6É6ZÔ6å6ð67Z7Z47ZG7Z`7e7Lª7K˜8�8L´8¹8LÙ8K69;9LH9;R9S5:::LP:U:L¡:Ó:õ:W? ?L|@�@Lº@¿@LlAqAL„A‰ALŸA]¸APB BLB]/BPhB’B—BL¤B«BKÏB[èBùBþBLCCGCsC~C‰C’C�C°CÇCÎCØCÝCL D\D!DQMDTD\DdDkDuD�D;�DðE;õEL°FµFLÌFÑFLßFæFíFôFûFG GGG G'G.G6G;GLâGçGLH;2H;RH {H€HL—J;œJL KKLK9K[YKrKßLäLL#M²M·MLËMK|O[¢OYP;�PScSK€T;ŽTY£TK€U;‡UY‘U;¢UYY;’Y;óYøYL[Y6\KS]Y„]Y´]Y\cacL†c_¢c`¦c¬c`°c¶c`ºcÂc_ÉcÝcâcçcpBL $mdocplus.o/ 1037556716 0 0 100644 21364 ` +ELFäC4( +‹T$�âñ1ÀJ•À�ÅÃì ¶T$ƒú‹D$ŠL$tƒútƒì hë" ë� ¶Ñƒút ƒútƒì h@èüÿÿÿƒÄ1Àë ‰ö ƒìPÿt$èüÿÿÿ‰ÂƒÄ1À…Ò”ÀƒÄ ÉöVSR‹t$1Û�vPjhÿv8ÿ–œCƒÄƒû~æƒìhFÿv8ÿ–˜ƒÄ%€¶À[^Ã�vWVS‹t$Š\$ƒìh +ÿv8ÿ–˜K‰ÇÁã%Ï ØƒÄ ¶ÀPh +ÿv8ÿ–œƒÄ‰ø[ƒà0^_ÉöVSS‹t$ÆD$1Û‰öƒìhÿv8ÿ–˜ŠT$ÂCˆT$ƒÄƒû~Ü1Û‰öƒìh ÿv8ÿ–˜%ÀƒÄ<Àu¸ë.C�û/u~Óƒì h€èüÿÿÿƒÄ j`h"ÿv8ÿ–œƒÄ1ÀY[^ÉöSƒì‹\$€{ ‹T$v&‹C0¶HÓêˆPP‹C0¶@Phÿs8ÿ“œƒÄƒÄ[Ã�vVSQ‹t$ÆD$1Û‰öƒìhÿÿv8ÿ–˜ŠT$ÂCˆT$ƒÄƒû~ÜZ[^ÃVSƒì ‹\$hxÿs8ÿ“˜1öƒÄ„ÀytPhÿh$ÿs8ÿ“œƒÄ�Qjh.ÿs8ÿ“œFƒÄƒþ~æRjhÿs8ÿ“œ^Xhxÿs8ÿ“˜ƒÄ„Àyƒì hÀèüÿÿÿƒÄ¸së�v1À[[^ÉöVSƒì‹t$Š\$ ÆD$VèüÿÿÿˆØƒÈˆD$ƒÄ ŠD$¶ÀPhÿv8ÿ–œƒÄ ŠD$÷жÀPhvÿv8ÿ–œƒÄƒãu/ƒìhÿv8ÿ–˜ˆD$ŠD$ƒÄƒàtƒì VèÝþÿÿƒÄë1ÀZ[^ÉöVSƒì‹\$SèüÿÿÿYXhÿs8ÿ“˜ˆD$XZhxÿs8ÿ“˜1öƒÄ„Àx ŠD$ƒàu)ƒìjSèÿÿÿ‰Æ‹C0ƒÄ ¶@Phÿs8ÿ“œƒÄY‰ð[^ÃVSƒì ‹\$¶t$jSèâþÿÿƒÄ…Àu9‰òP¶ÂPhÿs8ÿ“œY^htÿs8ÿ“˜ˆÂƒÄ1ÀƒâJ•ÀHƒà‘ƒÀoZ[^Éöƒì ÷D$‹D$tÇD$ƒÄ é{þÿÿ�v‰D$ƒÄ éüÿÿÿWVSƒì‹t$ 1Û1ÿ:^ sO�Q¶ÃPhÿv8ÿ–œXZh ÿv8ÿ–˜%þˆD$ƒÄ ŠD$¶ÀPh ÿv8ÿ–œCƒÄ:^ r²QhÃh~ÿv8ÿ–œƒÄ h€h~ÿv8ÿ–œÇ$dèüÿÿÿƒÄ�Rjhÿv8ÿ–œƒÄ hâhvÿv8ÿ–œ1ÛƒÄ÷öÃtƒÀUëƒèVˆD$PŠD$¶ÀPhÿv8ÿ–œƒÄ ŠD$÷жÀPhÿv8ÿ–œZYhÿv8ÿ–˜ŠT$ƒÄ8ÐuCG€û v•€û w �ÿß“†Xÿÿÿ1Û:^ s�ƒì¶ÃPVèþÿÿƒÄ…ÀuC:^ ræ1ÀƒÄ[^_Ã�Sƒì‹\$hFÿs8ÿ“˜ˆD$XZhFÿs8ÿ“˜ŠT$1ˆT$ŠT$1Àƒâ•ÀƒÄ[Ã�vUWVSƒì‹l$,‹\$0ÆD$Uèüÿÿÿ‰Çƒì ‰_8�4­»ÿ4è¶ùÿÿƒÄ¶ÀPjÿ4Wè¼ùÿÿƒÄ 1Û…À„¢�vƒìhÿÿw8ÿ—˜ŠT$ÂCˆT$ƒÄƒû~܃ìhÿw8ÿ—˜ZYhvÿw8‰Æÿ—˜ˆD$ÆD$ƒÄ ŠD$¶ÀPhÿw8ÿ—œƒÄ ŠD$÷жÀPhvÿw8ÿ—œŠD$ƒÈˆD$ƒÄ ŠD$¶ÀPhÿw8ÿ—œƒÄ ŠD$÷жÀPhvÿw8ÿ—œ[Xhÿw8ÿ—˜ˆD$ŠD$ƒÄ<@t ŠD$  ŒOè %ô>+ô>0ô>62 ? F CN2"C%]GC7~CfìE€ 3 lKñÿ /vA�EJ$ŽW´=c,šzÈ’†ÐZ–,0 \o®ÌEº�Ñœ +ÞÜ| GäÄ Üê ´ñT›ýð0 œ¼�"Lö3DVCœpO i`xÞnXé}Dʆݕ¡ðN±@!Þ» $‘Å´&3Íè&‚Õ- Ý .æ85Gï€6�÷7Ôÿä8h *ØJ9ô8J\tVcv€Œ�«¼ÄÌl+¦ÝêòL9Ä  +?PVj~’¡¯>ŠÄÐÛéùœ>$ mdocplus.cgcc2_compiled.chooseDefaultIF_CFGsetDOCPlusBusTypeeccErrorwaitForReadyselectFloorrecoverFromAccessErrorsetASICmodechkASICDownloadpowerDownforceDownLoadcheckToggleflDocWindowBaseAddresssetAddresscommandrdBufrdBufSreadCommandreadStatuswriteCommandwriteExecutewriteDataPlusEDCreadDataPlusEDCsetExtraPtrsetSectorDataPtrreadExtraAreareadSectorDatadoc2ReadwriteExtraAreaanandMark.0writeSectorDatadoc2Writedoc2Erasedoc2MapreadBBTreadIPLwriteIPLwriteOTPotpSizereadOTPgetUniqueIdFlDebugPrintsetBusTypeOfFlashsetIplSizePlusreleasePowerDownchkASICmodeflDelayMsecscheckWinForDOCPLUSflFlashOfflBusConfigflCheckAndFixEDCflSuspendModeflWriteProtectedtffscmptffscpychangeInterleaveflSocketNoOftffssetdocPlusIdentifydocMtdVarsflReadBackBufferOfflBufferOfflSetWindowBusWidthflSetWindowSpeedflMapprotectionBoundriesprotectionKeyInsertprotectionKeyRemoveprotectionTypeprotectionSetflRegisterDOCPLUSSOCnoOfSocketsflSocketOfdocSocketInitflSetWindowSizeflRegisterDOCPLUSnoOfMTDsmtdTable6Z_3z4�’3ª¯3Ü6g6ð8*:>;ˆ;ž;²;j:u;Ì6ß ;õ ; +;r7>7!3 <3L=Ö#… #M!=s!><" #æ#?õ#&ú#3\$={$>I%7;&@&3‘'@Û(@L+Q+3ˆ+B‘+;¾+Bg-7š-5 .5….7¯.´.3Ò.×.3ñ.&/A)0@C0Cº3@Ô3Cã47í4A^57â5Cù5@76CE77J8@Ó8@î87>9@[9Bg9l93w9E‚9F�9G¢9H®9Iº9Jà9;`:;9<A÷<ü<38===3r=y=€=‡=‘=›=¢=©=°=·=¾=Å=Ì=Ó=KÚ=Lá=Mè=Nï=Oú=ÿ=3>Q->Q4>QB>QH>RQ>Q[>Se>T�>V¯>W³>D¹>VX7protectp.o/ 1037556716 0 0 100644 4468 ` +ELFX 4( VSQ‹\$1ö€{ t>�ƒìh ÿs8ÿ“˜ƒÈˆD$ƒÄ ŠD$¶ÀPh ÿs8ÿ“œF¶C ƒÄ9Æ|ÃZ1À[^Ã�UWVSƒìŠD$0‹t$,ˆD$Š\$flInitFlInit->flCountVolumesFlInit->flIdentifyProtectionFlMount->flAbsMountVolumeFlDismount->flDismountVolumeFlRead->flAbsReadFlWrite->flAbsWriteFlIoctlFlGetNumberOfSectors->flSectorsInVolumeFlRemoveProtectionFromParm->flInsertProtectionKey8Xx˜¸Øø8Xx˜¸Øø8Xx˜¸Øø8TpŒGCC: (GNU) 2.96 20000731 (Red Hat Linux 7.3 2.96-113).symtab.strtab.shstrtab.rel.text.data.bss.note.rodata.str1.1.rodata.str1.32.rel.rodata.comment4à ¬  %+   0 624¨E2à€ Y` pU Ìà aÐ 7 +j¤   ¤ñÿ  & € +.s5<GN[tQcÈsØ}슘Q£h¸pQÍÄnÔ4nܤa÷Öÿtffs2lnx.cgcc2_compiled.statioreqdevicesFlInitflInitnoOfDrivesbdCallFlErrorPrintFlMountFlGetProtectionFlIsExistFlIsReadProtFlIsWriteProtFlDismountFlGetNumberOfDevicesFlGetNumberOfSectorsFlReadFlWriteFlRemoveProtectionFromParmFlIoctlflIOctl%0ISXbi}‚¢«´»ÅÊÔÛ+8DI€…�”ž©®Ñâô %/4>INi|�‹�š¥ +ª¹Ýâìòøþ MR\bhns}ˆ�³ÎØã +èö'4 <BH\bh|‚ˆœ¢¨¼ÂÈÜâèü"(<BH\bh|‚ˆœ¢¨¼ÂÈÜâèü"(<BHZdjz„Šœ¢¨¼ÂÈÜâèü"(<BHX^dtz€²·ÈÍ  $(,048<@DHLPTX\`dhlflcustom.o/ 1037556717 0 0 100644 1632 ` +ELFÀ4( +Sƒì �D$P�D$P�D$P�D$P�D$PhhhhhèüÿÿÿƒÄ,�\$Sÿt$ jfèüÿÿÿƒÄ Sÿt$jèüÿÿÿƒÄ Sÿt$hÊèüÿÿÿƒÄ Sÿt$hËèüÿÿÿƒÄ Sÿt$jeèüÿÿÿƒÄ([Ã�vVSƒì ÿ5ÿ5èüÿÿÿ‰ÆƒÄ…öu +èüÿÿÿèüÿÿÿƒìÿ5ÿ5èüÿÿÿ‰ÃƒÄ…Ûuèüÿÿÿèüÿÿÿèüÿÿÿ…öt …Û¸<u1ÀZ[^Ã01.01GCC: (GNU) 2.96 20000731 (Red Hat Linux 7.3 2.96-113).symtab.strtab.shstrtab.rel.text.data.bss.note.comment4 °°%4+4046H7?Pp + Àïñÿ ")•5òÿ?òÿNòÿYeq˜h†›­½Îàflcustom.cgcc2_compiled.dwWinHdwWinLflSetEnvVarflUse8BitflUseNFTLCacheflUseisRAMGetFlParamsflSetEnvAllflRegisterComponentsflRegisterDOCPLUSSOCflRegisterDOCPLUSflRegisterINFTLflRegisterDOCSOCflRegisterDOC2000flRegisterNFTL # ( -27JYk}ŒŸ¥ª¸½ÆÌÑßäé \ No newline at end of file diff -Naur linux-2.4.23/drivers/block/doc/tffs2lnx.h linux-2.4.23_TS_2_5/drivers/block/doc/tffs2lnx.h --- linux-2.4.23/drivers/block/doc/tffs2lnx.h Wed Dec 31 17:00:00 1969 +++ linux-2.4.23_TS_2_5/drivers/block/doc/tffs2lnx.h Tue Aug 10 15:17:44 2004 @@ -0,0 +1,67 @@ +/* + * $Log: tffs2lnx.h,v $ + * Revision 1.2 2004/08/10 22:17:44 eddie + * This library is required to compile the disk on chip module. + * + * + */ + +/***********************************************************************************/ +/* M-Systems Confidential */ +/* Copyright (C) M-Systems Flash Disk Pioneers Ltd. 1995-2002 */ +/* All Rights Reserved */ +/***********************************************************************************/ +/* NOTICE OF M-SYSTEMS OEM */ +/* SOFTWARE LICENSE AGREEMENT */ +/* */ +/* THE USE OF THIS SOFTWARE IS GOVERNED BY A SEPARATE LICENSE */ +/* AGREEMENT BETWEEN THE OEM AND M-SYSTEMS. REFER TO THAT AGREEMENT */ +/* FOR THE SPECIFIC TERMS AND CONDITIONS OF USE, */ +/* OR CONTACT M-SYSTEMS FOR LICENSE ASSISTANCE: */ +/* E-MAIL = info@m-sys.com */ +/***********************************************************************************/ + +#ifndef ___TFFS2LNX__H__ +#define ___TFFS2LNX__H__ + +/* Set DiskOnChip Window Address */ +#define FL_DOC_WIN_SIZE 0x2000l +#define FL_DOC_PHYS_ADDR_LOW 0xC8000l +#define FL_DOC_PHYS_ADDR_HIGH 0xDE000l + +void fl_docCsInit( void ); +int fl_mapPhysMem( unsigned long winl, unsigned long winh ); +void fl_releasePhysMem( unsigned long winl, unsigned long winh ); + +/* Driver Functions */ +unsigned char FlInit(void); +unsigned char FlMount(unsigned char bDevice); +unsigned char FlIsExist(unsigned char bDevice); +unsigned char FlIsReadProt(unsigned char bDevice); +unsigned char FlIsWriteProt(unsigned char bDevice); +unsigned char FlGetProtection(unsigned char bDevice); +unsigned char FlRemoveProtectionFromParm(unsigned char bHandle,unsigned char*pKey); +unsigned char FlDismount(unsigned char bDevice); +int FlGetNumberOfDevices(int max); +unsigned long FlGetNumberOfSectors(unsigned char bDevice); +unsigned char FlRead(unsigned char bDevice, void *data, int block, int count); +unsigned char FlWrite(unsigned char bDevice, void *data, int block, int count); +int FlIoctl(unsigned char bDevice, int cmd,unsigned long arg); + +#define MAX_DEVICES 64 /* "imported" from OSAK, MAX_DEVICES>=VOLUMES from flcustom.h */ + +/* non-OSAK IOCTLs defenitions */ +#define FL_IOCTL_LNX (FL_IOCTL_EXTENDED_WRITE_IPL+1) +typedef struct +{ + unsigned long command; + unsigned long data; +} flInputLnxRecord; +typedef struct +{ + unsigned long status; + unsigned long data; +} flOutputLnxRecord; +/* end of non-OSAK IOCTLs defenitions */ + +#endif /* ___TFFS2LNX__H__ */ diff -Naur linux-2.4.23/drivers/block/ll_rw_blk.c linux-2.4.23_TS_2_5/drivers/block/ll_rw_blk.c --- linux-2.4.23/drivers/block/ll_rw_blk.c Fri Nov 28 11:26:19 2003 +++ linux-2.4.23_TS_2_5/drivers/block/ll_rw_blk.c Tue Dec 2 18:04:23 2003 @@ -1541,6 +1541,9 @@ #ifdef CONFIG_BLK_DEV_MFM mfm_init(); #endif +#ifdef CONFIG_BLK_DEV_MSYS_DOC + fl_init(); +#endif /* CONFIG_BLK_DEV_MSYS_DOC */ #ifdef CONFIG_PARIDE { extern void paride_init(void); paride_init(); }; #endif diff -Naur linux-2.4.23/drivers/char/Config.in linux-2.4.23_TS_2_5/drivers/char/Config.in --- linux-2.4.23/drivers/char/Config.in Fri Nov 28 11:26:20 2003 +++ linux-2.4.23_TS_2_5/drivers/char/Config.in Tue Dec 2 18:04:54 2003 @@ -227,6 +227,13 @@ tristate ' ALi M7101 PMU on ALi 1535D+ Watchdog Timer' CONFIG_ALIM1535_WDT tristate ' ALi M7101 PMU Watchdog Timer' CONFIG_ALIM7101_WDT tristate ' AMD "Elan" SC520 Watchdog Timer' CONFIG_SC520_WDT +# if [ "$CONFIG_TS_386" = "y" ]; then +# tristate ' Technologic Systems 386EX SBC Watchdog Timer' CONFIG_TS386_WDT +# fi + if [ "$CONFIG_TS_M486" = "y" ]; then + tristate ' Technologic Systems 5x00 SBC Watchdog Timer' CONFIG_TS486_WDT + fi + tristate ' Berkshire Products PC Watchdog' CONFIG_PCWATCHDOG if [ "$CONFIG_FOOTBRIDGE" = "y" ]; then tristate ' DC21285 watchdog' CONFIG_21285_WATCHDOG @@ -367,4 +374,10 @@ tristate 'ACP Modem (Mwave) support' CONFIG_MWAVE fi +if [ "$TSYSTEMS" = "y" ]; then + tristate ' Analog to Digital driver for Technologic Systems SBC' CONFIG_TSA2D + tristate ' Technologic Systems TS-9700 driver support (DAC/AtoD)' CONFIG_TS9700 + tristate ' Technologic Systems support for Matrix Keypad' CONFIG_TSKEYPAD + +fi endmenu diff -Naur linux-2.4.23/drivers/char/Makefile linux-2.4.23_TS_2_5/drivers/char/Makefile --- linux-2.4.23/drivers/char/Makefile Fri Nov 28 11:26:20 2003 +++ linux-2.4.23_TS_2_5/drivers/char/Makefile Tue Dec 2 18:04:54 2003 @@ -35,6 +35,12 @@ CONSOLE =console.o SERIAL =serial.o +ifdef TSYSTEMS +obj-y += auto485.o +obj-$(CONFIG_TS_M486) += ts5600.o +obj-$(CONFIG_TS9700) += ts9700.o +endif + ifeq ($(ARCH),s390) KEYMAP = KEYBD = @@ -276,6 +282,9 @@ obj-$(CONFIG_NWFLASH) += nwflash.o obj-$(CONFIG_SCx200_GPIO) += scx200_gpio.o scx200.o +obj-$(CONFIG_TSA2D) += a2d_driver.o +obj-$(CONFIG_TSKEYPAD) += ts_keypad.o + # Only one watchdog can succeed. We probe the hardware watchdog # drivers first, then the softdog driver. This means if your hardware # watchdog dies or is 'borrowed' for some reason the software watchdog @@ -289,6 +298,8 @@ obj-$(CONFIG_60XX_WDT) += sbc60xxwdt.o obj-$(CONFIG_W83877F_WDT) += w83877f_wdt.o obj-$(CONFIG_SC520_WDT) += sc520_wdt.o +obj-$(CONFIG_TS386_WDT) += ts_386wdt.o +obj-$(CONFIG_TS486_WDT) += ts_486wdt.o obj-$(CONFIG_WDT) += wdt.o obj-$(CONFIG_WDTPCI) += wdt_pci.o obj-$(CONFIG_21285_WATCHDOG) += wdt285.o diff -Naur linux-2.4.23/drivers/char/a2d_driver.c linux-2.4.23_TS_2_5/drivers/char/a2d_driver.c --- linux-2.4.23/drivers/char/a2d_driver.c Wed Dec 31 17:00:00 1969 +++ linux-2.4.23_TS_2_5/drivers/char/a2d_driver.c Tue Dec 2 18:04:54 2003 @@ -0,0 +1,280 @@ + +#ifdef MODVERSIONS +#include +#endif + +#include +#include +#include + +#include +#include +#include + +#include + +/* Todo: + * Make ugly section of code into beautiful + * support asynchronous operations + */ + +#define A2D_DEVICE_ERROR 0x5000 + //the device can never return the upper 4 bits set to 0101 + +struct a2d_info_s { + unsigned char channelno; + unsigned char polar_mode ; /* false: unipolar + true : bipolar + */ + unsigned char range; /* true: Range1 (5v range) + false: Range2 (10v range) + */ + signed int data; + char error; + struct semaphore sem; +}; + +static devfs_handle_t dev_parent; +static struct a2d_info_s a2d_info[CHANNELS_MAX]; + +static int fop_open (struct inode * inode, struct file * filep){ + int channelno = MINOR(inode->i_rdev) - 1; + + MOD_INC_USE_COUNT; + + if (channelno >= CHANNELS_MAX) + return -ENODEV; + return 0; +} + +static int fop_close (struct inode *inode, struct file *filep) { + MOD_DEC_USE_COUNT; + return 0; +} + +int fop_ioctl ( struct inode *inode, struct file *filep, + unsigned int cmd, unsigned long arg) +{ + int channelno = MINOR(inode->i_rdev) - 1; + int user_a2dinfo; + + if (channelno >= CHANNELS_MAX) + return -ENODEV; + + switch (cmd) + { + case TSA2D_CONFIG: + a2d_info[channelno].polar_mode = arg & A2D_BIPOLAR; + //if not set, then unipolar + a2d_info[channelno].range = arg & A2D_RANGE2; + //if not set, then range1 + break; + case TSA2D_SHOWCONFIG: + user_a2dinfo = 0; + user_a2dinfo |= a2d_info[channelno].polar_mode + | a2d_info[channelno].range ; + return user_a2dinfo; + break; + default: + return -EINVAL; + break; + }; + + return 0; +} + +static loff_t fop_nollseek (struct file *filep, loff_t offset, int whence) +{ + return -ESPIPE; +} + +static ssize_t fop_read (struct file *filep, char *buf, + size_t count, loff_t *ppos) +{ + int channelno; + int ret; + int len = sizeof(a2d_info[channelno].data); + unsigned long res; + + ret = 0; + channelno = MINOR(filep->f_dentry->d_inode->i_rdev) - 1; + if (channelno >= CHANNELS_MAX) + return -ENODEV; + + if (*ppos < 0) + return -EINVAL; + if (count <= 0) + return 0; + + if (a2d_info[channelno].data == A2D_DEVICE_ERROR) + return -EIO; + + if ( down_interruptible ( &a2d_info[channelno].sem) ) + return -ERESTARTSYS ; + + if ( len > *ppos) { + len -= *ppos ; + if (len > count) + len = count; + ret = len; + res = copy_to_user(buf, &a2d_info[channelno].data, len); + if ( res != 0) + ret = -EFAULT; + else + *ppos +=len; + } + + up (&a2d_info[channelno].sem); + return ret; +} + +static signed int a2d_convert (unsigned char command) { + int status; + signed int result; + int lsb, msb; + char i = 0; + + outb(command, A2D_PORT); + /* Damn this is ugly */ + status = inb(A2D_BUSY_PORT); + while ( (status & A2D_BUSY_BIT) != 0 && i < 50) { + status = inb(A2D_BUSY_PORT); + i++ ; + } + if ( i >= 50) { + //timeout, conversion never finished + printk("a2d_driver.o: TIMEOUT READING A2D DEVICE\n"); + printk("status was 0x%x\n", status); + return A2D_DEVICE_ERROR; + } + lsb = inb(A2D_PORT); + msb = inb(A2D_PORT + 1); + result = (msb << 8) | lsb; + + return result; + +} + + +static ssize_t fop_write (struct file *filep, const char * buff, size_t count, loff_t *ppos) +{ + int channelno; + char command = 0; + + channelno = MINOR(filep->f_dentry->d_inode->i_rdev) - 1; + + if (channelno >= CHANNELS_MAX) + return -ENODEV; + + /* only one write should be serviced at a time + * as they invoke a conversion request and + * change value of a2d_info[i].data + */ + if ( down_interruptible ( &a2d_info[channelno].sem) ) + return -ERESTARTSYS ; + + command = channelno | a2d_info[channelno].polar_mode + | a2d_info[channelno].range; + a2d_info[channelno].data = a2d_convert(command); + + *ppos = 0; + up ( &a2d_info[channelno].sem); + + if (a2d_info[channelno].data == A2D_DEVICE_ERROR) + return -EIO; + + /* We only care that a write took place. + * We don't care what was written, so + * just signal that all data was recieved + */ + + return count ; +} + +struct file_operations a2d_fops = { + owner: THIS_MODULE, //2.4.x compliant only + llseek: fop_nollseek, + read: fop_read , + write: fop_write , + open: fop_open , + release:fop_close , + ioctl: fop_ioctl, +}; + +int a2d_register () { + int i; + char name[4]; + + dev_parent = devfs_mk_dir(NULL, "AtoD", NULL); + + for (i =0; i < CHANNELS_MAX; i++) { + sprintf (name, "%i", i); + devfs_register ( dev_parent, name, + DEVFS_FL_DEFAULT | DEVFS_FL_AUTO_DEVNUM , + 0, 0, S_IFCHR | S_IRUGO | S_IWUGO, &a2d_fops, 0); + } + + return 0; +} + +void a2d_remove () { + devfs_handle_t de; + int i; + char name[4]; + + if (MOD_IN_USE) { + printk( KERN_WARNING "module in use, removal refused\n"); + return ; + } + + for (i = 0; i< CHANNELS_MAX; i++) { + sprintf (name, "%i", i); + de = devfs_find_handle (dev_parent, name, + 0,0,DEVFS_SPECIAL_CHR,0); + devfs_unregister (de); /* if null, this function + should do nothing */ + } + + devfs_unregister(dev_parent); +} + +int a2d_init () { + int result, i; + struct sbc_info *sbc; + + /*check that A2D is installed in PLD*/ + sbc = get_sbcinfo (); + if ( !sbc->AtoD) { + printk ( KERN_WARNING "a2d.o: AtoD option not installed\n"); + remove_sbcinfo (sbc); + return -1; + } else + remove_sbcinfo (sbc); + + for (i = 0; i < CHANNELS_MAX; i++) { + a2d_info[i].channelno = i; + a2d_info[i].polar_mode = 0; + a2d_info[i].range = 0; + a2d_info[i].data = 0; + sema_init(&a2d_info[i].sem, 1); + } + + result = a2d_register (); + + if ( result < 0 ) { + return result; + } + + + printk (KERN_NOTICE "a2d.o: Technologic Systems %s\n", A2D_VER); + printk ( KERN_NOTICE "a2d.o: Module Loaded\n"); + return 0; +} + +module_init (a2d_init); +module_exit (a2d_remove); + +MODULE_AUTHOR("Liberty Young; Technologic Systems"); +MODULE_LICENSE("Dual MPL/GPL"); +MODULE_DESCRIPTION("Driver for TS SBCs with a Maxim 197 AtoD converter"); +MODULE_SUPPORTED_DEVICE("Technologic Systems SBC with AtoD"); diff -Naur linux-2.4.23/drivers/char/auto485.c linux-2.4.23_TS_2_5/drivers/char/auto485.c --- linux-2.4.23/drivers/char/auto485.c Wed Dec 31 17:00:00 1969 +++ linux-2.4.23_TS_2_5/drivers/char/auto485.c Tue Dec 2 18:04:54 2003 @@ -0,0 +1,197 @@ +#include +#include +#include +#include +#include + +/* + * Liberty Young Technologic Systems + * 11/02 + * auto485.c (de)Set RTS mode of the Single Board Computer + * (de)Set auto485 mode of the Single Board Computer + */ + +extern int tty_get_baud_rate(struct tty_struct *tty); + +static void disable_rtsmode ( void ) { + unsigned char portval; + portval = inb(0x75); + portval &= 0xBF; + outb(portval, 0x75); +} + +static void enable_rtsmode ( void) { + unsigned char portval; + portval = inb(0x75); + portval |= 0x40; + outb(portval, 0x75); +} + +static void disable_auto485( void ) { + unsigned char portval; + + portval = inb(0x75); + portval &= 0x7F; + outb(portval, 0x75); +} + +//note: we could use roundf here with C99 compliant compilers +//but instead, we've opted not to deal with the extra code size +static int ugly_roundf (float x) { + float temp; + temp =x ; + temp = temp + 0.5; + return (int)temp; +} + +static int enable_auto485 ( unsigned int board_id, unsigned int datalength, int baud, int port) { + float timervalue; + unsigned char portval; + struct tv_sigbits { + u8 lsb; + u8 msb; + }; + union uTV { + struct tv_sigbits sigbit; + u16 TV; + } loadvalue; + + //now we have to check for a Baud rate of no less than 9600 and no more than 115200 + if ( (baud < 9600) || (baud > 115200) ) { + printk("serial.c: BaudRates less than 9600\n"); + printk("or greater than 115200 are not allowed\n"); + return -1; + } + if (board_id == 5300) { + if (port != 0x3F8) { + printk("auto485.c: this board only supports RS485 on COM1\n"); + return -1; + } + timervalue = (115200.0 / baud) * 2.0; + + loadvalue.TV = ugly_roundf(timervalue); + printk("loadvalue = %d\n", loadvalue.TV); + printk("loadvalue LSB is 0x%02x\n", loadvalue.sigbit.lsb); + printk("loadvalue MSB is 0x%02x\n", loadvalue.sigbit.msb); + + portval = inb(0x61); + portval |= 0x03; + outb(portval, 0x61); + printk("write to I/O 0x61 value 0x%02x\n", portval); + + outb(0xB6, 0x43); /* Timer2 into 'square mode' */ + outb(loadvalue.sigbit.lsb, 0x42); + outb(loadvalue.sigbit.msb, 0x42); + + if (datalength == 9){ + printk("writing 0xC0 to I/O 75h\n"); + outb(0xC0, 0x75); + } + if (datalength == 8){ + printk("writing 0x80 to I/O 75h\n"); + outb(0x80, 0x75); + } + } + + if (board_id == 5400){ + if (port != 0x3F8) { + printk("auto485.c: this board only supports RS485 on COM1\n"); + return -1; + } + timervalue = ((((115200.0 / baud) * 3200.0) / 31) - 3); + loadvalue.TV = ugly_roundf(timervalue); + + printk("loadvalue = %d\n", loadvalue.TV); + printk("loadvalue LSB is 0x%02x\n", loadvalue.sigbit.lsb); + printk("loadvalue MSB is 0x%02x\n", loadvalue.sigbit.msb); + + portval = inb(0x61); + portval |= 0x02; + portval &= 0xFE; + outb(portval, 0x61); + + + outb(0xB2, 0x43); /* Timer2 into 'one-shot' mode */ + outb(loadvalue.sigbit.lsb, 0x42); + outb(loadvalue.sigbit.msb, 0x42); + + if (datalength == 9) + outb(0xC0, 0x75); + if (datalength == 8) + outb(0x80, 0x75); + + } + if (board_id == 5500){ + if (port != 0x3E8) { + printk("auto485.c: this board only supports RS485 on COM3\n"); + return -1; + } + if (datalength == 9) + outb(0xC0, 0x75); + if (datalength == 8) + outb(0x80, 0x75); + } + + return 0; +} + +int sbc_serial_modes ( struct async_struct *info, unsigned int cmd, + unsigned int *value) +{ + struct sbc_info *sbc; + int error; + unsigned int arg, datalength ; + int baud, cflag; + + error = 0; + sbc = get_sbcinfo(); + arg = *value; + //is this operation even permissable? + if (!sbc->auto485){ + remove_sbcinfo (sbc); + printk("serial.c: Sorry, this board does not support auto485\n"); + printk("check /proc/SBC/info for features supported\n"); + return -1; //this should be an actual errno + } + switch (cmd) { + case TIOC_SBCC485: + if (arg & AUTO485){ + printk("disableing auto485\n"); + disable_auto485(); + } + if (arg & RTSMODE){ + printk("disableing rts mode\n"); + disable_rtsmode () ; + } + break; + case TIOC_SBCS485: + if ( arg & AUTO485) { + cflag = info->tty->termios->c_cflag; + baud = tty_get_baud_rate (info->tty); + printk("SETTING auto485\n"); + + if (!(cflag & CS8)){ + printk("auto485.c: Currently only handles CS8\n"); + return -1; + } + datalength = 8; + if ( cflag & PARENB) + datalength = datalength + 1; + + printk("cflag & PARENB:%d\n", cflag & PARENB); + error = enable_auto485 ( sbc->board_id, + datalength, baud, info->port); + } + if (arg & RTSMODE) { + printk("setting rts mode\n"); + enable_rtsmode(); + } + break; + } + + remove_sbcinfo (sbc); + return error; +} + + + diff -Naur linux-2.4.23/drivers/char/pc_keyb.c linux-2.4.23_TS_2_5/drivers/char/pc_keyb.c --- linux-2.4.23/drivers/char/pc_keyb.c Thu Nov 28 16:53:12 2002 +++ linux-2.4.23_TS_2_5/drivers/char/pc_keyb.c Tue Dec 2 18:04:54 2003 @@ -487,7 +487,7 @@ static unsigned char handle_kbd_event(void) { unsigned char status = kbd_read_status(); - unsigned int work = 10000; + unsigned int work = 100; while ((--work > 0) && (status & KBD_STAT_OBF)) { unsigned char scancode; @@ -509,9 +509,11 @@ status = kbd_read_status(); } - +#ifndef TSYSTEMS if (!work) - printk(KERN_ERR "pc_keyb: controller jammed (0x%02X).\n", status); + printk(KERN_ERR "pc_keyb: controller jammed (0x%02X).\n", status); +#endif + return status; } diff -Naur linux-2.4.23/drivers/char/serial.c linux-2.4.23_TS_2_5/drivers/char/serial.c --- linux-2.4.23/drivers/char/serial.c Fri Nov 28 11:26:20 2003 +++ linux-2.4.23_TS_2_5/drivers/char/serial.c Tue Dec 2 18:04:54 2003 @@ -57,6 +57,10 @@ * 10/00: add in optional software flow control for serial console. * Kanoj Sarcar (Modified by Theodore Ts'o) * + * 11/02: (unofficial) added in option to control Technologic Systems + * Single Board Computers' auto485 mode and RTS mode on/off + * Liberty Young + * * 02/02: Fix for AMD Elan bug in transmit irq routine, by * Christer Weinigel , * Robert Schwebel , @@ -64,7 +68,7 @@ * Theodore Ts'o */ -static char *serial_version = "5.05c"; +static char *serial_version = "5.05c-TS"; static char *serial_revdate = "2001-07-08"; /* @@ -266,6 +270,11 @@ /* number of characters left in xmit buffer before we ask for more */ #define WAKEUP_CHARS 256 +#ifdef TSYSTEMS +extern int sbc_serial_modes (struct async_struct *info, unsigned int cmd, unsigned *value); +#endif + + /* * IRQ_timeout - How long the timeout should be for each IRQ * should be after the IRQ has been active. @@ -2701,7 +2710,9 @@ /* "setserial -W" is called in Debian boot */ printk ("TIOCSER?WILD ioctl obsolete, ignored.\n"); return 0; - + case TIOC_SBCC485: + case TIOC_SBCS485: + return sbc_serial_modes (info,cmd,(unsigned int *)arg); default: return -ENOIOCTLCMD; } diff -Naur linux-2.4.23/drivers/char/ts5600.c linux-2.4.23_TS_2_5/drivers/char/ts5600.c --- linux-2.4.23/drivers/char/ts5600.c Wed Dec 31 17:00:00 1969 +++ linux-2.4.23_TS_2_5/drivers/char/ts5600.c Fri Jun 25 16:32:09 2004 @@ -0,0 +1,568 @@ +/* + * TS-5600 Driver + * (c) Technologic Systems ([SPAM]info@[FILTER]embeddedx86.[com]) + * author: Liberty Young (liberty/AT/embeddedx86/DOT/com) + * + * Technologic Systems does not admit any liability nor any warranty for + * this software or any of its use(s). This software is provided AS-IS. + * + * + * Version: 1.00.0 November 2003 + * L.Y. Initial Version + * + * Version: 1.01 January 21.2004 + * L.Y. fixed possible bug with devfs autonumbering + * + * Version 1.02 February 03.2004 + * L.Y. fixed dac_open not ouputing data to right channel + * + * Version 1.03 June 17.2004 + * L.Y. fixed introduced bug (See cvs) + * + * This code is board specific. It only works for the Technologic Systems + * TS-5600 SBC + * + */ + +#ifdef MODVERSIONS +#include +#endif + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "ts5600.h" + +#define LOG_LEVEL KERN_INFO +#define DAC 1 +#define A2D 0 +#define SPI_NOOP 2 +#define TS5600_MMCRBASE 0xDFC20 + +#define PIO_0_15_PFS 0x0 +#define PIO_0_15_DIR 0x0A +#define PIO_0_15_DATA 0x10 +#define PIO_0_15_CLEAR 0x18 +#define PIO_0_15_SET 0x14 +#define PIO_16_31_PFS 0x02 +#define PIO_16_31_DIR 0x0C +#define PIO_16_31_DATA 0x12 +#define PIO_16_31_CLEAR 0x1A +#define PIO_16_31_SET 0x16 + +#define SPI_CTRL_REG 0x000B0 +#define SPI_TX_DATA 0x000B1 +#define SPI_CMD_REG 0x000B2 +#define SPI_STATUS_REG 0x000B3 +#define SPI_RX_DATA 0x000B4 + + +unsigned long *mmcr_base; + +struct spi_data_s { + uint8_t LSB ; + uint8_t MSB ; +} ; + +struct spi_regs_s { + unsigned long *control_reg; + unsigned long *tx_data; + unsigned long *command_reg; + unsigned long *status_reg; + unsigned long *rx_data; +} spi_reg; + +struct pio_registers_s { + unsigned long *pfs_0_15; + unsigned long *dir_0_15; + unsigned long *data_0_15; + unsigned long *clear_0_15; + unsigned long *set_0_15; + unsigned long *pfs_16_31; + unsigned long *dir_16_31; + unsigned long *data_16_31; + unsigned long *clear_16_31; + unsigned long *set_16_31; + +} pio_reg; + + +union dac_data { + struct spi_data_s data; + uint16_t value; +}; + +union a2d_data { + struct spi_data_s data; + uint16_t value; +}; + + + +struct a2d_channel_s { + int data; + int mode; + devfs_handle_t devfsnode; +}; + +struct dac_channel_s { + union dac_data data; + int mode; + devfs_handle_t devfsnode; +}; + +static struct ts5600_s { + struct a2d_channel_s a2d_channel[A2D_CHANNELS_MAX]; + struct dac_channel_s dac_channel[DAC_CHANNELS_MAX]; + devfs_handle_t devfs_parent; + devfs_handle_t a2d_dir; + devfs_handle_t dac_dir; + struct semaphore spi_mutex; +} ts5600; + + +int enable_cs(char); +void disable_cs (char ); +uint8_t spi_transfer (uint8_t); + +int enable_cs(char operation ){ + int i; + + for (i=0; readb(spi_reg.status_reg) & 0x02; i++) + if (i>100) + return -EIO; + + switch (operation) { + case A2D: + writeb(0x21, spi_reg.control_reg); + writew(0x0800, pio_reg.clear_16_31); + break; + + case DAC: + writeb( 0x03, spi_reg.control_reg); + writew( 0x8000, pio_reg.clear_0_15); + break; + default: + return -ENODEV; + break; + } + return 0; +} + +void disable_cs (char operation){ + + int i; + switch (operation) { + case A2D: + writew(0x0800, pio_reg.set_16_31); + break; + + case DAC: + writew( 0x8000, pio_reg.set_0_15); + break; + + default: + break; + } + + for (i=0;i<1000;i++); +} + +uint8_t spi_transfer( uint8_t data){ + + int i; + uint8_t returndata; + + writeb(data, spi_reg.tx_data); + writeb(0x03, spi_reg.command_reg); + + for (i=0; readb(spi_reg.status_reg) & 0x02; i++) + if (i>100) + break; + if (i > 100) + printk("ts5600.o: spi_transfer reported an error\n"); + + returndata = readb(spi_reg.rx_data); + return (returndata); + +} + +static char get_channelno (int minornumber) { + char i; + + i = minornumber; + if (minornumber >= 8) + i = minornumber - 8; + return i; +} + +void dac_process (union dac_data outvalue){ + + if (down_interruptible(&ts5600.spi_mutex)) + return ; + + if (enable_cs(DAC) < 0){ + up(&ts5600.spi_mutex); + return ; + } + + spi_transfer(outvalue.data.MSB); + spi_transfer(outvalue.data.LSB); + + disable_cs(DAC); + + up(&ts5600.spi_mutex); + + //wake up other sleeping processes +} + +static int a2d_convert (int channel) { + uint8_t data; + union a2d_data returnval; + + data = (channel << 3) | 0x04; + + if (down_interruptible(&ts5600.spi_mutex)) + return A2D_DEVICE_ERROR; + + if (enable_cs(A2D) < 0){ + up(&ts5600.spi_mutex); + return A2D_DEVICE_ERROR; + } + + spi_transfer(data) ; + spi_transfer(data) ; + + returnval.data.MSB = spi_transfer(data); + returnval.data.LSB = spi_transfer(data); + + disable_cs(A2D); + + up(&ts5600.spi_mutex); + + //wake up other sleeping processes + return returnval.value; + +} + + + +static int a2d_fop_open (struct inode * inode, struct file *filep) +{ + int minor; + int channelno; + + minor = MINOR(filep->f_dentry->d_inode->i_rdev) - 1; + channelno = get_channelno(minor); + if (channelno >= A2D_CHANNELS_MAX) + return -ENODEV; + + MOD_INC_USE_COUNT; + return 0; +} + +static int dac_fop_open (struct inode * inode, struct file *filep) +{ + int minor; + int channelno; + + minor = MINOR(filep->f_dentry->d_inode->i_rdev) - 1; + channelno = get_channelno(minor); + if (channelno >= DAC_CHANNELS_MAX) + return -ENODEV; + + MOD_INC_USE_COUNT; + return 0; +} + +static int fop_close (struct inode *inode, struct file *filep){ + MOD_DEC_USE_COUNT; + return 0; +} + +static ssize_t a2d_fop_read (struct file *filep, char *buf, size_t count, loff_t *ppos) { + int channelno; + int len = sizeof(int); + int minor; + unsigned long res; + + minor = MINOR(filep->f_dentry->d_inode->i_rdev) - 1; + + channelno = get_channelno(minor); + + if (*ppos < 0) + return -EINVAL; + + *ppos = 0; + + if (ts5600.a2d_channel[channelno].data == A2D_DEVICE_ERROR) + return -EINVAL; + + res = copy_to_user(buf, &ts5600.a2d_channel[channelno].data, len); + if ( res != 0) + return -EFAULT; + + return 0; +} + + +static ssize_t dac_fop_write (struct file *filep, const char *buff, size_t count, loff_t *ppos) +{ + int channelno; + int minor; + int data; + int channelswitch; + union dac_data processdata; + + minor = MINOR(filep->f_dentry->d_inode->i_rdev) - 1; + + channelno = get_channelno(minor); + switch (channelno) + { + case 0: + channelswitch = 0x00; + break; + case 1: + channelswitch = 0x40; + break; + case 2: + channelswitch = 0x80; + break; + case 3: + channelswitch = 0xc0; + break; + } + + if (*ppos < 0) + return -EINVAL; + if (count <= 0) + return 0; + + copy_from_user (&data, buff, sizeof(int)); + + data = data | channelswitch; + processdata.value = data; + dac_process ( processdata); + *ppos += sizeof(char); + + return sizeof(char); + +} + +static ssize_t a2d_fop_write (struct file *filep, const char * buff, size_t count, loff_t *ppos) +{ + int channelno; + int minor; + + minor = MINOR(filep->f_dentry->d_inode->i_rdev) - 1; + + channelno = get_channelno(minor); + + ts5600.a2d_channel[channelno].data = a2d_convert(channelno); + + *ppos += count; + + return count ; +} + + + +static loff_t fop_nollseek (struct file * filep, loff_t offset, int whence) +{ + return -ESPIPE; +} + + +struct file_operations dac_fops = { + owner: THIS_MODULE, //2.4.x compliant only + llseek: fop_nollseek, + write: dac_fop_write , + open: dac_fop_open , + release:fop_close , +}; + +struct file_operations a2d_fops = { + owner: THIS_MODULE, //2.4.x compliant only + llseek: fop_nollseek, + read: a2d_fop_read , + write: a2d_fop_write , + open: a2d_fop_open , + release:fop_close , +}; + + +int a2d_register (void) { + int i; + char name[4]; + + ts5600.a2d_dir = devfs_mk_dir (ts5600.devfs_parent, "A2D", NULL); + + for (i =0; i < A2D_CHANNELS_MAX; i++) { + ts5600.a2d_channel[i].data = A2D_DEVICE_ERROR; + sprintf (name, "%i", i); + devfs_register ( ts5600.a2d_dir, name, + DEVFS_FL_DEFAULT, + 8, A2D_MINOR_OFFSET +i, S_IFCHR | S_IRUGO | S_IWUGO, &a2d_fops, 0); + } + + return 0; +} + +int dac_register (void) { + int i; + char name[4]; + + ts5600.dac_dir = devfs_mk_dir (ts5600.devfs_parent, "DAC", NULL); + + for (i=0; i < DAC_CHANNELS_MAX; i++){ + ts5600.dac_channel[i].data.value = 0; + sprintf(name, "%i", i); + devfs_register ( ts5600.dac_dir, name, + DEVFS_FL_DEFAULT , + 8, DAC_MINOR_OFFSET+i, S_IFCHR | S_IWUGO, &dac_fops, 0); + } + + return 0; +} + +int a2d_unregister (void) { + int i; + char name[4]; + devfs_handle_t de; + + for (i = 0; i< A2D_CHANNELS_MAX; i++) { + sprintf (name, "%i", i); + de = devfs_find_handle (ts5600.a2d_dir, name, + 0,0,DEVFS_SPECIAL_CHR,0); + devfs_unregister (de); /* if null, this function + should do nothing */ + } + devfs_unregister(ts5600.a2d_dir); + ts5600.a2d_dir = 0 ; + + return 0; +} + + +int dac_unregister (void) { + int i; + char name[4]; + devfs_handle_t de; + + for (i=0; i< DAC_CHANNELS_MAX; i++){ + sprintf (name, "%i", i); + de = devfs_find_handle (ts5600.dac_dir, name, + 0,0,DEVFS_SPECIAL_CHR, 0); + devfs_unregister(de); + } + devfs_unregister(ts5600.dac_dir); + ts5600.dac_dir = 0; + + return 0; +} + + +int start_module (void) { + + int tmp; + struct sbc_info *sbc; + + sbc = get_sbcinfo(); + if ( sbc->board_id != 5600) { + printk( KERN_WARNING "ts5600.o: determined board is not TS5600\n"); + remove_sbcinfo(sbc); + return -1; + } + + + ts5600.devfs_parent = devfs_mk_dir(NULL, "SBC/TS5600", NULL); + if (ts5600.devfs_parent < 0) { + printk(KERN_WARNING "ts5600.o: trouble with devfs\n"); + } + + a2d_register(); + dac_register(); + + sema_init(&ts5600.spi_mutex, 1); + + spi_reg.control_reg = ioremap (TS5600_MMCRBASE + SPI_CTRL_REG ,1); + spi_reg.tx_data = ioremap (TS5600_MMCRBASE + SPI_TX_DATA,1); + spi_reg.command_reg = ioremap (TS5600_MMCRBASE + SPI_CMD_REG,1); + spi_reg.status_reg = ioremap (TS5600_MMCRBASE + SPI_STATUS_REG,1); + spi_reg.rx_data = ioremap (TS5600_MMCRBASE + SPI_RX_DATA,1); + + pio_reg.pfs_0_15 = ioremap (TS5600_MMCRBASE+ PIO_0_15_PFS,1) ; + pio_reg.dir_0_15 = ioremap (TS5600_MMCRBASE+ PIO_0_15_DIR,1) ; + pio_reg.data_0_15 = ioremap (TS5600_MMCRBASE+ PIO_0_15_DATA ,1) ; + pio_reg.clear_0_15 = ioremap (TS5600_MMCRBASE+ PIO_0_15_CLEAR,1); + pio_reg.set_0_15 = ioremap (TS5600_MMCRBASE+ PIO_0_15_SET,1) ; + pio_reg.pfs_16_31 = ioremap (TS5600_MMCRBASE+ PIO_16_31_PFS,1) ; + pio_reg.dir_16_31 = ioremap (TS5600_MMCRBASE+ PIO_16_31_DIR,1) ; + pio_reg.data_16_31 = ioremap (TS5600_MMCRBASE+ PIO_16_31_DATA,1) ; + pio_reg.clear_16_31 = ioremap (TS5600_MMCRBASE+ PIO_16_31_CLEAR,1) ; + pio_reg.set_16_31 = ioremap (TS5600_MMCRBASE+ PIO_16_31_SET,1); + + //all pio_reg stuff use 16 bit registers..use readw, writew (2 byte) + //all spi_reg stuff use 8 bit registers...use readb, writeb (1 byte) + //setting PIO pins we use to outputs + + writew (0x80F0, pio_reg.set_0_15); + writew(0x0800, pio_reg.set_16_31); + + //set PIO Direction pins we use to outputs + tmp = readw(pio_reg.dir_0_15); + tmp |= 0x80F0; + writew(tmp, pio_reg.dir_0_15); + tmp = readw(pio_reg.dir_16_31); + tmp |= 0x0800; + writew(tmp, pio_reg.dir_16_31); + + //set PIO Pin Function Select to PIO mode + tmp = readw(pio_reg.pfs_0_15); + tmp &= 0x7F0F; + writew (tmp, pio_reg.pfs_0_15); + tmp = readw(pio_reg.pfs_16_31); + tmp &= 0xF7FF; + writew(tmp, pio_reg.pfs_16_31); + + printk(KERN_NOTICE "ts5600.o: Technologic Systems %s\n", TS5600_VER); + printk(KERN_NOTICE "TS5600.o: Module Loaded \n"); + + return 0; + +} + + +void ts5600_cleanup (void) { + + if (MOD_IN_USE){ + printk(KERN_WARNING "ts5600.o: module in use, removal refused\n"); + return; + } + + iounmap(mmcr_base); + + dac_unregister(); + a2d_unregister(); + + devfs_unregister(ts5600.devfs_parent); + + printk(LOG_LEVEL "ts5600.o: module was removed\n"); +} + +module_init (start_module); +module_exit (ts5600_cleanup); + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR ("liberty young; technologic systems"); diff -Naur linux-2.4.23/drivers/char/ts5600.h linux-2.4.23_TS_2_5/drivers/char/ts5600.h --- linux-2.4.23/drivers/char/ts5600.h Wed Dec 31 17:00:00 1969 +++ linux-2.4.23_TS_2_5/drivers/char/ts5600.h Fri Jun 25 16:32:09 2004 @@ -0,0 +1,42 @@ +/* ts5600.h + * Technologic Systems + * Liberty Young Liberty/at/embeddedx86/dot/com + * + * This driver is for a TS5600 only + * with the Analog to Digital option installed + * and the Digitaal to Analog option installed + * + * No warranty is implied, or given, with this device driver. + */ + +#define READY_BIT 0x80 //bit 7 +#define A2D_CHANNELS_MAX 8 /* 0 TO 7 channels on device */ +#define DAC_CHANNELS_MAX 4 +#define A2D_MINOR_OFFSET 1 +#define DAC_MINOR_OFFSET 9 +#define A2D_DEVICE_ERROR 0x5000 +#define TS5600_VER "[06.17.04] Ver 1.03" + +/* I/O Map + * + * AtoD has no special options bits. + * + * Command register for DAC + * bits 0-11 Value to DAC + * bit 12 Destination + * bit 13 0 + * bit 14 FAST/SLOW DAC mode + * bit 15 Destination + * + * Destination as follows: + * bit 15 bit 12 + * 0 0 DAC B and buffer + * 0 1 Buffer + * 1 0 DAC A destination, also copy data from Buffer into B + * 1 1 illegal + */ + +#define FAST_DAC 0x01 +#define SLOW_DAC 0x00 + +#define DAC_MASK 0x0FFF diff -Naur linux-2.4.23/drivers/char/ts9700.c linux-2.4.23_TS_2_5/drivers/char/ts9700.c --- linux-2.4.23/drivers/char/ts9700.c Wed Dec 31 17:00:00 1969 +++ linux-2.4.23_TS_2_5/drivers/char/ts9700.c Mon Jan 26 16:23:15 2004 @@ -0,0 +1,496 @@ +/* + * TS-9700 Driver + * (c) Technologic Systems (info_AT__embeddedx86__DOT.com) + * author: Liberty Young + * + * Technologic Systems does not admit any liability nor any warranty + * for this software or any of its use(s). This software is provided + * AS-IS. + * + * This driver is for a TS-9700 only with the Analog to + * Digital option installed and the Digital to Analog + * option installed + * + * L.Y. 01.00: First Release, AtoD functionality only + * L.Y. 02.00: Production release, includes DAC support + * L.Y. 02.01: fixed bug #000044 with determing channel/board + * + */ + +#ifdef MODVERSIONS +#include +#endif + +#include +#include +#include +#include + +#include +#include +#include + +#include "ts9700.h" + +/* Todo: + * Make ugly section of code into beautiful + * support asynchronous operations + */ + +#define A2D_DEVICE_ERROR 0x5000 + //the device can never return the upper 4 bits set to 0101 + +int baseio1= 0x0; +int baseio2 = 0x0; +int baseio3 = 0x0; +int boardcount = 0; + +struct a2d_channel_s { + signed int data; + int mode ; + devfs_handle_t devfsnode; +}; + +struct dac_channel_s { + signed int data; + char speed; //fast/slow + devfs_handle_t devfsdnode; +}; + +struct ts9700_s { + int base_io; + unsigned char command; + struct a2d_channel_s a2d_channel[A2D_CHANNELS_MAX]; + struct dac_channel_s dac_channel[DAC_CHANNELS_MAX]; + devfs_handle_t devfsdir ; + devfs_handle_t a2d_dir; + devfs_handle_t dac_dir; +}; + +struct ts9700_info_s { + char board; + char channel; +}; + +static devfs_handle_t dev_parent; +static struct ts9700_s ts9700 [MAX_BOARDS]; + +int get_boardnumber (int minornumber){ + int i; + i = (minornumber-A2D_MINOR_OFFSET)/(A2D_CHANNELS_MAX+DAC_CHANNELS_MAX); + return i; +} + +int get_channelno (int minornumber){ + int i; + int floor; + + minornumber = minornumber - A2D_MINOR_OFFSET ; + floor = (minornumber / (A2D_CHANNELS_MAX+DAC_CHANNELS_MAX))*(A2D_CHANNELS_MAX+DAC_CHANNELS_MAX); + i = minornumber - floor; + + if (i >= A2D_CHANNELS_MAX) + i = i - A2D_CHANNELS_MAX; //DAC channel + + return i; +} + +static int fop_open (struct inode * inode, struct file * filep){ + int minor; + int boardnum, channelnum; + struct ts9700_info_s *info; + + MOD_INC_USE_COUNT; + + minor = MINOR(filep->f_dentry->d_inode->i_rdev); + boardnum = get_boardnumber(minor); + if (boardnum > MAX_BOARDS ){ + printk("board #%d is invalid\n", boardnum); + MOD_DEC_USE_COUNT; + return -ENODEV; + } + + channelnum = get_channelno(minor); + if (channelnum > A2D_CHANNELS_MAX) { + printk("channel #%d is invalid\n", channelnum); + MOD_DEC_USE_COUNT; + return -ENODEV; + } + + info = kmalloc(sizeof(struct ts9700_info_s), GFP_KERNEL); + if (!info) + return -ENOMEM; + info->board=boardnum; + info->channel=channelnum; + filep->private_data = info; + + return 0; +} + + +static int fop_close (struct inode *inode, struct file *filep) { + struct ts9700_info_s *info; + + info = (struct ts9700_info_s *)filep->private_data; + kfree(info); + filep->private_data = NULL; + + MOD_DEC_USE_COUNT; + return 0; +} + +static loff_t fop_nollseek (struct file *filep, loff_t offset, int whence) +{ + return -ESPIPE; +} + +static ssize_t dac_fop_read (struct file *filep, char *buf, + size_t count, loff_t *ppos) +{ + return -EINVAL; +} + +static ssize_t fop_read (struct file *filep, char *buf, + size_t count, loff_t *ppos) +{ + int channelno; + int ret; + int boardnum; + int len = sizeof(signed int) ; + unsigned long res; + struct ts9700_info_s *info; + + ret = 0; + info = (struct ts9700_info_s *) filep->private_data; + + boardnum = info->board; + channelno = info->channel; + + if (*ppos < 0) + return -EINVAL; + if (count <= 0) + return 0; + + if (ts9700[boardnum].a2d_channel[channelno].data == A2D_DEVICE_ERROR) + return -EIO; + + if ( len > *ppos) { + len -= *ppos ; + if (len > count) + len = count; + ret = len; + res = copy_to_user(buf, &ts9700[boardnum].a2d_channel[channelno].data, len); + if ( res != 0) + ret = -EFAULT; + else + *ppos +=len; + } + + return ret; +} + +void dac_process (int baseio, int command, char chan, char speed){ + long int outvalue; + int i; + int status=0; + + + command &= DAC_MASK; + outvalue = command; + + i = chan << 14; + outvalue |= i; + + i = speed ? 0x01000 : 0; + outvalue |=i; + + outw(outvalue, baseio+4); + + status = inb(baseio+6); + while ( (status & READY_BIT) == 0 && i < 90) { + status = inb(baseio+6); + i++ ; + } + if (i>=90) + printk("ts9700.o:dac_process(...):read bit timeout\n"); +} + + + +static signed int a2d_convert (unsigned char command, int baseio) { + int status; + signed int result; + int lsb, msb; + char i = 0; + + command &= 0xEF; //double acquisition + outb(command, baseio+0); + + status = inb(baseio+0); + while ( (status & READY_BIT) == 0 && i < 90) { + status = inb(baseio+0); + i++ ; + } + if ( i >= 50) { + //timeout, conversion never finished + printk("ts9700.o: TIMEOUT READING A2D DEVICE\n"); + printk("status was 0x%x\n", status); + return A2D_DEVICE_ERROR; + } + + lsb = inb(baseio+2); + msb = inb(baseio+3); + result = (msb << 8) | lsb; + + return result; + +} + +static ssize_t dac_fop_write (struct file *filep, const char * buff, size_t count, loff_t *ppos) +{ + int channelno; + int boardnum; + int *dac_data; + int baseio; + int data; + long i; + struct ts9700_info_s *info; + + info = (struct ts9700_info_s *) filep->private_data; + + boardnum = info->board; + channelno = info->channel; + + dac_data = &ts9700[boardnum].dac_channel[channelno].data; + baseio = ts9700[boardnum].base_io; + + *ppos = 0; + + copy_from_user (&data, buff, sizeof(int)); + + *dac_data = (int)data; + dac_process (baseio, *dac_data, channelno, 0); + i=sizeof(int); + + *ppos += i; + return (i); + +} + +static ssize_t fop_write (struct file *filep, const char * buff, size_t count, loff_t *ppos) +{ + int channelno, boardnum; + char command = 0; + struct ts9700_info_s *info; + + info=(struct ts9700_info_s *)filep->private_data; + + boardnum = info->board; + channelno = info->channel; + + command = channelno | DOUBLE_ACQUIRE ; + ts9700[boardnum].a2d_channel[channelno].data = a2d_convert(command, ts9700[boardnum].base_io); + + *ppos = 0; + + if (ts9700[boardnum].a2d_channel[channelno].data == A2D_DEVICE_ERROR) + return -EIO; + + /* We only care that a write took place. + * We don't care what was written, so + * just signal that all data was recieved + */ + + return count ; +} + +struct file_operations dac_fops = { + owner: THIS_MODULE, //2.4.x compliant only + llseek: fop_nollseek, + read: dac_fop_read , + write: dac_fop_write , + open: fop_open , + release:fop_close , +}; + +struct file_operations a2d_fops = { + owner: THIS_MODULE, //2.4.x compliant only + llseek: fop_nollseek, + read: fop_read , + write: fop_write , + open: fop_open , + release:fop_close , +}; + +int a2d_unregister (struct ts9700_s * ts9700) { + int i; + char name[4]; + devfs_handle_t de; + + for (i = 0; i< A2D_CHANNELS_MAX; i++) { + sprintf (name, "%i", i); + de = devfs_find_handle (ts9700->a2d_dir, name, + 0,0,DEVFS_SPECIAL_CHR,0); + devfs_unregister (de); /* if null, this function + should do nothing */ + } + devfs_unregister(ts9700->a2d_dir); + ts9700->a2d_dir = 0 ; + + return 0; +} + + +int dac_unregister (struct ts9700_s * ts9700) { + int i; + char name[4]; + devfs_handle_t de; + + for (i=0; i< DAC_CHANNELS_MAX; i++){ + sprintf (name, "%i", i); + de = devfs_find_handle (ts9700->dac_dir, name, + 0,0,DEVFS_SPECIAL_CHR, 0); + devfs_unregister(de); + } + devfs_unregister(ts9700->dac_dir); + ts9700->dac_dir = 0; + + return 0; +} + +int a2d_register (struct ts9700_s * ts9700, int boardnum) { + int i, minor; + char name[4]; + + ts9700->a2d_dir = devfs_mk_dir (ts9700->devfsdir, "A2D", NULL); + + for (i =0; i < A2D_CHANNELS_MAX; i++) { + sprintf (name, "%i", i); + minor = A2D_MINOR_OFFSET + ( + (A2D_CHANNELS_MAX+DAC_CHANNELS_MAX) *boardnum) +i; + devfs_register ( ts9700->a2d_dir, name, + DEVFS_FL_DEFAULT , + 8, minor, S_IFCHR | S_IRUGO | S_IWUGO, &a2d_fops, 0); + } + + + + return 0; +} + +int dac_register (struct ts9700_s * ts9700, int boardnum) { + int i, minor; + char name[4]; + + ts9700->dac_dir = devfs_mk_dir (ts9700->devfsdir, "DAC", NULL); + + for (i=0; i < DAC_CHANNELS_MAX; i++){ + sprintf(name, "%i", i); + minor = DAC_MINOR_OFFSET+( + (A2D_CHANNELS_MAX+DAC_CHANNELS_MAX)*boardnum) + i; + devfs_register ( ts9700->dac_dir, name, + DEVFS_FL_DEFAULT , + 8, minor, S_IFCHR | S_IRUGO | S_IWUGO, &dac_fops, NULL); + } + + return 0; +} + +int ts9700_register (int board_number) { + char name[3]; + + sprintf(name, "%d", board_number); + + ts9700[board_number].devfsdir = devfs_mk_dir (dev_parent, name, NULL); + + a2d_register(&ts9700[board_number], board_number) ; + dac_register(&ts9700[board_number], board_number) ; + + return 0; +} + + + +void a2d_remove (void) { + int i; + + if (MOD_IN_USE) { + printk( KERN_WARNING "module in use, removal refused\n"); + return ; + } + + for (i=0;i < boardcount; i++){ + a2d_unregister (&ts9700[i]); + dac_unregister (&ts9700[i]); + } + + devfs_unregister(dev_parent); + + return ; +} + +int check_for_ts9700 (int ioaddress){ + int result; + + outb(0xFF, 0x80); //clear bus memory + result = inb(ioaddress+ 1); + if ( result != 0x97) + return 0; + + return 1; +} + + +int a2d_init (void) { + int i; + + dev_parent = devfs_mk_dir(NULL, "SBC/TS9700", NULL); + if (dev_parent < 0){ + printk( KERN_WARNING "ts9700.o: trouble with devfs\n"); + } + + + baseio1 = baseio1 ? baseio1 : 0x160; //if no baseio for board 1 is given, + //then default to 0x160 + if (! check_for_ts9700(baseio1)) { + printk ( KERN_WARNING "ts9700.o: TS-9700 not found at I/O 0x%02x\n", baseio1); + devfs_unregister(dev_parent); + return -1; + } + + ts9700[boardcount++].base_io = baseio1; + + if (baseio2 != 0) { + if (check_for_ts9700(baseio2)) + ts9700[boardcount++].base_io = baseio2; + } + if (baseio3 != 0) { + if (check_for_ts9700(baseio3)) + ts9700[boardcount++].base_io = baseio3; + } + + + for (i=0;i < boardcount; i++){ + ts9700_register(i) ; + } + + printk (KERN_NOTICE "ts9700.o: Technologic Systems %s\n", TS9700_VER); + printk ( KERN_NOTICE "ts9700.o: Module Loaded\n"); + printk (KERN_NOTICE "ts9700's present: %d\n", boardcount); + return 0; +} + +module_init (a2d_init); +module_exit (a2d_remove); + +MODULE_AUTHOR("Liberty Young; Technologic Systems"); +MODULE_LICENSE("Dual MPL/GPL"); +MODULE_DESCRIPTION("Driver for TS-9700 "); +MODULE_SUPPORTED_DEVICE("Technologic Systems 9700 "); +MODULE_PARM(baseio1, "i"); +MODULE_PARM_DESC(baseio1, "Base I/O port for TS-9700 (default 0x160)"); +MODULE_PARM(baseio2, "i"); +MODULE_PARM_DESC(baseio2, "Base I/O port for TS-9700 (default: no device)"); +MODULE_PARM(baseio3, "i"); +MODULE_PARM_DESC(baseio3, "Base I/O port for TS-9700 (default: no device)"); + diff -Naur linux-2.4.23/drivers/char/ts9700.h linux-2.4.23_TS_2_5/drivers/char/ts9700.h --- linux-2.4.23/drivers/char/ts9700.h Wed Dec 31 17:00:00 1969 +++ linux-2.4.23_TS_2_5/drivers/char/ts9700.h Wed Jan 21 10:21:11 2004 @@ -0,0 +1,47 @@ + + +#define READY_BIT 0x80 //bit 7 +#define A2D_CHANNELS_MAX 8 /* 0 TO 7 channels on device */ +#define DAC_CHANNELS_MAX 4 +#define MAX_BOARDS 3 /* max boards that can be installed */ +#define A2D_MINOR_OFFSET 24 //minor number +#define DAC_MINOR_OFFSET (A2D_MINOR_OFFSET + A2D_CHANNELS_MAX ) +#define TS9700_VER "[01.21.04] Ver 2.01" + +/* I/O Map + * -=AtoD=- + * base + 0 Command R/W + * Base + 1 ID R (should read 0x97) + * Base + 2 LSB R + * Base + 3 MSB R (upper 4 bits =0) + * -=DAC=- + * Base + 4 DAC LSB + * Base + 5 DAC MSB + * Base + 6 DAC status (ro) bit7= Ready + * Base + 7 reserved + + * Command register for AtoD + * bits 0-2 selected channel (0 - 7) + * bits 3 reserved + * bit 4 selected single or double acquistion + * bit 5-6 reserved + * bit 7 ready bit (0 = doing acquistion) + * + * Command register for DAC + * bits 0-11 Value to DAC + * bit 12 Fast DAC Mode + * bit 13 Write to Buffer Only + * bits 14-15 DAC Channel + */ + +#define SINGLE_ACQUIRE 1 +#define DOUBLE_ACQUIRE 0 + +#define A2D_MAGICNUM 0xD1 +#define TSA2D_CONFIG _IOW(A2D_MAGICNUM, 1, int) +#define TSA2D_SHOWCONFIG _IOR(A2D_MAGICNUM, 2, int) + +#define FAST_DAC 0x01 +#define SLOW_DAC 0x00 + +#define DAC_MASK 0x0FFF diff -Naur linux-2.4.23/drivers/char/ts_486wdt.c linux-2.4.23_TS_2_5/drivers/char/ts_486wdt.c --- linux-2.4.23/drivers/char/ts_486wdt.c Wed Dec 31 17:00:00 1969 +++ linux-2.4.23_TS_2_5/drivers/char/ts_486wdt.c Tue Dec 2 18:04:54 2003 @@ -0,0 +1,176 @@ +/* + * AMD ELAN SC520 Watch Dog Timer Driver + * (c) Technologic Systems (info@embeddedx86.com) + * author: Liberty Young (liberty@embeddedx86.com) + * + * Technologic Systems does not admit any liability nor any warranty for + * this software or any of its use(s). This software is provided AS-IS. + * + * + * Version: 0.1.0 December 2001 + * L.Y. Initial Version + * + * This code is processor specific. It only works for the AMD Elan SC520 + * on-chip Watchdog Timer + * and was developed for use in the Technologic Systems' Elan based Single + * Board Computers + * + * Portions of this code is based off the W83877F Computer Watchdog Timer + * driver by Scott Jennings + */ + +#ifdef MODVERSIONS +#include +#endif + +#include + +#include +#include +#include +#include +#include +#include +#include + +#include "ts_486wdt.h" + +#define LOG_LEVEL KERN_INFO + +static unsigned long wdtmrctl; + +static int sc520_wdt_ping (void ) +{ + writew (WDT_RESET_KEYSEQ1, (unsigned long) wdtmrctl) ; + writew (WDT_RESET_KEYSEQ2, (unsigned long) wdtmrctl) ; + + dprintk("WDT was written to\n"); + + return 1; +} + + + +static void sc520_wdt_startup (unsigned long enable) +{ + + union sc520_wdtmrctl_reg wdtregister; + wdtregister.wdtmrctl.wdt_ctl = 0XD0; + + if (enable >= 1) + wdtregister.wdtmrctl.exp_timeout = (unsigned int) enable; + else + wdtregister.wdtmrctl.exp_timeout = 0x10; + + writew ( WDT_EN_KEYSEQ1, (unsigned long) wdtmrctl); + writew ( WDT_EN_KEYSEQ2, (unsigned long) wdtmrctl); + printk (LOG_LEVEL "\nAMD Elan SC520 WDT enable sequence\n"); + + dprintk("\value of wdtmrctl_register: %x\n", wdtregister.wdtmrctl_reg); + + printk(LOG_LEVEL "\nAMD Elan SC520 WDT started with timeout of %xh \n", wdtregister.wdtmrctl.exp_timeout); + writew (wdtregister.wdtmrctl_reg, (unsigned long) wdtmrctl); +} + + +/* + * /dev/watchdog handling + */ + +static loff_t fop_nollseek (struct file * filep, loff_t offset, int whence) +{ + return -ESPIPE; +} + +static ssize_t fop_read (struct file * filep, char * buf, size_t count, loff_t * ppos) +{ + return -EINVAL; +} + +static ssize_t fop_write (struct file * filep, const char * buff, size_t count, loff_t *ppos) +{ + /*no seeking allowed!*/ + if (ppos !=&filep->f_pos) + return -ESPIPE; + + if (sc520_wdt_ping ()) + return count; + else + return EIO; +} + + +static int fop_open (struct inode * inode, struct file * filep) +{ + return 0 ; +} + + + +int fop_ioctl (struct inode *inode, struct file *filep, + unsigned int cmd, unsigned long arg) +{ + switch (cmd) + { + case WDT_PING: + if (sc520_wdt_ping()) + return 0; + else + return EIO; + break; + case WDT_BEGIN: + sc520_wdt_startup(arg); + return 0; + break; + default: + return -EINVAL; + break; + }; +} + +struct file_operations sc520_wdt_fops = { + /* tagged interface is NOT C compliant; GNU specific */ + + owner: THIS_MODULE, //2.4.x compliant onl + llseek: fop_nollseek, + read: fop_read, + write: fop_write, + open: fop_open, + ioctl: fop_ioctl, +}; + +int init_module () { +#ifdef CONFIG_DEVFS_FS + if (devfs_register (NULL, "amdwdt", DEVFS_FL_AUTO_DEVNUM, WDT_MAJOR,0, + S_IFCHR | S_IRUGO | S_IWUGO, &sc520_wdt_fops, 0) < 0) { +#else + if ( register_chrdev ( WDT_MAJOR, "AMD Elan SC520 WatchDogTimer", + &sc520_wdt_fops) < 0) { +#endif + printk( KERN_WARNING "AMD SC520 Watch Dog Timer failed to registration"); + return -ENODEV ; + } else + wdtmrctl = (unsigned long) ioremap (SC520_WDTMRCTL, sizeof(union sc520_wdtmrctl_reg) ); + + printk (LOG_LEVEL "AMD Elan SC520 WatchDogTimer Module loaded\n") ; + return 0; + + +} + + +void cleanup_module () { +#ifdef CONFIG_DEVFS_FS + devfs_handle_t de; + de = devfs_find_handle (NULL, "amdwdt", 0,0,DEVFS_SPECIAL_CHR,0); + devfs_unregister (de); +#else + unregister_chrdev ( WDT_MAJOR, "AMD_SC520_WDT"); +#endif + iounmap((void *) wdtmrctl); + printk(LOG_LEVEL "WDT module was removed."); +} + + + + diff -Naur linux-2.4.23/drivers/char/ts_486wdt.h linux-2.4.23_TS_2_5/drivers/char/ts_486wdt.h --- linux-2.4.23/drivers/char/ts_486wdt.h Wed Dec 31 17:00:00 1969 +++ linux-2.4.23_TS_2_5/drivers/char/ts_486wdt.h Tue Dec 2 18:04:54 2003 @@ -0,0 +1,68 @@ +/*********************************************** + * Technologic Systems Liberty Young + * + * This driver only works with linux kernel 2.4.18 or compatible + * and only implements the basic features of the AMD SC520 Elan's WDT. + * Those features are starting the WDT with a user specified timeout, + * and reseting the WDT's counter. Of course, should the counter never + * be reseted, the Microprocessor its self will cause a hardware reset. + * Advanced features such as an interrupt timeout, of the "soft" timeout, + * are not supported. + * Though those features kinda defeat the purpose of a WD in an embedded + * system :) + * + * Time Out Value + * A simple equation for figuring out the timeout value is as follows + * (from the AMD Elans user's manual): + * Duration = 2 ^ (timeout value) / (33 MHz crystal frequency) + * + * Dec 2001 Created + * Nov 2002 Slight modifications + * + */ + + +#define SC520_WDTMRCTL 0XDFCB0 +#define SC520_WDT_MAGICNUM 0x57 //"W" +#define WDT_MAJOR 30 + +#define WDT_PING _IOW(SC520_WDT_MAGICNUM, 6, int) + +#define WDT_BEGIN _IO(SC520_WDT_MAGICNUM,0) + +#ifdef DEBUG +#define dprintk(x...) printk(## x) +#else +#define dprintk(x...) +#endif + +#define WDT_EN_KEYSEQ1 0x3333 +#define WDT_EN_KEYSEQ2 0XCCCC + +#define WDT_RESET_KEYSEQ1 0XAAAA +#define WDT_RESET_KEYSEQ2 0X5555 + +/* the WDT's MRCTL register*/ +struct sc520_wdtmrctl_def { + __u8 exp_timeout ; //exponential timeout + __u8 wdt_ctl ; //bits that control and set Watchdog timer + +}; + +union sc520_wdtmrctl_reg { + struct sc520_wdtmrctl_def wdtmrctl; + __u16 wdtmrctl_reg; +}; + + +/* the WDT's Count Low register*/ +struct sc520_wdtmrcntl_reg { + __u16 wdt_cntrl ; +}; + +/* the WDT's Count High Register*/ +struct sc520_wdtmrcnth_reg { + __u16 wdt_cntrh ; +}; + + diff -Naur linux-2.4.23/drivers/char/ts_keypad.c linux-2.4.23_TS_2_5/drivers/char/ts_keypad.c --- linux-2.4.23/drivers/char/ts_keypad.c Wed Dec 31 17:00:00 1969 +++ linux-2.4.23_TS_2_5/drivers/char/ts_keypad.c Mon Mar 15 10:25:48 2004 @@ -0,0 +1,330 @@ +/* + * (C) Technologic Systems August, 2003 + * Liberty Young :: liberty AT embeddedx86 DOT c o m + * Matrix Keypad Device Driver. Provides /dev/TSkeypad + * + * Technologic Systems does not admit any liability nor any warranty for + * this software or any of its use(s). This software is provided AS-IS. + * + * Version 1.0.0 September 2003 + * L.Y. Initial Version + */ + +//TODO: make device multi-readable +//TODO: limit on buffer size + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#define VERSION "1.0.00" +#define DFLT_IRQ 4 +#define STOP 1 +#define RUN 0 +#define UNUSED 2 +#define KEYPADPORT 0x7D +#define KEYPAD_DATAPORT 0x7E + +unsigned char keyMatrix[4][4] = { + { '1','2','3','A' }, + { '4','5','6','B' } , + { '7','8','9','C' }, + { '*', '0', '#', 'D'} +}; + +struct userdata_s { + int len; + char *buf; + task_queue *queue; +} userdata ; + + +struct datafifo_s { + char pressedkey; + struct datafifo_s *next; +} ; + +struct head_node { + struct datafifo_s *head; + struct datafifo_s *tail; +} fifo_head, userfifo_head; + +struct scaninfo_s { + int last_scancode; + int cols[4]; +} ; + +struct keypad_s { + task_queue *queue; + int stop ; + struct scaninfo_s new_data; + struct scaninfo_s old_data; +} keypad_data; + +static struct tq_struct read_task; +static struct tq_struct keypad_task; +static devfs_handle_t dev_handle; + +void handle_keypress (unsigned char); +void process_keypaddata (unsigned long); +void process_read (void *); +struct scaninfo_s scan_keypad (); +void service_timer_interrupt (void *); +void setup_timer_interrupt (); +static ssize_t service_readrequest (struct file * , char *, size_t , loff_t *); +static int keypad_fopen (struct inode *, struct file *); +static int keypad_fclose (struct inode *, struct file *); + + +struct file_operations tskeypad_fops = { + owner: THIS_MODULE, + open: keypad_fopen, + read: service_readrequest, + release: keypad_fclose, +} ; + + +DECLARE_WAIT_QUEUE_HEAD (cleanup_waitq); +DECLARE_WAIT_QUEUE_HEAD (read_waitq); + +int add_node (struct head_node *head, struct datafifo_s *node) { + if (!node) + return -1; + + if (!head->head){ + head->head = node; + head->tail = node; + return 1; + } + + head->tail->next = node; + head->tail = node; + + return 1; +} + +int pop_node (struct head_node *head) { + struct datafifo_s *oldnode ; + + oldnode = head->head; + if (head->head->next == NULL) { + kfree (oldnode); + head->head = NULL; + return 0; + } + + head->head = head->head->next; + kfree(oldnode); + return 1; + +} + +void service_timer_interrupt (void *ptr) { + unsigned long unused = 0; + struct keypad_s * data= (struct keypad_s *)ptr; + if ( data->stop == STOP) { + wake_up_interruptible(&cleanup_waitq); + return ; + } + + data->new_data = scan_keypad(); + process_keypaddata(unused); + queue_task(&keypad_task, &tq_timer); +} + +struct scaninfo_s scan_keypad () { + struct scaninfo_s result; + //set the all rows to high + outb (0xEF, KEYPAD_DATAPORT); //set row 1-A low (header pin 1, dio2_0) + result.cols[0] = inb(KEYPAD_DATAPORT) & 0x0F ; + outb (0xDF, KEYPAD_DATAPORT); //set row 4-B low (header pin 2, dio2_1) + result.cols[1] = inb(KEYPAD_DATAPORT) & 0x0F ; + outb(0xBF, KEYPAD_DATAPORT); //set row 7-C low (header pin 3, dio2_2) + result.cols[2] = inb (KEYPAD_DATAPORT) & 0x0F ; + outb(0x7F, KEYPAD_DATAPORT); //set row *-D low (header pin 4, dio2_3) + result.cols[3] = inb (KEYPAD_DATAPORT) & 0x0F ; + + return result ; +} + +void process_keypaddata (unsigned long arg) { + int i,j =0 ; + char new_key, old_key; + + struct scaninfo_s incoming= keypad_data.new_data ; + struct scaninfo_s *old = &keypad_data.old_data; + + for (i=0; i < 4; i++){ + new_key = ~incoming.cols[i] & 0x0F; + old_key = old->cols[i] ; + for (j=0; j<4; j++) { //on each row, + //check the bit if key was previously set + if ( (0x01 << j) & old_key) { + //check if new key is NOT set..released + if ( !((0x01 << j) & new_key)) { + handle_keypress (keyMatrix[j][i]); + old->cols[i] ^= (0x01 << j); + } + } else + if ( (0x01 <cols[i] = new_key; + } + } +} + + +void process_read (void * arg){ + struct head_node *userfifo = (struct head_node *) arg; + struct datafifo_s *newnode ; + + if (fifo_head.head == NULL) { + wake_up_interruptible(&read_waitq); + return ; + } + + //unroll datafifo into userfifo (a context process safe buffer) + do { + newnode = kmalloc (sizeof(*newnode), GFP_ATOMIC); + newnode->next=NULL; + newnode->pressedkey= fifo_head.head->pressedkey; + add_node (userfifo, newnode); + } while (pop_node(&fifo_head)) ; + + wake_up_interruptible(&read_waitq); + return ; +} + +int keypad_fopen (struct inode *inode, struct file *filep) { + + MOD_INC_USE_COUNT; + setup_timer_interrupt(); + return 0; +} + +int keypad_fclose (struct inode *inode, struct file *filep){ + MOD_DEC_USE_COUNT; + keypad_data.stop = STOP; + return 0; +} + +ssize_t service_readrequest (struct file *filep, char *buf, + size_t count, loff_t *offp) { + + int len =0; + init_waitqueue_head(&read_waitq); + + read_task.routine = process_read; + read_task.data = (void *)&userfifo_head; + + queue_task (&read_task, &tq_timer); + interruptible_sleep_on(&read_waitq); /* sleep till completion */ + + if (!userfifo_head.head) { + return len ; + } + + //we now have a data structure that is SAFE to sleep on and + //run within user context; + do { + len += sprintf(buf+len, "%c", userfifo_head.head->pressedkey); + }while ( pop_node(&userfifo_head ) & (len+sizeof(char) < count) ); + + return len ; +} + + +void setup_dioports() { + char data; + //TODO: error checking + request_region(KEYPADPORT, 1, "matrix keypad"); + request_region (KEYPAD_DATAPORT, 1, "matrix keypad"); + data = inb(KEYPADPORT); + data |= 0x02; + outb(data, KEYPADPORT); //pins 0-3 as inputs, pins 4-7 as outputs + +} + +void setup_userland () { + dev_handle = devfs_register(NULL, "SBC/TSKeypad", + DEVFS_FL_DEFAULT | DEVFS_FL_AUTO_DEVNUM, 0, 0, + S_IFCHR |S_IRUSR | S_IRGRP | S_IROTH, + &tskeypad_fops, 0); +} + +void setup_timer_interrupt () { + keypad_data.stop = RUN; + keypad_task.routine = service_timer_interrupt; + keypad_task.data = (void *)&keypad_data; + queue_task(&keypad_task, &tq_timer); +} + +void handle_keypress (unsigned char key ) { + struct datafifo_s *node; + + node = kmalloc(sizeof(struct datafifo_s), GFP_ATOMIC); + if (!node) + return ; + node->pressedkey= key; + node->next = NULL; + add_node(&fifo_head, node); + return ; +} + +static int tskeypad_init () { + int i; + + init_waitqueue_head(&cleanup_waitq); + fifo_head.head = fifo_head.tail = NULL; + userfifo_head.head = userfifo_head.tail = NULL; + keypad_data.stop = STOP; + + for (i=0;i<4;i++) { + keypad_data.new_data.cols[i]=0; + keypad_data.old_data.cols[i]=0; + } + setup_userland(); + setup_dioports (); + printk ("Technologic Systems Matrix KeyPad Driver V. %s\n", VERSION ); + return 0; +} + + +void tskeypad_remove () { + if (MOD_IN_USE) + return; + + if (keypad_data.stop != STOP) { + keypad_data.stop = STOP; + interruptible_sleep_on(&cleanup_waitq); + } + + release_region(KEYPADPORT, 1); + release_region(KEYPAD_DATAPORT, 1); + devfs_unregister(dev_handle); + if (userfifo_head.head) + while ( pop_node(&userfifo_head ) ) {}; //avoid memory leaks + + if (fifo_head.head) + while (pop_node(&fifo_head)) {} ; + + printk ("TS Matrix Keypad..Exiting\n"); +} + +module_init (tskeypad_init); +module_exit (tskeypad_remove); + +MODULE_AUTHOR("Technologic Systems: Liberty Young"); +MODULE_DESCRIPTION("Driver matrix Keypad on TS SBCs)"); +MODULE_LICENSE("GPL"); + diff -Naur linux-2.4.23/drivers/misc/Makefile linux-2.4.23_TS_2_5/drivers/misc/Makefile --- linux-2.4.23/drivers/misc/Makefile Fri Dec 29 15:07:22 2000 +++ linux-2.4.23_TS_2_5/drivers/misc/Makefile Tue Dec 2 18:05:00 2003 @@ -11,6 +11,9 @@ O_TARGET := misc.o +obj-y := ts_sbcinfo.o +export-objs := ts_sbcinfo.o + include $(TOPDIR)/Rules.make fastdep: diff -Naur linux-2.4.23/drivers/misc/ts_sbcinfo.c linux-2.4.23_TS_2_5/drivers/misc/ts_sbcinfo.c --- linux-2.4.23/drivers/misc/ts_sbcinfo.c Wed Dec 31 17:00:00 1969 +++ linux-2.4.23_TS_2_5/drivers/misc/ts_sbcinfo.c Fri Jun 25 16:33:46 2004 @@ -0,0 +1,302 @@ +/* + * ts_sbcinfo.c + * Liberty Young Technologic Systems + * spam_filter(email): liberty(at)embeddedx86.com/dot/com + * These functions add proc entries to display information + * about the SingleBoardComputer +*/ + +#include +#include +#include +#include +#include +#include +#include +#include + +struct sbc_info ts_sbc; + +struct sbc_info *get_sbcinfo ( void ) { + struct sbc_info *info; + info = NULL; + + info = kmalloc (sizeof(struct sbc_info), GFP_KERNEL); + if (!info) + return info; + + memset (info, 0, sizeof(struct sbc_info)); + *info = ts_sbc; + return info; +} +void remove_sbcinfo ( struct sbc_info *info) +{ + kfree (info); +} + +void sbc_flipled ( int direction) { + struct sbc_info *info; + unsigned int temp; + + info = get_sbcinfo(); + if ( !info) + return; + switch (info->board_id) { + case 5300: + case 5400: + case 5500: + //request region? + temp = inb(0x77); + temp &= 0x01; //bit 0 is LED bit + temp = ~temp & 0x01; + outb(temp, 0X77); + default: + break; + } + + remove_sbcinfo (info); +} + + +EXPORT_SYMBOL(remove_sbcinfo); +EXPORT_SYMBOL(get_sbcinfo); + +static int sbc_setinfo ( struct sbc_info *sbc){ + unsigned int err, temp; + + memset( sbc, 0, sizeof(struct sbc_info)); + err = check_region(0x74,4); + if (err < 0) + return err; + + request_region(0x74, 4, "TS-SBC"); + + temp = inb(IO_SBCID); + if (temp & 0x07) //first 3 bits are set? + temp &= 0x07; //Then we have a 3x00 SBC + + switch (temp) { + case TS5600: + sbc->board_id = 5600; + break; + case TS5400: + sbc->board_id = 5400; + break; + case TS5300: + sbc->board_id = 5300; + break; + case TS5500: + sbc->board_id = 5500; + break; + case TS3300: + sbc->board_id = 3300; + break; + case TS3200: + sbc->board_id = 3200; + break; + case TS3100: + sbc->board_id = 3100; + break; + default: + sbc->board_id = 0; + } + //0x75 is Option Code I/O + temp = inb(0x75); + + //check for SRAM option + switch (sbc->board_id) { + case 5600: + case 5300: + case 3400: + case 3300: + case 3200: + if (temp & 0x01) + sbc->sram = 1; + break; + default: + break; + } + + //Does board support Analog to Digital support? + switch (sbc->board_id) { + case 5600: + sbc->AtoD = 1; //board no longer needs PLD changes + break; + case 5500: + case 3300: + if (temp & 0x04) + sbc->AtoD = 1; + break; + default: + break; + } + + //Is board set up to do RS485 and auto485? + //only 5300(rev c), 5400, and 5500 can + //at this point + switch ( sbc->board_id) { + case 5600: + case 5400: + case 5500: + if ( (temp & 0x02) == 0x02){ + sbc->RS485 = 1; + sbc->auto485 = 1; //they just have it + } + break; + case 5700: + if ( (temp & 0x02) == 0x02) + sbc->RS485 = 1; + break; + case 5300: + if ( (temp & 0x02) == 0x02) + sbc->RS485 = 1; + + if (temp & 0x0A) + sbc->auto485 = 1; + break; + default: + sbc->auto485=0; + break; + } + + /* 0x76 is another Option code */ + temp = inb(0x76); + + //check for Industrial Temp + if (temp & 0x02) + sbc->industrial = 1; + + //check for external reset pin + switch (sbc->board_id) { + case 5600: + case 3400: + case 5500: + if (temp & 0x01) + sbc->extrst = 1; + break; + case 5700: + sbc->extrst = 1; + default: + sbc->extrst = 0; + } + + // 0x77 is Jumpers and LED...bits 1 - 7 are r/o + // bit 0 is r /w + // 5x00 only + + temp = inb(0x77); + + switch (sbc->board_id){ + case 5700: + case 5600: + case 5500: + case 5400: + case 5300: + sbc->jumpers = (temp & 0xFE); + break; + default: + sbc->jumpers = 0; + } + + release_region(0x74,4); + + return 0; +} + +static int sbc_read_proc(char *page, char **start, off_t off, + int count, int *eof, void *data) +{ + int len = 0; + unsigned int temp; + + len += sprintf(page + len, "Board ID: TS-%d\n", + ts_sbc.board_id ); + len += sprintf(page + len, "RS485: %s\n", + ts_sbc.RS485 ? "yes" : "no"); + len += sprintf(page + len, "AnalogToDigital: %s\n", + ts_sbc.AtoD ? "yes" : "no"); + len += sprintf(page + len, "Auto485: %s\n", + ts_sbc.auto485 ? "yes" : "no"); + len += sprintf(page + len, "SRAM: %s\n", + ts_sbc.sram ? "yes" : "no"); + len += sprintf(page + len, "External Reset: %s\n", + ts_sbc.extrst ? "yes" : "no"); + + //Jumper reads are only 5x00 + switch (ts_sbc.board_id) { + case 5600: + case 5300: + case 5400: + case 5500: + request_region(0x77,1,"TS-SBC"); + temp = inb(0x77); + len += sprintf(page + len, "JPS: "); + + if (temp & 0x02) + len += sprintf(page + len, "JP1 "); + if (temp & 0x04) + len += sprintf(page + len, "JP2 "); + if (temp & 0x08) + len += sprintf(page + len, "JP3 "); + if (temp & 0x10) + len += sprintf(page + len, "JP4 "); + if (temp & 0x20) + len += sprintf(page + len, "JP5 "); + if (temp & 0x80) + if (ts_sbc.board_id == 5300) + len += sprintf(page + len, "JP8"); + else + len += sprintf(page + len, "JP6"); + len += sprintf(page +len, "\n"); + break; + default: + break; + } + + + if (len <= off+count) + *eof = 1; + *start = page + off; + len -= off; + if (len > count) + len =count; + + return len; +} + +static void sbc_remove_proc (struct proc_dir_entry *entry) { + remove_proc_entry (entry->name, + entry->parent); + entry = NULL; +} + +static int init_sbc_proc( void ) { + struct proc_dir_entry *entry, *parent_dir ; + int err; + + parent_dir = proc_mkdir("SBC", NULL); + if (parent_dir == NULL) + return -ENOMEM; + + entry = create_proc_read_entry ("info", S_IRUGO, parent_dir, sbc_read_proc, 0); + + if (entry == NULL) { + sbc_remove_proc (entry); + printk("ts_sbcinfo.c: unable to create proc entry SBC/info"); + return -ENOMEM; + } + + err = sbc_setinfo (&ts_sbc); + if (err < 0 ) { + sbc_remove_proc( entry); + sbc_remove_proc (parent_dir); + printk("ts_sbcinfo.c: Problems determing SBC information..Error %d\n",err); + return err; + } + + return 0; +} + + +__initcall(init_sbc_proc); + diff -Naur linux-2.4.23/drivers/video/Config.in linux-2.4.23_TS_2_5/drivers/video/Config.in --- linux-2.4.23/drivers/video/Config.in Fri Nov 28 11:26:20 2003 +++ linux-2.4.23_TS_2_5/drivers/video/Config.in Tue Feb 17 13:33:37 2004 @@ -30,6 +30,9 @@ tristate ' Permedia3 support (EXPERIMENTAL)' CONFIG_FB_PM3 fi fi + if [ "$TSYSTEMS" = "y" ]; then + tristate ' Technologic Systems TS-LCD1 (monochrome QVGA)' CONFIG_TSLCD1 + fi if [ "$CONFIG_ARCH_ACORN" = "y" ]; then bool ' Acorn VIDC support' CONFIG_FB_ACORN fi @@ -275,13 +278,13 @@ fi if [ "$CONFIG_FB_ACORN" = "y" -o "$CONFIG_FB_MAC" = "y" -o \ "$CONFIG_FB_SA1100" = "y" -o "$CONFIG_FB_VIRTUAL" = "y" -o \ - "$CONFIG_FB_TX3912" = "y" ]; then + "$CONFIG_FB_TX3912" = "y" -o "$CONFIG_TSLCD1" = "y" ]; then define_tristate CONFIG_FBCON_CFB2 y define_tristate CONFIG_FBCON_CFB4 y else if [ "$CONFIG_FB_ACORN" = "m" -o "$CONFIG_FB_MAC" = "m" -o \ "$CONFIG_FB_SA1100" = "m" -o "$CONFIG_FB_VIRTUAL" = "m" -o \ - "$CONFIG_FB_TX3912" = "m" ]; then + "$CONFIG_FB_TX3912" = "m" -o "$CONFIG_TSLCD1" = "m" ]; then define_tristate CONFIG_FBCON_CFB2 m define_tristate CONFIG_FBCON_CFB4 m fi diff -Naur linux-2.4.23/drivers/video/Makefile linux-2.4.23_TS_2_5/drivers/video/Makefile --- linux-2.4.23/drivers/video/Makefile Mon Aug 25 04:44:42 2003 +++ linux-2.4.23_TS_2_5/drivers/video/Makefile Tue Feb 17 13:33:38 2004 @@ -40,6 +40,7 @@ obj-$(CONFIG_PPC) += macmodes.o endif +obj-$(CONFIG_TSLCD1) += ts_lcd1.o obj-$(CONFIG_FB_ACORN) += acornfb.o obj-$(CONFIG_FB_AMIGA) += amifb.o obj-$(CONFIG_FB_PM2) += pm2fb.o fbgen.o diff -Naur linux-2.4.23/drivers/video/ts_lcd1.c linux-2.4.23_TS_2_5/drivers/video/ts_lcd1.c --- linux-2.4.23/drivers/video/ts_lcd1.c Wed Dec 31 17:00:00 1969 +++ linux-2.4.23_TS_2_5/drivers/video/ts_lcd1.c Tue Feb 17 13:33:38 2004 @@ -0,0 +1,349 @@ +/* + * TS-LCD1 Driver + * (c) Technologic Systems (info_AT__embeddedx86__DOT.com) + * author: Liberty Young + * + * Technologic Systems does not admit any liability nor any warranty + * for this software or any of its use(s). This software is provided + * AS-IS. + * + * This driver is only for the TS-LCD1 (monochrome QVGA PC/104 + * daughter board). + * + * L.Y. 02.04: First Release + * + */ + + + +#include +#include +#include +#include + +#include + +#include