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_obj(*file_data); 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()
259 usbtmc_draw_down(file_data); in usbtmc_release()
260 mutex_unlock(&file_data->data->io_mutex); in usbtmc_release()
262 kref_put(&file_data->data->kref, usbtmc_delete); in usbtmc_release()
263 file_data->data = NULL; in usbtmc_release()
264 kfree(file_data); in usbtmc_release()
481 static int usbtmc_get_stb(struct usbtmc_file_data *file_data, __u8 *stb) in usbtmc_get_stb() argument
483 struct usbtmc_device_data *data = file_data->data; in usbtmc_get_stb()
519 expire = msecs_to_jiffies(file_data->timeout); in usbtmc_get_stb()
562 static int usbtmc488_ioctl_read_stb(struct usbtmc_file_data *file_data, in usbtmc488_ioctl_read_stb() argument
569 rv = usbtmc_get_stb(file_data, &stb); in usbtmc488_ioctl_read_stb()
574 srq_asserted = atomic_xchg(&file_data->srq_asserted, srq_asserted); in usbtmc488_ioctl_read_stb()
584 static int usbtmc_ioctl_get_srq_stb(struct usbtmc_file_data *file_data, in usbtmc_ioctl_get_srq_stb() argument
587 struct usbtmc_device_data *data = file_data->data; in usbtmc_ioctl_get_srq_stb()
594 srq_asserted = atomic_xchg(&file_data->srq_asserted, srq_asserted); in usbtmc_ioctl_get_srq_stb()
597 stb = file_data->srq_byte; in usbtmc_ioctl_get_srq_stb()
610 static int usbtmc488_ioctl_wait_srq(struct usbtmc_file_data *file_data, in usbtmc488_ioctl_wait_srq() argument
613 struct usbtmc_device_data *data = file_data->data; in usbtmc488_ioctl_wait_srq()
633 atomic_read(&file_data->srq_asserted) != 0 || in usbtmc488_ioctl_wait_srq()
634 atomic_read(&file_data->closing), in usbtmc488_ioctl_wait_srq()
640 if (atomic_read(&file_data->closing) || data->zombie) in usbtmc488_ioctl_wait_srq()
718 static int usbtmc488_ioctl_trigger(struct usbtmc_file_data *file_data) in usbtmc488_ioctl_trigger() argument
720 struct usbtmc_device_data *data = file_data->data; in usbtmc488_ioctl_trigger()
737 &actual, file_data->timeout); in usbtmc488_ioctl_trigger()
780 struct usbtmc_file_data *file_data = urb->context; in usbtmc_read_bulk_cb() local
790 dev_err(&file_data->data->intf->dev, in usbtmc_read_bulk_cb()
794 spin_lock_irqsave(&file_data->err_lock, flags); in usbtmc_read_bulk_cb()
795 if (!file_data->in_status) in usbtmc_read_bulk_cb()
796 file_data->in_status = status; in usbtmc_read_bulk_cb()
797 spin_unlock_irqrestore(&file_data->err_lock, flags); in usbtmc_read_bulk_cb()
800 spin_lock_irqsave(&file_data->err_lock, flags); in usbtmc_read_bulk_cb()
801 file_data->in_transfer_size += urb->actual_length; in usbtmc_read_bulk_cb()
802 dev_dbg(&file_data->data->intf->dev, in usbtmc_read_bulk_cb()
804 __func__, file_data->in_transfer_size, in usbtmc_read_bulk_cb()
806 spin_unlock_irqrestore(&file_data->err_lock, flags); in usbtmc_read_bulk_cb()
807 usb_anchor_urb(urb, &file_data->in_anchor); in usbtmc_read_bulk_cb()
809 wake_up_interruptible(&file_data->wait_bulk_in); in usbtmc_read_bulk_cb()
810 wake_up_interruptible(&file_data->data->waitq); in usbtmc_read_bulk_cb()
813 static inline bool usbtmc_do_transfer(struct usbtmc_file_data *file_data) in usbtmc_do_transfer() argument
817 spin_lock_irq(&file_data->err_lock); in usbtmc_do_transfer()
818 data_or_error = !usb_anchor_empty(&file_data->in_anchor) in usbtmc_do_transfer()
819 || file_data->in_status; in usbtmc_do_transfer()
820 spin_unlock_irq(&file_data->err_lock); in usbtmc_do_transfer()
821 dev_dbg(&file_data->data->intf->dev, "%s: returns %d\n", __func__, in usbtmc_do_transfer()
826 static ssize_t usbtmc_generic_read(struct usbtmc_file_data *file_data, in usbtmc_generic_read() argument
832 struct usbtmc_device_data *data = file_data->data; in usbtmc_generic_read()
868 spin_lock_irq(&file_data->err_lock); in usbtmc_generic_read()
870 if (file_data->in_status) { in usbtmc_generic_read()
872 retval = file_data->in_status; in usbtmc_generic_read()
873 spin_unlock_irq(&file_data->err_lock); in usbtmc_generic_read()
878 if (usb_anchor_empty(&file_data->in_anchor)) in usbtmc_generic_read()
881 if (file_data->in_urbs_used == 0) { in usbtmc_generic_read()
882 file_data->in_transfer_size = 0; in usbtmc_generic_read()
883 file_data->in_status = 0; in usbtmc_generic_read()
886 file_data->in_transfer_size = 0; in usbtmc_generic_read()
887 file_data->in_status = 0; in usbtmc_generic_read()
894 if (bufcount > file_data->in_urbs_used) in usbtmc_generic_read()
895 bufcount -= file_data->in_urbs_used; in usbtmc_generic_read()
899 if (bufcount + file_data->in_urbs_used > MAX_URBS_IN_FLIGHT) { in usbtmc_generic_read()
901 file_data->in_urbs_used; in usbtmc_generic_read()
904 spin_unlock_irq(&file_data->err_lock); in usbtmc_generic_read()
908 max_transfer_size, bufcount, file_data->in_urbs_used); in usbtmc_generic_read()
924 usbtmc_read_bulk_cb, file_data); in usbtmc_generic_read()
926 usb_anchor_urb(urb, &file_data->submitted); in usbtmc_generic_read()
934 file_data->in_urbs_used++; in usbtmc_generic_read()
946 expire = msecs_to_jiffies(file_data->timeout); in usbtmc_generic_read()
956 file_data->wait_bulk_in, in usbtmc_generic_read()
957 usbtmc_do_transfer(file_data), in usbtmc_generic_read()
975 urb = usb_get_from_anchor(&file_data->in_anchor); in usbtmc_generic_read()
990 file_data->in_urbs_used--; in usbtmc_generic_read()
1015 spin_lock_irq(&file_data->err_lock); in usbtmc_generic_read()
1018 retval = file_data->in_status; in usbtmc_generic_read()
1019 spin_unlock_irq(&file_data->err_lock); in usbtmc_generic_read()
1023 spin_unlock_irq(&file_data->err_lock); in usbtmc_generic_read()
1033 max_transfer_size > (bufsize * file_data->in_urbs_used)) { in usbtmc_generic_read()
1035 usb_anchor_urb(urb, &file_data->submitted); in usbtmc_generic_read()
1042 file_data->in_urbs_used++; in usbtmc_generic_read()
1053 usb_kill_anchored_urbs(&file_data->submitted); in usbtmc_generic_read()
1055 usb_scuttle_anchored_urbs(&file_data->in_anchor); in usbtmc_generic_read()
1056 file_data->in_urbs_used = 0; in usbtmc_generic_read()
1057 file_data->in_status = 0; /* no spinlock needed here */ in usbtmc_generic_read()
1063 static ssize_t usbtmc_ioctl_generic_read(struct usbtmc_file_data *file_data, in usbtmc_ioctl_generic_read() argument
1074 retval = usbtmc_generic_read(file_data, msg.message, in usbtmc_ioctl_generic_read()
1087 struct usbtmc_file_data *file_data = urb->context; in usbtmc_write_bulk_cb() local
1091 spin_lock_irqsave(&file_data->err_lock, flags); in usbtmc_write_bulk_cb()
1092 file_data->out_transfer_size += urb->actual_length; in usbtmc_write_bulk_cb()
1099 dev_err(&file_data->data->intf->dev, in usbtmc_write_bulk_cb()
1103 if (!file_data->out_status) { in usbtmc_write_bulk_cb()
1104 file_data->out_status = urb->status; in usbtmc_write_bulk_cb()
1108 spin_unlock_irqrestore(&file_data->err_lock, flags); in usbtmc_write_bulk_cb()
1110 dev_dbg(&file_data->data->intf->dev, in usbtmc_write_bulk_cb()
1112 __func__, file_data->out_transfer_size); in usbtmc_write_bulk_cb()
1114 up(&file_data->limit_write_sem); in usbtmc_write_bulk_cb()
1115 if (usb_anchor_empty(&file_data->submitted) || wakeup) in usbtmc_write_bulk_cb()
1116 wake_up_interruptible(&file_data->data->waitq); in usbtmc_write_bulk_cb()
1119 static ssize_t usbtmc_generic_write(struct usbtmc_file_data *file_data, in usbtmc_generic_write() argument
1125 struct usbtmc_device_data *data = file_data->data; in usbtmc_generic_write()
1142 file_data->limit_write_sem.count); in usbtmc_generic_write()
1145 spin_lock_irq(&file_data->err_lock); in usbtmc_generic_write()
1146 retval = file_data->out_status; in usbtmc_generic_write()
1147 spin_unlock_irq(&file_data->err_lock); in usbtmc_generic_write()
1151 spin_lock_irq(&file_data->err_lock); in usbtmc_generic_write()
1152 file_data->out_transfer_size = 0; in usbtmc_generic_write()
1153 file_data->out_status = 0; in usbtmc_generic_write()
1154 spin_unlock_irq(&file_data->err_lock); in usbtmc_generic_write()
1161 timeout = file_data->timeout; in usbtmc_generic_write()
1169 if (down_trylock(&file_data->limit_write_sem)) { in usbtmc_generic_write()
1174 retval = down_timeout(&file_data->limit_write_sem, in usbtmc_generic_write()
1182 spin_lock_irq(&file_data->err_lock); in usbtmc_generic_write()
1183 retval = file_data->out_status; in usbtmc_generic_write()
1184 spin_unlock_irq(&file_data->err_lock); in usbtmc_generic_write()
1186 up(&file_data->limit_write_sem); in usbtmc_generic_write()
1194 up(&file_data->limit_write_sem); in usbtmc_generic_write()
1206 up(&file_data->limit_write_sem); in usbtmc_generic_write()
1225 usbtmc_write_bulk_cb, file_data); in usbtmc_generic_write()
1227 usb_anchor_urb(urb, &file_data->submitted); in usbtmc_generic_write()
1231 up(&file_data->limit_write_sem); in usbtmc_generic_write()
1244 if (!usb_wait_anchor_empty_timeout(&file_data->submitted, in usbtmc_generic_write()
1255 usb_kill_anchored_urbs(&file_data->submitted); in usbtmc_generic_write()
1259 spin_lock_irq(&file_data->err_lock); in usbtmc_generic_write()
1261 done = file_data->out_transfer_size; in usbtmc_generic_write()
1262 if (!retval && file_data->out_status) in usbtmc_generic_write()
1263 retval = file_data->out_status; in usbtmc_generic_write()
1264 spin_unlock_irq(&file_data->err_lock); in usbtmc_generic_write()
1269 __func__, done, retval, file_data->out_status); in usbtmc_generic_write()
1274 static ssize_t usbtmc_ioctl_generic_write(struct usbtmc_file_data *file_data, in usbtmc_ioctl_generic_write() argument
1285 retval = usbtmc_generic_write(file_data, msg.message, in usbtmc_ioctl_generic_write()
1299 static ssize_t usbtmc_ioctl_write_result(struct usbtmc_file_data *file_data, in usbtmc_ioctl_write_result() argument
1305 spin_lock_irq(&file_data->err_lock); in usbtmc_ioctl_write_result()
1306 transferred = file_data->out_transfer_size; in usbtmc_ioctl_write_result()
1307 retval = file_data->out_status; in usbtmc_ioctl_write_result()
1308 spin_unlock_irq(&file_data->err_lock); in usbtmc_ioctl_write_result()
1324 static int send_request_dev_dep_msg_in(struct usbtmc_file_data *file_data, in send_request_dev_dep_msg_in() argument
1327 struct usbtmc_device_data *data = file_data->data; in send_request_dev_dep_msg_in()
1346 buffer[8] = file_data->term_char_enabled * 2; in send_request_dev_dep_msg_in()
1348 buffer[9] = file_data->term_char; in send_request_dev_dep_msg_in()
1357 &actual, file_data->timeout); in send_request_dev_dep_msg_in()
1378 struct usbtmc_file_data *file_data; in usbtmc_read() local
1390 file_data = filp->private_data; in usbtmc_read()
1391 data = file_data->data; in usbtmc_read()
1412 retval = send_request_dev_dep_msg_in(file_data, count); in usbtmc_read()
1415 if (file_data->auto_abort) in usbtmc_read()
1429 file_data->timeout); in usbtmc_read()
1438 if (file_data->auto_abort) in usbtmc_read()
1447 if (file_data->auto_abort) in usbtmc_read()
1455 if (file_data->auto_abort) in usbtmc_read()
1463 if (file_data->auto_abort) in usbtmc_read()
1474 file_data->bmTransferAttributes = buffer[8]; in usbtmc_read()
1482 if (file_data->auto_abort) in usbtmc_read()
1509 retval = usbtmc_generic_read(file_data, buf + actual, in usbtmc_read()
1532 struct usbtmc_file_data *file_data; in usbtmc_write() local
1540 file_data = filp->private_data; in usbtmc_write()
1541 data = file_data->data; in usbtmc_write()
1552 spin_lock_irq(&file_data->err_lock); in usbtmc_write()
1553 file_data->out_transfer_size = 0; in usbtmc_write()
1554 file_data->out_status = 0; in usbtmc_write()
1555 spin_unlock_irq(&file_data->err_lock); in usbtmc_write()
1560 if (down_trylock(&file_data->limit_write_sem)) { in usbtmc_write()
1569 up(&file_data->limit_write_sem); in usbtmc_write()
1581 buffer[8] = file_data->eom_val; in usbtmc_write()
1609 up(&file_data->limit_write_sem); in usbtmc_write()
1622 usbtmc_write_bulk_cb, file_data); in usbtmc_write()
1624 usb_anchor_urb(urb, &file_data->submitted); in usbtmc_write()
1628 up(&file_data->limit_write_sem); in usbtmc_write()
1641 retval = usbtmc_generic_write(file_data, buf + transfersize, remaining, in usbtmc_write()
1651 usb_kill_anchored_urbs(&file_data->submitted); in usbtmc_write()
1655 if (file_data->auto_abort) in usbtmc_write()
1805 static int usbtmc_ioctl_cancel_io(struct usbtmc_file_data *file_data) in usbtmc_ioctl_cancel_io() argument
1807 spin_lock_irq(&file_data->err_lock); in usbtmc_ioctl_cancel_io()
1808 file_data->in_status = -ECANCELED; in usbtmc_ioctl_cancel_io()
1809 file_data->out_status = -ECANCELED; in usbtmc_ioctl_cancel_io()
1810 spin_unlock_irq(&file_data->err_lock); in usbtmc_ioctl_cancel_io()
1811 usb_kill_anchored_urbs(&file_data->submitted); in usbtmc_ioctl_cancel_io()
1815 static int usbtmc_ioctl_cleanup_io(struct usbtmc_file_data *file_data) in usbtmc_ioctl_cleanup_io() argument
1817 usb_kill_anchored_urbs(&file_data->submitted); in usbtmc_ioctl_cleanup_io()
1818 usb_scuttle_anchored_urbs(&file_data->in_anchor); in usbtmc_ioctl_cleanup_io()
1819 spin_lock_irq(&file_data->err_lock); in usbtmc_ioctl_cleanup_io()
1820 file_data->in_status = 0; in usbtmc_ioctl_cleanup_io()
1821 file_data->in_transfer_size = 0; in usbtmc_ioctl_cleanup_io()
1822 file_data->out_status = 0; in usbtmc_ioctl_cleanup_io()
1823 file_data->out_transfer_size = 0; in usbtmc_ioctl_cleanup_io()
1824 spin_unlock_irq(&file_data->err_lock); in usbtmc_ioctl_cleanup_io()
1826 file_data->in_urbs_used = 0; in usbtmc_ioctl_cleanup_io()
1999 static int usbtmc_ioctl_get_timeout(struct usbtmc_file_data *file_data, in usbtmc_ioctl_get_timeout() argument
2004 timeout = file_data->timeout; in usbtmc_ioctl_get_timeout()
2012 static int usbtmc_ioctl_set_timeout(struct usbtmc_file_data *file_data, in usbtmc_ioctl_set_timeout() argument
2026 file_data->timeout = timeout; in usbtmc_ioctl_set_timeout()
2034 static int usbtmc_ioctl_eom_enable(struct usbtmc_file_data *file_data, in usbtmc_ioctl_eom_enable() argument
2045 file_data->eom_val = eom_enable; in usbtmc_ioctl_eom_enable()
2053 static int usbtmc_ioctl_config_termc(struct usbtmc_file_data *file_data, in usbtmc_ioctl_config_termc() argument
2063 !(file_data->data->capabilities.device_capabilities & 1))) in usbtmc_ioctl_config_termc()
2066 file_data->term_char = termc.term_char; in usbtmc_ioctl_config_termc()
2067 file_data->term_char_enabled = termc.term_char_enabled; in usbtmc_ioctl_config_termc()
2074 struct usbtmc_file_data *file_data; in usbtmc_ioctl() local
2079 file_data = file->private_data; in usbtmc_ioctl()
2080 data = file_data->data; in usbtmc_ioctl()
2118 retval = usbtmc_ioctl_get_timeout(file_data, in usbtmc_ioctl()
2123 retval = usbtmc_ioctl_set_timeout(file_data, in usbtmc_ioctl()
2128 retval = usbtmc_ioctl_eom_enable(file_data, in usbtmc_ioctl()
2133 retval = usbtmc_ioctl_config_termc(file_data, in usbtmc_ioctl()
2138 retval = usbtmc_ioctl_generic_write(file_data, in usbtmc_ioctl()
2143 retval = usbtmc_ioctl_generic_read(file_data, in usbtmc_ioctl()
2148 retval = usbtmc_ioctl_write_result(file_data, in usbtmc_ioctl()
2163 retval = usbtmc488_ioctl_read_stb(file_data, in usbtmc_ioctl()
2183 retval = usbtmc488_ioctl_trigger(file_data); in usbtmc_ioctl()
2187 retval = usbtmc488_ioctl_wait_srq(file_data, in usbtmc_ioctl()
2192 retval = put_user(file_data->bmTransferAttributes, in usbtmc_ioctl()
2199 file_data->auto_abort = !!tmp_byte; in usbtmc_ioctl()
2203 retval = usbtmc_get_stb(file_data, &tmp_byte); in usbtmc_ioctl()
2209 retval = usbtmc_ioctl_get_srq_stb(file_data, in usbtmc_ioctl()
2214 retval = usbtmc_ioctl_cancel_io(file_data); in usbtmc_ioctl()
2218 retval = usbtmc_ioctl_cleanup_io(file_data); in usbtmc_ioctl()
2229 struct usbtmc_file_data *file_data = file->private_data; in usbtmc_fasync() local
2231 return fasync_helper(fd, file, on, &file_data->data->fasync); in usbtmc_fasync()
2236 struct usbtmc_file_data *file_data = file->private_data; in usbtmc_poll() local
2237 struct usbtmc_device_data *data = file_data->data; in usbtmc_poll()
2253 if (atomic_read(&file_data->srq_asserted)) in usbtmc_poll()
2260 if (usb_anchor_empty(&file_data->submitted)) in usbtmc_poll()
2262 if (!usb_anchor_empty(&file_data->in_anchor)) in usbtmc_poll()
2265 spin_lock_irq(&file_data->err_lock); in usbtmc_poll()
2266 if (file_data->in_status || file_data->out_status) in usbtmc_poll()
2268 spin_unlock_irq(&file_data->err_lock); in usbtmc_poll()
2328 struct usbtmc_file_data *file_data; in usbtmc_interrupt() local
2330 file_data = list_entry(elem, in usbtmc_interrupt()
2333 file_data->srq_byte = data->iin_buffer[1]; in usbtmc_interrupt()
2334 atomic_set(&file_data->srq_asserted, 1); in usbtmc_interrupt()
2504 struct usbtmc_file_data *file_data; in usbtmc_disconnect() local
2506 file_data = list_entry(elem, in usbtmc_disconnect()
2509 usb_kill_anchored_urbs(&file_data->submitted); in usbtmc_disconnect()
2510 usb_scuttle_anchored_urbs(&file_data->in_anchor); in usbtmc_disconnect()
2517 static void usbtmc_draw_down(struct usbtmc_file_data *file_data) in usbtmc_draw_down() argument
2521 time = usb_wait_anchor_empty_timeout(&file_data->submitted, 1000); in usbtmc_draw_down()
2523 usb_kill_anchored_urbs(&file_data->submitted); in usbtmc_draw_down()
2524 usb_scuttle_anchored_urbs(&file_data->in_anchor); in usbtmc_draw_down()
2537 struct usbtmc_file_data *file_data; in usbtmc_suspend() local
2539 file_data = list_entry(elem, in usbtmc_suspend()
2542 usbtmc_draw_down(file_data); in usbtmc_suspend()
2576 struct usbtmc_file_data *file_data; in usbtmc_pre_reset() local
2578 file_data = list_entry(elem, in usbtmc_pre_reset()
2581 usbtmc_ioctl_cancel_io(file_data); in usbtmc_pre_reset()