summaryrefslogtreecommitdiff
path: root/wcusb.c
diff options
context:
space:
mode:
authormarkster <markster@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2004-01-06 13:26:44 +0000
committermarkster <markster@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2004-01-06 13:26:44 +0000
commit80f25d9ed6ea4af860f3127bad4cf43bbd258b5c (patch)
tree09a511f55802af71ff92d3f846198a03b1dbd534 /wcusb.c
parentabf800fc845ce8736704cbe769f831b73700fa04 (diff)
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
Diffstat (limited to 'wcusb.c')
-rwxr-xr-xwcusb.c132
1 files changed, 122 insertions, 10 deletions
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;x<WC_MAX_IFACES;x++) {
@@ -1227,13 +1309,19 @@ static void *wc_usb_probe(struct usb_device *dev, unsigned int ifnum, const stru
if (!(p = wc_detect_device(dev, p))) {
printk("wcusb: No wcusb devices found\n");
+#ifdef LINUX26
+ return -ENODEV;
+#else
return NULL;
+#endif
}
+#ifndef LINUX26
if (usb_set_configuration(dev, dev->config[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,
};