Lines Matching refs:pvcc
114 struct pppoatm_vcc *pvcc = atmvcc_to_pvcc(atmvcc); in pppoatm_release_cb() local
125 if (test_and_clear_bit(BLOCKED, &pvcc->blocked)) in pppoatm_release_cb()
126 tasklet_schedule(&pvcc->wakeup_tasklet); in pppoatm_release_cb()
127 if (pvcc->old_release_cb) in pppoatm_release_cb()
128 pvcc->old_release_cb(atmvcc); in pppoatm_release_cb()
137 struct pppoatm_vcc *pvcc = atmvcc_to_pvcc(atmvcc); in pppoatm_pop() local
139 pvcc->old_pop(atmvcc, skb); in pppoatm_pop()
140 atomic_dec(&pvcc->inflight); in pppoatm_pop()
160 if (test_and_clear_bit(BLOCKED, &pvcc->blocked)) in pppoatm_pop()
161 tasklet_schedule(&pvcc->wakeup_tasklet); in pppoatm_pop()
170 struct pppoatm_vcc *pvcc; in pppoatm_unassign_vcc() local
171 pvcc = atmvcc_to_pvcc(atmvcc); in pppoatm_unassign_vcc()
172 atmvcc->push = pvcc->old_push; in pppoatm_unassign_vcc()
173 atmvcc->pop = pvcc->old_pop; in pppoatm_unassign_vcc()
174 atmvcc->release_cb = pvcc->old_release_cb; in pppoatm_unassign_vcc()
175 tasklet_kill(&pvcc->wakeup_tasklet); in pppoatm_unassign_vcc()
176 ppp_unregister_channel(&pvcc->chan); in pppoatm_unassign_vcc()
178 kfree(pvcc); in pppoatm_unassign_vcc()
184 struct pppoatm_vcc *pvcc = atmvcc_to_pvcc(atmvcc); in pppoatm_push() local
189 pr_debug("removing ATMPPP VCC %p\n", pvcc); in pppoatm_push()
190 module = pvcc->old_owner; in pppoatm_push()
197 switch (pvcc->encaps) { in pppoatm_push()
205 if (pvcc->chan.ppp == NULL) { /* Not bound yet! */ in pppoatm_push()
211 pvcc->encaps = e_llc; in pppoatm_push()
218 pvcc->encaps = e_vc; in pppoatm_push()
219 pvcc->chan.mtu += LLC_LEN; in pppoatm_push()
229 ppp_input(&pvcc->chan, skb); in pppoatm_push()
234 ppp_input_error(&pvcc->chan, 0); in pppoatm_push()
237 static int pppoatm_may_send(struct pppoatm_vcc *pvcc, int size) in pppoatm_may_send() argument
246 if (atm_may_send(pvcc->atmvcc, size) && in pppoatm_may_send()
247 atomic_inc_not_zero_hint(&pvcc->inflight, NONE_INFLIGHT)) in pppoatm_may_send()
257 test_and_set_bit(BLOCKED, &pvcc->blocked); in pppoatm_may_send()
276 if (atm_may_send(pvcc->atmvcc, size) && in pppoatm_may_send()
277 atomic_inc_not_zero(&pvcc->inflight)) in pppoatm_may_send()
294 struct pppoatm_vcc *pvcc = chan_to_pvcc(chan); in pppoatm_send() local
298 ATM_SKB(skb)->vcc = pvcc->atmvcc; in pppoatm_send()
299 pr_debug("(skb=0x%p, vcc=0x%p)\n", skb, pvcc->atmvcc); in pppoatm_send()
300 if (skb->data[0] == '\0' && (pvcc->flags & SC_COMP_PROT)) in pppoatm_send()
311 test_and_set_bit(BLOCKED, &pvcc->blocked); in pppoatm_send()
322 switch (pvcc->encaps) { /* LLC encapsulation needed */ in pppoatm_send()
328 !pppoatm_may_send(pvcc, n->truesize)) { in pppoatm_send()
338 } else if (!pppoatm_may_send(pvcc, skb->truesize)) in pppoatm_send()
343 if (!pppoatm_may_send(pvcc, skb->truesize)) in pppoatm_send()
367 if ((pvcc->flags & SC_COMP_PROT) && skb_headroom(skb) > 0 && in pppoatm_send()
396 struct pppoatm_vcc *pvcc; in pppoatm_assign_vcc() local
408 pvcc = kzalloc(sizeof(*pvcc), GFP_KERNEL); in pppoatm_assign_vcc()
409 if (pvcc == NULL) in pppoatm_assign_vcc()
411 pvcc->atmvcc = atmvcc; in pppoatm_assign_vcc()
414 atomic_set(&pvcc->inflight, NONE_INFLIGHT); in pppoatm_assign_vcc()
415 pvcc->old_push = atmvcc->push; in pppoatm_assign_vcc()
416 pvcc->old_pop = atmvcc->pop; in pppoatm_assign_vcc()
417 pvcc->old_owner = atmvcc->owner; in pppoatm_assign_vcc()
418 pvcc->old_release_cb = atmvcc->release_cb; in pppoatm_assign_vcc()
419 pvcc->encaps = (enum pppoatm_encaps) be.encaps; in pppoatm_assign_vcc()
420 pvcc->chan.private = pvcc; in pppoatm_assign_vcc()
421 pvcc->chan.ops = &pppoatm_ops; in pppoatm_assign_vcc()
422 pvcc->chan.mtu = atmvcc->qos.txtp.max_sdu - PPP_HDRLEN - in pppoatm_assign_vcc()
424 pvcc->wakeup_tasklet = tasklet_proto; in pppoatm_assign_vcc()
425 pvcc->wakeup_tasklet.data = (unsigned long) &pvcc->chan; in pppoatm_assign_vcc()
426 err = ppp_register_channel(&pvcc->chan); in pppoatm_assign_vcc()
428 kfree(pvcc); in pppoatm_assign_vcc()
431 atmvcc->user_back = pvcc; in pppoatm_assign_vcc()