• Home
  • Raw
  • Download

Lines Matching +full:protocol +full:- +full:id

35 		printk(KERN_DEBUG "%s prim(%x) id(%x) %p\n",  in _queue_message()
36 __func__, hh->prim, hh->id, skb); in _queue_message()
37 skb_queue_tail(&st->msgq, skb); in _queue_message()
38 if (likely(!test_bit(mISDN_STACK_STOPPED, &st->status))) { in _queue_message()
39 test_and_set_bit(mISDN_STACK_WORK, &st->status); in _queue_message()
40 wake_up_interruptible(&st->workq); in _queue_message()
47 _queue_message(ch->st, skb); in mISDN_queue_message()
52 get_channel4id(struct mISDNstack *st, u_int id) in get_channel4id() argument
56 mutex_lock(&st->lmutex); in get_channel4id()
57 list_for_each_entry(ch, &st->layer2, list) { in get_channel4id()
58 if (id == ch->nr) in get_channel4id()
63 mutex_unlock(&st->lmutex); in get_channel4id()
73 read_lock(&sl->lock); in send_socklist()
74 sk_for_each(sk, &sl->head) { in send_socklist()
75 if (sk->sk_state != MISDN_BOUND) in send_socklist()
86 read_unlock(&sl->lock); in send_socklist()
101 mutex_lock(&st->lmutex); in send_layer2()
102 if ((hh->id & MISDN_ID_ADDR_MASK) == MISDN_ID_ANY) { /* L2 for all */ in send_layer2()
103 list_for_each_entry(ch, &st->layer2, list) { in send_layer2()
104 if (list_is_last(&ch->list, &st->layer2)) { in send_layer2()
111 ret = ch->send(ch, cskb); in send_layer2()
117 __func__, ch->nr, in send_layer2()
118 hh->prim, ch->addr, ret); in send_layer2()
123 __func__, ch->nr, ch->addr); in send_layer2()
128 list_for_each_entry(ch, &st->layer2, list) { in send_layer2()
129 if ((hh->id & MISDN_ID_ADDR_MASK) == ch->addr) { in send_layer2()
130 ret = ch->send(ch, skb); in send_layer2()
136 ret = st->dev->teimgr->ctrl(st->dev->teimgr, CHECK_DATA, skb); in send_layer2()
142 __func__, hh->prim, ret); in send_layer2()
145 mutex_unlock(&st->lmutex); in send_layer2()
157 lm = hh->prim & MISDN_LAYERMASK; in send_msg_to_layer()
159 printk(KERN_DEBUG "%s prim(%x) id(%x) %p\n", in send_msg_to_layer()
160 __func__, hh->prim, hh->id, skb); in send_msg_to_layer()
162 if (!hlist_empty(&st->l1sock.head)) { in send_msg_to_layer()
164 send_socklist(&st->l1sock, skb); in send_msg_to_layer()
166 return st->layer1->send(st->layer1, skb); in send_msg_to_layer()
168 if (!hlist_empty(&st->l1sock.head)) in send_msg_to_layer()
169 send_socklist(&st->l1sock, skb); in send_msg_to_layer()
173 ch = get_channel4id(st, hh->id); in send_msg_to_layer()
175 return ch->send(ch, skb); in send_msg_to_layer()
178 "%s: dev(%s) prim(%x) id(%x) no channel\n", in send_msg_to_layer()
179 __func__, dev_name(&st->dev->dev), hh->prim, in send_msg_to_layer()
180 hh->id); in send_msg_to_layer()
183 ch = get_channel4id(st, hh->id); in send_msg_to_layer()
185 return ch->send(ch, skb); in send_msg_to_layer()
188 "%s: dev(%s) prim(%x) id(%x) no channel\n", in send_msg_to_layer()
189 __func__, dev_name(&st->dev->dev), hh->prim, in send_msg_to_layer()
190 hh->id); in send_msg_to_layer()
194 __func__, dev_name(&st->dev->dev), hh->prim); in send_msg_to_layer()
196 return -ESRCH; in send_msg_to_layer()
213 sigfillset(&current->blocked); in mISDNStackd()
216 dev_name(&st->dev->dev)); in mISDNStackd()
218 if (st->notify != NULL) { in mISDNStackd()
219 complete(st->notify); in mISDNStackd()
220 st->notify = NULL; in mISDNStackd()
226 if (unlikely(test_bit(mISDN_STACK_STOPPED, &st->status))) { in mISDNStackd()
227 test_and_clear_bit(mISDN_STACK_WORK, &st->status); in mISDNStackd()
228 test_and_clear_bit(mISDN_STACK_RUNNING, &st->status); in mISDNStackd()
230 test_and_set_bit(mISDN_STACK_RUNNING, &st->status); in mISDNStackd()
231 while (test_bit(mISDN_STACK_WORK, &st->status)) { in mISDNStackd()
232 skb = skb_dequeue(&st->msgq); in mISDNStackd()
235 &st->status); in mISDNStackd()
237 skb = skb_dequeue(&st->msgq); in mISDNStackd()
241 &st->status); in mISDNStackd()
244 st->msg_cnt++; in mISDNStackd()
250 "%s: %s prim(%x) id(%x) " in mISDNStackd()
252 __func__, dev_name(&st->dev->dev), in mISDNStackd()
259 &st->status))) { in mISDNStackd()
261 &st->status); in mISDNStackd()
263 &st->status); in mISDNStackd()
267 if (test_bit(mISDN_STACK_CLEARING, &st->status)) { in mISDNStackd()
268 test_and_set_bit(mISDN_STACK_STOPPED, &st->status); in mISDNStackd()
269 test_and_clear_bit(mISDN_STACK_RUNNING, &st->status); in mISDNStackd()
271 test_and_clear_bit(mISDN_STACK_CLEARING, &st->status); in mISDNStackd()
272 test_and_set_bit(mISDN_STACK_RESTART, &st->status); in mISDNStackd()
274 if (test_and_clear_bit(mISDN_STACK_RESTART, &st->status)) { in mISDNStackd()
275 test_and_clear_bit(mISDN_STACK_STOPPED, &st->status); in mISDNStackd()
276 test_and_set_bit(mISDN_STACK_RUNNING, &st->status); in mISDNStackd()
277 if (!skb_queue_empty(&st->msgq)) in mISDNStackd()
279 &st->status); in mISDNStackd()
281 if (test_bit(mISDN_STACK_ABORT, &st->status)) in mISDNStackd()
283 if (st->notify != NULL) { in mISDNStackd()
284 complete(st->notify); in mISDNStackd()
285 st->notify = NULL; in mISDNStackd()
288 st->sleep_cnt++; in mISDNStackd()
290 test_and_clear_bit(mISDN_STACK_ACTIVE, &st->status); in mISDNStackd()
291 wait_event_interruptible(st->workq, (st->status & in mISDNStackd()
295 __func__, dev_name(&st->dev->dev), st->status); in mISDNStackd()
296 test_and_set_bit(mISDN_STACK_ACTIVE, &st->status); in mISDNStackd()
298 test_and_clear_bit(mISDN_STACK_WAKEUP, &st->status); in mISDNStackd()
300 if (test_bit(mISDN_STACK_STOPPED, &st->status)) { in mISDNStackd()
301 test_and_clear_bit(mISDN_STACK_RUNNING, &st->status); in mISDNStackd()
303 st->stopped_cnt++; in mISDNStackd()
310 dev_name(&st->dev->dev), st->msg_cnt, st->sleep_cnt, in mISDNStackd()
311 st->stopped_cnt); in mISDNStackd()
312 task_cputime(st->thread, &utime, &stime); in mISDNStackd()
315 dev_name(&st->dev->dev), utime, stime); in mISDNStackd()
318 dev_name(&st->dev->dev), st->thread->nvcsw, st->thread->nivcsw); in mISDNStackd()
320 dev_name(&st->dev->dev)); in mISDNStackd()
322 test_and_set_bit(mISDN_STACK_KILLED, &st->status); in mISDNStackd()
323 test_and_clear_bit(mISDN_STACK_RUNNING, &st->status); in mISDNStackd()
324 test_and_clear_bit(mISDN_STACK_ACTIVE, &st->status); in mISDNStackd()
325 test_and_clear_bit(mISDN_STACK_ABORT, &st->status); in mISDNStackd()
326 skb_queue_purge(&st->msgq); in mISDNStackd()
327 st->thread = NULL; in mISDNStackd()
328 if (st->notify != NULL) { in mISDNStackd()
329 complete(st->notify); in mISDNStackd()
330 st->notify = NULL; in mISDNStackd()
338 if (!ch->st) in l1_receive()
339 return -ENODEV; in l1_receive()
341 _queue_message(ch->st, skb); in l1_receive()
348 ch->addr = sapi | (tei << 8); in set_channel_address()
354 list_add_tail(&ch->list, &st->layer2); in __add_layer2()
360 mutex_lock(&st->lmutex); in add_layer2()
362 mutex_unlock(&st->lmutex); in add_layer2()
368 if (!ch->st || !ch->st->layer1) in st_own_ctrl()
369 return -EINVAL; in st_own_ctrl()
370 return ch->st->layer1->ctrl(ch->st->layer1, cmd, arg); in st_own_ctrl()
383 return -ENOMEM; in create_stack()
385 newst->dev = dev; in create_stack()
386 INIT_LIST_HEAD(&newst->layer2); in create_stack()
387 INIT_HLIST_HEAD(&newst->l1sock.head); in create_stack()
388 rwlock_init(&newst->l1sock.lock); in create_stack()
389 init_waitqueue_head(&newst->workq); in create_stack()
390 skb_queue_head_init(&newst->msgq); in create_stack()
391 mutex_init(&newst->lmutex); in create_stack()
392 dev->D.st = newst; in create_stack()
399 dev->teimgr->peer = &newst->own; in create_stack()
400 dev->teimgr->recv = mISDN_queue_message; in create_stack()
401 dev->teimgr->st = newst; in create_stack()
402 newst->layer1 = &dev->D; in create_stack()
403 dev->D.recv = l1_receive; in create_stack()
404 dev->D.peer = &newst->own; in create_stack()
405 newst->own.st = newst; in create_stack()
406 newst->own.ctrl = st_own_ctrl; in create_stack()
407 newst->own.send = mISDN_queue_message; in create_stack()
408 newst->own.recv = mISDN_queue_message; in create_stack()
411 dev_name(&newst->dev->dev)); in create_stack()
412 newst->notify = &done; in create_stack()
413 newst->thread = kthread_run(mISDNStackd, (void *)newst, "mISDN_%s", in create_stack()
414 dev_name(&newst->dev->dev)); in create_stack()
415 if (IS_ERR(newst->thread)) { in create_stack()
416 err = PTR_ERR(newst->thread); in create_stack()
419 dev_name(&newst->dev->dev), err); in create_stack()
420 delete_teimanager(dev->teimgr); in create_stack()
429 u_int protocol, struct sockaddr_mISDN *adr) in connect_layer1() argument
438 __func__, dev_name(&dev->dev), protocol, adr->dev, in connect_layer1()
439 adr->channel, adr->sapi, adr->tei); in connect_layer1()
440 switch (protocol) { in connect_layer1()
445 ch->recv = mISDN_queue_message; in connect_layer1()
446 ch->peer = &dev->D.st->own; in connect_layer1()
447 ch->st = dev->D.st; in connect_layer1()
448 rq.protocol = protocol; in connect_layer1()
449 rq.adr.channel = adr->channel; in connect_layer1()
450 err = dev->D.ctrl(&dev->D, OPEN_CHANNEL, &rq); in connect_layer1()
452 dev->id); in connect_layer1()
455 write_lock_bh(&dev->D.st->l1sock.lock); in connect_layer1()
456 sk_add_node(&msk->sk, &dev->D.st->l1sock.head); in connect_layer1()
457 write_unlock_bh(&dev->D.st->l1sock.lock); in connect_layer1()
460 return -ENOPROTOOPT; in connect_layer1()
467 u_int protocol, struct sockaddr_mISDN *adr) in connect_Bstack() argument
475 __func__, dev_name(&dev->dev), protocol, in connect_Bstack()
476 adr->dev, adr->channel, adr->sapi, in connect_Bstack()
477 adr->tei); in connect_Bstack()
478 ch->st = dev->D.st; in connect_Bstack()
479 pmask = 1 << (protocol & ISDN_P_B_MASK); in connect_Bstack()
480 if (pmask & dev->Bprotocols) { in connect_Bstack()
481 rq.protocol = protocol; in connect_Bstack()
483 err = dev->D.ctrl(&dev->D, OPEN_CHANNEL, &rq); in connect_Bstack()
486 ch->recv = rq.ch->send; in connect_Bstack()
487 ch->peer = rq.ch; in connect_Bstack()
488 rq.ch->recv = ch->send; in connect_Bstack()
489 rq.ch->peer = ch; in connect_Bstack()
490 rq.ch->st = dev->D.st; in connect_Bstack()
494 return -ENOPROTOOPT; in connect_Bstack()
495 rq2.protocol = protocol; in connect_Bstack()
498 err = bp->create(&rq2); in connect_Bstack()
501 ch->recv = rq2.ch->send; in connect_Bstack()
502 ch->peer = rq2.ch; in connect_Bstack()
503 rq2.ch->st = dev->D.st; in connect_Bstack()
504 rq.protocol = rq2.protocol; in connect_Bstack()
506 err = dev->D.ctrl(&dev->D, OPEN_CHANNEL, &rq); in connect_Bstack()
508 rq2.ch->ctrl(rq2.ch, CLOSE_CHANNEL, NULL); in connect_Bstack()
511 rq2.ch->recv = rq.ch->send; in connect_Bstack()
512 rq2.ch->peer = rq.ch; in connect_Bstack()
513 rq.ch->recv = rq2.ch->send; in connect_Bstack()
514 rq.ch->peer = rq2.ch; in connect_Bstack()
515 rq.ch->st = dev->D.st; in connect_Bstack()
517 ch->protocol = protocol; in connect_Bstack()
518 ch->nr = rq.ch->nr; in connect_Bstack()
524 u_int protocol, struct sockaddr_mISDN *adr) in create_l2entity() argument
531 __func__, dev_name(&dev->dev), protocol, in create_l2entity()
532 adr->dev, adr->channel, adr->sapi, in create_l2entity()
533 adr->tei); in create_l2entity()
534 rq.protocol = ISDN_P_TE_S0; in create_l2entity()
535 if (dev->Dprotocols & (1 << ISDN_P_TE_E1)) in create_l2entity()
536 rq.protocol = ISDN_P_TE_E1; in create_l2entity()
537 switch (protocol) { in create_l2entity()
539 rq.protocol = ISDN_P_NT_S0; in create_l2entity()
540 if (dev->Dprotocols & (1 << ISDN_P_NT_E1)) in create_l2entity()
541 rq.protocol = ISDN_P_NT_E1; in create_l2entity()
544 ch->recv = mISDN_queue_message; in create_l2entity()
545 ch->peer = &dev->D.st->own; in create_l2entity()
546 ch->st = dev->D.st; in create_l2entity()
548 err = dev->D.ctrl(&dev->D, OPEN_CHANNEL, &rq); in create_l2entity()
552 rq.protocol = protocol; in create_l2entity()
555 err = dev->teimgr->ctrl(dev->teimgr, OPEN_CHANNEL, &rq); in create_l2entity()
558 if ((protocol == ISDN_P_LAPD_NT) && !rq.ch) in create_l2entity()
560 add_layer2(rq.ch, dev->D.st); in create_l2entity()
561 rq.ch->recv = mISDN_queue_message; in create_l2entity()
562 rq.ch->peer = &dev->D.st->own; in create_l2entity()
563 rq.ch->ctrl(rq.ch, OPEN_CHANNEL, NULL); /* can't fail */ in create_l2entity()
567 err = -EPROTONOSUPPORT; in create_l2entity()
578 if (!ch->st) { in delete_channel()
583 printk(KERN_DEBUG "%s: st(%s) protocol(%x)\n", __func__, in delete_channel()
584 dev_name(&ch->st->dev->dev), ch->protocol); in delete_channel()
585 if (ch->protocol >= ISDN_P_B_START) { in delete_channel()
586 if (ch->peer) { in delete_channel()
587 ch->peer->ctrl(ch->peer, CLOSE_CHANNEL, NULL); in delete_channel()
588 ch->peer = NULL; in delete_channel()
592 switch (ch->protocol) { in delete_channel()
597 write_lock_bh(&ch->st->l1sock.lock); in delete_channel()
598 sk_del_node_init(&msk->sk); in delete_channel()
599 write_unlock_bh(&ch->st->l1sock.lock); in delete_channel()
600 ch->st->dev->D.ctrl(&ch->st->dev->D, CLOSE_CHANNEL, NULL); in delete_channel()
603 pch = get_channel4id(ch->st, ch->nr); in delete_channel()
605 mutex_lock(&ch->st->lmutex); in delete_channel()
606 list_del(&pch->list); in delete_channel()
607 mutex_unlock(&ch->st->lmutex); in delete_channel()
608 pch->ctrl(pch, CLOSE_CHANNEL, NULL); in delete_channel()
609 pch = ch->st->dev->teimgr; in delete_channel()
610 pch->ctrl(pch, CLOSE_CHANNEL, NULL); in delete_channel()
616 pch = ch->st->dev->teimgr; in delete_channel()
618 pch->ctrl(pch, CLOSE_CHANNEL, NULL); in delete_channel()
632 struct mISDNstack *st = dev->D.st; in delete_stack()
637 dev_name(&st->dev->dev)); in delete_stack()
638 if (dev->teimgr) in delete_stack()
639 delete_teimanager(dev->teimgr); in delete_stack()
640 if (st->thread) { in delete_stack()
641 if (st->notify) { in delete_stack()
644 complete(st->notify); in delete_stack()
646 st->notify = &done; in delete_stack()
647 test_and_set_bit(mISDN_STACK_ABORT, &st->status); in delete_stack()
648 test_and_set_bit(mISDN_STACK_WAKEUP, &st->status); in delete_stack()
649 wake_up_interruptible(&st->workq); in delete_stack()
652 if (!list_empty(&st->layer2)) in delete_stack()
655 if (!hlist_empty(&st->l1sock.head)) in delete_stack()