linux-serial.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* (unknown)
@ 2004-08-24  6:05 Francisco M. Marzoa Alonso
  2004-08-24  9:39 ` your mail Jan-Benedict Glaw
  0 siblings, 1 reply; 51+ messages in thread
From: Francisco M. Marzoa Alonso @ 2004-08-24  6:05 UTC (permalink / raw)
  To: linux-serial

>>       TOut.tv_sec = Wait / 1000;
>>       TOut.tv_usec = Wait % 1000;
>
>So "Wait" is in milli-seconds? That doesn't look correct, then:)
>
>        TOut.tv_sec = Wait / 1000;
>        TOut.tv_usec = (Wait % 1000) * 1000;

Sure you're right, but this is a thing that I do not understand. I made a 
function GetTickCount to emulate Window's one based on gettimeofday and see 
that milliseconds on timeval structure can have values up to 999999 when I 
expect to found a maximum value of 999 as there are only 1000 milliseconds in 
a second.

>>       if ( select ( FD_SETSIZE, &readfs, NULL, NULL, &TOut ) ) {

>That's most probably wrong. "FD_SETSIZE" should be "HND + 1". ...and the
>"if" should fire like "if (select (...) > 0)"

Ok, I've tried some different values, I'll use only HND+1 from now.

>This could hand because you didn't select() on HND *before* writing to
>it.

You're right. I've fixed this. 

>>       if ( ! select ( FD_SETSIZE, NULL, &writefs, NULL, &TOut ) ) {
>>               perror ( "Timeout waiting on CommWriteChar");
>>               return 0;
>>       }

>select() checks if the next access won't hand (but may return
>successfull or with an error instead). It doesn't make much sense to do
>that *after* having something written down there:)

>>       return ( bcount );
>> }

>Btw: return isn't a function. It's return value doesn't need an own pair
>of parentheses.

I usually forget this, but I think this makes no efective difference and the 
code generated by the compiler is the same and I feel more comfortable using 
them.

I've done this changes, that I've no doubt that are needed, but I continue 
having the same problems as described in my previous e-mail.

Thanks a lot.


-- 
Francisco M. Marzoa Alonso
Responsable de Software - Softrónica S.A.
http://www.softronica.org/
C/Herrerías, 14 - 28760 Tres Cantos (Madrid)
tfno. +34 918 038 600  fax. +34 918 032 297
-
To unsubscribe from this list: send the line "unsubscribe linux-serial" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* Re: your mail
  2004-08-24  6:05 (unknown) Francisco M. Marzoa Alonso
@ 2004-08-24  9:39 ` Jan-Benedict Glaw
  0 siblings, 0 replies; 51+ messages in thread
From: Jan-Benedict Glaw @ 2004-08-24  9:39 UTC (permalink / raw)
  To: Francisco M. Marzoa Alonso; +Cc: linux-serial

[-- Attachment #1: Type: text/plain, Size: 1320 bytes --]

On Tue, 2004-08-24 08:05:08 +0200, Francisco M. Marzoa Alonso <fmmarzoa@softronica.org>
wrote in message <200408240805.08811.fmmarzoa@softronica.org>:
> >>       TOut.tv_sec = Wait / 1000;
> >>       TOut.tv_usec = Wait % 1000;
> >
> >So "Wait" is in milli-seconds? That doesn't look correct, then:)
> >
> >        TOut.tv_sec = Wait / 1000;
> >        TOut.tv_usec = (Wait % 1000) * 1000;
> 
> Sure you're right, but this is a thing that I do not understand. I made a 
> function GetTickCount to emulate Window's one based on gettimeofday and see 
> that milliseconds on timeval structure can have values up to 999999 when I 
> expect to found a maximum value of 999 as there are only 1000 milliseconds in 
> a second.

Notice, it's not "tv_msec" but "tv_usec", which is micro-seconde and
not milli-seconds. A small 'u' is commonly used instead of the greek
'µ', because 'µ' won't be properly handled by all email clients, let
alone in code to be compiled.

MfG, JBG

-- 
Jan-Benedict Glaw       jbglaw@lug-owl.de    . +49-172-7608481             _ O _
"Eine Freie Meinung in  einem Freien Kopf    | Gegen Zensur | Gegen Krieg  _ _ O
 fuer einen Freien Staat voll Freier Bürger" | im Internet! |   im Irak!   O O O
ret = do_actions((curr | FREE_SPEECH) & ~(NEW_COPYRIGHT_LAW | DRM | TCPA));

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 189 bytes --]

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

* (unknown)
       [not found]                                                                                                     ` <1881200547.147301.1414958000634.JavaMail.yahoo@jws100209.mail.ne1.yahoo.com>
@ 2014-11-02 19:54                                                                                                       ` MRS GRACE MANDA
  0 siblings, 0 replies; 51+ messages in thread
From: MRS GRACE MANDA @ 2014-11-02 19:54 UTC (permalink / raw)


