vserver 1.9.5.x5
[linux-2.6.git] / drivers / telephony / ixj.c
index 1d0a2e1..210b0b1 100644 (file)
@@ -285,7 +285,7 @@ static int ixjdebug;
 static int hertz = HZ;
 static int samplerate = 100;
 
-MODULE_PARM(ixjdebug, "i");
+module_param(ixjdebug, int, 0);
 
 /************************************************************************
 *
@@ -406,14 +406,10 @@ static int Stub(IXJ * J, unsigned long arg)
        return 0;
 }
 
-static IXJ_REGFUNC ixj_DownloadG729 = &Stub;
-static IXJ_REGFUNC ixj_DownloadTS85 = &Stub;
 static IXJ_REGFUNC ixj_PreRead = &Stub;
 static IXJ_REGFUNC ixj_PostRead = &Stub;
 static IXJ_REGFUNC ixj_PreWrite = &Stub;
 static IXJ_REGFUNC ixj_PostWrite = &Stub;
-static IXJ_REGFUNC ixj_PreIoctl = &Stub;
-static IXJ_REGFUNC ixj_PostIoctl = &Stub;
 
 static void ixj_read_frame(IXJ *j);
 static void ixj_write_frame(IXJ *j);
@@ -792,97 +788,6 @@ static int ixj_wink(IXJ *j)
        return 0;
 }
 
-static int ixj_register(int index, IXJ_REGFUNC regfunc)
-{
-       int cnt;
-       int retval = 0;
-       switch (index) {
-       case G729LOADER:
-               ixj_DownloadG729 = regfunc;
-               for (cnt = 0; cnt < IXJMAX; cnt++) {
-                       IXJ *j = get_ixj(cnt);
-                       while(test_and_set_bit(cnt, (void *)&j->busyflags) != 0) {
-                               set_current_state(TASK_INTERRUPTIBLE);
-                               schedule_timeout(1);
-                       }
-                       ixj_DownloadG729(j, 0L);
-                       clear_bit(cnt, &j->busyflags);
-               }
-               break;
-       case TS85LOADER:
-               ixj_DownloadTS85 = regfunc;
-               for (cnt = 0; cnt < IXJMAX; cnt++) {
-                       IXJ *j = get_ixj(cnt);
-                       while(test_and_set_bit(cnt, (void *)&j->busyflags) != 0) {
-                               set_current_state(TASK_INTERRUPTIBLE);
-                               schedule_timeout(1);
-                       }
-                       ixj_DownloadTS85(j, 0L);
-                       clear_bit(cnt, &j->busyflags);
-               }
-               break;
-       case PRE_READ:
-               ixj_PreRead = regfunc;
-               break;
-       case POST_READ:
-               ixj_PostRead = regfunc;
-               break;
-       case PRE_WRITE:
-               ixj_PreWrite = regfunc;
-               break;
-       case POST_WRITE:
-               ixj_PostWrite = regfunc;
-               break;
-       case PRE_IOCTL:
-               ixj_PreIoctl = regfunc;
-               break;
-       case POST_IOCTL:
-               ixj_PostIoctl = regfunc;
-               break;
-       default:
-               retval = 1;
-       }
-       return retval;
-}
-
-EXPORT_SYMBOL(ixj_register);
-
-static int ixj_unregister(int index)
-{
-       int retval = 0;
-       switch (index) {
-       case G729LOADER:
-               ixj_DownloadG729 = &Stub;
-               break;
-       case TS85LOADER:
-               ixj_DownloadTS85 = &Stub;
-               break;
-       case PRE_READ:
-               ixj_PreRead = &Stub;
-               break;
-       case POST_READ:
-               ixj_PostRead = &Stub;
-               break;
-       case PRE_WRITE:
-               ixj_PreWrite = &Stub;
-               break;
-       case POST_WRITE:
-               ixj_PostWrite = &Stub;
-               break;
-       case PRE_IOCTL:
-               ixj_PreIoctl = &Stub;
-               break;
-       case POST_IOCTL:
-               ixj_PostIoctl = &Stub;
-               break;
-       default:
-               retval = 1;
-       }
-       return retval;
-}
-
-EXPORT_SYMBOL(ixj_unregister);
-
 static void ixj_init_timer(IXJ *j)
 {
        init_timer(&j->timer);
@@ -2257,7 +2162,7 @@ static int ixj_open(struct phone_device *p, struct file *file_p)
        return 0;
 }
 
-int ixj_release(struct inode *inode, struct file *file_p)
+static int ixj_release(struct inode *inode, struct file *file_p)
 {
        IXJ_TONE ti;
        int cnt;
@@ -6785,7 +6690,7 @@ static int ixj_fasync(int fd, struct file *file_p, int mode)
        return fasync_helper(fd, file_p, mode, &j->async_queue);
 }
 
-struct file_operations ixj_fops =
+static struct file_operations ixj_fops =
 {
         .owner          = THIS_MODULE,
         .read           = ixj_enhanced_read,
@@ -7707,8 +7612,8 @@ static int xio[IXJMAX + 1] =
        0,
 };
 
-MODULE_PARM(dspio, "1-" __MODULE_STRING(IXJMAX) "i");
-MODULE_PARM(xio, "1-" __MODULE_STRING(IXJMAX) "i");
+module_param_array(dspio, int, NULL, 0);
+module_param_array(xio, int, NULL, 0);
 MODULE_DESCRIPTION("Quicknet VoIP Telephony card module - www.quicknet.net");
 MODULE_AUTHOR("Ed Okerson <eokerson@quicknet.net>");
 MODULE_LICENSE("GPL");
@@ -7718,7 +7623,24 @@ static void __exit ixj_exit(void)
         cleanup();
 }
 
-int __init ixj_probe_isapnp(int *cnt)
+static IXJ *new_ixj(unsigned long port)
+{
+       IXJ *res;
+       if (!request_region(port, 16, "ixj DSP")) {
+               printk(KERN_INFO "ixj: can't get I/O address 0x%lx\n", port);
+               return NULL;
+       }
+       res = ixj_alloc();
+       if (!res) {
+               release_region(port, 16);
+               printk(KERN_INFO "ixj: out of memory\n");
+               return NULL;
+       }
+       res->DSPbase = port;
+       return res;
+}
+
+static int __init ixj_probe_isapnp(int *cnt)
 {               
        int probe = 0;
        int func = 0x110;
@@ -7750,15 +7672,9 @@ int __init ixj_probe_isapnp(int *cnt)
                                return -ENODEV;
                        }
 
-                       result = check_region(pnp_port_start(dev, 0), 16);
-                       if (result) {
-                               printk(KERN_INFO "ixj: can't get I/O address 0x%lx\n", pnp_port_start(dev, 0));
+                       j = new_ixj(pnp_port_start(dev, 0));
+                       if (!j)
                                break;
-                       }
-
-                       j = ixj_alloc();
-                       j->DSPbase = pnp_port_start(dev,0);
-                       request_region(j->DSPbase, 16, "ixj DSP");
 
                        if (func != 0x110)
                                j->XILINXbase = pnp_port_start(dev, 1); /* get real port */
