1 // SPDX-License-Identifier: GPL-2.0+
2 /* -*- linux-c -*- */
3
4 /*
5 * Driver for USB Rio 500
6 *
7 * Cesar Miquel (miquel@df.uba.ar)
8 *
9 * based on hp_scanner.c by David E. Nelson (dnelson@jump.net)
10 *
11 * Based upon mouse.c (Brad Keryan) and printer.c (Michael Gee).
12 *
13 * Changelog:
14 * 30/05/2003 replaced lock/unlock kernel with up/down
15 * Daniele Bellucci bellucda@tiscali.it
16 * */
17
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>
30
31 #include "rio500_usb.h"
32
33 #define DRIVER_AUTHOR "Cesar Miquel <miquel@df.uba.ar>"
34 #define DRIVER_DESC "USB Rio 500 driver"
35
36 #define RIO_MINOR 64
37
38 /* stall/wait timeout for rio */
39 #define NAK_TIMEOUT (HZ)
40
41 #define IBUF_SIZE 0x1000
42
43 /* Size of the rio buffer */
44 #define OBUF_SIZE 0x10000
45
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 */
55 };
56
57 static DEFINE_MUTEX(rio500_mutex);
58 static struct rio_usb_data rio_instance;
59
open_rio(struct inode * inode,struct file * file)60 static int open_rio(struct inode *inode, struct file *file)
61 {
62 struct rio_usb_data *rio = &rio_instance;
63
64 /* against disconnect() */
65 mutex_lock(&rio500_mutex);
66 mutex_lock(&(rio->lock));
67
68 if (rio->isopen || !rio->present) {
69 mutex_unlock(&(rio->lock));
70 mutex_unlock(&rio500_mutex);
71 return -EBUSY;
72 }
73 rio->isopen = 1;
74
75 init_waitqueue_head(&rio->wait_q);
76
77 mutex_unlock(&(rio->lock));
78
79 dev_info(&rio->rio_dev->dev, "Rio opened.\n");
80 mutex_unlock(&rio500_mutex);
81
82 return 0;
83 }
84
close_rio(struct inode * inode,struct file * file)85 static int close_rio(struct inode *inode, struct file *file)
86 {
87 struct rio_usb_data *rio = &rio_instance;
88
89 rio->isopen = 0;
90
91 dev_info(&rio->rio_dev->dev, "Rio closed.\n");
92 return 0;
93 }
94
ioctl_rio(struct file * file,unsigned int cmd,unsigned long arg)95 static long ioctl_rio(struct file *file, unsigned int cmd, unsigned long arg)
96 {
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;
104
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;
110 }
111
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;
120 }
121 if (rio_cmd.length < 0 || rio_cmd.length > PAGE_SIZE) {
122 retval = -EINVAL;
123 goto err_out;
124 }
125 buffer = (unsigned char *) __get_free_page(GFP_KERNEL);
126 if (buffer == NULL) {
127 retval = -ENOMEM;
128 goto err_out;
129 }
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;
134 }
135
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;
169 }
170 retries = 0;
171 }
172
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 */
179
180 }
181 free_page((unsigned long) buffer);
182 break;
183
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;
191 }
192 if (rio_cmd.length < 0 || rio_cmd.length > PAGE_SIZE) {
193 retval = -EINVAL;
194 goto err_out;
195 }
196 buffer = (unsigned char *) __get_free_page(GFP_KERNEL);
197 if (buffer == NULL) {
198 retval = -ENOMEM;
199 goto err_out;
200 }
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;
205 }
206
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;
235
236 }
237
238 }
239 free_page((unsigned long) buffer);
240 break;
241
242 default:
243 retval = -ENOTTY;
244 break;
245 }
246
247
248 err_out:
249 mutex_unlock(&(rio->lock));
250 return retval;
251 }
252
253 static ssize_t
write_rio(struct file * file,const char __user * buffer,size_t count,loff_t * ppos)254 write_rio(struct file *file, const char __user *buffer,
255 size_t count, loff_t * ppos)
256 {
257 DEFINE_WAIT(wait);
258 struct rio_usb_data *rio = &rio_instance;
259
260 unsigned long copy_size;
261 unsigned long bytes_written = 0;
262 unsigned int partial;
263
264 int result = 0;
265 int maxretry;
266 int errn = 0;
267 int intr;
268
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;
276 }
277
278
279
280 do {
281 unsigned long thistime;
282 char *obuf = rio->obuf;
283
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;
289 }
290 maxretry = 5;
291 while (thistime) {
292 if (!rio->rio_dev) {
293 errn = -ENODEV;
294 goto error;
295 }
296 if (signal_pending(current)) {
297 mutex_unlock(&(rio->lock));
298 return bytes_written ? bytes_written : -EINTR;
299 }
300
301 result = usb_bulk_msg(rio->rio_dev,
302 usb_sndbulkpipe(rio->rio_dev, 2),
303 obuf, thistime, &partial, 5000);
304
305 dev_dbg(&rio->rio_dev->dev,
306 "write stats: result:%d thistime:%lu partial:%u\n",
307 result, thistime, partial);
308
309 if (result == -ETIMEDOUT) { /* NAK - so hold for a while */
310 if (!maxretry--) {
311 errn = -ETIME;
312 goto error;
313 }
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;
323 }
324 if (result) {
325 dev_err(&rio->rio_dev->dev, "Write Whoops - %x\n",
326 result);
327 errn = -EIO;
328 goto error;
329 }
330 bytes_written += copy_size;
331 count -= copy_size;
332 buffer += copy_size;
333 } while (count > 0);
334
335 mutex_unlock(&(rio->lock));
336
337 return bytes_written ? bytes_written : -EIO;
338
339 error:
340 mutex_unlock(&(rio->lock));
341 return errn;
342 }
343
344 static ssize_t
read_rio(struct file * file,char __user * buffer,size_t count,loff_t * ppos)345 read_rio(struct file *file, char __user *buffer, size_t count, loff_t * ppos)
346 {
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;
356
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;
364 }
365
366 ibuf = rio->ibuf;
367
368 read_count = 0;
369
370
371 while (count > 0) {
372 if (signal_pending(current)) {
373 mutex_unlock(&(rio->lock));
374 return read_count ? read_count : -EINTR;
375 }
376 if (!rio->rio_dev) {
377 mutex_unlock(&(rio->lock));
378 return -ENODEV;
379 }
380 this_read = (count >= IBUF_SIZE) ? IBUF_SIZE : count;
381
382 result = usb_bulk_msg(rio->rio_dev,
383 usb_rcvbulkpipe(rio->rio_dev, 1),
384 ibuf, this_read, &partial,
385 8000);
386
387 dev_dbg(&rio->rio_dev->dev,
388 "read stats: result:%d this_read:%u partial:%u\n",
389 result, this_read, partial);
390
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;
399 }
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);
413 }
414
415 if (this_read) {
416 if (copy_to_user(buffer, ibuf, this_read)) {
417 mutex_unlock(&(rio->lock));
418 return -EFAULT;
419 }
420 count -= this_read;
421 read_count += this_read;
422 buffer += this_read;
423 }
424 }
425 mutex_unlock(&(rio->lock));
426 return read_count;
427 }
428
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,
437 };
438
439 static struct usb_class_driver usb_rio_class = {
440 .name = "rio500%d",
441 .fops = &usb_rio_fops,
442 .minor_base = RIO_MINOR,
443 };
444
probe_rio(struct usb_interface * intf,const struct usb_device_id * id)445 static int probe_rio(struct usb_interface *intf,
446 const struct usb_device_id *id)
447 {
448 struct usb_device *dev = interface_to_usbdev(intf);
449 struct rio_usb_data *rio = &rio_instance;
450 int retval;
451
452 dev_info(&intf->dev, "USB Rio found at address %d\n", dev->devnum);
453
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;
459 }
460
461 rio->rio_dev = dev;
462
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;
468 }
469 dev_dbg(&intf->dev, "obuf address:%p\n", rio->obuf);
470
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;
477 }
478 dev_dbg(&intf->dev, "ibuf address:%p\n", rio->ibuf);
479
480 mutex_init(&(rio->lock));
481
482 usb_set_intfdata (intf, rio);
483 rio->present = 1;
484
485 return 0;
486 }
487
disconnect_rio(struct usb_interface * intf)488 static void disconnect_rio(struct usb_interface *intf)
489 {
490 struct rio_usb_data *rio = usb_get_intfdata (intf);
491
492 usb_set_intfdata (intf, NULL);
493 mutex_lock(&rio500_mutex);
494 if (rio) {
495 usb_deregister_dev(intf, &usb_rio_class);
496
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;
505 }
506 kfree(rio->ibuf);
507 kfree(rio->obuf);
508
509 dev_info(&intf->dev, "USB Rio disconnected.\n");
510
511 rio->present = 0;
512 mutex_unlock(&(rio->lock));
513 }
514 mutex_unlock(&rio500_mutex);
515 }
516
517 static const struct usb_device_id rio_table[] = {
518 { USB_DEVICE(0x0841, 1) }, /* Rio 500 */
519 { } /* Terminating entry */
520 };
521
522 MODULE_DEVICE_TABLE (usb, rio_table);
523
524 static struct usb_driver rio_driver = {
525 .name = "rio500",
526 .probe = probe_rio,
527 .disconnect = disconnect_rio,
528 .id_table = rio_table,
529 };
530
531 module_usb_driver(rio_driver);
532
533 MODULE_AUTHOR( DRIVER_AUTHOR );
534 MODULE_DESCRIPTION( DRIVER_DESC );
535 MODULE_LICENSE("GPL");
536
537