Lines Matching refs:cdev
107 struct capidev *cdev; member
294 static void capincci_alloc_minor(struct capidev *cdev, struct capincci *np) in capincci_alloc_minor() argument
296 if (cdev->userflags & CAPIFLAG_HIGHJACKING) in capincci_alloc_minor()
297 np->minorp = capiminor_alloc(&cdev->ap, np->ncci); in capincci_alloc_minor()
335 capincci_alloc_minor(struct capidev *cdev, struct capincci *np) { } in capincci_alloc_minor() argument
340 static struct capincci *capincci_alloc(struct capidev *cdev, u32 ncci) in capincci_alloc() argument
348 np->cdev = cdev; in capincci_alloc()
350 capincci_alloc_minor(cdev, np); in capincci_alloc()
352 list_add_tail(&np->list, &cdev->nccis); in capincci_alloc()
357 static void capincci_free(struct capidev *cdev, u32 ncci) in capincci_free() argument
361 list_for_each_entry_safe(np, tmp, &cdev->nccis, list) in capincci_free()
370 static struct capincci *capincci_find(struct capidev *cdev, u32 ncci) in capincci_find() argument
374 list_for_each_entry(np, &cdev->nccis, list) in capincci_find()
570 struct capidev *cdev = ap->private; in capi_recv_message() local
577 mutex_lock(&cdev->lock); in capi_recv_message()
582 capincci_alloc(cdev, CAPIMSG_NCCI(skb->data)); in capi_recv_message()
585 capincci_alloc(cdev, CAPIMSG_NCCI(skb->data)); in capi_recv_message()
588 skb_queue_tail(&cdev->recvqueue, skb); in capi_recv_message()
589 wake_up_interruptible(&cdev->recvwait); in capi_recv_message()
594 skb_queue_tail(&cdev->recvqueue, skb); in capi_recv_message()
595 wake_up_interruptible(&cdev->recvwait); in capi_recv_message()
599 np = capincci_find(cdev, CAPIMSG_CONTROL(skb->data)); in capi_recv_message()
602 skb_queue_tail(&cdev->recvqueue, skb); in capi_recv_message()
603 wake_up_interruptible(&cdev->recvwait); in capi_recv_message()
609 skb_queue_tail(&cdev->recvqueue, skb); in capi_recv_message()
610 wake_up_interruptible(&cdev->recvwait); in capi_recv_message()
634 skb_queue_tail(&cdev->recvqueue, skb); in capi_recv_message()
635 wake_up_interruptible(&cdev->recvwait); in capi_recv_message()
640 mutex_unlock(&cdev->lock); in capi_recv_message()
648 struct capidev *cdev = file->private_data; in capi_read() local
653 if (!cdev->ap.applid) in capi_read()
656 skb = skb_dequeue(&cdev->recvqueue); in capi_read()
660 err = wait_event_interruptible(cdev->recvwait, in capi_read()
661 (skb = skb_dequeue(&cdev->recvqueue))); in capi_read()
666 skb_queue_head(&cdev->recvqueue, skb); in capi_read()
670 skb_queue_head(&cdev->recvqueue, skb); in capi_read()
683 struct capidev *cdev = file->private_data; in capi_write() local
687 if (!cdev->ap.applid) in capi_write()
710 CAPIMSG_SETAPPID(skb->data, cdev->ap.applid); in capi_write()
713 mutex_lock(&cdev->lock); in capi_write()
714 capincci_free(cdev, CAPIMSG_NCCI(skb->data)); in capi_write()
715 mutex_unlock(&cdev->lock); in capi_write()
718 cdev->errcode = capi20_put_message(&cdev->ap, skb); in capi_write()
720 if (cdev->errcode) { in capi_write()
730 struct capidev *cdev = file->private_data; in capi_poll() local
733 if (!cdev->ap.applid) in capi_poll()
736 poll_wait(file, &(cdev->recvwait), wait); in capi_poll()
738 if (!skb_queue_empty(&cdev->recvqueue)) in capi_poll()
746 struct capidev *cdev = file->private_data; in capi_ioctl() local
753 mutex_lock(&cdev->lock); in capi_ioctl()
755 if (cdev->ap.applid) { in capi_ioctl()
759 if (copy_from_user(&cdev->ap.rparam, argp, in capi_ioctl()
764 cdev->ap.private = cdev; in capi_ioctl()
765 cdev->ap.recv_message = capi_recv_message; in capi_ioctl()
766 cdev->errcode = capi20_register(&cdev->ap); in capi_ioctl()
767 retval = (int)cdev->ap.applid; in capi_ioctl()
768 if (cdev->errcode) { in capi_ioctl()
769 cdev->ap.applid = 0; in capi_ioctl()
774 mutex_unlock(&cdev->lock); in capi_ioctl()
781 cdev->errcode = capi20_get_version(data.contr, &data.version); in capi_ioctl()
782 if (cdev->errcode) in capi_ioctl()
793 cdev->errcode = capi20_get_serial(data.contr, data.serial); in capi_ioctl()
794 if (cdev->errcode) in capi_ioctl()
807 cdev->errcode = capi20_get_profile(data.contr, &data.profile); in capi_ioctl()
808 if (cdev->errcode) in capi_ioctl()
816 cdev->errcode = capi20_get_profile(data.contr, &data.profile); in capi_ioctl()
817 if (cdev->errcode) in capi_ioctl()
831 cdev->errcode = capi20_get_manufacturer(data.contr, data.manufacturer); in capi_ioctl()
832 if (cdev->errcode) in capi_ioctl()
842 data.errcode = cdev->errcode; in capi_ioctl()
843 cdev->errcode = CAPI_NOERROR; in capi_ioctl()
871 mutex_lock(&cdev->lock); in capi_ioctl()
873 cdev->userflags |= userflags; in capi_ioctl()
875 cdev->userflags &= ~userflags; in capi_ioctl()
876 mutex_unlock(&cdev->lock); in capi_ioctl()
880 if (copy_to_user(argp, &cdev->userflags, in capi_ioctl()
881 sizeof(cdev->userflags))) in capi_ioctl()
898 mutex_lock(&cdev->lock); in capi_ioctl()
899 nccip = capincci_find(cdev, (u32)ncci); in capi_ioctl()
902 mutex_unlock(&cdev->lock); in capi_ioctl()
915 mutex_lock(&cdev->lock); in capi_ioctl()
916 nccip = capincci_find(cdev, (u32)ncci); in capi_ioctl()
922 mutex_unlock(&cdev->lock); in capi_ioctl()
946 struct capidev *cdev; in capi_open() local
948 cdev = kzalloc(sizeof(*cdev), GFP_KERNEL); in capi_open()
949 if (!cdev) in capi_open()
952 mutex_init(&cdev->lock); in capi_open()
953 skb_queue_head_init(&cdev->recvqueue); in capi_open()
954 init_waitqueue_head(&cdev->recvwait); in capi_open()
955 INIT_LIST_HEAD(&cdev->nccis); in capi_open()
956 file->private_data = cdev; in capi_open()
959 list_add_tail(&cdev->list, &capidev_list); in capi_open()
967 struct capidev *cdev = file->private_data; in capi_release() local
970 list_del(&cdev->list); in capi_release()
973 if (cdev->ap.applid) in capi_release()
974 capi20_release(&cdev->ap); in capi_release()
975 skb_queue_purge(&cdev->recvqueue); in capi_release()
976 capincci_free(cdev, 0xffffffff); in capi_release()
978 kfree(cdev); in capi_release()
1326 struct capidev *cdev; in capi20_proc_show() local
1331 cdev = list_entry(l, struct capidev, list); in capi20_proc_show()
1333 cdev->ap.applid, in capi20_proc_show()
1334 cdev->ap.nrecvctlpkt, in capi20_proc_show()
1335 cdev->ap.nrecvdatapkt, in capi20_proc_show()
1336 cdev->ap.nsentctlpkt, in capi20_proc_show()
1337 cdev->ap.nsentdatapkt); in capi20_proc_show()
1362 struct capidev *cdev; in capi20ncci_proc_show() local
1366 list_for_each_entry(cdev, &capidev_list, list) { in capi20ncci_proc_show()
1367 mutex_lock(&cdev->lock); in capi20ncci_proc_show()
1368 list_for_each_entry(np, &cdev->nccis, list) in capi20ncci_proc_show()
1369 seq_printf(m, "%d 0x%x\n", cdev->ap.applid, np->ncci); in capi20ncci_proc_show()
1370 mutex_unlock(&cdev->lock); in capi20ncci_proc_show()