Lines Matching refs:lapb

50 static void lapb_free_cb(struct lapb_cb *lapb)  in lapb_free_cb()  argument
52 kfree(lapb); in lapb_free_cb()
55 static __inline__ void lapb_hold(struct lapb_cb *lapb) in lapb_hold() argument
57 atomic_inc(&lapb->refcnt); in lapb_hold()
60 static __inline__ void lapb_put(struct lapb_cb *lapb) in lapb_put() argument
62 if (atomic_dec_and_test(&lapb->refcnt)) in lapb_put()
63 lapb_free_cb(lapb); in lapb_put()
69 static void __lapb_remove_cb(struct lapb_cb *lapb) in __lapb_remove_cb() argument
71 if (lapb->node.next) { in __lapb_remove_cb()
72 list_del(&lapb->node); in __lapb_remove_cb()
73 lapb_put(lapb); in __lapb_remove_cb()
81 static void __lapb_insert_cb(struct lapb_cb *lapb) in __lapb_insert_cb() argument
83 list_add(&lapb->node, &lapb_list); in __lapb_insert_cb()
84 lapb_hold(lapb); in __lapb_insert_cb()
90 struct lapb_cb *lapb, *use = NULL; in __lapb_devtostruct() local
93 lapb = list_entry(entry, struct lapb_cb, node); in __lapb_devtostruct()
94 if (lapb->dev == dev) { in __lapb_devtostruct()
95 use = lapb; in __lapb_devtostruct()
121 struct lapb_cb *lapb = kzalloc(sizeof(*lapb), GFP_ATOMIC); in lapb_create_cb() local
124 if (!lapb) in lapb_create_cb()
127 skb_queue_head_init(&lapb->write_queue); in lapb_create_cb()
128 skb_queue_head_init(&lapb->ack_queue); in lapb_create_cb()
130 init_timer(&lapb->t1timer); in lapb_create_cb()
131 init_timer(&lapb->t2timer); in lapb_create_cb()
133 lapb->t1 = LAPB_DEFAULT_T1; in lapb_create_cb()
134 lapb->t2 = LAPB_DEFAULT_T2; in lapb_create_cb()
135 lapb->n2 = LAPB_DEFAULT_N2; in lapb_create_cb()
136 lapb->mode = LAPB_DEFAULT_MODE; in lapb_create_cb()
137 lapb->window = LAPB_DEFAULT_WINDOW; in lapb_create_cb()
138 lapb->state = LAPB_STATE_0; in lapb_create_cb()
139 atomic_set(&lapb->refcnt, 1); in lapb_create_cb()
141 return lapb; in lapb_create_cb()
147 struct lapb_cb *lapb; in lapb_register() local
152 lapb = __lapb_devtostruct(dev); in lapb_register()
153 if (lapb) { in lapb_register()
154 lapb_put(lapb); in lapb_register()
158 lapb = lapb_create_cb(); in lapb_register()
160 if (!lapb) in lapb_register()
163 lapb->dev = dev; in lapb_register()
164 lapb->callbacks = callbacks; in lapb_register()
166 __lapb_insert_cb(lapb); in lapb_register()
168 lapb_start_t1timer(lapb); in lapb_register()
178 struct lapb_cb *lapb; in lapb_unregister() local
182 lapb = __lapb_devtostruct(dev); in lapb_unregister()
183 if (!lapb) in lapb_unregister()
186 lapb_stop_t1timer(lapb); in lapb_unregister()
187 lapb_stop_t2timer(lapb); in lapb_unregister()
189 lapb_clear_queues(lapb); in lapb_unregister()
191 __lapb_remove_cb(lapb); in lapb_unregister()
193 lapb_put(lapb); in lapb_unregister()
204 struct lapb_cb *lapb = lapb_devtostruct(dev); in lapb_getparms() local
206 if (!lapb) in lapb_getparms()
209 parms->t1 = lapb->t1 / HZ; in lapb_getparms()
210 parms->t2 = lapb->t2 / HZ; in lapb_getparms()
211 parms->n2 = lapb->n2; in lapb_getparms()
212 parms->n2count = lapb->n2count; in lapb_getparms()
213 parms->state = lapb->state; in lapb_getparms()
214 parms->window = lapb->window; in lapb_getparms()
215 parms->mode = lapb->mode; in lapb_getparms()
217 if (!timer_pending(&lapb->t1timer)) in lapb_getparms()
220 parms->t1timer = (lapb->t1timer.expires - jiffies) / HZ; in lapb_getparms()
222 if (!timer_pending(&lapb->t2timer)) in lapb_getparms()
225 parms->t2timer = (lapb->t2timer.expires - jiffies) / HZ; in lapb_getparms()
227 lapb_put(lapb); in lapb_getparms()
237 struct lapb_cb *lapb = lapb_devtostruct(dev); in lapb_setparms() local
239 if (!lapb) in lapb_setparms()
246 if (lapb->state == LAPB_STATE_0) { in lapb_setparms()
254 lapb->mode = parms->mode; in lapb_setparms()
255 lapb->window = parms->window; in lapb_setparms()
258 lapb->t1 = parms->t1 * HZ; in lapb_setparms()
259 lapb->t2 = parms->t2 * HZ; in lapb_setparms()
260 lapb->n2 = parms->n2; in lapb_setparms()
264 lapb_put(lapb); in lapb_setparms()
272 struct lapb_cb *lapb = lapb_devtostruct(dev); in lapb_connect_request() local
275 if (!lapb) in lapb_connect_request()
279 if (lapb->state == LAPB_STATE_1) in lapb_connect_request()
283 if (lapb->state == LAPB_STATE_3 || lapb->state == LAPB_STATE_4) in lapb_connect_request()
286 lapb_establish_data_link(lapb); in lapb_connect_request()
288 lapb_dbg(0, "(%p) S0 -> S1\n", lapb->dev); in lapb_connect_request()
289 lapb->state = LAPB_STATE_1; in lapb_connect_request()
293 lapb_put(lapb); in lapb_connect_request()
301 struct lapb_cb *lapb = lapb_devtostruct(dev); in lapb_disconnect_request() local
304 if (!lapb) in lapb_disconnect_request()
307 switch (lapb->state) { in lapb_disconnect_request()
313 lapb_dbg(1, "(%p) S1 TX DISC(1)\n", lapb->dev); in lapb_disconnect_request()
314 lapb_dbg(0, "(%p) S1 -> S0\n", lapb->dev); in lapb_disconnect_request()
315 lapb_send_control(lapb, LAPB_DISC, LAPB_POLLON, LAPB_COMMAND); in lapb_disconnect_request()
316 lapb->state = LAPB_STATE_0; in lapb_disconnect_request()
317 lapb_start_t1timer(lapb); in lapb_disconnect_request()
326 lapb_clear_queues(lapb); in lapb_disconnect_request()
327 lapb->n2count = 0; in lapb_disconnect_request()
328 lapb_send_control(lapb, LAPB_DISC, LAPB_POLLON, LAPB_COMMAND); in lapb_disconnect_request()
329 lapb_start_t1timer(lapb); in lapb_disconnect_request()
330 lapb_stop_t2timer(lapb); in lapb_disconnect_request()
331 lapb->state = LAPB_STATE_2; in lapb_disconnect_request()
333 lapb_dbg(1, "(%p) S3 DISC(1)\n", lapb->dev); in lapb_disconnect_request()
334 lapb_dbg(0, "(%p) S3 -> S2\n", lapb->dev); in lapb_disconnect_request()
338 lapb_put(lapb); in lapb_disconnect_request()
346 struct lapb_cb *lapb = lapb_devtostruct(dev); in lapb_data_request() local
349 if (!lapb) in lapb_data_request()
353 if (lapb->state != LAPB_STATE_3 && lapb->state != LAPB_STATE_4) in lapb_data_request()
356 skb_queue_tail(&lapb->write_queue, skb); in lapb_data_request()
357 lapb_kick(lapb); in lapb_data_request()
360 lapb_put(lapb); in lapb_data_request()
368 struct lapb_cb *lapb = lapb_devtostruct(dev); in lapb_data_received() local
371 if (lapb) { in lapb_data_received()
372 lapb_data_input(lapb, skb); in lapb_data_received()
373 lapb_put(lapb); in lapb_data_received()
381 void lapb_connect_confirmation(struct lapb_cb *lapb, int reason) in lapb_connect_confirmation() argument
383 if (lapb->callbacks->connect_confirmation) in lapb_connect_confirmation()
384 lapb->callbacks->connect_confirmation(lapb->dev, reason); in lapb_connect_confirmation()
387 void lapb_connect_indication(struct lapb_cb *lapb, int reason) in lapb_connect_indication() argument
389 if (lapb->callbacks->connect_indication) in lapb_connect_indication()
390 lapb->callbacks->connect_indication(lapb->dev, reason); in lapb_connect_indication()
393 void lapb_disconnect_confirmation(struct lapb_cb *lapb, int reason) in lapb_disconnect_confirmation() argument
395 if (lapb->callbacks->disconnect_confirmation) in lapb_disconnect_confirmation()
396 lapb->callbacks->disconnect_confirmation(lapb->dev, reason); in lapb_disconnect_confirmation()
399 void lapb_disconnect_indication(struct lapb_cb *lapb, int reason) in lapb_disconnect_indication() argument
401 if (lapb->callbacks->disconnect_indication) in lapb_disconnect_indication()
402 lapb->callbacks->disconnect_indication(lapb->dev, reason); in lapb_disconnect_indication()
405 int lapb_data_indication(struct lapb_cb *lapb, struct sk_buff *skb) in lapb_data_indication() argument
407 if (lapb->callbacks->data_indication) in lapb_data_indication()
408 return lapb->callbacks->data_indication(lapb->dev, skb); in lapb_data_indication()
414 int lapb_data_transmit(struct lapb_cb *lapb, struct sk_buff *skb) in lapb_data_transmit() argument
418 if (lapb->callbacks->data_transmit) { in lapb_data_transmit()
419 lapb->callbacks->data_transmit(lapb->dev, skb); in lapb_data_transmit()