static void init_amd7930(struct IsdnCardState *cs) { Bchan_init(&cs->bcs[0]); Bchan_init(&cs->bcs[1]); cs->bcs[0].BC_SetStack = setstack_amd7930; cs->bcs[1].BC_SetStack = setstack_amd7930; cs->bcs[0].BC_Close = Bchan_close; cs->bcs[1].BC_Close = Bchan_close; Bchan_mode(cs->bcs, 0, 0); Bchan_mode(cs->bcs + 1, 0, 0); }
static void Bchan_manl1(struct PStack *st, int pr, void *arg) { switch (pr) { case (PH_ACTIVATE_REQ): test_and_set_bit(BC_FLG_ACTIV, &st->l1.bcs->Flag); Bchan_mode(st->l1.bcs, st->l1.mode, st->l1.bc); st->l1.l1man(st, PH_ACTIVATE_CNF, NULL); break; case (PH_DEACTIVATE_REQ): if (!test_bit(BC_FLG_BUSY, &st->l1.bcs->Flag)) Bchan_mode(st->l1.bcs, 0, 0); test_and_clear_bit(BC_FLG_ACTIV, &st->l1.bcs->Flag); break; } }
static void Bchan_close(struct BCState *bcs) { struct sk_buff *skb; Bchan_mode(bcs, 0, 0); amd7930_bclose(0, bcs->channel); if (test_bit(BC_FLG_INIT, &bcs->Flag)) { skb_queue_purge(&bcs->rqueue); skb_queue_purge(&bcs->squeue); } test_and_clear_bit(BC_FLG_INIT, &bcs->Flag); }
static void Bchan_close(struct BCState *bcs) { struct sk_buff *skb; Bchan_mode(bcs, 0, 0); amd7930_bclose(0, bcs->channel); if (test_bit(BC_FLG_INIT, &bcs->Flag)) { while ((skb = skb_dequeue(&bcs->rqueue))) { dev_kfree_skb(skb); } while ((skb = skb_dequeue(&bcs->squeue))) { dev_kfree_skb(skb); } } test_and_clear_bit(BC_FLG_INIT, &bcs->Flag); }