diff options
author | Tzafrir Cohen <tzafrir.cohen@xorcom.com> | 2008-10-16 17:40:22 +0000 |
---|---|---|
committer | Tzafrir Cohen <tzafrir.cohen@xorcom.com> | 2008-10-16 17:40:22 +0000 |
commit | 12058f5c95e9dbfddea2c0dc8d1a9f32b6d431b5 (patch) | |
tree | 4a6a549a985c1a04e9b370fca3b2e8922228efad /drivers/dahdi/xpp/xframe_queue.c | |
parent | fdaba144813046745154ec3425705a80e2ca5eb6 (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.c | 10 |
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++; |