Lines Matching refs:dlc

57           struct rfcomm_dlc *dlc;  in rfcomm_dlc_lookup()  local
59 LIST_FOREACH(dlc, &rs->rs_dlcs, rd_next) { in rfcomm_dlc_lookup()
60 if (dlc->rd_dlci == dlci) in rfcomm_dlc_lookup()
64 return dlc; in rfcomm_dlc_lookup()
76 struct rfcomm_dlc *new, *dlc, *any, *best; in rfcomm_dlc_newconn() local
100 LIST_FOREACH(dlc, &ls->rs_dlcs, rd_next) { in rfcomm_dlc_newconn()
101 if (dlc->rd_laddr.bt_channel == chan) in rfcomm_dlc_newconn()
102 best = dlc; in rfcomm_dlc_newconn()
107 LIST_FOREACH(dlc, &ls->rs_dlcs, rd_next) { in rfcomm_dlc_newconn()
108 if (dlc->rd_laddr.bt_channel == chan) in rfcomm_dlc_newconn()
109 any = dlc; in rfcomm_dlc_newconn()
114 dlc = best ? best : any; in rfcomm_dlc_newconn()
121 if (dlc != NULL) in rfcomm_dlc_newconn()
122 new = (*dlc->rd_proto->newconn)(dlc->rd_upper, &laddr, &raddr); in rfcomm_dlc_newconn()
131 new->rd_mode = dlc->rd_mode; in rfcomm_dlc_newconn()
152 rfcomm_dlc_close(struct rfcomm_dlc *dlc, int err) in rfcomm_dlc_close() argument
157 KASSERT(dlc->rd_state != RFCOMM_DLC_CLOSED); in rfcomm_dlc_close()
160 rs = dlc->rd_session; in rfcomm_dlc_close()
162 if (credit->rc_dlc == dlc) in rfcomm_dlc_close()
165 callout_stop(&dlc->rd_timeout); in rfcomm_dlc_close()
167 LIST_REMOVE(dlc, rd_next); in rfcomm_dlc_close()
168 dlc->rd_session = NULL; in rfcomm_dlc_close()
169 dlc->rd_state = RFCOMM_DLC_CLOSED; in rfcomm_dlc_close()
171 (*dlc->rd_proto->disconnected)(dlc->rd_upper, err); in rfcomm_dlc_close()
198 struct rfcomm_dlc *dlc = arg; in rfcomm_dlc_timeout() local
201 callout_ack(&dlc->rd_timeout); in rfcomm_dlc_timeout()
203 if (dlc->rd_state != RFCOMM_DLC_CLOSED) in rfcomm_dlc_timeout()
204 rfcomm_dlc_close(dlc, ETIMEDOUT); in rfcomm_dlc_timeout()
205 else if (dlc->rd_flags & RFCOMM_DLC_DETACH) { in rfcomm_dlc_timeout()
206 callout_destroy(&dlc->rd_timeout); in rfcomm_dlc_timeout()
207 free(dlc, M_BLUETOOTH); in rfcomm_dlc_timeout()
221 rfcomm_dlc_setmode(struct rfcomm_dlc *dlc) in rfcomm_dlc_setmode() argument
226 KASSERT(dlc->rd_session != NULL); in rfcomm_dlc_setmode()
227 KASSERT(dlc->rd_session->rs_state == RFCOMM_SESSION_OPEN); in rfcomm_dlc_setmode()
229 DPRINTF("dlci %d, auth %s, encrypt %s, secure %s\n", dlc->rd_dlci, in rfcomm_dlc_setmode()
230 (dlc->rd_mode & RFCOMM_LM_AUTH ? "yes" : "no"), in rfcomm_dlc_setmode()
231 (dlc->rd_mode & RFCOMM_LM_ENCRYPT ? "yes" : "no"), in rfcomm_dlc_setmode()
232 (dlc->rd_mode & RFCOMM_LM_SECURE ? "yes" : "no")); in rfcomm_dlc_setmode()
234 if (dlc->rd_mode & RFCOMM_LM_AUTH) in rfcomm_dlc_setmode()
237 if (dlc->rd_mode & RFCOMM_LM_ENCRYPT) in rfcomm_dlc_setmode()
240 if (dlc->rd_mode & RFCOMM_LM_SECURE) in rfcomm_dlc_setmode()
245 err = l2cap_setopt(dlc->rd_session->rs_l2cap, &sopt); in rfcomm_dlc_setmode()
257 rfcomm_dlc_connect(struct rfcomm_dlc *dlc) in rfcomm_dlc_connect() argument
262 KASSERT(dlc->rd_session != NULL); in rfcomm_dlc_connect()
263 KASSERT(dlc->rd_session->rs_state == RFCOMM_SESSION_OPEN); in rfcomm_dlc_connect()
264 KASSERT(dlc->rd_state == RFCOMM_DLC_WAIT_SESSION); in rfcomm_dlc_connect()
273 pn.dlci = dlc->rd_dlci; in rfcomm_dlc_connect()
274 pn.priority = dlc->rd_dlci | 0x07; in rfcomm_dlc_connect()
275 pn.mtu = htole16(dlc->rd_mtu); in rfcomm_dlc_connect()
278 dlc->rd_rxcred = (dlc->rd_rxsize / dlc->rd_mtu); in rfcomm_dlc_connect()
279 dlc->rd_rxcred = uimin(dlc->rd_rxcred, RFCOMM_CREDITS_DEFAULT); in rfcomm_dlc_connect()
280 pn.credits = dlc->rd_rxcred; in rfcomm_dlc_connect()
282 err = rfcomm_session_send_mcc(dlc->rd_session, 1, in rfcomm_dlc_connect()
287 dlc->rd_state = RFCOMM_DLC_WAIT_CONNECT; in rfcomm_dlc_connect()
288 callout_schedule(&dlc->rd_timeout, rfcomm_mcc_timeout * hz); in rfcomm_dlc_connect()
299 rfcomm_dlc_open(struct rfcomm_dlc *dlc) in rfcomm_dlc_open() argument
304 KASSERT(dlc->rd_session != NULL); in rfcomm_dlc_open()
305 KASSERT(dlc->rd_session->rs_state == RFCOMM_SESSION_OPEN); in rfcomm_dlc_open()
308 msc.address = RFCOMM_MKADDRESS(1, dlc->rd_dlci); in rfcomm_dlc_open()
309 msc.modem = dlc->rd_lmodem & 0xfe; /* EA = 0 */ in rfcomm_dlc_open()
312 err = rfcomm_session_send_mcc(dlc->rd_session, 1, in rfcomm_dlc_open()
317 callout_schedule(&dlc->rd_timeout, rfcomm_mcc_timeout * hz); in rfcomm_dlc_open()
319 dlc->rd_state = RFCOMM_DLC_OPEN; in rfcomm_dlc_open()
320 (*dlc->rd_proto->connected)(dlc->rd_upper); in rfcomm_dlc_open()
336 rfcomm_dlc_start(struct rfcomm_dlc *dlc) in rfcomm_dlc_start() argument
338 struct rfcomm_session *rs = dlc->rd_session; in rfcomm_dlc_start()
344 KASSERT(dlc->rd_state == RFCOMM_DLC_OPEN); in rfcomm_dlc_start()
348 len = dlc->rd_mtu; in rfcomm_dlc_start()
350 credits = (dlc->rd_rxsize / dlc->rd_mtu); in rfcomm_dlc_start()
351 credits -= dlc->rd_rxcred; in rfcomm_dlc_start()
357 if (dlc->rd_txcred == 0) in rfcomm_dlc_start()
363 if (dlc->rd_rmodem & RFCOMM_MSC_FC) in rfcomm_dlc_start()
366 if (dlc->rd_pending > RFCOMM_CREDITS_DEFAULT) in rfcomm_dlc_start()
370 if (dlc->rd_txbuf == NULL) in rfcomm_dlc_start()
382 && dlc->rd_rxcred > RFCOMM_CREDITS_DEFAULT) in rfcomm_dlc_start()
390 m = dlc->rd_txbuf; in rfcomm_dlc_start()
392 dlc->rd_txbuf = m_split(m, len, M_DONTWAIT); in rfcomm_dlc_start()
393 if (dlc->rd_txbuf == NULL) { in rfcomm_dlc_start()
394 dlc->rd_txbuf = m; in rfcomm_dlc_start()
398 dlc->rd_txbuf = NULL; in rfcomm_dlc_start()
404 dlc->rd_dlci, len, credits, dlc->rd_rxcred); in rfcomm_dlc_start()
406 if (rfcomm_session_send_uih(rs, dlc, credits, m)) { in rfcomm_dlc_start()
408 __func__, len, dlc->rd_dlci); in rfcomm_dlc_start()
413 dlc->rd_pending++; in rfcomm_dlc_start()
417 dlc->rd_txcred--; in rfcomm_dlc_start()
420 dlc->rd_rxcred += credits; in rfcomm_dlc_start()