Lines Matching refs:rs
177 struct rfcomm_session *rs; in rfcomm_session_alloc() local
180 rs = kmalloc(sizeof(*rs), M_BLUETOOTH, M_NOWAIT | M_ZERO); in rfcomm_session_alloc()
181 if (rs == NULL) in rfcomm_session_alloc()
184 rs->rs_state = RFCOMM_SESSION_CLOSED; in rfcomm_session_alloc()
186 callout_init(&rs->rs_timeout); in rfcomm_session_alloc()
188 STAILQ_INIT(&rs->rs_credits); in rfcomm_session_alloc()
189 LIST_INIT(&rs->rs_dlcs); in rfcomm_session_alloc()
191 err = l2cap_attach(&rs->rs_l2cap, &rfcomm_session_proto, rs); in rfcomm_session_alloc()
193 kfree(rs, M_BLUETOOTH); in rfcomm_session_alloc()
197 (void)l2cap_getopt(rs->rs_l2cap, SO_L2CAP_OMTU, &rs->rs_mtu); in rfcomm_session_alloc()
202 (void)l2cap_bind(rs->rs_l2cap, laddr); in rfcomm_session_alloc()
204 LIST_INSERT_HEAD(list, rs, rs_next); in rfcomm_session_alloc()
206 return rs; in rfcomm_session_alloc()
215 rfcomm_session_free(struct rfcomm_session *rs) in rfcomm_session_free() argument
219 KKASSERT(rs != NULL); in rfcomm_session_free()
220 KKASSERT(LIST_EMPTY(&rs->rs_dlcs)); in rfcomm_session_free()
222 rs->rs_state = RFCOMM_SESSION_CLOSED; in rfcomm_session_free()
229 callout_stop(&rs->rs_timeout); in rfcomm_session_free()
230 if (callout_active(&rs->rs_timeout)) in rfcomm_session_free()
238 if (rs->rs_flags & RFCOMM_SESSION_FREE) in rfcomm_session_free()
241 rs->rs_flags |= RFCOMM_SESSION_FREE; in rfcomm_session_free()
244 while ((credit = STAILQ_FIRST(&rs->rs_credits)) != NULL) { in rfcomm_session_free()
245 STAILQ_REMOVE_HEAD(&rs->rs_credits, rc_next); in rfcomm_session_free()
249 KKASSERT(STAILQ_EMPTY(&rs->rs_credits)); in rfcomm_session_free()
252 LIST_REMOVE(rs, rs_next); in rfcomm_session_free()
253 l2cap_detach(&rs->rs_l2cap); in rfcomm_session_free()
254 kfree(rs, M_BLUETOOTH); in rfcomm_session_free()
266 struct rfcomm_session *rs; in rfcomm_session_lookup() local
269 LIST_FOREACH(rs, &rfcomm_session_active, rs_next) { in rfcomm_session_lookup()
270 if (rs->rs_state == RFCOMM_SESSION_CLOSED) in rfcomm_session_lookup()
273 l2cap_sockaddr(rs->rs_l2cap, &addr); in rfcomm_session_lookup()
279 l2cap_peeraddr(rs->rs_l2cap, &addr); in rfcomm_session_lookup()
288 return rs; in rfcomm_session_lookup()
304 struct rfcomm_session *rs = arg; in rfcomm_session_timeout() local
307 KKASSERT(rs != NULL); in rfcomm_session_timeout()
311 if (rs->rs_state != RFCOMM_SESSION_OPEN) { in rfcomm_session_timeout()
313 rs->rs_state = RFCOMM_SESSION_CLOSED; in rfcomm_session_timeout()
315 while (!LIST_EMPTY(&rs->rs_dlcs)) { in rfcomm_session_timeout()
316 dlc = LIST_FIRST(&rs->rs_dlcs); in rfcomm_session_timeout()
322 if (LIST_EMPTY(&rs->rs_dlcs)) { in rfcomm_session_timeout()
324 rfcomm_session_free(rs); in rfcomm_session_timeout()
346 struct rfcomm_session *rs = arg; in rfcomm_session_connected() local
359 l2cap_getopt(rs->rs_l2cap, SO_L2CAP_OMTU, &rs->rs_mtu); in rfcomm_session_connected()
361 rs->rs_mtu -= 6; /* (RFCOMM overhead could be this big) */ in rfcomm_session_connected()
362 if (rs->rs_mtu < RFCOMM_MTU_MIN) { in rfcomm_session_connected()
363 rfcomm_session_disconnected(rs, EINVAL); in rfcomm_session_connected()
367 if (IS_INITIATOR(rs)) { in rfcomm_session_connected()
370 err = rfcomm_session_send_frame(rs, RFCOMM_FRAME_SABM, 0); in rfcomm_session_connected()
372 rfcomm_session_disconnected(rs, err); in rfcomm_session_connected()
374 callout_reset(&rs->rs_timeout, rfcomm_ack_timeout * hz, in rfcomm_session_connected()
375 rfcomm_session_timeout, rs); in rfcomm_session_connected()
382 struct rfcomm_session *rs = arg; in rfcomm_session_disconnected() local
387 rs->rs_state = RFCOMM_SESSION_CLOSED; in rfcomm_session_disconnected()
389 while (!LIST_EMPTY(&rs->rs_dlcs)) { in rfcomm_session_disconnected()
390 dlc = LIST_FIRST(&rs->rs_dlcs); in rfcomm_session_disconnected()
395 rfcomm_session_free(rs); in rfcomm_session_disconnected()
402 struct rfcomm_session *new, *rs = arg; in rfcomm_session_newconn() local
420 new->rs_mtu = rs->rs_mtu; in rfcomm_session_newconn()
427 callout_reset(&rs->rs_timeout, rfcomm_mcc_timeout * hz, in rfcomm_session_newconn()
428 rfcomm_session_timeout, rs); in rfcomm_session_newconn()
436 struct rfcomm_session *rs = arg; in rfcomm_session_complete() local
447 credit = STAILQ_FIRST(&rs->rs_credits); in rfcomm_session_complete()
464 if ((rs->rs_flags & RFCOMM_SESSION_CFC) == 0 in rfcomm_session_complete()
476 rfcomm_session_send_frame(rs, RFCOMM_FRAME_DISC, in rfcomm_session_complete()
484 STAILQ_REMOVE_HEAD(&rs->rs_credits, rc_next); in rfcomm_session_complete()
491 if (rs->rs_state == RFCOMM_SESSION_CLOSED) { in rfcomm_session_complete()
492 if (STAILQ_EMPTY(&rs->rs_credits)) in rfcomm_session_complete()
493 l2cap_disconnect(rs->rs_l2cap, 0); in rfcomm_session_complete()
506 struct rfcomm_session *rs = arg; in rfcomm_session_linkmode() local
524 next = LIST_FIRST(&rs->rs_dlcs); in rfcomm_session_linkmode()
533 err = rfcomm_session_send_frame(rs, in rfcomm_session_linkmode()
551 if (!LIST_EMPTY(&rs->rs_dlcs)) in rfcomm_session_linkmode()
554 rs->rs_state = RFCOMM_SESSION_WAIT_DISCONNECT; in rfcomm_session_linkmode()
555 rfcomm_session_send_frame(rs, RFCOMM_FRAME_DISC, 0); in rfcomm_session_linkmode()
556 callout_reset(&rs->rs_timeout, rfcomm_ack_timeout * hz, in rfcomm_session_linkmode()
557 rfcomm_session_timeout, rs); in rfcomm_session_linkmode()
562 rfcomm_session_send_frame(rs, in rfcomm_session_linkmode()
568 err = rfcomm_session_send_frame(rs, in rfcomm_session_linkmode()
571 rfcomm_session_send_frame(rs, in rfcomm_session_linkmode()
579 rfcomm_session_send_frame(rs, in rfcomm_session_linkmode()
605 struct rfcomm_session *rs = arg; in rfcomm_session_input() local
610 KKASSERT(rs != NULL); in rfcomm_session_input()
674 rfcomm_session_recv_sabm(rs, dlci); in rfcomm_session_input()
679 rfcomm_session_recv_disc(rs, dlci); in rfcomm_session_input()
684 rfcomm_session_recv_ua(rs, dlci); in rfcomm_session_input()
688 rfcomm_session_recv_dm(rs, dlci); in rfcomm_session_input()
692 rfcomm_session_recv_uih(rs, dlci, pf, m, len); in rfcomm_session_input()
715 rfcomm_session_recv_sabm(struct rfcomm_session *rs, int dlci) in rfcomm_session_recv_sabm() argument
723 rs->rs_state = RFCOMM_SESSION_OPEN; in rfcomm_session_recv_sabm()
724 rfcomm_session_send_frame(rs, RFCOMM_FRAME_UA, 0); in rfcomm_session_recv_sabm()
725 LIST_FOREACH(dlc, &rs->rs_dlcs, rd_next) { in rfcomm_session_recv_sabm()
732 if (rs->rs_state != RFCOMM_SESSION_OPEN) { in rfcomm_session_recv_sabm()
738 if ((IS_INITIATOR(rs) && !RFCOMM_DIRECTION(dlci)) in rfcomm_session_recv_sabm()
739 || (!IS_INITIATOR(rs) && RFCOMM_DIRECTION(dlci))) { in rfcomm_session_recv_sabm()
748 dlc = rfcomm_dlc_lookup(rs, dlci); in rfcomm_session_recv_sabm()
750 dlc = rfcomm_dlc_newconn(rs, dlci); in rfcomm_session_recv_sabm()
772 err = rfcomm_session_send_frame(rs, RFCOMM_FRAME_UA, dlci); in rfcomm_session_recv_sabm()
791 rfcomm_session_recv_disc(struct rfcomm_session *rs, int dlci) in rfcomm_session_recv_disc() argument
808 rfcomm_session_send_frame(rs, RFCOMM_FRAME_UA, 0); in rfcomm_session_recv_disc()
809 rs->rs_state = RFCOMM_SESSION_CLOSED; in rfcomm_session_recv_disc()
813 dlc = rfcomm_dlc_lookup(rs, dlci); in rfcomm_session_recv_disc()
815 rfcomm_session_send_frame(rs, RFCOMM_FRAME_DM, dlci); in rfcomm_session_recv_disc()
820 rfcomm_session_send_frame(rs, RFCOMM_FRAME_UA, dlci); in rfcomm_session_recv_disc()
830 rfcomm_session_recv_ua(struct rfcomm_session *rs, int dlci) in rfcomm_session_recv_ua() argument
837 switch (rs->rs_state) { in rfcomm_session_recv_ua()
839 callout_stop(&rs->rs_timeout); in rfcomm_session_recv_ua()
840 rs->rs_state = RFCOMM_SESSION_OPEN; in rfcomm_session_recv_ua()
841 LIST_FOREACH(dlc, &rs->rs_dlcs, rd_next) { in rfcomm_session_recv_ua()
848 callout_stop(&rs->rs_timeout); in rfcomm_session_recv_ua()
849 rs->rs_state = RFCOMM_SESSION_CLOSED; in rfcomm_session_recv_ua()
850 l2cap_disconnect(rs->rs_l2cap, 0); in rfcomm_session_recv_ua()
866 dlc = rfcomm_dlc_lookup(rs, dlci); in rfcomm_session_recv_ua()
885 if (LIST_EMPTY(&rs->rs_dlcs)) { in rfcomm_session_recv_ua()
886 rs->rs_state = RFCOMM_SESSION_WAIT_DISCONNECT; in rfcomm_session_recv_ua()
887 rfcomm_session_send_frame(rs, RFCOMM_FRAME_DISC, 0); in rfcomm_session_recv_ua()
888 callout_reset(&rs->rs_timeout, rfcomm_ack_timeout*hz,rfcomm_session_timeout,rs); in rfcomm_session_recv_ua()
898 rfcomm_session_recv_dm(struct rfcomm_session *rs, int dlci) in rfcomm_session_recv_dm() argument
904 dlc = rfcomm_dlc_lookup(rs, dlci); in rfcomm_session_recv_dm()
918 rfcomm_session_recv_uih(struct rfcomm_session *rs, int dlci, in rfcomm_session_recv_uih() argument
927 rfcomm_session_recv_mcc(rs, m); in rfcomm_session_recv_uih()
938 dlc = rfcomm_dlc_lookup(rs, dlci); in rfcomm_session_recv_uih()
941 rfcomm_session_send_frame(rs, RFCOMM_FRAME_DM, dlci); in rfcomm_session_recv_uih()
952 if (rs->rs_flags & RFCOMM_SESSION_CFC) { in rfcomm_session_recv_uih()
996 rfcomm_session_recv_mcc(struct rfcomm_session *rs, struct mbuf *m) in rfcomm_session_recv_mcc() argument
1054 rfcomm_session_recv_mcc_test(rs, cr, m); in rfcomm_session_recv_mcc()
1058 rfcomm_session_recv_mcc_fcon(rs, cr); in rfcomm_session_recv_mcc()
1062 rfcomm_session_recv_mcc_fcoff(rs, cr); in rfcomm_session_recv_mcc()
1066 rfcomm_session_recv_mcc_msc(rs, cr, m); in rfcomm_session_recv_mcc()
1070 rfcomm_session_recv_mcc_rpn(rs, cr, m); in rfcomm_session_recv_mcc()
1074 rfcomm_session_recv_mcc_rls(rs, cr, m); in rfcomm_session_recv_mcc()
1078 rfcomm_session_recv_mcc_pn(rs, cr, m); in rfcomm_session_recv_mcc()
1082 rfcomm_session_recv_mcc_nsc(rs, cr, m); in rfcomm_session_recv_mcc()
1087 rfcomm_session_send_mcc(rs, 0, RFCOMM_MCC_NSC, &b, sizeof(b)); in rfcomm_session_recv_mcc()
1098 rfcomm_session_recv_mcc_test(struct rfcomm_session *rs, int cr, struct mbuf *m) in rfcomm_session_recv_mcc_test() argument
1119 rfcomm_session_send_mcc(rs, 0, RFCOMM_MCC_TEST, data, len); in rfcomm_session_recv_mcc_test()
1127 rfcomm_session_recv_mcc_fcon(struct rfcomm_session *rs, int cr) in rfcomm_session_recv_mcc_fcon() argument
1133 rs->rs_flags |= RFCOMM_SESSION_RFC; in rfcomm_session_recv_mcc_fcon()
1134 rfcomm_session_send_mcc(rs, 0, RFCOMM_MCC_FCON, NULL, 0); in rfcomm_session_recv_mcc_fcon()
1141 rfcomm_session_recv_mcc_fcoff(struct rfcomm_session *rs, int cr) in rfcomm_session_recv_mcc_fcoff() argument
1146 rs->rs_flags &= ~RFCOMM_SESSION_RFC; in rfcomm_session_recv_mcc_fcoff()
1147 rfcomm_session_send_mcc(rs, 0, RFCOMM_MCC_FCOFF, NULL, 0); in rfcomm_session_recv_mcc_fcoff()
1154 rfcomm_session_recv_mcc_msc(struct rfcomm_session *rs, int cr, struct mbuf *m) in rfcomm_session_recv_mcc_msc() argument
1168 dlc = rfcomm_dlc_lookup(rs, RFCOMM_DLCI(msc.address)); in rfcomm_session_recv_mcc_msc()
1178 rfcomm_session_send_frame(rs, RFCOMM_FRAME_DM, in rfcomm_session_recv_mcc_msc()
1205 rfcomm_session_send_mcc(rs, 0, RFCOMM_MCC_MSC, &msc, len); in rfcomm_session_recv_mcc_msc()
1212 rfcomm_session_recv_mcc_rpn(struct rfcomm_session *rs, int cr, struct mbuf *m) in rfcomm_session_recv_mcc_rpn() argument
1269 rfcomm_session_send_mcc(rs, 0, RFCOMM_MCC_RPN, &rpn, sizeof(rpn)); in rfcomm_session_recv_mcc_rpn()
1276 rfcomm_session_recv_mcc_rls(struct rfcomm_session *rs, int cr, struct mbuf *m) in rfcomm_session_recv_mcc_rls() argument
1298 rfcomm_session_send_mcc(rs, 0, RFCOMM_MCC_RLS, &rls, sizeof(rls)); in rfcomm_session_recv_mcc_rls()
1305 rfcomm_session_recv_mcc_pn(struct rfcomm_session *rs, int cr, struct mbuf *m) in rfcomm_session_recv_mcc_pn() argument
1321 dlc = rfcomm_dlc_lookup(rs, pn.dlci); in rfcomm_session_recv_mcc_pn()
1328 dlc = rfcomm_dlc_newconn(rs, pn.dlci); in rfcomm_session_recv_mcc_pn()
1335 pn.mtu = min(pn.mtu, rs->rs_mtu); in rfcomm_session_recv_mcc_pn()
1343 rs->rs_flags |= RFCOMM_SESSION_CFC; in rfcomm_session_recv_mcc_pn()
1362 err = rfcomm_session_send_mcc(rs, 0, in rfcomm_session_recv_mcc_pn()
1376 err = rfcomm_session_send_frame(rs, RFCOMM_FRAME_DISC, in rfcomm_session_recv_mcc_pn()
1393 rs->rs_flags |= RFCOMM_SESSION_CFC; in rfcomm_session_recv_mcc_pn()
1411 err = rfcomm_session_send_frame(rs, RFCOMM_FRAME_SABM, pn.dlci); in rfcomm_session_recv_mcc_pn()
1427 rfcomm_session_recv_mcc_nsc(struct rfcomm_session *rs, in rfcomm_session_recv_mcc_nsc() argument
1437 next = LIST_FIRST(&rs->rs_dlcs); in rfcomm_session_recv_mcc_nsc()
1443 rfcomm_session_free(rs); in rfcomm_session_recv_mcc_nsc()
1455 rfcomm_session_send_frame(struct rfcomm_session *rs, int type, int dlci) in rfcomm_session_send_frame() argument
1480 cr = IS_INITIATOR(rs) ? 0 : 1; in rfcomm_session_send_frame()
1482 cr = IS_INITIATOR(rs) ? 1 : 0; in rfcomm_session_send_frame()
1501 STAILQ_INSERT_TAIL(&rs->rs_credits, credit, rc_next); in rfcomm_session_send_frame()
1506 return l2cap_send(rs->rs_l2cap, m); in rfcomm_session_send_frame()
1517 rfcomm_session_send_uih(struct rfcomm_session *rs, struct rfcomm_dlc *dlc, in rfcomm_session_send_uih() argument
1525 KKASSERT(rs != NULL); in rfcomm_session_send_uih()
1564 *hdr = RFCOMM_MKADDRESS((IS_INITIATOR(rs) ? 1 : 0), in rfcomm_session_send_uih()
1605 err = l2cap_send(rs->rs_l2cap, m0); in rfcomm_session_send_uih()
1609 STAILQ_INSERT_TAIL(&rs->rs_credits, credit, rc_next); in rfcomm_session_send_uih()
1632 rfcomm_session_send_mcc(struct rfcomm_session *rs, int cr, in rfcomm_session_send_mcc() argument
1689 return rfcomm_session_send_uih(rs, NULL, 0, m); in rfcomm_session_send_mcc()