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