From 78e0de6a536c8eca00d4cd801fb5fbc8a15d0968 Mon Sep 17 00:00:00 2001 From: Noe Rubinstein Date: Wed, 26 Sep 2012 16:52:33 +0200 Subject: Try fixing at least some of the L1 state issues --- xhfc/base.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'xhfc') 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) { -- cgit v1.2.3