@@ -7804,24 +7720,17 @@ int __init ixj_probe_isapnp(int *cnt)
        return probe;
 }
                         
-int __init ixj_probe_isa(int *cnt)
+static int __init ixj_probe_isa(int *cnt)
 {
-       int i, result, probe;
+       int i, probe;
 
        /* Use passed parameters for older kernels without PnP */
        for (i = 0; i < IXJMAX; i++) {
                if (dspio[i]) {
-                       IXJ *j;
+                       IXJ *j = new_ixj(dspio[i]);
 
-                       if ((result = check_region(ixj[*cnt].DSPbase, 16)) < 0) {
-                               printk(KERN_INFO "ixj: can't get I/O address 0x%x\n", ixj[*cnt].DSPbase);
+                       if (!j)
                                break;
-                       }
-
-                       j = ixj_alloc();
-
-                       j->DSPbase = dspio[i];
-                       request_region(j->DSPbase, 16, "ixj DSP");
 
                        j->XILINXbase = xio[i];
                        j->cardtype = 0;
@@ -7835,12 +7744,11 @@ int __init ixj_probe_isa(int *cnt)
        return 0;
 }
 
-int __init ixj_probe_pci(int *cnt)
+static int __init ixj_probe_pci(int *cnt)
 {
        struct pci_dev *pci = NULL;   
        int i, probe = 0;
        IXJ *j = NULL;
-       int result;
 
        for (i = 0; i < IXJMAX - *cnt; i++) {
                pci = pci_find_device(0x15E2, 0x0500, pci);
@@ -7849,20 +7757,12 @@ int __init ixj_probe_pci(int *cnt)
 
                if (pci_enable_device(pci))
                        break;
-               if ((result = check_region(pci_resource_start(pci, 0), 16)) < 0) {
-                       printk(KERN_INFO "ixj: can't get I/O address\n");
+               j = new_ixj(pci_resource_start(pci, 0));
+               if (!j)
                        break;
-               }
 
-               /* Grab a device slot */        
-               j = ixj_alloc();
-               if(j == NULL)
-                       break;
-       
-               j->DSPbase = pci_resource_start(pci, 0);
                j->serial = (PCIEE_GetSerialNumber)pci_resource_start(pci, 2);
                j->XILINXbase = j->DSPbase + 0x10;
-               request_region(j->DSPbase, 16, "ixj DSP");
                j->cardtype = QTI_PHONEJACK_PCI;
                j->board = *cnt;
                probe = ixj_selfprobe(j);