And use count from there.
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
* (and thus for each /dev/ node).
*/
struct gs_port {
* (and thus for each /dev/ node).
*/
struct gs_port {
spinlock_t port_lock; /* guard port_* access */
struct gserial *port_usb;
struct tty_struct *port_tty;
spinlock_t port_lock; /* guard port_* access */
struct gserial *port_usb;
struct tty_struct *port_tty;
bool openclose; /* open/close in progress */
u8 port_num;
bool openclose; /* open/close in progress */
u8 port_num;
spin_lock_irq(&port->port_lock);
/* already open? Great. */
spin_lock_irq(&port->port_lock);
/* already open? Great. */
- if (port->open_count) {
+ if (port->port.count) {
/* currently opening/closing? wait ... */
} else if (port->openclose) {
/* currently opening/closing? wait ... */
} else if (port->openclose) {
tty->driver_data = port;
port->port_tty = tty;
tty->driver_data = port;
port->port_tty = tty;
port->openclose = false;
/* if connected, start the I/O stream */
port->openclose = false;
/* if connected, start the I/O stream */
spin_lock_irq(&port->port_lock);
spin_lock_irq(&port->port_lock);
- if (port->open_count != 1) {
- if (port->open_count == 0)
+ if (port->port.count != 1) {
+ if (port->port.count == 0)
* and sleep if necessary
*/
port->openclose = true;
* and sleep if necessary
*/
port->openclose = true;
gser = port->port_usb;
if (gser && gser->disconnect)
gser = port->port_usb;
if (gser && gser->disconnect)
if (port == NULL)
return -ENOMEM;
if (port == NULL)
return -ENOMEM;
+ tty_port_init(&port->port);
spin_lock_init(&port->port_lock);
init_waitqueue_head(&port->close_wait);
init_waitqueue_head(&port->drain_wait);
spin_lock_init(&port->port_lock);
init_waitqueue_head(&port->close_wait);
init_waitqueue_head(&port->drain_wait);
int cond;
spin_lock_irq(&port->port_lock);
int cond;
spin_lock_irq(&port->port_lock);
- cond = (port->open_count == 0) && !port->openclose;
+ cond = (port->port.count == 0) && !port->openclose;
spin_unlock_irq(&port->port_lock);
return cond;
}
spin_unlock_irq(&port->port_lock);
return cond;
}
/* if it's already open, start I/O ... and notify the serial
* protocol about open/close status (connect/disconnect).
*/
/* if it's already open, start I/O ... and notify the serial
* protocol about open/close status (connect/disconnect).
*/
- if (port->open_count) {
+ if (port->port.count) {
pr_debug("gserial_connect: start ttyGS%d\n", port->port_num);
gs_start_io(port);
if (gser->connect)
pr_debug("gserial_connect: start ttyGS%d\n", port->port_num);
gs_start_io(port);
if (gser->connect)
port->port_usb = NULL;
gser->ioport = NULL;
port->port_usb = NULL;
gser->ioport = NULL;
- if (port->open_count > 0 || port->openclose) {
+ if (port->port.count > 0 || port->openclose) {
wake_up_interruptible(&port->drain_wait);
if (port->port_tty)
tty_hangup(port->port_tty);
wake_up_interruptible(&port->drain_wait);
if (port->port_tty)
tty_hangup(port->port_tty);
/* finally, free any unused/unusable I/O buffers */
spin_lock_irqsave(&port->port_lock, flags);
/* finally, free any unused/unusable I/O buffers */
spin_lock_irqsave(&port->port_lock, flags);
- if (port->open_count == 0 && !port->openclose)
+ if (port->port.count == 0 && !port->openclose)
gs_buf_free(&port->port_write_buf);
gs_free_requests(gser->out, &port->read_pool, NULL);
gs_free_requests(gser->out, &port->read_queue, NULL);
gs_buf_free(&port->port_write_buf);
gs_free_requests(gser->out, &port->read_pool, NULL);
gs_free_requests(gser->out, &port->read_queue, NULL);