summaryrefslogtreecommitdiff
path: root/packages
diff options
context:
space:
mode:
authorPhilip Balister <philip@balister.org>2006-10-28 13:48:12 +0000
committerPhilip Balister <philip@balister.org>2006-10-28 13:48:12 +0000
commita84ca6515375010be1cb18ec82ec48968b89bb84 (patch)
tree1b430a4a6516a660fb9a4c5c6372fb101acd22bf /packages
parent0332c860f096406ed143260218d9938b79173599 (diff)
parent4c49cec0f00a58693f324b06363744dbcf856329 (diff)
merge of '9bb5aacf211c840ef28190458936fec0e3163a18'
and 'a89f7dd0fbeeb4f5627838591cb356337a0b5ae2'
Diffstat (limited to 'packages')
-rw-r--r--packages/alsa/alsa-lib_1.0.11.bb1
-rw-r--r--packages/altboot/altboot_0.0.0.bb6
-rw-r--r--packages/altboot/files/altboot-menu/Advanced/70-install-tgz3
-rw-r--r--packages/altboot/files/altboot-menu/Advanced/70-setKernel3
-rw-r--r--packages/altboot/files/altboot-menu/Advanced/80-configure-kexec2
-rw-r--r--packages/altboot/files/altboot-menu/Advanced/80-copyrootfs2
-rw-r--r--packages/altboot/files/altboot.func40
-rwxr-xr-xpackages/altboot/files/altbootctl309
-rw-r--r--packages/altboot/files/altbootctl.conf90
-rw-r--r--packages/altboot/files/init.altboot136
-rw-r--r--packages/busybox/busybox_1.2.2.bb163
-rw-r--r--packages/dbus/dbus-glib-0.72/.mtn2git_empty (renamed from packages/linux/handhelds-sa-2.6/.mtn2git_empty)0
-rw-r--r--packages/dbus/dbus-glib-0.72/cross.patch12
-rw-r--r--packages/dbus/dbus-glib-0.72/no-introspect.patch19
-rw-r--r--packages/dbus/dbus-glib-native-0.72/.mtn2git_empty (renamed from packages/linux/linux-handhelds-2.6/h5xxx/.mtn2git_empty)0
-rw-r--r--packages/dbus/dbus-glib-native-0.72/run-with-tmp-session-bus.patch23
-rw-r--r--packages/dbus/dbus-glib-native_0.72.bb22
-rw-r--r--packages/dbus/dbus-glib_0.72.bb29
-rw-r--r--packages/efl/esmart.inc1
-rw-r--r--packages/fbgrab/fbgrab_1.0.bb2
-rw-r--r--packages/gcc/gcc-4.1.1/unbreak-armv4t.patch12
-rw-r--r--packages/gcc/gcc_4.1.1.bb6
-rw-r--r--packages/glibc/glibc-package.bbclass2
-rw-r--r--packages/gnome/libsoup_2.2.93.bb1
-rw-r--r--packages/gnome/libsoup_2.2.96.bb1
-rw-r--r--packages/gnutls/gnutls_1.4.0.bb1
-rw-r--r--packages/libmimedir/libmimedir_0.4.0-20060804.bb1
-rw-r--r--packages/linux/compulab-pxa270-2.6.16/.mtn2git_empty (renamed from packages/linux/linux-handhelds-2.6/ipaq-pxa270/.mtn2git_empty)0
-rw-r--r--packages/linux/compulab-pxa270-2.6.16/defconfig1312
-rw-r--r--packages/linux/compulab-pxa270-2.6.16/linux-2.6.16.patch9302
-rw-r--r--packages/linux/compulab-pxa270_2.6.16.bb36
-rw-r--r--packages/linux/handhelds-sa-2.6_cvs.bb30
-rw-r--r--packages/linux/handhelds-un-2.6_2.6.16-hh4.bb30
-rw-r--r--packages/linux/ixp4xx-kernel.inc16
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.16/.mtn2git_empty (renamed from packages/linux/linux-handhelds-2.6/magician/.mtn2git_empty)0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.16/24-hostap_cs_id.diff107
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.16/block-pio.patch (renamed from packages/linux/linux-handhelds-2.6/block-pio.patch)0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.16/defconfig (renamed from packages/linux/linux-handhelds-2.6/defconfig)0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.16/defconfig-ipaq-pxa-2.6 (renamed from packages/linux/linux-handhelds-2.6/defconfig-ipaq-pxa-2.6)0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.16/eabi-enums.patch (renamed from packages/linux/linux-handhelds-2.6/eabi-enums.patch)0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.16/h2200/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.16/h2200/defconfig1618
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.16/h4000/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.16/h4000/defconfig1348
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.16/h5xxx/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.16/h5xxx/defconfig (renamed from packages/linux/linux-handhelds-2.6/h5xxx/defconfig)0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.16/hrw-pcmcia-ids-r2.patch35
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.16/htcuniversal/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.16/htcuniversal/defconfig1209
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.16/hx4700/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.16/hx4700/defconfig (renamed from packages/linux/linux-handhelds-2.6/ipaq-pxa270/defconfig)0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.16/ide_not_removable-r0.patch (renamed from packages/linux/linux-handhelds-2.6/ide_not_removable-r0.patch)0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.16/ipaq-pxa270/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.16/ipaq-pxa270/defconfig1687
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.16/jornada56x/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.16/jornada56x/defconfig (renamed from packages/linux/handhelds-sa-2.6/defconfig-jornada56x)0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.16/magician/.mtn2git_empty0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.16/magician/defconfig (renamed from packages/linux/linux-handhelds-2.6/magician/defconfig)0
-rw-r--r--packages/linux/linux-handhelds-2.6-2.6.16/pitre-tls-2651.patch (renamed from packages/linux/linux-handhelds-2.6/pitre-tls-2651.patch)0
-rw-r--r--packages/linux/linux-handhelds-2.6.inc4
-rw-r--r--packages/linux/linux-handhelds-2.6/h2200/defconfig178
-rw-r--r--packages/linux/linux-handhelds-2.6/h4000/defconfig63
-rw-r--r--packages/linux/linux-handhelds-2.6/hx4700/defconfig140
-rw-r--r--packages/linux/linux-handhelds-2.6_2.6.16-hh5.bb2
-rw-r--r--packages/linux/linux-handhelds-2.6_2.6.16-hh7.bb6
-rw-r--r--packages/linux/linux-handhelds-2.6_2.6.17-hh2.bb8
-rw-r--r--packages/linux/linux-jlime-jornada6xx-2.6.17/defconfig_jlime48
-rw-r--r--packages/net-tools/.mtn2git_empty0
-rw-r--r--packages/net-tools/files/.mtn2git_empty0
-rw-r--r--packages/net-tools/files/README1
-rw-r--r--packages/net-tools/files/ether-wake.881
-rw-r--r--packages/net-tools/files/ether-wake.c392
-rw-r--r--packages/net-tools/files/mii-diag.8160
-rw-r--r--packages/net-tools/files/mii-diag.c650
-rw-r--r--packages/net-tools/files/net-tools-1.57-bug22040.patch50
-rw-r--r--packages/net-tools/files/net-tools-1.60-arp_overflow.patch11
-rw-r--r--packages/net-tools/files/net-tools-1.60-bcast.patch99
-rw-r--r--packages/net-tools/files/net-tools-1.60-bitkeeper.patch17
-rw-r--r--packages/net-tools/files/net-tools-1.60-config.h75
-rw-r--r--packages/net-tools/files/net-tools-1.60-config.make36
-rw-r--r--packages/net-tools/files/net-tools-1.60-cycle.patch311
-rw-r--r--packages/net-tools/files/net-tools-1.60-de.patch11
-rw-r--r--packages/net-tools/files/net-tools-1.60-duplicate-tcp.patch194
-rw-r--r--packages/net-tools/files/net-tools-1.60-gcc33.patch31
-rw-r--r--packages/net-tools/files/net-tools-1.60-gcc34.patch36
-rw-r--r--packages/net-tools/files/net-tools-1.60-hostname_man.patch35
-rw-r--r--packages/net-tools/files/net-tools-1.60-ifaceopt.patch52
-rw-r--r--packages/net-tools/files/net-tools-1.60-ifconfig.patch107
-rw-r--r--packages/net-tools/files/net-tools-1.60-ifconfig_ib.patch202
-rw-r--r--packages/net-tools/files/net-tools-1.60-inet6-lookup.patch81
-rw-r--r--packages/net-tools/files/net-tools-1.60-interface.patch110
-rw-r--r--packages/net-tools/files/net-tools-1.60-interface_stack.patch115
-rw-r--r--packages/net-tools/files/net-tools-1.60-ipx.patch36
-rw-r--r--packages/net-tools/files/net-tools-1.60-isofix.patch33
-rw-r--r--packages/net-tools/files/net-tools-1.60-man.patch132
-rw-r--r--packages/net-tools/files/net-tools-1.60-manydevs.patch13
-rw-r--r--packages/net-tools/files/net-tools-1.60-mii-tool-obsolete.patch25
-rw-r--r--packages/net-tools/files/net-tools-1.60-miiioctl.patch17
-rw-r--r--packages/net-tools/files/net-tools-1.60-nameif.patch67
-rw-r--r--packages/net-tools/files/net-tools-1.60-netmask.patch61
-rw-r--r--packages/net-tools/files/net-tools-1.60-netstat_stop_trim.patch80
-rw-r--r--packages/net-tools/files/net-tools-1.60-netstat_ulong.patch11
-rw-r--r--packages/net-tools/files/net-tools-1.60-note.patch13
-rw-r--r--packages/net-tools/files/net-tools-1.60-num-ports.patch78
-rw-r--r--packages/net-tools/files/net-tools-1.60-overflow.patch63
-rw-r--r--packages/net-tools/files/net-tools-1.60-parse.patch70
-rw-r--r--packages/net-tools/files/net-tools-1.60-pie.patch13
-rw-r--r--packages/net-tools/files/net-tools-1.60-return.patch28
-rw-r--r--packages/net-tools/files/net-tools-1.60-selinux.patch205
-rw-r--r--packages/net-tools/files/net-tools-1.60-siunits.patch80
-rw-r--r--packages/net-tools/files/net-tools-1.60-statalias.patch15
-rw-r--r--packages/net-tools/files/net-tools-1.60-statistics.patch65
-rw-r--r--packages/net-tools/files/net-tools-1.60-stdo.patch11
-rw-r--r--packages/net-tools/files/net-tools-1.60-trailingblank.patch26
-rw-r--r--packages/net-tools/files/net-tools-1.60-trim_iface.patch31
-rw-r--r--packages/net-tools/files/net-tools-1.60-trunc.patch42
-rw-r--r--packages/net-tools/files/net-tools-1.60-ulong.patch215
-rw-r--r--packages/net-tools/files/net-tools-1.60-virtualname.patch36
-rw-r--r--packages/net-tools/net-tools_1.60.bb89
-rw-r--r--packages/octave/octave_2.1.63.bb17
-rw-r--r--packages/octave/octave_2.1.71.bb4
-rw-r--r--packages/popt/popt-native_1.7.bb1
-rw-r--r--packages/popt/popt_1.7.bb5
-rw-r--r--packages/python/python_2.4.3.bb1
-rw-r--r--packages/qte/qte-common_2.3.10.inc1
125 files changed, 22219 insertions, 288 deletions
diff --git a/packages/alsa/alsa-lib_1.0.11.bb b/packages/alsa/alsa-lib_1.0.11.bb
index ebfd793f9b..c89aa79afd 100644
--- a/packages/alsa/alsa-lib_1.0.11.bb
+++ b/packages/alsa/alsa-lib_1.0.11.bb
@@ -26,7 +26,6 @@ do_stage() {
}
PACKAGES =+ "alsa-server libasound alsa-conf alsa-doc alsa-dev"
-PACKAGES_DYNAMIC = "libasound*"
FILES_${PN}-dbg += "${libdir}/alsa-lib/*/.debu*"
FILES_libasound = "${libdir}/libasound.so*"
FILES_alsa-server = "${bindir}"
diff --git a/packages/altboot/altboot_0.0.0.bb b/packages/altboot/altboot_0.0.0.bb
index 1970604222..7130af5a33 100644
--- a/packages/altboot/altboot_0.0.0.bb
+++ b/packages/altboot/altboot_0.0.0.bb
@@ -20,7 +20,7 @@ RDEPENDS_${PN} = "${PN}-conf"
######################################################################################
-PR = "r45"
+PR = "r46"
######################################################################################
@@ -35,6 +35,8 @@ SRC_URI = "file://altboot-menu \
file://altboot.func \
file://init.altboot \
file://altboot*.cfg \
+ file://altbootctl.conf \
+ file://altbootctl \
file://beep.raw"
# S = "${WORKDIR}/altboot/"
@@ -56,7 +58,9 @@ do_install() {
install -m 0644 ${WORKDIR}/beep.raw ${D}/usr/share/sounds
install -m 0644 ${WORKDIR}/altboot*.cfg ${D}/etc
install -m 0644 ${WORKDIR}/altboot.func ${D}/etc
+ install -m 0644 ${WORKDIR}/altbootctl.conf ${D}/etc
install -m 0755 ${WORKDIR}/init.altboot ${D}/sbin
+ install -m 0755 ${WORKDIR}/altbootctl ${D}/sbin
install -m 0755 ${WORKDIR}/altboot-menu/*-* ${D}/etc/altboot-menu
diff --git a/packages/altboot/files/altboot-menu/Advanced/70-install-tgz b/packages/altboot/files/altboot-menu/Advanced/70-install-tgz
index cb8b2722d5..aca0d047c6 100644
--- a/packages/altboot/files/altboot-menu/Advanced/70-install-tgz
+++ b/packages/altboot/files/altboot-menu/Advanced/70-install-tgz
@@ -1,6 +1,6 @@
#!/bin/sh
-
M_TITLE="Install RootFS from tar.gz"
+M_FLAGS="noRemember"
run_module(){
test -e /etc/altboot.func && . /etc/altboot.func || die "ERROR: /etc/altboot.func not found. Check your installation!"
@@ -259,5 +259,6 @@ install_rootfs_image(){
case "$1" in
title) echo "$M_TITLE";;
+flags) echo "$M_FLAGS";;
run) run_module "$2";;
esac
diff --git a/packages/altboot/files/altboot-menu/Advanced/70-setKernel b/packages/altboot/files/altboot-menu/Advanced/70-setKernel
index 6192232a73..50f61d034f 100644
--- a/packages/altboot/files/altboot-menu/Advanced/70-setKernel
+++ b/packages/altboot/files/altboot-menu/Advanced/70-setKernel
@@ -1,7 +1,8 @@
# !/bin/sh
M_TITLE="Choose kernel for next boot"
-
+# Deprecated due to altbootctl
+exit 0
# Only kernel 2.6 offers kexec support
uname -r | grep -q "^2.6" || exit 0
diff --git a/packages/altboot/files/altboot-menu/Advanced/80-configure-kexec b/packages/altboot/files/altboot-menu/Advanced/80-configure-kexec
index e294df683f..1b8fc6e547 100644
--- a/packages/altboot/files/altboot-menu/Advanced/80-configure-kexec
+++ b/packages/altboot/files/altboot-menu/Advanced/80-configure-kexec
@@ -1,6 +1,8 @@
# !/bin/sh
M_TITLE="Configure kexec CMDLINE"
+# Deprecated due to altbootctl
+exit 0
# Only kernel 2.6 offers kexec support
diff --git a/packages/altboot/files/altboot-menu/Advanced/80-copyrootfs b/packages/altboot/files/altboot-menu/Advanced/80-copyrootfs
index af6bd38c1d..2d305e349f 100644
--- a/packages/altboot/files/altboot-menu/Advanced/80-copyrootfs
+++ b/packages/altboot/files/altboot-menu/Advanced/80-copyrootfs
@@ -1,5 +1,6 @@
# !/bin/sh
M_TITLE="Copy rootfs to SD/CF"
+M_FLAGS="noRemember"
# Unfinished script.
exit 0
@@ -317,5 +318,6 @@ run_module() {
case "$1" in
title) echo "$M_TITLE";;
+flags) echo "$M_FLAGS";;
run) run_module;;
esac
diff --git a/packages/altboot/files/altboot.func b/packages/altboot/files/altboot.func
index 7457f66822..b3d25ff9f4 100644
--- a/packages/altboot/files/altboot.func
+++ b/packages/altboot/files/altboot.func
@@ -580,11 +580,15 @@ set_pref() {
data_id="$2"
data_value="$3"
- #echo "[$1] [$2] [$3]"
+ #debug_echo "[$1] [$2] [$3]"
#export "${data_name}"="`eval echo -e \\$${data_name} | sed "s/\#\#\#/\#\#\#\\n/g"|sed s/^\ // | sed s/^$data_id.*//`"
- export "${data_name}"="`eval echo -e \\$${data_name} `$data_id##$data_value###"
-
+ if test -z "$3"
+ then
+ debug_echo "set_pref(): WARNING, writing empty value to $data_name / $data_id! THIS WILL BREAK THINGS"
+ #data_value=" "
+ fi
+ export "${data_name}"="`eval echo -e \\$${data_name} `$data_id##$data_value###"
}
# $1: uniq name
@@ -602,7 +606,32 @@ echo_pref() {
dump_pref() {
data_name="$1"
- echo "`eval echo -e \\$${data_name} | sed "s/\#\#\#/\#\#\#\\n/g"|sed s/^\ // `"
+ echo "`eval echo -e ${data_name} | sed "s/\#\#\#/\#\#\#\\n/g"|sed s/^\ // `"
+
+ #echo "-- `eval echo ${data_name}` --"
+ #debug_echo "[$menu_fileflags]"
+}
+
+# $1 = name, $2 = cache_file
+export_pref() {
+ data_name="$1"
+ echo "`eval echo -e ${data_name}`" > "$2"
+}
+
+# $1 = name, $2 = cache_file
+import_pref() {
+ data_name="$1"
+ data_id="$2"
+
+ #debug_echo "[$1] [$2] [$3]"
+
+ if test -z "$3"
+ then
+ debug_echo "set_pref(): WARNING, writing empty value to $data_name / $data_id! THIS WILL BREAK THINGS"
+ #data_value=" "
+ fi
+ export "${data_name}"="`cat "$2"`"
+
}
# $1: uniq name, $2 identifier, $3 out var
@@ -612,10 +641,11 @@ get_pref() {
data_out="$3"
data_list="`eval echo -e \\$${data_name}`"
+ #echo "data_list: [$data_list]"
#data_value="`echo "$data_list"| sed "s/\#\#\#/\\n/g"|sed s/^\ // | grep "^$data_id##" | sed -n "s/.*\#\(.*\)$/\1/p"`"
#data_value="`echo "$data_list"| sed "s/\#\#\#/\\n/g"|sed s/^\ // | sed -n "/^$data_id/s/.*\#\(.*\)$/\1/p"`"
data_value="`echo "$data_list"| sed "s/\#\#\#/\\n/g" | sed -n "s/^\ //;/^$data_id\#/s/.*\#\(.*\)$/\1/p"`"
- # echo "WERT: [$data_value]"
+ #echo "WERT: [$data_value]"
export "${data_out}"="$data_value"
test -n "$data_value" && return 0
diff --git a/packages/altboot/files/altbootctl b/packages/altboot/files/altbootctl
new file mode 100755
index 0000000000..e09df1927b
--- /dev/null
+++ b/packages/altboot/files/altbootctl
@@ -0,0 +1,309 @@
+#! /bin/sh
+#
+# Copyright Matthias Hentges <devel@hentges.net> (c) 2006
+# License: GPL (see http://www.gnu.org/licenses/gpl.txt for a copy of the license)
+#
+# Filename: hentges-setup.sh
+# Date: 03-Jun-06
+
+die() {
+ echo -e "$*"
+ exit 1
+}
+
+
+PERMANENT_CFG="/etc/altboot-`uname -r | cut -c1-3`.cfg"
+TEMPORARY_CFG="/etc/altboot-`uname -r | cut -c1-3`.cfg.next-reboot"
+
+CFG="$PERMANENT_CFG"
+SCRIPT_CONFIG="/etc/altbootctl.conf"
+
+test -e "$SCRIPT_CONFIG" && . "$SCRIPT_CONFIG" || die "$SCRIPT_CONFIG not found"
+
+# $1= Setting, $2 = new value
+set_pref() {
+
+ if ( cat "$CFG" | grep -q "$1" )
+ then
+ cat "$CFG" | sed "/^$1/s/\(.*\)\=\(.*\)/\1\=\"$2\"/" > ${CFG}_
+ mv ${CFG}_ ${CFG}
+ else
+ echo "$1=\"$2\"" >> "${CFG}"
+ fi
+}
+
+# $1= Setting
+get_pref() {
+ n="$1"
+ value="`cat "${CFG}" | sed -n "/^$n/s/\(.*\)\=\\"\(.*\)\\"/\2/p"`"
+ #echo "cat "${CFG}" | sed -n "/^$n/s/\(.*\)\=\"\(.*\)\"/\2/p""
+ test -z "$value" && die "Couldn't get value for [$n]"
+ echo "$value"
+}
+
+ask_pref() {
+ SETTING_NAME="$1"
+
+ SETTING_TEXT_="${SETTING_NAME}_TEXT"
+ SETTING_TEXT="`eval echo -e \\$${SETTING_TEXT_}`"
+
+ SETTING_VALUES_="${SETTING_NAME}_VALUES"
+ SETTING_VALUES="`eval echo -e \\$${SETTING_VALUES_}`"
+
+ SETTING_OLD_VALUE="`get_pref "$SETTING_NAME"`"
+ test -z "$SETTING_TEXT" -o -z "$SETTING_VALUES" && die "ask_pref: [$1] -> [$SETTING_TEXT] [$SETTING_VALUES]"
+
+ #echo "[$1] -> $SETTING_OLD_VALUE"
+ #echo -e "$SETTING_TEXT"
+
+
+ if test "$SETTING_VALUES" = "<STRING>"
+ then
+ while true
+ do
+ echo -e "\nPlease enter a new value [$SETTING_OLD_VALUE]"
+ echo -en "Your Choice: "
+ read junk
+
+ echo ""
+
+ while true
+ do
+ echo -n "Is the new value of [$junk] correct? [Y|n] "
+ read junk2
+
+ case "$junk2" in
+ y|Y|"") END_LOOP=true
+ break ;;
+ *) END_LOOP=false
+ break ;;
+ esac
+ done
+
+ if test "$END_LOOP" = "true"
+ then
+ SETTING_NEW_VALUE="$junk"
+ break
+ fi
+
+ done
+
+ else
+ # If it's not a string, it's a fixed list of possible settings
+ echo -e "\nSelect one of the following:\n"
+ cnt=1
+ for val in $SETTING_VALUES
+ do
+ if test "$val" != "$SETTING_OLD_VALUE"
+ then
+ echo -e "\t[$cnt] $val"
+ else
+ echo -e "\t[$cnt] $val *"
+ SETTING_OLD_VALUE_NUM="$cnt"
+ fi
+ let cnt=$cnt+1
+ done
+
+ echo ""
+ while true
+ do
+ echo -en "Your choice [$SETTING_OLD_VALUE_NUM]: "
+ read junk
+
+ if test -n "$junk"
+ then
+ cnt=1 ; SETTING_NEW_VALUE=""
+ for val in $SETTING_VALUES
+ do
+ if test "$junk" = "$cnt"
+ then
+ SETTING_NEW_VALUE="$val"
+ break
+ fi
+
+ let cnt=$cnt+1
+ done
+ else
+ SETTING_NEW_VALUE="$SETTING_OLD_VALUE"
+ fi
+
+ test -n "$SETTING_NEW_VALUE" && break
+ done
+
+ fi
+
+
+ if test "$SETTING_NEW_VALUE" != "$SETTING_OLD_VALUE"
+ then
+ set_pref "$SETTING_NAME" "$SETTING_NEW_VALUE"
+ echo "Changed $SETTING_NAME to $SETTING_NEW_VALUE"
+ else
+ echo "$SETTING_NAME remains unchanged"
+ fi
+ echo -e "\n"
+}
+
+build_menu() {
+ for setting in $TARGETS
+ do
+ # SETTING_MENUPOS contains $setting_MENUPOS
+ SETTING_MENUPOS_="${setting}_MENUPOS"
+ SETTING_MENUPOS="`eval echo -e \\$${SETTING_MENUPOS_}`"
+
+ # Store all entries in variables named after the menu name
+ MENU_NAME="SUBMENU_${SETTING_MENUPOS}"
+ export "${MENU_NAME}"="`eval echo -e \\$${MENU_NAME} ` $setting"
+
+
+ echo "$AVAILABLE_MENUES" | grep -q "$SETTING_MENUPOS" || AVAILABLE_MENUES="$SETTING_MENUPOS $AVAILABLE_MENUES"
+
+ done
+
+ #echo "[$AVAILABLE_MENUES]"
+
+ while true
+ do
+ echo -e "\nSelect a menu:\n"
+ cnt=1
+ for menu in $AVAILABLE_MENUES Exit
+ do
+ MENU_NAME="SUBMENU_$menu"
+ echo -e "\t[$cnt] $menu"
+ let cnt=$cnt+1
+ done
+
+ echo ""
+
+ while true
+ do
+ echo -n "Your Choice: "
+ read junk
+
+ cnt=1 ; GET_MENU=""
+ for menu in $AVAILABLE_MENUES Exit
+ do
+ if test "$cnt" = "$junk"
+ then
+ GET_MENU="$menu"
+ break
+ fi
+ let cnt=$cnt+1
+ done
+
+ if test "$GET_MENU" = "Exit"
+ then
+ EXIT_PROG=true
+ break
+ else
+ EXIT_PROG=false
+ fi
+
+ if test -n "$GET_MENU"
+ then
+ show_menu "$menu"
+ break
+ fi
+ done
+ test "$EXIT_PROG" = true && break
+ done
+}
+
+show_menu() {
+ MENU_NAME="SUBMENU_$1"
+
+
+ while true
+ do
+ echo -e "\nEntries in this menu:\n"
+ cnt=1
+ for entry in `eval echo -e \\$${MENU_NAME}` Back
+ do
+ MENU_NAME_TEXT="${entry}_TEXT" || MENU_NAME_TEXT="${entry}"
+
+ test "$entry" != Back && tmp_="`eval echo -e \\$${MENU_NAME_TEXT}`" || tmp_="Back"
+
+ echo -e "\t[$cnt] $tmp_"
+ let cnt=$cnt+1
+ done
+
+ echo ""
+
+ while true
+ do
+ echo -en "Your Choice: "
+ read junk
+
+ cnt=1 ; GET_ENTRY=""
+ for entry in `eval echo -e \\$${MENU_NAME}` Back
+ do
+ if test "$cnt" = "$junk"
+ then
+ GET_ENTRY="$entry"
+ break
+ fi
+ let cnt=$cnt+1
+ done
+
+ if test "$GET_ENTRY" = "Back"
+ then
+ EXIT_MENU=true
+ break
+ else
+ EXIT_MENU=false
+ fi
+
+
+ # At this point the user has selected a menuitem != "Back"
+ if test -n "$GET_ENTRY"
+ then
+ select_config
+ ask_pref "$GET_ENTRY"
+ break
+ fi
+ done
+
+ test "$EXIT_MENU" = true && break
+ done
+}
+
+select_config() {
+ echo -e "\nChange this setting only for the next reboot or permanently?\n"
+
+ echo -e "Select one of the following:\n"
+
+ echo -e "\t[1] Only for the next reboot"
+ echo -e "\t[2] Permanently"
+ echo ""
+
+ while true
+ do
+ echo -en "Your Choice: "
+ read junk
+
+ case "$junk" in
+ 2) CFG="$PERMANENT_CFG"
+ break ;;
+ 1) CFG="$TEMPORARY_CFG"
+ break ;;
+ esac
+ done
+
+ # Supress error message about missing config
+ ! test -e "$CFG" && touch "$CFG"
+
+}
+
+go() {
+ build_menu
+
+ exit 0
+ for setting in $TARGETS
+ do
+ ask_pref "$setting"
+ done
+
+}
+
+
+! test -e "$CFG" && die "[$CFG] not found, exiting"
+go
diff --git a/packages/altboot/files/altbootctl.conf b/packages/altboot/files/altbootctl.conf
new file mode 100644
index 0000000000..0a358c7e2d
--- /dev/null
+++ b/packages/altboot/files/altbootctl.conf
@@ -0,0 +1,90 @@
+#! /bin/sh
+#
+# Copyright Matthias Hentges <devel@hentges.net> (c) 2006
+# License: GPL (see http://www.gnu.org/licenses/gpl.txt for a copy of the license)
+#
+# Filename: hentges-setup.conf
+# Date: 04-Jun-06
+
+
+TARGETS="REMEMBER_LAST_SELECTION ENABLE_ALTBOOT FSCK_IMAGES TIMEOUT INIT_RUNLEVEL NO_GUI_RL \
+ USB_HOST_AVAILABLE USB_NETWORKING_AVAILABLE ASK_PW_ON_BOOT SD_DEVICE SD_KERNEL_MODULE \
+ IMAGE_PATH IMAGE_TYPE ENABLE_IMAGECONF USB_STORAGE_MODULES USB_STORAGE_PARTITION \
+ USB_STORAGE_WAIT SD_MOUNTPOINT"
+
+
+REMEMBER_LAST_SELECTION_VALUES="yes no"
+REMEMBER_LAST_SELECTION_TEXT="Remember the last selected menu item for next boot"
+REMEMBER_LAST_SELECTION_MENUPOS="Core"
+
+ENABLE_ALTBOOT_VALUES="yes no"
+ENABLE_ALTBOOT_TEXT="Enable or disable the altboot boot-manager"
+ENABLE_ALTBOOT_MENUPOS="Core"
+
+TIMEOUT_VALUES="<STRING>"
+TIMEOUT_TEXT="Altboot boot-menu timeout in seconds"
+TIMEOUT_MENUPOS="Core"
+
+INIT_RUNLEVEL_VALUES="<STRING>"
+INIT_RUNLEVEL_TEXT="Default runlevel"
+INIT_RUNLEVEL_MENUPOS="Core"
+
+NO_GUI_RL_VALUES="<STRING>"
+NO_GUI_RL_TEXT="GUI-less runlevel"
+NO_GUI_RL_MENUPOS="Core"
+
+ENABLE_DEBUG_VALUES="yes no"
+ENABLE_DEBUG_TEXT="Enable debug output"
+ENABLE_DEBUG_MENUPOS="Core"
+
+FSCK_IMAGES_VALUES="yes no"
+FSCK_IMAGES_TEXT="Automatically fsck loop-images"
+FSCK_IMAGES_MENUPOS="LoopImages"
+
+IMAGE_PATH_VALUES="<STRING>"
+IMAGE_PATH_TEXT="Subdirectory for loop-files"
+IMAGE_PATH_MENUPOS="LoopImages"
+
+IMAGE_TYPE_VALUES="<STRING>"
+IMAGE_TYPE_TEXT="Image FS type"
+IMAGE_TYPE_MENUPOS="LoopImages"
+
+ENABLE_IMAGECONF_VALUES="yes no"
+ENABLE_IMAGECONF_TEXT="Configure new loop-images on 1st boot"
+ENABLE_IMAGECONF_MENUPOS="LoopImages"
+
+USB_HOST_AVAILABLE_VALUES="yes no"
+USB_HOST_AVAILABLE_TEXT="Device supports full USB *HOST* mode"
+USB_HOST_AVAILABLE_MENUPOS="USB"
+
+USB_NETWORKING_AVAILABLE_VALUES="yes no"
+USB_NETWORKING_AVAILABLE_TEXT="USB networking is available"
+USB_NETWORKING_AVAILABLE_MENUPOS="USB"
+
+USB_STORAGE_MODULES_VALUES="<STRING>"
+USB_STORAGE_MODULES_TEXT="Kernelmodules required for USB"
+USB_STORAGE_MODULES_MENUPOS="USB"
+
+USB_STORAGE_PARTITION_VALUES="<STRING>"
+USB_STORAGE_PARTITION_TEXT="USB storage device file"
+USB_STORAGE_PARTITION_MENUPOS="USB"
+
+USB_STORAGE_WAIT_VALUES="<STRING>"
+USB_STORAGE_WAIT_TEXT="Wait x seconds before mount USB storage"
+USB_STORAGE_WAIT_MENUPOS="USB"
+
+ASK_PW_ON_BOOT_VALUES="yes no"
+ASK_PW_ON_BOOT_TEXT="Alway ask altboot password on boot"
+ASK_PW_ON_BOOT_MENUPOS="Core"
+
+SD_DEVICE_VALUES="<STRING>"
+SD_DEVICE_TEXT="The device-file for the SD card"
+SD_DEVICE_MENUPOS="SD_MMC"
+
+SD_KERNEL_MODULE_VALUES="<STRING>"
+SD_KERNEL_MODULE_TEXT="Kernelmodule required for SD operation"
+SD_KERNEL_MODULE_MENUPOS="SD_MMC"
+
+SD_MOUNTPOINT_VALUES="<STRING>"
+SD_MOUNTPOINT_TEXT="Mointpoint for the SD card"
+SD_MOUNTPOINT_MENUPOS="SD_MMC"
diff --git a/packages/altboot/files/init.altboot b/packages/altboot/files/init.altboot
index 3bffc2bec5..e09739c8fa 100644
--- a/packages/altboot/files/init.altboot
+++ b/packages/altboot/files/init.altboot
@@ -28,6 +28,12 @@ esac
test -e "$ALTBOOT_CFG_FILE" && . "$ALTBOOT_CFG_FILE" || echo "WARNING: No $ALTBOOT_CFG_FILE found! Check your installation of Altboot!" > "$OUT_TTY"
+if test -e "${ALTBOOT_CFG_FILE}.next-reboot"
+then
+ . "${ALTBOOT_CFG_FILE}.next-reboot"
+ rm "${ALTBOOT_CFG_FILE}.next-reboot"
+fi
+
C_RED="\033[31m"
C_YELLOW="\033[33m"
C_BLUE="\033[34m"
@@ -66,7 +72,7 @@ show_menu() {
m_entry=""
- # Build "m_entry" for scripts in /etc/altboot-menu
+
cd $1
cnt=0 ; reset_pref "menu_filelist"
@@ -75,6 +81,8 @@ show_menu() {
if ! test -d "$1/$file"
then
M_TITLE="`$1/$file title`"
+ FLAGS="`$1/$file flags`"
+
if ! test -z "$M_TITLE"
then
let cnt=$cnt+1
@@ -83,6 +91,7 @@ show_menu() {
#m_entry="`echo -e "$m_entry\n$cnt:$file\n"`"
set_pref "menu_filelist" "$cnt" "$file"
+ test -n "$FLAGS" && set_pref "menu_fileflags" "$cnt" "$FLAGS"
echo -e "\t\t[$cnt] $M_TITLE"
fi
M_TITLE=""
@@ -101,9 +110,12 @@ show_menu() {
let cnt=$cnt+1
# Keep a list of existing "modules" together with an index number
# This sure is ugly, but Busybox sh doesn't do arrays....
- #m_entry="`echo -e "$m_entry\n$cnt:$dir:DIR\n"`"
set_pref "menu_filelist" "$cnt" "$dir:DIR"
+
+ # Set noRemember flag for directories
+ set_pref "menu_fileflags" "$cnt" "noRemember"
+
echo -e "\t\t[$cnt] $M_TITLE"
OLD_PWD="$PWD"
@@ -113,15 +125,16 @@ show_menu() {
if ! test -d "$1/$dir/$file"
then
M_TITLE="`$1/$dir/$file title`"
+ FLAGS="`$1/$dir/$file flags`"
+
if ! test -z "$M_TITLE"
then
let cnt=$cnt+1
# Keep a list of existing "modules" together with an index number
# This sure is ugly, but Busybox sh doesn't do arrays....
- #m_entry="`echo -e "$m_entry\n$cnt:$dir/$file\n"`"
set_pref "menu_filelist" "$cnt" "$dir/$file"
- #echo -e "\t\t[$cnt] $M_TITLE"
+ test -n "$FLAGS" && set_pref "menu_fileflags" "$cnt" "$FLAGS"
fi
M_TITLE=""
fi
@@ -133,9 +146,11 @@ show_menu() {
fi
done
- #echo_pref "menu_filelist"
echo ""
+# export_pref "$menu_filelist" /tmp/menu_filelist.cache
+# export_pref "$menu_fileflags" /tmp/menu_fileflags.cache
+
}
# This function is used to display the content of directories below
@@ -167,6 +182,33 @@ show_sub_menu() {
}
+get_kbd_ints(){
+ if ( uname -r | grep -q ^2.6 )
+ then
+ if test -z "$KBD_INT"
+ then
+ # find out how the keyboard is called
+ for kbd in Spitzkbd corgikbd locomokbd tosakbd
+ do
+ if ( cat /proc/interrupts | grep -q "$kbd" )
+ then
+ debug_echo "run_timer(): Using [$kbd] as keyboard interrupt"
+ KBD_INT="$kbd"
+ break
+ fi
+ done
+ fi
+ key_ints="`cat /proc/interrupts | grep "$KBD_INT"`"
+ #debug_echo "run_timer(): key_ints = [$key_ints]"
+ else
+ KBD_INT="$kbd"
+ debug_echo "\nrun_timer(): Using [keyboard] as keyboard interrupt in kernel-2.4 mode"
+ key_ints="`cat /proc/interrupts | grep keyboard | awk '{print $2}'`"
+ fi
+
+ test -z "$KBD_INT" && debug_echo "Couldn't read keyboard ints!"
+}
+
# Shows the timer and sets $launch_altboot to yes if a keypress was detected
run_timer() {
if test "$TIMEOUT" != 0
@@ -174,15 +216,10 @@ run_timer() {
mount -t proc proc /proc >/dev/null 2>&1
- case "`uname -r`" in
- 2.4*) key_ints="`cat /proc/interrupts | grep keyboard | awk '{print $2}'`";;
- 2.6*) key_ints="`cat /proc/interrupts | grep Spitzkbd`"
- test -z "$key_ints" && key_ints="`cat /proc/interrupts | grep -i corgikbd`"
- test -z "$key_ints" && key_ints="`cat /proc/interrupts | grep -i locomokbd`"
- test -z "$key_ints" && key_ints="`cat /proc/interrupts | grep -i tosakbd`";;
- esac
-
- test -z "$key_ints" && debug_echo "Couldn't read keyboard ints!"
+ get_kbd_ints
+ kbd_ints_old="$key_ints"
+
+ #debug_echo "run_timer() old:`echo $key_ints | md5sum`"
stty -echo <"$OUT_TTY" >"$OUT_TTY" 2>&1
echo -en "\n\nPlease press any key to launch altboot." > "$OUT_TTY"
@@ -193,15 +230,11 @@ run_timer() {
while test "$cnt" != "$TIMEOUT"
do
sleep 1
- case "`uname -r`" in
- 2.4*) key_ints_now="`cat /proc/interrupts | grep keyboard | awk '{print $2}'`";;
- 2.6*) key_ints_now="`cat /proc/interrupts | grep Spitzkbd`"
- test -z "$key_ints_now" && key_ints_now="`cat /proc/interrupts | grep -i corgikbd`"
- test -z "$key_ints_now" && key_ints_now="`cat /proc/interrupts | grep -i locomokbd`"
- test -z "$key_ints_now" && key_ints_now="`cat /proc/interrupts | grep -i tosakbd`";;
- esac
- if test "$key_ints_now" != "$key_ints" -o -z "$key_ints_now"
+ get_kbd_ints
+ kbd_ints_new="$key_ints"
+
+ if test "$kbd_ints_new" != "$kbd_ints_old" -o -z "$kbd_ints_new"
then
launch_altboot=yes
stty echo <"$OUT_TTY" >"$OUT_TTY" 2>&1
@@ -223,6 +256,26 @@ run_timer() {
fi
}
+# $1 = ID
+parse_module_flags() {
+ if test -n "$1"
+ then
+ # Each module can set "flags" to influence handling of the module
+ get_pref "menu_fileflags" "$1" flags
+
+ test -n "$flags" && debug_echo "parse_module_flags(): [$1] has flags [$flags]"
+
+ for flag in $flags
+ do
+ case "$flag" in
+ noRemember) REMEMBER_LAST_SELECTION=no;;
+ esac
+ done
+ else
+ debug_echo "parse_module_flags(): Empty \$1"
+ fi
+}
+
# This function launches the selected menu item / script
# $1: Directory containing the scripts for the menu-items
launch_selection() {
@@ -235,8 +288,8 @@ launch_selection() {
type="`echo "$file_" | sed -n "s/\(.*\)\:\(.*\)/\2/p"`"
file="`echo "$file_" | sed -n "s/\(.*\)\:\(.*\)/\1/p"`"
test -z "$file" && file="$file_"
-
- #echo "[$file_]: [$type] / [$file] ($junk)"
+
+ #echo "[$file_]: [$type] : [$flags] / [$file] ($junk)"
# The selected menu-item points to a directory
if test "$type" = DIR
@@ -291,26 +344,30 @@ wait_for_input() {
# This filters other chars the user may have used
- #echo "junk: [$junk]"
- junk="`echo "$junk" | sed "s/[a-zA-Z]//g"`"
- #echo "junk: [$junk]"
+ junk="`echo "$junk" | sed "s/[a-zA-Z]//g"`"
if test "$junk" -lt "$cnt" -o "$junk" -eq "$cnt"
- then
- if test ! -z "$junk"
+ then
+ if test ! -z "$junk"
then
- # Don't remount rw if the drive is already mounted rw
- # Only helpful for testing / debugging
- if test "`mount|sed -n "/\/dev\/root/s/.*(\(.*\))/\1/p"`" != "rw"
- then
- mount -o remount,rw / >/dev/null 2>&1
- echo "$junk" > /etc/altboot.conf
- mount -o remount,ro / >/dev/null 2>&1
- else
- echo "$junk" > /etc/altboot.conf
+ parse_module_flags "$junk"
+
+ if test "$REMEMBER_LAST_SELECTION" != no
+ then
+ # Don't remount rw if the drive is already mounted rw
+ # Only helpful for testing / debugging
+ if test "`mount|sed -n "/\/dev\/root/s/.*(\(.*\))/\1/p"`" != "rw"
+ then
+ mount -o remount,rw / >/dev/null 2>&1
+ echo "$junk" > /etc/altboot.conf
+ mount -o remount,ro / >/dev/null 2>&1
+ else
+ echo "$junk" > /etc/altboot.conf
+ fi
fi
else
junk="$last_selection"
+ parse_module_flags "$junk"
break
fi
break
@@ -367,7 +424,7 @@ else
echo "" >"$OUT_TTY"
-
+ # launch_altboot is set to "yes" by run_timer when the user presses the button during the timeout
if test "$launch_altboot" != yes
then
# last_selection is the previously selected menu item by the user
@@ -380,7 +437,6 @@ else
show_menu /etc/altboot-menu >/dev/null
junk="$last_selection"
launch_selection /etc/altboot-menu >"$OUT_TTY"
-
fi
# Anything after this point will never be reached if $launch_altboot != yes
diff --git a/packages/busybox/busybox_1.2.2.bb b/packages/busybox/busybox_1.2.2.bb
new file mode 100644
index 0000000000..706e7ca3b5
--- /dev/null
+++ b/packages/busybox/busybox_1.2.2.bb
@@ -0,0 +1,163 @@
+DESCRIPTION = "BusyBox combines tiny versions of many common UNIX utilities into a single \
+small executable. It provides minimalist replacements for most of the \
+utilities you usually find in GNU fileutils, shellutils, etc. The utilities \
+in BusyBox generally have fewer options than their full-featured GNU \
+cousins; however, the options that are included provide the expected \
+functionality and behave very much like their GNU counterparts. BusyBox \
+provides a fairly complete POSIX environment for any small or embedded \
+system."
+HOMEPAGE = "http://www.busybox.net"
+LICENSE = "GPL"
+SECTION = "base"
+PRIORITY = "required"
+PR = "r0"
+
+DEFAULT_PREFERENCE = "-1"
+
+SRC_URI = "http://www.busybox.net/downloads/busybox-${PV}.tar.gz \
+ file://dhcp-hostname.patch;patch=1 \
+ file://ifupdown-spurious-environ.patch;patch=1 \
+ file://udhcpscript.patch;patch=1 \
+ file://wget-long-options.patch;patch=1 \
+ file://defconfig \
+ file://busybox-cron \
+ file://busybox-httpd \
+ file://busybox-udhcpd \
+ file://syslog \
+ file://hwclock.sh \
+ file://default.script \
+ file://syslog.conf \
+ file://mount.busybox \
+ file://umount.busybox"
+
+SRC_URI_append_nylon = " file://xargs-double-size.patch;patch=1"
+
+export EXTRA_CFLAGS = "${CFLAGS}"
+EXTRA_OEMAKE_append = " CROSS=${HOST_PREFIX}"
+PACKAGES =+ "${PN}-httpd ${PN}-udhcpd"
+
+FILES_${PN}-httpd = "${sysconfdir}/init.d/busybox-httpd /srv/www"
+FILES_${PN}-udhcpd = "${sysconfdir}/init.d/busybox-udhcpd"
+
+FILES_${PN} += " ${datadir}/udhcpc"
+
+INITSCRIPT_PACKAGES = "${PN} ${PN}-httpd ${PN}-udhcpd"
+INITSCRIPT_NAME_${PN}-httpd = "busybox-httpd"
+INITSCRIPT_NAME_${PN}-udhcpd = "busybox-udhcpd"
+INITSCRIPT_NAME_${PN} = "syslog"
+CONFFILES_${PN} = "${sysconfdir}/syslog.conf"
+
+# This disables the syslog startup links in openslug (see openslug-init)
+INITSCRIPT_PARAMS_${PN}_openslug = "start 20 ."
+
+inherit cml1 update-rc.d
+
+do_configure () {
+ install -m 0644 ${WORKDIR}/defconfig ${S}/.config.oe
+
+ echo "CROSS_COMPILER_PREFIX=\"${TARGET_PREFIX}\"" > ${S}/.config
+ echo "USING_CROSS_COMPILER=y" >> ${S}/.config
+
+ sed -e '/CROSS_COMPILER_PREFIX/d' \
+ -e '/USING_CROSS_COMPILER/d' \
+ '${S}/.config.oe' >>'${S}/.config'
+ cml1_do_configure
+}
+
+do_compile () {
+ unset CFLAGS
+ base_do_compile
+}
+
+do_install () {
+ install -d ${D}${sysconfdir}/init.d
+ oe_runmake "PREFIX=${D}" install
+ cp -pPR ${S}/_install/* ${D}/
+
+ # Move everything to /busybox (not supposed to end up in any package)
+ install -d ${D}/busybox
+ ls ${D} -R
+
+ cp -dPr ${D}${base_bindir} ${D}${base_sbindir} ${D}${prefix} ${D}/busybox/
+ # Move the busybox binary back to /bin
+ install -d ${D}${base_bindir}
+ mv ${D}/busybox${base_bindir}/busybox ${D}${base_bindir}/
+ # Move back the sh symlink
+ test -h ${D}/busybox${base_bindir}/sh && mv ${D}/busybox${base_bindir}/sh ${D}${base_bindir}/
+
+ install -m 0755 ${WORKDIR}/syslog ${D}${sysconfdir}/init.d/
+ install -m 644 ${WORKDIR}/syslog.conf ${D}${sysconfdir}/
+ if grep "CONFIG_CROND=y" ${WORKDIR}/defconfig; then
+ # Move crond back to /usr/sbin/crond
+ install -d ${D}${sbindir}
+ mv ${D}/busybox${sbindir}/crond ${D}${sbindir}/
+
+ install -m 0755 ${WORKDIR}/busybox-cron ${D}${sysconfdir}/init.d/
+ fi
+ if grep "CONFIG_HTTPD=y" ${WORKDIR}/defconfig; then
+ # Move httpd back to /usr/sbin/httpd
+ install -d ${D}${sbindir}
+ mv ${D}/busybox${sbindir}/httpd ${D}${sbindir}/
+
+ install -m 0755 ${WORKDIR}/busybox-httpd ${D}${sysconfdir}/init.d/
+ install -d ${D}/srv/www
+ fi
+ if grep "CONFIG_APP_UDHCPD=y" ${WORKDIR}/defconfig; then
+ # Move udhcpd back to /usr/sbin/udhcpd
+ install -d ${D}${sbindir}
+ mv ${D}/busybox${sbindir}/udhcpd ${D}${sbindir}/
+
+ install -m 0755 ${WORKDIR}/busybox-udhcpd ${D}${sysconfdir}/init.d/
+ fi
+ if grep "CONFIG_HWCLOCK=y" ${WORKDIR}/defconfig; then
+ # Move hwclock back to /sbin/hwclock
+ install -d ${D}${base_sbindir}
+ mv ${D}/busybox${base_sbindir}/hwclock ${D}${base_sbindir}/
+
+ install -m 0755 ${WORKDIR}/hwclock.sh ${D}${sysconfdir}/init.d/
+ fi
+ if grep "CONFIG_APP_UDHCPC=y" ${WORKDIR}/defconfig; then
+ # Move dhcpc back to /usr/sbin/udhcpc
+ install -d ${D}${base_sbindir}
+ mv ${D}/busybox${base_sbindir}/udhcpc ${D}${base_sbindir}/
+
+ install -d ${D}${sysconfdir}/udhcpc.d
+ install -d ${D}${datadir}/udhcpc
+ install -m 0755 ${S}/examples/udhcp/simple.script ${D}${sysconfdir}/udhcpc.d/50default
+ install -m 0755 ${WORKDIR}/default.script ${D}${datadir}/udhcpc/default.script
+ fi
+
+ install -m 0644 ${S}/busybox.links ${D}${sysconfdir}
+}
+
+pkg_postinst_${PN} () {
+ # If we are not making an image we create links for the utilities that doesn't exist
+ # so the update-alternatives script will get the utilities it needs
+ # (update-alternatives have no problem replacing links later anyway)
+ test -n 2> /dev/null || alias test='busybox test'
+ if test "x$D" = "x"; then while read link; do if test ! -h "$link"; then case "$link" in /*/*/*) to="../../bin/busybox";; /bin/*) to="busybox";; /*/*) to="../bin/busybox";; esac; busybox ln -s $to $link; fi; done </etc/busybox.links; fi
+
+ # This adds the links, remember that this has to work when building an image too, hence the $D
+ while read link; do case "$link" in /*/*/*) to="../../bin/busybox";; /bin/*) to="busybox";; /*/*) to="../bin/busybox";; esac; bn=`basename $link`; update-alternatives --install $link $bn $to 50; done <$D/etc/busybox.links
+}
+
+pkg_prerm_${PN} () {
+ # This is so you can make busybox commit suicide - removing busybox with no other packages
+ # providing its files, this will make update-alternatives work, but the update-rc.d part
+ # for syslog, httpd and/or udhcpd will fail if there is no other package providing sh
+ tmpdir=`mktemp -d /tmp/busyboxrm-XXXXXX`
+ ln -s /bin/busybox $tmpdir/[
+ ln -s /bin/busybox $tmpdir/test
+ ln -s /bin/busybox $tmpdir/head
+ ln -s /bin/busybox $tmpdir/sh
+ ln -s /bin/busybox $tmpdir/basename
+ ln -s /bin/busybox $tmpdir/echo
+ ln -s /bin/busybox $tmpdir/mv
+ ln -s /bin/busybox $tmpdir/ln
+ ln -s /bin/busybox $tmpdir/dirname
+ ln -s /bin/busybox $tmpdir/rm
+ ln -s /bin/busybox $tmpdir/sed
+ ln -s /bin/busybox $tmpdir/sort
+ export PATH=$PATH:$tmpdir
+ while read link; do case "$link" in /*/*/*) to="../../bin/busybox";; /bin/*) to="busybox";; /*/*) to="../bin/busybox";; esac; bn=`basename $link`; sh /usr/bin/update-alternatives --remove $bn $to; done </etc/busybox.links
+}
diff --git a/packages/linux/handhelds-sa-2.6/.mtn2git_empty b/packages/dbus/dbus-glib-0.72/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/handhelds-sa-2.6/.mtn2git_empty
+++ b/packages/dbus/dbus-glib-0.72/.mtn2git_empty
diff --git a/packages/dbus/dbus-glib-0.72/cross.patch b/packages/dbus/dbus-glib-0.72/cross.patch
new file mode 100644
index 0000000000..b3f41c8507
--- /dev/null
+++ b/packages/dbus/dbus-glib-0.72/cross.patch
@@ -0,0 +1,12 @@
+Index: dbus-glib-0.72/configure.ac
+===================================================================
+--- dbus-glib-0.72.orig/configure.ac 2006-10-27 10:05:05.000000000 +0200
++++ dbus-glib-0.72/configure.ac 2006-10-27 10:05:48.000000000 +0200
+@@ -571,6 +571,7 @@
+ exit (0);
+ ]])],
+ [have_abstract_sockets=yes],
++ [have_abstract_sockets=no],
+ [have_abstract_sockets=no])
+ AC_LANG_POP(C)
+ AC_MSG_RESULT($have_abstract_sockets)
diff --git a/packages/dbus/dbus-glib-0.72/no-introspect.patch b/packages/dbus/dbus-glib-0.72/no-introspect.patch
new file mode 100644
index 0000000000..607f0acc9c
--- /dev/null
+++ b/packages/dbus/dbus-glib-0.72/no-introspect.patch
@@ -0,0 +1,19 @@
+Index: dbus-glib-0.72/tools/Makefile.am
+===================================================================
+--- dbus-glib-0.72.orig/tools/Makefile.am 2006-10-25 21:10:36.000000000 +0200
++++ dbus-glib-0.72/tools/Makefile.am 2006-10-27 10:07:35.000000000 +0200
+@@ -3,14 +3,8 @@
+ nodist_libdbus_glib_HEADERS = dbus-glib-bindings.h
+ libdbus_glibdir = $(includedir)/dbus-1.0/dbus
+
+-dbus-glib-bindings.h: dbus-bus-introspect.xml $(top_builddir)/dbus/dbus-binding-tool$(EXEEXT)
+- $(top_builddir)/dbus/dbus-binding-tool --mode=glib-client --prefix=dbus_bus --output=dbus-glib-bindings.h dbus-bus-introspect.xml
+-
+ BUILT_SOURCES = dbus-glib-bindings.h dbus-bus-introspect.xml
+
+-dbus-bus-introspect.xml:
+- DBUS_TOP_BUILDDIR=$(top_builddir) dbus-daemon --introspect > dbus-bus-introspect.xml.tmp && mv dbus-bus-introspect.xml.tmp dbus-bus-introspect.xml
+-
+ EXTRA_DIST = run-with-tmp-session-bus.sh session.conf
+
+ CLEANFILES = \
diff --git a/packages/linux/linux-handhelds-2.6/h5xxx/.mtn2git_empty b/packages/dbus/dbus-glib-native-0.72/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-handhelds-2.6/h5xxx/.mtn2git_empty
+++ b/packages/dbus/dbus-glib-native-0.72/.mtn2git_empty
diff --git a/packages/dbus/dbus-glib-native-0.72/run-with-tmp-session-bus.patch b/packages/dbus/dbus-glib-native-0.72/run-with-tmp-session-bus.patch
new file mode 100644
index 0000000000..ba117d0309
--- /dev/null
+++ b/packages/dbus/dbus-glib-native-0.72/run-with-tmp-session-bus.patch
@@ -0,0 +1,23 @@
+Index: dbus-glib-0.72/tools/run-with-tmp-session-bus.sh
+===================================================================
+--- dbus-glib-0.72.orig/tools/run-with-tmp-session-bus.sh 2006-09-27 14:27:25.000000000 +0200
++++ dbus-glib-0.72/tools/run-with-tmp-session-bus.sh 2006-10-27 10:13:57.000000000 +0200
+@@ -30,16 +30,15 @@
+ echo "escaped service dir is: $ESCAPED_SERVICE_DIR" >&2
+
+ ## create a configuration file based on the standard session.conf
+-cat $DBUS_TOP_SRCDIR/tools/session.conf | \
++cat $datadir/dbus/session.conf | \
+ sed -e 's/<servicedir>.*$/<servicedir>'$ESCAPED_SERVICE_DIR'<\/servicedir>/g' | \
+ sed -e 's/<include.*$//g' \
+ > $CONFIG_FILE
+
+ echo "Created configuration file $CONFIG_FILE" >&2
+
+-export PATH=$DBUS_TOP_BUILDDIR/bus:$PATH
+ ## the libtool script found by the path search should already do this, but
+-export LD_LIBRARY_PATH=$DBUS_TOP_BUILDDIR/dbus/.libs:$LD_LIBRARY_PATH
++export LD_LIBRARY_PATH=$libdir:$LD_LIBRARY_PATH
+
+ unset DBUS_SESSION_BUS_ADDRESS
+ unset DBUS_SESSION_BUS_PID
diff --git a/packages/dbus/dbus-glib-native_0.72.bb b/packages/dbus/dbus-glib-native_0.72.bb
new file mode 100644
index 0000000000..842ddeb159
--- /dev/null
+++ b/packages/dbus/dbus-glib-native_0.72.bb
@@ -0,0 +1,22 @@
+SECTION = "base"
+PR = "r0"
+HOMEPAGE = "http://www.freedesktop.org/Software/dbus"
+DESCRIPTION = "message bus system for applications to talk to one another"
+LICENSE = "GPL"
+
+SRC_URI = "http://dbus.freedesktop.org/releases/dbus-glib/dbus-glib-${PV}.tar.gz \
+ file://cross.patch;patch=1 \
+ file://run-with-tmp-session-bus.patch;patch=1"
+
+inherit autotools pkgconfig gettext native
+
+S = "${WORKDIR}/dbus-glib-${PV}"
+FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/dbus-glib-${PV}"
+DEPENDS = "glib-2.0-native dbus-native"
+
+do_stage() {
+ oe_runmake install
+ install -d ${STAGING_DATADIR}/dbus
+ install -m 0644 tools/dbus-bus-introspect.xml ${STAGING_DATADIR}/dbus
+ install -m 0644 tools/dbus-glib-bindings.h ${STAGING_DATADIR}/dbus
+}
diff --git a/packages/dbus/dbus-glib_0.72.bb b/packages/dbus/dbus-glib_0.72.bb
new file mode 100644
index 0000000000..641f0263a2
--- /dev/null
+++ b/packages/dbus/dbus-glib_0.72.bb
@@ -0,0 +1,29 @@
+SECTION = "base"
+PR = "r0"
+HOMEPAGE = "http://www.freedesktop.org/Software/dbus"
+DESCRIPTION = "message bus system for applications to talk to one another"
+LICENSE = "GPL"
+DEPENDS = "expat glib-2.0 virtual/libintl dbus-glib-native dbus"
+
+SRC_URI = "http://dbus.freedesktop.org/releases/dbus-glib/dbus-glib-${PV}.tar.gz \
+ file://cross.patch;patch=1 \
+ file://no-examples.patch;patch=1 \
+ file://no-introspect.patch;patch=1"
+
+inherit autotools pkgconfig gettext
+
+FILES_${PN} = "${libdir}/lib*.so.*"
+FILES_${PN}-dev += "${libdir}/dbus-1.0/include ${bindir}/dbus-glib-tool"
+
+do_configure_prepend() {
+ install -m 0644 ${STAGING_DIR}/${BUILD_SYS}/share/dbus/dbus-bus-introspect.xml ${S}/tools/
+ install -m 0644 ${STAGING_DIR}/${BUILD_SYS}/share/dbus/dbus-glib-bindings.h ${S}/tools/
+}
+
+do_stage () {
+ oe_libinstall -so -C dbus libdbus-glib-1 ${STAGING_LIBDIR}
+
+ autotools_stage_includes
+}
+
+FILES_${PN}-dev += "${bindir}/dbus-binding-tool"
diff --git a/packages/efl/esmart.inc b/packages/efl/esmart.inc
index 3b56057418..9b8114de53 100644
--- a/packages/efl/esmart.inc
+++ b/packages/efl/esmart.inc
@@ -2,7 +2,6 @@ DESCRIPTION = "ESmart is a collection of smart Evas objects"
LICENSE = "MIT"
DEPENDS = "virtual/evas virtual/ecore virtual/imlib2 epsilon edje libtool"
PROVIDES += "virtual/esmart"
-PACKAGES_DYNAMIC += "libesmart*"
inherit efl
diff --git a/packages/fbgrab/fbgrab_1.0.bb b/packages/fbgrab/fbgrab_1.0.bb
index 5f98871fe0..331fa260c3 100644
--- a/packages/fbgrab/fbgrab_1.0.bb
+++ b/packages/fbgrab/fbgrab_1.0.bb
@@ -2,6 +2,8 @@ SECTION = "console/network"
DESCRIPTION = "framebuffer screenshot program"
LICENSE = "GPL"
+DEPENDS = " zlib libpng "
+
SRC_URI = "http://hem.bredband.net/gmogmo/fbgrab/fbgrab-${PV}.tar.gz \
file://makefile.patch;patch=1"
diff --git a/packages/gcc/gcc-4.1.1/unbreak-armv4t.patch b/packages/gcc/gcc-4.1.1/unbreak-armv4t.patch
new file mode 100644
index 0000000000..b3399abfdb
--- /dev/null
+++ b/packages/gcc/gcc-4.1.1/unbreak-armv4t.patch
@@ -0,0 +1,12 @@
+diff -urN gcc-4.1.1/gcc/config/arm/linux-eabi.h gcc-4.1.1-arm9tdmi/gcc/config/arm/linux-eabi.h
+--- gcc-4.1.1/gcc/config/arm/linux-eabi.h 2006-10-22 11:11:49.000000000 -0700
++++ gcc-4.1.1-arm9tdmi/gcc/config/arm/linux-eabi.h 2006-10-24 21:34:01.000000000 -0700
+@@ -45,7 +45,7 @@
+ The ARM10TDMI core is the default for armv5t, so set
+ SUBTARGET_CPU_DEFAULT to achieve this. */
+ #undef SUBTARGET_CPU_DEFAULT
+-#define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm10tdmi
++#define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm9tdmi
+
+ #undef SUBTARGET_EXTRA_LINK_SPEC
+ #define SUBTARGET_EXTRA_LINK_SPEC " -m armelf_linux_eabi"
diff --git a/packages/gcc/gcc_4.1.1.bb b/packages/gcc/gcc_4.1.1.bb
index e2d3d25ea8..cd93cab7e2 100644
--- a/packages/gcc/gcc_4.1.1.bb
+++ b/packages/gcc/gcc_4.1.1.bb
@@ -1,4 +1,4 @@
-PR = "r6"
+PR = "r7"
DESCRIPTION = "The GNU cc and gcc C compilers."
HOMEPAGE = "http://www.gnu.org/software/gcc/"
SECTION = "devel"
@@ -27,7 +27,9 @@ SRC_URI = "http://ftp.gnu.org/pub/gnu/gcc/gcc-4.1.1/gcc-4.1.1.tar.bz2 \
file://arm-thumb-cache.patch;patch=1 \
file://ldflags.patch;patch=1 \
file://cse.patch;patch=1 \
- file://zecke-xgcc-cpp.patch;patch=1 "
+ file://zecke-xgcc-cpp.patch;patch=1 \
+ file://unbreak-armv4t.patch;patch=1 \
+ "
SRC_URI_append_fail-fast = " file://zecke-no-host-includes.patch;patch=1 "
diff --git a/packages/glibc/glibc-package.bbclass b/packages/glibc/glibc-package.bbclass
index fc527b292a..159f5861a3 100644
--- a/packages/glibc/glibc-package.bbclass
+++ b/packages/glibc/glibc-package.bbclass
@@ -27,7 +27,7 @@ ENABLE_BINARY_LOCALE_GENERATION ?= "0"
BINARY_LOCALE_ARCHES ?= "arm.*"
PACKAGES = "glibc-dbg glibc catchsegv sln nscd ldd localedef glibc-utils glibc-dev glibc-doc glibc-locale libsegfault glibc-extra-nss glibc-thread-db glibc-pcprofile"
-PACKAGES_DYNAMIC = "glibc-gconv-* glibc-charmap-* glibc-localedata-* libc6*"
+PACKAGES_DYNAMIC = "glibc-gconv-* glibc-charmap-* glibc-localedata-*"
libc_baselibs = "/lib/libc* /lib/libm* /lib/ld* /lib/libpthread* /lib/libresolv* /lib/librt* /lib/libutil* /lib/libnsl* /lib/libnss_files* /lib/libnss_compat* /lib/libnss_dns* /lib/libdl* /lib/libanl* /lib/libBrokenLocale*"
diff --git a/packages/gnome/libsoup_2.2.93.bb b/packages/gnome/libsoup_2.2.93.bb
index ab594a91c3..d6fc8a540d 100644
--- a/packages/gnome/libsoup_2.2.93.bb
+++ b/packages/gnome/libsoup_2.2.93.bb
@@ -6,7 +6,6 @@ DEPENDS = "glib-2.0 gnutls libxml2"
inherit autotools pkgconfig
-PACKAGES_DYNAMIC = "libsoup-2.2*"
FILES_${PN} = "${libdir}/lib*.so.*"
FILES_${PN}-dev = "${includedir}/ ${libdir}/"
FILES_${PN}-doc = "${datadir}/"
diff --git a/packages/gnome/libsoup_2.2.96.bb b/packages/gnome/libsoup_2.2.96.bb
index ab594a91c3..d6fc8a540d 100644
--- a/packages/gnome/libsoup_2.2.96.bb
+++ b/packages/gnome/libsoup_2.2.96.bb
@@ -6,7 +6,6 @@ DEPENDS = "glib-2.0 gnutls libxml2"
inherit autotools pkgconfig
-PACKAGES_DYNAMIC = "libsoup-2.2*"
FILES_${PN} = "${libdir}/lib*.so.*"
FILES_${PN}-dev = "${includedir}/ ${libdir}/"
FILES_${PN}-doc = "${datadir}/"
diff --git a/packages/gnutls/gnutls_1.4.0.bb b/packages/gnutls/gnutls_1.4.0.bb
index c77cf38ed3..0267684946 100644
--- a/packages/gnutls/gnutls_1.4.0.bb
+++ b/packages/gnutls/gnutls_1.4.0.bb
@@ -11,7 +11,6 @@ SRC_URI = "ftp://ftp.gnutls.org/pub/gnutls/gnutls-${PV}.tar.bz2 \
inherit autotools binconfig
PACKAGES =+ "${PN}-openssl ${PN}-extra ${PN}-bin"
-PACKAGES_DYNAMIC = "libgnutls*"
FILES_${PN}-openssl = "${libdir}/libgnutls-openssl.so.*"
FILES_${PN}-extra = "${libdir}/libgnutls-extra.so.*"
FILES_${PN} = "${libdir}/libgnutls.so.*"
diff --git a/packages/libmimedir/libmimedir_0.4.0-20060804.bb b/packages/libmimedir/libmimedir_0.4.0-20060804.bb
index 9970c09786..e28bd6a4e8 100644
--- a/packages/libmimedir/libmimedir_0.4.0-20060804.bb
+++ b/packages/libmimedir/libmimedir_0.4.0-20060804.bb
@@ -24,5 +24,4 @@ do_stage() {
}
PACKAGES =+ libmimedir-utils
-PACKAGES_DYNAMIC = "libmimedir-0.4*"
FILES_libmimedir-utils = "${bindir}/*"
diff --git a/packages/linux/linux-handhelds-2.6/ipaq-pxa270/.mtn2git_empty b/packages/linux/compulab-pxa270-2.6.16/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-handhelds-2.6/ipaq-pxa270/.mtn2git_empty
+++ b/packages/linux/compulab-pxa270-2.6.16/.mtn2git_empty
diff --git a/packages/linux/compulab-pxa270-2.6.16/defconfig b/packages/linux/compulab-pxa270-2.6.16/defconfig
new file mode 100644
index 0000000000..f87d617d3f
--- /dev/null
+++ b/packages/linux/compulab-pxa270-2.6.16/defconfig
@@ -0,0 +1,1312 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.16
+# Tue Sep 26 10:07:36 2006
+#
+CONFIG_ARM=y
+CONFIG_MMU=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_MTD_XIP=y
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION="-cm-x270"
+# 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=y
+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=y
+CONFIG_CC_ALIGN_FUNCTIONS=0
+CONFIG_CC_ALIGN_LABELS=0
+CONFIG_CC_ALIGN_LOOPS=0
+CONFIG_CC_ALIGN_JUMPS=0
+CONFIG_SLAB=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_OBSOLETE_MODPARM=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+
+#
+# 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_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_L7200 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# 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
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_MAINSTONE is not set
+CONFIG_MACH_ARMCORE=y
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_PXA_SHARPSL is not set
+CONFIG_ARMCORE_REV12=y
+# CONFIG_ARMCORE_REV11 is not set
+CONFIG_PXA27x=y
+CONFIG_IWMMXT=y
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+CONFIG_XSCALE_PMU=y
+CONFIG_DMABOUNCE=y
+
+#
+# Bus support
+#
+CONFIG_PCI=y
+CONFIG_PCI_HOST_ITE8152=y
+# CONFIG_PCI_LEGACY_PROC is not set
+# CONFIG_PCI_DEBUG is not set
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+CONFIG_PCCARD=y
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA=m
+# CONFIG_PCMCIA_LOAD_CIS is not set
+CONFIG_PCMCIA_IOCTL=y
+CONFIG_CARDBUS=y
+
+#
+# PC-card bridges
+#
+CONFIG_YENTA=m
+CONFIG_YENTA_O2=y
+CONFIG_YENTA_RICOH=y
+CONFIG_YENTA_TI=y
+CONFIG_YENTA_ENE_TUNE=y
+CONFIG_YENTA_TOSHIBA=y
+# CONFIG_PD6729 is not set
+# CONFIG_I82092 is not set
+CONFIG_PCMCIA_PXA2XX=m
+CONFIG_PCCARD_NONSTATIC=m
+
+#
+# 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_LEDS=y
+CONFIG_LEDS_TIMER=y
+CONFIG_LEDS_CPU=y
+CONFIG_ALIGNMENT_TRAP=y
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE=""
+# 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 is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# 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=y
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+# CONFIG_IPV6 is not set
+# 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 is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+# CONFIG_IEEE80211_CRYPT_TKIP is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+# CONFIG_MTD is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_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_SX8 is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=12000
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+CONFIG_ARMCORE_FLASH=y
+# CONFIG_ARMCORE_NOR is not set
+CONFIG_ARMCORE_NAND=y
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=m
+CONFIG_BLK_DEV_IDE=m
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=m
+# CONFIG_IDEDISK_MULTI_MODE is not set
+CONFIG_BLK_DEV_IDECS=m
+CONFIG_BLK_DEV_IDECD=m
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+CONFIG_BLK_DEV_IDESCSI=m
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=m
+# CONFIG_BLK_DEV_IDEPCI is not set
+# CONFIG_IDE_ARM is not set
+CONFIG_BLK_DEV_IDE_CM_X270=m
+# 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 is not set
+
+#
+# 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_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+# CONFIG_MEGARAID_LEGACY is not set
+# CONFIG_MEGARAID_SAS is not set
+# CONFIG_SCSI_SATA is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_IPS is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCSI_IPR is not set
+# CONFIG_SCSI_QLOGIC_FC is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_QLA_FC is not set
+# CONFIG_SCSI_LPFC is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# PCMCIA SCSI adapter support
+#
+# CONFIG_PCMCIA_AHA152X is not set
+# CONFIG_PCMCIA_FDOMAIN is not set
+# CONFIG_PCMCIA_NINJA_SCSI is not set
+# CONFIG_PCMCIA_QLOGIC is not set
+# CONFIG_PCMCIA_SYM53C500 is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+# CONFIG_FUSION_SPI is not set
+# CONFIG_FUSION_FC is not set
+# CONFIG_FUSION_SAS is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_IEEE1394 is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+
+#
+# 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
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_CASSINI is not set
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_SMC91X is not set
+CONFIG_DM9000=y
+CONFIG_DM9000_NOEPROM=y
+
+#
+# Tulip family network device support
+#
+# CONFIG_NET_TULIP is not set
+# CONFIG_HP100 is not set
+CONFIG_NET_PCI=y
+# CONFIG_PCNET32 is not set
+# CONFIG_AMD8111_ETH is not set
+# CONFIG_ADAPTEC_STARFIRE is not set
+# CONFIG_B44 is not set
+# CONFIG_FORCEDETH is not set
+# CONFIG_DGRS is not set
+# CONFIG_EEPRO100 is not set
+# CONFIG_E100 is not set
+# CONFIG_FEALNX is not set
+# CONFIG_NATSEMI is not set
+# CONFIG_NE2K_PCI is not set
+# CONFIG_8139CP is not set
+CONFIG_8139TOO=m
+# CONFIG_8139TOO_PIO is not set
+# CONFIG_8139TOO_TUNE_TWISTER is not set
+# CONFIG_8139TOO_8129 is not set
+# CONFIG_8139_OLD_RX_RESET is not set
+# CONFIG_SIS900 is not set
+# CONFIG_EPIC100 is not set
+# CONFIG_SUNDANCE is not set
+# CONFIG_TLAN is not set
+# CONFIG_VIA_RHINE is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_E1000 is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_R8169 is not set
+# CONFIG_SIS190 is not set
+# CONFIG_SKGE is not set
+# CONFIG_SKY2 is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_VIA_VELOCITY is not set
+# CONFIG_TIGON3 is not set
+# CONFIG_BNX2 is not set
+
+#
+# Ethernet (10000 Mbit)
+#
+# CONFIG_CHELSIO_T1 is not set
+# CONFIG_IXGB is not set
+# CONFIG_S2IO is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_PCMCIA_WAVELAN is not set
+# CONFIG_PCMCIA_NETWAVE is not set
+
+#
+# Wireless 802.11 Frequency Hopping cards support
+#
+# CONFIG_PCMCIA_RAYCS is not set
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+# CONFIG_IPW2100 is not set
+# CONFIG_IPW2200 is not set
+# CONFIG_HERMES is not set
+# CONFIG_ATMEL is not set
+
+#
+# Wireless 802.11b Pcmcia/Cardbus cards support
+#
+# CONFIG_AIRO_CS is not set
+# CONFIG_PCMCIA_WL3501 is not set
+
+#
+# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
+#
+# CONFIG_PRISM54 is not set
+# CONFIG_HOSTAP is not set
+CONFIG_NET_WIRELESS=y
+
+#
+# PCMCIA network device support
+#
+CONFIG_NET_PCMCIA=y
+# CONFIG_PCMCIA_3C589 is not set
+# CONFIG_PCMCIA_3C574 is not set
+# CONFIG_PCMCIA_FMVJ18X is not set
+CONFIG_PCMCIA_PCNET=m
+# CONFIG_PCMCIA_NMCLAN is not set
+# CONFIG_PCMCIA_SMC91C92 is not set
+# CONFIG_PCMCIA_XIRC2PS is not set
+# CONFIG_PCMCIA_AXNET is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NET_FC 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=y
+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 is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_PCIPS2 is not set
+CONFIG_SERIO_LIBPS2=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=y
+# CONFIG_SERIAL_8250_CONSOLE is not set
+# CONFIG_SERIAL_8250_CS is not set
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_JSM is not set
+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_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_DRM is not set
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+CONFIG_EMV3020_RTC=y
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+CONFIG_UCB1400=m
+CONFIG_UCB1400_TS=m
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB 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_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_CIRRUS is not set
+# CONFIG_FB_PM2 is not set
+# CONFIG_FB_CYBER2000 is not set
+# CONFIG_FB_ASILIANT is not set
+# CONFIG_FB_IMSTT is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_NVIDIA is not set
+# CONFIG_FB_RIVA is not set
+# CONFIG_FB_MATROX is not set
+# CONFIG_FB_RADEON_OLD is not set
+# CONFIG_FB_RADEON is not set
+# CONFIG_FB_ATY128 is not set
+# CONFIG_FB_ATY is not set
+# CONFIG_FB_SAVAGE is not set
+# CONFIG_FB_SIS is not set
+# CONFIG_FB_NEOMAGIC is not set
+# CONFIG_FB_KYRO is not set
+# CONFIG_FB_3DFX is not set
+# CONFIG_FB_VOODOO1 is not set
+# CONFIG_FB_TRIDENT is not set
+CONFIG_FB_PXA=y
+# CONFIG_FB_PXA_PARAMETERS is not set
+CONFIG_FB_MBX=m
+# 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 is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+
+#
+# Logo configuration
+#
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+CONFIG_LOGO_LINUX_CLUT224=y
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_AC97_CODEC=m
+CONFIG_SND_AC97_BUS=m
+# 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
+
+#
+# PCI devices
+#
+# CONFIG_SND_AD1889 is not set
+# CONFIG_SND_ALI5451 is not set
+# CONFIG_SND_ATIIXP is not set
+# CONFIG_SND_ATIIXP_MODEM is not set
+# CONFIG_SND_AU8810 is not set
+# CONFIG_SND_AU8820 is not set
+# CONFIG_SND_AU8830 is not set
+# CONFIG_SND_AZT3328 is not set
+# CONFIG_SND_BT87X is not set
+# CONFIG_SND_CA0106 is not set
+# CONFIG_SND_CMIPCI is not set
+# CONFIG_SND_CS4281 is not set
+# CONFIG_SND_CS46XX is not set
+# CONFIG_SND_EMU10K1 is not set
+# CONFIG_SND_EMU10K1X is not set
+# CONFIG_SND_ENS1370 is not set
+# CONFIG_SND_ENS1371 is not set
+# CONFIG_SND_ES1938 is not set
+# CONFIG_SND_ES1968 is not set
+# CONFIG_SND_FM801 is not set
+# CONFIG_SND_HDA_INTEL is not set
+# CONFIG_SND_HDSP is not set
+# CONFIG_SND_HDSPM is not set
+# CONFIG_SND_ICE1712 is not set
+# CONFIG_SND_ICE1724 is not set
+# CONFIG_SND_INTEL8X0 is not set
+# CONFIG_SND_INTEL8X0M is not set
+# CONFIG_SND_KORG1212 is not set
+# CONFIG_SND_MAESTRO3 is not set
+# CONFIG_SND_MIXART is not set
+# CONFIG_SND_NM256 is not set
+# CONFIG_SND_PCXHR is not set
+# CONFIG_SND_RME32 is not set
+# CONFIG_SND_RME96 is not set
+# CONFIG_SND_RME9652 is not set
+# CONFIG_SND_SONICVIBES is not set
+# CONFIG_SND_TRIDENT is not set
+# CONFIG_SND_VIA82XX is not set
+# CONFIG_SND_VIA82XX_MODEM is not set
+# CONFIG_SND_VX222 is not set
+# CONFIG_SND_YMFPCI is not set
+
+#
+# ALSA ARM devices
+#
+CONFIG_SND_PXA2XX_PCM=m
+CONFIG_SND_PXA2XX_AC97=m
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+
+#
+# PCMCIA devices
+#
+
+#
+# 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=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_EHCI_HCD is not set
+# 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_UHCI_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# 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 is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# 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_MTOUCH is not set
+# CONFIG_USB_ITMTOUCH is not set
+# CONFIG_USB_EGALAX 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 Multimedia devices
+#
+# CONFIG_USB_DABUSB is not set
+
+#
+# Video4Linux support is needed for USB Multimedia device support
+#
+
+#
+# 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_ZD1201 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 is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=m
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=m
+CONFIG_MMC_PXA=m
+
+#
+# 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 is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+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 is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+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_RELAYFS_FS is not set
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# 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_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 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=y
+# CONFIG_SMB_NLS_DEFAULT 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=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+# CONFIG_NLS_UTF8 is not set
+
+#
+# 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=17
+# CONFIG_DETECT_SOFTLOCKUP is not set
+# 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 is not set
+CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_FS is not set
+# CONFIG_DEBUG_VM is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+CONFIG_DEBUG_USER=y
+# CONFIG_DEBUG_WAITQ is not set
+CONFIG_DEBUG_ERRORS=y
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+# CONFIG_CRYPTO_SHA1 is not set
+# 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 is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+CONFIG_CRYPTO_AES=m
+# 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 is not set
+# 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 is not set
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
diff --git a/packages/linux/compulab-pxa270-2.6.16/linux-2.6.16.patch b/packages/linux/compulab-pxa270-2.6.16/linux-2.6.16.patch
new file mode 100644
index 0000000000..c8b9fcbc1a
--- /dev/null
+++ b/packages/linux/compulab-pxa270-2.6.16/linux-2.6.16.patch
@@ -0,0 +1,9302 @@
+ Makefile | 7
+ arch/arm/Kconfig | 10
+ arch/arm/common/dmabounce.c | 23 -
+ arch/arm/configs/cm_x270_defconfig | 1312 ++++++++++++++++++++++++++++++
+ arch/arm/kernel/bios32.c | 36 +
+ arch/arm/kernel/vmlinux.lds.S | 4
+ arch/arm/mach-pxa/Kconfig | 16
+ arch/arm/mach-pxa/Makefile | 9
+ arch/arm/mach-pxa/cm-x270-pci.c | 152 +++
+ arch/arm/mach-pxa/cm-x270.c | 975 ++++++++++++++++++++++
+ arch/arm/mach-pxa/it8152.c | 248 ++++++
+ arch/arm/mach-pxa/leds-cm-x270.c | 134 +++
+ arch/arm/mach-pxa/leds.c | 2
+ arch/arm/mach-pxa/leds.h | 1
+ arch/arm/mach-pxa/pxa27x.c | 6
+ drivers/block/Kconfig | 5
+ drivers/block/Makefile | 1
+ drivers/block/cl_flash/CL_Logic.h | 245 ++++++
+ drivers/block/cl_flash/Kconfig | 11
+ drivers/block/cl_flash/Makefile | 12
+ drivers/block/cl_flash/cl_blkdev.c | 731 +++++++++++++++++
+ drivers/block/cl_flash/cl_blkdev.h | 43 +
+ drivers/block/cl_flash/cl_common.c | 52 +
+ drivers/block/cl_flash/cl_nanddev_x270.c | 233 +++++
+ drivers/block/cl_flash/cl_nordev.c | 594 ++++++++++++++
+ drivers/char/Kconfig | 6
+ drivers/char/Makefile | 1
+ drivers/char/emv3020.c | 365 ++++++++
+ drivers/ide/Kconfig | 7
+ drivers/ide/arm/Makefile | 1
+ drivers/ide/arm/cm-x270-ide.c | 135 +++
+ drivers/mfd/Kconfig | 10
+ drivers/mfd/Makefile | 7
+ drivers/mfd/mcp-ac97.c | 151 +++
+ drivers/mfd/mcp-core.c | 1
+ drivers/mfd/mcp.h | 9
+ drivers/mfd/ucb1x00-core.c | 127 ++-
+ drivers/mfd/ucb1x00-ts.c | 44 +
+ drivers/mfd/ucb1x00.h | 4
+ drivers/mtd/nand/Kconfig | 4
+ drivers/mtd/nand/Makefile | 1
+ drivers/mtd/nand/cmx270-nand.c | 281 ++++++
+ drivers/net/Kconfig | 8
+ drivers/net/dm9000.c | 11
+ drivers/pcmcia/Makefile | 2
+ drivers/pcmcia/pxa2xx_cm_x270.c | 198 +++++
+ drivers/serial/pxa.c | 55 +
+ drivers/video/Kconfig | 10
+ drivers/video/Makefile | 1
+ drivers/video/mbx/Makefile | 7
+ drivers/video/mbx/mbxfb.c | 659 +++++++++++++++
+ drivers/video/mbx/mbxsysfs.c | 129 +++
+ drivers/video/mbx/reg_bits.h | 489 +++++++++++
+ drivers/video/mbx/regs.h | 192 ++++
+ drivers/video/pxafb.c | 104 ++
+ include/asm-arm/arch-pxa/cm-x270.h | 72 ++
+ include/asm-arm/arch-pxa/hardware.h | 11
+ include/asm-arm/arch-pxa/irqs.h | 24 +
+ include/asm-arm/arch-pxa/marathonfb.h | 28 +
+ include/asm-arm/arch-pxa/memory.h | 13
+ include/asm-arm/arch-pxa/pxafbsetup.h | 39 +
+ include/asm-arm/hardware/it8152.h | 104 ++
+ include/linux/pci_ids.h | 1
+ sound/pci/ac97/ac97_codec.c | 2
+ sound/pci/ac97/ac97_patch.c | 30 +
+ sound/pci/ac97/ac97_patch.h | 1
+ 66 files changed, 8115 insertions(+), 91 deletions(-)
+
+diff --git a/Makefile b/Makefile
+index cb57905..dd02f27 100644
+--- a/Makefile
++++ b/Makefile
+@@ -172,8 +172,11 @@ # Alternatively CROSS_COMPILE can be set
+ # Default value for CROSS_COMPILE is not to prefix executables
+ # Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile
+
+-ARCH ?= $(SUBARCH)
+-CROSS_COMPILE ?=
++#ARCH ?= $(SUBARCH)
++#CROSS_COMPILE ?=
++
++ARCH = arm
++CROSS_COMPILE = arm-linux-
+
+ # Architecture as present in compile.h
+ UTS_MACHINE := $(ARCH)
+diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
+index 32ba00b..2de9ceb 100644
+--- a/arch/arm/Kconfig
++++ b/arch/arm/Kconfig
+@@ -331,7 +331,7 @@ config ISA_DMA_API
+ bool
+
+ config PCI
+- bool "PCI support" if ARCH_INTEGRATOR_AP || ARCH_VERSATILE_PB
++ bool "PCI support" if ARCH_INTEGRATOR_AP || ARCH_VERSATILE_PB || MACH_ARMCORE
+ help
+ Find out whether you have a PCI motherboard. PCI is the name of a
+ bus system, i.e. the way the CPU talks to the other stuff inside
+@@ -349,6 +349,12 @@ config PCI_HOST_VIA82C505
+ depends on PCI && ARCH_SHARK
+ default y
+
++config PCI_HOST_ITE8152
++ bool
++ depends on PCI && MACH_ARMCORE
++ default y
++ select DMABOUNCE
++
+ source "drivers/pci/Kconfig"
+
+ source "drivers/pcmcia/Kconfig"
+@@ -484,7 +490,7 @@ config LEDS
+ ARCH_LUBBOCK || MACH_MAINSTONE || ARCH_NETWINDER || \
+ ARCH_OMAP || ARCH_P720T || ARCH_PXA_IDP || \
+ ARCH_SA1100 || ARCH_SHARK || ARCH_VERSATILE || \
+- ARCH_AT91RM9200
++ ARCH_AT91RM9200 || MACH_ARMCORE
+ help
+ If you say Y here, the LEDs on your machine will be used
+ to provide useful information about your current system status.
+diff --git a/arch/arm/common/dmabounce.c b/arch/arm/common/dmabounce.c
+index ad6c89a..dc2bbd0 100644
+--- a/arch/arm/common/dmabounce.c
++++ b/arch/arm/common/dmabounce.c
+@@ -235,7 +235,7 @@ map_single(struct device *dev, void *ptr
+ /*
+ * Figure out if we need to bounce from the DMA mask.
+ */
+- needs_bounce = (dma_addr | (dma_addr + size - 1)) & ~mask;
++ needs_bounce = ((dma_addr | (dma_addr + size - 1)) - PHYS_OFFSET) & ~mask;
+ }
+
+ if (device_info && (needs_bounce || dma_needs_bounce(dev, dma_addr, size))) {
+@@ -275,6 +275,7 @@ unmap_single(struct device *dev, dma_add
+ {
+ struct dmabounce_device_info *device_info = find_dmabounce_dev(dev);
+ struct safe_buffer *buf = NULL;
++ unsigned long flags;
+
+ /*
+ * Trying to unmap an invalid mapping
+@@ -284,6 +285,8 @@ unmap_single(struct device *dev, dma_add
+ return;
+ }
+
++ local_irq_save(flags);
++
+ if (device_info)
+ buf = find_safe_buffer(device_info, dma_addr);
+
+@@ -316,8 +319,11 @@ unmap_single(struct device *dev, dma_add
+ ptr = (unsigned long)buf->ptr;
+ dmac_clean_range(ptr, ptr + size);
+ }
++ local_irq_restore(flags);
+ free_safe_buffer(device_info, buf);
+ }
++ else
++ local_irq_restore(flags);
+ }
+
+ static inline void
+@@ -424,18 +430,12 @@ void
+ dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size,
+ enum dma_data_direction dir)
+ {
+- unsigned long flags;
+-
+ dev_dbg(dev, "%s(ptr=%p,size=%d,dir=%x)\n",
+ __func__, (void *) dma_addr, size, dir);
+
+ BUG_ON(dir == DMA_NONE);
+
+- local_irq_save(flags);
+-
+ unmap_single(dev, dma_addr, size, dir);
+-
+- local_irq_restore(flags);
+ }
+
+ int
+@@ -471,7 +471,6 @@ void
+ dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nents,
+ enum dma_data_direction dir)
+ {
+- unsigned long flags;
+ int i;
+
+ dev_dbg(dev, "%s(sg=%p,nents=%d,dir=%x)\n",
+@@ -479,16 +478,12 @@ dma_unmap_sg(struct device *dev, struct
+
+ BUG_ON(dir == DMA_NONE);
+
+- local_irq_save(flags);
+-
+ for (i = 0; i < nents; i++, sg++) {
+ dma_addr_t dma_addr = sg->dma_address;
+ unsigned int length = sg->length;
+
+ unmap_single(dev, dma_addr, length, dir);
+ }
+-
+- local_irq_restore(flags);
+ }
+
+ void
+@@ -632,7 +627,7 @@ #endif
+ list_add(&device_info->node, &dmabounce_devs);
+
+ printk(KERN_INFO "dmabounce: registered device %s on %s bus\n",
+- dev->bus_id, dev->bus->name);
++ dev->bus_id, dev->bus ? dev->bus->name : "no");
+
+ return 0;
+
+@@ -677,7 +672,7 @@ #endif
+ kfree(device_info);
+
+ printk(KERN_INFO "dmabounce: device %s on %s bus unregistered\n",
+- dev->bus_id, dev->bus->name);
++ dev->bus_id, dev->bus ? dev->bus->name : "no");
+ }
+
+
+diff --git a/arch/arm/configs/cm_x270_defconfig b/arch/arm/configs/cm_x270_defconfig
+new file mode 100644
+index 0000000..f87d617
+--- /dev/null
++++ b/arch/arm/configs/cm_x270_defconfig
+@@ -0,0 +1,1312 @@
++#
++# Automatically generated make config: don't edit
++# Linux kernel version: 2.6.16
++# Tue Sep 26 10:07:36 2006
++#
++CONFIG_ARM=y
++CONFIG_MMU=y
++CONFIG_RWSEM_GENERIC_SPINLOCK=y
++CONFIG_GENERIC_CALIBRATE_DELAY=y
++CONFIG_ARCH_MTD_XIP=y
++
++#
++# Code maturity level options
++#
++CONFIG_EXPERIMENTAL=y
++CONFIG_BROKEN_ON_SMP=y
++CONFIG_INIT_ENV_ARG_LIMIT=32
++
++#
++# General setup
++#
++CONFIG_LOCALVERSION="-cm-x270"
++# 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=y
++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=y
++CONFIG_CC_ALIGN_FUNCTIONS=0
++CONFIG_CC_ALIGN_LABELS=0
++CONFIG_CC_ALIGN_LOOPS=0
++CONFIG_CC_ALIGN_JUMPS=0
++CONFIG_SLAB=y
++# CONFIG_TINY_SHMEM is not set
++CONFIG_BASE_SMALL=0
++# CONFIG_SLOB is not set
++
++#
++# Loadable module support
++#
++CONFIG_MODULES=y
++CONFIG_MODULE_UNLOAD=y
++CONFIG_MODULE_FORCE_UNLOAD=y
++CONFIG_OBSOLETE_MODPARM=y
++# CONFIG_MODVERSIONS is not set
++# CONFIG_MODULE_SRCVERSION_ALL is not set
++CONFIG_KMOD=y
++
++#
++# Block layer
++#
++
++#
++# 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_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_L7200 is not set
++CONFIG_ARCH_PXA=y
++# CONFIG_ARCH_RPC is not set
++# CONFIG_ARCH_SA1100 is not set
++# CONFIG_ARCH_S3C2410 is not set
++# 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
++
++#
++# Intel PXA2xx Implementations
++#
++# CONFIG_ARCH_LUBBOCK is not set
++# CONFIG_MACH_MAINSTONE is not set
++CONFIG_MACH_ARMCORE=y
++# CONFIG_ARCH_PXA_IDP is not set
++# CONFIG_PXA_SHARPSL is not set
++CONFIG_ARMCORE_REV12=y
++# CONFIG_ARMCORE_REV11 is not set
++CONFIG_PXA27x=y
++CONFIG_IWMMXT=y
++
++#
++# Processor Type
++#
++CONFIG_CPU_32=y
++CONFIG_CPU_XSCALE=y
++CONFIG_CPU_32v5=y
++CONFIG_CPU_ABRT_EV5T=y
++CONFIG_CPU_CACHE_VIVT=y
++CONFIG_CPU_TLB_V4WBI=y
++
++#
++# Processor Features
++#
++CONFIG_ARM_THUMB=y
++CONFIG_XSCALE_PMU=y
++CONFIG_DMABOUNCE=y
++
++#
++# Bus support
++#
++CONFIG_PCI=y
++CONFIG_PCI_HOST_ITE8152=y
++# CONFIG_PCI_LEGACY_PROC is not set
++# CONFIG_PCI_DEBUG is not set
++
++#
++# PCCARD (PCMCIA/CardBus) support
++#
++CONFIG_PCCARD=y
++# CONFIG_PCMCIA_DEBUG is not set
++CONFIG_PCMCIA=m
++# CONFIG_PCMCIA_LOAD_CIS is not set
++CONFIG_PCMCIA_IOCTL=y
++CONFIG_CARDBUS=y
++
++#
++# PC-card bridges
++#
++CONFIG_YENTA=m
++CONFIG_YENTA_O2=y
++CONFIG_YENTA_RICOH=y
++CONFIG_YENTA_TI=y
++CONFIG_YENTA_ENE_TUNE=y
++CONFIG_YENTA_TOSHIBA=y
++# CONFIG_PD6729 is not set
++# CONFIG_I82092 is not set
++CONFIG_PCMCIA_PXA2XX=m
++CONFIG_PCCARD_NONSTATIC=m
++
++#
++# 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_LEDS=y
++CONFIG_LEDS_TIMER=y
++CONFIG_LEDS_CPU=y
++CONFIG_ALIGNMENT_TRAP=y
++
++#
++# Boot options
++#
++CONFIG_ZBOOT_ROM_TEXT=0x0
++CONFIG_ZBOOT_ROM_BSS=0x0
++CONFIG_CMDLINE=""
++# 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 is not set
++
++#
++# Networking
++#
++CONFIG_NET=y
++
++#
++# Networking options
++#
++# CONFIG_NETDEBUG is not set
++CONFIG_PACKET=y
++# CONFIG_PACKET_MMAP is not set
++CONFIG_UNIX=y
++# CONFIG_NET_KEY is not set
++CONFIG_INET=y
++# CONFIG_IP_MULTICAST is not set
++# 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=y
++# CONFIG_IP_PNP_RARP is not set
++# CONFIG_NET_IPIP is not set
++# CONFIG_NET_IPGRE is not set
++# CONFIG_ARPD is not set
++# CONFIG_SYN_COOKIES is not set
++# CONFIG_INET_AH is not set
++# CONFIG_INET_ESP is not set
++# CONFIG_INET_IPCOMP is not set
++# CONFIG_INET_TUNNEL is not set
++CONFIG_INET_DIAG=y
++CONFIG_INET_TCP_DIAG=y
++# CONFIG_TCP_CONG_ADVANCED is not set
++CONFIG_TCP_CONG_BIC=y
++# CONFIG_IPV6 is not set
++# 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 is not set
++
++#
++# Network testing
++#
++# CONFIG_NET_PKTGEN is not set
++# CONFIG_HAMRADIO is not set
++# CONFIG_IRDA is not set
++# CONFIG_BT is not set
++CONFIG_IEEE80211=m
++# CONFIG_IEEE80211_DEBUG is not set
++CONFIG_IEEE80211_CRYPT_WEP=m
++CONFIG_IEEE80211_CRYPT_CCMP=m
++# CONFIG_IEEE80211_CRYPT_TKIP is not set
++
++#
++# Device Drivers
++#
++
++#
++# Generic Driver Options
++#
++CONFIG_STANDALONE=y
++CONFIG_PREVENT_FIRMWARE_BUILD=y
++CONFIG_FW_LOADER=y
++# CONFIG_DEBUG_DRIVER is not set
++
++#
++# Connector - unified userspace <-> kernelspace linker
++#
++# CONFIG_CONNECTOR is not set
++
++#
++# Memory Technology Devices (MTD)
++#
++# CONFIG_MTD is not set
++
++#
++# Parallel port support
++#
++# CONFIG_PARPORT is not set
++
++#
++# Plug and Play support
++#
++
++#
++# Block devices
++#
++# CONFIG_BLK_CPQ_DA is not set
++# CONFIG_BLK_CPQ_CISS_DA is not set
++# CONFIG_BLK_DEV_DAC960 is not set
++# CONFIG_BLK_DEV_UMEM is not set
++# CONFIG_BLK_DEV_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_SX8 is not set
++# CONFIG_BLK_DEV_UB is not set
++CONFIG_BLK_DEV_RAM=y
++CONFIG_BLK_DEV_RAM_COUNT=16
++CONFIG_BLK_DEV_RAM_SIZE=12000
++CONFIG_BLK_DEV_INITRD=y
++# CONFIG_CDROM_PKTCDVD is not set
++# CONFIG_ATA_OVER_ETH is not set
++CONFIG_ARMCORE_FLASH=y
++# CONFIG_ARMCORE_NOR is not set
++CONFIG_ARMCORE_NAND=y
++
++#
++# ATA/ATAPI/MFM/RLL support
++#
++CONFIG_IDE=m
++CONFIG_BLK_DEV_IDE=m
++
++#
++# Please see Documentation/ide.txt for help/info on IDE drives
++#
++# CONFIG_BLK_DEV_IDE_SATA is not set
++CONFIG_BLK_DEV_IDEDISK=m
++# CONFIG_IDEDISK_MULTI_MODE is not set
++CONFIG_BLK_DEV_IDECS=m
++CONFIG_BLK_DEV_IDECD=m
++# CONFIG_BLK_DEV_IDETAPE is not set
++# CONFIG_BLK_DEV_IDEFLOPPY is not set
++CONFIG_BLK_DEV_IDESCSI=m
++# CONFIG_IDE_TASK_IOCTL is not set
++
++#
++# IDE chipset support/bugfixes
++#
++CONFIG_IDE_GENERIC=m
++# CONFIG_BLK_DEV_IDEPCI is not set
++# CONFIG_IDE_ARM is not set
++CONFIG_BLK_DEV_IDE_CM_X270=m
++# 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 is not set
++
++#
++# 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_BLK_DEV_3W_XXXX_RAID is not set
++# CONFIG_SCSI_3W_9XXX is not set
++# CONFIG_SCSI_ACARD is not set
++# CONFIG_SCSI_AACRAID is not set
++# CONFIG_SCSI_AIC7XXX is not set
++# CONFIG_SCSI_AIC7XXX_OLD is not set
++# CONFIG_SCSI_AIC79XX is not set
++# CONFIG_SCSI_DPT_I2O is not set
++# CONFIG_MEGARAID_NEWGEN is not set
++# CONFIG_MEGARAID_LEGACY is not set
++# CONFIG_MEGARAID_SAS is not set
++# CONFIG_SCSI_SATA is not set
++# CONFIG_SCSI_DMX3191D is not set
++# CONFIG_SCSI_FUTURE_DOMAIN is not set
++# CONFIG_SCSI_IPS is not set
++# CONFIG_SCSI_INITIO is not set
++# CONFIG_SCSI_INIA100 is not set
++# CONFIG_SCSI_SYM53C8XX_2 is not set
++# CONFIG_SCSI_IPR is not set
++# CONFIG_SCSI_QLOGIC_FC is not set
++# CONFIG_SCSI_QLOGIC_1280 is not set
++# CONFIG_SCSI_QLA_FC is not set
++# CONFIG_SCSI_LPFC is not set
++# CONFIG_SCSI_DC395x is not set
++# CONFIG_SCSI_DC390T is not set
++# CONFIG_SCSI_NSP32 is not set
++# CONFIG_SCSI_DEBUG is not set
++
++#
++# PCMCIA SCSI adapter support
++#
++# CONFIG_PCMCIA_AHA152X is not set
++# CONFIG_PCMCIA_FDOMAIN is not set
++# CONFIG_PCMCIA_NINJA_SCSI is not set
++# CONFIG_PCMCIA_QLOGIC is not set
++# CONFIG_PCMCIA_SYM53C500 is not set
++
++#
++# Multi-device support (RAID and LVM)
++#
++# CONFIG_MD is not set
++
++#
++# Fusion MPT device support
++#
++# CONFIG_FUSION is not set
++# CONFIG_FUSION_SPI is not set
++# CONFIG_FUSION_FC is not set
++# CONFIG_FUSION_SAS is not set
++
++#
++# IEEE 1394 (FireWire) support
++#
++# CONFIG_IEEE1394 is not set
++
++#
++# I2O device support
++#
++# CONFIG_I2O is not set
++
++#
++# 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
++
++#
++# ARCnet devices
++#
++# CONFIG_ARCNET is not set
++
++#
++# PHY device support
++#
++# CONFIG_PHYLIB is not set
++
++#
++# Ethernet (10 or 100Mbit)
++#
++CONFIG_NET_ETHERNET=y
++CONFIG_MII=y
++# CONFIG_HAPPYMEAL is not set
++# CONFIG_SUNGEM is not set
++# CONFIG_CASSINI is not set
++# CONFIG_NET_VENDOR_3COM is not set
++# CONFIG_SMC91X is not set
++CONFIG_DM9000=y
++CONFIG_DM9000_NOEPROM=y
++
++#
++# Tulip family network device support
++#
++# CONFIG_NET_TULIP is not set
++# CONFIG_HP100 is not set
++CONFIG_NET_PCI=y
++# CONFIG_PCNET32 is not set
++# CONFIG_AMD8111_ETH is not set
++# CONFIG_ADAPTEC_STARFIRE is not set
++# CONFIG_B44 is not set
++# CONFIG_FORCEDETH is not set
++# CONFIG_DGRS is not set
++# CONFIG_EEPRO100 is not set
++# CONFIG_E100 is not set
++# CONFIG_FEALNX is not set
++# CONFIG_NATSEMI is not set
++# CONFIG_NE2K_PCI is not set
++# CONFIG_8139CP is not set
++CONFIG_8139TOO=m
++# CONFIG_8139TOO_PIO is not set
++# CONFIG_8139TOO_TUNE_TWISTER is not set
++# CONFIG_8139TOO_8129 is not set
++# CONFIG_8139_OLD_RX_RESET is not set
++# CONFIG_SIS900 is not set
++# CONFIG_EPIC100 is not set
++# CONFIG_SUNDANCE is not set
++# CONFIG_TLAN is not set
++# CONFIG_VIA_RHINE is not set
++
++#
++# Ethernet (1000 Mbit)
++#
++# CONFIG_ACENIC is not set
++# CONFIG_DL2K is not set
++# CONFIG_E1000 is not set
++# CONFIG_NS83820 is not set
++# CONFIG_HAMACHI is not set
++# CONFIG_YELLOWFIN is not set
++# CONFIG_R8169 is not set
++# CONFIG_SIS190 is not set
++# CONFIG_SKGE is not set
++# CONFIG_SKY2 is not set
++# CONFIG_SK98LIN is not set
++# CONFIG_VIA_VELOCITY is not set
++# CONFIG_TIGON3 is not set
++# CONFIG_BNX2 is not set
++
++#
++# Ethernet (10000 Mbit)
++#
++# CONFIG_CHELSIO_T1 is not set
++# CONFIG_IXGB is not set
++# CONFIG_S2IO is not set
++
++#
++# Token Ring devices
++#
++# CONFIG_TR is not set
++
++#
++# Wireless LAN (non-hamradio)
++#
++CONFIG_NET_RADIO=y
++
++#
++# Obsolete Wireless cards support (pre-802.11)
++#
++# CONFIG_STRIP is not set
++# CONFIG_PCMCIA_WAVELAN is not set
++# CONFIG_PCMCIA_NETWAVE is not set
++
++#
++# Wireless 802.11 Frequency Hopping cards support
++#
++# CONFIG_PCMCIA_RAYCS is not set
++
++#
++# Wireless 802.11b ISA/PCI cards support
++#
++# CONFIG_IPW2100 is not set
++# CONFIG_IPW2200 is not set
++# CONFIG_HERMES is not set
++# CONFIG_ATMEL is not set
++
++#
++# Wireless 802.11b Pcmcia/Cardbus cards support
++#
++# CONFIG_AIRO_CS is not set
++# CONFIG_PCMCIA_WL3501 is not set
++
++#
++# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
++#
++# CONFIG_PRISM54 is not set
++# CONFIG_HOSTAP is not set
++CONFIG_NET_WIRELESS=y
++
++#
++# PCMCIA network device support
++#
++CONFIG_NET_PCMCIA=y
++# CONFIG_PCMCIA_3C589 is not set
++# CONFIG_PCMCIA_3C574 is not set
++# CONFIG_PCMCIA_FMVJ18X is not set
++CONFIG_PCMCIA_PCNET=m
++# CONFIG_PCMCIA_NMCLAN is not set
++# CONFIG_PCMCIA_SMC91C92 is not set
++# CONFIG_PCMCIA_XIRC2PS is not set
++# CONFIG_PCMCIA_AXNET is not set
++
++#
++# Wan interfaces
++#
++# CONFIG_WAN is not set
++# CONFIG_FDDI is not set
++# CONFIG_HIPPI is not set
++# CONFIG_PPP is not set
++# CONFIG_SLIP is not set
++# CONFIG_NET_FC 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=y
++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 is not set
++# CONFIG_INPUT_MOUSE is not set
++# CONFIG_INPUT_JOYSTICK is not set
++# CONFIG_INPUT_TOUCHSCREEN is not set
++# CONFIG_INPUT_MISC is not set
++
++#
++# Hardware I/O ports
++#
++CONFIG_SERIO=y
++# CONFIG_SERIO_SERPORT is not set
++# CONFIG_SERIO_PCIPS2 is not set
++CONFIG_SERIO_LIBPS2=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=y
++# CONFIG_SERIAL_8250_CONSOLE is not set
++# CONFIG_SERIAL_8250_CS is not set
++CONFIG_SERIAL_8250_NR_UARTS=4
++CONFIG_SERIAL_8250_RUNTIME_UARTS=4
++# CONFIG_SERIAL_8250_EXTENDED is not set
++
++#
++# Non-8250 serial port support
++#
++CONFIG_SERIAL_PXA=y
++CONFIG_SERIAL_PXA_CONSOLE=y
++CONFIG_SERIAL_CORE=y
++CONFIG_SERIAL_CORE_CONSOLE=y
++# CONFIG_SERIAL_JSM is not set
++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_RTC is not set
++# CONFIG_DTLK is not set
++# CONFIG_R3964 is not set
++# CONFIG_APPLICOM is not set
++
++#
++# Ftape, the floppy tape device driver
++#
++# CONFIG_DRM is not set
++
++#
++# PCMCIA character devices
++#
++# CONFIG_SYNCLINK_CS is not set
++# CONFIG_CARDMAN_4000 is not set
++# CONFIG_CARDMAN_4040 is not set
++# CONFIG_RAW_DRIVER is not set
++
++#
++# TPM devices
++#
++# CONFIG_TCG_TPM is not set
++# CONFIG_TELCLOCK is not set
++CONFIG_EMV3020_RTC=y
++
++#
++# I2C support
++#
++# CONFIG_I2C is not set
++
++#
++# SPI support
++#
++# CONFIG_SPI is not set
++# CONFIG_SPI_MASTER is not set
++
++#
++# Dallas's 1-wire bus
++#
++# CONFIG_W1 is not set
++
++#
++# Hardware Monitoring support
++#
++# CONFIG_HWMON is not set
++# CONFIG_HWMON_VID is not set
++
++#
++# Misc devices
++#
++
++#
++# Multimedia Capabilities Port drivers
++#
++CONFIG_UCB1400=m
++CONFIG_UCB1400_TS=m
++
++#
++# Multimedia devices
++#
++# CONFIG_VIDEO_DEV is not set
++
++#
++# Digital Video Broadcasting Devices
++#
++# CONFIG_DVB 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_MODE_HELPERS is not set
++# CONFIG_FB_TILEBLITTING is not set
++# CONFIG_FB_CIRRUS is not set
++# CONFIG_FB_PM2 is not set
++# CONFIG_FB_CYBER2000 is not set
++# CONFIG_FB_ASILIANT is not set
++# CONFIG_FB_IMSTT is not set
++# CONFIG_FB_S1D13XXX is not set
++# CONFIG_FB_NVIDIA is not set
++# CONFIG_FB_RIVA is not set
++# CONFIG_FB_MATROX is not set
++# CONFIG_FB_RADEON_OLD is not set
++# CONFIG_FB_RADEON is not set
++# CONFIG_FB_ATY128 is not set
++# CONFIG_FB_ATY is not set
++# CONFIG_FB_SAVAGE is not set
++# CONFIG_FB_SIS is not set
++# CONFIG_FB_NEOMAGIC is not set
++# CONFIG_FB_KYRO is not set
++# CONFIG_FB_3DFX is not set
++# CONFIG_FB_VOODOO1 is not set
++# CONFIG_FB_TRIDENT is not set
++CONFIG_FB_PXA=y
++# CONFIG_FB_PXA_PARAMETERS is not set
++CONFIG_FB_MBX=m
++# 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 is not set
++CONFIG_FONT_8x8=y
++CONFIG_FONT_8x16=y
++
++#
++# Logo configuration
++#
++CONFIG_LOGO=y
++CONFIG_LOGO_LINUX_MONO=y
++CONFIG_LOGO_LINUX_VGA16=y
++CONFIG_LOGO_LINUX_CLUT224=y
++# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
++
++#
++# Sound
++#
++CONFIG_SOUND=m
++
++#
++# Advanced Linux Sound Architecture
++#
++CONFIG_SND=m
++CONFIG_SND_TIMER=m
++CONFIG_SND_PCM=m
++# CONFIG_SND_SEQUENCER is not set
++CONFIG_SND_OSSEMUL=y
++CONFIG_SND_MIXER_OSS=m
++CONFIG_SND_PCM_OSS=m
++# CONFIG_SND_DYNAMIC_MINORS is not set
++CONFIG_SND_SUPPORT_OLD_API=y
++# CONFIG_SND_VERBOSE_PRINTK is not set
++# CONFIG_SND_DEBUG is not set
++
++#
++# Generic devices
++#
++CONFIG_SND_AC97_CODEC=m
++CONFIG_SND_AC97_BUS=m
++# 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
++
++#
++# PCI devices
++#
++# CONFIG_SND_AD1889 is not set
++# CONFIG_SND_ALI5451 is not set
++# CONFIG_SND_ATIIXP is not set
++# CONFIG_SND_ATIIXP_MODEM is not set
++# CONFIG_SND_AU8810 is not set
++# CONFIG_SND_AU8820 is not set
++# CONFIG_SND_AU8830 is not set
++# CONFIG_SND_AZT3328 is not set
++# CONFIG_SND_BT87X is not set
++# CONFIG_SND_CA0106 is not set
++# CONFIG_SND_CMIPCI is not set
++# CONFIG_SND_CS4281 is not set
++# CONFIG_SND_CS46XX is not set
++# CONFIG_SND_EMU10K1 is not set
++# CONFIG_SND_EMU10K1X is not set
++# CONFIG_SND_ENS1370 is not set
++# CONFIG_SND_ENS1371 is not set
++# CONFIG_SND_ES1938 is not set
++# CONFIG_SND_ES1968 is not set
++# CONFIG_SND_FM801 is not set
++# CONFIG_SND_HDA_INTEL is not set
++# CONFIG_SND_HDSP is not set
++# CONFIG_SND_HDSPM is not set
++# CONFIG_SND_ICE1712 is not set
++# CONFIG_SND_ICE1724 is not set
++# CONFIG_SND_INTEL8X0 is not set
++# CONFIG_SND_INTEL8X0M is not set
++# CONFIG_SND_KORG1212 is not set
++# CONFIG_SND_MAESTRO3 is not set
++# CONFIG_SND_MIXART is not set
++# CONFIG_SND_NM256 is not set
++# CONFIG_SND_PCXHR is not set
++# CONFIG_SND_RME32 is not set
++# CONFIG_SND_RME96 is not set
++# CONFIG_SND_RME9652 is not set
++# CONFIG_SND_SONICVIBES is not set
++# CONFIG_SND_TRIDENT is not set
++# CONFIG_SND_VIA82XX is not set
++# CONFIG_SND_VIA82XX_MODEM is not set
++# CONFIG_SND_VX222 is not set
++# CONFIG_SND_YMFPCI is not set
++
++#
++# ALSA ARM devices
++#
++CONFIG_SND_PXA2XX_PCM=m
++CONFIG_SND_PXA2XX_AC97=m
++
++#
++# USB devices
++#
++# CONFIG_SND_USB_AUDIO is not set
++
++#
++# PCMCIA devices
++#
++
++#
++# 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=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_EHCI_HCD is not set
++# 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_UHCI_HCD is not set
++# CONFIG_USB_SL811_HCD is not set
++
++#
++# USB Device Class drivers
++#
++# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
++# CONFIG_USB_ACM is not set
++# CONFIG_USB_PRINTER is not set
++
++#
++# 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 is not set
++# CONFIG_USB_STORAGE_FREECOM is not set
++# CONFIG_USB_STORAGE_ISD200 is not set
++# CONFIG_USB_STORAGE_DPCM is not set
++# CONFIG_USB_STORAGE_USBAT is not set
++# CONFIG_USB_STORAGE_SDDR09 is not set
++# CONFIG_USB_STORAGE_SDDR55 is not set
++# CONFIG_USB_STORAGE_JUMPSHOT is not set
++# CONFIG_USB_STORAGE_ALAUDA is not set
++# CONFIG_USB_LIBUSUAL is not set
++
++#
++# 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_MTOUCH is not set
++# CONFIG_USB_ITMTOUCH is not set
++# CONFIG_USB_EGALAX 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 Multimedia devices
++#
++# CONFIG_USB_DABUSB is not set
++
++#
++# Video4Linux support is needed for USB Multimedia device support
++#
++
++#
++# 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_ZD1201 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 is not set
++
++#
++# MMC/SD Card support
++#
++CONFIG_MMC=m
++# CONFIG_MMC_DEBUG is not set
++CONFIG_MMC_BLOCK=m
++CONFIG_MMC_PXA=m
++
++#
++# 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 is not set
++# CONFIG_XFS_FS is not set
++# CONFIG_OCFS2_FS is not set
++# CONFIG_MINIX_FS is not set
++# CONFIG_ROMFS_FS is not set
++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 is not set
++
++#
++# CD-ROM/DVD Filesystems
++#
++# CONFIG_ISO9660_FS is not set
++# CONFIG_UDF_FS is not set
++
++#
++# DOS/FAT/NT Filesystems
++#
++CONFIG_FAT_FS=y
++CONFIG_MSDOS_FS=y
++CONFIG_VFAT_FS=y
++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_RELAYFS_FS is not set
++# CONFIG_CONFIGFS_FS is not set
++
++#
++# 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_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 is not set
++# CONFIG_NFS_DIRECTIO is not set
++# CONFIG_NFSD is not set
++CONFIG_ROOT_NFS=y
++CONFIG_LOCKD=y
++CONFIG_LOCKD_V4=y
++CONFIG_NFS_COMMON=y
++CONFIG_SUNRPC=y
++# CONFIG_RPCSEC_GSS_KRB5 is not set
++# CONFIG_RPCSEC_GSS_SPKM3 is not set
++CONFIG_SMB_FS=y
++# CONFIG_SMB_NLS_DEFAULT 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=y
++CONFIG_NLS_DEFAULT="iso8859-1"
++CONFIG_NLS_CODEPAGE_437=y
++# CONFIG_NLS_CODEPAGE_737 is not set
++# CONFIG_NLS_CODEPAGE_775 is not set
++# CONFIG_NLS_CODEPAGE_850 is not set
++# CONFIG_NLS_CODEPAGE_852 is not set
++# CONFIG_NLS_CODEPAGE_855 is not set
++# CONFIG_NLS_CODEPAGE_857 is not set
++# CONFIG_NLS_CODEPAGE_860 is not set
++# CONFIG_NLS_CODEPAGE_861 is not set
++# CONFIG_NLS_CODEPAGE_862 is not set
++# CONFIG_NLS_CODEPAGE_863 is not set
++# CONFIG_NLS_CODEPAGE_864 is not set
++# CONFIG_NLS_CODEPAGE_865 is not set
++# CONFIG_NLS_CODEPAGE_866 is not set
++# CONFIG_NLS_CODEPAGE_869 is not set
++# CONFIG_NLS_CODEPAGE_936 is not set
++# CONFIG_NLS_CODEPAGE_950 is not set
++# CONFIG_NLS_CODEPAGE_932 is not set
++# CONFIG_NLS_CODEPAGE_949 is not set
++# CONFIG_NLS_CODEPAGE_874 is not set
++# CONFIG_NLS_ISO8859_8 is not set
++# CONFIG_NLS_CODEPAGE_1250 is not set
++# CONFIG_NLS_CODEPAGE_1251 is not set
++# CONFIG_NLS_ASCII is not set
++CONFIG_NLS_ISO8859_1=y
++# CONFIG_NLS_ISO8859_2 is not set
++# CONFIG_NLS_ISO8859_3 is not set
++# CONFIG_NLS_ISO8859_4 is not set
++# CONFIG_NLS_ISO8859_5 is not set
++# CONFIG_NLS_ISO8859_6 is not set
++# CONFIG_NLS_ISO8859_7 is not set
++# CONFIG_NLS_ISO8859_9 is not set
++# CONFIG_NLS_ISO8859_13 is not set
++# CONFIG_NLS_ISO8859_14 is not set
++# CONFIG_NLS_ISO8859_15 is not set
++# CONFIG_NLS_KOI8_R is not set
++# CONFIG_NLS_KOI8_U is not set
++# CONFIG_NLS_UTF8 is not set
++
++#
++# 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=17
++# CONFIG_DETECT_SOFTLOCKUP is not set
++# 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 is not set
++CONFIG_DEBUG_INFO=y
++# CONFIG_DEBUG_FS is not set
++# CONFIG_DEBUG_VM is not set
++CONFIG_FRAME_POINTER=y
++CONFIG_FORCED_INLINING=y
++# CONFIG_RCU_TORTURE_TEST is not set
++CONFIG_DEBUG_USER=y
++# CONFIG_DEBUG_WAITQ is not set
++CONFIG_DEBUG_ERRORS=y
++CONFIG_DEBUG_LL=y
++# CONFIG_DEBUG_ICEDCC is not set
++
++#
++# Security options
++#
++# CONFIG_KEYS is not set
++# CONFIG_SECURITY is not set
++
++#
++# Cryptographic options
++#
++CONFIG_CRYPTO=y
++# CONFIG_CRYPTO_HMAC is not set
++# CONFIG_CRYPTO_NULL is not set
++# CONFIG_CRYPTO_MD4 is not set
++# CONFIG_CRYPTO_MD5 is not set
++# CONFIG_CRYPTO_SHA1 is not set
++# 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 is not set
++# CONFIG_CRYPTO_BLOWFISH is not set
++# CONFIG_CRYPTO_TWOFISH is not set
++# CONFIG_CRYPTO_SERPENT is not set
++CONFIG_CRYPTO_AES=m
++# 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 is not set
++# 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 is not set
++# CONFIG_CRC16 is not set
++CONFIG_CRC32=y
++# CONFIG_LIBCRC32C is not set
+diff --git a/arch/arm/kernel/bios32.c b/arch/arm/kernel/bios32.c
+index c4923fa..4ff2a62 100644
+--- a/arch/arm/kernel/bios32.c
++++ b/arch/arm/kernel/bios32.c
+@@ -280,6 +280,34 @@ static void __devinit pci_fixup_cy82c693
+ }
+ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_CONTAQ, PCI_DEVICE_ID_CONTAQ_82C693, pci_fixup_cy82c693);
+
++static void __init pci_fixup_it8152(struct pci_dev *dev)
++{
++ int i;
++ if ((dev->class >> 8) == PCI_CLASS_BRIDGE_HOST) {
++ for (i = 0; i < PCI_NUM_RESOURCES; i++) {
++ dev->resource[i].start = 0;
++ dev->resource[i].end = 0;
++ dev->resource[i].flags = 0;
++ }
++ }
++ if (dev->class == 0x68000) {
++ for (i = 0; i < PCI_NUM_RESOURCES; i++) {
++ dev->resource[i].start = 0;
++ dev->resource[i].end = 0;
++ dev->resource[i].flags = 0;
++ }
++ }
++ if (dev->class == 0x80103) {
++ for (i = 0; i < PCI_NUM_RESOURCES; i++) {
++ dev->resource[i].start = 0;
++ dev->resource[i].end = 0;
++ dev->resource[i].flags = 0;
++ }
++ }
++}
++DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_ITE, PCI_DEVICE_ID_ITE_IT8152, pci_fixup_it8152);
++
++
+ void __devinit pcibios_update_irq(struct pci_dev *dev, int irq)
+ {
+ if (debug_pci)
+@@ -293,9 +321,11 @@ void __devinit pcibios_update_irq(struct
+ */
+ static inline int pdev_bad_for_parity(struct pci_dev *dev)
+ {
+- return (dev->vendor == PCI_VENDOR_ID_INTERG &&
+- (dev->device == PCI_DEVICE_ID_INTERG_2000 ||
+- dev->device == PCI_DEVICE_ID_INTERG_2010));
++ return ((dev->vendor == PCI_VENDOR_ID_INTERG &&
++ (dev->device == PCI_DEVICE_ID_INTERG_2000 ||
++ dev->device == PCI_DEVICE_ID_INTERG_2010)) ||
++ (dev->vendor == PCI_VENDOR_ID_ITE &&
++ dev->device == PCI_DEVICE_ID_ITE_IT8152));
+ }
+
+ /*
+diff --git a/arch/arm/kernel/vmlinux.lds.S b/arch/arm/kernel/vmlinux.lds.S
+index 2b254e8..310ccf5 100644
+--- a/arch/arm/kernel/vmlinux.lds.S
++++ b/arch/arm/kernel/vmlinux.lds.S
+@@ -175,5 +175,5 @@ #endif
+ * If you have to comment these two assert statements out, your
+ * binutils is too old (for other reasons as well)
+ */
+-ASSERT((__proc_info_end - __proc_info_begin), "missing CPU support")
+-ASSERT((__arch_info_end - __arch_info_begin), "no machine record defined")
++/* ASSERT((__proc_info_end - __proc_info_begin), "missing CPU support") */
++/* ASSERT((__arch_info_end - __arch_info_begin), "no machine record defined") */
+diff --git a/arch/arm/mach-pxa/Kconfig b/arch/arm/mach-pxa/Kconfig
+index c1d77f5..0a62a62 100644
+--- a/arch/arm/mach-pxa/Kconfig
++++ b/arch/arm/mach-pxa/Kconfig
+@@ -15,6 +15,11 @@ config MACH_MAINSTONE
+ select PXA27x
+ select IWMMXT
+
++config MACH_ARMCORE
++ bool "CompuLab CM-X270 modules"
++ select PXA27x
++ select IWMMXT
++
+ config ARCH_PXA_IDP
+ bool "Accelent Xscale IDP"
+ select PXA25x
+@@ -50,6 +55,17 @@ endchoice
+
+ endif
+
++if MACH_ARMCORE
++choice
++ prompt "Select CM-X270 revision"
++ config ARMCORE_REV12
++ bool "CM-X270 revision 1.2"
++ config ARMCORE_REV11
++ bool "CM-X270 revision 1.1"
++endchoice
++
++endif
++
+ endmenu
+
+ config MACH_POODLE
+diff --git a/arch/arm/mach-pxa/Makefile b/arch/arm/mach-pxa/Makefile
+index 32526a0..d78d061 100644
+--- a/arch/arm/mach-pxa/Makefile
++++ b/arch/arm/mach-pxa/Makefile
+@@ -16,12 +16,14 @@ obj-$(CONFIG_PXA_SHARP_Cxx00) += spitz.o
+ obj-$(CONFIG_MACH_AKITA) += akita-ioexp.o
+ obj-$(CONFIG_MACH_POODLE) += poodle.o
+ obj-$(CONFIG_MACH_TOSA) += tosa.o
++obj-$(CONFIG_MACH_ARMCORE) += cm-x270.o
+
+ # Support for blinky lights
+ led-y := leds.o
+ led-$(CONFIG_ARCH_LUBBOCK) += leds-lubbock.o
+ led-$(CONFIG_MACH_MAINSTONE) += leds-mainstone.o
+ led-$(CONFIG_ARCH_PXA_IDP) += leds-idp.o
++led-$(CONFIG_MACH_ARMCORE) += leds-cm-x270.o
+
+ obj-$(CONFIG_LEDS) += $(led-y)
+
+@@ -32,3 +34,10 @@ obj-$(CONFIG_PXA_SSP) += ssp.o
+ ifeq ($(CONFIG_PXA27x),y)
+ obj-$(CONFIG_PM) += standby.o
+ endif
++
++# PCI support on CM-X270
++obj-$(CONFIG_PCI_HOST_ITE8152) += it8152.o
++
++ifeq ($(CONFIG_PCI),y)
++obj-$(CONFIG_MACH_ARMCORE) += cm-x270-pci.o
++endif
+diff --git a/arch/arm/mach-pxa/cm-x270-pci.c b/arch/arm/mach-pxa/cm-x270-pci.c
+new file mode 100644
+index 0000000..73243d3
+--- /dev/null
++++ b/arch/arm/mach-pxa/cm-x270-pci.c
+@@ -0,0 +1,152 @@
++/*
++ * arch/arm/kernel/cm-x270-pci.c
++ *
++ * PCI bios-type initialisation for PCI machines
++ *
++ * Bits taken from various places.
++ *
++ * Copyright (C) 2006 Compulab, Ltd.
++ *
++ * 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/kernel.h>
++#include <linux/pci.h>
++#include <linux/init.h>
++#include <linux/device.h>
++#include <linux/platform_device.h>
++
++#include <asm/irq.h>
++#include <asm/mach/pci.h>
++#include <asm/arch/cm-x270.h>
++#include <asm/mach-types.h>
++
++#include <asm/hardware/it8152.h>
++
++unsigned long armcore_pcibios_min_mem = 0x10000000;
++unsigned long armcore_pcibios_min_io = CMX270_IT8152_VIRT + 0x03e00000 + 0x120000;
++unsigned long it8152_base_address = CMX270_IT8152_VIRT;
++
++/* these symbols needed for CardBus driver (yenta_socket) */
++EXPORT_SYMBOL(armcore_pcibios_min_io);
++EXPORT_SYMBOL(armcore_pcibios_min_mem);
++
++static u8 __init cmx270_pci_swizzle(struct pci_dev *dev, u8 *pin)
++{
++ return PCI_SLOT(dev->devfn);
++}
++
++/* Platform specific IRQ mapping */
++static int __init cmx270_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
++{
++ if((dev->vendor==0x1283) && (dev->device==0x8152) &&
++ ((dev->class >> 8)==0x801)) return(CDMA_INT);
++ if((dev->vendor==0x1283) && (dev->device==0x0801) &&
++ ((dev->class >> 8)==0x401)) return(AUDIO_INT);
++ if((dev->vendor==0x1283) && (dev->device==0x8152) &&
++ ((dev->class >> 8)==0xc03)) return(USB_INT);
++
++ /* ATXBASE PCI slot */
++ if ( slot == 7 )
++ return(PCI_INTA);
++
++ /* ATXBASE/SB-X270 CardBus */
++ if ( (slot == 8) || (slot == 0) )
++ return(PCI_INTB);
++
++ /* ATXBASE ETH */
++ if ( slot == 9 )
++ return(PCI_INTA);
++
++ /* ARMCore onboard ETH */
++ if ( slot == 15 )
++ return(PCI_INTC);
++
++ /* ARMBase ETH */
++ if ( slot == 16 )
++ return(PCI_INTA);
++
++ /* PC104+ interrupt routing */
++ if ( (slot == 17) || (slot == 19) )
++ return(PCI_INTA);
++ if ( (slot == 18) || (slot == 20) )
++ return(PCI_INTB);
++
++ return(0);
++}
++
++extern int it8152_pci_setup(int nr, struct pci_sys_data *sys);
++extern struct pci_bus * it8152_pci_scan_bus(int nr, struct pci_sys_data *sys);
++
++static struct pci_bus* __init cmx270_pci_scan_bus(int nr, struct pci_sys_data *sys)
++{
++ IT8152_PCI_CFG_ADDR = 0x800;
++ if(IT8152_PCI_CFG_DATA == 0x81521283) {
++ printk("PCI Bridge found.\n");
++
++ IT8152_GPIO_GPLR=0x20;
++
++/*********** CardBus Controller on ATXBASE configuration ********/
++ IT8152_PCI_CFG_ADDR = 0x4000;
++ if(IT8152_PCI_CFG_DATA == 0xAC51104C) {
++ unsigned int temp;
++ printk("CardBus Bridge found.\n");
++
++ // Configure socket 0
++ IT8152_PCI_CFG_ADDR = 0x408C;
++ IT8152_PCI_CFG_DATA = 0x1022;
++
++ IT8152_PCI_CFG_ADDR = 0x4080;
++ IT8152_PCI_CFG_DATA = 0x3844d060;
++
++ IT8152_PCI_CFG_ADDR = 0x4090;
++ temp = IT8152_PCI_CFG_DATA;
++ temp = temp & 0xFFFF;
++ temp = temp | (0x60440000);
++ IT8152_PCI_CFG_ADDR = 0x4090;
++ IT8152_PCI_CFG_DATA = temp;
++
++ IT8152_PCI_CFG_ADDR = 0x4018;
++ IT8152_PCI_CFG_DATA = 0xb0000000;
++
++ // Configure socket 1
++ IT8152_PCI_CFG_ADDR = 0x418C;
++ IT8152_PCI_CFG_DATA = 0x1022;
++
++ IT8152_PCI_CFG_ADDR = 0x4180;
++ IT8152_PCI_CFG_DATA = 0x3844d060;
++
++ IT8152_PCI_CFG_ADDR = 0x4190;
++ temp = IT8152_PCI_CFG_DATA;
++ temp = temp & 0xFFFF;
++ temp = temp | (0x60440000);
++ IT8152_PCI_CFG_ADDR = 0x4190;
++ IT8152_PCI_CFG_DATA = temp;
++
++ IT8152_PCI_CFG_ADDR = 0x4118;
++ IT8152_PCI_CFG_DATA = 0xb0000000;
++ }
++/*********** End of CardBus controller configuration **************/
++ }
++ return it8152_pci_scan_bus(nr, sys);
++}
++
++static struct hw_pci cmx270_pci __initdata = {
++ .swizzle = cmx270_pci_swizzle,
++ .map_irq = cmx270_pci_map_irq,
++ .nr_controllers = 1,
++ .setup = it8152_pci_setup,
++ .scan = cmx270_pci_scan_bus,
++};
++
++static int __init cmx270_init_pci(void)
++{
++ if (machine_is_armcore()) {
++ pci_common_init(&cmx270_pci);
++ }
++ return 0;
++}
++
++subsys_initcall(cmx270_init_pci);
+diff --git a/arch/arm/mach-pxa/cm-x270.c b/arch/arm/mach-pxa/cm-x270.c
+new file mode 100644
+index 0000000..b006a8f
+--- /dev/null
++++ b/arch/arm/mach-pxa/cm-x270.c
+@@ -0,0 +1,975 @@
++/*
++ * linux/arch/arm/mach-pxa/cm-x270.c
++ *
++ * Copyright (C) 2006 CompuLab, Ltd.
++ *
++ * 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/pm.h>
++#include <linux/fb.h>
++#include <linux/platform_device.h>
++#include <linux/sysdev.h>
++#include <linux/dm9000.h>
++#include <linux/serial_8250.h>
++
++#include <asm/types.h>
++#include <asm/setup.h>
++#include <asm/memory.h>
++#include <asm/mach-types.h>
++#include <asm/hardware.h>
++#include <asm/irq.h>
++#include <asm/io.h>
++#include <asm/delay.h>
++
++#include <asm/mach/arch.h>
++#include <asm/mach/map.h>
++#include <asm/mach/irq.h>
++
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/irq.h>
++#include <asm/arch/pxafb.h>
++#include <asm/arch/marathonfb.h>
++#include <asm/arch/ohci.h>
++#include <asm/arch/mmc.h>
++#include <asm/arch/pxafbsetup.h>
++#include <asm/arch/bitfield.h>
++#include <asm/arch/cm-x270.h>
++
++#include <asm/hardware/it8152.h>
++
++#include "generic.h"
++
++#define RTC_PHYS_BASE (PXA_CS1_PHYS + (5 << 22))
++#define DM9000_PHYS_BASE (PXA_CS1_PHYS + (6 << 22))
++
++static struct resource cmx270_dm9k_resource[] = {
++ [0] = {
++ .start = DM9000_PHYS_BASE,
++ .end = DM9000_PHYS_BASE + 4,
++ .flags = IORESOURCE_MEM,
++ },
++ [1] = {
++ .start = DM9000_PHYS_BASE + 8,
++ .end = DM9000_PHYS_BASE + 8 + 500,
++ .flags = IORESOURCE_MEM,
++ },
++ [2] = {
++ .start = CMX270_ETHIRQ,
++ .end = CMX270_ETHIRQ,
++ .flags = IORESOURCE_IRQ,
++ }
++};
++
++/* for the moment we limit ourselves to 32bit IO until some
++ * better IO routines can be written and tested
++ */
++static struct dm9000_plat_data cmx270_dm9k_platdata = {
++ .flags = DM9000_PLATF_32BITONLY,
++};
++
++/* Ethernet device */
++static struct platform_device cmx270_device_dm9k = {
++ .name = "dm9000",
++ .id = 0,
++ .num_resources = ARRAY_SIZE(cmx270_dm9k_resource),
++ .resource = cmx270_dm9k_resource,
++ .dev = {
++ .platform_data = &cmx270_dm9k_platdata,
++ }
++};
++
++/* audio device */
++static struct platform_device cmx270_audio_device = {
++ .name = "pxa2xx-ac97",
++ .id = -1,
++};
++
++/* touchscreen controller */
++static struct platform_device cmx270_ts_device = {
++ .name = "ucb1x00",
++ .id = -1,
++};
++
++/* RTC */
++static struct resource cmx270_v3020_resource[] = {
++ [0] = {
++ .start = RTC_PHYS_BASE,
++ .end = RTC_PHYS_BASE + 4,
++ .flags = IORESOURCE_MEM,
++ },
++};
++
++static struct platform_device cmx270_rtc_device = {
++ .name = "emv3020-rtc",
++ .num_resources = ARRAY_SIZE(cmx270_v3020_resource),
++ .resource = cmx270_v3020_resource,
++ .id = -1,
++};
++
++/* UART on the ITE8152 chip */
++#ifdef CONFIG_PCI
++static struct plat_serial8250_port ite_uart_port[] = {
++ {
++ .irq = IRQ_ITESER, /* interrupt number */
++ .uartclk = 115200 * 16, /* UART clock rate */
++ .iotype = UPIO_MEM, /* UPIO_* */
++ .flags = UPF_BOOT_AUTOCONF,
++ },
++ {}
++};
++
++static struct platform_device iteuart_device = {
++ .name = "serial8250",
++ .id = PLAT8250_DEV_PLATFORM,
++ .dev = {
++ .platform_data = ite_uart_port,
++ },
++};
++#endif
++
++/* 2700G graphics */
++static u64 fb_dma_mask = ~(u64)0;
++
++static struct resource cmx270_2700G_resource[] = {
++ /* frame buffer memory including ODFB and External SDRAM */
++ [0] = {
++ .start = MARATHON_PHYS,
++ .end = MARATHON_PHYS + 0x02000000,
++ .flags = IORESOURCE_MEM,
++ },
++ /* Marathon registers */
++ [1] = {
++ .start = MARATHON_PHYS + 0x03fe0000,
++ .end = MARATHON_PHYS + 0x03ffffff,
++ .flags = IORESOURCE_MEM,
++ },
++};
++
++static unsigned long save_lcd_regs[10];
++
++#define LB_TROTTLE_OFF (PXA_CS1_PHYS | (1 << 25))
++#define LB_TROTTLE_MAX (PXA_CS1_PHYS | (1 << 25) | (1 << 22))
++static int cmx270_marathon_probe(struct fb_info *fb)
++{
++ volatile unsigned long *cpld;
++
++ cpld = (volatile unsigned long*)ioremap(LB_TROTTLE_OFF, 4);
++
++ if ( !cpld ) {
++ return -ENODEV;
++ }
++ *cpld = 0;
++ iounmap((void*)cpld);
++
++
++ /* save PXA-270 pin settings before enabling 2700G */
++ save_lcd_regs[0] = GPDR1;
++ save_lcd_regs[1] = GPDR2;
++ save_lcd_regs[2] = GAFR1_U;
++ save_lcd_regs[3] = GAFR2_L;
++ save_lcd_regs[4] = GAFR2_U;
++
++ /* Disable PXA-270 on-chip controller driving pins */
++ GPDR1 &= ~(0xfc000000);
++ GPDR2 &= ~(0x00c03fff);
++ GAFR1_U &= ~(0xfff00000);
++ GAFR2_L &= ~(0x0fffffff);
++ GAFR2_U &= ~(0x0000f000);
++ return 0;
++}
++
++static int cmx270_marathon_remove(struct fb_info *fb)
++{
++ volatile unsigned long *cpld;
++
++ cpld = (volatile unsigned long*)ioremap(LB_TROTTLE_MAX, 4);
++
++ if ( !cpld ) {
++ return -ENODEV;
++ }
++ *cpld = 0;
++ iounmap((void*)cpld);
++
++ GPDR1 = save_lcd_regs[0];
++ GPDR2 = save_lcd_regs[1];
++ GAFR1_U = save_lcd_regs[2];
++ GAFR2_L = save_lcd_regs[3];
++ GAFR2_U = save_lcd_regs[4];
++ return 0;
++}
++
++static struct mbxfb_platform_data cmx270_2700G_data = {
++ .xres = {
++ .min = 240,
++ .max = 1200,
++ .defval = 640,
++ },
++ .yres = {
++ .min = 240,
++ .max = 1200,
++ .defval = 480,
++ },
++ .bpp = {
++ .min = 16,
++ .max = 32,
++ .defval = 16,
++ },
++ .memsize = 8*1024*1024,
++ .probe = cmx270_marathon_probe,
++ .remove = cmx270_marathon_remove,
++};
++
++static struct platform_device cmx270_2700G = {
++ .name = "mbx-fb",
++ .dev = {
++ .platform_data = &cmx270_2700G_data,
++ .dma_mask = &fb_dma_mask,
++ .coherent_dma_mask = 0xffffffff,
++ },
++ .num_resources = ARRAY_SIZE(cmx270_2700G_resource),
++ .resource = cmx270_2700G_resource,
++ .id = -1,
++};
++
++/* platform devices */
++static struct platform_device *platform_devices[] __initdata = {
++ &cmx270_device_dm9k,
++ &cmx270_audio_device,
++ &cmx270_ts_device,
++ &cmx270_rtc_device,
++ &cmx270_2700G,
++#ifdef CONFIG_PCI
++ &iteuart_device,
++#endif
++};
++
++#ifdef CONFIG_PCI
++/*
++ * Install handler for IT8152 IRQ. Yes, yes... we are way down the IRQ
++ * cascade which is not good for IRQ latency, but the hardware has been
++ * designed that way...
++ */
++static inline void cmx270_irq(int irq, struct pt_regs *regs)
++{
++ struct irqdesc *desc;
++ desc = irq_desc + irq;
++ desc->handle(irq, desc, regs);
++}
++
++static void cmx270_irq_demux(unsigned int irq, struct irqdesc *desc,
++ struct pt_regs *regs)
++{
++ unsigned long pdcnimr, ldcnimr;
++ int pdcnirr, ldcnir;
++
++ /* clear our parent irq */
++ GEDR(GPIO_IT8152_IRQ) = GPIO_bit(GPIO_IT8152_IRQ);
++
++ /* read pending IRQs in the chip registers and clear them */
++ pdcnirr = IT8152_INTC_PDCNIRR;
++ ldcnir = IT8152_INTC_LDCNIRR;
++ IT8152_INTC_PDCNIRR = ~pdcnirr;
++ IT8152_INTC_LDCNIRR = ~ldcnir;
++
++ /* mask ITE irqs */
++ pdcnimr = IT8152_INTC_PDCNIMR;
++ ldcnimr = IT8152_INTC_LDCNIMR;
++ IT8152_INTC_PDCNIMR = 0xffff;
++ IT8152_INTC_LDCNIMR = 0xffff;
++
++ pdcnirr &= (PCISERR_BIT | H2PTADR_BIT | H2PMAR_BIT |
++ PCI_INTD_BIT | PCI_INTC_BIT | PCI_INTB_BIT | PCI_INTA_BIT |
++ USB_INT_BIT | CDMA_INT_BIT);
++
++ ldcnir &= ITESER_BIT;
++
++ IT8152_INTC_PDCNIRR = ~pdcnirr;
++ IT8152_INTC_LDCNIRR = ~ldcnir;
++
++ /* are there interrupts pending ? */
++ if( (pdcnirr | ldcnir) ) {
++ if (pdcnirr) {
++ if( pdcnirr & PCISERR_BIT )
++ cmx270_irq(PCISERR, regs);
++ if( pdcnirr & H2PTADR_BIT )
++ cmx270_irq(H2PTADR, regs);
++ if( pdcnirr & H2PMAR_BIT )
++ cmx270_irq(H2PMAR, regs);
++ if( pdcnirr & PCI_INTA_BIT )
++ cmx270_irq(PCI_INTA, regs);
++ if( pdcnirr & PCI_INTB_BIT )
++ cmx270_irq(PCI_INTB, regs);
++ if( pdcnirr & PCI_INTC_BIT )
++ cmx270_irq(PCI_INTC, regs);
++ if( pdcnirr & PCI_INTD_BIT )
++ cmx270_irq(PCI_INTD, regs);
++ if( pdcnirr & USB_INT_BIT )
++ cmx270_irq(USB_INT, regs);
++ if( pdcnirr & CDMA_INT_BIT )
++ cmx270_irq(CDMA_INT, regs);
++ }
++ if(ldcnir) {
++ if( ldcnir & ITESER_BIT )
++ cmx270_irq(IRQ_ITESER, regs);
++ }
++ }
++
++ /* re-enable ITE interrupts */
++ IT8152_INTC_PDCNIMR = pdcnimr;
++ IT8152_INTC_LDCNIMR = ldcnimr;
++}
++#else
++unsigned long it8152_base_address = CMX270_IT8152_VIRT;
++#endif
++
++#define CMX270_FLASH_VIRT (CMX270_IDE104_VIRT + PXA_CS_SIZE - (8<<20))
++/* Map PCI companion and IDE/General Purpose CS statically */
++static struct map_desc cmx270_io_desc[] __initdata = {
++ [0] = { /* IDE/general purpose space */
++ .virtual = CMX270_IDE104_VIRT,
++ .pfn = __phys_to_pfn(CMX270_IDE104_PHYS),
++ .length = PXA_CS_SIZE - (8<<20),
++ .type = MT_DEVICE
++ },
++ [1] = { /* NOR flash */
++ .virtual = CMX270_FLASH_VIRT,
++ .pfn = __phys_to_pfn(PXA_CS0_PHYS),
++ .length = (8<<20), /* up to 8 MByte flash */
++ .type = MT_DEVICE
++ },
++ [2] = { /* PCI bridge */
++ .virtual = CMX270_IT8152_VIRT,
++ .pfn = __phys_to_pfn(CMX270_IT8152_PHYS),
++ .length = PXA_CS_SIZE,
++ .type = MT_DEVICE
++ },
++};
++
++/*********************** Display definitions ****************************/
++static int mtype=MTYPE_CRT640x480;
++static int mbpp=-1;
++
++struct cmx270_display_info {
++ struct pxafb_mach_info fb_info;
++ char *display_name;
++};
++
++static struct __initdata cmx270_display_info cmx270_displays[] = {
++ [ MTYPE_STN320x240 ] = {
++ .fb_info = {
++ .pixclock = 76923,
++ .bpp = 8,
++ .xres = 320,
++ .yres = 240,
++ .hsync_len = 3,
++ .vsync_len = 2,
++ .left_margin = 3,
++ .upper_margin = 0,
++ .right_margin = 3,
++ .lower_margin = 0,
++ .sync = (FB_SYNC_HOR_HIGH_ACT |
++ FB_SYNC_VERT_HIGH_ACT),
++ .lccr0 = 0,
++ .lccr3 = (LCCR3_PixClkDiv(0x03) |
++ LCCR3_Acb(0xff) |
++ LCCR3_PCP),
++ .cmap_greyscale = 0,
++ .cmap_inverse = 0,
++ .cmap_static = 0,
++ },
++ .display_name = "STN 320x240",
++ },
++ [ MTYPE_TFT640x480 ] = {
++ .fb_info = {
++ .pixclock = 38461,
++ .bpp = 8,
++ .xres = 640,
++ .yres = 480,
++ .hsync_len = 60,
++ .vsync_len = 2,
++ .left_margin = 70,
++ .upper_margin = 10,
++ .right_margin = 70,
++ .lower_margin = 5,
++ .sync = 0,
++ .lccr0 = (LCCR0_PAS),
++ .lccr3 = (LCCR3_PixClkDiv(0x01) |
++ LCCR3_Acb(0xff) |
++ LCCR3_PCP),
++ .cmap_greyscale = 0,
++ .cmap_inverse = 0,
++ .cmap_static = 0,
++ },
++ .display_name = "TFT 640x480",
++ },
++ [ MTYPE_CRT640x480 ] = {
++ .fb_info = {
++ .pixclock = 38461,
++ .bpp = 8,
++ .xres = 640,
++ .yres = 480,
++ .hsync_len = 63,
++ .vsync_len = 2,
++ .left_margin = 81,
++ .upper_margin = 33,
++ .right_margin = 16,
++ .lower_margin = 10,
++ .sync = (FB_SYNC_HOR_HIGH_ACT |
++ FB_SYNC_VERT_HIGH_ACT),
++ .lccr0 = (LCCR0_PAS),
++ .lccr3 = (LCCR3_PixClkDiv(0x01) |
++ LCCR3_Acb(0xff)),
++ .cmap_greyscale = 0,
++ .cmap_inverse = 0,
++ .cmap_static = 0,
++ },
++ .display_name = "CRT 640x480",
++ },
++ [ MTYPE_CRT800x600 ] = {
++ .fb_info = {
++ .pixclock = 28846,
++ .bpp = 8,
++ .xres = 800,
++ .yres = 600,
++ .hsync_len = 63,
++ .vsync_len = 2,
++ .left_margin = 26,
++ .upper_margin = 21,
++ .right_margin = 26,
++ .lower_margin = 11,
++ .sync = (FB_SYNC_HOR_HIGH_ACT |
++ FB_SYNC_VERT_HIGH_ACT),
++ .lccr0 = (LCCR0_PAS),
++ .lccr3 = (LCCR3_PixClkDiv(0x02) |
++ LCCR3_Acb(0xff)),
++ .cmap_greyscale = 0,
++ .cmap_inverse = 0,
++ .cmap_static = 0,
++ },
++ .display_name = "CRT 800x600",
++ },
++ [ MTYPE_CRT1024x768 ] = {
++ .fb_info = {
++ .pixclock = 0,
++ .xres = 0,
++ .yres = 0,
++ },
++ .display_name = "CRT 1024x768",
++ },
++ [ MTYPE_USER_DEFINED ] = {
++ .fb_info = {
++ .pixclock = LCD_PIXCLOCK,
++ .bpp = LCD_BPP,
++ .xres = LCD_XRES,
++ .yres = LCD_YRES,
++ .hsync_len = LCD_HORIZONTAL_SYNC_PULSE_WIDTH,
++ .vsync_len = LCD_VERTICAL_SYNC_PULSE_WIDTH,
++ .left_margin = LCD_BEGIN_OF_LINE_WAIT_COUNT,
++ .upper_margin = LCD_BEGIN_FRAME_WAIT_COUNT,
++ .right_margin = LCD_END_OF_LINE_WAIT_COUNT,
++ .lower_margin = LCD_END_OF_FRAME_WAIT_COUNT,
++ .sync = LCD_SYNC,
++ .lccr0 = LCD_LCCR0,
++ .lccr3 = LCD_LCCR3,
++ .cmap_greyscale = CMAP_GREYSCALE,
++ .cmap_inverse = CMAP_INVERSE,
++ .cmap_static = CMAP_STATIC,
++ },
++ .display_name = LCD_NAME,
++ },
++ [ MTYPE_TFT320x240 ] = {
++ .fb_info = {
++ .pixclock = 134615,
++ .bpp = 16,
++ .xres = 320,
++ .yres = 240,
++ .hsync_len = 63,
++ .vsync_len = 7,
++ .left_margin = 75,
++ .upper_margin = 0,
++ .right_margin = 15,
++ .lower_margin = 15,
++ .sync = 0,
++ .lccr0 = (LCCR0_PAS),
++ .lccr3 = (LCCR3_PixClkDiv(0x06) |
++ LCCR3_Acb(0xff) |
++ LCCR3_PCP),
++ .cmap_greyscale = 0,
++ .cmap_inverse = 0,
++ .cmap_static = 0,
++ },
++ .display_name = "TFT 320x240",
++ },
++ [ MTYPE_STN640x480 ] = {
++ .fb_info = {
++ .pixclock = 57692,
++ .bpp = 8,
++ .xres = 640,
++ .yres = 480,
++ .hsync_len = 4,
++ .vsync_len = 2,
++ .left_margin = 10,
++ .upper_margin = 5,
++ .right_margin = 10,
++ .lower_margin = 5,
++ .sync = (FB_SYNC_HOR_HIGH_ACT |
++ FB_SYNC_VERT_HIGH_ACT),
++ .lccr0 = 0,
++ .lccr3 = (LCCR3_PixClkDiv(0x02) |
++ LCCR3_Acb(0xff)),
++ .cmap_greyscale = 0,
++ .cmap_inverse = 0,
++ .cmap_static = 0,
++ },
++ .display_name = "STN 640x480",
++ },
++};
++
++static int __init monitor_params(char *str)
++{
++ mtype = simple_strtol(str, NULL, 0);
++ return 1;
++}
++
++__setup("monitor=", monitor_params);
++
++static int __init fb_bpp(char *str)
++{
++ mbpp = simple_strtol(str, NULL, 0);
++ return 1;
++}
++
++__setup("bpp=", fb_bpp);
++
++/* PXA27x OHCI controller setup */
++static int cmx270_ohci_init(struct device *dev)
++{
++ /* Set the Power Control Polarity Low */
++ UHCHR = (UHCHR | UHCHR_PCPL) &
++ ~(UHCHR_SSEP1 | UHCHR_SSEP2 | UHCHR_SSE);
++
++ return 0;
++}
++
++static struct pxaohci_platform_data cmx270_ohci_platform_data = {
++ .port_mode = PMM_PERPORT_MODE,
++ .init = cmx270_ohci_init,
++};
++
++
++static int cmx270_mci_init(struct device *dev, irqreturn_t (*mstone_detect_int)(int, void *, struct pt_regs *), void *data)
++{
++ int err;
++
++ /*
++ * setup GPIO for PXA27x MMC controller
++ */
++ pxa_gpio_mode(GPIO32_MMCCLK_MD);
++ pxa_gpio_mode(GPIO112_MMCCMD_MD);
++ pxa_gpio_mode(GPIO92_MMCDAT0_MD);
++ pxa_gpio_mode(GPIO109_MMCDAT1_MD);
++ pxa_gpio_mode(GPIO110_MMCDAT2_MD);
++ pxa_gpio_mode(GPIO111_MMCDAT3_MD);
++
++ /* SB-X270 uses GPIO105 as SD power enable */
++ pxa_gpio_mode(105 | GPIO_OUT);
++
++ /* card detect IRQ on GPIO 83 */
++ pxa_gpio_mode(IRQ_TO_GPIO(CMX270_MMC_IRQ));
++ set_irq_type(CMX270_MMC_IRQ, IRQT_FALLING);
++
++ err = request_irq(CMX270_MMC_IRQ, mstone_detect_int, SA_INTERRUPT,
++ "MMC card detect", data);
++ if (err) {
++ printk(KERN_ERR "cmx270_mci_init: MMC/SD: can't request MMC card detect IRQ\n");
++ return -1;
++ }
++
++ return 0;
++}
++
++static void cmx270_mci_setpower(struct device *dev, unsigned int vdd)
++{
++ struct pxamci_platform_data* p_d = dev->platform_data;
++
++ if (( 1 << vdd) & p_d->ocr_mask) {
++ printk(KERN_DEBUG "%s: on\n", __FUNCTION__);
++ GPCR(105) = GPIO_bit(105);
++ } else {
++ GPSR(105) = GPIO_bit(105);
++ printk(KERN_DEBUG "%s: off\n", __FUNCTION__);
++ }
++}
++
++static void cmx270_mci_exit(struct device *dev, void *data)
++{
++ free_irq(CMX270_MMC_IRQ, data);
++}
++
++static struct pxamci_platform_data cmx270_mci_platform_data = {
++ .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34,
++ .init = cmx270_mci_init,
++ .setpower = cmx270_mci_setpower,
++ .exit = cmx270_mci_exit,
++};
++
++
++#ifdef CONFIG_PM
++/* timeout for RTC wakeup */
++unsigned int cmx270_suspend_timeout;
++
++static ssize_t timeout_show(struct subsystem * subsys, char * buf)
++{
++ char * s = buf;
++
++ s += sprintf(s,"%d seconds\n", cmx270_suspend_timeout);
++ return (s - buf);
++}
++
++static ssize_t timeout_store(struct subsystem * subsys, const char * buf, size_t n)
++{
++ char *endp = 0;
++ int timeout;
++
++ timeout = simple_strtoul(buf, &endp, 10);
++ if ( *endp && *endp != '\n')
++ return -EINVAL;
++
++ cmx270_suspend_timeout = timeout;
++ return n;
++}
++
++static struct subsys_attribute timeout_attr = {
++ .attr = {
++ .name = __stringify(timeout),
++ .mode = 0644,
++ },
++ .show = timeout_show,
++ .store = timeout_store,
++};
++
++static struct attribute * g[] = {
++ &timeout_attr.attr,
++ NULL,
++};
++
++static struct attribute_group attr_group = {
++ .attrs = g,
++};
++
++extern struct subsystem power_subsys;
++static unsigned long sleep_save_ite[10];
++static unsigned long sleep_save_msc[10];
++
++static int cmx270_suspend(struct sys_device *dev, pm_message_t state)
++{
++#ifdef CONFIG_PCI
++ /* save ITE state */
++ sleep_save_ite[0] = IT8152_INTC_PDCNIMR;
++ sleep_save_ite[1] = IT8152_INTC_LPCNIMR;
++ sleep_save_ite[2] = IT8152_INTC_LPNIAR;
++
++ /* Clear ITE IRQ's */
++ IT8152_INTC_PDCNIRR = 0;
++ IT8152_INTC_LPCNIRR = 0;
++#endif
++
++ /* save MSC registers */
++ sleep_save_msc[0] = MSC0;
++ sleep_save_msc[1] = MSC1;
++ sleep_save_msc[2] = MSC2;
++
++ /* setup power saving mode registers */
++ PCFR = 0x0;
++ PSLR = 0xff400000;
++ PMCR = 0x00000005;
++ PWER = 0x80000000;
++ PFER = 0x00000000;
++ PRER = 0x00000000;
++ PGSR0 = 0xC0018800;
++ PGSR1 = 0x004F0002;
++ PGSR2 = 0x6021C000;
++ PGSR3 = 0x00020000;
++
++ if ( cmx270_suspend_timeout ) {
++ RTAR = RCNR + cmx270_suspend_timeout;
++ cmx270_suspend_timeout = 0;
++ }
++
++ return 0;
++}
++
++static int cmx270_resume(struct sys_device *dev)
++{
++#ifdef CONFIG_PCI
++ /* restore IT8152 state */
++ IT8152_INTC_PDCNIMR = sleep_save_ite[0];
++ IT8152_INTC_LPCNIMR = sleep_save_ite[1];
++ IT8152_INTC_LPNIAR = sleep_save_ite[2];
++#endif
++
++ /* restore MSC registers */
++ MSC0 = sleep_save_msc[0];
++ MSC1 = sleep_save_msc[1];
++ MSC2 = sleep_save_msc[2];
++
++ return 0;
++}
++
++static struct sysdev_class cmx270_pm_sysclass = {
++ set_kset_name("pm"),
++ .resume = cmx270_resume,
++ .suspend = cmx270_suspend,
++};
++
++static struct sys_device cmx270_pm_device = {
++ .cls = &cmx270_pm_sysclass,
++};
++
++static int __init cmx270_pm_init(void)
++{
++ int error;
++ error = sysdev_class_register(&cmx270_pm_sysclass);
++ if (error == 0)
++ error = sysdev_register(&cmx270_pm_device);
++
++ error = sysfs_create_group(&power_subsys.kset.kobj,&attr_group);
++ return error;
++}
++#else
++static int __init cmx270_pm_init(void) { return 0; }
++#endif
++
++/* SA1111 compatibiliy 8 bit read register needed for proper function
++ of ITE8152 UART */
++#define MEMC_SA1111 __REG(0x48000064)
++
++static void __init cmx270_init(void)
++{
++ /* set display timings for VGA 640x480 by default */
++ struct cmx270_display_info *tfbi = &cmx270_displays[2];
++
++ MEMC_SA1111 = 0x3c;
++
++ cmx270_pm_init();
++
++ if ( mtype >= 0 && mtype < ARRAY_SIZE(cmx270_displays) )
++ tfbi = &cmx270_displays[mtype];
++
++ /* use default instead of unsupported displays */
++ if ( tfbi->fb_info.pixclock == 0 &&
++ tfbi->fb_info.xres == 0 &&
++ tfbi->fb_info.yres == 0 ) {
++ printk(KERN_WARNING "CM-X270 does not support %s display\n", cmx270_displays[mtype].display_name);
++ tfbi = &cmx270_displays[2];
++ }
++
++ /* setup color depth */
++ if( mtype == MTYPE_USER_DEFINED ) {
++ mbpp = tfbi->fb_info.bpp;
++ }
++ if( mbpp > 0 ) {
++ if( (mbpp!=1) && (mbpp!=2) && (mbpp!=4) &&
++ (mbpp!=8) && (mbpp!=16)) {
++ printk(KERN_WARNING "Illegal BPP value "
++ "supplied, leaving default\n");
++ mbpp = 8;
++ }
++ }
++ else mbpp = 8;
++ tfbi->fb_info.bpp = mbpp;
++
++ printk(KERN_INFO "Running a %s display with %d bits per pixel\n",
++ tfbi->display_name, tfbi->fb_info.bpp);
++ set_pxa_fb_info(&tfbi->fb_info);
++
++#ifdef CONFIG_PCI
++ /* setup ITE8152 UART base addresses */
++ ite_uart_port[0].membase = (void *)&IT8152_UART_BASE;
++ ite_uart_port[0].mapbase = IT8152_UART_BASE;
++#endif
++
++ /* register CM-X270 platform devices */
++ platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices));
++
++ /* set MCI and OHCI platform parameters */
++ pxa_set_mci_info(&cmx270_mci_platform_data);
++ pxa_set_ohci_info(&cmx270_ohci_platform_data);
++
++ /* This enables the STUART */
++ pxa_gpio_mode(GPIO46_STRXD_MD);
++ pxa_gpio_mode(GPIO47_STTXD_MD);
++
++ /* This enables the BTUART */
++ pxa_gpio_mode(GPIO42_BTRXD_MD);
++ pxa_gpio_mode(GPIO43_BTTXD_MD);
++ pxa_gpio_mode(GPIO44_BTCTS_MD);
++ pxa_gpio_mode(GPIO45_BTRTS_MD);
++}
++
++int machine_is_cmx270l(void)
++{
++ int is_l = 0;
++ volatile unsigned char *flash =
++ (volatile unsigned char *)(CMX270_FLASH_VIRT + 0x3ffe8UL);
++ char rev[10];
++ int i;
++
++ memset(rev, 0, 10);
++ for ( i = 0; i < 8; i++ )
++ rev[i] = flash[i];
++ if ( (rev[6] - '0') > 1 )
++ is_l = 1;
++
++ printk(KERN_DEBUG "%s: revision read: %s, is_l = %d\n",
++ __FUNCTION__, rev, is_l);
++
++ return is_l;
++}
++
++#ifdef CONFIG_PCI
++static void cmx270_mask_irq(unsigned int irq)
++{
++ switch(irq) {
++ case IT8152_IRQ(0):
++ IT8152_INTC_PDCNIMR |= PCISERR_BIT;
++ break;
++ case IT8152_IRQ(1):
++ IT8152_INTC_PDCNIMR |= H2PTADR_BIT;
++ break;
++ case IT8152_IRQ(2):
++ IT8152_INTC_PDCNIMR |= H2PMAR_BIT;
++ break;
++ case IT8152_IRQ(3):
++ IT8152_INTC_PDCNIMR |= PCI_INTA_BIT;
++ break;
++ case IT8152_IRQ(4):
++ IT8152_INTC_PDCNIMR |= PCI_INTB_BIT;
++ break;
++ case IT8152_IRQ(5):
++ IT8152_INTC_PDCNIMR |= PCI_INTC_BIT;
++ break;
++ case IT8152_IRQ(6):
++ IT8152_INTC_PDCNIMR |= PCI_INTD_BIT;
++ break;
++ case IT8152_IRQ(7):
++ IT8152_INTC_PDCNIMR |= USB_INT_BIT;
++ break;
++ case IT8152_IRQ(9):
++ IT8152_INTC_PDCNIMR |= CDMA_INT_BIT;
++ break;
++ case IT8152_IRQ(10):
++ IT8152_INTC_LDCNIMR |= ITESER_BIT;
++ break;
++ }
++}
++
++static void cmx270_unmask_irq(unsigned int irq)
++{
++ switch(irq) {
++ case IT8152_IRQ(0):
++ IT8152_INTC_PDCNIMR &= (~PCISERR_BIT);
++ break;
++ case IT8152_IRQ(1):
++ IT8152_INTC_PDCNIMR &= (~H2PTADR_BIT);
++ break;
++ case IT8152_IRQ(2):
++ IT8152_INTC_PDCNIMR &= (~H2PMAR_BIT);
++ break;
++ case IT8152_IRQ(3):
++ IT8152_INTC_PDCNIMR &= (~PCI_INTA_BIT);
++ break;
++ case IT8152_IRQ(4):
++ IT8152_INTC_PDCNIMR &= (~PCI_INTB_BIT);
++ break;
++ case IT8152_IRQ(5):
++ IT8152_INTC_PDCNIMR &= (~PCI_INTC_BIT);
++ break;
++ case IT8152_IRQ(6):
++ IT8152_INTC_PDCNIMR &= (~PCI_INTD_BIT);
++ break;
++ case IT8152_IRQ(7):
++ IT8152_INTC_PDCNIMR &= (~USB_INT_BIT);
++ break;
++ case IT8152_IRQ(9):
++ IT8152_INTC_PDCNIMR &= (~CDMA_INT_BIT);
++ break;
++ case IT8152_IRQ(10):
++ IT8152_INTC_LDCNIMR &= (~ITESER_BIT);
++ break;
++ }
++}
++
++static struct irqchip cmx270_irq_chip = {
++ .ack = cmx270_mask_irq,
++ .mask = cmx270_mask_irq,
++ .unmask = cmx270_unmask_irq,
++};
++#endif
++
++static void __init cmx270_init_irq(void)
++{
++ int irq;
++
++ pxa_init_irq();
++
++ /* LED and NAND GPIOs should not be probed for IRQ */
++ irq_desc[IRQ_GPIO(11)].probe_ok = 0;
++ irq_desc[IRQ_GPIO(89)].probe_ok = 0;
++ irq_desc[IRQ_GPIO(93)].probe_ok = 0;
++ irq_desc[IRQ_GPIO(94)].probe_ok = 0;
++
++ IT8152_INTC_PDCNIMR = 0xffff;
++
++#ifdef CONFIG_PCI
++ /* Disable and clear IRQ's for ITE8152 */
++ IT8152_INTC_PDCNIMR = 0xffff;
++ IT8152_INTC_PDCNIRR = 0;
++ IT8152_INTC_LPCNIMR = 0xffff;
++ IT8152_INTC_LPCNIRR = 0;
++ IT8152_INTC_LDCNIMR = 0xffff;
++ IT8152_INTC_LDCNIRR = 0;
++
++ /* Set IT8152 serial port IRQ as active high*/
++ IT8152_INTC_LDNIAR |= ITESER_BIT;
++
++ for(irq = IT8152_IRQ(0); irq <= IT8152_IRQ_MAX; irq++) {
++ set_irq_chip(irq, &cmx270_irq_chip);
++ set_irq_handler(irq, do_level_IRQ);
++ set_irq_flags(irq, IRQF_VALID | IRQF_PROBE);
++ }
++
++ /* INTC signal from IT8152 is connected to GPIO0 */
++ pxa_gpio_mode(IRQ_GPIO_IT8152_IRQ);
++ set_irq_chained_handler(IRQ_GPIO_IT8152_IRQ, cmx270_irq_demux);
++ set_irq_type(IRQ_GPIO_IT8152_IRQ, IRQT_RISING);
++#endif
++
++ /* Setup interrupt for dm9000 */
++ pxa_gpio_mode(IRQ_TO_GPIO(CMX270_ETHIRQ));
++ set_irq_type(CMX270_ETHIRQ, IRQT_RISING);
++
++ /* Setup interrupt for 2700G */
++ pxa_gpio_mode(IRQ_TO_GPIO(CMX270_GFXIRQ));
++ set_irq_type(CMX270_GFXIRQ, IRQT_FALLING);
++}
++
++static void __init cmx270_map_io(void)
++{
++ pxa_map_io();
++ iotable_init(cmx270_io_desc, ARRAY_SIZE(cmx270_io_desc));
++}
++
++
++MACHINE_START(ARMCORE, "Compulab CM-x270")
++ .boot_params = 0xa0000100,
++ .phys_io = 0x40000000,
++ .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
++ .map_io = cmx270_map_io,
++ .init_irq = cmx270_init_irq,
++ .timer = &pxa_timer,
++ .init_machine = cmx270_init,
++MACHINE_END
+diff --git a/arch/arm/mach-pxa/it8152.c b/arch/arm/mach-pxa/it8152.c
+new file mode 100644
+index 0000000..91bb49c
+--- /dev/null
++++ b/arch/arm/mach-pxa/it8152.c
+@@ -0,0 +1,248 @@
++/*
++ * arch/arm/common/it8152.c: PCI functions for IT8152
++ *
++ * Compulab Ltd, 2002-2006
++ *
++ * The DMA bouncing is taken from arch/arm/mach-ixp4xx/common-pci.c
++ * (see this file for respective copyrights)
++ *
++ * 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/sched.h>
++#include <linux/kernel.h>
++#include <linux/pci.h>
++#include <linux/ptrace.h>
++#include <linux/interrupt.h>
++#include <linux/mm.h>
++#include <linux/slab.h>
++#include <linux/init.h>
++#include <linux/ioport.h>
++#include <asm/mach/map.h>
++
++
++#include <asm/io.h>
++#include <asm/irq.h>
++#include <asm/system.h>
++#include <asm/mach/pci.h>
++#include <asm/hardware/it8152.h>
++
++#define MAX_SLOTS 21
++
++static unsigned long
++it8152_pci_dev_base_address(struct pci_bus *bus, unsigned int devfn)
++{
++ unsigned long addr = 0;
++
++ if (bus->number == 0) {
++ if (devfn < PCI_DEVFN(MAX_SLOTS, 0))
++ addr = (devfn << 8);
++ } else
++ addr = (bus->number << 16) | (devfn << 8);
++
++ return addr;
++}
++
++static int
++it8152_pci_read_config(struct pci_bus *bus, unsigned int devfn, int where,
++ int size, u32 *value)
++{
++ unsigned long addr = it8152_pci_dev_base_address(bus, devfn);
++ u32 v;
++ int shift;
++
++#ifdef CONFIG_MACH_ARMCORE
++ if(devfn!=0) IT8152_GPIO_GPLR=0x00;
++#endif
++ shift = (where & 3);
++
++ IT8152_PCI_CFG_ADDR = (addr + where);
++ v = (IT8152_PCI_CFG_DATA >> (8 * (shift)));
++
++ *value = v;
++
++#ifdef CONFIG_MACH_ARMCORE
++ if(devfn!=0) IT8152_GPIO_GPLR=0x20;
++#endif
++
++ return PCIBIOS_SUCCESSFUL;
++}
++
++
++static int
++it8152_pci_write_config(struct pci_bus *bus, unsigned int devfn, int where,
++ int size, u32 value)
++{
++ unsigned long addr = it8152_pci_dev_base_address(bus, devfn);
++ u32 v, vtemp, mask=0;
++ int shift;
++
++#ifdef CONFIG_MACH_ARMCORE
++ if(devfn!=0) IT8152_GPIO_GPLR=0x00;
++#endif
++
++ if(size==1) mask=0xff;
++ if(size==2) mask=0xffff;
++
++ shift = (where & 3);
++
++ IT8152_PCI_CFG_ADDR = addr + where;
++ vtemp = IT8152_PCI_CFG_DATA;
++
++ if(mask) vtemp &= ~(mask << (8 * shift));
++ else vtemp = 0;
++
++ v = (value << (8 * shift));
++ IT8152_PCI_CFG_ADDR = addr + where;
++ IT8152_PCI_CFG_DATA = (v | vtemp);
++
++#ifdef CONFIG_MACH_ARMCORE
++ if(devfn!=0) IT8152_GPIO_GPLR=0x20;
++#endif
++
++ return PCIBIOS_SUCCESSFUL;
++}
++
++static struct pci_ops it8152_ops = {
++ .read = it8152_pci_read_config,
++ .write = it8152_pci_write_config,
++};
++
++static struct resource it8152_io = {
++ .name = "IT8152 PCI I/O region",
++ .flags = IORESOURCE_IO,
++};
++
++static struct resource it8152_mem1 = {
++ .name = "First IT8152 PCI memory region",
++ .start = 0x10000000,
++ .end = 0x13e00000,
++ .flags = IORESOURCE_MEM,
++};
++
++/*
++ * The following functions are needed for DMA bouncing.
++ * ITE8152 chip can addrees up to 64MByte, so all the devices
++ * connected to ITE8152 (PCI and USB) should have limited DMA window
++ */
++
++/*
++ * Setup DMA mask to 64MB on devices connected to ITE8152. Ignore all
++ * other devices.
++ */
++static int it8152_pci_platform_notify(struct device *dev)
++{
++ if ( dev->bus == &pci_bus_type ) {
++ if ( dev->dma_mask )
++ *dev->dma_mask = SZ_64M - 1;
++ dev->coherent_dma_mask = SZ_64M - 1;
++ dmabounce_register_dev(dev, 2048, 4096);
++ }
++ return 0;
++}
++
++static int it8152_pci_platform_notify_remove(struct device *dev)
++{
++ if ( dev->bus == &pci_bus_type ) {
++ dmabounce_unregister_dev(dev);
++ }
++ return 0;
++}
++
++int dma_needs_bounce(struct device *dev, dma_addr_t dma_addr, size_t size)
++{
++ dev_dbg(dev, "%s: dma_addr %08x, size %08x\n",
++ __FUNCTION__, dma_addr, size);
++ return (dev->bus == &pci_bus_type ) &&
++ ((dma_addr + size - PHYS_OFFSET) >= SZ_64M);
++}
++
++/*
++ * Only first 64MB of memory can be accessed via PCI.
++ * We use GFP_DMA to allocate safe buffers to do map/unmap.
++ * This is really ugly and we need a better way of specifying
++ * DMA-capable regions of memory.
++ */
++void __init it8152_adjust_zones(int node, unsigned long *zone_size,
++ unsigned long *zhole_size)
++{
++ unsigned int sz = SZ_64M >> PAGE_SHIFT;
++
++ /*
++ * Only adjust if > 64M on current system
++ */
++ if (node || (zone_size[0] <= sz))
++ return;
++
++ zone_size[1] = zone_size[0] - sz;
++ zone_size[0] = sz;
++ zhole_size[1] = zhole_size[0];
++ zhole_size[0] = 0;
++}
++
++/*
++ * We override these so we properly do dmabounce otherwise drivers
++ * are able to set the dma_mask to 0xffffffff and we can no longer
++ * trap bounces. :(
++ *
++ * We just return true on everyhing except for < 64MB in which case
++ * we will fail miseralby and die since we can't handle that case.
++ */
++int
++pci_set_dma_mask(struct pci_dev *dev, u64 mask)
++{
++ if (mask >= SZ_64M - 1 )
++ return 0;
++
++ return -EIO;
++}
++
++int
++pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask)
++{
++ if (mask >= SZ_64M - 1 )
++ return 0;
++
++ return -EIO;
++}
++
++EXPORT_SYMBOL(pci_set_dma_mask);
++EXPORT_SYMBOL(pci_set_consistent_dma_mask);
++
++
++int __init it8152_pci_setup(int nr, struct pci_sys_data *sys)
++{
++ it8152_io.start = IT8152_IO_BASE + 0x12000;
++ it8152_io.end = IT8152_IO_BASE + 0x100000;
++
++ if (request_resource(&ioport_resource, &it8152_io)) {
++ printk(KERN_ERR "PCI: unable to allocate IO region\n");
++ return -EBUSY;
++ }
++ if (request_resource(&iomem_resource, &it8152_mem1)) {
++ printk(KERN_ERR "PCI: unable to allocate memory region\n");
++ return -EBUSY;
++ }
++
++ sys->resource[0] = &it8152_io;
++ sys->resource[1] = &it8152_mem1;
++
++ if (platform_notify || platform_notify_remove) {
++ printk(KERN_ERR "PCI: Can't use platform_notify\n");
++ return -EBUSY;
++ }
++
++ platform_notify = it8152_pci_platform_notify;
++ platform_notify_remove = it8152_pci_platform_notify_remove;
++
++ return 1;
++}
++
++
++struct pci_bus * __init it8152_pci_scan_bus(int nr, struct pci_sys_data *sys)
++{
++ return pci_scan_bus(nr, &it8152_ops, sys);
++}
++
+diff --git a/arch/arm/mach-pxa/leds-cm-x270.c b/arch/arm/mach-pxa/leds-cm-x270.c
+new file mode 100644
+index 0000000..5402b69
+--- /dev/null
++++ b/arch/arm/mach-pxa/leds-cm-x270.c
+@@ -0,0 +1,134 @@
++/*
++ * linux/arch/arm/mach-pxa/leds-cm-x270.c
++ *
++ * Compulab Ltd., 2003
++ *
++ * Original (leds-footbridge.c) by Russell King
++ *
++ * Macros for actual LED manipulation should be in machine specific
++ * files in this 'mach' directory.
++ */
++
++
++#include <linux/config.h>
++#include <linux/types.h>
++#include <linux/init.h>
++
++#include <asm/hardware.h>
++#include <asm/leds.h>
++#include <asm/system.h>
++
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/cm-x270.h>
++
++#include "leds.h"
++
++#define LED_STATE_ENABLED 1
++#define LED_STATE_CLAIMED 2
++
++#define RED_LED_ON 1
++#define GREEN_LED_ON 2
++
++static unsigned int led_state;
++static unsigned int hw_led_state;
++
++void armcore_leds_event(led_event_t evt)
++{
++ unsigned long flags;
++
++ local_irq_save(flags);
++
++ switch (evt) {
++ case led_start:
++ hw_led_state = GREEN_LED_ON | RED_LED_ON;
++ led_state = LED_STATE_ENABLED;
++ break;
++
++ case led_stop:
++ led_state &= ~LED_STATE_ENABLED;
++ break;
++
++ case led_claim:
++ led_state |= LED_STATE_CLAIMED;
++ hw_led_state = GREEN_LED_ON | RED_LED_ON;
++ break;
++
++ case led_release:
++ led_state &= ~LED_STATE_CLAIMED;
++ hw_led_state = GREEN_LED_ON | RED_LED_ON;
++ break;
++
++#ifdef CONFIG_LEDS_TIMER
++ case led_timer:
++ if (!(led_state & LED_STATE_CLAIMED))
++ hw_led_state ^= GREEN_LED_ON;
++ break;
++#endif
++
++#ifdef CONFIG_LEDS_CPU
++ case led_idle_start:
++ if (!(led_state & LED_STATE_CLAIMED))
++ hw_led_state &= ~RED_LED_ON;
++ break;
++
++ case led_idle_end:
++ if (!(led_state & LED_STATE_CLAIMED))
++ hw_led_state |= RED_LED_ON;
++ break;
++#endif
++
++ case led_halted:
++ break;
++
++ case led_green_on:
++ if (led_state & LED_STATE_CLAIMED)
++ hw_led_state &= ~GREEN_LED_ON;
++ break;
++
++ case led_green_off:
++ if (led_state & LED_STATE_CLAIMED)
++ hw_led_state |= GREEN_LED_ON;
++ break;
++
++ case led_amber_on:
++ break;
++
++ case led_amber_off:
++ break;
++
++ case led_red_on:
++ if (led_state & LED_STATE_CLAIMED)
++ hw_led_state &= ~RED_LED_ON;
++ break;
++
++ case led_red_off:
++ if (led_state & LED_STATE_CLAIMED)
++ hw_led_state |= RED_LED_ON;
++ break;
++
++ default:
++ break;
++ }
++
++ if (led_state & LED_STATE_ENABLED)
++ {
++ if(hw_led_state & RED_LED_ON) {
++ CMX270_RED_ON();
++// printk("Red on\n");
++ }
++ else {
++// printk("Red off\n");
++ CMX270_RED_OFF();
++ }
++ if(hw_led_state & GREEN_LED_ON) {
++// printk("Green on\n");
++ CMX270_GREEN_ON();
++ }
++ else {
++// printk("Green off\n");
++ CMX270_GREEN_OFF();
++ }
++ }
++
++ local_irq_restore(flags);
++}
+diff --git a/arch/arm/mach-pxa/leds.c b/arch/arm/mach-pxa/leds.c
+index bbe4d5f..a27d027 100644
+--- a/arch/arm/mach-pxa/leds.c
++++ b/arch/arm/mach-pxa/leds.c
+@@ -24,6 +24,8 @@ pxa_leds_init(void)
+ leds_event = mainstone_leds_event;
+ if (machine_is_pxa_idp())
+ leds_event = idp_leds_event;
++ if (machine_is_armcore())
++ leds_event = armcore_leds_event;
+
+ leds_event(led_start);
+ return 0;
+diff --git a/arch/arm/mach-pxa/leds.h b/arch/arm/mach-pxa/leds.h
+index d98f6e9..0dcc346 100644
+--- a/arch/arm/mach-pxa/leds.h
++++ b/arch/arm/mach-pxa/leds.h
+@@ -10,3 +10,4 @@
+ extern void idp_leds_event(led_event_t evt);
+ extern void lubbock_leds_event(led_event_t evt);
+ extern void mainstone_leds_event(led_event_t evt);
++extern void armcore_leds_event(led_event_t evt);
+diff --git a/arch/arm/mach-pxa/pxa27x.c b/arch/arm/mach-pxa/pxa27x.c
+index 3baa708..823c32d 100644
+--- a/arch/arm/mach-pxa/pxa27x.c
++++ b/arch/arm/mach-pxa/pxa27x.c
+@@ -140,10 +140,12 @@ void pxa_cpu_pm_enter(suspend_state_t st
+ extern void pxa_cpu_suspend(unsigned int);
+ extern void pxa_cpu_resume(void);
+
++#ifndef CONFIG_MACH_ARMCORE
+ if (state == PM_SUSPEND_STANDBY)
+ CKEN = CKEN22_MEMC | CKEN9_OSTIMER | CKEN16_LCD |CKEN0_PWM0;
+ else
+ CKEN = CKEN22_MEMC | CKEN9_OSTIMER;
++#endif
+
+ /* ensure voltage-change sequencer not initiated, which hangs */
+ PCFR &= ~PCFR_FVC;
+@@ -158,7 +160,11 @@ void pxa_cpu_pm_enter(suspend_state_t st
+ case PM_SUSPEND_MEM:
+ /* set resume return address */
+ PSPR = virt_to_phys(pxa_cpu_resume);
++#ifdef CONFIG_MACH_ARMCORE
++ pxa_cpu_suspend(PWRMODE_DEEPSLEEP);
++#else
+ pxa_cpu_suspend(PWRMODE_SLEEP);
++#endif
+ break;
+ }
+ }
+diff --git a/drivers/block/Kconfig b/drivers/block/Kconfig
+index 8b13316..8ffaad0 100644
+--- a/drivers/block/Kconfig
++++ b/drivers/block/Kconfig
+@@ -453,4 +453,9 @@ config ATA_OVER_ETH
+ This driver provides Support for ATA over Ethernet block
+ devices like the Coraid EtherDrive (R) Storage Blade.
+
++config ARMCORE_FLASH
++ tristate "ARMCORE flash drivers"
++ depends on MACH_ARMCORE
++ source "drivers/block/cl_flash/Kconfig"
++
+ endmenu
+diff --git a/drivers/block/Makefile b/drivers/block/Makefile
+index 3ec1f8d..ebeb4c6 100644
+--- a/drivers/block/Makefile
++++ b/drivers/block/Makefile
+@@ -31,3 +31,4 @@ obj-$(CONFIG_VIODASD) += viodasd.o
+ obj-$(CONFIG_BLK_DEV_SX8) += sx8.o
+ obj-$(CONFIG_BLK_DEV_UB) += ub.o
+
++obj-$(CONFIG_ARMCORE_FLASH) += cl_flash/
+diff --git a/drivers/block/cl_flash/CL_Logic.h b/drivers/block/cl_flash/CL_Logic.h
+new file mode 100644
+index 0000000..fe3e8d7
+--- /dev/null
++++ b/drivers/block/cl_flash/CL_Logic.h
+@@ -0,0 +1,245 @@
++/* Module: CL_Logic.h
++ Author: Vova Lifliand
++ Description: Controls Nand flash management logic
++ Notes:
++*/
++
++#ifndef __CL_LOGIC__
++#define __CL_LOGIC__
++/*#define CL_NAND_BIG_DELAYS*/
++#if defined(FLASH_PLATFORM_LINUX) || defined(FLASH_PLATFORM_ARMonitor)
++/* Structure packaging */
++ #define PACKAGE __attribute__ ((packed,aligned(1)))
++ #define CL_ST static
++#else
++ #define PACKAGE
++ #define CL_ST
++#endif
++ #define FAR
++ #define far
++/* NOR Flash management constants */
++#define CL_NOR_FLASH_PAGE_SIZE 512 /* bytes */
++
++#ifdef FLASH_PLATFORM_DOS
++ #define cl_error_log(x,...){}
++#endif /* MS-DOS */
++/* Nand Flash management constants */
++
++/* Page size must not be changed because this value is also used for
++ page size of Nand flash */
++/*#define CL_FLASH_PAGE_SIZE 512 // bytes */
++#define CL_FLASH_MAXIMUM_PAGE_SIZE 2048/* bytes */
++#define CL_FLASH_MINIMAL_SECTOR_SIZE 512 /* Sectors can't be less than 512 bytes */
++/*#define CL_FLASH_SPARE_AREA_SIZE 16 // bytes */
++/*#define CL_FLASH_MAXIMUM_SPARE_AREA_SIZE 128 bytes - twice the needed for biggest
++ flash today 2004/05 */
++#define CL_FLASH_MAXIMUM_SPARE_AREA_SIZE 128 /*Stingy with space...*/
++
++/* Maximum blocks number in flash - adjust according to maximum flash size */
++#define CL_MAX_BLKS_NUMBER 8192 /* good for 128MB flash */
++ /* Good up to 512 MB flash, if 64kb is the smallest block */
++/* Number of pages in Nand flash block */
++/* #define CL_FLASH_PAGES_PER_NAND_BLK 32 */
++/* Maximum Number of pages in Nand flash block */
++#define CL_FLASH_MAXIMUM_PAGES_PER_NAND_BLK 128 /* 32 */ /* Can't be more than 255
++ to fit in unsigned char arrays*/
++/* Number of pages to make free */
++#define CL_FLASH_FREE_PAGE_PER_BLK 1
++/* Usable pages per 16 KB Nand flash block */
++/*#define CL_FLASH_USE_PAGE_PER_BLK (CL_FLASH_PAGES_PER_NAND_BLK - CL_FLASH_FREE_PAGE_PER_BLK)*/
++#define CL_FLASH_USE_PAGE_PER_BLK (flogic->nand->pages_per_block - CL_FLASH_FREE_PAGE_PER_BLK)
++/* Number of logical to physical page translation tables stored in memory
++ Each table size is ~40 bytes */
++#define CL_LTF_PAGE_TBLS 30
++/* Always leave a number of blocks unused - just for sure */
++#define CL_EXTRA_SPARE_BLKS 10
++/* Define maximum number of different blocks with cached pages */
++#define CL_MAX_CACHED_BLKS 4
++/* Number of erases per one launching of anti wearing procedure */
++#define CL_ERASE_PER_ANTI_WEARING 1000
++
++
++#define CLBYTEPTR unsigned char far*
++
++
++/* Flash mapping and accessing interface */
++typedef struct PACKAGE cl_nand_map_if_t
++{
++ /* Destroy function must free all allocated resources (such as virtual memory) */
++ void (*init) (void);
++ void (*destroy) (void);
++ /* Chip select operation. When on = 1: chip select, on = 0: disable chip select */
++ /* need_auto_operation - Whe the ON is false, the pin is expected to pulse in accordance
++ with bus transactions. This function exists on x86, but not on ARM */
++ void (*chip_select) (int on, int need_auto_operation);
++ /* Reading from flash (HW read access, not actual data reading) */
++ unsigned char (*readb) (unsigned char offset);
++ /* Writing to flash (HW write access, not actual data writing) */
++ void (*writeb) (unsigned char offset, unsigned char data);
++ /* Reads block from flash: reads data from address 0 while incrementing data pointer */
++ void (*blockread) (CLBYTEPTR data, int count);
++ /* Writes block to flash: writes data to address 0 while incrementing data pointer */
++ void (*blockwrite) ( CLBYTEPTR data, int count);
++ /* Turns on/off activity indication leds */
++ void (*activity_leds) (short operation, short reclaim);
++ /* Performs specified delay (parameter in microsecond units) */
++ int (*sleep) (unsigned long microseconds);
++ /* Wait for completion using R/B line */
++ /* Use microseconds, if R/B line not implemented */
++ int (*rbwait) (unsigned long microseconds);
++} cl_nand_map_if;
++
++
++/* Internal flash logic structure */
++typedef struct cl_logic_t far*cl_logic;
++
++
++/* Parameter retrive enum */
++typedef enum
++{
++ CL_FLASH_TOTAL_SIZE, /* Total size of the flash in bytes */
++ CL_FLASH_HEADS_NUM, /* Number of heads */
++ CL_FLASH_SECTOR_SIZE = 512, /* Sector size (in bytes) =512 - is legacy for ARMonitor only*/
++ CL_FLASH_SECTORS_NUM, /* Number of sectors per tracks */
++ CL_FLASH_CYLINDERS_NUM, /* Number of cylinders */
++ CL_FLASH_PAGE_SIZE, /* Size of the page without spare area */
++ CL_FLASH_READ_PAGE_CNT, /* Read page operations count */
++ CL_FLASH_WRITE_PAGE_CNT, /* Write page operations count */
++ CL_FLASH_RECLAIM_CNT, /* Reclaim block count */
++ CL_FLASH_BURSTS_NUM, /* Bursts of length 'var' numbers */
++ CL_FLASH_ERASE_CNT, /* Erase cnt of block specified by 'var' */
++ CL_FLASH_BAD_BLOCK_CNT,
++} PACKAGE cl_logic_param;
++
++/* Direct access type enum */
++typedef enum
++{
++ CL_FLASH_READ_PAGE,
++ CL_FLASH_READ_SPARE_AREA,
++ CL_FLASH_READ_BLK_SPARES, /* All spare areas of specified block */
++ CL_FLASH_WRITE_PAGE,
++ CL_FLASH_WRITE_SPARE_AREA,
++ CL_FLASH_ERASE_BLOCK /* Data ignored */
++} PACKAGE cl_nand_direct_access_type;
++
++/* memory access type enum */
++typedef enum //Memory areas usage is dscribed in separate document.
++{
++ CL_FLOGIC = 0,
++ CL_NAND,
++ CL_CACHE,
++ CL_CACHE_ORDERED_ARRAY,
++ CL_SP_AREA,
++ CL_SP_AREA_2,
++ CL_SP_AREA_3,
++ CL_PAGE,
++ CL_CACHE_REF
++} PACKAGE cl_memory_region_name;
++
++#define NUMBER_OF_MEMORY_REGIONS 9
++
++
++typedef enum
++{
++ CL_FIRST_ALLOCATION_STAGE,
++ CL_SECOND_ALLOCATION_STAGE
++}PACKAGE cl_memory_allocation_stages;
++
++typedef struct cl_memory_pointer_type
++{
++ void far* pMemory;
++ char IN_USE;
++} PACKAGE cl_memory_pointer;
++
++void far* cl_memory_request (cl_memory_region_name mem_name);
++
++void cl_memory_return (cl_memory_region_name mem_name);
++
++/* Creates flash logic object and attaches it to specified HW nand flash.
++ cache_size is max. number of pages, the cache can hold.
++ The flash is formatted prior initialization if format != 0.
++ When formatting reseved blocks and bad are not erased. */
++cl_logic cl_logic_create (cl_nand_map_if* nand_if, long cache_size, int format, unsigned short sector_size);
++
++/* Removes flash logic object and frees all allocated resources. */
++void cl_logic_free (cl_logic flogic);
++
++/* Parameters retrival function. */
++long cl_logic_get_param (cl_logic flogic, cl_logic_param prm, long var);
++
++/* Read page command. */
++int cl_logic_read_page (cl_logic flogic, long fs_sectn,
++ CLBYTEPTR sector_data);
++
++/* Write page command. */
++int cl_logic_write_page (cl_logic flogic, long fs_pagen,
++ CLBYTEPTR page_data);
++
++/* Flushes too old cache. If force_one_flush is TRUE, at least one
++ cached block is flushed. */
++void cl_logic_on_idle (cl_logic flogic, int force_one_flush);
++
++/* Flushes all cached data to disk. */
++void cl_logic_sync (cl_logic flogic);
++
++/* Direct accessing commands */
++int cl_logic_direct_access (cl_logic flogic, cl_nand_direct_access_type type,
++ unsigned short block, unsigned char page, CLBYTEPTR data);
++
++
++/* NOR Flash Disk Driver */
++
++/* The header describes block information */
++typedef struct
++{
++ unsigned short Signature; /* 0x1998 for initialized blocks */
++ unsigned short State;
++ unsigned short EraseCounter;
++ unsigned short PageIndex[128];
++ unsigned short Unused[10];
++ unsigned short BlockReserved; /* 0xFFFF - usable block, 0 - reserved block */
++} PACKAGE cl_nor_block_header;
++
++/* Abstract class for flash access */
++typedef struct
++{
++ /* Constructor */
++ void (*Constructor)(void);
++ /* Destructor */
++ void (*Destructor)(void);
++ /* Define flash access functions */
++ /* Returns usable size */
++ unsigned long (*GetSize)(void);
++ /* Remaps or unmaps MMS windows, allocated by flash */
++ void (*EnableFlashMap)(int EnableFlag);
++ /* Returns number of usable pages, 512 bytes each. */
++ /* Doesn't include first page that is used for header - signature, state . . . */
++ int (*GetPagesPerBlock)(void);
++ /* Header */
++ int (*ReadHeader)(unsigned short BlockN, cl_nor_block_header* Header);
++ /* The PageNum == 0 is first data page and not the header. Max. value of PageNum */
++ /* is GetBlockSize() / BytesPerPage - 1 (min. is 0) */
++ int (*ReadPage)(unsigned short BlockN, unsigned char PageNum, CLBYTEPTR DestBuff);
++ int (*SetBlockState) (unsigned short BlockN, unsigned short Signature,
++ unsigned short State, unsigned short Reserved);
++ /* Sets logical page index to zero - invalidates page. PageN is like in WritePage */
++ int (*InvalidatePage)(unsigned short BlockN, unsigned char PageN);
++ /* BlockN and PageN - destination location, where PageN doesn't include header */
++ /* information (PageN = 0 means first logical page and it's seconds physical page). */
++ /* PageIndex is physical page number for further identification (by ReadHeader) */
++ int (*WritePage)(unsigned short BlockN, unsigned char PageN,
++ const CLBYTEPTR PageData, unsigned short PageIndex);
++ int (*EraseBlock)(unsigned short BlockN);
++} PACKAGE cl_nor_flash_access;
++
++/* Define flash access functions */
++int cl_nor_init_flash (void);
++int cl_nor_free_mem (void);
++int cl_nor_format_flash (int (*ProgressCallback)(int Percentage));
++int cl_nor_write_page (int PageIndex, CLBYTEPTR Data);
++int cl_nor_read_page (int PageIndex, CLBYTEPTR Data);
++int cl_nor_get_disk_param (unsigned long* TotalPage, unsigned long* BytesPerPage,
++ unsigned long* Cylinders, unsigned long* PagesPerTrk,
++ unsigned long* Heads);
++#endif /* __CL_LOGIC__ */
++
+diff --git a/drivers/block/cl_flash/Kconfig b/drivers/block/cl_flash/Kconfig
+new file mode 100644
+index 0000000..60aa80d
+--- /dev/null
++++ b/drivers/block/cl_flash/Kconfig
+@@ -0,0 +1,11 @@
++#
++# Block device driver configuration
++#
++
++config ARMCORE_NOR
++ bool "CompuLab NOR flash driver"
++ depends on ARMCORE_FLASH
++config ARMCORE_NAND
++ bool "CompuLab NAND flash driver"
++ depends on ARMCORE_FLASH
++
+diff --git a/drivers/block/cl_flash/Makefile b/drivers/block/cl_flash/Makefile
+new file mode 100644
+index 0000000..538cb2c
+--- /dev/null
++++ b/drivers/block/cl_flash/Makefile
+@@ -0,0 +1,12 @@
++#
++# Makefile for Compulab flash disk driver
++#
++
++EXTRA_CFLAGS += -DTARGET_ARM_CORE -DFLASH_PLATFORM_LINUX
++
++obj-$(CONFIG_ARMCORE_FLASH) += fdrv.o
++
++fdrv-y += cl_nordev.o cl_blkdev.o CL_FlashDrv
++
++
++fdrv-$(CONFIG_MACH_ARMCORE) += cl_nanddev_x270.o
+diff --git a/drivers/block/cl_flash/cl_blkdev.c b/drivers/block/cl_flash/cl_blkdev.c
+new file mode 100644
+index 0000000..adb030d
+--- /dev/null
++++ b/drivers/block/cl_flash/cl_blkdev.c
+@@ -0,0 +1,731 @@
++/*
++ * Flash Disk Driver for Linux.
++ * Generic block device and genric disk implementation
++ *
++ * Copyright Compulab 2003-2006 (c).
++ */
++
++#include <linux/timer.h>
++#include <linux/hdreg.h>
++#include <linux/devfs_fs_kernel.h>
++#include <linux/blkdev.h>
++#include <linux/blkpg.h>
++#include <linux/ioctl.h>
++
++#include "CL_Logic.h"
++#include "cl_blkdev.h"
++
++/* I/O Controls */
++#define CL_FLASH_IOC_MAGIC 'f'
++#define CL_FLASH_IO_GET_PARAM _IOWR (CL_FLASH_IOC_MAGIC, 1, char[12])
++#define CL_FLASH_IO_DIRECT_ACCESS _IOWR (CL_FLASH_IOC_MAGIC, 2, char[524])
++
++#define FLUSH_INTERVAL 100
++
++struct cl_blkdev;
++
++struct flash_blkdev_ops {
++ /* timer for periodic flushes of NAND flash */
++ void (*flush_proc)(void* dev);
++
++ /* HW specific ioctl */
++ int (*flash_hw_ioctl)(struct cl_blkdev *dev, struct inode *inode,
++ struct file *file, unsigned int cmd,
++ unsigned long arg);
++
++ /* HW specific request handling */
++ int (*do_flash_hw_request)(struct cl_blkdev *dev, struct request *q);
++ /* HW specific cleanups */
++ int (*flash_hw_release)(struct cl_blkdev *dev, struct inode *inode,
++ struct file *file);
++};
++
++struct cl_blkdev_priv {
++ /* thread is dead indication */
++ struct completion thread_dead;
++ /* flag to notify the thread that we are done */
++ int exiting;
++ /* thread wait queue head for requests */
++ wait_queue_head_t thread_wq;
++ /* block device request queue */
++ struct request_queue *rq;
++ /* request queue lock */
++ spinlock_t queue_lock;
++};
++
++struct cl_blkdev {
++ struct cl_blkdev_priv *blkdev_priv;
++ struct gendisk *flash_disk;
++ struct flash_blkdev_ops *ops;
++ struct semaphore sem;
++ char name[32];
++
++ int major;
++ void *hw_private; /* Low level hook */
++
++#ifdef CONFIG_PROC_FS
++ /* proc entry */
++ struct proc_dir_entry *pde;
++#endif
++};
++
++#define FLASH_SECTOR 512
++
++/* declarations of cl_mem_set etc */
++#include "cl_common.c"
++
++
++/***************************************************************/
++/* Flash software write protect setup */
++/***************************************************************/
++unsigned long wpstart=0, wpend=0;
++
++static int __init wpstart_det(char *str) /*30-May-04, interrupts */
++{
++ wpstart = simple_strtol(str, NULL, 0);
++ return 1;
++}
++
++static int __init wpend_det(char *str) /*30-May-04, interrupts */
++{
++ wpend = simple_strtol(str, NULL, 0);
++ return 1;
++}
++
++__setup("wpstart=", wpstart_det);
++__setup("wpend=", wpend_det);
++
++
++/***************************************************************/
++/* generic block device interface */
++/***************************************************************/
++/* cl_blkdev_open: open a device */
++static int cl_blkdev_open(struct inode *inode, struct file *file)
++{
++ return 0;
++}
++
++static int cl_blkdev_check_media_change(struct gendisk* dev)
++{
++ return 0; /* Disk not changed */
++}
++
++static int cl_blkdev_revalidate(struct gendisk* dev)
++{
++ return 0;
++}
++
++/* cl_blkdev_release: release the device */
++static int cl_blkdev_release(struct inode *inode, struct file *file)
++{
++ struct cl_blkdev *dev;
++ dev = inode->i_bdev->bd_disk->private_data;
++
++ down (&dev->sem);
++ dev->ops->flash_hw_release(dev, inode, file);
++ up (&dev->sem);
++
++ return 0;
++}
++
++/*
++ cl_blkdev_ioctl: handle device ioctl's
++ common ioctls (if any) for NAND and NOR flash are handled here
++ then HW specific ioctl handler is invoked
++ */
++static int cl_blkdev_ioctl(struct inode *inode,
++ struct file *file, u_int cmd, u_long arg)
++{
++ struct cl_blkdev *dev;
++
++ if ((!inode) || !(inode->i_rdev))
++ return -EINVAL;
++
++ dev = inode->i_bdev->bd_disk->private_data;
++ return dev->ops->flash_hw_ioctl(dev, inode, file, cmd, arg);
++}
++
++static struct block_device_operations flash_fops =
++{
++ .owner = THIS_MODULE,
++ .open = cl_blkdev_open,
++ .release = cl_blkdev_release,
++ .ioctl = cl_blkdev_ioctl,
++ .media_changed = cl_blkdev_check_media_change,
++ .revalidate_disk = cl_blkdev_revalidate
++};
++
++static int cl_nand_request (struct cl_blkdev *_dev, struct request * req);
++
++/* wake up the flashdiskd thread to handle the request */
++static void do_cl_blkdev_request(struct request_queue *rq)
++{
++ struct cl_blkdev *dev = rq->queuedata;
++ wake_up(&dev->blkdev_priv->thread_wq);
++}
++
++void cl_blkdev_suspend(struct cl_blkdev* dev)
++{
++ dev->ops->flush_proc(dev);
++}
++
++/***************************************************************/
++/* flashdiskd thread is handling all transfer requests */
++/***************************************************************/
++static int cl_flashdisk_thread(void *arg)
++{
++ struct cl_blkdev *dev = (struct cl_blkdev*)arg;
++ struct request_queue *rq = dev->blkdev_priv->rq;
++ unsigned long flush_period = msecs_to_jiffies(FLUSH_INTERVAL);
++ unsigned long last_flush_jiffies = jiffies;
++
++ current->flags |= PF_MEMALLOC/* | PF_NOFREEZE */;
++ daemonize("%sd", "flashdisk");
++
++ while (!dev->blkdev_priv->exiting) {
++ struct request *req;
++ int res = 0;
++ DECLARE_WAITQUEUE(wait, current);
++
++ try_to_freeze();
++
++ spin_lock_irq(rq->queue_lock);
++ req = elv_next_request(rq);
++
++ if (!req) {
++ add_wait_queue(&dev->blkdev_priv->thread_wq, &wait);
++ set_current_state(TASK_INTERRUPTIBLE);
++
++ spin_unlock_irq(rq->queue_lock);
++
++ schedule();
++ remove_wait_queue(&dev->blkdev_priv->thread_wq, &wait);
++
++ continue;
++ }
++
++ dev = req->rq_disk->private_data;
++ spin_unlock_irq(rq->queue_lock);
++
++ down(&dev->sem);
++ res = dev->ops->do_flash_hw_request(dev, req);
++
++ if ( jiffies - last_flush_jiffies > flush_period ) {
++ if ( dev->ops->flush_proc )
++ dev->ops->flush_proc(dev);
++ last_flush_jiffies = jiffies;
++ }
++ up(&dev->sem);
++
++ spin_lock_irq(rq->queue_lock);
++ end_request(req, res);
++ spin_unlock_irq(rq->queue_lock);
++ }
++ complete_and_exit(&dev->blkdev_priv->thread_dead, 0);
++}
++
++/***************************************************************/
++/* block device initialization routines */
++/***************************************************************/
++
++/*
++ cl_blkdev_init:
++ - initialize and register generic block device,
++ - initialize timers for peroidic flushes
++ - initialize thread syncronization data
++ - start request processing thread
++
++ dev - preallocated device that should be initialized
++ ops - HW specific implementation of block device ioctl, do_request etc
++ name - device name
++*/
++int cl_blkdev_init(struct cl_blkdev *dev,
++ struct flash_blkdev_ops *ops, const char *name)
++{
++ int ret;
++
++ /* allocate the thread synchronization structure */
++ dev->blkdev_priv = kmalloc(sizeof(*dev->blkdev_priv), GFP_KERNEL);
++ if (!dev->blkdev_priv)
++ return -ENOMEM;
++ memset(dev->blkdev_priv, 0, sizeof(*dev->blkdev_priv));
++
++ dev->ops = ops;
++ dev->major = 0;
++ strcpy(dev->name, name);
++
++ /* register block device */
++ if ((dev->major = register_blkdev(dev->major, dev->name)) <= 0) {
++ printk("flash: Unable to get major number.\n");
++ return -ENODEV;
++ }
++ else
++ printk("Major number received: %d\n", dev->major);
++
++ /* initialize data for 'flashdiskd' thread */
++ spin_lock_init(&dev->blkdev_priv->queue_lock);
++ init_completion(&dev->blkdev_priv->thread_dead);
++ init_waitqueue_head(&dev->blkdev_priv->thread_wq);
++ init_MUTEX(&dev->sem);
++
++ /* initialize block device request queue */
++ dev->blkdev_priv->rq = blk_init_queue(do_cl_blkdev_request,
++ &dev->blkdev_priv->queue_lock);
++ if(!dev->blkdev_priv->rq) {
++ printk ("Could not initialize queue.\n");
++ unregister_blkdev(dev->major, dev->name);
++ kfree(dev->blkdev_priv);
++ return -ENOMEM;
++ }
++ dev->blkdev_priv->rq->queuedata = dev;
++ blk_queue_hardsect_size(dev->blkdev_priv->rq, FLASH_SECTOR);
++
++ /* start thread */
++ ret = kernel_thread(cl_flashdisk_thread, dev, CLONE_KERNEL);
++ if (ret < 0) {
++ blk_cleanup_queue(dev->blkdev_priv->rq);
++ unregister_blkdev(dev->major, dev->name);
++ kfree(dev->blkdev_priv);
++ printk(KERN_ERR "%s: kernel_thread returned %d\n", __FUNCTION__, ret);
++ return ret;
++ }
++
++ return 0;
++}
++
++/*
++ cl_blkdev_register_disk:
++ - allocate generic dik object
++ - setup the disk (major, minors, name, ops)
++ - register the disk
++
++ dev - block device enclosing the disk
++ name - disk name
++ size - size of the disk in sectors
++*/
++int cl_blkdev_register_disk(struct cl_blkdev *dev,
++ const char* name, sector_t size)
++{
++ /* allocate disk data structure */
++ dev->flash_disk = alloc_disk(16);
++ if (! dev->flash_disk)
++ return -ENOMEM;
++
++ /* initialize disk parameters */
++ dev->flash_disk->major = dev->major;
++ dev->flash_disk->first_minor = 0;
++ dev->flash_disk->fops = &flash_fops;
++ dev->flash_disk->private_data = dev;
++ dev->flash_disk->queue = dev->blkdev_priv->rq;
++
++ /* set /dev node names */
++ strcpy(dev->flash_disk->disk_name, name);
++ strcpy(dev->flash_disk->devfs_name, name);
++ set_capacity(dev->flash_disk, size);
++
++ /* Insert this disk into linked list of disks */
++ add_disk(dev->flash_disk);
++
++ return 0;
++}
++
++/*
++ cl_blkdev_unregister: unregister flash disk and associated block device
++*/
++void cl_blkdev_unregister(struct cl_blkdev *dev)
++{
++ dev->blkdev_priv->exiting = 1;
++ wake_up(&dev->blkdev_priv->thread_wq);
++ wait_for_completion(&dev->blkdev_priv->thread_dead);
++
++ del_gendisk(dev->flash_disk);
++ put_disk(dev->flash_disk);
++ blk_cleanup_queue(dev->blkdev_priv->rq);
++
++ unregister_blkdev(dev->major, dev->name);
++}
++
++/***************************************************************/
++/* NAND flash specific */
++/***************************************************************/
++int format = 0;
++MODULE_PARM(format, "i");
++
++#define CACHE_SIZE 128
++
++/* This buffer is used for cach allocation, when cash size is bigger
++ than 128kb. 300 KB is the approximate amount needed for cache of 128
++ pages, 2kb each. */
++#define BUFFER_SIZE (300 * 1024)
++#define MAXIMUM_ALLOCATABLE_MEMORY (128 * 1024)
++char tmp_buff[BUFFER_SIZE];
++
++/*
++ cl_nand_mem_alloc: allocates memory for driver cache
++*/
++void* cl_nand_mem_alloc (unsigned long size)
++{
++ static int buf_not_used = 1;
++ if ((size > MAXIMUM_ALLOCATABLE_MEMORY) &&
++ (size < BUFFER_SIZE) && buf_not_used) {
++ buf_not_used = 0;
++ return (void*)tmp_buff;
++ }
++ return kmalloc (size, GFP_KERNEL);
++}
++
++/*
++ cl_nand_mem_free: frees memory allocated for driver cache
++*/
++void cl_nand_mem_free (void* ptr)
++{
++ kfree (ptr);
++}
++
++/*
++ cl_nand_flush_proc: flushes driver caches to the device
++*/
++static void cl_nand_flush_proc (void* _dev)
++{
++ struct cl_blkdev *blkdev = (struct cl_blkdev*)_dev;
++ struct cl_nand_dev *dev = (struct cl_nand_dev*)blkdev->hw_private;
++
++ dev->logic_sync(dev->logic);
++ cl_trace_log ("Data synced\n");
++ dev->last_end_write_cmd = 0;
++}
++
++/*
++ cl_nand_request: handles an incoming IO request
++*/
++static int cl_nand_request (struct cl_blkdev *_dev, struct request * req)
++{
++ struct cl_blkdev *blkdev = (struct cl_blkdev*)_dev;
++ struct cl_nand_dev *dev = (struct cl_nand_dev*)blkdev->hw_private;
++
++ u_int block, count;
++ int code=1, i;
++
++ block = req->sector;
++ count = req->current_nr_sectors;
++
++ switch (rq_data_dir(req)) {
++ case 0: /* READ */
++ for (i = 0, code = 1; i < count; i++)
++ if (!dev->logic_read_page(
++ dev->logic, block + i,
++ (char*)req->buffer + i * 512)) {
++ cl_trace_log ("Reading failed.\n");
++ code = 0; /* failure */
++ break;
++ }
++ break;
++ case 1: /* WRITE */
++ for (i = 0, code = 1; i < count; i++) {
++ if(wpend) {
++ if (((block + i) >= wpstart) ||
++ ((block + i) <= wpend)) {
++ code=0;
++ break;
++ }
++ }
++ if (!dev->logic_write_page(
++ dev->logic, block + i,
++ (char*)req->buffer + i * 512)) {
++ cl_trace_log ("Writing failed.\n");
++ code = 0; /* failure */
++ break;
++ }
++ }
++ dev->last_end_write_cmd = jiffies;
++ break;
++ default:
++ printk("do_flash_request: unknown request\n");
++ break;
++ }
++
++ return code;
++}
++
++/*
++ cl_nand_ioctl: handles device ioctl's
++*/
++static int cl_nand_ioctl(struct cl_blkdev *_dev, struct inode *inode,
++ struct file *file,unsigned int cmd,unsigned long arg)
++{
++ struct cl_nand_dev *dev = (struct cl_nand_dev*)_dev->hw_private;
++
++ cl_trace_log ("flash_ioctl called.\n");
++ printk("fdrv.o ioctl\n");
++ if ((!inode) || !(inode->i_rdev))
++ return -EINVAL;
++
++ switch (cmd) {
++ case HDIO_GETGEO:
++ {
++ struct hd_geometry *geometry = (struct hd_geometry*)arg;
++ if (!geometry)
++ return -EINVAL; /* Bad arguments to ioctl */
++ put_user(dev->logic_get_param(dev->logic,
++ CL_FLASH_CYLINDERS_NUM,
++ 0),
++ &geometry->cylinders);
++ put_user(dev->logic_get_param(dev->logic,
++ CL_FLASH_HEADS_NUM, 0),
++ &geometry->heads);
++ put_user(dev->logic_get_param(dev->logic,
++ CL_FLASH_SECTORS_NUM, 0),
++ &geometry->sectors);
++ put_user(0, &geometry->start);
++ return 0;
++ }
++ case BLKGETSIZE:
++ if (!arg)
++ return -EINVAL;
++ return put_user(dev->logic_get_param(
++ dev->logic,
++ CL_FLASH_TOTAL_SIZE, 0) / 512,
++ (long *) arg);
++ case HDIO_SET_DMA:
++ /* We don't use DMA for flash.
++ This has no meaning */
++ if (!capable (CAP_SYS_ADMIN))
++ return -EACCES;
++ return 0;
++ case HDIO_GET_DMA:
++ return put_user( 0, (long *) arg); /* No DMA */
++ case HDIO_GET_MULTCOUNT:
++ /* We don't have a limitation of number of
++ sectors in op. */
++ return put_user (128, (long *) arg);
++ case BLKRRPART:
++ case BLKFLSBUF:
++ case BLKROSET:
++ case BLKROGET:
++ case BLKRASET:
++ case BLKRAGET:
++ case BLKPG:
++ case CL_FLASH_IO_GET_PARAM:
++ {
++ int err;
++ long* prm = (long*)arg;
++ err = access_ok(VERIFY_READ, prm,
++ sizeof(long) * 2) ? 0 : -EFAULT;
++ if (err)
++ return err;
++ err = access_ok(VERIFY_WRITE, prm,
++ sizeof (long)) ? 0 : -EFAULT;
++ if (err)
++ return err;
++ prm[0] = dev->logic_get_param(dev->logic,
++ prm[0], prm[1]);
++ return 0;
++ }
++
++ case CL_FLASH_IO_DIRECT_ACCESS:
++ {
++ int err;
++ printk("====> CL_FLASH_IO_DIRECT_ACCESS\n");
++ long* prm = (long*)arg;
++ err = access_ok(VERIFY_READ, prm,
++ sizeof(long) * 3) ? 0 : -EFAULT;
++ if(err) return err;
++ err = access_ok(VERIFY_WRITE, prm,
++ CL_FLASH_SECTOR_SIZE) ? 0 : -EFAULT;
++ if(err) return err;
++ return dev->logic_direct_access(
++ dev->logic,
++ (cl_nand_direct_access_type)prm[0],
++ (unsigned short)prm[1],
++ (unsigned short)prm[2],
++ (unsigned char*)(prm + 3));
++ }
++
++ default:
++ return -EINVAL;
++ }
++}
++
++/*
++ cl_nand_release: releases the device
++*/
++static int cl_nand_release (struct cl_blkdev *_dev,
++ struct inode *inode, struct file *file)
++{
++ struct cl_nand_dev *dev = (struct cl_nand_dev*)_dev->hw_private;
++
++ dev->logic_sync(dev->logic);
++ cl_trace_log ("Data synced after RELEASE command\n");
++ dev->last_end_write_cmd = 0;
++
++ return 0;
++}
++
++static struct flash_blkdev_ops nand_blkdev_ops = {
++ .flush_proc = cl_nand_flush_proc,
++ .flash_hw_ioctl = cl_nand_ioctl,
++ .do_flash_hw_request = cl_nand_request,
++ .flash_hw_release = cl_nand_release
++};
++
++#ifdef CONFIG_PROC_FS
++/***************************************************************/
++/* proc entry /proc/flashdisk implementation */
++/***************************************************************/
++#include <linux/proc_fs.h>
++#include <linux/seq_file.h>
++
++static void cl_nand_proc_show(struct seq_file *s, struct cl_blkdev *_dev)
++{
++ struct cl_nand_dev *dev = _dev->hw_private;
++
++ unsigned long heads, sects, tot_size, cylinders;
++ unsigned short sector_size, page_size;
++ long read_page_cnt, write_page_cnt, reclaim_cnt;
++
++ tot_size = dev->logic_get_param(dev->logic, CL_FLASH_TOTAL_SIZE, 0);
++ heads = dev->logic_get_param(dev->logic, CL_FLASH_HEADS_NUM, 0);
++ sects = dev->logic_get_param(dev->logic, CL_FLASH_SECTOR_SIZE, 0);
++ cylinders = dev->logic_get_param(dev->logic, CL_FLASH_CYLINDERS_NUM, 0);
++ sector_size = dev->logic_get_param(dev->logic, CL_FLASH_SECTOR_SIZE, 0);
++ page_size = dev->logic_get_param(dev->logic, CL_FLASH_PAGE_SIZE, 0);
++ read_page_cnt = dev->logic_get_param(dev->logic,
++ CL_FLASH_READ_PAGE_CNT, 0);
++ write_page_cnt = dev->logic_get_param(dev->logic,
++ CL_FLASH_WRITE_PAGE_CNT, 0);
++ reclaim_cnt = dev->logic_get_param(dev->logic, CL_FLASH_RECLAIM_CNT, 0);
++
++
++ seq_printf(s, "NAND flash disk:\n");
++ seq_printf(s, "\ttotal size: %lu Mbytes (%lu bytes)\n",
++ (tot_size >> 20), tot_size);
++ seq_printf(s, "\theads: %lu \tcylinders: %lu\tsectors: %lu\n", heads,
++ cylinders, sects);
++ seq_printf(s, "\tsector: %d\tpage: %d\n", sector_size, page_size);
++ seq_printf(s, "Stats:\n");
++ seq_printf(s, "\tread: %ld\twritten: %ld\treclaimed: %ld\n",
++ read_page_cnt, write_page_cnt, reclaim_cnt);
++}
++
++static int cl_blkdev_proc_show(struct seq_file *s, void *unused)
++{
++ struct cl_blkdev *dev = s->private;
++
++ seq_printf(s, "CompuLab flash disks:\n");
++ cl_nand_proc_show(s, dev);
++
++ return 0;
++}
++
++static int cl_blkdev_proc_open(struct inode *inode, struct file *file)
++{
++ return single_open(file, cl_blkdev_proc_show, PDE(inode)->data);
++}
++
++static struct file_operations proc_ops = {
++ .open = cl_blkdev_proc_open,
++ .read = seq_read,
++ .llseek = seq_lseek,
++ .release = single_release,
++};
++
++static const char proc_filename[] = "flashdisk";
++
++static void cl_blkdev_proc_create_file(struct cl_blkdev *dev)
++{
++ struct proc_dir_entry *pde;
++ pde = create_proc_entry(proc_filename, 0666, NULL);
++ if (pde == NULL)
++ return;
++
++ pde->proc_fops = &proc_ops;
++ pde->data = dev;
++ dev->pde = pde;
++}
++
++static void cl_blkdev_remove_proc_file(struct cl_blkdev *dev)
++{
++ if (dev->pde)
++ remove_proc_entry(proc_filename, NULL);
++}
++
++#else
++
++#define cl_blkdev_create_proc_file(x) do {} while(0)
++#define cl_blkdev_remove_proc_file(x) do {} while(0)
++
++#endif
++
++/*******************************************************************/
++/* NAND device initialization and cleanup */
++/*******************************************************************/
++/*
++ cl_nand_flash_init:
++ - initialize the CL_Logic
++ - register the block device and gendisk
++
++ dev - preallocated cl_nand_dev object
++ cl_nand_linux - HW interface
++*/
++int cl_nand_flash_init(struct cl_nand_dev *dev, cl_nand_map_if *cl_nand_linux)
++{
++ const char *name = "nand";
++ int ret = 0;
++ printk ("Nand Flash disk driver, CompuLab");
++
++ if( wpend )
++ printk("NAND Write Protection activated from %ld to %ld.\n",
++ wpstart, wpend);
++
++ if (format)
++ printk ("Formatting Nand flash . . .\n");
++ dev->logic = dev->logic_create(cl_nand_linux, CACHE_SIZE, format, FLASH_SECTOR);
++ if (!dev->logic) {
++ printk ("Flash logic couldn't be created.\n");
++ return -1;
++ }
++
++ dev->blkdev = kmalloc(sizeof(*dev->blkdev), GFP_KERNEL);
++ if ( !dev->blkdev ) {
++ return -ENOMEM;
++ }
++
++ dev->blkdev->hw_private = dev;
++ if ( (ret = cl_blkdev_init(dev->blkdev, &nand_blkdev_ops, name)) ) {
++ printk(KERN_ERR "%s: cl_blkdev initialization failed: %d\n",
++ __FUNCTION__, ret);
++ dev->logic_free(dev->logic);
++ return ret;
++ }
++
++ ret = cl_blkdev_register_disk(dev->blkdev, name,
++ dev->logic_get_param(dev->logic,
++ CL_FLASH_TOTAL_SIZE,
++ 0) / 512);
++ if ( ret ) {
++ printk(KERN_ERR "%s: NAND disk registration failed: %d\n",
++ __FUNCTION__, ret);
++ cl_blkdev_unregister(dev->blkdev);
++ dev->logic_free(dev->logic);
++ return ret;
++ }
++
++ cl_blkdev_proc_create_file(dev->blkdev);
++
++ return 0;
++}
++
++/*
++ cl_nand_flash_cleanup: performs cleanup when driver is no longer used
++*/
++void cl_nand_flash_cleanup(struct cl_nand_dev * dev)
++{
++ cl_blkdev_unregister(dev->blkdev);
++ if ( dev->logic )
++ dev->logic_free(dev->logic);
++
++ cl_blkdev_remove_proc_file(dev->blkdev);
++
++ if ( dev->blkdev )
++ kfree(dev->blkdev);
++}
+diff --git a/drivers/block/cl_flash/cl_blkdev.h b/drivers/block/cl_flash/cl_blkdev.h
+new file mode 100644
+index 0000000..bca1944
+--- /dev/null
++++ b/drivers/block/cl_flash/cl_blkdev.h
+@@ -0,0 +1,43 @@
++#ifndef __CL_BLKDEV_H__
++#define __CL_BLKDEV_H__
++
++struct cl_blkdev;
++
++struct cl_nand_dev {
++ struct cl_blkdev *blkdev;
++ cl_logic logic;
++ unsigned long last_end_write_cmd;
++
++ /* CL logic access layer */
++ cl_logic (*logic_create)(cl_nand_map_if*, long,
++ int, unsigned short);
++ void (*logic_free)(cl_logic);
++ long (*logic_get_param)(cl_logic, cl_logic_param, long);
++ int (*logic_read_page)(cl_logic, long, CLBYTEPTR);
++ int (*logic_write_page)(cl_logic, long, CLBYTEPTR);
++ void (*logic_on_idle)(cl_logic, int);
++ void (*logic_sync)(cl_logic);
++ int (*logic_direct_access)(cl_logic,cl_nand_direct_access_type,
++ unsigned short, unsigned char, CLBYTEPTR);
++};
++
++extern int cl_nand_flash_init(struct cl_nand_dev *dev, cl_nand_map_if *cl_nand_linux);
++extern void cl_nand_flash_cleanup(struct cl_nand_dev * dev);
++
++#define INIT_NAND_DEV(dev) \
++ do { \
++ dev->logic = 0; \
++ dev->blkdev = 0; \
++ dev->last_end_write_cmd = 0; \
++ dev->logic_create = cl_logic_create; \
++ dev->logic_free = cl_logic_free; \
++ dev->logic_get_param = cl_logic_get_param; \
++ dev->logic_read_page = cl_logic_read_page; \
++ dev->logic_write_page = cl_logic_write_page; \
++ dev->logic_on_idle = cl_logic_on_idle; \
++ dev->logic_sync = cl_logic_sync; \
++ dev->logic_direct_access = cl_logic_direct_access; \
++ } while(0)
++
++
++#endif /* __CL_BLKDEV_H__ */
+diff --git a/drivers/block/cl_flash/cl_common.c b/drivers/block/cl_flash/cl_common.c
+new file mode 100644
+index 0000000..a0d2a9c
+--- /dev/null
++++ b/drivers/block/cl_flash/cl_common.c
+@@ -0,0 +1,52 @@
++void cl_zero_mem (void* ptr, long size)
++{
++ memset (ptr, 0, size);
++}
++
++void cl_ff_mem (void* ptr, long size)
++{
++ memset (ptr, 0xff, size);
++}
++void cl_mem_copy (void* dest, void* src, long size)
++{
++ memcpy (dest, src, size);
++}
++
++int cl_mem_compare (void* mem1, void* mem2, long size)
++{
++ return memcmp (mem1, mem2, size);
++}
++
++unsigned long cl_get_jiffies (void)
++{
++ return jiffies;
++}
++
++unsigned long cl_nand_get_max_cache_time (void)
++{
++ return HZ * 30; /* 30 seconds in cache maximum */
++}
++
++void cl_trace_log ( char* format, ...)
++{
++#ifdef DO_CL_TRACE_LOG
++ char full_msg[300];
++ va_list marker;
++
++ va_start(marker, format);
++ vsprintf(full_msg, format, marker);
++ printk(full_msg);
++ va_end(marker);
++#endif
++}
++
++void cl_error_log ( char* format, ...)
++{
++ char full_msg[300];
++ va_list marker;
++
++ va_start(marker, format);
++ vsprintf(full_msg, format, marker);
++ printk(full_msg);
++ va_end(marker);
++}
+diff --git a/drivers/block/cl_flash/cl_nanddev_x270.c b/drivers/block/cl_flash/cl_nanddev_x270.c
+new file mode 100644
+index 0000000..71f05f8
+--- /dev/null
++++ b/drivers/block/cl_flash/cl_nanddev_x270.c
+@@ -0,0 +1,233 @@
++/*
++ * drivers/block/cl_flash/cl_nandded_x270.c
++ *
++ * Flash Disk Driver for CM-X270 platform.
++ * Low level device interface implementation
++ *
++ * Copyright Compulab 2003-2006 (c).
++ */
++
++#include <linux/sched.h>
++#include <linux/delay.h>
++#include <linux/platform_device.h>
++
++#include <asm/io.h>
++#include <asm/arch/hardware.h>
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/cm-x270.h>
++
++#include "CL_Logic.h"
++#include "cl_blkdev.h"
++
++/* The following macro enables flash activity indication by LEDs */
++#undef USE_LEDS
++
++#define NAND_RB (GPLR2 & (1<<25))
++
++#define NandCLE (1<<0)
++#define NandALE (1<<1)
++
++/*
++ * Values specific to the ARMCore
++ */
++volatile unsigned long * FLASH_DATA;
++volatile unsigned long * FLASH_DATA_ALE;
++volatile unsigned long * FLASH_DATA_CLE;
++
++/* asm-arm/arch-pxa/hardware.h defines UNCACHED_ADDR */
++volatile unsigned char * UNC = (volatile unsigned char *)UNCACHED_ADDR;
++
++/*******************************************************************/
++/* CM-X270 NAND HW access layer */
++/*******************************************************************/
++static inline void nand_cs_on(void)
++{
++ GPCR0 = 1<<11;
++ while( (GPLR0 & (1<<11)) );
++}
++
++static inline void nand_cs_off(void)
++{
++ unsigned char dummy;
++ asm volatile ("mcr p15, 0, r0, c7, c10, 4":::"r0");
++ dummy=*UNC;
++
++ GPSR0 = 1<<11;
++ while( !(GPLR0 & (1<<11)) );
++}
++
++static void FlashInitial(void)
++{
++}
++
++static void FlashChipSelect (int on, int need_auto_operation)
++{
++ static int cs_state = -1;
++
++ if (need_auto_operation)
++ on = 1;
++
++ if (cs_state == on)
++ return;
++
++ cs_state = on;
++
++ if (on) {
++ nand_cs_on();
++ }
++ else {
++ nand_cs_off();
++ }
++}
++
++static unsigned char FlashReadByte (unsigned char offset)
++{
++ return (unsigned char)(*FLASH_DATA >> 16);
++}
++
++static void FlashWriteByte (unsigned char offset, unsigned char data)
++{
++ if(offset & NandALE) *FLASH_DATA_ALE = (data << 16);
++ else if(offset & NandCLE) *FLASH_DATA_CLE = (data << 16);
++ else *FLASH_DATA = (data << 16);
++}
++
++static void FlashBlockRead (unsigned char* data, int count)
++{
++ while (count--)
++ *data++ = (unsigned char)(*FLASH_DATA >> 16);
++}
++
++static void FlashBlockWrite ( unsigned char* data, int count)
++{
++ while (count--)
++ *FLASH_DATA = (*data++ << 16);
++}
++
++/* Orange LED used by Linux kernel activity */
++static void FlashCoreLeds (short operation, short reclaim)
++{
++#ifdef USE_LEDS
++
++#endif
++}
++
++static void do_nothing (void)
++{
++}
++
++int nand_delay(unsigned long microseconds)
++{
++ if ( microseconds < 1000 ) {
++ udelay(microseconds);
++ return 0;
++ }
++ udelay(1000);
++ udelay(1000);
++ udelay(1000);
++ return 0;
++}
++
++/* Wait on Ready/Busy signal */
++static int RBWait(unsigned long microseconds)
++{
++ unsigned char dummy;
++ int i=0;
++
++ /* ensure there's no outstanding bus transaction */
++ asm volatile ("mcr p15, 0, r0, c7, c10, 4":::"r0");
++ dummy=*UNC;
++
++ /* protect from big delays in R/B GPIO falling edge (or no R/B
++ falling edge activity) */
++ while((NAND_RB == 1) && (i < 3000)){
++ udelay(1);
++ i++;
++ };
++
++ if ( i > 0 )
++ printk(KERN_DEBUG "%s: No immediate R/B activity\n", __FILE__);
++
++ if (i == 3000){
++ printk(KERN_DEBUG "%s: No R/B activity for 3 ms\n", __FILE__);
++ return (0);
++ }
++
++ i=0;
++
++ /* protect from big delays in R/B GPIO rising edge */
++ while((NAND_RB == 0) && (i < 3000)){
++ udelay(1);
++ i++;
++ };
++
++ if (i == 3000){
++ printk(KERN_DEBUG "%s: R/B timed out\n", __FILE__);
++ return (0);
++ }
++
++ /* ensure there's no outstanding bus transaction */
++ asm volatile ("mcr p15, 0, r0, c7, c10, 4":::"r0");
++ dummy=*UNC;
++
++ return(1);
++}
++
++static cl_nand_map_if cl_nand_linux = {
++ .init = FlashInitial,
++ .destroy = do_nothing,
++ .chip_select = FlashChipSelect,
++ .readb = FlashReadByte,
++ .writeb = FlashWriteByte,
++ .blockread = FlashBlockRead,
++ .blockwrite = FlashBlockWrite,
++ .activity_leds = FlashCoreLeds,
++ .sleep = nand_delay,
++ .rbwait = RBWait
++};
++
++static struct cl_nand_dev nand_dev;
++
++/*
++ nand_flash_init:
++ - perform board specific initialization
++ - initialize NAND device data structure
++ - initialize block device layer
++*/
++static int nand_flash_init (void)
++{
++ struct cl_nand_dev *dev = &nand_dev;
++
++ FLASH_DATA = (volatile unsigned long*)ioremap(PXA_CS1_PHYS, 12);
++ if (FLASH_DATA == NULL) {
++ printk("Bad NAND flash window at %X (already in use)\n", 0x04000000);
++ return -1;
++ }
++ FLASH_DATA_CLE = FLASH_DATA + 1;
++ FLASH_DATA_ALE = FLASH_DATA + 2;
++
++ INIT_NAND_DEV(dev);
++ return cl_nand_flash_init(dev, &cl_nand_linux);
++}
++
++#ifdef CONFIG_ARMCORE_NAND
++int cl_nand_init_module(void)
++{
++ return nand_flash_init();
++}
++
++void cl_nand_cleanup_module(void)
++{
++ struct cl_nand_dev *dev = &nand_dev;
++ cl_nand_flash_cleanup(dev);
++}
++#else
++int cl_nand_init_module(void)
++{
++ return 0;
++}
++
++void cl_nand_cleanup_module(void)
++{
++}
++#endif
+diff --git a/drivers/block/cl_flash/cl_nordev.c b/drivers/block/cl_flash/cl_nordev.c
+new file mode 100644
+index 0000000..85ae58a
+--- /dev/null
++++ b/drivers/block/cl_flash/cl_nordev.c
+@@ -0,0 +1,594 @@
++/*
++ Flash Disk Driver Interface for Linux 2.4.x
++ Written by Vova Lifliand
++*/
++
++/* Includes */
++#include <linux/module.h>
++#include <linux/errno.h>
++#include <linux/sched.h>
++#include <linux/mm.h>
++#include <linux/fs.h>
++#include <linux/kernel.h>
++#include <linux/timer.h>
++#include <linux/genhd.h>
++#include <linux/hdreg.h>
++#include <linux/ioport.h>
++#include <linux/init.h>
++#include <linux/devfs_fs_kernel.h>
++#include <linux/delay.h>
++
++#include <asm/system.h>
++#include <asm/io.h>
++#include <asm/uaccess.h>
++
++/* Macros for correct linux/blk.h inclusion */
++
++#define DEVICE_NAME "nor"
++
++static int major = 0;
++
++#define FLASH_SECTOR 512
++
++#include <linux/blkdev.h>
++#include <linux/blkpg.h>
++
++extern void cl_error_log ( char* format, ...);
++extern void cl_trace_log ( char* format, ...);
++extern void cl_mem_copy (void* dest, void* src, long size);
++
++
++/* Undefine for custom LEDs usage */
++#undef USE_LEDS
++
++/* CrFlash driver interface */
++#ifndef FLASH_PLATFORM_LINUX
++#define FLASH_PLATFORM_LINUX
++#endif
++#include "CL_Logic.h"
++
++typedef unsigned long ULONG;
++
++/* Forward functions declaration */
++static int flash_open (struct inode *inode,struct file *file);
++static void do_flash_request (request_queue_t * q);
++static int flash_ioctl (struct inode *inode,struct file *file,unsigned int cmd,unsigned long arg);
++static int flash_release (struct inode *inode, struct file *file);
++
++static DECLARE_MUTEX (nor_flash_sem);
++static int nor_flash_sem_catched = 0;
++
++
++volatile unsigned short * NorFlashMem;
++
++static int flash_check_media_change (struct gendisk* dev)
++{
++/* printk ("flash_check_media_change called.\r\n");*/
++ return 0; /* Disk not changed */
++}
++
++static int flash_revalidate (struct gendisk* dev)
++{
++/* printk ("flash_revalidate called.\r\n");*/
++ return 0;
++}
++
++static struct block_device_operations flash_fops =
++{
++ .owner = THIS_MODULE,
++ .open = flash_open,
++ .release = flash_release,
++ .ioctl = flash_ioctl,
++ .media_changed = flash_check_media_change,
++ .revalidate_disk = flash_revalidate
++};
++
++static struct gendisk *flash_gendisk;
++static spinlock_t flash_lock;
++static struct request_queue *flash_queue;
++
++
++#ifdef CONFIG_ARMCORE_NOR
++/* nor_flash_init: register the block device number and set up pointer tables */
++int __init nor_flash_init (void)
++{
++ ULONG trash1, trash2, trash3, trash4, TotalSect;
++
++ /* Request memory for NOR Flash */
++ NorFlashMem = (volatile unsigned short*)ioremap (0x00000000, 0x800000);
++ if (NorFlashMem == NULL) {
++ printk("Bad NOR flash window at %X (already in use)\n", 0x00000000);
++ return -1;
++ }
++
++ /* Do flash initialization */
++ if (!cl_nor_init_flash()) {
++ printk("NOR: Flash initialization failed\n");
++ iounmap((void __iomem *)NorFlashMem);
++ return -1;
++ }
++
++ spin_lock_init(&flash_lock);
++ flash_queue = blk_init_queue(do_flash_request, &flash_lock);
++ if(flash_queue == NULL)
++ {
++ printk ("Could not initialize queue.\r\n");
++ iounmap((void __iomem *)NorFlashMem);
++ return -1;
++ }
++ blk_queue_hardsect_size(flash_queue, FLASH_SECTOR);
++
++ if ((major=register_blkdev (0, DEVICE_NAME)) <= 0)
++ {
++ printk("flash: Unable to get major number \n");
++ iounmap((void __iomem *)NorFlashMem);
++ return -1;
++ } else printk("Major number received: %d\n", major);
++
++ /* Insert this disk into linked list of disks */
++
++ flash_gendisk = alloc_disk(16);
++ if (! flash_gendisk) return -ENOMEM;
++ flash_gendisk->major = major;
++ flash_gendisk->first_minor = 0;
++ flash_gendisk->fops = &flash_fops;
++ flash_gendisk->private_data=NULL;
++ flash_gendisk->queue = flash_queue;
++ strcpy(flash_gendisk->disk_name, "nor");
++ cl_nor_get_disk_param( &TotalSect, &trash1, &trash2, &trash3, &trash4);
++ set_capacity(flash_gendisk, TotalSect);
++ add_disk(flash_gendisk);
++
++ /* Starting flush timer: the cl_timer_proc will be executed on each timer interrupt */
++
++ return 0;
++}
++#else
++int __init nor_flash_init (void)
++{
++ return 0;
++}
++#endif
++
++/* flash_open: open a device */
++static int flash_open (struct inode *inode, struct file *file)
++{
++
++ return 0;
++
++}
++
++/* do_flash_request: handle an incoming request */
++static void do_flash_request (request_queue_t * q)
++{
++ u_int block, count;
++ int code=1, i;
++ struct request* req=NULL;
++
++ while ((code == 1) && ((req = elv_next_request(q)) != NULL))
++ {
++ block = req->sector;
++ // printk ("req->nr_sectors = %d.\r\n", req->nr_sectors);
++ // printk ("req->current_nr_sectors = %d.\r\n", req->current_nr_sectors);
++ count = req->current_nr_sectors;
++
++ nor_flash_sem_catched++;
++ down (&nor_flash_sem);
++
++ switch (rq_data_dir(req)) {
++ case 0: // READ
++ for (i = 0, code = 1; i < count; i++)
++ // printk ("Reading sector %d (of %d).\r\n", block + i, count);
++ if (!cl_nor_read_page ( block + i,
++ (void *)((char*)req->buffer + i * 512))) {
++ // printk ("Reading failed.\r\n");
++ code = 0; /* failure */
++ break;
++ }
++ // printk ("Reading completed successfully.\r\n");
++ break;
++ case 1: // WRITE
++ for (i = 0, code = 1; i < count; i++) {
++ // printk ("Writing sector %d.\r\n", block + i);
++ if (!cl_nor_write_page ( block + i,
++ (void *)((char*)req->buffer + i * 512))) {
++ // printk ("Writing failed.\r\n");
++ code = 0; /* failure */
++ break;
++ }
++ // printk ("Writing completed successfully.\r\n");
++ }
++ break;
++ default:
++ printk("do_flash_request: unknown request\n");
++ break;
++ }
++ up (&nor_flash_sem);
++ nor_flash_sem_catched--;
++ end_request (req, code); /* wrap up, 0 = fail, 1 = success */
++ }
++}
++
++/* flash_ioctl: handle device ioctl's */
++static int flash_ioctl (struct inode *inode, struct file *file, u_int cmd, u_long arg)
++{
++ ULONG trash1, trash2, trash3, trash4, TotalSect;
++
++ // printk ("flash_ioctl called.\r\n");
++
++ if ((!inode) || !(inode->i_rdev))
++ return -EINVAL;
++
++ cl_nor_get_disk_param( &TotalSect, &trash1, &trash2, &trash3, &trash4);
++ // printk ("flash_ioctl in switch.\r\n");
++ switch (cmd)
++ {
++ case HDIO_GETGEO:
++ {
++ struct hd_geometry *geometry = (struct hd_geometry*)arg;
++ if (!geometry)
++ return -EINVAL; /* Bad arguments to ioctl */
++ put_user(TotalSect / 32 , &geometry->cylinders);
++ put_user(1, &geometry->heads);
++ put_user(32, &geometry->sectors);
++ put_user(2, &geometry->start);
++ }
++ case BLKGETSIZE:
++ if (!arg)
++ return -EINVAL;
++ return put_user (TotalSect, (long *) arg);
++ case HDIO_SET_DMA: /* We don't use DMA for flash. This has no meaning */
++ if (!capable (CAP_SYS_ADMIN))
++ return -EACCES;
++ return 0;
++ case HDIO_GET_DMA:
++ return put_user( 0, (long *) arg); /* No DMA */
++ case HDIO_GET_MULTCOUNT: /* We don't have a limitation of number of sectors in op. */
++ return put_user (128, (long *) arg);
++ case BLKFLSBUF:
++ case BLKROSET:
++ case BLKROGET:
++ case BLKRASET:
++ case BLKRAGET:
++ case BLKPG:
++
++ default:
++ return -EINVAL;
++ }
++}
++
++/* flash_release: release the device */
++static int flash_release (struct inode *inode, struct file *file)
++{
++
++ return 0;
++}
++
++#ifdef CONFIG_ARMCORE_NOR
++static void flash_done (void)
++{
++ del_gendisk(flash_gendisk);
++ put_disk(flash_gendisk);
++ blk_cleanup_queue(flash_queue);
++
++ /* Free memory allocated by flash module */
++ cl_nor_free_mem ();
++
++ unregister_blkdev (major, DEVICE_NAME);
++}
++#else
++static void flash_done (void)
++{
++}
++#endif
++
++extern int cl_nand_init_module(void);
++extern void cl_nand_cleanup_module(void);
++
++int flash_init_module(void)
++{
++ int error;
++
++ error = cl_nand_init_module();
++ if (error) return error;
++
++ error = nor_flash_init();
++ if (error) return error;
++
++ return 0;
++}
++
++void flash_cleanup_module(void)
++{
++ flash_done();
++ cl_nand_cleanup_module();
++}
++
++module_init (flash_init_module);
++module_exit (flash_cleanup_module);
++
++//-------------------- CMNLIN.C ---------
++
++#define TRUE 1
++#define FALSE 0
++
++#define FL_CLKS_PER_SEC 182
++
++#define NAND_HEAP_SIZE 64000 /* bytes */
++#define NOR_HEAP_SIZE 50000 /* bytes */
++
++/* NOR Flash constants */
++#define NorFlashBlockSize 0x10000L /* 64 KB */
++#define NorFlashDiskPagesPerBlock 127
++
++#define NOR_DRIVE_STARTING_BLOCK 28
++
++/* NOR Flash Functions Support */
++
++/* Constructor / destructor */
++static void Nor_Create(void);
++/* Basic operations */
++static void Nor_EnableFlashMap(int EnableFlag);
++static unsigned long Nor_GetSize(void);
++static int Nor_GetPagesPerBlock(void);
++static int Nor_ReadHeader (unsigned short BlockN, cl_nor_block_header* Header);
++static int Nor_ReadPage (unsigned short BlockN, unsigned char PageNum, CLBYTEPTR DestBuff);
++static int Nor_SetBlockState(unsigned short BlockN, unsigned short Signature,
++ unsigned short State, unsigned short Reserved);
++static int Nor_InvalidatePage(unsigned short BlockN, unsigned char PageN);
++static int Nor_WritePage(unsigned short BlockN, unsigned char PageN,
++ CLBYTEPTR PageData, unsigned short PageIndex);
++static int Nor_EraseBlock(unsigned short BlockN);
++
++extern volatile unsigned short * NorFlashMem;
++unsigned char Nor_IntelFlash;
++
++void Nor_EmptyFunc(void){};
++
++cl_nor_flash_access NorFlashAccess =
++ {
++ Nor_Create,
++ Nor_EmptyFunc, /*NULL,*/ /* Destructor not needed */
++ Nor_GetSize,
++ Nor_EnableFlashMap,
++ Nor_GetPagesPerBlock,
++ Nor_ReadHeader,
++ Nor_ReadPage,
++ Nor_SetBlockState,
++ Nor_InvalidatePage,
++ Nor_WritePage,
++ Nor_EraseBlock,
++ };
++
++/* Driver see NOR Flash Blocks as linear, while there are BIOS holes */
++static int Nor_GetPhysBlockIndex (int BlockN)
++{
++ return (BlockN + NOR_DRIVE_STARTING_BLOCK);
++}
++
++static void NorWrWord(unsigned long index, unsigned short data)
++{
++ *(NorFlashMem+index)=data;
++}
++extern void NorWrWord(unsigned long index, unsigned short data);
++
++static unsigned short NorRdWord(unsigned long index)
++{
++ return *(NorFlashMem+index);
++}
++
++static unsigned char Nor_OutAMDCommand(unsigned short command)
++{
++ NorWrWord(0x555, 0xAAAA);
++ NorWrWord(0x2AA, 0x5555);
++ NorWrWord(0x555, command);
++ return TRUE;
++}
++
++
++static void Nor_Create(void)
++{
++ /* Nothing should be done here - all services are provided by BIOS */
++}
++
++static unsigned long Nor_GetSize(void)
++{
++ unsigned long NorFlashSize = 0x100000;
++ unsigned short n;
++/* unsigned long i; */
++
++ /* Determine flash type */
++ NorWrWord(0, 0xFFFF);
++ NorWrWord(0, 0x9090);
++ if(NorRdWord(0) == 0x89)
++ Nor_IntelFlash = TRUE;
++ else Nor_IntelFlash = FALSE;
++ NorWrWord(0, 0xFFFF);
++
++ /* Query flash size */
++ /* 1. Do reset command */
++ NorWrWord(0, 0xF0F0); /* was 0f0f */
++ NorWrWord(0, 0xFFFF); /* Will also reset intel flash */
++ /* 2. Enter CFI mode */
++ NorWrWord(0x55, 0x9898);
++ /* 3. Read flash size */
++/* READ WHOLE CFI for (i=10; i<0x3D; i++){
++ n = NorRdWord(i);
++ printk("CFI n=%x\n", n);} */
++ n = NorRdWord(0x27);
++ /* 4. Do reset again - exit CFI mode */
++ NorWrWord(0, 0xF0F0); /* was 0f0f */
++ NorWrWord(0, 0xFFFF); /* Will also reset intel flash */
++ /* Exclude BIOS area */
++ if((n>0x17) | (n<0x14)) n=0x14; // if detection is unsuccessfull (no CFI) default to 1MB
++ NorFlashSize = (1 << n); /* 2 ^ n */
++
++ cl_error_log("NOR Flash (%s) size: %d MB total\n",(Nor_IntelFlash ? "Intel" : "AMD"),NorFlashSize / (1024 * 1024));
++
++ if(NorFlashSize == (1024 * 1024)) {
++ cl_error_log("1Mb flash not supported!\n");
++ return 0;
++ }
++
++ return NorFlashSize -= NOR_DRIVE_STARTING_BLOCK * 64L * 1024L; /*exclude BIOS and jump areas, spareblocks etc.*/
++}
++
++/* Remaps or unmaps MMS windows, allocated by flash */
++static void Nor_EnableFlashMap (int EnableFlag)
++{
++ /* Just to prevent warning */
++ int x = EnableFlag;
++ EnableFlag = x;
++ /* Nothing should be done here - all services are provided by BIOS */
++}
++
++static int Nor_GetPagesPerBlock(void)
++{
++ return NorFlashDiskPagesPerBlock;
++}
++
++static int Nor_ReadHeader (unsigned short BlockN, cl_nor_block_header* Header)
++{
++
++ cl_mem_copy (Header,
++ (char*)(NorFlashMem + (0x8000 * Nor_GetPhysBlockIndex(BlockN))),
++ (sizeof (cl_nor_block_header) + 1) & 0xFFFE);
++ return 1;
++}
++
++static int Nor_ReadPage (unsigned short BlockN, unsigned char PageNum, CLBYTEPTR DestBuff)
++{
++ cl_mem_copy (DestBuff,
++ (char*)(NorFlashMem + (0x8000 * Nor_GetPhysBlockIndex(BlockN)) +
++ ((PageNum + 1) * (CL_NOR_FLASH_PAGE_SIZE / 2))),
++ CL_NOR_FLASH_PAGE_SIZE);
++ return 1;
++}
++
++static int Nor_EraseBlock(unsigned short BlockN)
++{
++ unsigned long addr;
++ unsigned short dummy;
++
++ addr=(Nor_GetPhysBlockIndex(BlockN)*NorFlashBlockSize)/2;
++ if(Nor_IntelFlash)
++ { /* Erase block sequence from Intel flash */
++ NorWrWord(addr, 0xFFFF);
++ NorWrWord(addr, 0x7070);
++ NorWrWord(addr, 0x2020);
++ NorWrWord(addr, 0xD0D0);
++ NorWrWord(addr, 0xD0D0);
++ while(!(NorRdWord(addr) & 128))
++ ;
++ NorWrWord(0, 0xFFFF);
++ return TRUE;
++ }
++ else
++ {
++ /* Do "erase block" commands sequence */
++ if(!Nor_OutAMDCommand(0xF0F0)) return FALSE;
++ dummy = NorRdWord(addr); /* read and discard */
++ if(!Nor_OutAMDCommand(0x8080)) return FALSE;
++ NorWrWord(0x555, 0xAAAA);
++ NorWrWord(0x2AA, 0x5555);
++ NorWrWord(addr, 0x3030);
++
++ /* Waiting block is erased - no timeout here */
++ while(TRUE)
++ {
++ /* Stall processor execution for about 20 microseconds <--- it is much less */
++ for(dummy = 0; dummy < 20; dummy++)
++ ;
++ /* Check if ready */
++ if(NorRdWord(addr) == 0xFFFF)
++ return TRUE;
++ }
++ }
++}
++
++static int Nor_SetWord (unsigned long ofs, unsigned short word)
++{
++ unsigned short timeout = 0xFFF;
++ unsigned long addr;
++ addr = ((Nor_GetPhysBlockIndex (ofs >> 15))<<15)+(ofs&0x7FFF);// 15 because address is given for word argument
++ /* The address should be word aligned since accessing by word and not by byte */
++
++ if(Nor_IntelFlash)
++ { /* Write sequence from Intel flash */
++ NorWrWord(addr, 0x4040);
++ NorWrWord(addr, word);
++ while(timeout--)
++ udelay(1);
++ if(NorRdWord(addr) & 128)
++ {
++ unsigned char res = !(NorRdWord(addr) & 16);
++ NorWrWord(addr, 0x5050);
++ NorWrWord(addr, 0xFFFF);
++ return res;
++ }
++ NorWrWord(0, 0x5050);
++ }
++ else
++ { /* Write sequence from AMD flash */
++ /* Output command is a necessary sequence to write word */
++ if(!Nor_OutAMDCommand(0xA0A0))
++ return FALSE;
++
++ /* Write data */
++ NorWrWord(addr, word);
++ /* Wait data written */
++ while(timeout--) {
++ udelay(1);
++ if(NorRdWord(addr) == word)
++ return TRUE;
++ }
++ }
++ /* Failure */
++ cl_error_log("ERROR: SetWord timeout.");
++
++ return FALSE;
++}
++
++static int Nor_SetBlockState(unsigned short BlockN, unsigned short Signature,
++ unsigned short State, unsigned short Reserved)
++{
++ return Nor_SetWord ((BlockN * NorFlashBlockSize + 0)/2, Signature) &&
++ Nor_SetWord ((BlockN * NorFlashBlockSize + 2)/2, State) &&
++ Nor_SetWord ((BlockN * NorFlashBlockSize + 26 + 127 * 2)/2, Reserved);
++}
++
++static int Nor_InvalidatePage (unsigned short BlockN, unsigned char PageN)
++{
++ return Nor_SetWord ((BlockN * NorFlashBlockSize + 6 + 2 * PageN)/2, 0);
++}
++
++static int Nor_WritePage (unsigned short BlockN, unsigned char PageN,
++ CLBYTEPTR PageData, unsigned short PageIndex)
++{
++ int words_left, dest_addr;
++ unsigned short* ptr;
++
++ /* Write index to first page - header information */
++ if(!Nor_SetWord((BlockN * NorFlashBlockSize + 6 + 2 * PageN)/2, PageIndex))
++ {
++ cl_error_log("A");
++ return FALSE; /* Couldn't write page index */
++ }
++
++ /* Write page data */
++ words_left = (512 >> 1); /* Write by word */
++ dest_addr = BlockN * NorFlashBlockSize + (PageN + 1) * 512;
++ ptr = (unsigned short*)PageData;
++ while(words_left--)
++ {
++ if(!Nor_SetWord(dest_addr/2, *ptr++))
++ {
++ cl_error_log("B");
++ return FALSE; /* Page data writing failure */
++ }
++ dest_addr += 2; /* Write by word (2 bytes each write command) */
++ }
++
++ return TRUE;
++}
++
+diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig
+index 05ba410..a820db0 100644
+--- a/drivers/char/Kconfig
++++ b/drivers/char/Kconfig
+@@ -1020,5 +1020,11 @@ config TELCLOCK
+ sysfs directory, /sys/devices/platform/telco_clock, with a number of
+ files for controlling the behavior of this hardware.
+
++
++config EMV3020_RTC
++ tristate "EM-V3020 RTC"
++ ---help---
++ Support for EM Microelectronics V3020 RTC
++
+ endmenu
+
+diff --git a/drivers/char/Makefile b/drivers/char/Makefile
+index 503dd90..625bfd9 100644
+--- a/drivers/char/Makefile
++++ b/drivers/char/Makefile
+@@ -49,6 +49,7 @@ obj-$(CONFIG_VIOCONS) += viocons.o
+ obj-$(CONFIG_VIOTAPE) += viotape.o
+ obj-$(CONFIG_HVCS) += hvcs.o
+ obj-$(CONFIG_SGI_MBCS) += mbcs.o
++obj-$(CONFIG_EMV3020_RTC) += emv3020.o
+
+ obj-$(CONFIG_PRINTER) += lp.o
+ obj-$(CONFIG_TIPAR) += tipar.o
+diff --git a/drivers/char/emv3020.c b/drivers/char/emv3020.c
+new file mode 100644
+index 0000000..df7f1a4
+--- /dev/null
++++ b/drivers/char/emv3020.c
+@@ -0,0 +1,365 @@
++/*
++ * emv3020.c
++ *
++ * Driver for EMV3020 RTC
++ *
++ * Copyright (C) 2006 Compulab Ltd.
++ *
++ *
++ * 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/module.h>
++#include <linux/fs.h>
++#include <linux/string.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/interrupt.h>
++#include <linux/rtc.h>
++#include <linux/bcd.h>
++#include <linux/clk.h>
++
++#include <asm/hardware.h>
++#include <asm/uaccess.h>
++#include <asm/io.h>
++#include <asm/irq.h>
++#include <asm/rtc.h>
++
++#include <asm/hardware.h>
++#include <asm/delay.h>
++
++#define EMV3020_VA_RTC emv3020_rtc_base
++
++static struct resource *emv3020_rtc_mem;
++static void __iomem *emv3020_rtc_base;
++
++#define DEBUG 0
++#if DEBUG
++static unsigned int rtc_debug = DEBUG;
++#else
++#define rtc_debug 0 /* gcc will remove all the debug code for us */
++#endif
++
++static void emv3020_set_reg(unsigned char address, unsigned char data)
++{
++ int i;
++
++ for ( i = 0; i < 4; i++ )
++ writel((address << (16-i)), EMV3020_VA_RTC);
++
++ if ( address < 0xe)
++ for ( i = 0; i < 8; i++)
++ writel((data << (16-i)), EMV3020_VA_RTC);
++}
++
++static unsigned char emv3020_get_reg(unsigned char address)
++{
++ unsigned int data=0;
++ int i, tmp;
++
++ for ( i = 0; i < 4; i++ )
++ writel((address << (16-i)), EMV3020_VA_RTC);
++
++ for ( i = 0; i < 8; i++ ) {
++ tmp = readl(EMV3020_VA_RTC);
++ data |= ((tmp & 0x10000) >> (16 - i));
++ }
++
++ return data;
++}
++
++static int emv3020_detect(struct device *dev)
++{
++ int i;
++ int temp;
++
++ for ( i=0; i<8; i++)
++ temp = readl(EMV3020_VA_RTC);
++
++ emv3020_set_reg(0x2, 0x33);
++
++ if ( emv3020_get_reg(0x2) == 0x33 ) {
++ emv3020_set_reg(0x0, 0x0);
++ return 0;
++ }
++
++ return -ENODEV;
++}
++
++static int emv3020_rtc_gettime(struct rtc_time *dt)
++{
++ int ret=0;
++
++ emv3020_set_reg(0x0F, 0);
++
++ dt->tm_sec = emv3020_get_reg(0x02);
++ dt->tm_min = emv3020_get_reg(0x03);
++ dt->tm_hour = emv3020_get_reg(0x04);
++ dt->tm_mday = emv3020_get_reg(0x05);
++ dt->tm_mon = emv3020_get_reg(0x06);
++ dt->tm_wday = emv3020_get_reg(0x08);
++ dt->tm_year = emv3020_get_reg(0x07);
++
++ BCD_TO_BIN(dt->tm_sec);
++ BCD_TO_BIN(dt->tm_min);
++ BCD_TO_BIN(dt->tm_hour);
++ BCD_TO_BIN(dt->tm_mday);
++ BCD_TO_BIN(dt->tm_mon);
++ BCD_TO_BIN(dt->tm_wday);
++ BCD_TO_BIN(dt->tm_year);
++ dt->tm_year += 100;
++
++ if(rtc_debug)printk("\n%s : Read RTC values\n",__FUNCTION__);
++ if(rtc_debug)printk("tm_hour: %i\n",dt->tm_hour);
++ if(rtc_debug)printk("tm_min : %i\n",dt->tm_min);
++ if(rtc_debug)printk("tm_sec : %i\n",dt->tm_sec);
++ if(rtc_debug)printk("tm_year: %i\n",dt->tm_year);
++ if(rtc_debug)printk("tm_mon : %i\n",dt->tm_mon);
++ if(rtc_debug)printk("tm_mday: %i\n",dt->tm_mday);
++ if(rtc_debug)printk("tm_wday: %i\n",dt->tm_wday);
++
++ return ret;
++}
++
++static int emv3020_rtc_settime(struct rtc_time *dt)
++{
++ if(rtc_debug)printk("\n%s : Setting RTC values\n",__FUNCTION__);
++ if(rtc_debug)printk("tm_sec : %i\n",dt->tm_sec);
++ if(rtc_debug)printk("tm_min : %i\n",dt->tm_min);
++ if(rtc_debug)printk("tm_hour: %i\n",dt->tm_hour);
++ if(rtc_debug)printk("tm_mday: %i\n",dt->tm_mday);
++ if(rtc_debug)printk("tm_wday: %i\n",dt->tm_wday);
++ if(rtc_debug)printk("tm_year: %i\n",dt->tm_year);
++
++ dt->tm_year %= 100;
++ BIN_TO_BCD(dt->tm_sec);
++ BIN_TO_BCD(dt->tm_min);
++ BIN_TO_BCD(dt->tm_hour);
++ BIN_TO_BCD(dt->tm_mday);
++ BIN_TO_BCD(dt->tm_mon);
++ BIN_TO_BCD(dt->tm_wday);
++ BIN_TO_BCD(dt->tm_year);
++
++ emv3020_set_reg(0x02, dt->tm_sec);
++ emv3020_set_reg(0x03, dt->tm_min);
++ emv3020_set_reg(0x04, dt->tm_hour);
++ emv3020_set_reg(0x05, dt->tm_mday);
++ emv3020_set_reg(0x06, dt->tm_mon);
++ emv3020_set_reg(0x08, dt->tm_wday);
++ emv3020_set_reg(0x07, dt->tm_year);
++
++ emv3020_set_reg(0x0E, 0);
++
++ return 0;
++}
++
++static int emv3020_rtc_open(void)
++{
++ return 0;
++}
++
++static void emv3020_rtc_release(void)
++{
++}
++
++static int emv3020_rtc_ioctl(unsigned int cmd, unsigned long arg)
++{
++ struct rtc_time wtime;
++ int status = 0;
++
++ switch (cmd) {
++ default:
++ case RTC_UIE_ON:
++ case RTC_UIE_OFF:
++ case RTC_PIE_ON:
++ case RTC_PIE_OFF:
++ case RTC_AIE_ON:
++ case RTC_AIE_OFF:
++ case RTC_ALM_SET:
++ case RTC_ALM_READ:
++ case RTC_IRQP_READ:
++ case RTC_IRQP_SET:
++ case RTC_EPOCH_READ:
++ case RTC_EPOCH_SET:
++ case RTC_WKALM_SET:
++ case RTC_WKALM_RD:
++ status = -EINVAL;
++ break;
++
++ case RTC_RD_TIME:
++ emv3020_rtc_gettime(&wtime);
++ if( copy_to_user((void *)arg, &wtime,
++ sizeof (struct rtc_time)))
++ status = -EFAULT;
++ break;
++
++ case RTC_SET_TIME:
++ if (!capable(CAP_SYS_TIME)) {
++ status = -EACCES;
++ break;
++ }
++
++ if (copy_from_user(&wtime, (struct rtc_time *)arg,
++ sizeof(struct rtc_time)) ) {
++ status = -EFAULT;
++ break;
++ }
++
++ emv3020_rtc_settime(&wtime);
++ break;
++ }
++
++ return status;
++}
++
++static char *emv3020_mon2str(unsigned int mon)
++{
++ char *mon2str[12] = {
++ "Jan", "Feb", "Mar", "Apr", "May", "Jun",
++ "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
++ };
++ if( mon > 11) return "error";
++ else return mon2str[ mon];
++}
++
++static int emv3020_rtc_proc( char *buf)
++{
++ char *p = buf;
++ struct rtc_time dt;
++
++ emv3020_rtc_gettime(&dt);
++
++ p += sprintf(p, "\nEMV3020 (Real Time Clock)\n");
++ p += sprintf(p, "Date/Time : %02d-%s-%04d %02d:%02d:%02d\n",
++ dt.tm_mday,
++ emv3020_mon2str(dt.tm_mon),
++ dt.tm_year+1900,
++ dt.tm_hour,
++ dt.tm_min,
++ dt.tm_sec);
++ return p - buf;
++}
++
++static struct rtc_ops emv3020_rtcops = {
++ .owner = THIS_MODULE,
++ .open = emv3020_rtc_open,
++ .release = emv3020_rtc_release,
++ .ioctl = emv3020_rtc_ioctl,
++ .read_time = emv3020_rtc_gettime,
++ .set_time = emv3020_rtc_settime,
++ .read_alarm = 0,
++ .set_alarm = 0,
++ .proc = emv3020_rtc_proc,
++};
++
++static int emv3020_rtc_remove(struct device *dev)
++{
++ unregister_rtc(&emv3020_rtcops);
++
++ if (emv3020_rtc_mem != NULL) {
++ pr_debug("emv3020_rtc: releasing emv3020_rtc_mem\n");
++ iounmap(emv3020_rtc_base);
++ release_resource(emv3020_rtc_mem);
++ }
++
++ return 0;
++}
++
++static int emv3020_rtc_probe(struct device *dev)
++{
++ struct platform_device *pdev = to_platform_device(dev);
++ struct resource *res;
++ int ret;
++
++ pr_debug("%s: probe=%p, device=%p\n", __FUNCTION__, pdev, dev);
++
++ /* get the memory region */
++ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
++ if (res == NULL) {
++ dev_err(dev, "failed to get memory region resource\n");
++ return -ENOENT;
++ }
++
++ emv3020_rtc_mem = request_mem_region(res->start,
++ res->end - res->start + 1,
++ pdev->name);
++
++ if (emv3020_rtc_mem == NULL) {
++ dev_err(dev, "failed to reserve memory region\n");
++ ret = -ENOENT;
++ goto exit_err;
++ }
++
++ emv3020_rtc_base = ioremap(res->start, res->end - res->start + 1);
++ if (emv3020_rtc_base == NULL) {
++ dev_err(dev, "failed ioremap()\n");
++ ret = -EINVAL;
++ goto exit_err;
++ }
++
++ emv3020_rtc_mem = res;
++ pr_debug("emv3020_rtc_base=%p\n", emv3020_rtc_base);
++
++ /* check to see if everything is setup correctly */
++ if ( (ret = emv3020_detect(dev)) != 0 ) {
++ iounmap(emv3020_rtc_base);
++ release_resource(emv3020_rtc_mem);
++ goto exit_err;
++ }
++
++ /* register RTC and exit */
++ register_rtc(&emv3020_rtcops);
++
++ return 0;
++
++ exit_err:
++ dev_err(dev, "error %d during initialisation\n", ret);
++
++ return ret;
++}
++
++#ifdef CONFIG_PM
++/* EMV3020 RTC Power management control */
++static int emv3020_rtc_suspend(struct device *dev, pm_message_t state)
++{
++ return 0;
++}
++
++static int emv3020_rtc_resume(struct device *dev)
++{
++ return 0;
++}
++#else
++#define emv3020_rtc_suspend NULL
++#define emv3020_rtc_resume NULL
++#endif
++
++static struct device_driver emv3020_rtcdrv = {
++ .name = "emv3020-rtc",
++ .bus = &platform_bus_type,
++ .probe = emv3020_rtc_probe,
++ .remove = emv3020_rtc_remove,
++ .suspend = emv3020_rtc_suspend,
++ .resume = emv3020_rtc_resume,
++};
++
++static __init int emv3020_init(void)
++{
++ return driver_register(&emv3020_rtcdrv);
++}
++
++static __exit void emv3020_exit(void)
++{
++ driver_unregister(&emv3020_rtcdrv);
++}
++
++module_init(emv3020_init);
++module_exit(emv3020_exit);
++
++
++MODULE_AUTHOR ("Compulab Ltd.");
++MODULE_LICENSE ("GPL");
+diff --git a/drivers/ide/Kconfig b/drivers/ide/Kconfig
+index d633081..5e7f6ee 100644
+--- a/drivers/ide/Kconfig
++++ b/drivers/ide/Kconfig
+@@ -850,6 +850,13 @@ config BLK_DEV_IDE_BAST
+ Say Y here if you want to support the onboard IDE channels on the
+ Simtec BAST or the Thorcom VR1000
+
++config BLK_DEV_IDE_CM_X270
++ tristate "CompuLab CM-X270 IDE support"
++ depends on ARM && (MACH_ARMCORE)
++ help
++ Say Y here if you want to support the onboard IDE channels on the
++ CompuLab CM-X270 module
++
+ config BLK_DEV_GAYLE
+ bool "Amiga Gayle IDE interface support"
+ depends on AMIGA
+diff --git a/drivers/ide/arm/Makefile b/drivers/ide/arm/Makefile
+index 6a78f07..e5cadb7 100644
+--- a/drivers/ide/arm/Makefile
++++ b/drivers/ide/arm/Makefile
+@@ -2,5 +2,6 @@
+ obj-$(CONFIG_BLK_DEV_IDE_ICSIDE) += icside.o
+ obj-$(CONFIG_BLK_DEV_IDE_RAPIDE) += rapide.o
+ obj-$(CONFIG_BLK_DEV_IDE_BAST) += bast-ide.o
++obj-$(CONFIG_BLK_DEV_IDE_CM_X270) += cm-x270-ide.o
+
+ EXTRA_CFLAGS := -Idrivers/ide
+diff --git a/drivers/ide/arm/cm-x270-ide.c b/drivers/ide/arm/cm-x270-ide.c
+new file mode 100644
+index 0000000..d0e9b8a
+--- /dev/null
++++ b/drivers/ide/arm/cm-x270-ide.c
+@@ -0,0 +1,135 @@
++/* linux/drivers/ide/arm/cm-x270-ide.c
++ *
++ * Copyright (c) 2006 CompuLab, Ltd
++ * Mike Rapoport <mike@compulab.co.il>
++ *
++ * Based on linux/drivers/ide/arm/bast-ide.c
++ * Copyright (c) 2003-2004 Simtec Electronics
++ * Ben Dooks <ben@simtec.co.uk>
++ *
++ * 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/module.h>
++#include <linux/errno.h>
++#include <linux/ide.h>
++#include <linux/init.h>
++
++#include <asm/mach-types.h>
++
++#include <asm/io.h>
++#include <asm/irq.h>
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/cm-x270.h>
++
++#define CMX270_SB270_IDECS0_VIRT (CMX270_IDE104_VIRT + (1<<24) + (1<<25))
++#define CMX270_SB270_IDECS1_VIRT (CMX270_IDE104_VIRT + (1<<25))
++#define CMX270_ATX_IDECS0_VIRT (CMX270_IDE104_VIRT + (1<<25))
++#define CMX270_ATX_IDECS1_VIRT (CMX270_IDE104_VIRT + (1<<25) + (1<<22))
++
++/* list of registered interfaces */
++static ide_hwif_t *ifs[1];
++
++static int __init
++cmx270_ide_register(unsigned int base, unsigned int aux, int irq,
++ ide_hwif_t **hwif)
++{
++ hw_regs_t hw;
++
++ memset(&hw, 0, sizeof(hw));
++
++ if(!base || !aux) return -EINVAL;
++
++ printk(KERN_DEBUG "%s: base = %08x, aux = %08x\n", __FUNCTION__,
++ base, aux);
++
++ /* Different mappings for local bus IDE and PCMCIA IDE */
++ if(base == CMX270_SB270_IDECS0_VIRT) {
++ hw.io_ports[IDE_DATA_OFFSET] = base + 0;
++ hw.io_ports[IDE_ERROR_OFFSET] = base + (0x1<<3);
++ hw.io_ports[IDE_NSECTOR_OFFSET]= base + (0x2<<3);
++ hw.io_ports[IDE_SECTOR_OFFSET]= base + (0x3<<3);
++ hw.io_ports[IDE_LCYL_OFFSET]= base + (0x4<<3);
++ hw.io_ports[IDE_HCYL_OFFSET]= base + (0x5<<3);
++ hw.io_ports[IDE_SELECT_OFFSET]= base + (0x6<<3);
++ hw.io_ports[IDE_STATUS_OFFSET]= base + (0x7<<3);
++ hw.io_ports[IDE_CONTROL_OFFSET] = aux+(0x6<<3);
++ }
++ else if (base == CMX270_ATX_IDECS0_VIRT) { /* atx base */
++ hw.io_ports[IDE_DATA_OFFSET] = base + 0;
++ hw.io_ports[IDE_ERROR_OFFSET] = base + 8;
++ hw.io_ports[IDE_NSECTOR_OFFSET]= base + 2;
++ hw.io_ports[IDE_SECTOR_OFFSET]= base + 10;
++ hw.io_ports[IDE_LCYL_OFFSET]= base + 4;
++ hw.io_ports[IDE_HCYL_OFFSET]= base + 12;
++ hw.io_ports[IDE_SELECT_OFFSET]= base + 6; //6;
++ hw.io_ports[IDE_STATUS_OFFSET]= base + 14;
++ hw.io_ports[IDE_CONTROL_OFFSET] = (aux+0x6);
++ } else {
++ printk(KERN_DEBUG "%s: registering wrong IDE i/f\n", __FUNCTION__);
++ hw.io_ports[IDE_DATA_OFFSET] = base + 8;
++ hw.io_ports[IDE_ERROR_OFFSET] = base + 13;
++ hw.io_ports[IDE_NSECTOR_OFFSET] = base + 2;
++ hw.io_ports[IDE_SECTOR_OFFSET] = base + 3;
++ hw.io_ports[IDE_LCYL_OFFSET] = base + 4;
++ hw.io_ports[IDE_HCYL_OFFSET] = base + 5;
++ hw.io_ports[IDE_SELECT_OFFSET] = base + 6;
++ hw.io_ports[IDE_STATUS_OFFSET] = base + 7;
++ hw.io_ports[IDE_CONTROL_OFFSET] = aux;
++ }
++
++ hw.irq = irq;
++
++ return ide_register_hw(&hw, hwif);
++}
++
++static int __init cmx270_ide_init(void)
++{
++ int retval = 0;
++
++ if (!(machine_is_armcore()))
++ goto out;
++
++ printk("CM-X270: initializing IDE interface\n");
++
++ MSC1 = 0x7ffc7ff4;
++
++ /* Interrupts on rising edge: lines are inverted before they get to
++ the PXA */
++ pxa_gpio_mode(IRQ_TO_GPIO(CMX270_IDE_IRQ));
++
++ /* try SB-X270 */
++ set_irq_type(CMX270_IDE_IRQ, IRQT_RISING);
++ retval = cmx270_ide_register(CMX270_SB270_IDECS0_VIRT,
++ CMX270_SB270_IDECS1_VIRT,
++ CMX270_IDE_IRQ, &ifs[0]);
++ if (retval >= 0) {
++ printk(KERN_DEBUG "%s: found IDE interface on SB-X270\n",
++ __FUNCTION__);
++ goto out;
++ }
++
++ /* SB-X270 detection failed, try ATX */
++ set_irq_type(CMX270_IDE_IRQ, IRQT_FALLING);
++ retval = cmx270_ide_register(CMX270_ATX_IDECS0_VIRT,
++ CMX270_ATX_IDECS1_VIRT,
++ CMX270_IDE_IRQ, &ifs[0]);
++
++ if ( retval >= 0 ) {
++ printk(KERN_DEBUG "%s: found IDE interface on ATX\n",
++ __FUNCTION__);
++ goto out;
++ }
++
++ out:
++ return retval;
++}
++
++module_init(cmx270_ide_init);
++
++MODULE_AUTHOR("CompuLab");
++MODULE_LICENSE("GPL");
++MODULE_DESCRIPTION("CompuLab CM-X270 IDE driver");
+diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
+index 550f297..ed5bb70 100644
+--- a/drivers/mfd/Kconfig
++++ b/drivers/mfd/Kconfig
+@@ -23,3 +23,13 @@ config MCP_UCB1200_TS
+ depends on MCP_UCB1200 && INPUT
+
+ endmenu
++
++config UCB1400
++ tristate
++
++config UCB1400_TS
++ tristate "UCB1400 Touchscreen support"
++ depends on ARCH_LUBBOCK || MACH_MAINSTONE || MACH_ARMCORE
++ select UCB1400
++ select SND_AC97_BUS
++
+diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
+index adb29b5..24429d1 100644
+--- a/drivers/mfd/Makefile
++++ b/drivers/mfd/Makefile
+@@ -10,3 +10,10 @@ obj-$(CONFIG_MCP_UCB1200_TS) += ucb1x00-
+ ifeq ($(CONFIG_SA1100_ASSABET),y)
+ obj-$(CONFIG_MCP_UCB1200) += ucb1x00-assabet.o
+ endif
++
++ucb1400-core-y := ucb1x00-core.o mcp-ac97.o
++obj-$(CONFIG_UCB1400_TS) += ucb1400-core.o ucb1x00-ts.o
++
++ucb1400-core-$(CONFIG_UCB1400) := ucb1x00-core.o mcp-ac97.o
++obj-$(CONFIG_UCB1400_TS) += ucb1400-core.o ucb1x00-ts.o
++
+diff --git a/drivers/mfd/mcp-ac97.c b/drivers/mfd/mcp-ac97.c
+new file mode 100644
+index 0000000..223f8c2
+--- /dev/null
++++ b/drivers/mfd/mcp-ac97.c
+@@ -0,0 +1,151 @@
++/*
++ * linux/drivers/misc/mcp-ac97.c
++ *
++ * Author: Nicolas Pitre
++ * Created: Jan 14, 2005
++ * Copyright: (C) MontaVista Software Inc.
++ *
++ * 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.
++ *
++ * This module provides the minimum replacement for mcp-core.c allowing for
++ * the UCB1400 chip to be driven by the ucb1x00 driver over an AC97 link.
++ */
++
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/errno.h>
++#include <linux/device.h>
++
++#include <sound/driver.h>
++#include <sound/core.h>
++#include <sound/ac97_codec.h>
++
++#include "mcp.h"
++
++/* ucb1x00 SIB register to ucb1400 AC-link register mapping */
++
++static const unsigned char regmap[] = {
++ 0x5a, /* UCB_IO_DATA */
++ 0X5C, /* UCB_IO_DIR */
++ 0X5E, /* UCB_IE_RIS */
++ 0x60, /* UCB_IE_FAL */
++ 0x62, /* UCB_IE_STATUS */
++ 0, /* UCB_TC_A */
++ 0, /* UCB_TC_B */
++ 0, /* UCB_AC_A */
++ 0, /* UCB_AC_B */
++ 0x64, /* UCB_TS_CR */
++ 0x66, /* UCB_ADC_CR */
++ 0x68, /* UCB_ADC_DATA */
++ 0x7e, /* UCB_ID */
++ 0, /* UCB_MODE */
++};
++
++unsigned int mcp_reg_read(struct mcp *mcp, unsigned int reg)
++{
++ ac97_t *ac97 = to_ac97_t(mcp->dev);
++ if (reg < ARRAY_SIZE(regmap)) {
++ reg = regmap[reg];
++ if (reg)
++ return ac97->bus->ops->read(ac97, reg);
++ }
++ return -1;
++}
++EXPORT_SYMBOL(mcp_reg_read);
++
++void mcp_reg_write(struct mcp *mcp, unsigned int reg, unsigned int val)
++{
++ ac97_t *ac97 = to_ac97_t(mcp->dev);
++ if (reg < ARRAY_SIZE(regmap)) {
++ reg = regmap[reg];
++ if (reg)
++ ac97->bus->ops->write(ac97, reg, val);
++ }
++}
++EXPORT_SYMBOL(mcp_reg_write);
++
++void mcp_enable(struct mcp *mcp)
++{
++}
++EXPORT_SYMBOL(mcp_enable);
++
++void mcp_disable(struct mcp *mcp)
++{
++}
++EXPORT_SYMBOL(mcp_disable);
++
++#define to_mcp_driver(d) container_of(d, struct mcp_driver, drv)
++
++static int mcp_probe(struct device *dev)
++{
++ struct mcp_driver *drv = to_mcp_driver(dev->driver);
++ struct mcp *mcp;
++ int ret;
++
++ ret = -ENOMEM;
++ mcp = kmalloc(sizeof(*mcp), GFP_KERNEL);
++ if (mcp) {
++ memset(mcp, 0, sizeof(*mcp));
++ mcp->owner = THIS_MODULE;
++ mcp->dev = dev;
++ ret = drv->probe(mcp);
++ if (ret)
++ kfree(mcp);
++ }
++ if (!ret)
++ dev_set_drvdata(dev, mcp);
++ return ret;
++}
++
++static int mcp_remove(struct device *dev)
++{
++ struct mcp_driver *drv = to_mcp_driver(dev->driver);
++ struct mcp *mcp = dev_get_drvdata(dev);
++
++ drv->remove(mcp);
++ dev_set_drvdata(dev, NULL);
++ kfree(mcp);
++ return 0;
++}
++
++static int mcp_suspend(struct device *dev, pm_message_t state)
++{
++ struct mcp_driver *drv = to_mcp_driver(dev->driver);
++ struct mcp *mcp = dev_get_drvdata(dev);
++ int ret = 0;
++
++ if (drv->suspend)
++ ret = drv->suspend(mcp, state);
++ return ret;
++}
++
++static int mcp_resume(struct device *dev)
++{
++ struct mcp_driver *drv = to_mcp_driver(dev->driver);
++ struct mcp *mcp = dev_get_drvdata(dev);
++ int ret = 0;
++
++ if (drv->resume)
++ ret = drv->resume(mcp);
++ return ret;
++}
++
++int mcp_driver_register(struct mcp_driver *mcpdrv)
++{
++ mcpdrv->drv.owner = THIS_MODULE;
++ mcpdrv->drv.bus = &ac97_bus_type;
++ mcpdrv->drv.probe = mcp_probe;
++ mcpdrv->drv.remove = mcp_remove;
++ mcpdrv->drv.suspend = mcp_suspend;
++ mcpdrv->drv.resume = mcp_resume;
++ return driver_register(&mcpdrv->drv);
++}
++
++void mcp_driver_unregister(struct mcp_driver *mcpdrv)
++{
++ driver_unregister(&mcpdrv->drv);
++}
++
++MODULE_LICENSE("GPL");
+diff --git a/drivers/mfd/mcp-core.c b/drivers/mfd/mcp-core.c
+index 75f401d..2a7c176 100644
+--- a/drivers/mfd/mcp-core.c
++++ b/drivers/mfd/mcp-core.c
+@@ -208,6 +208,7 @@ struct mcp *mcp_host_alloc(struct device
+ mcp->attached_device.bus = &mcp_bus_type;
+ mcp->attached_device.dma_mask = parent->dma_mask;
+ mcp->attached_device.release = mcp_release;
++ mcp->dev = &mcp->attached_device;
+ }
+ return mcp;
+ }
+diff --git a/drivers/mfd/mcp.h b/drivers/mfd/mcp.h
+index c093a93..2897d8c 100644
+--- a/drivers/mfd/mcp.h
++++ b/drivers/mfd/mcp.h
+@@ -19,11 +19,12 @@ struct mcp {
+ int use_count;
+ unsigned int sclk_rate;
+ unsigned int rw_timeout;
+- dma_device_t dma_audio_rd;
+- dma_device_t dma_audio_wr;
+- dma_device_t dma_telco_rd;
+- dma_device_t dma_telco_wr;
++/* dma_device_t dma_audio_rd; */
++/* dma_device_t dma_audio_wr; */
++/* dma_device_t dma_telco_rd; */
++/* dma_device_t dma_telco_wr; */
+ struct device attached_device;
++ struct device *dev;
+ };
+
+ struct mcp_ops {
+diff --git a/drivers/mfd/ucb1x00-core.c b/drivers/mfd/ucb1x00-core.c
+index aff83f9..f9a532b 100644
+--- a/drivers/mfd/ucb1x00-core.c
++++ b/drivers/mfd/ucb1x00-core.c
+@@ -23,6 +23,7 @@ #include <linux/slab.h>
+ #include <linux/init.h>
+ #include <linux/errno.h>
+ #include <linux/interrupt.h>
++#include <linux/kthread.h>
+ #include <linux/device.h>
+ #include <linux/mutex.h>
+
+@@ -31,6 +32,12 @@ #include <asm/hardware.h>
+
+ #include "ucb1x00.h"
+
++#if defined(CONFIG_UCB1400) || defined(CONFIG_UCB1400_MODULE)
++#define UCB_IS_1400(id) ((id) == UCB_ID_1400)
++#else
++#define UCB_IS_1400(id) (0)
++#endif
++
+ static DEFINE_MUTEX(ucb1x00_mutex);
+ static LIST_HEAD(ucb1x00_drivers);
+ static LIST_HEAD(ucb1x00_devices);
+@@ -58,9 +65,9 @@ void ucb1x00_io_set_dir(struct ucb1x00 *
+ spin_lock_irqsave(&ucb->io_lock, flags);
+ ucb->io_dir |= out;
+ ucb->io_dir &= ~in;
++ spin_unlock_irqrestore(&ucb->io_lock, flags);
+
+ ucb1x00_reg_write(ucb, UCB_IO_DIR, ucb->io_dir);
+- spin_unlock_irqrestore(&ucb->io_lock, flags);
+ }
+
+ /**
+@@ -86,9 +93,9 @@ void ucb1x00_io_write(struct ucb1x00 *uc
+ spin_lock_irqsave(&ucb->io_lock, flags);
+ ucb->io_out |= set;
+ ucb->io_out &= ~clear;
++ spin_unlock_irqrestore(&ucb->io_lock, flags);
+
+ ucb1x00_reg_write(ucb, UCB_IO_DATA, ucb->io_out);
+- spin_unlock_irqrestore(&ucb->io_lock, flags);
+ }
+
+ /**
+@@ -178,7 +185,7 @@ unsigned int ucb1x00_adc_read(struct ucb
+ schedule_timeout(1);
+ }
+
+- return UCB_ADC_DAT(val);
++ return UCB_IS_1400(ucb->id) ? (val & 0x3ff) : ((val & 0x7fe0) >> 5);
+ }
+
+ /**
+@@ -223,6 +230,47 @@ static irqreturn_t ucb1x00_irq(int irqnr
+ return IRQ_HANDLED;
+ }
+
++/*
++ * A restriction with interrupts exists when using the ucb1400, as
++ * the codec read/write routines may sleep while waiting for codec
++ * access completion and uses semaphores for access control to the
++ * AC97 bus. A complete codec read cycle could take anywhere from
++ * 60 to 100uSec so we *definitely* don't want to spin inside the
++ * interrupt handler waiting for codec access. So, we handle the
++ * interrupt by scheduling a RT kernel thread to run in process
++ * context instead of interrupt context.
++ */
++static int ucb1x00_thread(void *_ucb)
++{
++ struct task_struct *tsk = current;
++ struct ucb1x00 *ucb = _ucb;
++
++ tsk->policy = SCHED_FIFO;
++ tsk->rt_priority = 1;
++
++ while (!kthread_should_stop()) {
++ wait_for_completion_interruptible(&ucb->irq_wait);
++ if (try_to_freeze())
++ continue;
++ ucb1x00_irq(ucb->irq, ucb, NULL);
++ enable_irq(ucb->irq);
++ }
++
++ ucb->irq_task = NULL;
++ return 0;
++}
++
++static irqreturn_t ucb1x00_threaded_irq(int irqnr, void *devid, struct pt_regs *regs)
++{
++ struct ucb1x00 *ucb = devid;
++ if (irqnr == ucb->irq) {
++ disable_irq(ucb->irq);
++ complete(&ucb->irq_wait);
++ return IRQ_HANDLED;
++ }
++ return IRQ_NONE;
++}
++
+ /**
+ * ucb1x00_hook_irq - hook a UCB1x00 interrupt
+ * @ucb: UCB1x00 structure describing chip
+@@ -276,18 +324,22 @@ void ucb1x00_enable_irq(struct ucb1x00 *
+
+ if (idx < 16) {
+ spin_lock_irqsave(&ucb->lock, flags);
+-
+- ucb1x00_enable(ucb);
+- if (edges & UCB_RISING) {
++ if (edges & UCB_RISING)
+ ucb->irq_ris_enbl |= 1 << idx;
+- ucb1x00_reg_write(ucb, UCB_IE_RIS, ucb->irq_ris_enbl);
+- }
+- if (edges & UCB_FALLING) {
++ if (edges & UCB_FALLING)
+ ucb->irq_fal_enbl |= 1 << idx;
+- ucb1x00_reg_write(ucb, UCB_IE_FAL, ucb->irq_fal_enbl);
+- }
+- ucb1x00_disable(ucb);
+ spin_unlock_irqrestore(&ucb->lock, flags);
++
++ ucb1x00_enable(ucb);
++
++ /* This prevents spurious interrupts on the UCB1400 */
++ ucb1x00_reg_write(ucb, UCB_IE_CLEAR, 1 << idx);
++ ucb1x00_reg_write(ucb, UCB_IE_CLEAR, 0);
++
++ ucb1x00_reg_write(ucb, UCB_IE_RIS, ucb->irq_ris_enbl);
++ ucb1x00_reg_write(ucb, UCB_IE_FAL, ucb->irq_fal_enbl);
++
++ ucb1x00_disable(ucb);
+ }
+ }
+
+@@ -305,18 +357,16 @@ void ucb1x00_disable_irq(struct ucb1x00
+
+ if (idx < 16) {
+ spin_lock_irqsave(&ucb->lock, flags);
+-
+- ucb1x00_enable(ucb);
+- if (edges & UCB_RISING) {
++ if (edges & UCB_RISING)
+ ucb->irq_ris_enbl &= ~(1 << idx);
+- ucb1x00_reg_write(ucb, UCB_IE_RIS, ucb->irq_ris_enbl);
+- }
+- if (edges & UCB_FALLING) {
++ if (edges & UCB_FALLING)
+ ucb->irq_fal_enbl &= ~(1 << idx);
+- ucb1x00_reg_write(ucb, UCB_IE_FAL, ucb->irq_fal_enbl);
+- }
+- ucb1x00_disable(ucb);
+ spin_unlock_irqrestore(&ucb->lock, flags);
++
++ ucb1x00_enable(ucb);
++ ucb1x00_reg_write(ucb, UCB_IE_RIS, ucb->irq_ris_enbl);
++ ucb1x00_reg_write(ucb, UCB_IE_FAL, ucb->irq_fal_enbl);
++ ucb1x00_disable(ucb);
+ }
+ }
+
+@@ -349,16 +399,17 @@ int ucb1x00_free_irq(struct ucb1x00 *ucb
+ ucb->irq_ris_enbl &= ~(1 << idx);
+ ucb->irq_fal_enbl &= ~(1 << idx);
+
+- ucb1x00_enable(ucb);
+- ucb1x00_reg_write(ucb, UCB_IE_RIS, ucb->irq_ris_enbl);
+- ucb1x00_reg_write(ucb, UCB_IE_FAL, ucb->irq_fal_enbl);
+- ucb1x00_disable(ucb);
+-
+ irq->fn = NULL;
+ irq->devid = NULL;
+ ret = 0;
+ }
+ spin_unlock_irq(&ucb->lock);
++
++ ucb1x00_enable(ucb);
++ ucb1x00_reg_write(ucb, UCB_IE_RIS, ucb->irq_ris_enbl);
++ ucb1x00_reg_write(ucb, UCB_IE_FAL, ucb->irq_fal_enbl);
++ ucb1x00_disable(ucb);
++
+ return ret;
+
+ bad:
+@@ -478,7 +529,7 @@ static int ucb1x00_probe(struct mcp *mcp
+ mcp_enable(mcp);
+ id = mcp_reg_read(mcp, UCB_ID);
+
+- if (id != UCB_ID_1200 && id != UCB_ID_1300) {
++ if (id != UCB_ID_1200 && id != UCB_ID_1300 && !UCB_IS_1400(id)) {
+ printk(KERN_WARNING "UCB1x00 ID not found: %04x\n", id);
+ goto err_disable;
+ }
+@@ -491,12 +542,13 @@ static int ucb1x00_probe(struct mcp *mcp
+ memset(ucb, 0, sizeof(struct ucb1x00));
+
+ ucb->cdev.class = &ucb1x00_class;
+- ucb->cdev.dev = &mcp->attached_device;
++ ucb->cdev.dev = mcp->dev;
+ strlcpy(ucb->cdev.class_id, "ucb1x00", sizeof(ucb->cdev.class_id));
+
+ spin_lock_init(&ucb->lock);
+ spin_lock_init(&ucb->io_lock);
+ sema_init(&ucb->adc_sem, 1);
++ init_completion(&ucb->irq_wait);
+
+ ucb->id = id;
+ ucb->mcp = mcp;
+@@ -507,13 +559,22 @@ static int ucb1x00_probe(struct mcp *mcp
+ goto err_free;
+ }
+
+- ret = request_irq(ucb->irq, ucb1x00_irq, SA_TRIGGER_RISING,
+- "UCB1x00", ucb);
++ ret = request_irq(ucb->irq,
++ UCB_IS_1400(id) ? ucb1x00_threaded_irq : ucb1x00_irq,
++ SA_TRIGGER_RISING, "UCB1x00", ucb);
+ if (ret) {
+ printk(KERN_ERR "ucb1x00: unable to grab irq%d: %d\n",
+ ucb->irq, ret);
+ goto err_free;
+ }
++ if (UCB_IS_1400(id)) {
++ ucb->irq_task = kthread_run(ucb1x00_thread, ucb, "kUCB1x00d");
++ if (IS_ERR(ucb->irq_task)) {
++ ret = PTR_ERR(ucb->irq_task);
++ ucb->irq_task = NULL;
++ goto err_irq;
++ }
++ }
+
+ mcp_set_drvdata(mcp, ucb);
+
+@@ -531,6 +592,8 @@ static int ucb1x00_probe(struct mcp *mcp
+ goto out;
+
+ err_irq:
++ if (UCB_IS_1400(id) && ucb->irq_task)
++ kthread_stop(ucb->irq_task);
+ free_irq(ucb->irq, ucb);
+ err_free:
+ kfree(ucb);
+@@ -553,6 +616,10 @@ static void ucb1x00_remove(struct mcp *m
+ }
+ mutex_unlock(&ucb1x00_mutex);
+
++ if (UCB_IS_1400(ucb->id) && ucb->irq_task) {
++ complete(&ucb->irq_wait);
++ kthread_stop(ucb->irq_task);
++ }
+ free_irq(ucb->irq, ucb);
+ class_device_unregister(&ucb->cdev);
+ }
+diff --git a/drivers/mfd/ucb1x00-ts.c b/drivers/mfd/ucb1x00-ts.c
+index 79fd062..e68132d 100644
+--- a/drivers/mfd/ucb1x00-ts.c
++++ b/drivers/mfd/ucb1x00-ts.c
+@@ -35,7 +35,15 @@ #include <linux/kthread.h>
+
+ #include <asm/dma.h>
+ #include <asm/semaphore.h>
++
++/* FIXME: proper machine detection should be implemented */
++#ifdef CONFIG_SA1100_COLLIE
+ #include <asm/arch/collie.h>
++#else
++#define machine_is_collie() (0)
++#define COLLIE_TC35143_GPIO_TBL_CHK (0)
++#endif
++
+ #include <asm/mach-types.h>
+
+ #include "ucb1x00.h"
+@@ -45,7 +53,7 @@ struct ucb1x00_ts {
+ struct input_dev *idev;
+ struct ucb1x00 *ucb;
+
+- wait_queue_head_t irq_wait;
++ struct completion irq_wait;
+ struct task_struct *rtask;
+ u16 x_res;
+ u16 y_res;
+@@ -98,7 +106,8 @@ static inline unsigned int ucb1x00_ts_re
+ udelay(55);
+
+ return ucb1x00_adc_read(ts->ucb, UCB_ADC_INP_AD2, ts->adcsync);
+- } else {
++ }
++ else {
+ ucb1x00_reg_write(ts->ucb, UCB_TS_CR,
+ UCB_TS_CR_TSMX_POW | UCB_TS_CR_TSPX_POW |
+ UCB_TS_CR_TSMY_GND | UCB_TS_CR_TSPY_GND |
+@@ -205,7 +214,6 @@ static int ucb1x00_thread(void *_ts)
+ {
+ struct ucb1x00_ts *ts = _ts;
+ struct task_struct *tsk = current;
+- DECLARE_WAITQUEUE(wait, tsk);
+ int valid;
+
+ /*
+@@ -217,10 +225,8 @@ static int ucb1x00_thread(void *_ts)
+
+ valid = 0;
+
+- add_wait_queue(&ts->irq_wait, &wait);
+ while (!kthread_should_stop()) {
+ unsigned int x, y, p;
+- signed long timeout;
+
+ ts->restart = 0;
+
+@@ -242,8 +248,6 @@ static int ucb1x00_thread(void *_ts)
+
+
+ if (ucb1x00_ts_pen_down(ts)) {
+- set_task_state(tsk, TASK_INTERRUPTIBLE);
+-
+ ucb1x00_enable_irq(ts->ucb, UCB_IRQ_TSPX, machine_is_collie() ? UCB_RISING : UCB_FALLING);
+ ucb1x00_disable(ts->ucb);
+
+@@ -256,7 +260,15 @@ static int ucb1x00_thread(void *_ts)
+ valid = 0;
+ }
+
+- timeout = MAX_SCHEDULE_TIMEOUT;
++ /*
++ * Since ucb1x00_enable_irq() might sleep due
++ * to the way the UCB1400 regs are accessed, we
++ * can't use set_task_state() before that call,
++ * and not changing state before enabling the
++ * interrupt is racy. A completion handler avoids
++ * the issue.
++ */
++ wait_for_completion_interruptible(&ts->irq_wait);
+ } else {
+ ucb1x00_disable(ts->ucb);
+
+@@ -271,16 +283,12 @@ static int ucb1x00_thread(void *_ts)
+ }
+
+ set_task_state(tsk, TASK_INTERRUPTIBLE);
+- timeout = HZ / 100;
++ schedule_timeout(HZ/100);
+ }
+
+ try_to_freeze();
+-
+- schedule_timeout(timeout);
+ }
+
+- remove_wait_queue(&ts->irq_wait, &wait);
+-
+ ts->rtask = NULL;
+ return 0;
+ }
+@@ -293,7 +301,7 @@ static void ucb1x00_ts_irq(int idx, void
+ {
+ struct ucb1x00_ts *ts = id;
+ ucb1x00_disable_irq(ts->ucb, UCB_IRQ_TSPX, UCB_FALLING);
+- wake_up(&ts->irq_wait);
++ complete(&ts->irq_wait);
+ }
+
+ static int ucb1x00_ts_open(struct input_dev *idev)
+@@ -303,7 +311,7 @@ static int ucb1x00_ts_open(struct input_
+
+ BUG_ON(ts->rtask);
+
+- init_waitqueue_head(&ts->irq_wait);
++ init_completion(&ts->irq_wait);
+ ret = ucb1x00_hook_irq(ts->ucb, UCB_IRQ_TSPX, ucb1x00_ts_irq, ts);
+ if (ret < 0)
+ goto out;
+@@ -337,8 +345,10 @@ static void ucb1x00_ts_close(struct inpu
+ {
+ struct ucb1x00_ts *ts = idev->private;
+
+- if (ts->rtask)
++ if (ts->rtask) {
++ complete(&ts->irq_wait);
+ kthread_stop(ts->rtask);
++ }
+
+ ucb1x00_enable(ts->ucb);
+ ucb1x00_free_irq(ts->ucb, UCB_IRQ_TSPX, ts);
+@@ -358,7 +368,7 @@ static int ucb1x00_ts_resume(struct ucb1
+ * after sleep.
+ */
+ ts->restart = 1;
+- wake_up(&ts->irq_wait);
++ complete(&ts->irq_wait);
+ }
+ return 0;
+ }
+diff --git a/drivers/mfd/ucb1x00.h b/drivers/mfd/ucb1x00.h
+index 9c9a647..ff04dc9 100644
+--- a/drivers/mfd/ucb1x00.h
++++ b/drivers/mfd/ucb1x00.h
+@@ -94,6 +94,7 @@ #define UCB_ADC_DAT(x) (((x) & 0x7fe0)
+ #define UCB_ID 0x0c
+ #define UCB_ID_1200 0x1004
+ #define UCB_ID_1300 0x1005
++#define UCB_ID_1400 0x4304
+
+ #define UCB_MODE 0x0d
+ #define UCB_MODE_DYN_VFLAG_ENA (1 << 12)
+@@ -110,6 +111,8 @@ struct ucb1x00 {
+ spinlock_t lock;
+ struct mcp *mcp;
+ unsigned int irq;
++ struct task_struct *irq_task;
++ struct completion irq_wait;
+ struct semaphore adc_sem;
+ spinlock_t io_lock;
+ u16 id;
+@@ -122,6 +125,7 @@ struct ucb1x00 {
+ struct class_device cdev;
+ struct list_head node;
+ struct list_head devs;
++
+ };
+
+ struct ucb1x00_driver;
+diff --git a/drivers/mtd/nand/Kconfig b/drivers/mtd/nand/Kconfig
+index 1fc4c13..c238ede 100644
+--- a/drivers/mtd/nand/Kconfig
++++ b/drivers/mtd/nand/Kconfig
+@@ -182,6 +182,10 @@ config MTD_NAND_DISKONCHIP_BBTWRITE
+ config MTD_NAND_SHARPSL
+ bool "Support for NAND Flash on Sharp SL Series (C7xx + others)"
+ depends on MTD_NAND && ARCH_PXA
++
++ config MTD_NAND_CM_X270
++ tristate "Support for NAND Flash on CompuLab CM-X270"
++ depends on MTD_NAND && ARCH_PXA
+
+ config MTD_NAND_NANDSIM
+ bool "Support for NAND Flash Simulator"
+diff --git a/drivers/mtd/nand/Makefile b/drivers/mtd/nand/Makefile
+index 4174202..9a9e0c9 100644
+--- a/drivers/mtd/nand/Makefile
++++ b/drivers/mtd/nand/Makefile
+@@ -17,6 +17,7 @@ obj-$(CONFIG_MTD_NAND_DISKONCHIP) += dis
+ obj-$(CONFIG_MTD_NAND_H1900) += h1910.o
+ obj-$(CONFIG_MTD_NAND_RTC_FROM4) += rtc_from4.o
+ obj-$(CONFIG_MTD_NAND_SHARPSL) += sharpsl.o
++obj-$(CONFIG_MTD_NAND_CM_X270) += cmx270-nand.o
+ obj-$(CONFIG_MTD_NAND_NANDSIM) += nandsim.o
+
+ nand-objs = nand_base.o nand_bbt.o
+diff --git a/drivers/mtd/nand/cmx270-nand.c b/drivers/mtd/nand/cmx270-nand.c
+new file mode 100644
+index 0000000..32b6288
+--- /dev/null
++++ b/drivers/mtd/nand/cmx270-nand.c
+@@ -0,0 +1,281 @@
++/*
++ * drivers/mtd/nand/cmx270-nand.c
++ *
++ * Copyright (C) 2005 Compulab, Ltd. (mike@compulab.co.il)
++ *
++ * Derived from drivers/mtd/nand/h1910.c
++ * Copyright (C) 2002 Marius Gröger (mag@sysgo.de)
++ * Copyright (c) 2001 Thomas Gleixner (gleixner@autronix.de)
++ *
++ *
++ * 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.
++ *
++ * Overview:
++ * This is a device driver for the NAND flash device found on the
++ * CM-X270 board.
++ */
++
++#include <linux/config.h>
++#include <linux/slab.h>
++#include <linux/init.h>
++#include <linux/module.h>
++#include <linux/mtd/mtd.h>
++#include <linux/mtd/nand.h>
++#include <linux/mtd/partitions.h>
++
++#include <asm/io.h>
++#include <asm/irq.h>
++#include <asm/arch/hardware.h>
++#include <asm/arch/pxa-regs.h>
++
++#define GPIO_NAND_CS (11)
++#define GPIO_NAND_RB (89)
++
++#define DRAIN_WB() \
++ do { \
++ unsigned char dummy; \
++ asm volatile ("mcr p15, 0, r0, c7, c10, 4":::"r0"); \
++ dummy=*((volatile unsigned char*)UNCACHED_ADDR); \
++ } while(0);
++
++/*
++ * MTD structure for CM-X270 board
++ */
++static struct mtd_info *cmx270_nand_mtd = NULL;
++
++/*
++ * Module stuff
++ */
++
++#ifdef CONFIG_MTD_PARTITIONS
++/*
++ * Define static partitions for flash device
++ */
++static struct mtd_partition partition_info[] = {
++ [0] = {
++ .name = "cmx270-0",
++ .offset = 0,
++ .size = MTDPART_SIZ_FULL
++ }
++};
++#define NUM_PARTITIONS ARRAY_SIZE(partition_info)
++
++#endif
++
++
++static u_char cmx270_read_byte(struct mtd_info *mtd)
++{
++ struct nand_chip *this = mtd->priv;
++ return (readl(this->IO_ADDR_R) >> 16);
++}
++
++static void cmx270_write_byte(struct mtd_info *mtd, u_char byte)
++{
++ struct nand_chip *this = mtd->priv;
++ writel((byte << 16), this->IO_ADDR_W);
++}
++
++static void cmx270_write_buf(struct mtd_info *mtd, const u_char *buf, int len)
++{
++ int i;
++ struct nand_chip *this = mtd->priv;
++
++ for (i=0; i<len; i++) {
++ writel((*buf++ << 16), this->IO_ADDR_W);
++ }
++}
++
++static void cmx270_read_buf(struct mtd_info *mtd, u_char *buf, int len)
++{
++ int i;
++ struct nand_chip *this = mtd->priv;
++
++ for (i=0; i<len; i++) {
++ *buf++ = readl(this->IO_ADDR_R) >> 16;
++ }
++}
++
++static int cmx270_verify_buf(struct mtd_info *mtd, const u_char *buf, int len)
++{
++ int i;
++ struct nand_chip *this = mtd->priv;
++
++ for (i=0; i<len; i++) {
++ if ( buf[i] != (u_char)(readl(this->IO_ADDR_R) >> 16) )
++ return -EFAULT;
++ }
++
++ return 0;
++}
++
++static inline void nand_cs_on(void)
++{
++ GPCR(GPIO_NAND_CS) = GPIO_bit(GPIO_NAND_CS);
++}
++
++static void nand_cs_off(void)
++{
++ DRAIN_WB();
++
++ GPSR(GPIO_NAND_CS) = GPIO_bit(GPIO_NAND_CS);
++}
++
++/*
++ * hardware specific access to control-lines
++ */
++static void cmx270_hwcontrol(struct mtd_info *mtd, int cmd)
++{
++ struct nand_chip* this = (struct nand_chip *) (mtd->priv);
++ unsigned int nandaddr = (unsigned int)this->IO_ADDR_R;
++
++ DRAIN_WB();
++
++ switch(cmd) {
++
++ case NAND_CTL_SETCLE:
++ nandaddr |= (1 << 2);
++ this->IO_ADDR_R = (void __iomem*)nandaddr;
++ this->IO_ADDR_W = (void __iomem*)nandaddr;
++ break;
++ case NAND_CTL_CLRCLE:
++ nandaddr &= ~(1 << 2);
++ this->IO_ADDR_R = (void __iomem*)nandaddr;
++ this->IO_ADDR_W = (void __iomem*)nandaddr;
++ break;
++
++ case NAND_CTL_SETALE:
++ nandaddr |= (1 << 3);
++ this->IO_ADDR_R = (void __iomem*)nandaddr;
++ this->IO_ADDR_W = (void __iomem*)nandaddr;
++ break;
++ case NAND_CTL_CLRALE:
++ nandaddr &= ~(1 << 3);
++ this->IO_ADDR_R = (void __iomem*)nandaddr;
++ this->IO_ADDR_W = (void __iomem*)nandaddr;
++ break;
++
++ case NAND_CTL_SETNCE:
++ nand_cs_on();
++ break;
++ case NAND_CTL_CLRNCE:
++ nand_cs_off();
++ break;
++ }
++
++ DRAIN_WB();
++}
++
++/*
++ * read device ready pin
++ */
++static int cmx270_device_ready(struct mtd_info *mtd)
++{
++ DRAIN_WB();
++ return ( GPLR(GPIO_NAND_RB) & GPIO_bit(GPIO_NAND_RB) );
++}
++
++/*
++ * Main initialization routine
++ */
++static int __init cmx270_init (void)
++{
++ struct nand_chip *this;
++ const char *part_type = 0;
++ int mtd_parts_nb = 0;
++ struct mtd_partition *mtd_parts = 0;
++ static unsigned int nandaddr = 0;
++
++
++ /* Allocate memory for MTD device structure and private data */
++ cmx270_nand_mtd = kmalloc(sizeof(struct mtd_info) +
++ sizeof(struct nand_chip),
++ GFP_KERNEL);
++ if (!cmx270_nand_mtd) {
++ printk("Unable to allocate CM-X270 NAND MTD device structure.\n");
++ return -ENOMEM;
++ }
++
++ nandaddr = (volatile unsigned int)ioremap(PXA_CS1_PHYS, 100);
++
++ /* Get pointer to private data */
++ this = (struct nand_chip *) (&cmx270_nand_mtd[1]);
++
++ /* Initialize structures */
++ memset((char *) cmx270_nand_mtd, 0, sizeof(struct mtd_info));
++ memset((char *) this, 0, sizeof(struct nand_chip));
++
++ /* Link the private data with the MTD structure */
++ cmx270_nand_mtd->priv = this;
++
++ /* insert callbacks */
++ this->IO_ADDR_R = (void __iomem *)nandaddr;
++ this->IO_ADDR_W = (void __iomem *)nandaddr;
++ this->hwcontrol = cmx270_hwcontrol;
++/* this->dev_ready = cmx270_device_ready; /\* unknown whether that was correct or not so we will just do it like this *\/ */
++
++ /* 15 us command delay time */
++ this->chip_delay = 50;
++ this->eccmode = NAND_ECC_SOFT;
++
++ /* read/write functions */
++ this->read_byte = cmx270_read_byte;
++ this->write_byte = cmx270_write_byte;
++ this->read_buf = cmx270_read_buf;
++ this->write_buf = cmx270_write_buf;
++ this->verify_buf = cmx270_verify_buf;
++
++ /* Scan to find existence of the device */
++ if (nand_scan (cmx270_nand_mtd, 1)) {
++ printk(KERN_NOTICE "No NAND device - returning -ENXIO\n");
++ iounmap((void*)nandaddr);
++ kfree (cmx270_nand_mtd);
++ return -ENXIO;
++ }
++
++#ifdef CONFIG_MTD_CMDLINE_PARTS
++ mtd_parts_nb = parse_cmdline_partitions(cmx270_nand_mtd, &mtd_parts,
++ "cmx270");
++ if (mtd_parts_nb > 0)
++ part_type = "command line";
++ else
++ mtd_parts_nb = 0;
++#endif
++ if (mtd_parts_nb == 0)
++ {
++ mtd_parts = partition_info;
++ mtd_parts_nb = NUM_PARTITIONS;
++ part_type = "static";
++ }
++
++ /* Register the partitions */
++ printk(KERN_NOTICE "Using %s partition definition\n", part_type);
++ add_mtd_partitions(cmx270_nand_mtd, mtd_parts, mtd_parts_nb);
++
++ /* Return happy */
++ return 0;
++}
++module_init(cmx270_init);
++
++/*
++ * Clean up routine
++ */
++static void __exit cmx270_cleanup (void)
++{
++ struct nand_chip *this;
++
++ this = (struct nand_chip *) (&cmx270_nand_mtd[1]);
++ iounmap(this->IO_ADDR_R);
++
++ /* Release resources, unregister device */
++ nand_release (cmx270_nand_mtd);
++
++ /* Free the MTD device structure */
++ kfree (cmx270_nand_mtd);
++}
++module_exit(cmx270_cleanup);
++
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Mike Rapoport <mike at compulab dot co dot il>");
++MODULE_DESCRIPTION("NAND flash driver for Compulab CM-X270 Core");
+diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
+index aa633fa..505f92b 100644
+--- a/drivers/net/Kconfig
++++ b/drivers/net/Kconfig
+@@ -865,6 +865,14 @@ config DM9000
+ <file:Documentation/networking/net-modules.txt>. The module will be
+ called dm9000.
+
++config DM9000_NOEPROM
++ bool "DM9000 without EEPROM attached"
++ depends on DM9000
++ ---help---
++ Select this option if you have DM9000 chipset without EEPROM
++ containing the MAC address. In this case MAC address should
++ be set either by the bootloader or using ifconfig
++
+ config NET_VENDOR_RACAL
+ bool "Racal-Interlan (Micom) NI cards"
+ depends on NET_ETHERNET && ISA
+diff --git a/drivers/net/dm9000.c b/drivers/net/dm9000.c
+index 24996da..7e45756 100644
+--- a/drivers/net/dm9000.c
++++ b/drivers/net/dm9000.c
+@@ -561,8 +561,14 @@ #endif
+ ((u16 *) db->srom)[i] = read_srom_word(db, i);
+
+ /* Set Node Address */
++#ifndef CONFIG_DM9000_NOEPROM
+ for (i = 0; i < 6; i++)
+ ndev->dev_addr[i] = db->srom[i];
++#else
++ /* The Node Address was set by bootloader */
++ for (i=0; i<6; i++)
++ ndev->dev_addr[i] = ior(db, 0x10+i);
++#endif
+
+ if (!is_valid_ether_addr(ndev->dev_addr))
+ printk("%s: Invalid ethernet MAC address. Please "
+@@ -1098,6 +1104,10 @@ dm9000_phy_read(struct net_device *dev,
+ /* The read data keeps on REG_0D & REG_0E */
+ ret = (ior(db, DM9000_EPDRH) << 8) | ior(db, DM9000_EPDRL);
+
++/* if ( reg == MII_BMSR ) { */
++/* printk(KERN_WARNING "===> %s: ret = %x\n", __FUNCTION__, ret); */
++/* } */
++
+ /* restore the previous address */
+ writeb(reg_save, db->io_addr);
+
+@@ -1163,7 +1173,6 @@ dm9000_drv_resume(struct platform_device
+ if (netif_running(ndev)) {
+ dm9000_reset(db);
+ dm9000_init_dm9000(ndev);
+-
+ netif_device_attach(ndev);
+ }
+ }
+diff --git a/drivers/pcmcia/Makefile b/drivers/pcmcia/Makefile
+index bcecf51..b6a4173 100644
+--- a/drivers/pcmcia/Makefile
++++ b/drivers/pcmcia/Makefile
+@@ -68,4 +68,4 @@ sa1100_cs-$(CONFIG_SA1100_SIMPAD) += sa
+ pxa2xx_cs-$(CONFIG_ARCH_LUBBOCK) += pxa2xx_lubbock.o sa1111_generic.o
+ pxa2xx_cs-$(CONFIG_MACH_MAINSTONE) += pxa2xx_mainstone.o
+ pxa2xx_cs-$(CONFIG_PXA_SHARPSL) += pxa2xx_sharpsl.o
+-
++pxa2xx_cs-$(CONFIG_MACH_ARMCORE) += pxa2xx_cm_x270.o
+diff --git a/drivers/pcmcia/pxa2xx_cm_x270.c b/drivers/pcmcia/pxa2xx_cm_x270.c
+new file mode 100644
+index 0000000..eb4df11
+--- /dev/null
++++ b/drivers/pcmcia/pxa2xx_cm_x270.c
+@@ -0,0 +1,198 @@
++/*
++ * linux/drivers/pcmcia/pxa/pxa_armcore.c
++ *
++ * 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.
++ *
++ * Compulab Ltd., 2003
++ *
++ */
++
++#include <linux/kernel.h>
++#include <linux/sched.h>
++#include <linux/platform_device.h>
++
++#include <pcmcia/ss.h>
++#include <asm/delay.h>
++#include <asm/hardware.h>
++#include <asm/irq.h>
++
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/cm-x270.h>
++
++#include "soc_common.h"
++
++
++static struct pcmcia_irqs irqs[] = {
++ { 0, PCMCIA_S0_CD_VALID, "PCMCIA0 CD" },
++ { 1, PCMCIA_S1_CD_VALID, "PCMCIA1 CD" },
++};
++
++
++static int
++cmx270_pcmcia_hw_init(struct soc_pcmcia_socket *skt)
++{
++ int return_val=0;
++
++ GPSR(GPIO48_nPOE) = GPIO_bit(GPIO48_nPOE) |
++ GPIO_bit(GPIO49_nPWE) |
++ GPIO_bit(GPIO50_nPIOR) |
++ GPIO_bit(GPIO51_nPIOW) |
++ GPIO_bit(GPIO85_nPCE_1) |
++ GPIO_bit(GPIO54_nPCE_2);
++
++ pxa_gpio_mode(GPIO48_nPOE_MD);
++ pxa_gpio_mode(GPIO49_nPWE_MD);
++ pxa_gpio_mode(GPIO50_nPIOR_MD);
++ pxa_gpio_mode(GPIO51_nPIOW_MD);
++ pxa_gpio_mode(GPIO85_nPCE_1_MD);
++ pxa_gpio_mode(GPIO54_nPCE_2_MD);
++ //pxa_gpio_mode(GPIO79_pSKTSEL_MD); /* REVISIT: s/b dependent on num sockets (on ATX base not routed)*/
++ pxa_gpio_mode(GPIO55_nPREG_MD);
++ pxa_gpio_mode(GPIO56_nPWAIT_MD);
++ pxa_gpio_mode(GPIO57_nIOIS16_MD);
++
++ // Reset signal
++ GPDR(GPIO53_nPCE_2) |= GPIO_bit(GPIO53_nPCE_2);
++ GPCR(GPIO53_nPCE_2) = GPIO_bit(GPIO53_nPCE_2);
++
++ GPDR(IRQ_TO_GPIO(PCMCIA_S0_CD_VALID)) &= ~GPIO_bit(IRQ_TO_GPIO(PCMCIA_S0_CD_VALID));
++ GPDR(IRQ_TO_GPIO(PCMCIA_S1_CD_VALID)) &= ~GPIO_bit(IRQ_TO_GPIO(PCMCIA_S1_CD_VALID));
++
++ set_irq_type(PCMCIA_S0_CD_VALID, IRQT_BOTHEDGE);
++ set_irq_type(PCMCIA_S1_CD_VALID, IRQT_BOTHEDGE);
++
++ //irq's for slots:
++ GPDR(IRQ_TO_GPIO(PCMCIA_S0_RDYINT)) &= ~GPIO_bit(IRQ_TO_GPIO(PCMCIA_S0_RDYINT));
++ GPDR(IRQ_TO_GPIO(PCMCIA_S1_RDYINT)) &= ~GPIO_bit(IRQ_TO_GPIO(PCMCIA_S1_RDYINT));
++
++ set_irq_type(PCMCIA_S0_RDYINT, IRQT_FALLING);
++ set_irq_type(PCMCIA_S1_RDYINT, IRQT_FALLING);
++
++ skt->irq = (skt->nr == 0) ? PCMCIA_S0_RDYINT : PCMCIA_S1_RDYINT;
++ return_val = soc_pcmcia_request_irqs(skt, irqs, ARRAY_SIZE(irqs));
++
++ return return_val;
++}
++
++
++static void cmx270_pcmcia_shutdown(struct soc_pcmcia_socket *skt)
++{
++ soc_pcmcia_free_irqs(skt, irqs, ARRAY_SIZE(irqs));
++
++ set_irq_type(IRQ_TO_GPIO(PCMCIA_S0_CD_VALID), IRQT_NOEDGE);
++ set_irq_type(IRQ_TO_GPIO(PCMCIA_S1_CD_VALID), IRQT_NOEDGE);
++
++ set_irq_type(IRQ_TO_GPIO(PCMCIA_S0_RDYINT), IRQT_NOEDGE);
++ set_irq_type(IRQ_TO_GPIO(PCMCIA_S1_RDYINT), IRQT_NOEDGE);
++}
++
++
++static void cmx270_pcmcia_socket_state(struct soc_pcmcia_socket *skt,
++ struct pcmcia_state *state)
++{
++
++ state->detect = (PCC_DETECT(skt->nr) == 0) ? 1 : 0;
++ state->ready = (PCC_READY(skt->nr) == 0) ? 0 : 1;
++ state->bvd1 = 1;
++ state->bvd2 = 1;
++ state->vs_3v = 0;
++ state->vs_Xv = 0;
++ state->wrprot = 0; /* not available */
++
++}
++
++
++static int
++cmx270_pcmcia_configure_socket(struct soc_pcmcia_socket *skt,
++ const socket_state_t *state)
++{
++
++ GPSR(GPIO49_nPWE) = GPIO_bit(GPIO49_nPWE);
++ pxa_gpio_mode(GPIO49_nPWE | GPIO_OUT);
++ //pxa_gpio_mode(GPIO79_pSKTSEL_MD | GPIO_OUT); /* For 2-socket mode */
++
++ switch(skt->nr){
++ case 0:
++ if(state->flags & SS_RESET) {
++ //GPCR(GPIO79_pSKTSEL) = GPIO_bit(GPIO79_pSKTSEL); /* For 2-socket mode */
++ //udelay(1);
++ GPCR(GPIO49_nPWE) = GPIO_bit(GPIO49_nPWE);
++ GPSR(GPIO53_nPCE_2) = GPIO_bit(GPIO53_nPCE_2);
++ udelay(10);
++ GPCR(GPIO53_nPCE_2) = GPIO_bit(GPIO53_nPCE_2);
++ GPSR(GPIO49_nPWE) = GPIO_bit(GPIO49_nPWE);
++ }
++ break;
++ case 1:
++ if(state->flags & SS_RESET) {
++ //GPCR(GPIO79_pSKTSEL) = GPIO_bit(GPIO79_pSKTSEL); /* For 2-socket mode */
++ //udelay(1);
++ GPCR(GPIO49_nPWE) = GPIO_bit(GPIO49_nPWE);
++ GPSR(GPIO53_nPCE_2) = GPIO_bit(GPIO53_nPCE_2);
++ udelay(10);
++ GPCR(GPIO53_nPCE_2) = GPIO_bit(GPIO53_nPCE_2);
++ GPSR(GPIO49_nPWE) = GPIO_bit(GPIO49_nPWE);
++ }
++ break;
++ }
++
++ pxa_gpio_mode(GPIO49_nPWE_MD);
++ //pxa_gpio_mode(GPIO79_pSKTSEL_MD); /* For 2-socket mode */
++
++
++ return 0;
++}
++
++static void cmx270_pcmcia_socket_init(struct soc_pcmcia_socket *skt)
++{
++}
++
++static void cmx270_pcmcia_socket_suspend(struct soc_pcmcia_socket *skt)
++{
++}
++
++
++static struct pcmcia_low_level cmx270_pcmcia_ops = {
++ .owner = THIS_MODULE,
++ .hw_init = cmx270_pcmcia_hw_init,
++ .hw_shutdown = cmx270_pcmcia_shutdown,
++ .socket_state = cmx270_pcmcia_socket_state,
++ .configure_socket = cmx270_pcmcia_configure_socket,
++ .socket_init = cmx270_pcmcia_socket_init,
++ .socket_suspend = cmx270_pcmcia_socket_suspend,
++ .nr = 2,
++};
++
++static struct platform_device *cmx270_pcmcia_device;
++
++static int __init cmx270_pcmcia_init(void)
++{
++ int ret;
++
++ cmx270_pcmcia_device = platform_device_alloc("pxa2xx-pcmcia", -1);
++
++ if (!cmx270_pcmcia_device)
++ return -ENOMEM;
++
++ cmx270_pcmcia_device->dev.platform_data = &cmx270_pcmcia_ops;
++
++ printk ("Registering cm-x270 PCMCIA interface.\n");
++ ret = platform_device_add(cmx270_pcmcia_device);
++
++ if (ret)
++ platform_device_put(cmx270_pcmcia_device);
++
++ return ret;
++}
++
++static void __exit cmx270_pcmcia_exit(void)
++{
++ platform_device_unregister(cmx270_pcmcia_device);
++}
++
++module_init(cmx270_pcmcia_init);
++module_exit(cmx270_pcmcia_exit);
++
++MODULE_LICENSE("GPL");
+diff --git a/drivers/serial/pxa.c b/drivers/serial/pxa.c
+index 10535f0..7f7fd02 100644
+--- a/drivers/serial/pxa.c
++++ b/drivers/serial/pxa.c
+@@ -49,6 +49,21 @@ #include <asm/hardware.h>
+ #include <asm/irq.h>
+ #include <asm/arch/pxa-regs.h>
+
++#define SERIAL_SA1100_MAJOR 204
++#define MINOR_START 5
++
++#ifdef CONFIG_MACH_ARMCORE
++extern int machine_is_cmx270l(void);
++#define SWITCH_CONSOLE() \
++ do { \
++ if ( machine_is_cmx270l() ) { \
++ serial_pxa_switch_ports(&serial_pxa_ports[0], \
++ &serial_pxa_ports[1]); \
++ } \
++ } while (0)
++#else
++#define SWITCH_CONSOLE() do {} while (0)
++#endif
+
+ struct uart_pxa_port {
+ struct uart_port port;
+@@ -584,6 +599,23 @@ serial_pxa_type(struct uart_port *port)
+ return up->name;
+ }
+
++static void
++serial_pxa_switch_ports(struct uart_pxa_port* port1,
++ struct uart_pxa_port* port2)
++{
++ int tmp_line;
++ static struct uart_pxa_port tmp_port;
++
++ tmp_line = port1->port.line;
++ port1->port.line = port2->port.line;
++ port2->port.line = tmp_line;
++
++ memcpy(&tmp_port, port1, sizeof(struct uart_pxa_port));
++ memcpy(port1, port2, sizeof(struct uart_pxa_port));
++ memcpy(port2, &tmp_port, sizeof(struct uart_pxa_port));
++}
++
++
+ #ifdef CONFIG_SERIAL_PXA_CONSOLE
+
+ static struct uart_pxa_port serial_pxa_ports[];
+@@ -683,7 +715,7 @@ serial_pxa_console_setup(struct console
+ }
+
+ static struct console serial_pxa_console = {
+- .name = "ttyS",
++ .name = "ttySA",
+ .write = serial_pxa_console_write,
+ .device = uart_console_device,
+ .setup = serial_pxa_console_setup,
+@@ -695,6 +727,8 @@ static struct console serial_pxa_console
+ static int __init
+ serial_pxa_console_init(void)
+ {
++ SWITCH_CONSOLE();
++
+ register_console(&serial_pxa_console);
+ return 0;
+ }
+@@ -788,11 +822,16 @@ static struct uart_pxa_port serial_pxa_p
+
+ static struct uart_driver serial_pxa_reg = {
+ .owner = THIS_MODULE,
+- .driver_name = "PXA serial",
+- .devfs_name = "tts/",
+- .dev_name = "ttyS",
+- .major = TTY_MAJOR,
+- .minor = 64,
++/* .driver_name = "PXA serial", */
++/* .devfs_name = "tts/", */
++/* .dev_name = "ttyS", */
++/* .major = TTY_MAJOR, */
++/* .minor = 64, */
++ .driver_name = "ttySA",
++ .dev_name = "ttySA",
++ .devfs_name = "ttySA",
++ .major = SERIAL_SA1100_MAJOR,
++ .minor = MINOR_START,
+ .nr = ARRAY_SIZE(serial_pxa_ports),
+ .cons = PXA_CONSOLE,
+ };
+@@ -852,6 +891,10 @@ int __init serial_pxa_init(void)
+ {
+ int ret;
+
++#ifndef CONFIG_SERIAL_PXA_CONSOLE
++ SWITCH_CONSOLE();
++#endif
++
+ ret = uart_register_driver(&serial_pxa_reg);
+ if (ret != 0)
+ return ret;
+diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig
+index f5079c7..e49580a 100644
+--- a/drivers/video/Kconfig
++++ b/drivers/video/Kconfig
+@@ -1387,6 +1387,16 @@ config FB_PXA_PARAMETERS
+
+ <file:Documentation/fb/pxafb.txt> describes the available parameters.
+
++config FB_MBX
++ tristate "2700G LCD framebuffer support"
++ depends on FB && ARCH_PXA
++ select FB_CFB_FILLRECT
++ select FB_CFB_COPYAREA
++ select FB_CFB_IMAGEBLIT
++ ---help---
++
++ If unsure, say N.
++
+ config FB_W100
+ tristate "W100 frame buffer support"
+ depends on FB && PXA_SHARPSL
+diff --git a/drivers/video/Makefile b/drivers/video/Makefile
+index aa434e7..c6fe5e4 100644
+--- a/drivers/video/Makefile
++++ b/drivers/video/Makefile
+@@ -94,6 +94,7 @@ obj-$(CONFIG_FB_TX3912) += tx3912fb.o
+ obj-$(CONFIG_FB_S1D13XXX) += s1d13xxxfb.o
+ obj-$(CONFIG_FB_IMX) += imxfb.o
+ obj-$(CONFIG_FB_S3C2410) += s3c2410fb.o
++obj-$(CONFIG_FB_MBX) += mbx/
+
+ # Platform or fallback drivers go here
+ obj-$(CONFIG_FB_VESA) += vesafb.o
+diff --git a/drivers/video/mbx/Makefile b/drivers/video/mbx/Makefile
+new file mode 100644
+index 0000000..ef6b729
+--- /dev/null
++++ b/drivers/video/mbx/Makefile
+@@ -0,0 +1,7 @@
++# Makefile for the Linux video drivers.
++# 5 Aug 1999, James Simmons, <mailto:jsimmons@users.sf.net>
++# Rewritten to use lists instead of if-statements.
++
++# Each configuration option enables a list of files.
++
++obj-$(CONFIG_FB_MBX) += mbxfb.o
+diff --git a/drivers/video/mbx/mbxfb.c b/drivers/video/mbx/mbxfb.c
+new file mode 100644
+index 0000000..93dcfa5
+--- /dev/null
++++ b/drivers/video/mbx/mbxfb.c
+@@ -0,0 +1,659 @@
++/*
++ * linux/drivers/video/mbx/mbxfb.c
++ *
++ * Copyright (C) 2006 Compulab, Ltd.
++ *
++ * Based on pxafb.c
++ *
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License. See the file COPYING in the main directory of this archive for
++ * more details.
++ *
++ * Intel 2700G (Marathon) Graphics Accelerator Frame Buffer Driver
++ *
++ */
++
++#include <linux/config.h>
++#include <linux/module.h>
++#include <linux/moduleparam.h>
++#include <linux/kernel.h>
++#include <linux/sched.h>
++#include <linux/errno.h>
++#include <linux/string.h>
++#include <linux/interrupt.h>
++#include <linux/slab.h>
++#include <linux/fb.h>
++#include <linux/delay.h>
++#include <linux/init.h>
++#include <linux/ioport.h>
++#include <linux/cpufreq.h>
++#include <linux/platform_device.h>
++#include <linux/dma-mapping.h>
++
++#include <asm/hardware.h>
++#include <asm/io.h>
++#include <asm/irq.h>
++#include <asm/uaccess.h>
++#include <asm/div64.h>
++#include <asm/arch/pxa-regs.h>
++#include <asm/arch/bitfield.h>
++#include <asm/arch/marathonfb.h>
++
++static unsigned long virt_base_2700;
++#include "regs.h"
++#include "reg_bits.h"
++
++#define MIN_XRES 16
++#define MIN_YRES 16
++#define MAX_XRES 2048
++#define MAX_YRES 2048
++
++/* FIXME: take care of different chip reivsions with different sizes
++ of ODFB */
++#define MEMORY_OFFSET 0x60000
++
++struct mbxfb_info {
++ struct device *dev;
++
++ struct resource *fb_res;
++ struct resource *fb_req;
++
++ struct resource *reg_res;
++ struct resource *reg_req;
++
++ void __iomem *fb_virt_addr;
++ unsigned long fb_phys_addr;
++
++ void __iomem *reg_virt_addr;
++ unsigned long reg_phys_addr;
++
++ int (*platform_probe)(struct fb_info *fb);
++ int (*platform_remove)(struct fb_info *fb);
++};
++
++static struct fb_var_screeninfo mbxfb_default __initdata = {
++ .xres = 640,
++ .yres = 480,
++ .xres_virtual = 640,
++ .yres_virtual = 480,
++ .bits_per_pixel = 16,
++ .red = { 11, 5, 0 },
++ .green = { 5, 6, 0 },
++ .blue = { 0, 5, 0 },
++ .activate = FB_ACTIVATE_TEST,
++ .height = -1,
++ .width = -1,
++ .pixclock = 40000,
++ .left_margin = 48,
++ .right_margin = 16,
++ .upper_margin = 33,
++ .lower_margin = 10,
++ .hsync_len = 96,
++ .vsync_len = 2,
++ .vmode = FB_VMODE_NONINTERLACED,
++ .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
++};
++
++static struct fb_fix_screeninfo mbxfb_fix __initdata = {
++ .id = "MBX",
++ .type = FB_TYPE_PACKED_PIXELS,
++ .visual = FB_VISUAL_TRUECOLOR,
++ .xpanstep = 0,
++ .ypanstep = 0,
++ .ywrapstep = 0,
++ .accel = FB_ACCEL_NONE,
++};
++
++struct pixclock_div {
++ u8 m;
++ u8 n;
++ u8 p;
++};
++
++static unsigned int mbxfb_get_pixclock(unsigned int pixclock_ps, struct pixclock_div *div)
++{
++ u8 m, n, p;
++ unsigned int err = 0;
++ unsigned int min_err = ~0x0;
++ unsigned int clk;
++ unsigned int best_clk = 0;
++ unsigned int ref_clk = 13000; /* FIXME: take from platform data */
++ unsigned int pixclock;
++
++ /* convert pixclock to KHz */
++ pixclock = PICOS2KHZ(pixclock_ps);
++
++ for ( m = 1; m < 64; m++ ) {
++ for ( n = 1; n < 8; n++ ) {
++ for ( p = 0; p < 8; p++ ) {
++ clk = (ref_clk * m) / (n * (1 << p));
++ err = (clk > pixclock) ? (clk - pixclock) :
++ (pixclock - clk);
++ if ( err < min_err ) {
++ min_err = err;
++ best_clk = clk;
++ div->m = m;
++ div->n = n;
++ div->p = p;
++ }
++ }
++ }
++ }
++ return KHZ2PICOS(best_clk);
++}
++
++static int
++mbxfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
++ u_int trans, struct fb_info *info)
++{
++ uint val, ret = 1;
++
++ if ( regno < 255 ) {
++ val = (red & 0xff) << 16;
++ val |= (green & 0xff) << 8;
++ val |= (blue & 0xff) << 0;
++ GPLUT = Gplut_Lutadr(regno) | Gplut_Lutdata(val);
++ udelay(1000);
++ ret = 0;
++ }
++ return ret;
++}
++
++static int mbxfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
++{
++ struct pixclock_div div;
++
++ var->pixclock = mbxfb_get_pixclock(var->pixclock, &div);
++
++ if (var->xres < MIN_XRES)
++ var->xres = MIN_XRES;
++ if (var->yres < MIN_YRES)
++ var->yres = MIN_YRES;
++ if (var->xres > MAX_XRES)
++ var->xres = MAX_XRES;
++ if (var->yres > MAX_YRES)
++ var->yres = MAX_YRES;
++ var->xres_virtual =
++ max(var->xres_virtual, var->xres);
++ var->yres_virtual =
++ max(var->yres_virtual, var->yres);
++
++ switch (var->bits_per_pixel) {
++ /* FIXME: implement 8 bits-per-pixel */
++ case 8:
++ var->bits_per_pixel = 16;
++ case 16:
++ var->green.length = (var->green.length == 5) ? 5 : 6;
++ var->red.length = 5;
++ var->blue.length = 5;
++ var->transp.length = 6 - var->green.length;
++ var->blue.offset = 0;
++ var->green.offset = 5;
++ var->red.offset = 5 + var->green.length;
++ var->transp.offset = (5 + var->red.offset) & 15;
++ break;
++ case 24: /* RGB 888 */
++ case 32: /* RGBA 8888 */
++ var->red.offset = 16;
++ var->red.length = 8;
++ var->green.offset = 8;
++ var->green.length = 8;
++ var->blue.offset = 0;
++ var->blue.length = 8;
++ var->transp.length = var->bits_per_pixel - 24;
++ var->transp.offset = (var->transp.length) ? 24 : 0;
++ break;
++ }
++ var->red.msb_right = 0;
++ var->green.msb_right = 0;
++ var->blue.msb_right = 0;
++ var->transp.msb_right = 0;
++
++ return 0;
++}
++
++static int mbxfb_set_par(struct fb_info *info)
++{
++ struct fb_var_screeninfo *var = &info->var;
++ struct pixclock_div div;
++ ushort hbps, ht, hfps, has;
++ ushort vbps, vt, vfps, vas;
++
++ info->fix.line_length = var->xres_virtual * var->bits_per_pixel / 8;
++
++ /* setup color mode */
++ GSCTRL &= ~(FMsk(GSCTRL_GPIXFMT));
++ /* FIXME: add *WORKING* support for 8-bits per color */
++ if ( info->var.bits_per_pixel == 8 ) {
++ GSCTRL |= GSCTRL_GPIXFMT_INDEXED;
++ GSCTRL |= GSCTRL_LUT_EN;
++ GSCTRL &= ~GSCTRL_GAMMA_EN;
++ info->fix.visual = FB_VISUAL_PSEUDOCOLOR;
++ fb_alloc_cmap(&info->cmap, 1<<info->var.bits_per_pixel, 0);
++ }
++ else {
++ fb_dealloc_cmap(&info->cmap);
++ GSCTRL &= ~GSCTRL_LUT_EN;
++ info->fix.visual = FB_VISUAL_TRUECOLOR;
++ switch ( info->var.bits_per_pixel ) {
++ case 16:
++ if ( info->var.green.length == 5 )
++ GSCTRL |= GSCTRL_GPIXFMT_ARGB1555;
++ else
++ GSCTRL |= GSCTRL_GPIXFMT_RGB565;
++ break;
++ case 24:
++ GSCTRL |= GSCTRL_GPIXFMT_RGB888;
++ break;
++ case 32:
++ GSCTRL |= GSCTRL_GPIXFMT_ARGB8888;
++ break;
++ }
++ }
++
++ /* setup resolution */
++ GSCTRL &= ~(FMsk(GSCTRL_GSWIDTH) | FMsk(GSCTRL_GSHEIGHT));
++ GSCTRL |= Gsctrl_Width(info->var.xres - 1) |
++ Gsctrl_Height(info->var.yres - 1);
++
++ GSADR &= ~(FMsk(GSADR_SRCSTRIDE)); udelay(1000);
++ GSADR |= Gsadr_Srcstride(info->var.xres * info->var.bits_per_pixel / (8 * 16) - 1); udelay(1000);
++
++ /* setup timings */
++ var->pixclock = mbxfb_get_pixclock(info->var.pixclock, &div);
++
++ DISPPLL = Disp_Pll_M(div.m) | Disp_Pll_N(div.n) | Disp_Pll_P(div.p) | DISP_PLL_EN;
++
++ hbps = var->hsync_len;
++ has = hbps + var->left_margin;
++ hfps = has + var->xres;
++ ht = hfps + var->right_margin;
++
++ vbps = var->vsync_len;
++ vas = vbps + var->upper_margin;
++ vfps = vas + var->yres;
++ vt = vfps + var->lower_margin;
++
++ DHT01 = Dht01_Hbps(hbps) | Dht01_Ht(ht);
++ DHT02 = Dht02_Hlbs(has) | Dht02_Has(has);
++ DHT03 = Dht03_Hfps(hfps) | Dht03_Hrbs(hfps);
++ DHDET = Dhdet_Hdes(has) | Dhdet_Hdef(hfps);
++
++ DVT01 = Dvt01_Vbps(vbps) | Dvt01_Vt(vt);
++ DVT02 = Dvt02_Vtbs(vas) | Dvt02_Vas(vas);
++ DVT03 = Dvt03_Vfps(vfps) | Dvt03_Vbbs(vfps);
++ DVDET = Dvdet_Vdes(vas) | Dvdet_Vdef(vfps);
++ DVECTRL = Dvectrl_Vevent(vfps) | Dvectrl_Vfetch(vbps);
++ DSCTRL |= DSCTRL_SYNCGEN_EN;
++
++ return 0;
++}
++
++static char *blank_mode[] = {
++ "FB_BLANK_UNBLANK",
++ "FB_BLANK_NORMAL",
++ "FB_BLANK_VSYNC_SUSPEND",
++ "FB_BLANK_HSYNC_SUSPEND",
++ "FB_BLANK_POWERDOWN",
++};
++
++static int mbxfb_blank(int blank, struct fb_info *info)
++{
++ switch (blank) {
++ case FB_BLANK_POWERDOWN:
++ case FB_BLANK_VSYNC_SUSPEND:
++ case FB_BLANK_HSYNC_SUSPEND:
++ case FB_BLANK_NORMAL:
++ DSCTRL &= ~DSCTRL_SYNCGEN_EN; udelay(1000);
++ PIXCLK &= ~PIXCLK_EN; udelay(1000);
++ VOVRCLK &= ~VOVRCLK_EN; udelay(1000);
++ break;
++ case FB_BLANK_UNBLANK:
++ DSCTRL |= DSCTRL_SYNCGEN_EN; udelay(1000);
++ PIXCLK |= PIXCLK_EN; udelay(1000);
++ break;
++ }
++ return 0;
++}
++
++static struct fb_ops mbxfb_ops = {
++ .owner = THIS_MODULE,
++ .fb_check_var = mbxfb_check_var,
++ .fb_set_par = mbxfb_set_par,
++ .fb_setcolreg = mbxfb_setcolreg,
++ .fb_fillrect = cfb_fillrect,
++ .fb_copyarea = cfb_copyarea,
++ .fb_imageblit = cfb_imageblit,
++ .fb_blank = mbxfb_blank,
++};
++
++/*
++ Enable external SDRAM controller. Assume that all clocks are active
++ by now.
++*/
++static void setup_memc(struct fb_info *fbi)
++{
++ unsigned long tmp;
++
++ /* FIXME: use platfrom specific parameters */
++ /* setup SDRAM controller */
++ LMCFG = LMCFG_LMC_DS | LMCFG_LMC_TS | LMCFG_LMD_TS | LMCFG_LMA_TS;
++ udelay(1000);
++ LMPWR = LMPWR_MC_PWR_ACT;
++ udelay(1000);
++ /* setup SDRAM timings */
++ LMTIM = Lmtim_Tras(7) | Lmtim_Trp(3) | Lmtim_Trcd(3) | Lmtim_Trc(9) |
++ Lmtim_Tdpl(2);
++ udelay(1000);
++ /* setup SDRAM refresh rate */
++ LMREFRESH = 0xc2b;
++ udelay(1000);
++ /* setup SDRAM type parameters */
++ LMTYPE = LMTYPE_CASLAT_3 | LMTYPE_BKSZ_2 | LMTYPE_ROWSZ_11 |
++ LMTYPE_COLSZ_8;
++ udelay(1000);
++ /* enable memory controller */
++ LMPWR = LMPWR_MC_PWR_ACT;
++ udelay(1000);
++
++ tmp = *(unsigned long*)(virt_base_2700 + MEMORY_OFFSET);
++ tmp = *(unsigned long*)(virt_base_2700 + MEMORY_OFFSET);
++ tmp = *(unsigned long*)(virt_base_2700 + MEMORY_OFFSET);
++ tmp = *(unsigned long*)(virt_base_2700 + MEMORY_OFFSET);
++ tmp = *(unsigned long*)(virt_base_2700 + MEMORY_OFFSET);
++ tmp = *(unsigned long*)(virt_base_2700 + MEMORY_OFFSET);
++ tmp = *(unsigned long*)(virt_base_2700 + MEMORY_OFFSET);
++ tmp = *(unsigned long*)(virt_base_2700 + MEMORY_OFFSET);
++ tmp = *(unsigned long*)(virt_base_2700 + MEMORY_OFFSET);
++ tmp = *(unsigned long*)(virt_base_2700 + MEMORY_OFFSET);
++ tmp = *(unsigned long*)(virt_base_2700 + MEMORY_OFFSET);
++}
++
++static void enable_clocks(struct fb_info* fbi)
++{
++ /* enable clocks */
++ SYSCLKSRC = SYSCLKSRC_PLL_2; udelay(1000);
++ PIXCLKSRC = PIXCLKSRC_PLL_1; udelay(1000);
++ CLKSLEEP = 0x00000000; udelay(1000);
++ COREPLL = Core_Pll_M(0x17) | Core_Pll_N(0x3) | Core_Pll_P(0x0) | CORE_PLL_EN; udelay(1000);
++ DISPPLL = Disp_Pll_M(0x1b) | Disp_Pll_N(0x7) | Disp_Pll_P(0x1) | DISP_PLL_EN;
++
++ VOVRCLK = 0x00000000; udelay(1000);
++ PIXCLK = PIXCLK_EN; udelay(1000);
++ MEMCLK = MEMCLK_EN; udelay(1000);
++ M24CLK = 0x00000006; udelay(1000);
++ MBXCLK = 0x00000006; udelay(1000);
++ SDCLK = SDCLK_EN; udelay(1000);
++ PIXCLKDIV = 0x00000001; udelay(1000);
++}
++
++static void setup_graphics(struct fb_info* fbi)
++{
++ unsigned long gsctrl;
++
++ gsctrl = GSCTRL_GAMMA_EN | Gsctrl_Width(fbi->var.xres-1) |
++ Gsctrl_Height(fbi->var.yres-1);
++ switch ( fbi->var.bits_per_pixel ) {
++ case 16:
++ if ( fbi->var.green.length == 5 )
++ gsctrl |= GSCTRL_GPIXFMT_ARGB1555;
++ else
++ gsctrl |= GSCTRL_GPIXFMT_RGB565;
++ break;
++ case 24: gsctrl |= GSCTRL_GPIXFMT_RGB888; break;
++ case 32: gsctrl |= GSCTRL_GPIXFMT_ARGB8888; break;
++ }
++
++ GSCTRL = gsctrl; udelay(1000);
++ GBBASE = 0x00000000; udelay(1000);
++ GDRCTRL = 0x00ffffff; udelay(1000);
++ GSCADR = GSCADR_STR_EN | Gscadr_Gbase_Adr(0x6000); udelay(1000);
++ GPLUT = 0x00000000; udelay(1000);
++}
++
++static void setup_display(struct fb_info* fbi)
++{
++ unsigned long dsctrl = 0;
++
++ dsctrl = DSCTRL_BLNK_POL;
++ if ( fbi->var.sync & FB_SYNC_HOR_HIGH_ACT )
++ dsctrl |= DSCTRL_HS_POL;
++ if ( fbi->var.sync & FB_SYNC_VERT_HIGH_ACT )
++ dsctrl |= DSCTRL_VS_POL;
++ DSCTRL = dsctrl; udelay(1000);
++ DMCTRL = 0xd0303010; udelay(1000);
++ DSCTRL |= DSCTRL_SYNCGEN_EN;
++}
++
++static void enable_controller(struct fb_info* fbi)
++{
++ SYSRST = SYSRST_RST;
++ udelay(1000);
++
++ enable_clocks(fbi);
++ setup_memc(fbi);
++ setup_graphics(fbi);
++ setup_display(fbi);
++}
++
++
++#ifdef CONFIG_PM
++/*
++ * Power management hooks. Note that we won't be called from IRQ context,
++ * unlike the blank functions above, so we may sleep.
++ */
++static int mbxfb_suspend(struct platform_device *dev, pm_message_t state)
++{
++ /* make frame buffer memory enter self-refresh mode */
++ LMPWR = LMPWR_MC_PWR_SRM;
++ while ( LMPWRSTAT != LMPWRSTAT_MC_PWR_SRM );
++
++ /* reset the device, since it's initial state is 'mostly sleeping' */
++ SYSRST = SYSRST_RST;
++ return 0;
++}
++
++static int mbxfb_resume(struct platform_device *dev)
++{
++ struct fb_info *fbi = (struct fb_info*)platform_get_drvdata(dev);
++
++ enable_clocks(fbi);
++/* setup_graphics(fbi); */
++/* setup_display(fbi); */
++
++ DSCTRL |= DSCTRL_SYNCGEN_EN;
++ return 0;
++}
++#else
++#define mbxfb_suspend NULL
++#define mbxfb_resume NULL
++#endif
++
++#include "mbxsysfs.c"
++
++#define res_size(_r) (((_r)->end - (_r)->start) + 1)
++
++static int mbxfb_probe(struct platform_device *dev)
++{
++ int ret;
++ struct fb_info *fbi;
++ struct mbxfb_info *mfbi;
++ struct mbxfb_platform_data *pdata;
++
++ dev_dbg(dev, "mbxfb_probe\n");
++
++ fbi = framebuffer_alloc(sizeof(struct mbxfb_info), &dev->dev);
++ if ( fbi == NULL ) {
++ dev_err(&dev->dev, "framebuffer_alloc failed\n");
++ return -ENOMEM;
++ }
++
++ mfbi = fbi->par;
++ pdata = dev->dev.platform_data;
++ if ( pdata->probe )
++ mfbi->platform_probe = pdata->probe;
++ if ( pdata->remove )
++ mfbi->platform_remove = pdata->remove;
++
++ mfbi->fb_res = platform_get_resource(dev, IORESOURCE_MEM, 0);
++ mfbi->reg_res = platform_get_resource(dev, IORESOURCE_MEM, 1);
++
++ if ( !mfbi->fb_res || !mfbi->reg_res ) {
++ dev_err(&dev->dev, "no resources found\n");
++ ret = -ENODEV;
++ goto err1;
++ }
++
++ mfbi->fb_req = request_mem_region(mfbi->fb_res->start,
++ res_size(mfbi->fb_res),
++ dev->name);
++ if ( mfbi->fb_req == NULL ) {
++ dev_err(&dev->dev, "failed to claim framebuffer memory\n");
++ ret = -EINVAL;
++ goto err1;
++ }
++ mfbi->fb_phys_addr = mfbi->fb_res->start;
++
++ mfbi->reg_req = request_mem_region(mfbi->reg_res->start,
++ res_size(mfbi->reg_res),
++ dev->name);
++ if ( mfbi->reg_req == NULL ) {
++ dev_err(&dev->dev, "failed to claim Marathon registers\n");
++ ret = -EINVAL;
++ goto err2;
++ }
++ mfbi->reg_phys_addr = mfbi->reg_res->start;
++
++ mfbi->reg_virt_addr = ioremap_nocache(mfbi->reg_phys_addr,
++ res_size(mfbi->reg_req));
++ if ( !mfbi->reg_virt_addr ) {
++ dev_err(&dev->dev, "failed to ioremap Marathon registers\n");
++ ret = -EINVAL;
++ goto err3;
++ }
++ virt_base_2700 = mfbi->reg_virt_addr;
++
++ mfbi->fb_virt_addr = ioremap_nocache(mfbi->fb_phys_addr,
++ res_size(mfbi->fb_req));
++ if ( !mfbi->reg_virt_addr ) {
++ dev_err(&dev->dev, "failed to ioremap frame buffer\n");
++ ret = -EINVAL;
++ goto err4;
++ }
++
++ fbi->screen_base = (char __iomem *)(mfbi->fb_virt_addr + 0x60000); /* FIXME: */
++ fbi->screen_size = 8*1024*1024; /* 8 Megs */ /* FIXME: get from platform */
++ fbi->fbops = &mbxfb_ops;
++
++ fbi->var = mbxfb_default;
++ fbi->fix = mbxfb_fix;
++ fbi->fix.smem_start = mfbi->fb_phys_addr + 0x60000;
++ fbi->fix.smem_len = 8*1024*1024;
++ fbi->fix.line_length = 640*2;
++
++ ret = fb_alloc_cmap(&fbi->cmap, 256, 0);
++ if (ret < 0) {
++ dev_err(&dev->dev, "fb_alloc_cmap failed\n");
++ ret = -EINVAL;
++ goto err5;
++ }
++
++ ret = register_framebuffer(fbi);
++ if (ret < 0) {
++ dev_err(&dev->dev, "register_framebuffer failed\n");
++ ret = -EINVAL;
++ goto err6;
++ }
++
++ platform_set_drvdata(dev, fbi);
++
++ printk(KERN_INFO "fb%d: mbx frame buffer device\n", fbi->node);
++
++ if ( mfbi->platform_probe )
++ mfbi->platform_probe(fbi);
++
++ enable_controller(fbi);
++
++ mbxfb_sysfs_register(fbi);
++
++ return 0;
++
++ err6:
++ fb_dealloc_cmap(&fbi->cmap);
++ err5:
++ iounmap(mfbi->fb_virt_addr);
++ err4:
++ iounmap(mfbi->reg_virt_addr);
++ err3:
++ release_mem_region(mfbi->reg_res->start,
++ res_size(mfbi->reg_res));
++ err2:
++ release_mem_region(mfbi->fb_res->start,
++ res_size(mfbi->fb_res));
++ err1:
++ framebuffer_release(fbi);
++
++ return ret;
++}
++
++static int mbxfb_remove(struct platform_device *dev)
++{
++ struct fb_info *fbi = (struct fb_info*)platform_get_drvdata(dev);
++
++ SYSRST = SYSRST_RST;
++ udelay(1000);
++
++ if (fbi) {
++ struct mbxfb_info *mfbi = fbi->par;
++
++ unregister_framebuffer(fbi);
++ if ( mfbi ) {
++ if ( mfbi->platform_remove )
++ mfbi->platform_remove(fbi);
++
++ if ( mfbi->fb_virt_addr )
++ iounmap(mfbi->fb_virt_addr);
++ if ( mfbi->reg_virt_addr )
++ iounmap(mfbi->reg_virt_addr);
++ if ( mfbi->reg_req )
++ release_mem_region(mfbi->reg_req->start,
++ res_size(mfbi->reg_req));
++ if ( mfbi->fb_req )
++ release_mem_region(mfbi->fb_req->start,
++ res_size(mfbi->fb_req));
++ }
++ framebuffer_release(fbi);
++ }
++
++ return 0;
++}
++
++static struct platform_driver mbxfb_driver = {
++ .probe = mbxfb_probe,
++ .remove = mbxfb_remove,
++
++#ifdef CONFIG_PM
++ .suspend = mbxfb_suspend,
++ .resume = mbxfb_resume,
++#endif
++ .driver = {
++ .name = "mbx-fb",
++ },
++};
++
++int __devinit mbxfb_init(void)
++{
++ return platform_driver_register(&mbxfb_driver);
++}
++
++static void __exit mbxfb_exit(void)
++{
++ platform_driver_unregister(&mbxfb_driver);
++}
++
++module_init(mbxfb_init);
++module_exit(mbxfb_exit);
++
++MODULE_DESCRIPTION("loadable framebuffer driver for Marathon device");
++MODULE_AUTHOR("Mike Rapoport, Compulab");
++MODULE_LICENSE("GPL");
+diff --git a/drivers/video/mbx/mbxsysfs.c b/drivers/video/mbx/mbxsysfs.c
+new file mode 100644
+index 0000000..4b9571a
+--- /dev/null
++++ b/drivers/video/mbx/mbxsysfs.c
+@@ -0,0 +1,129 @@
++static ssize_t sysconf_show(struct class_device * subsys, char * buf)
++{
++ char * s = buf;
++
++ s += sprintf(s, "SYSCFG = %08lx\n", SYSCFG);
++ s += sprintf(s, "PFBASE = %08lx\n", PFBASE);
++ s += sprintf(s, "PFCEIL = %08lx\n", PFCEIL);
++ s += sprintf(s, "POLLFLAG = %08lx\n", POLLFLAG);
++ s += sprintf(s, "SYSRST = %08lx\n", SYSRST);
++ return (s - buf);
++}
++
++static ssize_t sysconf_store(struct class_device * subsys, const char * buf, size_t n)
++{
++ return n;
++}
++
++static ssize_t gsctl_show(struct class_device * subsys, char * buf)
++{
++ char * s = buf;
++
++ s += sprintf(s, "GSCTRL = %08lx\n", GSCTRL);
++ s += sprintf(s, "VSCTRL = %08lx\n", VSCTRL);
++ s += sprintf(s, "GBBASE = %08lx\n", GBBASE);
++ s += sprintf(s, "VBBASE = %08lx\n", VBBASE);
++ s += sprintf(s, "GDRCTRL = %08lx\n", GDRCTRL);
++ s += sprintf(s, "VCMSK = %08lx\n", VCMSK);
++ s += sprintf(s, "GSCADR = %08lx\n", GSCADR);
++ s += sprintf(s, "VSCADR = %08lx\n", VSCADR);
++ s += sprintf(s, "VUBASE = %08lx\n", VUBASE);
++ s += sprintf(s, "VVBASE = %08lx\n", VVBASE);
++ s += sprintf(s, "GSADR = %08lx\n", GSADR);
++ s += sprintf(s, "VSADR = %08lx\n", VSADR);
++ s += sprintf(s, "HCCTRL = %08lx\n", HCCTRL);
++ s += sprintf(s, "HCSIZE = %08lx\n", HCSIZE);
++ s += sprintf(s, "HCPOS = %08lx\n", HCPOS);
++ s += sprintf(s, "HCBADR = %08lx\n", HCBADR);
++ s += sprintf(s, "HCCKMSK = %08lx\n", HCCKMSK);
++ s += sprintf(s, "GPLUT = %08lx\n", GPLUT);
++ return (s - buf);
++}
++
++static ssize_t gsctl_store(struct class_device * subsys, const char * buf, size_t n)
++{
++ return n;
++}
++
++static ssize_t display_show(struct class_device * subsys, char * buf)
++{
++ char * s = buf;
++
++ s += sprintf(s, "DSCTRL = %08lx\n", DSCTRL);
++ s += sprintf(s, "DHT01 = %08lx\n", DHT01);
++ s += sprintf(s, "DHT02 = %08lx\n", DHT02);
++ s += sprintf(s, "DHT03 = %08lx\n", DHT03);
++ s += sprintf(s, "DVT01 = %08lx\n", DVT01);
++ s += sprintf(s, "DVT02 = %08lx\n", DVT02);
++ s += sprintf(s, "DVT03 = %08lx\n", DVT03);
++ s += sprintf(s, "DBCOL = %08lx\n", DBCOL);
++ s += sprintf(s, "BGCOLOR = %08lx\n", BGCOLOR);
++ s += sprintf(s, "DINTRS = %08lx\n", DINTRS);
++ s += sprintf(s, "DINTRE = %08lx\n", DINTRE);
++ s += sprintf(s, "DINTRCNT = %08lx\n", DINTRCNT);
++ s += sprintf(s, "DSIG = %08lx\n", DSIG);
++ s += sprintf(s, "DMCTRL = %08lx\n", DMCTRL);
++ s += sprintf(s, "CLIPCTRL = %08lx\n", CLIPCTRL);
++ s += sprintf(s, "SPOCTRL = %08lx\n", SPOCTRL);
++ s += sprintf(s, "SVCTRL = %08lx\n", SVCTRL);
++ s += sprintf(s, "DLSTS = %08lx\n", DLSTS);
++ s += sprintf(s, "DLLCTRL = %08lx\n", DLLCTRL);
++ s += sprintf(s, "DVLNUM = %08lx\n", DVLNUM);
++ s += sprintf(s, "DUCTRL = %08lx\n", DUCTRL);
++ s += sprintf(s, "DVECTRL = %08lx\n", DVECTRL);
++ s += sprintf(s, "DHDET = %08lx\n", DHDET);
++ s += sprintf(s, "DVDET = %08lx\n", DVDET);
++ s += sprintf(s, "DODMSK = %08lx\n", DODMSK);
++ s += sprintf(s, "CSC01 = %08lx\n", CSC01);
++ s += sprintf(s, "CSC02 = %08lx\n", CSC02);
++ s += sprintf(s, "CSC03 = %08lx\n", CSC03);
++ s += sprintf(s, "CSC04 = %08lx\n", CSC04);
++ s += sprintf(s, "CSC05 = %08lx\n", CSC05);
++ return (s - buf);
++}
++
++static ssize_t display_store(struct class_device * subsys, const char * buf, size_t n)
++{
++ return n;
++}
++
++static ssize_t clock_show(struct class_device * subsys, char * buf)
++{
++ char * s = buf;
++
++ s += sprintf(s, "SYSCLKSRC = %08lx\n", SYSCLKSRC);
++ s += sprintf(s, "PIXCLKSRC = %08lx\n", PIXCLKSRC);
++ s += sprintf(s, "CLKSLEEP = %08lx\n", CLKSLEEP);
++ s += sprintf(s, "COREPLL = %08lx\n", COREPLL);
++ s += sprintf(s, "DISPPLL = %08lx\n", DISPPLL);
++ s += sprintf(s, "PLLSTAT = %08lx\n", PLLSTAT);
++ s += sprintf(s, "VOVRCLK = %08lx\n", VOVRCLK);
++ s += sprintf(s, "PIXCLK = %08lx\n", PIXCLK);
++ s += sprintf(s, "MEMCLK = %08lx\n", MEMCLK);
++ s += sprintf(s, "M24CLK = %08lx\n", M24CLK);
++ s += sprintf(s, "MBXCLK = %08lx\n", MBXCLK);
++ s += sprintf(s, "SDCLK = %08lx\n", SDCLK);
++ s += sprintf(s, "PIXCLKDIV = %08lx\n", PIXCLKDIV);
++ return (s - buf);
++}
++
++static ssize_t clock_store(struct class_device * subsys, const char * buf, size_t n)
++{
++ return n;
++}
++
++static struct class_device_attribute mbx_class_attrs[] = {
++ __ATTR(sysconf,0644,sysconf_show,sysconf_store),
++ __ATTR(gsctl,0644,gsctl_show,gsctl_store),
++ __ATTR(display,0644,display_show,display_store),
++ __ATTR(clock,0644,clock_show,clock_store),
++};
++
++
++static void mbxfb_sysfs_register(struct fb_info *fbi)
++{
++ int i;
++ for (i = 0; i < ARRAY_SIZE(mbx_class_attrs); i++)
++ class_device_create_file(fbi->class_device,
++ &mbx_class_attrs[i]);
++}
+diff --git a/drivers/video/mbx/reg_bits.h b/drivers/video/mbx/reg_bits.h
+new file mode 100644
+index 0000000..be152f6
+--- /dev/null
++++ b/drivers/video/mbx/reg_bits.h
+@@ -0,0 +1,489 @@
++#ifndef __REG_BITS_2700G_
++#define __REG_BITS_2700G_
++
++/* /\* System Configuration Registers (0x03FE_0000 0x03FE_0010) *\/ */
++/* #define SYSCFG __REG_2700G(0x03FE0000) */
++/* #define PFBASE __REG_2700G(0x03FE0004) */
++/* #define PFCEIL __REG_2700G(0x03FE0008) */
++/* #define POLLFLAG __REG_2700G(0x03FE000C) */
++
++#define SYSRST_RST (1 << 0)
++
++/* /\* Interrupt Control Registers (0x03FE_0014 0x03FE_002F) *\/ */
++/* #define NINTPW __REG_2700G(0x03FE0014) */
++/* #define MINTENABLE __REG_2700G(0x03FE0018) */
++/* #define MINTSTAT __REG_2700G(0x03FE001C) */
++/* #define SINTENABLE __REG_2700G(0x03FE0020) */
++/* #define SINTSTAT __REG_2700G(0x03FE0024) */
++/* #define SINTCLR __REG_2700G(0x03FE0028) */
++
++/* SYSCLKSRC - SYSCLK Source Control Register */
++#define SYSCLKSRC_SEL Fld(2,0)
++#define SYSCLKSRC_REF ((0x0) << FShft(SYSCLKSRC_SEL))
++#define SYSCLKSRC_PLL_1 ((0x1) << FShft(SYSCLKSRC_SEL))
++#define SYSCLKSRC_PLL_2 ((0x2) << FShft(SYSCLKSRC_SEL))
++
++/* PIXCLKSRC - PIXCLK Source Control Register */
++#define PIXCLKSRC_SEL Fld(2,0)
++#define PIXCLKSRC_REF ((0x0) << FShft(PIXCLKSRC_SEL))
++#define PIXCLKSRC_PLL_1 ((0x1) << FShft(PIXCLKSRC_SEL))
++#define PIXCLKSRC_PLL_2 ((0x2) << FShft(PIXCLKSRC_SEL))
++
++/* Clock Disable Register */
++#define CLKSLEEP_SLP (1 << 0)
++
++/* Core PLL Control Register */
++#define CORE_PLL_M Fld(6,7)
++#define Core_Pll_M(x) ((x) << FShft(CORE_PLL_M))
++#define CORE_PLL_N Fld(3,4)
++#define Core_Pll_N(x) ((x) << FShft(CORE_PLL_N))
++#define CORE_PLL_P Fld(3,1)
++#define Core_Pll_P(x) ((x) << FShft(CORE_PLL_P))
++#define CORE_PLL_EN (1 << 0)
++
++/* Display PLL Control Register */
++#define DISP_PLL_M Fld(6,7)
++#define Disp_Pll_M(x) ((x) << FShft(DISP_PLL_M))
++#define DISP_PLL_N Fld(3,4)
++#define Disp_Pll_N(x) ((x) << FShft(DISP_PLL_N))
++#define DISP_PLL_P Fld(3,1)
++#define Disp_Pll_P(x) ((x) << FShft(DISP_PLL_P))
++#define DISP_PLL_EN (1 << 0)
++
++/* PLL status register */
++#define PLLSTAT_CORE_PLL_LOST_L (1 << 3)
++#define PLLSTAT_CORE_PLL_LSTS (1 << 2)
++#define PLLSTAT_DISP_PLL_LOST_L (1 << 1)
++#define PLLSTAT_DISP_PLL_LSTS (1 << 0)
++
++/* Video and scale clock control register */
++#define VOVRCLK_EN (1 << 0)
++
++/* Pixel clock control register */
++#define PIXCLK_EN (1 << 0)
++
++/* Memory clock control register */
++#define MEMCLK_EN (1 << 0)
++
++/* MBX clock control register */
++#define MBXCLK_DIV Fld(2,2)
++#define MBXCLK_DIV_1 ((0x0) << FShft(MBXCLK_DIV))
++#define MBXCLK_DIV_2 ((0x1) << FShft(MBXCLK_DIV))
++#define MBXCLK_DIV_3 ((0x2) << FShft(MBXCLK_DIV))
++#define MBXCLK_DIV_4 ((0x3) << FShft(MBXCLK_DIV))
++#define MBXCLK_EN Fld(2,0)
++#define MBXCLK_EN_NONE ((0x0) << FShft(MBXCLK_EN))
++#define MBXCLK_EN_2D ((0x1) << FShft(MBXCLK_EN))
++#define MBXCLK_EN_BOTH ((0x2) << FShft(MBXCLK_EN))
++
++/* M24 clock control register */
++#define M24CLK_DIV Fld(2,1)
++#define M24CLK_DIV_1 ((0x0) << FShft(M24CLK_DIV))
++#define M24CLK_DIV_2 ((0x1) << FShft(M24CLK_DIV))
++#define M24CLK_DIV_3 ((0x2) << FShft(M24CLK_DIV))
++#define M24CLK_DIV_4 ((0x3) << FShft(M24CLK_DIV))
++#define M24CLK_EN (1 << 0)
++
++/* SDRAM clock control register */
++#define SDCLK_EN (1 << 0)
++
++/* PixClk Divisor Register */
++#define PIXCLKDIV_PD Fld(9,0)
++#define Pixclkdiv_Pd(x) ((x) << FShft(PIXCLKDIV_PD))
++
++/* LCD Config control register */
++#define LCDCFG_IN_FMT Fld(3,28)
++#define Lcdcfg_In_Fmt(x) ((x) << FShft(LCDCFG_IN_FMT))
++#define LCDCFG_LCD1DEN_POL (1 << 27)
++#define LCDCFG_LCD1FCLK_POL (1 << 26)
++#define LCDCFG_LCD1LCLK_POL (1 << 25)
++#define LCDCFG_LCD1D_POL (1 << 24)
++#define LCDCFG_LCD2DEN_POL (1 << 23)
++#define LCDCFG_LCD2FCLK_POL (1 << 22)
++#define LCDCFG_LCD2LCLK_POL (1 << 21)
++#define LCDCFG_LCD2D_POL (1 << 20)
++#define LCDCFG_LCD1_TS (1 << 19)
++#define LCDCFG_LCD1D_DS (1 << 18)
++#define LCDCFG_LCD1C_DS (1 << 17)
++#define LCDCFG_LCD1_IS_IN (1 << 16)
++#define LCDCFG_LCD2_TS (1 << 3)
++#define LCDCFG_LCD2D_DS (1 << 2)
++#define LCDCFG_LCD2C_DS (1 << 1)
++#define LCDCFG_LCD2_IS_IN (1 << 0)
++
++/* On-Die Frame Buffer Power Control Register */
++#define ODFBPWR_SLOW (1 << 2)
++#define ODFBPWR_MODE Fld(2,0)
++#define ODFBPWR_MODE_ACT ((0x0) << FShft(ODFBPWR_MODE))
++#define ODFBPWR_MODE_ACT_LP ((0x1) << FShft(ODFBPWR_MODE))
++#define ODFBPWR_MODE_SLEEP ((0x2) << FShft(ODFBPWR_MODE))
++#define ODFBPWR_MODE_SHUTD ((0x3) << FShft(ODFBPWR_MODE))
++
++/* On-Die Frame Buffer Power State Status Register */
++#define ODFBSTAT_ACT (1 << 2)
++#define ODFBSTAT_SLP (1 << 1)
++#define ODFBSTAT_SDN (1 << 0)
++
++/* /\* GPIO Registers (0x03FE_006C 0x03FE_007F) *\/ */
++/* #define GPIOCGF __REG_2700G(0x03FE006C) */
++/* #define GPIOHI __REG_2700G(0x03FE0070) */
++/* #define GPIOLO __REG_2700G(0x03FE0074) */
++/* #define GPIOSTAT __REG_2700G(0x03FE0078) */
++
++/* /\* Pulse Width Modulator (PWM) Registers (0x03FE_0200 0x03FE_02FF) *\/ */
++/* #define PWMRST __REG_2700G(0x03FE0200) */
++/* #define PWMCFG __REG_2700G(0x03FE0204) */
++/* #define PWM0DIV __REG_2700G(0x03FE0210) */
++/* #define PWM0DUTY __REG_2700G(0x03FE0214) */
++/* #define PWM0PER __REG_2700G(0x03FE0218) */
++/* #define PWM1DIV __REG_2700G(0x03FE0220) */
++/* #define PWM1DUTY __REG_2700G(0x03FE0224) */
++/* #define PWM1PER __REG_2700G(0x03FE0228) */
++
++
++/* LMRST - Local Memory (SDRAM) Reset */
++#define LMRST_MC_RST (1 << 0)
++
++/* LMCFG - Local Memory (SDRAM) Configuration Register */
++#define LMCFG_LMC_DS (1 << 5)
++#define LMCFG_LMD_DS (1 << 4)
++#define LMCFG_LMA_DS (1 << 3)
++#define LMCFG_LMC_TS (1 << 2)
++#define LMCFG_LMD_TS (1 << 1)
++#define LMCFG_LMA_TS (1 << 0)
++
++/* LMPWR - Local Memory (SDRAM) Power Control Register */
++#define LMPWR_MC_PWR_CNT Fld(2,0)
++#define LMPWR_MC_PWR_ACT ((0x0) << FShft(LMPWR_MC_PWR_CNT)) /* Active */
++#define LMPWR_MC_PWR_SRM ((0x1) << FShft(LMPWR_MC_PWR_CNT)) /* Self-refresh */
++#define LMPWR_MC_PWR_DPD ((0x3) << FShft(LMPWR_MC_PWR_CNT)) /* deep power down */
++
++/* LMPWRSTAT - Local Memory (SDRAM) Power Status Register */
++#define LMPWRSTAT_MC_PWR_CNT Fld(2,0)
++#define LMPWRSTAT_MC_PWR_ACT ((0x0) << FShft(LMPWRSTAT_MC_PWR_CNT)) /* Active */
++#define LMPWRSTAT_MC_PWR_SRM ((0x1) << FShft(LMPWRSTAT_MC_PWR_CNT)) /* Self-refresh */
++#define LMPWRSTAT_MC_PWR_DPD ((0x3) << FShft(LMPWRSTAT_MC_PWR_CNT)) /* deep power down */
++
++/* LMTYPE - Local Memory (SDRAM) Type Register */
++#define LMTYPE_CASLAT Fld(3,10)
++#define LMTYPE_CASLAT_1 ((0x1) << FShft(LMTYPE_CASLAT))
++#define LMTYPE_CASLAT_2 ((0x2) << FShft(LMTYPE_CASLAT))
++#define LMTYPE_CASLAT_3 ((0x3) << FShft(LMTYPE_CASLAT))
++#define LMTYPE_BKSZ Fld(2,8)
++#define LMTYPE_BKSZ_1 ((0x1) << FShft(LMTYPE_BKSZ))
++#define LMTYPE_BKSZ_2 ((0x2) << FShft(LMTYPE_BKSZ))
++#define LMTYPE_ROWSZ Fld(4,4)
++#define LMTYPE_ROWSZ_11 ((0xb) << FShft(LMTYPE_ROWSZ))
++#define LMTYPE_ROWSZ_12 ((0xc) << FShft(LMTYPE_ROWSZ))
++#define LMTYPE_ROWSZ_13 ((0xd) << FShft(LMTYPE_ROWSZ))
++#define LMTYPE_COLSZ Fld(4,0)
++#define LMTYPE_COLSZ_7 ((0x7) << FShft(LMTYPE_COLSZ))
++#define LMTYPE_COLSZ_8 ((0x8) << FShft(LMTYPE_COLSZ))
++#define LMTYPE_COLSZ_9 ((0x9) << FShft(LMTYPE_COLSZ))
++#define LMTYPE_COLSZ_10 ((0xa) << FShft(LMTYPE_COLSZ))
++#define LMTYPE_COLSZ_11 ((0xb) << FShft(LMTYPE_COLSZ))
++#define LMTYPE_COLSZ_12 ((0xc) << FShft(LMTYPE_COLSZ))
++
++/* LMTIM - Local Memory (SDRAM) Timing Register */
++#define LMTIM_TRAS Fld(4,16)
++#define Lmtim_Tras(x) ((x) << FShft(LMTIM_TRAS))
++#define LMTIM_TRP Fld(4,12)
++#define Lmtim_Trp(x) ((x) << FShft(LMTIM_TRP))
++#define LMTIM_TRCD Fld(4,8)
++#define Lmtim_Trcd(x) ((x) << FShft(LMTIM_TRCD))
++#define LMTIM_TRC Fld(4,4)
++#define Lmtim_Trc(x) ((x) << FShft(LMTIM_TRC))
++#define LMTIM_TDPL Fld(4,0)
++#define Lmtim_Tdpl(x) ((x) << FShft(LMTIM_TDPL))
++
++/* LMREFRESH - Local Memory (SDRAM) tREF Control Register */
++#define LMREFRESH_TREF Fld(2,0)
++#define Lmrefresh_Tref(x) ((x) << FShft(LMREFRESH_TREF))
++
++/* #define LMCEMR __REG_2700G(0x03FE1010) */
++/* #define LMPROTMIN __REG_2700G(0x03FE1020) */
++/* #define LMPROTMAX __REG_2700G(0x03FE1024) */
++/* #define LMPROTCFG __REG_2700G(0x03FE1028) */
++/* #define LMPROTERR __REG_2700G(0x03FE102C) */
++
++/* GSCTRL - Graphics surface control register */
++#define GSCTRL_LUT_EN (1 << 31)
++#define GSCTRL_GPIXFMT Fld(4,27)
++#define GSCTRL_GPIXFMT_INDEXED ((0x0) << FShft(GSCTRL_GPIXFMT))
++#define GSCTRL_GPIXFMT_ARGB4444 ((0x4) << FShft(GSCTRL_GPIXFMT))
++#define GSCTRL_GPIXFMT_ARGB1555 ((0x5) << FShft(GSCTRL_GPIXFMT))
++#define GSCTRL_GPIXFMT_RGB888 ((0x6) << FShft(GSCTRL_GPIXFMT))
++#define GSCTRL_GPIXFMT_RGB565 ((0x7) << FShft(GSCTRL_GPIXFMT))
++#define GSCTRL_GPIXFMT_ARGB8888 ((0x8) << FShft(GSCTRL_GPIXFMT))
++#define GSCTRL_GAMMA_EN (1 << 26)
++
++#define GSCTRL_GSWIDTH Fld(11,11)
++#define Gsctrl_Width(Pixel) /* Display Width [1..2048 pix.] */ \
++ (((Pixel) - 1) << FShft(GSCTRL_GSWIDTH))
++
++#define GSCTRL_GSHEIGHT Fld(11,0)
++#define Gsctrl_Height(Pixel) /* Display Height [1..2048 pix.] */ \
++ (((Pixel) - 1) << FShft(GSCTRL_GSHEIGHT))
++
++/* GBBASE fileds */
++#define GBBASE_GLALPHA Fld(8,24)
++#define Gbbase_Glalpha(x) ((x) << FShft(GBBASE_GLALPHA))
++
++#define GBBASE_COLKEY Fld(24,0)
++#define Gbbase_Colkey(x) ((x) << FShft(GBBASE_COLKEY))
++
++/* GDRCTRL fields */
++#define GDRCTRL_PIXDBL (1 << 31)
++#define GDRCTRL_PIXHLV (1 << 30)
++#define GDRCTRL_LNDBL (1 << 29)
++#define GDRCTRL_LNHLV (1 << 28)
++#define GDRCTRL_COLKEYM Fld(24,0)
++#define Gdrctrl_Colkeym(x) ((x) << FShft(GDRCTRL_COLKEYM))
++
++/* GSCADR graphics stream control address register fields */
++#define GSCADR_STR_EN (1 << 31)
++#define GSCADR_COLKEY_EN (1 << 30)
++#define GSCADR_COLKEYSCR (1 << 29)
++#define GSCADR_BLEND_M Fld(2,27)
++#define GSCADR_BLEND_NONE ((0x0) << FShft(GSCADR_BLEND_M))
++#define GSCADR_BLEND_INV ((0x1) << FShft(GSCADR_BLEND_M))
++#define GSCADR_BLEND_GLOB ((0x2) << FShft(GSCADR_BLEND_M))
++#define GSCADR_BLEND_PIX ((0x3) << FShft(GSCADR_BLEND_M))
++#define GSCADR_BLEND_POS Fld(2,24)
++#define GSCADR_BLEND_GFX ((0x0) << FShft(GSCADR_BLEND_POS))
++#define GSCADR_BLEND_VID ((0x1) << FShft(GSCADR_BLEND_POS))
++#define GSCADR_BLEND_CUR ((0x2) << FShft(GSCADR_BLEND_POS))
++#define GSCADR_GBASE_ADR Fld(23,0)
++#define Gscadr_Gbase_Adr(x) ((x) << FShft(GSCADR_GBASE_ADR))
++
++/* GSADR graphics stride address register fields */
++#define GSADR_SRCSTRIDE Fld(10,22)
++#define Gsadr_Srcstride(x) ((x) << FShft(GSADR_SRCSTRIDE))
++#define GSADR_XSTART Fld(11,11)
++#define Gsadr_Xstart(x) ((x) << FShft(GSADR_XSTART))
++#define GSADR_YSTART Fld(11,0)
++#define Gsadr_Ystart(y) ((y) << FShft(GSADR_YSTART))
++
++/* GPLUT graphics palette register fields */
++#define GPLUT_LUTADR Fld(8,24)
++#define Gplut_Lutadr(x) ((x) << FShft(GPLUT_LUTADR))
++#define GPLUT_LUTDATA Fld(24,0)
++#define Gplut_Lutdata(x) ((x) << FShft(GPLUT_LUTDATA))
++
++/* #define VSCTRL __REG_2700G(0x03FE2004) */
++/* #define VBBASE __REG_2700G(0x03FE2024) */
++/* #define VCMSK __REG_2700G(0x03FE2044) */
++/* #define VSCADR __REG_2700G(0x03FE2064) */
++/* #define VUBASE __REG_2700G(0x03FE2084) */
++/* #define VVBASE __REG_2700G(0x03FE20A4) */
++/* #define VSADR __REG_2700G(0x03FE20C4) */
++
++
++/* HCCTRL - Hardware Cursor Register fields */
++#define HCCTRL_CUR_EN (1 << 31)
++#define HCCTRL_COLKEY_EN (1 << 29)
++#define HCCTRL_COLKEYSRC (1 << 28)
++#define HCCTRL_BLEND_M Fld(2,26)
++#define HCCTRL_BLEND_NONE ((0x0) << FShft(HCCTRL_BLEND_M))
++#define HCCTRL_BLEND_INV ((0x1) << FShft(HCCTRL_BLEND_M))
++#define HCCTRL_BLEND_GLOB ((0x2) << FShft(HCCTRL_BLEND_M))
++#define HCCTRL_BLEND_PIX ((0x3) << FShft(HCCTRL_BLEND_M))
++#define HCCTRL_CPIXFMT Fld(3,23)
++#define HCCTRL_CPIXFMT_RGB332 ((0x3) << FShft(HCCTRL_CPIXFMT))
++#define HCCTRL_CPIXFMT_ARGB4444 ((0x4) << FShft(HCCTRL_CPIXFMT))
++#define HCCTRL_CPIXFMT_ARGB1555 ((0x5) << FShft(HCCTRL_CPIXFMT))
++#define HCCTRL_CBASE_ADR Fld(23,0)
++#define Hcctrl_Cbase_Adr(x) ((x) << FShft(HCCTRL_CBASE_ADR))
++
++/* HCSIZE Hardware Cursor Size Register fields */
++#define HCSIZE_BLEND_POS Fld(2,29)
++#define HCSIZE_BLEND_GFX ((0x0) << FShft(HCSIZE_BLEND_POS))
++#define HCSIZE_BLEND_VID ((0x1) << FShft(HCSIZE_BLEND_POS))
++#define HCSIZE_BLEND_CUR ((0x2) << FShft(HCSIZE_BLEND_POS))
++#define HCSIZE_CWIDTH Fld(3,16)
++#define Hcsize_Cwidth(x) ((x) << FShft(HCSIZE_CWIDTH))
++#define HCSIZE_CHEIGHT Fld(3,0)
++#define Hcsize_Cheight(x) ((x) << FShft(HCSIZE_CHEIGHT))
++
++/* HCPOS Hardware Cursor Position Register fields */
++#define HCPOS_SWITCHSRC (1 << 30)
++#define HCPOS_CURBLINK Fld(6,24)
++#define Hcpos_Curblink(x) ((x) << FShft(HCPOS_CURBLINK))
++#define HCPOS_XSTART Fld(12,12)
++#define Hcpos_Xstart(x) ((x) << FShft(HCPOS_XSTART))
++#define HCPOS_YSTART Fld(12,0)
++#define Hcpos_Ystart(y) ((y) << FShft(HCPOS_YSTART))
++
++/* HCBADR Hardware Cursor Blend Address Register */
++#define HCBADR_GLALPHA Fld(8,24)
++#define Hcbadr_Glalpha(x) ((x) << FShft(HCBADR_GLALPHA))
++#define HCBADR_COLKEY Fld(24,0)
++#define Hcbadr_Colkey(x) ((x) << FShft(HCBADR_COLKEY))
++
++/* HCCKMSK - Hardware Cursor Color Key Mask Register */
++#define HCCKMSK_COLKEY_M Fld(24,0)
++#define Hcckmsk_Colkey_M(x) ((x) << FShft(HCCKMSK_COLKEY_M))
++
++/* DSCTRL - Display sync control register */
++#define DSCTRL_SYNCGEN_EN (1 << 31)
++#define DSCTRL_DPL_RST (1 << 29)
++#define DSCTRL_PWRDN_M (1 << 28)
++#define DSCTRL_UPDSYNCCNT (1 << 26)
++#define DSCTRL_UPDINTCNT (1 << 25)
++#define DSCTRL_UPDCNT (1 << 24)
++#define DSCTRL_UPDWAIT Fld(4,16)
++#define Dsctrl_Updwait(x) ((x) << FShft(DSCTRL_UPDWAIT))
++#define DSCTRL_CLKPOL (1 << 11)
++#define DSCTRL_CSYNC_EN (1 << 10)
++#define DSCTRL_VS_SLAVE (1 << 7)
++#define DSCTRL_HS_SLAVE (1 << 6)
++#define DSCTRL_BLNK_POL (1 << 5)
++#define DSCTRL_BLNK_DIS (1 << 4)
++#define DSCTRL_VS_POL (1 << 3)
++#define DSCTRL_VS_DIS (1 << 2)
++#define DSCTRL_HS_POL (1 << 1)
++#define DSCTRL_HS_DIS (1 << 0)
++
++/* DHT01 - Display horizontal timing register 01 */
++#define DHT01_HBPS Fld(12,16)
++#define Dht01_Hbps(x) ((x) << FShft(DHT01_HBPS))
++#define DHT01_HT Fld(12,0)
++#define Dht01_Ht(x) ((x) << FShft(DHT01_HT))
++
++/* DHT02 - Display horizontal timing register 02 */
++#define DHT02_HAS Fld(12,16)
++#define Dht02_Has(x) ((x) << FShft(DHT02_HAS))
++#define DHT02_HLBS Fld(12,0)
++#define Dht02_Hlbs(x) ((x) << FShft(DHT02_HLBS))
++
++/* DHT03 - Display horizontal timing register 03 */
++#define DHT03_HFPS Fld(12,16)
++#define Dht03_Hfps(x) ((x) << FShft(DHT03_HFPS))
++#define DHT03_HRBS Fld(12,0)
++#define Dht03_Hrbs(x) ((x) << FShft(DHT03_HRBS))
++
++/* DVT01 - Display vertical timing register 01 */
++#define DVT01_VBPS Fld(12,16)
++#define Dvt01_Vbps(x) ((x) << FShft(DVT01_VBPS))
++#define DVT01_VT Fld(12,0)
++#define Dvt01_Vt(x) ((x) << FShft(DVT01_VT))
++
++/* DVT02 - Display vertical timing register 02 */
++#define DVT02_VAS Fld(12,16)
++#define Dvt02_Vas(x) ((x) << FShft(DVT02_VAS))
++#define DVT02_VTBS Fld(12,0)
++#define Dvt02_Vtbs(x) ((x) << FShft(DVT02_VTBS))
++
++/* DVT03 - Display vertical timing register 03 */
++#define DVT03_VFPS Fld(12,16)
++#define Dvt03_Vfps(x) ((x) << FShft(DVT03_VFPS))
++#define DVT03_VBBS Fld(12,0)
++#define Dvt03_Vbbs(x) ((x) << FShft(DVT03_VBBS))
++
++/* DVECTRL - display vertical event control register */
++#define DVECTRL_VEVENT Fld(12,16)
++#define Dvectrl_Vevent(x) ((x) << FShft(DVECTRL_VEVENT))
++#define DVECTRL_VFETCH Fld(12,0)
++#define Dvectrl_Vfetch(x) ((x) << FShft(DVECTRL_VFETCH))
++
++/* DHDET - display horizontal DE timing register */
++#define DHDET_HDES Fld(12,16)
++#define Dhdet_Hdes(x) ((x) << FShft(DHDET_HDES))
++#define DHDET_HDEF Fld(12,0)
++#define Dhdet_Hdef(x) ((x) << FShft(DHDET_HDEF))
++
++/* DVDET - display vertical DE timing register */
++#define DVDET_VDES Fld(12,16)
++#define Dvdet_Vdes(x) ((x) << FShft(DVDET_VDES))
++#define DVDET_VDEF Fld(12,0)
++#define Dvdet_Vdef(x) ((x) << FShft(DVDET_VDEF))
++
++/* DODMSK - display output data mask register */
++#define DODMSK_MASK_LVL (1 << 31)
++#define DODMSK_BLNK_LVL (1 << 30)
++#define DODMSK_MASK_B Fld(8,16)
++#define Dodmsk_Mask_B(x) ((x) << FShft(DODMSK_MASK_B))
++#define DODMSK_MASK_G Fld(8,8)
++#define Dodmsk_Mask_G(x) ((x) << FShft(DODMSK_MASK_G))
++#define DODMSK_MASK_R Fld(8,0)
++#define Dodmsk_Mask_R(x) ((x) << FShft(DODMSK_MASK_R))
++
++/* DBCOL - display border color control register */
++#define DBCOL_BORDCOL Fld(24,0)
++#define Dbcol_Bordcol(x) ((x) << FShft(DBCOL_BORDCOL))
++
++/* DVLNUM - display vertical line number register */
++#define DVLNUM_VLINE Fld(12,0)
++#define Dvlnum_Vline(x) ((x) << FShft(DVLNUM_VLINE))
++
++/* DMCTRL - Display Memory Control Register */
++#define DMCTRL_MEM_REF Fld(2,30)
++#define DMCTRL_MEM_REF_ACT ((0x0) << FShft(DMCTRL_MEM_REF))
++#define DMCTRL_MEM_REF_HB ((0x1) << FShft(DMCTRL_MEM_REF))
++#define DMCTRL_MEM_REF_VB ((0x2) << FShft(DMCTRL_MEM_REF))
++#define DMCTRL_MEM_REF_BOTH ((0x3) << FShft(DMCTRL_MEM_REF))
++#define DMCTRL_UV_THRHLD Fld(6,24)
++#define Dmctrl_Uv_Thrhld(x) ((x) << FShft(DMCTRL_UV_THRHLD))
++#define DMCTRL_V_THRHLD Fld(7,16)
++#define Dmctrl_V_Thrhld(x) ((x) << FShft(DMCTRL_V_THRHLD))
++#define DMCTRL_D_THRHLD Fld(7,8)
++#define Dmctrl_D_Thrhld(x) ((x) << FShft(DMCTRL_D_THRHLD))
++#define DMCTRL_BURSTLEN Fld(6,0)
++#define Dmctrl_Burstlen(x) ((x) << FShft(DMCTRL_BURSTLEN))
++
++
++/* DLSTS - display load status register */
++#define DLSTS_RLD_ADONE (1 << 23)
++/* #define DLSTS_RLD_ADOUT Fld(23,0) */
++
++/* DLLCTRL - display list load control register */
++#define DLLCTRL_RLD_ADRLN Fld(8,24)
++#define Dllctrl_Rld_Adrln(x) ((x) << FShft(DLLCTRL_RLD_ADRLN))
++
++/* #define DSIG __REG_2700G(0x03FE2184) */
++/* #define DINTRS __REG_2700G(0x03FE2178) */
++/* #define DINTRE __REG_2700G(0x03FE217C) */
++/* #define DINTRCNT __REG_2700G(0x03FE2180) */
++/* #define DUCTRL __REG_2700G(0x03FE230C) */
++
++/* BGCOLOR - background color control register */
++/* #define BGCOLOR __REG_2700G(0x03FE2174) */
++
++/* #define CLIPCTRL __REG_2700G(0x03FE218C) */
++/* SPOCTRL - Scale Pitch/Order Control Register */
++#define SPOCTRL_H_SC_BP (1 << 31)
++#define SPOCTRL_V_SC_BP (1 << 30)
++#define SPOCTRL_HV_SC_OR (1 << 29)
++#define SPOCTRL_VS_UR_C (1 << 27)
++#define SPOCTRL_VORDER Fld(2,16)
++#define SPOCTRL_VORDER_1TAP ((0x0) << FShft(SPOCTRL_VORDER))
++#define SPOCTRL_VORDER_2TAP ((0x1) << FShft(SPOCTRL_VORDER))
++#define SPOCTRL_VORDER_4TAP ((0x3) << FShft(SPOCTRL_VORDER))
++#define SPOCTRL_VPITCH Fld(16,0)
++#define Spoctrl_Vpitch(x) ((x) << FShft(SPOCTRL_VPITCH))
++
++/* #define SVCTRL __REG_2700G(0x03FE2194) */
++
++/* /\* 0x03FE_2198 *\/ */
++/* /\* 0x03FE_21A8 VSCOEFF[0:4] Video Scalar Vertical Coefficient [0:4] 4.14.5 *\/ */
++
++/* #define SHCTRL __REG_2700G(0x03FE21B0) */
++
++/* /\* 0x03FE_21B4 *\/ */
++/* /\* 0x03FE_21D4 HSCOEFF[0:8] Video Scalar Horizontal Coefficient [0:8] 4.14.7 *\/ */
++
++/* #define SSSIZE __REG_2700G(0x03FE21D8) */
++
++/* /\* 0x03FE_2200 *\/ */
++/* /\* 0x03FE_2240 VIDGAM[0:16] Video Gamma LUT Index [0:16] 4.15.2 *\/ */
++
++/* /\* 0x03FE_2250 *\/ */
++/* /\* 0x03FE_2290 GFXGAM[0:16] Graphics Gamma LUT Index [0:16] 4.15.3 *\/ */
++
++/* #define CSC01 __REG_2700G(0x03FE2330) */
++/* #define CSC02 __REG_2700G(0x03FE2334) */
++/* #define CSC03 __REG_2700G(0x03FE2338) */
++/* #define CSC04 __REG_2700G(0x03FE233C) */
++/* #define CSC05 __REG_2700G(0x03FE2340) */
++
++#endif /* __REG_BITS_2700G_ */
+diff --git a/drivers/video/mbx/regs.h b/drivers/video/mbx/regs.h
+new file mode 100644
+index 0000000..edf0f14
+--- /dev/null
++++ b/drivers/video/mbx/regs.h
+@@ -0,0 +1,192 @@
++#ifndef __REGS_2700G_
++#define __REGS_2700G_
++
++/* extern unsigned long virt_base_2700; */
++#define __REG_2700G(x) (*(volatile unsigned long*)((x)+virt_base_2700))
++
++/* System Configuration Registers (0x0000_0000 0x0000_0010) */
++#define SYSCFG __REG_2700G(0x00000000)
++#define PFBASE __REG_2700G(0x00000004)
++#define PFCEIL __REG_2700G(0x00000008)
++#define POLLFLAG __REG_2700G(0x0000000c)
++#define SYSRST __REG_2700G(0x00000010)
++
++/* Interrupt Control Registers (0x0000_0014 0x0000_002F) */
++#define NINTPW __REG_2700G(0x00000014)
++#define MINTENABLE __REG_2700G(0x00000018)
++#define MINTSTAT __REG_2700G(0x0000001c)
++#define SINTENABLE __REG_2700G(0x00000020)
++#define SINTSTAT __REG_2700G(0x00000024)
++#define SINTCLR __REG_2700G(0x00000028)
++
++/* Clock Control Registers (0x0000_002C 0x0000_005F) */
++#define SYSCLKSRC __REG_2700G(0x0000002c)
++#define PIXCLKSRC __REG_2700G(0x00000030)
++#define CLKSLEEP __REG_2700G(0x00000034)
++#define COREPLL __REG_2700G(0x00000038)
++#define DISPPLL __REG_2700G(0x0000003c)
++#define PLLSTAT __REG_2700G(0x00000040)
++#define VOVRCLK __REG_2700G(0x00000044)
++#define PIXCLK __REG_2700G(0x00000048)
++#define MEMCLK __REG_2700G(0x0000004c)
++#define M24CLK __REG_2700G(0x00000054)
++#define MBXCLK __REG_2700G(0x00000054)
++#define SDCLK __REG_2700G(0x00000058)
++#define PIXCLKDIV __REG_2700G(0x0000005c)
++
++/* LCD Port Control Register (0x0000_0060 0x0000_006F) */
++#define LCD_CONFIG __REG_2700G(0x00000060)
++
++/* On-Die Frame Buffer Registers (0x0000_0064 0x0000_006B) */
++#define ODFBPWR __REG_2700G(0x00000064)
++#define ODFBSTAT __REG_2700G(0x00000068)
++
++/* GPIO Registers (0x0000_006C 0x0000_007F) */
++#define GPIOCGF __REG_2700G(0x0000006c)
++#define GPIOHI __REG_2700G(0x00000070)
++#define GPIOLO __REG_2700G(0x00000074)
++#define GPIOSTAT __REG_2700G(0x00000078)
++
++/* Pulse Width Modulator (PWM) Registers (0x0000_0200 0x0000_02FF) */
++#define PWMRST __REG_2700G(0x00000200)
++#define PWMCFG __REG_2700G(0x00000204)
++#define PWM0DIV __REG_2700G(0x00000210)
++#define PWM0DUTY __REG_2700G(0x00000214)
++#define PWM0PER __REG_2700G(0x00000218)
++#define PWM1DIV __REG_2700G(0x00000220)
++#define PWM1DUTY __REG_2700G(0x00000224)
++#define PWM1PER __REG_2700G(0x00000228)
++
++/* Identification (ID) Registers (0x0000_0300 0x0000_0FFF) */
++#define ID __REG_2700G(0x00000FF0)
++
++/* Local Memory (SDRAM) Interface Registers (0x0000_1000 0x0000_1FFF) */
++#define LMRST __REG_2700G(0x00001000)
++#define LMCFG __REG_2700G(0x00001004)
++#define LMPWR __REG_2700G(0x00001008)
++#define LMPWRSTAT __REG_2700G(0x0000100c)
++#define LMCEMR __REG_2700G(0x00001010)
++#define LMTYPE __REG_2700G(0x00001014)
++#define LMTIM __REG_2700G(0x00001018)
++#define LMREFRESH __REG_2700G(0x0000101c)
++#define LMPROTMIN __REG_2700G(0x00001020)
++#define LMPROTMAX __REG_2700G(0x00001024)
++#define LMPROTCFG __REG_2700G(0x00001028)
++#define LMPROTERR __REG_2700G(0x0000102c)
++
++/* Plane Controller Registers (0x0000_2000 0x0000_2FFF) */
++#define GSCTRL __REG_2700G(0x00002000)
++#define VSCTRL __REG_2700G(0x00002004)
++#define GBBASE __REG_2700G(0x00002020)
++#define VBBASE __REG_2700G(0x00002024)
++#define GDRCTRL __REG_2700G(0x00002040)
++#define VCMSK __REG_2700G(0x00002044)
++#define GSCADR __REG_2700G(0x00002060)
++#define VSCADR __REG_2700G(0x00002064)
++#define VUBASE __REG_2700G(0x00002084)
++#define VVBASE __REG_2700G(0x000020a4)
++#define GSADR __REG_2700G(0x000020c0)
++#define VSADR __REG_2700G(0x000020c4)
++#define HCCTRL __REG_2700G(0x00002100)
++#define HCSIZE __REG_2700G(0x00002110)
++#define HCPOS __REG_2700G(0x00002120)
++#define HCBADR __REG_2700G(0x00002130)
++#define HCCKMSK __REG_2700G(0x00002140)
++#define GPLUT __REG_2700G(0x00002150)
++#define DSCTRL __REG_2700G(0x00002154)
++#define DHT01 __REG_2700G(0x00002158)
++#define DHT02 __REG_2700G(0x0000215c)
++#define DHT03 __REG_2700G(0x00002160)
++#define DVT01 __REG_2700G(0x00002164)
++#define DVT02 __REG_2700G(0x00002168)
++#define DVT03 __REG_2700G(0x0000216c)
++#define DBCOL __REG_2700G(0x00002170)
++#define BGCOLOR __REG_2700G(0x00002174)
++#define DINTRS __REG_2700G(0x00002178)
++#define DINTRE __REG_2700G(0x0000217c)
++#define DINTRCNT __REG_2700G(0x00002180)
++#define DSIG __REG_2700G(0x00002184)
++#define DMCTRL __REG_2700G(0x00002188)
++#define CLIPCTRL __REG_2700G(0x0000218c)
++#define SPOCTRL __REG_2700G(0x00002190)
++#define SVCTRL __REG_2700G(0x00002194)
++
++/* 0x0000_2198 */
++/* 0x0000_21A8 VSCOEFF[0:4] Video Scalar Vertical Coefficient [0:4] 4.14.5 */
++#define VSCOEFF0 __REG_2700G(0x00002198)
++#define VSCOEFF1 __REG_2700G(0x0000219c)
++#define VSCOEFF2 __REG_2700G(0x000021a0)
++#define VSCOEFF3 __REG_2700G(0x000021a4)
++#define VSCOEFF4 __REG_2700G(0x000021a8)
++
++#define SHCTRL __REG_2700G(0x000021b0)
++
++/* 0x0000_21B4 */
++/* 0x0000_21D4 HSCOEFF[0:8] Video Scalar Horizontal Coefficient [0:8] 4.14.7 */
++#define HSCOEFF0 __REG_2700G(0x000021b4)
++#define HSCOEFF1 __REG_2700G(0x000021b8)
++#define HSCOEFF2 __REG_2700G(0x000021bc)
++#define HSCOEFF3 __REG_2700G(0x000021b0)
++#define HSCOEFF4 __REG_2700G(0x000021c4)
++#define HSCOEFF5 __REG_2700G(0x000021c8)
++#define HSCOEFF6 __REG_2700G(0x000021cc)
++#define HSCOEFF7 __REG_2700G(0x000021d0)
++#define HSCOEFF8 __REG_2700G(0x000021d4)
++
++#define SSSIZE __REG_2700G(0x000021D8)
++
++/* 0x0000_2200 */
++/* 0x0000_2240 VIDGAM[0:16] Video Gamma LUT Index [0:16] 4.15.2 */
++#define VIDGAM0 __REG_2700G(0x00002200)
++#define VIDGAM1 __REG_2700G(0x00002204)
++#define VIDGAM2 __REG_2700G(0x00002208)
++#define VIDGAM3 __REG_2700G(0x0000220c)
++#define VIDGAM4 __REG_2700G(0x00002210)
++#define VIDGAM5 __REG_2700G(0x00002214)
++#define VIDGAM6 __REG_2700G(0x00002218)
++#define VIDGAM7 __REG_2700G(0x0000221c)
++#define VIDGAM8 __REG_2700G(0x00002220)
++#define VIDGAM9 __REG_2700G(0x00002224)
++#define VIDGAM10 __REG_2700G(0x00002228)
++#define VIDGAM11 __REG_2700G(0x0000222c)
++#define VIDGAM12 __REG_2700G(0x00002230)
++#define VIDGAM13 __REG_2700G(0x00002234)
++#define VIDGAM14 __REG_2700G(0x00002238)
++#define VIDGAM15 __REG_2700G(0x0000223c)
++#define VIDGAM16 __REG_2700G(0x00002240)
++
++/* 0x0000_2250 */
++/* 0x0000_2290 GFXGAM[0:16] Graphics Gamma LUT Index [0:16] 4.15.3 */
++#define GFXGAM0 __REG_2700G(0x00002250)
++#define GFXGAM1 __REG_2700G(0x00002254)
++#define GFXGAM2 __REG_2700G(0x00002258)
++#define GFXGAM3 __REG_2700G(0x0000225c)
++#define GFXGAM4 __REG_2700G(0x00002260)
++#define GFXGAM5 __REG_2700G(0x00002264)
++#define GFXGAM6 __REG_2700G(0x00002268)
++#define GFXGAM7 __REG_2700G(0x0000226c)
++#define GFXGAM8 __REG_2700G(0x00002270)
++#define GFXGAM9 __REG_2700G(0x00002274)
++#define GFXGAM10 __REG_2700G(0x00002278)
++#define GFXGAM11 __REG_2700G(0x0000227c)
++#define GFXGAM12 __REG_2700G(0x00002280)
++#define GFXGAM13 __REG_2700G(0x00002284)
++#define GFXGAM14 __REG_2700G(0x00002288)
++#define GFXGAM15 __REG_2700G(0x0000228c)
++#define GFXGAM16 __REG_2700G(0x00002290)
++
++#define DLSTS __REG_2700G(0x00002300)
++#define DLLCTRL __REG_2700G(0x00002304)
++#define DVLNUM __REG_2700G(0x00002308)
++#define DUCTRL __REG_2700G(0x0000230c)
++#define DVECTRL __REG_2700G(0x00002310)
++#define DHDET __REG_2700G(0x00002314)
++#define DVDET __REG_2700G(0x00002318)
++#define DODMSK __REG_2700G(0x0000231c)
++#define CSC01 __REG_2700G(0x00002330)
++#define CSC02 __REG_2700G(0x00002334)
++#define CSC03 __REG_2700G(0x00002338)
++#define CSC04 __REG_2700G(0x0000233c)
++#define CSC05 __REG_2700G(0x00002340)
++
++#endif /* __REGS_2700G_ */
+diff --git a/drivers/video/pxafb.c b/drivers/video/pxafb.c
+index 53ad61f..76675f6 100644
+--- a/drivers/video/pxafb.c
++++ b/drivers/video/pxafb.c
+@@ -48,6 +48,11 @@ #include <asm/arch/pxa-regs.h>
+ #include <asm/arch/bitfield.h>
+ #include <asm/arch/pxafb.h>
+
++#ifdef CONFIG_PXA27x
++#define LCCR4 __REG(0x44000010) /* LCD Controller Control Register 3 */
++#endif
++
++
+ /*
+ * Complain if VAR is out of range.
+ */
+@@ -113,9 +118,15 @@ pxafb_setpalettereg(u_int regno, u_int r
+ if (fbi->fb.var.grayscale) {
+ val = ((blue >> 8) & 0x00ff);
+ } else {
++#ifdef CONFIG_ARMCORE_REV11
++ val = (((red & 0xff) << 16) & 0xfc0000);
++ val |= (((green & 0xff) << 8) & 0xfc00);
++ val |= (((blue & 0xff) << 0) & 0x00fc);
++#else
+ val = ((red >> 0) & 0xf800);
+ val |= ((green >> 5) & 0x07e0);
+ val |= ((blue >> 11) & 0x001f);
++#endif
+ }
+ fbi->palette_cpu[regno] = val;
+ ret = 0;
+@@ -426,6 +437,8 @@ static struct fb_ops pxafb_ops = {
+ * We take account of the PPCR clock setting.
+ * From PXA Developer's Manual:
+ *
++ * If PCDDIV = 0 then:
++ *
+ * PixelClock = LCLK
+ * -------------
+ * 2 ( PCD + 1 )
+@@ -434,6 +447,17 @@ static struct fb_ops pxafb_ops = {
+ * ------------- - 1
+ * 2(PixelClock)
+ *
++ *
++ * If PCDDIV = 1 then:
++ *
++ * PixelClock = LCLK
++ * -------------
++ * ( PCD + 1 )
++ *
++ * PCD = LCLK
++ * ------------- - 1
++ * PixelClock
++ *
+ * Where:
+ * LCLK = LCD/Memory Clock
+ * PCD = LCCR3[7:0]
+@@ -448,22 +472,64 @@ static struct fb_ops pxafb_ops = {
+ * PCD = (lclk * 10^4 ) * ( pixclock * 10^-12 )
+ * -------------------------------------- - 1
+ * 2
++ * or
++ * PCD = (lclk * 10^4 ) * ( pixclock * 10^-12 ) - 1
+ *
+ * Factoring the 10^4 and 10^-12 out gives 10^-8 == 1 / 100000000 as used below.
+ */
+-static inline unsigned int get_pcd(unsigned int pixclock)
++static inline unsigned int get_pcd(unsigned int pixclock, unsigned int *lccr4)
+ {
+- unsigned long long pcd;
++ /* pcd1 is for PCDDIV=0 and pcd2 for PCDDIV=1 */
++ unsigned long long pcd1, pcd2;
++ unsigned long long clk1, clk2;
++ unsigned long long dif1, dif2;
++
++ *lccr4 = LCCR4;
+
+ /* FIXME: Need to take into account Double Pixel Clock mode
+ * (DPC) bit? or perhaps set it based on the various clock
+ * speeds */
+
+- pcd = (unsigned long long)get_lcdclk_frequency_10khz() * pixclock;
+- do_div(pcd, 100000000 * 2);
++ pcd1 = pcd2 = (unsigned long long)get_lcdclk_frequency_10khz() * pixclock;
++ do_div(pcd1, 100000000 * 2); /* pcd1 /= 100000000 * 2; */
++ do_div(pcd2, 100000000); /* pcd2 /= 100000000; */
++
++/* clk1 = 100000000*(2 * (pcd1 + 1))/get_lcdclk_frequency_10khz(); */
++/* clk2 = 100000000*(pcd2 + 1)/get_lcdclk_frequency_10khz(); */
++
++ clk1 = 100000000*(2 * (pcd1 + 1));
++ clk2 = 100000000*(pcd2 + 1);
++ do_div(clk1, get_lcdclk_frequency_10khz());
++ do_div(clk2, get_lcdclk_frequency_10khz());
++
++ pr_debug("get_pcd: pcd1 = %lld, dotclock = %lld\n", pcd1, clk1);
++ pr_debug("get_pcd: pcd2 = %lld, dotclock = %lld\n", pcd2, clk2);
++
++ dif1 = pixclock - clk1;
++ if ( clk1 > pixclock )
++ dif1 *= -1;
++
++ dif2 = pixclock - clk2;
++ if ( clk2 > pixclock )
++ dif2 *= -1;
++
++ if ( dif1 > dif2 ) {
++ *lccr4 |= (1 << 31);
++ pr_debug(KERN_INFO "get_pcd: setting pixclock to high rate\n");
++ return (unsigned int)pcd2;
++ }
++ else {
++ *lccr4 &= ~(1 << 31);
++ pr_debug(KERN_INFO "get_pcd: setting pixclock to low rate\n");
++ return (unsigned int)pcd1;
++ }
++
+ /* no need for this, since we should subtract 1 anyway. they cancel */
+ /* pcd += 1; */ /* make up for integer math truncations */
+- return (unsigned int)pcd;
++/* return (unsigned int)pcd2; */
++
++ /* never get here */
++ return (unsigned int)0;
+ }
+
+ /*
+@@ -505,7 +571,9 @@ static int pxafb_activate_var(struct fb_
+ {
+ struct pxafb_lcd_reg new_regs;
+ u_long flags;
+- u_int lines_per_panel, pcd = get_pcd(var->pixclock);
++ u_int lines_per_panel;
++ u_int lccr4;
++ u_int pcd = get_pcd(var->pixclock, &lccr4);
+
+ pr_debug("pxafb: Configuring PXA LCD\n");
+
+@@ -735,10 +803,18 @@ static void pxafb_setup_gpio(struct pxaf
+ pxa_gpio_mode(GPIO75_LCD_LCLK_MD);
+ pxa_gpio_mode(GPIO76_LCD_PCLK_MD);
+ pxa_gpio_mode(GPIO77_LCD_ACBIAS_MD);
++
++#ifdef CONFIG_ARMCORE_REV11
++ pxa_gpio_mode(86 | GPIO_ALT_FN_2_OUT);
++ pxa_gpio_mode(87 | GPIO_ALT_FN_2_OUT);
++#endif
+ }
+
+ static void pxafb_enable_controller(struct pxafb_info *fbi)
+ {
++ unsigned int lccr4;
++ unsigned int pcd = get_pcd(fbi->fb.var.pixclock, &lccr4);
++
+ pr_debug("pxafb: Enabling LCD controller\n");
+ pr_debug("fdadr0 0x%08x\n", (unsigned int) fbi->fdadr0);
+ pr_debug("fdadr1 0x%08x\n", (unsigned int) fbi->fdadr1);
+@@ -751,7 +827,20 @@ static void pxafb_enable_controller(stru
+ pxa_set_cken(CKEN16_LCD, 1);
+
+ /* Sequence from 11.7.10 */
+- LCCR3 = fbi->reg_lccr3;
++#ifdef CONFIG_ARMCORE_REV12
++ LCCR4 = lccr4;
++#else
++ LCCR4 = 0 | (2 << 15) | lccr4;
++#endif
++
++ fbi->reg_lccr3 = (fbi->reg_lccr3 & ~0xff) | LCCR3_PixClkDiv(pcd);
++
++#ifdef CONFIG_ARMCORE_REV12
++ LCCR3 = (fbi->reg_lccr3);//& (~(7 << 24))) | (3 << 24);
++#else
++ LCCR3 = (fbi->reg_lccr3 | (3 << 30)) ;//& (~(7 << 24))) | (3 << 24);
++#endif
++
+ LCCR2 = fbi->reg_lccr2;
+ LCCR1 = fbi->reg_lccr1;
+ LCCR0 = fbi->reg_lccr0 & ~LCCR0_ENB;
+@@ -1083,6 +1172,7 @@ static struct pxafb_info * __init pxafb_
+ addr = addr + sizeof(struct pxafb_info);
+ fbi->fb.pseudo_palette = addr;
+
++ fbi->fb.var.pixclock = inf->pixclock;
+ fbi->max_xres = inf->xres;
+ fbi->fb.var.xres = inf->xres;
+ fbi->fb.var.xres_virtual = inf->xres;
+diff --git a/include/asm-arm/arch-pxa/cm-x270.h b/include/asm-arm/arch-pxa/cm-x270.h
+new file mode 100644
+index 0000000..7099ae7
+--- /dev/null
++++ b/include/asm-arm/arch-pxa/cm-x270.h
+@@ -0,0 +1,72 @@
++/*
++ * linux/include/asm/arch-pxa/armcore.h
++ *
++ * Compulab Ltd., 2003
++ *
++ * ARMCore registers
++ */
++
++#include <linux/config.h>
++
++#define CMX270_CS1_PHYS (PXA_CS1_PHYS)
++#define MARATHON_PHYS (PXA_CS2_PHYS)
++#define CMX270_IDE104_PHYS (PXA_CS3_PHYS)
++#define CMX270_IT8152_PHYS (PXA_CS4_PHYS)
++
++#define PXA_CS_SIZE (64*1024*1024)
++
++/* Virtual map */
++
++#define CMX270_VIRT_BASE (0xe8000000)
++
++#define CMX270_IT8152_VIRT (CMX270_VIRT_BASE)
++#define CMX270_IDE104_VIRT (CMX270_IT8152_VIRT + PXA_CS_SIZE)
++
++
++/* GPIO related definitions */
++#define GPIO_IT8152_IRQ (22)
++#define GPIO_RED_LED (93)
++#define GPIO_GREEN_LED (94)
++
++
++#define IRQ_GPIO_IT8152_IRQ IRQ_GPIO(GPIO_IT8152_IRQ)
++#define PME_IRQ IRQ_GPIO(0)
++#define CMX270_IDE_IRQ IRQ_GPIO(100)
++#define CMX270_GPIRQ1 IRQ_GPIO(101)
++#define CMX270_TOUCHIRQ IRQ_GPIO(96)
++#define CMX270_ETHIRQ IRQ_GPIO(10)
++#define CMX270_GFXIRQ IRQ_GPIO(95)
++#define CMX270_NANDIRQ IRQ_GPIO(89)
++#define CMX270_MMC_IRQ IRQ_GPIO(83)
++
++/* LED macros */
++#define CMX270_RED_ON() GPCR(GPIO_RED_LED) = GPIO_bit(GPIO_RED_LED)
++#define CMX270_RED_OFF() GPSR(GPIO_RED_LED) = GPIO_bit(GPIO_RED_LED)
++#define CMX270_GREEN_ON() GPCR(GPIO_GREEN_LED) = GPIO_bit(GPIO_GREEN_LED)
++#define CMX270_GREEN_OFF() GPSR(GPIO_GREEN_LED) = GPIO_bit(GPIO_GREEN_LED)
++
++/* PCMCIA related definitions */
++#define PCC_DETECT(x) (GPLR(84 - (x)) & GPIO_bit(84 - (x)))
++#define PCC_READY(x) (GPLR(82 - (x)) & GPIO_bit(81 - (x)))
++
++#define PCMCIA_S0_CD_VALID IRQ_GPIO(84)
++#define PCMCIA_S0_CD_VALID_EDGE GPIO_BOTH_EDGES
++
++#define PCMCIA_S1_CD_VALID IRQ_GPIO(83)
++#define PCMCIA_S1_CD_VALID_EDGE GPIO_BOTH_EDGES
++
++#define PCMCIA_S0_RDYINT IRQ_GPIO(82)
++#define PCMCIA_S1_RDYINT IRQ_GPIO(81)
++
++#define PCMCIA_RESET_GPIO 53
++
++
++
++
++
++
++
++
++
++
++
+diff --git a/include/asm-arm/arch-pxa/hardware.h b/include/asm-arm/arch-pxa/hardware.h
+index 3e70bd9..cb4fb2f 100644
+--- a/include/asm-arm/arch-pxa/hardware.h
++++ b/include/asm-arm/arch-pxa/hardware.h
+@@ -80,4 +80,15 @@ extern unsigned int get_lcdclk_frequency
+
+ #endif
+
++#if defined(CONFIG_MACH_ARMCORE) && defined(CONFIG_PCI)
++#define HAVE_ARCH_PCI_SET_DMA_MASK
++#ifndef __ASSEMBLY__
++extern unsigned long armcore_pcibios_min_io;
++extern unsigned long armcore_pcibios_min_mem;
++#endif
++#define PCIBIOS_MIN_IO (armcore_pcibios_min_io)
++#define PCIBIOS_MIN_MEM (armcore_pcibios_min_mem)
++#define pcibios_assign_all_busses() 1
++#endif
++
+ #endif /* _ASM_ARCH_HARDWARE_H */
+diff --git a/include/asm-arm/arch-pxa/irqs.h b/include/asm-arm/arch-pxa/irqs.h
+index 05c4b70..f0259cd 100644
+--- a/include/asm-arm/arch-pxa/irqs.h
++++ b/include/asm-arm/arch-pxa/irqs.h
+@@ -176,7 +176,8 @@ #define NR_IRQS (IRQ_S1_BVD1_STSCHG +
+ #elif defined(CONFIG_SHARP_LOCOMO)
+ #define NR_IRQS (IRQ_LOCOMO_SPI_TEND + 1)
+ #elif defined(CONFIG_ARCH_LUBBOCK) || \
+- defined(CONFIG_MACH_MAINSTONE)
++ defined(CONFIG_MACH_MAINSTONE) || \
++ defined(CONFIG_MACH_ARMCORE)
+ #define NR_IRQS (IRQ_BOARD_END)
+ #else
+ #define NR_IRQS (IRQ_BOARD_START)
+@@ -217,3 +218,24 @@ #define IRQ_LOCOMO_KEY_BASE (IRQ_BOARD_S
+ #define IRQ_LOCOMO_GPIO_BASE (IRQ_BOARD_START + 1)
+ #define IRQ_LOCOMO_LT_BASE (IRQ_BOARD_START + 2)
+ #define IRQ_LOCOMO_SPI_BASE (IRQ_BOARD_START + 3)
++
++/* ITE8152 irqs on CM-x2xx */
++#ifdef CONFIG_MACH_ARMCORE
++#define IT8152_IRQ(x) (IRQ_BOARD_START + (x))
++#define PCISERR IT8152_IRQ(0)
++#define H2PTADR IT8152_IRQ(1)
++#define H2PMAR IT8152_IRQ(2)
++#define PCI_INTA IT8152_IRQ(3)
++#define PCI_INTB IT8152_IRQ(4)
++#define PCI_INTC IT8152_IRQ(5)
++#define PCI_INTD IT8152_IRQ(6)
++#define USB_INT IT8152_IRQ(7)
++#define AUDIO_INT IT8152_IRQ(8)
++#define CDMA_INT IT8152_IRQ(9)
++#define IRQ_ITESER IT8152_IRQ(10)
++#define IT8152_IRQ_MAX IT8152_IRQ(10)
++
++
++#undef NR_IRQS
++#define NR_IRQS IT8152_IRQ_MAX+1
++#endif
+diff --git a/include/asm-arm/arch-pxa/marathonfb.h b/include/asm-arm/arch-pxa/marathonfb.h
+new file mode 100644
+index 0000000..97b69ef
+--- /dev/null
++++ b/include/asm-arm/arch-pxa/marathonfb.h
+@@ -0,0 +1,28 @@
++#ifndef __MARATHON_FB_H
++#define __MARATHON_FB_H
++
++struct mbxfb_val {
++ unsigned int defval;
++ unsigned int min;
++ unsigned int max;
++};
++
++struct fb_info;
++
++struct mbxfb_platform_data {
++ /* Screen info */
++ struct mbxfb_val xres;
++ struct mbxfb_val yres;
++ struct mbxfb_val bpp;
++
++ /* Memory info */
++ unsigned long memsize; /* if 0 use ODFB? */
++ unsigned long timings1;
++ unsigned long timings2;
++ unsigned long timings3;
++
++ int (*probe)(struct fb_info *fb);
++ int (*remove)(struct fb_info *fb);
++};
++
++#endif /* __MARATHON_FB_H */
+diff --git a/include/asm-arm/arch-pxa/memory.h b/include/asm-arm/arch-pxa/memory.h
+index eaf6d43..98807e7 100644
+--- a/include/asm-arm/arch-pxa/memory.h
++++ b/include/asm-arm/arch-pxa/memory.h
+@@ -17,6 +17,19 @@ #define __ASM_ARCH_MEMORY_H
+ */
+ #define PHYS_OFFSET UL(0xa0000000)
+
++
++#ifdef CONFIG_PCI_HOST_ITE8152
++#ifndef __ASSEMBLY__
++void it8152_adjust_zones(int node, unsigned long *size, unsigned long *holes);
++
++#define arch_adjust_zones(node, size, holes) \
++ it8152_adjust_zones(node, size, holes)
++
++#define ISA_DMA_THRESHOLD (SZ_64M - 1)
++#endif
++#endif
++
++
+ /*
+ * Virtual view <-> DMA view memory address translations
+ * virt_to_bus: Used to translate the virtual address to an
+diff --git a/include/asm-arm/arch-pxa/pxafbsetup.h b/include/asm-arm/arch-pxa/pxafbsetup.h
+new file mode 100644
+index 0000000..8a7c8de
+--- /dev/null
++++ b/include/asm-arm/arch-pxa/pxafbsetup.h
+@@ -0,0 +1,39 @@
++/*
++ Panel specific LCD controller setup
++ */
++
++#ifndef _PXAFBSETUP_H
++#define _PXAFBSETUP_H
++
++#define MTYPE_STN320x240 0
++#define MTYPE_TFT640x480 1
++#define MTYPE_CRT640x480 2
++#define MTYPE_CRT800x600 3
++#define MTYPE_CRT1024x768 4
++#define MTYPE_USER_DEFINED 5
++#define MTYPE_TFT320x240 6
++#define MTYPE_STN640x480 7
++
++#define CMAP_GREYSCALE 0
++#define CMAP_INVERSE 0
++#define CMAP_STATIC 0
++
++
++// Example for user defined display
++// Hitach SX19V-009
++#define LCD_PIXCLOCK 38461
++#define LCD_BPP 8
++#define LCD_XRES 640
++#define LCD_YRES 480
++#define LCD_HORIZONTAL_SYNC_PULSE_WIDTH 4
++#define LCD_VERTICAL_SYNC_PULSE_WIDTH 2
++#define LCD_BEGIN_OF_LINE_WAIT_COUNT 10
++#define LCD_BEGIN_FRAME_WAIT_COUNT 5
++#define LCD_END_OF_LINE_WAIT_COUNT 10
++#define LCD_END_OF_FRAME_WAIT_COUNT 5
++#define LCD_SYNC (FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT)
++#define LCD_LCCR0 (LCCR0_LDM | LCCR0_IUM | LCCR0_QDM | LCCR0_BM | LCCR0_OUM )
++#define LCD_LCCR3 (LCCR3_PixClkDiv(0x02) | LCCR3_Acb(0xff))
++#define LCD_NAME "Hitachi SX19V-009-ZZA-1"
++
++#endif
+diff --git a/include/asm-arm/hardware/it8152.h b/include/asm-arm/hardware/it8152.h
+new file mode 100644
+index 0000000..d28210d
+--- /dev/null
++++ b/include/asm-arm/hardware/it8152.h
+@@ -0,0 +1,104 @@
++/*
++ * arch/arm/mach-pxa/it8152.h
++ *
++ * Compulab Ltd., 2006
++ *
++ * ITE 8152 companion chip definitions
++ */
++
++
++/* #define CMX270_IT8152_VIRT (CMX270_VIRT_BASE) */
++
++
++extern unsigned long it8152_base_address;
++
++#define IT8152_IO_BASE (it8152_base_address + 0x03e00000)
++#define IT8152_CFGREG_BASE (it8152_base_address + 0x03f00000)
++
++/* #define IRQ_GPIO_IT8152_IRQ IRQ_GPIO(GPIO_IT8152_IRQ) */
++
++#define IT8152_SHORT_IO(x) (*((volatile unsigned short *)(IT8152_CFGREG_BASE+(x))))
++#define IT8152_LONG_IO(x) (*((volatile unsigned long *)(IT8152_CFGREG_BASE+(x))))
++
++
++#define IT8152_PCI_MEMBASE (*((volatile unsigned long *)(it8152_base_address)))
++/* #define IT8152_PCI_IOBASE (*((volatile unsigned long *)(it8152_base_address + 0x3e00000))) */
++
++#define IT8152_PCI_IACK (*((volatile unsigned long *)(it8152_base_address + 0x3f00808)))
++#define IT8152_PCI_CFG_ADDR (*((volatile unsigned long *)(it8152_base_address + 0x3f00800)))
++#define IT8152_PCI_CFG_DATA (*((volatile unsigned long *)(it8152_base_address + 0x3f00804)))
++
++#define IT_BUSNUM_SHF 16
++#define IT_DEVNUM_SHF 11
++#define IT_FUNCNUM_SHF 8
++#define IT_REGNUM_SHF 2
++
++/* Power management & PLL registers */
++#define IT8152_PMPLL_DSR IT8152_LONG_IO(0x00)
++#define IT8152_PMPLL_DSSR IT8152_LONG_IO(0x04)
++#define IT8152_PMPLL_PLLCR IT8152_LONG_IO(0x20)
++#define IT8152_PMPLL_MFSR IT8152_LONG_IO(0x24)
++
++/* Memory controller */
++#define IT8152_MC_REG_OFFSET 0x100
++
++#define IT8152_MC_SDCR IT8152_LONG_IO(IT8152_MC_REG_OFFSET + 0x00)
++#define IT8152_MC_PCICR IT8152_LONG_IO(IT8152_MC_REG_OFFSET + 0x04)
++
++/* Interrupt related definitions */
++#define IT8152_INTC_REG_OFFSET 0x300
++
++#define IT8152_INTC_LDCNIRR IT8152_LONG_IO(IT8152_INTC_REG_OFFSET + 0x00)
++#define IT8152_INTC_LDPNIRR IT8152_LONG_IO(IT8152_INTC_REG_OFFSET + 0x04)
++#define IT8152_INTC_LDCNIMR IT8152_LONG_IO(IT8152_INTC_REG_OFFSET + 0x08)
++#define IT8152_INTC_LDPNIMR IT8152_LONG_IO(IT8152_INTC_REG_OFFSET + 0x0C)
++#define IT8152_INTC_LDNITR IT8152_LONG_IO(IT8152_INTC_REG_OFFSET + 0x10)
++#define IT8152_INTC_LDNIAR IT8152_LONG_IO(IT8152_INTC_REG_OFFSET + 0x14)
++#define IT8152_INTC_LPCNIRR IT8152_LONG_IO(IT8152_INTC_REG_OFFSET + 0x20)
++#define IT8152_INTC_LPPNIRR IT8152_LONG_IO(IT8152_INTC_REG_OFFSET + 0x24)
++#define IT8152_INTC_LPCNIMR IT8152_LONG_IO(IT8152_INTC_REG_OFFSET + 0x28)
++#define IT8152_INTC_LPPNIMR IT8152_LONG_IO(IT8152_INTC_REG_OFFSET + 0x2C)
++#define IT8152_INTC_LPNITR IT8152_LONG_IO(IT8152_INTC_REG_OFFSET + 0x30)
++#define IT8152_INTC_LPNIAR IT8152_LONG_IO(IT8152_INTC_REG_OFFSET + 0x34)
++#define IT8152_INTC_PDCNIRR IT8152_LONG_IO(IT8152_INTC_REG_OFFSET + 0x40)
++#define IT8152_INTC_PDPNIRR IT8152_LONG_IO(IT8152_INTC_REG_OFFSET + 0x44)
++#define IT8152_INTC_PDCNIMR IT8152_LONG_IO(IT8152_INTC_REG_OFFSET + 0x48)
++#define IT8152_INTC_PDPNIMR IT8152_LONG_IO(IT8152_INTC_REG_OFFSET + 0x4C)
++#define IT8152_INTC_PDNITR IT8152_LONG_IO(IT8152_INTC_REG_OFFSET + 0x50)
++#define IT8152_INTC_PDNIAR IT8152_LONG_IO(IT8152_INTC_REG_OFFSET + 0x54)
++#define IT8152_INTC_INTC_TYPER IT8152_LONG_IO(IT8152_INTC_REG_OFFSET + 0xFC)
++
++#define IT8152_UART_BASE IT8152_LONG_IO(0x200)
++
++#define IT8152_GPIO_REG_OFFSET 0x500
++
++#define IT8152_GPIO_GPLR IT8152_LONG_IO(IT8152_GPIO_REG_OFFSET)
++#define IT8152_GPIO_GPCR12 IT8152_LONG_IO(IT8152_GPIO_REG_OFFSET + 0x04)
++#define IT8152_GPIO_GPCR34 IT8152_LONG_IO(IT8152_GPIO_REG_OFFSET + 0x08)
++
++
++/* Interrupt bit definitions */
++#define PCISERR_BIT (1<<14)
++#define H2PTADR_BIT (1<<13)
++#define H2PMAR_BIT (1<<12)
++#define PCI_INTD_BIT (1<<11)
++#define PCI_INTC_BIT (1<<10)
++#define PCI_INTB_BIT (1<<9)
++#define PCI_INTA_BIT (1<<8)
++#define CDMA_INT_BIT (1<<2)
++#define USB_INT_BIT (1<<1)
++#define AUDIO_INT_BIT (1<<0)
++
++/* IT8152 UART */
++#define ITESER_BIT (1<<5)
++
++
++
++
++
++
++
++
++
++
++
+diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
+index 751eea5..bc45d11 100644
+--- a/include/linux/pci_ids.h
++++ b/include/linux/pci_ids.h
+@@ -1568,6 +1568,7 @@ #define PCI_DEVICE_ID_EFFICEON 0x0060
+ #define PCI_VENDOR_ID_ROCKWELL 0x127A
+
+ #define PCI_VENDOR_ID_ITE 0x1283
++#define PCI_DEVICE_ID_ITE_IT8152 0x8152
+ #define PCI_DEVICE_ID_ITE_IT8172G 0x8172
+ #define PCI_DEVICE_ID_ITE_IT8172G_AUDIO 0x0801
+ #define PCI_DEVICE_ID_ITE_8211 0x8211
+diff --git a/sound/pci/ac97/ac97_codec.c b/sound/pci/ac97/ac97_codec.c
+index 3020ca2..ba1dc8a 100644
+--- a/sound/pci/ac97/ac97_codec.c
++++ b/sound/pci/ac97/ac97_codec.c
+@@ -150,7 +150,7 @@ static const struct ac97_codec_id snd_ac
+ { 0x4e534300, 0xffffffff, "LM4540,43,45,46,48", NULL, NULL }, // only guess --jk
+ { 0x4e534331, 0xffffffff, "LM4549", NULL, NULL },
+ { 0x4e534350, 0xffffffff, "LM4550", NULL, NULL },
+-{ 0x50534304, 0xffffffff, "UCB1400", NULL, NULL },
++{ 0x50534304, 0xffffffff, "UCB1400", patch_ucb1400, NULL },
+ { 0x53494c20, 0xffffffe0, "Si3036,8", mpatch_si3036, mpatch_si3036, AC97_MODEM_PATCH },
+ { 0x54524102, 0xffffffff, "TR28022", NULL, NULL },
+ { 0x54524106, 0xffffffff, "TR28026", NULL, NULL },
+diff --git a/sound/pci/ac97/ac97_patch.c b/sound/pci/ac97/ac97_patch.c
+index a444a78..0bb1d71 100644
+--- a/sound/pci/ac97/ac97_patch.c
++++ b/sound/pci/ac97/ac97_patch.c
+@@ -2823,3 +2823,33 @@ int mpatch_si3036(struct snd_ac97 * ac97
+ snd_ac97_write_cache(ac97, 0x68, 0);
+ return 0;
+ }
++
++/*
++ * UCB1400 codec
++ */
++static const struct snd_kcontrol_new snd_ac97_controls_ucb1400[] = {
++AC97_SINGLE("Headphone driver", 0x6a, 6, 1, 0),
++AC97_SINGLE("DC filter", 0x6a, 4, 1, 0),
++AC97_SINGLE("Smart power mode", 0x6c, 4, 3, 0),
++};
++
++static int patch_ucb1400_specific(struct snd_ac97 * ac97)
++{
++ int idx, err;
++ for (idx = 0; idx < ARRAY_SIZE(snd_ac97_controls_ucb1400); idx++)
++ if ((err = snd_ctl_add(ac97->bus->card, snd_ctl_new1(&snd_ac97_controls_ucb1400[idx], ac97))) < 0)
++ return err;
++ return 0;
++}
++
++static struct snd_ac97_build_ops patch_ucb1400_ops = {
++ .build_specific = patch_ucb1400_specific,
++};
++
++int patch_ucb1400(struct snd_ac97 * ac97)
++{
++ ac97->build_ops = &patch_ucb1400_ops;
++ snd_ac97_write(ac97, 0x6a, 0x0050);
++ snd_ac97_write(ac97, 0x6c, 0x0030);
++ return 0;
++}
+diff --git a/sound/pci/ac97/ac97_patch.h b/sound/pci/ac97/ac97_patch.h
+index 5060cb6..068b674 100644
+--- a/sound/pci/ac97/ac97_patch.h
++++ b/sound/pci/ac97/ac97_patch.h
+@@ -58,4 +58,5 @@ int patch_cm9780(struct snd_ac97 * ac97)
+ int patch_vt1616(struct snd_ac97 * ac97);
+ int patch_vt1617a(struct snd_ac97 * ac97);
+ int patch_it2646(struct snd_ac97 * ac97);
++int patch_ucb1400(struct snd_ac97 * ac97);
+ int mpatch_si3036(struct snd_ac97 * ac97);
diff --git a/packages/linux/compulab-pxa270_2.6.16.bb b/packages/linux/compulab-pxa270_2.6.16.bb
new file mode 100644
index 0000000000..1d0e71f83d
--- /dev/null
+++ b/packages/linux/compulab-pxa270_2.6.16.bb
@@ -0,0 +1,36 @@
+SECTION = "kernel"
+DESCRIPTION = "Linux kernel for the Compulab PXA270 system"
+LICENSE = "GPL"
+PR = "r2"
+
+SRC_URI = "ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.16.tar.bz2 \
+ file://linux-2.6.16.patch;patch=1 \
+ file://defconfig \
+ http://www.compulab.co.il/x270/download/x270-linux-drv.zip"
+
+S = "${WORKDIR}/linux-2.6.16"
+
+COMPATIBLE_HOST = 'arm.*-linux'
+
+inherit kernel
+inherit package
+
+ARCH = "arm"
+KERNEL_IMAGETYPE = "zImage"
+
+do_configure_prepend() {
+ install -m 0644 ${WORKDIR}/defconfig ${S}/.config
+ install -m 0644 ${WORKDIR}/2.6.16/CL_FlashDrv ${S}/drivers/block/cl_flash
+}
+
+do_deploy() {
+ install -d ${DEPLOY_DIR_IMAGE}
+ install -m 0644 arch/${ARCH}/boot/${KERNEL_IMAGETYPE} ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGETYPE}-${MACHINE}-${DATETIME}.bin
+}
+
+do_deploy[dirs] = "${S}"
+
+addtask deploy before do_build after do_compile
+
+COMPATIBLE_MACHINE = "compulab-pxa270"
+
diff --git a/packages/linux/handhelds-sa-2.6_cvs.bb b/packages/linux/handhelds-sa-2.6_cvs.bb
deleted file mode 100644
index dc8b8478a7..0000000000
--- a/packages/linux/handhelds-sa-2.6_cvs.bb
+++ /dev/null
@@ -1,30 +0,0 @@
-SECTION = "kernel"
-DESCRIPTION = "handhelds.org Linux kernel for StrongArm processor based devices."
-LICENSE = "GPL"
-#
-COMPATIBLE_HOST = "arm.*-linux"
-COMPATIBLE_MACHINE = '(h3600|simpad|jornada56x)'
-
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/handhelds-sa-${PV}"
-
-SRC_URI = "${HANDHELDS_CVS};module=linux/kernel26"
-
-S = "${WORKDIR}/kernel26"
-PV = "${K_MAJOR}.${K_MINOR}.${K_MICRO}-hh${HHV}+cvs${SRCDATE}"
-
-K_MAJOR = "2"
-K_MINOR = "6"
-K_MICRO = "12"
-HHV = "0"
-
-inherit kernel
-#
-PAKCAGE_ARCH = "ipaqsa"
-PACKAGE_ARCH_jornada56x = "jornada56x"
-PACKAGE_ARCH_jornada7xx = "jornada7xx"
-PACKAGE_ARCH_simpad = "simpad"
-
-do_configure() {
- install -m 0644 ${S}/arch/arm/configs/${MACHINE}_defconfig ${S}/.config || die "No default configuration for ${MACHINE} available."
- (echo N; echo m; echo N) | oe_runmake oldconfig
-}
diff --git a/packages/linux/handhelds-un-2.6_2.6.16-hh4.bb b/packages/linux/handhelds-un-2.6_2.6.16-hh4.bb
deleted file mode 100644
index b81129eff9..0000000000
--- a/packages/linux/handhelds-un-2.6_2.6.16-hh4.bb
+++ /dev/null
@@ -1,30 +0,0 @@
-DESCRIPTION = "Handhelds HTC-PXA phones kernel based on the hh 2.6.16"
-LICENSE = "GPL"
-PR="r0"
-
-SRC_URI = "${HANDHELDS_CVS};module=linux/kernel26;tag=K2-6-16-hh4"
-
-S = "${WORKDIR}/kernel26"
-
-COMPATIBLE_HOST = "arm.*-linux"
-
-inherit kernel
-
-do_configure() {
- cp arch/arm/configs/htcuniversal_defconfig .config || die "No default configuration for ${MACHINE} available."
- yes '' | oe_runmake oldconfig
-}
-
-
-###############################################################
-# put into deploy directory
-#
-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
-}
-
-do_deploy[dirs] = "${S}"
-
-addtask deploy before do_package after do_install
diff --git a/packages/linux/ixp4xx-kernel.inc b/packages/linux/ixp4xx-kernel.inc
index 279b8fa57f..90d72001d7 100644
--- a/packages/linux/ixp4xx-kernel.inc
+++ b/packages/linux/ixp4xx-kernel.inc
@@ -309,6 +309,20 @@ pkg_postrm_kernel-image-dsmg600 () {
update-alternatives --remove ${KERNEL_IMAGETYPE} /${KERNEL_IMAGEDEST}/${KERNEL_IMAGETYPE}-dsmg600${ARCH_BYTE_SEX}-${KERNEL_RELEASE} || true
}
+# The correct settings for the FSG-3 board:
+fsg3_MACHID = "1091"
+PACKAGES += "kernel-image-fsg3"
+PKG_kernel-image-fsg3 = "kernel-image-${KERNEL_VERSION}"
+PACKAGE_ARCH_kernel-image-fsg3 = "fsg3${ARCH_BYTE_SEX}"
+DESCRIPTION_kernel-image-fsg3 = "Linux kernel for the Freecom FSG-3"
+FILES_kernel-image-fsg3 = "/${KERNEL_IMAGEDEST}/${KERNEL_IMAGETYPE}-fsg3${ARCH_BYTE_SEX}-${KERNEL_RELEASE}"
+pkg_postinst_kernel-image-fsg3 () {
+ update-alternatives --install /${KERNEL_IMAGEDEST}/${KERNEL_IMAGETYPE} ${KERNEL_IMAGETYPE} /${KERNEL_IMAGEDEST}/${KERNEL_IMAGETYPE}-fsg3${ARCH_BYTE_SEX}-${KERNEL_RELEASE} ${KERNEL_PRIORITY} || true
+}
+pkg_postrm_kernel-image-fsg3 () {
+ update-alternatives --remove ${KERNEL_IMAGETYPE} /${KERNEL_IMAGEDEST}/${KERNEL_IMAGETYPE}-fsg3${ARCH_BYTE_SEX}-${KERNEL_RELEASE} || true
+}
+
#FIXUP: the correct instructions to copy the kernel prepended with the le fixup
#FIXME: do a fixup for BE too...
FIXUP_armeb = "cp$"
@@ -358,6 +372,7 @@ do_install_append() {
install_image 'loft${ARCH_BYTE_SEX}' '${loft_MACHID}'
install_image 'nas100d${ARCH_BYTE_SEX}' '${nas100d_MACHID}'
install_image 'dsmg600${ARCH_BYTE_SEX}' '${dsmg600_MACHID}'
+ install_image 'fsg3${ARCH_BYTE_SEX}' '${fsg3_MACHID}'
}
do_deploy[dirs] = "${S}"
@@ -376,6 +391,7 @@ do_deploy() {
deploy_image 'loft${ARCH_BYTE_SEX}' '${loft_MACHID}'
deploy_image 'nas100d${ARCH_BYTE_SEX}' '${nas100d_MACHID}'
deploy_image 'dsmg600${ARCH_BYTE_SEX}' '${dsmg600_MACHID}'
+ deploy_image 'fsg3${ARCH_BYTE_SEX}' '${fsg3_MACHID}'
}
addtask deploy before do_build after do_compile
diff --git a/packages/linux/linux-handhelds-2.6/magician/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.16/.mtn2git_empty
index e69de29bb2..e69de29bb2 100644
--- a/packages/linux/linux-handhelds-2.6/magician/.mtn2git_empty
+++ b/packages/linux/linux-handhelds-2.6-2.6.16/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.16/24-hostap_cs_id.diff b/packages/linux/linux-handhelds-2.6-2.6.16/24-hostap_cs_id.diff
new file mode 100644
index 0000000000..b90ead9e4f
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.16/24-hostap_cs_id.diff
@@ -0,0 +1,107 @@
+Add more IDs for PCMCIA cards
+
+From: Pavel Roskin <proski@gnu.org>
+
+Add string IDs for cards that were covered by 0x0156,0x0002, which is no
+longer used in hostap_cs due to conflict with Orinoco cards.
+
+Also add more IDs for cards that are supported by linux-wlan-ng. Thanks
+to Arnold Schulz <arnysch@gmx.net> for providing the list.
+
+Signed-off-by: Pavel Roskin <proski@gnu.org>
+---
+
+ drivers/net/wireless/hostap/hostap_cs.c | 46 +++++++++++++++++++++++++++++++
+ 1 files changed, 46 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/net/wireless/hostap/hostap_cs.c b/drivers/net/wireless/hostap/hostap_cs.c
+index 55bed92..9ac1aec 100644
+--- a/drivers/net/wireless/hostap/hostap_cs.c
++++ b/drivers/net/wireless/hostap/hostap_cs.c
+@@ -832,9 +832,11 @@ static int hostap_cs_resume(struct pcmci
+ static struct pcmcia_device_id hostap_cs_ids[] = {
+ PCMCIA_DEVICE_MANF_CARD(0x000b, 0x7100),
+ PCMCIA_DEVICE_MANF_CARD(0x000b, 0x7300),
++ PCMCIA_DEVICE_MANF_CARD(0x0089, 0x0002),
+ PCMCIA_DEVICE_MANF_CARD(0x0101, 0x0777),
+ PCMCIA_DEVICE_MANF_CARD(0x0126, 0x8000),
+ PCMCIA_DEVICE_MANF_CARD(0x0138, 0x0002),
++ PCMCIA_DEVICE_MANF_CARD(0x01ff, 0x0008),
+ PCMCIA_DEVICE_MANF_CARD(0x0250, 0x0002),
+ PCMCIA_DEVICE_MANF_CARD(0x026f, 0x030b),
+ PCMCIA_DEVICE_MANF_CARD(0x0274, 0x1612),
+@@ -844,7 +846,10 @@ static struct pcmcia_device_id hostap_cs
+ PCMCIA_DEVICE_MANF_CARD(0x02d2, 0x0001),
+ PCMCIA_DEVICE_MANF_CARD(0x50c2, 0x0001),
+ PCMCIA_DEVICE_MANF_CARD(0x50c2, 0x7300),
++ PCMCIA_DEVICE_MANF_CARD(0x9005, 0x0021),
++ PCMCIA_DEVICE_MANF_CARD(0xc001, 0x0008),
+ PCMCIA_DEVICE_MANF_CARD(0xc00f, 0x0000),
++ PCMCIA_DEVICE_MANF_CARD(0xc250, 0x0002),
+ PCMCIA_DEVICE_MANF_CARD(0xd601, 0x0002),
+ PCMCIA_DEVICE_MANF_CARD(0xd601, 0x0005),
+ PCMCIA_DEVICE_MANF_CARD(0xd601, 0x0010),
+@@ -862,22 +867,63 @@ static struct pcmcia_device_id hostap_cs
+ "Addtron", "AWP-100 Wireless PCMCIA", "Version 01.02",
+ 0xe6ec52ce, 0x08649af2, 0x4b74baa0),
+ PCMCIA_DEVICE_PROD_ID123(
++ "Belkin", "11Mbps Wireless Notebook Network Adapter",
++ "Version 01.02", 0x3805a391, 0xad4c7744, 0x4b74baa0),
++ PCMCIA_DEVICE_PROD_ID123(
+ "D", "Link DWL-650 11Mbps WLAN Card", "Version 01.02",
+ 0x71b18589, 0xb6f1b0ab, 0x4b74baa0),
+ PCMCIA_DEVICE_PROD_ID123(
+ "Instant Wireless ", " Network PC CARD", "Version 01.02",
+ 0x11d901af, 0x6e9bd926, 0x4b74baa0),
+ PCMCIA_DEVICE_PROD_ID123(
++ "Intersil", "PRISM Freedom PCMCIA Adapter", "ISL37100P",
++ 0x4b801a17, 0xf222ec2d, 0x630d52b2),
++ PCMCIA_DEVICE_PROD_ID123(
++ "OEM", "PRISM2 IEEE 802.11 PC-Card", "Version 01.02",
++ 0xfea54c90, 0x48f2bdd6, 0x4b74baa0),
++ PCMCIA_DEVICE_PROD_ID123(
++ "Pretec", "CompactWLAN Card 802.11b", "2.5",
++ 0x1cadd3e5, 0xe697636c, 0x7a5bfcf1),
++ PCMCIA_DEVICE_PROD_ID123(
+ "SMC", "SMC2632W", "Version 01.02",
+ 0xc4f8b18b, 0x474a1f2a, 0x4b74baa0),
++ PCMCIA_DEVICE_PROD_ID123(
++ "The Linksys Group, Inc.", "Instant Wireless Network PC Card",
++ "ISL37300P", 0xa5f472c2, 0x590eb502, 0xc9049a39),
++ PCMCIA_DEVICE_PROD_ID123(
++ "U.S. Robotics", "IEEE 802.11b PC-CARD", "Version 01.02",
++ 0xc7b8df9d, 0x1700d087, 0x4b74baa0),
++ PCMCIA_DEVICE_PROD_ID12("ASUS", "802_11b_PC_CARD_25",
++ 0x78fc06ee, 0xdb9aa842),
++ PCMCIA_DEVICE_PROD_ID12("ASUS", "802_11B_CF_CARD_25",
++ 0x78fc06ee, 0x45a50c1e),
+ PCMCIA_DEVICE_PROD_ID12("BUFFALO", "WLI-CF-S11G",
+ 0x2decece3, 0x82067c18),
+ PCMCIA_DEVICE_PROD_ID12("Compaq", "WL200_11Mbps_Wireless_PCI_Card",
+ 0x54f7c49c, 0x15a75e5b),
++ PCMCIA_DEVICE_PROD_ID12("corega K.K.", "Wireless LAN PCC-11",
++ 0x5261440f, 0xa6405584),
++ PCMCIA_DEVICE_PROD_ID12("corega K.K.", "Wireless LAN PCCA-11",
++ 0x5261440f, 0xdf6115f9),
++ PCMCIA_DEVICE_PROD_ID12("D", "Link DRC-650 11Mbps WLAN Card",
++ 0x71b18589, 0xf144e3ac),
++ PCMCIA_DEVICE_PROD_ID12("Digital Data Communications", "WPC-0100",
++ 0xfdd73470, 0xe0b6f146),
+ PCMCIA_DEVICE_PROD_ID12("INTERSIL", "HFA384x/IEEE",
+ 0x74c5e40d, 0xdb472a18),
++ PCMCIA_DEVICE_PROD_ID12("LeArtery",
++ "SYNCBYAIR 11Mbps Wireless LAN PC Card",
++ 0x7e3b326a, 0x49893e92),
+ PCMCIA_DEVICE_PROD_ID12("Linksys", "Wireless CompactFlash Card",
+ 0x0733cc81, 0x0c52f395),
++ PCMCIA_DEVICE_PROD_ID12("NETGEAR MA401 Wireless PC", "Card",
++ 0xa37434e9, 0x9762e8f1),
++ PCMCIA_DEVICE_PROD_ID12("OTC", "Wireless AirEZY 2411-PCC WLAN Card",
++ 0x4ac44287, 0x235a6bed),
++ PCMCIA_DEVICE_PROD_ID12("PLANEX", "GeoWave/GW-CF110",
++ 0x209f40ab, 0xd9715264),
++ PCMCIA_DEVICE_PROD_ID12("PLANEX", "GeoWave/GW-NS110",
++ 0x209f40ab, 0x46263178),
+ PCMCIA_DEVICE_PROD_ID12(
+ "ZoomAir 11Mbps High", "Rate wireless Networking",
+ 0x273fe3db, 0x32a1eaee),
diff --git a/packages/linux/linux-handhelds-2.6/block-pio.patch b/packages/linux/linux-handhelds-2.6-2.6.16/block-pio.patch
index 294140b6e8..294140b6e8 100644
--- a/packages/linux/linux-handhelds-2.6/block-pio.patch
+++ b/packages/linux/linux-handhelds-2.6-2.6.16/block-pio.patch
diff --git a/packages/linux/linux-handhelds-2.6/defconfig b/packages/linux/linux-handhelds-2.6-2.6.16/defconfig
index cd92420627..cd92420627 100644
--- a/packages/linux/linux-handhelds-2.6/defconfig
+++ b/packages/linux/linux-handhelds-2.6-2.6.16/defconfig
diff --git a/packages/linux/linux-handhelds-2.6/defconfig-ipaq-pxa-2.6 b/packages/linux/linux-handhelds-2.6-2.6.16/defconfig-ipaq-pxa-2.6
index 0a7d4a6694..0a7d4a6694 100644
--- a/packages/linux/linux-handhelds-2.6/defconfig-ipaq-pxa-2.6
+++ b/packages/linux/linux-handhelds-2.6-2.6.16/defconfig-ipaq-pxa-2.6
diff --git a/packages/linux/linux-handhelds-2.6/eabi-enums.patch b/packages/linux/linux-handhelds-2.6-2.6.16/eabi-enums.patch
index 9e5e9ec571..9e5e9ec571 100644
--- a/packages/linux/linux-handhelds-2.6/eabi-enums.patch
+++ b/packages/linux/linux-handhelds-2.6-2.6.16/eabi-enums.patch
diff --git a/packages/linux/linux-handhelds-2.6-2.6.16/h2200/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.16/h2200/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.16/h2200/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.16/h2200/defconfig b/packages/linux/linux-handhelds-2.6-2.6.16/h2200/defconfig
new file mode 100644
index 0000000000..87c94b5f04
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.16/h2200/defconfig
@@ -0,0 +1,1618 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.16-hh5
+# Thu Aug 10 15:54:59 2006
+#
+CONFIG_ARM=y
+CONFIG_MMU=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_MTD_XIP=y
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+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_MINIMAL_OOPS is not set
+# CONFIG_IKCONFIG_PROC 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=y
+# CONFIG_USELIB is not set
+# CONFIG_CORE_DUMP is not set
+CONFIG_CC_ALIGN_FUNCTIONS=0
+CONFIG_CC_ALIGN_LABELS=0
+CONFIG_CC_ALIGN_LOOPS=0
+CONFIG_CC_ALIGN_JUMPS=0
+CONFIG_SLAB=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_OBSOLETE_MODPARM=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="deadline"
+
+#
+# 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_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_L7200 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# 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
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_ARCH_H1900 is not set
+CONFIG_ARCH_H2200=y
+# CONFIG_ARCH_H3900 is not set
+# CONFIG_MACH_H4000 is not set
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+# CONFIG_MACH_HTCALPINE is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HTCAPACHE is not set
+# CONFIG_MACH_BLUEANGEL is not set
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_PXA_SHARPSL is not set
+CONFIG_PXA25x=y
+# CONFIG_SA1100_H3100 is not set
+# CONFIG_SA1100_H3600 is not set
+# CONFIG_SA1100_H3800 is not set
+CONFIG_GPIO_KEYS=y
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+CONFIG_XSCALE_PMU=y
+CONFIG_KEXEC=y
+
+#
+# Compaq/iPAQ Platforms
+#
+CONFIG_PXA_IPAQ=y
+
+#
+# XScale-based iPAQ
+#
+CONFIG_IPAQ_HANDHELD=y
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+CONFIG_IPAQ_CLOCKS=y
+# CONFIG_IPAQ_SLEEVE is not set
+# CONFIG_IPAQ_SAMCOP is not set
+CONFIG_IPAQ_HAMCOP=y
+CONFIG_IPAQ_SAMCOP_TOUCHSCREEN=y
+CONFIG_IPAQ_SAMCOP_DMA=y
+CONFIG_DMABOUNCE=y
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+CONFIG_PCCARD=y
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA=y
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+
+#
+# PC-card bridges
+#
+CONFIG_PCMCIA_PXA2XX=y
+CONFIG_PCMCIA_H2200=y
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+CONFIG_NO_IDLE_HZ=y
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# 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=ttyS0,115200n8 root=/dev/mmcblk0p1"
+# CONFIG_XIP_KERNEL is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=m
+CONFIG_CPU_FREQ_TABLE=y
+# CONFIG_CPU_FREQ_DEBUG is not set
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPU_FREQ_PXA=y
+CONFIG_PXA25x_ALTERNATE_FREQS=y
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+CONFIG_FPE_FASTFPE=y
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=m
+
+#
+# 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 is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+CONFIG_NET_IPGRE=m
+CONFIG_NET_IPGRE_BROADCAST=y
+# 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 is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=y
+CONFIG_IPV6_PRIVACY=y
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+CONFIG_INET6_TUNNEL=m
+# CONFIG_IPV6_TUNNEL is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_CONNTRACK=m
+# CONFIG_IP_NF_CT_ACCT is not set
+# CONFIG_IP_NF_CONNTRACK_MARK is not set
+# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
+# CONFIG_IP_NF_CT_PROTO_SCTP is not set
+CONFIG_IP_NF_FTP=m
+CONFIG_IP_NF_IRC=m
+# CONFIG_IP_NF_NETBIOS_NS is not set
+# CONFIG_IP_NF_TFTP is not set
+# CONFIG_IP_NF_AMANDA is not set
+# CONFIG_IP_NF_PPTP is not set
+# CONFIG_IP_NF_QUEUE is not set
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+
+#
+# Bridge: Netfilter Configuration
+#
+# CONFIG_BRIDGE_NF_EBTABLES 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=m
+# 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 is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+CONFIG_IRDA_DEBUG=y
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=m
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+CONFIG_IRPORT_SIR=m
+
+#
+# Old Serial dongle support
+#
+# CONFIG_DONGLE_OLD is not set
+
+#
+# FIR device drivers
+#
+# CONFIG_USB_IRDA is not set
+# CONFIG_SIGMATEL_FIR is not set
+CONFIG_PXA_FICP=m
+CONFIG_BT=y
+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=m
+# CONFIG_BT_HCIUSB_SCO is not set
+CONFIG_BT_HCIUART=y
+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_HCIDTL1=m
+CONFIG_BT_HCIBT3C=m
+CONFIG_BT_HCIBLUECARD=m
+CONFIG_BT_HCIBTUART=m
+# CONFIG_BT_HCIVHCI is not set
+CONFIG_IEEE80211=y
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=y
+CONFIG_IEEE80211_CRYPT_CCMP=y
+CONFIG_IEEE80211_CRYPT_TKIP=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# 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 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=m
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE 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_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_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLKMTD 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_H1900 is not set
+CONFIG_MTD_NAND_IDS=y
+CONFIG_MTD_NAND_HAMCOP=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_SHARPSL 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=m
+CONFIG_BLK_DEV_NBD=m
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=8192
+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_IDECS=y
+CONFIG_BLK_DEV_IDECD=m
+CONFIG_BLK_DEV_IDETAPE=m
+CONFIG_BLK_DEV_IDEFLOPPY=m
+CONFIG_BLK_DEV_IDESCSI=m
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=m
+# 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=m
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=m
+# 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=m
+# 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
+
+#
+# PCMCIA SCSI adapter support
+#
+CONFIG_PCMCIA_AHA152X=m
+# CONFIG_PCMCIA_FDOMAIN is not set
+# CONFIG_PCMCIA_NINJA_SCSI is not set
+# CONFIG_PCMCIA_QLOGIC is not set
+# CONFIG_PCMCIA_SYM53C500 is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD 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=m
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+CONFIG_MII=m
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+CONFIG_PCMCIA_WAVELAN=m
+CONFIG_PCMCIA_NETWAVE=m
+
+#
+# Wireless 802.11 Frequency Hopping cards support
+#
+CONFIG_PCMCIA_RAYCS=m
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+CONFIG_HERMES=m
+CONFIG_ATMEL=m
+
+#
+# Wireless 802.11b Pcmcia/Cardbus cards support
+#
+CONFIG_PCMCIA_HERMES=m
+# CONFIG_PCMCIA_SPECTRUM is not set
+CONFIG_AIRO_CS=m
+CONFIG_PCMCIA_ATMEL=m
+CONFIG_PCMCIA_WL3501=m
+CONFIG_HOSTAP=m
+# CONFIG_HOSTAP_FIRMWARE is not set
+CONFIG_HOSTAP_CS=m
+# CONFIG_ACX is not set
+CONFIG_NET_WIRELESS=y
+
+#
+# PCMCIA network device support
+#
+CONFIG_NET_PCMCIA=y
+CONFIG_PCMCIA_3C589=m
+CONFIG_PCMCIA_3C574=m
+CONFIG_PCMCIA_FMVJ18X=m
+CONFIG_PCMCIA_PCNET=m
+CONFIG_PCMCIA_NMCLAN=m
+CONFIG_PCMCIA_SMC91C92=m
+CONFIG_PCMCIA_XIRC2PS=m
+CONFIG_PCMCIA_AXNET=m
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# 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=m
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+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=m
+CONFIG_KEYBOARD_H2200=y
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=m
+CONFIG_SERIO_SERPORT=m
+# CONFIG_SERIO_LIBPS2 is not set
+CONFIG_SERIO_RAW=m
+# 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_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS 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_ELV is not set
+CONFIG_I2C_PXA=y
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# 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_PCA9535 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_RTC8564 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_RTC_X1205_I2C 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
+
+#
+# L3 serial bus support
+#
+CONFIG_L3=m
+
+#
+# Mice
+#
+# CONFIG_BUSMOUSE is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_SA1100_WATCHDOG=m
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+# CONFIG_NVRAM is not set
+CONFIG_SA1100_RTC=y
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+CONFIG_W1=y
+# CONFIG_W1_DS9490 is not set
+# CONFIG_W1_THERM is not set
+# CONFIG_W1_SMEM is not set
+# CONFIG_W1_DS2433 is not set
+CONFIG_W1_SAMCOP=y
+CONFIG_W1_DS2760=y
+
+#
+# Hardware Monitoring support
+#
+# CONFIG_HWMON is not set
+# CONFIG_HWMON_VID is not set
+
+#
+# SoC drivers
+#
+CONFIG_SOC_MQ11XX=y
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_HTC_ASIC2 is not set
+# CONFIG_HTC_ASIC3 is not set
+# CONFIG_SOC_TSC2101 is not set
+
+#
+# Misc devices
+#
+CONFIG_BATTERY_MONITOR=y
+CONFIG_H2200_BATTERY=y
+
+#
+# Multimedia Capabilities Port drivers
+#
+# CONFIG_MCP is not set
+
+#
+# Multimedia Capabilities Port drivers
+#
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+
+#
+# Video For Linux
+#
+
+#
+# Video Adapters
+#
+# CONFIG_VIDEO_ADV_DEBUG is not set
+CONFIG_VIDEO_CPIA=m
+# CONFIG_VIDEO_CPIA_USB is not set
+# CONFIG_VIDEO_SAA5246A is not set
+# CONFIG_VIDEO_SAA5249 is not set
+# CONFIG_TUNER_3036 is not set
+# CONFIG_VIDEO_EM28XX is not set
+# CONFIG_VIDEO_OVCAMCHIP is not set
+# CONFIG_VIDEO_AUDIO_DECODER is not set
+# CONFIG_VIDEO_DECODER is not set
+
+#
+# Radio Adapters
+#
+# CONFIG_RADIO_MAESTRO is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB 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_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_PXA is not set
+CONFIG_FB_MQ1100=y
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=m
+# 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
+CONFIG_BACKLIGHT_H2200=y
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_DYNAMIC_MINORS=y
+CONFIG_SND_SUPPORT_OLD_API=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
+#
+# CONFIG_SND_A716 is not set
+# CONFIG_SND_H1910 is not set
+CONFIG_SND_H2200=y
+# CONFIG_SND_HTCMAGICIAN is not set
+# CONFIG_SND_HX4700 is not set
+# CONFIG_SND_HTCUNIVERSAL is not set
+# CONFIG_SND_H5XXX_AK4535 is not set
+CONFIG_SND_PXA2xx_I2SOUND=y
+# CONFIG_SND_PXA2XX_AC97 is not set
+
+#
+# USB devices
+#
+CONFIG_SND_USB_AUDIO=m
+
+#
+# PCMCIA devices
+#
+CONFIG_SND_UDA1380=y
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+CONFIG_USB=m
+# 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=m
+CONFIG_USB_SL811_HCD=m
+CONFIG_USB_SL811_CS=m
+
+#
+# USB Device Class drivers
+#
+# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+# CONFIG_USB_STORAGE is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+CONFIG_USB_HIDINPUT=y
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE 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_MTOUCH is not set
+# CONFIG_USB_ITMTOUCH is not set
+# CONFIG_USB_EGALAX 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 Multimedia devices
+#
+# CONFIG_USB_DABUSB is not set
+# CONFIG_USB_VICAM is not set
+# CONFIG_USB_DSBR is not set
+# CONFIG_USB_ET61X251 is not set
+# CONFIG_USB_IBMCAM is not set
+# CONFIG_USB_KONICAWC is not set
+# CONFIG_USB_OV511 is not set
+# CONFIG_USB_SE401 is not set
+CONFIG_USB_SN9C102=m
+# CONFIG_USB_STV680 is not set
+CONFIG_USB_PWC=m
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_CDCETHER=m
+# CONFIG_USB_NET_GL620A is not set
+CONFIG_USB_NET_NET1080=m
+# CONFIG_USB_NET_PLUSB is not set
+# CONFIG_USB_NET_RNDIS_HOST is not set
+CONFIG_USB_NET_CDC_SUBSET=m
+# CONFIG_USB_ALI_M5632 is not set
+# CONFIG_USB_AN2720 is not set
+CONFIG_USB_BELKIN=y
+CONFIG_USB_ARMLINUX=y
+# CONFIG_USB_EPSON2888 is not set
+CONFIG_USB_NET_ZAURUS=m
+CONFIG_USB_ZD1201=m
+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=y
+CONFIG_USB_PXA2XX=y
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP 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=m
+# CONFIG_USB_ETH_RNDIS is not set
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_G_CHAR is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_PXA is not set
+# CONFIG_MMC_TMIO is not set
+CONFIG_MMC_SAMCOP=y
+# CONFIG_MMC_ASIC3 is not set
+
+#
+# LED devices
+#
+CONFIG_CLASS_LEDS=y
+CONFIG_LEDS_H2200=y
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+# CONFIG_EXT2_FS_SECURITY is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+CONFIG_EXT3_FS_POSIX_ACL=y
+# CONFIG_EXT3_FS_SECURITY is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+CONFIG_REISERFS_FS_XATTR=y
+CONFIG_REISERFS_FS_POSIX_ACL=y
+# CONFIG_REISERFS_FS_SECURITY is not set
+CONFIG_JFS_FS=m
+CONFIG_JFS_POSIX_ACL=y
+# CONFIG_JFS_SECURITY is not set
+# CONFIG_JFS_DEBUG is not set
+# CONFIG_JFS_STATISTICS is not set
+CONFIG_FS_POSIX_ACL=y
+CONFIG_XFS_FS=m
+CONFIG_XFS_EXPORT=y
+# CONFIG_XFS_QUOTA is not set
+CONFIG_XFS_SECURITY=y
+CONFIG_XFS_POSIX_ACL=y
+# CONFIG_XFS_RT 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=y
+# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=m
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_ZISOFS_FS=m
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+CONFIG_NTFS_FS=m
+# CONFIG_NTFS_DEBUG is not set
+# CONFIG_NTFS_RW 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_RELAYFS_FS=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=m
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_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=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+CONFIG_CRAMFS=m
+# 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=m
+CONFIG_NFS_V3=y
+CONFIG_NFS_V3_ACL=y
+CONFIG_NFS_V4=y
+CONFIG_NFS_DIRECTIO=y
+CONFIG_NFSD=m
+CONFIG_NFSD_V2_ACL=y
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V3_ACL=y
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_ACL_SUPPORT=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+CONFIG_CIFS_XATTR=y
+CONFIG_CIFS_POSIX=y
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+CONFIG_CODA_FS=m
+# CONFIG_CODA_FS_OLD_API is not set
+CONFIG_AFS_FS=m
+CONFIG_RXRPC=m
+CONFIG_9P_FS=m
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=y
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=y
+
+#
+# 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_PREEMPT=y
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_KOBJECT is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_DEBUG_VM is not set
+CONFIG_FRAME_POINTER=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 is not set
+
+#
+# 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=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=y
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=y
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=y
+CONFIG_CRYPTO_CRC32C=y
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_CRC_CCITT=y
+CONFIG_CRC16=y
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=y
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
diff --git a/packages/linux/linux-handhelds-2.6-2.6.16/h4000/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.16/h4000/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.16/h4000/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.16/h4000/defconfig b/packages/linux/linux-handhelds-2.6-2.6.16/h4000/defconfig
new file mode 100644
index 0000000000..fa75078717
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.16/h4000/defconfig
@@ -0,0 +1,1348 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.16-hh5
+# Sun Aug 27 21:52:45 2006
+#
+CONFIG_ARM=y
+CONFIG_MMU=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_MTD_XIP=y
+
+#
+# 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=y
+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_MINIMAL_OOPS is not set
+CONFIG_IKCONFIG_PROC=y
+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=y
+CONFIG_USELIB=y
+CONFIG_CORE_DUMP=y
+CONFIG_CC_ALIGN_FUNCTIONS=0
+CONFIG_CC_ALIGN_LABELS=0
+CONFIG_CC_ALIGN_LOOPS=0
+CONFIG_CC_ALIGN_JUMPS=0
+CONFIG_SLAB=y
+# CONFIG_TINY_SHMEM is not set
+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_OBSOLETE_MODPARM=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+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_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_L7200 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# 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
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_ARCH_H1900 is not set
+# CONFIG_ARCH_H2200 is not set
+# CONFIG_ARCH_H3900 is not set
+CONFIG_MACH_H4000=y
+CONFIG_IPAQ_H4000_SERIAL=m
+CONFIG_IPAQ_H4000_UDC=y
+CONFIG_IPAQ_H4000_LCD=y
+CONFIG_IPAQ_H4000_TS=y
+CONFIG_IPAQ_H4000_PCMCIA=y
+CONFIG_IPAQ_H4000_BUTTONS=y
+CONFIG_IPAQ_H4000_BATT=y
+CONFIG_IPAQ_H4300_KBD=m
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+# CONFIG_MACH_HTCALPINE is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HTCAPACHE is not set
+# CONFIG_MACH_BLUEANGEL is not set
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_MACH_X30 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_PXA_SHARPSL is not set
+CONFIG_PXA25x=y
+# CONFIG_SA1100_H3100 is not set
+# CONFIG_SA1100_H3600 is not set
+# CONFIG_SA1100_H3800 is not set
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+CONFIG_XSCALE_PMU=y
+CONFIG_KEXEC=y
+
+#
+# Compaq/iPAQ Platforms
+#
+CONFIG_PXA_IPAQ=y
+
+#
+# XScale-based iPAQ
+#
+CONFIG_IPAQ_HANDHELD=y
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+# CONFIG_IPAQ_SLEEVE is not set
+# CONFIG_IPAQ_SAMCOP is not set
+# CONFIG_IPAQ_HAMCOP is not set
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+CONFIG_PCCARD=y
+CONFIG_PCMCIA_DEBUG=y
+CONFIG_PCMCIA=y
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+
+#
+# PC-card bridges
+#
+CONFIG_PCMCIA_PXA2XX=y
+
+#
+# Kernel Features
+#
+# CONFIG_PREEMPT is not set
+CONFIG_NO_IDLE_HZ=y
+# 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="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=m
+CONFIG_CPU_FREQ_GOV_ONDEMAND=m
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPU_FREQ_PXA=y
+CONFIG_PXA25x_ALTERNATE_FREQS=y
+
+#
+# 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 is not set
+CONFIG_PM_DEBUG=y
+CONFIG_APM=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=m
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+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 is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_IPV6_TUNNEL is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_CONNTRACK=m
+# CONFIG_IP_NF_CT_ACCT is not set
+# CONFIG_IP_NF_CONNTRACK_MARK is not set
+# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
+# CONFIG_IP_NF_CT_PROTO_SCTP is not set
+CONFIG_IP_NF_FTP=m
+CONFIG_IP_NF_IRC=m
+# CONFIG_IP_NF_NETBIOS_NS is not set
+# CONFIG_IP_NF_TFTP is not set
+# CONFIG_IP_NF_AMANDA is not set
+# CONFIG_IP_NF_PPTP is not set
+# CONFIG_IP_NF_QUEUE is not set
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+
+#
+# Bridge: Netfilter Configuration
+#
+# CONFIG_BRIDGE_NF_EBTABLES 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=m
+# 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 is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=y
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRCOMM=y
+# 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=y
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=m
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+# CONFIG_IRPORT_SIR is not set
+
+#
+# Old Serial dongle support
+#
+
+#
+# FIR device drivers
+#
+CONFIG_PXA_FICP=y
+CONFIG_BT=y
+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_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+# CONFIG_BT_HCIDTL1 is not set
+# CONFIG_BT_HCIBT3C is not set
+# CONFIG_BT_HCIBLUECARD is not set
+# CONFIG_BT_HCIBTUART is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=3
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS 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 is not set
+# CONFIG_MTD_BLOCK is not set
+# CONFIG_MTD_BLOCK_RO is not set
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=m
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=m
+# 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=m
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=m
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+CONFIG_MTD_XIP=y
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_IPAQ is not set
+# CONFIG_MTD_SHARP_SL 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_BLKMTD 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 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=m
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=6
+CONFIG_BLK_DEV_RAM_SIZE=8192
+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=m
+CONFIG_BLK_DEV_IDE=m
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=m
+# CONFIG_IDEDISK_MULTI_MODE is not set
+CONFIG_BLK_DEV_IDECS=m
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_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
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD 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
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_PCMCIA_WAVELAN is not set
+# CONFIG_PCMCIA_NETWAVE is not set
+
+#
+# Wireless 802.11 Frequency Hopping cards support
+#
+# CONFIG_PCMCIA_RAYCS is not set
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+# CONFIG_HERMES is not set
+# CONFIG_ATMEL is not set
+
+#
+# Wireless 802.11b Pcmcia/Cardbus cards support
+#
+# CONFIG_AIRO_CS is not set
+# CONFIG_PCMCIA_WL3501 is not set
+# CONFIG_HOSTAP is not set
+CONFIG_ACX=y
+CONFIG_ACX_MEM=y
+CONFIG_NET_WIRELESS=y
+
+#
+# PCMCIA network device support
+#
+# CONFIG_NET_PCMCIA is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_PPP 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_JOYDEV is not set
+CONFIG_INPUT_TSDEV=y
+CONFIG_INPUT_TSDEV_SCREEN_X=240
+CONFIG_INPUT_TSDEV_SCREEN_Y=320
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO 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_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=32
+
+#
+# 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_ELV is not set
+CONFIG_I2C_PXA=y
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# 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_PCA9535 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_RTC8564 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_RTC_X1205_I2C 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
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Mice
+#
+# CONFIG_BUSMOUSE is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_NVRAM is not set
+CONFIG_SA1100_RTC=y
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+CONFIG_SPI_DEBUG=y
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+
+#
+# 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
+
+#
+# SoC drivers
+#
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_HTC_ASIC2 is not set
+CONFIG_HTC_ASIC3=y
+# CONFIG_SOC_TSC2101 is not set
+
+#
+# Misc devices
+#
+CONFIG_BATTERY_MONITOR=y
+
+#
+# Multimedia Capabilities Port drivers
+#
+# CONFIG_MCP is not set
+
+#
+# Multimedia Capabilities Port drivers
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB 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_MODE_HELPERS is not set
+CONFIG_FB_TILEBLITTING=y
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+CONFIG_FB_PXA_PARAMETERS=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=y
+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 is not set
+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=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=y
+CONFIG_SND_TIMER=y
+CONFIG_SND_PCM=y
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=y
+CONFIG_SND_PCM_OSS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+# CONFIG_SND_SUPPORT_OLD_API is not set
+CONFIG_SND_VERBOSE_PRINTK=y
+CONFIG_SND_DEBUG=y
+CONFIG_SND_DEBUG_DETECT=y
+
+#
+# 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
+#
+# CONFIG_SND_A716 is not set
+# CONFIG_SND_H1910 is not set
+# CONFIG_SND_H2200 is not set
+CONFIG_SND_H4000=y
+# CONFIG_SND_HTCMAGICIAN is not set
+# CONFIG_SND_HX4700 is not set
+# CONFIG_SND_HTCUNIVERSAL is not set
+# CONFIG_SND_H5XXX_AK4535 is not set
+CONFIG_SND_PXA2xx_I2SOUND=y
+# CONFIG_SND_PXA2XX_AC97 is not set
+
+#
+# PCMCIA devices
+#
+CONFIG_SND_UDA1380=y
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk 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=y
+CONFIG_USB_PXA2XX=y
+# CONFIG_USB_PXA2XX_SMALL is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP 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
+# CONFIG_USB_G_CHAR is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_PXA is not set
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+CONFIG_MMC_ASIC3=y
+
+#
+# LED devices
+#
+CONFIG_CLASS_LEDS=y
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS 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 is not set
+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 is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+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_RELAYFS_FS is not set
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# 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 is not set
+CONFIG_JFFS2_FS=m
+CONFIG_JFFS2_FS_DEBUG=1
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# 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 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT 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=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+CONFIG_NLS_CODEPAGE_1250=y
+CONFIG_NLS_CODEPAGE_1251=y
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# 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=y
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+# CONFIG_MAGIC_SYSRQ is not set
+CONFIG_DEBUG_KERNEL=y
+CONFIG_LOG_BUF_SHIFT=15
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_KOBJECT is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_FS is not set
+CONFIG_DEBUG_VM=y
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+CONFIG_DEBUG_USER=y
+# CONFIG_DEBUG_WAITQ is not set
+CONFIG_DEBUG_ERRORS=y
+# CONFIG_DEBUG_LL is not set
+
+#
+# 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=y
+# 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 is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_DEFLATE=y
+# 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=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
diff --git a/packages/linux/linux-handhelds-2.6-2.6.16/h5xxx/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.16/h5xxx/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.16/h5xxx/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6/h5xxx/defconfig b/packages/linux/linux-handhelds-2.6-2.6.16/h5xxx/defconfig
index b3f8f7c100..b3f8f7c100 100644
--- a/packages/linux/linux-handhelds-2.6/h5xxx/defconfig
+++ b/packages/linux/linux-handhelds-2.6-2.6.16/h5xxx/defconfig
diff --git a/packages/linux/linux-handhelds-2.6-2.6.16/hrw-pcmcia-ids-r2.patch b/packages/linux/linux-handhelds-2.6-2.6.16/hrw-pcmcia-ids-r2.patch
new file mode 100644
index 0000000000..3d5d197920
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.16/hrw-pcmcia-ids-r2.patch
@@ -0,0 +1,35 @@
+
+The ident for Seagate 8GB microdrive is
+"SEAGATE", "ST1"
+hash 0x76dc4190, 0xcfba9599
+manfid 0x0111, 0x0000
+
+Signed-off-by: Marcin Juszkiewicz <openembedded@hrw.one.pl>
+
+ drivers/ide/legacy/ide-cs.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+Index: linux-2.6.16/drivers/ide/legacy/ide-cs.c
+===================================================================
+--- linux-2.6.16.orig/drivers/ide/legacy/ide-cs.c 2006-04-20 12:41:41.000000000 +0200
++++ linux-2.6.16/drivers/ide/legacy/ide-cs.c 2006-04-20 12:45:19.640621552 +0200
+@@ -444,6 +444,7 @@
+ PCMCIA_DEVICE_PROD_ID12("PCMCIA", "CD-ROM", 0x281f1c5d, 0x66536591),
+ PCMCIA_DEVICE_PROD_ID12("PCMCIA", "PnPIDE", 0x281f1c5d, 0x0c694728),
+ PCMCIA_DEVICE_PROD_ID12("SHUTTLE TECHNOLOGY LTD.", "PCCARD-IDE/ATAPI Adapter", 0x4a3f0ba0, 0x322560e1),
++ PCMCIA_DEVICE_PROD_ID12("SEAGATE", "ST1", 0x87c1b330, 0xe1f30883), /* Seagate 8GB microdrive */
+ PCMCIA_DEVICE_PROD_ID12("TOSHIBA", "MK2001MPL", 0xb4585a1a, 0x3489e003),
+ PCMCIA_DEVICE_PROD_ID1("TRANSCEND 512M ", 0xd0909443),
+ PCMCIA_DEVICE_PROD_ID12("WIT", "IDE16", 0x244e5994, 0x3e232852),
+
+
+-------------------------------------------------------------------------
+With pcmcia-cs -> pcmciautils change some cards which was working with
+hostap driver now are bound into orinoco driver.
+
+This patch made them bound into hostap like it was before.
+
+Signed-off-by: Marcin Juszkiewicz <openembedded@hrw.one.pl>
+
+// will add some here
+
diff --git a/packages/linux/linux-handhelds-2.6-2.6.16/htcuniversal/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.16/htcuniversal/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.16/htcuniversal/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.16/htcuniversal/defconfig b/packages/linux/linux-handhelds-2.6-2.6.16/htcuniversal/defconfig
new file mode 100644
index 0000000000..d409f0b3f5
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.16/htcuniversal/defconfig
@@ -0,0 +1,1209 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.17-hh1
+# Sun Oct 1 20:32:17 2006
+#
+CONFIG_ARM=y
+CONFIG_MMU=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_MTD_XIP=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=y
+CONFIG_BSD_PROCESS_ACCT=y
+CONFIG_BSD_PROCESS_ACCT_V3=y
+CONFIG_SYSCTL=y
+CONFIG_AUDIT=y
+CONFIG_IKCONFIG=y
+# CONFIG_MINIMAL_OOPS is not set
+CONFIG_IKCONFIG_PROC=y
+# 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_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_USELIB=y
+CONFIG_CORE_DUMP=y
+CONFIG_SLAB=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# 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 is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+
+#
+# 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=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# 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
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_ARCH_H1900 is not set
+# CONFIG_ARCH_H2200 is not set
+# CONFIG_MACH_H3900 is not set
+# CONFIG_MACH_H4000 is not set
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+# CONFIG_MACH_HIMALAYA is not set
+CONFIG_MACH_HTCUNIVERSAL=y
+CONFIG_HTCUNIVERSAL_CORE=y
+CONFIG_HTCUNIVERSAL_UDC=y
+# CONFIG_HTCUNIVERSAL_POWER is not set
+CONFIG_HTCUNIVERSAL_LCD=y
+CONFIG_HTCUNIVERSAL_TS2=y
+CONFIG_HTCUNIVERSAL_KEYPAD=y
+CONFIG_HTCUNIVERSAL_BLUETOOTH=y
+# CONFIG_HTCUNIVERSAL_PHONE is not set
+# CONFIG_MACH_HTCALPINE is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HTCAPACHE is not set
+# CONFIG_MACH_BLUEANGEL is not set
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_MACH_X30 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_PXA_SHARPSL is not set
+CONFIG_PXA27x=y
+# CONFIG_SA1100_H3100 is not set
+# CONFIG_SA1100_H3600 is not set
+# CONFIG_SA1100_H3800 is not set
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+
+#
+# Processor Features
+#
+# CONFIG_ARM_THUMB is not set
+CONFIG_XSCALE_PMU=y
+# CONFIG_KEXEC is not set
+
+#
+# Compaq/iPAQ Platforms
+#
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+# CONFIG_IPAQ_HAMCOP 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_HZ=100
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# 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=""
+# CONFIG_XIP_KERNEL is not set
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ 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
+
+#
+# Power management options
+#
+CONFIG_PM=y
+CONFIG_PM_LEGACY=y
+CONFIG_PM_DEBUG=y
+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_NET_KEY is not set
+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 is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# 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 is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+# CONFIG_IRNET is not set
+CONFIG_IRCOMM=m
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=m
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# 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_PXA_FICP=m
+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=m
+CONFIG_BT_HCIUSB_SCO=y
+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=m
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_IEEE80211 is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+# CONFIG_MTD 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_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
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+# 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 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
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_HOSTAP is not set
+CONFIG_ACX=m
+# CONFIG_ACX_USB is not set
+CONFIG_ACX_MEM=y
+CONFIG_ACX_HTCUNIVERSAL=m
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+CONFIG_PPPOE=m
+# 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=480
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=640
+# 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=y
+# 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 is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_SERPORT is not set
+CONFIG_SERIO_LIBPS2=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_PXA=y
+# CONFIG_SERIAL_PXA_CONSOLE is not set
+CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_CORE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS 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_ELV is not set
+# CONFIG_I2C_PXA is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# 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=y
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCA9535 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
+
+#
+# L3 serial bus support
+#
+# CONFIG_L3 is not set
+
+#
+# Mice
+#
+# CONFIG_BUSMOUSE is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_NVRAM is not set
+CONFIG_SA1100_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
+
+#
+# SPI support
+#
+CONFIG_SPI=y
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+CONFIG_SPI_BITBANG=y
+# CONFIG_SPI_PXA2XX is not set
+
+#
+# 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
+
+#
+# SoC drivers
+#
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_HTC_ASIC2 is not set
+CONFIG_HTC_ASIC3=y
+# CONFIG_SOC_TSC2101 is not set
+
+#
+# Misc devices
+#
+CONFIG_BATTERY_MONITOR=y
+
+#
+# Multimedia Capabilities Port drivers
+#
+# CONFIG_MCP is not set
+
+#
+# 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=y
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+CONFIG_FB_PXA_PARAMETERS=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=y
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+CONFIG_FONT_8x16=y
+# 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 is not set
+# 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
+CONFIG_BACKLIGHT_CORGI=y
+
+#
+# Sound
+#
+# CONFIG_SOUND 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 is not set
+# CONFIG_USB_PRINTER is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+# CONFIG_USB_STORAGE is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+# CONFIG_USB_HID is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE 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=y
+CONFIG_USB_NET_CDCETHER=y
+# CONFIG_USB_NET_GL620A is not set
+CONFIG_USB_NET_NET1080=y
+# CONFIG_USB_NET_PLUSB is not set
+# CONFIG_USB_NET_RNDIS_HOST is not set
+# CONFIG_USB_NET_CDC_SUBSET is not set
+CONFIG_USB_NET_ZAURUS=y
+# CONFIG_USB_ZD1201 is not set
+# CONFIG_USB_MON is not set
+
+#
+# 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=m
+# 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_PXA27X=y
+CONFIG_USB_PXA27X=m
+# CONFIG_USB_PXA27X_DMA is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP 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=m
+# 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
+# CONFIG_USB_G_CHAR is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_PXA is not set
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+CONFIG_MMC_ASIC3=y
+
+#
+# Real Time Clock
+#
+CONFIG_RTC_LIB=y
+# CONFIG_RTC_CLASS 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 is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG 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=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 is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=850
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-15"
+CONFIG_NTFS_FS=y
+# CONFIG_NTFS_DEBUG is not set
+# CONFIG_NTFS_RW 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 is not set
+
+#
+# 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_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 is not set
+# CONFIG_NFSD is not set
+CONFIG_SMB_FS=m
+CONFIG_SMB_NLS_DEFAULT=y
+CONFIG_SMB_NLS_REMOTE="utf8"
+# 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=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+CONFIG_NLS_CODEPAGE_850=y
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# 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=y
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=y
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_FS is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_UNWIND_INFO is not set
+# CONFIG_DEBUG_USER is not set
+
+#
+# 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=y
+# 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=y
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+CONFIG_CRYPTO_ARC4=y
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_DEFLATE=y
+CONFIG_CRYPTO_MICHAEL_MIC=y
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
diff --git a/packages/linux/linux-handhelds-2.6-2.6.16/hx4700/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.16/hx4700/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.16/hx4700/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6/ipaq-pxa270/defconfig b/packages/linux/linux-handhelds-2.6-2.6.16/hx4700/defconfig
index 7fadc7ae3a..7fadc7ae3a 100644
--- a/packages/linux/linux-handhelds-2.6/ipaq-pxa270/defconfig
+++ b/packages/linux/linux-handhelds-2.6-2.6.16/hx4700/defconfig
diff --git a/packages/linux/linux-handhelds-2.6/ide_not_removable-r0.patch b/packages/linux/linux-handhelds-2.6-2.6.16/ide_not_removable-r0.patch
index 1938f72829..1938f72829 100644
--- a/packages/linux/linux-handhelds-2.6/ide_not_removable-r0.patch
+++ b/packages/linux/linux-handhelds-2.6-2.6.16/ide_not_removable-r0.patch
diff --git a/packages/linux/linux-handhelds-2.6-2.6.16/ipaq-pxa270/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.16/ipaq-pxa270/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.16/ipaq-pxa270/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6-2.6.16/ipaq-pxa270/defconfig b/packages/linux/linux-handhelds-2.6-2.6.16/ipaq-pxa270/defconfig
new file mode 100644
index 0000000000..7fadc7ae3a
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.16/ipaq-pxa270/defconfig
@@ -0,0 +1,1687 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.16-hh5
+# Thu Aug 10 16:39:20 2006
+#
+CONFIG_ARM=y
+CONFIG_MMU=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_MTD_XIP=y
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+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_MINIMAL_OOPS is not set
+CONFIG_IKCONFIG_PROC=y
+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=y
+# CONFIG_USELIB is not set
+CONFIG_CORE_DUMP=y
+CONFIG_CC_ALIGN_FUNCTIONS=0
+CONFIG_CC_ALIGN_LABELS=0
+CONFIG_CC_ALIGN_LOOPS=0
+CONFIG_CC_ALIGN_JUMPS=0
+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_OBSOLETE_MODPARM=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+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_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_L7200 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# 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
+
+#
+# Intel PXA2xx Implementations
+#
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_ARCH_PXA_IDP is not set
+# CONFIG_ARCH_ESERIES is not set
+# CONFIG_MACH_A620 is not set
+# CONFIG_MACH_A716 is not set
+# CONFIG_ARCH_H1900 is not set
+# CONFIG_ARCH_H2200 is not set
+# CONFIG_ARCH_H3900 is not set
+# CONFIG_MACH_H4000 is not set
+CONFIG_MACH_H4700=y
+CONFIG_HX4700_NAVPOINT=y
+CONFIG_HX4700_CORE=y
+CONFIG_HX4700_TS=y
+CONFIG_HX4700_BLUETOOTH=y
+CONFIG_HX4700_PCMCIA=y
+CONFIG_HX4700_LCD=y
+CONFIG_HX4700_LEDS=y
+# CONFIG_MACH_HX2750 is not set
+# CONFIG_ARCH_H5400 is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_HTCUNIVERSAL is not set
+# CONFIG_MACH_HTCALPINE is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HTCAPACHE is not set
+# CONFIG_MACH_BLUEANGEL is not set
+# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_ARCH_AXIMX5 is not set
+# CONFIG_ARCH_AXIMX3 is not set
+# CONFIG_MACH_X30 is not set
+# CONFIG_ARCH_ROVERP1 is not set
+# CONFIG_ARCH_ROVERP5P is not set
+# CONFIG_MACH_XSCALE_PALMLD is not set
+# CONFIG_MACH_T3XSCALE is not set
+# CONFIG_PXA_SHARPSL is not set
+CONFIG_PXA27x=y
+CONFIG_IWMMXT=y
+# CONFIG_SA1100_H3100 is not set
+# CONFIG_SA1100_H3600 is not set
+# CONFIG_SA1100_H3800 is not set
+CONFIG_GPIO_KEYS=y
+
+#
+# Linux As Bootloader
+#
+# CONFIG_LAB is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+CONFIG_XSCALE_PMU=y
+# CONFIG_KEXEC is not set
+
+#
+# Compaq/iPAQ Platforms
+#
+CONFIG_PXA_IPAQ=y
+
+#
+# XScale-based iPAQ
+#
+CONFIG_IPAQ_HANDHELD=y
+
+#
+# Compaq/iPAQ Drivers
+#
+
+#
+# Compaq/HP iPAQ Drivers
+#
+# CONFIG_IPAQ_SLEEVE is not set
+# CONFIG_IPAQ_SAMCOP is not set
+# CONFIG_IPAQ_HAMCOP is not set
+
+#
+# Bus support
+#
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+CONFIG_PCCARD=y
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA=y
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+
+#
+# PC-card bridges
+#
+CONFIG_PCMCIA_PXA2XX=y
+
+#
+# Kernel Features
+#
+CONFIG_PREEMPT=y
+# CONFIG_NO_IDLE_HZ is not set
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# 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="keepinitrd"
+# CONFIG_XIP_KERNEL is not set
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
+CONFIG_CPU_FREQ_DEBUG=y
+CONFIG_CPU_FREQ_STAT=y
+CONFIG_CPU_FREQ_STAT_DETAILS=y
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=m
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPU_FREQ_PXA=y
+CONFIG_PXA25x_ALTERNATE_FREQS=y
+
+#
+# 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
+
+#
+# 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 is not set
+CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE=m
+CONFIG_NET_IPGRE_BROADCAST=y
+# 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_TUNNEL=m
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=m
+CONFIG_IPV6_PRIVACY=y
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_IPV6_TUNNEL=m
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NETFILTER_XTABLES is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_CONNTRACK=m
+# CONFIG_IP_NF_CT_ACCT is not set
+# CONFIG_IP_NF_CONNTRACK_MARK is not set
+# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
+# CONFIG_IP_NF_CT_PROTO_SCTP is not set
+CONFIG_IP_NF_FTP=m
+CONFIG_IP_NF_IRC=m
+# CONFIG_IP_NF_NETBIOS_NS is not set
+# CONFIG_IP_NF_TFTP is not set
+# CONFIG_IP_NF_AMANDA is not set
+# CONFIG_IP_NF_PPTP is not set
+# CONFIG_IP_NF_QUEUE is not set
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP6_NF_QUEUE is not set
+
+#
+# Bridge: Netfilter Configuration
+#
+# CONFIG_BRIDGE_NF_EBTABLES 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=m
+# 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 is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+CONFIG_IRDA_ULTRA=y
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+CONFIG_IRDA_DEBUG=y
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=m
+
+#
+# Dongle support
+#
+# CONFIG_DONGLE is not set
+
+#
+# Old SIR device drivers
+#
+CONFIG_IRPORT_SIR=m
+
+#
+# Old Serial dongle support
+#
+# CONFIG_DONGLE_OLD is not set
+
+#
+# FIR device drivers
+#
+# CONFIG_USB_IRDA is not set
+# CONFIG_SIGMATEL_FIR is not set
+# CONFIG_PXA_FICP is not set
+CONFIG_BT=y
+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=y
+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_HCIDTL1 is not set
+# CONFIG_BT_HCIBT3C is not set
+# CONFIG_BT_HCIBLUECARD is not set
+CONFIG_BT_HCIBTUART=m
+# CONFIG_BT_HCIVHCI is not set
+CONFIG_IEEE80211=y
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=y
+CONFIG_IEEE80211_CRYPT_CCMP=y
+CONFIG_IEEE80211_CRYPT_TKIP=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+# CONFIG_DEBUG_DRIVER is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS 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=m
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# 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=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+CONFIG_MTD_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_OTP is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+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
+# CONFIG_MTD_XIP is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_IPAQ is not set
+# CONFIG_MTD_SHARP_SL is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLKMTD 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 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=m
+CONFIG_BLK_DEV_NBD=m
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=m
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_CDROM_PKTCDVD=m
+CONFIG_CDROM_PKTCDVD_BUFFERS=8
+# CONFIG_CDROM_PKTCDVD_WCACHE is not set
+CONFIG_ATA_OVER_ETH=m
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=y
+CONFIG_BLK_DEV_IDE=m
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=m
+# CONFIG_IDEDISK_MULTI_MODE is not set
+CONFIG_BLK_DEV_IDECS=m
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_BLK_DEV_IDESCSI is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=m
+# 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=m
+CONFIG_SCSI_PROC_FS=y
+
+#
+# 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
+
+#
+# PCMCIA SCSI adapter support
+#
+# CONFIG_PCMCIA_AHA152X is not set
+# CONFIG_PCMCIA_FDOMAIN is not set
+# CONFIG_PCMCIA_NINJA_SCSI is not set
+# CONFIG_PCMCIA_QLOGIC is not set
+# CONFIG_PCMCIA_SYM53C500 is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD 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=m
+
+#
+# PHY device support
+#
+
+#
+# Ethernet (10 or 100Mbit)
+#
+# CONFIG_NET_ETHERNET is not set
+CONFIG_MII=m
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+# CONFIG_PCMCIA_WAVELAN is not set
+# CONFIG_PCMCIA_NETWAVE is not set
+
+#
+# Wireless 802.11 Frequency Hopping cards support
+#
+# CONFIG_PCMCIA_RAYCS is not set
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+CONFIG_HERMES=m
+# CONFIG_ATMEL is not set
+
+#
+# Wireless 802.11b Pcmcia/Cardbus cards support
+#
+CONFIG_PCMCIA_HERMES=m
+# CONFIG_PCMCIA_SPECTRUM is not set
+# CONFIG_AIRO_CS is not set
+# CONFIG_PCMCIA_WL3501 is not set
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+CONFIG_HOSTAP_FIRMWARE_NVRAM=y
+CONFIG_HOSTAP_CS=m
+CONFIG_ACX=y
+# CONFIG_ACX_USB is not set
+CONFIG_ACX_MEM=y
+CONFIG_ACX_HX4700=m
+CONFIG_NET_WIRELESS=y
+
+#
+# PCMCIA network device support
+#
+CONFIG_NET_PCMCIA=y
+# CONFIG_PCMCIA_3C589 is not set
+# CONFIG_PCMCIA_3C574 is not set
+# CONFIG_PCMCIA_FMVJ18X is not set
+CONFIG_PCMCIA_PCNET=m
+# CONFIG_PCMCIA_NMCLAN is not set
+# CONFIG_PCMCIA_SMC91C92 is not set
+# CONFIG_PCMCIA_XIRC2PS is not set
+# CONFIG_PCMCIA_AXNET is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+# CONFIG_PPP_MPPE is not set
+# 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=m
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+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=m
+# 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=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+CONFIG_MOUSE_NAVPOINT=y
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_UINPUT=m
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=m
+CONFIG_SERIO_SERPORT=m
+CONFIG_SERIO_LIBPS2=m
+CONFIG_SERIO_RAW=m
+# 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=m
+CONFIG_SERIAL_8250_CS=m
+CONFIG_SERIAL_8250_NR_UARTS=4
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_PXA_COUNT=4
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# I2C support
+#
+CONFIG_I2C=m
+CONFIG_I2C_CHARDEV=m
+
+#
+# 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_ELV is not set
+CONFIG_I2C_PXA=m
+# CONFIG_I2C_PXA_SLAVE is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# 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_PCA9535 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_RTC8564 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_RTC_X1205_I2C 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
+
+#
+# L3 serial bus support
+#
+CONFIG_L3=m
+
+#
+# Mice
+#
+# CONFIG_BUSMOUSE is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_SA1100_WATCHDOG=m
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+# CONFIG_NVRAM is not set
+CONFIG_SA1100_RTC=y
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+CONFIG_W1=y
+# CONFIG_W1_DS9490 is not set
+# CONFIG_W1_THERM is not set
+# CONFIG_W1_SMEM is not set
+# CONFIG_W1_DS2433 is not set
+CONFIG_W1_DS2760=y
+
+#
+# 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
+
+#
+# SoC drivers
+#
+# CONFIG_SOC_MQ11XX is not set
+# CONFIG_SOC_T7L66XB is not set
+# CONFIG_SOC_TC6387XB is not set
+# CONFIG_SOC_TC6393XB is not set
+# CONFIG_HTC_ASIC2 is not set
+CONFIG_HTC_ASIC3=y
+# CONFIG_SOC_TSC2101 is not set
+
+#
+# Misc devices
+#
+CONFIG_BATTERY_MONITOR=y
+
+#
+# Multimedia Capabilities Port drivers
+#
+# CONFIG_MCP is not set
+
+#
+# Multimedia Capabilities Port drivers
+#
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+
+#
+# Video For Linux
+#
+
+#
+# Video Adapters
+#
+# CONFIG_VIDEO_ADV_DEBUG is not set
+# CONFIG_VIDEO_CPIA is not set
+# CONFIG_VIDEO_SAA5246A is not set
+# CONFIG_VIDEO_SAA5249 is not set
+# CONFIG_TUNER_3036 is not set
+# CONFIG_VIDEO_EM28XX is not set
+# CONFIG_VIDEO_OVCAMCHIP is not set
+# CONFIG_VIDEO_AUDIO_DECODER is not set
+# CONFIG_VIDEO_DECODER is not set
+
+#
+# Radio Adapters
+#
+# CONFIG_RADIO_MAESTRO is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB 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_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+# CONFIG_FB_IMAGEON is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_PXA is not set
+CONFIG_FB_W100=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=y
+# 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 is not set
+# 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=y
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=y
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+# CONFIG_SND_SEQUENCER is not set
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_DYNAMIC_MINORS=y
+CONFIG_SND_SUPPORT_OLD_API=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
+#
+# CONFIG_SND_A716 is not set
+# CONFIG_SND_H1910 is not set
+# CONFIG_SND_H2200 is not set
+# CONFIG_SND_HTCMAGICIAN is not set
+CONFIG_SND_HX4700=m
+# CONFIG_SND_HTCUNIVERSAL is not set
+# CONFIG_SND_H5XXX_AK4535 is not set
+CONFIG_SND_PXA2xx_I2SOUND=m
+# CONFIG_SND_PXA2XX_AC97 is not set
+
+#
+# USB devices
+#
+# CONFIG_SND_USB_AUDIO is not set
+
+#
+# PCMCIA devices
+#
+CONFIG_SND_AK4641=m
+
+#
+# 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=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+# CONFIG_USB_DEVICEFS is not set
+# 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=m
+# CONFIG_USB_OHCI_BIG_ENDIAN is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+CONFIG_USB_SL811_HCD=m
+CONFIG_USB_SL811_CS=m
+
+#
+# USB Device Class drivers
+#
+# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
+# CONFIG_USB_ACM is not set
+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=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+CONFIG_USB_HIDINPUT=y
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+CONFIG_USB_HIDDEV=y
+
+#
+# USB HID Boot Protocol drivers
+#
+CONFIG_USB_KBD=m
+CONFIG_USB_MOUSE=m
+# 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_MTOUCH is not set
+# CONFIG_USB_ITMTOUCH is not set
+# CONFIG_USB_EGALAX 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 Multimedia devices
+#
+# CONFIG_USB_DABUSB is not set
+# CONFIG_USB_VICAM is not set
+# CONFIG_USB_DSBR is not set
+# CONFIG_USB_ET61X251 is not set
+# CONFIG_USB_IBMCAM is not set
+# CONFIG_USB_KONICAWC is not set
+# CONFIG_USB_OV511 is not set
+# CONFIG_USB_SE401 is not set
+CONFIG_USB_SN9C102=m
+# CONFIG_USB_STV680 is not set
+# CONFIG_USB_PWC is not set
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_CDCETHER=m
+# CONFIG_USB_NET_GL620A is not set
+CONFIG_USB_NET_NET1080=m
+# CONFIG_USB_NET_PLUSB is not set
+# CONFIG_USB_NET_RNDIS_HOST is not set
+CONFIG_USB_NET_CDC_SUBSET=m
+# CONFIG_USB_ALI_M5632 is not set
+# CONFIG_USB_AN2720 is not set
+CONFIG_USB_BELKIN=y
+CONFIG_USB_ARMLINUX=y
+# CONFIG_USB_EPSON2888 is not set
+CONFIG_USB_NET_ZAURUS=m
+CONFIG_USB_ZD1201=m
+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
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+CONFIG_USB_GADGET=m
+# 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_PXA27X=y
+CONFIG_USB_PXA27X=m
+# CONFIG_USB_PXA27X_DMA is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_MQ11XX is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP 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=m
+# CONFIG_USB_ETH_RNDIS is not set
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_G_CHAR is not set
+
+#
+# MMC/SD Card support
+#
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_BLOCK=y
+# CONFIG_MMC_PXA is not set
+# CONFIG_MMC_TMIO is not set
+# CONFIG_MMC_SAMCOP is not set
+CONFIG_MMC_ASIC3=y
+
+#
+# LED devices
+#
+CONFIG_CLASS_LEDS=y
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=m
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+# CONFIG_EXT2_FS_SECURITY is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=m
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+CONFIG_JBD=m
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=m
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+CONFIG_REISERFS_PROC_INFO=y
+CONFIG_REISERFS_FS_XATTR=y
+# CONFIG_REISERFS_FS_POSIX_ACL is not set
+# CONFIG_REISERFS_FS_SECURITY is not set
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+CONFIG_XFS_FS=m
+CONFIG_XFS_EXPORT=y
+CONFIG_XFS_QUOTA=y
+CONFIG_XFS_SECURITY=y
+CONFIG_XFS_POSIX_ACL=y
+CONFIG_XFS_RT=y
+# 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_QUOTACTL=y
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_ZISOFS_FS=m
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# 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=m
+# CONFIG_NTFS_DEBUG is not set
+# CONFIG_NTFS_RW 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_RELAYFS_FS=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=m
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_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=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+CONFIG_CRAMFS=m
+# 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=m
+CONFIG_NFS_V3=y
+CONFIG_NFS_V3_ACL=y
+CONFIG_NFS_V4=y
+CONFIG_NFS_DIRECTIO=y
+CONFIG_NFSD=m
+CONFIG_NFSD_V2_ACL=y
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V3_ACL=y
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_ACL_SUPPORT=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+CONFIG_RPCSEC_GSS_KRB5=m
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+CONFIG_SMB_NLS_DEFAULT=y
+CONFIG_SMB_NLS_REMOTE="cp437"
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+CONFIG_CIFS_XATTR=y
+CONFIG_CIFS_POSIX=y
+# CONFIG_CIFS_EXPERIMENTAL is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+CONFIG_9P_FS=m
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=y
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+# CONFIG_MAGIC_SYSRQ is not set
+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_PREEMPT is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_KOBJECT is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_DEBUG_VM is not set
+CONFIG_FRAME_POINTER=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 is not set
+
+#
+# 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 is not set
+CONFIG_CRYPTO_DES=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=y
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=y
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=y
+CONFIG_CRYPTO_CRC32C=m
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_CRC_CCITT=m
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
diff --git a/packages/linux/linux-handhelds-2.6-2.6.16/jornada56x/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.16/jornada56x/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.16/jornada56x/.mtn2git_empty
diff --git a/packages/linux/handhelds-sa-2.6/defconfig-jornada56x b/packages/linux/linux-handhelds-2.6-2.6.16/jornada56x/defconfig
index ebc9a88f2c..ebc9a88f2c 100644
--- a/packages/linux/handhelds-sa-2.6/defconfig-jornada56x
+++ b/packages/linux/linux-handhelds-2.6-2.6.16/jornada56x/defconfig
diff --git a/packages/linux/linux-handhelds-2.6-2.6.16/magician/.mtn2git_empty b/packages/linux/linux-handhelds-2.6-2.6.16/magician/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6-2.6.16/magician/.mtn2git_empty
diff --git a/packages/linux/linux-handhelds-2.6/magician/defconfig b/packages/linux/linux-handhelds-2.6-2.6.16/magician/defconfig
index f3cffaa46c..f3cffaa46c 100644
--- a/packages/linux/linux-handhelds-2.6/magician/defconfig
+++ b/packages/linux/linux-handhelds-2.6-2.6.16/magician/defconfig
diff --git a/packages/linux/linux-handhelds-2.6/pitre-tls-2651.patch b/packages/linux/linux-handhelds-2.6-2.6.16/pitre-tls-2651.patch
index 5ef318e4ac..5ef318e4ac 100644
--- a/packages/linux/linux-handhelds-2.6/pitre-tls-2651.patch
+++ b/packages/linux/linux-handhelds-2.6-2.6.16/pitre-tls-2651.patch
diff --git a/packages/linux/linux-handhelds-2.6.inc b/packages/linux/linux-handhelds-2.6.inc
index 5535e91c48..7ac7470e82 100644
--- a/packages/linux/linux-handhelds-2.6.inc
+++ b/packages/linux/linux-handhelds-2.6.inc
@@ -3,9 +3,7 @@ DESCRIPTION = "handhelds.org Linux kernel 2.6 for PocketPCs and other consumer h
LICENSE = "GPL"
COMPATIBLE_HOST = "arm.*-linux"
-COMPATIBLE_MACHINE ?= '(h1910|h2200|h3900|h4000|h5xxx|htcuniversal|hx4700)'
-
-FILESDIR = "${@os.path.dirname(bb.data.getVar('FILE',d,1))}/handhelds-pxa-${PV}"
+COMPATIBLE_MACHINE ?= '(h1910|h2200|h3600|h3900|h4000|h5xxx|htcuniversal|hx4700|jornada56x|simpad)'
SRC_URI = "${HANDHELDS_CVS};module=linux/kernel26;tag=${@'K' + bb.data.getVar('PV',d,1).replace('.', '-')} \
file://24-hostap_cs_id.diff;patch=1 \
diff --git a/packages/linux/linux-handhelds-2.6/h2200/defconfig b/packages/linux/linux-handhelds-2.6/h2200/defconfig
index 87c94b5f04..a41c6b6586 100644
--- a/packages/linux/linux-handhelds-2.6/h2200/defconfig
+++ b/packages/linux/linux-handhelds-2.6/h2200/defconfig
@@ -1,13 +1,15 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.16-hh5
-# Thu Aug 10 15:54:59 2006
+# Linux kernel version: 2.6.17-hh2
+# Fri Oct 27 01:17:24 2006
#
CONFIG_ARM=y
CONFIG_MMU=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
#
# Code maturity level options
@@ -31,6 +33,7 @@ CONFIG_SYSCTL=y
CONFIG_IKCONFIG=y
# CONFIG_MINIMAL_OOPS is not set
# CONFIG_IKCONFIG_PROC is not set
+# CONFIG_RELAY is not set
CONFIG_INITRAMFS_SOURCE=""
CONFIG_UID16=y
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
@@ -48,10 +51,6 @@ CONFIG_EPOLL=y
CONFIG_SHMEM=y
# CONFIG_USELIB is not set
# CONFIG_CORE_DUMP is not set
-CONFIG_CC_ALIGN_FUNCTIONS=0
-CONFIG_CC_ALIGN_LABELS=0
-CONFIG_CC_ALIGN_LOOPS=0
-CONFIG_CC_ALIGN_JUMPS=0
CONFIG_SLAB=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
@@ -63,7 +62,6 @@ CONFIG_BASE_SMALL=0
CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_OBSOLETE_MODPARM=y
# CONFIG_MODVERSIONS is not set
# CONFIG_MODULE_SRCVERSION_ALL is not set
CONFIG_KMOD=y
@@ -71,6 +69,7 @@ CONFIG_KMOD=y
#
# Block layer
#
+# CONFIG_BLK_DEV_IO_TRACE is not set
#
# IO Schedulers
@@ -92,11 +91,13 @@ CONFIG_DEFAULT_IOSCHED="deadline"
# 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=y
# CONFIG_ARCH_RPC is not set
@@ -111,11 +112,13 @@ CONFIG_ARCH_PXA=y
# CONFIG_ARCH_H720X is not set
# CONFIG_ARCH_AAEC2000 is not set
# CONFIG_ARCH_AT91RM9200 is not set
+CONFIG_DMABOUNCE=y
#
# Intel PXA2xx Implementations
#
# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
# CONFIG_MACH_MAINSTONE is not set
# CONFIG_ARCH_PXA_IDP is not set
# CONFIG_ARCH_ESERIES is not set
@@ -123,7 +126,7 @@ CONFIG_ARCH_PXA=y
# CONFIG_MACH_A716 is not set
# CONFIG_ARCH_H1900 is not set
CONFIG_ARCH_H2200=y
-# CONFIG_ARCH_H3900 is not set
+# CONFIG_MACH_H3900 is not set
# CONFIG_MACH_H4000 is not set
# CONFIG_MACH_H4700 is not set
# CONFIG_MACH_HX2750 is not set
@@ -135,6 +138,7 @@ CONFIG_ARCH_H2200=y
# CONFIG_MACH_HTCAPACHE is not set
# CONFIG_MACH_BLUEANGEL is not set
# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_MACH_HW6900 is not set
# CONFIG_ARCH_AXIMX5 is not set
# CONFIG_ARCH_AXIMX3 is not set
# CONFIG_ARCH_ROVERP1 is not set
@@ -187,13 +191,11 @@ CONFIG_IPAQ_HANDHELD=y
#
# Compaq/HP iPAQ Drivers
#
-CONFIG_IPAQ_CLOCKS=y
# CONFIG_IPAQ_SLEEVE is not set
# CONFIG_IPAQ_SAMCOP is not set
CONFIG_IPAQ_HAMCOP=y
CONFIG_IPAQ_SAMCOP_TOUCHSCREEN=y
CONFIG_IPAQ_SAMCOP_DMA=y
-CONFIG_DMABOUNCE=y
#
# Bus support
@@ -219,6 +221,7 @@ CONFIG_PCMCIA_H2200=y
#
CONFIG_PREEMPT=y
CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
CONFIG_AEABI=y
CONFIG_OABI_COMPAT=y
# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
@@ -243,19 +246,7 @@ CONFIG_CMDLINE="console=ttyS0,115200n8 root=/dev/mmcblk0p1"
#
# CPU Frequency scaling
#
-CONFIG_CPU_FREQ=m
-CONFIG_CPU_FREQ_TABLE=y
-# CONFIG_CPU_FREQ_DEBUG is not set
-CONFIG_CPU_FREQ_STAT=y
-CONFIG_CPU_FREQ_STAT_DETAILS=y
-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=y
-# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
-CONFIG_CPU_FREQ_PXA=y
+# CONFIG_CPU_FREQ is not set
CONFIG_PXA25x_ALTERNATE_FREQS=y
#
@@ -316,6 +307,7 @@ CONFIG_SYN_COOKIES=y
CONFIG_INET_AH=m
CONFIG_INET_ESP=m
# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
# CONFIG_INET_TUNNEL is not set
CONFIG_INET_DIAG=y
CONFIG_INET_TCP_DIAG=y
@@ -328,9 +320,11 @@ CONFIG_TCP_CONG_BIC=y
# CONFIG_IP_VS is not set
CONFIG_IPV6=y
CONFIG_IPV6_PRIVACY=y
+# 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 is not set
CONFIG_NETFILTER=y
@@ -357,6 +351,7 @@ CONFIG_IP_NF_IRC=m
# CONFIG_IP_NF_TFTP is not set
# CONFIG_IP_NF_AMANDA is not set
# CONFIG_IP_NF_PPTP is not set
+# CONFIG_IP_NF_H323 is not set
# CONFIG_IP_NF_QUEUE is not set
#
@@ -387,6 +382,7 @@ CONFIG_IP_NF_IRC=m
CONFIG_BRIDGE=m
# CONFIG_VLAN_8021Q is not set
# CONFIG_DECNET is not set
+CONFIG_LLC=m
# CONFIG_LLC2 is not set
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
@@ -484,6 +480,8 @@ CONFIG_IEEE80211=y
CONFIG_IEEE80211_CRYPT_WEP=y
CONFIG_IEEE80211_CRYPT_CCMP=y
CONFIG_IEEE80211_CRYPT_TKIP=y
+# CONFIG_IEEE80211_SOFTMAC is not set
+CONFIG_WIRELESS_EXT=y
#
# Device Drivers
@@ -556,7 +554,6 @@ CONFIG_MTD_CFI_I2=y
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_PHRAM is not set
# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLKMTD is not set
# CONFIG_MTD_BLOCK2MTD is not set
#
@@ -737,6 +734,7 @@ CONFIG_MII=m
# Wireless LAN (non-hamradio)
#
CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
#
# Obsolete Wireless cards support (pre-802.11)
@@ -906,9 +904,7 @@ CONFIG_I2C_PXA=y
# CONFIG_SENSORS_PCA9539 is not set
# CONFIG_SENSORS_PCA9535 is not set
# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_RTC8564 is not set
# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_RTC_X1205_I2C is not set
# CONFIG_I2C_DEBUG_CORE is not set
# CONFIG_I2C_DEBUG_ALGO is not set
# CONFIG_I2C_DEBUG_BUS is not set
@@ -978,11 +974,21 @@ CONFIG_SA1100_RTC=y
# Dallas's 1-wire bus
#
CONFIG_W1=y
-# CONFIG_W1_DS9490 is not set
-# CONFIG_W1_THERM is not set
-# CONFIG_W1_SMEM is not set
-# CONFIG_W1_DS2433 is not set
+
+#
+# 1-wire Bus Masters
+#
+# CONFIG_W1_MASTER_DS9490 is not set
+# CONFIG_W1_MASTER_DS2482 is not set
CONFIG_W1_SAMCOP=y
+CONFIG_W1_DS1WM=y
+
+#
+# 1-wire Slaves
+#
+# CONFIG_W1_SLAVE_THERM is not set
+# CONFIG_W1_SLAVE_SMEM is not set
+# CONFIG_W1_SLAVE_DS2433 is not set
CONFIG_W1_DS2760=y
#
@@ -1014,31 +1020,72 @@ CONFIG_H2200_BATTERY=y
# CONFIG_MCP is not set
#
-# Multimedia Capabilities Port drivers
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
#
#
# Multimedia devices
#
CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
#
-# Video For Linux
+# Video Capture Adapters
#
#
-# Video Adapters
+# Video Capture Adapters
#
# CONFIG_VIDEO_ADV_DEBUG is not set
+# CONFIG_VIDEO_VIVI is not set
CONFIG_VIDEO_CPIA=m
# CONFIG_VIDEO_CPIA_USB is not set
+# CONFIG_VIDEO_CPIA2 is not set
# CONFIG_VIDEO_SAA5246A is not set
# CONFIG_VIDEO_SAA5249 is not set
# CONFIG_TUNER_3036 is not set
-# CONFIG_VIDEO_EM28XX is not set
# CONFIG_VIDEO_OVCAMCHIP is not set
-# CONFIG_VIDEO_AUDIO_DECODER is not set
-# CONFIG_VIDEO_DECODER is not set
+
+#
+# Encoders and Decoders
+#
+# CONFIG_VIDEO_MSP3400 is not set
+# CONFIG_VIDEO_CS53L32A is not set
+# CONFIG_VIDEO_WM8775 is not set
+# CONFIG_VIDEO_WM8739 is not set
+# CONFIG_VIDEO_CX25840 is not set
+# CONFIG_VIDEO_SAA711X is not set
+# CONFIG_VIDEO_SAA7127 is not set
+# CONFIG_VIDEO_UPD64031A is not set
+# CONFIG_VIDEO_UPD64083 is not set
+
+#
+# V4L USB devices
+#
+# CONFIG_VIDEO_EM28XX is not set
+# CONFIG_USB_DSBR is not set
+# CONFIG_USB_VICAM is not set
+# CONFIG_USB_IBMCAM is not set
+# CONFIG_USB_KONICAWC is not set
+# CONFIG_USB_ET61X251 is not set
+# CONFIG_USB_OV511 is not set
+# CONFIG_USB_SE401 is not set
+CONFIG_USB_SN9C102=m
+# CONFIG_USB_STV680 is not set
+# CONFIG_USB_W9968CF is not set
+# CONFIG_USB_ZC0301 is not set
+CONFIG_USB_PWC=m
#
# Radio Adapters
@@ -1049,6 +1096,7 @@ CONFIG_VIDEO_CPIA=m
# Digital Video Broadcasting Devices
#
# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
#
# Graphics support
@@ -1058,6 +1106,7 @@ 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_IMAGEON is not set
@@ -1097,7 +1146,9 @@ CONFIG_BACKLIGHT_CLASS_DEVICE=y
CONFIG_BACKLIGHT_DEVICE=y
CONFIG_LCD_CLASS_DEVICE=y
CONFIG_LCD_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
CONFIG_BACKLIGHT_H2200=y
+CONFIG_LCD_H2200=y
#
# Sound
@@ -1116,8 +1167,10 @@ CONFIG_SND_RAWMIDI=m
CONFIG_SND_OSSEMUL=y
CONFIG_SND_MIXER_OSS=m
CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
CONFIG_SND_DYNAMIC_MINORS=y
CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
# CONFIG_SND_VERBOSE_PRINTK is not set
# CONFIG_SND_DEBUG is not set
@@ -1135,6 +1188,7 @@ CONFIG_SND_SUPPORT_OLD_API=y
# CONFIG_SND_A716 is not set
# CONFIG_SND_H1910 is not set
CONFIG_SND_H2200=y
+# CONFIG_SND_H4000 is not set
# CONFIG_SND_HTCMAGICIAN is not set
# CONFIG_SND_HX4700 is not set
# CONFIG_SND_HTCUNIVERSAL is not set
@@ -1150,6 +1204,8 @@ CONFIG_SND_USB_AUDIO=m
#
# PCMCIA devices
#
+# CONFIG_SND_VXPOCKET is not set
+# CONFIG_SND_PDAUDIOCF is not set
CONFIG_SND_UDA1380=y
#
@@ -1162,6 +1218,7 @@ CONFIG_SND_UDA1380=y
#
CONFIG_USB_ARCH_HAS_HCD=y
# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
CONFIG_USB=m
# CONFIG_USB_DEBUG is not set
@@ -1184,7 +1241,6 @@ CONFIG_USB_SL811_CS=m
#
# USB Device Class drivers
#
-# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
# CONFIG_USB_ACM is not set
# CONFIG_USB_PRINTER is not set
@@ -1217,9 +1273,7 @@ CONFIG_USB_HIDINPUT=y
# CONFIG_USB_ACECAD is not set
# CONFIG_USB_KBTAB is not set
# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_MTOUCH is not set
-# CONFIG_USB_ITMTOUCH is not set
-# CONFIG_USB_EGALAX 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
@@ -1234,21 +1288,6 @@ CONFIG_USB_HIDINPUT=y
# CONFIG_USB_MICROTEK is not set
#
-# USB Multimedia devices
-#
-# CONFIG_USB_DABUSB is not set
-# CONFIG_USB_VICAM is not set
-# CONFIG_USB_DSBR is not set
-# CONFIG_USB_ET61X251 is not set
-# CONFIG_USB_IBMCAM is not set
-# CONFIG_USB_KONICAWC is not set
-# CONFIG_USB_OV511 is not set
-# CONFIG_USB_SE401 is not set
-CONFIG_USB_SN9C102=m
-# CONFIG_USB_STV680 is not set
-CONFIG_USB_PWC=m
-
-#
# USB Network Adapters
#
CONFIG_USB_CATC=m
@@ -1316,6 +1355,7 @@ CONFIG_USB_PXA2XX=y
# CONFIG_USB_GADGET_MQ11XX is not set
# CONFIG_USB_GADGET_LH7A40X is not set
# CONFIG_USB_GADGET_OMAP 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
@@ -1339,10 +1379,30 @@ CONFIG_MMC_SAMCOP=y
# CONFIG_MMC_ASIC3 is not set
#
-# LED devices
+# 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_CLASS_LEDS=y
-CONFIG_LEDS_H2200=y
+# 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_SA1100=y
+# CONFIG_RTC_DRV_TEST is not set
#
# File systems
@@ -1417,7 +1477,6 @@ CONFIG_SYSFS=y
CONFIG_TMPFS=y
# CONFIG_HUGETLB_PAGE is not set
CONFIG_RAMFS=y
-CONFIG_RELAYFS_FS=m
CONFIG_CONFIGFS_FS=m
#
@@ -1561,6 +1620,7 @@ CONFIG_DEBUG_MUTEXES=y
# CONFIG_DEBUG_FS is not set
# CONFIG_DEBUG_VM is not set
CONFIG_FRAME_POINTER=y
+# CONFIG_UNWIND_INFO is not set
CONFIG_FORCED_INLINING=y
# CONFIG_RCU_TORTURE_TEST is not set
# CONFIG_DEBUG_USER is not set
diff --git a/packages/linux/linux-handhelds-2.6/h4000/defconfig b/packages/linux/linux-handhelds-2.6/h4000/defconfig
index fa75078717..14d1ccfdd4 100644
--- a/packages/linux/linux-handhelds-2.6/h4000/defconfig
+++ b/packages/linux/linux-handhelds-2.6/h4000/defconfig
@@ -1,13 +1,15 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.16-hh5
-# Sun Aug 27 21:52:45 2006
+# Linux kernel version: 2.6.17-hh0
+# Fri Sep 22 02:44:30 2006
#
CONFIG_ARM=y
CONFIG_MMU=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
#
# Code maturity level options
@@ -30,6 +32,7 @@ CONFIG_SYSCTL=y
CONFIG_IKCONFIG=y
# CONFIG_MINIMAL_OOPS is not set
CONFIG_IKCONFIG_PROC=y
+# CONFIG_RELAY is not set
CONFIG_INITRAMFS_SOURCE=""
CONFIG_UID16=y
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
@@ -47,10 +50,6 @@ CONFIG_EPOLL=y
CONFIG_SHMEM=y
CONFIG_USELIB=y
CONFIG_CORE_DUMP=y
-CONFIG_CC_ALIGN_FUNCTIONS=0
-CONFIG_CC_ALIGN_LABELS=0
-CONFIG_CC_ALIGN_LOOPS=0
-CONFIG_CC_ALIGN_JUMPS=0
CONFIG_SLAB=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
@@ -63,7 +62,6 @@ CONFIG_OBSOLETE_INTERMODULE=m
CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_OBSOLETE_MODPARM=y
# CONFIG_MODVERSIONS is not set
# CONFIG_MODULE_SRCVERSION_ALL is not set
CONFIG_KMOD=y
@@ -71,6 +69,7 @@ CONFIG_KMOD=y
#
# Block layer
#
+# CONFIG_BLK_DEV_IO_TRACE is not set
#
# IO Schedulers
@@ -92,11 +91,13 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
# 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=y
# CONFIG_ARCH_RPC is not set
@@ -116,6 +117,7 @@ CONFIG_ARCH_PXA=y
# Intel PXA2xx Implementations
#
# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
# CONFIG_MACH_MAINSTONE is not set
# CONFIG_ARCH_PXA_IDP is not set
# CONFIG_ARCH_ESERIES is not set
@@ -128,6 +130,7 @@ CONFIG_MACH_H4000=y
CONFIG_IPAQ_H4000_SERIAL=m
CONFIG_IPAQ_H4000_UDC=y
CONFIG_IPAQ_H4000_LCD=y
+CONFIG_IPAQ_H4000_BACKLIGHT=y
CONFIG_IPAQ_H4000_TS=y
CONFIG_IPAQ_H4000_PCMCIA=y
CONFIG_IPAQ_H4000_BUTTONS=y
@@ -222,6 +225,7 @@ CONFIG_PCMCIA_PXA2XX=y
#
# CONFIG_PREEMPT is not set
CONFIG_NO_IDLE_HZ=y
+CONFIG_HZ=100
# CONFIG_AEABI is not set
# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
CONFIG_SELECT_MEMORY_MODEL=y
@@ -316,6 +320,7 @@ CONFIG_IP_PNP=y
# CONFIG_INET_AH is not set
# CONFIG_INET_ESP is not set
# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
# CONFIG_INET_TUNNEL is not set
# CONFIG_INET_DIAG is not set
# CONFIG_TCP_CONG_ADVANCED is not set
@@ -327,9 +332,11 @@ CONFIG_TCP_CONG_BIC=y
# CONFIG_IP_VS is not set
CONFIG_IPV6=m
# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
# CONFIG_INET6_AH is not set
# CONFIG_INET6_ESP is not set
# CONFIG_INET6_IPCOMP is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
# CONFIG_INET6_TUNNEL is not set
# CONFIG_IPV6_TUNNEL is not set
CONFIG_NETFILTER=y
@@ -356,6 +363,7 @@ CONFIG_IP_NF_IRC=m
# CONFIG_IP_NF_TFTP is not set
# CONFIG_IP_NF_AMANDA is not set
# CONFIG_IP_NF_PPTP is not set
+# CONFIG_IP_NF_H323 is not set
# CONFIG_IP_NF_QUEUE is not set
#
@@ -386,6 +394,7 @@ CONFIG_IP_NF_IRC=m
CONFIG_BRIDGE=m
# CONFIG_VLAN_8021Q is not set
# CONFIG_DECNET is not set
+CONFIG_LLC=m
# CONFIG_LLC2 is not set
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
@@ -470,6 +479,7 @@ CONFIG_BT_HCIUART_BCSP=y
# CONFIG_BT_HCIBTUART is not set
# CONFIG_BT_HCIVHCI is not set
# CONFIG_IEEE80211 is not set
+CONFIG_WIRELESS_EXT=y
#
# Device Drivers
@@ -556,7 +566,6 @@ CONFIG_MTD_XIP=y
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_PHRAM is not set
# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLKMTD is not set
# CONFIG_MTD_BLOCK2MTD is not set
#
@@ -684,6 +693,7 @@ CONFIG_NETDEVICES=y
# Wireless LAN (non-hamradio)
#
CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
#
# Obsolete Wireless cards support (pre-802.11)
@@ -823,9 +833,7 @@ CONFIG_I2C_PXA=y
# CONFIG_SENSORS_PCA9539 is not set
# CONFIG_SENSORS_PCA9535 is not set
# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_RTC8564 is not set
# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_RTC_X1205_I2C is not set
# CONFIG_I2C_DEBUG_CORE is not set
# CONFIG_I2C_DEBUG_ALGO is not set
# CONFIG_I2C_DEBUG_BUS is not set
@@ -884,6 +892,7 @@ CONFIG_SPI_MASTER=y
# SPI Master Controller Drivers
#
# CONFIG_SPI_BITBANG is not set
+# CONFIG_SPI_PXA2XX is not set
#
# SPI Protocol Masters
@@ -956,13 +965,23 @@ CONFIG_BATTERY_MONITOR=y
# CONFIG_MCP is not set
#
-# Multimedia Capabilities Port drivers
+# 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
@@ -977,6 +996,7 @@ 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=y
# CONFIG_FB_IMAGEON is not set
@@ -1013,6 +1033,7 @@ CONFIG_BACKLIGHT_CLASS_DEVICE=y
CONFIG_BACKLIGHT_DEVICE=y
CONFIG_LCD_CLASS_DEVICE=y
CONFIG_LCD_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
#
# Sound
@@ -1029,11 +1050,14 @@ CONFIG_SND_PCM=y
CONFIG_SND_OSSEMUL=y
CONFIG_SND_MIXER_OSS=y
CONFIG_SND_PCM_OSS=y
+CONFIG_SND_PCM_OSS_PLUGINS=y
# CONFIG_SND_DYNAMIC_MINORS is not set
# CONFIG_SND_SUPPORT_OLD_API is not set
+CONFIG_SND_VERBOSE_PROCFS=y
CONFIG_SND_VERBOSE_PRINTK=y
CONFIG_SND_DEBUG=y
CONFIG_SND_DEBUG_DETECT=y
+# CONFIG_SND_PCM_XRUN_DEBUG is not set
#
# Generic devices
@@ -1049,18 +1073,20 @@ CONFIG_SND_DEBUG_DETECT=y
# CONFIG_SND_A716 is not set
# CONFIG_SND_H1910 is not set
# CONFIG_SND_H2200 is not set
-CONFIG_SND_H4000=y
+CONFIG_SND_H4000=m
# CONFIG_SND_HTCMAGICIAN is not set
# CONFIG_SND_HX4700 is not set
# CONFIG_SND_HTCUNIVERSAL is not set
# CONFIG_SND_H5XXX_AK4535 is not set
-CONFIG_SND_PXA2xx_I2SOUND=y
+CONFIG_SND_PXA2xx_I2SOUND=m
# CONFIG_SND_PXA2XX_AC97 is not set
#
# PCMCIA devices
#
-CONFIG_SND_UDA1380=y
+# CONFIG_SND_VXPOCKET is not set
+# CONFIG_SND_PDAUDIOCF is not set
+CONFIG_SND_UDA1380=m
#
# Open Sound System
@@ -1072,6 +1098,7 @@ CONFIG_SND_UDA1380=y
#
CONFIG_USB_ARCH_HAS_HCD=y
# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
# CONFIG_USB is not set
#
@@ -1093,6 +1120,7 @@ CONFIG_USB_PXA2XX=y
# CONFIG_USB_GADGET_MQ11XX is not set
# CONFIG_USB_GADGET_LH7A40X is not set
# CONFIG_USB_GADGET_OMAP 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
@@ -1115,9 +1143,10 @@ CONFIG_MMC_BLOCK=y
CONFIG_MMC_ASIC3=y
#
-# LED devices
+# Real Time Clock
#
-CONFIG_CLASS_LEDS=y
+CONFIG_RTC_LIB=y
+# CONFIG_RTC_CLASS is not set
#
# File systems
@@ -1164,7 +1193,6 @@ CONFIG_SYSFS=y
CONFIG_TMPFS=y
# CONFIG_HUGETLB_PAGE is not set
CONFIG_RAMFS=y
-# CONFIG_RELAYFS_FS is not set
# CONFIG_CONFIGFS_FS is not set
#
@@ -1291,6 +1319,7 @@ CONFIG_DEBUG_MUTEXES=y
# CONFIG_DEBUG_FS is not set
CONFIG_DEBUG_VM=y
CONFIG_FRAME_POINTER=y
+# CONFIG_UNWIND_INFO is not set
CONFIG_FORCED_INLINING=y
# CONFIG_RCU_TORTURE_TEST is not set
CONFIG_DEBUG_USER=y
diff --git a/packages/linux/linux-handhelds-2.6/hx4700/defconfig b/packages/linux/linux-handhelds-2.6/hx4700/defconfig
index 7fadc7ae3a..c09283ff03 100644
--- a/packages/linux/linux-handhelds-2.6/hx4700/defconfig
+++ b/packages/linux/linux-handhelds-2.6/hx4700/defconfig
@@ -1,13 +1,15 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.16-hh5
-# Thu Aug 10 16:39:20 2006
+# Linux kernel version: 2.6.17-hh2
+# Fri Oct 27 01:20:19 2006
#
CONFIG_ARM=y
CONFIG_MMU=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_ARCH_MTD_XIP=y
+CONFIG_VECTORS_BASE=0xffff0000
#
# Code maturity level options
@@ -31,6 +33,7 @@ CONFIG_SYSCTL=y
CONFIG_IKCONFIG=y
# CONFIG_MINIMAL_OOPS is not set
CONFIG_IKCONFIG_PROC=y
+# CONFIG_RELAY is not set
CONFIG_INITRAMFS_SOURCE=""
CONFIG_UID16=y
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
@@ -48,10 +51,6 @@ CONFIG_EPOLL=y
CONFIG_SHMEM=y
# CONFIG_USELIB is not set
CONFIG_CORE_DUMP=y
-CONFIG_CC_ALIGN_FUNCTIONS=0
-CONFIG_CC_ALIGN_LABELS=0
-CONFIG_CC_ALIGN_LOOPS=0
-CONFIG_CC_ALIGN_JUMPS=0
CONFIG_SLAB=y
# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
@@ -64,7 +63,6 @@ CONFIG_OBSOLETE_INTERMODULE=y
CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_OBSOLETE_MODPARM=y
# CONFIG_MODVERSIONS is not set
# CONFIG_MODULE_SRCVERSION_ALL is not set
CONFIG_KMOD=y
@@ -72,6 +70,7 @@ CONFIG_KMOD=y
#
# Block layer
#
+# CONFIG_BLK_DEV_IO_TRACE is not set
#
# IO Schedulers
@@ -93,11 +92,13 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
# 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=y
# CONFIG_ARCH_RPC is not set
@@ -117,6 +118,7 @@ CONFIG_ARCH_PXA=y
# Intel PXA2xx Implementations
#
# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
# CONFIG_MACH_MAINSTONE is not set
# CONFIG_ARCH_PXA_IDP is not set
# CONFIG_ARCH_ESERIES is not set
@@ -124,7 +126,7 @@ CONFIG_ARCH_PXA=y
# CONFIG_MACH_A716 is not set
# CONFIG_ARCH_H1900 is not set
# CONFIG_ARCH_H2200 is not set
-# CONFIG_ARCH_H3900 is not set
+# CONFIG_MACH_H3900 is not set
# CONFIG_MACH_H4000 is not set
CONFIG_MACH_H4700=y
CONFIG_HX4700_NAVPOINT=y
@@ -143,6 +145,7 @@ CONFIG_HX4700_LEDS=y
# CONFIG_MACH_HTCAPACHE is not set
# CONFIG_MACH_BLUEANGEL is not set
# CONFIG_MACH_HTCBEETLES is not set
+# CONFIG_MACH_HW6900 is not set
# CONFIG_ARCH_AXIMX5 is not set
# CONFIG_ARCH_AXIMX3 is not set
# CONFIG_MACH_X30 is not set
@@ -224,6 +227,7 @@ CONFIG_PCMCIA_PXA2XX=y
#
CONFIG_PREEMPT=y
# CONFIG_NO_IDLE_HZ is not set
+CONFIG_HZ=100
CONFIG_AEABI=y
CONFIG_OABI_COMPAT=y
# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
@@ -318,6 +322,7 @@ 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
@@ -330,9 +335,11 @@ CONFIG_TCP_CONG_BIC=y
# CONFIG_IP_VS is not set
CONFIG_IPV6=m
CONFIG_IPV6_PRIVACY=y
+# 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=y
@@ -359,6 +366,7 @@ CONFIG_IP_NF_IRC=m
# CONFIG_IP_NF_TFTP is not set
# CONFIG_IP_NF_AMANDA is not set
# CONFIG_IP_NF_PPTP is not set
+# CONFIG_IP_NF_H323 is not set
# CONFIG_IP_NF_QUEUE is not set
#
@@ -389,6 +397,7 @@ CONFIG_IP_NF_IRC=m
CONFIG_BRIDGE=m
# CONFIG_VLAN_8021Q is not set
# CONFIG_DECNET is not set
+CONFIG_LLC=m
# CONFIG_LLC2 is not set
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
@@ -485,6 +494,8 @@ CONFIG_IEEE80211=y
CONFIG_IEEE80211_CRYPT_WEP=y
CONFIG_IEEE80211_CRYPT_CCMP=y
CONFIG_IEEE80211_CRYPT_TKIP=y
+# CONFIG_IEEE80211_SOFTMAC is not set
+CONFIG_WIRELESS_EXT=y
#
# Device Drivers
@@ -572,7 +583,6 @@ CONFIG_MTD_CFI_UTIL=y
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_PHRAM is not set
# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_BLKMTD is not set
# CONFIG_MTD_BLOCK2MTD is not set
#
@@ -612,6 +622,7 @@ CONFIG_BLK_DEV_NBD=m
CONFIG_BLK_DEV_RAM=m
CONFIG_BLK_DEV_RAM_COUNT=16
CONFIG_BLK_DEV_RAM_SIZE=4096
+# CONFIG_BLK_DEV_INITRD is not set
CONFIG_CDROM_PKTCDVD=m
CONFIG_CDROM_PKTCDVD_BUFFERS=8
# CONFIG_CDROM_PKTCDVD_WCACHE is not set
@@ -746,6 +757,7 @@ CONFIG_MII=m
# Wireless LAN (non-hamradio)
#
CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
#
# Obsolete Wireless cards support (pre-802.11)
@@ -925,9 +937,7 @@ CONFIG_I2C_PXA=m
# CONFIG_SENSORS_PCA9539 is not set
# CONFIG_SENSORS_PCA9535 is not set
# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_RTC8564 is not set
# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_RTC_X1205_I2C is not set
# CONFIG_I2C_DEBUG_CORE is not set
# CONFIG_I2C_DEBUG_ALGO is not set
# CONFIG_I2C_DEBUG_BUS is not set
@@ -997,10 +1007,20 @@ CONFIG_SA1100_RTC=y
# Dallas's 1-wire bus
#
CONFIG_W1=y
-# CONFIG_W1_DS9490 is not set
-# CONFIG_W1_THERM is not set
-# CONFIG_W1_SMEM is not set
-# CONFIG_W1_DS2433 is not set
+
+#
+# 1-wire Bus Masters
+#
+# CONFIG_W1_MASTER_DS9490 is not set
+# CONFIG_W1_MASTER_DS2482 is not set
+# CONFIG_W1_DS1WM is not set
+
+#
+# 1-wire Slaves
+#
+# CONFIG_W1_SLAVE_THERM is not set
+# CONFIG_W1_SLAVE_SMEM is not set
+# CONFIG_W1_SLAVE_DS2433 is not set
CONFIG_W1_DS2760=y
#
@@ -1065,30 +1085,71 @@ CONFIG_BATTERY_MONITOR=y
# CONFIG_MCP is not set
#
-# Multimedia Capabilities Port drivers
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
#
#
# Multimedia devices
#
CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L1=y
+CONFIG_VIDEO_V4L1_COMPAT=y
+CONFIG_VIDEO_V4L2=y
#
-# Video For Linux
+# Video Capture Adapters
#
#
-# Video Adapters
+# Video Capture Adapters
#
# CONFIG_VIDEO_ADV_DEBUG is not set
+# CONFIG_VIDEO_VIVI is not set
# CONFIG_VIDEO_CPIA is not set
+# CONFIG_VIDEO_CPIA2 is not set
# CONFIG_VIDEO_SAA5246A is not set
# CONFIG_VIDEO_SAA5249 is not set
# CONFIG_TUNER_3036 is not set
-# CONFIG_VIDEO_EM28XX is not set
# CONFIG_VIDEO_OVCAMCHIP is not set
-# CONFIG_VIDEO_AUDIO_DECODER is not set
-# CONFIG_VIDEO_DECODER is not set
+
+#
+# Encoders and Decoders
+#
+# CONFIG_VIDEO_MSP3400 is not set
+# CONFIG_VIDEO_CS53L32A is not set
+# CONFIG_VIDEO_WM8775 is not set
+# CONFIG_VIDEO_WM8739 is not set
+# CONFIG_VIDEO_CX25840 is not set
+# CONFIG_VIDEO_SAA711X is not set
+# CONFIG_VIDEO_SAA7127 is not set
+# CONFIG_VIDEO_UPD64031A is not set
+# CONFIG_VIDEO_UPD64083 is not set
+
+#
+# V4L USB devices
+#
+# CONFIG_VIDEO_EM28XX is not set
+# CONFIG_USB_DSBR is not set
+# CONFIG_USB_VICAM is not set
+# CONFIG_USB_IBMCAM is not set
+# CONFIG_USB_KONICAWC is not set
+# CONFIG_USB_ET61X251 is not set
+# CONFIG_USB_OV511 is not set
+# CONFIG_USB_SE401 is not set
+CONFIG_USB_SN9C102=m
+# CONFIG_USB_STV680 is not set
+# CONFIG_USB_W9968CF is not set
+# CONFIG_USB_ZC0301 is not set
+# CONFIG_USB_PWC is not set
#
# Radio Adapters
@@ -1099,6 +1160,7 @@ CONFIG_VIDEO_DEV=m
# Digital Video Broadcasting Devices
#
# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
#
# Graphics support
@@ -1108,6 +1170,7 @@ 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_IMAGEON is not set
@@ -1147,6 +1210,7 @@ CONFIG_BACKLIGHT_CLASS_DEVICE=y
CONFIG_BACKLIGHT_DEVICE=y
CONFIG_LCD_CLASS_DEVICE=y
CONFIG_LCD_DEVICE=y
+CONFIG_BACKLIGHT_CORGI=y
#
# Sound
@@ -1163,8 +1227,10 @@ CONFIG_SND_PCM=m
CONFIG_SND_OSSEMUL=y
CONFIG_SND_MIXER_OSS=m
CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
CONFIG_SND_DYNAMIC_MINORS=y
CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
# CONFIG_SND_VERBOSE_PRINTK is not set
# CONFIG_SND_DEBUG is not set
@@ -1182,6 +1248,7 @@ CONFIG_SND_SUPPORT_OLD_API=y
# CONFIG_SND_A716 is not set
# CONFIG_SND_H1910 is not set
# CONFIG_SND_H2200 is not set
+# CONFIG_SND_H4000 is not set
# CONFIG_SND_HTCMAGICIAN is not set
CONFIG_SND_HX4700=m
# CONFIG_SND_HTCUNIVERSAL is not set
@@ -1197,6 +1264,8 @@ CONFIG_SND_PXA2xx_I2SOUND=m
#
# PCMCIA devices
#
+# CONFIG_SND_VXPOCKET is not set
+# CONFIG_SND_PDAUDIOCF is not set
CONFIG_SND_AK4641=m
#
@@ -1209,6 +1278,7 @@ CONFIG_SND_AK4641=m
#
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
@@ -1234,7 +1304,6 @@ CONFIG_USB_SL811_CS=m
#
# USB Device Class drivers
#
-# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
# CONFIG_USB_ACM is not set
CONFIG_USB_PRINTER=m
@@ -1277,9 +1346,7 @@ CONFIG_USB_MOUSE=m
# CONFIG_USB_ACECAD is not set
# CONFIG_USB_KBTAB is not set
# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_MTOUCH is not set
-# CONFIG_USB_ITMTOUCH is not set
-# CONFIG_USB_EGALAX 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
@@ -1294,21 +1361,6 @@ CONFIG_USB_MOUSE=m
# CONFIG_USB_MICROTEK is not set
#
-# USB Multimedia devices
-#
-# CONFIG_USB_DABUSB is not set
-# CONFIG_USB_VICAM is not set
-# CONFIG_USB_DSBR is not set
-# CONFIG_USB_ET61X251 is not set
-# CONFIG_USB_IBMCAM is not set
-# CONFIG_USB_KONICAWC is not set
-# CONFIG_USB_OV511 is not set
-# CONFIG_USB_SE401 is not set
-CONFIG_USB_SN9C102=m
-# CONFIG_USB_STV680 is not set
-# CONFIG_USB_PWC is not set
-
-#
# USB Network Adapters
#
CONFIG_USB_CATC=m
@@ -1375,6 +1427,7 @@ CONFIG_USB_PXA27X=m
# CONFIG_USB_GADGET_MQ11XX is not set
# CONFIG_USB_GADGET_LH7A40X is not set
# CONFIG_USB_GADGET_OMAP 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
@@ -1398,9 +1451,10 @@ CONFIG_MMC_BLOCK=y
CONFIG_MMC_ASIC3=y
#
-# LED devices
+# Real Time Clock
#
-CONFIG_CLASS_LEDS=y
+CONFIG_RTC_LIB=y
+# CONFIG_RTC_CLASS is not set
#
# File systems
@@ -1472,7 +1526,6 @@ CONFIG_SYSFS=y
CONFIG_TMPFS=y
# CONFIG_HUGETLB_PAGE is not set
CONFIG_RAMFS=y
-CONFIG_RELAYFS_FS=m
CONFIG_CONFIGFS_FS=m
#
@@ -1630,6 +1683,7 @@ CONFIG_DEBUG_MUTEXES=y
# CONFIG_DEBUG_FS is not set
# CONFIG_DEBUG_VM is not set
CONFIG_FRAME_POINTER=y
+# CONFIG_UNWIND_INFO is not set
CONFIG_FORCED_INLINING=y
# CONFIG_RCU_TORTURE_TEST is not set
# CONFIG_DEBUG_USER is not set
diff --git a/packages/linux/linux-handhelds-2.6_2.6.16-hh5.bb b/packages/linux/linux-handhelds-2.6_2.6.16-hh5.bb
index 77cebae039..2ffcc472d4 100644
--- a/packages/linux/linux-handhelds-2.6_2.6.16-hh5.bb
+++ b/packages/linux/linux-handhelds-2.6_2.6.16-hh5.bb
@@ -3,4 +3,6 @@ DESCRIPTION = "handhelds.org Linux kernel for PXA based devices."
LICENSE = "GPL"
PR = "r1"
+FILESPATH = "${FILE_DIRNAME}/linux-handhelds-2.6-2.6.16/${MACHINE}:${FILE_DIRNAME}/linux-handhelds-2.6-2.6.16"
+
require linux-handhelds-2.6.inc
diff --git a/packages/linux/linux-handhelds-2.6_2.6.16-hh7.bb b/packages/linux/linux-handhelds-2.6_2.6.16-hh7.bb
index 3e90563db8..0f1556afaa 100644
--- a/packages/linux/linux-handhelds-2.6_2.6.16-hh7.bb
+++ b/packages/linux/linux-handhelds-2.6_2.6.16-hh7.bb
@@ -1,8 +1,8 @@
SECTION = "kernel"
-DESCRIPTION = "handhelds.org Linux kernel for PXA based devices."
+DESCRIPTION = "handhelds.org Linux kernel 2.6 for PocketPCs and other consumer handheld devices."
LICENSE = "GPL"
-PR = "r1"
+PR = "r2"
-DEFAULT_PREFERENCE = "-1"
+FILESPATH = "${FILE_DIRNAME}/linux-handhelds-2.6-2.6.16/${MACHINE}:${FILE_DIRNAME}/linux-handhelds-2.6-2.6.16"
require linux-handhelds-2.6.inc
diff --git a/packages/linux/linux-handhelds-2.6_2.6.17-hh2.bb b/packages/linux/linux-handhelds-2.6_2.6.17-hh2.bb
new file mode 100644
index 0000000000..5f7f88bc21
--- /dev/null
+++ b/packages/linux/linux-handhelds-2.6_2.6.17-hh2.bb
@@ -0,0 +1,8 @@
+SECTION = "kernel"
+DESCRIPTION = "handhelds.org Linux kernel 2.6 for PocketPCs and other consumer handheld devices."
+LICENSE = "GPL"
+PR = "r0"
+
+DEFAULT_PREFERENCE = "-1"
+
+require linux-handhelds-2.6.inc
diff --git a/packages/linux/linux-jlime-jornada6xx-2.6.17/defconfig_jlime b/packages/linux/linux-jlime-jornada6xx-2.6.17/defconfig_jlime
index 4572f7cf9a..05a0c598a8 100644
--- a/packages/linux/linux-jlime-jornada6xx-2.6.17/defconfig_jlime
+++ b/packages/linux/linux-jlime-jornada6xx-2.6.17/defconfig_jlime
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.17
-# Sun Aug 13 16:30:04 2006
+# Sat Oct 21 22:36:16 2006
#
CONFIG_SUPERH=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
@@ -25,14 +25,14 @@ CONFIG_LOCALVERSION=""
CONFIG_LOCALVERSION_AUTO=y
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
-# CONFIG_POSIX_MQUEUE is not set
+CONFIG_POSIX_MQUEUE=y
CONFIG_BSD_PROCESS_ACCT=y
# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-# CONFIG_SYSCTL is not set
+CONFIG_SYSCTL=y
# CONFIG_AUDIT is not set
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
-# CONFIG_RELAY is not set
+CONFIG_RELAY=y
CONFIG_INITRAMFS_SOURCE=""
CONFIG_UID16=y
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
@@ -57,7 +57,7 @@ CONFIG_BASE_SMALL=0
#
CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y
-# CONFIG_MODULE_FORCE_UNLOAD is not set
+CONFIG_MODULE_FORCE_UNLOAD=y
# CONFIG_MODVERSIONS is not set
# CONFIG_MODULE_SRCVERSION_ALL is not set
CONFIG_KMOD=y
@@ -248,7 +248,7 @@ CONFIG_PCCARD=y
# CONFIG_PCMCIA_DEBUG is not set
CONFIG_PCMCIA=y
CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
+# CONFIG_PCMCIA_IOCTL is not set
#
# PC-card bridges
@@ -358,8 +358,8 @@ CONFIG_IRDA=m
#
# IrDA protocols
#
-# CONFIG_IRLAN is not set
-# CONFIG_IRNET is not set
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
# CONFIG_IRCOMM is not set
# CONFIG_IRDA_ULTRA is not set
@@ -402,17 +402,19 @@ CONFIG_BT=m
#
# Bluetooth device drivers
#
-# CONFIG_BT_HCIUART is not set
-# CONFIG_BT_HCIDTL1 is not set
-# CONFIG_BT_HCIBT3C is not set
-# CONFIG_BT_HCIBLUECARD is not set
-# CONFIG_BT_HCIBTUART is not set
+CONFIG_BT_HCIUART=m
+# CONFIG_BT_HCIUART_H4 is not set
+# CONFIG_BT_HCIUART_BCSP is not set
+CONFIG_BT_HCIDTL1=m
+CONFIG_BT_HCIBT3C=m
+CONFIG_BT_HCIBLUECARD=m
+CONFIG_BT_HCIBTUART=m
# CONFIG_BT_HCIVHCI is not set
CONFIG_IEEE80211=y
# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=y
+CONFIG_IEEE80211_CRYPT_WEP=m
CONFIG_IEEE80211_CRYPT_CCMP=m
-# CONFIG_IEEE80211_CRYPT_TKIP is not set
+CONFIG_IEEE80211_CRYPT_TKIP=m
CONFIG_IEEE80211_SOFTMAC=m
# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
CONFIG_WIRELESS_EXT=y
@@ -425,7 +427,7 @@ CONFIG_WIRELESS_EXT=y
# Generic Driver Options
#
CONFIG_STANDALONE=y
-# CONFIG_PREVENT_FIRMWARE_BUILD is not set
+CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=y
#
@@ -586,7 +588,7 @@ CONFIG_NET_WIRELESS_RTNETLINK=y
# Obsolete Wireless cards support (pre-802.11)
#
# CONFIG_STRIP is not set
-# CONFIG_ARLAN is not set
+CONFIG_ARLAN=m
CONFIG_WAVELAN=m
CONFIG_PCMCIA_WAVELAN=m
CONFIG_PCMCIA_NETWAVE=m
@@ -729,7 +731,7 @@ CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_UNIX98_PTYS=y
CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=8
+CONFIG_LEGACY_PTY_COUNT=5
#
# IPMI
@@ -954,7 +956,7 @@ CONFIG_FS_MBCACHE=y
CONFIG_INOTIFY=y
# CONFIG_QUOTA is not set
CONFIG_DNOTIFY=y
-# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS_FS=y
# CONFIG_AUTOFS4_FS is not set
# CONFIG_FUSE_FS is not set
@@ -980,7 +982,7 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
CONFIG_PROC_FS=y
CONFIG_PROC_KCORE=y
CONFIG_SYSFS=y
-# CONFIG_TMPFS is not set
+CONFIG_TMPFS=y
# CONFIG_HUGETLBFS is not set
# CONFIG_HUGETLB_PAGE is not set
CONFIG_RAMFS=y
@@ -1120,8 +1122,8 @@ CONFIG_LOG_BUF_SHIFT=14
CONFIG_CRYPTO=y
# CONFIG_CRYPTO_HMAC is not set
# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=m
CONFIG_CRYPTO_SHA1=m
# CONFIG_CRYPTO_SHA256 is not set
# CONFIG_CRYPTO_SHA512 is not set
@@ -1139,7 +1141,7 @@ CONFIG_CRYPTO_ARC4=y
# CONFIG_CRYPTO_KHAZAD is not set
# CONFIG_CRYPTO_ANUBIS is not set
# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
+CONFIG_CRYPTO_MICHAEL_MIC=m
# CONFIG_CRYPTO_CRC32C is not set
# CONFIG_CRYPTO_TEST is not set
diff --git a/packages/net-tools/.mtn2git_empty b/packages/net-tools/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/net-tools/.mtn2git_empty
diff --git a/packages/net-tools/files/.mtn2git_empty b/packages/net-tools/files/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/packages/net-tools/files/.mtn2git_empty
diff --git a/packages/net-tools/files/README b/packages/net-tools/files/README
new file mode 100644
index 0000000000..76e14a2341
--- /dev/null
+++ b/packages/net-tools/files/README
@@ -0,0 +1 @@
+Patches were downloaded from http://ftp.uni-koeln.de/mirrors/fedora/linux/core/5/source/SRPMS/net-tools-1.60-62.1.src.rpm
diff --git a/packages/net-tools/files/ether-wake.8 b/packages/net-tools/files/ether-wake.8
new file mode 100644
index 0000000000..26b4f85a8a
--- /dev/null
+++ b/packages/net-tools/files/ether-wake.8
@@ -0,0 +1,81 @@
+.\" Hey, EMACS: -*- nroff -*-
+.\" First parameter, NAME, should be all caps
+.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
+.\" other parameters are allowed: see man(7), man(1)
+.TH ETHER-WAKE 8 "March 31, 2003" "Scyld"
+.\" Please adjust this date whenever revising the manpage.
+.\"
+.\" Some roff macros, for reference:
+.\" .nh disable hyphenation
+.\" .hy enable hyphenation
+.\" .ad l left justify
+.\" .ad b justify to both left and right margins
+.\" .nf disable filling
+.\" .fi enable filling
+.\" .br insert line break
+.\" .sp <n> insert n+1 empty lines
+.\" for manpage-specific macros, see man(7)
+.SH NAME
+ether-wake \- A tool to send a Wake-On-LAN "Magic Packet"
+.SH SYNOPSIS
+.B ether-wake
+.RI [ options ] " Host-ID"
+.SH DESCRIPTION
+This manual page documents the usage of the
+.B ether-wake
+command.
+.PP
+.\" TeX users may be more comfortable with the \fB<whatever>\fP and
+.\" \fI<whatever>\fP escape sequences to invode bold face and italics,
+.\" respectively.
+\fBether-wake\fP is a program that generates and transmits a Wake-On-LAN
+(WOL) "Magic Packet", used for restarting machines that have been
+soft-powered-down (ACPI D3-warm state). It generates the standard
+AMD Magic Packet format, optionally with a password included. The
+single required parameter is a station (MAC) address or a host ID that can
+be translated to a MAC address by an
+.BR ethers (5)
+database specified in
+.BR nsswitch.conf (5)
+.
+.SH OPTIONS
+\fBether-wake\fP needs a single dash (´-´) in front of options.
+A summary of options is included below.
+.TP
+.B \-b
+Send the wake-up packet to the broadcast address.
+.TP
+.B \-D
+Increase the Debug Level.
+.TP
+.B \-i ifname
+Use interface ifname instead of the default "eth0".
+.TP
+.B \-p passwd
+Append a four or six byte password to the packet. Only a few adapters
+need or support this. A six byte password may be specified in Ethernet hex
+format (00:22:44:66:88:aa) or four byte dotted decimal (192.168.1.1) format.
+A four byte password must use the dotted decimal format.
+
+.TP
+.B \-V
+Show the program version information.
+
+.SH EXIT STATUS
+This program returns 0 on success.
+A permission failures (e.g. run as a non-root user) results in an exit
+status of 2. Unrecognized or invalid parameters result in an exit
+status of 3. Failure to retrieve network interface information or send
+a packet will result in an exit status of 1.
+
+.SH SEE ALSO
+.BR arp (8).
+.br
+.SH SECURITY
+On some non-Linux systems dropping root capability allows the process to be
+dumped, traced or debugged.
+If someone traces this program, they get control of a raw socket.
+Linux handles this safely, but beware when porting this program.
+.SH AUTHOR
+The etherwake program was written by Donald Becker at Scyld Computing
+Corporation for use with the Scyld(\*(Tm) Beowulf System.
diff --git a/packages/net-tools/files/ether-wake.c b/packages/net-tools/files/ether-wake.c
new file mode 100644
index 0000000000..eef22a7ab2
--- /dev/null
+++ b/packages/net-tools/files/ether-wake.c
@@ -0,0 +1,392 @@
+/* ether-wake.c: Send a magic packet to wake up sleeping machines. */
+
+static char version_msg[] =
+"ether-wake.c: v1.09 11/12/2003 Donald Becker, http://www.scyld.com/";
+static char brief_usage_msg[] =
+"usage: ether-wake [-i <ifname>] [-p aa:bb:cc:dd[:ee:ff]] 00:11:22:33:44:55\n"
+" Use '-u' to see the complete set of options.\n";
+static char usage_msg[] =
+"usage: ether-wake [-i <ifname>] [-p aa:bb:cc:dd[:ee:ff]] 00:11:22:33:44:55\n"
+"\n"
+" This program generates and transmits a Wake-On-LAN (WOL)\n"
+" \"Magic Packet\", used for restarting machines that have been\n"
+" soft-powered-down (ACPI D3-warm state).\n"
+" It currently generates the standard AMD Magic Packet format, with\n"
+" an optional password appended.\n"
+"\n"
+" The single required parameter is the Ethernet MAC (station) address\n"
+" of the machine to wake or a host ID with known NSS 'ethers' entry.\n"
+" The MAC address may be found with the 'arp' program while the target\n"
+" machine is awake.\n"
+"\n"
+" Options:\n"
+" -b Send wake-up packet to the broadcast address.\n"
+" -D Increase the debug level.\n"
+" -i ifname Use interface IFNAME instead of the default 'eth0'.\n"
+" -p <pw> Append the four or six byte password PW to the packet.\n"
+" A password is only required for a few adapter types.\n"
+" The password may be specified in ethernet hex format\n"
+" or dotted decimal (Internet address)\n"
+" -p 00:22:44:66:88:aa\n"
+" -p 192.168.1.1\n";
+
+/*
+ This program generates and transmits a Wake-On-LAN (WOL) "Magic Packet",
+ used for restarting machines that have been soft-powered-down
+ (ACPI D3-warm state). It currently generates the standard AMD Magic Packet
+ format, with an optional password appended.
+
+ This software may be used and distributed according to the terms
+ of the GNU Public License, incorporated herein by reference.
+ Contact the author for use under other terms.
+
+ This source file was originally part of the network tricks package, and
+ is now distributed to support the Scyld Beowulf system.
+ Copyright 1999-2003 Donald Becker and Scyld Computing Corporation.
+
+ The author may be reached as becker@scyld, or C/O
+ Scyld Computing Corporation
+ 914 Bay Ridge Road, Suite 220
+ Annapolis MD 21403
+
+ Notes:
+ On some systems dropping root capability allows the process to be
+ dumped, traced or debugged.
+ If someone traces this program, they get control of a raw socket.
+ Linux handles this safely, but beware when porting this program.
+
+ An alternative to needing 'root' is using a UDP broadcast socket, however
+ doing so only works with adapters configured for unicast+broadcast Rx
+ filter. That configuration consumes more power.
+*/
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <errno.h>
+#include <ctype.h>
+#include <string.h>
+
+#if 0 /* Only exists on some versions. */
+#include <ioctls.h>
+#endif
+
+#include <sys/socket.h>
+
+#include <sys/types.h>
+#include <sys/ioctl.h>
+#include <linux/if.h>
+
+#include <features.h>
+#if __GLIBC__ >= 2 && __GLIBC_MINOR >= 1
+#include <netpacket/packet.h>
+#include <net/ethernet.h>
+#else
+#include <asm/types.h>
+#include <linux/if_packet.h>
+#include <linux/if_ether.h>
+#endif
+#include <netdb.h>
+#include <netinet/ether.h>
+
+/* Grrr, no consistency between include versions.
+ Enable this if setsockopt() isn't declared with your library. */
+#if 0
+extern int setsockopt __P ((int __fd, int __level, int __optname,
+ __ptr_t __optval, int __optlen));
+#else /* New, correct head files. */
+#include <sys/socket.h>
+#endif
+
+u_char outpack[1000];
+int outpack_sz = 0;
+int debug = 0;
+u_char wol_passwd[6];
+int wol_passwd_sz = 0;
+
+static int opt_no_src_addr = 0, opt_broadcast = 0;
+
+static int get_dest_addr(const char *arg, struct ether_addr *eaddr);
+static int get_fill(unsigned char *pkt, struct ether_addr *eaddr);
+static int get_wol_pw(const char *optarg);
+
+int main(int argc, char *argv[])
+{
+ char *ifname = "eth0";
+ int one = 1; /* True, for socket options. */
+ int s; /* Raw socket */
+ int errflag = 0, verbose = 0, do_version = 0;
+ int perm_failure = 0;
+ int i, c, pktsize;
+#if defined(PF_PACKET)
+ struct sockaddr_ll whereto;
+#else
+ struct sockaddr whereto; /* who to wake up */
+#endif
+ struct ether_addr eaddr;
+
+ while ((c = getopt(argc, argv, "bDi:p:uvV")) != -1)
+ switch (c) {
+ case 'b': opt_broadcast++; break;
+ case 'D': debug++; break;
+ case 'i': ifname = optarg; break;
+ case 'p': get_wol_pw(optarg); break;
+ case 'u': printf(usage_msg); return 0;
+ case 'v': verbose++; break;
+ case 'V': do_version++; break;
+ case '?':
+ errflag++;
+ }
+ if (verbose || do_version)
+ printf("%s\n", version_msg);
+ if (errflag) {
+ fprintf(stderr, brief_usage_msg);
+ return 3;
+ }
+
+ if (optind == argc) {
+ fprintf(stderr, "Specify the Ethernet address as 00:11:22:33:44:55.\n");
+ return 3;
+ }
+
+ /* Note: PF_INET, SOCK_DGRAM, IPPROTO_UDP would allow SIOCGIFHWADDR to
+ work as non-root, but we need SOCK_PACKET to specify the Ethernet
+ destination address. */
+#if defined(PF_PACKET)
+ s = socket(PF_PACKET, SOCK_RAW, 0);
+#else
+ s = socket(AF_INET, SOCK_PACKET, SOCK_PACKET);
+#endif
+ if (s < 0) {
+ if (errno == EPERM)
+ fprintf(stderr, "ether-wake: This program must be run as root.\n");
+ else
+ perror("ether-wake: socket");
+ perm_failure++;
+ }
+ /* Don't revert if debugging allows a normal user to get the raw socket. */
+ setuid(getuid());
+
+ /* We look up the station address before reporting failure so that
+ errors may be reported even when run as a normal user.
+ */
+ if (get_dest_addr(argv[optind], &eaddr) != 0)
+ return 3;
+ if (perm_failure && ! debug)
+ return 2;
+
+ pktsize = get_fill(outpack, &eaddr);
+
+ /* Fill in the source address, if possible.
+ The code to retrieve the local station address is Linux specific. */
+ if (! opt_no_src_addr) {
+ struct ifreq if_hwaddr;
+ unsigned char *hwaddr = if_hwaddr.ifr_hwaddr.sa_data;
+
+ strcpy(if_hwaddr.ifr_name, ifname);
+ if (ioctl(s, SIOCGIFHWADDR, &if_hwaddr) < 0) {
+ fprintf(stderr, "SIOCGIFHWADDR on %s failed: %s\n", ifname,
+ strerror(errno));
+ /* Magic packets still work if our source address is bogus, but
+ we fail just to be anal. */
+ return 1;
+ }
+ memcpy(outpack+6, if_hwaddr.ifr_hwaddr.sa_data, 6);
+
+ if (verbose) {
+ printf("The hardware address (SIOCGIFHWADDR) of %s is type %d "
+ "%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x.\n", ifname,
+ if_hwaddr.ifr_hwaddr.sa_family, hwaddr[0], hwaddr[1],
+ hwaddr[2], hwaddr[3], hwaddr[4], hwaddr[5]);
+ }
+ }
+
+ if (wol_passwd_sz > 0) {
+ memcpy(outpack+pktsize, wol_passwd, wol_passwd_sz);
+ pktsize += wol_passwd_sz;
+ }
+
+ if (verbose > 1) {
+ printf("The final packet is: ");
+ for (i = 0; i < pktsize; i++)
+ printf(" %2.2x", outpack[i]);
+ printf(".\n");
+ }
+
+ /* This is necessary for broadcasts to work */
+ if (setsockopt(s, SOL_SOCKET, SO_BROADCAST, (char *)&one, sizeof(one)) < 0)
+ perror("setsockopt: SO_BROADCAST");
+
+#if defined(PF_PACKET)
+ {
+ struct ifreq ifr;
+ strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name));
+ if (ioctl(s, SIOCGIFINDEX, &ifr) == -1) {
+ fprintf(stderr, "SIOCGIFINDEX on %s failed: %s\n", ifname,
+ strerror(errno));
+ return 1;
+ }
+ memset(&whereto, 0, sizeof(whereto));
+ whereto.sll_family = AF_PACKET;
+ whereto.sll_ifindex = ifr.ifr_ifindex;
+ /* The manual page incorrectly claims the address must be filled.
+ We do so because the code may change to match the docs. */
+ whereto.sll_halen = ETH_ALEN;
+ memcpy(whereto.sll_addr, outpack, ETH_ALEN);
+
+ }
+#else
+ whereto.sa_family = 0;
+ strcpy(whereto.sa_data, ifname);
+#endif
+
+ if ((i = sendto(s, outpack, pktsize, 0, (struct sockaddr *)&whereto,
+ sizeof(whereto))) < 0)
+ perror("sendto");
+ else if (debug)
+ printf("Sendto worked ! %d.\n", i);
+
+#ifdef USE_SEND
+ if (bind(s, (struct sockaddr *)&whereto, sizeof(whereto)) < 0)
+ perror("bind");
+ else if (send(s, outpack, 100, 0) < 0)
+ perror("send");
+#endif
+#ifdef USE_SENDMSG
+ {
+ struct msghdr msghdr = { 0,};
+ struct iovec iovector[1];
+ msghdr.msg_name = &whereto;
+ msghdr.msg_namelen = sizeof(whereto);
+ msghdr.msg_iov = iovector;
+ msghdr.msg_iovlen = 1;
+ iovector[0].iov_base = outpack;
+ iovector[0].iov_len = pktsize;
+ if ((i = sendmsg(s, &msghdr, 0)) < 0)
+ perror("sendmsg");
+ else if (debug)
+ printf("sendmsg worked, %d (%d).\n", i, errno);
+ }
+#endif
+
+ return 0;
+}
+
+/* Convert the host ID string to a MAC address.
+ The string may be a
+ Host name
+ IP address string
+ MAC address string
+*/
+
+static int get_dest_addr(const char *hostid, struct ether_addr *eaddr)
+{
+ struct ether_addr *eap;
+
+ eap = ether_aton(hostid);
+ if (eap) {
+ *eaddr = *eap;
+ if (debug)
+ fprintf(stderr, "The target station address is %s.\n",
+ ether_ntoa(eaddr));
+ } else if (ether_hostton(hostid, eaddr) == 0) {
+ if (debug)
+ fprintf(stderr, "Station address for hostname %s is %s.\n",
+ hostid, ether_ntoa(eaddr));
+ } else {
+ (void)fprintf(stderr,
+ "ether-wake: The Magic Packet host address must be "
+ "specified as\n"
+ " - a station address, 00:11:22:33:44:55, or\n"
+ " - a hostname with a known 'ethers' entry.\n");
+ return -1;
+ }
+ return 0;
+}
+
+
+static int get_fill(unsigned char *pkt, struct ether_addr *eaddr)
+{
+ int offset, i;
+ unsigned char *station_addr = eaddr->ether_addr_octet;
+
+ if (opt_broadcast)
+ memset(pkt+0, 0xff, 6);
+ else
+ memcpy(pkt, station_addr, 6);
+ memcpy(pkt+6, station_addr, 6);
+ pkt[12] = 0x08; /* Or 0x0806 for ARP, 0x8035 for RARP */
+ pkt[13] = 0x42;
+ offset = 14;
+
+ memset(pkt+offset, 0xff, 6);
+ offset += 6;
+
+ for (i = 0; i < 16; i++) {
+ memcpy(pkt+offset, station_addr, 6);
+ offset += 6;
+ }
+ if (debug) {
+ fprintf(stderr, "Packet is ");
+ for (i = 0; i < offset; i++)
+ fprintf(stderr, " %2.2x", pkt[i]);
+ fprintf(stderr, ".\n");
+ }
+ return offset;
+}
+
+static int get_wol_pw(const char *optarg)
+{
+ int passwd[6];
+ int byte_cnt;
+ int i;
+
+ byte_cnt = sscanf(optarg, "%2x:%2x:%2x:%2x:%2x:%2x",
+ &passwd[0], &passwd[1], &passwd[2],
+ &passwd[3], &passwd[4], &passwd[5]);
+ if (byte_cnt < 4)
+ byte_cnt = sscanf(optarg, "%d.%d.%d.%d",
+ &passwd[0], &passwd[1], &passwd[2], &passwd[3]);
+ if (byte_cnt < 4) {
+ fprintf(stderr, "Unable to read the Wake-On-LAN password.\n");
+ return 0;
+ }
+ printf(" The Magic packet password is %2.2x %2.2x %2.2x %2.2x (%d).\n",
+ passwd[0], passwd[1], passwd[2], passwd[3], byte_cnt);
+ for (i = 0; i < byte_cnt; i++)
+ wol_passwd[i] = passwd[i];
+ return wol_passwd_sz = byte_cnt;
+}
+
+#if 0
+{
+ to = (struct sockaddr_in *)&whereto;
+ to->sin_family = AF_INET;
+ if (inet_aton(target, &to->sin_addr)) {
+ hostname = target;
+ }
+ memset (&sa, 0, sizeof sa);
+ sa.sa_family = AF_INET;
+ strncpy (sa.sa_data, interface, sizeof sa.sa_data);
+ sendto (sock, buf, bufix + len, 0, &sa, sizeof sa);
+ strncpy (sa.sa_data, interface, sizeof sa.sa_data);
+#if 1
+ sendto (sock, buf, bufix + len, 0, &sa, sizeof sa);
+#else
+ bind (sock, &sa, sizeof sa);
+ connect();
+ send (sock, buf, bufix + len, 0);
+#endif
+}
+#endif
+
+
+/*
+ * Local variables:
+ * compile-command: "gcc -O -Wall -o ether-wake ether-wake.c"
+ * c-indent-level: 4
+ * c-basic-offset: 4
+ * c-indent-level: 4
+ * tab-width: 4
+ * End:
+ */
diff --git a/packages/net-tools/files/mii-diag.8 b/packages/net-tools/files/mii-diag.8
new file mode 100644
index 0000000000..aa0dc0be15
--- /dev/null
+++ b/packages/net-tools/files/mii-diag.8
@@ -0,0 +1,160 @@
+.\" Hey, EMACS: -*- nroff -*-
+.\" $Revision: 1.1 $ $Date: 2003/09/06 17:20:17 $
+.\" First parameter, NAME, should be all caps
+.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
+.\" other parameters are allowed: see man(7), man(1)
+.TH MII-DIAG 8 "September 9, 2003" "Scyld Beowulf\*(Tm"
+.\" Please adjust this date whenever revising the manpage.
+.\"
+.\" Some roff macros, for reference:
+.\" .nh disable hyphenation
+.\" .hy enable hyphenation
+.\" .ad l left justify
+.\" .ad b justify to both left and right margins
+.\" .nf disable filling
+.\" .fi enable filling
+.\" .br insert line break
+.\" .sp <n> insert n+1 empty lines
+.\" for manpage-specific macros, see man(7)
+.SH NAME
+mii-diag \- Network adapter control and monitoring
+.SH SYNOPSIS
+.B mii-diag
+.RI [ options ] <interface>
+.SH DESCRIPTION
+This manual page documents briefly the
+.B mii-diag
+network adapter control and monitoring command.
+Addition documentation is available from http://scyld.com/diag/index.html.
+
+.\" TeX users may be more comfortable with the \fB<whatever>\fP and
+.\" \fI<whatever>\fP escape sequences to invoke bold face and italics,
+.\" respectively.
+.PP
+This \fBmii-diag\fP command configures, controls and monitors the
+transceiver management registers for network interfaces, and configures
+driver operational parameters. For transceiver control \fBmii-diag\fP
+uses the Media Independent Interface (MII) standard (thus the command name).
+It also has additional Linux-specific controls to communicate parameters
+such as message enable settings and buffer sizes to the underlying device
+driver.
+.PP
+The MII standard defines registers that control and report network
+transceiver capabilities, link settings and errors. Examples are link
+speed, duplex, capabilities advertised to the link partner, status LED
+indications and link error counters.
+
+.SH OPTIONS
+The \fBmii-diag\fP command supports both single character and long
+option names. Short options use a single dash (´-´) in front of the option
+character. For options without parameters, multiple options may be
+concatenated after a single dash. Long options are prefixed by two
+dashes (´--´), and may be abbreviated with a unique prefix.
+A long option may take a parameter of the form --arg=param or --arg param.
+
+.PP
+A summary of options is as follows.
+
+.TP
+.B \-A, --advertise <speed|setting>
+.BR
+.B \-F, --fixed-speed <speed|setting>
+
+Speed is one of: 100baseT4, 100baseTx, 100baseTx-FD, 100baseTx-HD, 10baseT,
+10baseT-FD, 10baseT-HD. For more precise control an explict numeric
+register setting is also allowed.
+
+
+.TP
+.B \-a, \--all-interfaces
+Show the status of all interfaces. This option is not recommended with
+any other option, especially ones that change settings.
+
+.TP
+.B \-s,\--status
+Return exit status 2 if there is no link beat.
+
+.TP
+.B \-D
+Increase the debugging level. This may be used to understand the
+actions the command is taking.
+
+.TP
+.B \-g, \--read-parameters
+Show driver-specific parameters.
+
+.TP
+.B \-G, \--set-parameters value[,value...]
+Set driver-specific parameters.
+Set a adapter-specific parameters.
+Parameters are comma separated, with missing elements retaining the
+existing value.
+
+.TP
+.B \-v
+Increase the verbosity level. Additional "-v" options increase the
+level further.
+
+.TP
+.B \-V
+Show the program version information.
+
+.TP
+.B \-w, \--watch
+Continuously monitor the transceiver and report changes.
+
+.TP
+.B \-?
+Emit usage information.
+
+.SH DESCRIPTION
+
+.PP
+Calling the command with just the interface name (which defaults to
+'eth0' if missing) produces extensive output describing the transceiver
+capabilities, configuration and current status.
+
+.PP
+The '--monitor' option allows scripting link beat changes.
+.PP
+This option is similar to --watch, but with lower overhead and simplifed
+output. It polls the interface only once a second and the output format
+is a single line per link change with three fixed words
+ <unknown|down||negotiating|up> <STATUS> <PARTNER-CAP>
+.PP
+Example output: mii-diag --monitor eth0
+ down 0x7809 0x0000
+ negotiating 0x7829 0x45e1
+ up 0x782d 0x45e1
+ down 0x7809 0x0000
+
+.PP
+This may be used as
+ mii-diag --monitor eth0 |
+ while read linkstatus bmsr linkpar; do
+ case $linkstatus in
+ up) ifup eth0 ;;
+ down) ifdown eth0 ;;
+ esac
+ done
+
+.PP
+It may be useful to shorten the DHCP client daemon timeout if it does
+not receive an address by adding the following setting to
+/etc/sysconfig/network:
+DHCPCDARGS="-t 3"
+
+.SH SEE ALSO
+.BR ether-wake (8), net-diag (8), mii-tool (8).
+.br
+Addition documentation is available from http://scyld.com/diag/index.html.
+
+.SH KNOWN BUGS
+The --all-interfaces option is quirky. There are very few settings that
+are usefully applied to all interfaces.
+
+.SH AUTHOR
+The manual pages, diagnostic commands, and many of the underlying Linux
+network drivers were written by Donald Becker for the Scyld
+Beowulf(\*(Tm) cluster system.
+
diff --git a/packages/net-tools/files/mii-diag.c b/packages/net-tools/files/mii-diag.c
new file mode 100644
index 0000000000..17d8bef63b
--- /dev/null
+++ b/packages/net-tools/files/mii-diag.c
@@ -0,0 +1,650 @@
+/* Mode: C;
+ * mii-diag.c: Examine and set the MII registers of a network interfaces.
+
+ Usage: mii-diag [-vw] interface.
+
+ This program reads and writes the Media Independent Interface (MII)
+ management registers on network transceivers. The registers control
+ and report network link settings and errors. Examples are link speed,
+ duplex, capabilities advertised to the link partner, status LED
+ indications and link error counters.
+
+ Notes:
+ The compile-command is at the end of this source file.
+ This program works with drivers that implement MII ioctl() calls.
+
+ Written/copyright 1997-2003 by Donald Becker <becker@scyld.com>
+
+ 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.
+
+ The author may be reached as becker@scyld.com, or C/O
+ Scyld Computing Corporation
+ 914 Bay Ridge Road, Suite 220
+ Annapolis MD 21403
+
+ References
+ http://scyld.com/expert/mii-status.html
+ http://scyld.com/expert/NWay.html
+ http://www.national.com/pf/DP/DP83840.html
+*/
+
+static char version[] =
+"mii-diag.c:v2.11 3/21/2005 Donald Becker (becker@scyld.com)\n"
+" http://www.scyld.com/diag/index.html\n";
+
+static const char usage_msg[] =
+"Usage: %s [--help] [-aDfrRvVw] [-AF <speed+duplex>] [--watch] <interface>.\n";
+static const char long_usage_msg[] =
+"Usage: %s [-aDfrRvVw] [-AF <speed+duplex>] [--watch] <interface>.\n\
+\n\
+ This program configures and monitors the transceiver management registers\n\
+ for network interfaces. It uses the Media Independent Interface (MII)\n\
+ standard with additional Linux-specific controls to communicate with the\n\
+ underlying device driver. The MII registers control and report network\n\
+ link settings and errors. Examples are link speed, duplex, capabilities\n\
+ advertised to the link partner, status LED indications and link error\n\
+ counters.\n\
+\n\
+ The common usage is\n\
+ mii-diag eth0\n\
+\n\
+ The default interface is \"eth0\".\n\
+ Frequently used options are\n\
+ -A --advertise <speed|setting>\n\
+ -F --fixed-speed <speed>\n\
+ Speed is one of: 100baseT4, 100baseTx, 100baseTx-FD, 100baseTx-HD,\n\
+ 10baseT, 10baseT-FD, 10baseT-HD\n\
+ -s --status Return exit status 2 if there is no link beat.\n\
+\n\
+ Less frequently used options are\n\
+ -a --all-interfaces Show the status all interfaces\n\
+ (Not recommended with options that change settings.)\n\
+ -D --debug\n\
+ -g --read-parameters Get driver-specific parameters.\n\
+ -G --set-parameters PARMS Set driver-specific parameters.\n\
+ Parameters are comma separated, missing parameters retain\n\
+ their previous values.\n\
+ -M --msg-level LEVEL Set the driver message bit map.\n\
+ -p --phy ADDR Set the PHY (MII address) to report.\n\
+ -r --restart Restart the link autonegotiation.\n\
+ -R --reset Reset the transceiver.\n\
+ -v --verbose Report each action taken.\n\
+ -V --version Emit version information.\n\
+ -w --watch Continuously monitor the transceiver and report changes.\n\
+\n\
+ This command returns success (zero) if the interface information can be\n\
+ read. If the --status option is passed, a zero return means that the\n\
+ interface has link beat.\n\
+";
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <getopt.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/ioctl.h>
+#include <net/if.h>
+#ifdef use_linux_libc5
+#include <linux/if_arp.h>
+#include <linux/if_ether.h>
+#endif
+
+typedef u_int32_t u32;
+typedef u_int16_t u16;
+typedef u_int8_t u8;
+
+#if defined(SIOCGPARAMS) && SIOCGPARAMS != SIOCDEVPRIVATE+3
+#error Changed definition for SIOCGPARAMS
+#else
+#define SIOCGPARAMS (SIOCDEVPRIVATE+3) /* Read operational parameters. */
+#define SIOCSPARAMS (SIOCDEVPRIVATE+4) /* Set operational parameters. */
+#endif
+
+const char shortopts[] = "aA:C:DfF:gG:hmM:p:rRsvVw?";
+struct option longopts[] = {
+ /* { name has_arg *flag val } */
+ {"all-interfaces", 0, 0, 'a'}, /* Show all interfaces. */
+ {"advertise", 1, 0, 'A'}, /* Change the capabilities advertised. */
+ {"BMCR", 1, 0, 'C'}, /* Set the control register. */
+ {"debug", 0, 0, 'D'}, /* Increase the debug level. */
+ {"force", 0, 0, 'f'}, /* Force the operation. */
+ {"fixed-speed", 1, 0, 'F'}, /* Fixed speed name. */
+ {"read-parameters", 0, 0, 'g'}, /* Show general settings values. */
+ {"set-parameters", 1, 0, 'G'}, /* Write general settings values. */
+ {"help", 0, 0, 'h'}, /* Print a long usage message. */
+ {"monitor", 0, 0, 'm'}, /* Monitor status register. */
+ {"msg-level", 1, 0, 'M'}, /* Set the driver message level. */
+ {"phy", 1, 0, 'p'}, /* Set the PHY (MII address) to report. */
+ {"restart", 0, 0, 'r'}, /* Restart the link negotiation */
+ {"reset", 0, 0, 'R'}, /* Reset the transceiver. */
+ {"status", 0, 0, 's'}, /* Non-zero exit status w/ no link beat. */
+ {"verbose", 0, 0, 'v'}, /* Report each action taken. */
+ {"version", 0, 0, 'V'}, /* Emit version information. */
+ {"watch", 0, 0, 'w'}, /* Constantly monitor the port. */
+ {"error", 0, 0, '?'}, /* Return the error message. */
+ { 0, 0, 0, 0 }
+};
+
+/* Usually in libmii.c, but trivial substitions are below. */
+extern int show_mii_details(long ioaddr, int phy_id);
+extern void monitor_mii(long ioaddr, int phy_id);
+int show_mii_details(long ioaddr, int phy_id) __attribute__((weak));
+void monitor_mii(long ioaddr, int phy_id) __attribute__((weak));
+
+
+/* Command-line flags. */
+unsigned int opt_a = 0, /* Show-all-interfaces flag. */
+ opt_f = 0, /* Force the operation. */
+ opt_g = 0,
+ opt_G = 0,
+ verbose = 0, /* Verbose flag. */
+ debug = 0,
+ opt_version = 0,
+ opt_restart = 0,
+ opt_reset = 0,
+ opt_status = 0,
+ opt_watch = 0;
+static int msg_level = -1;
+static int set_BMCR = -1;
+static int nway_advertise = 0;
+static int fixed_speed = -1;
+static int override_phy = -1;
+char *opt_G_string = NULL;
+
+/* Internal values. */
+int new_ioctl_nums;
+int skfd = -1; /* AF_INET socket for ioctl() calls. */
+struct ifreq ifr;
+
+int do_one_xcvr(int skfd);
+int show_basic_mii(long ioaddr, int phy_id);
+int mdio_read(int skfd, int phy_id, int location);
+void mdio_write(int skfd, int phy_id, int location, int value);
+static int parse_advertise(const char *capabilities);
+static void monitor_status(long ioaddr, int phy_id);
+
+
+int
+main(int argc, char **argv)
+{
+ int c, errflag = 0;
+ char **spp, *ifname;
+ char *progname = rindex(argv[0], '/') ? rindex(argv[0], '/')+1 : argv[0];
+
+ while ((c = getopt_long(argc, argv, shortopts, longopts, 0)) != EOF)
+ switch (c) {
+ case 'a': opt_a++; break;
+ case 'A': nway_advertise |= parse_advertise(optarg);
+ if (nway_advertise == -1) errflag++;
+ break;
+ case 'C': set_BMCR = strtoul(optarg, NULL, 16); break;
+ case 'D': debug++; break;
+ case 'f': opt_f++; break;
+ case 'F': fixed_speed = parse_advertise(optarg);
+ if (fixed_speed == -1) errflag++;
+ break;
+ case 'g': opt_g++; break;
+ case 'G': opt_G++; opt_G_string = strdup(optarg); break;
+ case 'm': opt_watch++; opt_status++; break;
+ case 'M': msg_level = strtoul(optarg, NULL, 0); break;
+ case 'h': fprintf(stderr, long_usage_msg, progname); return 0;
+ case 'p': override_phy = atoi(optarg); break;
+ case 'r': opt_restart++; break;
+ case 'R': opt_reset++; break;
+ case 's': opt_status++; break;
+ case 'v': verbose++; break;
+ case 'V': opt_version++; break;
+ case 'w': opt_watch++; break;
+ case '?': errflag++; break;
+ }
+ if (errflag) {
+ fprintf(stderr, usage_msg, progname);
+ return 2;
+ }
+
+ if (verbose || opt_version)
+ printf(version);
+
+ /* Open a basic socket. */
+ if ((skfd = socket(AF_INET, SOCK_DGRAM,0)) < 0) {
+ perror("socket");
+ return 1;
+ }
+
+ if (debug)
+ fprintf(stderr, "DEBUG: argc=%d, optind=%d and argv[optind] is %s.\n",
+ argc, optind, argv[optind]);
+
+ /* No remaining args means show all interfaces. */
+ if (optind == argc) {
+ ifname = "eth0";
+ fprintf(stderr, "Using the default interface 'eth0'.\n");
+ } else {
+ /* Copy the interface name. */
+ spp = argv + optind;
+ ifname = *spp++;
+ }
+
+ if (ifname == NULL) {
+ ifname = "eth0";
+ fprintf(stderr, "Using the default interface 'eth0'.\n");
+ }
+
+ /* Verify that the interface supports the ioctl(), and if
+ it is using the new or old SIOCGMIIPHY value (grrr...).
+ */
+ {
+ u16 *data = (u16 *)(&ifr.ifr_data);
+
+ strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
+ data[0] = 0;
+
+ if (ioctl(skfd, 0x8947, &ifr) >= 0) {
+ new_ioctl_nums = 1;
+ } else if (ioctl(skfd, SIOCDEVPRIVATE, &ifr) >= 0) {
+ new_ioctl_nums = 0;
+ } else {
+ fprintf(stderr, "SIOCGMIIPHY on %s failed: %s\n", ifname,
+ strerror(errno));
+ (void) close(skfd);
+ return 1;
+ }
+ if (verbose)
+ printf(" Using the %s SIOCGMIIPHY value on PHY %d "
+ "(BMCR 0x%4.4x).\n",
+ new_ioctl_nums ? "new" : "old", data[0], data[3]);
+ }
+
+ do_one_xcvr(skfd);
+
+ (void) close(skfd);
+ return 0;
+}
+
+int do_one_xcvr(int skfd)
+{
+ u16 *data = (u16 *)(&ifr.ifr_data);
+ u32 *data32 = (u32 *)(&ifr.ifr_data);
+ unsigned phy_id = data[0];
+
+ if (override_phy >= 0) {
+ printf("Using the specified MII PHY index %d.\n", override_phy);
+ phy_id = override_phy;
+ }
+
+ if (opt_g || opt_G || msg_level >= 0) {
+ if (ioctl(skfd, SIOCGPARAMS, &ifr) < 0) {
+ fprintf(stderr, "SIOCGPARAMS on %s failed: %s\n", ifr.ifr_name,
+ strerror(errno));
+ return -1;
+ }
+ }
+ if (opt_g) {
+ int i;
+ printf("Driver general parameter settings:");
+ for (i = 0; i*sizeof(u32) < sizeof(ifr.ifr_ifru); i++) {
+ printf(" %d", data32[i]);
+ }
+ printf(".\n");
+ }
+ if (opt_G) {
+ /* Set up to four arbitrary driver parameters from the -G parameter.
+ The format is comma separated integers, with a missing element
+ retaining the previous value.
+ */
+ char *str = opt_G_string;
+ int i;
+ for (i = 0; str && i < 4; i++) {
+ char *endstr;
+ u32 newval = strtol(str, &endstr, 0);
+ if (debug)
+ printf(" parse string '%s' value %d end '%s'.\n",
+ str, newval, endstr);
+ if (str == endstr) {
+ if (endstr[0] == ',') /* No parameter */
+ str = endstr+1;
+ else {
+ fprintf(stderr, "Invalid driver parameter '%s'.\n", str);
+ str = index(str, ',');
+ }
+ } else if (endstr[0] == ',') {
+ data32[i] = newval;
+ str = endstr + 1;
+ } else if (endstr[0] == 0) {
+ data32[i] = newval;
+ break;
+ }
+ }
+ printf("Setting new driver general parameters:");
+ for (i = 0; i*sizeof(u32) < sizeof(ifr.ifr_ifru); i++) {
+ printf(" %d", data32[i]);
+ }
+ printf(".\n");
+ if (ioctl(skfd, SIOCSPARAMS, &ifr) < 0) {
+ fprintf(stderr, "SIOCSPARAMS on %s failed: %s\n", ifr.ifr_name,
+ strerror(errno));
+ return -1;
+ }
+ }
+ if (msg_level >= 0) {
+ data32[0] = msg_level;
+ if (ioctl(skfd, SIOCSPARAMS, &ifr) < 0) {
+ fprintf(stderr, "SIOCSPARAMS on %s failed: %s\n", ifr.ifr_name,
+ strerror(errno));
+ return -1;
+ }
+ }
+
+ if (opt_reset) {
+ printf("Resetting the transceiver...\n");
+ mdio_write(skfd, phy_id, 0, 0x8000);
+ }
+ /* Note: PHY addresses > 32 are pseudo-MII devices, usually built-in. */
+ if (phy_id < 64 && nway_advertise > 0) {
+ printf(" Setting the media capability advertisement register of "
+ "PHY #%d to 0x%4.4x.\n", phy_id, nway_advertise | 1);
+ mdio_write(skfd, phy_id, 4, nway_advertise | 1);
+ mdio_write(skfd, phy_id, 0, 0x1000);
+ }
+
+ if (opt_restart) {
+ printf("Restarting negotiation...\n");
+ mdio_write(skfd, phy_id, 0, 0x0000);
+ mdio_write(skfd, phy_id, 0, 0x1200);
+ }
+ /* To force 100baseTx-HD do mdio_write(skfd, phy_id, 0, 0x2000); */
+ if (fixed_speed >= 0) {
+ int reg0_val = 0;
+ if (fixed_speed & 0x0180) /* 100mpbs */
+ reg0_val |= 0x2000;
+ if ((fixed_speed & 0x0140) && /* A full duplex type and */
+ ! (fixed_speed & 0x0820)) /* no half duplex types. */
+ reg0_val |= 0x0100;
+ printf("Setting the speed to \"fixed\", Control register %4.4x.\n",
+ reg0_val);
+ mdio_write(skfd, phy_id, 0, reg0_val);
+ }
+ if (set_BMCR >= 0) {
+ printf("Setting the Basic Mode Control Register to 0x%4.4x.\n",
+ set_BMCR);
+ mdio_write(skfd, phy_id, 0, set_BMCR);
+ }
+
+ if (opt_watch && opt_status)
+ monitor_status(skfd, phy_id);
+
+ show_basic_mii(skfd, phy_id);
+#ifdef LIBMII
+ if (verbose)
+ show_mii_details(skfd, phy_id);
+#else
+ if (verbose || debug) {
+ int mii_reg, mii_val;
+ printf(" MII PHY #%d transceiver registers:", phy_id);
+ for (mii_reg = 0; mii_reg < 32; mii_reg++) {
+ mii_val = mdio_read(skfd, phy_id, mii_reg);
+ printf("%s %4.4x", (mii_reg % 8) == 0 ? "\n " : "",
+ mii_val);
+ }
+ printf("\n");
+ }
+#endif
+
+ if (opt_watch)
+ monitor_mii(skfd, phy_id);
+ if (opt_status &&
+ (mdio_read(skfd, phy_id, 1) & 0x0004) == 0)
+ exit(2);
+ return 0;
+}
+
+int mdio_read(int skfd, int phy_id, int location)
+{
+ u16 *data = (u16 *)(&ifr.ifr_data);
+
+ data[0] = phy_id;
+ data[1] = location;
+
+ if (ioctl(skfd, new_ioctl_nums ? 0x8948 : SIOCDEVPRIVATE+1, &ifr) < 0) {
+ fprintf(stderr, "SIOCGMIIREG on %s failed: %s\n", ifr.ifr_name,
+ strerror(errno));
+ return -1;
+ }
+ return data[3];
+}
+
+void mdio_write(int skfd, int phy_id, int location, int value)
+{
+ u16 *data = (u16 *)(&ifr.ifr_data);
+
+ data[0] = phy_id;
+ data[1] = location;
+ data[2] = value;
+
+ if (ioctl(skfd, new_ioctl_nums ? 0x8949 : SIOCDEVPRIVATE+2, &ifr) < 0) {
+ fprintf(stderr, "SIOCSMIIREG on %s failed: %s\n", ifr.ifr_name,
+ strerror(errno));
+ }
+}
+
+/* Parse the command line argument for advertised capabilities. */
+static int parse_advertise(const char *capabilities)
+{
+ const char *mtypes[] = {
+ "100baseT4", "100baseTx", "100baseTx-FD", "100baseTx-HD",
+ "10baseT", "10baseT-FD", "10baseT-HD", 0,
+ };
+ char *endptr;
+ int cap_map[] = { 0x0200, 0x0180, 0x0100, 0x0080, 0x0060, 0x0040, 0x0020,};
+ int i;
+ if ( ! capabilities) {
+ fprintf(stderr, "You passed -A 'NULL'. You must provide a media"
+ " list to advertise!\n");
+ return -1;
+ }
+ if (debug)
+ fprintf(stderr, "Advertise string is '%s'.\n", capabilities);
+ for (i = 0; mtypes[i]; i++)
+ if (strcasecmp(mtypes[i], capabilities) == 0)
+ return cap_map[i];
+ if ((i = strtol(capabilities, &endptr, 16)) <= 0xffff && endptr[0] == 0)
+ return i;
+ fprintf(stderr, "Invalid media advertisement value '%s'.\n"
+ " Either pass a numeric value or one of the following names:\n",
+ capabilities);
+ for (i = 0; mtypes[i]; i++)
+ fprintf(stderr, " %-14s %3.3x\n", mtypes[i], cap_map[i]);
+ return -1;
+}
+
+/* Trivial versions if we don't link against libmii.c */
+static const char *media_names[] = {
+ "10baseT", "10baseT-FD", "100baseTx", "100baseTx-FD", "100baseT4",
+ "Flow-control", 0,
+};
+/* Various non-good bits in the command register. */
+static const char *bmcr_bits[] = {
+ " Internal Collision-Test enabled!\n", "", /* 0x0080,0x0100 */
+ " Restarted auto-negotiation in progress!\n",
+ " Transceiver isolated from the MII!\n",
+ " Transceiver powered down!\n", "", "",
+ " Transceiver in loopback mode!\n",
+ " Transceiver currently being reset!\n",
+};
+
+int show_basic_mii(long ioaddr, int phy_id)
+{
+ int mii_reg, i;
+ u16 mii_val[32];
+ u16 bmcr, bmsr, new_bmsr, nway_advert, lkpar;
+
+ for (mii_reg = 0; mii_reg < 8; mii_reg++)
+ mii_val[mii_reg] = mdio_read(ioaddr, phy_id, mii_reg);
+ if ( ! verbose) {
+ printf("Basic registers of MII PHY #%d: ", phy_id);
+ for (mii_reg = 0; mii_reg < 8; mii_reg++)
+ printf(" %4.4x", mii_val[mii_reg]);
+ printf(".\n");
+ }
+
+ if (mii_val[0] == 0xffff || mii_val[1] == 0x0000) {
+ printf(" No MII transceiver present!.\n");
+ if (! opt_f) {
+ printf(" Use '--force' to view the information anyway.\n");
+ return -1;
+ }
+ }
+ /* Descriptive rename. */
+ bmcr = mii_val[0];
+ bmsr = mii_val[1];
+ nway_advert = mii_val[4];
+ lkpar = mii_val[5];
+
+ if (lkpar & 0x4000) {
+ int negotiated = nway_advert & lkpar & 0x3e0;
+ int max_capability = 0;
+ /* Scan for the highest negotiated capability, highest priority
+ (100baseTx-FDX) to lowest (10baseT-HDX). */
+ int media_priority[] = {8, 9, 7, 6, 5}; /* media_names[i-5] */
+ printf(" The autonegotiated capability is %4.4x.\n", negotiated);
+ for (i = 0; media_priority[i]; i++)
+ if (negotiated & (1 << media_priority[i])) {
+ max_capability = media_priority[i];
+ break;
+ }
+ if (max_capability)
+ printf("The autonegotiated media type is %s.\n",
+ media_names[max_capability - 5]);
+ else
+ printf("No common media type was autonegotiated!\n"
+ "This is extremely unusual and typically indicates a "
+ "configuration error.\n" "Perhaps the advertised "
+ "capability set was intentionally limited.\n");
+ }
+ printf(" Basic mode control register 0x%4.4x:", bmcr);
+ if (bmcr & 0x1000)
+ printf(" Auto-negotiation enabled.\n");
+ else
+ printf(" Auto-negotiation disabled, with\n"
+ " Speed fixed at 10%s mbps, %s-duplex.\n",
+ bmcr & 0x2000 ? "0" : "",
+ bmcr & 0x0100 ? "full":"half");
+ for (i = 0; i < 9; i++)
+ if (bmcr & (0x0080<<i))
+ printf(bmcr_bits[i]);
+
+ new_bmsr = mdio_read(ioaddr, phy_id, 1);
+ if ((bmsr & 0x0016) == 0x0004)
+ printf( " You have link beat, and everything is working OK.\n");
+ else
+ printf(" Basic mode status register 0x%4.4x ... %4.4x.\n"
+ " Link status: %sestablished.\n",
+ bmsr, new_bmsr,
+ bmsr & 0x0004 ? "" :
+ (new_bmsr & 0x0004) ? "previously broken, but now re" : "not ");
+ if (verbose) {
+ printf(" This transceiver is capable of ");
+ if (bmsr & 0xF800) {
+ for (i = 15; i >= 11; i--)
+ if (bmsr & (1<<i))
+ printf(" %s", media_names[i-11]);
+ } else
+ printf("<Warning! No media capabilities>");
+ printf(".\n");
+ printf(" %s to perform Auto-negotiation, negotiation %scomplete.\n",
+ bmsr & 0x0008 ? "Able" : "Unable",
+ bmsr & 0x0020 ? "" : "not ");
+ }
+
+ if (bmsr & 0x0010)
+ printf(" Remote fault detected!\n");
+ if (bmsr & 0x0002)
+ printf(" *** Link Jabber! ***\n");
+
+ if (lkpar & 0x4000) {
+ printf(" Your link partner advertised %4.4x:",
+ lkpar);
+ for (i = 5; i >= 0; i--)
+ if (lkpar & (0x20<<i))
+ printf(" %s", media_names[i]);
+ printf("%s.\n", lkpar & 0x0400 ? ", w/ 802.3X flow control" : "");
+ } else if (lkpar & 0x00A0)
+ printf(" Your link partner is generating %s link beat (no"
+ " autonegotiation).\n",
+ lkpar & 0x0080 ? "100baseTx" : "10baseT");
+ else if ( ! (bmcr & 0x1000))
+ printf(" Link partner information is not exchanged when in"
+ " fixed speed mode.\n");
+ else if ( ! (new_bmsr & 0x004))
+ ; /* If no partner, do not report status. */
+ else if (lkpar == 0x0001 || lkpar == 0x0000) {
+ printf(" Your link partner does not do autonegotiation, and this "
+ "transceiver type\n does not report the sensed link "
+ "speed.\n");
+ } else
+ printf(" Your link partner is strange, status %4.4x.\n", lkpar);
+
+ printf(" End of basic transceiver information.\n\n");
+ return 0;
+}
+
+static void monitor_status(long ioaddr, int phy_id)
+{
+ unsigned int baseline_1 = 0x55555555; /* Always show initial status. */
+
+ while (1) {
+ unsigned int new_1 = mdio_read(ioaddr, phy_id, 1);
+ if (new_1 != baseline_1) {
+ printf("%-12s 0x%4.4x 0x%4.4x\n",
+ new_1 & 0x04 ? (new_1==0xffff ? "unknown" : "up") :
+ new_1 & 0x20 ? "negotiating" : "down",
+ new_1, mdio_read(ioaddr, phy_id, 5));
+ fflush(stdout);
+ baseline_1 = new_1;
+ }
+ sleep(1);
+ }
+}
+
+int show_mii_details(long ioaddr, int phy_id)
+{
+ int mii_reg, mii_val;
+ printf(" MII PHY #%d transceiver registers:", phy_id);
+ for (mii_reg = 0; mii_reg < 32; mii_reg++) {
+ mii_val = mdio_read(skfd, phy_id, mii_reg);
+ printf("%s %4.4x", (mii_reg % 8) == 0 ? "\n " : "",
+ mii_val);
+ }
+ printf("\nThis version of 'mii-diag' has not been linked with "
+ "the libmii.c library.\n"
+ " That library provides extended transceiver status reports.\n");
+ return 0;
+}
+
+void monitor_mii(long ioaddr, int phy_id)
+{
+ fprintf(stderr, "\nThis version of 'mii-diag' has not been linked with "
+ "the libmii.c library \n"
+ " required for the media monitor option.\n");
+}
+
+
+
+/*
+ * Local variables:
+ * version-control: t
+ * kept-new-versions: 5
+ * c-indent-level: 4
+ * c-basic-offset: 4
+ * tab-width: 4
+ * compile-command: "gcc -Wall -Wstrict-prototypes -O mii-diag.c -DLIBMII libmii.c -o mii-diag"
+ * simple-compile-command: "gcc mii-diag.c -o mii-diag"
+ * End:
+ */
diff --git a/packages/net-tools/files/net-tools-1.57-bug22040.patch b/packages/net-tools/files/net-tools-1.57-bug22040.patch
new file mode 100644
index 0000000000..76f04d5421
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.57-bug22040.patch
@@ -0,0 +1,50 @@
+--- net-tools-1.57/arp.c.orig Sun May 14 17:57:41 2000
++++ net-tools-1.57/arp.c Sat Nov 25 15:05:27 2000
+@@ -618,6 +618,7 @@
+ fprintf(stderr, _(" arp [-v] [<HW>] [-i <if>] -Ds <hostname> <if> [netmask <nm>] pub <-''-\n\n"));
+
+ fprintf(stderr, _(" -a display (all) hosts in alternative (BSD) style\n"));
++ fprintf(stderr, _(" -e display (all) hosts in default (Linux) style\n"));
+ fprintf(stderr, _(" -s, --set set a new ARP entry\n"));
+ fprintf(stderr, _(" -d, --delete delete a specified entry\n"));
+ fprintf(stderr, _(" -v, --verbose be verbose\n"));
+--- net-tools-1.57/man/en_US/arp.8.orig Sat Nov 25 15:13:26 2000
++++ net-tools-1.57/man/en_US/arp.8 Sat Nov 25 15:15:12 2000
+@@ -3,7 +3,7 @@
+ arp \- manipulate the system ARP cache
+ .SH SYNOPSIS
+ .B arp
+-.RB [ \-vn ]
++.RB [ \-evn ]
+ .RB [ "\-H type" ]
+ .RB [ "-i if" ]
+ .B -a
+@@ -60,7 +60,7 @@
+ shows numerical addresses instead of trying to determine symbolic host, port
+ or user names.
+ .TP
+-.B "\-H type, \-\-hw-type type"
++.B "\-H type, \-\-hw-type type, \-t type"
+ When setting or reading the ARP cache, this optional parameter tells
+ .B arp
+ which class of entries it should check for. The default value of
+@@ -81,7 +81,8 @@
+ .B hostname
+ parameter is not used,
+ .B all
+-entries will be displayed.
++entries will be displayed.
++The entries will be displayed in alternate (BSD) style.
+ .TP
+ .B "\-d hostname, \-\-delete hostname"
+ Remove any entry for the specified host. This can be used if the
+@@ -91,6 +92,9 @@
+ Use the interface
+ .BR ifa "'s"
+ hardware address.
++.TP
++.B "\-e"
++Shows the entries in default (Linux) style.
+ .TP
+ .B "\-i If, \-\-device If"
+ Select an interface. When dumping the ARP cache only entries matching
diff --git a/packages/net-tools/files/net-tools-1.60-arp_overflow.patch b/packages/net-tools/files/net-tools-1.60-arp_overflow.patch
new file mode 100644
index 0000000000..4679a51675
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-arp_overflow.patch
@@ -0,0 +1,11 @@
+--- net-tools-1.60/arp.c.old 2005-08-03 08:23:46.000000000 +0200
++++ net-tools-1.60/arp.c 2005-08-03 11:02:10.000000000 +0200
+@@ -235,7 +235,7 @@
+ struct ifreq ifr;
+ struct hwtype *xhw;
+
+- strcpy(ifr.ifr_name, ifname);
++ strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
+ if (ioctl(sockfd, SIOCGIFHWADDR, &ifr) < 0) {
+ fprintf(stderr, _("arp: cant get HW-Address for `%s': %s.\n"), ifname, strerror(errno));
+ return (-1);
diff --git a/packages/net-tools/files/net-tools-1.60-bcast.patch b/packages/net-tools/files/net-tools-1.60-bcast.patch
new file mode 100644
index 0000000000..9489e26352
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-bcast.patch
@@ -0,0 +1,99 @@
+--- net-tools-1.60/ifconfig.c.broadcast 2004-11-03 12:05:30.000000000 +0100
++++ net-tools-1.60/ifconfig.c 2004-11-04 15:39:32.817077232 +0100
+@@ -36,6 +36,7 @@
+ #include <sys/ioctl.h>
+ #include <netinet/in.h>
+ #include <net/if.h>
++#include <netinet/ip.h>
+ #include <net/if_arp.h>
+ #include <stdio.h>
+ #include <errno.h>
+@@ -138,6 +139,7 @@
+ perror("SIOCSIFFLAGS");
+ return -1;
+ }
++
+ return (0);
+ }
+
+@@ -212,17 +214,41 @@
+ exit(0);
+ }
+
+-static int set_netmask(int skfd, struct ifreq *ifr, struct sockaddr *sa)
++static int set_netmask(int skfd, struct ifreq *ifr, struct sockaddr *sa, int new_bcast)
+ {
+ int err = 0;
+-
+- memcpy((char *) &ifr->ifr_netmask, (char *) sa,
+- sizeof(struct sockaddr));
++ struct sockaddr_in * ip_addr, * netmask, *bcast;
++ struct ifreq ifraddr;
++ struct ifreq ifrbcast;
++
++ memcpy((char *) &ifr->ifr_netmask, (char *) sa,
++ sizeof(struct sockaddr));
+ if (ioctl(skfd, SIOCSIFNETMASK, ifr) < 0) {
+ fprintf(stderr, "SIOCSIFNETMASK: %s\n",
+ strerror(errno));
+ err = 1;
+ }
++
++ if (new_bcast) {
++ memcpy(&ifraddr,ifr,sizeof(struct ifreq));
++ memcpy(&ifrbcast,ifr,sizeof(struct ifreq));
++
++ if (ioctl(skfd, SIOCGIFADDR, &ifraddr) < 0) {
++ fprintf(stderr, "SIOCGIFADDR: %s\n", strerror(errno));
++ err = 1;
++ }
++
++ ip_addr = (struct sockaddr_in *)&ifraddr.ifr_addr;
++ netmask = (struct sockaddr_in *)&ifr->ifr_netmask;
++ bcast = (struct sockaddr_in *)&ifrbcast.ifr_broadaddr;
++ /* calculate new broadcast adress */
++ bcast->sin_addr.s_addr = ip_addr->sin_addr.s_addr | ~netmask->sin_addr.s_addr;
++ /* set new broadcast adress */
++ if (ioctl(skfd, SIOCSIFBRDADDR, &ifrbcast) < 0) {
++ fprintf(stderr, "SIOCSIFBROADCAST: %s\n", strerror(errno));
++ err = 1;
++ }
++ }
+ return 0;
+ }
+
+@@ -234,7 +260,7 @@
+ struct aftype *ap;
+ struct hwtype *hw;
+ struct ifreq ifr;
+- int goterr = 0, didnetmask = 0, donetmask = 0;
++ int goterr = 0, didnetmask = 0, donetmask = 0, dobcast = 1;
+ char **spp;
+ int fd;
+ #if HAVE_AFINET6
+@@ -506,6 +532,7 @@
+ strerror(errno));
+ goterr = 1;
+ }
++ dobcast = 0;
+ spp++;
+ }
+ goterr |= set_flag(ifr.ifr_name, IFF_BROADCAST);
+@@ -542,7 +569,7 @@
+ continue;
+ }
+ didnetmask++;
+- goterr = set_netmask(ap->fd, &ifr, &sa);
++ goterr = set_netmask(ap->fd, &ifr, &sa, dobcast);
+ spp++;
+ continue;
+ }
+@@ -964,7 +991,7 @@
+ /* set CIDR netmask */
+ if (donetmask) {
+ donetmask = 0;
+- goterr = set_netmask(skfd, &ifr, &sa_netmask);
++ goterr = set_netmask(skfd, &ifr, &sa_netmask, dobcast);
+ didnetmask++;
+ }
+
diff --git a/packages/net-tools/files/net-tools-1.60-bitkeeper.patch b/packages/net-tools/files/net-tools-1.60-bitkeeper.patch
new file mode 100644
index 0000000000..6871304d3b
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-bitkeeper.patch
@@ -0,0 +1,17 @@
+--- net-tools-1.60/netplug-1.2.9/Makefile.kill_bitkeeper 2005-01-10 11:36:32.000000000 +0100
++++ net-tools-1.60/netplug-1.2.9/Makefile 2005-01-10 11:38:01.796744224 +0100
+@@ -24,10 +24,12 @@
+ install $(install_opts) -m 755 scripts/rc.netplugd $(initdir)/netplugd
+ install -C $(install_opts) -m 444 man/man8/netplugd.8 $(mandir)/man8
+
+-bk_root := $(shell bk root)
++#bk_root := $(shell bk root)
++bk_root := $(shell)
+ tar_root := netplug-$(version)
+ tar_file := $(bk_root)/$(tar_root).tar.bz2
+-files := $(shell bk sfiles -Ug)
++#files := $(shell bk sfiles -Ug)
++file := $(shell)
+
+ tarball: $(tar_file)
+
diff --git a/packages/net-tools/files/net-tools-1.60-config.h b/packages/net-tools/files/net-tools-1.60-config.h
new file mode 100644
index 0000000000..b01fd72bfe
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-config.h
@@ -0,0 +1,75 @@
+/*
+* config.h Automatically generated configuration includefile
+*
+* NET-TOOLS A collection of programs that form the base set of the
+* NET-3 Networking Distribution for the LINUX operating
+* system.
+*
+* DO NOT EDIT DIRECTLY
+*
+*/
+
+/*
+ *
+ * Internationalization
+ *
+ * The net-tools package has currently been translated to French,
+ * German and Brazilian Portugese. Other translations are, of
+ * course, welcome. Answer `n' here if you have no support for
+ * internationalization on your system.
+ *
+ */
+#define I18N 0
+
+/*
+ *
+ * Protocol Families.
+ *
+ */
+#define HAVE_AFUNIX 1
+#define HAVE_AFINET 1
+#define HAVE_AFINET6 1
+#define HAVE_AFIPX 0
+#define HAVE_AFATALK 0
+#define HAVE_AFAX25 0
+#define HAVE_AFNETROM 1
+#define HAVE_AFROSE 0
+#define HAVE_AFX25 0
+#define HAVE_AFECONET 0
+#define HAVE_AFDECnet 0
+#define HAVE_AFASH 0
+
+/*
+ *
+ * Device Hardware types.
+ *
+ */
+#define HAVE_HWETHER 1
+#define HAVE_HWARC 1
+#define HAVE_HWSLIP 1
+#define HAVE_HWPPP 1
+#define HAVE_HWTUNNEL 1
+#define HAVE_HWSTRIP 1
+#define HAVE_HWTR 1
+#define HAVE_HWAX25 0
+#define HAVE_HWROSE 0
+#define HAVE_HWNETROM 1
+#define HAVE_HWX25 0
+#define HAVE_HWFR 1
+#define HAVE_HWSIT 0
+#define HAVE_HWFDDI 0
+#define HAVE_HWHIPPI 0
+#define HAVE_HWASH 0
+#define HAVE_HWHDLCLAPB 0
+#define HAVE_HWIRDA 1
+#define HAVE_HWEC 0
+#define HAVE_HWIB 0
+
+/*
+ *
+ * Other Features.
+ *
+ */
+#define HAVE_FW_MASQUERADE 1
+#define HAVE_IP_TOOLS 1
+#define HAVE_MII 1
diff --git a/packages/net-tools/files/net-tools-1.60-config.make b/packages/net-tools/files/net-tools-1.60-config.make
new file mode 100644
index 0000000000..11082004cd
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-config.make
@@ -0,0 +1,36 @@
+# I18N=0
+HAVE_AFUNIX=1
+HAVE_AFINET=1
+HAVE_AFINET6=1
+# HAVE_AFIPX=0
+# HAVE_AFATALK=0
+# HAVE_AFAX25=0
+HAVE_AFNETROM=1
+# HAVE_AFROSE=0
+# HAVE_AFX25=0
+# HAVE_AFECONET=0
+# HAVE_AFDECnet=0
+# HAVE_AFASH=0
+HAVE_HWETHER=1
+HAVE_HWARC=1
+HAVE_HWSLIP=1
+HAVE_HWPPP=1
+HAVE_HWTUNNEL=1
+HAVE_HWSTRIP=1
+HAVE_HWTR=1
+# HAVE_HWAX25=0
+# HAVE_HWROSE=0
+HAVE_HWNETROM=1
+# HAVE_HWX25=0
+HAVE_HWFR=1
+# HAVE_HWSIT=0
+# HAVE_HWFDDI=0
+# HAVE_HWHIPPI=0
+# HAVE_HWASH=0
+# HAVE_HWHDLCLAPB=0
+HAVE_HWIRDA=1
+# HAVE_HWEC=0
+# HAVE_HWIB=0
+HAVE_FW_MASQUERADE=1
+HAVE_IP_TOOLS=1
+HAVE_MII=1
diff --git a/packages/net-tools/files/net-tools-1.60-cycle.patch b/packages/net-tools/files/net-tools-1.60-cycle.patch
new file mode 100644
index 0000000000..ce659ec5ad
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-cycle.patch
@@ -0,0 +1,311 @@
+--- net-tools-1.60/lib/interface.c.cycle 2003-02-11 14:29:29.000000000 +0100
++++ net-tools-1.60/lib/interface.c 2003-02-11 14:29:29.000000000 +0100
+@@ -90,6 +90,7 @@
+ static struct interface *int_list, *int_last;
+
+ static int if_readlist_proc(char *);
++static int if_readlist_rep(char *, struct interface *);
+
+ static struct interface *add_interface(char *name)
+ {
+@@ -128,11 +129,13 @@
+ int for_all_interfaces(int (*doit) (struct interface *, void *), void *cookie)
+ {
+ struct interface *ife;
++ int err;
+
+ if (!int_list && (if_readlist() < 0))
+ return -1;
+ for (ife = int_list; ife; ife = ife->next) {
+- int err = doit(ife, cookie);
++ if_readlist_rep(ife->name, ife);
++ err = doit(ife, cookie);
+ if (err)
+ return err;
+ }
+@@ -369,6 +372,42 @@
+ return err;
+ }
+
++
++static int if_readlist_rep(char *target, struct interface *ife)
++{
++ FILE *fh;
++ char buf[512];
++ int err;
++
++ fh = fopen(_PATH_PROCNET_DEV, "r");
++ if (!fh) {
++ fprintf(stderr, _("Warning: cannot open %s (%s). Limited output.\n"),
++ _PATH_PROCNET_DEV, strerror(errno));
++ return if_readconf();
++ }
++ fgets(buf, sizeof buf, fh); /* eat line */
++ fgets(buf, sizeof buf, fh);
++
++ procnetdev_vsn = procnetdev_version(buf);
++
++ err = 0;
++ while (fgets(buf, sizeof buf, fh)) {
++ char *s, name[IFNAMSIZ];
++ s = get_name(name, buf);
++ get_dev_fields(s, ife);
++ ife->statistics_valid = 1;
++ if (target && !strcmp(target,name))
++ break;
++ }
++ if (ferror(fh)) {
++ perror(_PATH_PROCNET_DEV);
++ err = -1;
++ }
++
++ fclose(fh);
++ return err;
++}
++
+ int if_readlist(void)
+ {
+ int err = if_readlist_proc(NULL);
+--- net-tools-1.60/man/en_US/netstat.8.cycle 2001-01-07 13:43:57.000000000 +0100
++++ net-tools-1.60/man/en_US/netstat.8 2003-02-11 14:29:29.000000000 +0100
+@@ -30,6 +30,7 @@
+ .RB [ \-\-program | \-p ]
+ .RB [ \-\-verbose | \-v ]
+ .RB [ \-\-continuous | \-c]
++.RB [delay]
+ .P
+ .B netstat
+ .RB { \-\-route | \-r }
+@@ -39,6 +40,7 @@
+ .RB [ \-\-numeric | \-n ]
+ .RB [ \-\-numeric-hosts ] [ \-\-numeric-ports ] [ \-\-numeric-ports ]
+ .RB [ \-\-continuous | \-c]
++.RB [delay]
+ .P
+ .B netstat
+ .RB { \-\-interfaces | \-i }
+@@ -50,12 +52,14 @@
+ .RB [ \-\-numeric | \-n ]
+ .RB [ \-\-numeric-hosts ] [ \-\-numeric-ports ] [ \-\-numeric-ports ]
+ .RB [ \-\-continuous | \-c]
++.RB [delay]
+ .P
+ .B netstat
+ .RB { \-\-groups | \-g }
+ .RB [ \-\-numeric | \-n ]
+ .RB [ \-\-numeric-hosts ] [ \-\-numeric-ports ] [ \-\-numeric-ports ]
+ .RB [ \-\-continuous | \-c]
++.RB [delay]
+ .P
+ .B netstat
+ .RB { \-\-masquerade | \-M }
+@@ -63,12 +67,14 @@
+ .RB [ \-\-numeric | \-n ]
+ .RB [ \-\-numeric-hosts ] [ \-\-numeric-ports ] [ \-\-numeric-ports ]
+ .RB [ \-\-continuous | \-c]
++.RB [delay]
+ .P
+ .B netstat
+ .RB { \-\-statistics | -s }
+ .RB [ \-\-tcp | \-t ]
+ .RB [ \-\-udp | \-u ]
+ .RB [ \-\-raw | \-w ]
++.RB [delay]
+ .P
+ .B netstat
+ .RB { \-\-version | \-V }
+@@ -170,6 +176,10 @@
+ Print routing information from the FIB. (This is the default.)
+ .SS "\-C"
+ Print routing information from the route cache.
++.SS delay
++Netstat will cycle printing through statistics every
++.B delay
++seconds.
+ .IR UP .
+ .P
+ .SH OUTPUT
+--- net-tools-1.60/netstat.c.cycle 2003-02-11 14:29:29.000000000 +0100
++++ net-tools-1.60/netstat.c 2003-02-11 15:07:26.000000000 +0100
+@@ -102,7 +102,7 @@
+ #endif
+
+ /* prototypes for statistics.c */
+-void parsesnmp(int, int, int);
++int parsesnmp(int, int, int);
+ void inittab(void);
+
+ typedef enum {
+@@ -1440,6 +1440,8 @@
+
+ static int iface_info(void)
+ {
++ static int count=0;
++
+ if (skfd < 0) {
+ if ((skfd = sockets_open(0)) < 0) {
+ perror("socket");
+@@ -1449,20 +1451,21 @@
+ }
+ if (flag_exp < 2) {
+ ife_short = 1;
+- printf(_("Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg\n"));
++ if(!(count % 8))
++ printf(_("Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg\n"));
+ }
+
+ if (for_all_interfaces(do_if_print, &flag_all) < 0) {
+ perror(_("missing interface information"));
+ exit(1);
+ }
+- if (flag_cnt)
++ if (!flag_cnt) {
+ free_interface_list();
+- else {
+ close(skfd);
+ skfd = -1;
+ }
+
++ count++;
+ return 0;
+ }
+
+@@ -1478,7 +1481,7 @@
+ {
+ fprintf(stderr, _("usage: netstat [-veenNcCF] [<Af>] -r netstat {-V|--version|-h|--help}\n"));
+ fprintf(stderr, _(" netstat [-vnNcaeol] [<Socket> ...]\n"));
+- fprintf(stderr, _(" netstat { [-veenNac] -i | [-cnNe] -M | -s }\n\n"));
++ fprintf(stderr, _(" netstat { [-veenNac] -i | [-cnNe] -M | -s } [delay]\n\n"));
+
+ fprintf(stderr, _(" -r, --route display routing table\n"));
+ fprintf(stderr, _(" -i, --interfaces display interface table\n"));
+@@ -1514,6 +1517,7 @@
+ (int argc, char *argv[]) {
+ int i;
+ int lop;
++ int reptimer = 1;
+ struct option longopts[] =
+ {
+ AFTRANS_OPTS,
+@@ -1655,6 +1659,12 @@
+ flag_sta++;
+ }
+
++ if(argc == optind + 1) {
++ if((reptimer = atoi(argv[optind])) <= 0)
++ usage();
++ flag_cnt++;
++ }
++
+ if (flag_int + flag_rou + flag_mas + flag_sta > 1)
+ usage();
+
+@@ -1666,7 +1676,7 @@
+
+ flag_arg = flag_tcp + flag_udp + flag_raw + flag_unx + flag_ipx
+ + flag_ax25 + flag_netrom + flag_igmp + flag_x25;
+-
++
+ if (flag_mas) {
+ #if HAVE_FW_MASQUERADE && HAVE_AFINET
+ #if MORE_THAN_ONE_MASQ_AF
+@@ -1678,7 +1688,7 @@
+ flag_not & FLAG_NUM_PORT, flag_exp);
+ if (i || !flag_cnt)
+ break;
+- sleep(1);
++ sleep(reptimer);
+ }
+ #else
+ ENOSUPP("netstat.c", "FW_MASQUERADE");
+@@ -1688,9 +1698,15 @@
+ }
+
+ if (flag_sta) {
++ for(;;) {
+ inittab();
+- parsesnmp(flag_raw, flag_tcp, flag_udp);
+- exit(0);
++ i = parsesnmp(flag_raw, flag_tcp, flag_udp);
++
++ if(i || !flag_cnt)
++ break;
++ sleep(reptimer);
++ }
++ return(i);
+ }
+
+ if (flag_rou) {
+@@ -1712,7 +1728,7 @@
+ i = route_info(afname, options);
+ if (i || !flag_cnt)
+ break;
+- sleep(1);
++ sleep(reptimer);
+ }
+ return (i);
+ }
+@@ -1721,7 +1737,7 @@
+ i = iface_info();
+ if (!flag_cnt || i)
+ break;
+- sleep(1);
++ sleep(reptimer);
+ }
+ return (i);
+ }
+@@ -1847,7 +1863,7 @@
+ }
+ if (!flag_cnt || i)
+ break;
+- sleep(1);
++ sleep(reptimer);
+ prg_cache_clear();
+ }
+ return (i);
+--- net-tools-1.60/statistics.c.cycle 2001-02-02 19:01:23.000000000 +0100
++++ net-tools-1.60/statistics.c 2003-02-11 14:29:29.000000000 +0100
+@@ -338,7 +338,7 @@
+ }
+
+
+-void parsesnmp(int flag_raw, int flag_tcp, int flag_udp)
++int parsesnmp(int flag_raw, int flag_tcp, int flag_udp)
+ {
+ FILE *f;
+
+@@ -347,12 +347,14 @@
+ f = fopen("/proc/net/snmp", "r");
+ if (!f) {
+ perror(_("cannot open /proc/net/snmp"));
+- return;
++ return(1);
+ }
+ process_fd(f);
+
+- if (ferror(f))
++ if (ferror(f)) {
+ perror("/proc/net/snmp");
++ return(1);
++ }
+
+ fclose(f);
+
+@@ -361,12 +363,14 @@
+ if (f) {
+ process_fd(f);
+
+- if (ferror(f))
+- perror("/proc/net/netstat");
++ if (ferror(f)) {
++ perror("/proc/net/netstat");
++ return(1);
++ }
+
+ fclose(f);
+ }
+- return;
++ return(0);
+ }
+
+
diff --git a/packages/net-tools/files/net-tools-1.60-de.patch b/packages/net-tools/files/net-tools-1.60-de.patch
new file mode 100644
index 0000000000..f015f13d24
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-de.patch
@@ -0,0 +1,11 @@
+--- net-tools-1.60/po/de.po.old 2005-02-16 16:46:02.000000000 +0100
++++ net-tools-1.60/po/de.po 2005-02-16 16:54:07.886323928 +0100
+@@ -64,7 +64,7 @@
+
+ #: ../arp.c:467
+ msgid "(incomplete)"
+-msgstr "(unvollsändig)"
++msgstr "(unvollständig)"
+
+ #: ../arp.c:484
+ #, c-format
diff --git a/packages/net-tools/files/net-tools-1.60-duplicate-tcp.patch b/packages/net-tools/files/net-tools-1.60-duplicate-tcp.patch
new file mode 100644
index 0000000000..316ac65a5b
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-duplicate-tcp.patch
@@ -0,0 +1,194 @@
+--- net-tools-1.60/netstat.c.foo Mon Apr 22 14:25:20 2002
++++ net-tools-1.60/netstat.c Mon Apr 22 14:25:22 2002
+@@ -435,6 +435,162 @@
+ " will not be shown, you would have to be root to see it all.)\n"));
+ }
+
++#define TCP_HASH_SIZE 1009
++
++static struct tcp_node {
++ struct tcp_node *next;
++ char *socket_pair;
++} *tcp_node_hash[TCP_HASH_SIZE];
++
++static unsigned int tcp_node_compute_string_hash(const char *p)
++{
++ unsigned int h = *p;
++
++ if (h)
++ for (p += 1; *p != '\0'; p++)
++ h = (h << 5) - h + *p;
++
++ return h;
++}
++
++#define TCP_NODE_HASH_STRING(x) \
++ (tcp_node_compute_string_hash(x) % TCP_HASH_SIZE)
++
++static void tcp_node_hash_clear(void)
++{
++ int i;
++ struct tcp_node *next_node;
++ struct tcp_node *tmp_node;
++ for (i=0; i < TCP_HASH_SIZE; i++) {
++ if (tcp_node_hash[i]) {
++ /* free the children of this hash bucket */
++ next_node = tcp_node_hash[i]->next;
++ while (next_node) {
++ tmp_node = next_node;
++ next_node = next_node->next;
++ free(tmp_node->socket_pair);
++ free(tmp_node);
++ }
++
++ /* free the bucket itself */
++ free(tcp_node_hash[i]);
++ tcp_node_hash[i] = NULL;
++ }
++ }
++}
++
++/* This function takes a socket pair string. If it already exists in
++ the hash it returns -1, otherwise it returns 0. */
++
++static int tcp_node_hash_check_and_append(const char *local_addr,
++ int local_port,
++ const char *rem_addr,
++ int rem_port)
++{
++ unsigned int hash_val;
++ struct tcp_node *tmp_node;
++ int tmp_string_len;
++ char *tmp_string;;
++
++ /* Size of the string is the size of the two lengths of the address
++ strings plus enough sizes for the colons and the ports. */
++ tmp_string_len = strlen(local_addr) + strlen(rem_addr) + 32;
++ tmp_string = malloc(tmp_string_len);
++ if (!tmp_string)
++ return 0;
++
++ if (snprintf(tmp_string, tmp_string_len - 1, "%s:%d:%s:%d",
++ local_addr, local_port, rem_addr, rem_port) < 0) {
++ free(tmp_string);
++ return 0;
++ }
++
++ hash_val = TCP_NODE_HASH_STRING(tmp_string);
++
++ /* See if we have to allocate this node */
++ if (!tcp_node_hash[hash_val]) {
++ tcp_node_hash[hash_val] = malloc(sizeof(struct tcp_node));
++ if (!tcp_node_hash[hash_val]) {
++ free(tmp_string);
++ return 0;
++ }
++
++ memset(tcp_node_hash[hash_val], 0, sizeof(struct tcp_node));
++
++ /* Stuff this new value into the hash bucket and return early */
++ tcp_node_hash[hash_val]->socket_pair = tmp_string;
++ return 0;
++ }
++
++ /* Try to find the value in the hash bucket. */
++ tmp_node = tcp_node_hash[hash_val];
++ while (tmp_node) {
++ if (!strcmp(tmp_node->socket_pair, tmp_string)) {
++ free(tmp_string);
++ return -1;
++ }
++ tmp_node = tmp_node->next;
++ }
++
++ /* If we got this far it means that it isn't in the hash bucket.
++ Add it to the front since it's faster that way. */
++ tmp_node = tcp_node_hash[hash_val];
++
++ tcp_node_hash[hash_val] = malloc(sizeof(struct tcp_node));
++ if (!tcp_node_hash[hash_val]) {
++ free(tmp_string);
++ tcp_node_hash[hash_val] = tmp_node;
++ return 0;
++ }
++
++ tcp_node_hash[hash_val]->socket_pair = tmp_string;
++ tcp_node_hash[hash_val]->next = tmp_node;
++
++ return 0;
++}
++
++#if 0
++static void tcp_node_hash_report_bucket_size(void)
++{
++ int max = 0;
++ int min = 0;
++ int num = 0;
++ int total = 0;
++ struct tcp_node *tmp_node;
++ int tmp, i;
++ float avg;
++
++ for (i=0; i < TCP_HASH_SIZE; i++) {
++ tmp_node = tcp_node_hash[i];
++ if (!tmp_node)
++ continue;
++
++ tmp = 0;
++
++ num++;
++ tmp = 1;
++
++ while (tmp_node) {
++ tmp++;
++ tmp_node = tmp_node->next;
++ }
++
++ total += tmp;
++ if (tmp > max)
++ max = tmp;
++
++ if (min == 0 || tmp < min)
++ min = tmp;
++ }
++
++ avg = (float)total/(float)num;
++
++ printf("%d nodes in %d buckets min/max/avg %d/%d/%.2f\n",
++ total, num, min, max, avg);
++
++}
++#endif
++
+ #if HAVE_AFNETROM
+ static const char *netrom_state[] =
+ {
+@@ -752,11 +908,20 @@
+ fprintf(stderr, _("warning, got bogus tcp line.\n"));
+ return;
+ }
++
+ if ((ap = get_afntype(((struct sockaddr *) &localaddr)->sa_family)) == NULL) {
+ fprintf(stderr, _("netstat: unsupported address family %d !\n"),
+ ((struct sockaddr *) &localaddr)->sa_family);
+ return;
+ }
++
++ /* make sure that we haven't seen this socket pair before */
++ if (tcp_node_hash_check_and_append(local_addr, local_port,
++ rem_addr, rem_port) < 0) {
++ /* fprintf(stderr, _("warning, got duplicate tcp line.\n")); */
++ return;
++ }
++
+ if (state == TCP_LISTEN) {
+ time_len = 0;
+ retr = 0L;
+@@ -1849,6 +2014,7 @@
+ break;
+ sleep(1);
+ prg_cache_clear();
++ tcp_node_hash_clear();
+ }
+ return (i);
+ }
diff --git a/packages/net-tools/files/net-tools-1.60-gcc33.patch b/packages/net-tools/files/net-tools-1.60-gcc33.patch
new file mode 100644
index 0000000000..a6ae422a72
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-gcc33.patch
@@ -0,0 +1,31 @@
+--- net-tools-1.60/mii-tool.c.gcc33 2003-05-22 23:34:06.000000000 -0400
++++ net-tools-1.60/mii-tool.c 2003-05-22 23:34:57.000000000 -0400
+@@ -378,17 +378,17 @@
+
+ /*--------------------------------------------------------------------*/
+
+-const char *usage =
+-"usage: %s [-VvRrwl] [-A media,... | -F media] [interface ...]
+- -V, --version display version information
+- -v, --verbose more verbose output
+- -R, --reset reset MII to poweron state
+- -r, --restart restart autonegotiation
+- -w, --watch monitor for link status changes
+- -l, --log with -w, write events to syslog
+- -A, --advertise=media,... advertise only specified media
+- -F, --force=media force specified media technology
+-media: 100baseT4, 100baseTx-FD, 100baseTx-HD, 10baseT-FD, 10baseT-HD,
++const char *usage = "\
++usage: %s [-VvRrwl] [-A media,... | -F media] [interface ...]\n\
++ -V, --version display version information\n\
++ -v, --verbose more verbose output\n\
++ -R, --reset reset MII to poweron state\n\
++ -r, --restart restart autonegotiation\n\
++ -w, --watch monitor for link status changes\n\
++ -l, --log with -w, write events to syslog\n\
++ -A, --advertise=media,... advertise only specified media\n\
++ -F, --force=media force specified media technology\n\
++media: 100baseT4, 100baseTx-FD, 100baseTx-HD, 10baseT-FD, 10baseT-HD,\n\
+ (to advertise both HD and FD) 100baseTx, 10baseT\n";
+
+ int main(int argc, char **argv)
diff --git a/packages/net-tools/files/net-tools-1.60-gcc34.patch b/packages/net-tools/files/net-tools-1.60-gcc34.patch
new file mode 100644
index 0000000000..5f700c128e
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-gcc34.patch
@@ -0,0 +1,36 @@
+--- net-tools-1.60/lib/inet_sr.c.gcc34 2000-02-20 22:46:45.000000000 +0100
++++ net-tools-1.60/lib/inet_sr.c 2004-03-30 15:57:25.276049571 +0200
+@@ -105,6 +105,7 @@
+ case 2:
+ isnet = 0; break;
+ default:
++ ;
+ }
+
+ /* Fill in the other fields. */
+--- net-tools-1.60/hostname.c.gcc34 2004-03-30 15:58:12.979830341 +0200
++++ net-tools-1.60/hostname.c 2004-03-30 15:58:47.110380585 +0200
+@@ -98,6 +98,7 @@
+ fprintf(stderr, _("%s: name too long\n"), program_name);
+ break;
+ default:
++ ;
+ }
+ exit(1);
+ };
+@@ -117,6 +118,7 @@
+ fprintf(stderr, _("%s: name too long\n"), program_name);
+ break;
+ default:
++ ;
+ }
+ exit(1);
+ };
+@@ -180,6 +182,7 @@
+ printf("%s\n", hp->h_name);
+ break;
+ default:
++ ;
+ }
+ }
+
diff --git a/packages/net-tools/files/net-tools-1.60-hostname_man.patch b/packages/net-tools/files/net-tools-1.60-hostname_man.patch
new file mode 100644
index 0000000000..84a4051cdf
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-hostname_man.patch
@@ -0,0 +1,35 @@
+--- net-tools-1.60/man/en_US/hostname.1.gethostbyname 2005-10-14 11:33:41.000000000 +0200
++++ net-tools-1.60/man/en_US/hostname.1 2005-10-15 11:46:14.646697600 +0200
+@@ -99,6 +99,32 @@
+ complete FQDN of the system is returned with
+ .BR "hostname \-\-fqdn" .
+
++.LP
++The function
++.BR gethostname(2)
++is used to get the hostname. Only when the
++.BR "hostname \-s"
++is called will
++.BR gethostbyname(3)
++be called. The difference in
++.BR gethostname(2)
++and
++.BR gethostbyname(3)
++is that
++.BR gethostbyname(3)
++is network aware, so it consults
++.IR /etc/nsswitch.conf
++and
++.IR /etc/host.conf
++to decide whether to read information in
++.IR /etc/sysconfig/network
++or
++.IR /etc/hosts
++. To add another dimension to this,
++the
++.B hostname
++is also set when the network interface is brought up.
++
+ .SS "SET NAME"
+ When called with one argument or with the
+ .B \-\-file
diff --git a/packages/net-tools/files/net-tools-1.60-ifaceopt.patch b/packages/net-tools/files/net-tools-1.60-ifaceopt.patch
new file mode 100644
index 0000000000..a561d07986
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-ifaceopt.patch
@@ -0,0 +1,52 @@
+--- net-tools-1.60/netstat.c.ifaceopt 2005-03-01 12:11:43.695661632 +0100
++++ net-tools-1.60/netstat.c 2005-03-01 12:16:37.601981080 +0100
+@@ -1658,10 +1658,11 @@
+ {
+ fprintf(stderr, _("usage: netstat [-veenNcCF] [<Af>] -r netstat {-V|--version|-h|--help}\n"));
+ fprintf(stderr, _(" netstat [-vnNcaeol] [<Socket> ...]\n"));
+- fprintf(stderr, _(" netstat { [-veenNac] -i[<Iface>] | [-cnNe] -M | -s } [delay]\n\n"));
++ fprintf(stderr, _(" netstat { [-veenNac] -I[<Iface>] | [-veenNac] -i | [-cnNe] -M | -s } [delay]\n\n"));
+
+ fprintf(stderr, _(" -r, --route display routing table\n"));
+- fprintf(stderr, _(" -i, --interfaces=[<Iface>] display interface table\n"));
++ fprintf(stderr, _(" -I, --interfaces=[<Iface>] display interface table for <Iface>\n"));
++ fprintf(stderr, _(" -i, --interfaces display interface table\n"));
+ fprintf(stderr, _(" -g, --groups display multicast group memberships\n"));
+ fprintf(stderr, _(" -s, --statistics display networking statistics (like SNMP)\n"));
+ #if HAVE_FW_MASQUERADE
+@@ -1700,7 +1701,8 @@
+ {
+ AFTRANS_OPTS,
+ {"version", 0, 0, 'V'},
+- {"interfaces", 2, 0, 'i'},
++ {"interfaces", 2, 0, 'I'},
++ {"interfaces", 0, 0, 'i'},
+ {"help", 0, 0, 'h'},
+ {"route", 0, 0, 'r'},
+ #if HAVE_FW_MASQUERADE
+@@ -1738,7 +1740,8 @@
+ getroute_init(); /* Set up AF routing support */
+
+ afname[0] = '\0';
+- while ((i = getopt_long(argc, argv, "MCFA:acdegphi::nNorstuVv?wxl", longopts, &lop)) != EOF)
++
++ while ((i = getopt_long(argc, argv, "MCFA:acdegphiI::nNorstuVv?wxl", longopts, &lop)) != EOF)
+ switch (i) {
+ case -1:
+ break;
+@@ -1779,11 +1782,14 @@
+ case 'p':
+ flag_prg++;
+ break;
+- case 'i':
++ case 'I':
+ if (optarg && strcmp(optarg, "(null)"))
+ flag_int_name = strdup(optarg);
+ flag_int++;
+ break;
++ case 'i':
++ flag_int++;
++ break;
+ case 'n':
+ flag_not |= FLAG_NUM;
+ break;
diff --git a/packages/net-tools/files/net-tools-1.60-ifconfig.patch b/packages/net-tools/files/net-tools-1.60-ifconfig.patch
new file mode 100644
index 0000000000..a209bd4197
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-ifconfig.patch
@@ -0,0 +1,107 @@
+--- net-tools-1.60/ifconfig.c.new 2005-07-20 12:47:29.000000000 +0200
++++ net-tools-1.60/ifconfig.c 2005-07-20 12:54:57.000000000 +0200
+@@ -175,6 +175,32 @@
+ return (0);
+ }
+
++/** test is a specified flag is set */
++static int test_flag(char *ifname, short flags)
++{
++ struct ifreq ifr;
++ int fd;
++
++ if (strchr(ifname, ':')) {
++ /* This is a v4 alias interface. Downing it via a socket for
++ another AF may have bad consequences. */
++ fd = get_socket_for_af(AF_INET);
++ if (fd < 0) {
++ fprintf(stderr, _("No support for INET on this system.\n"));
++ return -1;
++ }
++ } else
++ fd = skfd;
++
++ safe_strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
++ if (ioctl(fd, SIOCGIFFLAGS, &ifr) < 0) {
++ fprintf(stderr, _("%s: ERROR while testing interface flags: %s\n"),
++ ifname, strerror(errno));
++ return -1;
++ }
++ return (ifr.ifr_flags & flags);
++}
++
+ static void usage(void)
+ {
+ fprintf(stderr, _("Usage:\n ifconfig [-a] [-v] [-s] <interface> [[<AF>] <address>]\n"));
+@@ -249,7 +275,7 @@
+ err = 1;
+ }
+ }
+- return 0;
++ return err;
+ }
+
+ int main(int argc, char **argv)
+@@ -415,6 +441,8 @@
+ }
+ if (!strcmp(*spp, "-promisc")) {
+ goterr |= clr_flag(ifr.ifr_name, IFF_PROMISC);
++ if (test_flag(ifr.ifr_name, IFF_PROMISC) > 0)
++ fprintf(stderr, _("Warning: Interface %s still in promisc mode... maybe other application is running?\n"), ifr.ifr_name);
+ spp++;
+ continue;
+ }
+@@ -425,6 +453,8 @@
+ }
+ if (!strcmp(*spp, "-multicast")) {
+ goterr |= clr_flag(ifr.ifr_name, IFF_MULTICAST);
++ if (test_flag(ifr.ifr_name, IFF_MULTICAST) > 0)
++ fprintf(stderr, _("Warning: Interface %s still in MULTICAST mode.\n"), ifr.ifr_name);
+ spp++;
+ continue;
+ }
+@@ -435,6 +465,8 @@
+ }
+ if (!strcmp(*spp, "-allmulti")) {
+ goterr |= clr_flag(ifr.ifr_name, IFF_ALLMULTI);
++ if (test_flag(ifr.ifr_name, IFF_MULTICAST) > 0)
++ fprintf(stderr, _("Warning: Interface %s still in ALLMULTI mode.\n"), ifr.ifr_name);
+ spp++;
+ continue;
+ }
+@@ -456,6 +488,8 @@
+ }
+ if (!strcmp(*spp, "-dynamic")) {
+ goterr |= clr_flag(ifr.ifr_name, IFF_DYNAMIC);
++ if (test_flag(ifr.ifr_name, IFF_MULTICAST) > 0)
++ fprintf(stderr, _("Warning: Interface %s still in DYNAMIC mode.\n"), ifr.ifr_name);
+ spp++;
+ continue;
+ }
+@@ -513,6 +547,8 @@
+
+ if (!strcmp(*spp, "-broadcast")) {
+ goterr |= clr_flag(ifr.ifr_name, IFF_BROADCAST);
++ if (test_flag(ifr.ifr_name, IFF_MULTICAST) > 0)
++ fprintf(stderr, _("Warning: Interface %s still in BROADCAST mode.\n"), ifr.ifr_name);
+ spp++;
+ continue;
+ }
+@@ -569,7 +605,7 @@
+ continue;
+ }
+ didnetmask++;
+- goterr = set_netmask(ap->fd, &ifr, &sa, dobcast);
++ goterr |= set_netmask(ap->fd, &ifr, &sa, dobcast);
+ spp++;
+ continue;
+ }
+@@ -640,6 +676,8 @@
+ }
+ if (!strcmp(*spp, "-pointopoint")) {
+ goterr |= clr_flag(ifr.ifr_name, IFF_POINTOPOINT);
++ if (test_flag(ifr.ifr_name, IFF_MULTICAST) > 0)
++ fprintf(stderr, _("Warning: Interface %s still in POINTOPOINT mode.\n"), ifr.ifr_name);
+ spp++;
+ continue;
+ }
diff --git a/packages/net-tools/files/net-tools-1.60-ifconfig_ib.patch b/packages/net-tools/files/net-tools-1.60-ifconfig_ib.patch
new file mode 100644
index 0000000000..b5a234f25d
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-ifconfig_ib.patch
@@ -0,0 +1,202 @@
+--- net-tools-1.60/config.in.ifconfig_ib 2000-05-21 16:32:12.000000000 +0200
++++ net-tools-1.60/config.in 2005-02-09 10:36:26.000000000 +0100
+@@ -82,6 +82,7 @@
+ bool '(Cisco)-HDLC/LAPB support' HAVE_HWHDLCLAPB n
+ bool 'IrDA support' HAVE_HWIRDA y
+ bool 'Econet hardware support' HAVE_HWEC n
++bool 'InfiniBand hardware support' HAVE_HWIB y
+ *
+ *
+ * Other Features.
+--- net-tools-1.60/lib/hw.c.ifconfig_ib 2000-05-20 20:27:25.000000000 +0200
++++ net-tools-1.60/lib/hw.c 2005-02-09 10:36:26.000000000 +0100
+@@ -73,6 +73,8 @@
+
+ extern struct hwtype ec_hwtype;
+
++extern struct hwtype ib_hwtype;
++
+ static struct hwtype *hwtypes[] =
+ {
+
+@@ -144,6 +146,9 @@
+ #if HAVE_HWX25
+ &x25_hwtype,
+ #endif
++#if HAVE_HWIB
++ &ib_hwtype,
++#endif
+ &unspec_hwtype,
+ NULL
+ };
+@@ -217,6 +222,9 @@
+ #if HAVE_HWEC
+ ec_hwtype.title = _("Econet");
+ #endif
++#if HAVE_HWIB
++ ib_hwtype.title = _("InfiniBand");
++#endif
+ sVhwinit = 1;
+ }
+
+--- net-tools-1.60/lib/ib.c.ifconfig_ib 2005-02-09 10:36:26.000000000 +0100
++++ net-tools-1.60/lib/ib.c 2005-02-09 10:42:21.000000000 +0100
+@@ -0,0 +1,147 @@
++/*
++ * lib/ib.c This file contains an implementation of the "Infiniband"
++ * support functions.
++ *
++ * Version: $Id: ib.c,v 1.1 2005/02/06 11:00:47 tduffy Exp $
++ *
++ * Author: Fred N. van Kempen, <waltje@uwalt.nl.mugnet.org>
++ * Copyright 1993 MicroWalt Corporation
++ * Tom Duffy <tduffy@sun.com>
++ *
++ * 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.
++ */
++#include "config.h"
++
++#if HAVE_HWIB
++#include <sys/types.h>
++#include <sys/socket.h>
++#include <net/if_arp.h>
++/*#include <linux/if_infiniband.h> - not in gcc-kernheaders*/
++#include <stdlib.h>
++#include <stdio.h>
++#include <errno.h>
++#include <ctype.h>
++#include <string.h>
++#include <unistd.h>
++#include "net-support.h"
++#include "pathnames.h"
++#include "intl.h"
++#include "util.h"
++
++extern struct hwtype ib_hwtype;
++
++#define INFINIBAND_ALEN 20
++
++/* Display an InfiniBand address in readable format. */
++static char *pr_ib(unsigned char *ptr)
++{
++ static char buff[128];
++ char *pos;
++ unsigned int i;
++
++ pos = buff;
++ for (i = 0; i < INFINIBAND_ALEN; i++) {
++ pos += sprintf(pos, "%02X:", (*ptr++ & 0377));
++ }
++ buff[strlen(buff) - 1] = '\0';
++
++ /* snprintf(buff, sizeof(buff), "%02X:%02X:%02X:%02X:%02X:%02X",
++ (ptr[0] & 0377), (ptr[1] & 0377), (ptr[2] & 0377),
++ (ptr[3] & 0377), (ptr[4] & 0377), (ptr[5] & 0377)
++ );
++ */
++ return (buff);
++}
++
++
++/* Input an Infiniband address and convert to binary. */
++static int in_ib(char *bufp, struct sockaddr *sap)
++{
++ unsigned char *ptr;
++ char c, *orig;
++ int i;
++ unsigned val;
++
++ sap->sa_family = ib_hwtype.type;
++ ptr = sap->sa_data;
++
++ i = 0;
++ orig = bufp;
++ while ((*bufp != '\0') && (i < INFINIBAND_ALEN)) {
++ val = 0;
++ c = *bufp++;
++ if (isdigit(c))
++ val = c - '0';
++ else if (c >= 'a' && c <= 'f')
++ val = c - 'a' + 10;
++ else if (c >= 'A' && c <= 'F')
++ val = c - 'A' + 10;
++ else {
++#ifdef DEBUG
++ fprintf(stderr, _("in_ib(%s): invalid infiniband address!\n"), orig);
++#endif
++ errno = EINVAL;
++ return (-1);
++ }
++ val <<= 4;
++ c = *bufp;
++ if (isdigit(c))
++ val |= c - '0';
++ else if (c >= 'a' && c <= 'f')
++ val |= c - 'a' + 10;
++ else if (c >= 'A' && c <= 'F')
++ val |= c - 'A' + 10;
++ else if (c == ':' || c == 0)
++ val >>= 4;
++ else {
++#ifdef DEBUG
++ fprintf(stderr, _("in_ib(%s): invalid infiniband address!\n"), orig);
++#endif
++ errno = EINVAL;
++ return (-1);
++ }
++ if (c != 0)
++ bufp++;
++ *ptr++ = (unsigned char) (val & 0377);
++ i++;
++
++ /* We might get a semicolon here - not required. */
++ if (*bufp == ':') {
++ if (i == INFINIBAND_ALEN) {
++#ifdef DEBUG
++ fprintf(stderr, _("in_ib(%s): trailing : ignored!\n"),
++ orig)
++#endif
++ ; /* nothing */
++ }
++ bufp++;
++ }
++ }
++
++ /* That's it. Any trailing junk? */
++ if ((i == INFINIBAND_ALEN) && (*bufp != '\0')) {
++#ifdef DEBUG
++ fprintf(stderr, _("in_ib(%s): trailing junk!\n"), orig);
++ errno = EINVAL;
++ return (-1);
++#endif
++ }
++#ifdef DEBUG
++ fprintf(stderr, "in_ib(%s): %s\n", orig, pr_ib(sap->sa_data));
++#endif
++
++ return (0);
++}
++
++
++struct hwtype ib_hwtype =
++{
++ "infiniband", NULL, ARPHRD_INFINIBAND, INFINIBAND_ALEN,
++ pr_ib, in_ib, NULL
++};
++
++#endif /* HAVE_HWIB */
+--- net-tools-1.60/lib/Makefile.ifconfig_ib 2000-10-28 12:59:42.000000000 +0200
++++ net-tools-1.60/lib/Makefile 2005-02-09 10:36:26.000000000 +0100
+@@ -16,7 +16,7 @@
+ #
+
+
+-HWOBJS = hw.o loopback.o slip.o ether.o ax25.o ppp.o arcnet.o tr.o tunnel.o frame.o sit.o rose.o ash.o fddi.o hippi.o hdlclapb.o strip.o irda.o ec_hw.o x25.o
++HWOBJS = hw.o loopback.o slip.o ether.o ax25.o ppp.o arcnet.o tr.o tunnel.o frame.o sit.o rose.o ash.o fddi.o hippi.o hdlclapb.o strip.o irda.o ec_hw.o x25.o ib.o
+ AFOBJS = unix.o inet.o inet6.o ax25.o ipx.o ddp.o ipx.o netrom.o af.o rose.o econet.o x25.o
+ AFGROBJS = inet_gr.o inet6_gr.o ipx_gr.o ddp_gr.o netrom_gr.o ax25_gr.o rose_gr.o getroute.o x25_gr.o
+ AFSROBJS = inet_sr.o inet6_sr.o netrom_sr.o ipx_sr.o setroute.o x25_sr.o
diff --git a/packages/net-tools/files/net-tools-1.60-inet6-lookup.patch b/packages/net-tools/files/net-tools-1.60-inet6-lookup.patch
new file mode 100644
index 0000000000..3d4854a6fb
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-inet6-lookup.patch
@@ -0,0 +1,81 @@
+--- net-tools-1.60/lib/inet6.c.inet6-lookup 2000-10-28 13:04:00.000000000 +0200
++++ net-tools-1.60/lib/inet6.c 2003-05-21 15:28:50.000000000 +0200
+@@ -133,28 +133,9 @@
+ }
+
+
+-static int INET6_getsock(char *bufp, struct sockaddr *sap)
+-{
+- struct sockaddr_in6 *sin6;
+-
+- sin6 = (struct sockaddr_in6 *) sap;
+- sin6->sin6_family = AF_INET6;
+- sin6->sin6_port = 0;
+-
+- if (inet_pton(AF_INET6, bufp, sin6->sin6_addr.s6_addr) <= 0)
+- return (-1);
+-
+- return 16; /* ?;) */
+-}
+-
+ static int INET6_input(int type, char *bufp, struct sockaddr *sap)
+ {
+- switch (type) {
+- case 1:
+- return (INET6_getsock(bufp, sap));
+- default:
+- return (INET6_resolve(bufp, (struct sockaddr_in6 *) sap));
+- }
++ return (INET6_resolve(bufp, (struct sockaddr_in6 *) sap));
+ }
+
+
+--- net-tools-1.60/lib/inet6_gr.c.inet6-lookup 2001-04-01 16:48:06.000000000 +0200
++++ net-tools-1.60/lib/inet6_gr.c 2003-05-21 15:28:50.000000000 +0200
+@@ -100,7 +100,7 @@
+ addr6p[4], addr6p[5], addr6p[6], addr6p[7]);
+ inet6_aftype.input(1, addr6, (struct sockaddr *) &saddr6);
+ snprintf(addr6, sizeof(addr6), "%s/%d",
+- inet6_aftype.sprint((struct sockaddr *) &saddr6, 1),
++ inet6_aftype.sprint((struct sockaddr *) &saddr6, numeric),
+ prefix_len);
+
+ /* Fetch and resolve the nexthop address. */
+@@ -109,7 +109,7 @@
+ naddr6p[4], naddr6p[5], naddr6p[6], naddr6p[7]);
+ inet6_aftype.input(1, naddr6, (struct sockaddr *) &snaddr6);
+ snprintf(naddr6, sizeof(naddr6), "%s",
+- inet6_aftype.sprint((struct sockaddr *) &snaddr6, 1));
++ inet6_aftype.sprint((struct sockaddr *) &snaddr6, numeric));
+
+ /* Decode the flags. */
+ strcpy(flags, "U");
+--- net-tools-1.60/lib/inet6_sr.c.inet6-lookup 2000-05-22 23:18:37.000000000 +0200
++++ net-tools-1.60/lib/inet6_sr.c 2003-05-21 15:28:50.000000000 +0200
+@@ -63,7 +63,7 @@
+ if (*args == NULL)
+ return (usage());
+
+- strcpy(target, *args++);
++ safe_strncpy(target, *args++, sizeof(target));
+ if (!strcmp(target, "default")) {
+ prefix_len = 0;
+ memset(&sa6, 0, sizeof(sa6));
+@@ -112,7 +112,7 @@
+ return (usage());
+ if (rt.rtmsg_flags & RTF_GATEWAY)
+ return (usage());
+- strcpy(gateway, *args);
++ safe_strncpy(gateway, *args, sizeof(gateway));
+ if (inet6_aftype.input(1, gateway,
+ (struct sockaddr *) &sa6) < 0) {
+ inet6_aftype.herror(gateway);
+@@ -152,7 +152,7 @@
+ }
+ if (devname) {
+ memset(&ifr, 0, sizeof(ifr));
+- strcpy(ifr.ifr_name, devname);
++ safe_strncpy(ifr.ifr_name, devname, sizeof(ifr.ifr_name));
+
+ if (ioctl(skfd, SIOGIFINDEX, &ifr) < 0) {
+ perror("SIOGIFINDEX");
diff --git a/packages/net-tools/files/net-tools-1.60-interface.patch b/packages/net-tools/files/net-tools-1.60-interface.patch
new file mode 100644
index 0000000000..3a1bc910aa
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-interface.patch
@@ -0,0 +1,110 @@
+--- net-tools-1.60/netstat.c.interface 2003-08-25 17:06:30.000000000 +0200
++++ net-tools-1.60/netstat.c 2003-08-25 17:08:41.000000000 +0200
+@@ -129,6 +129,7 @@
+ #define E_IOCTL -3
+
+ int flag_int = 0;
++char *flag_int_name = NULL;
+ int flag_rou = 0;
+ int flag_mas = 0;
+ int flag_sta = 0;
+@@ -1441,6 +1442,7 @@
+ static int iface_info(void)
+ {
+ static int count=0;
++ struct interface *ife = NULL;
+
+ if (skfd < 0) {
+ if ((skfd = sockets_open(0)) < 0) {
+@@ -1455,7 +1457,11 @@
+ printf(_("Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg\n"));
+ }
+
+- if (for_all_interfaces(do_if_print, &flag_all) < 0) {
++ if (flag_int_name) {
++ ife = lookup_interface(flag_int_name);
++ do_if_print(ife, &flag_all);
++ }
++ else if (for_all_interfaces(do_if_print, &flag_all) < 0) {
+ perror(_("missing interface information"));
+ exit(1);
+ }
+@@ -1481,30 +1487,31 @@
+ {
+ fprintf(stderr, _("usage: netstat [-veenNcCF] [<Af>] -r netstat {-V|--version|-h|--help}\n"));
+ fprintf(stderr, _(" netstat [-vnNcaeol] [<Socket> ...]\n"));
+- fprintf(stderr, _(" netstat { [-veenNac] -i | [-cnNe] -M | -s } [delay]\n\n"));
++ fprintf(stderr, _(" netstat { [-veenNac] -i[<Iface>] | [-cnNe] -M | -s } [delay]\n\n"));
+
+- fprintf(stderr, _(" -r, --route display routing table\n"));
+- fprintf(stderr, _(" -i, --interfaces display interface table\n"));
+- fprintf(stderr, _(" -g, --groups display multicast group memberships\n"));
+- fprintf(stderr, _(" -s, --statistics display networking statistics (like SNMP)\n"));
++ fprintf(stderr, _(" -r, --route display routing table\n"));
++ fprintf(stderr, _(" -i, --interfaces=[<Iface>] display interface table\n"));
++ fprintf(stderr, _(" -g, --groups display multicast group memberships\n"));
++ fprintf(stderr, _(" -s, --statistics display networking statistics (like SNMP)\n"));
+ #if HAVE_FW_MASQUERADE
+- fprintf(stderr, _(" -M, --masquerade display masqueraded connections\n\n"));
++ fprintf(stderr, _(" -M, --masquerade display masqueraded connections\n\n"));
+ #endif
+- fprintf(stderr, _(" -v, --verbose be verbose\n"));
+- fprintf(stderr, _(" -n, --numeric don't resolve names\n"));
+- fprintf(stderr, _(" --numeric-hosts don't resolve host names\n"));
+- fprintf(stderr, _(" --numeric-ports don't resolve port names\n"));
+- fprintf(stderr, _(" --numeric-users don't resolve user names\n"));
+- fprintf(stderr, _(" -N, --symbolic resolve hardware names\n"));
+- fprintf(stderr, _(" -e, --extend display other/more information\n"));
+- fprintf(stderr, _(" -p, --programs display PID/Program name for sockets\n"));
+- fprintf(stderr, _(" -c, --continuous continuous listing\n\n"));
+- fprintf(stderr, _(" -l, --listening display listening server sockets\n"));
+- fprintf(stderr, _(" -a, --all, --listening display all sockets (default: connected)\n"));
+- fprintf(stderr, _(" -o, --timers display timers\n"));
+- fprintf(stderr, _(" -F, --fib display Forwarding Information Base (default)\n"));
+- fprintf(stderr, _(" -C, --cache display routing cache instead of FIB\n\n"));
++ fprintf(stderr, _(" -v, --verbose be verbose\n"));
++ fprintf(stderr, _(" -n, --numeric don't resolve names\n"));
++ fprintf(stderr, _(" --numeric-hosts don't resolve host names\n"));
++ fprintf(stderr, _(" --numeric-ports don't resolve port names\n"));
++ fprintf(stderr, _(" --numeric-users don't resolve user names\n"));
++ fprintf(stderr, _(" -N, --symbolic resolve hardware names\n"));
++ fprintf(stderr, _(" -e, --extend display other/more information\n"));
++ fprintf(stderr, _(" -p, --programs display PID/Program name for sockets\n"));
++ fprintf(stderr, _(" -c, --continuous continuous listing\n\n"));
++ fprintf(stderr, _(" -l, --listening display listening server sockets\n"));
++ fprintf(stderr, _(" -a, --all, --listening display all sockets (default: connected)\n"));
++ fprintf(stderr, _(" -o, --timers display timers\n"));
++ fprintf(stderr, _(" -F, --fib display Forwarding Information Base (default)\n"));
++ fprintf(stderr, _(" -C, --cache display routing cache instead of FIB\n\n"));
+
++ fprintf(stderr, _(" <Iface>: Name of interface to monitor/list.\n"));
+ fprintf(stderr, _(" <Socket>={-t|--tcp} {-u|--udp} {-w|--raw} {-x|--unix} --ax25 --ipx --netrom\n"));
+ fprintf(stderr, _(" <AF>=Use '-A <af>' or '--<af>'; default: %s\n"), DFLT_AF);
+ fprintf(stderr, _(" List of possible address families (which support routing):\n"));
+@@ -1522,7 +1529,7 @@
+ {
+ AFTRANS_OPTS,
+ {"version", 0, 0, 'V'},
+- {"interfaces", 0, 0, 'i'},
++ {"interfaces", 2, 0, 'i'},
+ {"help", 0, 0, 'h'},
+ {"route", 0, 0, 'r'},
+ #if HAVE_FW_MASQUERADE
+@@ -1560,7 +1567,7 @@
+ getroute_init(); /* Set up AF routing support */
+
+ afname[0] = '\0';
+- while ((i = getopt_long(argc, argv, "MCFA:acdegphinNorstuVv?wxl", longopts, &lop)) != EOF)
++ while ((i = getopt_long(argc, argv, "MCFA:acdegphi::nNorstuVv?wxl", longopts, &lop)) != EOF)
+ switch (i) {
+ case -1:
+ break;
+@@ -1602,6 +1609,8 @@
+ flag_prg++;
+ break;
+ case 'i':
++ if (optarg && strcmp(optarg, "(null)"))
++ flag_int_name = strdup(optarg);
+ flag_int++;
+ break;
+ case 'n':
diff --git a/packages/net-tools/files/net-tools-1.60-interface_stack.patch b/packages/net-tools/files/net-tools-1.60-interface_stack.patch
new file mode 100644
index 0000000000..c16f539753
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-interface_stack.patch
@@ -0,0 +1,115 @@
+Bugzilla Bug 176714 – *** stack smashing detected ***: /sbin/ifconfig terminated
+
+--- lib/interface.c-old 2005-12-30 11:08:15.000000000 -0800
++++ lib/interface.c 2005-12-30 11:17:02.000000000 -0800
+@@ -201,10 +201,11 @@
+ return err;
+ }
+
+-static char *get_name(char *name, char *p)
++static char *get_name(char **namep, char *p)
+ {
+ while (isspace(*p))
+ p++;
++ char *name = *namep = p;
+ while (*p) {
+ if (isspace(*p))
+ break;
+@@ -305,9 +306,10 @@
+ {
+ static int proc_read;
+ FILE *fh;
+- char buf[512];
+ struct interface *ife;
+ int err;
++ char *line = NULL;
++ size_t linelen = 0;
+
+ if (proc_read)
+ return 0;
+@@ -320,8 +322,11 @@
+ _PATH_PROCNET_DEV, strerror(errno));
+ return if_readconf();
+ }
+- fgets(buf, sizeof buf, fh); /* eat line */
+- fgets(buf, sizeof buf, fh);
++ if (getline(&line, &linelen, fh) == -1 /* eat line */
++ || getline(&line, &linelen, fh) == -1) {
++ err = -1;
++ goto out;
++ }
+
+ #if 0 /* pretty, but can't cope with missing fields */
+ fmt = proc_gen_fmt(_PATH_PROCNET_DEV, 1, fh,
+@@ -346,13 +351,13 @@
+ if (!fmt)
+ return -1;
+ #else
+- procnetdev_vsn = procnetdev_version(buf);
++ procnetdev_vsn = procnetdev_version(line);
+ #endif
+
+ err = 0;
+- while (fgets(buf, sizeof buf, fh)) {
+- char *s, name[IFNAMSIZ];
+- s = get_name(name, buf);
++ while (getline(&line, &linelen, fh) != -1) {
++ char *s, *name;
++ s = get_name(&name, line);
+ ife = add_interface(name);
+ get_dev_fields(s, ife);
+ ife->statistics_valid = 1;
+@@ -368,6 +373,8 @@
+ #if 0
+ free(fmt);
+ #endif
++ out:
++ free(line);
+ fclose(fh);
+ return err;
+ }
+@@ -376,8 +383,9 @@
+ static int if_readlist_rep(char *target, struct interface *ife)
+ {
+ FILE *fh;
+- char buf[512];
+ int err;
++ char *line = NULL;
++ size_t linelen = 0;
+
+ fh = fopen(_PATH_PROCNET_DEV, "r");
+ if (!fh) {
+@@ -385,15 +393,18 @@
+ _PATH_PROCNET_DEV, strerror(errno));
+ return if_readconf();
+ }
+- fgets(buf, sizeof buf, fh); /* eat line */
+- fgets(buf, sizeof buf, fh);
++ if (getline(&line, &linelen, fh) == -1 /* eat line */
++ || getline(&line, &linelen, fh) == -1) {
++ err = -1;
++ goto out;
++ }
+
+- procnetdev_vsn = procnetdev_version(buf);
++ procnetdev_vsn = procnetdev_version(line);
+
+ err = 0;
+- while (fgets(buf, sizeof buf, fh)) {
+- char *s, name[IFNAMSIZ];
+- s = get_name(name, buf);
++ while (getline(&line, &linelen, fh) != -1) {
++ char *s, *name;
++ s = get_name(&name, line);
+ get_dev_fields(s, ife);
+ if (target && !strcmp(target,name))
+ {
+@@ -406,6 +417,8 @@
+ err = -1;
+ }
+
++ out:
++ free(line);
+ fclose(fh);
+ return err;
+ }
diff --git a/packages/net-tools/files/net-tools-1.60-ipx.patch b/packages/net-tools/files/net-tools-1.60-ipx.patch
new file mode 100644
index 0000000000..d4458b9462
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-ipx.patch
@@ -0,0 +1,36 @@
+diff -urN net-tools-1.60/lib/ipx_gr.c net-tools-1.60.new/lib/ipx_gr.c
+--- net-tools-1.60/lib/ipx_gr.c 2000-10-28 12:59:42.000000000 +0200
++++ net-tools-1.60.new/lib/ipx_gr.c 2003-05-20 10:54:37.000000000 +0200
+@@ -64,7 +64,7 @@
+ continue;
+
+ /* Fetch and resolve the Destination */
+- (void) ap->input(5, net, &sa);
++ (void) ap->input(1, net, &sa);
+ strcpy(net, ap->sprint(&sa, numeric));
+
+ /* Fetch and resolve the Router Net */
+diff -urN net-tools-1.60/netstat.c net-tools-1.60.new/netstat.c
+--- net-tools-1.60/netstat.c 2003-05-20 11:00:57.000000000 +0200
++++ net-tools-1.60.new/netstat.c 2003-05-20 10:58:25.000000000 +0200
+@@ -1412,13 +1412,13 @@
+ }
+
+ /* Fetch and resolve the Source */
+- (void) ap->input(4, sad, &sa);
++ (void) ap->input(0, sad, &sa);
+ safe_strncpy(buf, ap->sprint(&sa, flag_not), sizeof(buf));
+ snprintf(sad, sizeof(sad), "%s:%04X", buf, sport);
+
+ if (!nc) {
+ /* Fetch and resolve the Destination */
+- (void) ap->input(4, dad, &sa);
++ (void) ap->input(0, dad, &sa);
+ safe_strncpy(buf, ap->sprint(&sa, flag_not), sizeof(buf));
+ snprintf(dad, sizeof(dad), "%s:%04X", buf, dport);
+ } else
+diff -urN net-tools-1.60/version.h net-tools-1.60.new/version.h
+--- net-tools-1.60/version.h 1970-01-01 01:00:00.000000000 +0100
++++ net-tools-1.60.new/version.h 2003-05-19 16:07:49.000000000 +0200
+@@ -0,0 +1 @@
++#define RELEASE "net-tools 1.60"
diff --git a/packages/net-tools/files/net-tools-1.60-isofix.patch b/packages/net-tools/files/net-tools-1.60-isofix.patch
new file mode 100644
index 0000000000..4bbaff18a9
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-isofix.patch
@@ -0,0 +1,33 @@
+--- net-tools-1.60/po/de.po.isofix 2000-10-28 12:59:43.000000000 +0200
++++ net-tools-1.60/po/de.po 2005-01-10 11:29:29.407639208 +0100
+@@ -9,7 +9,7 @@
+ "Last-Translator: Ralf Bächle <ralf@gnu.org>\n"
+ "Language-Team:\n"
+ "MIME-Version: 1.0\n"
+-"Content-Type: text/plain; charset=iso8859-1\n"
++"Content-Type: text/plain; charset=iso-8859-1\n"
+ "Content-Transfer-Encoding: 8bit\n"
+
+ #: ../arp.c:110 ../arp.c:269
+--- net-tools-1.60/po/fr.po.isofix 2000-02-20 22:47:00.000000000 +0100
++++ net-tools-1.60/po/fr.po 2005-01-10 11:29:23.613520048 +0100
+@@ -9,7 +9,7 @@
+ "Last-Translator: J.M.Vansteene <vanstee@worldnet.fr>\n"
+ "Language-Team:\n"
+ "MIME-Version: 1.0\n"
+-"Content-Type: text/plain; charset=iso8859-1\n"
++"Content-Type: text/plain; charset=iso-8859-1\n"
+ "Content-Transfer-Encoding: 8bit\n"
+
+ #: ../arp.c:110 ../arp.c:269
+--- net-tools-1.60/po/pt_BR.po.isofix 2000-02-20 22:47:06.000000000 +0100
++++ net-tools-1.60/po/pt_BR.po 2005-01-10 11:29:16.294632688 +0100
+@@ -14,7 +14,7 @@
+ "PO-Revision-Date: 1999-03-01 02:38+0100\n"
+ "Last-Translator: Arnaldo Carvalho de Melo <acme@conectiva.com.br>\n"
+ "MIME-Version: 1.0\n"
+-"Content-Type: text/plain; charset=ISO8859-9\n"
++"Content-Type: text/plain; charset=iso-8859-9\n"
+ "Content-Transfer-Encoding: 8bit\n"
+
+ #: ../arp.c:110 ../arp.c:269
diff --git a/packages/net-tools/files/net-tools-1.60-man.patch b/packages/net-tools/files/net-tools-1.60-man.patch
new file mode 100644
index 0000000000..2deac4a46b
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-man.patch
@@ -0,0 +1,132 @@
+--- net-tools-1.60/man/en_US/ifconfig.8.man 2000-10-28 12:59:42.000000000 +0200
++++ net-tools-1.60/man/en_US/ifconfig.8 2003-05-22 16:58:41.000000000 +0200
+@@ -177,7 +177,7 @@
+ command.
+ .LP
+ Interrupt problems with Ethernet device drivers fail with EAGAIN. See
+-.I http://cesdis.gsfc.nasa.gov/linux/misc/irq-conflict.html
++.I http://www.scyld.com/expert/irq-conflict.html
+ for more information.
+ .SH FILES
+ .I /proc/net/socket
+--- net-tools-1.60/man/en_US/hostname.1.man 1999-02-27 13:11:14.000000000 +0100
++++ net-tools-1.60/man/en_US/hostname.1 2003-05-22 17:04:30.000000000 +0200
+@@ -10,8 +10,6 @@
+ nisdomainname \- show or set system's NIS/YP domain name
+ .br
+ ypdomainname \- show or set the system's NIS/YP domain name
+-.br
+-nodename \- show or set the system's DECnet node name
+
+ .SH SYNOPSIS
+ .B hostname
+@@ -96,12 +94,6 @@
+ function. This is also known as the YP/NIS domain name of the system.
+
+ .LP
+-.B nodename
+-will print the DECnet node name of the system as returned by the
+-.BR getnodename (2)
+-function.
+-
+-.LP
+ .B dnsdomainname
+ will print the domain part of the FQDN (Fully Qualified Domain Name). The
+ complete FQDN of the system is returned with
+@@ -184,11 +176,6 @@
+ .I "\-i, \-\-ip-address"
+ Display the IP address(es) of the host.
+ .TP
+-.I "\-n, \-\-node"
+-Display the DECnet node name. If a parameter is given (or
+-.B \-\-file name
+-) the root can also set a new node name.
+-.TP
+ .I "\-s, \-\-short"
+ Display the short host name. This is the host name cut at the first dot.
+ .TP
+--- net-tools-1.60/man/fr_FR/hostname.1.man 1999-04-18 21:23:46.000000000 +0200
++++ net-tools-1.60/man/fr_FR/hostname.1 2003-05-22 17:05:04.000000000 +0200
+@@ -9,8 +9,6 @@
+ nisdomainname \- affiche ou définit le nom de domaine NIS/YP du système
+ .br
+ ypdomainname \- affiche ou définit le nom de domaine NIS/YP du système
+-.br
+-nodename \- affiche ou définit le nom de domaine DECnet du système
+
+ .SH SYNOPSIS
+ .B hostname
+@@ -87,14 +85,6 @@
+ .BR getdomainname (2)
+ . Ceci est connu comme nom de domaine YP/NIS du système.
+
+-
+-.LP
+-.B nodename
+-fournit le nom de noeud DECnet du système tel qu'il est retourné par la
+-fonction
+-.BR getnodename (2)
+-.
+-
+ .LP
+ .B dnsdomainname
+ fournit la partie domaine du nom complètement qualifié - FQDN (Fully
+@@ -180,11 +170,6 @@
+ .I "\-i, \-\-ip-address"
+ Affiche la (les) adresse(s) IP de l'hôte.
+ .TP
+-.I "\-n, \-\-node"
+-Affiche le nom de noeud DECnet. Si un paramètre est fourni (ou
+-.B \-\-file nom_fichier
+-) le super-utilisateur peut également définir un nouveau nom de neud.
+-.TP
+ .I "\-s, \-\-short"
+ Affiche le nom d'hôte en format court. Il s'agit du nom d'hôte coupé au
+ premier point.
+--- net-tools-1.60/man/de_DE/hostname.1.man 1999-03-15 21:31:16.000000000 +0100
++++ net-tools-1.60/man/de_DE/hostname.1 2003-05-22 17:06:01.000000000 +0200
+@@ -15,8 +15,6 @@
+ nisdomainname \- den NIS/YP Domainnamen anzeigen oder setzen
+ .br
+ ypdomainname \- den NIS/YP Domainnamen anzeigen oder setzen
+-.br
+-nodename \- den DECnet-Knotennamen anzeigen oder setzen
+
+ .SH SYNOPSIS
+ .B hostname
+@@ -101,12 +99,6 @@
+ des Systems genannt.
+
+ .LP
+-.B nodename
+-druckt den DECnet-Knotennamen des Systems, wie er von der
+-.BR getnodename (2)
+-Function ermittelt wird, aus.
+-
+-.LP
+ .B dnsdomainname
+ druckt den Domainteil des FQDN (Fully Qualified Domain Name oder zu deutsch
+ vollst\(:andig spezifizierter Domainname) aus. Der vollst\(:andige FQDN
+@@ -117,8 +109,8 @@
+ .SS "NAME SETZEN"
+ Wenn mit nur einem Argument oder mit der
+ .B \-\-file
+-Option aufgerufen, dann setzen diese Kommandos den Rechnernamen, den NIS/YP
+-Domainnamen oder den DECnet-Knotennamen.
++Option aufgerufen, dann setzen diese Kommandos den Rechnernamen oder den NIS/YP
++Domainnamen.
+
+ .LP
+ Nur der Superuser darf den Namen \(:andern.
+@@ -198,11 +190,6 @@
+ .I "\-i, \-\-ip-address"
+ Die IP-Adresse(n) des Rechners anzeigen und beenden.
+ .TP
+-.I "\-n, \-\-node"
+-Den DECnet-Knotennamen anzeigen. Wenn ein Argument oder die
+-.B \-\-file name
+-Option angegeben wird, dann kann Root auch einen neuen Knotennamen setzen.
+-.TP
+ .I "\-s, \-\-short"
+ Den Kurznamen anzeigen. Dies ist der ab dem ersten Punkt abgeschnittene
+ Rechnername.
diff --git a/packages/net-tools/files/net-tools-1.60-manydevs.patch b/packages/net-tools/files/net-tools-1.60-manydevs.patch
new file mode 100644
index 0000000000..d07ffbacb3
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-manydevs.patch
@@ -0,0 +1,13 @@
+--- lib/nstrcmp.c.bak Fri Apr 12 00:15:01 2002
++++ lib/nstrcmp.c Fri Apr 12 00:15:29 2002
+@@ -16,8 +16,8 @@
+ b++;
+ }
+ if (isdigit(*a)) {
+- if (!isdigit(*b))
+- return -1;
++ if (!isdigit(*b))
++ return 1;
+ while (a > astr) {
+ a--;
+ if (!isdigit(*a)) {
diff --git a/packages/net-tools/files/net-tools-1.60-mii-tool-obsolete.patch b/packages/net-tools/files/net-tools-1.60-mii-tool-obsolete.patch
new file mode 100644
index 0000000000..efb7f27ad7
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-mii-tool-obsolete.patch
@@ -0,0 +1,25 @@
+--- net-tools-1.60/man/en_US/mii-tool.8.obsolete 2000-05-21 16:21:38.000000000 +0200
++++ net-tools-1.60/man/en_US/mii-tool.8 2004-11-11 10:45:51.155113000 +0100
+@@ -18,6 +18,12 @@
+ [\fB\-F\fR, \fB\-\-force=\fImedia\fR]
+ .RI [ "interface\ ..." ]
+
++.SH NOTE
++.P
++This program is obsolete. Valid media are only \fB100baseT4\fR,
++\fB100baseTx-FD\fR,\fB100baseTx-HD\fR, \fB10baseT-FD\fR and
++\fB10baseT-HD\fR ethernet cards. For replacement check \fBethtool\fB.
++
+ .SH DESCRIPTION
+ This utility checks or sets the status of a network interface's Media
+ Independent Interface (MII) unit. Most fast ethernet adapters use an
+@@ -72,6 +78,9 @@
+ commas. Valid media are \fB100baseT4\fR, \fB100baseTx-FD\fR,
+ \fB100baseTx-HD\fR, \fB10baseT-FD\fR, and \fB10baseT-HD\fR.
+
++.SH SEE ALSO
++ethtool(8)
++
+ .SH AUTHORS
+ David Hinds \- dhinds@pcmcia.sourceforge.org
+ .br
diff --git a/packages/net-tools/files/net-tools-1.60-miiioctl.patch b/packages/net-tools/files/net-tools-1.60-miiioctl.patch
new file mode 100644
index 0000000000..4859273ede
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-miiioctl.patch
@@ -0,0 +1,17 @@
+--- net-tools-1.60/include/mii.h.bar Tue Jul 31 11:49:39 2001
++++ net-tools-1.60/include/mii.h Tue Jul 31 11:49:33 2001
+@@ -11,11 +11,9 @@
+
+ /* network interface ioctl's for MII commands */
+ #ifndef SIOCGMIIPHY
+-#define SIOCGMIIPHY (SIOCDEVPRIVATE) /* Read from current PHY */
+-#define SIOCGMIIREG (SIOCDEVPRIVATE+1) /* Read any PHY register */
+-#define SIOCSMIIREG (SIOCDEVPRIVATE+2) /* Write any PHY register */
+-#define SIOCGPARAMS (SIOCDEVPRIVATE+3) /* Read operational parameters */
+-#define SIOCSPARAMS (SIOCDEVPRIVATE+4) /* Set operational parameters */
++#define SIOCGMIIPHY 0x8947 /* Read from current PHY */
++#define SIOCGMIIREG 0x8948 /* Read any PHY register */
++#define SIOCSMIIREG 0x8949 /* Write any PHY register */
+ #endif
+
+ #include <linux/types.h>
diff --git a/packages/net-tools/files/net-tools-1.60-nameif.patch b/packages/net-tools/files/net-tools-1.60-nameif.patch
new file mode 100644
index 0000000000..7ba1f0002d
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-nameif.patch
@@ -0,0 +1,67 @@
+--- net-tools-1.60/nameif.c.nameif 2000-10-18 19:26:29.000000000 +0200
++++ net-tools-1.60/nameif.c 2003-03-19 11:02:01.000000000 +0100
+@@ -3,7 +3,7 @@
+ * Writen 2000 by Andi Kleen.
+ * Subject to the Gnu Public License, version 2.
+ * TODO: make it support token ring etc.
+- * $Id: nameif.c,v 1.1 2000/10/18 17:26:29 ak Exp $
++ * $Id: nameif.c,v 1.3 2003/03/06 23:26:52 ecki Exp $
+ */
+ #ifndef _GNU_SOURCE
+ #define _GNU_SOURCE
+@@ -117,7 +117,8 @@
+ }
+
+ struct change {
+- struct change *next,**pprev;
++ struct change *next;
++ int found;
+ char ifname[IFNAMSIZ+1];
+ unsigned char mac[6];
+ };
+@@ -139,10 +140,7 @@
+ ch->ifname, pos);
+ if (parsemac(p,ch->mac) < 0)
+ complain(_("cannot parse MAC `%s' at %s"), p, pos);
+- if (clist)
+- clist->pprev = &ch->next;
+ ch->next = clist;
+- ch->pprev = &clist;
+ clist = ch;
+ return 0;
+ }
+@@ -200,7 +198,7 @@
+
+ void usage(void)
+ {
+- fprintf(stderr, _("usage: nameif [-c configurationfile] [-s] {ifname macaddress}"));
++ fprintf(stderr, _("usage: nameif [-c configurationfile] [-s] {ifname macaddress}\n"));
+ exit(1);
+ }
+
+@@ -277,21 +275,21 @@
+ ch = lookupmac(mac);
+ if (!ch)
+ continue;
+-
+- *ch->pprev = ch->next;
++
++ ch->found = 1;
+ if (strcmp(p, ch->ifname)) {
+ if (setname(p, ch->ifname) < 0)
+ complain(_("cannot change name of %s to %s: %s"),
+ p, ch->ifname, strerror(errno));
+ }
+- free(ch);
+ }
+ fclose(ifh);
+
+ while (clist) {
+ struct change *ch = clist;
+ clist = clist->next;
+- warning(_("interface '%s' not found"), ch->ifname);
++ if (!ch->found)
++ warning(_("interface '%s' not found"), ch->ifname);
+ free(ch);
+ }
+
diff --git a/packages/net-tools/files/net-tools-1.60-netmask.patch b/packages/net-tools/files/net-tools-1.60-netmask.patch
new file mode 100644
index 0000000000..532898acaf
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-netmask.patch
@@ -0,0 +1,61 @@
+--- net-tools-1.60/ifconfig.c.netmask 2001-04-13 20:25:18.000000000 +0200
++++ net-tools-1.60/ifconfig.c 2004-11-02 15:31:56.454594456 +0100
+@@ -23,6 +23,7 @@
+ * 20001008 - Bernd Eckenfels, Patch from RH for setting mtu
+ * (default AF was wrong)
+ * 20010404 - Arnaldo Carvalho de Melo, use setlocale
++ * 20040831 - Florin Malita <fmalita@glenayre.com> delayed CIDR netmask
+ */
+
+ #define DFLT_AF "inet"
+@@ -227,13 +228,13 @@
+
+ int main(int argc, char **argv)
+ {
+- struct sockaddr sa;
++ struct sockaddr sa, sa_netmask;
+ struct sockaddr_in sin;
+ char host[128];
+ struct aftype *ap;
+ struct hwtype *hw;
+ struct ifreq ifr;
+- int goterr = 0, didnetmask = 0;
++ int goterr = 0, didnetmask = 0, donetmask = 0;
+ char **spp;
+ int fd;
+ #if HAVE_AFINET6
+@@ -903,16 +904,16 @@
+ /* FIXME: sa is too small for INET6 addresses, inet6 should use that too,
+ broadcast is unexpected */
+ if (ap->getmask) {
+- switch (ap->getmask(host, &sa, NULL)) {
++ switch (ap->getmask(host, &sa_netmask, NULL)) {
+ case -1:
+ usage();
+ break;
+ case 1:
+ if (didnetmask)
+ usage();
+-
+- goterr = set_netmask(skfd, &ifr, &sa);
+- didnetmask++;
++
++ /* delay setting the CIDR netmask till after setting the addr */
++ donetmask = 1;
+ break;
+ }
+ }
+@@ -960,6 +961,13 @@
+ }
+ }
+
++ /* set CIDR netmask */
++ if (donetmask) {
++ donetmask = 0;
++ goterr = set_netmask(skfd, &ifr, &sa_netmask);
++ didnetmask++;
++ }
++
+ /*
+ * Don't do the set_flag() if the address is an alias with a - at the
+ * end, since it's deleted already! - Roman
diff --git a/packages/net-tools/files/net-tools-1.60-netstat_stop_trim.patch b/packages/net-tools/files/net-tools-1.60-netstat_stop_trim.patch
new file mode 100644
index 0000000000..425b5c6ca0
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-netstat_stop_trim.patch
@@ -0,0 +1,80 @@
+--- net-tools-1.60/man/en_US/netstat.8.old 2006-02-10 11:18:11.000000000 +0100
++++ net-tools-1.60/man/en_US/netstat.8 2006-02-10 11:22:19.000000000 +0100
+@@ -176,6 +176,10 @@
+ Print routing information from the FIB. (This is the default.)
+ .SS "\-C"
+ Print routing information from the route cache.
++.SS "\-Z \-\-context"
++If SELinux enabled print SELinux context.
++.SS "\-T \-\-trim"
++Stop trimming long addresses.
+ .SS delay
+ Netstat will cycle printing through statistics every
+ .B delay
+--- net-tools-1.60/netstat.c.old 2006-02-10 11:18:12.000000000 +0100
++++ net-tools-1.60/netstat.c 2006-02-10 11:13:50.000000000 +0100
+@@ -157,6 +157,9 @@
+ int flag_arg = 0;
+ int flag_ver = 0;
+ int flag_selinux = 0;
++int flag_trim = 0;
++
++
+
+ FILE *procinfo;
+
+@@ -980,17 +983,21 @@
+ get_sname(htons(local_port), "tcp",
+ flag_not & FLAG_NUM_PORT));
+
+- if ((strlen(local_addr) + strlen(buffer)) >= 27)
+- local_addr[27 - strlen(buffer) - 1] = '\0';
++ if (!flag_trim) {
++ if ((strlen(local_addr) + strlen(buffer)) >= 27)
++ local_addr[27 - strlen(buffer) - 1] = '\0';
++ }
+
+ strcat(local_addr, ":");
+ strncat(local_addr, buffer, sizeof(local_addr));
+ local_addr[sizeof(local_addr)-1] = 0;
+ snprintf(buffer, sizeof(buffer), "%s",
+ get_sname(htons(rem_port), "tcp", flag_not & FLAG_NUM_PORT));
+-
+- if ((strlen(rem_addr) + strlen(buffer)) >= 27)
+- rem_addr[27 - strlen(buffer) - 1] = '\0';
++
++ if (!flag_trim) {
++ if ((strlen(rem_addr) + strlen(buffer)) >= 27)
++ rem_addr[27 - strlen(buffer) - 1] = '\0';
++ }
+
+ strcat(rem_addr, ":");
+ strncat(rem_addr, buffer, sizeof(rem_addr));
+@@ -1776,6 +1783,7 @@
+ {"fib", 0, 0, 'F'},
+ {"groups", 0, 0, 'g'},
+ {"context", 0, 0, 'Z'},
++ {"trim", 0, 0, 'T'},
+ {NULL, 0, 0, 0}
+ };
+
+@@ -1788,7 +1796,7 @@
+
+ afname[0] = '\0';
+
+- while ((i = getopt_long(argc, argv, "MCFA:acdegphiI::nNorstuVv?wxlZ", longopts, &lop)) != EOF)
++ while ((i = getopt_long(argc, argv, "MCFA:acdegphiI::nNorstuVv?wxlZT", longopts, &lop)) != EOF)
+ switch (i) {
+ case -1:
+ break;
+@@ -1904,6 +1912,10 @@
+ usage();
+ case 's':
+ flag_sta++;
++ break;
++ case 'T':
++ flag_trim++;
++ break;
+ }
+
+ if(argc == optind + 1) {
diff --git a/packages/net-tools/files/net-tools-1.60-netstat_ulong.patch b/packages/net-tools/files/net-tools-1.60-netstat_ulong.patch
new file mode 100644
index 0000000000..56869dc539
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-netstat_ulong.patch
@@ -0,0 +1,11 @@
+--- net-tools-1.60/netstat.c.netstat_ulong 2004-11-11 14:28:44.000000000 +0100
++++ net-tools-1.60/netstat.c 2004-11-11 14:31:14.099313000 +0100
+@@ -273,7 +273,7 @@
+ strcpy(pn->name,name);
+ }
+
+-static const char *prg_cache_get(int inode)
++static const char *prg_cache_get(unsigned long inode)
+ {
+ unsigned hi=PRG_HASHIT(inode);
+ struct prg_node *pn;
diff --git a/packages/net-tools/files/net-tools-1.60-note.patch b/packages/net-tools/files/net-tools-1.60-note.patch
new file mode 100644
index 0000000000..4853ccd635
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-note.patch
@@ -0,0 +1,13 @@
+--- net-tools-1.60/man/en_US/hostname.1.note 2004-11-24 12:09:28.000000000 +0100
++++ net-tools-1.60/man/en_US/hostname.1 2004-11-24 12:16:41.121050760 +0100
+@@ -191,6 +191,10 @@
+ ) then root can also set a new NIS domain.
+ .SH FILES
+ .B /etc/hosts
++.B /etc/sysconfig/network
++.SH NOTE
++Note that hostname doesn't change anything permanently. After reboot
++original names from \fI/etc/hosts\fR are used again.
+ .SH AUTHOR
+ Peter Tobias, <tobias@et-inf.fho-emden.de>
+ .br
diff --git a/packages/net-tools/files/net-tools-1.60-num-ports.patch b/packages/net-tools/files/net-tools-1.60-num-ports.patch
new file mode 100644
index 0000000000..829c9d6a77
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-num-ports.patch
@@ -0,0 +1,78 @@
+--- net-tools-1.60/netstat.c.num-ports 2004-11-24 12:19:24.000000000 +0100
++++ net-tools-1.60/netstat.c 2004-11-25 16:00:45.208367104 +0100
+@@ -765,8 +765,8 @@
+ txq = 0L;
+ }
+ safe_strncpy(local_addr, ap->sprint((struct sockaddr *) &localaddr,
+- flag_not), sizeof(local_addr));
+- safe_strncpy(rem_addr, ap->sprint((struct sockaddr *) &remaddr, flag_not),
++ flag_not & FLAG_NUM_HOST), sizeof(local_addr));
++ safe_strncpy(rem_addr, ap->sprint((struct sockaddr *) &remaddr, flag_not & FLAG_NUM_HOST),
+ sizeof(rem_addr));
+ if (flag_all || (flag_lst && !rem_port) || (!flag_lst && rem_port)) {
+ snprintf(buffer, sizeof(buffer), "%s",
+@@ -921,11 +921,11 @@
+ if (flag_all || (notnull(remaddr) && !flag_lst) || (!notnull(remaddr) && flag_lst))
+ {
+ safe_strncpy(local_addr, ap->sprint((struct sockaddr *) &localaddr,
+- flag_not), sizeof(local_addr));
++ flag_not & FLAG_NUM_HOST), sizeof(local_addr));
+ snprintf(buffer, sizeof(buffer), "%s",
+ get_sname(htons(local_port), "udp",
+ flag_not & FLAG_NUM_PORT));
+- if ((strlen(local_addr) + strlen(buffer)) > 22)
++ if ((strlen(local_addr) + strlen(buffer)) >= 27)
+ local_addr[22 - strlen(buffer)] = '\0';
+ strcat(local_addr, ":");
+ strncat(local_addr, buffer, sizeof(local_addr));
+@@ -934,8 +934,8 @@
+ snprintf(buffer, sizeof(buffer), "%s",
+ get_sname(htons(rem_port), "udp", flag_not & FLAG_NUM_PORT));
+ safe_strncpy(rem_addr, ap->sprint((struct sockaddr *) &remaddr,
+- flag_not), sizeof(rem_addr));
+- if ((strlen(rem_addr) + strlen(buffer)) > 22)
++ flag_not & FLAG_NUM_HOST), sizeof(rem_addr));
++ if ((strlen(rem_addr) + strlen(buffer)) >= 27)
+ rem_addr[22 - strlen(buffer)] = '\0';
+ strcat(rem_addr, ":");
+ strncat(rem_addr, buffer, sizeof(rem_addr));
+@@ -958,7 +958,7 @@
+ retr, timeout);
+ break;
+ }
+- printf("udp %6ld %6ld %-23s %-23s %-12s",
++ printf("udp %6ld %6ld %-27s %-27s %-12s",
+ rxq, txq, local_addr, rem_addr, udp_state);
+
+ finish_this_one(uid,inode,timers);
+@@ -1045,8 +1045,8 @@
+ get_sname(htons(local_port), "raw",
+ flag_not & FLAG_NUM_PORT));
+ safe_strncpy(local_addr, ap->sprint((struct sockaddr *) &localaddr,
+- flag_not), sizeof(local_addr));
+- if ((strlen(local_addr) + strlen(buffer)) > 22)
++ flag_not & FLAG_NUM_HOST), sizeof(local_addr));
++ if ((strlen(local_addr) + strlen(buffer)) >= 27)
+ local_addr[22 - strlen(buffer)] = '\0';
+ strcat(local_addr, ":");
+ strncat(local_addr, buffer, sizeof(local_addr));
+@@ -1055,8 +1055,8 @@
+ snprintf(buffer, sizeof(buffer), "%s",
+ get_sname(htons(rem_port), "raw", flag_not & FLAG_NUM_PORT));
+ safe_strncpy(rem_addr, ap->sprint((struct sockaddr *) &remaddr,
+- flag_not), sizeof(rem_addr));
+- if ((strlen(rem_addr) + strlen(buffer)) > 22)
++ flag_not & FLAG_NUM_HOST), sizeof(rem_addr));
++ if ((strlen(rem_addr) + strlen(buffer)) >= 27)
+ rem_addr[22 - strlen(buffer)] = '\0';
+ strcat(rem_addr, ":");
+ strncat(rem_addr, buffer, sizeof(rem_addr));
+@@ -1081,7 +1081,7 @@
+ retr, timeout);
+ break;
+ }
+- printf("raw %6ld %6ld %-23s %-23s %-12d",
++ printf("raw %6ld %6ld %-27s %-27s %-12d",
+ rxq, txq, local_addr, rem_addr, state);
+
+ finish_this_one(uid,inode,timers);
diff --git a/packages/net-tools/files/net-tools-1.60-overflow.patch b/packages/net-tools/files/net-tools-1.60-overflow.patch
new file mode 100644
index 0000000000..d363149514
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-overflow.patch
@@ -0,0 +1,63 @@
+diff -ur net-tools-1.60.orig/netstat.c net-tools-1.60/netstat.c
+--- net-tools-1.60.orig/netstat.c 2004-04-07 11:47:05.000000000 -0400
++++ net-tools-1.60/netstat.c 2004-04-07 16:47:15.000000000 -0400
+@@ -777,7 +777,8 @@
+ local_addr[22 - strlen(buffer)] = '\0';
+
+ strcat(local_addr, ":");
+- strcat(local_addr, buffer);
++ strncat(local_addr, buffer, sizeof(local_addr));
++ local_addr[sizeof(local_addr)-1] = 0;
+ snprintf(buffer, sizeof(buffer), "%s",
+ get_sname(htons(rem_port), "tcp", flag_not & FLAG_NUM_PORT));
+
+@@ -785,7 +786,8 @@
+ rem_addr[22 - strlen(buffer)] = '\0';
+
+ strcat(rem_addr, ":");
+- strcat(rem_addr, buffer);
++ strncat(rem_addr, buffer, sizeof(rem_addr));
++ rem_addr[sizeof(rem_addr)-1] = 0;
+ timers[0] = '\0';
+
+ if (flag_opt)
+@@ -926,7 +928,8 @@
+ if ((strlen(local_addr) + strlen(buffer)) > 22)
+ local_addr[22 - strlen(buffer)] = '\0';
+ strcat(local_addr, ":");
+- strcat(local_addr, buffer);
++ strncat(local_addr, buffer, sizeof(local_addr));
++ local_addr[sizeof(local_addr)-1] = 0;
+
+ snprintf(buffer, sizeof(buffer), "%s",
+ get_sname(htons(rem_port), "udp", flag_not & FLAG_NUM_PORT));
+@@ -935,7 +938,8 @@
+ if ((strlen(rem_addr) + strlen(buffer)) > 22)
+ rem_addr[22 - strlen(buffer)] = '\0';
+ strcat(rem_addr, ":");
+- strcat(rem_addr, buffer);
++ strncat(rem_addr, buffer, sizeof(rem_addr));
++ rem_addr[sizeof(rem_addr)-1] = 0;
+
+ timers[0] = '\0';
+ if (flag_opt)
+@@ -1045,7 +1049,8 @@
+ if ((strlen(local_addr) + strlen(buffer)) > 22)
+ local_addr[22 - strlen(buffer)] = '\0';
+ strcat(local_addr, ":");
+- strcat(local_addr, buffer);
++ strncat(local_addr, buffer, sizeof(local_addr));
++ local_addr[sizeof(local_addr)-1] = 0;
+
+ snprintf(buffer, sizeof(buffer), "%s",
+ get_sname(htons(rem_port), "raw", flag_not & FLAG_NUM_PORT));
+@@ -1054,7 +1059,8 @@
+ if ((strlen(rem_addr) + strlen(buffer)) > 22)
+ rem_addr[22 - strlen(buffer)] = '\0';
+ strcat(rem_addr, ":");
+- strcat(rem_addr, buffer);
++ strncat(rem_addr, buffer, sizeof(rem_addr));
++ rem_addr[sizeof(rem_addr)-1] = 0;
+
+ timers[0] = '\0';
+ if (flag_opt)
diff --git a/packages/net-tools/files/net-tools-1.60-parse.patch b/packages/net-tools/files/net-tools-1.60-parse.patch
new file mode 100644
index 0000000000..25890f1b04
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-parse.patch
@@ -0,0 +1,70 @@
+--- net-tools-1.60/statistics.c.parse 2004-09-06 10:45:35.595130240 +0200
++++ net-tools-1.60/statistics.c 2004-09-06 10:43:11.000000000 +0200
+@@ -289,7 +289,7 @@
+ return &dummytab;
+ }
+
+-void process_fd(FILE *f)
++void process_fd(FILE *f,int file_desc) // added file_desc to show propriate error mesg
+ {
+ char buf1[1024], buf2[1024];
+ char *sp, *np, *p;
+@@ -297,12 +297,16 @@
+ int endflag;
+ struct tabtab *tab;
+
++ if (strcmp(buf1,"\n") == 0) // cut leading break
++ if (!fgets(buf1, sizeof buf1, f))
++ break;
+ if (!fgets(buf2, sizeof buf2, f))
+ break;
++
+ sp = strchr(buf1, ':');
+- np = strchr(buf2, ':');
+- if (!np || !sp)
+- goto formaterr;
++ np = strchr(buf2, ':');
++ if (!np || !sp)
++ goto formaterr;
+ *sp = '\0';
+
+ tab = newtable(snmptabs, buf1);
+@@ -333,7 +337,12 @@
+ return;
+
+ formaterr:
+- perror(_("error parsing /proc/net/snmp"));
++ switch(file_desc) {
++ case 0: perror(_("error parsing /proc/net/snmp"));
++ break;
++ case 1: perror(_("error parsing /proc/net/netstat"));
++ break;
++ }
+ return;
+ }
+
+@@ -343,13 +352,13 @@
+ FILE *f;
+
+ f_raw = flag_raw; f_tcp = flag_tcp; f_udp = flag_udp;
+-
++
+ f = fopen("/proc/net/snmp", "r");
+ if (!f) {
+ perror(_("cannot open /proc/net/snmp"));
+ return(1);
+ }
+- process_fd(f);
++ process_fd(f,0);
+
+ if (ferror(f)) {
+ perror("/proc/net/snmp");
+@@ -361,7 +370,7 @@
+ f = fopen("/proc/net/netstat", "r");
+
+ if (f) {
+- process_fd(f);
++ process_fd(f,1);
+
+ if (ferror(f)) {
+ perror("/proc/net/netstat");
diff --git a/packages/net-tools/files/net-tools-1.60-pie.patch b/packages/net-tools/files/net-tools-1.60-pie.patch
new file mode 100644
index 0000000000..d4496ffbc8
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-pie.patch
@@ -0,0 +1,13 @@
+--- net-tools-1.60/Makefile.pie 2001-04-15 16:34:31.000000000 +0200
++++ net-tools-1.60/Makefile 2005-02-28 12:41:15.337127680 +0100
+@@ -113,8 +113,8 @@
+
+ NET_LIB = $(NET_LIB_PATH)/lib$(NET_LIB_NAME).a
+
+-CFLAGS = $(COPTS) -I. -idirafter ./include/ -I$(NET_LIB_PATH)
+-LDFLAGS = $(LOPTS) -L$(NET_LIB_PATH)
++CFLAGS += $(COPTS) -I. -idirafter ./include/ -I$(NET_LIB_PATH)
++LDFLAGS += $(LOPTS) -L$(NET_LIB_PATH)
+
+ SUBDIRS = man/ $(NET_LIB_PATH)/
+
diff --git a/packages/net-tools/files/net-tools-1.60-return.patch b/packages/net-tools/files/net-tools-1.60-return.patch
new file mode 100644
index 0000000000..8ef10f51c3
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-return.patch
@@ -0,0 +1,28 @@
+--- net-tools-1.60/nameif.c.return 2004-08-03 18:01:37.000000000 +0900
++++ net-tools-1.60/nameif.c 2004-08-03 18:03:37.000000000 +0900
+@@ -27,6 +27,7 @@
+ const char *fname = default_conf;
+ int use_syslog;
+ int ctl_sk = -1;
++int frag = 0;
+
+ void err(char *msg)
+ {
+@@ -288,13 +289,15 @@
+ while (clist) {
+ struct change *ch = clist;
+ clist = clist->next;
+- if (!ch->found)
++ if (!ch->found){
+ warning(_("interface '%s' not found"), ch->ifname);
++ frag = 1;
++ }
+ free(ch);
+ }
+
+ if (use_syslog)
+ closelog();
+- return 0;
++ return frag;
+ }
+
diff --git a/packages/net-tools/files/net-tools-1.60-selinux.patch b/packages/net-tools/files/net-tools-1.60-selinux.patch
new file mode 100644
index 0000000000..d0266696d0
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-selinux.patch
@@ -0,0 +1,205 @@
+--- net-tools-1.60/Makefile~ 2005-12-24 06:56:57.000000000 -0500
++++ net-tools-1.60/Makefile 2005-12-29 16:54:06.000000000 -0500
+@@ -113,6 +113,12 @@
+
+ NET_LIB = $(NET_LIB_PATH)/lib$(NET_LIB_NAME).a
+
++ifeq ($(HAVE_SELINUX),1)
++LDFLAGS += -lselinux
++CFLAGS += -DHAVE_SELINUX
++else
++endif
++
+ CFLAGS += $(COPTS) -I. -idirafter ./include/ -I$(NET_LIB_PATH)
+ LDFLAGS += $(LOPTS) -L$(NET_LIB_PATH)
+
+--- net-tools-1.60/netstat.c~ 2005-12-24 06:56:57.000000000 -0500
++++ net-tools-1.60/netstat.c 2005-12-29 16:54:07.000000000 -0500
+@@ -86,6 +86,11 @@
+ #include <net/if.h>
+ #include <dirent.h>
+
++#if HAVE_SELINUX
++#include <selinux/selinux.h>
++#else
++#define security_context_t char*
++#endif
+ #include "net-support.h"
+ #include "pathnames.h"
+ #include "version.h"
+@@ -96,6 +101,7 @@
+ #include "util.h"
+
+ #define PROGNAME_WIDTH 20
++#define SELINUX_WIDTH 50
+
+ #if !defined(s6_addr32) && defined(in6a_words)
+ #define s6_addr32 in6a_words /* libinet6 */
+@@ -150,6 +156,7 @@
+ int flag_prg = 0;
+ int flag_arg = 0;
+ int flag_ver = 0;
++int flag_selinux = 0;
+
+ FILE *procinfo;
+
+@@ -213,12 +220,17 @@
+ #define PROGNAME_WIDTH1(s) PROGNAME_WIDTH2(s)
+ #define PROGNAME_WIDTH2(s) #s
+
++#define SELINUX_WIDTHs SELINUX_WIDTH1(SELINUX_WIDTH)
++#define SELINUX_WIDTH1(s) SELINUX_WIDTH2(s)
++#define SELINUX_WIDTH2(s) #s
++
+ #define PRG_HASH_SIZE 211
+
+ static struct prg_node {
+ struct prg_node *next;
+ int inode;
+ char name[PROGNAME_WIDTH];
++ char scon[SELINUX_WIDTH];
+ } *prg_hash[PRG_HASH_SIZE];
+
+ static char prg_cache_loaded = 0;
+@@ -226,9 +238,12 @@
+ #define PRG_HASHIT(x) ((x) % PRG_HASH_SIZE)
+
+ #define PROGNAME_BANNER "PID/Program name"
++#define SELINUX_BANNER "Security Context"
+
+ #define print_progname_banner() do { if (flag_prg) printf("%-" PROGNAME_WIDTHs "s"," " PROGNAME_BANNER); } while (0)
+
++#define print_selinux_banner() do { if (flag_selinux) printf("%-" SELINUX_WIDTHs "s"," " SELINUX_BANNER); } while (0)
++
+ #define PRG_LOCAL_ADDRESS "local_address"
+ #define PRG_INODE "inode"
+ #define PRG_SOCKET_PFX "socket:["
+@@ -250,7 +265,7 @@
+ /* NOT working as of glibc-2.0.7: */
+ #undef DIRENT_HAVE_D_TYPE_WORKS
+
+-static void prg_cache_add(int inode, char *name)
++static void prg_cache_add(int inode, char *name, char *scon)
+ {
+ unsigned hi = PRG_HASHIT(inode);
+ struct prg_node **pnp,*pn;
+@@ -271,6 +286,14 @@
+ if (strlen(name)>sizeof(pn->name)-1)
+ name[sizeof(pn->name)-1]='\0';
+ strcpy(pn->name,name);
++
++ {
++ int len=(strlen(scon)-sizeof(pn->scon))+1;
++ if (len > 0)
++ strcpy(pn->scon,&scon[len+1]);
++ else
++ strcpy(pn->scon,scon);
++ }
+ }
+
+ static const char *prg_cache_get(unsigned long inode)
+@@ -283,6 +306,16 @@
+ return("-");
+ }
+
++static const char *prg_cache_get_con(unsigned long inode)
++{
++ unsigned hi=PRG_HASHIT(inode);
++ struct prg_node *pn;
++
++ for (pn=prg_hash[hi];pn;pn=pn->next)
++ if (pn->inode==inode) return(pn->scon);
++ return("-");
++}
++
+ static void prg_cache_clear(void)
+ {
+ struct prg_node **pnp,*pn;
+@@ -348,6 +381,7 @@
+ const char *cs,*cmdlp;
+ DIR *dirproc=NULL,*dirfd=NULL;
+ struct dirent *direproc,*direfd;
++ security_context_t scon=NULL;
+
+ if (prg_cache_loaded || !flag_prg) return;
+ prg_cache_loaded=1;
+@@ -415,7 +449,15 @@
+ }
+
+ snprintf(finbuf, sizeof(finbuf), "%s/%s", direproc->d_name, cmdlp);
+- prg_cache_add(inode, finbuf);
++#if HAVE_SELINUX
++ if (getpidcon(atoi(direproc->d_name), &scon) == -1) {
++ scon=strdup("-");
++ }
++ prg_cache_add(inode, finbuf, scon);
++ freecon(scon);
++#else
++ prg_cache_add(inode, finbuf, "-");
++#endif
+ }
+ closedir(dirfd);
+ dirfd = NULL;
+@@ -1385,6 +1428,8 @@
+ printf("- ");
+ if (flag_prg)
+ printf("%-" PROGNAME_WIDTHs "s",(has & HAS_INODE?prg_cache_get(inode):"-"));
++ if (flag_selinux)
++ printf("%-" SELINUX_WIDTHs "s",(has & HAS_INODE?prg_cache_get_con(inode):"-"));
+ puts(path);
+ }
+
+@@ -1403,6 +1448,7 @@
+
+ printf(_("\nProto RefCnt Flags Type State I-Node"));
+ print_progname_banner();
++ print_selinux_banner();
+ printf(_(" Path\n")); /* xxx */
+
+ {
+@@ -1682,6 +1728,7 @@
+ fprintf(stderr, _(" -o, --timers display timers\n"));
+ fprintf(stderr, _(" -F, --fib display Forwarding Information Base (default)\n"));
+ fprintf(stderr, _(" -C, --cache display routing cache instead of FIB\n\n"));
++ fprintf(stderr, _(" -Z, --context display SELinux security context for sockets\n\n"));
+
+ fprintf(stderr, _(" <Iface>: Name of interface to monitor/list.\n"));
+ fprintf(stderr, _(" <Socket>={-t|--tcp} {-u|--udp} {-w|--raw} {-x|--unix} --ax25 --ipx --netrom\n"));
+@@ -1729,6 +1776,7 @@
+ {"cache", 0, 0, 'C'},
+ {"fib", 0, 0, 'F'},
+ {"groups", 0, 0, 'g'},
++ {"context", 0, 0, 'Z'},
+ {NULL, 0, 0, 0}
+ };
+
+@@ -1741,7 +1789,7 @@
+
+ afname[0] = '\0';
+
+- while ((i = getopt_long(argc, argv, "MCFA:acdegphiI::nNorstuVv?wxl", longopts, &lop)) != EOF)
++ while ((i = getopt_long(argc, argv, "MCFA:acdegphiI::nNorstuVv?wxlZ", longopts, &lop)) != EOF)
+ switch (i) {
+ case -1:
+ break;
+@@ -1838,6 +1886,20 @@
+ if (aftrans_opt("unix"))
+ exit(1);
+ break;
++ case 'Z':
++#if HAVE_SELINUX
++ if (is_selinux_enabled() <= 0) {
++ fprintf(stderr, _("SELinux is not enabled on this machine.\n"));
++ exit(1);
++ }
++ flag_prg++;
++ flag_selinux++;
++#else
++ fprintf(stderr, _("SELinux is not enabled for this application.\n"));
++ exit(1);
++#endif
++
++ break;
+ case '?':
+ case 'h':
+ usage();
diff --git a/packages/net-tools/files/net-tools-1.60-siunits.patch b/packages/net-tools/files/net-tools-1.60-siunits.patch
new file mode 100644
index 0000000000..cf6d89c5d3
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-siunits.patch
@@ -0,0 +1,80 @@
+--- net-tools-1.60/lib/interface.c.siunits 2004-03-14 12:11:22.000000000 -0600
++++ net-tools-1.60/lib/interface.c 2004-03-14 12:27:31.990679464 -0600
+@@ -262,7 +262,7 @@
+ &ife->stats.tx_compressed);
+ break;
+ case 2:
+- sscanf(bp, "%llu %llu %lu %lu %lu %lu %llu %llu %lu %lu %lu %lu %lu",
++ sscanf(bp, "%Lu %llu %lu %lu %lu %lu %Lu %Lu %lu %lu %lu %lu %lu",
+ &ife->stats.rx_bytes,
+ &ife->stats.rx_packets,
+ &ife->stats.rx_errors,
+@@ -280,7 +280,7 @@
+ ife->stats.rx_multicast = 0;
+ break;
+ case 1:
+- sscanf(bp, "%llu %lu %lu %lu %lu %llu %lu %lu %lu %lu %lu",
++ sscanf(bp, "%Lu %lu %lu %lu %lu %Lu %lu %lu %lu %lu %lu",
+ &ife->stats.rx_packets,
+ &ife->stats.rx_errors,
+ &ife->stats.rx_dropped,
+@@ -675,8 +675,8 @@
+ int hf;
+ int can_compress = 0;
+ unsigned long long rx, tx, short_rx, short_tx;
+- char Rext[5]="b";
+- char Text[5]="b";
++ const char *Rext = "b";
++ const char *Text = "b";
+
+ #if HAVE_AFIPX
+ static struct aftype *ipxtype = NULL;
+@@ -882,10 +882,44 @@
+ tx = ptr->stats.tx_bytes;
+ short_rx = rx * 10;
+ short_tx = tx * 10;
+- if (rx > 1048576) { short_rx /= 1048576; strcpy(Rext, "Mb"); }
+- else if (rx > 1024) { short_rx /= 1024; strcpy(Rext, "Kb"); }
+- if (tx > 1048576) { short_tx /= 1048576; strcpy(Text, "Mb"); }
+- else if (tx > 1024) { short_tx /= 1024; strcpy(Text, "Kb"); }
++ if (rx > 1152921504606846976ull) {
++ short_rx /= 1152921504606846976ull;
++ Rext = "EiB";
++ } else if (rx > 1125899906842624ull) {
++ short_rx /= 1125899906842624ull;
++ Rext = "PiB";
++ } else if (rx > 1099511627776ull) {
++ short_rx /= 1099511627776ull;
++ Rext = "TiB";
++ } else if (rx > 1073741824ull) {
++ short_rx /= 1073741824ull;
++ Rext = "GiB";
++ } else if (rx > 1048576) {
++ short_rx /= 1048576;
++ Rext = "MiB";
++ } else if (rx > 1024) {
++ short_rx /= 1024;
++ Rext = "KiB";
++ }
++ if (tx > 1152921504606846976ull) {
++ short_tx /= 1152921504606846976ull;
++ Text = "EiB";
++ } else if (tx > 1125899906842624ull) {
++ short_tx /= 1125899906842624ull;
++ Text = "PiB";
++ } else if (tx > 1099511627776ull) {
++ short_tx /= 1099511627776ull;
++ Text = "TiB";
++ } else if (tx > 1073741824ull) {
++ short_tx /= 1073741824ull;
++ Text = "GiB";
++ } else if (tx > 1048576) {
++ short_tx /= 1048576;
++ Text = "MiB";
++ } else if (tx > 1024) {
++ short_tx /= 1024;
++ Text = "KiB";
++ }
+
+ printf(" ");
+ printf(_("TX packets:%llu errors:%lu dropped:%lu overruns:%lu carrier:%lu\n"),
diff --git a/packages/net-tools/files/net-tools-1.60-statalias.patch b/packages/net-tools/files/net-tools-1.60-statalias.patch
new file mode 100644
index 0000000000..7c74f74d07
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-statalias.patch
@@ -0,0 +1,15 @@
+--- net-tools-1.60/lib/interface.c.statalias 2005-01-07 12:49:14.084104032 +0100
++++ net-tools-1.60/lib/interface.c 2005-01-07 12:49:38.527388088 +0100
+@@ -395,9 +395,11 @@
+ char *s, name[IFNAMSIZ];
+ s = get_name(name, buf);
+ get_dev_fields(s, ife);
+- ife->statistics_valid = 1;
+ if (target && !strcmp(target,name))
++ {
++ ife->statistics_valid = 1;
+ break;
++ }
+ }
+ if (ferror(fh)) {
+ perror(_PATH_PROCNET_DEV);
diff --git a/packages/net-tools/files/net-tools-1.60-statistics.patch b/packages/net-tools/files/net-tools-1.60-statistics.patch
new file mode 100644
index 0000000000..d3a56499e8
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-statistics.patch
@@ -0,0 +1,65 @@
+--- net-tools-1.60/statistics.c.tcpdata 2005-04-26 10:38:10.000000000 +0200
++++ net-tools-1.60/statistics.c 2005-04-26 10:36:19.000000000 +0200
+@@ -1,6 +1,6 @@
+ /*
+ * Copyright 1997,1999,2000 Andi Kleen. Subject to the GPL.
+- * $Id: statistics.c,v 1.14 2001/02/02 18:01:23 pb Exp $
++ * $Id: statistics.c,v 1.17 2002/04/28 15:41:01 ak Exp $
+ * 19980630 - i18n - Arnaldo Carvalho de Melo <acme@conectiva.com.br>
+ * 19981113 - i18n fixes - Arnaldo Carvalho de Melo <acme@conectiva.com.br>
+ * 19990101 - added net/netstat, -t, -u, -w supprt - Bernd Eckenfels
+@@ -185,6 +185,44 @@
+ "directly queued to user"), opt_number },
+ { "SockMallocOOM", N_("Ran %lu times out of system memory during "
+ "packet sending"), opt_number },
++ { "TCPPureAcks", N_("%u acknowledgments not containing data received"), opt_number },
++ { "TCPHPAcks", N_("%u predicted acknowledgments"), opt_number },
++ { "TCPRenoRecovery", N_("%u times recovered from packet loss due to fast retransmit"), opt_number },
++ { "TCPSackRecovery", N_("%u times recovered from packet loss due to SACK data"), opt_number },
++ { "TCPSACKReneging", N_("%u bad SACKs received"), opt_number },
++ { "TCPFACKReorder", N_("Detected reordering %u times using FACK"), opt_number },
++ { "TCPSACKReorder", N_("Detected reordering %u times using SACK"), opt_number },
++ { "TCPTSReorder", N_("Detected reordering %u times using time stamp"), opt_number },
++ { "TCPRenoReorder", N_("Detected reordering %u times using reno fast retransmit"), opt_number },
++ { "TCPFullUndo", N_("%u congestion windows fully recovered"), opt_number },
++ { "TCPPartialUndo", N_("%u congestion windows partially recovered using Hoe heuristic"), opt_number },
++ { "TCPDSackUndo", N_("%u congestion window recovered using DSACK"), opt_number },
++ { "TCPLossUndo", N_("%u congestion windows recovered after partial ack"), opt_number },
++ { "TCPLostRetransmits", N_("%u retransmits lost"), opt_number },
++ { "TCPRenoFailures", N_("%u timeouts after reno fast retransmit"), opt_number },
++ { "TCPSackFailures", N_("%u timeouts after SACK recovery"), opt_number },
++ { "TCPLossFailures", N_("%u timeouts in loss state"), opt_number },
++ { "TCPFastRetrans", N_("%u fast retransmits"), opt_number },
++ { "TCPForwardRetrans", N_("%u forward retransmits"), opt_number },
++ { "TCPSlowStartRetrans", N_("%u retransmits in slow start"), opt_number },
++ { "TCPTimeouts", N_("%u other TCP timeouts"), opt_number },
++ { "TCPRenoRecoveryFailed", N_("%u reno fast retransmits failed"), opt_number },
++ { "TCPSackRecoveryFail", N_("%u sack retransmits failed"), opt_number },
++ { "TCPSchedulerFailed", N_("%u times receiver scheduled too late for direct processing"), opt_number },
++ { "TCPRcvCollapsed", N_("%u packets collapsed in receive queue due to low socket buffer"), opt_number },
++ { "TCPDSACKOldSent", N_("%u DSACKs sent for old packets"), opt_number },
++ { "TCPDSACKOfoSent", N_("%u DSACKs sent for out of order packets"), opt_number },
++ { "TCPDSACKRecv", N_("%u DSACKs received"), opt_number },
++ { "TCPDSACKOfoRecv", N_("%u DSACKs for out of order packets received"), opt_number },
++ { "TCPAbortOnSyn", N_("%u connections reset due to unexpected SYN"), opt_number },
++ { "TCPAbortOnData", N_("%u connections reset due to unexpected data"), opt_number },
++ { "TCPAbortOnClose", N_("%u connections reset due to early user close"), opt_number },
++ { "TCPAbortOnMemory", N_("%u connections aborted due to memory pressure"), opt_number },
++ { "TCPAbortOnTimeout", N_("%u connections aborted due to timeout"), opt_number },
++ { "TCPAbortOnLinger", N_("%u connections aborted after user close in linger timeout"), opt_number },
++ { "TCPAbortFailed", N_("%u times unabled to send RST due to no memory"), opt_number },
++ { "TCPMemoryPressures", N_("TCP ran low on memory %u times"), opt_number },
++ { "TCPLoss", N_("%u TCP data loss events") },
+ };
+
+ struct tabtab {
+@@ -222,7 +260,8 @@
+ ent = bsearch(&key, tab->tab, tab->size / sizeof(struct entry),
+ sizeof(struct entry), cmpentries);
+ if (!ent) { /* try our best */
+- printf("%*s%s: %d\n", states[state].indent, "", title, val);
++ if (val)
++ printf("%*s%s: %d\n", states[state].indent, "", title, val);
+ return;
+ }
+ type = ent->type;
diff --git a/packages/net-tools/files/net-tools-1.60-stdo.patch b/packages/net-tools/files/net-tools-1.60-stdo.patch
new file mode 100644
index 0000000000..4c9d93e88f
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-stdo.patch
@@ -0,0 +1,11 @@
+diff -urN net-tools-1.60/mii-tool.c net-tools-1.60.new/mii-tool.c
+--- net-tools-1.60/mii-tool.c 2000-05-21 16:31:17.000000000 +0200
++++ net-tools-1.60.new/mii-tool.c 2005-03-29 13:00:18.000000000 +0200
+@@ -302,6 +302,7 @@
+ printf("\n link partner:%s", media_list(lkpar, 0));
+ printf("\n");
+ }
++ fflush(stdout);
+ return 0;
+ }
+
diff --git a/packages/net-tools/files/net-tools-1.60-trailingblank.patch b/packages/net-tools/files/net-tools-1.60-trailingblank.patch
new file mode 100644
index 0000000000..8c752282e2
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-trailingblank.patch
@@ -0,0 +1,26 @@
+--- net-tools-1.60/hostname.c.trailingblank 2001-04-08 19:04:23.000000000 +0200
++++ net-tools-1.60/hostname.c 2003-08-19 14:21:17.000000000 +0200
+@@ -153,13 +153,19 @@
+
+ switch (c) {
+ case 'a':
+- while (hp->h_aliases[0])
+- printf("%s ", *hp->h_aliases++);
++ while (hp->h_aliases[0]) {
++ printf("%s", *hp->h_aliases++);
++ if (hp->h_aliases[0])
++ printf(" ");
++ }
+ printf("\n");
+ break;
+ case 'i':
+- while (hp->h_addr_list[0])
+- printf("%s ", inet_ntoa(*(struct in_addr *) *hp->h_addr_list++));
++ while (hp->h_addr_list[0]) {
++ printf("%s", inet_ntoa(*(struct in_addr *) *hp->h_addr_list++));
++ if (hp->h_addr_list[0])
++ printf(" ");
++ }
+ printf("\n");
+ break;
+ case 'd':
diff --git a/packages/net-tools/files/net-tools-1.60-trim_iface.patch b/packages/net-tools/files/net-tools-1.60-trim_iface.patch
new file mode 100644
index 0000000000..150722cd28
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-trim_iface.patch
@@ -0,0 +1,31 @@
+--- net-tools-1.60/ifconfig.c.old 2005-03-30 10:14:03.000000000 +0200
++++ net-tools-1.60/ifconfig.c 2005-03-30 10:40:50.000000000 +0200
+@@ -177,7 +177,7 @@
+
+ static void usage(void)
+ {
+- fprintf(stderr, _("Usage:\n ifconfig [-a] [-i] [-v] [-s] <interface> [[<AF>] <address>]\n"));
++ fprintf(stderr, _("Usage:\n ifconfig [-a] [-v] [-s] <interface> [[<AF>] <address>]\n"));
+ #if HAVE_AFINET
+ fprintf(stderr, _(" [add <address>[/<prefixlen>]]\n"));
+ fprintf(stderr, _(" [del <address>[/<prefixlen>]]\n"));
+--- net-tools-1.60/lib/interface.c.old 2005-03-30 10:14:03.000000000 +0200
++++ net-tools-1.60/lib/interface.c 2005-03-30 11:05:38.000000000 +0200
+@@ -620,7 +620,7 @@
+
+ void ife_print_short(struct interface *ptr)
+ {
+- printf("%-9.9s ", ptr->name);
++ printf("%-9s ", ptr->name);
+ printf("%5d %3d ", ptr->mtu, ptr->metric);
+ /* If needed, display the interface statistics. */
+ if (ptr->statistics_valid) {
+@@ -711,7 +711,7 @@
+ if (hw == NULL)
+ hw = get_hwntype(-1);
+
+- printf(_("%-9.9s Link encap:%s "), ptr->name, hw->title);
++ printf(_("%-9s Link encap:%s "), ptr->name, hw->title);
+ /* For some hardware types (eg Ash, ATM) we don't print the
+ hardware address if it's null. */
+ if (hw->print != NULL && (! (hw_null_address(hw, ptr->hwaddr) &&
diff --git a/packages/net-tools/files/net-tools-1.60-trunc.patch b/packages/net-tools/files/net-tools-1.60-trunc.patch
new file mode 100644
index 0000000000..9ff3c0bcc8
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-trunc.patch
@@ -0,0 +1,42 @@
+--- net-tools-1.60/netstat.c.trunc 2004-08-31 12:42:08.595426960 +0200
++++ net-tools-1.60/netstat.c 2004-08-31 12:59:55.766192344 +0200
+@@ -773,8 +773,8 @@
+ get_sname(htons(local_port), "tcp",
+ flag_not & FLAG_NUM_PORT));
+
+- if ((strlen(local_addr) + strlen(buffer)) > 22)
+- local_addr[22 - strlen(buffer)] = '\0';
++ if ((strlen(local_addr) + strlen(buffer)) >= 27)
++ local_addr[27 - strlen(buffer) - 1] = '\0';
+
+ strcat(local_addr, ":");
+ strncat(local_addr, buffer, sizeof(local_addr));
+@@ -782,8 +782,8 @@
+ snprintf(buffer, sizeof(buffer), "%s",
+ get_sname(htons(rem_port), "tcp", flag_not & FLAG_NUM_PORT));
+
+- if ((strlen(rem_addr) + strlen(buffer)) > 22)
+- rem_addr[22 - strlen(buffer)] = '\0';
++ if ((strlen(rem_addr) + strlen(buffer)) >= 27)
++ rem_addr[27 - strlen(buffer) - 1] = '\0';
+
+ strcat(rem_addr, ":");
+ strncat(rem_addr, buffer, sizeof(rem_addr));
+@@ -816,7 +816,7 @@
+ timer_run, (double) time_len / HZ, retr, timeout);
+ break;
+ }
+- printf("tcp %6ld %6ld %-23s %-23s %-12s",
++ printf("tcp %6ld %6ld %-27s %-27s %-12s",
+ rxq, txq, local_addr, rem_addr, _(tcp_state[state]));
+
+ finish_this_one(uid,inode,timers);
+@@ -1770,7 +1770,7 @@
+ else
+ printf(_("(w/o servers)"));
+ }
+- printf(_("\nProto Recv-Q Send-Q Local Address Foreign Address State ")); /* xxx */
++ printf(_("\nProto Recv-Q Send-Q Local Address Foreign Address State ")); /* xxx */
+ if (flag_exp > 1)
+ printf(_(" User Inode "));
+ print_progname_banner();
diff --git a/packages/net-tools/files/net-tools-1.60-ulong.patch b/packages/net-tools/files/net-tools-1.60-ulong.patch
new file mode 100644
index 0000000000..bc7df29dd6
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-ulong.patch
@@ -0,0 +1,215 @@
+diff -urN net-tools-1.60/statistics.c net-tools-1.60-patch/statistics.c
+--- net-tools-1.60/statistics.c 2001-02-02 10:01:23.000000000 -0800
++++ net-tools-1.60-patch/statistics.c 2004-06-15 11:09:44.000000000 -0700
+@@ -63,54 +63,54 @@
+ struct entry Iptab[] =
+ {
+ {"Forwarding", N_("Forwarding is %s"), i_forward | I_STATIC},
+- {"DefaultTTL", N_("Default TTL is %u"), number | I_STATIC},
+- {"InReceives", N_("%u total packets received"), number},
+- {"InHdrErrors", N_("%u with invalid headers"), opt_number},
+- {"InAddrErrors", N_("%u with invalid addresses"), opt_number},
+- {"ForwDatagrams", N_("%u forwarded"), number},
+- {"InUnknownProtos", N_("%u with unknown protocol"), opt_number},
+- {"InDiscards", N_("%u incoming packets discarded"), number},
+- {"InDelivers", N_("%u incoming packets delivered"), number},
+- {"OutRequests", N_("%u requests sent out"), number}, /*? */
+- {"OutDiscards", N_("%u outgoing packets dropped"), opt_number},
+- {"OutNoRoutes", N_("%u dropped because of missing route"), opt_number},
+- {"ReasmTimeout", N_("%u fragments dropped after timeout"), opt_number},
+- {"ReasmReqds", N_("%u reassemblies required"), opt_number}, /* ? */
+- {"ReasmOKs", N_("%u packets reassembled ok"), opt_number},
+- {"ReasmFails", N_("%u packet reassembles failed"), opt_number},
+- {"FragOKs", N_("%u fragments received ok"), opt_number},
+- {"FragFails", N_("%u fragments failed"), opt_number},
+- {"FragCreates", N_("%u fragments created"), opt_number}
++ {"DefaultTTL", N_("Default TTL is %lu"), number | I_STATIC},
++ {"InReceives", N_("%lu total packets received"), number},
++ {"InHdrErrors", N_("%lu with invalid headers"), opt_number},
++ {"InAddrErrors", N_("%lu with invalid addresses"), opt_number},
++ {"ForwDatagrams", N_("%lu forwarded"), number},
++ {"InUnknownProtos", N_("%lu with unknown protocol"), opt_number},
++ {"InDiscards", N_("%lu incoming packets discarded"), number},
++ {"InDelivers", N_("%lu incoming packets delivered"), number},
++ {"OutRequests", N_("%lu requests sent out"), number}, /*? */
++ {"OutDiscards", N_("%lu outgoing packets dropped"), opt_number},
++ {"OutNoRoutes", N_("%lu dropped because of missing route"), opt_number},
++ {"ReasmTimeout", N_("%lu fragments dropped after timeout"), opt_number},
++ {"ReasmReqds", N_("%lu reassemblies required"), opt_number}, /* ? */
++ {"ReasmOKs", N_("%lu packets reassembled ok"), opt_number},
++ {"ReasmFails", N_("%lu packet reassembles failed"), opt_number},
++ {"FragOKs", N_("%lu fragments received ok"), opt_number},
++ {"FragFails", N_("%lu fragments failed"), opt_number},
++ {"FragCreates", N_("%lu fragments created"), opt_number}
+ };
+
+ struct entry Icmptab[] =
+ {
+- {"InMsgs", N_("%u ICMP messages received"), number},
+- {"InErrors", N_("%u input ICMP message failed."), number},
+- {"InDestUnreachs", N_("destination unreachable: %u"), i_inp_icmp | I_TITLE},
+- {"InTimeExcds", N_("timeout in transit: %u"), i_inp_icmp | I_TITLE},
+- {"InParmProbs", N_("wrong parameters: %u"), i_inp_icmp | I_TITLE}, /*? */
+- {"InSrcQuenchs", N_("source quenches: %u"), i_inp_icmp | I_TITLE},
+- {"InRedirects", N_("redirects: %u"), i_inp_icmp | I_TITLE},
+- {"InEchos", N_("echo requests: %u"), i_inp_icmp | I_TITLE},
+- {"InEchoReps", N_("echo replies: %u"), i_inp_icmp | I_TITLE},
+- {"InTimestamps", N_("timestamp request: %u"), i_inp_icmp | I_TITLE},
+- {"InTimestampReps", N_("timestamp reply: %u"), i_inp_icmp | I_TITLE},
+- {"InAddrMasks", N_("address mask request: %u"), i_inp_icmp | I_TITLE}, /*? */
+- {"InAddrMaskReps", N_("address mask replies: %u"), i_inp_icmp | I_TITLE}, /*? */
+- {"OutMsgs", N_("%u ICMP messages sent"), number},
+- {"OutErrors", N_("%u ICMP messages failed"), number},
+- {"OutDestUnreachs", N_("destination unreachable: %u"), i_outp_icmp | I_TITLE},
+- {"OutTimeExcds", N_("time exceeded: %u"), i_outp_icmp | I_TITLE},
+- {"OutParmProbs", N_("wrong parameters: %u"), i_outp_icmp | I_TITLE}, /*? */
+- {"OutSrcQuenchs", N_("source quench: %u"), i_outp_icmp | I_TITLE},
+- {"OutRedirects", N_("redirect: %u"), i_outp_icmp | I_TITLE},
+- {"OutEchos", N_("echo request: %u"), i_outp_icmp | I_TITLE},
+- {"OutEchoReps", N_("echo replies: %u"), i_outp_icmp | I_TITLE},
+- {"OutTimestamps", N_("timestamp requests: %u"), i_outp_icmp | I_TITLE},
+- {"OutTimestampReps", N_("timestamp replies: %u"), i_outp_icmp | I_TITLE},
+- {"OutAddrMasks", N_("address mask requests: %u"), i_outp_icmp | I_TITLE},
+- {"OutAddrMaskReps", N_("address mask replies: %u"), i_outp_icmp | I_TITLE},
++ {"InMsgs", N_("%lu ICMP messages received"), number},
++ {"InErrors", N_("%lu input ICMP message failed."), number},
++ {"InDestUnreachs", N_("destination unreachable: %lu"), i_inp_icmp | I_TITLE},
++ {"InTimeExcds", N_("timeout in transit: %lu"), i_inp_icmp | I_TITLE},
++ {"InParmProbs", N_("wrong parameters: %lu"), i_inp_icmp | I_TITLE}, /*? */
++ {"InSrcQuenchs", N_("source quenches: %lu"), i_inp_icmp | I_TITLE},
++ {"InRedirects", N_("redirects: %lu"), i_inp_icmp | I_TITLE},
++ {"InEchos", N_("echo requests: %lu"), i_inp_icmp | I_TITLE},
++ {"InEchoReps", N_("echo replies: %lu"), i_inp_icmp | I_TITLE},
++ {"InTimestamps", N_("timestamp request: %lu"), i_inp_icmp | I_TITLE},
++ {"InTimestampReps", N_("timestamp reply: %lu"), i_inp_icmp | I_TITLE},
++ {"InAddrMasks", N_("address mask request: %lu"), i_inp_icmp | I_TITLE}, /*? */
++ {"InAddrMaskReps", N_("address mask replies: %lu"), i_inp_icmp | I_TITLE}, /*? */
++ {"OutMsgs", N_("%lu ICMP messages sent"), number},
++ {"OutErrors", N_("%lu ICMP messages failed"), number},
++ {"OutDestUnreachs", N_("destination unreachable: %lu"), i_outp_icmp | I_TITLE},
++ {"OutTimeExcds", N_("time exceeded: %lu"), i_outp_icmp | I_TITLE},
++ {"OutParmProbs", N_("wrong parameters: %lu"), i_outp_icmp | I_TITLE}, /*? */
++ {"OutSrcQuenchs", N_("source quench: %lu"), i_outp_icmp | I_TITLE},
++ {"OutRedirects", N_("redirect: %lu"), i_outp_icmp | I_TITLE},
++ {"OutEchos", N_("echo request: %lu"), i_outp_icmp | I_TITLE},
++ {"OutEchoReps", N_("echo replies: %lu"), i_outp_icmp | I_TITLE},
++ {"OutTimestamps", N_("timestamp requests: %lu"), i_outp_icmp | I_TITLE},
++ {"OutTimestampReps", N_("timestamp replies: %lu"), i_outp_icmp | I_TITLE},
++ {"OutAddrMasks", N_("address mask requests: %lu"), i_outp_icmp | I_TITLE},
++ {"OutAddrMaskReps", N_("address mask replies: %lu"), i_outp_icmp | I_TITLE},
+ };
+
+ struct entry Tcptab[] =
+@@ -119,71 +119,71 @@
+ {"RtoMin", "", number},
+ {"RtoMax", "", number},
+ {"MaxConn", "", number},
+- {"ActiveOpens", N_("%u active connections openings"), number},
+- {"PassiveOpens", N_("%u passive connection openings"), number},
+- {"AttemptFails", N_("%u failed connection attempts"), number},
+- {"EstabResets", N_("%u connection resets received"), number},
+- {"CurrEstab", N_("%u connections established"), number},
+- {"InSegs", N_("%u segments received"), number},
+- {"OutSegs", N_("%u segments send out"), number},
+- {"RetransSegs", N_("%u segments retransmited"), number},
+- {"InErrs", N_("%u bad segments received."), number},
+- {"OutRsts", N_("%u resets sent"), number},
++ {"ActiveOpens", N_("%lu active connections openings"), number},
++ {"PassiveOpens", N_("%lu passive connection openings"), number},
++ {"AttemptFails", N_("%lu failed connection attempts"), number},
++ {"EstabResets", N_("%lu connection resets received"), number},
++ {"CurrEstab", N_("%lu connections established"), number},
++ {"InSegs", N_("%lu segments received"), number},
++ {"OutSegs", N_("%lu segments send out"), number},
++ {"RetransSegs", N_("%lu segments retransmited"), number},
++ {"InErrs", N_("%lu bad segments received."), number},
++ {"OutRsts", N_("%lu resets sent"), number},
+ };
+
+ struct entry Udptab[] =
+ {
+- {"InDatagrams", N_("%u packets received"), number},
+- {"NoPorts", N_("%u packets to unknown port received."), number},
+- {"InErrors", N_("%u packet receive errors"), number},
+- {"OutDatagrams", N_("%u packets sent"), number},
++ {"InDatagrams", N_("%lu packets received"), number},
++ {"NoPorts", N_("%lu packets to unknown port received."), number},
++ {"InErrors", N_("%lu packet receive errors"), number},
++ {"OutDatagrams", N_("%lu packets sent"), number},
+ };
+
+ struct entry Tcpexttab[] =
+ {
+- {"SyncookiesSent", N_("%u SYN cookies sent"), opt_number},
+- {"SyncookiesRecv", N_("%u SYN cookies received"), opt_number},
+- {"SyncookiesFailed", N_("%u invalid SYN cookies received"), opt_number},
++ {"SyncookiesSent", N_("%lu SYN cookies sent"), opt_number},
++ {"SyncookiesRecv", N_("%lu SYN cookies received"), opt_number},
++ {"SyncookiesFailed", N_("%lu invalid SYN cookies received"), opt_number},
+
+- { "EmbryonicRsts", N_("%u resets received for embryonic SYN_RECV sockets"),
++ { "EmbryonicRsts", N_("%lu resets received for embryonic SYN_RECV sockets"),
+ opt_number },
+- { "PruneCalled", N_("%u packets pruned from receive queue because of socket"
++ { "PruneCalled", N_("%lu packets pruned from receive queue because of socket"
+ " buffer overrun"), opt_number },
+ /* obsolete: 2.2.0 doesn't do that anymore */
+- { "RcvPruned", N_("%u packets pruned from receive queue"), opt_number },
+- { "OfoPruned", N_("%u packets dropped from out-of-order queue because of"
++ { "RcvPruned", N_("%lu packets pruned from receive queue"), opt_number },
++ { "OfoPruned", N_("%lu packets dropped from out-of-order queue because of"
+ " socket buffer overrun"), opt_number },
+- { "OutOfWindowIcmps", N_("%u ICMP packets dropped because they were "
++ { "OutOfWindowIcmps", N_("%lu ICMP packets dropped because they were "
+ "out-of-window"), opt_number },
+- { "LockDroppedIcmps", N_("%u ICMP packets dropped because"
++ { "LockDroppedIcmps", N_("%lu ICMP packets dropped because"
+ " socket was locked"), opt_number },
+- { "TW", N_("%u TCP sockets finished time wait in fast timer"), opt_number },
+- { "TWRecycled", N_("%u time wait sockets recycled by time stamp"), opt_number },
+- { "TWKilled", N_("%u TCP sockets finished time wait in slow timer"), opt_number },
+- { "PAWSPassive", N_("%u passive connections rejected because of"
++ { "TW", N_("%lu TCP sockets finished time wait in fast timer"), opt_number },
++ { "TWRecycled", N_("%lu time wait sockets recycled by time stamp"), opt_number },
++ { "TWKilled", N_("%lu TCP sockets finished time wait in slow timer"), opt_number },
++ { "PAWSPassive", N_("%lu passive connections rejected because of"
+ " time stamp"), opt_number },
+- { "PAWSActive", N_("%u active connections rejected because of "
++ { "PAWSActive", N_("%lu active connections rejected because of "
+ "time stamp"), opt_number },
+- { "PAWSEstab", N_("%u packets rejects in established connections because of"
++ { "PAWSEstab", N_("%lu packets rejects in established connections because of"
+ " timestamp"), opt_number },
+- { "DelayedACKs", N_("%u delayed acks sent"), opt_number },
+- { "DelayedACKLocked", N_("%u delayed acks further delayed because of"
++ { "DelayedACKs", N_("%lu delayed acks sent"), opt_number },
++ { "DelayedACKLocked", N_("%lu delayed acks further delayed because of"
+ " locked socket"), opt_number },
+- { "DelayedACKLost", N_("Quick ack mode was activated %u times"), opt_number },
+- { "ListenOverflows", N_("%u times the listen queue of a socket overflowed"),
++ { "DelayedACKLost", N_("Quick ack mode was activated %lu times"), opt_number },
++ { "ListenOverflows", N_("%lu times the listen queue of a socket overflowed"),
+ opt_number },
+- { "ListenDrops", N_("%u SYNs to LISTEN sockets ignored"), opt_number },
+- { "TCPPrequeued", N_("%u packets directly queued to recvmsg prequeue."),
++ { "ListenDrops", N_("%lu SYNs to LISTEN sockets ignored"), opt_number },
++ { "TCPPrequeued", N_("%lu packets directly queued to recvmsg prequeue."),
+ opt_number },
+- { "TCPDirectCopyFromBacklog", N_("%u packets directly received"
++ { "TCPDirectCopyFromBacklog", N_("%lu packets directly received"
+ " from backlog"), opt_number },
+- { "TCPDirectCopyFromPrequeue", N_("%u packets directly received"
++ { "TCPDirectCopyFromPrequeue", N_("%lu packets directly received"
+ " from prequeue"), opt_number },
+- { "TCPPrequeueDropped", N_("%u packets dropped from prequeue"), opt_number },
+- { "TCPHPHits", N_("%u packets header predicted"), number },
+- { "TCPHPHitsToUser", N_("%u packets header predicted and "
++ { "TCPPrequeueDropped", N_("%lu packets dropped from prequeue"), opt_number },
++ { "TCPHPHits", N_("%lu packets header predicted"), number },
++ { "TCPHPHitsToUser", N_("%lu packets header predicted and "
+ "directly queued to user"), opt_number },
+- { "SockMallocOOM", N_("Ran %u times out of system memory during "
++ { "SockMallocOOM", N_("Ran %lu times out of system memory during "
+ "packet sending"), opt_number },
+ };
+
diff --git a/packages/net-tools/files/net-tools-1.60-virtualname.patch b/packages/net-tools/files/net-tools-1.60-virtualname.patch
new file mode 100644
index 0000000000..326df1d4d1
--- /dev/null
+++ b/packages/net-tools/files/net-tools-1.60-virtualname.patch
@@ -0,0 +1,36 @@
+--- net-tools-1.60/lib/interface.c.virtualname 2001-02-10 20:31:15.000000000 +0100
++++ net-tools-1.60/lib/interface.c 2003-08-19 13:18:01.000000000 +0200
+@@ -579,18 +579,18 @@
+
+ void ife_print_short(struct interface *ptr)
+ {
+- printf("%-5.5s ", ptr->name);
+- printf("%5d %3d", ptr->mtu, ptr->metric);
++ printf("%-9.9s ", ptr->name);
++ printf("%5d %3d ", ptr->mtu, ptr->metric);
+ /* If needed, display the interface statistics. */
+ if (ptr->statistics_valid) {
+- printf("%8llu %6lu %6lu %6lu",
++ printf("%8llu %6lu %6lu %6lu ",
+ ptr->stats.rx_packets, ptr->stats.rx_errors,
+ ptr->stats.rx_dropped, ptr->stats.rx_fifo_errors);
+ printf("%8llu %6lu %6lu %6lu ",
+ ptr->stats.tx_packets, ptr->stats.tx_errors,
+ ptr->stats.tx_dropped, ptr->stats.tx_fifo_errors);
+ } else {
+- printf("%-56s", _(" - no statistics available -"));
++ printf("%-60s", _(" - no statistics available -"));
+ }
+ /* DONT FORGET TO ADD THE FLAGS IN ife_print_long, too */
+ if (ptr->flags == 0)
+--- net-tools-1.60/netstat.c.virtualname 2001-04-15 16:41:17.000000000 +0200
++++ net-tools-1.60/netstat.c 2003-08-19 13:18:34.000000000 +0200
+@@ -1449,7 +1449,7 @@
+ }
+ if (flag_exp < 2) {
+ ife_short = 1;
+- printf(_("Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg\n"));
++ printf(_("Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg\n"));
+ }
+
+ if (for_all_interfaces(do_if_print, &flag_all) < 0) {
diff --git a/packages/net-tools/net-tools_1.60.bb b/packages/net-tools/net-tools_1.60.bb
new file mode 100644
index 0000000000..ab79db8cf1
--- /dev/null
+++ b/packages/net-tools/net-tools_1.60.bb
@@ -0,0 +1,89 @@
+SUMMARY="Basic networking tools"
+LICENSE="GPL"
+
+
+#
+# NOTE:
+# This code currently disbles gettext/i18n! This can be fixed by rerunning
+# make config and say NO to gettext. I will leave this excercise for someone
+# else.
+# Change/generate net-tools-1.60-config.{h,make} to enable/disable features
+# and gettext
+#
+#
+
+SRC_URI = "http://download.berlios.de/${PN}/${PN}-${PV}.tar.bz2;md5sum=888774accab40217dde927e21979c165 \
+ file://net-tools-${PV}-config.h \
+ file://net-tools-${PV}-config.make \
+ file://ether-wake.c \
+ file://ether-wake.8 \
+ file://mii-diag.c \
+ file://mii-diag.8 \
+ file://net-tools-1.57-bug22040.patch;patch=1 \
+ file://net-tools-1.60-miiioctl.patch;patch=1 \
+ file://net-tools-1.60-manydevs.patch;patch=1;pnum=0 \
+ file://net-tools-1.60-virtualname.patch;patch=1 \
+ file://net-tools-1.60-cycle.patch;patch=1 \
+ file://net-tools-1.60-nameif.patch;patch=1 \
+ file://net-tools-1.60-ipx.patch;patch=1 \
+ file://net-tools-1.60-inet6-lookup.patch;patch=1 \
+ file://net-tools-1.60-man.patch;patch=1 \
+ file://net-tools-1.60-gcc33.patch;patch=1 \
+ file://net-tools-1.60-trailingblank.patch;patch=1 \
+ file://net-tools-1.60-interface.patch;patch=1 \
+ file://net-tools-1.60-gcc34.patch;patch=1 \
+ file://net-tools-1.60-overflow.patch;patch=1 \
+ file://net-tools-1.60-siunits.patch;patch=1 \
+ file://net-tools-1.60-trunc.patch;patch=1 \
+ file://net-tools-1.60-return.patch;patch=1 \
+ file://net-tools-1.60-parse.patch;patch=1 \
+ file://net-tools-1.60-netmask.patch;patch=1 \
+ file://net-tools-1.60-ulong.patch;patch=1 \
+ file://net-tools-1.60-bcast.patch;patch=1 \
+ file://net-tools-1.60-mii-tool-obsolete.patch;patch=1 \
+ file://net-tools-1.60-netstat_ulong.patch;patch=1 \
+ file://net-tools-1.60-note.patch;patch=1 \
+ file://net-tools-1.60-num-ports.patch;patch=1 \
+ file://net-tools-1.60-duplicate-tcp.patch;patch=1 \
+ file://net-tools-1.60-statalias.patch;patch=1 \
+ file://net-tools-1.60-isofix.patch;patch=1 \
+ file://net-tools-1.60-ifconfig_ib.patch;patch=1 \
+ file://net-tools-1.60-de.patch;patch=1 \
+ file://net-tools-1.60-pie.patch;patch=1 \
+ file://net-tools-1.60-ifaceopt.patch;patch=1 \
+ file://net-tools-1.60-trim_iface.patch;patch=1 \
+ file://net-tools-1.60-stdo.patch;patch=1 \
+ file://net-tools-1.60-statistics.patch;patch=1 \
+ file://net-tools-1.60-ifconfig.patch;patch=1 \
+ file://net-tools-1.60-arp_overflow.patch;patch=1 \
+ file://net-tools-1.60-hostname_man.patch;patch=1 \
+ file://net-tools-1.60-interface_stack.patch;patch=1;pnum=0 \
+ file://net-tools-1.60-selinux.patch;patch=1 \
+ file://net-tools-1.60-netstat_stop_trim.patch;patch=1 "
+
+
+# Copy config and source over to the source directory
+do_configure() {
+ cp ${WORKDIR}/net-tools-${PV}-config.h ${S}/config.h
+ cp ${WORKDIR}/net-tools-${PV}-config.make ${S}/config.make
+ cp ${WORKDIR}/ether-wake.c ${S}
+ cp ${WORKDIR}/ether-wake.8 ${S}/man/en_US
+ cp ${WORKDIR}/mii-diag.c ${S}
+ cp ${WORKDIR}/mii-diag.8 ${S}/man/en_US
+}
+
+do_compile() {
+ export COPTS=$CFLAGS
+ export LOPTS=$LDFLAGS
+ unset CFLAGS
+ unset LDFLAGS
+
+ oe_runmake
+ $CC $CFLAGS -o ether-wake ether-wake.c
+ $CC $CFLAGS -o mii-diag mii-diag.c
+}
+
+do_install() {
+ oe_runmake 'BASEDIR=${D}' -n install
+ oe_runmake 'BASEDIR=${D}' install
+}
diff --git a/packages/octave/octave_2.1.63.bb b/packages/octave/octave_2.1.63.bb
deleted file mode 100644
index c042621381..0000000000
--- a/packages/octave/octave_2.1.63.bb
+++ /dev/null
@@ -1,17 +0,0 @@
-LICENSE = "GPL"
-DESCRIPTION = "GNU Octave is a high-level language, primarily intended for numerical computations. \
-It provides a convenient command line interface for solving linear and nonlinear problems numerically, \
-and for performing other numerical experiments using a language that is mostly compatible with Matlab. \
-It may also be used as a batch-oriented language."
-SECTION = "console/util"
-DEPENDS = "readline ncurses"
-SRC_URI = "ftp://ftp.octave.org/pub/octave/bleeding-edge/octave-${PV}.tar.gz"
-
-inherit autotools
-
-FILES_${PN}-dev += "${libdir}/octave-${PV}/*.la ${libdir}/octave-${PV}/*.a"
-
-do_configure() {
- gnu-configize
- oe_runconf
-}
diff --git a/packages/octave/octave_2.1.71.bb b/packages/octave/octave_2.1.71.bb
index c042621381..462eccbf65 100644
--- a/packages/octave/octave_2.1.71.bb
+++ b/packages/octave/octave_2.1.71.bb
@@ -1,9 +1,9 @@
-LICENSE = "GPL"
DESCRIPTION = "GNU Octave is a high-level language, primarily intended for numerical computations. \
It provides a convenient command line interface for solving linear and nonlinear problems numerically, \
and for performing other numerical experiments using a language that is mostly compatible with Matlab. \
It may also be used as a batch-oriented language."
-SECTION = "console/util"
+SECTION = "console/utils"
+LICENSE = "GPL"
DEPENDS = "readline ncurses"
SRC_URI = "ftp://ftp.octave.org/pub/octave/bleeding-edge/octave-${PV}.tar.gz"
diff --git a/packages/popt/popt-native_1.7.bb b/packages/popt/popt-native_1.7.bb
index f8644f1425..75b90d0763 100644
--- a/packages/popt/popt-native_1.7.bb
+++ b/packages/popt/popt-native_1.7.bb
@@ -1,4 +1,3 @@
-SECTION = "unknown"
require popt_${PV}.bb
inherit native
diff --git a/packages/popt/popt_1.7.bb b/packages/popt/popt_1.7.bb
index 6984dbdb13..6f4dfd7acf 100644
--- a/packages/popt/popt_1.7.bb
+++ b/packages/popt/popt_1.7.bb
@@ -1,8 +1,9 @@
-SECTION = "libs"
DESCRIPTION = "The popt library exists essentially \
for parsing command line options."
LICENSE = "MIT"
-PR = "r3"
+SECTION = "libs"
+DEPENDS = "gettext-native"
+PR = "r4"
SRC_URI = "ftp://ftp.rpm.org/pub/rpm/dist/rpm-4.1.x/popt-${PV}.tar.gz \
file://m4.patch;patch=1 \
diff --git a/packages/python/python_2.4.3.bb b/packages/python/python_2.4.3.bb
index 2650926307..7718dd0722 100644
--- a/packages/python/python_2.4.3.bb
+++ b/packages/python/python_2.4.3.bb
@@ -67,5 +67,4 @@ require python-${PV}-manifest.inc
RPROVIDES_python-core = "python"
RPROVIDES_python-curses = "python"
PACKAGES =+ "libpython2"
-PACKAGES_DYNAMIC = "libpython2"
FILES_libpython2 = "${libdir}/libpython*"
diff --git a/packages/qte/qte-common_2.3.10.inc b/packages/qte/qte-common_2.3.10.inc
index b8ed16c6a8..2a1ad9686c 100644
--- a/packages/qte/qte-common_2.3.10.inc
+++ b/packages/qte/qte-common_2.3.10.inc
@@ -54,6 +54,7 @@ SRC_URI_append_poodle = "file://kernel-keymap.patch;patch=1;pnum=0 "
SRC_URI_append_a780 = "file://kernel-keymap.patch;patch=1;pnum=0 "
SRC_URI_append_e680 = "file://kernel-keymap.patch;patch=1;pnum=0 "
SRC_URI_append_tosa = "file://kernel-keymap.patch;patch=1;pnum=0 file://kernel-keymap-tosa.patch;patch=1 "
+SRC_URI_append_jornada6xx = "file://kernel-keymap.patch;patch=1;pnum=0 "
SRC_URI_append_jornada7xx = "file://kernel-keymap.patch;patch=1;pnum=0 file://ipaq_sound_fix.patch;patch=1 "
SRC_URI_append_jornada56x = "file://kernel-keymap.patch;patch=1;pnum=0 file://ipaq_sound_fix.patch;patch=1 "
SRC_URI_append_mnci = "file://devfs.patch;patch=1 \