Subversion Repositories f9daq

Rev

Blame | Last modification | View Log | RSS feed

  1. /************************************************************************\
  2. ##                                                                      ##
  3. ##  Creation Date: 19 Mar 2007                                          ##
  4. ##  Last Update:   19 Mar 2007                                          ##
  5. ##  Author:       XInstruments                                          ##
  6. ##                                                                      ##
  7. ##  Desc: Driver main module header.                                    ##
  8. ##                                                                      ##
  9. \************************************************************************/
  10.  
  11.  
  12. #include        <linux/usb.h>
  13.  
  14.  
  15. #define         USMC_DEV_NAME           "8SMC-USB1h"
  16. #define         USMC_PRODUCT_ID         0x0230
  17. #define         USMC_VENDOR_ID          0x10c4
  18. #define         USB_USMC_MINOR_BASE     192             // Get a minor range for your devices from the usb maintainer
  19. #define         WRITES_IN_FLIGHT        8
  20. #define         USMC_SUCCESS            0
  21.  
  22.  
  23.  
  24.  
  25. // Connect/Disconnect:
  26. static int  usmc_probe      ( struct usb_interface * interface,
  27.                               const struct usb_device_id * id );
  28. static void usmc_disconnect ( struct usb_interface * interface );
  29. // File operations:
  30. static long usmc_ioctl   ( struct file * file, unsigned int ioctl_num, unsigned long ioctl_param );
  31. static int usmc_open    ( struct inode * inode, struct file * file );
  32. static int usmc_release ( struct inode * inode, struct file * file );
  33. // Util functions:
  34. static void usmc_delete ( struct kref * kref );
  35.  
  36.  
  37. static struct usb_device_id usmc_table [] = {
  38.         { USB_DEVICE ( USMC_VENDOR_ID, USMC_PRODUCT_ID ) },
  39.         {}              // Terminating element.
  40. };
  41.  
  42.  
  43. static struct usb_driver usmc_driver = {
  44.         .name       = USMC_DEV_NAME,
  45.         .probe      = usmc_probe,
  46.         .disconnect = usmc_disconnect,
  47.         .id_table   = usmc_table
  48. };
  49.  
  50.  
  51. /* Structure to hold all of our device specific stuff */
  52. struct usb_usmc
  53. {
  54.         struct usb_device    * udev;                    /* the usb device for this device */
  55.         struct usb_interface * interface;               /* the interface for this device */
  56.         struct semaphore       limit_sem;               /* limiting the number of writes in progress */
  57. //      unsigned char        * bulk_in_buffer;          /* the buffer to receive data */
  58. //      size_t                 bulk_in_size;            /* the size of the receive buffer */
  59. //      __u8                   bulk_in_endpointAddr;    /* the address of the bulk in endpoint */
  60. //      __u8                   bulk_out_endpointAddr;   /* the address of the bulk out endpoint */
  61.         struct kref            kref;
  62. };
  63.  
  64. #define to_usmc_dev(d) container_of(d, struct usb_usmc, kref)
  65.  
  66.  
  67. static struct file_operations usmc_fops = {
  68.         .owner   = THIS_MODULE,
  69. /*      .read    = usmc_read,
  70.         .write   = usmc_write,*/
  71.         .open    = usmc_open,
  72.         .release = usmc_release,
  73.         .unlocked_ioctl   = usmc_ioctl
  74. };
  75.  
  76. /*
  77. struct file_operations {
  78.         struct module *owner;
  79.         loff_t (*llseek) (struct file *, loff_t, int);
  80.         ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);
  81.         ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);
  82.         ssize_t (*aio_read) (struct kiocb *, const struct iovec *, unsigned long, loff_t);
  83.         ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t);
  84.         int (*readdir) (struct file *, void *, filldir_t);
  85.         unsigned int (*poll) (struct file *, struct poll_table_struct *);
  86.         long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
  87.    .....
  88. */
  89.  
  90.  
  91. /*
  92.  * usb class driver info in order to get a minor number from the usb core,
  93.  * and to have the device registered with the driver core
  94.  */
  95. static struct usb_class_driver usmc_class = {
  96.         .name =       "usmc%d",
  97.         .fops =       &usmc_fops,
  98.         .minor_base = USB_USMC_MINOR_BASE
  99. };
  100.