summaryrefslogtreecommitdiff
path: root/xhfc
diff options
context:
space:
mode:
Diffstat (limited to 'xhfc')
-rw-r--r--xhfc/base.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/xhfc/base.c b/xhfc/base.c
index b8c2ade..3455d4d 100644
--- a/xhfc/base.c
+++ b/xhfc/base.c
@@ -478,12 +478,6 @@ static int hdlc_tx_frame(struct xhfc_span *xhfc_span)
char debugbuf[MAX(256, HDLC_BUF_LEN * 3 + 1)];
int dbglen;
- /* ignoring TE red alarms: if TE and we are in alarm, restart the
- * S/T state machine... */
- if (!xhfc_span->nt && (xhfc_span->span.alarms != 0)) {
- activate_request(xhfc_span);
- }
-
fifo = dchan_fifo(xhfc_span);
res = dahdi_hdlc_getbuf(xhfc_span->sigchan, buf, &size);
@@ -557,6 +551,11 @@ static void xhfc_hdlc_hard_xmit(struct dahdi_chan *chan)
/* Increment the hdlc_pending counter and trigger hdlc_tx_frame */
if (xhfc_span->sigchan == chan)
atomic_inc(&xhfc_span->hdlc_pending);
+
+ /* If there is an alarm, try to activate layer1 before sending out
+ * anything (xref7) */
+ if (xhfc_span->span.alarms != 0)
+ activate_request(xhfc_span);
}
/*****************************************************************************
@@ -602,6 +601,8 @@ static irqreturn_t xhfc_interrupt(int irq, void *dev_id)
for (i = 0; i < SPANS_PER_CHIP; i++) {
struct xhfc_span* s = &xhfc->spans[i];
+ /* If there is an alarm, wait for the port to go up before transmission
+ * (xref7) */
if ((s->span.flags & DAHDI_FLAG_RUNNING) &&
s->sigchan &&
s->span.alarms == DAHDI_ALARM_NONE) {