Lines Matching refs:vcc

45 	struct atm_vcc *vcc = atm_sk(sk);
46 struct hlist_head *head = &vcc_hash[vcc->vci & (VCC_HTABLE_SIZE - 1)];
47 sk->sk_hash = vcc->vci & (VCC_HTABLE_SIZE - 1);
66 static bool vcc_tx_ready(struct atm_vcc *vcc, unsigned int size)
68 struct sock *sk = sk_atm(vcc);
70 if (sk_wmem_alloc_get(sk) && !atm_may_send(vcc, size)) {
102 struct atm_vcc *vcc = atm_sk(sk);
104 return (vcc->qos.txtp.max_sdu +
127 struct atm_vcc *vcc = atm_sk(sk);
129 if (vcc->release_cb)
130 vcc->release_cb(vcc);
143 struct atm_vcc *vcc;
155 vcc = atm_sk(sk);
156 vcc->dev = NULL;
157 memset(&vcc->local, 0, sizeof(struct sockaddr_atmsvc));
158 memset(&vcc->remote, 0, sizeof(struct sockaddr_atmsvc));
159 vcc->qos.txtp.max_sdu = 1 << 16; /* for meta VCs */
162 vcc->push = NULL;
163 vcc->pop = NULL;
164 vcc->owner = NULL;
165 vcc->push_oam = NULL;
166 vcc->release_cb = NULL;
167 vcc->vpi = vcc->vci = 0; /* no VCI/VPI yet */
168 vcc->atm_options = vcc->aal_options = 0;
175 struct atm_vcc *vcc = atm_sk(sk);
178 set_bit(ATM_VF_CLOSE, &vcc->flags);
179 clear_bit(ATM_VF_READY, &vcc->flags);
180 if (vcc->dev && vcc->dev->ops->close)
181 vcc->dev->ops->close(vcc);
182 if (vcc->push)
183 vcc->push(vcc, NULL); /* atmarpd has no push */
184 module_put(vcc->owner);
187 atm_return(vcc, skb->truesize);
191 if (vcc->dev && vcc->dev->ops->owner) {
192 module_put(vcc->dev->ops->owner);
193 atm_dev_put(vcc->dev);
213 void vcc_release_async(struct atm_vcc *vcc, int reply)
215 struct sock *sk = sk_atm(vcc);
217 set_bit(ATM_VF_CLOSE, &vcc->flags);
220 clear_bit(ATM_VF_WAITING, &vcc->flags);
225 void vcc_process_recv_queue(struct atm_vcc *vcc)
232 rq = &sk_atm(vcc)->sk_receive_queue;
240 vcc->push(vcc, skb);
271 struct atm_vcc *vcc;
274 vcc = atm_sk(s);
275 if (vcc->dev == dev) {
276 vcc_release_async(vcc, -EPIPE);
313 static int check_ci(const struct atm_vcc *vcc, short vpi, int vci)
321 if (walk->dev != vcc->dev)
325 ATM_NONE && vcc->qos.txtp.traffic_class != ATM_NONE) ||
327 vcc->qos.rxtp.traffic_class != ATM_NONE)))
338 static int find_ci(const struct atm_vcc *vcc, short *vpi, int *vci)
347 err = check_ci(vcc, *vpi, *vci);
353 else if (p >= 1 << vcc->dev->ci_range.vpi_bits)
357 else if (c < ATM_NOT_RSV_VCI || c >= 1 << vcc->dev->ci_range.vci_bits)
362 if (!check_ci(vcc, p, c)) {
369 if (c >= 1 << vcc->dev->ci_range.vci_bits)
375 if (p >= 1 << vcc->dev->ci_range.vpi_bits)
382 static int __vcc_connect(struct atm_vcc *vcc, struct atm_dev *dev, short vpi,
385 struct sock *sk = sk_atm(vcc);
397 vcc->dev = dev;
400 (error = find_ci(vcc, &vpi, &vci))) {
404 vcc->vpi = vpi;
405 vcc->vci = vci;
408 switch (vcc->qos.aal) {
410 error = atm_init_aal0(vcc);
411 vcc->stats = &dev->stats.aal0;
414 error = atm_init_aal34(vcc);
415 vcc->stats = &dev->stats.aal34;
419 vcc->qos.aal = ATM_AAL5;
422 error = atm_init_aal5(vcc);
423 vcc->stats = &dev->stats.aal5;
429 error = adjust_tp(&vcc->qos.txtp, vcc->qos.aal);
431 error = adjust_tp(&vcc->qos.rxtp, vcc->qos.aal);
434 pr_debug("VCC %d.%d, AAL %d\n", vpi, vci, vcc->qos.aal);
436 vcc->qos.txtp.traffic_class,
437 vcc->qos.txtp.min_pcr,
438 vcc->qos.txtp.max_pcr,
439 vcc->qos.txtp.max_sdu);
441 vcc->qos.rxtp.traffic_class,
442 vcc->qos.rxtp.min_pcr,
443 vcc->qos.rxtp.max_pcr,
444 vcc->qos.rxtp.max_sdu);
447 error = dev->ops->open(vcc);
458 vcc->dev = NULL;
465 struct atm_vcc *vcc = ATM_SD(sock);
477 clear_bit(ATM_VF_PARTIAL, &vcc->flags);
479 if (test_bit(ATM_VF_PARTIAL, &vcc->flags))
483 vcc->qos.txtp.traffic_class, vcc->qos.txtp.min_pcr,
484 vcc->qos.txtp.max_pcr, vcc->qos.txtp.max_sdu,
485 vcc->qos.rxtp.traffic_class, vcc->qos.rxtp.min_pcr,
486 vcc->qos.rxtp.max_pcr, vcc->qos.rxtp.max_sdu,
487 vcc->qos.aal == ATM_AAL5 ? "" :
488 vcc->qos.aal == ATM_AAL0 ? "" : " ??? code ",
489 vcc->qos.aal == ATM_AAL0 ? 0 : vcc->qos.aal);
490 if (!test_bit(ATM_VF_HASQOS, &vcc->flags))
492 if (vcc->qos.txtp.traffic_class == ATM_ANYCLASS ||
493 vcc->qos.rxtp.traffic_class == ATM_ANYCLASS)
510 error = __vcc_connect(vcc, dev, vpi, vci);
516 set_bit(ATM_VF_PARTIAL, &vcc->flags);
526 struct atm_vcc *vcc;
537 vcc = ATM_SD(sock);
538 if (test_bit(ATM_VF_RELEASED, &vcc->flags) ||
539 test_bit(ATM_VF_CLOSE, &vcc->flags) ||
540 !test_bit(ATM_VF_READY, &vcc->flags))
561 atm_return(vcc, skb->truesize);
572 struct atm_vcc *vcc;
585 vcc = ATM_SD(sock);
586 if (test_bit(ATM_VF_RELEASED, &vcc->flags) ||
587 test_bit(ATM_VF_CLOSE, &vcc->flags) ||
588 !test_bit(ATM_VF_READY, &vcc->flags)) {
597 if (size > vcc->qos.txtp.max_sdu) {
605 while (!vcc_tx_ready(vcc, eff)) {
615 if (test_bit(ATM_VF_RELEASED, &vcc->flags) ||
616 test_bit(ATM_VF_CLOSE, &vcc->flags) ||
617 !test_bit(ATM_VF_READY, &vcc->flags)) {
634 atm_account_tx(vcc, skb);
638 atm_return_tx(vcc, skb);
645 error = vcc->dev->ops->send(vcc, skb);
655 struct atm_vcc *vcc;
661 vcc = ATM_SD(sock);
667 if (test_bit(ATM_VF_RELEASED, &vcc->flags) ||
668 test_bit(ATM_VF_CLOSE, &vcc->flags))
677 test_bit(ATM_VF_WAITING, &vcc->flags))
680 if (vcc->qos.txtp.traffic_class != ATM_NONE &&
687 static int atm_change_qos(struct atm_vcc *vcc, struct atm_qos *qos)
695 if (qos->aal != vcc->qos.aal ||
696 qos->rxtp.traffic_class != vcc->qos.rxtp.traffic_class ||
697 qos->txtp.traffic_class != vcc->qos.txtp.traffic_class)
704 if (!vcc->dev->ops->change_qos)
706 if (sk_atm(vcc)->sk_family == AF_ATMPVC)
707 return vcc->dev->ops->change_qos(vcc, qos, ATM_MF_SET);
708 return svc_change_qos(vcc, qos);
751 struct atm_vcc *vcc;
758 vcc = ATM_SD(sock);
770 return atm_change_qos(vcc, &qos);
773 vcc->qos = qos;
774 set_bit(ATM_VF_HASQOS, &vcc->flags);
781 vcc->atm_options |= ATM_ATMOPT_CLP;
783 vcc->atm_options &= ~ATM_ATMOPT_CLP;
793 struct atm_vcc *vcc;
801 vcc = ATM_SD(sock);
804 if (!test_bit(ATM_VF_HASQOS, &vcc->flags))
806 return copy_to_user(optval, &vcc->qos, sizeof(vcc->qos))
809 return put_user(vcc->atm_options & ATM_ATMOPT_CLP ? 1 : 0,
815 if (!vcc->dev || !test_bit(ATM_VF_ADDR, &vcc->flags))
819 pvc.sap_addr.itf = vcc->dev->number;
820 pvc.sap_addr.vpi = vcc->vpi;
821 pvc.sap_addr.vci = vcc->vci;