Lines Matching defs:file_data
153 static void usbtmc_draw_down(struct usbtmc_file_data *file_data);
167 struct usbtmc_file_data *file_data;
175 file_data = kzalloc(sizeof(*file_data), GFP_KERNEL);
176 if (!file_data)
179 spin_lock_init(&file_data->err_lock);
180 sema_init(&file_data->limit_write_sem, MAX_URBS_IN_FLIGHT);
181 init_usb_anchor(&file_data->submitted);
182 init_usb_anchor(&file_data->in_anchor);
183 init_waitqueue_head(&file_data->wait_bulk_in);
190 file_data->data = data;
192 atomic_set(&file_data->closing, 0);
194 file_data->timeout = USBTMC_TIMEOUT;
195 file_data->term_char = '\n';
196 file_data->term_char_enabled = 0;
197 file_data->auto_abort = 0;
198 file_data->eom_val = 1;
200 INIT_LIST_HEAD(&file_data->file_elem);
202 list_add_tail(&file_data->file_elem, &data->file_list);
207 filp->private_data = file_data;
217 struct usbtmc_file_data *file_data;
220 file_data = file->private_data;
221 if (file_data == NULL)
224 atomic_set(&file_data->closing, 1);
225 data = file_data->data;
230 usbtmc_draw_down(file_data);
232 spin_lock_irq(&file_data->err_lock);
233 file_data->in_status = 0;
234 file_data->in_transfer_size = 0;
235 file_data->in_urbs_used = 0;
236 file_data->out_status = 0;
237 file_data->out_transfer_size = 0;
238 spin_unlock_irq(&file_data->err_lock);
248 struct usbtmc_file_data *file_data = file->private_data;
251 mutex_lock(&file_data->data->io_mutex);
252 spin_lock_irq(&file_data->data->dev_lock);
254 list_del(&file_data->file_elem);
256 spin_unlock_irq(&file_data->data->dev_lock);
257 mutex_unlock(&file_data->data->io_mutex);
259 kref_put(&file_data->data->kref, usbtmc_delete);
260 file_data->data = NULL;
261 kfree(file_data);
478 static int usbtmc488_ioctl_read_stb(struct usbtmc_file_data *file_data,
481 struct usbtmc_device_data *data = file_data->data;
493 srq_asserted = atomic_xchg(&file_data->srq_asserted, srq_asserted);
496 stb = file_data->srq_byte;
533 file_data->timeout);
570 static int usbtmc488_ioctl_wait_srq(struct usbtmc_file_data *file_data,
573 struct usbtmc_device_data *data = file_data->data;
593 atomic_read(&file_data->srq_asserted) != 0 ||
594 atomic_read(&file_data->closing),
600 if (atomic_read(&file_data->closing) || data->zombie)
679 static int usbtmc488_ioctl_trigger(struct usbtmc_file_data *file_data)
681 struct usbtmc_device_data *data = file_data->data;
698 &actual, file_data->timeout);
741 struct usbtmc_file_data *file_data = urb->context;
751 dev_err(&file_data->data->intf->dev,
755 spin_lock_irqsave(&file_data->err_lock, flags);
756 if (!file_data->in_status)
757 file_data->in_status = status;
758 spin_unlock_irqrestore(&file_data->err_lock, flags);
761 spin_lock_irqsave(&file_data->err_lock, flags);
762 file_data->in_transfer_size += urb->actual_length;
763 dev_dbg(&file_data->data->intf->dev,
765 __func__, file_data->in_transfer_size,
767 spin_unlock_irqrestore(&file_data->err_lock, flags);
768 usb_anchor_urb(urb, &file_data->in_anchor);
770 wake_up_interruptible(&file_data->wait_bulk_in);
771 wake_up_interruptible(&file_data->data->waitq);
774 static inline bool usbtmc_do_transfer(struct usbtmc_file_data *file_data)
778 spin_lock_irq(&file_data->err_lock);
779 data_or_error = !usb_anchor_empty(&file_data->in_anchor)
780 || file_data->in_status;
781 spin_unlock_irq(&file_data->err_lock);
782 dev_dbg(&file_data->data->intf->dev, "%s: returns %d\n", __func__,
787 static ssize_t usbtmc_generic_read(struct usbtmc_file_data *file_data,
793 struct usbtmc_device_data *data = file_data->data;
828 spin_lock_irq(&file_data->err_lock);
830 if (file_data->in_status) {
832 retval = file_data->in_status;
833 spin_unlock_irq(&file_data->err_lock);
838 if (usb_anchor_empty(&file_data->in_anchor))
841 if (file_data->in_urbs_used == 0) {
842 file_data->in_transfer_size = 0;
843 file_data->in_status = 0;
846 file_data->in_transfer_size = 0;
847 file_data->in_status = 0;
854 if (bufcount > file_data->in_urbs_used)
855 bufcount -= file_data->in_urbs_used;
859 if (bufcount + file_data->in_urbs_used > MAX_URBS_IN_FLIGHT) {
861 file_data->in_urbs_used;
864 spin_unlock_irq(&file_data->err_lock);
868 max_transfer_size, bufcount, file_data->in_urbs_used);
884 usbtmc_read_bulk_cb, file_data);
886 usb_anchor_urb(urb, &file_data->submitted);
894 file_data->in_urbs_used++;
906 expire = msecs_to_jiffies(file_data->timeout);
916 file_data->wait_bulk_in,
917 usbtmc_do_transfer(file_data),
930 urb = usb_get_from_anchor(&file_data->in_anchor);
945 file_data->in_urbs_used--;
970 spin_lock_irq(&file_data->err_lock);
973 retval = file_data->in_status;
974 spin_unlock_irq(&file_data->err_lock);
978 spin_unlock_irq(&file_data->err_lock);
988 max_transfer_size > (bufsize * file_data->in_urbs_used)) {
990 usb_anchor_urb(urb, &file_data->submitted);
997 file_data->in_urbs_used++;
1008 usb_kill_anchored_urbs(&file_data->submitted);
1010 usb_scuttle_anchored_urbs(&file_data->in_anchor);
1011 file_data->in_urbs_used = 0;
1012 file_data->in_status = 0; /* no spinlock needed here */
1018 static ssize_t usbtmc_ioctl_generic_read(struct usbtmc_file_data *file_data,
1029 retval = usbtmc_generic_read(file_data, msg.message,
1042 struct usbtmc_file_data *file_data = urb->context;
1046 spin_lock_irqsave(&file_data->err_lock, flags);
1047 file_data->out_transfer_size += urb->actual_length;
1054 dev_err(&file_data->data->intf->dev,
1058 if (!file_data->out_status) {
1059 file_data->out_status = urb->status;
1063 spin_unlock_irqrestore(&file_data->err_lock, flags);
1065 dev_dbg(&file_data->data->intf->dev,
1067 __func__, file_data->out_transfer_size);
1069 up(&file_data->limit_write_sem);
1070 if (usb_anchor_empty(&file_data->submitted) || wakeup)
1071 wake_up_interruptible(&file_data->data->waitq);
1074 static ssize_t usbtmc_generic_write(struct usbtmc_file_data *file_data,
1080 struct usbtmc_device_data *data = file_data->data;
1097 file_data->limit_write_sem.count);
1100 spin_lock_irq(&file_data->err_lock);
1101 retval = file_data->out_status;
1102 spin_unlock_irq(&file_data->err_lock);
1106 spin_lock_irq(&file_data->err_lock);
1107 file_data->out_transfer_size = 0;
1108 file_data->out_status = 0;
1109 spin_unlock_irq(&file_data->err_lock);
1116 timeout = file_data->timeout;
1124 if (down_trylock(&file_data->limit_write_sem)) {
1129 retval = down_timeout(&file_data->limit_write_sem,
1137 spin_lock_irq(&file_data->err_lock);
1138 retval = file_data->out_status;
1139 spin_unlock_irq(&file_data->err_lock);
1141 up(&file_data->limit_write_sem);
1149 up(&file_data->limit_write_sem);
1161 up(&file_data->limit_write_sem);
1180 usbtmc_write_bulk_cb, file_data);
1182 usb_anchor_urb(urb, &file_data->submitted);
1186 up(&file_data->limit_write_sem);
1199 if (!usb_wait_anchor_empty_timeout(&file_data->submitted,
1210 usb_kill_anchored_urbs(&file_data->submitted);
1214 spin_lock_irq(&file_data->err_lock);
1216 done = file_data->out_transfer_size;
1217 if (!retval && file_data->out_status)
1218 retval = file_data->out_status;
1219 spin_unlock_irq(&file_data->err_lock);
1224 __func__, done, retval, file_data->out_status);
1229 static ssize_t usbtmc_ioctl_generic_write(struct usbtmc_file_data *file_data,
1240 retval = usbtmc_generic_write(file_data, msg.message,
1254 static ssize_t usbtmc_ioctl_write_result(struct usbtmc_file_data *file_data,
1260 spin_lock_irq(&file_data->err_lock);
1261 transferred = file_data->out_transfer_size;
1262 retval = file_data->out_status;
1263 spin_unlock_irq(&file_data->err_lock);
1279 static int send_request_dev_dep_msg_in(struct usbtmc_file_data *file_data,
1282 struct usbtmc_device_data *data = file_data->data;
1301 buffer[8] = file_data->term_char_enabled * 2;
1303 buffer[9] = file_data->term_char;
1312 &actual, file_data->timeout);
1333 struct usbtmc_file_data *file_data;
1345 file_data = filp->private_data;
1346 data = file_data->data;
1364 retval = send_request_dev_dep_msg_in(file_data, count);
1367 if (file_data->auto_abort)
1381 file_data->timeout);
1390 if (file_data->auto_abort)
1399 if (file_data->auto_abort)
1407 if (file_data->auto_abort)
1415 if (file_data->auto_abort)
1426 file_data->bmTransferAttributes = buffer[8];
1434 if (file_data->auto_abort)
1461 retval = usbtmc_generic_read(file_data, buf + actual,
1483 struct usbtmc_file_data *file_data;
1491 file_data = filp->private_data;
1492 data = file_data->data;
1503 spin_lock_irq(&file_data->err_lock);
1504 file_data->out_transfer_size = 0;
1505 file_data->out_status = 0;
1506 spin_unlock_irq(&file_data->err_lock);
1511 if (down_trylock(&file_data->limit_write_sem)) {
1520 up(&file_data->limit_write_sem);
1532 buffer[8] = file_data->eom_val;
1560 up(&file_data->limit_write_sem);
1573 usbtmc_write_bulk_cb, file_data);
1575 usb_anchor_urb(urb, &file_data->submitted);
1579 up(&file_data->limit_write_sem);
1592 retval = usbtmc_generic_write(file_data, buf + transfersize, remaining,
1602 usb_kill_anchored_urbs(&file_data->submitted);
1606 if (file_data->auto_abort)
1756 static int usbtmc_ioctl_cancel_io(struct usbtmc_file_data *file_data)
1758 spin_lock_irq(&file_data->err_lock);
1759 file_data->in_status = -ECANCELED;
1760 file_data->out_status = -ECANCELED;
1761 spin_unlock_irq(&file_data->err_lock);
1762 usb_kill_anchored_urbs(&file_data->submitted);
1766 static int usbtmc_ioctl_cleanup_io(struct usbtmc_file_data *file_data)
1768 usb_kill_anchored_urbs(&file_data->submitted);
1769 usb_scuttle_anchored_urbs(&file_data->in_anchor);
1770 spin_lock_irq(&file_data->err_lock);
1771 file_data->in_status = 0;
1772 file_data->in_transfer_size = 0;
1773 file_data->out_status = 0;
1774 file_data->out_transfer_size = 0;
1775 spin_unlock_irq(&file_data->err_lock);
1777 file_data->in_urbs_used = 0;
1954 static int usbtmc_ioctl_get_timeout(struct usbtmc_file_data *file_data,
1959 timeout = file_data->timeout;
1967 static int usbtmc_ioctl_set_timeout(struct usbtmc_file_data *file_data,
1981 file_data->timeout = timeout;
1989 static int usbtmc_ioctl_eom_enable(struct usbtmc_file_data *file_data,
2000 file_data->eom_val = eom_enable;
2008 static int usbtmc_ioctl_config_termc(struct usbtmc_file_data *file_data,
2018 !(file_data->data->capabilities.device_capabilities & 1)))
2021 file_data->term_char = termc.term_char;
2022 file_data->term_char_enabled = termc.term_char_enabled;
2029 struct usbtmc_file_data *file_data;
2034 file_data = file->private_data;
2035 data = file_data->data;
2073 retval = usbtmc_ioctl_get_timeout(file_data,
2078 retval = usbtmc_ioctl_set_timeout(file_data,
2083 retval = usbtmc_ioctl_eom_enable(file_data,
2088 retval = usbtmc_ioctl_config_termc(file_data,
2093 retval = usbtmc_ioctl_generic_write(file_data,
2098 retval = usbtmc_ioctl_generic_read(file_data,
2103 retval = usbtmc_ioctl_write_result(file_data,
2118 retval = usbtmc488_ioctl_read_stb(file_data,
2138 retval = usbtmc488_ioctl_trigger(file_data);
2142 retval = usbtmc488_ioctl_wait_srq(file_data,
2147 retval = put_user(file_data->bmTransferAttributes,
2154 file_data->auto_abort = !!tmp_byte;
2158 retval = usbtmc_ioctl_cancel_io(file_data);
2162 retval = usbtmc_ioctl_cleanup_io(file_data);
2173 struct usbtmc_file_data *file_data = file->private_data;
2175 return fasync_helper(fd, file, on, &file_data->data->fasync);
2180 struct usbtmc_file_data *file_data = file->private_data;
2181 struct usbtmc_device_data *data = file_data->data;
2197 if (atomic_read(&file_data->srq_asserted))
2204 if (usb_anchor_empty(&file_data->submitted))
2206 if (!usb_anchor_empty(&file_data->in_anchor))
2209 spin_lock_irq(&file_data->err_lock);
2210 if (file_data->in_status || file_data->out_status)
2212 spin_unlock_irq(&file_data->err_lock);
2272 struct usbtmc_file_data *file_data;
2274 file_data = list_entry(elem,
2277 file_data->srq_byte = data->iin_buffer[1];
2278 atomic_set(&file_data->srq_asserted, 1);
2448 struct usbtmc_file_data *file_data;
2450 file_data = list_entry(elem,
2453 usb_kill_anchored_urbs(&file_data->submitted);
2454 usb_scuttle_anchored_urbs(&file_data->in_anchor);
2461 static void usbtmc_draw_down(struct usbtmc_file_data *file_data)
2465 time = usb_wait_anchor_empty_timeout(&file_data->submitted, 1000);
2467 usb_kill_anchored_urbs(&file_data->submitted);
2468 usb_scuttle_anchored_urbs(&file_data->in_anchor);
2481 struct usbtmc_file_data *file_data;
2483 file_data = list_entry(elem,
2486 usbtmc_draw_down(file_data);
2520 struct usbtmc_file_data *file_data;
2522 file_data = list_entry(elem,
2525 usbtmc_ioctl_cancel_io(file_data);