X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Ftelephony%2Fixj.c;h=df4cc1fb5f68df840bfe9382a151862598046343;hb=97bf2856c6014879bd04983a3e9dfcdac1e7fe85;hp=1d0a2e1a7f77a4fd718bbce871a821b05dfa50d8;hpb=9bf4aaab3e101692164d49b7ca357651eb691cb6;p=linux-2.6.git diff --git a/drivers/telephony/ixj.c b/drivers/telephony/ixj.c index 1d0a2e1a7..df4cc1fb5 100644 --- a/drivers/telephony/ixj.c +++ b/drivers/telephony/ixj.c @@ -41,9 +41,6 @@ * ***************************************************************************/ -static char ixj_c_rcsid[] = "$Id: ixj.c,v 4.7 2001/08/13 06:19:33 craigs Exp $"; -static char ixj_c_revision[] = "$Revision: 4.7 $"; - /* * $Log: ixj.c,v $ * @@ -285,7 +282,15 @@ static int ixjdebug; static int hertz = HZ; static int samplerate = 100; -MODULE_PARM(ixjdebug, "i"); +module_param(ixjdebug, int, 0); + +static struct pci_device_id ixj_pci_tbl[] __devinitdata = { + { PCI_VENDOR_ID_QUICKNET, PCI_DEVICE_ID_QUICKNET_XJ, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, + { } +}; + +MODULE_DEVICE_TABLE(pci, ixj_pci_tbl); /************************************************************************ * @@ -332,10 +337,8 @@ static IXJ *ixj_alloc() static void ixj_fsk_free(IXJ *j) { - if(j->fskdata != NULL) { - kfree(j->fskdata); - j->fskdata = NULL; - } + kfree(j->fskdata); + j->fskdata = NULL; } static void ixj_fsk_alloc(IXJ *j) @@ -406,14 +409,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); @@ -783,106 +782,12 @@ static int ixj_wink(IXJ *j) j->pots_winkstart = jiffies; SLIC_SetState(PLD_SLIC_STATE_OC, j); - while (time_before(jiffies, j->pots_winkstart + j->winktime)) { - set_current_state(TASK_INTERRUPTIBLE); - schedule_timeout(1); - } + msleep(jiffies_to_msecs(j->winktime)); SLIC_SetState(slicnow, 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); @@ -2012,7 +1917,6 @@ static int ixj_pcmcia_cable_check(IXJ *j) static int ixj_hookstate(IXJ *j) { - unsigned long det; int fOffHook = 0; switch (j->cardtype) { @@ -2043,11 +1947,7 @@ static int ixj_hookstate(IXJ *j) j->pld_slicr.bits.state == PLD_SLIC_STATE_STANDBY) { if (j->flags.ringing || j->flags.cringing) { if (!in_interrupt()) { - det = jiffies + (hertz / 50); - while (time_before(jiffies, det)) { - set_current_state(TASK_INTERRUPTIBLE); - schedule_timeout(1); - } + msleep(20); } SLIC_GetState(j); if (j->pld_slicr.bits.state == PLD_SLIC_STATE_RINGING) { @@ -2162,7 +2062,7 @@ static void ixj_ring_start(IXJ *j) static int ixj_ring(IXJ *j) { char cntr; - unsigned long jif, det; + unsigned long jif; j->flags.ringing = 1; if (ixj_hookstate(j) & 1) { @@ -2170,7 +2070,6 @@ static int ixj_ring(IXJ *j) j->flags.ringing = 0; return 1; } - det = 0; for (cntr = 0; cntr < j->maxrings; cntr++) { jif = jiffies + (1 * hertz); ixj_ring_on(j); @@ -2180,8 +2079,7 @@ static int ixj_ring(IXJ *j) j->flags.ringing = 0; return 1; } - set_current_state(TASK_INTERRUPTIBLE); - schedule_timeout(1); + schedule_timeout_interruptible(1); if (signal_pending(current)) break; } @@ -2189,20 +2087,13 @@ static int ixj_ring(IXJ *j) ixj_ring_off(j); while (time_before(jiffies, jif)) { if (ixj_hookstate(j) & 1) { - det = jiffies + (hertz / 100); - while (time_before(jiffies, det)) { - set_current_state(TASK_INTERRUPTIBLE); - schedule_timeout(1); - if (signal_pending(current)) - break; - } + msleep(10); if (ixj_hookstate(j) & 1) { j->flags.ringing = 0; return 1; } } - set_current_state(TASK_INTERRUPTIBLE); - schedule_timeout(1); + schedule_timeout_interruptible(1); if (signal_pending(current)) break; } @@ -2257,7 +2148,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; @@ -2268,10 +2159,8 @@ int ixj_release(struct inode *inode, struct file *file_p) * Set up locks to ensure that only one process is talking to the DSP at a time. * This is necessary to keep the DSP from locking up. */ - while(test_and_set_bit(board, (void *)&j->busyflags) != 0) { - set_current_state(TASK_INTERRUPTIBLE); - schedule_timeout(1); - } + while(test_and_set_bit(board, (void *)&j->busyflags) != 0) + schedule_timeout_interruptible(1); if (ixjdebug & 0x0002) printk(KERN_INFO "Closing board %d\n", NUM(inode)); @@ -2858,7 +2747,7 @@ static void alaw2ulaw(unsigned char *buff, unsigned long len) static ssize_t ixj_read(struct file * file_p, char __user *buf, size_t length, loff_t * ppos) { unsigned long i = *ppos; - IXJ * j = get_ixj(NUM(file_p->f_dentry->d_inode)); + IXJ * j = get_ixj(NUM(file_p->f_path.dentry->d_inode)); DECLARE_WAITQUEUE(wait, current); @@ -2915,7 +2804,7 @@ static ssize_t ixj_enhanced_read(struct file * file_p, char __user *buf, size_t { int pre_retval; ssize_t read_retval = 0; - IXJ *j = get_ixj(NUM(file_p->f_dentry->d_inode)); + IXJ *j = get_ixj(NUM(file_p->f_path.dentry->d_inode)); pre_retval = ixj_PreRead(j, 0L); switch (pre_retval) { @@ -2994,7 +2883,7 @@ static ssize_t ixj_enhanced_write(struct file * file_p, const char __user *buf, int pre_retval; ssize_t write_retval = 0; - IXJ *j = get_ixj(NUM(file_p->f_dentry->d_inode)); + IXJ *j = get_ixj(NUM(file_p->f_path.dentry->d_inode)); pre_retval = ixj_PreWrite(j, 0L); switch (pre_retval) { @@ -3401,14 +3290,10 @@ static void ixj_write_cidcw(IXJ *j) ixj_play_tone(j, 23); clear_bit(j->board, &j->busyflags); - while(j->tone_state) { - set_current_state(TASK_INTERRUPTIBLE); - schedule_timeout(1); - } - while(test_and_set_bit(j->board, (void *)&j->busyflags) != 0) { - set_current_state(TASK_INTERRUPTIBLE); - schedule_timeout(1); - } + while(j->tone_state) + schedule_timeout_interruptible(1); + while(test_and_set_bit(j->board, (void *)&j->busyflags) != 0) + schedule_timeout_interruptible(1); if(ixjdebug & 0x0200) { printk("IXJ cidcw phone%d first tone end at %ld\n", j->board, jiffies); } @@ -3428,14 +3313,10 @@ static void ixj_write_cidcw(IXJ *j) ixj_play_tone(j, 24); clear_bit(j->board, &j->busyflags); - while(j->tone_state) { - set_current_state(TASK_INTERRUPTIBLE); - schedule_timeout(1); - } - while(test_and_set_bit(j->board, (void *)&j->busyflags) != 0) { - set_current_state(TASK_INTERRUPTIBLE); - schedule_timeout(1); - } + while(j->tone_state) + schedule_timeout_interruptible(1); + while(test_and_set_bit(j->board, (void *)&j->busyflags) != 0) + schedule_timeout_interruptible(1); if(ixjdebug & 0x0200) { printk("IXJ cidcw phone%d sent second tone at %ld\n", j->board, jiffies); } @@ -3443,14 +3324,10 @@ static void ixj_write_cidcw(IXJ *j) j->cidcw_wait = jiffies + ((50 * hertz) / 100); clear_bit(j->board, &j->busyflags); - while(!j->flags.cidcw_ack && time_before(jiffies, j->cidcw_wait)) { - set_current_state(TASK_INTERRUPTIBLE); - schedule_timeout(1); - } - while(test_and_set_bit(j->board, (void *)&j->busyflags) != 0) { - set_current_state(TASK_INTERRUPTIBLE); - schedule_timeout(1); - } + while(!j->flags.cidcw_ack && time_before(jiffies, j->cidcw_wait)) + schedule_timeout_interruptible(1); + while(test_and_set_bit(j->board, (void *)&j->busyflags) != 0) + schedule_timeout_interruptible(1); j->cidcw_wait = 0; if(!j->flags.cidcw_ack) { if(ixjdebug & 0x0200) { @@ -3689,10 +3566,16 @@ static void ixj_write_frame(IXJ *j) } /* Add word 0 to G.729 frames for the 8021. Right now we don't do VAD/CNG */ if (j->play_codec == G729 && (cnt == 0 || cnt == 10 || cnt == 20)) { - if(j->write_buffer_rp + cnt == 0 && j->write_buffer_rp + cnt + 1 == 0 && j->write_buffer_rp + cnt + 2 == 0 && - j->write_buffer_rp + cnt + 3 == 0 && j->write_buffer_rp + cnt + 4 == 0 && j->write_buffer_rp + cnt + 5 == 0 && - j->write_buffer_rp + cnt + 6 == 0 && j->write_buffer_rp + cnt + 7 == 0 && j->write_buffer_rp + cnt + 8 == 0 && - j->write_buffer_rp + cnt + 9 == 0) { + if (j->write_buffer_rp[cnt] == 0 && + j->write_buffer_rp[cnt + 1] == 0 && + j->write_buffer_rp[cnt + 2] == 0 && + j->write_buffer_rp[cnt + 3] == 0 && + j->write_buffer_rp[cnt + 4] == 0 && + j->write_buffer_rp[cnt + 5] == 0 && + j->write_buffer_rp[cnt + 6] == 0 && + j->write_buffer_rp[cnt + 7] == 0 && + j->write_buffer_rp[cnt + 8] == 0 && + j->write_buffer_rp[cnt + 9] == 0) { /* someone is trying to write silence lets make this a type 0 frame. */ outb_p(0x00, j->DSPbase + 0x0C); outb_p(0x00, j->DSPbase + 0x0D); @@ -3965,13 +3848,11 @@ static int set_rec_codec(IXJ *j, int rate) j->rec_mode = 7; break; default: + kfree(j->read_buffer); j->rec_frame_size = 0; j->rec_mode = -1; - if (j->read_buffer) { - kfree(j->read_buffer); - j->read_buffer = NULL; - j->read_buffer_size = 0; - } + j->read_buffer = NULL; + j->read_buffer_size = 0; retval = 1; break; } @@ -4089,14 +3970,12 @@ static int ixj_record_start(IXJ *j) static void ixj_record_stop(IXJ *j) { - if(ixjdebug & 0x0002) + if (ixjdebug & 0x0002) printk("IXJ %d Stopping Record Codec %d at %ld\n", j->board, j->rec_codec, jiffies); - if (j->read_buffer) { - kfree(j->read_buffer); - j->read_buffer = NULL; - j->read_buffer_size = 0; - } + kfree(j->read_buffer); + j->read_buffer = NULL; + j->read_buffer_size = 0; if (j->rec_mode > -1) { ixj_WriteDSPCommand(0x5120, j); j->rec_mode = -1; @@ -4547,13 +4426,11 @@ static int set_play_codec(IXJ *j, int rate) j->play_mode = 5; break; default: + kfree(j->write_buffer); j->play_frame_size = 0; j->play_mode = -1; - if (j->write_buffer) { - kfree(j->write_buffer); - j->write_buffer = NULL; - j->write_buffer_size = 0; - } + j->write_buffer = NULL; + j->write_buffer_size = 0; retval = 1; break; } @@ -4676,14 +4553,12 @@ static int ixj_play_start(IXJ *j) static void ixj_play_stop(IXJ *j) { - if(ixjdebug & 0x0002) + if (ixjdebug & 0x0002) printk("IXJ %d Stopping Play Codec %d at %ld\n", j->board, j->play_codec, jiffies); - if (j->write_buffer) { - kfree(j->write_buffer); - j->write_buffer = NULL; - j->write_buffer_size = 0; - } + kfree(j->write_buffer); + j->write_buffer = NULL; + j->write_buffer_size = 0; if (j->play_mode > -1) { ixj_WriteDSPCommand(0x5221, j); /* Stop playback and flush buffers. 8022 reference page 9-40 */ @@ -4707,7 +4582,7 @@ static unsigned int ixj_poll(struct file *file_p, poll_table * wait) { unsigned int mask = 0; - IXJ *j = get_ixj(NUM(file_p->f_dentry->d_inode)); + IXJ *j = get_ixj(NUM(file_p->f_path.dentry->d_inode)); poll_wait(file_p, &(j->poll_q), wait); if (j->read_buffer_ready > 0) @@ -5845,7 +5720,7 @@ static int ixj_daa_write(IXJ *j) return 1; } -int ixj_set_tone_off(unsigned short arg, IXJ *j) +static int ixj_set_tone_off(unsigned short arg, IXJ *j) { j->tone_off_time = arg; if (ixj_WriteDSPCommand(0x6E05, j)) /* Set Tone Off Period */ @@ -5908,9 +5783,7 @@ static void ixj_cpt_stop(IXJ *j) ixj_play_tone(j, 0); j->tone_state = j->tone_cadence_state = 0; if (j->cadence_t) { - if (j->cadence_t->ce) { - kfree(j->cadence_t->ce); - } + kfree(j->cadence_t->ce); kfree(j->cadence_t); j->cadence_t = NULL; } @@ -6044,10 +5917,10 @@ static int ixj_build_filter_cadence(IXJ *j, IXJ_FILTER_CADENCE __user * cp) j->cadence_f[lcp->filter].off3 = lcp->off3; j->cadence_f[lcp->filter].off3min = 0; j->cadence_f[lcp->filter].off3max = 0; - kfree(lcp); if(ixjdebug & 0x0002) { printk(KERN_INFO "Cadence %d loaded\n", lcp->filter); } + kfree(lcp); return 0; } @@ -6235,10 +6108,8 @@ static int ixj_ioctl(struct inode *inode, struct file *file_p, unsigned int cmd, * Set up locks to ensure that only one process is talking to the DSP at a time. * This is necessary to keep the DSP from locking up. */ - while(test_and_set_bit(board, (void *)&j->busyflags) != 0) { - set_current_state(TASK_INTERRUPTIBLE); - schedule_timeout(1); - } + while(test_and_set_bit(board, (void *)&j->busyflags) != 0) + schedule_timeout_interruptible(1); if (ixjdebug & 0x0040) printk("phone%d ioctl, cmd: 0x%x, arg: 0x%lx\n", minor, cmd, arg); if (minor >= IXJMAX) { @@ -6267,8 +6138,14 @@ static int ixj_ioctl(struct inode *inode, struct file *file_p, unsigned int cmd, retval = j->serial; break; case IXJCTL_VERSION: - if (copy_to_user(argp, ixj_c_revision, strlen(ixj_c_revision))) - retval = -EFAULT; + { + char arg_str[100]; + snprintf(arg_str, sizeof(arg_str), + "\nDriver version %i.%i.%i", IXJ_VER_MAJOR, + IXJ_VER_MINOR, IXJ_BLD_VER); + if (copy_to_user(argp, arg_str, strlen(arg_str))) + retval = -EFAULT; + } break; case PHONE_RING_CADENCE: j->ring_cadence = arg; @@ -6780,12 +6657,12 @@ static int ixj_ioctl(struct inode *inode, struct file *file_p, unsigned int cmd, static int ixj_fasync(int fd, struct file *file_p, int mode) { - IXJ *j = get_ixj(NUM(file_p->f_dentry->d_inode)); + IXJ *j = get_ixj(NUM(file_p->f_path.dentry->d_inode)); 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, @@ -6798,8 +6675,6 @@ struct file_operations ixj_fops = static int ixj_linetest(IXJ *j) { - unsigned long jifwait; - j->flags.pstncheck = 1; /* Testing */ j->flags.pstn_present = 0; /* Assume the line is not there */ @@ -6830,11 +6705,7 @@ static int ixj_linetest(IXJ *j) outb_p(j->pld_scrw.byte, j->XILINXbase); daa_set_mode(j, SOP_PU_CONVERSATION); - jifwait = jiffies + hertz; - while (time_before(jiffies, jifwait)) { - set_current_state(TASK_INTERRUPTIBLE); - schedule_timeout(1); - } + msleep(1000); daa_int_read(j); daa_set_mode(j, SOP_PU_RESET); if (j->m_DAAShadowRegs.XOP_REGS.XOP.xr0.bitreg.VDD_OK) { @@ -6854,11 +6725,7 @@ static int ixj_linetest(IXJ *j) j->pld_slicw.bits.rly3 = 0; outb_p(j->pld_slicw.byte, j->XILINXbase + 0x01); daa_set_mode(j, SOP_PU_CONVERSATION); - jifwait = jiffies + hertz; - while (time_before(jiffies, jifwait)) { - set_current_state(TASK_INTERRUPTIBLE); - schedule_timeout(1); - } + msleep(1000); daa_int_read(j); daa_set_mode(j, SOP_PU_RESET); if (j->m_DAAShadowRegs.XOP_REGS.XOP.xr0.bitreg.VDD_OK) { @@ -6887,7 +6754,6 @@ static int ixj_linetest(IXJ *j) static int ixj_selfprobe(IXJ *j) { unsigned short cmd; - unsigned long jif; int cnt; BYTES bytes; @@ -7037,29 +6903,13 @@ static int ixj_selfprobe(IXJ *j) } else { if (j->cardtype == QTI_LINEJACK) { LED_SetState(0x1, j); - jif = jiffies + (hertz / 10); - while (time_before(jiffies, jif)) { - set_current_state(TASK_INTERRUPTIBLE); - schedule_timeout(1); - } + msleep(100); LED_SetState(0x2, j); - jif = jiffies + (hertz / 10); - while (time_before(jiffies, jif)) { - set_current_state(TASK_INTERRUPTIBLE); - schedule_timeout(1); - } + msleep(100); LED_SetState(0x4, j); - jif = jiffies + (hertz / 10); - while (time_before(jiffies, jif)) { - set_current_state(TASK_INTERRUPTIBLE); - schedule_timeout(1); - } + msleep(100); LED_SetState(0x8, j); - jif = jiffies + (hertz / 10); - while (time_before(jiffies, jif)) { - set_current_state(TASK_INTERRUPTIBLE); - schedule_timeout(1); - } + msleep(100); LED_SetState(0x0, j); daa_get_version(j); if (ixjdebug & 0x0002) @@ -7263,9 +7113,6 @@ static int ixj_get_status_proc(char *buf) int cnt; IXJ *j; len = 0; - len += sprintf(buf + len, "%s", ixj_c_rcsid); - len += sprintf(buf + len, "\n%s", ixj_h_rcsid); - len += sprintf(buf + len, "\n%s", ixjuser_h_rcsid); len += sprintf(buf + len, "\nDriver version %i.%i.%i", IXJ_VER_MAJOR, IXJ_VER_MINOR, IXJ_BLD_VER); len += sprintf(buf + len, "\nsizeof IXJ struct %Zd bytes", sizeof(IXJ)); len += sprintf(buf + len, "\nsizeof DAA struct %Zd bytes", sizeof(DAA_REGS)); @@ -7592,10 +7439,8 @@ static void cleanup(void) printk(KERN_INFO "IXJ: Releasing XILINX address for /dev/phone%d\n", cnt); release_region(j->XILINXbase, 4); } - if (j->read_buffer) - kfree(j->read_buffer); - if (j->write_buffer) - kfree(j->write_buffer); + kfree(j->read_buffer); + kfree(j->write_buffer); if (j->dev) pnp_device_detach(j->dev); if (ixjdebug & 0x0002) @@ -7707,8 +7552,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 "); MODULE_LICENSE("GPL"); @@ -7718,7 +7563,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 +7612,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 +7660,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,34 +7684,26 @@ 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); + pci = pci_find_device(PCI_VENDOR_ID_QUICKNET, + PCI_DEVICE_ID_QUICKNET_XJ, pci); if (!pci) break; 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); @@ -7890,7 +7731,7 @@ static int __init ixj_init(void) if ((probe = ixj_probe_pci(&cnt)) < 0) { return probe; } - printk("%s\n", ixj_c_rcsid); + printk(KERN_INFO "ixj driver initialized.\n"); create_proc_read_entry ("ixj", 0, NULL, ixj_read_proc, NULL); return probe; }