summaryrefslogtreecommitdiff
path: root/drivers/dahdi/xpp/xframe_queue.c
diff options
context:
space:
mode:
authorTzafrir Cohen <tzafrir.cohen@xorcom.com>2008-10-16 17:40:22 +0000
committerTzafrir Cohen <tzafrir.cohen@xorcom.com>2008-10-16 17:40:22 +0000
commit12058f5c95e9dbfddea2c0dc8d1a9f32b6d431b5 (patch)
tree4a6a549a985c1a04e9b370fca3b2e8922228efad /drivers/dahdi/xpp/xframe_queue.c
parentfdaba144813046745154ec3425705a80e2ca5eb6 (diff)
xpp: start migration from procfs to sysfs.
* Sysfs representation for XPDs: /sys/bus/xpds/devices/<bus>:<unit>:<subunit> * Astribanks sysfs directories now include the XPDs as subdirectories: e.g. /sys/bus/astribanks/devices/xbus-00/00:3:0 * procfs control interface deprecated: conditioned by OLD_PROC (defaults to off). Control functionality moved to sysfs: * xbus attributes: cls connector label status timing waitfor_xpds xbus_state * XPDs can have driver-specific attributes. Common attriubtes: blink chipregs span * PRI-specific attributes: pri_clocking pri_dchan pri_cas pri_alarms pri_layer1 pri_localloop pri_protocol * The Astribank attribute "xbus_state" is read/write. Reading it shows the current state of the Astribank. Writing "start" or "stop" allows a software equivalent of connect or disconnect respectively. * When an Astribank is ready it sends an "online" event. Whenever its not ready (e.g. at the time of disconnect) it sends an "offline" event. Use astribank_hook.sample to handle those. git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@5097 a0bf4364-ded3-4de4-8d8a-66a801d63aff
Diffstat (limited to 'drivers/dahdi/xpp/xframe_queue.c')
-rw-r--r--drivers/dahdi/xpp/xframe_queue.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/dahdi/xpp/xframe_queue.c b/drivers/dahdi/xpp/xframe_queue.c
index 033be8b..915c5af 100644
--- a/drivers/dahdi/xpp/xframe_queue.c
+++ b/drivers/dahdi/xpp/xframe_queue.c
@@ -29,6 +29,10 @@ static bool __xframe_enqueue(struct xframe_queue *q, xframe_t *xframe)
{
int ret = 1;
+ if(unlikely(q->disabled)) {
+ ret = 0;
+ goto out;
+ }
if(q->count >= q->max_count) {
q->overflows++;
NOTICE("Overflow of %-15s: counts %3d, %3d, %3d worst %3d, overflows %3d worst_lag %02ld.%ld ms\n",
@@ -95,9 +99,9 @@ xframe_t *xframe_dequeue(struct xframe_queue *q)
spin_unlock_irqrestore(&q->lock, flags);
return frm;
}
-void xframe_queue_disable(struct xframe_queue *q)
+void xframe_queue_disable(struct xframe_queue *q, bool disabled)
{
- q->max_count = 0;
+ q->disabled = disabled;
}
void xframe_queue_clear(struct xframe_queue *q)
@@ -106,7 +110,7 @@ void xframe_queue_clear(struct xframe_queue *q)
xbus_t *xbus = q->priv;
int i = 0;
- xframe_queue_disable(q);
+ xframe_queue_disable(q, 1);
while((xframe = xframe_dequeue(q)) != NULL) {
transport_free_xframe(xbus, xframe);
i++;