From 80f25d9ed6ea4af860f3127bad4cf43bbd258b5c Mon Sep 17 00:00:00 2001 From: markster Date: Tue, 6 Jan 2004 13:26:44 +0000 Subject: Clean build on Linux 2.6, will need lots of testing git-svn-id: http://svn.digium.com/svn/zaptel/trunk@292 5390a7c7-147a-4af0-8ec9-7488f05a26cb --- wcusb.c | 132 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 122 insertions(+), 10 deletions(-) (limited to 'wcusb.c') diff --git a/wcusb.c b/wcusb.c index 516a70c..7192070 100755 --- a/wcusb.c +++ b/wcusb.c @@ -54,6 +54,9 @@ #include "wcusb.h" #include "proslic.h" +#ifndef FILL_CONTROL_URB +#define FILL_CONTROL_URB usb_fill_control_urb +#endif #ifdef DEBUG_WILDCARD #define DPRINTK(x) printk x @@ -179,9 +182,15 @@ static int Wcusb_ReadWcRegs(struct usb_device *dev, unsigned char index, } #ifdef USB2420 +#ifdef LINUX26 +static int wcusb_async_read(struct wc_usb_pvt *p, unsigned char index, unsigned char *data, int len, int state, void (*complete)(struct urb *urb, struct pt_regs *regs)); +static int wcusb_async_write(struct wc_usb_pvt *p, unsigned char index, unsigned char *data, int len, int state, void (*complete)(struct urb *urb, struct pt_regs *regs)); +static void wcusb_async_control(struct urb *urb, struct pt_regs *regs); +#else static int wcusb_async_read(struct wc_usb_pvt *p, unsigned char index, unsigned char *data, int len, int state, void (*complete)(struct urb *urb)); static int wcusb_async_write(struct wc_usb_pvt *p, unsigned char index, unsigned char *data, int len, int state, void (*complete)(struct urb *urb)); static void wcusb_async_control(struct urb *urb); +#endif /* LINUX26 */ #else static int wcusb_async_read(struct wc_usb_pvt *p, unsigned char index, unsigned char *data, int len, int state, void (*complete)(urb_t *urb)); static int wcusb_async_write(struct wc_usb_pvt *p, unsigned char index, unsigned char *data, int len, int state, void (*complete)(urb_t *urb)); @@ -209,7 +218,11 @@ static void proslic_write_direct_async(struct wc_usb_pvt *p, unsigned char addre } #ifdef USB2420 +#ifdef LINUX26 +static void wcusb_async_control(struct urb *urb, struct pt_regs *regs) +#else static void wcusb_async_control(struct urb *urb) +#endif #else static void wcusb_async_control(urb_t *urb) #endif @@ -297,7 +310,11 @@ static void wcusb_async_control(urb_t *urb) } #ifdef USB2420 +#ifdef LINUX26 +static void keypad_check_done(struct urb *urb, struct pt_regs *regs) +#else static void keypad_check_done(struct urb *urb) +#endif #else static void keypad_check_done(urb_t *urb) #endif @@ -410,7 +427,11 @@ static void wcusb_check_interrupt(struct wc_usb_pvt *p) } #ifdef USB2420 +#ifdef LINUX26 +static int wcusb_async_read(struct wc_usb_pvt *p, unsigned char index, unsigned char *data, int len, int state, void (*complete)(struct urb *urb, struct pt_regs *regs)) +#else static int wcusb_async_read(struct wc_usb_pvt *p, unsigned char index, unsigned char *data, int len, int state, void (*complete)(struct urb *urb)) +#endif /* LINUX26 */ #else static int wcusb_async_read(struct wc_usb_pvt *p, unsigned char index, unsigned char *data, int len, int state, void (*complete)(urb_t *urb)) #endif @@ -438,7 +459,12 @@ static int wcusb_async_read(struct wc_usb_pvt *p, unsigned char index, unsigned #endif FILL_CONTROL_URB(urb, p->dev, usb_rcvctrlpipe(p->dev, 0), (unsigned char *)&p->dr, data, len, complete, p); - if (usb_submit_urb(urb)) { +#ifdef LINUX26 + if (usb_submit_urb(urb, GFP_KERNEL)) +#else + if (usb_submit_urb(urb)) +#endif + { printk("wcusb_async_read: control URB died\n"); p->timer = 50; return -1; @@ -449,7 +475,11 @@ static int wcusb_async_read(struct wc_usb_pvt *p, unsigned char index, unsigned } #ifdef USB2420 +#ifdef LINUX26 +static int wcusb_async_write(struct wc_usb_pvt *p, unsigned char index, unsigned char *data, int len, int state, void (*complete)(struct urb *urb, struct pt_regs *regs)) +#else static int wcusb_async_write(struct wc_usb_pvt *p, unsigned char index, unsigned char *data, int len, int state, void (*complete)(struct urb *urb)) +#endif /* LINUX26 */ #else static int wcusb_async_write(struct wc_usb_pvt *p, unsigned char index, unsigned char *data, int len, int state, void (*complete)(urb_t *urb)) #endif @@ -477,7 +507,12 @@ static int wcusb_async_write(struct wc_usb_pvt *p, unsigned char index, unsigned #endif FILL_CONTROL_URB(urb, p->dev, usb_sndctrlpipe(p->dev, 0), (unsigned char *)&p->dr, data, len, complete, p); - if (usb_submit_urb(urb)) { +#ifdef LINUX26 + if (usb_submit_urb(urb, GFP_KERNEL)) +#else + if (usb_submit_urb(urb)) +#endif + { printk("wcusb_async_write: control URB died\n"); return -1; } @@ -846,7 +881,11 @@ static char wc_dtmf(struct wc_usb_pvt *p) return ZT_LIN2MU(linsample); } +#ifdef LINUX26 +static void wcusb_read_complete(struct urb *q, struct pt_regs *regs) +#else static void wcusb_read_complete(struct urb *q) +#endif { struct wc_usb_pvt *p = q->context; short *chunk = q->transfer_buffer; @@ -877,7 +916,12 @@ static void wcusb_read_complete(struct urb *q) q->dev = p->dev; - if (usb_submit_urb(q)) { +#ifdef LINUX26 + if (usb_submit_urb(q, GFP_KERNEL)) +#else + if (usb_submit_urb(q)) +#endif + { printk("wcusb: Read cycle failed\n"); } @@ -903,7 +947,11 @@ static void wcusb_read_complete(struct urb *q) return; } +#ifdef LINUX26 +static void wcusb_write_complete(struct urb *q, struct pt_regs *regs) +#else static void wcusb_write_complete(struct urb *q) +#endif { struct wc_usb_pvt *p = q->context; short *chunk = q->transfer_buffer; @@ -921,7 +969,12 @@ static void wcusb_write_complete(struct urb *q) } q->dev = p->dev; - if (usb_submit_urb(q)) { +#ifdef LINUX26 + if (usb_submit_urb(q, GFP_KERNEL)) +#else + if (usb_submit_urb(q)) +#endif + { printk("wcusb: Write cycle failed\n"); } @@ -978,7 +1031,11 @@ static int prepare_transfer_urbs(struct wc_usb_pvt *p) for (x = 0; x < 2; x++) { p->dataread[x].urb.dev = p->dev; p->dataread[x].urb.pipe = readpipe; +#ifdef LINUX26 + p->dataread[x].urb.transfer_flags = URB_ISO_ASAP; +#else p->dataread[x].urb.transfer_flags = USB_ISO_ASAP; +#endif p->dataread[x].urb.number_of_packets = 1; p->dataread[x].urb.context = p; p->dataread[x].urb.complete = wcusb_read_complete; @@ -989,7 +1046,11 @@ static int prepare_transfer_urbs(struct wc_usb_pvt *p) p->datawrite[x].urb.dev = p->dev; p->datawrite[x].urb.pipe = writepipe; +#ifdef LINUX26 + p->datawrite[x].urb.transfer_flags = URB_ISO_ASAP; +#else p->datawrite[x].urb.transfer_flags = USB_ISO_ASAP; +#endif p->datawrite[x].urb.number_of_packets = 1; p->datawrite[x].urb.context = p; p->datawrite[x].urb.complete = wcusb_write_complete; @@ -1010,11 +1071,21 @@ static int begin_transfer(struct wc_usb_pvt *p) p->flags |= FLAG_RUNNING; for (x = 0; x < 2; x++) { - if (usb_submit_urb(&p->dataread[x].urb)) { +#ifdef LINUX26 + if (usb_submit_urb(&p->dataread[x].urb, GFP_KERNEL)) +#else + if (usb_submit_urb(&p->dataread[x].urb)) +#endif + { printk(KERN_ERR "wcusb: Read submit failed\n"); return -1; } - if (usb_submit_urb(&p->datawrite[x].urb)) { +#ifdef LINUX26 + if (usb_submit_urb(&p->datawrite[x].urb, GFP_KERNEL)) +#else + if (usb_submit_urb(&p->datawrite[x].urb)) +#endif + { printk(KERN_ERR "wcusb: Write submit failed\n"); return -1; } @@ -1091,7 +1162,9 @@ static int wc_usb_open(struct zt_chan *chan) default: break; } +#ifndef LINUX26 MOD_INC_USE_COUNT; +#endif p->usecount++; return 0; } @@ -1109,7 +1182,9 @@ static int wc_usb_close(struct zt_chan *chan) kfree(p->pvt_data); kfree(p); } +#ifndef LINUX26 MOD_DEC_USE_COUNT; +#endif return 0; } @@ -1202,10 +1277,17 @@ static int wc_set_zaptel(struct wc_usb_pvt *p) return 0; } +#ifdef LINUX26 +static int wc_usb_probe(struct usb_interface *intf, const struct usb_device_id *id) +#else static void *wc_usb_probe(struct usb_device *dev, unsigned int ifnum, const struct usb_device_id *id) +#endif { struct wc_usb_pvt *p = NULL; struct wc_usb_desc *d = (struct wc_usb_desc *)id->driver_info; +#ifdef LINUX26 + struct usb_device *dev = interface_to_usbdev(intf); +#endif int x; for (x=0;xconfig[0].bConfigurationValue) < 0) { printk("wcusb: set_configuration failed (ConfigValue 0x%x)\n", dev->config[0].bConfigurationValue); return NULL; } +#endif if (init_hardware(p)) { printk("wcusb: Hardware intialization failed.\n"); @@ -1269,7 +1357,12 @@ static void *wc_usb_probe(struct usb_device *dev, unsigned int ifnum, const stru /* Clear alarms */ p->span.alarms = 0; zt_alarm_notify(&p->span); +#ifdef LINUX26 + usb_set_intfdata(intf, p); + return 0; +#else return p; +#endif cleanup: printk("cleanup\n"); @@ -1279,14 +1372,26 @@ cleanup: } kfree(p); } +#ifdef LINUX26 + return -ENODEV; +#else return NULL; +#endif } +#ifdef LINUX26 +static void wc_usb_disconnect(struct usb_interface *intf) +#else static void wc_usb_disconnect(struct usb_device *dev, void *ptr) +#endif { /* Doesn't handle removal if we're in use right */ +#ifdef LINUX26 + struct wc_usb_pvt *p = usb_get_intfdata(intf); +#else struct wc_usb_pvt *p = ptr; - if (ptr) { +#endif + if (p) { StopTransmit(p); p->dev = NULL; if (!p->usecount) { @@ -1294,7 +1399,7 @@ static void wc_usb_disconnect(struct usb_device *dev, void *ptr) if (p->pvt_data) kfree(p->pvt_data); ifaces[p->pos] = NULL; - kfree(ptr); + kfree(p); } else { /* Generate alarm and note that we're dead */ p->span.alarms = ZT_ALARM_RED; @@ -1303,6 +1408,9 @@ static void wc_usb_disconnect(struct usb_device *dev, void *ptr) } } printk("wcusb: Removed a Wildcard device\n"); +#ifdef LINUX26 + usb_set_intfdata(intf, NULL); +#endif return; } @@ -1337,11 +1445,15 @@ static struct usb_device_id wc_dev_ids[] = { static struct usb_driver wc_usb_driver = { +#ifdef LINUX26 + owner: THIS_MODULE, +#else + fops: NULL, + minor: 0, +#endif name: "wcusb", probe: wc_usb_probe, disconnect: wc_usb_disconnect, - fops: NULL, - minor: 0, id_table: wc_dev_ids, }; -- cgit v1.2.3