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 usbtmc488_ioctl_read_stb(struct usbtmc_file_data *file_data, in usbtmc488_ioctl_read_stb() argument
481 struct usbtmc_device_data *data = file_data->data; in usbtmc488_ioctl_read_stb()
493 srq_asserted = atomic_xchg(&file_data->srq_asserted, srq_asserted); in usbtmc488_ioctl_read_stb()
496 stb = file_data->srq_byte; in usbtmc488_ioctl_read_stb()
533 file_data->timeout); in usbtmc488_ioctl_read_stb()
570 static int usbtmc488_ioctl_wait_srq(struct usbtmc_file_data *file_data, in usbtmc488_ioctl_wait_srq() argument
573 struct usbtmc_device_data *data = file_data->data; in usbtmc488_ioctl_wait_srq()
593 atomic_read(&file_data->srq_asserted) != 0 || in usbtmc488_ioctl_wait_srq()
594 atomic_read(&file_data->closing), in usbtmc488_ioctl_wait_srq()
600 if (atomic_read(&file_data->closing) || data->zombie) in usbtmc488_ioctl_wait_srq()
679 static int usbtmc488_ioctl_trigger(struct usbtmc_file_data *file_data) in usbtmc488_ioctl_trigger() argument
681 struct usbtmc_device_data *data = file_data->data; in usbtmc488_ioctl_trigger()
698 &actual, file_data->timeout); in usbtmc488_ioctl_trigger()
741 struct usbtmc_file_data *file_data = urb->context; in usbtmc_read_bulk_cb() local
751 dev_err(&file_data->data->intf->dev, in usbtmc_read_bulk_cb()
755 spin_lock_irqsave(&file_data->err_lock, flags); in usbtmc_read_bulk_cb()
756 if (!file_data->in_status) in usbtmc_read_bulk_cb()
757 file_data->in_status = status; in usbtmc_read_bulk_cb()
758 spin_unlock_irqrestore(&file_data->err_lock, flags); in usbtmc_read_bulk_cb()
761 spin_lock_irqsave(&file_data->err_lock, flags); in usbtmc_read_bulk_cb()
762 file_data->in_transfer_size += urb->actual_length; in usbtmc_read_bulk_cb()
763 dev_dbg(&file_data->data->intf->dev, in usbtmc_read_bulk_cb()
765 __func__, file_data->in_transfer_size, in usbtmc_read_bulk_cb()
767 spin_unlock_irqrestore(&file_data->err_lock, flags); in usbtmc_read_bulk_cb()
768 usb_anchor_urb(urb, &file_data->in_anchor); in usbtmc_read_bulk_cb()
770 wake_up_interruptible(&file_data->wait_bulk_in); in usbtmc_read_bulk_cb()
771 wake_up_interruptible(&file_data->data->waitq); in usbtmc_read_bulk_cb()
774 static inline bool usbtmc_do_transfer(struct usbtmc_file_data *file_data) in usbtmc_do_transfer() argument
778 spin_lock_irq(&file_data->err_lock); in usbtmc_do_transfer()
779 data_or_error = !usb_anchor_empty(&file_data->in_anchor) in usbtmc_do_transfer()
780 || file_data->in_status; in usbtmc_do_transfer()
781 spin_unlock_irq(&file_data->err_lock); in usbtmc_do_transfer()
782 dev_dbg(&file_data->data->intf->dev, "%s: returns %d\n", __func__, in usbtmc_do_transfer()
787 static ssize_t usbtmc_generic_read(struct usbtmc_file_data *file_data, in usbtmc_generic_read() argument
793 struct usbtmc_device_data *data = file_data->data; in usbtmc_generic_read()
828 spin_lock_irq(&file_data->err_lock); in usbtmc_generic_read()
830 if (file_data->in_status) { in usbtmc_generic_read()
832 retval = file_data->in_status; in usbtmc_generic_read()
833 spin_unlock_irq(&file_data->err_lock); in usbtmc_generic_read()
838 if (usb_anchor_empty(&file_data->in_anchor)) in usbtmc_generic_read()
841 if (file_data->in_urbs_used == 0) { in usbtmc_generic_read()
842 file_data->in_transfer_size = 0; in usbtmc_generic_read()
843 file_data->in_status = 0; in usbtmc_generic_read()
846 file_data->in_transfer_size = 0; in usbtmc_generic_read()
847 file_data->in_status = 0; in usbtmc_generic_read()
854 if (bufcount > file_data->in_urbs_used) in usbtmc_generic_read()
855 bufcount -= file_data->in_urbs_used; in usbtmc_generic_read()
859 if (bufcount + file_data->in_urbs_used > MAX_URBS_IN_FLIGHT) { in usbtmc_generic_read()
861 file_data->in_urbs_used; in usbtmc_generic_read()
864 spin_unlock_irq(&file_data->err_lock); in usbtmc_generic_read()
868 max_transfer_size, bufcount, file_data->in_urbs_used); in usbtmc_generic_read()
884 usbtmc_read_bulk_cb, file_data); in usbtmc_generic_read()
886 usb_anchor_urb(urb, &file_data->submitted); in usbtmc_generic_read()
894 file_data->in_urbs_used++; in usbtmc_generic_read()
906 expire = msecs_to_jiffies(file_data->timeout); in usbtmc_generic_read()
916 file_data->wait_bulk_in, in usbtmc_generic_read()
917 usbtmc_do_transfer(file_data), in usbtmc_generic_read()
930 urb = usb_get_from_anchor(&file_data->in_anchor); in usbtmc_generic_read()
945 file_data->in_urbs_used--; in usbtmc_generic_read()
970 spin_lock_irq(&file_data->err_lock); in usbtmc_generic_read()
973 retval = file_data->in_status; in usbtmc_generic_read()
974 spin_unlock_irq(&file_data->err_lock); in usbtmc_generic_read()
978 spin_unlock_irq(&file_data->err_lock); in usbtmc_generic_read()
988 max_transfer_size > (bufsize * file_data->in_urbs_used)) { in usbtmc_generic_read()
990 usb_anchor_urb(urb, &file_data->submitted); in usbtmc_generic_read()
997 file_data->in_urbs_used++; in usbtmc_generic_read()
1008 usb_kill_anchored_urbs(&file_data->submitted); in usbtmc_generic_read()
1010 usb_scuttle_anchored_urbs(&file_data->in_anchor); in usbtmc_generic_read()
1011 file_data->in_urbs_used = 0; in usbtmc_generic_read()
1012 file_data->in_status = 0; /* no spinlock needed here */ in usbtmc_generic_read()
1018 static ssize_t usbtmc_ioctl_generic_read(struct usbtmc_file_data *file_data, in usbtmc_ioctl_generic_read() argument
1029 retval = usbtmc_generic_read(file_data, msg.message, in usbtmc_ioctl_generic_read()
1042 struct usbtmc_file_data *file_data = urb->context; in usbtmc_write_bulk_cb() local
1046 spin_lock_irqsave(&file_data->err_lock, flags); in usbtmc_write_bulk_cb()
1047 file_data->out_transfer_size += urb->actual_length; in usbtmc_write_bulk_cb()
1054 dev_err(&file_data->data->intf->dev, in usbtmc_write_bulk_cb()
1058 if (!file_data->out_status) { in usbtmc_write_bulk_cb()
1059 file_data->out_status = urb->status; in usbtmc_write_bulk_cb()
1063 spin_unlock_irqrestore(&file_data->err_lock, flags); in usbtmc_write_bulk_cb()
1065 dev_dbg(&file_data->data->intf->dev, in usbtmc_write_bulk_cb()
1067 __func__, file_data->out_transfer_size); in usbtmc_write_bulk_cb()
1069 up(&file_data->limit_write_sem); in usbtmc_write_bulk_cb()
1070 if (usb_anchor_empty(&file_data->submitted) || wakeup) in usbtmc_write_bulk_cb()
1071 wake_up_interruptible(&file_data->data->waitq); in usbtmc_write_bulk_cb()
1074 static ssize_t usbtmc_generic_write(struct usbtmc_file_data *file_data, in usbtmc_generic_write() argument
1080 struct usbtmc_device_data *data = file_data->data; in usbtmc_generic_write()
1097 file_data->limit_write_sem.count); in usbtmc_generic_write()
1100 spin_lock_irq(&file_data->err_lock); in usbtmc_generic_write()
1101 retval = file_data->out_status; in usbtmc_generic_write()
1102 spin_unlock_irq(&file_data->err_lock); in usbtmc_generic_write()
1106 spin_lock_irq(&file_data->err_lock); in usbtmc_generic_write()
1107 file_data->out_transfer_size = 0; in usbtmc_generic_write()
1108 file_data->out_status = 0; in usbtmc_generic_write()
1109 spin_unlock_irq(&file_data->err_lock); in usbtmc_generic_write()
1116 timeout = file_data->timeout; in usbtmc_generic_write()
1124 if (down_trylock(&file_data->limit_write_sem)) { in usbtmc_generic_write()
1129 retval = down_timeout(&file_data->limit_write_sem, in usbtmc_generic_write()
1137 spin_lock_irq(&file_data->err_lock); in usbtmc_generic_write()
1138 retval = file_data->out_status; in usbtmc_generic_write()
1139 spin_unlock_irq(&file_data->err_lock); in usbtmc_generic_write()
1141 up(&file_data->limit_write_sem); in usbtmc_generic_write()
1149 up(&file_data->limit_write_sem); in usbtmc_generic_write()
1161 up(&file_data->limit_write_sem); in usbtmc_generic_write()
1180 usbtmc_write_bulk_cb, file_data); in usbtmc_generic_write()
1182 usb_anchor_urb(urb, &file_data->submitted); in usbtmc_generic_write()
1186 up(&file_data->limit_write_sem); in usbtmc_generic_write()
1199 if (!usb_wait_anchor_empty_timeout(&file_data->submitted, in usbtmc_generic_write()
1210 usb_kill_anchored_urbs(&file_data->submitted); in usbtmc_generic_write()
1214 spin_lock_irq(&file_data->err_lock); in usbtmc_generic_write()
1216 done = file_data->out_transfer_size; in usbtmc_generic_write()
1217 if (!retval && file_data->out_status) in usbtmc_generic_write()
1218 retval = file_data->out_status; in usbtmc_generic_write()
1219 spin_unlock_irq(&file_data->err_lock); in usbtmc_generic_write()
1224 __func__, done, retval, file_data->out_status); in usbtmc_generic_write()
1229 static ssize_t usbtmc_ioctl_generic_write(struct usbtmc_file_data *file_data, in usbtmc_ioctl_generic_write() argument
1240 retval = usbtmc_generic_write(file_data, msg.message, in usbtmc_ioctl_generic_write()
1254 static ssize_t usbtmc_ioctl_write_result(struct usbtmc_file_data *file_data, in usbtmc_ioctl_write_result() argument
1260 spin_lock_irq(&file_data->err_lock); in usbtmc_ioctl_write_result()
1261 transferred = file_data->out_transfer_size; in usbtmc_ioctl_write_result()
1262 retval = file_data->out_status; in usbtmc_ioctl_write_result()
1263 spin_unlock_irq(&file_data->err_lock); in usbtmc_ioctl_write_result()
1279 static int send_request_dev_dep_msg_in(struct usbtmc_file_data *file_data, in send_request_dev_dep_msg_in() argument
1282 struct usbtmc_device_data *data = file_data->data; in send_request_dev_dep_msg_in()
1301 buffer[8] = file_data->term_char_enabled * 2; in send_request_dev_dep_msg_in()
1303 buffer[9] = file_data->term_char; in send_request_dev_dep_msg_in()
1312 &actual, file_data->timeout); in send_request_dev_dep_msg_in()
1333 struct usbtmc_file_data *file_data; in usbtmc_read() local
1345 file_data = filp->private_data; in usbtmc_read()
1346 data = file_data->data; in usbtmc_read()
1364 retval = send_request_dev_dep_msg_in(file_data, count); in usbtmc_read()
1367 if (file_data->auto_abort) in usbtmc_read()
1381 file_data->timeout); in usbtmc_read()
1390 if (file_data->auto_abort) in usbtmc_read()
1399 if (file_data->auto_abort) in usbtmc_read()
1407 if (file_data->auto_abort) in usbtmc_read()
1415 if (file_data->auto_abort) in usbtmc_read()
1426 file_data->bmTransferAttributes = buffer[8]; in usbtmc_read()
1434 if (file_data->auto_abort) in usbtmc_read()
1461 retval = usbtmc_generic_read(file_data, buf + actual, in usbtmc_read()
1483 struct usbtmc_file_data *file_data; in usbtmc_write() local
1491 file_data = filp->private_data; in usbtmc_write()
1492 data = file_data->data; in usbtmc_write()
1503 spin_lock_irq(&file_data->err_lock); in usbtmc_write()
1504 file_data->out_transfer_size = 0; in usbtmc_write()
1505 file_data->out_status = 0; in usbtmc_write()
1506 spin_unlock_irq(&file_data->err_lock); in usbtmc_write()
1511 if (down_trylock(&file_data->limit_write_sem)) { in usbtmc_write()
1520 up(&file_data->limit_write_sem); in usbtmc_write()
1532 buffer[8] = file_data->eom_val; in usbtmc_write()
1560 up(&file_data->limit_write_sem); in usbtmc_write()
1573 usbtmc_write_bulk_cb, file_data); in usbtmc_write()
1575 usb_anchor_urb(urb, &file_data->submitted); in usbtmc_write()
1579 up(&file_data->limit_write_sem); in usbtmc_write()
1592 retval = usbtmc_generic_write(file_data, buf + transfersize, remaining, in usbtmc_write()
1602 usb_kill_anchored_urbs(&file_data->submitted); in usbtmc_write()
1606 if (file_data->auto_abort) in usbtmc_write()
1756 static int usbtmc_ioctl_cancel_io(struct usbtmc_file_data *file_data) in usbtmc_ioctl_cancel_io() argument
1758 spin_lock_irq(&file_data->err_lock); in usbtmc_ioctl_cancel_io()
1759 file_data->in_status = -ECANCELED; in usbtmc_ioctl_cancel_io()
1760 file_data->out_status = -ECANCELED; in usbtmc_ioctl_cancel_io()
1761 spin_unlock_irq(&file_data->err_lock); in usbtmc_ioctl_cancel_io()
1762 usb_kill_anchored_urbs(&file_data->submitted); in usbtmc_ioctl_cancel_io()
1766 static int usbtmc_ioctl_cleanup_io(struct usbtmc_file_data *file_data) in usbtmc_ioctl_cleanup_io() argument
1768 usb_kill_anchored_urbs(&file_data->submitted); in usbtmc_ioctl_cleanup_io()
1769 usb_scuttle_anchored_urbs(&file_data->in_anchor); in usbtmc_ioctl_cleanup_io()
1770 spin_lock_irq(&file_data->err_lock); in usbtmc_ioctl_cleanup_io()
1771 file_data->in_status = 0; in usbtmc_ioctl_cleanup_io()
1772 file_data->in_transfer_size = 0; in usbtmc_ioctl_cleanup_io()
1773 file_data->out_status = 0; in usbtmc_ioctl_cleanup_io()
1774 file_data->out_transfer_size = 0; in usbtmc_ioctl_cleanup_io()
1775 spin_unlock_irq(&file_data->err_lock); in usbtmc_ioctl_cleanup_io()
1777 file_data->in_urbs_used = 0; in usbtmc_ioctl_cleanup_io()
1945 static int usbtmc_ioctl_get_timeout(struct usbtmc_file_data *file_data, in usbtmc_ioctl_get_timeout() argument
1950 timeout = file_data->timeout; in usbtmc_ioctl_get_timeout()
1958 static int usbtmc_ioctl_set_timeout(struct usbtmc_file_data *file_data, in usbtmc_ioctl_set_timeout() argument
1972 file_data->timeout = timeout; in usbtmc_ioctl_set_timeout()
1980 static int usbtmc_ioctl_eom_enable(struct usbtmc_file_data *file_data, in usbtmc_ioctl_eom_enable() argument
1991 file_data->eom_val = eom_enable; in usbtmc_ioctl_eom_enable()
1999 static int usbtmc_ioctl_config_termc(struct usbtmc_file_data *file_data, in usbtmc_ioctl_config_termc() argument
2009 !(file_data->data->capabilities.device_capabilities & 1))) in usbtmc_ioctl_config_termc()
2012 file_data->term_char = termc.term_char; in usbtmc_ioctl_config_termc()
2013 file_data->term_char_enabled = termc.term_char_enabled; in usbtmc_ioctl_config_termc()
2020 struct usbtmc_file_data *file_data; in usbtmc_ioctl() local
2025 file_data = file->private_data; in usbtmc_ioctl()
2026 data = file_data->data; in usbtmc_ioctl()
2064 retval = usbtmc_ioctl_get_timeout(file_data, in usbtmc_ioctl()
2069 retval = usbtmc_ioctl_set_timeout(file_data, in usbtmc_ioctl()
2074 retval = usbtmc_ioctl_eom_enable(file_data, in usbtmc_ioctl()
2079 retval = usbtmc_ioctl_config_termc(file_data, in usbtmc_ioctl()
2084 retval = usbtmc_ioctl_generic_write(file_data, in usbtmc_ioctl()
2089 retval = usbtmc_ioctl_generic_read(file_data, in usbtmc_ioctl()
2094 retval = usbtmc_ioctl_write_result(file_data, in usbtmc_ioctl()
2109 retval = usbtmc488_ioctl_read_stb(file_data, in usbtmc_ioctl()
2129 retval = usbtmc488_ioctl_trigger(file_data); in usbtmc_ioctl()
2133 retval = usbtmc488_ioctl_wait_srq(file_data, in usbtmc_ioctl()
2138 retval = put_user(file_data->bmTransferAttributes, in usbtmc_ioctl()
2145 file_data->auto_abort = !!tmp_byte; in usbtmc_ioctl()
2149 retval = usbtmc_ioctl_cancel_io(file_data); in usbtmc_ioctl()
2153 retval = usbtmc_ioctl_cleanup_io(file_data); in usbtmc_ioctl()
2164 struct usbtmc_file_data *file_data = file->private_data; in usbtmc_fasync() local
2166 return fasync_helper(fd, file, on, &file_data->data->fasync); in usbtmc_fasync()
2171 struct usbtmc_file_data *file_data = file->private_data; in usbtmc_poll() local
2172 struct usbtmc_device_data *data = file_data->data; in usbtmc_poll()
2188 if (atomic_read(&file_data->srq_asserted)) in usbtmc_poll()
2195 if (usb_anchor_empty(&file_data->submitted)) in usbtmc_poll()
2197 if (!usb_anchor_empty(&file_data->in_anchor)) in usbtmc_poll()
2200 spin_lock_irq(&file_data->err_lock); in usbtmc_poll()
2201 if (file_data->in_status || file_data->out_status) in usbtmc_poll()
2203 spin_unlock_irq(&file_data->err_lock); in usbtmc_poll()
2265 struct usbtmc_file_data *file_data; in usbtmc_interrupt() local
2267 file_data = list_entry(elem, in usbtmc_interrupt()
2270 file_data->srq_byte = data->iin_buffer[1]; in usbtmc_interrupt()
2271 atomic_set(&file_data->srq_asserted, 1); in usbtmc_interrupt()
2448 struct usbtmc_file_data *file_data; in usbtmc_disconnect() local
2450 file_data = list_entry(elem, in usbtmc_disconnect()
2453 usb_kill_anchored_urbs(&file_data->submitted); in usbtmc_disconnect()
2454 usb_scuttle_anchored_urbs(&file_data->in_anchor); in usbtmc_disconnect()
2461 static void usbtmc_draw_down(struct usbtmc_file_data *file_data) in usbtmc_draw_down() argument
2465 time = usb_wait_anchor_empty_timeout(&file_data->submitted, 1000); in usbtmc_draw_down()
2467 usb_kill_anchored_urbs(&file_data->submitted); in usbtmc_draw_down()
2468 usb_scuttle_anchored_urbs(&file_data->in_anchor); in usbtmc_draw_down()
2481 struct usbtmc_file_data *file_data; in usbtmc_suspend() local
2483 file_data = list_entry(elem, in usbtmc_suspend()
2486 usbtmc_draw_down(file_data); in usbtmc_suspend()
2520 struct usbtmc_file_data *file_data; in usbtmc_pre_reset() local
2522 file_data = list_entry(elem, in usbtmc_pre_reset()
2525 usbtmc_ioctl_cancel_io(file_data); in usbtmc_pre_reset()