atmtcp.c (62910554656cdcd6b6f84a5154c4155aae4ca231) atmtcp.c (aa395145165cb06a0d0885221bbe0ce4a564391d)
1/* drivers/atm/atmtcp.c - ATM over TCP "device" driver */
2
3/* Written 1997-2000 by Werner Almesberger, EPFL LRC/ICA */
4
5
6#include <linux/module.h>
7#include <linux/wait.h>
8#include <linux/atmdev.h>

--- 54 unchanged lines hidden (view full) ---

63 new_msg = (struct atmtcp_control *) skb_put(skb,sizeof(*new_msg));
64 *new_msg = *msg;
65 new_msg->hdr.length = ATMTCP_HDR_MAGIC;
66 new_msg->type = type;
67 memset(&new_msg->vcc,0,sizeof(atm_kptr_t));
68 *(struct atm_vcc **) &new_msg->vcc = vcc;
69 old_test = test_bit(flag,&vcc->flags);
70 out_vcc->push(out_vcc,skb);
1/* drivers/atm/atmtcp.c - ATM over TCP "device" driver */
2
3/* Written 1997-2000 by Werner Almesberger, EPFL LRC/ICA */
4
5
6#include <linux/module.h>
7#include <linux/wait.h>
8#include <linux/atmdev.h>

--- 54 unchanged lines hidden (view full) ---

63 new_msg = (struct atmtcp_control *) skb_put(skb,sizeof(*new_msg));
64 *new_msg = *msg;
65 new_msg->hdr.length = ATMTCP_HDR_MAGIC;
66 new_msg->type = type;
67 memset(&new_msg->vcc,0,sizeof(atm_kptr_t));
68 *(struct atm_vcc **) &new_msg->vcc = vcc;
69 old_test = test_bit(flag,&vcc->flags);
70 out_vcc->push(out_vcc,skb);
71 add_wait_queue(sk_atm(vcc)->sk_sleep, &wait);
71 add_wait_queue(sk_sleep(sk_atm(vcc)), &wait);
72 while (test_bit(flag,&vcc->flags) == old_test) {
73 mb();
74 out_vcc = PRIV(vcc->dev) ? PRIV(vcc->dev)->vcc : NULL;
75 if (!out_vcc) {
76 error = -EUNATCH;
77 break;
78 }
79 set_current_state(TASK_UNINTERRUPTIBLE);
80 schedule();
81 }
82 set_current_state(TASK_RUNNING);
72 while (test_bit(flag,&vcc->flags) == old_test) {
73 mb();
74 out_vcc = PRIV(vcc->dev) ? PRIV(vcc->dev)->vcc : NULL;
75 if (!out_vcc) {
76 error = -EUNATCH;
77 break;
78 }
79 set_current_state(TASK_UNINTERRUPTIBLE);
80 schedule();
81 }
82 set_current_state(TASK_RUNNING);
83 remove_wait_queue(sk_atm(vcc)->sk_sleep, &wait);
83 remove_wait_queue(sk_sleep(sk_atm(vcc)), &wait);
84 return error;
85}
86
87
88static int atmtcp_recv_control(const struct atmtcp_control *msg)
89{
90 struct atm_vcc *vcc = *(struct atm_vcc **) &msg->vcc;
91

--- 8 unchanged lines hidden (view full) ---

100 case ATMTCP_CTRL_CLOSE:
101 change_bit(ATM_VF_ADDR,&vcc->flags);
102 break;
103 default:
104 printk(KERN_ERR "atmtcp_recv_control: unknown type %d\n",
105 msg->type);
106 return -EINVAL;
107 }
84 return error;
85}
86
87
88static int atmtcp_recv_control(const struct atmtcp_control *msg)
89{
90 struct atm_vcc *vcc = *(struct atm_vcc **) &msg->vcc;
91

--- 8 unchanged lines hidden (view full) ---

100 case ATMTCP_CTRL_CLOSE:
101 change_bit(ATM_VF_ADDR,&vcc->flags);
102 break;
103 default:
104 printk(KERN_ERR "atmtcp_recv_control: unknown type %d\n",
105 msg->type);
106 return -EINVAL;
107 }
108 wake_up(sk_atm(vcc)->sk_sleep);
108 wake_up(sk_sleep(sk_atm(vcc)));
109 return 0;
110}
111
112
113static void atmtcp_v_dev_close(struct atm_dev *dev)
114{
115 /* Nothing.... Isn't this simple :-) -- REW */
116}

--- 374 unchanged lines hidden ---
109 return 0;
110}
111
112
113static void atmtcp_v_dev_close(struct atm_dev *dev)
114{
115 /* Nothing.... Isn't this simple :-) -- REW */
116}

--- 374 unchanged lines hidden ---