diff options
Diffstat (limited to 'xpp/card_fxo.c')
-rw-r--r-- | xpp/card_fxo.c | 93 |
1 files changed, 45 insertions, 48 deletions
diff --git a/xpp/card_fxo.c b/xpp/card_fxo.c index e568885..2063433 100644 --- a/xpp/card_fxo.c +++ b/xpp/card_fxo.c @@ -156,7 +156,7 @@ static int do_led(xpd_t *xpd, lineno_t chan, byte which, bool on) BIT_CLR(priv->ledstate[which], chan); } } - LINE_DBG(xpd, chan, "LED: which=%d -- %s\n", which, (on) ? "on" : "off"); + LINE_DBG(LEDS, xpd, chan, "LED: which=%d -- %s\n", which, (on) ? "on" : "off"); ret = DAA_DIRECT_REQUEST(xbus, xpd, chan, DAA_WRITE, 0x20, on); out: return ret; @@ -184,7 +184,7 @@ static void handle_fxo_leds(xpd_t *xpd) mod_value = DEFAULT_LED_PERIOD; /* safety value */ // led state is toggled if((timer_count % mod_value) == 0) { - LINE_DBG(xpd, i, "ledstate=%s\n", (IS_SET(priv->ledstate[color], i))?"ON":"OFF"); + LINE_DBG(LEDS, xpd, i, "ledstate=%s\n", (IS_SET(priv->ledstate[color], i))?"ON":"OFF"); if(!IS_SET(priv->ledstate[color], i)) { do_led(xpd, i, color, 1); } else { @@ -230,13 +230,13 @@ static void mark_ring(xpd_t *xpd, lineno_t pos, bool on, bool update_zap) BUG_ON(!priv); atomic_set(&priv->ring_debounce[pos], 0); /* Stop debouncing */ if(on && !xpd->ringing[pos]) { - LINE_DBG(xpd, pos, "START\n"); + LINE_DBG(SIGNAL, xpd, pos, "START\n"); xpd->ringing[pos] = 1; MARK_BLINK(priv, pos, LED_GREEN, LED_BLINK_RING); if(update_zap) update_zap_ring(xpd, pos, on); } else if(!on && xpd->ringing[pos]) { - LINE_DBG(xpd, pos, "STOP\n"); + LINE_DBG(SIGNAL, xpd, pos, "STOP\n"); xpd->ringing[pos] = 0; if(IS_BLINKING(priv, pos, LED_GREEN)) MARK_BLINK(priv, pos, LED_GREEN, 0); @@ -259,12 +259,12 @@ static int do_sethook(xpd_t *xpd, int pos, bool to_offhook) priv = xpd->priv; BUG_ON(!priv); if(!IS_SET(priv->battery, pos)) { - LINE_DBG(xpd, pos, "WARNING: called while battery is off\n"); + LINE_DBG(SIGNAL, xpd, pos, "WARNING: called while battery is off\n"); } spin_lock_irqsave(&xpd->lock, flags); mark_ring(xpd, pos, 0, 0); // No more rings value = (to_offhook) ? 0x09 : 0x08; /* Bit 3 is for CID */ - LINE_DBG(xpd, pos, "SETHOOK: value=0x%02X %s\n", value, (to_offhook)?"OFFHOOK":"ONHOOK"); + LINE_DBG(SIGNAL, xpd, pos, "SETHOOK: value=0x%02X %s\n", value, (to_offhook)?"OFFHOOK":"ONHOOK"); if(to_offhook) MARK_ON(priv, pos, LED_GREEN); else @@ -312,23 +312,23 @@ static void clean_proc(xbus_t *xbus, xpd_t *xpd) BUG_ON(!xpd); priv = xpd->priv; - XPD_DBG(xpd, "\n"); + XPD_DBG(PROC, xpd, "\n"); #ifdef CONFIG_PROC_FS if(priv->regfile) { - XPD_DBG(xpd, "Removing xpd DAA file\n"); + XPD_DBG(PROC, xpd, "Removing xpd DAA file\n"); remove_proc_entry(PROC_REGISTER_FNAME, xpd->proc_xpd_dir); priv->regfile->data = NULL; } #ifdef WITH_METERING if(priv->meteringfile) { - XPD_DBG(xpd, "Removing xpd metering tone file\n"); + XPD_DBG(PROC, xpd, "Removing xpd metering tone file\n"); priv->meteringfile->data = NULL; remove_proc_entry(PROC_METERING_FNAME, xpd->proc_xpd_dir); priv->meteringfile = NULL; } #endif if(priv->fxo_info) { - XPD_DBG(xpd, "Removing xpd FXO_INFO file\n"); + XPD_DBG(PROC, xpd, "Removing xpd FXO_INFO file\n"); remove_proc_entry(PROC_FXO_INFO_FNAME, xpd->proc_xpd_dir); priv->fxo_info = NULL; } @@ -344,7 +344,7 @@ static int FXO_card_init(xbus_t *xbus, xpd_t *xpd) BUG_ON(!xpd); priv = xpd->priv; #ifdef CONFIG_PROC_FS - XPD_DBG(xpd, "Creating FXO_INFO file\n"); + XPD_DBG(PROC, xpd, "Creating FXO_INFO file\n"); priv->fxo_info = create_proc_read_entry(PROC_FXO_INFO_FNAME, 0444, xpd->proc_xpd_dir, proc_fxo_info_read, xpd); if(!priv->fxo_info) { XPD_ERR(xpd, "Failed to create proc file '%s'\n", PROC_FXO_INFO_FNAME); @@ -353,7 +353,7 @@ static int FXO_card_init(xbus_t *xbus, xpd_t *xpd) } priv->fxo_info->owner = THIS_MODULE; #ifdef WITH_METERING - XPD_DBG(xpd, "Creating Metering tone file\n"); + XPD_DBG(PROC, xpd, "Creating Metering tone file\n"); priv->meteringfile = create_proc_read_entry(PROC_METERING_FNAME, 0444, xpd->proc_xpd_dir, proc_xpd_metering_read, xpd); if(!priv->meteringfile) { @@ -363,7 +363,7 @@ static int FXO_card_init(xbus_t *xbus, xpd_t *xpd) } priv->meteringfile->owner = THIS_MODULE; #endif - XPD_DBG(xpd, "Creating DAAs file\n"); + XPD_DBG(PROC, xpd, "Creating DAAs file\n"); priv->regfile = create_proc_entry(PROC_REGISTER_FNAME, 0644, xpd->proc_xpd_dir); if(!priv->regfile) { XPD_ERR(xpd, "Failed to create proc file '%s'\n", PROC_REGISTER_FNAME); @@ -382,7 +382,7 @@ static int FXO_card_init(xbus_t *xbus, xpd_t *xpd) for_each_line(xpd, i) { do_sethook(xpd, i, 0); } - XPD_DBG(xpd, "done\n"); + XPD_DBG(GENERAL, xpd, "done\n"); for_each_line(xpd, i) { do_led(xpd, i, LED_GREEN, 0); } @@ -408,7 +408,7 @@ static int FXO_card_remove(xbus_t *xbus, xpd_t *xpd) BUG_ON(!xpd); priv = xpd->priv; - XPD_DBG(xpd, "\n"); + XPD_DBG(GENERAL, xpd, "\n"); clean_proc(xbus, xpd); return 0; } @@ -424,11 +424,11 @@ static int FXO_card_zaptel_preregistration(xpd_t *xpd, bool on) BUG_ON(!xbus); priv = xpd->priv; BUG_ON(!priv); - XPD_DBG(xpd, "%s\n", (on)?"ON":"OFF"); + XPD_DBG(GENERAL, xpd, "%s\n", (on)?"ON":"OFF"); for_each_line(xpd, i) { struct zt_chan *cur_chan = &xpd->chans[i]; - XPD_DBG(xpd, "setting FXO channel %d\n", i); + XPD_DBG(GENERAL, xpd, "setting FXO channel %d\n", i); snprintf(cur_chan->name, MAX_CHANNAME, "XPP_FXO/%02d/%1d%1d/%d", xbus->num, xpd->addr.unit, xpd->addr.subunit, i); cur_chan->chanpos = i + 1; @@ -453,7 +453,7 @@ static int FXO_card_zaptel_postregistration(xpd_t *xpd, bool on) BUG_ON(!xbus); priv = xpd->priv; BUG_ON(!priv); - XPD_DBG(xpd, "%s\n", (on)?"ON":"OFF"); + XPD_DBG(GENERAL, xpd, "%s\n", (on)?"ON":"OFF"); for_each_line(xpd, i) { MARK_OFF(priv, i, LED_GREEN); msleep(2); @@ -469,7 +469,7 @@ int FXO_card_hooksig(xbus_t *xbus, xpd_t *xpd, int pos, zt_txsig_t txsig) priv = xpd->priv; BUG_ON(!priv); - LINE_DBG(xpd, pos, "%s\n", txsig2str(txsig)); + LINE_DBG(SIGNAL, xpd, pos, "%s\n", txsig2str(txsig)); BUG_ON(xpd->direction != TO_PSTN); /* XXX Enable hooksig for FXO XXX */ switch(txsig) { @@ -595,13 +595,13 @@ static int FXO_card_ioctl(xpd_t *xpd, int pos, unsigned int cmd, unsigned long a BUG_ON(!xpd); switch (cmd) { case WCTDM_SET_ECHOTUNE: - XPD_DBG(xpd, "-- Setting echo registers: \n"); + XPD_DBG(GENERAL, xpd, "-- Setting echo registers: \n"); /* first off: check if this span is fxs. If not: -EINVALID */ if (copy_from_user(&echotune_data, (void __user *)arg, sizeof(echotune_data))) return -EFAULT; for (i = 0; i < ARRAY_SIZE(echotune_regs); i++) { - XPD_DBG(xpd, "Reg=0x%02X, data=0x%02X\n", echotune_regs[i], echotune_data[i]); + XPD_DBG(REGS, xpd, "Reg=0x%02X, data=0x%02X\n", echotune_regs[i], echotune_data[i]); ret = DAA_DIRECT_REQUEST(xpd->xbus, xpd, pos, DAA_WRITE, echotune_regs[i], echotune_data[i]); if (ret < 0) { LINE_NOTICE(xpd, pos, "Couldn't write %0x02X to register %0x02X\n", @@ -611,10 +611,10 @@ static int FXO_card_ioctl(xpd_t *xpd, int pos, unsigned int cmd, unsigned long a msleep(1); } - XPD_DBG(xpd, "-- Set echo registers successfully\n"); + XPD_DBG(GENERAL, xpd, "-- Set echo registers successfully\n"); break; default: - LINE_DBG(xpd, pos, "Unknown command 0x%X.\n", cmd); + LINE_DBG(GENERAL, xpd, pos, "Unknown command 0x%X.\n", cmd); return -ENOTTY; } return 0; @@ -630,16 +630,14 @@ static int FXO_card_ioctl(xpd_t *xpd, int pos, unsigned int cmd, unsigned long a reg_cmd_t *reg_cmd; if(!xbus) { - DBG("NO XBUS\n"); + DBG(REGS, "NO XBUS\n"); return -EINVAL; } XFRAME_NEW(xframe, pack, xbus, GLOBAL, REGISTER_REQUEST, xpd->xbus_idx); -#if 0 - LINE_DBG(xpd, chisel, "%c%c R%02X S%02X %02X %02X\n", + LINE_DBG(REGS, xpd, chipsel, "%c%c R%02X S%02X %02X %02X\n", (writing)?'W':'R', (do_subreg)?'S':'D', regnum, subreg, data_low, data_high); -#endif reg_cmd = &RPACKET_FIELD(pack, GLOBAL, REGISTER_REQUEST, reg_cmd); reg_cmd->bytes = sizeof(*reg_cmd) - 1; // do not count the 'bytes' field REG_FIELD(reg_cmd, chipsel) = chipsel; @@ -662,7 +660,7 @@ static /* 0x0F */ HOSTCMD(FXO, XPD_STATE, bool on) BUG_ON(!xpd); priv = xpd->priv; BUG_ON(!priv); - XPD_DBG(xpd, "%s\n", (on) ? "on" : "off"); + XPD_DBG(GENERAL, xpd, "%s\n", (on) ? "on" : "off"); return ret; } @@ -670,7 +668,7 @@ static /* 0x0F */ HOSTCMD(FXO, RING, lineno_t chan, bool on) { BUG_ON(!xbus); BUG_ON(!xpd); - LINE_DBG(xpd, chan, "%s\n", (on) ? "on" : "off"); + LINE_DBG(SIGNAL, xpd, chan, "%s\n", (on) ? "on" : "off"); return DAA_DIRECT_REQUEST(xbus, xpd, chan, DAA_WRITE, 0x40, (on)?0x04:0x01); } @@ -695,14 +693,14 @@ HANDLER_DEF(FXO, SIG_CHANGED) } priv = xpd->priv; BUG_ON(!priv); - XPD_DBG(xpd, "(PSTN) sig_toggles=0x%04X sig_status=0x%04X\n", sig_toggles, sig_status); + XPD_DBG(SIGNAL, xpd, "(PSTN) sig_toggles=0x%04X sig_status=0x%04X\n", sig_toggles, sig_status); spin_lock_irqsave(&xpd->lock, flags); for_each_line(xpd, i) { int debounce; if(IS_SET(sig_toggles, i)) { if(!IS_SET(priv->battery, i)) { - LINE_DBG(xpd, i, "SIG_CHANGED while battery is off.\n"); + LINE_DBG(SIGNAL, xpd, i, "SIG_CHANGED while battery is off.\n"); // FIXME: allow dialing without battery polling... // continue; } @@ -735,7 +733,7 @@ static void update_battery_status(xpd_t *xpd, byte data_low, lineno_t chipsel) * Check for battery voltage fluctuations */ if(IS_SET(priv->battery, chipsel) && priv->battery_debounce[chipsel]++ > BAT_DEBOUNCE) { - LINE_DBG(xpd, chipsel, "BATTERY OFF voltage=%d\n", bat); + LINE_DBG(SIGNAL, xpd, chipsel, "BATTERY OFF voltage=%d\n", bat); BIT_CLR(priv->battery, chipsel); if(SPAN_REGISTERED(xpd)) zt_qevent_lock(&xpd->chans[chipsel], ZT_EVENT_ALARM); @@ -744,7 +742,7 @@ static void update_battery_status(xpd_t *xpd, byte data_low, lineno_t chipsel) } else { priv->battery_debounce[chipsel] = 0; if(!IS_SET(priv->battery, chipsel)) { - LINE_DBG(xpd, chipsel, "BATTERY ON voltage=%d\n", bat); + LINE_DBG(SIGNAL, xpd, chipsel, "BATTERY ON voltage=%d\n", bat); BIT_SET(priv->battery, chipsel); if(SPAN_REGISTERED(xpd)) zt_qevent_lock(&xpd->chans[chipsel], ZT_EVENT_NOALARM); @@ -770,7 +768,7 @@ static void update_battery_status(xpd_t *xpd, byte data_low, lineno_t chipsel) BIT_CLR(priv->polarity, chipsel); priv->polarity_counter[chipsel] = 0; /* Inform Zaptel */ - LINE_DBG(xpd, chipsel, "Send ZT_EVENT_POLARITY\n"); + LINE_DBG(GENERAL, xpd, chipsel, "Send ZT_EVENT_POLARITY\n"); zt_qevent_lock(&xpd->chans[chipsel], ZT_EVENT_POLARITY); #if 0 /* @@ -799,7 +797,7 @@ static void update_power_denial(xpd_t *xpd, byte data_low, lineno_t chipsel) /* Current dropped */ priv->current_counter[chipsel]++; if (priv->current_counter[chipsel] * poll_battery_interval >= POWER_DENIAL_TIME) { - LINE_DBG(xpd, chipsel, "Power Denial Hangup\n"); + LINE_DBG(SIGNAL, xpd, chipsel, "Power Denial Hangup\n"); priv->current_counter[chipsel] = 0; do_sethook(xpd, chipsel, 0); update_line_status(xpd, chipsel, 0); @@ -821,7 +819,7 @@ static void update_metering_state(xpd_t *xpd, byte data_low, lineno_t chipsel) priv = xpd->priv; BUG_ON(!priv); old_metering_tone = IS_SET(priv->metering_tone_state, chipsel); - LINE_DBG(xpd, chipsel, "METERING: %s [dL=0x%X] (%d)\n", + LINE_DBG(SIGNAL, xpd, chipsel, "METERING: %s [dL=0x%X] (%d)\n", (metering_tone) ? "ON" : "OFF", data_low, priv->metering_count[chipsel]); if(metering_tone && !old_metering_tone) { @@ -864,12 +862,11 @@ HANDLER_DEF(FXO, DAA_REPLY) break; #endif } -#if 0 - XPD_DBG(xpd, "DAA_REPLY: %s reg_num=0x%X, dataL=0x%X dataH=0x%X\n", - (info->size == 3)?"I":"D", - info->reg_num, info->data_low, info->data_high); -#endif - + LINE_DBG(REGS, xpd, chipsel, "DAA_REPLY: %c reg_num=0x%X, dataL=0x%X dataH=0x%X\n", + ((info->bytes == 3)?'I':'D'), + REG_FIELD(info, regnum), + REG_FIELD(info, data_low), + REG_FIELD(info, data_high)); /* Update /proc info only if reply relate to the last slic read request */ if( REG_FIELD(&xpd->requested_reply, regnum) == REG_FIELD(info, regnum) && @@ -915,14 +912,14 @@ static bool fxo_packet_is_valid(xpacket_t *pack) { const xproto_entry_t *xe; - //DBG("\n"); + //DBG(GENERAL, "\n"); xe = xproto_card_entry(&PROTO_TABLE(FXO), pack->opcode); return xe != NULL; } static void fxo_packet_dump(const char *msg, xpacket_t *pack) { - DBG("%s\n", msg); + DBG(GENERAL, "%s\n", msg); } /*------------------------- DAA Handling --------------------------*/ @@ -1014,6 +1011,8 @@ static int handle_register_command(xpd_t *xpd, char *cmdline) xbus_t *xbus; int ret; + BUG_ON(!xpd); + xbus = xpd->xbus; if((p = strchr(cmdline, '#')) != NULL) /* Truncate comments */ *p = '\0'; if((p = strchr(cmdline, ';')) != NULL) /* Truncate comments */ @@ -1027,7 +1026,7 @@ static int handle_register_command(xpd_t *xpd, char *cmdline) &chipsel, &op, ®_type, ®_num, &data_low); - // DBG("'%s': %d %c%c %02X %02X %02X\n", cmdline, chipsel, op, reg_type, reg_num, data_low); + XPD_DBG(PROC, xpd, "'%s': %d %c%c %02X %02X\n", cmdline, chipsel, op, reg_type, reg_num, data_low); if(elements < 4) { // At least: chipsel, op, reg_type, reg_num ERR("Not enough arguments: (%d args) '%s'\n", elements, cmdline); return -EINVAL; @@ -1071,10 +1070,8 @@ static int handle_register_command(xpd_t *xpd, char *cmdline) REG_FIELD(®cmd, data_low) = data_low; REG_FIELD(®cmd, data_high) = 0; REG_FIELD(®cmd, read_request) = writing; - BUG_ON(!xpd); - xbus = xpd->xbus; if(!down_read_trylock(&xbus->in_use)) { - XBUS_DBG(xbus, "Dropped packet. Is in_use\n"); + XBUS_DBG(GENERAL, xbus, "Dropped packet. Is in_use\n"); return -EBUSY; } xpd->requested_reply = regcmd; |