r44 - in trunk: . oe oe/conf oe/conf/distro oe/conf/distro/include oe/conf/machine oe/packages oe/packages/base-files oe/packages/base-files/base-files oe/packages/base-files/base-files/akita oe/packages/base-files/base-files/amsdelta oe/packages/base-files/base-files/armzone-qt2410 oe/packages/base-files/base-files/c7x0 oe/packages/base-files/base-files/collie oe/packages/base-files/base-files/epia oe/packages/base-files/base-files/familiar oe/packages/base-files/base-files/h2200 oe/packages/base-files/base-files/h3600 oe/packages/base-files/base-files/h3900 oe/packages/base-files/base-files/h5xxx oe/packages/base-files/base-files/h6300 oe/packages/base-files/base-files/htcuniversal oe/packages/base-files/base-files/ipaq-pxa270 oe/packages/base-files/base-files/jornada56x oe/packages/base-files/base-files/jornada6xx oe/packages/base-files/base-files/jornada7xx oe/packages/base-files/base-files/licenses oe/packages/base-files/base-files/mtx-1 oe/packages/base-files/base-files/netbook-pro oe/packages/base-files/base-files/netvista oe/packages/base-files/base-files/nokia770 oe/packages/base-files/base-files/nylon oe/packages/base-files/base-files/openmn oe/packages/base-files/base-files/opensimpad oe/packages/base-files/base-files/openzaurus oe/packages/base-files/base-files/poodle oe/packages/base-files/base-files/share oe/packages/base-files/base-files/simpad oe/packages/base-files/base-files/slugos oe/packages/base-files/base-files/spitz oe/packages/base-files/base-files/tosa oe/packages/base-files/base-files/wrt54 oe/packages/base-files/base-files/xxs1500 oe/packages/images oe/packages/initscripts oe/packages/initscripts/initscripts-1.0 oe/packages/initscripts/initscripts-1.0/akita oe/packages/initscripts/initscripts-1.0/arm oe/packages/initscripts/initscripts-1.0/armzone-qt2410 oe/packages/initscripts/initscripts-1.0/c7x0 oe/packages/initscripts/initscripts-1.0/collie oe/packages/initscripts/initscripts-1.0/h3600 oe/packages/initscripts/initscripts-1.0/h3900 oe/packages/initscripts/initscripts-1.0/jornada56x oe/packages/initscripts/initscripts-1.0/jornada6xx oe/packages/initscripts/initscripts-1.0/jornada7xx oe/packages/initscripts/initscripts-1.0/openmn oe/packages/initscripts/initscripts-1.0/openzaurus oe/packages/initscripts/initscripts-1.0/poodle oe/packages/initscripts/initscripts-1.0/simpad oe/packages/initscripts/initscripts-1.0/slugos oe/packages/initscripts/initscripts-1.0/spitz oe/packages/initscripts/initscripts-1.0/tosa oe/packages/initscripts/initscripts-1.0/uml oe/packages/linux oe/packages/linux/linux-qt2410 oe/packages/linux/linux-qt2410/new oe/packages/linux/linux-qt2410/new/patches oe/packages/qt2410-utils oe/packages/qt2410-utils/files oe/packages/tasks oe/packages/uboot oe/packages/uboot/files oe/packages/uucp
mickey at gta01.hmw-consulting.de
mickey at gta01.hmw-consulting.de
Fri Sep 8 08:42:13 CEST 2006
Author: mickey
Date: 2006-09-08 06:42:04 +0000 (Fri, 08 Sep 2006)
New Revision: 44
Added:
trunk/oe/
trunk/oe/conf/
trunk/oe/conf/distro/
trunk/oe/conf/distro/include/
trunk/oe/conf/distro/include/preferred-openmoko-versions.inc
trunk/oe/conf/distro/include/sane-srcdates.inc
trunk/oe/conf/distro/openmoko.conf
trunk/oe/conf/machine/
trunk/oe/conf/machine/armzone-qt2410.conf
trunk/oe/conf/site.conf
trunk/oe/packages/
trunk/oe/packages/base-files/
trunk/oe/packages/base-files/base-files/
trunk/oe/packages/base-files/base-files/akita/
trunk/oe/packages/base-files/base-files/akita/fstab
trunk/oe/packages/base-files/base-files/amsdelta/
trunk/oe/packages/base-files/base-files/amsdelta/fstab
trunk/oe/packages/base-files/base-files/armzone-qt2410/
trunk/oe/packages/base-files/base-files/armzone-qt2410/fstab
trunk/oe/packages/base-files/base-files/c7x0/
trunk/oe/packages/base-files/base-files/c7x0/fstab
trunk/oe/packages/base-files/base-files/c7x0/usbd
trunk/oe/packages/base-files/base-files/collie/
trunk/oe/packages/base-files/base-files/collie/fstab
trunk/oe/packages/base-files/base-files/collie/usbd
trunk/oe/packages/base-files/base-files/epia/
trunk/oe/packages/base-files/base-files/epia/fstab
trunk/oe/packages/base-files/base-files/familiar/
trunk/oe/packages/base-files/base-files/familiar/issue
trunk/oe/packages/base-files/base-files/familiar/issue.net
trunk/oe/packages/base-files/base-files/filesystems
trunk/oe/packages/base-files/base-files/fstab
trunk/oe/packages/base-files/base-files/h2200/
trunk/oe/packages/base-files/base-files/h2200/fstab
trunk/oe/packages/base-files/base-files/h3600/
trunk/oe/packages/base-files/base-files/h3600/fstab
trunk/oe/packages/base-files/base-files/h3900/
trunk/oe/packages/base-files/base-files/h3900/fstab
trunk/oe/packages/base-files/base-files/h5xxx/
trunk/oe/packages/base-files/base-files/h5xxx/fstab
trunk/oe/packages/base-files/base-files/h6300/
trunk/oe/packages/base-files/base-files/h6300/fstab
trunk/oe/packages/base-files/base-files/host.conf
trunk/oe/packages/base-files/base-files/htcuniversal/
trunk/oe/packages/base-files/base-files/htcuniversal/fstab
trunk/oe/packages/base-files/base-files/inputrc
trunk/oe/packages/base-files/base-files/ipaq-pxa270/
trunk/oe/packages/base-files/base-files/ipaq-pxa270/fstab
trunk/oe/packages/base-files/base-files/issue
trunk/oe/packages/base-files/base-files/issue.net
trunk/oe/packages/base-files/base-files/jornada56x/
trunk/oe/packages/base-files/base-files/jornada56x/fstab
trunk/oe/packages/base-files/base-files/jornada6xx/
trunk/oe/packages/base-files/base-files/jornada6xx/fstab
trunk/oe/packages/base-files/base-files/jornada7xx/
trunk/oe/packages/base-files/base-files/jornada7xx/fstab
trunk/oe/packages/base-files/base-files/licenses/
trunk/oe/packages/base-files/base-files/licenses/Artistic
trunk/oe/packages/base-files/base-files/licenses/BSD
trunk/oe/packages/base-files/base-files/licenses/GPL-2
trunk/oe/packages/base-files/base-files/licenses/LGPL-2
trunk/oe/packages/base-files/base-files/licenses/LGPL-2.1
trunk/oe/packages/base-files/base-files/motd
trunk/oe/packages/base-files/base-files/mtx-1/
trunk/oe/packages/base-files/base-files/mtx-1/fstab
trunk/oe/packages/base-files/base-files/mtx-1/profile
trunk/oe/packages/base-files/base-files/netbook-pro/
trunk/oe/packages/base-files/base-files/netbook-pro/fstab
trunk/oe/packages/base-files/base-files/netvista/
trunk/oe/packages/base-files/base-files/netvista/fstab
trunk/oe/packages/base-files/base-files/nokia770/
trunk/oe/packages/base-files/base-files/nokia770/fstab
trunk/oe/packages/base-files/base-files/nsswitch.conf
trunk/oe/packages/base-files/base-files/nylon/
trunk/oe/packages/base-files/base-files/nylon/issue
trunk/oe/packages/base-files/base-files/nylon/issue.net
trunk/oe/packages/base-files/base-files/openmn/
trunk/oe/packages/base-files/base-files/openmn/fstab
trunk/oe/packages/base-files/base-files/openmn/issue
trunk/oe/packages/base-files/base-files/openmn/issue.net
trunk/oe/packages/base-files/base-files/openmn/profile
trunk/oe/packages/base-files/base-files/openmn/usbd
trunk/oe/packages/base-files/base-files/opensimpad/
trunk/oe/packages/base-files/base-files/opensimpad/issue
trunk/oe/packages/base-files/base-files/opensimpad/issue.net
trunk/oe/packages/base-files/base-files/openzaurus/
trunk/oe/packages/base-files/base-files/openzaurus/issue
trunk/oe/packages/base-files/base-files/openzaurus/issue.net
trunk/oe/packages/base-files/base-files/poodle/
trunk/oe/packages/base-files/base-files/poodle/fstab
trunk/oe/packages/base-files/base-files/poodle/usbd
trunk/oe/packages/base-files/base-files/profile
trunk/oe/packages/base-files/base-files/share/
trunk/oe/packages/base-files/base-files/share/dot.bashrc
trunk/oe/packages/base-files/base-files/share/dot.profile
trunk/oe/packages/base-files/base-files/simpad/
trunk/oe/packages/base-files/base-files/simpad/fstab
trunk/oe/packages/base-files/base-files/slugos/
trunk/oe/packages/base-files/base-files/slugos/fstab
trunk/oe/packages/base-files/base-files/spitz/
trunk/oe/packages/base-files/base-files/spitz/fstab
trunk/oe/packages/base-files/base-files/tosa/
trunk/oe/packages/base-files/base-files/tosa/fstab
trunk/oe/packages/base-files/base-files/tosa/usbd
trunk/oe/packages/base-files/base-files/usbd
trunk/oe/packages/base-files/base-files/wrt54/
trunk/oe/packages/base-files/base-files/wrt54/fstab
trunk/oe/packages/base-files/base-files/wrt54/profile
trunk/oe/packages/base-files/base-files/xxs1500/
trunk/oe/packages/base-files/base-files/xxs1500/fstab
trunk/oe/packages/base-files/base-files_3.0.14.bb
trunk/oe/packages/images/
trunk/oe/packages/images/openmoko-devel-image.bb
trunk/oe/packages/images/openmoko-image.bb
trunk/oe/packages/initscripts/
trunk/oe/packages/initscripts/initscripts-1.0/
trunk/oe/packages/initscripts/initscripts-1.0/akita/
trunk/oe/packages/initscripts/initscripts-1.0/akita/devices
trunk/oe/packages/initscripts/initscripts-1.0/arm/
trunk/oe/packages/initscripts/initscripts-1.0/arm/alignment.sh
trunk/oe/packages/initscripts/initscripts-1.0/armzone-qt2410/
trunk/oe/packages/initscripts/initscripts-1.0/armzone-qt2410/devices
trunk/oe/packages/initscripts/initscripts-1.0/banner
trunk/oe/packages/initscripts/initscripts-1.0/bootmisc.sh
trunk/oe/packages/initscripts/initscripts-1.0/c7x0/
trunk/oe/packages/initscripts/initscripts-1.0/c7x0/devices
trunk/oe/packages/initscripts/initscripts-1.0/checkfs.sh
trunk/oe/packages/initscripts/initscripts-1.0/checkroot.sh
trunk/oe/packages/initscripts/initscripts-1.0/collie/
trunk/oe/packages/initscripts/initscripts-1.0/collie/devices
trunk/oe/packages/initscripts/initscripts-1.0/device_table.txt
trunk/oe/packages/initscripts/initscripts-1.0/devices
trunk/oe/packages/initscripts/initscripts-1.0/devpts
trunk/oe/packages/initscripts/initscripts-1.0/devpts.sh
trunk/oe/packages/initscripts/initscripts-1.0/finish
trunk/oe/packages/initscripts/initscripts-1.0/h3600/
trunk/oe/packages/initscripts/initscripts-1.0/h3600/devices
trunk/oe/packages/initscripts/initscripts-1.0/h3900/
trunk/oe/packages/initscripts/initscripts-1.0/h3900/devices
trunk/oe/packages/initscripts/initscripts-1.0/halt
trunk/oe/packages/initscripts/initscripts-1.0/hostname.sh
trunk/oe/packages/initscripts/initscripts-1.0/jornada56x/
trunk/oe/packages/initscripts/initscripts-1.0/jornada56x/devices
trunk/oe/packages/initscripts/initscripts-1.0/jornada6xx/
trunk/oe/packages/initscripts/initscripts-1.0/jornada6xx/devices
trunk/oe/packages/initscripts/initscripts-1.0/jornada7xx/
trunk/oe/packages/initscripts/initscripts-1.0/jornada7xx/devices
trunk/oe/packages/initscripts/initscripts-1.0/mountall.sh
trunk/oe/packages/initscripts/initscripts-1.0/mountnfs.sh
trunk/oe/packages/initscripts/initscripts-1.0/openmn/
trunk/oe/packages/initscripts/initscripts-1.0/openmn/extractfs
trunk/oe/packages/initscripts/initscripts-1.0/openmn/packages
trunk/oe/packages/initscripts/initscripts-1.0/openmn/umountfs
trunk/oe/packages/initscripts/initscripts-1.0/openzaurus/
trunk/oe/packages/initscripts/initscripts-1.0/openzaurus/checkversion
trunk/oe/packages/initscripts/initscripts-1.0/poodle/
trunk/oe/packages/initscripts/initscripts-1.0/poodle/devices
trunk/oe/packages/initscripts/initscripts-1.0/populate-volatile.sh
trunk/oe/packages/initscripts/initscripts-1.0/ramdisk
trunk/oe/packages/initscripts/initscripts-1.0/reboot
trunk/oe/packages/initscripts/initscripts-1.0/rmnologin
trunk/oe/packages/initscripts/initscripts-1.0/save-rtc.sh
trunk/oe/packages/initscripts/initscripts-1.0/sendsigs
trunk/oe/packages/initscripts/initscripts-1.0/simpad/
trunk/oe/packages/initscripts/initscripts-1.0/simpad/devices
trunk/oe/packages/initscripts/initscripts-1.0/single
trunk/oe/packages/initscripts/initscripts-1.0/slugos/
trunk/oe/packages/initscripts/initscripts-1.0/slugos/alignment.sh
trunk/oe/packages/initscripts/initscripts-1.0/slugos/banner
trunk/oe/packages/initscripts/initscripts-1.0/slugos/checkroot.sh
trunk/oe/packages/initscripts/initscripts-1.0/slugos/devices.patch
trunk/oe/packages/initscripts/initscripts-1.0/slugos/domainname.sh
trunk/oe/packages/initscripts/initscripts-1.0/slugos/mountall.sh
trunk/oe/packages/initscripts/initscripts-1.0/slugos/rootopts.patch
trunk/oe/packages/initscripts/initscripts-1.0/slugos/umountfs
trunk/oe/packages/initscripts/initscripts-1.0/slugos/umountnfs.sh
trunk/oe/packages/initscripts/initscripts-1.0/spitz/
trunk/oe/packages/initscripts/initscripts-1.0/spitz/devices
trunk/oe/packages/initscripts/initscripts-1.0/sysfs.sh
trunk/oe/packages/initscripts/initscripts-1.0/tosa/
trunk/oe/packages/initscripts/initscripts-1.0/tosa/devices
trunk/oe/packages/initscripts/initscripts-1.0/uml/
trunk/oe/packages/initscripts/initscripts-1.0/uml/devices
trunk/oe/packages/initscripts/initscripts-1.0/umountfs
trunk/oe/packages/initscripts/initscripts-1.0/umountnfs.sh
trunk/oe/packages/initscripts/initscripts-1.0/urandom
trunk/oe/packages/initscripts/initscripts-1.0/volatiles
trunk/oe/packages/initscripts/initscripts-slugos_1.0.bb
trunk/oe/packages/initscripts/initscripts_1.0.bb
trunk/oe/packages/linux/
trunk/oe/packages/linux/README
trunk/oe/packages/linux/linux-qt2410/
trunk/oe/packages/linux/linux-qt2410/defconfig-armzone-qt2410
trunk/oe/packages/linux/linux-qt2410/defconfig-armzone-qt2410.laforge
trunk/oe/packages/linux/linux-qt2410/new/
trunk/oe/packages/linux/linux-qt2410/new/patches-20060907.tar.bz2
trunk/oe/packages/linux/linux-qt2410/new/patches/
trunk/oe/packages/linux/linux-qt2410/new/patches/mmc-fixdebugp.patch
trunk/oe/packages/linux/linux-qt2410/new/patches/mmc-fixdmalockup.patch
trunk/oe/packages/linux/linux-qt2410/new/patches/mmc-get_ro.patch
trunk/oe/packages/linux/linux-qt2410/new/patches/mmc-sdipre_limit.patch
trunk/oe/packages/linux/linux-qt2410/new/patches/mmc-tt1104.patch
trunk/oe/packages/linux/linux-qt2410/new/patches/mmc.patch
trunk/oe/packages/linux/linux-qt2410/new/patches/qt2410-base.patch
trunk/oe/packages/linux/linux-qt2410/new/patches/qt2410-biglcd.patch
trunk/oe/packages/linux/linux-qt2410/new/patches/qt2410-cs8900.patch
trunk/oe/packages/linux/linux-qt2410/new/patches/s3c2410_serial-nodebug.patch
trunk/oe/packages/linux/linux-qt2410/new/patches/series
trunk/oe/packages/linux/linux-qt2410/new/patches/touchscreen.patch
trunk/oe/packages/linux/linux-qt2410/new/patches/udc.patch
trunk/oe/packages/linux/linux-qt2410/patches-2.6.17.7-qt2401-20060806.tar.bz2
trunk/oe/packages/linux/linux-qt2410/qt2410-biglcd.patch
trunk/oe/packages/linux/linux-qt2410/qt2410-touchscreen.patch
trunk/oe/packages/linux/linux-qt2410_2.6.17.7.bb
trunk/oe/packages/linux/qt2410-kernel_2.6.bb
trunk/oe/packages/qt2410-utils/
trunk/oe/packages/qt2410-utils/files/
trunk/oe/packages/qt2410-utils/files/s3c2410_boot_usb-20060807.tar.bz2
trunk/oe/packages/qt2410-utils/files/sjf2410-linux-20060807.tar.bz2
trunk/oe/packages/qt2410-utils/s3c2410-boot-usb-native_20060807.bb
trunk/oe/packages/qt2410-utils/sjf2410-linux-native_20060807.bb
trunk/oe/packages/tasks/
trunk/oe/packages/tasks/task-openmoko.bb
trunk/oe/packages/uboot/
trunk/oe/packages/uboot/files/
trunk/oe/packages/uboot/files/arm_flags.patch
trunk/oe/packages/uboot/files/qt2410.h
trunk/oe/packages/uboot/files/qt2410_nand.h
trunk/oe/packages/uboot/files/qt2410_ram.h
trunk/oe/packages/uboot/files/u-boot-20060807-qt2410.patch
trunk/oe/packages/uboot/files/u-boot-20060807.tar.bz2
trunk/oe/packages/uboot/files/u-boot-20060907.tar.bz2
trunk/oe/packages/uboot/uboot-qt2410_0.0+cvs20060807.bb
trunk/oe/packages/uboot/uboot-qt2410_0.0+cvs20060907.bb
trunk/oe/packages/uucp/
trunk/oe/packages/uucp/uucp_1.07.bb
Log:
initial commit of OpenMoko SDK metadata as per 20060908 release
Added: trunk/oe/conf/distro/include/preferred-openmoko-versions.inc
===================================================================
--- trunk/oe/conf/distro/include/preferred-openmoko-versions.inc 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/conf/distro/include/preferred-openmoko-versions.inc 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,19 @@
+#
+# Specify which versions of packages to build
+#
+
+#work around some breakages
+#SRCDATE_minimo=20050401
+
+#set some preferred providers:
+PREFERRED_PROVIDER_dbus-glib = "dbus-glib"
+PREFERRED_PROVIDER_gconf = "gconf-dbus"
+PREFERRED_PROVIDER_gnome-vfs = "gnome-vfs-dbus"
+PREFERRED_PROVIDER_virtual/xserver = "xserver-kdrive"
+PREFERRED_PROVIDER_bluez-utils = "bluez-utils-dbus"
+
+PREFERRED_VERSION_atk = "1.9.0"
+PREFERRED_VERSION_pango = "1.8.2"
+PREFERRED_VERSION_glib-2.0 = "2.6.4"
+PREFERRED_VERSION_gtk+ = "2.6.10"
+PREFERRED_VERSION_gtk-engines = "2.6.5"
Added: trunk/oe/conf/distro/include/sane-srcdates.inc
===================================================================
--- trunk/oe/conf/distro/include/sane-srcdates.inc 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/conf/distro/include/sane-srcdates.inc 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,85 @@
+# Lock down some SRCDATEs, see http://svn.o-hand.com/view/poky/trunk/openembedded/conf/distro/poky.conf for the original version
+
+# Kernel modules
+SRCDATE_at76c503a-modules ?= "20060814"
+SRCDATE_prism54-module ?= "20060814"
+
+# X11 libs, extentions and protos
+SRCDATE_xcalibrate ?= "20060804"
+SRCDATE_compositeext ?= "20060814"
+SRCDATE_drm ?= "20060814"
+SRCDATE_drm-kernel ?= "20060814"
+SRCDATE_fixesext ?= "20060814"
+SRCDATE_libxext-native ?= "20060814"
+SRCDATE_libxss ?= "20060814"
+SRCDATE_recordext ?= "20060814"
+SRCDATE_renderext ?= "20060814"
+SRCDATE_xcalibrate ?= "20060814"
+SRCDATE_xcalibrateext ?= "20060814"
+SRCDATE_xxf86dgaext ?= "20060814"
+SRCDATE_xxf86vmext ?= "20060814"
+
+# Matchbox / O-hand
+SRCDATE_contacts ?= "20060707"
+SRCDATE_dates ?= "20060707"
+SRCDATE_web ?= "20060613"
+SRCDATE_eds-dbus ?= "20060126"
+SRCDATE_matchbox-common ?= "20060612"
+SRCDATE_matchbox-config-gtk ?= "20060612"
+SRCDATE_matchbox-desktop ?= "20060612"
+SRCDATE_matchbox-keyboard ?= "20060612"
+SRCDATE_matchbox-panel ?= "20060612"
+SRCDATE_matchbox-panel-manager ?= "20060612"
+SRCDATE_matchbox-stroke ?= "20060612"
+SRCDATE_matchbox-themes-extra ?= "20060612"
+SRCDATE_matchbox-wm ?= "20060612"
+SRCDATE_libmatchbox ?= "20060612"
+SRCDATE_libfakekey ?= "20051101"
+SRCDATE_zaurusd ?= "20060628"
+
+# GPE
+SRCDATE_dasher-gpe ?= "20060814"
+SRCDATE_rosetta ?= "20060804"
+
+# GNOME
+SRCDATE_gconf-dbus ?= "20060719"
+SRCDATE_gnome-vfs-dbus ?= "20060119"
+SRCDATE_gtkhtml2 ?= "20060323"
+
+#Misc apps, sorted by alphabet
+SRCDATE_avetanabt ?= "20060814"
+SRCDATE_bl ?= "20060814"
+SRCDATE_dvbstream ?= "20060814"
+SRCDATE_dvbtraffic ?= "20060814"
+SRCDATE_dvbtune ?= "20060814"
+SRCDATE_fdclock ?= "20060814"
+SRCDATE_fltk ?= "20060814"
+SRCDATE_ipkg-link ?= "20050930"
+SRCDATE_ipkg-link-1 ?= "20050930"
+SRCDATE_ipkg-utils ?= "20050930"
+SRCDATE_ipkg-utils-native ?= "20050930"
+SRCDATE_kaffe-qt ?= "20060814"
+SRCDATE_kbdd ?= "20060814"
+SRCDATE_led ?= "20060814"
+SRCDATE_linux-input ?= "20060814"
+SRCDATE_madwifi-modules ?= "20060814"
+SRCDATE_mileage ?= "20060814"
+SRCDATE_minimo ?= "20050401"
+SRCDATE_mystun-server ?= "20060814"
+SRCDATE_olsrd ?= "20060814"
+SRCDATE_opencvs ?= "20060814"
+SRCDATE_oprofile ?= "20060214"
+SRCDATE_portaudio ?= "20060814"
+SRCDATE_putty ?= "20060814"
+SRCDATE_python-cairo ?= "20060814"
+SRCDATE_qemu-native ?= "20060723"
+SRCDATE_roadster ?= "20060814"
+SRCDATE_sctzap ?= "20060814"
+SRCDATE_tslib ?= "20051101"
+SRCDATE_waimea ?= "20060814"
+SRCDATE_xcompmgr ?= "20060814"
+SRCDATE_xirssi ?= "20060814"
+SRCDATE_xsvg ?= "20060814"
+SRCDATE_yamonenv ?= "20060814"
+SRCDATE_zroadmap ?= "20060814"
+
Added: trunk/oe/conf/distro/openmoko.conf
===================================================================
--- trunk/oe/conf/distro/openmoko.conf 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/conf/distro/openmoko.conf 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,100 @@
+#-----------------------------------------------------------------------------
+#@TYPE: Distribution
+#@NAME: OpenMoKo
+#@DESCRIPTION: Linux Distribution Configuration for the FIC GTA01 Project
+#-----------------------------------------------------------------------------
+
+#
+# Header
+#
+DISTRO_NAME = "OpenMoKo"
+DISTRO_VERSION = ".dev-snapshot-${SRCDATE}"
+#DISTRO_TYPE = "release"
+DISTRO_TYPE = "debug"
+
+#
+# Naming schemes
+#
+PARALLEL_INSTALL_MODULES = "1"
+INHERIT += "debian multimachine"
+
+#
+# Packaging and output format
+#
+INHERIT += "package_ipk"
+IMAGE_FSTYPES = "tar.gz ext2.gz jffs2"
+
+#
+# Binutils & Compiler
+#
+PREFERRED_PROVIDERS += " virtual/${TARGET_PREFIX}gcc-initial:gcc-cross-initial"
+PREFERRED_PROVIDERS += " virtual/${TARGET_PREFIX}gcc:gcc-cross"
+PREFERRED_PROVIDERS += " virtual/${TARGET_PREFIX}g++:gcc-cross"
+
+# NOTE: 4.1.1 should be used eventually
+PREFERRED_VERSION_gcc = "3.4.4"
+PREFERRED_VERSION_gcc-cross = "3.4.4"
+PREFERRED_VERSION_gcc-cross-initial = "3.4.4"
+PREFERRED_VERSION_binutils-cross = "2.15.94.0.1"
+PREFERRED_VERSION_binutils = "2.15.94.0.1"
+
+#
+# Target OS & FPU system
+#
+TARGET_OS = "linux"
+TARGET_FPU_arm = "soft"
+TARGET_FPU_armeb = "soft"
+PREFERRED_PROVIDER_virtual/libiconv = "glibc"
+PREFERRED_PROVIDER_virtual/libintl = "glibc"
+PREFERRED_VERSION_glibc = "2.3.5+cvs20050627"
+
+#
+# Features
+#
+DISTRO_FEATURES = "alsa bluetooth ext2 ipsec nfs ppp smbfs usbgadget"
+
+#
+# Bootstrap & Init
+#
+PREFERRED_PROVIDER_task-bootstrap = "task-bootstrap"
+require conf/distro/include/sane-srcdates.inc
+
+#
+# Framebuffer & X
+#
+PREFERRED_PROVIDER_virtual/libx11 ?= "diet-x11"
+PREFERRED_PROVIDER_virtual/ecore ?= "ecore-x11"
+PREFERRED_PROVIDER_virtual/evas ?= "evas-x11"
+PREFERRED_PROVIDER_virtual/esmart ?= "esmart-x11"
+PREFERRED_PROVIDER_virtual/libsdl = "libsdl-x11"
+PREFERRED_PROVIDER_virtual/xserver ?= "xserver-kdrive"
+PREFERRED_PROVIDER_tslib ?= "tslib"
+PREFERRED_PROVIDER_xserver ?= "xserver-kdrive"
+PREFERRED_VERSION_xserver-kdrive = "1.1.0+git${SRCDATE}"
+require conf/distro/include/preferred-xorg-versions-X11R7.1.inc
+
+#
+# Core System
+#
+PREFERRED_PROVIDER_dbus-glib = "dbus-glib"
+PREFERRED_PROVIDER_gconf = "gconf-dbus"
+PREFERRED_PROVIDER_gnome-vfs = "gnome-vfs-dbus"
+PREFERRED_PROVIDER_bluez-utils = "bluez-utils-dbus"
+
+#
+# Opie
+#
+QTE_VERSION = "2.3.10"
+PALMTOP_USE_MULTITHREADED_QTE = "yes"
+require conf/distro/include/preferred-opie-versions.inc
+
+#
+# Enlightenment
+#
+require conf/distro/include/preferred-e-versions.inc
+
+#
+# Versions for OpenMoko
+#
+require conf/distro/include/preferred-openmoko-versions.inc
+
Added: trunk/oe/conf/machine/armzone-qt2410.conf
===================================================================
--- trunk/oe/conf/machine/armzone-qt2410.conf 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/conf/machine/armzone-qt2410.conf 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,34 @@
+#-----------------------------------------------------------------------------
+#@TYPE: Machine
+#@NAME: armzone.com QT-2410
+#@DESCRIPTION: Machine configuration for armzone.com QT-2410 Development Board
+#-----------------------------------------------------------------------------
+
+TARGET_ARCH = "arm"
+IPKG_EXTRA_ARCHS = "armv4t"
+
+PREFERRED_PROVIDER_virtual/kernel = "qt2410-kernel"
+
+MACHINE_FEATURES = "kernel26 apm alsa bluetooth usbgadget"
+
+MACHINE_EXTRA_RDEPENDS = ""
+MACHINE_EXTRA_RRECOMMENDS = ""
+
+MACHINE_TASK_PROVIDER = "task-base"
+
+# used by sysvinit_2
+SERIAL_CONSOLE = "-h 115200 ttyS0"
+
+# used by some images
+ROOT_FLASH_SIZE = "60M"
+# extra jffs2 tweaks
+EXTRA_IMAGECMD_jffs2 = "--eraseblock=0x4000 --pad -n"
+
+# build tools
+EXTRA_IMAGEDEPENDS += "s3c2410-boot-usb-native sjf2410-linux-native"
+
+# gcc optimization
+PACKAGE_ARCH = "armv4t"
+TARGET_CC_ARCH = "-march=armv4t -mtune=arm920t"
+# -mcpu=arm920t"
+#include conf/machine/include/tune-arm920t.conf
Added: trunk/oe/conf/site.conf
===================================================================
--- trunk/oe/conf/site.conf 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/conf/site.conf 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,26 @@
+# OpenMoko site configuration file
+#
+# History:
+#
+# 2006.08.16 mickey created.
+
+DL_DIR = "${OMDIR}/sources"
+
+BBFILES := "${OMDIR}/openembedded/packages/*/*.bb ${OMDIR}/metadata/packages/*/*.bb"
+BBFILE_COLLECTIONS = "upstream local"
+BBFILE_PATTERN_upstream = "^${OMDIR}/openembedded/"
+BBFILE_PATTERN_local = "^/${OMDIR}/metadata/"
+BBFILE_PRIORITY_upstream = "5"
+BBFILE_PRIORITY_local = "10"
+
+BBINCLUDELOGS = "yes"
+KERNEL_CONSOLE = "tty1"
+#DEBUG_OPTIMIZATION = "-O -g3"
+#DEBUG_BUILD = "1"
+#INHIBIT_PACKAGE_STRIP = "1"
+SOURCEFORGE_MIRROR = "http://heanet.dl.sf.net"
+PARALLEL_MAKE = ""
+INHERIT += "patcher"
+
+SRCDATE = "20060814"
+
Added: trunk/oe/packages/base-files/base-files/akita/fstab
===================================================================
--- trunk/oe/packages/base-files/base-files/akita/fstab 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/akita/fstab 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,16 @@
+/dev/mtdblock2 / jffs2 rw,noatime 1 1
+/dev/mtdblock3 /home jffs2 defaults,noatime 1 2
+proc /proc proc defaults 0 0
+/dev/hda1 /media/cf auto defaults,sync,noauto 0 0
+
+tmpfs /var tmpfs defaults 0 0
+tmpfs /media/ram tmpfs defaults 0 0
+
+# SD/MMC in kernel 2.4
+/dev/mmcda1 /media/card auto defaults,sync,noauto 0 0
+# SD/MMC in kernel 2.6
+/dev/mmcblk0p1 /media/card auto defaults,sync,noauto 0 0
+
+# USB Storage
+/dev/sda1 /media/usbhdd vfat noauto,umask=000,noatime,iocharset=utf8,codepage=932 0 0
+
Added: trunk/oe/packages/base-files/base-files/amsdelta/fstab
===================================================================
--- trunk/oe/packages/base-files/base-files/amsdelta/fstab 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/amsdelta/fstab 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,6 @@
+/dev/mtdblock4 / jffs2 defaults 1 1
+proc /proc proc defaults 0 0
+tmpfs /var tmpfs defaults 0 0
+
+# we use a non-volatile ramdisk, see /etc/init.d/ramdisk
+tmpfs /media/ram tmpfs defaults 0 0
Added: trunk/oe/packages/base-files/base-files/armzone-qt2410/fstab
===================================================================
--- trunk/oe/packages/base-files/base-files/armzone-qt2410/fstab 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/armzone-qt2410/fstab 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,16 @@
+# Root and Pseudo
+/dev/mtdblock4 / jffs2 rw,noatime 1 1
+proc /proc proc defaults 0 0
+
+# devpts?
+# usb?
+
+# Temporary
+tmpfs /var tmpfs defaults 0 0
+tmpfs /media/ram tmpfs defaults 0 0
+
+# SD/MMC
+/dev/mmcblk0p1 /media/card auto defaults,sync,noauto 0 0
+
+# USB Storage
+/dev/sda1 /media/hdd vfat noauto,umask=000,noatime,iocharset=utf8,codepage=932 0 0
Added: trunk/oe/packages/base-files/base-files/c7x0/fstab
===================================================================
--- trunk/oe/packages/base-files/base-files/c7x0/fstab 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/c7x0/fstab 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,12 @@
+/dev/mtdblock2 / jffs2 rw,noatime 1 1
+/dev/mtdblock3 /home jffs2 defaults,noatime 1 2
+proc /proc proc defaults 0 0
+/dev/hda1 /media/cf auto defaults,sync,noauto 0 0
+
+tmpfs /var tmpfs defaults 0 0
+tmpfs /media/ram tmpfs defaults 0 0
+
+# SD/MMC in kernel 2.4
+/dev/mmcda1 /media/card auto defaults,sync,noauto 0 0
+# SD/MMC in kernel 2.6
+/dev/mmcblk0p1 /media/card auto defaults,sync,noauto 0 0
Added: trunk/oe/packages/base-files/base-files/c7x0/usbd
===================================================================
--- trunk/oe/packages/base-files/base-files/c7x0/usbd 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/c7x0/usbd 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1 @@
+usbdmodule=pxa_bi
Added: trunk/oe/packages/base-files/base-files/collie/fstab
===================================================================
--- trunk/oe/packages/base-files/base-files/collie/fstab 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/collie/fstab 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,8 @@
+/dev/mtdblock4 / jffs2 defaults 1 1
+proc /proc proc defaults 0 0
+/dev/hda1 /media/cf auto defaults,sync,noauto,noatime,user,exec,suid,gid=100,umask=0002 0 0
+/dev/mmcda1 /media/card auto defaults,sync,noauto,noatime,user,exec,suid 0 0
+tmpfs /var tmpfs defaults 0 0
+
+# we use a non-volatile ramdisk, see /etc/init.d/ramdisk
+#tmpfs /media/ram tmpfs defaults 0 0
Added: trunk/oe/packages/base-files/base-files/collie/usbd
===================================================================
--- trunk/oe/packages/base-files/base-files/collie/usbd 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/collie/usbd 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1 @@
+usbdmodule=sa1100_bi
Added: trunk/oe/packages/base-files/base-files/epia/fstab
===================================================================
--- trunk/oe/packages/base-files/base-files/epia/fstab 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/epia/fstab 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,4 @@
+/dev/ram0 / ext2 rw 1 1
+tmpfs /var tmpfs defaults 0 0
+proc /proc proc defaults 0 0
+tmpfs /tmp tmpfs defaults 0 0
Added: trunk/oe/packages/base-files/base-files/familiar/issue
===================================================================
--- trunk/oe/packages/base-files/base-files/familiar/issue 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/familiar/issue 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,2 @@
+Familiar Linux Unofficial Snapshot \n \l
+
Added: trunk/oe/packages/base-files/base-files/familiar/issue.net
===================================================================
--- trunk/oe/packages/base-files/base-files/familiar/issue.net 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/familiar/issue.net 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,3 @@
+Familiar Linux Unofficial Snapshot %h
+
+
Added: trunk/oe/packages/base-files/base-files/filesystems
===================================================================
--- trunk/oe/packages/base-files/base-files/filesystems 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/filesystems 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,6 @@
+minix
+fat
+vfat
+ext2
+ext3
+*
Added: trunk/oe/packages/base-files/base-files/fstab
===================================================================
--- trunk/oe/packages/base-files/base-files/fstab 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/fstab 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,12 @@
+# stock fstab - you probably want to override this with a machine specific one
+
+rootfs / auto defaults 1 1
+proc /proc proc defaults 0 0
+devpts /dev/pts devpts mode=0620,gid=5 0 0
+usbdevfs /proc/bus/usb usbdevfs noauto 0 0
+tmpfs /var tmpfs defaults 0 0
+tmpfs /media/ram tmpfs defaults 0 0
+
+# uncomment this if your device has a SD/MMC/Transflash slot
+#/dev/mmcblk0p1 /media/card auto defaults,sync,noauto 0 0
+
Added: trunk/oe/packages/base-files/base-files/h2200/fstab
===================================================================
--- trunk/oe/packages/base-files/base-files/h2200/fstab 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/h2200/fstab 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,6 @@
+/dev/mtdblock3 / jffs2 defaults 1 1
+proc /proc proc defaults 0 0
+sys /sys sysfs defaults 0 0
+tmpfs /var tmpfs defaults 0 0
+/dev/hda1 /media/cf auto defaults,sync,noauto,noatime,exec,suid 0 0
+/dev/mmcblk0p1 /media/card auto defaults,sync,noauto,noatime,exec,suid 0 0
Added: trunk/oe/packages/base-files/base-files/h3600/fstab
===================================================================
--- trunk/oe/packages/base-files/base-files/h3600/fstab 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/h3600/fstab 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,6 @@
+/dev/mtdblock4 / jffs2 defaults 1 1
+proc /proc proc defaults 0 0
+/dev/hda1 /media/cf auto defaults,noauto,noatime,user,exec,suid 0 0
+/dev/mmc/part1 /media/card auto defaults,noauto,noatime,user,exec,suid 0 0
+tmpfs /var tmpfs defaults 0 0
+tmpfs /media/ram tmpfs defaults 0 0
Added: trunk/oe/packages/base-files/base-files/h3900/fstab
===================================================================
--- trunk/oe/packages/base-files/base-files/h3900/fstab 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/h3900/fstab 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,8 @@
+/dev/mtdblock/1 / jffs2 defaults 1 1
+#breaks h51xx
+#/dev/mtdblock/2 /home jffs2 defaults 1 1
+proc /proc proc defaults 0 0
+/dev/hda1 /media/cf auto defaults,noauto,noatime,user,exec,suid 0 0
+/dev/mmc/part1 /media/card auto defaults,noauto,noatime,user,exec,suid 0 0
+tmpfs /var tmpfs defaults 0 0
+tmpfs /media/ram tmpfs defaults 0 0
Added: trunk/oe/packages/base-files/base-files/h5xxx/fstab
===================================================================
--- trunk/oe/packages/base-files/base-files/h5xxx/fstab 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/h5xxx/fstab 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,8 @@
+/dev/mtdblock/1 / jffs2 defaults 1 1
+#breaks h51xx
+/dev/mtdblock/2 /home jffs2 defaults 1 1
+proc /proc proc defaults 0 0
+/dev/hda1 /media/cf auto defaults,noauto,noatime,user,exec,suid 0 0
+/dev/mmc/part1 /media/card auto defaults,noauto,noatime,user,exec,suid 0 0
+tmpfs /var tmpfs defaults 0 0
+tmpfs /media/ram tmpfs defaults 0 0
Added: trunk/oe/packages/base-files/base-files/h6300/fstab
===================================================================
--- trunk/oe/packages/base-files/base-files/h6300/fstab 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/h6300/fstab 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,8 @@
+rootfs / auto defaults 1 1
+proc /proc proc defaults 0 0
+sys /sys sysfs defaults 0 0
+tmpfs /var tmpfs defaults 0 0
+#The devpts file system provides an interface to pseudo terminal (pty) devices.
+devpts /dev/pts devpts mode=0620,gid=5 0 0
+#Mount first partition from the mmc card.
+/dev/mmcblk0p1 /media/card auto defaults,sync,noauto,noatime,exec,suid 0 0
Added: trunk/oe/packages/base-files/base-files/host.conf
===================================================================
--- trunk/oe/packages/base-files/base-files/host.conf 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/host.conf 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,2 @@
+order hosts,bind
+multi on
Added: trunk/oe/packages/base-files/base-files/htcuniversal/fstab
===================================================================
--- trunk/oe/packages/base-files/base-files/htcuniversal/fstab 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/htcuniversal/fstab 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,12 @@
+# stock fstab - you probably want to override this with a machine specific one
+
+rootfs / auto defaults 1 1
+proc /proc proc defaults 0 0
+devpts /dev/pts devpts mode=0620,gid=5 0 0
+#usbfs /proc/bus/usb usbfs noauto 0 0
+tmpfs /var tmpfs defaults 0 0
+tmpfs /media/ram tmpfs defaults 0 0
+
+# uncomment this if your device has a SD/MMC/Transflash slot
+#/dev/mmcblk0p1 /media/card auto defaults,sync,noauto 0 0
+
Added: trunk/oe/packages/base-files/base-files/inputrc
===================================================================
--- trunk/oe/packages/base-files/base-files/inputrc 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/inputrc 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,61 @@
+# /etc/inputrc - global inputrc for libreadline
+# See readline(3readline) and `info rluserman' for more information.
+
+# Be 8 bit clean.
+set input-meta on
+set output-meta on
+
+# To allow the use of 8bit-characters like the german umlauts, comment out
+# the line below. However this makes the meta key not work as a meta key,
+# which is annoying to those which don't need to type in 8-bit characters.
+
+# set convert-meta off
+
+# try to enable the application keypad when it is called. Some systems
+# need this to enable the arrow keys.
+# set enable-keypad on
+
+# see /usr/share/doc/bash/inputrc.arrows for other codes of arrow keys
+
+# do not bell on tab-completion
+# set bell-style none
+
+# some defaults / modifications for the emacs mode
+$if mode=emacs
+
+# allow the use of the Home/End keys
+# "\e[1~": beginning-of-line
+# "\e[4~": end-of-line
+
+# allow the use of the Delete/Insert keys
+# "\e[3~": delete-char
+# "\e[2~": quoted-insert
+
+# mappings for "page up" and "page down" to step to the beginning/end
+# of the history
+# "\e[5~": beginning-of-history
+# "\e[6~": end-of-history
+
+# alternate mappings for "page up" and "page down" to search the history
+# "\e[5~": history-search-backward
+# "\e[6~": history-search-forward
+
+# # mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving
+# "\e[5C": forward-word
+# "\e[5D": backward-word
+# "\e\e[C": forward-word
+# "\e\e[D": backward-word
+
+# $if term=rxvt
+# "\e[8~": end-of-line
+# $endif
+
+# for non RH/Debian xterm, can't hurt for RH/DEbian xterm
+# "\eOH": beginning-of-line
+# "\eOF": end-of-line
+
+# for freebsd console
+# "\e[H": beginning-of-line
+# "\e[F": end-of-line
+
+$endif
Added: trunk/oe/packages/base-files/base-files/ipaq-pxa270/fstab
===================================================================
--- trunk/oe/packages/base-files/base-files/ipaq-pxa270/fstab 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/ipaq-pxa270/fstab 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,9 @@
+/dev/mtdblock2 / jffs2 defaults 1 1
+/dev/mtdblock3 /home jffs2 defaults 1 1
+
+proc /proc proc defaults 0 0
+sys /sys sysfs defaults 0 0
+
+/dev/hda1 /media/cf auto defaults,noauto,noatime,exec,suid 0 0
+tmpfs /var tmpfs defaults 0 0
+tmpfs /media/ram tmpfs defaults 0 0
Added: trunk/oe/packages/base-files/base-files/issue
===================================================================
--- trunk/oe/packages/base-files/base-files/issue 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/issue 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,2 @@
+OpenEmbedded Linux \n \l
+
Added: trunk/oe/packages/base-files/base-files/issue.net
===================================================================
--- trunk/oe/packages/base-files/base-files/issue.net 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/issue.net 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,3 @@
+OpenEmbedded Linux %h
+
+
Added: trunk/oe/packages/base-files/base-files/jornada56x/fstab
===================================================================
--- trunk/oe/packages/base-files/base-files/jornada56x/fstab 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/jornada56x/fstab 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,6 @@
+/dev/mtdblock1 / jffs2 rw,noatime 1 1
+proc /proc proc defaults 0 0
+/dev/hda1 /mnt/cf auto defaults,sync,noauto 0 0
+tmpfs /var tmpfs defaults 0 0
+tmpfs /mnt/ram tmpfs defaults 0 0
+devpts /dev/pts devpts defaults 0 0
\ No newline at end of file
Added: trunk/oe/packages/base-files/base-files/jornada6xx/fstab
===================================================================
--- trunk/oe/packages/base-files/base-files/jornada6xx/fstab 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/jornada6xx/fstab 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,7 @@
+proc /proc proc defaults 0 0
+/dev/hda2 / ext2 defaults 0 0
+/dev/hda1 /mnt/cf auto defaults,sync,noauto 0 0
+/dev/hda3 none swap sw 0 0
+tmpfs /var tmpfs defaults 0 0
+tmpfs /mnt/ram tmpfs defaults 0 0
+devpts /dev/pts devpts defaults 0 0
\ No newline at end of file
Added: trunk/oe/packages/base-files/base-files/jornada7xx/fstab
===================================================================
--- trunk/oe/packages/base-files/base-files/jornada7xx/fstab 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/jornada7xx/fstab 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,7 @@
+proc /proc proc defaults 0 0
+/dev/hda2 / ext2 defaults 0 0
+/dev/hda1 /mnt/cf auto defaults,sync,noauto 0 0
+/dev/hda3 none swap sw 0 0
+tmpfs /var tmpfs defaults 0 0
+tmpfs /mnt/ram tmpfs defaults 0 0
+devpts /dev/pts devpts defaults 0 0
\ No newline at end of file
Added: trunk/oe/packages/base-files/base-files/licenses/Artistic
===================================================================
--- trunk/oe/packages/base-files/base-files/licenses/Artistic 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/licenses/Artistic 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,131 @@
+
+
+
+
+ The "Artistic License"
+
+ Preamble
+
+The intent of this document is to state the conditions under which a
+Package may be copied, such that the Copyright Holder maintains some
+semblance of artistic control over the development of the package,
+while giving the users of the package the right to use and distribute
+the Package in a more-or-less customary fashion, plus the right to make
+reasonable modifications.
+
+Definitions:
+
+ "Package" refers to the collection of files distributed by the
+ Copyright Holder, and derivatives of that collection of files
+ created through textual modification.
+
+ "Standard Version" refers to such a Package if it has not been
+ modified, or has been modified in accordance with the wishes
+ of the Copyright Holder as specified below.
+
+ "Copyright Holder" is whoever is named in the copyright or
+ copyrights for the package.
+
+ "You" is you, if you're thinking about copying or distributing
+ this Package.
+
+ "Reasonable copying fee" is whatever you can justify on the
+ basis of media cost, duplication charges, time of people involved,
+ and so on. (You will not be required to justify it to the
+ Copyright Holder, but only to the computing community at large
+ as a market that must bear the fee.)
+
+ "Freely Available" means that no fee is charged for the item
+ itself, though there may be fees involved in handling the item.
+ It also means that recipients of the item may redistribute it
+ under the same conditions they received it.
+
+1. You may make and give away verbatim copies of the source form of the
+Standard Version of this Package without restriction, provided that you
+duplicate all of the original copyright notices and associated disclaimers.
+
+2. You may apply bug fixes, portability fixes and other modifications
+derived from the Public Domain or from the Copyright Holder. A Package
+modified in such a way shall still be considered the Standard Version.
+
+3. You may otherwise modify your copy of this Package in any way, provided
+that you insert a prominent notice in each changed file stating how and
+when you changed that file, and provided that you do at least ONE of the
+following:
+
+ a) place your modifications in the Public Domain or otherwise make them
+ Freely Available, such as by posting said modifications to Usenet or
+ an equivalent medium, or placing the modifications on a major archive
+ site such as uunet.uu.net, or by allowing the Copyright Holder to include
+ your modifications in the Standard Version of the Package.
+
+ b) use the modified Package only within your corporation or organization.
+
+ c) rename any non-standard executables so the names do not conflict
+ with standard executables, which must also be provided, and provide
+ a separate manual page for each non-standard executable that clearly
+ documents how it differs from the Standard Version.
+
+ d) make other distribution arrangements with the Copyright Holder.
+
+4. You may distribute the programs of this Package in object code or
+executable form, provided that you do at least ONE of the following:
+
+ a) distribute a Standard Version of the executables and library files,
+ together with instructions (in the manual page or equivalent) on where
+ to get the Standard Version.
+
+ b) accompany the distribution with the machine-readable source of
+ the Package with your modifications.
+
+ c) give non-standard executables non-standard names, and clearly
+ document the differences in manual pages (or equivalent), together
+ with instructions on where to get the Standard Version.
+
+ d) make other distribution arrangements with the Copyright Holder.
+
+5. You may charge a reasonable copying fee for any distribution of this
+Package. You may charge any fee you choose for support of this
+Package. You may not charge a fee for this Package itself. However,
+you may distribute this Package in aggregate with other (possibly
+commercial) programs as part of a larger (possibly commercial) software
+distribution provided that you do not advertise this Package as a
+product of your own. You may embed this Package's interpreter within
+an executable of yours (by linking); this shall be construed as a mere
+form of aggregation, provided that the complete Standard Version of the
+interpreter is so embedded.
+
+6. The scripts and library files supplied as input to or produced as
+output from the programs of this Package do not automatically fall
+under the copyright of this Package, but belong to whoever generated
+them, and may be sold commercially, and may be aggregated with this
+Package. If such scripts or library files are aggregated with this
+Package via the so-called "undump" or "unexec" methods of producing a
+binary executable image, then distribution of such an image shall
+neither be construed as a distribution of this Package nor shall it
+fall under the restrictions of Paragraphs 3 and 4, provided that you do
+not represent such an executable image as a Standard Version of this
+Package.
+
+7. C subroutines (or comparably compiled subroutines in other
+languages) supplied by you and linked into this Package in order to
+emulate subroutines and variables of the language defined by this
+Package shall not be considered part of this Package, but are the
+equivalent of input as in Paragraph 6, provided these subroutines do
+not change the language in any way that would cause it to fail the
+regression tests for the language.
+
+8. Aggregation of this Package with a commercial distribution is always
+permitted provided that the use of this Package is embedded; that is,
+when no overt attempt is made to make this Package's interfaces visible
+to the end user of the commercial distribution. Such use shall not be
+construed as a distribution of this Package.
+
+9. The name of the Copyright Holder may not be used to endorse or promote
+products derived from this software without specific prior written permission.
+
+10. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
+IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+
+ The End
Added: trunk/oe/packages/base-files/base-files/licenses/BSD
===================================================================
--- trunk/oe/packages/base-files/base-files/licenses/BSD 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/licenses/BSD 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,26 @@
+Copyright (c) The Regents of the University of California.
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
Added: trunk/oe/packages/base-files/base-files/licenses/GPL-2
===================================================================
--- trunk/oe/packages/base-files/base-files/licenses/GPL-2 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/licenses/GPL-2 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,340 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
Added: trunk/oe/packages/base-files/base-files/licenses/LGPL-2
===================================================================
--- trunk/oe/packages/base-files/base-files/licenses/LGPL-2 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/licenses/LGPL-2 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,481 @@
+ GNU LIBRARY GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the library GPL. It is
+ numbered 2 because it goes with version 2 of the ordinary GPL.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Library General Public License, applies to some
+specially designated Free Software Foundation software, and to any
+other libraries whose authors decide to use it. You can use it for
+your libraries, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if
+you distribute copies of the library, or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link a program with the library, you must provide
+complete object files to the recipients so that they can relink them
+with the library, after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ Our method of protecting your rights has two steps: (1) copyright
+the library, and (2) offer you this license which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ Also, for each distributor's protection, we want to make certain
+that everyone understands that there is no warranty for this free
+library. If the library is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original
+version, so that any problems introduced by others will not reflect on
+the original authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that companies distributing free
+software will individually obtain patent licenses, thus in effect
+transforming the program into proprietary software. To prevent this,
+we have made it clear that any patent must be licensed for everyone's
+free use or not licensed at all.
+
+ Most GNU software, including some libraries, is covered by the ordinary
+GNU General Public License, which was designed for utility programs. This
+license, the GNU Library General Public License, applies to certain
+designated libraries. This license is quite different from the ordinary
+one; be sure to read it in full, and don't assume that anything in it is
+the same as in the ordinary license.
+
+ The reason we have a separate public license for some libraries is that
+they blur the distinction we usually make between modifying or adding to a
+program and simply using it. Linking a program with a library, without
+changing the library, is in some sense simply using the library, and is
+analogous to running a utility program or application program. However, in
+a textual and legal sense, the linked executable is a combined work, a
+derivative of the original library, and the ordinary General Public License
+treats it as such.
+
+ Because of this blurred distinction, using the ordinary General
+Public License for libraries did not effectively promote software
+sharing, because most developers did not use the libraries. We
+concluded that weaker conditions might promote sharing better.
+
+ However, unrestricted linking of non-free programs would deprive the
+users of those programs of all benefit from the free status of the
+libraries themselves. This Library General Public License is intended to
+permit developers of non-free programs to use free libraries, while
+preserving your freedom as a user of such programs to change the free
+libraries that are incorporated in them. (We have not seen how to achieve
+this as regards changes in header files, but we have achieved it as regards
+changes in the actual functions of the Library.) The hope is that this
+will lead to faster development of free libraries.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, while the latter only
+works together with the library.
+
+ Note that it is possible for a library to be covered by the ordinary
+General Public License rather than by this special one.
+
+ GNU LIBRARY GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library which
+contains a notice placed by the copyright holder or other authorized
+party saying it may be distributed under the terms of this Library
+General Public License (also called "this License"). Each licensee is
+addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also compile or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ c) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ d) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the source code distributed need not include anything that is normally
+distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Library General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
Added: trunk/oe/packages/base-files/base-files/licenses/LGPL-2.1
===================================================================
--- trunk/oe/packages/base-files/base-files/licenses/LGPL-2.1 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/licenses/LGPL-2.1 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,510 @@
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations
+below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it
+becomes a de-facto standard. To achieve this, non-free programs must
+be allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control
+compilation and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at least
+ three years, to give the same user the materials specified in
+ Subsection 6a, above, for a charge no more than the cost of
+ performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply, and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License
+may add an explicit geographical distribution limitation excluding those
+countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms
+of the ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library.
+It is safest to attach them to the start of each source file to most
+effectively convey the exclusion of warranty; and each file should
+have at least the "copyright" line and a pointer to where the full
+notice is found.
+
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or
+your school, if any, to sign a "copyright disclaimer" for the library,
+if necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James
+ Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
+
+
Added: trunk/oe/packages/base-files/base-files/motd
===================================================================
Added: trunk/oe/packages/base-files/base-files/mtx-1/fstab
===================================================================
--- trunk/oe/packages/base-files/base-files/mtx-1/fstab 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/mtx-1/fstab 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,8 @@
+# /etc/fstab: static file system information. mtx-1
+#
+# <file system> <mount pt> <type> <options> <dump> <pass>
+rootfs / auto defaults 1 1
+tmpfs /var tmpfs size=10m 0 0
+proc /proc proc defaults 0 0
+devpts /dev/pts devpts mode=0620,gid=5 0 0
+usbdevfs /proc/bus/usb usbdevfs noauto 0 0
Added: trunk/oe/packages/base-files/base-files/mtx-1/profile
===================================================================
--- trunk/oe/packages/base-files/base-files/mtx-1/profile 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/mtx-1/profile 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,25 @@
+# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
+# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
+
+PATH="/usr/local/bin:/usr/bin:/bin"
+
+if [ "`id -u`" -eq 0 ]; then
+ PATH=$PATH:/usr/local/sbin:/usr/sbin:/sbin:
+fi
+if [ "$PS1" ]; then
+# works for bash and ash (no other shells known to be in use here)
+ PS1='\u@\h:\w\$ '
+fi
+
+if [ -d /etc/profile.d ]; then
+ for i in `ls /etc/profile.d/`; do
+ . /etc/profile.d/$i
+ done
+ unset i
+fi
+
+export PATH PS1
+
+umask 022
+
+alias ll="ls -lah"
\ No newline at end of file
Added: trunk/oe/packages/base-files/base-files/netbook-pro/fstab
===================================================================
--- trunk/oe/packages/base-files/base-files/netbook-pro/fstab 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/netbook-pro/fstab 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,5 @@
+rootfs / auto defaults 1 1
+proc /proc proc defaults 0 0
+devpts /dev/pts devpts mode=0620,gid=5 0 0
+usbdevfs /proc/bus/usb usbdevfs noauto 0 0
+tmpfs /var tmpfs defaults 0 0
Added: trunk/oe/packages/base-files/base-files/netvista/fstab
===================================================================
--- trunk/oe/packages/base-files/base-files/netvista/fstab 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/netvista/fstab 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,5 @@
+/dev/hdc2 / ext2 rw,noatime 1 1
+tmpfs /var tmpfs defaults 0 0
+proc /proc proc defaults 0 0
+tmpfs /tmp tmpfs defaults 0 0
+devfs /dev/devfs devfs defaults 0 0
Added: trunk/oe/packages/base-files/base-files/nokia770/fstab
===================================================================
--- trunk/oe/packages/base-files/base-files/nokia770/fstab 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/nokia770/fstab 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,6 @@
+rootfs / rootfs defaults,errors=remount-ro,noatime 0 0
+/dev/mmcblk0p1 /media/card auto defaults,noauto,noatime,exec,suid 0 0
+tmpfs /var tmpfs defaults 0 0
+tmpfs /media/ram tmpfs defaults 0 0
+proc /proc proc defaults 0 0
+usbdevfs /proc/bus/usb usbdevfs noauto 0 0
Added: trunk/oe/packages/base-files/base-files/nsswitch.conf
===================================================================
--- trunk/oe/packages/base-files/base-files/nsswitch.conf 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/nsswitch.conf 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,19 @@
+# /etc/nsswitch.conf
+#
+# Example configuration of GNU Name Service Switch functionality.
+# If you have the `glibc-doc' and `info' packages installed, try:
+# `info libc "Name Service Switch"' for information about this file.
+
+passwd: compat
+group: compat
+shadow: compat
+
+hosts: files dns
+networks: files
+
+protocols: db files
+services: db files
+ethers: db files
+rpc: db files
+
+netgroup: nis
Added: trunk/oe/packages/base-files/base-files/nylon/issue
===================================================================
--- trunk/oe/packages/base-files/base-files/nylon/issue 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/nylon/issue 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,2 @@
+Nylon Mesh Router Linux \n \l
+
Added: trunk/oe/packages/base-files/base-files/nylon/issue.net
===================================================================
--- trunk/oe/packages/base-files/base-files/nylon/issue.net 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/nylon/issue.net 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,3 @@
+Nylon Mesh Router Linux %h
+
+
Added: trunk/oe/packages/base-files/base-files/openmn/fstab
===================================================================
--- trunk/oe/packages/base-files/base-files/openmn/fstab 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/openmn/fstab 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,6 @@
+devfs /dev devfs defaults 0 0
+proc /proc proc defaults 0 0
+none /sys sysfs defaults 0 0
+rootfs / rootfs rw 1 1
+tmpfs /var tmpfs defaults 0 0
+tmpfs /tmp tmpfs defaults 0 0
Added: trunk/oe/packages/base-files/base-files/openmn/issue
===================================================================
--- trunk/oe/packages/base-files/base-files/openmn/issue 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/openmn/issue 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,2 @@
+M&N 5.4
+
Added: trunk/oe/packages/base-files/base-files/openmn/issue.net
===================================================================
--- trunk/oe/packages/base-files/base-files/openmn/issue.net 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/openmn/issue.net 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,2 @@
+M&N 5.4
+
Added: trunk/oe/packages/base-files/base-files/openmn/profile
===================================================================
--- trunk/oe/packages/base-files/base-files/openmn/profile 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/openmn/profile 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,31 @@
+# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
+# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
+
+OPIEDIR=/opt/QtPalmtop
+QPEDIR=/opt/QtPalmtop
+QTDIR=/opt/QtPalmtop
+PATH="/opt/QtPalmtop/bin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games"
+
+PS1='$ '
+if [ "`id -u`" -eq 0 ]; then
+ PATH=$PATH:/usr/local/sbin:/usr/sbin:/sbin:
+ PS1='# '
+fi
+
+if [ -d /etc/profile.d ]; then
+ for i in `ls /etc/profile.d/`; do
+ . /etc/profile.d/$i
+ done
+ unset i
+fi
+
+case "`cat /proc/sys/board/lcd_type`" in
+ 2) export QWS_DISPLAY=Transformed:Rot90 ;;
+ 3) export QWS_DISPLAY=Transformed:Rot270 ;;
+ *) export QWS_DISPLAY=Transformed:Rot180 ;;
+esac
+alias ll="ls -lAF"
+
+export PATH PS1 OPIEDIR QPEDIR QTDIR
+
+umask 022
Added: trunk/oe/packages/base-files/base-files/openmn/usbd
===================================================================
--- trunk/oe/packages/base-files/base-files/openmn/usbd 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/openmn/usbd 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1 @@
+usbdmodule=pxa_bi
Added: trunk/oe/packages/base-files/base-files/opensimpad/issue
===================================================================
--- trunk/oe/packages/base-files/base-files/opensimpad/issue 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/opensimpad/issue 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,2 @@
+OpenSIMpad Unofficial Snapshot Version \n \l
+
Added: trunk/oe/packages/base-files/base-files/opensimpad/issue.net
===================================================================
--- trunk/oe/packages/base-files/base-files/opensimpad/issue.net 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/opensimpad/issue.net 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,2 @@
+OpenSIMpad Unofficial Snapshot %h
+
Added: trunk/oe/packages/base-files/base-files/openzaurus/issue
===================================================================
--- trunk/oe/packages/base-files/base-files/openzaurus/issue 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/openzaurus/issue 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,2 @@
+OpenZaurus Unofficial Snapshot Version \n \l
+
Added: trunk/oe/packages/base-files/base-files/openzaurus/issue.net
===================================================================
--- trunk/oe/packages/base-files/base-files/openzaurus/issue.net 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/openzaurus/issue.net 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,2 @@
+OpenZaurus Unofficial Snapshot %h
+
Added: trunk/oe/packages/base-files/base-files/poodle/fstab
===================================================================
--- trunk/oe/packages/base-files/base-files/poodle/fstab 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/poodle/fstab 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,13 @@
+/dev/mtdblock2 / jffs2 rw,noatime 1 1
+/dev/mtdblock3 /home jffs2 defaults,noatime 1 2
+proc /proc proc defaults 0 0
+/dev/hda1 /media/cf auto defaults,sync,noauto 0 0
+
+# SD/MMC in kernel 2.6
+/dev/mmcblk0p1 /media/card auto defaults,sync,noauto 0 0
+
+# SD/MMC in kernel 2.4
+/dev/mmcda1 /media/card auto defaults,sync,noauto 0 0
+
+tmpfs /var tmpfs defaults 0 0
+tmpfs /media/ram tmpfs defaults 0 0
Added: trunk/oe/packages/base-files/base-files/poodle/usbd
===================================================================
--- trunk/oe/packages/base-files/base-files/poodle/usbd 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/poodle/usbd 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1 @@
+usbdmodule=pxa_bi
Added: trunk/oe/packages/base-files/base-files/profile
===================================================================
--- trunk/oe/packages/base-files/base-files/profile 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/profile 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,32 @@
+# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
+# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
+
+PATH="/usr/local/bin:/usr/bin:/bin"
+EDITOR="/bin/vi" # needed for packages like cron
+TERM="vt100" # Basic terminal capab. For screen etc.
+
+if [ ! -e /etc/localtime ]; then
+ TZ="UTC" # Time Zone. Look at http://theory.uwinnipeg.ca/gnu/glibc/libc_303.html
+ # for an explanation of how to set this to your local timezone.
+ export TZ
+fi
+
+if [ "`id -u`" -eq 0 ]; then
+ PATH=$PATH:/usr/local/sbin:/usr/sbin:/sbin:
+fi
+if [ "$PS1" ]; then
+# works for bash and ash (no other shells known to be in use here)
+ PS1='\u@\h:\w\$ '
+fi
+
+if [ -d /etc/profile.d ]; then
+ for i in `ls /etc/profile.d/`; do
+ . /etc/profile.d/$i
+ done
+ unset i
+fi
+
+export PATH PS1 OPIEDIR QPEDIR QTDIR EDITOR TERM
+
+umask 022
+
Added: trunk/oe/packages/base-files/base-files/share/dot.bashrc
===================================================================
--- trunk/oe/packages/base-files/base-files/share/dot.bashrc 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/share/dot.bashrc 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,16 @@
+# ~/.bashrc: executed by bash(1) for non-login shells.
+
+export PS1='\h:\w\$ '
+umask 022
+
+# You may uncomment the following lines if you want `ls' to be colorized:
+# export LS_OPTIONS='--color=auto'
+# eval `dircolors`
+# alias ls='ls $LS_OPTIONS'
+# alias ll='ls $LS_OPTIONS -l'
+# alias l='ls $LS_OPTIONS -lA'
+#
+# Some more alias to avoid making mistakes:
+# alias rm='rm -i'
+# alias cp='cp -i'
+# alias mv='mv -i'
Added: trunk/oe/packages/base-files/base-files/share/dot.profile
===================================================================
--- trunk/oe/packages/base-files/base-files/share/dot.profile 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/share/dot.profile 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,10 @@
+# ~/.profile: executed by Bourne-compatible login shells.
+
+if [ -f ~/.bashrc ]; then
+ . ~/.bashrc
+fi
+
+# path set by /etc/profile
+# export PATH
+
+mesg n
Added: trunk/oe/packages/base-files/base-files/simpad/fstab
===================================================================
--- trunk/oe/packages/base-files/base-files/simpad/fstab 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/simpad/fstab 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,8 @@
+rootfs / auto defaults 1 1
+proc /proc proc defaults 0 0
+devpts /dev/pts devpts mode=0620,gid=5 0 0
+usbdevfs /proc/bus/usb usbdevfs noauto 0 0
+tmpfs /var tmpfs defaults 0 0
+tmpfs /media/ram tmpfs defaults 0 0
+/dev/mtdblock/2 /home jffs2 defaults 1 1
+/dev/hda1 /media/cf auto noauto,owner 0 0
Added: trunk/oe/packages/base-files/base-files/slugos/fstab
===================================================================
--- trunk/oe/packages/base-files/base-files/slugos/fstab 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/slugos/fstab 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,5 @@
+rootfs / jffs2 defaults 1 1
+proc /proc proc defaults 0 0
+tmpfs /var tmpfs defaults 0 0
+tmpfs /media/ram tmpfs defaults 0 0
+usbfs /proc/bus/usb usbfs defaults 0 0
Added: trunk/oe/packages/base-files/base-files/spitz/fstab
===================================================================
--- trunk/oe/packages/base-files/base-files/spitz/fstab 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/spitz/fstab 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,28 @@
+# don't mount /dev/mtdblock2 since Spitz uses pivot_root
+# or 2.6 directly boots from the hdd
+# /dev/mtdblock2 / jffs2 rw,noatime 1 1
+rootfs / auto defaults 1 1
+proc /proc proc defaults 0 0
+# we can use a normal var filesystem with a microdrive
+# tmpfs /var tmpfs defaults 0 0
+tmpfs /media/ram tmpfs defaults 0 0
+
+# Compact Flash memory cards
+/dev/hdc1 /media/cf auto defaults,sync,noauto 0 0
+# SD/MMC in kernel 2.4
+/dev/mmcda1 /media/card auto defaults,sync,noauto 0 0
+# SD/MMC in kernel 2.6
+/dev/mmcblk0p1 /media/card auto defaults,sync,noauto 0 0
+
+#
+# USB
+#
+/dev/sda1 /media/usbhdd vfat noauto,umask=000,noatime,iocharset=utf8,codepage=932 0 0
+devpts /dev/pts devpts mode=0620,gid=5 0 0
+usbfs /proc/bus/usb usbfs noauto 0 0
+
+#
+# Harddisk
+#
+/dev/hda2 /home ext3 defaults 0 0
+/dev/hda3 /media/hdd vfat defaults 0 0
Added: trunk/oe/packages/base-files/base-files/tosa/fstab
===================================================================
--- trunk/oe/packages/base-files/base-files/tosa/fstab 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/tosa/fstab 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,12 @@
+/dev/mtdblock2 / jffs2 rw,noatime 1 1
+/dev/mtdblock3 /home jffs2 defaults,noatime 1 2
+proc /proc proc defaults 0 0
+/dev/hda1 /media/cf auto defaults,sync,noauto 0 0
+
+tmpfs /var tmpfs defaults 0 0
+tmpfs /media/ram tmpfs defaults 0 0
+
+# SD/MMC in kernel 2.4
+/dev/mmcda1 /media/card auto defaults,sync,noauto 0 0
+# SD/MMC in kernel 2.6
+/dev/mmcblk0p1 /media/card auto defaults,sync,noauto 0 0
Added: trunk/oe/packages/base-files/base-files/tosa/usbd
===================================================================
--- trunk/oe/packages/base-files/base-files/tosa/usbd 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/tosa/usbd 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,5 @@
+# I know that this was created for usb-client stuff
+# but tosa/2.6 need (un)loading USB Host module
+# on suspend/resume and this way is simplest one ;)
+
+usbdmodule=ohci-hcd
Added: trunk/oe/packages/base-files/base-files/usbd
===================================================================
Added: trunk/oe/packages/base-files/base-files/wrt54/fstab
===================================================================
--- trunk/oe/packages/base-files/base-files/wrt54/fstab 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/wrt54/fstab 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,7 @@
+# /etc/fstab: static file system information. wrt
+#
+# <file system> <mount pt> <type> <options> <dump> <pass>
+rootfs / auto defaults 1 1
+tmpfs /var tmpfs size=50% 0 0
+proc /proc proc defaults 0 0
+devpts /dev/pts devpts mode=0620,gid=5 0 0
Added: trunk/oe/packages/base-files/base-files/wrt54/profile
===================================================================
--- trunk/oe/packages/base-files/base-files/wrt54/profile 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/wrt54/profile 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,25 @@
+# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
+# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
+
+PATH="/usr/local/bin:/usr/bin:/bin"
+
+if [ "`id -u`" -eq 0 ]; then
+ PATH=$PATH:/usr/local/sbin:/usr/sbin:/sbin:
+fi
+if [ "$PS1" ]; then
+# works for bash and ash (no other shells known to be in use here)
+ PS1='\u@\h:\w\$ '
+fi
+
+if [ -d /etc/profile.d ]; then
+ for i in `ls /etc/profile.d/`; do
+ . /etc/profile.d/$i
+ done
+ unset i
+fi
+
+export PATH PS1
+
+umask 022
+
+alias ll="ls -lah"
\ No newline at end of file
Added: trunk/oe/packages/base-files/base-files/xxs1500/fstab
===================================================================
--- trunk/oe/packages/base-files/base-files/xxs1500/fstab 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files/xxs1500/fstab 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,8 @@
+# /etc/fstab: static file system information.
+#
+# <file system> <mount pt> <type> <options> <dump> <pass>
+rootfs / auto defaults 1 1
+tmpfs /var tmpfs size=10m 0 0
+proc /proc proc defaults 0 0
+devpts /dev/pts devpts mode=0620,gid=5 0 0
+usbdevfs /proc/bus/usb usbdevfs noauto 0 0
Added: trunk/oe/packages/base-files/base-files_3.0.14.bb
===================================================================
--- trunk/oe/packages/base-files/base-files_3.0.14.bb 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/base-files/base-files_3.0.14.bb 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,159 @@
+DESCRIPTION = "Miscellaneous files for the base system."
+SECTION = "base"
+PRIORITY = "required"
+PR = "r56"
+LICENSE = "GPL"
+
+SRC_URI = " \
+ file://nsswitch.conf \
+ file://motd \
+ file://inputrc \
+ file://host.conf \
+ file://profile \
+ file://fstab \
+ file://filesystems \
+ file://issue.net \
+ file://issue \
+ file://usbd \
+ file://share/dot.bashrc \
+ file://share/dot.profile \
+ file://licenses/BSD \
+ file://licenses/GPL-2 \
+ file://licenses/LGPL-2 \
+ file://licenses/LGPL-2.1 \
+ file://licenses/Artistic "
+S = "${WORKDIR}"
+
+docdir_append = "/${P}"
+dirs1777 = "/tmp ${localstatedir}/lock ${localstatedir}/tmp"
+dirs2775 = "/home ${prefix}/src ${localstatedir}/local"
+dirs755 = "/bin /boot /dev ${sysconfdir} ${sysconfdir}/default \
+ ${sysconfdir}/skel /lib /mnt /proc /home/root /sbin \
+ ${prefix} ${bindir} ${docdir} /usr/games ${includedir} \
+ ${libdir} ${sbindir} ${datadir} \
+ ${datadir}/common-licenses ${datadir}/dict ${infodir} \
+ ${mandir} ${datadir}/misc ${localstatedir} \
+ ${localstatedir}/backups ${localstatedir}/cache \
+ ${localstatedir}/lib /sys ${localstatedir}/lib/misc \
+ ${localstatedir}/lock/subsys ${localstatedir}/log \
+ ${localstatedir}/run ${localstatedir}/spool \
+ /mnt /media /media/card /media/cf /media/net /media/ram \
+ /media/union /media/realroot /media/hdd \
+ /media/mmc1"
+conffiles = "${sysconfdir}/debian_version ${sysconfdir}/host.conf \
+ ${sysconfdir}/inputrc ${sysconfdir}/issue /${sysconfdir}/issue.net \
+ ${sysconfdir}/nsswitch.conf ${sysconfdir}/profile \
+ ${sysconfdir}/default"
+
+#
+# set standard hostname, might be a candidate for a DISTRO variable? :M:
+#
+hostname = "openembedded"
+hostname_slugos = "nslu2"
+hostname_mnci = "MNCI"
+hostname_rt3000 = "MNRT"
+hostname_jlime = "JLime"
+
+do_install () {
+ for d in ${dirs755}; do
+ install -m 0755 -d ${D}$d
+ done
+ for d in ${dirs1777}; do
+ install -m 1777 -d ${D}$d
+ done
+ for d in ${dirs2775}; do
+ install -m 2755 -d ${D}$d
+ done
+ for d in card cf net ram; do
+ ln -sf /media/$d ${D}/mnt/$d
+ done
+
+ if [ -n "${MACHINE}" -a "${hostname}" = "openembedded" ]; then
+ echo ${MACHINE} > ${D}${sysconfdir}/hostname
+ else
+ echo ${hostname} > ${D}${sysconfdir}/hostname
+ fi
+
+ if [ -n "${DISTRO_NAME}" ]; then
+ echo -n "${DISTRO_NAME} " > ${D}${sysconfdir}/issue
+ echo -n "${DISTRO_NAME} " > ${D}${sysconfdir}/issue.net
+ if [ -n "${DISTRO_VERSION}" ]; then
+ echo -n "${DISTRO_VERSION} " >> ${D}${sysconfdir}/issue
+ echo -n "${DISTRO_VERSION} " >> ${D}${sysconfdir}/issue.net
+ fi
+ echo "\n \l" >> ${D}${sysconfdir}/issue
+ echo >> ${D}${sysconfdir}/issue
+ echo "%h" >> ${D}${sysconfdir}/issue.net
+ echo >> ${D}${sysconfdir}/issue.net
+ else
+ install -m 0644 ${WORKDIR}/issue ${D}${sysconfdir}/issue
+ install -m 0644 ${WORKDIR}/issue.net ${D}${sysconfdir}/issue.net
+ fi
+
+ install -m 0644 ${WORKDIR}/fstab ${D}${sysconfdir}/fstab
+ install -m 0644 ${WORKDIR}/filesystems ${D}${sysconfdir}/filesystems
+ install -m 0644 ${WORKDIR}/usbd ${D}${sysconfdir}/default/usbd
+ install -m 0644 ${WORKDIR}/profile ${D}${sysconfdir}/profile
+ install -m 0755 ${WORKDIR}/share/dot.profile ${D}${sysconfdir}/skel/.profile
+ install -m 0755 ${WORKDIR}/share/dot.bashrc ${D}${sysconfdir}/skel/.bashrc
+ install -m 0644 ${WORKDIR}/inputrc ${D}${sysconfdir}/inputrc
+ install -m 0644 ${WORKDIR}/nsswitch.conf ${D}${sysconfdir}/nsswitch.conf
+ install -m 0644 ${WORKDIR}/host.conf ${D}${sysconfdir}/host.conf
+ install -m 0644 ${WORKDIR}/motd ${D}${sysconfdir}/motd
+
+ for license in BSD GPL-2 LGPL-2 LGPL-2.1 Artistic; do
+ install -m 0644 ${WORKDIR}/licenses/$license ${D}${datadir}/common-licenses/
+ done
+
+ ln -sf /proc/mounts ${D}${sysconfdir}/mtab
+}
+
+
+do_install_append_mnci () {
+ rmdir ${D}/tmp
+ mkdir -p ${D}${localstatedir}/tmp
+ ln -s var/tmp ${D}/tmp
+}
+
+do_install_append_nylon() {
+ printf "" "" >${D}${sysconfdir}/resolv.conf
+ rm -r ${D}/mnt/*
+ rm -r ${D}/media
+ rm -rf ${D}/tmp
+ ln -sf /var/tmp ${D}/tmp
+}
+
+do_install_append_slugos() {
+ printf "" "" >${D}${sysconfdir}/resolv.conf
+ rm -r ${D}/mnt/*
+ rmdir ${D}/home/root
+ install -m 0755 -d ${D}/root
+ ln -s ../root ${D}/home/root
+}
+
+do_install_append_netbook-pro () {
+ mkdir -p ${D}/initrd
+}
+
+PACKAGES = "${PN}-doc ${PN}"
+FILES_${PN} = "/"
+FILES_${PN}-doc = "${docdir} ${datadir}/common-licenses"
+
+# M&N specific packaging
+PACKAGE_ARCH_mnci = "mnci"
+PACKAGE_ARCH_rt3000 = "rt3000"
+
+# Unslung distribution specific packaging
+
+PACKAGES_unslung = "${PN}-unslung"
+PACKAGE_ARCH_${PN}-unslung = "nslu2"
+MAINTAINER_${PN}-unslung = "NSLU2 Linux <www.nslu2-linux.org>"
+RDEPENDS_${PN}-unslung = "nslu2-linksys-ramdisk"
+RPROVIDES_${PN}-unslung = "${PN}"
+
+FILES_${PN}-unslung = ""
+
+CONFFILES_${PN} = "${sysconfdir}/fstab ${sysconfdir}/hostname"
+CONFFILES_${PN}_nylon = "${sysconfdir}/resolv.conf ${sysconfdir}/fstab ${sysconfdir}/hostname"
+CONFFILES_${PN}_slugos = "${sysconfdir}/resolv.conf ${sysconfdir}/fstab ${sysconfdir}/hostname"
+
Added: trunk/oe/packages/images/openmoko-devel-image.bb
===================================================================
--- trunk/oe/packages/images/openmoko-devel-image.bb 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/images/openmoko-devel-image.bb 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,5 @@
+require openmoko-image.bb
+
+export IPKG_INSTALL += "\
+ task-openmoko-devel \
+"
Added: trunk/oe/packages/images/openmoko-image.bb
===================================================================
--- trunk/oe/packages/images/openmoko-image.bb 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/images/openmoko-image.bb 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,26 @@
+#------------------------------------------------------
+# OpenMoko Image Recipe
+#------------------------------------------------------
+
+export IMAGE_BASENAME = "${PN}"
+export IMAGE_LINGUAS = ""
+
+export IPKG_INSTALL = "\
+ ${MACHINE_TASK_PROVIDER} \
+ task-openmoko-core \
+ task-openmoko-net \
+ task-openmoko-ui \
+ task-openmoko-base \
+ task-openmoko-finger \
+ task-openmoko-pim \
+"
+DEPENDS = "\
+ ${MACHINE_TASK_PROVIDER} \
+ task-openmoko \
+"
+
+RDEPENDS = "${IPKG_INSTALL}"
+
+inherit image_ipk
+
+LICENSE = MIT
Added: trunk/oe/packages/initscripts/initscripts-1.0/akita/devices
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/akita/devices 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/akita/devices 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,68 @@
+#!/bin/sh
+#
+# Devfs handling script. Since we arent running devfsd due to various reasons
+# which I will not lay out here, we need to create some links for compatibility.
+
+. /etc/default/rcS
+
+# exit without doing anything if udev is active
+if test -e /dev/.udevdb; then
+ exit 0
+fi
+
+if test -e /dev/.devfsd
+then
+ if test "$VERBOSE" != "no"; then echo -n "Setting up device links for devfs: "; fi
+ ln -s /dev/touchscreen/0 /dev/ts
+ ln -s /dev/touchscreen/0raw /dev/tsraw
+ ln -s /dev/vc/0 /dev/tty0
+ ln -s /dev/vc/1 /dev/tty1
+ ln -s /dev/vc/2 /dev/tty2
+ ln -s /dev/vc/3 /dev/tty3
+ ln -s /dev/vc/4 /dev/tty4
+ ln -s /dev/vc/5 /dev/tty5
+ ln -s /dev/fb/0 /dev/fb0
+# ln -s /dev/tts/0 /dev/ttySA0
+# ln -s /dev/tts/1 /dev/ttySA1
+# ln -s /dev/tts/2 /dev/ttySA2
+
+ ln -s /dev/sound/dsp /dev/dsp
+ ln -s /dev/sound/mixer /dev/mixer
+
+ ln -s /dev/v4l/video0 /dev/video0
+ ln -s /dev/v4l/video0 /dev/video
+ ln -s /dev/misc/rtc /dev/rtc
+
+ ## need this so that ppp will autoload the ppp modules
+ mknod /dev/ppp c 108 0
+ if test "$VERBOSE" != "no"; then echo "done"; fi
+else
+ if test "$VERBOSE" != "no"; then echo -n "Mounting /dev ramdisk: "; fi
+ mount -t ramfs ramfs /dev || mount -t tmpfs ramfs /dev
+ if test $? -ne 0; then
+ if test "$VERBOSE" != "no"; then echo "failed"; fi
+ else
+ if test "$VERBOSE" != "no"; then echo "done"; fi
+ fi
+ if test "$VERBOSE" != "no"; then echo -n "Populating /dev: "; fi
+ cd /
+ mkdir -p dev/msys
+ mkdir -p dev/pts
+ mkdir -p dev/input
+ mkdir -p dev/vc
+ for i in 0 1 2 3 4 5 6 7 8 9; do
+ ln -s /dev/tty$i /dev/vc/$i
+ done
+ ln -sf /dev/sharp_ts /dev/ts
+ ln -sf /dev/sharp_fl /dev/fl
+ ln -sf /proc/self/fd /dev/fd
+ ln -sf /proc/kcore /dev/core
+ /sbin/makedevs -r / -D /etc/device_table
+ if test $? -ne 0; then
+ if test "$VERBOSE" != "no"; then echo "failed"; fi
+ else
+ if test "$VERBOSE" != "no"; then echo "done"; fi
+ fi
+fi
+
+exit 0
Property changes on: trunk/oe/packages/initscripts/initscripts-1.0/akita/devices
___________________________________________________________________
Name: svn:executable
+
Added: trunk/oe/packages/initscripts/initscripts-1.0/arm/alignment.sh
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/arm/alignment.sh 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/arm/alignment.sh 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+if [ -e /proc/cpu/alignment ]; then
+ echo "3" > /proc/cpu/alignment
+fi
+
Added: trunk/oe/packages/initscripts/initscripts-1.0/armzone-qt2410/devices
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/armzone-qt2410/devices 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/armzone-qt2410/devices 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,70 @@
+#!/bin/sh
+#
+# Devfs handling script. Since we arent running devfsd due to various reasons
+# which I will not lay out here, we need to create some links for compatibility.
+
+. /etc/default/rcS
+
+# GTA01 hack. Need to write a proper udev-rule
+# instead (for the S3C2410 serial controller)
+mknod -m 660 /dev/ttyS0 c 4 64
+
+# exit without doing anything if udev is active
+if test -e /dev/.udev -o -e /dev/.udevdb; then
+ exit 0
+fi
+
+if test -e /dev/.devfsd
+then
+ if test "$VERBOSE" != "no"; then echo -n "Setting up device links for devfs: "; fi
+ ln -s /dev/touchscreen/0 /dev/ts
+ ln -s /dev/touchscreen/0raw /dev/tsraw
+ ln -s /dev/vc/0 /dev/tty0
+ ln -s /dev/vc/1 /dev/tty1
+ ln -s /dev/vc/2 /dev/tty2
+ ln -s /dev/vc/3 /dev/tty3
+ ln -s /dev/vc/4 /dev/tty4
+ ln -s /dev/vc/5 /dev/tty5
+ ln -s /dev/fb/0 /dev/fb0
+# ln -s /dev/tts/0 /dev/ttySA0
+# ln -s /dev/tts/1 /dev/ttySA1
+# ln -s /dev/tts/2 /dev/ttySA2
+
+ ln -s /dev/sound/dsp /dev/dsp
+ ln -s /dev/sound/mixer /dev/mixer
+
+ ln -s /dev/v4l/video0 /dev/video0
+ ln -s /dev/v4l/video0 /dev/video
+ ln -s /dev/misc/rtc /dev/rtc
+
+ ## need this so that ppp will autoload the ppp modules
+ mknod /dev/ppp c 108 0
+ if test "$VERBOSE" != "no"; then echo "done"; fi
+else
+ if test "$VERBOSE" != "no"; then echo -n "Mounting /dev ramdisk: "; fi
+ mount -t ramfs ramfs /dev || mount -t tmpfs ramfs /dev
+ if test $? -ne 0; then
+ if test "$VERBOSE" != "no"; then echo "failed"; fi
+ else
+ if test "$VERBOSE" != "no"; then echo "done"; fi
+ fi
+ if test "$VERBOSE" != "no"; then echo -n "Populating /dev: "; fi
+ cd /
+ mkdir -p dev/input
+ mkdir -p dev/msys
+ mkdir -p dev/pts
+ mkdir -p dev/vc
+ for i in 0 1 2 3 4 5 6 7 8 9; do
+ ln -s /dev/tty$i /dev/vc/$i
+ done
+ ln -sf /proc/self/fd /dev/fd
+ ln -sf /proc/kcore /dev/core
+ /sbin/makedevs -r / -D /etc/device_table
+ if test $? -ne 0; then
+ if test "$VERBOSE" != "no"; then echo "failed"; fi
+ else
+ if test "$VERBOSE" != "no"; then echo "done"; fi
+ fi
+fi
+
+exit 0
Property changes on: trunk/oe/packages/initscripts/initscripts-1.0/armzone-qt2410/devices
___________________________________________________________________
Name: svn:executable
+
Added: trunk/oe/packages/initscripts/initscripts-1.0/banner
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/banner 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/banner 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+if [ ! -e /dev/tty ]; then
+ /bin/mknod -m 0666 /dev/tty c 5 0
+fi
+
+if ( > /dev/tty0 ) 2>/dev/null; then
+ vtmaster=/dev/tty0
+elif ( > /dev/vc/0 ) 2>/dev/null; then
+ vtmaster=/dev/vc/0
+else
+ vtmaster=/dev/null
+fi
+echo > $vtmaster
+echo "Please wait: booting..." > $vtmaster
Added: trunk/oe/packages/initscripts/initscripts-1.0/bootmisc.sh
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/bootmisc.sh 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/bootmisc.sh 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,71 @@
+#
+# bootmisc.sh Miscellaneous things to be done during bootup.
+#
+
+. /etc/default/rcS
+#
+# Put a nologin file in /etc to prevent people from logging in before
+# system startup is complete.
+#
+if test "$DELAYLOGIN" = yes
+then
+ echo "System bootup in progress - please wait" > /etc/nologin
+ cp /etc/nologin /etc/nologin.boot
+fi
+
+#
+# Set pseudo-terminal access permissions.
+#
+if ( ! grep -q devfs /proc/mounts ) && test -c /dev/ttyp0
+then
+ chmod 666 /dev/tty[p-za-e][0-9a-f]
+ chown root:tty /dev/tty[p-za-e][0-9a-f]
+fi
+
+#
+# Apply /proc settings if defined
+#
+SYSCTL_CONF="/etc/sysctl.conf"
+if [ -f "${SYSCTL_CONF}" ]
+then
+ if [ -x "/sbin/sysctl" ]
+ then
+ /sbin/sysctl -p "${SYSCTL_CONF}"
+ else
+ echo "To have ${SYSCTL_CONF} applied during boot, install package <procps>."
+ fi
+fi
+
+#
+# Update /etc/motd.
+#
+if test "$EDITMOTD" != no
+then
+ uname -a > /etc/motd.tmp
+ sed 1d /etc/motd >> /etc/motd.tmp
+ mv /etc/motd.tmp /etc/motd
+fi
+
+#
+# This is as good a place as any for a sanity check
+# /tmp should be a symlink to /var/tmp to cut down on the number
+# of mounted ramdisks.
+if test ! -L /tmp && test -d /var/tmp
+then
+ rm -rf /tmp
+ ln -sf /var/tmp /tmp
+fi
+
+#
+# Update dynamic library cache
+#
+/sbin/ldconfig
+
+#
+# Recover the time, if there is a time file
+#
+if test -e /etc/timestamp
+then
+ date -s `cat /etc/timestamp`
+fi
+: exit 0
Property changes on: trunk/oe/packages/initscripts/initscripts-1.0/bootmisc.sh
___________________________________________________________________
Name: svn:executable
+
Added: trunk/oe/packages/initscripts/initscripts-1.0/c7x0/devices
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/c7x0/devices 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/c7x0/devices 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,68 @@
+#!/bin/sh
+#
+# Devfs handling script. Since we arent running devfsd due to various reasons
+# which I will not lay out here, we need to create some links for compatibility.
+
+. /etc/default/rcS
+
+# exit without doing anything if udev is active
+if test -e /dev/.udevdb; then
+ exit 0
+fi
+
+if test -e /dev/.devfsd
+then
+ if test "$VERBOSE" != "no"; then echo -n "Setting up device links for devfs: "; fi
+ ln -s /dev/touchscreen/0 /dev/ts
+ ln -s /dev/touchscreen/0raw /dev/tsraw
+ ln -s /dev/vc/0 /dev/tty0
+ ln -s /dev/vc/1 /dev/tty1
+ ln -s /dev/vc/2 /dev/tty2
+ ln -s /dev/vc/3 /dev/tty3
+ ln -s /dev/vc/4 /dev/tty4
+ ln -s /dev/vc/5 /dev/tty5
+ ln -s /dev/fb/0 /dev/fb0
+# ln -s /dev/tts/0 /dev/ttySA0
+# ln -s /dev/tts/1 /dev/ttySA1
+# ln -s /dev/tts/2 /dev/ttySA2
+
+ ln -s /dev/sound/dsp /dev/dsp
+ ln -s /dev/sound/mixer /dev/mixer
+
+ ln -s /dev/v4l/video0 /dev/video0
+ ln -s /dev/v4l/video0 /dev/video
+ ln -s /dev/misc/rtc /dev/rtc
+
+ ## need this so that ppp will autoload the ppp modules
+ mknod /dev/ppp c 108 0
+ if test "$VERBOSE" != "no"; then echo "done"; fi
+else
+ if test "$VERBOSE" != "no"; then echo -n "Mounting /dev ramdisk: "; fi
+ mount -t ramfs ramfs /dev || mount -t tmpfs ramfs /dev
+ if test $? -ne 0; then
+ if test "$VERBOSE" != "no"; then echo "failed"; fi
+ else
+ if test "$VERBOSE" != "no"; then echo "done"; fi
+ fi
+ if test "$VERBOSE" != "no"; then echo -n "Populating /dev: "; fi
+ cd /
+ mkdir -p dev/msys
+ mkdir -p dev/pts
+ mkdir -p dev/input
+ mkdir -p dev/vc
+ for i in 0 1 2 3 4 5 6 7 8 9; do
+ ln -s /dev/tty$i /dev/vc/$i
+ done
+ ln -sf /dev/sharp_ts /dev/ts
+ ln -sf /dev/sharp_fl /dev/fl
+ ln -sf /proc/self/fd /dev/fd
+ ln -sf /proc/kcore /dev/core
+ /sbin/makedevs -r / -D /etc/device_table
+ if test $? -ne 0; then
+ if test "$VERBOSE" != "no"; then echo "failed"; fi
+ else
+ if test "$VERBOSE" != "no"; then echo "done"; fi
+ fi
+fi
+
+exit 0
Property changes on: trunk/oe/packages/initscripts/initscripts-1.0/c7x0/devices
___________________________________________________________________
Name: svn:executable
+
Added: trunk/oe/packages/initscripts/initscripts-1.0/checkfs.sh
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/checkfs.sh 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/checkfs.sh 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,46 @@
+#
+# checkfs.sh Check all filesystems.
+#
+# Version: @(#)checkfs 2.83 05-Oct-2001 miquels at cistron.nl
+#
+
+. /etc/default/rcS
+
+#
+# Check the rest of the filesystems.
+#
+if test ! -f /fastboot
+then
+ if test -f /forcefsck
+ then
+ force="-f"
+ else
+ force=""
+ fi
+ if test "$FSCKFIX" = yes
+ then
+ fix="-y"
+ else
+ fix="-a"
+ fi
+ spinner="-C"
+ case "$TERM" in
+ dumb|network|unknown|"") spinner="" ;;
+ esac
+ test "`uname -m`" = "s390" && spinner="" # This should go away
+ test "$VERBOSE" != no && echo "Checking all filesystems..."
+ fsck $spinner -R -A $fix $force
+ if test "$?" -gt 1
+ then
+ echo
+ echo "fsck failed. Please repair manually."
+ echo
+ echo "CONTROL-D will exit from this shell and continue system startup."
+ echo
+ # Start a single user shell on the console
+ /sbin/sulogin $CONSOLE
+ fi
+fi
+rm -f /fastboot /forcefsck
+
+: exit 0
Property changes on: trunk/oe/packages/initscripts/initscripts-1.0/checkfs.sh
___________________________________________________________________
Name: svn:executable
+
Added: trunk/oe/packages/initscripts/initscripts-1.0/checkroot.sh
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/checkroot.sh 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/checkroot.sh 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,170 @@
+#
+# checkroot.sh Check to root filesystem.
+#
+# Version: @(#)checkroot.sh 2.84 25-Jan-2002 miquels at cistron.nl
+#
+
+. /etc/default/rcS
+
+#
+# Set SULOGIN in /etc/default/rcS to yes if you want a sulogin to be spawned
+# from this script *before anything else* with a timeout, like SCO does.
+#
+test "$SULOGIN" = yes && sulogin -t 30 $CONSOLE
+
+#
+# Ensure that bdflush (update) is running before any major I/O is
+# performed (the following fsck is a good example of such activity :).
+#
+test -x /sbin/update && update
+
+#
+# Read /etc/fstab.
+#
+exec 9>&0 </etc/fstab
+rootmode=rw
+rootopts=rw
+rootcheck=no
+swap_on_md=no
+devfs=
+while read fs mnt type opts dump pass junk
+do
+ case "$fs" in
+ ""|\#*)
+ continue;
+ ;;
+ /dev/md*)
+ # Swap on md device.
+ test "$type" = swap && swap_on_md=yes
+ ;;
+ /dev/*)
+ ;;
+ *)
+ # Might be a swapfile.
+ test "$type" = swap && swap_on_md=yes
+ ;;
+ esac
+ test "$type" = devfs && devfs="$fs"
+ test "$mnt" != / && continue
+ rootopts="$opts"
+ test "$pass" = 0 -o "$pass" = "" && rootcheck=no
+ case "$opts" in
+ ro|ro,*|*,ro|*,ro,*)
+ rootmode=ro
+ ;;
+ esac
+done
+exec 0>&9 9>&-
+
+#
+# Activate the swap device(s) in /etc/fstab. This needs to be done
+# before fsck, since fsck can be quite memory-hungry.
+#
+doswap=no
+test -d /proc/1 || mount -n /proc
+case "`uname -r`" in
+ 2.[0123].*)
+ if test $swap_on_md = yes && grep -qs resync /proc/mdstat
+ then
+ test "$VERBOSE" != no && echo "Not activating swap - RAID array resyncing"
+ else
+ doswap=yes
+ fi
+ ;;
+ *)
+ doswap=yes
+ ;;
+esac
+if test $doswap = yes
+then
+ test "$VERBOSE" != no && echo "Activating swap"
+ swapon -a 2> /dev/null
+fi
+
+#
+# Check the root filesystem.
+#
+if test -f /fastboot || test $rootcheck = no
+then
+ test $rootcheck = yes && echo "Fast boot, no filesystem check"
+else
+ #
+ # Ensure that root is quiescent and read-only before fsck'ing.
+ #
+ mount -n -o remount,ro /
+ if test $? = 0
+ then
+ if test -f /forcefsck
+ then
+ force="-f"
+ else
+ force=""
+ fi
+ if test "$FSCKFIX" = yes
+ then
+ fix="-y"
+ else
+ fix="-a"
+ fi
+ spinner="-C"
+ case "$TERM" in
+ dumb|network|unknown|"") spinner="" ;;
+ esac
+ test `uname -m` = s390 && spinner="" # This should go away
+ test "$VERBOSE" != no && echo "Checking root filesystem..."
+ fsck $spinner $force $fix /
+ #
+ # If there was a failure, drop into single-user mode.
+ #
+ # NOTE: "failure" is defined as exiting with a return code of
+ # 2 or larger. A return code of 1 indicates that filesystem
+ # errors were corrected but that the boot may proceed.
+ #
+ if test "$?" -gt 1
+ then
+ # Surprise! Re-directing from a HERE document (as in
+ # "cat << EOF") won't work, because the root is read-only.
+ echo
+ echo "fsck failed. Please repair manually and reboot. Please note"
+ echo "that the root filesystem is currently mounted read-only. To"
+ echo "remount it read-write:"
+ echo
+ echo " # mount -n -o remount,rw /"
+ echo
+ echo "CONTROL-D will exit from this shell and REBOOT the system."
+ echo
+ # Start a single user shell on the console
+ /sbin/sulogin $CONSOLE
+ reboot -f
+ fi
+ else
+ echo "*** ERROR! Cannot fsck root fs because it is not mounted read-only!"
+ echo
+ fi
+fi
+
+#
+# If the root filesystem was not marked as read-only in /etc/fstab,
+# remount the rootfs rw but do not try to change mtab because it
+# is on a ro fs until the remount succeeded. Then clean up old mtabs
+# and finally write the new mtab.
+# This part is only needed if the rootfs was mounted ro.
+#
+if [ $(grep rootfs /proc/mounts | awk '{print $4}') = rw ]; then
+ exit 0
+fi
+echo "Remounting root file system..."
+mount -n -o remount,$rootmode /
+if test "$rootmode" = rw
+then
+ if test ! -L /etc/mtab
+ then
+ rm -f /etc/mtab~ /etc/nologin
+ : > /etc/mtab
+ fi
+ mount -f -o remount /
+ mount -f /proc
+ test "$devfs" && grep -q '^devfs /dev' /proc/mounts && mount -f "$devfs"
+fi
+
+: exit 0
Property changes on: trunk/oe/packages/initscripts/initscripts-1.0/checkroot.sh
___________________________________________________________________
Name: svn:executable
+
Added: trunk/oe/packages/initscripts/initscripts-1.0/collie/devices
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/collie/devices 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/collie/devices 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,67 @@
+#!/bin/sh
+#
+# Devfs handling script. Since we arent running devfsd due to various reasons
+# which I will not lay out here, we need to create some links for compatibility.
+
+. /etc/default/rcS
+
+# exit without doing anything if udev is active
+if test -e /dev/.udevdb; then
+ exit 0
+fi
+
+if test -e /dev/.devfsd
+then
+ if test "$VERBOSE" != "no"; then echo -n "Setting up device links for devfs: "; fi
+ ln -s /dev/touchscreen/0 /dev/ts
+ ln -s /dev/touchscreen/0raw /dev/tsraw
+ ln -s /dev/vc/0 /dev/tty0
+ ln -s /dev/vc/1 /dev/tty1
+ ln -s /dev/vc/2 /dev/tty2
+ ln -s /dev/vc/3 /dev/tty3
+ ln -s /dev/vc/4 /dev/tty4
+ ln -s /dev/vc/5 /dev/tty5
+ ln -s /dev/fb/0 /dev/fb0
+# ln -s /dev/tts/0 /dev/ttySA0
+# ln -s /dev/tts/1 /dev/ttySA1
+# ln -s /dev/tts/2 /dev/ttySA2
+
+ ln -s /dev/sound/dsp /dev/dsp
+ ln -s /dev/sound/mixer /dev/mixer
+
+ ln -s /dev/v4l/video0 /dev/video0
+ ln -s /dev/v4l/video0 /dev/video
+ ln -s /dev/misc/rtc /dev/rtc
+
+ ## need this so that ppp will autoload the ppp modules
+ mknod /dev/ppp c 108 0
+ if test "$VERBOSE" != "no"; then echo "done"; fi
+else
+ if test "$VERBOSE" != "no"; then echo -n "Mounting /dev ramdisk: "; fi
+ mount -t ramfs ramfs /dev || mount -t tmpfs ramfs /dev
+ if test $? -ne 0; then
+ if test "$VERBOSE" != "no"; then echo "failed"; fi
+ else
+ if test "$VERBOSE" != "no"; then echo "done"; fi
+ fi
+ if test "$VERBOSE" != "no"; then echo -n "Populating /dev: "; fi
+ cd /
+ mkdir -p dev/msys
+ mkdir -p dev/pts
+ mkdir -p dev/vc
+ for i in 0 1 2 3 4 5 6 7 8 9; do
+ ln -s /dev/tty$i /dev/vc/$i
+ done
+ ln -sf /dev/sharp_ts /dev/ts
+ ln -sf /dev/sharp_fl /dev/fl
+ ln -sf /proc/self/fd /dev/fd
+ ln -sf /proc/kcore /dev/core
+ /sbin/makedevs -r / -D /etc/device_table
+ if test $? -ne 0; then
+ if test "$VERBOSE" != "no"; then echo "failed"; fi
+ else
+ if test "$VERBOSE" != "no"; then echo "done"; fi
+ fi
+fi
+
+exit 0
Property changes on: trunk/oe/packages/initscripts/initscripts-1.0/collie/devices
___________________________________________________________________
Name: svn:executable
+
Added: trunk/oe/packages/initscripts/initscripts-1.0/device_table.txt
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/device_table.txt 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/device_table.txt 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,179 @@
+#/dev/ d 775 0 0 - - - - -
+#/dev/msys d 775 0 0 - - - - -
+#/dev/pts d 775 0 0 - - - - -
+#/var d 775 0 0 - - - - -
+/boot/var/empty d 755 0 3 - - - -
+/dev/apm_bios c 660 0 46 10 134 - - -
+/dev/audio c 660 0 29 14 4 - - -
+/dev/audio1 c 660 0 29 14 20 - - -
+/dev/audio2 c 660 0 29 14 36 - - -
+/dev/audio3 c 660 0 29 14 52 - - -
+/dev/bty c 644 0 0 60 0 0 1 5
+/dev/sharp_fl c 640 0 44 254 0 - - -
+/dev/console c 660 0 5 5 1 - -
+/dev/cusa0 c 640 0 0 205 5 - - -
+/dev/cusa1 c 640 0 0 205 6 - - -
+/dev/cusa2 c 640 0 0 205 7 - - -
+/dev/dsp c 660 0 29 14 3 - - -
+/dev/dsp1 c 660 0 29 14 19 - - -
+/dev/dsp2 c 660 0 29 14 35 - - -
+/dev/dsp3 c 660 0 29 14 51 - - -
+/dev/fb c 660 0 44 29 0 0 32 2
+/dev/fb0autodetect c 660 0 44 29 1 - - -
+/dev/fb0current c 660 0 44 29 0 - - -
+#/dev/fb1 c 660 0 44 29 32 - - -
+/dev/fb1autodetect c 660 0 44 29 33 - - -
+/dev/fb1current c 660 0 44 29 32 - - -
+/dev/full c 666 0 7 - - -
+/dev/hda b 660 0 6 3 0 - - -
+/dev/hda b 660 0 6 3 1 1 1 20
+/dev/hdb b 660 0 6 3 64 - - -
+/dev/hdb b 660 0 6 3 65 1 1 20
+/dev/hdc b 660 0 6 22 0 - - -
+/dev/hdc b 660 0 6 22 1 1 1 20
+/dev/initctl p 600 0 0 - - - -
+/dev/i2c0 c 660 0 0 89 0 - - -
+/dev/inportbm c 660 0 0 10 2 - - -
+/dev/input/event c 660 0 0 13 64 0 1 20
+/dev/ircomm0 c 640 0 0 161 0 - - -
+/dev/jbm c 660 0 0 10 4 - - -
+/dev/kmem c 640 0 15 1 2 - - -
+/dev/lirc c 660 0 5 61 0 - - -
+/dev/logibm c 660 0 0 10 0 - - -
+/dev/loop0 b 660 0 11 7 0 - - -
+/dev/loop1 b 660 0 11 7 1 - - -
+/dev/mem c 640 0 15 1 1 - - -
+/dev/mixer c 666 0 0 14 0 - - -
+/dev/mixer1 c 666 0 0 14 16 - - -
+/dev/mixer2 c 666 0 0 14 32 - - -
+/dev/mixer3 c 666 0 0 14 48 - - -
+/dev/mmcda b 640 0 0 60 0 - - -
+/dev/mmcda1 b 640 0 0 60 1 - - -
+/dev/mmcda2 b 640 0 0 60 2 - - -
+/dev/msys/fla b 660 0 11 100 0 - - -
+/dev/msys/fla1 b 660 0 11 100 1 - - -
+/dev/msys/fla2 b 660 0 11 100 2 - - -
+/dev/msys/fla3 b 660 0 11 100 3 - - -
+/dev/msys/fla4 b 660 0 11 100 4 - - -
+/dev/msys/flb b 660 0 11 100 64 - - -
+/dev/msys/flb1 b 660 0 11 100 65 - - -
+/dev/msys/flb2 b 660 0 11 100 66 - - -
+/dev/msys/flb3 b 660 0 11 100 67 - - -
+/dev/msys/flb4 b 660 0 11 100 68 - - -
+/dev/mtd c 660 0 6 90 0 0 2 8
+/dev/mtdblock b 640 0 0 31 0 0 1 8
+/dev/nst0 c 664 0 11 9 128 - - -
+/dev/nst0a c 664 0 11 9 224 - - -
+/dev/nst0l c 664 0 11 9 160 - - -
+/dev/nst0m c 664 0 11 9 192 - - -
+/dev/nst1 c 664 0 11 9 129 - - -
+/dev/nst1a c 664 0 11 9 225 - - -
+/dev/nst1l c 664 0 11 9 161 - - -
+/dev/nst1m c 664 0 11 9 193 - - -
+/dev/null c 666 0 0 1 3 - - -
+/dev/par0 c 660 0 7 6 0 - - -
+/dev/par1 c 660 0 7 6 1 - - -
+/dev/par2 c 660 0 7 6 2 - - -
+/dev/port c 640 0 15 1 4 - - -
+/dev/ppp c 640 0 0 108 0 - - -
+/dev/psaux c 660 0 0 10 1 - - -
+/dev/ptmx c 666 0 5 5 2 - - -
+/dev/ptya0 c 660 0 5 2 176 - - -
+/dev/ptya1 c 660 0 5 2 177 - - -
+/dev/ptya2 c 660 0 5 2 178 - - -
+/dev/ptya3 c 660 0 5 2 179 - - -
+/dev/ptya4 c 660 0 5 2 180 - - -
+/dev/ptya5 c 660 0 5 2 181 - - -
+/dev/ptya6 c 660 0 5 2 182 - - -
+/dev/ptya7 c 660 0 5 2 183 - - -
+/dev/ptya8 c 660 0 5 2 184 - - -
+/dev/ptya9 c 660 0 5 2 185 - - -
+/dev/ptyaa c 660 0 5 2 186 - - -
+/dev/ptyab c 660 0 5 2 187 - - -
+/dev/ptyac c 660 0 5 2 188 - - -
+/dev/ptyad c 660 0 5 2 189 - - -
+/dev/ptyae c 660 0 5 2 190 - - -
+/dev/ptyaf c 660 0 5 2 191 - - -
+/dev/ram b 640 0 0 1 0 0 1 4
+/dev/random c 444 0 0 1 8 - - -
+/dev/rfcomm0 c 660 0 0 216 0 - - -
+/dev/rfcomm1 c 660 0 0 216 1 - - -
+/dev/rfcomm2 c 660 0 0 216 2 - - -
+/dev/rfcomm3 c 660 0 0 216 3 - - -
+/dev/rfcomm4 c 660 0 0 216 4 - - -
+/dev/rfcomm5 c 660 0 0 216 5 - - -
+/dev/rfcomm6 c 660 0 0 216 6 - - -
+/dev/rfcomm7 c 660 0 0 216 7 - - -
+/dev/rfcomm8 c 660 0 0 216 8 - - -
+/dev/rfcomm9 c 660 0 0 216 9 - - -
+/dev/rfcomm10 c 660 0 0 216 10 - - -
+/dev/rfcomm11 c 660 0 0 216 11 - - -
+/dev/rfcomm12 c 660 0 0 216 12 - - -
+/dev/rfcomm13 c 660 0 0 216 13 - - -
+/dev/rfcomm14 c 660 0 0 216 14 - - -
+/dev/rfcomm15 c 660 0 0 216 15 - - -
+/dev/rmidi0 c 660 0 0 35 64 - - -
+/dev/rmidi1 c 660 0 0 35 65 - - -
+/dev/rmidi2 c 660 0 0 35 66 - - -
+/dev/rmidi3 c 660 0 0 35 67 - - -
+/dev/rtc c 660 0 47 10 135 - - -
+/dev/scd0 b 660 0 6 11 0 - - -
+/dev/scd1 b 660 0 6 11 1 - - -
+/dev/sda b 660 0 6 8 0 - - -
+/dev/sda1 b 660 0 6 8 1 - - -
+/dev/sda2 b 660 0 6 8 2 - - -
+/dev/sda3 b 660 0 6 8 3 - - -
+/dev/sda4 b 660 0 6 8 4 - - -
+/dev/sda5 b 660 0 6 8 5 - - -
+/dev/sda6 b 660 0 6 8 6 - - -
+/dev/sda7 b 660 0 6 8 7 - - -
+/dev/sda8 b 660 0 6 8 8 - - -
+/dev/sda9 b 660 0 6 8 9 - - -
+/dev/sdb b 660 0 6 8 16 - - -
+/dev/sdb1 b 660 0 6 8 17 - - -
+/dev/sdb2 b 660 0 6 8 18 - - -
+/dev/sdb3 b 660 0 6 8 19 - - -
+/dev/sdb4 b 660 0 6 8 20 - - -
+/dev/sdb5 b 660 0 6 8 21 - - -
+/dev/sdb6 b 660 0 6 8 22 - - -
+/dev/sdb7 b 660 0 6 8 23 - - -
+/dev/sdb8 b 660 0 6 8 24 - - -
+/dev/sdb9 b 660 0 6 8 25 - - -
+/dev/sdc b 660 0 6 8 32 - - -
+/dev/sdc1 b 660 0 6 8 33 - - -
+/dev/sdc2 b 660 0 6 8 34 - - -
+/dev/sdc3 b 660 0 6 8 35 - - -
+/dev/sdc4 b 660 0 6 8 36 - - -
+/dev/sdc5 b 660 0 6 8 37 - - -
+/dev/sdc6 b 660 0 6 8 38 - - -
+/dev/sdc7 b 660 0 6 8 39 - - -
+/dev/sdc8 b 660 0 6 8 40 - - -
+/dev/sdc9 b 660 0 6 8 41 - - -
+/dev/sd_slotstat c 660 0 6 10 240 - - -
+/dev/sharp_audioctl c 660 0 29 10 213 - - -
+/dev/sharp_buz c 660 0 29 10 211 - - -
+/dev/sharp_kbdctl c 660 0 45 10 214 - - -
+/dev/sharp_led c 660 0 48 10 210 - - -
+/dev/sharp_ts c 640 0 45 11 0 - - -
+/dev/smtpe0 c 640 0 0 35 128 - - -
+/dev/smtpe1 c 640 0 0 35 129 - - -
+/dev/smtpe2 c 640 0 0 35 130 - - -
+/dev/smtpe3 c 640 0 0 35 131 - - -
+/dev/sndstat c 660 0 29 14 6 - - -
+/dev/st0 c 660 0 11 9 0 - - -
+/dev/st0a c 660 0 11 9 96 - - -
+/dev/st0l c 660 0 11 9 32 - - -
+/dev/st0m c 660 0 11 9 64 - - -
+/dev/st1 c 660 0 11 9 1 - - -
+/dev/st1a c 660 0 11 9 97 - - -
+/dev/st1l c 660 0 11 9 33 - - -
+/dev/st1m c 660 0 11 9 65 - - -
+/dev/tty c 664 0 5 5 0 - - -
+/dev/tty c 666 0 5 4 0 0 1 9
+/dev/ttyS c 640 0 5 4 64 0 1 4
+/dev/ttySA c 640 0 5 204 5 0 1 4
+/dev/ttyUSB c 660 0 5 188 0 0 1 2
+/dev/urandom c 644 0 0 1 9 - - -
+/dev/usbmouse c 640 0 45 10 32 - - -
+/dev/zero c 644 0 0 1 5 - - -
+/dev/input/mice c 660 0 0 13 63 - - -
Added: trunk/oe/packages/initscripts/initscripts-1.0/devices
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/devices 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/devices 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,66 @@
+#!/bin/sh
+#
+# Devfs handling script. Since we arent running devfsd due to various reasons
+# which I will not lay out here, we need to create some links for compatibility.
+
+. /etc/default/rcS
+
+# exit without doing anything if udev is active
+if test -e /dev/.udev -o -e /dev/.udevdb; then
+ exit 0
+fi
+
+if test -e /dev/.devfsd
+then
+ if test "$VERBOSE" != "no"; then echo -n "Setting up device links for devfs: "; fi
+ ln -s /dev/touchscreen/0 /dev/ts
+ ln -s /dev/touchscreen/0raw /dev/tsraw
+ ln -s /dev/vc/0 /dev/tty0
+ ln -s /dev/vc/1 /dev/tty1
+ ln -s /dev/vc/2 /dev/tty2
+ ln -s /dev/vc/3 /dev/tty3
+ ln -s /dev/vc/4 /dev/tty4
+ ln -s /dev/vc/5 /dev/tty5
+ ln -s /dev/fb/0 /dev/fb0
+# ln -s /dev/tts/0 /dev/ttySA0
+# ln -s /dev/tts/1 /dev/ttySA1
+# ln -s /dev/tts/2 /dev/ttySA2
+
+ ln -s /dev/sound/dsp /dev/dsp
+ ln -s /dev/sound/mixer /dev/mixer
+
+ ln -s /dev/v4l/video0 /dev/video0
+ ln -s /dev/v4l/video0 /dev/video
+ ln -s /dev/misc/rtc /dev/rtc
+
+ ## need this so that ppp will autoload the ppp modules
+ mknod /dev/ppp c 108 0
+ if test "$VERBOSE" != "no"; then echo "done"; fi
+else
+ if test "$VERBOSE" != "no"; then echo -n "Mounting /dev ramdisk: "; fi
+ mount -t ramfs ramfs /dev || mount -t tmpfs ramfs /dev
+ if test $? -ne 0; then
+ if test "$VERBOSE" != "no"; then echo "failed"; fi
+ else
+ if test "$VERBOSE" != "no"; then echo "done"; fi
+ fi
+ if test "$VERBOSE" != "no"; then echo -n "Populating /dev: "; fi
+ cd /
+ mkdir -p dev/input
+ mkdir -p dev/msys
+ mkdir -p dev/pts
+ mkdir -p dev/vc
+ for i in 0 1 2 3 4 5 6 7 8 9; do
+ ln -s /dev/tty$i /dev/vc/$i
+ done
+ ln -sf /proc/self/fd /dev/fd
+ ln -sf /proc/kcore /dev/core
+ /sbin/makedevs -r / -D /etc/device_table
+ if test $? -ne 0; then
+ if test "$VERBOSE" != "no"; then echo "failed"; fi
+ else
+ if test "$VERBOSE" != "no"; then echo "done"; fi
+ fi
+fi
+
+exit 0
Property changes on: trunk/oe/packages/initscripts/initscripts-1.0/devices
___________________________________________________________________
Name: svn:executable
+
Added: trunk/oe/packages/initscripts/initscripts-1.0/devpts
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/devpts 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/devpts 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,5 @@
+# GID of the `tty' group
+TTYGRP=5
+
+# Set to 600 to have `mesg n' be the default
+TTYMODE=620
Added: trunk/oe/packages/initscripts/initscripts-1.0/devpts.sh
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/devpts.sh 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/devpts.sh 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,28 @@
+#! /bin/sh
+
+. /etc/default/devpts
+
+test "`uname -s`" = "Linux" || exit 0
+
+#
+# First find out if devpts is available. Also check if devfs
+# is already mounted - in that case we don't want to use devpts.
+#
+if test ! -e /dev/.devfsd && ( grep -q devpts /proc/filesystems )
+then
+ #
+ # Create multiplexor device.
+ #
+ test -c /dev/ptmx || mknod -m 666 /dev/ptmx c 5 2
+
+ #
+ # Mount /dev/pts if needed.
+ #
+ if ( ! grep -q devpts /proc/mounts )
+ then
+ mkdir -p /dev/pts
+ mount -t devpts devpts /dev/pts -ogid=${TTYGRP},mode=${TTYMODE}
+ fi
+fi
+
+exit 0
Property changes on: trunk/oe/packages/initscripts/initscripts-1.0/devpts.sh
___________________________________________________________________
Name: svn:executable
+
Added: trunk/oe/packages/initscripts/initscripts-1.0/finish
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/finish 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/finish 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+if ! test -e /etc/.configured; then
+ > /etc/.configured
+fi
+
Property changes on: trunk/oe/packages/initscripts/initscripts-1.0/finish
___________________________________________________________________
Name: svn:executable
+
Added: trunk/oe/packages/initscripts/initscripts-1.0/h3600/devices
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/h3600/devices 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/h3600/devices 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,37 @@
+#!/bin/sh
+#
+# Devfs handling script. Since we arent running devfsd due to various reasons
+# which I will not lay out here, we need to create some links for compatibility.
+
+# exit without doing anything if udev is active
+if test -e /dev/.udevdb; then
+ exit 0
+fi
+
+ test -n "$VERBOSE" && echo -n "Setting up device links for devfs: "
+ (
+ ln -s /dev/vc/0 /dev/tty0
+ ln -s /dev/vc/1 /dev/tty1
+ ln -s /dev/vc/2 /dev/tty2
+ ln -s /dev/vc/3 /dev/tty3
+ ln -s /dev/vc/4 /dev/tty4
+ ln -s /dev/vc/5 /dev/tty5
+ ln -s /dev/fb/0 /dev/fb0
+ # ln -s /dev/tts/0 /dev/ttySA0
+ # ln -s /dev/tts/1 /dev/ttySA1
+ # ln -s /dev/tts/2 /dev/ttySA2
+
+ ln -s /dev/sound/dsp /dev/dsp
+ ln -s /dev/sound/mixer /dev/mixer
+
+ ln -s /dev/v4l/video0 /dev/video0
+ ln -s /dev/v4l/video0 /dev/video
+ ln -s /dev/misc/rtc /dev/rtc
+ ln -s /dev/misc/apm_bios /dev/apm_bios
+
+ ## need this so that ppp will autoload the ppp modules
+ mknod /dev/ppp c 108 0
+ ) > /dev/null 2>&1
+
+
+ test -n "$VERBOSE" && echo "done"
Property changes on: trunk/oe/packages/initscripts/initscripts-1.0/h3600/devices
___________________________________________________________________
Name: svn:executable
+
Added: trunk/oe/packages/initscripts/initscripts-1.0/h3900/devices
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/h3900/devices 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/h3900/devices 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,37 @@
+#!/bin/sh
+#
+# Devfs handling script. Since we arent running devfsd due to various reasons
+# which I will not lay out here, we need to create some links for compatibility.
+
+# exit without doing anything if udev is active
+if test -e /dev/.udevdb; then
+ exit 0
+fi
+
+ test -n "$VERBOSE" && echo -n "Setting up device links for devfs: "
+ (
+ ln -s /dev/vc/0 /dev/tty0
+ ln -s /dev/vc/1 /dev/tty1
+ ln -s /dev/vc/2 /dev/tty2
+ ln -s /dev/vc/3 /dev/tty3
+ ln -s /dev/vc/4 /dev/tty4
+ ln -s /dev/vc/5 /dev/tty5
+ ln -s /dev/fb/0 /dev/fb0
+ # ln -s /dev/tts/0 /dev/ttySA0
+ # ln -s /dev/tts/1 /dev/ttySA1
+ # ln -s /dev/tts/2 /dev/ttySA2
+
+ ln -s /dev/sound/dsp /dev/dsp
+ ln -s /dev/sound/mixer /dev/mixer
+
+ ln -s /dev/v4l/video0 /dev/video0
+ ln -s /dev/v4l/video0 /dev/video
+ ln -s /dev/misc/rtc /dev/rtc
+ ln -s /dev/misc/apm_bios /dev/apm_bios
+
+ ## need this so that ppp will autoload the ppp modules
+ mknod /dev/ppp c 108 0
+ ) > /dev/null 2>&1
+
+
+ test -n "$VERBOSE" && echo "done"
Property changes on: trunk/oe/packages/initscripts/initscripts-1.0/h3900/devices
___________________________________________________________________
Name: svn:executable
+
Added: trunk/oe/packages/initscripts/initscripts-1.0/halt
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/halt 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/halt 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,25 @@
+#! /bin/sh
+#
+# halt Execute the halt command.
+#
+# Version: @(#)halt 2.84-2 07-Jan-2002 miquels at cistron.nl
+#
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+
+# See if we need to cut the power.
+if test -x /etc/init.d/ups-monitor
+then
+ /etc/init.d/ups-monitor poweroff
+fi
+
+# Don't shut down drives if we're using RAID.
+hddown="-h"
+if grep -qs '^md.*active' /proc/mdstat
+then
+ hddown=""
+fi
+
+halt -d -f -i -p $hddown
+
+: exit 0
Property changes on: trunk/oe/packages/initscripts/initscripts-1.0/halt
___________________________________________________________________
Name: svn:executable
+
Added: trunk/oe/packages/initscripts/initscripts-1.0/hostname.sh
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/hostname.sh 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/hostname.sh 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,11 @@
+#
+# hostname.sh Set hostname.
+#
+# Version: @(#)hostname.sh 1.10 26-Feb-2001 miquels at cistron.nl
+#
+
+if test -f /etc/hostname
+then
+ hostname -F /etc/hostname
+fi
+
Property changes on: trunk/oe/packages/initscripts/initscripts-1.0/hostname.sh
___________________________________________________________________
Name: svn:executable
+
Added: trunk/oe/packages/initscripts/initscripts-1.0/jornada56x/devices
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/jornada56x/devices 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/jornada56x/devices 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,37 @@
+#!/bin/sh
+#
+# Devfs handling script. Since we arent running devfsd due to various reasons
+# which I will not lay out here, we need to create some links for compatibility.
+
+# exit without doing anything if udev is active
+if test -e /dev/.udevdb; then
+ exit 0
+fi
+
+ test -n "$VERBOSE" && echo -n "Setting up device links for devfs: "
+ (
+ ln -s /dev/vc/0 /dev/tty0
+ ln -s /dev/vc/1 /dev/tty1
+ ln -s /dev/vc/2 /dev/tty2
+ ln -s /dev/vc/3 /dev/tty3
+ ln -s /dev/vc/4 /dev/tty4
+ ln -s /dev/vc/5 /dev/tty5
+ ln -s /dev/fb/0 /dev/fb0
+ # ln -s /dev/tts/0 /dev/ttySA0
+ # ln -s /dev/tts/1 /dev/ttySA1
+ # ln -s /dev/tts/2 /dev/ttySA2
+
+ ln -s /dev/sound/dsp /dev/dsp
+ ln -s /dev/sound/mixer /dev/mixer
+
+ ln -s /dev/v4l/video0 /dev/video0
+ ln -s /dev/v4l/video0 /dev/video
+ ln -s /dev/misc/rtc /dev/rtc
+ ln -s /dev/misc/apm_bios /dev/apm_bios
+
+ ## need this so that ppp will autoload the ppp modules
+ mknod /dev/ppp c 108 0
+ ) > /dev/null 2>&1
+
+
+ test -n "$VERBOSE" && echo "done"
Property changes on: trunk/oe/packages/initscripts/initscripts-1.0/jornada56x/devices
___________________________________________________________________
Name: svn:executable
+
Added: trunk/oe/packages/initscripts/initscripts-1.0/jornada6xx/devices
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/jornada6xx/devices 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/jornada6xx/devices 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,70 @@
+#!/bin/sh
+#
+# Devfs handling script. Since we arent running devfsd due to various reasons
+# which I will not lay out here, we need to create some links for compatibility.
+
+. /etc/default/rcS
+
+# exit without doing anything if udev is active
+if test -e /dev/.udevdb; then
+ exit 0
+fi
+
+if test -e /dev/.devfsd
+then
+ if test "$VERBOSE" != "no"; then echo -n "Setting up device links for devfs: "; fi
+ ln -s /dev/touchscreen/0 /dev/ts
+ ln -s /dev/touchscreen/0raw /dev/tsraw
+ ln -s /dev/vc/0 /dev/tty0
+ ln -s /dev/vc/1 /dev/tty1
+ ln -s /dev/vc/2 /dev/tty2
+ ln -s /dev/vc/3 /dev/tty3
+ ln -s /dev/vc/4 /dev/tty4
+ ln -s /dev/vc/5 /dev/tty5
+ ln -s /dev/fb/0 /dev/fb0
+# ln -s /dev/tts/0 /dev/ttySA0
+# ln -s /dev/tts/1 /dev/ttySA1
+# ln -s /dev/tts/2 /dev/ttySA2
+
+ ln -s /dev/sound/dsp /dev/dsp
+ ln -s /dev/sound/mixer /dev/mixer
+
+ ln -s /dev/v4l/video0 /dev/video0
+ ln -s /dev/v4l/video0 /dev/video
+ ln -s /dev/misc/rtc /dev/rtc
+
+ ## need this so that ppp will autoload the ppp modules
+ mknod /dev/ppp c 108 0
+
+ if test "$VERBOSE" != "no"; then echo "done"; fi
+else
+ if test "$VERBOSE" != "no"; then echo -n "Mounting /dev ramdisk: "; fi
+ mount -t ramfs ramfs /dev || mount -t tmpfs ramfs /dev
+ if test $? -ne 0; then
+ if test "$VERBOSE" != "no"; then echo "failed"; fi
+ else
+ if test "$VERBOSE" != "no"; then echo "done"; fi
+ fi
+ if test "$VERBOSE" != "no"; then echo -n "Populating /dev: "; fi
+ cd /
+ mkdir -p dev/input
+ mknod /dev/input/ts0 c 13 128
+ mknod /dev/ttySC1 c 9 204
+ mknod /dev/irda0 c 10 204
+ mkdir -p dev/msys
+ mkdir -p dev/pts
+ mkdir -p dev/vc
+ for i in 0 1 2 3 4 5 6 7 8 9; do
+ ln -s /dev/tty$i /dev/vc/$i
+ done
+ ln -sf /proc/self/fd /dev/fd
+ ln -sf /proc/kcore /dev/core
+ /sbin/makedevs -r / -D /etc/device_table
+ if test $? -ne 0; then
+ if test "$VERBOSE" != "no"; then echo "failed"; fi
+ else
+ if test "$VERBOSE" != "no"; then echo "done"; fi
+ fi
+fi
+
+exit 0
Added: trunk/oe/packages/initscripts/initscripts-1.0/jornada7xx/devices
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/jornada7xx/devices 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/jornada7xx/devices 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,70 @@
+#!/bin/sh
+#
+# Devfs handling script. Since we arent running devfsd due to various reasons
+# which I will not lay out here, we need to create some links for compatibility.
+
+. /etc/default/rcS
+
+# exit without doing anything if udev is active
+if test -e /dev/.udevdb; then
+ exit 0
+fi
+
+if test -e /dev/.devfsd
+then
+ if test "$VERBOSE" != "no"; then echo -n "Setting up device links for devfs: "; fi
+ ln -s /dev/touchscreen/0 /dev/ts
+ ln -s /dev/touchscreen/0raw /dev/tsraw
+ ln -s /dev/vc/0 /dev/tty0
+ ln -s /dev/vc/1 /dev/tty1
+ ln -s /dev/vc/2 /dev/tty2
+ ln -s /dev/vc/3 /dev/tty3
+ ln -s /dev/vc/4 /dev/tty4
+ ln -s /dev/vc/5 /dev/tty5
+ ln -s /dev/fb/0 /dev/fb0
+# ln -s /dev/tts/0 /dev/ttySA0
+# ln -s /dev/tts/1 /dev/ttySA1
+# ln -s /dev/tts/2 /dev/ttySA2
+
+ ln -s /dev/sound/dsp /dev/dsp
+ ln -s /dev/sound/mixer /dev/mixer
+
+ ln -s /dev/v4l/video0 /dev/video0
+ ln -s /dev/v4l/video0 /dev/video
+ ln -s /dev/misc/rtc /dev/rtc
+
+ ## need this so that ppp will autoload the ppp modules
+ mknod /dev/ppp c 108 0
+
+ if test "$VERBOSE" != "no"; then echo "done"; fi
+else
+ if test "$VERBOSE" != "no"; then echo -n "Mounting /dev ramdisk: "; fi
+ mount -t ramfs ramfs /dev || mount -t tmpfs ramfs /dev
+ if test $? -ne 0; then
+ if test "$VERBOSE" != "no"; then echo "failed"; fi
+ else
+ if test "$VERBOSE" != "no"; then echo "done"; fi
+ fi
+ if test "$VERBOSE" != "no"; then echo -n "Populating /dev: "; fi
+ cd /
+ mkdir -p dev/input
+ mknod /dev/input/ts0 c 13 65
+ mknod /dev/ttySC1 c 9 204
+ mknod /dev/irda0 c 10 204
+ mkdir -p dev/msys
+ mkdir -p dev/pts
+ mkdir -p dev/vc
+ for i in 0 1 2 3 4 5 6 7 8 9; do
+ ln -s /dev/tty$i /dev/vc/$i
+ done
+ ln -sf /proc/self/fd /dev/fd
+ ln -sf /proc/kcore /dev/core
+ /sbin/makedevs -r / -D /etc/device_table
+ if test $? -ne 0; then
+ if test "$VERBOSE" != "no"; then echo "failed"; fi
+ else
+ if test "$VERBOSE" != "no"; then echo "done"; fi
+ fi
+fi
+
+exit 0
Property changes on: trunk/oe/packages/initscripts/initscripts-1.0/jornada7xx/devices
___________________________________________________________________
Name: svn:executable
+
Added: trunk/oe/packages/initscripts/initscripts-1.0/mountall.sh
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/mountall.sh 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/mountall.sh 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,45 @@
+#
+# mountall.sh Mount all filesystems.
+#
+# Version: @(#)mountall.sh 2.83-2 01-Nov-2001 miquels at cistron.nl
+#
+. /etc/default/rcS
+
+#
+# Mount local filesystems in /etc/fstab. For some reason, people
+# might want to mount "proc" several times, and mount -v complains
+# about this. So we mount "proc" filesystems without -v.
+#
+test "$VERBOSE" != no && echo "Mounting local filesystems..."
+mount -at nonfs,nosmbfs,noncpfs 2>/dev/null
+
+#
+# We might have mounted something over /dev, see if /dev/initctl is there.
+#
+if test ! -p /dev/initctl
+then
+ rm -f /dev/initctl
+ mknod -m 600 /dev/initctl p
+fi
+kill -USR1 1
+
+#
+# Execute swapon command again, in case we want to swap to
+# a file on a now mounted filesystem.
+#
+doswap=yes
+case "`uname -r`" in
+ 2.[0123].*)
+ if grep -qs resync /proc/mdstat
+ then
+ doswap=no
+ fi
+ ;;
+esac
+if test $doswap = yes
+then
+ swapon -a 2> /dev/null
+fi
+
+: exit 0
+
Property changes on: trunk/oe/packages/initscripts/initscripts-1.0/mountall.sh
___________________________________________________________________
Name: svn:executable
+
Added: trunk/oe/packages/initscripts/initscripts-1.0/mountnfs.sh
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/mountnfs.sh 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/mountnfs.sh 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,87 @@
+#
+# mountnfs.sh Now that TCP/IP is configured, mount the NFS file
+# systems in /etc/fstab if needed. If possible,
+# start the portmapper before mounting (this is needed for
+# Linux 2.1.x and up).
+#
+# Also mounts SBM filesystems now, so the name of
+# this script is getting increasingly inaccurate.
+#
+# Version: @(#)mountnfs.sh 2.83 05-Oct-2001 miquels at cistron.nl
+#
+
+. /etc/default/rcS
+
+#
+# Run in a subshell because of I/O redirection.
+#
+test -f /etc/fstab && (
+
+#
+# Read through fstab line by line. If it is NFS, set the flag
+# for mounting NFS filesystems. If any NFS partition is found and it
+# not mounted with the nolock option, we start the portmapper.
+#
+portmap=no
+mount_nfs=no
+mount_smb=no
+mount_ncp=no
+while read device mountpt fstype options
+do
+ case "$device" in
+ ""|\#*)
+ continue
+ ;;
+ esac
+
+ case "$options" in
+ *noauto*)
+ continue
+ ;;
+ esac
+
+ if test "$fstype" = nfs
+ then
+ mount_nfs=yes
+ case "$options" in
+ *nolock*)
+ ;;
+ *)
+ portmap=yes
+ ;;
+ esac
+ fi
+ if test "$fstype" = smbfs
+ then
+ mount_smb=yes
+ fi
+ if test "$fstype" = ncpfs
+ then
+ mount_ncp=yes
+ fi
+done
+
+exec 0>&1
+
+if test "$portmap" = yes
+then
+ if test -x /sbin/portmap
+ then
+ echo -n "Starting portmapper... "
+ start-stop-daemon --start --quiet --exec /sbin/portmap
+ sleep 2
+ fi
+fi
+
+if test "$mount_nfs" = yes || test "$mount_smb" = yes || test "$mount_ncp" = yes
+then
+ echo "Mounting remote filesystems..."
+ test "$mount_nfs" = yes && mount -a -t nfs
+ test "$mount_smb" = yes && mount -a -t smbfs
+ test "$mount_ncp" = yes && mount -a -t ncpfs
+fi
+
+) < /etc/fstab
+
+: exit 0
+
Property changes on: trunk/oe/packages/initscripts/initscripts-1.0/mountnfs.sh
___________________________________________________________________
Name: svn:executable
+
Added: trunk/oe/packages/initscripts/initscripts-1.0/openmn/extractfs
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/openmn/extractfs 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/openmn/extractfs 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+if (grep -q 'tmpfs.*/var.*tmpfs' /proc/mounts)
+then
+ test "$VERBOSE" != no && echo "Copying /var filesystem..."
+ cp -a /boot/var /
+fi
Property changes on: trunk/oe/packages/initscripts/initscripts-1.0/openmn/extractfs
___________________________________________________________________
Name: svn:executable
+
Added: trunk/oe/packages/initscripts/initscripts-1.0/openmn/packages
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/openmn/packages 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/openmn/packages 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,63 @@
+#!/bin/sh
+# Original author: ???
+#
+# Additions by Steph Meslin-Weber:
+# x Percentage display
+# x Dot display of dependency installations
+# - removed both of above
+# - display is now X of Y packages and current package name being installed
+
+#. /etc/default/rcS
+
+reconfigure () {
+ pkg=$1
+ path=$2
+ isdependent=$3
+ test -e "$path/info/$pkg.control" || return 1
+ depends="`cat $path/info/$pkg.control|grep Depends|cut -d: -f2`"
+
+ # make sure we haven't already installed this package
+ isthere=`cat /tmp/.configured.list|grep $pkg`
+ if test "$isthere" != ""; then
+ return 1
+ fi
+
+ if test "$depends" != ""; then
+ for dep in $depends; do
+ (echo $log|grep $dep >/dev/null 2>&1) || ( reconfigure $dep $path "$max" "$pkg" && log="$log $dep"; )
+ done
+ fi
+
+ echo -ne " ${pkg}"
+
+ test -e "$path/info/$pkg.prerm" && $path/info/$pkg.prerm unconfigure >/dev/null 2>&1
+ test -e "$path/info/$pkg.postinst" && $path/info/$pkg.postinst configure >/dev/null 2>&1
+
+ log="$log $pkg"
+
+ # append the installed package name to the list
+ echo -ne "$pkg\n" >> /tmp/.configured.list
+
+ echo
+ return 0
+}
+
+if test ! -e /etc/.configured; then
+ echo "Reconfiguring all packages installed to root:"
+
+ # create unique packages list file
+ rm -f /tmp/.configured.list
+ touch /tmp/.configured.list
+
+ log=""
+
+ for control in /usr/lib/ipkg/info/*.control; do
+ package=`echo $control|sed -e 's,.*/,,g; s,\.control,,g;'`
+ (echo $log|grep $package >/dev/null 2>&1) || reconfigure $package /usr/lib/ipkg
+ done
+
+ # cleanup unique packages list file
+ rm -f /tmp/.configured.list
+fi
+
+test -f /usr/lib/ipkg/info/task-ramses || ipkg install task-ramses
Property changes on: trunk/oe/packages/initscripts/initscripts-1.0/openmn/packages
___________________________________________________________________
Name: svn:executable
+
Added: trunk/oe/packages/initscripts/initscripts-1.0/openmn/umountfs
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/openmn/umountfs 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/openmn/umountfs 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,17 @@
+#! /bin/sh
+#
+# umountfs Turn off swap and unmount all local filesystems.
+#
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+
+echo "Deactivating swap..."
+swapoff -a
+
+# We leave /proc mounted.
+echo "Unmounting local filesystems..."
+umount -f -a -r
+
+mount -o remount,ro /
+
+: exit 0
Property changes on: trunk/oe/packages/initscripts/initscripts-1.0/openmn/umountfs
___________________________________________________________________
Name: svn:executable
+
Added: trunk/oe/packages/initscripts/initscripts-1.0/openzaurus/checkversion
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/openzaurus/checkversion 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/openzaurus/checkversion 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+found=`cat /proc/version | cut -d ' ' -f3`
+echo "$found" | grep -q "snapshot" && exit 0
+
+if [ "VERSION" != "$found" ] ; then
+ echo -e >/dev/tty1
+ echo -e "\033[31;1m ******************************************* \033[0m" >/dev/tty1
+ echo -e "\033[31;1m * \033[0mW A R N I N G ! \033[31;1m* \033[0m" >/dev/tty1
+ echo -e "\033[31;1m ******************************************* \033[0m" >/dev/tty1
+ echo >/dev/tty1
+ echo -e "\033[31;1m ******************************************* \033[0m" >/dev/tty1
+ echo -e "\033[31;1m * \033[0mYou are running the wrong kernel! \033[31;1m* \033[0m" >/dev/tty1
+ echo -e "\033[31;1m ******************************************* \033[0m" >/dev/tty1
+ echo >/dev/tty1
+ echo -e "You are running '" $found "'" >/dev/tty1
+ echo -e "I expect kernel '" VERSION "'" >/dev/tty1
+ echo >/dev/tty1
+ echo -e "\033[31;1m ******************************************* \033[0m" >/dev/tty1
+ echo -e "\033[31;1m * \033[0mRunning this combination is unsupported \033[31;1m* \033[0m" >/dev/tty1
+ echo -e "\033[31;1m ******************************************* \033[0m" >/dev/tty1
+ echo >/dev/tty1
+ echo "I will sleep for 1 minute now. Use this chance to " >/dev/tty1
+ echo "reboot the device and flash the proper kernel now! " >/dev/tty1
+ echo -e >/dev/tty1
+ echo -e "\033[31;1m ******************************************* \033[0m" >/dev/tty1
+ echo -e "\033[31;1m * \033[0mW A R N I N G ! \033[31;1m* \033[0m" >/dev/tty1
+ echo -e "\033[31;1m ******************************************* \033[0m" >/dev/tty1
+ echo >/dev/tty1
+ sleep 60
+fi
Property changes on: trunk/oe/packages/initscripts/initscripts-1.0/openzaurus/checkversion
___________________________________________________________________
Name: svn:executable
+
Added: trunk/oe/packages/initscripts/initscripts-1.0/poodle/devices
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/poodle/devices 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/poodle/devices 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,67 @@
+#!/bin/sh
+#
+# Devfs handling script. Since we arent running devfsd due to various reasons
+# which I will not lay out here, we need to create some links for compatibility.
+
+. /etc/default/rcS
+
+# exit without doing anything if udev is active
+if test -e /dev/.udevdb; then
+ exit 0
+fi
+
+if test -e /dev/.devfsd
+then
+ if test "$VERBOSE" != "no"; then echo -n "Setting up device links for devfs: "; fi
+ ln -s /dev/touchscreen/0 /dev/ts
+ ln -s /dev/touchscreen/0raw /dev/tsraw
+ ln -s /dev/vc/0 /dev/tty0
+ ln -s /dev/vc/1 /dev/tty1
+ ln -s /dev/vc/2 /dev/tty2
+ ln -s /dev/vc/3 /dev/tty3
+ ln -s /dev/vc/4 /dev/tty4
+ ln -s /dev/vc/5 /dev/tty5
+ ln -s /dev/fb/0 /dev/fb0
+# ln -s /dev/tts/0 /dev/ttySA0
+# ln -s /dev/tts/1 /dev/ttySA1
+# ln -s /dev/tts/2 /dev/ttySA2
+
+ ln -s /dev/sound/dsp /dev/dsp
+ ln -s /dev/sound/mixer /dev/mixer
+
+ ln -s /dev/v4l/video0 /dev/video0
+ ln -s /dev/v4l/video0 /dev/video
+ ln -s /dev/misc/rtc /dev/rtc
+
+ ## need this so that ppp will autoload the ppp modules
+ mknod /dev/ppp c 108 0
+ if test "$VERBOSE" != "no"; then echo "done"; fi
+else
+ if test "$VERBOSE" != "no"; then echo -n "Mounting /dev ramdisk: "; fi
+ mount -t ramfs ramfs /dev || mount -t tmpfs ramfs /dev
+ if test $? -ne 0; then
+ if test "$VERBOSE" != "no"; then echo "failed"; fi
+ else
+ if test "$VERBOSE" != "no"; then echo "done"; fi
+ fi
+ if test "$VERBOSE" != "no"; then echo -n "Populating /dev: "; fi
+ cd /
+ mkdir -p dev/msys
+ mkdir -p dev/pts
+ mkdir -p dev/vc
+ for i in 0 1 2 3 4 5 6 7 8 9; do
+ ln -s /dev/tty$i /dev/vc/$i
+ done
+ ln -sf /dev/sharp_ts /dev/ts
+ ln -sf /dev/sharp_fl /dev/fl
+ ln -sf /proc/self/fd /dev/fd
+ ln -sf /proc/kcore /dev/core
+ /sbin/makedevs -r / -D /etc/device_table
+ if test $? -ne 0; then
+ if test "$VERBOSE" != "no"; then echo "failed"; fi
+ else
+ if test "$VERBOSE" != "no"; then echo "done"; fi
+ fi
+fi
+
+exit 0
Property changes on: trunk/oe/packages/initscripts/initscripts-1.0/poodle/devices
___________________________________________________________________
Name: svn:executable
+
Added: trunk/oe/packages/initscripts/initscripts-1.0/populate-volatile.sh
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/populate-volatile.sh 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/populate-volatile.sh 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,169 @@
+#!/bin/sh
+
+. /etc/default/rcS
+
+CFGDIR="/etc/default/volatiles"
+TMPROOT="/var/tmp"
+COREDEF="00_core"
+
+[ "${VERBOSE}" != "no" ] && echo "Populating volatile Filesystems."
+
+create_file() {
+ EXEC="
+ touch \"$1\"
+ chown ${TUSER}.${TGROUP} $1 || echo \"Failed to set owner -${TUSER}- for -$1-.\" >/dev/tty0 2>&1
+ chmod ${TMODE} $1 || echo \"Failed to set mode -${TMODE}- for -$1-.\" >/dev/tty0 2>&1 "
+
+ test "$VOLATILE_ENABLE_CACHE" = yes && echo "$EXEC" >> /etc/volatile.cache
+
+ eval $EXEC &
+}
+
+mk_dir() {
+ EXEC="
+ mkdir -p \"$1\"
+ chown ${TUSER}.${TGROUP} $1 || echo \"Failed to set owner -${TUSER}- for -$1-.\" >/dev/tty0 2>&1
+ chmod ${TMODE} $1 || echo \"Failed to set mode -${TMODE}- for -$1-.\" >/dev/tty0 2>&1 "
+
+ test "$VOLATILE_ENABLE_CACHE" = yes && echo "$EXEC" >> /etc/volatile.cache
+
+ eval $EXEC &
+}
+
+link_file() {
+ EXEC="test -e \"$2\" -o -L $2 || ln -s \"$1\" \"$2\" >/dev/tty0 2>&1"
+
+ test "$VOLATILE_ENABLE_CACHE" = yes && echo " $EXEC" >> /etc/volatile.cache
+
+ eval $EXEC &
+}
+
+check_requirements() {
+
+ cleanup() {
+ rm "${TMP_INTERMED}"
+ rm "${TMP_DEFINED}"
+ rm "${TMP_COMBINED}"
+ }
+
+ CFGFILE="$1"
+
+ [ `basename "${CFGFILE}"` = "${COREDEF}" ] && return 0
+
+ TMP_INTERMED="${TMPROOT}/tmp.$$"
+ TMP_DEFINED="${TMPROOT}/tmpdefined.$$"
+ TMP_COMBINED="${TMPROOT}/tmpcombined.$$"
+
+
+ cat /etc/passwd | sed 's@\(^:\)*:.*@\1@' | sort | uniq > "${TMP_DEFINED}"
+ cat ${CFGFILE} | grep -v "^#" | cut -d " " -f 2 > "${TMP_INTERMED}"
+ cat "${TMP_DEFINED}" "${TMP_INTERMED}" | sort | uniq > "${TMP_COMBINED}"
+
+ NR_DEFINED_USERS="`cat "${TMP_DEFINED}" | wc -l`"
+ NR_COMBINED_USERS="`cat "${TMP_COMBINED}" | wc -l`"
+
+ [ "${NR_DEFINED_USERS}" -ne "${NR_COMBINED_USERS}" ] && {
+ echo "Undefined users:"
+ diff "${TMP_DEFINED}" "${TMP_COMBINED}" | grep "^>"
+ cleanup
+ return 1
+ }
+
+
+ cat /etc/group | sed 's@\(^:\)*:.*@\1@' | sort | uniq > "${TMP_DEFINED}"
+ cat ${CFGFILE} | grep -v "^#" | cut -d " " -f 3 > "${TMP_INTERMED}"
+ cat "${TMP_DEFINED}" "${TMP_INTERMED}" | sort | uniq > "${TMP_COMBINED}"
+
+ NR_DEFINED_GROUPS="`cat "${TMP_DEFINED}" | wc -l`"
+ NR_COMBINED_GROUPS="`cat "${TMP_COMBINED}" | wc -l`"
+
+ [ "${NR_DEFINED_GROUPS}" -ne "${NR_COMBINED_GROUPS}" ] && {
+ echo "Undefined groups:"
+ diff "${TMP_DEFINED}" "${TMP_COMBINED}" | grep "^>"
+ cleanup
+ return 1
+ }
+
+ # Add checks for required directories here
+
+ cleanup
+ return 0
+ }
+
+apply_cfgfile() {
+
+ CFGFILE="$1"
+
+ check_requirements "${CFGFILE}" || {
+ echo "Skipping ${CFGFILE}"
+ return 1
+ }
+
+ cat ${CFGFILE} | grep -v "^#" | \
+ while read LINE; do
+
+ # This is a hell of a lot faster than using cut or awk 5 times
+ eval `echo "$LINE" | sed -n "s/\(.*\)\ \(.*\) \(.*\)\ \(.*\)\ \(.*\)\ \(.*\)/TTYPE=\1 ; TUSER=\2; TGROUP=\3; TMODE=\4; TNAME=\5 TLTARGET=\6/p"`
+
+ [ "${VERBOSE}" != "no" ] && echo "Checking for -${TNAME}-."
+
+
+ [ "${TTYPE}" = "l" ] && {
+ [ -e "${TNAME}" ] && {
+ echo "Cannot create link over existing -${TNAME}-." >&2
+ } || {
+ TSOURCE="$TLTARGET"
+ [ -L "${TNAME}" ] || {
+ [ "${VERBOSE}" != "no" ] && echo "Creating link -${TNAME}- pointing to -${TSOURCE}-."
+ link_file "${TSOURCE}" "${TNAME}" &
+ }
+ }
+ continue
+ }
+
+ [ -L "${TNAME}" ] && {
+ [ "${VERBOSE}" != "no" ] && echo "Found link."
+ NEWNAME=`ls -l "${TNAME}" | sed -e 's/^.*-> \(.*\)$/\1/'`
+ echo ${NEWNAME} | grep -v "^/" >/dev/null && {
+ TNAME="`echo ${TNAME} | sed -e 's@\(.*\)/.*@\1@'`/${NEWNAME}"
+ [ "${VERBOSE}" != "no" ] && echo "Converted relative linktarget to absolute path -${TNAME}-."
+ } || {
+ TNAME="${NEWNAME}"
+ [ "${VERBOSE}" != "no" ] && echo "Using absolute link target -${TNAME}-."
+ }
+ }
+
+ [ -e "${TNAME}" ] && {
+ [ "${VERBOSE}" != "no" ] && echo "Target already exists. Skipping."
+ continue
+ }
+
+ case "${TTYPE}" in
+ "f") [ "${VERBOSE}" != "no" ] && echo "Creating file -${TNAME}-."
+ create_file "${TNAME}" &
+ ;;
+ "d") [ "${VERBOSE}" != "no" ] && echo "Creating directory -${TNAME}-."
+ mk_dir "${TNAME}" &
+ # Add check to see if there's an entry in fstab to mount.
+ ;;
+ *) [ "${VERBOSE}" != "no" ] && echo "Invalid type -${TTYPE}-."
+ continue
+ ;;
+ esac
+
+
+ done
+
+ return 0
+
+ }
+
+if test -e /etc/volatile.cache -a "$VOLATILE_ENABLE_CACHE" = "yes"
+then
+ sh /etc/volatile.cache
+else
+ rm -f /etc/volatile.cache
+ for file in `ls -1 "${CFGDIR}" | sort`; do
+ apply_cfgfile "${CFGDIR}/${file}"
+ done
+fi
Property changes on: trunk/oe/packages/initscripts/initscripts-1.0/populate-volatile.sh
___________________________________________________________________
Name: svn:executable
+
Added: trunk/oe/packages/initscripts/initscripts-1.0/ramdisk
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/ramdisk 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/ramdisk 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,46 @@
+#!/bin/sh
+
+. /etc/default/rcS
+
+FSTYPE=ext2
+
+if test ! -e /proc/mtd
+then
+ test "$VERBOSE" != "no" && echo >&2 "/proc not mounted, or mtd support not enabled in kernel."
+ exit
+fi
+
+RAM_MTD_NO=`cat /proc/mtd | grep mtdram | tail -n 1 | cut -d: -f1 | cut -dd -f2`
+if test -z "$RAM_MTD_NO"; then exit 0; fi
+
+if test -e /dev/mtdblock/0
+then
+ RAM_MTD=/dev/mtd/$RAM_MTD_NO
+ RAM_MTDBLK=/dev/mtdblock/$RAM_MTD_NO
+else
+ RAM_MTD=/dev/mtd$RAM_MTD_NO
+ RAM_MTDBLK=/dev/mtdblock$RAM_MTD_NO
+fi
+
+RAM_MNTPT=/mnt/ram
+RAM_MTD_SIZE_HEX=`cat /proc/mtd | grep mtdram | tail -n 1 | cut -d" " -f 2`
+RAM_MTD_SIZE=`dc 0x$RAM_MTD_SIZE_HEX 1024 / p`
+test -e /etc/ramdisk.conf && OLD_MTD_SIZE=`cat /etc/ramdisk.conf`
+echo $RAM_MTD_SIZE > /etc/ramdisk.conf
+
+if test ! -d "$RAM_MNTPT"; then echo >&2 "Mountpoint $RAM_MNTPT does not exist!"; exit 0; fi
+
+if (test ! -e /etc/.configured) || test "$OLD_MTD_SIZE" != "$RAM_MTD_SIZE"; then
+ test "$VERBOSE" != "no" && echo -n "Wiping ramdisk: "
+ dd if=/dev/zero bs=1024 count=$RAM_MTD_SIZE of=$RAM_MTD 2>/dev/null >&2 || exit 1
+ test "$VERBOSE" != "no" && echo "$RAM_MTD";
+ test "$VERBOSE" != "no" && echo -n "Creating filesystem on ramdisk: "
+ mkfs.$FSTYPE $RAM_MTDBLK 2>/dev/null >&2 || exit 1
+ test "$VERBOSE" != "no" && echo "$RAM_MTDBLK";
+fi
+
+test "$VERBOSE" != "no" && echo -n "Mounting ramdisk: "
+mount -t $FSTYPE $RAM_MTDBLK $RAM_MNTPT 2>/dev/null >&2 || exit 1
+test "$VERBOSE" != "no" && echo "$RAM_MTDBLK";
+
+exit 0
Property changes on: trunk/oe/packages/initscripts/initscripts-1.0/ramdisk
___________________________________________________________________
Name: svn:executable
+
Added: trunk/oe/packages/initscripts/initscripts-1.0/reboot
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/reboot 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/reboot 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,11 @@
+#! /bin/sh
+#
+# reboot Execute the reboot command.
+#
+# Version: @(#)reboot 2.75 22-Jun-1998 miquels at cistron.nl
+#
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+
+echo -n "Rebooting... "
+reboot -d -f -i
Property changes on: trunk/oe/packages/initscripts/initscripts-1.0/reboot
___________________________________________________________________
Name: svn:executable
+
Added: trunk/oe/packages/initscripts/initscripts-1.0/rmnologin
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/rmnologin 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/rmnologin 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,14 @@
+#! /bin/sh
+#
+# rmnologin This script removes the /etc/nologin file as the last
+# step in the boot process.
+#
+# Version: @(#)rmnologin 1.00 22-Jun-1998 miquels at cistron.nl
+#
+
+if test -f /etc/nologin.boot
+then
+ rm -f /etc/nologin /etc/nologin.boot
+fi
+
+: exit 0
Property changes on: trunk/oe/packages/initscripts/initscripts-1.0/rmnologin
___________________________________________________________________
Name: svn:executable
+
Added: trunk/oe/packages/initscripts/initscripts-1.0/save-rtc.sh
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/save-rtc.sh 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/save-rtc.sh 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,16 @@
+#! /bin/sh
+#
+# Copyright Matthias Hentges <devel at hentges.net> (c) 2006
+# License: GPL (see http://www.gnu.org/licenses/gpl.txt for a copy of the license)
+#
+# Filename: save-rtc.sh
+# Date: 03-Jul-06
+
+
+# Update the timestamp, if there is already one
+if test -e /etc/timestamp
+then
+ echo "Will restore RCT from /etc/timestamp on next boot"
+ echo "Delete that file to disable this feature."
+ date +%2m%2d%2H%2M%Y > /etc/timestamp
+fi
Added: trunk/oe/packages/initscripts/initscripts-1.0/sendsigs
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/sendsigs 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/sendsigs 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,17 @@
+#! /bin/sh
+#
+# sendsigs Kill all remaining processes.
+#
+# Version: @(#)sendsigs 2.75 22-Jun-1998 miquels at cistron.nl
+#
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+
+# Kill all processes.
+echo "Sending all processes the TERM signal..."
+killall5 -15
+sleep 5
+echo "Sending all processes the KILL signal..."
+killall5 -9
+
+: exit 0
Property changes on: trunk/oe/packages/initscripts/initscripts-1.0/sendsigs
___________________________________________________________________
Name: svn:executable
+
Added: trunk/oe/packages/initscripts/initscripts-1.0/simpad/devices
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/simpad/devices 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/simpad/devices 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,37 @@
+#!/bin/sh
+#
+# Devfs handling script. Since we arent running devfsd due to various reasons
+# which I will not lay out here, we need to create some links for compatibility.
+
+# exit without doing anything if udev is active
+if test -e /dev/.udevdb; then
+ exit 0
+fi
+
+ test -n "$VERBOSE" && echo -n "Setting up device links for devfs: "
+ (
+ ln -s /dev/vc/0 /dev/tty0
+ ln -s /dev/vc/1 /dev/tty1
+ ln -s /dev/vc/2 /dev/tty2
+ ln -s /dev/vc/3 /dev/tty3
+ ln -s /dev/vc/4 /dev/tty4
+ ln -s /dev/vc/5 /dev/tty5
+ ln -s /dev/fb/0 /dev/fb0
+ # ln -s /dev/tts/0 /dev/ttySA0
+ # ln -s /dev/tts/1 /dev/ttySA1
+ # ln -s /dev/tts/2 /dev/ttySA2
+
+ ln -s /dev/sound/dsp /dev/dsp
+ ln -s /dev/sound/mixer /dev/mixer
+
+ ln -s /dev/v4l/video0 /dev/video0
+ ln -s /dev/v4l/video0 /dev/video
+ ln -s /dev/misc/rtc /dev/rtc
+ ln -s /dev/misc/apm_bios /dev/apm_bios
+
+ ## need this so that ppp will autoload the ppp modules
+ mknod /dev/ppp c 108 0
+ ) > /dev/null 2>&1
+
+
+ test -n "$VERBOSE" && echo "done"
Added: trunk/oe/packages/initscripts/initscripts-1.0/single
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/single 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/single 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,21 @@
+#! /bin/sh
+#
+# single executed by init(8) upon entering runlevel 1 (single).
+#
+# Version: @(#)single 1.20 26-Geb-2001 miquels at cistron.nl
+#
+
+PATH="/sbin:/bin:/usr/sbin:/usr/bin"
+
+# Kill all processes.
+echo "Sending all processes the TERM signal..."
+killall5 -15
+sleep 5
+echo "Sending all processes the KILL signal..."
+killall5 -9
+
+# We start update here, since we just killed it.
+test -x /sbin/update && update
+
+echo "Entering single-user mode..."
+exec init -t1 S
Property changes on: trunk/oe/packages/initscripts/initscripts-1.0/single
___________________________________________________________________
Name: svn:executable
+
Added: trunk/oe/packages/initscripts/initscripts-1.0/slugos/alignment.sh
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/slugos/alignment.sh 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/slugos/alignment.sh 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,20 @@
+#!/bin/sh
+#
+# How to handle alignment faults on the ARM
+#
+# 0 - ignore, the value will probably be rotated
+# 1 - warn, a log message will be output
+# 2 - fixup, the kernel will do an expensive aligned read
+# 3 - fixup+warn
+# 4 - signal, the process will get an illegal instruction fault
+# 5 - signal+warn
+# 6 - invalid (has no effect)
+# 7 - invalid (has no effect)
+#
+# Set ALIGN in /etc/default/rcS to override (do not edit this
+# file!) Set ALIGN to empty to avoid changing the kernel
+# default (currently '0').
+ALIGN=1
+. /etc/default/rcS
+test -e /proc/cpu/alignment -a -n "$ALIGN" -a "$ALIGN" -ge 0 -a "$ALIGN" -lt 6 &&
+ echo "$ALIGN" >/proc/cpu/alignment
Added: trunk/oe/packages/initscripts/initscripts-1.0/slugos/banner
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/slugos/banner 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/slugos/banner 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,4 @@
+#!/bin/sh
+#NOTE: this script may execute with absolutely nothing
+# in /dev
+echo "SlugOS booting..."
Added: trunk/oe/packages/initscripts/initscripts-1.0/slugos/checkroot.sh
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/slugos/checkroot.sh 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/slugos/checkroot.sh 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,177 @@
+#
+# checkroot.sh Check to root filesystem.
+#
+# Version: @(#)checkroot.sh 2.84 25-Jan-2002 miquels at cistron.nl
+#
+
+. /etc/default/functions
+. /etc/default/rcS
+
+#
+# Set SULOGIN in /etc/default/rcS to yes if you want a sulogin to be spawned
+# from this script *before anything else* with a timeout, like SCO does.
+#
+test "$SULOGIN" = yes && sulogin -t 30 $CONSOLE
+
+#
+# Ensure that bdflush (update) is running before any major I/O is
+# performed (the following fsck is a good example of such activity :).
+#
+test -x /sbin/update && update
+
+#
+# Read /etc/fstab.
+#
+exec 9>&0 </etc/fstab
+rootmode=rw
+rootopts=rw
+swap_on_md=no
+devfs=
+while read fs mnt type opts dump pass junk
+do
+ case "$fs" in
+ ""|\#*)
+ continue;
+ ;;
+ /dev/md*)
+ # Swap on md device.
+ test "$type" = swap && swap_on_md=yes
+ ;;
+ /dev/*)
+ ;;
+ *)
+ # Might be a swapfile.
+ test "$type" = swap && swap_on_md=yes
+ ;;
+ esac
+ test "$type" = devfs && devfs="$fs"
+ test "$mnt" != / && continue
+ rootopts="$opts"
+ test "$pass" = 0 -o "$pass" = "" && ROOTFSCK=no
+ case "$opts" in
+ ro|ro,*|*,ro|*,ro,*)
+ rootmode=ro
+ ;;
+ esac
+done
+exec 0>&9 9>&-
+
+#
+# Activate the swap device(s) in /etc/fstab. This needs to be done
+# before fsck, since fsck can be quite memory-hungry.
+#
+# We don't test whether we're running a 2.[0123].x kernel and md
+# since that's plain too old.
+
+if test "$DOSWAP" != no
+then
+ swaps="$(blkid -t TYPE=swap -o device 2>/dev/null)"
+ if test -n "$swaps"
+ then
+ swapon $swaps 2>/dev/null
+ else
+ swapon -a 2> /dev/null
+ fi
+fi
+
+#
+# Check the root filesystem.
+#
+if test -f /fastboot || test "$ROOTFSCK" != yes
+then
+ test "$ROOTFSCK" = yes && echo "Fast boot, no filesystem check"
+elif test ! -x /sbin/fsck -a ! -x /usr/sbin/fsck
+then
+ echo "/etc/init.d/checkroot.sh: no fsck"
+else
+ leds disk-1 slow
+ #
+ # Ensure that root is quiescent and read-only before fsck'ing.
+ #
+ mount -n -o remount,ro /
+ if test $? = 0
+ then
+ if test -f /forcefsck
+ then
+ force="-f"
+ else
+ force=""
+ fi
+ if test "$FSCKFIX" = yes
+ then
+ fix="-y"
+ else
+ fix="-a"
+ fi
+ spinner="-C"
+ case "$TERM" in
+ dumb|network|unknown|"") spinner="" ;;
+ esac
+ test "$VERBOSE" != no && echo "Checking root filesystem..."
+ fsck $spinner $force $fix /
+ #
+ # If there was a failure, drop into single-user mode.
+ #
+ # NOTE: "failure" is defined as exiting with a return code of
+ # 2 or larger. A return code of 1 indicates that filesystem
+ # errors were corrected but that the boot may proceed.
+ #
+ if test "$?" -gt 1
+ then
+ # Surprise! Re-directing from a HERE document (as in
+ # "cat << EOF") won't work, because the root is read-only.
+ echo
+ echo "fsck failed. Please repair manually and reboot. Please note"
+ echo "that the root filesystem is currently mounted read-only. To"
+ echo "remount it read-write:"
+ echo
+ echo " # mount -n -o remount,rw /"
+ echo
+ echo "CONTROL-D will exit from this shell and REBOOT the system."
+ echo
+ leds system panic
+ leds beep -r 5
+ # Start a single user shell on the console
+ if single_user_ok
+ then
+ sulogin -t 600 $CONSOLE
+ # if this exits with SIGALRM (which happens to be 142) the
+ # timeout happened, do not, then, reboot!
+ if test $? -ne 142
+ then
+ reboot -f
+ else
+ echo "/etc/init.d/checkroot.sh: sulogin timeout, continuing boot"
+ fi
+ else
+ echo "/etc/init.d/checkroot.sh: fsck failed, continuing boot"
+ fi
+ fi
+ else
+ echo "*** ERROR! Cannot fsck root fs because it is not mounted read-only!"
+ echo
+ fi
+ leds disk-1 off
+fi
+
+#
+# If the root filesystem was not marked as read-only in /etc/fstab,
+# remount the rootfs rw but do not try to change mtab because it
+# is on a ro fs until the remount succeeded. Then clean up old mtabs
+# and finally write the new mtab.
+#
+mount -n -o remount,$rootopts /
+if test "$rootmode" = rw
+then
+ if test ! -L /etc/mtab
+ then
+ rm -f /etc/mtab~ /etc/nologin
+ : > /etc/mtab
+ fi
+ mount -f -o remount /
+ mount -f /proc
+ mount -f /sys
+ test "$devfs" && grep -q '^devfs /dev' /proc/mounts && mount -f "$devfs"
+fi
+
+: exit 0
Added: trunk/oe/packages/initscripts/initscripts-1.0/slugos/devices.patch
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/slugos/devices.patch 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/slugos/devices.patch 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,52 @@
+#
+# Patch to allow /dev to reside permanently in the file
+# system.
+#
+--- old/devices 2005-05-28 21:51:39.012078699 -0700
++++ new/devices 2005-06-12 00:16:29.222686303 -0700
+@@ -6,7 +6,7 @@
+ . /etc/default/rcS
+
+ # exit without doing anything if udev is active
+-if test -e /dev/.udev -o -e /dev/.udevdb; then
++if test -e /dev/.udev -o -e /dev/.udevdb -o -e /dev/.permanent; then
+ exit 0
+ fi
+
+@@ -37,12 +37,20 @@
+ mknod /dev/ppp c 108 0
+ if test "$VERBOSE" != "no"; then echo "done"; fi
+ else
+- if test "$VERBOSE" != "no"; then echo -n "Mounting /dev ramdisk: "; fi
+- mount -t ramfs ramfs /dev || mount -t tmpfs ramfs /dev
+- if test $? -ne 0; then
+- if test "$VERBOSE" != "no"; then echo "failed"; fi
++ if test -e /dev/.noram
++ then
++ # There should be no files, any files will damage the
++ # makedevs script below.
++ rm $(find /dev -type f -print)
++ :>/dev/.noram
+ else
+- if test "$VERBOSE" != "no"; then echo "done"; fi
++ if test "$VERBOSE" != "no"; then echo -n "Mounting /dev ramdisk: "; fi
++ mount -t ramfs ramfs /dev || mount -t tmpfs ramfs /dev
++ if test $? -ne 0; then
++ if test "$VERBOSE" != "no"; then echo "failed"; fi
++ else
++ if test "$VERBOSE" != "no"; then echo "done"; fi
++ fi
+ fi
+ if test "$VERBOSE" != "no"; then echo -n "Populating /dev: "; fi
+ cd /
+@@ -60,6 +68,10 @@
+ if test "$VERBOSE" != "no"; then echo "failed"; fi
+ else
+ if test "$VERBOSE" != "no"; then echo "done"; fi
++ if test -e /dev/.noram
++ then
++ :>/dev/.permanent
++ fi
+ fi
+ fi
+
Added: trunk/oe/packages/initscripts/initscripts-1.0/slugos/domainname.sh
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/slugos/domainname.sh 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/slugos/domainname.sh 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,5 @@
+#
+# domainname.sh Set the domainname.
+#
+test -r /etc/defaultdomain &&
+ cat /etc/defaultdomain >/proc/sys/kernel/domainname
Added: trunk/oe/packages/initscripts/initscripts-1.0/slugos/mountall.sh
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/slugos/mountall.sh 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/slugos/mountall.sh 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,27 @@
+#
+# mountall.sh Mount all filesystems.
+#
+# Version: @(#)mountall.sh 2.83-2 01-Nov-2001 miquels at cistron.nl
+#
+. /etc/default/rcS
+
+#
+# Mount local filesystems in /etc/fstab. For some reason, people
+# might want to mount "proc" several times, and mount -v complains
+# about this. So we mount "proc" filesystems without -v.
+#
+test "$VERBOSE" != no && echo "Mounting local filesystems..."
+mount -at nonfs,nosmbfs,noncpfs 2>/dev/null
+
+#
+# We might have mounted something over /dev, see if /dev/initctl is there.
+#
+if test ! -p /dev/initctl
+then
+ rm -f /dev/initctl
+ mknod -m 600 /dev/initctl p
+fi
+kill -USR1 1
+
+: exit 0
+
Added: trunk/oe/packages/initscripts/initscripts-1.0/slugos/rootopts.patch
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/slugos/rootopts.patch 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/slugos/rootopts.patch 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,15 @@
+#
+# Ensure that the root file system is remounted with the correct
+# options from fstab
+#
+--- old/checkroot.sh 2005-05-28 19:30:55.488975598 -0700
++++ new/checkroot.sh 2005-05-28 19:31:32.334390450 -0700
+@@ -149,7 +149,7 @@
+ # is on a ro fs until the remount succeeded. Then clean up old mtabs
+ # and finally write the new mtab.
+ #
+-mount -n -o remount,$rootmode /
++mount -n -o remount,$rootopts /
+ if test "$rootmode" = rw
+ then
+ if test ! -L /etc/mtab
Added: trunk/oe/packages/initscripts/initscripts-1.0/slugos/umountfs
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/slugos/umountfs 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/slugos/umountfs 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,43 @@
+#! /bin/sh
+#
+# umountfs Turn off swap and unmount all local filesystems.
+#
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+
+# Ensure /proc is mounted
+test -r /proc/mounts || mount -t proc proc /proc
+
+echo "Deactivating swap..."
+swapoff -a
+
+# We leave /proc mounted, the umount of /dev/devpts seems to fail
+# quite frequently, the busybox umount apparently gives up at the
+# first failure, so it is necessary to go file system by file
+# system. It is necessary to go backward in the /proc list, because
+# later things may have been mounted on earlier mounts.
+devfs=
+unmount() {
+ local dev mp type opts
+ if read dev mp type opts
+ then
+ # recurse - unmount later items
+ unmount
+ # skip /proc and /dev but not the sub-directories
+ case "$mp" in
+ /|/proc)return 0;;
+ /dev) devfs=1
+ return 0;;
+ esac
+ # then unmount this, if possible, otherwise make
+ # it read-only
+ umount -f -r "$mp"
+ fi
+}
+
+echo "Unmounting local filesystems..."
+unmount </proc/mounts
+
+# now /dev and read-only / (halt/reboot may need /proc!)
+test -n "$devfs" && umount -f -r /dev
+mount -o remount,ro /
Added: trunk/oe/packages/initscripts/initscripts-1.0/slugos/umountnfs.sh
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/slugos/umountnfs.sh 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/slugos/umountnfs.sh 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,40 @@
+#! /bin/sh
+#
+# umountnfs.sh Unmount all network filesystems.
+#
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+
+# Write a reboot record to /var/log/wtmp before unmounting
+halt -w
+
+# Ensure /proc is mounted
+test -r /proc/mounts || mount -t proc proc /proc
+
+echo "Unmounting remote filesystems..."
+
+#
+# Read the list of mounted file systems and -f umount the
+# known network file systems. -f says umount it even if
+# the server is unreachable. Do not attempt to umount
+# the root file system. Unmount in reverse order from
+# that given by /proc/mounts (otherwise it may not work).
+#
+unmount() {
+ local dev mp type opts
+ if read dev mp type opts
+ then
+ # recurse - unmount later items
+ unmount
+ # skip /, /proc and /dev
+ case "$mp" in
+ /|/proc)return 0;;
+ /dev) return 0;;
+ esac
+ # then unmount this, if nfs
+ case "$type" in
+ nfs|smbfs|ncpfs) umount -f "$mp";;
+ esac
+ fi
+}
+
+unmount </proc/mounts
Added: trunk/oe/packages/initscripts/initscripts-1.0/spitz/devices
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/spitz/devices 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/spitz/devices 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,68 @@
+#!/bin/sh
+#
+# Devfs handling script. Since we arent running devfsd due to various reasons
+# which I will not lay out here, we need to create some links for compatibility.
+
+. /etc/default/rcS
+
+# exit without doing anything if udev is active
+if test -e /dev/.udevdb; then
+ exit 0
+fi
+
+if test -e /dev/.devfsd
+then
+ if test "$VERBOSE" != "no"; then echo -n "Setting up device links for devfs: "; fi
+ ln -s /dev/touchscreen/0 /dev/ts
+ ln -s /dev/touchscreen/0raw /dev/tsraw
+ ln -s /dev/vc/0 /dev/tty0
+ ln -s /dev/vc/1 /dev/tty1
+ ln -s /dev/vc/2 /dev/tty2
+ ln -s /dev/vc/3 /dev/tty3
+ ln -s /dev/vc/4 /dev/tty4
+ ln -s /dev/vc/5 /dev/tty5
+ ln -s /dev/fb/0 /dev/fb0
+# ln -s /dev/tts/0 /dev/ttySA0
+# ln -s /dev/tts/1 /dev/ttySA1
+# ln -s /dev/tts/2 /dev/ttySA2
+
+ ln -s /dev/sound/dsp /dev/dsp
+ ln -s /dev/sound/mixer /dev/mixer
+
+ ln -s /dev/v4l/video0 /dev/video0
+ ln -s /dev/v4l/video0 /dev/video
+ ln -s /dev/misc/rtc /dev/rtc
+
+ ## need this so that ppp will autoload the ppp modules
+ mknod /dev/ppp c 108 0
+ if test "$VERBOSE" != "no"; then echo "done"; fi
+else
+ if test "$VERBOSE" != "no"; then echo -n "Mounting /dev ramdisk: "; fi
+ mount -t ramfs ramfs /dev || mount -t tmpfs ramfs /dev
+ if test $? -ne 0; then
+ if test "$VERBOSE" != "no"; then echo "failed"; fi
+ else
+ if test "$VERBOSE" != "no"; then echo "done"; fi
+ fi
+ if test "$VERBOSE" != "no"; then echo -n "Populating /dev: "; fi
+ cd /
+ mkdir -p dev/msys
+ mkdir -p dev/pts
+ mkdir -p dev/input
+ mkdir -p dev/vc
+ for i in 0 1 2 3 4 5 6 7 8 9; do
+ ln -s /dev/tty$i /dev/vc/$i
+ done
+ ln -sf /dev/sharp_ts /dev/ts
+ ln -sf /dev/sharp_fl /dev/fl
+ ln -sf /proc/self/fd /dev/fd
+ ln -sf /proc/kcore /dev/core
+ /sbin/makedevs -r / -D /etc/device_table
+ if test $? -ne 0; then
+ if test "$VERBOSE" != "no"; then echo "failed"; fi
+ else
+ if test "$VERBOSE" != "no"; then echo "done"; fi
+ fi
+fi
+
+exit 0
Property changes on: trunk/oe/packages/initscripts/initscripts-1.0/spitz/devices
___________________________________________________________________
Name: svn:executable
+
Added: trunk/oe/packages/initscripts/initscripts-1.0/sysfs.sh
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/sysfs.sh 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/sysfs.sh 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+if [ -e /proc ] && ! [ -e /proc/mounts ]; then
+ mount -t proc proc /proc
+fi
+
+if [ -e /sys ] && grep -q sysfs /proc/filesystems; then
+ mount sysfs /sys -t sysfs
+fi
+
+exit 0
Added: trunk/oe/packages/initscripts/initscripts-1.0/tosa/devices
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/tosa/devices 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/tosa/devices 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,72 @@
+#!/bin/sh
+#
+# Devfs handling script. Since we arent running devfsd due to various reasons
+# which I will not lay out here, we need to create some links for compatibility.
+
+. /etc/default/rcS
+
+# exit without doing anything if udev is active
+if test -e /dev/.udevdb; then
+ exit 0
+fi
+
+if test -e /dev/.devfsd
+then
+ if test "$VERBOSE" != "no"; then echo -n "Setting up device links for devfs: "; fi
+ ln -s /dev/touchscreen/0 /dev/ts
+ ln -s /dev/touchscreen/0raw /dev/tsraw
+ ln -s /dev/vc/0 /dev/tty0
+ ln -s /dev/vc/1 /dev/tty1
+ ln -s /dev/vc/2 /dev/tty2
+ ln -s /dev/vc/3 /dev/tty3
+ ln -s /dev/vc/4 /dev/tty4
+ ln -s /dev/vc/5 /dev/tty5
+ ln -s /dev/fb/0 /dev/fb0
+# ln -s /dev/tts/0 /dev/ttySA0
+# ln -s /dev/tts/1 /dev/ttySA1
+# ln -s /dev/tts/2 /dev/ttySA2
+
+ ln -s /dev/sound/dsp /dev/dsp
+ ln -s /dev/sound/mixer /dev/mixer
+
+ ln -s /dev/v4l/video0 /dev/video0
+ ln -s /dev/v4l/video0 /dev/video
+ ln -s /dev/misc/rtc /dev/rtc
+
+ ## need this so that ppp will autoload the ppp modules
+ mknod /dev/ppp c 108 0
+ if test "$VERBOSE" != "no"; then echo "done"; fi
+else
+ if test "$VERBOSE" != "no"; then echo -n "Mounting /dev ramdisk: "; fi
+ mount -t ramfs ramfs /dev || mount -t tmpfs ramfs /dev
+ if test $? -ne 0; then
+ if test "$VERBOSE" != "no"; then echo "failed"; fi
+ else
+ if test "$VERBOSE" != "no"; then echo "done"; fi
+ fi
+ if test "$VERBOSE" != "no"; then echo -n "Populating /dev: "; fi
+ cd /
+ mkdir -p dev/msys
+ mkdir -p dev/pts
+ mkdir -p dev/input
+ mkdir -p dev/vc
+ for i in 0 1 2 3 4 5 6 7 8 9; do
+ ln -s /dev/tty$i /dev/vc/$i
+ done
+ ln -sf /dev/sharp_ts /dev/ts
+ ln -sf /dev/sharp_fl /dev/fl
+ ln -sf /proc/self/fd /dev/fd
+ ln -sf /proc/kcore /dev/core
+ /sbin/makedevs -r / -D /etc/device_table
+ if test $? -ne 0; then
+ if test "$VERBOSE" != "no"; then echo "failed"; fi
+ else
+ if test "$VERBOSE" != "no"; then echo "done"; fi
+ fi
+fi
+
+#Always turn on usb
+if [ ! -d /dev/usb ]; then mkdir /dev/usb; fi
+mknod /dev/usb/host_ohci c 10 222
+
+exit 0
Property changes on: trunk/oe/packages/initscripts/initscripts-1.0/tosa/devices
___________________________________________________________________
Name: svn:executable
+
Added: trunk/oe/packages/initscripts/initscripts-1.0/uml/devices
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/uml/devices 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/uml/devices 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,61 @@
+#!/bin/sh
+#
+# Devfs handling script. Since we arent running devfsd due to various reasons
+# which I will not lay out here, we need to create some links for compatibility.
+
+. /etc/default/rcS
+
+# exit without doing anything if udev is active
+if test -e /dev/.udevdb; then
+ exit 0
+fi
+
+if test -e /dev/.devfsd
+then
+ if test "$VERBOSE" != "no"; then echo -n "Setting up device links for devfs: "; fi
+ ln -s /dev/touchscreen/0 /dev/ts
+ ln -s /dev/touchscreen/0raw /dev/tsraw
+ ln -s /dev/vc/0 /dev/tty0
+ ln -s /dev/vc/1 /dev/tty1
+ ln -s /dev/vc/2 /dev/tty2
+ ln -s /dev/vc/3 /dev/tty3
+ ln -s /dev/vc/4 /dev/tty4
+ ln -s /dev/vc/5 /dev/tty5
+ ln -s /dev/fb/0 /dev/fb0
+# ln -s /dev/tts/0 /dev/ttySA0
+# ln -s /dev/tts/1 /dev/ttySA1
+# ln -s /dev/tts/2 /dev/ttySA2
+
+ ln -s /dev/sound/dsp /dev/dsp
+ ln -s /dev/sound/mixer /dev/mixer
+
+ ln -s /dev/v4l/video0 /dev/video0
+ ln -s /dev/v4l/video0 /dev/video
+ ln -s /dev/misc/rtc /dev/rtc
+
+ ## need this so that ppp will autoload the ppp modules
+ mknod /dev/ppp c 108 0
+ if test "$VERBOSE" != "no"; then echo "done"; fi
+else
+ if test "$VERBOSE" != "no"; then echo -n "Mounting /dev ramdisk: "; fi
+ mount -t ramfs ramfs /dev || mount -t tmpfs ramfs /dev
+ if test $? -ne 0; then
+ if test "$VERBOSE" != "no"; then echo "failed"; fi
+ else
+ if test "$VERBOSE" != "no"; then echo "done"; fi
+ fi
+ if test "$VERBOSE" != "no"; then echo -n "Populating /dev: "; fi
+ cd /
+ mkdir -p dev/msys
+ mkdir -p dev/pts
+ ln -sf /proc/self/fd /dev/fd
+ ln -sf /proc/kcore /dev/core
+ /sbin/makedevs -r / -D /etc/device_table
+ if test $? -ne 0; then
+ if test "$VERBOSE" != "no"; then echo "failed"; fi
+ else
+ if test "$VERBOSE" != "no"; then echo "done"; fi
+ fi
+fi
+
+exit 0
Property changes on: trunk/oe/packages/initscripts/initscripts-1.0/uml/devices
___________________________________________________________________
Name: svn:executable
+
Added: trunk/oe/packages/initscripts/initscripts-1.0/umountfs
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/umountfs 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/umountfs 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,18 @@
+#! /bin/sh
+#
+# umountfs Turn off swap and unmount all local filesystems.
+#
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+
+echo "Deactivating swap..."
+swapoff -a
+
+# We leave /proc mounted.
+echo "Unmounting local filesystems..."
+mount -o remount,ro /mnt/ram
+umount -f -a -r
+
+mount -o remount,ro /
+
+: exit 0
Property changes on: trunk/oe/packages/initscripts/initscripts-1.0/umountfs
___________________________________________________________________
Name: svn:executable
+
Added: trunk/oe/packages/initscripts/initscripts-1.0/umountnfs.sh
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/umountnfs.sh 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/umountnfs.sh 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,28 @@
+#! /bin/sh
+#
+# umountnfs.sh Unmount all network filesystems.
+#
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+
+# Write a reboot record to /var/log/wtmp before unmounting
+halt -w
+
+echo "Unmounting remote filesystems..."
+
+test -f /etc/fstab && (
+
+#
+# Read through fstab line by line and unount network file systems
+#
+while read device mountpt fstype options
+do
+ if test "$fstype" = nfs || test "$fstype" = smbfs || test "$fstype" = ncpfs
+ then
+ umount -f $mountpt
+ fi
+done
+) < /etc/fstab
+
+: exit 0
+
Property changes on: trunk/oe/packages/initscripts/initscripts-1.0/umountnfs.sh
___________________________________________________________________
Name: svn:executable
+
Added: trunk/oe/packages/initscripts/initscripts-1.0/urandom
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/urandom 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/urandom 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,41 @@
+#! /bin/sh
+#
+# urandom This script saves the random seed between reboots.
+# It is called from the boot, halt and reboot scripts.
+#
+# Version: @(#)urandom 1.33 22-Jun-1998 miquels at cistron.nl
+#
+
+test -c /dev/urandom || exit 0
+. /etc/default/rcS
+
+case "$1" in
+ start|"")
+ test "$VERBOSE" != no && echo "Initializing random number generator..."
+ # Load and then save 512 bytes,
+ # which is the size of the entropy pool
+ if test -f /var/lib/urandom/random-seed
+ then
+ cat /var/lib/urandom/random-seed >/dev/urandom
+ fi
+ rm -f /var/lib/urandom/random-seed
+ umask 077
+ dd if=/dev/urandom of=/var/lib/urandom/random-seed count=1 \
+ >/dev/null 2>&1 || echo "urandom start: failed."
+ umask 022
+ ;;
+ stop)
+ # Carry a random seed from shut-down to start-up;
+ # see documentation in linux/drivers/char/random.c
+ test "$VERBOSE" != no && echo "Saving random seed..."
+ umask 077
+ dd if=/dev/urandom of=/var/lib/urandom/random-seed count=1 \
+ >/dev/null 2>&1 || echo "urandom stop: failed."
+ ;;
+ *)
+ echo "Usage: urandom {start|stop}" >&2
+ exit 1
+ ;;
+esac
+
+exit 0
Property changes on: trunk/oe/packages/initscripts/initscripts-1.0/urandom
___________________________________________________________________
Name: svn:executable
+
Added: trunk/oe/packages/initscripts/initscripts-1.0/volatiles
===================================================================
--- trunk/oe/packages/initscripts/initscripts-1.0/volatiles 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-1.0/volatiles 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,38 @@
+# This configuration file lists filesystem objects that should get verified
+# during startup and be created if missing.
+#
+# Every line must either be a comment starting with #
+# or a definition of format:
+# <type> <owner> <group> <mode> <path> [<linksource>]
+# where the items are separated by whitespace !
+#
+# <type> : d|f|l : (d)irectory|(f)ile|(l)ink
+#
+# A linking example:
+# l root root 0777 /var/test /tmp/testfile
+# f root root 0644 /var/test
+#
+# Understanding links:
+# When populate-volatile is to verify/create a directory or file, it will first
+# check it's existence. If a link is found to exist in the place of the target,
+# the path of the target is replaced with the target the link points to.
+# Thus, if a link is in the place to be verified, the object will be created
+# in the place the link points to instead.
+# This explains the order of "link before object" as in the example above, where
+# a link will be created at /var/test pointing to /tmp/testfile and due to this
+# link the file defined as /var/test will actually be created as /tmp/testfile.
+d root root 0775 /var none
+d root root 0755 /var/backups none
+d root root 0755 /var/cache none
+d root root 0755 /var/lib none
+d root root 0755 /var/lib/ipkg none
+d root root 0755 /var/lib/misc none
+d root root 2775 /var/local none
+d root root 1777 /var/lock none
+d root root 0755 /var/lock/subsys none
+d root root 0755 /var/log none
+d root root 0755 /var/run none
+d root root 0755 /var/spool none
+d root root 1777 /var/tmp none
+f root root 0664 /var/run/utmp none
+f root root 0664 /var/log/wtmp none
Added: trunk/oe/packages/initscripts/initscripts-slugos_1.0.bb
===================================================================
--- trunk/oe/packages/initscripts/initscripts-slugos_1.0.bb 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts-slugos_1.0.bb 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,158 @@
+# SlugOS specific stuff for the init scripts.
+#
+# This is, in effect, an extended patch to fix various
+# problems in the initscripts on SlugOS. The problems
+# mostly come down to the order the scripts are executed
+# in.
+require initscripts_${PV}.bb
+
+MAINTAINER = "John Bowler <jbowler at acm.org>"
+RCONFLICTS = "initscripts"
+# All other standard definitions inherited from initscripts
+# Except the PR which is hacked here. The format used is
+# a suffix
+PR := "${PR}.9"
+
+FILESPATH = "${@base_set_filespath([ '${FILE_DIRNAME}/${P}', '${FILE_DIRNAME}/initscripts-${PV}', '${FILE_DIRNAME}/files', '${FILE_DIRNAME}' ], d)}"
+
+PACKAGES = "${PN}"
+
+SRC_URI += "file://alignment.sh"
+SRC_URI += "file://domainname.sh"
+SRC_URI += "file://devices.patch;patch=1"
+
+# Without this it is not possible to patch checkroot.sh
+S = "${WORKDIR}"
+
+do_install_append() {
+ # the image build command now installs this for slugos
+ rm ${D}${sysconfdir}/device_table
+
+ # slugos specific scripts
+ install -m 0755 ${WORKDIR}/alignment.sh ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/domainname.sh ${D}${sysconfdir}/init.d
+
+ # Remove the do install links (this detects a change to the
+ # initscripts .bb file - it will cause a build failure here.)
+ # This is a copy of the ln -sf lines from the initscripts
+ # do_install.
+ rm ${D}${sysconfdir}/rc2.d/S99rmnologin
+ rm ${D}${sysconfdir}/rc3.d/S99rmnologin
+ rm ${D}${sysconfdir}/rc4.d/S99rmnologin
+ rm ${D}${sysconfdir}/rc5.d/S99rmnologin
+ rm ${D}${sysconfdir}/rc6.d/S20sendsigs
+# rm ${D}${sysconfdir}/rc6.d/S30urandom
+ rm ${D}${sysconfdir}/rc6.d/S31umountnfs.sh
+ rm ${D}${sysconfdir}/rc6.d/S40umountfs
+ rm ${D}${sysconfdir}/rcS.d/S30ramdisk
+ rm ${D}${sysconfdir}/rc6.d/S90reboot
+ rm ${D}${sysconfdir}/rc0.d/S20sendsigs
+# rm ${D}${sysconfdir}/rc0.d/S30urandom
+ rm ${D}${sysconfdir}/rc0.d/S31umountnfs.sh
+ rm ${D}${sysconfdir}/rc0.d/S40umountfs
+ rm ${D}${sysconfdir}/rc0.d/S90halt
+ rm ${D}${sysconfdir}/rcS.d/S02banner
+ rm ${D}${sysconfdir}/rcS.d/S10checkroot.sh
+# rm ${D}${sysconfdir}/rcS.d/S30checkfs.sh
+ rm ${D}${sysconfdir}/rcS.d/S35mountall.sh
+ rm ${D}${sysconfdir}/rcS.d/S39hostname.sh
+ rm ${D}${sysconfdir}/rcS.d/S45mountnfs.sh
+ rm ${D}${sysconfdir}/rcS.d/S55bootmisc.sh
+# rm ${D}${sysconfdir}/rcS.d/S55urandom
+ rm ${D}${sysconfdir}/rcS.d/S99finish
+ rm ${D}${sysconfdir}/rcS.d/S05devices
+ # udev will run at S04 if installed
+ rm ${D}${sysconfdir}/rcS.d/S03sysfs
+ rm ${D}${sysconfdir}/rcS.d/S38devpts.sh
+# rm ${D}${sysconfdir}/rcS.d/S06alignment
+
+ # Check the result
+ find ${D}${sysconfdir}/rc?.d ! -type d -print | {
+ status=0
+ while read d
+ do
+ oenote "initscripts-slugos: unexpected link $f"
+ status = 1
+ done
+ test $status -eq 0 ||
+ oefatal "initscripts-slugos: new links break do_install"
+ }
+
+ # Set the run-level links
+ #
+ # Startup (S) links - UNCHANGED
+ #
+ # Keep these in order of startup - S, then 1, 2-5, 0,6
+ # according to the level in which the script starts (or stops) first.
+ update-rc.d -r ${D} banner start 2 S .
+ update-rc.d -r ${D} sysfs.sh start 3 S .
+ # udev runs at S 04 .
+ update-rc.d -r ${D} devices start 5 S .
+ update-rc.d -r ${D} alignment.sh start 7 S .
+ # busybox hwclock.sh (slugos-init) starts here (08)
+ # slugos-init umountinitrd runs here (09)
+
+ update-rc.d -r ${D} checkroot.sh start 10 S .
+ # slugos buffer syslog starts here (11)
+ # sysconfsetup runs at S 12
+ # modutils.sh runs at S 20
+ # checkfs.sh is currently disabled from S 30 (and won't work on SlugOS)
+ # ramdisk is not used on SlugOS, would run at S 30
+ update-rc.d -r ${D} mountall.sh start 35 S .
+ # base-files populate-volatile.sh runs at S37
+ update-rc.d -r ${D} devpts.sh start 38 S .
+ # slugos file syslog starts here (39)
+
+ # set hostname and domainname before the network script works (by
+ # entering them at level 40), networking may reset them.
+ update-rc.d -r ${D} domainname.sh start 40 S .
+ update-rc.d -r ${D} hostname.sh start 40 S .
+ # network runs at S 40
+ # slugos network syslog starts here (44)
+ update-rc.d -r ${D} mountnfs.sh start 45 S .
+
+ update-rc.d -r ${D} bootmisc.sh start 55 S .
+ # urandom is currently disabled from S 55 (and won't work with tmpfs /var)
+
+ # ipkg-cl configure runs at S 98
+ update-rc.d -r ${D} finish start 99 S .
+
+ #
+ # User (2-5) links - UNCHANGED
+ # rmnologin is the only thing added to user levels
+ update-rc.d -r ${D} rmnologin start 99 2 3 4 5 .
+
+ #
+ # Shutdown (0,6) links - !!!CHANGED!!!
+ #
+ # The problem here is that netbase installs K40networking but portmap
+ # installs S32portmap. One of these has to change! The safe change
+ # is to make the networking stop at S40, so all network related shutdown
+ # must be in a K script or <S40.
+ #
+ # S20sendsigs is a disaster. It needs to happen before the umounts
+ # but after the portmapper (which it would otherwise kill).
+ #
+ # urandom would stop at (S)30
+
+ # This is the special, correct, slugos umountnfs.sh (it looks in
+ # the /proc/mounts information, not /etc/fstab)
+ update-rc.d -r ${D} umountnfs.sh start 31 0 6 .
+ # portmap stops at 32
+ # slugos network syslog stops here (39)
+ # networking stops at 40 (nothing else does, believe me.)
+
+ # busybox hwclock.sh (slugos-init) stops here (45)
+ # slugos file syslog stops here (47)
+ # slugos buffer syslog stops here (49)
+ # udev stops here (55)
+ # Remove any errant processes
+ update-rc.d -r ${D} sendsigs start 60 0 6 .
+
+ # This is the special, correct, slugos umountfs, it will umount
+ # any network file systems which failed to umount before.
+ update-rc.d -r ${D} umountfs start 70 0 6 .
+
+ update-rc.d -r ${D} halt start 90 0 .
+ update-rc.d -r ${D} reboot start 90 6 .
+}
Added: trunk/oe/packages/initscripts/initscripts_1.0.bb
===================================================================
--- trunk/oe/packages/initscripts/initscripts_1.0.bb 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/initscripts/initscripts_1.0.bb 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,145 @@
+DESCRIPTION = "SysV init scripts"
+MAINTAINER = "Chris Larson <kergoth at handhelds.org>"
+SECTION = "base"
+PRIORITY = "required"
+DEPENDS = "makedevs"
+DEPENDS_openzaurus = "makedevs virtual/kernel"
+RDEPENDS = "makedevs"
+LICENSE = "GPL"
+PR = "r76"
+
+SRC_URI = "file://halt \
+ file://ramdisk \
+ file://umountfs \
+ file://devices \
+ file://devpts.sh \
+ file://devpts \
+ file://hostname.sh \
+ file://mountall.sh \
+ file://banner \
+ file://finish \
+ file://bootmisc.sh \
+ file://mountnfs.sh \
+ file://reboot \
+ file://checkfs.sh \
+ file://single \
+ file://sendsigs \
+ file://urandom \
+ file://rmnologin \
+ file://checkroot.sh \
+ file://umountnfs.sh \
+ file://sysfs.sh \
+ file://device_table.txt \
+ file://populate-volatile.sh \
+ file://volatiles \
+ file://save-rtc.sh"
+
+SRC_URI_append_arm = " file://alignment.sh"
+SRC_URI_append_openzaurus = " file://checkversion"
+
+def read_kernel_version(d):
+ import bb
+ distro = bb.data.getVar('DISTRO', d, 1)
+ filename = bb.data.getVar('STAGING_KERNEL_DIR', d, 1)
+ if distro == "openzaurus":
+ return file( filename + "/kernel-abiversion", "r" ).read().strip()
+ else:
+ return "not important"
+KERNEL_VERSION = ""
+KERNEL_VERSION_openzaurus = "${@read_kernel_version(d)}"
+PACKAGE_ARCH_openzaurus = "${MACHINE_ARCH}"
+
+do_install () {
+#
+# Create directories and install device independent scripts
+#
+ install -d ${D}${sysconfdir}/init.d \
+ ${D}${sysconfdir}/rcS.d \
+ ${D}${sysconfdir}/rc0.d \
+ ${D}${sysconfdir}/rc1.d \
+ ${D}${sysconfdir}/rc2.d \
+ ${D}${sysconfdir}/rc3.d \
+ ${D}${sysconfdir}/rc4.d \
+ ${D}${sysconfdir}/rc5.d \
+ ${D}${sysconfdir}/rc6.d \
+ ${D}${sysconfdir}/default \
+ ${D}${sysconfdir}/default/volatiles
+
+ install -m 0755 ${WORKDIR}/bootmisc.sh ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/checkroot.sh ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/finish ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/halt ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/hostname.sh ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/mountall.sh ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/mountnfs.sh ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/ramdisk ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/reboot ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/rmnologin ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/sendsigs ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/single ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/umountnfs.sh ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/urandom ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/devpts.sh ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/devpts ${D}${sysconfdir}/default
+ install -m 0755 ${WORKDIR}/sysfs.sh ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/populate-volatile.sh ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/save-rtc.sh ${D}${sysconfdir}/init.d
+ install -m 0644 ${WORKDIR}/volatiles ${D}${sysconfdir}/default/volatiles/00_core
+ if [ "${TARGET_ARCH}" = "arm" ]; then
+ install -m 0755 ${WORKDIR}/alignment.sh ${D}${sysconfdir}/init.d
+ fi
+#
+# Install device dependent scripts
+#
+
+ if [ "${DISTRO}" == "openzaurus" ]; then
+ cat ${WORKDIR}/checkversion | sed -e "s,VERSION,${KERNEL_VERSION}-${DISTRO_VERSION}," > ${D}${sysconfdir}/init.d/checkversion
+ chmod 0755 ${D}${sysconfdir}/init.d/checkversion
+ ln -sf ../init.d/checkversion ${D}${sysconfdir}/rcS.d/S01version
+ fi
+
+ install -m 0755 ${WORKDIR}/banner ${D}${sysconfdir}/init.d/banner
+ install -m 0755 ${WORKDIR}/devices ${D}${sysconfdir}/init.d/devices
+ install -m 0755 ${WORKDIR}/umountfs ${D}${sysconfdir}/init.d/umountfs
+#
+# Create runlevel links
+#
+ ln -sf ../init.d/rmnologin ${D}${sysconfdir}/rc2.d/S99rmnologin
+ ln -sf ../init.d/rmnologin ${D}${sysconfdir}/rc3.d/S99rmnologin
+ ln -sf ../init.d/rmnologin ${D}${sysconfdir}/rc4.d/S99rmnologin
+ ln -sf ../init.d/rmnologin ${D}${sysconfdir}/rc5.d/S99rmnologin
+ ln -sf ../init.d/sendsigs ${D}${sysconfdir}/rc6.d/S20sendsigs
+# ln -sf ../init.d/urandom ${D}${sysconfdir}/rc6.d/S30urandom
+ ln -sf ../init.d/umountnfs.sh ${D}${sysconfdir}/rc6.d/S31umountnfs.sh
+ ln -sf ../init.d/umountfs ${D}${sysconfdir}/rc6.d/S40umountfs
+ # udev will run at S55 if installed
+ ln -sf ../init.d/ramdisk ${D}${sysconfdir}/rcS.d/S30ramdisk
+ ln -sf ../init.d/reboot ${D}${sysconfdir}/rc6.d/S90reboot
+ ln -sf ../init.d/sendsigs ${D}${sysconfdir}/rc0.d/S20sendsigs
+# ln -sf ../init.d/urandom ${D}${sysconfdir}/rc0.d/S30urandom
+ ln -sf ../init.d/umountnfs.sh ${D}${sysconfdir}/rc0.d/S31umountnfs.sh
+ ln -sf ../init.d/umountfs ${D}${sysconfdir}/rc0.d/S40umountfs
+ # udev will run at S55 if installed
+ ln -sf ../init.d/halt ${D}${sysconfdir}/rc0.d/S90halt
+ ln -sf ../init.d/save-rtc.sh ${D}${sysconfdir}/rc0.d/S25save-rtc.sh
+ ln -sf ../init.d/save-rtc.sh ${D}${sysconfdir}/rc6.d/S25save-rtc.sh
+ ln -sf ../init.d/banner ${D}${sysconfdir}/rcS.d/S02banner
+ ln -sf ../init.d/checkroot.sh ${D}${sysconfdir}/rcS.d/S10checkroot.sh
+# ln -sf ../init.d/checkfs.sh ${D}${sysconfdir}/rcS.d/S30checkfs.sh
+ ln -sf ../init.d/mountall.sh ${D}${sysconfdir}/rcS.d/S35mountall.sh
+ ln -sf ../init.d/hostname.sh ${D}${sysconfdir}/rcS.d/S39hostname.sh
+ ln -sf ../init.d/mountnfs.sh ${D}${sysconfdir}/rcS.d/S45mountnfs.sh
+ ln -sf ../init.d/bootmisc.sh ${D}${sysconfdir}/rcS.d/S55bootmisc.sh
+# ln -sf ../init.d/urandom ${D}${sysconfdir}/rcS.d/S55urandom
+ ln -sf ../init.d/finish ${D}${sysconfdir}/rcS.d/S99finish
+ ln -sf ../init.d/devices ${D}${sysconfdir}/rcS.d/S05devices
+ # udev will run at S04 if installed
+ ln -sf ../init.d/sysfs.sh ${D}${sysconfdir}/rcS.d/S03sysfs
+ ln -sf ../init.d/populate-volatile.sh ${D}${sysconfdir}/rcS.d/S37populate-volatile.sh
+ ln -sf ../init.d/devpts.sh ${D}${sysconfdir}/rcS.d/S38devpts.sh
+ if [ "${TARGET_ARCH}" = "arm" ]; then
+ ln -sf ../init.d/alignment.sh ${D}${sysconfdir}/rcS.d/S06alignment
+ fi
+
+ install -m 0755 ${WORKDIR}/device_table.txt ${D}${sysconfdir}/device_table
+}
Added: trunk/oe/packages/linux/README
===================================================================
--- trunk/oe/packages/linux/README 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/linux/README 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1 @@
+cs8900a ethernet chip
Added: trunk/oe/packages/linux/linux-qt2410/defconfig-armzone-qt2410
===================================================================
--- trunk/oe/packages/linux/linux-qt2410/defconfig-armzone-qt2410 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/linux/linux-qt2410/defconfig-armzone-qt2410 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,1440 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.17.7
+# Mon Aug 7 00:28:40 2006
+#
+CONFIG_ARM=y
+CONFIG_MMU=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_VECTORS_BASE=0xffff0000
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+# CONFIG_IKCONFIG_PROC is not set
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_UID16=y
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_EMBEDDED=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+# CONFIG_SHMEM is not set
+CONFIG_SLAB=y
+CONFIG_TINY_SHMEM=y
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+CONFIG_OBSOLETE_INTERMODULE=m
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+# CONFIG_KMOD is not set
+
+#
+# Block layer
+#
+# CONFIG_BLK_DEV_IO_TRACE is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+# CONFIG_IOSCHED_DEADLINE is not set
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+CONFIG_DEFAULT_NOOP=y
+CONFIG_DEFAULT_IOSCHED="noop"
+
+#
+# System Type
+#
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_IOP3XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+CONFIG_ARCH_S3C2410=y
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_AT91RM9200 is not set
+
+#
+# S3C24XX Implementations
+#
+# CONFIG_MACH_ANUBIS is not set
+# CONFIG_MACH_OSIRIS is not set
+# CONFIG_ARCH_BAST is not set
+# CONFIG_ARCH_H1940 is not set
+# CONFIG_MACH_N30 is not set
+# CONFIG_ARCH_SMDK2410 is not set
+CONFIG_MACH_QT2410=y
+# CONFIG_ARCH_S3C2440 is not set
+# CONFIG_MACH_VR1000 is not set
+# CONFIG_MACH_RX3715 is not set
+# CONFIG_MACH_OTOM is not set
+# CONFIG_MACH_NEXCODER_2440 is not set
+CONFIG_CPU_S3C2410=y
+
+#
+# S3C2410 Boot
+#
+# CONFIG_S3C2410_BOOT_ERROR_RESET is not set
+
+#
+# S3C2410 Setup
+#
+CONFIG_S3C2410_DMA=y
+# CONFIG_S3C2410_DMA_DEBUG is not set
+CONFIG_S3C2410_PM_DEBUG=y
+# CONFIG_S3C2410_PM_CHECK is not set
+CONFIG_S3C2410_LOWLEVEL_UART_PORT=0
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM920T=y
+CONFIG_CPU_32v4=y
+CONFIG_CPU_ABRT_EV4T=y
+CONFIG_CPU_CACHE_V4WT=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_TLB_V4WBI=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_PREEMPT is not set
+# CONFIG_NO_IDLE_HZ is not set
+# CONFIG_AEABI is not set
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=ttySAC0,115200 root=/dev/mmcblk0p1 rootdelay=10"
+# CONFIG_XIP_KERNEL is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+# CONFIG_ARTHUR is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+CONFIG_PM_LEGACY=y
+# CONFIG_PM_DEBUG is not set
+CONFIG_APM=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+CONFIG_XFRM_USER=m
+CONFIG_NET_KEY=m
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+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=m
+CONFIG_NET_IPGRE=m
+# CONFIG_NET_IPGRE_BROADCAST is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+CONFIG_INET_AH=m
+CONFIG_INET_ESP=m
+CONFIG_INET_IPCOMP=m
+CONFIG_INET_XFRM_TUNNEL=m
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_IPV6_TUNNEL=m
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+CONFIG_NET_SCHED=y
+# CONFIG_NET_SCH_CLK_JIFFIES is not set
+CONFIG_NET_SCH_CLK_GETTIMEOFDAY=y
+# CONFIG_NET_SCH_CLK_CPU is not set
+
+#
+# Queueing/Scheduling
+#
+CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_HTB=m
+CONFIG_NET_SCH_HFSC=m
+CONFIG_NET_SCH_PRIO=m
+CONFIG_NET_SCH_RED=m
+CONFIG_NET_SCH_SFQ=m
+CONFIG_NET_SCH_TEQL=m
+CONFIG_NET_SCH_TBF=m
+CONFIG_NET_SCH_GRED=m
+CONFIG_NET_SCH_DSMARK=m
+CONFIG_NET_SCH_NETEM=m
+CONFIG_NET_SCH_INGRESS=m
+
+#
+# Classification
+#
+CONFIG_NET_CLS=y
+CONFIG_NET_CLS_BASIC=m
+CONFIG_NET_CLS_TCINDEX=m
+CONFIG_NET_CLS_ROUTE4=m
+CONFIG_NET_CLS_ROUTE=y
+CONFIG_NET_CLS_FW=m
+CONFIG_NET_CLS_U32=m
+CONFIG_CLS_U32_PERF=y
+CONFIG_NET_CLS_RSVP=m
+CONFIG_NET_CLS_RSVP6=m
+# CONFIG_NET_EMATCH is not set
+# CONFIG_NET_CLS_ACT is not set
+# CONFIG_NET_CLS_POLICE is not set
+# CONFIG_NET_CLS_IND is not set
+CONFIG_NET_ESTIMATOR=y
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+
+#
+# IrDA protocols
+#
+# CONFIG_IRLAN is not set
+# CONFIG_IRNET is not set
+# CONFIG_IRCOMM is not set
+# CONFIG_IRDA_ULTRA is not set
+
+#
+# IrDA options
+#
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+# CONFIG_IRDA_FAST_RR is not set
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+# CONFIG_IRTTY_SIR is not set
+
+#
+# Dongle support
+#
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+# CONFIG_USB_IRDA is not set
+# CONFIG_SIGMATEL_FIR is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIUSB is not set
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+CONFIG_BT_HCIVHCI=m
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_DEBUG_DRIVER is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+CONFIG_CONNECTOR=m
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+CONFIG_MTD_REDBOOT_PARTS=y
+CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
+# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set
+# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+CONFIG_NFTL=y
+CONFIG_NFTL_RW=y
+CONFIG_INFTL=m
+# CONFIG_RFD_FTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+CONFIG_MTD_CFI_INTELEXT=y
+CONFIG_MTD_CFI_AMDSTD=y
+CONFIG_MTD_CFI_STAA=y
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0x8000000
+CONFIG_MTD_PHYSMAP_LEN=0x4000000
+CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+CONFIG_MTD_NAND_IDS=y
+CONFIG_MTD_NAND_S3C2410=y
+# CONFIG_MTD_NAND_S3C2410_DEBUG is not set
+# CONFIG_MTD_NAND_S3C2410_HWECC is not set
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+# CONFIG_BLK_DEV_RAM is not set
+CONFIG_BLK_DEV_RAM_COUNT=16
+# CONFIG_BLK_DEV_RAM_SIZE is not set
+# CONFIG_BLK_DEV_INITRD is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+# CONFIG_BLK_DEV_IDE is not set
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+# CONFIG_BLK_DEV_IDEDISK is not set
+# CONFIG_IDEDISK_MULTI_MODE is not set
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+# CONFIG_IDE_GENERIC is not set
+# CONFIG_IDE_ARM is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+# CONFIG_IDEDMA_AUTO is not set
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_PROC_FS is not set
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+# CONFIG_BLK_DEV_SD is not set
+# 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_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI Transport Attributes
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_SATA is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+CONFIG_MD=y
+# CONFIG_BLK_DEV_MD is not set
+CONFIG_BLK_DEV_DM=m
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+# CONFIG_DM_MIRROR is not set
+# CONFIG_DM_ZERO is not set
+# CONFIG_DM_MULTIPATH is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+# CONFIG_MII is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_NET_PCI is not set
+CONFIG_CS89x0=y
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+# CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+# CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_ADS7846 is not set
+CONFIG_TOUCHSCREEN_S3C2410=y
+# CONFIG_TOUCHSCREEN_S3C2410_DEBUG is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_S3C2410=y
+CONFIG_SERIAL_S3C2410_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_LEGACY_PTY_COUNT is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_NVRAM is not set
+CONFIG_S3C2410_RTC=y
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_PARPORT_LIGHT is not set
+CONFIG_I2C_S3C2410=y
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+CONFIG_SPI_BITBANG=y
+CONFIG_SPI_S3C24XX_GPIO=y
+CONFIG_SPI_S3C24XX=y
+
+#
+# SPI Protocol Masters
+#
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ADM1025 is not set
+# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1031 is not set
+# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_FSCHER is not set
+# CONFIG_SENSORS_FSCPOS is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 is not set
+# CONFIG_SENSORS_LM75 is not set
+# CONFIG_SENSORS_LM77 is not set
+# CONFIG_SENSORS_LM78 is not set
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
+# CONFIG_SENSORS_LM85 is not set
+# CONFIG_SENSORS_LM87 is not set
+# CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
+# CONFIG_SENSORS_MAX1619 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Misc devices
+#
+
+#
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+CONFIG_VIDEO_V4L2=y
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+CONFIG_FB=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_MACMODES is not set
+CONFIG_FB_FIRMWARE_EDID=y
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_S3C2410=y
+CONFIG_FB_S3C2410_DEBUG=y
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+CONFIG_LOGO_LINUX_CLUT224=y
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_LCD_DEVICE=y
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+# CONFIG_SND_SEQUENCER is not set
+# CONFIG_SND_MIXER_OSS is not set
+# CONFIG_SND_PCM_OSS is not set
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+CONFIG_USB_STORAGE_DATAFAB=y
+CONFIG_USB_STORAGE_FREECOM=y
+# CONFIG_USB_STORAGE_ISD200 is not set
+CONFIG_USB_STORAGE_DPCM=y
+CONFIG_USB_STORAGE_USBAT=y
+CONFIG_USB_STORAGE_SDDR09=y
+CONFIG_USB_STORAGE_SDDR55=y
+CONFIG_USB_STORAGE_JUMPSHOT=y
+CONFIG_USB_STORAGE_ALAUDA=y
+CONFIG_USB_LIBUSUAL=y
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+CONFIG_USB_HIDINPUT=y
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGETKIT is not set
+# CONFIG_USB_PHIDGETSERVO is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+CONFIG_USB_GADGET_DEBUG_FILES=y
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+CONFIG_USB_GADGET_S3C2410=y
+CONFIG_USB_S3C2410=y
+# CONFIG_USB_S3C2410_DEBUG is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+# CONFIG_USB_ETH_RNDIS is not set
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_S3C2410=y
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+# CONFIG_FS_MBCACHE is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+CONFIG_ROMFS_FS=m
+CONFIG_INOTIFY=y
+# CONFIG_QUOTA is not set
+# CONFIG_DNOTIFY is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+CONFIG_FUSE_FS=m
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_JOLIET is not set
+# CONFIG_ZISOFS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=m
+CONFIG_RELAYFS=m
+CONFIG_CONFIGFS_FS=m
+
+#
+# Miscellaneous filesystems
+#
+# 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_EFS_FS is not set
+CONFIG_JFFS_FS=m
+CONFIG_JFFS_FS_VERBOSE=0
+# CONFIG_JFFS_PROC_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=y
+CONFIG_RPCSEC_GSS_KRB5=y
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=m
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+CONFIG_NLS_CODEPAGE_850=m
+# 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=m
+CONFIG_NLS_CODEPAGE_950=m
+# 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_ASCII is not set
+CONFIG_NLS_ISO8859_1=m
+# 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=m
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_DEBUG_KERNEL=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_DEBUG_VM is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_UNWIND_INFO=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_DEBUG_USER is not set
+# CONFIG_DEBUG_WAITQ is not set
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+CONFIG_DEBUG_S3C2410_PORT=y
+CONFIG_DEBUG_S3C2410_UART=0
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_DES=y
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_TEST=m
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
Added: trunk/oe/packages/linux/linux-qt2410/defconfig-armzone-qt2410.laforge
===================================================================
--- trunk/oe/packages/linux/linux-qt2410/defconfig-armzone-qt2410.laforge 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/linux/linux-qt2410/defconfig-armzone-qt2410.laforge 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,1438 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.17.7
+# Mon Aug 7 00:28:40 2006
+#
+CONFIG_ARM=y
+CONFIG_MMU=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_VECTORS_BASE=0xffff0000
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+# CONFIG_IKCONFIG_PROC is not set
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_UID16=y
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+# CONFIG_EMBEDDED is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+CONFIG_OBSOLETE_INTERMODULE=y
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+# CONFIG_BLK_DEV_IO_TRACE is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System Type
+#
+# CONFIG_ARCH_CLPS7500 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CO285 is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_IOP3XX is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+CONFIG_ARCH_S3C2410=y
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_AT91RM9200 is not set
+
+#
+# S3C24XX Implementations
+#
+# CONFIG_MACH_ANUBIS is not set
+# CONFIG_MACH_OSIRIS is not set
+# CONFIG_ARCH_BAST is not set
+# CONFIG_ARCH_H1940 is not set
+# CONFIG_MACH_N30 is not set
+# CONFIG_ARCH_SMDK2410 is not set
+CONFIG_MACH_QT2410=y
+# CONFIG_ARCH_S3C2440 is not set
+# CONFIG_MACH_VR1000 is not set
+# CONFIG_MACH_RX3715 is not set
+# CONFIG_MACH_OTOM is not set
+# CONFIG_MACH_NEXCODER_2440 is not set
+CONFIG_CPU_S3C2410=y
+
+#
+# S3C2410 Boot
+#
+# CONFIG_S3C2410_BOOT_ERROR_RESET is not set
+
+#
+# S3C2410 Setup
+#
+CONFIG_S3C2410_DMA=y
+# CONFIG_S3C2410_DMA_DEBUG is not set
+CONFIG_S3C2410_PM_DEBUG=y
+# CONFIG_S3C2410_PM_CHECK is not set
+CONFIG_S3C2410_LOWLEVEL_UART_PORT=0
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_ARM920T=y
+CONFIG_CPU_32v4=y
+CONFIG_CPU_ABRT_EV4T=y
+CONFIG_CPU_CACHE_V4WT=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_TLB_V4WBI=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+CONFIG_CPU_ICACHE_DISABLE=y
+CONFIG_CPU_DCACHE_DISABLE=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+# CONFIG_PREEMPT is not set
+# CONFIG_NO_IDLE_HZ is not set
+CONFIG_HZ=200
+# CONFIG_AEABI is not set
+# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE="console=ttySAC0,115200 root=/dev/mmcblk0p1 rootdelay=10"
+# CONFIG_XIP_KERNEL is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+# CONFIG_ARTHUR is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+CONFIG_PM_LEGACY=y
+# CONFIG_PM_DEBUG is not set
+CONFIG_APM=m
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=m
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+CONFIG_NET_KEY=m
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+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=m
+CONFIG_NET_IPGRE=m
+# CONFIG_NET_IPGRE_BROADCAST is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+CONFIG_INET_AH=m
+CONFIG_INET_ESP=m
+CONFIG_INET_IPCOMP=m
+CONFIG_INET_XFRM_TUNNEL=m
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_IPV6_TUNNEL=m
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+CONFIG_NET_SCHED=y
+# CONFIG_NET_SCH_CLK_JIFFIES is not set
+CONFIG_NET_SCH_CLK_GETTIMEOFDAY=y
+# CONFIG_NET_SCH_CLK_CPU is not set
+
+#
+# Queueing/Scheduling
+#
+CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_HTB=m
+CONFIG_NET_SCH_HFSC=m
+CONFIG_NET_SCH_PRIO=m
+CONFIG_NET_SCH_RED=m
+CONFIG_NET_SCH_SFQ=m
+CONFIG_NET_SCH_TEQL=m
+CONFIG_NET_SCH_TBF=m
+CONFIG_NET_SCH_GRED=m
+CONFIG_NET_SCH_DSMARK=m
+CONFIG_NET_SCH_NETEM=m
+CONFIG_NET_SCH_INGRESS=m
+
+#
+# Classification
+#
+CONFIG_NET_CLS=y
+CONFIG_NET_CLS_BASIC=m
+CONFIG_NET_CLS_TCINDEX=m
+CONFIG_NET_CLS_ROUTE4=m
+CONFIG_NET_CLS_ROUTE=y
+CONFIG_NET_CLS_FW=m
+CONFIG_NET_CLS_U32=m
+CONFIG_CLS_U32_PERF=y
+CONFIG_NET_CLS_RSVP=m
+CONFIG_NET_CLS_RSVP6=m
+# CONFIG_NET_EMATCH is not set
+# CONFIG_NET_CLS_ACT is not set
+# CONFIG_NET_CLS_POLICE is not set
+# CONFIG_NET_CLS_IND is not set
+CONFIG_NET_ESTIMATOR=y
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+# CONFIG_IRLAN is not set
+# CONFIG_IRNET is not set
+# CONFIG_IRCOMM is not set
+# CONFIG_IRDA_ULTRA is not set
+
+#
+# IrDA options
+#
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+# CONFIG_IRDA_FAST_RR is not set
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+# CONFIG_IRTTY_SIR is not set
+
+#
+# Dongle support
+#
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+# CONFIG_USB_IRDA is not set
+# CONFIG_SIGMATEL_FIR is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIUSB is not set
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+CONFIG_BT_HCIVHCI=m
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_DEBUG_DRIVER is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+CONFIG_CONNECTOR=m
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+CONFIG_MTD_REDBOOT_PARTS=y
+CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
+# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set
+# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+# CONFIG_MTD_AFS_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+CONFIG_NFTL=y
+CONFIG_NFTL_RW=y
+CONFIG_INFTL=m
+# CONFIG_RFD_FTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+CONFIG_MTD_CFI_INTELEXT=y
+CONFIG_MTD_CFI_AMDSTD=y
+CONFIG_MTD_CFI_STAA=y
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0x8000000
+CONFIG_MTD_PHYSMAP_LEN=0x4000000
+CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+CONFIG_MTD_NAND_IDS=y
+CONFIG_MTD_NAND_S3C2410=y
+# CONFIG_MTD_NAND_S3C2410_DEBUG is not set
+# CONFIG_MTD_NAND_S3C2410_HWECC is not set
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+CONFIG_BLK_DEV_UB=y
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=y
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+CONFIG_BLK_DEV_IDECD=y
+# 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
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=y
+# CONFIG_IDE_ARM is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+# CONFIG_IDEDMA_AUTO is not set
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# 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_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI Transport Attributes
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_SCSI_SATA is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+CONFIG_MD=y
+# CONFIG_BLK_DEV_MD is not set
+CONFIG_BLK_DEV_DM=m
+CONFIG_DM_CRYPT=m
+CONFIG_DM_SNAPSHOT=m
+# CONFIG_DM_MIRROR is not set
+# CONFIG_DM_ZERO is not set
+# CONFIG_DM_MULTIPATH is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+# CONFIG_MII is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+CONFIG_NET_PCI=y
+CONFIG_CS89x0=y
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+# CONFIG_PPPOE is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_EVDEV=y
+CONFIG_INPUT_EVBUG=y
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_ADS7846 is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_S3C2410=y
+CONFIG_SERIAL_S3C2410_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_NVRAM is not set
+CONFIG_S3C2410_RTC=y
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+# CONFIG_I2C_PARPORT_LIGHT is not set
+CONFIG_I2C_S3C2410=y
+# CONFIG_I2C_STUB is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_SENSORS_DS1337 is not set
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+CONFIG_SPI_BITBANG=y
+CONFIG_SPI_S3C24XX_GPIO=y
+CONFIG_SPI_S3C24XX=y
+
+#
+# SPI Protocol Masters
+#
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ADM1025 is not set
+# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1031 is not set
+# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_FSCHER is not set
+# CONFIG_SENSORS_FSCPOS is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 is not set
+# CONFIG_SENSORS_LM75 is not set
+# CONFIG_SENSORS_LM77 is not set
+# CONFIG_SENSORS_LM78 is not set
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
+# CONFIG_SENSORS_LM85 is not set
+# CONFIG_SENSORS_LM87 is not set
+# CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
+# CONFIG_SENSORS_MAX1619 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Misc devices
+#
+
+#
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+CONFIG_VIDEO_V4L2=y
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+CONFIG_FB=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_MACMODES is not set
+CONFIG_FB_FIRMWARE_EDID=y
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_S3C2410=y
+CONFIG_FB_S3C2410_DEBUG=y
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+CONFIG_FONT_MINI_4x6=y
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+CONFIG_LOGO_LINUX_CLUT224=y
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_DEVICE=y
+CONFIG_LCD_CLASS_DEVICE=y
+CONFIG_LCD_DEVICE=y
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+# CONFIG_SND_SEQUENCER is not set
+# CONFIG_SND_MIXER_OSS is not set
+# CONFIG_SND_PCM_OSS is not set
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+# CONFIG_SND_DUMMY is not set
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# ALSA ARM devices
+#
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_SUSPEND is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+CONFIG_USB_STORAGE_DATAFAB=y
+CONFIG_USB_STORAGE_FREECOM=y
+# CONFIG_USB_STORAGE_ISD200 is not set
+CONFIG_USB_STORAGE_DPCM=y
+CONFIG_USB_STORAGE_USBAT=y
+CONFIG_USB_STORAGE_SDDR09=y
+CONFIG_USB_STORAGE_SDDR55=y
+CONFIG_USB_STORAGE_JUMPSHOT=y
+CONFIG_USB_STORAGE_ALAUDA=y
+CONFIG_USB_LIBUSUAL=y
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+CONFIG_USB_HIDINPUT=y
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_AUERSWALD is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_PHIDGETKIT is not set
+# CONFIG_USB_PHIDGETSERVO is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+CONFIG_USB_GADGET_S3C2410=y
+CONFIG_USB_S3C2410=y
+# CONFIG_USB_S3C2410_DEBUG is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+# CONFIG_USB_ZERO is not set
+CONFIG_USB_ETH=y
+CONFIG_USB_ETH_RNDIS=y
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_S3C2410=y
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+
+#
+# RTC drivers
+#
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+CONFIG_ROMFS_FS=y
+CONFIG_INOTIFY=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+CONFIG_FUSE_FS=m
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+# CONFIG_ZISOFS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+CONFIG_CONFIGFS_FS=m
+
+#
+# Miscellaneous filesystems
+#
+# 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_EFS_FS is not set
+CONFIG_JFFS_FS=m
+CONFIG_JFFS_FS_VERBOSE=0
+# CONFIG_JFFS_PROC_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+CONFIG_CRAMFS=y
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=y
+CONFIG_RPCSEC_GSS_KRB5=y
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=m
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+CONFIG_NLS_CODEPAGE_850=m
+# 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=m
+CONFIG_NLS_CODEPAGE_950=m
+# 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_ASCII is not set
+CONFIG_NLS_ISO8859_1=m
+# 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=m
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_DEBUG_KERNEL=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_DEBUG_VM is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_UNWIND_INFO=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_DEBUG_USER is not set
+# CONFIG_DEBUG_WAITQ is not set
+# CONFIG_DEBUG_ERRORS is not set
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+CONFIG_DEBUG_S3C2410_PORT=y
+CONFIG_DEBUG_S3C2410_UART=0
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=m
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_DEFLATE=m
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
Added: trunk/oe/packages/linux/linux-qt2410/new/patches/mmc-fixdebugp.patch
===================================================================
--- trunk/oe/packages/linux/linux-qt2410/new/patches/mmc-fixdebugp.patch 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/linux/linux-qt2410/new/patches/mmc-fixdebugp.patch 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,15 @@
+Index: linux-2.6.17.7-new/drivers/mmc/s3c2410mci.c
+===================================================================
+--- linux-2.6.17.7-new.orig/drivers/mmc/s3c2410mci.c 2006-08-07 09:37:38.000000000 +0200
++++ linux-2.6.17.7-new/drivers/mmc/s3c2410mci.c 2006-08-07 09:38:15.000000000 +0200
+@@ -300,8 +300,8 @@
+ u32 sdi_bsize, sdi_dcon, sdi_imsk;
+ int dma_len = 0;
+
+- DBG(KERN_DEBUG PFX "request: [CMD] opcode:0x%02x arg:0x%08x flags:%x retries:%u\n",
+- mrq->cmd->opcode, mrq->cmd->arg, mrq->cmd->flags, mrq->cmd->retries);
++ DBG(PFX "request: [CMD] opcode:0x%02x arg:0x%08x flags:%x retries:%u\n",
++ mrq->cmd->opcode, mrq->cmd->arg, mrq->cmd->flags, mrq->cmd->retries);
+ DBG(PFX "request : %s mode\n",mmc->mode == MMC_MODE_MMC ? "mmc" : "sd");
+
+
Added: trunk/oe/packages/linux/linux-qt2410/new/patches/mmc-fixdmalockup.patch
===================================================================
--- trunk/oe/packages/linux/linux-qt2410/new/patches/mmc-fixdmalockup.patch 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/linux/linux-qt2410/new/patches/mmc-fixdmalockup.patch 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,13 @@
+diff -Nru --exclude-from=/sunbeam/home/laforge/scripts/dontdiff linux-2.6.17.7-new/drivers/mmc/s3c2410mci.c linux-2.6.17.7-qt/drivers/mmc/s3c2410mci.c
+--- linux-2.6.17.7-new/drivers/mmc/s3c2410mci.c 2006-08-07 09:25:32.000000000 +0200
++++ linux-2.6.17.7-qt/drivers/mmc/s3c2410mci.c 2006-08-07 00:55:23.000000000 +0200
+@@ -206,6 +206,8 @@
+ host->complete_what = COMPLETION_NONE;
+ complete(&host->complete_request);
+ writel(0, host->base + S3C2410_SDIIMSK);
++ if (host->mrq->data && host->mrq->data->error != MMC_ERR_NONE)
++ complete(&host->complete_dma);
+ spin_unlock_irqrestore( &host->complete_lock, iflags);
+ DBG(PFX "IRQ transfer closed.\n");
+ return IRQ_HANDLED;
+
Added: trunk/oe/packages/linux/linux-qt2410/new/patches/mmc-get_ro.patch
===================================================================
--- trunk/oe/packages/linux/linux-qt2410/new/patches/mmc-get_ro.patch 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/linux/linux-qt2410/new/patches/mmc-get_ro.patch 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,33 @@
+diff -Nru --exclude-from=/sunbeam/home/laforge/scripts/dontdiff linux-2.6.17.7-new/drivers/mmc/s3c2410mci.c linux-2.6.17.7-qt/drivers/mmc/s3c2410mci.c
+--- linux-2.6.17.7-new/drivers/mmc/s3c2410mci.c 2006-08-07 09:25:32.000000000 +0200
++++ linux-2.6.17.7-qt/drivers/mmc/s3c2410mci.c 2006-08-07 00:55:23.000000000 +0200
+@@ -515,9 +518,19 @@
+
+ }
+
++static int s3c2410sdi_get_ro(struct mmc_host *mmc)
++{
++ struct s3c2410sdi_host *host = mmc_priv(mmc);
++ if (s3c2410_gpio_getpin(host->pdata->gpio_wprotect) != 0)
++ return 1;
++ else
++ return 0;
++}
++
+ static struct mmc_host_ops s3c2410sdi_ops = {
+ .request = s3c2410sdi_request,
+ .set_ios = s3c2410sdi_set_ios,
++ .get_ro = s3c2410sdi_get_ro,
+ };
+
+ static void s3c2410_mmc_def_setpower(unsigned int to)
+@@ -565,6 +578,8 @@
+
+ host->irq_cd = s3c2410_gpio_getirq(pdata->gpio_detect);
+ s3c2410_gpio_cfgpin(pdata->gpio_detect, S3C2410_GPIO_IRQ);
++ if (pdata->gpio_wprotect)
++ s3c2410_gpio_cfgpin(pdata->gpio_wprotect, S3C2410_GPIO_INPUT);
+
+ host->mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+ if (!host->mem) {
+
Added: trunk/oe/packages/linux/linux-qt2410/new/patches/mmc-sdipre_limit.patch
===================================================================
--- trunk/oe/packages/linux/linux-qt2410/new/patches/mmc-sdipre_limit.patch 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/linux/linux-qt2410/new/patches/mmc-sdipre_limit.patch 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,12 @@
+diff -Nru --exclude-from=/sunbeam/home/laforge/scripts/dontdiff linux-2.6.17.7-new/drivers/mmc/s3c2410mci.c linux-2.6.17.7-qt/drivers/mmc/s3c2410mci.c
+--- linux-2.6.17.7-new/drivers/mmc/s3c2410mci.c 2006-08-07 09:25:32.000000000 +0200
++++ linux-2.6.17.7-qt/drivers/mmc/s3c2410mci.c 2006-08-07 00:55:23.000000000 +0200
+@@ -503,6 +505,7 @@
+ }
+
+ if(sdi_psc > 255) sdi_psc = 255;
++ if (sdi_psc < 8) sdi_psc = 8;
+ writel(sdi_psc, host->base + S3C2410_SDIPRE);
+
+ /* Set CLOCK_ENABLE */
+
Added: trunk/oe/packages/linux/linux-qt2410/new/patches/mmc-tt1104.patch
===================================================================
--- trunk/oe/packages/linux/linux-qt2410/new/patches/mmc-tt1104.patch 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/linux/linux-qt2410/new/patches/mmc-tt1104.patch 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,1961 @@
+Index: linux-2.6.17.7-new/arch/arm/mach-s3c2410/dma.c
+===================================================================
+--- linux-2.6.17.7-new.orig/arch/arm/mach-s3c2410/dma.c 2006-08-07 17:35:41.000000000 +0200
++++ linux-2.6.17.7-new/arch/arm/mach-s3c2410/dma.c 2006-08-07 17:38:53.000000000 +0200
+@@ -947,7 +947,12 @@
+ return -EINVAL;
+ }
+
+- dcon |= S3C2410_DCON_HWTRIG;
++ if (chan->hwsrc >= 0) {
++ dcon |= S3C2410_DCON_HWTRIG;
++ dcon |= ((chan->hwsrc << S3C2410_DCON_SRCSHIFT)
++ && S3C2410_DCON_SRCMASK);
++ }
++
+ dcon |= S3C2410_DCON_INTREQ;
+
+ pr_debug("%s: dcon now %08x\n", __FUNCTION__, dcon);
+@@ -1027,7 +1032,8 @@
+ int s3c2410_dma_devconfig(int channel,
+ s3c2410_dmasrc_t source,
+ int hwcfg,
+- unsigned long devaddr)
++ unsigned long devaddr,
++ unsigned int hwsrc)
+ {
+ s3c2410_dma_chan_t *chan = &s3c2410_chans[channel];
+
+@@ -1038,6 +1044,7 @@
+
+ chan->source = source;
+ chan->dev_addr = devaddr;
++ chan->hwsrc = hwsrc;
+
+ switch (source) {
+ case S3C2410_DMASRC_HW:
+Index: linux-2.6.17.7-new/drivers/mmc/mmc.c
+===================================================================
+--- linux-2.6.17.7-new.orig/drivers/mmc/mmc.c 2006-08-07 17:35:41.000000000 +0200
++++ linux-2.6.17.7-new/drivers/mmc/mmc.c 2006-08-07 17:38:53.000000000 +0200
+@@ -817,7 +817,7 @@
+
+ cmd.opcode = MMC_ALL_SEND_CID;
+ cmd.arg = 0;
+- cmd.flags = MMC_RSP_R2 | MMC_CMD_BCR;
++ cmd.flags = (MMC_RSP_R2 | MMC_CMD_BCR) & ~MMC_RSP_CRC;
+
+ err = mmc_wait_for_cmd(host, &cmd, CMD_RETRIES);
+ if (err == MMC_ERR_TIMEOUT) {
+@@ -1105,8 +1105,10 @@
+
+ mmc_read_csds(host);
+
++#if 0
+ if (host->mode == MMC_MODE_SD)
+ mmc_read_scrs(host);
++#endif
+ }
+
+
+Index: linux-2.6.17.7-new/drivers/mmc/s3c2410mci.c
+===================================================================
+--- linux-2.6.17.7-new.orig/drivers/mmc/s3c2410mci.c 2006-08-07 17:38:52.000000000 +0200
++++ linux-2.6.17.7-new/drivers/mmc/s3c2410mci.c 2006-08-07 18:12:38.000000000 +0200
+@@ -1,56 +1,298 @@
+ /*
+- * linux/drivers/mmc/s3c2410mci.h - Samsung S3C2410 SDI Interface driver
++ * linux/drivers/mmc/s3c2410mci.c - Samsung S3C2410 SDI Interface driver
+ *
+- * Copyright (C) 2004 Thomas Kleffel, All Rights Reserved.
++ * Copyright (C) 2004-2005 Thomas Kleffel, All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
++ *
++ * 2006-08-02 Harald Welte <hwelte at hmw-consulting.de>
++ * - Merge with 2.6.17.x
++ * - CodingStyle cleanup
+ */
+ #include <linux/config.h>
+ #include <linux/module.h>
+-#include <linux/moduleparam.h>
+-#include <linux/init.h>
+-#include <linux/ioport.h>
+-#include <linux/platform_device.h>
+-#include <linux/interrupt.h>
+-#include <linux/blkdev.h>
+-#include <linux/delay.h>
+-#include <linux/err.h>
+ #include <linux/dma-mapping.h>
+ #include <linux/mmc/host.h>
+ #include <linux/mmc/protocol.h>
++#include <linux/platform_device.h>
+ #include <linux/clk.h>
+
+ #include <asm/dma.h>
+ #include <asm/dma-mapping.h>
+-#include <asm/arch/dma.h>
+
+ #include <asm/io.h>
+-#include <asm/irq.h>
+-#include <asm/mach/mmc.h>
+
+ #include <asm/arch/regs-sdi.h>
+ #include <asm/arch/regs-gpio.h>
+-#include <asm/arch/mmc.h>
+-
+-#ifdef CONFIG_MMC_DEBUG
+-#define DBG(x...) printk(KERN_INFO x)
+-#else
+-#define DBG(x...) do { } while (0)
+-#endif
+
+ #include "s3c2410mci.h"
+
+-#define DRIVER_NAME "mmci-s3c2410"
+-#define PFX DRIVER_NAME ": "
++#define DRIVER_NAME "mmci-s3c24xx"
++#define PFX DRIVER_NAME ": "
++
++#define NULLDBG(x...) do { } while (0)
++#define KERNDBG(x...) printk(KERN_DEBUG PFX x)
++#define KERNINF(x...) printk(KERN_INFO PFX x)
++#define KERNERR(x...) printk(KERN_ERR PFX x)
++
++#define ERR(x...) KERNERR("ERROR: " x)
++#define DBG(x...) KERNDBG(x)
++#define INFO(x...) KERNINF(x)
++#define INTDBG(x...) NULLDBG("INTERRUPT: " x)
++#define SGDBG(x...) NULLDBG("SG: " x)
++#define DMADBG(x...) KERNERR("DMA: " x)
++#define PIODBG(x...) NULLDBG("PIO: " x)
++#define FAILDBG(x...) KERNINF("FAILED REQUEST: " x)
++#define CONFDBG(x...) KERNDBG("CONFIG: " x)
+
+ #define RESSIZE(ressource) (((ressource)->end - (ressource)->start)+1)
+
++/* FIXME: move this to mmc.h */
++#define MMC_RSP_MASK 0x1f
++
++typedef enum {
++ DMAP_READ,
++ DMAP_WRITE,
++} eDMAPurpose_t;
++
+ static struct s3c2410_dma_client s3c2410sdi_dma_client = {
+ .name = "s3c2410-sdi",
+ };
+
++static void finalize_request(struct s3c2410sdi_host *host);
++static void s3c2410sdi_send_request(struct mmc_host *mmc);
++static void s3c2410sdi_reset(struct s3c2410sdi_host *host);
++
++static inline void
++debug_dump_registers(struct s3c2410sdi_host *host, char *prefix)
++{
++ u32 con, pre, cmdarg, cmdcon, cmdsta, r0, r1, r2, r3, timer, bsize;
++ u32 datcon, datcnt, datsta, fsta, imask;
++
++ con = readl(host->base + S3C2410_SDICON);
++ pre = readl(host->base + S3C2410_SDIPRE);
++ cmdarg = readl(host->base + S3C2410_SDICMDARG);
++ cmdcon = readl(host->base + S3C2410_SDICMDCON);
++ cmdsta = readl(host->base + S3C2410_SDICMDSTAT);
++ r0 = readl(host->base + S3C2410_SDIRSP0);
++ r1 = readl(host->base + S3C2410_SDIRSP1);
++ r2 = readl(host->base + S3C2410_SDIRSP2);
++ r3 = readl(host->base + S3C2410_SDIRSP3);
++ timer = readl(host->base + S3C2410_SDITIMER);
++ bsize = readl(host->base + S3C2410_SDIBSIZE);
++ datcon = readl(host->base + S3C2410_SDIDCON);
++ datcnt = readl(host->base + S3C2410_SDIDCNT);
++ datsta = readl(host->base + S3C2410_SDIDSTA);
++ fsta = readl(host->base + S3C2410_SDIFSTA);
++
++ if (host->is2440)
++ imask = readl(host->base + S3C2440_SDIIMSK);
++ else
++ imask = readl(host->base + S3C2440_SDIIMSK);
++
++ DBG("%s CON:[%08x] PRE:[%08x] TMR:[%08x]\n", prefix, con, pre,
++ timer);
++ DBG("%s CCON:[%08x] CARG:[%08x] CSTA:[%08x]\n", prefix, cmdcon,
++ cmdarg, cmdsta);
++ DBG("%s DCON:[%08x] FSTA:[%08x] DSTA:[%08x] DCNT:[%08x]\n", prefix,
++ datcon, fsta, datsta, datcnt);
++ DBG("%s R0:[%08x] R1:[%08x] R2:[%08x] R3:[%08x]\n", prefix,
++ r0, r1, r2, r3);
++}
++
++static inline char *cmd2str(int cmd)
++{
++ switch (cmd) {
++ case 0: return "GO_IDLE_STATE";
++ case 1: return "ALL_SEND_OCR";
++ case 2: return "ALL_SEND_CID";
++ case 3: return "ALL_SEND_RELATIVE_ADD";
++ case 6: return "ACMD: SD_SET_BUSWIDTH";
++ case 7: return "SEL_DESEL_CARD";
++ case 9: return "SEND_CSD";
++ case 10: return "SEND_CID";
++ case 11: return "READ_UNTIL_STOP";
++ case 12: return "STOP_TRANSMISSION";
++ case 13: return "SEND_STATUS";
++ case 15: return "GO_INACTIVE_STATE";
++ case 16: return "SET_BLOCKLEN";
++ case 17: return "READ_SINGLE_BLOCK";
++ case 18: return "READ_MULTIPLE_BLOCK";
++ case 24: return "WRITE_SINGLE_BLOCK";
++ case 25: return "WRITE_MULTIPLE_BLOCK";
++ case 41: return "ACMD: SD_APP_OP_COND";
++ case 55: return "APP_CMD";
++ default: return "UNKNOWN";
++ }
++}
++
++static inline char *err2str(int err) {
++ switch (err) {
++ case 0: return "OK";
++ case 1: return "TIMEOUT";
++ case 2: return "BADCRC";
++ case 3: return "FIFO";
++ case 4: return "FAILED";
++ case 5: return "INVALID";
++ case 6: return "BUSY";
++ case 7: return "DMA";
++ case 8: return "CANCELED";
++ default: return "UNKNOWN";
++ }
++}
++
++static inline void
++prepare_dbgmsg(struct s3c2410sdi_host *host, struct mmc_command *cmd, int stop)
++{
++ snprintf(host->dbgmsg_cmd, 300,
++ "#[%u]%s op:[%s(%i)] arg:[0x%08x] flags:[%x] retries:[%u]",
++ host->ccnt, (stop?" STOP":""), cmd2str(cmd->opcode),
++ cmd->opcode, cmd->arg, cmd->flags, cmd->retries);
++
++ if (cmd->data)
++ snprintf(host->dbgmsg_dat, 300,
++ "#[%u] bsize:%u blocks:%u bytes:%u",
++ host->dcnt, (1 << cmd->data->blksz_bits) , cmd->data->blocks,
++ cmd->data->blocks * (1 << cmd->data->blksz_bits));
++ else
++ host->dbgmsg_dat[0] = '\0';
++}
++
++
++static inline int
++get_data_buffer(struct s3c2410sdi_host *host, u32 *words, u32 **pointer)
++{
++ struct scatterlist *sg;
++
++ if (!host->pio_active)
++ return -EINVAL;
++ if (!host->mrq)
++ return -EINVAL;
++ if (!host->mrq->data)
++ return -EINVAL;
++
++ if (host->pio_sgptr >= host->mrq->data->sg_len) {
++ SGDBG("get_data_buffer(): no more buffers (%i/%i)\n",
++ host->pio_sgptr, host->mrq->data->sg_len);
++ return -EBUSY;
++ }
++ sg = &host->mrq->data->sg[host->pio_sgptr];
++
++ *words = sg->length >> 2;
++ *pointer= page_address(sg->page) + sg->offset;
++
++ host->pio_sgptr++;
++
++ SGDBG("get_data_buffer(): new buffer (%i/%i)\n",
++ host->pio_sgptr, host->mrq->data->sg_len);
++
++ return 0;
++}
++
++#define FIFO_FILL(host) ((readl(host->base + S3C2410_SDIFSTA) & S3C2410_SDIFSTA_COUNTMASK) >> 2)
++#define FIFO_FREE(host) ((63 - (readl(host->base + S3C2410_SDIFSTA) & S3C2410_SDIFSTA_COUNTMASK)) >> 2)
++
++static inline void do_pio_read(struct s3c2410sdi_host *host)
++{
++ int res;
++ u32 fifo;
++ void __iomem *from_ptr;
++
++ //FIX2410: write real prescaler to host, it might be set slow to fix 2410
++ writel(host->prescaler, host->base + S3C2410_SDIPRE);
++ //writel(0xff, host->base + S3C2410_SDIPRE);
++
++ from_ptr = host->base + ((host->is2440)?S3C2440_SDIDATA:S3C2410_SDIDATA);
++
++ while ((fifo = FIFO_FILL(host))) {
++ if(!host->pio_words) {
++ res = get_data_buffer(host, &host->pio_words, &host->pio_ptr);
++ if (res) {
++ PIODBG("pio_read(): complete (no more buffers).\n");
++ host->pio_active = 0;
++ host->dma_complete = 1;
++ finalize_request(host);
++ return;
++ /* handle no data condition */
++ }
++
++ PIODBG("pio_read(): new target: [%i]@[%p]\n",
++ host->pio_words, host->pio_ptr);
++ }
++
++ PIODBG("pio_read(): fifo:[%i] buffer:[%i] dcnt:[%08X]\n",
++ fifo, host->pio_words, readl(host->base + S3C2410_SDIDCNT));
++
++ if (fifo > host->pio_words)
++ fifo = host->pio_words;
++
++ host->pio_words-= fifo;
++
++ while (fifo--)
++ *(host->pio_ptr++) = readl(from_ptr);
++ }
++
++ if (!host->pio_words) {
++ res = get_data_buffer(host, &host->pio_words, &host->pio_ptr);
++ if (res) {
++ PIODBG("pio_read(): complete (no more buffers).\n");
++ host->pio_active = 0;
++ host->dma_complete = 1;
++ finalize_request(host);
++ }
++ }
++}
++
++static inline void do_pio_write(struct s3c2410sdi_host *host)
++{
++ int res;
++ u32 fifo;
++
++ void __iomem *to_ptr;
++
++ to_ptr = host->base + ((host->is2440)?S3C2440_SDIDATA:S3C2410_SDIDATA);
++
++ while ((fifo = FIFO_FREE(host))) {
++ if (!host->pio_words) {
++ res = get_data_buffer(host, &host->pio_words,
++ &host->pio_ptr);
++ if (res) {
++ PIODBG("pio_write(): complete\n");
++ host->pio_active = 0;
++ host->dma_complete = 1;
++ finalize_request(host);
++ return;
++ }
++
++ PIODBG("pio_write(): new source: [%i]@[%p]\n",
++ host->pio_words, host->pio_ptr);
++
++ }
++
++ if (fifo > host->pio_words)
++ fifo = host->pio_words;
++
++ host->pio_words-= fifo;
++
++ while (fifo--)
++ writel(*(host->pio_ptr++), to_ptr);
++ }
++}
++
++static inline u32 enable_imask(struct s3c2410sdi_host *host, u32 imask)
++{
++ u32 newmask;
++
++ newmask = readl(host->base + ((host->is2440)?S3C2440_SDIIMSK:S3C2410_SDIIMSK));
++ newmask|= imask;
++
++ writel(newmask, host->base + ((host->is2440)?S3C2440_SDIIMSK:S3C2410_SDIIMSK));
++
++ return newmask;
++}
++
+ /*
+ * ISR for SDI Interface IRQ
+ * Communication between driver and ISR works as follows:
+@@ -72,490 +314,757 @@
+ * 7) ISR completes host->complete_request
+ * 8) ISR disables interrupts
+ * 9) Driver wakes up and takes care of the request
+-*/
++ *
++ * Note: "->error"-fields are expected to be set to 0 before the request
++ * was issued by mmc.c - therefore they are only set, when an error
++ * contition comes up
++ */
+
+ static irqreturn_t s3c2410sdi_irq(int irq, void *dev_id, struct pt_regs *regs)
+ {
+ struct s3c2410sdi_host *host;
+- u32 sdi_csta, sdi_dsta, sdi_dcnt;
++ struct mmc_command *cmd;
++ u32 sdi_csta, sdi_dsta, sdi_fsta, sdi_dcnt, sdi_imsk;
+ u32 sdi_cclear, sdi_dclear;
+ unsigned long iflags;
++ char *reason = "unknown";
+
+ host = (struct s3c2410sdi_host *)dev_id;
+
+- /* Check for things not supposed to happen */
+- if(!host) return IRQ_HANDLED;
++ if (!host)
++ return IRQ_NONE;
+
++ spin_lock_irqsave( &host->complete_lock, iflags);
++
+ sdi_csta = readl(host->base + S3C2410_SDICMDSTAT);
+ sdi_dsta = readl(host->base + S3C2410_SDIDSTA);
+ sdi_dcnt = readl(host->base + S3C2410_SDIDCNT);
+-
+- DBG(PFX "IRQ csta=0x%08x dsta=0x%08x dcnt:0x%08x\n", sdi_csta, sdi_dsta, sdi_dcnt);
+-
+- spin_lock_irqsave( &host->complete_lock, iflags);
+-
+- if( host->complete_what==COMPLETION_NONE ) {
++ sdi_fsta = readl(host->base + S3C2410_SDIFSTA);
++ sdi_imsk = readl(host->base + ((host->is2440)?S3C2440_SDIIMSK:S3C2410_SDIIMSK));
++ sdi_cclear = 0;
++ sdi_dclear = 0;
++
++ if (host->complete_what == COMPLETION_NONE ) {
++ reason = "nothing to complete";
+ goto clear_imask;
+ }
+-
+- if(!host->mrq) {
++
++ if (!host->mrq) {
++ reason = "no active mrq";
+ goto clear_imask;
+ }
+
++ cmd = host->cmd_is_stop?host->mrq->stop:host->mrq->cmd;
+
+- sdi_csta = readl(host->base + S3C2410_SDICMDSTAT);
++ if (!cmd) {
++ reason = "no active cmd";
++ goto clear_imask;
++ }
++
++ if (!host->dodma) {
++ if ((host->pio_active == XFER_WRITE) &&
++ (sdi_fsta & S3C2410_SDIFSTA_TFDET))
++ do_pio_write(host);
++ if ((host->pio_active == XFER_READ) &&
++ (sdi_fsta & S3C2410_SDIFSTA_RFDET))
++ do_pio_read(host);
++ }
+ sdi_dsta = readl(host->base + S3C2410_SDIDSTA);
+- sdi_dcnt = readl(host->base + S3C2410_SDIDCNT);
+- sdi_cclear = 0;
+- sdi_dclear = 0;
+-
+-
+- if(sdi_csta & S3C2410_SDICMDSTAT_CMDTIMEOUT) {
+- host->mrq->cmd->error = MMC_ERR_TIMEOUT;
+- goto transfer_closed;
++ sdi_fsta = readl(host->base + S3C2410_SDIFSTA);
++
++ if (sdi_csta & S3C2410_SDICMDSTAT_CMDTIMEOUT) {
++ cmd->error = MMC_ERR_TIMEOUT;
++ reason = "error: command timeout";
++ goto close_transfer;
+ }
+
+- if(sdi_csta & S3C2410_SDICMDSTAT_CMDSENT) {
+- if(host->complete_what == COMPLETION_CMDSENT) {
+- host->mrq->cmd->error = MMC_ERR_NONE;
+- goto transfer_closed;
+- }
++ if (sdi_csta & S3C2410_SDICMDSTAT_CMDSENT) {
++ if (host->complete_what == COMPLETION_CMDSENT) {
++ reason = "ok: command sent";
++ goto close_transfer;
++ }
+
+ sdi_cclear |= S3C2410_SDICMDSTAT_CMDSENT;
+ }
+
+- if(sdi_csta & S3C2410_SDICMDSTAT_CRCFAIL) {
+- if (host->mrq->cmd->flags & MMC_RSP_136) {
+- DBG(PFX "s3c2410 fixup : ignore CRC fail with long rsp\n");
+- }
+- else {
+- DBG(PFX "COMMAND CRC FAILED %x\n", sdi_csta);
+- if(host->mrq->cmd->flags & MMC_RSP_CRC) {
+- host->mrq->cmd->error = MMC_ERR_BADCRC;
+- goto transfer_closed;
+- }
++ if (sdi_csta & S3C2410_SDICMDSTAT_CRCFAIL) {
++ #if 0
++ if (cmd->flags & MMC_RSP_CRC) {
++ cmd->error = MMC_ERR_BADCRC;
++ reason = "error: bad command crc";
++ goto close_transfer;
+ }
++ #endif
++
+ sdi_cclear |= S3C2410_SDICMDSTAT_CRCFAIL;
+ }
+
+- if(sdi_csta & S3C2410_SDICMDSTAT_RSPFIN) {
+- if(host->complete_what == COMPLETION_RSPFIN) {
+- host->mrq->cmd->error = MMC_ERR_NONE;
+- goto transfer_closed;
++ if (sdi_csta & S3C2410_SDICMDSTAT_RSPFIN) {
++ if (host->complete_what == COMPLETION_RSPFIN) {
++ reason = "ok: command response received";
++ goto close_transfer;
+ }
+
+- if(host->complete_what == COMPLETION_XFERFINISH_RSPFIN) {
+- host->mrq->cmd->error = MMC_ERR_NONE;
++ if (host->complete_what == COMPLETION_XFERFINISH_RSPFIN)
+ host->complete_what = COMPLETION_XFERFINISH;
+- }
+-
++
+ sdi_cclear |= S3C2410_SDICMDSTAT_RSPFIN;
+ }
+
+- if(sdi_dsta & S3C2410_SDIDSTA_FIFOFAIL) {
+- host->mrq->cmd->error = MMC_ERR_NONE;
++ /* errors handled after this point are only relevant
++ when a data transfer is in progress */
++ if (!cmd->data)
++ goto clear_status_bits;
++
++ /* Check for FIFO failure on 2410 */
++ if ((!host->is2440) && (sdi_dsta & S3C2410_SDIDSTA_FIFOFAIL)) {
++ cmd->data->error = MMC_ERR_FIFO;
++ reason = "error: 2410 fifo failure";
++ goto close_transfer;
++ }
++
++ /* Check for FIFO failure on 2440 */
++ if ((host->is2440) && (sdi_fsta & S3C2440_SDIFSTA_FIFOFAIL)) {
+ host->mrq->data->error = MMC_ERR_FIFO;
+- goto transfer_closed;
++ reason = "error: 2440 fifo failure";
++ goto close_transfer;
+ }
+
+- if(sdi_dsta & S3C2410_SDIDSTA_RXCRCFAIL) {
+- host->mrq->cmd->error = MMC_ERR_NONE;
+- host->mrq->data->error = MMC_ERR_BADCRC;
+- goto transfer_closed;
++ if (sdi_dsta & S3C2410_SDIDSTA_RXCRCFAIL) {
++ cmd->data->error = MMC_ERR_BADCRC;
++ reason = "error: bad data crc (outgoing)";
++ goto close_transfer;
+ }
+
+- if(sdi_dsta & S3C2410_SDIDSTA_CRCFAIL) {
+- DBG(PFX "DATA CRC FAILED %u\n", sdi_csta);
+- host->mrq->cmd->error = MMC_ERR_NONE;
+- host->mrq->data->error = MMC_ERR_BADCRC;
+- goto transfer_closed;
++ if (sdi_dsta & S3C2410_SDIDSTA_CRCFAIL) {
++ cmd->data->error = MMC_ERR_BADCRC;
++ reason = "error: bad data crc (incoming)";
++ goto close_transfer;
+ }
+
+- if(sdi_dsta & S3C2410_SDIDSTA_DATATIMEOUT) {
+- host->mrq->cmd->error = MMC_ERR_NONE;
+- host->mrq->data->error = MMC_ERR_TIMEOUT;
+- goto transfer_closed;
++ if (sdi_dsta & S3C2410_SDIDSTA_DATATIMEOUT) {
++ cmd->data->error = MMC_ERR_TIMEOUT;
++ reason = "error: data timeout";
++ goto close_transfer;
+ }
+
+- if(sdi_dsta & S3C2410_SDIDSTA_XFERFINISH) {
+- if(host->complete_what == COMPLETION_XFERFINISH) {
+- host->mrq->cmd->error = MMC_ERR_NONE;
+- host->mrq->data->error = MMC_ERR_NONE;
+- goto transfer_closed;
++ if (sdi_dsta & S3C2410_SDIDSTA_XFERFINISH) {
++ if (host->complete_what == COMPLETION_XFERFINISH) {
++ reason = "ok: data transfer completed";
++ goto close_transfer;
+ }
+
+- if(host->complete_what == COMPLETION_XFERFINISH_RSPFIN) {
+- host->mrq->data->error = MMC_ERR_NONE;
++ if (host->complete_what == COMPLETION_XFERFINISH_RSPFIN)
+ host->complete_what = COMPLETION_RSPFIN;
+- }
+
+ sdi_dclear |= S3C2410_SDIDSTA_XFERFINISH;
+ }
+-
++
++clear_status_bits:
+ writel(sdi_cclear, host->base + S3C2410_SDICMDSTAT);
+ writel(sdi_dclear, host->base + S3C2410_SDIDSTA);
+
+- spin_unlock_irqrestore( &host->complete_lock, iflags);
+- DBG(PFX "IRQ still waiting.\n");
+- return IRQ_HANDLED;
++ goto irq_out;
+
+-
+-transfer_closed:
+- writel(sdi_cclear, host->base + S3C2410_SDICMDSTAT);
+- writel(sdi_dclear, host->base + S3C2410_SDIDSTA);
++close_transfer:
+ host->complete_what = COMPLETION_NONE;
+- complete(&host->complete_request);
+- writel(0, host->base + S3C2410_SDIIMSK);
+- if (host->mrq->data && host->mrq->data->error != MMC_ERR_NONE)
+- complete(&host->complete_dma);
+- spin_unlock_irqrestore( &host->complete_lock, iflags);
+- DBG(PFX "IRQ transfer closed.\n");
+- return IRQ_HANDLED;
+-
++ host->pio_active = XFER_NONE;
++
++ writel(0, host->base + ((host->is2440)?S3C2440_SDIIMSK:S3C2410_SDIIMSK));
++ disable_irq_nosync(host->irq);
++
++ finalize_request(host);
++
++ goto irq_out;
++
+ clear_imask:
+- writel(0, host->base + S3C2410_SDIIMSK);
++ writel(0, host->base + ((host->is2440)?S3C2440_SDIIMSK:S3C2410_SDIIMSK));
++ disable_irq_nosync(host->irq);
++
++irq_out:
++ INTDBG("csta=0x%08x dsta=0x%08x fsta=0x%08x dcnt:0x%08x status:%s.\n",
++ sdi_csta, sdi_dsta, sdi_fsta, sdi_dcnt, reason);
++
+ spin_unlock_irqrestore( &host->complete_lock, iflags);
+- DBG(PFX "IRQ clear imask.\n");
+ return IRQ_HANDLED;
+
+ }
+
+-
+-/*
+- * ISR for the CardDetect Pin
+-*/
++/* ISR for the CardDetect Pin */
+
+ static irqreturn_t s3c2410sdi_irq_cd(int irq, void *dev_id, struct pt_regs *regs)
+ {
+ struct s3c2410sdi_host *host = (struct s3c2410sdi_host *)dev_id;
+- mmc_detect_change(host->mmc, S3C2410SDI_CDLATENCY);
+-
++ mmc_detect_change(host->mmc, 0);
++
+ return IRQ_HANDLED;
+ }
+
+-
+-
+-static void s3c2410sdi_dma_done_callback(s3c2410_dma_chan_t *dma_ch, void *buf_id,
+- int size, s3c2410_dma_buffresult_t result)
++void s3c2410sdi_dma_done_callback(s3c2410_dma_chan_t *dma_ch, void *buf_id,
++ int size, s3c2410_dma_buffresult_t result)
+ { unsigned long iflags;
+- u32 sdi_csta, sdi_dsta,sdi_dcnt;
++ u32 sdi_csta, sdi_dsta, sdi_fsta, sdi_dcnt;
+ struct s3c2410sdi_host *host = (struct s3c2410sdi_host *)buf_id;
+-
+- sdi_csta = readl(host->base + S3C2410_SDICMDSTAT);
+- sdi_dsta = readl(host->base + S3C2410_SDIDSTA);
+- sdi_dcnt = readl(host->base + S3C2410_SDIDCNT);
+-
+- DBG(PFX "DMAD csta=0x%08x dsta=0x%08x dcnt:0x%08x result:0x%08x\n", sdi_csta, sdi_dsta, sdi_dcnt, result);
+-
+- spin_lock_irqsave( &host->complete_lock, iflags);
+-
+- if(!host->mrq) goto out;
+- if(!host->mrq->data) goto out;
+-
+-
++
+ sdi_csta = readl(host->base + S3C2410_SDICMDSTAT);
+ sdi_dsta = readl(host->base + S3C2410_SDIDSTA);
++ sdi_fsta = readl(host->base + S3C2410_SDIFSTA);
+ sdi_dcnt = readl(host->base + S3C2410_SDIDCNT);
+-
+- if( result!=S3C2410_RES_OK ) {
++
++ if (!host->mrq)
++ return;
++ if (!host->mrq->data)
++ return;
++ if (!host->dmatogo)
++ return;
++
++ spin_lock_irqsave(&host->complete_lock, iflags);
++
++ if (result != S3C2410_RES_OK) {
++ FAILDBG("DMA FAILED: csta=0x%08x dsta=0x%08x fsta=0x%08x "
++ "dcnt:0x%08x result:0x%08x togo:%u\n",
++ sdi_csta, sdi_dsta, sdi_fsta, sdi_dcnt, result,
++ host->dmatogo);
+ goto fail_request;
+ }
+
+-
+- if(host->mrq->data->flags & MMC_DATA_READ) {
+- if( sdi_dcnt>0 ) {
+- goto fail_request;
+- }
+- }
+-
+-out:
+- complete(&host->complete_dma);
++ host->dmatogo--;
++ if (host->dmatogo) {
++ DMADBG("DMA DONE %i (%i) togo DSTA:[%08x] DCNT:[%08x]\n",
++ host->dmatogo, size, sdi_dsta, sdi_dcnt);
++ goto out;
++ }
++
++ host->dma_complete = 1;
++ DMADBG("DMA FINISHED (%i) DSTA:[%08x] DCNT:[%08x]\n", size,
++ sdi_dsta, sdi_dcnt);
++ finalize_request(host);
++
++out:
+ spin_unlock_irqrestore( &host->complete_lock, iflags);
+ return;
+
+
+ fail_request:
+- host->mrq->data->error = MMC_ERR_FAILED;
++ host->mrq->data->error = MMC_ERR_DMA;
+ host->complete_what = COMPLETION_NONE;
+- complete(&host->complete_request);
+- writel(0, host->base + S3C2410_SDIIMSK);
++ host->dma_complete = 1;
++ writel(0, host->base + ((host->is2440)?S3C2440_SDIIMSK:S3C2410_SDIIMSK));
++ finalize_request(host);
+ goto out;
+
+ }
+
++#define DBGCMD(x, args...) do { \
++ if (fail) { \
++ FAILDBG(x, ## args); \
++ debug_dump_registers(host, ""); \
++ } else \
++ DBG(x, ## args); \
++ } while (0)
+
+-static void s3c2410sdi_dma_setup(struct s3c2410sdi_host *host, s3c2410_dmasrc_t source) {
+-
+- s3c2410_dma_devconfig(host->dma, source, 3, host->mem->start + S3C2410_SDIDATA);
+- s3c2410_dma_config(host->dma, 4, (1<<23) | (2<<24));
+- s3c2410_dma_set_buffdone_fn(host->dma, s3c2410sdi_dma_done_callback);
+- s3c2410_dma_setflags(host->dma, S3C2410_DMAF_AUTOSTART);
+-}
+
+-static void s3c2410sdi_request(struct mmc_host *mmc, struct mmc_request *mrq) {
+- struct s3c2410sdi_host *host = mmc_priv(mmc);
+- struct device *dev = mmc_dev(host->mmc);
+- struct platform_device *pdev = to_platform_device(dev);
+- u32 sdi_carg, sdi_ccon, sdi_timer;
+- u32 sdi_bsize, sdi_dcon, sdi_imsk;
+- int dma_len = 0;
++static void debug_command(struct s3c2410sdi_host *host,
++ struct mmc_command *cmd, int fail)
++{
++ if (!cmd)
++ return;
+
+- DBG(PFX "request: [CMD] opcode:0x%02x arg:0x%08x flags:%x retries:%u\n",
+- mrq->cmd->opcode, mrq->cmd->arg, mrq->cmd->flags, mrq->cmd->retries);
+- DBG(PFX "request : %s mode\n",mmc->mode == MMC_MODE_MMC ? "mmc" : "sd");
++ if (cmd->error == MMC_ERR_NONE)
++ DBGCMD("CMD[OK] %s R0:[0x%08x]\n", host->dbgmsg_cmd,
++ cmd->resp[0]);
++ else
++ DBGCMD("CMD[%s] %s\n", err2str(cmd->error),
++ host->dbgmsg_cmd);
+
++ if (!cmd->data)
++ return;
++
++ if (cmd->data->error == MMC_ERR_NONE)
++ DBGCMD("DAT[%s] %s\n", err2str(cmd->data->error),
++ host->dbgmsg_dat);
++ else
++ DBGCMD("DAT[%s] %s DCNT:[0x%08x]\n",
++ err2str(cmd->data->error), host->dbgmsg_dat,
++ readl(host->base + S3C2410_SDIDCNT));
++}
+
+- sdi_ccon = mrq->cmd->opcode & S3C2410_SDICMDCON_INDEX;
+- sdi_ccon|= S3C2410_SDICMDCON_SENDERHOST;
+- sdi_ccon|= S3C2410_SDICMDCON_CMDSTART;
++static void finalize_request(struct s3c2410sdi_host *host)
++{
++ struct mmc_request *mrq = host->mrq;
++ struct mmc_command *cmd = host->cmd_is_stop?mrq->stop:mrq->cmd;
++ int debug_as_failure = 0;
++
++ if (host->complete_what != COMPLETION_NONE)
++ return;
++
++ if (cmd->data && (cmd->error == MMC_ERR_NONE) &&
++ (cmd->data->error == MMC_ERR_NONE)) {
++ if (!host->dma_complete) {
++ DBG("DMA Missing!\n");
++ //s3c2410_dma_debug_channel(host->dma);
++ return;
++ }
++ }
+
+- sdi_carg = mrq->cmd->arg;
++ /* Read response */
++ cmd->resp[0] = readl(host->base + S3C2410_SDIRSP0);
++ cmd->resp[1] = readl(host->base + S3C2410_SDIRSP1);
++ cmd->resp[2] = readl(host->base + S3C2410_SDIRSP2);
++ cmd->resp[3] = readl(host->base + S3C2410_SDIRSP3);
++
++ /* FIX2410: reset clock speed, as it could still be set low for 2410 */
++ writel(host->prescaler, host->base + S3C2410_SDIPRE);
++ //writel(0xff, host->base + S3C2410_SDIPRE);
++
++ if (cmd->error)
++ debug_as_failure = 1;
++ if (cmd->data && cmd->data->error)
++ debug_as_failure = 1;
++ //if(cmd->flags & MMC_RSP_MAYFAIL) debug_as_failure = 0;
+
+- sdi_timer= 0xFFFF;
++ debug_command(host, cmd, debug_as_failure);
+
+- sdi_bsize= 0;
+- sdi_dcon = 0;
+- sdi_imsk = 0;
++ /* Cleanup controller */
++ writel(0, host->base + S3C2410_SDICMDARG);
++ writel(0, host->base + S3C2410_SDIDCON);
++ writel(0, host->base + S3C2410_SDICMDCON);
++ writel(0, host->base + ((host->is2440)?S3C2440_SDIIMSK:S3C2410_SDIIMSK));
+
+- /* enable interrupts for transmission errors */
+- sdi_imsk |= S3C2410_SDIIMSK_RESPONSEND;
+- sdi_imsk |= S3C2410_SDIIMSK_CRCSTATUS;
++ if (cmd->data && cmd->error)
++ cmd->data->error = cmd->error;
+
+- host->complete_what = COMPLETION_CMDSENT;
++ if (cmd->data && cmd->data->stop && (!host->cmd_is_stop)) {
++ host->cmd_is_stop = 1;
++ s3c2410sdi_send_request(host->mmc);
++ return;
++ }
++
++ /* If we have no data transfer we are finished here */
++ if (!mrq->data)
++ goto request_done;
++
++ /* Calulate the amout of bytes transfer, but only if no error */
++ if (mrq->data->error == MMC_ERR_NONE)
++ mrq->data->bytes_xfered =
++ (mrq->data->blocks << mrq->data->blksz_bits);
++ else
++ mrq->data->bytes_xfered = 0;
+
+- if (mrq->cmd->flags & MMC_RSP_PRESENT) {
+- host->complete_what = COMPLETION_RSPFIN;
++ /* If we had an error while transfering data we flush the
++ * DMA channel and the fifo to clear out any garbage */
++ if (mrq->data->error != MMC_ERR_NONE) {
++ if (host->dodma)
++ s3c2410_dma_ctrl(host->dma, S3C2410_DMAOP_FLUSH);
++
++ if (host->is2440) {
++ /* Clear failure register and reset fifo */
++ writel(S3C2440_SDIFSTA_FIFORESET |
++ S3C2440_SDIFSTA_FIFOFAIL,
++ host->base + S3C2410_SDIFSTA);
++ } else {
++ u32 sdi_con;
+
+- sdi_ccon |= S3C2410_SDICMDCON_WAITRSP;
+- sdi_imsk |= S3C2410_SDIIMSK_CMDTIMEOUT;
++ /* reset fifo */
++ sdi_con = readl(host->base + S3C2410_SDICON);
++ sdi_con|= S3C2410_SDICON_FIFORESET;
+
+- } else {
+- /* We need the CMDSENT-Interrupt only if we want are not waiting
+- * for a response
+- */
+- sdi_imsk |= S3C2410_SDIIMSK_CMDSENT;
++ writel(sdi_con, host->base + S3C2410_SDICON);
++ }
+ }
+
+- if(mrq->cmd->flags & MMC_RSP_136) {
+- sdi_ccon|= S3C2410_SDICMDCON_LONGRSP;
++request_done:
++ host->mrq = NULL;
++ mmc_request_done(host->mmc, mrq);
++}
++
++
++void s3c2410sdi_dma_setup(struct s3c2410sdi_host *host, eDMAPurpose_t purpose)
++{
++ static int setup_ok = 0;
++ static eDMAPurpose_t lp = -1;
++ s3c2410_dmasrc_t source;
++
++ if (lp == purpose)
++ return;
++
++ lp = purpose;
++
++ switch (purpose) {
++ case DMAP_READ:
++ source = S3C2410_DMASRC_HW;
++ break;
++
++ case DMAP_WRITE:
++ source = S3C2410_DMASRC_MEM;
++ break;
++
++ default:
++ return;
+ }
+
+- if(mrq->cmd->flags & MMC_RSP_CRC) {
+- sdi_imsk |= S3C2410_SDIIMSK_RESPONSECRC;
++ s3c2410_dma_devconfig(host->dma, source, 3, host->mem->start +
++ ((host->is2440)?S3C2440_SDIDATA:S3C2410_SDIDATA), 2);
++ if (!setup_ok) {
++ s3c2410_dma_config(host->dma, 4, (1<<23));
++ s3c2410_dma_set_buffdone_fn(host->dma,
++ s3c2410sdi_dma_done_callback);
++ s3c2410_dma_setflags(host->dma, S3C2410_DMAF_AUTOSTART);
++ setup_ok = 1;
+ }
++}
+
++static void s3c2440sdi_send_command(struct s3c2410sdi_host *host,
++ struct mmc_command *cmd)
++{
++ u32 ccon, imsk;
+
+- if (mrq->data) {
+- host->complete_what = COMPLETION_XFERFINISH_RSPFIN;
++ imsk = S3C2410_SDIIMSK_CRCSTATUS | S3C2410_SDIIMSK_CMDTIMEOUT |
++ S3C2410_SDIIMSK_RESPONSEND | S3C2410_SDIIMSK_CMDSENT |
++ S3C2410_SDIIMSK_RESPONSECRC;
+
+- sdi_bsize = (1 << mrq->data->blksz_bits);
+- host->size = mrq->data->blocks << mrq->data->blksz_bits;
++ enable_imask(host, imsk);
+
+- sdi_dcon = (mrq->data->blocks & S3C2410_SDIDCON_BLKNUM_MASK);
+- sdi_dcon |= S3C2410_SDIDCON_DMAEN;
++ if (cmd->data)
++ host->complete_what = COMPLETION_XFERFINISH_RSPFIN;
++ else if (cmd->flags & MMC_RSP_MASK)
++ host->complete_what = COMPLETION_RSPFIN;
++ else
++ host->complete_what = COMPLETION_CMDSENT;
+
+- sdi_imsk |= S3C2410_SDIIMSK_FIFOFAIL;
+- sdi_imsk |= S3C2410_SDIIMSK_DATACRC;
+- sdi_imsk |= S3C2410_SDIIMSK_DATATIMEOUT;
+- sdi_imsk |= S3C2410_SDIIMSK_DATAFINISH;
+- sdi_imsk |= 0xFFFFFFE0;
++ writel(cmd->arg, host->base + S3C2410_SDICMDARG);
+
+- DBG(PFX "request: [DAT] bsize:%u blocks:%u bytes:%u\n",
+- sdi_bsize, mrq->data->blocks, mrq->data->blocks * sdi_bsize);
++ ccon = cmd->opcode & S3C2410_SDICMDCON_INDEX;
++ ccon|= S3C2410_SDICMDCON_SENDERHOST | S3C2410_SDICMDCON_CMDSTART;
+
+- if (host->bus_width == MMC_BUS_WIDTH_4) {
+- sdi_dcon |= S3C2410_SDIDCON_WIDEBUS;
+- }
++ if (cmd->flags & MMC_RSP_MASK)
++ ccon |= S3C2410_SDICMDCON_WAITRSP;
++
++ if (cmd->flags & MMC_RSP_136)
++ ccon|= S3C2410_SDICMDCON_LONGRSP;
++ /*
++ DBG("Sending Command: CCON:[%08X] DCON:[%08X] BSIZE:[%08X] IMASK:[%08X] DCNT:[%08X]\n",
++ ccon, readl(host->base + S3C2410_SDIDCON), readl(host->base + S3C2410_SDIBSIZE),
++ readl(host->base + ((host->is2440)?S3C2440_SDIIMSK:S3C2410_SDIIMSK)),
++ readl(host->base + S3C2410_SDIDCNT));
++ */
++ writel(ccon, host->base + S3C2410_SDICMDCON);
++}
+
+- if(!(mrq->data->flags & MMC_DATA_STREAM)) {
+- sdi_dcon |= S3C2410_SDIDCON_BLOCKMODE;
+- }
++static int s3c2440sdi_setup_data(struct s3c2410sdi_host *host,
++ struct mmc_data *data)
++{
++ u32 dcon, imsk, stoptries=3;
+
+- if(mrq->data->flags & MMC_DATA_WRITE) {
+- sdi_dcon |= S3C2410_SDIDCON_TXAFTERRESP;
+- sdi_dcon |= S3C2410_SDIDCON_XFER_TXSTART;
++ /* write DCON register */
++
++ if (!data) {
++ writel(0, host->base + S3C2410_SDIDCON);
++ return 0;
++ }
++
++ while (readl(host->base + S3C2410_SDIDSTA) &
++ (S3C2410_SDIDSTA_TXDATAON | S3C2410_SDIDSTA_RXDATAON)) {
++ ERR("sdi_setup_data() transfer in progress. Trying to stop...\n");
++
++ writel(0, host->base + S3C2410_SDIDCON);
++ s3c2410sdi_reset(host);
++
++ if(0 == (stoptries--)) {
++ debug_dump_registers(host, "Data recovery:");
++
++ /* TODO: get Controller out of data transfer mode */
++ return -EINVAL;
+ }
++ }
++
++ dcon = data->blocks & S3C2410_SDIDCON_BLKNUM_MASK;
++
++ if (host->dodma)
++ dcon |= S3C2410_SDIDCON_DMAEN;
+
+- if(mrq->data->flags & MMC_DATA_READ) {
+- sdi_dcon |= S3C2410_SDIDCON_RXAFTERCMD;
+- sdi_dcon |= S3C2410_SDIDCON_XFER_RXSTART;
+- }
++ if (host->mmc->ios.bus_width == MMC_BUS_WIDTH_4)
++ dcon |= S3C2410_SDIDCON_WIDEBUS;
+
+- s3c2410sdi_dma_setup(host, mrq->data->flags & MMC_DATA_WRITE ? S3C2410_DMASRC_MEM : S3C2410_DMASRC_HW);
++ if (!(data->flags & MMC_DATA_STREAM))
++ dcon |= S3C2410_SDIDCON_BLOCKMODE;
++
++ if (data->flags & MMC_DATA_WRITE) {
++ dcon |= S3C2410_SDIDCON_TXAFTERRESP;
++ dcon |= S3C2410_SDIDCON_XFER_TXSTART;
++ }
+
+- /* see DMA-API.txt */
+- dma_len = dma_map_sg(&pdev->dev, mrq->data->sg, \
+- mrq->data->sg_len, \
+- mrq->data->flags & MMC_DATA_READ ? DMA_FROM_DEVICE : DMA_TO_DEVICE);
+-
+- /* start DMA */
+- s3c2410_dma_enqueue(host->dma, (void *) host,
+- sg_dma_address(&mrq->data->sg[0]),
+- (mrq->data->blocks << mrq->data->blksz_bits) );
++ if (data->flags & MMC_DATA_READ) {
++ dcon |= S3C2410_SDIDCON_RXAFTERCMD;
++ dcon |= S3C2410_SDIDCON_XFER_RXSTART;
+ }
+
+- host->mrq = mrq;
++ if (host->is2440) {
++ dcon |= S3C2440_SDIDCON_DS_WORD;
++ dcon |= S3C2440_SDIDCON_DATSTART;
++ }
+
+- init_completion(&host->complete_request);
+- init_completion(&host->complete_dma);
++ writel(dcon, host->base + S3C2410_SDIDCON);
+
+- /* Clear command and data status registers */
+- writel(0xFFFFFFFF, host->base + S3C2410_SDICMDSTAT);
+- writel(0xFFFFFFFF, host->base + S3C2410_SDIDSTA);
++ writel((1 << data->blksz_bits), host->base + S3C2410_SDIBSIZE);
++
++ imsk = S3C2410_SDIIMSK_FIFOFAIL | S3C2410_SDIIMSK_DATACRC |
++ S3C2410_SDIIMSK_DATATIMEOUT | S3C2410_SDIIMSK_DATAFINISH;
++
++ enable_imask(host, imsk);
+
+- /* Setup SDI controller */
+- writel(sdi_bsize,host->base + S3C2410_SDIBSIZE);
+- writel(sdi_timer,host->base + S3C2410_SDITIMER);
+- writel(sdi_imsk,host->base + S3C2410_SDIIMSK);
+-
+- /* Setup SDI command argument and data control */
+- writel(sdi_carg, host->base + S3C2410_SDICMDARG);
+- writel(sdi_dcon, host->base + S3C2410_SDIDCON);
+-
+- /* This initiates transfer */
+- writel(sdi_ccon, host->base + S3C2410_SDICMDCON);
+-
+- /* Wait for transfer to complete */
+- wait_for_completion(&host->complete_request);
+- DBG(PFX "[CMD] request complete.\n");
+- if(mrq->data) {
+- wait_for_completion(&host->complete_dma);
+- DBG(PFX "[DAT] DMA complete.\n");
++ if (host->is2440)
++ writel(0x007FFFFF, host->base + S3C2410_SDITIMER);
++ else {
++ writel(0x0000FFFF, host->base + S3C2410_SDITIMER);
++
++ /*FIX2410: set slow clock to prevent timeouts on read*/
++ if (data->flags & MMC_DATA_READ)
++ writel(255, host->base + S3C2410_SDIPRE);
+ }
++
++ //debug_dump_registers(host, "Data setup:");
+
+- /* Cleanup controller */
+- writel(0, host->base + S3C2410_SDICMDARG);
+- writel(0, host->base + S3C2410_SDIDCON);
+- writel(0, host->base + S3C2410_SDICMDCON);
+- writel(0, host->base + S3C2410_SDIIMSK);
++ return 0;
++}
+
+- /* Read response */
+- mrq->cmd->resp[0] = readl(host->base + S3C2410_SDIRSP0);
+- mrq->cmd->resp[1] = readl(host->base + S3C2410_SDIRSP1);
+- mrq->cmd->resp[2] = readl(host->base + S3C2410_SDIRSP2);
+- mrq->cmd->resp[3] = readl(host->base + S3C2410_SDIRSP3);
++static int s3c2440sdi_prepare_pio(struct s3c2410sdi_host *host,
++ struct mmc_data *data)
++{
++ int rw = (data->flags & MMC_DATA_WRITE)?1:0;
++ if(rw != ((data->flags & MMC_DATA_READ)?0:1)) return -EINVAL;
+
+- host->mrq = NULL;
++ host->pio_sgptr = 0;
++ host->pio_words = 0;
++ host->pio_active = rw?XFER_WRITE:XFER_READ;
++
++ if(rw) enable_imask(host, S3C2410_SDIIMSK_TXFIFOHALF);
++ else enable_imask(host, S3C2410_SDIIMSK_RXFIFOHALF | S3C2410_SDIIMSK_RXFIFOFULL);
+
+- DBG(PFX "request done.\n");
++ return 0;
++}
+
+- /* If we have no data transfer we are finished here */
+- if (!mrq->data) goto request_done;
++static int s3c2440sdi_prepare_dma(struct s3c2410sdi_host *host,
++ struct mmc_data *data)
++{
++ int dma_len, i;
++ int rw = (data->flags & MMC_DATA_WRITE)?1:0;
+
+- dma_unmap_sg(&pdev->dev, mrq->data->sg, dma_len, \
+- mrq->data->flags & MMC_DATA_READ ? DMA_FROM_DEVICE : DMA_TO_DEVICE);
++ if (rw != ((data->flags & MMC_DATA_READ)?0:1))
++ return -EINVAL;
+
+- /* Calulate the amout of bytes transfer, but only if there was
+- * no error
+- */
+- if(mrq->data->error == MMC_ERR_NONE) {
+- mrq->data->bytes_xfered = (mrq->data->blocks << mrq->data->blksz_bits);
+- } else {
+- mrq->data->bytes_xfered = 0;
+- }
++ s3c2410sdi_dma_setup(host, rw?DMAP_WRITE:DMAP_READ);
++ s3c2410_dma_ctrl(host->dma, S3C2410_DMAOP_FLUSH);
++
++ dma_len = dma_map_sg(mmc_dev(host->mmc), data->sg, data->sg_len,
++ (rw)?DMA_TO_DEVICE:DMA_FROM_DEVICE);
++
+
+- /* If we had an error while transfering data we flush the
+- * DMA channel to clear out any garbage
+- */
+- if(mrq->data->error != MMC_ERR_NONE) {
+- s3c2410_dma_ctrl(host->dma, S3C2410_DMAOP_FLUSH);
+- DBG(PFX "flushing DMA.\n");
+- }
++ if (dma_len == 0)
++ return -ENOMEM;
++
++ host->dma_complete = 0;
++ host->dmatogo = dma_len;
++
++ for (i = 0; i < dma_len; i++) {
++ int res;
++ DBG("dma_enqueue %i:[%u]@[%u]\n", i,
++ sg_dma_address(&data->sg[i]), sg_dma_len(&data->sg[i]));
++ res = s3c2410_dma_enqueue(host->dma, (void *) host,
++ sg_dma_address(&data->sg[i]),
++ sg_dma_len(&data->sg[i]));
++
++ if (res) {
++ s3c2410_dma_ctrl(host->dma, S3C2410_DMAOP_FLUSH);
++ return -EBUSY;
++ }
++ }
++
++ //s3c2410_dma_ctrl(host->dma, S3C2410_DMAOP_START);
++
++ return 0;
++}
+
+- if(mrq->data->stop) mmc_wait_for_cmd(mmc, mrq->data->stop, 3);
++static void s3c2410sdi_send_request(struct mmc_host *mmc)
++{
++ struct s3c2410sdi_host *host = mmc_priv(mmc);
++ struct mmc_request *mrq = host->mrq;
++ struct mmc_command *cmd = host->cmd_is_stop?mrq->stop:mrq->cmd;
++
++ /* Increment request counters */
++ host->ccnt++;
++
++ if (cmd->data)
++ host->dcnt++;
++
++ prepare_dbgmsg(host, cmd, host->cmd_is_stop);
++
++ /* Clear command, data and fifo status registers
++ * Fifo clear only necessary on 2440, but doesn't hurt on 2410 */
++ writel(0xFFFFFFFF, host->base + S3C2410_SDICMDSTAT);
++ writel(0xFFFFFFFF, host->base + S3C2410_SDIDSTA);
++ writel(0xFFFFFFFF, host->base + S3C2410_SDIFSTA);
+
+-request_done:
++ if (cmd->data) {
++ int res;
++ res = s3c2440sdi_setup_data(host, cmd->data);
++
++ if(res) {
++ cmd->error = MMC_ERR_DMA;
++ cmd->data->error = MMC_ERR_DMA;
++
++ mmc_request_done(mmc, mrq);
++ return;
++ }
+
+- mrq->done(mrq);
++
++ if (host->dodma)
++ res = s3c2440sdi_prepare_dma(host, cmd->data);
++ else
++ res = s3c2440sdi_prepare_pio(host, cmd->data);
++
++ if (res) {
++ cmd->error = MMC_ERR_DMA;
++ cmd->data->error = MMC_ERR_DMA;
++
++ mmc_request_done(mmc, mrq);
++ return;
++ }
++
++ }
++
++ s3c2440sdi_send_command(host, cmd);
++ enable_irq(host->irq);
+ }
+
+-static void s3c2410sdi_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) {
++static void s3c2410sdi_request(struct mmc_host *mmc, struct mmc_request *mrq)
++{
++ struct s3c2410sdi_host *host = mmc_priv(mmc);
++
++ host->cmd_is_stop = 0;
++ host->mrq = mrq;
++
++ s3c2410sdi_send_request(mmc);
++}
++
++static void s3c2410sdi_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
++{
+ struct s3c2410sdi_host *host = mmc_priv(mmc);
+ u32 sdi_psc, sdi_con;
+-
++
+ /* Set power */
+ sdi_con = readl(host->base + S3C2410_SDICON);
+- switch(ios->power_mode) {
+- case MMC_POWER_ON:
+- case MMC_POWER_UP:
+- DBG(PFX "power on\n");
+- s3c2410_gpio_cfgpin(S3C2410_GPE5, S3C2410_GPE5_SDCLK);
+- s3c2410_gpio_cfgpin(S3C2410_GPE6, S3C2410_GPE6_SDCMD);
+- s3c2410_gpio_cfgpin(S3C2410_GPE7, S3C2410_GPE7_SDDAT0);
+- s3c2410_gpio_cfgpin(S3C2410_GPE8, S3C2410_GPE8_SDDAT1);
+- s3c2410_gpio_cfgpin(S3C2410_GPE9, S3C2410_GPE9_SDDAT2);
+- s3c2410_gpio_cfgpin(S3C2410_GPE10, S3C2410_GPE10_SDDAT3);
++ switch (ios->power_mode) {
++ case MMC_POWER_ON:
++ case MMC_POWER_UP:
++#ifdef CONFIG_MACH_TOMTOMGO
++ IO_Deactivate(SDCLK);
++ IO_SetFunction(SDCMD);
++ IO_SetFunction(SDDATA0);
++ IO_SetFunction(SDDATA1);
++ IO_SetFunction(SDDATA2);
++ IO_SetFunction(SDDATA3);
+
+- if (host->pdata->set_power)
+- (host->pdata->set_power)(1);
++ IO_Activate(SD_PWR_ON);
++ IO_SetFunction(SDCLK);
++#else
++ s3c2410_gpio_cfgpin(S3C2410_GPE5, S3C2410_GPE5_SDCLK);
++ s3c2410_gpio_cfgpin(S3C2410_GPE6, S3C2410_GPE6_SDCMD);
++ s3c2410_gpio_cfgpin(S3C2410_GPE7, S3C2410_GPE7_SDDAT0);
++ s3c2410_gpio_cfgpin(S3C2410_GPE8, S3C2410_GPE8_SDDAT1);
++ s3c2410_gpio_cfgpin(S3C2410_GPE9, S3C2410_GPE9_SDDAT2);
++ s3c2410_gpio_cfgpin(S3C2410_GPE10, S3C2410_GPE10_SDDAT3);
++#endif
+
++ if (!host->is2440)
+ sdi_con|= S3C2410_SDICON_FIFORESET;
+- break;
++ break;
+
+- case MMC_POWER_OFF:
+- default:
+- if (host->pdata->set_power)
+- (host->pdata->set_power)(0);
+- break;
++ case MMC_POWER_OFF:
++ default:
++#ifdef CONFIG_MACH_TOMTOMGO
++ IO_Deactivate(SDCLK);
++ IO_Deactivate(SDCMD);
++ IO_Deactivate(SDDATA0);
++ IO_Deactivate(SDDATA1);
++ IO_Deactivate(SDDATA2);
++ IO_Deactivate(SDDATA3);
++ IO_Deactivate(SD_PWR_ON);
++#else
++ s3c2410_gpio_setpin(S3C2410_GPE5, 0);
++ s3c2410_gpio_cfgpin(S3C2410_GPE5, S3C2410_GPE5_OUTP);
++#endif
++ if (host->is2440)
++ sdi_con|=S3C2440_SDICON_SDRESET;
++ break;
+ }
+
+ /* Set clock */
+- for(sdi_psc=0;sdi_psc<255;sdi_psc++) {
+- if( (clk_get_rate(host->clk) / (2*(sdi_psc+1))) <= ios->clock) break;
++ for (sdi_psc = 0; sdi_psc < 255; sdi_psc++) {
++ host->real_rate = (clk_get_rate(host->clk) /
++ (((host->is2440)?1:2)*(sdi_psc+1)));
++ if (host->real_rate <= ios->clock)
++ break;
+ }
+
+- if(sdi_psc > 255) sdi_psc = 255;
+- if (sdi_psc < 8) sdi_psc = 8;
+- writel(sdi_psc, host->base + S3C2410_SDIPRE);
+-
++ if (sdi_psc > 255)
++ sdi_psc = 255;
++ host->prescaler = sdi_psc;
++
++ writel(host->prescaler, host->base + S3C2410_SDIPRE);
++ //writel(0xff, host->base + S3C2410_SDIPRE);
++
++ /* If requested clock is 0, real_rate will be 0, too */
++ if (ios->clock == 0)
++ host->real_rate = 0;
++
+ /* Set CLOCK_ENABLE */
+- if(ios->clock) sdi_con |= S3C2410_SDICON_CLOCKTYPE;
+- else sdi_con &=~S3C2410_SDICON_CLOCKTYPE;
++ if (ios->clock)
++ sdi_con |= S3C2410_SDICON_CLOCKTYPE;
++ else
++ sdi_con &= ~S3C2410_SDICON_CLOCKTYPE;
+
+ writel(sdi_con, host->base + S3C2410_SDICON);
++
++ if ((ios->power_mode==MMC_POWER_ON) ||
++ (ios->power_mode==MMC_POWER_UP)) {
++ CONFDBG("SD/MMC slot is running at %lukHz (requested: %ukHz).\n",
++ host->real_rate/1000, ios->clock/1000);
++ } else
++ CONFDBG("SD/MMC slot is powered down.\n");
++}
+
+- host->bus_width = ios->bus_width;
++static void s3c2410sdi_reset(struct s3c2410sdi_host *host)
++{
++ u32 con = readl(host->base + S3C2410_SDICON);
+
++ con |= S3C2440_SDICON_SDRESET;
++
++ writel(con, host->base + S3C2410_SDICON);
+ }
+
+-static int s3c2410sdi_get_ro(struct mmc_host *mmc)
++/* FIXME: move this in platform-specific function */
++static int qt2410_get_ro(struct mmc_host *host)
+ {
+- struct s3c2410sdi_host *host = mmc_priv(mmc);
+- if (s3c2410_gpio_getpin(host->pdata->gpio_wprotect) != 0)
+- return 1;
+- else
+- return 0;
+-}
++ int ret = s3c2410_gpio_getpin(S3C2410_GPH8);
++ return ret ? 1 : 0;
++}
+
+ static struct mmc_host_ops s3c2410sdi_ops = {
+ .request = s3c2410sdi_request,
+ .set_ios = s3c2410sdi_set_ios,
+- .get_ro = s3c2410sdi_get_ro,
++ .get_ro = qt2410_get_ro,
+ };
+
+-static void s3c2410_mmc_def_setpower(unsigned int to)
+-{
+- s3c2410_gpio_cfgpin(S3C2410_GPA17, S3C2410_GPIO_OUTPUT);
+- s3c2410_gpio_setpin(S3C2410_GPA17, to);
+-}
+-
+-static struct s3c24xx_mmc_platdata s3c2410_mmc_defplat = {
+- .gpio_detect = S3C2410_GPF2,
+- .set_power = s3c2410_mmc_def_setpower,
+- .f_max = 3000000,
+- .ocr_avail = MMC_VDD_32_33,
+-};
+-
+-static int s3c2410sdi_probe(struct platform_device *pdev)
++static int s3c24xxsdi_probe(struct device *dev, int have_2440)
+ {
++ struct platform_device *pdev = to_platform_device(dev);
+ struct mmc_host *mmc;
+- s3c24xx_mmc_pdata_t *pdata;
+ struct s3c2410sdi_host *host;
+
+-
+ int ret;
+
+- mmc = mmc_alloc_host(sizeof(struct s3c2410sdi_host), &pdev->dev);
++ mmc = mmc_alloc_host(sizeof(struct s3c2410sdi_host), dev);
+ if (!mmc) {
+ ret = -ENOMEM;
+ goto probe_out;
+@@ -564,26 +1073,19 @@
+ host = mmc_priv(mmc);
+
+ spin_lock_init( &host->complete_lock );
++ host->is2440 = have_2440;
++ host->fix2410 = !have_2440;
++ host->dodma = 0;
+ host->complete_what = COMPLETION_NONE;
++ host->pio_active = XFER_NONE;
++
+ host->mmc = mmc;
+ host->dma = S3C2410SDI_DMA;
+-
+- pdata = pdev->dev.platform_data;
+- if (!pdata) {
+- pdev->dev.platform_data = &s3c2410_mmc_defplat;
+- pdata = &s3c2410_mmc_defplat;
+- }
+-
+- host->pdata = pdata;
+-
+- host->irq_cd = s3c2410_gpio_getirq(pdata->gpio_detect);
+- s3c2410_gpio_cfgpin(pdata->gpio_detect, S3C2410_GPIO_IRQ);
+- if (pdata->gpio_wprotect)
+- s3c2410_gpio_cfgpin(pdata->gpio_wprotect, S3C2410_GPIO_INPUT);
+-
++ host->irq_cd = IRQ_EINT2;
++
+ host->mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+ if (!host->mem) {
+- printk(KERN_ERR PFX "failed to get io memory region resouce.\n");
++ ERR("failed to get io memory region resouce.\n");
+ ret = -ENOENT;
+ goto probe_free_host;
+ }
+@@ -592,99 +1094,107 @@
+ RESSIZE(host->mem), pdev->name);
+
+ if (!host->mem) {
+- printk(KERN_ERR PFX "failed to request io memory region.\n");
++ ERR("failed to request io memory region.\n");
+ ret = -ENOENT;
+ goto probe_free_host;
+ }
+
+ host->base = ioremap(host->mem->start, RESSIZE(host->mem));
+ if (host->base == 0) {
+- printk(KERN_ERR PFX "failed to ioremap() io memory region.\n");
++ ERR("failed to ioremap() io memory region.\n");
+ ret = -EINVAL;
+ goto probe_free_mem_region;
+ }
+
+ host->irq = platform_get_irq(pdev, 0);
+ if (host->irq == 0) {
+- printk(KERN_ERR PFX "failed to get interrupt resouce.\n");
++ ERR("failed to get interrupt resouce.\n");
+ ret = -EINVAL;
+ goto probe_iounmap;
+ }
+
+- if(request_irq(host->irq, s3c2410sdi_irq, 0, DRIVER_NAME, host)) {
+- printk(KERN_ERR PFX "failed to request sdi interrupt.\n");
++ if (request_irq(host->irq, s3c2410sdi_irq, 0, DRIVER_NAME, host)) {
++ ERR("failed to request sdi interrupt.\n");
+ ret = -ENOENT;
+ goto probe_iounmap;
+ }
+-
++
++ disable_irq(host->irq);
++
++#ifdef CONFIG_MACH_TOMTOMGO
++ IO_SetInterruptOnToggle(CD_SD);
++#else
++ s3c2410_gpio_cfgpin(S3C2410_GPF2, S3C2410_GPF2_EINT2);
+ set_irq_type(host->irq_cd, IRQT_BOTHEDGE);
+- if(request_irq(host->irq_cd, s3c2410sdi_irq_cd, 0, DRIVER_NAME, host)) {
+- printk(KERN_ERR PFX "failed to request card detect interrupt.\n" );
++#endif
++
++ if (request_irq(host->irq_cd, s3c2410sdi_irq_cd, 0, DRIVER_NAME, host)) {
++ ERR("failed to request card detect interrupt.\n" );
+ ret = -ENOENT;
+ goto probe_free_irq;
+ }
+
+- if(s3c2410_dma_request(S3C2410SDI_DMA, &s3c2410sdi_dma_client, NULL)) {
+- printk(KERN_ERR PFX "unable to get DMA channel.\n" );
++ if (s3c2410_dma_request(S3C2410SDI_DMA, &s3c2410sdi_dma_client, NULL)) {
++ ERR("unable to get DMA channel.\n" );
+ ret = -EBUSY;
+ goto probe_free_irq_cd;
+ }
+
+- host->clk = clk_get(&pdev->dev, "sdi");
++ host->clk = clk_get(dev, "sdi");
+ if (IS_ERR(host->clk)) {
+- printk(KERN_ERR PFX "failed to find clock source.\n");
++ ERR("failed to find clock source.\n");
+ ret = PTR_ERR(host->clk);
+ host->clk = NULL;
+ goto probe_free_host;
+ }
+
+- if((ret = clk_enable(host->clk))) {
+- printk(KERN_ERR PFX "failed to enable clock source.\n");
++#if 0
++ if ((ret = clk_use(host->clk))) {
++ ERR("failed to use clock source.\n");
++ goto clk_free;
++ }
++#endif
++
++ if ((ret = clk_enable(host->clk))) {
++ ERR("failed to enable clock source.\n");
+ goto clk_unuse;
+ }
+
+
+ mmc->ops = &s3c2410sdi_ops;
+- mmc->ocr_avail = pdata->ocr_avail;
+- mmc->f_min = clk_get_rate(host->clk) / 512;
+- mmc->f_max = clk_get_rate(host->clk) / 2;
+- mmc->caps = MMC_CAP_4_BIT_DATA;
+-
+- if(pdata->f_max && (mmc->f_max>pdata->f_max))
+- mmc->f_max = pdata->f_max;
+-
+- /*
+- * Since we only have a 16-bit data length register, we must
+- * ensure that we don't exceed 2^16-1 bytes in a single request.
+- * Choose 64 (512-byte) sectors as the limit.
+- */
+- mmc->max_sectors = 64;
++ mmc->ocr_avail = MMC_VDD_32_33;
++ //mmc->caps = MMC_CAP_4_BIT_DATA;
++ mmc->f_min = clk_get_rate(host->clk) / (((host->is2440)?1:2) * 256);
++ mmc->f_max = clk_get_rate(host->clk) / ((host->is2440)?1:2);
+
+- /*
+- * Set the maximum segment size. Since we aren't doing DMA
+- * (yet) we are only limited by the data length register.
+- */
+-
+- mmc->max_seg_size = mmc->max_sectors << 9;
+- printk(KERN_INFO PFX "probe: mapped sdi_base=%p irq=%u irq_cd=%u \n",
+- host->base, host->irq, host->irq_cd);
++ mmc->max_sectors = 4095;
++ mmc->max_seg_size = mmc->max_sectors << 9;
++
++ mmc->max_phys_segs = 128;
++ mmc->max_hw_segs = 128;
++
++ DBG("probe: mode:%s fix2410:%s mapped sdi_base=%p irq=%u irq_cd=%u "
++ "dma=%u.\n", (host->is2440?"2440":"2410"),
++ (host->fix2410?"enabled":"disabled"),
++ host->base, host->irq, host->irq_cd, host->dma);
+
+- if((ret = mmc_add_host(mmc))) {
+- printk(KERN_ERR PFX "failed to add mmc host.\n");
+- goto clk_disable;
++ if ((ret = mmc_add_host(mmc))) {
++ ERR("failed to add mmc host.\n");
++ goto free_dmabuf;
+ }
+
+- platform_set_drvdata(pdev, mmc);
++ dev_set_drvdata(dev, mmc);
+
+- mmc_detect_change(mmc, 0);
+-
+- printk(KERN_INFO PFX "initialisation done.\n");
++ INFO("initialisation done.\n");
+ return 0;
+-
+- clk_disable:
++
++ free_dmabuf:
+ clk_disable(host->clk);
+
+ clk_unuse:
++ //clk_unuse(host->clk);
++
++ clk_free:
+ clk_put(host->clk);
+
+ probe_free_irq_cd:
+@@ -705,13 +1215,14 @@
+ return ret;
+ }
+
+-static int s3c2410sdi_remove(struct platform_device *pdev)
++static int s3c2410sdi_remove(struct device *dev)
+ {
+- struct mmc_host *mmc = platform_get_drvdata(pdev);
++ struct mmc_host *mmc = dev_get_drvdata(dev);
+ struct s3c2410sdi_host *host = mmc_priv(mmc);
+
+ mmc_remove_host(mmc);
+ clk_disable(host->clk);
++ //clk_unuse(host->clk);
+ clk_put(host->clk);
+ free_irq(host->irq_cd, host);
+ free_irq(host->irq, host);
+@@ -722,71 +1233,96 @@
+ return 0;
+ }
+
+-#ifdef CONFIG_PM
+-static int s3c2410mci_suspend(struct platform_device *dev, pm_message_t state)
+-{
+- struct mmc_host *mmc = platform_get_drvdata(dev);
+- struct s3c2410sdi_host *host;
+- int ret = 0;
+-
+- if (mmc) {
+- host = mmc_priv(mmc);
++/* FIXME: This is a coarse hack. Selection of mode should be done by adding different
++ * devices (s3c2410-sdi or s3c2440-sdi) to the platform bus. */
+
+- ret = mmc_suspend_host(mmc, state);
++static int s3c24xxsdi_probe_cpuid(struct device *dev)
++{
++ u32 idcode = __raw_readl(S3C2410_GSTATUS1) & S3C2410_GSTATUS1_IDMASK;
++ switch (idcode) {
++ case S3C2410_GSTATUS1_2410:
++ return s3c24xxsdi_probe(dev, 0);
+
+- clk_disable(host->clk);
++ case S3C2410_GSTATUS1_2440:
++ return s3c24xxsdi_probe(dev, 1);
+
+- disable_irq(host->irq_cd);
+- disable_irq(host->irq);
++ default:
++ ERR("unkonown CPUID (0x%08x). Can't load driver.\n", idcode);
+ }
++ return -ENOENT;
++}
+
+- return ret;
++#if 0
++static int s3c2410sdi_probe(struct device *dev)
++{
++ return s3c24xxsdi_probe(dev, 0);
+ }
+
+-static int s3c2410mci_resume(struct platform_device *dev)
++static int s3c2440sdi_probe(struct device *dev)
+ {
+- struct mmc_host *mmc = platform_get_drvdata(dev);
+- struct s3c2410sdi_host *host;
+- int ret = 0;
++ return s3c24xxsdi_probe(dev, 1);
++}
++#endif
+
+- if (mmc) {
+- host = mmc_priv(mmc);
++#ifdef CONFIG_PM
++static int s3c24XXsdi_suspend(struct device *dev, pm_message_t state)
++{
++ struct mmc_host *mmc = dev_get_drvdata(dev);
++ int ret = 0;
+
+- enable_irq(host->irq_cd);
+- enable_irq(host->irq);
++ if (mmc)
++ ret = mmc_suspend_host(mmc, state);
+
+- clk_enable(host->clk);
++ return ret;
++}
+
++static int s3c24XXsdi_resume(struct device *dev)
++{
++ struct mmc_host *mmc = dev_get_drvdata(dev);
++ int ret = 0;
++
++ if (mmc)
+ ret = mmc_resume_host(mmc);
+- }
+
+ return ret;
+ }
+ #else
+-#define s3c2410mci_suspend NULL
+-#define s3c2410mci_resume NULL
++#define s3c24XXsdi_suspend NULL
++#define s3c24XXsdi_resume NULL
+ #endif
+
+-static struct platform_driver s3c2410sdi_driver =
++static struct device_driver s3c2410sdi_driver =
++{
++ .name = "s3c2410-sdi",
++ .bus = &platform_bus_type,
++ .probe = s3c24xxsdi_probe_cpuid,
++ .remove = s3c2410sdi_remove,
++ .suspend = s3c24XXsdi_suspend,
++ .resume = s3c24XXsdi_resume,
++};
++
++static struct device_driver s3c2440sdi_driver =
+ {
+- .driver = {
+- .name = "s3c2410-sdi",
+- .owner = THIS_MODULE,
+- },
+- .probe = s3c2410sdi_probe,
++ .name = "s3c2440-sdi",
++ .bus = &platform_bus_type,
++ .probe = s3c24xxsdi_probe_cpuid,
+ .remove = s3c2410sdi_remove,
+- .suspend = s3c2410mci_suspend,
+- .resume = s3c2410mci_resume,
++ .suspend = s3c24XXsdi_suspend,
++ .resume = s3c24XXsdi_resume,
+ };
+
++
+ static int __init s3c2410sdi_init(void)
+ {
+- return platform_driver_register(&s3c2410sdi_driver);
++ driver_register(&s3c2410sdi_driver);
++ driver_register(&s3c2440sdi_driver);
++ return 0;
+ }
+
+ static void __exit s3c2410sdi_exit(void)
+ {
+- platform_driver_unregister(&s3c2410sdi_driver);
++ driver_unregister(&s3c2410sdi_driver);
++ driver_unregister(&s3c2440sdi_driver);
+ }
+
+ module_init(s3c2410sdi_init);
+@@ -794,3 +1330,4 @@
+
+ MODULE_DESCRIPTION("Samsung S3C2410 Multimedia Card Interface driver");
+ MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Thomas Kleffel <tk at maintech.de>");
+Index: linux-2.6.17.7-new/drivers/mmc/s3c2410mci.h
+===================================================================
+--- linux-2.6.17.7-new.orig/drivers/mmc/s3c2410mci.h 2006-08-07 17:35:41.000000000 +0200
++++ linux-2.6.17.7-new/drivers/mmc/s3c2410mci.h 2006-08-07 17:38:53.000000000 +0200
+@@ -10,10 +10,9 @@
+
+ struct clk;
+
++//FIXME: DMA Resource management ?!
+ #define S3C2410SDI_DMA 0
+
+-#define S3C2410SDI_CDLATENCY 50
+-
+ enum s3c2410sdi_waitfor {
+ COMPLETION_NONE,
+ COMPLETION_CMDSENT,
+@@ -22,11 +21,8 @@
+ COMPLETION_XFERFINISH_RSPFIN,
+ };
+
+-typedef struct s3c24xx_mmc_platdata s3c24xx_mmc_pdata_t;
+-
+ struct s3c2410sdi_host {
+ struct mmc_host *mmc;
+- s3c24xx_mmc_pdata_t *pdata;
+
+ struct resource *mem;
+ struct clk *clk;
+@@ -34,22 +30,35 @@
+ int irq;
+ int irq_cd;
+ int dma;
++
++ unsigned long real_rate;
++ u8 prescaler;
++
++ int is2440;
++ int fix2410;
++ int dodma;
+
+- struct scatterlist* cur_sg; /* Current SG entry */
+- unsigned int num_sg; /* Number of entries left */
+- void* mapped_sg; /* vaddr of mapped sg */
+-
+- unsigned int offset; /* Offset into current entry */
+- unsigned int remain; /* Data left in curren entry */
+-
+- int size; /* Total size of transfer */
++ volatile int dmatogo;
+
+ struct mmc_request *mrq;
+-
+- unsigned char bus_width; /* Current bus width */
++ int cmd_is_stop;
+
+ spinlock_t complete_lock;
+- struct completion complete_request;
+- struct completion complete_dma;
+- enum s3c2410sdi_waitfor complete_what;
++ volatile enum s3c2410sdi_waitfor
++ complete_what;
++
++ volatile int dma_complete;
++
++ u32 pio_sgptr;
++ u32 pio_words;
++ u32 *pio_ptr;
++#define XFER_NONE 0
++#define XFER_READ 1
++#define XFER_WRITE 2
++ u32 pio_active;
++
++ char dbgmsg_cmd[301];
++ char dbgmsg_dat[301];
++
++ unsigned int ccnt, dcnt;
+ };
+Index: linux-2.6.17.7-new/include/asm-arm/arch-s3c2410/dma.h
+===================================================================
+--- linux-2.6.17.7-new.orig/include/asm-arm/arch-s3c2410/dma.h 2006-08-07 17:35:41.000000000 +0200
++++ linux-2.6.17.7-new/include/asm-arm/arch-s3c2410/dma.h 2006-08-07 17:38:53.000000000 +0200
+@@ -189,6 +189,7 @@
+ unsigned long dev_addr;
+ unsigned long load_timeout;
+ unsigned int flags; /* channel flags */
++ unsigned int hwsrc;
+
+ /* channel's hardware position and configuration */
+ void __iomem *regs; /* channels registers */
+@@ -275,7 +276,8 @@
+ */
+
+ extern int s3c2410_dma_devconfig(int channel, s3c2410_dmasrc_t source,
+- int hwcfg, unsigned long devaddr);
++ int hwcfg, unsigned long devaddr,
++ unsigned int hwsrc);
+
+ /* s3c2410_dma_getposition
+ *
+Index: linux-2.6.17.7-new/include/asm-arm/arch-s3c2410/regs-sdi.h
+===================================================================
+--- linux-2.6.17.7-new.orig/include/asm-arm/arch-s3c2410/regs-sdi.h 2006-08-07 17:35:41.000000000 +0200
++++ linux-2.6.17.7-new/include/asm-arm/arch-s3c2410/regs-sdi.h 2006-08-07 17:38:53.000000000 +0200
+@@ -18,6 +18,7 @@
+ #ifndef __ASM_ARM_REGS_SDI
+ #define __ASM_ARM_REGS_SDI "regs-sdi.h"
+
++#define S3C2410_SDIREG(x) ((x) + S3C24XX_VA_SDI)
+ #define S3C2410_SDICON (0x00)
+ #define S3C2410_SDIPRE (0x04)
+ #define S3C2410_SDICMDARG (0x08)
+@@ -33,9 +34,16 @@
+ #define S3C2410_SDIDCNT (0x30)
+ #define S3C2410_SDIDSTA (0x34)
+ #define S3C2410_SDIFSTA (0x38)
++
++//This is REALLY ugly!
+ #define S3C2410_SDIDATA (0x3C)
+ #define S3C2410_SDIIMSK (0x40)
+
++#define S3C2440_SDIDATA (0x40)
++#define S3C2440_SDIIMSK (0x3C)
++
++#define S3C2440_SDICON_SDRESET (1<<8)
++#define S3C2440_SDICON_MMCCLOCK (1<<5)
+ #define S3C2410_SDICON_BYTEORDER (1<<4)
+ #define S3C2410_SDICON_SDIOIRQ (1<<3)
+ #define S3C2410_SDICON_RWAITEN (1<<2)
+@@ -57,6 +65,9 @@
+ #define S3C2410_SDICMDSTAT_XFERING (1<<8)
+ #define S3C2410_SDICMDSTAT_INDEX (0xff)
+
++#define S3C2440_SDIDCON_DS_BYTE (0<<22)
++#define S3C2440_SDIDCON_DS_HALFWORD (1<<22)
++#define S3C2440_SDIDCON_DS_WORD (2<<22)
+ #define S3C2410_SDIDCON_IRQPERIOD (1<<21)
+ #define S3C2410_SDIDCON_TXAFTERRESP (1<<20)
+ #define S3C2410_SDIDCON_RXAFTERCMD (1<<19)
+@@ -65,6 +76,7 @@
+ #define S3C2410_SDIDCON_WIDEBUS (1<<16)
+ #define S3C2410_SDIDCON_DMAEN (1<<15)
+ #define S3C2410_SDIDCON_STOP (1<<14)
++#define S3C2440_SDIDCON_DATSTART (1<<14)
+ #define S3C2410_SDIDCON_DATMODE (3<<12)
+ #define S3C2410_SDIDCON_BLKNUM (0x7ff)
+
+@@ -89,10 +101,12 @@
+ #define S3C2410_SDIDSTA_TXDATAON (1<<1)
+ #define S3C2410_SDIDSTA_RXDATAON (1<<0)
+
++#define S3C2440_SDIFSTA_FIFORESET (1<<16)
++#define S3C2440_SDIFSTA_FIFOFAIL (3<<14) /* 3 is correct (2 bits) */
+ #define S3C2410_SDIFSTA_TFDET (1<<13)
+ #define S3C2410_SDIFSTA_RFDET (1<<12)
+-#define S3C2410_SDIFSTA_TXHALF (1<<11)
+-#define S3C2410_SDIFSTA_TXEMPTY (1<<10)
++#define S3C2410_SDIFSTA_TFHALF (1<<11)
++#define S3C2410_SDIFSTA_TFEMPTY (1<<10)
+ #define S3C2410_SDIFSTA_RFLAST (1<<9)
+ #define S3C2410_SDIFSTA_RFFULL (1<<8)
+ #define S3C2410_SDIFSTA_RFHALF (1<<7)
Added: trunk/oe/packages/linux/linux-qt2410/new/patches/mmc.patch
===================================================================
--- trunk/oe/packages/linux/linux-qt2410/new/patches/mmc.patch 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/linux/linux-qt2410/new/patches/mmc.patch 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,996 @@
+Index: linux-2.6.17.7-new/drivers/mmc/Kconfig
+===================================================================
+--- linux-2.6.17.7-new.orig/drivers/mmc/Kconfig 2006-08-07 09:32:34.000000000 +0200
++++ linux-2.6.17.7-new/drivers/mmc/Kconfig 2006-08-07 09:33:51.000000000 +0200
+@@ -82,6 +82,15 @@
+
+ If unsure, say N.
+
++config MMC_S3C2410
++ tristate "Samsung S3C2410 Multimedia Card Interface support"
++ depends on ARCH_S3C2410 && MMC
++ help
++ This selects the Samsung S3C2410 Multimedia Card Interface
++ support.
++
++ If unsure, say N.
++
+ config MMC_AU1X
+ tristate "Alchemy AU1XX0 MMC Card Interface support"
+ depends on MMC && SOC_AU1200
+Index: linux-2.6.17.7-new/drivers/mmc/Makefile
+===================================================================
+--- linux-2.6.17.7-new.orig/drivers/mmc/Makefile 2006-08-07 09:32:34.000000000 +0200
++++ linux-2.6.17.7-new/drivers/mmc/Makefile 2006-08-07 09:33:51.000000000 +0200
+@@ -20,6 +20,7 @@
+ obj-$(CONFIG_MMC_IMX) += imxmmc.o
+ obj-$(CONFIG_MMC_SDHCI) += sdhci.o
+ obj-$(CONFIG_MMC_WBSD) += wbsd.o
++obj-$(CONFIG_MMC_S3C2410) += s3c2410mci.o
+ obj-$(CONFIG_MMC_AU1X) += au1xmmc.o
+ obj-$(CONFIG_MMC_OMAP) += omap.o
+ obj-$(CONFIG_MMC_AT91RM9200) += at91_mci.o
+Index: linux-2.6.17.7-new/drivers/mmc/s3c2410mci.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.17.7-new/drivers/mmc/s3c2410mci.c 2006-08-07 09:33:51.000000000 +0200
+@@ -0,0 +1,781 @@
++/*
++ * linux/drivers/mmc/s3c2410mci.h - Samsung S3C2410 SDI Interface driver
++ *
++ * Copyright (C) 2004 Thomas Kleffel, All Rights Reserved.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#include <linux/config.h>
++#include <linux/module.h>
++#include <linux/moduleparam.h>
++#include <linux/init.h>
++#include <linux/ioport.h>
++#include <linux/platform_device.h>
++#include <linux/interrupt.h>
++#include <linux/blkdev.h>
++#include <linux/delay.h>
++#include <linux/err.h>
++#include <linux/dma-mapping.h>
++#include <linux/mmc/host.h>
++#include <linux/mmc/protocol.h>
++#include <linux/clk.h>
++
++#include <asm/dma.h>
++#include <asm/dma-mapping.h>
++#include <asm/arch/dma.h>
++
++#include <asm/io.h>
++#include <asm/irq.h>
++#include <asm/mach/mmc.h>
++
++#include <asm/arch/regs-sdi.h>
++#include <asm/arch/regs-gpio.h>
++#include <asm/arch/mmc.h>
++
++#ifdef CONFIG_MMC_DEBUG
++#define DBG(x...) printk(KERN_INFO x)
++#else
++#define DBG(x...) do { } while (0)
++#endif
++
++#include "s3c2410mci.h"
++
++#define DRIVER_NAME "mmci-s3c2410"
++#define PFX DRIVER_NAME ": "
++
++#define RESSIZE(ressource) (((ressource)->end - (ressource)->start)+1)
++
++static struct s3c2410_dma_client s3c2410sdi_dma_client = {
++ .name = "s3c2410-sdi",
++};
++
++/*
++ * ISR for SDI Interface IRQ
++ * Communication between driver and ISR works as follows:
++ * host->mrq points to current request
++ * host->complete_what tells the ISR when the request is considered done
++ * COMPLETION_CMDSENT when the command was sent
++ * COMPLETION_RSPFIN when a response was received
++ * COMPLETION_XFERFINISH when the data transfer is finished
++ * COMPLETION_XFERFINISH_RSPFIN both of the above.
++ * host->complete_request is the completion-object the driver waits for
++ *
++ * 1) Driver sets up host->mrq and host->complete_what
++ * 2) Driver prepares the transfer
++ * 3) Driver enables interrupts
++ * 4) Driver starts transfer
++ * 5) Driver waits for host->complete_rquest
++ * 6) ISR checks for request status (errors and success)
++ * 6) ISR sets host->mrq->cmd->error and host->mrq->data->error
++ * 7) ISR completes host->complete_request
++ * 8) ISR disables interrupts
++ * 9) Driver wakes up and takes care of the request
++*/
++
++static irqreturn_t s3c2410sdi_irq(int irq, void *dev_id, struct pt_regs *regs)
++{
++ struct s3c2410sdi_host *host;
++ u32 sdi_csta, sdi_dsta, sdi_dcnt;
++ u32 sdi_cclear, sdi_dclear;
++ unsigned long iflags;
++
++ host = (struct s3c2410sdi_host *)dev_id;
++
++ /* Check for things not supposed to happen */
++ if(!host) return IRQ_HANDLED;
++
++ sdi_csta = readl(host->base + S3C2410_SDICMDSTAT);
++ sdi_dsta = readl(host->base + S3C2410_SDIDSTA);
++ sdi_dcnt = readl(host->base + S3C2410_SDIDCNT);
++
++ DBG(PFX "IRQ csta=0x%08x dsta=0x%08x dcnt:0x%08x\n", sdi_csta, sdi_dsta, sdi_dcnt);
++
++ spin_lock_irqsave( &host->complete_lock, iflags);
++
++ if( host->complete_what==COMPLETION_NONE ) {
++ goto clear_imask;
++ }
++
++ if(!host->mrq) {
++ goto clear_imask;
++ }
++
++
++ sdi_csta = readl(host->base + S3C2410_SDICMDSTAT);
++ sdi_dsta = readl(host->base + S3C2410_SDIDSTA);
++ sdi_dcnt = readl(host->base + S3C2410_SDIDCNT);
++ sdi_cclear = 0;
++ sdi_dclear = 0;
++
++
++ if(sdi_csta & S3C2410_SDICMDSTAT_CMDTIMEOUT) {
++ host->mrq->cmd->error = MMC_ERR_TIMEOUT;
++ goto transfer_closed;
++ }
++
++ if(sdi_csta & S3C2410_SDICMDSTAT_CMDSENT) {
++ if(host->complete_what == COMPLETION_CMDSENT) {
++ host->mrq->cmd->error = MMC_ERR_NONE;
++ goto transfer_closed;
++ }
++
++ sdi_cclear |= S3C2410_SDICMDSTAT_CMDSENT;
++ }
++
++ if(sdi_csta & S3C2410_SDICMDSTAT_CRCFAIL) {
++ if (host->mrq->cmd->flags & MMC_RSP_136) {
++ DBG(PFX "s3c2410 fixup : ignore CRC fail with long rsp\n");
++ }
++ else {
++ DBG(PFX "COMMAND CRC FAILED %x\n", sdi_csta);
++ if(host->mrq->cmd->flags & MMC_RSP_CRC) {
++ host->mrq->cmd->error = MMC_ERR_BADCRC;
++ goto transfer_closed;
++ }
++ }
++ sdi_cclear |= S3C2410_SDICMDSTAT_CRCFAIL;
++ }
++
++ if(sdi_csta & S3C2410_SDICMDSTAT_RSPFIN) {
++ if(host->complete_what == COMPLETION_RSPFIN) {
++ host->mrq->cmd->error = MMC_ERR_NONE;
++ goto transfer_closed;
++ }
++
++ if(host->complete_what == COMPLETION_XFERFINISH_RSPFIN) {
++ host->mrq->cmd->error = MMC_ERR_NONE;
++ host->complete_what = COMPLETION_XFERFINISH;
++ }
++
++ sdi_cclear |= S3C2410_SDICMDSTAT_RSPFIN;
++ }
++
++ if(sdi_dsta & S3C2410_SDIDSTA_FIFOFAIL) {
++ host->mrq->cmd->error = MMC_ERR_NONE;
++ host->mrq->data->error = MMC_ERR_FIFO;
++ goto transfer_closed;
++ }
++
++ if(sdi_dsta & S3C2410_SDIDSTA_RXCRCFAIL) {
++ host->mrq->cmd->error = MMC_ERR_NONE;
++ host->mrq->data->error = MMC_ERR_BADCRC;
++ goto transfer_closed;
++ }
++
++ if(sdi_dsta & S3C2410_SDIDSTA_CRCFAIL) {
++ DBG(PFX "DATA CRC FAILED %u\n", sdi_csta);
++ host->mrq->cmd->error = MMC_ERR_NONE;
++ host->mrq->data->error = MMC_ERR_BADCRC;
++ goto transfer_closed;
++ }
++
++ if(sdi_dsta & S3C2410_SDIDSTA_DATATIMEOUT) {
++ host->mrq->cmd->error = MMC_ERR_NONE;
++ host->mrq->data->error = MMC_ERR_TIMEOUT;
++ goto transfer_closed;
++ }
++
++ if(sdi_dsta & S3C2410_SDIDSTA_XFERFINISH) {
++ if(host->complete_what == COMPLETION_XFERFINISH) {
++ host->mrq->cmd->error = MMC_ERR_NONE;
++ host->mrq->data->error = MMC_ERR_NONE;
++ goto transfer_closed;
++ }
++
++ if(host->complete_what == COMPLETION_XFERFINISH_RSPFIN) {
++ host->mrq->data->error = MMC_ERR_NONE;
++ host->complete_what = COMPLETION_RSPFIN;
++ }
++
++ sdi_dclear |= S3C2410_SDIDSTA_XFERFINISH;
++ }
++
++ writel(sdi_cclear, host->base + S3C2410_SDICMDSTAT);
++ writel(sdi_dclear, host->base + S3C2410_SDIDSTA);
++
++ spin_unlock_irqrestore( &host->complete_lock, iflags);
++ DBG(PFX "IRQ still waiting.\n");
++ return IRQ_HANDLED;
++
++
++transfer_closed:
++ writel(sdi_cclear, host->base + S3C2410_SDICMDSTAT);
++ writel(sdi_dclear, host->base + S3C2410_SDIDSTA);
++ host->complete_what = COMPLETION_NONE;
++ complete(&host->complete_request);
++ writel(0, host->base + S3C2410_SDIIMSK);
++ spin_unlock_irqrestore( &host->complete_lock, iflags);
++ DBG(PFX "IRQ transfer closed.\n");
++ return IRQ_HANDLED;
++
++clear_imask:
++ writel(0, host->base + S3C2410_SDIIMSK);
++ spin_unlock_irqrestore( &host->complete_lock, iflags);
++ DBG(PFX "IRQ clear imask.\n");
++ return IRQ_HANDLED;
++
++}
++
++
++/*
++ * ISR for the CardDetect Pin
++*/
++
++static irqreturn_t s3c2410sdi_irq_cd(int irq, void *dev_id, struct pt_regs *regs)
++{
++ struct s3c2410sdi_host *host = (struct s3c2410sdi_host *)dev_id;
++ mmc_detect_change(host->mmc, S3C2410SDI_CDLATENCY);
++
++ return IRQ_HANDLED;
++}
++
++
++
++static void s3c2410sdi_dma_done_callback(s3c2410_dma_chan_t *dma_ch, void *buf_id,
++ int size, s3c2410_dma_buffresult_t result)
++{ unsigned long iflags;
++ u32 sdi_csta, sdi_dsta,sdi_dcnt;
++ struct s3c2410sdi_host *host = (struct s3c2410sdi_host *)buf_id;
++
++ sdi_csta = readl(host->base + S3C2410_SDICMDSTAT);
++ sdi_dsta = readl(host->base + S3C2410_SDIDSTA);
++ sdi_dcnt = readl(host->base + S3C2410_SDIDCNT);
++
++ DBG(PFX "DMAD csta=0x%08x dsta=0x%08x dcnt:0x%08x result:0x%08x\n", sdi_csta, sdi_dsta, sdi_dcnt, result);
++
++ spin_lock_irqsave( &host->complete_lock, iflags);
++
++ if(!host->mrq) goto out;
++ if(!host->mrq->data) goto out;
++
++
++ sdi_csta = readl(host->base + S3C2410_SDICMDSTAT);
++ sdi_dsta = readl(host->base + S3C2410_SDIDSTA);
++ sdi_dcnt = readl(host->base + S3C2410_SDIDCNT);
++
++ if( result!=S3C2410_RES_OK ) {
++ goto fail_request;
++ }
++
++
++ if(host->mrq->data->flags & MMC_DATA_READ) {
++ if( sdi_dcnt>0 ) {
++ goto fail_request;
++ }
++ }
++
++out:
++ complete(&host->complete_dma);
++ spin_unlock_irqrestore( &host->complete_lock, iflags);
++ return;
++
++
++fail_request:
++ host->mrq->data->error = MMC_ERR_FAILED;
++ host->complete_what = COMPLETION_NONE;
++ complete(&host->complete_request);
++ writel(0, host->base + S3C2410_SDIIMSK);
++ goto out;
++
++}
++
++
++static void s3c2410sdi_dma_setup(struct s3c2410sdi_host *host, s3c2410_dmasrc_t source) {
++
++ s3c2410_dma_devconfig(host->dma, source, 3, host->mem->start + S3C2410_SDIDATA);
++ s3c2410_dma_config(host->dma, 4, (1<<23) | (2<<24));
++ s3c2410_dma_set_buffdone_fn(host->dma, s3c2410sdi_dma_done_callback);
++ s3c2410_dma_setflags(host->dma, S3C2410_DMAF_AUTOSTART);
++}
++
++static void s3c2410sdi_request(struct mmc_host *mmc, struct mmc_request *mrq) {
++ struct s3c2410sdi_host *host = mmc_priv(mmc);
++ struct device *dev = mmc_dev(host->mmc);
++ struct platform_device *pdev = to_platform_device(dev);
++ u32 sdi_carg, sdi_ccon, sdi_timer;
++ u32 sdi_bsize, sdi_dcon, sdi_imsk;
++ int dma_len = 0;
++
++ DBG(KERN_DEBUG PFX "request: [CMD] opcode:0x%02x arg:0x%08x flags:%x retries:%u\n",
++ mrq->cmd->opcode, mrq->cmd->arg, mrq->cmd->flags, mrq->cmd->retries);
++ DBG(PFX "request : %s mode\n",mmc->mode == MMC_MODE_MMC ? "mmc" : "sd");
++
++
++ sdi_ccon = mrq->cmd->opcode & S3C2410_SDICMDCON_INDEX;
++ sdi_ccon|= S3C2410_SDICMDCON_SENDERHOST;
++ sdi_ccon|= S3C2410_SDICMDCON_CMDSTART;
++
++ sdi_carg = mrq->cmd->arg;
++
++ sdi_timer= 0xFFFF;
++
++ sdi_bsize= 0;
++ sdi_dcon = 0;
++ sdi_imsk = 0;
++
++ /* enable interrupts for transmission errors */
++ sdi_imsk |= S3C2410_SDIIMSK_RESPONSEND;
++ sdi_imsk |= S3C2410_SDIIMSK_CRCSTATUS;
++
++ host->complete_what = COMPLETION_CMDSENT;
++
++ if (mrq->cmd->flags & MMC_RSP_PRESENT) {
++ host->complete_what = COMPLETION_RSPFIN;
++
++ sdi_ccon |= S3C2410_SDICMDCON_WAITRSP;
++ sdi_imsk |= S3C2410_SDIIMSK_CMDTIMEOUT;
++
++ } else {
++ /* We need the CMDSENT-Interrupt only if we want are not waiting
++ * for a response
++ */
++ sdi_imsk |= S3C2410_SDIIMSK_CMDSENT;
++ }
++
++ if(mrq->cmd->flags & MMC_RSP_136) {
++ sdi_ccon|= S3C2410_SDICMDCON_LONGRSP;
++ }
++
++ if(mrq->cmd->flags & MMC_RSP_CRC) {
++ sdi_imsk |= S3C2410_SDIIMSK_RESPONSECRC;
++ }
++
++
++ if (mrq->data) {
++ host->complete_what = COMPLETION_XFERFINISH_RSPFIN;
++
++ sdi_bsize = (1 << mrq->data->blksz_bits);
++ host->size = mrq->data->blocks << mrq->data->blksz_bits;
++
++ sdi_dcon = (mrq->data->blocks & S3C2410_SDIDCON_BLKNUM_MASK);
++ sdi_dcon |= S3C2410_SDIDCON_DMAEN;
++
++ sdi_imsk |= S3C2410_SDIIMSK_FIFOFAIL;
++ sdi_imsk |= S3C2410_SDIIMSK_DATACRC;
++ sdi_imsk |= S3C2410_SDIIMSK_DATATIMEOUT;
++ sdi_imsk |= S3C2410_SDIIMSK_DATAFINISH;
++ sdi_imsk |= 0xFFFFFFE0;
++
++ DBG(PFX "request: [DAT] bsize:%u blocks:%u bytes:%u\n",
++ sdi_bsize, mrq->data->blocks, mrq->data->blocks * sdi_bsize);
++
++ if (host->bus_width == MMC_BUS_WIDTH_4) {
++ sdi_dcon |= S3C2410_SDIDCON_WIDEBUS;
++ }
++
++ if(!(mrq->data->flags & MMC_DATA_STREAM)) {
++ sdi_dcon |= S3C2410_SDIDCON_BLOCKMODE;
++ }
++
++ if(mrq->data->flags & MMC_DATA_WRITE) {
++ sdi_dcon |= S3C2410_SDIDCON_TXAFTERRESP;
++ sdi_dcon |= S3C2410_SDIDCON_XFER_TXSTART;
++ }
++
++ if(mrq->data->flags & MMC_DATA_READ) {
++ sdi_dcon |= S3C2410_SDIDCON_RXAFTERCMD;
++ sdi_dcon |= S3C2410_SDIDCON_XFER_RXSTART;
++ }
++
++ s3c2410sdi_dma_setup(host, mrq->data->flags & MMC_DATA_WRITE ? S3C2410_DMASRC_MEM : S3C2410_DMASRC_HW);
++
++ /* see DMA-API.txt */
++ dma_len = dma_map_sg(&pdev->dev, mrq->data->sg, \
++ mrq->data->sg_len, \
++ mrq->data->flags & MMC_DATA_READ ? DMA_FROM_DEVICE : DMA_TO_DEVICE);
++
++ /* start DMA */
++ s3c2410_dma_enqueue(host->dma, (void *) host,
++ sg_dma_address(&mrq->data->sg[0]),
++ (mrq->data->blocks << mrq->data->blksz_bits) );
++ }
++
++ host->mrq = mrq;
++
++ init_completion(&host->complete_request);
++ init_completion(&host->complete_dma);
++
++ /* Clear command and data status registers */
++ writel(0xFFFFFFFF, host->base + S3C2410_SDICMDSTAT);
++ writel(0xFFFFFFFF, host->base + S3C2410_SDIDSTA);
++
++ /* Setup SDI controller */
++ writel(sdi_bsize,host->base + S3C2410_SDIBSIZE);
++ writel(sdi_timer,host->base + S3C2410_SDITIMER);
++ writel(sdi_imsk,host->base + S3C2410_SDIIMSK);
++
++ /* Setup SDI command argument and data control */
++ writel(sdi_carg, host->base + S3C2410_SDICMDARG);
++ writel(sdi_dcon, host->base + S3C2410_SDIDCON);
++
++ /* This initiates transfer */
++ writel(sdi_ccon, host->base + S3C2410_SDICMDCON);
++
++ /* Wait for transfer to complete */
++ wait_for_completion(&host->complete_request);
++ DBG(PFX "[CMD] request complete.\n");
++ if(mrq->data) {
++ wait_for_completion(&host->complete_dma);
++ DBG(PFX "[DAT] DMA complete.\n");
++ }
++
++ /* Cleanup controller */
++ writel(0, host->base + S3C2410_SDICMDARG);
++ writel(0, host->base + S3C2410_SDIDCON);
++ writel(0, host->base + S3C2410_SDICMDCON);
++ writel(0, host->base + S3C2410_SDIIMSK);
++
++ /* Read response */
++ mrq->cmd->resp[0] = readl(host->base + S3C2410_SDIRSP0);
++ mrq->cmd->resp[1] = readl(host->base + S3C2410_SDIRSP1);
++ mrq->cmd->resp[2] = readl(host->base + S3C2410_SDIRSP2);
++ mrq->cmd->resp[3] = readl(host->base + S3C2410_SDIRSP3);
++
++ host->mrq = NULL;
++
++ DBG(PFX "request done.\n");
++
++ /* If we have no data transfer we are finished here */
++ if (!mrq->data) goto request_done;
++
++ dma_unmap_sg(&pdev->dev, mrq->data->sg, dma_len, \
++ mrq->data->flags & MMC_DATA_READ ? DMA_FROM_DEVICE : DMA_TO_DEVICE);
++
++ /* Calulate the amout of bytes transfer, but only if there was
++ * no error
++ */
++ if(mrq->data->error == MMC_ERR_NONE) {
++ mrq->data->bytes_xfered = (mrq->data->blocks << mrq->data->blksz_bits);
++ } else {
++ mrq->data->bytes_xfered = 0;
++ }
++
++ /* If we had an error while transfering data we flush the
++ * DMA channel to clear out any garbage
++ */
++ if(mrq->data->error != MMC_ERR_NONE) {
++ s3c2410_dma_ctrl(host->dma, S3C2410_DMAOP_FLUSH);
++ DBG(PFX "flushing DMA.\n");
++ }
++
++ if(mrq->data->stop) mmc_wait_for_cmd(mmc, mrq->data->stop, 3);
++
++request_done:
++
++ mrq->done(mrq);
++}
++
++static void s3c2410sdi_set_ios(struct mmc_host *mmc, struct mmc_ios *ios) {
++ struct s3c2410sdi_host *host = mmc_priv(mmc);
++ u32 sdi_psc, sdi_con;
++
++ /* Set power */
++ sdi_con = readl(host->base + S3C2410_SDICON);
++ switch(ios->power_mode) {
++ case MMC_POWER_ON:
++ case MMC_POWER_UP:
++ DBG(PFX "power on\n");
++ s3c2410_gpio_cfgpin(S3C2410_GPE5, S3C2410_GPE5_SDCLK);
++ s3c2410_gpio_cfgpin(S3C2410_GPE6, S3C2410_GPE6_SDCMD);
++ s3c2410_gpio_cfgpin(S3C2410_GPE7, S3C2410_GPE7_SDDAT0);
++ s3c2410_gpio_cfgpin(S3C2410_GPE8, S3C2410_GPE8_SDDAT1);
++ s3c2410_gpio_cfgpin(S3C2410_GPE9, S3C2410_GPE9_SDDAT2);
++ s3c2410_gpio_cfgpin(S3C2410_GPE10, S3C2410_GPE10_SDDAT3);
++
++ if (host->pdata->set_power)
++ (host->pdata->set_power)(1);
++
++ sdi_con|= S3C2410_SDICON_FIFORESET;
++ break;
++
++ case MMC_POWER_OFF:
++ default:
++ if (host->pdata->set_power)
++ (host->pdata->set_power)(0);
++ break;
++ }
++
++ /* Set clock */
++ for(sdi_psc=0;sdi_psc<255;sdi_psc++) {
++ if( (clk_get_rate(host->clk) / (2*(sdi_psc+1))) <= ios->clock) break;
++ }
++
++ if(sdi_psc > 255) sdi_psc = 255;
++ writel(sdi_psc, host->base + S3C2410_SDIPRE);
++
++ /* Set CLOCK_ENABLE */
++ if(ios->clock) sdi_con |= S3C2410_SDICON_CLOCKTYPE;
++ else sdi_con &=~S3C2410_SDICON_CLOCKTYPE;
++
++ writel(sdi_con, host->base + S3C2410_SDICON);
++
++ host->bus_width = ios->bus_width;
++
++}
++
++static struct mmc_host_ops s3c2410sdi_ops = {
++ .request = s3c2410sdi_request,
++ .set_ios = s3c2410sdi_set_ios,
++};
++
++static void s3c2410_mmc_def_setpower(unsigned int to)
++{
++ s3c2410_gpio_cfgpin(S3C2410_GPA17, S3C2410_GPIO_OUTPUT);
++ s3c2410_gpio_setpin(S3C2410_GPA17, to);
++}
++
++static struct s3c24xx_mmc_platdata s3c2410_mmc_defplat = {
++ .gpio_detect = S3C2410_GPF2,
++ .set_power = s3c2410_mmc_def_setpower,
++ .f_max = 3000000,
++ .ocr_avail = MMC_VDD_32_33,
++};
++
++static int s3c2410sdi_probe(struct platform_device *pdev)
++{
++ struct mmc_host *mmc;
++ s3c24xx_mmc_pdata_t *pdata;
++ struct s3c2410sdi_host *host;
++
++
++ int ret;
++
++ mmc = mmc_alloc_host(sizeof(struct s3c2410sdi_host), &pdev->dev);
++ if (!mmc) {
++ ret = -ENOMEM;
++ goto probe_out;
++ }
++
++ host = mmc_priv(mmc);
++
++ spin_lock_init( &host->complete_lock );
++ host->complete_what = COMPLETION_NONE;
++ host->mmc = mmc;
++ host->dma = S3C2410SDI_DMA;
++
++ pdata = pdev->dev.platform_data;
++ if (!pdata) {
++ pdev->dev.platform_data = &s3c2410_mmc_defplat;
++ pdata = &s3c2410_mmc_defplat;
++ }
++
++ host->pdata = pdata;
++
++ host->irq_cd = s3c2410_gpio_getirq(pdata->gpio_detect);
++ s3c2410_gpio_cfgpin(pdata->gpio_detect, S3C2410_GPIO_IRQ);
++
++ host->mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++ if (!host->mem) {
++ printk(KERN_ERR PFX "failed to get io memory region resouce.\n");
++ ret = -ENOENT;
++ goto probe_free_host;
++ }
++
++ host->mem = request_mem_region(host->mem->start,
++ RESSIZE(host->mem), pdev->name);
++
++ if (!host->mem) {
++ printk(KERN_ERR PFX "failed to request io memory region.\n");
++ ret = -ENOENT;
++ goto probe_free_host;
++ }
++
++ host->base = ioremap(host->mem->start, RESSIZE(host->mem));
++ if (host->base == 0) {
++ printk(KERN_ERR PFX "failed to ioremap() io memory region.\n");
++ ret = -EINVAL;
++ goto probe_free_mem_region;
++ }
++
++ host->irq = platform_get_irq(pdev, 0);
++ if (host->irq == 0) {
++ printk(KERN_ERR PFX "failed to get interrupt resouce.\n");
++ ret = -EINVAL;
++ goto probe_iounmap;
++ }
++
++ if(request_irq(host->irq, s3c2410sdi_irq, 0, DRIVER_NAME, host)) {
++ printk(KERN_ERR PFX "failed to request sdi interrupt.\n");
++ ret = -ENOENT;
++ goto probe_iounmap;
++ }
++
++ set_irq_type(host->irq_cd, IRQT_BOTHEDGE);
++ if(request_irq(host->irq_cd, s3c2410sdi_irq_cd, 0, DRIVER_NAME, host)) {
++ printk(KERN_ERR PFX "failed to request card detect interrupt.\n" );
++ ret = -ENOENT;
++ goto probe_free_irq;
++ }
++
++ if(s3c2410_dma_request(S3C2410SDI_DMA, &s3c2410sdi_dma_client, NULL)) {
++ printk(KERN_ERR PFX "unable to get DMA channel.\n" );
++ ret = -EBUSY;
++ goto probe_free_irq_cd;
++ }
++
++ host->clk = clk_get(&pdev->dev, "sdi");
++ if (IS_ERR(host->clk)) {
++ printk(KERN_ERR PFX "failed to find clock source.\n");
++ ret = PTR_ERR(host->clk);
++ host->clk = NULL;
++ goto probe_free_host;
++ }
++
++ if((ret = clk_enable(host->clk))) {
++ printk(KERN_ERR PFX "failed to enable clock source.\n");
++ goto clk_unuse;
++ }
++
++
++ mmc->ops = &s3c2410sdi_ops;
++ mmc->ocr_avail = pdata->ocr_avail;
++ mmc->f_min = clk_get_rate(host->clk) / 512;
++ mmc->f_max = clk_get_rate(host->clk) / 2;
++ mmc->caps = MMC_CAP_4_BIT_DATA;
++
++ if(pdata->f_max && (mmc->f_max>pdata->f_max))
++ mmc->f_max = pdata->f_max;
++
++ /*
++ * Since we only have a 16-bit data length register, we must
++ * ensure that we don't exceed 2^16-1 bytes in a single request.
++ * Choose 64 (512-byte) sectors as the limit.
++ */
++ mmc->max_sectors = 64;
++
++ /*
++ * Set the maximum segment size. Since we aren't doing DMA
++ * (yet) we are only limited by the data length register.
++ */
++
++ mmc->max_seg_size = mmc->max_sectors << 9;
++ printk(KERN_INFO PFX "probe: mapped sdi_base=%p irq=%u irq_cd=%u \n",
++ host->base, host->irq, host->irq_cd);
++
++ if((ret = mmc_add_host(mmc))) {
++ printk(KERN_ERR PFX "failed to add mmc host.\n");
++ goto clk_disable;
++ }
++
++ platform_set_drvdata(pdev, mmc);
++
++ mmc_detect_change(mmc, 0);
++
++ printk(KERN_INFO PFX "initialisation done.\n");
++ return 0;
++
++ clk_disable:
++ clk_disable(host->clk);
++
++ clk_unuse:
++ clk_put(host->clk);
++
++ probe_free_irq_cd:
++ free_irq(host->irq_cd, host);
++
++ probe_free_irq:
++ free_irq(host->irq, host);
++
++ probe_iounmap:
++ iounmap(host->base);
++
++ probe_free_mem_region:
++ release_mem_region(host->mem->start, RESSIZE(host->mem));
++
++ probe_free_host:
++ mmc_free_host(mmc);
++ probe_out:
++ return ret;
++}
++
++static int s3c2410sdi_remove(struct platform_device *pdev)
++{
++ struct mmc_host *mmc = platform_get_drvdata(pdev);
++ struct s3c2410sdi_host *host = mmc_priv(mmc);
++
++ mmc_remove_host(mmc);
++ clk_disable(host->clk);
++ clk_put(host->clk);
++ free_irq(host->irq_cd, host);
++ free_irq(host->irq, host);
++ iounmap(host->base);
++ release_mem_region(host->mem->start, RESSIZE(host->mem));
++ mmc_free_host(mmc);
++
++ return 0;
++}
++
++#ifdef CONFIG_PM
++static int s3c2410mci_suspend(struct platform_device *dev, pm_message_t state)
++{
++ struct mmc_host *mmc = platform_get_drvdata(dev);
++ struct s3c2410sdi_host *host;
++ int ret = 0;
++
++ if (mmc) {
++ host = mmc_priv(mmc);
++
++ ret = mmc_suspend_host(mmc, state);
++
++ clk_disable(host->clk);
++
++ disable_irq(host->irq_cd);
++ disable_irq(host->irq);
++ }
++
++ return ret;
++}
++
++static int s3c2410mci_resume(struct platform_device *dev)
++{
++ struct mmc_host *mmc = platform_get_drvdata(dev);
++ struct s3c2410sdi_host *host;
++ int ret = 0;
++
++ if (mmc) {
++ host = mmc_priv(mmc);
++
++ enable_irq(host->irq_cd);
++ enable_irq(host->irq);
++
++ clk_enable(host->clk);
++
++ ret = mmc_resume_host(mmc);
++ }
++
++ return ret;
++}
++#else
++#define s3c2410mci_suspend NULL
++#define s3c2410mci_resume NULL
++#endif
++
++static struct platform_driver s3c2410sdi_driver =
++{
++ .driver = {
++ .name = "s3c2410-sdi",
++ .owner = THIS_MODULE,
++ },
++ .probe = s3c2410sdi_probe,
++ .remove = s3c2410sdi_remove,
++ .suspend = s3c2410mci_suspend,
++ .resume = s3c2410mci_resume,
++};
++
++static int __init s3c2410sdi_init(void)
++{
++ return platform_driver_register(&s3c2410sdi_driver);
++}
++
++static void __exit s3c2410sdi_exit(void)
++{
++ platform_driver_unregister(&s3c2410sdi_driver);
++}
++
++module_init(s3c2410sdi_init);
++module_exit(s3c2410sdi_exit);
++
++MODULE_DESCRIPTION("Samsung S3C2410 Multimedia Card Interface driver");
++MODULE_LICENSE("GPL");
+Index: linux-2.6.17.7-new/drivers/mmc/s3c2410mci.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.17.7-new/drivers/mmc/s3c2410mci.h 2006-08-07 09:33:51.000000000 +0200
+@@ -0,0 +1,55 @@
++/*
++ * linux/drivers/mmc/s3c2410mci.h - Samsung S3C2410 SDI Interface driver
++ *
++ * Copyright (C) 2004 Thomas Kleffel, All Rights Reserved.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++struct clk;
++
++#define S3C2410SDI_DMA 0
++
++#define S3C2410SDI_CDLATENCY 50
++
++enum s3c2410sdi_waitfor {
++ COMPLETION_NONE,
++ COMPLETION_CMDSENT,
++ COMPLETION_RSPFIN,
++ COMPLETION_XFERFINISH,
++ COMPLETION_XFERFINISH_RSPFIN,
++};
++
++typedef struct s3c24xx_mmc_platdata s3c24xx_mmc_pdata_t;
++
++struct s3c2410sdi_host {
++ struct mmc_host *mmc;
++ s3c24xx_mmc_pdata_t *pdata;
++
++ struct resource *mem;
++ struct clk *clk;
++ void __iomem *base;
++ int irq;
++ int irq_cd;
++ int dma;
++
++ struct scatterlist* cur_sg; /* Current SG entry */
++ unsigned int num_sg; /* Number of entries left */
++ void* mapped_sg; /* vaddr of mapped sg */
++
++ unsigned int offset; /* Offset into current entry */
++ unsigned int remain; /* Data left in curren entry */
++
++ int size; /* Total size of transfer */
++
++ struct mmc_request *mrq;
++
++ unsigned char bus_width; /* Current bus width */
++
++ spinlock_t complete_lock;
++ struct completion complete_request;
++ struct completion complete_dma;
++ enum s3c2410sdi_waitfor complete_what;
++};
+Index: linux-2.6.17.7-new/include/asm-arm/arch-s3c2410/mmc.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.17.7-new/include/asm-arm/arch-s3c2410/mmc.h 2006-08-07 09:33:51.000000000 +0200
+@@ -0,0 +1,32 @@
++/* linux/include/asm-arm/arch-s3c2410/mmc.h
++ *
++ * (c) 2004-2005 Simtec Electronics
++ * http://www.simtec.co.uk/products/SWLINUX/
++ * Ben Dooks <ben at simtec.co.uk>
++ *
++ * S3C24XX - MMC/SD platform data
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * Changelog:
++ * 26-Oct-2005 BJD Created file
++*/
++
++#ifndef __ASM_ARCH_MMC_H
++#define __ASM_ARCH_MMC_H __FILE__
++
++struct s3c24xx_mmc_platdata {
++ unsigned int gpio_detect;
++ unsigned int gpio_wprotect;
++ unsigned int detect_polarity;
++ unsigned int wprotect_polarity;
++
++ unsigned long f_max;
++ unsigned long ocr_avail;
++
++ void (*set_power)(unsigned int to);
++};
++
++#endif /* __ASM_ARCH_MMC_H */
+Index: linux-2.6.17.7-new/include/asm-arm/arch-s3c2410/regs-sdi.h
+===================================================================
+--- linux-2.6.17.7-new.orig/include/asm-arm/arch-s3c2410/regs-sdi.h 2006-08-07 09:32:34.000000000 +0200
++++ linux-2.6.17.7-new/include/asm-arm/arch-s3c2410/regs-sdi.h 2006-08-07 09:33:51.000000000 +0200
+@@ -47,7 +47,8 @@
+ #define S3C2410_SDICMDCON_LONGRSP (1<<10)
+ #define S3C2410_SDICMDCON_WAITRSP (1<<9)
+ #define S3C2410_SDICMDCON_CMDSTART (1<<8)
+-#define S3C2410_SDICMDCON_INDEX (0xff)
++#define S3C2410_SDICMDCON_SENDERHOST (1<<6)
++#define S3C2410_SDICMDCON_INDEX (0x3f)
+
+ #define S3C2410_SDICMDSTAT_CRCFAIL (1<<12)
+ #define S3C2410_SDICMDSTAT_CMDSENT (1<<11)
+@@ -73,6 +74,7 @@
+ #define S3C2410_SDIDCON_XFER_RXSTART (2<<12)
+ #define S3C2410_SDIDCON_XFER_TXSTART (3<<12)
+
++#define S3C2410_SDIDCON_BLKNUM_MASK (0xFFF)
+ #define S3C2410_SDIDCNT_BLKNUM_SHIFT (12)
+
+ #define S3C2410_SDIDSTA_RDYWAITREQ (1<<10)
+@@ -115,4 +117,14 @@
+ #define S3C2410_SDIIMSK_RXFIFOFULL (1<<1)
+ #define S3C2410_SDIIMSK_RXFIFOHALF (1<<0)
+
++#define S3C2410_SDICMDCON_ABORT (1<<12)
++#define S3C2410_SDICMDCON_WITHDATA (1<<11)
++#define S3C2410_SDICMDCON_LONGRSP (1<<10)
++#define S3C2410_SDICMDCON_WAITRSP (1<<9)
++#define S3C2410_SDICMDCON_CMDSTART (1<<8)
++#define S3C2410_SDICMDCON_SENDERHOST (1<<6)
++
++#define S3C2410_SDIDCON_BLKNUM_MASK (0xFFF)
++#define S3C2410_SDIDCNT_BLKNUM_SHIFT (12)
++
+ #endif /* __ASM_ARM_REGS_SDI */
+Index: linux-2.6.17.7-new/arch/arm/mach-s3c2410/mach-qt2410.c
+===================================================================
+--- linux-2.6.17.7-new.orig/arch/arm/mach-s3c2410/mach-qt2410.c 2006-08-07 09:33:27.000000000 +0200
++++ linux-2.6.17.7-new/arch/arm/mach-s3c2410/mach-qt2410.c 2006-08-07 09:34:20.000000000 +0200
+@@ -29,6 +29,7 @@
+ #include <linux/timer.h>
+ #include <linux/init.h>
+ #include <linux/platform_device.h>
++#include <linux/mmc/protocol.h>
+
+ #include <linux/mtd/mtd.h>
+ #include <linux/mtd/nand.h>
+@@ -45,7 +46,9 @@
+ #include <asm/mach-types.h>
+
+ #include <asm/arch/regs-serial.h>
++#include <asm/arch/regs-gpio.h>
+ #include <asm/arch/fb.h>
++#include <asm/arch/mmc.h>
+ #include <asm/arch/nand.h>
+
+ #include "devs.h"
+@@ -236,6 +239,13 @@
+ .sets = qt2410_nand_sets,
+ };
+
++static struct s3c24xx_mmc_platdata qt2410_mmc_cfg = {
++ .gpio_detect = S3C2410_GPG10,
++ .gpio_wprotect = S3C2410_GPH8,
++ .set_power = NULL,
++ .ocr_avail = MMC_VDD_32_33,
++};
++
+ static void __init qt2410_map_io(void)
+ {
+ s3c24xx_init_io(qt2410_iodesc, ARRAY_SIZE(qt2410_iodesc));
+@@ -259,6 +269,7 @@
+ s3c2410_gpio_setpin(S3C2410_GPF7, 1);
+
+ s3c_device_nand.dev.platform_data = &qt2410_nand_info;
++ s3c_device_sdi.dev.platform_data = &qt2410_mmc_cfg;
+ s3c24xx_fb_set_platdata(&qt2410_lcd_cfg);
+
+ s3c2410_pm_init();
Added: trunk/oe/packages/linux/linux-qt2410/new/patches/qt2410-base.patch
===================================================================
--- trunk/oe/packages/linux/linux-qt2410/new/patches/qt2410-base.patch 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/linux/linux-qt2410/new/patches/qt2410-base.patch 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,338 @@
+Index: linux-2.6.17.7-new/arch/arm/mach-s3c2410/Kconfig
+===================================================================
+--- linux-2.6.17.7-new.orig/arch/arm/mach-s3c2410/Kconfig 2006-07-25 05:36:01.000000000 +0200
++++ linux-2.6.17.7-new/arch/arm/mach-s3c2410/Kconfig 2006-08-07 09:23:57.000000000 +0200
+@@ -63,6 +63,12 @@
+ Say Y here if you are using the SMDK2410 or the derived module A9M2410
+ <http://www.fsforth.de>
+
++config MACH_QT2410
++ bool "QT2410"
++ select CPU_S3C2410
++ help
++ Say Y here if you are using the Armzone QT2410
++
+ config ARCH_S3C2440
+ bool "SMDK2440"
+ select CPU_S3C2440
+Index: linux-2.6.17.7-new/arch/arm/mach-s3c2410/Makefile
+===================================================================
+--- linux-2.6.17.7-new.orig/arch/arm/mach-s3c2410/Makefile 2006-07-25 05:36:01.000000000 +0200
++++ linux-2.6.17.7-new/arch/arm/mach-s3c2410/Makefile 2006-08-07 09:18:43.000000000 +0200
+@@ -43,10 +43,11 @@
+ obj-$(CONFIG_ARCH_H1940) += mach-h1940.o
+ obj-$(CONFIG_MACH_N30) += mach-n30.o
+ obj-$(CONFIG_ARCH_SMDK2410) += mach-smdk2410.o
++obj-$(CONFIG_MACH_QT2410) += mach-qt2410.o
+ obj-$(CONFIG_ARCH_S3C2440) += mach-smdk2440.o
+ obj-$(CONFIG_MACH_VR1000) += mach-vr1000.o usb-simtec.o
+ obj-$(CONFIG_MACH_RX3715) += mach-rx3715.o
+ obj-$(CONFIG_MACH_OTOM) += mach-otom.o
+ obj-$(CONFIG_MACH_NEXCODER_2440) += mach-nexcoder.o
+
+-obj-$(CONFIG_MACH_SMDK) += common-smdk.o
+\ No newline at end of file
++obj-$(CONFIG_MACH_SMDK) += common-smdk.o
+Index: linux-2.6.17.7-new/arch/arm/mach-s3c2410/mach-qt2410.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.17.7-new/arch/arm/mach-s3c2410/mach-qt2410.c 2006-08-07 09:33:27.000000000 +0200
+@@ -0,0 +1,277 @@
++/*
++ *
++ * linux/arch/arm/mach-s3c2410/mach-qt2410.c
++ *
++ * Copyright (C) 2006 by Harald Welte <hwelte at hmw-consulting.de>
++ * All rights reserved.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/types.h>
++#include <linux/interrupt.h>
++#include <linux/list.h>
++#include <linux/timer.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++
++#include <linux/mtd/mtd.h>
++#include <linux/mtd/nand.h>
++#include <linux/mtd/nand_ecc.h>
++#include <linux/mtd/partitions.h>
++
++#include <asm/mach/arch.h>
++#include <asm/mach/map.h>
++#include <asm/mach/irq.h>
++
++#include <asm/hardware.h>
++#include <asm/io.h>
++#include <asm/irq.h>
++#include <asm/mach-types.h>
++
++#include <asm/arch/regs-serial.h>
++#include <asm/arch/fb.h>
++#include <asm/arch/nand.h>
++
++#include "devs.h"
++#include "cpu.h"
++
++#include "pm.h"
++
++static struct map_desc qt2410_iodesc[] __initdata = {
++ IODESC_ENT(SDI),
++ IODESC_ENT(IIS),
++ { 0xe0000000, __phys_to_pfn(S3C2410_CS3+0x01000000), SZ_1M, MT_DEVICE }
++};
++
++#define UCON S3C2410_UCON_DEFAULT
++#define ULCON S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB
++#define UFCON S3C2410_UFCON_RXTRIG8 | S3C2410_UFCON_FIFOMODE
++
++static struct s3c2410_uartcfg smdk2410_uartcfgs[] = {
++ [0] = {
++ .hwport = 0,
++ .flags = 0,
++ .ucon = UCON,
++ .ulcon = ULCON,
++ .ufcon = UFCON,
++ },
++ [1] = {
++ .hwport = 1,
++ .flags = 0,
++ .ucon = UCON,
++ .ulcon = ULCON,
++ .ufcon = UFCON,
++ },
++ [2] = {
++ .hwport = 2,
++ .flags = 0,
++ .ucon = UCON,
++ .ulcon = ULCON,
++ .ufcon = UFCON,
++ }
++};
++
++/* LCD driver info */
++
++static struct s3c2410fb_mach_info qt2410_lcd_cfg __initdata = {
++ .regs = {
++
++ .lcdcon1 = S3C2410_LCDCON1_TFT16BPP |
++ S3C2410_LCDCON1_TFT |
++ S3C2410_LCDCON1_CLKVAL(0x04),
++
++ .lcdcon2 = S3C2410_LCDCON2_VBPD(1) |
++ S3C2410_LCDCON2_LINEVAL(319) |
++ S3C2410_LCDCON2_VFPD(6) |
++ S3C2410_LCDCON2_VSPW(3),
++
++ .lcdcon3 = S3C2410_LCDCON3_HBPD(12) |
++ S3C2410_LCDCON3_HOZVAL(239) |
++ S3C2410_LCDCON3_HFPD(7),
++
++ .lcdcon4 = S3C2410_LCDCON4_MVAL(0) |
++ S3C2410_LCDCON4_HSPW(3),
++
++ .lcdcon5 = S3C2410_LCDCON5_FRM565 |
++ S3C2410_LCDCON5_INVVLINE |
++ S3C2410_LCDCON5_INVVFRAME |
++ S3C2410_LCDCON5_PWREN |
++ S3C2410_LCDCON5_HWSWP,
++ },
++
++#if 0
++ /* currently setup by downloader */
++ .gpccon = 0xaa940659,
++ .gpccon_mask = 0xffffffff,
++ .gpcup = 0x0000ffff,
++ .gpcup_mask = 0xffffffff,
++ .gpdcon = 0xaa84aaa0,
++ .gpdcon_mask = 0xffffffff,
++ .gpdup = 0x0000faff,
++ .gpdup_mask = 0xffffffff,
++#endif
++
++ .lpcsel = ((0xCE6) & ~7) | 1<<4,
++
++ .width = 240,
++ .height = 320,
++
++ .xres = {
++ .min = 240,
++ .max = 240,
++ .defval = 240,
++ },
++
++ .yres = {
++ .min = 320,
++ .max = 320,
++ .defval = 320,
++ },
++
++ .bpp = {
++ .min = 16,
++ .max = 16,
++ .defval = 16,
++ },
++};
++
++static struct resource cs89x0_resources[] = {
++ [0] = {
++ .start = 0x19000000,
++ .end = 0x19000000 + 16,
++ .flags = IORESOURCE_MEM,
++ },
++ [1] = {
++ .start = IRQ_EINT9,
++ .end = IRQ_EINT9,
++ .flags = IORESOURCE_IRQ,
++ },
++};
++
++static struct platform_device cs89x0_device = {
++ .name = "cirrus-cs89x0",
++ .num_resources = ARRAY_SIZE(cs89x0_resources),
++ .resource = cs89x0_resources,
++};
++
++static struct platform_device *qt2410_devices[] __initdata = {
++ &s3c_device_usb,
++ &s3c_device_lcd,
++ &s3c_device_wdt,
++ &s3c_device_i2c,
++ &s3c_device_iis,
++ &s3c_device_sdi,
++ &s3c_device_usbgadget,
++ &s3c_device_nand,
++ &cs89x0_device,
++};
++
++static struct s3c24xx_board qt2410_board __initdata = {
++ .devices = qt2410_devices,
++ .devices_count = ARRAY_SIZE(qt2410_devices)
++};
++
++static struct mtd_partition qt2410_nand_part[] = {
++ [0] = {
++ .name = "U-Boot",
++ .size = 0x30000,
++ .offset = 0,
++ },
++ [1] = {
++ .name = "U-Boot environment",
++ .offset = 0x30000,
++ .size = 0x4000,
++ },
++ [2] = {
++ .name = "kernel",
++ .offset = 0x34000,
++ .size = SZ_2M,
++ },
++ [3] = {
++ .name = "initrd",
++ .offset = 0x234000,
++ .size = SZ_4M,
++ },
++ [4] = {
++ .name = "jffs2",
++ .offset = 0x634000,
++ .size = 0x39cc000,
++ },
++};
++
++static struct s3c2410_nand_set qt2410_nand_sets[] = {
++ [0] = {
++ .name = "NAND",
++ .nr_chips = 1,
++ .nr_partitions = ARRAY_SIZE(qt2410_nand_part),
++ .partitions = qt2410_nand_part,
++ },
++};
++
++/* choose a set of timings which should suit most 512Mbit
++ * chips and beyond.
++ */
++
++static struct s3c2410_platform_nand qt2410_nand_info = {
++ .tacls = 20,
++ .twrph0 = 60,
++ .twrph1 = 20,
++ .nr_sets = ARRAY_SIZE(qt2410_nand_sets),
++ .sets = qt2410_nand_sets,
++};
++
++static void __init qt2410_map_io(void)
++{
++ s3c24xx_init_io(qt2410_iodesc, ARRAY_SIZE(qt2410_iodesc));
++ s3c24xx_init_clocks(0);
++ s3c24xx_init_uarts(smdk2410_uartcfgs, ARRAY_SIZE(smdk2410_uartcfgs));
++ s3c24xx_set_board(&qt2410_board);
++}
++
++static void __init qt2410_machine_init(void)
++{
++ /* Configure the LEDs (even if we have no LED support)*/
++
++ s3c2410_gpio_cfgpin(S3C2410_GPF4, S3C2410_GPF4_OUTP);
++ s3c2410_gpio_cfgpin(S3C2410_GPF5, S3C2410_GPF5_OUTP);
++ s3c2410_gpio_cfgpin(S3C2410_GPF6, S3C2410_GPF6_OUTP);
++ s3c2410_gpio_cfgpin(S3C2410_GPF7, S3C2410_GPF7_OUTP);
++
++ s3c2410_gpio_setpin(S3C2410_GPF4, 1);
++ s3c2410_gpio_setpin(S3C2410_GPF5, 1);
++ s3c2410_gpio_setpin(S3C2410_GPF6, 1);
++ s3c2410_gpio_setpin(S3C2410_GPF7, 1);
++
++ s3c_device_nand.dev.platform_data = &qt2410_nand_info;
++ s3c24xx_fb_set_platdata(&qt2410_lcd_cfg);
++
++ s3c2410_pm_init();
++}
++
++MACHINE_START(QT2410, "QT2410")
++ .phys_io = S3C2410_PA_UART,
++ .io_pg_offst = (((u32)S3C24XX_VA_UART) >> 18) & 0xfffc,
++ .boot_params = S3C2410_SDRAM_PA + 0x100,
++ .map_io = qt2410_map_io,
++ .init_irq = s3c24xx_init_irq,
++ .init_machine = qt2410_machine_init,
++ .timer = &s3c24xx_timer,
++MACHINE_END
++
++
+Index: linux-2.6.17.7-new/arch/arm/tools/mach-types
+===================================================================
+--- linux-2.6.17.7-new.orig/arch/arm/tools/mach-types 2006-07-25 05:36:01.000000000 +0200
++++ linux-2.6.17.7-new/arch/arm/tools/mach-types 2006-08-07 09:18:43.000000000 +0200
+@@ -1040,3 +1040,4 @@
+ ai2410 MACH_AI2410 AI2410 1027
+ ixp465 MACH_IXP465 IXP465 1028
+ balloon3 MACH_BALLOON3 BALLOON3 1029
++qt2410 MACH_QT2410 QT2410 1108
+Index: linux-2.6.17.7-new/include/asm-arm/arch-s3c2410/map.h
+===================================================================
+--- linux-2.6.17.7-new.orig/include/asm-arm/arch-s3c2410/map.h 2006-07-25 05:36:01.000000000 +0200
++++ linux-2.6.17.7-new/include/asm-arm/arch-s3c2410/map.h 2006-08-07 09:18:43.000000000 +0200
+@@ -225,6 +225,7 @@
+ #define S3C24XX_PA_RTC S3C2410_PA_RTC
+ #define S3C24XX_PA_ADC S3C2410_PA_ADC
+ #define S3C24XX_PA_SPI S3C2410_PA_SPI
++#define S3C24XX_PA_SDI S3C2410_PA_SDI
+ #endif
+
+ #endif /* __ASM_ARCH_MAP_H */
Added: trunk/oe/packages/linux/linux-qt2410/new/patches/qt2410-biglcd.patch
===================================================================
--- trunk/oe/packages/linux/linux-qt2410/new/patches/qt2410-biglcd.patch 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/linux/linux-qt2410/new/patches/qt2410-biglcd.patch 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,178 @@
+Index: linux-2.6.17.7-new/arch/arm/mach-s3c2410/mach-qt2410.c
+===================================================================
+--- linux-2.6.17.7-new.orig/arch/arm/mach-s3c2410/mach-qt2410.c 2006-08-27 15:37:33.000000000 +0200
++++ linux-2.6.17.7-new/arch/arm/mach-s3c2410/mach-qt2410.c 2006-08-28 12:08:02.000000000 +0200
+@@ -94,6 +94,133 @@
+
+ /* LCD driver info */
+
++/* Configuration for 640x480 SHARP LQ080V3DG01 */
++static struct s3c2410fb_mach_info qt2410_biglcd_cfg __initdata = {
++ .regs = {
++
++ .lcdcon1 = S3C2410_LCDCON1_TFT16BPP |
++ S3C2410_LCDCON1_TFT |
++ S3C2410_LCDCON1_CLKVAL(0x01), /* HCLK/4 */
++
++ .lcdcon2 = S3C2410_LCDCON2_VBPD(18) | /* 19 */
++ S3C2410_LCDCON2_LINEVAL(479) |
++ S3C2410_LCDCON2_VFPD(10) | /* 11 */
++ S3C2410_LCDCON2_VSPW(14), /* 15 */
++
++ .lcdcon3 = S3C2410_LCDCON3_HBPD(43) | /* 44 */
++ S3C2410_LCDCON3_HOZVAL(639) | /* 640 */
++ S3C2410_LCDCON3_HFPD(115), /* 116 */
++
++ .lcdcon4 = S3C2410_LCDCON4_MVAL(0) |
++ S3C2410_LCDCON4_HSPW(95), /* 96 */
++
++ .lcdcon5 = S3C2410_LCDCON5_FRM565 |
++ S3C2410_LCDCON5_INVVLINE |
++ S3C2410_LCDCON5_INVVFRAME |
++ S3C2410_LCDCON5_PWREN |
++ S3C2410_LCDCON5_HWSWP,
++ },
++
++#if 0
++ /* currently setup by downloader */
++ .gpccon = 0xaa940659,
++ .gpccon_mask = 0xffffffff,
++ .gpcup = 0x0000ffff,
++ .gpcup_mask = 0xffffffff,
++ .gpdcon = 0xaa84aaa0,
++ .gpdcon_mask = 0xffffffff,
++ .gpdup = 0x0000faff,
++ .gpdup_mask = 0xffffffff,
++#endif
++
++ .lpcsel = ((0xCE6) & ~7) | 1<<4,
++
++ .width = 640,
++ .height = 480,
++
++ .xres = {
++ .min = 640,
++ .max = 640,
++ .defval = 640,
++ },
++
++ .yres = {
++ .min = 480,
++ .max = 480,
++ .defval = 480,
++ },
++
++ .bpp = {
++ .min = 16,
++ .max = 16,
++ .defval = 16,
++ },
++};
++
++/* Configuration for 480x640 toppoly TD028TTEC1 */
++static struct s3c2410fb_mach_info qt2410_prodlcd_cfg __initdata = {
++ .regs = {
++
++ .lcdcon1 = S3C2410_LCDCON1_TFT16BPP |
++ S3C2410_LCDCON1_TFT |
++ S3C2410_LCDCON1_CLKVAL(0x01), /* HCLK/4 */
++
++ .lcdcon2 = S3C2410_LCDCON2_VBPD(1) | /* 2 */
++ S3C2410_LCDCON2_LINEVAL(639) |/* 640 */
++ S3C2410_LCDCON2_VFPD(3) | /* 4 */
++ S3C2410_LCDCON2_VSPW(1), /* 2 */
++
++ .lcdcon3 = S3C2410_LCDCON3_HBPD(7) | /* 8 */
++ S3C2410_LCDCON3_HOZVAL(479) | /* 479 */
++ S3C2410_LCDCON3_HFPD(23), /* 24 */
++
++ .lcdcon4 = S3C2410_LCDCON4_MVAL(0) |
++ S3C2410_LCDCON4_HSPW(7), /* 8 */
++
++ .lcdcon5 = S3C2410_LCDCON5_FRM565 |
++ S3C2410_LCDCON5_INVVLINE |
++ S3C2410_LCDCON5_INVVFRAME |
++ S3C2410_LCDCON5_PWREN |
++ S3C2410_LCDCON5_HWSWP,
++ },
++
++#if 0
++ /* currently setup by downloader */
++ .gpccon = 0xaa940659,
++ .gpccon_mask = 0xffffffff,
++ .gpcup = 0x0000ffff,
++ .gpcup_mask = 0xffffffff,
++ .gpdcon = 0xaa84aaa0,
++ .gpdcon_mask = 0xffffffff,
++ .gpdup = 0x0000faff,
++ .gpdup_mask = 0xffffffff,
++#endif
++
++ .lpcsel = ((0xCE6) & ~7) | 1<<4,
++
++ .width = 480,
++ .height = 640,
++
++ .xres = {
++ .min = 480,
++ .max = 480,
++ .defval = 480,
++ },
++
++ .yres = {
++ .min = 640,
++ .max = 640,
++ .defval = 640,
++ },
++
++ .bpp = {
++ .min = 16,
++ .max = 16,
++ .defval = 16,
++ },
++};
++
++/* Config for 240x320 LCD */
+ static struct s3c2410fb_mach_info qt2410_lcd_cfg __initdata = {
+ .regs = {
+
+@@ -275,6 +402,17 @@
+ .oversampling_shift = 2,
+ };
+
++static char tft_type = 's';
++
++int __init tft_setup(char *str)
++{
++ tft_type = str[0];
++ return 1;
++}
++
++__setup("tft=", tft_setup);
++
++
+ static void __init qt2410_map_io(void)
+ {
+ s3c24xx_init_io(qt2410_iodesc, ARRAY_SIZE(qt2410_iodesc));
+@@ -299,7 +437,20 @@
+
+ s3c_device_nand.dev.platform_data = &qt2410_nand_info;
+ s3c_device_sdi.dev.platform_data = &qt2410_mmc_cfg;
+- s3c24xx_fb_set_platdata(&qt2410_lcd_cfg);
++
++ switch (tft_type) {
++ case 'p': /* production */
++ s3c24xx_fb_set_platdata(&qt2410_prodlcd_cfg);
++ break;
++ case 'b': /* big */
++ s3c24xx_fb_set_platdata(&qt2410_biglcd_cfg);
++ break;
++ case 's': /* small */
++ default:
++ s3c24xx_fb_set_platdata(&qt2410_lcd_cfg);
++ break;
++ }
++
+ s3c24xx_udc_set_platdata(&qt2410_udc_cfg);
+ set_s3c2410ts_info(&qt2410_ts_cfg);
+
Added: trunk/oe/packages/linux/linux-qt2410/new/patches/qt2410-cs8900.patch
===================================================================
--- trunk/oe/packages/linux/linux-qt2410/new/patches/qt2410-cs8900.patch 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/linux/linux-qt2410/new/patches/qt2410-cs8900.patch 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,60 @@
+diff -Nru --exclude-from=/sunbeam/home/laforge/scripts/dontdiff linux-2.6.17.5/drivers/net/Kconfig linux-2.6.17.5-old/drivers/net/Kconfig
+--- linux-2.6.17.5/drivers/net/Kconfig 2006-07-15 04:38:43.000000000 +0200
++++ linux-2.6.17.5-old/drivers/net/Kconfig 2006-08-06 13:31:47.000000000 +0200
+@@ -1246,7 +1246,7 @@
+
+ config NET_PCI
+ bool "EISA, VLB, PCI and on board controllers"
+- depends on NET_ETHERNET && (ISA || EISA || PCI)
++ depends on NET_ETHERNET && (ISA || EISA || PCI || MACH_QT2410)
+ help
+ This is another class of network cards which attach directly to the
+ bus. If you have one of those, say Y and read the Ethernet-HOWTO,
+@@ -1386,7 +1386,7 @@
+
+ config CS89x0
+ tristate "CS89x0 support"
+- depends on NET_PCI && (ISA || MACH_IXDP2351 || ARCH_IXDP2X01 || ARCH_PNX010X)
++ depends on NET_PCI && (ISA || MACH_IXDP2351 || ARCH_IXDP2X01 || ARCH_PNX010X || MACH_QT2410)
+ ---help---
+ Support for CS89x0 chipset based Ethernet cards. If you have a
+ network (Ethernet) card of this type, say Y and read the
+diff -Nru --exclude-from=/sunbeam/home/laforge/scripts/dontdiff linux-2.6.17.5/drivers/net/cs89x0.c linux-2.6.17.5-old/drivers/net/cs89x0.c
+--- linux-2.6.17.5/drivers/net/cs89x0.c 2006-07-15 04:38:43.000000000 +0200
++++ linux-2.6.17.5-old/drivers/net/cs89x0.c 2006-08-06 15:37:49.000000000 +0200
+@@ -195,6 +195,10 @@
+ #define CIRRUS_DEFAULT_IRQ VH_INTC_INT_NUM_CASCADED_INTERRUPT_1 /* Event inputs bank 1 - ID 35/bit 3 */
+ static unsigned int netcard_portlist[] __initdata = {CIRRUS_DEFAULT_BASE, 0};
+ static unsigned int cs8900_irq_map[] = {CIRRUS_DEFAULT_IRQ, 0, 0, 0};
++#elif defined(CONFIG_MACH_QT2410)
++#include <asm/arch/irqs.h>
++static unsigned int netcard_portlist [] __initdata = { 0xe0000300, 0 };
++static unsigned int cs8900_irq_map[] = { IRQ_EINT9, 0, 0, 0 };
+ #else
+ static unsigned int netcard_portlist[] __initdata =
+ { 0x300, 0x320, 0x340, 0x360, 0x200, 0x220, 0x240, 0x260, 0x280, 0x2a0, 0x2c0, 0x2e0, 0};
+@@ -830,6 +834,14 @@
+
+ printk(" IRQ %d", dev->irq);
+
++ dev->dev_addr[0] = 0x00;
++ dev->dev_addr[1] = 0x00;
++ dev->dev_addr[2] = 0xc0;
++ dev->dev_addr[3] = 0xff;
++ dev->dev_addr[4] = 0xee;
++ dev->dev_addr[5] = 0x08;
++ set_mac_address(dev, dev->dev_addr);
++
+ #if ALLOW_DMA
+ if (lp->use_dma) {
+ get_dma_channel(dev);
+@@ -1310,7 +1322,7 @@
+ else
+ #endif
+ {
+-#if !defined(CONFIG_MACH_IXDP2351) && !defined(CONFIG_ARCH_IXDP2X01) && !defined(CONFIG_ARCH_PNX010X)
++#if !defined(CONFIG_MACH_IXDP2351) && !defined(CONFIG_ARCH_IXDP2X01) && !defined(CONFIG_ARCH_PNX010X) && !defined(CONFIG_MACH_QT2410)
+ if (((1 << dev->irq) & lp->irq_map) == 0) {
+ printk(KERN_ERR "%s: IRQ %d is not in our map of allowable IRQs, which is %x\n",
+ dev->name, dev->irq, lp->irq_map);
+
Added: trunk/oe/packages/linux/linux-qt2410/new/patches/s3c2410_serial-nodebug.patch
===================================================================
--- trunk/oe/packages/linux/linux-qt2410/new/patches/s3c2410_serial-nodebug.patch 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/linux/linux-qt2410/new/patches/s3c2410_serial-nodebug.patch 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,28 @@
+Index: linux-2.6.17.7-new/drivers/serial/s3c2410.c
+===================================================================
+--- linux-2.6.17.7-new.orig/drivers/serial/s3c2410.c 2006-08-12 01:43:50.000000000 +0530
++++ linux-2.6.17.7-new/drivers/serial/s3c2410.c 2006-08-12 01:44:30.000000000 +0530
+@@ -710,10 +710,6 @@
+ int calc_deviation;
+
+ for (sptr = res; sptr < resptr; sptr++) {
+- printk(KERN_DEBUG
+- "found clk %p (%s) quot %d, calc %d\n",
+- sptr->clksrc, sptr->clksrc->name,
+- sptr->quot, sptr->calc);
+
+ calc_deviation = baud - sptr->calc;
+ if (calc_deviation < 0)
+@@ -725,12 +721,8 @@
+ }
+ }
+
+- printk(KERN_DEBUG "best %p (deviation %d)\n", best, deviation);
+ }
+
+- printk(KERN_DEBUG "selected clock %p (%s) quot %d, calc %d\n",
+- best->clksrc, best->clksrc->name, best->quot, best->calc);
+-
+ /* store results to pass back */
+
+ *clksrc = best->clksrc;
Added: trunk/oe/packages/linux/linux-qt2410/new/patches/series
===================================================================
--- trunk/oe/packages/linux/linux-qt2410/new/patches/series 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/linux/linux-qt2410/new/patches/series 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,12 @@
+qt2410-base.patch
+qt2410-cs8900.patch
+mmc.patch
+udc.patch
+touchscreen.patch
+mmc-get_ro.patch
+mmc-sdipre_limit.patch
+mmc-fixdmalockup.patch
+mmc-fixdebugp.patch
+mmc-tt1104.patch
+s3c2410_serial-nodebug.patch
+qt2410-biglcd.patch
Added: trunk/oe/packages/linux/linux-qt2410/new/patches/touchscreen.patch
===================================================================
--- trunk/oe/packages/linux/linux-qt2410/new/patches/touchscreen.patch 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/linux/linux-qt2410/new/patches/touchscreen.patch 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,530 @@
+Index: linux-2.6.17.7-new/arch/arm/mach-s3c2410/devs.c
+===================================================================
+--- linux-2.6.17.7-new.orig/arch/arm/mach-s3c2410/devs.c 2006-08-07 09:34:31.000000000 +0200
++++ linux-2.6.17.7-new/arch/arm/mach-s3c2410/devs.c 2006-08-07 17:36:09.000000000 +0200
+@@ -37,6 +37,7 @@
+
+ #include <asm/arch/regs-serial.h>
+ #include <asm/arch/udc.h>
++#include <asm/arch/ts.h>
+
+ #include "devs.h"
+
+@@ -137,6 +138,23 @@
+
+ EXPORT_SYMBOL(s3c_device_nand);
+
++/* Touchscreen */
++struct platform_device s3c_device_ts = {
++ .name = "s3c2410-ts",
++ .id = -1,
++};
++
++EXPORT_SYMBOL(s3c_device_ts);
++
++static struct s3c2410_ts_mach_info s3c2410ts_info;
++
++void __init set_s3c2410ts_info(struct s3c2410_ts_mach_info *hard_s3c2410ts_info)
++{
++ memcpy(&s3c2410ts_info,hard_s3c2410ts_info,sizeof(struct s3c2410_ts_mach_info));
++ s3c_device_ts.dev.platform_data = &s3c2410ts_info;
++}
++EXPORT_SYMBOL(set_s3c2410ts_info);
++
+ /* USB Device (Gadget)*/
+
+ static struct resource s3c_usbgadget_resource[] = {
+Index: linux-2.6.17.7-new/arch/arm/mach-s3c2410/devs.h
+===================================================================
+--- linux-2.6.17.7-new.orig/arch/arm/mach-s3c2410/devs.h 2006-07-25 05:36:01.000000000 +0200
++++ linux-2.6.17.7-new/arch/arm/mach-s3c2410/devs.h 2006-08-07 17:36:09.000000000 +0200
+@@ -39,6 +39,7 @@
+ extern struct platform_device s3c_device_timer3;
+
+ extern struct platform_device s3c_device_usbgadget;
++extern struct platform_device s3c_device_ts;
+
+ /* s3c2440 specific devices */
+
+Index: linux-2.6.17.7-new/drivers/input/touchscreen/Kconfig
+===================================================================
+--- linux-2.6.17.7-new.orig/drivers/input/touchscreen/Kconfig 2006-07-25 05:36:01.000000000 +0200
++++ linux-2.6.17.7-new/drivers/input/touchscreen/Kconfig 2006-08-07 17:36:09.000000000 +0200
+@@ -49,6 +49,24 @@
+ To compile this driver as a module, choose M here: the
+ module will be called corgi_ts.
+
++config TOUCHSCREEN_S3C2410
++ tristate "Samsung S3C2410 touchscreen input driver"
++ depends on ARCH_S3C2410 && INPUT && INPUT_TOUCHSCREEN
++ select SERIO
++ help
++ Say Y here if you have the s3c2410 touchscreen.
++
++ If unsure, say N.
++
++ To compile this driver as a module, choose M here: the
++ module will be called s3c2410_ts.
++
++config TOUCHSCREEN_S3C2410_DEBUG
++ boolean "Samsung S3C2410 touchscreen debug messages"
++ depends on TOUCHSCREEN_S3C2410
++ help
++ Select this if you want debug messages
++
+ config TOUCHSCREEN_GUNZE
+ tristate "Gunze AHL-51S touchscreen"
+ select SERIO
+Index: linux-2.6.17.7-new/drivers/input/touchscreen/Makefile
+===================================================================
+--- linux-2.6.17.7-new.orig/drivers/input/touchscreen/Makefile 2006-07-25 05:36:01.000000000 +0200
++++ linux-2.6.17.7-new/drivers/input/touchscreen/Makefile 2006-08-07 17:36:09.000000000 +0200
+@@ -12,3 +12,5 @@
+ obj-$(CONFIG_TOUCHSCREEN_MTOUCH) += mtouch.o
+ obj-$(CONFIG_TOUCHSCREEN_MK712) += mk712.o
+ obj-$(CONFIG_TOUCHSCREEN_HP600) += hp680_ts_input.o
++obj-$(CONFIG_TOUCHSCREEN_S3C2410) += s3c2410_ts.o
++
+Index: linux-2.6.17.7-new/drivers/input/touchscreen/s3c2410_ts.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.17.7-new/drivers/input/touchscreen/s3c2410_ts.c 2006-08-07 17:36:09.000000000 +0200
+@@ -0,0 +1,351 @@
++/*
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ *
++ * Copyright (c) 2004 Arnaud Patard <arnaud.patard at rtp-net.org>
++ * iPAQ H1940 touchscreen support
++ *
++ * ChangeLog
++ *
++ * 2004-09-05: Herbert Pötzl <herbert at 13thfloor.at>
++ * - added clock (de-)allocation code
++ *
++ * 2005-03-06: Arnaud Patard <arnaud.patard at rtp-net.org>
++ * - h1940_ -> s3c2410 (this driver is now also used on the n30
++ * machines :P)
++ * - Debug messages are now enabled with the config option
++ * TOUCHSCREEN_S3C2410_DEBUG
++ * - Changed the way the value are read
++ * - Input subsystem should now work
++ * - Use ioremap and readl/writel
++ *
++ * 2005-03-23: Arnaud Patard <arnaud.patard at rtp-net.org>
++ * - Make use of some undocumented features of the touchscreen
++ * controller
++ *
++ */
++
++#include <linux/config.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/slab.h>
++#include <linux/input.h>
++#include <linux/init.h>
++#include <linux/serio.h>
++#include <linux/delay.h>
++#include <linux/platform_device.h>
++#include <linux/clk.h>
++#include <asm/io.h>
++#include <asm/irq.h>
++
++#include <asm/arch/regs-adc.h>
++#include <asm/arch/regs-gpio.h>
++#include <asm/arch/ts.h>
++
++/* For ts.dev.id.version */
++#define S3C2410TSVERSION 0x0101
++
++#define WAIT4INT(x) (((x)<<8) | \
++ S3C2410_ADCTSC_YM_SEN | S3C2410_ADCTSC_YP_SEN | S3C2410_ADCTSC_XP_SEN | \
++ S3C2410_ADCTSC_XY_PST(3))
++
++#define AUTOPST (S3C2410_ADCTSC_YM_SEN | S3C2410_ADCTSC_YP_SEN | S3C2410_ADCTSC_XP_SEN | \
++ S3C2410_ADCTSC_AUTO_PST | S3C2410_ADCTSC_XY_PST(0))
++
++#define DEBUG_LVL KERN_DEBUG
++
++MODULE_AUTHOR("Arnaud Patard <arnaud.patard at rtp-net.org>");
++MODULE_DESCRIPTION("s3c2410 touchscreen driver");
++MODULE_LICENSE("GPL");
++
++/*
++ * Definitions & global arrays.
++ */
++
++
++static char *s3c2410ts_name = "s3c2410 TouchScreen";
++
++/*
++ * Per-touchscreen data.
++ */
++
++struct s3c2410ts {
++ struct input_dev *dev;
++ long xp;
++ long yp;
++ int count;
++ int shift;
++};
++
++static struct s3c2410ts ts;
++static void __iomem *base_addr;
++
++static inline void s3c2410_ts_connect(void)
++{
++ s3c2410_gpio_cfgpin(S3C2410_GPG12, S3C2410_GPG12_XMON);
++ s3c2410_gpio_cfgpin(S3C2410_GPG13, S3C2410_GPG13_nXPON);
++ s3c2410_gpio_cfgpin(S3C2410_GPG14, S3C2410_GPG14_YMON);
++ s3c2410_gpio_cfgpin(S3C2410_GPG15, S3C2410_GPG15_nYPON);
++}
++
++static void touch_timer_fire(unsigned long data)
++{
++ unsigned long data0;
++ unsigned long data1;
++ int updown;
++
++ data0 = readl(base_addr+S3C2410_ADCDAT0);
++ data1 = readl(base_addr+S3C2410_ADCDAT1);
++
++ updown = (!(data0 & S3C2410_ADCDAT0_UPDOWN)) && (!(data1 & S3C2410_ADCDAT0_UPDOWN));
++
++ if (updown) {
++ if (ts.count != 0) {
++ ts.xp >>= ts.shift;
++ ts.yp >>= ts.shift;
++
++#ifdef CONFIG_TOUCHSCREEN_S3C2410_DEBUG
++ {
++ struct timeval tv;
++ do_gettimeofday(&tv);
++ printk(DEBUG_LVL "T: %06d, X: %03ld, Y: %03ld\n", (int)tv.tv_usec, ts.xp, ts.yp);
++ }
++#endif
++
++ input_report_abs(ts.dev, ABS_X, ts.xp);
++ input_report_abs(ts.dev, ABS_Y, ts.yp);
++
++ input_report_key(ts.dev, BTN_TOUCH, 1);
++ input_report_abs(ts.dev, ABS_PRESSURE, 1);
++ input_sync(ts.dev);
++ }
++
++ ts.xp = 0;
++ ts.yp = 0;
++ ts.count = 0;
++
++ writel(S3C2410_ADCTSC_PULL_UP_DISABLE | AUTOPST, base_addr+S3C2410_ADCTSC);
++ writel(readl(base_addr+S3C2410_ADCCON) | S3C2410_ADCCON_ENABLE_START, base_addr+S3C2410_ADCCON);
++ } else {
++ ts.count = 0;
++
++ input_report_key(ts.dev, BTN_TOUCH, 0);
++ input_report_abs(ts.dev, ABS_PRESSURE, 0);
++ input_sync(ts.dev);
++
++ writel(WAIT4INT(0), base_addr+S3C2410_ADCTSC);
++ }
++}
++
++static struct timer_list touch_timer =
++ TIMER_INITIALIZER(touch_timer_fire, 0, 0);
++
++static irqreturn_t stylus_updown(int irq, void *dev_id, struct pt_regs *regs)
++{
++ unsigned long data0;
++ unsigned long data1;
++ int updown;
++
++ data0 = readl(base_addr+S3C2410_ADCDAT0);
++ data1 = readl(base_addr+S3C2410_ADCDAT1);
++
++ updown = (!(data0 & S3C2410_ADCDAT0_UPDOWN)) && (!(data1 & S3C2410_ADCDAT0_UPDOWN));
++
++ /* TODO we should never get an interrupt with updown set while
++ * the timer is running, but maybe we ought to verify that the
++ * timer isn't running anyways. */
++
++ if (updown)
++ touch_timer_fire(0);
++
++ return IRQ_HANDLED;
++}
++
++
++static irqreturn_t stylus_action(int irq, void *dev_id, struct pt_regs *regs)
++{
++ unsigned long data0;
++ unsigned long data1;
++
++ data0 = readl(base_addr+S3C2410_ADCDAT0);
++ data1 = readl(base_addr+S3C2410_ADCDAT1);
++
++ ts.xp += data0 & S3C2410_ADCDAT0_XPDATA_MASK;
++ ts.yp += data1 & S3C2410_ADCDAT1_YPDATA_MASK;
++ ts.count++;
++
++ if (ts.count < (1<<ts.shift)) {
++ writel(S3C2410_ADCTSC_PULL_UP_DISABLE | AUTOPST, base_addr+S3C2410_ADCTSC);
++ writel(readl(base_addr+S3C2410_ADCCON) | S3C2410_ADCCON_ENABLE_START, base_addr+S3C2410_ADCCON);
++ } else {
++ mod_timer(&touch_timer, jiffies+1);
++ writel(WAIT4INT(1), base_addr+S3C2410_ADCTSC);
++ }
++
++ return IRQ_HANDLED;
++}
++
++static struct clk *adc_clock;
++
++/*
++ * The functions for inserting/removing us as a module.
++ */
++
++static int __init s3c2410ts_probe(struct platform_device *pdev)
++{
++ struct s3c2410_ts_mach_info *info;
++ struct input_dev *input_dev;
++
++ info = ( struct s3c2410_ts_mach_info *)pdev->dev.platform_data;
++
++ if (!info)
++ {
++ printk(KERN_ERR "Hm... too bad : no platform data for ts\n");
++ return -EINVAL;
++ }
++
++#ifdef CONFIG_TOUCHSCREEN_S3C2410_DEBUG
++ printk(DEBUG_LVL "Entering s3c2410ts_init\n");
++#endif
++
++ adc_clock = clk_get(NULL, "adc");
++ if (!adc_clock) {
++ printk(KERN_ERR "failed to get adc clock source\n");
++ return -ENOENT;
++ }
++ clk_enable(adc_clock);
++
++#ifdef CONFIG_TOUCHSCREEN_S3C2410_DEBUG
++ printk(DEBUG_LVL "got and enabled clock\n");
++#endif
++
++ base_addr=ioremap(S3C2410_PA_ADC,0x20);
++ if (base_addr == NULL) {
++ printk(KERN_ERR "Failed to remap register block\n");
++ return -ENOMEM;
++ }
++
++
++ /* Configure GPIOs */
++ s3c2410_ts_connect();
++
++ if ((info->presc&0xff) > 0)
++ writel(S3C2410_ADCCON_PRSCEN | S3C2410_ADCCON_PRSCVL(info->presc&0xFF),\
++ base_addr+S3C2410_ADCCON);
++ else
++ writel(0,base_addr+S3C2410_ADCCON);
++
++
++ /* Initialise registers */
++ if ((info->delay&0xffff) > 0)
++ writel(info->delay & 0xffff, base_addr+S3C2410_ADCDLY);
++
++ writel(WAIT4INT(0), base_addr+S3C2410_ADCTSC);
++
++ /* Initialise input stuff */
++ memset(&ts, 0, sizeof(struct s3c2410ts));
++ input_dev = input_allocate_device();
++
++ if (!input_dev) {
++ printk(KERN_ERR "Unable to allocate the input device !!\n");
++ return -ENOMEM;
++ }
++
++ ts.dev = input_dev;
++ ts.dev->evbit[0] = BIT(EV_SYN) | BIT(EV_KEY) | BIT(EV_ABS);
++ ts.dev->keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH);
++ input_set_abs_params(ts.dev, ABS_X, 0, 0x3FF, 0, 0);
++ input_set_abs_params(ts.dev, ABS_Y, 0, 0x3FF, 0, 0);
++ input_set_abs_params(ts.dev, ABS_PRESSURE, 0, 1, 0, 0);
++
++ ts.dev->private = &ts;
++ ts.dev->name = s3c2410ts_name;
++ ts.dev->id.bustype = BUS_RS232;
++ ts.dev->id.vendor = 0xDEAD;
++ ts.dev->id.product = 0xBEEF;
++ ts.dev->id.version = S3C2410TSVERSION;
++
++ ts.shift = info->oversampling_shift;
++
++ /* Get irqs */
++ if (request_irq(IRQ_ADC, stylus_action, SA_SAMPLE_RANDOM,
++ "s3c2410_action", ts.dev)) {
++ printk(KERN_ERR "s3c2410_ts.c: Could not allocate ts IRQ_ADC !\n");
++ iounmap(base_addr);
++ return -EIO;
++ }
++ if (request_irq(IRQ_TC, stylus_updown, SA_SAMPLE_RANDOM,
++ "s3c2410_action", ts.dev)) {
++ printk(KERN_ERR "s3c2410_ts.c: Could not allocate ts IRQ_TC !\n");
++ iounmap(base_addr);
++ return -EIO;
++ }
++
++ printk(KERN_INFO "%s successfully loaded\n", s3c2410ts_name);
++
++ /* All went ok, so register to the input system */
++ input_register_device(ts.dev);
++
++ return 0;
++}
++
++static int s3c2410ts_remove(struct platform_device *pdev)
++{
++ disable_irq(IRQ_ADC);
++ disable_irq(IRQ_TC);
++ free_irq(IRQ_TC,ts.dev);
++ free_irq(IRQ_ADC,ts.dev);
++
++ if (adc_clock) {
++ clk_disable(adc_clock);
++ clk_put(adc_clock);
++ adc_clock = NULL;
++ }
++
++ input_unregister_device(ts.dev);
++ iounmap(base_addr);
++
++ return 0;
++}
++
++static struct platform_driver s3c2410ts_driver = {
++ .driver = {
++ .name = "s3c2410-ts",
++ .owner = THIS_MODULE,
++ },
++ .probe = s3c2410ts_probe,
++ .remove = s3c2410ts_remove,
++};
++
++
++static int __init s3c2410ts_init(void)
++{
++ return platform_driver_register(&s3c2410ts_driver);
++}
++
++static void __exit s3c2410ts_exit(void)
++{
++ platform_driver_unregister(&s3c2410ts_driver);
++}
++
++module_init(s3c2410ts_init);
++module_exit(s3c2410ts_exit);
++
++/*
++ Local variables:
++ compile-command: "make ARCH=arm CROSS_COMPILE=/usr/local/arm/3.3.2/bin/arm-linux- -k -C ../../.."
++ c-basic-offset: 8
++ End:
++*/
+Index: linux-2.6.17.7-new/include/asm-arm/arch-s3c2410/regs-adc.h
+===================================================================
+--- linux-2.6.17.7-new.orig/include/asm-arm/arch-s3c2410/regs-adc.h 2006-07-25 05:36:01.000000000 +0200
++++ linux-2.6.17.7-new/include/asm-arm/arch-s3c2410/regs-adc.h 2006-08-07 17:36:09.000000000 +0200
+@@ -44,7 +44,7 @@
+ #define S3C2410_ADCTSC_XP_SEN (1<<4)
+ #define S3C2410_ADCTSC_PULL_UP_DISABLE (1<<3)
+ #define S3C2410_ADCTSC_AUTO_PST (1<<2)
+-#define S3C2410_ADCTSC_XY_PST (0x3<<0)
++#define S3C2410_ADCTSC_XY_PST(x) (((x)&0x3)<<0)
+
+ /* ADCDAT0 Bits */
+ #define S3C2410_ADCDAT0_UPDOWN (1<<15)
+Index: linux-2.6.17.7-new/include/asm-arm/arch-s3c2410/ts.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.17.7-new/include/asm-arm/arch-s3c2410/ts.h 2006-08-07 17:36:09.000000000 +0200
+@@ -0,0 +1,28 @@
++/* linux/include/asm/arch-s3c2410/ts.h
++ *
++ * Copyright (c) 2005 Arnaud Patard <arnaud.patard at rtp-net.org>
++ *
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ *
++ * Changelog:
++ * 24-Mar-2005 RTP Created file
++ * 03-Aug-2005 RTP Renamed to ts.h
++ */
++
++#ifndef __ASM_ARM_TS_H
++#define __ASM_ARM_TS_H
++
++struct s3c2410_ts_mach_info {
++ int delay;
++ int presc;
++ int oversampling_shift;
++};
++
++void __init set_s3c2410ts_info(struct s3c2410_ts_mach_info *hard_s3c2410ts_info);
++
++#endif /* __ASM_ARM_TS_H */
++
+Index: linux-2.6.17.7-new/arch/arm/mach-s3c2410/mach-qt2410.c
+===================================================================
+--- linux-2.6.17.7-new.orig/arch/arm/mach-s3c2410/mach-qt2410.c 2006-08-07 17:36:58.000000000 +0200
++++ linux-2.6.17.7-new/arch/arm/mach-s3c2410/mach-qt2410.c 2006-08-07 17:38:45.000000000 +0200
+@@ -51,6 +51,7 @@
+ #include <asm/arch/mmc.h>
+ #include <asm/arch/udc.h>
+ #include <asm/arch/nand.h>
++#include <asm/arch/ts.h>
+
+ #include "devs.h"
+ #include "cpu.h"
+@@ -183,6 +184,7 @@
+ &s3c_device_sdi,
+ &s3c_device_usbgadget,
+ &s3c_device_nand,
++ &s3c_device_ts,
+ &cs89x0_device,
+ };
+
+@@ -267,6 +269,12 @@
+ .udc_command = qt2410_udc_pullup,
+ };
+
++static struct s3c2410_ts_mach_info qt2410_ts_cfg = {
++ .delay = 10000,
++ .presc = 49,
++ .oversampling_shift = 2,
++};
++
+ static void __init qt2410_map_io(void)
+ {
+ s3c24xx_init_io(qt2410_iodesc, ARRAY_SIZE(qt2410_iodesc));
+@@ -293,6 +301,7 @@
+ s3c_device_sdi.dev.platform_data = &qt2410_mmc_cfg;
+ s3c24xx_fb_set_platdata(&qt2410_lcd_cfg);
+ s3c24xx_udc_set_platdata(&qt2410_udc_cfg);
++ set_s3c2410ts_info(&qt2410_ts_cfg);
+
+ s3c2410_pm_init();
+ }
Added: trunk/oe/packages/linux/linux-qt2410/new/patches/udc.patch
===================================================================
--- trunk/oe/packages/linux/linux-qt2410/new/patches/udc.patch 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/linux/linux-qt2410/new/patches/udc.patch 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,2195 @@
+Index: linux-2.6.17.7-new/arch/arm/mach-s3c2410/devs.c
+===================================================================
+--- linux-2.6.17.7-new.orig/arch/arm/mach-s3c2410/devs.c 2006-08-07 09:31:05.000000000 +0200
++++ linux-2.6.17.7-new/arch/arm/mach-s3c2410/devs.c 2006-08-07 09:34:31.000000000 +0200
+@@ -36,6 +36,7 @@
+ #include <asm/irq.h>
+
+ #include <asm/arch/regs-serial.h>
++#include <asm/arch/udc.h>
+
+ #include "devs.h"
+
+@@ -161,6 +162,20 @@
+
+ EXPORT_SYMBOL(s3c_device_usbgadget);
+
++void __init s3c24xx_udc_set_platdata(struct s3c2410_udc_mach_info *pd)
++{
++ struct s3c2410_udc_mach_info *npd;
++
++ npd = kmalloc(sizeof(*npd), GFP_KERNEL);
++ if (npd) {
++ memcpy(npd, pd, sizeof(*npd));
++ s3c_device_usbgadget.dev.platform_data = npd;
++ } else {
++ printk(KERN_ERR "no memory for udc platform data\n");
++ }
++}
++
++
+ /* Watchdog */
+
+ static struct resource s3c_wdt_resource[] = {
+Index: linux-2.6.17.7-new/arch/arm/mach-s3c2410/s3c2410.c
+===================================================================
+--- linux-2.6.17.7-new.orig/arch/arm/mach-s3c2410/s3c2410.c 2006-08-07 09:31:05.000000000 +0200
++++ linux-2.6.17.7-new/arch/arm/mach-s3c2410/s3c2410.c 2006-08-07 09:34:31.000000000 +0200
+@@ -48,6 +48,7 @@
+
+ static struct map_desc s3c2410_iodesc[] __initdata = {
+ IODESC_ENT(USBHOST),
++ IODESC_ENT(USBDEV),
+ IODESC_ENT(CLKPWR),
+ IODESC_ENT(LCD),
+ IODESC_ENT(TIMER),
+Index: linux-2.6.17.7-new/drivers/usb/gadget/Kconfig
+===================================================================
+--- linux-2.6.17.7-new.orig/drivers/usb/gadget/Kconfig 2006-08-07 09:31:05.000000000 +0200
++++ linux-2.6.17.7-new/drivers/usb/gadget/Kconfig 2006-08-07 09:34:31.000000000 +0200
+@@ -187,6 +187,27 @@
+
+ Select this only if your OMAP board has a Mini-AB connector.
+
++config USB_GADGET_S3C2410
++ boolean "S3C2410 USB Device Controller"
++ depends on ARCH_S3C2410
++ select USB_GADGET_SELECTED
++ help
++ Samsung's S3C2410 is an ARM-4 processor with an integrated
++ full speed USB 1.1 device controller.
++ It has 4 configurable endpoints, as well as endpoint
++ zero (for control transfers).
++
++config USB_S3C2410
++ tristate
++ depends on USB_GADGET_S3C2410
++ default USB_GADGET
++
++config USB_S3C2410_DEBUG
++ boolean "S3C2410 udc debug messages"
++ depends on USB_GADGET_S3C2410
++ help
++ foo
++
+ config USB_GADGET_AT91
+ boolean "AT91 USB Device Port"
+ depends on ARCH_AT91RM9200
+Index: linux-2.6.17.7-new/drivers/usb/gadget/Makefile
+===================================================================
+--- linux-2.6.17.7-new.orig/drivers/usb/gadget/Makefile 2006-08-07 09:31:05.000000000 +0200
++++ linux-2.6.17.7-new/drivers/usb/gadget/Makefile 2006-08-07 09:34:31.000000000 +0200
+@@ -7,6 +7,7 @@
+ obj-$(CONFIG_USB_GOKU) += goku_udc.o
+ obj-$(CONFIG_USB_OMAP) += omap_udc.o
+ obj-$(CONFIG_USB_LH7A40X) += lh7a40x_udc.o
++obj-$(CONFIG_USB_S3C2410) += s3c2410_udc.o
+ obj-$(CONFIG_USB_AT91) += at91_udc.o
+
+ #
+Index: linux-2.6.17.7-new/drivers/usb/gadget/s3c2410_udc.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.17.7-new/drivers/usb/gadget/s3c2410_udc.c 2006-08-07 09:34:31.000000000 +0200
+@@ -0,0 +1,1800 @@
++/*
++ * linux/drivers/usb/gadget/s3c2410_udc.c
++ * Samsung on-chip full speed USB device controllers
++ *
++ * Copyright (C) 2004-2006 Herbert Pötzl - Arnaud Patard
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ *
++ */
++#include <linux/config.h>
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/delay.h>
++#include <linux/ioport.h>
++#include <linux/sched.h>
++#include <linux/slab.h>
++#include <linux/smp_lock.h>
++#include <linux/errno.h>
++#include <linux/init.h>
++#include <linux/timer.h>
++#include <linux/list.h>
++#include <linux/interrupt.h>
++#include <linux/platform_device.h>
++#include <linux/version.h>
++#include <linux/clk.h>
++
++#include <linux/usb.h>
++#include <linux/usb_gadget.h>
++
++#include <asm/byteorder.h>
++#include <asm/io.h>
++#include <asm/irq.h>
++#include <asm/system.h>
++#include <asm/unaligned.h>
++#include <asm/arch/irqs.h>
++
++#include <asm/arch/hardware.h>
++#include <asm/arch/regs-clock.h>
++#include <asm/arch/regs-gpio.h>
++#include <asm/arch/regs-udc.h>
++#include <asm/arch/udc.h>
++
++#include <asm/mach-types.h>
++
++#include "s3c2410_udc.h"
++
++#define ENABLE_SYSFS
++
++#define DRIVER_DESC "S3C2410 USB Device Controller Gadget"
++#define DRIVER_VERSION "30 Apr 2006"
++#define DRIVER_AUTHOR "Herbert Pötzl <herbert at 13thfloor.at>, Arnaud Patard <arnaud.patard at rtp-net.org>"
++
++static const char gadget_name [] = "s3c2410_udc";
++static const char driver_desc [] = DRIVER_DESC;
++
++static struct s3c2410_udc *the_controller;
++static struct clk *udc_clock;
++static struct clk *usb_bus_clock;
++static void __iomem *base_addr;
++static u64 rsrc_start;
++static u64 rsrc_len;
++
++static inline u32 udc_readl(u32 reg)
++{
++ return readl(base_addr+reg);
++}
++static inline void udc_writel(u32 value, u32 reg)
++{
++ writel(value,base_addr+reg);
++}
++
++static struct s3c2410_udc_mach_info *udc_info;
++
++/*************************** DEBUG FUNCTION ***************************/
++#define DEBUG_NORMAL 1
++#define DEBUG_VERBOSE 2
++
++#ifdef CONFIG_USB_S3C2410_DEBUG
++#define USB_S3C2410_DEBUG_LEVEL 1
++
++static uint32_t s3c2410_ticks=0;
++
++static int dprintk(int level, const char *fmt, ...)
++{
++ static char printk_buf[1024];
++ static long prevticks;
++ static int invocation;
++ va_list args;
++ int len;
++
++ if (level > USB_S3C2410_DEBUG_LEVEL)
++ return 0;
++
++ if (s3c2410_ticks != prevticks) {
++ prevticks = s3c2410_ticks;
++ invocation = 0;
++ }
++
++ len = scnprintf(printk_buf, \
++ sizeof(printk_buf), "%1lu.%02d USB: ", \
++ prevticks, invocation++);
++
++ va_start(args, fmt);
++ len = vscnprintf(printk_buf+len, \
++ sizeof(printk_buf)-len, fmt, args);
++ va_end(args);
++
++ return printk("%s", printk_buf);
++}
++#else
++static int dprintk(int level, const char *fmt, ...) { return 0; }
++#endif
++#ifdef ENABLE_SYSFS
++static ssize_t s3c2410udc_regs_show(struct device *dev, struct device_attribute *attr, char *buf)
++{
++ u32 addr_reg,pwr_reg,ep_int_reg,usb_int_reg;
++ u32 ep_int_en_reg, usb_int_en_reg, ep0_csr;
++ u32 ep1_i_csr1,ep1_i_csr2,ep1_o_csr1,ep1_o_csr2;
++ u32 ep2_i_csr1,ep2_i_csr2,ep2_o_csr1,ep2_o_csr2;
++
++ addr_reg = udc_readl(S3C2410_UDC_FUNC_ADDR_REG);
++ pwr_reg = udc_readl(S3C2410_UDC_PWR_REG);
++ ep_int_reg = udc_readl(S3C2410_UDC_EP_INT_REG);
++ usb_int_reg = udc_readl(S3C2410_UDC_USB_INT_REG);
++ ep_int_en_reg = udc_readl(S3C2410_UDC_EP_INT_EN_REG);
++ usb_int_en_reg = udc_readl(S3C2410_UDC_USB_INT_EN_REG);
++ udc_writel(0, S3C2410_UDC_INDEX_REG);
++ ep0_csr = udc_readl(S3C2410_UDC_IN_CSR1_REG);
++ udc_writel(1, S3C2410_UDC_INDEX_REG);
++ ep1_i_csr1 = udc_readl(S3C2410_UDC_IN_CSR1_REG);
++ ep1_i_csr2 = udc_readl(S3C2410_UDC_IN_CSR2_REG);
++ ep1_o_csr1 = udc_readl(S3C2410_UDC_IN_CSR1_REG);
++ ep1_o_csr2 = udc_readl(S3C2410_UDC_IN_CSR2_REG);
++ udc_writel(2, S3C2410_UDC_INDEX_REG);
++ ep2_i_csr1 = udc_readl(S3C2410_UDC_IN_CSR1_REG);
++ ep2_i_csr2 = udc_readl(S3C2410_UDC_IN_CSR2_REG);
++ ep2_o_csr1 = udc_readl(S3C2410_UDC_IN_CSR1_REG);
++ ep2_o_csr2 = udc_readl(S3C2410_UDC_IN_CSR2_REG);
++
++
++ return snprintf(buf, PAGE_SIZE, \
++ "FUNC_ADDR_REG : 0x%04X\n" \
++ "PWR_REG : 0x%04X\n" \
++ "EP_INT_REG : 0x%04X\n" \
++ "USB_INT_REG : 0x%04X\n" \
++ "EP_INT_EN_REG : 0x%04X\n" \
++ "USB_INT_EN_REG : 0x%04X\n" \
++ "EP0_CSR : 0x%04X\n" \
++ "EP1_I_CSR1 : 0x%04X\n" \
++ "EP1_I_CSR2 : 0x%04X\n" \
++ "EP1_O_CSR1 : 0x%04X\n" \
++ "EP1_O_CSR2 : 0x%04X\n" \
++ "EP2_I_CSR1 : 0x%04X\n" \
++ "EP2_I_CSR2 : 0x%04X\n" \
++ "EP2_O_CSR1 : 0x%04X\n" \
++ "EP2_O_CSR2 : 0x%04X\n", \
++ addr_reg,pwr_reg,ep_int_reg,usb_int_reg, \
++ ep_int_en_reg, usb_int_en_reg, ep0_csr, \
++ ep1_i_csr1,ep1_i_csr2,ep1_o_csr1,ep1_o_csr2, \
++ ep2_i_csr1,ep2_i_csr2,ep2_o_csr1,ep2_o_csr2 \
++ );
++}
++
++static DEVICE_ATTR(regs, 0444,
++ s3c2410udc_regs_show,
++ NULL);
++#endif
++/*------------------------- I/O ----------------------------------*/
++static void done(struct s3c2410_ep *ep, struct s3c2410_request *req, int status);
++static void nuke (struct s3c2410_udc *udc, struct s3c2410_ep *ep, int status)
++{
++ /* Sanity check */
++ if (&ep->queue != NULL)
++ while (!list_empty (&ep->queue)) {
++ struct s3c2410_request *req;
++ req = list_entry (ep->queue.next, struct s3c2410_request, queue);
++ done(ep,req,status);
++ }
++}
++
++/*
++ * done
++ */
++static void done(struct s3c2410_ep *ep, struct s3c2410_request *req, int status)
++{
++ unsigned halted = ep->halted;
++
++ list_del_init(&req->queue);
++
++ if (likely (req->req.status == -EINPROGRESS))
++ req->req.status = status;
++ else
++ status = req->req.status;
++
++ ep->halted = 1;
++ req->req.complete(&ep->ep, &req->req);
++ ep->halted = halted;
++}
++
++static inline void clear_ep_state (struct s3c2410_udc *dev)
++{
++ unsigned i;
++
++ /* hardware SET_{CONFIGURATION,INTERFACE} automagic resets endpoint
++ * fifos, and pending transactions mustn't be continued in any case.
++ */
++ for (i = 1; i < S3C2410_ENDPOINTS; i++)
++ nuke(dev, &dev->ep[i], -ECONNABORTED);
++}
++
++static inline int fifo_count_out(void)
++{
++ int tmp;
++
++ tmp = udc_readl(S3C2410_UDC_OUT_FIFO_CNT2_REG) << 8;
++ tmp |= udc_readl(S3C2410_UDC_OUT_FIFO_CNT1_REG);
++
++ return tmp & 0xffff;
++}
++
++/*
++ * write_packet
++ */
++static inline int
++write_packet(int fifo, struct s3c2410_request *req, unsigned max)
++{
++ unsigned len;
++ u8 *buf;
++
++ buf = req->req.buf + req->req.actual;
++ prefetch(buf);
++
++ len = min(req->req.length - req->req.actual, max);
++ dprintk(DEBUG_VERBOSE, "write_packet %d %d %d ",req->req.actual,req->req.length,len);
++ req->req.actual += len;
++ dprintk(DEBUG_VERBOSE, "%d\n",req->req.actual);
++
++ writesb(base_addr+fifo, buf, len);
++ return len;
++}
++
++static void udc_reinit(struct s3c2410_udc *dev);
++
++/*
++ * write_fifo
++ *
++ * return: 0 = still running, 1 = completed, negative = errno
++ */
++static int write_fifo(struct s3c2410_ep *ep, struct s3c2410_request *req)
++{
++ unsigned count;
++ int is_last;
++ u32 idx;
++ int fifo_reg;
++ u32 ep_csr;
++
++
++ switch(ep->bEndpointAddress&0x7F)
++ {
++ default:
++ case 0: idx = 0;
++ fifo_reg = S3C2410_UDC_EP0_FIFO_REG;
++ break;
++ case 1:
++ idx = 1;
++ fifo_reg = S3C2410_UDC_EP1_FIFO_REG;
++ break;
++ case 2:
++ idx = 2;
++ fifo_reg = S3C2410_UDC_EP2_FIFO_REG;
++ break;
++
++ case 3:
++ idx = 3;
++ fifo_reg = S3C2410_UDC_EP3_FIFO_REG;
++ break;
++
++ case 4:
++ idx = 4;
++ fifo_reg = S3C2410_UDC_EP4_FIFO_REG;
++ break;
++ }
++
++ count = write_packet(fifo_reg, req, ep->ep.maxpacket);
++
++ /* last packet is often short (sometimes a zlp) */
++ if (count != ep->ep.maxpacket)
++ is_last = 1;
++ else if (req->req.length != req->req.actual || req->req.zero)
++ is_last = 0;
++ else
++ is_last = 2;
++
++ /* Only ep0 debug messages are interesting */
++ if (!idx)
++ dprintk(DEBUG_NORMAL, "Written ep%d %d.%d of %d b [last %d,z %d]\n",idx,count,req->req.actual,req->req.length,is_last,req->req.zero);
++
++ if (is_last)
++ {
++ /* The order is important. It prevents to send 2 packet at the same time
++ **/
++ if (!idx)
++ {
++ /* If we got a reset signal, no need to say 'data sent' */
++ if (! (udc_readl(S3C2410_UDC_USB_INT_REG) & S3C2410_UDC_USBINT_RESET))
++ set_ep0_de_in(base_addr);
++ ep->dev->ep0state=EP0_IDLE;
++ }
++ else
++ {
++ udc_writel(idx, S3C2410_UDC_INDEX_REG);
++ ep_csr=udc_readl(S3C2410_UDC_IN_CSR1_REG);
++ udc_writel(idx, S3C2410_UDC_INDEX_REG);
++ udc_writel(ep_csr|S3C2410_UDC_ICSR1_PKTRDY,S3C2410_UDC_IN_CSR1_REG);
++ }
++ done(ep, req, 0);
++ is_last=1;
++ }
++ else
++ {
++ if (!idx)
++ {
++ /* If we got a reset signal, no need to say 'data sent' */
++ if (! (udc_readl(S3C2410_UDC_USB_INT_REG) & S3C2410_UDC_USBINT_RESET))
++ set_ep0_ipr(base_addr);
++ }
++ else
++ {
++ udc_writel(idx, S3C2410_UDC_INDEX_REG);
++ ep_csr=udc_readl(S3C2410_UDC_IN_CSR1_REG);
++ udc_writel(idx, S3C2410_UDC_INDEX_REG);
++ udc_writel(ep_csr|S3C2410_UDC_ICSR1_PKTRDY,S3C2410_UDC_IN_CSR1_REG);
++ }
++ }
++
++
++ return is_last;
++}
++
++static inline int
++read_packet(int fifo, u8 *buf, struct s3c2410_request *req, unsigned avail)
++{
++ unsigned len;
++
++ len = min(req->req.length - req->req.actual, avail);
++ req->req.actual += len;
++
++ readsb(fifo + base_addr, buf, len);
++ return len;
++}
++
++/*
++ * return: 0 = still running, 1 = queue empty, negative = errno
++ */
++static int read_fifo(struct s3c2410_ep *ep, struct s3c2410_request *req)
++{
++ u8 *buf;
++ u32 ep_csr;
++ unsigned bufferspace;
++ int is_last=1;
++ unsigned avail;
++ int fifo_count = 0;
++ u32 idx;
++ int fifo_reg;
++
++
++ switch(ep->bEndpointAddress&0x7F)
++ {
++ default:
++ case 0: idx = 0;
++ fifo_reg = S3C2410_UDC_EP0_FIFO_REG;
++ break;
++ case 1:
++ idx = 1;
++ fifo_reg = S3C2410_UDC_EP1_FIFO_REG;
++ break;
++ case 2:
++ idx = 2;
++ fifo_reg = S3C2410_UDC_EP2_FIFO_REG;
++ break;
++
++ case 3:
++ idx = 3;
++ fifo_reg = S3C2410_UDC_EP3_FIFO_REG;
++ break;
++
++ case 4:
++ idx = 4;
++ fifo_reg = S3C2410_UDC_EP4_FIFO_REG;
++ break;
++
++ }
++
++ if (!req->req.length) {
++ return 1;
++ }
++
++ buf = req->req.buf + req->req.actual;
++ bufferspace = req->req.length - req->req.actual;
++ if (!bufferspace)
++ {
++ dprintk(DEBUG_NORMAL, "read_fifo: Buffer full !!\n");
++ return -1;
++ }
++
++ udc_writel(idx, S3C2410_UDC_INDEX_REG);
++
++ fifo_count = fifo_count_out();
++ dprintk(DEBUG_NORMAL, "fifo_read fifo count : %d\n",fifo_count);
++
++ if (fifo_count > ep->ep.maxpacket)
++ avail = ep->ep.maxpacket;
++ else
++ avail = fifo_count;
++
++ fifo_count=read_packet(fifo_reg,buf,req,avail);
++
++ /* checking this with ep0 is not accurate as we already
++ * read a control request
++ **/
++ if (idx && fifo_count < ep->ep.maxpacket) {
++ is_last = 1;
++ /* overflowed this request? flush extra data */
++ if (fifo_count != avail) {
++ req->req.status = -EOVERFLOW;
++ }
++ } else {
++ if (req->req.length <= req->req.actual)
++ is_last = 1;
++ else
++ is_last = 0;
++ }
++
++ udc_writel(idx, S3C2410_UDC_INDEX_REG);
++ fifo_count = fifo_count_out();
++
++ /* Only ep0 debug messages are interesting */
++ if (!idx)
++ dprintk(DEBUG_VERBOSE, "fifo_read fifo count : %d [last %d]\n",fifo_count,is_last);
++
++
++ if (is_last) {
++ if (!idx)
++ {
++ set_ep0_de_out(base_addr);
++ ep->dev->ep0state=EP0_IDLE;
++ }
++ else
++ {
++ udc_writel(idx, S3C2410_UDC_INDEX_REG);
++ ep_csr=udc_readl(S3C2410_UDC_OUT_CSR1_REG);
++ udc_writel(idx, S3C2410_UDC_INDEX_REG);
++ udc_writel(ep_csr&~S3C2410_UDC_OCSR1_PKTRDY,S3C2410_UDC_OUT_CSR1_REG);
++ }
++ done(ep, req, 0);
++ if (!list_empty(&ep->queue))
++ {
++ is_last=0;
++ req = container_of(ep->queue.next,
++ struct s3c2410_request, queue);
++ }
++ else
++ is_last=1;
++
++ }
++ else
++ {
++ if (!idx)
++ {
++ clear_ep0_opr(base_addr);
++ }
++ else
++ {
++ udc_writel(idx, S3C2410_UDC_INDEX_REG);
++ ep_csr=udc_readl(S3C2410_UDC_OUT_CSR1_REG);
++ udc_writel(idx, S3C2410_UDC_INDEX_REG);
++ udc_writel(ep_csr&~S3C2410_UDC_OCSR1_PKTRDY,S3C2410_UDC_OUT_CSR1_REG);
++ }
++ }
++
++
++ return is_last;
++}
++
++
++static int
++read_fifo_crq(struct usb_ctrlrequest *crq)
++{
++ int bytes_read = 0;
++ int fifo_count = 0;
++ int i;
++
++
++ unsigned char *pOut = (unsigned char*)crq;
++
++ udc_writel(0, S3C2410_UDC_INDEX_REG);
++
++ fifo_count = fifo_count_out();
++
++ dprintk(DEBUG_NORMAL, "read_fifo_crq(): fifo_count=%d\n", fifo_count );
++
++ fifo_count = sizeof(struct usb_ctrlrequest);
++ while( fifo_count-- ) {
++ i = 0;
++
++ do {
++ *pOut = (unsigned char)udc_readl(S3C2410_UDC_EP0_FIFO_REG);
++ i++;
++ } while((fifo_count_out() != fifo_count) && (i < 10));
++
++ if ( i == 10 ) {
++ dprintk(DEBUG_NORMAL, "read_fifo(): read failure\n");
++ }
++
++ pOut++;
++ bytes_read++;
++ }
++
++ dprintk(DEBUG_VERBOSE, "read_fifo_crq: len=%d %02x:%02x {%x,%x,%x}\n",
++ bytes_read, crq->bRequest, crq->bRequestType,
++ crq->wValue, crq->wIndex, crq->wLength);
++
++ return bytes_read;
++}
++static int s3c2410_get_status(struct s3c2410_udc *dev, struct usb_ctrlrequest *crq)
++{
++ u16 status = 0;
++ u8 ep_num = crq->wIndex & 0x7F;
++ u8 is_in = crq->wIndex & USB_DIR_IN;
++
++ switch(crq->bRequestType & USB_RECIP_MASK) {
++ case USB_RECIP_INTERFACE:
++ break;
++ case USB_RECIP_DEVICE:
++ status = dev->devstatus;
++ break;
++ case USB_RECIP_ENDPOINT:
++ if (ep_num>4 || crq->wLength > 2)
++ return 1;
++ if (!ep_num) {
++ udc_writel(0, S3C2410_UDC_INDEX_REG);
++ status = udc_readl(S3C2410_UDC_IN_CSR1_REG);
++ status = ( (status & S3C2410_UDC_EP0_CSR_SENDSTL) == S3C2410_UDC_EP0_CSR_SENDSTL);
++ }
++ else {
++ udc_writel(ep_num, S3C2410_UDC_INDEX_REG);
++ if (is_in) {
++ status = udc_readl(S3C2410_UDC_IN_CSR1_REG);
++ status = ( (status & S3C2410_UDC_ICSR1_SENTSTL) == S3C2410_UDC_ICSR1_SENTSTL);
++ }
++ else {
++ status = udc_readl(S3C2410_UDC_OUT_CSR1_REG);
++ status = ( (status & S3C2410_UDC_OCSR1_SENTSTL) == S3C2410_UDC_OCSR1_SENTSTL);
++ }
++ }
++
++ break;
++ default:
++ return 1;
++ }
++
++ /* Seems to be needed to get it working. ouch :( */
++ udelay(0x20);
++ udc_writel(status&0xFF,S3C2410_UDC_EP0_FIFO_REG);
++ udc_writel(status>>8,S3C2410_UDC_EP0_FIFO_REG);
++ set_ep0_de_in(base_addr);
++
++ return 0;
++}
++/*------------------------- usb state machine -------------------------------*/
++static void handle_ep0(struct s3c2410_udc *dev)
++{
++ u32 ep0csr;
++ struct s3c2410_ep *ep = &dev->ep [0];
++ struct s3c2410_request *req;
++ struct usb_ctrlrequest crq;
++
++ if (list_empty(&ep->queue))
++ req = NULL;
++ else
++ req = list_entry(ep->queue.next, struct s3c2410_request, queue);
++
++
++ udc_writel(0, S3C2410_UDC_INDEX_REG);
++ ep0csr = udc_readl(S3C2410_UDC_IN_CSR1_REG);
++ dprintk(DEBUG_NORMAL,"ep0csr %x ep0state %s\n",ep0csr,ep0states[dev->ep0state]);
++
++ /* clear stall status */
++ if (ep0csr & S3C2410_UDC_EP0_CSR_SENTSTL) {
++ /* FIXME */
++ nuke(dev, ep, -EPIPE);
++ dprintk(DEBUG_NORMAL, "... clear SENT_STALL ...\n");
++ clear_ep0_sst(base_addr);
++ dev->ep0state = EP0_IDLE;
++ return;
++ }
++
++ /* clear setup end */
++ if (ep0csr & S3C2410_UDC_EP0_CSR_SE
++ /* && dev->ep0state != EP0_IDLE */) {
++ dprintk(DEBUG_NORMAL, "... serviced SETUP_END ...\n");
++ nuke(dev, ep, 0);
++ clear_ep0_se(base_addr);
++ dev->ep0state = EP0_IDLE;
++ }
++
++
++ switch (dev->ep0state) {
++ case EP0_IDLE:
++ /* start control request? */
++ if (ep0csr & S3C2410_UDC_EP0_CSR_OPKRDY) {
++ int len, ret, tmp;
++
++ nuke (dev, ep, -EPROTO);
++
++ len = read_fifo_crq(&crq);
++ if (len != sizeof(crq)) {
++ dprintk(DEBUG_NORMAL, "setup begin: fifo READ ERROR"
++ " wanted %d bytes got %d. Stalling out...\n",
++ sizeof(crq), len);
++ set_ep0_ss(base_addr);
++ return;
++ }
++
++ dprintk(DEBUG_NORMAL, "bRequest = %d bRequestType %d wLength = %d\n", crq.bRequest,crq.bRequestType, crq.wLength);
++
++
++ /* cope with automagic for some standard requests. */
++ dev->req_std = (crq.bRequestType & USB_TYPE_MASK)
++ == USB_TYPE_STANDARD;
++ dev->req_config = 0;
++ dev->req_pending = 1;
++ switch (crq.bRequest) {
++ case USB_REQ_SET_CONFIGURATION:
++ dprintk(DEBUG_NORMAL, "USB_REQ_SET_CONFIGURATION ... \n");
++ if (crq.bRequestType == USB_RECIP_DEVICE) {
++config_change:
++ dev->req_config = 1;
++/* clear_ep_state(dev);*/
++ set_ep0_de_out(base_addr);
++ }
++ break;
++ case USB_REQ_SET_INTERFACE:
++ dprintk(DEBUG_NORMAL, "USB_REQ_SET_INTERFACE ... \n");
++ if (crq.bRequestType == USB_RECIP_INTERFACE) {
++ goto config_change;
++ }
++ break;
++
++ case USB_REQ_SET_ADDRESS:
++ dprintk(DEBUG_NORMAL, "USB_REQ_SET_ADDRESS ... \n");
++ if (crq.bRequestType == USB_RECIP_DEVICE) {
++ tmp = crq.wValue & 0x7F;
++ dev->address = tmp;
++ udc_writel((tmp | 0x80), S3C2410_UDC_FUNC_ADDR_REG);
++ set_ep0_de_out(base_addr);
++ return;
++ }
++ break;
++
++ case USB_REQ_GET_STATUS:
++ dprintk(DEBUG_NORMAL, "USB_REQ_GET_STATUS ... \n");
++ clear_ep0_opr(base_addr);
++ if (!s3c2410_get_status(dev, &crq)) {
++ return;
++ }
++ break;
++
++ default:
++ clear_ep0_opr(base_addr);
++ break;
++ }
++
++ if (crq.bRequestType & USB_DIR_IN)
++ dev->ep0state = EP0_IN_DATA_PHASE;
++ else
++ dev->ep0state = EP0_OUT_DATA_PHASE;
++ ret = dev->driver->setup(&dev->gadget, &crq);
++ if (ret < 0) {
++ if (dev->req_config) {
++ dprintk(DEBUG_NORMAL, "config change %02x fail %d?\n",
++ crq.bRequest, ret);
++ return;
++ }
++ if (ret == -EOPNOTSUPP)
++ dprintk(DEBUG_NORMAL, "Operation not supported\n");
++ else
++ dprintk(DEBUG_NORMAL, "dev->driver->setup failed. (%d)\n",ret);
++
++ set_ep0_ss(base_addr);
++ set_ep0_de_out(base_addr);
++ dev->ep0state = EP0_IDLE;
++ /* deferred i/o == no response yet */
++ } else if (dev->req_pending) {
++ dprintk(DEBUG_VERBOSE, "dev->req_pending... what now?\n");
++ dev->req_pending=0;
++ }
++ dprintk(DEBUG_VERBOSE, "ep0state %s\n",ep0states[dev->ep0state]);
++ }
++ break;
++ case EP0_IN_DATA_PHASE: /* GET_DESCRIPTOR etc */
++ dprintk(DEBUG_NORMAL, "EP0_IN_DATA_PHASE ... what now?\n");
++ if (!(ep0csr & 2) && req)
++ {
++ write_fifo(ep, req);
++ }
++ break;
++ case EP0_OUT_DATA_PHASE: /* SET_DESCRIPTOR etc */
++ dprintk(DEBUG_NORMAL, "EP0_OUT_DATA_PHASE ... what now?\n");
++ if ((ep0csr & 1) && req ) {
++ read_fifo(ep,req);
++ }
++ break;
++ case EP0_END_XFER:
++ dprintk(DEBUG_NORMAL, "EP0_END_XFER ... what now?\n");
++ dev->ep0state=EP0_IDLE;
++ break;
++ case EP0_STALL:
++ dprintk(DEBUG_NORMAL, "EP0_STALL ... what now?\n");
++ dev->ep0state=EP0_IDLE;
++ break;
++ }
++}
++/*
++ * handle_ep - Manage I/O endpoints
++ */
++static void handle_ep(struct s3c2410_ep *ep)
++{
++ struct s3c2410_request *req;
++ int is_in = ep->bEndpointAddress & USB_DIR_IN;
++ u32 ep_csr1;
++ u32 idx;
++
++ if (likely (!list_empty(&ep->queue)))
++ req = list_entry(ep->queue.next,
++ struct s3c2410_request, queue);
++ else
++ req = NULL;
++
++ idx = (u32)(ep->bEndpointAddress&0x7F);
++
++ if (is_in) {
++ udc_writel(idx, S3C2410_UDC_INDEX_REG);
++ ep_csr1 = udc_readl(S3C2410_UDC_IN_CSR1_REG);
++ dprintk(DEBUG_VERBOSE, "ep%01d write csr:%02x %d\n",idx,ep_csr1,req ? 1 : 0);
++
++ if (ep_csr1 & S3C2410_UDC_ICSR1_SENTSTL)
++ {
++ dprintk(DEBUG_VERBOSE, "st\n");
++ udc_writel(idx, S3C2410_UDC_INDEX_REG);
++ udc_writel(0x00,S3C2410_UDC_IN_CSR1_REG);
++ return;
++ }
++
++ if (!(ep_csr1 & S3C2410_UDC_ICSR1_PKTRDY) && req)
++ {
++ write_fifo(ep,req);
++ }
++ }
++ else {
++ udc_writel(idx, S3C2410_UDC_INDEX_REG);
++ ep_csr1 = udc_readl(S3C2410_UDC_OUT_CSR1_REG);
++ dprintk(DEBUG_VERBOSE, "ep%01d read csr:%02x\n",idx,ep_csr1);
++
++ if (ep_csr1 & S3C2410_UDC_OCSR1_SENTSTL)
++ {
++ udc_writel(idx, S3C2410_UDC_INDEX_REG);
++ udc_writel(0x00,S3C2410_UDC_OUT_CSR1_REG);
++ return;
++ }
++ if( (ep_csr1 & S3C2410_UDC_OCSR1_PKTRDY) && req)
++ {
++ read_fifo(ep,req);
++ }
++ }
++}
++
++#include <asm/arch/regs-irq.h>
++/*
++ * s3c2410_udc_irq - interrupt handler
++ */
++static irqreturn_t
++s3c2410_udc_irq(int irq, void *_dev, struct pt_regs *r)
++{
++ struct s3c2410_udc *dev = _dev;
++ int usb_status;
++ int usbd_status;
++ int pwr_reg;
++ int ep0csr;
++ int i;
++ u32 idx;
++ unsigned long flags;
++
++ spin_lock_irqsave(&dev->lock,flags);
++
++ /* Driver connected ? */
++ if (!dev->driver) {
++ /* Clear interrupts */
++ udc_writel( \
++ udc_readl(S3C2410_UDC_USB_INT_REG), \
++ S3C2410_UDC_USB_INT_REG \
++ );
++ udc_writel( \
++ udc_readl(S3C2410_UDC_EP_INT_REG), \
++ S3C2410_UDC_EP_INT_REG \
++ );
++ }
++
++ /* Save index */
++ idx = udc_readl(S3C2410_UDC_INDEX_REG);
++
++ /* Read status registers */
++ usb_status = udc_readl(S3C2410_UDC_USB_INT_REG);
++ usbd_status = udc_readl(S3C2410_UDC_EP_INT_REG);
++ pwr_reg = udc_readl(S3C2410_UDC_PWR_REG);
++
++ S3C2410_UDC_SETIX(base_addr,EP0);
++ ep0csr = udc_readl(S3C2410_UDC_IN_CSR1_REG);
++
++ // dprintk(DEBUG_NORMAL, "usbs=%02x, usbds=%02x, pwr=%02x ep0csr=%02x\n", usb_status, usbd_status, pwr_reg,ep0csr);
++
++ /*
++ * Now, handle interrupts. There's two types :
++ * - Reset, Resume, Suspend coming -> usb_int_reg
++ * - EP -> ep_int_reg
++ */
++
++ /* RESET */
++ if (usb_status & S3C2410_UDC_USBINT_RESET )
++ {
++ /* two kind of reset :
++ * - reset start -> pwr reg = 8
++ * - reset end -> pwr reg = 0
++ **/
++ dprintk(DEBUG_NORMAL, "USB reset csr %x pwr %x\n",ep0csr,pwr_reg);
++ dev->gadget.speed = USB_SPEED_UNKNOWN;
++ udc_writel(0x00, S3C2410_UDC_INDEX_REG);
++ udc_writel((dev->ep[0].ep.maxpacket&0x7ff)>>3,S3C2410_UDC_MAXP_REG);
++ dev->address = 0;
++
++ dev->ep0state = EP0_IDLE;
++ dev->gadget.speed = USB_SPEED_FULL;
++
++ /* clear interrupt */
++ udc_writel(S3C2410_UDC_USBINT_RESET,
++ S3C2410_UDC_USB_INT_REG);
++
++ udc_writel(idx,S3C2410_UDC_INDEX_REG);
++ spin_unlock_irqrestore(&dev->lock,flags);
++ return IRQ_HANDLED;
++ }
++
++ /* RESUME */
++ if (usb_status & S3C2410_UDC_USBINT_RESUME)
++ {
++ dprintk(DEBUG_NORMAL, "USB resume\n");
++
++ /* clear interrupt */
++ udc_writel(S3C2410_UDC_USBINT_RESUME,
++ S3C2410_UDC_USB_INT_REG);
++ if (dev->gadget.speed != USB_SPEED_UNKNOWN
++ && dev->driver
++ && dev->driver->resume)
++ dev->driver->resume(&dev->gadget);
++ }
++
++ /* SUSPEND */
++ if (usb_status & S3C2410_UDC_USBINT_SUSPEND)
++ {
++ dprintk(DEBUG_NORMAL, "USB suspend\n");
++
++ /* clear interrupt */
++ udc_writel(S3C2410_UDC_USBINT_SUSPEND,
++ S3C2410_UDC_USB_INT_REG);
++
++ if (dev->gadget.speed != USB_SPEED_UNKNOWN
++ && dev->driver
++ && dev->driver->suspend)
++ dev->driver->suspend(&dev->gadget);
++
++ dev->ep0state = EP0_IDLE;
++ }
++
++ /* EP */
++ /* control traffic */
++ /* check on ep0csr != 0 is not a good idea as clearing in_pkt_ready
++ * generate an interrupt
++ */
++ if (usbd_status & S3C2410_UDC_INT_EP0)
++ {
++ dprintk(DEBUG_VERBOSE, "USB ep0 irq\n");
++ /* Clear the interrupt bit by setting it to 1 */
++ udc_writel(S3C2410_UDC_INT_EP0, S3C2410_UDC_EP_INT_REG);
++ handle_ep0(dev);
++ }
++ /* endpoint data transfers */
++ for (i = 1; i < S3C2410_ENDPOINTS; i++) {
++ u32 tmp = 1 << i;
++ if (usbd_status & tmp) {
++ dprintk(DEBUG_VERBOSE, "USB ep%d irq\n", i);
++
++ /* Clear the interrupt bit by setting it to 1 */
++ udc_writel(tmp, S3C2410_UDC_EP_INT_REG);
++ handle_ep(&dev->ep[i]);
++ }
++ }
++
++
++ dprintk(DEBUG_VERBOSE,"irq: %d done.\n", irq);
++
++ /* Restore old index */
++ udc_writel(idx,S3C2410_UDC_INDEX_REG);
++
++ spin_unlock_irqrestore(&dev->lock,flags);
++
++ return IRQ_HANDLED;
++}
++/*------------------------- s3c2410_ep_ops ----------------------------------*/
++
++/*
++ * s3c2410_ep_enable
++ */
++static int
++s3c2410_ep_enable (struct usb_ep *_ep, const struct usb_endpoint_descriptor *desc)
++{
++ struct s3c2410_udc *dev;
++ struct s3c2410_ep *ep;
++ u32 max, tmp;
++ unsigned long flags;
++ u32 csr1,csr2;
++ u32 int_en_reg;
++
++
++ ep = container_of (_ep, struct s3c2410_ep, ep);
++ if (!_ep || !desc || ep->desc || _ep->name == ep0name
++ || desc->bDescriptorType != USB_DT_ENDPOINT)
++ return -EINVAL;
++ dev = ep->dev;
++ if (!dev->driver || dev->gadget.speed == USB_SPEED_UNKNOWN)
++ return -ESHUTDOWN;
++
++ max = le16_to_cpu (desc->wMaxPacketSize) & 0x1fff;
++
++ local_irq_save (flags);
++ _ep->maxpacket = max & 0x7ff;
++ ep->desc = desc;
++ ep->halted = 0;
++ ep->bEndpointAddress = desc->bEndpointAddress;
++
++ /* set max packet */
++ udc_writel(ep->num, S3C2410_UDC_INDEX_REG);
++ udc_writel(max>>3,S3C2410_UDC_MAXP_REG);
++
++
++ /* set type, direction, address; reset fifo counters */
++ if (desc->bEndpointAddress & USB_DIR_IN)
++ {
++ csr1 = S3C2410_UDC_ICSR1_FFLUSH|S3C2410_UDC_ICSR1_CLRDT;
++ csr2 = S3C2410_UDC_ICSR2_MODEIN|S3C2410_UDC_ICSR2_DMAIEN;
++
++ udc_writel(ep->num, S3C2410_UDC_INDEX_REG);
++ udc_writel(csr1,S3C2410_UDC_IN_CSR1_REG);
++ udc_writel(ep->num, S3C2410_UDC_INDEX_REG);
++ udc_writel(csr2,S3C2410_UDC_IN_CSR2_REG);
++ }
++ else
++ {
++ /* don't flush he in fifo or there will be an interrupt for that
++ * endpoint */
++ csr1 = S3C2410_UDC_ICSR1_CLRDT;
++ csr2 = S3C2410_UDC_ICSR2_DMAIEN;
++
++ udc_writel(ep->num, S3C2410_UDC_INDEX_REG);
++ udc_writel(csr1,S3C2410_UDC_IN_CSR1_REG);
++ udc_writel(ep->num, S3C2410_UDC_INDEX_REG);
++ udc_writel(csr2,S3C2410_UDC_IN_CSR2_REG);
++
++ csr1 = S3C2410_UDC_OCSR1_FFLUSH | S3C2410_UDC_OCSR1_CLRDT;
++ csr2 = S3C2410_UDC_OCSR2_DMAIEN;
++
++ udc_writel(ep->num, S3C2410_UDC_INDEX_REG);
++ udc_writel(csr1,S3C2410_UDC_OUT_CSR1_REG);
++ udc_writel(ep->num, S3C2410_UDC_INDEX_REG);
++ udc_writel(csr2,S3C2410_UDC_OUT_CSR2_REG);
++ }
++
++
++ /* enable irqs */
++ int_en_reg = udc_readl(S3C2410_UDC_EP_INT_EN_REG);
++ udc_writel(int_en_reg | (1<<ep->num),S3C2410_UDC_EP_INT_EN_REG);
++
++
++ /* print some debug message */
++ tmp = desc->bEndpointAddress;
++ dprintk (DEBUG_NORMAL, "enable %s(%d) ep%x%s-blk max %02x\n",
++ _ep->name,ep->num, tmp, desc->bEndpointAddress & USB_DIR_IN ? "in" : "out", max);
++
++ local_irq_restore (flags);
++
++ return 0;
++}
++
++/*
++ * s3c2410_ep_disable
++ */
++static int s3c2410_ep_disable (struct usb_ep *_ep)
++{
++ struct s3c2410_ep *ep = container_of(_ep, struct s3c2410_ep, ep);
++ unsigned long flags;
++ u32 int_en_reg;
++
++
++ if (!_ep || !ep->desc) {
++ dprintk(DEBUG_NORMAL, "%s not enabled\n",
++ _ep ? ep->ep.name : NULL);
++ return -EINVAL;
++ }
++
++ local_irq_save(flags);
++
++ printk(KERN_ERR "ep_disable: %s\n",_ep->name);
++
++ ep->desc = NULL;
++ ep->halted = 1;
++
++ nuke (ep->dev, ep, -ESHUTDOWN);
++
++ /* disable irqs */
++ int_en_reg = udc_readl(S3C2410_UDC_EP_INT_EN_REG);
++ udc_writel(int_en_reg & ~(1<<ep->num),S3C2410_UDC_EP_INT_EN_REG);
++
++ local_irq_restore(flags);
++
++ dprintk(DEBUG_NORMAL, "%s disabled\n", _ep->name);
++
++ return 0;
++}
++
++/*
++ * s3c2410_alloc_request
++ */
++static struct usb_request *
++s3c2410_alloc_request (struct usb_ep *_ep, gfp_t mem_flags)
++{
++ struct s3c2410_ep *ep;
++ struct s3c2410_request *req;
++
++ dprintk(DEBUG_VERBOSE,"s3c2410_alloc_request(ep=%p,flags=%d)\n", _ep, mem_flags);
++
++ ep = container_of (_ep, struct s3c2410_ep, ep);
++ if (!_ep)
++ return NULL;
++
++ req = kzalloc (sizeof *req, mem_flags);
++ if (!req)
++ return NULL;
++ INIT_LIST_HEAD (&req->queue);
++ return &req->req;
++}
++
++/*
++ * s3c2410_free_request
++ */
++static void
++s3c2410_free_request (struct usb_ep *_ep, struct usb_request *_req)
++{
++ struct s3c2410_ep *ep;
++ struct s3c2410_request *req;
++
++ dprintk(DEBUG_VERBOSE, "s3c2410_free_request(ep=%p,req=%p)\n", _ep, _req);
++
++ ep = container_of (_ep, struct s3c2410_ep, ep);
++ if (!ep || !_req || (!ep->desc && _ep->name != ep0name))
++ return;
++
++ req = container_of (_req, struct s3c2410_request, req);
++ WARN_ON (!list_empty (&req->queue));
++ kfree (req);
++}
++
++/*
++ * s3c2410_alloc_buffer
++ */
++static void *
++s3c2410_alloc_buffer (
++ struct usb_ep *_ep,
++ unsigned bytes,
++ dma_addr_t *dma,
++ gfp_t mem_flags)
++{
++ char *retval;
++
++ dprintk(DEBUG_VERBOSE,"s3c2410_alloc_buffer()\n");
++
++ if (!the_controller->driver)
++ return NULL;
++ retval = kmalloc (bytes, mem_flags);
++ *dma = (dma_addr_t) retval;
++ return retval;
++}
++
++/*
++ * s3c2410_free_buffer
++ */
++static void
++s3c2410_free_buffer (
++ struct usb_ep *_ep,
++ void *buf,
++ dma_addr_t dma,
++ unsigned bytes)
++{
++ dprintk(DEBUG_VERBOSE, "s3c2410_free_buffer()\n");
++
++ if (bytes)
++ kfree (buf);
++}
++
++/*
++ * s3c2410_queue
++ */
++static int
++s3c2410_queue(struct usb_ep *_ep, struct usb_request *_req, gfp_t gfp_flags)
++{
++ struct s3c2410_request *req;
++ struct s3c2410_ep *ep;
++ struct s3c2410_udc *dev;
++ u32 ep_csr=0;
++ int fifo_count=0;
++ unsigned long flags;
++
++
++ ep = container_of(_ep, struct s3c2410_ep, ep);
++ if (unlikely (!_ep || (!ep->desc && ep->ep.name != ep0name))) {
++ dprintk(DEBUG_NORMAL, "s3c2410_queue: inval 2\n");
++ return -EINVAL;
++ }
++
++ dev = ep->dev;
++ if (unlikely (!dev->driver
++ || dev->gadget.speed == USB_SPEED_UNKNOWN)) {
++ return -ESHUTDOWN;
++ }
++
++ local_irq_save (flags);
++
++ req = container_of(_req, struct s3c2410_request, req);
++ if (unlikely (!_req || !_req->complete || !_req->buf
++ || !list_empty(&req->queue))) {
++ if (!_req)
++ dprintk(DEBUG_NORMAL, "s3c2410_queue: 1 X X X\n");
++ else
++ {
++ dprintk(DEBUG_NORMAL, "s3c2410_queue: 0 %01d %01d %01d\n",!_req->complete,!_req->buf, !list_empty(&req->queue));
++ }
++ local_irq_restore(flags);
++ return -EINVAL;
++ }
++
++ _req->status = -EINPROGRESS;
++ _req->actual = 0;
++
++ dprintk(DEBUG_VERBOSE,"s3c2410_queue: ep%x len %d\n",ep->bEndpointAddress,_req->length);
++
++ if (ep->bEndpointAddress) {
++ udc_writel(ep->bEndpointAddress&0x7F,S3C2410_UDC_INDEX_REG);
++ ep_csr = udc_readl(ep->bEndpointAddress&USB_DIR_IN ? S3C2410_UDC_IN_CSR1_REG : S3C2410_UDC_OUT_CSR1_REG);
++ fifo_count=fifo_count_out();
++ }
++ else {
++ udc_writel(0,S3C2410_UDC_INDEX_REG);
++ ep_csr = udc_readl(S3C2410_UDC_IN_CSR1_REG);
++ }
++ /* kickstart this i/o queue? */
++ if (list_empty(&ep->queue) && !ep->halted) {
++ if (ep->bEndpointAddress == 0 /* ep0 */) {
++ switch (dev->ep0state) {
++ case EP0_IN_DATA_PHASE:
++ if (write_fifo(ep, req)) {
++ dev->ep0state = EP0_IDLE;
++ req = NULL;
++ }
++ break;
++
++ case EP0_OUT_DATA_PHASE:
++ if ( (!_req->length) || ((ep_csr & 1) && read_fifo(ep,req))) {
++ dev->ep0state = EP0_IDLE;
++ req = NULL;
++ }
++ break;
++
++ default:
++ local_irq_restore(flags);
++ return -EL2HLT;
++ }
++ }
++ else if ((ep->bEndpointAddress & USB_DIR_IN) != 0
++ && (!(ep_csr&S3C2410_UDC_OCSR1_PKTRDY)) && write_fifo(ep, req)) {
++ req = NULL;
++ } else if ((ep_csr & S3C2410_UDC_OCSR1_PKTRDY) && fifo_count && read_fifo(ep, req)) {
++ req = NULL;
++ }
++
++ }
++
++ /* pio or dma irq handler advances the queue. */
++ if (likely (req != 0))
++ list_add_tail(&req->queue, &ep->queue);
++
++ local_irq_restore(flags);
++
++ dprintk(DEBUG_VERBOSE, "s3c2410_queue normal end\n");
++ return 0;
++}
++
++/*
++ * s3c2410_dequeue
++ */
++static int s3c2410_dequeue (struct usb_ep *_ep, struct usb_request *_req)
++{
++ struct s3c2410_ep *ep;
++ struct s3c2410_udc *udc;
++ int retval = -EINVAL;
++ unsigned long flags;
++ struct s3c2410_request *req = NULL;
++
++ dprintk(DEBUG_VERBOSE,"s3c2410_dequeue(ep=%p,req=%p)\n", _ep, _req);
++
++ if (!the_controller->driver)
++ return -ESHUTDOWN;
++
++ if (!_ep || !_req)
++ return retval;
++ ep = container_of (_ep, struct s3c2410_ep, ep);
++ udc = container_of (ep->gadget, struct s3c2410_udc, gadget);
++
++ local_irq_save (flags);
++
++ list_for_each_entry (req, &ep->queue, queue) {
++ if (&req->req == _req) {
++ list_del_init (&req->queue);
++ _req->status = -ECONNRESET;
++ retval = 0;
++ break;
++ }
++ }
++
++ if (retval == 0) {
++ dprintk(DEBUG_VERBOSE, "dequeued req %p from %s, len %d buf %p\n",
++ req, _ep->name, _req->length, _req->buf);
++
++ done(ep, req, -ECONNRESET);
++ }
++ local_irq_restore (flags);
++
++ return retval;
++}
++
++
++/*
++ * s3c2410_set_halt
++ */
++static int
++s3c2410_set_halt (struct usb_ep *_ep, int value)
++{
++ return 0;
++}
++
++
++static const struct usb_ep_ops s3c2410_ep_ops = {
++ .enable = s3c2410_ep_enable,
++ .disable = s3c2410_ep_disable,
++
++ .alloc_request = s3c2410_alloc_request,
++ .free_request = s3c2410_free_request,
++
++ .alloc_buffer = s3c2410_alloc_buffer,
++ .free_buffer = s3c2410_free_buffer,
++
++ .queue = s3c2410_queue,
++ .dequeue = s3c2410_dequeue,
++
++ .set_halt = s3c2410_set_halt,
++};
++
++/*------------------------- usb_gadget_ops ----------------------------------*/
++
++/*
++ * s3c2410_g_get_frame
++ */
++static int s3c2410_g_get_frame (struct usb_gadget *_gadget)
++{
++ int tmp;
++
++ dprintk(DEBUG_VERBOSE,"s3c2410_g_get_frame()\n");
++
++ tmp = udc_readl(S3C2410_UDC_FRAME_NUM2_REG) << 8;
++ tmp |= udc_readl(S3C2410_UDC_FRAME_NUM1_REG);
++
++ return tmp & 0xffff;
++}
++
++/*
++ * s3c2410_wakeup
++ */
++static int s3c2410_wakeup (struct usb_gadget *_gadget)
++{
++
++ dprintk(DEBUG_NORMAL,"s3c2410_wakeup()\n");
++
++ return 0;
++}
++
++/*
++ * s3c2410_set_selfpowered
++ */
++static int s3c2410_set_selfpowered (struct usb_gadget *_gadget, int value)
++{
++ struct s3c2410_udc *udc;
++
++ dprintk(DEBUG_NORMAL, "s3c2410_set_selfpowered()\n");
++
++ udc = container_of (_gadget, struct s3c2410_udc, gadget);
++
++ if (value)
++ udc->devstatus |= (1 << USB_DEVICE_SELF_POWERED);
++ else
++ udc->devstatus &= ~(1 << USB_DEVICE_SELF_POWERED);
++
++ return 0;
++}
++
++static void udc_disable(struct s3c2410_udc *dev);
++static void udc_enable(struct s3c2410_udc *dev);
++
++static int s3c2410_pullup (struct usb_gadget *_gadget, int is_on)
++{
++ struct s3c2410_udc *udc;
++
++ dprintk(DEBUG_NORMAL, "s3c2410_pullup()\n");
++
++ udc = container_of (_gadget, struct s3c2410_udc, gadget);
++
++ if (udc_info && udc_info->udc_command) {
++ if (is_on)
++ udc_enable(udc);
++ else {
++ if (udc->gadget.speed != USB_SPEED_UNKNOWN) {
++ if (udc->driver && udc->driver->disconnect)
++ udc->driver->disconnect(&udc->gadget);
++
++ }
++ udc_disable(udc);
++ }
++ }
++ else
++ return -EOPNOTSUPP;
++
++ return 0;
++}
++
++static const struct usb_gadget_ops s3c2410_ops = {
++ .get_frame = s3c2410_g_get_frame,
++ .wakeup = s3c2410_wakeup,
++ .set_selfpowered = s3c2410_set_selfpowered,
++ .pullup = s3c2410_pullup,
++};
++
++
++/*------------------------- gadget driver handling---------------------------*/
++/*
++ * udc_disable
++ */
++static void udc_disable(struct s3c2410_udc *dev)
++{
++ dprintk(DEBUG_NORMAL, "udc_disable called\n");
++
++ /* Disable all interrupts */
++ udc_writel(0x00, S3C2410_UDC_USB_INT_EN_REG);
++ udc_writel(0x00, S3C2410_UDC_EP_INT_EN_REG);
++
++ /* Clear the interrupt registers */
++ udc_writel( S3C2410_UDC_USBINT_RESET | \
++ S3C2410_UDC_USBINT_RESUME | \
++ S3C2410_UDC_USBINT_SUSPEND, \
++ S3C2410_UDC_USB_INT_REG);
++ udc_writel( 0x1F, S3C2410_UDC_EP_INT_REG);
++
++
++ /* Good bye, cruel world */
++ if (udc_info && udc_info->udc_command)
++ udc_info->udc_command(S3C2410_UDC_P_DISABLE);
++
++ /* Set address to 0 */
++ /*udc_writel( 0x80, S3C2410_UDC_FUNC_ADDR_REG);*/
++
++ /* Set speed to unknown */
++ dev->gadget.speed = USB_SPEED_UNKNOWN;
++}
++/*
++ * udc_reinit
++ */
++static void udc_reinit(struct s3c2410_udc *dev)
++{
++ u32 i;
++
++ /* device/ep0 records init */
++ INIT_LIST_HEAD (&dev->gadget.ep_list);
++ INIT_LIST_HEAD (&dev->gadget.ep0->ep_list);
++ dev->ep0state = EP0_IDLE;
++
++
++ for (i = 0; i < S3C2410_ENDPOINTS; i++) {
++ struct s3c2410_ep *ep = &dev->ep[i];
++
++ if (i != 0)
++ list_add_tail (&ep->ep.ep_list, &dev->gadget.ep_list);
++
++ ep->dev = dev;
++ ep->desc = NULL;
++ ep->halted = 0;
++ INIT_LIST_HEAD (&ep->queue);
++ }
++}
++
++/*
++ * udc_enable
++ */
++static void udc_enable(struct s3c2410_udc *dev)
++{
++ int i;
++
++ dprintk(DEBUG_NORMAL, "udc_enable called\n");
++
++ /* dev->gadget.speed = USB_SPEED_UNKNOWN; */
++ dev->gadget.speed = USB_SPEED_FULL;
++
++ /* Set MAXP for all endpoints */
++ for (i = 0; i < S3C2410_ENDPOINTS; i++) {
++
++ udc_writel(i, S3C2410_UDC_INDEX_REG);
++ udc_writel((dev->ep[i].ep.maxpacket&0x7ff)>>3,S3C2410_UDC_MAXP_REG);
++ }
++
++ /* Set default power state */
++ udc_writel(DEFAULT_POWER_STATE, S3C2410_UDC_PWR_REG);
++
++ /* Enable reset and suspend interrupt interrupts */
++ udc_writel(1<<2 | 1<<0 ,S3C2410_UDC_USB_INT_EN_REG);
++
++ /* Enable ep0 interrupt */
++ udc_writel(0x01,S3C2410_UDC_EP_INT_EN_REG);
++
++ /* time to say "hello, world" */
++ if (udc_info && udc_info->udc_command)
++ udc_info->udc_command(S3C2410_UDC_P_ENABLE);
++}
++
++
++/*
++ * nop_release
++ */
++static void nop_release (struct device *dev)
++{
++ dprintk(DEBUG_NORMAL, "%s %s\n", __FUNCTION__, dev->bus_id);
++}
++/*
++ * usb_gadget_register_driver
++ */
++int
++usb_gadget_register_driver (struct usb_gadget_driver *driver)
++{
++ struct s3c2410_udc *udc = the_controller;
++ int retval;
++
++ dprintk(DEBUG_NORMAL, "usb_gadget_register_driver() '%s'\n",
++ driver->driver.name);
++
++ /* Sanity checks */
++ if (!udc)
++ return -ENODEV;
++ if (udc->driver)
++ return -EBUSY;
++ if (!driver->bind || !driver->unbind || !driver->setup
++ || driver->speed == USB_SPEED_UNKNOWN)
++ return -EINVAL;
++
++ /* Hook the driver */
++ udc->driver = driver;
++ udc->gadget.dev.driver = &driver->driver;
++
++ /*Bind the driver */
++ device_add(&udc->gadget.dev);
++ dprintk(DEBUG_NORMAL, "binding gadget driver '%s'\n", driver->driver.name);
++ if ((retval = driver->bind (&udc->gadget)) != 0) {
++ device_del(&udc->gadget.dev);
++ udc->driver = NULL;
++ udc->gadget.dev.driver = NULL;
++ return retval;
++ }
++
++ /* driver->driver.bus = 0; */
++
++ /* Enable udc */
++ udc_enable(udc);
++
++ return 0;
++}
++
++
++/*
++ * usb_gadget_unregister_driver
++ */
++int
++usb_gadget_unregister_driver (struct usb_gadget_driver *driver)
++{
++ struct s3c2410_udc *udc = the_controller;
++
++ if (!udc)
++ return -ENODEV;
++ if (!driver || driver != udc->driver)
++ return -EINVAL;
++
++ dprintk(DEBUG_NORMAL,"usb_gadget_register_driver() '%s'\n",
++ driver->driver.name);
++
++ if (driver->disconnect)
++ driver->disconnect(&udc->gadget);
++
++ driver->unbind (&udc->gadget);
++ device_del(&udc->gadget.dev);
++ udc->driver = NULL;
++
++ device_release_driver (&udc->gadget.dev);
++
++ /* Disable udc */
++ udc_disable(udc);
++
++ return 0;
++}
++
++/*---------------------------------------------------------------------------*/
++static struct s3c2410_udc memory = {
++ .gadget = {
++ .ops = &s3c2410_ops,
++ .ep0 = &memory.ep[0].ep,
++ .name = gadget_name,
++ .dev = {
++ .bus_id = "gadget",
++ .release = nop_release,
++ },
++ },
++
++ /* control endpoint */
++ .ep[0] = {
++ .num = 0,
++ .ep = {
++ .name = ep0name,
++ .ops = &s3c2410_ep_ops,
++ .maxpacket = EP0_FIFO_SIZE,
++ },
++ .dev = &memory,
++ },
++
++ /* first group of endpoints */
++ .ep[1] = {
++ .num = 1,
++ .ep = {
++ .name = "ep1-bulk",
++ .ops = &s3c2410_ep_ops,
++ .maxpacket = EP_FIFO_SIZE,
++ },
++ .dev = &memory,
++ .fifo_size = EP_FIFO_SIZE,
++ .bEndpointAddress = 1,
++ .bmAttributes = USB_ENDPOINT_XFER_BULK,
++ },
++ .ep[2] = {
++ .num = 2,
++ .ep = {
++ .name = "ep2-bulk",
++ .ops = &s3c2410_ep_ops,
++ .maxpacket = EP_FIFO_SIZE,
++ },
++ .dev = &memory,
++ .fifo_size = EP_FIFO_SIZE,
++ .bEndpointAddress = 2,
++ .bmAttributes = USB_ENDPOINT_XFER_BULK,
++ },
++ .ep[3] = {
++ .num = 3,
++ .ep = {
++ .name = "ep3-bulk",
++ .ops = &s3c2410_ep_ops,
++ .maxpacket = EP_FIFO_SIZE,
++ },
++ .dev = &memory,
++ .fifo_size = EP_FIFO_SIZE,
++ .bEndpointAddress = 3,
++ .bmAttributes = USB_ENDPOINT_XFER_BULK,
++ },
++ .ep[4] = {
++ .num = 4,
++ .ep = {
++ .name = "ep4-bulk",
++ .ops = &s3c2410_ep_ops,
++ .maxpacket = EP_FIFO_SIZE,
++ },
++ .dev = &memory,
++ .fifo_size = EP_FIFO_SIZE,
++ .bEndpointAddress = 4,
++ .bmAttributes = USB_ENDPOINT_XFER_BULK,
++ }
++
++};
++
++/*
++ * probe - binds to the platform device
++ */
++static int s3c2410_udc_probe(struct platform_device *pdev)
++{
++ struct s3c2410_udc *udc = &memory;
++ int retval;
++
++ dprintk(DEBUG_NORMAL,"s3c2410_udc_probe\n");
++
++ usb_bus_clock = clk_get(NULL, "usb-bus");
++ if (IS_ERR(usb_bus_clock)) {
++ printk(KERN_INFO "failed to get usb bus clock source\n");
++ return PTR_ERR(usb_bus_clock);
++ }
++
++ clk_enable(usb_bus_clock);
++
++ udc_clock = clk_get(NULL, "usb-device");
++ if (IS_ERR(udc_clock)) {
++ printk(KERN_INFO "failed to get udc clock source\n");
++ return PTR_ERR(udc_clock);
++ }
++
++ clk_enable(udc_clock);
++
++ mdelay(10);
++
++ dprintk(DEBUG_VERBOSE, "got and enabled clocks\n");
++
++ if (strncmp(pdev->name, "s3c2440", 7) == 0) {
++ printk("Detected S3C2440 - increasing FIFO to 128 bytes\n");
++ memory.ep[1].fifo_size = S3C2440_EP_FIFO_SIZE;
++ memory.ep[2].fifo_size = S3C2440_EP_FIFO_SIZE;
++ memory.ep[3].fifo_size = S3C2440_EP_FIFO_SIZE;
++ memory.ep[4].fifo_size = S3C2440_EP_FIFO_SIZE;
++ }
++
++ spin_lock_init (&udc->lock);
++ udc_info = pdev->dev.platform_data;
++
++ rsrc_start = S3C2410_PA_USBDEV;
++ rsrc_len = S3C24XX_SZ_USBDEV;
++
++ if (!request_mem_region(rsrc_start, rsrc_len, gadget_name))
++ return -EBUSY;
++
++ base_addr = ioremap(rsrc_start, rsrc_len);
++ if (!base_addr) {
++ retval = -ENOMEM;
++ goto err_mem;
++ }
++
++ device_initialize(&udc->gadget.dev);
++ udc->gadget.dev.parent = &pdev->dev;
++ udc->gadget.dev.dma_mask = pdev->dev.dma_mask;
++
++ the_controller = udc;
++ platform_set_drvdata(pdev, udc);
++
++ udc_disable(udc);
++ udc_reinit(udc);
++
++ /* irq setup after old hardware state is cleaned up */
++ retval = request_irq(IRQ_USBD, s3c2410_udc_irq,
++ SA_INTERRUPT, gadget_name, udc);
++
++ if (retval != 0) {
++ printk(KERN_ERR "%s: can't get irq %i, err %d\n",
++ gadget_name, IRQ_USBD, retval);
++ retval = -EBUSY;
++ goto err_map;
++ }
++ dprintk(DEBUG_VERBOSE, "%s: got irq %i\n", gadget_name, IRQ_USBD);
++
++#ifdef ENABLE_SYSFS
++ /* create device files */
++ device_create_file(&pdev->dev, &dev_attr_regs);
++#endif
++ return 0;
++
++err_map:
++ iounmap(base_addr);
++err_mem:
++ release_mem_region(rsrc_start, rsrc_len);
++
++ return retval;
++}
++
++/*
++ * s3c2410_udc_remove
++ */
++static int s3c2410_udc_remove(struct platform_device *pdev)
++{
++ struct s3c2410_udc *udc = platform_get_drvdata(pdev);
++
++ dprintk(DEBUG_NORMAL, "s3c2410_udc_remove\n");
++ usb_gadget_unregister_driver(udc->driver);
++
++ if (udc->got_irq) {
++ free_irq(IRQ_USBD, udc);
++ udc->got_irq = 0;
++ }
++
++ iounmap(base_addr);
++ release_mem_region(rsrc_start, rsrc_len);
++
++ platform_set_drvdata(pdev, NULL);
++ kfree(udc);
++
++ if (!IS_ERR(udc_clock) && udc_clock != NULL) {
++ clk_disable(udc_clock);
++ clk_put(udc_clock);
++ udc_clock = NULL;
++ }
++
++ if (!IS_ERR(usb_bus_clock) && usb_bus_clock != NULL) {
++ clk_disable(usb_bus_clock);
++ clk_put(usb_bus_clock);
++ usb_bus_clock = NULL;
++ }
++
++ return 0;
++}
++
++static struct platform_driver udc_driver_2410 = {
++ .driver = {
++ .name = "s3c2410-usbgadget",
++ .owner = THIS_MODULE,
++ },
++ .probe = s3c2410_udc_probe,
++ .remove = s3c2410_udc_remove,
++};
++
++static struct platform_driver udc_driver_2440 = {
++ .driver = {
++ .name = "s3c2440-usbgadget",
++ .owner = THIS_MODULE,
++ },
++ .probe = s3c2410_udc_probe,
++ .remove = s3c2410_udc_remove,
++};
++
++static int __init udc_init(void)
++{
++ int retval;
++
++ dprintk(DEBUG_NORMAL, "%s: version %s\n", gadget_name, DRIVER_VERSION);
++
++ retval = platform_driver_register(&udc_driver_2410);
++ if (retval)
++ return retval;
++
++ return platform_driver_register(&udc_driver_2440);
++}
++
++static void __exit udc_exit(void)
++{
++ platform_driver_unregister(&udc_driver_2410);
++ platform_driver_unregister(&udc_driver_2440);
++}
++
++
++EXPORT_SYMBOL (usb_gadget_unregister_driver);
++EXPORT_SYMBOL (usb_gadget_register_driver);
++
++module_init(udc_init);
++module_exit(udc_exit);
++
++MODULE_AUTHOR(DRIVER_AUTHOR);
++MODULE_DESCRIPTION(DRIVER_DESC);
++MODULE_VERSION(DRIVER_VERSION);
++MODULE_LICENSE("GPL");
+Index: linux-2.6.17.7-new/drivers/usb/gadget/s3c2410_udc.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.17.7-new/drivers/usb/gadget/s3c2410_udc.h 2006-08-07 09:34:31.000000000 +0200
+@@ -0,0 +1,187 @@
++#ifndef _S3C2410_UDC_H
++#define _S3C2410_UDC_H
++
++struct s3c2410_ep {
++ struct list_head queue;
++ unsigned long last_io; /* jiffies timestamp */
++ struct usb_gadget *gadget;
++ struct s3c2410_udc *dev;
++ const struct usb_endpoint_descriptor *desc;
++ struct usb_ep ep;
++ u8 num;
++
++ unsigned short fifo_size;
++ u8 bEndpointAddress;
++ u8 bmAttributes;
++
++ unsigned halted : 1;
++ unsigned already_seen : 1;
++ unsigned setup_stage : 1;
++};
++
++
++/* Warning : ep0 has a fifo of 16 bytes */
++/* Don't try to set 32 or 64 */
++#define EP0_FIFO_SIZE 16
++#define EP_FIFO_SIZE 64
++#define DEFAULT_POWER_STATE 0x00
++
++#define S3C2440_EP_FIFO_SIZE 128
++
++static const char ep0name [] = "ep0";
++
++static const char *const ep_name[] = {
++ ep0name, /* everyone has ep0 */
++ /* s3c2410 four bidirectional bulk endpoints */
++ "ep1-bulk", "ep2-bulk", "ep3-bulk", "ep4-bulk",
++};
++
++#define S3C2410_ENDPOINTS ARRAY_SIZE(ep_name)
++
++struct s3c2410_request {
++ struct list_head queue; /* ep's requests */
++ struct usb_request req;
++};
++
++enum ep0_state {
++ EP0_IDLE,
++ EP0_IN_DATA_PHASE,
++ EP0_OUT_DATA_PHASE,
++ EP0_END_XFER,
++ EP0_STALL,
++};
++
++static const char *ep0states[]= {
++ "EP0_IDLE",
++ "EP0_IN_DATA_PHASE",
++ "EP0_OUT_DATA_PHASE",
++ "EP0_END_XFER",
++ "EP0_STALL",
++};
++
++struct s3c2410_udc {
++ spinlock_t lock;
++
++ struct s3c2410_ep ep[S3C2410_ENDPOINTS];
++ int address;
++ struct usb_gadget gadget;
++ struct usb_gadget_driver *driver;
++ struct s3c2410_request fifo_req;
++ u8 fifo_buf[EP_FIFO_SIZE];
++ u16 devstatus;
++
++ u32 port_status;
++ int ep0state;
++
++ unsigned got_irq : 1;
++
++ unsigned req_std : 1;
++ unsigned req_config : 1;
++ unsigned req_pending : 1;
++};
++
++/****************** MACROS ******************/
++/* #define BIT_MASK BIT_MASK*/
++#define BIT_MASK 0xFF
++
++#define maskb(base,v,m,a) \
++ writeb((readb(base+a) & ~(m))|((v)&(m)), (base+a))
++
++#define maskw(base,v,m,a) \
++ writew((readw(base+a) & ~(m))|((v)&(m)), (base+a))
++
++#define maskl(base,v,m,a) \
++ writel((readl(base+a) & ~(m))|((v)&(m)), (base+a))
++
++#define clear_ep0_sst(base) do { \
++ S3C2410_UDC_SETIX(base,EP0); \
++ writel(0x00, base+S3C2410_UDC_EP0_CSR_REG); \
++} while(0)
++
++#define clear_ep0_se(base) do { \
++ S3C2410_UDC_SETIX(base,EP0); \
++ maskl(base,S3C2410_UDC_EP0_CSR_SSE, \
++ BIT_MASK, S3C2410_UDC_EP0_CSR_REG); \
++} while(0)
++
++#define clear_ep0_opr(base) do { \
++ S3C2410_UDC_SETIX(base,EP0); \
++ maskl(base,S3C2410_UDC_EP0_CSR_SOPKTRDY, \
++ BIT_MASK, S3C2410_UDC_EP0_CSR_REG); \
++} while(0)
++
++#define set_ep0_ipr(base) do { \
++ S3C2410_UDC_SETIX(base,EP0); \
++ maskl(base,S3C2410_UDC_EP0_CSR_IPKRDY, \
++ BIT_MASK, S3C2410_UDC_EP0_CSR_REG); \
++} while(0)
++
++#define set_ep0_de(base) do { \
++ S3C2410_UDC_SETIX(base,EP0); \
++ maskl(base,S3C2410_UDC_EP0_CSR_DE, \
++ BIT_MASK, S3C2410_UDC_EP0_CSR_REG); \
++} while(0)
++
++#if 0
++#define set_ep0_ss(base) do { \
++ S3C2410_UDC_SETIX(base,EP0); \
++ maskl(base,S3C2410_UDC_EP0_CSR_SENDSTL|S3C2410_UDC_EP0_CSR_SOPKTRDY, \
++ BIT_MASK, S3C2410_UDC_EP0_CSR_REG); \
++} while(0)
++#else
++#define set_ep0_ss(base) do { \
++ S3C2410_UDC_SETIX(base,EP0); \
++ maskl(base,S3C2410_UDC_EP0_CSR_SENDSTL, \
++ BIT_MASK, S3C2410_UDC_EP0_CSR_REG); \
++} while(0)
++#endif
++
++#define set_ep0_de_out(base) do { \
++ S3C2410_UDC_SETIX(base,EP0); \
++ maskl(base,(S3C2410_UDC_EP0_CSR_SOPKTRDY \
++ | S3C2410_UDC_EP0_CSR_DE), \
++ BIT_MASK, S3C2410_UDC_EP0_CSR_REG); \
++} while(0)
++
++#define set_ep0_sse_out(base) do { \
++ S3C2410_UDC_SETIX(base,EP0); \
++ maskl(base,(S3C2410_UDC_EP0_CSR_SOPKTRDY \
++ | S3C2410_UDC_EP0_CSR_SSE), \
++ BIT_MASK, S3C2410_UDC_EP0_CSR_REG); \
++} while(0)
++
++#define set_ep0_de_in(base) do { \
++ S3C2410_UDC_SETIX(base,EP0); \
++ maskl(base,(S3C2410_UDC_EP0_CSR_IPKRDY \
++ | S3C2410_UDC_EP0_CSR_DE), \
++ BIT_MASK, S3C2410_UDC_EP0_CSR_REG); \
++} while(0)
++
++
++
++#define clear_stall_ep1_out(base) do { \
++ S3C2410_UDC_SETIX(base,EP1); \
++ orl(0,base+S3C2410_UDC_OUT_CSR1_REG); \
++} while(0)
++
++
++#define clear_stall_ep2_out(base) do { \
++ S3C2410_UDC_SETIX(base,EP2); \
++ orl(0, base+S3C2410_UDC_OUT_CSR1_REG); \
++} while(0)
++
++
++#define clear_stall_ep3_out(base) do { \
++ S3C2410_UDC_SETIX(base,EP3); \
++ orl(0,base+S3C2410_UDC_OUT_CSR1_REG); \
++} while(0)
++
++
++#define clear_stall_ep4_out(base) do { \
++ S3C2410_UDC_SETIX(base,EP4); \
++ orl(0, base+S3C2410_UDC_OUT_CSR1_REG); \
++} while(0)
++
++#endif
++
++
+Index: linux-2.6.17.7-new/include/asm-arm/arch-s3c2410/regs-udc.h
+===================================================================
+--- linux-2.6.17.7-new.orig/include/asm-arm/arch-s3c2410/regs-udc.h 2006-08-07 09:31:05.000000000 +0200
++++ linux-2.6.17.7-new/include/asm-arm/arch-s3c2410/regs-udc.h 2006-08-07 09:34:31.000000000 +0200
+@@ -17,8 +17,7 @@
+ #ifndef __ASM_ARCH_REGS_UDC_H
+ #define __ASM_ARCH_REGS_UDC_H
+
+-
+-#define S3C2410_USBDREG(x) ((x) + S3C24XX_VA_USBDEV)
++#define S3C2410_USBDREG(x) (x)
+
+ #define S3C2410_UDC_FUNC_ADDR_REG S3C2410_USBDREG(0x0140)
+ #define S3C2410_UDC_PWR_REG S3C2410_USBDREG(0x0144)
+@@ -142,8 +141,8 @@
+ #define S3C2410_UDC_OCSR2_ISO (1<<6) // R/W
+ #define S3C2410_UDC_OCSR2_DMAIEN (1<<5) // R/W
+
+-#define S3C2410_UDC_SETIX(x) \
+- __raw_writel(S3C2410_UDC_INDEX_ ## x, S3C2410_UDC_INDEX_REG);
++#define S3C2410_UDC_SETIX(base,x) \
++ writel(S3C2410_UDC_INDEX_ ## x, base+S3C2410_UDC_INDEX_REG);
+
+
+ #define S3C2410_UDC_EP0_CSR_OPKRDY (1<<0)
+Index: linux-2.6.17.7-new/include/asm-arm/arch-s3c2410/udc.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.17.7-new/include/asm-arm/arch-s3c2410/udc.h 2006-08-07 09:34:31.000000000 +0200
+@@ -0,0 +1,32 @@
++/* linux/include/asm/arch-s3c2410/udc.h
++ *
++ * Copyright (c) 2005 Arnaud Patard <arnaud.patard at rtp-net.org>
++ *
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ *
++ * Changelog:
++ * 14-Mar-2005 RTP Created file
++ * 02-Aug-2005 RTP File rename
++ * 07-Sep-2005 BJD Minor cleanups, changed cmd to enum
++*/
++
++#ifndef __ASM_ARM_ARCH_UDC_H
++#define __ASM_ARM_ARCH_UDC_H
++
++enum s3c2410_udc_cmd_e {
++ S3C2410_UDC_P_ENABLE = 1, /* Pull-up enable */
++ S3C2410_UDC_P_DISABLE = 2, /* Pull-up disable */
++ S3C2410_UDC_P_RESET = 3, /* UDC reset, in case of */
++};
++
++struct s3c2410_udc_mach_info {
++ void (*udc_command)(enum s3c2410_udc_cmd_e);
++};
++
++extern void __init s3c24xx_udc_set_platdata(struct s3c2410_udc_mach_info *);
++
++#endif /* __ASM_ARM_ARCH_UDC_H */
+Index: linux-2.6.17.7-new/arch/arm/mach-s3c2410/mach-qt2410.c
+===================================================================
+--- linux-2.6.17.7-new.orig/arch/arm/mach-s3c2410/mach-qt2410.c 2006-08-07 09:34:20.000000000 +0200
++++ linux-2.6.17.7-new/arch/arm/mach-s3c2410/mach-qt2410.c 2006-08-07 09:34:44.000000000 +0200
+@@ -49,6 +49,7 @@
+ #include <asm/arch/regs-gpio.h>
+ #include <asm/arch/fb.h>
+ #include <asm/arch/mmc.h>
++#include <asm/arch/udc.h>
+ #include <asm/arch/nand.h>
+
+ #include "devs.h"
+@@ -246,6 +247,26 @@
+ .ocr_avail = MMC_VDD_32_33,
+ };
+
++static void qt2410_udc_pullup(enum s3c2410_udc_cmd_e cmd)
++{
++ printk(KERN_DEBUG "udc: pullup(%d)\n", cmd);
++
++ switch (cmd) {
++ case S3C2410_UDC_P_ENABLE:
++ break;
++ case S3C2410_UDC_P_DISABLE:
++ break;
++ case S3C2410_UDC_P_RESET:
++ break;
++ default:
++ break;
++ }
++}
++
++static struct s3c2410_udc_mach_info qt2410_udc_cfg = {
++ .udc_command = qt2410_udc_pullup,
++};
++
+ static void __init qt2410_map_io(void)
+ {
+ s3c24xx_init_io(qt2410_iodesc, ARRAY_SIZE(qt2410_iodesc));
+@@ -271,6 +292,7 @@
+ s3c_device_nand.dev.platform_data = &qt2410_nand_info;
+ s3c_device_sdi.dev.platform_data = &qt2410_mmc_cfg;
+ s3c24xx_fb_set_platdata(&qt2410_lcd_cfg);
++ s3c24xx_udc_set_platdata(&qt2410_udc_cfg);
+
+ s3c2410_pm_init();
+ }
Added: trunk/oe/packages/linux/linux-qt2410/new/patches-20060907.tar.bz2
===================================================================
(Binary files differ)
Property changes on: trunk/oe/packages/linux/linux-qt2410/new/patches-20060907.tar.bz2
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/oe/packages/linux/linux-qt2410/patches-2.6.17.7-qt2401-20060806.tar.bz2
===================================================================
(Binary files differ)
Property changes on: trunk/oe/packages/linux/linux-qt2410/patches-2.6.17.7-qt2401-20060806.tar.bz2
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/oe/packages/linux/linux-qt2410/qt2410-biglcd.patch
===================================================================
--- trunk/oe/packages/linux/linux-qt2410/qt2410-biglcd.patch 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/linux/linux-qt2410/qt2410-biglcd.patch 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,178 @@
+Index: linux-2.6.17.7-new/arch/arm/mach-s3c2410/mach-qt2410.c
+===================================================================
+--- linux-2.6.17.7-new.orig/arch/arm/mach-s3c2410/mach-qt2410.c 2006-08-27 19:07:33.000000000 +0530
++++ linux-2.6.17.7-new/arch/arm/mach-s3c2410/mach-qt2410.c 2006-08-28 15:38:02.000000000 +0530
+@@ -94,6 +94,133 @@
+
+ /* LCD driver info */
+
++/* Configuration for 640x480 SHARP LQ080V3DG01 */
++static struct s3c2410fb_mach_info qt2410_biglcd_cfg __initdata = {
++ .regs = {
++
++ .lcdcon1 = S3C2410_LCDCON1_TFT16BPP |
++ S3C2410_LCDCON1_TFT |
++ S3C2410_LCDCON1_CLKVAL(0x01), /* HCLK/4 */
++
++ .lcdcon2 = S3C2410_LCDCON2_VBPD(18) | /* 19 */
++ S3C2410_LCDCON2_LINEVAL(479) |
++ S3C2410_LCDCON2_VFPD(10) | /* 11 */
++ S3C2410_LCDCON2_VSPW(14), /* 15 */
++
++ .lcdcon3 = S3C2410_LCDCON3_HBPD(43) | /* 44 */
++ S3C2410_LCDCON3_HOZVAL(639) | /* 640 */
++ S3C2410_LCDCON3_HFPD(115), /* 116 */
++
++ .lcdcon4 = S3C2410_LCDCON4_MVAL(0) |
++ S3C2410_LCDCON4_HSPW(95), /* 96 */
++
++ .lcdcon5 = S3C2410_LCDCON5_FRM565 |
++ S3C2410_LCDCON5_INVVLINE |
++ S3C2410_LCDCON5_INVVFRAME |
++ S3C2410_LCDCON5_PWREN |
++ S3C2410_LCDCON5_HWSWP,
++ },
++
++#if 0
++ /* currently setup by downloader */
++ .gpccon = 0xaa940659,
++ .gpccon_mask = 0xffffffff,
++ .gpcup = 0x0000ffff,
++ .gpcup_mask = 0xffffffff,
++ .gpdcon = 0xaa84aaa0,
++ .gpdcon_mask = 0xffffffff,
++ .gpdup = 0x0000faff,
++ .gpdup_mask = 0xffffffff,
++#endif
++
++ .lpcsel = ((0xCE6) & ~7) | 1<<4,
++
++ .width = 640,
++ .height = 480,
++
++ .xres = {
++ .min = 640,
++ .max = 640,
++ .defval = 640,
++ },
++
++ .yres = {
++ .min = 480,
++ .max = 480,
++ .defval = 480,
++ },
++
++ .bpp = {
++ .min = 16,
++ .max = 16,
++ .defval = 16,
++ },
++};
++
++/* Configuration for 480x640 toppoly TD028TTEC1 */
++static struct s3c2410fb_mach_info qt2410_prodlcd_cfg __initdata = {
++ .regs = {
++
++ .lcdcon1 = S3C2410_LCDCON1_TFT16BPP |
++ S3C2410_LCDCON1_TFT |
++ S3C2410_LCDCON1_CLKVAL(0x01), /* HCLK/4 */
++
++ .lcdcon2 = S3C2410_LCDCON2_VBPD(1) | /* 2 */
++ S3C2410_LCDCON2_LINEVAL(639) |/* 640 */
++ S3C2410_LCDCON2_VFPD(3) | /* 4 */
++ S3C2410_LCDCON2_VSPW(1), /* 2 */
++
++ .lcdcon3 = S3C2410_LCDCON3_HBPD(7) | /* 8 */
++ S3C2410_LCDCON3_HOZVAL(479) | /* 479 */
++ S3C2410_LCDCON3_HFPD(23), /* 24 */
++
++ .lcdcon4 = S3C2410_LCDCON4_MVAL(0) |
++ S3C2410_LCDCON4_HSPW(7), /* 8 */
++
++ .lcdcon5 = S3C2410_LCDCON5_FRM565 |
++ S3C2410_LCDCON5_INVVLINE |
++ S3C2410_LCDCON5_INVVFRAME |
++ S3C2410_LCDCON5_PWREN |
++ S3C2410_LCDCON5_HWSWP,
++ },
++
++#if 0
++ /* currently setup by downloader */
++ .gpccon = 0xaa940659,
++ .gpccon_mask = 0xffffffff,
++ .gpcup = 0x0000ffff,
++ .gpcup_mask = 0xffffffff,
++ .gpdcon = 0xaa84aaa0,
++ .gpdcon_mask = 0xffffffff,
++ .gpdup = 0x0000faff,
++ .gpdup_mask = 0xffffffff,
++#endif
++
++ .lpcsel = ((0xCE6) & ~7) | 1<<4,
++
++ .width = 480,
++ .height = 640,
++
++ .xres = {
++ .min = 480,
++ .max = 480,
++ .defval = 480,
++ },
++
++ .yres = {
++ .min = 640,
++ .max = 640,
++ .defval = 640,
++ },
++
++ .bpp = {
++ .min = 16,
++ .max = 16,
++ .defval = 16,
++ },
++};
++
++/* Config for 240x320 LCD */
+ static struct s3c2410fb_mach_info qt2410_lcd_cfg __initdata = {
+ .regs = {
+
+@@ -275,6 +402,17 @@
+ .oversampling_shift = 2,
+ };
+
++static char tft_type = 's';
++
++int __init tft_setup(char *str)
++{
++ tft_type = str[0];
++ return 1;
++}
++
++__setup("tft=", tft_setup);
++
++
+ static void __init qt2410_map_io(void)
+ {
+ s3c24xx_init_io(qt2410_iodesc, ARRAY_SIZE(qt2410_iodesc));
+@@ -299,7 +437,20 @@
+
+ s3c_device_nand.dev.platform_data = &qt2410_nand_info;
+ s3c_device_sdi.dev.platform_data = &qt2410_mmc_cfg;
+- s3c24xx_fb_set_platdata(&qt2410_lcd_cfg);
++
++ switch (tft_type) {
++ case 'p': /* production */
++ s3c24xx_fb_set_platdata(&qt2410_prodlcd_cfg);
++ break;
++ case 'b': /* big */
++ s3c24xx_fb_set_platdata(&qt2410_biglcd_cfg);
++ break;
++ case 's': /* small */
++ default:
++ s3c24xx_fb_set_platdata(&qt2410_lcd_cfg);
++ break;
++ }
++
+ s3c24xx_udc_set_platdata(&qt2410_udc_cfg);
+ set_s3c2410ts_info(&qt2410_ts_cfg);
+
Added: trunk/oe/packages/linux/linux-qt2410/qt2410-touchscreen.patch
===================================================================
--- trunk/oe/packages/linux/linux-qt2410/qt2410-touchscreen.patch 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/linux/linux-qt2410/qt2410-touchscreen.patch 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,530 @@
+Index: linux-2.6.17.7-new/arch/arm/mach-s3c2410/devs.c
+===================================================================
+--- linux-2.6.17.7-new.orig/arch/arm/mach-s3c2410/devs.c 2006-08-07 09:34:31.000000000 +0200
++++ linux-2.6.17.7-new/arch/arm/mach-s3c2410/devs.c 2006-08-07 17:36:09.000000000 +0200
+@@ -37,6 +37,7 @@
+
+ #include <asm/arch/regs-serial.h>
+ #include <asm/arch/udc.h>
++#include <asm/arch/ts.h>
+
+ #include "devs.h"
+
+@@ -137,6 +138,23 @@
+
+ EXPORT_SYMBOL(s3c_device_nand);
+
++/* Touchscreen */
++struct platform_device s3c_device_ts = {
++ .name = "s3c2410-ts",
++ .id = -1,
++};
++
++EXPORT_SYMBOL(s3c_device_ts);
++
++static struct s3c2410_ts_mach_info s3c2410ts_info;
++
++void __init set_s3c2410ts_info(struct s3c2410_ts_mach_info *hard_s3c2410ts_info)
++{
++ memcpy(&s3c2410ts_info,hard_s3c2410ts_info,sizeof(struct s3c2410_ts_mach_info));
++ s3c_device_ts.dev.platform_data = &s3c2410ts_info;
++}
++EXPORT_SYMBOL(set_s3c2410ts_info);
++
+ /* USB Device (Gadget)*/
+
+ static struct resource s3c_usbgadget_resource[] = {
+Index: linux-2.6.17.7-new/arch/arm/mach-s3c2410/devs.h
+===================================================================
+--- linux-2.6.17.7-new.orig/arch/arm/mach-s3c2410/devs.h 2006-07-25 05:36:01.000000000 +0200
++++ linux-2.6.17.7-new/arch/arm/mach-s3c2410/devs.h 2006-08-07 17:36:09.000000000 +0200
+@@ -39,6 +39,7 @@
+ extern struct platform_device s3c_device_timer3;
+
+ extern struct platform_device s3c_device_usbgadget;
++extern struct platform_device s3c_device_ts;
+
+ /* s3c2440 specific devices */
+
+Index: linux-2.6.17.7-new/drivers/input/touchscreen/Kconfig
+===================================================================
+--- linux-2.6.17.7-new.orig/drivers/input/touchscreen/Kconfig 2006-07-25 05:36:01.000000000 +0200
++++ linux-2.6.17.7-new/drivers/input/touchscreen/Kconfig 2006-08-07 17:36:09.000000000 +0200
+@@ -49,6 +49,24 @@
+ To compile this driver as a module, choose M here: the
+ module will be called corgi_ts.
+
++config TOUCHSCREEN_S3C2410
++ tristate "Samsung S3C2410 touchscreen input driver"
++ depends on ARCH_S3C2410 && INPUT && INPUT_TOUCHSCREEN
++ select SERIO
++ help
++ Say Y here if you have the s3c2410 touchscreen.
++
++ If unsure, say N.
++
++ To compile this driver as a module, choose M here: the
++ module will be called s3c2410_ts.
++
++config TOUCHSCREEN_S3C2410_DEBUG
++ boolean "Samsung S3C2410 touchscreen debug messages"
++ depends on TOUCHSCREEN_S3C2410
++ help
++ Select this if you want debug messages
++
+ config TOUCHSCREEN_GUNZE
+ tristate "Gunze AHL-51S touchscreen"
+ select SERIO
+Index: linux-2.6.17.7-new/drivers/input/touchscreen/Makefile
+===================================================================
+--- linux-2.6.17.7-new.orig/drivers/input/touchscreen/Makefile 2006-07-25 05:36:01.000000000 +0200
++++ linux-2.6.17.7-new/drivers/input/touchscreen/Makefile 2006-08-07 17:36:09.000000000 +0200
+@@ -12,3 +12,5 @@
+ obj-$(CONFIG_TOUCHSCREEN_MTOUCH) += mtouch.o
+ obj-$(CONFIG_TOUCHSCREEN_MK712) += mk712.o
+ obj-$(CONFIG_TOUCHSCREEN_HP600) += hp680_ts_input.o
++obj-$(CONFIG_TOUCHSCREEN_S3C2410) += s3c2410_ts.o
++
+Index: linux-2.6.17.7-new/drivers/input/touchscreen/s3c2410_ts.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.17.7-new/drivers/input/touchscreen/s3c2410_ts.c 2006-08-07 17:36:09.000000000 +0200
+@@ -0,0 +1,351 @@
++/*
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ *
++ * Copyright (c) 2004 Arnaud Patard <arnaud.patard at rtp-net.org>
++ * iPAQ H1940 touchscreen support
++ *
++ * ChangeLog
++ *
++ * 2004-09-05: Herbert Pötzl <herbert at 13thfloor.at>
++ * - added clock (de-)allocation code
++ *
++ * 2005-03-06: Arnaud Patard <arnaud.patard at rtp-net.org>
++ * - h1940_ -> s3c2410 (this driver is now also used on the n30
++ * machines :P)
++ * - Debug messages are now enabled with the config option
++ * TOUCHSCREEN_S3C2410_DEBUG
++ * - Changed the way the value are read
++ * - Input subsystem should now work
++ * - Use ioremap and readl/writel
++ *
++ * 2005-03-23: Arnaud Patard <arnaud.patard at rtp-net.org>
++ * - Make use of some undocumented features of the touchscreen
++ * controller
++ *
++ */
++
++#include <linux/config.h>
++#include <linux/errno.h>
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/slab.h>
++#include <linux/input.h>
++#include <linux/init.h>
++#include <linux/serio.h>
++#include <linux/delay.h>
++#include <linux/platform_device.h>
++#include <linux/clk.h>
++#include <asm/io.h>
++#include <asm/irq.h>
++
++#include <asm/arch/regs-adc.h>
++#include <asm/arch/regs-gpio.h>
++#include <asm/arch/ts.h>
++
++/* For ts.dev.id.version */
++#define S3C2410TSVERSION 0x0101
++
++#define WAIT4INT(x) (((x)<<8) | \
++ S3C2410_ADCTSC_YM_SEN | S3C2410_ADCTSC_YP_SEN | S3C2410_ADCTSC_XP_SEN | \
++ S3C2410_ADCTSC_XY_PST(3))
++
++#define AUTOPST (S3C2410_ADCTSC_YM_SEN | S3C2410_ADCTSC_YP_SEN | S3C2410_ADCTSC_XP_SEN | \
++ S3C2410_ADCTSC_AUTO_PST | S3C2410_ADCTSC_XY_PST(0))
++
++#define DEBUG_LVL KERN_DEBUG
++
++MODULE_AUTHOR("Arnaud Patard <arnaud.patard at rtp-net.org>");
++MODULE_DESCRIPTION("s3c2410 touchscreen driver");
++MODULE_LICENSE("GPL");
++
++/*
++ * Definitions & global arrays.
++ */
++
++
++static char *s3c2410ts_name = "s3c2410 TouchScreen";
++
++/*
++ * Per-touchscreen data.
++ */
++
++struct s3c2410ts {
++ struct input_dev *dev;
++ long xp;
++ long yp;
++ int count;
++ int shift;
++};
++
++static struct s3c2410ts ts;
++static void __iomem *base_addr;
++
++static inline void s3c2410_ts_connect(void)
++{
++ s3c2410_gpio_cfgpin(S3C2410_GPG12, S3C2410_GPG12_XMON);
++ s3c2410_gpio_cfgpin(S3C2410_GPG13, S3C2410_GPG13_nXPON);
++ s3c2410_gpio_cfgpin(S3C2410_GPG14, S3C2410_GPG14_YMON);
++ s3c2410_gpio_cfgpin(S3C2410_GPG15, S3C2410_GPG15_nYPON);
++}
++
++static void touch_timer_fire(unsigned long data)
++{
++ unsigned long data0;
++ unsigned long data1;
++ int updown;
++
++ data0 = readl(base_addr+S3C2410_ADCDAT0);
++ data1 = readl(base_addr+S3C2410_ADCDAT1);
++
++ updown = (!(data0 & S3C2410_ADCDAT0_UPDOWN)) && (!(data1 & S3C2410_ADCDAT0_UPDOWN));
++
++ if (updown) {
++ if (ts.count != 0) {
++ ts.xp >>= ts.shift;
++ ts.yp >>= ts.shift;
++
++#ifdef CONFIG_TOUCHSCREEN_S3C2410_DEBUG
++ {
++ struct timeval tv;
++ do_gettimeofday(&tv);
++ printk(DEBUG_LVL "T: %06d, X: %03ld, Y: %03ld\n", (int)tv.tv_usec, ts.xp, ts.yp);
++ }
++#endif
++
++ input_report_abs(ts.dev, ABS_X, ts.xp);
++ input_report_abs(ts.dev, ABS_Y, ts.yp);
++
++ input_report_key(ts.dev, BTN_TOUCH, 1);
++ input_report_abs(ts.dev, ABS_PRESSURE, 1);
++ input_sync(ts.dev);
++ }
++
++ ts.xp = 0;
++ ts.yp = 0;
++ ts.count = 0;
++
++ writel(S3C2410_ADCTSC_PULL_UP_DISABLE | AUTOPST, base_addr+S3C2410_ADCTSC);
++ writel(readl(base_addr+S3C2410_ADCCON) | S3C2410_ADCCON_ENABLE_START, base_addr+S3C2410_ADCCON);
++ } else {
++ ts.count = 0;
++
++ input_report_key(ts.dev, BTN_TOUCH, 0);
++ input_report_abs(ts.dev, ABS_PRESSURE, 0);
++ input_sync(ts.dev);
++
++ writel(WAIT4INT(0), base_addr+S3C2410_ADCTSC);
++ }
++}
++
++static struct timer_list touch_timer =
++ TIMER_INITIALIZER(touch_timer_fire, 0, 0);
++
++static irqreturn_t stylus_updown(int irq, void *dev_id, struct pt_regs *regs)
++{
++ unsigned long data0;
++ unsigned long data1;
++ int updown;
++
++ data0 = readl(base_addr+S3C2410_ADCDAT0);
++ data1 = readl(base_addr+S3C2410_ADCDAT1);
++
++ updown = (!(data0 & S3C2410_ADCDAT0_UPDOWN)) && (!(data1 & S3C2410_ADCDAT0_UPDOWN));
++
++ /* TODO we should never get an interrupt with updown set while
++ * the timer is running, but maybe we ought to verify that the
++ * timer isn't running anyways. */
++
++ if (updown)
++ touch_timer_fire(0);
++
++ return IRQ_HANDLED;
++}
++
++
++static irqreturn_t stylus_action(int irq, void *dev_id, struct pt_regs *regs)
++{
++ unsigned long data0;
++ unsigned long data1;
++
++ data0 = readl(base_addr+S3C2410_ADCDAT0);
++ data1 = readl(base_addr+S3C2410_ADCDAT1);
++
++ ts.xp += data0 & S3C2410_ADCDAT0_XPDATA_MASK;
++ ts.yp += data1 & S3C2410_ADCDAT1_YPDATA_MASK;
++ ts.count++;
++
++ if (ts.count < (1<<ts.shift)) {
++ writel(S3C2410_ADCTSC_PULL_UP_DISABLE | AUTOPST, base_addr+S3C2410_ADCTSC);
++ writel(readl(base_addr+S3C2410_ADCCON) | S3C2410_ADCCON_ENABLE_START, base_addr+S3C2410_ADCCON);
++ } else {
++ mod_timer(&touch_timer, jiffies+1);
++ writel(WAIT4INT(1), base_addr+S3C2410_ADCTSC);
++ }
++
++ return IRQ_HANDLED;
++}
++
++static struct clk *adc_clock;
++
++/*
++ * The functions for inserting/removing us as a module.
++ */
++
++static int __init s3c2410ts_probe(struct platform_device *pdev)
++{
++ struct s3c2410_ts_mach_info *info;
++ struct input_dev *input_dev;
++
++ info = ( struct s3c2410_ts_mach_info *)pdev->dev.platform_data;
++
++ if (!info)
++ {
++ printk(KERN_ERR "Hm... too bad : no platform data for ts\n");
++ return -EINVAL;
++ }
++
++#ifdef CONFIG_TOUCHSCREEN_S3C2410_DEBUG
++ printk(DEBUG_LVL "Entering s3c2410ts_init\n");
++#endif
++
++ adc_clock = clk_get(NULL, "adc");
++ if (!adc_clock) {
++ printk(KERN_ERR "failed to get adc clock source\n");
++ return -ENOENT;
++ }
++ clk_enable(adc_clock);
++
++#ifdef CONFIG_TOUCHSCREEN_S3C2410_DEBUG
++ printk(DEBUG_LVL "got and enabled clock\n");
++#endif
++
++ base_addr=ioremap(S3C2410_PA_ADC,0x20);
++ if (base_addr == NULL) {
++ printk(KERN_ERR "Failed to remap register block\n");
++ return -ENOMEM;
++ }
++
++
++ /* Configure GPIOs */
++ s3c2410_ts_connect();
++
++ if ((info->presc&0xff) > 0)
++ writel(S3C2410_ADCCON_PRSCEN | S3C2410_ADCCON_PRSCVL(info->presc&0xFF),\
++ base_addr+S3C2410_ADCCON);
++ else
++ writel(0,base_addr+S3C2410_ADCCON);
++
++
++ /* Initialise registers */
++ if ((info->delay&0xffff) > 0)
++ writel(info->delay & 0xffff, base_addr+S3C2410_ADCDLY);
++
++ writel(WAIT4INT(0), base_addr+S3C2410_ADCTSC);
++
++ /* Initialise input stuff */
++ memset(&ts, 0, sizeof(struct s3c2410ts));
++ input_dev = input_allocate_device();
++
++ if (!input_dev) {
++ printk(KERN_ERR "Unable to allocate the input device !!\n");
++ return -ENOMEM;
++ }
++
++ ts.dev = input_dev;
++ ts.dev->evbit[0] = BIT(EV_SYN) | BIT(EV_KEY) | BIT(EV_ABS);
++ ts.dev->keybit[LONG(BTN_TOUCH)] = BIT(BTN_TOUCH);
++ input_set_abs_params(ts.dev, ABS_X, 0, 0x3FF, 0, 0);
++ input_set_abs_params(ts.dev, ABS_Y, 0, 0x3FF, 0, 0);
++ input_set_abs_params(ts.dev, ABS_PRESSURE, 0, 1, 0, 0);
++
++ ts.dev->private = &ts;
++ ts.dev->name = s3c2410ts_name;
++ ts.dev->id.bustype = BUS_RS232;
++ ts.dev->id.vendor = 0xDEAD;
++ ts.dev->id.product = 0xBEEF;
++ ts.dev->id.version = S3C2410TSVERSION;
++
++ ts.shift = info->oversampling_shift;
++
++ /* Get irqs */
++ if (request_irq(IRQ_ADC, stylus_action, SA_SAMPLE_RANDOM,
++ "s3c2410_action", ts.dev)) {
++ printk(KERN_ERR "s3c2410_ts.c: Could not allocate ts IRQ_ADC !\n");
++ iounmap(base_addr);
++ return -EIO;
++ }
++ if (request_irq(IRQ_TC, stylus_updown, SA_SAMPLE_RANDOM,
++ "s3c2410_action", ts.dev)) {
++ printk(KERN_ERR "s3c2410_ts.c: Could not allocate ts IRQ_TC !\n");
++ iounmap(base_addr);
++ return -EIO;
++ }
++
++ printk(KERN_INFO "%s successfully loaded\n", s3c2410ts_name);
++
++ /* All went ok, so register to the input system */
++ input_register_device(ts.dev);
++
++ return 0;
++}
++
++static int s3c2410ts_remove(struct platform_device *pdev)
++{
++ disable_irq(IRQ_ADC);
++ disable_irq(IRQ_TC);
++ free_irq(IRQ_TC,ts.dev);
++ free_irq(IRQ_ADC,ts.dev);
++
++ if (adc_clock) {
++ clk_disable(adc_clock);
++ clk_put(adc_clock);
++ adc_clock = NULL;
++ }
++
++ input_unregister_device(ts.dev);
++ iounmap(base_addr);
++
++ return 0;
++}
++
++static struct platform_driver s3c2410ts_driver = {
++ .driver = {
++ .name = "s3c2410-ts",
++ .owner = THIS_MODULE,
++ },
++ .probe = s3c2410ts_probe,
++ .remove = s3c2410ts_remove,
++};
++
++
++static int __init s3c2410ts_init(void)
++{
++ return platform_driver_register(&s3c2410ts_driver);
++}
++
++static void __exit s3c2410ts_exit(void)
++{
++ platform_driver_unregister(&s3c2410ts_driver);
++}
++
++module_init(s3c2410ts_init);
++module_exit(s3c2410ts_exit);
++
++/*
++ Local variables:
++ compile-command: "make ARCH=arm CROSS_COMPILE=/usr/local/arm/3.3.2/bin/arm-linux- -k -C ../../.."
++ c-basic-offset: 8
++ End:
++*/
+Index: linux-2.6.17.7-new/include/asm-arm/arch-s3c2410/regs-adc.h
+===================================================================
+--- linux-2.6.17.7-new.orig/include/asm-arm/arch-s3c2410/regs-adc.h 2006-07-25 05:36:01.000000000 +0200
++++ linux-2.6.17.7-new/include/asm-arm/arch-s3c2410/regs-adc.h 2006-08-07 17:36:09.000000000 +0200
+@@ -44,7 +44,7 @@
+ #define S3C2410_ADCTSC_XP_SEN (1<<4)
+ #define S3C2410_ADCTSC_PULL_UP_DISABLE (1<<3)
+ #define S3C2410_ADCTSC_AUTO_PST (1<<2)
+-#define S3C2410_ADCTSC_XY_PST (0x3<<0)
++#define S3C2410_ADCTSC_XY_PST(x) (((x)&0x3)<<0)
+
+ /* ADCDAT0 Bits */
+ #define S3C2410_ADCDAT0_UPDOWN (1<<15)
+Index: linux-2.6.17.7-new/include/asm-arm/arch-s3c2410/ts.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.17.7-new/include/asm-arm/arch-s3c2410/ts.h 2006-08-07 17:36:09.000000000 +0200
+@@ -0,0 +1,28 @@
++/* linux/include/asm/arch-s3c2410/ts.h
++ *
++ * Copyright (c) 2005 Arnaud Patard <arnaud.patard at rtp-net.org>
++ *
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ *
++ * Changelog:
++ * 24-Mar-2005 RTP Created file
++ * 03-Aug-2005 RTP Renamed to ts.h
++ */
++
++#ifndef __ASM_ARM_TS_H
++#define __ASM_ARM_TS_H
++
++struct s3c2410_ts_mach_info {
++ int delay;
++ int presc;
++ int oversampling_shift;
++};
++
++void __init set_s3c2410ts_info(struct s3c2410_ts_mach_info *hard_s3c2410ts_info);
++
++#endif /* __ASM_ARM_TS_H */
++
+Index: linux-2.6.17.7-new/arch/arm/mach-s3c2410/mach-qt2410.c
+===================================================================
+--- linux-2.6.17.7-new.orig/arch/arm/mach-s3c2410/mach-qt2410.c 2006-08-07 17:36:58.000000000 +0200
++++ linux-2.6.17.7-new/arch/arm/mach-s3c2410/mach-qt2410.c 2006-08-07 17:38:45.000000000 +0200
+@@ -51,6 +51,7 @@
+ #include <asm/arch/mmc.h>
+ #include <asm/arch/udc.h>
+ #include <asm/arch/nand.h>
++#include <asm/arch/ts.h>
+
+ #include "devs.h"
+ #include "cpu.h"
+@@ -183,6 +184,7 @@
+ &s3c_device_sdi,
+ &s3c_device_usbgadget,
+ &s3c_device_nand,
++ &s3c_device_ts,
+ &cs89x0_device,
+ };
+
+@@ -267,6 +269,12 @@
+ .udc_command = qt2410_udc_pullup,
+ };
+
++static struct s3c2410_ts_mach_info qt2410_ts_cfg = {
++ .delay = 10000,
++ .presc = 49,
++ .oversampling_shift = 2,
++};
++
+ static void __init qt2410_map_io(void)
+ {
+ s3c24xx_init_io(qt2410_iodesc, ARRAY_SIZE(qt2410_iodesc));
+@@ -293,6 +301,7 @@
+ s3c_device_sdi.dev.platform_data = &qt2410_mmc_cfg;
+ s3c24xx_fb_set_platdata(&qt2410_lcd_cfg);
+ s3c24xx_udc_set_platdata(&qt2410_udc_cfg);
++ set_s3c2410ts_info(&qt2410_ts_cfg);
+
+ s3c2410_pm_init();
+ }
Added: trunk/oe/packages/linux/linux-qt2410_2.6.17.7.bb
===================================================================
--- trunk/oe/packages/linux/linux-qt2410_2.6.17.7.bb 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/linux/linux-qt2410_2.6.17.7.bb 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,102 @@
+DESCRIPTION = "2.6 Linux Development Kernel for Armzone QT2410"
+SECTION = "kernel"
+AUTHOR = "Harald Welte <hwelte at hmw-consulting.de>"
+HOMEPAGE = "N/A"
+MAINTAINER = "Michael 'Mickey' Lauer <mickey at vanille.de>"
+LICENSE = "GPL"
+DEPENDS += "quilt-native uboot-qt2410"
+PR = "r2"
+
+inherit kernel
+
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/linux-qt2410"
+HWSRC = "http://people.gta01.hmw-consulting.de/laforge/src/kernel/20060806"
+
+##############################################################
+# source and patches
+#
+SRC_URI = "http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.17.7.tar.bz2 \
+ file://patches-2.6.17.7-qt2401-20060806.tar.bz2 \
+ file://qt2410-biglcd.patch;patch=1 \
+ file://qt2410-touchscreen.patch;patch=1 \
+ file://defconfig-${MACHINE}"
+S = "${WORKDIR}/linux-2.6.17.7"
+
+##############################################################
+# kernel image resides on a seperate flash partition (for now)
+#
+FILES_kernel-image = ""
+ALLOW_EMPTY = "1"
+
+COMPATIBLE_HOST = "arm.*-linux"
+COMPATIBLE_MACHINE = 'armzone-qt2410'
+
+CMDLINE_CON = "console=ttyS0,115200n8"
+#CMDLINE_ROOT = "root=/dev/mmcblk0p1 rootfstype=ext3 rootdelay=5"
+# uncomment if you want to boot over NFS
+#CMDLINE_ROOT = "root=/dev/nfs nfsroot=192.168.1.10:/export/opie-image rootdelay=5 3"
+# uncomment to enable dyntick
+#CMDLINE_OTHER = "dyntick=enable"
+CMDLINE_DEBUG = '${@base_conditional("DISTRO_TYPE", "release", "quiet", "debug",d)}'
+CMDLINE_IP = "ip=192.168.1.2:192.168.1.10:192.168.1.10:255.255.255.0:ezx:usb0:off"
+CMDLINE = "${CMDLINE_CON} ${CMDLINE_ROOT} ${CMDLINE_IP} ${CMDLINE_ROTATE} ${CMDLINE_OTHER} ${CMDLINE_DEBUG}"
+
+###############################################################
+# module configs specific to this kernel
+#
+#module_autoload_pxaficp_ir = "pxaficp_ir"
+#module_autoload_snd-pcm-oss = "snd-pcm-oss"
+
+do_prepatch() {
+ mv ${WORKDIR}/patches ${S}/patches && cd ${S} && quilt push -av
+ rm -Rf patches .pc
+}
+
+do_configure() {
+ #install -m 0644 ${WORKDIR}/logo_linux_clut224.ppm drivers/video/logo/logo_linux_clut224.ppm
+
+ if [ ! -e ${WORKDIR}/defconfig-${MACHINE} ]; then
+ die "No default configuration for ${MACHINE} available."
+ fi
+
+ echo "CONFIG_CMDLINE=\"${CMDLINE}\"" >> ${S}/.config
+
+ if [ "${TARGET_OS}" == "linux-gnueabi" ]; then
+ echo "CONFIG_AEABI=y" >> ${S}/.config
+ echo "CONFIG_OABI_COMPAT=y" >> ${S}/.config
+ else
+ echo "# CONFIG_AEABI is not set" >> ${S}/.config
+ echo "# CONFIG_OABI_COMPAT is not set" >> ${S}/.config
+ fi
+
+ sed -e '/CONFIG_AEABI/d' \
+ -e '/CONFIG_OABI_COMPAT=/d' \
+ -e '/CONFIG_CMDLINE=/d' \
+ -e '/CONFIG_MTD_MTDRAM_SA1100=/d' \
+ -e '/CONFIG_MTDRAM_TOTAL_SIZE=/d' \
+ -e '/CONFIG_MTDRAM_ERASE_SIZE=/d' \
+ -e '/CONFIG_MTDRAM_ABS_POS=/d' \
+ '${WORKDIR}/defconfig-${MACHINE}' >>'${S}/.config'
+
+ yes '' | oe_runmake oldconfig
+}
+
+###############################################################
+# put into deploy directory and append u-boot header
+#
+do_deploy() {
+ install -d ${DEPLOY_DIR_IMAGE}
+ install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${PV}-${MACHINE}-${DATETIME}.bin
+ tar -cvzf ${DEPLOY_DIR_IMAGE}/modules-${KERNEL_RELEASE}-${MACHINE}.tgz -C ${D} lib
+ arm-linux-objcopy -O binary -R .note -R .comment -S vmlinux linux.bin
+ rm -f linux.bin.gz
+ gzip -9 linux.bin
+ uboot-mkimage -A arm -O linux -T kernel -C gzip -a 30008000 -e 30008000 -n "Kernel Image QT2410" -d linux.bin.gz ${DEPLOY_DIR_IMAGE}/uImage-${PV}-${MACHINE}-${DATETIME}.bin
+ rm -f linux.bin.gz
+}
+
+do_deploy[dirs] = "${S}"
+
+addtask prepatch before do_patch after do_unpack
+addtask deploy before do_package after do_install
+
Added: trunk/oe/packages/linux/qt2410-kernel_2.6.bb
===================================================================
--- trunk/oe/packages/linux/qt2410-kernel_2.6.bb 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/linux/qt2410-kernel_2.6.bb 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1 @@
+require linux-qt2410_2.6.17.7.bb
Added: trunk/oe/packages/qt2410-utils/files/s3c2410_boot_usb-20060807.tar.bz2
===================================================================
(Binary files differ)
Property changes on: trunk/oe/packages/qt2410-utils/files/s3c2410_boot_usb-20060807.tar.bz2
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/oe/packages/qt2410-utils/files/sjf2410-linux-20060807.tar.bz2
===================================================================
(Binary files differ)
Property changes on: trunk/oe/packages/qt2410-utils/files/sjf2410-linux-20060807.tar.bz2
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/oe/packages/qt2410-utils/s3c2410-boot-usb-native_20060807.bb
===================================================================
--- trunk/oe/packages/qt2410-utils/s3c2410-boot-usb-native_20060807.bb 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/qt2410-utils/s3c2410-boot-usb-native_20060807.bb 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,31 @@
+DESCRIPTION = "Boots a S3C2410 device with a user supplied kernel zImage"
+DEPENDS = "libusb-native"
+SECTION = "devel"
+AUTHOR = "Harald Welte"
+MAINTAINER = "Michael 'Mickey' Lauer <mickey at Vanille.de>"
+LICENSE = "GPL"
+PR = "r0"
+
+SRC_URI = "file://s3c2410_boot_usb-20060807.tar.bz2"
+S = "${WORKDIR}/s3c2410_boot_usb"
+
+inherit native
+
+do_compile() {
+ ${CC} ${CFLAGS} ${LDFLAGS} -lusb -o s3c2410-boot-usb boot_usb.c
+}
+
+do_deploy() {
+ install -d ${DEPLOY_DIR_IMAGE}
+ install -m 0755 s3c2410-boot-usb ${DEPLOY_DIR_IMAGE}
+}
+
+do_stage() {
+ :
+}
+
+do_install() {
+ :
+}
+
+addtask deploy before do_build after do_compile
Added: trunk/oe/packages/qt2410-utils/sjf2410-linux-native_20060807.bb
===================================================================
--- trunk/oe/packages/qt2410-utils/sjf2410-linux-native_20060807.bb 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/qt2410-utils/sjf2410-linux-native_20060807.bb 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,32 @@
+DESCRIPTION = "Jtag utility to interface w/ a S3C2410 device"
+SECTION = "devel"
+AUTHOR = "Harald Welte"
+MAINTAINER = "Michael 'Mickey' Lauer <mickey at Vanille.de>"
+LICENSE = "GPL"
+PR = "r1"
+
+SRC_URI = "file://sjf2410-linux-20060807.tar.bz2"
+S = "${WORKDIR}/sjf2410-linux"
+
+inherit native
+
+CFLAGS += "-DLINUX_PPDEV"
+
+do_compile() {
+ oe_runmake
+}
+
+do_deploy() {
+ install -d ${DEPLOY_DIR_IMAGE}
+ install -m 0755 sjf2410 ${DEPLOY_DIR_IMAGE}/sjf2410
+}
+
+do_stage() {
+ :
+}
+
+do_install() {
+ :
+}
+
+addtask deploy before do_build after do_compile
Added: trunk/oe/packages/tasks/task-openmoko.bb
===================================================================
--- trunk/oe/packages/tasks/task-openmoko.bb 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/tasks/task-openmoko.bb 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,98 @@
+DESCRIPTION = "OpenMoko: Tasks for the OpenMoko Linux Distribution"
+MAINTAINER = "Michael 'Mickey' Lauer <mickey at Vanille.de>"
+SECTION = "openmoko/base"
+ALLOW_EMPTY = "1"
+PACKAGE_ARCH = "all"
+LICENSE = "MIT"
+PROVIDES = "task-openmoko-everything"
+DEPENDS = "dropbear"
+PR = "r3"
+
+PACKAGES = "\
+ task-openmoko-core \
+ task-openmoko-net \
+ task-openmoko-ui \
+ task-openmoko-base \
+ task-openmoko-finger \
+ task-openmoko-pim \
+ \
+ task-openmoko-devel \
+"
+
+RDEPENDS_task-openmoko-everything := "${PACKAGES}"
+
+#
+# task-openmoko-core
+#
+DESCRIPTION_task-openmoko-core = "OpenMoko: Linux Core Services"
+RDEPENDS_task-openmoko-core = "\
+ task-base \
+ base-files \
+ base-passwd \
+ busybox \
+ initscripts \
+ sysvinit \
+ tinylogin \
+ dropbear \
+"
+
+#
+# task-openmoko-net
+DESCRIPTION_task-openmoko-net = "OpenMoko: Linux Networking"
+RDEPENDS_task-openmoko-net = "\
+ bluez-utils \
+"
+
+#
+# task-openmoko-ui
+#
+DESCRIPTION_task-openmoko-ui = "OpenMoko: The X11/Gtk+2 based native User Interface"
+RDEPENDS_task-openmoko-ui = "\
+ gtk+ \
+ matchbox-wm \
+ matchbox-themes-gtk \
+ matchbox-panel-manager \
+ xserver-kdrive-fbdev \
+"
+
+#
+# task-openmoko-base
+#
+DESCRIPTION_task-openmoko-base = "OpenMoko: Main-Menu Launcher, Phone Application, and Panel"
+RDEPENDS_task-openmoko-base = "\
+"
+
+#
+# task-openmoko-finger
+#
+DESCRIPTION_task-openmoko-finger = "OpenMoko: Finger UI Applications"
+RDEPENDS_task-openmoko-finger = "\
+"
+
+#
+# task-openmoko-pim
+#
+DESCRIPTION_task-openmoko-pim = "OpenMoko: PIM Applications"
+RDEPENDS_task-openmoko-pim = "\
+ eds-dbus \
+"
+
+#
+# task-openmoko-devel
+#
+DESCRIPTION_task-openmoko-devel = "OpenMoko: Development Tools"
+RDEPENDS_task-openmoko-devel = "\
+ strace \
+ ltrace \
+ gdb \
+ gdbserver \
+ tcpdump \
+ tslib-calibrate \
+ tslib-tests \
+ lsof \
+ lrzsz \
+ udev-utils \
+ usbutils \
+ uucp \
+"
+
Added: trunk/oe/packages/uboot/files/arm_flags.patch
===================================================================
--- trunk/oe/packages/uboot/files/arm_flags.patch 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/uboot/files/arm_flags.patch 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,13 @@
+Index: u-boot/cpu/pxa/config.mk
+===================================================================
+--- u-boot.orig/cpu/pxa/config.mk 2005-01-09 16:28:17.000000000 -0500
++++ u-boot/cpu/pxa/config.mk 2005-02-25 16:38:23.789788636 -0500
+@@ -23,7 +23,7 @@
+ #
+
+ PLATFORM_RELFLAGS += -fno-strict-aliasing -fno-common -ffixed-r8 \
+- -mshort-load-bytes -msoft-float
++ -msoft-float
+
+ #PLATFORM_CPPFLAGS += -mapcs-32 -march=armv4 -mtune=strongarm1100
+ PLATFORM_CPPFLAGS += -mapcs-32 -march=armv5 -mtune=xscale
Added: trunk/oe/packages/uboot/files/qt2410.h
===================================================================
--- trunk/oe/packages/uboot/files/qt2410.h 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/uboot/files/qt2410.h 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,256 @@
+/*
+ * (C) Copyright 2002
+ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
+ * Marius Groeger <mgroeger at sysgo.de>
+ * Gary Jennejohn <gj at denx.de>
+ * David Mueller <d.mueller at elsoft.ch>
+ *
+ * Configuation settings for the SAMSUNG SMDK2410 board.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+#if 0
+/* If we want to start u-boot from usb bootloader in NOR flash */
+#define CONFIG_SKIP_RELOCATE_UBOOT 1
+#define CONFIG_SKIP_LOWLEVEL_INIT 1
+#else
+/* If we want to start u-boot directly from within NAND flash */
+#define CONFIG_S3C2410_NAND_BOOT 1
+#endif
+
+/*
+ * High Level Configuration Options
+ * (easy to change)
+ */
+#define CONFIG_ARM920T 1 /* This is an ARM920T Core */
+#define CONFIG_S3C2410 1 /* in a SAMSUNG S3C2410 SoC */
+#define CONFIG_SMDK2410 1 /* on a SAMSUNG SMDK2410 Board */
+
+/* input clock of PLL */
+#define CONFIG_SYS_CLK_FREQ 12000000/* the SMDK2410 has 12MHz input clock */
+
+
+#define USE_920T_MMU 1
+#define CONFIG_USE_IRQ 1
+//#undef CONFIG_USE_IRQ /* we don't need IRQ/FIQ stuff */
+
+/*
+ * Size of malloc() pool
+ */
+#define CFG_MALLOC_LEN (CFG_ENV_SIZE + 128*1024)
+#define CFG_GBL_DATA_SIZE 128 /* size in bytes reserved for initial data */
+
+/*
+ * Hardware drivers
+ */
+#define CONFIG_DRIVER_CS8900 1 /* we have a CS8900 on-board */
+#define CS8900_BASE 0x19000300
+#define CS8900_BUS16 1 /* the Linux driver does accesses as shorts */
+
+/*
+ * select serial console configuration
+ */
+#define CONFIG_SERIAL1 1 /* we use SERIAL 1 on SMDK2410 */
+#define CONFIG_HWFLOW 1
+
+/************************************************************
+ * RTC
+ ************************************************************/
+#define CONFIG_RTC_S3C24X0 1
+
+/* allow to overwrite serial and ethaddr */
+#define CONFIG_ENV_OVERWRITE
+
+#define CONFIG_BAUDRATE 115200
+
+/***********************************************************
+ * Command definition
+ ***********************************************************/
+#define CONFIG_COMMANDS \
+ (CONFIG_CMD_DFL | \
+ CFG_CMD_BSP | \
+ CFG_CMD_CACHE | \
+ CFG_CMD_DATE | \
+ CFG_CMD_DHCP | \
+ CFG_CMD_DIAG | \
+ CFG_CMD_ELF | \
+ CFG_CMD_EXT2 | \
+ CFG_CMD_FAT | \
+ CFG_CMD_HWFLOW | \
+ /* CFG_CMD_IDE | */ \
+ /* CFG_CMD_IRQ | */ \
+ CFG_CMD_JFFS2 | \
+ CFG_CMD_MMC | \
+ CFG_CMD_NAND | \
+ CFG_CMD_PING | \
+ CFG_CMD_PORTIO | \
+ CFG_CMD_REGINFO | \
+ CFG_CMD_SAVES | \
+ CFG_CMD_USB)
+
+/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
+#include <cmd_confdefs.h>
+
+#define CONFIG_BOOTDELAY 3
+#define CONFIG_BOOTARGS "root=/dev/sda1 console=ttySAC0,115200 loglevel=8 rootdelay=10"
+/*#define CONFIG_ETHADDR 08:00:3e:26:0a:5b */
+#define CONFIG_NETMASK 255.255.255.0
+#define CONFIG_IPADDR 10.0.0.110
+#define CONFIG_SERVERIP 10.0.0.1
+/*#define CONFIG_BOOTFILE "elinos-lart" */
+#define CONFIG_BOOTCOMMAND "mmcinit; ext2load mmc 0 0x32000000 uImage; bootm 0x32000000"
+
+#define CONFIG_DOS_PARTITION 1
+
+#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
+#define CONFIG_KGDB_BAUDRATE 115200 /* speed to run kgdb serial port */
+/* what's this ? it's not used anywhere */
+#define CONFIG_KGDB_SER_INDEX 1 /* which serial port to use */
+#endif
+
+/*
+ * Miscellaneous configurable options
+ */
+#define CFG_LONGHELP /* undef to save memory */
+#define CFG_PROMPT "QT2410 # " /* Monitor Command Prompt */
+#define CFG_CBSIZE 256 /* Console I/O Buffer Size */
+#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
+#define CFG_MAXARGS 16 /* max number of command args */
+#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */
+
+#define CFG_MEMTEST_START 0x30000000 /* memtest works on */
+#define CFG_MEMTEST_END 0x33F00000 /* 63 MB in DRAM */
+
+#undef CFG_CLKS_IN_HZ /* everything, incl board info, in Hz */
+
+#define CFG_LOAD_ADDR 0x33000000 /* default load address */
+
+/* the PWM TImer 4 uses a counter of 15625 for 10 ms, so we need */
+/* it to wrap 100 times (total 1562500) to get 1 sec. */
+#define CFG_HZ 1562500
+
+/* valid baudrates */
+#define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
+
+/*-----------------------------------------------------------------------
+ * Stack sizes
+ *
+ * The stack sizes are set up in start.S using the settings below
+ */
+#define CONFIG_STACKSIZE (128*1024) /* regular stack */
+#ifdef CONFIG_USE_IRQ
+#define CONFIG_STACKSIZE_IRQ (4*1024) /* IRQ stack */
+#define CONFIG_STACKSIZE_FIQ (4*1024) /* FIQ stack */
+#endif
+
+/* IDE/ATA config */
+
+#if 0
+#define CFG_IDE_MAXBUS 1
+#define CFG_IDE_MAXDEVICE 2
+#define CFG_IDE_PREINIT 0
+
+#define CFG_ATA_BASE_ADDR
+#endif
+
+#define CONFIG_USB_OHCI 1
+
+/*-----------------------------------------------------------------------
+ * Physical Memory Map
+ */
+#define CONFIG_NR_DRAM_BANKS 1 /* we have 1 bank of DRAM */
+#define PHYS_SDRAM_1 0x30000000 /* SDRAM Bank #1 */
+#define PHYS_SDRAM_1_SIZE 0x04000000 /* 64 MB */
+#define PHYS_SDRAM_RES_SIZE 0x00200000 /* 2 MB for frame buffer */
+
+#define PHYS_FLASH_1 0x00000000 /* Flash Bank #1 */
+
+#define CFG_FLASH_BASE PHYS_FLASH_1
+
+/*-----------------------------------------------------------------------
+ * FLASH and environment organization
+ */
+
+#define CONFIG_AMD_LV400 1 /* uncomment this if you have a LV400 flash */
+#if 0
+#define CONFIG_AMD_LV800 1 /* uncomment this if you have a LV800 flash */
+#endif
+
+#define CFG_MAX_FLASH_BANKS 1 /* max number of memory banks */
+#ifdef CONFIG_AMD_LV800
+#define PHYS_FLASH_SIZE 0x00100000 /* 1MB */
+#define CFG_MAX_FLASH_SECT (19) /* max number of sectors on one chip */
+#define CFG_ENV_ADDR (CFG_FLASH_BASE + 0x0F0000) /* addr of environment */
+#endif
+#ifdef CONFIG_AMD_LV400
+#define PHYS_FLASH_SIZE 0x00080000 /* 512KB */
+#define CFG_MAX_FLASH_SECT (11) /* max number of sectors on one chip */
+#define CFG_ENV_ADDR (CFG_FLASH_BASE + 0x070000) /* addr of environment */
+#endif
+
+/* timeout values are in ticks */
+#define CFG_FLASH_ERASE_TOUT (5*CFG_HZ) /* Timeout for Flash Erase */
+#define CFG_FLASH_WRITE_TOUT (5*CFG_HZ) /* Timeout for Flash Write */
+
+#define CFG_ENV_IS_IN_NAND 1
+#define CFG_ENV_SIZE 0x4000 /* 16k Total Size of Environment Sector */
+#define CFG_ENV_OFFSET 0x30000 /* environment after bootloader */
+
+#define NAND_MAX_CHIPS 1
+#define CFG_NAND_BASE 0x4e000000
+#define CFG_MAX_NAND_DEVICE 1
+
+#define CONFIG_MMC 1
+#define CFG_MMC_BASE 0xff000000
+
+#define CONFIG_EXT2 1
+
+/* FAT driver in u-boot is broken currently */
+#define CONFIG_FAT 1
+#define CONFIG_SUPPORT_VFAT
+
+/* ATAG configuration */
+#define CONFIG_INITRD_TAG 1
+#define CONFIG_SETUP_MEMORY_TAGS 1
+#define CONFIG_CMDLINE_TAG 1
+#if 0
+#define CONFIG_SERIAL_TAG 1
+#define CONFIG_REVISION_TAG 1
+#endif
+
+
+#if 0
+#define CONFIG_VIDEO
+#define CONFIG_VIDEO_S3C2410
+#define CONFIG_CFB_CONSOLE
+#define CONFIG_VIDEO_LOGO
+#define CONFIG_VGA_AS_SINGLE_DEVICE
+
+#define VIDEO_KBD_INIT_FCT 0
+#define VIDEO_TSTC_FCT serial_tstc
+#define VIDEO_GETC_FCT serial_getc
+
+#define LCD_VIDEO_ADDR 0x33d00000
+#endif
+
+#endif /* __CONFIG_H */
Added: trunk/oe/packages/uboot/files/qt2410_nand.h
===================================================================
--- trunk/oe/packages/uboot/files/qt2410_nand.h 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/uboot/files/qt2410_nand.h 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,256 @@
+/*
+ * (C) Copyright 2002
+ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
+ * Marius Groeger <mgroeger at sysgo.de>
+ * Gary Jennejohn <gj at denx.de>
+ * David Mueller <d.mueller at elsoft.ch>
+ *
+ * Configuation settings for the SAMSUNG SMDK2410 board.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+#if 0
+/* If we want to start u-boot from usb bootloader in NOR flash */
+#define CONFIG_SKIP_RELOCATE_UBOOT 1
+#define CONFIG_SKIP_LOWLEVEL_INIT 1
+#else
+/* If we want to start u-boot directly from within NAND flash */
+#define CONFIG_S3C2410_NAND_BOOT 1
+#endif
+
+/*
+ * High Level Configuration Options
+ * (easy to change)
+ */
+#define CONFIG_ARM920T 1 /* This is an ARM920T Core */
+#define CONFIG_S3C2410 1 /* in a SAMSUNG S3C2410 SoC */
+#define CONFIG_SMDK2410 1 /* on a SAMSUNG SMDK2410 Board */
+
+/* input clock of PLL */
+#define CONFIG_SYS_CLK_FREQ 12000000/* the SMDK2410 has 12MHz input clock */
+
+
+#define USE_920T_MMU 1
+#define CONFIG_USE_IRQ 1
+//#undef CONFIG_USE_IRQ /* we don't need IRQ/FIQ stuff */
+
+/*
+ * Size of malloc() pool
+ */
+#define CFG_MALLOC_LEN (CFG_ENV_SIZE + 128*1024)
+#define CFG_GBL_DATA_SIZE 128 /* size in bytes reserved for initial data */
+
+/*
+ * Hardware drivers
+ */
+#define CONFIG_DRIVER_CS8900 1 /* we have a CS8900 on-board */
+#define CS8900_BASE 0x19000300
+#define CS8900_BUS16 1 /* the Linux driver does accesses as shorts */
+
+/*
+ * select serial console configuration
+ */
+#define CONFIG_SERIAL1 1 /* we use SERIAL 1 on SMDK2410 */
+#define CONFIG_HWFLOW 1
+
+/************************************************************
+ * RTC
+ ************************************************************/
+#define CONFIG_RTC_S3C24X0 1
+
+/* allow to overwrite serial and ethaddr */
+#define CONFIG_ENV_OVERWRITE
+
+#define CONFIG_BAUDRATE 115200
+
+/***********************************************************
+ * Command definition
+ ***********************************************************/
+#define CONFIG_COMMANDS \
+ (CONFIG_CMD_DFL | \
+ CFG_CMD_BSP | \
+ CFG_CMD_CACHE | \
+ CFG_CMD_DATE | \
+ CFG_CMD_DHCP | \
+ CFG_CMD_DIAG | \
+ CFG_CMD_ELF | \
+ CFG_CMD_EXT2 | \
+ CFG_CMD_FAT | \
+ CFG_CMD_HWFLOW | \
+ /* CFG_CMD_IDE | */ \
+ /* CFG_CMD_IRQ | */ \
+ CFG_CMD_JFFS2 | \
+ CFG_CMD_MMC | \
+ CFG_CMD_NAND | \
+ CFG_CMD_PING | \
+ CFG_CMD_PORTIO | \
+ CFG_CMD_REGINFO | \
+ CFG_CMD_SAVES | \
+ CFG_CMD_USB)
+
+/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
+#include <cmd_confdefs.h>
+
+#define CONFIG_BOOTDELAY 3
+#define CONFIG_BOOTARGS "root=/dev/sda1 console=ttySAC0,115200 loglevel=8 rootdelay=10"
+/*#define CONFIG_ETHADDR 08:00:3e:26:0a:5b */
+#define CONFIG_NETMASK 255.255.255.0
+#define CONFIG_IPADDR 10.0.0.110
+#define CONFIG_SERVERIP 10.0.0.1
+/*#define CONFIG_BOOTFILE "elinos-lart" */
+#define CONFIG_BOOTCOMMAND "mmcinit; ext2load mmc 0 0x32000000 uImage; bootm 0x32000000"
+
+#define CONFIG_DOS_PARTITION 1
+
+#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
+#define CONFIG_KGDB_BAUDRATE 115200 /* speed to run kgdb serial port */
+/* what's this ? it's not used anywhere */
+#define CONFIG_KGDB_SER_INDEX 1 /* which serial port to use */
+#endif
+
+/*
+ * Miscellaneous configurable options
+ */
+#define CFG_LONGHELP /* undef to save memory */
+#define CFG_PROMPT "QT2410 # " /* Monitor Command Prompt */
+#define CFG_CBSIZE 256 /* Console I/O Buffer Size */
+#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
+#define CFG_MAXARGS 16 /* max number of command args */
+#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */
+
+#define CFG_MEMTEST_START 0x30000000 /* memtest works on */
+#define CFG_MEMTEST_END 0x33F00000 /* 63 MB in DRAM */
+
+#undef CFG_CLKS_IN_HZ /* everything, incl board info, in Hz */
+
+#define CFG_LOAD_ADDR 0x33000000 /* default load address */
+
+/* the PWM TImer 4 uses a counter of 15625 for 10 ms, so we need */
+/* it to wrap 100 times (total 1562500) to get 1 sec. */
+#define CFG_HZ 1562500
+
+/* valid baudrates */
+#define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
+
+/*-----------------------------------------------------------------------
+ * Stack sizes
+ *
+ * The stack sizes are set up in start.S using the settings below
+ */
+#define CONFIG_STACKSIZE (128*1024) /* regular stack */
+#ifdef CONFIG_USE_IRQ
+#define CONFIG_STACKSIZE_IRQ (4*1024) /* IRQ stack */
+#define CONFIG_STACKSIZE_FIQ (4*1024) /* FIQ stack */
+#endif
+
+/* IDE/ATA config */
+
+#if 0
+#define CFG_IDE_MAXBUS 1
+#define CFG_IDE_MAXDEVICE 2
+#define CFG_IDE_PREINIT 0
+
+#define CFG_ATA_BASE_ADDR
+#endif
+
+#define CONFIG_USB_OHCI 1
+
+/*-----------------------------------------------------------------------
+ * Physical Memory Map
+ */
+#define CONFIG_NR_DRAM_BANKS 1 /* we have 1 bank of DRAM */
+#define PHYS_SDRAM_1 0x30000000 /* SDRAM Bank #1 */
+#define PHYS_SDRAM_1_SIZE 0x04000000 /* 64 MB */
+#define PHYS_SDRAM_RES_SIZE 0x00200000 /* 2 MB for frame buffer */
+
+#define PHYS_FLASH_1 0x00000000 /* Flash Bank #1 */
+
+#define CFG_FLASH_BASE PHYS_FLASH_1
+
+/*-----------------------------------------------------------------------
+ * FLASH and environment organization
+ */
+
+#define CONFIG_AMD_LV400 1 /* uncomment this if you have a LV400 flash */
+#if 0
+#define CONFIG_AMD_LV800 1 /* uncomment this if you have a LV800 flash */
+#endif
+
+#define CFG_MAX_FLASH_BANKS 1 /* max number of memory banks */
+#ifdef CONFIG_AMD_LV800
+#define PHYS_FLASH_SIZE 0x00100000 /* 1MB */
+#define CFG_MAX_FLASH_SECT (19) /* max number of sectors on one chip */
+#define CFG_ENV_ADDR (CFG_FLASH_BASE + 0x0F0000) /* addr of environment */
+#endif
+#ifdef CONFIG_AMD_LV400
+#define PHYS_FLASH_SIZE 0x00080000 /* 512KB */
+#define CFG_MAX_FLASH_SECT (11) /* max number of sectors on one chip */
+#define CFG_ENV_ADDR (CFG_FLASH_BASE + 0x070000) /* addr of environment */
+#endif
+
+/* timeout values are in ticks */
+#define CFG_FLASH_ERASE_TOUT (5*CFG_HZ) /* Timeout for Flash Erase */
+#define CFG_FLASH_WRITE_TOUT (5*CFG_HZ) /* Timeout for Flash Write */
+
+#define CFG_ENV_IS_IN_NAND 1
+#define CFG_ENV_SIZE 0x4000 /* 16k Total Size of Environment Sector */
+#define CFG_ENV_OFFSET 0x30000 /* environment after bootloader */
+
+#define NAND_MAX_CHIPS 1
+#define CFG_NAND_BASE 0x4e000000
+#define CFG_MAX_NAND_DEVICE 1
+
+#define CONFIG_MMC 1
+#define CFG_MMC_BASE 0xff000000
+
+#define CONFIG_EXT2 1
+
+/* FAT driver in u-boot is broken currently */
+#define CONFIG_FAT 1
+#define CONFIG_SUPPORT_VFAT
+
+/* ATAG configuration */
+#define CONFIG_INITRD_TAG 1
+#define CONFIG_SETUP_MEMORY_TAGS 1
+#define CONFIG_CMDLINE_TAG 1
+#if 0
+#define CONFIG_SERIAL_TAG 1
+#define CONFIG_REVISION_TAG 1
+#endif
+
+
+#if 0
+#define CONFIG_VIDEO
+#define CONFIG_VIDEO_S3C2410
+#define CONFIG_CFB_CONSOLE
+#define CONFIG_VIDEO_LOGO
+#define CONFIG_VGA_AS_SINGLE_DEVICE
+
+#define VIDEO_KBD_INIT_FCT 0
+#define VIDEO_TSTC_FCT serial_tstc
+#define VIDEO_GETC_FCT serial_getc
+
+#define LCD_VIDEO_ADDR 0x33d00000
+#endif
+
+#endif /* __CONFIG_H */
Added: trunk/oe/packages/uboot/files/qt2410_ram.h
===================================================================
--- trunk/oe/packages/uboot/files/qt2410_ram.h 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/uboot/files/qt2410_ram.h 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,256 @@
+/*
+ * (C) Copyright 2002
+ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
+ * Marius Groeger <mgroeger at sysgo.de>
+ * Gary Jennejohn <gj at denx.de>
+ * David Mueller <d.mueller at elsoft.ch>
+ *
+ * Configuation settings for the SAMSUNG SMDK2410 board.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+#if 1
+/* If we want to start u-boot from usb bootloader in NOR flash */
+#define CONFIG_SKIP_RELOCATE_UBOOT 1
+#define CONFIG_SKIP_LOWLEVEL_INIT 1
+#else
+/* If we want to start u-boot directly from within NAND flash */
+#define CONFIG_S3C2410_NAND_BOOT 1
+#endif
+
+/*
+ * High Level Configuration Options
+ * (easy to change)
+ */
+#define CONFIG_ARM920T 1 /* This is an ARM920T Core */
+#define CONFIG_S3C2410 1 /* in a SAMSUNG S3C2410 SoC */
+#define CONFIG_SMDK2410 1 /* on a SAMSUNG SMDK2410 Board */
+
+/* input clock of PLL */
+#define CONFIG_SYS_CLK_FREQ 12000000/* the SMDK2410 has 12MHz input clock */
+
+
+#define USE_920T_MMU 1
+#define CONFIG_USE_IRQ 1
+//#undef CONFIG_USE_IRQ /* we don't need IRQ/FIQ stuff */
+
+/*
+ * Size of malloc() pool
+ */
+#define CFG_MALLOC_LEN (CFG_ENV_SIZE + 128*1024)
+#define CFG_GBL_DATA_SIZE 128 /* size in bytes reserved for initial data */
+
+/*
+ * Hardware drivers
+ */
+#define CONFIG_DRIVER_CS8900 1 /* we have a CS8900 on-board */
+#define CS8900_BASE 0x19000300
+#define CS8900_BUS16 1 /* the Linux driver does accesses as shorts */
+
+/*
+ * select serial console configuration
+ */
+#define CONFIG_SERIAL1 1 /* we use SERIAL 1 on SMDK2410 */
+#define CONFIG_HWFLOW 1
+
+/************************************************************
+ * RTC
+ ************************************************************/
+#define CONFIG_RTC_S3C24X0 1
+
+/* allow to overwrite serial and ethaddr */
+#define CONFIG_ENV_OVERWRITE
+
+#define CONFIG_BAUDRATE 115200
+
+/***********************************************************
+ * Command definition
+ ***********************************************************/
+#define CONFIG_COMMANDS \
+ (CONFIG_CMD_DFL | \
+ CFG_CMD_BSP | \
+ CFG_CMD_CACHE | \
+ CFG_CMD_DATE | \
+ CFG_CMD_DHCP | \
+ CFG_CMD_DIAG | \
+ CFG_CMD_ELF | \
+ CFG_CMD_EXT2 | \
+ CFG_CMD_FAT | \
+ CFG_CMD_HWFLOW | \
+ /* CFG_CMD_IDE | */ \
+ /* CFG_CMD_IRQ | */ \
+ CFG_CMD_JFFS2 | \
+ CFG_CMD_MMC | \
+ CFG_CMD_NAND | \
+ CFG_CMD_PING | \
+ CFG_CMD_PORTIO | \
+ CFG_CMD_REGINFO | \
+ CFG_CMD_SAVES | \
+ CFG_CMD_USB)
+
+/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
+#include <cmd_confdefs.h>
+
+#define CONFIG_BOOTDELAY 3
+#define CONFIG_BOOTARGS "root=/dev/sda1 console=ttySAC0,115200 loglevel=8 rootdelay=10"
+/*#define CONFIG_ETHADDR 08:00:3e:26:0a:5b */
+#define CONFIG_NETMASK 255.255.255.0
+#define CONFIG_IPADDR 10.0.0.110
+#define CONFIG_SERVERIP 10.0.0.1
+/*#define CONFIG_BOOTFILE "elinos-lart" */
+#define CONFIG_BOOTCOMMAND "mmcinit; ext2load mmc 0 0x32000000 uImage; bootm 0x32000000"
+
+#define CONFIG_DOS_PARTITION 1
+
+#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
+#define CONFIG_KGDB_BAUDRATE 115200 /* speed to run kgdb serial port */
+/* what's this ? it's not used anywhere */
+#define CONFIG_KGDB_SER_INDEX 1 /* which serial port to use */
+#endif
+
+/*
+ * Miscellaneous configurable options
+ */
+#define CFG_LONGHELP /* undef to save memory */
+#define CFG_PROMPT "QT2410 # " /* Monitor Command Prompt */
+#define CFG_CBSIZE 256 /* Console I/O Buffer Size */
+#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
+#define CFG_MAXARGS 16 /* max number of command args */
+#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */
+
+#define CFG_MEMTEST_START 0x30000000 /* memtest works on */
+#define CFG_MEMTEST_END 0x33F00000 /* 63 MB in DRAM */
+
+#undef CFG_CLKS_IN_HZ /* everything, incl board info, in Hz */
+
+#define CFG_LOAD_ADDR 0x33000000 /* default load address */
+
+/* the PWM TImer 4 uses a counter of 15625 for 10 ms, so we need */
+/* it to wrap 100 times (total 1562500) to get 1 sec. */
+#define CFG_HZ 1562500
+
+/* valid baudrates */
+#define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
+
+/*-----------------------------------------------------------------------
+ * Stack sizes
+ *
+ * The stack sizes are set up in start.S using the settings below
+ */
+#define CONFIG_STACKSIZE (128*1024) /* regular stack */
+#ifdef CONFIG_USE_IRQ
+#define CONFIG_STACKSIZE_IRQ (4*1024) /* IRQ stack */
+#define CONFIG_STACKSIZE_FIQ (4*1024) /* FIQ stack */
+#endif
+
+/* IDE/ATA config */
+
+#if 0
+#define CFG_IDE_MAXBUS 1
+#define CFG_IDE_MAXDEVICE 2
+#define CFG_IDE_PREINIT 0
+
+#define CFG_ATA_BASE_ADDR
+#endif
+
+#define CONFIG_USB_OHCI 1
+
+/*-----------------------------------------------------------------------
+ * Physical Memory Map
+ */
+#define CONFIG_NR_DRAM_BANKS 1 /* we have 1 bank of DRAM */
+#define PHYS_SDRAM_1 0x30000000 /* SDRAM Bank #1 */
+#define PHYS_SDRAM_1_SIZE 0x04000000 /* 64 MB */
+#define PHYS_SDRAM_RES_SIZE 0x00200000 /* 2 MB for frame buffer */
+
+#define PHYS_FLASH_1 0x00000000 /* Flash Bank #1 */
+
+#define CFG_FLASH_BASE PHYS_FLASH_1
+
+/*-----------------------------------------------------------------------
+ * FLASH and environment organization
+ */
+
+#define CONFIG_AMD_LV400 1 /* uncomment this if you have a LV400 flash */
+#if 0
+#define CONFIG_AMD_LV800 1 /* uncomment this if you have a LV800 flash */
+#endif
+
+#define CFG_MAX_FLASH_BANKS 1 /* max number of memory banks */
+#ifdef CONFIG_AMD_LV800
+#define PHYS_FLASH_SIZE 0x00100000 /* 1MB */
+#define CFG_MAX_FLASH_SECT (19) /* max number of sectors on one chip */
+#define CFG_ENV_ADDR (CFG_FLASH_BASE + 0x0F0000) /* addr of environment */
+#endif
+#ifdef CONFIG_AMD_LV400
+#define PHYS_FLASH_SIZE 0x00080000 /* 512KB */
+#define CFG_MAX_FLASH_SECT (11) /* max number of sectors on one chip */
+#define CFG_ENV_ADDR (CFG_FLASH_BASE + 0x070000) /* addr of environment */
+#endif
+
+/* timeout values are in ticks */
+#define CFG_FLASH_ERASE_TOUT (5*CFG_HZ) /* Timeout for Flash Erase */
+#define CFG_FLASH_WRITE_TOUT (5*CFG_HZ) /* Timeout for Flash Write */
+
+#define CFG_ENV_IS_IN_NAND 1
+#define CFG_ENV_SIZE 0x4000 /* 16k Total Size of Environment Sector */
+#define CFG_ENV_OFFSET 0x30000 /* environment after bootloader */
+
+#define NAND_MAX_CHIPS 1
+#define CFG_NAND_BASE 0x4e000000
+#define CFG_MAX_NAND_DEVICE 1
+
+#define CONFIG_MMC 1
+#define CFG_MMC_BASE 0xff000000
+
+#define CONFIG_EXT2 1
+
+/* FAT driver in u-boot is broken currently */
+#define CONFIG_FAT 1
+#define CONFIG_SUPPORT_VFAT
+
+/* ATAG configuration */
+#define CONFIG_INITRD_TAG 1
+#define CONFIG_SETUP_MEMORY_TAGS 1
+#define CONFIG_CMDLINE_TAG 1
+#if 0
+#define CONFIG_SERIAL_TAG 1
+#define CONFIG_REVISION_TAG 1
+#endif
+
+
+#if 0
+#define CONFIG_VIDEO
+#define CONFIG_VIDEO_S3C2410
+#define CONFIG_CFB_CONSOLE
+#define CONFIG_VIDEO_LOGO
+#define CONFIG_VGA_AS_SINGLE_DEVICE
+
+#define VIDEO_KBD_INIT_FCT 0
+#define VIDEO_TSTC_FCT serial_tstc
+#define VIDEO_GETC_FCT serial_getc
+
+#define LCD_VIDEO_ADDR 0x33d00000
+#endif
+
+#endif /* __CONFIG_H */
Added: trunk/oe/packages/uboot/files/u-boot-20060807-qt2410.patch
===================================================================
--- trunk/oe/packages/uboot/files/u-boot-20060807-qt2410.patch 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/uboot/files/u-boot-20060807-qt2410.patch 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,8435 @@
+diff --git a/Makefile b/Makefile
+index 128ae59..5d7b5bb 100644
+--- a/Makefile
++++ b/Makefile
+@@ -1638,6 +1638,9 @@ omap730p2_cs3boot_config : unconfig
+ sbc2410x_config: unconfig
+ @./mkconfig $(@:_config=) arm arm920t sbc2410x NULL s3c24x0
+
++qt2410_config : unconfig
++ @./mkconfig $(@:_config=) arm arm920t qt2410 NULL s3c24x0
++
+ scb9328_config : unconfig
+ @./mkconfig $(@:_config=) arm arm920t scb9328 NULL imx
+
+diff --git a/board/qt2410/Makefile b/board/qt2410/Makefile
+new file mode 100644
+index 0000000..407b256
+--- /dev/null
++++ b/board/qt2410/Makefile
+@@ -0,0 +1,47 @@
++#
++# (C) Copyright 2000, 2001, 2002
++# Wolfgang Denk, DENX Software Engineering, wd at denx.de.
++#
++# See file CREDITS for list of people who contributed to this
++# project.
++#
++# This program is free software; you can redistribute it and/or
++# modify it under the terms of the GNU General Public License as
++# published by the Free Software Foundation; either version 2 of
++# the License, or (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++# MA 02111-1307 USA
++#
++
++include $(TOPDIR)/config.mk
++
++LIB = lib$(BOARD).a
++
++OBJS := qt2410.o flash.o
++SOBJS := lowlevel_init.o
++
++$(LIB): $(OBJS) $(SOBJS)
++ $(AR) crv $@ $(OBJS) $(SOBJS)
++
++clean:
++ rm -f $(SOBJS) $(OBJS)
++
++distclean: clean
++ rm -f $(LIB) core *.bak .depend
++
++#########################################################################
++
++.depend: Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c)
++ $(CC) -M $(CPPFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@
++
++-include .depend
++
++#########################################################################
+diff --git a/board/qt2410/config.mk b/board/qt2410/config.mk
+new file mode 100644
+index 0000000..1af85da
+--- /dev/null
++++ b/board/qt2410/config.mk
+@@ -0,0 +1,25 @@
++#
++# (C) Copyright 2002
++# Gary Jennejohn, DENX Software Engineering, <gj at denx.de>
++# David Mueller, ELSOFT AG, <d.mueller at elsoft.ch>
++#
++# SAMSUNG SMDK2410 board with S3C2410X (ARM920T) cpu
++#
++# see http://www.samsung.com/ for more information on SAMSUNG
++#
++
++#
++# SMDK2410 has 1 bank of 64 MB DRAM
++#
++# 3000'0000 to 3400'0000
++#
++# Linux-Kernel is expected to be at 3000'8000, entry 3000'8000
++# optionally with a ramdisk at 3080'0000
++#
++# we load ourself to 33F8'0000
++#
++# download area is 3300'0000
++#
++
++
++TEXT_BASE = 0x33F80000
+diff --git a/board/qt2410/flash.c b/board/qt2410/flash.c
+new file mode 100644
+index 0000000..993946b
+--- /dev/null
++++ b/board/qt2410/flash.c
+@@ -0,0 +1,433 @@
++/*
++ * (C) Copyright 2002
++ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
++ * Alex Zuepke <azu at sysgo.de>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#include <common.h>
++
++ulong myflush (void);
++
++
++#define FLASH_BANK_SIZE PHYS_FLASH_SIZE
++#define MAIN_SECT_SIZE 0x10000 /* 64 KB */
++
++flash_info_t flash_info[CFG_MAX_FLASH_BANKS];
++
++
++#define CMD_READ_ARRAY 0x000000F0
++#define CMD_UNLOCK1 0x000000AA
++#define CMD_UNLOCK2 0x00000055
++#define CMD_ERASE_SETUP 0x00000080
++#define CMD_ERASE_CONFIRM 0x00000030
++#define CMD_PROGRAM 0x000000A0
++#define CMD_UNLOCK_BYPASS 0x00000020
++
++#define MEM_FLASH_ADDR1 (*(volatile u16 *)(CFG_FLASH_BASE + (0x00000555 << 1)))
++#define MEM_FLASH_ADDR2 (*(volatile u16 *)(CFG_FLASH_BASE + (0x000002AA << 1)))
++
++#define BIT_ERASE_DONE 0x00000080
++#define BIT_RDY_MASK 0x00000080
++#define BIT_PROGRAM_ERROR 0x00000020
++#define BIT_TIMEOUT 0x80000000 /* our flag */
++
++#define READY 1
++#define ERR 2
++#define TMO 4
++
++/*-----------------------------------------------------------------------
++ */
++
++ulong flash_init (void)
++{
++ int i, j;
++ ulong size = 0;
++
++ for (i = 0; i < CFG_MAX_FLASH_BANKS; i++) {
++ ulong flashbase = 0;
++
++ flash_info[i].flash_id =
++#if defined(CONFIG_AMD_LV400)
++ (AMD_MANUFACT & FLASH_VENDMASK) |
++ (AMD_ID_LV400B & FLASH_TYPEMASK);
++#elif defined(CONFIG_AMD_LV800)
++ (AMD_MANUFACT & FLASH_VENDMASK) |
++ (AMD_ID_LV800B & FLASH_TYPEMASK);
++#else
++#error "Unknown flash configured"
++#endif
++ flash_info[i].size = FLASH_BANK_SIZE;
++ flash_info[i].sector_count = CFG_MAX_FLASH_SECT;
++ memset (flash_info[i].protect, 0, CFG_MAX_FLASH_SECT);
++ if (i == 0)
++ flashbase = PHYS_FLASH_1;
++ else
++ panic ("configured too many flash banks!\n");
++ for (j = 0; j < flash_info[i].sector_count; j++) {
++ if (j <= 3) {
++ /* 1st one is 16 KB */
++ if (j == 0) {
++ flash_info[i].start[j] =
++ flashbase + 0;
++ }
++
++ /* 2nd and 3rd are both 8 KB */
++ if ((j == 1) || (j == 2)) {
++ flash_info[i].start[j] =
++ flashbase + 0x4000 + (j -
++ 1) *
++ 0x2000;
++ }
++
++ /* 4th 32 KB */
++ if (j == 3) {
++ flash_info[i].start[j] =
++ flashbase + 0x8000;
++ }
++ } else {
++ flash_info[i].start[j] =
++ flashbase + (j - 3) * MAIN_SECT_SIZE;
++ }
++ }
++ size += flash_info[i].size;
++ }
++
++ flash_protect (FLAG_PROTECT_SET,
++ CFG_FLASH_BASE,
++ CFG_FLASH_BASE + monitor_flash_len - 1,
++ &flash_info[0]);
++
++ flash_protect (FLAG_PROTECT_SET,
++ CFG_ENV_ADDR,
++ CFG_ENV_ADDR + CFG_ENV_SIZE - 1, &flash_info[0]);
++
++ return size;
++}
++
++/*-----------------------------------------------------------------------
++ */
++void flash_print_info (flash_info_t * info)
++{
++ int i;
++
++ switch (info->flash_id & FLASH_VENDMASK) {
++ case (AMD_MANUFACT & FLASH_VENDMASK):
++ printf ("AMD: ");
++ break;
++ default:
++ printf ("Unknown Vendor ");
++ break;
++ }
++
++ switch (info->flash_id & FLASH_TYPEMASK) {
++ case (AMD_ID_LV400B & FLASH_TYPEMASK):
++ printf ("1x Amd29LV400BB (4Mbit)\n");
++ break;
++ case (AMD_ID_LV800B & FLASH_TYPEMASK):
++ printf ("1x Amd29LV800BB (8Mbit)\n");
++ break;
++ default:
++ printf ("Unknown Chip Type\n");
++ goto Done;
++ break;
++ }
++
++ printf (" Size: %ld MB in %d Sectors\n",
++ info->size >> 20, info->sector_count);
++
++ printf (" Sector Start Addresses:");
++ for (i = 0; i < info->sector_count; i++) {
++ if ((i % 5) == 0) {
++ printf ("\n ");
++ }
++ printf (" %08lX%s", info->start[i],
++ info->protect[i] ? " (RO)" : " ");
++ }
++ printf ("\n");
++
++ Done:;
++}
++
++/*-----------------------------------------------------------------------
++ */
++
++int flash_erase (flash_info_t * info, int s_first, int s_last)
++{
++ ushort result;
++ int iflag, cflag, prot, sect;
++ int rc = ERR_OK;
++ int chip;
++
++ /* first look for protection bits */
++
++ if (info->flash_id == FLASH_UNKNOWN)
++ return ERR_UNKNOWN_FLASH_TYPE;
++
++ if ((s_first < 0) || (s_first > s_last)) {
++ return ERR_INVAL;
++ }
++
++ if ((info->flash_id & FLASH_VENDMASK) !=
++ (AMD_MANUFACT & FLASH_VENDMASK)) {
++ return ERR_UNKNOWN_FLASH_VENDOR;
++ }
++
++ prot = 0;
++ for (sect = s_first; sect <= s_last; ++sect) {
++ if (info->protect[sect]) {
++ prot++;
++ }
++ }
++ if (prot)
++ return ERR_PROTECTED;
++
++ /*
++ * Disable interrupts which might cause a timeout
++ * here. Remember that our exception vectors are
++ * at address 0 in the flash, and we don't want a
++ * (ticker) exception to happen while the flash
++ * chip is in programming mode.
++ */
++ cflag = icache_status ();
++ icache_disable ();
++ iflag = disable_interrupts ();
++
++ /* Start erase on unprotected sectors */
++ for (sect = s_first; sect <= s_last && !ctrlc (); sect++) {
++ printf ("Erasing sector %2d ... ", sect);
++
++ /* arm simple, non interrupt dependent timer */
++ reset_timer_masked ();
++
++ if (info->protect[sect] == 0) { /* not protected */
++ vu_short *addr = (vu_short *) (info->start[sect]);
++
++ MEM_FLASH_ADDR1 = CMD_UNLOCK1;
++ MEM_FLASH_ADDR2 = CMD_UNLOCK2;
++ MEM_FLASH_ADDR1 = CMD_ERASE_SETUP;
++
++ MEM_FLASH_ADDR1 = CMD_UNLOCK1;
++ MEM_FLASH_ADDR2 = CMD_UNLOCK2;
++ *addr = CMD_ERASE_CONFIRM;
++
++ /* wait until flash is ready */
++ chip = 0;
++
++ do {
++ result = *addr;
++
++ /* check timeout */
++ if (get_timer_masked () >
++ CFG_FLASH_ERASE_TOUT) {
++ MEM_FLASH_ADDR1 = CMD_READ_ARRAY;
++ chip = TMO;
++ break;
++ }
++
++ if (!chip
++ && (result & 0xFFFF) & BIT_ERASE_DONE)
++ chip = READY;
++
++ if (!chip
++ && (result & 0xFFFF) & BIT_PROGRAM_ERROR)
++ chip = ERR;
++
++ } while (!chip);
++
++ MEM_FLASH_ADDR1 = CMD_READ_ARRAY;
++
++ if (chip == ERR) {
++ rc = ERR_PROG_ERROR;
++ goto outahere;
++ }
++ if (chip == TMO) {
++ rc = ERR_TIMOUT;
++ goto outahere;
++ }
++
++ printf ("ok.\n");
++ } else { /* it was protected */
++
++ printf ("protected!\n");
++ }
++ }
++
++ if (ctrlc ())
++ printf ("User Interrupt!\n");
++
++ outahere:
++ /* allow flash to settle - wait 10 ms */
++ udelay_masked (10000);
++
++ if (iflag)
++ enable_interrupts ();
++
++ if (cflag)
++ icache_enable ();
++
++ return rc;
++}
++
++/*-----------------------------------------------------------------------
++ * Copy memory to flash
++ */
++
++volatile static int write_hword (flash_info_t * info, ulong dest, ushort data)
++{
++ vu_short *addr = (vu_short *) dest;
++ ushort result;
++ int rc = ERR_OK;
++ int cflag, iflag;
++ int chip;
++
++ /*
++ * Check if Flash is (sufficiently) erased
++ */
++ result = *addr;
++ if ((result & data) != data)
++ return ERR_NOT_ERASED;
++
++
++ /*
++ * Disable interrupts which might cause a timeout
++ * here. Remember that our exception vectors are
++ * at address 0 in the flash, and we don't want a
++ * (ticker) exception to happen while the flash
++ * chip is in programming mode.
++ */
++ cflag = icache_status ();
++ icache_disable ();
++ iflag = disable_interrupts ();
++
++ MEM_FLASH_ADDR1 = CMD_UNLOCK1;
++ MEM_FLASH_ADDR2 = CMD_UNLOCK2;
++ MEM_FLASH_ADDR1 = CMD_UNLOCK_BYPASS;
++ *addr = CMD_PROGRAM;
++ *addr = data;
++
++ /* arm simple, non interrupt dependent timer */
++ reset_timer_masked ();
++
++ /* wait until flash is ready */
++ chip = 0;
++ do {
++ result = *addr;
++
++ /* check timeout */
++ if (get_timer_masked () > CFG_FLASH_ERASE_TOUT) {
++ chip = ERR | TMO;
++ break;
++ }
++ if (!chip && ((result & 0x80) == (data & 0x80)))
++ chip = READY;
++
++ if (!chip && ((result & 0xFFFF) & BIT_PROGRAM_ERROR)) {
++ result = *addr;
++
++ if ((result & 0x80) == (data & 0x80))
++ chip = READY;
++ else
++ chip = ERR;
++ }
++
++ } while (!chip);
++
++ *addr = CMD_READ_ARRAY;
++
++ if (chip == ERR || *addr != data)
++ rc = ERR_PROG_ERROR;
++
++ if (iflag)
++ enable_interrupts ();
++
++ if (cflag)
++ icache_enable ();
++
++ return rc;
++}
++
++/*-----------------------------------------------------------------------
++ * Copy memory to flash.
++ */
++
++int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt)
++{
++ ulong cp, wp;
++ int l;
++ int i, rc;
++ ushort data;
++
++ wp = (addr & ~1); /* get lower word aligned address */
++
++ /*
++ * handle unaligned start bytes
++ */
++ if ((l = addr - wp) != 0) {
++ data = 0;
++ for (i = 0, cp = wp; i < l; ++i, ++cp) {
++ data = (data >> 8) | (*(uchar *) cp << 8);
++ }
++ for (; i < 2 && cnt > 0; ++i) {
++ data = (data >> 8) | (*src++ << 8);
++ --cnt;
++ ++cp;
++ }
++ for (; cnt == 0 && i < 2; ++i, ++cp) {
++ data = (data >> 8) | (*(uchar *) cp << 8);
++ }
++
++ if ((rc = write_hword (info, wp, data)) != 0) {
++ return (rc);
++ }
++ wp += 2;
++ }
++
++ /*
++ * handle word aligned part
++ */
++ while (cnt >= 2) {
++ data = *((vu_short *) src);
++ if ((rc = write_hword (info, wp, data)) != 0) {
++ return (rc);
++ }
++ src += 2;
++ wp += 2;
++ cnt -= 2;
++ }
++
++ if (cnt == 0) {
++ return ERR_OK;
++ }
++
++ /*
++ * handle unaligned tail bytes
++ */
++ data = 0;
++ for (i = 0, cp = wp; i < 2 && cnt > 0; ++i, ++cp) {
++ data = (data >> 8) | (*src++ << 8);
++ --cnt;
++ }
++ for (; i < 2; ++i, ++cp) {
++ data = (data >> 8) | (*(uchar *) cp << 8);
++ }
++
++ return write_hword (info, wp, data);
++}
+diff --git a/board/qt2410/lowlevel_init.S b/board/qt2410/lowlevel_init.S
+new file mode 100644
+index 0000000..310f2a0
+--- /dev/null
++++ b/board/qt2410/lowlevel_init.S
+@@ -0,0 +1,167 @@
++/*
++ * Memory Setup stuff - taken from blob memsetup.S
++ *
++ * Copyright (C) 1999 2000 2001 Erik Mouw (J.A.K.Mouw at its.tudelft.nl) and
++ * Jan-Derk Bakker (J.D.Bakker at its.tudelft.nl)
++ *
++ * Modified for the Samsung SMDK2410 by
++ * (C) Copyright 2002
++ * David Mueller, ELSOFT AG, <d.mueller at elsoft.ch>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++
++#include <config.h>
++#include <version.h>
++
++
++/* some parameters for the board */
++
++/*
++ *
++ * Taken from linux/arch/arm/boot/compressed/head-s3c2410.S
++ *
++ * Copyright (C) 2002 Samsung Electronics SW.LEE <hitchcar at sec.samsung.com>
++ *
++ */
++
++#define BWSCON 0x48000000
++
++/* BWSCON */
++#define DW8 (0x0)
++#define DW16 (0x1)
++#define DW32 (0x2)
++#define WAIT (0x1<<2)
++#define UBLB (0x1<<3)
++
++#define B1_BWSCON (DW32)
++#define B2_BWSCON (DW16)
++#define B3_BWSCON (DW16 + WAIT + UBLB)
++#define B4_BWSCON (DW16)
++#define B5_BWSCON (DW16)
++#define B6_BWSCON (DW32)
++#define B7_BWSCON (DW32)
++
++/* BANK0CON */
++#define B0_Tacs 0x0 /* 0clk */
++#define B0_Tcos 0x0 /* 0clk */
++#define B0_Tacc 0x7 /* 14clk */
++#define B0_Tcoh 0x0 /* 0clk */
++#define B0_Tah 0x0 /* 0clk */
++#define B0_Tacp 0x0
++#define B0_PMC 0x0 /* normal */
++
++/* BANK1CON */
++#define B1_Tacs 0x0 /* 0clk */
++#define B1_Tcos 0x0 /* 0clk */
++#define B1_Tacc 0x7 /* 14clk */
++#define B1_Tcoh 0x0 /* 0clk */
++#define B1_Tah 0x0 /* 0clk */
++#define B1_Tacp 0x0
++#define B1_PMC 0x0
++
++#define B2_Tacs 0x0
++#define B2_Tcos 0x0
++#define B2_Tacc 0x7
++#define B2_Tcoh 0x0
++#define B2_Tah 0x0
++#define B2_Tacp 0x0
++#define B2_PMC 0x0
++
++#define B3_Tacs 0x0 /* 0clk */
++#define B3_Tcos 0x3 /* 4clk */
++#define B3_Tacc 0x7 /* 14clk */
++#define B3_Tcoh 0x1 /* 1clk */
++#define B3_Tah 0x0 /* 0clk */
++#define B3_Tacp 0x3 /* 6clk */
++#define B3_PMC 0x0 /* normal */
++
++#define B4_Tacs 0x0 /* 0clk */
++#define B4_Tcos 0x0 /* 0clk */
++#define B4_Tacc 0x7 /* 14clk */
++#define B4_Tcoh 0x0 /* 0clk */
++#define B4_Tah 0x0 /* 0clk */
++#define B4_Tacp 0x0
++#define B4_PMC 0x0 /* normal */
++
++#define B5_Tacs 0x0 /* 0clk */
++#define B5_Tcos 0x0 /* 0clk */
++#define B5_Tacc 0x7 /* 14clk */
++#define B5_Tcoh 0x0 /* 0clk */
++#define B5_Tah 0x0 /* 0clk */
++#define B5_Tacp 0x0
++#define B5_PMC 0x0 /* normal */
++
++#define B6_MT 0x3 /* SDRAM */
++#define B6_Trcd 0x1
++#define B6_SCAN 0x1 /* 9bit */
++
++#define B7_MT 0x3 /* SDRAM */
++#define B7_Trcd 0x1 /* 3clk */
++#define B7_SCAN 0x1 /* 9bit */
++
++/* REFRESH parameter */
++#define REFEN 0x1 /* Refresh enable */
++#define TREFMD 0x0 /* CBR(CAS before RAS)/Auto refresh */
++#define Trp 0x0 /* 2clk */
++#define Trc 0x3 /* 7clk */
++#define Tchr 0x2 /* 3clk */
++#define REFCNT 1113 /* period=15.6us, HCLK=60Mhz, (2048+1-15.6*60) */
++/**************************************/
++
++_TEXT_BASE:
++ .word TEXT_BASE
++
++.globl lowlevel_init
++lowlevel_init:
++ /* memory control configuration */
++ /* make r0 relative the current location so that it */
++ /* reads SMRDATA out of FLASH rather than memory ! */
++ ldr r0, =SMRDATA
++ ldr r1, _TEXT_BASE
++ sub r0, r0, r1
++ ldr r1, =BWSCON /* Bus Width Status Controller */
++ add r2, r0, #13*4
++0:
++ ldr r3, [r0], #4
++ str r3, [r1], #4
++ cmp r2, r0
++ bne 0b
++
++ /* everything is fine now */
++ mov pc, lr
++
++ .ltorg
++/* the literal pools origin */
++
++SMRDATA:
++ .word (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28))
++ .word ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))
++ .word ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC))
++ .word ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC))
++ .word ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC))
++ .word ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC))
++ .word ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC))
++ .word ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN))
++ .word ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN))
++ .word ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT)
++ .word 0x32
++ .word 0x30
++ .word 0x30
+diff --git a/board/qt2410/qt2410.c b/board/qt2410/qt2410.c
+new file mode 100644
+index 0000000..133b748
+--- /dev/null
++++ b/board/qt2410/qt2410.c
+@@ -0,0 +1,130 @@
++/*
++ * (C) Copyright 2002
++ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
++ * Marius Groeger <mgroeger at sysgo.de>
++ *
++ * (C) Copyright 2002
++ * David Mueller, ELSOFT AG, <d.mueller at elsoft.ch>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#include <common.h>
++#include <s3c2410.h>
++
++DECLARE_GLOBAL_DATA_PTR;
++
++#define FCLK_SPEED 1
++
++#if FCLK_SPEED==0 /* Fout = 203MHz, Fin = 12MHz for Audio */
++#define M_MDIV 0xC3
++#define M_PDIV 0x4
++#define M_SDIV 0x1
++#elif FCLK_SPEED==1 /* Fout = 202.8MHz */
++#if 0
++#define M_MDIV 0xA1
++#define M_PDIV 0x3
++#define M_SDIV 0x1
++#else
++#define M_MDIV 0x5c
++#define M_PDIV 0x4
++#define M_SDIV 0x0
++#endif
++#endif
++
++#define USB_CLOCK 1
++
++#if USB_CLOCK==0
++#define U_M_MDIV 0xA1
++#define U_M_PDIV 0x3
++#define U_M_SDIV 0x1
++#elif USB_CLOCK==1
++#define U_M_MDIV 0x48
++#define U_M_PDIV 0x3
++#define U_M_SDIV 0x2
++#endif
++
++static inline void delay (unsigned long loops)
++{
++ __asm__ volatile ("1:\n"
++ "subs %0, %1, #1\n"
++ "bne 1b":"=r" (loops):"0" (loops));
++}
++
++/*
++ * Miscellaneous platform dependent initialisations
++ */
++
++int board_init (void)
++{
++ S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();
++ S3C24X0_GPIO * const gpio = S3C24X0_GetBase_GPIO();
++
++ /* to reduce PLL lock time, adjust the LOCKTIME register */
++ clk_power->LOCKTIME = 0xFFFFFF;
++
++ /* configure MPLL */
++ clk_power->MPLLCON = ((M_MDIV << 12) + (M_PDIV << 4) + M_SDIV);
++
++ /* some delay between MPLL and UPLL */
++ delay (4000);
++
++ /* configure UPLL */
++ clk_power->UPLLCON = ((U_M_MDIV << 12) + (U_M_PDIV << 4) + U_M_SDIV);
++
++ /* some delay between MPLL and UPLL */
++ delay (8000);
++
++ /* set up the I/O ports */
++ gpio->GPACON = 0x007FFFFF;
++ gpio->GPBCON = 0x00044555;
++ gpio->GPBUP = 0x000007FF;
++ gpio->GPCCON = 0xAAAAAAAA;
++ gpio->GPCUP = 0x0000FFFF;
++ gpio->GPDCON = 0xAAAAAAAA;
++ gpio->GPDUP = 0x0000FFFF;
++ gpio->GPECON = 0xAAAAAAAA;
++ gpio->GPEUP = 0x0000FFFF;
++ gpio->GPFCON = 0x000055AA;
++ gpio->GPFUP = 0x000000FF;
++ gpio->GPGCON = 0xFF95FFBA;
++ //gpio->GPGUP = 0x0000FFFF;
++ gpio->GPGUP = 0x0000AFEF;
++ gpio->GPHCON = 0x0028FAAA;
++ gpio->GPHUP = 0x000007FF;
++
++ /* arch number of SMDK2410-Board */
++ gd->bd->bi_arch_number = MACH_TYPE_QT2410;
++
++ /* adress of boot parameters */
++ gd->bd->bi_boot_params = 0x30000100;
++
++ icache_enable();
++ dcache_enable();
++
++ return 0;
++}
++
++int dram_init (void)
++{
++ gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
++ gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
++
++ return 0;
++}
+diff --git a/board/qt2410/u-boot.lds b/board/qt2410/u-boot.lds
+new file mode 100644
+index 0000000..f4fbf96
+--- /dev/null
++++ b/board/qt2410/u-boot.lds
+@@ -0,0 +1,57 @@
++/*
++ * (C) Copyright 2002
++ * Gary Jennejohn, DENX Software Engineering, <gj at denx.de>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
++/*OUTPUT_FORMAT("elf32-arm", "elf32-arm", "elf32-arm")*/
++OUTPUT_ARCH(arm)
++ENTRY(_start)
++SECTIONS
++{
++ . = 0x00000000;
++
++ . = ALIGN(4);
++ .text :
++ {
++ cpu/arm920t/start.o (.text)
++ *(.text)
++ }
++
++ . = ALIGN(4);
++ .rodata : { *(.rodata) }
++
++ . = ALIGN(4);
++ .data : { *(.data) }
++
++ . = ALIGN(4);
++ .got : { *(.got) }
++
++ . = .;
++ __u_boot_cmd_start = .;
++ .u_boot_cmd : { *(.u_boot_cmd) }
++ __u_boot_cmd_end = .;
++
++ . = ALIGN(4);
++ __bss_start = .;
++ .bss : { *(.bss) }
++ _end = .;
++}
+diff --git a/cpu/arm920t/s3c24x0/Makefile b/cpu/arm920t/s3c24x0/Makefile
+index af9e4ef..10f33f2 100644
+--- a/cpu/arm920t/s3c24x0/Makefile
++++ b/cpu/arm920t/s3c24x0/Makefile
+@@ -26,7 +26,7 @@ include $(TOPDIR)/config.mk
+ LIB = lib$(SOC).a
+
+ OBJS = i2c.o interrupts.o serial.o speed.o \
+- usb_ohci.o
++ usb_ohci.o mmc.o nand_read.o nand.o
+
+ all: .depend $(LIB)
+
+diff --git a/cpu/arm920t/s3c24x0/mmc.c b/cpu/arm920t/s3c24x0/mmc.c
+new file mode 100644
+index 0000000..b7057e2
+--- /dev/null
++++ b/cpu/arm920t/s3c24x0/mmc.c
+@@ -0,0 +1,568 @@
++/*
++ * u-boot S3C2410 MMC/SD card driver
++ * (C) Copyright 2006 by Harald Welte <laforge at gnumonks.org>
++ *
++ * based on u-boot pxa MMC driver and linux/drivers/mmc/s3c2410mci.c
++ * (C) 2005-2005 Thomas Kleffel
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#include <config.h>
++#include <common.h>
++#include <mmc.h>
++#include <asm/errno.h>
++#include <asm/io.h>
++#include <s3c2410.h>
++#include <part.h>
++
++#ifdef CONFIG_MMC
++
++#define CONFIG_MMC_WIDE
++
++//#define MMC_DEBUG
++
++#ifdef MMC_DEBUG
++#ifdef debug
++#undef debug
++#endif
++#define debug printf
++#endif
++
++static S3C2410_SDI *sdi;
++
++extern int
++fat_register_device(block_dev_desc_t *dev_desc, int part_no);
++
++static block_dev_desc_t mmc_dev;
++
++block_dev_desc_t * mmc_get_dev(int dev)
++{
++ return ((block_dev_desc_t *)&mmc_dev);
++}
++
++/*
++ * FIXME needs to read cid and csd info to determine block size
++ * and other parameters
++ */
++static uchar mmc_buf[MMC_BLOCK_SIZE];
++static mmc_csd_t mmc_csd;
++static int mmc_ready = 0;
++static int wide = 0;
++
++
++#define CMD_F_RESP 0x01
++#define CMD_F_RESP_LONG 0x02
++
++static u_int32_t *
++/****************************************************/
++mmc_cmd(ushort cmd, ulong arg, ushort flags)
++/****************************************************/
++{
++ static u_int32_t resp[5];
++ ulong status;
++ int i;
++
++ u_int32_t ccon, csta;
++ u_int32_t csta_rdy_bit = S3C2410_SDICMDSTAT_CMDSENT;
++
++ memset(resp, 0, sizeof(resp));
++
++ debug("mmc_cmd CMD%d arg=0x%08x flags=%x\n", cmd, arg, flags);
++
++ sdi->SDICSTA = 0xffffffff;
++ sdi->SDIDSTA = 0xffffffff;
++ sdi->SDIFSTA = 0xffffffff;
++
++ sdi->SDICARG = arg;
++
++ ccon = cmd & S3C2410_SDICMDCON_INDEX;
++ ccon |= S3C2410_SDICMDCON_SENDERHOST|S3C2410_SDICMDCON_CMDSTART;
++
++ if (flags & CMD_F_RESP) {
++ ccon |= S3C2410_SDICMDCON_WAITRSP;
++ csta_rdy_bit = S3C2410_SDICMDSTAT_RSPFIN; /* 1 << 9 */
++ }
++
++ if (flags & CMD_F_RESP_LONG)
++ ccon |= S3C2410_SDICMDCON_LONGRSP;
++
++ sdi->SDICCON = ccon;
++
++ while (1) {
++ csta = sdi->SDICSTA;
++ if (csta & csta_rdy_bit)
++ break;
++ if (csta & S3C2410_SDICMDSTAT_CMDTIMEOUT) {
++ printf("===============> MMC CMD Timeout\n");
++ sdi->SDICSTA |= S3C2410_SDICMDSTAT_CMDTIMEOUT;
++ break;
++ }
++ }
++
++ debug("final MMC CMD status 0x%x\n", csta);
++
++ sdi->SDICSTA |= csta_rdy_bit;
++
++ if (flags & CMD_F_RESP) {
++ resp[0] = sdi->SDIRSP0;
++ resp[1] = sdi->SDIRSP1;
++ resp[2] = sdi->SDIRSP2;
++ resp[3] = sdi->SDIRSP3;
++ }
++
++#if 0
++ for (i=0; i<4; i ++) {
++ debug("MMC resp[%d] = 0x%08x\n", i, resp[i]);
++ }
++#endif
++
++ return resp;
++}
++
++#define FIFO_FILL(host) ((host->SDIFSTA & S3C2410_SDIFSTA_COUNTMASK) >> 2)
++
++static int
++/****************************************************/
++mmc_block_read(uchar *dst, ulong src, ulong len)
++/****************************************************/
++{
++ u_int32_t dcon, fifo;
++ u_int32_t *dst_u32 = (u_int32_t *)dst;
++ u_int32_t *resp;
++
++ if (len == 0) {
++ return 0;
++ }
++
++ debug("mmc_block_rd dst %lx src %lx len %d\n", (ulong)dst, src, len);
++
++ /* set block len */
++ resp = mmc_cmd(MMC_CMD_SET_BLOCKLEN, len, CMD_F_RESP);
++ sdi->SDIBSIZE = len;
++
++ //sdi->SDIPRE = 0xff;
++
++ /* setup data */
++ dcon = (len >> 9) & S3C2410_SDIDCON_BLKNUM_MASK;
++ dcon |= S3C2410_SDIDCON_BLOCKMODE;
++ dcon |= S3C2410_SDIDCON_RXAFTERCMD|S3C2410_SDIDCON_XFER_RXSTART;
++ if (wide)
++ dcon |= S3C2410_SDIDCON_WIDEBUS;
++ sdi->SDIDCON = dcon;
++
++ /* send read command */
++ resp = mmc_cmd(MMC_CMD_READ_BLOCK, src, CMD_F_RESP);
++
++ while (len > 0) {
++ u_int32_t sdidsta = sdi->SDIDSTA;
++ fifo = FIFO_FILL(sdi);
++ if (sdidsta & (S3C2410_SDIDSTA_FIFOFAIL|
++ S3C2410_SDIDSTA_CRCFAIL|
++ S3C2410_SDIDSTA_RXCRCFAIL|
++ S3C2410_SDIDSTA_DATATIMEOUT)) {
++ printf("mmc_block_read: err SDIDSTA=0x%08x\n", sdidsta);
++ return -EIO;
++ }
++
++ while (fifo--) {
++ //debug("dst_u32 = 0x%08x\n", dst_u32);
++ *(dst_u32++) = sdi->SDIDAT;
++ if (len >= 4)
++ len -= 4;
++ else {
++ len = 0;
++ break;
++ }
++ }
++ }
++
++#if 1
++ debug("waiting for SDIDSTA (currently 0x%08x\n", sdi->SDIDSTA);
++ while (!(sdi->SDIDSTA & (1 << 4))) {}
++ debug("done waiting for SDIDSTA (currently 0x%08x\n", sdi->SDIDSTA);
++#endif
++
++ sdi->SDIDCON = 0;
++
++#if 0
++ if (!(sdi->SDIDSTA & S3C2410_SDIDSTA_XFERFINISH))
++ printf("mmc_block_read; transfer not finished!\n");
++#endif
++
++ return 0;
++}
++
++static int
++/****************************************************/
++mmc_block_write(ulong dst, uchar *src, int len)
++/****************************************************/
++{
++#if 0
++ uchar *resp;
++ ushort argh, argl;
++ ulong status;
++
++ if (len == 0) {
++ return 0;
++ }
++
++ debug("mmc_block_wr dst %lx src %lx len %d\n", dst, (ulong)src, len);
++
++ argh = len >> 16;
++ argl = len & 0xffff;
++
++ /* set block len */
++ resp = mmc_cmd(MMC_CMD_SET_BLOCKLEN, argh, argl, CMD_F_RESP);
++
++ /* send write command */
++ argh = dst >> 16;
++ argl = dst & 0xffff;
++ MMC_STRPCL = MMC_STRPCL_STOP_CLK;
++ MMC_NOB = 1;
++ MMC_BLKLEN = len;
++ resp = mmc_cmd(MMC_CMD_WRITE_BLOCK, dst, CMD_F_RESP,
++ MMC_CMDAT_R1|MMC_CMDAT_WRITE|MMC_CMDAT_BLOCK|MMC_CMDAT_DATA_EN);
++
++ MMC_I_MASK = ~MMC_I_MASK_TXFIFO_WR_REQ;
++ while (len) {
++ if (MMC_I_REG & MMC_I_REG_TXFIFO_WR_REQ) {
++ int i, bytes = min(32,len);
++
++ for (i=0; i<bytes; i++) {
++ MMC_TXFIFO = *src++;
++ }
++ if (bytes < 32) {
++ MMC_PRTBUF = MMC_PRTBUF_BUF_PART_FULL;
++ }
++ len -= bytes;
++ }
++ status = MMC_STAT;
++ if (status & MMC_STAT_ERRORS) {
++ printf("MMC_STAT error %lx\n", status);
++ return -1;
++ }
++ }
++ MMC_I_MASK = ~MMC_I_MASK_DATA_TRAN_DONE;
++ while (!(MMC_I_REG & MMC_I_REG_DATA_TRAN_DONE));
++ MMC_I_MASK = ~MMC_I_MASK_PRG_DONE;
++ while (!(MMC_I_REG & MMC_I_REG_PRG_DONE));
++ status = MMC_STAT;
++ if (status & MMC_STAT_ERRORS) {
++ printf("MMC_STAT error %lx\n", status);
++ return -1;
++ }
++#endif
++ return 0;
++}
++
++
++int
++/****************************************************/
++mmc_read(ulong src, uchar *dst, int size)
++/****************************************************/
++{
++ ulong end, part_start, part_end, part_len, aligned_start, aligned_end;
++ ulong mmc_block_size, mmc_block_address;
++
++ if (size == 0) {
++ return 0;
++ }
++
++ if (!mmc_ready) {
++ printf("Please initialize the MMC first\n");
++ return -1;
++ }
++
++ mmc_block_size = MMC_BLOCK_SIZE;
++ mmc_block_address = ~(mmc_block_size - 1);
++
++ src -= CFG_MMC_BASE;
++ end = src + size;
++ part_start = ~mmc_block_address & src;
++ part_end = ~mmc_block_address & end;
++ aligned_start = mmc_block_address & src;
++ aligned_end = mmc_block_address & end;
++
++ /* all block aligned accesses */
++ debug("src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
++ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
++ if (part_start) {
++ part_len = mmc_block_size - part_start;
++ debug("ps src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
++ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
++ if ((mmc_block_read(mmc_buf, aligned_start, mmc_block_size)) < 0) {
++ return -1;
++ }
++ memcpy(dst, mmc_buf+part_start, part_len);
++ dst += part_len;
++ src += part_len;
++ }
++ debug("src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
++ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
++ for (; src < aligned_end; src += mmc_block_size, dst += mmc_block_size) {
++ debug("al src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
++ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
++ if ((mmc_block_read((uchar *)(dst), src, mmc_block_size)) < 0) {
++ return -1;
++ }
++ }
++ debug("src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
++ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
++ if (part_end && src < end) {
++ debug("pe src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
++ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
++ if ((mmc_block_read(mmc_buf, aligned_end, mmc_block_size)) < 0) {
++ return -1;
++ }
++ memcpy(dst, mmc_buf, part_end);
++ }
++ return 0;
++}
++
++int
++/****************************************************/
++mmc_write(uchar *src, ulong dst, int size)
++/****************************************************/
++{
++ ulong end, part_start, part_end, part_len, aligned_start, aligned_end;
++ ulong mmc_block_size, mmc_block_address;
++
++ if (size == 0) {
++ return 0;
++ }
++
++ if (!mmc_ready) {
++ printf("Please initialize the MMC first\n");
++ return -1;
++ }
++
++ mmc_block_size = MMC_BLOCK_SIZE;
++ mmc_block_address = ~(mmc_block_size - 1);
++
++ dst -= CFG_MMC_BASE;
++ end = dst + size;
++ part_start = ~mmc_block_address & dst;
++ part_end = ~mmc_block_address & end;
++ aligned_start = mmc_block_address & dst;
++ aligned_end = mmc_block_address & end;
++
++ /* all block aligned accesses */
++ debug("src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
++ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
++ if (part_start) {
++ part_len = mmc_block_size - part_start;
++ debug("ps src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
++ (ulong)src, dst, end, part_start, part_end, aligned_start, aligned_end);
++ if ((mmc_block_read(mmc_buf, aligned_start, mmc_block_size)) < 0) {
++ return -1;
++ }
++ memcpy(mmc_buf+part_start, src, part_len);
++ if ((mmc_block_write(aligned_start, mmc_buf, mmc_block_size)) < 0) {
++ return -1;
++ }
++ dst += part_len;
++ src += part_len;
++ }
++ debug("src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
++ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
++ for (; dst < aligned_end; src += mmc_block_size, dst += mmc_block_size) {
++ debug("al src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
++ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
++ if ((mmc_block_write(dst, (uchar *)src, mmc_block_size)) < 0) {
++ return -1;
++ }
++ }
++ debug("src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
++ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
++ if (part_end && dst < end) {
++ debug("pe src %lx dst %lx end %lx pstart %lx pend %lx astart %lx aend %lx\n",
++ src, (ulong)dst, end, part_start, part_end, aligned_start, aligned_end);
++ if ((mmc_block_read(mmc_buf, aligned_end, mmc_block_size)) < 0) {
++ return -1;
++ }
++ memcpy(mmc_buf, src, part_end);
++ if ((mmc_block_write(aligned_end, mmc_buf, mmc_block_size)) < 0) {
++ return -1;
++ }
++ }
++ return 0;
++}
++
++ulong
++/****************************************************/
++mmc_bread(int dev_num, ulong blknr, ulong blkcnt, ulong *dst)
++/****************************************************/
++{
++ int mmc_block_size = MMC_BLOCK_SIZE;
++ ulong src = blknr * mmc_block_size + CFG_MMC_BASE;
++
++ mmc_read(src, (uchar *)dst, blkcnt*mmc_block_size);
++ return blkcnt;
++}
++
++static u_int16_t rca = MMC_DEFAULT_RCA;
++
++static u_int32_t mmc_size(const struct mmc_csd *csd)
++{
++ u_int32_t block_len, mult, blocknr;
++
++ block_len = csd->read_bl_len << 12;
++ mult = csd->c_size_mult1 << 8;
++ blocknr = (csd->c_size+1) * mult;
++
++ return blocknr * block_len;
++}
++
++int
++/****************************************************/
++mmc_init(int verbose)
++/****************************************************/
++{
++ int retries, rc = -ENODEV;
++ int is_sd = 0;
++ u_int32_t *resp;
++ S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();
++
++ sdi = S3C2410_GetBase_SDI();
++
++ debug("mmc_init(PCLK=%u)\n", get_PCLK());
++
++ clk_power->CLKCON |= (1 << 9);
++
++ /* S3C2410 has some bug that prevents reliable operation at higher speed */
++ //sdi->SDIPRE = 0x3e; /* SDCLK = PCLK/2 / (SDIPRE+1) = 396kHz */
++ sdi->SDIPRE = 0x02; /* SDCLK = PCLK/2 / (SDIPRE+1) = 396kHz */
++ sdi->SDIBSIZE = 512;
++ sdi->SDIDTIMER = 0xffff;
++ sdi->SDIIMSK = 0x0;
++ sdi->SDICON = S3C2410_SDICON_FIFORESET|S3C2440_SDICON_MMCCLOCK;
++ udelay(125000); /* FIXME: 74 SDCLK cycles */
++
++ mmc_csd.c_size = 0;
++
++ /* reset */
++ retries = 10;
++ resp = mmc_cmd(MMC_CMD_RESET, 0, 0);
++
++ printf("trying to detect SD Card...\n");
++ while (retries--) {
++ int i;
++ udelay(100000);
++ resp = mmc_cmd(55, 0x00000000, CMD_F_RESP);
++ resp = mmc_cmd(41, 0x00300000, CMD_F_RESP);
++
++ if (resp[0] & (1 << 31)) {
++ is_sd = 1;
++ break;
++ }
++ }
++
++ if (retries == 0 && !is_sd) {
++ retries = 10;
++ printf("failed to detect SD Card, trying MMC\n");
++ resp = mmc_cmd(MMC_CMD_SEND_OP_COND, 0x00ffc000, CMD_F_RESP);
++ while (retries-- && resp && !(resp[4] & 0x80)) {
++ debug("resp %x %x\n", resp[0], resp[1]);
++ udelay(50);
++ resp = mmc_cmd(1, 0x00ffff00, CMD_F_RESP);
++ }
++ }
++
++ /* try to get card id */
++ resp = mmc_cmd(MMC_CMD_ALL_SEND_CID, 0, CMD_F_RESP|CMD_F_RESP_LONG);
++ if (resp) {
++ /* TODO configure mmc driver depending on card attributes */
++ mmc_cid_t *cid = (mmc_cid_t *)resp;
++ if (verbose) {
++ printf("MMC found. Card desciption is:\n");
++ printf("Manufacturer ID = %02x%02x%02x\n",
++ cid->id[0], cid->id[1], cid->id[2]);
++ printf("HW/FW Revision = %x %x\n",cid->hwrev, cid->fwrev);
++ cid->hwrev = cid->fwrev = 0; /* null terminate string */
++ printf("Product Name = %s\n",cid->name);
++ printf("Serial Number = %02x%02x%02x\n",
++ cid->sn[0], cid->sn[1], cid->sn[2]);
++ printf("Month = %d\n",cid->month);
++ printf("Year = %d\n",1997 + cid->year);
++ }
++ /* fill in device description */
++ mmc_dev.if_type = IF_TYPE_MMC;
++ mmc_dev.part_type = PART_TYPE_DOS;
++ mmc_dev.dev = 0;
++ mmc_dev.lun = 0;
++ mmc_dev.type = 0;
++ /* FIXME fill in the correct size (is set to 32MByte) */
++ mmc_dev.blksz = 512;
++ mmc_dev.lba = 0x10000;
++ sprintf(mmc_dev.vendor,"Man %02x%02x%02x Snr %02x%02x%02x",
++ cid->id[0], cid->id[1], cid->id[2],
++ cid->sn[0], cid->sn[1], cid->sn[2]);
++ sprintf(mmc_dev.product,"%s",cid->name);
++ sprintf(mmc_dev.revision,"%x %x",cid->hwrev, cid->fwrev);
++ mmc_dev.removable = 0;
++ mmc_dev.block_read = mmc_bread;
++
++ /* MMC exists, get CSD too */
++ resp = mmc_cmd(MMC_CMD_SET_RCA, MMC_DEFAULT_RCA, CMD_F_RESP);
++ if (is_sd)
++ rca = resp[0] >> 16;
++
++ resp = mmc_cmd(MMC_CMD_SEND_CSD, rca<<16, CMD_F_RESP|CMD_F_RESP_LONG);
++ if (resp) {
++ mmc_csd_t *csd = (mmc_csd_t *)resp;
++ memcpy(&mmc_csd, csd, sizeof(csd));
++ rc = 0;
++ mmc_ready = 1;
++ /* FIXME add verbose printout for csd */
++ printf("READ_BL_LEN=%u, C_SIZE_MULT=%u, C_SIZE=%u\n",
++ csd->read_bl_len, csd->c_size_mult1, csd->c_size);
++ printf("size = %u\n", mmc_size(csd));
++ }
++ }
++
++ resp = mmc_cmd(MMC_CMD_SELECT_CARD, rca<<16, CMD_F_RESP);
++
++#ifdef CONFIG_MMC_WIDE
++ if (is_sd) {
++ resp = mmc_cmd(55, rca<<16, CMD_F_RESP);
++ resp = mmc_cmd(6, 0x02, CMD_F_RESP);
++ wide = 1;
++ }
++#endif
++
++ fat_register_device(&mmc_dev,1); /* partitions start counting with 1 */
++
++ return rc;
++}
++
++int
++mmc_ident(block_dev_desc_t *dev)
++{
++ return 0;
++}
++
++int
++mmc2info(ulong addr)
++{
++ /* FIXME hard codes to 32 MB device */
++ if (addr >= CFG_MMC_BASE && addr < CFG_MMC_BASE + 0x02000000) {
++ return 1;
++ }
++ return 0;
++}
++
++#endif /* CONFIG_MMC */
+diff --git a/cpu/arm920t/s3c24x0/nand.c b/cpu/arm920t/s3c24x0/nand.c
+new file mode 100644
+index 0000000..f720229
+--- /dev/null
++++ b/cpu/arm920t/s3c24x0/nand.c
+@@ -0,0 +1,212 @@
++/*
++ * (C) Copyright 2006 Harald Welte <hwelte at hmw-consulting.de>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#include <common.h>
++
++#if 0
++#define DEBUGN printf
++#else
++#define DEBUGN(x, args ...) {}
++#endif
++
++#if (CONFIG_COMMANDS & CFG_CMD_NAND)
++#if !defined(CFG_NAND_LEGACY)
++
++#include <nand.h>
++#include <s3c2410.h>
++
++#define __REGb(x) (*(volatile unsigned char *)(x))
++#define __REGi(x) (*(volatile unsigned int *)(x))
++
++#define NF_BASE 0x4e000000
++#define NFCONF __REGi(NF_BASE + 0x0)
++#define NFCMD __REGb(NF_BASE + 0x4)
++#define NFADDR __REGb(NF_BASE + 0x8)
++#define NFDATA __REGb(NF_BASE + 0xc)
++#define NFSTAT __REGb(NF_BASE + 0x10)
++
++#define S3C2410_NFCONF_EN (1<<15)
++#define S3C2410_NFCONF_512BYTE (1<<14)
++#define S3C2410_NFCONF_4STEP (1<<13)
++#define S3C2410_NFCONF_INITECC (1<<12)
++#define S3C2410_NFCONF_nFCE (1<<11)
++#define S3C2410_NFCONF_TACLS(x) ((x)<<8)
++#define S3C2410_NFCONF_TWRPH0(x) ((x)<<4)
++#define S3C2410_NFCONF_TWRPH1(x) ((x)<<0)
++
++static u16 s3c2410_read_word(struct mtd_info *mtd)
++{
++ unsigned char byte = 0;
++
++ printf("s3c2410_read_word: WARNING, this function is not implemented yet\n");
++ return byte;
++}
++
++static void s3c2410_write_word(struct mtd_info *mtd, u16 word)
++{
++ printf("s3c2410_write_word: WARNING, this function is not implemented yet\n");
++}
++
++static void s3c2410_hwcontrol(struct mtd_info *mtd, int cmd)
++{
++ struct nand_chip *chip = mtd->priv;
++
++ DEBUGN("hwcontrol(): 0x%02x: ", cmd);
++
++ switch (cmd) {
++ case NAND_CTL_SETNCE:
++ NFCONF &= ~S3C2410_NFCONF_nFCE;
++ DEBUGN("NFCONF=0x%08x\n", NFCONF);
++ break;
++ case NAND_CTL_CLRNCE:
++ NFCONF |= S3C2410_NFCONF_nFCE;
++ DEBUGN("NFCONF=0x%08x\n", NFCONF);
++ break;
++ case NAND_CTL_SETALE:
++ chip->IO_ADDR_W = NF_BASE + 0x8;
++ DEBUGN("SETALE\n");
++ break;
++ case NAND_CTL_SETCLE:
++ chip->IO_ADDR_W = NF_BASE + 0x4;
++ DEBUGN("SETCLE\n");
++ break;
++ default:
++ chip->IO_ADDR_W = NF_BASE + 0xc;
++ break;
++ }
++ return;
++}
++
++static int s3c2410_dev_ready(struct mtd_info *mtd)
++{
++ DEBUGN("dev_ready\n");
++ return (NFSTAT & 0x01);
++}
++
++static void s3c2410_cmdfunc(struct mtd_info *mtd, unsigned cmd,
++ int column, int page_addr)
++{
++ DEBUGN("cmdfunc(): 0x%02x, col=%d, page=%d\n", cmd, column, page_addr);
++
++ switch (cmd) {
++ case NAND_CMD_READ0:
++ case NAND_CMD_READ1:
++ case NAND_CMD_READOOB:
++ NFCMD = cmd;
++ NFADDR = column & 0xff;
++ NFADDR = page_addr & 0xff;
++ NFADDR = (page_addr >> 8) & 0xff;
++ NFADDR = (page_addr >> 16) & 0xff;
++ break;
++ case NAND_CMD_READID:
++ NFCMD = cmd;
++ NFADDR = 0;
++ break;
++ case NAND_CMD_PAGEPROG:
++ NFCMD = cmd;
++ printf("PAGEPROG not implemented\n");
++ break;
++ case NAND_CMD_ERASE1:
++ NFCMD = cmd;
++ NFADDR = page_addr & 0xff;
++ NFADDR = (page_addr >> 8) & 0xff;
++ NFADDR = (page_addr >> 16) & 0xff;
++ break;
++ case NAND_CMD_ERASE2:
++ NFCMD = cmd;
++ break;
++ case NAND_CMD_SEQIN:
++ printf("SEQIN not implemented\n");
++ break;
++ case NAND_CMD_STATUS:
++ NFCMD = cmd;
++ break;
++ case NAND_CMD_RESET:
++ NFCMD = cmd;
++ break;
++ default:
++ break;
++ }
++
++ while (!s3c2410_dev_ready(mtd));
++}
++
++void board_nand_init(struct nand_chip *nand)
++{
++ u_int32_t cfg;
++ u_int8_t tacls, twrph0, twrph1;
++ S3C24X0_CLOCK_POWER * const clk_power = S3C24X0_GetBase_CLOCK_POWER();
++
++ DEBUGN("board_nand_init()\n");
++
++ clk_power->CLKCON |= (1 << 4);
++
++ /* initialize hardware */
++ twrph0 = 3; twrph1 = 0; tacls = 0;
++
++ /* default timings: maximum */
++ //twrph0 = 8; twrph1 = 8; tacls = 8;
++
++ cfg = S3C2410_NFCONF_EN;
++ cfg |= S3C2410_NFCONF_TACLS(tacls - 1);
++ cfg |= S3C2410_NFCONF_TWRPH0(twrph0 - 1);
++ cfg |= S3C2410_NFCONF_TWRPH1(twrph1 - 1);
++
++ //NFCONF = cfg;
++ NFCONF = 0xf842;
++
++ /* initialize nand_chip data structure */
++ nand->IO_ADDR_R = nand->IO_ADDR_W = 0x4e00000c;
++
++ /* read_buf and write_buf are default */
++ /* read_byte and write_byte are default */
++
++ /* need to override word read/write since default routines try 16bit wide
++ * register access of an (in our case) 8bit register */
++ nand->read_word = s3c2410_read_word;
++ nand->write_word = s3c2410_write_word;
++
++ /* hwcontrol always must be implemented */
++ nand->hwcontrol = s3c2410_hwcontrol;
++
++ nand->dev_ready = s3c2410_dev_ready;
++
++ nand->eccmode = NAND_ECC_SOFT;
++ nand->options = 0;
++ //nand->waitfunc = dfc_wait;
++
++ //nand->cmdfunc = s3c2410_cmdfunc;
++ //nand->autooob = &delta_oob;
++ //nand->badblock_pattern = &delta_bbt_descr;
++
++#if 0
++ /* reset */
++ nand->hwcontrol(NULL, NAND_CTL_SETNCE);
++ nand->cmdfunc(NULL, NAND_CMD_RESET, -1, -1);
++ while (nand->dev_ready(NULL) == 0) {}
++ nand->hwcontrol(NULL, NAND_CTL_CLRNCE);
++#endif
++
++ DEBUGN("end of nand_init\n");
++}
++
++#else
++ #error "U-Boot legacy NAND support not available for S3C2410"
++#endif
++#endif
+diff --git a/cpu/arm920t/s3c24x0/nand_read.c b/cpu/arm920t/s3c24x0/nand_read.c
+new file mode 100644
+index 0000000..9d97932
+--- /dev/null
++++ b/cpu/arm920t/s3c24x0/nand_read.c
+@@ -0,0 +1,75 @@
++/*
++ * nand_read.c: Simple NAND read functions for booting from NAND
++ *
++ * Taken from GPLv2 licensed vivi bootloader,
++ * Copyright (C) 2002 MIZI Research, Inc.
++ *
++ * Author: Hwang, Chideok <hwang at mizi.com>
++ * Date : $Date: 2004/02/04 10:37:37 $
++ *
++ * u-boot integration (C) 2006 by Harald Welte <hwelte at hmw-consulting.de>
++ */
++
++#include <common.h>
++
++#ifdef CONFIG_S3C2410_NAND_BOOT
++
++#define __REGb(x) (*(volatile unsigned char *)(x))
++#define __REGi(x) (*(volatile unsigned int *)(x))
++#define NF_BASE 0x4e000000
++#define NFCONF __REGi(NF_BASE + 0x0)
++#define NFCMD __REGb(NF_BASE + 0x4)
++#define NFADDR __REGb(NF_BASE + 0x8)
++#define NFDATA __REGb(NF_BASE + 0xc)
++#define NFSTAT __REGb(NF_BASE + 0x10)
++
++#define BUSY 1
++inline void wait_idle(void) {
++ int i;
++
++ while(!(NFSTAT & BUSY))
++ for(i=0; i<10; i++);
++}
++
++#define NAND_SECTOR_SIZE 512
++#define NAND_BLOCK_MASK (NAND_SECTOR_SIZE - 1)
++
++/* low level nand read function */
++int
++nand_read_ll(unsigned char *buf, unsigned long start_addr, int size)
++{
++ int i, j;
++
++ if ((start_addr & NAND_BLOCK_MASK) || (size & NAND_BLOCK_MASK)) {
++ return -1; /* invalid alignment */
++ }
++
++ /* chip Enable */
++ NFCONF &= ~0x800;
++ for(i=0; i<10; i++);
++
++ for(i=start_addr; i < (start_addr + size);) {
++ /* READ0 */
++ NFCMD = 0;
++
++ /* Write Address */
++ NFADDR = i & 0xff;
++ NFADDR = (i >> 9) & 0xff;
++ NFADDR = (i >> 17) & 0xff;
++ NFADDR = (i >> 25) & 0xff;
++
++ wait_idle();
++
++ for(j=0; j < NAND_SECTOR_SIZE; j++, i++) {
++ *buf = (NFDATA & 0xff);
++ buf++;
++ }
++ }
++
++ /* chip Disable */
++ NFCONF |= 0x800; /* chip disable */
++
++ return 0;
++}
++
++#endif /* CONFIG_S3C2410_NAND_BOOT */
+diff --git a/cpu/arm920t/start.S b/cpu/arm920t/start.S
+index 346f0d0..232e2c2 100644
+--- a/cpu/arm920t/start.S
++++ b/cpu/arm920t/start.S
+@@ -5,6 +5,10 @@
+ * Copyright (c) 2002 Alex Züpke <azu at sysgo.de>
+ * Copyright (c) 2002 Gary Jennejohn <gj at denx.de>
+ *
++ * S3C2410 NAND portions
++ * Copyright (c) 2001 MIZI Research, Inc.
++ * Copyright (c) 2006 Harald Welte <hwelte at hmw-consulting.de>
++ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+@@ -27,6 +31,7 @@
+
+ #include <config.h>
+ #include <version.h>
++#include <s3c2410.h>
+
+
+ /*
+@@ -161,6 +166,7 @@ #ifndef CONFIG_SKIP_LOWLEVEL_INIT
+ #endif
+
+ #ifndef CONFIG_SKIP_RELOCATE_UBOOT
++#ifndef CONFIG_S3C2410_NAND_BOOT
+ relocate: /* relocate U-Boot to RAM */
+ adr r0, _start /* r0 <- current position of code */
+ ldr r1, _TEXT_BASE /* test if we run from flash or RAM */
+@@ -177,6 +183,93 @@ copy_loop:
+ stmia r1!, {r3-r10} /* copy to target address [r1] */
+ cmp r0, r2 /* until source end addreee [r2] */
+ ble copy_loop
++#else /* NAND_BOOT */
++relocate:
++copy_myself:
++ /* mov r10, lr */
++
++ @ reset NAND
++ mov r1, #S3C2410_NAND_BASE
++ ldr r2, =0xf842 @ initial value enable tacls=3,rph0=6,rph1=0
++ str r2, [r1, #oNFCONF]
++ ldr r2, [r1, #oNFCONF]
++ bic r2, r2, #0x800 @ enable chip
++ str r2, [r1, #oNFCONF]
++ mov r2, #0xff @ RESET command
++ strb r2, [r1, #oNFCMD]
++ mov r3, #0 @ wait
++1: add r3, r3, #0x1
++ cmp r3, #0xa
++ blt 1b
++2: ldr r2, [r1, #oNFSTAT] @ wait ready
++ tst r2, #0x1
++ beq 2b
++ ldr r2, [r1, #oNFCONF]
++ orr r2, r2, #0x800 @ disable chip
++ str r2, [r1, #oNFCONF]
++
++#if 0
++ @ get ready to call C functions (for nand_read())
++ ldr sp, DW_STACK_START @ setup stack pointer
++ mov fp, #0 @ no previous frame, so fp=0
++#else
++ ldr r0, _TEXT_BASE /* upper 128 KiB: relocated uboot */
++ sub r0, r0, #CFG_MALLOC_LEN /* malloc area */
++ sub r0, r0, #CFG_GBL_DATA_SIZE /* bdinfo */
++#ifdef CONFIG_USE_IRQ
++ sub r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)
++#endif
++ sub sp, r0, #12 /* leave 3 words for abort-stack */
++#endif
++
++ @ copy u-boot to RAM
++ ldr r0, _TEXT_BASE
++ mov r1, #0x0
++ mov r2, #0x30000
++ bl nand_read_ll
++
++ tst r0, #0x0
++ beq ok_nand_read
++#ifdef CONFIG_DEBUG_LL
++bad_nand_read:
++ ldr r0, STR_FAIL
++ ldr r1, SerBase
++ bl PrintWord
++1: b 1b @ infinite loop
++#endif
++
++ok_nand_read:
++#ifdef CONFIG_DEBUG_LL
++ ldr r0, STR_OK
++ ldr r1, SerBase
++ bl PrintWord
++#endif
++
++ @ verify
++ mov r0, #0
++ @ldr r1, =0x33f00000
++ ldr r1, _TEXT_BASE
++ mov r2, #0x400 @ 4 bytes * 1024 = 4K-bytes
++go_next:
++ ldr r3, [r0], #4
++ ldr r4, [r1], #4
++ teq r3, r4
++ bne notmatch
++ subs r2, r2, #4
++ beq done_nand_read
++ bne go_next
++notmatch:
++#ifdef CONFIG_DEBUG_LL
++ sub r0, r0, #4
++ ldr r1, SerBase
++ bl PrintHexWord
++ ldr r0, STR_FAIL
++ ldr r1, SerBase
++ bl PrintWord
++#endif
++1: b 1b
++done_nand_read:
++#endif /* NAND_BOOT */
+ #endif /* CONFIG_SKIP_RELOCATE_UBOOT */
+
+ /* Set up the stack */
+diff --git a/drivers/Makefile b/drivers/Makefile
+index 9be95c7..eef266a 100644
+--- a/drivers/Makefile
++++ b/drivers/Makefile
+@@ -50,7 +50,7 @@ OBJS = 3c589.o 5701rls.o ali512x.o \
+ videomodes.o w83c553f.o \
+ ks8695eth.o \
+ pxa_pcmcia.o mpc8xx_pcmcia.o tqm8xx_pcmcia.o \
+- rpx_pcmcia.o
++ rpx_pcmcia.o s3c2410_fb.o
+
+ all: $(LIB)
+
+diff --git a/drivers/cs8900.c b/drivers/cs8900.c
+index 082434c..1cce622 100644
+--- a/drivers/cs8900.c
++++ b/drivers/cs8900.c
+@@ -120,6 +120,7 @@ void cs8900_get_enetaddr (uchar * addr)
+ unsigned char env_enetaddr[6];
+ char *tmp = getenv ("ethaddr");
+ char *end;
++ unsigned short chip_id;
+
+ for (i=0; i<6; i++) {
+ env_enetaddr[i] = tmp ? simple_strtoul(tmp, &end, 16) : 0;
+@@ -128,7 +129,9 @@ void cs8900_get_enetaddr (uchar * addr)
+ }
+
+ /* verify chip id */
+- if (get_reg_init_bus (PP_ChipID) != 0x630e)
++ chip_id = get_reg_init_bus (PP_ChipID);
++ printf("\ncs8900a chipid 0x%04x\n", chip_id);
++ if (chip_id != 0x630e)
+ return;
+ eth_reset ();
+ if ((get_reg (PP_SelfST) & (PP_SelfSTAT_EEPROM | PP_SelfSTAT_EEPROM_OK)) ==
+diff --git a/drivers/s3c2410_fb.c b/drivers/s3c2410_fb.c
+new file mode 100644
+index 0000000..fc389a9
+--- /dev/null
++++ b/drivers/s3c2410_fb.c
+@@ -0,0 +1,182 @@
++/*
++ * (C) Copyright 2006 Harald Welte <hwelte at hmw-consulting.de>
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#include <common.h>
++
++#if defined(CONFIG_VIDEO_S3C2410)
++
++#include <video_fb.h>
++#include "videomodes.h"
++#include <s3c2410.h>
++/*
++ * Export Graphic Device
++ */
++GraphicDevice smi;
++
++#define VIDEO_MEM_SIZE 0x200000
++
++/*******************************************************************************
++ *
++ * Init video chip with common Linux graphic modes (lilo)
++ */
++void *video_hw_init (void)
++{
++ S3C24X0_LCD * const lcd = S3C24X0_GetBase_LCD();
++ GraphicDevice *pGD = (GraphicDevice *)&smi;
++ int videomode;
++ unsigned long t1, hsynch, vsynch;
++ char *penv;
++ int tmp, i, bits_per_pixel;
++ struct ctfb_res_modes *res_mode;
++ struct ctfb_res_modes var_mode;
++ unsigned char videoout;
++ unsigned int *vm;
++
++ /* Search for video chip */
++ printf("Video: ");
++
++ tmp = 0;
++
++ videomode = CFG_DEFAULT_VIDEO_MODE;
++ /* get video mode via environment */
++ if ((penv = getenv ("videomode")) != NULL) {
++ /* deceide if it is a string */
++ if (penv[0] <= '9') {
++ videomode = (int) simple_strtoul (penv, NULL, 16);
++ tmp = 1;
++ }
++ } else {
++ tmp = 1;
++ }
++ if (tmp) {
++ /* parameter are vesa modes */
++ /* search params */
++ for (i = 0; i < VESA_MODES_COUNT; i++) {
++ if (vesa_modes[i].vesanr == videomode)
++ break;
++ }
++ if (i == VESA_MODES_COUNT) {
++ printf ("no VESA Mode found, switching to mode 0x%x ", CFG_DEFAULT_VIDEO_MODE);
++ i = 0;
++ }
++ res_mode =
++ (struct ctfb_res_modes *) &res_mode_init[vesa_modes[i].
++ resindex];
++ bits_per_pixel = vesa_modes[i].bits_per_pixel;
++ } else {
++
++ res_mode = (struct ctfb_res_modes *) &var_mode;
++ bits_per_pixel = video_get_params (res_mode, penv);
++ }
++
++ /* calculate hsynch and vsynch freq (info only) */
++ t1 = (res_mode->left_margin + res_mode->xres +
++ res_mode->right_margin + res_mode->hsync_len) / 8;
++ t1 *= 8;
++ t1 *= res_mode->pixclock;
++ t1 /= 1000;
++ hsynch = 1000000000L / t1;
++ t1 *=
++ (res_mode->upper_margin + res_mode->yres +
++ res_mode->lower_margin + res_mode->vsync_len);
++ t1 /= 1000;
++ vsynch = 1000000000L / t1;
++
++ /* fill in Graphic device struct */
++ sprintf (pGD->modeIdent, "%dx%dx%d %ldkHz %ldHz", res_mode->xres,
++ res_mode->yres, bits_per_pixel, (hsynch / 1000),
++ (vsynch / 1000));
++ printf ("%s\n", pGD->modeIdent);
++ pGD->winSizeX = res_mode->xres;
++ pGD->winSizeY = res_mode->yres;
++ pGD->plnSizeX = res_mode->xres;
++ pGD->plnSizeY = res_mode->yres;
++ switch (bits_per_pixel) {
++ case 8:
++ pGD->gdfBytesPP = 1;
++ pGD->gdfIndex = GDF__8BIT_INDEX;
++ break;
++ case 15:
++ pGD->gdfBytesPP = 2;
++ pGD->gdfIndex = GDF_15BIT_555RGB;
++ break;
++ case 16:
++ pGD->gdfBytesPP = 2;
++ pGD->gdfIndex = GDF_16BIT_565RGB;
++ break;
++ case 24:
++ pGD->gdfBytesPP = 3;
++ pGD->gdfIndex = GDF_24BIT_888RGB;
++ break;
++ }
++
++#if 0
++ pGD->isaBase = CFG_ISA_IO;
++ pGD->pciBase = pci_mem_base;
++ pGD->dprBase = (pci_mem_base + 0x400000 + 0x8000);
++ pGD->vprBase = (pci_mem_base + 0x400000 + 0xc000);
++ pGD->cprBase = (pci_mem_base + 0x400000 + 0xe000);
++#endif
++ pGD->frameAdrs = LCD_VIDEO_ADDR;
++ pGD->memSize = VIDEO_MEM_SIZE;
++
++ lcd->LCDSADDR1 = LCD_VIDEO_ADDR >> 1;
++ lcd->LCDSADDR2 = (LCD_VIDEO_ADDR + 0x4b000) >> 1;
++ lcd->LCDSADDR3 = 0x000000f0;
++
++ lcd->LCDCON1 = 0x00000479;
++ lcd->LCDCON2 = 0x014fc183;
++ lcd->LCDCON3 = 0x0060ef07;
++ lcd->LCDCON4 = 0x00000003;
++ lcd->LCDCON5 = 0x00000b09;
++ lcd->LPCSEL = 0x00000cf0;
++
++ pGD->winSizeX = pGD->plnSizeX = 240;
++ pGD->winSizeY = pGD->plnSizeY = 320;
++ pGD->gdfBytesPP = 2;
++ pGD->gdfIndex = GDF_16BIT_565RGB;
++
++ /* Enable Display */
++ videoout = 2; /* Default output is CRT */
++ if ((penv = getenv ("videoout")) != NULL) {
++ /* deceide if it is a string */
++ videoout = (int) simple_strtoul (penv, NULL, 16);
++ }
++
++ printf("clearing video memory\n");
++ /* Clear video memory */
++ i = pGD->memSize/4;
++ vm = (unsigned int *)pGD->frameAdrs;
++ while(i--)
++ *vm++ = 0;
++
++ printf("returning from video_hw_init\n");
++ return ((void*)&smi);
++}
++
++void
++video_set_lut (unsigned int index, /* color number */
++ unsigned char r, /* red */
++ unsigned char g, /* green */
++ unsigned char b /* blue */
++ )
++{
++}
++
++#endif /* CONFIG_VIDEO_S3C2410 */
+diff --git a/drivers/usbdcore_s3c2410.c b/drivers/usbdcore_s3c2410.c
+new file mode 100644
+index 0000000..143fdf2
+--- /dev/null
++++ b/drivers/usbdcore_s3c2410.c
+@@ -0,0 +1,1609 @@
++/*
++ * (C) Copyright 2003
++ * Gerry Hamel, geh at ti.com, Texas Instruments
++ *
++ * Based on
++ * linux/drivers/usb/device/bi/omap.c
++ * TI OMAP1510 USB bus interface driver
++ *
++ * Author: MontaVista Software, Inc.
++ * source at mvista.com
++ * (C) Copyright 2002
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ *
++ */
++
++#include <common.h>
++
++#if defined(CONFIG_S3C2410) && defined(CONFIG_USB_DEVICE)
++
++#include <asm/io.h>
++
++#include "usbdcore.h"
++#include "usbdcore_s3c2410.h"
++#include "usbdcore_ep0.h"
++
++
++#define UDC_INIT_MDELAY 80 /* Device settle delay */
++#define UDC_MAX_ENDPOINTS 31 /* Number of endpoints on this UDC */
++
++/* Some kind of debugging output... */
++#if 1
++#define UDCDBG(str)
++#define UDCDBGA(fmt,args...)
++#else /* The bugs still exists... */
++#define UDCDBG(str) serial_printf("[%s] %s:%d: " str "\n", __FILE__,__FUNCTION__,__LINE__)
++#define UDCDBGA(fmt,args...) serial_printf("[%s] %s:%d: " fmt "\n", __FILE__,__FUNCTION__,__LINE__, ##args)
++#endif
++
++#if 1
++#define UDCREG(name)
++#define UDCREGL(name)
++#else /* The bugs still exists... */
++#define UDCREG(name) serial_printf("%s():%d: %s[%08x]=%.4x\n",__FUNCTION__,__LINE__, (#name), name, inw(name)) /* For 16-bit regs */
++#define UDCREGL(name) serial_printf("%s():%d: %s[%08x]=%.8x\n",__FUNCTION__,__LINE__, (#name), name, inl(name)) /* For 32-bit regs */
++#endif
++
++
++static struct urb *ep0_urb = NULL;
++
++static struct usb_device_instance *udc_device; /* Used in interrupt handler */
++static u16 udc_devstat = 0; /* UDC status (DEVSTAT) */
++static u32 udc_interrupts = 0;
++
++static void udc_stall_ep (unsigned int ep_addr);
++
++
++static struct usb_endpoint_instance *s3c2410_find_ep (int ep)
++{
++ int i;
++
++ for (i = 0; i < udc_device->bus->max_endpoints; i++) {
++ if (udc_device->bus->endpoint_array[i].endpoint_address == ep)
++ return &udc_device->bus->endpoint_array[i];
++ }
++ return NULL;
++}
++
++/* ************************************************************************** */
++/* IO
++ */
++
++/*
++ * omap1510_prepare_endpoint_for_rx
++ *
++ * This function implements TRM Figure 14-11.
++ *
++ * The endpoint to prepare for transfer is specified as a physical endpoint
++ * number. For OUT (rx) endpoints 1 through 15, the corresponding endpoint
++ * configuration register is checked to see if the endpoint is ISO or not.
++ * If the OUT endpoint is valid and is non-ISO then its FIFO is enabled.
++ * No action is taken for endpoint 0 or for IN (tx) endpoints 16 through 30.
++ */
++static void omap1510_prepare_endpoint_for_rx (int ep_addr)
++{
++ int ep_num = ep_addr & USB_ENDPOINT_NUMBER_MASK;
++
++ UDCDBGA ("omap1510_prepare_endpoint %x", ep_addr);
++ if (((ep_addr & USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT)) {
++ if ((inw (UDC_EP_RX (ep_num)) &
++ (UDC_EPn_RX_Valid | UDC_EPn_RX_Iso)) ==
++ UDC_EPn_RX_Valid) {
++ /* rx endpoint is valid, non-ISO, so enable its FIFO */
++ outw (UDC_EP_Sel | ep_num, UDC_EP_NUM);
++ outw (UDC_Set_FIFO_En, UDC_CTRL);
++ outw (0, UDC_EP_NUM);
++ }
++ }
++}
++
++/* omap1510_configure_endpoints
++ *
++ * This function implements TRM Figure 14-10.
++ */
++static void omap1510_configure_endpoints (struct usb_device_instance *device)
++{
++ int ep;
++ struct usb_bus_instance *bus;
++ struct usb_endpoint_instance *endpoint;
++ unsigned short ep_ptr;
++ unsigned short ep_size;
++ unsigned short ep_isoc;
++ unsigned short ep_doublebuffer;
++ int ep_addr;
++ int packet_size;
++ int buffer_size;
++ int attributes;
++
++ bus = device->bus;
++
++ /* There is a dedicated 2048 byte buffer for USB packets that may be
++ * arbitrarily partitioned among the endpoints on 8-byte boundaries.
++ * The first 8 bytes are reserved for receiving setup packets on
++ * endpoint 0.
++ */
++ ep_ptr = 8; /* reserve the first 8 bytes for the setup fifo */
++
++ for (ep = 0; ep < bus->max_endpoints; ep++) {
++ endpoint = bus->endpoint_array + ep;
++ ep_addr = endpoint->endpoint_address;
++ if ((ep_addr & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN) {
++ /* IN endpoint */
++ packet_size = endpoint->tx_packetSize;
++ attributes = endpoint->tx_attributes;
++ } else {
++ /* OUT endpoint */
++ packet_size = endpoint->rcv_packetSize;
++ attributes = endpoint->rcv_attributes;
++ }
++
++ switch (packet_size) {
++ case 0:
++ ep_size = 0;
++ break;
++ case 8:
++ ep_size = 0;
++ break;
++ case 16:
++ ep_size = 1;
++ break;
++ case 32:
++ ep_size = 2;
++ break;
++ case 64:
++ ep_size = 3;
++ break;
++ case 128:
++ ep_size = 4;
++ break;
++ case 256:
++ ep_size = 5;
++ break;
++ case 512:
++ ep_size = 6;
++ break;
++ default:
++ UDCDBGA ("ep 0x%02x has bad packet size %d",
++ ep_addr, packet_size);
++ packet_size = 0;
++ ep_size = 0;
++ break;
++ }
++
++ switch (attributes & USB_ENDPOINT_XFERTYPE_MASK) {
++ case USB_ENDPOINT_XFER_CONTROL:
++ case USB_ENDPOINT_XFER_BULK:
++ case USB_ENDPOINT_XFER_INT:
++ default:
++ /* A non-isochronous endpoint may optionally be
++ * double-buffered. For now we disable
++ * double-buffering.
++ */
++ ep_doublebuffer = 0;
++ ep_isoc = 0;
++ if (packet_size > 64)
++ packet_size = 0;
++ if (!ep || !ep_doublebuffer)
++ buffer_size = packet_size;
++ else
++ buffer_size = packet_size * 2;
++ break;
++ case USB_ENDPOINT_XFER_ISOC:
++ /* Isochronous endpoints are always double-
++ * buffered, but the double-buffering bit
++ * in the endpoint configuration register
++ * becomes the msb of the endpoint size so we
++ * set the double-buffering flag to zero.
++ */
++ ep_doublebuffer = 0;
++ ep_isoc = 1;
++ buffer_size = packet_size * 2;
++ break;
++ }
++
++ /* check to see if our packet buffer RAM is exhausted */
++ if ((ep_ptr + buffer_size) > 2048) {
++ UDCDBGA ("out of packet RAM for ep 0x%02x buf size %d", ep_addr, buffer_size);
++ buffer_size = packet_size = 0;
++ }
++
++ /* force a default configuration for endpoint 0 since it is
++ * always enabled
++ */
++ if (!ep && ((packet_size < 8) || (packet_size > 64))) {
++ buffer_size = packet_size = 64;
++ ep_size = 3;
++ }
++
++ if (!ep) {
++ /* configure endpoint 0 */
++ outw ((ep_size << 12) | (ep_ptr >> 3), UDC_EP0);
++ /*UDCDBGA("ep 0 buffer offset 0x%03x packet size 0x%03x", */
++ /* ep_ptr, packet_size); */
++ } else if ((ep_addr & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN) {
++ /* IN endpoint */
++ if (packet_size) {
++ outw ((1 << 15) | (ep_doublebuffer << 14) |
++ (ep_size << 12) | (ep_isoc << 11) |
++ (ep_ptr >> 3),
++ UDC_EP_TX (ep_addr &
++ USB_ENDPOINT_NUMBER_MASK));
++ UDCDBGA ("IN ep %d buffer offset 0x%03x"
++ " packet size 0x%03x",
++ ep_addr & USB_ENDPOINT_NUMBER_MASK,
++ ep_ptr, packet_size);
++ } else {
++ outw (0,
++ UDC_EP_TX (ep_addr &
++ USB_ENDPOINT_NUMBER_MASK));
++ }
++ } else {
++ /* OUT endpoint */
++ if (packet_size) {
++ outw ((1 << 15) | (ep_doublebuffer << 14) |
++ (ep_size << 12) | (ep_isoc << 11) |
++ (ep_ptr >> 3),
++ UDC_EP_RX (ep_addr &
++ USB_ENDPOINT_NUMBER_MASK));
++ UDCDBGA ("OUT ep %d buffer offset 0x%03x"
++ " packet size 0x%03x",
++ ep_addr & USB_ENDPOINT_NUMBER_MASK,
++ ep_ptr, packet_size);
++ } else {
++ outw (0,
++ UDC_EP_RX (ep_addr &
++ USB_ENDPOINT_NUMBER_MASK));
++ }
++ }
++ ep_ptr += buffer_size;
++ }
++}
++
++static void s3c2410_deconfigure_device (void)
++{
++ int epnum;
++
++ UDCDBG ("clear Cfg_Lock");
++ outw (inw (UDC_SYSCON1) & ~UDC_Cfg_Lock, UDC_SYSCON1);
++ UDCREG (UDC_SYSCON1);
++
++ /* deconfigure all endpoints */
++ for (epnum = 1; epnum <= 15; epnum++) {
++ outw (0, UDC_EP_RX (epnum));
++ outw (0, UDC_EP_TX (epnum));
++ }
++}
++
++static void s3c2410_configure_device (struct usb_device_instance *device)
++{
++ u_int32_t tmp;
++
++ s3c2410_configure_endpoints(device);
++
++ /* disable EP0-4 SUBD interrupts ? */
++ outw(0x00, S3C2410_UDC_USB_INT_EN_REG);
++
++ /* UPLL already configured by board-level init code */
++
++ /* configure USB pads to device mode */
++ tmp = inw(S3C2410_MISCCR);
++ tmp &= ~(S3C2410_MISCCR_USBHOST|S3C2410_MISCCR_USBSUSPND1);
++ outw(tmp, S3C2410_MISCCR);
++
++ tmp = inb(S3C2410_CLKSLOW);
++ tmp &= ~S3C2410_CLKSLOW_USB_CLK_DISABLE;
++ outw(tmp, S3C2410_CLKSLOW);
++
++ /* clear interrupt registers */
++ inb(S3C2410_UDC_EP_INT_REG);
++ inb(S3C2410_UDC_USB_INT_REG);
++
++ /* enable USB interrupts for RESET and SUSPEND/RESUME */
++ outb(S3C2410_UDC_USBINT_RESET|S3C2410_UDC_USBINT_SUSPEND,
++ S3C2410_UDC_USB_INT_EN_REG);
++
++}
++
++/* omap1510_write_noniso_tx_fifo
++ *
++ * This function implements TRM Figure 14-30.
++ *
++ * If the endpoint has an active tx_urb, then the next packet of data from the
++ * URB is written to the tx FIFO. The total amount of data in the urb is given
++ * by urb->actual_length. The maximum amount of data that can be sent in any
++ * one packet is given by endpoint->tx_packetSize. The number of data bytes
++ * from this URB that have already been transmitted is given by endpoint->sent.
++ * endpoint->last is updated by this routine with the number of data bytes
++ * transmitted in this packet.
++ *
++ * In accordance with Figure 14-30, the EP_NUM register must already have been
++ * written with the value to select the appropriate tx FIFO before this routine
++ * is called.
++ */
++static void omap1510_write_noniso_tx_fifo (struct usb_endpoint_instance
++ *endpoint)
++{
++ struct urb *urb = endpoint->tx_urb;
++
++ if (urb) {
++ unsigned int last, i;
++
++ UDCDBGA ("urb->buffer %p, buffer_length %d, actual_length %d",
++ urb->buffer, urb->buffer_length, urb->actual_length);
++ if ((last =
++ MIN (urb->actual_length - endpoint->sent,
++ endpoint->tx_packetSize))) {
++ u8 *cp = urb->buffer + endpoint->sent;
++
++ UDCDBGA ("endpoint->sent %d, tx_packetSize %d, last %d", endpoint->sent, endpoint->tx_packetSize, last);
++
++ if (((u32) cp & 1) == 0) { /* word aligned? */
++ outsw (UDC_DATA, cp, last >> 1);
++ } else { /* byte aligned. */
++ for (i = 0; i < (last >> 1); i++) {
++ u16 w = ((u16) cp[2 * i + 1] << 8) |
++ (u16) cp[2 * i];
++ outw (w, UDC_DATA);
++ }
++ }
++ if (last & 1) {
++ outb (*(cp + last - 1), UDC_DATA);
++ }
++ }
++ endpoint->last = last;
++ }
++}
++
++/* omap1510_read_noniso_rx_fifo
++ *
++ * This function implements TRM Figure 14-28.
++ *
++ * If the endpoint has an active rcv_urb, then the next packet of data is read
++ * from the rcv FIFO and written to rcv_urb->buffer at offset
++ * rcv_urb->actual_length to append the packet data to the data from any
++ * previous packets for this transfer. We assume that there is sufficient room
++ * left in the buffer to hold an entire packet of data.
++ *
++ * The return value is the number of bytes read from the FIFO for this packet.
++ *
++ * In accordance with Figure 14-28, the EP_NUM register must already have been
++ * written with the value to select the appropriate rcv FIFO before this routine
++ * is called.
++ */
++static int omap1510_read_noniso_rx_fifo (struct usb_endpoint_instance
++ *endpoint)
++{
++ struct urb *urb = endpoint->rcv_urb;
++ int len = 0;
++
++ if (urb) {
++ len = inw (UDC_RXFSTAT);
++
++ if (len) {
++ unsigned char *cp = urb->buffer + urb->actual_length;
++
++ insw (UDC_DATA, cp, len >> 1);
++ if (len & 1)
++ *(cp + len - 1) = inb (UDC_DATA);
++ }
++ }
++ return len;
++}
++
++/* omap1510_prepare_for_control_write_status
++ *
++ * This function implements TRM Figure 14-17.
++ *
++ * We have to deal here with non-autodecoded control writes that haven't already
++ * been dealt with by ep0_recv_setup. The non-autodecoded standard control
++ * write requests are: set/clear endpoint feature, set configuration, set
++ * interface, and set descriptor. ep0_recv_setup handles set/clear requests for
++ * ENDPOINT_HALT by halting the endpoint for a set request and resetting the
++ * endpoint for a clear request. ep0_recv_setup returns an error for
++ * SET_DESCRIPTOR requests which causes them to be terminated with a stall by
++ * the setup handler. A SET_INTERFACE request is handled by ep0_recv_setup by
++ * generating a DEVICE_SET_INTERFACE event. This leaves only the
++ * SET_CONFIGURATION event for us to deal with here.
++ *
++ */
++static void omap1510_prepare_for_control_write_status (struct urb *urb)
++{
++ struct usb_device_request *request = &urb->device_request;;
++
++ /* check for a SET_CONFIGURATION request */
++ if (request->bRequest == USB_REQ_SET_CONFIGURATION) {
++ int configuration = le16_to_cpu (request->wValue) & 0xff;
++ unsigned short devstat = inw (UDC_DEVSTAT);
++
++ if ((devstat & (UDC_ADD | UDC_CFG)) == UDC_ADD) {
++ /* device is currently in ADDRESSED state */
++ if (configuration) {
++ /* Assume the specified non-zero configuration
++ * value is valid and switch to the CONFIGURED
++ * state.
++ */
++ outw (UDC_Dev_Cfg, UDC_SYSCON2);
++ }
++ } else if ((devstat & UDC_CFG) == UDC_CFG) {
++ /* device is currently in CONFIGURED state */
++ if (!configuration) {
++ /* Switch to ADDRESSED state. */
++ outw (UDC_Clr_Cfg, UDC_SYSCON2);
++ }
++ }
++ }
++
++ /* select EP0 tx FIFO */
++ outw (UDC_EP_Dir | UDC_EP_Sel, UDC_EP_NUM);
++ /* clear endpoint (no data bytes in status stage) */
++ outw (UDC_Clr_EP, UDC_CTRL);
++ /* enable the EP0 tx FIFO */
++ outw (UDC_Set_FIFO_En, UDC_CTRL);
++ /* deselect the endpoint */
++ outw (UDC_EP_Dir, UDC_EP_NUM);
++}
++
++/* udc_state_transition_up
++ * udc_state_transition_down
++ *
++ * Helper functions to implement device state changes. The device states and
++ * the events that transition between them are:
++ *
++ * STATE_ATTACHED
++ * || /\
++ * \/ ||
++ * DEVICE_HUB_CONFIGURED DEVICE_HUB_RESET
++ * || /\
++ * \/ ||
++ * STATE_POWERED
++ * || /\
++ * \/ ||
++ * DEVICE_RESET DEVICE_POWER_INTERRUPTION
++ * || /\
++ * \/ ||
++ * STATE_DEFAULT
++ * || /\
++ * \/ ||
++ * DEVICE_ADDRESS_ASSIGNED DEVICE_RESET
++ * || /\
++ * \/ ||
++ * STATE_ADDRESSED
++ * || /\
++ * \/ ||
++ * DEVICE_CONFIGURED DEVICE_DE_CONFIGURED
++ * || /\
++ * \/ ||
++ * STATE_CONFIGURED
++ *
++ * udc_state_transition_up transitions up (in the direction from STATE_ATTACHED
++ * to STATE_CONFIGURED) from the specified initial state to the specified final
++ * state, passing through each intermediate state on the way. If the initial
++ * state is at or above (i.e. nearer to STATE_CONFIGURED) the final state, then
++ * no state transitions will take place.
++ *
++ * udc_state_transition_down transitions down (in the direction from
++ * STATE_CONFIGURED to STATE_ATTACHED) from the specified initial state to the
++ * specified final state, passing through each intermediate state on the way.
++ * If the initial state is at or below (i.e. nearer to STATE_ATTACHED) the final
++ * state, then no state transitions will take place.
++ *
++ * These functions must only be called with interrupts disabled.
++ */
++static void udc_state_transition_up (usb_device_state_t initial,
++ usb_device_state_t final)
++{
++ if (initial < final) {
++ switch (initial) {
++ case STATE_ATTACHED:
++ usbd_device_event_irq (udc_device,
++ DEVICE_HUB_CONFIGURED, 0);
++ if (final == STATE_POWERED)
++ break;
++ case STATE_POWERED:
++ usbd_device_event_irq (udc_device, DEVICE_RESET, 0);
++ if (final == STATE_DEFAULT)
++ break;
++ case STATE_DEFAULT:
++ usbd_device_event_irq (udc_device,
++ DEVICE_ADDRESS_ASSIGNED, 0);
++ if (final == STATE_ADDRESSED)
++ break;
++ case STATE_ADDRESSED:
++ usbd_device_event_irq (udc_device, DEVICE_CONFIGURED,
++ 0);
++ case STATE_CONFIGURED:
++ break;
++ default:
++ break;
++ }
++ }
++}
++
++static void udc_state_transition_down (usb_device_state_t initial,
++ usb_device_state_t final)
++{
++ if (initial > final) {
++ switch (initial) {
++ case STATE_CONFIGURED:
++ usbd_device_event_irq (udc_device, DEVICE_DE_CONFIGURED, 0);
++ if (final == STATE_ADDRESSED)
++ break;
++ case STATE_ADDRESSED:
++ usbd_device_event_irq (udc_device, DEVICE_RESET, 0);
++ if (final == STATE_DEFAULT)
++ break;
++ case STATE_DEFAULT:
++ usbd_device_event_irq (udc_device, DEVICE_POWER_INTERRUPTION, 0);
++ if (final == STATE_POWERED)
++ break;
++ case STATE_POWERED:
++ usbd_device_event_irq (udc_device, DEVICE_HUB_RESET, 0);
++ case STATE_ATTACHED:
++ break;
++ default:
++ break;
++ }
++ }
++}
++
++/* Handle all device state changes.
++ * This function implements TRM Figure 14-21.
++ */
++static void omap1510_udc_state_changed (void)
++{
++ u16 bits;
++ u16 devstat = inw (UDC_DEVSTAT);
++
++ UDCDBGA ("state changed, devstat %x, old %x", devstat, udc_devstat);
++
++ bits = devstat ^ udc_devstat;
++ if (bits) {
++ if (bits & UDC_ATT) {
++ if (devstat & UDC_ATT) {
++ UDCDBG ("device attached and powered");
++ udc_state_transition_up (udc_device->device_state, STATE_POWERED);
++ } else {
++ UDCDBG ("device detached or unpowered");
++ udc_state_transition_down (udc_device->device_state, STATE_ATTACHED);
++ }
++ }
++ if (bits & UDC_USB_Reset) {
++ if (devstat & UDC_USB_Reset) {
++ UDCDBG ("device reset in progess");
++ udc_state_transition_down (udc_device->device_state, STATE_POWERED);
++ } else {
++ UDCDBG ("device reset completed");
++ }
++ }
++ if (bits & UDC_DEF) {
++ if (devstat & UDC_DEF) {
++ UDCDBG ("device entering default state");
++ udc_state_transition_up (udc_device->device_state, STATE_DEFAULT);
++ } else {
++ UDCDBG ("device leaving default state");
++ udc_state_transition_down (udc_device->device_state, STATE_POWERED);
++ }
++ }
++ if (bits & UDC_SUS) {
++ if (devstat & UDC_SUS) {
++ UDCDBG ("entering suspended state");
++ usbd_device_event_irq (udc_device, DEVICE_BUS_INACTIVE, 0);
++ } else {
++ UDCDBG ("leaving suspended state");
++ usbd_device_event_irq (udc_device, DEVICE_BUS_ACTIVITY, 0);
++ }
++ }
++ if (bits & UDC_R_WK_OK) {
++ UDCDBGA ("remote wakeup %s", (devstat & UDC_R_WK_OK)
++ ? "enabled" : "disabled");
++ }
++ if (bits & UDC_ADD) {
++ if (devstat & UDC_ADD) {
++ UDCDBG ("default -> addressed");
++ udc_state_transition_up (udc_device->device_state, STATE_ADDRESSED);
++ } else {
++ UDCDBG ("addressed -> default");
++ udc_state_transition_down (udc_device->device_state, STATE_DEFAULT);
++ }
++ }
++ if (bits & UDC_CFG) {
++ if (devstat & UDC_CFG) {
++ UDCDBG ("device configured");
++ /* The ep0_recv_setup function generates the
++ * DEVICE_CONFIGURED event when a
++ * USB_REQ_SET_CONFIGURATION setup packet is
++ * received, so we should already be in the
++ * state STATE_CONFIGURED.
++ */
++ udc_state_transition_up (udc_device->device_state, STATE_CONFIGURED);
++ } else {
++ UDCDBG ("device deconfigured");
++ udc_state_transition_down (udc_device->device_state, STATE_ADDRESSED);
++ }
++ }
++ }
++
++ /* Clear interrupt source */
++ outw (UDC_DS_Chg, UDC_IRQ_SRC);
++
++ /* Save current DEVSTAT */
++ udc_devstat = devstat;
++}
++
++static void s3c2410_udc_ep0(void)
++{
++ u_int8_t ep0csr;
++
++ UDCDBG("-> Entering EP0 handler");
++
++ S3C2410_UDC_SETIX(EP0);
++ ep0csr = inb(S3C2410_UDC_IN_CSR1_REG);
++
++ /* clear stall status */
++ if (ep0csr & S3C2410_UDC_EP0_CSR_SENTSTL) {
++ clear_sp0_sst;
++ /* FIXME */
++ ep0_idle();
++ }
++
++ if (ep0csr & S3C2410_UDC_EP0_CSR_SE
++ && dev->ep0state != EP0_IDLE) {
++ clear_ep0_se;
++ ep0_idle();
++ }
++
++ switch (dev->ep0state) {
++ case EP0_IDLE:
++ if (ep0crs & S3C2410_UDC_EP0_CSR_OPKRDY) {
++ }
++ break;
++ case EP0_IN_DATA_PHASE:
++ break;
++ case EP0_OUT_DATA_PHASE:
++ break;
++ case EP0_END_XFER:
++ break;
++ case EP0_STALL:
++ set_ep0_ss;
++ break;
++ }
++}
++
++
++}
++
++/* Handle SETUP USB interrupt.
++ * This function implements TRM Figure 14-14.
++ */
++static void omap1510_udc_setup (struct usb_endpoint_instance *endpoint)
++{
++ UDCDBG ("-> Entering device setup");
++
++ do {
++ const int setup_pktsize = 8;
++ unsigned char *datap =
++ (unsigned char *) &ep0_urb->device_request;
++
++ /* Gain access to EP 0 setup FIFO */
++ outw (UDC_Setup_Sel, UDC_EP_NUM);
++
++ /* Read control request data */
++ insb (UDC_DATA, datap, setup_pktsize);
++
++ UDCDBGA ("EP0 setup read [%x %x %x %x %x %x %x %x]",
++ *(datap + 0), *(datap + 1), *(datap + 2),
++ *(datap + 3), *(datap + 4), *(datap + 5),
++ *(datap + 6), *(datap + 7));
++
++ /* Reset EP0 setup FIFO */
++ outw (0, UDC_EP_NUM);
++ } while (inw (UDC_IRQ_SRC) & UDC_Setup);
++
++ /* Try to process setup packet */
++ if (ep0_recv_setup (ep0_urb)) {
++ /* Not a setup packet, stall next EP0 transaction */
++ udc_stall_ep (0);
++ UDCDBG ("can't parse setup packet, still waiting for setup");
++ return;
++ }
++
++ /* Check direction */
++ if ((ep0_urb->device_request.bmRequestType & USB_REQ_DIRECTION_MASK)
++ == USB_REQ_HOST2DEVICE) {
++ UDCDBG ("control write on EP0");
++ if (le16_to_cpu (ep0_urb->device_request.wLength)) {
++ /* We don't support control write data stages.
++ * The only standard control write request with a data
++ * stage is SET_DESCRIPTOR, and ep0_recv_setup doesn't
++ * support that so we just stall those requests. A
++ * function driver might support a non-standard
++ * write request with a data stage, but it isn't
++ * obvious what we would do with the data if we read it
++ * so we'll just stall it. It seems like the API isn't
++ * quite right here.
++ */
++#if 0
++ /* Here is what we would do if we did support control
++ * write data stages.
++ */
++ ep0_urb->actual_length = 0;
++ outw (0, UDC_EP_NUM);
++ /* enable the EP0 rx FIFO */
++ outw (UDC_Set_FIFO_En, UDC_CTRL);
++#else
++ /* Stall this request */
++ UDCDBG ("Stalling unsupported EP0 control write data "
++ "stage.");
++ udc_stall_ep (0);
++#endif
++ } else {
++ omap1510_prepare_for_control_write_status (ep0_urb);
++ }
++ } else {
++ UDCDBG ("control read on EP0");
++ /* The ep0_recv_setup function has already placed our response
++ * packet data in ep0_urb->buffer and the packet length in
++ * ep0_urb->actual_length.
++ */
++ endpoint->tx_urb = ep0_urb;
++ endpoint->sent = 0;
++ /* select the EP0 tx FIFO */
++ outw (UDC_EP_Dir | UDC_EP_Sel, UDC_EP_NUM);
++ /* Write packet data to the FIFO. omap1510_write_noniso_tx_fifo
++ * will update endpoint->last with the number of bytes written
++ * to the FIFO.
++ */
++ omap1510_write_noniso_tx_fifo (endpoint);
++ /* enable the FIFO to start the packet transmission */
++ outw (UDC_Set_FIFO_En, UDC_CTRL);
++ /* deselect the EP0 tx FIFO */
++ outw (UDC_EP_Dir, UDC_EP_NUM);
++ }
++
++ UDCDBG ("<- Leaving device setup");
++}
++
++/* Handle endpoint 0 RX interrupt
++ * This routine implements TRM Figure 14-16.
++ */
++static void omap1510_udc_ep0_rx (struct usb_endpoint_instance *endpoint)
++{
++ unsigned short status;
++
++ UDCDBG ("RX on EP0");
++ /* select EP0 rx FIFO */
++ outw (UDC_EP_Sel, UDC_EP_NUM);
++
++ status = inw (UDC_STAT_FLG);
++
++ if (status & UDC_ACK) {
++ /* Check direction */
++ if ((ep0_urb->device_request.bmRequestType
++ & USB_REQ_DIRECTION_MASK) == USB_REQ_HOST2DEVICE) {
++ /* This rx interrupt must be for a control write data
++ * stage packet.
++ *
++ * We don't support control write data stages.
++ * We should never end up here.
++ */
++
++ /* clear the EP0 rx FIFO */
++ outw (UDC_Clr_EP, UDC_CTRL);
++
++ /* deselect the EP0 rx FIFO */
++ outw (0, UDC_EP_NUM);
++
++ UDCDBG ("Stalling unexpected EP0 control write "
++ "data stage packet");
++ udc_stall_ep (0);
++ } else {
++ /* This rx interrupt must be for a control read status
++ * stage packet.
++ */
++ UDCDBG ("ACK on EP0 control read status stage packet");
++ /* deselect EP0 rx FIFO */
++ outw (0, UDC_EP_NUM);
++ }
++ } else if (status & UDC_STALL) {
++ UDCDBG ("EP0 stall during RX");
++ /* deselect EP0 rx FIFO */
++ outw (0, UDC_EP_NUM);
++ } else {
++ /* deselect EP0 rx FIFO */
++ outw (0, UDC_EP_NUM);
++ }
++}
++
++/* Handle endpoint 0 TX interrupt
++ * This routine implements TRM Figure 14-18.
++ */
++static void omap1510_udc_ep0_tx (struct usb_endpoint_instance *endpoint)
++{
++ unsigned short status;
++ struct usb_device_request *request = &ep0_urb->device_request;
++
++ UDCDBG ("TX on EP0");
++ /* select EP0 TX FIFO */
++ outw (UDC_EP_Dir | UDC_EP_Sel, UDC_EP_NUM);
++
++ status = inw (UDC_STAT_FLG);
++ if (status & UDC_ACK) {
++ /* Check direction */
++ if ((request->bmRequestType & USB_REQ_DIRECTION_MASK) ==
++ USB_REQ_HOST2DEVICE) {
++ /* This tx interrupt must be for a control write status
++ * stage packet.
++ */
++ UDCDBG ("ACK on EP0 control write status stage packet");
++ /* deselect EP0 TX FIFO */
++ outw (UDC_EP_Dir, UDC_EP_NUM);
++ } else {
++ /* This tx interrupt must be for a control read data
++ * stage packet.
++ */
++ int wLength = le16_to_cpu (request->wLength);
++
++ /* Update our count of bytes sent so far in this
++ * transfer.
++ */
++ endpoint->sent += endpoint->last;
++
++ /* We are finished with this transfer if we have sent
++ * all of the bytes in our tx urb (urb->actual_length)
++ * unless we need a zero-length terminating packet. We
++ * need a zero-length terminating packet if we returned
++ * fewer bytes than were requested (wLength) by the host,
++ * and the number of bytes we returned is an exact
++ * multiple of the packet size endpoint->tx_packetSize.
++ */
++ if ((endpoint->sent == ep0_urb->actual_length)
++ && ((ep0_urb->actual_length == wLength)
++ || (endpoint->last !=
++ endpoint->tx_packetSize))) {
++ /* Done with control read data stage. */
++ UDCDBG ("control read data stage complete");
++ /* deselect EP0 TX FIFO */
++ outw (UDC_EP_Dir, UDC_EP_NUM);
++ /* select EP0 RX FIFO to prepare for control
++ * read status stage.
++ */
++ outw (UDC_EP_Sel, UDC_EP_NUM);
++ /* clear the EP0 RX FIFO */
++ outw (UDC_Clr_EP, UDC_CTRL);
++ /* enable the EP0 RX FIFO */
++ outw (UDC_Set_FIFO_En, UDC_CTRL);
++ /* deselect the EP0 RX FIFO */
++ outw (0, UDC_EP_NUM);
++ } else {
++ /* We still have another packet of data to send
++ * in this control read data stage or else we
++ * need a zero-length terminating packet.
++ */
++ UDCDBG ("ACK control read data stage packet");
++ omap1510_write_noniso_tx_fifo (endpoint);
++ /* enable the EP0 tx FIFO to start transmission */
++ outw (UDC_Set_FIFO_En, UDC_CTRL);
++ /* deselect EP0 TX FIFO */
++ outw (UDC_EP_Dir, UDC_EP_NUM);
++ }
++ }
++ } else if (status & UDC_STALL) {
++ UDCDBG ("EP0 stall during TX");
++ /* deselect EP0 TX FIFO */
++ outw (UDC_EP_Dir, UDC_EP_NUM);
++ } else {
++ /* deselect EP0 TX FIFO */
++ outw (UDC_EP_Dir, UDC_EP_NUM);
++ }
++}
++
++/* Handle RX transaction on non-ISO endpoint.
++ * This function implements TRM Figure 14-27.
++ * The ep argument is a physical endpoint number for a non-ISO OUT endpoint
++ * in the range 1 to 15.
++ */
++static void omap1510_udc_epn_rx (int ep)
++{
++ unsigned short status;
++
++ /* Check endpoint status */
++ status = inw (UDC_STAT_FLG);
++
++ if (status & UDC_ACK) {
++ int nbytes;
++ struct usb_endpoint_instance *endpoint =
++ omap1510_find_ep (ep);
++
++ nbytes = omap1510_read_noniso_rx_fifo (endpoint);
++ usbd_rcv_complete (endpoint, nbytes, 0);
++
++ /* enable rx FIFO to prepare for next packet */
++ outw (UDC_Set_FIFO_En, UDC_CTRL);
++ } else if (status & UDC_STALL) {
++ UDCDBGA ("STALL on RX endpoint %d", ep);
++ } else if (status & UDC_NAK) {
++ UDCDBGA ("NAK on RX ep %d", ep);
++ } else {
++ serial_printf ("omap-bi: RX on ep %d with status %x", ep,
++ status);
++ }
++}
++
++/* Handle TX transaction on non-ISO endpoint.
++ * This function implements TRM Figure 14-29.
++ * The ep argument is a physical endpoint number for a non-ISO IN endpoint
++ * in the range 16 to 30.
++ */
++static void omap1510_udc_epn_tx (int ep)
++{
++ unsigned short status;
++
++ /*serial_printf("omap1510_udc_epn_tx( %x )\n",ep); */
++
++ /* Check endpoint status */
++ status = inw (UDC_STAT_FLG);
++
++ if (status & UDC_ACK) {
++ struct usb_endpoint_instance *endpoint =
++ omap1510_find_ep (ep);
++
++ /* We need to transmit a terminating zero-length packet now if
++ * we have sent all of the data in this URB and the transfer
++ * size was an exact multiple of the packet size.
++ */
++ if (endpoint->tx_urb
++ && (endpoint->last == endpoint->tx_packetSize)
++ && (endpoint->tx_urb->actual_length - endpoint->sent -
++ endpoint->last == 0)) {
++ /* Prepare to transmit a zero-length packet. */
++ endpoint->sent += endpoint->last;
++ /* write 0 bytes of data to FIFO */
++ omap1510_write_noniso_tx_fifo (endpoint);
++ /* enable tx FIFO to start transmission */
++ outw (UDC_Set_FIFO_En, UDC_CTRL);
++ } else if (endpoint->tx_urb
++ && endpoint->tx_urb->actual_length) {
++ /* retire the data that was just sent */
++ usbd_tx_complete (endpoint);
++ /* Check to see if we have more data ready to transmit
++ * now.
++ */
++ if (endpoint->tx_urb
++ && endpoint->tx_urb->actual_length) {
++ /* write data to FIFO */
++ omap1510_write_noniso_tx_fifo (endpoint);
++ /* enable tx FIFO to start transmission */
++ outw (UDC_Set_FIFO_En, UDC_CTRL);
++ }
++ }
++ } else if (status & UDC_STALL) {
++ UDCDBGA ("STALL on TX endpoint %d", ep);
++ } else if (status & UDC_NAK) {
++ UDCDBGA ("NAK on TX endpoint %d", ep);
++ } else {
++ /*serial_printf("omap-bi: TX on ep %d with status %x\n", ep, status); */
++ }
++}
++
++
++/*
++-------------------------------------------------------------------------------
++*/
++
++/* Handle general USB interrupts and dispatch according to type.
++ * This function implements TRM Figure 14-13.
++ */
++void s3c2410_udc_irq (void)
++{
++ u_int8_t save_idx = inb(S3C2410_UDC_INDEX_REG);
++ u_int8_t usb_status = inb(S3C2410_UDC_USB_INT_REG);
++ u_int8_t usbd_status = inb(S3C2410_UDC_EP_INT_REG);
++
++ UDCDBGA("< IRQ usbs=0x%02x, usbds=0x%02x start >", usb_status,
++ usbd_status);
++
++ if (usb_status & S3C2410_UDC_USBINT_RESET) {
++ valid_irq++;
++ }
++
++ if (usb_status & S3C2410_UDC_USBINT_RESUME) {
++ valid_irq++;
++
++ }
++
++ if (usb_status & S3C2410_UDC_USBINT_SUSPEND) {
++ valid_irq++;
++
++ }
++
++ /* Endpoint Interrupts */
++ if (usbd_status) {
++ int i;
++
++ if (usbd_status & S3C2410_UDC_INT_EP0) {
++ s3c2410_udc_ep0();
++ outb(S3C2410_UDC_INT_EP0, S3C2410_UDC_EP_INT_REG);
++ valid_irq++;
++ }
++
++ for (i = 1; i < 5; i++) {
++ u_int32_t tmp = 1 << i;
++
++ if (usbd_status & tmp) {
++ /* FIXME: Handle EP X */
++ s3c2410_udc_epn(i);
++ outb(tmp, S3C2410_UDC_EP_INT_REG);
++ valid_irq++;
++ }
++ }
++ }
++ outb(save_idx, S3C2410_UDC_INDEX_REG);
++
++#if 0
++ if (!(irq_src & ~UDC_SOF_Flg)) /* ignore SOF interrupts ) */
++ return;
++
++ UDCDBGA ("< IRQ #%d start >- %x", udc_interrupts, irq_src);
++ /*serial_printf("< IRQ #%d start >- %x\n", udc_interrupts, irq_src); */
++
++ if (irq_src & UDC_DS_Chg) {
++ /* Device status changed */
++ omap1510_udc_state_changed ();
++ valid_irq++;
++ }
++ if (irq_src & UDC_EP0_RX) {
++ /* Endpoint 0 receive */
++ outw (UDC_EP0_RX, UDC_IRQ_SRC); /* ack interrupt */
++ omap1510_udc_ep0_rx (udc_device->bus->endpoint_array + 0);
++ valid_irq++;
++ }
++ if (irq_src & UDC_EP0_TX) {
++ /* Endpoint 0 transmit */
++ outw (UDC_EP0_TX, UDC_IRQ_SRC); /* ack interrupt */
++ omap1510_udc_ep0_tx (udc_device->bus->endpoint_array + 0);
++ valid_irq++;
++ }
++ if (irq_src & UDC_Setup) {
++ /* Device setup */
++ omap1510_udc_setup (udc_device->bus->endpoint_array + 0);
++ valid_irq++;
++ }
++ /*if (!valid_irq) */
++ /* serial_printf("unknown interrupt, IRQ_SRC %.4x\n", irq_src); */
++#endif
++ UDCDBGA ("< IRQ end >", udc_interrupts);
++
++ udc_interrupts++;
++}
++
++/* This function implements TRM Figure 14-26. */
++void omap1510_udc_noniso_irq (void)
++{
++ unsigned short epnum;
++ unsigned short irq_src = inw (UDC_IRQ_SRC);
++ int valid_irq = 0;
++
++ if (!(irq_src & (UDC_EPn_RX | UDC_EPn_TX)))
++ return;
++
++ UDCDBGA ("non-ISO IRQ, IRQ_SRC %x", inw (UDC_IRQ_SRC));
++
++ if (irq_src & UDC_EPn_RX) { /* Endpoint N OUT transaction */
++ /* Determine the endpoint number for this interrupt */
++ epnum = (inw (UDC_EPN_STAT) & 0x0f00) >> 8;
++ UDCDBGA ("RX on ep %x", epnum);
++
++ /* acknowledge interrupt */
++ outw (UDC_EPn_RX, UDC_IRQ_SRC);
++
++ if (epnum) {
++ /* select the endpoint FIFO */
++ outw (UDC_EP_Sel | epnum, UDC_EP_NUM);
++
++ omap1510_udc_epn_rx (epnum);
++
++ /* deselect the endpoint FIFO */
++ outw (epnum, UDC_EP_NUM);
++ }
++ valid_irq++;
++ }
++ if (irq_src & UDC_EPn_TX) { /* Endpoint N IN transaction */
++ /* Determine the endpoint number for this interrupt */
++ epnum = (inw (UDC_EPN_STAT) & 0x000f) | USB_DIR_IN;
++ UDCDBGA ("TX on ep %x", epnum);
++
++ /* acknowledge interrupt */
++ outw (UDC_EPn_TX, UDC_IRQ_SRC);
++
++ if (epnum) {
++ /* select the endpoint FIFO */
++ outw (UDC_EP_Sel | UDC_EP_Dir | epnum, UDC_EP_NUM);
++
++ omap1510_udc_epn_tx (epnum);
++
++ /* deselect the endpoint FIFO */
++ outw (UDC_EP_Dir | epnum, UDC_EP_NUM);
++ }
++ valid_irq++;
++ }
++ if (!valid_irq)
++ serial_printf (": unknown non-ISO interrupt, IRQ_SRC %.4x\n",
++ irq_src);
++}
++
++/*
++-------------------------------------------------------------------------------
++*/
++
++
++/*
++ * Start of public functions.
++ */
++
++/* Called to start packet transmission. */
++void udc_endpoint_write (struct usb_endpoint_instance *endpoint)
++{
++ unsigned short epnum =
++ endpoint->endpoint_address & USB_ENDPOINT_NUMBER_MASK;
++
++ UDCDBGA ("Starting transmit on ep %x", epnum);
++
++ if (endpoint->tx_urb) {
++ /* select the endpoint FIFO */
++ outw (UDC_EP_Sel | UDC_EP_Dir | epnum, UDC_EP_NUM);
++ /* write data to FIFO */
++ omap1510_write_noniso_tx_fifo (endpoint);
++ /* enable tx FIFO to start transmission */
++ outw (UDC_Set_FIFO_En, UDC_CTRL);
++ /* deselect the endpoint FIFO */
++ outw (UDC_EP_Dir | epnum, UDC_EP_NUM);
++ }
++}
++
++/* Start to initialize h/w stuff */
++int udc_init (void)
++{
++ u16 udc_rev;
++ uchar value;
++ ulong gpio;
++ int i;
++
++ /* Let the device settle down before we start */
++ for (i = 0; i < UDC_INIT_MDELAY; i++) udelay(1000);
++
++ udc_device = NULL;
++
++ UDCDBG ("starting");
++
++ /* Check peripheral reset. Must be 1 to make sure
++ MPU TIPB peripheral reset is inactive */
++ UDCREG (ARM_RSTCT2);
++
++ /* Set and check clock control.
++ * We might ought to be using the clock control API to do
++ * this instead of fiddling with the clock registers directly
++ * here.
++ */
++ outw ((1 << 4) | (1 << 5), CLOCK_CTRL);
++ UDCREG (CLOCK_CTRL);
++ /* Set and check APLL */
++ outw (0x0008, APLL_CTRL);
++ UDCREG (APLL_CTRL);
++ /* Set and check DPLL */
++ outw (0x2210, DPLL_CTRL);
++ UDCREG (DPLL_CTRL);
++ /* Set and check SOFT */
++ outw ((1 << 4) | (1 << 3) | 1, SOFT_REQ);
++ /* Short delay to wait for DPLL */
++ udelay (1000);
++
++ /* Print banner with device revision */
++ udc_rev = inw (UDC_REV) & 0xff;
++ printf ("USB: TI OMAP1510 USB function module rev %d.%d\n",
++ udc_rev >> 4, udc_rev & 0xf);
++
++#ifdef CONFIG_OMAP_SX1
++ i2c_read (0x32, 0x04, 1, &value, 1);
++ value |= 0x04;
++ i2c_write (0x32, 0x04, 1, &value, 1);
++
++ i2c_read (0x32, 0x03, 1, &value, 1);
++ value |= 0x01;
++ i2c_write (0x32, 0x03, 1, &value, 1);
++
++ gpio = inl(GPIO_PIN_CONTROL_REG);
++ gpio |= 0x0002; /* A_IRDA_OFF */
++ gpio |= 0x0800; /* A_SWITCH */
++ gpio |= 0x8000; /* A_USB_ON */
++ outl (gpio, GPIO_PIN_CONTROL_REG);
++
++ gpio = inl(GPIO_DIR_CONTROL_REG);
++ gpio &= ~0x0002; /* A_IRDA_OFF */
++ gpio &= ~0x0800; /* A_SWITCH */
++ gpio &= ~0x8000; /* A_USB_ON */
++ outl (gpio, GPIO_DIR_CONTROL_REG);
++
++ gpio = inl(GPIO_DATA_OUTPUT_REG);
++ gpio |= 0x0002; /* A_IRDA_OFF */
++ gpio &= ~0x0800; /* A_SWITCH */
++ gpio &= ~0x8000; /* A_USB_ON */
++ outl (gpio, GPIO_DATA_OUTPUT_REG);
++#endif
++
++ /* The VBUS_MODE bit selects whether VBUS detection is done via
++ * software (1) or hardware (0). When software detection is
++ * selected, VBUS_CTRL selects whether USB is not connected (0)
++ * or connected (1).
++ */
++ outl (inl (FUNC_MUX_CTRL_0) | UDC_VBUS_MODE, FUNC_MUX_CTRL_0);
++ outl (inl (FUNC_MUX_CTRL_0) & ~UDC_VBUS_CTRL, FUNC_MUX_CTRL_0);
++ UDCREGL (FUNC_MUX_CTRL_0);
++
++ /*
++ * At this point, device is ready for configuration...
++ */
++
++ UDCDBG ("disable USB interrupts");
++ outw (0, UDC_IRQ_EN);
++ UDCREG (UDC_IRQ_EN);
++
++ UDCDBG ("disable USB DMA");
++ outw (0, UDC_DMA_IRQ_EN);
++ UDCREG (UDC_DMA_IRQ_EN);
++
++ UDCDBG ("initialize SYSCON1");
++ outw (UDC_Self_Pwr | UDC_Pullup_En, UDC_SYSCON1);
++ UDCREG (UDC_SYSCON1);
++
++ return 0;
++}
++
++/* Stall endpoint */
++static void udc_stall_ep (unsigned int ep_addr)
++{
++ /*int ep_addr = PHYS_EP_TO_EP_ADDR(ep); */
++ int ep_num = ep_addr & USB_ENDPOINT_NUMBER_MASK;
++
++ UDCDBGA ("stall ep_addr %d", ep_addr);
++
++ /* REVISIT?
++ * The OMAP TRM section 14.2.4.2 says we must check that the FIFO
++ * is empty before halting the endpoint. The current implementation
++ * doesn't check that the FIFO is empty.
++ */
++
++ if (!ep_num) {
++ outw (UDC_Stall_Cmd, UDC_SYSCON2);
++ } else if ((ep_addr & USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT) {
++ if (inw (UDC_EP_RX (ep_num)) & UDC_EPn_RX_Valid) {
++ /* we have a valid rx endpoint, so halt it */
++ outw (UDC_EP_Sel | ep_num, UDC_EP_NUM);
++ outw (UDC_Set_Halt, UDC_CTRL);
++ outw (ep_num, UDC_EP_NUM);
++ }
++ } else {
++ if (inw (UDC_EP_TX (ep_num)) & UDC_EPn_TX_Valid) {
++ /* we have a valid tx endpoint, so halt it */
++ outw (UDC_EP_Sel | UDC_EP_Dir | ep_num, UDC_EP_NUM);
++ outw (UDC_Set_Halt, UDC_CTRL);
++ outw (ep_num, UDC_EP_NUM);
++ }
++ }
++}
++
++/* Reset endpoint */
++#if 0
++static void udc_reset_ep (unsigned int ep_addr)
++{
++ /*int ep_addr = PHYS_EP_TO_EP_ADDR(ep); */
++ int ep_num = ep_addr & USB_ENDPOINT_NUMBER_MASK;
++
++ UDCDBGA ("reset ep_addr %d", ep_addr);
++
++ if (!ep_num) {
++ /* control endpoint 0 can't be reset */
++ } else if ((ep_addr & USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT) {
++ UDCDBGA ("UDC_EP_RX(%d) = 0x%04x", ep_num,
++ inw (UDC_EP_RX (ep_num)));
++ if (inw (UDC_EP_RX (ep_num)) & UDC_EPn_RX_Valid) {
++ /* we have a valid rx endpoint, so reset it */
++ outw (ep_num | UDC_EP_Sel, UDC_EP_NUM);
++ outw (UDC_Reset_EP, UDC_CTRL);
++ outw (ep_num, UDC_EP_NUM);
++ UDCDBGA ("OUT endpoint %d reset", ep_num);
++ }
++ } else {
++ UDCDBGA ("UDC_EP_TX(%d) = 0x%04x", ep_num,
++ inw (UDC_EP_TX (ep_num)));
++ /* Resetting of tx endpoints seems to be causing the USB function
++ * module to fail, which causes problems when the driver is
++ * uninstalled. We'll skip resetting tx endpoints for now until
++ * we figure out what the problem is.
++ */
++#if 0
++ if (inw (UDC_EP_TX (ep_num)) & UDC_EPn_TX_Valid) {
++ /* we have a valid tx endpoint, so reset it */
++ outw (ep_num | UDC_EP_Dir | UDC_EP_Sel, UDC_EP_NUM);
++ outw (UDC_Reset_EP, UDC_CTRL);
++ outw (ep_num | UDC_EP_Dir, UDC_EP_NUM);
++ UDCDBGA ("IN endpoint %d reset", ep_num);
++ }
++#endif
++ }
++}
++#endif
++
++/* ************************************************************************** */
++
++/**
++ * udc_check_ep - check logical endpoint
++ *
++ * Return physical endpoint number to use for this logical endpoint or zero if not valid.
++ */
++#if 0
++int udc_check_ep (int logical_endpoint, int packetsize)
++{
++ if ((logical_endpoint == 0x80) ||
++ ((logical_endpoint & 0x8f) != logical_endpoint)) {
++ return 0;
++ }
++
++ switch (packetsize) {
++ case 8:
++ case 16:
++ case 32:
++ case 64:
++ case 128:
++ case 256:
++ case 512:
++ break;
++ default:
++ return 0;
++ }
++
++ return EP_ADDR_TO_PHYS_EP (logical_endpoint);
++}
++#endif
++
++/*
++ * udc_setup_ep - setup endpoint
++ *
++ * Associate a physical endpoint with endpoint_instance
++ */
++void udc_setup_ep (struct usb_device_instance *device,
++ unsigned int ep, struct usb_endpoint_instance *endpoint)
++{
++ UDCDBGA ("setting up endpoint addr %x", endpoint->endpoint_address);
++
++ /* This routine gets called by bi_modinit for endpoint 0 and from
++ * bi_config for all of the other endpoints. bi_config gets called
++ * during the DEVICE_CREATE, DEVICE_CONFIGURED, and
++ * DEVICE_SET_INTERFACE events. We need to reconfigure the OMAP packet
++ * RAM after bi_config scans the selected device configuration and
++ * initializes the endpoint structures, but before this routine enables
++ * the OUT endpoint FIFOs. Since bi_config calls this routine in a
++ * loop for endpoints 1 through UDC_MAX_ENDPOINTS, we reconfigure our
++ * packet RAM here when ep==1.
++ * I really hate to do this here, but it seems like the API exported
++ * by the USB bus interface controller driver to the usbd-bi module
++ * isn't quite right so there is no good place to do this.
++ */
++ if (ep == 1) {
++ omap1510_deconfigure_device ();
++ omap1510_configure_device (device);
++ }
++
++ if (endpoint && (ep < UDC_MAX_ENDPOINTS)) {
++ int ep_addr = endpoint->endpoint_address;
++
++ if (!ep_addr) {
++ /* nothing to do for endpoint 0 */
++ } else if ((ep_addr & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN) {
++ /* nothing to do for IN (tx) endpoints */
++ } else { /* OUT (rx) endpoint */
++ if (endpoint->rcv_packetSize) {
++ /*struct urb* urb = &(urb_out_array[ep&0xFF]); */
++ /*urb->endpoint = endpoint; */
++ /*urb->device = device; */
++ /*urb->buffer_length = sizeof(urb->buffer); */
++
++ /*endpoint->rcv_urb = urb; */
++ omap1510_prepare_endpoint_for_rx (ep_addr);
++ }
++ }
++ }
++}
++
++/**
++ * udc_disable_ep - disable endpoint
++ * @ep:
++ *
++ * Disable specified endpoint
++ */
++#if 0
++void udc_disable_ep (unsigned int ep_addr)
++{
++ /*int ep_addr = PHYS_EP_TO_EP_ADDR(ep); */
++ int ep_num = ep_addr & USB_ENDPOINT_NUMBER_MASK;
++ struct usb_endpoint_instance *endpoint = omap1510_find_ep (ep_addr); /*udc_device->bus->endpoint_array + ep; */
++
++ UDCDBGA ("disable ep_addr %d", ep_addr);
++
++ if (!ep_num) {
++ /* nothing to do for endpoint 0 */ ;
++ } else if ((ep_addr & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN) {
++ if (endpoint->tx_packetSize) {
++ /* we have a valid tx endpoint */
++ /*usbd_flush_tx(endpoint); */
++ endpoint->tx_urb = NULL;
++ }
++ } else {
++ if (endpoint->rcv_packetSize) {
++ /* we have a valid rx endpoint */
++ /*usbd_flush_rcv(endpoint); */
++ endpoint->rcv_urb = NULL;
++ }
++ }
++}
++#endif
++
++/* ************************************************************************** */
++
++/**
++ * udc_connected - is the USB cable connected
++ *
++ * Return non-zero if cable is connected.
++ */
++#if 0
++int udc_connected (void)
++{
++ return ((inw (UDC_DEVSTAT) & UDC_ATT) == UDC_ATT);
++}
++#endif
++
++/* Turn on the USB connection by enabling the pullup resistor */
++void udc_connect (void)
++{
++ UDCDBG ("connect, enable Pullup");
++}
++
++/* Turn off the USB connection by disabling the pullup resistor */
++void udc_disconnect (void)
++{
++ UDCDBG ("disconnect, disable Pullup");
++}
++
++/* ************************************************************************** */
++
++
++/*
++ * udc_disable_interrupts - disable interrupts
++ * switch off interrupts
++ */
++#if 0
++void udc_disable_interrupts (struct usb_device_instance *device)
++{
++ UDCDBG ("disabling all interrupts");
++ outw (0, UDC_IRQ_EN);
++}
++#endif
++
++/* ************************************************************************** */
++
++/**
++ * udc_ep0_packetsize - return ep0 packetsize
++ */
++#if 0
++int udc_ep0_packetsize (void)
++{
++ return EP0_PACKETSIZE;
++}
++#endif
++
++/* Switch on the UDC */
++void udc_enable (struct usb_device_instance *device)
++{
++ UDCDBGA ("enable device %p, status %d", device, device->status);
++
++ /* initialize driver state variables */
++ udc_devstat = 0;
++
++ /* Save the device structure pointer */
++ udc_device = device;
++
++ /* Setup ep0 urb */
++ if (!ep0_urb) {
++ ep0_urb =
++ usbd_alloc_urb (udc_device,
++ udc_device->bus->endpoint_array);
++ } else {
++ serial_printf ("udc_enable: ep0_urb already allocated %p\n",
++ ep0_urb);
++ }
++
++#ifdef FIXME
++ /* The VBUS_MODE bit selects whether VBUS detection is done via
++ * software (1) or hardware (0). When software detection is
++ * selected, VBUS_CTRL selects whether USB is not connected (0)
++ * or connected (1).
++ */
++ outl (inl (FUNC_MUX_CTRL_0) | UDC_VBUS_CTRL | UDC_VBUS_MODE,
++ FUNC_MUX_CTRL_0);
++ UDCREGL (FUNC_MUX_CTRL_0);
++#endif
++
++ s3c2410_configure_device(device);
++}
++
++/* Switch off the UDC */
++void udc_disable (void)
++{
++ UDCDBG ("disable UDC");
++
++ s3c2410_deconfigure_device();
++
++#ifdef FIXME
++ /* The VBUS_MODE bit selects whether VBUS detection is done via
++ * software (1) or hardware (0). When software detection is
++ * selected, VBUS_CTRL selects whether USB is not connected (0)
++ * or connected (1).
++ */
++ outl (inl (FUNC_MUX_CTRL_0) | UDC_VBUS_MODE, FUNC_MUX_CTRL_0);
++ outl (inl (FUNC_MUX_CTRL_0) & ~UDC_VBUS_CTRL, FUNC_MUX_CTRL_0);
++ UDCREGL (FUNC_MUX_CTRL_0);
++#endif
++
++ /* Free ep0 URB */
++ if (ep0_urb) {
++ /*usbd_dealloc_urb(ep0_urb); */
++ ep0_urb = NULL;
++ }
++
++ /* Reset device pointer.
++ * We ought to do this here to balance the initialization of udc_device
++ * in udc_enable, but some of our other exported functions get called
++ * by the bus interface driver after udc_disable, so we have to hang on
++ * to the device pointer to avoid a null pointer dereference. */
++ /* udc_device = NULL; */
++}
++
++/**
++ * udc_startup - allow udc code to do any additional startup
++ */
++void udc_startup_events (struct usb_device_instance *device)
++{
++ /* The DEVICE_INIT event puts the USB device in the state STATE_INIT. */
++ usbd_device_event_irq (device, DEVICE_INIT, 0);
++
++ /* The DEVICE_CREATE event puts the USB device in the state
++ * STATE_ATTACHED.
++ */
++ usbd_device_event_irq (device, DEVICE_CREATE, 0);
++
++ /* Some USB controller driver implementations signal
++ * DEVICE_HUB_CONFIGURED and DEVICE_RESET events here.
++ * DEVICE_HUB_CONFIGURED causes a transition to the state STATE_POWERED,
++ * and DEVICE_RESET causes a transition to the state STATE_DEFAULT.
++ * The OMAP USB client controller has the capability to detect when the
++ * USB cable is connected to a powered USB bus via the ATT bit in the
++ * DEVSTAT register, so we will defer the DEVICE_HUB_CONFIGURED and
++ * DEVICE_RESET events until later.
++ */
++
++ udc_enable (device);
++}
++
++#endif
+diff --git a/examples/Makefile b/examples/Makefile
+index a342d75..082e52e 100644
+--- a/examples/Makefile
++++ b/examples/Makefile
+@@ -60,7 +60,7 @@ endif
+ include $(TOPDIR)/config.mk
+
+ SREC = hello_world.srec
+-BIN = hello_world.bin hello_world
++BIN = hello_world hello_world.bin
+
+ ifeq ($(CPU),mpc8xx)
+ SREC = test_burst.srec
+@@ -122,7 +122,7 @@ clibdir := $(shell dirname `$(CC) $(CFLA
+
+ CPPFLAGS += -I..
+
+-all: .depend $(OBJS) $(LIB) $(SREC) $(BIN)
++all: .depend $(OBJS) $(LIB) $(BIN) $(SREC)
+
+ #########################################################################
+ $(LIB): .depend $(LIBOBJS)
+diff --git a/include/asm-arm/arch-s3c24x0/mmc.h b/include/asm-arm/arch-s3c24x0/mmc.h
+new file mode 100644
+index 0000000..d9178f3
+--- /dev/null
++++ b/include/asm-arm/arch-s3c24x0/mmc.h
+@@ -0,0 +1,112 @@
++/*
++ * linux/drivers/mmc/mmc_pxa.h
++ *
++ * Author: Vladimir Shebordaev, Igor Oblakov
++ * Copyright: MontaVista Software Inc.
++ *
++ * $Id: mmc_pxa.h,v 0.3.1.6 2002/09/25 19:25:48 ted Exp ted $
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++#ifndef __MMC_PXA_P_H__
++#define __MMC_PXA_P_H__
++
++#include <asm/arch/regs-sdi.h>
++
++#define MMC_DEFAULT_RCA (1<<16)
++
++#define MMC_BLOCK_SIZE 512
++#define MMC_CMD_RESET 0
++#define MMC_CMD_SEND_OP_COND 1
++#define MMC_CMD_ALL_SEND_CID 2
++#define MMC_CMD_SET_RCA 3
++#define MMC_CMD_SELECT_CARD 7
++#define MMC_CMD_SEND_CSD 9
++#define MMC_CMD_SEND_CID 10
++#define MMC_CMD_SEND_STATUS 13
++#define MMC_CMD_SET_BLOCKLEN 16
++#define MMC_CMD_READ_BLOCK 17
++#define MMC_CMD_RD_BLK_MULTI 18
++#define MMC_CMD_WRITE_BLOCK 24
++
++#define MMC_MAX_BLOCK_SIZE 512
++
++#define MMC_R1_IDLE_STATE 0x01
++#define MMC_R1_ERASE_STATE 0x02
++#define MMC_R1_ILLEGAL_CMD 0x04
++#define MMC_R1_COM_CRC_ERR 0x08
++#define MMC_R1_ERASE_SEQ_ERR 0x01
++#define MMC_R1_ADDR_ERR 0x02
++#define MMC_R1_PARAM_ERR 0x04
++
++#define MMC_R1B_WP_ERASE_SKIP 0x0002
++#define MMC_R1B_ERR 0x0004
++#define MMC_R1B_CC_ERR 0x0008
++#define MMC_R1B_CARD_ECC_ERR 0x0010
++#define MMC_R1B_WP_VIOLATION 0x0020
++#define MMC_R1B_ERASE_PARAM 0x0040
++#define MMC_R1B_OOR 0x0080
++#define MMC_R1B_IDLE_STATE 0x0100
++#define MMC_R1B_ERASE_RESET 0x0200
++#define MMC_R1B_ILLEGAL_CMD 0x0400
++#define MMC_R1B_COM_CRC_ERR 0x0800
++#define MMC_R1B_ERASE_SEQ_ERR 0x1000
++#define MMC_R1B_ADDR_ERR 0x2000
++#define MMC_R1B_PARAM_ERR 0x4000
++
++typedef struct mmc_cid
++{
++/* FIXME: BYTE_ORDER */
++ uchar year:4,
++ month:4;
++ uchar sn[3];
++ uchar fwrev:4,
++ hwrev:4;
++ uchar name[6];
++ uchar id[3];
++} mmc_cid_t;
++
++typedef struct mmc_csd
++{
++ uchar ecc:2,
++ file_format:2,
++ tmp_write_protect:1,
++ perm_write_protect:1,
++ copy:1,
++ file_format_grp:1;
++ uint64_t content_prot_app:1,
++ rsvd3:4,
++ write_bl_partial:1,
++ write_bl_len:4,
++ r2w_factor:3,
++ default_ecc:2,
++ wp_grp_enable:1,
++ wp_grp_size:5,
++ erase_grp_mult:5,
++ erase_grp_size:5,
++ c_size_mult1:3,
++ vdd_w_curr_max:3,
++ vdd_w_curr_min:3,
++ vdd_r_curr_max:3,
++ vdd_r_curr_min:3,
++ c_size:12,
++ rsvd2:2,
++ dsr_imp:1,
++ read_blk_misalign:1,
++ write_blk_misalign:1,
++ read_bl_partial:1;
++
++ ushort read_bl_len:4,
++ ccc:12;
++ uchar tran_speed;
++ uchar nsac;
++ uchar taac;
++ uchar rsvd1:2,
++ spec_vers:4,
++ csd_structure:2;
++} mmc_csd_t;
++
++
++#endif /* __MMC_PXA_P_H__ */
+diff --git a/include/asm-arm/arch-s3c24x0/regs-sdi.h b/include/asm-arm/arch-s3c24x0/regs-sdi.h
+new file mode 100644
+index 0000000..9b5b9d1
+--- /dev/null
++++ b/include/asm-arm/arch-s3c24x0/regs-sdi.h
+@@ -0,0 +1,110 @@
++/* linux/include/asm/arch-s3c2410/regs-sdi.h
++ *
++ * Copyright (c) 2004 Simtec Electronics <linux at simtec.co.uk>
++ * http://www.simtec.co.uk/products/SWLINUX/
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * S3C2410 MMC/SDIO register definitions
++ *
++ * Changelog:
++ * 18-Aug-2004 Ben Dooks Created initial file
++ * 29-Nov-2004 Koen Martens Added some missing defines, fixed duplicates
++ * 29-Nov-2004 Ben Dooks Updated Koen's patch
++*/
++
++#ifndef __ASM_ARM_REGS_SDI
++#define __ASM_ARM_REGS_SDI "regs-sdi.h"
++
++#define S3C2440_SDICON_SDRESET (1<<8)
++#define S3C2440_SDICON_MMCCLOCK (1<<5)
++#define S3C2410_SDICON_BYTEORDER (1<<4)
++#define S3C2410_SDICON_SDIOIRQ (1<<3)
++#define S3C2410_SDICON_RWAITEN (1<<2)
++#define S3C2410_SDICON_FIFORESET (1<<1)
++#define S3C2410_SDICON_CLOCKTYPE (1<<0)
++
++#define S3C2410_SDICMDCON_ABORT (1<<12)
++#define S3C2410_SDICMDCON_WITHDATA (1<<11)
++#define S3C2410_SDICMDCON_LONGRSP (1<<10)
++#define S3C2410_SDICMDCON_WAITRSP (1<<9)
++#define S3C2410_SDICMDCON_CMDSTART (1<<8)
++#define S3C2410_SDICMDCON_SENDERHOST (1<<6)
++#define S3C2410_SDICMDCON_INDEX (0x3f)
++
++#define S3C2410_SDICMDSTAT_CRCFAIL (1<<12)
++#define S3C2410_SDICMDSTAT_CMDSENT (1<<11)
++#define S3C2410_SDICMDSTAT_CMDTIMEOUT (1<<10)
++#define S3C2410_SDICMDSTAT_RSPFIN (1<<9)
++#define S3C2410_SDICMDSTAT_XFERING (1<<8)
++#define S3C2410_SDICMDSTAT_INDEX (0xff)
++
++#define S3C2440_SDIDCON_DS_BYTE (0<<22)
++#define S3C2440_SDIDCON_DS_HALFWORD (1<<22)
++#define S3C2440_SDIDCON_DS_WORD (2<<22)
++#define S3C2410_SDIDCON_IRQPERIOD (1<<21)
++#define S3C2410_SDIDCON_TXAFTERRESP (1<<20)
++#define S3C2410_SDIDCON_RXAFTERCMD (1<<19)
++#define S3C2410_SDIDCON_BUSYAFTERCMD (1<<18)
++#define S3C2410_SDIDCON_BLOCKMODE (1<<17)
++#define S3C2410_SDIDCON_WIDEBUS (1<<16)
++#define S3C2410_SDIDCON_DMAEN (1<<15)
++#define S3C2410_SDIDCON_STOP (1<<14)
++#define S3C2440_SDIDCON_DATSTART (1<<14)
++#define S3C2410_SDIDCON_DATMODE (3<<12)
++#define S3C2410_SDIDCON_BLKNUM (0x7ff)
++
++/* constants for S3C2410_SDIDCON_DATMODE */
++#define S3C2410_SDIDCON_XFER_READY (0<<12)
++#define S3C2410_SDIDCON_XFER_CHKSTART (1<<12)
++#define S3C2410_SDIDCON_XFER_RXSTART (2<<12)
++#define S3C2410_SDIDCON_XFER_TXSTART (3<<12)
++
++#define S3C2410_SDIDCON_BLKNUM_MASK (0xFFF)
++#define S3C2410_SDIDCNT_BLKNUM_SHIFT (12)
++
++#define S3C2410_SDIDSTA_RDYWAITREQ (1<<10)
++#define S3C2410_SDIDSTA_SDIOIRQDETECT (1<<9)
++#define S3C2410_SDIDSTA_FIFOFAIL (1<<8) /* reserved on 2440 */
++#define S3C2410_SDIDSTA_CRCFAIL (1<<7)
++#define S3C2410_SDIDSTA_RXCRCFAIL (1<<6)
++#define S3C2410_SDIDSTA_DATATIMEOUT (1<<5)
++#define S3C2410_SDIDSTA_XFERFINISH (1<<4)
++#define S3C2410_SDIDSTA_BUSYFINISH (1<<3)
++#define S3C2410_SDIDSTA_SBITERR (1<<2) /* reserved on 2410a/2440 */
++#define S3C2410_SDIDSTA_TXDATAON (1<<1)
++#define S3C2410_SDIDSTA_RXDATAON (1<<0)
++
++#define S3C2440_SDIFSTA_FIFORESET (1<<16)
++#define S3C2440_SDIFSTA_FIFOFAIL (3<<14) /* 3 is correct (2 bits) */
++#define S3C2410_SDIFSTA_TFDET (1<<13)
++#define S3C2410_SDIFSTA_RFDET (1<<12)
++#define S3C2410_SDIFSTA_TFHALF (1<<11)
++#define S3C2410_SDIFSTA_TFEMPTY (1<<10)
++#define S3C2410_SDIFSTA_RFLAST (1<<9)
++#define S3C2410_SDIFSTA_RFFULL (1<<8)
++#define S3C2410_SDIFSTA_RFHALF (1<<7)
++#define S3C2410_SDIFSTA_COUNTMASK (0x7f)
++
++#define S3C2410_SDIIMSK_RESPONSECRC (1<<17)
++#define S3C2410_SDIIMSK_CMDSENT (1<<16)
++#define S3C2410_SDIIMSK_CMDTIMEOUT (1<<15)
++#define S3C2410_SDIIMSK_RESPONSEND (1<<14)
++#define S3C2410_SDIIMSK_READWAIT (1<<13)
++#define S3C2410_SDIIMSK_SDIOIRQ (1<<12)
++#define S3C2410_SDIIMSK_FIFOFAIL (1<<11)
++#define S3C2410_SDIIMSK_CRCSTATUS (1<<10)
++#define S3C2410_SDIIMSK_DATACRC (1<<9)
++#define S3C2410_SDIIMSK_DATATIMEOUT (1<<8)
++#define S3C2410_SDIIMSK_DATAFINISH (1<<7)
++#define S3C2410_SDIIMSK_BUSYFINISH (1<<6)
++#define S3C2410_SDIIMSK_SBITERR (1<<5) /* reserved 2440/2410a */
++#define S3C2410_SDIIMSK_TXFIFOHALF (1<<4)
++#define S3C2410_SDIIMSK_TXFIFOEMPTY (1<<3)
++#define S3C2410_SDIIMSK_RXFIFOLAST (1<<2)
++#define S3C2410_SDIIMSK_RXFIFOFULL (1<<1)
++#define S3C2410_SDIIMSK_RXFIFOHALF (1<<0)
++
++#endif /* __ASM_ARM_REGS_SDI */
+diff --git a/include/asm-arm/mach-types.h b/include/asm-arm/mach-types.h
+index 7d7888e..4e9c6d9 100644
+--- a/include/asm-arm/mach-types.h
++++ b/include/asm-arm/mach-types.h
+@@ -424,7 +424,7 @@ #define MACH_TYPE_MT02 4
+ #define MACH_TYPE_MPORT3S 411
+ #define MACH_TYPE_RA_ALPHA 412
+ #define MACH_TYPE_XCEP 413
+-#define MACH_TYPE_ARCOM_MERCURY 414
++#define MACH_TYPE_ARCOM_VULCAN 414
+ #define MACH_TYPE_STARGATE 415
+ #define MACH_TYPE_ARMADILLOJ 416
+ #define MACH_TYPE_ELROY_JACK 417
+@@ -457,7 +457,7 @@ #define MACH_TYPE_ESL_SARVA 4
+ #define MACH_TYPE_XM250 444
+ #define MACH_TYPE_T6TC1XB 445
+ #define MACH_TYPE_ESS710 446
+-#define MACH_TYPE_MX3ADS 447
++#define MACH_TYPE_MX31ADS 447
+ #define MACH_TYPE_HIMALAYA 448
+ #define MACH_TYPE_BOLFENK 449
+ #define MACH_TYPE_AT91RM9200KR 450
+@@ -736,7 +736,308 @@ #define MACH_TYPE_ADSPORTAL 7
+ #define MACH_TYPE_LN2410SBC 725
+ #define MACH_TYPE_CB3RUFC 726
+ #define MACH_TYPE_MP2USB 727
+-#define MACH_TYPE_PDNB3 1002
++#define MACH_TYPE_NTNP425C 728
++#define MACH_TYPE_COLIBRI 729
++#define MACH_TYPE_PCM7220 730
++#define MACH_TYPE_GATEWAY7001 731
++#define MACH_TYPE_PCM027 732
++#define MACH_TYPE_CMPXA 733
++#define MACH_TYPE_ANUBIS 734
++#define MACH_TYPE_ITE8152 735
++#define MACH_TYPE_LPC3XXX 736
++#define MACH_TYPE_PUPPETEER 737
++#define MACH_TYPE_MACH_VADATECH 738
++#define MACH_TYPE_E570 739
++#define MACH_TYPE_X50 740
++#define MACH_TYPE_RECON 741
++#define MACH_TYPE_XBOARDGP8 742
++#define MACH_TYPE_FPIC2 743
++#define MACH_TYPE_AKITA 744
++#define MACH_TYPE_A81 745
++#define MACH_TYPE_SVM_SC25X 746
++#define MACH_TYPE_VADATECH020 747
++#define MACH_TYPE_TLI 748
++#define MACH_TYPE_EDB9315LC 749
++#define MACH_TYPE_PASSEC 750
++#define MACH_TYPE_DS_TIGER 751
++#define MACH_TYPE_E310 752
++#define MACH_TYPE_E330 753
++#define MACH_TYPE_RT3000 754
++#define MACH_TYPE_NOKIA770 755
++#define MACH_TYPE_PNX0106 756
++#define MACH_TYPE_HX21XX 757
++#define MACH_TYPE_FARADAY 758
++#define MACH_TYPE_SBC9312 759
++#define MACH_TYPE_BATMAN 760
++#define MACH_TYPE_JPD201 761
++#define MACH_TYPE_MIPSA 762
++#define MACH_TYPE_KACOM 763
++#define MACH_TYPE_SWARCOCPU 764
++#define MACH_TYPE_SWARCODSL 765
++#define MACH_TYPE_BLUEANGEL 766
++#define MACH_TYPE_HAIRYGRAMA 767
++#define MACH_TYPE_BANFF 768
++#define MACH_TYPE_CARMEVA 769
++#define MACH_TYPE_SAM255 770
++#define MACH_TYPE_PPM10 771
++#define MACH_TYPE_EDB9315A 772
++#define MACH_TYPE_SUNSET 773
++#define MACH_TYPE_STARGATE2 774
++#define MACH_TYPE_INTELMOTE2 775
++#define MACH_TYPE_TRIZEPS4 776
++#define MACH_TYPE_MAINSTONE2 777
++#define MACH_TYPE_EZ_IXP42X 778
++#define MACH_TYPE_TAPWAVE_ZODIAC 779
++#define MACH_TYPE_UNIVERSALMETER 780
++#define MACH_TYPE_HICOARM9 781
++#define MACH_TYPE_PNX4008 782
++#define MACH_TYPE_KWS6000 783
++#define MACH_TYPE_PORTUX920T 784
++#define MACH_TYPE_EZ_X5 785
++#define MACH_TYPE_OMAP_RUDOLPH 786
++#define MACH_TYPE_CPUAT91 787
++#define MACH_TYPE_REA9200 788
++#define MACH_TYPE_ACTS_PUNE_SA1110 789
++#define MACH_TYPE_IXP425 790
++#define MACH_TYPE_ARGONPLUSODYSSEY 791
++#define MACH_TYPE_PERCH 792
++#define MACH_TYPE_EIS05R1 793
++#define MACH_TYPE_PEPPERPAD 794
++#define MACH_TYPE_SB3010 795
++#define MACH_TYPE_RM9200 796
++#define MACH_TYPE_DMA03 797
++#define MACH_TYPE_ROAD_S101 798
++#define MACH_TYPE_IQ_NEXTGEN_A 799
++#define MACH_TYPE_IQ_NEXTGEN_B 800
++#define MACH_TYPE_IQ_NEXTGEN_C 801
++#define MACH_TYPE_IQ_NEXTGEN_D 802
++#define MACH_TYPE_IQ_NEXTGEN_E 803
++#define MACH_TYPE_MALLOW_AT91 804
++#define MACH_TYPE_CYBERTRACKER_I 805
++#define MACH_TYPE_GESBC931X 806
++#define MACH_TYPE_CENTIPAD 807
++#define MACH_TYPE_ARMSOC 808
++#define MACH_TYPE_SE4200 809
++#define MACH_TYPE_EMS197A 810
++#define MACH_TYPE_MICRO9 811
++#define MACH_TYPE_MICRO9L 812
++#define MACH_TYPE_UC5471DSP 813
++#define MACH_TYPE_SJ5471ENG 814
++#define MACH_TYPE_CMPXA26X 815
++#define MACH_TYPE_NC 816
++#define MACH_TYPE_OMAP_PALMTE 817
++#define MACH_TYPE_AJAX52X 818
++#define MACH_TYPE_SIRIUSTAR 819
++#define MACH_TYPE_IODATA_HDLG 820
++#define MACH_TYPE_AT91RM9200UTL 821
++#define MACH_TYPE_BIOSAFE 822
++#define MACH_TYPE_MP1000 823
++#define MACH_TYPE_PARSY 824
++#define MACH_TYPE_CCXP 825
++#define MACH_TYPE_OMAP_GSAMPLE 826
++#define MACH_TYPE_REALVIEW_EB 827
++#define MACH_TYPE_SAMOA 828
++#define MACH_TYPE_T3XSCALE 829
++#define MACH_TYPE_I878 830
++#define MACH_TYPE_BORZOI 831
++#define MACH_TYPE_GECKO 832
++#define MACH_TYPE_DS101 833
++#define MACH_TYPE_OMAP_PALMTT2 834
++#define MACH_TYPE_XSCALE_PALMLD 835
++#define MACH_TYPE_CC9C 836
++#define MACH_TYPE_SBC1670 837
++#define MACH_TYPE_IXDP28X5 838
++#define MACH_TYPE_OMAP_PALMTT 839
++#define MACH_TYPE_ML696K 840
++#define MACH_TYPE_ARCOM_ZEUS 841
++#define MACH_TYPE_OSIRIS 842
++#define MACH_TYPE_MAESTRO 843
++#define MACH_TYPE_TUNGE2 844
++#define MACH_TYPE_IXBBM 845
++#define MACH_TYPE_MX27 846
++#define MACH_TYPE_AX8004 847
++#define MACH_TYPE_AT91SAM9261EK 848
++#define MACH_TYPE_LOFT 849
++#define MACH_TYPE_MAGPIE 850
++#define MACH_TYPE_MX21 851
++#define MACH_TYPE_MB87M3400 852
++#define MACH_TYPE_MGUARD_DELTA 853
++#define MACH_TYPE_DAVINCI_DVDP 854
++#define MACH_TYPE_HTCUNIVERSAL 855
++#define MACH_TYPE_TPAD 856
++#define MACH_TYPE_ROVERP3 857
++#define MACH_TYPE_JORNADA928 858
++#define MACH_TYPE_MV88FXX81 859
++#define MACH_TYPE_STMP36XX 860
++#define MACH_TYPE_SXNI79524 861
++#define MACH_TYPE_AMS_DELTA 862
++#define MACH_TYPE_URANIUM 863
++#define MACH_TYPE_UCON 864
++#define MACH_TYPE_NAS100D 865
++#define MACH_TYPE_L083_1000 866
++#define MACH_TYPE_EZX 867
++#define MACH_TYPE_PNX5220 868
++#define MACH_TYPE_BUTTE 869
++#define MACH_TYPE_SRM2 870
++#define MACH_TYPE_DSBR 871
++#define MACH_TYPE_CRYSTALBALL 872
++#define MACH_TYPE_TINYPXA27X 873
++#define MACH_TYPE_HERBIE 874
++#define MACH_TYPE_MAGICIAN 875
++#define MACH_TYPE_CM4002 876
++#define MACH_TYPE_B4 877
++#define MACH_TYPE_MAUI 878
++#define MACH_TYPE_CYBERTRACKER_G 879
++#define MACH_TYPE_NXDKN 880
++#define MACH_TYPE_MIO8390 881
++#define MACH_TYPE_OMI_BOARD 882
++#define MACH_TYPE_MX21CIV 883
++#define MACH_TYPE_MAHI_CDAC 884
++#define MACH_TYPE_XSCALE_PALMTX 885
++#define MACH_TYPE_S3C2413 887
++#define MACH_TYPE_SAMSYS_EP0 888
++#define MACH_TYPE_WG302V1 889
++#define MACH_TYPE_WG302V2 890
++#define MACH_TYPE_EB42X 891
++#define MACH_TYPE_IQ331ES 892
++#define MACH_TYPE_COSYDSP 893
++#define MACH_TYPE_UPLAT7D 894
++#define MACH_TYPE_PTDAVINCI 895
++#define MACH_TYPE_MBUS 896
++#define MACH_TYPE_NADIA2VB 897
++#define MACH_TYPE_R1000 898
++#define MACH_TYPE_HW90250 899
++#define MACH_TYPE_OMAP_2430SDP 900
++#define MACH_TYPE_DAVINCI_EVM 901
++#define MACH_TYPE_OMAP_TORNADO 902
++#define MACH_TYPE_OLOCREEK 903
++#define MACH_TYPE_PALMZ72 904
++#define MACH_TYPE_NXDB500 905
++#define MACH_TYPE_APF9328 906
++#define MACH_TYPE_OMAP_WIPOQ 907
++#define MACH_TYPE_OMAP_TWIP 908
++#define MACH_TYPE_XSCALE_PALMTREO650 909
++#define MACH_TYPE_ACUMEN 910
++#define MACH_TYPE_XP100 911
++#define MACH_TYPE_FS2410 912
++#define MACH_TYPE_PXA270_CERF 913
++#define MACH_TYPE_SQ2FTLPALM 914
++#define MACH_TYPE_BSEMSERVER 915
++#define MACH_TYPE_NETCLIENT 916
++#define MACH_TYPE_XSCALE_PALMTT5 917
++#define MACH_TYPE_OMAP_PALMTC 918
++#define MACH_TYPE_OMAP_APOLLON 919
++#define MACH_TYPE_ARGONLVEVB 920
++#define MACH_TYPE_REA_2D 921
++#define MACH_TYPE_TI3E524 922
++#define MACH_TYPE_ATEB9200 923
++#define MACH_TYPE_AUCKLAND 924
++#define MACH_TYPE_AK3320M 925
++#define MACH_TYPE_DURAMAX 926
++#define MACH_TYPE_N35 927
++#define MACH_TYPE_PRONGHORN 928
++#define MACH_TYPE_FUNDY 929
++#define MACH_TYPE_LOGICPD_PXA270 930
++#define MACH_TYPE_CPU777 931
++#define MACH_TYPE_SIMICON9201 932
++#define MACH_TYPE_LEAP2_HPM 933
++#define MACH_TYPE_CM922TXA10 934
++#define MACH_TYPE_PXA 935
++#define MACH_TYPE_SANDGATE2 936
++#define MACH_TYPE_SANDGATE2G 937
++#define MACH_TYPE_SANDGATE2P 938
++#define MACH_TYPE_FRED_JACK 939
++#define MACH_TYPE_TTG_COLOR1 940
++#define MACH_TYPE_NXEB500HMI 941
++#define MACH_TYPE_NETDCU8 942
++#define MACH_TYPE_ML675050_CPU_BOA 943
++#define MACH_TYPE_NG_FVX538 944
++#define MACH_TYPE_NG_FVS338 945
++#define MACH_TYPE_PNX4103 946
++#define MACH_TYPE_HESDB 947
++#define MACH_TYPE_XSILO 948
++#define MACH_TYPE_ESPRESSO 949
++#define MACH_TYPE_EMLC 950
++#define MACH_TYPE_SISTERON 951
++#define MACH_TYPE_RX1950 952
++#define MACH_TYPE_TSC_VENUS 953
++#define MACH_TYPE_DS101J 954
++#define MACH_TYPE_MXC30030ADS 955
++#define MACH_TYPE_FUJITSU_WIMAXSOC 956
++#define MACH_TYPE_DUALPCMODEM 957
++#define MACH_TYPE_GESBC9312 958
++#define MACH_TYPE_HTCAPACHE 959
++#define MACH_TYPE_IXDP435 960
++#define MACH_TYPE_CATPROVT100 961
++#define MACH_TYPE_PICOTUX1XX 962
++#define MACH_TYPE_PICOTUX2XX 963
++#define MACH_TYPE_DSMG600 964
++#define MACH_TYPE_EMPC2 965
++#define MACH_TYPE_VENTURA 966
++#define MACH_TYPE_PHIDGET_SBC 967
++#define MACH_TYPE_IJ3K 968
++#define MACH_TYPE_PISGAH 969
++#define MACH_TYPE_OMAP_FSAMPLE 970
++#define MACH_TYPE_SG720 971
++#define MACH_TYPE_REDFOX 972
++#define MACH_TYPE_MYSH_EP9315_1 973
++#define MACH_TYPE_TPF106 974
++#define MACH_TYPE_AT91RM9200KG 975
++#define MACH_TYPE_SLEDB 976
++#define MACH_TYPE_ONTRACK 977
++#define MACH_TYPE_PM1200 978
++#define MACH_TYPE_ESS24XXX 979
++#define MACH_TYPE_COREMP7 980
++#define MACH_TYPE_NEXCODER_6446 981
++#define MACH_TYPE_STVC8380 982
++#define MACH_TYPE_TEKLYNX 983
++#define MACH_TYPE_CARBONADO 984
++#define MACH_TYPE_SYSMOS_MP730 985
++#define MACH_TYPE_SNAPPER_CL15 986
++#define MACH_TYPE_PGIGIM 987
++#define MACH_TYPE_PTX9160P2 988
++#define MACH_TYPE_DCORE1 989
++#define MACH_TYPE_VICTORPXA 990
++#define MACH_TYPE_MX2DTB 991
++#define MACH_TYPE_PXA_IREX_ER0100 992
++#define MACH_TYPE_OMAP_PALMZ71 993
++#define MACH_TYPE_BARTEC_DEG 994
++#define MACH_TYPE_HW50251 995
++#define MACH_TYPE_IBOX 996
++#define MACH_TYPE_ATLASLH7A404 997
++#define MACH_TYPE_PT2026 998
++#define MACH_TYPE_HTCALPINE 999
++#define MACH_TYPE_BARTEC_VTU 1000
++#define MACH_TYPE_VCOREII 1001
++#define MACH_TYPE_PDNB3 1002
++#define MACH_TYPE_HTCBEETLES 1003
++#define MACH_TYPE_S3C6400 1004
++#define MACH_TYPE_S3C2443 1005
++#define MACH_TYPE_OMAP_LDK 1006
++#define MACH_TYPE_SMDK2460 1007
++#define MACH_TYPE_SMDK2440 1008
++#define MACH_TYPE_SMDK2412 1009
++#define MACH_TYPE_WEBBOX 1010
++#define MACH_TYPE_CWWNDP 1011
++#define MACH_TYPE_DRAGON 1012
++#define MACH_TYPE_OPENDO_CPU_BOARD 1013
++#define MACH_TYPE_CCM2200 1014
++#define MACH_TYPE_ETWARM 1015
++#define MACH_TYPE_M93030 1016
++#define MACH_TYPE_CC7U 1017
++#define MACH_TYPE_MTT_RANGER 1018
++#define MACH_TYPE_NEXUS 1019
++#define MACH_TYPE_DESMAN 1020
++#define MACH_TYPE_BKDE303 1021
++#define MACH_TYPE_SMDK2413 1022
++#define MACH_TYPE_AML_M7200 1023
++#define MACH_TYPE_AML_M5900 1024
++#define MACH_TYPE_SG640 1025
++#define MACH_TYPE_EDG79524 1026
++#define MACH_TYPE_AI2410 1027
++#define MACH_TYPE_IXP465 1028
++#define MACH_TYPE_BALLOON3 1029
++#define MACH_TYPE_QT2410 1108
+
+ #ifdef CONFIG_ARCH_EBSA110
+ # ifdef machine_arch_type
+@@ -3541,9 +3842,9 @@ # define machine_arch_type __machine_ar
+ # else
+ # define machine_arch_type MACH_TYPE_RAMSES
+ # endif
+-# define machine_is_ramses() (machine_arch_type == MACH_TYPE_RAMSES)
++# define machine_is_mnci() (machine_arch_type == MACH_TYPE_RAMSES)
+ #else
+-# define machine_is_ramses() (0)
++# define machine_is_mnci() (0)
+ #endif
+
+ #ifdef CONFIG_ARCH_S28X
+@@ -4501,9 +4802,9 @@ # define machine_arch_type __machine_ar
+ # else
+ # define machine_arch_type MACH_TYPE_M825XX
+ # endif
+-# define machine_is_m825xx() (machine_arch_type == MACH_TYPE_M825XX)
++# define machine_is_comcerto() (machine_arch_type == MACH_TYPE_M825XX)
+ #else
+-# define machine_is_m825xx() (0)
++# define machine_is_comcerto() (0)
+ #endif
+
+ #ifdef CONFIG_SA1100_M7100
+@@ -5658,16 +5959,16 @@ #else
+ # define machine_is_xcep() (0)
+ #endif
+
+-#ifdef CONFIG_MACH_ARCOM_MERCURY
++#ifdef CONFIG_MACH_ARCOM_VULCAN
+ # ifdef machine_arch_type
+ # undef machine_arch_type
+ # define machine_arch_type __machine_arch_type
+ # else
+-# define machine_arch_type MACH_TYPE_ARCOM_MERCURY
++# define machine_arch_type MACH_TYPE_ARCOM_VULCAN
+ # endif
+-# define machine_is_arcom_mercury() (machine_arch_type == MACH_TYPE_ARCOM_MERCURY)
++# define machine_is_arcom_vulcan() (machine_arch_type == MACH_TYPE_ARCOM_VULCAN)
+ #else
+-# define machine_is_arcom_mercury() (0)
++# define machine_is_arcom_vulcan() (0)
+ #endif
+
+ #ifdef CONFIG_MACH_STARGATE
+@@ -6054,16 +6355,16 @@ #else
+ # define machine_is_ess710() (0)
+ #endif
+
+-#ifdef CONFIG_MACH_MX3ADS
++#ifdef CONFIG_MACH_MX31ADS
+ # ifdef machine_arch_type
+ # undef machine_arch_type
+ # define machine_arch_type __machine_arch_type
+ # else
+-# define machine_arch_type MACH_TYPE_MX3ADS
++# define machine_arch_type MACH_TYPE_MX31ADS
+ # endif
+-# define machine_is_mx3ads() (machine_arch_type == MACH_TYPE_MX3ADS)
++# define machine_is_mx31ads() (machine_arch_type == MACH_TYPE_MX31ADS)
+ #else
+-# define machine_is_mx3ads() (0)
++# define machine_is_mx31ads() (0)
+ #endif
+
+ #ifdef CONFIG_MACH_HIMALAYA
+@@ -7333,9 +7634,9 @@ # define machine_arch_type __machine_ar
+ # else
+ # define machine_arch_type MACH_TYPE_ARGONPLUSEVB
+ # endif
+-# define machine_is_argonplusevb() (machine_arch_type == MACH_TYPE_ARGONPLUSEVB)
++# define machine_is_i30030evb() (machine_arch_type == MACH_TYPE_ARGONPLUSEVB)
+ #else
+-# define machine_is_argonplusevb() (0)
++# define machine_is_i30030evb() (0)
+ #endif
+
+ #ifdef CONFIG_MACH_SCMA11EVB
+@@ -7345,9 +7646,9 @@ # define machine_arch_type __machine_ar
+ # else
+ # define machine_arch_type MACH_TYPE_SCMA11EVB
+ # endif
+-# define machine_is_scma11evb() (machine_arch_type == MACH_TYPE_SCMA11EVB)
++# define machine_is_mxc27530evb() (machine_arch_type == MACH_TYPE_SCMA11EVB)
+ #else
+-# define machine_is_scma11evb() (0)
++# define machine_is_mxc27530evb() (0)
+ #endif
+
+ #ifdef CONFIG_MACH_SMDK2800
+@@ -8305,9 +8606,9 @@ # define machine_arch_type __machine_ar
+ # else
+ # define machine_arch_type MACH_TYPE_SCMA11BB
+ # endif
+-# define machine_is_scma11bb() (machine_arch_type == MACH_TYPE_SCMA11BB)
++# define machine_is_mxc27530ads() (machine_arch_type == MACH_TYPE_SCMA11BB)
+ #else
+-# define machine_is_scma11bb() (0)
++# define machine_is_mxc27530ads() (0)
+ #endif
+
+ #ifdef CONFIG_MACH_TRIZEPS3
+@@ -9193,9 +9494,9 @@ # define machine_arch_type __machine_ar
+ # else
+ # define machine_arch_type MACH_TYPE_ZEUSEVB
+ # endif
+-# define machine_is_zeusevb() (machine_arch_type == MACH_TYPE_ZEUSEVB)
++# define machine_is_mxc91131evb() (machine_arch_type == MACH_TYPE_ZEUSEVB)
+ #else
+-# define machine_is_zeusevb() (0)
++# define machine_is_mxc91131evb() (0)
+ #endif
+
+ #ifdef CONFIG_MACH_P700
+@@ -9402,6 +9703,3630 @@ #else
+ # define machine_is_mp2usb() (0)
+ #endif
+
++#ifdef CONFIG_MACH_NTNP425C
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_NTNP425C
++# endif
++# define machine_is_ntnp425c() (machine_arch_type == MACH_TYPE_NTNP425C)
++#else
++# define machine_is_ntnp425c() (0)
++#endif
++
++#ifdef CONFIG_MACH_COLIBRI
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_COLIBRI
++# endif
++# define machine_is_colibri() (machine_arch_type == MACH_TYPE_COLIBRI)
++#else
++# define machine_is_colibri() (0)
++#endif
++
++#ifdef CONFIG_MACH_PCM7220
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PCM7220
++# endif
++# define machine_is_pcm7220() (machine_arch_type == MACH_TYPE_PCM7220)
++#else
++# define machine_is_pcm7220() (0)
++#endif
++
++#ifdef CONFIG_MACH_GATEWAY7001
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_GATEWAY7001
++# endif
++# define machine_is_gateway7001() (machine_arch_type == MACH_TYPE_GATEWAY7001)
++#else
++# define machine_is_gateway7001() (0)
++#endif
++
++#ifdef CONFIG_MACH_PCM027
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PCM027
++# endif
++# define machine_is_pcm027() (machine_arch_type == MACH_TYPE_PCM027)
++#else
++# define machine_is_pcm027() (0)
++#endif
++
++#ifdef CONFIG_MACH_CMPXA
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_CMPXA
++# endif
++# define machine_is_cmpxa() (machine_arch_type == MACH_TYPE_CMPXA)
++#else
++# define machine_is_cmpxa() (0)
++#endif
++
++#ifdef CONFIG_MACH_ANUBIS
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_ANUBIS
++# endif
++# define machine_is_anubis() (machine_arch_type == MACH_TYPE_ANUBIS)
++#else
++# define machine_is_anubis() (0)
++#endif
++
++#ifdef CONFIG_MACH_ITE8152
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_ITE8152
++# endif
++# define machine_is_ite8152() (machine_arch_type == MACH_TYPE_ITE8152)
++#else
++# define machine_is_ite8152() (0)
++#endif
++
++#ifdef CONFIG_MACH_LPC3XXX
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_LPC3XXX
++# endif
++# define machine_is_lpc3xxx() (machine_arch_type == MACH_TYPE_LPC3XXX)
++#else
++# define machine_is_lpc3xxx() (0)
++#endif
++
++#ifdef CONFIG_MACH_PUPPETEER
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PUPPETEER
++# endif
++# define machine_is_puppeteer() (machine_arch_type == MACH_TYPE_PUPPETEER)
++#else
++# define machine_is_puppeteer() (0)
++#endif
++
++#ifdef CONFIG_MACH_MACH_VADATECH
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MACH_VADATECH
++# endif
++# define machine_is_vt001() (machine_arch_type == MACH_TYPE_MACH_VADATECH)
++#else
++# define machine_is_vt001() (0)
++#endif
++
++#ifdef CONFIG_MACH_E570
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_E570
++# endif
++# define machine_is_e570() (machine_arch_type == MACH_TYPE_E570)
++#else
++# define machine_is_e570() (0)
++#endif
++
++#ifdef CONFIG_MACH_X50
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_X50
++# endif
++# define machine_is_x50() (machine_arch_type == MACH_TYPE_X50)
++#else
++# define machine_is_x50() (0)
++#endif
++
++#ifdef CONFIG_MACH_RECON
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_RECON
++# endif
++# define machine_is_recon() (machine_arch_type == MACH_TYPE_RECON)
++#else
++# define machine_is_recon() (0)
++#endif
++
++#ifdef CONFIG_MACH_XBOARDGP8
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_XBOARDGP8
++# endif
++# define machine_is_xboardgp8() (machine_arch_type == MACH_TYPE_XBOARDGP8)
++#else
++# define machine_is_xboardgp8() (0)
++#endif
++
++#ifdef CONFIG_MACH_FPIC2
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_FPIC2
++# endif
++# define machine_is_fpic2() (machine_arch_type == MACH_TYPE_FPIC2)
++#else
++# define machine_is_fpic2() (0)
++#endif
++
++#ifdef CONFIG_MACH_AKITA
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_AKITA
++# endif
++# define machine_is_akita() (machine_arch_type == MACH_TYPE_AKITA)
++#else
++# define machine_is_akita() (0)
++#endif
++
++#ifdef CONFIG_MACH_A81
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_A81
++# endif
++# define machine_is_a81() (machine_arch_type == MACH_TYPE_A81)
++#else
++# define machine_is_a81() (0)
++#endif
++
++#ifdef CONFIG_MACH_SVM_SC25X
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SVM_SC25X
++# endif
++# define machine_is_svm_sc25x() (machine_arch_type == MACH_TYPE_SVM_SC25X)
++#else
++# define machine_is_svm_sc25x() (0)
++#endif
++
++#ifdef CONFIG_MACH_VADATECH020
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_VADATECH020
++# endif
++# define machine_is_vt020() (machine_arch_type == MACH_TYPE_VADATECH020)
++#else
++# define machine_is_vt020() (0)
++#endif
++
++#ifdef CONFIG_MACH_TLI
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_TLI
++# endif
++# define machine_is_tli() (machine_arch_type == MACH_TYPE_TLI)
++#else
++# define machine_is_tli() (0)
++#endif
++
++#ifdef CONFIG_MACH_EDB9315LC
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_EDB9315LC
++# endif
++# define machine_is_edb9315lc() (machine_arch_type == MACH_TYPE_EDB9315LC)
++#else
++# define machine_is_edb9315lc() (0)
++#endif
++
++#ifdef CONFIG_MACH_PASSEC
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PASSEC
++# endif
++# define machine_is_passec() (machine_arch_type == MACH_TYPE_PASSEC)
++#else
++# define machine_is_passec() (0)
++#endif
++
++#ifdef CONFIG_MACH_DS_TIGER
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_DS_TIGER
++# endif
++# define machine_is_ds_tiger() (machine_arch_type == MACH_TYPE_DS_TIGER)
++#else
++# define machine_is_ds_tiger() (0)
++#endif
++
++#ifdef CONFIG_MACH_E310
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_E310
++# endif
++# define machine_is_e310() (machine_arch_type == MACH_TYPE_E310)
++#else
++# define machine_is_e310() (0)
++#endif
++
++#ifdef CONFIG_MACH_E330
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_E330
++# endif
++# define machine_is_e330() (machine_arch_type == MACH_TYPE_E330)
++#else
++# define machine_is_e330() (0)
++#endif
++
++#ifdef CONFIG_MACH_RT3000
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_RT3000
++# endif
++# define machine_is_rt3000() (machine_arch_type == MACH_TYPE_RT3000)
++#else
++# define machine_is_rt3000() (0)
++#endif
++
++#ifdef CONFIG_MACH_NOKIA770
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_NOKIA770
++# endif
++# define machine_is_nokia770() (machine_arch_type == MACH_TYPE_NOKIA770)
++#else
++# define machine_is_nokia770() (0)
++#endif
++
++#ifdef CONFIG_MACH_PNX0106
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PNX0106
++# endif
++# define machine_is_pnx0106() (machine_arch_type == MACH_TYPE_PNX0106)
++#else
++# define machine_is_pnx0106() (0)
++#endif
++
++#ifdef CONFIG_MACH_HX21XX
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_HX21XX
++# endif
++# define machine_is_hx21xx() (machine_arch_type == MACH_TYPE_HX21XX)
++#else
++# define machine_is_hx21xx() (0)
++#endif
++
++#ifdef CONFIG_MACH_FARADAY
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_FARADAY
++# endif
++# define machine_is_faraday() (machine_arch_type == MACH_TYPE_FARADAY)
++#else
++# define machine_is_faraday() (0)
++#endif
++
++#ifdef CONFIG_MACH_SBC9312
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SBC9312
++# endif
++# define machine_is_sbc9312() (machine_arch_type == MACH_TYPE_SBC9312)
++#else
++# define machine_is_sbc9312() (0)
++#endif
++
++#ifdef CONFIG_MACH_BATMAN
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_BATMAN
++# endif
++# define machine_is_batman() (machine_arch_type == MACH_TYPE_BATMAN)
++#else
++# define machine_is_batman() (0)
++#endif
++
++#ifdef CONFIG_MACH_JPD201
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_JPD201
++# endif
++# define machine_is_jpd201() (machine_arch_type == MACH_TYPE_JPD201)
++#else
++# define machine_is_jpd201() (0)
++#endif
++
++#ifdef CONFIG_MACH_MIPSA
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MIPSA
++# endif
++# define machine_is_mipsa() (machine_arch_type == MACH_TYPE_MIPSA)
++#else
++# define machine_is_mipsa() (0)
++#endif
++
++#ifdef CONFIG_MACH_KACOM
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_KACOM
++# endif
++# define machine_is_kacom() (machine_arch_type == MACH_TYPE_KACOM)
++#else
++# define machine_is_kacom() (0)
++#endif
++
++#ifdef CONFIG_MACH_SWARCOCPU
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SWARCOCPU
++# endif
++# define machine_is_swarcocpu() (machine_arch_type == MACH_TYPE_SWARCOCPU)
++#else
++# define machine_is_swarcocpu() (0)
++#endif
++
++#ifdef CONFIG_MACH_SWARCODSL
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SWARCODSL
++# endif
++# define machine_is_swarcodsl() (machine_arch_type == MACH_TYPE_SWARCODSL)
++#else
++# define machine_is_swarcodsl() (0)
++#endif
++
++#ifdef CONFIG_MACH_BLUEANGEL
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_BLUEANGEL
++# endif
++# define machine_is_blueangel() (machine_arch_type == MACH_TYPE_BLUEANGEL)
++#else
++# define machine_is_blueangel() (0)
++#endif
++
++#ifdef CONFIG_MACH_HAIRYGRAMA
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_HAIRYGRAMA
++# endif
++# define machine_is_hairygrama() (machine_arch_type == MACH_TYPE_HAIRYGRAMA)
++#else
++# define machine_is_hairygrama() (0)
++#endif
++
++#ifdef CONFIG_MACH_BANFF
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_BANFF
++# endif
++# define machine_is_banff() (machine_arch_type == MACH_TYPE_BANFF)
++#else
++# define machine_is_banff() (0)
++#endif
++
++#ifdef CONFIG_MACH_CARMEVA
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_CARMEVA
++# endif
++# define machine_is_carmeva() (machine_arch_type == MACH_TYPE_CARMEVA)
++#else
++# define machine_is_carmeva() (0)
++#endif
++
++#ifdef CONFIG_MACH_SAM255
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SAM255
++# endif
++# define machine_is_sam255() (machine_arch_type == MACH_TYPE_SAM255)
++#else
++# define machine_is_sam255() (0)
++#endif
++
++#ifdef CONFIG_MACH_PPM10
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PPM10
++# endif
++# define machine_is_ppm10() (machine_arch_type == MACH_TYPE_PPM10)
++#else
++# define machine_is_ppm10() (0)
++#endif
++
++#ifdef CONFIG_MACH_EDB9315A
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_EDB9315A
++# endif
++# define machine_is_edb9315a() (machine_arch_type == MACH_TYPE_EDB9315A)
++#else
++# define machine_is_edb9315a() (0)
++#endif
++
++#ifdef CONFIG_MACH_SUNSET
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SUNSET
++# endif
++# define machine_is_sunset() (machine_arch_type == MACH_TYPE_SUNSET)
++#else
++# define machine_is_sunset() (0)
++#endif
++
++#ifdef CONFIG_MACH_STARGATE2
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_STARGATE2
++# endif
++# define machine_is_stargate2() (machine_arch_type == MACH_TYPE_STARGATE2)
++#else
++# define machine_is_stargate2() (0)
++#endif
++
++#ifdef CONFIG_MACH_INTELMOTE2
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_INTELMOTE2
++# endif
++# define machine_is_intelmote2() (machine_arch_type == MACH_TYPE_INTELMOTE2)
++#else
++# define machine_is_intelmote2() (0)
++#endif
++
++#ifdef CONFIG_MACH_TRIZEPS4
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_TRIZEPS4
++# endif
++# define machine_is_trizeps4() (machine_arch_type == MACH_TYPE_TRIZEPS4)
++#else
++# define machine_is_trizeps4() (0)
++#endif
++
++#ifdef CONFIG_MACH_MAINSTONE2
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MAINSTONE2
++# endif
++# define machine_is_mainstone2() (machine_arch_type == MACH_TYPE_MAINSTONE2)
++#else
++# define machine_is_mainstone2() (0)
++#endif
++
++#ifdef CONFIG_MACH_EZ_IXP42X
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_EZ_IXP42X
++# endif
++# define machine_is_ez_ixp42x() (machine_arch_type == MACH_TYPE_EZ_IXP42X)
++#else
++# define machine_is_ez_ixp42x() (0)
++#endif
++
++#ifdef CONFIG_MACH_TAPWAVE_ZODIAC
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_TAPWAVE_ZODIAC
++# endif
++# define machine_is_tapwave_zodiac() (machine_arch_type == MACH_TYPE_TAPWAVE_ZODIAC)
++#else
++# define machine_is_tapwave_zodiac() (0)
++#endif
++
++#ifdef CONFIG_MACH_UNIVERSALMETER
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_UNIVERSALMETER
++# endif
++# define machine_is_universalmeter() (machine_arch_type == MACH_TYPE_UNIVERSALMETER)
++#else
++# define machine_is_universalmeter() (0)
++#endif
++
++#ifdef CONFIG_MACH_HICOARM9
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_HICOARM9
++# endif
++# define machine_is_hicoarm9() (machine_arch_type == MACH_TYPE_HICOARM9)
++#else
++# define machine_is_hicoarm9() (0)
++#endif
++
++#ifdef CONFIG_MACH_PNX4008
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PNX4008
++# endif
++# define machine_is_pnx4008() (machine_arch_type == MACH_TYPE_PNX4008)
++#else
++# define machine_is_pnx4008() (0)
++#endif
++
++#ifdef CONFIG_MACH_KWS6000
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_KWS6000
++# endif
++# define machine_is_kws6000() (machine_arch_type == MACH_TYPE_KWS6000)
++#else
++# define machine_is_kws6000() (0)
++#endif
++
++#ifdef CONFIG_MACH_PORTUX920T
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PORTUX920T
++# endif
++# define machine_is_portux920t() (machine_arch_type == MACH_TYPE_PORTUX920T)
++#else
++# define machine_is_portux920t() (0)
++#endif
++
++#ifdef CONFIG_MACH_EZ_X5
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_EZ_X5
++# endif
++# define machine_is_ez_x5() (machine_arch_type == MACH_TYPE_EZ_X5)
++#else
++# define machine_is_ez_x5() (0)
++#endif
++
++#ifdef CONFIG_MACH_OMAP_RUDOLPH
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_OMAP_RUDOLPH
++# endif
++# define machine_is_omap_rudolph() (machine_arch_type == MACH_TYPE_OMAP_RUDOLPH)
++#else
++# define machine_is_omap_rudolph() (0)
++#endif
++
++#ifdef CONFIG_MACH_CPUAT91
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_CPUAT91
++# endif
++# define machine_is_cpuat91() (machine_arch_type == MACH_TYPE_CPUAT91)
++#else
++# define machine_is_cpuat91() (0)
++#endif
++
++#ifdef CONFIG_MACH_REA9200
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_REA9200
++# endif
++# define machine_is_rea9200() (machine_arch_type == MACH_TYPE_REA9200)
++#else
++# define machine_is_rea9200() (0)
++#endif
++
++#ifdef CONFIG_MACH_ACTS_PUNE_SA1110
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_ACTS_PUNE_SA1110
++# endif
++# define machine_is_acts_pune_sa1110() (machine_arch_type == MACH_TYPE_ACTS_PUNE_SA1110)
++#else
++# define machine_is_acts_pune_sa1110() (0)
++#endif
++
++#ifdef CONFIG_MACH_IXP425
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_IXP425
++# endif
++# define machine_is_ixp425() (machine_arch_type == MACH_TYPE_IXP425)
++#else
++# define machine_is_ixp425() (0)
++#endif
++
++#ifdef CONFIG_MACH_ARGONPLUSODYSSEY
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_ARGONPLUSODYSSEY
++# endif
++# define machine_is_i30030ads() (machine_arch_type == MACH_TYPE_ARGONPLUSODYSSEY)
++#else
++# define machine_is_i30030ads() (0)
++#endif
++
++#ifdef CONFIG_MACH_PERCH
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PERCH
++# endif
++# define machine_is_perch() (machine_arch_type == MACH_TYPE_PERCH)
++#else
++# define machine_is_perch() (0)
++#endif
++
++#ifdef CONFIG_MACH_EIS05R1
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_EIS05R1
++# endif
++# define machine_is_eis05r1() (machine_arch_type == MACH_TYPE_EIS05R1)
++#else
++# define machine_is_eis05r1() (0)
++#endif
++
++#ifdef CONFIG_MACH_PEPPERPAD
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PEPPERPAD
++# endif
++# define machine_is_pepperpad() (machine_arch_type == MACH_TYPE_PEPPERPAD)
++#else
++# define machine_is_pepperpad() (0)
++#endif
++
++#ifdef CONFIG_MACH_SB3010
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SB3010
++# endif
++# define machine_is_sb3010() (machine_arch_type == MACH_TYPE_SB3010)
++#else
++# define machine_is_sb3010() (0)
++#endif
++
++#ifdef CONFIG_MACH_RM9200
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_RM9200
++# endif
++# define machine_is_rm9200() (machine_arch_type == MACH_TYPE_RM9200)
++#else
++# define machine_is_rm9200() (0)
++#endif
++
++#ifdef CONFIG_MACH_DMA03
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_DMA03
++# endif
++# define machine_is_dma03() (machine_arch_type == MACH_TYPE_DMA03)
++#else
++# define machine_is_dma03() (0)
++#endif
++
++#ifdef CONFIG_MACH_ROAD_S101
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_ROAD_S101
++# endif
++# define machine_is_road_s101() (machine_arch_type == MACH_TYPE_ROAD_S101)
++#else
++# define machine_is_road_s101() (0)
++#endif
++
++#ifdef CONFIG_MACH_IQ_NEXTGEN_A
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_IQ_NEXTGEN_A
++# endif
++# define machine_is_iq_nextgen_a() (machine_arch_type == MACH_TYPE_IQ_NEXTGEN_A)
++#else
++# define machine_is_iq_nextgen_a() (0)
++#endif
++
++#ifdef CONFIG_MACH_IQ_NEXTGEN_B
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_IQ_NEXTGEN_B
++# endif
++# define machine_is_iq_nextgen_b() (machine_arch_type == MACH_TYPE_IQ_NEXTGEN_B)
++#else
++# define machine_is_iq_nextgen_b() (0)
++#endif
++
++#ifdef CONFIG_MACH_IQ_NEXTGEN_C
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_IQ_NEXTGEN_C
++# endif
++# define machine_is_iq_nextgen_c() (machine_arch_type == MACH_TYPE_IQ_NEXTGEN_C)
++#else
++# define machine_is_iq_nextgen_c() (0)
++#endif
++
++#ifdef CONFIG_MACH_IQ_NEXTGEN_D
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_IQ_NEXTGEN_D
++# endif
++# define machine_is_iq_nextgen_d() (machine_arch_type == MACH_TYPE_IQ_NEXTGEN_D)
++#else
++# define machine_is_iq_nextgen_d() (0)
++#endif
++
++#ifdef CONFIG_MACH_IQ_NEXTGEN_E
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_IQ_NEXTGEN_E
++# endif
++# define machine_is_iq_nextgen_e() (machine_arch_type == MACH_TYPE_IQ_NEXTGEN_E)
++#else
++# define machine_is_iq_nextgen_e() (0)
++#endif
++
++#ifdef CONFIG_MACH_MALLOW_AT91
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MALLOW_AT91
++# endif
++# define machine_is_mallow_at91() (machine_arch_type == MACH_TYPE_MALLOW_AT91)
++#else
++# define machine_is_mallow_at91() (0)
++#endif
++
++#ifdef CONFIG_MACH_CYBERTRACKER_I
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_CYBERTRACKER_I
++# endif
++# define machine_is_cybertracker_i() (machine_arch_type == MACH_TYPE_CYBERTRACKER_I)
++#else
++# define machine_is_cybertracker_i() (0)
++#endif
++
++#ifdef CONFIG_MACH_GESBC931X
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_GESBC931X
++# endif
++# define machine_is_gesbc931x() (machine_arch_type == MACH_TYPE_GESBC931X)
++#else
++# define machine_is_gesbc931x() (0)
++#endif
++
++#ifdef CONFIG_MACH_CENTIPAD
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_CENTIPAD
++# endif
++# define machine_is_centipad() (machine_arch_type == MACH_TYPE_CENTIPAD)
++#else
++# define machine_is_centipad() (0)
++#endif
++
++#ifdef CONFIG_MACH_ARMSOC
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_ARMSOC
++# endif
++# define machine_is_armsoc() (machine_arch_type == MACH_TYPE_ARMSOC)
++#else
++# define machine_is_armsoc() (0)
++#endif
++
++#ifdef CONFIG_MACH_SE4200
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SE4200
++# endif
++# define machine_is_se4200() (machine_arch_type == MACH_TYPE_SE4200)
++#else
++# define machine_is_se4200() (0)
++#endif
++
++#ifdef CONFIG_MACH_EMS197A
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_EMS197A
++# endif
++# define machine_is_ems197a() (machine_arch_type == MACH_TYPE_EMS197A)
++#else
++# define machine_is_ems197a() (0)
++#endif
++
++#ifdef CONFIG_MACH_MICRO9
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MICRO9
++# endif
++# define machine_is_micro9() (machine_arch_type == MACH_TYPE_MICRO9)
++#else
++# define machine_is_micro9() (0)
++#endif
++
++#ifdef CONFIG_MACH_MICRO9L
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MICRO9L
++# endif
++# define machine_is_micro9l() (machine_arch_type == MACH_TYPE_MICRO9L)
++#else
++# define machine_is_micro9l() (0)
++#endif
++
++#ifdef CONFIG_MACH_UC5471DSP
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_UC5471DSP
++# endif
++# define machine_is_uc5471dsp() (machine_arch_type == MACH_TYPE_UC5471DSP)
++#else
++# define machine_is_uc5471dsp() (0)
++#endif
++
++#ifdef CONFIG_MACH_SJ5471ENG
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SJ5471ENG
++# endif
++# define machine_is_sj5471eng() (machine_arch_type == MACH_TYPE_SJ5471ENG)
++#else
++# define machine_is_sj5471eng() (0)
++#endif
++
++#ifdef CONFIG_MACH_CMPXA26X
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_CMPXA26X
++# endif
++# define machine_is_none() (machine_arch_type == MACH_TYPE_CMPXA26X)
++#else
++# define machine_is_none() (0)
++#endif
++
++#ifdef CONFIG_MACH_NC
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_NC
++# endif
++# define machine_is_nc1() (machine_arch_type == MACH_TYPE_NC)
++#else
++# define machine_is_nc1() (0)
++#endif
++
++#ifdef CONFIG_MACH_OMAP_PALMTE
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_OMAP_PALMTE
++# endif
++# define machine_is_omap_palmte() (machine_arch_type == MACH_TYPE_OMAP_PALMTE)
++#else
++# define machine_is_omap_palmte() (0)
++#endif
++
++#ifdef CONFIG_MACH_AJAX52X
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_AJAX52X
++# endif
++# define machine_is_ajax52x() (machine_arch_type == MACH_TYPE_AJAX52X)
++#else
++# define machine_is_ajax52x() (0)
++#endif
++
++#ifdef CONFIG_MACH_SIRIUSTAR
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SIRIUSTAR
++# endif
++# define machine_is_siriustar() (machine_arch_type == MACH_TYPE_SIRIUSTAR)
++#else
++# define machine_is_siriustar() (0)
++#endif
++
++#ifdef CONFIG_MACH_IODATA_HDLG
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_IODATA_HDLG
++# endif
++# define machine_is_iodata_hdlg() (machine_arch_type == MACH_TYPE_IODATA_HDLG)
++#else
++# define machine_is_iodata_hdlg() (0)
++#endif
++
++#ifdef CONFIG_MACH_AT91RM9200UTL
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_AT91RM9200UTL
++# endif
++# define machine_is_at91rm9200utl() (machine_arch_type == MACH_TYPE_AT91RM9200UTL)
++#else
++# define machine_is_at91rm9200utl() (0)
++#endif
++
++#ifdef CONFIG_MACH_BIOSAFE
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_BIOSAFE
++# endif
++# define machine_is_biosafe() (machine_arch_type == MACH_TYPE_BIOSAFE)
++#else
++# define machine_is_biosafe() (0)
++#endif
++
++#ifdef CONFIG_MACH_MP1000
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MP1000
++# endif
++# define machine_is_mp1000() (machine_arch_type == MACH_TYPE_MP1000)
++#else
++# define machine_is_mp1000() (0)
++#endif
++
++#ifdef CONFIG_MACH_PARSY
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PARSY
++# endif
++# define machine_is_parsy() (machine_arch_type == MACH_TYPE_PARSY)
++#else
++# define machine_is_parsy() (0)
++#endif
++
++#ifdef CONFIG_MACH_CCXP
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_CCXP
++# endif
++# define machine_is_ccxp270() (machine_arch_type == MACH_TYPE_CCXP)
++#else
++# define machine_is_ccxp270() (0)
++#endif
++
++#ifdef CONFIG_MACH_OMAP_GSAMPLE
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_OMAP_GSAMPLE
++# endif
++# define machine_is_omap_gsample() (machine_arch_type == MACH_TYPE_OMAP_GSAMPLE)
++#else
++# define machine_is_omap_gsample() (0)
++#endif
++
++#ifdef CONFIG_MACH_REALVIEW_EB
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_REALVIEW_EB
++# endif
++# define machine_is_realview_eb() (machine_arch_type == MACH_TYPE_REALVIEW_EB)
++#else
++# define machine_is_realview_eb() (0)
++#endif
++
++#ifdef CONFIG_MACH_SAMOA
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SAMOA
++# endif
++# define machine_is_samoa() (machine_arch_type == MACH_TYPE_SAMOA)
++#else
++# define machine_is_samoa() (0)
++#endif
++
++#ifdef CONFIG_MACH_T3XSCALE
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_T3XSCALE
++# endif
++# define machine_is_t3xscale() (machine_arch_type == MACH_TYPE_T3XSCALE)
++#else
++# define machine_is_t3xscale() (0)
++#endif
++
++#ifdef CONFIG_MACH_I878
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_I878
++# endif
++# define machine_is_i878() (machine_arch_type == MACH_TYPE_I878)
++#else
++# define machine_is_i878() (0)
++#endif
++
++#ifdef CONFIG_MACH_BORZOI
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_BORZOI
++# endif
++# define machine_is_borzoi() (machine_arch_type == MACH_TYPE_BORZOI)
++#else
++# define machine_is_borzoi() (0)
++#endif
++
++#ifdef CONFIG_MACH_GECKO
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_GECKO
++# endif
++# define machine_is_gecko() (machine_arch_type == MACH_TYPE_GECKO)
++#else
++# define machine_is_gecko() (0)
++#endif
++
++#ifdef CONFIG_MACH_DS101
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_DS101
++# endif
++# define machine_is_ds101() (machine_arch_type == MACH_TYPE_DS101)
++#else
++# define machine_is_ds101() (0)
++#endif
++
++#ifdef CONFIG_MACH_OMAP_PALMTT2
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_OMAP_PALMTT2
++# endif
++# define machine_is_omap_palmtt2() (machine_arch_type == MACH_TYPE_OMAP_PALMTT2)
++#else
++# define machine_is_omap_palmtt2() (0)
++#endif
++
++#ifdef CONFIG_MACH_XSCALE_PALMLD
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_XSCALE_PALMLD
++# endif
++# define machine_is_xscale_palmld() (machine_arch_type == MACH_TYPE_XSCALE_PALMLD)
++#else
++# define machine_is_xscale_palmld() (0)
++#endif
++
++#ifdef CONFIG_MACH_CC9C
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_CC9C
++# endif
++# define machine_is_cc9c() (machine_arch_type == MACH_TYPE_CC9C)
++#else
++# define machine_is_cc9c() (0)
++#endif
++
++#ifdef CONFIG_MACH_SBC1670
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SBC1670
++# endif
++# define machine_is_sbc1670() (machine_arch_type == MACH_TYPE_SBC1670)
++#else
++# define machine_is_sbc1670() (0)
++#endif
++
++#ifdef CONFIG_MACH_IXDP28X5
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_IXDP28X5
++# endif
++# define machine_is_ixdp28x5() (machine_arch_type == MACH_TYPE_IXDP28X5)
++#else
++# define machine_is_ixdp28x5() (0)
++#endif
++
++#ifdef CONFIG_MACH_OMAP_PALMTT
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_OMAP_PALMTT
++# endif
++# define machine_is_omap_palmtt() (machine_arch_type == MACH_TYPE_OMAP_PALMTT)
++#else
++# define machine_is_omap_palmtt() (0)
++#endif
++
++#ifdef CONFIG_MACH_ML696K
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_ML696K
++# endif
++# define machine_is_ml696k() (machine_arch_type == MACH_TYPE_ML696K)
++#else
++# define machine_is_ml696k() (0)
++#endif
++
++#ifdef CONFIG_MACH_ARCOM_ZEUS
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_ARCOM_ZEUS
++# endif
++# define machine_is_arcom_zeus() (machine_arch_type == MACH_TYPE_ARCOM_ZEUS)
++#else
++# define machine_is_arcom_zeus() (0)
++#endif
++
++#ifdef CONFIG_MACH_OSIRIS
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_OSIRIS
++# endif
++# define machine_is_osiris() (machine_arch_type == MACH_TYPE_OSIRIS)
++#else
++# define machine_is_osiris() (0)
++#endif
++
++#ifdef CONFIG_MACH_MAESTRO
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MAESTRO
++# endif
++# define machine_is_maestro() (machine_arch_type == MACH_TYPE_MAESTRO)
++#else
++# define machine_is_maestro() (0)
++#endif
++
++#ifdef CONFIG_MACH_TUNGE2
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_TUNGE2
++# endif
++# define machine_is_tunge2() (machine_arch_type == MACH_TYPE_TUNGE2)
++#else
++# define machine_is_tunge2() (0)
++#endif
++
++#ifdef CONFIG_MACH_IXBBM
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_IXBBM
++# endif
++# define machine_is_ixbbm() (machine_arch_type == MACH_TYPE_IXBBM)
++#else
++# define machine_is_ixbbm() (0)
++#endif
++
++#ifdef CONFIG_MACH_MX27
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MX27
++# endif
++# define machine_is_mx27ads() (machine_arch_type == MACH_TYPE_MX27)
++#else
++# define machine_is_mx27ads() (0)
++#endif
++
++#ifdef CONFIG_MACH_AX8004
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_AX8004
++# endif
++# define machine_is_ax8004() (machine_arch_type == MACH_TYPE_AX8004)
++#else
++# define machine_is_ax8004() (0)
++#endif
++
++#ifdef CONFIG_MACH_AT91SAM9261EK
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_AT91SAM9261EK
++# endif
++# define machine_is_at91sam9261ek() (machine_arch_type == MACH_TYPE_AT91SAM9261EK)
++#else
++# define machine_is_at91sam9261ek() (0)
++#endif
++
++#ifdef CONFIG_MACH_LOFT
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_LOFT
++# endif
++# define machine_is_loft() (machine_arch_type == MACH_TYPE_LOFT)
++#else
++# define machine_is_loft() (0)
++#endif
++
++#ifdef CONFIG_MACH_MAGPIE
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MAGPIE
++# endif
++# define machine_is_magpie() (machine_arch_type == MACH_TYPE_MAGPIE)
++#else
++# define machine_is_magpie() (0)
++#endif
++
++#ifdef CONFIG_MACH_MX21
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MX21
++# endif
++# define machine_is_mx21ads() (machine_arch_type == MACH_TYPE_MX21)
++#else
++# define machine_is_mx21ads() (0)
++#endif
++
++#ifdef CONFIG_MACH_MB87M3400
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MB87M3400
++# endif
++# define machine_is_mb87m3400() (machine_arch_type == MACH_TYPE_MB87M3400)
++#else
++# define machine_is_mb87m3400() (0)
++#endif
++
++#ifdef CONFIG_MACH_MGUARD_DELTA
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MGUARD_DELTA
++# endif
++# define machine_is_mguard_delta() (machine_arch_type == MACH_TYPE_MGUARD_DELTA)
++#else
++# define machine_is_mguard_delta() (0)
++#endif
++
++#ifdef CONFIG_MACH_DAVINCI_DVDP
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_DAVINCI_DVDP
++# endif
++# define machine_is_davinci_dvdp() (machine_arch_type == MACH_TYPE_DAVINCI_DVDP)
++#else
++# define machine_is_davinci_dvdp() (0)
++#endif
++
++#ifdef CONFIG_MACH_HTCUNIVERSAL
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_HTCUNIVERSAL
++# endif
++# define machine_is_htcuniversal() (machine_arch_type == MACH_TYPE_HTCUNIVERSAL)
++#else
++# define machine_is_htcuniversal() (0)
++#endif
++
++#ifdef CONFIG_MACH_TPAD
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_TPAD
++# endif
++# define machine_is_tpad() (machine_arch_type == MACH_TYPE_TPAD)
++#else
++# define machine_is_tpad() (0)
++#endif
++
++#ifdef CONFIG_MACH_ROVERP3
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_ROVERP3
++# endif
++# define machine_is_roverp3() (machine_arch_type == MACH_TYPE_ROVERP3)
++#else
++# define machine_is_roverp3() (0)
++#endif
++
++#ifdef CONFIG_MACH_JORNADA928
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_JORNADA928
++# endif
++# define machine_is_jornada928() (machine_arch_type == MACH_TYPE_JORNADA928)
++#else
++# define machine_is_jornada928() (0)
++#endif
++
++#ifdef CONFIG_MACH_MV88FXX81
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MV88FXX81
++# endif
++# define machine_is_mv88fxx81() (machine_arch_type == MACH_TYPE_MV88FXX81)
++#else
++# define machine_is_mv88fxx81() (0)
++#endif
++
++#ifdef CONFIG_MACH_STMP36XX
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_STMP36XX
++# endif
++# define machine_is_stmp36xx() (machine_arch_type == MACH_TYPE_STMP36XX)
++#else
++# define machine_is_stmp36xx() (0)
++#endif
++
++#ifdef CONFIG_MACH_SXNI79524
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SXNI79524
++# endif
++# define machine_is_sxni79524() (machine_arch_type == MACH_TYPE_SXNI79524)
++#else
++# define machine_is_sxni79524() (0)
++#endif
++
++#ifdef CONFIG_MACH_AMS_DELTA
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_AMS_DELTA
++# endif
++# define machine_is_ams_delta() (machine_arch_type == MACH_TYPE_AMS_DELTA)
++#else
++# define machine_is_ams_delta() (0)
++#endif
++
++#ifdef CONFIG_MACH_URANIUM
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_URANIUM
++# endif
++# define machine_is_uranium() (machine_arch_type == MACH_TYPE_URANIUM)
++#else
++# define machine_is_uranium() (0)
++#endif
++
++#ifdef CONFIG_MACH_UCON
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_UCON
++# endif
++# define machine_is_ucon() (machine_arch_type == MACH_TYPE_UCON)
++#else
++# define machine_is_ucon() (0)
++#endif
++
++#ifdef CONFIG_MACH_NAS100D
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_NAS100D
++# endif
++# define machine_is_nas100d() (machine_arch_type == MACH_TYPE_NAS100D)
++#else
++# define machine_is_nas100d() (0)
++#endif
++
++#ifdef CONFIG_MACH_L083_1000
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_L083_1000
++# endif
++# define machine_is_l083() (machine_arch_type == MACH_TYPE_L083_1000)
++#else
++# define machine_is_l083() (0)
++#endif
++
++#ifdef CONFIG_MACH_EZX
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_EZX
++# endif
++# define machine_is_ezx() (machine_arch_type == MACH_TYPE_EZX)
++#else
++# define machine_is_ezx() (0)
++#endif
++
++#ifdef CONFIG_MACH_PNX5220
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PNX5220
++# endif
++# define machine_is_pnx5220() (machine_arch_type == MACH_TYPE_PNX5220)
++#else
++# define machine_is_pnx5220() (0)
++#endif
++
++#ifdef CONFIG_MACH_BUTTE
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_BUTTE
++# endif
++# define machine_is_butte() (machine_arch_type == MACH_TYPE_BUTTE)
++#else
++# define machine_is_butte() (0)
++#endif
++
++#ifdef CONFIG_MACH_SRM2
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SRM2
++# endif
++# define machine_is_srm2() (machine_arch_type == MACH_TYPE_SRM2)
++#else
++# define machine_is_srm2() (0)
++#endif
++
++#ifdef CONFIG_MACH_DSBR
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_DSBR
++# endif
++# define machine_is_dsbr() (machine_arch_type == MACH_TYPE_DSBR)
++#else
++# define machine_is_dsbr() (0)
++#endif
++
++#ifdef CONFIG_MACH_CRYSTALBALL
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_CRYSTALBALL
++# endif
++# define machine_is_crystalball() (machine_arch_type == MACH_TYPE_CRYSTALBALL)
++#else
++# define machine_is_crystalball() (0)
++#endif
++
++#ifdef CONFIG_MACH_TINYPXA27X
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_TINYPXA27X
++# endif
++# define machine_is_tinypxa27x() (machine_arch_type == MACH_TYPE_TINYPXA27X)
++#else
++# define machine_is_tinypxa27x() (0)
++#endif
++
++#ifdef CONFIG_MACH_HERBIE
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_HERBIE
++# endif
++# define machine_is_herbie() (machine_arch_type == MACH_TYPE_HERBIE)
++#else
++# define machine_is_herbie() (0)
++#endif
++
++#ifdef CONFIG_MACH_MAGICIAN
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MAGICIAN
++# endif
++# define machine_is_magician() (machine_arch_type == MACH_TYPE_MAGICIAN)
++#else
++# define machine_is_magician() (0)
++#endif
++
++#ifdef CONFIG_MACH_CM4002
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_CM4002
++# endif
++# define machine_is_cm4002() (machine_arch_type == MACH_TYPE_CM4002)
++#else
++# define machine_is_cm4002() (0)
++#endif
++
++#ifdef CONFIG_MACH_B4
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_B4
++# endif
++# define machine_is_b4() (machine_arch_type == MACH_TYPE_B4)
++#else
++# define machine_is_b4() (0)
++#endif
++
++#ifdef CONFIG_MACH_MAUI
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MAUI
++# endif
++# define machine_is_maui() (machine_arch_type == MACH_TYPE_MAUI)
++#else
++# define machine_is_maui() (0)
++#endif
++
++#ifdef CONFIG_MACH_CYBERTRACKER_G
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_CYBERTRACKER_G
++# endif
++# define machine_is_cybertracker_g() (machine_arch_type == MACH_TYPE_CYBERTRACKER_G)
++#else
++# define machine_is_cybertracker_g() (0)
++#endif
++
++#ifdef CONFIG_MACH_NXDKN
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_NXDKN
++# endif
++# define machine_is_nxdkn() (machine_arch_type == MACH_TYPE_NXDKN)
++#else
++# define machine_is_nxdkn() (0)
++#endif
++
++#ifdef CONFIG_MACH_MIO8390
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MIO8390
++# endif
++# define machine_is_mio8390() (machine_arch_type == MACH_TYPE_MIO8390)
++#else
++# define machine_is_mio8390() (0)
++#endif
++
++#ifdef CONFIG_MACH_OMI_BOARD
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_OMI_BOARD
++# endif
++# define machine_is_omi_board() (machine_arch_type == MACH_TYPE_OMI_BOARD)
++#else
++# define machine_is_omi_board() (0)
++#endif
++
++#ifdef CONFIG_MACH_MX21CIV
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MX21CIV
++# endif
++# define machine_is_mx21civ() (machine_arch_type == MACH_TYPE_MX21CIV)
++#else
++# define machine_is_mx21civ() (0)
++#endif
++
++#ifdef CONFIG_MACH_MAHI_CDAC
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MAHI_CDAC
++# endif
++# define machine_is_mahi_cdac() (machine_arch_type == MACH_TYPE_MAHI_CDAC)
++#else
++# define machine_is_mahi_cdac() (0)
++#endif
++
++#ifdef CONFIG_MACH_XSCALE_PALMTX
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_XSCALE_PALMTX
++# endif
++# define machine_is_xscale_palmtx() (machine_arch_type == MACH_TYPE_XSCALE_PALMTX)
++#else
++# define machine_is_xscale_palmtx() (0)
++#endif
++
++#ifdef CONFIG_MACH_S3C2413
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_S3C2413
++# endif
++# define machine_is_s3c2413() (machine_arch_type == MACH_TYPE_S3C2413)
++#else
++# define machine_is_s3c2413() (0)
++#endif
++
++#ifdef CONFIG_MACH_SAMSYS_EP0
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SAMSYS_EP0
++# endif
++# define machine_is_samsys_ep0() (machine_arch_type == MACH_TYPE_SAMSYS_EP0)
++#else
++# define machine_is_samsys_ep0() (0)
++#endif
++
++#ifdef CONFIG_MACH_WG302V1
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_WG302V1
++# endif
++# define machine_is_wg302v1() (machine_arch_type == MACH_TYPE_WG302V1)
++#else
++# define machine_is_wg302v1() (0)
++#endif
++
++#ifdef CONFIG_MACH_WG302V2
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_WG302V2
++# endif
++# define machine_is_wg302v2() (machine_arch_type == MACH_TYPE_WG302V2)
++#else
++# define machine_is_wg302v2() (0)
++#endif
++
++#ifdef CONFIG_MACH_EB42X
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_EB42X
++# endif
++# define machine_is_eb42x() (machine_arch_type == MACH_TYPE_EB42X)
++#else
++# define machine_is_eb42x() (0)
++#endif
++
++#ifdef CONFIG_MACH_IQ331ES
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_IQ331ES
++# endif
++# define machine_is_iq331es() (machine_arch_type == MACH_TYPE_IQ331ES)
++#else
++# define machine_is_iq331es() (0)
++#endif
++
++#ifdef CONFIG_MACH_COSYDSP
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_COSYDSP
++# endif
++# define machine_is_cosydsp() (machine_arch_type == MACH_TYPE_COSYDSP)
++#else
++# define machine_is_cosydsp() (0)
++#endif
++
++#ifdef CONFIG_MACH_UPLAT7D
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_UPLAT7D
++# endif
++# define machine_is_uplat7d_proto() (machine_arch_type == MACH_TYPE_UPLAT7D)
++#else
++# define machine_is_uplat7d_proto() (0)
++#endif
++
++#ifdef CONFIG_MACH_PTDAVINCI
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PTDAVINCI
++# endif
++# define machine_is_ptdavinci() (machine_arch_type == MACH_TYPE_PTDAVINCI)
++#else
++# define machine_is_ptdavinci() (0)
++#endif
++
++#ifdef CONFIG_MACH_MBUS
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MBUS
++# endif
++# define machine_is_mbus() (machine_arch_type == MACH_TYPE_MBUS)
++#else
++# define machine_is_mbus() (0)
++#endif
++
++#ifdef CONFIG_MACH_NADIA2VB
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_NADIA2VB
++# endif
++# define machine_is_nadia2vb() (machine_arch_type == MACH_TYPE_NADIA2VB)
++#else
++# define machine_is_nadia2vb() (0)
++#endif
++
++#ifdef CONFIG_MACH_R1000
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_R1000
++# endif
++# define machine_is_r1000() (machine_arch_type == MACH_TYPE_R1000)
++#else
++# define machine_is_r1000() (0)
++#endif
++
++#ifdef CONFIG_MACH_HW90250
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_HW90250
++# endif
++# define machine_is_hw90250() (machine_arch_type == MACH_TYPE_HW90250)
++#else
++# define machine_is_hw90250() (0)
++#endif
++
++#ifdef CONFIG_MACH_OMAP_2430SDP
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_OMAP_2430SDP
++# endif
++# define machine_is_omap_2430sdp() (machine_arch_type == MACH_TYPE_OMAP_2430SDP)
++#else
++# define machine_is_omap_2430sdp() (0)
++#endif
++
++#ifdef CONFIG_MACH_DAVINCI_EVM
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_DAVINCI_EVM
++# endif
++# define machine_is_davinci_evm() (machine_arch_type == MACH_TYPE_DAVINCI_EVM)
++#else
++# define machine_is_davinci_evm() (0)
++#endif
++
++#ifdef CONFIG_MACH_OMAP_TORNADO
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_OMAP_TORNADO
++# endif
++# define machine_is_omap_tornado() (machine_arch_type == MACH_TYPE_OMAP_TORNADO)
++#else
++# define machine_is_omap_tornado() (0)
++#endif
++
++#ifdef CONFIG_MACH_OLOCREEK
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_OLOCREEK
++# endif
++# define machine_is_olocreek() (machine_arch_type == MACH_TYPE_OLOCREEK)
++#else
++# define machine_is_olocreek() (0)
++#endif
++
++#ifdef CONFIG_MACH_PALMZ72
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PALMZ72
++# endif
++# define machine_is_palmz72() (machine_arch_type == MACH_TYPE_PALMZ72)
++#else
++# define machine_is_palmz72() (0)
++#endif
++
++#ifdef CONFIG_MACH_NXDB500
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_NXDB500
++# endif
++# define machine_is_nxdb500() (machine_arch_type == MACH_TYPE_NXDB500)
++#else
++# define machine_is_nxdb500() (0)
++#endif
++
++#ifdef CONFIG_MACH_APF9328
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_APF9328
++# endif
++# define machine_is_apf9328() (machine_arch_type == MACH_TYPE_APF9328)
++#else
++# define machine_is_apf9328() (0)
++#endif
++
++#ifdef CONFIG_MACH_OMAP_WIPOQ
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_OMAP_WIPOQ
++# endif
++# define machine_is_omap_wipoq() (machine_arch_type == MACH_TYPE_OMAP_WIPOQ)
++#else
++# define machine_is_omap_wipoq() (0)
++#endif
++
++#ifdef CONFIG_MACH_OMAP_TWIP
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_OMAP_TWIP
++# endif
++# define machine_is_omap_twip() (machine_arch_type == MACH_TYPE_OMAP_TWIP)
++#else
++# define machine_is_omap_twip() (0)
++#endif
++
++#ifdef CONFIG_MACH_XSCALE_PALMTREO650
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_XSCALE_PALMTREO650
++# endif
++# define machine_is_xscale_treo650() (machine_arch_type == MACH_TYPE_XSCALE_PALMTREO650)
++#else
++# define machine_is_xscale_treo650() (0)
++#endif
++
++#ifdef CONFIG_MACH_ACUMEN
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_ACUMEN
++# endif
++# define machine_is_acumen() (machine_arch_type == MACH_TYPE_ACUMEN)
++#else
++# define machine_is_acumen() (0)
++#endif
++
++#ifdef CONFIG_MACH_XP100
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_XP100
++# endif
++# define machine_is_xp100() (machine_arch_type == MACH_TYPE_XP100)
++#else
++# define machine_is_xp100() (0)
++#endif
++
++#ifdef CONFIG_MACH_FS2410
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_FS2410
++# endif
++# define machine_is_fs2410() (machine_arch_type == MACH_TYPE_FS2410)
++#else
++# define machine_is_fs2410() (0)
++#endif
++
++#ifdef CONFIG_MACH_PXA270_CERF
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PXA270_CERF
++# endif
++# define machine_is_pxa270_cerf() (machine_arch_type == MACH_TYPE_PXA270_CERF)
++#else
++# define machine_is_pxa270_cerf() (0)
++#endif
++
++#ifdef CONFIG_MACH_SQ2FTLPALM
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SQ2FTLPALM
++# endif
++# define machine_is_sq2ftlpalm() (machine_arch_type == MACH_TYPE_SQ2FTLPALM)
++#else
++# define machine_is_sq2ftlpalm() (0)
++#endif
++
++#ifdef CONFIG_MACH_BSEMSERVER
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_BSEMSERVER
++# endif
++# define machine_is_bsemserver() (machine_arch_type == MACH_TYPE_BSEMSERVER)
++#else
++# define machine_is_bsemserver() (0)
++#endif
++
++#ifdef CONFIG_MACH_NETCLIENT
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_NETCLIENT
++# endif
++# define machine_is_netclient() (machine_arch_type == MACH_TYPE_NETCLIENT)
++#else
++# define machine_is_netclient() (0)
++#endif
++
++#ifdef CONFIG_MACH_XSCALE_PALMTT5
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_XSCALE_PALMTT5
++# endif
++# define machine_is_xscale_palmtt5() (machine_arch_type == MACH_TYPE_XSCALE_PALMTT5)
++#else
++# define machine_is_xscale_palmtt5() (0)
++#endif
++
++#ifdef CONFIG_MACH_OMAP_PALMTC
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_OMAP_PALMTC
++# endif
++# define machine_is_xscale_palmtc() (machine_arch_type == MACH_TYPE_OMAP_PALMTC)
++#else
++# define machine_is_xscale_palmtc() (0)
++#endif
++
++#ifdef CONFIG_MACH_OMAP_APOLLON
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_OMAP_APOLLON
++# endif
++# define machine_is_omap_apollon() (machine_arch_type == MACH_TYPE_OMAP_APOLLON)
++#else
++# define machine_is_omap_apollon() (0)
++#endif
++
++#ifdef CONFIG_MACH_ARGONLVEVB
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_ARGONLVEVB
++# endif
++# define machine_is_mxc30030evb() (machine_arch_type == MACH_TYPE_ARGONLVEVB)
++#else
++# define machine_is_mxc30030evb() (0)
++#endif
++
++#ifdef CONFIG_MACH_REA_2D
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_REA_2D
++# endif
++# define machine_is_rea_2d() (machine_arch_type == MACH_TYPE_REA_2D)
++#else
++# define machine_is_rea_2d() (0)
++#endif
++
++#ifdef CONFIG_MACH_TI3E524
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_TI3E524
++# endif
++# define machine_is_eti3e524() (machine_arch_type == MACH_TYPE_TI3E524)
++#else
++# define machine_is_eti3e524() (0)
++#endif
++
++#ifdef CONFIG_MACH_ATEB9200
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_ATEB9200
++# endif
++# define machine_is_ateb9200() (machine_arch_type == MACH_TYPE_ATEB9200)
++#else
++# define machine_is_ateb9200() (0)
++#endif
++
++#ifdef CONFIG_MACH_AUCKLAND
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_AUCKLAND
++# endif
++# define machine_is_auckland() (machine_arch_type == MACH_TYPE_AUCKLAND)
++#else
++# define machine_is_auckland() (0)
++#endif
++
++#ifdef CONFIG_MACH_AK3320M
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_AK3320M
++# endif
++# define machine_is_ak3220m() (machine_arch_type == MACH_TYPE_AK3320M)
++#else
++# define machine_is_ak3220m() (0)
++#endif
++
++#ifdef CONFIG_MACH_DURAMAX
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_DURAMAX
++# endif
++# define machine_is_duramax() (machine_arch_type == MACH_TYPE_DURAMAX)
++#else
++# define machine_is_duramax() (0)
++#endif
++
++#ifdef CONFIG_MACH_N35
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_N35
++# endif
++# define machine_is_n35() (machine_arch_type == MACH_TYPE_N35)
++#else
++# define machine_is_n35() (0)
++#endif
++
++#ifdef CONFIG_MACH_PRONGHORN
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PRONGHORN
++# endif
++# define machine_is_pronghorn() (machine_arch_type == MACH_TYPE_PRONGHORN)
++#else
++# define machine_is_pronghorn() (0)
++#endif
++
++#ifdef CONFIG_MACH_FUNDY
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_FUNDY
++# endif
++# define machine_is_fundy() (machine_arch_type == MACH_TYPE_FUNDY)
++#else
++# define machine_is_fundy() (0)
++#endif
++
++#ifdef CONFIG_MACH_LOGICPD_PXA270
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_LOGICPD_PXA270
++# endif
++# define machine_is_logicpd_pxa270() (machine_arch_type == MACH_TYPE_LOGICPD_PXA270)
++#else
++# define machine_is_logicpd_pxa270() (0)
++#endif
++
++#ifdef CONFIG_MACH_CPU777
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_CPU777
++# endif
++# define machine_is_cpu777() (machine_arch_type == MACH_TYPE_CPU777)
++#else
++# define machine_is_cpu777() (0)
++#endif
++
++#ifdef CONFIG_MACH_SIMICON9201
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SIMICON9201
++# endif
++# define machine_is_simicon9201() (machine_arch_type == MACH_TYPE_SIMICON9201)
++#else
++# define machine_is_simicon9201() (0)
++#endif
++
++#ifdef CONFIG_MACH_LEAP2_HPM
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_LEAP2_HPM
++# endif
++# define machine_is_leap2_hpm() (machine_arch_type == MACH_TYPE_LEAP2_HPM)
++#else
++# define machine_is_leap2_hpm() (0)
++#endif
++
++#ifdef CONFIG_MACH_CM922TXA10
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_CM922TXA10
++# endif
++# define machine_is_cm922txa10() (machine_arch_type == MACH_TYPE_CM922TXA10)
++#else
++# define machine_is_cm922txa10() (0)
++#endif
++
++#ifdef CONFIG_MACH_PXA
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PXA
++# endif
++# define machine_is_sandgate() (machine_arch_type == MACH_TYPE_PXA)
++#else
++# define machine_is_sandgate() (0)
++#endif
++
++#ifdef CONFIG_MACH_SANDGATE2
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SANDGATE2
++# endif
++# define machine_is_sandgate2() (machine_arch_type == MACH_TYPE_SANDGATE2)
++#else
++# define machine_is_sandgate2() (0)
++#endif
++
++#ifdef CONFIG_MACH_SANDGATE2G
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SANDGATE2G
++# endif
++# define machine_is_sandgate2g() (machine_arch_type == MACH_TYPE_SANDGATE2G)
++#else
++# define machine_is_sandgate2g() (0)
++#endif
++
++#ifdef CONFIG_MACH_SANDGATE2P
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SANDGATE2P
++# endif
++# define machine_is_sandgate2p() (machine_arch_type == MACH_TYPE_SANDGATE2P)
++#else
++# define machine_is_sandgate2p() (0)
++#endif
++
++#ifdef CONFIG_MACH_FRED_JACK
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_FRED_JACK
++# endif
++# define machine_is_fred_jack() (machine_arch_type == MACH_TYPE_FRED_JACK)
++#else
++# define machine_is_fred_jack() (0)
++#endif
++
++#ifdef CONFIG_MACH_TTG_COLOR1
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_TTG_COLOR1
++# endif
++# define machine_is_ttg_color1() (machine_arch_type == MACH_TYPE_TTG_COLOR1)
++#else
++# define machine_is_ttg_color1() (0)
++#endif
++
++#ifdef CONFIG_MACH_NXEB500HMI
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_NXEB500HMI
++# endif
++# define machine_is_nxeb500hmi() (machine_arch_type == MACH_TYPE_NXEB500HMI)
++#else
++# define machine_is_nxeb500hmi() (0)
++#endif
++
++#ifdef CONFIG_MACH_NETDCU8
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_NETDCU8
++# endif
++# define machine_is_netdcu8() (machine_arch_type == MACH_TYPE_NETDCU8)
++#else
++# define machine_is_netdcu8() (0)
++#endif
++
++#ifdef CONFIG_MACH_ML675050_CPU_BOA
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_ML675050_CPU_BOA
++# endif
++# define machine_is_ml675050_cpu_boa() (machine_arch_type == MACH_TYPE_ML675050_CPU_BOA)
++#else
++# define machine_is_ml675050_cpu_boa() (0)
++#endif
++
++#ifdef CONFIG_MACH_NG_FVX538
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_NG_FVX538
++# endif
++# define machine_is_ng_fvx538() (machine_arch_type == MACH_TYPE_NG_FVX538)
++#else
++# define machine_is_ng_fvx538() (0)
++#endif
++
++#ifdef CONFIG_MACH_NG_FVS338
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_NG_FVS338
++# endif
++# define machine_is_ng_fvs338() (machine_arch_type == MACH_TYPE_NG_FVS338)
++#else
++# define machine_is_ng_fvs338() (0)
++#endif
++
++#ifdef CONFIG_MACH_PNX4103
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PNX4103
++# endif
++# define machine_is_pnx4103() (machine_arch_type == MACH_TYPE_PNX4103)
++#else
++# define machine_is_pnx4103() (0)
++#endif
++
++#ifdef CONFIG_MACH_HESDB
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_HESDB
++# endif
++# define machine_is_hesdb() (machine_arch_type == MACH_TYPE_HESDB)
++#else
++# define machine_is_hesdb() (0)
++#endif
++
++#ifdef CONFIG_MACH_XSILO
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_XSILO
++# endif
++# define machine_is_xsilo() (machine_arch_type == MACH_TYPE_XSILO)
++#else
++# define machine_is_xsilo() (0)
++#endif
++
++#ifdef CONFIG_MACH_ESPRESSO
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_ESPRESSO
++# endif
++# define machine_is_espresso() (machine_arch_type == MACH_TYPE_ESPRESSO)
++#else
++# define machine_is_espresso() (0)
++#endif
++
++#ifdef CONFIG_MACH_EMLC
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_EMLC
++# endif
++# define machine_is_emlc() (machine_arch_type == MACH_TYPE_EMLC)
++#else
++# define machine_is_emlc() (0)
++#endif
++
++#ifdef CONFIG_MACH_SISTERON
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SISTERON
++# endif
++# define machine_is_sisteron() (machine_arch_type == MACH_TYPE_SISTERON)
++#else
++# define machine_is_sisteron() (0)
++#endif
++
++#ifdef CONFIG_MACH_RX1950
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_RX1950
++# endif
++# define machine_is_rx1950() (machine_arch_type == MACH_TYPE_RX1950)
++#else
++# define machine_is_rx1950() (0)
++#endif
++
++#ifdef CONFIG_MACH_TSC_VENUS
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_TSC_VENUS
++# endif
++# define machine_is_tsc_venus() (machine_arch_type == MACH_TYPE_TSC_VENUS)
++#else
++# define machine_is_tsc_venus() (0)
++#endif
++
++#ifdef CONFIG_MACH_DS101J
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_DS101J
++# endif
++# define machine_is_ds101j() (machine_arch_type == MACH_TYPE_DS101J)
++#else
++# define machine_is_ds101j() (0)
++#endif
++
++#ifdef CONFIG_MACH_MXC30030ADS
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MXC30030ADS
++# endif
++# define machine_is_mxc30030ads() (machine_arch_type == MACH_TYPE_MXC30030ADS)
++#else
++# define machine_is_mxc30030ads() (0)
++#endif
++
++#ifdef CONFIG_MACH_FUJITSU_WIMAXSOC
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_FUJITSU_WIMAXSOC
++# endif
++# define machine_is_fujitsu_wimaxsoc() (machine_arch_type == MACH_TYPE_FUJITSU_WIMAXSOC)
++#else
++# define machine_is_fujitsu_wimaxsoc() (0)
++#endif
++
++#ifdef CONFIG_MACH_DUALPCMODEM
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_DUALPCMODEM
++# endif
++# define machine_is_dualpcmodem() (machine_arch_type == MACH_TYPE_DUALPCMODEM)
++#else
++# define machine_is_dualpcmodem() (0)
++#endif
++
++#ifdef CONFIG_MACH_GESBC9312
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_GESBC9312
++# endif
++# define machine_is_gesbc9312() (machine_arch_type == MACH_TYPE_GESBC9312)
++#else
++# define machine_is_gesbc9312() (0)
++#endif
++
++#ifdef CONFIG_MACH_HTCAPACHE
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_HTCAPACHE
++# endif
++# define machine_is_htcapache() (machine_arch_type == MACH_TYPE_HTCAPACHE)
++#else
++# define machine_is_htcapache() (0)
++#endif
++
++#ifdef CONFIG_MACH_IXDP435
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_IXDP435
++# endif
++# define machine_is_ixdp435() (machine_arch_type == MACH_TYPE_IXDP435)
++#else
++# define machine_is_ixdp435() (0)
++#endif
++
++#ifdef CONFIG_MACH_CATPROVT100
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_CATPROVT100
++# endif
++# define machine_is_catprovt100() (machine_arch_type == MACH_TYPE_CATPROVT100)
++#else
++# define machine_is_catprovt100() (0)
++#endif
++
++#ifdef CONFIG_MACH_PICOTUX1XX
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PICOTUX1XX
++# endif
++# define machine_is_picotux1xx() (machine_arch_type == MACH_TYPE_PICOTUX1XX)
++#else
++# define machine_is_picotux1xx() (0)
++#endif
++
++#ifdef CONFIG_MACH_PICOTUX2XX
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PICOTUX2XX
++# endif
++# define machine_is_picotux2xx() (machine_arch_type == MACH_TYPE_PICOTUX2XX)
++#else
++# define machine_is_picotux2xx() (0)
++#endif
++
++#ifdef CONFIG_MACH_DSMG600
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_DSMG600
++# endif
++# define machine_is_dsmg600() (machine_arch_type == MACH_TYPE_DSMG600)
++#else
++# define machine_is_dsmg600() (0)
++#endif
++
++#ifdef CONFIG_MACH_EMPC2
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_EMPC2
++# endif
++# define machine_is_empc2() (machine_arch_type == MACH_TYPE_EMPC2)
++#else
++# define machine_is_empc2() (0)
++#endif
++
++#ifdef CONFIG_MACH_VENTURA
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_VENTURA
++# endif
++# define machine_is_ventura() (machine_arch_type == MACH_TYPE_VENTURA)
++#else
++# define machine_is_ventura() (0)
++#endif
++
++#ifdef CONFIG_MACH_PHIDGET_SBC
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PHIDGET_SBC
++# endif
++# define machine_is_phidget_sbc() (machine_arch_type == MACH_TYPE_PHIDGET_SBC)
++#else
++# define machine_is_phidget_sbc() (0)
++#endif
++
++#ifdef CONFIG_MACH_IJ3K
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_IJ3K
++# endif
++# define machine_is_ij3k() (machine_arch_type == MACH_TYPE_IJ3K)
++#else
++# define machine_is_ij3k() (0)
++#endif
++
++#ifdef CONFIG_MACH_PISGAH
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PISGAH
++# endif
++# define machine_is_pisgah() (machine_arch_type == MACH_TYPE_PISGAH)
++#else
++# define machine_is_pisgah() (0)
++#endif
++
++#ifdef CONFIG_MACH_OMAP_FSAMPLE
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_OMAP_FSAMPLE
++# endif
++# define machine_is_omap_fsample() (machine_arch_type == MACH_TYPE_OMAP_FSAMPLE)
++#else
++# define machine_is_omap_fsample() (0)
++#endif
++
++#ifdef CONFIG_MACH_SG720
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SG720
++# endif
++# define machine_is_sg720() (machine_arch_type == MACH_TYPE_SG720)
++#else
++# define machine_is_sg720() (0)
++#endif
++
++#ifdef CONFIG_MACH_REDFOX
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_REDFOX
++# endif
++# define machine_is_redfox() (machine_arch_type == MACH_TYPE_REDFOX)
++#else
++# define machine_is_redfox() (0)
++#endif
++
++#ifdef CONFIG_MACH_MYSH_EP9315_1
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MYSH_EP9315_1
++# endif
++# define machine_is_mysh_ep9315_1() (machine_arch_type == MACH_TYPE_MYSH_EP9315_1)
++#else
++# define machine_is_mysh_ep9315_1() (0)
++#endif
++
++#ifdef CONFIG_MACH_TPF106
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_TPF106
++# endif
++# define machine_is_tpf106() (machine_arch_type == MACH_TYPE_TPF106)
++#else
++# define machine_is_tpf106() (0)
++#endif
++
++#ifdef CONFIG_MACH_AT91RM9200KG
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_AT91RM9200KG
++# endif
++# define machine_is_at91rm9200kg() (machine_arch_type == MACH_TYPE_AT91RM9200KG)
++#else
++# define machine_is_at91rm9200kg() (0)
++#endif
++
++#ifdef CONFIG_MACH_SLEDB
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SLEDB
++# endif
++# define machine_is_racemt2() (machine_arch_type == MACH_TYPE_SLEDB)
++#else
++# define machine_is_racemt2() (0)
++#endif
++
++#ifdef CONFIG_MACH_ONTRACK
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_ONTRACK
++# endif
++# define machine_is_ontrack() (machine_arch_type == MACH_TYPE_ONTRACK)
++#else
++# define machine_is_ontrack() (0)
++#endif
++
++#ifdef CONFIG_MACH_PM1200
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PM1200
++# endif
++# define machine_is_pm1200() (machine_arch_type == MACH_TYPE_PM1200)
++#else
++# define machine_is_pm1200() (0)
++#endif
++
++#ifdef CONFIG_MACH_ESS24XXX
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_ESS24XXX
++# endif
++# define machine_is_ess24562() (machine_arch_type == MACH_TYPE_ESS24XXX)
++#else
++# define machine_is_ess24562() (0)
++#endif
++
++#ifdef CONFIG_MACH_COREMP7
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_COREMP7
++# endif
++# define machine_is_coremp7() (machine_arch_type == MACH_TYPE_COREMP7)
++#else
++# define machine_is_coremp7() (0)
++#endif
++
++#ifdef CONFIG_MACH_NEXCODER_6446
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_NEXCODER_6446
++# endif
++# define machine_is_nexcoder_6446() (machine_arch_type == MACH_TYPE_NEXCODER_6446)
++#else
++# define machine_is_nexcoder_6446() (0)
++#endif
++
++#ifdef CONFIG_MACH_STVC8380
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_STVC8380
++# endif
++# define machine_is_stvc8380() (machine_arch_type == MACH_TYPE_STVC8380)
++#else
++# define machine_is_stvc8380() (0)
++#endif
++
++#ifdef CONFIG_MACH_TEKLYNX
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_TEKLYNX
++# endif
++# define machine_is_teklynx() (machine_arch_type == MACH_TYPE_TEKLYNX)
++#else
++# define machine_is_teklynx() (0)
++#endif
++
++#ifdef CONFIG_MACH_CARBONADO
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_CARBONADO
++# endif
++# define machine_is_carbonado() (machine_arch_type == MACH_TYPE_CARBONADO)
++#else
++# define machine_is_carbonado() (0)
++#endif
++
++#ifdef CONFIG_MACH_SYSMOS_MP730
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SYSMOS_MP730
++# endif
++# define machine_is_sysmos_mp730() (machine_arch_type == MACH_TYPE_SYSMOS_MP730)
++#else
++# define machine_is_sysmos_mp730() (0)
++#endif
++
++#ifdef CONFIG_MACH_SNAPPER_CL15
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SNAPPER_CL15
++# endif
++# define machine_is_snapper_cl15() (machine_arch_type == MACH_TYPE_SNAPPER_CL15)
++#else
++# define machine_is_snapper_cl15() (0)
++#endif
++
++#ifdef CONFIG_MACH_PGIGIM
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PGIGIM
++# endif
++# define machine_is_pgigim() (machine_arch_type == MACH_TYPE_PGIGIM)
++#else
++# define machine_is_pgigim() (0)
++#endif
++
++#ifdef CONFIG_MACH_PTX9160P2
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PTX9160P2
++# endif
++# define machine_is_ptx9160p2() (machine_arch_type == MACH_TYPE_PTX9160P2)
++#else
++# define machine_is_ptx9160p2() (0)
++#endif
++
++#ifdef CONFIG_MACH_DCORE1
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_DCORE1
++# endif
++# define machine_is_dcore1() (machine_arch_type == MACH_TYPE_DCORE1)
++#else
++# define machine_is_dcore1() (0)
++#endif
++
++#ifdef CONFIG_MACH_VICTORPXA
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_VICTORPXA
++# endif
++# define machine_is_victorpxa() (machine_arch_type == MACH_TYPE_VICTORPXA)
++#else
++# define machine_is_victorpxa() (0)
++#endif
++
++#ifdef CONFIG_MACH_MX2DTB
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MX2DTB
++# endif
++# define machine_is_mx2dtb() (machine_arch_type == MACH_TYPE_MX2DTB)
++#else
++# define machine_is_mx2dtb() (0)
++#endif
++
++#ifdef CONFIG_MACH_PXA_IREX_ER0100
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PXA_IREX_ER0100
++# endif
++# define machine_is_pxa_irex_er0100() (machine_arch_type == MACH_TYPE_PXA_IREX_ER0100)
++#else
++# define machine_is_pxa_irex_er0100() (0)
++#endif
++
++#ifdef CONFIG_MACH_OMAP_PALMZ71
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_OMAP_PALMZ71
++# endif
++# define machine_is_omap_palmz71() (machine_arch_type == MACH_TYPE_OMAP_PALMZ71)
++#else
++# define machine_is_omap_palmz71() (0)
++#endif
++
++#ifdef CONFIG_MACH_BARTEC_DEG
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_BARTEC_DEG
++# endif
++# define machine_is_bartec_deg() (machine_arch_type == MACH_TYPE_BARTEC_DEG)
++#else
++# define machine_is_bartec_deg() (0)
++#endif
++
++#ifdef CONFIG_MACH_HW50251
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_HW50251
++# endif
++# define machine_is_hw50251() (machine_arch_type == MACH_TYPE_HW50251)
++#else
++# define machine_is_hw50251() (0)
++#endif
++
++#ifdef CONFIG_MACH_IBOX
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_IBOX
++# endif
++# define machine_is_ibox() (machine_arch_type == MACH_TYPE_IBOX)
++#else
++# define machine_is_ibox() (0)
++#endif
++
++#ifdef CONFIG_MACH_ATLASLH7A404
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_ATLASLH7A404
++# endif
++# define machine_is_atlaslh7a404() (machine_arch_type == MACH_TYPE_ATLASLH7A404)
++#else
++# define machine_is_atlaslh7a404() (0)
++#endif
++
++#ifdef CONFIG_MACH_PT2026
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PT2026
++# endif
++# define machine_is_pt2026() (machine_arch_type == MACH_TYPE_PT2026)
++#else
++# define machine_is_pt2026() (0)
++#endif
++
++#ifdef CONFIG_MACH_HTCALPINE
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_HTCALPINE
++# endif
++# define machine_is_htcalpine() (machine_arch_type == MACH_TYPE_HTCALPINE)
++#else
++# define machine_is_htcalpine() (0)
++#endif
++
++#ifdef CONFIG_MACH_BARTEC_VTU
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_BARTEC_VTU
++# endif
++# define machine_is_bartec_vtu() (machine_arch_type == MACH_TYPE_BARTEC_VTU)
++#else
++# define machine_is_bartec_vtu() (0)
++#endif
++
++#ifdef CONFIG_MACH_VCOREII
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_VCOREII
++# endif
++# define machine_is_vcoreii() (machine_arch_type == MACH_TYPE_VCOREII)
++#else
++# define machine_is_vcoreii() (0)
++#endif
++
++#ifdef CONFIG_MACH_PDNB3
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_PDNB3
++# endif
++# define machine_is_pdnb3() (machine_arch_type == MACH_TYPE_PDNB3)
++#else
++# define machine_is_pdnb3() (0)
++#endif
++
++#ifdef CONFIG_MACH_HTCBEETLES
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_HTCBEETLES
++# endif
++# define machine_is_htcbeetles() (machine_arch_type == MACH_TYPE_HTCBEETLES)
++#else
++# define machine_is_htcbeetles() (0)
++#endif
++
++#ifdef CONFIG_MACH_S3C6400
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_S3C6400
++# endif
++# define machine_is_s3c6400() (machine_arch_type == MACH_TYPE_S3C6400)
++#else
++# define machine_is_s3c6400() (0)
++#endif
++
++#ifdef CONFIG_MACH_S3C2443
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_S3C2443
++# endif
++# define machine_is_s3c2443() (machine_arch_type == MACH_TYPE_S3C2443)
++#else
++# define machine_is_s3c2443() (0)
++#endif
++
++#ifdef CONFIG_MACH_OMAP_LDK
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_OMAP_LDK
++# endif
++# define machine_is_omap_ldk() (machine_arch_type == MACH_TYPE_OMAP_LDK)
++#else
++# define machine_is_omap_ldk() (0)
++#endif
++
++#ifdef CONFIG_MACH_SMDK2460
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SMDK2460
++# endif
++# define machine_is_smdk2460() (machine_arch_type == MACH_TYPE_SMDK2460)
++#else
++# define machine_is_smdk2460() (0)
++#endif
++
++#ifdef CONFIG_MACH_SMDK2440
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SMDK2440
++# endif
++# define machine_is_smdk2440() (machine_arch_type == MACH_TYPE_SMDK2440)
++#else
++# define machine_is_smdk2440() (0)
++#endif
++
++#ifdef CONFIG_MACH_SMDK2412
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SMDK2412
++# endif
++# define machine_is_smdk2412() (machine_arch_type == MACH_TYPE_SMDK2412)
++#else
++# define machine_is_smdk2412() (0)
++#endif
++
++#ifdef CONFIG_MACH_WEBBOX
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_WEBBOX
++# endif
++# define machine_is_webbox() (machine_arch_type == MACH_TYPE_WEBBOX)
++#else
++# define machine_is_webbox() (0)
++#endif
++
++#ifdef CONFIG_MACH_CWWNDP
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_CWWNDP
++# endif
++# define machine_is_cwwndp() (machine_arch_type == MACH_TYPE_CWWNDP)
++#else
++# define machine_is_cwwndp() (0)
++#endif
++
++#ifdef CONFIG_MACH_DRAGON
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_DRAGON
++# endif
++# define machine_is_dragon() (machine_arch_type == MACH_TYPE_DRAGON)
++#else
++# define machine_is_dragon() (0)
++#endif
++
++#ifdef CONFIG_MACH_OPENDO_CPU_BOARD
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_OPENDO_CPU_BOARD
++# endif
++# define machine_is_opendo_cpu_board() (machine_arch_type == MACH_TYPE_OPENDO_CPU_BOARD)
++#else
++# define machine_is_opendo_cpu_board() (0)
++#endif
++
++#ifdef CONFIG_MACH_CCM2200
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_CCM2200
++# endif
++# define machine_is_ccm2200() (machine_arch_type == MACH_TYPE_CCM2200)
++#else
++# define machine_is_ccm2200() (0)
++#endif
++
++#ifdef CONFIG_MACH_ETWARM
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_ETWARM
++# endif
++# define machine_is_etwarm() (machine_arch_type == MACH_TYPE_ETWARM)
++#else
++# define machine_is_etwarm() (0)
++#endif
++
++#ifdef CONFIG_MACH_M93030
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_M93030
++# endif
++# define machine_is_m93030() (machine_arch_type == MACH_TYPE_M93030)
++#else
++# define machine_is_m93030() (0)
++#endif
++
++#ifdef CONFIG_MACH_CC7U
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_CC7U
++# endif
++# define machine_is_cc7u() (machine_arch_type == MACH_TYPE_CC7U)
++#else
++# define machine_is_cc7u() (0)
++#endif
++
++#ifdef CONFIG_MACH_MTT_RANGER
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_MTT_RANGER
++# endif
++# define machine_is_mtt_ranger() (machine_arch_type == MACH_TYPE_MTT_RANGER)
++#else
++# define machine_is_mtt_ranger() (0)
++#endif
++
++#ifdef CONFIG_MACH_NEXUS
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_NEXUS
++# endif
++# define machine_is_nexus() (machine_arch_type == MACH_TYPE_NEXUS)
++#else
++# define machine_is_nexus() (0)
++#endif
++
++#ifdef CONFIG_MACH_DESMAN
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_DESMAN
++# endif
++# define machine_is_desman() (machine_arch_type == MACH_TYPE_DESMAN)
++#else
++# define machine_is_desman() (0)
++#endif
++
++#ifdef CONFIG_MACH_BKDE303
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_BKDE303
++# endif
++# define machine_is_bkde303() (machine_arch_type == MACH_TYPE_BKDE303)
++#else
++# define machine_is_bkde303() (0)
++#endif
++
++#ifdef CONFIG_MACH_SMDK2413
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SMDK2413
++# endif
++# define machine_is_smdk2413() (machine_arch_type == MACH_TYPE_SMDK2413)
++#else
++# define machine_is_smdk2413() (0)
++#endif
++
++#ifdef CONFIG_MACH_AML_M7200
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_AML_M7200
++# endif
++# define machine_is_aml_m7200() (machine_arch_type == MACH_TYPE_AML_M7200)
++#else
++# define machine_is_aml_m7200() (0)
++#endif
++
++#ifdef CONFIG_MACH_AML_M5900
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_AML_M5900
++# endif
++# define machine_is_aml_m5900() (machine_arch_type == MACH_TYPE_AML_M5900)
++#else
++# define machine_is_aml_m5900() (0)
++#endif
++
++#ifdef CONFIG_MACH_SG640
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_SG640
++# endif
++# define machine_is_sg640() (machine_arch_type == MACH_TYPE_SG640)
++#else
++# define machine_is_sg640() (0)
++#endif
++
++#ifdef CONFIG_MACH_EDG79524
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_EDG79524
++# endif
++# define machine_is_edg79524() (machine_arch_type == MACH_TYPE_EDG79524)
++#else
++# define machine_is_edg79524() (0)
++#endif
++
++#ifdef CONFIG_MACH_AI2410
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_AI2410
++# endif
++# define machine_is_ai2410() (machine_arch_type == MACH_TYPE_AI2410)
++#else
++# define machine_is_ai2410() (0)
++#endif
++
++#ifdef CONFIG_MACH_IXP465
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_IXP465
++# endif
++# define machine_is_ixp465() (machine_arch_type == MACH_TYPE_IXP465)
++#else
++# define machine_is_ixp465() (0)
++#endif
++
++#ifdef CONFIG_MACH_BALLOON3
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_BALLOON3
++# endif
++# define machine_is_balloon3() (machine_arch_type == MACH_TYPE_BALLOON3)
++#else
++# define machine_is_balloon3() (0)
++#endif
++
++#ifdef CONFIG_MACH_QT2410
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_QT2410
++# endif
++# define machine_is_qt2410() (machine_arch_type == MACH_TYPE_QT2410)
++#else
++# define machine_is_qt2410() (0)
++#endif
++
+ /*
+ * These have not yet been registered
+ */
+diff --git a/include/configs/qt2410.h b/include/configs/qt2410.h
+new file mode 100644
+index 0000000..627f365
+--- /dev/null
++++ b/include/configs/qt2410.h
+@@ -0,0 +1,256 @@
++/*
++ * (C) Copyright 2002
++ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
++ * Marius Groeger <mgroeger at sysgo.de>
++ * Gary Jennejohn <gj at denx.de>
++ * David Mueller <d.mueller at elsoft.ch>
++ *
++ * Configuation settings for the SAMSUNG SMDK2410 board.
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#ifndef __CONFIG_H
++#define __CONFIG_H
++
++#if 0
++/* If we want to start u-boot from usb bootloader in NOR flash */
++#define CONFIG_SKIP_RELOCATE_UBOOT 1
++#define CONFIG_SKIP_LOWLEVEL_INIT 1
++#else
++/* If we want to start u-boot directly from within NAND flash */
++#define CONFIG_S3C2410_NAND_BOOT 1
++#endif
++
++/*
++ * High Level Configuration Options
++ * (easy to change)
++ */
++#define CONFIG_ARM920T 1 /* This is an ARM920T Core */
++#define CONFIG_S3C2410 1 /* in a SAMSUNG S3C2410 SoC */
++#define CONFIG_SMDK2410 1 /* on a SAMSUNG SMDK2410 Board */
++
++/* input clock of PLL */
++#define CONFIG_SYS_CLK_FREQ 12000000/* the SMDK2410 has 12MHz input clock */
++
++
++#define USE_920T_MMU 1
++#define CONFIG_USE_IRQ 1
++//#undef CONFIG_USE_IRQ /* we don't need IRQ/FIQ stuff */
++
++/*
++ * Size of malloc() pool
++ */
++#define CFG_MALLOC_LEN (CFG_ENV_SIZE + 128*1024)
++#define CFG_GBL_DATA_SIZE 128 /* size in bytes reserved for initial data */
++
++/*
++ * Hardware drivers
++ */
++#define CONFIG_DRIVER_CS8900 1 /* we have a CS8900 on-board */
++#define CS8900_BASE 0x19000300
++#define CS8900_BUS16 1 /* the Linux driver does accesses as shorts */
++
++/*
++ * select serial console configuration
++ */
++#define CONFIG_SERIAL1 1 /* we use SERIAL 1 on SMDK2410 */
++#define CONFIG_HWFLOW 1
++
++/************************************************************
++ * RTC
++ ************************************************************/
++#define CONFIG_RTC_S3C24X0 1
++
++/* allow to overwrite serial and ethaddr */
++#define CONFIG_ENV_OVERWRITE
++
++#define CONFIG_BAUDRATE 115200
++
++/***********************************************************
++ * Command definition
++ ***********************************************************/
++#define CONFIG_COMMANDS \
++ (CONFIG_CMD_DFL | \
++ CFG_CMD_BSP | \
++ CFG_CMD_CACHE | \
++ CFG_CMD_DATE | \
++ CFG_CMD_DHCP | \
++ CFG_CMD_DIAG | \
++ CFG_CMD_ELF | \
++ CFG_CMD_EXT2 | \
++ CFG_CMD_FAT | \
++ CFG_CMD_HWFLOW | \
++ /* CFG_CMD_IDE | */ \
++ /* CFG_CMD_IRQ | */ \
++ CFG_CMD_JFFS2 | \
++ CFG_CMD_MMC | \
++ CFG_CMD_NAND | \
++ CFG_CMD_PING | \
++ CFG_CMD_PORTIO | \
++ CFG_CMD_REGINFO | \
++ CFG_CMD_SAVES | \
++ CFG_CMD_USB)
++
++/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
++#include <cmd_confdefs.h>
++
++#define CONFIG_BOOTDELAY 3
++#define CONFIG_BOOTARGS "root=/dev/sda1 console=ttySAC0,115200 loglevel=8 rootdelay=10"
++/*#define CONFIG_ETHADDR 08:00:3e:26:0a:5b */
++#define CONFIG_NETMASK 255.255.255.0
++#define CONFIG_IPADDR 10.0.0.110
++#define CONFIG_SERVERIP 10.0.0.1
++/*#define CONFIG_BOOTFILE "elinos-lart" */
++#define CONFIG_BOOTCOMMAND "mmcinit; ext2load mmc 0 0x32000000 uImage; bootm 0x32000000"
++
++#define CONFIG_DOS_PARTITION 1
++
++#if (CONFIG_COMMANDS & CFG_CMD_KGDB)
++#define CONFIG_KGDB_BAUDRATE 115200 /* speed to run kgdb serial port */
++/* what's this ? it's not used anywhere */
++#define CONFIG_KGDB_SER_INDEX 1 /* which serial port to use */
++#endif
++
++/*
++ * Miscellaneous configurable options
++ */
++#define CFG_LONGHELP /* undef to save memory */
++#define CFG_PROMPT "QT2410 # " /* Monitor Command Prompt */
++#define CFG_CBSIZE 256 /* Console I/O Buffer Size */
++#define CFG_PBSIZE (CFG_CBSIZE+sizeof(CFG_PROMPT)+16) /* Print Buffer Size */
++#define CFG_MAXARGS 16 /* max number of command args */
++#define CFG_BARGSIZE CFG_CBSIZE /* Boot Argument Buffer Size */
++
++#define CFG_MEMTEST_START 0x30000000 /* memtest works on */
++#define CFG_MEMTEST_END 0x33F00000 /* 63 MB in DRAM */
++
++#undef CFG_CLKS_IN_HZ /* everything, incl board info, in Hz */
++
++#define CFG_LOAD_ADDR 0x33000000 /* default load address */
++
++/* the PWM TImer 4 uses a counter of 15625 for 10 ms, so we need */
++/* it to wrap 100 times (total 1562500) to get 1 sec. */
++#define CFG_HZ 1562500
++
++/* valid baudrates */
++#define CFG_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
++
++/*-----------------------------------------------------------------------
++ * Stack sizes
++ *
++ * The stack sizes are set up in start.S using the settings below
++ */
++#define CONFIG_STACKSIZE (128*1024) /* regular stack */
++#ifdef CONFIG_USE_IRQ
++#define CONFIG_STACKSIZE_IRQ (4*1024) /* IRQ stack */
++#define CONFIG_STACKSIZE_FIQ (4*1024) /* FIQ stack */
++#endif
++
++/* IDE/ATA config */
++
++#if 0
++#define CFG_IDE_MAXBUS 1
++#define CFG_IDE_MAXDEVICE 2
++#define CFG_IDE_PREINIT 0
++
++#define CFG_ATA_BASE_ADDR
++#endif
++
++#define CONFIG_USB_OHCI 1
++
++/*-----------------------------------------------------------------------
++ * Physical Memory Map
++ */
++#define CONFIG_NR_DRAM_BANKS 1 /* we have 1 bank of DRAM */
++#define PHYS_SDRAM_1 0x30000000 /* SDRAM Bank #1 */
++#define PHYS_SDRAM_1_SIZE 0x04000000 /* 64 MB */
++#define PHYS_SDRAM_RES_SIZE 0x00200000 /* 2 MB for frame buffer */
++
++#define PHYS_FLASH_1 0x00000000 /* Flash Bank #1 */
++
++#define CFG_FLASH_BASE PHYS_FLASH_1
++
++/*-----------------------------------------------------------------------
++ * FLASH and environment organization
++ */
++
++#define CONFIG_AMD_LV400 1 /* uncomment this if you have a LV400 flash */
++#if 0
++#define CONFIG_AMD_LV800 1 /* uncomment this if you have a LV800 flash */
++#endif
++
++#define CFG_MAX_FLASH_BANKS 1 /* max number of memory banks */
++#ifdef CONFIG_AMD_LV800
++#define PHYS_FLASH_SIZE 0x00100000 /* 1MB */
++#define CFG_MAX_FLASH_SECT (19) /* max number of sectors on one chip */
++#define CFG_ENV_ADDR (CFG_FLASH_BASE + 0x0F0000) /* addr of environment */
++#endif
++#ifdef CONFIG_AMD_LV400
++#define PHYS_FLASH_SIZE 0x00080000 /* 512KB */
++#define CFG_MAX_FLASH_SECT (11) /* max number of sectors on one chip */
++#define CFG_ENV_ADDR (CFG_FLASH_BASE + 0x070000) /* addr of environment */
++#endif
++
++/* timeout values are in ticks */
++#define CFG_FLASH_ERASE_TOUT (5*CFG_HZ) /* Timeout for Flash Erase */
++#define CFG_FLASH_WRITE_TOUT (5*CFG_HZ) /* Timeout for Flash Write */
++
++#define CFG_ENV_IS_IN_NAND 1
++#define CFG_ENV_SIZE 0x4000 /* 16k Total Size of Environment Sector */
++#define CFG_ENV_OFFSET 0x30000 /* environment after bootloader */
++
++#define NAND_MAX_CHIPS 1
++#define CFG_NAND_BASE 0x4e000000
++#define CFG_MAX_NAND_DEVICE 1
++
++#define CONFIG_MMC 1
++#define CFG_MMC_BASE 0xff000000
++
++#define CONFIG_EXT2 1
++
++/* FAT driver in u-boot is broken currently */
++#define CONFIG_FAT 1
++#define CONFIG_SUPPORT_VFAT
++
++/* ATAG configuration */
++#define CONFIG_INITRD_TAG 1
++#define CONFIG_SETUP_MEMORY_TAGS 1
++#define CONFIG_CMDLINE_TAG 1
++#if 0
++#define CONFIG_SERIAL_TAG 1
++#define CONFIG_REVISION_TAG 1
++#endif
++
++
++#if 0
++#define CONFIG_VIDEO
++#define CONFIG_VIDEO_S3C2410
++#define CONFIG_CFB_CONSOLE
++#define CONFIG_VIDEO_LOGO
++#define CONFIG_VGA_AS_SINGLE_DEVICE
++
++#define VIDEO_KBD_INIT_FCT 0
++#define VIDEO_TSTC_FCT serial_tstc
++#define VIDEO_GETC_FCT serial_getc
++
++#define LCD_VIDEO_ADDR 0x33d00000
++#endif
++
++#endif /* __CONFIG_H */
+diff --git a/include/s3c2410.h b/include/s3c2410.h
+index 86495f6..913521d 100644
+--- a/include/s3c2410.h
++++ b/include/s3c2410.h
+@@ -38,12 +38,6 @@ #define S3C24X0_SPI_CHANNELS 2
+ #define S3C2410_ECCSIZE 512
+ #define S3C2410_ECCBYTES 3
+
+-typedef enum {
+- S3C24X0_UART0,
+- S3C24X0_UART1,
+- S3C24X0_UART2
+-} S3C24X0_UARTS_NR;
+-
+ /* S3C2410 device base addresses */
+ #define S3C24X0_MEMCTL_BASE 0x48000000
+ #define S3C24X0_USB_HOST_BASE 0x49000000
+@@ -65,9 +59,23 @@ #define S3C24X0_SPI_BASE 0x59000000
+ #define S3C2410_SDI_BASE 0x5A000000
+
+
++#define oNFCONF 0x00
++#define oNFCMD 0x04
++#define oNFADDR 0x08
++#define oNFDATA 0x0C
++#define oNFSTAT 0x10
++#define oNFECC 0x14
++
++#ifndef __ASSEMBLER__
++
+ /* include common stuff */
+ #include <s3c24x0.h>
+
++typedef enum {
++ S3C24X0_UART0,
++ S3C24X0_UART1,
++ S3C24X0_UART2
++} S3C24X0_UARTS_NR;
+
+ static inline S3C24X0_MEMCTL * const S3C24X0_GetBase_MEMCTL(void)
+ {
+@@ -142,6 +150,7 @@ static inline S3C2410_SDI * const S3C241
+ return (S3C2410_SDI * const)S3C2410_SDI_BASE;
+ }
+
++#endif
+
+ /* ISR */
+ #define pISR_RESET (*(unsigned *)(_ISR_STARTADDRESS+0x0))
+diff --git a/include/s3c24x0.h b/include/s3c24x0.h
+index 71f35a5..557b91f 100644
+--- a/include/s3c24x0.h
++++ b/include/s3c24x0.h
+@@ -637,13 +637,7 @@ typedef struct {
+ S3C24X0_REG32 SDIDCNT;
+ S3C24X0_REG32 SDIDSTA;
+ S3C24X0_REG32 SDIFSTA;
+-#ifdef __BIG_ENDIAN
+- S3C24X0_REG8 res[3];
+- S3C24X0_REG8 SDIDAT;
+-#else
+- S3C24X0_REG8 SDIDAT;
+- S3C24X0_REG8 res[3];
+-#endif
++ S3C24X0_REG32 SDIDAT;
+ S3C24X0_REG32 SDIIMSK;
+ } /*__attribute__((__packed__))*/ S3C2410_SDI;
+
+@@ -1123,11 +1117,7 @@ #define rSDIDatCon (*(volatile unsigned
+ #define rSDIDatCnt (*(volatile unsigned *)0x5A000030)
+ #define rSDIDatSta (*(volatile unsigned *)0x5A000034)
+ #define rSDIFSTA (*(volatile unsigned *)0x5A000038)
+-#ifdef __BIG_ENDIAN
+-#define rSDIDAT (*(volatile unsigned char *)0x5A00003F)
+-#else
+-#define rSDIDAT (*(volatile unsigned char *)0x5A00003C)
+-#endif
++#define rSDIDAT (*(volatile unsigned *)0x5A00003C)
+ #define rSDIIntMsk (*(volatile unsigned *)0x5A000040)
+
+ #endif
Added: trunk/oe/packages/uboot/files/u-boot-20060807.tar.bz2
===================================================================
(Binary files differ)
Property changes on: trunk/oe/packages/uboot/files/u-boot-20060807.tar.bz2
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/oe/packages/uboot/files/u-boot-20060907.tar.bz2
===================================================================
(Binary files differ)
Property changes on: trunk/oe/packages/uboot/files/u-boot-20060907.tar.bz2
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/oe/packages/uboot/uboot-qt2410_0.0+cvs20060807.bb
===================================================================
--- trunk/oe/packages/uboot/uboot-qt2410_0.0+cvs20060807.bb 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/uboot/uboot-qt2410_0.0+cvs20060807.bb 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,41 @@
+DESCRIPTION = "U-boot bootloader w/ armzone qt2410 support"
+SECTION = "bootloader"
+PRIORITY = "optional"
+LICENSE = "GPL"
+SRCDATE := "${PV}"
+PR = "r2"
+
+PROVIDES = "virtual/bootloader"
+S = "${WORKDIR}/u-boot"
+
+SRC_URI = "file://u-boot-20060807.tar.bz2 \
+ file://u-boot-20060807-qt2410.patch;patch=1 \
+ file://qt2410_*.h"
+
+EXTRA_OEMAKE = "CROSS_COMPILE=${TARGET_PREFIX}"
+TARGET_LDFLAGS = ""
+UBOOT_MACHINE = "qt2410_config"
+
+inherit base
+
+do_compile () {
+ for type in nand ram
+ do
+ install -m 0644 ${WORKDIR}/qt2410_${type}.h include/configs/qt2410.h
+ oe_runmake ${UBOOT_MACHINE}
+ oe_runmake all
+ mv u-boot.bin u-boot_$type.bin
+ done
+}
+
+do_deploy () {
+ install -d ${DEPLOY_DIR_IMAGE}
+ for type in nand ram
+ do
+ install ${S}/u-boot_$type.bin ${DEPLOY_DIR_IMAGE}/u-boot_$type-${MACHINE}-${DATETIME}.bin
+ done
+ install -m 0755 tools/mkimage ${STAGING_BINDIR}/uboot-mkimage
+}
+
+do_deploy[dirs] = "${S}"
+addtask deploy before do_build after do_compile
Added: trunk/oe/packages/uboot/uboot-qt2410_0.0+cvs20060907.bb
===================================================================
--- trunk/oe/packages/uboot/uboot-qt2410_0.0+cvs20060907.bb 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/uboot/uboot-qt2410_0.0+cvs20060907.bb 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,40 @@
+DESCRIPTION = "U-boot bootloader w/ armzone qt2410 support"
+SECTION = "bootloader"
+PRIORITY = "optional"
+LICENSE = "GPL"
+SRCDATE := "${PV}"
+PR = "r0"
+
+PROVIDES = "virtual/bootloader"
+S = "${WORKDIR}/u-boot"
+
+SRC_URI = "file://u-boot-20060907.tar.bz2 \
+ file://qt2410_*.h"
+
+EXTRA_OEMAKE = "CROSS_COMPILE=${TARGET_PREFIX}"
+TARGET_LDFLAGS = ""
+UBOOT_MACHINE = "qt2410_config"
+
+inherit base
+
+do_compile () {
+ for type in nand ram
+ do
+ install -m 0644 ${WORKDIR}/qt2410_${type}.h include/configs/qt2410.h
+ oe_runmake ${UBOOT_MACHINE}
+ oe_runmake all
+ mv u-boot.bin u-boot_$type.bin
+ done
+}
+
+do_deploy () {
+ install -d ${DEPLOY_DIR_IMAGE}
+ for type in nand ram
+ do
+ install ${S}/u-boot_$type.bin ${DEPLOY_DIR_IMAGE}/u-boot_$type-${MACHINE}-${DATETIME}.bin
+ done
+ install -m 0755 tools/mkimage ${STAGING_BINDIR}/uboot-mkimage
+}
+
+do_deploy[dirs] = "${S}"
+addtask deploy before do_build after do_compile
Added: trunk/oe/packages/uucp/uucp_1.07.bb
===================================================================
--- trunk/oe/packages/uucp/uucp_1.07.bb 2006-09-06 18:37:38 UTC (rev 43)
+++ trunk/oe/packages/uucp/uucp_1.07.bb 2006-09-08 06:42:04 UTC (rev 44)
@@ -0,0 +1,16 @@
+DESCRIPTION = "Unix to Unix Copy"
+HOMEPAGE = "http://www.airs.com/ian/uucp.html"
+SECTION = "console/utils"
+LICENSE = "GPL"
+PR = "r0"
+
+SRC_URI = "ftp://ftp.gnu.org/pub/gnu/uucp/uucp-${PV}.tar.gz"
+S = "${WORKDIR}/uucp-${PV}"
+
+inherit autotools
+
+
+do_configure() {
+ gnu-configize
+ oe_runconf
+}
More information about the commitlog
mailing list