summaryrefslogtreecommitdiff
path: root/xpp/card_fxo.c
diff options
context:
space:
mode:
Diffstat (limited to 'xpp/card_fxo.c')
-rw-r--r--xpp/card_fxo.c93
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, &reg_type, &reg_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(&regcmd, data_low) = data_low;
REG_FIELD(&regcmd, data_high) = 0;
REG_FIELD(&regcmd, 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;