Lines Matching full:d

56 static int rfcomm_queue_disc(struct rfcomm_dlc *d);
58 static int rfcomm_send_pn(struct rfcomm_session *s, int cr, struct rfcomm_dlc *d);
183 BT_DBG("%p state %d", sk, sk->sk_state); in rfcomm_l2state_change()
208 static int rfcomm_check_security(struct rfcomm_dlc *d) in rfcomm_check_security() argument
210 struct sock *sk = d->session->sock->sk; in rfcomm_check_security()
215 switch (d->sec_level) { in rfcomm_check_security()
228 return hci_conn_security(conn->hcon, d->sec_level, auth_type, in rfcomm_check_security()
229 d->out); in rfcomm_check_security()
259 struct rfcomm_dlc *d = from_timer(d, t, timer); in rfcomm_dlc_timeout() local
261 BT_DBG("dlc %p state %ld", d, d->state); in rfcomm_dlc_timeout()
263 set_bit(RFCOMM_TIMED_OUT, &d->flags); in rfcomm_dlc_timeout()
264 rfcomm_dlc_put(d); in rfcomm_dlc_timeout()
268 static void rfcomm_dlc_set_timer(struct rfcomm_dlc *d, long timeout) in rfcomm_dlc_set_timer() argument
270 BT_DBG("dlc %p state %ld timeout %ld", d, d->state, timeout); in rfcomm_dlc_set_timer()
272 if (!mod_timer(&d->timer, jiffies + timeout)) in rfcomm_dlc_set_timer()
273 rfcomm_dlc_hold(d); in rfcomm_dlc_set_timer()
276 static void rfcomm_dlc_clear_timer(struct rfcomm_dlc *d) in rfcomm_dlc_clear_timer() argument
278 BT_DBG("dlc %p state %ld", d, d->state); in rfcomm_dlc_clear_timer()
280 if (del_timer(&d->timer)) in rfcomm_dlc_clear_timer()
281 rfcomm_dlc_put(d); in rfcomm_dlc_clear_timer()
284 static void rfcomm_dlc_clear_state(struct rfcomm_dlc *d) in rfcomm_dlc_clear_state() argument
286 BT_DBG("%p", d); in rfcomm_dlc_clear_state()
288 d->state = BT_OPEN; in rfcomm_dlc_clear_state()
289 d->flags = 0; in rfcomm_dlc_clear_state()
290 d->mscex = 0; in rfcomm_dlc_clear_state()
291 d->sec_level = BT_SECURITY_LOW; in rfcomm_dlc_clear_state()
292 d->mtu = RFCOMM_DEFAULT_MTU; in rfcomm_dlc_clear_state()
293 d->v24_sig = RFCOMM_V24_RTC | RFCOMM_V24_RTR | RFCOMM_V24_DV; in rfcomm_dlc_clear_state()
295 d->cfc = RFCOMM_CFC_DISABLED; in rfcomm_dlc_clear_state()
296 d->rx_credits = RFCOMM_DEFAULT_CREDITS; in rfcomm_dlc_clear_state()
301 struct rfcomm_dlc *d = kzalloc(sizeof(*d), prio); in rfcomm_dlc_alloc() local
303 if (!d) in rfcomm_dlc_alloc()
306 timer_setup(&d->timer, rfcomm_dlc_timeout, 0); in rfcomm_dlc_alloc()
308 skb_queue_head_init(&d->tx_queue); in rfcomm_dlc_alloc()
309 mutex_init(&d->lock); in rfcomm_dlc_alloc()
310 refcount_set(&d->refcnt, 1); in rfcomm_dlc_alloc()
312 rfcomm_dlc_clear_state(d); in rfcomm_dlc_alloc()
314 BT_DBG("%p", d); in rfcomm_dlc_alloc()
316 return d; in rfcomm_dlc_alloc()
319 void rfcomm_dlc_free(struct rfcomm_dlc *d) in rfcomm_dlc_free() argument
321 BT_DBG("%p", d); in rfcomm_dlc_free()
323 skb_queue_purge(&d->tx_queue); in rfcomm_dlc_free()
324 kfree(d); in rfcomm_dlc_free()
327 static void rfcomm_dlc_link(struct rfcomm_session *s, struct rfcomm_dlc *d) in rfcomm_dlc_link() argument
329 BT_DBG("dlc %p session %p", d, s); in rfcomm_dlc_link()
332 rfcomm_dlc_hold(d); in rfcomm_dlc_link()
333 list_add(&d->list, &s->dlcs); in rfcomm_dlc_link()
334 d->session = s; in rfcomm_dlc_link()
337 static void rfcomm_dlc_unlink(struct rfcomm_dlc *d) in rfcomm_dlc_unlink() argument
339 struct rfcomm_session *s = d->session; in rfcomm_dlc_unlink()
341 BT_DBG("dlc %p refcnt %d session %p", d, refcount_read(&d->refcnt), s); in rfcomm_dlc_unlink()
343 list_del(&d->list); in rfcomm_dlc_unlink()
344 d->session = NULL; in rfcomm_dlc_unlink()
345 rfcomm_dlc_put(d); in rfcomm_dlc_unlink()
353 struct rfcomm_dlc *d; in rfcomm_dlc_get() local
355 list_for_each_entry(d, &s->dlcs, list) in rfcomm_dlc_get()
356 if (d->dlci == dlci) in rfcomm_dlc_get()
357 return d; in rfcomm_dlc_get()
367 static int __rfcomm_dlc_open(struct rfcomm_dlc *d, bdaddr_t *src, bdaddr_t *dst, u8 channel) in __rfcomm_dlc_open() argument
373 BT_DBG("dlc %p state %ld %pMR -> %pMR channel %d", in __rfcomm_dlc_open()
374 d, d->state, src, dst, channel); in __rfcomm_dlc_open()
379 if (d->state != BT_OPEN && d->state != BT_CLOSED) in __rfcomm_dlc_open()
384 s = rfcomm_session_create(src, dst, d->sec_level, &err); in __rfcomm_dlc_open()
395 rfcomm_dlc_clear_state(d); in __rfcomm_dlc_open()
397 d->dlci = dlci; in __rfcomm_dlc_open()
398 d->addr = __addr(s->initiator, dlci); in __rfcomm_dlc_open()
399 d->priority = 7; in __rfcomm_dlc_open()
401 d->state = BT_CONFIG; in __rfcomm_dlc_open()
402 rfcomm_dlc_link(s, d); in __rfcomm_dlc_open()
404 d->out = 1; in __rfcomm_dlc_open()
406 d->mtu = s->mtu; in __rfcomm_dlc_open()
407 d->cfc = (s->cfc == RFCOMM_CFC_UNKNOWN) ? 0 : s->cfc; in __rfcomm_dlc_open()
410 if (rfcomm_check_security(d)) in __rfcomm_dlc_open()
411 rfcomm_send_pn(s, 1, d); in __rfcomm_dlc_open()
413 set_bit(RFCOMM_AUTH_PENDING, &d->flags); in __rfcomm_dlc_open()
416 rfcomm_dlc_set_timer(d, RFCOMM_CONN_TIMEOUT); in __rfcomm_dlc_open()
421 int rfcomm_dlc_open(struct rfcomm_dlc *d, bdaddr_t *src, bdaddr_t *dst, u8 channel) in rfcomm_dlc_open() argument
427 r = __rfcomm_dlc_open(d, src, dst, channel); in rfcomm_dlc_open()
433 static void __rfcomm_dlc_disconn(struct rfcomm_dlc *d) in __rfcomm_dlc_disconn() argument
435 struct rfcomm_session *s = d->session; in __rfcomm_dlc_disconn()
437 d->state = BT_DISCONN; in __rfcomm_dlc_disconn()
438 if (skb_queue_empty(&d->tx_queue)) { in __rfcomm_dlc_disconn()
439 rfcomm_send_disc(s, d->dlci); in __rfcomm_dlc_disconn()
440 rfcomm_dlc_set_timer(d, RFCOMM_DISC_TIMEOUT); in __rfcomm_dlc_disconn()
442 rfcomm_queue_disc(d); in __rfcomm_dlc_disconn()
443 rfcomm_dlc_set_timer(d, RFCOMM_DISC_TIMEOUT * 2); in __rfcomm_dlc_disconn()
447 static int __rfcomm_dlc_close(struct rfcomm_dlc *d, int err) in __rfcomm_dlc_close() argument
449 struct rfcomm_session *s = d->session; in __rfcomm_dlc_close()
453 BT_DBG("dlc %p state %ld dlci %d err %d session %p", in __rfcomm_dlc_close()
454 d, d->state, d->dlci, err, s); in __rfcomm_dlc_close()
456 switch (d->state) { in __rfcomm_dlc_close()
461 if (test_and_clear_bit(RFCOMM_DEFER_SETUP, &d->flags)) { in __rfcomm_dlc_close()
462 set_bit(RFCOMM_AUTH_REJECT, &d->flags); in __rfcomm_dlc_close()
468 switch (d->state) { in __rfcomm_dlc_close()
471 __rfcomm_dlc_disconn(d); in __rfcomm_dlc_close()
476 __rfcomm_dlc_disconn(d); in __rfcomm_dlc_close()
485 rfcomm_dlc_clear_timer(d); in __rfcomm_dlc_close()
487 rfcomm_dlc_lock(d); in __rfcomm_dlc_close()
488 d->state = BT_CLOSED; in __rfcomm_dlc_close()
489 d->state_change(d, err); in __rfcomm_dlc_close()
490 rfcomm_dlc_unlock(d); in __rfcomm_dlc_close()
492 skb_queue_purge(&d->tx_queue); in __rfcomm_dlc_close()
493 rfcomm_dlc_unlink(d); in __rfcomm_dlc_close()
499 int rfcomm_dlc_close(struct rfcomm_dlc *d, int err) in rfcomm_dlc_close() argument
505 BT_DBG("dlc %p state %ld dlci %d err %d", d, d->state, d->dlci, err); in rfcomm_dlc_close()
509 s = d->session; in rfcomm_dlc_close()
519 if (d_list == d) { in rfcomm_dlc_close()
520 r = __rfcomm_dlc_close(d, err); in rfcomm_dlc_close()
552 int rfcomm_dlc_send(struct rfcomm_dlc *d, struct sk_buff *skb) in rfcomm_dlc_send() argument
556 if (d->state != BT_CONNECTED) in rfcomm_dlc_send()
559 BT_DBG("dlc %p mtu %d len %d", d, d->mtu, len); in rfcomm_dlc_send()
561 if (len > d->mtu) in rfcomm_dlc_send()
564 rfcomm_make_uih(skb, d->addr); in rfcomm_dlc_send()
565 skb_queue_tail(&d->tx_queue, skb); in rfcomm_dlc_send()
567 if (!test_bit(RFCOMM_TX_THROTTLED, &d->flags)) in rfcomm_dlc_send()
572 void rfcomm_dlc_send_noerror(struct rfcomm_dlc *d, struct sk_buff *skb) in rfcomm_dlc_send_noerror() argument
576 BT_DBG("dlc %p mtu %d len %d", d, d->mtu, len); in rfcomm_dlc_send_noerror()
578 rfcomm_make_uih(skb, d->addr); in rfcomm_dlc_send_noerror()
579 skb_queue_tail(&d->tx_queue, skb); in rfcomm_dlc_send_noerror()
581 if (d->state == BT_CONNECTED && in rfcomm_dlc_send_noerror()
582 !test_bit(RFCOMM_TX_THROTTLED, &d->flags)) in rfcomm_dlc_send_noerror()
586 void __rfcomm_dlc_throttle(struct rfcomm_dlc *d) in __rfcomm_dlc_throttle() argument
588 BT_DBG("dlc %p state %ld", d, d->state); in __rfcomm_dlc_throttle()
590 if (!d->cfc) { in __rfcomm_dlc_throttle()
591 d->v24_sig |= RFCOMM_V24_FC; in __rfcomm_dlc_throttle()
592 set_bit(RFCOMM_MSC_PENDING, &d->flags); in __rfcomm_dlc_throttle()
597 void __rfcomm_dlc_unthrottle(struct rfcomm_dlc *d) in __rfcomm_dlc_unthrottle() argument
599 BT_DBG("dlc %p state %ld", d, d->state); in __rfcomm_dlc_unthrottle()
601 if (!d->cfc) { in __rfcomm_dlc_unthrottle()
602 d->v24_sig &= ~RFCOMM_V24_FC; in __rfcomm_dlc_unthrottle()
603 set_bit(RFCOMM_MSC_PENDING, &d->flags); in __rfcomm_dlc_unthrottle()
613 int rfcomm_dlc_set_modem_status(struct rfcomm_dlc *d, u8 v24_sig) in rfcomm_dlc_set_modem_status() argument
616 d, d->state, v24_sig); in rfcomm_dlc_set_modem_status()
618 if (test_bit(RFCOMM_RX_THROTTLED, &d->flags)) in rfcomm_dlc_set_modem_status()
623 d->v24_sig = v24_sig; in rfcomm_dlc_set_modem_status()
625 if (!test_and_set_bit(RFCOMM_MSC_PENDING, &d->flags)) in rfcomm_dlc_set_modem_status()
631 int rfcomm_dlc_get_modem_status(struct rfcomm_dlc *d, u8 *v24_sig) in rfcomm_dlc_get_modem_status() argument
634 d, d->state, d->v24_sig); in rfcomm_dlc_get_modem_status()
636 *v24_sig = d->v24_sig; in rfcomm_dlc_get_modem_status()
707 struct rfcomm_dlc *d, *n; in rfcomm_session_close() local
711 BT_DBG("session %p state %ld err %d", s, s->state, err); in rfcomm_session_close()
714 list_for_each_entry_safe(d, n, &s->dlcs, list) { in rfcomm_session_close()
715 d->state = BT_CLOSED; in rfcomm_session_close()
716 __rfcomm_dlc_close(d, err); in rfcomm_session_close()
797 BT_DBG("session %p len %d", s, len); in rfcomm_send_frame()
815 BT_DBG("%p dlci %d", s, dlci); in rfcomm_send_sabm()
829 BT_DBG("%p dlci %d", s, dlci); in rfcomm_send_ua()
843 BT_DBG("%p dlci %d", s, dlci); in rfcomm_send_disc()
853 static int rfcomm_queue_disc(struct rfcomm_dlc *d) in rfcomm_queue_disc() argument
858 BT_DBG("dlc %p dlci %d", d, d->dlci); in rfcomm_queue_disc()
865 cmd->addr = d->addr; in rfcomm_queue_disc()
870 skb_queue_tail(&d->tx_queue, skb); in rfcomm_queue_disc()
879 BT_DBG("%p dlci %d", s, dlci); in rfcomm_send_dm()
895 BT_DBG("%p cr %d type %d", s, cr, type); in rfcomm_send_nsc()
914 static int rfcomm_send_pn(struct rfcomm_session *s, int cr, struct rfcomm_dlc *d) in rfcomm_send_pn() argument
921 BT_DBG("%p cr %d dlci %d mtu %d", s, cr, d->dlci, d->mtu); in rfcomm_send_pn()
933 pn->dlci = d->dlci; in rfcomm_send_pn()
934 pn->priority = d->priority; in rfcomm_send_pn()
949 pn->mtu = cpu_to_le16(d->mtu); in rfcomm_send_pn()
966 BT_DBG("%p cr %d dlci %d bit_r 0x%x data_b 0x%x stop_b 0x%x parity 0x%x" in rfcomm_send_rpn()
1001 BT_DBG("%p cr %d status 0x%x", s, cr, status); in rfcomm_send_rls()
1028 BT_DBG("%p cr %d v24 0x%x", s, cr, v24_sig); in rfcomm_send_msc()
1054 BT_DBG("%p cr %d", s, cr); in rfcomm_send_fcoff()
1076 BT_DBG("%p cr %d", s, cr); in rfcomm_send_fcon()
1102 BT_DBG("%p cr %d", s, cr); in rfcomm_send_test()
1129 BT_DBG("%p addr %d credits %d", s, addr, credits); in rfcomm_send_credits()
1166 BT_DBG("session %p state %ld dlci %d", s, s->state, dlci); in rfcomm_recv_ua()
1170 struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci); in rfcomm_recv_ua() local
1171 if (!d) { in rfcomm_recv_ua()
1176 switch (d->state) { in rfcomm_recv_ua()
1178 rfcomm_dlc_clear_timer(d); in rfcomm_recv_ua()
1180 rfcomm_dlc_lock(d); in rfcomm_recv_ua()
1181 d->state = BT_CONNECTED; in rfcomm_recv_ua()
1182 d->state_change(d, 0); in rfcomm_recv_ua()
1183 rfcomm_dlc_unlock(d); in rfcomm_recv_ua()
1185 rfcomm_send_msc(s, 1, dlci, d->v24_sig); in rfcomm_recv_ua()
1189 d->state = BT_CLOSED; in rfcomm_recv_ua()
1190 __rfcomm_dlc_close(d, 0); in rfcomm_recv_ua()
1220 BT_DBG("session %p state %ld dlci %d", s, s->state, dlci); in rfcomm_recv_dm()
1224 struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci); in rfcomm_recv_dm() local
1225 if (d) { in rfcomm_recv_dm()
1226 if (d->state == BT_CONNECT || d->state == BT_CONFIG) in rfcomm_recv_dm()
1231 d->state = BT_CLOSED; in rfcomm_recv_dm()
1232 __rfcomm_dlc_close(d, err); in rfcomm_recv_dm()
1250 BT_DBG("session %p state %ld dlci %d", s, s->state, dlci); in rfcomm_recv_disc()
1253 struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci); in rfcomm_recv_disc() local
1254 if (d) { in rfcomm_recv_disc()
1257 if (d->state == BT_CONNECT || d->state == BT_CONFIG) in rfcomm_recv_disc()
1262 d->state = BT_CLOSED; in rfcomm_recv_disc()
1263 __rfcomm_dlc_close(d, err); in rfcomm_recv_disc()
1280 void rfcomm_dlc_accept(struct rfcomm_dlc *d) in rfcomm_dlc_accept() argument
1282 struct sock *sk = d->session->sock->sk; in rfcomm_dlc_accept()
1285 BT_DBG("dlc %p", d); in rfcomm_dlc_accept()
1287 rfcomm_send_ua(d->session, d->dlci); in rfcomm_dlc_accept()
1289 rfcomm_dlc_clear_timer(d); in rfcomm_dlc_accept()
1291 rfcomm_dlc_lock(d); in rfcomm_dlc_accept()
1292 d->state = BT_CONNECTED; in rfcomm_dlc_accept()
1293 d->state_change(d, 0); in rfcomm_dlc_accept()
1294 rfcomm_dlc_unlock(d); in rfcomm_dlc_accept()
1296 if (d->role_switch) in rfcomm_dlc_accept()
1299 rfcomm_send_msc(d->session, 1, d->dlci, d->v24_sig); in rfcomm_dlc_accept()
1302 static void rfcomm_check_accept(struct rfcomm_dlc *d) in rfcomm_check_accept() argument
1304 if (rfcomm_check_security(d)) { in rfcomm_check_accept()
1305 if (d->defer_setup) { in rfcomm_check_accept()
1306 set_bit(RFCOMM_DEFER_SETUP, &d->flags); in rfcomm_check_accept()
1307 rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT); in rfcomm_check_accept()
1309 rfcomm_dlc_lock(d); in rfcomm_check_accept()
1310 d->state = BT_CONNECT2; in rfcomm_check_accept()
1311 d->state_change(d, 0); in rfcomm_check_accept()
1312 rfcomm_dlc_unlock(d); in rfcomm_check_accept()
1314 rfcomm_dlc_accept(d); in rfcomm_check_accept()
1316 set_bit(RFCOMM_AUTH_PENDING, &d->flags); in rfcomm_check_accept()
1317 rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT); in rfcomm_check_accept()
1323 struct rfcomm_dlc *d; in rfcomm_recv_sabm() local
1326 BT_DBG("session %p state %ld dlci %d", s, s->state, dlci); in rfcomm_recv_sabm()
1339 d = rfcomm_dlc_get(s, dlci); in rfcomm_recv_sabm()
1340 if (d) { in rfcomm_recv_sabm()
1341 if (d->state == BT_OPEN) { in rfcomm_recv_sabm()
1343 rfcomm_check_accept(d); in rfcomm_recv_sabm()
1350 if (rfcomm_connect_ind(s, channel, &d)) { in rfcomm_recv_sabm()
1351 d->dlci = dlci; in rfcomm_recv_sabm()
1352 d->addr = __addr(s->initiator, dlci); in rfcomm_recv_sabm()
1353 rfcomm_dlc_link(s, d); in rfcomm_recv_sabm()
1355 rfcomm_check_accept(d); in rfcomm_recv_sabm()
1363 static int rfcomm_apply_pn(struct rfcomm_dlc *d, int cr, struct rfcomm_pn *pn) in rfcomm_apply_pn() argument
1365 struct rfcomm_session *s = d->session; in rfcomm_apply_pn()
1367 BT_DBG("dlc %p state %ld dlci %d mtu %d fc 0x%x credits %d", in rfcomm_apply_pn()
1368 d, d->state, d->dlci, pn->mtu, pn->flow_ctrl, pn->credits); in rfcomm_apply_pn()
1372 d->cfc = RFCOMM_CFC_ENABLED; in rfcomm_apply_pn()
1373 d->tx_credits = pn->credits; in rfcomm_apply_pn()
1375 d->cfc = RFCOMM_CFC_DISABLED; in rfcomm_apply_pn()
1376 set_bit(RFCOMM_TX_THROTTLED, &d->flags); in rfcomm_apply_pn()
1380 s->cfc = d->cfc; in rfcomm_apply_pn()
1382 d->priority = pn->priority; in rfcomm_apply_pn()
1384 d->mtu = __le16_to_cpu(pn->mtu); in rfcomm_apply_pn()
1386 if (cr && d->mtu > s->mtu) in rfcomm_apply_pn()
1387 d->mtu = s->mtu; in rfcomm_apply_pn()
1395 struct rfcomm_dlc *d; in rfcomm_recv_pn() local
1398 BT_DBG("session %p state %ld dlci %d", s, s->state, dlci); in rfcomm_recv_pn()
1403 d = rfcomm_dlc_get(s, dlci); in rfcomm_recv_pn()
1404 if (d) { in rfcomm_recv_pn()
1407 rfcomm_apply_pn(d, cr, pn); in rfcomm_recv_pn()
1408 rfcomm_send_pn(s, 0, d); in rfcomm_recv_pn()
1411 switch (d->state) { in rfcomm_recv_pn()
1413 rfcomm_apply_pn(d, cr, pn); in rfcomm_recv_pn()
1415 d->state = BT_CONNECT; in rfcomm_recv_pn()
1416 rfcomm_send_sabm(s, d->dlci); in rfcomm_recv_pn()
1428 if (rfcomm_connect_ind(s, channel, &d)) { in rfcomm_recv_pn()
1429 d->dlci = dlci; in rfcomm_recv_pn()
1430 d->addr = __addr(s->initiator, dlci); in rfcomm_recv_pn()
1431 rfcomm_dlc_link(s, d); in rfcomm_recv_pn()
1433 rfcomm_apply_pn(d, cr, pn); in rfcomm_recv_pn()
1435 d->state = BT_OPEN; in rfcomm_recv_pn()
1436 rfcomm_send_pn(s, 0, d); in rfcomm_recv_pn()
1458 BT_DBG("dlci %d cr %d len 0x%x bitr 0x%x line 0x%x flow 0x%x xonc 0x%x xoffc 0x%x pm 0x%x", in rfcomm_recv_rpn()
1555 BT_DBG("dlci %d cr %d status 0x%x", dlci, cr, rls->status); in rfcomm_recv_rls()
1572 struct rfcomm_dlc *d; in rfcomm_recv_msc() local
1575 BT_DBG("dlci %d cr %d v24 0x%x", dlci, cr, msc->v24_sig); in rfcomm_recv_msc()
1577 d = rfcomm_dlc_get(s, dlci); in rfcomm_recv_msc()
1578 if (!d) in rfcomm_recv_msc()
1582 if (msc->v24_sig & RFCOMM_V24_FC && !d->cfc) in rfcomm_recv_msc()
1583 set_bit(RFCOMM_TX_THROTTLED, &d->flags); in rfcomm_recv_msc()
1585 clear_bit(RFCOMM_TX_THROTTLED, &d->flags); in rfcomm_recv_msc()
1587 rfcomm_dlc_lock(d); in rfcomm_recv_msc()
1589 d->remote_v24_sig = msc->v24_sig; in rfcomm_recv_msc()
1591 if (d->modem_status) in rfcomm_recv_msc()
1592 d->modem_status(d, msc->v24_sig); in rfcomm_recv_msc()
1594 rfcomm_dlc_unlock(d); in rfcomm_recv_msc()
1598 d->mscex |= RFCOMM_MSCEX_RX; in rfcomm_recv_msc()
1600 d->mscex |= RFCOMM_MSCEX_TX; in rfcomm_recv_msc()
1614 BT_DBG("%p type 0x%x cr %d", s, type, cr); in rfcomm_recv_mcc()
1667 struct rfcomm_dlc *d; in rfcomm_recv_data() local
1669 BT_DBG("session %p state %ld dlci %d pf %d", s, s->state, dlci, pf); in rfcomm_recv_data()
1671 d = rfcomm_dlc_get(s, dlci); in rfcomm_recv_data()
1672 if (!d) { in rfcomm_recv_data()
1677 if (pf && d->cfc) { in rfcomm_recv_data()
1680 d->tx_credits += credits; in rfcomm_recv_data()
1681 if (d->tx_credits) in rfcomm_recv_data()
1682 clear_bit(RFCOMM_TX_THROTTLED, &d->flags); in rfcomm_recv_data()
1685 if (skb->len && d->state == BT_CONNECTED) { in rfcomm_recv_data()
1686 rfcomm_dlc_lock(d); in rfcomm_recv_data()
1687 d->rx_credits--; in rfcomm_recv_data()
1688 d->data_ready(d, skb); in rfcomm_recv_data()
1689 rfcomm_dlc_unlock(d); in rfcomm_recv_data()
1768 struct rfcomm_dlc *d, *n; in rfcomm_process_connect() local
1772 list_for_each_entry_safe(d, n, &s->dlcs, list) { in rfcomm_process_connect()
1773 if (d->state == BT_CONFIG) { in rfcomm_process_connect()
1774 d->mtu = s->mtu; in rfcomm_process_connect()
1775 if (rfcomm_check_security(d)) { in rfcomm_process_connect()
1776 rfcomm_send_pn(s, 1, d); in rfcomm_process_connect()
1778 set_bit(RFCOMM_AUTH_PENDING, &d->flags); in rfcomm_process_connect()
1779 rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT); in rfcomm_process_connect()
1788 static int rfcomm_process_tx(struct rfcomm_dlc *d) in rfcomm_process_tx() argument
1793 BT_DBG("dlc %p state %ld cfc %d rx_credits %d tx_credits %d", in rfcomm_process_tx()
1794 d, d->state, d->cfc, d->rx_credits, d->tx_credits); in rfcomm_process_tx()
1797 if (test_and_clear_bit(RFCOMM_MSC_PENDING, &d->flags)) in rfcomm_process_tx()
1798 rfcomm_send_msc(d->session, 1, d->dlci, d->v24_sig); in rfcomm_process_tx()
1800 if (d->cfc) { in rfcomm_process_tx()
1803 if (!test_bit(RFCOMM_RX_THROTTLED, &d->flags) && in rfcomm_process_tx()
1804 d->rx_credits <= (d->cfc >> 2)) { in rfcomm_process_tx()
1805 rfcomm_send_credits(d->session, d->addr, d->cfc - d->rx_credits); in rfcomm_process_tx()
1806 d->rx_credits = d->cfc; in rfcomm_process_tx()
1811 d->tx_credits = 5; in rfcomm_process_tx()
1814 if (test_bit(RFCOMM_TX_THROTTLED, &d->flags)) in rfcomm_process_tx()
1815 return skb_queue_len(&d->tx_queue); in rfcomm_process_tx()
1817 while (d->tx_credits && (skb = skb_dequeue(&d->tx_queue))) { in rfcomm_process_tx()
1818 err = rfcomm_send_frame(d->session, skb->data, skb->len); in rfcomm_process_tx()
1820 skb_queue_head(&d->tx_queue, skb); in rfcomm_process_tx()
1824 d->tx_credits--; in rfcomm_process_tx()
1827 if (d->cfc && !d->tx_credits) { in rfcomm_process_tx()
1830 set_bit(RFCOMM_TX_THROTTLED, &d->flags); in rfcomm_process_tx()
1833 return skb_queue_len(&d->tx_queue); in rfcomm_process_tx()
1838 struct rfcomm_dlc *d, *n; in rfcomm_process_dlcs() local
1842 list_for_each_entry_safe(d, n, &s->dlcs, list) { in rfcomm_process_dlcs()
1843 if (test_bit(RFCOMM_TIMED_OUT, &d->flags)) { in rfcomm_process_dlcs()
1844 __rfcomm_dlc_close(d, ETIMEDOUT); in rfcomm_process_dlcs()
1848 if (test_bit(RFCOMM_ENC_DROP, &d->flags)) { in rfcomm_process_dlcs()
1849 __rfcomm_dlc_close(d, ECONNREFUSED); in rfcomm_process_dlcs()
1853 if (test_and_clear_bit(RFCOMM_AUTH_ACCEPT, &d->flags)) { in rfcomm_process_dlcs()
1854 rfcomm_dlc_clear_timer(d); in rfcomm_process_dlcs()
1855 if (d->out) { in rfcomm_process_dlcs()
1856 rfcomm_send_pn(s, 1, d); in rfcomm_process_dlcs()
1857 rfcomm_dlc_set_timer(d, RFCOMM_CONN_TIMEOUT); in rfcomm_process_dlcs()
1859 if (d->defer_setup) { in rfcomm_process_dlcs()
1860 set_bit(RFCOMM_DEFER_SETUP, &d->flags); in rfcomm_process_dlcs()
1861 rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT); in rfcomm_process_dlcs()
1863 rfcomm_dlc_lock(d); in rfcomm_process_dlcs()
1864 d->state = BT_CONNECT2; in rfcomm_process_dlcs()
1865 d->state_change(d, 0); in rfcomm_process_dlcs()
1866 rfcomm_dlc_unlock(d); in rfcomm_process_dlcs()
1868 rfcomm_dlc_accept(d); in rfcomm_process_dlcs()
1871 } else if (test_and_clear_bit(RFCOMM_AUTH_REJECT, &d->flags)) { in rfcomm_process_dlcs()
1872 rfcomm_dlc_clear_timer(d); in rfcomm_process_dlcs()
1873 if (!d->out) in rfcomm_process_dlcs()
1874 rfcomm_send_dm(s, d->dlci); in rfcomm_process_dlcs()
1876 d->state = BT_CLOSED; in rfcomm_process_dlcs()
1877 __rfcomm_dlc_close(d, ECONNREFUSED); in rfcomm_process_dlcs()
1881 if (test_bit(RFCOMM_SEC_PENDING, &d->flags)) in rfcomm_process_dlcs()
1887 if ((d->state == BT_CONNECTED || d->state == BT_DISCONN) && in rfcomm_process_dlcs()
1888 d->mscex == RFCOMM_MSCEX_OK) in rfcomm_process_dlcs()
1889 rfcomm_process_tx(d); in rfcomm_process_dlcs()
1899 BT_DBG("session %p state %ld qlen %d", s, s->state, skb_queue_len(&sk->sk_receive_queue)); in rfcomm_process_rx()
2020 BT_ERR("Create socket failed %d", err); in rfcomm_add_listener()
2032 BT_ERR("Bind failed %d", err); in rfcomm_add_listener()
2046 BT_ERR("Listen failed %d", err); in rfcomm_add_listener()
2100 struct rfcomm_dlc *d, *n; in rfcomm_security_cfm() local
2108 list_for_each_entry_safe(d, n, &s->dlcs, list) { in rfcomm_security_cfm()
2109 if (test_and_clear_bit(RFCOMM_SEC_PENDING, &d->flags)) { in rfcomm_security_cfm()
2110 rfcomm_dlc_clear_timer(d); in rfcomm_security_cfm()
2112 set_bit(RFCOMM_ENC_DROP, &d->flags); in rfcomm_security_cfm()
2117 if (d->state == BT_CONNECTED && !status && encrypt == 0x00) { in rfcomm_security_cfm()
2118 if (d->sec_level == BT_SECURITY_MEDIUM) { in rfcomm_security_cfm()
2119 set_bit(RFCOMM_SEC_PENDING, &d->flags); in rfcomm_security_cfm()
2120 rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT); in rfcomm_security_cfm()
2122 } else if (d->sec_level == BT_SECURITY_HIGH || in rfcomm_security_cfm()
2123 d->sec_level == BT_SECURITY_FIPS) { in rfcomm_security_cfm()
2124 set_bit(RFCOMM_ENC_DROP, &d->flags); in rfcomm_security_cfm()
2129 if (!test_and_clear_bit(RFCOMM_AUTH_PENDING, &d->flags)) in rfcomm_security_cfm()
2132 if (!status && hci_conn_check_secure(conn, d->sec_level)) in rfcomm_security_cfm()
2133 set_bit(RFCOMM_AUTH_ACCEPT, &d->flags); in rfcomm_security_cfm()
2135 set_bit(RFCOMM_AUTH_REJECT, &d->flags); in rfcomm_security_cfm()
2154 struct rfcomm_dlc *d; in rfcomm_dlc_debugfs_show() local
2155 list_for_each_entry(d, &s->dlcs, list) { in rfcomm_dlc_debugfs_show()
2156 seq_printf(f, "%pMR %pMR %ld %d %d %d %d\n", in rfcomm_dlc_debugfs_show()
2158 d->state, d->dlci, d->mtu, in rfcomm_dlc_debugfs_show()
2159 d->rx_credits, d->tx_credits); in rfcomm_dlc_debugfs_show()