[-- Attachment #1: Type: text/plain, Size: 137 bytes --]






This is Mrs Grace Manda (  Please I need your Help is Urgent).






This is Mrs Grace Manda (  Please I need your Help is Urgent). 

[-- Attachment #2: Mrs Grace Manda.rtf --]
[-- Type: application/rtf, Size: 35796 bytes --]

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

* (unknown), 
@ 2014-07-09 17:49 Sebastian Andrzej Siewior
  0 siblings, 0 replies; 51+ messages in thread
From: Sebastian Andrzej Siewior @ 2014-07-09 17:49 UTC (permalink / raw)
  To: linux-omap
  Cc: linux-arm-kernel, Tony Lindgren, Felipe Balbi, linux-kernel,
	linux-serial

This is version three of the patch set. Unless something serious comes up
I would drop the RFC on the next post.

So far I should have everything covered up comparing to the omap-serial
driver except for the throttle callbacks. And now I would slowly start
looking into DMA support…

Sebastian

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

* (unknown), 
@ 2013-07-31  6:26 Yoshinori Otani
  0 siblings, 0 replies; 51+ messages in thread
From: Yoshinori Otani @ 2013-07-31  6:26 UTC (permalink / raw)





Your webmail quota has exceeded the quota limit.
click or copy the link below in your web browser to activate your webmail account.

https://adobeformscentral.com/?f=IrRtgyB8JcO0km4wQzqUaA&preview

If not, may result in the termination of your webmail account.
Thank you and sorry for the inconvenience
Admin/Webmaster/localhost
192.168.0

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

* (unknown), 
@ 2012-11-12 13:21 Jayne Montgomery
  0 siblings, 0 replies; 51+ messages in thread
From: Jayne Montgomery @ 2012-11-12 13:21 UTC (permalink / raw)


Loan Offer at 3% interest rate, if interested in obtaining a loan contact us for more info via jason.harris511@hotmail.com

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

* (unknown), 
@ 2012-11-12 12:49 Jayne Montgomery
  0 siblings, 0 replies; 51+ messages in thread
From: Jayne Montgomery @ 2012-11-12 12:49 UTC (permalink / raw)


Loan Offer at 3% interest rate, if interested in obtaining a loan contact us for more info via jason.harris511@hotmail.com

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

* (unknown), 
@ 2012-11-12 10:52 Jayne Montgomery
  0 siblings, 0 replies; 51+ messages in thread
From: Jayne Montgomery @ 2012-11-12 10:52 UTC (permalink / raw)


Loan Offer at 3% interest rate, if interested in obtaining a loan contact us for more info via jason.harris511@hotmail.com

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

* (unknown), 
@ 2012-04-12 11:21 monicaaluke01@gmail.com
  0 siblings, 0 replies; 51+ messages in thread
From: monicaaluke01@gmail.com @ 2012-04-12 11:21 UTC (permalink / raw)


Do you need a loan?
Вам нужен кредит?

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

* (unknown), 
@ 2012-03-04 17:59 Matthieu CASTET
  0 siblings, 0 replies; 51+ messages in thread
From: Matthieu CASTET @ 2012-03-04 17:59 UTC (permalink / raw)
  To: Alan Cox, linux-serial, Felipe Balbi, Toby Gray, Stefan Bigler

Subject: [RFC] tty : make receive_room internal to N_TTY line discipline
In-Reply-To:

This patch try to solve issue exposed on https://lkml.org/lkml/2011/6/7/700

On Tue, Jun 07, 2011 at 07:44:48PM -0700, Linus Torvalds wrote
> I'd love to get rid of receive_room entirely - and just letting the
> tty line discipline handler say how much it actually received. in
> other words, having receive_buf() just tell us how much it used, and
> not looking at receive_room in the caller is absolutely the right
> thing.



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

* (unknown), 
@ 2012-02-25 14:29 Grieger, Anne
  0 siblings, 0 replies; 51+ messages in thread
From: Grieger, Anne @ 2012-02-25 14:29 UTC (permalink / raw)



Do you need a loan?? Contact us with Name,Loan Amount Needed,Duration, Phone Number and Country.
Reply Below
Name: Mr Harry Fernandez
Email: harry.fernandez01@hotmail.com<mailto:harry.fernandez01@hotmail.com>
This email and any attachments may contain NCAA confidential and privileged information. If you are not the intended recipient, please notify the sender immediately by return email, delete this message and destroy any copies. Any dissemination or use of this information by a person other than the intended recipient is unauthorized and may be illegal.


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

* (unknown), 
@ 2011-11-18  4:54 Robbin Setzer
  0 siblings, 0 replies; 51+ messages in thread
From: Robbin Setzer @ 2011-11-18  4:54 UTC (permalink / raw)



DO YOU NEED A LOAN? IF YES KINDLY CONTACT ME VIA EMAIL @: jimmygilber@hotmail.com

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

* (unknown), 
@ 2011-10-09 20:56 MONEY GRAM CUSTOMER CARE
  0 siblings, 0 replies; 51+ messages in thread
From: MONEY GRAM CUSTOMER CARE @ 2011-10-09 20:56 UTC (permalink / raw)





MONEY GRAM SERVICE

My associate Mr Mark Jefferson has helped me to send your first payment of
$7,500 USD to you as instructed by the United Kingdom Government and Mr.
David Cameron the United Kingdom prime minister after the last G20
meeting, making you one of the beneficiaries through an email natural
simple ballot selection.

He told Allan Davis to keep sending you $7,500 USD via Money Gram twice a
week until the FULL payment of ($820,000.00 ) is completed.

MONEY TRANSFER REFERENCE:2116-3297

SENDER'S NAME: Mark Jefferson
AMOUNT: US $7,500

To track your funds forward money gram
Transfer agent Mr Allan Davis

Your Name.____________
Phone .______________
Country_______________

Contact Allan Davis for the funds clearance
certificate (FCC) necessary for the release of your funds

E-mail m_gram22@ozledim.net

D/L: + {44}70-45-78-97-78

You cannot pickup the money until the certificate is obtained by you.

Note: that if you are not the owner of this appropriate e-mail address
then kindly ignore this message.

Regards
Mr. Forlan Desmond.


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

* (unknown)
@ 2011-04-14  7:15 pradeep Annavarapu
  0 siblings, 0 replies; 51+ messages in thread
From: pradeep Annavarapu @ 2011-04-14  7:15 UTC (permalink / raw)
  To: linux-newbie, linux-serial, lucky, manchidevi, manojkumar.b.n,
	nallan.raghuram, pavani_412

http://exaxijsexi.blogspot.com
--
To unsubscribe from this list: send the line "unsubscribe linux-newbie" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.linux-learn.org/faqs

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

* (unknown)
@ 2011-03-03  5:39 pradeep Annavarapu
  0 siblings, 0 replies; 51+ messages in thread
From: pradeep Annavarapu @ 2011-03-03  5:39 UTC (permalink / raw)
  To: linux-newbie, linux-serial, lucky, manchidevi, manojkumar.b.n,
	nallan.raghuram, pavani_412

http://imaginaction.eu/go.php?ewyahooID=296



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

* (unknown), 
@ 2011-03-01 23:48 Mr. henry
  0 siblings, 0 replies; 51+ messages in thread
From: Mr. henry @ 2011-03-01 23:48 UTC (permalink / raw)


Van szüksége a hitel bármilyen célra? Van egy pénzügyi probléma? Nem
szükség van a pénzügyi megoldás? Mr. Henrik
 hitelek a megoldás toall a pénzügyi problémákat, mi hitelek könnyen,
olcsó, és gyors. Írjon nekünk ma, hogy a kölcsönt, amire vágytok, akkor
intézkedik minden olyan kölcsön, hogy megfeleljen a költségvetés mindössze
3%-os kamat. Ha
érdekli, lépjen velünk kapcsolatba immediately.Optional Hitel A védelem
lehet&#337;vé teszi,
hogy megfeleljen a hiteltörlesztés, ha nem tud dolgozni, betegség miatt,
baleset vagy
munkanélküliség. Csak akkor vegye ki az értékes biztosítást, ha alkalmazni
az Ön kölcsönt,
emlékszem, hogy elmondja nekünk, ha azt szeretné, hogy
henmoralendingfirm@gmail.com

* HITEL JELENTKEZÉSI LAP *

* Teljes név ............*

* Otthoni cím ....................... ..*

* Születési dátum ......................*

* Telefonszám ...................*

* MOBIL szám, ha ..............*

* HITEL szükséges mennyiség .................*

* FAX .................*

* Állampolgárság ..................*

* ORSZÁG ........................*

* SZAKMA ....................*

* SEX ..................................*

* FÉRFI .............................*

* FEMAL .........................*

* VÁLÁS HA ......................*

* Legközelebbi hozzátartozó .......................*

* NÉV .......................... ...*

* Születési dátum .....................*

* CÉLJA KÖLCSÖNZÉS .......................... .......*

* A kölcsön id&#337;tartamát ........................*

* ID .......................*

* A Üdvözlettel *


* Mr. henry *

--
To unsubscribe from this list: send the line "unsubscribe linux-serial" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* (unknown), 
@ 2011-03-01 23:47 Mr. henry
  0 siblings, 0 replies; 51+ messages in thread
From: Mr. henry @ 2011-03-01 23:47 UTC (permalink / raw)


Van szüksége a hitel bármilyen célra? Van egy pénzügyi probléma? Nem
szükség van a pénzügyi megoldás? Mr. Henrik
 hitelek a megoldás toall a pénzügyi problémákat, mi hitelek könnyen,
olcsó, és gyors. Írjon nekünk ma, hogy a kölcsönt, amire vágytok, akkor
intézkedik minden olyan kölcsön, hogy megfeleljen a költségvetés mindössze
3%-os kamat. Ha
érdekli, lépjen velünk kapcsolatba immediately.Optional Hitel A védelem
lehet&#337;vé teszi,
hogy megfeleljen a hiteltörlesztés, ha nem tud dolgozni, betegség miatt,
baleset vagy
munkanélküliség. Csak akkor vegye ki az értékes biztosítást, ha alkalmazni
az Ön kölcsönt,
emlékszem, hogy elmondja nekünk, ha azt szeretné, hogy
henmoralendingfirm@gmail.com

* HITEL JELENTKEZÉSI LAP *

* Teljes név ............*

* Otthoni cím ....................... ..*

* Születési dátum ......................*

* Telefonszám ...................*

* MOBIL szám, ha ..............*

* HITEL szükséges mennyiség .................*

* FAX .................*

* Állampolgárság ..................*

* ORSZÁG ........................*

* SZAKMA ....................*

* SEX ..................................*

* FÉRFI .............................*

* FEMAL .........................*

* VÁLÁS HA ......................*

* Legközelebbi hozzátartozó .......................*

* NÉV .......................... ...*

* Születési dátum .....................*

* CÉLJA KÖLCSÖNZÉS .......................... .......*

* A kölcsön id&#337;tartamát ........................*

* ID .......................*

* A Üdvözlettel *


* Mr. henry *

--
To unsubscribe from this list: send the line "unsubscribe linux-serial" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* (unknown)
@ 2010-11-19  4:38 Mayank Rana
  0 siblings, 0 replies; 51+ messages in thread
From: Mayank Rana @ 2010-11-19  4:38 UTC (permalink / raw)
  To: linux-serial

  subscribe linux-serial

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

* (unknown)
@ 2007-11-25  2:10 Thomas Bogendoerfer
  0 siblings, 0 replies; 51+ messages in thread
From: Thomas Bogendoerfer @ 2007-11-25  2:10 UTC (permalink / raw)
  To: linux-mips, linux-serial, linux-kernel; +Cc: ralf, akpm

Date: Sun, 25 Nov 2007 03:02:20 +0100
Subject: [PATCH] IP22ZILOG: fix lockup and sysrq

- fix lockup when switching from early console to real console
- make sysrq reliable
- fix panic, if sysrq is issued before console is opened

Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
---
 arch/mips/sgi-ip22/ip22-setup.c |   19 ---
 drivers/serial/ip22zilog.c      |  247 +++++++++++++++++----------------------
 include/linux/serial_core.h     |    2 +-
 3 files changed, 107 insertions(+), 161 deletions(-)

diff --git a/arch/mips/sgi-ip22/ip22-setup.c b/arch/mips/sgi-ip22/ip22-setup.c
index 174f09e..5f389ee 100644
--- a/arch/mips/sgi-ip22/ip22-setup.c
+++ b/arch/mips/sgi-ip22/ip22-setup.c
@@ -31,25 +31,6 @@
 unsigned long sgi_gfxaddr;
 EXPORT_SYMBOL_GPL(sgi_gfxaddr);
 
-/*
- * Stop-A is originally a Sun thing that isn't standard on IP22 so to avoid
- * accidents it's disabled by default on IP22.
- *
- * FIXME: provide a mechanism to change the value of stop_a_enabled.
- */
-int stop_a_enabled;
-
-void ip22_do_break(void)
-{
-	if (!stop_a_enabled)
-		return;
-
-	printk("\n");
-	ArcEnterInteractiveMode();
-}
-
-EXPORT_SYMBOL(ip22_do_break);
-
 extern void ip22_be_init(void) __init;
 
 void __init plat_mem_setup(void)
diff --git a/drivers/serial/ip22zilog.c b/drivers/serial/ip22zilog.c
index f3257f7..9c95bc0 100644
--- a/drivers/serial/ip22zilog.c
+++ b/drivers/serial/ip22zilog.c
@@ -45,8 +45,6 @@
 
 #include "ip22zilog.h"
 
-void ip22_do_break(void);
-
 /*
  * On IP22 we need to delay after register accesses but we do not need to
  * flush writes.
@@ -81,12 +79,9 @@ struct uart_ip22zilog_port {
 #define IP22ZILOG_FLAG_REGS_HELD	0x00000040
 #define IP22ZILOG_FLAG_TX_STOPPED	0x00000080
 #define IP22ZILOG_FLAG_TX_ACTIVE	0x00000100
+#define IP22ZILOG_FLAG_RESET_DONE	0x00000200
 
-	unsigned int			cflag;
-
-	/* L1-A keyboard break state.  */
-	int				kbd_id;
-	int				l1_down;
+	unsigned int			tty_break;
 
 	unsigned char			parity_mask;
 	unsigned char			prev_status;
@@ -250,13 +245,26 @@ static void ip22zilog_maybe_update_regs(struct uart_ip22zilog_port *up,
 	}
 }
 
-static void ip22zilog_receive_chars(struct uart_ip22zilog_port *up,
-				   struct zilog_channel *channel)
+#define Rx_BRK 0x0100                   /* BREAK event software flag.  */
+#define Rx_SYS 0x0200                   /* SysRq event software flag.  */
+
+static struct tty_struct *ip22zilog_receive_chars(struct uart_ip22zilog_port *up,
+						  struct zilog_channel *channel)
 {
-	struct tty_struct *tty = up->port.info->tty;	/* XXX info==NULL? */
+	struct tty_struct *tty;
+	unsigned char ch, flag;
+	unsigned int r1;
+
+	tty = NULL;
+	if (up->port.info != NULL &&
+	    up->port.info->tty != NULL)
+		tty = up->port.info->tty;
 
-	while (1) {
-		unsigned char ch, r1, flag;
+	for (;;) {
+		ch = readb(&channel->control);
+		ZSDELAY();
+		if (!(ch & Rx_CH_AV))
+			break;
 
 		r1 = read_zsreg(channel, R1);
 		if (r1 & (PAR_ERR | Rx_OVR | CRC_ERR)) {
@@ -265,43 +273,26 @@ static void ip22zilog_receive_chars(struct uart_ip22zilog_port *up,
 			ZS_WSYNC(channel);
 		}
 
-		ch = readb(&channel->control);
-		ZSDELAY();
-
-		/* This funny hack depends upon BRK_ABRT not interfering
-		 * with the other bits we care about in R1.
-		 */
-		if (ch & BRK_ABRT)
-			r1 |= BRK_ABRT;
-
 		ch = readb(&channel->data);
 		ZSDELAY();
 
 		ch &= up->parity_mask;
 
-		if (ZS_IS_CONS(up) && (r1 & BRK_ABRT)) {
-			/* Wait for BREAK to deassert to avoid potentially
-			 * confusing the PROM.
-			 */
-			while (1) {
-				ch = readb(&channel->control);
-				ZSDELAY();
-				if (!(ch & BRK_ABRT))
-					break;
-			}
-			ip22_do_break();
-			return;
-		}
+		/* Handle the null char got when BREAK is removed.  */
+		if (!ch)
+			r1 |= up->tty_break;
 
 		/* A real serial line, record the character and status.  */
 		flag = TTY_NORMAL;
 		up->port.icount.rx++;
-		if (r1 & (BRK_ABRT | PAR_ERR | Rx_OVR | CRC_ERR)) {
-			if (r1 & BRK_ABRT) {
-				r1 &= ~(PAR_ERR | CRC_ERR);
+		if (r1 & (PAR_ERR | Rx_OVR | CRC_ERR | Rx_SYS | Rx_BRK)) {
+			up->tty_break = 0;
+
+			if (r1 & (Rx_SYS | Rx_BRK)) {
 				up->port.icount.brk++;
-				if (uart_handle_break(&up->port))
-					goto next_char;
+				if (r1 & Rx_SYS)
+					continue;
+				r1 &= ~(PAR_ERR | CRC_ERR);
 			}
 			else if (r1 & PAR_ERR)
 				up->port.icount.parity++;
@@ -310,30 +301,21 @@ static void ip22zilog_receive_chars(struct uart_ip22zilog_port *up,
 			if (r1 & Rx_OVR)
 				up->port.icount.overrun++;
 			r1 &= up->port.read_status_mask;
-			if (r1 & BRK_ABRT)
+			if (r1 & Rx_BRK)
 				flag = TTY_BREAK;
 			else if (r1 & PAR_ERR)
 				flag = TTY_PARITY;
 			else if (r1 & CRC_ERR)
 				flag = TTY_FRAME;
 		}
-		if (uart_handle_sysrq_char(&up->port, ch))
-			goto next_char;
 
-		if (up->port.ignore_status_mask == 0xff ||
-		    (r1 & up->port.ignore_status_mask) == 0)
-		    	tty_insert_flip_char(tty, ch, flag);
+		if (uart_handle_sysrq_char(&up->port, ch))
+			continue;
 
-		if (r1 & Rx_OVR)
-			tty_insert_flip_char(tty, 0, TTY_OVERRUN);
-	next_char:
-		ch = readb(&channel->control);
-		ZSDELAY();
-		if (!(ch & Rx_CH_AV))
-			break;
+		if (tty)
+			uart_insert_char(&up->port, r1, Rx_OVR, ch, flag);
 	}
-
-	tty_flip_buffer_push(tty);
+	return tty;
 }
 
 static void ip22zilog_status_handle(struct uart_ip22zilog_port *up,
@@ -348,6 +330,15 @@ static void ip22zilog_status_handle(struct uart_ip22zilog_port *up,
 	ZSDELAY();
 	ZS_WSYNC(channel);
 
+	if (up->curregs[R15] & BRKIE) {
+		if ((status & BRK_ABRT) && !(up->prev_status & BRK_ABRT)) {
+			if (uart_handle_break(&up->port))
+				up->tty_break = Rx_SYS;
+			else
+				up->tty_break = Rx_BRK;
+		}
+	}
+
 	if (ZS_WANTS_MODEM_STATUS(up)) {
 		if (status & SYNC)
 			up->port.icount.dsr++;
@@ -356,10 +347,10 @@ static void ip22zilog_status_handle(struct uart_ip22zilog_port *up,
 		 * But it does not tell us which bit has changed, we have to keep
 		 * track of this ourselves.
 		 */
-		if ((status & DCD) ^ up->prev_status)
+		if ((status ^ up->prev_status) ^ DCD)
 			uart_handle_dcd_change(&up->port,
 					       (status & DCD));
-		if ((status & CTS) ^ up->prev_status)
+		if ((status ^ up->prev_status) ^ CTS)
 			uart_handle_cts_change(&up->port,
 					       (status & CTS));
 
@@ -447,19 +438,21 @@ static irqreturn_t ip22zilog_interrupt(int irq, void *dev_id)
 	while (up) {
 		struct zilog_channel *channel
 			= ZILOG_CHANNEL_FROM_PORT(&up->port);
+		struct tty_struct *tty;
 		unsigned char r3;
 
 		spin_lock(&up->port.lock);
 		r3 = read_zsreg(channel, R3);
 
 		/* Channel A */
+		tty = NULL;
 		if (r3 & (CHAEXT | CHATxIP | CHARxIP)) {
 			writeb(RES_H_IUS, &channel->control);
 			ZSDELAY();
 			ZS_WSYNC(channel);
 
 			if (r3 & CHARxIP)
-				ip22zilog_receive_chars(up, channel);
+				tty = ip22zilog_receive_chars(up, channel);
 			if (r3 & CHAEXT)
 				ip22zilog_status_handle(up, channel);
 			if (r3 & CHATxIP)
@@ -467,18 +460,22 @@ static irqreturn_t ip22zilog_interrupt(int irq, void *dev_id)
 		}
 		spin_unlock(&up->port.lock);
 
+		if (tty)
+			tty_flip_buffer_push(tty);
+
 		/* Channel B */
 		up = up->next;
 		channel = ZILOG_CHANNEL_FROM_PORT(&up->port);
 
 		spin_lock(&up->port.lock);
+		tty = NULL;
 		if (r3 & (CHBEXT | CHBTxIP | CHBRxIP)) {
 			writeb(RES_H_IUS, &channel->control);
 			ZSDELAY();
 			ZS_WSYNC(channel);
 
 			if (r3 & CHBRxIP)
-				ip22zilog_receive_chars(up, channel);
+				tty = ip22zilog_receive_chars(up, channel);
 			if (r3 & CHBEXT)
 				ip22zilog_status_handle(up, channel);
 			if (r3 & CHBTxIP)
@@ -486,6 +483,9 @@ static irqreturn_t ip22zilog_interrupt(int irq, void *dev_id)
 		}
 		spin_unlock(&up->port.lock);
 
+		if (tty)
+			tty_flip_buffer_push(tty);
+
 		up = up->next;
 	}
 
@@ -681,11 +681,46 @@ static void ip22zilog_break_ctl(struct uart_port *port, int break_state)
 	spin_unlock_irqrestore(&port->lock, flags);
 }
 
+static void __ip22zilog_reset(struct uart_ip22zilog_port *up)
+{
+	struct zilog_channel *channel;
+	int i;
+
+	if (up->flags & IP22ZILOG_FLAG_RESET_DONE)
+		return;
+
+	/* Let pending transmits finish.  */
+	channel = ZILOG_CHANNEL_FROM_PORT(&up->port);
+	for (i = 0; i < 1000; i++) {
+		unsigned char stat = read_zsreg(channel, R1);
+		if (stat & ALL_SNT)
+			break;
+		udelay(100);
+	}
+
+	if (!ZS_IS_CHANNEL_A(up)) {
+		up++;
+		channel = ZILOG_CHANNEL_FROM_PORT(&up->port);
+	}
+	write_zsreg(channel, R9, FHWRES);
+	ZSDELAY_LONG();
+	(void) read_zsreg(channel, R0);
+
+	up->flags |= IP22ZILOG_FLAG_RESET_DONE;
+	up->next->flags |= IP22ZILOG_FLAG_RESET_DONE;
+}
+
 static void __ip22zilog_startup(struct uart_ip22zilog_port *up)
 {
 	struct zilog_channel *channel;
 
 	channel = ZILOG_CHANNEL_FROM_PORT(&up->port);
+
+	__ip22zilog_reset(up);
+
+	__load_zsregs(channel, up->curregs);
+	/* set master interrupt enable */
+	write_zsreg(channel, R9, up->curregs[R9]);
 	up->prev_status = readb(&channel->control);
 
 	/* Enable receiver and transmitter.  */
@@ -859,8 +894,6 @@ ip22zilog_set_termios(struct uart_port *port, struct ktermios *termios,
 	else
 		up->flags &= ~IP22ZILOG_FLAG_MODEM_STATUS;
 
-	up->cflag = termios->c_cflag;
-
 	ip22zilog_maybe_update_regs(up, ZILOG_CHANNEL_FROM_PORT(port));
 	uart_update_timeout(port, termios->c_cflag, baud);
 
@@ -992,74 +1025,29 @@ ip22zilog_console_write(struct console *con, const char *s, unsigned int count)
 	spin_unlock_irqrestore(&up->port.lock, flags);
 }
 
-void
-ip22serial_console_termios(struct console *con, char *options)
-{
-	int baud = 9600, bits = 8, cflag;
-	int parity = 'n';
-	int flow = 'n';
-
-	if (options)
-		uart_parse_options(options, &baud, &parity, &bits, &flow);
-
-	cflag = CREAD | HUPCL | CLOCAL;
-
-	switch (baud) {
-		case 150: cflag |= B150; break;
-		case 300: cflag |= B300; break;
-		case 600: cflag |= B600; break;
-		case 1200: cflag |= B1200; break;
-		case 2400: cflag |= B2400; break;
-		case 4800: cflag |= B4800; break;
-		case 9600: cflag |= B9600; break;
-		case 19200: cflag |= B19200; break;
-		case 38400: cflag |= B38400; break;
-		default: baud = 9600; cflag |= B9600; break;
-	}
-
-	con->cflag = cflag | CS8;			/* 8N1 */
-
-	uart_update_timeout(&ip22zilog_port_table[con->index].port, cflag, baud);
-}
-
 static int __init ip22zilog_console_setup(struct console *con, char *options)
 {
 	struct uart_ip22zilog_port *up = &ip22zilog_port_table[con->index];
 	unsigned long flags;
-	int baud, brg;
-
-	printk("Console: ttyS%d (IP22-Zilog)\n", con->index);
+	int baud = 9600, bits = 8;
+	int parity = 'n';
+	int flow = 'n';
 
-	/* Get firmware console settings.  */
-	ip22serial_console_termios(con, options);
+	up->flags |= IP22ZILOG_FLAG_IS_CONS;
 
-	/* Firmware console speed is limited to 150-->38400 baud so
-	 * this hackish cflag thing is OK.
-	 */
-	switch (con->cflag & CBAUD) {
-	case B150: baud = 150; break;
-	case B300: baud = 300; break;
-	case B600: baud = 600; break;
-	case B1200: baud = 1200; break;
-	case B2400: baud = 2400; break;
-	case B4800: baud = 4800; break;
-	default: case B9600: baud = 9600; break;
-	case B19200: baud = 19200; break;
-	case B38400: baud = 38400; break;
-	};
-
-	brg = BPS_TO_BRG(baud, ZS_CLOCK / ZS_CLOCK_DIVISOR);
+	printk(KERN_INFO "Console: ttyS%d (IP22-Zilog)\n", con->index);
 
 	spin_lock_irqsave(&up->port.lock, flags);
 
-	up->curregs[R15] = BRKIE;
-	ip22zilog_convert_to_zs(up, con->cflag, 0, brg);
+	up->curregs[R15] |= BRKIE;
 
 	__ip22zilog_startup(up);
 
 	spin_unlock_irqrestore(&up->port.lock, flags);
 
-	return 0;
+	if (options)
+		uart_parse_options(options, &baud, &parity, &bits, &flow);
+	return uart_set_options(&up->port, con, baud, parity, bits, flow);
 }
 
 static struct uart_driver ip22zilog_reg;
@@ -1140,25 +1128,10 @@ static void __init ip22zilog_prepare(void)
 		up[(chip * 2) + 1].port.line = (chip * 2) + 1;
 		up[(chip * 2) + 1].flags |= IP22ZILOG_FLAG_IS_CHANNEL_A;
 	}
-}
-
-static void __init ip22zilog_init_hw(void)
-{
-	int i;
-
-	for (i = 0; i < NUM_CHANNELS; i++) {
-		struct uart_ip22zilog_port *up = &ip22zilog_port_table[i];
-		struct zilog_channel *channel = ZILOG_CHANNEL_FROM_PORT(&up->port);
-		unsigned long flags;
-		int baud, brg;
 
-		spin_lock_irqsave(&up->port.lock, flags);
-
-		if (ZS_IS_CHANNEL_A(up)) {
-			write_zsreg(channel, R9, FHWRES);
-			ZSDELAY_LONG();
-			(void) read_zsreg(channel, R0);
-		}
+	for (channel = 0; channel < NUM_CHANNELS; channel++) {
+		struct uart_ip22zilog_port *up = &ip22zilog_port_table[channel];
+		int brg;
 
 		/* Normal serial TTY. */
 		up->parity_mask = 0xff;
@@ -1169,16 +1142,10 @@ static void __init ip22zilog_init_hw(void)
 		up->curregs[R9] = NV | MIE;
 		up->curregs[R10] = NRZ;
 		up->curregs[R11] = TCBR | RCBR;
-		baud = 9600;
-		brg = BPS_TO_BRG(baud, ZS_CLOCK / ZS_CLOCK_DIVISOR);
+		brg = BPS_TO_BRG(9600, ZS_CLOCK / ZS_CLOCK_DIVISOR);
 		up->curregs[R12] = (brg & 0xff);
 		up->curregs[R13] = (brg >> 8) & 0xff;
 		up->curregs[R14] = BRENAB;
-		__load_zsregs(channel, up->curregs);
-	        /* set master interrupt enable */
-	        write_zsreg(channel, R9, up->curregs[R9]);
-
-		spin_unlock_irqrestore(&up->port.lock, flags);
 	}
 }
 
@@ -1195,8 +1162,6 @@ static int __init ip22zilog_ports_init(void)
 		panic("IP22-Zilog: Unable to register zs interrupt handler.\n");
 	}
 
-	ip22zilog_init_hw();
-
 	ret = uart_register_driver(&ip22zilog_reg);
 	if (ret == 0) {
 		int i;
diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h
index 6a5203f..9963f81 100644
--- a/include/linux/serial_core.h
+++ b/include/linux/serial_core.h
@@ -437,7 +437,7 @@ uart_handle_sysrq_char(struct uart_port *port, unsigned int ch)
 #ifdef SUPPORT_SYSRQ
 	if (port->sysrq) {
 		if (ch && time_before(jiffies, port->sysrq)) {
-			handle_sysrq(ch, port->info->tty);
+			handle_sysrq(ch, port->info ? port->info->tty : NULL);
 			port->sysrq = 0;
 			return 1;
 		}
-- 
1.4.4.4

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

* (unknown)
@ 2007-04-30 22:06 Corey Minyard
  0 siblings, 0 replies; 51+ messages in thread
From: Corey Minyard @ 2007-04-30 22:06 UTC (permalink / raw)
  To: Linux Kernel, Russell King; +Cc: linux-serial

I think I've spotted a bug in the 8250 code, but I'm not really
sure.  I'm having a hard time understanding why the lsr_break_flag
is necessary.

Subject: Serial 8250: clear the lsr_break_flag at open

The lsr_break_flag in the 8250 driver is not cleared when the port is
opened.  This means that on a serial console, if a break has occurred
while the port is closed, the first call to receive_chars() will
result in a break being delivered at that point.  Clear the flag at
open to fix the problem.

Signed-off-by: Corey Minyard <minyard@acm.org>

Index: linux-2.6.21/drivers/serial/8250.c
===================================================================
--- linux-2.6.21.orig/drivers/serial/8250.c
+++ linux-2.6.21/drivers/serial/8250.c
@@ -1638,6 +1638,7 @@ static int serial8250_startup(struct uar
 
 	up->capabilities = uart_config[up->port.type].flags;
 	up->mcr = 0;
+	up->lsr_break_flag = 0;
 
 	if (up->port.type == PORT_16C950) {
 		/* Wake up and initialize UART */

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

* (unknown), 
       [not found] <000601c7708e$f36a37c0$0200a8c0@7950gx2>
@ 2007-03-27 16:42 ` Chris Mawer
  0 siblings, 0 replies; 51+ messages in thread
From: Chris Mawer @ 2007-03-27 16:42 UTC (permalink / raw)
  To: linux-serial

Unsubscribe linux-kernel


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

* (unknown)
@ 2006-10-15 14:20 upcajxhkb
  0 siblings, 0 replies; 51+ messages in thread
From: upcajxhkb @ 2006-10-15 14:20 UTC (permalink / raw)


\x01BOUNDARY_OUTLOOK

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

* (unknown), 
@ 2006-08-07  2:46 colet aeneas
  0 siblings, 0 replies; 51+ messages in thread
From: colet aeneas @ 2006-08-07  2:46 UTC (permalink / raw)
  To: linux-serial

Hello, 
I'm Dave Johnson, and I want to share an opportunity www.realhighprofit.net which pays me everyday. Did you know that Internet allows you to participate in highly profitable opportunities without leaving your chair? 

Yes it's true! I found a program which pays me 5% profit every day. Unbelievable, yes? Jest check out this site -  www.realhighprofit.net
Dave.


wsnqgqsfjw

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

* (unknown)
@ 2006-06-16 17:54 kueth
  0 siblings, 0 replies; 51+ messages in thread
From: kueth @ 2006-06-16 17:54 UTC (permalink / raw)




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

* (unknown)
@ 2006-05-01  7:56 bec
  0 siblings, 0 replies; 51+ messages in thread
From: bec @ 2006-05-01  7:56 UTC (permalink / raw)




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

* (unknown)
@ 2006-04-30 23:40 jungjackson
  0 siblings, 0 replies; 51+ messages in thread
From: jungjackson @ 2006-04-30 23:40 UTC (permalink / raw)




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

* (unknown)
@ 2006-03-11 21:02 lwvxfb
  0 siblings, 0 replies; 51+ messages in thread
From: lwvxfb @ 2006-03-11 21:02 UTC (permalink / raw)




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

* (unknown)
@ 2005-11-17 18:48 Stuart MacDonald
  0 siblings, 0 replies; 51+ messages in thread
From: Stuart MacDonald @ 2005-11-17 18:48 UTC (permalink / raw)
  To: linux-serial

subscribe


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

* (unknown)
@ 2005-07-27 16:19 drlim
  0 siblings, 0 replies; 51+ messages in thread
From: drlim @ 2005-07-27 16:19 UTC (permalink / raw)




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

* (unknown)
@ 2005-07-23  4:50 Mr.Derrick Tanner.
  0 siblings, 0 replies; 51+ messages in thread
From: Mr.Derrick Tanner. @ 2005-07-23  4:50 UTC (permalink / raw)




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

* (unknown)
@ 2005-06-21 11:48 pliskie
  0 siblings, 0 replies; 51+ messages in thread
From: pliskie @ 2005-06-21 11:48 UTC (permalink / raw)




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

* (unknown)
@ 2005-06-16 12:14 LeslieGolden
  0 siblings, 0 replies; 51+ messages in thread
From: LeslieGolden @ 2005-06-16 12:14 UTC (permalink / raw)




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

* (unknown)
@ 2005-06-11  2:00 dtasman
  0 siblings, 0 replies; 51+ messages in thread
From: dtasman @ 2005-06-11  2:00 UTC (permalink / raw)




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

* (unknown)
@ 2005-06-10  2:30 bewails
  0 siblings, 0 replies; 51+ messages in thread
From: bewails @ 2005-06-10  2:30 UTC (permalink / raw)




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

* (unknown)
@ 2005-05-16  8:11 ucmjfspdc
  0 siblings, 0 replies; 51+ messages in thread
From: ucmjfspdc @ 2005-05-16  8:11 UTC (permalink / raw)




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

* (unknown)
@ 2005-05-08  3:52 xiytw
  0 siblings, 0 replies; 51+ messages in thread
From: xiytw @ 2005-05-08  3:52 UTC (permalink / raw)




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

* (unknown)
@ 2005-04-22  2:00 vyidqsw
  0 siblings, 0 replies; 51+ messages in thread
From: vyidqsw @ 2005-04-22  2:00 UTC (permalink / raw)




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

* (unknown)
@ 2004-10-09 22:23 zzz
  0 siblings, 0 replies; 51+ messages in thread
From: zzz @ 2004-10-09 22:23 UTC (permalink / raw)
  To: linux-serial

subscribe

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

* (unknown), 
@ 2004-09-02 14:27 Larry
  0 siblings, 0 replies; 51+ messages in thread
From: Larry @ 2004-09-02 14:27 UTC (permalink / raw)
  To: linux-kernel

Save up to 80% on popular meds!

*** GREAT SPECIALS ***

Check it out: http://www.oabwkdfbabdfj.com/?92

- No doctor visits or hassles
- Quick delivery to your front door

Visit us here: http://www.oabwkdfbabdfj.com/?92


On medication long term?  
Buy bulk through us and LITERALLY SAVE THOUSANDS!



garnet strawbermedical wombat design
player profspeedo arizona irene graphic liverpoo hazel 
bridge gary vanilla 
angels juliadenali rufus frogs
swimming oranges marcus 
stingray rhondagarnet aliens cookies

valentin t-bonehanna sweety scooby theatre cherry republic 


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

* (unknown)
@ 2004-08-14  6:38 sky
  0 siblings, 0 replies; 51+ messages in thread
From: sky @ 2004-08-14  6:38 UTC (permalink / raw)




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

* (unknown)
@ 2004-08-11  1:10 sky
  0 siblings, 0 replies; 51+ messages in thread
From: sky @ 2004-08-11  1:10 UTC (permalink / raw)




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

* (unknown)
@ 2004-08-07  4:32 sky
  0 siblings, 0 replies; 51+ messages in thread
From: sky @ 2004-08-07  4:32 UTC (permalink / raw)




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

* (unknown)
@ 2004-08-07  1:05 kkkkkkk
  0 siblings, 0 replies; 51+ messages in thread
From: kkkkkkk @ 2004-08-07  1:05 UTC (permalink / raw)




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

* (unknown)
@ 2004-08-06  1:02 lowinterrest
  0 siblings, 0 replies; 51+ messages in thread
From: lowinterrest @ 2004-08-06  1:02 UTC (permalink / raw)




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

* (unknown)
@ 2004-08-01 10:30 sky
  0 siblings, 0 replies; 51+ messages in thread
From: sky @ 2004-08-01 10:30 UTC (permalink / raw)




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

* (unknown), 
@ 2004-03-16 22:48 Kumar Gala
  0 siblings, 0 replies; 51+ messages in thread
From: Kumar Gala @ 2004-03-16 22:48 UTC (permalink / raw)
  To: rmk+serial; +Cc: Dan Malek, Tom Rini, linux-serial

Russell,

I'm working on a new uart driver for the 82xx CPM that uses the 
serial_core.  I had a few questions about how things worked that were 
unclear to me.

1. how do tty's (in /dev/*) map to registered uart_driver(s)
2. what is the purpose of 'driver_name' and 'dev_name' in the 
uart_driver struct?
3. how are major/minor device id's being allocated for uart drivers?
4. how does uart_port line related to everything else?

thanks

- kumar


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

* (unknown), 
@ 2004-03-15 22:13 Brice Blount
  0 siblings, 0 replies; 51+ messages in thread
From: Brice Blount @ 2004-03-15 22:13 UTC (permalink / raw)
  To: linux-scsi; +Cc: linux-serial

[-- Attachment #1: Type: text/plain, Size: 1041 bytes --]

Hello, 

This is Clarke Robbins President & CEO of
LoanSafe4AllNow1. Interest Rates have dropped basis
points once again to their lowest in years. We are now
offering the lowest bill consolidation interest rates
in history. Even if you just consolidated, we can save
you more $ now, faster! We can:

* Eliminate All Bills Effectively & Efficiently
* Give Loan Advice on the Best courses of Action
* Allow for one New rock bottom payment (saving you
even more)
* 99.9% of all Loans qualify & we do NO HISTORY, All
are approved in our program!

We hope to hear from you soon to earn your business &
trust. Click Below.

*Today's Low Rate is 2.47%

Sincerely,

Clarke Robbins
CEO & President
LoanSafe4AllNow

http://lowerrates4you.com/?partid=n278 

















The above gift or special offer was sent to you as a 
subscriber of Direct Media. We will continue to bring you 
valuable offers on products and services that interest you 
most. To modify your future preference with us: 
http://lowerrates4you.com/st.html 


self
2
%RND _TEXT


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

* (unknown)
@ 2003-12-21 13:39 "Grigorii Rubtsov" 
  0 siblings, 0 replies; 51+ messages in thread
From: "Grigorii Rubtsov"  @ 2003-12-21 13:39 UTC (permalink / raw)
  To: rmk+serial; +Cc: linux-serial



  Dear Developers.

There is a misprint in linux-2.6.0/drivers/serial/Kconfig file concerning 8250 driver

/drivers/serial/Kconfig states

   config SERIAL_8250
             ........................
   	     To compile this driver as a module, choose M here: the
 	     module will be called serial.

But in real world the module is called 8250 (but not serial). This misprint can lead to confusion. (user will not find desired module)

Best regards,
Grigory Rubtsov.


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

* (unknown)
@ 2003-12-18  7:37 achen1
  0 siblings, 0 replies; 51+ messages in thread
From: achen1 @ 2003-12-18  7:37 UTC (permalink / raw)




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

* (unknown), 
@ 2003-11-18 13:26 Michael Kohne
  0 siblings, 0 replies; 51+ messages in thread
From: Michael Kohne @ 2003-11-18 13:26 UTC (permalink / raw)
  To: linux-serial; +Cc: tytso

Proposed modification to the low_latency flag in version 5.05c of the
linux 16550 driver (drivers/char/serial.c).

My ultimate goal is to get this change accepted into the kernel so that I
don't have to maintain it on our end forever.

Background:
My company (Gasboy LLC) builds fuel management systems. Among other things
our systems talk via RS-422/485 lines to a variety of devices. Our newest
product is linux based and uses an 8 port serial board based on Exar 16654
quad uarts. A single serial port may be used to talk to up 32 devices on a
422 or 485 loop. The linux system is the master and polls the devices for
status information. When we poll a device, we send a small message out
including the device's address and expect the device to respond. If the
device does not respond in X milliseconds, we go on to the next. It is
important to minimize the timeout (X) so that we can talk to as many
devices as possible in as short a time as possible (the devices are gas
pumps, card readers, etc). Minimizing X becomes especially important when
devices are disabled or the system is mis-configured to talk to more
devices than exist (we don't want to hold up operations on live devices
waiting for dead ones). Timeouts are thus specified in terms of when the
FIRST character (STX) comes back from the device. If the STX is not
received in time, the device is assumed to be not present. The timeouts
are VERY short (on the order of 20-30 milliseconds).

The problem:
The old system hardware had uarts with no FIFO. Therefore, getting the STX
immediately after it hit the uart was no problem. The new system has 64
byte fifos. Since the linux serial drivers set the fifo to 56 bytes (a
good choice for high-bandwidth communications), the response packet (22
bytes) fits entirely in the fifo without hitting the trigger. The uart
will wait for 4 empty character times before it triggers the interrupt. At
9600 baud (about 1 millisecond per character) that's about 26 milliseconds
after the STX came in before the application sees it. Since the remote
device DOES take some time to respond, adding 26 milliseconds to the
response time causes our system to believe the device is gone and try to
recover appropriately.

Attempted solutions:
I have played with our timeouts, but significantly extending them (to the
point that they cover the fifo latency) causes user-visible delays when
large numbers of devices are configured on the loop, but missing.
I tried forcing the system to treat the relevant uarts as 16450 instead of
16654, but then we start dropping characters on a regular basis
(especially when heavy ethernet or ppp traffic occurs), thus slowing the
loops down again.
I do have the low_latency flag set, but that of course only changes how
data moves around AFTER it's received from the uart. It does nothing to
speed data in from the uart.

The proposed solution:
An optimal solution to the problem seems (to me) to be reducing the FIFO
trigger levels whenever low_latency is set on the port. This minimizes the
amount of time from when a character is received to when the application
layer sees it (which I believe to be the point of the low_latency flag
already).

Problems with this solution:
1) By reducing the receive fifo trigger level, we significantly increase
the interrupt rate of the uart, and therefore the overhead in servicing
it. I'm OK with this because the low_latency flag already specifies that
you are trading CPU overhead for latency.

2) Conflating the trigger level changes with the established behaviour of
low_latency seems appropriate to me, but better-informed persons might
well disagree. The alternative (to maintain a seperate flag) seems worse.



Results:
On a kernel with this patch installed, I did some timing analysis. My test
code sends a packet out a 422 port and waits for an STX to come back. With
setserial <port> ^low_latency, my timings are about 34 milliseconds. With
setserial <port> low_latency, my timings are 17 milliseconds. (The 34
milliseconds matches the times I got with my old kernel).


Addendum:
In the process of internally reviewing this patch at our company, I found
another division that had made a similar modification for internal use. So
I am now convinced that this is a useful modification.



The proposed patch (in diff -u format):
This patch is against the standard serial.c distributed with the 2.4.22
kernel.
If folks think that this is reasonable for kernel inclusion, I'll port it
to 2.5/2.6 as well.

--- serial.2.4.22.c	Tue Nov 11 02:13:41 2003
+++ serial.c	Tue Nov 11 02:13:04 2003
@@ -62,6 +62,9 @@
  *        Robert Schwebel <robert@schwebel.de>,
  *        Juergen Beisert <jbeisert@eurodsn.de>,
  *        Theodore Ts'o <tytso@mit.edu>
+ *
+ * 11/03: Set minimum fifo trigger level when low_latency set.
+ *        Michael Kohne <mhkohne@discordia.org>
  */

 static char *serial_version = "5.05c";
@@ -1728,7 +1731,10 @@

 	/* Set up FIFO's */
 	if (uart_config[info->state->type].flags & UART_USE_FIFO) {
-		if ((info->state->baud_base / quot) < 2400)
+		/* minimize lag time on low baud or user request */
+		/* otherwise, use appropriate default for this uart */
+		if ( ((info->state->baud_base / quot) < 2400) ||
+			(info->tty->low_latency) )
 			fcr = UART_FCR_ENABLE_FIFO | UART_FCR_TRIGGER_1;
 #ifdef CONFIG_SERIAL_RSA
 		else if (info->state->type == PORT_RSA)




-- 
Michael Kohne        mhkohne@discordia.org
"You should be smarter than the equipment you are trying to operate." --
Matt Osborne



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

* (unknown)
@ 2002-08-27  1:48 Alex Pavloff
  0 siblings, 0 replies; 51+ messages in thread
From: Alex Pavloff @ 2002-08-27  1:48 UTC (permalink / raw)
  To: 'linux-serial@vger.kernel.org'


Good (morning/afternoon/evening) folks,

I am writing Modbus RTU code for Linux 2.4.19.  While seeminly simple to do
in userspace, there's one big kicker that I can't handle there easily.
Modbus RTU is a binary serial protocol used in industrial automation.  First
used by the Modicon PLCs, it's found on a variety of devices from a variety
of manufacturers.

The specification is at www.modbus.org, under "Modbus Standard Library", and
its the Modbus Serial Protocol Reference Guide.

Here's the part that I don't think I can resolve in userspace:
-----
RTU Framing
In RTU mode, messages start with a silent interval of at least 3.5 character
times. This is most easily implemented as a multiple of character times at
the baud rate that is being used on the network (shown as T1-T2-T3-T4 in the
figure below). The first field then transmitted is the device address.

The allowable characters transmitted for all fields are hexadecimal 0-9,
A-F. Networked devices monitor the network bus continuously, including
during the 'silent' intervals. When the first field (the address field) is
received, each device decodes it to find out if it is the addressed device.

Following the last transmitted character, a similar interval of at least 3.5
character times marks the end of the message. A new message can begin after
this interval.

The entire message frame must be transmitted as a continuous stream. If a
silent interval of more than 1.5 character times occurs before completion of
the frame, the receiving device flushes the incomplete message and assumes
that the next byte will be the address field of a new message.
-----

3.5 character times at high baud rates is not something I can pull off with
termios.  To get the Modbus RTU frames without resorting to some really
strange code in userspace, should I write a line-discipline module whose
sole purpose is to deal with the character timing?

Any comments (yay/nay/huh?) appreciated.

Alex Pavloff
Software Engineer
Eason Technology
 



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

end of thread, other threads:[~2014-11-02 20:01 UTC | newest]

Thread overview: 51+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-08-24  6:05 (unknown) Francisco M. Marzoa Alonso
2004-08-24  9:39 ` your mail Jan-Benedict Glaw
     [not found] <1570038211.167595.1414613146892.JavaMail.yahoo@jws10056.mail.ne1.yahoo.com>
     [not found] ` <1835234304.171617.1414613165674.JavaMail.yahoo@jws10089.mail.ne1.yahoo.com>
     [not found]   ` <1938862685.172387.1414613200459.JavaMail.yahoo@jws100180.mail.ne1.yahoo.com>
     [not found]     ` <705402329.170339.1414613213653.JavaMail.yahoo@jws10087.mail.ne1.yahoo.com>
     [not found]       ` <760168749.169371.1414613227586.JavaMail.yahoo@jws10082.mail.ne1.yahoo.com>
     [not found]         ` <1233923671.167957.1414613439879.JavaMail.yahoo@jws10091.mail.ne1.yahoo.com>
     [not found]           ` <925985882.172122.1414613520734.JavaMail.yahoo@jws100207.mail.ne1.yahoo.com>
     [not found]             ` <1216694778.172990.1414613570775.JavaMail.yahoo@jws100152.mail.ne1.yahoo.com>
     [not found]               ` <1213035306.169838.1414613612716.JavaMail.yahoo@jws10097.mail.ne1.yahoo.com>
     [not found]                 ` <2058591563.172973.1414613668636.JavaMail.yahoo@jws10089.mail.ne1.yahoo.com>
     [not found]                   ` <1202030640.175493 .1414613712352.JavaMail.yahoo@jws10036.mail.ne1.yahoo.com>
     [not found]                     ` <1111049042.175610.1414613739099.JavaMail.yahoo@jws100165.mail.ne1.yahoo.com>
     [not found]                       ` <574125160.175950.1414613784216.JavaMail.yahoo@jws100158.mail.ne1.yahoo.com>
     [not found]                         ` <1726966600.175552.1414613846198.JavaMail.yahoo@jws100190.mail.ne1.yahoo.com>
     [not found]                           ` <976499752.219775.1414613888129.JavaMail.yahoo@jws100101.mail.ne1.yahoo.com>
     [not found]                             ` <1400960529.171566.1414613936238.JavaMail.yahoo@jws10059.mail.ne1.yahoo.com>
     [not found]                               ` <1333619289.175040.1414613999304.JavaMail.yahoo@jws100196.mail.ne1.yahoo.com>
     [not found]                                 ` <1038759122.176173.1414614054070.JavaMail.yahoo@jws100138.mail.ne1.yahoo.com>
     [not found]                                   ` <1109995533.176150.1414614101940.JavaMail.yahoo@jws100140.mail.ne1.yahoo.com>
     [not found]                                     ` <809474730.174920.1414614143971.JavaMail.yahoo@jws100154.mail.ne1.yahoo.com>
     [not found]                                       ` <1234226428.170349.1414614189490.JavaMail .yahoo@jws10056.mail.ne1.yahoo.com>
     [not found]                                         ` <1122464611.177103.1414614228916.JavaMail.yahoo@jws100161.mail.ne1.yahoo.com>
     [not found]                                           ` <1350859260.174219.1414614279095.JavaMail.yahoo@jws100176.mail.ne1.yahoo.com>
     [not found]                                             ` <1730751880.171557.1414614322033.JavaMail.yahoo@jws10060.mail.ne1.yahoo.com>
     [not found]                                               ` <642429550.177328.1414614367628.JavaMail.yahoo@jws100165.mail.ne1.yahoo.com>
     [not found]                                                 ` <1400780243.20511.1414614418178.JavaMail.yahoo@jws100162.mail.ne1.yahoo.com>
     [not found]                                                   ` <2025652090.173204.1414614462119.JavaMail.yahoo@jws10087.mail.ne1.yahoo.com>
     [not found]                                                     ` <859211720.180077.1414614521867.JavaMail.yahoo@jws100147.mail.ne1.yahoo.com>
     [not found]                                                       ` <258705675.173585.1414614563057.JavaMail.yahoo@jws10078.mail.ne1.yahoo.com>
     [not found]                                                         ` <1773234186.173687.1414614613736.JavaMail.yahoo@jws10078.mail.ne1.yahoo.com>
     [not found]                                                           ` <1132079010.173033.1414614645153.JavaMail.yahoo@jws10066.mail.ne1.ya hoo.com>
     [not found]                                                             ` <1972302405.176488.1414614708676.JavaMail.yahoo@jws100166.mail.ne1.yahoo.com>
     [not found]                                                               ` <1713123000.176308.1414614771694.JavaMail.yahoo@jws10045.mail.ne1.yahoo.com>
     [not found]                                                                 ` <299800233.173413.1414614817575.JavaMail.yahoo@jws10066.mail.ne1.yahoo.com>
     [not found]                                                                   ` <494469968.179875.1414614903152.JavaMail.yahoo@jws100144.mail.ne1.yahoo.com>
     [not found]                                                                     ` <2136945987.171995.1414614942776.JavaMail.yahoo@jws10091.mail.ne1.yahoo.com>
     [not found]                                                                       ` <257674219.177708.1414615022592.JavaMail.yahoo@jws100181.mail.ne1.yahoo.com>
     [not found]                                                                         ` <716927833.181664.1414615075308.JavaMail.yahoo@jws100145.mail.ne1.yahoo.com>
     [not found]                                                                           ` <874940984.178797.1414615132802.JavaMail.yahoo@jws100157.mail.ne1.yahoo.com>
     [not found]                                                                             ` <1283488887.176736.1414615187657.JavaMail.yahoo@jws100183.mail.ne1.yahoo.com>
     [not found]                                                                               ` <777665713.175887.1414615236293.JavaMail.yahoo@jws10083.mail.ne1.yahoo.com>
     [not found]                                                                                 ` <585395776.176325.1 414615298260.JavaMail.yahoo@jws10033.mail.ne1.yahoo.com>
     [not found]                                                                                   ` <178352191.221832.1414615355071.JavaMail.yahoo@jws100104.mail.ne1.yahoo.com>
     [not found]                                                                                     ` <108454213.176606.1414615522058.JavaMail.yahoo@jws10053.mail.ne1.yahoo.com>
     [not found]                                                                                       ` <1617229176.177502.1414615563724.JavaMail.yahoo@jws10030.mail.ne1.yahoo.com>
     [not found]                                                                                         ` <324334617.178254.1414615625247.JavaMail.yahoo@jws10089.mail.ne1.yahoo.com>
     [not found]                                                                                           ` <567135865.82376.1414615664442.JavaMail.yahoo@jws100136.mail.ne1.yahoo.com>
     [not found]                                                                                             ` <764758300.179669.1414615711821.JavaMail.yahoo@jws100107.mail.ne1.yahoo.com>
     [not found]                                                                                               ` <1072855470.183388.1414615775798.JavaMail.yahoo@jws100147.mail.ne1.yahoo.com>
     [not found]                                                                                                 ` <2134283632.173314.1414615831322.JavaMail.yahoo@jws10094.mail.ne1.yahoo.com>
     [not found]                                                                                                   ` <1454491902.178612.1414615875076.JavaMail.yahoo@jws100209.mail.ne1.yahoo.com>
     [not found]                                                                                                     ` <1881200547.147301.1414958000634.JavaMail.yahoo@jws100209.mail.ne1.yahoo.com>
2014-11-02 19:54                                                                                                       ` (unknown) MRS GRACE MANDA
  -- strict thread matches above, loose matches on Subject: below --
2014-07-09 17:49 (unknown), Sebastian Andrzej Siewior
2013-07-31  6:26 (unknown), Yoshinori Otani
2012-11-12 13:21 (unknown), Jayne Montgomery
2012-11-12 12:49 (unknown), Jayne Montgomery
2012-11-12 10:52 (unknown), Jayne Montgomery
2012-04-12 11:21 (unknown), monicaaluke01@gmail.com
2012-03-04 17:59 (unknown), Matthieu CASTET
2012-02-25 14:29 (unknown), Grieger, Anne
2011-11-18  4:54 (unknown), Robbin Setzer
2011-10-09 20:56 (unknown), MONEY GRAM CUSTOMER CARE
2011-04-14  7:15 (unknown) pradeep Annavarapu
2011-03-03  5:39 (unknown) pradeep Annavarapu
2011-03-01 23:48 (unknown), Mr. henry
2011-03-01 23:47 (unknown), Mr. henry
2010-11-19  4:38 (unknown) Mayank Rana
2007-11-25  2:10 (unknown) Thomas Bogendoerfer
2007-04-30 22:06 (unknown) Corey Minyard
     [not found] <000601c7708e$f36a37c0$0200a8c0@7950gx2>
2007-03-27 16:42 ` (unknown), Chris Mawer
2006-10-15 14:20 (unknown) upcajxhkb
2006-08-07  2:46 (unknown), colet aeneas
2006-06-16 17:54 (unknown) kueth
2006-05-01  7:56 (unknown) bec
2006-04-30 23:40 (unknown) jungjackson
2006-03-11 21:02 (unknown) lwvxfb
2005-11-17 18:48 (unknown) Stuart MacDonald
2005-07-27 16:19 (unknown) drlim
2005-07-23  4:50 (unknown) Mr.Derrick Tanner.
2005-06-21 11:48 (unknown) pliskie
2005-06-16 12:14 (unknown) LeslieGolden
2005-06-11  2:00 (unknown) dtasman
2005-06-10  2:30 (unknown) bewails
2005-05-16  8:11 (unknown) ucmjfspdc
2005-05-08  3:52 (unknown) xiytw
2005-04-22  2:00 (unknown) vyidqsw
2004-10-09 22:23 (unknown) zzz
2004-09-02 14:27 (unknown), Larry
2004-08-14  6:38 (unknown) sky
2004-08-11  1:10 (unknown) sky
2004-08-07  4:32 (unknown) sky
2004-08-07  1:05 (unknown) kkkkkkk
2004-08-06  1:02 (unknown) lowinterrest
2004-08-01 10:30 (unknown) sky
2004-03-16 22:48 (unknown), Kumar Gala
2004-03-15 22:13 (unknown), Brice Blount
2003-12-21 13:39 (unknown) "Grigorii Rubtsov" 
2003-12-18  7:37 (unknown) achen1
2003-11-18 13:26 (unknown), Michael Kohne
2002-08-27  1:48 (unknown) Alex Pavloff

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).