Commit 7f02ab3c authored by Linus Torvalds's avatar Linus Torvalds

Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty-2.6

* git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty-2.6: (25 commits)
  serial: Tidy REMOTE_DEBUG
  serial: isicomm: handle running out of slots
  serial: bfin_sport_uart: Use resource size to fix off-by-one error
  tty: fix obsolete comment on tty_insert_flip_string_fixed_flag
  serial: Add driver for the Altera UART
  serial: Add driver for the Altera JTAG UART
  serial: timbuart: make sure last byte is sent when port is closed
  serial: two branches the same in timbuart_set_mctrl()
  serial: uartlite: move from byte accesses to word accesses
  tty: n_gsm: depends on NET
  tty: n_gsm line discipline
  serial: TTY: new ldiscs for staging
  serial: bfin_sport_uart: drop redundant cpu depends
  serial: bfin_sport_uart: drop the experimental markings
  serial: bfin_sport_uart: pull in bfin_sport.h for SPORT defines
  serial: bfin_sport_uart: only enable SPORT TX if data is to be sent
  serial: bfin_sport_uart: drop useless status masks
  serial: bfin_sport_uart: zero sport_uart_port if allocated dynamically
  serial: bfin_sport_uart: protect changes to uart_port
  serial: bfin_sport_uart: add support for CTS/RTS via GPIOs
  ...
