This is a multi-part message in MIME format. ------=_NextPart_000_003B_01C4C57D.997545C0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Updates for 2.6.9 in basic character based drivers. Signed-off-by: Mikael Starvik ------=_NextPart_000_003B_01C4C57D.997545C0 Content-Type: application/octet-stream; name="cris269_2.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="cris269_2.patch" ../linux/arch/cris/arch-v10/drivers/axisflashmap.c = lx25/arch/cris/arch-v10/drivers/axisflashmap.c Signed-off-by: Andrew Morton --- /dev/null | 0 25-akpm/arch/cris/arch-v10/drivers/axisflashmap.c | 61 ++++------- 25-akpm/arch/cris/arch-v10/drivers/ds1302.c | 5 25-akpm/arch/cris/arch-v10/drivers/gpio.c | 5 25-akpm/arch/cris/arch-v10/drivers/i2c.c | 18 +-- 25-akpm/arch/cris/arch-v10/drivers/pcf8563.c | 4 25-akpm/arch/cris/arch-v10/drivers/serial.c | 118 ++++++++++++++++------ 25-akpm/arch/cris/arch-v10/kernel/fasttimer.c | 31 +++++ 8 files changed, 156 insertions(+), 86 deletions(-) diff -puN arch/cris/arch-v10/drivers/axisflashmap.c~cris-architecture-update-update-simple-drivers arch/cris/arch-v10/drivers/axisflashmap.c --- 25/arch/cris/arch-v10/drivers/axisflashmap.c~cris-architecture-update-update-simple-drivers Mon Nov 8 14:19:25 2004 +++ 25-akpm/arch/cris/arch-v10/drivers/axisflashmap.c Mon Nov 8 14:19:25 2004 @@ -11,6 +11,9 @@ * partition split defined below. * * $Log: axisflashmap.c,v $ + * Revision 1.10 2004/08/16 12:37:22 starvik + * Merge of Linux 2.6.8 + * * Revision 1.8 2004/05/14 07:58:03 starvik * Merge of changes from 2.4 * @@ -153,6 +156,14 @@ #define FLASH_CACHED_ADDR KSEG_F #endif +#if CONFIG_ETRAX_FLASH_BUSWIDTH==1 +#define flash_data __u8 +#elif CONFIG_ETRAX_FLASH_BUSWIDTH==2 +#define flash_data __u16 +#elif CONFIG_ETRAX_FLASH_BUSWIDTH==4 +#define flash_data __u16 +#endif + /* From head.S */ extern unsigned long romfs_start, romfs_length, romfs_in_flash; @@ -161,19 +172,11 @@ struct mtd_info* axisflash_mtd = NULL; /* Map driver functions. */ -static __u8 flash_read8(struct map_info *map, unsigned long ofs) -{ - return *(__u8 *)(map->map_priv_1 + ofs); -} - -static __u16 flash_read16(struct map_info *map, unsigned long ofs) +static map_word flash_read(struct map_info *map, unsigned long ofs) { - return *(__u16 *)(map->map_priv_1 + ofs); -} - -static __u32 flash_read32(struct map_info *map, unsigned long ofs) -{ - return *(volatile unsigned int *)(map->map_priv_1 + ofs); + map_word tmp; + tmp.x[0] = *(flash_data *)(map->map_priv_1 + ofs); + return tmp; } static void flash_copy_from(struct map_info *map, void *to, @@ -182,19 +185,9 @@ static void flash_copy_from(struct map_i memcpy(to, (void *)(map->map_priv_1 + from), len); } -static void flash_write8(struct map_info *map, __u8 d, unsigned long adr) -{ - *(__u8 *)(map->map_priv_1 + adr) = d; -} - -static void flash_write16(struct map_info *map, __u16 d, unsigned long adr) -{ - *(__u16 *)(map->map_priv_1 + adr) = d; -} - -static void flash_write32(struct map_info *map, __u32 d, unsigned long adr) +static void flash_write(struct map_info *map, map_word d, unsigned long adr) { - *(__u32 *)(map->map_priv_1 + adr) = d; + *(flash_data *)(map->map_priv_1 + adr) = (flash_data)d.x[0]; } /* @@ -215,14 +208,10 @@ static void flash_write32(struct map_inf static struct map_info map_cse0 = { .name = "cse0", .size = MEM_CSE0_SIZE, - .buswidth = CONFIG_ETRAX_FLASH_BUSWIDTH, - .read8 = flash_read8, - .read16 = flash_read16, - .read32 = flash_read32, + .bankwidth = CONFIG_ETRAX_FLASH_BUSWIDTH, + .read = flash_read, .copy_from = flash_copy_from, - .write8 = flash_write8, - .write16 = flash_write16, - .write32 = flash_write32, + .write = flash_write, .map_priv_1 = FLASH_UNCACHED_ADDR }; @@ -235,14 +224,10 @@ static struct map_info map_cse0 = { static struct map_info map_cse1 = { .name = "cse1", .size = MEM_CSE1_SIZE, - .buswidth = CONFIG_ETRAX_FLASH_BUSWIDTH, - .read8 = flash_read8, - .read16 = flash_read16, - .read32 = flash_read32, + .bankwidth = CONFIG_ETRAX_FLASH_BUSWIDTH, + .read = flash_read, .copy_from = flash_copy_from, - .write8 = flash_write8, - .write16 = flash_write16, - .write32 = flash_write32, + .write = flash_write, .map_priv_1 = FLASH_UNCACHED_ADDR + MEM_CSE0_SIZE }; diff -puN arch/cris/arch-v10/drivers/ds1302.c~cris-architecture-update-update-simple-drivers arch/cris/arch-v10/drivers/ds1302.c --- 25/arch/cris/arch-v10/drivers/ds1302.c~cris-architecture-update-update-simple-drivers Mon Nov 8 14:19:25 2004 +++ 25-akpm/arch/cris/arch-v10/drivers/ds1302.c Mon Nov 8 14:19:25 2004 @@ -7,6 +7,9 @@ *! Functions exported: ds1302_readreg, ds1302_writereg, ds1302_init *! *! $Log: ds1302.c,v $ +*! Revision 1.14 2004/08/24 06:48:43 starvik +*! Whitespace cleanup +*! *! Revision 1.13 2004/05/28 09:26:59 starvik *! Modified I2C initialization to work in 2.6. *! @@ -123,7 +126,7 @@ *! *! (C) Copyright 1999, 2000, 2001 Axis Communications AB, LUND, SWEDEN *! -*! $Id: ds1302.c,v 1.13 2004/05/28 09:26:59 starvik Exp $ +*! $Id: ds1302.c,v 1.14 2004/08/24 06:48:43 starvik Exp $ *! *!***************************************************************************/ diff -puN arch/cris/arch-v10/drivers/gpio.c~cris-architecture-update-update-simple-drivers arch/cris/arch-v10/drivers/gpio.c --- 25/arch/cris/arch-v10/drivers/gpio.c~cris-architecture-update-update-simple-drivers Mon Nov 8 14:19:25 2004 +++ 25-akpm/arch/cris/arch-v10/drivers/gpio.c Mon Nov 8 14:19:25 2004 @@ -1,4 +1,4 @@ -/* $Id: gpio.c,v 1.11 2004/05/14 07:58:03 starvik Exp $ +/* $Id: gpio.c,v 1.12 2004/08/24 07:19:59 starvik Exp $ * * Etrax general port I/O device * @@ -9,6 +9,9 @@ * Johan Adolfsson (read/set directions, write, port G) * * $Log: gpio.c,v $ + * Revision 1.12 2004/08/24 07:19:59 starvik + * Whitespace cleanup + * * Revision 1.11 2004/05/14 07:58:03 starvik * Merge of changes from 2.4 * diff -puN arch/cris/arch-v10/drivers/i2c.c~cris-architecture-update-update-simple-drivers arch/cris/arch-v10/drivers/i2c.c --- 25/arch/cris/arch-v10/drivers/i2c.c~cris-architecture-update-update-simple-drivers Mon Nov 8 14:19:25 2004 +++ 25-akpm/arch/cris/arch-v10/drivers/i2c.c Mon Nov 8 14:19:25 2004 @@ -12,6 +12,12 @@ *! don't use PB_I2C if DS1302 uses same bits, *! use PB. *! $Log: i2c.c,v $ +*! Revision 1.9 2004/08/24 06:49:14 starvik +*! Whitespace cleanup +*! +*! Revision 1.8 2004/06/08 08:48:26 starvik +*! Removed unused code +*! *! Revision 1.7 2004/05/28 09:26:59 starvik *! Modified I2C initialization to work in 2.6. *! @@ -69,7 +75,7 @@ *! (C) Copyright 1999-2002 Axis Communications AB, LUND, SWEDEN *! *!***************************************************************************/ -/* $Id: i2c.c,v 1.7 2004/05/28 09:26:59 starvik Exp $ */ +/* $Id: i2c.c,v 1.9 2004/08/24 06:49:14 starvik Exp $ */ /****************** INCLUDE FILES SECTION ***********************************/ @@ -110,14 +116,6 @@ static const char i2c_name[] = "i2c"; #define I2C_DATA_HIGH 1 #define I2C_DATA_LOW 0 -#if 0 -/* TODO: fix this so the CONFIG_ETRAX_I2C_USES... is set in Config.in instead */ -#if defined(CONFIG_DS1302) && (CONFIG_DS1302_SDABIT==0) && \ - (CONFIG_DS1302_SCLBIT == 1) -#define CONFIG_ETRAX_I2C_USES_PB_NOT_PB_I2C -#endif -#endif - #ifdef CONFIG_ETRAX_I2C_USES_PB_NOT_PB_I2C /* Use PB and not PB_I2C */ #ifndef CONFIG_ETRAX_I2C_DATA_PORT @@ -441,7 +439,7 @@ i2c_sendack(void) */ i2c_data(I2C_DATA_HIGH); i2c_delay(CLOCK_LOW_TIME); - + i2c_dir_in(); } diff -puN arch/cris/arch-v10/drivers/pcf8563.c~cris-architecture-update-update-simple-drivers arch/cris/arch-v10/drivers/pcf8563.c --- 25/arch/cris/arch-v10/drivers/pcf8563.c~cris-architecture-update-update-simple-drivers Mon Nov 8 14:19:25 2004 +++ 25-akpm/arch/cris/arch-v10/drivers/pcf8563.c Mon Nov 8 14:19:25 2004 @@ -15,7 +15,7 @@ * * Author: Tobias Anderberg . * - * $Id: pcf8563.c,v 1.4 2004/05/28 09:26:59 starvik Exp $ + * $Id: pcf8563.c,v 1.8 2004/08/24 06:42:51 starvik Exp $ */ #include @@ -40,7 +40,7 @@ #define PCF8563_MAJOR 121 /* Local major number. */ #define DEVICE_NAME "rtc" /* Name which is registered in /proc/devices. */ #define PCF8563_NAME "PCF8563" -#define DRIVER_VERSION "$Revision: 1.4 $" +#define DRIVER_VERSION "$Revision: 1.8 $" /* I2C bus slave registers. */ #define RTC_I2C_READ 0xa3 diff -puN arch/cris/arch-v10/drivers/serial.c~cris-architecture-update-update-simple-drivers arch/cris/arch-v10/drivers/serial.c --- 25/arch/cris/arch-v10/drivers/serial.c~cris-architecture-update-update-simple-drivers Mon Nov 8 14:19:25 2004 +++ 25-akpm/arch/cris/arch-v10/drivers/serial.c Mon Nov 8 14:19:25 2004 @@ -1,4 +1,4 @@ -/* $Id: serial.c,v 1.20 2004/05/24 12:00:20 starvik Exp $ +/* $Id: serial.c,v 1.25 2004/09/29 10:33:49 starvik Exp $ * * Serial port driver for the ETRAX 100LX chip * @@ -7,6 +7,20 @@ * Many, many authors. Based once upon a time on serial.c for 16x50. * * $Log: serial.c,v $ + * Revision 1.25 2004/09/29 10:33:49 starvik + * Resolved a dealock when printing debug from kernel. + * + * Revision 1.24 2004/08/27 23:25:59 johana + * rs_set_termios() must call change_speed() if c_iflag has changed or + * automatic XOFF handling will be enabled and transmitter will stop + * if 0x13 is received. + * + * Revision 1.23 2004/08/24 06:57:13 starvik + * More whitespace cleanup + * + * Revision 1.22 2004/08/24 06:12:20 starvik + * Whitespace cleanup + * * Revision 1.20 2004/05/24 12:00:20 starvik * Big merge of stuff from Linux 2.4 (e.g. manual mode for the serial port). * @@ -409,7 +423,7 @@ * */ -static char *serial_version = "$Revision: 1.20 $"; +static char *serial_version = "$Revision: 1.25 $"; #include #include @@ -435,7 +449,7 @@ static char *serial_version = "$Revision #include #include #include -#include +#include #include #include @@ -577,12 +591,12 @@ unsigned long timer_data_to_ns(unsigned static void change_speed(struct e100_serial *info); static void rs_throttle(struct tty_struct * tty); static void rs_wait_until_sent(struct tty_struct *tty, int timeout); -static int rs_write(struct tty_struct * tty, +static int rs_write(struct tty_struct * tty, int from_user, const unsigned char *buf, int count); -extern _INLINE_ int rs_raw_write(struct tty_struct * tty, +extern _INLINE_ int rs_raw_write(struct tty_struct * tty, int from_user, const unsigned char *buf, int count); #ifdef CONFIG_ETRAX_RS485 -static int e100_write_rs485(struct tty_struct * tty, +static int e100_write_rs485(struct tty_struct * tty, int from_user, const unsigned char *buf, int count); #endif static int get_lsr_info(struct e100_serial * info, unsigned int *value); @@ -1786,7 +1800,7 @@ e100_enable_rs485(struct tty_struct *tty } static int -e100_write_rs485(struct tty_struct *tty, +e100_write_rs485(struct tty_struct *tty, int from_user, const unsigned char *buf, int count) { struct e100_serial * info = (struct e100_serial *)tty->driver_data; @@ -1799,7 +1813,7 @@ e100_write_rs485(struct tty_struct *tty, */ info->rs485.enabled = 1; /* rs_write now deals with RS485 if enabled */ - count = rs_write(tty, buf, count); + count = rs_write(tty, from_user, buf, count); info->rs485.enabled = old_enabled; return count; } @@ -3614,7 +3628,7 @@ rs_flush_chars(struct tty_struct *tty) } extern _INLINE_ int -rs_raw_write(struct tty_struct * tty, +rs_raw_write(struct tty_struct * tty, int from_user, const unsigned char *buf, int count) { int c, ret = 0; @@ -3649,25 +3663,60 @@ rs_raw_write(struct tty_struct * tty, * atomic operation... this could perhaps be avoided by more clever * design. */ - cli(); - while (1) { - c = CIRC_SPACE_TO_END(info->xmit.head, - info->xmit.tail, - SERIAL_XMIT_SIZE); - - if (count < c) - c = count; - if (c <= 0) - break; + if (from_user) { + down(&tmp_buf_sem); + while (1) { + int c1; + c = CIRC_SPACE_TO_END(info->xmit.head, + info->xmit.tail, + SERIAL_XMIT_SIZE); + if (count < c) + c = count; + if (c <= 0) + break; + + c -= copy_from_user(tmp_buf, buf, c); + if (!c) { + if (!ret) + ret = -EFAULT; + break; + } + cli(); + c1 = CIRC_SPACE_TO_END(info->xmit.head, + info->xmit.tail, + SERIAL_XMIT_SIZE); + if (c1 < c) + c = c1; + memcpy(info->xmit.buf + info->xmit.head, tmp_buf, c); + info->xmit.head = ((info->xmit.head + c) & + (SERIAL_XMIT_SIZE-1)); + restore_flags(flags); + buf += c; + count -= c; + ret += c; + } + up(&tmp_buf_sem); + } else { + cli(); + while (count) { + c = CIRC_SPACE_TO_END(info->xmit.head, + info->xmit.tail, + SERIAL_XMIT_SIZE); + + if (count < c) + c = count; + if (c <= 0) + break; - memcpy(info->xmit.buf + info->xmit.head, buf, c); - info->xmit.head = (info->xmit.head + c) & - (SERIAL_XMIT_SIZE-1); - buf += c; - count -= c; - ret += c; + memcpy(info->xmit.buf + info->xmit.head, buf, c); + info->xmit.head = (info->xmit.head + c) & + (SERIAL_XMIT_SIZE-1); + buf += c; + count -= c; + ret += c; + } + restore_flags(flags); } - restore_flags(flags); /* enable transmitter if not running, unless the tty is stopped * this does not need IRQ protection since if tr_running == 0 @@ -3686,7 +3735,7 @@ rs_raw_write(struct tty_struct * tty, } /* raw_raw_write() */ static int -rs_write(struct tty_struct * tty, +rs_write(struct tty_struct * tty, int from_user, const unsigned char *buf, int count) { #if defined(CONFIG_ETRAX_RS485) @@ -3715,7 +3764,7 @@ rs_write(struct tty_struct * tty, } #endif /* CONFIG_ETRAX_RS485 */ - count = rs_raw_write(tty, buf, count); + count = rs_raw_write(tty, from_user, buf, count); #if defined(CONFIG_ETRAX_RS485) if (info->rs485.enabled) @@ -3945,12 +3994,12 @@ set_serial_info(struct e100_serial *info if (info->count > 1) return -EBUSY; - + /* * OK, past this point, all the error checking has been done. * At this point, we start making changes..... */ - + info->baud_base = new_serial.baud_base; info->flags = ((info->flags & ~ASYNC_FLAGS) | (new_serial.flags & ASYNC_FLAGS)); @@ -4217,7 +4266,8 @@ rs_set_termios(struct tty_struct *tty, s { struct e100_serial *info = (struct e100_serial *)tty->driver_data; - if (tty->termios->c_cflag == old_termios->c_cflag) + if (tty->termios->c_cflag == old_termios->c_cflag && + tty->termios->c_iflag == old_termios->c_iflag) return; change_speed(info); @@ -4241,6 +4291,7 @@ extern debugport_write_function debug_wr static int rs_debug_write_function(int i, const char *buf, unsigned int len) { int cnt; + int written = 0; struct tty_struct *tty; static int recurse_cnt = 0; @@ -4252,14 +4303,17 @@ static int rs_debug_write_function(int i local_irq_save(flags); recurse_cnt++; + local_irq_restore(flags); do { - cnt = rs_write(tty, 0, buf, len); + cnt = rs_write(tty, 0, buf + written, len); if (cnt >= 0) { + written += cnt; buf += cnt; len -= cnt; } else len = cnt; } while(len > 0); + local_irq_save(flags); recurse_cnt--; local_irq_restore(flags); return 1; diff -puN arch/cris/arch-v10/kernel/fasttimer.c~cris-architecture-update-update-simple-drivers arch/cris/arch-v10/kernel/fasttimer.c --- 25/arch/cris/arch-v10/kernel/fasttimer.c~cris-architecture-update-update-simple-drivers Mon Nov 8 14:19:25 2004 +++ 25-akpm/arch/cris/arch-v10/kernel/fasttimer.c Mon Nov 8 14:19:25 2004 @@ -102,6 +102,7 @@ #include #include +#include #include #include @@ -598,8 +599,23 @@ void schedule_usleep(unsigned long us) #ifdef CONFIG_PROC_FS static int proc_fasttimer_read(char *buf, char **start, off_t offset, int len - ,int *eof, void *data_unused); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,0) + ,int *eof, void *data_unused +#else + ,int unused +#endif + ); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,0) static struct proc_dir_entry *fasttimer_proc_entry; +#else +static struct proc_dir_entry fasttimer_proc_entry = +{ + 0, 9, "fasttimer", + S_IFREG | S_IRUGO, 1, 0, 0, + 0, NULL /* ops -- default to array */, + &proc_fasttimer_read /* get_info */, +}; +#endif #endif /* CONFIG_PROC_FS */ #ifdef CONFIG_PROC_FS @@ -608,7 +624,12 @@ static struct proc_dir_entry *fasttimer_ #define BIG_BUF_SIZE (500 + NUM_TIMER_STATS * 300) static int proc_fasttimer_read(char *buf, char **start, off_t offset, int len - ,int *eof, void *data_unused) +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,0) + ,int *eof, void *data_unused +#else + ,int unused +#endif + ) { unsigned long flags; int i = 0; @@ -784,7 +805,9 @@ static int proc_fasttimer_read(char *buf memcpy(buf, bigbuf + offset, len); *start = buf; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,0) *eof = 1; +#endif return len; } @@ -959,8 +982,12 @@ void fast_timer_init(void) } #endif #ifdef CONFIG_PROC_FS +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,2,0) if ((fasttimer_proc_entry = create_proc_entry( "fasttimer", 0, 0 ))) fasttimer_proc_entry->read_proc = proc_fasttimer_read; +#else + proc_register_dynamic(&proc_root, &fasttimer_proc_entry); +#endif #endif /* PROC_FS */ if(request_irq(TIMER1_IRQ_NBR, timer1_handler, SA_SHIRQ, "fast timer int", NULL)) diff -L linux/arch/cris/arch-v10/drivers/axisflashmap.c -puN /dev/null /dev/null diff -L linux/arch/cris/arch-v10/drivers/ds1302.c -puN /dev/null /dev/null diff -L linux/arch/cris/arch-v10/drivers/gpio.c -puN /dev/null /dev/null diff -L linux/arch/cris/arch-v10/drivers/i2c.c -puN /dev/null /dev/null diff -L linux/arch/cris/arch-v10/drivers/pcf8563.c -puN /dev/null /dev/null diff -L linux/arch/cris/arch-v10/drivers/serial.c -puN /dev/null /dev/null diff -L linux/arch/cris/arch-v10/kernel/fasttimer.c -puN /dev/null /dev/null _