perf python: Do not force closing original perf descriptor in evlist.get_pollfd()
[linux/fpc-iii.git] / drivers / usb / misc / rio500.c
blob7b9adeb3e7aa1424b18b395ffa8e09c41e96062e
1 // SPDX-License-Identifier: GPL-2.0+
2 /* -*- linux-c -*- */
4 /*
5 * Driver for USB Rio 500
7 * Cesar Miquel (miquel@df.uba.ar)
8 *
9 * based on hp_scanner.c by David E. Nelson (dnelson@jump.net)
11 * Based upon mouse.c (Brad Keryan) and printer.c (Michael Gee).
13 * Changelog:
14 * 30/05/2003 replaced lock/unlock kernel with up/down
15 * Daniele Bellucci bellucda@tiscali.it
16 * */
18 #include <linux/module.h>
19 #include <linux/kernel.h>
20 #include <linux/signal.h>
21 #include <linux/sched/signal.h>
22 #include <linux/mutex.h>
23 #include <linux/errno.h>
24 #include <linux/random.h>
25 #include <linux/poll.h>
26 #include <linux/slab.h>
27 #include <linux/spinlock.h>
28 #include <linux/usb.h>
29 #include <linux/wait.h>
31 #include "rio500_usb.h"
33 #define DRIVER_AUTHOR "Cesar Miquel <miquel@df.uba.ar>"
34 #define DRIVER_DESC "USB Rio 500 driver"
36 #define RIO_MINOR 64
38 /* stall/wait timeout for rio */
39 #define NAK_TIMEOUT (HZ)
41 #define IBUF_SIZE 0x1000
43 /* Size of the rio buffer */
44 #define OBUF_SIZE 0x10000
46 struct rio_usb_data {
47 struct usb_device *rio_dev; /* init: probe_rio */
48 unsigned int ifnum; /* Interface number of the USB device */
49 int isopen; /* nz if open */
50 int present; /* Device is present on the bus */
51 char *obuf, *ibuf; /* transfer buffers */
52 char bulk_in_ep, bulk_out_ep; /* Endpoint assignments */
53 wait_queue_head_t wait_q; /* for timeouts */
54 struct mutex lock; /* general race avoidance */
57 static DEFINE_MUTEX(rio500_mutex);
58 static struct rio_usb_data rio_instance;
60 static int open_rio(struct inode *inode, struct file *file)
62 struct rio_usb_data *rio = &rio_instance;
64 /* against disconnect() */
65 mutex_lock(&rio500_mutex);
66 mutex_lock(&(rio->lock));
68 if (rio->isopen || !rio->present) {
69 mutex_unlock(&(rio->lock));
70 mutex_unlock(&rio500_mutex);
71 return -EBUSY;
73 rio->isopen = 1;
75 init_waitqueue_head(&rio->wait_q);
77 mutex_unlock(&(rio->lock));
79 dev_info(&rio->rio_dev->dev, "Rio opened.\n");
80 mutex_unlock(&rio500_mutex);
82 return 0;
85 static int close_rio(struct inode *inode, struct file *file)
87 struct rio_usb_data *rio = &rio_instance;
89 rio->isopen = 0;
91 dev_info(&rio->rio_dev->dev, "Rio closed.\n");
92 return 0;
95 static long ioctl_rio(struct file *file, unsigned int cmd, unsigned long arg)
97 struct RioCommand rio_cmd;
98 struct rio_usb_data *rio = &rio_instance;
99 void __user *data;
100 unsigned char *buffer;
101 int result, requesttype;
102 int retries;
103 int retval=0;
105 mutex_lock(&(rio->lock));
106 /* Sanity check to make sure rio is connected, powered, etc */
107 if (rio->present == 0 || rio->rio_dev == NULL) {
108 retval = -ENODEV;
109 goto err_out;
112 switch (cmd) {
113 case RIO_RECV_COMMAND:
114 data = (void __user *) arg;
115 if (data == NULL)
116 break;
117 if (copy_from_user(&rio_cmd, data, sizeof(struct RioCommand))) {
118 retval = -EFAULT;
119 goto err_out;
121 if (rio_cmd.length < 0 || rio_cmd.length > PAGE_SIZE) {
122 retval = -EINVAL;
123 goto err_out;
125 buffer = (unsigned char *) __get_free_page(GFP_KERNEL);
126 if (buffer == NULL) {
127 retval = -ENOMEM;
128 goto err_out;
130 if (copy_from_user(buffer, rio_cmd.buffer, rio_cmd.length)) {
131 retval = -EFAULT;
132 free_page((unsigned long) buffer);
133 goto err_out;
136 requesttype = rio_cmd.requesttype | USB_DIR_IN |
137 USB_TYPE_VENDOR | USB_RECIP_DEVICE;
138 dev_dbg(&rio->rio_dev->dev,
139 "sending command:reqtype=%0x req=%0x value=%0x index=%0x len=%0x\n",
140 requesttype, rio_cmd.request, rio_cmd.value,
141 rio_cmd.index, rio_cmd.length);
142 /* Send rio control message */
143 retries = 3;
144 while (retries) {
145 result = usb_control_msg(rio->rio_dev,
146 usb_rcvctrlpipe(rio-> rio_dev, 0),
147 rio_cmd.request,
148 requesttype,
149 rio_cmd.value,
150 rio_cmd.index, buffer,
151 rio_cmd.length,
152 jiffies_to_msecs(rio_cmd.timeout));
153 if (result == -ETIMEDOUT)
154 retries--;
155 else if (result < 0) {
156 dev_err(&rio->rio_dev->dev,
157 "Error executing ioctrl. code = %d\n",
158 result);
159 retries = 0;
160 } else {
161 dev_dbg(&rio->rio_dev->dev,
162 "Executed ioctl. Result = %d (data=%02x)\n",
163 result, buffer[0]);
164 if (copy_to_user(rio_cmd.buffer, buffer,
165 rio_cmd.length)) {
166 free_page((unsigned long) buffer);
167 retval = -EFAULT;
168 goto err_out;
170 retries = 0;
173 /* rio_cmd.buffer contains a raw stream of single byte
174 data which has been returned from rio. Data is
175 interpreted at application level. For data that
176 will be cast to data types longer than 1 byte, data
177 will be little_endian and will potentially need to
178 be swapped at the app level */
181 free_page((unsigned long) buffer);
182 break;
184 case RIO_SEND_COMMAND:
185 data = (void __user *) arg;
186 if (data == NULL)
187 break;
188 if (copy_from_user(&rio_cmd, data, sizeof(struct RioCommand))) {
189 retval = -EFAULT;
190 goto err_out;
192 if (rio_cmd.length < 0 || rio_cmd.length > PAGE_SIZE) {
193 retval = -EINVAL;
194 goto err_out;
196 buffer = (unsigned char *) __get_free_page(GFP_KERNEL);
197 if (buffer == NULL) {
198 retval = -ENOMEM;
199 goto err_out;
201 if (copy_from_user(buffer, rio_cmd.buffer, rio_cmd.length)) {
202 free_page((unsigned long)buffer);
203 retval = -EFAULT;
204 goto err_out;
207 requesttype = rio_cmd.requesttype | USB_DIR_OUT |
208 USB_TYPE_VENDOR | USB_RECIP_DEVICE;
209 dev_dbg(&rio->rio_dev->dev,
210 "sending command: reqtype=%0x req=%0x value=%0x index=%0x len=%0x\n",
211 requesttype, rio_cmd.request, rio_cmd.value,
212 rio_cmd.index, rio_cmd.length);
213 /* Send rio control message */
214 retries = 3;
215 while (retries) {
216 result = usb_control_msg(rio->rio_dev,
217 usb_sndctrlpipe(rio-> rio_dev, 0),
218 rio_cmd.request,
219 requesttype,
220 rio_cmd.value,
221 rio_cmd.index, buffer,
222 rio_cmd.length,
223 jiffies_to_msecs(rio_cmd.timeout));
224 if (result == -ETIMEDOUT)
225 retries--;
226 else if (result < 0) {
227 dev_err(&rio->rio_dev->dev,
228 "Error executing ioctrl. code = %d\n",
229 result);
230 retries = 0;
231 } else {
232 dev_dbg(&rio->rio_dev->dev,
233 "Executed ioctl. Result = %d\n", result);
234 retries = 0;
239 free_page((unsigned long) buffer);
240 break;
242 default:
243 retval = -ENOTTY;
244 break;
248 err_out:
249 mutex_unlock(&(rio->lock));
250 return retval;
253 static ssize_t
254 write_rio(struct file *file, const char __user *buffer,
255 size_t count, loff_t * ppos)
257 DEFINE_WAIT(wait);
258 struct rio_usb_data *rio = &rio_instance;
260 unsigned long copy_size;
261 unsigned long bytes_written = 0;
262 unsigned int partial;
264 int result = 0;
265 int maxretry;
266 int errn = 0;
267 int intr;
269 intr = mutex_lock_interruptible(&(rio->lock));
270 if (intr)
271 return -EINTR;
272 /* Sanity check to make sure rio is connected, powered, etc */
273 if (rio->present == 0 || rio->rio_dev == NULL) {
274 mutex_unlock(&(rio->lock));
275 return -ENODEV;
280 do {
281 unsigned long thistime;
282 char *obuf = rio->obuf;
284 thistime = copy_size =
285 (count >= OBUF_SIZE) ? OBUF_SIZE : count;
286 if (copy_from_user(rio->obuf, buffer, copy_size)) {
287 errn = -EFAULT;
288 goto error;
290 maxretry = 5;
291 while (thistime) {
292 if (!rio->rio_dev) {
293 errn = -ENODEV;
294 goto error;
296 if (signal_pending(current)) {
297 mutex_unlock(&(rio->lock));
298 return bytes_written ? bytes_written : -EINTR;
301 result = usb_bulk_msg(rio->rio_dev,
302 usb_sndbulkpipe(rio->rio_dev, 2),
303 obuf, thistime, &partial, 5000);
305 dev_dbg(&rio->rio_dev->dev,
306 "write stats: result:%d thistime:%lu partial:%u\n",
307 result, thistime, partial);
309 if (result == -ETIMEDOUT) { /* NAK - so hold for a while */
310 if (!maxretry--) {
311 errn = -ETIME;
312 goto error;
314 prepare_to_wait(&rio->wait_q, &wait, TASK_INTERRUPTIBLE);
315 schedule_timeout(NAK_TIMEOUT);
316 finish_wait(&rio->wait_q, &wait);
317 continue;
318 } else if (!result && partial) {
319 obuf += partial;
320 thistime -= partial;
321 } else
322 break;
324 if (result) {
325 dev_err(&rio->rio_dev->dev, "Write Whoops - %x\n",
326 result);
327 errn = -EIO;
328 goto error;
330 bytes_written += copy_size;
331 count -= copy_size;
332 buffer += copy_size;
333 } while (count > 0);
335 mutex_unlock(&(rio->lock));
337 return bytes_written ? bytes_written : -EIO;
339 error:
340 mutex_unlock(&(rio->lock));
341 return errn;
344 static ssize_t
345 read_rio(struct file *file, char __user *buffer, size_t count, loff_t * ppos)
347 DEFINE_WAIT(wait);
348 struct rio_usb_data *rio = &rio_instance;
349 ssize_t read_count;
350 unsigned int partial;
351 int this_read;
352 int result;
353 int maxretry = 10;
354 char *ibuf;
355 int intr;
357 intr = mutex_lock_interruptible(&(rio->lock));
358 if (intr)
359 return -EINTR;
360 /* Sanity check to make sure rio is connected, powered, etc */
361 if (rio->present == 0 || rio->rio_dev == NULL) {
362 mutex_unlock(&(rio->lock));
363 return -ENODEV;
366 ibuf = rio->ibuf;
368 read_count = 0;
371 while (count > 0) {
372 if (signal_pending(current)) {
373 mutex_unlock(&(rio->lock));
374 return read_count ? read_count : -EINTR;
376 if (!rio->rio_dev) {
377 mutex_unlock(&(rio->lock));
378 return -ENODEV;
380 this_read = (count >= IBUF_SIZE) ? IBUF_SIZE : count;
382 result = usb_bulk_msg(rio->rio_dev,
383 usb_rcvbulkpipe(rio->rio_dev, 1),
384 ibuf, this_read, &partial,
385 8000);
387 dev_dbg(&rio->rio_dev->dev,
388 "read stats: result:%d this_read:%u partial:%u\n",
389 result, this_read, partial);
391 if (partial) {
392 count = this_read = partial;
393 } else if (result == -ETIMEDOUT || result == 15) { /* FIXME: 15 ??? */
394 if (!maxretry--) {
395 mutex_unlock(&(rio->lock));
396 dev_err(&rio->rio_dev->dev,
397 "read_rio: maxretry timeout\n");
398 return -ETIME;
400 prepare_to_wait(&rio->wait_q, &wait, TASK_INTERRUPTIBLE);
401 schedule_timeout(NAK_TIMEOUT);
402 finish_wait(&rio->wait_q, &wait);
403 continue;
404 } else if (result != -EREMOTEIO) {
405 mutex_unlock(&(rio->lock));
406 dev_err(&rio->rio_dev->dev,
407 "Read Whoops - result:%d partial:%u this_read:%u\n",
408 result, partial, this_read);
409 return -EIO;
410 } else {
411 mutex_unlock(&(rio->lock));
412 return (0);
415 if (this_read) {
416 if (copy_to_user(buffer, ibuf, this_read)) {
417 mutex_unlock(&(rio->lock));
418 return -EFAULT;
420 count -= this_read;
421 read_count += this_read;
422 buffer += this_read;
425 mutex_unlock(&(rio->lock));
426 return read_count;
429 static const struct file_operations usb_rio_fops = {
430 .owner = THIS_MODULE,
431 .read = read_rio,
432 .write = write_rio,
433 .unlocked_ioctl = ioctl_rio,
434 .open = open_rio,
435 .release = close_rio,
436 .llseek = noop_llseek,
439 static struct usb_class_driver usb_rio_class = {
440 .name = "rio500%d",
441 .fops = &usb_rio_fops,
442 .minor_base = RIO_MINOR,
445 static int probe_rio(struct usb_interface *intf,
446 const struct usb_device_id *id)
448 struct usb_device *dev = interface_to_usbdev(intf);
449 struct rio_usb_data *rio = &rio_instance;
450 int retval;
452 dev_info(&intf->dev, "USB Rio found at address %d\n", dev->devnum);
454 retval = usb_register_dev(intf, &usb_rio_class);
455 if (retval) {
456 dev_err(&dev->dev,
457 "Not able to get a minor for this device.\n");
458 return -ENOMEM;
461 rio->rio_dev = dev;
463 if (!(rio->obuf = kmalloc(OBUF_SIZE, GFP_KERNEL))) {
464 dev_err(&dev->dev,
465 "probe_rio: Not enough memory for the output buffer\n");
466 usb_deregister_dev(intf, &usb_rio_class);
467 return -ENOMEM;
469 dev_dbg(&intf->dev, "obuf address:%p\n", rio->obuf);
471 if (!(rio->ibuf = kmalloc(IBUF_SIZE, GFP_KERNEL))) {
472 dev_err(&dev->dev,
473 "probe_rio: Not enough memory for the input buffer\n");
474 usb_deregister_dev(intf, &usb_rio_class);
475 kfree(rio->obuf);
476 return -ENOMEM;
478 dev_dbg(&intf->dev, "ibuf address:%p\n", rio->ibuf);
480 mutex_init(&(rio->lock));
482 usb_set_intfdata (intf, rio);
483 rio->present = 1;
485 return 0;
488 static void disconnect_rio(struct usb_interface *intf)
490 struct rio_usb_data *rio = usb_get_intfdata (intf);
492 usb_set_intfdata (intf, NULL);
493 mutex_lock(&rio500_mutex);
494 if (rio) {
495 usb_deregister_dev(intf, &usb_rio_class);
497 mutex_lock(&(rio->lock));
498 if (rio->isopen) {
499 rio->isopen = 0;
500 /* better let it finish - the release will do whats needed */
501 rio->rio_dev = NULL;
502 mutex_unlock(&(rio->lock));
503 mutex_unlock(&rio500_mutex);
504 return;
506 kfree(rio->ibuf);
507 kfree(rio->obuf);
509 dev_info(&intf->dev, "USB Rio disconnected.\n");
511 rio->present = 0;
512 mutex_unlock(&(rio->lock));
514 mutex_unlock(&rio500_mutex);
517 static const struct usb_device_id rio_table[] = {
518 { USB_DEVICE(0x0841, 1) }, /* Rio 500 */
519 { } /* Terminating entry */
522 MODULE_DEVICE_TABLE (usb, rio_table);
524 static struct usb_driver rio_driver = {
525 .name = "rio500",
526 .probe = probe_rio,
527 .disconnect = disconnect_rio,
528 .id_table = rio_table,
531 module_usb_driver(rio_driver);
533 MODULE_AUTHOR( DRIVER_AUTHOR );
534 MODULE_DESCRIPTION( DRIVER_DESC );
535 MODULE_LICENSE("GPL");