xpp: BRI: remove legacy BRISTUFF code
Signed-off-by: Oron Peled <oron.peled@xorcom.com> Acked-By: Tzafrir Cohen <tzafrir.cohen@xorcom.com> git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@10387 a0bf4364-ded3-4de4-8d8a-66a801d63aff
This commit is contained in:
parent
b6f3466607
commit
2ae396112a
@ -35,6 +35,10 @@
|
|||||||
|
|
||||||
static const char rcsid[] = "$Id$";
|
static const char rcsid[] = "$Id$";
|
||||||
|
|
||||||
|
#ifndef DAHDI_SIG_HARDHDLC
|
||||||
|
#error Cannot build BRI without HARDHDLC supprt
|
||||||
|
#endif
|
||||||
|
|
||||||
static DEF_PARM(int, debug, 0, 0644, "Print DBG statements"); /* must be before dahdi_debug.h */
|
static DEF_PARM(int, debug, 0, 0644, "Print DBG statements"); /* must be before dahdi_debug.h */
|
||||||
static DEF_PARM(uint, poll_interval, 500, 0644, "Poll channel state interval in milliseconds (0 - disable)");
|
static DEF_PARM(uint, poll_interval, 500, 0644, "Poll channel state interval in milliseconds (0 - disable)");
|
||||||
static DEF_PARM_BOOL(nt_keepalive, 1, 0644, "Force BRI_NT to keep trying connection");
|
static DEF_PARM_BOOL(nt_keepalive, 1, 0644, "Force BRI_NT to keep trying connection");
|
||||||
@ -129,22 +133,7 @@ typedef union {
|
|||||||
#define REG30_LOST 3 /* in polls */
|
#define REG30_LOST 3 /* in polls */
|
||||||
#define DCHAN_LOST 15000 /* in ticks */
|
#define DCHAN_LOST 15000 /* in ticks */
|
||||||
|
|
||||||
#ifdef CONFIG_DAHDI_BRI_DCHANS
|
|
||||||
#define BRI_DCHAN_SIGCAP ( \
|
|
||||||
DAHDI_SIG_EM | \
|
|
||||||
DAHDI_SIG_CLEAR | \
|
|
||||||
DAHDI_SIG_FXSLS | \
|
|
||||||
DAHDI_SIG_FXSGS | \
|
|
||||||
DAHDI_SIG_FXSKS | \
|
|
||||||
DAHDI_SIG_FXOLS | \
|
|
||||||
DAHDI_SIG_FXOGS | \
|
|
||||||
DAHDI_SIG_FXOKS | \
|
|
||||||
DAHDI_SIG_CAS | \
|
|
||||||
DAHDI_SIG_SF \
|
|
||||||
)
|
|
||||||
#else
|
|
||||||
#define BRI_DCHAN_SIGCAP DAHDI_SIG_HARDHDLC
|
#define BRI_DCHAN_SIGCAP DAHDI_SIG_HARDHDLC
|
||||||
#endif
|
|
||||||
#define BRI_BCHAN_SIGCAP (DAHDI_SIG_CLEAR | DAHDI_SIG_DACS)
|
#define BRI_BCHAN_SIGCAP (DAHDI_SIG_CLEAR | DAHDI_SIG_DACS)
|
||||||
|
|
||||||
#define IS_NT(xpd) (PHONEDEV(xpd).direction == TO_PHONE)
|
#define IS_NT(xpd) (PHONEDEV(xpd).direction == TO_PHONE)
|
||||||
@ -218,12 +207,7 @@ struct BRI_priv_data {
|
|||||||
/*
|
/*
|
||||||
* D-Chan: buffers + extra state info.
|
* D-Chan: buffers + extra state info.
|
||||||
*/
|
*/
|
||||||
#ifdef CONFIG_DAHDI_BRI_DCHANS
|
|
||||||
int dchan_r_idx;
|
|
||||||
byte dchan_rbuf[DCHAN_BUFSIZE];
|
|
||||||
#else
|
|
||||||
atomic_t hdlc_pending;
|
atomic_t hdlc_pending;
|
||||||
#endif
|
|
||||||
byte dchan_tbuf[DCHAN_BUFSIZE];
|
byte dchan_tbuf[DCHAN_BUFSIZE];
|
||||||
bool txframe_begin;
|
bool txframe_begin;
|
||||||
|
|
||||||
@ -444,14 +428,7 @@ static void bri_hdlc_abort(xpd_t *xpd, struct dahdi_chan *dchan, int event)
|
|||||||
|
|
||||||
priv = xpd->priv;
|
priv = xpd->priv;
|
||||||
BUG_ON(!priv);
|
BUG_ON(!priv);
|
||||||
#ifdef CONFIG_DAHDI_BRI_DCHANS
|
|
||||||
if(debug & DBG_COMMANDS)
|
|
||||||
dump_hex_buf(xpd, "D-Chan(abort) RX: dchan_rbuf",
|
|
||||||
priv->dchan_rbuf, priv->dchan_r_idx);
|
|
||||||
priv->dchan_r_idx = 0;
|
|
||||||
#else
|
|
||||||
dahdi_hdlc_abort(dchan, event);
|
dahdi_hdlc_abort(dchan, event);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int bri_check_stat(xpd_t *xpd, struct dahdi_chan *dchan, byte *buf, int len)
|
static int bri_check_stat(xpd_t *xpd, struct dahdi_chan *dchan, byte *buf, int len)
|
||||||
@ -461,21 +438,11 @@ static int bri_check_stat(xpd_t *xpd, struct dahdi_chan *dchan, byte *buf, int l
|
|||||||
|
|
||||||
priv = xpd->priv;
|
priv = xpd->priv;
|
||||||
BUG_ON(!priv);
|
BUG_ON(!priv);
|
||||||
#ifdef CONFIG_DAHDI_BRI_DCHANS
|
|
||||||
if(priv->dchan_r_idx < 4) {
|
|
||||||
XPD_NOTICE(xpd, "D-Chan RX short frame (dchan_r_idx=%d)\n",
|
|
||||||
priv->dchan_r_idx);
|
|
||||||
dump_hex_buf(xpd, "D-Chan RX: current packet", buf, len);
|
|
||||||
bri_hdlc_abort(xpd, dchan, DAHDI_EVENT_ABORT);
|
|
||||||
return -EPROTO;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
if(len <= 0) {
|
if(len <= 0) {
|
||||||
XPD_NOTICE(xpd, "D-Chan RX DROP: short frame (len=%d)\n", len);
|
XPD_NOTICE(xpd, "D-Chan RX DROP: short frame (len=%d)\n", len);
|
||||||
bri_hdlc_abort(xpd, dchan, DAHDI_EVENT_ABORT);
|
bri_hdlc_abort(xpd, dchan, DAHDI_EVENT_ABORT);
|
||||||
return -EPROTO;
|
return -EPROTO;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
status = buf[len-1];
|
status = buf[len-1];
|
||||||
if(status) {
|
if(status) {
|
||||||
int event = DAHDI_EVENT_ABORT;
|
int event = DAHDI_EVENT_ABORT;
|
||||||
@ -496,29 +463,7 @@ static int bri_check_stat(xpd_t *xpd, struct dahdi_chan *dchan, byte *buf, int l
|
|||||||
static int bri_hdlc_putbuf(xpd_t *xpd, struct dahdi_chan *dchan,
|
static int bri_hdlc_putbuf(xpd_t *xpd, struct dahdi_chan *dchan,
|
||||||
unsigned char *buf, int len)
|
unsigned char *buf, int len)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_DAHDI_BRI_DCHANS
|
|
||||||
struct BRI_priv_data *priv;
|
|
||||||
byte *dchan_buf;
|
|
||||||
byte *dst;
|
|
||||||
int idx;
|
|
||||||
|
|
||||||
priv = xpd->priv;
|
|
||||||
BUG_ON(!priv);
|
|
||||||
dchan_buf = dchan->readchunk;
|
|
||||||
idx = priv->dchan_r_idx;
|
|
||||||
if(idx + len >= DCHAN_BUFSIZE) {
|
|
||||||
XPD_ERR(xpd, "D-Chan RX overflow: %d\n", idx);
|
|
||||||
dump_hex_buf(xpd, " current packet", buf, len);
|
|
||||||
dump_hex_buf(xpd, " dchan_buf", dchan_buf, idx);
|
|
||||||
return -ENOSPC;
|
|
||||||
}
|
|
||||||
dst = dchan_buf + idx;
|
|
||||||
idx += len;
|
|
||||||
priv->dchan_r_idx = idx;
|
|
||||||
memcpy(dst, buf, len);
|
|
||||||
#else
|
|
||||||
dahdi_hdlc_putbuf(dchan, buf, len);
|
dahdi_hdlc_putbuf(dchan, buf, len);
|
||||||
#endif
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -528,91 +473,9 @@ static void bri_hdlc_finish(xpd_t *xpd, struct dahdi_chan *dchan)
|
|||||||
|
|
||||||
priv = xpd->priv;
|
priv = xpd->priv;
|
||||||
BUG_ON(!priv);
|
BUG_ON(!priv);
|
||||||
#ifdef CONFIG_DAHDI_BRI_DCHANS
|
|
||||||
dchan->bytes2receive = priv->dchan_r_idx - 1;
|
|
||||||
dchan->eofrx = 1;
|
|
||||||
#else
|
|
||||||
dahdi_hdlc_finish(dchan);
|
dahdi_hdlc_finish(dchan);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_DAHDI_BRI_DCHANS
|
|
||||||
static int rx_dchan(xpd_t *xpd, reg_cmd_t *regcmd)
|
|
||||||
{
|
|
||||||
struct BRI_priv_data *priv;
|
|
||||||
byte *src;
|
|
||||||
byte *dst;
|
|
||||||
byte *dchan_buf;
|
|
||||||
struct dahdi_chan *dchan;
|
|
||||||
uint len;
|
|
||||||
bool eoframe;
|
|
||||||
int idx;
|
|
||||||
int ret = 0;
|
|
||||||
|
|
||||||
src = REG_XDATA(regcmd);
|
|
||||||
len = regcmd->bytes;
|
|
||||||
eoframe = regcmd->eoframe;
|
|
||||||
if(len <= 0)
|
|
||||||
return 0;
|
|
||||||
if(!SPAN_REGISTERED(xpd)) /* Nowhere to copy data */
|
|
||||||
return 0;
|
|
||||||
BUG_ON(!xpd);
|
|
||||||
priv = xpd->priv;
|
|
||||||
BUG_ON(!priv);
|
|
||||||
xbus = xpd->xbus;
|
|
||||||
dchan = XPD_CHAN(xpd, 2);
|
|
||||||
if(!IS_OFFHOOK(xpd, 2)) { /* D-chan is used? */
|
|
||||||
static int rate_limit;
|
|
||||||
|
|
||||||
if((rate_limit++ % 1000) == 0)
|
|
||||||
XPD_DBG(SIGNAL, xpd, "D-Chan unused\n");
|
|
||||||
dchan->bytes2receive = 0;
|
|
||||||
dchan->bytes2transmit = 0;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
dchan_buf = dchan->readchunk;
|
|
||||||
idx = priv->dchan_r_idx;
|
|
||||||
if(idx + len >= DCHAN_BUFSIZE) {
|
|
||||||
XPD_ERR(xpd, "D-Chan RX overflow: %d\n", idx);
|
|
||||||
dump_hex_buf(xpd, " current packet", src, len);
|
|
||||||
dump_hex_buf(xpd, " dchan_buf", dchan_buf, idx);
|
|
||||||
ret = -ENOSPC;
|
|
||||||
if(eoframe)
|
|
||||||
goto drop;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
dst = dchan_buf + idx;
|
|
||||||
idx += len;
|
|
||||||
priv->dchan_r_idx = idx;
|
|
||||||
memcpy(dst, src, len);
|
|
||||||
if(!eoframe)
|
|
||||||
goto out;
|
|
||||||
if(idx < 4) {
|
|
||||||
XPD_NOTICE(xpd, "D-Chan RX short frame (idx=%d)\n", idx);
|
|
||||||
dump_hex_buf(xpd, "D-Chan RX: current packet", src, len);
|
|
||||||
dump_hex_buf(xpd, "D-Chan RX: chan_buf", dchan_buf, idx);
|
|
||||||
ret = -EPROTO;
|
|
||||||
goto drop;
|
|
||||||
}
|
|
||||||
if((ret = bri_check_stat(xpd, dchan, dchan_buf, idx)) < 0)
|
|
||||||
goto drop;
|
|
||||||
if(debug)
|
|
||||||
dump_dchan_packet(xpd, 0, dchan_buf, idx /* - 3 */); /* Print checksum? */
|
|
||||||
/*
|
|
||||||
* Tell Dahdi that we received idx-1 bytes. They include the data and a 2-byte checksum.
|
|
||||||
* The last byte (that we don't pass on) is 0 if the checksum is correct. If it were wrong,
|
|
||||||
* we would drop the packet in the "if(dchan_buf[idx-1])" above.
|
|
||||||
*/
|
|
||||||
dchan->bytes2receive = idx - 1;
|
|
||||||
dchan->eofrx = 1;
|
|
||||||
priv->dchan_rx_counter++;
|
|
||||||
priv->dchan_norx_ticks = 0;
|
|
||||||
drop:
|
|
||||||
priv->dchan_r_idx = 0;
|
|
||||||
out:
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
static int rx_dchan(xpd_t *xpd, reg_cmd_t *regcmd)
|
static int rx_dchan(xpd_t *xpd, reg_cmd_t *regcmd)
|
||||||
{
|
{
|
||||||
struct BRI_priv_data *priv;
|
struct BRI_priv_data *priv;
|
||||||
@ -638,10 +501,6 @@ static int rx_dchan(xpd_t *xpd, reg_cmd_t *regcmd)
|
|||||||
|
|
||||||
if((rate_limit++ % 1000) == 0)
|
if((rate_limit++ % 1000) == 0)
|
||||||
XPD_DBG(SIGNAL, xpd, "D-Chan unused\n");
|
XPD_DBG(SIGNAL, xpd, "D-Chan unused\n");
|
||||||
#ifdef CONFIG_DAHDI_BRI_DCHANS
|
|
||||||
dchan->bytes2receive = 0;
|
|
||||||
dchan->bytes2transmit = 0;
|
|
||||||
#endif
|
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
XPD_DBG(GENERAL, xpd, "D-Chan RX: eoframe=%d len=%d\n", eoframe, len);
|
XPD_DBG(GENERAL, xpd, "D-Chan RX: eoframe=%d len=%d\n", eoframe, len);
|
||||||
@ -663,12 +522,10 @@ static int rx_dchan(xpd_t *xpd, reg_cmd_t *regcmd)
|
|||||||
out:
|
out:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* D-Chan transmit
|
* D-Chan transmit
|
||||||
*/
|
*/
|
||||||
#ifndef CONFIG_DAHDI_BRI_DCHANS
|
|
||||||
/* DAHDI calls this when it has data it wants to send to the HDLC controller */
|
/* DAHDI calls this when it has data it wants to send to the HDLC controller */
|
||||||
static void bri_hdlc_hard_xmit(struct dahdi_chan *chan)
|
static void bri_hdlc_hard_xmit(struct dahdi_chan *chan)
|
||||||
{
|
{
|
||||||
@ -683,7 +540,6 @@ static void bri_hdlc_hard_xmit(struct dahdi_chan *chan)
|
|||||||
atomic_inc(&priv->hdlc_pending);
|
atomic_inc(&priv->hdlc_pending);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
static int bri_hdlc_getbuf(struct dahdi_chan *dchan, unsigned char *buf,
|
static int bri_hdlc_getbuf(struct dahdi_chan *dchan, unsigned char *buf,
|
||||||
unsigned int *size)
|
unsigned int *size)
|
||||||
@ -691,18 +547,7 @@ static int bri_hdlc_getbuf(struct dahdi_chan *dchan, unsigned char *buf,
|
|||||||
int len = *size;
|
int len = *size;
|
||||||
int eoframe;
|
int eoframe;
|
||||||
|
|
||||||
#ifdef CONFIG_DAHDI_BRI_DCHANS
|
|
||||||
len = dchan->bytes2transmit; /* dchan's hdlc package len */
|
|
||||||
if(len > *size)
|
|
||||||
len = *size; /* Silent truncation */
|
|
||||||
eoframe = dchan->eoftx; /* dchan's end of frame */
|
|
||||||
dchan->bytes2transmit = 0;
|
|
||||||
dchan->eoftx = 0;
|
|
||||||
dchan->bytes2receive = 0;
|
|
||||||
dchan->eofrx = 0;
|
|
||||||
#else
|
|
||||||
eoframe = dahdi_hdlc_getbuf(dchan, buf, &len);
|
eoframe = dahdi_hdlc_getbuf(dchan, buf, &len);
|
||||||
#endif
|
|
||||||
*size = len;
|
*size = len;
|
||||||
return eoframe;
|
return eoframe;
|
||||||
}
|
}
|
||||||
@ -717,10 +562,8 @@ static int tx_dchan(xpd_t *xpd)
|
|||||||
|
|
||||||
priv = xpd->priv;
|
priv = xpd->priv;
|
||||||
BUG_ON(!priv);
|
BUG_ON(!priv);
|
||||||
#ifndef CONFIG_DAHDI_BRI_DCHANS
|
|
||||||
if(atomic_read(&priv->hdlc_pending) == 0)
|
if(atomic_read(&priv->hdlc_pending) == 0)
|
||||||
return 0;
|
return 0;
|
||||||
#endif
|
|
||||||
if(!SPAN_REGISTERED(xpd) || !(PHONEDEV(xpd).span.flags & DAHDI_FLAG_RUNNING))
|
if(!SPAN_REGISTERED(xpd) || !(PHONEDEV(xpd).span.flags & DAHDI_FLAG_RUNNING))
|
||||||
return 0;
|
return 0;
|
||||||
dchan = XPD_CHAN(xpd, 2);
|
dchan = XPD_CHAN(xpd, 2);
|
||||||
@ -754,9 +597,7 @@ static int tx_dchan(xpd_t *xpd)
|
|||||||
if(ret < 0)
|
if(ret < 0)
|
||||||
XPD_NOTICE(xpd, "%s: failed sending xframe\n", __FUNCTION__);
|
XPD_NOTICE(xpd, "%s: failed sending xframe\n", __FUNCTION__);
|
||||||
if(eoframe) {
|
if(eoframe) {
|
||||||
#ifndef CONFIG_DAHDI_BRI_DCHANS
|
|
||||||
atomic_dec(&priv->hdlc_pending);
|
atomic_dec(&priv->hdlc_pending);
|
||||||
#endif
|
|
||||||
priv->dchan_tx_counter++;
|
priv->dchan_tx_counter++;
|
||||||
}
|
}
|
||||||
priv->dchan_notx_ticks = 0;
|
priv->dchan_notx_ticks = 0;
|
||||||
@ -853,9 +694,7 @@ static const struct dahdi_span_ops BRI_span_ops = {
|
|||||||
.chanconfig = bri_chanconfig,
|
.chanconfig = bri_chanconfig,
|
||||||
.startup = bri_startup,
|
.startup = bri_startup,
|
||||||
.shutdown = bri_shutdown,
|
.shutdown = bri_shutdown,
|
||||||
#ifndef CONFIG_DAHDI_BRI_DCHANS
|
|
||||||
.hdlc_hard_xmit = bri_hdlc_hard_xmit,
|
.hdlc_hard_xmit = bri_hdlc_hard_xmit,
|
||||||
#endif
|
|
||||||
.open = xpp_open,
|
.open = xpp_open,
|
||||||
.close = xpp_close,
|
.close = xpp_close,
|
||||||
.hooksig = xpp_hooksig, /* Only with RBS bits */
|
.hooksig = xpp_hooksig, /* Only with RBS bits */
|
||||||
@ -904,19 +743,7 @@ static int BRI_card_dahdi_preregistration(xpd_t *xpd, bool on)
|
|||||||
cur_chan->sigcap = BRI_DCHAN_SIGCAP;
|
cur_chan->sigcap = BRI_DCHAN_SIGCAP;
|
||||||
clear_bit(DAHDI_FLAGBIT_HDLC, &cur_chan->flags);
|
clear_bit(DAHDI_FLAGBIT_HDLC, &cur_chan->flags);
|
||||||
priv->txframe_begin = 1;
|
priv->txframe_begin = 1;
|
||||||
#ifdef CONFIG_DAHDI_BRI_DCHANS
|
|
||||||
priv->dchan_r_idx = 0;
|
|
||||||
set_bit(DAHDI_FLAGBIT_BRIDCHAN, &cur_chan->flags);
|
|
||||||
/* Setup big buffers for D-Channel rx/tx */
|
|
||||||
cur_chan->readchunk = priv->dchan_rbuf;
|
|
||||||
cur_chan->writechunk = priv->dchan_tbuf;
|
|
||||||
|
|
||||||
cur_chan->maxbytes2transmit = MULTIBYTE_MAX_LEN;
|
|
||||||
cur_chan->bytes2transmit = 0;
|
|
||||||
cur_chan->bytes2receive = 0;
|
|
||||||
#else
|
|
||||||
atomic_set(&priv->hdlc_pending, 0);
|
atomic_set(&priv->hdlc_pending, 0);
|
||||||
#endif
|
|
||||||
} else {
|
} else {
|
||||||
cur_chan->sigcap = BRI_BCHAN_SIGCAP;
|
cur_chan->sigcap = BRI_BCHAN_SIGCAP;
|
||||||
}
|
}
|
||||||
@ -1146,15 +973,6 @@ static int BRI_card_open(xpd_t *xpd, lineno_t pos)
|
|||||||
static int BRI_card_close(xpd_t *xpd, lineno_t pos)
|
static int BRI_card_close(xpd_t *xpd, lineno_t pos)
|
||||||
{
|
{
|
||||||
/* Clear D-Channel pending data */
|
/* Clear D-Channel pending data */
|
||||||
#ifdef CONFIG_DAHDI_BRI_DCHANS
|
|
||||||
struct dahdi_chan *chan = XPD_CHAN(xpd, pos);
|
|
||||||
|
|
||||||
/* Clear D-Channel pending data */
|
|
||||||
chan->bytes2receive = 0;
|
|
||||||
chan->eofrx = 0;
|
|
||||||
chan->bytes2transmit = 0;
|
|
||||||
chan->eoftx = 0;
|
|
||||||
#endif
|
|
||||||
if(pos == 2) {
|
if(pos == 2) {
|
||||||
LINE_DBG(SIGNAL, xpd, pos, "ONHOOK the whole span\n");
|
LINE_DBG(SIGNAL, xpd, pos, "ONHOOK the whole span\n");
|
||||||
BIT_CLR(PHONEDEV(xpd).offhook_state, 0);
|
BIT_CLR(PHONEDEV(xpd).offhook_state, 0);
|
||||||
@ -1255,9 +1073,6 @@ static int bri_startup(struct file *file, struct dahdi_span *span)
|
|||||||
*
|
*
|
||||||
* Don't Get Mad, Get Even: Now we override dahdi :-)
|
* Don't Get Mad, Get Even: Now we override dahdi :-)
|
||||||
*/
|
*/
|
||||||
#ifdef CONFIG_DAHDI_BRI_DCHANS
|
|
||||||
set_bit(DAHDI_FLAGBIT_BRIDCHAN, &dchan->flags);
|
|
||||||
#endif
|
|
||||||
clear_bit(DAHDI_FLAGBIT_HDLC, &dchan->flags);
|
clear_bit(DAHDI_FLAGBIT_HDLC, &dchan->flags);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@ -1790,9 +1605,6 @@ static int proc_bri_info_read(char *page, char **start, off_t off, int count, in
|
|||||||
} else {
|
} else {
|
||||||
len += sprintf(page + len, "(dead)\n");
|
len += sprintf(page + len, "(dead)\n");
|
||||||
}
|
}
|
||||||
#ifndef CONFIG_DAHDI_BRI_DCHANS
|
|
||||||
len += sprintf(page + len, "hdlc_pending=%d\n", atomic_read(&priv->hdlc_pending));
|
|
||||||
#endif
|
|
||||||
len += sprintf(page + len, "dchan_notx_ticks: %d\n", priv->dchan_notx_ticks);
|
len += sprintf(page + len, "dchan_notx_ticks: %d\n", priv->dchan_notx_ticks);
|
||||||
len += sprintf(page + len, "dchan_norx_ticks: %d\n", priv->dchan_norx_ticks);
|
len += sprintf(page + len, "dchan_norx_ticks: %d\n", priv->dchan_norx_ticks);
|
||||||
len += sprintf(page + len, "LED: %-10s = %d\n", "GREEN", priv->ledstate[GREEN_LED]);
|
len += sprintf(page + len, "LED: %-10s = %d\n", "GREEN", priv->ledstate[GREEN_LED]);
|
||||||
@ -1812,22 +1624,6 @@ static int proc_bri_info_read(char *page, char **start, off_t off, int count, in
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static DRIVER_ATTR_READER(dchan_hardhdlc_show, drv,buf)
|
|
||||||
{
|
|
||||||
int len = 0;
|
|
||||||
|
|
||||||
#if defined(CONFIG_DAHDI_BRI_DCHANS)
|
|
||||||
len += sprintf(buf + len, "0\n");
|
|
||||||
#elif defined(DAHDI_SIG_HARDHDLC)
|
|
||||||
len += sprintf(buf + len, "1\n");
|
|
||||||
#else
|
|
||||||
#error Cannot build BRI without BRISTUFF or HARDHDLC supprt
|
|
||||||
#endif
|
|
||||||
return len;
|
|
||||||
}
|
|
||||||
|
|
||||||
static DRIVER_ATTR(dchan_hardhdlc,S_IRUGO,dchan_hardhdlc_show,NULL);
|
|
||||||
|
|
||||||
static int bri_xpd_probe(struct device *dev)
|
static int bri_xpd_probe(struct device *dev)
|
||||||
{
|
{
|
||||||
xpd_t *xpd;
|
xpd_t *xpd;
|
||||||
@ -1870,18 +1666,7 @@ static int __init card_bri_startup(void)
|
|||||||
|
|
||||||
if((ret = xpd_driver_register(&bri_driver.driver)) < 0)
|
if((ret = xpd_driver_register(&bri_driver.driver)) < 0)
|
||||||
return ret;
|
return ret;
|
||||||
ret = driver_create_file(&bri_driver.driver, &driver_attr_dchan_hardhdlc);
|
|
||||||
if(ret < 0)
|
|
||||||
return ret;
|
|
||||||
INFO("revision %s\n", XPP_VERSION);
|
INFO("revision %s\n", XPP_VERSION);
|
||||||
#if defined(CONFIG_DAHDI_BRI_DCHANS)
|
|
||||||
INFO("FEATURE: WITH BRISTUFF\n");
|
|
||||||
#elif defined(DAHDI_SIG_HARDHDLC)
|
|
||||||
INFO("FEATURE: WITH HARDHDLC\n");
|
|
||||||
#else
|
|
||||||
#error Cannot build BRI without BRISTUFF or HARDHDLC supprt
|
|
||||||
#endif
|
|
||||||
|
|
||||||
xproto_register(&PROTO_TABLE(BRI));
|
xproto_register(&PROTO_TABLE(BRI));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1890,7 +1675,6 @@ static void __exit card_bri_cleanup(void)
|
|||||||
{
|
{
|
||||||
DBG(GENERAL, "\n");
|
DBG(GENERAL, "\n");
|
||||||
xproto_unregister(&PROTO_TABLE(BRI));
|
xproto_unregister(&PROTO_TABLE(BRI));
|
||||||
driver_remove_file(&bri_driver.driver, &driver_attr_dchan_hardhdlc);
|
|
||||||
xpd_driver_unregister(&bri_driver.driver);
|
xpd_driver_unregister(&bri_driver.driver);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1136,11 +1136,6 @@ static int __init xpp_dahdi_init(void)
|
|||||||
|
|
||||||
INFO("revision %s MAX_XPDS=%d (%d*%d)\n", XPP_VERSION,
|
INFO("revision %s MAX_XPDS=%d (%d*%d)\n", XPP_VERSION,
|
||||||
MAX_XPDS, MAX_UNIT, MAX_SUBUNIT);
|
MAX_XPDS, MAX_UNIT, MAX_SUBUNIT);
|
||||||
#ifdef CONFIG_DAHDI_BRI_DCHANS
|
|
||||||
INFO("FEATURE: with BRISTUFF support\n");
|
|
||||||
#else
|
|
||||||
INFO("FEATURE: without BRISTUFF support\n");
|
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_PROC_FS
|
#ifdef CONFIG_PROC_FS
|
||||||
xpp_proc_toplevel = proc_mkdir(PROC_DIR, NULL);
|
xpp_proc_toplevel = proc_mkdir(PROC_DIR, NULL);
|
||||||
if(!xpp_proc_toplevel) {
|
if(!xpp_proc_toplevel) {
|
||||||
|
Loading…
Reference in New Issue
Block a user