Lines Matching defs:lapb

37 #include <net/lapb.h>
43 * Free an allocated lapb control block.
45 static void lapb_free_cb(struct lapb_cb *lapb)
47 kfree(lapb);
50 static __inline__ void lapb_hold(struct lapb_cb *lapb)
52 refcount_inc(&lapb->refcnt);
55 static __inline__ void lapb_put(struct lapb_cb *lapb)
57 if (refcount_dec_and_test(&lapb->refcnt))
58 lapb_free_cb(lapb);
64 static void __lapb_remove_cb(struct lapb_cb *lapb)
66 if (lapb->node.next) {
67 list_del(&lapb->node);
68 lapb_put(lapb);
75 static void __lapb_insert_cb(struct lapb_cb *lapb)
77 list_add(&lapb->node, &lapb_list);
78 lapb_hold(lapb);
84 struct lapb_cb *lapb, *use = NULL;
87 lapb = list_entry(entry, struct lapb_cb, node);
88 if (lapb->dev == dev) {
89 use = lapb;
115 struct lapb_cb *lapb = kzalloc(sizeof(*lapb), GFP_ATOMIC);
117 if (!lapb)
120 skb_queue_head_init(&lapb->write_queue);
121 skb_queue_head_init(&lapb->ack_queue);
123 timer_setup(&lapb->t1timer, NULL, 0);
124 timer_setup(&lapb->t2timer, NULL, 0);
126 lapb->t1 = LAPB_DEFAULT_T1;
127 lapb->t2 = LAPB_DEFAULT_T2;
128 lapb->n2 = LAPB_DEFAULT_N2;
129 lapb->mode = LAPB_DEFAULT_MODE;
130 lapb->window = LAPB_DEFAULT_WINDOW;
131 lapb->state = LAPB_STATE_0;
132 refcount_set(&lapb->refcnt, 1);
134 return lapb;
140 struct lapb_cb *lapb;
145 lapb = __lapb_devtostruct(dev);
146 if (lapb) {
147 lapb_put(lapb);
151 lapb = lapb_create_cb();
153 if (!lapb)
156 lapb->dev = dev;
157 lapb->callbacks = callbacks;
159 __lapb_insert_cb(lapb);
161 lapb_start_t1timer(lapb);
172 struct lapb_cb *lapb;
176 lapb = __lapb_devtostruct(dev);
177 if (!lapb)
179 lapb_put(lapb);
181 lapb_stop_t1timer(lapb);
182 lapb_stop_t2timer(lapb);
184 lapb_clear_queues(lapb);
186 __lapb_remove_cb(lapb);
188 lapb_put(lapb);
199 struct lapb_cb *lapb = lapb_devtostruct(dev);
201 if (!lapb)
204 parms->t1 = lapb->t1 / HZ;
205 parms->t2 = lapb->t2 / HZ;
206 parms->n2 = lapb->n2;
207 parms->n2count = lapb->n2count;
208 parms->state = lapb->state;
209 parms->window = lapb->window;
210 parms->mode = lapb->mode;
212 if (!timer_pending(&lapb->t1timer))
215 parms->t1timer = (lapb->t1timer.expires - jiffies) / HZ;
217 if (!timer_pending(&lapb->t2timer))
220 parms->t2timer = (lapb->t2timer.expires - jiffies) / HZ;
222 lapb_put(lapb);
232 struct lapb_cb *lapb = lapb_devtostruct(dev);
234 if (!lapb)
241 if (lapb->state == LAPB_STATE_0) {
249 lapb->mode = parms->mode;
250 lapb->window = parms->window;
253 lapb->t1 = parms->t1 * HZ;
254 lapb->t2 = parms->t2 * HZ;
255 lapb->n2 = parms->n2;
259 lapb_put(lapb);
267 struct lapb_cb *lapb = lapb_devtostruct(dev);
270 if (!lapb)
274 if (lapb->state == LAPB_STATE_1)
278 if (lapb->state == LAPB_STATE_3 || lapb->state == LAPB_STATE_4)
281 lapb_establish_data_link(lapb);
283 lapb_dbg(0, "(%p) S0 -> S1\n", lapb->dev);
284 lapb->state = LAPB_STATE_1;
288 lapb_put(lapb);
296 struct lapb_cb *lapb = lapb_devtostruct(dev);
299 if (!lapb)
302 switch (lapb->state) {
308 lapb_dbg(1, "(%p) S1 TX DISC(1)\n", lapb->dev);
309 lapb_dbg(0, "(%p) S1 -> S0\n", lapb->dev);
310 lapb_send_control(lapb, LAPB_DISC, LAPB_POLLON, LAPB_COMMAND);
311 lapb->state = LAPB_STATE_0;
312 lapb_start_t1timer(lapb);
321 lapb_clear_queues(lapb);
322 lapb->n2count = 0;
323 lapb_send_control(lapb, LAPB_DISC, LAPB_POLLON, LAPB_COMMAND);
324 lapb_start_t1timer(lapb);
325 lapb_stop_t2timer(lapb);
326 lapb->state = LAPB_STATE_2;
328 lapb_dbg(1, "(%p) S3 DISC(1)\n", lapb->dev);
329 lapb_dbg(0, "(%p) S3 -> S2\n", lapb->dev);
333 lapb_put(lapb);
341 struct lapb_cb *lapb = lapb_devtostruct(dev);
344 if (!lapb)
348 if (lapb->state != LAPB_STATE_3 && lapb->state != LAPB_STATE_4)
351 skb_queue_tail(&lapb->write_queue, skb);
352 lapb_kick(lapb);
355 lapb_put(lapb);
363 struct lapb_cb *lapb = lapb_devtostruct(dev);
366 if (lapb) {
367 lapb_data_input(lapb, skb);
368 lapb_put(lapb);
376 void lapb_connect_confirmation(struct lapb_cb *lapb, int reason)
378 if (lapb->callbacks->connect_confirmation)
379 lapb->callbacks->connect_confirmation(lapb->dev, reason);
382 void lapb_connect_indication(struct lapb_cb *lapb, int reason)
384 if (lapb->callbacks->connect_indication)
385 lapb->callbacks->connect_indication(lapb->dev, reason);
388 void lapb_disconnect_confirmation(struct lapb_cb *lapb, int reason)
390 if (lapb->callbacks->disconnect_confirmation)
391 lapb->callbacks->disconnect_confirmation(lapb->dev, reason);
394 void lapb_disconnect_indication(struct lapb_cb *lapb, int reason)
396 if (lapb->callbacks->disconnect_indication)
397 lapb->callbacks->disconnect_indication(lapb->dev, reason);
400 int lapb_data_indication(struct lapb_cb *lapb, struct sk_buff *skb)
402 if (lapb->callbacks->data_indication)
403 return lapb->callbacks->data_indication(lapb->dev, skb);
409 int lapb_data_transmit(struct lapb_cb *lapb, struct sk_buff *skb)
413 if (lapb->callbacks->data_transmit) {
414 lapb->callbacks->data_transmit(lapb->dev, skb);