Lines Matching refs:pvcc
106 struct pppoatm_vcc *pvcc = from_tasklet(pvcc, t, wakeup_tasklet);
108 ppp_output_wakeup(&pvcc->chan);
113 struct pppoatm_vcc *pvcc = atmvcc_to_pvcc(atmvcc);
124 if (test_and_clear_bit(BLOCKED, &pvcc->blocked))
125 tasklet_schedule(&pvcc->wakeup_tasklet);
126 if (pvcc->old_release_cb)
127 pvcc->old_release_cb(atmvcc);
136 struct pppoatm_vcc *pvcc = atmvcc_to_pvcc(atmvcc);
138 pvcc->old_pop(atmvcc, skb);
139 atomic_dec(&pvcc->inflight);
159 if (test_and_clear_bit(BLOCKED, &pvcc->blocked))
160 tasklet_schedule(&pvcc->wakeup_tasklet);
169 struct pppoatm_vcc *pvcc;
170 pvcc = atmvcc_to_pvcc(atmvcc);
171 atmvcc->push = pvcc->old_push;
172 atmvcc->pop = pvcc->old_pop;
173 atmvcc->release_cb = pvcc->old_release_cb;
174 tasklet_kill(&pvcc->wakeup_tasklet);
175 ppp_unregister_channel(&pvcc->chan);
177 kfree(pvcc);
183 struct pppoatm_vcc *pvcc = atmvcc_to_pvcc(atmvcc);
188 pr_debug("removing ATMPPP VCC %p\n", pvcc);
189 module = pvcc->old_owner;
196 switch (pvcc->encaps) {
204 if (pvcc->chan.ppp == NULL) { /* Not bound yet! */
210 pvcc->encaps = e_llc;
217 pvcc->encaps = e_vc;
218 pvcc->chan.mtu += LLC_LEN;
226 ppp_input(&pvcc->chan, skb);
231 ppp_input_error(&pvcc->chan, 0);
234 static int pppoatm_may_send(struct pppoatm_vcc *pvcc, int size)
243 if (atm_may_send(pvcc->atmvcc, size) &&
244 atomic_inc_not_zero(&pvcc->inflight))
250 * *must* be set before we do the atomic_inc() on pvcc->inflight.
254 test_and_set_bit(BLOCKED, &pvcc->blocked);
273 if (atm_may_send(pvcc->atmvcc, size) &&
274 atomic_inc_not_zero(&pvcc->inflight))
291 struct pppoatm_vcc *pvcc = chan_to_pvcc(chan);
295 ATM_SKB(skb)->vcc = pvcc->atmvcc;
296 pr_debug("(skb=0x%p, vcc=0x%p)\n", skb, pvcc->atmvcc);
297 if (skb->data[0] == '\0' && (pvcc->flags & SC_COMP_PROT))
308 test_and_set_bit(BLOCKED, &pvcc->blocked);
319 switch (pvcc->encaps) { /* LLC encapsulation needed */
325 !pppoatm_may_send(pvcc, n->truesize)) {
335 } else if (!pppoatm_may_send(pvcc, skb->truesize))
340 if (!pppoatm_may_send(pvcc, skb->truesize))
363 if ((pvcc->flags & SC_COMP_PROT) && skb_headroom(skb) > 0 &&
392 struct pppoatm_vcc *pvcc;
400 pvcc = kzalloc(sizeof(*pvcc), GFP_KERNEL);
401 if (pvcc == NULL)
403 pvcc->atmvcc = atmvcc;
406 atomic_set(&pvcc->inflight, NONE_INFLIGHT);
407 pvcc->old_push = atmvcc->push;
408 pvcc->old_pop = atmvcc->pop;
409 pvcc->old_owner = atmvcc->owner;
410 pvcc->old_release_cb = atmvcc->release_cb;
411 pvcc->encaps = (enum pppoatm_encaps) be.encaps;
412 pvcc->chan.private = pvcc;
413 pvcc->chan.ops = &pppoatm_ops;
414 pvcc->chan.mtu = atmvcc->qos.txtp.max_sdu - PPP_HDRLEN -
416 tasklet_setup(&pvcc->wakeup_tasklet, pppoatm_wakeup_sender);
417 err = ppp_register_channel(&pvcc->chan);
419 kfree(pvcc);
422 atmvcc->user_back = pvcc;