linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] 1/3: Remove USR 56K voice modem specific PCI table entry.
@ 2003-04-16 22:42 Russell King
  2003-04-16 22:43 ` [PATCH] 2/3: Console initcalls return int, zero for success Russell King
  0 siblings, 1 reply; 3+ messages in thread
From: Russell King @ 2003-04-16 22:42 UTC (permalink / raw)
  To: Linux Kernel List

Jordan Breeding confirms that our serial PCI detection algorithms
now correctly determine this device, and doesn't require a specific
entry.

diff -Nru a/drivers/serial/8250_pci.c b/drivers/serial/8250_pci.c
--- a/drivers/serial/8250_pci.c	Wed Apr 16 23:12:27 2003
+++ b/drivers/serial/8250_pci.c	Wed Apr 16 23:12:27 2003
@@ -1802,13 +1802,6 @@
 		pbn_b1_1_115200 },
 
 	/*
-	 * 3Com US Robotics 56k Voice Internal PCI model 5610
-	 */
-	{	PCI_VENDOR_ID_USR, 0x1008,
-		PCI_ANY_ID, PCI_ANY_ID, 0, 0,
-		pbn_b0_1_115200 },
-
-	/*
 	 * Titan Electronic cards
 	 *  The 400L and 800L have a custom setup quirk.
 	 */

-- 
Russell King (rmk@arm.linux.org.uk)                The developer of ARM Linux
             http://www.arm.linux.org.uk/personal/aboutme.html


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] 2/3: Console initcalls return int, zero for success.
  2003-04-16 22:42 [PATCH] 1/3: Remove USR 56K voice modem specific PCI table entry Russell King
@ 2003-04-16 22:43 ` Russell King
  2003-04-16 22:45   ` [PATCH] 3/3: Move make modem control signals accessible to line discplines Russell King
  0 siblings, 1 reply; 3+ messages in thread
From: Russell King @ 2003-04-16 22:43 UTC (permalink / raw)
  To: Linux Kernel List


diff -Nru a/drivers/serial/68328serial.c b/drivers/serial/68328serial.c
--- a/drivers/serial/68328serial.c	Wed Apr 16 23:25:53 2003
+++ b/drivers/serial/68328serial.c	Wed Apr 16 23:25:53 2003
@@ -1691,9 +1691,10 @@
 };
 
 
-static void __init m68328_console_init(void)
+static int __init m68328_console_init(void)
 {
 	register_console(&m68328_driver);
+	return 0;
 }
 
 console_initcall(m68328_console_init);
diff -Nru a/drivers/serial/amba.c b/drivers/serial/amba.c
--- a/drivers/serial/amba.c	Wed Apr 16 23:25:53 2003
+++ b/drivers/serial/amba.c	Wed Apr 16 23:25:53 2003
@@ -705,9 +705,10 @@
 	.index		= -1,
 };
 
-static void __init ambauart_console_init(void)
+static int __init ambauart_console_init(void)
 {
 	register_console(&amba_console);
+	return 0;
 }
 console_initcall(ambauart_console_init);
 
diff -Nru a/drivers/serial/anakin.c b/drivers/serial/anakin.c
--- a/drivers/serial/anakin.c	Wed Apr 16 23:25:53 2003
+++ b/drivers/serial/anakin.c	Wed Apr 16 23:25:53 2003
@@ -502,10 +502,10 @@
 	.index		= -1,
 };
 
-static void __init
-anakin_console_init(void)
+static int __init anakin_console_init(void)
 {
 	register_console(&anakin_console);
+	return 0;
 }
 console_initcall(anakin_console_init);
 
diff -Nru a/drivers/serial/clps711x.c b/drivers/serial/clps711x.c
--- a/drivers/serial/clps711x.c	Wed Apr 16 23:25:53 2003
+++ b/drivers/serial/clps711x.c	Wed Apr 16 23:25:53 2003
@@ -567,9 +567,10 @@
 	.index		= -1,
 };
 
-static void __init clps711xuart_console_init(void)
+static int __init clps711xuart_console_init(void)
 {
 	register_console(&clps711x_console);
+	return 0;
 }
 console_initcall(clps711xuart_console_init);
 
diff -Nru a/drivers/serial/mcfserial.c b/drivers/serial/mcfserial.c
--- a/drivers/serial/mcfserial.c	Wed Apr 16 23:25:53 2003
+++ b/drivers/serial/mcfserial.c	Wed Apr 16 23:25:53 2003
@@ -1853,9 +1853,10 @@
 	.index		= -1,
 };
 
-static void __init mcfrs_console_init(void)
+static int __init mcfrs_console_init(void)
 {
 	register_console(&mcfrs_console);
+	return 0;
 }
 
 console_initcall(mcfrs_console_init);
diff -Nru a/drivers/serial/sa1100.c b/drivers/serial/sa1100.c
--- a/drivers/serial/sa1100.c	Wed Apr 16 23:25:53 2003
+++ b/drivers/serial/sa1100.c	Wed Apr 16 23:25:53 2003
@@ -836,10 +836,11 @@
 	.index		= -1,
 };
 
-static void __init sa1100_rs_console_init(void)
+static int __init sa1100_rs_console_init(void)
 {
 	sa1100_init_ports();
 	register_console(&sa1100_console);
+	return 0;
 }
 console_initcall(sa1100_rs_console_init);
 
diff -Nru a/drivers/serial/uart00.c b/drivers/serial/uart00.c
--- a/drivers/serial/uart00.c	Wed Apr 16 23:25:53 2003
+++ b/drivers/serial/uart00.c	Wed Apr 16 23:25:53 2003
@@ -645,9 +645,10 @@
 	.index		= 0,
 };
 
-static void __init uart00_console_init(void)
+static int __init uart00_console_init(void)
 {
 	register_console(&uart00_console);
+	return 0;
 }
 console_initcall(uart00_console_init);
 

-- 
Russell King (rmk@arm.linux.org.uk)                The developer of ARM Linux
             http://www.arm.linux.org.uk/personal/aboutme.html


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] 3/3: Move make modem control signals accessible to line discplines
  2003-04-16 22:43 ` [PATCH] 2/3: Console initcalls return int, zero for success Russell King
