Lines Matching refs:file_data

153 static void usbtmc_draw_down(struct usbtmc_file_data *file_data);
167 struct usbtmc_file_data *file_data; in usbtmc_open() local
175 file_data = kzalloc(sizeof(*file_data), GFP_KERNEL); in usbtmc_open()
176 if (!file_data) in usbtmc_open()
179 spin_lock_init(&file_data->err_lock); in usbtmc_open()
180 sema_init(&file_data->limit_write_sem, MAX_URBS_IN_FLIGHT); in usbtmc_open()
181 init_usb_anchor(&file_data->submitted); in usbtmc_open()
182 init_usb_anchor(&file_data->in_anchor); in usbtmc_open()
183 init_waitqueue_head(&file_data->wait_bulk_in); in usbtmc_open()
190 file_data->data = data; in usbtmc_open()
192 atomic_set(&file_data->closing, 0); in usbtmc_open()
194 file_data->timeout = USBTMC_TIMEOUT; in usbtmc_open()
195 file_data->term_char = '\n'; in usbtmc_open()
196 file_data->term_char_enabled = 0; in usbtmc_open()
197 file_data->auto_abort = 0; in usbtmc_open()
198 file_data->eom_val = 1; in usbtmc_open()
200 INIT_LIST_HEAD(&file_data->file_elem); in usbtmc_open()
202 list_add_tail(&file_data->file_elem, &data->file_list); in usbtmc_open()
207 filp->private_data = file_data; in usbtmc_open()
217 struct usbtmc_file_data *file_data; in usbtmc_flush() local
220 file_data = file->private_data; in usbtmc_flush()
221 if (file_data == NULL) in usbtmc_flush()
224 atomic_set(&file_data->closing, 1); in usbtmc_flush()
225 data = file_data->data; in usbtmc_flush()
230 usbtmc_draw_down(file_data); in usbtmc_flush()
232 spin_lock_irq(&file_data->err_lock); in usbtmc_flush()
233 file_data->in_status = 0; in usbtmc_flush()
234 file_data->in_transfer_size = 0; in usbtmc_flush()
235 file_data->in_urbs_used = 0; in usbtmc_flush()
236 file_data->out_status = 0; in usbtmc_flush()
237 file_data->out_transfer_size = 0; in usbtmc_flush()
238 spin_unlock_irq(&file_data->err_lock); in usbtmc_flush()
248 struct usbtmc_file_data *file_data = file->private_data; in usbtmc_release() local
251 mutex_lock(&file_data->data->io_mutex); in usbtmc_release()
252 spin_lock_irq(&file_data->data->dev_lock); in usbtmc_release()
254 list_del(&file_data->file_elem); in usbtmc_release()
256 spin_unlock_irq(&file_data->data->dev_lock); in usbtmc_release()
257 mutex_unlock(&file_data->data->io_mutex); in usbtmc_release()
259 kref_put(&file_data->data->kref, usbtmc_delete); in usbtmc_release()
260 file_data->data = NULL; in usbtmc_release()
261 kfree(file_data); in usbtmc_release()
478 static int usbtmc_get_stb(struct usbtmc_file_data *file_data, __u8 *stb) in usbtmc_get_stb() argument
480 struct usbtmc_device_data *data = file_data->data; in usbtmc_get_stb()
517 file_data->timeout); in usbtmc_get_stb()
553 static int usbtmc488_ioctl_read_stb(struct usbtmc_file_data *file_data, in usbtmc488_ioctl_read_stb() argument
560 rv = usbtmc_get_stb(file_data, &stb); in usbtmc488_ioctl_read_stb()
563 srq_asserted = atomic_xchg(&file_data->srq_asserted, in usbtmc488_ioctl_read_stb()
574 static int usbtmc_ioctl_get_srq_stb(struct usbtmc_file_data *file_data, in usbtmc_ioctl_get_srq_stb() argument
577 struct usbtmc_device_data *data = file_data->data; in usbtmc_ioctl_get_srq_stb()
584 srq_asserted = atomic_xchg(&file_data->srq_asserted, srq_asserted); in usbtmc_ioctl_get_srq_stb()
587 stb = file_data->srq_byte; in usbtmc_ioctl_get_srq_stb()
600 static int usbtmc488_ioctl_wait_srq(struct usbtmc_file_data *file_data, in usbtmc488_ioctl_wait_srq() argument
603 struct usbtmc_device_data *data = file_data->data; in usbtmc488_ioctl_wait_srq()
623 atomic_read(&file_data->srq_asserted) != 0 || in usbtmc488_ioctl_wait_srq()
624 atomic_read(&file_data->closing), in usbtmc488_ioctl_wait_srq()
630 if (atomic_read(&file_data->closing) || data->zombie) in usbtmc488_ioctl_wait_srq()
709 static int usbtmc488_ioctl_trigger(struct usbtmc_file_data *file_data) in usbtmc488_ioctl_trigger() argument
711 struct usbtmc_device_data *data = file_data->data; in usbtmc488_ioctl_trigger()
728 &actual, file_data->timeout); in usbtmc488_ioctl_trigger()
771 struct usbtmc_file_data *file_data = urb->context; in usbtmc_read_bulk_cb() local
781 dev_err(&file_data->data->intf->dev, in usbtmc_read_bulk_cb()
785 spin_lock_irqsave(&file_data->err_lock, flags); in usbtmc_read_bulk_cb()
786 if (!file_data->in_status) in usbtmc_read_bulk_cb()
787 file_data->in_status = status; in usbtmc_read_bulk_cb()
788 spin_unlock_irqrestore(&file_data->err_lock, flags); in usbtmc_read_bulk_cb()
791 spin_lock_irqsave(&file_data->err_lock, flags); in usbtmc_read_bulk_cb()
792 file_data->in_transfer_size += urb->actual_length; in usbtmc_read_bulk_cb()
793 dev_dbg(&file_data->data->intf->dev, in usbtmc_read_bulk_cb()
795 __func__, file_data->in_transfer_size, in usbtmc_read_bulk_cb()
797 spin_unlock_irqrestore(&file_data->err_lock, flags); in usbtmc_read_bulk_cb()
798 usb_anchor_urb(urb, &file_data->in_anchor); in usbtmc_read_bulk_cb()
800 wake_up_interruptible(&file_data->wait_bulk_in); in usbtmc_read_bulk_cb()
801 wake_up_interruptible(&file_data->data->waitq); in usbtmc_read_bulk_cb()
804 static inline bool usbtmc_do_transfer(struct usbtmc_file_data *file_data) in usbtmc_do_transfer() argument
808 spin_lock_irq(&file_data->err_lock); in usbtmc_do_transfer()
809 data_or_error = !usb_anchor_empty(&file_data->in_anchor) in usbtmc_do_transfer()
810 || file_data->in_status; in usbtmc_do_transfer()
811 spin_unlock_irq(&file_data->err_lock); in usbtmc_do_transfer()
812 dev_dbg(&file_data->data->intf->dev, "%s: returns %d\n", __func__, in usbtmc_do_transfer()
817 static ssize_t usbtmc_generic_read(struct usbtmc_file_data *file_data, in usbtmc_generic_read() argument
823 struct usbtmc_device_data *data = file_data->data; in usbtmc_generic_read()
858 spin_lock_irq(&file_data->err_lock); in usbtmc_generic_read()
860 if (file_data->in_status) { in usbtmc_generic_read()
862 retval = file_data->in_status; in usbtmc_generic_read()
863 spin_unlock_irq(&file_data->err_lock); in usbtmc_generic_read()
868 if (usb_anchor_empty(&file_data->in_anchor)) in usbtmc_generic_read()
871 if (file_data->in_urbs_used == 0) { in usbtmc_generic_read()
872 file_data->in_transfer_size = 0; in usbtmc_generic_read()
873 file_data->in_status = 0; in usbtmc_generic_read()
876 file_data->in_transfer_size = 0; in usbtmc_generic_read()
877 file_data->in_status = 0; in usbtmc_generic_read()
884 if (bufcount > file_data->in_urbs_used) in usbtmc_generic_read()
885 bufcount -= file_data->in_urbs_used; in usbtmc_generic_read()
889 if (bufcount + file_data->in_urbs_used > MAX_URBS_IN_FLIGHT) { in usbtmc_generic_read()
891 file_data->in_urbs_used; in usbtmc_generic_read()
894 spin_unlock_irq(&file_data->err_lock); in usbtmc_generic_read()
898 max_transfer_size, bufcount, file_data->in_urbs_used); in usbtmc_generic_read()
914 usbtmc_read_bulk_cb, file_data); in usbtmc_generic_read()
916 usb_anchor_urb(urb, &file_data->submitted); in usbtmc_generic_read()
924 file_data->in_urbs_used++; in usbtmc_generic_read()
936 expire = msecs_to_jiffies(file_data->timeout); in usbtmc_generic_read()
946 file_data->wait_bulk_in, in usbtmc_generic_read()
947 usbtmc_do_transfer(file_data), in usbtmc_generic_read()
960 urb = usb_get_from_anchor(&file_data->in_anchor); in usbtmc_generic_read()
975 file_data->in_urbs_used--; in usbtmc_generic_read()
1000 spin_lock_irq(&file_data->err_lock); in usbtmc_generic_read()
1003 retval = file_data->in_status; in usbtmc_generic_read()
1004 spin_unlock_irq(&file_data->err_lock); in usbtmc_generic_read()
1008 spin_unlock_irq(&file_data->err_lock); in usbtmc_generic_read()
1018 max_transfer_size > (bufsize * file_data->in_urbs_used)) { in usbtmc_generic_read()
1020 usb_anchor_urb(urb, &file_data->submitted); in usbtmc_generic_read()
1027 file_data->in_urbs_used++; in usbtmc_generic_read()
1038 usb_kill_anchored_urbs(&file_data->submitted); in usbtmc_generic_read()
1040 usb_scuttle_anchored_urbs(&file_data->in_anchor); in usbtmc_generic_read()
1041 file_data->in_urbs_used = 0; in usbtmc_generic_read()
1042 file_data->in_status = 0; /* no spinlock needed here */ in usbtmc_generic_read()
1048 static ssize_t usbtmc_ioctl_generic_read(struct usbtmc_file_data *file_data, in usbtmc_ioctl_generic_read() argument
1059 retval = usbtmc_generic_read(file_data, msg.message, in usbtmc_ioctl_generic_read()
1072 struct usbtmc_file_data *file_data = urb->context; in usbtmc_write_bulk_cb() local
1076 spin_lock_irqsave(&file_data->err_lock, flags); in usbtmc_write_bulk_cb()
1077 file_data->out_transfer_size += urb->actual_length; in usbtmc_write_bulk_cb()
1084 dev_err(&file_data->data->intf->dev, in usbtmc_write_bulk_cb()
1088 if (!file_data->out_status) { in usbtmc_write_bulk_cb()
1089 file_data->out_status = urb->status; in usbtmc_write_bulk_cb()
1093 spin_unlock_irqrestore(&file_data->err_lock, flags); in usbtmc_write_bulk_cb()
1095 dev_dbg(&file_data->data->intf->dev, in usbtmc_write_bulk_cb()
1097 __func__, file_data->out_transfer_size); in usbtmc_write_bulk_cb()
1099 up(&file_data->limit_write_sem); in usbtmc_write_bulk_cb()
1100 if (usb_anchor_empty(&file_data->submitted) || wakeup) in usbtmc_write_bulk_cb()
1101 wake_up_interruptible(&file_data->data->waitq); in usbtmc_write_bulk_cb()
1104 static ssize_t usbtmc_generic_write(struct usbtmc_file_data *file_data, in usbtmc_generic_write() argument
1110 struct usbtmc_device_data *data = file_data->data; in usbtmc_generic_write()
1127 file_data->limit_write_sem.count); in usbtmc_generic_write()
1130 spin_lock_irq(&file_data->err_lock); in usbtmc_generic_write()
1131 retval = file_data->out_status; in usbtmc_generic_write()
1132 spin_unlock_irq(&file_data->err_lock); in usbtmc_generic_write()
1136 spin_lock_irq(&file_data->err_lock); in usbtmc_generic_write()
1137 file_data->out_transfer_size = 0; in usbtmc_generic_write()
1138 file_data->out_status = 0; in usbtmc_generic_write()
1139 spin_unlock_irq(&file_data->err_lock); in usbtmc_generic_write()
1146 timeout = file_data->timeout; in usbtmc_generic_write()
1154 if (down_trylock(&file_data->limit_write_sem)) { in usbtmc_generic_write()
1159 retval = down_timeout(&file_data->limit_write_sem, in usbtmc_generic_write()
1167 spin_lock_irq(&file_data->err_lock); in usbtmc_generic_write()
1168 retval = file_data->out_status; in usbtmc_generic_write()
1169 spin_unlock_irq(&file_data->err_lock); in usbtmc_generic_write()
1171 up(&file_data->limit_write_sem); in usbtmc_generic_write()
1179 up(&file_data->limit_write_sem); in usbtmc_generic_write()
1191 up(&file_data->limit_write_sem); in usbtmc_generic_write()
1210 usbtmc_write_bulk_cb, file_data); in usbtmc_generic_write()
1212 usb_anchor_urb(urb, &file_data->submitted); in usbtmc_generic_write()
1216 up(&file_data->limit_write_sem); in usbtmc_generic_write()
1229 if (!usb_wait_anchor_empty_timeout(&file_data->submitted, in usbtmc_generic_write()
1240 usb_kill_anchored_urbs(&file_data->submitted); in usbtmc_generic_write()
1244 spin_lock_irq(&file_data->err_lock); in usbtmc_generic_write()
1246 done = file_data->out_transfer_size; in usbtmc_generic_write()
1247 if (!retval && file_data->out_status) in usbtmc_generic_write()
1248 retval = file_data->out_status; in usbtmc_generic_write()
1249 spin_unlock_irq(&file_data->err_lock); in usbtmc_generic_write()
1254 __func__, done, retval, file_data->out_status); in usbtmc_generic_write()
1259 static ssize_t usbtmc_ioctl_generic_write(struct usbtmc_file_data *file_data, in usbtmc_ioctl_generic_write() argument
1270 retval = usbtmc_generic_write(file_data, msg.message, in usbtmc_ioctl_generic_write()
1284 static ssize_t usbtmc_ioctl_write_result(struct usbtmc_file_data *file_data, in usbtmc_ioctl_write_result() argument
1290 spin_lock_irq(&file_data->err_lock); in usbtmc_ioctl_write_result()
1291 transferred = file_data->out_transfer_size; in usbtmc_ioctl_write_result()
1292 retval = file_data->out_status; in usbtmc_ioctl_write_result()
1293 spin_unlock_irq(&file_data->err_lock); in usbtmc_ioctl_write_result()
1309 static int send_request_dev_dep_msg_in(struct usbtmc_file_data *file_data, in send_request_dev_dep_msg_in() argument
1312 struct usbtmc_device_data *data = file_data->data; in send_request_dev_dep_msg_in()
1331 buffer[8] = file_data->term_char_enabled * 2; in send_request_dev_dep_msg_in()
1333 buffer[9] = file_data->term_char; in send_request_dev_dep_msg_in()
1342 &actual, file_data->timeout); in send_request_dev_dep_msg_in()
1363 struct usbtmc_file_data *file_data; in usbtmc_read() local
1375 file_data = filp->private_data; in usbtmc_read()
1376 data = file_data->data; in usbtmc_read()
1394 retval = send_request_dev_dep_msg_in(file_data, count); in usbtmc_read()
1397 if (file_data->auto_abort) in usbtmc_read()
1411 file_data->timeout); in usbtmc_read()
1420 if (file_data->auto_abort) in usbtmc_read()
1429 if (file_data->auto_abort) in usbtmc_read()
1437 if (file_data->auto_abort) in usbtmc_read()
1445 if (file_data->auto_abort) in usbtmc_read()
1456 file_data->bmTransferAttributes = buffer[8]; in usbtmc_read()
1464 if (file_data->auto_abort) in usbtmc_read()
1491 retval = usbtmc_generic_read(file_data, buf + actual, in usbtmc_read()
1513 struct usbtmc_file_data *file_data; in usbtmc_write() local
1521 file_data = filp->private_data; in usbtmc_write()
1522 data = file_data->data; in usbtmc_write()
1533 spin_lock_irq(&file_data->err_lock); in usbtmc_write()
1534 file_data->out_transfer_size = 0; in usbtmc_write()
1535 file_data->out_status = 0; in usbtmc_write()
1536 spin_unlock_irq(&file_data->err_lock); in usbtmc_write()
1541 if (down_trylock(&file_data->limit_write_sem)) { in usbtmc_write()
1550 up(&file_data->limit_write_sem); in usbtmc_write()
1562 buffer[8] = file_data->eom_val; in usbtmc_write()
1590 up(&file_data->limit_write_sem); in usbtmc_write()
1603 usbtmc_write_bulk_cb, file_data); in usbtmc_write()
1605 usb_anchor_urb(urb, &file_data->submitted); in usbtmc_write()
1609 up(&file_data->limit_write_sem); in usbtmc_write()
1622 retval = usbtmc_generic_write(file_data, buf + transfersize, remaining, in usbtmc_write()
1632 usb_kill_anchored_urbs(&file_data->submitted); in usbtmc_write()
1636 if (file_data->auto_abort) in usbtmc_write()
1786 static int usbtmc_ioctl_cancel_io(struct usbtmc_file_data *file_data) in usbtmc_ioctl_cancel_io() argument
1788 spin_lock_irq(&file_data->err_lock); in usbtmc_ioctl_cancel_io()
1789 file_data->in_status = -ECANCELED; in usbtmc_ioctl_cancel_io()
1790 file_data->out_status = -ECANCELED; in usbtmc_ioctl_cancel_io()
1791 spin_unlock_irq(&file_data->err_lock); in usbtmc_ioctl_cancel_io()
1792 usb_kill_anchored_urbs(&file_data->submitted); in usbtmc_ioctl_cancel_io()
1796 static int usbtmc_ioctl_cleanup_io(struct usbtmc_file_data *file_data) in usbtmc_ioctl_cleanup_io() argument
1798 usb_kill_anchored_urbs(&file_data->submitted); in usbtmc_ioctl_cleanup_io()
1799 usb_scuttle_anchored_urbs(&file_data->in_anchor); in usbtmc_ioctl_cleanup_io()
1800 spin_lock_irq(&file_data->err_lock); in usbtmc_ioctl_cleanup_io()
1801 file_data->in_status = 0; in usbtmc_ioctl_cleanup_io()
1802 file_data->in_transfer_size = 0; in usbtmc_ioctl_cleanup_io()
1803 file_data->out_status = 0; in usbtmc_ioctl_cleanup_io()
1804 file_data->out_transfer_size = 0; in usbtmc_ioctl_cleanup_io()
1805 spin_unlock_irq(&file_data->err_lock); in usbtmc_ioctl_cleanup_io()
1807 file_data->in_urbs_used = 0; in usbtmc_ioctl_cleanup_io()
1984 static int usbtmc_ioctl_get_timeout(struct usbtmc_file_data *file_data, in usbtmc_ioctl_get_timeout() argument
1989 timeout = file_data->timeout; in usbtmc_ioctl_get_timeout()
1997 static int usbtmc_ioctl_set_timeout(struct usbtmc_file_data *file_data, in usbtmc_ioctl_set_timeout() argument
2011 file_data->timeout = timeout; in usbtmc_ioctl_set_timeout()
2019 static int usbtmc_ioctl_eom_enable(struct usbtmc_file_data *file_data, in usbtmc_ioctl_eom_enable() argument
2030 file_data->eom_val = eom_enable; in usbtmc_ioctl_eom_enable()
2038 static int usbtmc_ioctl_config_termc(struct usbtmc_file_data *file_data, in usbtmc_ioctl_config_termc() argument
2048 !(file_data->data->capabilities.device_capabilities & 1))) in usbtmc_ioctl_config_termc()
2051 file_data->term_char = termc.term_char; in usbtmc_ioctl_config_termc()
2052 file_data->term_char_enabled = termc.term_char_enabled; in usbtmc_ioctl_config_termc()
2059 struct usbtmc_file_data *file_data; in usbtmc_ioctl() local
2064 file_data = file->private_data; in usbtmc_ioctl()
2065 data = file_data->data; in usbtmc_ioctl()
2103 retval = usbtmc_ioctl_get_timeout(file_data, in usbtmc_ioctl()
2108 retval = usbtmc_ioctl_set_timeout(file_data, in usbtmc_ioctl()
2113 retval = usbtmc_ioctl_eom_enable(file_data, in usbtmc_ioctl()
2118 retval = usbtmc_ioctl_config_termc(file_data, in usbtmc_ioctl()
2123 retval = usbtmc_ioctl_generic_write(file_data, in usbtmc_ioctl()
2128 retval = usbtmc_ioctl_generic_read(file_data, in usbtmc_ioctl()
2133 retval = usbtmc_ioctl_write_result(file_data, in usbtmc_ioctl()
2148 retval = usbtmc488_ioctl_read_stb(file_data, in usbtmc_ioctl()
2168 retval = usbtmc488_ioctl_trigger(file_data); in usbtmc_ioctl()
2172 retval = usbtmc488_ioctl_wait_srq(file_data, in usbtmc_ioctl()
2177 retval = put_user(file_data->bmTransferAttributes, in usbtmc_ioctl()
2184 file_data->auto_abort = !!tmp_byte; in usbtmc_ioctl()
2188 retval = usbtmc_get_stb(file_data, &tmp_byte); in usbtmc_ioctl()
2194 retval = usbtmc_ioctl_get_srq_stb(file_data, in usbtmc_ioctl()
2199 retval = usbtmc_ioctl_cancel_io(file_data); in usbtmc_ioctl()
2203 retval = usbtmc_ioctl_cleanup_io(file_data); in usbtmc_ioctl()
2214 struct usbtmc_file_data *file_data = file->private_data; in usbtmc_fasync() local
2216 return fasync_helper(fd, file, on, &file_data->data->fasync); in usbtmc_fasync()
2221 struct usbtmc_file_data *file_data = file->private_data; in usbtmc_poll() local
2222 struct usbtmc_device_data *data = file_data->data; in usbtmc_poll()
2238 if (atomic_read(&file_data->srq_asserted)) in usbtmc_poll()
2245 if (usb_anchor_empty(&file_data->submitted)) in usbtmc_poll()
2247 if (!usb_anchor_empty(&file_data->in_anchor)) in usbtmc_poll()
2250 spin_lock_irq(&file_data->err_lock); in usbtmc_poll()
2251 if (file_data->in_status || file_data->out_status) in usbtmc_poll()
2253 spin_unlock_irq(&file_data->err_lock); in usbtmc_poll()
2313 struct usbtmc_file_data *file_data; in usbtmc_interrupt() local
2315 file_data = list_entry(elem, in usbtmc_interrupt()
2318 file_data->srq_byte = data->iin_buffer[1]; in usbtmc_interrupt()
2319 atomic_set(&file_data->srq_asserted, 1); in usbtmc_interrupt()
2489 struct usbtmc_file_data *file_data; in usbtmc_disconnect() local
2491 file_data = list_entry(elem, in usbtmc_disconnect()
2494 usb_kill_anchored_urbs(&file_data->submitted); in usbtmc_disconnect()
2495 usb_scuttle_anchored_urbs(&file_data->in_anchor); in usbtmc_disconnect()
2502 static void usbtmc_draw_down(struct usbtmc_file_data *file_data) in usbtmc_draw_down() argument
2506 time = usb_wait_anchor_empty_timeout(&file_data->submitted, 1000); in usbtmc_draw_down()
2508 usb_kill_anchored_urbs(&file_data->submitted); in usbtmc_draw_down()
2509 usb_scuttle_anchored_urbs(&file_data->in_anchor); in usbtmc_draw_down()
2522 struct usbtmc_file_data *file_data; in usbtmc_suspend() local
2524 file_data = list_entry(elem, in usbtmc_suspend()
2527 usbtmc_draw_down(file_data); in usbtmc_suspend()
2561 struct usbtmc_file_data *file_data; in usbtmc_pre_reset() local
2563 file_data = list_entry(elem, in usbtmc_pre_reset()
2566 usbtmc_ioctl_cancel_io(file_data); in usbtmc_pre_reset()