Lines Matching defs:mp

143 static int capiminor_add_ack(struct capiminor *mp, u16 datahandle)
154 spin_lock_bh(&mp->ackqlock);
155 list_add_tail(&n->list, &mp->ackqueue);
156 mp->nack++;
157 spin_unlock_bh(&mp->ackqlock);
161 static int capiminor_del_ack(struct capiminor *mp, u16 datahandle)
165 spin_lock_bh(&mp->ackqlock);
166 list_for_each_entry_safe(p, tmp, &mp->ackqueue, list) {
169 mp->nack--;
170 spin_unlock_bh(&mp->ackqlock);
175 spin_unlock_bh(&mp->ackqlock);
179 static void capiminor_del_all_ack(struct capiminor *mp)
183 list_for_each_entry_safe(p, tmp, &mp->ackqueue, list) {
186 mp->nack--;
197 struct capiminor *mp;
201 mp = kzalloc(sizeof(*mp), GFP_KERNEL);
202 if (!mp) {
207 kref_init(&mp->kref);
209 mp->ap = ap;
210 mp->ncci = ncci;
211 INIT_LIST_HEAD(&mp->ackqueue);
212 spin_lock_init(&mp->ackqlock);
214 skb_queue_head_init(&mp->inqueue);
215 skb_queue_head_init(&mp->outqueue);
216 spin_lock_init(&mp->outlock);
218 tty_port_init(&mp->port);
219 mp->port.ops = &capiminor_port_ops;
225 capiminors[minor] = mp;
235 mp->minor = minor;
241 return mp;
249 kfree(mp);
255 struct capiminor *mp = container_of(kref, struct capiminor, kref);
257 kfree_skb(mp->outskb);
258 skb_queue_purge(&mp->inqueue);
259 skb_queue_purge(&mp->outqueue);
260 capiminor_del_all_ack(mp);
261 kfree(mp);
266 struct capiminor *mp;
269 mp = capiminors[minor];
270 if (mp)
271 kref_get(&mp->kref);
274 return mp;
277 static inline void capiminor_put(struct capiminor *mp)
279 kref_put(&mp->kref, capiminor_destroy);
282 static void capiminor_free(struct capiminor *mp)
284 tty_unregister_device(capinc_tty_driver, mp->minor);
287 capiminors[mp->minor] = NULL;
290 capiminor_put(mp);
303 struct capiminor *mp = np->minorp;
306 if (mp) {
307 tty = tty_port_tty_get(&mp->port);
313 capiminor_free(mp);
319 struct capiminor *mp = np->minorp;
323 if (mp) {
324 tty = tty_port_tty_get(&mp->port);
389 gen_data_b3_resp_for(struct capiminor *mp, struct sk_buff *skb)
397 capimsg_setu16(s, 2, mp->ap->applid);
400 capimsg_setu16(s, 6, atomic_inc_return(&mp->msgid));
401 capimsg_setu32(s, 8, mp->ncci);
407 static int handle_recv_skb(struct capiminor *mp, struct sk_buff *skb)
416 tty = tty_port_tty_get(&mp->port);
435 if (mp->ttyinstop) {
445 nskb = gen_data_b3_resp_for(mp, skb);
453 errcode = capi20_put_message(mp->ap, nskb);
481 static void handle_minor_recv(struct capiminor *mp)
485 while ((skb = skb_dequeue(&mp->inqueue)) != NULL)
486 if (handle_recv_skb(mp, skb) < 0) {
487 skb_queue_head(&mp->inqueue, skb);
492 static void handle_minor_send(struct capiminor *mp)
500 tty = tty_port_tty_get(&mp->port);
504 if (mp->ttyoutstop) {
511 spin_lock_bh(&mp->outlock);
512 skb = __skb_dequeue(&mp->outqueue);
514 spin_unlock_bh(&mp->outlock);
518 mp->outbytes -= len;
519 spin_unlock_bh(&mp->outlock);
521 datahandle = atomic_inc_return(&mp->datahandle);
525 capimsg_setu16(skb->data, 2, mp->ap->applid);
528 capimsg_setu16(skb->data, 6, atomic_inc_return(&mp->msgid));
529 capimsg_setu32(skb->data, 8, mp->ncci); /* NCCI */
535 if (capiminor_add_ack(mp, datahandle) < 0) {
538 spin_lock_bh(&mp->outlock);
539 __skb_queue_head(&mp->outqueue, skb);
540 mp->outbytes += len;
541 spin_unlock_bh(&mp->outlock);
545 errcode = capi20_put_message(mp->ap, skb);
551 capiminor_del_ack(mp, datahandle);
556 spin_lock_bh(&mp->outlock);
557 __skb_queue_head(&mp->outqueue, skb);
558 mp->outbytes += len;
559 spin_unlock_bh(&mp->outlock);
579 struct capiminor *mp;
614 mp = np->minorp;
615 if (!mp) {
624 skb_queue_tail(&mp->inqueue, skb);
626 handle_minor_recv(mp);
635 capiminor_del_ack(mp, datahandle);
636 tty = tty_port_tty_get(&mp->port);
641 handle_minor_send(mp);
924 struct capiminor *mp;
934 mp = nccip->minorp;
935 if (mp)
936 unit = mp->minor;
1016 struct capiminor *mp = capiminor_get(tty->index);
1020 tty->driver_data = mp;
1022 capiminor_put(mp);
1028 struct capiminor *mp = tty->driver_data;
1030 capiminor_put(mp);
1035 struct capiminor *mp = tty->driver_data;
1038 err = tty_port_open(&mp->port, tty, filp);
1042 handle_minor_recv(mp);
1048 struct capiminor *mp = tty->driver_data;
1050 tty_port_close(&mp->port, tty, filp);
1056 struct capiminor *mp = tty->driver_data;
1061 spin_lock_bh(&mp->outlock);
1062 skb = mp->outskb;
1064 mp->outskb = NULL;
1065 __skb_queue_tail(&mp->outqueue, skb);
1066 mp->outbytes += skb->len;
1072 spin_unlock_bh(&mp->outlock);
1079 __skb_queue_tail(&mp->outqueue, skb);
1080 mp->outbytes += skb->len;
1081 spin_unlock_bh(&mp->outlock);
1083 handle_minor_send(mp);
1090 struct capiminor *mp = tty->driver_data;
1097 spin_lock_bh(&mp->outlock);
1098 skb = mp->outskb;
1104 mp->outskb = NULL;
1105 __skb_queue_tail(&mp->outqueue, skb);
1106 mp->outbytes += skb->len;
1114 mp->outskb = skb;
1121 spin_unlock_bh(&mp->outlock);
1124 handle_minor_send(mp);
1131 struct capiminor *mp = tty->driver_data;
1136 spin_lock_bh(&mp->outlock);
1137 skb = mp->outskb;
1139 mp->outskb = NULL;
1140 __skb_queue_tail(&mp->outqueue, skb);
1141 mp->outbytes += skb->len;
1142 spin_unlock_bh(&mp->outlock);
1144 handle_minor_send(mp);
1146 spin_unlock_bh(&mp->outlock);
1148 handle_minor_recv(mp);
1153 struct capiminor *mp = tty->driver_data;
1156 room = CAPINC_MAX_SENDQUEUE-skb_queue_len(&mp->outqueue);
1164 struct capiminor *mp = tty->driver_data;
1167 mp->outbytes, mp->nack,
1168 skb_queue_len(&mp->outqueue),
1169 skb_queue_len(&mp->inqueue));
1170 return mp->outbytes;
1186 struct capiminor *mp = tty->driver_data;
1188 mp->ttyinstop = 1;
1193 struct capiminor *mp = tty->driver_data;
1196 mp->ttyinstop = 0;
1197 handle_minor_recv(mp);
1202 struct capiminor *mp = tty->driver_data;
1205 mp->ttyoutstop = 1;
1210 struct capiminor *mp = tty->driver_data;
1213 mp->ttyoutstop = 0;
1214 handle_minor_send(mp);
1219 struct capiminor *mp = tty->driver_data;
1222 tty_port_hangup(&mp->port);