summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortzafrir <tzafrir@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2008-09-09 13:13:47 +0000
committertzafrir <tzafrir@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2008-09-09 13:13:47 +0000
commit1deed9a16316c72eadc3ad6678d27227ec587d7b (patch)
tree3370f7a3250e4121662a42c151267656f77024e0
parent5f6f898bcefba5ef325bbefccea2c455cfefb05d (diff)
xpp-zaptel: Bugfix: Display data_high in /proc/xpp/*/chipregs:
* This byte wasn't shown even if do_datah bit was set. * Also converged all terminology to "sub-register" and not "indirect" * Changed accordingly '[WR]I' to [WR]S' in code. * Still allow usage of '[WR]I' but with deprecation NOTICE() * Convert init_card_* scripts * Adapt show_regs and write_regs script accordingly. * Leave FXS internal macros with ...INDIRECT... because that's the terminology of the SLIC. * You should use both the newer driver and init script. Specifically: newer init script will fail to work with older BRI and FXS xpp driver loaded. From xpp rev. 6117. git-svn-id: http://svn.digium.com/svn/zaptel/branches/1.2@4520 5390a7c7-147a-4af0-8ec9-7488f05a26cb
-rw-r--r--xpp/card_global.c41
-rwxr-xr-xxpp/init_card_1_30200
-rwxr-xr-xxpp/init_card_2_308
-rwxr-xr-xxpp/init_card_3_308
4 files changed, 136 insertions, 121 deletions
diff --git a/xpp/card_global.c b/xpp/card_global.c
index beb0fb1..d3a7a66 100644
--- a/xpp/card_global.c
+++ b/xpp/card_global.c
@@ -46,6 +46,8 @@ static int proc_xpd_register_read(char *page, char **start, off_t off, int count
unsigned long flags;
xpd_t *xpd = data;
reg_cmd_t *info;
+ bool do_datah;
+ char datah_str[50];
if(!xpd)
return -ENODEV;
@@ -54,16 +56,26 @@ static int proc_xpd_register_read(char *page, char **start, off_t off, int count
len += sprintf(page + len, "# Writing bad data into this file may damage your hardware!\n");
len += sprintf(page + len, "# Consult firmware docs first\n");
len += sprintf(page + len, "#\n");
+ do_datah = REG_FIELD(info, do_datah) ? 1 : 0;
+ if(do_datah) {
+ snprintf(datah_str, ARRAY_SIZE(datah_str), "\t%02X",
+ REG_FIELD(info, data_high));
+ } else
+ datah_str[0] = '\0';
if(REG_FIELD(info, do_subreg)) {
- len += sprintf(page + len, "#CH\tOP\tReg.\tSub\tDL\n");
- len += sprintf(page + len, "%2d\tRS\t%02X\t%02X\t%02X\n",
+ len += sprintf(page + len, "#CH\tOP\tReg.\tSub\tDL%s\n",
+ (do_datah) ? "\tDH" : "");
+ len += sprintf(page + len, "%2d\tRS\t%02X\t%02X\t%02X%s\n",
info->portnum,
- REG_FIELD(info, regnum), REG_FIELD(info, subreg), REG_FIELD(info, data_low));
+ REG_FIELD(info, regnum), REG_FIELD(info, subreg),
+ REG_FIELD(info, data_low), datah_str);
} else {
- len += sprintf(page + len, "#CH\tOP\tReg.\tDL\n");
- len += sprintf(page + len, "%2d\tRD\t%02X\t%02X\n",
+ len += sprintf(page + len, "#CH\tOP\tReg.\tDL%s\n",
+ (do_datah) ? "\tDH" : "");
+ len += sprintf(page + len, "%2d\tRD\t%02X\t%02X%s\n",
info->portnum,
- REG_FIELD(info, regnum), REG_FIELD(info, data_low));
+ REG_FIELD(info, regnum),
+ REG_FIELD(info, data_low), datah_str);
}
spin_unlock_irqrestore(&xpd->lock, flags);
if (len <= off+count)
@@ -96,7 +108,7 @@ static int execute_chip_command(xpd_t *xpd, const int argc, char *argv[])
bool writing;
int op; /* [W]rite, [R]ead */
int addr_mode; /* [D]irect, [I]ndirect, [Mm]ulti */
- bool do_indirect = 0;
+ bool do_subreg = 0;
int regnum;
int subreg;
int data_low;
@@ -148,12 +160,15 @@ static int execute_chip_command(xpd_t *xpd, const int argc, char *argv[])
addr_mode = argv[argno][1];
switch(addr_mode) {
case 'I':
- do_indirect = 1;
+ XPD_NOTICE(xpd, "'I' is deprecated in register commands. Use 'S' instead.\n");
+ /* fall through */
+ case 'S':
+ do_subreg = 1;
num_args += 2; /* register + subreg */
- //XPD_DBG(REGS, xpd, "INDIRECT\n");
+ //XPD_DBG(REGS, xpd, "SUBREG\n");
break;
case 'D':
- do_indirect = 0;
+ do_subreg = 0;
num_args++; /* register */
//XPD_DBG(REGS, xpd, "DIRECT\n");
break;
@@ -206,7 +221,7 @@ static int execute_chip_command(xpd_t *xpd, const int argc, char *argv[])
}
//XPD_DBG(REGS, xpd, "Register is %X\n", regnum);
argno++;
- if(do_indirect) {
+ if(do_subreg) {
if(argno >= argc) {
XPD_ERR(xpd, "Missing subregister number\n");
goto out;
@@ -261,14 +276,14 @@ static int execute_chip_command(xpd_t *xpd, const int argc, char *argv[])
portno, /* portno */
writing, /* writing */
regnum,
- do_indirect, /* use subreg */
+ do_subreg, /* use subreg */
subreg, /* subreg */
data_low,
do_datah, /* use data_high*/
data_high);
#endif
ret = xpp_register_request(xpd->xbus, xpd, portno,
- writing, regnum, do_indirect, subreg,
+ writing, regnum, do_subreg, subreg,
data_low, do_datah, data_high, 1);
out:
return ret;
diff --git a/xpp/init_card_1_30 b/xpp/init_card_1_30
index 68a6d02..11c4cb5 100755
--- a/xpp/init_card_1_30
+++ b/xpp/init_card_1_30
@@ -29,12 +29,12 @@ use strict;
# accept settings for ALL SLICS).
# 2. Command word:
# - RD Read Direct register.
-# - RI Read Indirect register.
+# - RS Read Sub-register.
# - WD Write Direct register.
-# - WI Write Indirect register.
+# - WS Write Sub-register.
# 3. Register number in hexadecimal.
-# 4. Low data byte in hexadecimal. (for WD and WI commands).
-# 5. High data byte in hexadecimal. (for WI command only).
+# 4. Low data byte in hexadecimal. (for WD and WS commands).
+# 5. High data byte in hexadecimal. (for WS command only).
#
#
@@ -146,7 +146,7 @@ sub read_reg($$$) {
close(SLICS);
die("Failed reading from '$chipregs' ($read_slic,$read_reg,$direct)")
unless @reply;
- if ($direct eq 'I') {
+ if ($direct eq 'S') {
return @reply;
} else {
return $reply[0];
@@ -163,7 +163,7 @@ sub write_reg{#($$$$$) {
my $str = sprintf "%s W%s %02X %02X",
$read_slic, $direct, $read_reg, $reg_val_low;
- if ($direct eq 'I') {
+ if ($direct eq 'S') {
$str .= sprintf " %02X", $reg_val_hi;
}
write_to_slic_file($str);
@@ -181,72 +181,72 @@ sub log_calib_params() {
sub init_indirect_registers() {
return write_to_slic_file("#
-* WI 1E 00 C2 55
-* WI 1E 01 E6 51
-* WI 1E 02 85 4B
-* WI 1E 03 37 49
+* WS 1E 00 C2 55
+* WS 1E 01 E6 51
+* WS 1E 02 85 4B
+* WS 1E 03 37 49
-* WI 1E 04 33 33
-* WI 1E 05 02 02
-* WI 1E 06 02 02
-* WI 1E 07 98 01
+* WS 1E 04 33 33
+* WS 1E 05 02 02
+* WS 1E 06 02 02
+* WS 1E 07 98 01
-* WI 1E 08 98 01
-* WI 1E 09 11 06
-* WI 1E 0A 02 02
-* WI 1E 0B E5 00
+* WS 1E 08 98 01
+* WS 1E 09 11 06
+* WS 1E 0A 02 02
+* WS 1E 0B E5 00
-* WI 1E 0C 1C 0A
-* WI 1E 0D 30 7B
-* WI 1E 0E 63 00
-* WI 1E 0F 00 00
+* WS 1E 0C 1C 0A
+* WS 1E 0D 30 7B
+* WS 1E 0E 63 00
+* WS 1E 0F 00 00
-* WI 1E 10 70 78
-* WI 1E 11 7D 00
-* WI 1E 12 00 00
-* WI 1E 13 00 00
+* WS 1E 10 70 78
+* WS 1E 11 7D 00
+* WS 1E 12 00 00
+* WS 1E 13 00 00
-* WI 1E 14 F0 7E
-* WI 1E 15 C0 01
-* WI 1E 16 00 00
-* WI 1E 17 00 20
+* WS 1E 14 F0 7E
+* WS 1E 15 C0 01
+* WS 1E 16 00 00
+* WS 1E 17 00 20
-* WI 1E 18 00 20
-* WI 1E 19 00 00
-* WI 1E 1A 00 20
-* WI 1E 1B 00 40
+* WS 1E 18 00 20
+* WS 1E 19 00 00
+* WS 1E 1A 00 20
+* WS 1E 1B 00 40
-* WI 1E 1C 00 10
-* WI 1E 1D 00 36
-* WI 1E 1E 00 10
-* WI 1E 1F 00 02
+* WS 1E 1C 00 10
+* WS 1E 1D 00 36
+* WS 1E 1E 00 10
+* WS 1E 1F 00 02
-* WI 1E 20 C0 07
-* WI 1E 21 00 26
-* WI 1E 22 F4 0F
-* WI 1E 23 00 80
-
-#* WI 1E 24 20 03
-#* WI 1E 25 8C 08
-#* WI 1E 26 00 01
-#* WI 1E 27 10 00
+* WS 1E 20 C0 07
+* WS 1E 21 00 26
+* WS 1E 22 F4 0F
+* WS 1E 23 00 80
+
+#* WS 1E 24 20 03
+#* WS 1E 25 8C 08
+#* WS 1E 26 00 01
+#* WS 1E 27 10 00
-* WI 1E 24 00 08
-* WI 1E 25 00 08
-* WI 1E 26 00 08
-* WI 1E 27 00 08
+* WS 1E 24 00 08
+* WS 1E 25 00 08
+* WS 1E 26 00 08
+* WS 1E 27 00 08
-* WI 1E 28 00 0C
-* WI 1E 29 00 0C
-* WI 1E 2B 00 01
+* WS 1E 28 00 0C
+* WS 1E 29 00 0C
+* WS 1E 2B 00 01
-* WI 1E 63 DA 00
-* WI 1E 64 60 6B
-* WI 1E 65 74 00
-* WI 1E 66 C0 79
+* WS 1E 63 DA 00
+* WS 1E 64 60 6B
+* WS 1E 65 74 00
+* WS 1E 66 C0 79
-* WI 1E 67 20 11
-* WI 1E 68 E0 3B
+* WS 1E 67 20 11
+* WS 1E 68 E0 3B
#");
}
@@ -265,8 +265,8 @@ sub save_indirect_filter_params() {
for my $slic (@SlicNums) {
for my $reg (35 .. 39) {
$FilterParams[$slic][$reg] =
- [read_reg($slic, $reg, 'I')];
- write_reg($slic, $reg, 'I', 0, 0x80);
+ [read_reg($slic, $reg, 'S')];
+ write_reg($slic, $reg, 'S', 0, 0x80);
}
}
@@ -275,7 +275,7 @@ sub save_indirect_filter_params() {
sub restore_indirect_filter_params() {
for my $slic (@SlicNums) {
for my $reg (35 .. 39) {
- write_reg($slic, $reg, 'I',
+ write_reg($slic, $reg, 'S',
@{$FilterParams[$slic][$reg]});
}
}
@@ -425,35 +425,35 @@ __DATA__
* WD 40 00
# Flush out energy accumulators
-* WI 1E 58 00 00
-* WI 1E 59 00 00
-* WI 1E 5A 00 00
-* WI 1E 5B 00 00
-* WI 1E 5C 00 00
-* WI 1E 5D 00 00
-* WI 1E 5E 00 00
-* WI 1E 5F 00 00
-* WI 1E 61 00 00
-* WI 1E 58 00 00
-* WI 1E C1 00 00
-* WI 1E C2 00 00
-* WI 1E C3 00 00
-* WI 1E C4 00 00
-* WI 1E C5 00 00
-* WI 1E C6 00 00
-* WI 1E C7 00 00
-* WI 1E C8 00 00
-* WI 1E C9 00 00
-* WI 1E CA 00 00
-* WI 1E CB 00 00
-* WI 1E CC 00 00
-* WI 1E CD 00 00
-* WI 1E CE 00 00
-* WI 1E CF 00 00
-* WI 1E D0 00 00
-* WI 1E D1 00 00
-* WI 1E D2 00 00
-* WI 1E D3 00 00
+* WS 1E 58 00 00
+* WS 1E 59 00 00
+* WS 1E 5A 00 00
+* WS 1E 5B 00 00
+* WS 1E 5C 00 00
+* WS 1E 5D 00 00
+* WS 1E 5E 00 00
+* WS 1E 5F 00 00
+* WS 1E 61 00 00
+* WS 1E 58 00 00
+* WS 1E C1 00 00
+* WS 1E C2 00 00
+* WS 1E C3 00 00
+* WS 1E C4 00 00
+* WS 1E C5 00 00
+* WS 1E C6 00 00
+* WS 1E C7 00 00
+* WS 1E C8 00 00
+* WS 1E C9 00 00
+* WS 1E CA 00 00
+* WS 1E CB 00 00
+* WS 1E CC 00 00
+* WS 1E CD 00 00
+* WS 1E CE 00 00
+* WS 1E CF 00 00
+* WS 1E D0 00 00
+* WS 1E D1 00 00
+* WS 1E D2 00 00
+* WS 1E D3 00 00
# Setting of SLICs offsets
# New card initialization
@@ -503,16 +503,16 @@ __DATA__
* WD 6C 01
-* WI 1E 23 00 80
-* WI 1E 24 20 03
-* WI 1E 25 8C 08
-* WI 1E 26 00 01
-* WI 1E 27 10 00
+* WS 1E 23 00 80
+* WS 1E 24 20 03
+* WS 1E 25 8C 08
+* WS 1E 26 00 01
+* WS 1E 27 10 00
#------ Metering tone
-* WI 1E 17 61 15 # Amplitue Ramp-up
-* WI 1E 18 61 15 # Max Amplitude
-* WI 1E 19 FB 30 # Frequency
+* WS 1E 17 61 15 # Amplitue Ramp-up
+* WS 1E 18 61 15 # Max Amplitude
+* WS 1E 19 FB 30 # Frequency
* WD 2C 00 # Timer dL
* WD 2D 03 # Timer dH
diff --git a/xpp/init_card_2_30 b/xpp/init_card_2_30
index e2d5faa..4a27047 100755
--- a/xpp/init_card_2_30
+++ b/xpp/init_card_2_30
@@ -29,12 +29,12 @@ use strict;
# accept settings for ALL SLICS).
# 2. Command word:
# - RD Read Direct register.
-# - RI Read Indirect register.
+# - RS Read Sub-register.
# - WD Write Direct register.
-# - WI Write Indirect register.
+# - WS Write Sub-register.
# 3. Register number in hexadecimal.
-# 4. Low data byte in hexadecimal. (for WD and WI commands).
-# 5. High data byte in hexadecimal. (for WI command only).
+# 4. Low data byte in hexadecimal. (for WD and WS commands).
+# 5. High data byte in hexadecimal. (for WS command only).
#
#
diff --git a/xpp/init_card_3_30 b/xpp/init_card_3_30
index 3a605e3..cbcd550 100755
--- a/xpp/init_card_3_30
+++ b/xpp/init_card_3_30
@@ -43,12 +43,12 @@ use strict;
# 1. CHIP select in decimal (ignored, taken from 3 LSB's of subunit number)
# 2. Command word:
# - RD Read Direct register.
-# - RI Read Indirect register.
+# - RS Read Sub-register.
# - WD Write Direct register.
-# - RI Write Indirect register.
+# - WS Write Sub-register.
# 3. Register number in hexadecimal.
-# 4. Subregister number in hexadecimal. (for RI and WI commands).
-# 5. Data byte in hexadecimal. (for WD and WI commands only).
+# 4. Subregister number in hexadecimal. (for RS and WS commands).
+# 5. Data byte in hexadecimal. (for WD and WS commands only).
#
package main;