summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--multitech/conf/distro/corecdp.conf3
-rw-r--r--multitech/conf/machine/mt100eocg-pcie-dk.conf29
-rw-r--r--multitech/recipes/at91bootstrap/at91bootstrap-2.13/memory_bus_1.8v.patch (renamed from multitech/recipes/at91bootstrap/at91bootstrap-2.13/mt100eocg/memory_bus_1.8v.patch)0
-rw-r--r--multitech/recipes/at91bootstrap/at91bootstrap-2.13/mt100eocg-pcie-dk/defconfig91
-rw-r--r--multitech/recipes/at91bootstrap/at91bootstrap_2.13.bbappend5
-rw-r--r--multitech/recipes/base-files/base-files/mt100eocg-pcie-dk/fstab9
-rw-r--r--multitech/recipes/base-files/base-files/mt100eocg-pcie-dk/profile34
-rw-r--r--multitech/recipes/bluez/bluez4.inc80
-rw-r--r--multitech/recipes/bluez/bluez4_4.98.bb20
-rwxr-xr-xmultitech/recipes/bluez/files/bluetooth.init35
-rw-r--r--multitech/recipes/compat-wireless/compat-wireless-stable.inc22
-rw-r--r--multitech/recipes/compat-wireless/files/wl12xx_sdio.patch51
-rw-r--r--multitech/recipes/compat-wireless/ti-compat-wireless-wl12xx_R4SP2.bb25
-rw-r--r--multitech/recipes/hostap/hostap-daemon-1.0.inc26
-rw-r--r--multitech/recipes/hostap/hostap-daemon-1.0/defconfig145
-rw-r--r--multitech/recipes/hostap/hostap-daemon-1.0/hostapd.conf1127
-rw-r--r--multitech/recipes/hostap/hostap-daemon-1.0/init37
-rw-r--r--multitech/recipes/hostap/hostap-daemon_1.0.bb18
-rw-r--r--multitech/recipes/images/corecdp-mtpcie-dk-image.bb14
-rw-r--r--multitech/recipes/linux/linux-2.6.39.4/linux-2.6.32.3-at25.patch37
-rw-r--r--multitech/recipes/linux/linux-2.6.39.4/linux-2.6.32.3-atmel_spi.patch12
-rw-r--r--multitech/recipes/linux/linux-2.6.39.4/linux-2.6.32.3-option-telit.patch23
-rw-r--r--multitech/recipes/linux/linux-2.6.39.4/linux-2.6.35.14-at91-gpio-pullup.patch43
-rw-r--r--multitech/recipes/linux/linux-2.6.39.4/linux-2.6.35.14-option-zte.patch12
-rw-r--r--multitech/recipes/linux/linux-2.6.39.4/linux-2.6.38-sierra-1.7.40.patch1556
-rw-r--r--multitech/recipes/linux/linux-2.6.39.4/linux-2.6.39.4-at91-mci-clock-debug.patch14
-rw-r--r--multitech/recipes/linux/linux-2.6.39.4/linux-2.6.39.4-at91sam9260-reset.patch26
-rw-r--r--multitech/recipes/linux/linux-2.6.39.4/linux-2.6.39.4-mmc-core-maxclock.patch28
-rw-r--r--multitech/recipes/linux/linux-2.6.39.4/mt100eocg-pcie-dk/defconfig2295
-rw-r--r--multitech/recipes/linux/linux-2.6.39.4/mt100eocg-pcie-dk/linux-2.6.39.4-mach-at91-mt100eocg-pcie-dk.patch406
-rw-r--r--multitech/recipes/linux/linux_2.6.39.4.bb29
-rw-r--r--multitech/recipes/multitech/mts-io/mt100eocg-pcie-dk/mts-io.init25
-rwxr-xr-xmultitech/recipes/multitech/mts-io/mt100eocg-pcie-dk/radio-reset-h516
-rw-r--r--multitech/recipes/multitech/mts-io/mts-io-pcieh5.patch226
-rw-r--r--multitech/recipes/multitech/mts-io_0.5.1.bb4
-rw-r--r--multitech/recipes/ti/ti-wifi-utils_git.bbappend3
-rw-r--r--multitech/recipes/u-boot/u-boot-1.3.4/mt100eocg-pcie-dk/fw_env.config7
-rw-r--r--multitech/recipes/u-boot/u-boot-1.3.4/mt100eocg-pcie-dk/u-boot-1.3.4-mts.patch3298
-rw-r--r--multitech/recipes/u-boot/u-boot_1.3.4.bb12
-rw-r--r--multitech/recipes/udev/udev-165/mt100eocg-pcie-dk/corecdp.rules54
-rw-r--r--multitech/recipes/udev/udev_165.bbappend2
-rw-r--r--multitech/recipes/wl12xx-firmware/wl12xx-firmware/LICENCE151
-rw-r--r--multitech/recipes/wl12xx-firmware/wl12xx-firmware/TIInit_7.6.15.btsbin0 -> 11108 bytes
-rw-r--r--multitech/recipes/wl12xx-firmware/wl12xx-firmware/wl1271-fw-2.binbin0 -> 273880 bytes
-rw-r--r--multitech/recipes/wl12xx-firmware/wl12xx-firmware/wl1271-fw-ap.binbin0 -> 272784 bytes
-rwxr-xr-xmultitech/recipes/wl12xx-firmware/wl12xx-firmware/wl1271-fw-multirole-plt.binbin0 -> 267688 bytes
-rwxr-xr-xmultitech/recipes/wl12xx-firmware/wl12xx-firmware/wl1271-fw-multirole-roc.binbin0 -> 280460 bytes
-rw-r--r--multitech/recipes/wl12xx-firmware/wl12xx-firmware/wl1271-nvs.binbin0 -> 912 bytes
-rw-r--r--multitech/recipes/wl12xx-firmware/wl12xx-firmware_1.0.bb20
-rw-r--r--multitech/recipes/wpa-supplicant/wpa-supplicant-1.0.inc94
-rw-r--r--multitech/recipes/wpa-supplicant/wpa-supplicant-1.0/99_wpa_supplicant1
-rw-r--r--multitech/recipes/wpa-supplicant/wpa-supplicant-1.0/defaults-sane8
-rw-r--r--multitech/recipes/wpa-supplicant/wpa-supplicant-1.0/defconfig409
-rw-r--r--multitech/recipes/wpa-supplicant/wpa-supplicant-1.0/wpa-supplicant.sh85
-rw-r--r--multitech/recipes/wpa-supplicant/wpa-supplicant-1.0/wpa_supplicant.conf690
-rw-r--r--multitech/recipes/wpa-supplicant/wpa-supplicant-1.0/wpa_supplicant.conf-sane7
-rw-r--r--multitech/recipes/wpa-supplicant/wpa-supplicant_1.0.bb6
57 files changed, 11358 insertions, 12 deletions
diff --git a/multitech/conf/distro/corecdp.conf b/multitech/conf/distro/corecdp.conf
index b81d4d5..1694a23 100644
--- a/multitech/conf/distro/corecdp.conf
+++ b/multitech/conf/distro/corecdp.conf
@@ -44,3 +44,6 @@ PREFERRED_VERSION_lighttpd = "1.4.28"
# don't build bluez4 and the large amount of deps just for libpcap
PREFERRED_PROVIDER_libpcap = "libpcap-nobluetooth"
+
+PREFERRED_VERSION_wpa-supplicant = "1.0"
+PREFERRED_VERSION_hostap-daemon = "1.0"
diff --git a/multitech/conf/machine/mt100eocg-pcie-dk.conf b/multitech/conf/machine/mt100eocg-pcie-dk.conf
new file mode 100644
index 0000000..d7ace51
--- /dev/null
+++ b/multitech/conf/machine/mt100eocg-pcie-dk.conf
@@ -0,0 +1,29 @@
+#@TYPE: Machine
+#@Name: Multi-Tech MT100EOCG PCIE Developer Kit
+#@DESCRIPTION: Machine configuration for the MultiConnect OCG-E with PCIE-DK board
+
+TARGET_ARCH = "arm"
+
+PREFERRED_PROVIDER_virtual/kernel = "linux"
+
+PREFERRED_VERSION_linux = "2.6.39.4"
+PREFERRED_VERSION_mts-io ?= "0.5.1"
+
+KERNEL_IMAGETYPE = "uImage"
+UBOOT_MACHINE = "at91sam9g20ek_nandflash_config"
+
+PREFERRED_VERSION_at91bootstrap = "2.13"
+PREFERRED_VERSION_u-boot = "1.3.4"
+
+#don't try to access tty1
+USE_VT = "0"
+
+MACHINE_FEATURES = "kernel26 ext2 usbhost usbgadget"
+EXTRA_IMAGEDEPENDS += "at91bootstrap u-boot"
+
+# used by sysvinit_2
+SERIAL_CONSOLE = "115200 ttyS0"
+IMAGE_FSTYPES ?= "jffs2"
+EXTRA_IMAGECMD_jffs2 = "--pad --little-endian --eraseblock=0x20000 -n"
+
+require conf/machine/include/tune-arm926ejs.inc
diff --git a/multitech/recipes/at91bootstrap/at91bootstrap-2.13/mt100eocg/memory_bus_1.8v.patch b/multitech/recipes/at91bootstrap/at91bootstrap-2.13/memory_bus_1.8v.patch
index 045f255..045f255 100644
--- a/multitech/recipes/at91bootstrap/at91bootstrap-2.13/mt100eocg/memory_bus_1.8v.patch
+++ b/multitech/recipes/at91bootstrap/at91bootstrap-2.13/memory_bus_1.8v.patch
diff --git a/multitech/recipes/at91bootstrap/at91bootstrap-2.13/mt100eocg-pcie-dk/defconfig b/multitech/recipes/at91bootstrap/at91bootstrap-2.13/mt100eocg-pcie-dk/defconfig
new file mode 100644
index 0000000..8338b3d
--- /dev/null
+++ b/multitech/recipes/at91bootstrap/at91bootstrap-2.13/mt100eocg-pcie-dk/defconfig
@@ -0,0 +1,91 @@
+#
+# Automatically generated make config: don't edit
+# Tue Jan 12 22:00:36 2010
+#
+HAVE_DOT_CONFIG=y
+CONFIG_BOARDNAME="at91sam9g20nf"
+# CONFIG_AT91SAM9260EK is not set
+# CONFIG_AT91SAM9261EK is not set
+# CONFIG_AT91SAM9263EK is not set
+# CONFIG_AT91SAM9RLEK is not set
+# CONFIG_AT91SAM9XEEK is not set
+# CONFIG_AT91SAM9G10EK is not set
+CONFIG_AT91SAM9G20EK=y
+# CONFIG_AT91SAM9G45EK is not set
+# CONFIG_AT91SAM9G45EKES is not set
+# CONFIG_AT91SAM9M10EK is not set
+# CONFIG_AT91CAP9ADK is not set
+# CONFIG_AT91CAP9STK is not set
+# CONFIG_AFEB9260 is not set
+CONFIG_CHIP="AT91SAM9G20"
+CONFIG_BOARD="at91sam9g20ek"
+CONFIG_MACH_TYPE="0x658"
+CONFIG_LINK_ADDR="0x000000"
+CONFIG_TOP_OF_MEMORY="0x301000"
+CONFIG_BOOTSTRAP_MAXSIZE="13000"
+# CONFIG_CRYSTAL_12_000MHZ is not set
+# CONFIG_CRYSTAL_16_000MHZ is not set
+# CONFIG_CRYSTAL_16_36766MHZ is not set
+CONFIG_CRYSTAL_18_432MHZ=y
+ALLOW_CRYSTAL_18_432MHZ=y
+CONFIG_CRYSTAL="CRYSTAL_18_432MHZ"
+# CONFIG_CPU_CLK_166MHZ is not set
+# CONFIG_CPU_CLK_180MHZ is not set
+# CONFIG_CPU_CLK_200MHZ is not set
+# CONFIG_CPU_CLK_240MHZ is not set
+# CONFIG_CPU_CLK_266MHZ is not set
+CONFIG_CPU_CLK_400MHZ=y
+ALLOW_CPU_CLK_400MHZ=y
+# DISABLE_CPU_CLK_240MHZ is not set
+# CONFIG_BUS_SPEED_83MHZ is not set
+# CONFIG_BUS_SPEED_90MHZ is not set
+# CONFIG_BUS_SPEED_100MHZ is not set
+CONFIG_BUS_SPEED_133MHZ=y
+
+#
+# Memory selection
+#
+CONFIG_SDRAM=y
+# CONFIG_SDDRC is not set
+# CONFIG_DDR2 is not set
+ALLOW_DATAFLASH=y
+# ALLOW_FLASH is not set
+ALLOW_NANDFLASH=y
+# ALLOW_SDCARD is not set
+# ALLOW_PSRAM is not set
+# ALLOW_SDRAM_16BIT is not set
+# CONFIG_RAM_32MB is not set
+CONFIG_RAM_64MB=y
+# CONFIG_RAM_128MB is not set
+# CONFIG_RAM_256MB is not set
+# CONFIG_DATAFLASH is not set
+# CONFIG_FLASH is not set
+CONFIG_NANDFLASH=y
+# CONFIG_SDCARD is not set
+CONFIG_MEMORY="nandflash"
+ALLOW_DATAFLASH_RECOVERY=y
+ALLOW_BOOT_FROM_DATAFLASH_CS0=y
+ALLOW_BOOT_FROM_DATAFLASH_CS1=y
+DATAFLASHCARD_ON_CS0=y
+
+#
+# NAND Flash configuration
+#
+# CONFIG_NANDFLASH_SMALL_BLOCKS is not set
+CONFIG_PROJECT="nandflash"
+CONFIG_LOAD_UBOOT=y
+# CONFIG_LOAD_64KB is not set
+# CONFIG_LOAD_1MB is not set
+# CONFIG_LOAD_4MB is not set
+CONFIG_IMG_ADDRESS="0x00020000"
+CONFIG_IMG_SIZE="0x00040000"
+CONFIG_JUMP_ADDR="0x23F00000"
+CONFIG_APP_CHECK=y
+# CONFIG_LONG_TEST is not set
+CONFIG_DEBUG=y
+CONFIG_VERBOSE=y
+CONFIG_HW_INIT=y
+# CONFIG_USER_HW_INIT is not set
+# CONFIG_THUMB is not set
+CONFIG_SX_AT91=y
+CONFIG_RAW_AT91=y
diff --git a/multitech/recipes/at91bootstrap/at91bootstrap_2.13.bbappend b/multitech/recipes/at91bootstrap/at91bootstrap_2.13.bbappend
index 2bd3fd8..9b78b06 100644
--- a/multitech/recipes/at91bootstrap/at91bootstrap_2.13.bbappend
+++ b/multitech/recipes/at91bootstrap/at91bootstrap_2.13.bbappend
@@ -1,7 +1,7 @@
FILESEXTRA := "${THISDIR}"
FILESPATHBASE =. "${FILESEXTRA}:"
-PR .= ".corecdp3"
+PR .= ".corecdp4"
SRC_URI += "file://defconfig \
file://nand_ids_toshiba.patch \
@@ -11,3 +11,6 @@ SRC_URI += "file://defconfig \
# run memory bus at 1.8v for mt100eocg
SRC_URI_append_mt100eocg = " file://memory_bus_1.8v.patch"
AT91BOOTSTRAP_FLAGS_append_mt100eocg = " -DCONFIG_USER_EBI_1V8"
+
+SRC_URI_append_mt100eocg-pcie-dk = " file://memory_bus_1.8v.patch"
+AT91BOOTSTRAP_FLAGS_append_mt100eocg-pcie-dk = " -DCONFIG_USER_EBI_1V8"
diff --git a/multitech/recipes/base-files/base-files/mt100eocg-pcie-dk/fstab b/multitech/recipes/base-files/base-files/mt100eocg-pcie-dk/fstab
new file mode 100644
index 0000000..da00b50
--- /dev/null
+++ b/multitech/recipes/base-files/base-files/mt100eocg-pcie-dk/fstab
@@ -0,0 +1,9 @@
+rootfs / auto defaults 1 1
+proc /proc proc defaults 0 0
+devpts /dev/pts devpts mode=0620,gid=5 0 0
+usbfs /proc/bus/usb usbfs defaults 0 0
+tmpfs /var/volatile tmpfs defaults 0 0
+tmpfs /dev/shm tmpfs mode=0777 0 0
+tmpfs /media/ram tmpfs defaults 0 0
+
+/dev/mtdblock6 /var/config jffs2 defaults 0 0
diff --git a/multitech/recipes/base-files/base-files/mt100eocg-pcie-dk/profile b/multitech/recipes/base-files/base-files/mt100eocg-pcie-dk/profile
new file mode 100644
index 0000000..0879251
--- /dev/null
+++ b/multitech/recipes/base-files/base-files/mt100eocg-pcie-dk/profile
@@ -0,0 +1,34 @@
+# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
+# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).
+
+PATH="/usr/local/bin:/usr/bin:/bin"
+EDITOR="/bin/vi" # needed for packages like cron
+test -z "$TERM" && TERM="vt100" # Basic terminal capab. For screen etc.
+
+if [ ! -e /etc/localtime ]; then
+ TZ="UTC" # Time Zone. Look at http://theory.uwinnipeg.ca/gnu/glibc/libc_303.html
+ # for an explanation of how to set this to your local timezone.
+ export TZ
+fi
+
+if [ "`id -u`" -eq 0 ]; then
+ PATH=$PATH:/usr/local/sbin:/usr/sbin:/sbin
+fi
+if [ "$PS1" ]; then
+# works for bash and ash (no other shells known to be in use here)
+ PS1='\$ '
+fi
+
+if [ -d /etc/profile.d ]; then
+ for i in /etc/profile.d/*.sh; do
+ if [ -r $i ]; then
+ . $i
+ fi
+ done
+ unset i
+fi
+
+export PATH PS1 OPIEDIR QPEDIR QTDIR EDITOR TERM
+
+umask 022
+
diff --git a/multitech/recipes/bluez/bluez4.inc b/multitech/recipes/bluez/bluez4.inc
new file mode 100644
index 0000000..60e0242
--- /dev/null
+++ b/multitech/recipes/bluez/bluez4.inc
@@ -0,0 +1,80 @@
+DESCRIPTION = "Linux Bluetooth Stack Userland V4"
+HOMEPAGE = "http://www.bluez.org"
+SECTION = "libs"
+PRIORITY = "optional"
+LICENSE = "GPLv2/LGPLv2.1"
+#DEPENDS = "gst-plugins-base alsa-lib virtual/libusb0 dbus-glib"
+DEPENDS = "virtual/libusb0 dbus-glib"
+INC_PR = "r10"
+
+FILESPATHBASE .= ":${OETREE}/openembedded/recipes/bluez"
+
+# temporary solution until bug 5176 is properly fixed
+PROVIDES += "bluez-utils bluez-libs bluez-utils-dbus"
+RPROVIDES_bluez4 += "bluez-utils bluez-libs bluez-utils-dbus"
+RPROVIDES_bluez4-dev = "bluez-libs-dev"
+
+SRC_URI = "\
+ http://www.kernel.org/pub/linux/bluetooth/bluez-${PV}.tar.gz \
+ file://fix-dfutool-usb-declaration-mismatch.patch \
+ file://bluetooth.conf \
+"
+
+SRC_URI_append_mt100eocg-pcie-dk = "file://bluetooth.init"
+
+S = "${WORKDIR}/bluez-${PV}"
+
+inherit autotools update-rc.d
+
+EXTRA_OECONF = "\
+ --enable-debug \
+ --disable-gstreamer \
+ --disable-alsa \
+ --enable-usb \
+ --enable-netlink \
+ --enable-tools \
+ --enable-bccmd \
+ --disable-hid2hci \
+ --enable-dfutool \
+ --enable-hidd \
+ --enable-pand \
+ --enable-dund \
+ --disable-cups \
+ --enable-test \
+ --enable-manpages \
+ --enable-configfiles \
+ --enable-initscripts \
+ --disable-pcmciarules \
+"
+
+do_install_append() {
+ install -m 0644 ${S}/audio/audio.conf ${D}/${sysconfdir}/bluetooth/
+ install -m 0644 ${S}/network/network.conf ${D}/${sysconfdir}/bluetooth/
+ install -m 0644 ${S}/input/input.conf ${D}/${sysconfdir}/bluetooth/
+ # at_console doesn't really work with the current state of OE, so punch some more holes so people can actually use BT
+ install -m 0644 ${WORKDIR}/bluetooth.conf ${D}/${sysconfdir}/dbus-1/system.d/
+}
+
+do_install_append_mt100eocg-pcie-dk() {
+ install -d ${D}${sysconfdir}/init.d
+ install -m 0755 ${WORKDIR}/bluetooth.init ${D}${sysconfdir}/init.d/bluetooth
+}
+
+INITSCRIPT_NAME = "bluetooth"
+INITSCRIPT_PARAMS = "defaults 23 19"
+
+#PACKAGES =+ "gst-plugin-bluez libasound-module-bluez"
+
+#FILES_gst-plugin-bluez = "${libdir}/gstreamer-0.10/lib*.so"
+#FILES_libasound-module-bluez = "${libdir}/alsa-lib/lib*.so ${datadir}/alsa/bluetooth.conf"
+FILES_${PN} += "${libdir}/bluetooth/plugins/*.so ${base_libdir}/udev"
+FILES_${PN}-dev += "\
+ ${libdir}/bluetooth/plugins/*.la \
+ ${libdir}/alsa-lib/*.la \
+ ${libdir}/gstreamer-0.10/*.la \
+"
+
+FILES_${PN}-dbg += "\
+ ${libdir}/bluetooth/plugins/.debug \
+ ${libdir}/*/.debug \
+"
diff --git a/multitech/recipes/bluez/bluez4_4.98.bb b/multitech/recipes/bluez/bluez4_4.98.bb
new file mode 100644
index 0000000..6d1b4df
--- /dev/null
+++ b/multitech/recipes/bluez/bluez4_4.98.bb
@@ -0,0 +1,20 @@
+require bluez4.inc
+
+SRC_URI[md5sum] = "362864b716950baa04797de735fc237b"
+SRC_URI[sha256sum] = "9a5b655bada7c7a1921cb3bac83b8a32bbe49893e4c7a1377cdc1b0d35f7d233"
+
+#DEPENDS += "libsndfile1"
+
+PR = "${INC_PR}.0"
+
+# Not all distros have a recent enough udev
+BTUDEV = " --disable-udevrules"
+BTUDEV_angstrom = " --enable-udevrules"
+BTUDEV_corecdp = " --enable-udevrules"
+BTUDEV_shr = " --enable-udevrules"
+
+EXTRA_OECONF += "${BTUDEV}"
+
+FILES_${PN}-dbg += "\
+ ${base_libdir}/*/.debug \
+"
diff --git a/multitech/recipes/bluez/files/bluetooth.init b/multitech/recipes/bluez/files/bluetooth.init
new file mode 100755
index 0000000..58318c3
--- /dev/null
+++ b/multitech/recipes/bluez/files/bluetooth.init
@@ -0,0 +1,35 @@
+#!/bin/bash
+
+bt_start()
+{
+ echo "Enabling bluetooth..."
+ mts-io-sysfs store bt-enabled 0
+ usleep 200000
+ mts-io-sysfs store bt-enabled 1
+ sleep 1
+ echo "Setting up bluetooth device..."
+ hciattach /dev/bt texas
+}
+
+bt_stop() {
+ echo "Disabling bluetooth..."
+ killall hciattach
+ mts-io-sysfs store bt-enabled 0
+}
+
+case "$1" in
+ start)
+ bt_start
+ ;;
+ stop)
+ bt_stop
+ ;;
+ restart)
+ bt_stop
+ bt_start
+ ;;
+ *)
+ echo "Usage $0: start|stop|restart"
+ exit 1
+ ;;
+esac
diff --git a/multitech/recipes/compat-wireless/compat-wireless-stable.inc b/multitech/recipes/compat-wireless/compat-wireless-stable.inc
new file mode 100644
index 0000000..f7e78d3
--- /dev/null
+++ b/multitech/recipes/compat-wireless/compat-wireless-stable.inc
@@ -0,0 +1,22 @@
+DESCRIPTION = "Latest wireless drivers"
+HOMEPAGE = "http://wireless.kernel.org/en/users/Download"
+SECTION = "kernel/modules"
+LICENSE = "GPL"
+RDEPENDS = "wireless-tools"
+PR = "r0"
+
+
+S = "${WORKDIR}/compat-wireless-${COMPAT_WIRELESS_VERSION}"
+
+inherit module
+
+EXTRA_OEMAKE = "KLIB_BUILD=${STAGING_KERNEL_DIR} KLIB=${D}"
+
+do_configure_append() {
+ sed -i "s#@./scripts/update-initramfs## " Makefile
+}
+
+do_install() {
+ oe_runmake DEPMOD=echo DESTDIR="${D}" INSTALL_MOD_PATH="${D}" LDFLAGS="" install-modules
+}
+
diff --git a/multitech/recipes/compat-wireless/files/wl12xx_sdio.patch b/multitech/recipes/compat-wireless/files/wl12xx_sdio.patch
new file mode 100644
index 0000000..9db2a03
--- /dev/null
+++ b/multitech/recipes/compat-wireless/files/wl12xx_sdio.patch
@@ -0,0 +1,51 @@
+--- a/drivers/net/wireless/wl12xx/sdio.c 2011-12-20 06:20:19.000000000 -0600
++++ b/drivers/net/wireless/wl12xx/sdio.c 2012-06-20 12:51:18.000000000 -0500
+@@ -169,6 +169,10 @@
+ struct sdio_func *func = wl_to_func(wl);
+ int ret;
+
++ // MTPCIE:
++ if (wl->set_power)
++ wl->set_power(1);
++
+ /* If enabled, tell runtime PM not to power off the card */
+ if (pm_runtime_enabled(&func->dev)) {
+ ret = pm_runtime_get_sync(&func->dev);
+@@ -193,6 +197,10 @@
+ struct sdio_func *func = wl_to_func(wl);
+ int ret;
+
++ // MTPCIE:
++ if (wl->set_power)
++ wl->set_power(0);
++
+ sdio_disable_func(func);
+ sdio_release_host(func);
+
+@@ -265,14 +273,18 @@
+ wl->irq = wlan_data->irq;
+ if (wl->ref_clock < 0)
+ wl->ref_clock = wlan_data->board_ref_clock;
+- if (wl->tcxo_clock < 0)
+- wl->tcxo_clock = wlan_data->board_tcxo_clock;
+- wl->platform_quirks = wlan_data->platform_quirks;
+-
+- if (wl->platform_quirks & WL12XX_PLATFORM_QUIRK_EDGE_IRQ)
+- irqflags = IRQF_TRIGGER_RISING;
+- else
+- irqflags = IRQF_TRIGGER_HIGH | IRQF_ONESHOT;
++ // MTPCIE:
++ if (wlan_data->set_power)
++ wl->set_power = wlan_data->set_power;
++
++ //if (wl->tcxo_clock < 0)
++ // wl->tcxo_clock = wlan_data->board_tcxo_clock;
++ //wl->platform_quirks = wlan_data->platform_quirks;
++
++ //if (wl->platform_quirks & WL12XX_PLATFORM_QUIRK_EDGE_IRQ)
++ irqflags = IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING;
++ //else
++ // irqflags = IRQF_TRIGGER_HIGH | IRQF_ONESHOT;
+
+ ret = request_threaded_irq(wl->irq, wl1271_hardirq, wl1271_irq,
+ irqflags,
diff --git a/multitech/recipes/compat-wireless/ti-compat-wireless-wl12xx_R4SP2.bb b/multitech/recipes/compat-wireless/ti-compat-wireless-wl12xx_R4SP2.bb
new file mode 100644
index 0000000..50906f4
--- /dev/null
+++ b/multitech/recipes/compat-wireless/ti-compat-wireless-wl12xx_R4SP2.bb
@@ -0,0 +1,25 @@
+include compat-wireless-stable.inc
+
+SRC_URI = "https://gforge.ti.com/gf/download/frsrelease/768/5331/ti-compat-wireless-wl12xx-r4-12-12-20.tar.gz \
+ http://processors.wiki.ti.com/images/2/23/R4_SP2_Patches.zip;name=r4sp2 \
+ file://${WORKDIR}/0004-added-driver-version.patch \
+ file://${WORKDIR}/0005-wl12xx-don-t-allow-scans-in-AP-mode.patch \
+ file://${WORKDIR}/0006-wl12xx-handle-idle-changes-per-interface.patch \
+ file://${WORKDIR}/0007-wl12xx-prevent-double-idle-on-off-transitions.patch \
+ file://${WORKDIR}/0008-wl12xx-remove-warning-message-during-IBSS-Tx.patch \
+ file://${WORKDIR}/0012-mac80211-set-upasd-queues-and-max-sp-only-on-sta-addition.patch \
+ file://${WORKDIR}/0013-wl12xx-Make-sure-HW-is-available-in-sched-scan-ops.patch \
+ file://wl12xx_sdio.patch \
+ "
+
+S = "${WORKDIR}/compat-wireless"
+
+SRC_URI[md5sum] = "89fa40e0ece490cf73920a71df1c3558"
+SRC_URI[sha256sum] = "752b53b09e9ae168a4a7f32ad009bb2b8b245c152f65ace1edc51a1ef8bba59f"
+SRC_URI[r4sp2.md5sum] = "2524ae356e5fe528da977dfe19f20b32"
+SRC_URI[r4sp2.sha256sum] = "72936b852465ba98a72cdfa66bdb49aff66d1a42080514e000211aac078a4b24"
+
+do_configure() {
+ cd ${S}
+ ./scripts/driver-select wl12xx
+}
diff --git a/multitech/recipes/hostap/hostap-daemon-1.0.inc b/multitech/recipes/hostap/hostap-daemon-1.0.inc
new file mode 100644
index 0000000..b0b6a44
--- /dev/null
+++ b/multitech/recipes/hostap/hostap-daemon-1.0.inc
@@ -0,0 +1,26 @@
+HOMEPAGE = "http://hostap.epitest.fi"
+SECTION = "kernel/userland"
+PRIORITY = "optional"
+LICENSE = "GPL"
+DEPENDS = "libnl openssl"
+
+inherit update-rc.d
+INITSCRIPT_NAME=hostapd
+
+do_configure() {
+ install -m 0644 ${WORKDIR}/defconfig ${S}/.config
+}
+
+do_compile() {
+ make
+}
+
+do_install() {
+ install -d ${D}${sbindir} ${D}${sysconfdir}/init.d
+ install -m 0644 ${WORKDIR}/hostapd.conf ${D}${sysconfdir}
+ install -m 0755 ${S}/hostapd ${D}${sbindir}
+ install -m 0755 ${S}/hostapd_cli ${D}${sbindir}
+ install -m 755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/hostapd
+}
+
+CONFFILES_${PN} += "${sysconfdir}/hostapd.conf"
diff --git a/multitech/recipes/hostap/hostap-daemon-1.0/defconfig b/multitech/recipes/hostap/hostap-daemon-1.0/defconfig
new file mode 100644
index 0000000..1f3c6f4
--- /dev/null
+++ b/multitech/recipes/hostap/hostap-daemon-1.0/defconfig
@@ -0,0 +1,145 @@
+# Example hostapd build time configuration
+#
+# This file lists the configuration options that are used when building the
+# hostapd binary. All lines starting with # are ignored. Configuration option
+# lines must be commented out complete, if they are not to be included, i.e.,
+# just setting VARIABLE=n is not disabling that variable.
+#
+# This file is included in Makefile, so variables like CFLAGS and LIBS can also
+# be modified from here. In most cass, these lines should use += in order not
+# to override previous values of the variables.
+
+# Driver interface for Host AP driver
+CONFIG_DRIVER_HOSTAP=y
+
+# Driver interface for wired authenticator
+CONFIG_DRIVER_WIRED=y
+
+# Driver interface for madwifi driver
+#CONFIG_DRIVER_MADWIFI=y
+#CFLAGS += -I../../madwifi # change to the madwifi source directory
+
+# Driver interface for Prism54 driver
+CONFIG_DRIVER_PRISM54=y
+
+# Driver interface for drivers using the nl80211 kernel interface
+CONFIG_DRIVER_NL80211=y
+CONFIG_LIBNL20=y
+# driver_nl80211.c requires a rather new libnl (version 1.1) which may not be
+# shipped with your distribution yet. If that is the case, you need to build
+# newer libnl version and point the hostapd build to use it.
+#LIBNL=/usr/src/libnl
+#CFLAGS += -I$(LIBNL)/include
+#LIBS += -L$(LIBNL)/lib
+
+# Driver interface for FreeBSD net80211 layer (e.g., Atheros driver)
+#CONFIG_DRIVER_BSD=y
+#CFLAGS += -I/usr/local/include
+#LIBS += -L/usr/local/lib
+
+# Driver interface for no driver (e.g., RADIUS server only)
+#CONFIG_DRIVER_NONE=y
+
+# IEEE 802.11F/IAPP
+CONFIG_IAPP=y
+
+# WPA2/IEEE 802.11i RSN pre-authentication
+CONFIG_RSN_PREAUTH=y
+
+# PeerKey handshake for Station to Station Link (IEEE 802.11e DLS)
+CONFIG_PEERKEY=y
+
+# IEEE 802.11w (management frame protection)
+# This version is an experimental implementation based on IEEE 802.11w/D1.0
+# draft and is subject to change since the standard has not yet been finalized.
+# Driver support is also needed for IEEE 802.11w.
+#CONFIG_IEEE80211W=y
+
+# Integrated EAP server
+CONFIG_EAP=y
+
+# EAP-MD5 for the integrated EAP server
+CONFIG_EAP_MD5=y
+
+# EAP-TLS for the integrated EAP server
+CONFIG_EAP_TLS=y
+
+# EAP-MSCHAPv2 for the integrated EAP server
+CONFIG_EAP_MSCHAPV2=y
+
+# EAP-PEAP for the integrated EAP server
+CONFIG_EAP_PEAP=y
+
+# EAP-GTC for the integrated EAP server
+CONFIG_EAP_GTC=y
+
+# EAP-TTLS for the integrated EAP server
+CONFIG_EAP_TTLS=y
+
+# EAP-SIM for the integrated EAP server
+#CONFIG_EAP_SIM=y
+
+# EAP-AKA for the integrated EAP server
+#CONFIG_EAP_AKA=y
+
+# EAP-AKA' for the integrated EAP server
+# This requires CONFIG_EAP_AKA to be enabled, too.
+#CONFIG_EAP_AKA_PRIME=y
+
+# EAP-PAX for the integrated EAP server
+#CONFIG_EAP_PAX=y
+
+# EAP-PSK for the integrated EAP server (this is _not_ needed for WPA-PSK)
+#CONFIG_EAP_PSK=y
+
+# EAP-SAKE for the integrated EAP server
+#CONFIG_EAP_SAKE=y
+
+# EAP-GPSK for the integrated EAP server
+#CONFIG_EAP_GPSK=y
+# Include support for optional SHA256 cipher suite in EAP-GPSK
+#CONFIG_EAP_GPSK_SHA256=y
+
+# EAP-FAST for the integrated EAP server
+# Note: Default OpenSSL package does not include support for all the
+# functionality needed for EAP-FAST. If EAP-FAST is enabled with OpenSSL,
+# the OpenSSL library must be patched (openssl-0.9.9-session-ticket.patch)
+# to add the needed functions.
+#CONFIG_EAP_FAST=y
+
+# Wi-Fi Protected Setup (WPS)
+CONFIG_WPS=y
+# Enable UPnP support for external WPS Registrars
+#CONFIG_WPS_UPNP=y
+
+# EAP-IKEv2
+#CONFIG_EAP_IKEV2=y
+
+# Trusted Network Connect (EAP-TNC)
+#CONFIG_EAP_TNC=y
+
+# PKCS#12 (PFX) support (used to read private key and certificate file from
+# a file that usually has extension .p12 or .pfx)
+CONFIG_PKCS12=y
+
+# RADIUS authentication server. This provides access to the integrated EAP
+# server from external hosts using RADIUS.
+CONFIG_RADIUS_SERVER=y
+
+# Build IPv6 support for RADIUS operations
+CONFIG_IPV6=y
+
+# IEEE Std 802.11r-2008 (Fast BSS Transition)
+#CONFIG_IEEE80211R=y
+
+# Use the hostapd's IEEE 802.11 authentication (ACL), but without
+# the IEEE 802.11 Management capability (e.g., madwifi or FreeBSD/net80211)
+CONFIG_DRIVER_RADIUS_ACL=y
+
+# IEEE 802.11n (High Throughput) support
+CONFIG_IEEE80211N=y
+
+# Remove debugging code that is printing out debug messages to stdout.
+# This can be used to reduce the size of the hostapd considerably if debugging
+# code is not needed.
+#CONFIG_NO_STDOUT_DEBUG=y
diff --git a/multitech/recipes/hostap/hostap-daemon-1.0/hostapd.conf b/multitech/recipes/hostap/hostap-daemon-1.0/hostapd.conf
new file mode 100644
index 0000000..27d9e46
--- /dev/null
+++ b/multitech/recipes/hostap/hostap-daemon-1.0/hostapd.conf
@@ -0,0 +1,1127 @@
+##### hostapd configuration file ##############################################
+# Empty lines and lines starting with # are ignored
+
+# AP netdevice name (without 'ap' postfix, i.e., wlan0 uses wlan0ap for
+# management frames); ath0 for madwifi
+interface=wlan0
+
+# In case of madwifi, atheros, and nl80211 driver interfaces, an additional
+# configuration parameter, bridge, may be used to notify hostapd if the
+# interface is included in a bridge. This parameter is not used with Host AP
+# driver. If the bridge parameter is not set, the drivers will automatically
+# figure out the bridge interface (assuming sysfs is enabled and mounted to
+# /sys) and this parameter may not be needed.
+#
+# For nl80211, this parameter can be used to request the AP interface to be
+# added to the bridge automatically (brctl may refuse to do this before hostapd
+# has been started to change the interface mode). If needed, the bridge
+# interface is also created.
+#bridge=br0
+
+# Driver interface type (hostap/wired/madwifi/test/none/nl80211/bsd);
+# default: hostap). nl80211 is used with all Linux mac80211 drivers.
+# Use driver=none if building hostapd as a standalone RADIUS server that does
+# not control any wireless/wired driver.
+driver=nl80211
+
+# hostapd event logger configuration
+#
+# Two output method: syslog and stdout (only usable if not forking to
+# background).
+#
+# Module bitfield (ORed bitfield of modules that will be logged; -1 = all
+# modules):
+# bit 0 (1) = IEEE 802.11
+# bit 1 (2) = IEEE 802.1X
+# bit 2 (4) = RADIUS
+# bit 3 (8) = WPA
+# bit 4 (16) = driver interface
+# bit 5 (32) = IAPP
+# bit 6 (64) = MLME
+#
+# Levels (minimum value for logged events):
+# 0 = verbose debugging
+# 1 = debugging
+# 2 = informational messages
+# 3 = notification
+# 4 = warning
+#
+logger_syslog=-1
+logger_syslog_level=2
+logger_stdout=-1
+logger_stdout_level=2
+
+# Dump file for state information (on SIGUSR1)
+dump_file=/tmp/hostapd.dump
+
+# Interface for separate control program. If this is specified, hostapd
+# will create this directory and a UNIX domain socket for listening to requests
+# from external programs (CLI/GUI, etc.) for status information and
+# configuration. The socket file will be named based on the interface name, so
+# multiple hostapd processes/interfaces can be run at the same time if more
+# than one interface is used.
+# /var/run/hostapd is the recommended directory for sockets and by default,
+# hostapd_cli will use it when trying to connect with hostapd.
+ctrl_interface=/var/run/hostapd
+
+# Access control for the control interface can be configured by setting the
+# directory to allow only members of a group to use sockets. This way, it is
+# possible to run hostapd as root (since it needs to change network
+# configuration and open raw sockets) and still allow GUI/CLI components to be
+# run as non-root users. However, since the control interface can be used to
+# change the network configuration, this access needs to be protected in many
+# cases. By default, hostapd is configured to use gid 0 (root). If you
+# want to allow non-root users to use the contron interface, add a new group
+# and change this value to match with that group. Add users that should have
+# control interface access to this group.
+#
+# This variable can be a group name or gid.
+#ctrl_interface_group=wheel
+ctrl_interface_group=0
+
+
+##### IEEE 802.11 related configuration #######################################
+
+# SSID to be used in IEEE 802.11 management frames
+ssid=test
+
+# Country code (ISO/IEC 3166-1). Used to set regulatory domain.
+# Set as needed to indicate country in which device is operating.
+# This can limit available channels and transmit power.
+#country_code=US
+
+# Enable IEEE 802.11d. This advertises the country_code and the set of allowed
+# channels and transmit power levels based on the regulatory limits. The
+# country_code setting must be configured with the correct country for
+# IEEE 802.11d functions.
+# (default: 0 = disabled)
+#ieee80211d=1
+
+# Operation mode (a = IEEE 802.11a, b = IEEE 802.11b, g = IEEE 802.11g,
+# Default: IEEE 802.11b
+hw_mode=g
+
+# Channel number (IEEE 802.11)
+# (default: 0, i.e., not set)
+# Please note that some drivers do not use this value from hostapd and the
+# channel will need to be configured separately with iwconfig.
+channel=1
+
+# Beacon interval in kus (1.024 ms) (default: 100; range 15..65535)
+beacon_int=100
+
+# DTIM (delivery traffic information message) period (range 1..255):
+# number of beacons between DTIMs (1 = every beacon includes DTIM element)
+# (default: 2)
+dtim_period=2
+
+# Maximum number of stations allowed in station table. New stations will be
+# rejected after the station table is full. IEEE 802.11 has a limit of 2007
+# different association IDs, so this number should not be larger than that.
+# (default: 2007)
+max_num_sta=255
+
+# RTS/CTS threshold; 2347 = disabled (default); range 0..2347
+# If this field is not included in hostapd.conf, hostapd will not control
+# RTS threshold and 'iwconfig wlan# rts <val>' can be used to set it.
+rts_threshold=2347
+
+# Fragmentation threshold; 2346 = disabled (default); range 256..2346
+# If this field is not included in hostapd.conf, hostapd will not control
+# fragmentation threshold and 'iwconfig wlan# frag <val>' can be used to set
+# it.
+fragm_threshold=2346
+
+# Rate configuration
+# Default is to enable all rates supported by the hardware. This configuration
+# item allows this list be filtered so that only the listed rates will be left
+# in the list. If the list is empty, all rates are used. This list can have
+# entries that are not in the list of rates the hardware supports (such entries
+# are ignored). The entries in this list are in 100 kbps, i.e., 11 Mbps = 110.
+# If this item is present, at least one rate have to be matching with the rates
+# hardware supports.
+# default: use the most common supported rate setting for the selected
+# hw_mode (i.e., this line can be removed from configuration file in most
+# cases)
+#supported_rates=10 20 55 110 60 90 120 180 240 360 480 540
+
+# Basic rate set configuration
+# List of rates (in 100 kbps) that are included in the basic rate set.
+# If this item is not included, usually reasonable default set is used.
+#basic_rates=10 20
+#basic_rates=10 20 55 110
+#basic_rates=60 120 240
+
+# Short Preamble
+# This parameter can be used to enable optional use of short preamble for
+# frames sent at 2 Mbps, 5.5 Mbps, and 11 Mbps to improve network performance.
+# This applies only to IEEE 802.11b-compatible networks and this should only be
+# enabled if the local hardware supports use of short preamble. If any of the
+# associated STAs do not support short preamble, use of short preamble will be
+# disabled (and enabled when such STAs disassociate) dynamically.
+# 0 = do not allow use of short preamble (default)
+# 1 = allow use of short preamble
+#preamble=1
+
+# Station MAC address -based authentication
+# Please note that this kind of access control requires a driver that uses
+# hostapd to take care of management frame processing and as such, this can be
+# used with driver=hostap or driver=nl80211, but not with driver=madwifi.
+# 0 = accept unless in deny list
+# 1 = deny unless in accept list
+# 2 = use external RADIUS server (accept/deny lists are searched first)
+macaddr_acl=0
+
+# Accept/deny lists are read from separate files (containing list of
+# MAC addresses, one per line). Use absolute path name to make sure that the
+# files can be read on SIGHUP configuration reloads.
+#accept_mac_file=/etc/hostapd.accept
+#deny_mac_file=/etc/hostapd.deny
+
+# IEEE 802.11 specifies two authentication algorithms. hostapd can be
+# configured to allow both of these or only one. Open system authentication
+# should be used with IEEE 802.1X.
+# Bit fields of allowed authentication algorithms:
+# bit 0 = Open System Authentication
+# bit 1 = Shared Key Authentication (requires WEP)
+auth_algs=3
+
+# Send empty SSID in beacons and ignore probe request frames that do not
+# specify full SSID, i.e., require stations to know SSID.
+# default: disabled (0)
+# 1 = send empty (length=0) SSID in beacon and ignore probe request for
+# broadcast SSID
+# 2 = clear SSID (ASCII 0), but keep the original length (this may be required
+# with some clients that do not support empty SSID) and ignore probe
+# requests for broadcast SSID
+ignore_broadcast_ssid=0
+
+# TX queue parameters (EDCF / bursting)
+# tx_queue_<queue name>_<param>
+# queues: data0, data1, data2, data3, after_beacon, beacon
+# (data0 is the highest priority queue)
+# parameters:
+# aifs: AIFS (default 2)
+# cwmin: cwMin (1, 3, 7, 15, 31, 63, 127, 255, 511, 1023)
+# cwmax: cwMax (1, 3, 7, 15, 31, 63, 127, 255, 511, 1023); cwMax >= cwMin
+# burst: maximum length (in milliseconds with precision of up to 0.1 ms) for
+# bursting
+#
+# Default WMM parameters (IEEE 802.11 draft; 11-03-0504-03-000e):
+# These parameters are used by the access point when transmitting frames
+# to the clients.
+#
+# Low priority / AC_BK = background
+#tx_queue_data3_aifs=7
+#tx_queue_data3_cwmin=15
+#tx_queue_data3_cwmax=1023
+#tx_queue_data3_burst=0
+# Note: for IEEE 802.11b mode: cWmin=31 cWmax=1023 burst=0
+#
+# Normal priority / AC_BE = best effort
+#tx_queue_data2_aifs=3
+#tx_queue_data2_cwmin=15
+#tx_queue_data2_cwmax=63
+#tx_queue_data2_burst=0
+# Note: for IEEE 802.11b mode: cWmin=31 cWmax=127 burst=0
+#
+# High priority / AC_VI = video
+#tx_queue_data1_aifs=1
+#tx_queue_data1_cwmin=7
+#tx_queue_data1_cwmax=15
+#tx_queue_data1_burst=3.0
+# Note: for IEEE 802.11b mode: cWmin=15 cWmax=31 burst=6.0
+#
+# Highest priority / AC_VO = voice
+#tx_queue_data0_aifs=1
+#tx_queue_data0_cwmin=3
+#tx_queue_data0_cwmax=7
+#tx_queue_data0_burst=1.5
+# Note: for IEEE 802.11b mode: cWmin=7 cWmax=15 burst=3.3
+
+# 802.1D Tag (= UP) to AC mappings
+# WMM specifies following mapping of data frames to different ACs. This mapping
+# can be configured using Linux QoS/tc and sch_pktpri.o module.
+# 802.1D Tag 802.1D Designation Access Category WMM Designation
+# 1 BK AC_BK Background
+# 2 - AC_BK Background
+# 0 BE AC_BE Best Effort
+# 3 EE AC_BE Best Effort
+# 4 CL AC_VI Video
+# 5 VI AC_VI Video
+# 6 VO AC_VO Voice
+# 7 NC AC_VO Voice
+# Data frames with no priority information: AC_BE
+# Management frames: AC_VO
+# PS-Poll frames: AC_BE
+
+# Default WMM parameters (IEEE 802.11 draft; 11-03-0504-03-000e):
+# for 802.11a or 802.11g networks
+# These parameters are sent to WMM clients when they associate.
+# The parameters will be used by WMM clients for frames transmitted to the
+# access point.
+#
+# note - txop_limit is in units of 32microseconds
+# note - acm is admission control mandatory flag. 0 = admission control not
+# required, 1 = mandatory
+# note - here cwMin and cmMax are in exponent form. the actual cw value used
+# will be (2^n)-1 where n is the value given here
+#
+wmm_enabled=1
+#
+# WMM-PS Unscheduled Automatic Power Save Delivery [U-APSD]
+# Enable this flag if U-APSD supported outside hostapd (eg., Firmware/driver)
+#uapsd_advertisement_enabled=1
+#
+# Low priority / AC_BK = background
+wmm_ac_bk_cwmin=4
+wmm_ac_bk_cwmax=10
+wmm_ac_bk_aifs=7
+wmm_ac_bk_txop_limit=0
+wmm_ac_bk_acm=0
+# Note: for IEEE 802.11b mode: cWmin=5 cWmax=10
+#
+# Normal priority / AC_BE = best effort
+wmm_ac_be_aifs=3
+wmm_ac_be_cwmin=4
+wmm_ac_be_cwmax=10
+wmm_ac_be_txop_limit=0
+wmm_ac_be_acm=0
+# Note: for IEEE 802.11b mode: cWmin=5 cWmax=7
+#
+# High priority / AC_VI = video
+wmm_ac_vi_aifs=2
+wmm_ac_vi_cwmin=3
+wmm_ac_vi_cwmax=4
+wmm_ac_vi_txop_limit=94
+wmm_ac_vi_acm=0
+# Note: for IEEE 802.11b mode: cWmin=4 cWmax=5 txop_limit=188
+#
+# Highest priority / AC_VO = voice
+wmm_ac_vo_aifs=2
+wmm_ac_vo_cwmin=2
+wmm_ac_vo_cwmax=3
+wmm_ac_vo_txop_limit=47
+wmm_ac_vo_acm=0
+# Note: for IEEE 802.11b mode: cWmin=3 cWmax=4 burst=102
+
+# Static WEP key configuration
+#
+# The key number to use when transmitting.
+# It must be between 0 and 3, and the corresponding key must be set.
+# default: not set
+#wep_default_key=0
+# The WEP keys to use.
+# A key may be a quoted string or unquoted hexadecimal digits.
+# The key length should be 5, 13, or 16 characters, or 10, 26, or 32
+# digits, depending on whether 40-bit (64-bit), 104-bit (128-bit), or
+# 128-bit (152-bit) WEP is used.
+# Only the default key must be supplied; the others are optional.
+# default: not set
+#wep_key0=123456789a
+#wep_key1="vwxyz"
+#wep_key2=0102030405060708090a0b0c0d
+#wep_key3=".2.4.6.8.0.23"
+
+# Station inactivity limit
+#
+# If a station does not send anything in ap_max_inactivity seconds, an
+# empty data frame is sent to it in order to verify whether it is
+# still in range. If this frame is not ACKed, the station will be
+# disassociated and then deauthenticated. This feature is used to
+# clear station table of old entries when the STAs move out of the
+# range.
+#
+# The station can associate again with the AP if it is still in range;
+# this inactivity poll is just used as a nicer way of verifying
+# inactivity; i.e., client will not report broken connection because
+# disassociation frame is not sent immediately without first polling
+# the STA with a data frame.
+# default: 300 (i.e., 5 minutes)
+#ap_max_inactivity=300
+
+# Disassociate stations based on excessive transmission failures or other
+# indications of connection loss. This depends on the driver capabilities and
+# may not be available with all drivers.
+#disassoc_low_ack=1
+
+# Maximum allowed Listen Interval (how many Beacon periods STAs are allowed to
+# remain asleep). Default: 65535 (no limit apart from field size)
+#max_listen_interval=100
+
+# WDS (4-address frame) mode with per-station virtual interfaces
+# (only supported with driver=nl80211)
+# This mode allows associated stations to use 4-address frames to allow layer 2
+# bridging to be used.
+#wds_sta=1
+
+# If bridge parameter is set, the WDS STA interface will be added to the same
+# bridge by default. This can be overridden with the wds_bridge parameter to
+# use a separate bridge.
+#wds_bridge=wds-br0
+
+# Client isolation can be used to prevent low-level bridging of frames between
+# associated stations in the BSS. By default, this bridging is allowed.
+#ap_isolate=1
+
+##### IEEE 802.11n related configuration ######################################
+
+# ieee80211n: Whether IEEE 802.11n (HT) is enabled
+# 0 = disabled (default)
+# 1 = enabled
+# Note: You will also need to enable WMM for full HT functionality.
+#ieee80211n=1
+
+# ht_capab: HT capabilities (list of flags)
+# LDPC coding capability: [LDPC] = supported
+# Supported channel width set: [HT40-] = both 20 MHz and 40 MHz with secondary
+# channel below the primary channel; [HT40+] = both 20 MHz and 40 MHz
+# with secondary channel below the primary channel
+# (20 MHz only if neither is set)
+# Note: There are limits on which channels can be used with HT40- and
+# HT40+. Following table shows the channels that may be available for
+# HT40- and HT40+ use per IEEE 802.11n Annex J:
+# freq HT40- HT40+
+# 2.4 GHz 5-13 1-7 (1-9 in Europe/Japan)
+# 5 GHz 40,48,56,64 36,44,52,60
+# (depending on the location, not all of these channels may be available
+# for use)
+# Please note that 40 MHz channels may switch their primary and secondary
+# channels if needed or creation of 40 MHz channel maybe rejected based
+# on overlapping BSSes. These changes are done automatically when hostapd
+# is setting up the 40 MHz channel.
+# Spatial Multiplexing (SM) Power Save: [SMPS-STATIC] or [SMPS-DYNAMIC]
+# (SMPS disabled if neither is set)
+# HT-greenfield: [GF] (disabled if not set)
+# Short GI for 20 MHz: [SHORT-GI-20] (disabled if not set)
+# Short GI for 40 MHz: [SHORT-GI-40] (disabled if not set)
+# Tx STBC: [TX-STBC] (disabled if not set)
+# Rx STBC: [RX-STBC1] (one spatial stream), [RX-STBC12] (one or two spatial
+# streams), or [RX-STBC123] (one, two, or three spatial streams); Rx STBC
+# disabled if none of these set
+# HT-delayed Block Ack: [DELAYED-BA] (disabled if not set)
+# Maximum A-MSDU length: [MAX-AMSDU-7935] for 7935 octets (3839 octets if not
+# set)
+# DSSS/CCK Mode in 40 MHz: [DSSS_CCK-40] = allowed (not allowed if not set)
+# PSMP support: [PSMP] (disabled if not set)
+# L-SIG TXOP protection support: [LSIG-TXOP-PROT] (disabled if not set)
+#ht_capab=[HT40-][SHORT-GI-20][SHORT-GI-40]
+
+# Require stations to support HT PHY (reject association if they do not)
+#require_ht=1
+
+##### IEEE 802.1X-2004 related configuration ##################################
+
+# Require IEEE 802.1X authorization
+#ieee8021x=1
+
+# IEEE 802.1X/EAPOL version
+# hostapd is implemented based on IEEE Std 802.1X-2004 which defines EAPOL
+# version 2. However, there are many client implementations that do not handle
+# the new version number correctly (they seem to drop the frames completely).
+# In order to make hostapd interoperate with these clients, the version number
+# can be set to the older version (1) with this configuration value.
+#eapol_version=2
+
+# Optional displayable message sent with EAP Request-Identity. The first \0
+# in this string will be converted to ASCII-0 (nul). This can be used to
+# separate network info (comma separated list of attribute=value pairs); see,
+# e.g., RFC 4284.
+#eap_message=hello
+#eap_message=hello\0networkid=netw,nasid=foo,portid=0,NAIRealms=example.com
+
+# WEP rekeying (disabled if key lengths are not set or are set to 0)
+# Key lengths for default/broadcast and individual/unicast keys:
+# 5 = 40-bit WEP (also known as 64-bit WEP with 40 secret bits)
+# 13 = 104-bit WEP (also known as 128-bit WEP with 104 secret bits)
+#wep_key_len_broadcast=5
+#wep_key_len_unicast=5
+# Rekeying period in seconds. 0 = do not rekey (i.e., set keys only once)
+#wep_rekey_period=300
+
+# EAPOL-Key index workaround (set bit7) for WinXP Supplicant (needed only if
+# only broadcast keys are used)
+eapol_key_index_workaround=0
+
+# EAP reauthentication period in seconds (default: 3600 seconds; 0 = disable
+# reauthentication).
+#eap_reauth_period=3600
+
+# Use PAE group address (01:80:c2:00:00:03) instead of individual target
+# address when sending EAPOL frames with driver=wired. This is the most common
+# mechanism used in wired authentication, but it also requires that the port
+# is only used by one station.
+#use_pae_group_addr=1
+
+##### Integrated EAP server ###################################################
+
+# Optionally, hostapd can be configured to use an integrated EAP server
+# to process EAP authentication locally without need for an external RADIUS
+# server. This functionality can be used both as a local authentication server
+# for IEEE 802.1X/EAPOL and as a RADIUS server for other devices.
+
+# Use integrated EAP server instead of external RADIUS authentication
+# server. This is also needed if hostapd is configured to act as a RADIUS
+# authentication server.
+eap_server=0
+
+# Path for EAP server user database
+#eap_user_file=/etc/hostapd.eap_user
+
+# CA certificate (PEM or DER file) for EAP-TLS/PEAP/TTLS
+#ca_cert=/etc/hostapd.ca.pem
+
+# Server certificate (PEM or DER file) for EAP-TLS/PEAP/TTLS
+#server_cert=/etc/hostapd.server.pem
+
+# Private key matching with the server certificate for EAP-TLS/PEAP/TTLS
+# This may point to the same file as server_cert if both certificate and key
+# are included in a single file. PKCS#12 (PFX) file (.p12/.pfx) can also be
+# used by commenting out server_cert and specifying the PFX file as the
+# private_key.
+#private_key=/etc/hostapd.server.prv
+
+# Passphrase for private key
+#private_key_passwd=secret passphrase
+
+# Enable CRL verification.
+# Note: hostapd does not yet support CRL downloading based on CDP. Thus, a
+# valid CRL signed by the CA is required to be included in the ca_cert file.
+# This can be done by using PEM format for CA certificate and CRL and
+# concatenating these into one file. Whenever CRL changes, hostapd needs to be
+# restarted to take the new CRL into use.
+# 0 = do not verify CRLs (default)
+# 1 = check the CRL of the user certificate
+# 2 = check all CRLs in the certificate path
+#check_crl=1
+
+# dh_file: File path to DH/DSA parameters file (in PEM format)
+# This is an optional configuration file for setting parameters for an
+# ephemeral DH key exchange. In most cases, the default RSA authentication does
+# not use this configuration. However, it is possible setup RSA to use
+# ephemeral DH key exchange. In addition, ciphers with DSA keys always use
+# ephemeral DH keys. This can be used to achieve forward secrecy. If the file
+# is in DSA parameters format, it will be automatically converted into DH
+# params. This parameter is required if anonymous EAP-FAST is used.
+# You can generate DH parameters file with OpenSSL, e.g.,
+# "openssl dhparam -out /etc/hostapd.dh.pem 1024"
+#dh_file=/etc/hostapd.dh.pem
+
+# Fragment size for EAP methods
+#fragment_size=1400
+
+# Configuration data for EAP-SIM database/authentication gateway interface.
+# This is a text string in implementation specific format. The example
+# implementation in eap_sim_db.c uses this as the UNIX domain socket name for
+# the HLR/AuC gateway (e.g., hlr_auc_gw). In this case, the path uses "unix:"
+# prefix.
+#eap_sim_db=unix:/tmp/hlr_auc_gw.sock
+
+# Encryption key for EAP-FAST PAC-Opaque values. This key must be a secret,
+# random value. It is configured as a 16-octet value in hex format. It can be
+# generated, e.g., with the following command:
+# od -tx1 -v -N16 /dev/random | colrm 1 8 | tr -d ' '
+#pac_opaque_encr_key=000102030405060708090a0b0c0d0e0f
+
+# EAP-FAST authority identity (A-ID)
+# A-ID indicates the identity of the authority that issues PACs. The A-ID
+# should be unique across all issuing servers. In theory, this is a variable
+# length field, but due to some existing implementations requiring A-ID to be
+# 16 octets in length, it is strongly recommended to use that length for the
+# field to provid interoperability with deployed peer implementations. This
+# field is configured in hex format.
+#eap_fast_a_id=101112131415161718191a1b1c1d1e1f
+
+# EAP-FAST authority identifier information (A-ID-Info)
+# This is a user-friendly name for the A-ID. For example, the enterprise name
+# and server name in a human-readable format. This field is encoded as UTF-8.
+#eap_fast_a_id_info=test server
+
+# Enable/disable different EAP-FAST provisioning modes:
+#0 = provisioning disabled
+#1 = only anonymous provisioning allowed
+#2 = only authenticated provisioning allowed
+#3 = both provisioning modes allowed (default)
+#eap_fast_prov=3
+
+# EAP-FAST PAC-Key lifetime in seconds (hard limit)
+#pac_key_lifetime=604800
+
+# EAP-FAST PAC-Key refresh time in seconds (soft limit on remaining hard
+# limit). The server will generate a new PAC-Key when this number of seconds
+# (or fewer) of the lifetime remains.
+#pac_key_refresh_time=86400
+
+# EAP-SIM and EAP-AKA protected success/failure indication using AT_RESULT_IND
+# (default: 0 = disabled).
+#eap_sim_aka_result_ind=1
+
+# Trusted Network Connect (TNC)
+# If enabled, TNC validation will be required before the peer is allowed to
+# connect. Note: This is only used with EAP-TTLS and EAP-FAST. If any other
+# EAP method is enabled, the peer will be allowed to connect without TNC.
+#tnc=1
+
+
+##### IEEE 802.11f - Inter-Access Point Protocol (IAPP) #######################
+
+# Interface to be used for IAPP broadcast packets
+#iapp_interface=eth0
+
+
+##### RADIUS client configuration #############################################
+# for IEEE 802.1X with external Authentication Server, IEEE 802.11
+# authentication with external ACL for MAC addresses, and accounting
+
+# The own IP address of the access point (used as NAS-IP-Address)
+own_ip_addr=127.0.0.1
+
+# Optional NAS-Identifier string for RADIUS messages. When used, this should be
+# a unique to the NAS within the scope of the RADIUS server. For example, a
+# fully qualified domain name can be used here.
+# When using IEEE 802.11r, nas_identifier must be set and must be between 1 and
+# 48 octets long.
+#nas_identifier=ap.example.com
+
+# RADIUS authentication server
+#auth_server_addr=127.0.0.1
+#auth_server_port=1812
+#auth_server_shared_secret=secret
+
+# RADIUS accounting server
+#acct_server_addr=127.0.0.1
+#acct_server_port=1813
+#acct_server_shared_secret=secret
+
+# Secondary RADIUS servers; to be used if primary one does not reply to
+# RADIUS packets. These are optional and there can be more than one secondary
+# server listed.
+#auth_server_addr=127.0.0.2
+#auth_server_port=1812
+#auth_server_shared_secret=secret2
+#
+#acct_server_addr=127.0.0.2
+#acct_server_port=1813
+#acct_server_shared_secret=secret2
+
+# Retry interval for trying to return to the primary RADIUS server (in
+# seconds). RADIUS client code will automatically try to use the next server
+# when the current server is not replying to requests. If this interval is set,
+# primary server will be retried after configured amount of time even if the
+# currently used secondary server is still working.
+#radius_retry_primary_interval=600
+
+
+# Interim accounting update interval
+# If this is set (larger than 0) and acct_server is configured, hostapd will
+# send interim accounting updates every N seconds. Note: if set, this overrides
+# possible Acct-Interim-Interval attribute in Access-Accept message. Thus, this
+# value should not be configured in hostapd.conf, if RADIUS server is used to
+# control the interim interval.
+# This value should not be less 600 (10 minutes) and must not be less than
+# 60 (1 minute).
+#radius_acct_interim_interval=600
+
+# Dynamic VLAN mode; allow RADIUS authentication server to decide which VLAN
+# is used for the stations. This information is parsed from following RADIUS
+# attributes based on RFC 3580 and RFC 2868: Tunnel-Type (value 13 = VLAN),
+# Tunnel-Medium-Type (value 6 = IEEE 802), Tunnel-Private-Group-ID (value
+# VLANID as a string). vlan_file option below must be configured if dynamic
+# VLANs are used. Optionally, the local MAC ACL list (accept_mac_file) can be
+# used to set static client MAC address to VLAN ID mapping.
+# 0 = disabled (default)
+# 1 = option; use default interface if RADIUS server does not include VLAN ID
+# 2 = required; reject authentication if RADIUS server does not include VLAN ID
+#dynamic_vlan=0
+
+# VLAN interface list for dynamic VLAN mode is read from a separate text file.
+# This list is used to map VLAN ID from the RADIUS server to a network
+# interface. Each station is bound to one interface in the same way as with
+# multiple BSSIDs or SSIDs. Each line in this text file is defining a new
+# interface and the line must include VLAN ID and interface name separated by
+# white space (space or tab).
+#vlan_file=/etc/hostapd.vlan
+
+# Interface where 802.1q tagged packets should appear when a RADIUS server is
+# used to determine which VLAN a station is on. hostapd creates a bridge for
+# each VLAN. Then hostapd adds a VLAN interface (associated with the interface
+# indicated by 'vlan_tagged_interface') and the appropriate wireless interface
+# to the bridge.
+#vlan_tagged_interface=eth0
+
+
+##### RADIUS authentication server configuration ##############################
+
+# hostapd can be used as a RADIUS authentication server for other hosts. This
+# requires that the integrated EAP server is also enabled and both
+# authentication services are sharing the same configuration.
+
+# File name of the RADIUS clients configuration for the RADIUS server. If this
+# commented out, RADIUS server is disabled.
+#radius_server_clients=/etc/hostapd.radius_clients
+
+# The UDP port number for the RADIUS authentication server
+#radius_server_auth_port=1812
+
+# Use IPv6 with RADIUS server (IPv4 will also be supported using IPv6 API)
+#radius_server_ipv6=1
+
+
+##### WPA/IEEE 802.11i configuration ##########################################
+
+# Enable WPA. Setting this variable configures the AP to require WPA (either
+# WPA-PSK or WPA-RADIUS/EAP based on other configuration). For WPA-PSK, either
+# wpa_psk or wpa_passphrase must be set and wpa_key_mgmt must include WPA-PSK.
+# For WPA-RADIUS/EAP, ieee8021x must be set (but without dynamic WEP keys),
+# RADIUS authentication server must be configured, and WPA-EAP must be included
+# in wpa_key_mgmt.
+# This field is a bit field that can be used to enable WPA (IEEE 802.11i/D3.0)
+# and/or WPA2 (full IEEE 802.11i/RSN):
+# bit0 = WPA
+# bit1 = IEEE 802.11i/RSN (WPA2) (dot11RSNAEnabled)
+#wpa=1
+
+# WPA pre-shared keys for WPA-PSK. This can be either entered as a 256-bit
+# secret in hex format (64 hex digits), wpa_psk, or as an ASCII passphrase
+# (8..63 characters) that will be converted to PSK. This conversion uses SSID
+# so the PSK changes when ASCII passphrase is used and the SSID is changed.
+# wpa_psk (dot11RSNAConfigPSKValue)
+# wpa_passphrase (dot11RSNAConfigPSKPassPhrase)
+#wpa_psk=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
+#wpa_passphrase=secret passphrase
+
+# Optionally, WPA PSKs can be read from a separate text file (containing list
+# of (PSK,MAC address) pairs. This allows more than one PSK to be configured.
+# Use absolute path name to make sure that the files can be read on SIGHUP
+# configuration reloads.
+#wpa_psk_file=/etc/hostapd.wpa_psk
+
+# Set of accepted key management algorithms (WPA-PSK, WPA-EAP, or both). The
+# entries are separated with a space. WPA-PSK-SHA256 and WPA-EAP-SHA256 can be
+# added to enable SHA256-based stronger algorithms.
+# (dot11RSNAConfigAuthenticationSuitesTable)
+#wpa_key_mgmt=WPA-PSK WPA-EAP
+
+# Set of accepted cipher suites (encryption algorithms) for pairwise keys
+# (unicast packets). This is a space separated list of algorithms:
+# CCMP = AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0]
+# TKIP = Temporal Key Integrity Protocol [IEEE 802.11i/D7.0]
+# Group cipher suite (encryption algorithm for broadcast and multicast frames)
+# is automatically selected based on this configuration. If only CCMP is
+# allowed as the pairwise cipher, group cipher will also be CCMP. Otherwise,
+# TKIP will be used as the group cipher.
+# (dot11RSNAConfigPairwiseCiphersTable)
+# Pairwise cipher for WPA (v1) (default: TKIP)
+#wpa_pairwise=TKIP CCMP
+# Pairwise cipher for RSN/WPA2 (default: use wpa_pairwise value)
+#rsn_pairwise=CCMP
+
+# Time interval for rekeying GTK (broadcast/multicast encryption keys) in
+# seconds. (dot11RSNAConfigGroupRekeyTime)
+#wpa_group_rekey=600
+
+# Rekey GTK when any STA that possesses the current GTK is leaving the BSS.
+# (dot11RSNAConfigGroupRekeyStrict)
+#wpa_strict_rekey=1
+
+# Time interval for rekeying GMK (master key used internally to generate GTKs
+# (in seconds).
+#wpa_gmk_rekey=86400
+
+# Maximum lifetime for PTK in seconds. This can be used to enforce rekeying of
+# PTK to mitigate some attacks against TKIP deficiencies.
+#wpa_ptk_rekey=600
+
+# Enable IEEE 802.11i/RSN/WPA2 pre-authentication. This is used to speed up
+# roaming be pre-authenticating IEEE 802.1X/EAP part of the full RSN
+# authentication and key handshake before actually associating with a new AP.
+# (dot11RSNAPreauthenticationEnabled)
+#rsn_preauth=1
+#
+# Space separated list of interfaces from which pre-authentication frames are
+# accepted (e.g., 'eth0' or 'eth0 wlan0wds0'. This list should include all
+# interface that are used for connections to other APs. This could include
+# wired interfaces and WDS links. The normal wireless data interface towards
+# associated stations (e.g., wlan0) should not be added, since
+# pre-authentication is only used with APs other than the currently associated
+# one.
+#rsn_preauth_interfaces=eth0
+
+# peerkey: Whether PeerKey negotiation for direct links (IEEE 802.11e) is
+# allowed. This is only used with RSN/WPA2.
+# 0 = disabled (default)
+# 1 = enabled
+#peerkey=1
+
+# ieee80211w: Whether management frame protection (MFP) is enabled
+# 0 = disabled (default)
+# 1 = optional
+# 2 = required
+#ieee80211w=0
+
+# Association SA Query maximum timeout (in TU = 1.024 ms; for MFP)
+# (maximum time to wait for a SA Query response)
+# dot11AssociationSAQueryMaximumTimeout, 1...4294967295
+#assoc_sa_query_max_timeout=1000
+
+# Association SA Query retry timeout (in TU = 1.024 ms; for MFP)
+# (time between two subsequent SA Query requests)
+# dot11AssociationSAQueryRetryTimeout, 1...4294967295
+#assoc_sa_query_retry_timeout=201
+
+# disable_pmksa_caching: Disable PMKSA caching
+# This parameter can be used to disable caching of PMKSA created through EAP
+# authentication. RSN preauthentication may still end up using PMKSA caching if
+# it is enabled (rsn_preauth=1).
+# 0 = PMKSA caching enabled (default)
+# 1 = PMKSA caching disabled
+#disable_pmksa_caching=0
+
+# okc: Opportunistic Key Caching (aka Proactive Key Caching)
+# Allow PMK cache to be shared opportunistically among configured interfaces
+# and BSSes (i.e., all configurations within a single hostapd process).
+# 0 = disabled (default)
+# 1 = enabled
+#okc=1
+
+
+##### IEEE 802.11r configuration ##############################################
+
+# Mobility Domain identifier (dot11FTMobilityDomainID, MDID)
+# MDID is used to indicate a group of APs (within an ESS, i.e., sharing the
+# same SSID) between which a STA can use Fast BSS Transition.
+# 2-octet identifier as a hex string.
+#mobility_domain=a1b2
+
+# PMK-R0 Key Holder identifier (dot11FTR0KeyHolderID)
+# 1 to 48 octet identifier.
+# This is configured with nas_identifier (see RADIUS client section above).
+
+# Default lifetime of the PMK-RO in minutes; range 1..65535
+# (dot11FTR0KeyLifetime)
+#r0_key_lifetime=10000
+
+# PMK-R1 Key Holder identifier (dot11FTR1KeyHolderID)
+# 6-octet identifier as a hex string.
+#r1_key_holder=000102030405
+
+# Reassociation deadline in time units (TUs / 1.024 ms; range 1000..65535)
+# (dot11FTReassociationDeadline)
+#reassociation_deadline=1000
+
+# List of R0KHs in the same Mobility Domain
+# format: <MAC address> <NAS Identifier> <128-bit key as hex string>
+# This list is used to map R0KH-ID (NAS Identifier) to a destination MAC
+# address when requesting PMK-R1 key from the R0KH that the STA used during the
+# Initial Mobility Domain Association.
+#r0kh=02:01:02:03:04:05 r0kh-1.example.com 000102030405060708090a0b0c0d0e0f
+#r0kh=02:01:02:03:04:06 r0kh-2.example.com 00112233445566778899aabbccddeeff
+# And so on.. One line per R0KH.
+
+# List of R1KHs in the same Mobility Domain
+# format: <MAC address> <R1KH-ID> <128-bit key as hex string>
+# This list is used to map R1KH-ID to a destination MAC address when sending
+# PMK-R1 key from the R0KH. This is also the list of authorized R1KHs in the MD
+# that can request PMK-R1 keys.
+#r1kh=02:01:02:03:04:05 02:11:22:33:44:55 000102030405060708090a0b0c0d0e0f
+#r1kh=02:01:02:03:04:06 02:11:22:33:44:66 00112233445566778899aabbccddeeff
+# And so on.. One line per R1KH.
+
+# Whether PMK-R1 push is enabled at R0KH
+# 0 = do not push PMK-R1 to all configured R1KHs (default)
+# 1 = push PMK-R1 to all configured R1KHs whenever a new PMK-R0 is derived
+#pmk_r1_push=1
+
+##### Neighbor table ##########################################################
+# Maximum number of entries kept in AP table (either for neigbor table or for
+# detecting Overlapping Legacy BSS Condition). The oldest entry will be
+# removed when adding a new entry that would make the list grow over this
+# limit. Note! WFA certification for IEEE 802.11g requires that OLBC is
+# enabled, so this field should not be set to 0 when using IEEE 802.11g.
+# default: 255
+#ap_table_max_size=255
+
+# Number of seconds of no frames received after which entries may be deleted
+# from the AP table. Since passive scanning is not usually performed frequently
+# this should not be set to very small value. In addition, there is no
+# guarantee that every scan cycle will receive beacon frames from the
+# neighboring APs.
+# default: 60
+#ap_table_expiration_time=3600
+
+
+##### Wi-Fi Protected Setup (WPS) #############################################
+
+# WPS state
+# 0 = WPS disabled (default)
+# 1 = WPS enabled, not configured
+# 2 = WPS enabled, configured
+#wps_state=2
+
+# AP can be configured into a locked state where new WPS Registrar are not
+# accepted, but previously authorized Registrars (including the internal one)
+# can continue to add new Enrollees.
+#ap_setup_locked=1
+
+# Universally Unique IDentifier (UUID; see RFC 4122) of the device
+# This value is used as the UUID for the internal WPS Registrar. If the AP
+# is also using UPnP, this value should be set to the device's UPnP UUID.
+# If not configured, UUID will be generated based on the local MAC address.
+#uuid=12345678-9abc-def0-1234-56789abcdef0
+
+# Note: If wpa_psk_file is set, WPS is used to generate random, per-device PSKs
+# that will be appended to the wpa_psk_file. If wpa_psk_file is not set, the
+# default PSK (wpa_psk/wpa_passphrase) will be delivered to Enrollees. Use of
+# per-device PSKs is recommended as the more secure option (i.e., make sure to
+# set wpa_psk_file when using WPS with WPA-PSK).
+
+# When an Enrollee requests access to the network with PIN method, the Enrollee
+# PIN will need to be entered for the Registrar. PIN request notifications are
+# sent to hostapd ctrl_iface monitor. In addition, they can be written to a
+# text file that could be used, e.g., to populate the AP administration UI with
+# pending PIN requests. If the following variable is set, the PIN requests will
+# be written to the configured file.
+#wps_pin_requests=/var/run/hostapd_wps_pin_requests
+
+# Device Name
+# User-friendly description of device; up to 32 octets encoded in UTF-8
+#device_name=Wireless AP
+
+# Manufacturer
+# The manufacturer of the device (up to 64 ASCII characters)
+#manufacturer=Company
+
+# Model Name
+# Model of the device (up to 32 ASCII characters)
+#model_name=WAP
+
+# Model Number
+# Additional device description (up to 32 ASCII characters)
+#model_number=123
+
+# Serial Number
+# Serial number of the device (up to 32 characters)
+#serial_number=12345
+
+# Primary Device Type
+# Used format: <categ>-<OUI>-<subcateg>
+# categ = Category as an integer value
+# OUI = OUI and type octet as a 4-octet hex-encoded value; 0050F204 for
+# default WPS OUI
+# subcateg = OUI-specific Sub Category as an integer value
+# Examples:
+# 1-0050F204-1 (Computer / PC)
+# 1-0050F204-2 (Computer / Server)
+# 5-0050F204-1 (Storage / NAS)
+# 6-0050F204-1 (Network Infrastructure / AP)
+#device_type=6-0050F204-1
+
+# OS Version
+# 4-octet operating system version number (hex string)
+#os_version=01020300
+
+# Config Methods
+# List of the supported configuration methods
+# Available methods: usba ethernet label display ext_nfc_token int_nfc_token
+# nfc_interface push_button keypad virtual_display physical_display
+# virtual_push_button physical_push_button
+#config_methods=label virtual_display virtual_push_button keypad
+
+# WPS capability discovery workaround for PBC with Windows 7
+# Windows 7 uses incorrect way of figuring out AP's WPS capabilities by acting
+# as a Registrar and using M1 from the AP. The config methods attribute in that
+# message is supposed to indicate only the configuration method supported by
+# the AP in Enrollee role, i.e., to add an external Registrar. For that case,
+# PBC shall not be used and as such, the PushButton config method is removed
+# from M1 by default. If pbc_in_m1=1 is included in the configuration file,
+# the PushButton config method is left in M1 (if included in config_methods
+# parameter) to allow Windows 7 to use PBC instead of PIN (e.g., from a label
+# in the AP).
+#pbc_in_m1=1
+
+# Static access point PIN for initial configuration and adding Registrars
+# If not set, hostapd will not allow external WPS Registrars to control the
+# access point. The AP PIN can also be set at runtime with hostapd_cli
+# wps_ap_pin command. Use of temporary (enabled by user action) and random
+# AP PIN is much more secure than configuring a static AP PIN here. As such,
+# use of the ap_pin parameter is not recommended if the AP device has means for
+# displaying a random PIN.
+#ap_pin=12345670
+
+# Skip building of automatic WPS credential
+# This can be used to allow the automatically generated Credential attribute to
+# be replaced with pre-configured Credential(s).
+#skip_cred_build=1
+
+# Additional Credential attribute(s)
+# This option can be used to add pre-configured Credential attributes into M8
+# message when acting as a Registrar. If skip_cred_build=1, this data will also
+# be able to override the Credential attribute that would have otherwise been
+# automatically generated based on network configuration. This configuration
+# option points to an external file that much contain the WPS Credential
+# attribute(s) as binary data.
+#extra_cred=hostapd.cred
+
+# Credential processing
+# 0 = process received credentials internally (default)
+# 1 = do not process received credentials; just pass them over ctrl_iface to
+# external program(s)
+# 2 = process received credentials internally and pass them over ctrl_iface
+# to external program(s)
+# Note: With wps_cred_processing=1, skip_cred_build should be set to 1 and
+# extra_cred be used to provide the Credential data for Enrollees.
+#
+# wps_cred_processing=1 will disabled automatic updates of hostapd.conf file
+# both for Credential processing and for marking AP Setup Locked based on
+# validation failures of AP PIN. An external program is responsible on updating
+# the configuration appropriately in this case.
+#wps_cred_processing=0
+
+# AP Settings Attributes for M7
+# By default, hostapd generates the AP Settings Attributes for M7 based on the
+# current configuration. It is possible to override this by providing a file
+# with pre-configured attributes. This is similar to extra_cred file format,
+# but the AP Settings attributes are not encapsulated in a Credential
+# attribute.
+#ap_settings=hostapd.ap_settings
+
+# WPS UPnP interface
+# If set, support for external Registrars is enabled.
+#upnp_iface=br0
+
+# Friendly Name (required for UPnP)
+# Short description for end use. Should be less than 64 characters.
+#friendly_name=WPS Access Point
+
+# Manufacturer URL (optional for UPnP)
+#manufacturer_url=http://www.example.com/
+
+# Model Description (recommended for UPnP)
+# Long description for end user. Should be less than 128 characters.
+#model_description=Wireless Access Point
+
+# Model URL (optional for UPnP)
+#model_url=http://www.example.com/model/
+
+# Universal Product Code (optional for UPnP)
+# 12-digit, all-numeric code that identifies the consumer package.
+#upc=123456789012
+
+##### Wi-Fi Direct (P2P) ######################################################
+
+# Enable P2P Device management
+#manage_p2p=1
+
+# Allow cross connection
+#allow_cross_connection=1
+
+#### TDLS (IEEE 802.11z-2010) #################################################
+
+# Prohibit use of TDLS in this BSS
+#tdls_prohibit=1
+
+# Prohibit use of TDLS Channel Switching in this BSS
+#tdls_prohibit_chan_switch=1
+
+##### IEEE 802.11v-2011 #######################################################
+
+# Time advertisement
+# 0 = disabled (default)
+# 2 = UTC time at which the TSF timer is 0
+#time_advertisement=2
+
+# Local time zone as specified in 8.3 of IEEE Std 1003.1-2004:
+# stdoffset[dst[offset][,start[/time],end[/time]]]
+#time_zone=EST5
+
+##### IEEE 802.11u-2011 #######################################################
+
+# Enable Interworking service
+#interworking=1
+
+# Access Network Type
+# 0 = Private network
+# 1 = Private network with guest access
+# 2 = Chargeable public network
+# 3 = Free public network
+# 4 = Personal device network
+# 5 = Emergency services only network
+# 14 = Test or experimental
+# 15 = Wildcard
+#access_network_type=0
+
+# Whether the network provides connectivity to the Internet
+# 0 = Unspecified
+# 1 = Network provides connectivity to the Internet
+#internet=1
+
+# Additional Step Required for Access
+# Note: This is only used with open network, i.e., ASRA shall ne set to 0 if
+# RSN is used.
+#asra=0
+
+# Emergency services reachable
+#esr=0
+
+# Unauthenticated emergency service accessible
+#uesa=0
+
+# Venue Info (optional)
+# The available values are defined in IEEE Std 802.11u-2011, 7.3.1.34.
+# Example values (group,type):
+# 0,0 = Unspecified
+# 1,7 = Convention Center
+# 1,13 = Coffee Shop
+# 2,0 = Unspecified Business
+# 7,1 Private Residence
+#venue_group=7
+#venue_type=1
+
+# Homogeneous ESS identifier (optional; dot11HESSID)
+# If set, this shall be identifical to one of the BSSIDs in the homogeneous
+# ESS and this shall be set to the same value across all BSSs in homogeneous
+# ESS.
+#hessid=02:03:04:05:06:07
+
+# Roaming Consortium List
+# Arbitrary number of Roaming Consortium OIs can be configured with each line
+# adding a new OI to the list. The first three entries are available through
+# Beacon and Probe Response frames. Any additional entry will be available only
+# through ANQP queries. Each OI is between 3 and 15 octets and is configured a
+# a hexstring.
+#roaming_consortium=021122
+#roaming_consortium=2233445566
+
+##### Multiple BSSID support ##################################################
+#
+# Above configuration is using the default interface (wlan#, or multi-SSID VLAN
+# interfaces). Other BSSIDs can be added by using separator 'bss' with
+# default interface name to be allocated for the data packets of the new BSS.
+#
+# hostapd will generate BSSID mask based on the BSSIDs that are
+# configured. hostapd will verify that dev_addr & MASK == dev_addr. If this is
+# not the case, the MAC address of the radio must be changed before starting
+# hostapd (ifconfig wlan0 hw ether <MAC addr>). If a BSSID is configured for
+# every secondary BSS, this limitation is not applied at hostapd and other
+# masks may be used if the driver supports them (e.g., swap the locally
+# administered bit)
+#
+# BSSIDs are assigned in order to each BSS, unless an explicit BSSID is
+# specified using the 'bssid' parameter.
+# If an explicit BSSID is specified, it must be chosen such that it:
+# - results in a valid MASK that covers it and the dev_addr
+# - is not the same as the MAC address of the radio
+# - is not the same as any other explicitly specified BSSID
+#
+# Please note that hostapd uses some of the values configured for the first BSS
+# as the defaults for the following BSSes. However, it is recommended that all
+# BSSes include explicit configuration of all relevant configuration items.
+#
+#bss=wlan0_0
+#ssid=test2
+# most of the above items can be used here (apart from radio interface specific
+# items, like channel)
+
+#bss=wlan0_1
+#bssid=00:13:10:95:fe:0b
+# ...
diff --git a/multitech/recipes/hostap/hostap-daemon-1.0/init b/multitech/recipes/hostap/hostap-daemon-1.0/init
new file mode 100644
index 0000000..79f74b6
--- /dev/null
+++ b/multitech/recipes/hostap/hostap-daemon-1.0/init
@@ -0,0 +1,37 @@
+#!/bin/sh
+DAEMON=/usr/sbin/hostapd
+NAME=hostapd
+DESC="HOSTAP Daemon"
+ARGS="/etc/hostapd.conf -B"
+
+test -f $DAEMON || exit 0
+
+set -e
+
+case "$1" in
+ start)
+ echo -n "Starting $DESC: "
+ start-stop-daemon -S -x $DAEMON -- $ARGS
+ echo "$NAME."
+ ;;
+ stop)
+ echo -n "Stopping $DESC: "
+ start-stop-daemon -K -x $DAEMON
+ echo "$NAME."
+ ;;
+ restart)
+ $0 stop
+ $0 start
+ ;;
+ reload)
+ echo -n "Reloading $DESC: "
+ killall -HUP $(basename ${DAEMON})
+ echo "$NAME."
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|restart|reload}"
+ exit 1
+ ;;
+esac
+
+exit 0
diff --git a/multitech/recipes/hostap/hostap-daemon_1.0.bb b/multitech/recipes/hostap/hostap-daemon_1.0.bb
new file mode 100644
index 0000000..a726237
--- /dev/null
+++ b/multitech/recipes/hostap/hostap-daemon_1.0.bb
@@ -0,0 +1,18 @@
+DESCRIPTION = "User space daemon for extended IEEE 802.11 management"
+
+require hostap-daemon-1.0.inc
+
+PR = "r1"
+
+#DEFAULT_PREFERENCE = "-1"
+
+SRC_URI = "http://hostap.epitest.fi/releases/hostapd-${PV}.tar.gz \
+ file://defconfig \
+ file://init \
+ file://hostapd.conf"
+SRC_URI[md5sum] = "236247a7bbd4f60d5fa3e99849d1ffc9"
+SRC_URI[sha256sum] = "002e9dcb7e46cf82b5900a2fcf92b30fc8cdfd32a72d7fd4488588f1c013dfcc"
+
+S = "${WORKDIR}/hostapd-${PV}/hostapd"
+
+
diff --git a/multitech/recipes/images/corecdp-mtpcie-dk-image.bb b/multitech/recipes/images/corecdp-mtpcie-dk-image.bb
new file mode 100644
index 0000000..237176e
--- /dev/null
+++ b/multitech/recipes/images/corecdp-mtpcie-dk-image.bb
@@ -0,0 +1,14 @@
+require corecdp-base-image.bb
+
+IMAGE_INSTALL += " \
+libnl \
+wpa-supplicant \
+iw wireless-tools \
+hostap-daemon hostap-utils \
+ti-compat-wireless-wl12xx wl12xx-firmware \
+bluez4 \
+iperf \
+ti-wifi-utils \
+"
+
+export IMAGE_BASENAME = "corecdp-mtpcie-dk-image"
diff --git a/multitech/recipes/linux/linux-2.6.39.4/linux-2.6.32.3-at25.patch b/multitech/recipes/linux/linux-2.6.39.4/linux-2.6.32.3-at25.patch
new file mode 100644
index 0000000..3aa9096
--- /dev/null
+++ b/multitech/recipes/linux/linux-2.6.39.4/linux-2.6.32.3-at25.patch
@@ -0,0 +1,37 @@
+diff -uprN -X linux-2.6.32.3/Documentation/dontdiff linux-2.6.32.3-vanilla/drivers/misc/eeprom/at25.c linux-2.6.32.3/drivers/misc/eeprom/at25.c
+--- linux-2.6.32.3-vanilla/drivers/misc/eeprom/at25.c 2010-01-06 17:07:45.000000000 -0600
++++ linux-2.6.32.3/drivers/misc/eeprom/at25.c 2010-10-27 11:05:36.000000000 -0500
+@@ -147,6 +147,7 @@ at25_ee_write(struct at25_data *at25, co
+ unsigned written = 0;
+ unsigned buf_size;
+ u8 *bounce;
++ int a8;
+
+ if (unlikely(off >= at25->bin.size))
+ return -EFBIG;
+@@ -163,6 +164,11 @@ at25_ee_write(struct at25_data *at25, co
+ if (!bounce)
+ return -ENOMEM;
+
++ if (!strcmp(at25->chip.name, "at25040b"))
++ a8 = 1;
++ else
++ a8 = 0;
++
+ /* For write, rollover is within the page ... so we write at
+ * most one page, then manually roll over to the next page.
+ */
+@@ -183,6 +189,13 @@ at25_ee_write(struct at25_data *at25, co
+ break;
+ }
+
++ if (a8) {
++ if (offset & BIT(8))
++ bounce[0] |= BIT(3);
++ else
++ bounce[0] &= ~BIT(3);
++ }
++
+ /* 8/16/24-bit address is written MSB first */
+ switch (at25->addrlen) {
+ default: /* case 3 */
diff --git a/multitech/recipes/linux/linux-2.6.39.4/linux-2.6.32.3-atmel_spi.patch b/multitech/recipes/linux/linux-2.6.39.4/linux-2.6.32.3-atmel_spi.patch
new file mode 100644
index 0000000..a7b87b3
--- /dev/null
+++ b/multitech/recipes/linux/linux-2.6.39.4/linux-2.6.32.3-atmel_spi.patch
@@ -0,0 +1,12 @@
+diff -uprN -X linux-2.6.32.3/Documentation/dontdiff linux-2.6.32.3-vanilla/drivers/spi/atmel_spi.c linux-2.6.32.3/drivers/spi/atmel_spi.c
+--- linux-2.6.32.3-vanilla/drivers/spi/atmel_spi.c 2010-01-06 17:07:45.000000000 -0600
++++ linux-2.6.32.3/drivers/spi/atmel_spi.c 2010-09-08 13:38:52.000000000 -0500
+@@ -768,7 +768,7 @@ static int __init atmel_spi_probe(struct
+ master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH;
+
+ master->bus_num = pdev->id;
+- master->num_chipselect = 4;
++ master->num_chipselect = 7;
+ master->setup = atmel_spi_setup;
+ master->transfer = atmel_spi_transfer;
+ master->cleanup = atmel_spi_cleanup;
diff --git a/multitech/recipes/linux/linux-2.6.39.4/linux-2.6.32.3-option-telit.patch b/multitech/recipes/linux/linux-2.6.39.4/linux-2.6.32.3-option-telit.patch
new file mode 100644
index 0000000..db0283d
--- /dev/null
+++ b/multitech/recipes/linux/linux-2.6.39.4/linux-2.6.32.3-option-telit.patch
@@ -0,0 +1,23 @@
+diff linux-2.6.32.3.orig/drivers/usb/serial/option.c linux-2.6.32.3/drivers/usb/serial/option.c
+--- linux-2.6.32.3.orig/drivers/usb/serial/option.c
++++ linux-2.6.32.3/drivers/usb/serial/option.c
+@@ -293,6 +293,9 @@ static int option_resume(struct usb_serial *serial);
+ #define TELIT_VENDOR_ID 0x1bc7
+ #define TELIT_PRODUCT_UC864E 0x1003
+ #define TELIT_PRODUCT_UC864G 0x1004
++#define TELIT_PRODUCT_CC864_DUAL 0x1005
++#define TELIT_PRODUCT_CC864_SINGLE 0x1006
++#define TELIT_PRODUCT_DE910_DUAL 0x1010
+
+ /* ZTE PRODUCTS */
+ #define ZTE_VENDOR_ID 0x19d2
+@@ -523,6 +526,9 @@ static struct usb_device_id option_ids[] = {
+ { USB_DEVICE(MAXON_VENDOR_ID, 0x6280) }, /* BP3-USB & BP3-EXT HSDPA */
+ { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864E) },
+ { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864G) },
++ { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_CC864_DUAL) },
++ { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_CC864_SINGLE) },
++ { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_DE910_DUAL) },
+ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_MF622, 0xff, 0xff, 0xff) }, /* ZTE WCDMA products */
+ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0002, 0xff, 0xff, 0xff) },
+ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0003, 0xff, 0xff, 0xff) },
diff --git a/multitech/recipes/linux/linux-2.6.39.4/linux-2.6.35.14-at91-gpio-pullup.patch b/multitech/recipes/linux/linux-2.6.39.4/linux-2.6.35.14-at91-gpio-pullup.patch
new file mode 100644
index 0000000..d967838
--- /dev/null
+++ b/multitech/recipes/linux/linux-2.6.39.4/linux-2.6.35.14-at91-gpio-pullup.patch
@@ -0,0 +1,43 @@
+Index: linux-2.6.35/arch/arm/mach-at91/gpio.c
+===================================================================
+--- linux-2.6.35.orig/arch/arm/mach-at91/gpio.c 2011-09-27 14:36:06.587267689 -0500
++++ linux-2.6.35/arch/arm/mach-at91/gpio.c 2011-09-27 14:42:50.997576753 -0500
+@@ -202,6 +202,26 @@
+ }
+ EXPORT_SYMBOL(at91_set_gpio_output);
+
++/*
++ * configure pin for output and enable/disable pullup
++ */
++int __init_or_module at91_set_gpio_output_with_pullup(unsigned pin, int value, int use_pullup)
++{
++ void __iomem *pio = pin_to_controller(pin);
++ unsigned mask = pin_to_mask(pin);
++
++ if (!pio)
++ return -EINVAL;
++
++ __raw_writel(mask, pio + PIO_IDR);
++ __raw_writel(mask, pio + (use_pullup ? PIO_PUER : PIO_PUDR));
++ __raw_writel(mask, pio + (value ? PIO_SODR : PIO_CODR));
++ __raw_writel(mask, pio + PIO_OER);
++ __raw_writel(mask, pio + PIO_PER);
++ return 0;
++}
++EXPORT_SYMBOL(at91_set_gpio_output_with_pullup);
++
+
+ /*
+ * enable/disable the glitch filter; mostly used with IRQ handling.
+Index: linux-2.6.35/arch/arm/mach-at91/include/mach/gpio.h
+===================================================================
+--- linux-2.6.35.orig/arch/arm/mach-at91/include/mach/gpio.h
++++ linux-2.6.35/arch/arm/mach-at91/include/mach/gpio.h
+@@ -194,6 +194,7 @@ extern int __init_or_module at91_set_A_p
+ extern int __init_or_module at91_set_B_periph(unsigned pin, int use_pullup);
+ extern int __init_or_module at91_set_gpio_input(unsigned pin, int use_pullup);
+ extern int __init_or_module at91_set_gpio_output(unsigned pin, int value);
++extern int __init_or_module at91_set_gpio_output_with_pullup(unsigned pin, int value, int use_pullup);
+ extern int __init_or_module at91_set_deglitch(unsigned pin, int is_on);
+ extern int __init_or_module at91_set_multi_drive(unsigned pin, int is_on);
+
diff --git a/multitech/recipes/linux/linux-2.6.39.4/linux-2.6.35.14-option-zte.patch b/multitech/recipes/linux/linux-2.6.39.4/linux-2.6.35.14-option-zte.patch
new file mode 100644
index 0000000..776c7ee
--- /dev/null
+++ b/multitech/recipes/linux/linux-2.6.39.4/linux-2.6.35.14-option-zte.patch
@@ -0,0 +1,12 @@
+Index: linux-2.6.35/drivers/usb/serial/option.c
+===================================================================
+--- linux-2.6.35.orig/drivers/usb/serial/option.c
++++ linux-2.6.35/drivers/usb/serial/option.c
+@@ -889,6 +889,7 @@ static const struct usb_device_id option
+ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0141, 0xff, 0xff, 0xff) },
+ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x2002, 0xff, 0xff, 0xff) },
+ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x2003, 0xff, 0xff, 0xff) },
++ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0xffe8, 0xff, 0xff, 0xff) }, // MC2718
+ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_CDMA_TECH, 0xff, 0xff, 0xff) },
+ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC8710, 0xff, 0xff, 0xff) },
+ { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, ZTE_PRODUCT_AC2726, 0xff, 0xff, 0xff) },
diff --git a/multitech/recipes/linux/linux-2.6.39.4/linux-2.6.38-sierra-1.7.40.patch b/multitech/recipes/linux/linux-2.6.39.4/linux-2.6.38-sierra-1.7.40.patch
new file mode 100644
index 0000000..6e55adf
--- /dev/null
+++ b/multitech/recipes/linux/linux-2.6.39.4/linux-2.6.38-sierra-1.7.40.patch
@@ -0,0 +1,1556 @@
+Index: linux-2.6.39.4/drivers/net/usb/sierra_net.c
+===================================================================
+--- linux-2.6.39.4.orig/drivers/net/usb/sierra_net.c 2012-02-27 15:37:27.810465204 -0600
++++ linux-2.6.39.4/drivers/net/usb/sierra_net.c 2011-09-22 17:05:46.000000000 -0500
+@@ -1,7 +1,7 @@
+ /*
+ * USB-to-WWAN Driver for Sierra Wireless modems
+ *
+- * Copyright (C) 2008, 2009, 2010 Paxton Smith, Matthew Safar, Rory Filer
++ * Copyright (C) 2008 - 2011 Paxton Smith, Matthew Safar, Rory Filer
+ * <linux@sierrawireless.com>
+ *
+ * Portions of this based on the cdc_ether driver by David Brownell (2003-2005)
+@@ -25,13 +25,17 @@
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+-#define DRIVER_VERSION "v.2.0"
++#define DRIVER_VERSION "v.3.2"
+ #define DRIVER_AUTHOR "Paxton Smith, Matthew Safar, Rory Filer"
+ #define DRIVER_DESC "USB-to-WWAN Driver for Sierra Wireless modems"
+ static const char driver_name[] = "sierra_net";
+
+ /* if defined debug messages enabled */
+ /*#define DEBUG*/
++/* more debug messages */
++/*#define VERBOSE*/
++/* Uncomment to force power level set to auto when attaching a device */
++/*#define POWER_LEVEL_AUTO*/
+
+ #include <linux/module.h>
+ #include <linux/etherdevice.h>
+@@ -48,6 +52,7 @@
+
+ #define SWI_USB_REQUEST_GET_FW_ATTR 0x06
+ #define SWI_GET_FW_ATTR_MASK 0x08
++#define SWI_GET_FW_ATTR_APM 0x2
+
+ /* atomic counter partially included in MAC address to make sure 2 devices
+ * do not end up with the same MAC - concept breaks in case of > 255 ifaces
+@@ -68,6 +73,11 @@
+ */
+ #define SIERRA_NET_USBCTL_BUF_LEN 1024
+
++/* The SIERRA_NET_RX_URB_SZ defines the receive urb size
++ * for optimal throughput.
++ */
++#define SIERRA_NET_RX_URB_SZ 1540
++
+ /* list of interface numbers - used for constructing interface lists */
+ struct sierra_net_iface_info {
+ const u32 infolen; /* number of interface numbers on list */
+@@ -139,6 +149,7 @@
+ #define SIERRA_NET_SESSION_IDLE 0x00
+ /* LSI Link types */
+ #define SIERRA_NET_AS_LINK_TYPE_IPv4 0x00
++#define SIERRA_NET_AS_LINK_TYPE_IPv6 0x02
+
+ struct lsi_umts {
+ u8 protocol;
+@@ -200,10 +211,11 @@
+ dev->data[0] = (unsigned long)priv;
+ }
+
+-/* is packet IPv4 */
++/* is packet IP */
+ static inline int is_ip(struct sk_buff *skb)
+ {
+- return skb->protocol == cpu_to_be16(ETH_P_IP);
++ return ((skb->protocol == cpu_to_be16(ETH_P_IP)) ||
++ (skb->protocol == cpu_to_be16(ETH_P_IPV6)));
+ }
+
+ /*
+@@ -312,6 +324,24 @@
+ /*----------------------------------------------------------------------------*
+ * END HIP *
+ *----------------------------------------------------------------------------*/
++/* This should come out before going to kernel.org */
++static void sierra_net_printk_buf(u8 *buf, u16 len)
++{
++#ifdef VERBOSE
++ u16 i;
++ u16 k;
++
++ for (i = k = 0; i < len / 4; i++, k += 4) {
++ printk(KERN_DEBUG "%02x%02x%02x%02x ",
++ buf[k+0], buf[k+1], buf[k+2], buf[k+3]);
++ }
++
++ for (; k < len; k++)
++ printk(KERN_DEBUG "%02x", buf[k]);
++
++ printk("\n");
++#endif
++}
+
+ static int sierra_net_send_cmd(struct usbnet *dev,
+ u8 *cmd, int cmdlen, const char * cmd_name)
+@@ -319,10 +349,12 @@
+ struct sierra_net_data *priv = sierra_net_get_private(dev);
+ int status;
+
++ usb_autopm_get_interface(dev->intf);
+ status = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0),
+ USB_CDC_SEND_ENCAPSULATED_COMMAND,
+ USB_DIR_OUT|USB_TYPE_CLASS|USB_RECIP_INTERFACE, 0,
+ priv->ifnum, cmd, cmdlen, USB_CTRL_SET_TIMEOUT);
++ usb_autopm_put_interface(dev->intf);
+
+ if (status != cmdlen && status != -ENODEV)
+ netdev_err(dev->net, "Submit %s failed %d\n", cmd_name, status);
+@@ -339,8 +371,17 @@
+
+ status = sierra_net_send_cmd(dev, priv->sync_msg,
+ sizeof(priv->sync_msg), "SYNC");
++ return status;
++}
+
+- return status;
++static void sierra_net_send_shutdown(struct usbnet *dev)
++{
++ struct sierra_net_data *priv = sierra_net_get_private(dev);
++
++ dev_dbg(&dev->udev->dev, "%s", __func__);
++
++ sierra_net_send_cmd(dev, priv->shdwn_msg,
++ sizeof(priv->shdwn_msg), "Shutdown");
+ }
+
+ static void sierra_net_set_ctx_index(struct sierra_net_data *priv, u8 ctx_ix)
+@@ -354,7 +395,7 @@
+
+ static inline int sierra_net_is_valid_addrlen(u8 len)
+ {
+- return len == sizeof(struct in_addr);
++ return (len == sizeof(struct in_addr));
+ }
+
+ static int sierra_net_parse_lsi(struct usbnet *dev, char *data, int datalen)
+@@ -383,10 +424,11 @@
+ }
+
+ /* Validate the link type */
+- if (lsi->link_type != SIERRA_NET_AS_LINK_TYPE_IPv4) {
+- netdev_err(dev->net, "Link type unsupported: 0x%02x\n",
++ if ((lsi->link_type != SIERRA_NET_AS_LINK_TYPE_IPv4) &&
++ (lsi->link_type != SIERRA_NET_AS_LINK_TYPE_IPv6)) {
++ netdev_err(dev->net, "Link unavailable: 0x%02x",
+ lsi->link_type);
+- return -1;
++ return 0;
+ }
+
+ /* Validate the coverage */
+@@ -474,13 +516,15 @@
+ return;
+ }
+ ifnum = priv->ifnum;
++ usb_autopm_get_interface(dev->intf);
+ len = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0),
+ USB_CDC_GET_ENCAPSULATED_RESPONSE,
+ USB_DIR_IN|USB_TYPE_CLASS|USB_RECIP_INTERFACE,
+ 0, ifnum, buf, SIERRA_NET_USBCTL_BUF_LEN,
+ USB_CTRL_SET_TIMEOUT);
++ usb_autopm_put_interface(dev->intf);
+
+- if (len < 0) {
++ if (unlikely(len < 0)) {
+ netdev_err(dev->net,
+ "usb_control_msg failed, status %d\n", len);
+ } else {
+@@ -488,6 +532,7 @@
+
+ dev_dbg(&dev->udev->dev, "%s: Received status message,"
+ " %04x bytes", __func__, len);
++ sierra_net_printk_buf(buf, len);
+
+ err = parse_hip(buf, len, &hh);
+ if (err) {
+@@ -534,7 +579,10 @@
+ "extmsgid 0x%04x\n", hh.extmsgid.word);
+ break;
+ case SIERRA_NET_HIP_RCGI:
+- /* Ignored */
++ /* Ignored. It is a firmware
++ * workaround to solve a Windows driver bug and
++ * may be removed in the future.
++ */
+ break;
+ default:
+ netdev_err(dev->net, "Unrecognized HIP msg, "
+@@ -561,7 +609,10 @@
+ struct sierra_net_data *priv = sierra_net_get_private(dev);
+
+ set_bit(work, &priv->kevent_flags);
+- schedule_work(&priv->sierra_net_kevent);
++ if (!schedule_work(&priv->sierra_net_kevent))
++ dev_dbg(&dev->udev->dev, "sierra_net_kevent %d may have been dropped", work);
++ else
++ dev_dbg(&dev->udev->dev, "sierra_net_kevent %d scheduled", work);
+ }
+
+ /*
+@@ -581,6 +632,7 @@
+ struct usb_cdc_notification *event;
+
+ dev_dbg(&dev->udev->dev, "%s", __func__);
++ sierra_net_printk_buf(urb->transfer_buffer, urb->actual_length);
+
+ if (urb->actual_length < sizeof *event)
+ return;
+@@ -661,6 +713,7 @@
+ if (!attrdata)
+ return -ENOMEM;
+
++ usb_autopm_get_interface(dev->intf);
+ result = usb_control_msg(
+ dev->udev,
+ usb_rcvctrlpipe(dev->udev, 0),
+@@ -672,6 +725,7 @@
+ attrdata, /* char *data */
+ sizeof(*attrdata), /* __u16 size */
+ USB_CTRL_SET_TIMEOUT); /* int timeout */
++ usb_autopm_put_interface(dev->intf);
+
+ if (result < 0) {
+ kfree(attrdata);
+@@ -684,6 +738,12 @@
+ return result;
+ }
+
++static int sierra_net_manage_power(struct usbnet *dev, int on)
++{
++ dev->intf->needs_remote_wakeup = on;
++ return 0;
++}
++
+ /*
+ * collects the bulk endpoints, the status endpoint.
+ */
+@@ -735,6 +795,10 @@
+
+ priv->usbnet = dev;
+ priv->ifnum = ifacenum;
++ /* override change_mtu with our own routine - need to bound check */
++ /* replace structure to our own structure where we have our own
++ * routine - need to bound check
++ */
+ dev->net->netdev_ops = &sierra_net_device_ops;
+
+ /* change MAC addr to include, ifacenum, and to be unique */
+@@ -761,6 +825,7 @@
+
+ /* Set up the netdev */
+ dev->net->flags |= IFF_NOARP;
++ dev->net->flags |= IFF_MULTICAST;
+ dev->net->ethtool_ops = &sierra_net_ethtool_ops;
+ netif_carrier_off(dev->net);
+
+@@ -773,11 +838,23 @@
+
+ /* Only need to do this once */
+ init_timer(&priv->sync_timer);
+-
+ /* verify fw attributes */
+ status = sierra_net_get_fw_attr(dev, &fwattr);
+- dev_dbg(&dev->udev->dev, "Fw attr: %x\n", fwattr);
+-
++ dev_dbg(&dev->udev->dev, "Fw attr: %x\n", fwattr);
++ if (status == sizeof(fwattr) && (fwattr & SWI_GET_FW_ATTR_APM)) {
++/*******************************************************************************
++ * If you want the default /sys/bus/usb/devices/.../.../power/level to be forced
++ * to auto, the following needs to be compiled in.
++ */
++#ifdef POWER_LEVEL_AUTO
++ /* make power level default be 'auto' */
++ dev_dbg(&dev->udev->dev, "Enabling APM");
++ usb_enable_autosuspend(dev->udev);
++#endif
++ } else {
++ dev_info(&intf->dev, "Disabling APM - not supported");
++ usb_disable_autosuspend(dev->udev);
++ }
+ /* test whether firmware supports DHCP */
+ if (!(status == sizeof(fwattr) && (fwattr & SWI_GET_FW_ATTR_MASK))) {
+ /* found incompatible firmware version */
+@@ -789,33 +866,45 @@
+ /* prepare sync message from template */
+ memcpy(priv->sync_msg, sync_tmplate, sizeof(priv->sync_msg));
+
++ return 0;
++}
++
++static void sierra_net_unbind(struct usbnet *dev, struct usb_interface *intf)
++{
++ struct sierra_net_data *priv = sierra_net_get_private(dev);
++
++ dev_dbg(&dev->udev->dev, "%s", __func__);
++
++ sierra_net_set_private(dev, NULL);
++
++ kfree(priv);
++}
++
++static int sierra_net_open(struct usbnet *dev)
++{
++ dev_dbg(&dev->udev->dev, "%s", __func__);
++
+ /* initiate the sync sequence */
+ sierra_net_dosync(dev);
+
+ return 0;
+ }
+
+-static void sierra_net_unbind(struct usbnet *dev, struct usb_interface *intf)
++static int sierra_net_stop(struct usbnet *dev)
+ {
+- int status;
+ struct sierra_net_data *priv = sierra_net_get_private(dev);
+
+ dev_dbg(&dev->udev->dev, "%s", __func__);
+
+- /* kill the timer and work */
++ /* Kill the timer then flush the work queue */
+ del_timer_sync(&priv->sync_timer);
++
+ cancel_work_sync(&priv->sierra_net_kevent);
+
+ /* tell modem we are going away */
+- status = sierra_net_send_cmd(dev, priv->shdwn_msg,
+- sizeof(priv->shdwn_msg), "Shutdown");
+- if (status < 0)
+- netdev_err(dev->net,
+- "usb_control_msg failed, status %d\n", status);
+-
+- sierra_net_set_private(dev, NULL);
++ sierra_net_send_shutdown(dev);
+
+- kfree(priv);
++ return 0;
+ }
+
+ static struct sk_buff *sierra_net_skb_clone(struct usbnet *dev,
+@@ -847,9 +936,13 @@
+ int err;
+ struct hip_hdr hh;
+ struct sk_buff *new_skb;
++ struct ethhdr *eth;
++ struct iphdr *ip;
+
+ dev_dbg(&dev->udev->dev, "%s", __func__);
+
++ sierra_net_printk_buf(skb->data, skb->len);
++
+ /* could contain multiple packets */
+ while (likely(skb->len)) {
+ err = parse_hip(skb->data, skb->len, &hh);
+@@ -879,6 +972,12 @@
+ memcpy(skb->data, sierra_net_get_private(dev)->ethr_hdr_tmpl,
+ ETH_HLEN);
+
++ ip = (struct iphdr *)((char *)skb->data + ETH_HLEN);
++ if(ip->version == 6) {
++ eth = (struct ethhdr *)skb->data;
++ eth->h_proto = cpu_to_be16(ETH_P_IPV6);
++ }
++
+ /* Last packet in batch handled by usbnet */
+ if (hh.payload_len.word == skb->len)
+ return 1;
+@@ -923,6 +1022,8 @@
+ }
+ }
+ build_hip(skb->data, len, priv);
++
++ sierra_net_printk_buf(skb->data, skb->len);
+ return skb;
+ } else {
+ /*
+@@ -942,16 +1043,24 @@
+ return NULL;
+ }
+
++static int sierra_net_reset_resume(struct usb_interface *intf)
++{
++ struct usbnet *dev = usb_get_intfdata(intf);
++ netdev_err(dev->net, "%s\n", __func__);
++ return usbnet_resume(intf);
++}
++
+ static const u8 sierra_net_ifnum_list[] = { 7, 10, 11 };
+-static const struct sierra_net_info_data sierra_net_info_data_68A3 = {
+- .rx_urb_size = 8 * 1024,
++static const struct sierra_net_info_data sierra_net_info_data_direct_ip = {
++ /* .rx_urb_size = 8 * 1024, */
++ .rx_urb_size = SIERRA_NET_RX_URB_SZ,
+ .whitelist = {
+ .infolen = ARRAY_SIZE(sierra_net_ifnum_list),
+ .ifaceinfo = sierra_net_ifnum_list
+ }
+ };
+
+-static const struct driver_info sierra_net_info_68A3 = {
++static const struct driver_info sierra_net_info_direct_ip = {
+ .description = "Sierra Wireless USB-to-WWAN Modem",
+ .flags = FLAG_WWAN | FLAG_SEND_ZLP,
+ .bind = sierra_net_bind,
+@@ -959,12 +1068,21 @@
+ .status = sierra_net_status,
+ .rx_fixup = sierra_net_rx_fixup,
+ .tx_fixup = sierra_net_tx_fixup,
+- .data = (unsigned long)&sierra_net_info_data_68A3,
++ .manage_power = sierra_net_manage_power,
++ .stop = sierra_net_stop,
++ .check_connect = sierra_net_open,
++ .data = (unsigned long)&sierra_net_info_data_direct_ip,
+ };
+
+ static const struct usb_device_id products[] = {
+- {USB_DEVICE(0x1199, 0x68A3), /* Sierra Wireless USB-to-WWAN modem */
+- .driver_info = (unsigned long) &sierra_net_info_68A3},
++ {USB_DEVICE(0x1199, 0x68A3), /* Sierra Wireless Direct IP modem */
++ .driver_info = (unsigned long) &sierra_net_info_direct_ip},
++ {USB_DEVICE(0xF3D, 0x68A3), /* AT&T Direct IP modem */
++ .driver_info = (unsigned long) &sierra_net_info_direct_ip},
++ {USB_DEVICE(0x1199, 0x68AA), /* Sierra Wireless Direct IP LTE modem */
++ .driver_info = (unsigned long) &sierra_net_info_direct_ip},
++ {USB_DEVICE(0xF3D, 0x68AA), /* AT&T Direct IP LTE modem */
++ .driver_info = (unsigned long) &sierra_net_info_direct_ip},
+
+ {}, /* last item */
+ };
+@@ -978,7 +1096,9 @@
+ .disconnect = usbnet_disconnect,
+ .suspend = usbnet_suspend,
+ .resume = usbnet_resume,
++ .reset_resume = sierra_net_reset_resume,
+ .no_dynamic_id = 1,
++ .supports_autosuspend = 1,
+ };
+
+ static int __init sierra_net_init(void)
+Index: linux-2.6.39.4/drivers/usb/serial/sierra.c
+===================================================================
+--- linux-2.6.39.4.orig/drivers/usb/serial/sierra.c 2012-02-27 15:38:01.519215085 -0600
++++ linux-2.6.39.4/drivers/usb/serial/sierra.c 2011-09-22 17:05:46.000000000 -0500
+@@ -3,7 +3,7 @@
+
+ Copyright (C) 2006, 2007, 2008 Kevin Lloyd <klloyd@sierrawireless.com>,
+
+- Copyright (C) 2008, 2009 Elina Pasheva, Matthew Safar, Rory Filer
++ Copyright (C) 2008 - 2011 Elina Pasheva, Matthew Safar, Rory Filer
+ <linux@sierrawireless.com>
+
+ IMPORTANT DISCLAIMER: This driver is not commercially supported by
+@@ -17,8 +17,12 @@
+ Whom based his on the Keyspan driver by Hugh Blemings <hugh@blemings.org>
+ */
+ /* Uncomment to log function calls */
+-/* #define DEBUG */
+-#define DRIVER_VERSION "v.1.7.16"
++/*#define DEBUG*/
++/* Uncomment to force power level set to auto when attaching a device */
++/*#define POWER_LEVEL_AUTO*/
++
++/* Sierra driver - kernel 2.6.38 */
++#define DRIVER_VERSION "v.1.7.40"
+ #define DRIVER_AUTHOR "Kevin Lloyd, Elina Pasheva, Matthew Safar, Rory Filer"
+ #define DRIVER_DESC "USB Driver for Sierra Wireless USB modems"
+
+@@ -31,9 +35,13 @@
+ #include <linux/module.h>
+ #include <linux/usb.h>
+ #include <linux/usb/serial.h>
++#include <asm/unaligned.h>
+
+ #define SWIMS_USB_REQUEST_SetPower 0x00
++#define SWIMS_USB_REQUEST_GetFwAttr 0x06
+ #define SWIMS_USB_REQUEST_SetNmea 0x07
++#define USB_REQUEST_TYPE_CLASS 0xA1
++#define USB_REQUEST_IFACE 0x20
+
+ #define N_IN_URB_HM 8
+ #define N_OUT_URB_HM 64
+@@ -46,19 +54,47 @@
+ allocations > PAGE_SIZE and the number of packets in a page
+ is an integer 512 is the largest possible packet on EHCI */
+
++#define SWI_FW_ATTR_PM_MASK 0x02
++/* PORTION_LEN defines the length of device attribute buffer */
++#define PORTION_LEN 4096
++
+ static int debug;
+ static int nmea;
+
++/* sysfs attributes */
++static int sierra_create_sysfs_attrs(struct usb_serial_port *port);
++static int sierra_remove_sysfs_attrs(struct usb_serial_port *port);
++
+ /* Used in interface blacklisting */
+ struct sierra_iface_info {
+ const u32 infolen; /* number of interface numbers on blacklist */
+ const u8 *ifaceinfo; /* pointer to the array holding the numbers */
+ };
+
++/* per interface statistics */
++struct sierra_intf_stats {
++ atomic_t rx_bytes; /* received bytes */
++ atomic_t indat_cb_cnt; /* indat callback count */
++ atomic_t indat_cb_fail; /* indat cb with error */
++
++ atomic_t tx_bytes; /* transmitted bytes */
++ atomic_t write_cnt; /* no. of writes */
++ atomic_t write_err; /* no. of failed writes */
++
++ atomic_t delayed_writes; /* no. of delayed writes */
++ atomic_t delayed_write_err; /* no. of delayed write errs */
++
++ atomic_t outdat_cb_cnt; /* outdat callback count */
++ atomic_t outdat_cb_fail; /* outdat cb with error */
++
++};
++
+ struct sierra_intf_private {
+ spinlock_t susp_lock;
+ unsigned int suspended:1;
+ int in_flight;
++
++ struct sierra_intf_stats stats;
+ };
+
+ static int sierra_set_power_state(struct usb_device *udev, __u16 swiState)
+@@ -91,6 +127,38 @@
+ return result;
+ }
+
++static int sierra_get_fw_attr(struct usb_device *udev, u16 *data)
++{
++ int result;
++ u16 *attrdata;
++
++ dev_dbg(&udev->dev, "%s\n", __func__);
++
++ attrdata = kmalloc(sizeof(*attrdata), GFP_KERNEL);
++ if (!attrdata)
++ return -ENOMEM;
++
++ result = usb_control_msg(udev,
++ usb_rcvctrlpipe(udev, 0),
++ SWIMS_USB_REQUEST_GetFwAttr, /* __u8 request*/
++ USB_TYPE_VENDOR | USB_DIR_IN, /* request type*/
++ 0x0000, /* __u16 value */
++ 0x0000, /* __u16 index */
++ attrdata, /* void *data */
++ sizeof(*attrdata), /* _u16 size */
++ USB_CTRL_SET_TIMEOUT); /* in timeout */
++
++ if (result < 0) {
++ kfree(attrdata);
++ return -EIO;
++ }
++
++ *data = *attrdata;
++
++ kfree(attrdata);
++ return result;
++}
++
+ static int sierra_calc_num_ports(struct usb_serial *serial)
+ {
+ int num_ports = 0;
+@@ -150,7 +218,6 @@
+ int interface;
+ struct usb_interface *p_interface;
+ struct usb_host_interface *p_host_interface;
+- dev_dbg(&serial->dev->dev, "%s\n", __func__);
+
+ /* Get the interface structure pointer from the serial struct */
+ p_interface = serial->interface;
+@@ -159,8 +226,7 @@
+ p_host_interface = p_interface->cur_altsetting;
+
+ /* read the interface descriptor for this active altsetting
+- * to find out the interface number we are on
+- */
++ * to find out the interface number we are on */
+ interface = p_host_interface->desc.bInterfaceNumber;
+
+ return interface;
+@@ -171,7 +237,7 @@
+ {
+ int result = 0;
+ struct usb_device *udev;
+- struct sierra_intf_private *data;
++ struct sierra_intf_private *intfdata;
+ u8 ifnum;
+
+ udev = serial->dev;
+@@ -185,7 +251,9 @@
+ if (serial->interface->num_altsetting == 2) {
+ dev_dbg(&udev->dev, "Selecting alt setting for interface %d\n",
+ ifnum);
+- /* We know the alternate setting is 1 for the MC8785 */
++ /* We know the alternate setting is for composite USB interface
++ * modems
++ */
+ usb_set_interface(udev, ifnum, 1);
+ }
+
+@@ -199,10 +267,11 @@
+ return -ENODEV;
+ }
+
+- data = serial->private = kzalloc(sizeof(struct sierra_intf_private), GFP_KERNEL);
+- if (!data)
++ intfdata = serial->private = kzalloc(sizeof(struct sierra_intf_private),
++ GFP_KERNEL);
++ if (!intfdata)
+ return -ENOMEM;
+- spin_lock_init(&data->susp_lock);
++ spin_lock_init(&intfdata->susp_lock);
+
+ return result;
+ }
+@@ -223,15 +292,15 @@
+ /* 'blacklist' of interfaces not served by this driver */
+ static const u8 direct_ip_non_serial_ifaces[] = { 7, 8, 9, 10, 11 };
+ static const struct sierra_iface_info direct_ip_interface_blacklist = {
+- .infolen = ARRAY_SIZE(direct_ip_non_serial_ifaces),
++ .infolen = ARRAY_SIZE( direct_ip_non_serial_ifaces ),
+ .ifaceinfo = direct_ip_non_serial_ifaces,
+ };
+
+-static const struct usb_device_id id_table[] = {
++static const struct usb_device_id id_table [] = {
+ { USB_DEVICE(0x0F3D, 0x0112) }, /* Airprime/Sierra PC 5220 */
+ { USB_DEVICE(0x03F0, 0x1B1D) }, /* HP ev2200 a.k.a MC5720 */
+- { USB_DEVICE(0x03F0, 0x211D) }, /* HP ev2210 a.k.a MC5725 */
+ { USB_DEVICE(0x03F0, 0x1E1D) }, /* HP hs2300 a.k.a MC8775 */
++ { USB_DEVICE(0x03F0, 0x211D) }, /* HP ev2210 a.k.a MC5725 */
+
+ { USB_DEVICE(0x1199, 0x0017) }, /* Sierra Wireless EM5625 */
+ { USB_DEVICE(0x1199, 0x0018) }, /* Sierra Wireless MC5720 */
+@@ -245,7 +314,10 @@
+ { USB_DEVICE(0x1199, 0x0021) }, /* Sierra Wireless AirCard 597E */
+ { USB_DEVICE(0x1199, 0x0112) }, /* Sierra Wireless AirCard 580 */
+ { USB_DEVICE(0x1199, 0x0120) }, /* Sierra Wireless USB Dongle 595U */
+- { USB_DEVICE(0x1199, 0x0301) }, /* Sierra Wireless USB Dongle 250U */
++ { USB_DEVICE(0x1199, 0x0301) }, /* Sierra Wireless USB Dongle 250U/3G */
++ /* Sierra Wireless MC5728 */
++ { USB_DEVICE_AND_INTERFACE_INFO(0x1199, 0x0400, 0xFF, 0xFF, 0xFF) },
++
+ /* Sierra Wireless C597 */
+ { USB_DEVICE_AND_INTERFACE_INFO(0x1199, 0x0023, 0xFF, 0xFF, 0xFF) },
+ /* Sierra Wireless T598 */
+@@ -253,7 +325,7 @@
+ { USB_DEVICE(0x1199, 0x0026) }, /* Sierra Wireless T11 */
+ { USB_DEVICE(0x1199, 0x0027) }, /* Sierra Wireless AC402 */
+ { USB_DEVICE(0x1199, 0x0028) }, /* Sierra Wireless MC5728 */
+- { USB_DEVICE(0x1199, 0x0029) }, /* Sierra Wireless Device */
++ { USB_DEVICE(0x114F, 0x6000) }, /* Sierra Wireless Q26 Elite */
+
+ { USB_DEVICE(0x1199, 0x6802) }, /* Sierra Wireless MC8755 */
+ { USB_DEVICE(0x1199, 0x6803) }, /* Sierra Wireless MC8765 */
+@@ -277,7 +349,7 @@
+ { USB_DEVICE(0x1199, 0x683A) }, /* Sierra Wireless MC8785 */
+ { USB_DEVICE(0x1199, 0x683B) }, /* Sierra Wireless MC8785 Composite */
+ /* Sierra Wireless MC8790, MC8791, MC8792 Composite */
+- { USB_DEVICE(0x1199, 0x683C) },
++ { USB_DEVICE(0x1199, 0x683C) },
+ { USB_DEVICE(0x1199, 0x683D) }, /* Sierra Wireless MC8791 Composite */
+ /* Sierra Wireless MC8790, MC8791, MC8792 */
+ { USB_DEVICE(0x1199, 0x683E) },
+@@ -298,22 +370,34 @@
+ /* Sierra Wireless HSPA Non-Composite Device */
+ { USB_DEVICE_AND_INTERFACE_INFO(0x1199, 0x6892, 0xFF, 0xFF, 0xFF)},
+ { USB_DEVICE(0x1199, 0x6893) }, /* Sierra Wireless Device */
+- { USB_DEVICE(0x1199, 0x68A3), /* Sierra Wireless Direct IP modems */
+- .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist
++ /* Sierra Wireless Direct IP modems */
++ { USB_DEVICE_AND_INTERFACE_INFO(0x1199, 0x68A3, 0xFF, 0xFF, 0xFF),
++ .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist
+ },
+- { USB_DEVICE(0x0f3d, 0x68A3), /* Airprime/Sierra Wireless Direct IP modems */
+- .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist
++ /* AT&T Direct IP modems */
++ { USB_DEVICE_AND_INTERFACE_INFO(0x0F3D, 0x68A3, 0xFF, 0xFF, 0xFF),
++ .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist
+ },
+- { USB_DEVICE(0x413C, 0x08133) }, /* Dell Computer Corp. Wireless 5720 VZW Mobile Broadband (EVDO Rev-A) Minicard GPS Port */
++ /* Sierra Wireless Direct IP LTE modems */
++ { USB_DEVICE_AND_INTERFACE_INFO(0x1199, 0x68AA, 0xFF, 0xFF, 0xFF),
++ .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist
++ },
++ /* AT&T Direct IP LTE modems */
++ { USB_DEVICE_AND_INTERFACE_INFO(0x0F3D, 0x68AA, 0xFF, 0xFF, 0xFF),
++ .driver_info = (kernel_ulong_t)&direct_ip_interface_blacklist
++ },
++ /* Wireless 5720 VZW Mobile Broadband (EVDO Rev-A) Minicard GPS Port */
++ { USB_DEVICE(0x413C, 0x8133) },
+
+ { }
+ };
+ MODULE_DEVICE_TABLE(usb, id_table);
+
+-
++/* per port private data */
+ struct sierra_port_private {
+ spinlock_t lock; /* lock the structure */
+ int outstanding_urbs; /* number of out urbs in flight */
++
+ struct usb_anchor active;
+ struct usb_anchor delayed;
+
+@@ -335,7 +419,7 @@
+ static int sierra_send_setup(struct usb_serial_port *port)
+ {
+ struct usb_serial *serial = port->serial;
+- struct sierra_port_private *portdata;
++ struct sierra_port_private *portdata = usb_get_serial_port_data(port);
+ __u16 interface = 0;
+ int val = 0;
+ int do_send = 0;
+@@ -343,8 +427,6 @@
+
+ dev_dbg(&port->dev, "%s\n", __func__);
+
+- portdata = usb_get_serial_port_data(port);
+-
+ if (portdata->dtr_state)
+ val |= 0x01;
+ if (portdata->rts_state)
+@@ -376,10 +458,7 @@
+ if (!do_send)
+ return 0;
+
+- retval = usb_autopm_get_interface(serial->interface);
+- if (retval < 0)
+- return retval;
+-
++ usb_autopm_get_interface(serial->interface);
+ retval = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
+ 0x22, 0x21, val, interface, NULL, 0, USB_CTRL_SET_TIMEOUT);
+ usb_autopm_put_interface(serial->interface);
+@@ -395,7 +474,7 @@
+ sierra_send_setup(port);
+ }
+
+-static int sierra_tiocmget(struct tty_struct *tty)
++static int sierra_tiocmget(struct tty_struct *tty, struct file *file)
+ {
+ struct usb_serial_port *port = tty->driver_data;
+ unsigned int value;
+@@ -414,7 +493,7 @@
+ return value;
+ }
+
+-static int sierra_tiocmset(struct tty_struct *tty,
++static int sierra_tiocmset(struct tty_struct *tty, struct file *file,
+ unsigned int set, unsigned int clear)
+ {
+ struct usb_serial_port *port = tty->driver_data;
+@@ -440,11 +519,77 @@
+ if (urb) {
+ port = urb->context;
+ dev_dbg(&port->dev, "%s: %p\n", __func__, urb);
+- kfree(urb->transfer_buffer);
+ usb_free_urb(urb);
+ }
+ }
+
++/* Sysfs Attributes */
++
++static ssize_t show_suspend_status(struct device *dev,
++ struct device_attribute *attr, char *buf)
++{
++ struct usb_serial_port *port;
++ struct sierra_port_private *portdata;
++ struct sierra_intf_private *intfdata;
++ unsigned long flags;
++ unsigned int flag_suspended = 0;
++
++ port = to_usb_serial_port(dev);
++ portdata = usb_get_serial_port_data(port);
++ intfdata = port->serial->private;
++
++ spin_lock_irqsave(&intfdata->susp_lock, flags);
++ flag_suspended = intfdata->suspended;
++ spin_unlock_irqrestore(&intfdata->susp_lock, flags);
++
++ return snprintf(buf, PORTION_LEN, "%i\n", flag_suspended);
++}
++
++static ssize_t show_stats(struct device *dev,
++ struct device_attribute *attr, char *buf)
++{
++ struct usb_serial_port *port;
++ struct sierra_intf_private *intfdata;
++
++ port = to_usb_serial_port(dev);
++ intfdata = port->serial->private;
++
++ return snprintf(buf, PORTION_LEN,
++ "rx: %i B\tindat: %i\tindat err: %i\n"
++ "tx: %i B\toutdat: %i\toutdat err: %i\n"
++ "writes: %i\t\twrite err: %i\n"
++ "delayed writes: %i\tdelayed write err: %i\n",
++ atomic_read(&intfdata->stats.rx_bytes), atomic_read(&intfdata->stats.indat_cb_cnt), atomic_read(&intfdata->stats.indat_cb_fail),
++ atomic_read(&intfdata->stats.tx_bytes), atomic_read(&intfdata->stats.outdat_cb_cnt), atomic_read(&intfdata->stats.outdat_cb_fail),
++ atomic_read(&intfdata->stats.write_cnt), atomic_read(&intfdata->stats.write_err),
++ atomic_read(&intfdata->stats.delayed_writes), atomic_read(&intfdata->stats.delayed_write_err)
++ );
++}
++
++/* Read only suspend status */
++static DEVICE_ATTR(suspend_status, S_IWUSR | S_IRUGO, show_suspend_status,
++ NULL);
++
++/* Read only statistics */
++static DEVICE_ATTR(stats, S_IWUSR | S_IRUGO, show_stats, NULL);
++
++static int sierra_create_sysfs_attrs(struct usb_serial_port *port)
++{
++ int result = 0;
++
++ result = device_create_file(&port->dev, &dev_attr_stats);
++ if (unlikely (result < 0))
++ return result;
++ return device_create_file(&port->dev, &dev_attr_suspend_status);
++}
++
++static int sierra_remove_sysfs_attrs(struct usb_serial_port *port)
++{
++ device_remove_file(&port->dev, &dev_attr_stats);
++ device_remove_file(&port->dev, &dev_attr_suspend_status);
++ return 0;
++}
++
+ static void sierra_outdat_callback(struct urb *urb)
+ {
+ struct usb_serial_port *port = urb->context;
+@@ -455,16 +600,20 @@
+ dev_dbg(&port->dev, "%s - port %d\n", __func__, port->number);
+ intfdata = port->serial->private;
+
+- /* free up the transfer buffer, as usb_free_urb() does not do this */
+- kfree(urb->transfer_buffer);
+ usb_autopm_put_interface_async(port->serial->interface);
+- if (status)
++
++ atomic_inc(&intfdata->stats.outdat_cb_cnt);
++
++ if (status) {
+ dev_dbg(&port->dev, "%s - nonzero write bulk status "
+ "received: %d\n", __func__, status);
++ atomic_inc(&intfdata->stats.outdat_cb_fail);
++ }
+
+ spin_lock(&portdata->lock);
+ --portdata->outstanding_urbs;
+ spin_unlock(&portdata->lock);
++
+ spin_lock(&intfdata->susp_lock);
+ --intfdata->in_flight;
+ spin_unlock(&intfdata->susp_lock);
+@@ -473,10 +622,11 @@
+ }
+
+ /* Write */
+-static int sierra_write(struct tty_struct *tty, struct usb_serial_port *port,
+- const unsigned char *buf, int count)
++static int sierra_write(struct tty_struct *tty,
++ struct usb_serial_port *port,
++ const unsigned char *buf, int count)
+ {
+- struct sierra_port_private *portdata;
++ struct sierra_port_private *portdata = usb_get_serial_port_data(port);
+ struct sierra_intf_private *intfdata;
+ struct usb_serial *serial = port->serial;
+ unsigned long flags;
+@@ -489,46 +639,49 @@
+ if (count == 0)
+ return 0;
+
+- portdata = usb_get_serial_port_data(port);
++ dev_dbg(&port->dev, "%s: write (%zu bytes)\n", __func__, writesize);
++
+ intfdata = serial->private;
+
+- dev_dbg(&port->dev, "%s: write (%zd bytes)\n", __func__, writesize);
+ spin_lock_irqsave(&portdata->lock, flags);
+- dev_dbg(&port->dev, "%s - outstanding_urbs: %d\n", __func__,
+- portdata->outstanding_urbs);
+ if (portdata->outstanding_urbs > portdata->num_out_urbs) {
+ spin_unlock_irqrestore(&portdata->lock, flags);
+ dev_dbg(&port->dev, "%s - write limit hit\n", __func__);
+ return 0;
+ }
+ portdata->outstanding_urbs++;
+- dev_dbg(&port->dev, "%s - 1, outstanding_urbs: %d\n", __func__,
+- portdata->outstanding_urbs);
+ spin_unlock_irqrestore(&portdata->lock, flags);
+
+ retval = usb_autopm_get_interface_async(serial->interface);
+- if (retval < 0) {
++ if (unlikely(retval < 0)) {
+ spin_lock_irqsave(&portdata->lock, flags);
+ portdata->outstanding_urbs--;
+ spin_unlock_irqrestore(&portdata->lock, flags);
+- goto error_simple;
++ return retval;
+ }
+
+ buffer = kmalloc(writesize, GFP_ATOMIC);
+ if (!buffer) {
+ dev_err(&port->dev, "out of memory\n");
+- retval = -ENOMEM;
+- goto error_no_buffer;
++ spin_lock_irqsave(&portdata->lock, flags);
++ --portdata->outstanding_urbs;
++ spin_unlock_irqrestore(&portdata->lock, flags);
++ usb_autopm_put_interface_async(serial->interface);
++ return -ENOMEM;
+ }
+
+ urb = usb_alloc_urb(0, GFP_ATOMIC);
+ if (!urb) {
+ dev_err(&port->dev, "no more free urbs\n");
+- retval = -ENOMEM;
+- goto error_no_urb;
++ kfree(buffer);
++ spin_lock_irqsave(&portdata->lock, flags);
++ --portdata->outstanding_urbs;
++ spin_unlock_irqrestore(&portdata->lock, flags);
++ usb_autopm_put_interface_async(serial->interface);
++ return -ENOMEM;
+ }
+
+- memcpy(buffer, buf, writesize);
++ memcpy(buffer, buf, writesize);
+
+ usb_serial_debug_data(debug, &port->dev, __func__, writesize, buffer);
+
+@@ -537,69 +690,73 @@
+ port->bulk_out_endpointAddress),
+ buffer, writesize, sierra_outdat_callback, port);
+
+- /* Handle the need to send a zero length packet */
+- urb->transfer_flags |= URB_ZERO_PACKET;
++ /* Handle the need to send a zero length packet and release the
++ * transfer buffer
++ */
++ urb->transfer_flags |= (URB_ZERO_PACKET | URB_FREE_BUFFER);
+
+ spin_lock_irqsave(&intfdata->susp_lock, flags);
+
+ if (intfdata->suspended) {
+ usb_anchor_urb(urb, &portdata->delayed);
+ spin_unlock_irqrestore(&intfdata->susp_lock, flags);
+- goto skip_power;
+- } else {
+- usb_anchor_urb(urb, &portdata->active);
++ /* release our reference to this urb, the USB core will
++ * eventually free it entirely */
++ usb_free_urb(urb);
++ return writesize;
+ }
++ usb_anchor_urb(urb, &portdata->active);
++
+ /* send it down the pipe */
+ retval = usb_submit_urb(urb, GFP_ATOMIC);
+ if (retval) {
+ usb_unanchor_urb(urb);
+ spin_unlock_irqrestore(&intfdata->susp_lock, flags);
++
+ dev_err(&port->dev, "%s - usb_submit_urb(write bulk) failed "
+ "with status = %d\n", __func__, retval);
+- goto error;
++ usb_free_urb(urb);
++ spin_lock_irqsave(&portdata->lock, flags);
++ --portdata->outstanding_urbs;
++ spin_unlock_irqrestore(&portdata->lock, flags);
++ usb_autopm_put_interface_async(serial->interface);
++ atomic_inc(&intfdata->stats.write_err);
++ return retval;
+ } else {
+ intfdata->in_flight++;
+ spin_unlock_irqrestore(&intfdata->susp_lock, flags);
++ atomic_inc(&intfdata->stats.write_cnt);
++ atomic_add(writesize, &intfdata->stats.tx_bytes);
+ }
+-
+-skip_power:
+- /* we are done with this urb, so let the host driver
+- * really free it when it is finished with it */
+- usb_free_urb(urb);
++ /* release our reference to this urb, the USB core will eventually
++ * free it entirely */
++ usb_free_urb(urb);
+
+ return writesize;
+-error:
+- usb_free_urb(urb);
+-error_no_urb:
+- kfree(buffer);
+-error_no_buffer:
+- spin_lock_irqsave(&portdata->lock, flags);
+- --portdata->outstanding_urbs;
+- dev_dbg(&port->dev, "%s - 2. outstanding_urbs: %d\n", __func__,
+- portdata->outstanding_urbs);
+- spin_unlock_irqrestore(&portdata->lock, flags);
+- usb_autopm_put_interface_async(serial->interface);
+-error_simple:
+- return retval;
+ }
+
+ static void sierra_indat_callback(struct urb *urb)
+ {
+ int err;
+ int endpoint;
+- struct usb_serial_port *port;
++ struct usb_serial_port *port = urb->context;
+ struct tty_struct *tty;
++ struct sierra_intf_private *intfdata;
+ unsigned char *data = urb->transfer_buffer;
+ int status = urb->status;
+
+ endpoint = usb_pipeendpoint(urb->pipe);
+- port = urb->context;
+
+ dev_dbg(&port->dev, "%s: %p\n", __func__, urb);
+
++ intfdata = port->serial->private;
++
++ atomic_inc(&intfdata->stats.indat_cb_cnt); /* indat calls */
++
+ if (status) {
+ dev_dbg(&port->dev, "%s: nonzero status: %d on"
+ " endpoint %02x\n", __func__, status, endpoint);
++ atomic_inc(&intfdata->stats.indat_cb_fail); /* indat fails */
+ } else {
+ if (urb->actual_length) {
+ tty = tty_port_tty_get(&port->port);
+@@ -609,6 +766,10 @@
+ tty_flip_buffer_push(tty);
+
+ tty_kref_put(tty);
++ /* tty invalid after this point */
++ /* rx'd bytes */
++ atomic_add(urb->actual_length,
++ &intfdata->stats.rx_bytes);
+ usb_serial_debug_data(debug, &port->dev,
+ __func__, urb->actual_length, data);
+ }
+@@ -619,13 +780,15 @@
+ }
+
+ /* Resubmit urb so we continue receiving */
+- if (status != -ESHUTDOWN && status != -EPERM) {
++ if (status != -ESHUTDOWN && status != -ENOENT && status != -ENODEV) {
+ usb_mark_last_busy(port->serial->dev);
+ err = usb_submit_urb(urb, GFP_ATOMIC);
+- if (err && err != -EPERM)
++ if (err && err != -ENODEV)
+ dev_err(&port->dev, "resubmit read urb failed."
+ "(%d)\n", err);
+ }
++
++ return;
+ }
+
+ static void sierra_instat_callback(struct urb *urb)
+@@ -636,31 +799,29 @@
+ struct sierra_port_private *portdata = usb_get_serial_port_data(port);
+ struct usb_serial *serial = port->serial;
+
+- dev_dbg(&port->dev, "%s: urb %p port %p has data %p\n", __func__,
+- urb, port, portdata);
++ dev_dbg(&port->dev, "%s: %p\n", __func__, urb);
+
+ if (status == 0) {
+ struct usb_ctrlrequest *req_pkt =
+ (struct usb_ctrlrequest *)urb->transfer_buffer;
+
+- if (!req_pkt) {
+- dev_dbg(&port->dev, "%s: NULL req_pkt\n",
+- __func__);
+- return;
+- }
+- if ((req_pkt->bRequestType == 0xA1) &&
+- (req_pkt->bRequest == 0x20)) {
++ const u16 *sigp = (u16 *)(req_pkt + 1);
++ /* usb_ctrlrequest we parsed is followed by two bytes of data
++ * make sure we received that many bytes
++ */
++ if (urb->actual_length >= sizeof(*req_pkt) + sizeof(*sigp) &&
++ req_pkt->bRequestType == USB_REQUEST_TYPE_CLASS &&
++ req_pkt->bRequest == USB_REQUEST_IFACE) {
+ int old_dcd_state;
+- unsigned char signals = *((unsigned char *)
+- urb->transfer_buffer +
+- sizeof(struct usb_ctrlrequest));
++ const u16 signals = get_unaligned_le16(sigp);
+ struct tty_struct *tty;
+
+- dev_dbg(&port->dev, "%s: signal x%x\n", __func__,
++ dev_dbg(&port->dev, "%s: signal 0x%x\n", __func__,
+ signals);
+
+ old_dcd_state = portdata->dcd_state;
+- portdata->cts_state = 1;
++ /* Note: CTS from modem is in reverse logic! */
++ portdata->cts_state = ((signals & 0x100) ? 0 : 1);
+ portdata->dcd_state = ((signals & 0x01) ? 1 : 0);
+ portdata->dsr_state = ((signals & 0x02) ? 1 : 0);
+ portdata->ri_state = ((signals & 0x08) ? 1 : 0);
+@@ -671,19 +832,19 @@
+ tty_hangup(tty);
+ tty_kref_put(tty);
+ } else {
+- dev_dbg(&port->dev, "%s: type %x req %x\n",
+- __func__, req_pkt->bRequestType,
+- req_pkt->bRequest);
++ /* dump the data we don't understand to log */
++ usb_serial_debug_data(1, &port->dev, __func__,
++ urb->actual_length, urb->transfer_buffer);
+ }
+ } else
+ dev_dbg(&port->dev, "%s: error %d\n", __func__, status);
+
+ /* Resubmit urb so we continue receiving IRQ data */
+- if (status != -ESHUTDOWN && status != -ENOENT) {
++ if (status != -ESHUTDOWN && status != -ENOENT && status != -ENODEV) {
+ usb_mark_last_busy(serial->dev);
+ urb->dev = serial->dev;
+ err = usb_submit_urb(urb, GFP_ATOMIC);
+- if (err && err != -EPERM)
++ if (err && err != -ENODEV)
+ dev_err(&port->dev, "%s: resubmit intr urb "
+ "failed. (%d)\n", __func__, err);
+ }
+@@ -694,20 +855,21 @@
+ struct usb_serial_port *port = tty->driver_data;
+ struct sierra_port_private *portdata = usb_get_serial_port_data(port);
+ unsigned long flags;
++ int retval;
+
+ dev_dbg(&port->dev, "%s - port %d\n", __func__, port->number);
+
+ /* try to give a good number back based on if we have any free urbs at
+ * this point in time */
++ retval = MAX_TRANSFER;
++
+ spin_lock_irqsave(&portdata->lock, flags);
+- if (portdata->outstanding_urbs > (portdata->num_out_urbs * 2) / 3) {
+- spin_unlock_irqrestore(&portdata->lock, flags);
+- dev_dbg(&port->dev, "%s - write limit hit\n", __func__);
+- return 0;
++ if (portdata->outstanding_urbs >= portdata->num_out_urbs) {
++ retval = 0;
+ }
+ spin_unlock_irqrestore(&portdata->lock, flags);
+
+- return 2048;
++ return retval;
+ }
+
+ static void sierra_stop_rx_urbs(struct usb_serial_port *port)
+@@ -734,6 +896,7 @@
+ urb = portdata->in_urbs[i];
+ if (!urb)
+ continue;
++ urb->transfer_flags |= URB_FREE_BUFFER;
+ err = usb_submit_urb(urb, mem_flags);
+ if (err) {
+ dev_err(&port->dev, "%s: submit urb failed: %d\n",
+@@ -795,38 +958,31 @@
+
+ return urb;
+ }
+-
+ static void sierra_close(struct usb_serial_port *port)
+ {
+ int i;
++ struct urb *urb;
+ struct usb_serial *serial = port->serial;
+ struct sierra_port_private *portdata;
+ struct sierra_intf_private *intfdata = port->serial->private;
+
+-
+ dev_dbg(&port->dev, "%s\n", __func__);
+ portdata = usb_get_serial_port_data(port);
+
+ portdata->rts_state = 0;
+ portdata->dtr_state = 0;
+
++ usb_autopm_get_interface(serial->interface);
++
+ if (serial->dev) {
+ mutex_lock(&serial->disc_mutex);
+- if (!serial->disconnected) {
+- serial->interface->needs_remote_wakeup = 0;
+- /* odd error handling due to pm counters */
+- if (!usb_autopm_get_interface(serial->interface))
+- sierra_send_setup(port);
+- else
+- usb_autopm_get_interface_no_resume(serial->interface);
+-
+- }
++ if (!serial->disconnected)
++ sierra_send_setup(port);
+ mutex_unlock(&serial->disc_mutex);
+ spin_lock_irq(&intfdata->susp_lock);
+ portdata->opened = 0;
+ spin_unlock_irq(&intfdata->susp_lock);
+
+-
+ /* Stop reading urbs */
+ sierra_stop_rx_urbs(port);
+ /* .. and release them */
+@@ -834,6 +990,14 @@
+ sierra_release_urb(portdata->in_urbs[i]);
+ portdata->in_urbs[i] = NULL;
+ }
++ while((urb = usb_get_from_anchor(&portdata->delayed))) {
++ sierra_release_urb(urb);
++ usb_autopm_put_interface(serial->interface);
++ }
++ /* wait for active to finish */
++ usb_wait_anchor_empty_timeout(&portdata->active, 500);
++ usb_kill_anchored_urbs(&portdata->active);
++
+ }
+ }
+
+@@ -867,18 +1031,41 @@
+ usb_clear_halt(serial->dev,
+ usb_sndbulkpipe(serial->dev, endpoint) | USB_DIR_IN);
+
++ /* reset outstanding out urbs counter */
++ spin_lock_irq(&portdata->lock);
++ portdata->outstanding_urbs = 0;
++ spin_unlock_irq(&portdata->lock);
++
+ err = sierra_submit_rx_urbs(port, GFP_KERNEL);
+ if (err) {
+- /* get rid of everything as in close */
+- sierra_close(port);
+- /* restore balance for autopm */
+- if (!serial->disconnected)
++ /* do everything as in close() but do not call close() because
++ * usbserial calls sierra_open() with mutex taken;
++ * then if we call sierra_close() inside sierra_open() we
++ * violate 'no nested mutexes' kernel condition
++ */
++ portdata->rts_state = 0;
++ portdata->dtr_state = 0;
++ usb_autopm_get_interface(serial->interface);
++ /* Stop reading urbs */
++ sierra_stop_rx_urbs(port);
++ /* .. and release them */
++ for (i = 0; i < portdata->num_in_urbs; i++) {
++ sierra_release_urb(portdata->in_urbs[i]);
++ portdata->in_urbs[i] = NULL;
++ }
++ while((urb = usb_get_from_anchor(&portdata->delayed))) {
++ sierra_release_urb(urb);
+ usb_autopm_put_interface(serial->interface);
++ }
++ /* wait for active to finish */
++ usb_wait_anchor_empty_timeout(&portdata->active, 500);
++ usb_kill_anchored_urbs(&portdata->active);
++ /* restore balance for autopm */
++ usb_autopm_put_interface(serial->interface);
+ return err;
+ }
+ sierra_send_setup(port);
+
+- serial->interface->needs_remote_wakeup = 1;
+ spin_lock_irq(&intfdata->susp_lock);
+ portdata->opened = 1;
+ spin_unlock_irq(&intfdata->susp_lock);
+@@ -887,7 +1074,6 @@
+ return 0;
+ }
+
+-
+ static void sierra_dtr_rts(struct usb_serial_port *port, int on)
+ {
+ struct usb_serial *serial = port->serial;
+@@ -907,11 +1093,13 @@
+
+ static int sierra_startup(struct usb_serial *serial)
+ {
+- struct usb_serial_port *port;
+- struct sierra_port_private *portdata;
++ struct usb_serial_port *port = NULL;
++ struct sierra_port_private *portdata = NULL;
+ struct sierra_iface_info *himemoryp = NULL;
+ int i;
+ u8 ifnum;
++ u16 fw_attr;
++ int result;
+
+ dev_dbg(&serial->dev->dev, "%s\n", __func__);
+
+@@ -922,19 +1110,30 @@
+ if (nmea)
+ sierra_vsc_set_nmea(serial->dev, 1);
+
+- /* Now setup per port private data */
+- for (i = 0; i < serial->num_ports; i++) {
+- port = serial->port[i];
+- portdata = kzalloc(sizeof(*portdata), GFP_KERNEL);
++ if (serial->num_ports) {
++ /* Note: One big piece of memory is allocated for all ports
++ * private data in one shot. This memory is split into equal
++ * pieces for each port.
++ */
++ portdata = (struct sierra_port_private *)kzalloc
++ (sizeof(*portdata) * serial->num_ports, GFP_KERNEL);
+ if (!portdata) {
+- dev_dbg(&port->dev, "%s: kmalloc for "
+- "sierra_port_private (%d) failed!\n",
+- __func__, i);
++ dev_dbg(&serial->dev->dev, "%s: No memory!\n", __func__);
+ return -ENOMEM;
+ }
++ }
++
++ /* Now setup per port private data */
++ for (i = 0; i < serial->num_ports; i++, portdata++) {
++ port = serial->port[i];
++ /* Initialize selected members of private data because these
++ * may be referred to right away */
+ spin_lock_init(&portdata->lock);
+ init_usb_anchor(&portdata->active);
+ init_usb_anchor(&portdata->delayed);
++
++ portdata->cts_state = 1;
++
+ ifnum = i;
+ /* Assume low memory requirements */
+ portdata->num_out_urbs = N_OUT_URB;
+@@ -959,12 +1158,29 @@
+ portdata->num_in_urbs = N_IN_URB_HM;
+ }
+ }
+- dev_dbg(&serial->dev->dev,
++ dev_dbg(&serial->dev->dev,
+ "Memory usage (urbs) interface #%d, in=%d, out=%d\n",
+ ifnum,portdata->num_in_urbs, portdata->num_out_urbs );
+ /* Set the port private data pointer */
+ usb_set_serial_port_data(port, portdata);
+ }
++ serial->interface->needs_remote_wakeup = 1;
++
++ result = sierra_get_fw_attr(serial->dev, &fw_attr);
++ if (result == sizeof(fw_attr) && (fw_attr & SWI_FW_ATTR_PM_MASK) ) {
++ dev_info(&serial->dev->dev,
++ "APM supported, enabling autosuspend.\n");
++/*******************************************************************************
++ * If you want the default /sys/bus/usb/devices/.../.../power/level to be forced
++ * to auto, the following needs to be compiled in.
++ */
++#ifdef POWER_LEVEL_AUTO
++ /* make power level default be 'auto' */
++ usb_enable_autosuspend(serial->dev);
++#endif
++ } else {
++ usb_disable_autosuspend(serial->dev);
++ }
+
+ return 0;
+ }
+@@ -973,19 +1189,29 @@
+ {
+ int i;
+ struct usb_serial_port *port;
+- struct sierra_port_private *portdata;
++ struct sierra_intf_private *intfdata = serial->private;
+
+ dev_dbg(&serial->dev->dev, "%s\n", __func__);
+
++ if (serial->num_ports > 0) {
++ port = serial->port[0];
++ if (port)
++ /* Note: The entire piece of memory that was allocated
++ * in the startup routine can be released by passing
++ * a pointer to the beginning of the piece.
++ * This address corresponds to the address of the chunk
++ * that was given to port 0.
++ */
++ kfree(usb_get_serial_port_data(port));
++ }
++
+ for (i = 0; i < serial->num_ports; ++i) {
+ port = serial->port[i];
+ if (!port)
+ continue;
+- portdata = usb_get_serial_port_data(port);
+- if (!portdata)
+- continue;
+- kfree(portdata);
++ usb_set_serial_port_data(port, NULL);
+ }
++ kfree(intfdata);
+ }
+
+ #ifdef CONFIG_PM
+@@ -1007,21 +1233,21 @@
+ static int sierra_suspend(struct usb_serial *serial, pm_message_t message)
+ {
+ struct sierra_intf_private *intfdata;
+- int b;
+
+- if (message.event & PM_EVENT_AUTO) {
+- intfdata = serial->private;
+- spin_lock_irq(&intfdata->susp_lock);
+- b = intfdata->in_flight;
++ dev_dbg(&serial->dev->dev, "%s\n", __func__);
++
++ intfdata = serial->private;
++ spin_lock_irq(&intfdata->susp_lock);
+
+- if (b) {
++ if (message.event & PM_EVENT_AUTO) {
++ if (intfdata->in_flight) {
+ spin_unlock_irq(&intfdata->susp_lock);
+ return -EBUSY;
+- } else {
+- intfdata->suspended = 1;
+- spin_unlock_irq(&intfdata->susp_lock);
+ }
+ }
++ intfdata->suspended = 1;
++ spin_unlock_irq(&intfdata->susp_lock);
++
+ stop_read_write_urbs(serial);
+
+ return 0;
+@@ -1035,22 +1261,35 @@
+ struct urb *urb;
+ int ec = 0;
+ int i, err;
++ int len;
++ int failed_submits;
+
++ dev_dbg(&serial->dev->dev, "%s\n", __func__);
++
+ spin_lock_irq(&intfdata->susp_lock);
+ for (i = 0; i < serial->num_ports; i++) {
+ port = serial->port[i];
+ portdata = usb_get_serial_port_data(port);
+-
++ failed_submits = 0;
+ while ((urb = usb_get_from_anchor(&portdata->delayed))) {
+ usb_anchor_urb(urb, &portdata->active);
+ intfdata->in_flight++;
++ len = urb->transfer_buffer_length;
+ err = usb_submit_urb(urb, GFP_ATOMIC);
+ if (err < 0) {
+ intfdata->in_flight--;
+ usb_unanchor_urb(urb);
+- usb_scuttle_anchored_urbs(&portdata->delayed);
+- break;
++ failed_submits++;
++ atomic_inc(&intfdata->stats.delayed_write_err);
++ /* fix pm_usage_cnt */
++ usb_autopm_put_interface_async(
++ port->serial->interface);
++ } else {
++ atomic_inc(&intfdata->stats.delayed_writes);
++ atomic_add(len, &intfdata->stats.tx_bytes);
+ }
++ /* release urb - usb_get_from_anchor increased kref */
++ usb_free_urb(urb);
+ }
+
+ if (portdata->opened) {
+@@ -1058,12 +1297,24 @@
+ if (err)
+ ec++;
+ }
++ if (failed_submits) {
++ /* fix outstanding_urbs counter */
++ spin_lock(&portdata->lock); /* assuming irq disabled */
++ portdata->outstanding_urbs -= failed_submits;
++ spin_unlock(&portdata->lock);
++ /* unblock a writer */
++ usb_serial_port_softint(port);
++ }
+ }
+ intfdata->suspended = 0;
+ spin_unlock_irq(&intfdata->susp_lock);
+
+ return ec ? -EIO : 0;
+ }
++#else
++#define sierra_suspend NULL
++#define sierra_resume NULL
++#endif
+
+ static int sierra_reset_resume(struct usb_interface *intf)
+ {
+@@ -1071,11 +1322,6 @@
+ dev_err(&serial->dev->dev, "%s\n", __func__);
+ return usb_serial_resume(intf);
+ }
+-#else
+-#define sierra_suspend NULL
+-#define sierra_resume NULL
+-#define sierra_reset_resume NULL
+-#endif
+
+ static struct usb_driver sierra_driver = {
+ .name = "sierra",
+@@ -1085,10 +1331,12 @@
+ .resume = usb_serial_resume,
+ .reset_resume = sierra_reset_resume,
+ .id_table = id_table,
+- .no_dynamic_id = 1,
+- .supports_autosuspend = 1,
++
++ .no_dynamic_id = 1,
++ .supports_autosuspend = 1,
+ };
+
++
+ static struct usb_serial_driver sierra_device = {
+ .driver = {
+ .owner = THIS_MODULE,
+@@ -1109,9 +1357,12 @@
+ .tiocmset = sierra_tiocmset,
+ .attach = sierra_startup,
+ .release = sierra_release,
+- .suspend = sierra_suspend,
+- .resume = sierra_resume,
++ .port_probe = sierra_create_sysfs_attrs,
++ .port_remove = sierra_remove_sysfs_attrs,
++ .suspend = sierra_suspend,
++ .resume = sierra_resume,
+ .read_int_callback = sierra_instat_callback,
++
+ };
+
+ /* Functions used by new usb-serial code. */
+@@ -1122,7 +1373,6 @@
+ if (retval)
+ goto failed_device_register;
+
+-
+ retval = usb_register(&sierra_driver);
+ if (retval)
+ goto failed_driver_register;
diff --git a/multitech/recipes/linux/linux-2.6.39.4/linux-2.6.39.4-at91-mci-clock-debug.patch b/multitech/recipes/linux/linux-2.6.39.4/linux-2.6.39.4-at91-mci-clock-debug.patch
new file mode 100644
index 0000000..2554386
--- /dev/null
+++ b/multitech/recipes/linux/linux-2.6.39.4/linux-2.6.39.4-at91-mci-clock-debug.patch
@@ -0,0 +1,14 @@
+Index: linux-2.6.39.4/drivers/mmc/host/at91_mci.c
+===================================================================
+--- linux-2.6.39.4.orig/drivers/mmc/host/at91_mci.c 2012-09-10 14:29:38.217293988 -0500
++++ linux-2.6.39.4/drivers/mmc/host/at91_mci.c 2012-09-10 14:41:35.352414089 -0500
+@@ -724,7 +724,8 @@
+ else
+ clkdiv = (at91_master_clock / ios->clock) / 2;
+
+- pr_debug("clkdiv = %d. mcck = %ld\n", clkdiv,
++ pr_info("MMC: requested clock: %ld\n", ios->clock);
++ pr_info("MMC: clkdiv = %d. mcck = %ld\n", clkdiv,
+ at91_master_clock / (2 * (clkdiv + 1)));
+ }
+ if (ios->bus_width == MMC_BUS_WIDTH_4 && host->board->wire4) {
diff --git a/multitech/recipes/linux/linux-2.6.39.4/linux-2.6.39.4-at91sam9260-reset.patch b/multitech/recipes/linux/linux-2.6.39.4/linux-2.6.39.4-at91sam9260-reset.patch
new file mode 100644
index 0000000..af63d5c
--- /dev/null
+++ b/multitech/recipes/linux/linux-2.6.39.4/linux-2.6.39.4-at91sam9260-reset.patch
@@ -0,0 +1,26 @@
+Index: linux-2.6.39.4/arch/arm/mach-at91/at91sam9260.c
+===================================================================
+--- linux-2.6.39.4.orig/arch/arm/mach-at91/at91sam9260.c 2012-09-17 16:25:08.248303296 -0500
++++ linux-2.6.39.4/arch/arm/mach-at91/at91sam9260.c 2012-09-17 16:25:45.316033835 -0500
+@@ -310,6 +310,11 @@
+ iotable_init(at91sam9xe_sram_desc, ARRAY_SIZE(at91sam9xe_sram_desc));
+ }
+
++static void at91sam9260_reset(void)
++{
++ at91_sys_write(AT91_RSTC_CR, AT91_RSTC_KEY | AT91_RSTC_PROCRST | AT91_RSTC_PERRST);
++}
++
+ void __init at91sam9260_initialize(unsigned long main_clock)
+ {
+ /* Map peripherals */
+@@ -322,7 +327,8 @@
+ else
+ iotable_init(at91sam9260_sram_desc, ARRAY_SIZE(at91sam9260_sram_desc));
+
+- at91_arch_reset = at91sam9_alt_reset;
++ // jjg: use old reset routine, alt reset is not reliable
++ at91_arch_reset = at91sam9260_reset;
+ pm_power_off = at91sam9260_poweroff;
+ at91_extern_irq = (1 << AT91SAM9260_ID_IRQ0) | (1 << AT91SAM9260_ID_IRQ1)
+ | (1 << AT91SAM9260_ID_IRQ2);
diff --git a/multitech/recipes/linux/linux-2.6.39.4/linux-2.6.39.4-mmc-core-maxclock.patch b/multitech/recipes/linux/linux-2.6.39.4/linux-2.6.39.4-mmc-core-maxclock.patch
new file mode 100644
index 0000000..9f8303a
--- /dev/null
+++ b/multitech/recipes/linux/linux-2.6.39.4/linux-2.6.39.4-mmc-core-maxclock.patch
@@ -0,0 +1,28 @@
+Index: linux-2.6.39.4/drivers/mmc/core/core.c
+===================================================================
+--- linux-2.6.39.4.orig/drivers/mmc/core/core.c 2011-08-03 14:43:28.000000000 -0500
++++ linux-2.6.39.4/drivers/mmc/core/core.c 2012-09-12 10:45:57.246686939 -0500
+@@ -46,7 +46,10 @@
+ * So we allow it it to be disabled.
+ */
+ int use_spi_crc = 1;
++/* MTPCIE: default max clock to 13MHz */
++int max_clock = 13000000;
+ module_param(use_spi_crc, bool, 0);
++module_param(max_clock, int, 0);
+
+ /*
+ * We normally treat cards as removed during suspend if they are not
+@@ -628,6 +631,12 @@
+
+ if (ios->clock > 0)
+ mmc_set_ungated(host);
++
++ if (max_clock > 0 && ios->clock > max_clock) {
++ ios->clock = max_clock;
++ printk("mmc: forcing clock to %u\n", ios->clock);
++ }
++
+ host->ops->set_ios(host, ios);
+ }
+
diff --git a/multitech/recipes/linux/linux-2.6.39.4/mt100eocg-pcie-dk/defconfig b/multitech/recipes/linux/linux-2.6.39.4/mt100eocg-pcie-dk/defconfig
new file mode 100644
index 0000000..a3e1956
--- /dev/null
+++ b/multitech/recipes/linux/linux-2.6.39.4/mt100eocg-pcie-dk/defconfig
@@ -0,0 +1,2295 @@
+#
+# Automatically generated make config: don't edit
+# Linux/arm 2.6.39.4 Kernel Configuration
+# Mon Sep 10 13:10:13 2012
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+# CONFIG_ARCH_USES_GETTIMEOFFSET is not set
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_KTIME_SCALAR=y
+CONFIG_HAVE_PROC_CPU=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_NEED_DMA_MAP_STATE=y
+CONFIG_VECTORS_BASE=0xffff0000
+# CONFIG_ARM_PATCH_PHYS_VIRT is not set
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+CONFIG_CONSTRUCTORS=y
+CONFIG_HAVE_IRQ_WORK=y
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_CROSS_COMPILE=""
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_HAVE_KERNEL_GZIP=y
+CONFIG_HAVE_KERNEL_LZMA=y
+CONFIG_HAVE_KERNEL_LZO=y
+CONFIG_KERNEL_GZIP=y
+# CONFIG_KERNEL_LZMA is not set
+# CONFIG_KERNEL_LZO is not set
+# CONFIG_SWAP is not set
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_FHANDLE is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_AUDIT is not set
+CONFIG_HAVE_GENERIC_HARDIRQS=y
+
+#
+# IRQ subsystem
+#
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_HAVE_SPARSE_IRQ=y
+CONFIG_GENERIC_IRQ_SHOW=y
+# CONFIG_SPARSE_IRQ is not set
+
+#
+# RCU Subsystem
+#
+CONFIG_TREE_PREEMPT_RCU=y
+# CONFIG_TINY_RCU is not set
+# CONFIG_TINY_PREEMPT_RCU is not set
+CONFIG_PREEMPT_RCU=y
+# CONFIG_RCU_TRACE is not set
+CONFIG_RCU_FANOUT=32
+# CONFIG_RCU_FANOUT_EXACT is not set
+# CONFIG_TREE_RCU_TRACE is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_CGROUPS=y
+# CONFIG_CGROUP_DEBUG is not set
+# CONFIG_CGROUP_NS is not set
+# CONFIG_CGROUP_FREEZER is not set
+# CONFIG_CGROUP_DEVICE is not set
+# CONFIG_CPUSETS is not set
+# CONFIG_CGROUP_CPUACCT is not set
+# CONFIG_RESOURCE_COUNTERS is not set
+# CONFIG_CGROUP_SCHED is not set
+CONFIG_BLK_CGROUP=y
+# CONFIG_DEBUG_BLK_CGROUP is not set
+CONFIG_NAMESPACES=y
+# CONFIG_UTS_NS is not set
+# CONFIG_IPC_NS is not set
+# CONFIG_USER_NS is not set
+# CONFIG_PID_NS is not set
+# CONFIG_NET_NS is not set
+# CONFIG_SCHED_AUTOGROUP is not set
+# CONFIG_SYSFS_DEPRECATED is not set
+# CONFIG_RELAY is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_RD_GZIP=y
+CONFIG_RD_BZIP2=y
+CONFIG_RD_LZMA=y
+CONFIG_RD_XZ=y
+CONFIG_RD_LZO=y
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_ANON_INODES=y
+# CONFIG_EXPERT is not set
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=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_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_AIO=y
+# CONFIG_EMBEDDED is not set
+CONFIG_HAVE_PERF_EVENTS=y
+CONFIG_PERF_USE_VMALLOC=y
+
+#
+# Kernel Performance Events And Counters
+#
+# CONFIG_PERF_EVENTS is not set
+# CONFIG_PERF_COUNTERS is not set
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_COMPAT_BRK=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_PROFILING is not set
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
+CONFIG_HAVE_CLK=y
+CONFIG_HAVE_DMA_API_DEBUG=y
+
+#
+# GCOV-based kernel profiling
+#
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+# CONFIG_MODULE_FORCE_LOAD is not set
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_BLOCK=y
+CONFIG_LBDAF=y
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
+# CONFIG_BLK_DEV_THROTTLING is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_CFQ_GROUP_IOSCHED is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+CONFIG_DEFAULT_NOOP=y
+CONFIG_DEFAULT_IOSCHED="noop"
+# CONFIG_INLINE_SPIN_TRYLOCK is not set
+# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
+# CONFIG_INLINE_SPIN_LOCK is not set
+# CONFIG_INLINE_SPIN_LOCK_BH is not set
+# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
+# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
+# CONFIG_INLINE_SPIN_UNLOCK is not set
+# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
+# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set
+# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
+# CONFIG_INLINE_READ_TRYLOCK is not set
+# CONFIG_INLINE_READ_LOCK is not set
+# CONFIG_INLINE_READ_LOCK_BH is not set
+# CONFIG_INLINE_READ_LOCK_IRQ is not set
+# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
+# CONFIG_INLINE_READ_UNLOCK is not set
+# CONFIG_INLINE_READ_UNLOCK_BH is not set
+# CONFIG_INLINE_READ_UNLOCK_IRQ is not set
+# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
+# CONFIG_INLINE_WRITE_TRYLOCK is not set
+# CONFIG_INLINE_WRITE_LOCK is not set
+# CONFIG_INLINE_WRITE_LOCK_BH is not set
+# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
+# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
+# CONFIG_INLINE_WRITE_UNLOCK is not set
+# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
+# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set
+# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
+# CONFIG_MUTEX_SPIN_ON_OWNER is not set
+CONFIG_FREEZER=y
+
+#
+# System Type
+#
+CONFIG_MMU=y
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_VEXPRESS is not set
+CONFIG_ARCH_AT91=y
+# CONFIG_ARCH_BCMRING is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_CNS3XXX is not set
+# CONFIG_ARCH_GEMINI is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_MXS is not set
+# CONFIG_ARCH_STMP3XXX is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_DOVE is not set
+# CONFIG_ARCH_KIRKWOOD is not set
+# CONFIG_ARCH_LOKI is not set
+# CONFIG_ARCH_LPC32XX is not set
+# CONFIG_ARCH_MV78XX0 is not set
+# CONFIG_ARCH_ORION5X is not set
+# CONFIG_ARCH_MMP is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_W90X900 is not set
+# CONFIG_ARCH_NUC93X is not set
+# CONFIG_ARCH_TEGRA is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_MSM is not set
+# CONFIG_ARCH_SHMOBILE is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_S3C64XX is not set
+# CONFIG_ARCH_S5P64X0 is not set
+# CONFIG_ARCH_S5P6442 is not set
+# CONFIG_ARCH_S5PC100 is not set
+# CONFIG_ARCH_S5PV210 is not set
+# CONFIG_ARCH_EXYNOS4 is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_TCC_926 is not set
+# CONFIG_ARCH_U300 is not set
+# CONFIG_ARCH_U8500 is not set
+# CONFIG_ARCH_NOMADIK is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_PLAT_SPEAR is not set
+# CONFIG_ARCH_VT8500 is not set
+CONFIG_HAVE_AT91_DATAFLASH_CARD=y
+CONFIG_HAVE_NAND_ATMEL_BUSWIDTH_16=y
+CONFIG_HAVE_AT91_USART3=y
+CONFIG_HAVE_AT91_USART4=y
+CONFIG_HAVE_AT91_USART5=y
+
+#
+# Atmel AT91 System-on-Chip
+#
+# CONFIG_ARCH_AT91RM9200 is not set
+# CONFIG_ARCH_AT91SAM9260 is not set
+# CONFIG_ARCH_AT91SAM9261 is not set
+# CONFIG_ARCH_AT91SAM9G10 is not set
+# CONFIG_ARCH_AT91SAM9263 is not set
+# CONFIG_ARCH_AT91SAM9RL is not set
+CONFIG_ARCH_AT91SAM9G20=y
+# CONFIG_ARCH_AT91SAM9G45 is not set
+# CONFIG_ARCH_AT91CAP9 is not set
+# CONFIG_ARCH_AT572D940HF is not set
+# CONFIG_ARCH_AT91X40 is not set
+CONFIG_AT91_PMC_UNIT=y
+
+#
+# AT91SAM9G20 Board Type
+#
+CONFIG_MACH_AT91SAM9G20EK=y
+# CONFIG_MACH_AT91SAM9G20EK_2MMC is not set
+# CONFIG_MACH_CPU9G20 is not set
+# CONFIG_MACH_ACMENETUSFOXG20 is not set
+# CONFIG_MACH_PORTUXG20 is not set
+# CONFIG_MACH_STAMP9G20 is not set
+# CONFIG_MACH_PCONTROL_G20 is not set
+# CONFIG_MACH_GSIA18S is not set
+
+#
+# AT91SAM9260/AT91SAM9G20 boards
+#
+# CONFIG_MACH_SNAPPER_9260 is not set
+
+#
+# AT91 Board Options
+#
+CONFIG_MTD_AT91_DATAFLASH_CARD=y
+# CONFIG_MTD_NAND_ATMEL_BUSWIDTH_16 is not set
+
+#
+# AT91 Feature Selections
+#
+CONFIG_AT91_PROGRAMMABLE_CLOCKS=y
+CONFIG_AT91_SLOW_CLOCK=y
+CONFIG_AT91_TIMER_HZ=100
+CONFIG_AT91_EARLY_DBGU=y
+# CONFIG_AT91_EARLY_USART0 is not set
+# CONFIG_AT91_EARLY_USART1 is not set
+# CONFIG_AT91_EARLY_USART2 is not set
+# CONFIG_AT91_EARLY_USART3 is not set
+# CONFIG_AT91_EARLY_USART4 is not set
+# CONFIG_AT91_EARLY_USART5 is not set
+# CONFIG_GPIO_PCA953X is not set
+
+#
+# System MMU
+#
+
+#
+# Processor Type
+#
+CONFIG_CPU_ARM926T=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5TJ=y
+CONFIG_CPU_PABRT_LEGACY=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_COPY_V4WB=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+CONFIG_CPU_USE_DOMAINS=y
+
+#
+# Processor Features
+#
+# CONFIG_ARM_THUMB is not set
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
+# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
+CONFIG_ARM_L1_CACHE_SHIFT=5
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_TICK_ONESHOT=y
+# CONFIG_NO_HZ is not set
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_VMSPLIT_3G=y
+# CONFIG_VMSPLIT_2G is not set
+# CONFIG_VMSPLIT_1G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+# CONFIG_PREEMPT_NONE is not set
+# CONFIG_PREEMPT_VOLUNTARY is not set
+CONFIG_PREEMPT=y
+CONFIG_HZ=100
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
+# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
+# CONFIG_HIGHMEM is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_HAVE_MEMBLOCK=y
+CONFIG_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=999999
+# CONFIG_COMPACTION is not set
+# CONFIG_PHYS_ADDR_T_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=0
+CONFIG_VIRT_TO_BUS=y
+# CONFIG_KSM is not set
+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
+CONFIG_NEED_PER_CPU_KM=y
+CONFIG_FORCE_MAX_ZONEORDER=11
+# CONFIG_LEDS is not set
+CONFIG_ALIGNMENT_TRAP=y
+# CONFIG_UACCESS_WITH_MEMCPY is not set
+# CONFIG_SECCOMP is not set
+# CONFIG_CC_STACKPROTECTOR is not set
+# CONFIG_DEPRECATED_PARAM_STRUCT is not set
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE=" quiet "
+# CONFIG_CMDLINE_FORCE is not set
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+# CONFIG_CRASH_DUMP is not set
+# CONFIG_AUTO_ZRELADDR is not set
+
+#
+# CPU Power Management
+#
+# CONFIG_CPU_IDLE is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+# CONFIG_VFP is not set
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+CONFIG_HAVE_AOUT=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_SUSPEND=y
+CONFIG_SUSPEND_FREEZER=y
+CONFIG_PM_SLEEP=y
+# CONFIG_PM_RUNTIME is not set
+CONFIG_PM=y
+# CONFIG_PM_DEBUG is not set
+# CONFIG_APM_EMULATION is not set
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+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_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+CONFIG_IP_PNP_RARP=y
+CONFIG_NET_IPIP=y
+CONFIG_NET_IPGRE_DEMUX=y
+CONFIG_NET_IPGRE=y
+# 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=y
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_LRO is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+# CONFIG_DEFAULT_CUBIC is not set
+# CONFIG_DEFAULT_RENO is not set
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETWORK_PHY_TIMESTAMPING is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_NETFILTER_ADVANCED=y
+
+#
+# Core Netfilter Configuration
+#
+CONFIG_NETFILTER_NETLINK=y
+CONFIG_NETFILTER_NETLINK_QUEUE=y
+CONFIG_NETFILTER_NETLINK_LOG=y
+CONFIG_NF_CONNTRACK=y
+CONFIG_NF_CONNTRACK_MARK=y
+CONFIG_NF_CONNTRACK_EVENTS=y
+# CONFIG_NF_CONNTRACK_TIMESTAMP is not set
+# CONFIG_NF_CT_PROTO_DCCP is not set
+# CONFIG_NF_CT_PROTO_SCTP is not set
+# CONFIG_NF_CT_PROTO_UDPLITE is not set
+# CONFIG_NF_CONNTRACK_AMANDA is not set
+CONFIG_NF_CONNTRACK_FTP=y
+CONFIG_NF_CONNTRACK_H323=y
+# CONFIG_NF_CONNTRACK_IRC is not set
+# CONFIG_NF_CONNTRACK_NETBIOS_NS is not set
+# CONFIG_NF_CONNTRACK_SNMP is not set
+# CONFIG_NF_CONNTRACK_PPTP is not set
+# CONFIG_NF_CONNTRACK_SANE is not set
+# CONFIG_NF_CONNTRACK_SIP is not set
+# CONFIG_NF_CONNTRACK_TFTP is not set
+# CONFIG_NF_CT_NETLINK is not set
+# CONFIG_NETFILTER_TPROXY is not set
+CONFIG_NETFILTER_XTABLES=y
+
+#
+# Xtables combined modules
+#
+CONFIG_NETFILTER_XT_MARK=y
+CONFIG_NETFILTER_XT_CONNMARK=y
+
+#
+# Xtables targets
+#
+# CONFIG_NETFILTER_XT_TARGET_CHECKSUM is not set
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y
+# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set
+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+# CONFIG_NETFILTER_XT_TARGET_HL is not set
+# CONFIG_NETFILTER_XT_TARGET_IDLETIMER is not set
+# CONFIG_NETFILTER_XT_TARGET_LED is not set
+CONFIG_NETFILTER_XT_TARGET_MARK=y
+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=y
+# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set
+# CONFIG_NETFILTER_XT_TARGET_TEE is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set
+
+#
+# Xtables matches
+#
+# CONFIG_NETFILTER_XT_MATCH_ADDRTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set
+# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
+# CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set
+# CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=y
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
+# CONFIG_NETFILTER_XT_MATCH_CPU is not set
+# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
+# CONFIG_NETFILTER_XT_MATCH_DEVGROUP is not set
+# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
+# CONFIG_NETFILTER_XT_MATCH_ESP is not set
+# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
+# CONFIG_NETFILTER_XT_MATCH_HELPER is not set
+CONFIG_NETFILTER_XT_MATCH_HL=y
+# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set
+# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set
+# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set
+# CONFIG_NETFILTER_XT_MATCH_MAC is not set
+# CONFIG_NETFILTER_XT_MATCH_MARK is not set
+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
+# CONFIG_NETFILTER_XT_MATCH_OSF is not set
+# CONFIG_NETFILTER_XT_MATCH_OWNER is not set
+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
+# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set
+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
+# CONFIG_NETFILTER_XT_MATCH_RECENT is not set
+# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
+CONFIG_NETFILTER_XT_MATCH_STATE=y
+# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
+# CONFIG_NETFILTER_XT_MATCH_STRING is not set
+# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set
+# CONFIG_NETFILTER_XT_MATCH_TIME is not set
+# CONFIG_NETFILTER_XT_MATCH_U32 is not set
+# CONFIG_IP_SET is not set
+# CONFIG_IP_VS is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_NF_DEFRAG_IPV4=y
+CONFIG_NF_CONNTRACK_IPV4=y
+CONFIG_NF_CONNTRACK_PROC_COMPAT=y
+# CONFIG_IP_NF_QUEUE is not set
+CONFIG_IP_NF_IPTABLES=y
+# CONFIG_IP_NF_MATCH_AH is not set
+CONFIG_IP_NF_MATCH_ECN=y
+CONFIG_IP_NF_MATCH_TTL=y
+CONFIG_IP_NF_FILTER=y
+CONFIG_IP_NF_TARGET_REJECT=y
+CONFIG_IP_NF_TARGET_LOG=y
+# CONFIG_IP_NF_TARGET_ULOG is not set
+CONFIG_NF_NAT=y
+CONFIG_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=y
+CONFIG_IP_NF_TARGET_NETMAP=y
+CONFIG_IP_NF_TARGET_REDIRECT=y
+CONFIG_NF_NAT_FTP=y
+# CONFIG_NF_NAT_IRC is not set
+# CONFIG_NF_NAT_TFTP is not set
+# CONFIG_NF_NAT_AMANDA is not set
+# CONFIG_NF_NAT_PPTP is not set
+CONFIG_NF_NAT_H323=y
+# CONFIG_NF_NAT_SIP is not set
+CONFIG_IP_NF_MANGLE=y
+# CONFIG_IP_NF_TARGET_CLUSTERIP is not set
+# CONFIG_IP_NF_TARGET_ECN is not set
+# CONFIG_IP_NF_TARGET_TTL is not set
+# CONFIG_IP_NF_RAW is not set
+# CONFIG_IP_NF_ARPTABLES is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_SCTP_HMAC_NONE is not set
+# CONFIG_SCTP_HMAC_SHA1 is not set
+# CONFIG_SCTP_HMAC_MD5 is not set
+# CONFIG_RDS is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_L2TP is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_NET_DSA 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_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_PHONET is not set
+# CONFIG_IEEE802154 is not set
+# CONFIG_NET_SCHED is not set
+# CONFIG_DCB is not set
+# CONFIG_BATMAN_ADV is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+# CONFIG_IRDA is not set
+CONFIG_BT=m
+CONFIG_BT_L2CAP=y
+CONFIG_BT_SCO=y
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+# CONFIG_BT_BNEP_MC_FILTER is not set
+# CONFIG_BT_BNEP_PROTO_FILTER is not set
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+# CONFIG_BT_HCIBTUSB is not set
+# CONFIG_BT_HCIBTSDIO is not set
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+# CONFIG_BT_HCIUART_BCSP is not set
+# CONFIG_BT_HCIUART_ATH3K is not set
+CONFIG_BT_HCIUART_LL=y
+# CONFIG_BT_HCIBCM203X is not set
+# CONFIG_BT_HCIBPA10X is not set
+# CONFIG_BT_HCIBFUSB is not set
+# CONFIG_BT_HCIVHCI is not set
+# CONFIG_BT_MRVL is not set
+# CONFIG_AF_RXRPC is not set
+CONFIG_WIRELESS=y
+CONFIG_WIRELESS_EXT=y
+CONFIG_WEXT_CORE=y
+CONFIG_WEXT_PROC=y
+CONFIG_WEXT_SPY=y
+CONFIG_WEXT_PRIV=y
+CONFIG_CFG80211=m
+CONFIG_NL80211_TESTMODE=y
+CONFIG_CFG80211_DEVELOPER_WARNINGS=y
+CONFIG_CFG80211_REG_DEBUG=y
+# CONFIG_CFG80211_DEFAULT_PS is not set
+# CONFIG_CFG80211_INTERNAL_REGDB is not set
+CONFIG_CFG80211_WEXT=y
+CONFIG_WIRELESS_EXT_SYSFS=y
+CONFIG_LIB80211=m
+# CONFIG_LIB80211_DEBUG is not set
+CONFIG_MAC80211=m
+CONFIG_MAC80211_HAS_RC=y
+CONFIG_MAC80211_RC_MINSTREL=y
+CONFIG_MAC80211_RC_MINSTREL_HT=y
+CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
+CONFIG_MAC80211_RC_DEFAULT="minstrel_ht"
+# CONFIG_MAC80211_MESH is not set
+CONFIG_MAC80211_LEDS=y
+# CONFIG_MAC80211_DEBUG_MENU is not set
+# CONFIG_WIMAX is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+# CONFIG_CAIF is not set
+# CONFIG_CEPH_LIB is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+# CONFIG_DEVTMPFS is not set
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_TESTS is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+# CONFIG_MTD_AR7_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+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
+# CONFIG_SSFDC is not set
+# CONFIG_SM_FTL is not set
+# CONFIG_MTD_OOPS 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
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+CONFIG_MTD_DATAFLASH=y
+# CONFIG_MTD_DATAFLASH_WRITE_VERIFY is not set
+# CONFIG_MTD_DATAFLASH_OTP is not set
+CONFIG_MTD_M25P80=y
+# CONFIG_M25PXX_USE_FAST_READ is not set
+# CONFIG_MTD_SST25L is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+CONFIG_MTD_NAND_ECC=y
+# CONFIG_MTD_NAND_ECC_SMC is not set
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_BCH is not set
+# CONFIG_MTD_SM_COMMON is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+# CONFIG_MTD_NAND_GPIO is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+CONFIG_MTD_NAND_ATMEL=y
+CONFIG_MTD_NAND_ATMEL_ECC_SOFT=y
+# CONFIG_MTD_NAND_ATMEL_ECC_NONE is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ALAUDA is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# LPDDR flash memory drivers
+#
+# CONFIG_MTD_LPDDR is not set
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+
+#
+# DRBD disabled because PROC_FS, INET or CONNECTOR not selected
+#
+# CONFIG_BLK_DEV_NBD 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=32768
+# CONFIG_BLK_DEV_XIP is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+# CONFIG_MG_DISK is not set
+# CONFIG_BLK_DEV_RBD is not set
+# CONFIG_SENSORS_LIS3LV02D is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_AD525X_DPOT is not set
+CONFIG_ATMEL_TCLIB=y
+CONFIG_ATMEL_TCB_CLKSRC=y
+CONFIG_ATMEL_TCB_CLKSRC_BLOCK=0
+# CONFIG_ICS932S401 is not set
+CONFIG_ATMEL_SSC=y
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_APDS9802ALS is not set
+# CONFIG_ISL29003 is not set
+# CONFIG_ISL29020 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_SENSORS_BH1780 is not set
+# CONFIG_SENSORS_BH1770 is not set
+# CONFIG_SENSORS_APDS990X is not set
+# CONFIG_HMC6352 is not set
+# CONFIG_DS1682 is not set
+# CONFIG_TI_DAC7512 is not set
+# CONFIG_BMP085 is not set
+# CONFIG_C2PORT is not set
+
+#
+# EEPROM support
+#
+CONFIG_EEPROM_AT24=y
+CONFIG_EEPROM_AT25=y
+# CONFIG_EEPROM_LEGACY is not set
+# CONFIG_EEPROM_MAX6875 is not set
+CONFIG_EEPROM_93CX6=m
+# CONFIG_IWMC3200TOP is not set
+
+#
+# Texas Instruments shared transport line discipline
+#
+# CONFIG_SENSORS_LIS3_SPI is not set
+# CONFIG_SENSORS_LIS3_I2C is not set
+CONFIG_HAVE_IDE=y
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+CONFIG_SCSI_MOD=y
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# 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
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_ISCSI_BOOT_SYSFS is not set
+# CONFIG_LIBFC is not set
+# CONFIG_LIBFCOE is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_DH is not set
+# CONFIG_SCSI_OSD_INITIATOR is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+# CONFIG_TARGET_CORE is not set
+CONFIG_HAVE_NET_MACB=y
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_VETH is not set
+CONFIG_MII=y
+CONFIG_PHYLIB=y
+
+#
+# MII PHY device drivers
+#
+# CONFIG_MARVELL_PHY is not set
+# CONFIG_DAVICOM_PHY is not set
+# CONFIG_QSEMI_PHY is not set
+# CONFIG_LXT_PHY is not set
+# CONFIG_CICADA_PHY is not set
+# CONFIG_VITESSE_PHY is not set
+# CONFIG_SMSC_PHY is not set
+# CONFIG_BROADCOM_PHY is not set
+# CONFIG_BCM63XX_PHY is not set
+# CONFIG_ICPLUS_PHY is not set
+# CONFIG_REALTEK_PHY is not set
+# CONFIG_NATIONAL_PHY is not set
+# CONFIG_STE10XP is not set
+# CONFIG_LSI_ET1011C_PHY is not set
+# CONFIG_MICREL_PHY is not set
+# CONFIG_FIXED_PHY is not set
+# CONFIG_MDIO_BITBANG is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MACB=y
+# CONFIG_AX88796 is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_ENC28J60 is not set
+# CONFIG_ETHOC is not set
+# CONFIG_SMC911X is not set
+# CONFIG_SMSC911X is not set
+# CONFIG_DNET is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
+# CONFIG_B44 is not set
+# CONFIG_KS8851 is not set
+# CONFIG_KS8851_MLL is not set
+# CONFIG_FTMAC100 is not set
+CONFIG_NETDEV_1000=y
+# CONFIG_STMMAC_ETH is not set
+CONFIG_NETDEV_10000=y
+CONFIG_WLAN=y
+CONFIG_LIBERTAS_THINFIRM=m
+# CONFIG_LIBERTAS_THINFIRM_DEBUG is not set
+CONFIG_LIBERTAS_THINFIRM_USB=m
+CONFIG_AT76C50X_USB=m
+CONFIG_USB_ZD1201=m
+CONFIG_USB_NET_RNDIS_WLAN=m
+CONFIG_RTL8187=m
+CONFIG_RTL8187_LEDS=y
+# CONFIG_MAC80211_HWSIM is not set
+CONFIG_ATH_COMMON=m
+# CONFIG_ATH_DEBUG is not set
+CONFIG_ATH9K_HW=m
+CONFIG_ATH9K_COMMON=m
+CONFIG_ATH9K_HTC=m
+CONFIG_AR9170_USB=m
+CONFIG_AR9170_LEDS=y
+# CONFIG_CARL9170 is not set
+# CONFIG_B43 is not set
+# CONFIG_B43LEGACY is not set
+# CONFIG_B43LEGACY_DMA_AND_PIO_MODE is not set
+# CONFIG_B43LEGACY_DMA_MODE is not set
+# CONFIG_B43LEGACY_PIO_MODE is not set
+# CONFIG_HOSTAP is not set
+# CONFIG_IWM is not set
+CONFIG_LIBERTAS=m
+CONFIG_LIBERTAS_USB=m
+# CONFIG_LIBERTAS_SDIO is not set
+# CONFIG_LIBERTAS_SPI is not set
+# CONFIG_LIBERTAS_DEBUG is not set
+# CONFIG_LIBERTAS_MESH is not set
+CONFIG_P54_COMMON=m
+CONFIG_P54_USB=m
+# CONFIG_P54_SPI is not set
+CONFIG_P54_LEDS=y
+CONFIG_RT2X00=m
+CONFIG_RT2500USB=m
+CONFIG_RT73USB=m
+CONFIG_RT2800USB=m
+# CONFIG_RT2800USB_RT33XX is not set
+# CONFIG_RT2800USB_RT35XX is not set
+# CONFIG_RT2800USB_UNKNOWN is not set
+CONFIG_RT2800_LIB=m
+CONFIG_RT2X00_LIB_USB=m
+CONFIG_RT2X00_LIB=m
+CONFIG_RT2X00_LIB_HT=y
+CONFIG_RT2X00_LIB_FIRMWARE=y
+CONFIG_RT2X00_LIB_CRYPTO=y
+CONFIG_RT2X00_LIB_LEDS=y
+# CONFIG_RT2X00_DEBUG is not set
+# CONFIG_RTL8192CU is not set
+# CONFIG_WL1251 is not set
+CONFIG_WL12XX_MENU=m
+CONFIG_WL12XX=m
+# CONFIG_WL12XX_HT is not set
+# CONFIG_WL12XX_SPI is not set
+CONFIG_WL12XX_SDIO=m
+# CONFIG_WL12XX_SDIO_TEST is not set
+CONFIG_WL12XX_PLATFORM_DATA=y
+CONFIG_ZD1211RW=m
+# CONFIG_ZD1211RW_DEBUG is not set
+
+#
+# Enable WiMAX (Networking options) to see the WiMAX drivers
+#
+
+#
+# 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=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+# CONFIG_USB_NET_CDC_EEM is not set
+CONFIG_USB_NET_CDC_NCM=m
+CONFIG_USB_NET_DM9601=m
+CONFIG_USB_NET_SMSC75XX=m
+CONFIG_USB_NET_SMSC95XX=m
+# CONFIG_USB_NET_GL620A is not set
+CONFIG_USB_NET_NET1080=m
+# CONFIG_USB_NET_PLUSB is not set
+# CONFIG_USB_NET_MCS7830 is not set
+CONFIG_USB_NET_RNDIS_HOST=m
+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_KC2190 is not set
+CONFIG_USB_NET_ZAURUS=m
+# CONFIG_USB_NET_CX82310_ETH is not set
+# CONFIG_USB_NET_INT51X1 is not set
+# CONFIG_USB_IPHETH is not set
+CONFIG_USB_SIERRA_NET=m
+# CONFIG_USB_VL600 is not set
+# CONFIG_WAN is not set
+
+#
+# CAIF transport drivers
+#
+CONFIG_PPP=y
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=y
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=y
+CONFIG_PPP_BSDCOMP=y
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPPOE is not set
+# CONFIG_PPTP is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=y
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+# CONFIG_INPUT_SPARSEKMAP is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# 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_TABLET 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_CONSOLE_TRANSLATIONS=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+CONFIG_UNIX98_PTYS=y
+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+# CONFIG_N_GSM is not set
+CONFIG_DEVKMEM=y
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_ATMEL=y
+CONFIG_SERIAL_ATMEL_CONSOLE=y
+CONFIG_SERIAL_ATMEL_PDC=y
+# CONFIG_SERIAL_ATMEL_TTYAT is not set
+# CONFIG_SERIAL_MAX3100 is not set
+# CONFIG_SERIAL_MAX3107 is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_TIMBERDALE is not set
+# CONFIG_SERIAL_ALTERA_JTAGUART is not set
+# CONFIG_SERIAL_ALTERA_UART is not set
+# CONFIG_SERIAL_IFX6X60 is not set
+# CONFIG_HVC_DCC is not set
+# CONFIG_IPMI_HANDLER is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+# CONFIG_RAMOOPS is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_COMPAT=y
+CONFIG_I2C_CHARDEV=y
+# CONFIG_I2C_MUX is not set
+CONFIG_I2C_HELPER_AUTO=y
+CONFIG_I2C_ALGOBIT=y
+
+#
+# I2C Hardware Bus support
+#
+
+#
+# I2C system bus drivers (mostly embedded / system-on-chip)
+#
+# CONFIG_I2C_DESIGNWARE is not set
+CONFIG_I2C_GPIO=y
+# CONFIG_I2C_OCORES is not set
+# CONFIG_I2C_PCA_PLATFORM is not set
+# CONFIG_I2C_PXA_PCI is not set
+# CONFIG_I2C_SIMTEC is not set
+# CONFIG_I2C_XILINX is not set
+
+#
+# External I2C/SMBus adapter drivers
+#
+# CONFIG_I2C_DIOLAN_U2C is not set
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Other I2C/SMBus bus drivers
+#
+# CONFIG_I2C_STUB 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_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_ALTERA is not set
+CONFIG_SPI_ATMEL=y
+# CONFIG_SPI_BITBANG is not set
+# CONFIG_SPI_GPIO is not set
+# CONFIG_SPI_OC_TINY is not set
+# CONFIG_SPI_PXA2XX_PCI is not set
+# CONFIG_SPI_XILINX is not set
+# CONFIG_SPI_DESIGNWARE is not set
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+
+#
+# PPS support
+#
+# CONFIG_PPS is not set
+
+#
+# PPS generators support
+#
+CONFIG_ARCH_REQUIRE_GPIOLIB=y
+CONFIG_GPIOLIB=y
+# CONFIG_DEBUG_GPIO is not set
+# CONFIG_GPIO_SYSFS is not set
+
+#
+# Memory mapped GPIO expanders:
+#
+# CONFIG_GPIO_BASIC_MMIO is not set
+# CONFIG_GPIO_IT8761E is not set
+
+#
+# I2C GPIO expanders:
+#
+# CONFIG_GPIO_MAX7300 is not set
+# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_PCF857X is not set
+# CONFIG_GPIO_SX150X is not set
+# CONFIG_GPIO_ADP5588 is not set
+
+#
+# PCI GPIO expanders:
+#
+
+#
+# SPI GPIO expanders:
+#
+# CONFIG_GPIO_MAX7301 is not set
+# CONFIG_GPIO_MCP23S08 is not set
+# CONFIG_GPIO_MC33880 is not set
+# CONFIG_GPIO_74X164 is not set
+
+#
+# AC97 GPIO expanders:
+#
+
+#
+# MODULbus GPIO expanders:
+#
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+# CONFIG_HWMON is not set
+# CONFIG_THERMAL is not set
+CONFIG_WATCHDOG=y
+CONFIG_WATCHDOG_NOWAYOUT=y
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_AT91SAM9X_WATCHDOG=y
+# CONFIG_MAX63XX_WATCHDOG is not set
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
+
+#
+# Sonics Silicon Backplane
+#
+# CONFIG_SSB is not set
+CONFIG_MFD_SUPPORT=y
+# CONFIG_MFD_CORE is not set
+# CONFIG_MFD_88PM860X is not set
+# CONFIG_MFD_SM501 is not set
+# CONFIG_MFD_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_HTC_I2CPLD is not set
+# CONFIG_TPS6105X is not set
+# CONFIG_TPS65010 is not set
+# CONFIG_TPS6507X is not set
+# CONFIG_TWL4030_CORE is not set
+# CONFIG_MFD_STMPE is not set
+# CONFIG_MFD_TC3589X is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_MFD_T7L66XB is not set
+# CONFIG_MFD_TC6387XB is not set
+# CONFIG_MFD_TC6393XB is not set
+# CONFIG_PMIC_DA903X is not set
+# CONFIG_PMIC_ADP5520 is not set
+# CONFIG_MFD_MAX8925 is not set
+# CONFIG_MFD_MAX8997 is not set
+# CONFIG_MFD_MAX8998 is not set
+# CONFIG_MFD_WM8400 is not set
+# CONFIG_MFD_WM831X_I2C is not set
+# CONFIG_MFD_WM831X_SPI is not set
+# CONFIG_MFD_WM8350_I2C is not set
+# CONFIG_MFD_WM8994 is not set
+# CONFIG_MFD_PCF50633 is not set
+# CONFIG_MFD_MC13XXX is not set
+# CONFIG_ABX500_CORE is not set
+# CONFIG_EZX_PCAP is not set
+# CONFIG_MFD_TPS6586X is not set
+# CONFIG_MFD_WL1273_CORE is not set
+# CONFIG_REGULATOR is not set
+CONFIG_MEDIA_SUPPORT=y
+
+#
+# Multimedia core support
+#
+# CONFIG_MEDIA_CONTROLLER is not set
+CONFIG_VIDEO_DEV=m
+CONFIG_VIDEO_V4L2_COMMON=m
+# CONFIG_DVB_CORE is not set
+CONFIG_VIDEO_MEDIA=m
+
+#
+# Multimedia drivers
+#
+CONFIG_RC_CORE=y
+CONFIG_LIRC=y
+# CONFIG_RC_MAP is not set
+# CONFIG_IR_NEC_DECODER is not set
+# CONFIG_IR_RC5_DECODER is not set
+# CONFIG_IR_RC6_DECODER is not set
+# CONFIG_IR_JVC_DECODER is not set
+# CONFIG_IR_SONY_DECODER is not set
+CONFIG_IR_RC5_SZ_DECODER=y
+CONFIG_IR_LIRC_CODEC=y
+# CONFIG_IR_IMON is not set
+# CONFIG_IR_MCEUSB is not set
+# CONFIG_IR_STREAMZAP is not set
+# CONFIG_RC_LOOPBACK is not set
+# CONFIG_MEDIA_ATTACH is not set
+CONFIG_MEDIA_TUNER=m
+# CONFIG_MEDIA_TUNER_CUSTOMISE is not set
+CONFIG_MEDIA_TUNER_SIMPLE=m
+CONFIG_MEDIA_TUNER_TDA8290=m
+CONFIG_MEDIA_TUNER_TDA827X=m
+CONFIG_MEDIA_TUNER_TDA18271=m
+CONFIG_MEDIA_TUNER_TDA9887=m
+CONFIG_MEDIA_TUNER_TEA5761=m
+CONFIG_MEDIA_TUNER_TEA5767=m
+CONFIG_MEDIA_TUNER_MT20XX=m
+CONFIG_MEDIA_TUNER_XC2028=m
+CONFIG_MEDIA_TUNER_XC5000=m
+CONFIG_MEDIA_TUNER_MC44S803=m
+CONFIG_VIDEO_V4L2=m
+CONFIG_VIDEOBUF_GEN=m
+CONFIG_VIDEOBUF_VMALLOC=m
+CONFIG_VIDEO_TVEEPROM=m
+CONFIG_VIDEO_TUNER=m
+CONFIG_VIDEO_CAPTURE_DRIVERS=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
+CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+CONFIG_VIDEO_IR_I2C=m
+
+#
+# Audio decoders
+#
+CONFIG_VIDEO_MSP3400=m
+CONFIG_VIDEO_CS53L32A=m
+CONFIG_VIDEO_WM8775=m
+
+#
+# RDS decoders
+#
+
+#
+# Video decoders
+#
+CONFIG_VIDEO_MT9V011=m
+CONFIG_VIDEO_SAA711X=m
+CONFIG_VIDEO_TVP5150=m
+
+#
+# Video and audio decoders
+#
+CONFIG_VIDEO_CX25840=m
+
+#
+# MPEG video encoders
+#
+CONFIG_VIDEO_CX2341X=m
+
+#
+# Video encoders
+#
+
+#
+# Video improvement chips
+#
+# CONFIG_VIDEO_CPIA2 is not set
+# CONFIG_VIDEO_TIMBERDALE is not set
+# CONFIG_VIDEO_SR030PC30 is not set
+# CONFIG_VIDEO_NOON010PC30 is not set
+# CONFIG_SOC_CAMERA is not set
+CONFIG_V4L_USB_DRIVERS=y
+CONFIG_USB_VIDEO_CLASS=m
+CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
+CONFIG_USB_GSPCA=m
+CONFIG_USB_M5602=m
+CONFIG_USB_STV06XX=m
+CONFIG_USB_GL860=m
+CONFIG_USB_GSPCA_BENQ=m
+CONFIG_USB_GSPCA_CONEX=m
+CONFIG_USB_GSPCA_CPIA1=m
+CONFIG_USB_GSPCA_ETOMS=m
+CONFIG_USB_GSPCA_FINEPIX=m
+CONFIG_USB_GSPCA_JEILINJ=m
+# CONFIG_USB_GSPCA_KONICA is not set
+CONFIG_USB_GSPCA_MARS=m
+CONFIG_USB_GSPCA_MR97310A=m
+# CONFIG_USB_GSPCA_NW80X is not set
+CONFIG_USB_GSPCA_OV519=m
+CONFIG_USB_GSPCA_OV534=m
+CONFIG_USB_GSPCA_OV534_9=m
+CONFIG_USB_GSPCA_PAC207=m
+CONFIG_USB_GSPCA_PAC7302=m
+CONFIG_USB_GSPCA_PAC7311=m
+CONFIG_USB_GSPCA_SN9C2028=m
+CONFIG_USB_GSPCA_SN9C20X=m
+CONFIG_USB_GSPCA_SONIXB=m
+CONFIG_USB_GSPCA_SONIXJ=m
+CONFIG_USB_GSPCA_SPCA500=m
+CONFIG_USB_GSPCA_SPCA501=m
+CONFIG_USB_GSPCA_SPCA505=m
+CONFIG_USB_GSPCA_SPCA506=m
+CONFIG_USB_GSPCA_SPCA508=m
+CONFIG_USB_GSPCA_SPCA561=m
+# CONFIG_USB_GSPCA_SPCA1528 is not set
+CONFIG_USB_GSPCA_SQ905=m
+CONFIG_USB_GSPCA_SQ905C=m
+# CONFIG_USB_GSPCA_SQ930X is not set
+CONFIG_USB_GSPCA_STK014=m
+CONFIG_USB_GSPCA_STV0680=m
+CONFIG_USB_GSPCA_SUNPLUS=m
+CONFIG_USB_GSPCA_T613=m
+CONFIG_USB_GSPCA_TV8532=m
+CONFIG_USB_GSPCA_VC032X=m
+# CONFIG_USB_GSPCA_VICAM is not set
+# CONFIG_USB_GSPCA_XIRLINK_CIT is not set
+CONFIG_USB_GSPCA_ZC3XX=m
+CONFIG_VIDEO_PVRUSB2=m
+CONFIG_VIDEO_PVRUSB2_SYSFS=y
+# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
+CONFIG_VIDEO_HDPVR=m
+CONFIG_VIDEO_EM28XX=m
+CONFIG_VIDEO_CX231XX=m
+CONFIG_VIDEO_CX231XX_RC=y
+CONFIG_VIDEO_USBVISION=m
+# CONFIG_USB_ET61X251 is not set
+# CONFIG_USB_SN9C102 is not set
+CONFIG_USB_PWC=m
+# CONFIG_USB_PWC_DEBUG is not set
+CONFIG_USB_PWC_INPUT_EVDEV=y
+CONFIG_USB_ZR364XX=m
+CONFIG_USB_STKWEBCAM=m
+CONFIG_USB_S2255=m
+# CONFIG_V4L_MEM2MEM_DRIVERS is not set
+# CONFIG_RADIO_ADAPTERS is not set
+
+#
+# Graphics support
+#
+# CONFIG_DRM is not set
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+# CONFIG_FB is not set
+# CONFIG_FB_CARMINE_DRAM_EVAL is not set
+# CONFIG_CARMINE_DRAM_CUSTOM is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+CONFIG_DUMMY_CONSOLE=y
+# CONFIG_SOUND is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+# CONFIG_USB_HID is not set
+# CONFIG_HID_PID is not set
+
+#
+# Special HID drivers
+#
+CONFIG_HID_APPLE=m
+# CONFIG_HID_ELECOM is not set
+# CONFIG_HID_MAGICMOUSE is not set
+# CONFIG_HID_WACOM is not set
+CONFIG_USB_SUPPORT=y
+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
+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+CONFIG_USB_DEVICE_CLASS=y
+# CONFIG_USB_DYNAMIC_MINORS is not set
+CONFIG_USB_MON=y
+# CONFIG_USB_WUSB is not set
+# CONFIG_USB_WUSB_CBAF is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_C67X00_HCD is not set
+# CONFIG_USB_OXU210HP_HCD is not set
+# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_ISP1760_HCD is not set
+# CONFIG_USB_ISP1362_HCD is not set
+CONFIG_USB_OHCI_HCD=m
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+# CONFIG_USB_HWA_HCD is not set
+# CONFIG_USB_MUSB_HDRC is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+CONFIG_USB_WDM=m
+# CONFIG_USB_TMC is not set
+
+#
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
+#
+
+#
+# also be needed; see USB_STORAGE Help for more info
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_REALTEK 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_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_STORAGE_ONETOUCH is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
+# CONFIG_USB_STORAGE_ENE_UB6250 is not set
+# CONFIG_USB_UAS is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB port drivers
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_EZUSB=y
+CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL_AIRCABLE=m
+CONFIG_USB_SERIAL_ARK3116=m
+CONFIG_USB_SERIAL_BELKIN=m
+CONFIG_USB_SERIAL_CH341=m
+CONFIG_USB_SERIAL_WHITEHEAT=m
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+CONFIG_USB_SERIAL_CP210X=m
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+CONFIG_USB_SERIAL_FUNSOFT=m
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_IUU=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+# CONFIG_USB_SERIAL_KEYSPAN_MPR is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19QW is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA19QI is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set
+# CONFIG_USB_SERIAL_KEYSPAN_USA49WLC is not set
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+CONFIG_USB_SERIAL_MOS7720=m
+CONFIG_USB_SERIAL_MOS7840=m
+CONFIG_USB_SERIAL_MOTOROLA=m
+CONFIG_USB_SERIAL_NAVMAN=m
+CONFIG_USB_SERIAL_PL2303=m
+CONFIG_USB_SERIAL_OTI6858=m
+CONFIG_USB_SERIAL_QCAUX=m
+CONFIG_USB_SERIAL_QUALCOMM=m
+CONFIG_USB_SERIAL_SPCP8X5=m
+CONFIG_USB_SERIAL_HP4X=m
+# CONFIG_USB_SERIAL_SAFE is not set
+# CONFIG_USB_SERIAL_SAMBA is not set
+CONFIG_USB_SERIAL_SIEMENS_MPI=m
+CONFIG_USB_SERIAL_SIERRAWIRELESS=m
+CONFIG_USB_SERIAL_SYMBOL=m
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+CONFIG_USB_SERIAL_WWAN=m
+CONFIG_USB_SERIAL_OPTION=m
+CONFIG_USB_SERIAL_OMNINET=m
+CONFIG_USB_SERIAL_OPTICON=m
+CONFIG_USB_SERIAL_VIVOPAY_SERIAL=m
+CONFIG_USB_SERIAL_ZIO=m
+# CONFIG_USB_SERIAL_SSU100 is not set
+# CONFIG_USB_SERIAL_DEBUG is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+CONFIG_USB_SEVSEG=m
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+CONFIG_USB_LCD=m
+CONFIG_USB_LED=m
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+# CONFIG_USB_TEST is not set
+# CONFIG_USB_ISIGHTFW is not set
+# CONFIG_USB_YUREX is not set
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_VBUS_DRAW=2
+CONFIG_USB_GADGET_SELECTED=y
+CONFIG_USB_GADGET_AT91=y
+CONFIG_USB_AT91=y
+# CONFIG_USB_GADGET_FUSB300 is not set
+# CONFIG_USB_GADGET_R8A66597 is not set
+# CONFIG_USB_GADGET_PXA_U2O is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_CI13XXX_PCI is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LANGWELL is not set
+# CONFIG_USB_GADGET_EG20T is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+# CONFIG_USB_GADGET_DUALSPEED is not set
+CONFIG_USB_ZERO=m
+# CONFIG_USB_AUDIO is not set
+# CONFIG_USB_ETH is not set
+# CONFIG_USB_G_NCM is not set
+CONFIG_USB_GADGETFS=m
+# CONFIG_USB_FUNCTIONFS is not set
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+# CONFIG_USB_MASS_STORAGE is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_PRINTER is not set
+# CONFIG_USB_CDC_COMPOSITE is not set
+# CONFIG_USB_G_NOKIA is not set
+# CONFIG_USB_G_MULTI is not set
+# CONFIG_USB_G_HID is not set
+# CONFIG_USB_G_DBGP is not set
+# CONFIG_USB_G_WEBCAM is not set
+
+#
+# OTG and related infrastructure
+#
+# CONFIG_USB_GPIO_VBUS is not set
+# CONFIG_USB_ULPI is not set
+# CONFIG_NOP_USB_XCEIV is not set
+CONFIG_MMC=m
+# CONFIG_MMC_DEBUG is not set
+# CONFIG_MMC_UNSAFE_RESUME is not set
+# CONFIG_MMC_CLKGATE is not set
+
+#
+# MMC/SD/SDIO Card Drivers
+#
+CONFIG_MMC_BLOCK=m
+CONFIG_MMC_BLOCK_MINORS=8
+CONFIG_MMC_BLOCK_BOUNCE=y
+# CONFIG_SDIO_UART is not set
+# CONFIG_MMC_TEST is not set
+
+#
+# MMC/SD/SDIO Host Controller Drivers
+#
+# CONFIG_MMC_SDHCI is not set
+CONFIG_MMC_AT91=m
+# CONFIG_MMC_ATMELMCI is not set
+# CONFIG_MMC_SPI is not set
+# CONFIG_MMC_DW is not set
+# CONFIG_MMC_USHC is not set
+# CONFIG_MEMSTICK is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_LM3530 is not set
+# CONFIG_LEDS_PCA9532 is not set
+CONFIG_LEDS_GPIO=y
+CONFIG_LEDS_GPIO_PLATFORM=y
+# CONFIG_LEDS_LP3944 is not set
+# CONFIG_LEDS_LP5521 is not set
+# CONFIG_LEDS_LP5523 is not set
+# CONFIG_LEDS_PCA955X is not set
+# CONFIG_LEDS_DAC124S085 is not set
+# CONFIG_LEDS_BD2802 is not set
+# CONFIG_LEDS_LT3593 is not set
+CONFIG_LEDS_TRIGGERS=y
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+# CONFIG_LEDS_TRIGGER_GPIO is not set
+CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
+
+#
+# iptables trigger is under Netfilter config (LED target)
+#
+# CONFIG_NFC_DEVICES is not set
+# CONFIG_ACCESSIBILITY is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1374 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_DS3232 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_ISL12022 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+# CONFIG_RTC_DRV_BQ32K is not set
+# CONFIG_RTC_DRV_S35390A is not set
+# CONFIG_RTC_DRV_FM3130 is not set
+# CONFIG_RTC_DRV_RX8581 is not set
+# CONFIG_RTC_DRV_RX8025 is not set
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_M41T94 is not set
+# CONFIG_RTC_DRV_DS1305 is not set
+# CONFIG_RTC_DRV_DS1390 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_R9701 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_DS3234 is not set
+# CONFIG_RTC_DRV_PCF2123 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1286 is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T35 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_MSM6242 is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
+# CONFIG_RTC_DRV_RP5C01 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_DRV_AT91SAM9=y
+CONFIG_RTC_DRV_AT91SAM9_RTT=0
+CONFIG_RTC_DRV_AT91SAM9_GPBR=0
+# CONFIG_DMADEVICES is not set
+# CONFIG_AUXDISPLAY is not set
+# CONFIG_UIO is not set
+# CONFIG_STAGING is not set
+# CONFIG_LIS3L02DQ_BUF_RING_SW is not set
+# CONFIG_MACH_NO_WESTBRIDGE 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_DEFAULTS_TO_ORDERED is not set
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+CONFIG_EXT4_FS=y
+CONFIG_EXT4_FS_XATTR=y
+# CONFIG_EXT4_FS_POSIX_ACL is not set
+# CONFIG_EXT4_FS_SECURITY is not set
+# CONFIG_EXT4_DEBUG is not set
+CONFIG_JBD=y
+CONFIG_JBD2=y
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_BTRFS_FS is not set
+# CONFIG_NILFS2_FS is not set
+CONFIG_FS_POSIX_ACL=y
+CONFIG_FILE_LOCKING=y
+CONFIG_FSNOTIFY=y
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY_USER=y
+# CONFIG_FANOTIFY is not set
+# CONFIG_QUOTA is not set
+# CONFIG_QUOTACTL is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# Caches
+#
+# CONFIG_FSCACHE 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 is not set
+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_PROC_SYSCTL=y
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+CONFIG_MISC_FILESYSTEMS=y
+# 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_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+CONFIG_JFFS2_FS_WBUF_VERIFY=y
+CONFIG_JFFS2_SUMMARY=y
+CONFIG_JFFS2_FS_XATTR=y
+CONFIG_JFFS2_FS_POSIX_ACL=y
+CONFIG_JFFS2_FS_SECURITY=y
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_LZO=y
+CONFIG_JFFS2_RTIME=y
+CONFIG_JFFS2_RUBIN=y
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
+# CONFIG_LOGFS is not set
+CONFIG_CRAMFS=y
+# CONFIG_SQUASHFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+CONFIG_ROMFS_FS=y
+CONFIG_ROMFS_BACKED_BY_BLOCK=y
+# CONFIG_ROMFS_BACKED_BY_MTD is not set
+# CONFIG_ROMFS_BACKED_BY_BOTH is not set
+CONFIG_ROMFS_ON_BLOCK=y
+# CONFIG_PSTORE is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+# CONFIG_NFS_V3 is not set
+# CONFIG_NFS_V4 is not set
+CONFIG_ROOT_NFS=y
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_CEPH_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+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=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 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+# CONFIG_NLS_UTF8 is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_STRIP_ASM_SYMS is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_SECTION_MISMATCH is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+# CONFIG_LOCKUP_DETECTOR is not set
+# CONFIG_HARDLOCKUP_DETECTOR is not set
+CONFIG_DETECT_HUNG_TASK=y
+# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
+CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
+CONFIG_SCHED_DEBUG=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_OBJECTS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_KMEMLEAK is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_SPARSE_RCU_POINTER is not set
+# CONFIG_LOCK_STAT is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_BUGVERBOSE=y
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_WRITECOUNT is not set
+CONFIG_DEBUG_MEMORY_INIT=y
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_TEST_LIST_SORT is not set
+# CONFIG_DEBUG_SG is not set
+# CONFIG_DEBUG_NOTIFIERS is not set
+# CONFIG_DEBUG_CREDENTIALS is not set
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
+# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_LATENCYTOP is not set
+# CONFIG_SYSCTL_SYSCALL_CHECK is not set
+# CONFIG_DEBUG_PAGEALLOC is not set
+CONFIG_HAVE_FUNCTION_TRACER=y
+CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
+CONFIG_HAVE_DYNAMIC_FTRACE=y
+CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
+CONFIG_HAVE_C_RECORDMCOUNT=y
+CONFIG_TRACING_SUPPORT=y
+CONFIG_FTRACE=y
+# CONFIG_FUNCTION_TRACER is not set
+# CONFIG_IRQSOFF_TRACER is not set
+# CONFIG_PREEMPT_TRACER is not set
+# CONFIG_SCHED_TRACER is not set
+# CONFIG_ENABLE_DEFAULT_TRACERS is not set
+CONFIG_BRANCH_PROFILE_NONE=y
+# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
+# CONFIG_PROFILE_ALL_BRANCHES is not set
+# CONFIG_STACK_TRACER is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_DMA_API_DEBUG is not set
+# CONFIG_ATOMIC64_SELFTEST is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_KGDB is not set
+# CONFIG_TEST_KSTRTOX is not set
+# CONFIG_STRICT_DEVMEM is not set
+CONFIG_ARM_UNWIND=y
+CONFIG_DEBUG_USER=y
+# CONFIG_DEBUG_STACK_USAGE is not set
+CONFIG_DEBUG_LL=y
+# CONFIG_EARLY_PRINTK is not set
+# CONFIG_DEBUG_ICEDCC is not set
+# CONFIG_OC_ETM is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY_DMESG_RESTRICT is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITYFS is not set
+# CONFIG_DEFAULT_SECURITY_SELINUX is not set
+# CONFIG_DEFAULT_SECURITY_SMACK is not set
+# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
+# CONFIG_DEFAULT_SECURITY_APPARMOR is not set
+CONFIG_DEFAULT_SECURITY_DAC=y
+CONFIG_DEFAULT_SECURITY=""
+CONFIG_CRYPTO=m
+
+#
+# Crypto core or helper
+#
+CONFIG_CRYPTO_ALGAPI=m
+CONFIG_CRYPTO_ALGAPI2=m
+CONFIG_CRYPTO_AEAD2=m
+CONFIG_CRYPTO_BLKCIPHER=m
+CONFIG_CRYPTO_BLKCIPHER2=m
+CONFIG_CRYPTO_HASH2=m
+CONFIG_CRYPTO_RNG=m
+CONFIG_CRYPTO_RNG2=m
+CONFIG_CRYPTO_PCOMP2=m
+CONFIG_CRYPTO_MANAGER=m
+CONFIG_CRYPTO_MANAGER2=m
+CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y
+# CONFIG_CRYPTO_GF128MUL is not set
+# CONFIG_CRYPTO_NULL is not set
+CONFIG_CRYPTO_WORKQUEUE=m
+# CONFIG_CRYPTO_CRYPTD is not set
+# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Authenticated Encryption with Associated Data
+#
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_SEQIV is not set
+
+#
+# Block modes
+#
+# CONFIG_CRYPTO_CBC is not set
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_CTS is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_PCBC is not set
+# CONFIG_CRYPTO_XTS is not set
+
+#
+# Hash modes
+#
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_VMAC is not set
+
+#
+# Digest
+#
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_GHASH is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
+# CONFIG_CRYPTO_RMD256 is not set
+# CONFIG_CRYPTO_RMD320 is not set
+# CONFIG_CRYPTO_SHA1 is not set
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_WP512 is not set
+
+#
+# Ciphers
+#
+CONFIG_CRYPTO_AES=m
+# CONFIG_CRYPTO_ANUBIS is not set
+CONFIG_CRYPTO_ARC4=m
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_SALSA20 is not set
+# CONFIG_CRYPTO_SEED is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+
+#
+# Compression
+#
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_ZLIB is not set
+# CONFIG_CRYPTO_LZO is not set
+
+#
+# Random Number Generation
+#
+CONFIG_CRYPTO_ANSI_CPRNG=m
+# CONFIG_CRYPTO_USER_API_HASH is not set
+# CONFIG_CRYPTO_USER_API_SKCIPHER is not set
+CONFIG_CRYPTO_HW=y
+# CONFIG_BINARY_PRINTF is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_GENERIC_FIND_LAST_BIT=y
+CONFIG_CRC_CCITT=y
+CONFIG_CRC16=y
+# CONFIG_CRC_T10DIF is not set
+CONFIG_CRC_ITU_T=m
+CONFIG_CRC32=y
+CONFIG_CRC7=m
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_LZO_COMPRESS=y
+CONFIG_LZO_DECOMPRESS=y
+CONFIG_XZ_DEC=y
+CONFIG_XZ_DEC_X86=y
+CONFIG_XZ_DEC_POWERPC=y
+CONFIG_XZ_DEC_IA64=y
+CONFIG_XZ_DEC_ARM=y
+CONFIG_XZ_DEC_ARMTHUMB=y
+CONFIG_XZ_DEC_SPARC=y
+CONFIG_XZ_DEC_BCJ=y
+# CONFIG_XZ_DEC_TEST is not set
+CONFIG_DECOMPRESS_GZIP=y
+CONFIG_DECOMPRESS_BZIP2=y
+CONFIG_DECOMPRESS_LZMA=y
+CONFIG_DECOMPRESS_XZ=y
+CONFIG_DECOMPRESS_LZO=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
+CONFIG_NLATTR=y
+CONFIG_GENERIC_ATOMIC64=y
+CONFIG_AVERAGE=y
diff --git a/multitech/recipes/linux/linux-2.6.39.4/mt100eocg-pcie-dk/linux-2.6.39.4-mach-at91-mt100eocg-pcie-dk.patch b/multitech/recipes/linux/linux-2.6.39.4/mt100eocg-pcie-dk/linux-2.6.39.4-mach-at91-mt100eocg-pcie-dk.patch
new file mode 100644
index 0000000..36da1a2
--- /dev/null
+++ b/multitech/recipes/linux/linux-2.6.39.4/mt100eocg-pcie-dk/linux-2.6.39.4-mach-at91-mt100eocg-pcie-dk.patch
@@ -0,0 +1,406 @@
+Index: linux-2.6.39.4/arch/arm/mach-at91/at91sam9260_devices.c
+===================================================================
+--- linux-2.6.39.4.orig/arch/arm/mach-at91/at91sam9260_devices.c 2011-08-03 14:43:28.000000000 -0500
++++ linux-2.6.39.4/arch/arm/mach-at91/at91sam9260_devices.c 2012-09-10 12:33:08.656010481 -0500
+@@ -183,9 +183,9 @@
+ at91_set_B_periph(AT91_PIN_PA25, 0); /* ERX2 */
+ at91_set_B_periph(AT91_PIN_PA26, 0); /* ERX3 */
+ at91_set_B_periph(AT91_PIN_PA27, 0); /* ERXCK */
+- at91_set_B_periph(AT91_PIN_PA23, 0); /* ETX2 */
+- at91_set_B_periph(AT91_PIN_PA24, 0); /* ETX3 */
+- at91_set_B_periph(AT91_PIN_PA22, 0); /* ETXER */
++ at91_set_B_periph(AT91_PIN_PA10, 0); /* ETX2 */
++ at91_set_B_periph(AT91_PIN_PA11, 0); /* ETX3 */
++ /*at91_set_B_periph(AT91_PIN_PA22, 0);*/ /* ETXER */
+ }
+
+ eth_data = *data;
+@@ -571,7 +571,15 @@
+ .num_resources = ARRAY_SIZE(spi1_resources),
+ };
+
+-static const unsigned spi1_standard_cs[4] = { AT91_PIN_PB3, AT91_PIN_PC5, AT91_PIN_PC4, AT91_PIN_PC3 };
++static const unsigned spi1_standard_cs[7] = {
++ AT91_PIN_PB21, // CS0 - external pin SPI_CS7
++ AT91_PIN_PC5, // CS1 - GP output
++ AT91_PIN_PC4, // CS2 - temp sensor
++ AT91_PIN_PC6, // CS3 - unused/floating
++ AT91_PIN_PB12, // CS4 - GP input
++ AT91_PIN_PB13, // CS5 - external pin SPI_CS5
++ AT91_PIN_PB16 // CS6 - external pin SPI_CS6
++};
+
+ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices)
+ {
+Index: linux-2.6.39.4/arch/arm/mach-at91/board-sam9g20ek.c
+===================================================================
+--- linux-2.6.39.4.orig/arch/arm/mach-at91/board-sam9g20ek.c 2011-08-03 14:43:28.000000000 -0500
++++ linux-2.6.39.4/arch/arm/mach-at91/board-sam9g20ek.c 2012-09-10 12:37:02.306005503 -0500
+@@ -30,6 +30,12 @@
+ #include <linux/regulator/machine.h>
+ #include <linux/regulator/fixed.h>
+ #include <linux/regulator/consumer.h>
++#include <linux/i2c/at24.h>
++#include <linux/spi/eeprom.h>
++#include <linux/spi/flash.h>
++#include <linux/delay.h>
++#include <mach/at91_rtt.h>
++#include <linux/wl12xx.h>
+
+ #include <mach/hardware.h>
+ #include <asm/setup.h>
+@@ -59,9 +65,14 @@
+ return machine_is_at91sam9g20ek_2mmc() || (system_rev & HAVE_2MMC);
+ }
+
++#define WL12XX_ENABLE_PIN AT91_PIN_PB7
++
++static int i2c_present;
+
+ static void __init ek_map_io(void)
+ {
++ int tmp;
++
+ /* Initialize processor: 18.432 MHz crystal */
+ at91sam9260_initialize(18432000);
+
+@@ -76,12 +87,55 @@
+ /* USART1 on ttyS2. (Rx, Tx, RTS, CTS) */
+ at91_register_uart(AT91SAM9260_ID_US1, 2, ATMEL_UART_CTS | ATMEL_UART_RTS);
+
++ /*
++ * Reset any initiated i2c data transfers?
++ */
++ at91_set_gpio_input(AT91_PIN_PA23, 0);
++ at91_set_gpio_output(AT91_PIN_PA24, 0);
++ for (tmp = 0; tmp < 11; tmp++) {
++ at91_set_gpio_value(AT91_PIN_PA24, 0);
++ udelay(20);
++ at91_set_gpio_value(AT91_PIN_PA24, 1);
++ udelay(20);
++ }
++ at91_set_gpio_input(AT91_PIN_PA24, 0);
++
++ /*
++ * PA24 and PA23 are used as ID pins on MTCBA/MTCDP-0.0 and I2C pins on MTCDP-1.0.
++ *
++ * MTCBA Rev. B: 0x01, C: 0x02, D: 0x03
++ * MTCDP Rev. A reads as 0x00 with TWCK and TWD pulled high
++ *
++ */
++ tmp = !at91_get_gpio_value(AT91_PIN_PA24) << 1 | !at91_get_gpio_value(AT91_PIN_PA23);
++
++ i2c_present = !tmp;
++
++ /*
++ * The GPS receiver is either at US2 on MTCBA/MTCDP-0.0 and US3 on MTCDP-1.0.
++ */
++ if (i2c_present) {
++ at91_register_uart(AT91SAM9260_ID_US3, 3, ATMEL_UART_CTS | ATMEL_UART_RTS);
++ printk(KERN_INFO "sam9g20: i2c available\n");
++ } else {
++ at91_register_uart(AT91SAM9260_ID_US2, 3, 0);
++ printk(KERN_INFO "sam9g20: i2c not available\n");
++ }
++
+ /* set serial console to ttyS0 (ie, DBGU) */
+ at91_set_serial_console(0);
+ }
+
+ static void __init ek_init_irq(void)
+ {
++ /*
++ * Ensure RTT interrupts are disabled
++ */
++ u32 mr;
++ mr = __raw_readl(AT91_VA_BASE_SYS + AT91_RTT + AT91_RTT_MR);
++ __raw_writel(mr & ~(AT91_RTT_ALMIEN | AT91_RTT_RTTINCIEN),
++ AT91_VA_BASE_SYS + AT91_RTT + AT91_RTT_MR);
++
+ at91sam9260_init_interrupts(NULL);
+ }
+
+@@ -97,10 +151,37 @@
+ * USB Device port
+ */
+ static struct at91_udc_data __initdata ek_udc_data = {
+- .vbus_pin = AT91_PIN_PC5,
+- .pullup_pin = 0, /* pull-up driven by UDC */
++ .vbus_pin = AT91_PIN_PC12,
++ .pullup_pin = 0, /* pull-up driven by UDC */
++};
++
++
++#define MTS_EXT_AT25_TEST 0
++#if MTS_EXT_AT25_TEST
++static struct spi_eeprom at25040b = {
++ .byte_len = SZ_4K / 8,
++ .name = "at25040b",
++ .page_size = 8,
++ .flags = EE_ADDR1,
++};
++#endif
++
++#define MTS_EXT_STT25_TEST 0
++#if MTS_EXT_STT25_TEST
++static struct mtd_partition m25_partitions[] = {
++ {
++ .name = "flash",
++ .offset = 0x00000000,
++ .size = MTDPART_SIZ_FULL,
++ },
+ };
+
++static struct flash_platform_data m25_spi_flash_data = {
++ .type = "sst25vf080b",
++ .nr_parts = ARRAY_SIZE(m25_partitions),
++ .parts = m25_partitions,
++};
++#endif
+
+ /*
+ * SPI devices.
+@@ -122,6 +203,54 @@
+ },
+ #endif
+ #endif
++ {
++ .modalias = "mts-io-sout",
++ .chip_select = 0,
++ .bus_num = 1,
++ },
++ {
++ .modalias = "mts-io-board-temp",
++ .chip_select = 2,
++ .bus_num = 1,
++ },
++ {
++ .modalias = "mts-io-dout",
++ .chip_select = 1,
++ .bus_num = 1,
++ },
++ {
++ .modalias = "mts-io-din",
++ .chip_select = 4,
++ .bus_num = 1,
++ },
++#if MTS_EXT_AT25_TEST
++ {
++ .modalias = "at25",
++ .platform_data = &at25040b,
++ .max_speed_hz = 20 * 1000 * 1000,
++ .bus_num = 1,
++ .chip_select = 5,
++ .mode = SPI_MODE_0,
++ },
++ {
++ .modalias = "at25",
++ .platform_data = &at25040b,
++ .max_speed_hz = 20 * 1000 * 1000,
++ .bus_num = 1,
++ .chip_select = 6,
++ .mode = SPI_MODE_0,
++ },
++#endif
++#if MTS_EXT_STT25_TEST
++ {
++ .modalias = "m25p80",
++ .platform_data = &m25_spi_flash_data,
++ .irq = NO_IRQ,
++ .max_speed_hz = 33 * 1000 * 1000,
++ .bus_num = 1,
++ .chip_select = 5,
++ },
++#endif
+ };
+
+
+@@ -130,7 +259,7 @@
+ */
+ static struct at91_eth_data __initdata ek_macb_data = {
+ .phy_irq_pin = AT91_PIN_PA7,
+- .is_rmii = 1,
++ .is_rmii = 0,
+ };
+
+ static void __init ek_add_device_macb(void)
+@@ -146,18 +275,48 @@
+ */
+ static struct mtd_partition __initdata ek_nand_partition[] = {
+ {
+- .name = "Bootstrap",
+- .offset = 0,
+- .size = 4 * SZ_1M,
++ .name = "MTNCG-NANDFlash",
++ .offset = 0,
++ .size = 256*1024*1024,
++ },
++ {
++ .name = "AT91Bootstrap",
++ .offset = 0,
++ .size = 128*1024,
++ },
++ {
++ .name = "UBoot",
++ .offset = 128*1024,
++ .size = 256*1024,
++ },
++ {
++ .name = "UBoot Config",
++ .offset = 384*1024,
++ .size = 128*1024,
++ },
++ {
++ .name = "UBoot Redundant Config",
++ .offset = 512*1024,
++ .size = 128*1024,
++ },
++ {
++ .name = "uImage",
++ .offset = 640*1024,
++ .size = 59*128*1024,
++ },
++ {
++ .name = "Config",
++ .offset = 64*128*1024,
++ .size = 64*128*1024,
+ },
+ {
+- .name = "Partition 1",
+- .offset = MTDPART_OFS_NXTBLK,
+- .size = 60 * SZ_1M,
++ .name = "Oem Config",
++ .offset = 128*128*1024,
++ .size = 64*128*1024,
+ },
+ {
+- .name = "Partition 2",
+- .offset = MTDPART_OFS_NXTBLK,
++ .name = "Rootfs",
++ .offset = 192*128*1024,
+ .size = MTDPART_SIZ_FULL,
+ },
+ };
+@@ -228,10 +387,11 @@
+
+ };
+ #else
++/* MT100ECOG-PCIE-DK: SDIO for WLAN */
+ static struct at91_mmc_data __initdata ek_mmc_data = {
+ .slot_b = 1, /* Only one slot so use slot B */
+ .wire4 = 1,
+- .det_pin = AT91_PIN_PC9,
++ .det_pin = AT91_PIN_PB20,
+ };
+ #endif
+
+@@ -252,15 +412,10 @@
+ * LEDs
+ */
+ static struct gpio_led ek_leds[] = {
+- { /* "bottom" led, green, userled1 to be defined */
+- .name = "ds5",
+- .gpio = AT91_PIN_PA6,
++ { /* "status" led, green */
++ .name = "status",
++ .gpio = AT91_PIN_PA30,
+ .active_low = 1,
+- .default_trigger = "none",
+- },
+- { /* "power" led, yellow */
+- .name = "ds1",
+- .gpio = AT91_PIN_PA9,
+ .default_trigger = "heartbeat",
+ }
+ };
+@@ -363,16 +518,60 @@
+ static void __init ek_add_regulators(void) {}
+ #endif
+
++uint8_t mts_id_eeprom[512];
++
++EXPORT_SYMBOL(mts_id_eeprom);
++
++static void mts_id_eeprom_load(struct memory_accessor *macc, void *context)
++{
++ int tmp;
++
++ memset(mts_id_eeprom, 0, sizeof(mts_id_eeprom));
++
++ tmp = macc->read(macc, mts_id_eeprom, 0, sizeof(mts_id_eeprom));
++ if (tmp != sizeof(mts_id_eeprom)) {
++ printk(KERN_ERR "sam9g20: id eeprom read failed: %d\n", tmp);
++ } else {
++ printk(KERN_INFO "sam9g20: read %d bytes from id eeprom\n", tmp);
++ }
++}
++
++static struct at24_platform_data at24c04_data = {
++ .byte_len = SZ_4K / 8,
++ .page_size = 16,
++ .setup = mts_id_eeprom_load,
++};
++
+
+ static struct i2c_board_info __initdata ek_i2c_devices[] = {
+- {
+- I2C_BOARD_INFO("24c512", 0x50)
+- },
+- {
+- I2C_BOARD_INFO("wm8731", 0x1b)
+- },
++ {
++ I2C_BOARD_INFO("24c04", 0x56),
++ .platform_data = &at24c04_data,
++ },
+ };
+
++/* MT100EOCG-PCIE-DK: WL12XX support */
++static void wl12xx_enable(int enable)
++{
++ if (enable) {
++ at91_set_gpio_output_with_pullup(WL12XX_ENABLE_PIN, 0, 0);
++ msleep(10);
++ at91_set_gpio_output_with_pullup(WL12XX_ENABLE_PIN, 1, 0);
++ msleep(100);
++ printk(KERN_INFO "WLAN Enabled\n");
++ }
++ else {
++ at91_set_gpio_output_with_pullup(WL12XX_ENABLE_PIN, 0, 0);
++ msleep(10);
++ printk(KERN_INFO "WLAN Disabled\n");
++ }
++};
++
++static struct wl12xx_platform_data at91_wl12xx_wlan_data __initdata = {
++ .irq = AT91_PIN_PB19,
++ .board_ref_clock = WL12XX_REFCLOCK_38,
++ .set_power = wl12xx_enable,
++};
+
+ static void __init ek_board_init(void)
+ {
+@@ -401,7 +600,22 @@
+ /* PCK0 provides MCLK to the WM8731 */
+ at91_set_B_periph(AT91_PIN_PC1, 0);
+ /* SSC (for WM8731) */
+- at91_add_device_ssc(AT91SAM9260_ID_SSC, ATMEL_SSC_TX);
++ /* at91_add_device_ssc(AT91SAM9260_ID_SSC, ATMEL_SSC_TX); */
++
++ /* MT100ECOG-PCIE-DK
++ * configure the WLAN_IRQ for input
++ */
++ at91_set_gpio_input(at91_wl12xx_wlan_data.irq, 0);
++ at91_set_deglitch(at91_wl12xx_wlan_data.irq, 1);
++
++ if (wl12xx_set_platform_data(&at91_wl12xx_wlan_data))
++ pr_err("error setting wl12xx data\n");
++
++ /* configure WLAN_EN as output and enable chip */
++ at91_set_gpio_output_with_pullup(WL12XX_ENABLE_PIN, 0, 0);
++ mdelay(10);
++ at91_set_gpio_output_with_pullup(WL12XX_ENABLE_PIN, 1, 0);
++ mdelay(100);
+ }
+
+ MACHINE_START(AT91SAM9G20EK, "Atmel AT91SAM9G20-EK")
diff --git a/multitech/recipes/linux/linux_2.6.39.4.bb b/multitech/recipes/linux/linux_2.6.39.4.bb
new file mode 100644
index 0000000..d0af5f7
--- /dev/null
+++ b/multitech/recipes/linux/linux_2.6.39.4.bb
@@ -0,0 +1,29 @@
+require recipes/linux/linux.inc
+
+PR = "r1"
+
+SRC_URI = " \
+ ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2;name=kernel \
+ "
+
+SRC_URI_append_mt100eocg-pcie-dk = "file://defconfig \
+ file://linux-2.6.39.4-at91sam9260-reset.patch \
+ file://linux-2.6.39.4-mach-at91-mt100eocg-pcie-dk.patch \
+ file://linux-2.6.35.14-at91-gpio-pullup.patch \
+ file://linux-2.6.32.3-atmel_spi.patch \
+ file://linux-2.6.32.3-at25.patch \
+ file://linux-2.6.35.14-option-zte.patch \
+ file://linux-2.6.38-sierra-1.7.40.patch \
+ file://linux-2.6.32.3-option-telit.patch \
+ file://linux-2.6.39.4-mmc-core-maxclock.patch \
+ file://linux-2.6.39.4-at91-mci-clock-debug.patch \
+ "
+
+SRC_URI[kernel.md5sum] = "a17c748c2070168f1e784e9605ca043d"
+SRC_URI[kernel.sha256sum] = "d26e44eedbb4bf63f84754bd21640c5d4fee9010320781a5b66c7d2106941183"
+
+# add missing crypto headers
+sysroot_stage_all_append() {
+ kerneldir=${SYSROOT_DESTDIR}${STAGING_KERNEL_DIR}
+ cp -fR include/crypto* $kerneldir/include/
+}
diff --git a/multitech/recipes/multitech/mts-io/mt100eocg-pcie-dk/mts-io.init b/multitech/recipes/multitech/mts-io/mt100eocg-pcie-dk/mts-io.init
new file mode 100644
index 0000000..7c285ec
--- /dev/null
+++ b/multitech/recipes/multitech/mts-io/mt100eocg-pcie-dk/mts-io.init
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+case $1 in
+ start)
+ echo "Loading mts-io module"
+ modprobe mts_io
+ # reset module if MTPCIE-X was not detected
+ if ! lsusb | grep -q 'ID 1bc7:'; then
+ echo "Restarting radio"
+ radio-reset-h5
+ fi
+ ;;
+
+ stop)
+ echo "Unloading mts-io module"
+ modprobe -r mts_io
+ ;;
+
+ *)
+ echo "Usage: $0 {start|stop}"
+ exit 2
+ ;;
+esac
+
+
diff --git a/multitech/recipes/multitech/mts-io/mt100eocg-pcie-dk/radio-reset-h5 b/multitech/recipes/multitech/mts-io/mt100eocg-pcie-dk/radio-reset-h5
new file mode 100755
index 0000000..02e43d8
--- /dev/null
+++ b/multitech/recipes/multitech/mts-io/mt100eocg-pcie-dk/radio-reset-h5
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+# This script works around an H5 radio quirk by disabling USB and
+# waiting for the radio to power up before re-enabling it. Note that
+# this will disable all USB devices connected to the USB host controller
+# until the reset is finished. USB device port is not affected.
+
+pin="gpo3"
+
+rmmod ohci_hcd
+# toggle onoff pin
+mts-io-sysfs store $pin 1
+usleep 200000
+mts-io-sysfs store $pin 0
+sleep 15
+modprobe ohci_hcd
diff --git a/multitech/recipes/multitech/mts-io/mts-io-pcieh5.patch b/multitech/recipes/multitech/mts-io/mts-io-pcieh5.patch
new file mode 100644
index 0000000..15a1e28
--- /dev/null
+++ b/multitech/recipes/multitech/mts-io/mts-io-pcieh5.patch
@@ -0,0 +1,226 @@
+Index: io-module/mts_io.c
+===================================================================
+--- io-module.orig/mts_io.c
++++ io-module/mts_io.c
+@@ -317,17 +317,19 @@ static struct gpio_pin gpio_pins_mt100eo
+ .output_value = 1,
+ .use_pullup = 0,
+ },
++ // MTPCIE-H5: Wifi and BT enable pins
++ // (was TXD1 and DTR1) (PB17 and PB7 are tied together)
+ {
+- .name = "TXD1",
+- .pin = AT91_PIN_PB17,
+- .direction = GPIO_DIR_INPUT,
++ .name = "WLAN_EN",
++ .pin = AT91_PIN_PB7,
++ .direction = GPIO_DIR_OUTPUT,
+ .output_value = 0,
+ .use_pullup = 0,
+ },
+ {
+- .name = "DTR1",
++ .name = "BT_EN",
+ .pin = AT91_PIN_PB18,
+- .direction = GPIO_DIR_INPUT,
++ .direction = GPIO_DIR_OUTPUT,
+ .output_value = 0,
+ .use_pullup = 0,
+ },
+@@ -338,6 +340,8 @@ static struct gpio_pin gpio_pins_mt100eo
+ .output_value = 1,
+ .use_pullup = 0,
+ },
++ // PCIE-H5 GPIO11 used for WLAN_IRQ
++#if 0
+ {
+ .name = "GPIO11",
+ .pin = AT91_PIN_PB19,
+@@ -345,6 +349,7 @@ static struct gpio_pin gpio_pins_mt100eo
+ .output_value = 1,
+ .use_pullup = 1,
+ },
++#endif
+ {
+ .name = "GPIO12",
+ .pin = AT91_PIN_PB20,
+@@ -400,6 +405,13 @@ static int mts_id_eeprom_load(void)
+ mts_product_id = MTCDP_E1_DK_1_0;
+ }
+
++ // PCIE-H5 hard-coded to EOCG
++ gpio_pins = gpio_pins_mt100eocg_0_0;
++ mts_product_id = MT100EOCG_0_0;
++ DEVICE_CAPA_SET(id_eeprom.capa, CAPA_GPS);
++ DEVICE_CAPA_SET(id_eeprom.capa, CAPA_DIN);
++ DEVICE_CAPA_SET(id_eeprom.capa, CAPA_DOUT);
++
+ log_info("sizeof: %lu", (unsigned long) sizeof(struct mts_id_eeprom_layout));
+ log_info("vendor-id: %.32s", id_eeprom.vendor_id);
+ log_info("product-id: %.32s", id_eeprom.product_id);
+@@ -1976,6 +1988,100 @@ static ssize_t mts_attr_store_cd(struct
+ return count;
+ }
+
++static ssize_t mts_attr_show_bt_enabled(struct device *dev,
++ struct device_attribute *attr, char *buf)
++{
++ int value;
++ struct gpio_pin *pin = gpio_pin_by_name("BT_EN");
++
++ if (!pin) {
++ return -ENODEV;
++ }
++
++ mutex_lock(&mts_io_mutex);
++
++ value = at91_get_gpio_value(pin->pin);
++
++ mutex_unlock(&mts_io_mutex);
++
++ if (value < 0) {
++ return value;
++ }
++
++ return sprintf(buf, "%d\n", value);
++}
++
++static ssize_t mts_attr_store_bt_enabled(struct device *dev,
++ struct device_attribute *attr, const char *buf, size_t count)
++{
++ int value;
++ int err;
++ struct gpio_pin *pin = gpio_pin_by_name("BT_EN");
++
++ if (!pin) {
++ return -ENODEV;
++ }
++
++ if (sscanf(buf, "%i", &value) != 1) {
++ return -EINVAL;
++ }
++
++ mutex_lock(&mts_io_mutex);
++
++ err = at91_set_gpio_value(pin->pin, value);
++
++ mutex_unlock(&mts_io_mutex);
++
++ return count;
++}
++
++static ssize_t mts_attr_show_wlan_enabled(struct device *dev,
++ struct device_attribute *attr, char *buf)
++{
++ int value;
++ struct gpio_pin *pin = gpio_pin_by_name("WLAN_EN");
++
++ if (!pin) {
++ return -ENODEV;
++ }
++
++ mutex_lock(&mts_io_mutex);
++
++ value = at91_get_gpio_value(pin->pin);
++
++ mutex_unlock(&mts_io_mutex);
++
++ if (value < 0) {
++ return value;
++ }
++
++ return sprintf(buf, "%d\n", value);
++}
++
++static ssize_t mts_attr_store_wlan_enabled(struct device *dev,
++ struct device_attribute *attr, const char *buf, size_t count)
++{
++ int value;
++ int err;
++ struct gpio_pin *pin = gpio_pin_by_name("WLAN_EN");
++
++ if (!pin) {
++ return -ENODEV;
++ }
++
++ if (sscanf(buf, "%i", &value) != 1) {
++ return -EINVAL;
++ }
++
++ mutex_lock(&mts_io_mutex);
++
++ err = at91_set_gpio_value(pin->pin, value);
++
++ mutex_unlock(&mts_io_mutex);
++
++ return count;
++}
++
+
+ static struct device_attribute dev_attr_gpo1 = {
+ .attr = {
+@@ -2137,6 +2243,24 @@ static struct device_attribute dev_attr_
+ .store = mts_attr_store_gpio12,
+ };
+
++static struct device_attribute dev_attr_bt_enabled = {
++ .attr = {
++ .name = "bt-enabled",
++ .mode = MTS_ATTR_MODE_RW,
++ },
++ .show = mts_attr_show_bt_enabled,
++ .store = mts_attr_store_bt_enabled,
++};
++
++static struct device_attribute dev_attr_wlan_enabled = {
++ .attr = {
++ .name = "wlan-enabled",
++ .mode = MTS_ATTR_MODE_RW,
++ },
++ .show = mts_attr_show_wlan_enabled,
++ .store = mts_attr_store_wlan_enabled,
++};
++
+ static struct device_attribute dev_attr_rsersrc = {
+ .attr = {
+ .name = "rsersrc",
+@@ -2157,13 +2281,13 @@ static struct device_attribute dev_attr_
+
+
+ static struct attribute *mt100eocg_platform_attributes[] = {
+- &dev_attr_extserial_dtr.attr,
+ &dev_attr_extserial_cd.attr,
+ &dev_attr_rsersrc.attr,
+ &dev_attr_radio_reset.attr,
+ &dev_attr_eth0_enabled.attr,
+- &dev_attr_gpio11.attr,
+ &dev_attr_gpio12.attr,
++ &dev_attr_bt_enabled.attr,
++ &dev_attr_wlan_enabled.attr,
+
+ &dev_attr_gpo1.attr,
+ &dev_attr_gpo2.attr,
+@@ -2323,7 +2447,7 @@ static int __devinit mts_spi_dout_probe(
+ return tmp;
+ }
+
+- spi_dout_value = 0x00;
++ spi_dout_value = 0xFF; // 0x00;
+ spi_writen(spi, &spi_dout_value, 1);
+
+ spi_dout_dev = spi;
+@@ -2521,11 +2645,14 @@ static int __init mts_io_init(void)
+
+ if ( mts_product_id == MT100EOCG_0_0 ) {
+ //Set open drain for GPIO11 and GPIO12 using multi drive
++ // PCIE-H5 GPIO11 used for WLAN_IRQ
++#if 0
+ pin = gpio_pin_by_name("GPIO11");
+ if (pin) {
+ log_info("Set open drain for GPIO11");
+ at91_set_multi_drive(pin->pin, true);
+ }
++#endif
+ pin = gpio_pin_by_name("GPIO12");
+ if (pin) {
+ log_info("Set open drain for GPIO12");
diff --git a/multitech/recipes/multitech/mts-io_0.5.1.bb b/multitech/recipes/multitech/mts-io_0.5.1.bb
index f903020..2ddf14c 100644
--- a/multitech/recipes/multitech/mts-io_0.5.1.bb
+++ b/multitech/recipes/multitech/mts-io_0.5.1.bb
@@ -1,3 +1,5 @@
require mts-io.inc
-PR = "${INC_PR}.0"
+PR = "${INC_PR}.1"
+
+SRC_URI_append_mt100eocg-pcie-dk = " file://mts-io-pcieh5.patch"
diff --git a/multitech/recipes/ti/ti-wifi-utils_git.bbappend b/multitech/recipes/ti/ti-wifi-utils_git.bbappend
new file mode 100644
index 0000000..790257a
--- /dev/null
+++ b/multitech/recipes/ti/ti-wifi-utils_git.bbappend
@@ -0,0 +1,3 @@
+PV = "0.2"
+SRCREV = "05dc3b63f0a710c83c89755ffdd9e9c5f8aab5c4"
+SRC_URI = "git://github.com/TI-OpenLink/ti-utils.git;protocol=git"
diff --git a/multitech/recipes/u-boot/u-boot-1.3.4/mt100eocg-pcie-dk/fw_env.config b/multitech/recipes/u-boot/u-boot-1.3.4/mt100eocg-pcie-dk/fw_env.config
new file mode 100644
index 0000000..41b9605
--- /dev/null
+++ b/multitech/recipes/u-boot/u-boot-1.3.4/mt100eocg-pcie-dk/fw_env.config
@@ -0,0 +1,7 @@
+# Configuration file for fw_{printenv,setenv} utility.
+# Up to two entries are valid, in this case the redundant
+# environment sector is assumed present.
+
+# MTD device name Device offset Env. size Flash sector size
+/dev/mtd3 0x0000 0x20000 0x20000
+/dev/mtd4 0x0000 0x20000 0x20000
diff --git a/multitech/recipes/u-boot/u-boot-1.3.4/mt100eocg-pcie-dk/u-boot-1.3.4-mts.patch b/multitech/recipes/u-boot/u-boot-1.3.4/mt100eocg-pcie-dk/u-boot-1.3.4-mts.patch
new file mode 100644
index 0000000..4d05ba3
--- /dev/null
+++ b/multitech/recipes/u-boot/u-boot-1.3.4/mt100eocg-pcie-dk/u-boot-1.3.4-mts.patch
@@ -0,0 +1,3298 @@
+diff -uprN u-boot-1.3.4-vanilla/board/atmel/at91sam9260ek/at91sam9260ek.c u-boot-1.3.4/board/atmel/at91sam9260ek/at91sam9260ek.c
+--- u-boot-1.3.4-vanilla/board/atmel/at91sam9260ek/at91sam9260ek.c 2008-08-12 09:08:38.000000000 -0500
++++ u-boot-1.3.4/board/atmel/at91sam9260ek/at91sam9260ek.c 2010-03-25 16:45:59.000000000 -0500
+@@ -125,6 +125,8 @@ static void at91sam9260ek_spi_hw_init(vo
+ #ifdef CONFIG_MACB
+ static void at91sam9260ek_macb_hw_init(void)
+ {
++ unsigned long rstc;
++
+ /* Enable clock */
+ at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9260_ID_EMAC);
+
+@@ -147,6 +149,8 @@ static void at91sam9260ek_macb_hw_init(v
+ pin_to_mask(AT91_PIN_PA28),
+ pin_to_controller(AT91_PIN_PA0) + PIO_PUDR);
+
++ rstc = at91_sys_read(AT91_RSTC_MR);
++
+ /* Need to reset PHY -> 500ms reset */
+ at91_sys_write(AT91_RSTC_MR, AT91_RSTC_KEY |
+ (AT91_RSTC_ERSTL & (0x0D << 8)) |
+@@ -159,9 +163,8 @@ static void at91sam9260ek_macb_hw_init(v
+
+ /* Restore NRST value */
+ at91_sys_write(AT91_RSTC_MR, AT91_RSTC_KEY |
+- (AT91_RSTC_ERSTL & (0x0 << 8)) |
++ (rstc) |
+ AT91_RSTC_URSTEN);
+-
+ /* Re-enable pull-up */
+ writel(pin_to_mask(AT91_PIN_PA14) |
+ pin_to_mask(AT91_PIN_PA15) |
+diff -uprN u-boot-1.3.4-vanilla/board/atmel/at91sam9263ek/at91sam9263ek.c u-boot-1.3.4/board/atmel/at91sam9263ek/at91sam9263ek.c
+--- u-boot-1.3.4-vanilla/board/atmel/at91sam9263ek/at91sam9263ek.c 2008-08-12 09:08:38.000000000 -0500
++++ u-boot-1.3.4/board/atmel/at91sam9263ek/at91sam9263ek.c 2010-03-25 16:45:59.000000000 -0500
+@@ -128,6 +128,8 @@ static void at91sam9263ek_spi_hw_init(vo
+ #ifdef CONFIG_MACB
+ static void at91sam9263ek_macb_hw_init(void)
+ {
++ unsigned long rstc;
++
+ /* Enable clock */
+ at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9263_ID_EMAC);
+
+@@ -145,6 +147,8 @@ static void at91sam9263ek_macb_hw_init(v
+ pin_to_mask(AT91_PIN_PE26),
+ pin_to_controller(AT91_PIN_PE0) + PIO_PUDR);
+
++ rstc = at91_sys_read(AT91_RSTC_MR);
++
+ /* Need to reset PHY -> 500ms reset */
+ at91_sys_write(AT91_RSTC_MR, AT91_RSTC_KEY |
+ (AT91_RSTC_ERSTL & (0x0D << 8)) |
+@@ -157,7 +161,7 @@ static void at91sam9263ek_macb_hw_init(v
+
+ /* Restore NRST value */
+ at91_sys_write(AT91_RSTC_MR, AT91_RSTC_KEY |
+- (AT91_RSTC_ERSTL & (0x0 << 8)) |
++ (rstc) |
+ AT91_RSTC_URSTEN);
+
+ /* Re-enable pull-up */
+diff -uprN u-boot-1.3.4-vanilla/board/atmel/at91sam9g10ek/at91sam9g10ek.c u-boot-1.3.4/board/atmel/at91sam9g10ek/at91sam9g10ek.c
+--- u-boot-1.3.4-vanilla/board/atmel/at91sam9g10ek/at91sam9g10ek.c 1969-12-31 17:00:00.000000000 -0700
++++ u-boot-1.3.4/board/atmel/at91sam9g10ek/at91sam9g10ek.c 2010-03-25 16:45:59.000000000 -0500
+@@ -0,0 +1,281 @@
++/*
++ * (C) Copyright 2007-2008
++ * Stelian Pop <stelian.pop@leadtechdesign.com>
++ * Lead Tech Design <www.leadtechdesign.com>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#include <common.h>
++#include <asm/arch/at91sam9261.h>
++#include <asm/arch/at91sam9261_matrix.h>
++#include <asm/arch/at91sam9_smc.h>
++#include <asm/arch/at91_pmc.h>
++#include <asm/arch/at91_rstc.h>
++#include <asm/arch/gpio.h>
++#include <asm/arch/io.h>
++#include <lcd.h>
++#include <atmel_lcdc.h>
++#if defined(CONFIG_RESET_PHY_R) && defined(CONFIG_DRIVER_DM9000)
++#include <net.h>
++#endif
++
++DECLARE_GLOBAL_DATA_PTR;
++
++/* ------------------------------------------------------------------------- */
++/*
++ * Miscelaneous platform dependent initialisations
++ */
++
++static void at91sam9g10ek_serial_hw_init(void)
++{
++#ifdef CONFIG_USART0
++ at91_set_A_periph(AT91_PIN_PC8, 1); /* TXD0 */
++ at91_set_A_periph(AT91_PIN_PC9, 0); /* RXD0 */
++ at91_sys_write(AT91_PMC_PCER, 1 << AT91_ID_US0);
++#endif
++
++#ifdef CONFIG_USART1
++ at91_set_A_periph(AT91_PIN_PC12, 1); /* TXD1 */
++ at91_set_A_periph(AT91_PIN_PC13, 0); /* RXD1 */
++ at91_sys_write(AT91_PMC_PCER, 1 << AT91_ID_US1);
++#endif
++
++#ifdef CONFIG_USART2
++ at91_set_A_periph(AT91_PIN_PC14, 1); /* TXD2 */
++ at91_set_A_periph(AT91_PIN_PC15, 0); /* RXD2 */
++ at91_sys_write(AT91_PMC_PCER, 1 << AT91_ID_US2);
++#endif
++
++#ifdef CONFIG_USART3 /* DBGU */
++ at91_set_A_periph(AT91_PIN_PA9, 0); /* DRXD */
++ at91_set_A_periph(AT91_PIN_PA10, 1); /* DTXD */
++ at91_sys_write(AT91_PMC_PCER, 1 << AT91_ID_SYS);
++#endif
++}
++
++#ifdef CONFIG_CMD_NAND
++static void at91sam9g10ek_nand_hw_init(void)
++{
++ unsigned long csa;
++
++ /* Enable CS3 */
++ csa = at91_sys_read(AT91_MATRIX_EBICSA);
++ at91_sys_write(AT91_MATRIX_EBICSA,
++ csa | AT91_MATRIX_CS3A_SMC_SMARTMEDIA);
++
++ /* Configure SMC CS3 for NAND/SmartMedia */
++ at91_sys_write(AT91_SMC_SETUP(3),
++ /*
++ AT91_SMC_NWESETUP_(1) | AT91_SMC_NCS_WRSETUP_(0) |
++ AT91_SMC_NRDSETUP_(1) | AT91_SMC_NCS_RDSETUP_(0));
++ */
++ AT91_SMC_NWESETUP_(2) | AT91_SMC_NCS_WRSETUP_(0) |
++ AT91_SMC_NRDSETUP_(2) | AT91_SMC_NCS_RDSETUP_(0));
++ at91_sys_write(AT91_SMC_PULSE(3),
++ /*
++ AT91_SMC_NWEPULSE_(3) | AT91_SMC_NCS_WRPULSE_(3) |
++ AT91_SMC_NRDPULSE_(3) | AT91_SMC_NCS_RDPULSE_(3));
++ */
++ AT91_SMC_NWEPULSE_(3) | AT91_SMC_NCS_WRPULSE_(7) |
++ AT91_SMC_NRDPULSE_(3) | AT91_SMC_NCS_RDPULSE_(7));
++ at91_sys_write(AT91_SMC_CYCLE(3),
++ /*
++ AT91_SMC_NWECYCLE_(5) | AT91_SMC_NRDCYCLE_(5));
++ */
++ AT91_SMC_NWECYCLE_(7) | AT91_SMC_NRDCYCLE_(7));
++ at91_sys_write(AT91_SMC_MODE(3),
++ AT91_SMC_READMODE | AT91_SMC_WRITEMODE |
++ AT91_SMC_EXNWMODE_DISABLE |
++#ifdef CFG_NAND_DBW_16
++ AT91_SMC_DBW_16 |
++#else /* CFG_NAND_DBW_8 */
++ AT91_SMC_DBW_8 |
++#endif
++ AT91_SMC_TDF_(2));
++
++ at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9261_ID_PIOC);
++
++ /* Configure RDY/BSY */
++ at91_set_gpio_input(AT91_PIN_PC15, 1);
++
++ /* Enable NandFlash */
++ at91_set_gpio_output(AT91_PIN_PC14, 1);
++
++ at91_set_A_periph(AT91_PIN_PC0, 0); /* NANDOE */
++ at91_set_A_periph(AT91_PIN_PC1, 0); /* NANDWE */
++}
++#endif
++
++#ifdef CONFIG_HAS_DATAFLASH
++static void at91sam9g10ek_spi_hw_init(void)
++{
++ at91_set_A_periph(AT91_PIN_PA3, 0); /* SPI0_NPCS0 */
++
++ at91_set_A_periph(AT91_PIN_PA0, 0); /* SPI0_MISO */
++ at91_set_A_periph(AT91_PIN_PA1, 0); /* SPI0_MOSI */
++ at91_set_A_periph(AT91_PIN_PA2, 0); /* SPI0_SPCK */
++
++ /* Enable clock */
++ at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9261_ID_SPI0);
++}
++#endif
++
++#ifdef CONFIG_DRIVER_DM9000
++static void at91sam9g10ek_dm9000_hw_init(void)
++{
++ /* Configure SMC CS2 for DM9000 */
++ /*
++ at91_sys_write(AT91_SMC_SETUP(2),
++ AT91_SMC_NWESETUP_(2) | AT91_SMC_NCS_WRSETUP_(0) |
++ AT91_SMC_NRDSETUP_(2) | AT91_SMC_NCS_RDSETUP_(0));
++ at91_sys_write(AT91_SMC_PULSE(2),
++ AT91_SMC_NWEPULSE_(4) | AT91_SMC_NCS_WRPULSE_(8) |
++ AT91_SMC_NRDPULSE_(4) | AT91_SMC_NCS_RDPULSE_(8));
++ at91_sys_write(AT91_SMC_CYCLE(2),
++ AT91_SMC_NWECYCLE_(16) | AT91_SMC_NRDCYCLE_(16));
++ */
++ at91_sys_write(AT91_SMC_SETUP(2),
++ AT91_SMC_NWESETUP_(3) | AT91_SMC_NCS_WRSETUP_(0) |
++ AT91_SMC_NRDSETUP_(3) | AT91_SMC_NCS_RDSETUP_(0));
++ at91_sys_write(AT91_SMC_PULSE(2),
++ AT91_SMC_NWEPULSE_(6) | AT91_SMC_NCS_WRPULSE_(8) |
++ AT91_SMC_NRDPULSE_(6) | AT91_SMC_NCS_RDPULSE_(8));
++ at91_sys_write(AT91_SMC_CYCLE(2),
++ AT91_SMC_NWECYCLE_(20) | AT91_SMC_NRDCYCLE_(20));
++ at91_sys_write(AT91_SMC_MODE(2),
++ AT91_SMC_READMODE | AT91_SMC_WRITEMODE |
++ AT91_SMC_EXNWMODE_DISABLE |
++ AT91_SMC_BAT_WRITE | AT91_SMC_DBW_16 |
++ AT91_SMC_TDF_(1));
++
++ /* Configure Reset signal as output */
++ at91_set_gpio_output(AT91_PIN_PC10, 0);
++
++ /* Configure Interrupt pin as input, no pull-up */
++ at91_set_gpio_input(AT91_PIN_PC11, 0);
++}
++#endif
++
++#ifdef CONFIG_LCD
++vidinfo_t panel_info = {
++ vl_col: 240,
++ vl_row: 320,
++ vl_clk: 4965000,
++ vl_sync: ATMEL_LCDC_INVLINE_INVERTED |
++ ATMEL_LCDC_INVFRAME_INVERTED,
++ vl_bpix: 3,
++ vl_tft: 1,
++ vl_hsync_len: 5,
++ vl_left_margin: 1,
++ vl_right_margin:33,
++ vl_vsync_len: 1,
++ vl_upper_margin:1,
++ vl_lower_margin:0,
++ mmio: AT91SAM9261_LCDC_BASE,
++};
++
++void lcd_enable(void)
++{
++ at91_set_gpio_value(AT91_PIN_PA12, 0); /* power up */
++}
++
++void lcd_disable(void)
++{
++ at91_set_gpio_value(AT91_PIN_PA12, 1); /* power down */
++}
++
++static void at91sam9g10ek_lcd_hw_init(void)
++{
++ at91_set_A_periph(AT91_PIN_PB1, 0); /* LCDHSYNC */
++ at91_set_A_periph(AT91_PIN_PB2, 0); /* LCDDOTCK */
++ at91_set_A_periph(AT91_PIN_PB3, 0); /* LCDDEN */
++ at91_set_A_periph(AT91_PIN_PB4, 0); /* LCDCC */
++ at91_set_A_periph(AT91_PIN_PB7, 0); /* LCDD2 */
++ at91_set_A_periph(AT91_PIN_PB8, 0); /* LCDD3 */
++ at91_set_A_periph(AT91_PIN_PB9, 0); /* LCDD4 */
++ at91_set_A_periph(AT91_PIN_PB10, 0); /* LCDD5 */
++ at91_set_A_periph(AT91_PIN_PB11, 0); /* LCDD6 */
++ at91_set_A_periph(AT91_PIN_PB12, 0); /* LCDD7 */
++ at91_set_A_periph(AT91_PIN_PB15, 0); /* LCDD10 */
++ at91_set_A_periph(AT91_PIN_PB16, 0); /* LCDD11 */
++ at91_set_A_periph(AT91_PIN_PB17, 0); /* LCDD12 */
++ at91_set_A_periph(AT91_PIN_PB18, 0); /* LCDD13 */
++ at91_set_A_periph(AT91_PIN_PB19, 0); /* LCDD14 */
++ at91_set_A_periph(AT91_PIN_PB20, 0); /* LCDD15 */
++ at91_set_B_periph(AT91_PIN_PB23, 0); /* LCDD18 */
++ at91_set_B_periph(AT91_PIN_PB24, 0); /* LCDD19 */
++ at91_set_B_periph(AT91_PIN_PB25, 0); /* LCDD20 */
++ at91_set_B_periph(AT91_PIN_PB26, 0); /* LCDD21 */
++ at91_set_B_periph(AT91_PIN_PB27, 0); /* LCDD22 */
++ at91_set_B_periph(AT91_PIN_PB28, 0); /* LCDD23 */
++
++ at91_sys_write(AT91_PMC_SCER, AT91_PMC_HCK1);
++
++ /* gd->fb_base = AT91SAM9261_SRAM_BASE; */
++ gd->fb_base = 0x23E00000;
++
++}
++#endif
++
++int board_init(void)
++{
++ /* Enable Ctrlc */
++ console_init_f();
++
++ /* arch number of AT91SAM9G10EK-Board */
++ gd->bd->bi_arch_number = MACH_TYPE_AT91SAM9G10EK;
++ /* adress of boot parameters */
++ gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
++
++ at91sam9g10ek_serial_hw_init();
++#ifdef CONFIG_CMD_NAND
++ at91sam9g10ek_nand_hw_init();
++#endif
++#ifdef CONFIG_HAS_DATAFLASH
++ at91sam9g10ek_spi_hw_init();
++#endif
++#ifdef CONFIG_DRIVER_DM9000
++ at91sam9g10ek_dm9000_hw_init();
++#endif
++#ifdef CONFIG_LCD
++ at91sam9g10ek_lcd_hw_init();
++#endif
++ return 0;
++}
++
++int dram_init(void)
++{
++ gd->bd->bi_dram[0].start = PHYS_SDRAM;
++ gd->bd->bi_dram[0].size = PHYS_SDRAM_SIZE;
++ return 0;
++}
++
++#ifdef CONFIG_RESET_PHY_R
++void reset_phy(void)
++{
++#ifdef CONFIG_DRIVER_DM9000
++ /*
++ * Initialize ethernet HW addr prior to starting Linux,
++ * needed for nfsroot
++ */
++ eth_init(gd->bd);
++#endif
++}
++#endif
+diff -uprN u-boot-1.3.4-vanilla/board/atmel/at91sam9g10ek/config.mk u-boot-1.3.4/board/atmel/at91sam9g10ek/config.mk
+--- u-boot-1.3.4-vanilla/board/atmel/at91sam9g10ek/config.mk 1969-12-31 17:00:00.000000000 -0700
++++ u-boot-1.3.4/board/atmel/at91sam9g10ek/config.mk 2010-03-25 16:45:59.000000000 -0500
+@@ -0,0 +1 @@
++TEXT_BASE = 0x23f00000
+diff -uprN u-boot-1.3.4-vanilla/board/atmel/at91sam9g10ek/led.c u-boot-1.3.4/board/atmel/at91sam9g10ek/led.c
+--- u-boot-1.3.4-vanilla/board/atmel/at91sam9g10ek/led.c 1969-12-31 17:00:00.000000000 -0700
++++ u-boot-1.3.4/board/atmel/at91sam9g10ek/led.c 2010-03-25 16:45:59.000000000 -0500
+@@ -0,0 +1,78 @@
++/*
++ * (C) Copyright 2007-2008
++ * Stelian Pop <stelian.pop@leadtechdesign.com>
++ * Lead Tech Design <www.leadtechdesign.com>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#include <common.h>
++#include <asm/arch/at91sam9261.h>
++#include <asm/arch/at91_pmc.h>
++#include <asm/arch/gpio.h>
++#include <asm/arch/io.h>
++
++#define RED_LED AT91_PIN_PA23 /* this is the power led */
++#define GREEN_LED AT91_PIN_PA13 /* this is the user1 led */
++#define YELLOW_LED AT91_PIN_PA14 /* this is the user2 led */
++
++void red_LED_on(void)
++{
++ at91_set_gpio_value(RED_LED, 1);
++}
++
++void red_LED_off(void)
++{
++ at91_set_gpio_value(RED_LED, 0);
++}
++
++void green_LED_on(void)
++{
++ at91_set_gpio_value(GREEN_LED, 0);
++}
++
++void green_LED_off(void)
++{
++ at91_set_gpio_value(GREEN_LED, 1);
++}
++
++void yellow_LED_on(void)
++{
++ at91_set_gpio_value(YELLOW_LED, 0);
++}
++
++void yellow_LED_off(void)
++{
++ at91_set_gpio_value(YELLOW_LED, 1);
++}
++
++
++void coloured_LED_init(void)
++{
++ /* Enable clock */
++ at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9261_ID_PIOA);
++
++ at91_set_gpio_output(RED_LED, 1);
++ at91_set_gpio_output(GREEN_LED, 1);
++ at91_set_gpio_output(YELLOW_LED, 1);
++
++ at91_set_gpio_value(RED_LED, 0);
++ at91_set_gpio_value(GREEN_LED, 1);
++ at91_set_gpio_value(YELLOW_LED, 1);
++}
+diff -uprN u-boot-1.3.4-vanilla/board/atmel/at91sam9g10ek/Makefile u-boot-1.3.4/board/atmel/at91sam9g10ek/Makefile
+--- u-boot-1.3.4-vanilla/board/atmel/at91sam9g10ek/Makefile 1969-12-31 17:00:00.000000000 -0700
++++ u-boot-1.3.4/board/atmel/at91sam9g10ek/Makefile 2010-03-25 16:45:59.000000000 -0500
+@@ -0,0 +1,57 @@
++#
++# (C) Copyright 2003-2008
++# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
++#
++# (C) Copyright 2008
++# Stelian Pop <stelian.pop@leadtechdesign.com>
++# Lead Tech Design <www.leadtechdesign.com>
++#
++# See file CREDITS for list of people who contributed to this
++# project.
++#
++# This program is free software; you can redistribute it and/or
++# modify it under the terms of the GNU General Public License as
++# published by the Free Software Foundation; either version 2 of
++# the License, or (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++# MA 02111-1307 USA
++#
++
++include $(TOPDIR)/config.mk
++
++LIB = $(obj)lib$(BOARD).a
++
++COBJS-y += at91sam9g10ek.o
++COBJS-y += led.o
++COBJS-y += partition.o
++COBJS-$(CONFIG_CMD_NAND) += nand.o
++
++SRCS := $(SOBJS:.o=.S) $(COBJS-y:.o=.c)
++OBJS := $(addprefix $(obj),$(COBJS-y))
++SOBJS := $(addprefix $(obj),$(SOBJS))
++
++$(LIB): $(obj).depend $(OBJS) $(SOBJS)
++ $(AR) $(ARFLAGS) $@ $(OBJS) $(SOBJS)
++
++clean:
++ rm -f $(SOBJS) $(OBJS)
++
++distclean: clean
++ rm -f $(LIB) core *.bak $(obj).depend
++
++#########################################################################
++
++# defines $(obj).depend target
++include $(SRCTREE)/rules.mk
++
++sinclude $(obj).depend
++
++#########################################################################
+diff -uprN u-boot-1.3.4-vanilla/board/atmel/at91sam9g10ek/nand.c u-boot-1.3.4/board/atmel/at91sam9g10ek/nand.c
+--- u-boot-1.3.4-vanilla/board/atmel/at91sam9g10ek/nand.c 1969-12-31 17:00:00.000000000 -0700
++++ u-boot-1.3.4/board/atmel/at91sam9g10ek/nand.c 2010-03-25 16:45:59.000000000 -0500
+@@ -0,0 +1,79 @@
++/*
++ * (C) Copyright 2007-2008
++ * Stelian Pop <stelian.pop@leadtechdesign.com>
++ * Lead Tech Design <www.leadtechdesign.com>
++ *
++ * (C) Copyright 2006 ATMEL Rousset, Lacressonniere Nicolas
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#include <common.h>
++#include <asm/arch/at91sam9261.h>
++#include <asm/arch/gpio.h>
++#include <asm/arch/at91_pio.h>
++
++#include <nand.h>
++
++/*
++ * hardware specific access to control-lines
++ */
++#define MASK_ALE (1 << 22) /* our ALE is AD22 */
++#define MASK_CLE (1 << 21) /* our CLE is AD21 */
++
++static void at91sam9261ek_nand_hwcontrol(struct mtd_info *mtd, int cmd)
++{
++ struct nand_chip *this = mtd->priv;
++ ulong IO_ADDR_W = (ulong) this->IO_ADDR_W;
++
++ IO_ADDR_W &= ~(MASK_ALE|MASK_CLE);
++ switch (cmd) {
++ case NAND_CTL_SETCLE:
++ IO_ADDR_W |= MASK_CLE;
++ break;
++ case NAND_CTL_SETALE:
++ IO_ADDR_W |= MASK_ALE;
++ break;
++ case NAND_CTL_CLRNCE:
++ at91_set_gpio_value(AT91_PIN_PC14, 1);
++ break;
++ case NAND_CTL_SETNCE:
++ at91_set_gpio_value(AT91_PIN_PC14, 0);
++ break;
++ }
++ this->IO_ADDR_W = (void *) IO_ADDR_W;
++}
++
++static int at91sam9261ek_nand_ready(struct mtd_info *mtd)
++{
++ return at91_get_gpio_value(AT91_PIN_PC15);
++}
++
++int board_nand_init(struct nand_chip *nand)
++{
++ nand->eccmode = NAND_ECC_SOFT;
++#ifdef CFG_NAND_DBW_16
++ nand->options = NAND_BUSWIDTH_16;
++#endif
++ nand->hwcontrol = at91sam9261ek_nand_hwcontrol;
++ nand->dev_ready = at91sam9261ek_nand_ready;
++ nand->chip_delay = 20;
++
++ return 0;
++}
+diff -uprN u-boot-1.3.4-vanilla/board/atmel/at91sam9g10ek/partition.c u-boot-1.3.4/board/atmel/at91sam9g10ek/partition.c
+--- u-boot-1.3.4-vanilla/board/atmel/at91sam9g10ek/partition.c 1969-12-31 17:00:00.000000000 -0700
++++ u-boot-1.3.4/board/atmel/at91sam9g10ek/partition.c 2010-03-25 16:45:59.000000000 -0500
+@@ -0,0 +1,40 @@
++/*
++ * (C) Copyright 2008
++ * Ulf Samuelsson <ulf@atmel.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.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ *
++ */
++#include <common.h>
++#include <config.h>
++#include <asm/hardware.h>
++#include <dataflash.h>
++
++AT91S_DATAFLASH_INFO dataflash_info[CFG_MAX_DATAFLASH_BANKS];
++
++struct dataflash_addr cs[CFG_MAX_DATAFLASH_BANKS] = {
++ {CFG_DATAFLASH_LOGIC_ADDR_CS0, 0}, /* Logical adress, CS */
++ {CFG_DATAFLASH_LOGIC_ADDR_CS3, 3}
++};
++
++/*define the area offsets*/
++dataflash_protect_t area_list[NB_DATAFLASH_AREA] = {
++ {0x00000000, 0x000041FF, FLAG_PROTECT_SET, 0, "Bootstrap"},
++ {0x00004200, 0x000083FF, FLAG_PROTECT_CLEAR, 0, "Environment"},
++ {0x00008400, 0x00041FFF, FLAG_PROTECT_SET, 0, "U-Boot"},
++ {0x00042000, 0x00251FFF, FLAG_PROTECT_CLEAR, 0, "Kernel"},
++ {0x00252000, 0xFFFFFFFF, FLAG_PROTECT_CLEAR, 0, "FS"},
++};
+diff -uprN u-boot-1.3.4-vanilla/board/atmel/at91sam9g20ek/at91sam9g20ek.c u-boot-1.3.4/board/atmel/at91sam9g20ek/at91sam9g20ek.c
+--- u-boot-1.3.4-vanilla/board/atmel/at91sam9g20ek/at91sam9g20ek.c 1969-12-31 17:00:00.000000000 -0700
++++ u-boot-1.3.4/board/atmel/at91sam9g20ek/at91sam9g20ek.c 2010-03-25 16:45:59.000000000 -0500
+@@ -0,0 +1,258 @@
++/*
++ * (C) Copyright 2007-2008
++ * Stelian Pop <stelian.pop@leadtechdesign.com>
++ * Lead Tech Design <www.leadtechdesign.com>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#include <common.h>
++#include <asm/arch/at91sam9260.h>
++#include <asm/arch/at91sam9260_matrix.h>
++#include <asm/arch/at91sam9_smc.h>
++#include <asm/arch/at91_pmc.h>
++#include <asm/arch/at91_rstc.h>
++#include <asm/arch/gpio.h>
++#include <asm/arch/io.h>
++#if defined(CONFIG_RESET_PHY_R) && defined(CONFIG_MACB)
++#include <net.h>
++#endif
++
++DECLARE_GLOBAL_DATA_PTR;
++
++/* ------------------------------------------------------------------------- */
++/*
++ * Miscelaneous platform dependent initialisations
++ */
++
++static void at91sam9g20ek_serial_hw_init(void)
++{
++#ifdef CONFIG_USART0
++ at91_set_A_periph(AT91_PIN_PB4, 1); /* TXD0 */
++ at91_set_A_periph(AT91_PIN_PB5, 0); /* RXD0 */
++ at91_sys_write(AT91_PMC_PCER, 1 << AT91_ID_US0);
++#endif
++
++#ifdef CONFIG_USART1
++ at91_set_A_periph(AT91_PIN_PB6, 1); /* TXD1 */
++ at91_set_A_periph(AT91_PIN_PB7, 0); /* RXD1 */
++ at91_sys_write(AT91_PMC_PCER, 1 << AT91_ID_US1);
++#endif
++
++#ifdef CONFIG_USART2
++ at91_set_A_periph(AT91_PIN_PB8, 1); /* TXD2 */
++ at91_set_A_periph(AT91_PIN_PB9, 0); /* RXD2 */
++ at91_sys_write(AT91_PMC_PCER, 1 << AT91_ID_US2);
++#endif
++
++#ifdef CONFIG_USART3 /* DBGU */
++ at91_set_A_periph(AT91_PIN_PB14, 0); /* DRXD */
++ at91_set_A_periph(AT91_PIN_PB15, 1); /* DTXD */
++ at91_sys_write(AT91_PMC_PCER, 1 << AT91_ID_SYS);
++#endif
++}
++
++#ifdef CONFIG_CMD_NAND
++static void at91sam9g20ek_nand_hw_init(void)
++{
++ unsigned long csa;
++
++ /* Enable CS3 */
++ csa = at91_sys_read(AT91_MATRIX_EBICSA);
++ at91_sys_write(AT91_MATRIX_EBICSA,
++ csa | AT91_MATRIX_CS3A_SMC_SMARTMEDIA);
++
++ /* Configure SMC CS3 for NAND/SmartMedia */
++ at91_sys_write(AT91_SMC_SETUP(3),
++ AT91_SMC_NWESETUP_(2) | AT91_SMC_NCS_WRSETUP_(0) |
++ AT91_SMC_NRDSETUP_(2) | AT91_SMC_NCS_RDSETUP_(0));
++ at91_sys_write(AT91_SMC_PULSE(3),
++ AT91_SMC_NWEPULSE_(4) | AT91_SMC_NCS_WRPULSE_(3) |
++ AT91_SMC_NRDPULSE_(4) | AT91_SMC_NCS_RDPULSE_(3));
++ at91_sys_write(AT91_SMC_CYCLE(3),
++ AT91_SMC_NWECYCLE_(7) | AT91_SMC_NRDCYCLE_(7));
++ at91_sys_write(AT91_SMC_MODE(3),
++ AT91_SMC_READMODE | AT91_SMC_WRITEMODE |
++ AT91_SMC_EXNWMODE_DISABLE |
++#ifdef CFG_NAND_DBW_16
++ AT91_SMC_DBW_16 |
++#else /* CFG_NAND_DBW_8 */
++ AT91_SMC_DBW_8 |
++#endif
++ AT91_SMC_TDF_(3));
++
++ at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9260_ID_PIOC);
++
++ /* Configure RDY/BSY */
++ at91_set_gpio_input(AT91_PIN_PC13, 1);
++
++ /* Enable NandFlash */
++ at91_set_gpio_output(AT91_PIN_PC14, 1);
++}
++#endif
++
++#ifdef CONFIG_HAS_DATAFLASH
++static void at91sam9g20ek_spi_hw_init(void)
++{
++ at91_set_A_periph(AT91_PIN_PA3, 0); /* SPI0_NPCS0 */
++ at91_set_B_periph(AT91_PIN_PC11, 0); /* SPI0_NPCS1 */
++
++ at91_set_A_periph(AT91_PIN_PA0, 0); /* SPI0_MISO */
++ at91_set_A_periph(AT91_PIN_PA1, 0); /* SPI0_MOSI */
++ at91_set_A_periph(AT91_PIN_PA2, 0); /* SPI0_SPCK */
++
++ /* Enable clock */
++ at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9260_ID_SPI0);
++}
++#endif
++
++#ifdef CONFIG_MACB
++static void at91sam9g20ek_macb_hw_init(void)
++{
++ unsigned long rstc;
++
++ /* Enable clock */
++ at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9260_ID_EMAC);
++
++ /*
++ * Disable pull-up on:
++ * RXDV (PA17) => PHY normal mode (not Test mode)
++ * ERX0 (PA14) => PHY ADDR0
++ * ERX1 (PA15) => PHY ADDR1
++ * ERX2 (PA25) => PHY ADDR2
++ * ERX3 (PA26) => PHY ADDR3
++ * ECRS (PA28) => PHY ADDR4 => PHYADDR = 0x0
++ *
++ * PHY has internal pull-down
++ */
++ writel(pin_to_mask(AT91_PIN_PA14) |
++ pin_to_mask(AT91_PIN_PA15) |
++ pin_to_mask(AT91_PIN_PA17) |
++ pin_to_mask(AT91_PIN_PA25) |
++ pin_to_mask(AT91_PIN_PA26) |
++ pin_to_mask(AT91_PIN_PA28),
++ pin_to_controller(AT91_PIN_PA0) + PIO_PUDR);
++
++ rstc = at91_sys_read(AT91_RSTC_MR);
++
++ /* Need to reset PHY -> 500ms reset */
++ at91_sys_write(AT91_RSTC_MR, AT91_RSTC_KEY |
++ (AT91_RSTC_ERSTL & (0x0D << 8)) |
++ AT91_RSTC_URSTEN);
++
++ at91_sys_write(AT91_RSTC_CR, AT91_RSTC_KEY | AT91_RSTC_EXTRST);
++
++ /* Wait for end hardware reset */
++ while (!(at91_sys_read(AT91_RSTC_SR) & AT91_RSTC_NRSTL));
++
++ /* Restore NRST value */
++ at91_sys_write(AT91_RSTC_MR, AT91_RSTC_KEY |
++ (rstc) |
++ AT91_RSTC_URSTEN);
++
++ /* Re-enable pull-up */
++ writel(pin_to_mask(AT91_PIN_PA14) |
++ pin_to_mask(AT91_PIN_PA15) |
++ pin_to_mask(AT91_PIN_PA17) |
++ pin_to_mask(AT91_PIN_PA25) |
++ pin_to_mask(AT91_PIN_PA26) |
++ pin_to_mask(AT91_PIN_PA28),
++ pin_to_controller(AT91_PIN_PA0) + PIO_PUER);
++
++ at91_set_A_periph(AT91_PIN_PA19, 0); /* ETXCK_EREFCK */
++ at91_set_A_periph(AT91_PIN_PA17, 0); /* ERXDV */
++ at91_set_A_periph(AT91_PIN_PA14, 0); /* ERX0 */
++ at91_set_A_periph(AT91_PIN_PA15, 0); /* ERX1 */
++ at91_set_A_periph(AT91_PIN_PA18, 0); /* ERXER */
++ at91_set_A_periph(AT91_PIN_PA16, 0); /* ETXEN */
++ at91_set_A_periph(AT91_PIN_PA12, 0); /* ETX0 */
++ at91_set_A_periph(AT91_PIN_PA13, 0); /* ETX1 */
++ at91_set_A_periph(AT91_PIN_PA21, 0); /* EMDIO */
++ at91_set_A_periph(AT91_PIN_PA20, 0); /* EMDC */
++
++#ifndef CONFIG_RMII
++ at91_set_B_periph(AT91_PIN_PA28, 0); /* ECRS */
++ at91_set_B_periph(AT91_PIN_PA29, 0); /* ECOL */
++ at91_set_B_periph(AT91_PIN_PA25, 0); /* ERX2 */
++ at91_set_B_periph(AT91_PIN_PA26, 0); /* ERX3 */
++ at91_set_B_periph(AT91_PIN_PA27, 0); /* ERXCK */
++#if defined(CONFIG_AT91SAM9G20EK) || defined(CONFIG_AT91SAM9G20EK_2MMC)
++ /*
++ * use PA10, PA11 for ETX2, ETX3.
++ * PA23 and PA24 are for TWI EEPROM
++ */
++ at91_set_B_periph(AT91_PIN_PA10, 0); /* ETX2 */
++ at91_set_B_periph(AT91_PIN_PA11, 0); /* ETX3 */
++#else
++ at91_set_B_periph(AT91_PIN_PA23, 0); /* ETX2 */
++ at91_set_B_periph(AT91_PIN_PA24, 0); /* ETX3 */
++#endif
++ at91_set_B_periph(AT91_PIN_PA22, 0); /* ETXER */
++#endif
++
++}
++#endif
++
++int board_init(void)
++{
++ /* Enable Ctrlc */
++ console_init_f();
++
++ /* arch number of AT91SAM9G20EK-Board */
++#ifdef CONFIG_AT91SAM9G20EK_2MMC
++ gd->bd->bi_arch_number = MACH_TYPE_AT91SAM9G20EK_2MMC;
++#else
++ gd->bd->bi_arch_number = MACH_TYPE_AT91SAM9G20EK;
++#endif
++ /* adress of boot parameters */
++ gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
++
++ at91sam9g20ek_serial_hw_init();
++#ifdef CONFIG_CMD_NAND
++ at91sam9g20ek_nand_hw_init();
++#endif
++#ifdef CONFIG_HAS_DATAFLASH
++ at91sam9g20ek_spi_hw_init();
++#endif
++#ifdef CONFIG_MACB
++ at91sam9g20ek_macb_hw_init();
++#endif
++
++ return 0;
++}
++
++int dram_init(void)
++{
++ gd->bd->bi_dram[0].start = PHYS_SDRAM;
++ gd->bd->bi_dram[0].size = PHYS_SDRAM_SIZE;
++ return 0;
++}
++
++#ifdef CONFIG_RESET_PHY_R
++void reset_phy(void)
++{
++#ifdef CONFIG_MACB
++ /*
++ * Initialize ethernet HW addr prior to starting Linux,
++ * needed for nfsroot
++ */
++ eth_init(gd->bd);
++#endif
++}
++#endif
+diff -uprN u-boot-1.3.4-vanilla/board/atmel/at91sam9g20ek/config.mk u-boot-1.3.4/board/atmel/at91sam9g20ek/config.mk
+--- u-boot-1.3.4-vanilla/board/atmel/at91sam9g20ek/config.mk 1969-12-31 17:00:00.000000000 -0700
++++ u-boot-1.3.4/board/atmel/at91sam9g20ek/config.mk 2010-03-25 16:45:59.000000000 -0500
+@@ -0,0 +1 @@
++TEXT_BASE = 0x23f00000
+diff -uprN u-boot-1.3.4-vanilla/board/atmel/at91sam9g20ek/led.c u-boot-1.3.4/board/atmel/at91sam9g20ek/led.c
+--- u-boot-1.3.4-vanilla/board/atmel/at91sam9g20ek/led.c 1969-12-31 17:00:00.000000000 -0700
++++ u-boot-1.3.4/board/atmel/at91sam9g20ek/led.c 2010-03-25 18:48:37.000000000 -0500
+@@ -0,0 +1,69 @@
++/*
++ * (C) Copyright 2007-2008
++ * Stelian Pop <stelian.pop@leadtechdesign.com>
++ * Lead Tech Design <www.leadtechdesign.com>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#include <common.h>
++#include <asm/arch/at91sam9260.h>
++#include <asm/arch/at91_pmc.h>
++#include <asm/arch/gpio.h>
++#include <asm/arch/io.h>
++
++#ifdef CONFIG_AT91SAM9G20EK_2MMC
++#define RED_LED AT91_PIN_PB31 /* this is the power led */
++#define GREEN_LED AT91_PIN_PB30 /* this is the user led */
++#else
++#define RED_LED AT91_PIN_PA31 /* this is the power led */
++#define GREEN_LED AT91_PIN_PA30 /* this is the user led */
++#endif
++
++void red_LED_on(void)
++{
++ at91_set_gpio_value(RED_LED, 1);
++}
++
++void red_LED_off(void)
++{
++ at91_set_gpio_value(RED_LED, 0);
++}
++
++void green_LED_on(void)
++{
++ at91_set_gpio_value(GREEN_LED, 0);
++}
++
++void green_LED_off(void)
++{
++ at91_set_gpio_value(GREEN_LED, 1);
++}
++
++void coloured_LED_init(void)
++{
++ /* Enable clock */
++ at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9260_ID_PIOA);
++
++ at91_set_gpio_output(RED_LED, 1);
++ at91_set_gpio_output(GREEN_LED, 1);
++
++ at91_set_gpio_value(RED_LED, 0);
++ at91_set_gpio_value(GREEN_LED, 1);
++}
+diff -uprN u-boot-1.3.4-vanilla/board/atmel/at91sam9g20ek/Makefile u-boot-1.3.4/board/atmel/at91sam9g20ek/Makefile
+--- u-boot-1.3.4-vanilla/board/atmel/at91sam9g20ek/Makefile 1969-12-31 17:00:00.000000000 -0700
++++ u-boot-1.3.4/board/atmel/at91sam9g20ek/Makefile 2010-03-25 16:45:59.000000000 -0500
+@@ -0,0 +1,57 @@
++#
++# (C) Copyright 2003-2008
++# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
++#
++# (C) Copyright 2008
++# Stelian Pop <stelian.pop@leadtechdesign.com>
++# Lead Tech Design <www.leadtechdesign.com>
++#
++# See file CREDITS for list of people who contributed to this
++# project.
++#
++# This program is free software; you can redistribute it and/or
++# modify it under the terms of the GNU General Public License as
++# published by the Free Software Foundation; either version 2 of
++# the License, or (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++# MA 02111-1307 USA
++#
++
++include $(TOPDIR)/config.mk
++
++LIB = $(obj)lib$(BOARD).a
++
++COBJS-y += at91sam9g20ek.o
++COBJS-y += led.o
++COBJS-y += partition.o
++COBJS-$(CONFIG_CMD_NAND) += nand.o
++
++SRCS := $(SOBJS:.o=.S) $(COBJS-y:.o=.c)
++OBJS := $(addprefix $(obj),$(COBJS-y))
++SOBJS := $(addprefix $(obj),$(SOBJS))
++
++$(LIB): $(obj).depend $(OBJS) $(SOBJS)
++ $(AR) $(ARFLAGS) $@ $(OBJS) $(SOBJS)
++
++clean:
++ rm -f $(SOBJS) $(OBJS)
++
++distclean: clean
++ rm -f $(LIB) core *.bak $(obj).depend
++
++#########################################################################
++
++# defines $(obj).depend target
++include $(SRCTREE)/rules.mk
++
++sinclude $(obj).depend
++
++#########################################################################
+diff -uprN u-boot-1.3.4-vanilla/board/atmel/at91sam9g20ek/nand.c u-boot-1.3.4/board/atmel/at91sam9g20ek/nand.c
+--- u-boot-1.3.4-vanilla/board/atmel/at91sam9g20ek/nand.c 1969-12-31 17:00:00.000000000 -0700
++++ u-boot-1.3.4/board/atmel/at91sam9g20ek/nand.c 2010-03-25 16:45:59.000000000 -0500
+@@ -0,0 +1,79 @@
++/*
++ * (C) Copyright 2007-2008
++ * Stelian Pop <stelian.pop@leadtechdesign.com>
++ * Lead Tech Design <www.leadtechdesign.com>
++ *
++ * (C) Copyright 2006 ATMEL Rousset, Lacressonniere Nicolas
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#include <common.h>
++#include <asm/arch/at91sam9260.h>
++#include <asm/arch/gpio.h>
++#include <asm/arch/at91_pio.h>
++
++#include <nand.h>
++
++/*
++ * hardware specific access to control-lines
++ */
++#define MASK_ALE (1 << 21) /* our ALE is AD21 */
++#define MASK_CLE (1 << 22) /* our CLE is AD22 */
++
++static void at91sam9g20ek_nand_hwcontrol(struct mtd_info *mtd, int cmd)
++{
++ struct nand_chip *this = mtd->priv;
++ ulong IO_ADDR_W = (ulong) this->IO_ADDR_W;
++
++ IO_ADDR_W &= ~(MASK_ALE|MASK_CLE);
++ switch (cmd) {
++ case NAND_CTL_SETCLE:
++ IO_ADDR_W |= MASK_CLE;
++ break;
++ case NAND_CTL_SETALE:
++ IO_ADDR_W |= MASK_ALE;
++ break;
++ case NAND_CTL_CLRNCE:
++ at91_set_gpio_value(AT91_PIN_PC14, 1);
++ break;
++ case NAND_CTL_SETNCE:
++ at91_set_gpio_value(AT91_PIN_PC14, 0);
++ break;
++ }
++ this->IO_ADDR_W = (void *) IO_ADDR_W;
++}
++
++static int at91sam9g20ek_nand_ready(struct mtd_info *mtd)
++{
++ return at91_get_gpio_value(AT91_PIN_PC13);
++}
++
++int board_nand_init(struct nand_chip *nand)
++{
++ nand->eccmode = NAND_ECC_SOFT;
++#ifdef CFG_NAND_DBW_16
++ nand->options = NAND_BUSWIDTH_16;
++#endif
++ nand->hwcontrol = at91sam9g20ek_nand_hwcontrol;
++ nand->dev_ready = at91sam9g20ek_nand_ready;
++ nand->chip_delay = 20;
++
++ return 0;
++}
+diff -uprN u-boot-1.3.4-vanilla/board/atmel/at91sam9g20ek/partition.c u-boot-1.3.4/board/atmel/at91sam9g20ek/partition.c
+--- u-boot-1.3.4-vanilla/board/atmel/at91sam9g20ek/partition.c 1969-12-31 17:00:00.000000000 -0700
++++ u-boot-1.3.4/board/atmel/at91sam9g20ek/partition.c 2010-03-25 16:45:59.000000000 -0500
+@@ -0,0 +1,40 @@
++/*
++ * (C) Copyright 2008
++ * Ulf Samuelsson <ulf@atmel.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.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ *
++ */
++#include <common.h>
++#include <config.h>
++#include <asm/hardware.h>
++#include <dataflash.h>
++
++AT91S_DATAFLASH_INFO dataflash_info[CFG_MAX_DATAFLASH_BANKS];
++
++struct dataflash_addr cs[CFG_MAX_DATAFLASH_BANKS] = {
++ {CFG_DATAFLASH_LOGIC_ADDR_CS0, 0}, /* Logical adress, CS */
++ {CFG_DATAFLASH_LOGIC_ADDR_CS1, 1}
++};
++
++/*define the area offsets*/
++dataflash_protect_t area_list[NB_DATAFLASH_AREA] = {
++ {0x00000000, 0x000041FF, FLAG_PROTECT_SET, 0, "Bootstrap"},
++ {0x00004200, 0x000083FF, FLAG_PROTECT_CLEAR, 0, "Environment"},
++ {0x00008400, 0x00041FFF, FLAG_PROTECT_SET, 0, "U-Boot"},
++ {0x00042000, 0x00251FFF, FLAG_PROTECT_CLEAR, 0, "Kernel"},
++ {0x00252000, 0xFFFFFFFF, FLAG_PROTECT_CLEAR, 0, "FS"},
++};
+diff -uprN u-boot-1.3.4-vanilla/board/atmel/at91sam9m10g45ek/at91sam9m10g45ek.c u-boot-1.3.4/board/atmel/at91sam9m10g45ek/at91sam9m10g45ek.c
+--- u-boot-1.3.4-vanilla/board/atmel/at91sam9m10g45ek/at91sam9m10g45ek.c 1969-12-31 17:00:00.000000000 -0700
++++ u-boot-1.3.4/board/atmel/at91sam9m10g45ek/at91sam9m10g45ek.c 2010-03-25 16:45:59.000000000 -0500
+@@ -0,0 +1,324 @@
++/*
++ * (C) Copyright 2007-2008
++ * Stelian Pop <stelian.pop@leadtechdesign.com>
++ * Lead Tech Design <www.leadtechdesign.com>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#include <common.h>
++#include <asm/sizes.h>
++#include <asm/arch/at91sam9g45.h>
++#include <asm/arch/at91sam9g45_matrix.h>
++#include <asm/arch/at91sam9_smc.h>
++#include <asm/arch/at91_pmc.h>
++#include <asm/arch/at91_rstc.h>
++#include <asm/arch/gpio.h>
++#include <asm/arch/io.h>
++#include <lcd.h>
++#include <atmel_lcdc.h>
++#if defined(CONFIG_RESET_PHY_R) && defined(CONFIG_MACB)
++#include <net.h>
++#endif
++
++DECLARE_GLOBAL_DATA_PTR;
++
++/* ------------------------------------------------------------------------- */
++/*
++ * Miscelaneous platform dependent initialisations
++ */
++
++static void at91samm10g45ek_serial_hw_init(void)
++{
++#ifdef CONFIG_USART0
++ at91_set_A_periph(AT91_PIN_PB19, 1); /* TXD0 */
++ at91_set_A_periph(AT91_PIN_PB18, 0); /* RXD0 */
++ at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9G45_ID_US0);
++#endif
++
++#ifdef CONFIG_USART1
++ at91_set_A_periph(AT91_PIN_PB4, 1); /* TXD1 */
++ at91_set_A_periph(AT91_PIN_PB5, 0); /* RXD1 */
++ at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9G45_ID_US1);
++#endif
++
++#ifdef CONFIG_USART2
++ at91_set_A_periph(AT91_PIN_PD6, 1); /* TXD2 */
++ at91_set_A_periph(AT91_PIN_PD7, 0); /* RXD2 */
++ at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9G45_ID_US2);
++#endif
++
++#ifdef CONFIG_USART3 /* DBGU */
++ at91_set_A_periph(AT91_PIN_PB12, 0); /* DRXD */
++ at91_set_A_periph(AT91_PIN_PB13, 1); /* DTXD */
++ at91_sys_write(AT91_PMC_PCER, 1 << AT91_ID_SYS);
++#endif
++}
++
++#ifdef CONFIG_CMD_NAND
++static void at91samm10g45ek_nand_hw_init(void)
++{
++ unsigned long csa;
++
++ /* Enable CS3 */
++ csa = at91_sys_read(AT91_MATRIX_EBICSA);
++ at91_sys_write(AT91_MATRIX_EBICSA,
++ csa | AT91_MATRIX_EBI_CS3A_SMC_SMARTMEDIA);
++
++ /* Configure SMC CS3 for NAND/SmartMedia */
++ at91_sys_write(AT91_SMC_SETUP(3),
++ AT91_SMC_NWESETUP_(1) | AT91_SMC_NCS_WRSETUP_(0) |
++ AT91_SMC_NRDSETUP_(1) | AT91_SMC_NCS_RDSETUP_(0));
++ at91_sys_write(AT91_SMC_PULSE(3),
++ AT91_SMC_NWEPULSE_(4) | AT91_SMC_NCS_WRPULSE_(3) |
++ AT91_SMC_NRDPULSE_(3) | AT91_SMC_NCS_RDPULSE_(2));
++ at91_sys_write(AT91_SMC_CYCLE(3),
++ AT91_SMC_NWECYCLE_(7) | AT91_SMC_NRDCYCLE_(4));
++ at91_sys_write(AT91_SMC_MODE(3),
++ AT91_SMC_READMODE | AT91_SMC_WRITEMODE |
++ AT91_SMC_EXNWMODE_DISABLE |
++#ifdef CFG_NAND_DBW_16
++ AT91_SMC_DBW_16 |
++#else /* CFG_NAND_DBW_8 */
++ AT91_SMC_DBW_8 |
++#endif
++ AT91_SMC_TDF_(3));
++
++ at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9G45_ID_PIOC);
++
++ /* Configure RDY/BSY */
++ at91_set_gpio_input(AT91_PIN_PC8, 1);
++
++ /* Enable NandFlash */
++ at91_set_gpio_output(AT91_PIN_PC14, 1);
++}
++#endif
++
++#ifdef CONFIG_HAS_DATAFLASH
++static void at91samm10g45ek_spi_hw_init(void)
++{
++ at91_set_B_periph(AT91_PIN_PB3, 0); /* SPI0_NPCS0 */
++
++ at91_set_B_periph(AT91_PIN_PB0, 0); /* SPI0_MISO */
++ at91_set_B_periph(AT91_PIN_PB1, 0); /* SPI0_MOSI */
++ at91_set_B_periph(AT91_PIN_PB2, 0); /* SPI0_SPCK */
++
++ /* Enable clock */
++ at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9G45_ID_SPI0);
++}
++#endif
++
++#ifdef CONFIG_MACB
++static void at91samm10g45ek_macb_hw_init(void)
++{
++ unsigned long rstc;
++
++ /* Enable clock */
++ at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9G45_ID_EMAC);
++
++ /*
++ * Disable pull-up on:
++ * RXDV (PA15) => PHY normal mode (not Test mode)
++ * ERX0 (PA12) => PHY ADDR0
++ * ERX1 (PA13) => PHY ADDR1 => PHYADDR = 0x0
++ *
++ * PHY has internal pull-down
++ */
++ writel(pin_to_mask(AT91_PIN_PA15) |
++ pin_to_mask(AT91_PIN_PA12) |
++ pin_to_mask(AT91_PIN_PA13),
++ pin_to_controller(AT91_PIN_PA0) + PIO_PUDR);
++
++ rstc = at91_sys_read(AT91_RSTC_MR);
++
++ /* Need to reset PHY -> 500ms reset */
++ at91_sys_write(AT91_RSTC_MR, AT91_RSTC_KEY |
++ (AT91_RSTC_ERSTL & (0x0D << 8)) |
++ AT91_RSTC_URSTEN);
++
++ at91_sys_write(AT91_RSTC_CR, AT91_RSTC_KEY | AT91_RSTC_EXTRST);
++
++ /* Wait for end hardware reset */
++ while (!(at91_sys_read(AT91_RSTC_SR) & AT91_RSTC_NRSTL));
++
++ /* Restore NRST value */
++ at91_sys_write(AT91_RSTC_MR, AT91_RSTC_KEY |
++ (rstc) |
++ AT91_RSTC_URSTEN);
++
++ /* Re-enable pull-up */
++ writel(pin_to_mask(AT91_PIN_PA15) |
++ pin_to_mask(AT91_PIN_PA12) |
++ pin_to_mask(AT91_PIN_PA13),
++ pin_to_controller(AT91_PIN_PA0) + PIO_PUER);
++
++ at91_set_A_periph(AT91_PIN_PA17, 0); /* ETXCK_EREFCK */
++ at91_set_A_periph(AT91_PIN_PA15, 0); /* ERXDV */
++ at91_set_A_periph(AT91_PIN_PA12, 0); /* ERX0 */
++ at91_set_A_periph(AT91_PIN_PA13, 0); /* ERX1 */
++ at91_set_A_periph(AT91_PIN_PA16, 0); /* ERXER */
++ at91_set_A_periph(AT91_PIN_PA14, 0); /* ETXEN */
++ at91_set_A_periph(AT91_PIN_PA10, 0); /* ETX0 */
++ at91_set_A_periph(AT91_PIN_PA11, 0); /* ETX1 */
++ at91_set_A_periph(AT91_PIN_PA19, 0); /* EMDIO */
++ at91_set_A_periph(AT91_PIN_PA18, 0); /* EMDC */
++
++#ifndef CONFIG_RMII
++ at91_set_B_periph(AT91_PIN_PA29, 0); /* ECRS */
++ at91_set_B_periph(AT91_PIN_PA30, 0); /* ECOL */
++ at91_set_B_periph(AT91_PIN_PA8, 0); /* ERX2 */
++ at91_set_B_periph(AT91_PIN_PA9, 0); /* ERX3 */
++ at91_set_B_periph(AT91_PIN_PA28, 0); /* ERXCK */
++ at91_set_B_periph(AT91_PIN_PA6, 0); /* ETX2 */
++ at91_set_B_periph(AT91_PIN_PA7, 0); /* ETX3 */
++ at91_set_B_periph(AT91_PIN_PA27, 0); /* ETXER */
++#endif
++
++}
++#endif
++
++#ifdef CONFIG_LCD
++vidinfo_t panel_info = {
++ vl_col: 480,
++ vl_row: 272,
++ vl_clk: 125000,
++ vl_sync: ATMEL_LCDC_INVLINE_NORMAL |
++ ATMEL_LCDC_INVFRAME_NORMAL,
++ vl_bpix: 3,
++ vl_tft: 1,
++ vl_hsync_len: 41,
++ vl_left_margin: 2,
++ vl_right_margin:2,
++ vl_vsync_len: 1,
++ vl_upper_margin:2,
++ vl_lower_margin:2,
++ mmio: AT91SAM9G45_LCDC_BASE,
++};
++
++void lcd_enable(void)
++{
++ at91_set_gpio_value(AT91_PIN_PE6, 1); /* power up */
++}
++
++void lcd_disable(void)
++{
++ at91_set_gpio_value(AT91_PIN_PE6, 0); /* power down */
++}
++
++static void at91samm10g45ek_lcd_hw_init(void)
++{
++ at91_set_A_periph(AT91_PIN_PE0, 0); /* LCDDPWR */
++
++ at91_set_A_periph(AT91_PIN_PE4, 0); /* LCDHSYNC */
++ at91_set_A_periph(AT91_PIN_PE5, 0); /* LCDDOTCK */
++
++ at91_set_gpio_input(AT91_PIN_PE6, 0); /* LCDDEN */
++
++ at91_set_A_periph(AT91_PIN_PE7, 0); /* LCDD0 */
++ at91_set_A_periph(AT91_PIN_PE8, 0); /* LCDD1 */
++ at91_set_A_periph(AT91_PIN_PE9, 0); /* LCDD2 */
++ at91_set_A_periph(AT91_PIN_PE10, 0); /* LCDD3 */
++ at91_set_A_periph(AT91_PIN_PE11, 0); /* LCDD4 */
++ at91_set_A_periph(AT91_PIN_PE12, 0); /* LCDD5 */
++ at91_set_A_periph(AT91_PIN_PE13, 0); /* LCDD6 */
++ at91_set_A_periph(AT91_PIN_PE14, 0); /* LCDD7 */
++ at91_set_A_periph(AT91_PIN_PE15, 0); /* LCDD8 */
++ at91_set_A_periph(AT91_PIN_PE16, 0); /* LCDD9 */
++ at91_set_A_periph(AT91_PIN_PE17, 0); /* LCDD10 */
++ at91_set_A_periph(AT91_PIN_PE18, 0); /* LCDD11 */
++ at91_set_A_periph(AT91_PIN_PE19, 0); /* LCDD12 */
++ at91_set_B_periph(AT91_PIN_PE20, 0); /* LCDD13 */
++ at91_set_A_periph(AT91_PIN_PE21, 0); /* LCDD14 */
++ at91_set_A_periph(AT91_PIN_PE22, 0); /* LCDD15 */
++ at91_set_A_periph(AT91_PIN_PE23, 0); /* LCDD16 */
++ at91_set_A_periph(AT91_PIN_PE24, 0); /* LCDD17 */
++ at91_set_A_periph(AT91_PIN_PE25, 0); /* LCDD18 */
++ at91_set_A_periph(AT91_PIN_PE26, 0); /* LCDD19 */
++ at91_set_A_periph(AT91_PIN_PE27, 0); /* LCDD20 */
++ at91_set_B_periph(AT91_PIN_PE28, 0); /* LCDD21 */
++ at91_set_A_periph(AT91_PIN_PE29, 0); /* LCDD22 */
++ at91_set_A_periph(AT91_PIN_PE30, 0); /* LCDD23 */
++
++ at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9G45_ID_LCDC);
++
++ gd->fb_base = AT91SAM9G45_SRAM_BASE;
++}
++#endif
++
++#if defined(CONFIG_MACB) && defined(CONFIG_CMD_NET)
++extern int macb_eth_initialize(int id, void *regs, unsigned int phy_addr);
++
++int board_eth_init(bd_t *bis)
++{
++ macb_eth_initialize(0, (void *)AT91SAM9G45_BASE_EMAC, 0x00);
++}
++#endif
++
++int board_init(void)
++{
++ /* Enable Ctrlc */
++ console_init_f();
++
++ /* arch number of AT91SAM9M10G45EK-Board */
++#ifdef CONFIG_AT91SAM9M10G45EK
++ gd->bd->bi_arch_number = MACH_TYPE_AT91SAM9M10G45EK;
++#elif defined CONFIG_AT91SAM9G45EKES
++ gd->bd->bi_arch_number = MACH_TYPE_AT91SAM9G45EKES;
++#elif defined CONFIG_AT91SAM9M10EKES
++ gd->bd->bi_arch_number = MACH_TYPE_AT91SAM9M10EKES;
++#endif
++ /* adress of boot parameters */
++ gd->bd->bi_boot_params = PHYS_SDRAM + 0x100;
++
++ at91samm10g45ek_serial_hw_init();
++#ifdef CONFIG_CMD_NAND
++ at91samm10g45ek_nand_hw_init();
++#endif
++#ifdef CONFIG_HAS_DATAFLASH
++ at91samm10g45ek_spi_hw_init();
++#endif
++#ifdef CONFIG_MACB
++ at91samm10g45ek_macb_hw_init();
++#endif
++
++#ifdef CONFIG_LCD
++ at91samm10g45ek_lcd_hw_init();
++#endif
++ return 0;
++}
++
++int dram_init(void)
++{
++ gd->bd->bi_dram[0].start = PHYS_SDRAM;
++ gd->bd->bi_dram[0].size = PHYS_SDRAM_SIZE;
++ return 0;
++}
++
++#ifdef CONFIG_RESET_PHY_R
++void reset_phy(void)
++{
++#ifdef CONFIG_MACB
++ /*
++ * Initialize ethernet HW addr prior to starting Linux,
++ * needed for nfsroot
++ */
++ eth_init(gd->bd);
++#endif
++}
++#endif
+diff -uprN u-boot-1.3.4-vanilla/board/atmel/at91sam9m10g45ek/config.mk u-boot-1.3.4/board/atmel/at91sam9m10g45ek/config.mk
+--- u-boot-1.3.4-vanilla/board/atmel/at91sam9m10g45ek/config.mk 1969-12-31 17:00:00.000000000 -0700
++++ u-boot-1.3.4/board/atmel/at91sam9m10g45ek/config.mk 2010-03-25 16:45:59.000000000 -0500
+@@ -0,0 +1 @@
++TEXT_BASE = 0x73f00000
+diff -uprN u-boot-1.3.4-vanilla/board/atmel/at91sam9m10g45ek/led.c u-boot-1.3.4/board/atmel/at91sam9m10g45ek/led.c
+--- u-boot-1.3.4-vanilla/board/atmel/at91sam9m10g45ek/led.c 1969-12-31 17:00:00.000000000 -0700
++++ u-boot-1.3.4/board/atmel/at91sam9m10g45ek/led.c 2010-03-25 16:45:59.000000000 -0500
+@@ -0,0 +1,64 @@
++/*
++ * (C) Copyright 2007-2008
++ * Stelian Pop <stelian.pop@leadtechdesign.com>
++ * Lead Tech Design <www.leadtechdesign.com>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#include <common.h>
++#include <asm/arch/at91sam9g45.h>
++#include <asm/arch/at91_pmc.h>
++#include <asm/arch/gpio.h>
++#include <asm/arch/io.h>
++
++#define RED_LED AT91_PIN_PD31 /* this is the user1 led */
++#define GREEN_LED AT91_PIN_PD0 /* this is the user2 led */
++
++void red_LED_on(void)
++{
++ at91_set_gpio_value(RED_LED, 1);
++}
++
++void red_LED_off(void)
++{
++ at91_set_gpio_value(RED_LED, 0);
++}
++
++void green_LED_on(void)
++{
++ at91_set_gpio_value(GREEN_LED, 0);
++}
++
++void green_LED_off(void)
++{
++ at91_set_gpio_value(GREEN_LED, 1);
++}
++
++void coloured_LED_init(void)
++{
++ /* Enable clock */
++ at91_sys_write(AT91_PMC_PCER, 1 << AT91SAM9G45_ID_PIODE);
++
++ at91_set_gpio_output(RED_LED, 1);
++ at91_set_gpio_output(GREEN_LED, 1);
++
++ at91_set_gpio_value(RED_LED, 0);
++ at91_set_gpio_value(GREEN_LED, 1);
++}
+diff -uprN u-boot-1.3.4-vanilla/board/atmel/at91sam9m10g45ek/Makefile u-boot-1.3.4/board/atmel/at91sam9m10g45ek/Makefile
+--- u-boot-1.3.4-vanilla/board/atmel/at91sam9m10g45ek/Makefile 1969-12-31 17:00:00.000000000 -0700
++++ u-boot-1.3.4/board/atmel/at91sam9m10g45ek/Makefile 2010-03-25 16:45:59.000000000 -0500
+@@ -0,0 +1,57 @@
++#
++# (C) Copyright 2003-2008
++# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
++#
++# (C) Copyright 2008
++# Stelian Pop <stelian.pop@leadtechdesign.com>
++# Lead Tech Design <www.leadtechdesign.com>
++#
++# See file CREDITS for list of people who contributed to this
++# project.
++#
++# This program is free software; you can redistribute it and/or
++# modify it under the terms of the GNU General Public License as
++# published by the Free Software Foundation; either version 2 of
++# the License, or (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++# MA 02111-1307 USA
++#
++
++include $(TOPDIR)/config.mk
++
++LIB = $(obj)lib$(BOARD).a
++
++COBJS-y += at91sam9m10g45ek.o
++COBJS-y += led.o
++COBJS-y += partition.o
++COBJS-$(CONFIG_CMD_NAND) += nand.o
++
++SRCS := $(SOBJS:.o=.S) $(COBJS-y:.o=.c)
++OBJS := $(addprefix $(obj),$(COBJS-y))
++SOBJS := $(addprefix $(obj),$(SOBJS))
++
++$(LIB): $(obj).depend $(OBJS) $(SOBJS)
++ $(AR) $(ARFLAGS) $@ $(OBJS) $(SOBJS)
++
++clean:
++ rm -f $(SOBJS) $(OBJS)
++
++distclean: clean
++ rm -f $(LIB) core *.bak $(obj).depend
++
++#########################################################################
++
++# defines $(obj).depend target
++include $(SRCTREE)/rules.mk
++
++sinclude $(obj).depend
++
++#########################################################################
+diff -uprN u-boot-1.3.4-vanilla/board/atmel/at91sam9m10g45ek/nand.c u-boot-1.3.4/board/atmel/at91sam9m10g45ek/nand.c
+--- u-boot-1.3.4-vanilla/board/atmel/at91sam9m10g45ek/nand.c 1969-12-31 17:00:00.000000000 -0700
++++ u-boot-1.3.4/board/atmel/at91sam9m10g45ek/nand.c 2010-03-25 16:45:59.000000000 -0500
+@@ -0,0 +1,79 @@
++/*
++ * (C) Copyright 2007-2008
++ * Stelian Pop <stelian.pop@leadtechdesign.com>
++ * Lead Tech Design <www.leadtechdesign.com>
++ *
++ * (C) Copyright 2006 ATMEL Rousset, Lacressonniere Nicolas
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#include <common.h>
++#include <asm/arch/at91sam9g45.h>
++#include <asm/arch/gpio.h>
++#include <asm/arch/at91_pio.h>
++
++#include <nand.h>
++
++/*
++ * hardware specific access to control-lines
++ */
++#define MASK_ALE (1 << 21) /* our ALE is AD21 */
++#define MASK_CLE (1 << 22) /* our CLE is AD22 */
++
++static void at91samm10g45ek_nand_hwcontrol(struct mtd_info *mtd, int cmd)
++{
++ struct nand_chip *this = mtd->priv;
++ ulong IO_ADDR_W = (ulong) this->IO_ADDR_W;
++
++ IO_ADDR_W &= ~(MASK_ALE|MASK_CLE);
++ switch (cmd) {
++ case NAND_CTL_SETCLE:
++ IO_ADDR_W |= MASK_CLE;
++ break;
++ case NAND_CTL_SETALE:
++ IO_ADDR_W |= MASK_ALE;
++ break;
++ case NAND_CTL_CLRNCE:
++ at91_set_gpio_value(AT91_PIN_PC14, 1);
++ break;
++ case NAND_CTL_SETNCE:
++ at91_set_gpio_value(AT91_PIN_PC14, 0);
++ break;
++ }
++ this->IO_ADDR_W = (void *) IO_ADDR_W;
++}
++
++static int at91samm10g45ek_nand_ready(struct mtd_info *mtd)
++{
++ return at91_get_gpio_value(AT91_PIN_PC8);
++}
++
++int board_nand_init(struct nand_chip *nand)
++{
++ nand->eccmode = NAND_ECC_SOFT;
++#ifdef CFG_NAND_DBW_16
++ nand->options = NAND_BUSWIDTH_16;
++#endif
++ nand->hwcontrol = at91samm10g45ek_nand_hwcontrol;
++ nand->dev_ready = at91samm10g45ek_nand_ready;
++ nand->chip_delay = 20;
++
++ return 0;
++}
+diff -uprN u-boot-1.3.4-vanilla/board/atmel/at91sam9m10g45ek/partition.c u-boot-1.3.4/board/atmel/at91sam9m10g45ek/partition.c
+--- u-boot-1.3.4-vanilla/board/atmel/at91sam9m10g45ek/partition.c 1969-12-31 17:00:00.000000000 -0700
++++ u-boot-1.3.4/board/atmel/at91sam9m10g45ek/partition.c 2010-03-25 16:45:59.000000000 -0500
+@@ -0,0 +1,39 @@
++/*
++ * (C) Copyright 2008
++ * Ulf Samuelsson <ulf@atmel.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.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ *
++ */
++#include <common.h>
++#include <config.h>
++#include <asm/hardware.h>
++#include <dataflash.h>
++
++AT91S_DATAFLASH_INFO dataflash_info[CFG_MAX_DATAFLASH_BANKS];
++
++struct dataflash_addr cs[CFG_MAX_DATAFLASH_BANKS] = {
++ {CFG_DATAFLASH_LOGIC_ADDR_CS0, 0}, /* Logical adress, CS */
++};
++
++/*define the area offsets*/
++dataflash_protect_t area_list[NB_DATAFLASH_AREA] = {
++ {0x00000000, 0x000041FF, FLAG_PROTECT_SET, 0, "Bootstrap"},
++ {0x00004200, 0x000083FF, FLAG_PROTECT_CLEAR, 0, "Environment"},
++ {0x00008400, 0x00041FFF, FLAG_PROTECT_SET, 0, "U-Boot"},
++ {0x00042000, 0x00251FFF, FLAG_PROTECT_CLEAR, 0, "Kernel"},
++ {0x00252000, 0xFFFFFFFF, FLAG_PROTECT_CLEAR, 0, "FS"},
++};
+diff -uprN u-boot-1.3.4-vanilla/cpu/arm926ejs/at91sam9/usb.c u-boot-1.3.4/cpu/arm926ejs/at91sam9/usb.c
+--- u-boot-1.3.4-vanilla/cpu/arm926ejs/at91sam9/usb.c 2008-08-12 09:08:38.000000000 -0500
++++ u-boot-1.3.4/cpu/arm926ejs/at91sam9/usb.c 2010-03-25 16:45:59.000000000 -0500
+@@ -33,7 +33,7 @@ int usb_cpu_init(void)
+ {
+ /* Enable USB host clock. */
+ at91_sys_write(AT91_PMC_PCER, 1 << AT91_ID_UHP);
+-#ifdef CONFIG_AT91SAM9261
++#if defined(CONFIG_AT91SAM9261) || defined(CONFIG_AT91SAM9G10)
+ at91_sys_write(AT91_PMC_SCER, AT91_PMC_UHP | AT91_PMC_HCK0);
+ #else
+ at91_sys_write(AT91_PMC_SCER, AT91_PMC_UHP);
+@@ -46,7 +46,7 @@ int usb_cpu_stop(void)
+ {
+ /* Disable USB host clock. */
+ at91_sys_write(AT91_PMC_PCDR, 1 << AT91_ID_UHP);
+-#ifdef CONFIG_AT91SAM9261
++#if defined(CONFIG_AT91SAM9261) || defined(CONFIG_AT91SAM9G10)
+ at91_sys_write(AT91_PMC_SCDR, AT91_PMC_UHP | AT91_PMC_HCK0);
+ #else
+ at91_sys_write(AT91_PMC_SCDR, AT91_PMC_UHP);
+diff -uprN u-boot-1.3.4-vanilla/doc/README.at91 u-boot-1.3.4/doc/README.at91
+--- u-boot-1.3.4-vanilla/doc/README.at91 1969-12-31 17:00:00.000000000 -0700
++++ u-boot-1.3.4/doc/README.at91 2010-03-25 16:45:59.000000000 -0500
+@@ -0,0 +1,88 @@
++Atmel AT91 Evaluation kits
++
++http://atmel.com/dyn/products/tools.asp?family_id=605#1443
++
++------------------------------------------------------------------------------
++AT91SAM9260EK
++------------------------------------------------------------------------------
++
++Memory map
++ 0x20000000 - 23FFFFFF SDRAM (64 MB)
++ 0xC0000000 - Cxxxxxxx Atmel Dataflash card (J13)
++ 0xD0000000 - Dxxxxxxx Soldered Atmel Dataflash
++
++Environment variables
++
++ U-Boot environment variables can be stored at different places:
++ - Dataflash on SPI chip select 1 (default)
++ - Dataflash on SPI chip select 0 (dataflash card)
++ - Nand flash.
++
++ You can choose your storage location at config step (here for at91sam9260ek) :
++ make at91sam9260ek_config - use data flash (spi cs1) (default)
++ make at91sam9260ek_nandflash_config - use nand flash
++ make at91sam9260ek_dataflash_cs0_config - use data flash (spi cs0)
++ make at91sam9260ek_dataflash_cs1_config - use data flash (spi cs1)
++
++
++------------------------------------------------------------------------------
++AT91SAM9261EK
++------------------------------------------------------------------------------
++
++Memory map
++ 0x20000000 - 23FFFFFF SDRAM (64 MB)
++ 0xC0000000 - Cxxxxxxx Soldered Atmel Dataflash
++ 0xD0000000 - Dxxxxxxx Atmel Dataflash card (J22)
++
++Environment variables
++
++ U-Boot environment variables can be stored at different places:
++ - Dataflash on SPI chip select 0 (default)
++ - Dataflash on SPI chip select 3 (dataflash card)
++ - Nand flash.
++
++ You can choose your storage location at config step (here for at91sam9260ek) :
++ make at91sam9261ek_config - use data flash (spi cs0) (default)
++ make at91sam9261ek_nandflash_config - use nand flash
++ make at91sam9261ek_dataflash_cs0_config - use data flash (spi cs0)
++ make at91sam9261ek_dataflash_cs3_config - use data flash (spi cs3)
++
++
++------------------------------------------------------------------------------
++AT91SAM9263EK
++------------------------------------------------------------------------------
++
++Memory map
++ 0x20000000 - 23FFFFFF SDRAM (64 MB)
++ 0xC0000000 - Cxxxxxxx Atmel Dataflash card (J9)
++
++Environment variables
++
++ U-Boot environment variables can be stored at different places:
++ - Dataflash on SPI chip select 0 (dataflash card)
++ - Nand flash.
++
++ You can choose your storage location at config step (here for at91sam9260ek) :
++ make at91sam9263ek_config - use data flash (spi cs0) (default)
++ make at91sam9263ek_nandflash_config - use nand flash
++ make at91sam9263ek_dataflash_cs0_config - use data flash (spi cs0)
++
++
++------------------------------------------------------------------------------
++AT91SAM9RLEK
++------------------------------------------------------------------------------
++
++Memory map
++ 0x20000000 - 23FFFFFF SDRAM (64 MB)
++ 0xC0000000 - Cxxxxxxx Soldered Atmel Dataflash
++
++Environment variables
++
++ U-Boot environment variables can be stored at different places:
++ - Dataflash on SPI chip select 0
++ - Nand flash.
++
++ You can choose your storage location at config step (here for at91sam9260ek) :
++ make at91sam9263ek_config - use data flash (spi cs0) (default)
++ make at91sam9263ek_nandflash_config - use nand flash
++ make at91sam9263ek_dataflash_cs0_config - use data flash (spi cs0)
+diff -uprN u-boot-1.3.4-vanilla/drivers/net/macb.c u-boot-1.3.4/drivers/net/macb.c
+--- u-boot-1.3.4-vanilla/drivers/net/macb.c 2008-08-12 09:08:38.000000000 -0500
++++ u-boot-1.3.4/drivers/net/macb.c 2010-05-04 14:32:15.000000000 -0500
+@@ -55,7 +55,7 @@
+ #define CFG_MACB_RX_RING_SIZE (CFG_MACB_RX_BUFFER_SIZE / 128)
+ #define CFG_MACB_TX_RING_SIZE 16
+ #define CFG_MACB_TX_TIMEOUT 1000
+-#define CFG_MACB_AUTONEG_TIMEOUT 5000000
++#define CFG_MACB_AUTONEG_TIMEOUT 3000000
+
+ struct macb_dma_desc {
+ u32 addr;
+@@ -290,11 +290,12 @@ static int macb_recv(struct eth_device *
+ return 0;
+ }
+
+-static void macb_phy_reset(struct macb_device *macb)
++static u16 macb_phy_reset(struct macb_device *macb)
+ {
+ struct eth_device *netdev = &macb->netdev;
+ int i;
+- u16 status, adv;
++ u16 status = 0;
++ u16 adv;
+
+ adv = ADVERTISE_CSMA | ADVERTISE_ALL;
+ macb_mdio_write(macb, MII_ADVERTISE, adv);
+@@ -314,6 +315,8 @@ static void macb_phy_reset(struct macb_d
+ else
+ printf("%s: Autonegotiation timed out (status=0x%04x)\n",
+ netdev->name, status);
++
++ return status;
+ }
+
+ static int macb_phy_init(struct macb_device *macb)
+@@ -334,14 +337,7 @@ static int macb_phy_init(struct macb_dev
+ status = macb_mdio_read(macb, MII_BMSR);
+ if (!(status & BMSR_LSTATUS)) {
+ /* Try to re-negotiate if we don't have link already. */
+- macb_phy_reset(macb);
+-
+- for (i = 0; i < CFG_MACB_AUTONEG_TIMEOUT / 100; i++) {
+- status = macb_mdio_read(macb, MII_BMSR);
+- if (status & BMSR_LSTATUS)
+- break;
+- udelay(100);
+- }
++ status = macb_phy_reset(macb);
+ }
+
+ if (!(status & BMSR_LSTATUS)) {
+@@ -414,18 +410,16 @@ static int macb_init(struct eth_device *
+
+ /* choose RMII or MII mode. This depends on the board */
+ #ifdef CONFIG_RMII
+-#if defined(CONFIG_AT91CAP9) || defined(CONFIG_AT91SAM9260) || \
+- defined(CONFIG_AT91SAM9263)
+- macb_writel(macb, USRIO, MACB_BIT(RMII) | MACB_BIT(CLKEN));
+-#else
++#if defined(CONFIG_AVR32)
+ macb_writel(macb, USRIO, 0);
+-#endif
+ #else
+-#if defined(CONFIG_AT91CAP9) || defined(CONFIG_AT91SAM9260) || \
+- defined(CONFIG_AT91SAM9263)
+- macb_writel(macb, USRIO, MACB_BIT(CLKEN));
++ macb_writel(macb, USRIO, MACB_BIT(RMII) | MACB_BIT(CLKEN));
++#endif
+ #else
++#if defined(CONFIG_AVR32)
+ macb_writel(macb, USRIO, MACB_BIT(MII));
++#else
++ macb_writel(macb, USRIO, MACB_BIT(CLKEN));
+ #endif
+ #endif /* CONFIG_RMII */
+
+diff -uprN u-boot-1.3.4-vanilla/include/asm-arm/arch-at91sam9/at91sam9g45.h u-boot-1.3.4/include/asm-arm/arch-at91sam9/at91sam9g45.h
+--- u-boot-1.3.4-vanilla/include/asm-arm/arch-at91sam9/at91sam9g45.h 1969-12-31 17:00:00.000000000 -0700
++++ u-boot-1.3.4/include/asm-arm/arch-at91sam9/at91sam9g45.h 2010-03-25 16:45:59.000000000 -0500
+@@ -0,0 +1,135 @@
++/*
++ * Chip-specific header file for the AT91SAM9M1x family
++ *
++ * Copyright (C) 2008 Atmel Corporation.
++ *
++ * Common definitions.
++ * Based on AT91SAM9G45 preliminary datasheet.
++ *
++ * 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.
++ */
++
++#ifndef AT91SAM9G45_H
++#define AT91SAM9G45_H
++
++/*
++ * Peripheral identifiers/interrupts.
++ */
++#define AT91_ID_FIQ 0 /* Advanced Interrupt Controller (FIQ) */
++#define AT91_ID_SYS 1 /* System Controller Interrupt */
++#define AT91SAM9G45_ID_PIOA 2 /* Parallel I/O Controller A */
++#define AT91SAM9G45_ID_PIOB 3 /* Parallel I/O Controller B */
++#define AT91SAM9G45_ID_PIOC 4 /* Parallel I/O Controller C */
++#define AT91SAM9G45_ID_PIODE 5 /* Parallel I/O Controller D and E */
++#define AT91SAM9G45_ID_TRNG 6 /* True Random Number Generator */
++#define AT91SAM9G45_ID_US0 7 /* USART 0 */
++#define AT91SAM9G45_ID_US1 8 /* USART 1 */
++#define AT91SAM9G45_ID_US2 9 /* USART 2 */
++#define AT91SAM9G45_ID_US3 10 /* USART 3 */
++#define AT91SAM9G45_ID_MCI0 11 /* High Speed Multimedia Card Interface 0 */
++#define AT91SAM9G45_ID_TWI0 12 /* Two-Wire Interface 0 */
++#define AT91SAM9G45_ID_TWI1 13 /* Two-Wire Interface 1 */
++#define AT91SAM9G45_ID_SPI0 14 /* Serial Peripheral Interface 0 */
++#define AT91SAM9G45_ID_SPI1 15 /* Serial Peripheral Interface 1 */
++#define AT91SAM9G45_ID_SSC0 16 /* Synchronous Serial Controller 0 */
++#define AT91SAM9G45_ID_SSC1 17 /* Synchronous Serial Controller 1 */
++#define AT91SAM9G45_ID_TCB 18 /* Timer Counter 0, 1, 2, 3, 4 and 5 */
++#define AT91SAM9G45_ID_PWMC 19 /* Pulse Width Modulation Controller */
++#define AT91SAM9G45_ID_TSC 20 /* Touch Screen ADC Controller */
++#define AT91SAM9G45_ID_DMA 21 /* DMA Controller */
++#define AT91SAM9G45_ID_UHPHS 22 /* USB Host High Speed */
++#define AT91SAM9G45_ID_LCDC 23 /* LCD Controller */
++#define AT91SAM9G45_ID_AC97C 24 /* AC97 Controller */
++#define AT91SAM9G45_ID_EMAC 25 /* Ethernet MAC */
++#define AT91SAM9G45_ID_ISI 26 /* Image Sensor Interface */
++#define AT91SAM9G45_ID_UDPHS 27 /* USB Device High Speed */
++#define AT91SAM9G45_ID_AESTDESSHA 28 /* AES + T-DES + SHA */
++#define AT91SAM9G45_ID_MCI1 29 /* High Speed Multimedia Card Interface 1 */
++#define AT91SAM9G45_ID_VDEC 30 /* Video Decoder */
++#define AT91SAM9G45_ID_IRQ0 31 /* Advanced Interrupt Controller */
++
++/*
++ * User Peripheral physical base addresses.
++ */
++#define AT91SAM9G45_BASE_UDPHS 0xfff78000
++#define AT91SAM9G45_BASE_TC0 0xfff7c000
++#define AT91SAM9G45_BASE_TC1 0xfff7c040
++#define AT91SAM9G45_BASE_TC2 0xfff7c080
++#define AT91SAM9G45_BASE_MCI0 0xfff80000
++#define AT91SAM9G45_BASE_TWI0 0xfff84000
++#define AT91SAM9G45_BASE_TWI1 0xfff88000
++#define AT91SAM9G45_BASE_US0 0xfff8c000
++#define AT91SAM9G45_BASE_US1 0xfff90000
++#define AT91SAM9G45_BASE_US2 0xfff94000
++#define AT91SAM9G45_BASE_US3 0xfff98000
++#define AT91SAM9G45_BASE_SSC0 0xfff9c000
++#define AT91SAM9G45_BASE_SSC1 0xfffa0000
++#define AT91SAM9G45_BASE_SPI0 0xfffa4000
++#define AT91SAM9G45_BASE_SPI1 0xfffa8000
++#define AT91SAM9G45_BASE_AC97C 0xfffac000
++#define AT91SAM9G45_BASE_TSC 0xfffb0000
++#define AT91SAM9G45_BASE_ISI 0xfffb4000
++#define AT91SAM9G45_BASE_PWMC 0xfffb8000
++#define AT91SAM9G45_BASE_EMAC 0xfffbc000
++#define AT91SAM9G45_BASE_AES 0xfffc0000
++#define AT91SAM9G45_BASE_TDES 0xfffc4000
++#define AT91SAM9G45_BASE_SHA 0xfffc8000
++#define AT91SAM9G45_BASE_TRNG 0xfffcc000
++#define AT91SAM9G45_BASE_MCI1 0xfffd0000
++#define AT91SAM9G45_BASE_TC3 0xfffd4000
++#define AT91SAM9G45_BASE_TC4 0xfffd4040
++#define AT91SAM9G45_BASE_TC5 0xfffd4080
++#define AT91_BASE_SYS 0xffffe200
++
++/*
++ * System Peripherals (offset from AT91_BASE_SYS)
++ */
++#define AT91_ECC (0xffffe200 - AT91_BASE_SYS)
++#define AT91_DDRSDRC1 (0xffffe400 - AT91_BASE_SYS)
++#define AT91_DDRSDRC0 (0xffffe600 - AT91_BASE_SYS)
++#define AT91_SMC (0xffffe800 - AT91_BASE_SYS)
++#define AT91_MATRIX (0xffffea00 - AT91_BASE_SYS)
++#define AT91_DMA (0xffffec00 - AT91_BASE_SYS)
++#define AT91_DBGU (0xffffee00 - AT91_BASE_SYS)
++#define AT91_AIC (0xfffff000 - AT91_BASE_SYS)
++#define AT91_PIOA (0xfffff200 - AT91_BASE_SYS)
++#define AT91_PIOB (0xfffff400 - AT91_BASE_SYS)
++#define AT91_PIOC (0xfffff600 - AT91_BASE_SYS)
++#define AT91_PIOD (0xfffff800 - AT91_BASE_SYS)
++#define AT91_PIOE (0xfffffa00 - AT91_BASE_SYS)
++#define AT91_PMC (0xfffffc00 - AT91_BASE_SYS)
++#define AT91_RSTC (0xfffffd00 - AT91_BASE_SYS)
++#define AT91_SHDWC (0xfffffd10 - AT91_BASE_SYS)
++#define AT91_RTT (0xfffffd20 - AT91_BASE_SYS)
++#define AT91_PIT (0xfffffd30 - AT91_BASE_SYS)
++#define AT91_WDT (0xfffffd40 - AT91_BASE_SYS)
++#define AT91_GPBR (0xfffffd60 - AT91_BASE_SYS)
++#define AT91_RTC (0xfffffdb0 - AT91_BASE_SYS)
++
++#define AT91_USART0 AT91SAM9G45_BASE_US0
++#define AT91_USART1 AT91SAM9G45_BASE_US1
++#define AT91_USART2 AT91SAM9G45_BASE_US2
++#define AT91_USART3 AT91SAM9G45_BASE_US3
++
++/*
++ * Internal Memory.
++ */
++#define AT91SAM9G45_SRAM_BASE 0x00300000 /* Internal SRAM base address */
++#define AT91SAM9G45_SRAM_SIZE SZ_64K /* Internal SRAM size (64Kb) */
++
++#define AT91SAM9G45_ROM_BASE 0x00400000 /* Internal ROM base address */
++#define AT91SAM9G45_ROM_SIZE SZ_64K /* Internal ROM size (64Kb) */
++
++#define AT91SAM9G45_LCDC_BASE 0x00500000 /* LCD Controller */
++#define AT91SAM9G45_UDPHS_FIFO 0x00600000 /* USB Device HS controller */
++#define AT91SAM9G45_HCI_BASE 0x00700000 /* USB Host controller (OHCI) */
++#define AT91SAM9G45_EHCI_BASE 0x00800000 /* USB Host controller (EHCI) */
++#define AT91SAM9G45_VDEC_BASE 0x00900000 /* Video Decoder Controller */
++
++#define CONFIG_DRAM_BASE AT91_CHIPSELECT_6
++
++
++#endif
+diff -uprN u-boot-1.3.4-vanilla/include/asm-arm/arch-at91sam9/at91sam9g45_matrix.h u-boot-1.3.4/include/asm-arm/arch-at91sam9/at91sam9g45_matrix.h
+--- u-boot-1.3.4-vanilla/include/asm-arm/arch-at91sam9/at91sam9g45_matrix.h 1969-12-31 17:00:00.000000000 -0700
++++ u-boot-1.3.4/include/asm-arm/arch-at91sam9/at91sam9g45_matrix.h 2010-03-25 16:45:59.000000000 -0500
+@@ -0,0 +1,153 @@
++/*
++ * Matrix-centric header file for the AT91SAM9M1x family
++ *
++ * Copyright (C) 2008 Atmel Corporation.
++ *
++ * Memory Controllers (MATRIX, EBI) - System peripherals registers.
++ * Based on AT91SAM9G45 preliminary datasheet.
++ *
++ * 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.
++ */
++
++#ifndef AT91SAM9G45_MATRIX_H
++#define AT91SAM9G45_MATRIX_H
++
++#define AT91_MATRIX_MCFG0 (AT91_MATRIX + 0x00) /* Master Configuration Register 0 */
++#define AT91_MATRIX_MCFG1 (AT91_MATRIX + 0x04) /* Master Configuration Register 1 */
++#define AT91_MATRIX_MCFG2 (AT91_MATRIX + 0x08) /* Master Configuration Register 2 */
++#define AT91_MATRIX_MCFG3 (AT91_MATRIX + 0x0C) /* Master Configuration Register 3 */
++#define AT91_MATRIX_MCFG4 (AT91_MATRIX + 0x10) /* Master Configuration Register 4 */
++#define AT91_MATRIX_MCFG5 (AT91_MATRIX + 0x14) /* Master Configuration Register 5 */
++#define AT91_MATRIX_MCFG6 (AT91_MATRIX + 0x18) /* Master Configuration Register 6 */
++#define AT91_MATRIX_MCFG7 (AT91_MATRIX + 0x1C) /* Master Configuration Register 7 */
++#define AT91_MATRIX_MCFG8 (AT91_MATRIX + 0x20) /* Master Configuration Register 8 */
++#define AT91_MATRIX_MCFG9 (AT91_MATRIX + 0x24) /* Master Configuration Register 9 */
++#define AT91_MATRIX_MCFG10 (AT91_MATRIX + 0x28) /* Master Configuration Register 10 */
++#define AT91_MATRIX_MCFG11 (AT91_MATRIX + 0x2C) /* Master Configuration Register 11 */
++#define AT91_MATRIX_ULBT (7 << 0) /* Undefined Length Burst Type */
++#define AT91_MATRIX_ULBT_INFINITE (0 << 0)
++#define AT91_MATRIX_ULBT_SINGLE (1 << 0)
++#define AT91_MATRIX_ULBT_FOUR (2 << 0)
++#define AT91_MATRIX_ULBT_EIGHT (3 << 0)
++#define AT91_MATRIX_ULBT_SIXTEEN (4 << 0)
++#define AT91_MATRIX_ULBT_THIRTYTWO (5 << 0)
++#define AT91_MATRIX_ULBT_SIXTYFOUR (6 << 0)
++#define AT91_MATRIX_ULBT_128 (7 << 0)
++
++#define AT91_MATRIX_SCFG0 (AT91_MATRIX + 0x40) /* Slave Configuration Register 0 */
++#define AT91_MATRIX_SCFG1 (AT91_MATRIX + 0x44) /* Slave Configuration Register 1 */
++#define AT91_MATRIX_SCFG2 (AT91_MATRIX + 0x48) /* Slave Configuration Register 2 */
++#define AT91_MATRIX_SCFG3 (AT91_MATRIX + 0x4C) /* Slave Configuration Register 3 */
++#define AT91_MATRIX_SCFG4 (AT91_MATRIX + 0x50) /* Slave Configuration Register 4 */
++#define AT91_MATRIX_SCFG5 (AT91_MATRIX + 0x54) /* Slave Configuration Register 5 */
++#define AT91_MATRIX_SCFG6 (AT91_MATRIX + 0x58) /* Slave Configuration Register 6 */
++#define AT91_MATRIX_SCFG7 (AT91_MATRIX + 0x5C) /* Slave Configuration Register 7 */
++#define AT91_MATRIX_SLOT_CYCLE (0x1ff << 0) /* Maximum Number of Allowed Cycles for a Burst */
++#define AT91_MATRIX_DEFMSTR_TYPE (3 << 16) /* Default Master Type */
++#define AT91_MATRIX_DEFMSTR_TYPE_NONE (0 << 16)
++#define AT91_MATRIX_DEFMSTR_TYPE_LAST (1 << 16)
++#define AT91_MATRIX_DEFMSTR_TYPE_FIXED (2 << 16)
++#define AT91_MATRIX_FIXED_DEFMSTR (0xf << 18) /* Fixed Index of Default Master */
++
++#define AT91_MATRIX_PRAS0 (AT91_MATRIX + 0x80) /* Priority Register A for Slave 0 */
++#define AT91_MATRIX_PRBS0 (AT91_MATRIX + 0x84) /* Priority Register B for Slave 0 */
++#define AT91_MATRIX_PRAS1 (AT91_MATRIX + 0x88) /* Priority Register A for Slave 1 */
++#define AT91_MATRIX_PRBS1 (AT91_MATRIX + 0x8C) /* Priority Register B for Slave 1 */
++#define AT91_MATRIX_PRAS2 (AT91_MATRIX + 0x90) /* Priority Register A for Slave 2 */
++#define AT91_MATRIX_PRBS2 (AT91_MATRIX + 0x94) /* Priority Register B for Slave 2 */
++#define AT91_MATRIX_PRAS3 (AT91_MATRIX + 0x98) /* Priority Register A for Slave 3 */
++#define AT91_MATRIX_PRBS3 (AT91_MATRIX + 0x9C) /* Priority Register B for Slave 3 */
++#define AT91_MATRIX_PRAS4 (AT91_MATRIX + 0xA0) /* Priority Register A for Slave 4 */
++#define AT91_MATRIX_PRBS4 (AT91_MATRIX + 0xA4) /* Priority Register B for Slave 4 */
++#define AT91_MATRIX_PRAS5 (AT91_MATRIX + 0xA8) /* Priority Register A for Slave 5 */
++#define AT91_MATRIX_PRBS5 (AT91_MATRIX + 0xAC) /* Priority Register B for Slave 5 */
++#define AT91_MATRIX_PRAS6 (AT91_MATRIX + 0xB0) /* Priority Register A for Slave 6 */
++#define AT91_MATRIX_PRBS6 (AT91_MATRIX + 0xB4) /* Priority Register B for Slave 6 */
++#define AT91_MATRIX_PRAS7 (AT91_MATRIX + 0xB8) /* Priority Register A for Slave 7 */
++#define AT91_MATRIX_PRBS7 (AT91_MATRIX + 0xBC) /* Priority Register B for Slave 7 */
++#define AT91_MATRIX_M0PR (3 << 0) /* Master 0 Priority */
++#define AT91_MATRIX_M1PR (3 << 4) /* Master 1 Priority */
++#define AT91_MATRIX_M2PR (3 << 8) /* Master 2 Priority */
++#define AT91_MATRIX_M3PR (3 << 12) /* Master 3 Priority */
++#define AT91_MATRIX_M4PR (3 << 16) /* Master 4 Priority */
++#define AT91_MATRIX_M5PR (3 << 20) /* Master 5 Priority */
++#define AT91_MATRIX_M6PR (3 << 24) /* Master 6 Priority */
++#define AT91_MATRIX_M7PR (3 << 28) /* Master 7 Priority */
++#define AT91_MATRIX_M8PR (3 << 0) /* Master 8 Priority (in Register B) */
++#define AT91_MATRIX_M9PR (3 << 4) /* Master 9 Priority (in Register B) */
++#define AT91_MATRIX_M10PR (3 << 8) /* Master 10 Priority (in Register B) */
++#define AT91_MATRIX_M11PR (3 << 12) /* Master 11 Priority (in Register B) */
++
++#define AT91_MATRIX_MRCR (AT91_MATRIX + 0x100) /* Master Remap Control Register */
++#define AT91_MATRIX_RCB0 (1 << 0) /* Remap Command for AHB Master 0 (ARM926EJ-S Instruction Master) */
++#define AT91_MATRIX_RCB1 (1 << 1) /* Remap Command for AHB Master 1 (ARM926EJ-S Data Master) */
++#define AT91_MATRIX_RCB2 (1 << 2)
++#define AT91_MATRIX_RCB3 (1 << 3)
++#define AT91_MATRIX_RCB4 (1 << 4)
++#define AT91_MATRIX_RCB5 (1 << 5)
++#define AT91_MATRIX_RCB6 (1 << 6)
++#define AT91_MATRIX_RCB7 (1 << 7)
++#define AT91_MATRIX_RCB8 (1 << 8)
++#define AT91_MATRIX_RCB9 (1 << 9)
++#define AT91_MATRIX_RCB10 (1 << 10)
++#define AT91_MATRIX_RCB11 (1 << 11)
++
++#define AT91_MATRIX_TCMR (AT91_MATRIX + 0x110) /* TCM Configuration Register */
++#define AT91_MATRIX_ITCM_SIZE (0xf << 0) /* Size of ITCM enabled memory block */
++#define AT91_MATRIX_ITCM_0 (0 << 0)
++#define AT91_MATRIX_ITCM_32 (6 << 0)
++#define AT91_MATRIX_DTCM_SIZE (0xf << 4) /* Size of DTCM enabled memory block */
++#define AT91_MATRIX_DTCM_0 (0 << 4)
++#define AT91_MATRIX_DTCM_32 (6 << 4)
++#define AT91_MATRIX_DTCM_64 (7 << 4)
++#define AT91_MATRIX_TCM_NWS (0x1 << 11) /* Wait state TCM register */
++#define AT91_MATRIX_TCM_NO_WS (0x0 << 11)
++#define AT91_MATRIX_TCM_ONE_WS (0x1 << 11)
++
++#define AT91_MATRIX_VIDEO (AT91_MATRIX + 0x118) /* Video Mode Configuration Register */
++#define AT91C_VDEC_SEL (0x1 << 0) /* Video Mode Selection */
++#define AT91C_VDEC_SEL_OFF (0 << 0)
++#define AT91C_VDEC_SEL_ON (1 << 0)
++
++#define AT91_MATRIX_EBICSA (AT91_MATRIX + 0x128) /* EBI Chip Select Assignment Register */
++#define AT91_MATRIX_EBI_CS1A (1 << 1) /* Chip Select 1 Assignment */
++#define AT91_MATRIX_EBI_CS1A_SMC (0 << 1)
++#define AT91_MATRIX_EBI_CS1A_SDRAMC (1 << 1)
++#define AT91_MATRIX_EBI_CS3A (1 << 3) /* Chip Select 3 Assignment */
++#define AT91_MATRIX_EBI_CS3A_SMC (0 << 3)
++#define AT91_MATRIX_EBI_CS3A_SMC_SMARTMEDIA (1 << 3)
++#define AT91_MATRIX_EBI_CS4A (1 << 4) /* Chip Select 4 Assignment */
++#define AT91_MATRIX_EBI_CS4A_SMC (0 << 4)
++#define AT91_MATRIX_EBI_CS4A_SMC_CF0 (1 << 4)
++#define AT91_MATRIX_EBI_CS5A (1 << 5) /* Chip Select 5 Assignment */
++#define AT91_MATRIX_EBI_CS5A_SMC (0 << 5)
++#define AT91_MATRIX_EBI_CS5A_SMC_CF1 (1 << 5)
++#define AT91_MATRIX_EBI_DBPUC (1 << 8) /* Data Bus Pull-up Configuration */
++#define AT91_MATRIX_EBI_DBPU_ON (0 << 8)
++#define AT91_MATRIX_EBI_DBPU_OFF (1 << 8)
++#define AT91_MATRIX_EBI_VDDIOMSEL (1 << 16) /* Memory voltage selection */
++#define AT91_MATRIX_EBI_VDDIOMSEL_1_8V (0 << 16)
++#define AT91_MATRIX_EBI_VDDIOMSEL_3_3V (1 << 16)
++#define AT91_MATRIX_EBI_EBI_IOSR (1 << 17) /* EBI I/O slew rate selection */
++#define AT91_MATRIX_EBI_EBI_IOSR_REDUCED (0 << 17)
++#define AT91_MATRIX_EBI_EBI_IOSR_NORMAL (1 << 17)
++#define AT91_MATRIX_EBI_DDR_IOSR (1 << 18) /* DDR2 dedicated port I/O slew rate selection */
++#define AT91_MATRIX_EBI_DDR_IOSR_REDUCED (0 << 18)
++#define AT91_MATRIX_EBI_DDR_IOSR_NORMAL (1 << 18)
++
++#define AT91_MATRIX_WPMR (AT91_MATRIX + 0x1E4) /* Write Protect Mode Register */
++#define AT91_MATRIX_WPMR_WPEN (1 << 0) /* Write Protect ENable */
++#define AT91_MATRIX_WPMR_WP_WPDIS (0 << 0)
++#define AT91_MATRIX_WPMR_WP_WPEN (1 << 0)
++#define AT91_MATRIX_WPMR_WPKEY (0xFFFFFF << 8) /* Write Protect KEY */
++
++#define AT91_MATRIX_WPSR (AT91_MATRIX + 0x1E8) /* Write Protect Status Register */
++#define AT91_MATRIX_WPSR_WPVS (1 << 0) /* Write Protect Violation Status */
++#define AT91_MATRIX_WPSR_NO_WPV (0 << 0)
++#define AT91_MATRIX_WPSR_WPV (1 << 0)
++#define AT91_MATRIX_WPSR_WPVSRC (0xFFFF << 8) /* Write Protect Violation Source */
++
++#endif
+diff -uprN u-boot-1.3.4-vanilla/include/asm-arm/arch-at91sam9/hardware.h u-boot-1.3.4/include/asm-arm/arch-at91sam9/hardware.h
+--- u-boot-1.3.4-vanilla/include/asm-arm/arch-at91sam9/hardware.h 2008-08-12 09:08:38.000000000 -0500
++++ u-boot-1.3.4/include/asm-arm/arch-at91sam9/hardware.h 2010-03-25 16:45:59.000000000 -0500
+@@ -18,13 +18,13 @@
+
+ #if defined(CONFIG_AT91RM9200)
+ #include <asm/arch/at91rm9200.h>
+-#elif defined(CONFIG_AT91SAM9260)
++#elif defined(CONFIG_AT91SAM9260) || defined(CONFIG_AT91SAM9G20)
+ #include <asm/arch/at91sam9260.h>
+ #define AT91_BASE_EMAC AT91SAM9260_BASE_EMAC
+ #define AT91_BASE_SPI AT91SAM9260_BASE_SPI0
+ #define AT91_ID_UHP AT91SAM9260_ID_UHP
+ #define AT91_PMC_UHP AT91SAM926x_PMC_UHP
+-#elif defined(CONFIG_AT91SAM9261)
++#elif defined(CONFIG_AT91SAM9261) || defined(CONFIG_AT91SAM9G10)
+ #include <asm/arch/at91sam9261.h>
+ #define AT91_BASE_SPI AT91SAM9261_BASE_SPI0
+ #define AT91_ID_UHP AT91SAM9261_ID_UHP
+@@ -39,6 +39,12 @@
+ #include <asm/arch/at91sam9rl.h>
+ #define AT91_BASE_SPI AT91SAM9RL_BASE_SPI
+ #define AT91_ID_UHP AT91SAM9RL_ID_UHP
++#elif defined(CONFIG_AT91SAM9G45)
++#include <asm/arch/at91sam9g45.h>
++#define AT91_BASE_EMAC AT91SAM9G45_BASE_EMAC
++#define AT91_BASE_SPI AT91SAM9G45_BASE_SPI0
++#define AT91_ID_UHP AT91SAM9G45_ID_UHPHS
++#define AT91_PMC_UHP AT91SAM926x_PMC_UHP
+ #elif defined(CONFIG_AT91CAP9)
+ #include <asm/arch/at91cap9.h>
+ #define AT91_BASE_EMAC AT91CAP9_BASE_EMAC
+diff -uprN u-boot-1.3.4-vanilla/include/asm-arm/mach-types.h u-boot-1.3.4/include/asm-arm/mach-types.h
+--- u-boot-1.3.4-vanilla/include/asm-arm/mach-types.h 2008-08-12 09:08:38.000000000 -0500
++++ u-boot-1.3.4/include/asm-arm/mach-types.h 2010-03-25 16:45:59.000000000 -0500
+@@ -1595,7 +1595,13 @@ extern unsigned int __machine_arch_type;
+ #define MACH_TYPE_P300 1602
+ #define MACH_TYPE_XDACOMET 1603
+ #define MACH_TYPE_DEXFLEX2 1604
++#define MACH_TYPE_AT91SAM9G20EK 1624
+ #define MACH_TYPE_SFFSDR 1657
++#define MACH_TYPE_AT91SAM9M10G45EK 1830
++#define MACH_TYPE_AT91SAM9G10EK 2159
++#define MACH_TYPE_AT91SAM9G45EKES 2212
++#define MACH_TYPE_AT91SAM9G20EK_2MMC 2288
++#define MACH_TYPE_AT91SAM9M10EKES 2509
+
+ #ifdef CONFIG_ARCH_EBSA110
+ # ifdef machine_arch_type
+@@ -11701,6 +11707,18 @@ extern unsigned int __machine_arch_type;
+ # define machine_is_at91sam9261ek() (0)
+ #endif
+
++#ifdef CONFIG_MACH_AT91SAM9G10EK
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_AT91SAM9G10EK
++# endif
++# define machine_is_at91sam9g10ek() (machine_arch_type == MACH_TYPE_AT91SAM9G10EK)
++#else
++# define machine_is_at91sam9g10ek() (0)
++#endif
++
+ #ifdef CONFIG_MACH_LOFT
+ # ifdef machine_arch_type
+ # undef machine_arch_type
+@@ -20605,6 +20623,69 @@ extern unsigned int __machine_arch_type;
+ # define machine_is_dexflex2() (0)
+ #endif
+
++#ifdef CONFIG_MACH_AT91SAM9G20EK
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_AT91SAM9G20EK
++# endif
++# define machine_is_at91sam9g20ek() (machine_arch_type == MACH_TYPE_AT91SAM9G20EK)
++#else
++# define machine_is_at91sam9g20ek() (0)
++#endif
++
++
++#ifdef CONFIG_MACH_AT91SAM9M10G45EK
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_AT91SAM9M10G45EK
++# endif
++# define machine_is_at91sam9m10g45ek() (machine_arch_type == MACH_TYPE_AT91SAM9M10G45EK)
++#else
++# define machine_is_at91sam9m10g45ek() (0)
++#endif
++
++#ifdef CONFIG_MACH_AT91SAM9G45EKES
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_AT91SAM9G45EKES
++# endif
++# define machine_is_at91sam9g45ekes() (machine_arch_type == MACH_TYPE_AT91SAM9G45EKES)
++#else
++# define machine_is_at91sam9g45ekes() (0)
++#endif
++
++#ifdef CONFIG_MACH_AT91SAM9G20EK_2MMC
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_AT91SAM9G20EK_2MMC
++# endif
++# define machine_is_at91sam9g20ek_2mmc() (machine_arch_type == MACH_TYPE_AT91SAM9G20EK_2MMC)
++#else
++# define machine_is_at91sam9g20ek_2mmc() (0)
++#endif
++
++#ifdef CONFIG_MACH_AT91SAM9M10EKES
++# ifdef machine_arch_type
++# undef machine_arch_type
++# define machine_arch_type __machine_arch_type
++# else
++# define machine_arch_type MACH_TYPE_AT91SAM9M10EKES
++# endif
++# define machine_is_at91sam9m10ekes() (machine_arch_type == MACH_TYPE_AT91SAM9M10EKES)
++#else
++# define machine_is_at91sam9m10ekes() (0)
++#endif
++
++
++
+ /*
+ * These have not yet been registered
+ */
+diff -uprN u-boot-1.3.4-vanilla/include/configs/at91sam9260ek.h u-boot-1.3.4/include/configs/at91sam9260ek.h
+--- u-boot-1.3.4-vanilla/include/configs/at91sam9260ek.h 2008-08-12 09:08:38.000000000 -0500
++++ u-boot-1.3.4/include/configs/at91sam9260ek.h 2010-03-25 16:45:59.000000000 -0500
+@@ -127,10 +127,6 @@
+ #define CFG_MEMTEST_START PHYS_SDRAM
+ #define CFG_MEMTEST_END 0x23e00000
+
+-#undef CFG_USE_DATAFLASH_CS0
+-#define CFG_USE_DATAFLASH_CS1 1
+-#undef CFG_USE_NANDFLASH
+-
+ #ifdef CFG_USE_DATAFLASH_CS0
+
+ /* bootstrap + u-boot + env + linux in dataflash on CS0 */
+diff -uprN u-boot-1.3.4-vanilla/include/configs/at91sam9261ek.h u-boot-1.3.4/include/configs/at91sam9261ek.h
+--- u-boot-1.3.4-vanilla/include/configs/at91sam9261ek.h 2008-08-12 09:08:38.000000000 -0500
++++ u-boot-1.3.4/include/configs/at91sam9261ek.h 2010-03-25 16:45:59.000000000 -0500
+@@ -142,9 +142,6 @@
+ #define CFG_MEMTEST_START PHYS_SDRAM
+ #define CFG_MEMTEST_END 0x23e00000
+
+-#define CFG_USE_DATAFLASH_CS0 1
+-#undef CFG_USE_NANDFLASH
+-
+ #ifdef CFG_USE_DATAFLASH_CS0
+
+ /* bootstrap + u-boot + env + linux in dataflash on CS0 */
+@@ -159,6 +156,20 @@
+ "mtdparts=at91_nand:-(root) " \
+ "rw rootfstype=jffs2"
+
++#elif CFG_USE_DATAFLASH_CS3
++
++/* bootstrap + u-boot + env + linux in dataflash on CS3 */
++#define CFG_ENV_IS_IN_DATAFLASH 1
++#define CFG_MONITOR_BASE (CFG_DATAFLASH_LOGIC_ADDR_CS3 + 0x8400)
++#define CFG_ENV_OFFSET 0x4200
++#define CFG_ENV_ADDR (CFG_DATAFLASH_LOGIC_ADDR_CS3 + CFG_ENV_OFFSET)
++#define CFG_ENV_SIZE 0x4200
++#define CONFIG_BOOTCOMMAND "cp.b 0xD0042000 0x22000000 0x210000; bootm"
++#define CONFIG_BOOTARGS "console=ttyS0,115200 " \
++ "root=/dev/mtdblock0 " \
++ "mtdparts=at91_nand:-(root) " \
++ "rw rootfstype=jffs2"
++
+ #else /* CFG_USE_NANDFLASH */
+
+ /* bootstrap + u-boot + env + linux in nandflash */
+diff -uprN u-boot-1.3.4-vanilla/include/configs/at91sam9263ek.h u-boot-1.3.4/include/configs/at91sam9263ek.h
+--- u-boot-1.3.4-vanilla/include/configs/at91sam9263ek.h 2008-08-12 09:08:38.000000000 -0500
++++ u-boot-1.3.4/include/configs/at91sam9263ek.h 2010-03-25 16:45:59.000000000 -0500
+@@ -148,9 +148,6 @@
+ #define CFG_MEMTEST_START PHYS_SDRAM
+ #define CFG_MEMTEST_END 0x23e00000
+
+-#define CFG_USE_DATAFLASH 1
+-#undef CFG_USE_NANDFLASH
+-
+ #ifdef CFG_USE_DATAFLASH
+
+ /* bootstrap + u-boot + env + linux in dataflash on CS0 */
+diff -uprN u-boot-1.3.4-vanilla/include/configs/at91sam9g10ek.h u-boot-1.3.4/include/configs/at91sam9g10ek.h
+--- u-boot-1.3.4-vanilla/include/configs/at91sam9g10ek.h 1969-12-31 17:00:00.000000000 -0700
++++ u-boot-1.3.4/include/configs/at91sam9g10ek.h 2010-03-25 16:45:59.000000000 -0500
+@@ -0,0 +1,213 @@
++/*
++ * (C) Copyright 2007-2008
++ * Stelian Pop <stelian.pop@leadtechdesign.com>
++ * Lead Tech Design <www.leadtechdesign.com>
++ *
++ * Configuation settings for the AT91SAM9G10EK board.
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#ifndef __CONFIG_H
++#define __CONFIG_H
++
++/* ARM asynchronous clock */
++#define AT91_CPU_NAME "AT91SAM9G10"
++#define AT91_MAIN_CLOCK 266000000 /* from 18.432 MHz crystal */
++#define AT91_MASTER_CLOCK 133000000 /* peripheral = main / 2 */
++#define CFG_HZ 1000000 /* 1us resolution */
++
++#define AT91_SLOW_CLOCK 32768 /* slow clock */
++
++#define CONFIG_ARM926EJS 1 /* This is an ARM926EJS Core */
++#define CONFIG_AT91SAM9G10 1 /* It's an Atmel AT91SAM9G10 SoC*/
++#define CONFIG_AT91SAM9G10EK 1 /* on an AT91SAM9G10EK Board */
++#undef CONFIG_USE_IRQ /* we don't need IRQ/FIQ stuff */
++
++#define CONFIG_CMDLINE_TAG 1 /* enable passing of ATAGs */
++#define CONFIG_SETUP_MEMORY_TAGS 1
++#define CONFIG_INITRD_TAG 1
++
++#define CONFIG_SKIP_LOWLEVEL_INIT
++#define CONFIG_SKIP_RELOCATE_UBOOT
++
++/*
++ * Hardware drivers
++ */
++#define CONFIG_ATMEL_USART 1
++#undef CONFIG_USART0
++#undef CONFIG_USART1
++#undef CONFIG_USART2
++#define CONFIG_USART3 1 /* USART 3 is DBGU */
++
++/* LCD */
++#define CONFIG_LCD 1
++#define LCD_BPP LCD_COLOR8
++#define CONFIG_LCD_LOGO 1
++#undef LCD_TEST_PATTERN
++#define CONFIG_LCD_INFO 1
++#define CONFIG_LCD_INFO_BELOW_LOGO 1
++#define CFG_WHITE_ON_BLACK 1
++#define CONFIG_ATMEL_LCD 1
++/* #define CONFIG_ATMEL_LCD_BGR555 1 */
++#define CFG_CONSOLE_IS_IN_ENV 1
++
++#define CONFIG_BOOTDELAY 3
++
++/*
++ * BOOTP options
++ */
++#define CONFIG_BOOTP_BOOTFILESIZE 1
++#define CONFIG_BOOTP_BOOTPATH 1
++#define CONFIG_BOOTP_GATEWAY 1
++#define CONFIG_BOOTP_HOSTNAME 1
++
++/*
++ * Command line configuration.
++ */
++#include <config_cmd_default.h>
++#undef CONFIG_CMD_BDI
++#undef CONFIG_CMD_IMI
++#undef CONFIG_CMD_AUTOSCRIPT
++#undef CONFIG_CMD_FPGA
++#undef CONFIG_CMD_LOADS
++#undef CONFIG_CMD_IMLS
++
++#define CONFIG_CMD_PING 1
++#define CONFIG_CMD_DHCP 1
++#define CONFIG_CMD_NAND 1
++#define CONFIG_CMD_USB 1
++
++/* SDRAM */
++#define CONFIG_NR_DRAM_BANKS 1
++#define PHYS_SDRAM 0x20000000
++#define PHYS_SDRAM_SIZE 0x04000000 /* 64 megs */
++
++/* DataFlash */
++#define CONFIG_HAS_DATAFLASH 1
++#define CFG_SPI_WRITE_TOUT (5*CFG_HZ)
++#define CFG_MAX_DATAFLASH_BANKS 2
++#define CFG_DATAFLASH_LOGIC_ADDR_CS0 0xC0000000 /* CS0 */
++#define CFG_DATAFLASH_LOGIC_ADDR_CS3 0xD0000000 /* CS3 */
++#define AT91_SPI_CLK 15000000
++#define DATAFLASH_TCSS (0x1a << 16)
++#define DATAFLASH_TCHS (0x1 << 24)
++
++/* NAND flash */
++#define NAND_MAX_CHIPS 1
++#define CFG_MAX_NAND_DEVICE 1
++#define CFG_NAND_BASE 0x40000000
++#define CFG_NAND_DBW_8 1
++
++/* NOR flash - no real flash on this board */
++#define CFG_NO_FLASH 1
++
++/* Ethernet */
++#define CONFIG_DRIVER_DM9000 1
++#define CONFIG_DM9000_BASE 0x30000000
++#define DM9000_IO CONFIG_DM9000_BASE
++#define DM9000_DATA (CONFIG_DM9000_BASE + 4)
++#define CONFIG_DM9000_USE_16BIT 1
++#define CONFIG_NET_RETRY_COUNT 20
++#define CONFIG_RESET_PHY_R 1
++
++/* USB */
++#define CONFIG_USB_OHCI_NEW 1
++#define LITTLEENDIAN 1
++#define CONFIG_DOS_PARTITION 1
++#define CFG_USB_OHCI_CPU_INIT 1
++#define CFG_USB_OHCI_REGS_BASE 0x00500000 /* AT91SAM9G10_UHP_BASE */
++#define CFG_USB_OHCI_SLOT_NAME "at91sam9g10"
++#define CFG_USB_OHCI_MAX_ROOT_PORTS 2
++#define CONFIG_USB_STORAGE 1
++
++#define CFG_LOAD_ADDR 0x22000000 /* load address */
++
++#define CFG_MEMTEST_START PHYS_SDRAM
++#define CFG_MEMTEST_END 0x23e00000
++
++#ifdef CFG_USE_DATAFLASH_CS0
++
++/* bootstrap + u-boot + env + linux in dataflash on CS0 */
++#define CFG_ENV_IS_IN_DATAFLASH 1
++#define CFG_MONITOR_BASE (CFG_DATAFLASH_LOGIC_ADDR_CS0 + 0x8400)
++#define CFG_ENV_OFFSET 0x4200
++#define CFG_ENV_ADDR (CFG_DATAFLASH_LOGIC_ADDR_CS0 + CFG_ENV_OFFSET)
++#define CFG_ENV_SIZE 0x4200
++#define CONFIG_BOOTCOMMAND "cp.b 0xC0042000 0x22000000 0x210000; bootm"
++#define CONFIG_BOOTARGS "console=ttyS0,115200 " \
++ "root=/dev/mtdblock0 " \
++ "mtdparts=at91_nand:-(root) " \
++ "rw rootfstype=jffs2"
++
++#elif CFG_USE_DATAFLASH_CS3
++
++/* bootstrap + u-boot + env + linux in dataflash on CS3 */
++#define CFG_ENV_IS_IN_DATAFLASH 1
++#define CFG_MONITOR_BASE (CFG_DATAFLASH_LOGIC_ADDR_CS3 + 0x8400)
++#define CFG_ENV_OFFSET 0x4200
++#define CFG_ENV_ADDR (CFG_DATAFLASH_LOGIC_ADDR_CS3 + CFG_ENV_OFFSET)
++#define CFG_ENV_SIZE 0x4200
++#define CONFIG_BOOTCOMMAND "cp.b 0xD0042000 0x22000000 0x210000; bootm"
++#define CONFIG_BOOTARGS "console=ttyS0,115200 " \
++ "root=/dev/mtdblock0 " \
++ "mtdparts=at91_nand:-(root) " \
++ "rw rootfstype=jffs2"
++
++#else /* CFG_USE_NANDFLASH */
++
++/* bootstrap + u-boot + env + linux in nandflash */
++#define CFG_ENV_IS_IN_NAND 1
++#define CFG_ENV_OFFSET 0x60000
++#define CFG_ENV_OFFSET_REDUND 0x80000
++#define CFG_ENV_SIZE 0x20000 /* 1 sector = 128 kB */
++#define CONFIG_BOOTCOMMAND "nand read 0x22000000 0xA0000 0x200000; bootm"
++#define CONFIG_BOOTARGS "console=ttyS0,115200 " \
++ "root=/dev/mtdblock5 " \
++ "mtdparts=at91_nand:128k(bootstrap)ro," \
++ "256k(uboot)ro,128k(env1)ro," \
++ "128k(env2)ro,2M(linux),-(root) " \
++ "rw rootfstype=jffs2"
++
++#endif
++
++#define CONFIG_BAUDRATE 115200
++#define CFG_BAUDRATE_TABLE {115200 , 19200, 38400, 57600, 9600 }
++
++#define CFG_PROMPT "U-Boot> "
++#define CFG_CBSIZE 256
++#define CFG_MAXARGS 16
++#define CFG_PBSIZE (CFG_CBSIZE + sizeof(CFG_PROMPT) + 16)
++#define CFG_LONGHELP 1
++#define CONFIG_CMDLINE_EDITING 1
++
++#define ROUND(A, B) (((A) + (B)) & ~((B) - 1))
++/*
++ * Size of malloc() pool
++ */
++#define CFG_MALLOC_LEN ROUND(3 * CFG_ENV_SIZE + 128*1024, 0x1000)
++#define CFG_GBL_DATA_SIZE 128 /* 128 bytes for initial data */
++
++#define CONFIG_STACKSIZE (32*1024) /* regular stack */
++
++#ifdef CONFIG_USE_IRQ
++#error CONFIG_USE_IRQ not supported
++#endif
++
++#endif
+diff -uprN u-boot-1.3.4-vanilla/include/configs/at91sam9g20ek.h u-boot-1.3.4/include/configs/at91sam9g20ek.h
+--- u-boot-1.3.4-vanilla/include/configs/at91sam9g20ek.h 1969-12-31 17:00:00.000000000 -0700
++++ u-boot-1.3.4/include/configs/at91sam9g20ek.h 2010-05-04 13:55:32.000000000 -0500
+@@ -0,0 +1,212 @@
++/*
++ * (C) Copyright 2007-2008
++ * Stelian Pop <stelian.pop@leadtechdesign.com>
++ * Lead Tech Design <www.leadtechdesign.com>
++ *
++ * Configuation settings for the AT91SAM9G20EK board.
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#ifndef __CONFIG_H
++#define __CONFIG_H
++
++/* ARM asynchronous clock */
++#define AT91_MAIN_CLOCK 18432000 /* 18.432 MHz crystal */
++#define AT91_MASTER_CLOCK 132096000 /* PLLA = main * 43 / 6 */
++#define CFG_HZ 1000000 /* 1us resolution */
++
++#define AT91_SLOW_CLOCK 32768 /* slow clock */
++
++#define CONFIG_ARM926EJS 1 /* This is an ARM926EJS Core */
++#define CONFIG_AT91SAM9G20 1 /* It's an Atmel AT91SAM9G20 SoC*/
++#undef CONFIG_USE_IRQ /* we don't need IRQ/FIQ stuff */
++
++#define CONFIG_CMDLINE_TAG 1 /* enable passing of ATAGs */
++#define CONFIG_SETUP_MEMORY_TAGS 1
++#define CONFIG_INITRD_TAG 1
++
++#define CONFIG_SKIP_LOWLEVEL_INIT
++#define CONFIG_SKIP_RELOCATE_UBOOT
++
++/*
++ * Hardware drivers
++ */
++#define CONFIG_ATMEL_USART 1
++#undef CONFIG_USART0
++#undef CONFIG_USART1
++#undef CONFIG_USART2
++#define CONFIG_USART3 1 /* USART 3 is DBGU */
++
++#define CONFIG_BOOTDELAY 1
++
++/*
++ * BOOTP options
++ */
++#define CONFIG_BOOTP_BOOTFILESIZE 1
++#define CONFIG_BOOTP_BOOTPATH 1
++#define CONFIG_BOOTP_GATEWAY 1
++#define CONFIG_BOOTP_HOSTNAME 1
++
++/*
++ * Command line configuration.
++ */
++#include <config_cmd_default.h>
++#undef CONFIG_CMD_BDI
++#undef CONFIG_CMD_IMI
++#undef CONFIG_CMD_AUTOSCRIPT
++#undef CONFIG_CMD_FPGA
++#undef CONFIG_CMD_LOADS
++#undef CONFIG_CMD_IMLS
++
++#define CONFIG_CMD_PING 1
++#define CONFIG_CMD_DHCP 1
++#define CONFIG_CMD_NAND 1
++#define CONFIG_CMD_USB 1
++
++/* SDRAM */
++#define CONFIG_NR_DRAM_BANKS 1
++#define PHYS_SDRAM 0x20000000
++#define PHYS_SDRAM_SIZE 0x04000000 /* 64 megs */
++
++/* DataFlash */
++#define CONFIG_HAS_DATAFLASH 1
++#define CFG_SPI_WRITE_TOUT (5*CFG_HZ)
++#define CFG_MAX_DATAFLASH_BANKS 2
++#define CFG_DATAFLASH_LOGIC_ADDR_CS0 0xC0000000 /* CS0 */
++#define CFG_DATAFLASH_LOGIC_ADDR_CS1 0xD0000000 /* CS1 */
++#define AT91_SPI_CLK 15000000
++#define DATAFLASH_TCSS (0x22 << 16)
++#define DATAFLASH_TCHS (0x1 << 24)
++
++/* NAND flash */
++#define NAND_MAX_CHIPS 1
++#define CFG_MAX_NAND_DEVICE 1
++#define CFG_NAND_BASE 0x40000000
++#define CFG_NAND_DBW_8 1
++
++/* NOR flash - no real flash on this board */
++#define CFG_NO_FLASH 1
++
++/* Ethernet */
++#define CONFIG_NET 1
++#define CONFIG_MACB 1
++#define CONFIG_MII 1
++#define CONFIG_NET_MULTI 1
++#define CONFIG_NET_RETRY_COUNT 20
++#define CONFIG_RESET_PHY_R 1
++
++/* USB */
++#define CONFIG_USB_OHCI_NEW 1
++#define LITTLEENDIAN 1
++#define CONFIG_DOS_PARTITION 1
++#define CFG_USB_OHCI_CPU_INIT 1
++#define CFG_USB_OHCI_REGS_BASE 0x00500000 /* AT91SAM9G20_UHP_BASE */
++#define CFG_USB_OHCI_SLOT_NAME "at91sam9g20"
++#define CFG_USB_OHCI_MAX_ROOT_PORTS 2
++#define CONFIG_USB_STORAGE 1
++
++#define CFG_LOAD_ADDR 0x22000000 /* load address */
++
++#define CFG_MEMTEST_START PHYS_SDRAM
++#define CFG_MEMTEST_END 0x23e00000
++
++#ifdef CFG_USE_DATAFLASH_CS0
++
++/* bootstrap + u-boot + env + linux in dataflash on CS0 */
++#define CFG_ENV_IS_IN_DATAFLASH 1
++#define CFG_MONITOR_BASE (CFG_DATAFLASH_LOGIC_ADDR_CS0 + 0x8400)
++#define CFG_ENV_OFFSET 0x4200
++#define CFG_ENV_ADDR (CFG_DATAFLASH_LOGIC_ADDR_CS0 + CFG_ENV_OFFSET)
++#define CFG_ENV_SIZE 0x4200
++#define CONFIG_BOOTCOMMAND "cp.b 0xC0042000 0x22000000 0x210000; bootm"
++#define CONFIG_BOOTARGS "console=ttyS0,115200 " \
++ "root=/dev/mtdblock0 " \
++ "mtdparts=at91_nand:-(root) " \
++ "rw rootfstype=jffs2"
++
++#elif CFG_USE_DATAFLASH_CS1
++
++/* bootstrap + u-boot + env + linux in dataflash on CS1 */
++#define CFG_ENV_IS_IN_DATAFLASH 1
++#define CFG_MONITOR_BASE (CFG_DATAFLASH_LOGIC_ADDR_CS1 + 0x8400)
++#define CFG_ENV_OFFSET 0x4200
++#define CFG_ENV_ADDR (CFG_DATAFLASH_LOGIC_ADDR_CS1 + CFG_ENV_OFFSET)
++#define CFG_ENV_SIZE 0x4200
++#define CONFIG_BOOTCOMMAND "cp.b 0xD0042000 0x22000000 0x210000; bootm"
++#define CONFIG_BOOTARGS "console=ttyS0,115200 " \
++ "root=/dev/mtdblock0 " \
++ "mtdparts=at91_nand:-(root) " \
++ "rw rootfstype=jffs2"
++
++#else /* CFG_USE_NANDFLASH */
++
++/* bootstrap + u-boot + env + linux in nandflash */
++#define CFG_ENV_IS_IN_NAND 1
++#define CFG_ENV_OFFSET 0x60000
++#define CFG_ENV_OFFSET_REDUND 0x80000
++#define CFG_ENV_SIZE 0x20000 /* 1 sector = 128 kB */
++#define CONFIG_BOOTCOMMAND "nboot.jffs2 ${loadaddr} 0 ${kernel_addr}; bootm ${loadaddr}"
++#define CONFIG_BOOTARGS "mem=64M " \
++ "console=ttyS0,115200 " \
++ "root=/dev/mtdblock8 " \
++ "ro rootfstype=jffs2"
++
++#endif
++
++#define CONFIG_BAUDRATE 115200
++#define CFG_BAUDRATE_TABLE {115200 , 19200, 38400, 57600, 9600 }
++
++#define CFG_PROMPT "U-Boot> "
++#define CFG_CBSIZE 256
++#define CFG_MAXARGS 16
++#define CFG_PBSIZE (CFG_CBSIZE + sizeof(CFG_PROMPT) + 16)
++#define CFG_LONGHELP 1
++#define CONFIG_CMDLINE_EDITING 1
++
++#define ROUND(A, B) (((A) + (B)) & ~((B) - 1))
++/*
++ * Size of malloc() pool
++ */
++#define CFG_MALLOC_LEN ROUND(3 * CFG_ENV_SIZE + 128*1024, 0x1000)
++#define CFG_GBL_DATA_SIZE 128 /* 128 bytes for initial data */
++
++#define CONFIG_STACKSIZE (32*1024) /* regular stack */
++
++#ifdef CONFIG_USE_IRQ
++#error CONFIG_USE_IRQ not supported
++#endif
++
++#define CONFIG_AUTO_COMPLETE 1
++
++#define CONFIG_ENV_OVERWRITE 1
++#define CONFIG_ETHADDR 00:08:00:87:00:02
++#define CONFIG_IPADDR 192.168.2.1
++#define CONFIG_NETMASK 255.255.255.0
++#define CONFIG_SERVERIP 192.168.2.2
++#define CONFIG_HOSTNAME AT91SAM9G20
++#define CONFIG_LOADADDR 0x21400000
++
++#define CONFIG_EXTRA_ENV_SETTINGS \
++ "kernel_addr=0x000A0000\0" \
++ ""
++
++#define CONFIG_ZERO_BOOTDELAY_CHECK 1
++
++#endif
+diff -uprN u-boot-1.3.4-vanilla/include/configs/at91sam9m10g45ek.h u-boot-1.3.4/include/configs/at91sam9m10g45ek.h
+--- u-boot-1.3.4-vanilla/include/configs/at91sam9m10g45ek.h 1969-12-31 17:00:00.000000000 -0700
++++ u-boot-1.3.4/include/configs/at91sam9m10g45ek.h 2010-03-25 16:45:59.000000000 -0500
+@@ -0,0 +1,217 @@
++/*
++ * (C) Copyright 2007-2008
++ * Stelian Pop <stelian.pop@leadtechdesign.com>
++ * Lead Tech Design <www.leadtechdesign.com>
++ *
++ * Configuation settings for the AT91SAM9M10G45EK board(and AT91SAM9G45EKES).
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#ifndef __CONFIG_H
++#define __CONFIG_H
++
++/* ARM asynchronous clock */
++#define AT91_CPU_NAME "AT91SAM9G45"
++#define AT91_MAIN_CLOCK 400000000 /* from 12 MHz crystal */
++#define AT91_MASTER_CLOCK 133000000 /* peripheral = main / 3 */
++#define CFG_HZ 1000000 /* 1us resolution */
++
++#define AT91_SLOW_CLOCK 32768 /* slow clock */
++
++#define CONFIG_ARM926EJS 1 /* This is an ARM926EJS Core */
++#define CONFIG_AT91SAM9G45 1 /* It's an Atmel AT91SAM9G45 SoC*/
++
++#ifdef CFG_USE_AT91SAM9M10G45EK
++#define CONFIG_AT91SAM9M10G45EK 1 /* on an AT91SAM9M10G45EK Board */
++#endif
++
++#ifdef CFG_USE_AT91SAM9G45EKES
++#define CONFIG_AT91SAM9G45EKES 1 /* on an AT91SAM9G45EKES Board */
++#endif
++
++#ifdef CFG_USE_AT91SAM9M10EKES
++#define CONFIG_AT91SAM9M10EKES 1 /* on an AT91SAM9M10EKES Board */
++#endif
++
++#undef CONFIG_USE_IRQ /* we don't need IRQ/FIQ stuff */
++
++#define CONFIG_CMDLINE_TAG 1 /* enable passing of ATAGs */
++#define CONFIG_SETUP_MEMORY_TAGS 1
++#define CONFIG_INITRD_TAG 1
++
++#define CONFIG_SKIP_LOWLEVEL_INIT
++#define CONFIG_SKIP_RELOCATE_UBOOT
++
++/*
++ * Hardware drivers
++ */
++#define CONFIG_ATMEL_USART 1
++#undef CONFIG_USART0
++#undef CONFIG_USART1
++#undef CONFIG_USART2
++#define CONFIG_USART3 1 /* USART 3 is DBGU */
++
++/* LCD */
++//#define CONFIG_LCD 1
++#undef CONFIG_LCD
++#define LCD_BPP LCD_COLOR8
++#define CONFIG_LCD_LOGO 1
++#undef LCD_TEST_PATTERN
++#define CONFIG_LCD_INFO 1
++#define CONFIG_LCD_INFO_BELOW_LOGO 1
++#define CFG_WHITE_ON_BLACK 1
++#define CONFIG_ATMEL_LCD 1
++#define CONFIG_ATMEL_LCD_BGR555 1
++#define CFG_CONSOLE_IS_IN_ENV 1
++
++#define CONFIG_BOOTDELAY 3
++
++/*
++ * BOOTP options
++ */
++#define CONFIG_BOOTP_BOOTFILESIZE 1
++#define CONFIG_BOOTP_BOOTPATH 1
++#define CONFIG_BOOTP_GATEWAY 1
++#define CONFIG_BOOTP_HOSTNAME 1
++
++/*
++ * Command line configuration.
++ */
++#include <config_cmd_default.h>
++#undef CONFIG_CMD_BDI
++#undef CONFIG_CMD_IMI
++#undef CONFIG_CMD_AUTOSCRIPT
++#undef CONFIG_CMD_FPGA
++#undef CONFIG_CMD_LOADS
++#undef CONFIG_CMD_IMLS
++
++#define CONFIG_CMD_PING 1
++#define CONFIG_CMD_DHCP 1
++#define CONFIG_CMD_NAND 1
++#define CONFIG_CMD_USB 1
++
++/* SDRAM */
++#define CONFIG_NR_DRAM_BANKS 1
++#define PHYS_SDRAM 0x70000000
++#define PHYS_SDRAM_SIZE 0x08000000 /* 128 megs */
++
++/* DataFlash */
++#define CONFIG_HAS_DATAFLASH 1
++#define CFG_SPI_WRITE_TOUT (5*CFG_HZ)
++#define CFG_MAX_DATAFLASH_BANKS 1
++#define CFG_DATAFLASH_LOGIC_ADDR_CS0 0xC0000000 /* CS0 */
++#define AT91_SPI_CLK 15000000
++#define DATAFLASH_TCSS (0x1a << 16)
++#define DATAFLASH_TCHS (0x1 << 24)
++
++/* NOR flash, if populated */
++#if 1
++#define CFG_NO_FLASH 1
++#else
++#define CFG_FLASH_CFI 1
++#define CONFIG_FLASH_CFI_DRIVER 1
++#define PHYS_FLASH_1 0x10000000
++#define CFG_FLASH_BASE PHYS_FLASH_1
++#define CFG_MAX_FLASH_SECT 256
++#define CFG_MAX_FLASH_BANKS 1
++#endif
++
++/* NAND flash */
++#define NAND_MAX_CHIPS 1
++#define CFG_MAX_NAND_DEVICE 1
++#define CFG_NAND_BASE 0x40000000
++#define CFG_NAND_DBW_8 1
++
++/* Ethernet */
++#define CONFIG_MACB 1
++/* #define CONFIG_MII 1 */
++#define CONFIG_RMII 1
++#define CONFIG_NET_MULTI 1
++#define CONFIG_NET_RETRY_COUNT 20
++#define CONFIG_RESET_PHY_R 1
++
++/* USB */
++#define CONFIG_USB_OHCI_NEW 1
++#define LITTLEENDIAN 1
++#define CONFIG_DOS_PARTITION 1
++#define CFG_USB_OHCI_CPU_INIT 1
++#define CFG_USB_OHCI_REGS_BASE 0x00700000 /* AT91SAM9G45_UHP_OHCI_BASE */
++#define CFG_USB_OHCI_SLOT_NAME "at91sam9g45"
++#define CFG_USB_OHCI_MAX_ROOT_PORTS 2
++#define CONFIG_USB_STORAGE 1
++
++#define CFG_LOAD_ADDR 0x22000000 /* load address */
++
++#define CFG_MEMTEST_START PHYS_SDRAM
++#define CFG_MEMTEST_END 0x23e00000
++
++#ifdef CFG_USE_DATAFLASH
++
++/* bootstrap + u-boot + env + linux in dataflash on CS0 */
++#define CFG_ENV_IS_IN_DATAFLASH 1
++#define CFG_MONITOR_BASE (CFG_DATAFLASH_LOGIC_ADDR_CS0 + 0x8400)
++#define CFG_ENV_OFFSET 0x4200
++#define CFG_ENV_ADDR (CFG_DATAFLASH_LOGIC_ADDR_CS0 + CFG_ENV_OFFSET)
++#define CFG_ENV_SIZE 0x4200
++#define CONFIG_BOOTCOMMAND "cp.b 0xC0042000 0x22000000 0x210000; bootm"
++#define CONFIG_BOOTARGS "console=ttyS0,115200 " \
++ "root=/dev/mtdblock0 " \
++ "mtdparts=at91_nand:-(root) "\
++ "rw rootfstype=jffs2"
++
++#else /* CFG_USE_NANDFLASH */
++
++/* bootstrap + u-boot + env + linux in nandflash */
++#define CFG_ENV_IS_IN_NAND 1
++#define CFG_ENV_OFFSET 0x60000
++#define CFG_ENV_OFFSET_REDUND 0x80000
++#define CFG_ENV_SIZE 0x20000 /* 1 sector = 128 kB */
++#define CONFIG_BOOTCOMMAND "nand read 0x22000000 0xA0000 0x200000; bootm"
++#define CONFIG_BOOTARGS "console=ttyS0,115200 " \
++ "root=/dev/mtdblock5 " \
++ "mtdparts=at91_nand:128k(bootstrap)ro,256k(uboot)ro,128k(env1)ro,128k(env2)ro,2M(linux),-(root) " \
++ "rw rootfstype=jffs2"
++
++#endif
++
++#define CONFIG_BAUDRATE 115200
++#define CFG_BAUDRATE_TABLE {115200 , 19200, 38400, 57600, 9600 }
++
++#define CFG_PROMPT "U-Boot> "
++#define CFG_CBSIZE 256
++#define CFG_MAXARGS 16
++#define CFG_PBSIZE (CFG_CBSIZE + sizeof(CFG_PROMPT) + 16)
++#define CFG_LONGHELP 1
++#define CONFIG_CMDLINE_EDITING 1
++
++#define ROUND(A, B) (((A) + (B)) & ~((B) - 1))
++/*
++ * Size of malloc() pool
++ */
++#define CFG_MALLOC_LEN ROUND(3 * CFG_ENV_SIZE + 128*1024, 0x1000)
++#define CFG_GBL_DATA_SIZE 128 /* 128 bytes for initial data */
++
++#define CONFIG_STACKSIZE (32*1024) /* regular stack */
++
++#ifdef CONFIG_USE_IRQ
++#error CONFIG_USE_IRQ not supported
++#endif
++
++#endif
+diff -uprN u-boot-1.3.4-vanilla/include/configs/at91sam9rlek.h u-boot-1.3.4/include/configs/at91sam9rlek.h
+--- u-boot-1.3.4-vanilla/include/configs/at91sam9rlek.h 2008-08-12 09:08:38.000000000 -0500
++++ u-boot-1.3.4/include/configs/at91sam9rlek.h 2010-03-25 16:45:59.000000000 -0500
+@@ -117,9 +117,6 @@
+ #define CFG_MEMTEST_START PHYS_SDRAM
+ #define CFG_MEMTEST_END 0x23e00000
+
+-#define CFG_USE_DATAFLASH 1
+-#undef CFG_USE_NANDFLASH
+-
+ #ifdef CFG_USE_DATAFLASH
+
+ /* bootstrap + u-boot + env + linux in dataflash on CS0 */
+diff -uprN u-boot-1.3.4-vanilla/Makefile u-boot-1.3.4/Makefile
+--- u-boot-1.3.4-vanilla/Makefile 2008-08-12 09:08:38.000000000 -0500
++++ u-boot-1.3.4/Makefile 2010-05-13 14:00:22.000000000 -0500
+@@ -2353,15 +2353,6 @@ shannon_config : unconfig
+ at91rm9200dk_config : unconfig
+ @$(MKCONFIG) $(@:_config=) arm arm920t at91rm9200dk atmel at91rm9200
+
+-at91sam9261ek_config : unconfig
+- @$(MKCONFIG) $(@:_config=) arm arm926ejs at91sam9261ek atmel at91sam9
+-
+-at91sam9263ek_config : unconfig
+- @$(MKCONFIG) $(@:_config=) arm arm926ejs at91sam9263ek atmel at91sam9
+-
+-at91sam9rlek_config : unconfig
+- @$(MKCONFIG) $(@:_config=) arm arm926ejs at91sam9rlek atmel at91sam9
+-
+ cmc_pu2_config : unconfig
+ @$(MKCONFIG) $(@:_config=) arm arm920t cmc_pu2 NULL at91rm9200
+
+@@ -2384,8 +2375,175 @@ mp2usb_config : unconfig
+ at91cap9adk_config : unconfig
+ @$(MKCONFIG) $(@:_config=) arm arm926ejs at91cap9adk atmel at91sam9
+
++at91sam9260ek_nandflash_config \
++at91sam9260ek_dataflash_cs0_config \
++at91sam9260ek_dataflash_cs1_config \
+ at91sam9260ek_config : unconfig
+- @$(MKCONFIG) $(@:_config=) arm arm926ejs at91sam9260ek atmel at91sam9
++ @mkdir -p $(obj)include
++ @if [ "$(findstring _nandflash,$@)" ] ; then \
++ echo "#define CFG_USE_NANDFLASH 1" >>$(obj)include/config.h ; \
++ $(XECHO) "... with environment variable in NAND FLASH" ; \
++ elif [ "$(findstring dataflash_cs0,$@)" ] ; then \
++ echo "#define CFG_USE_DATAFLASH_CS0 1" >>$(obj)include/config.h ; \
++ $(XECHO) "... with environment variable in SPI DATAFLASH CS0" ; \
++ else \
++ echo "#define CFG_USE_DATAFLASH_CS1 1" >>$(obj)include/config.h ; \
++ $(XECHO) "... with environment variable in SPI DATAFLASH CS1" ; \
++ fi;
++ @$(MKCONFIG) -a at91sam9260ek arm arm926ejs at91sam9260ek atmel at91sam9
++
++at91sam9xeek_nandflash_config \
++at91sam9xeek_dataflash_cs0_config \
++at91sam9xeek_dataflash_cs1_config \
++at91sam9xeek_config : unconfig
++ @mkdir -p $(obj)include
++ @if [ "$(findstring _nandflash,$@)" ] ; then \
++ echo "#define CFG_USE_NANDFLASH 1" >>$(obj)include/config.h ; \
++ $(XECHO) "... with environment variable in NAND FLASH" ; \
++ elif [ "$(findstring dataflash_cs0,$@)" ] ; then \
++ echo "#define CFG_USE_DATAFLASH_CS0 1" >>$(obj)include/config.h ; \
++ $(XECHO) "... with environment variable in SPI DATAFLASH CS0" ; \
++ else \
++ echo "#define CFG_USE_DATAFLASH_CS1 1" >>$(obj)include/config.h ; \
++ $(XECHO) "... with environment variable in SPI DATAFLASH CS1" ; \
++ fi;
++ @$(MKCONFIG) -n at91sam9xeek -a at91sam9260ek arm arm926ejs at91sam9260ek atmel at91sam9
++
++at91sam9g20ek_nandflash_config \
++at91sam9g20ek_dataflash_cs0_config \
++at91sam9g20ek_dataflash_cs1_config \
++at91sam9g20ek_2mmc_nandflash_config \
++at91sam9g20ek_2mmc_dataflash_cs0_config \
++at91sam9g20ek_2mmc_dataflash_cs1_config \
++at91sam9g20ek_config : unconfig
++ @mkdir -p $(obj)include
++ @if [ "$(findstring _nandflash,$@)" ] ; then \
++ echo "#define CFG_USE_NANDFLASH 1" >>$(obj)include/config.h ; \
++ $(XECHO) "... with environment variable in NAND FLASH" ; \
++ elif [ "$(findstring dataflash_cs0,$@)" ] ; then \
++ echo "#define CFG_USE_DATAFLASH_CS0 1" >>$(obj)include/config.h ; \
++ $(XECHO) "... with environment variable in SPI DATAFLASH CS0" ; \
++ else \
++ echo "#define CFG_USE_DATAFLASH_CS1 1" >>$(obj)include/config.h ; \
++ $(XECHO) "... with environment variable in SPI DATAFLASH CS1" ; \
++ fi;
++ @if [ "$(findstring _2mmc_,$@)" ] ; then \
++ echo "#define CONFIG_AT91SAM9G20EK_2MMC 1" >>$(obj)include/config.h ; \
++ $(XECHO) "... AT91SAM9G20EK board with two SD/MMC slots" ; \
++ else \
++ echo "#define CONFIG_AT91SAM9G20EK 1" >>$(obj)include/config.h ; \
++ $(XECHO) "... AT91SAM9G20EK Board" ; \
++ fi;
++ @$(MKCONFIG) -a at91sam9g20ek arm arm926ejs at91sam9g20ek atmel at91sam9
++
++at91sam9261ek_nandflash_config \
++at91sam9261ek_dataflash_cs0_config \
++at91sam9261ek_dataflash_cs3_config \
++at91sam9261ek_config : unconfig
++ @mkdir -p $(obj)include
++ @if [ "$(findstring _nandflash,$@)" ] ; then \
++ echo "#define CFG_USE_NANDFLASH 1" >>$(obj)include/config.h ; \
++ $(XECHO) "... with environment variable in NAND FLASH" ; \
++ elif [ "$(findstring dataflash_cs3,$@)" ] ; then \
++ echo "#define CFG_USE_DATAFLASH_CS3 1" >>$(obj)include/config.h ; \
++ $(XECHO) "... with environment variable in SPI DATAFLASH CS3" ; \
++ else \
++ echo "#define CFG_USE_DATAFLASH_CS0 1" >>$(obj)include/config.h ; \
++ $(XECHO) "... with environment variable in SPI DATAFLASH CS0" ; \
++ fi;
++ @$(MKCONFIG) -a at91sam9261ek arm arm926ejs at91sam9261ek atmel at91sam9
++
++at91sam9g10ek_nandflash_config \
++at91sam9g10ek_dataflash_cs0_config \
++at91sam9g10ek_dataflash_cs3_config \
++at91sam9g10ek_config : unconfig
++ @if [ "$(findstring _nandflash,$@)" ] ; then \
++ echo "#define CFG_USE_NANDFLASH 1" >>$(obj)include/config.h ; \
++ $(XECHO) "... with environment variable in NAND FLASH" ; \
++ elif [ "$(findstring dataflash_cs0,$@)" ] ; then \
++ echo "#define CFG_USE_DATAFLASH_CS0 1" >>$(obj)include/config.h ; \
++ $(XECHO) "... with environment variable in SPI DATAFLASH CS0" ; \
++ else \
++ echo "#define CFG_USE_DATAFLASH_CS3 1" >>$(obj)include/config.h ; \
++ $(XECHO) "... with environment variable in SPI DATAFLASH CS3" ; \
++ fi;
++ @$(MKCONFIG) -a at91sam9g10ek arm arm926ejs at91sam9g10ek atmel at91sam9
++
++at91sam9263ek_nandflash_config \
++at91sam9263ek_dataflash_config \
++at91sam9263ek_dataflash_cs0_config \
++at91sam9263ek_config : unconfig
++ @mkdir -p $(obj)include
++ @if [ "$(findstring _nandflash,$@)" ] ; then \
++ echo "#define CFG_USE_NANDFLASH 1" >>$(obj)include/config.h ; \
++ $(XECHO) "... with environment variable in NAND FLASH" ; \
++ else \
++ echo "#define CFG_USE_DATAFLASH 1" >>$(obj)include/config.h ; \
++ $(XECHO) "... with environment variable in SPI DATAFLASH CS0" ; \
++ fi;
++ @$(MKCONFIG) -a at91sam9263ek arm arm926ejs at91sam9263ek atmel at91sam9
++
++at91sam9rlek_nandflash_config \
++at91sam9rlek_dataflash_config \
++at91sam9rlek_dataflash_cs0_config \
++at91sam9rlek_config : unconfig
++ @mkdir -p $(obj)include
++ @if [ "$(findstring _nandflash,$@)" ] ; then \
++ echo "#define CFG_USE_NANDFLASH 1" >>$(obj)include/config.h ; \
++ $(XECHO) "... with environment variable in NAND FLASH" ; \
++ else \
++ echo "#define CFG_USE_DATAFLASH 1" >>$(obj)include/config.h ; \
++ $(XECHO) "... with environment variable in SPI DATAFLASH CS0" ; \
++ fi;
++ @$(MKCONFIG) -a at91sam9rlek arm arm926ejs at91sam9rlek atmel at91sam9
++
++at91sam9m10g45ek_nandflash_config \
++at91sam9m10g45ek_dataflash_config \
++at91sam9m10g45ek_dataflash_cs0_config \
++at91sam9m10g45ek_config : unconfig
++ @mkdir -p $(obj)include
++ @if [ "$(findstring _nandflash,$@)" ] ; then \
++ echo "#define CFG_USE_NANDFLASH 1" >>$(obj)include/config.h ; \
++ $(XECHO) "... with environment variable in NAND FLASH" ; \
++ echo "#define CFG_USE_AT91SAM9M10G45EK 1" >>$(obj)include/config.h ; \
++ else \
++ echo "#define CFG_USE_DATAFLASH 1" >>$(obj)include/config.h ; \
++ $(XECHO) "... with environment variable in SPI DATAFLASH CS0" ; \
++ echo "#define CFG_USE_AT91SAM9M10G45EK 1" >>$(obj)include/config.h ; \
++ fi;
++ @$(MKCONFIG) -a at91sam9m10g45ek arm arm926ejs at91sam9m10g45ek atmel at91sam9
++
++at91sam9g45ekes_nandflash_config \
++at91sam9g45ekes_dataflash_config \
++at91sam9g45ekes_dataflash_cs0_config \
++at91sam9g45ekes_config : unconfig
++ @mkdir -p $(obj)include
++ @if [ "$(findstring _nandflash,$@)" ] ; then \
++ echo "#define CFG_USE_NANDFLASH 1" >>$(obj)include/config.h ; \
++ $(XECHO) "... with environment variable in NAND FLASH" ; \
++ echo "#define CFG_USE_AT91SAM9G45EKES 1" >>$(obj)include/config.h ; \
++ else \
++ echo "#define CFG_USE_DATAFLASH 1" >>$(obj)include/config.h ; \
++ $(XECHO) "... with environment variable in SPI DATAFLASH CS0" ; \
++ echo "#define CFG_USE_AT91SAM9G45EKES 1" >>$(obj)include/config.h ; \
++ fi;
++ @$(MKCONFIG) -a at91sam9m10g45ek arm arm926ejs at91sam9m10g45ek atmel at91sam9
++
++at91sam9m10ekes_nandflash_config \
++at91sam9m10ekes_dataflash_config \
++at91sam9m10ekes_dataflash_cs0_config \
++at91sam9m10ekes_config : unconfig
++ @mkdir -p $(obj)include
++ @if [ "$(findstring _nandflash,$@)" ] ; then \
++ echo "#define CFG_USE_NANDFLASH 1" >>$(obj)include/config.h ; \
++ $(XECHO) "... with environment variable in NAND FLASH" ; \
++ echo "#define CFG_USE_AT91SAM9M10EKES 1" >>$(obj)include/config.h ; \
++ else \
++ echo "#define CFG_USE_DATAFLASH 1" >>$(obj)include/config.h ; \
++ $(XECHO) "... with environment variable in SPI DATAFLASH CS0" ; \
++ echo "#define CFG_USE_AT91SAM9M10EKES 1" >>$(obj)include/config.h ; \
++ fi;
++ @$(MKCONFIG) -a at91sam9m10g45ek arm arm926ejs at91sam9m10g45ek atmel at91sam9
+
+ ########################################################################
+ ## ARM Integrator boards - see doc/README-integrator for more info.
+diff -uprN u-boot-1.3.4-vanilla/net/eth.c u-boot-1.3.4/net/eth.c
+--- u-boot-1.3.4-vanilla/net/eth.c 2008-08-12 09:08:38.000000000 -0500
++++ u-boot-1.3.4/net/eth.c 2010-03-25 16:45:59.000000000 -0500
+@@ -287,7 +287,7 @@ int eth_initialize(bd_t *bis)
+ mcdmafec_initialize(bis);
+ #endif
+ #if defined(CONFIG_AT91CAP9) || defined(CONFIG_AT91SAM9260) || \
+- defined(CONFIG_AT91SAM9263)
++ defined(CONFIG_AT91SAM9263) || defined(CONFIG_AT91SAM9G20)
+ at91sam9_eth_initialize(bis);
+ #endif
+
diff --git a/multitech/recipes/u-boot/u-boot_1.3.4.bb b/multitech/recipes/u-boot/u-boot_1.3.4.bb
index 3ffcdb1..4179176 100644
--- a/multitech/recipes/u-boot/u-boot_1.3.4.bb
+++ b/multitech/recipes/u-boot/u-boot_1.3.4.bb
@@ -1,6 +1,6 @@
require recipes/u-boot/u-boot.inc
-PR = "r9"
+PR = "r10"
ALLOW_EMPTY = 1
SRC_URI = "ftp://ftp.denx.de/pub/u-boot/u-boot-${PV}.tar.bz2 \
@@ -9,12 +9,7 @@ SRC_URI = "ftp://ftp.denx.de/pub/u-boot/u-boot-${PV}.tar.bz2 \
SRC_URI[md5sum] = "ca12b805b4f2bdcf15733be3fe22e896"
SRC_URI[sha256sum] = "096aa286d923b7cc356bbe0dda0a29a701369deeb27ada1a2f053155aa403c31"
-SRC_URI_append_mtcdp = "\
- file://u-boot-${PV}-mts.patch \
- file://fw_env.config \
-"
-
-SRC_URI_append_mt100eocg = "\
+SRC_URI_append = "\
file://u-boot-${PV}-mts.patch \
file://fw_env.config \
"
@@ -28,8 +23,7 @@ FILES_${PN} = " \
${base_sbindir}/fw_printenv \
"
-FILES_${PN}_append_mtcdp = "${sysconfdir}/fw_env.config"
-FILES_${PN}_append_mt100eocg = "${sysconfdir}/fw_env.config"
+FILES_${PN}_append = "${sysconfdir}/fw_env.config"
do_configure_prepend() {
mv -f tools/setlocalversion tools/setlocalversion.old
diff --git a/multitech/recipes/udev/udev-165/mt100eocg-pcie-dk/corecdp.rules b/multitech/recipes/udev/udev-165/mt100eocg-pcie-dk/corecdp.rules
new file mode 100644
index 0000000..633947d
--- /dev/null
+++ b/multitech/recipes/udev/udev-165/mt100eocg-pcie-dk/corecdp.rules
@@ -0,0 +1,54 @@
+ACTION=="remove", GOTO="corecdp_end"
+SUBSYSTEM!="tty", GOTO="corecdp_end"
+KERNEL!="ttyUSB[0-9]*|ttyACM[0-9]*|ttyS*", GOTO="corecdp_end"
+
+# use serial port by default, allow USB radios to overwrite link
+KERNEL=="ttyS1", SYMLINK+="modem0", OPTIONS+="link_priority=-1"
+KERNEL=="ttyS1", SYMLINK+="modem_at0", OPTIONS+="link_priority=-1"
+
+SUBSYSTEMS=="usb", ENV{ID_IFACE}="$attr{bInterfaceNumber}"
+ENV{ID_IFACE}=="", GOTO="corecdp_end"
+
+# All modem ports
+# H5
+ATTRS{idVendor}=="1bc7", ATTRS{idProduct}=="0021", ENV{ID_IFACE}=="00", SYMLINK+="modem0"
+ATTRS{idVendor}=="1bc7", ATTRS{idProduct}=="0021", ENV{ID_IFACE}=="02", SYMLINK+="modem1"
+ATTRS{idVendor}=="1bc7", ATTRS{idProduct}=="0021", ENV{ID_IFACE}=="04", SYMLINK+="modem2"
+ATTRS{idVendor}=="1bc7", ATTRS{idProduct}=="0021", ENV{ID_IFACE}=="06", SYMLINK+="modem3"
+ATTRS{idVendor}=="1bc7", ATTRS{idProduct}=="0021", ENV{ID_IFACE}=="08", SYMLINK+="modem4"
+ATTRS{idVendor}=="1bc7", ATTRS{idProduct}=="0021", ENV{ID_IFACE}=="0a", SYMLINK+="modem5"
+ATTRS{idVendor}=="1bc7", ATTRS{idProduct}=="0021", ENV{ID_IFACE}=="0c", SYMLINK+="modem6"
+# EV3
+ATTRS{idVendor}=="1bc7", ATTRS{idProduct}=="1010", ENV{ID_IFACE}=="00", SYMLINK+="modem0"
+ATTRS{idVendor}=="1bc7", ATTRS{idProduct}=="1010", ENV{ID_IFACE}=="01", SYMLINK+="modem1"
+ATTRS{idVendor}=="1bc7", ATTRS{idProduct}=="1010", ENV{ID_IFACE}=="02", SYMLINK+="modem2"
+ATTRS{idVendor}=="1bc7", ATTRS{idProduct}=="1010", ENV{ID_IFACE}=="03", SYMLINK+="modem3"
+# H4
+ATTRS{idVendor}=="1199", ATTRS{idProduct}=="683c", ENV{ID_IFACE}=="00", SYMLINK+="modem0"
+ATTRS{idVendor}=="1199", ATTRS{idProduct}=="683c", ENV{ID_IFACE}=="01", SYMLINK+="modem1"
+ATTRS{idVendor}=="1199", ATTRS{idProduct}=="683c", ENV{ID_IFACE}=="02", SYMLINK+="modem2"
+ATTRS{idVendor}=="1199", ATTRS{idProduct}=="683c", ENV{ID_IFACE}=="03", SYMLINK+="modem3"
+ATTRS{idVendor}=="1199", ATTRS{idProduct}=="683c", ENV{ID_IFACE}=="04", SYMLINK+="modem4"
+ATTRS{idVendor}=="1199", ATTRS{idProduct}=="683c", ENV{ID_IFACE}=="05", SYMLINK+="modem5"
+ATTRS{idVendor}=="1199", ATTRS{idProduct}=="683c", ENV{ID_IFACE}=="06", SYMLINK+="modem6"
+# EV2
+ATTRS{idVendor}=="1199", ATTRS{idProduct}=="0028", SYMLINK+="modem$env{ID_PORT}"
+
+# AT Command ports
+# H5: ttyACM0, ttyACM3
+ATTRS{idVendor}=="1bc7", ATTRS{idProduct}=="0021", ENV{ID_IFACE}=="00", SYMLINK+="modem_at0"
+ATTRS{idVendor}=="1bc7", ATTRS{idProduct}=="0021", ENV{ID_IFACE}=="06", SYMLINK+="modem_at1"
+# EV3: ttyUSB2, ttyUSB3
+ATTRS{idVendor}=="1bc7", ATTRS{idProduct}=="1010", ENV{ID_IFACE}=="02", SYMLINK+="modem_at0"
+ATTRS{idVendor}=="1bc7", ATTRS{idProduct}=="1010", ENV{ID_IFACE}=="03", SYMLINK+="modem_at1"
+# H4: ttyUSB3, ttyUSB4, ttyUSB5
+ATTRS{idVendor}=="1199", ATTRS{idProduct}=="683c", ENV{ID_IFACE}=="03", SYMLINK+="modem_at0"
+ATTRS{idVendor}=="1199", ATTRS{idProduct}=="683c", ENV{ID_IFACE}=="04", SYMLINK+="modem_at1"
+ATTRS{idVendor}=="1199", ATTRS{idProduct}=="683c", ENV{ID_IFACE}=="05", SYMLINK+="modem_at2"
+# EV2: ttyUSB0
+ATTRS{idVendor}=="1199", ATTRS{idProduct}=="0028", ENV{ID_PORT}=="0", SYMLINK+="modem_at0"
+
+# mtpcie-dk: bluetooth on exar chip (ACM1, iface 2)
+ATTRS{idVendor}=="04e2", ATTRS{idProduct}=="1414", ENV{ID_IFACE}=="02", SYMLINK+="bt"
+
+LABEL="corecdp_end"
diff --git a/multitech/recipes/udev/udev_165.bbappend b/multitech/recipes/udev/udev_165.bbappend
index e87ff82..2028ba4 100644
--- a/multitech/recipes/udev/udev_165.bbappend
+++ b/multitech/recipes/udev/udev_165.bbappend
@@ -1,7 +1,7 @@
FILESEXTRA := "${THISDIR}"
FILESPATHBASE =. "${FILESEXTRA}:"
-PR .= ".corecdp2"
+PR .= ".corecdp3"
# add custom rules for persistent modem device names
SRC_URI += "file://corecdp.rules"
diff --git a/multitech/recipes/wl12xx-firmware/wl12xx-firmware/LICENCE b/multitech/recipes/wl12xx-firmware/wl12xx-firmware/LICENCE
new file mode 100644
index 0000000..085f6c7
--- /dev/null
+++ b/multitech/recipes/wl12xx-firmware/wl12xx-firmware/LICENCE
@@ -0,0 +1,151 @@
+Texas Instruments Incorporated
+Technology and Software Publicly Available
+Software (Object Code) License Agreement
+
+
+IMPORTANT - PLEASE READ THE FOLLOWING LICENSE AGREEMENT CAREFULLY. THIS IS
+ A LEGALLY BINDING AGREEMENT. DO NOT DOWNLOAD THE LICENSED MATERIALS
+ UNLESS: (1) YOU ARE AUTHORIZED TO ACCEPT AND AGREE TO THE TERMS OF THIS
+ LICENSE AGREEMENT AND (2) YOU INTEND TO ENTER INTO AND TO BE BOUND BY
+ THE TERMS OF THIS AGREEMENT.
+
+This Software License Agreement ("Agreement") is a legal agreement between you
+ (either an individual or entity) and Texas Instruments Incorporated
+ ("TI"). The "Licensed Materials" subject to this Agreement include,
+ in whole or in part, the software programs that accompany this Agreement
+ and any "on-line" or electronic documentation associated with these
+ programs. By installing, copying or otherwise using the Licensed
+ Materials you agree to abide by the terms of this Agreement.
+ If you choose not to accept or agree with these terms, do not download
+ or install the Licensed Materials.
+
+
+1. Object Code License. TI hereby grants to you a limited, non-exclusive
+ license to reproduce and use the Licensed Materials provided to you in
+ object code format and to distribute an unlimited number of object or
+ executable copies of such Licensed Materials, provided that such object
+ or executable copies are used solely and exclusively on devices
+ manufactured by or for TI.
+
+2. Termination. This license is effective until terminated. Without prejudice
+ to any other rights, TI may terminate your right to use the Licensed
+ Materials under this Agreement if you fail to comply with the terms of
+ this Agreement. In such event, you shall destroy all copies of the
+ Licensed Materials, including all portions and derivatives thereof.
+
+3. Intellectual Property Rights. The Licensed Materials being provided to you
+ hereunder are being made publicly available by TI, even though they
+ contain copyrighted material of TI and its licensors, if applicable.
+ In no event may you alter, remove or destroy any copyright notice
+ included in the Licensed Materials. To the extent that any of the
+ Licensed Materials are provided in binary or object code only, you may
+ not unlock, decompile, reverse engineer, disassemble or otherwise
+ translate such binary or object code to human-perceivable form. The
+ source code of such reverse engineered code may contain TI trade secret
+ and other proprietary information. Further, nothing shall obligate TI
+ to provide you with source code for the Licensed Materials licensed to
+ you in binary or object code only under this Agreement. TI reserves all
+ rights not specifically granted under this Agreement.
+
+4. Warranties and Limitations. THE LICENSED MATERIALS ARE PROVIDED "AS IS". TI
+ MAKES NO WARRANTY OR REPRESENTATION, EXPRESS, IMPLIED OR STATUTORY,
+ INCLUDING ANY IMPLIED WARRANTIES OF MERCHANTIBILITY, FITNESS FOR A
+ PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR COMPLETENESS OF
+ RESPONSES, RESULTS AND LACK OF NEGLIGENCE. TI DISCLAIMS ANY WARRANTY OF
+ TITLE, QUIET ENJOYMENT, QUIET POSESSION, AND NON-INFRINGEMENT OF ANY
+ THIRD PARTY INTELLECTUAL PROPERTY RIGHTS WITH REGARD TO THE LICENSED
+ MATERIALS OR USE OF THOSE MATERIALS.
+
+YOU ACKNOWLEDGE AND AGREE THAT THE LICENSED MATERIALS MAY NOT BE INTENDED FOR
+ PRODUCTION APPLICATIONS AND MAY CONTAIN IRREGULARITIES AND DEFECTS NOT
+ FOUND IN PRODUCTION SOFTWARE. FURTHERMORE, YOU ACKNOWLEDGE AND AGREE
+ THAT THE LICENSED MATERIALS HAVE NOT BEEN TESTED OR CERTIFIED BY ANY
+ GOVERNMENT AGENCY OR INDUSTRY REGULATORY ORGANIZATION OR ANY OTHER THIRD
+ PARTY ORGANIZATION. YOU AGREE THAT PRIOR TO USING, INCORPORATING OR
+ DISTRIBUTING THE LICENSED MATERIALS IN OR WITH ANY COMMERCIAL PRODUCT
+ THAT YOU WILL THOROUGHLY TEST THE PRODUCT AND THE FUNCTIONALITY OF THE
+ LICENSED MATERIALS IN OR WITH THAT PRODUCT AND BE SOLELY RESPONSIBLE FOR
+ ANY PROBLEMS OR FAILURES.
+
+IN NO EVENT SHALL TI, OR ANY APPLICABLE LICENSOR, BE LIABLE FOR ANY SPECIAL,
+ INDIRECT, INCIDENTAL, PUNITIVE OR CONSEQUENTIAL DAMAGES, HOWEVER CAUSED
+ ON ANY THEORY OF LIABILITY, ARISING IN ANY WAY OUT OF THIS AGREEMENT,
+ OR YOUR USE OF THE LICENSED MATERIALS, WHETHER OR NOT TI HAS BEEN
+ ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. EXCLUDED DAMAGES INCLUDE,
+ BUT ARE NOT LIMITED TO, COST OF REMOVAL OR REINSTALLATION, OUTSIDE
+ COMPUTER TIME, LABOR COSTS, LOSS OR CORRUPTION OF DATA, LOSS OF
+ GOODWILL, LOSS OF PROFITS, LOSS OF SAVINGS, OR LOSS OF USE OR
+ INTERRUPTION OF BUSINESS OR ANY OTHER ECONOMIC LOSS. IN NO EVENT WILL
+ TI'S AGGREGATE LIABILITY UNDER THIS AGREEMENT OR ARISING OUT OF YOUR USE
+ OF THE LICENSED MATERIALS EXCEED FIVE HUNDRED U.S. DOLLARS (US$500).
+
+Because some jurisdictions do not allow the exclusion or limitation of
+ incidental or consequential damages or limitation on how long an implied
+ warranty lasts, the above limitations or exclusions may not apply to
+ you.
+
+5. Export Control. Thesoftware programs and any "on-line" documentation as well
+ as any updates or upgrades to such software programs or documentation
+ may be subject to the export or import regulations of certain countries.
+ You agree to comply with all such regulations and acknowledge that you
+ have the responsibility to obtain any licenses or other authorizations
+ that may be required to export, re-export or import the Licensed
+ Materials.
+
+6. Governing Law, Jurisdiction and Severability. This Agreement will be
+ governed by and interpreted in accordance with the laws of the State of
+ Texas, without reference to that state's conflict of laws principles.
+ This Agreement shall not be governed by the United Nations Convention on
+ Contracts for the International Sale of Goods, nor shall it be governed
+ by the Uniform Computer Information Transactions Act (UCITA). Any
+ dispute arising out of or related to this Agreement will be brought in,
+ and each party consents to the exclusive jurisdiction and venue in the
+ state and federal courts sitting in Dallas Country, Texas. Each party
+ waives all defenses of lack of personal jurisdiction and forum
+ non-conveniens and agrees that process may be served on either party in
+ a manner authorized by applicable law or court rule. If for any reason
+ a court of competent jurisdiction finds any provision of the Agreement
+ to be unenforceable, that provision will be enforced to the maximum
+ extent possible to effectuate the intent of the parties and the
+ remainder of the Agreement shall continue in full force and effect.
+
+7. PRC Provisions. If you are located in the People's Republic of China ("PRC")
+ or if the Licensed Materials will be sent to the PRC, the following
+ provisions shall apply and shall supersede any other provisions in this
+ Agreement concerning the same subject matter as the following
+ provisions:
+
+ a. Registration Requirements. You shall be solely responsible for
+ performing all acts and obtaining all approvals that may be required in
+ connection with this Agreement by the government of the PRC, including
+ but not limited to registering pursuant to, and otherwise complying
+ with, the PRC Measures on the Administration of Software Products,
+ Management Regulations on Technology Import-Export, and Technology
+ Import and Export Contract Registration Management Rules. Upon receipt
+ of such approvals from the government authorities, you shall forward
+ evidence of all such approvals to TI for its records. In the event that
+ you fail to obtain any such approval or registration, you shall be
+ solely responsible for any and all losses, damages or costs resulting
+ therefrom, and shall indemnify TI for all such losses, damages or costs.
+
+ b. Governing Language. This Agreement is written and executed in
+ the English language. If a translation of this Agreement is required
+ for any purpose, including but not limited to registration of the
+ Agreement pursuant to any governmental laws, regulations or rules, you
+ shall be solely responsible for creating such translation. Any
+ translation of this Agreement into a language other than English is
+ intended solely in order to comply with such laws or for reference
+ purposes, and the English language version shall be authoritative and
+ controlling.
+
+8. Entire Agreement. This is the entire Agreement between you and TI and
+ supersedes any prior agreement between the parties related to the
+ subject matter of this Agreement. No amendment or modification of this
+ Agreement will be effective unless in writing and signed by a duly
+ authorized representative of TI. You hereby warrant and represent that
+ you have obtained all authorizations and other applicable consents
+ required empowering you to enter into this Agreement.
+
+1
+TILAW-#236402v3
+
diff --git a/multitech/recipes/wl12xx-firmware/wl12xx-firmware/TIInit_7.6.15.bts b/multitech/recipes/wl12xx-firmware/wl12xx-firmware/TIInit_7.6.15.bts
new file mode 100644
index 0000000..7c6a051
--- /dev/null
+++ b/multitech/recipes/wl12xx-firmware/wl12xx-firmware/TIInit_7.6.15.bts
Binary files differ
diff --git a/multitech/recipes/wl12xx-firmware/wl12xx-firmware/wl1271-fw-2.bin b/multitech/recipes/wl12xx-firmware/wl12xx-firmware/wl1271-fw-2.bin
new file mode 100644
index 0000000..a01324e
--- /dev/null
+++ b/multitech/recipes/wl12xx-firmware/wl12xx-firmware/wl1271-fw-2.bin
Binary files differ
diff --git a/multitech/recipes/wl12xx-firmware/wl12xx-firmware/wl1271-fw-ap.bin b/multitech/recipes/wl12xx-firmware/wl12xx-firmware/wl1271-fw-ap.bin
new file mode 100644
index 0000000..c145a71
--- /dev/null
+++ b/multitech/recipes/wl12xx-firmware/wl12xx-firmware/wl1271-fw-ap.bin
Binary files differ
diff --git a/multitech/recipes/wl12xx-firmware/wl12xx-firmware/wl1271-fw-multirole-plt.bin b/multitech/recipes/wl12xx-firmware/wl12xx-firmware/wl1271-fw-multirole-plt.bin
new file mode 100755
index 0000000..784b275
--- /dev/null
+++ b/multitech/recipes/wl12xx-firmware/wl12xx-firmware/wl1271-fw-multirole-plt.bin
Binary files differ
diff --git a/multitech/recipes/wl12xx-firmware/wl12xx-firmware/wl1271-fw-multirole-roc.bin b/multitech/recipes/wl12xx-firmware/wl12xx-firmware/wl1271-fw-multirole-roc.bin
new file mode 100755
index 0000000..3655919
--- /dev/null
+++ b/multitech/recipes/wl12xx-firmware/wl12xx-firmware/wl1271-fw-multirole-roc.bin
Binary files differ
diff --git a/multitech/recipes/wl12xx-firmware/wl12xx-firmware/wl1271-nvs.bin b/multitech/recipes/wl12xx-firmware/wl12xx-firmware/wl1271-nvs.bin
new file mode 100644
index 0000000..91978f9
--- /dev/null
+++ b/multitech/recipes/wl12xx-firmware/wl12xx-firmware/wl1271-nvs.bin
Binary files differ
diff --git a/multitech/recipes/wl12xx-firmware/wl12xx-firmware_1.0.bb b/multitech/recipes/wl12xx-firmware/wl12xx-firmware_1.0.bb
new file mode 100644
index 0000000..78e3d11
--- /dev/null
+++ b/multitech/recipes/wl12xx-firmware/wl12xx-firmware_1.0.bb
@@ -0,0 +1,20 @@
+DESCRIPTION = "TI wl1271 firmware"
+HOMEPAGE = "http://processors.wiki.ti.com/index.php/ARM_Processor_Open_Source_Wireless_Connectivity"
+PR="r2"
+
+SRC_URI = "file://TIInit_7.6.15.bts \
+ file://wl1271-fw-2.bin \
+ file://wl1271-fw-ap.bin \
+ file://wl1271-fw-multirole-plt.bin \
+ file://wl1271-fw-multirole-roc.bin \
+ file://wl1271-nvs.bin \
+ "
+
+do_install() {
+ install -d ${D}/lib/firmware
+ install -d ${D}/lib/firmware/ti-connectivity
+ install ${WORKDIR}/wl12*.bin ${D}/lib/firmware/ti-connectivity
+ install ${WORKDIR}/*.bts ${D}/lib/firmware/
+}
+
+FILES_${PN} = "/lib/firmware"
diff --git a/multitech/recipes/wpa-supplicant/wpa-supplicant-1.0.inc b/multitech/recipes/wpa-supplicant/wpa-supplicant-1.0.inc
new file mode 100644
index 0000000..7ca4cc3
--- /dev/null
+++ b/multitech/recipes/wpa-supplicant/wpa-supplicant-1.0.inc
@@ -0,0 +1,94 @@
+DESCRIPTION = "A Client for Wi-Fi Protected Access (WPA)."
+HOMEPAGE = "http://hostap.epitest.fi/wpa_supplicant/"
+BUGTRACKER = "http://hostap.epitest.fi/bugz/"
+SECTION = "network"
+LICENSE = "GPLv2 | BSD"
+LIC_FILES_CHKSUM = "file://../COPYING;md5=c54ce9345727175ff66d17b67ff51f58 \
+ file://../README;md5=54cfc88015d3ce83f7156e63c6bb1738 \
+ file://wpa_supplicant.c;beginline=1;endline=17;md5=acdc5a4b0d6345f21f136eace747260e"
+DEPENDS = "gnutls dbus libnl openssl ${@base_contains("COMBINED_FEATURES", "madwifi", "madwifi-ng", "",d)}"
+RRECOMMENDS_${PN} = "wpa-supplicant-passphrase wpa-supplicant-cli"
+INC_PR = "r0"
+
+SRC_URI = "http://hostap.epitest.fi/releases/wpa_supplicant-${PV}.tar.gz \
+ file://defconfig \
+ file://defaults-sane \
+ file://wpa-supplicant.sh \
+ file://wpa_supplicant.conf \
+ file://wpa_supplicant.conf-sane \
+ file://99_wpa_supplicant"
+
+S = "${WORKDIR}/wpa_supplicant-${PV}/wpa_supplicant"
+
+PACKAGES_prepend = "wpa-supplicant-passphrase wpa-supplicant-cli "
+FILES_wpa-supplicant-passphrase = "/usr/sbin/wpa_passphrase"
+FILES_wpa-supplicant-cli = "/usr/sbin/wpa_cli"
+FILES_${PN} += " /usr/share/dbus-1/system-services/*"
+
+do_configure () {
+ install -m 0755 ${WORKDIR}/defconfig .config
+ if [ "${@base_contains('COMBINED_FEATURES', 'madwifi', 1, 0, d)}" = "1" ]; then
+ echo "CONFIG_DRIVER_MADWIFI=y" >> .config
+ echo "CFLAGS += -I${STAGING_INCDIR}/madwifi-ng" >> .config
+ fi
+}
+
+do_compile () {
+ make
+}
+
+do_install () {
+ install -d ${D}${sbindir}
+ install -m 755 wpa_supplicant ${D}${sbindir}
+ install -m 755 wpa_passphrase ${D}${sbindir}
+ install -m 755 wpa_cli ${D}${sbindir}
+
+ install -d ${D}${docdir}/wpa_supplicant
+ install -m 644 README ${WORKDIR}/wpa_supplicant.conf ${D}${docdir}/wpa_supplicant
+
+ install -d ${D}${sysconfdir}/default
+ install -m 600 ${WORKDIR}/defaults-sane ${D}${sysconfdir}/default/wpa
+ install -m 600 ${WORKDIR}/wpa_supplicant.conf-sane ${D}${sysconfdir}/wpa_supplicant.conf
+
+ if grep -q ^CONFIG_CTRL_IFACE_DBUS=y .config || grep -q ^CONFIG_CTRL_IFACE_DBUS_NEW=y .config; then
+ install -d ${D}/${sysconfdir}/dbus-1/system.d
+ install -m 644 ${S}/dbus/dbus-wpa_supplicant.conf ${D}/${sysconfdir}/dbus-1/system.d
+ install -d ${D}/${datadir}/dbus-1/system-services
+ if grep -q ^CONFIG_CTRL_IFACE_DBUS=y .config; then
+ sed -i -e s:/sbin:${sbindir}:g ${S}/dbus/fi.epitest.hostap.WPASupplicant.service
+ install -m 644 ${S}/dbus/fi.epitest.hostap.WPASupplicant.service ${D}/${datadir}/dbus-1/system-services
+ fi
+ if grep -q ^CONFIG_CTRL_IFACE_DBUS_NEW=y .config; then
+ sed -i -e s:/sbin:${sbindir}:g ${S}/dbus/fi.w1.wpa_supplicant1.service
+ install -m 644 ${S}/dbus/fi.w1.wpa_supplicant1.service ${D}/${datadir}/dbus-1/system-services
+ fi
+ fi
+
+ install -d ${D}${sysconfdir}/network/if-pre-up.d/
+ install -d ${D}${sysconfdir}/network/if-post-down.d/
+ install -d ${D}${sysconfdir}/network/if-down.d/
+ install -m 644 ${WORKDIR}/wpa_supplicant.conf ${D}${sysconfdir}
+ install -m 755 ${WORKDIR}/wpa-supplicant.sh ${D}${sysconfdir}/network/if-pre-up.d/wpa-supplicant
+ cd ${D}${sysconfdir}/network/ && \
+ ln -sf ../if-pre-up.d/wpa-supplicant if-post-down.d/wpa-supplicant
+
+ install -d ${D}/etc/default/volatiles
+ install -m 0644 ${WORKDIR}/99_wpa_supplicant ${D}/etc/default/volatiles
+}
+
+#we introduce MY_ARCH to get 'armv5te' as arch instead of the misleading 'arm' on armv5te builds
+MY_ARCH := "${PACKAGE_ARCH}"
+PACKAGE_ARCH = "${@base_contains('COMBINED_FEATURES', 'madwifi', '${MACHINE_ARCH}', '${MY_ARCH}', d)}"
+
+pkg_postinst_wpa-supplicant () {
+ # can't do this offline
+ if [ "x$D" != "x" ]; then
+ exit 1
+ fi
+
+ DBUSPID=`pidof dbus-daemon`
+
+ if [ "x$DBUSPID" != "x" ]; then
+ /etc/init.d/dbus-1 reload
+ fi
+}
diff --git a/multitech/recipes/wpa-supplicant/wpa-supplicant-1.0/99_wpa_supplicant b/multitech/recipes/wpa-supplicant/wpa-supplicant-1.0/99_wpa_supplicant
new file mode 100644
index 0000000..6ff4dd8
--- /dev/null
+++ b/multitech/recipes/wpa-supplicant/wpa-supplicant-1.0/99_wpa_supplicant
@@ -0,0 +1 @@
+d root root 0700 /var/run/wpa_supplicant none
diff --git a/multitech/recipes/wpa-supplicant/wpa-supplicant-1.0/defaults-sane b/multitech/recipes/wpa-supplicant/wpa-supplicant-1.0/defaults-sane
new file mode 100644
index 0000000..67c4cbd
--- /dev/null
+++ b/multitech/recipes/wpa-supplicant/wpa-supplicant-1.0/defaults-sane
@@ -0,0 +1,8 @@
+# Useful flags:
+# -i <ifname> Interface (required, unless specified in config)
+# -D <driver> Wireless Driver
+# -d Debugging (-dd for more)
+# -q Quiet (-qq for more)
+
+CONFIG="/etc/wpa_supplicant.conf"
+OPTIONS="-i eth1 -D wext"
diff --git a/multitech/recipes/wpa-supplicant/wpa-supplicant-1.0/defconfig b/multitech/recipes/wpa-supplicant/wpa-supplicant-1.0/defconfig
new file mode 100644
index 0000000..4136225
--- /dev/null
+++ b/multitech/recipes/wpa-supplicant/wpa-supplicant-1.0/defconfig
@@ -0,0 +1,409 @@
+# Example wpa_supplicant build time configuration
+#
+# This file lists the configuration options that are used when building the
+# hostapd binary. All lines starting with # are ignored. Configuration option
+# lines must be commented out complete, if they are not to be included, i.e.,
+# just setting VARIABLE=n is not disabling that variable.
+#
+# This file is included in Makefile, so variables like CFLAGS and LIBS can also
+# be modified from here. In most cases, these lines should use += in order not
+# to override previous values of the variables.
+
+
+# Uncomment following two lines and fix the paths if you have installed OpenSSL
+# or GnuTLS in non-default location
+#CFLAGS += -I/usr/local/openssl/include
+#LIBS += -L/usr/local/openssl/lib
+
+# Some Red Hat versions seem to include kerberos header files from OpenSSL, but
+# the kerberos files are not in the default include path. Following line can be
+# used to fix build issues on such systems (krb5.h not found).
+#CFLAGS += -I/usr/include/kerberos
+
+# Example configuration for various cross-compilation platforms
+
+#### sveasoft (e.g., for Linksys WRT54G) ######################################
+#CC=mipsel-uclibc-gcc
+#CC=/opt/brcm/hndtools-mipsel-uclibc/bin/mipsel-uclibc-gcc
+#CFLAGS += -Os
+#CPPFLAGS += -I../src/include -I../../src/router/openssl/include
+#LIBS += -L/opt/brcm/hndtools-mipsel-uclibc-0.9.19/lib -lssl
+###############################################################################
+
+#### openwrt (e.g., for Linksys WRT54G) #######################################
+#CC=mipsel-uclibc-gcc
+#CC=/opt/brcm/hndtools-mipsel-uclibc/bin/mipsel-uclibc-gcc
+#CFLAGS += -Os
+#CPPFLAGS=-I../src/include -I../openssl-0.9.7d/include \
+# -I../WRT54GS/release/src/include
+#LIBS = -lssl
+###############################################################################
+
+
+# Driver interface for Host AP driver
+CONFIG_DRIVER_HOSTAP=y
+
+# Driver interface for Agere driver
+#CONFIG_DRIVER_HERMES=y
+# Change include directories to match with the local setup
+#CFLAGS += -I../../hcf -I../../include -I../../include/hcf
+#CFLAGS += -I../../include/wireless
+
+# Driver interface for madwifi driver
+# Deprecated; use CONFIG_DRIVER_WEXT=y instead.
+#CONFIG_DRIVER_MADWIFI=y
+# Set include directory to the madwifi source tree
+#CFLAGS += -I../../madwifi
+
+# Driver interface for ndiswrapper
+# Deprecated; use CONFIG_DRIVER_WEXT=y instead.
+#CONFIG_DRIVER_NDISWRAPPER=y
+
+# Driver interface for Atmel driver
+# CONFIG_DRIVER_ATMEL=y
+
+# Driver interface for old Broadcom driver
+# Please note that the newer Broadcom driver ("hybrid Linux driver") supports
+# Linux wireless extensions and does not need (or even work) with the old
+# driver wrapper. Use CONFIG_DRIVER_WEXT=y with that driver.
+#CONFIG_DRIVER_BROADCOM=y
+# Example path for wlioctl.h; change to match your configuration
+#CFLAGS += -I/opt/WRT54GS/release/src/include
+
+# Driver interface for Intel ipw2100/2200 driver
+# Deprecated; use CONFIG_DRIVER_WEXT=y instead.
+#CONFIG_DRIVER_IPW=y
+
+# Driver interface for Ralink driver
+#CONFIG_DRIVER_RALINK=y
+
+# Driver interface for generic Linux wireless extensions
+CONFIG_DRIVER_WEXT=y
+
+# Driver interface for Linux drivers using the nl80211 kernel interface
+CONFIG_DRIVER_NL80211=y
+CONFIG_LIBNL20=y
+
+# Driver interface for FreeBSD net80211 layer (e.g., Atheros driver)
+#CONFIG_DRIVER_BSD=y
+#CFLAGS += -I/usr/local/include
+#LIBS += -L/usr/local/lib
+#LIBS_p += -L/usr/local/lib
+#LIBS_c += -L/usr/local/lib
+
+# Driver interface for Windows NDIS
+#CONFIG_DRIVER_NDIS=y
+#CFLAGS += -I/usr/include/w32api/ddk
+#LIBS += -L/usr/local/lib
+# For native build using mingw
+#CONFIG_NATIVE_WINDOWS=y
+# Additional directories for cross-compilation on Linux host for mingw target
+#CFLAGS += -I/opt/mingw/mingw32/include/ddk
+#LIBS += -L/opt/mingw/mingw32/lib
+#CC=mingw32-gcc
+# By default, driver_ndis uses WinPcap for low-level operations. This can be
+# replaced with the following option which replaces WinPcap calls with NDISUIO.
+# However, this requires that WZC is disabled (net stop wzcsvc) before starting
+# wpa_supplicant.
+# CONFIG_USE_NDISUIO=y
+
+# Driver interface for development testing
+#CONFIG_DRIVER_TEST=y
+
+# Include client MLME (management frame processing) for test driver
+# This can be used to test MLME operations in hostapd with the test interface.
+# space.
+#CONFIG_CLIENT_MLME=y
+
+# Driver interface for wired Ethernet drivers
+CONFIG_DRIVER_WIRED=y
+
+# Driver interface for the Broadcom RoboSwitch family
+#CONFIG_DRIVER_ROBOSWITCH=y
+
+# Driver interface for no driver (e.g., WPS ER only)
+#CONFIG_DRIVER_NONE=y
+
+# Enable IEEE 802.1X Supplicant (automatically included if any EAP method is
+# included)
+CONFIG_IEEE8021X_EAPOL=y
+
+# EAP-MD5
+CONFIG_EAP_MD5=y
+
+# EAP-MSCHAPv2
+CONFIG_EAP_MSCHAPV2=y
+
+# EAP-TLS
+CONFIG_EAP_TLS=y
+
+# EAL-PEAP
+CONFIG_EAP_PEAP=y
+
+# EAP-TTLS
+CONFIG_EAP_TTLS=y
+
+# EAP-FAST
+# Note: Default OpenSSL package does not include support for all the
+# functionality needed for EAP-FAST. If EAP-FAST is enabled with OpenSSL,
+# the OpenSSL library must be patched (openssl-0.9.8d-tls-extensions.patch)
+# to add the needed functions.
+#CONFIG_EAP_FAST=y
+
+# EAP-GTC
+CONFIG_EAP_GTC=y
+
+# EAP-OTP
+CONFIG_EAP_OTP=y
+
+# EAP-SIM (enable CONFIG_PCSC, if EAP-SIM is used)
+#CONFIG_EAP_SIM=y
+
+# EAP-PSK (experimental; this is _not_ needed for WPA-PSK)
+#CONFIG_EAP_PSK=y
+
+# EAP-PAX
+#CONFIG_EAP_PAX=y
+
+# LEAP
+CONFIG_EAP_LEAP=y
+
+# EAP-AKA (enable CONFIG_PCSC, if EAP-AKA is used)
+#CONFIG_EAP_AKA=y
+
+# EAP-AKA' (enable CONFIG_PCSC, if EAP-AKA' is used).
+# This requires CONFIG_EAP_AKA to be enabled, too.
+#CONFIG_EAP_AKA_PRIME=y
+
+# Enable USIM simulator (Milenage) for EAP-AKA
+#CONFIG_USIM_SIMULATOR=y
+
+# EAP-SAKE
+#CONFIG_EAP_SAKE=y
+
+# EAP-GPSK
+#CONFIG_EAP_GPSK=y
+# Include support for optional SHA256 cipher suite in EAP-GPSK
+#CONFIG_EAP_GPSK_SHA256=y
+
+# EAP-TNC and related Trusted Network Connect support (experimental)
+#CONFIG_EAP_TNC=y
+
+# Wi-Fi Protected Setup (WPS)
+#CONFIG_WPS=y
+
+# EAP-IKEv2
+#CONFIG_EAP_IKEV2=y
+
+# PKCS#12 (PFX) support (used to read private key and certificate file from
+# a file that usually has extension .p12 or .pfx)
+CONFIG_PKCS12=y
+
+# Smartcard support (i.e., private key on a smartcard), e.g., with openssl
+# engine.
+CONFIG_SMARTCARD=y
+
+# PC/SC interface for smartcards (USIM, GSM SIM)
+# Enable this if EAP-SIM or EAP-AKA is included
+#CONFIG_PCSC=y
+
+# Development testing
+#CONFIG_EAPOL_TEST=y
+
+# Select control interface backend for external programs, e.g, wpa_cli:
+# unix = UNIX domain sockets (default for Linux/*BSD)
+# udp = UDP sockets using localhost (127.0.0.1)
+# named_pipe = Windows Named Pipe (default for Windows)
+# y = use default (backwards compatibility)
+# If this option is commented out, control interface is not included in the
+# build.
+CONFIG_CTRL_IFACE=y
+
+# Include support for GNU Readline and History Libraries in wpa_cli.
+# When building a wpa_cli binary for distribution, please note that these
+# libraries are licensed under GPL and as such, BSD license may not apply for
+# the resulting binary.
+#CONFIG_READLINE=y
+
+# Remove debugging code that is printing out debug message to stdout.
+# This can be used to reduce the size of the wpa_supplicant considerably
+# if debugging code is not needed. The size reduction can be around 35%
+# (e.g., 90 kB).
+#CONFIG_NO_STDOUT_DEBUG=y
+
+# Remove WPA support, e.g., for wired-only IEEE 802.1X supplicant, to save
+# 35-50 kB in code size.
+#CONFIG_NO_WPA=y
+
+# Remove WPA2 support. This allows WPA to be used, but removes WPA2 code to
+# save about 1 kB in code size when building only WPA-Personal (no EAP support)
+# or 6 kB if building for WPA-Enterprise.
+#CONFIG_NO_WPA2=y
+
+# Remove IEEE 802.11i/WPA-Personal ASCII passphrase support
+# This option can be used to reduce code size by removing support for
+# converting ASCII passphrases into PSK. If this functionality is removed, the
+# PSK can only be configured as the 64-octet hexstring (e.g., from
+# wpa_passphrase). This saves about 0.5 kB in code size.
+#CONFIG_NO_WPA_PASSPHRASE=y
+
+# Disable scan result processing (ap_mode=1) to save code size by about 1 kB.
+# This can be used if ap_scan=1 mode is never enabled.
+#CONFIG_NO_SCAN_PROCESSING=y
+
+# Select configuration backend:
+# file = text file (e.g., wpa_supplicant.conf; note: the configuration file
+# path is given on command line, not here; this option is just used to
+# select the backend that allows configuration files to be used)
+# winreg = Windows registry (see win_example.reg for an example)
+CONFIG_BACKEND=file
+
+# Remove configuration write functionality (i.e., to allow the configuration
+# file to be updated based on runtime configuration changes). The runtime
+# configuration can still be changed, the changes are just not going to be
+# persistent over restarts. This option can be used to reduce code size by
+# about 3.5 kB.
+#CONFIG_NO_CONFIG_WRITE=y
+
+# Remove support for configuration blobs to reduce code size by about 1.5 kB.
+#CONFIG_NO_CONFIG_BLOBS=y
+
+# Select program entry point implementation:
+# main = UNIX/POSIX like main() function (default)
+# main_winsvc = Windows service (read parameters from registry)
+# main_none = Very basic example (development use only)
+#CONFIG_MAIN=main
+
+# Select wrapper for operatins system and C library specific functions
+# unix = UNIX/POSIX like systems (default)
+# win32 = Windows systems
+# none = Empty template
+#CONFIG_OS=unix
+
+# Select event loop implementation
+# eloop = select() loop (default)
+# eloop_win = Windows events and WaitForMultipleObject() loop
+# eloop_none = Empty template
+#CONFIG_ELOOP=eloop
+
+# Select layer 2 packet implementation
+# linux = Linux packet socket (default)
+# pcap = libpcap/libdnet/WinPcap
+# freebsd = FreeBSD libpcap
+# winpcap = WinPcap with receive thread
+# ndis = Windows NDISUIO (note: requires CONFIG_USE_NDISUIO=y)
+# none = Empty template
+#CONFIG_L2_PACKET=linux
+
+# PeerKey handshake for Station to Station Link (IEEE 802.11e DLS)
+CONFIG_PEERKEY=y
+
+# IEEE 802.11w (management frame protection)
+# This version is an experimental implementation based on IEEE 802.11w/D1.0
+# draft and is subject to change since the standard has not yet been finalized.
+# Driver support is also needed for IEEE 802.11w.
+#CONFIG_IEEE80211W=y
+
+# Select TLS implementation
+# openssl = OpenSSL (default)
+# gnutls = GnuTLS (needed for TLS/IA, see also CONFIG_GNUTLS_EXTRA)
+# internal = Internal TLSv1 implementation (experimental)
+# none = Empty template
+#CONFIG_TLS=openssl
+
+# Whether to enable TLS/IA support, which is required for EAP-TTLSv1.
+# You need CONFIG_TLS=gnutls for this to have any effect. Please note that
+# even though the core GnuTLS library is released under LGPL, this extra
+# library uses GPL and as such, the terms of GPL apply to the combination
+# of wpa_supplicant and GnuTLS if this option is enabled. BSD license may not
+# apply for distribution of the resulting binary.
+#CONFIG_GNUTLS_EXTRA=y
+
+# If CONFIG_TLS=internal is used, additional library and include paths are
+# needed for LibTomMath. Alternatively, an integrated, minimal version of
+# LibTomMath can be used. See beginning of libtommath.c for details on benefits
+# and drawbacks of this option.
+#CONFIG_INTERNAL_LIBTOMMATH=y
+#ifndef CONFIG_INTERNAL_LIBTOMMATH
+#LTM_PATH=/usr/src/libtommath-0.39
+#CFLAGS += -I$(LTM_PATH)
+#LIBS += -L$(LTM_PATH)
+#LIBS_p += -L$(LTM_PATH)
+#endif
+# At the cost of about 4 kB of additional binary size, the internal LibTomMath
+# can be configured to include faster routines for exptmod, sqr, and div to
+# speed up DH and RSA calculation considerably
+#CONFIG_INTERNAL_LIBTOMMATH_FAST=y
+
+# Include NDIS event processing through WMI into wpa_supplicant/wpasvc.
+# This is only for Windows builds and requires WMI-related header files and
+# WbemUuid.Lib from Platform SDK even when building with MinGW.
+#CONFIG_NDIS_EVENTS_INTEGRATED=y
+#PLATFORMSDKLIB="/opt/Program Files/Microsoft Platform SDK/Lib"
+
+# Add support for old DBus control interface
+# (fi.epitest.hostap.WPASupplicant)
+CONFIG_CTRL_IFACE_DBUS=y
+
+# Add support for new DBus control interface
+# (fi.w1.hostap.wpa_supplicant1)
+CONFIG_CTRL_IFACE_DBUS_NEW=y
+
+# Add introspection support for new DBus control interface
+#CONFIG_CTRL_IFACE_DBUS_INTRO=y
+
+# Add support for loading EAP methods dynamically as shared libraries.
+# When this option is enabled, each EAP method can be either included
+# statically (CONFIG_EAP_<method>=y) or dynamically (CONFIG_EAP_<method>=dyn).
+# Dynamic EAP methods are build as shared objects (eap_*.so) and they need to
+# be loaded in the beginning of the wpa_supplicant configuration file
+# (see load_dynamic_eap parameter in the example file) before being used in
+# the network blocks.
+#
+# Note that some shared parts of EAP methods are included in the main program
+# and in order to be able to use dynamic EAP methods using these parts, the
+# main program must have been build with the EAP method enabled (=y or =dyn).
+# This means that EAP-TLS/PEAP/TTLS/FAST cannot be added as dynamic libraries
+# unless at least one of them was included in the main build to force inclusion
+# of the shared code. Similarly, at least one of EAP-SIM/AKA must be included
+# in the main build to be able to load these methods dynamically.
+#
+# Please also note that using dynamic libraries will increase the total binary
+# size. Thus, it may not be the best option for targets that have limited
+# amount of memory/flash.
+#CONFIG_DYNAMIC_EAP_METHODS=y
+
+# IEEE Std 802.11r-2008 (Fast BSS Transition)
+#CONFIG_IEEE80211R=y
+
+# Add support for writing debug log to a file (/tmp/wpa_supplicant-log-#.txt)
+#CONFIG_DEBUG_FILE=y
+
+# Enable privilege separation (see README 'Privilege separation' for details)
+#CONFIG_PRIVSEP=y
+
+# Enable mitigation against certain attacks against TKIP by delaying Michael
+# MIC error reports by a random amount of time between 0 and 60 seconds
+#CONFIG_DELAYED_MIC_ERROR_REPORT=y
+
+# Enable tracing code for developer debugging
+# This tracks use of memory allocations and other registrations and reports
+# incorrect use with a backtrace of call (or allocation) location.
+#CONFIG_WPA_TRACE=y
+# For BSD, comment out these.
+#LIBS += -lexecinfo
+#LIBS_p += -lexecinfo
+#LIBS_c += -lexecinfo
+
+# Use libbfd to get more details for developer debugging
+# This enables use of libbfd to get more detailed symbols for the backtraces
+# generated by CONFIG_WPA_TRACE=y.
+#CONFIG_WPA_TRACE_BFD=y
+# For BSD, comment out these.
+#LIBS += -lbfd -liberty -lz
+#LIBS_p += -lbfd -liberty -lz
+#LIBS_c += -lbfd -liberty -lz
+CONFIG_TLS = gnutls
+CONFIG_GNUTLS_EXTRA=y
+CONFIG_CTRL_IFACE_DBUS=y
+CONFIG_CTRL_IFACE_DBUS_NEW=y
diff --git a/multitech/recipes/wpa-supplicant/wpa-supplicant-1.0/wpa-supplicant.sh b/multitech/recipes/wpa-supplicant/wpa-supplicant-1.0/wpa-supplicant.sh
new file mode 100644
index 0000000..5c9e5d3
--- /dev/null
+++ b/multitech/recipes/wpa-supplicant/wpa-supplicant-1.0/wpa-supplicant.sh
@@ -0,0 +1,85 @@
+#!/bin/sh
+
+
+WPA_SUP_BIN="/usr/sbin/wpa_supplicant"
+WPA_SUP_PNAME="wpa_supplicant"
+WPA_SUP_PIDFILE="/var/run/wpa_supplicant.$IFACE.pid"
+WPA_SUP_OPTIONS="-B -P $WPA_SUP_PIDFILE -i $IFACE"
+
+VERBOSITY=0
+
+
+if [ -s "$IF_WPA_CONF" ]; then
+ WPA_SUP_CONF="-c $IF_WPA_CONF"
+else
+ exit 0
+fi
+
+if [ ! -x "$WPA_SUP_BIN" ]; then
+
+ if [ "$VERBOSITY" = "1" ]; then
+ echo "$WPA_SUP_PNAME: binaries not executable or missing from $WPA_SUP_BIN"
+ fi
+
+ exit 1
+fi
+
+if [ "$MODE" = "start" ] ; then
+ # driver type of interface, defaults to wext when undefined
+ if [ -s "/etc/wpa_supplicant/driver.$IFACE" ]; then
+ IF_WPA_DRIVER=$(cat "/etc/wpa_supplicant/driver.$IFACE")
+ elif [ -z "$IF_WPA_DRIVER" ]; then
+
+ if [ "$VERBOSITY" = "1" ]; then
+ echo "$WPA_SUP_PNAME: wpa-driver not provided, using \"wext\""
+ fi
+
+ IF_WPA_DRIVER="wext"
+ fi
+
+ # if we have passed the criteria, start wpa_supplicant
+ if [ -n "$WPA_SUP_CONF" ]; then
+
+ if [ "$VERBOSITY" = "1" ]; then
+ echo "$WPA_SUP_PNAME: $WPA_SUP_BIN $WPA_SUP_OPTIONS $WPA_SUP_CONF -D $IF_WPA_DRIVER"
+ fi
+
+ start-stop-daemon --start --quiet \
+ --name $WPA_SUP_PNAME --startas $WPA_SUP_BIN --pidfile $WPA_SUP_PIDFILE \
+ -- $WPA_SUP_OPTIONS $WPA_SUP_CONF -D $IF_WPA_DRIVER
+ fi
+
+ # if the interface socket exists, then wpa_supplicant was invoked successfully
+ if [ -S "$WPA_COMMON_CTRL_IFACE/$IFACE" ]; then
+
+ if [ "$VERBOSITY" = "1" ]; then
+ echo "$WPA_SUP_PNAME: ctrl_interface socket located at $WPA_COMMON_CTRL_IFACE/$IFACE"
+ fi
+
+ exit 0
+
+ fi
+
+elif [ "$MODE" = "stop" ]; then
+
+ if [ -f "$WPA_SUP_PIDFILE" ]; then
+
+ if [ "$VERBOSITY" = "1" ]; then
+ echo "$WPA_SUP_PNAME: terminating $WPA_SUP_PNAME daemon"
+ fi
+
+ start-stop-daemon --stop --quiet \
+ --name $WPA_SUP_PNAME --pidfile $WPA_SUP_PIDFILE
+
+ if [ -S "$WPA_COMMON_CTRL_IFACE/$IFACE" ]; then
+ rm -f $WPA_COMMON_CTRL_IFACE/$IFACE
+ fi
+
+ if [ -f "$WPA_SUP_PIDFILE" ]; then
+ rm -f $WPA_SUP_PIDFILE
+ fi
+ fi
+
+fi
+
+exit 0
diff --git a/multitech/recipes/wpa-supplicant/wpa-supplicant-1.0/wpa_supplicant.conf b/multitech/recipes/wpa-supplicant/wpa-supplicant-1.0/wpa_supplicant.conf
new file mode 100644
index 0000000..f0c993d
--- /dev/null
+++ b/multitech/recipes/wpa-supplicant/wpa-supplicant-1.0/wpa_supplicant.conf
@@ -0,0 +1,690 @@
+##### Example wpa_supplicant configuration file ###############################
+#
+# This file describes configuration file format and lists all available option.
+# Please also take a look at simpler configuration examples in 'examples'
+# subdirectory.
+#
+# Empty lines and lines starting with # are ignored
+
+# NOTE! This file may contain password information and should probably be made
+# readable only by root user on multiuser systems.
+
+# Note: All file paths in this configuration file should use full (absolute,
+# not relative to working directory) path in order to allow working directory
+# to be changed. This can happen if wpa_supplicant is run in the background.
+
+# Whether to allow wpa_supplicant to update (overwrite) configuration
+#
+# This option can be used to allow wpa_supplicant to overwrite configuration
+# file whenever configuration is changed (e.g., new network block is added with
+# wpa_cli or wpa_gui, or a password is changed). This is required for
+# wpa_cli/wpa_gui to be able to store the configuration changes permanently.
+# Please note that overwriting configuration file will remove the comments from
+# it.
+#update_config=1
+
+# global configuration (shared by all network blocks)
+#
+# Parameters for the control interface. If this is specified, wpa_supplicant
+# will open a control interface that is available for external programs to
+# manage wpa_supplicant. The meaning of this string depends on which control
+# interface mechanism is used. For all cases, the existance of this parameter
+# in configuration is used to determine whether the control interface is
+# enabled.
+#
+# For UNIX domain sockets (default on Linux and BSD): This is a directory that
+# will be created for UNIX domain sockets for listening to requests from
+# external programs (CLI/GUI, etc.) for status information and configuration.
+# The socket file will be named based on the interface name, so multiple
+# wpa_supplicant processes can be run at the same time if more than one
+# interface is used.
+# /var/run/wpa_supplicant is the recommended directory for sockets and by
+# default, wpa_cli will use it when trying to connect with wpa_supplicant.
+#
+# Access control for the control interface can be configured by setting the
+# directory to allow only members of a group to use sockets. This way, it is
+# possible to run wpa_supplicant as root (since it needs to change network
+# configuration and open raw sockets) and still allow GUI/CLI components to be
+# run as non-root users. However, since the control interface can be used to
+# change the network configuration, this access needs to be protected in many
+# cases. By default, wpa_supplicant is configured to use gid 0 (root). If you
+# want to allow non-root users to use the control interface, add a new group
+# and change this value to match with that group. Add users that should have
+# control interface access to this group. If this variable is commented out or
+# not included in the configuration file, group will not be changed from the
+# value it got by default when the directory or socket was created.
+#
+# When configuring both the directory and group, use following format:
+# DIR=/var/run/wpa_supplicant GROUP=wheel
+# DIR=/var/run/wpa_supplicant GROUP=0
+# (group can be either group name or gid)
+#
+# For UDP connections (default on Windows): The value will be ignored. This
+# variable is just used to select that the control interface is to be created.
+# The value can be set to, e.g., udp (ctrl_interface=udp)
+#
+# For Windows Named Pipe: This value can be used to set the security descriptor
+# for controlling access to the control interface. Security descriptor can be
+# set using Security Descriptor String Format (see http://msdn.microsoft.com/
+# library/default.asp?url=/library/en-us/secauthz/security/
+# security_descriptor_string_format.asp). The descriptor string needs to be
+# prefixed with SDDL=. For example, ctrl_interface=SDDL=D: would set an empty
+# DACL (which will reject all connections). See README-Windows.txt for more
+# information about SDDL string format.
+#
+ctrl_interface=/var/run/wpa_supplicant
+
+# IEEE 802.1X/EAPOL version
+# wpa_supplicant is implemented based on IEEE Std 802.1X-2004 which defines
+# EAPOL version 2. However, there are many APs that do not handle the new
+# version number correctly (they seem to drop the frames completely). In order
+# to make wpa_supplicant interoperate with these APs, the version number is set
+# to 1 by default. This configuration value can be used to set it to the new
+# version (2).
+eapol_version=1
+
+# AP scanning/selection
+# By default, wpa_supplicant requests driver to perform AP scanning and then
+# uses the scan results to select a suitable AP. Another alternative is to
+# allow the driver to take care of AP scanning and selection and use
+# wpa_supplicant just to process EAPOL frames based on IEEE 802.11 association
+# information from the driver.
+# 1: wpa_supplicant initiates scanning and AP selection
+# 0: driver takes care of scanning, AP selection, and IEEE 802.11 association
+# parameters (e.g., WPA IE generation); this mode can also be used with
+# non-WPA drivers when using IEEE 802.1X mode; do not try to associate with
+# APs (i.e., external program needs to control association). This mode must
+# also be used when using wired Ethernet drivers.
+# 2: like 0, but associate with APs using security policy and SSID (but not
+# BSSID); this can be used, e.g., with ndiswrapper and NDIS drivers to
+# enable operation with hidden SSIDs and optimized roaming; in this mode,
+# the network blocks in the configuration file are tried one by one until
+# the driver reports successful association; each network block should have
+# explicit security policy (i.e., only one option in the lists) for
+# key_mgmt, pairwise, group, proto variables
+ap_scan=1
+
+# EAP fast re-authentication
+# By default, fast re-authentication is enabled for all EAP methods that
+# support it. This variable can be used to disable fast re-authentication.
+# Normally, there is no need to disable this.
+fast_reauth=1
+
+# OpenSSL Engine support
+# These options can be used to load OpenSSL engines.
+# The two engines that are supported currently are shown below:
+# They are both from the opensc project (http://www.opensc.org/)
+# By default no engines are loaded.
+# make the opensc engine available
+#opensc_engine_path=/usr/lib/opensc/engine_opensc.so
+# make the pkcs11 engine available
+#pkcs11_engine_path=/usr/lib/opensc/engine_pkcs11.so
+# configure the path to the pkcs11 module required by the pkcs11 engine
+#pkcs11_module_path=/usr/lib/pkcs11/opensc-pkcs11.so
+
+# Dynamic EAP methods
+# If EAP methods were built dynamically as shared object files, they need to be
+# loaded here before being used in the network blocks. By default, EAP methods
+# are included statically in the build, so these lines are not needed
+#load_dynamic_eap=/usr/lib/wpa_supplicant/eap_tls.so
+#load_dynamic_eap=/usr/lib/wpa_supplicant/eap_md5.so
+
+# Driver interface parameters
+# This field can be used to configure arbitrary driver interace parameters. The
+# format is specific to the selected driver interface. This field is not used
+# in most cases.
+#driver_param="field=value"
+
+# Maximum lifetime for PMKSA in seconds; default 43200
+#dot11RSNAConfigPMKLifetime=43200
+# Threshold for reauthentication (percentage of PMK lifetime); default 70
+#dot11RSNAConfigPMKReauthThreshold=70
+# Timeout for security association negotiation in seconds; default 60
+#dot11RSNAConfigSATimeout=60
+
+# network block
+#
+# Each network (usually AP's sharing the same SSID) is configured as a separate
+# block in this configuration file. The network blocks are in preference order
+# (the first match is used).
+#
+# network block fields:
+#
+# disabled:
+# 0 = this network can be used (default)
+# 1 = this network block is disabled (can be enabled through ctrl_iface,
+# e.g., with wpa_cli or wpa_gui)
+#
+# id_str: Network identifier string for external scripts. This value is passed
+# to external action script through wpa_cli as WPA_ID_STR environment
+# variable to make it easier to do network specific configuration.
+#
+# ssid: SSID (mandatory); either as an ASCII string with double quotation or
+# as hex string; network name
+#
+# scan_ssid:
+# 0 = do not scan this SSID with specific Probe Request frames (default)
+# 1 = scan with SSID-specific Probe Request frames (this can be used to
+# find APs that do not accept broadcast SSID or use multiple SSIDs;
+# this will add latency to scanning, so enable this only when needed)
+#
+# bssid: BSSID (optional); if set, this network block is used only when
+# associating with the AP using the configured BSSID
+#
+# priority: priority group (integer)
+# By default, all networks will get same priority group (0). If some of the
+# networks are more desirable, this field can be used to change the order in
+# which wpa_supplicant goes through the networks when selecting a BSS. The
+# priority groups will be iterated in decreasing priority (i.e., the larger the
+# priority value, the sooner the network is matched against the scan results).
+# Within each priority group, networks will be selected based on security
+# policy, signal strength, etc.
+# Please note that AP scanning with scan_ssid=1 and ap_scan=2 mode are not
+# using this priority to select the order for scanning. Instead, they try the
+# networks in the order that used in the configuration file.
+#
+# mode: IEEE 802.11 operation mode
+# 0 = infrastructure (Managed) mode, i.e., associate with an AP (default)
+# 1 = IBSS (ad-hoc, peer-to-peer)
+# Note: IBSS can only be used with key_mgmt NONE (plaintext and static WEP)
+# and key_mgmt=WPA-NONE (fixed group key TKIP/CCMP). In addition, ap_scan has
+# to be set to 2 for IBSS. WPA-None requires following network block options:
+# proto=WPA, key_mgmt=WPA-NONE, pairwise=NONE, group=TKIP (or CCMP, but not
+# both), and psk must also be set.
+#
+# proto: list of accepted protocols
+# WPA = WPA/IEEE 802.11i/D3.0
+# RSN = WPA2/IEEE 802.11i (also WPA2 can be used as an alias for RSN)
+# If not set, this defaults to: WPA RSN
+#
+# key_mgmt: list of accepted authenticated key management protocols
+# WPA-PSK = WPA pre-shared key (this requires 'psk' field)
+# WPA-EAP = WPA using EAP authentication (this can use an external
+# program, e.g., Xsupplicant, for IEEE 802.1X EAP Authentication
+# IEEE8021X = IEEE 802.1X using EAP authentication and (optionally) dynamically
+# generated WEP keys
+# NONE = WPA is not used; plaintext or static WEP could be used
+# If not set, this defaults to: WPA-PSK WPA-EAP
+#
+# auth_alg: list of allowed IEEE 802.11 authentication algorithms
+# OPEN = Open System authentication (required for WPA/WPA2)
+# SHARED = Shared Key authentication (requires static WEP keys)
+# LEAP = LEAP/Network EAP (only used with LEAP)
+# If not set, automatic selection is used (Open System with LEAP enabled if
+# LEAP is allowed as one of the EAP methods).
+#
+# pairwise: list of accepted pairwise (unicast) ciphers for WPA
+# CCMP = AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0]
+# TKIP = Temporal Key Integrity Protocol [IEEE 802.11i/D7.0]
+# NONE = Use only Group Keys (deprecated, should not be included if APs support
+# pairwise keys)
+# If not set, this defaults to: CCMP TKIP
+#
+# group: list of accepted group (broadcast/multicast) ciphers for WPA
+# CCMP = AES in Counter mode with CBC-MAC [RFC 3610, IEEE 802.11i/D7.0]
+# TKIP = Temporal Key Integrity Protocol [IEEE 802.11i/D7.0]
+# WEP104 = WEP (Wired Equivalent Privacy) with 104-bit key
+# WEP40 = WEP (Wired Equivalent Privacy) with 40-bit key [IEEE 802.11]
+# If not set, this defaults to: CCMP TKIP WEP104 WEP40
+#
+# psk: WPA preshared key; 256-bit pre-shared key
+# The key used in WPA-PSK mode can be entered either as 64 hex-digits, i.e.,
+# 32 bytes or as an ASCII passphrase (in which case, the real PSK will be
+# generated using the passphrase and SSID). ASCII passphrase must be between
+# 8 and 63 characters (inclusive).
+# This field is not needed, if WPA-EAP is used.
+# Note: Separate tool, wpa_passphrase, can be used to generate 256-bit keys
+# from ASCII passphrase. This process uses lot of CPU and wpa_supplicant
+# startup and reconfiguration time can be optimized by generating the PSK only
+# only when the passphrase or SSID has actually changed.
+#
+# eapol_flags: IEEE 802.1X/EAPOL options (bit field)
+# Dynamic WEP key required for non-WPA mode
+# bit0 (1): require dynamically generated unicast WEP key
+# bit1 (2): require dynamically generated broadcast WEP key
+# (3 = require both keys; default)
+# Note: When using wired authentication, eapol_flags must be set to 0 for the
+# authentication to be completed successfully.
+#
+# proactive_key_caching:
+# Enable/disable opportunistic PMKSA caching for WPA2.
+# 0 = disabled (default)
+# 1 = enabled
+#
+# wep_key0..3: Static WEP key (ASCII in double quotation, e.g. "abcde" or
+# hex without quotation, e.g., 0102030405)
+# wep_tx_keyidx: Default WEP key index (TX) (0..3)
+#
+# peerkey: Whether PeerKey negotiation for direct links (IEEE 802.11e DLS) is
+# allowed. This is only used with RSN/WPA2.
+# 0 = disabled (default)
+# 1 = enabled
+#peerkey=1
+#
+# Following fields are only used with internal EAP implementation.
+# eap: space-separated list of accepted EAP methods
+# MD5 = EAP-MD5 (unsecure and does not generate keying material ->
+# cannot be used with WPA; to be used as a Phase 2 method
+# with EAP-PEAP or EAP-TTLS)
+# MSCHAPV2 = EAP-MSCHAPv2 (cannot be used separately with WPA; to be used
+# as a Phase 2 method with EAP-PEAP or EAP-TTLS)
+# OTP = EAP-OTP (cannot be used separately with WPA; to be used
+# as a Phase 2 method with EAP-PEAP or EAP-TTLS)
+# GTC = EAP-GTC (cannot be used separately with WPA; to be used
+# as a Phase 2 method with EAP-PEAP or EAP-TTLS)
+# TLS = EAP-TLS (client and server certificate)
+# PEAP = EAP-PEAP (with tunnelled EAP authentication)
+# TTLS = EAP-TTLS (with tunnelled EAP or PAP/CHAP/MSCHAP/MSCHAPV2
+# authentication)
+# If not set, all compiled in methods are allowed.
+#
+# identity: Identity string for EAP
+# anonymous_identity: Anonymous identity string for EAP (to be used as the
+# unencrypted identity with EAP types that support different tunnelled
+# identity, e.g., EAP-TTLS)
+# password: Password string for EAP
+# ca_cert: File path to CA certificate file (PEM/DER). This file can have one
+# or more trusted CA certificates. If ca_cert and ca_path are not
+# included, server certificate will not be verified. This is insecure and
+# a trusted CA certificate should always be configured when using
+# EAP-TLS/TTLS/PEAP. Full path should be used since working directory may
+# change when wpa_supplicant is run in the background.
+# On Windows, trusted CA certificates can be loaded from the system
+# certificate store by setting this to cert_store://<name>, e.g.,
+# ca_cert="cert_store://CA" or ca_cert="cert_store://ROOT".
+# Note that when running wpa_supplicant as an application, the user
+# certificate store (My user account) is used, whereas computer store
+# (Computer account) is used when running wpasvc as a service.
+# ca_path: Directory path for CA certificate files (PEM). This path may
+# contain multiple CA certificates in OpenSSL format. Common use for this
+# is to point to system trusted CA list which is often installed into
+# directory like /etc/ssl/certs. If configured, these certificates are
+# added to the list of trusted CAs. ca_cert may also be included in that
+# case, but it is not required.
+# client_cert: File path to client certificate file (PEM/DER)
+# Full path should be used since working directory may change when
+# wpa_supplicant is run in the background.
+# Alternatively, a named configuration blob can be used by setting this
+# to blob://<blob name>.
+# private_key: File path to client private key file (PEM/DER/PFX)
+# When PKCS#12/PFX file (.p12/.pfx) is used, client_cert should be
+# commented out. Both the private key and certificate will be read from
+# the PKCS#12 file in this case. Full path should be used since working
+# directory may change when wpa_supplicant is run in the background.
+# Windows certificate store can be used by leaving client_cert out and
+# configuring private_key in one of the following formats:
+# cert://substring_to_match
+# hash://certificate_thumbprint_in_hex
+# for example: private_key="hash://63093aa9c47f56ae88334c7b65a4"
+# Note that when running wpa_supplicant as an application, the user
+# certificate store (My user account) is used, whereas computer store
+# (Computer account) is used when running wpasvc as a service.
+# Alternatively, a named configuration blob can be used by setting this
+# to blob://<blob name>.
+# private_key_passwd: Password for private key file (if left out, this will be
+# asked through control interface)
+# dh_file: File path to DH/DSA parameters file (in PEM format)
+# This is an optional configuration file for setting parameters for an
+# ephemeral DH key exchange. In most cases, the default RSA
+# authentication does not use this configuration. However, it is possible
+# setup RSA to use ephemeral DH key exchange. In addition, ciphers with
+# DSA keys always use ephemeral DH keys. This can be used to achieve
+# forward secrecy. If the file is in DSA parameters format, it will be
+# automatically converted into DH params.
+# subject_match: Substring to be matched against the subject of the
+# authentication server certificate. If this string is set, the server
+# sertificate is only accepted if it contains this string in the subject.
+# The subject string is in following format:
+# /C=US/ST=CA/L=San Francisco/CN=Test AS/emailAddress=as@example.com
+# altsubject_match: Semicolon separated string of entries to be matched against
+# the alternative subject name of the authentication server certificate.
+# If this string is set, the server sertificate is only accepted if it
+# contains one of the entries in an alternative subject name extension.
+# altSubjectName string is in following format: TYPE:VALUE
+# Example: EMAIL:server@example.com
+# Example: DNS:server.example.com;DNS:server2.example.com
+# Following types are supported: EMAIL, DNS, URI
+# phase1: Phase1 (outer authentication, i.e., TLS tunnel) parameters
+# (string with field-value pairs, e.g., "peapver=0" or
+# "peapver=1 peaplabel=1")
+# 'peapver' can be used to force which PEAP version (0 or 1) is used.
+# 'peaplabel=1' can be used to force new label, "client PEAP encryption",
+# to be used during key derivation when PEAPv1 or newer. Most existing
+# PEAPv1 implementation seem to be using the old label, "client EAP
+# encryption", and wpa_supplicant is now using that as the default value.
+# Some servers, e.g., Radiator, may require peaplabel=1 configuration to
+# interoperate with PEAPv1; see eap_testing.txt for more details.
+# 'peap_outer_success=0' can be used to terminate PEAP authentication on
+# tunneled EAP-Success. This is required with some RADIUS servers that
+# implement draft-josefsson-pppext-eap-tls-eap-05.txt (e.g.,
+# Lucent NavisRadius v4.4.0 with PEAP in "IETF Draft 5" mode)
+# include_tls_length=1 can be used to force wpa_supplicant to include
+# TLS Message Length field in all TLS messages even if they are not
+# fragmented.
+# sim_min_num_chal=3 can be used to configure EAP-SIM to require three
+# challenges (by default, it accepts 2 or 3)
+# phase2: Phase2 (inner authentication with TLS tunnel) parameters
+# (string with field-value pairs, e.g., "auth=MSCHAPV2" for EAP-PEAP or
+# "autheap=MSCHAPV2 autheap=MD5" for EAP-TTLS)
+# Following certificate/private key fields are used in inner Phase2
+# authentication when using EAP-TTLS or EAP-PEAP.
+# ca_cert2: File path to CA certificate file. This file can have one or more
+# trusted CA certificates. If ca_cert2 and ca_path2 are not included,
+# server certificate will not be verified. This is insecure and a trusted
+# CA certificate should always be configured.
+# ca_path2: Directory path for CA certificate files (PEM)
+# client_cert2: File path to client certificate file
+# private_key2: File path to client private key file
+# private_key2_passwd: Password for private key file
+# dh_file2: File path to DH/DSA parameters file (in PEM format)
+# subject_match2: Substring to be matched against the subject of the
+# authentication server certificate.
+# altsubject_match2: Substring to be matched against the alternative subject
+# name of the authentication server certificate.
+#
+# fragment_size: Maximum EAP fragment size in bytes (default 1398).
+# This value limits the fragment size for EAP methods that support
+# fragmentation (e.g., EAP-TLS and EAP-PEAP). This value should be set
+# small enough to make the EAP messages fit in MTU of the network
+# interface used for EAPOL. The default value is suitable for most
+# cases.
+#
+# EAP-PSK variables:
+# eappsk: 16-byte (128-bit, 32 hex digits) pre-shared key in hex format
+# nai: user NAI
+#
+# EAP-PAX variables:
+# eappsk: 16-byte (128-bit, 32 hex digits) pre-shared key in hex format
+#
+# EAP-SAKE variables:
+# eappsk: 32-byte (256-bit, 64 hex digits) pre-shared key in hex format
+# (this is concatenation of Root-Secret-A and Root-Secret-B)
+# nai: user NAI (PEERID)
+#
+# EAP-GPSK variables:
+# eappsk: Pre-shared key in hex format (at least 128 bits, i.e., 32 hex digits)
+# nai: user NAI (ID_Client)
+#
+# EAP-FAST variables:
+# pac_file: File path for the PAC entries. wpa_supplicant will need to be able
+# to create this file and write updates to it when PAC is being
+# provisioned or refreshed. Full path to the file should be used since
+# working directory may change when wpa_supplicant is run in the
+# background. Alternatively, a named configuration blob can be used by
+# setting this to blob://<blob name>
+# phase1: fast_provisioning=1 option enables in-line provisioning of EAP-FAST
+# credentials (PAC)
+#
+# wpa_supplicant supports number of "EAP workarounds" to work around
+# interoperability issues with incorrectly behaving authentication servers.
+# These are enabled by default because some of the issues are present in large
+# number of authentication servers. Strict EAP conformance mode can be
+# configured by disabling workarounds with eap_workaround=0.
+
+# Example blocks:
+
+# Simple case: WPA-PSK, PSK as an ASCII passphrase, allow all valid ciphers
+network={
+ ssid="simple"
+ psk="very secret passphrase"
+ priority=5
+}
+
+# Same as previous, but request SSID-specific scanning (for APs that reject
+# broadcast SSID)
+network={
+ ssid="second ssid"
+ scan_ssid=1
+ psk="very secret passphrase"
+ priority=2
+}
+
+# Only WPA-PSK is used. Any valid cipher combination is accepted.
+network={
+ ssid="example"
+ proto=WPA
+ key_mgmt=WPA-PSK
+ pairwise=CCMP TKIP
+ group=CCMP TKIP WEP104 WEP40
+ psk=06b4be19da289f475aa46a33cb793029d4ab3db7a23ee92382eb0106c72ac7bb
+ priority=2
+}
+
+# Only WPA-EAP is used. Both CCMP and TKIP is accepted. An AP that used WEP104
+# or WEP40 as the group cipher will not be accepted.
+network={
+ ssid="example"
+ proto=RSN
+ key_mgmt=WPA-EAP
+ pairwise=CCMP TKIP
+ group=CCMP TKIP
+ eap=TLS
+ identity="user@example.com"
+ ca_cert="/etc/cert/ca.pem"
+ client_cert="/etc/cert/user.pem"
+ private_key="/etc/cert/user.prv"
+ private_key_passwd="password"
+ priority=1
+}
+
+# EAP-PEAP/MSCHAPv2 configuration for RADIUS servers that use the new peaplabel
+# (e.g., Radiator)
+network={
+ ssid="example"
+ key_mgmt=WPA-EAP
+ eap=PEAP
+ identity="user@example.com"
+ password="foobar"
+ ca_cert="/etc/cert/ca.pem"
+ phase1="peaplabel=1"
+ phase2="auth=MSCHAPV2"
+ priority=10
+}
+
+# EAP-TTLS/EAP-MD5-Challenge configuration with anonymous identity for the
+# unencrypted use. Real identity is sent only within an encrypted TLS tunnel.
+network={
+ ssid="example"
+ key_mgmt=WPA-EAP
+ eap=TTLS
+ identity="user@example.com"
+ anonymous_identity="anonymous@example.com"
+ password="foobar"
+ ca_cert="/etc/cert/ca.pem"
+ priority=2
+}
+
+# EAP-TTLS/MSCHAPv2 configuration with anonymous identity for the unencrypted
+# use. Real identity is sent only within an encrypted TLS tunnel.
+network={
+ ssid="example"
+ key_mgmt=WPA-EAP
+ eap=TTLS
+ identity="user@example.com"
+ anonymous_identity="anonymous@example.com"
+ password="foobar"
+ ca_cert="/etc/cert/ca.pem"
+ phase2="auth=MSCHAPV2"
+}
+
+# WPA-EAP, EAP-TTLS with different CA certificate used for outer and inner
+# authentication.
+network={
+ ssid="example"
+ key_mgmt=WPA-EAP
+ eap=TTLS
+ # Phase1 / outer authentication
+ anonymous_identity="anonymous@example.com"
+ ca_cert="/etc/cert/ca.pem"
+ # Phase 2 / inner authentication
+ phase2="autheap=TLS"
+ ca_cert2="/etc/cert/ca2.pem"
+ client_cert2="/etc/cer/user.pem"
+ private_key2="/etc/cer/user.prv"
+ private_key2_passwd="password"
+ priority=2
+}
+
+# Both WPA-PSK and WPA-EAP is accepted. Only CCMP is accepted as pairwise and
+# group cipher.
+network={
+ ssid="example"
+ bssid=00:11:22:33:44:55
+ proto=WPA RSN
+ key_mgmt=WPA-PSK WPA-EAP
+ pairwise=CCMP
+ group=CCMP
+ psk=06b4be19da289f475aa46a33cb793029d4ab3db7a23ee92382eb0106c72ac7bb
+}
+
+# Special characters in SSID, so use hex string. Default to WPA-PSK, WPA-EAP
+# and all valid ciphers.
+network={
+ ssid=00010203
+ psk=000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+}
+
+
+# IEEE 802.1X/EAPOL with dynamically generated WEP keys (i.e., no WPA) using
+# EAP-TLS for authentication and key generation; require both unicast and
+# broadcast WEP keys.
+network={
+ ssid="1x-test"
+ key_mgmt=IEEE8021X
+ eap=TLS
+ identity="user@example.com"
+ ca_cert="/etc/cert/ca.pem"
+ client_cert="/etc/cert/user.pem"
+ private_key="/etc/cert/user.prv"
+ private_key_passwd="password"
+ eapol_flags=3
+}
+
+
+# LEAP with dynamic WEP keys
+network={
+ ssid="leap-example"
+ key_mgmt=IEEE8021X
+ eap=LEAP
+ identity="user"
+ password="foobar"
+}
+
+# Plaintext connection (no WPA, no IEEE 802.1X)
+network={
+ ssid="plaintext-test"
+ key_mgmt=NONE
+}
+
+
+# Shared WEP key connection (no WPA, no IEEE 802.1X)
+network={
+ ssid="static-wep-test"
+ key_mgmt=NONE
+ wep_key0="abcde"
+ wep_key1=0102030405
+ wep_key2="1234567890123"
+ wep_tx_keyidx=0
+ priority=5
+}
+
+
+# Shared WEP key connection (no WPA, no IEEE 802.1X) using Shared Key
+# IEEE 802.11 authentication
+network={
+ ssid="static-wep-test2"
+ key_mgmt=NONE
+ wep_key0="abcde"
+ wep_key1=0102030405
+ wep_key2="1234567890123"
+ wep_tx_keyidx=0
+ priority=5
+ auth_alg=SHARED
+}
+
+
+# IBSS/ad-hoc network with WPA-None/TKIP.
+network={
+ ssid="test adhoc"
+ mode=1
+ proto=WPA
+ key_mgmt=WPA-NONE
+ pairwise=NONE
+ group=TKIP
+ psk="secret passphrase"
+}
+
+
+# Catch all example that allows more or less all configuration modes
+network={
+ ssid="example"
+ scan_ssid=1
+ key_mgmt=WPA-EAP WPA-PSK IEEE8021X NONE
+ pairwise=CCMP TKIP
+ group=CCMP TKIP WEP104 WEP40
+ psk="very secret passphrase"
+ eap=TTLS PEAP TLS
+ identity="user@example.com"
+ password="foobar"
+ ca_cert="/etc/cert/ca.pem"
+ client_cert="/etc/cert/user.pem"
+ private_key="/etc/cert/user.prv"
+ private_key_passwd="password"
+ phase1="peaplabel=0"
+}
+
+# Example of EAP-TLS with smartcard (openssl engine)
+network={
+ ssid="example"
+ key_mgmt=WPA-EAP
+ eap=TLS
+ proto=RSN
+ pairwise=CCMP TKIP
+ group=CCMP TKIP
+ identity="user@example.com"
+ ca_cert="/etc/cert/ca.pem"
+ client_cert="/etc/cert/user.pem"
+
+ engine=1
+
+ # The engine configured here must be available. Look at
+ # OpenSSL engine support in the global section.
+ # The key available through the engine must be the private key
+ # matching the client certificate configured above.
+
+ # use the opensc engine
+ #engine_id="opensc"
+ #key_id="45"
+
+ # use the pkcs11 engine
+ engine_id="pkcs11"
+ key_id="id_45"
+
+ # Optional PIN configuration; this can be left out and PIN will be
+ # asked through the control interface
+ pin="1234"
+}
+
+# Example configuration showing how to use an inlined blob as a CA certificate
+# data instead of using external file
+network={
+ ssid="example"
+ key_mgmt=WPA-EAP
+ eap=TTLS
+ identity="user@example.com"
+ anonymous_identity="anonymous@example.com"
+ password="foobar"
+ ca_cert="blob://exampleblob"
+ priority=20
+}
+
+blob-base64-exampleblob={
+SGVsbG8gV29ybGQhCg==
+}
+
+
+# Wildcard match for SSID (plaintext APs only). This example select any
+# open AP regardless of its SSID.
+network={
+ key_mgmt=NONE
+}
diff --git a/multitech/recipes/wpa-supplicant/wpa-supplicant-1.0/wpa_supplicant.conf-sane b/multitech/recipes/wpa-supplicant/wpa-supplicant-1.0/wpa_supplicant.conf-sane
new file mode 100644
index 0000000..c91ffe0
--- /dev/null
+++ b/multitech/recipes/wpa-supplicant/wpa-supplicant-1.0/wpa_supplicant.conf-sane
@@ -0,0 +1,7 @@
+ctrl_interface=/var/run/wpa_supplicant
+ctrl_interface_group=0
+update_config=1
+
+network={
+ key_mgmt=NONE
+}
diff --git a/multitech/recipes/wpa-supplicant/wpa-supplicant_1.0.bb b/multitech/recipes/wpa-supplicant/wpa-supplicant_1.0.bb
new file mode 100644
index 0000000..32fc4dd
--- /dev/null
+++ b/multitech/recipes/wpa-supplicant/wpa-supplicant_1.0.bb
@@ -0,0 +1,6 @@
+require wpa-supplicant-1.0.inc
+
+PR = "${INC_PR}.0"
+
+SRC_URI[md5sum] = "8650f6aa23646ef634402552d0669640"
+SRC_URI[sha256sum] = "91d41d473a5aafa2e25dd6577ebda975c4d4a3188850a53e31feaf7c04482b9c"