From 5ed12e1ebb9aa4953c7372080a9216b11f158edc Mon Sep 17 00:00:00 2001 From: John Crispin Date: Sun, 29 Jul 2007 00:04:37 +0000 Subject: [PATCH] some fixes to the etrax build SVN-Revision: 8211 --- target/linux/etrax-2.6/config/default | 28 +++ .../cris/arch-v10/drivers/gpio_syscalls.c | 191 +++++++++++++++++ .../etrax-2.6/patches/cris/020-syscalls.patch | 199 +----------------- 3 files changed, 221 insertions(+), 197 deletions(-) create mode 100644 target/linux/etrax-2.6/files/arch/cris/arch-v10/drivers/gpio_syscalls.c diff --git a/target/linux/etrax-2.6/config/default b/target/linux/etrax-2.6/config/default index 29f18d6783..6ca4de1dfe 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 0000000000..b6300aa9cd --- /dev/null +++ b/target/linux/etrax-2.6/files/arch/cris/arch-v10/drivers/gpio_syscalls.c @@ -0,0 +1,191 @@ +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include + + +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 f735ce7458..5e674a6232 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 -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+#include -+ -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+ -+ -+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