Update of /cvsroot/alsa/alsa-driver/usb In directory sc8-pr-cvs1:/tmp/cvs-serv13829/usb
Modified Files: Makefile usbaudio.c Added Files: usbcompat.c Log Message: USB - fixed compilation trouble for 2.2 kernels. --- NEW FILE: usbcompat.c --- #define __NO_VERSION__ #include <linux/config.h> #include <linux/version.h> #if defined(CONFIG_MODVERSIONS) && !defined(__GENKSYMS__) && !defined(__DEPEND__) #define MODVERSIONS #include <linux/modversions.h> #endif #include <linux/module.h> #include <linux/usb.h> #if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0) struct snd_compat_usb_device_id { __u16 match_flags; __u16 idVendor; __u16 idProduct; __u16 bcdDevice_lo, bcdDevice_hi; __u8 bDeviceClass; __u8 bDeviceSubClass; __u8 bDeviceProtocol; __u8 bInterfaceClass; __u8 bInterfaceSubClass; __u8 bInterfaceProtocol; unsigned long driver_info; }; struct usb_device; struct usb_interface; struct snd_compat_usb_driver { const char *name; void *(*probe)(struct usb_device *dev, unsigned intf, const struct snd_compat_usb_device_id *id); void (*disconnect)(struct usb_device *, void *); struct list_head driver_list; const struct snd_compat_usb_device_id *id_table; }; int snd_compat_usb_register(struct snd_compat_usb_driver *); void snd_compat_usb_deregister(struct snd_compat_usb_driver *); void snd_compat_usb_driver_claim_interface(struct snd_compat_usb_driver *, struct usb_interface *iface, void *ptr); #define USB_DEVICE_ID_MATCH_VENDOR 0x0001 #define USB_DEVICE_ID_MATCH_PRODUCT 0x0002 #define USB_DEVICE_ID_MATCH_DEV_LO 0x0004 #define USB_DEVICE_ID_MATCH_DEV_HI 0x0008 #define USB_DEVICE_ID_MATCH_DEV_CLASS 0x0010 #define USB_DEVICE_ID_MATCH_DEV_SUBCLASS 0x0020 #define USB_DEVICE_ID_MATCH_DEV_PROTOCOL 0x0040 #define USB_DEVICE_ID_MATCH_INT_CLASS 0x0080 #define USB_DEVICE_ID_MATCH_INT_SUBCLASS 0x0100 #define USB_DEVICE_ID_MATCH_INT_PROTOCOL 0x0200 #define USB_DEVICE_ID_MATCH_DEVICE (USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_PRODUCT) #define USB_DEVICE_ID_MATCH_DEV_RANGE (USB_DEVICE_ID_MATCH_DEV_LO | USB_DEVICE_ID_MATCH_DEV_HI) #define USB_DEVICE_ID_MATCH_DEVICE_AND_VERSION (USB_DEVICE_ID_MATCH_DEVICE | USB_DEVICE_ID_MATCH_DEV_RANGE) #define USB_DEVICE_ID_MATCH_DEV_INFO \ (USB_DEVICE_ID_MATCH_DEV_CLASS | USB_DEVICE_ID_MATCH_DEV_SUBCLASS | USB_DEVICE_ID_MATCH_DEV_PROTOCOL) #define USB_DEVICE_ID_MATCH_INT_INFO \ (USB_DEVICE_ID_MATCH_INT_CLASS | USB_DEVICE_ID_MATCH_INT_SUBCLASS | USB_DEVICE_ID_MATCH_INT_PROTOCOL) /* Some useful macros */ #define USB_DEVICE(vend,prod) \ match_flags: USB_DEVICE_ID_MATCH_DEVICE, idVendor: (vend), idProduct: (prod) #define USB_DEVICE_VER(vend,prod,lo,hi) \ match_flags: USB_DEVICE_ID_MATCH_DEVICE_AND_VERSION, idVendor: (vend), idProduct: (prod), bcdDevice_lo: (lo), bcdDevice_hi: (hi) #define USB_DEVICE_INFO(cl,sc,pr) \ match_flags: USB_DEVICE_ID_MATCH_DEV_INFO, bDeviceClass: (cl), bDeviceSubClass: (sc), bDeviceProtocol: (pr) #define USB_INTERFACE_INFO(cl,sc,pr) \ match_flags: USB_DEVICE_ID_MATCH_INT_INFO, bInterfaceClass: (cl), bInterfaceSubClass: (sc), bInterfaceProtocol: (pr) #define MAX_USB_DRIVERS 5 struct snd_usb_reg_table { struct usb_driver driver; struct snd_compat_usb_driver *orig; }; static struct snd_usb_reg_table my_usb_drivers[MAX_USB_DRIVERS]; static void *snd_usb_compat_probe(struct usb_device *dev, unsigned int ifnum) { struct usb_config_descriptor *config = dev->actconfig; struct snd_compat_usb_driver *p; struct usb_interface_descriptor *alts = config->interface[ifnum].altsetting; const struct snd_compat_usb_device_id *tbl; struct snd_compat_usb_device_id id; int i; for (i = 0; i < MAX_USB_DRIVERS; i++) { if (! (p = my_usb_drivers[i].orig)) continue; for (tbl = p->id_table; tbl->match_flags; tbl++) { /* we are too lazy to check all entries... */ if ((tbl->match_flags & USB_DEVICE_ID_MATCH_VENDOR) && tbl->idVendor != dev->descriptor.idVendor) return NULL; if ((tbl->match_flags & USB_DEVICE_ID_MATCH_PRODUCT) && tbl->idProduct != dev->descriptor.idProduct) return NULL; if ((tbl->match_flags & USB_DEVICE_ID_MATCH_INT_CLASS) && tbl->bInterfaceClass != alts->bInterfaceClass) return NULL; if ((tbl->match_flags & USB_DEVICE_ID_MATCH_INT_SUBCLASS) && tbl->bInterfaceSubClass != alts->bInterfaceSubClass) return NULL; } id = *tbl; id.idVendor = dev->descriptor.idVendor; id.idProduct = dev->descriptor.idProduct; id.bInterfaceClass = alts->bInterfaceClass; id.bInterfaceSubClass = alts->bInterfaceSubClass; return p->probe(dev, ifnum, &id); } return NULL; } int snd_compat_usb_register(struct snd_compat_usb_driver *driver) { int i; struct usb_driver *drv; for (i = 0; i < MAX_USB_DRIVERS; i++) { if (! my_usb_drivers[i].orig) break; } if (i >= MAX_USB_DRIVERS) return -ENOMEM; my_usb_drivers[i].orig = driver; drv = &my_usb_drivers[i].driver; drv->name = driver->name; drv->probe = snd_usb_compat_probe; drv->disconnect = driver->disconnect; INIT_LIST_HEAD(&drv->driver_list); usb_register(drv); return 0; } static struct snd_usb_reg_table *find_matching_usb_driver(struct snd_compat_usb_driver *driver) { int i; for (i = 0; i < MAX_USB_DRIVERS; i++) { if (my_usb_drivers[i].orig == driver) return &my_usb_drivers[i]; } return NULL; } void snd_compat_usb_deregister(struct snd_compat_usb_driver *driver) { struct snd_usb_reg_table *tbl; if ((tbl = find_matching_usb_driver(driver)) != NULL) tbl->orig = NULL; } void snd_compat_usb_driver_claim_interface(struct snd_compat_usb_driver *driver, struct usb_interface *iface, void *ptr) { struct snd_usb_reg_table *tbl; if ((tbl = find_matching_usb_driver(driver)) != NULL) usb_driver_claim_interface(&tbl->driver, iface, ptr); } #endif /* LINUX_VERSION < 2.3.0 */ /* * symbols */ EXPORT_NO_SYMBOLS; Index: Makefile =================================================================== RCS file: /cvsroot/alsa/alsa-driver/usb/Makefile,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- Makefile 17 Dec 2002 19:59:03 -0000 1.6 +++ Makefile 8 Mar 2003 14:23:04 -0000 1.7 @@ -5,8 +5,8 @@ TOPDIR = $(MAINSRCDIR) -# for compatibility wrappers -export-objs := usbaudio.o +# for compatibility +extra-snd-usb-audio-objs := usbcompat.o include $(TOPDIR)/alsa-kernel/usb/Makefile Index: usbaudio.c =================================================================== RCS file: /cvsroot/alsa/alsa-driver/usb/usbaudio.c,v retrieving revision 1.23 retrieving revision 1.24 diff -u -r1.23 -r1.24 --- usbaudio.c 21 Jan 2003 09:55:20 -0000 1.23 +++ usbaudio.c 8 Mar 2003 14:23:04 -0000 1.24 @@ -114,109 +114,6 @@ #endif /* LINUX_VERSION < 2.5.24 */ -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0) -/* - * 2.2 compatible layer - */ -#undef usb_driver -#undef usb_device_id -#undef usb_register -#undef usb_deregister -#undef usb_driver_claim_interface - -#define MAX_USB_DRIVERS 5 -struct snd_usb_reg_table { - struct usb_driver driver; - struct snd_compat_usb_driver *orig; -}; - -static struct snd_usb_reg_table my_usb_drivers[MAX_USB_DRIVERS]; - -static void *snd_usb_compat_probe(struct usb_device *dev, unsigned int ifnum) -{ - struct usb_config_descriptor *config = dev->actconfig; - struct snd_compat_usb_driver *p; - struct usb_interface_descriptor *alts = config->interface[ifnum].altsetting; - const struct snd_compat_usb_device_id *tbl; - struct snd_compat_usb_device_id id; - int i; - - for (i = 0; i < MAX_USB_DRIVERS; i++) { - if (! (p = my_usb_drivers[i].orig)) - continue; - for (tbl = p->id_table; tbl->match_flags; tbl++) { - /* we are too lazy to check all entries... */ - if ((tbl->match_flags & USB_DEVICE_ID_MATCH_VENDOR) && - tbl->idVendor != dev->descriptor.idVendor) - return NULL; - if ((tbl->match_flags & USB_DEVICE_ID_MATCH_PRODUCT) && - tbl->idProduct != dev->descriptor.idProduct) - return NULL; - if ((tbl->match_flags & USB_DEVICE_ID_MATCH_INT_CLASS) && - tbl->bInterfaceClass != alts->bInterfaceClass) - return NULL; - if ((tbl->match_flags & USB_DEVICE_ID_MATCH_INT_SUBCLASS) && - tbl->bInterfaceSubClass != alts->bInterfaceSubClass) - return NULL; - } - id = *tbl; - id.idVendor = dev->descriptor.idVendor; - id.idProduct = dev->descriptor.idProduct; - id.bInterfaceClass = alts->bInterfaceClass; - id.bInterfaceSubClass = alts->bInterfaceSubClass; - return p->probe(dev, ifnum, &id); - } - return NULL; -} - -int snd_compat_usb_register(struct snd_compat_usb_driver *driver) -{ - int i; - struct usb_driver *drv; - - for (i = 0; i < MAX_USB_DRIVERS; i++) { - if (! my_usb_drivers[i].orig) - break; - } - if (i >= MAX_USB_DRIVERS) - return -ENOMEM; - my_usb_drivers[i].orig = driver; - drv = &my_usb_drivers[i].driver; - drv->name = driver->name; - drv->probe = snd_usb_compat_probe; - drv->disconnect = driver->disconnect; - INIT_LIST_HEAD(&drv->driver_list); - usb_register(drv); - return 0; -} - -static struct snd_usb_reg_table *find_matching_usb_driver(struct snd_compat_usb_driver *driver) -{ - int i; - for (i = 0; i < MAX_USB_DRIVERS; i++) { - if (my_usb_drivers[i].orig == driver) - return &my_usb_drivers[i]; - } - return NULL; -} - -void snd_compat_usb_deregister(struct snd_compat_usb_driver *driver) -{ - struct snd_usb_reg_table *tbl; - if ((tbl = find_matching_usb_driver(driver)) != NULL) - tbl->orig = NULL; -} - -void snd_compat_usb_driver_claim_interface(struct snd_compat_usb_driver *driver, struct usb_interface *iface, void *ptr) -{ - struct snd_usb_reg_table *tbl; - if ((tbl = find_matching_usb_driver(driver)) != NULL) - usb_driver_claim_interface(&tbl->driver, iface, ptr); -} - -#endif /* LINUX_VERSION < 2.3.0 */ - - /* * symbols */ ------------------------------------------------------- This SF.net email is sponsored by: Etnus, makers of TotalView, The debugger for complex code. Debugging C/C++ programs can leave you feeling lost and disoriented. TotalView can help you find your way. Available on major UNIX and Linux platforms. Try it free. www.etnus.com _______________________________________________ Alsa-cvslog mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/alsa-cvslog