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