You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge tag 'tty-3.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty
Pull tty/serial patches from Greg Kroah-Hartman: "Here's the big tty/serial driver patches for 3.9-rc1. More tty port rework and fixes from Jiri here, as well as lots of individual serial driver updates and fixes. All of these have been in the linux-next tree for a while." * tag 'tty-3.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty: (140 commits) tty: mxser: improve error handling in mxser_probe() and mxser_module_init() serial: imx: fix uninitialized variable warning serial: tegra: assume CONFIG_OF TTY: do not update atime/mtime on read/write lguest: select CONFIG_TTY to build properly. ARM defconfigs: add missing inclusions of linux/platform_device.h fb/exynos: include platform_device.h ARM: sa1100/assabet: include platform_device.h directly serial: imx: Fix recursive locking bug pps: Fix build breakage from decoupling pps from tty tty: Remove ancient hardpps() pps: Additional cleanups in uart_handle_dcd_change pps: Move timestamp read into PPS code proper pps: Don't crash the machine when exiting will do pps: Fix a use-after free bug when unregistering a source. pps: Use pps_lookup_dev to reduce ldisc coupling pps: Add pps_lookup_dev() function tty: serial: uartlite: Support uartlite on big and little endian systems tty: serial: uartlite: Fix sparse and checkpatch warnings serial/arc-uart: Miscll DT related updates (Grant's review comments) ... Fix up trivial conflicts, mostly just due to the TTY config option clashing with the EXPERIMENTAL removal.
This commit is contained in:
@@ -53,7 +53,7 @@ source "drivers/tty/serial/Kconfig"
|
||||
|
||||
config TTY_PRINTK
|
||||
bool "TTY driver to output user messages via printk"
|
||||
depends on EXPERT
|
||||
depends on EXPERT && TTY
|
||||
default n
|
||||
---help---
|
||||
If you say Y here, the support for writing user messages (i.e.
|
||||
@@ -159,7 +159,7 @@ source "drivers/tty/hvc/Kconfig"
|
||||
|
||||
config VIRTIO_CONSOLE
|
||||
tristate "Virtio console"
|
||||
depends on VIRTIO
|
||||
depends on VIRTIO && TTY
|
||||
select HVC_DRIVER
|
||||
help
|
||||
Virtio console for use with lguest and other hypervisors.
|
||||
@@ -392,6 +392,7 @@ config XILINX_HWICAP
|
||||
|
||||
config R3964
|
||||
tristate "Siemens R3964 line discipline"
|
||||
depends on TTY
|
||||
---help---
|
||||
This driver allows synchronous communication with devices using the
|
||||
Siemens R3964 packet protocol. Unless you are dealing with special
|
||||
@@ -439,7 +440,7 @@ source "drivers/char/pcmcia/Kconfig"
|
||||
|
||||
config MWAVE
|
||||
tristate "ACP Modem (Mwave) support"
|
||||
depends on X86
|
||||
depends on X86 && TTY
|
||||
select SERIAL_8250
|
||||
---help---
|
||||
The ACP modem (Mwave) for Linux is a WinModem. It is composed of a
|
||||
|
||||
@@ -7,7 +7,7 @@ menu "PCMCIA character devices"
|
||||
|
||||
config SYNCLINK_CS
|
||||
tristate "SyncLink PC Card support"
|
||||
depends on PCMCIA
|
||||
depends on PCMCIA && TTY
|
||||
help
|
||||
Enable support for the SyncLink PC Card serial adapter, running
|
||||
asynchronous and HDLC communications up to 512Kbps. The port is
|
||||
@@ -45,7 +45,7 @@ config CARDMAN_4040
|
||||
|
||||
config IPWIRELESS
|
||||
tristate "IPWireless 3G UMTS PCMCIA card support"
|
||||
depends on PCMCIA && NETDEVICES
|
||||
depends on PCMCIA && NETDEVICES && TTY
|
||||
select PPP
|
||||
help
|
||||
This is a driver for 3G UMTS PCMCIA card from IPWireless company. In
|
||||
|
||||
@@ -210,7 +210,7 @@ typedef struct _mgslpc_info {
|
||||
char testing_irq;
|
||||
unsigned int init_error; /* startup error (DIAGS) */
|
||||
|
||||
char flag_buf[MAX_ASYNC_BUFFER_SIZE];
|
||||
char *flag_buf;
|
||||
bool drop_rts_on_tx_done;
|
||||
|
||||
struct _input_signal_events input_signal_events;
|
||||
@@ -765,9 +765,6 @@ static void bh_handler(struct work_struct *work)
|
||||
struct tty_struct *tty;
|
||||
int action;
|
||||
|
||||
if (!info)
|
||||
return;
|
||||
|
||||
if (debug_level >= DEBUG_LEVEL_BH)
|
||||
printk( "%s(%d):bh_handler(%s) entry\n",
|
||||
__FILE__,__LINE__,info->device_name);
|
||||
@@ -886,21 +883,14 @@ static void rx_ready_hdlc(MGSLPC_INFO *info, int eom)
|
||||
issue_command(info, CHA, CMD_RXFIFO);
|
||||
}
|
||||
|
||||
static void rx_ready_async(MGSLPC_INFO *info, int tcd, struct tty_struct *tty)
|
||||
static void rx_ready_async(MGSLPC_INFO *info, int tcd)
|
||||
{
|
||||
struct tty_port *port = &info->port;
|
||||
unsigned char data, status, flag;
|
||||
int fifo_count;
|
||||
int work = 0;
|
||||
struct mgsl_icount *icount = &info->icount;
|
||||
|
||||
if (!tty) {
|
||||
/* tty is not available anymore */
|
||||
issue_command(info, CHA, CMD_RXRESET);
|
||||
if (debug_level >= DEBUG_LEVEL_ISR)
|
||||
printk("%s(%d):rx_ready_async(tty=NULL)\n",__FILE__,__LINE__);
|
||||
return;
|
||||
}
|
||||
|
||||
if (tcd) {
|
||||
/* early termination, get FIFO count from RBCL register */
|
||||
fifo_count = (unsigned char)(read_reg(info, CHA+RBCL) & 0x1f);
|
||||
@@ -913,7 +903,7 @@ static void rx_ready_async(MGSLPC_INFO *info, int tcd, struct tty_struct *tty)
|
||||
} else
|
||||
fifo_count = 32;
|
||||
|
||||
tty_buffer_request_room(tty, fifo_count);
|
||||
tty_buffer_request_room(port, fifo_count);
|
||||
/* Flush received async data to receive data buffer. */
|
||||
while (fifo_count) {
|
||||
data = read_reg(info, CHA + RXFIFO);
|
||||
@@ -944,7 +934,7 @@ static void rx_ready_async(MGSLPC_INFO *info, int tcd, struct tty_struct *tty)
|
||||
else if (status & BIT6)
|
||||
flag = TTY_FRAME;
|
||||
}
|
||||
work += tty_insert_flip_char(tty, data, flag);
|
||||
work += tty_insert_flip_char(port, data, flag);
|
||||
}
|
||||
issue_command(info, CHA, CMD_RXFIFO);
|
||||
|
||||
@@ -957,7 +947,7 @@ static void rx_ready_async(MGSLPC_INFO *info, int tcd, struct tty_struct *tty)
|
||||
}
|
||||
|
||||
if (work)
|
||||
tty_flip_buffer_push(tty);
|
||||
tty_flip_buffer_push(port);
|
||||
}
|
||||
|
||||
|
||||
@@ -1217,7 +1207,7 @@ static irqreturn_t mgslpc_isr(int dummy, void *dev_id)
|
||||
if (info->params.mode == MGSL_MODE_HDLC)
|
||||
rx_ready_hdlc(info, isr & IRQ_RXEOM);
|
||||
else
|
||||
rx_ready_async(info, isr & IRQ_RXEOM, tty);
|
||||
rx_ready_async(info, isr & IRQ_RXEOM);
|
||||
}
|
||||
|
||||
/* transmit IRQs */
|
||||
@@ -1353,7 +1343,7 @@ static void shutdown(MGSLPC_INFO * info, struct tty_struct *tty)
|
||||
reset_device(info);
|
||||
|
||||
if (!tty || tty->termios.c_cflag & HUPCL) {
|
||||
info->serial_signals &= ~(SerialSignal_DTR + SerialSignal_RTS);
|
||||
info->serial_signals &= ~(SerialSignal_RTS | SerialSignal_DTR);
|
||||
set_signals(info);
|
||||
}
|
||||
|
||||
@@ -1415,12 +1405,12 @@ static void mgslpc_change_params(MGSLPC_INFO *info, struct tty_struct *tty)
|
||||
|
||||
cflag = tty->termios.c_cflag;
|
||||
|
||||
/* if B0 rate (hangup) specified then negate DTR and RTS */
|
||||
/* otherwise assert DTR and RTS */
|
||||
/* if B0 rate (hangup) specified then negate RTS and DTR */
|
||||
/* otherwise assert RTS and DTR */
|
||||
if (cflag & CBAUD)
|
||||
info->serial_signals |= SerialSignal_RTS + SerialSignal_DTR;
|
||||
info->serial_signals |= SerialSignal_RTS | SerialSignal_DTR;
|
||||
else
|
||||
info->serial_signals &= ~(SerialSignal_RTS + SerialSignal_DTR);
|
||||
info->serial_signals &= ~(SerialSignal_RTS | SerialSignal_DTR);
|
||||
|
||||
/* byte size and parity */
|
||||
|
||||
@@ -2311,7 +2301,7 @@ static void mgslpc_set_termios(struct tty_struct *tty, struct ktermios *old_term
|
||||
/* Handle transition to B0 status */
|
||||
if (old_termios->c_cflag & CBAUD &&
|
||||
!(tty->termios.c_cflag & CBAUD)) {
|
||||
info->serial_signals &= ~(SerialSignal_RTS + SerialSignal_DTR);
|
||||
info->serial_signals &= ~(SerialSignal_RTS | SerialSignal_DTR);
|
||||
spin_lock_irqsave(&info->lock,flags);
|
||||
set_signals(info);
|
||||
spin_unlock_irqrestore(&info->lock,flags);
|
||||
@@ -2474,9 +2464,9 @@ static void dtr_rts(struct tty_port *port, int onoff)
|
||||
|
||||
spin_lock_irqsave(&info->lock,flags);
|
||||
if (onoff)
|
||||
info->serial_signals |= SerialSignal_RTS + SerialSignal_DTR;
|
||||
info->serial_signals |= SerialSignal_RTS | SerialSignal_DTR;
|
||||
else
|
||||
info->serial_signals &= ~SerialSignal_RTS + SerialSignal_DTR;
|
||||
info->serial_signals &= ~(SerialSignal_RTS | SerialSignal_DTR);
|
||||
set_signals(info);
|
||||
spin_unlock_irqrestore(&info->lock,flags);
|
||||
}
|
||||
@@ -2521,7 +2511,7 @@ static int mgslpc_open(struct tty_struct *tty, struct file * filp)
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
tty->low_latency = (port->flags & ASYNC_LOW_LATENCY) ? 1 : 0;
|
||||
port->low_latency = (port->flags & ASYNC_LOW_LATENCY) ? 1 : 0;
|
||||
|
||||
spin_lock_irqsave(&info->netlock, flags);
|
||||
if (info->netcount) {
|
||||
@@ -2674,6 +2664,14 @@ static int rx_alloc_buffers(MGSLPC_INFO *info)
|
||||
if (info->rx_buf == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
/* unused flag buffer to satisfy receive_buf calling interface */
|
||||
info->flag_buf = kzalloc(info->max_frame_size, GFP_KERNEL);
|
||||
if (!info->flag_buf) {
|
||||
kfree(info->rx_buf);
|
||||
info->rx_buf = NULL;
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
rx_reset_buffers(info);
|
||||
return 0;
|
||||
}
|
||||
@@ -2682,6 +2680,8 @@ static void rx_free_buffers(MGSLPC_INFO *info)
|
||||
{
|
||||
kfree(info->rx_buf);
|
||||
info->rx_buf = NULL;
|
||||
kfree(info->flag_buf);
|
||||
info->flag_buf = NULL;
|
||||
}
|
||||
|
||||
static int claim_resources(MGSLPC_INFO *info)
|
||||
@@ -3575,8 +3575,8 @@ static void get_signals(MGSLPC_INFO *info)
|
||||
{
|
||||
unsigned char status = 0;
|
||||
|
||||
/* preserve DTR and RTS */
|
||||
info->serial_signals &= SerialSignal_DTR + SerialSignal_RTS;
|
||||
/* preserve RTS and DTR */
|
||||
info->serial_signals &= SerialSignal_RTS | SerialSignal_DTR;
|
||||
|
||||
if (read_reg(info, CHB + VSTR) & BIT7)
|
||||
info->serial_signals |= SerialSignal_DCD;
|
||||
@@ -3590,7 +3590,7 @@ static void get_signals(MGSLPC_INFO *info)
|
||||
info->serial_signals |= SerialSignal_DSR;
|
||||
}
|
||||
|
||||
/* Set the state of DTR and RTS based on contents of
|
||||
/* Set the state of RTS and DTR based on contents of
|
||||
* serial_signals member of device extension.
|
||||
*/
|
||||
static void set_signals(MGSLPC_INFO *info)
|
||||
@@ -4009,8 +4009,8 @@ static int hdlcdev_open(struct net_device *dev)
|
||||
spin_unlock_irqrestore(&info->netlock, flags);
|
||||
return rc;
|
||||
}
|
||||
/* assert DTR and RTS, apply hardware settings */
|
||||
info->serial_signals |= SerialSignal_RTS + SerialSignal_DTR;
|
||||
/* assert RTS and DTR, apply hardware settings */
|
||||
info->serial_signals |= SerialSignal_RTS | SerialSignal_DTR;
|
||||
mgslpc_program_hw(info, tty);
|
||||
tty_kref_put(tty);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user