* [PATCH 1/2] serial : add configuration c-flag for 9-bit mode
@ 2009-11-18 16:12 Joseph Pinkasfeld
0 siblings, 0 replies; only message in thread
From: Joseph Pinkasfeld @ 2009-11-18 16:12 UTC (permalink / raw)
To: akpm; +Cc: linux-serial, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 1 bytes --]
[-- Attachment #2: 0001-serial-:-add-configuration-c-flag-for-9-bit-mode.patch --]
[-- Type: text/x-patch, Size: 11544 bytes --]
From 39b2be434e9f13ff9078ed705e7ff94e57877fd6 Mon Sep 17 00:00:00 2001
From: pinkasfeld joseph <jpinkasfeld@aldebaran-robotics.com>
Date: Wed, 18 Nov 2009 16:26:09 +0100
Subject: [PATCH 1/2] serial : add configuration c-flag for 9-bit mode
add 9-bit bit mode configuration registers for 16C950
tested on OXPCIe954
Signed-off-by: pinkasfeld joseph <jpinkasfeld@aldebaran-robotics.com>
---
arch/arm/include/asm/termbits.h | 1 +
arch/avr32/include/asm/termbits.h | 1 +
arch/cris/include/asm/termbits.h | 1 +
arch/frv/include/asm/termbits.h | 1 +
arch/h8300/include/asm/termbits.h | 1 +
arch/ia64/include/asm/termbits.h | 1 +
arch/m32r/include/asm/termbits.h | 1 +
arch/m68k/include/asm/termbits.h | 1 +
arch/mips/include/asm/termbits.h | 1 +
arch/mn10300/include/asm/termbits.h | 1 +
arch/parisc/include/asm/termbits.h | 1 +
arch/powerpc/include/asm/termbits.h | 1 +
arch/s390/include/asm/termbits.h | 1 +
arch/sparc/include/asm/termbits.h | 1 +
arch/xtensa/include/asm/termbits.h | 1 +
drivers/serial/serial_core.c | 2 ++
include/asm-generic/termbits.h | 1 +
include/linux/serial_reg.h | 9 ++++++++-
18 files changed, 26 insertions(+), 1 deletions(-)
diff --git a/arch/arm/include/asm/termbits.h b/arch/arm/include/asm/termbits.h
index f784d11..4949923 100644
--- a/arch/arm/include/asm/termbits.h
+++ b/arch/arm/include/asm/termbits.h
@@ -155,6 +155,7 @@ struct ktermios {
#define B3000000 0010015
#define B3500000 0010016
#define B4000000 0010017
+#define CNBENB 001000000000 /* 9 bit enable */
#define CIBAUD 002003600000 /* input baud rate */
#define CMSPAR 010000000000 /* mark or space (stick) parity */
#define CRTSCTS 020000000000 /* flow control */
diff --git a/arch/avr32/include/asm/termbits.h b/arch/avr32/include/asm/termbits.h
index db2daab..25130b2 100644
--- a/arch/avr32/include/asm/termbits.h
+++ b/arch/avr32/include/asm/termbits.h
@@ -155,6 +155,7 @@ struct ktermios {
#define B3000000 0010015
#define B3500000 0010016
#define B4000000 0010017
+#define CNBENB 001000000000 /* 9 bit enable */
#define CIBAUD 002003600000 /* input baud rate (not used) */
#define CMSPAR 010000000000 /* mark or space (stick) parity */
#define CRTSCTS 020000000000 /* flow control */
diff --git a/arch/cris/include/asm/termbits.h b/arch/cris/include/asm/termbits.h
index 66e1a74..f124766 100644
--- a/arch/cris/include/asm/termbits.h
+++ b/arch/cris/include/asm/termbits.h
@@ -195,6 +195,7 @@ struct ktermios {
* shifted left IBSHIFT bits.
*/
#define IBSHIFT 16
+#define CNBENB 001000000000 /* 9 bit enable */
#define CMSPAR 010000000000 /* mark or space (stick) parity - PARODD=space*/
#define CRTSCTS 020000000000 /* flow control */
diff --git a/arch/frv/include/asm/termbits.h b/arch/frv/include/asm/termbits.h
index 5568492..f339b5d 100644
--- a/arch/frv/include/asm/termbits.h
+++ b/arch/frv/include/asm/termbits.h
@@ -157,6 +157,7 @@ struct ktermios {
#define B3000000 0010015
#define B3500000 0010016
#define B4000000 0010017
+#define CNBENB 001000000000 /* 9 bit enable */
#define CIBAUD 002003600000 /* Input baud rate */
#define CTVB 004000000000 /* VisioBraille Terminal flow control */
#define CMSPAR 010000000000 /* mark or space (stick) parity */
diff --git a/arch/h8300/include/asm/termbits.h b/arch/h8300/include/asm/termbits.h
index 31eca81..74f3f5a 100644
--- a/arch/h8300/include/asm/termbits.h
+++ b/arch/h8300/include/asm/termbits.h
@@ -157,6 +157,7 @@ struct ktermios {
#define B3000000 0010015
#define B3500000 0010016
#define B4000000 0010017
+#define CNBENB 001000000000 /* 9 bit enable */
#define CIBAUD 002003600000 /* input baud rate */
#define CMSPAR 010000000000 /* mark or space (stick) parity */
#define CRTSCTS 020000000000 /* flow control */
diff --git a/arch/ia64/include/asm/termbits.h b/arch/ia64/include/asm/termbits.h
index 9f162e0..df31b70 100644
--- a/arch/ia64/include/asm/termbits.h
+++ b/arch/ia64/include/asm/termbits.h
@@ -165,6 +165,7 @@ struct ktermios {
#define B3000000 0010015
#define B3500000 0010016
#define B4000000 0010017
+#define CNBENB 001000000000 /* 9 bit enable */
#define CIBAUD 002003600000 /* input baud rate */
#define CMSPAR 010000000000 /* mark or space (stick) parity */
#define CRTSCTS 020000000000 /* flow control */
diff --git a/arch/m32r/include/asm/termbits.h b/arch/m32r/include/asm/termbits.h
index bc10400..46621de 100644
--- a/arch/m32r/include/asm/termbits.h
+++ b/arch/m32r/include/asm/termbits.h
@@ -156,6 +156,7 @@ struct ktermios {
#define B3000000 0010015
#define B3500000 0010016
#define B4000000 0010017
+#define CNBENB 001000000000 /* 9 bit enable */
#define CIBAUD 002003600000 /** input baud rate */
#define CTVB 004000000000 /* VisioBraille Terminal flow control */
#define CMSPAR 010000000000 /* mark or space (stick) parity */
diff --git a/arch/m68k/include/asm/termbits.h b/arch/m68k/include/asm/termbits.h
index 8c14170..3bd24b3 100644
--- a/arch/m68k/include/asm/termbits.h
+++ b/arch/m68k/include/asm/termbits.h
@@ -157,6 +157,7 @@ struct ktermios {
#define B3000000 0010015
#define B3500000 0010016
#define B4000000 0010017
+#define CNBENB 001000000000 /* 9 bit enable */
#define CIBAUD 002003600000 /* input baud rate */
#define CMSPAR 010000000000 /* mark or space (stick) parity */
#define CRTSCTS 020000000000 /* flow control */
diff --git a/arch/mips/include/asm/termbits.h b/arch/mips/include/asm/termbits.h
index c83c684..6fdfdff 100644
--- a/arch/mips/include/asm/termbits.h
+++ b/arch/mips/include/asm/termbits.h
@@ -180,6 +180,7 @@ struct ktermios {
#define B3000000 0010015
#define B3500000 0010016
#define B4000000 0010017
+#define CNBENB 001000000000 /* 9 bit enable */
#define CIBAUD 002003600000 /* input baud rate */
#define CMSPAR 010000000000 /* mark or space (stick) parity */
#define CRTSCTS 020000000000 /* flow control */
diff --git a/arch/mn10300/include/asm/termbits.h b/arch/mn10300/include/asm/termbits.h
index eb2b0dc..263e5f6 100644
--- a/arch/mn10300/include/asm/termbits.h
+++ b/arch/mn10300/include/asm/termbits.h
@@ -157,6 +157,7 @@ struct ktermios {
#define B3000000 0010015
#define B3500000 0010016
#define B4000000 0010017
+#define CNBENB 001000000000 /* 9 bit enable */
#define CIBAUD 002003600000 /* input baud rate (not used) */
#define CTVB 004000000000 /* VisioBraille Terminal flow control */
#define CMSPAR 010000000000 /* mark or space (stick) parity */
diff --git a/arch/parisc/include/asm/termbits.h b/arch/parisc/include/asm/termbits.h
index d8bbc73..4758c3c 100644
--- a/arch/parisc/include/asm/termbits.h
+++ b/arch/parisc/include/asm/termbits.h
@@ -157,6 +157,7 @@ struct ktermios {
#define B3000000 0010015
#define B3500000 0010016
#define B4000000 0010017
+#define CNBENB 001000000000 /* 9 bit enable */
#define CIBAUD 002003600000 /* input baud rate */
#define CMSPAR 010000000000 /* mark or space (stick) parity */
#define CRTSCTS 020000000000 /* flow control */
diff --git a/arch/powerpc/include/asm/termbits.h b/arch/powerpc/include/asm/termbits.h
index 6698188..c2085b0 100644
--- a/arch/powerpc/include/asm/termbits.h
+++ b/arch/powerpc/include/asm/termbits.h
@@ -170,6 +170,7 @@ struct ktermios {
#define HUPCL 00040000
#define CLOCAL 00100000
+#define CNBENB 001000000000 /* 9 bit enable */
#define CMSPAR 010000000000 /* mark or space (stick) parity */
#define CRTSCTS 020000000000 /* flow control */
diff --git a/arch/s390/include/asm/termbits.h b/arch/s390/include/asm/termbits.h
index 5873185..e581b0e 100644
--- a/arch/s390/include/asm/termbits.h
+++ b/arch/s390/include/asm/termbits.h
@@ -164,6 +164,7 @@ struct ktermios {
#define B3000000 0010015
#define B3500000 0010016
#define B4000000 0010017
+#define CNBENB 001000000000 /* 9 bit enable */
#define CIBAUD 002003600000 /* input baud rate */
#define CMSPAR 010000000000 /* mark or space (stick) parity */
#define CRTSCTS 020000000000 /* flow control */
diff --git a/arch/sparc/include/asm/termbits.h b/arch/sparc/include/asm/termbits.h
index d72dfed..f29419b 100644
--- a/arch/sparc/include/asm/termbits.h
+++ b/arch/sparc/include/asm/termbits.h
@@ -202,6 +202,7 @@ struct ktermios {
#define B3000000 0x00001011
#define B3500000 0x00001012
#define B4000000 0x00001013 */
+#define CNBENB 0x8000000 /* 9 bit enable */
#define CIBAUD 0x100f0000 /* input baud rate (not used) */
#define CMSPAR 0x40000000 /* mark or space (stick) parity */
#define CRTSCTS 0x80000000 /* flow control */
diff --git a/arch/xtensa/include/asm/termbits.h b/arch/xtensa/include/asm/termbits.h
index 85aa6a3..b9878d5 100644
--- a/arch/xtensa/include/asm/termbits.h
+++ b/arch/xtensa/include/asm/termbits.h
@@ -173,6 +173,7 @@ struct ktermios {
#define B3000000 0010015
#define B3500000 0010016
#define B4000000 0010017
+#define CNBENB 001000000000 /* 9 bit enable */
#define CIBAUD 002003600000 /* input baud rate */
#define CMSPAR 010000000000 /* mark or space (stick) parity */
#define CRTSCTS 020000000000 /* flow control */
diff --git a/drivers/serial/serial_core.c b/drivers/serial/serial_core.c
index dcc7244..f84973c 100644
--- a/drivers/serial/serial_core.c
+++ b/drivers/serial/serial_core.c
@@ -294,6 +294,8 @@ uart_update_timeout(struct uart_port *port, unsigned int cflag,
break; /* CS8 */
}
+ if (cflag & CNBENB)
+ bits = 11;
if (cflag & CSTOPB)
bits++;
if (cflag & PARENB)
diff --git a/include/asm-generic/termbits.h b/include/asm-generic/termbits.h
index 1c9773d..af26163 100644
--- a/include/asm-generic/termbits.h
+++ b/include/asm-generic/termbits.h
@@ -156,6 +156,7 @@ struct ktermios {
#define B3000000 0010015
#define B3500000 0010016
#define B4000000 0010017
+#define CNBENB 001000000000 /* 9 bit enable */
#define CIBAUD 002003600000 /* input baud rate */
#define CMSPAR 010000000000 /* mark or space (stick) parity */
#define CRTSCTS 020000000000 /* flow control */
diff --git a/include/linux/serial_reg.h b/include/linux/serial_reg.h
index 850db2e..b715d5d 100644
--- a/include/linux/serial_reg.h
+++ b/include/linux/serial_reg.h
@@ -116,9 +116,11 @@
#define UART_LSR_BI 0x10 /* Break interrupt indicator */
#define UART_LSR_FE 0x08 /* Frame error indicator */
#define UART_LSR_PE 0x04 /* Parity error indicator */
+#define UART_LSR_9TH_BIT 0x04 /* 9th bit received in 9bit mode */
#define UART_LSR_OE 0x02 /* Overrun error indicator */
#define UART_LSR_DR 0x01 /* Receiver data ready */
#define UART_LSR_BRK_ERROR_BITS 0x1E /* BI, FE, PE, OE bits */
+#define UART_LSR_NBM_BRK_ERROR_BITS 0x1A /* BI,FE,OE bits in 9bit mode */
#define UART_MSR 6 /* In: Modem Status Register */
#define UART_MSR_DCD 0x80 /* Data Carrier Detect */
@@ -259,7 +261,12 @@
#define UART_ACR_ICRRD 0x40 /* ICR Read enable */
#define UART_ACR_ASREN 0x80 /* Additional status enable */
-
+#define UART_NMR_9BENB 0x01 /* 9-bit mode enable */
+#define UART_NMR_INTEN 0x02 /* Receiver interrupt for address character */
+#define UART_NMR_B9SP1 0x04 /* Bit 9 of special character 1 */
+#define UART_NMR_B9SP2 0x08 /* Bit 9 of special character 2 */
+#define UART_NMR_B9SP3 0x10 /* Bit 9 of special character 3 */
+#define UART_NMR_B9SP4 0x20 /* Bit 9 of special character 4 */
/*
* These definitions are for the RSA-DV II/S card, from
--
1.6.5.2
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2009-11-18 16:12 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-11-18 16:12 [PATCH 1/2] serial : add configuration c-flag for 9-bit mode Joseph Pinkasfeld
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).