Lines Matching full:d
71 static int rfcomm_queue_disc(struct rfcomm_dlc *d);
73 static int rfcomm_send_pn(struct rfcomm_session *s, int cr, struct rfcomm_dlc *d);
205 BT_DBG("%p state %d", sk, sk->sk_state); in rfcomm_l2state_change()
211 BT_DBG("%p bytes %d", sk, bytes); in rfcomm_l2data_ready()
230 static inline int rfcomm_check_security(struct rfcomm_dlc *d) in rfcomm_check_security() argument
232 struct sock *sk = d->session->sock->sk; in rfcomm_check_security()
237 switch (d->sec_level) { in rfcomm_check_security()
249 return hci_conn_security(conn->hcon, d->sec_level, auth_type); in rfcomm_check_security()
281 struct rfcomm_dlc *d = (void *) arg; in rfcomm_dlc_timeout() local
283 BT_DBG("dlc %p state %ld", d, d->state); in rfcomm_dlc_timeout()
285 set_bit(RFCOMM_TIMED_OUT, &d->flags); in rfcomm_dlc_timeout()
286 rfcomm_dlc_put(d); in rfcomm_dlc_timeout()
290 static void rfcomm_dlc_set_timer(struct rfcomm_dlc *d, long timeout) in rfcomm_dlc_set_timer() argument
292 BT_DBG("dlc %p state %ld timeout %ld", d, d->state, timeout); in rfcomm_dlc_set_timer()
294 if (!mod_timer(&d->timer, jiffies + timeout)) in rfcomm_dlc_set_timer()
295 rfcomm_dlc_hold(d); in rfcomm_dlc_set_timer()
298 static void rfcomm_dlc_clear_timer(struct rfcomm_dlc *d) in rfcomm_dlc_clear_timer() argument
300 BT_DBG("dlc %p state %ld", d, d->state); in rfcomm_dlc_clear_timer()
302 if (timer_pending(&d->timer) && del_timer(&d->timer)) in rfcomm_dlc_clear_timer()
303 rfcomm_dlc_put(d); in rfcomm_dlc_clear_timer()
306 static void rfcomm_dlc_clear_state(struct rfcomm_dlc *d) in rfcomm_dlc_clear_state() argument
308 BT_DBG("%p", d); in rfcomm_dlc_clear_state()
310 d->state = BT_OPEN; in rfcomm_dlc_clear_state()
311 d->flags = 0; in rfcomm_dlc_clear_state()
312 d->mscex = 0; in rfcomm_dlc_clear_state()
313 d->sec_level = BT_SECURITY_LOW; in rfcomm_dlc_clear_state()
314 d->mtu = RFCOMM_DEFAULT_MTU; in rfcomm_dlc_clear_state()
315 d->v24_sig = RFCOMM_V24_RTC | RFCOMM_V24_RTR | RFCOMM_V24_DV; in rfcomm_dlc_clear_state()
317 d->cfc = RFCOMM_CFC_DISABLED; in rfcomm_dlc_clear_state()
318 d->rx_credits = RFCOMM_DEFAULT_CREDITS; in rfcomm_dlc_clear_state()
323 struct rfcomm_dlc *d = kzalloc(sizeof(*d), prio); in rfcomm_dlc_alloc() local
325 if (!d) in rfcomm_dlc_alloc()
328 setup_timer(&d->timer, rfcomm_dlc_timeout, (unsigned long)d); in rfcomm_dlc_alloc()
330 skb_queue_head_init(&d->tx_queue); in rfcomm_dlc_alloc()
331 spin_lock_init(&d->lock); in rfcomm_dlc_alloc()
332 atomic_set(&d->refcnt, 1); in rfcomm_dlc_alloc()
334 rfcomm_dlc_clear_state(d); in rfcomm_dlc_alloc()
336 BT_DBG("%p", d); in rfcomm_dlc_alloc()
338 return d; in rfcomm_dlc_alloc()
341 void rfcomm_dlc_free(struct rfcomm_dlc *d) in rfcomm_dlc_free() argument
343 BT_DBG("%p", d); in rfcomm_dlc_free()
345 skb_queue_purge(&d->tx_queue); in rfcomm_dlc_free()
346 kfree(d); in rfcomm_dlc_free()
349 static void rfcomm_dlc_link(struct rfcomm_session *s, struct rfcomm_dlc *d) in rfcomm_dlc_link() argument
351 BT_DBG("dlc %p session %p", d, s); in rfcomm_dlc_link()
356 rfcomm_dlc_hold(d); in rfcomm_dlc_link()
357 list_add(&d->list, &s->dlcs); in rfcomm_dlc_link()
358 d->session = s; in rfcomm_dlc_link()
361 static void rfcomm_dlc_unlink(struct rfcomm_dlc *d) in rfcomm_dlc_unlink() argument
363 struct rfcomm_session *s = d->session; in rfcomm_dlc_unlink()
365 BT_DBG("dlc %p refcnt %d session %p", d, atomic_read(&d->refcnt), s); in rfcomm_dlc_unlink()
367 list_del(&d->list); in rfcomm_dlc_unlink()
368 d->session = NULL; in rfcomm_dlc_unlink()
369 rfcomm_dlc_put(d); in rfcomm_dlc_unlink()
379 struct rfcomm_dlc *d; in rfcomm_dlc_get() local
381 list_for_each_entry(d, &s->dlcs, list) in rfcomm_dlc_get()
382 if (d->dlci == dlci) in rfcomm_dlc_get()
383 return d; in rfcomm_dlc_get()
388 static int __rfcomm_dlc_open(struct rfcomm_dlc *d, bdaddr_t *src, bdaddr_t *dst, u8 channel) in __rfcomm_dlc_open() argument
394 BT_DBG("dlc %p state %ld %s %s channel %d", in __rfcomm_dlc_open()
395 d, d->state, batostr(src), batostr(dst), channel); in __rfcomm_dlc_open()
400 if (d->state != BT_OPEN && d->state != BT_CLOSED) in __rfcomm_dlc_open()
405 s = rfcomm_session_create(src, dst, d->sec_level, &err); in __rfcomm_dlc_open()
416 rfcomm_dlc_clear_state(d); in __rfcomm_dlc_open()
418 d->dlci = dlci; in __rfcomm_dlc_open()
419 d->addr = __addr(s->initiator, dlci); in __rfcomm_dlc_open()
420 d->priority = 7; in __rfcomm_dlc_open()
422 d->state = BT_CONFIG; in __rfcomm_dlc_open()
423 rfcomm_dlc_link(s, d); in __rfcomm_dlc_open()
425 d->out = 1; in __rfcomm_dlc_open()
427 d->mtu = s->mtu; in __rfcomm_dlc_open()
428 d->cfc = (s->cfc == RFCOMM_CFC_UNKNOWN) ? 0 : s->cfc; in __rfcomm_dlc_open()
431 if (rfcomm_check_security(d)) in __rfcomm_dlc_open()
432 rfcomm_send_pn(s, 1, d); in __rfcomm_dlc_open()
434 set_bit(RFCOMM_AUTH_PENDING, &d->flags); in __rfcomm_dlc_open()
437 rfcomm_dlc_set_timer(d, RFCOMM_CONN_TIMEOUT); in __rfcomm_dlc_open()
442 int rfcomm_dlc_open(struct rfcomm_dlc *d, bdaddr_t *src, bdaddr_t *dst, u8 channel) in rfcomm_dlc_open() argument
448 r = __rfcomm_dlc_open(d, src, dst, channel); in rfcomm_dlc_open()
454 static int __rfcomm_dlc_close(struct rfcomm_dlc *d, int err) in __rfcomm_dlc_close() argument
456 struct rfcomm_session *s = d->session; in __rfcomm_dlc_close()
460 BT_DBG("dlc %p state %ld dlci %d err %d session %p", in __rfcomm_dlc_close()
461 d, d->state, d->dlci, err, s); in __rfcomm_dlc_close()
463 switch (d->state) { in __rfcomm_dlc_close()
466 if (test_and_clear_bit(RFCOMM_DEFER_SETUP, &d->flags)) { in __rfcomm_dlc_close()
467 set_bit(RFCOMM_AUTH_REJECT, &d->flags); in __rfcomm_dlc_close()
474 d->state = BT_DISCONN; in __rfcomm_dlc_close()
475 if (skb_queue_empty(&d->tx_queue)) { in __rfcomm_dlc_close()
476 rfcomm_send_disc(s, d->dlci); in __rfcomm_dlc_close()
477 rfcomm_dlc_set_timer(d, RFCOMM_DISC_TIMEOUT); in __rfcomm_dlc_close()
479 rfcomm_queue_disc(d); in __rfcomm_dlc_close()
480 rfcomm_dlc_set_timer(d, RFCOMM_DISC_TIMEOUT * 2); in __rfcomm_dlc_close()
486 if (test_and_clear_bit(RFCOMM_DEFER_SETUP, &d->flags)) { in __rfcomm_dlc_close()
487 set_bit(RFCOMM_AUTH_REJECT, &d->flags); in __rfcomm_dlc_close()
494 rfcomm_dlc_clear_timer(d); in __rfcomm_dlc_close()
496 rfcomm_dlc_lock(d); in __rfcomm_dlc_close()
497 d->state = BT_CLOSED; in __rfcomm_dlc_close()
498 d->state_change(d, err); in __rfcomm_dlc_close()
499 rfcomm_dlc_unlock(d); in __rfcomm_dlc_close()
501 skb_queue_purge(&d->tx_queue); in __rfcomm_dlc_close()
502 rfcomm_dlc_unlink(d); in __rfcomm_dlc_close()
508 int rfcomm_dlc_close(struct rfcomm_dlc *d, int err) in rfcomm_dlc_close() argument
514 r = __rfcomm_dlc_close(d, err); in rfcomm_dlc_close()
520 int rfcomm_dlc_send(struct rfcomm_dlc *d, struct sk_buff *skb) in rfcomm_dlc_send() argument
524 if (d->state != BT_CONNECTED) in rfcomm_dlc_send()
527 BT_DBG("dlc %p mtu %d len %d", d, d->mtu, len); in rfcomm_dlc_send()
529 if (len > d->mtu) in rfcomm_dlc_send()
532 rfcomm_make_uih(skb, d->addr); in rfcomm_dlc_send()
533 skb_queue_tail(&d->tx_queue, skb); in rfcomm_dlc_send()
535 if (!test_bit(RFCOMM_TX_THROTTLED, &d->flags)) in rfcomm_dlc_send()
540 void __rfcomm_dlc_throttle(struct rfcomm_dlc *d) in __rfcomm_dlc_throttle() argument
542 BT_DBG("dlc %p state %ld", d, d->state); in __rfcomm_dlc_throttle()
544 if (!d->cfc) { in __rfcomm_dlc_throttle()
545 d->v24_sig |= RFCOMM_V24_FC; in __rfcomm_dlc_throttle()
546 set_bit(RFCOMM_MSC_PENDING, &d->flags); in __rfcomm_dlc_throttle()
551 void __rfcomm_dlc_unthrottle(struct rfcomm_dlc *d) in __rfcomm_dlc_unthrottle() argument
553 BT_DBG("dlc %p state %ld", d, d->state); in __rfcomm_dlc_unthrottle()
555 if (!d->cfc) { in __rfcomm_dlc_unthrottle()
556 d->v24_sig &= ~RFCOMM_V24_FC; in __rfcomm_dlc_unthrottle()
557 set_bit(RFCOMM_MSC_PENDING, &d->flags); in __rfcomm_dlc_unthrottle()
567 int rfcomm_dlc_set_modem_status(struct rfcomm_dlc *d, u8 v24_sig) in rfcomm_dlc_set_modem_status() argument
570 d, d->state, v24_sig); in rfcomm_dlc_set_modem_status()
572 if (test_bit(RFCOMM_RX_THROTTLED, &d->flags)) in rfcomm_dlc_set_modem_status()
577 d->v24_sig = v24_sig; in rfcomm_dlc_set_modem_status()
579 if (!test_and_set_bit(RFCOMM_MSC_PENDING, &d->flags)) in rfcomm_dlc_set_modem_status()
585 int rfcomm_dlc_get_modem_status(struct rfcomm_dlc *d, u8 *v24_sig) in rfcomm_dlc_get_modem_status() argument
588 d, d->state, d->v24_sig); in rfcomm_dlc_get_modem_status()
590 *v24_sig = d->v24_sig; in rfcomm_dlc_get_modem_status()
663 struct rfcomm_dlc *d; in rfcomm_session_close() local
666 BT_DBG("session %p state %ld err %d", s, s->state, err); in rfcomm_session_close()
674 d = list_entry(p, struct rfcomm_dlc, list); in rfcomm_session_close()
675 d->state = BT_CLOSED; in rfcomm_session_close()
676 __rfcomm_dlc_close(d, err); in rfcomm_session_close()
755 BT_DBG("session %p len %d", s, len); in rfcomm_send_frame()
773 BT_DBG("%p dlci %d", s, dlci); in rfcomm_send_sabm()
787 BT_DBG("%p dlci %d", s, dlci); in rfcomm_send_ua()
801 BT_DBG("%p dlci %d", s, dlci); in rfcomm_send_disc()
811 static int rfcomm_queue_disc(struct rfcomm_dlc *d) in rfcomm_queue_disc() argument
816 BT_DBG("dlc %p dlci %d", d, d->dlci); in rfcomm_queue_disc()
823 cmd->addr = d->addr; in rfcomm_queue_disc()
828 skb_queue_tail(&d->tx_queue, skb); in rfcomm_queue_disc()
837 BT_DBG("%p dlci %d", s, dlci); in rfcomm_send_dm()
853 BT_DBG("%p cr %d type %d", s, cr, type); in rfcomm_send_nsc()
872 static int rfcomm_send_pn(struct rfcomm_session *s, int cr, struct rfcomm_dlc *d) in rfcomm_send_pn() argument
879 BT_DBG("%p cr %d dlci %d mtu %d", s, cr, d->dlci, d->mtu); in rfcomm_send_pn()
891 pn->dlci = d->dlci; in rfcomm_send_pn()
892 pn->priority = d->priority; in rfcomm_send_pn()
907 pn->mtu = cpu_to_le16(d->mtu); in rfcomm_send_pn()
924 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()
959 BT_DBG("%p cr %d status 0x%x", s, cr, status); in rfcomm_send_rls()
986 BT_DBG("%p cr %d v24 0x%x", s, cr, v24_sig); in rfcomm_send_msc()
1012 BT_DBG("%p cr %d", s, cr); in rfcomm_send_fcoff()
1034 BT_DBG("%p cr %d", s, cr); in rfcomm_send_fcon()
1060 BT_DBG("%p cr %d", s, cr); in rfcomm_send_test()
1087 BT_DBG("%p addr %d credits %d", s, addr, credits); in rfcomm_send_credits()
1124 BT_DBG("session %p state %ld dlci %d", s, s->state, dlci); in rfcomm_recv_ua()
1128 struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci); in rfcomm_recv_ua() local
1129 if (!d) { in rfcomm_recv_ua()
1134 switch (d->state) { in rfcomm_recv_ua()
1136 rfcomm_dlc_clear_timer(d); in rfcomm_recv_ua()
1138 rfcomm_dlc_lock(d); in rfcomm_recv_ua()
1139 d->state = BT_CONNECTED; in rfcomm_recv_ua()
1140 d->state_change(d, 0); in rfcomm_recv_ua()
1141 rfcomm_dlc_unlock(d); in rfcomm_recv_ua()
1143 rfcomm_send_msc(s, 1, dlci, d->v24_sig); in rfcomm_recv_ua()
1147 d->state = BT_CLOSED; in rfcomm_recv_ua()
1148 __rfcomm_dlc_close(d, 0); in rfcomm_recv_ua()
1189 BT_DBG("session %p state %ld dlci %d", s, s->state, dlci); in rfcomm_recv_dm()
1193 struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci); in rfcomm_recv_dm() local
1194 if (d) { in rfcomm_recv_dm()
1195 if (d->state == BT_CONNECT || d->state == BT_CONFIG) in rfcomm_recv_dm()
1200 d->state = BT_CLOSED; in rfcomm_recv_dm()
1201 __rfcomm_dlc_close(d, err); in rfcomm_recv_dm()
1219 BT_DBG("session %p state %ld dlci %d", s, s->state, dlci); in rfcomm_recv_disc()
1222 struct rfcomm_dlc *d = rfcomm_dlc_get(s, dlci); in rfcomm_recv_disc() local
1223 if (d) { in rfcomm_recv_disc()
1226 if (d->state == BT_CONNECT || d->state == BT_CONFIG) in rfcomm_recv_disc()
1231 d->state = BT_CLOSED; in rfcomm_recv_disc()
1232 __rfcomm_dlc_close(d, err); in rfcomm_recv_disc()
1251 void rfcomm_dlc_accept(struct rfcomm_dlc *d) in rfcomm_dlc_accept() argument
1253 struct sock *sk = d->session->sock->sk; in rfcomm_dlc_accept()
1256 BT_DBG("dlc %p", d); in rfcomm_dlc_accept()
1258 rfcomm_send_ua(d->session, d->dlci); in rfcomm_dlc_accept()
1260 rfcomm_dlc_clear_timer(d); in rfcomm_dlc_accept()
1262 rfcomm_dlc_lock(d); in rfcomm_dlc_accept()
1263 d->state = BT_CONNECTED; in rfcomm_dlc_accept()
1264 d->state_change(d, 0); in rfcomm_dlc_accept()
1265 rfcomm_dlc_unlock(d); in rfcomm_dlc_accept()
1267 if (d->role_switch) in rfcomm_dlc_accept()
1270 rfcomm_send_msc(d->session, 1, d->dlci, d->v24_sig); in rfcomm_dlc_accept()
1273 static void rfcomm_check_accept(struct rfcomm_dlc *d) in rfcomm_check_accept() argument
1275 if (rfcomm_check_security(d)) { in rfcomm_check_accept()
1276 if (d->defer_setup) { in rfcomm_check_accept()
1277 set_bit(RFCOMM_DEFER_SETUP, &d->flags); in rfcomm_check_accept()
1278 rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT); in rfcomm_check_accept()
1280 rfcomm_dlc_lock(d); in rfcomm_check_accept()
1281 d->state = BT_CONNECT2; in rfcomm_check_accept()
1282 d->state_change(d, 0); in rfcomm_check_accept()
1283 rfcomm_dlc_unlock(d); in rfcomm_check_accept()
1285 rfcomm_dlc_accept(d); in rfcomm_check_accept()
1287 set_bit(RFCOMM_AUTH_PENDING, &d->flags); in rfcomm_check_accept()
1288 rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT); in rfcomm_check_accept()
1294 struct rfcomm_dlc *d; in rfcomm_recv_sabm() local
1297 BT_DBG("session %p state %ld dlci %d", s, s->state, dlci); in rfcomm_recv_sabm()
1310 d = rfcomm_dlc_get(s, dlci); in rfcomm_recv_sabm()
1311 if (d) { in rfcomm_recv_sabm()
1312 if (d->state == BT_OPEN) { in rfcomm_recv_sabm()
1314 rfcomm_check_accept(d); in rfcomm_recv_sabm()
1321 if (rfcomm_connect_ind(s, channel, &d)) { in rfcomm_recv_sabm()
1322 d->dlci = dlci; in rfcomm_recv_sabm()
1323 d->addr = __addr(s->initiator, dlci); in rfcomm_recv_sabm()
1324 rfcomm_dlc_link(s, d); in rfcomm_recv_sabm()
1326 rfcomm_check_accept(d); in rfcomm_recv_sabm()
1334 static int rfcomm_apply_pn(struct rfcomm_dlc *d, int cr, struct rfcomm_pn *pn) in rfcomm_apply_pn() argument
1336 struct rfcomm_session *s = d->session; in rfcomm_apply_pn()
1338 BT_DBG("dlc %p state %ld dlci %d mtu %d fc 0x%x credits %d", in rfcomm_apply_pn()
1339 d, d->state, d->dlci, pn->mtu, pn->flow_ctrl, pn->credits); in rfcomm_apply_pn()
1343 d->cfc = RFCOMM_CFC_ENABLED; in rfcomm_apply_pn()
1344 d->tx_credits = pn->credits; in rfcomm_apply_pn()
1346 d->cfc = RFCOMM_CFC_DISABLED; in rfcomm_apply_pn()
1347 set_bit(RFCOMM_TX_THROTTLED, &d->flags); in rfcomm_apply_pn()
1351 s->cfc = d->cfc; in rfcomm_apply_pn()
1353 d->priority = pn->priority; in rfcomm_apply_pn()
1355 d->mtu = __le16_to_cpu(pn->mtu); in rfcomm_apply_pn()
1357 if (cr && d->mtu > s->mtu) in rfcomm_apply_pn()
1358 d->mtu = s->mtu; in rfcomm_apply_pn()
1366 struct rfcomm_dlc *d; in rfcomm_recv_pn() local
1369 BT_DBG("session %p state %ld dlci %d", s, s->state, dlci); in rfcomm_recv_pn()
1374 d = rfcomm_dlc_get(s, dlci); in rfcomm_recv_pn()
1375 if (d) { in rfcomm_recv_pn()
1378 rfcomm_apply_pn(d, cr, pn); in rfcomm_recv_pn()
1379 rfcomm_send_pn(s, 0, d); in rfcomm_recv_pn()
1382 switch (d->state) { in rfcomm_recv_pn()
1384 rfcomm_apply_pn(d, cr, pn); in rfcomm_recv_pn()
1386 d->state = BT_CONNECT; in rfcomm_recv_pn()
1387 rfcomm_send_sabm(s, d->dlci); in rfcomm_recv_pn()
1399 if (rfcomm_connect_ind(s, channel, &d)) { in rfcomm_recv_pn()
1400 d->dlci = dlci; in rfcomm_recv_pn()
1401 d->addr = __addr(s->initiator, dlci); in rfcomm_recv_pn()
1402 rfcomm_dlc_link(s, d); in rfcomm_recv_pn()
1404 rfcomm_apply_pn(d, cr, pn); in rfcomm_recv_pn()
1406 d->state = BT_OPEN; in rfcomm_recv_pn()
1407 rfcomm_send_pn(s, 0, d); in rfcomm_recv_pn()
1429 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()
1526 BT_DBG("dlci %d cr %d status 0x%x", dlci, cr, rls->status); in rfcomm_recv_rls()
1543 struct rfcomm_dlc *d; in rfcomm_recv_msc() local
1546 BT_DBG("dlci %d cr %d v24 0x%x", dlci, cr, msc->v24_sig); in rfcomm_recv_msc()
1548 d = rfcomm_dlc_get(s, dlci); in rfcomm_recv_msc()
1549 if (!d) in rfcomm_recv_msc()
1553 if (msc->v24_sig & RFCOMM_V24_FC && !d->cfc) in rfcomm_recv_msc()
1554 set_bit(RFCOMM_TX_THROTTLED, &d->flags); in rfcomm_recv_msc()
1556 clear_bit(RFCOMM_TX_THROTTLED, &d->flags); in rfcomm_recv_msc()
1558 rfcomm_dlc_lock(d); in rfcomm_recv_msc()
1560 d->remote_v24_sig = msc->v24_sig; in rfcomm_recv_msc()
1562 if (d->modem_status) in rfcomm_recv_msc()
1563 d->modem_status(d, msc->v24_sig); in rfcomm_recv_msc()
1565 rfcomm_dlc_unlock(d); in rfcomm_recv_msc()
1569 d->mscex |= RFCOMM_MSCEX_RX; in rfcomm_recv_msc()
1571 d->mscex |= RFCOMM_MSCEX_TX; in rfcomm_recv_msc()
1585 BT_DBG("%p type 0x%x cr %d", s, type, cr); in rfcomm_recv_mcc()
1638 struct rfcomm_dlc *d; in rfcomm_recv_data() local
1640 BT_DBG("session %p state %ld dlci %d pf %d", s, s->state, dlci, pf); in rfcomm_recv_data()
1642 d = rfcomm_dlc_get(s, dlci); in rfcomm_recv_data()
1643 if (!d) { in rfcomm_recv_data()
1648 if (pf && d->cfc) { in rfcomm_recv_data()
1651 d->tx_credits += credits; in rfcomm_recv_data()
1652 if (d->tx_credits) in rfcomm_recv_data()
1653 clear_bit(RFCOMM_TX_THROTTLED, &d->flags); in rfcomm_recv_data()
1656 if (skb->len && d->state == BT_CONNECTED) { in rfcomm_recv_data()
1657 rfcomm_dlc_lock(d); in rfcomm_recv_data()
1658 d->rx_credits--; in rfcomm_recv_data()
1659 d->data_ready(d, skb); in rfcomm_recv_data()
1660 rfcomm_dlc_unlock(d); in rfcomm_recv_data()
1731 struct rfcomm_dlc *d; in rfcomm_process_connect() local
1737 d = list_entry(p, struct rfcomm_dlc, list); in rfcomm_process_connect()
1738 if (d->state == BT_CONFIG) { in rfcomm_process_connect()
1739 d->mtu = s->mtu; in rfcomm_process_connect()
1740 if (rfcomm_check_security(d)) { in rfcomm_process_connect()
1741 rfcomm_send_pn(s, 1, d); in rfcomm_process_connect()
1743 set_bit(RFCOMM_AUTH_PENDING, &d->flags); in rfcomm_process_connect()
1744 rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT); in rfcomm_process_connect()
1753 static inline int rfcomm_process_tx(struct rfcomm_dlc *d) in rfcomm_process_tx() argument
1758 BT_DBG("dlc %p state %ld cfc %d rx_credits %d tx_credits %d", in rfcomm_process_tx()
1759 d, d->state, d->cfc, d->rx_credits, d->tx_credits); in rfcomm_process_tx()
1762 if (test_and_clear_bit(RFCOMM_MSC_PENDING, &d->flags)) in rfcomm_process_tx()
1763 rfcomm_send_msc(d->session, 1, d->dlci, d->v24_sig); in rfcomm_process_tx()
1765 if (d->cfc) { in rfcomm_process_tx()
1768 if (!test_bit(RFCOMM_RX_THROTTLED, &d->flags) && in rfcomm_process_tx()
1769 d->rx_credits <= (d->cfc >> 2)) { in rfcomm_process_tx()
1770 rfcomm_send_credits(d->session, d->addr, d->cfc - d->rx_credits); in rfcomm_process_tx()
1771 d->rx_credits = d->cfc; in rfcomm_process_tx()
1776 d->tx_credits = 5; in rfcomm_process_tx()
1779 if (test_bit(RFCOMM_TX_THROTTLED, &d->flags)) in rfcomm_process_tx()
1780 return skb_queue_len(&d->tx_queue); in rfcomm_process_tx()
1782 while (d->tx_credits && (skb = skb_dequeue(&d->tx_queue))) { in rfcomm_process_tx()
1783 err = rfcomm_send_frame(d->session, skb->data, skb->len); in rfcomm_process_tx()
1785 skb_queue_head(&d->tx_queue, skb); in rfcomm_process_tx()
1789 d->tx_credits--; in rfcomm_process_tx()
1792 if (d->cfc && !d->tx_credits) { in rfcomm_process_tx()
1795 set_bit(RFCOMM_TX_THROTTLED, &d->flags); in rfcomm_process_tx()
1798 return skb_queue_len(&d->tx_queue); in rfcomm_process_tx()
1803 struct rfcomm_dlc *d; in rfcomm_process_dlcs() local
1809 d = list_entry(p, struct rfcomm_dlc, list); in rfcomm_process_dlcs()
1811 if (test_bit(RFCOMM_TIMED_OUT, &d->flags)) { in rfcomm_process_dlcs()
1812 __rfcomm_dlc_close(d, ETIMEDOUT); in rfcomm_process_dlcs()
1816 if (test_bit(RFCOMM_ENC_DROP, &d->flags)) { in rfcomm_process_dlcs()
1817 __rfcomm_dlc_close(d, ECONNREFUSED); in rfcomm_process_dlcs()
1821 if (test_and_clear_bit(RFCOMM_AUTH_ACCEPT, &d->flags)) { in rfcomm_process_dlcs()
1822 rfcomm_dlc_clear_timer(d); in rfcomm_process_dlcs()
1823 if (d->out) { in rfcomm_process_dlcs()
1824 rfcomm_send_pn(s, 1, d); in rfcomm_process_dlcs()
1825 rfcomm_dlc_set_timer(d, RFCOMM_CONN_TIMEOUT); in rfcomm_process_dlcs()
1827 if (d->defer_setup) { in rfcomm_process_dlcs()
1828 set_bit(RFCOMM_DEFER_SETUP, &d->flags); in rfcomm_process_dlcs()
1829 rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT); in rfcomm_process_dlcs()
1831 rfcomm_dlc_lock(d); in rfcomm_process_dlcs()
1832 d->state = BT_CONNECT2; in rfcomm_process_dlcs()
1833 d->state_change(d, 0); in rfcomm_process_dlcs()
1834 rfcomm_dlc_unlock(d); in rfcomm_process_dlcs()
1836 rfcomm_dlc_accept(d); in rfcomm_process_dlcs()
1839 } else if (test_and_clear_bit(RFCOMM_AUTH_REJECT, &d->flags)) { in rfcomm_process_dlcs()
1840 rfcomm_dlc_clear_timer(d); in rfcomm_process_dlcs()
1841 if (!d->out) in rfcomm_process_dlcs()
1842 rfcomm_send_dm(s, d->dlci); in rfcomm_process_dlcs()
1844 d->state = BT_CLOSED; in rfcomm_process_dlcs()
1845 __rfcomm_dlc_close(d, ECONNREFUSED); in rfcomm_process_dlcs()
1849 if (test_bit(RFCOMM_SEC_PENDING, &d->flags)) in rfcomm_process_dlcs()
1855 if ((d->state == BT_CONNECTED || d->state == BT_DISCONN) && in rfcomm_process_dlcs()
1856 d->mscex == RFCOMM_MSCEX_OK) in rfcomm_process_dlcs()
1857 rfcomm_process_tx(d); in rfcomm_process_dlcs()
1867 BT_DBG("session %p state %ld qlen %d", s, s->state, skb_queue_len(&sk->sk_receive_queue)); in rfcomm_process_rx()
1997 BT_ERR("Create socket failed %d", err); in rfcomm_add_listener()
2008 BT_ERR("Bind failed %d", err); in rfcomm_add_listener()
2021 BT_ERR("Listen failed %d", err); in rfcomm_add_listener()
2079 struct rfcomm_dlc *d; in rfcomm_security_cfm() local
2091 d = list_entry(p, struct rfcomm_dlc, list); in rfcomm_security_cfm()
2093 if (test_and_clear_bit(RFCOMM_SEC_PENDING, &d->flags)) { in rfcomm_security_cfm()
2094 rfcomm_dlc_clear_timer(d); in rfcomm_security_cfm()
2096 set_bit(RFCOMM_ENC_DROP, &d->flags); in rfcomm_security_cfm()
2101 if (d->state == BT_CONNECTED && !status && encrypt == 0x00) { in rfcomm_security_cfm()
2102 if (d->sec_level == BT_SECURITY_MEDIUM) { in rfcomm_security_cfm()
2103 set_bit(RFCOMM_SEC_PENDING, &d->flags); in rfcomm_security_cfm()
2104 rfcomm_dlc_set_timer(d, RFCOMM_AUTH_TIMEOUT); in rfcomm_security_cfm()
2106 } else if (d->sec_level == BT_SECURITY_HIGH) { in rfcomm_security_cfm()
2107 set_bit(RFCOMM_ENC_DROP, &d->flags); in rfcomm_security_cfm()
2112 if (!test_and_clear_bit(RFCOMM_AUTH_PENDING, &d->flags)) in rfcomm_security_cfm()
2115 if (!status && hci_conn_check_secure(conn, d->sec_level)) in rfcomm_security_cfm()
2116 set_bit(RFCOMM_AUTH_ACCEPT, &d->flags); in rfcomm_security_cfm()
2118 set_bit(RFCOMM_AUTH_REJECT, &d->flags); in rfcomm_security_cfm()
2138 struct rfcomm_dlc *d; in rfcomm_dlc_debugfs_show() local
2139 list_for_each_entry(d, &s->dlcs, list) { in rfcomm_dlc_debugfs_show()
2142 seq_printf(f, "%s %s %ld %d %d %d %d\n", in rfcomm_dlc_debugfs_show()
2145 d->state, d->dlci, d->mtu, in rfcomm_dlc_debugfs_show()
2146 d->rx_credits, d->tx_credits); in rfcomm_dlc_debugfs_show()