|
@@ -430,7 +430,7 @@ static void usa26_indat_callback(struct urb *urb)
|
|
|
}
|
|
|
|
|
|
port = urb->context;
|
|
|
- tty = port->port.tty;
|
|
|
+ tty = tty_port_tty_get(&port->port);
|
|
|
if (tty && urb->actual_length) {
|
|
|
/* 0x80 bit is error flag */
|
|
|
if ((data[0] & 0x80) == 0) {
|
|
@@ -459,6 +459,7 @@ static void usa26_indat_callback(struct urb *urb)
|
|
|
}
|
|
|
tty_flip_buffer_push(tty);
|
|
|
}
|
|
|
+ tty_kref_put(tty);
|
|
|
|
|
|
/* Resubmit urb so we continue receiving */
|
|
|
urb->dev = port->serial->dev;
|
|
@@ -513,6 +514,7 @@ static void usa26_instat_callback(struct urb *urb)
|
|
|
struct usb_serial *serial;
|
|
|
struct usb_serial_port *port;
|
|
|
struct keyspan_port_private *p_priv;
|
|
|
+ struct tty_struct *tty;
|
|
|
int old_dcd_state, err;
|
|
|
int status = urb->status;
|
|
|
|
|
@@ -553,12 +555,11 @@ static void usa26_instat_callback(struct urb *urb)
|
|
|
p_priv->dcd_state = ((msg->gpia_dcd) ? 1 : 0);
|
|
|
p_priv->ri_state = ((msg->ri) ? 1 : 0);
|
|
|
|
|
|
- if (port->port.tty && !C_CLOCAL(port->port.tty)
|
|
|
- && old_dcd_state != p_priv->dcd_state) {
|
|
|
- if (old_dcd_state)
|
|
|
- tty_hangup(port->port.tty);
|
|
|
- /* else */
|
|
|
- /* wake_up_interruptible(&p_priv->open_wait); */
|
|
|
+ if (old_dcd_state != p_priv->dcd_state) {
|
|
|
+ tty = tty_port_tty_get(&port->port);
|
|
|
+ if (tty && !C_CLOCAL(tty))
|
|
|
+ tty_hangup(tty);
|
|
|
+ tty_kref_put(tty);
|
|
|
}
|
|
|
|
|
|
/* Resubmit urb so we continue receiving */
|
|
@@ -604,11 +605,12 @@ static void usa28_indat_callback(struct urb *urb)
|
|
|
p_priv = usb_get_serial_port_data(port);
|
|
|
data = urb->transfer_buffer;
|
|
|
|
|
|
- tty = port->port.tty;
|
|
|
- if (urb->actual_length) {
|
|
|
+ tty =tty_port_tty_get(&port->port);
|
|
|
+ if (tty && urb->actual_length) {
|
|
|
tty_insert_flip_string(tty, data, urb->actual_length);
|
|
|
tty_flip_buffer_push(tty);
|
|
|
}
|
|
|
+ tty_kref_put(tty);
|
|
|
|
|
|
/* Resubmit urb so we continue receiving */
|
|
|
urb->dev = port->serial->dev;
|
|
@@ -652,6 +654,7 @@ static void usa28_instat_callback(struct urb *urb)
|
|
|
struct usb_serial *serial;
|
|
|
struct usb_serial_port *port;
|
|
|
struct keyspan_port_private *p_priv;
|
|
|
+ struct tty_struct *tty;
|
|
|
int old_dcd_state;
|
|
|
int status = urb->status;
|
|
|
|
|
@@ -689,12 +692,11 @@ static void usa28_instat_callback(struct urb *urb)
|
|
|
p_priv->dcd_state = ((msg->dcd) ? 1 : 0);
|
|
|
p_priv->ri_state = ((msg->ri) ? 1 : 0);
|
|
|
|
|
|
- if (port->port.tty && !C_CLOCAL(port->port.tty)
|
|
|
- && old_dcd_state != p_priv->dcd_state) {
|
|
|
- if (old_dcd_state)
|
|
|
- tty_hangup(port->port.tty);
|
|
|
- /* else */
|
|
|
- /* wake_up_interruptible(&p_priv->open_wait); */
|
|
|
+ if( old_dcd_state != p_priv->dcd_state && old_dcd_state) {
|
|
|
+ tty = tty_port_tty_get(&port->port);
|
|
|
+ if (tty && !C_CLOCAL(tty))
|
|
|
+ tty_hangup(tty);
|
|
|
+ tty_kref_put(tty);
|
|
|
}
|
|
|
|
|
|
/* Resubmit urb so we continue receiving */
|
|
@@ -785,12 +787,11 @@ static void usa49_instat_callback(struct urb *urb)
|
|
|
p_priv->dcd_state = ((msg->dcd) ? 1 : 0);
|
|
|
p_priv->ri_state = ((msg->ri) ? 1 : 0);
|
|
|
|
|
|
- if (port->port.tty && !C_CLOCAL(port->port.tty)
|
|
|
- && old_dcd_state != p_priv->dcd_state) {
|
|
|
- if (old_dcd_state)
|
|
|
- tty_hangup(port->port.tty);
|
|
|
- /* else */
|
|
|
- /* wake_up_interruptible(&p_priv->open_wait); */
|
|
|
+ if (old_dcd_state != p_priv->dcd_state && old_dcd_state) {
|
|
|
+ struct tty_struct *tty = tty_port_tty_get(&port->port);
|
|
|
+ if (tty && !C_CLOCAL(tty))
|
|
|
+ tty_hangup(tty);
|
|
|
+ tty_kref_put(tty);
|
|
|
}
|
|
|
|
|
|
/* Resubmit urb so we continue receiving */
|
|
@@ -827,7 +828,7 @@ static void usa49_indat_callback(struct urb *urb)
|
|
|
}
|
|
|
|
|
|
port = urb->context;
|
|
|
- tty = port->port.tty;
|
|
|
+ tty = tty_port_tty_get(&port->port);
|
|
|
if (tty && urb->actual_length) {
|
|
|
/* 0x80 bit is error flag */
|
|
|
if ((data[0] & 0x80) == 0) {
|
|
@@ -850,6 +851,7 @@ static void usa49_indat_callback(struct urb *urb)
|
|
|
}
|
|
|
tty_flip_buffer_push(tty);
|
|
|
}
|
|
|
+ tty_kref_put(tty);
|
|
|
|
|
|
/* Resubmit urb so we continue receiving */
|
|
|
urb->dev = port->serial->dev;
|
|
@@ -893,7 +895,7 @@ static void usa49wg_indat_callback(struct urb *urb)
|
|
|
return;
|
|
|
}
|
|
|
port = serial->port[data[i++]];
|
|
|
- tty = port->port.tty;
|
|
|
+ tty = tty_port_tty_get(&port->port);
|
|
|
len = data[i++];
|
|
|
|
|
|
/* 0x80 bit is error flag */
|
|
@@ -927,6 +929,7 @@ static void usa49wg_indat_callback(struct urb *urb)
|
|
|
}
|
|
|
if (port->port.count)
|
|
|
tty_flip_buffer_push(tty);
|
|
|
+ tty_kref_put(tty);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -967,8 +970,8 @@ static void usa90_indat_callback(struct urb *urb)
|
|
|
port = urb->context;
|
|
|
p_priv = usb_get_serial_port_data(port);
|
|
|
|
|
|
- tty = port->port.tty;
|
|
|
if (urb->actual_length) {
|
|
|
+ tty = tty_port_tty_get(&port->port);
|
|
|
/* if current mode is DMA, looks like usa28 format
|
|
|
otherwise looks like usa26 data format */
|
|
|
|
|
@@ -1004,6 +1007,7 @@ static void usa90_indat_callback(struct urb *urb)
|
|
|
}
|
|
|
}
|
|
|
tty_flip_buffer_push(tty);
|
|
|
+ tty_kref_put(tty);
|
|
|
}
|
|
|
|
|
|
/* Resubmit urb so we continue receiving */
|
|
@@ -1025,6 +1029,7 @@ static void usa90_instat_callback(struct urb *urb)
|
|
|
struct usb_serial *serial;
|
|
|
struct usb_serial_port *port;
|
|
|
struct keyspan_port_private *p_priv;
|
|
|
+ struct tty_struct *tty;
|
|
|
int old_dcd_state, err;
|
|
|
int status = urb->status;
|
|
|
|
|
@@ -1053,12 +1058,11 @@ static void usa90_instat_callback(struct urb *urb)
|
|
|
p_priv->dcd_state = ((msg->dcd) ? 1 : 0);
|
|
|
p_priv->ri_state = ((msg->ri) ? 1 : 0);
|
|
|
|
|
|
- if (port->port.tty && !C_CLOCAL(port->port.tty)
|
|
|
- && old_dcd_state != p_priv->dcd_state) {
|
|
|
- if (old_dcd_state)
|
|
|
- tty_hangup(port->port.tty);
|
|
|
- /* else */
|
|
|
- /* wake_up_interruptible(&p_priv->open_wait); */
|
|
|
+ if (old_dcd_state != p_priv->dcd_state && old_dcd_state) {
|
|
|
+ tty = tty_port_tty_get(&port->port);
|
|
|
+ if (tty && !C_CLOCAL(tty))
|
|
|
+ tty_hangup(tty);
|
|
|
+ tty_kref_put(tty);
|
|
|
}
|
|
|
|
|
|
/* Resubmit urb so we continue receiving */
|
|
@@ -1130,12 +1134,11 @@ static void usa67_instat_callback(struct urb *urb)
|
|
|
p_priv->cts_state = ((msg->hskia_cts) ? 1 : 0);
|
|
|
p_priv->dcd_state = ((msg->gpia_dcd) ? 1 : 0);
|
|
|
|
|
|
- if (port->port.tty && !C_CLOCAL(port->port.tty)
|
|
|
- && old_dcd_state != p_priv->dcd_state) {
|
|
|
- if (old_dcd_state)
|
|
|
- tty_hangup(port->port.tty);
|
|
|
- /* else */
|
|
|
- /* wake_up_interruptible(&p_priv->open_wait); */
|
|
|
+ if (old_dcd_state != p_priv->dcd_state && old_dcd_state) {
|
|
|
+ struct tty_struct *tty = tty_port_tty_get(&port->port);
|
|
|
+ if (tty && !C_CLOCAL(tty))
|
|
|
+ tty_hangup(tty);
|
|
|
+ tty_kref_put(tty);
|
|
|
}
|
|
|
|
|
|
/* Resubmit urb so we continue receiving */
|
|
@@ -1332,7 +1335,7 @@ static void keyspan_close(struct tty_struct *tty,
|
|
|
stop_urb(p_priv->out_urbs[i]);
|
|
|
}
|
|
|
}
|
|
|
- port->port.tty = NULL;
|
|
|
+ tty_port_tty_set(&port->port, NULL);
|
|
|
}
|
|
|
|
|
|
/* download the firmware to a pre-renumeration device */
|