@ 2003-04-16 22:45   ` Russell King
  0 siblings, 0 replies; 3+ messages in thread
From: Russell King @ 2003-04-16 22:45 UTC (permalink / raw)
  To: Linux Kernel List

We also parse modem control signals in the tty layer, and fail with
EINVAL if the driver does not provide the methods.  All tty drivers
which require modem control support should be updated to provide
the new tiocmset and tiocmget methods.

** Note: there is some janitorial work which needs done to convert
   the other serial drivers to use this TIOCM code - it should be
   a nice project for some of the janitors.

diff -Nru a/drivers/char/tty_io.c b/drivers/char/tty_io.c
--- a/drivers/char/tty_io.c	Wed Apr 16 23:40:27 2003
+++ b/drivers/char/tty_io.c	Wed Apr 16 23:40:27 2003
@@ -1691,6 +1691,55 @@
 	return 0;
 }
 
+static int
+tty_tiocmget(struct tty_struct *tty, struct file *file, unsigned long arg)
+{
+	int retval = -EINVAL;
+
+	if (tty->driver.tiocmget) {
+		retval = tty->driver.tiocmget(tty, file);
+
+		if (retval >= 0)
+			retval = put_user(retval, (int *)arg);
+	}
+	return retval;
+}
+
+static int
+tty_tiocmset(struct tty_struct *tty, struct file *file, unsigned int cmd,
+	     unsigned long arg)
+{
+	int retval = -EINVAL;
+
+	if (tty->driver.tiocmset) {
+		unsigned int set, clear, val;
+
+		retval = get_user(val, (unsigned int *)arg);
+		if (retval)
+			return retval;
+
+		set = clear = 0;
+		switch (cmd) {
+		case TIOCMBIS:
+			set = val;
+			break;
+		case TIOCMBIC:
+			clear = val;
+			break;
+		case TIOCMSET:
+			set = val;
+			clear = ~val;
+			break;
+		}
+
+		set &= TIOCM_DTR|TIOCM_RTS|TIOCM_OUT1|TIOCM_OUT2;
+		clear &= TIOCM_DTR|TIOCM_RTS|TIOCM_OUT1|TIOCM_OUT2;
+
+		retval = tty->driver.tiocmset(tty, file, set, clear);
+	}
+	return retval;
+}
+
 /*
  * Split this up, as gcc can choke on it otherwise..
  */
@@ -1816,6 +1865,14 @@
 			return 0;
 		case TCSBRKP:	/* support for POSIX tcsendbreak() */	
 			return send_break(tty, arg ? arg*(HZ/10) : HZ/4);
+
+		case TIOCMGET:
+			return tty_tiocmget(tty, file, arg);
+
+		case TIOCMSET:
+		case TIOCMBIC:
+		case TIOCMBIS:
+			return tty_tiocmset(tty, file, cmd, arg);
 	}
 	if (tty->driver.ioctl) {
 		int retval = (tty->driver.ioctl)(tty, file, cmd, arg);
diff -Nru a/drivers/net/irda/irtty-sir.c b/drivers/net/irda/irtty-sir.c
--- a/drivers/net/irda/irtty-sir.c	Wed Apr 16 23:40:27 2003
+++ b/drivers/net/irda/irtty-sir.c	Wed Apr 16 23:40:27 2003
@@ -180,32 +180,29 @@
 static int irtty_set_dtr_rts(struct sir_dev *dev, int dtr, int rts)
 {
 	struct sirtty_cb *priv = dev->priv;
-	int arg = 0;
+	int set = 0;
+	int clear = 0;
 
 	ASSERT(priv != NULL, return -1;);
 	ASSERT(priv->magic == IRTTY_MAGIC, return -1;);
 
-#ifdef TIOCM_OUT2 /* Not defined for ARM */
-	arg = TIOCM_OUT2;
-#endif
 	if (rts)
-		arg |= TIOCM_RTS;
+		set |= TIOCM_RTS;
+	else
+		clear |= TIOCM_RTS;
 	if (dtr)
-		arg |= TIOCM_DTR;
+		set |= TIOCM_DTR;
+	else
+		clear |= TIOCM_DTR;
 
 	/*
-	 * The ioctl() function, or actually set_modem_info() in serial.c
-	 * expects a pointer to the argument in user space. This is working
-	 * here because we are always called from the kIrDAd thread which
-	 * has set_fs(KERNEL_DS) permanently set. Therefore copy_from_user()
-	 * is happy with our arg-parameter being local here in kernel space.
+	 * We can't use ioctl() because it expects a non-null file structure,
+	 * and we don't have that here.
+	 * This function is not yet defined for all tty driver, so
+	 * let's be careful... Jean II
 	 */
-
-	lock_kernel();
-	if (priv->tty->driver.ioctl(priv->tty, NULL, TIOCMSET, (unsigned long) &arg)) { 
-		IRDA_DEBUG(2, "%s(), error doing ioctl!\n", __FUNCTION__);
-	}
-	unlock_kernel();
+	ASSERT(priv->tty->driver.tiocmset != NULL, return -1;);
+	priv->tty->driver.tiocmset(priv->tty, NULL, set, clear);
 
 	return 0;
 }
diff -Nru a/drivers/serial/core.c b/drivers/serial/core.c
--- a/drivers/serial/core.c	Wed Apr 16 23:40:27 2003
+++ b/drivers/serial/core.c	Wed Apr 16 23:40:27 2003
@@ -873,45 +873,38 @@
 	return put_user(result, value);
 }
 
-static int uart_get_modem_info(struct uart_port *port, unsigned int *value)
+static int uart_tiocmget(struct tty_struct *tty, struct file *file)
 {
-	unsigned int result = port->mctrl;
+	struct uart_state *state = tty->driver_data;
+	struct uart_port *port = state->port;
+	int result = -EIO;
 
-	result |= port->ops->get_mctrl(port);
+	down(&state->sem);
+	if ((!file || !tty_hung_up_p(file)) &&
+	    !(tty->flags & (1 << TTY_IO_ERROR))) {
+		result = port->mctrl;
+		result |= port->ops->get_mctrl(port);
+	}
+	up(&state->sem);
 
-	return put_user(result, value);
+	return result;
 }
 
 static int
-uart_set_modem_info(struct uart_port *port, unsigned int cmd,
-		    unsigned int *value)
+uart_tiocmset(struct tty_struct *tty, struct file *file,
+	      unsigned int set, unsigned int clear)
 {
-	unsigned int arg, set, clear;
-	int ret = 0;
-
-	if (get_user(arg, value))
-		return -EFAULT;
-
-	arg &= TIOCM_DTR|TIOCM_RTS|TIOCM_OUT1|TIOCM_OUT2;
+	struct uart_state *state = tty->driver_data;
+	struct uart_port *port = state->port;
+	int ret = -EIO;
 
-	set = clear = 0;
-	switch (cmd) {
-	case TIOCMBIS:
-		set = arg;
-		break;
-	case TIOCMBIC:
-		clear = arg;
-		break;
-	case TIOCMSET:
-		set = arg;
-		clear = ~arg;
-		break;
-	default:
-		ret = -EINVAL;
-		break;
-	}
-	if (ret == 0)
+	down(&state->sem);
+	if ((!file || !tty_hung_up_p(file)) &&
+	    !(tty->flags & (1 << TTY_IO_ERROR))) {
 		uart_update_mctrl(port, set, clear);
+		ret = 0;
+	}
+	up(&state->sem);
 	return ret;
 }
 
@@ -922,8 +915,12 @@
 
 	BUG_ON(!kernel_locked());
 
+	down(&state->sem);
+
 	if (port->type != PORT_UNKNOWN)
 		port->ops->break_ctl(port, break_state);
+
+	up(&state->sem);
 }
 
 static int uart_do_autoconfig(struct uart_state *state)
@@ -1130,17 +1127,6 @@
 	 * protected against the tty being hung up.
 	 */
 	switch (cmd) {
-	case TIOCMGET:
-		ret = uart_get_modem_info(state->port, (unsigned int *)arg);
-		break;
-
-	case TIOCMBIS:
-	case TIOCMBIC:
-	case TIOCMSET:
-		ret = uart_set_modem_info(state->port, cmd,
-					  (unsigned int *)arg);
-		break;
-
 	case TIOCSERGETLSR: /* Get line status register */
 		ret = uart_get_lsr_info(state, (unsigned int *)arg);
 		break;
@@ -2162,6 +2148,8 @@
 #ifdef CONFIG_PROC_FS
 	normal->read_proc	= uart_read_proc;
 #endif
+	normal->tiocmget	= uart_tiocmget;
+	normal->tiocmset	= uart_tiocmset;
 
 	/*
 	 * Initialise the UART state(s).
diff -Nru a/include/linux/tty_driver.h b/include/linux/tty_driver.h
--- a/include/linux/tty_driver.h	Wed Apr 16 23:40:27 2003
+++ b/include/linux/tty_driver.h	Wed Apr 16 23:40:27 2003
@@ -172,6 +172,9 @@
 			  int count, int *eof, void *data);
 	int (*write_proc)(struct file *file, const char *buffer,
 			  unsigned long count, void *data);
+	int (*tiocmget)(struct tty_struct *tty, struct file *file);
+	int (*tiocmset)(struct tty_struct *tty, struct file *file,
+			unsigned int set, unsigned int clear);
 	struct list_head tty_drivers;
 };
 

-- 
Russell King (rmk@arm.linux.org.uk)                The developer of ARM Linux
             http://www.arm.linux.org.uk/personal/aboutme.html


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2003-04-16 22:34 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-04-16 22:42 [PATCH] 1/3: Remove USR 56K voice modem specific PCI table entry Russell King
2003-04-16 22:43 ` [PATCH] 2/3: Console initcalls return int, zero for success Russell King
2003-04-16 22:45   ` [PATCH] 3/3: Move make modem control signals accessible to line discplines Russell King

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).