Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 474432 | Differences between
and this patch

Collapse All | Expand All

(-)a/net/bluetooth/rfcomm/tty.c (-9 / +41 lines)
Lines 58-63 struct rfcomm_dev { Link Here
58
	uint			modem_status;
58
	uint			modem_status;
59
59
60
	struct rfcomm_dlc	*dlc;
60
	struct rfcomm_dlc	*dlc;
61
    wait_queue_head_t       conn_wait;
61
62
62
	struct device		*tty_dev;
63
	struct device		*tty_dev;
63
64
Lines 124-130 static int rfcomm_dev_activate(struct tt Link Here
124
{
125
{
125
	struct rfcomm_dev *dev = container_of(port, struct rfcomm_dev, port);
126
	struct rfcomm_dev *dev = container_of(port, struct rfcomm_dev, port);
126
127
127
	return rfcomm_dlc_open(dev->dlc, &dev->src, &dev->dst, dev->channel);
128
    DEFINE_WAIT(wait);
129
    int err;
130
131
    err = rfcomm_dlc_open(dev->dlc, &dev->src, &dev->dst, dev->channel);
132
    if (err)
133
        return err;
134
135
    while (1) {
136
        prepare_to_wait(&dev->conn_wait, &wait, TASK_INTERRUPTIBLE);
137
138
        if (dev->dlc->state == BT_CLOSED) {
139
            err = -dev->err;
140
            break;
141
        }
142
143
        if (dev->dlc->state == BT_CONNECTED)
144
            break;
145
146
        if (signal_pending(current)) {
147
            err = -ERESTARTSYS;
148
            break;
149
        }
150
151
        tty_unlock(tty);
152
        schedule();
153
        tty_lock(tty);
154
    }
155
156
    finish_wait(&dev->conn_wait, &wait);
157
158
    if (!err)
159
        device_move(dev->tty_dev, rfcomm_get_device(dev),
160
            DPM_ORDER_DEV_AFTER_PARENT);
161
162
    return err;
128
}
163
}
129
164
130
/* we block the open until the dlc->state becomes BT_CONNECTED */
165
/* we block the open until the dlc->state becomes BT_CONNECTED */
Lines 151-157 static const struct tty_port_operations Link Here
151
	.destruct = rfcomm_dev_destruct,
186
	.destruct = rfcomm_dev_destruct,
152
	.activate = rfcomm_dev_activate,
187
	.activate = rfcomm_dev_activate,
153
	.shutdown = rfcomm_dev_shutdown,
188
	.shutdown = rfcomm_dev_shutdown,
154
	.carrier_raised = rfcomm_dev_carrier_raised,
155
};
189
};
156
190
157
static struct rfcomm_dev *__rfcomm_dev_get(int id)
191
static struct rfcomm_dev *__rfcomm_dev_get(int id)
Lines 258-263 static int rfcomm_dev_add(struct rfcomm_ Link Here
258
292
259
	tty_port_init(&dev->port);
293
	tty_port_init(&dev->port);
260
	dev->port.ops = &rfcomm_port_ops;
294
	dev->port.ops = &rfcomm_port_ops;
295
    init_waitqueue_head(&dev->conn_wait);
261
296
262
	skb_queue_head_init(&dev->pending);
297
	skb_queue_head_init(&dev->pending);
263
298
Lines 576-587 static void rfcomm_dev_state_change(stru Link Here
576
	BT_DBG("dlc %p dev %p err %d", dlc, dev, err);
611
	BT_DBG("dlc %p dev %p err %d", dlc, dev, err);
577
612
578
	dev->err = err;
613
	dev->err = err;
579
	if (dlc->state == BT_CONNECTED) {
614
    wake_up_interruptible(&dev->conn_wait);
580
		device_move(dev->tty_dev, rfcomm_get_device(dev),
615
    
581
			    DPM_ORDER_DEV_AFTER_PARENT);
616
    if (dlc->state == BT_CLOSED)
582
583
		wake_up_interruptible(&dev->port.open_wait);
584
	} else if (dlc->state == BT_CLOSED)
585
		tty_port_tty_hangup(&dev->port, false);
617
		tty_port_tty_hangup(&dev->port, false);
586
}
618
}
587
619
Lines 1104-1110 int __init rfcomm_init_ttys(void) Link Here
1104
	rfcomm_tty_driver->subtype	= SERIAL_TYPE_NORMAL;
1136
	rfcomm_tty_driver->subtype	= SERIAL_TYPE_NORMAL;
1105
	rfcomm_tty_driver->flags	= TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
1137
	rfcomm_tty_driver->flags	= TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
1106
	rfcomm_tty_driver->init_termios	= tty_std_termios;
1138
	rfcomm_tty_driver->init_termios	= tty_std_termios;
1107
	rfcomm_tty_driver->init_termios.c_cflag	= B9600 | CS8 | CREAD | HUPCL;
1139
    rfcomm_tty_driver->init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL;
1108
	rfcomm_tty_driver->init_termios.c_lflag &= ~ICANON;
1140
	rfcomm_tty_driver->init_termios.c_lflag &= ~ICANON;
1109
	tty_set_operations(rfcomm_tty_driver, &rfcomm_ops);
1141
	tty_set_operations(rfcomm_tty_driver, &rfcomm_ops);
1110
1142

Return to bug 474432