wcb4xxp: HDLC packets do not pass over D-channel.
dahdi/wcb4xxp driver used with Digium Wildcard B410 quad-BRI PCI card unable to communicate with another ISDN device (ISDN phone, another port of B410). It appears that B-channels are capable to transport data, but D-channel is not. Debug output added into the driver shows that packets are transmitted to the D-channel, but no packets are received. Further investigation shows that no interrupts received from Rx FIFO associated with D-channel, although packets are delivered to the FIFO. I've found that problem is in improper usage of chan->chanpos while indexing the fifo index (bspan->fifos): chanpos starts from 1 and fifos starts from 0. Therefore, garbage read instead of fifo number. (closes issue #14834) Reported by: vvv Patches: dahdi-linux-complete-2.2.0-rc1.patch uploaded by vvv (license 741) Signed-off-by: Shaun Ruffell <sruffell@digium.com> Origin: http://svnview.digium.com/svn/dahdi?view=rev&rev=9555 git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.4@9689 a0bf4364-ded3-4de4-8d8a-66a801d63aff
This commit is contained in:
@@ -1831,8 +1831,10 @@ static int hdlc_tx_frame(struct b4xxp_span *bspan)
|
||||
for (i=0; i < size; i++)
|
||||
printk("%02x%c", buf[i], (i < (size - 1)) ? ' ' : '\n');
|
||||
|
||||
if (size && res != 0)
|
||||
pr_info("Transmitted frame %d on span %d\n", bspan->frames_out - 1, bspan->port);
|
||||
if (size && res != 0) {
|
||||
pr_info("Transmitted frame %d on span %d\n",
|
||||
bspan->frames_out - 1, bspan->port + 1);
|
||||
}
|
||||
}
|
||||
|
||||
return(res == 0);
|
||||
@@ -2321,7 +2323,7 @@ static int b4xxp_open(struct dahdi_chan *chan)
|
||||
if (DBG_FOPS && DBG_SPANFILTER)
|
||||
dev_info(b4->dev, "open() on chan %s (%i/%i)\n", chan->name, chan->channo, chan->chanpos);
|
||||
|
||||
hfc_reset_fifo_pair(b4, bspan->fifos[chan->chanpos], 0, 0);
|
||||
hfc_reset_fifo_pair(b4, bspan->fifos[chan->chanpos - 1], 0, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -2334,7 +2336,7 @@ static int b4xxp_close(struct dahdi_chan *chan)
|
||||
if (DBG_FOPS && DBG_SPANFILTER)
|
||||
dev_info(b4->dev, "close() on chan %s (%i/%i)\n", chan->name, chan->channo, chan->chanpos);
|
||||
|
||||
hfc_reset_fifo_pair(b4, bspan->fifos[chan->chanpos], 1, 1);
|
||||
hfc_reset_fifo_pair(b4, bspan->fifos[chan->chanpos - 1], 1, 1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user