summaryrefslogtreecommitdiff
path: root/drivers/dahdi/xpp/xbus-sysfs.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/dahdi/xpp/xbus-sysfs.c')
-rw-r--r--drivers/dahdi/xpp/xbus-sysfs.c53
1 files changed, 39 insertions, 14 deletions
diff --git a/drivers/dahdi/xpp/xbus-sysfs.c b/drivers/dahdi/xpp/xbus-sysfs.c
index 35895ca..a48b806 100644
--- a/drivers/dahdi/xpp/xbus-sysfs.c
+++ b/drivers/dahdi/xpp/xbus-sysfs.c
@@ -121,10 +121,8 @@ static DEVICE_ATTR_READER(timing_show, dev, buf)
len += snprintf(buf + len, PAGE_SIZE - len, "%-3s", sync_mode_name(xbus->sync_mode));
if(xbus->sync_mode == SYNC_MODE_PLL) {
len += snprintf(buf + len, PAGE_SIZE - len,
- " %5d: jitter %4d median %4d calc_drift %3d lost (%4d,%4d) : ",
+ " %5d: lost (%4d,%4d) : ",
xbus->ticker.cycle,
- driftinfo->jitter, driftinfo->median,
- driftinfo->calc_drift,
driftinfo->lost_ticks, driftinfo->lost_tick_count);
len += snprintf(buf + len, PAGE_SIZE - len,
"DRIFT %3d %ld sec ago",
@@ -212,25 +210,52 @@ static DEVICE_ATTR_READER(driftinfo_show, dev, buf)
xbus_t *xbus;
struct xpp_drift *di;
struct xpp_ticker *ticker;
+ struct timeval now;
int len = 0;
+ int hours;
+ int minutes;
+ int seconds;
+ int speed_range;
+ int uframes_inaccuracy;
+ int i;
xbus = dev_to_xbus(dev);
di = &xbus->drift;
ticker = &xbus->ticker;
-#define SHOW(ptr,item) len += snprintf(buf + len, PAGE_SIZE - len, "%-15s: %d\n", #item, (ptr)->item)
+ /*
+ * Calculate lost ticks time
+ */
+ do_gettimeofday(&now);
+ seconds = now.tv_sec - di->last_lost_tick.tv.tv_sec;
+ minutes = seconds / 60;
+ seconds = seconds % 60;
+ hours = minutes / 60;
+ minutes = minutes % 60;
+#define SHOW(ptr,item) len += snprintf(buf + len, PAGE_SIZE - len, "%-15s: %8d\n", #item, (ptr)->item)
+ len += snprintf(buf + len, PAGE_SIZE - len, "%-15s: %8d (was %d:%02d:%02d ago)\n",
+ "lost_ticks", di->lost_ticks, hours, minutes, seconds);
+ speed_range = abs(di->max_speed - di->min_speed);
+ uframes_inaccuracy = di->sync_inaccuracy / 125;
+ len += snprintf(buf + len, PAGE_SIZE - len, "%-15s: %8d ",
+ "instability", speed_range + uframes_inaccuracy);
+ if(xbus->sync_mode == SYNC_MODE_AB) {
+ buf[len++] = '-';
+ } else {
+ for(i = 0; len < PAGE_SIZE - 1 && i < speed_range + uframes_inaccuracy; i++)
+ buf[len++] = '#';
+ }
+ buf[len++] = '\n';
+ len += snprintf(buf + len, PAGE_SIZE - len, "%-15s: %8d (uframes)\n", "inaccuracy", uframes_inaccuracy);
+ len += snprintf(buf + len, PAGE_SIZE - len, "%-15s: %8d\n", "speed_range", speed_range);
SHOW(xbus, sync_adjustment);
- SHOW(di, wanted_offset);
- SHOW(di, delta_tick);
- SHOW(di, lost_ticks);
- SHOW(di, kicks_up);
- SHOW(di, kicks_down);
- SHOW(di, delta_min);
- SHOW(di, delta_max);
- SHOW(di, median);
- SHOW(di, jitter);
- SHOW(di, calc_drift);
+ len += snprintf(buf + len, PAGE_SIZE - len, "%-15s: %8d\n", "offset (usec)", di->offset_prev);
+ SHOW(di, offset_range);
+ len += snprintf(buf + len, PAGE_SIZE - len, "%-15s: %8d\n", "best_speed", (di->max_speed + di->min_speed) / 2);
+ SHOW(di, min_speed);
+ SHOW(di, max_speed);
SHOW(ticker, cycle);
SHOW(ticker, tick_period);
+ SHOW(ticker, count);
#undef SHOW
return len;
}