diff options
author | Noe Rubinstein <nrubinstein@proformatique.com> | 2010-09-30 16:15:02 +0200 |
---|---|---|
committer | NoƩ Rubinstein <nrubinstein@proformatique.com> | 2010-09-30 16:15:02 +0200 |
commit | 585df3213a3c9c2371c5bb993ce6267485f4ad30 (patch) | |
tree | af831884e6b70d5d3258b79c2264cd9f8d7aa0b4 /xivovp/base.c | |
parent | e1e1d5081c40d3d1e9fa0aeefa6c9ea7dd8f7508 (diff) |
lockup fixed (still, it shouldn't happen methinks
Diffstat (limited to 'xivovp/base.c')
-rw-r--r-- | xivovp/base.c | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/xivovp/base.c b/xivovp/base.c index 97e8479..28cd85d 100644 --- a/xivovp/base.c +++ b/xivovp/base.c @@ -70,12 +70,14 @@ struct timer_list rxtx_timer; static void xivovp_rxtx(unsigned long data) { + static int i; + if(0 == i++ % 1000) printk("Bonjour\n"); (void) data; dahdi_receive(&xivovp.span); dahdi_transmit(&xivovp.span); dahdi_ec_span(&xivovp.span); - mod_timer(&xivovp.vp_tick_timer, jiffies + RXTX_TICK_JIFFIES); + mod_timer(&rxtx_timer, jiffies + RXTX_TICK_JIFFIES); } /* Shouldn't there be something better there? TOTHINK */ @@ -253,7 +255,7 @@ static void vp_post_init(VpEventType *event) return; } - mod_timer(&xivovp.vp_tick_timer, jiffies + RXTX_TICK_JIFFIES); + mod_timer(&rxtx_timer, jiffies + RXTX_TICK_JIFFIES); count_and_stop_traces = TRUE; } @@ -377,7 +379,8 @@ static const struct dahdi_span_ops xivovp_span_ops = { static int span_init(void) { - dahdi_copy_string(xivovp.span.name, "XiVO_FX", sizeof(xivovp.span.name)); + struct xivovp_line* l; + dahdi_copy_string(xivovp.span.name, "XivoVP", sizeof(xivovp.span.name)); dahdi_copy_string(xivovp.span.desc, "FXO/FXS driver for Avencall's XiVO IPBX OpenHardware " "platform", sizeof(xivovp.span.desc)); @@ -385,10 +388,24 @@ span_init(void) dahdi_copy_string(xivovp.span.devicetype, "Ve890", sizeof(xivovp.span.devicetype)); xivovp.span.ops = &xivovp_span_ops; + xivovp.span.channels = ARRAY_SIZE(xivovp.chans); xivovp.span.chans = xivovp.chans; + xivovp.span.deflaw = DAHDI_LAW_MULAW; // TODO alawoverride init_waitqueue_head(&xivovp.span.maintq); /* still dunno what this is */ + for(l = xivovp.line; l < xivovp.line + NB_LINES; l++) { + xivovp.chans[l - xivovp.line] = &l->chan; + l->chan.pvt = l; + if(l->type == FXS_LINE) + l->chan.sigcap = DAHDI_SIG_FXSLS | DAHDI_SIG_FXSGS | + DAHDI_SIG_FXSKS; + else + l->chan.sigcap = DAHDI_SIG_FXOLS | DAHDI_SIG_FXOGS | + DAHDI_SIG_FXOKS; + spin_lock_init(&l->vp_lock); + } + if(dahdi_register(&xivovp.span, /*prefmaster*/ 0)) { printk(KERN_WARNING DRV_NAME ": couldn't register span.\n"); return -EINVAL; @@ -400,7 +417,6 @@ span_init(void) static int xivovp_init(void) { - int i; /* this is simple because no dynamic alloc */ init_timer(&xivovp.vp_tick_timer); @@ -414,12 +430,6 @@ xivovp_init(void) xivovp.line[FXS_LINE].type = FXS_LINE; xivovp.line[FXO_LINE].type = FXO_LINE; - for(i = 0; i < NB_LINES; i++) { - xivovp.chans[i] = &xivovp.line[i].chan; - xivovp.line[i].chan.pvt = &xivovp.line[i].chan; - spin_lock_init(&xivovp.line[i].vp_lock); - } - return 0; } |