parents d6fb1db0 0dbb5671
...@@ -276,11 +276,19 @@ config N_HDLC ...@@ -276,11 +276,19 @@ config N_HDLC
Allows synchronous HDLC communications with tty device drivers that Allows synchronous HDLC communications with tty device drivers that
support synchronous HDLC such as the Microgate SyncLink adapter. support synchronous HDLC such as the Microgate SyncLink adapter.
This driver can only be built as a module ( = code which can be This driver can be built as a module ( = code which can be
inserted in and removed from the running kernel whenever you want). inserted in and removed from the running kernel whenever you want).
The module will be called n_hdlc. If you want to do that, say M The module will be called n_hdlc. If you want to do that, say M
here. here.
config N_GSM
tristate "GSM MUX line discipline support (EXPERIMENTAL)"
depends on EXPERIMENTAL
depends on NET
help
This line discipline provides support for the GSM MUX protocol and
presents the mux as a set of 61 individual tty devices.
config RISCOM8 config RISCOM8
tristate "SDL RISCom/8 card support" tristate "SDL RISCom/8 card support"
depends on SERIAL_NONSTANDARD depends on SERIAL_NONSTANDARD
......
...@@ -40,6 +40,7 @@ obj-$(CONFIG_SYNCLINK) += synclink.o ...@@ -40,6 +40,7 @@ obj-$(CONFIG_SYNCLINK) += synclink.o
obj-$(CONFIG_SYNCLINKMP) += synclinkmp.o obj-$(CONFIG_SYNCLINKMP) += synclinkmp.o
obj-$(CONFIG_SYNCLINK_GT) += synclink_gt.o obj-$(CONFIG_SYNCLINK_GT) += synclink_gt.o
obj-$(CONFIG_N_HDLC) += n_hdlc.o obj-$(CONFIG_N_HDLC) += n_hdlc.o
obj-$(CONFIG_N_GSM) += n_gsm.o
obj-$(CONFIG_AMIGA_BUILTIN_SERIAL) += amiserial.o obj-$(CONFIG_AMIGA_BUILTIN_SERIAL) += amiserial.o
obj-$(CONFIG_SX) += sx.o generic_serial.o obj-$(CONFIG_SX) += sx.o generic_serial.o
obj-$(CONFIG_RIO) += rio/ generic_serial.o obj-$(CONFIG_RIO) += rio/ generic_serial.o
......
...@@ -1573,11 +1573,16 @@ static int __devinit isicom_probe(struct pci_dev *pdev, ...@@ -1573,11 +1573,16 @@ static int __devinit isicom_probe(struct pci_dev *pdev,
dev_info(&pdev->dev, "ISI PCI Card(Device ID 0x%x)\n", ent->device); dev_info(&pdev->dev, "ISI PCI Card(Device ID 0x%x)\n", ent->device);
/* allot the first empty slot in the array */ /* allot the first empty slot in the array */
for (index = 0; index < BOARD_COUNT; index++) for (index = 0; index < BOARD_COUNT; index++) {
if (isi_card[index].base == 0) { if (isi_card[index].base == 0) {
board = &isi_card[index]; board = &isi_card[index];
break; break;
} }
}
if (index == BOARD_COUNT) {
retval = -ENODEV;
goto err_disable;
}
board->index = index; board->index = index;
board->base = pci_resource_start(pdev, 3); board->base = pci_resource_start(pdev, 3);
...@@ -1624,6 +1629,7 @@ static int __devinit isicom_probe(struct pci_dev *pdev, ...@@ -1624,6 +1629,7 @@ static int __devinit isicom_probe(struct pci_dev *pdev,
errdec: errdec:
board->base = 0; board->base = 0;
card_count--; card_count--;
err_disable:
pci_disable_device(pdev); pci_disable_device(pdev);
err: err:
return retval; return retval;
......
This diff is collapsed.
...@@ -176,23 +176,6 @@ static void config_setup(struct cyclades_port *); ...@@ -176,23 +176,6 @@ static void config_setup(struct cyclades_port *);
static void show_status(int); static void show_status(int);
#endif #endif
#ifdef CONFIG_REMOTE_DEBUG
static void debug_setup(void);
void queueDebugChar(int c);
int getDebugChar(void);
#define DEBUG_PORT 1
#define DEBUG_LEN 256
typedef struct {
int in;
int out;
unsigned char buf[DEBUG_LEN];
} debugq;
debugq debugiq;
#endif
/* /*
* I have my own version of udelay(), as it is needed when initialising * I have my own version of udelay(), as it is needed when initialising
* the chip, before the delay loop has been calibrated. Should probably * the chip, before the delay loop has been calibrated. Should probably
...@@ -515,11 +498,6 @@ static irqreturn_t cd2401_tx_interrupt(int irq, void *dev_id) ...@@ -515,11 +498,6 @@ static irqreturn_t cd2401_tx_interrupt(int irq, void *dev_id)
/* determine the channel and change to that context */ /* determine the channel and change to that context */
channel = (u_short) (base_addr[CyLICR] >> 2); channel = (u_short) (base_addr[CyLICR] >> 2);
#ifdef CONFIG_REMOTE_DEBUG
if (channel == DEBUG_PORT) {
panic("TxInt on debug port!!!");
}
#endif
/* validate the port number (as configured and open) */ /* validate the port number (as configured and open) */
if ((channel < 0) || (NR_PORTS <= channel)) { if ((channel < 0) || (NR_PORTS <= channel)) {
base_addr[CyIER] &= ~(CyTxMpty | CyTxRdy); base_addr[CyIER] &= ~(CyTxMpty | CyTxRdy);
...@@ -634,14 +612,6 @@ static irqreturn_t cd2401_rx_interrupt(int irq, void *dev_id) ...@@ -634,14 +612,6 @@ static irqreturn_t cd2401_rx_interrupt(int irq, void *dev_id)
info->last_active = jiffies; info->last_active = jiffies;
save_cnt = char_count = base_addr[CyRFOC]; save_cnt = char_count = base_addr[CyRFOC];
#ifdef CONFIG_REMOTE_DEBUG
if (channel == DEBUG_PORT) {
while (char_count--) {
data = base_addr[CyRDR];
queueDebugChar(data);
}
} else
#endif
/* if there is nowhere to put the data, discard it */ /* if there is nowhere to put the data, discard it */
if (info->tty == 0) { if (info->tty == 0) {
while (char_count--) { while (char_count--) {
...@@ -2195,9 +2165,7 @@ static int __init serial167_init(void) ...@@ -2195,9 +2165,7 @@ static int __init serial167_init(void)
port_num++; port_num++;
info++; info++;
} }
#ifdef CONFIG_REMOTE_DEBUG
debug_setup();
#endif
ret = request_irq(MVME167_IRQ_SER_ERR, cd2401_rxerr_interrupt, 0, ret = request_irq(MVME167_IRQ_SER_ERR, cd2401_rxerr_interrupt, 0,
"cd2401_errors", cd2401_rxerr_interrupt); "cd2401_errors", cd2401_rxerr_interrupt);
if (ret) { if (ret) {
...@@ -2518,193 +2486,4 @@ static int __init serial167_console_init(void) ...@@ -2518,193 +2486,4 @@ static int __init serial167_console_init(void)
console_initcall(serial167_console_init); console_initcall(serial167_console_init);
#ifdef CONFIG_REMOTE_DEBUG
void putDebugChar(int c)
{
volatile unsigned char *base_addr = (u_char *) BASE_ADDR;
unsigned long flags;
volatile u_char sink;
u_char ier;
int port;
local_irq_save(flags);
/* Ensure transmitter is enabled! */
port = DEBUG_PORT;
base_addr[CyCAR] = (u_char) port;
while (base_addr[CyCCR])
;
base_addr[CyCCR] = CyENB_XMTR;
ier = base_addr[CyIER];
base_addr[CyIER] = CyTxMpty;
while (1) {
if (pcc2chip[PccSCCTICR] & 0x20) {
/* We have a Tx int. Acknowledge it */
sink = pcc2chip[PccTPIACKR];
if ((base_addr[CyLICR] >> 2) == port) {
base_addr[CyTDR] = c;
base_addr[CyTEOIR] = 0;
break;
} else
base_addr[CyTEOIR] = CyNOTRANS;
}
}
base_addr[CyIER] = ier;
local_irq_restore(flags);
}
int getDebugChar()
{
volatile unsigned char *base_addr = (u_char *) BASE_ADDR;
unsigned long flags;
volatile u_char sink;
u_char ier;
int port;
int i, c;
i = debugiq.out;
if (i != debugiq.in) {
c = debugiq.buf[i];
if (++i == DEBUG_LEN)
i = 0;
debugiq.out = i;
return c;
}
/* OK, nothing in queue, wait in poll loop */
local_irq_save(flags);
/* Ensure receiver is enabled! */
port = DEBUG_PORT;
base_addr[CyCAR] = (u_char) port;
#if 0
while (base_addr[CyCCR])
;
base_addr[CyCCR] = CyENB_RCVR;
#endif
ier = base_addr[CyIER];
base_addr[CyIER] = CyRxData;
while (1) {
if (pcc2chip[PccSCCRICR] & 0x20) {
/* We have a Rx int. Acknowledge it */
sink = pcc2chip[PccRPIACKR];
if ((base_addr[CyLICR] >> 2) == port) {
int cnt = base_addr[CyRFOC];
while (cnt-- > 0) {
c = base_addr[CyRDR];
if (c == 0)
printk
("!! debug char is null (cnt=%d) !!",
cnt);
else
queueDebugChar(c);
}
base_addr[CyREOIR] = 0;
i = debugiq.out;
if (i == debugiq.in)
panic("Debug input queue empty!");
c = debugiq.buf[i];
if (++i == DEBUG_LEN)
i = 0;
debugiq.out = i;
break;
} else
base_addr[CyREOIR] = CyNOTRANS;
}
}
base_addr[CyIER] = ier;
local_irq_restore(flags);
return (c);
}
void queueDebugChar(int c)
{
int i;
i = debugiq.in;
debugiq.buf[i] = c;
if (++i == DEBUG_LEN)
i = 0;
if (i != debugiq.out)
debugiq.in = i;
}
static void debug_setup()
{
unsigned long flags;
volatile unsigned char *base_addr = (u_char *) BASE_ADDR;
int i, cflag;
cflag = B19200;
local_irq_save(flags);
for (i = 0; i < 4; i++) {
base_addr[CyCAR] = i;
base_addr[CyLICR] = i << 2;
}
debugiq.in = debugiq.out = 0;
base_addr[CyCAR] = DEBUG_PORT;
/* baud rate */
i = cflag & CBAUD;
base_addr[CyIER] = 0;
base_addr[CyCMR] = CyASYNC;
base_addr[CyLICR] = DEBUG_PORT << 2;
base_addr[CyLIVR] = 0x5c;
/* tx and rx baud rate */
base_addr[CyTCOR] = baud_co[i];
base_addr[CyTBPR] = baud_bpr[i];
base_addr[CyRCOR] = baud_co[i] >> 5;
base_addr[CyRBPR] = baud_bpr[i];
/* set line characteristics according configuration */
base_addr[CySCHR1] = 0;
base_addr[CySCHR2] = 0;
base_addr[CySCRL] = 0;
base_addr[CySCRH] = 0;
base_addr[CyCOR1] = Cy_8_BITS | CyPARITY_NONE;
base_addr[CyCOR2] = 0;
base_addr[CyCOR3] = Cy_1_STOP;
base_addr[CyCOR4] = baud_cor4[i];
base_addr[CyCOR5] = 0;
base_addr[CyCOR6] = 0;
base_addr[CyCOR7] = 0;
write_cy_cmd(base_addr, CyINIT_CHAN);
write_cy_cmd(base_addr, CyENB_RCVR);
base_addr[CyCAR] = DEBUG_PORT; /* !!! Is this needed? */
base_addr[CyRTPRL] = 2;
base_addr[CyRTPRH] = 0;
base_addr[CyMSVR1] = CyRTS;
base_addr[CyMSVR2] = CyDTR;
base_addr[CyIER] = CyRxData;
local_irq_restore(flags);
} /* debug_setup */
#endif
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
...@@ -238,7 +238,7 @@ EXPORT_SYMBOL_GPL(tty_buffer_request_room); ...@@ -238,7 +238,7 @@ EXPORT_SYMBOL_GPL(tty_buffer_request_room);
* @size: size * @size: size
* *
* Queue a series of bytes to the tty buffering. All the characters * Queue a series of bytes to the tty buffering. All the characters
* passed are marked as without error. Returns the number added. * passed are marked with the supplied flag. Returns the number added.
* *
* Locking: Called functions may take tty->buf.lock * Locking: Called functions may take tty->buf.lock
*/ */
......
...@@ -1423,8 +1423,8 @@ config SERIAL_SC26XX_CONSOLE ...@@ -1423,8 +1423,8 @@ config SERIAL_SC26XX_CONSOLE
Support for Console on SC2681/SC2692 serial ports. Support for Console on SC2681/SC2692 serial ports.
config SERIAL_BFIN_SPORT config SERIAL_BFIN_SPORT
tristate "Blackfin SPORT emulate UART (EXPERIMENTAL)" tristate "Blackfin SPORT emulate UART"
depends on BLACKFIN && EXPERIMENTAL depends on BLACKFIN
select SERIAL_CORE select SERIAL_CORE
help help
Enable SPORT emulate UART on Blackfin series. Enable SPORT emulate UART on Blackfin series.
...@@ -1439,28 +1439,52 @@ config SERIAL_BFIN_SPORT_CONSOLE ...@@ -1439,28 +1439,52 @@ config SERIAL_BFIN_SPORT_CONSOLE
config SERIAL_BFIN_SPORT0_UART config SERIAL_BFIN_SPORT0_UART
bool "Enable UART over SPORT0" bool "Enable UART over SPORT0"
depends on SERIAL_BFIN_SPORT && !(BF542 || BF542M || BF544 || BF544M) depends on SERIAL_BFIN_SPORT && !(BF542 || BF544)
help help
Enable UART over SPORT0 Enable UART over SPORT0
config SERIAL_BFIN_SPORT0_UART_CTSRTS
bool "Enable UART over SPORT0 hardware flow control"
depends on SERIAL_BFIN_SPORT0_UART
help
Enable hardware flow control in the driver.
config SERIAL_BFIN_SPORT1_UART config SERIAL_BFIN_SPORT1_UART
bool "Enable UART over SPORT1" bool "Enable UART over SPORT1"
depends on SERIAL_BFIN_SPORT depends on SERIAL_BFIN_SPORT
help help
Enable UART over SPORT1 Enable UART over SPORT1
config SERIAL_BFIN_SPORT1_UART_CTSRTS
bool "Enable UART over SPORT1 hardware flow control"
depends on SERIAL_BFIN_SPORT1_UART
help
Enable hardware flow control in the driver.
config SERIAL_BFIN_SPORT2_UART config SERIAL_BFIN_SPORT2_UART
bool "Enable UART over SPORT2" bool "Enable UART over SPORT2"
depends on SERIAL_BFIN_SPORT && (BF54x || BF538 || BF539) depends on SERIAL_BFIN_SPORT && (BF54x || BF538 || BF539)
help help
Enable UART over SPORT2 Enable UART over SPORT2
config SERIAL_BFIN_SPORT2_UART_CTSRTS
bool "Enable UART over SPORT2 hardware flow control"
depends on SERIAL_BFIN_SPORT2_UART
help
Enable hardware flow control in the driver.
config SERIAL_BFIN_SPORT3_UART config SERIAL_BFIN_SPORT3_UART
bool "Enable UART over SPORT3" bool "Enable UART over SPORT3"
depends on SERIAL_BFIN_SPORT && (BF54x || BF538 || BF539) depends on SERIAL_BFIN_SPORT && (BF54x || BF538 || BF539)
help help
Enable UART over SPORT3 Enable UART over SPORT3
config SERIAL_BFIN_SPORT3_UART_CTSRTS
bool "Enable UART over SPORT3 hardware flow control"
depends on SERIAL_BFIN_SPORT3_UART
help
Enable hardware flow control in the driver.
config SERIAL_TIMBERDALE config SERIAL_TIMBERDALE
tristate "Support for timberdale UART" tristate "Support for timberdale UART"
select SERIAL_CORE select SERIAL_CORE
...@@ -1499,4 +1523,56 @@ config SERIAL_GRLIB_GAISLER_APBUART_CONSOLE ...@@ -1499,4 +1523,56 @@ config SERIAL_GRLIB_GAISLER_APBUART_CONSOLE
help help
Support for running a console on the GRLIB APBUART Support for running a console on the GRLIB APBUART
config SERIAL_ALTERA_JTAGUART
tristate "Altera JTAG UART support"
select SERIAL_CORE
help
This driver supports the Altera JTAG UART port.
config SERIAL_ALTERA_JTAGUART_CONSOLE
bool "Altera JTAG UART console support"
depends on SERIAL_ALTERA_JTAGUART=y
select SERIAL_CORE_CONSOLE
help
Enable a Altera JTAG UART port to be the system console.
config SERIAL_ALTERA_JTAGUART_CONSOLE_BYPASS
bool "Bypass output when no connection"
depends on SERIAL_ALTERA_JTAGUART_CONSOLE
select SERIAL_CORE_CONSOLE
help
Bypass console output and keep going even if there is no
JTAG terminal connection with the host.
config SERIAL_ALTERA_UART
tristate "Altera UART support"
select SERIAL_CORE
help
This driver supports the Altera softcore UART port.
config SERIAL_ALTERA_UART_MAXPORTS
int "Maximum number of Altera UART ports"
depends on SERIAL_ALTERA_UART
default 4
help
This setting lets you define the maximum number of the Altera
UART ports. The usual default varies from board to board, and
this setting is a way of catering for that.
config SERIAL_ALTERA_UART_BAUDRATE
int "Default baudrate for Altera UART ports"
depends on SERIAL_ALTERA_UART
default 115200
help
This setting lets you define what the default baudrate is for the
Altera UART ports. The usual default varies from board to board,
and this setting is a way of catering for that.
config SERIAL_ALTERA_UART_CONSOLE
bool "Altera UART console support"
depends on SERIAL_ALTERA_UART=y
select SERIAL_CORE_CONSOLE
help
Enable a Altera UART port to be the system console.
endmenu endmenu
...@@ -82,3 +82,5 @@ obj-$(CONFIG_KGDB_SERIAL_CONSOLE) += kgdboc.o ...@@ -82,3 +82,5 @@ obj-$(CONFIG_KGDB_SERIAL_CONSOLE) += kgdboc.o
obj-$(CONFIG_SERIAL_QE) += ucc_uart.o obj-$(CONFIG_SERIAL_QE) += ucc_uart.o
obj-$(CONFIG_SERIAL_TIMBERDALE) += timbuart.o obj-$(CONFIG_SERIAL_TIMBERDALE) += timbuart.o
obj-$(CONFIG_SERIAL_GRLIB_GAISLER_APBUART) += apbuart.o obj-$(CONFIG_SERIAL_GRLIB_GAISLER_APBUART) += apbuart.o
obj-$(CONFIG_SERIAL_ALTERA_JTAGUART) += altera_jtaguart.o
obj-$(CONFIG_SERIAL_ALTERA_UART) += altera_uart.o
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -37,7 +37,21 @@ ...@@ -37,7 +37,21 @@
#define SPORT_GET_TFSDIV(sport) bfin_read16(((sport)->port.membase + OFFSET_TFSDIV)) #define SPORT_GET_TFSDIV(sport) bfin_read16(((sport)->port.membase + OFFSET_TFSDIV))
#define SPORT_GET_TX(sport) bfin_read16(((sport)->port.membase + OFFSET_TX)) #define SPORT_GET_TX(sport) bfin_read16(((sport)->port.membase + OFFSET_TX))
#define SPORT_GET_RX(sport) bfin_read16(((sport)->port.membase + OFFSET_RX)) #define SPORT_GET_RX(sport) bfin_read16(((sport)->port.membase + OFFSET_RX))
#define SPORT_GET_RX32(sport) bfin_read32(((sport)->port.membase + OFFSET_RX)) /*
* If another interrupt fires while doing a 32-bit read from RX FIFO,
* a fake RX underflow error will be generated. So disable interrupts
* to prevent interruption while reading the FIFO.
*/
#define SPORT_GET_RX32(sport) \
({ \
unsigned int __ret; \
if (ANOMALY_05000473) \
local_irq_disable(); \
__ret = bfin_read32((sport)->port.membase + OFFSET_RX); \
if (ANOMALY_05000473) \
local_irq_enable(); \
__ret; \
})
#define SPORT_GET_RCR1(sport) bfin_read16(((sport)->port.membase + OFFSET_RCR1)) #define SPORT_GET_RCR1(sport) bfin_read16(((sport)->port.membase + OFFSET_RCR1))
#define SPORT_GET_RCR2(sport) bfin_read16(((sport)->port.membase + OFFSET_RCR2)) #define SPORT_GET_RCR2(sport) bfin_read16(((sport)->port.membase + OFFSET_RCR2))
#define SPORT_GET_RCLKDIV(sport) bfin_read16(((sport)->port.membase + OFFSET_RCLKDIV)) #define SPORT_GET_RCLKDIV(sport) bfin_read16(((sport)->port.membase + OFFSET_RCLKDIV))
...@@ -58,4 +72,15 @@ ...@@ -58,4 +72,15 @@
#define SPORT_TX_FIFO_SIZE 8 #define SPORT_TX_FIFO_SIZE 8
#define SPORT_UART_GET_CTS(x) gpio_get_value(x->cts_pin)
#define SPORT_UART_DISABLE_RTS(x) gpio_set_value(x->rts_pin, 1)
#define SPORT_UART_ENABLE_RTS(x) gpio_set_value(x->rts_pin, 0)
#if defined(CONFIG_SERIAL_BFIN_SPORT0_UART_CTSRTS) \
|| defined(CONFIG_SERIAL_BFIN_SPORT1_UART_CTSRTS) \
|| defined(CONFIG_SERIAL_BFIN_SPORT2_UART_CTSRTS) \
|| defined(CONFIG_SERIAL_BFIN_SPORT3_UART_CTSRTS)
# define CONFIG_SERIAL_BFIN_SPORT_CTSRTS
#endif
#endif /* _BFIN_SPORT_UART_H */ #endif /* _BFIN_SPORT_UART_H */
...@@ -68,12 +68,22 @@ static void timbuart_start_tx(struct uart_port *port) ...@@ -68,12 +68,22 @@ static void timbuart_start_tx(struct uart_port *port)
tasklet_schedule(&uart->tasklet); tasklet_schedule(&uart->tasklet);
} }
static unsigned int timbuart_tx_empty(struct uart_port *port)
{
u32 isr = ioread32(port->membase + TIMBUART_ISR);
return (isr & TXBE) ? TIOCSER_TEMT : 0;
}
static void timbuart_flush_buffer(struct uart_port *port) static void timbuart_flush_buffer(struct uart_port *port)
{ {
u8 ctl = ioread8(port->membase + TIMBUART_CTRL) | TIMBUART_CTRL_FLSHTX; if (!timbuart_tx_empty(port)) {
u8 ctl = ioread8(port->membase + TIMBUART_CTRL) |
TIMBUART_CTRL_FLSHTX;
iowrite8(ctl, port->membase + TIMBUART_CTRL); iowrite8(ctl, port->membase + TIMBUART_CTRL);
iowrite32(TXBF, port->membase + TIMBUART_ISR); iowrite32(TXBF, port->membase + TIMBUART_ISR);
}
} }
static void timbuart_rx_chars(struct uart_port *port) static void timbuart_rx_chars(struct uart_port *port)
...@@ -195,13 +205,6 @@ void timbuart_tasklet(unsigned long arg) ...@@ -195,13 +205,6 @@ void timbuart_tasklet(unsigned long arg)
dev_dbg(uart->port.dev, "%s leaving\n", __func__); dev_dbg(uart->port.dev, "%s leaving\n", __func__);
} }
static unsigned int timbuart_tx_empty(struct uart_port *port)
{
u32 isr = ioread32(port->membase + TIMBUART_ISR);
return (isr & TXBE) ? TIOCSER_TEMT : 0;
}
static unsigned int timbuart_get_mctrl(struct uart_port *port) static unsigned int timbuart_get_mctrl(struct uart_port *port)
{ {
u8 cts = ioread8(port->membase + TIMBUART_CTRL); u8 cts = ioread8(port->membase + TIMBUART_CTRL);
...@@ -220,7 +223,7 @@ static void timbuart_set_mctrl(struct uart_port *port, unsigned int mctrl) ...@@ -220,7 +223,7 @@ static void timbuart_set_mctrl(struct uart_port *port, unsigned int mctrl)
if (mctrl & TIOCM_RTS) if (mctrl & TIOCM_RTS)
iowrite8(TIMBUART_CTRL_RTS, port->membase + TIMBUART_CTRL); iowrite8(TIMBUART_CTRL_RTS, port->membase + TIMBUART_CTRL);
else else
iowrite8(TIMBUART_CTRL_RTS, port->membase + TIMBUART_CTRL); iowrite8(0, port->membase + TIMBUART_CTRL);
} }
static void timbuart_mctrl_check(struct uart_port *port, u32 isr, u32 *ier) static void timbuart_mctrl_check(struct uart_port *port, u32 isr, u32 *ier)
......
...@@ -86,7 +86,7 @@ static int ulite_receive(struct uart_port *port, int stat) ...@@ -86,7 +86,7 @@ static int ulite_receive(struct uart_port *port, int stat)
/* stats */ /* stats */
if (stat & ULITE_STATUS_RXVALID) { if (stat & ULITE_STATUS_RXVALID) {
port->icount.rx++; port->icount.rx++;
ch = readb(port->membase + ULITE_RX); ch = ioread32be(port->membase + ULITE_RX);
if (stat & ULITE_STATUS_PARITY) if (stat & ULITE_STATUS_PARITY)
port->icount.parity++; port->icount.parity++;
...@@ -131,7 +131,7 @@ static int ulite_transmit(struct uart_port *port, int stat) ...@@ -131,7 +131,7 @@ static int ulite_transmit(struct uart_port *port, int stat)
return 0; return 0;
if (port->x_char) { if (port->x_char) {
writeb(port->x_char, port->membase + ULITE_TX); iowrite32be(port->x_char, port->membase + ULITE_TX);
port->x_char = 0; port->x_char = 0;
port->icount.tx++; port->icount.tx++;
return 1; return 1;
...@@ -140,7 +140,7 @@ static int ulite_transmit(struct uart_port *port, int stat) ...@@ -140,7 +140,7 @@ static int ulite_transmit(struct uart_port *port, int stat)
if (uart_circ_empty(xmit) || uart_tx_stopped(port)) if (uart_circ_empty(xmit) || uart_tx_stopped(port))
return 0; return 0;
writeb(xmit->buf[xmit->tail], port->membase + ULITE_TX); iowrite32be(xmit->buf[xmit->tail], port->membase + ULITE_TX);
xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE-1); xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE-1);
port->icount.tx++; port->icount.tx++;
...@@ -157,7 +157,7 @@ static irqreturn_t ulite_isr(int irq, void *dev_id) ...@@ -157,7 +157,7 @@ static irqreturn_t ulite_isr(int irq, void *dev_id)
int busy, n = 0; int busy, n = 0;
do { do {
int stat = readb(port->membase + ULITE_STATUS); int stat = ioread32be(port->membase + ULITE_STATUS);
busy = ulite_receive(port, stat); busy = ulite_receive(port, stat);
busy |= ulite_transmit(port, stat); busy |= ulite_transmit(port, stat);
n++; n++;
...@@ -178,7 +178,7 @@ static unsigned int ulite_tx_empty(struct uart_port *port) ...@@ -178,7 +178,7 @@ static unsigned int ulite_tx_empty(struct uart_port *port)
unsigned int ret; unsigned int ret;
spin_lock_irqsave(&port->lock, flags); spin_lock_irqsave(&port->lock, flags);
ret = readb(port->membase + ULITE_STATUS); ret = ioread32be(port->membase + ULITE_STATUS);
spin_unlock_irqrestore(&port->lock, flags); spin_unlock_irqrestore(&port->lock, flags);
return ret & ULITE_STATUS_TXEMPTY ? TIOCSER_TEMT : 0; return ret & ULITE_STATUS_TXEMPTY ? TIOCSER_TEMT : 0;
...@@ -201,7 +201,7 @@ static void ulite_stop_tx(struct uart_port *port) ...@@ -201,7 +201,7 @@ static void ulite_stop_tx(struct uart_port *port)
static void ulite_start_tx(struct uart_port *port) static void ulite_start_tx(struct uart_port *port)
{ {
ulite_transmit(port, readb(port->membase + ULITE_STATUS)); ulite_transmit(port, ioread32be(port->membase + ULITE_STATUS));
} }
static void ulite_stop_rx(struct uart_port *port) static void ulite_stop_rx(struct uart_port *port)
...@@ -230,17 +230,17 @@ static int ulite_startup(struct uart_port *port) ...@@ -230,17 +230,17 @@ static int ulite_startup(struct uart_port *port)
if (ret) if (ret)
return ret; return ret;
writeb(ULITE_CONTROL_RST_RX | ULITE_CONTROL_RST_TX, iowrite32be(ULITE_CONTROL_RST_RX | ULITE_CONTROL_RST_TX,
port->membase + ULITE_CONTROL); port->membase + ULITE_CONTROL);
writeb(ULITE_CONTROL_IE, port->membase + ULITE_CONTROL); iowrite32be(ULITE_CONTROL_IE, port->membase + ULITE_CONTROL);
return 0; return 0;
} }
static void ulite_shutdown(struct uart_port *port) static void ulite_shutdown(struct uart_port *port)
{ {
writeb(0, port->membase + ULITE_CONTROL); iowrite32be(0, port->membase + ULITE_CONTROL);
readb(port->membase + ULITE_CONTROL); /* dummy */ ioread32be(port->membase + ULITE_CONTROL); /* dummy */
free_irq(port->irq, port); free_irq(port->irq, port);
} }
...@@ -352,7 +352,7 @@ static void ulite_console_wait_tx(struct uart_port *port) ...@@ -352,7 +352,7 @@ static void ulite_console_wait_tx(struct uart_port *port)
/* Spin waiting for TX fifo to have space available */ /* Spin waiting for TX fifo to have space available */
for (i = 0; i < 100000; i++) { for (i = 0; i < 100000; i++) {
val = readb(port->membase + ULITE_STATUS); val = ioread32be(port->membase + ULITE_STATUS);
if ((val & ULITE_STATUS_TXFULL) == 0) if ((val & ULITE_STATUS_TXFULL) == 0)
break; break;
cpu_relax(); cpu_relax();
...@@ -362,7 +362,7 @@ static void ulite_console_wait_tx(struct uart_port *port) ...@@ -362,7 +362,7 @@ static void ulite_console_wait_tx(struct uart_port *port)
static void ulite_console_putchar(struct uart_port *port, int ch) static void ulite_console_putchar(struct uart_port *port, int ch)
{ {
ulite_console_wait_tx(port); ulite_console_wait_tx(port);
writeb(ch, port->membase + ULITE_TX); iowrite32be(ch, port->membase + ULITE_TX);
} }
static void ulite_console_write(struct console *co, const char *s, static void ulite_console_write(struct console *co, const char *s,
...@@ -379,8 +379,8 @@ static void ulite_console_write(struct console *co, const char *s, ...@@ -379,8 +379,8 @@ static void ulite_console_write(struct console *co, const char *s,
spin_lock_irqsave(&port->lock, flags); spin_lock_irqsave(&port->lock, flags);
/* save and disable interrupt */ /* save and disable interrupt */
ier = readb(port->membase + ULITE_STATUS) & ULITE_STATUS_IE; ier = ioread32be(port->membase + ULITE_STATUS) & ULITE_STATUS_IE;
writeb(0, port->membase + ULITE_CONTROL); iowrite32be(0, port->membase + ULITE_CONTROL);
uart_console_write(port, s, count, ulite_console_putchar); uart_console_write(port, s, count, ulite_console_putchar);
...@@ -388,7 +388,7 @@ static void ulite_console_write(struct console *co, const char *s, ...@@ -388,7 +388,7 @@ static void ulite_console_write(struct console *co, const char *s,
/* restore interrupt state */ /* restore interrupt state */
if (ier) if (ier)
writeb(ULITE_CONTROL_IE, port->membase + ULITE_CONTROL); iowrite32be(ULITE_CONTROL_IE, port->membase + ULITE_CONTROL);
if (locked) if (locked)
spin_unlock_irqrestore(&port->lock, flags); spin_unlock_irqrestore(&port->lock, flags);
...@@ -601,7 +601,7 @@ ulite_of_probe(struct of_device *op, const struct of_device_id *match) ...@@ -601,7 +601,7 @@ ulite_of_probe(struct of_device *op, const struct of_device_id *match)
id = of_get_property(op->node, "port-number", NULL); id = of_get_property(op->node, "port-number", NULL);
return ulite_assign(&op->dev, id ? *id : -1, res.start+3, irq); return ulite_assign(&op->dev, id ? *id : -1, res.start, irq);
} }
static int __devexit ulite_of_remove(struct of_device *op) static int __devexit ulite_of_remove(struct of_device *op)
......
/*
* altera_jtaguart.h -- Altera JTAG UART driver defines.
*/
#ifndef __ALTJUART_H
#define __ALTJUART_H
#define ALTERA_JTAGUART_MAJOR 204
#define ALTERA_JTAGUART_MINOR 186
struct altera_jtaguart_platform_uart {
unsigned long mapbase; /* Physical address base */
unsigned int irq; /* Interrupt vector */
};
#endif /* __ALTJUART_H */
/*
* altera_uart.h -- Altera UART driver defines.
*/
#ifndef __ALTUART_H
#define __ALTUART_H
struct altera_uart_platform_uart {
unsigned long mapbase; /* Physical address base */
unsigned int irq; /* Interrupt vector */
unsigned int uartclk; /* UART clock rate */
};
#endif /* __ALTUART_H */
#ifndef _LINUX_GSMMUX_H
#define _LINUX_GSMMUX_H
struct gsm_config
{
unsigned int adaption;
unsigned int encapsulation;
unsigned int initiator;
unsigned int t1;
unsigned int t2;
unsigned int t3;
unsigned int n2;
unsigned int mru;
unsigned int mtu;
unsigned int k;
unsigned int i;
unsigned int unused[8]; /* Padding for expansion without
breaking stuff */
};
#define GSMIOC_GETCONF _IOR('G', 0, struct gsm_config)
#define GSMIOC_SETCONF _IOW('G', 1, struct gsm_config)
#endif
...@@ -182,6 +182,10 @@ ...@@ -182,6 +182,10 @@
/* Aeroflex Gaisler GRLIB APBUART */ /* Aeroflex Gaisler GRLIB APBUART */
#define PORT_APBUART 90 #define PORT_APBUART 90
/* Altera UARTs */
#define PORT_ALTERA_JTAGUART 91
#define PORT_ALTERA_UART 92
#ifdef __KERNEL__ #ifdef __KERNEL__
#include <linux/compiler.h> #include <linux/compiler.h>
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
*/ */
#define NR_UNIX98_PTY_DEFAULT 4096 /* Default maximum for Unix98 ptys */ #define NR_UNIX98_PTY_DEFAULT 4096 /* Default maximum for Unix98 ptys */
#define NR_UNIX98_PTY_MAX (1 << MINORBITS) /* Absolute limit */ #define NR_UNIX98_PTY_MAX (1 << MINORBITS) /* Absolute limit */
#define NR_LDISCS 21 #define NR_LDISCS 30
/* line disciplines */ /* line disciplines */
#define N_TTY 0 #define N_TTY 0
...@@ -48,6 +48,7 @@ ...@@ -48,6 +48,7 @@
#define N_PPS 18 /* Pulse per Second */ #define N_PPS 18 /* Pulse per Second */
#define N_V253 19 /* Codec control over voice modem */ #define N_V253 19 /* Codec control over voice modem */
#define N_CAIF 20 /* CAIF protocol for talking to modems */ #define N_CAIF 20 /* CAIF protocol for talking to modems */
#define N_GSM0710 21 /* GSM 0710 Mux */
/* /*
* This character is the same as _POSIX_VDISABLE: it cannot be used as * This character is the same as _POSIX_VDISABLE: it cannot be used as
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment