diff --git a/target/linux/etrax-2.6/config/default b/target/linux/etrax-2.6/config/default
index 29f18d67838a6c1c322878c753d6096cc8295bef..6ca4de1dfe7d7fb439f24931eeacfc28354aef52 100644
--- a/target/linux/etrax-2.6/config/default
+++ b/target/linux/etrax-2.6/config/default
@@ -2,6 +2,8 @@ CONFIG_BASE_SMALL=0
 # CONFIG_BLK_DEV_INITRD is not set
 CONFIG_BLK_DEV_SD=y
 CONFIG_CRIS=y
+CONFIG_CRYPTO_ARC4=y
+CONFIG_CRYPTO_ECB=y
 # CONFIG_ETRAX100LX is not set
 CONFIG_ETRAX100LX_V2=y
 # CONFIG_ETRAXFS is not set
@@ -135,12 +137,34 @@ CONFIG_ETRAX_USB_HOST=y
 CONFIG_ETRAX_USB_HOST_PORT1=y
 CONFIG_ETRAX_USB_HOST_PORT2=y
 # CONFIG_ETRAX_WATCHDOG is not set
+CONFIG_FAT_FS=y
+# CONFIG_FOX_MMC is not set
+# CONFIG_FOX_NOK6610 is not set
+# CONFIG_FOX_NOKIA is not set
+# CONFIG_FOX_QUANTUM is not set
+# CONFIG_FOX_RALINK is not set
+CONFIG_FOX_RALINK_2=y
+# CONFIG_FOX_RALINK_DBG is not set
+# CONFIG_FOX_RC5 is not set
+# CONFIG_FOX_ROTARY is not set
+# CONFIG_FOX_VHDL is not set
+# CONFIG_FOX_VS1011B is not set
+# CONFIG_FOX_ZD1211 is not set
+# CONFIG_FOX_ZD1211_B is not set
 CONFIG_FS_POSIX_ACL=y
 CONFIG_GENERIC_FIND_NEXT_BIT=y
 CONFIG_GENERIC_IOMAP=y
 # CONFIG_GEN_RTC is not set
+# CONFIG_HOSTAP is not set
 # CONFIG_HW_RANDOM is not set
 # CONFIG_IDE is not set
+CONFIG_IEEE80211=y
+# CONFIG_IEEE80211_CRYPT_CCMP is not set
+# CONFIG_IEEE80211_CRYPT_TKIP is not set
+CONFIG_IEEE80211_CRYPT_WEP=y
+CONFIG_IEEE80211_DEBUG=y
+CONFIG_IEEE80211_SOFTMAC=y
+CONFIG_IEEE80211_SOFTMAC_DEBUG=y
 CONFIG_INITRAMFS_SOURCE=""
 CONFIG_IRQ_PER_CPU=y
 CONFIG_JFFS2_FS_DEBUG=0
@@ -194,6 +218,8 @@ CONFIG_MTD_PARTITIONS=y
 # CONFIG_MTD_REDBOOT_PARTS is not set
 # CONFIG_MTD_ROM is not set
 # CONFIG_MTD_SLRAM is not set
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
+CONFIG_NLS=y
 CONFIG_NLS_CODEPAGE_437=y
 CONFIG_NLS_ISO8859_1=y
 # CONFIG_OOM_REBOOT is not set
@@ -217,5 +243,7 @@ CONFIG_USB=y
 # CONFIG_USB_ARCH_HAS_OHCI is not set
 # CONFIG_USB_SERIAL_IR is not set
 CONFIG_USB_STORAGE=y
+CONFIG_USB_ZD1201=y
 CONFIG_VFAT_FS=y
 # CONFIG_VLAN_8021Q is not set
+# CONFIG_ZD1211RW is not set
diff --git a/target/linux/etrax-2.6/files/arch/cris/arch-v10/drivers/gpio_syscalls.c b/target/linux/etrax-2.6/files/arch/cris/arch-v10/drivers/gpio_syscalls.c
new file mode 100644
index 0000000000000000000000000000000000000000..b6300aa9cdaa869c9f97947da29499ee235a354d
--- /dev/null
+++ b/target/linux/etrax-2.6/files/arch/cris/arch-v10/drivers/gpio_syscalls.c
@@ -0,0 +1,191 @@
+#include <linux/autoconf.h>
+
+#include <linux/module.h>
+#include <linux/sched.h>
+#include <linux/slab.h>
+#include <linux/ioport.h>
+#include <linux/errno.h>
+#include <linux/kernel.h>
+#include <linux/fs.h>
+#include <linux/string.h>
+#include <linux/poll.h>
+#include <linux/init.h>
+#include <linux/interrupt.h>
+
+#include <asm/uaccess.h>
+#include <linux/gpio_syscalls.h>
+
+#include <asm/etraxgpio.h>
+#include <asm/arch/svinto.h>
+#include <asm/io.h>
+#include <asm/system.h>
+#include <asm/irq.h>
+#include <asm/arch/io_interface_mux.h>
+
+#include <asm/unistd.h>
+
+
+extern int errno;
+
+
+asmlinkage void sys_gpiosetbits(unsigned char port, unsigned int bits){
+	switch(port){
+	case 'G':
+	case 'g':
+		*R_PORT_G_DATA = port_g_data_shadow |= bits;
+		break;
+		
+	case 'A':
+	case 'a':
+		*R_PORT_PA_DATA = port_pa_data_shadow |= bits;
+		break;
+
+	case 'B':
+	case 'b':
+		*R_PORT_PB_DATA = port_pb_data_shadow |= bits;
+		break;
+		
+	};
+};
+
+
+asmlinkage void sys_gpioclearbits(unsigned char port, unsigned int bits){
+	switch(port){
+	case 'G':
+	case 'g':
+		*R_PORT_G_DATA = port_g_data_shadow &= ~bits;
+		break;
+		
+	case 'A':
+	case 'a':
+		*R_PORT_PA_DATA = port_pa_data_shadow &= ~bits;
+		break;
+
+	case 'B':
+	case 'b':
+		*R_PORT_PB_DATA = port_pb_data_shadow &= ~bits;
+		break;
+		
+	};
+};
+
+asmlinkage void sys_gpiosetdir(unsigned char port, unsigned char dir, unsigned int bits){
+	if((dir=='I' )||(dir=='i')){
+		switch(port){
+		case 'G':
+		case 'g':
+			if(bits & (1<<0)){
+				genconfig_shadow &= ~IO_MASK(R_GEN_CONFIG, g0dir);
+			};
+			if((bits & 0x0000FF00)==0x0000FF00){
+				genconfig_shadow &= ~IO_MASK(R_GEN_CONFIG, g8_15dir);
+			};			
+			if((bits & 0x00FF0000)==0x00FF0000){
+				genconfig_shadow &= ~IO_MASK(R_GEN_CONFIG, g16_23dir);
+			};			
+			if(bits & (1<<24)){
+				genconfig_shadow &= ~IO_MASK(R_GEN_CONFIG, g24dir);
+			};			
+			*R_GEN_CONFIG = genconfig_shadow;
+			break;
+		
+		case 'A':
+		case 'a':
+			*R_PORT_PA_DIR = port_pa_dir_shadow &= ~(bits & 0xff);
+			break;
+
+		case 'B':
+		case 'b':
+			*R_PORT_PB_DIR = port_pb_dir_shadow &= ~(bits & 0xff);
+			break;
+		};
+	} else if((dir=='O' )||(dir=='o')){
+		switch(port){
+		case 'G':
+		case 'g':
+			if(bits & (1<<0)){
+				genconfig_shadow |= IO_MASK(R_GEN_CONFIG, g0dir);
+			};
+			if((bits & 0x0000FF00)==0x0000FF00){
+				genconfig_shadow |= IO_MASK(R_GEN_CONFIG, g8_15dir);
+			};			
+			if((bits & 0x00FF0000)==0x00FF0000){
+				genconfig_shadow |= IO_MASK(R_GEN_CONFIG, g8_15dir);
+			};			
+			if(bits & (1<<24)){
+				genconfig_shadow |= IO_MASK(R_GEN_CONFIG, g24dir);
+			};			
+			*R_GEN_CONFIG = genconfig_shadow;
+			break;
+		
+		case 'A':
+		case 'a':
+			*R_PORT_PA_DIR = port_pa_dir_shadow |= (bits & 0xff);
+			break;
+
+		case 'B':
+		case 'b':
+			*R_PORT_PB_DIR = port_pb_dir_shadow |= (bits & 0xff);
+			break;
+		};
+	};
+};
+
+
+asmlinkage void sys_gpiotogglebit(unsigned char port, unsigned int bits){
+	switch(port){
+	case 'G':
+	case 'g':
+		if(port_g_data_shadow & bits){
+			*R_PORT_G_DATA = port_g_data_shadow &= ~bits;
+		} else {
+			*R_PORT_G_DATA = port_g_data_shadow |= bits;
+		};
+		break;
+		
+	case 'A':
+	case 'a':
+		if(*R_PORT_PA_DATA & bits){
+			*R_PORT_PA_DATA = port_pa_data_shadow &= ~(bits & 0xff);
+		} else {
+			*R_PORT_PA_DATA = port_pa_data_shadow |= (bits & 0xff);	
+		};
+		break;
+
+	case 'B':
+	case 'b':
+		if(*R_PORT_PB_DATA & bits){
+			*R_PORT_PB_DATA = port_pb_data_shadow &= ~(bits & 0xff);
+		} else {
+			*R_PORT_PB_DATA = port_pb_data_shadow |= (bits & 0xff);	
+		};
+		break;
+		
+	};
+};
+
+
+asmlinkage unsigned int sys_gpiogetbits(unsigned char port, unsigned int bits){
+	unsigned int data = 0;
+	switch(port){
+	case 'G':
+	case 'g':
+		data = *R_PORT_G_DATA;
+		break;
+		
+	case 'A':
+	case 'a':
+		data = *R_PORT_PA_DATA;
+		break;
+
+	case 'B':
+	case 'b':
+		data = *R_PORT_PB_DATA;
+		break;
+		
+	};
+	data &= bits;
+	return data;
+};
+
+
diff --git a/target/linux/etrax-2.6/patches/cris/020-syscalls.patch b/target/linux/etrax-2.6/patches/cris/020-syscalls.patch
index f735ce7458d939256c05c4531f6097f4384f255d..5e674a6232b2bbb1c95a28b77185093dfc84bf5f 100644
--- a/target/linux/etrax-2.6/patches/cris/020-syscalls.patch
+++ b/target/linux/etrax-2.6/patches/cris/020-syscalls.patch
@@ -159,203 +159,8 @@ diff -urN linux-2.6.19.2.orig/include/asm-cris/unistd.h linux-2.6.19.2/include/a
  		
          /*
           * NOTE!! This doesn't have to be exact - we just have
-diff -urN linux-2.6.19.2.orig/arch/cris/arch-v10/drivers/gpio_syscalls.c linux-2.6.19.2/arch/cris/arch-v10/drivers/gpio_syscalls.c
---- linux-2.6.19.2.orig/arch/cris/arch-v10/drivers/gpio_syscalls.c	1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.19.2/arch/cris/arch-v10/drivers/gpio_syscalls.c	2007-06-17 04:09:15.000000000 +0200
-@@ -0,0 +1,192 @@
-+
-+#include <linux/autoconf.h>
-+
-+#include <linux/module.h>
-+#include <linux/sched.h>
-+#include <linux/slab.h>
-+#include <linux/ioport.h>
-+#include <linux/errno.h>
-+#include <linux/kernel.h>
-+#include <linux/fs.h>
-+#include <linux/string.h>
-+#include <linux/poll.h>
-+#include <linux/init.h>
-+#include <linux/interrupt.h>
-+
-+#include <asm/uaccess.h>
-+#include <linux/gpio_syscalls.h>
-+
-+#include <asm/etraxgpio.h>
-+#include <asm/arch/svinto.h>
-+#include <asm/io.h>
-+#include <asm/system.h>
-+#include <asm/irq.h>
-+#include <asm/arch/io_interface_mux.h>
-+
-+#include <asm/unistd.h>
-+
-+
-+extern int errno;
-+
-+
-+asmlinkage void sys_gpiosetbits(unsigned char port, unsigned int bits){
-+	switch(port){
-+	case 'G':
-+	case 'g':
-+		*R_PORT_G_DATA = port_g_data_shadow |= bits;
-+		break;
-+		
-+	case 'A':
-+	case 'a':
-+		*R_PORT_PA_DATA = port_pa_data_shadow |= bits;
-+		break;
-+
-+	case 'B':
-+	case 'b':
-+		*R_PORT_PB_DATA = port_pb_data_shadow |= bits;
-+		break;
-+		
-+	};
-+};
-+
-+
-+asmlinkage void sys_gpioclearbits(unsigned char port, unsigned int bits){
-+	switch(port){
-+	case 'G':
-+	case 'g':
-+		*R_PORT_G_DATA = port_g_data_shadow &= ~bits;
-+		break;
-+		
-+	case 'A':
-+	case 'a':
-+		*R_PORT_PA_DATA = port_pa_data_shadow &= ~bits;
-+		break;
-+
-+	case 'B':
-+	case 'b':
-+		*R_PORT_PB_DATA = port_pb_data_shadow &= ~bits;
-+		break;
-+		
-+	};
-+};
-+
-+asmlinkage void sys_gpiosetdir(unsigned char port, unsigned char dir, unsigned int bits){
-+	if((dir=='I' )||(dir=='i')){
-+		switch(port){
-+		case 'G':
-+		case 'g':
-+			if(bits & (1<<0)){
-+				genconfig_shadow &= ~IO_MASK(R_GEN_CONFIG, g0dir);
-+			};
-+			if((bits & 0x0000FF00)==0x0000FF00){
-+				genconfig_shadow &= ~IO_MASK(R_GEN_CONFIG, g8_15dir);
-+			};			
-+			if((bits & 0x00FF0000)==0x00FF0000){
-+				genconfig_shadow &= ~IO_MASK(R_GEN_CONFIG, g16_23dir);
-+			};			
-+			if(bits & (1<<24)){
-+				genconfig_shadow &= ~IO_MASK(R_GEN_CONFIG, g24dir);
-+			};			
-+			*R_GEN_CONFIG = genconfig_shadow;
-+			break;
-+		
-+		case 'A':
-+		case 'a':
-+			*R_PORT_PA_DIR = port_pa_dir_shadow &= ~(bits & 0xff);
-+			break;
-+
-+		case 'B':
-+		case 'b':
-+			*R_PORT_PB_DIR = port_pb_dir_shadow &= ~(bits & 0xff);
-+			break;
-+		};
-+	} else if((dir=='O' )||(dir=='o')){
-+		switch(port){
-+		case 'G':
-+		case 'g':
-+			if(bits & (1<<0)){
-+				genconfig_shadow |= IO_MASK(R_GEN_CONFIG, g0dir);
-+			};
-+			if((bits & 0x0000FF00)==0x0000FF00){
-+				genconfig_shadow |= IO_MASK(R_GEN_CONFIG, g8_15dir);
-+			};			
-+			if((bits & 0x00FF0000)==0x00FF0000){
-+				genconfig_shadow |= IO_MASK(R_GEN_CONFIG, g8_15dir);
-+			};			
-+			if(bits & (1<<24)){
-+				genconfig_shadow |= IO_MASK(R_GEN_CONFIG, g24dir);
-+			};			
-+			*R_GEN_CONFIG = genconfig_shadow;
-+			break;
-+		
-+		case 'A':
-+		case 'a':
-+			*R_PORT_PA_DIR = port_pa_dir_shadow |= (bits & 0xff);
-+			break;
-+
-+		case 'B':
-+		case 'b':
-+			*R_PORT_PB_DIR = port_pb_dir_shadow |= (bits & 0xff);
-+			break;
-+		};
-+	};
-+};
-+
-+
-+asmlinkage void sys_gpiotogglebit(unsigned char port, unsigned int bits){
-+	switch(port){
-+	case 'G':
-+	case 'g':
-+		if(port_g_data_shadow & bits){
-+			*R_PORT_G_DATA = port_g_data_shadow &= ~bits;
-+		} else {
-+			*R_PORT_G_DATA = port_g_data_shadow |= bits;
-+		};
-+		break;
-+		
-+	case 'A':
-+	case 'a':
-+		if(*R_PORT_PA_DATA & bits){
-+			*R_PORT_PA_DATA = port_pa_data_shadow &= ~(bits & 0xff);
-+		} else {
-+			*R_PORT_PA_DATA = port_pa_data_shadow |= (bits & 0xff);	
-+		};
-+		break;
-+
-+	case 'B':
-+	case 'b':
-+		if(*R_PORT_PB_DATA & bits){
-+			*R_PORT_PB_DATA = port_pb_data_shadow &= ~(bits & 0xff);
-+		} else {
-+			*R_PORT_PB_DATA = port_pb_data_shadow |= (bits & 0xff);	
-+		};
-+		break;
-+		
-+	};
-+};
-+
-+
-+asmlinkage unsigned int sys_gpiogetbits(unsigned char port, unsigned int bits){
-+	unsigned int data = 0;
-+	switch(port){
-+	case 'G':
-+	case 'g':
-+		data = *R_PORT_G_DATA;
-+		break;
-+		
-+	case 'A':
-+	case 'a':
-+		data = *R_PORT_PA_DATA;
-+		break;
-+
-+	case 'B':
-+	case 'b':
-+		data = *R_PORT_PB_DATA;
-+		break;
-+		
-+	};
-+	data &= bits;
-+	return data;
-+};
-+
-+
-Only in linux-2.6.19.2/arch/cris/arch-v10/drivers/: gpio_syscalls.c
 diff linux-2.6.19.2.orig/arch/cris/arch-v10/drivers/Makefile linux-2.6.19.2/arch/cris/arch-v10/drivers/Makefile
+--- linux-2.6.19.2.orig/arch/cris/arch-v10/drivers/Makefile	2007-06-16 23:58:14.000000000 +0200
++++ linux-2.6.19.2/arch/cris/arch-v10/drivers/Makefile 2007-06-17 03:48:21.000000000 +0200
 8a9
 > obj-$(CONFIG_ETRAX_GPIO)            += gpio_syscalls.o