4 * Copyright (C) 2005, 2006 Princeton Instruments
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation version 2 of the License
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 #include <linux/vmalloc.h>
21 #include <linux/kernel.h>
22 #include <linux/errno.h>
23 #include <linux/init.h>
24 #include <linux/slab.h>
25 #include <linux/module.h>
26 #include <linux/smp_lock.h>
27 #include <linux/completion.h>
28 #include <linux/scatterlist.h>
29 #include <linux/usb.h>
31 #include <linux/pagemap.h>
32 #include <linux/ioctl.h>
35 #ifdef CONFIG_USB_DEBUG
40 /* Use our own dbg macro */
42 #define dbg(format, arg...) \
45 printk(KERN_DEBUG __FILE__ ": " format "\n" , ##arg); \
48 /* Version Information */
49 #define DRIVER_VERSION "V1.0.1"
50 #define DRIVER_AUTHOR "Princeton Instruments"
51 #define DRIVER_DESC "PI USB2.0 Device Driver for Linux"
53 /* Define these values to match your devices */
54 #define VENDOR_ID 0x0BD7
55 #define ST133_PID 0xA010
56 #define PIXIS_PID 0xA026
58 /* Get a minor range for your devices from the usb maintainer */
59 #ifdef CONFIG_USB_DYNAMIC_MINORS
60 #define PIUSB_MINOR_BASE 0
62 #define PIUSB_MINOR_BASE 192
65 /* prevent races between open() and disconnect() */
66 static DECLARE_MUTEX(disconnect_sem
);
68 /* Structure to hold all of our device specific stuff */
69 struct device_extension
{
70 struct usb_device
*udev
; /* save off the usb device pointer */
71 struct usb_interface
*interface
; /* the interface for this device */
72 unsigned char minor
; /* the starting minor number
75 size_t bulk_in_size_returned
;
77 struct urb
***PixelUrb
;
80 unsigned int *maplist_numPagesMapped
;
81 int open
; /* if the port is open or not */
82 int present
; /* if the device is not disconnected */
83 int userBufMapped
; /* has the user buffer been mapped ? */
84 struct scatterlist
**sgl
; /* scatter-gather list for user buffer */
85 unsigned int *sgEntries
;
89 char **pendedPixelUrbs
;
90 int iama
; /* PIXIS or ST133 */
91 int num_frames
; /* the number of frames that will fit
95 unsigned long frameSize
;
97 unsigned int hEP
[8]; /* FX2 specific endpoints */
100 #define to_pi_dev(d) container_of(d, struct device_extension, kref)
103 static int MapUserBuffer(struct ioctl_struct
*, struct device_extension
*);
104 static int UnMapUserBuffer(struct device_extension
*);
105 static int piusb_ioctl(struct inode
*inode
, struct file
*file
, unsigned int cmd
,
107 static int piusb_output(struct ioctl_struct
*, unsigned char *, int,
108 struct device_extension
*);
109 static struct usb_driver piusb_driver
;
111 /* table of devices that work with this driver */
112 static struct usb_device_id pi_device_table
[] = {
113 {USB_DEVICE(VENDOR_ID
, ST133_PID
)},
114 {USB_DEVICE(VENDOR_ID
, PIXIS_PID
)},
115 {0, } /* Terminating entry */
118 MODULE_DEVICE_TABLE(usb
, pi_device_table
);
123 static void piusb_delete(struct kref
*kref
)
125 struct device_extension
*pdx
= to_pi_dev(kref
);
127 dev_dbg(&pdx
->udev
->dev
, "%s\n", __func__
);
128 usb_put_dev(pdx
->udev
);
132 static int piusb_open(struct inode
*inode
, struct file
*file
)
134 struct device_extension
*pdx
= NULL
;
135 struct usb_interface
*interface
;
140 subminor
= iminor(inode
);
141 interface
= usb_find_interface(&piusb_driver
, subminor
);
143 printk(KERN_ERR
"%s - error, can't find device for minor %d\n",
149 pdx
= usb_get_intfdata(interface
);
154 dbg("Alternate Setting = %d", interface
->num_altsetting
);
156 pdx
->bulk_in_size_returned
= 0;
157 pdx
->bulk_in_byte_trk
= 0;
158 pdx
->PixelUrb
= NULL
;
161 pdx
->maplist_numPagesMapped
= NULL
;
162 pdx
->userBufMapped
= 0;
164 pdx
->sgEntries
= NULL
;
165 pdx
->gotPixelData
= 0;
166 pdx
->pendingWrite
= 0;
167 pdx
->pendedPixelUrbs
= NULL
;
169 pdx
->active_frame
= 0;
172 /* increment our usage count for the device */
173 kref_get(&pdx
->kref
);
175 /* save our object in the file's private structure */
176 file
->private_data
= pdx
;
182 static int piusb_release(struct inode
*inode
, struct file
*file
)
184 struct device_extension
*pdx
;
187 dbg("Piusb_Release()");
188 pdx
= (struct device_extension
*)file
->private_data
;
190 dbg("%s - object is NULL", __func__
);
194 /* decrement the count on our device */
195 kref_put(&pdx
->kref
, piusb_delete
);
201 static int pixis_io(struct ioctl_struct
*ctrl
, struct device_extension
*pdx
,
202 struct ioctl_struct
*arg
)
204 unsigned int numToRead
= 0;
205 unsigned int totalRead
= 0;
210 uBuf
= kmalloc(ctrl
->numbytes
, GFP_KERNEL
);
212 dbg("Alloc for uBuf failed");
215 numbytes
= (int) ctrl
->numbytes
;
216 numToRead
= (unsigned int) ctrl
->numbytes
;
217 dbg("numbytes to read = %d", numbytes
);
218 dbg("endpoint # %d", ctrl
->endpoint
);
220 if (copy_from_user(uBuf
, ctrl
->pData
, numbytes
)) {
221 dbg("copying ctrl->pData to dummyBuf failed");
226 i
= usb_bulk_msg(pdx
->udev
, pdx
->hEP
[ctrl
->endpoint
],
228 /* EP0 can only handle 64 bytes at a time */
229 (numToRead
> 64) ? 64 : numToRead
,
232 dbg("CMD = %s, Address = 0x%02X",
233 ((uBuf
[3] == 0x02) ? "WRITE" : "READ"),
235 dbg("Number of bytes Attempted to read = %d",
236 (int)ctrl
->numbytes
);
237 dbg("Blocking ReadI/O Failed with status %d", i
);
241 dbg("Pixis EP0 Read %d bytes", numbytes
);
242 totalRead
+= numbytes
;
243 numToRead
-= numbytes
;
246 memcpy(ctrl
->pData
, uBuf
, totalRead
);
247 dbg("Total Bytes Read from PIXIS EP0 = %d", totalRead
);
248 ctrl
->numbytes
= totalRead
;
250 if (copy_to_user(arg
, ctrl
, sizeof(struct ioctl_struct
)))
251 dbg("copy_to_user failed in IORB");
254 return ctrl
->numbytes
;
257 static int pixel_data(struct ioctl_struct
*ctrl
, struct device_extension
*pdx
)
261 if (!pdx
->gotPixelData
)
264 pdx
->gotPixelData
= 0;
265 ctrl
->numbytes
= pdx
->bulk_in_size_returned
;
266 pdx
->bulk_in_size_returned
-= pdx
->frameSize
;
268 for (i
= 0; i
< pdx
->maplist_numPagesMapped
[pdx
->active_frame
]; i
++)
269 SetPageDirty(sg_page(&pdx
->sgl
[pdx
->active_frame
][i
]));
271 pdx
->active_frame
= ((pdx
->active_frame
+ 1) % pdx
->num_frames
);
273 return ctrl
->numbytes
;
279 static int piusb_ioctl(struct inode
*inode
, struct file
*file
, unsigned int cmd
,
282 struct device_extension
*pdx
;
283 char dummyCtlBuf
[] = { 0, 0, 0, 0, 0, 0, 0, 0 };
284 unsigned long devRB
= 0;
287 struct ioctl_struct ctrl
;
288 unsigned short controlData
= 0;
290 pdx
= (struct device_extension
*)file
->private_data
;
291 /* verify that the device wasn't unplugged */
293 dbg("No Device Present\n");
296 /* fill in your device specific stuff here */
297 if (_IOC_DIR(cmd
) & _IOC_READ
)
298 err
= !access_ok(VERIFY_WRITE
, (void __user
*)arg
,
300 else if (_IOC_DIR(cmd
) & _IOC_WRITE
)
301 err
= !access_ok(VERIFY_READ
, (void __user
*)arg
,
304 dev_err(&pdx
->udev
->dev
, "return with error = %d\n", err
);
308 case PIUSB_GETVNDCMD
:
310 (&ctrl
, (void __user
*)arg
, sizeof(struct ioctl_struct
))) {
311 dev_err(&pdx
->udev
->dev
, "copy_from_user failed\n");
314 dbg("%s %x\n", "Get Vendor Command = ", ctrl
.cmd
);
316 usb_control_msg(pdx
->udev
, usb_rcvctrlpipe(pdx
->udev
, 0),
317 ctrl
.cmd
, USB_DIR_IN
, 0, 0, &devRB
,
318 ctrl
.numbytes
, HZ
* 10);
319 if (ctrl
.cmd
== 0xF1) {
320 dbg("FW Version returned from HW = %ld.%ld",
321 (devRB
>> 8), (devRB
& 0xFF));
327 case PIUSB_SETVNDCMD
:
329 (&ctrl
, (void __user
*)arg
, sizeof(struct ioctl_struct
))) {
330 dev_err(&pdx
->udev
->dev
, "copy_from_user failed\n");
333 /* dbg( "%s %x", "Set Vendor Command = ",ctrl.cmd ); */
334 controlData
= ctrl
.pData
[0];
335 controlData
|= (ctrl
.pData
[1] << 8);
336 /* dbg( "%s %d", "Vendor Data =",controlData ); */
337 retval
= usb_control_msg(pdx
->udev
,
338 usb_sndctrlpipe(pdx
->udev
, 0),
340 (USB_DIR_OUT
| USB_TYPE_VENDOR
341 /* | USB_RECIP_ENDPOINT */),
343 &dummyCtlBuf
, ctrl
.numbytes
, HZ
* 10);
346 case PIUSB_ISHIGHSPEED
:
347 return ((pdx
->udev
->speed
== USB_SPEED_HIGH
) ? 1 : 0);
349 case PIUSB_WRITEPIPE
:
350 if (__copy_from_user(&ctrl
, (void __user
*)arg
, _IOC_SIZE(cmd
))) {
351 dev_err(&pdx
->udev
->dev
,
352 "copy_from_user WRITE_DUMMY failed\n");
355 if (!access_ok(VERIFY_READ
, ctrl
.pData
, ctrl
.numbytes
)) {
356 dbg("can't access pData");
359 piusb_output(&ctrl
, ctrl
.pData
/* uBuf */, ctrl
.numbytes
, pdx
);
360 return ctrl
.numbytes
;
362 case PIUSB_USERBUFFER
:
364 (&ctrl
, (void __user
*)arg
, sizeof(struct ioctl_struct
))) {
365 dev_err(&pdx
->udev
->dev
, "copy_from_user failed\n");
368 return MapUserBuffer((struct ioctl_struct
*) &ctrl
, pdx
);
370 case PIUSB_UNMAP_USERBUFFER
:
371 retval
= UnMapUserBuffer(pdx
);
375 if (__copy_from_user(&ctrl
, (void __user
*)arg
,
376 sizeof(struct ioctl_struct
))) {
377 dev_err(&pdx
->udev
->dev
, "copy_from_user failed\n");
380 if (((0 == ctrl
.endpoint
) && (PIXIS_PID
== pdx
->iama
)) ||
381 (1 == ctrl
.endpoint
) || /* ST133IO */
382 (4 == ctrl
.endpoint
)) /* PIXIS IO */
383 return pixis_io(&ctrl
, pdx
,
384 (struct ioctl_struct
*)arg
);
385 else if ((0 == ctrl
.endpoint
) || /* ST133 Pixel Data */
386 (2 == ctrl
.endpoint
) || /* PIXIS Ping */
387 (3 == ctrl
.endpoint
)) /* PIXIS Pong */
388 return pixel_data(&ctrl
, pdx
);
392 case PIUSB_WHATCAMERA
:
395 case PIUSB_SETFRAMESIZE
:
396 dbg("PIUSB_SETFRAMESIZE");
398 (&ctrl
, (void __user
*)arg
, sizeof(struct ioctl_struct
))) {
399 dev_err(&pdx
->udev
->dev
, "copy_from_user failed\n");
402 pdx
->frameSize
= ctrl
.numbytes
;
403 pdx
->num_frames
= ctrl
.numFrames
;
406 kmalloc(sizeof(struct scatterlist
*) *
407 pdx
->num_frames
, GFP_KERNEL
);
410 kmalloc(sizeof(unsigned int) * pdx
->num_frames
,
414 kmalloc(sizeof(struct urb
**) * pdx
->num_frames
,
416 if (!pdx
->maplist_numPagesMapped
)
417 pdx
->maplist_numPagesMapped
=
418 vmalloc(sizeof(unsigned int) * pdx
->num_frames
);
419 if (!pdx
->pendedPixelUrbs
)
420 pdx
->pendedPixelUrbs
=
421 kmalloc(sizeof(char *) * pdx
->num_frames
,
426 dbg("%s\n", "No IOCTL found");
430 /* return that we did not understand this ioctl call */
431 dbg("Returning -ENOTTY");
435 static void piusb_write_bulk_callback(struct urb
*urb
)
437 struct device_extension
*pdx
= urb
->context
;
438 int status
= urb
->status
;
440 /* sync/async unlink faults aren't errors */
441 if (status
&& !(status
== -ENOENT
|| status
== -ECONNRESET
))
442 dev_dbg(&urb
->dev
->dev
,
443 "%s - nonzero write bulk status received: %d",
446 pdx
->pendingWrite
= 0;
447 kfree(urb
->transfer_buffer
);
450 int piusb_output(struct ioctl_struct
*io
, unsigned char *uBuf
, int len
,
451 struct device_extension
*pdx
)
453 struct urb
*urb
= NULL
;
455 unsigned char *kbuf
= NULL
;
457 urb
= usb_alloc_urb(0, GFP_KERNEL
);
459 kbuf
= kmalloc(len
, GFP_KERNEL
);
461 dev_err(&pdx
->udev
->dev
, "buffer_alloc failed\n");
464 if(__copy_from_user(kbuf
, uBuf
, len
)) {
465 dev_err(&pdx
->udev
->dev
, "__copy_from_user failed\n");
468 usb_fill_bulk_urb(urb
, pdx
->udev
, pdx
->hEP
[io
->endpoint
], kbuf
,
469 len
, piusb_write_bulk_callback
, pdx
);
470 err
= usb_submit_urb(urb
, GFP_KERNEL
);
472 dev_err(&pdx
->udev
->dev
,
473 "WRITE ERROR:submit urb error = %d\n", err
);
475 pdx
->pendingWrite
= 1;
481 static int UnMapUserBuffer(struct device_extension
*pdx
)
487 for (k
= 0; k
< pdx
->num_frames
; k
++) {
488 dbg("Killing Urbs for Frame %d", k
);
489 for (i
= 0; i
< pdx
->sgEntries
[k
]; i
++) {
490 usb_kill_urb(pdx
->PixelUrb
[k
][i
]);
491 usb_free_urb(pdx
->PixelUrb
[k
][i
]);
492 pdx
->pendedPixelUrbs
[k
][i
] = 0;
494 dbg("Urb error count = %d", errCnt
);
496 dbg("Urbs free'd and Killed for Frame %d", k
);
499 for (k
= 0; k
< pdx
->num_frames
; k
++) {
500 if (pdx
->iama
== PIXIS_PID
)
501 /* which EP should we map this frame to ? */
502 /* PONG, odd frames: hEP[3] */
503 /* PING, even frames and zero hEP[2] */
504 epAddr
= (k
% 2) ? pdx
->hEP
[3] : pdx
->hEP
[2];
506 /* ST133 only has 1 endpoint for Pixel data transfer */
507 epAddr
= pdx
->hEP
[0];
509 usb_buffer_unmap_sg(pdx
->udev
, epAddr
, pdx
->sgl
[k
],
510 pdx
->maplist_numPagesMapped
[k
]);
511 for (i
= 0; i
< pdx
->maplist_numPagesMapped
[k
]; i
++)
512 page_cache_release(sg_page(&pdx
->sgl
[k
][i
]));
514 kfree(pdx
->PixelUrb
[k
]);
515 kfree(pdx
->pendedPixelUrbs
[k
]);
517 pdx
->PixelUrb
[k
] = NULL
;
518 pdx
->pendedPixelUrbs
[k
] = NULL
;
521 kfree(pdx
->sgEntries
);
522 vfree(pdx
->maplist_numPagesMapped
);
523 pdx
->sgEntries
= NULL
;
524 pdx
->maplist_numPagesMapped
= NULL
;
526 kfree(pdx
->pendedPixelUrbs
);
527 kfree(pdx
->PixelUrb
);
529 pdx
->pendedPixelUrbs
= NULL
;
530 pdx
->PixelUrb
= NULL
;
535 static void piusb_readPIXEL_callback(struct urb
*urb
)
538 struct device_extension
*pdx
= urb
->context
;
539 int status
= urb
->status
;
541 if (status
&& !(status
== -ENOENT
|| status
== -ECONNRESET
)) {
542 dbg("%s - nonzero read bulk status received: %d", __func__
,
544 dbg("Error in read EP2 callback");
545 dbg("FrameIndex = %d", pdx
->frameIdx
);
546 dbg("Bytes received before problem occurred = %d",
547 pdx
->bulk_in_byte_trk
);
548 dbg("Urb Idx = %d", pdx
->urbIdx
);
549 pdx
->pendedPixelUrbs
[pdx
->frameIdx
][pdx
->urbIdx
] = 0;
551 pdx
->bulk_in_byte_trk
+= urb
->actual_length
;
552 i
= usb_submit_urb(urb
, GFP_ATOMIC
); /* resubmit the URB */
556 dbg("submit urb in callback failed "
557 "with error code %d", i
);
561 pdx
->urbIdx
++; /* point to next URB when we callback */
562 if (pdx
->bulk_in_byte_trk
>= pdx
->frameSize
) {
563 pdx
->bulk_in_size_returned
=
564 pdx
->bulk_in_byte_trk
;
565 pdx
->bulk_in_byte_trk
= 0;
566 pdx
->gotPixelData
= 1;
569 1) % pdx
->num_frames
);
578 struct ioctl_struct *io - structure containing user address,
580 struct device_extension *pdx - the PIUSB device extension
583 int - status of the task
586 MapUserBuffer maps a buffer passed down through an ioctl.
587 The user buffer is Page Aligned by the app and then passed down.
588 The function get_free_pages(...) does the actual mapping of the buffer
589 from user space to kernel space.
590 From there a scatterlist is created from all the pages.
591 The next function called is to usb_buffer_map_sg which allocated
592 DMA addresses for each page, even coalescing them if possible.
593 The DMA address is placed in the scatterlist structure.
594 The function returns the number of DMA addresses.
595 This may or may not be equal to the number of pages that
596 the user buffer uses.
597 We then build an URB for each DMA address and then submit them.
601 int MapUserBuffer(unsigned long uaddr, unsigned long numbytes,
602 unsigned long frameInfo, struct device_extension *pdx)
604 static int MapUserBuffer(struct ioctl_struct
*io
, struct device_extension
*pdx
)
607 unsigned long numbytes
;
608 int frameInfo
; /* which frame we're mapping */
609 unsigned int epAddr
= 0;
610 unsigned long count
= 0;
614 struct page
**maplist_p
;
615 int numPagesRequired
;
617 frameInfo
= io
->numFrames
;
618 uaddr
= (unsigned long)io
->pData
;
619 numbytes
= io
->numbytes
;
621 if (pdx
->iama
== PIXIS_PID
) {
622 /* which EP should we map this frame to ? */
623 /* PONG, odd frames: hEP[3] */
624 /* PING, even frames and zero hEP[2] */
625 epAddr
= (frameInfo
% 2) ? pdx
->hEP
[3] : pdx
->hEP
[2];
626 dbg("Pixis Frame #%d: EP=%d", frameInfo
,
627 (epAddr
== pdx
->hEP
[2]) ? 2 : 4);
628 } else { /* ST133 only has 1 endpoint for Pixel data transfer */
629 epAddr
= pdx
->hEP
[0];
630 dbg("ST133 Frame #%d: EP=2", frameInfo
);
633 dbg("UserAddress = 0x%08lX", uaddr
);
634 dbg("numbytes = %d", (int)numbytes
);
636 /* number of pages to map the entire user space DMA buffer */
638 ((uaddr
& ~PAGE_MASK
) + count
+ ~PAGE_MASK
) >> PAGE_SHIFT
;
639 dbg("Number of pages needed = %d", numPagesRequired
);
640 maplist_p
= vmalloc(numPagesRequired
* sizeof(struct page
*));
642 dbg("Can't Allocate Memory for maplist_p");
646 /* map the user buffer to kernel memory */
647 down_write(¤t
->mm
->mmap_sem
);
648 pdx
->maplist_numPagesMapped
[frameInfo
] = get_user_pages(current
,
649 current
->mm
, (uaddr
& PAGE_MASK
), numPagesRequired
,
650 WRITE
, 0 /* Don't Force*/, maplist_p
, NULL
);
651 up_write(¤t
->mm
->mmap_sem
);
652 dbg("Number of pages mapped = %d",
653 pdx
->maplist_numPagesMapped
[frameInfo
]);
655 for (i
= 0; i
< pdx
->maplist_numPagesMapped
[frameInfo
]; i
++)
656 flush_dcache_page(maplist_p
[i
]);
657 if (!pdx
->maplist_numPagesMapped
[frameInfo
]) {
658 dbg("get_user_pages() failed");
663 /* need to create a scatterlist that spans each frame
664 * that can fit into the mapped buffer
666 pdx
->sgl
[frameInfo
] =
667 kmalloc((pdx
->maplist_numPagesMapped
[frameInfo
] *
668 sizeof(struct scatterlist
)), GFP_ATOMIC
);
669 if (!pdx
->sgl
[frameInfo
]) {
671 dbg("can't allocate mem for sgl");
674 sg_assign_page(&pdx
->sgl
[frameInfo
][0], maplist_p
[0]);
675 pdx
->sgl
[frameInfo
][0].offset
= uaddr
& ~PAGE_MASK
;
676 if (pdx
->maplist_numPagesMapped
[frameInfo
] > 1) {
677 pdx
->sgl
[frameInfo
][0].length
=
678 PAGE_SIZE
- pdx
->sgl
[frameInfo
][0].offset
;
679 count
-= pdx
->sgl
[frameInfo
][0].length
;
680 for (k
= 1; k
< pdx
->maplist_numPagesMapped
[frameInfo
]; k
++) {
681 pdx
->sgl
[frameInfo
][k
].offset
= 0;
682 sg_assign_page(&pdx
->sgl
[frameInfo
][k
], maplist_p
[k
]);
683 pdx
->sgl
[frameInfo
][k
].length
=
684 (count
< PAGE_SIZE
) ? count
: PAGE_SIZE
;
685 count
-= PAGE_SIZE
; /* example had PAGE_SIZE here */
688 pdx
->sgl
[frameInfo
][0].length
= count
;
690 pdx
->sgEntries
[frameInfo
] =
691 usb_buffer_map_sg(pdx
->udev
, epAddr
, pdx
->sgl
[frameInfo
],
692 pdx
->maplist_numPagesMapped
[frameInfo
]);
693 dbg("number of sgEntries = %d", pdx
->sgEntries
[frameInfo
]);
694 pdx
->userBufMapped
= 1;
697 /* Create and Send the URB's for each s/g entry */
698 pdx
->PixelUrb
[frameInfo
] =
699 kmalloc(pdx
->sgEntries
[frameInfo
] * sizeof(struct urb
*),
701 if (!pdx
->PixelUrb
[frameInfo
]) {
702 dbg("Can't Allocate Memory for Urb");
705 for (i
= 0; i
< pdx
->sgEntries
[frameInfo
]; i
++) {
706 /* 0 iso packets because we're using BULK transfers */
707 pdx
->PixelUrb
[frameInfo
][i
] = usb_alloc_urb(0, GFP_KERNEL
);
708 usb_fill_bulk_urb(pdx
->PixelUrb
[frameInfo
][i
],
711 NULL
, // non-DMA HC? buy a better hardware
712 sg_dma_len(&pdx
->sgl
[frameInfo
][i
]),
713 piusb_readPIXEL_callback
, (void *)pdx
);
714 pdx
->PixelUrb
[frameInfo
][i
]->transfer_dma
=
715 sg_dma_address(&pdx
->sgl
[frameInfo
][i
]);
716 pdx
->PixelUrb
[frameInfo
][i
]->transfer_flags
=
717 URB_NO_TRANSFER_DMA_MAP
| URB_NO_INTERRUPT
;
721 /* only interrupt when last URB completes */
722 pdx
->PixelUrb
[frameInfo
][--i
]->transfer_flags
&= ~URB_NO_INTERRUPT
;
723 pdx
->pendedPixelUrbs
[frameInfo
] =
724 kmalloc((pdx
->sgEntries
[frameInfo
] * sizeof(char)), GFP_KERNEL
);
725 if (!pdx
->pendedPixelUrbs
[frameInfo
])
726 dbg("Can't allocate Memory for pendedPixelUrbs");
727 for (i
= 0; i
< pdx
->sgEntries
[frameInfo
]; i
++) {
728 err
= usb_submit_urb(pdx
->PixelUrb
[frameInfo
][i
], GFP_ATOMIC
);
730 dbg("%s %d\n", "submit urb error =", err
);
731 pdx
->pendedPixelUrbs
[frameInfo
][i
] = 0;
734 pdx
->pendedPixelUrbs
[frameInfo
][i
] = 1;
739 static const struct file_operations piusb_fops
= {
740 .owner
= THIS_MODULE
,
741 .ioctl
= piusb_ioctl
,
743 .release
= piusb_release
,
746 static struct usb_class_driver piusb_class
= {
747 .name
= "usb/rspiusb%d",
749 .minor_base
= PIUSB_MINOR_BASE
,
755 * Called by the usb core when a new device is connected that it thinks
756 * this driver might be interested in.
758 static int piusb_probe(struct usb_interface
*interface
,
759 const struct usb_device_id
*id
)
761 struct device_extension
*pdx
= NULL
;
762 struct usb_host_interface
*iface_desc
;
763 struct usb_endpoint_descriptor
*endpoint
;
765 int retval
= -ENOMEM
;
767 dev_dbg(&interface
->dev
, "%s - Looking for PI USB Hardware", __func__
);
769 pdx
= kzalloc(sizeof(struct device_extension
), GFP_KERNEL
);
771 dev_err(&interface
->dev
, "Out of memory\n");
774 kref_init(&pdx
->kref
);
775 pdx
->udev
= usb_get_dev(interface_to_usbdev(interface
));
776 pdx
->interface
= interface
;
777 iface_desc
= interface
->cur_altsetting
;
779 /* See if the device offered us matches what we can accept */
780 if ((pdx
->udev
->descriptor
.idVendor
!= VENDOR_ID
)
781 || ((pdx
->udev
->descriptor
.idProduct
!= PIXIS_PID
)
782 && (pdx
->udev
->descriptor
.idProduct
!= ST133_PID
)))
785 pdx
->iama
= pdx
->udev
->descriptor
.idProduct
;
788 if (pdx
->udev
->descriptor
.idProduct
== PIXIS_PID
)
789 dbg("PIUSB:Pixis Camera Found");
791 dbg("PIUSB:ST133 USB Controller Found");
792 if (pdx
->udev
->speed
== USB_SPEED_HIGH
)
793 dbg("Highspeed(USB2.0) Device Attached");
795 dbg("Lowspeed (USB1.1) Device Attached");
797 dbg("NumEndpoints in Configuration: %d",
798 iface_desc
->desc
.bNumEndpoints
);
800 for (i
= 0; i
< iface_desc
->desc
.bNumEndpoints
; ++i
) {
801 endpoint
= &iface_desc
->endpoint
[i
].desc
;
803 dbg("Endpoint[%d]->bDescriptorType = %d", i
,
804 endpoint
->bDescriptorType
);
805 dbg("Endpoint[%d]->bEndpointAddress = 0x%02X", i
,
806 endpoint
->bEndpointAddress
);
807 dbg("Endpoint[%d]->bbmAttributes = %d", i
,
808 endpoint
->bmAttributes
);
809 dbg("Endpoint[%d]->MaxPacketSize = %d\n", i
,
810 endpoint
->wMaxPacketSize
);
812 if (usb_endpoint_xfer_bulk(endpoint
)) {
813 if (usb_endpoint_dir_in(endpoint
))
815 usb_rcvbulkpipe(pdx
->udev
,
816 endpoint
->bEndpointAddress
);
819 usb_sndbulkpipe(pdx
->udev
,
820 endpoint
->bEndpointAddress
);
823 usb_set_intfdata(interface
, pdx
);
824 retval
= usb_register_dev(interface
, &piusb_class
);
826 err("Not able to get a minor for this device.");
827 usb_set_intfdata(interface
, NULL
);
832 /* we can register the device now, as it is ready */
833 pdx
->minor
= interface
->minor
;
834 /* let the user know what node this device is now attached to */
835 dbg("PI USB2.0 device now attached to piusb-%d", pdx
->minor
);
840 kref_put(&pdx
->kref
, piusb_delete
);
847 * Called by the usb core when the device is removed from the system.
849 * This routine guarantees that the driver will not submit any more urbs
850 * by clearing pdx->udev. It is also supposed to terminate any currently
851 * active urbs. Unfortunately, usb_bulk_msg(), used in piusb_read(), does
852 * not provide any way to do this. But at least we can cancel an active
855 static void piusb_disconnect(struct usb_interface
*interface
)
857 struct device_extension
*pdx
;
858 int minor
= interface
->minor
;
862 pdx
= usb_get_intfdata(interface
);
863 usb_set_intfdata(interface
, NULL
);
865 /* give back our minor */
866 usb_deregister_dev(interface
, &piusb_class
);
870 /* prevent device read, write and ioctl */
872 kref_put(&pdx
->kref
, piusb_delete
);
873 dbg("PI USB2.0 device #%d now disconnected\n", minor
);
876 static struct usb_driver piusb_driver
= {
878 .probe
= piusb_probe
,
879 .disconnect
= piusb_disconnect
,
880 .id_table
= pi_device_table
,
886 static int __init
piusb_init(void)
893 /* register this driver with the USB subsystem */
894 result
= usb_register(&piusb_driver
);
896 printk(KERN_ERR KBUILD_MODNAME
897 ": usb_register failed. Error number %d\n",
900 printk(KERN_INFO KBUILD_MODNAME
":%s: %s\n", DRIVER_DESC
,
908 static void __exit
piusb_exit(void)
910 /* deregister this driver with the USB subsystem */
911 usb_deregister(&piusb_driver
);
914 module_init(piusb_init
);
915 module_exit(piusb_exit
);
917 /* Module parameters */
918 module_param(debug
, int, 0);
919 MODULE_PARM_DESC(debug
, "Debug enabled or not");
921 MODULE_AUTHOR(DRIVER_AUTHOR
);
922 MODULE_DESCRIPTION(DRIVER_DESC
);
923 MODULE_LICENSE("GPL v2");