Lines Matching refs:cdev
113 struct capidev *cdev; member
300 static void capincci_alloc_minor(struct capidev *cdev, struct capincci *np) in capincci_alloc_minor() argument
302 if (cdev->userflags & CAPIFLAG_HIGHJACKING) in capincci_alloc_minor()
303 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()
714 CAPIMSG_SETAPPID(skb->data, cdev->ap.applid); in capi_write()
721 mutex_lock(&cdev->lock); in capi_write()
722 capincci_free(cdev, CAPIMSG_NCCI(skb->data)); in capi_write()
723 mutex_unlock(&cdev->lock); in capi_write()
726 cdev->errcode = capi20_put_message(&cdev->ap, skb); in capi_write()
728 if (cdev->errcode) { in capi_write()
738 struct capidev *cdev = file->private_data; in capi_poll() local
741 if (!cdev->ap.applid) in capi_poll()
744 poll_wait(file, &(cdev->recvwait), wait); in capi_poll()
746 if (!skb_queue_empty_lockless(&cdev->recvqueue)) in capi_poll()
754 struct capidev *cdev = file->private_data; in capi_ioctl() local
761 mutex_lock(&cdev->lock); in capi_ioctl()
763 if (cdev->ap.applid) { in capi_ioctl()
767 if (copy_from_user(&cdev->ap.rparam, argp, in capi_ioctl()
772 cdev->ap.private = cdev; in capi_ioctl()
773 cdev->ap.recv_message = capi_recv_message; in capi_ioctl()
774 cdev->errcode = capi20_register(&cdev->ap); in capi_ioctl()
775 retval = (int)cdev->ap.applid; in capi_ioctl()
776 if (cdev->errcode) { in capi_ioctl()
777 cdev->ap.applid = 0; in capi_ioctl()
782 mutex_unlock(&cdev->lock); in capi_ioctl()
789 cdev->errcode = capi20_get_version(data.contr, &data.version); in capi_ioctl()
790 if (cdev->errcode) in capi_ioctl()
801 cdev->errcode = capi20_get_serial(data.contr, data.serial); in capi_ioctl()
802 if (cdev->errcode) in capi_ioctl()
815 cdev->errcode = capi20_get_profile(data.contr, &data.profile); in capi_ioctl()
816 if (cdev->errcode) in capi_ioctl()
824 cdev->errcode = capi20_get_profile(data.contr, &data.profile); in capi_ioctl()
825 if (cdev->errcode) in capi_ioctl()
839 cdev->errcode = capi20_get_manufacturer(data.contr, data.manufacturer); in capi_ioctl()
840 if (cdev->errcode) in capi_ioctl()
850 data.errcode = cdev->errcode; in capi_ioctl()
851 cdev->errcode = CAPI_NOERROR; in capi_ioctl()
879 mutex_lock(&cdev->lock); in capi_ioctl()
881 cdev->userflags |= userflags; in capi_ioctl()
883 cdev->userflags &= ~userflags; in capi_ioctl()
884 mutex_unlock(&cdev->lock); in capi_ioctl()
888 if (copy_to_user(argp, &cdev->userflags, in capi_ioctl()
889 sizeof(cdev->userflags))) in capi_ioctl()
906 mutex_lock(&cdev->lock); in capi_ioctl()
907 nccip = capincci_find(cdev, (u32)ncci); in capi_ioctl()
910 mutex_unlock(&cdev->lock); in capi_ioctl()
923 mutex_lock(&cdev->lock); in capi_ioctl()
924 nccip = capincci_find(cdev, (u32)ncci); in capi_ioctl()
930 mutex_unlock(&cdev->lock); in capi_ioctl()
982 struct capidev *cdev; in capi_open() local
984 cdev = kzalloc(sizeof(*cdev), GFP_KERNEL); in capi_open()
985 if (!cdev) in capi_open()
988 mutex_init(&cdev->lock); in capi_open()
989 skb_queue_head_init(&cdev->recvqueue); in capi_open()
990 init_waitqueue_head(&cdev->recvwait); in capi_open()
991 INIT_LIST_HEAD(&cdev->nccis); in capi_open()
992 file->private_data = cdev; in capi_open()
995 list_add_tail(&cdev->list, &capidev_list); in capi_open()
1003 struct capidev *cdev = file->private_data; in capi_release() local
1006 list_del(&cdev->list); in capi_release()
1009 if (cdev->ap.applid) in capi_release()
1010 capi20_release(&cdev->ap); in capi_release()
1011 skb_queue_purge(&cdev->recvqueue); in capi_release()
1012 capincci_free(cdev, 0xffffffff); in capi_release()
1014 kfree(cdev); in capi_release()
1323 struct capidev *cdev; in capi20_proc_show() local
1328 cdev = list_entry(l, struct capidev, list); in capi20_proc_show()
1330 cdev->ap.applid, in capi20_proc_show()
1331 cdev->ap.nrecvctlpkt, in capi20_proc_show()
1332 cdev->ap.nrecvdatapkt, in capi20_proc_show()
1333 cdev->ap.nsentctlpkt, in capi20_proc_show()
1334 cdev->ap.nsentdatapkt); in capi20_proc_show()
1346 struct capidev *cdev; in capi20ncci_proc_show() local
1350 list_for_each_entry(cdev, &capidev_list, list) { in capi20ncci_proc_show()
1351 mutex_lock(&cdev->lock); in capi20ncci_proc_show()
1352 list_for_each_entry(np, &cdev->nccis, list) in capi20ncci_proc_show()
1353 seq_printf(m, "%d 0x%x\n", cdev->ap.applid, np->ncci); in capi20ncci_proc_show()
1354 mutex_unlock(&cdev->lock); in capi20ncci_proc_show()