xpp: phonedev: Cleanup method macros
* Caller to CALL_XMETHOD() no longer need to explicitly pass xbus (calculate xpd->xbus) * Create CALL_PHONE_METHOD() similar to CALL_XMETHOD() -- inlining the extra parameters (more readable) * Reverse parameter order in PHONE_METHOD() and CALL_PHONE_METHOD() to be consistent with XMETHOD() and CALL_XMETHOD() * Rename XPD_STATE phonedev method to card_state: - Consistency with other phonedev methods. - These calls now Wrap internal calls to XPD_STATE protocol HOSTCMD in PRI, BRI, FXS, FXO Signed-off-by: Oron Peled <oron@actcom.co.il> Acked-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com> git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@9706 a0bf4364-ded3-4de4-8d8a-66a801d63aff
This commit is contained in:
parent
1584ff6a7d
commit
1331610048
@ -932,7 +932,7 @@ static int BRI_card_dahdi_preregistration(xpd_t *xpd, bool on)
|
||||
cur_chan->sigcap = BRI_BCHAN_SIGCAP;
|
||||
}
|
||||
}
|
||||
PHONE_METHOD(xpd, card_pcm_recompute)(xpd->xbus, xpd, 0);
|
||||
CALL_PHONE_METHOD(card_pcm_recompute, xpd, 0);
|
||||
PHONEDEV(xpd).span.ops = &BRI_span_ops;
|
||||
return 0;
|
||||
}
|
||||
@ -950,7 +950,7 @@ static int BRI_card_dahdi_postregistration(xpd_t *xpd, bool on)
|
||||
return(0);
|
||||
}
|
||||
|
||||
static int BRI_card_hooksig(xbus_t *xbus, xpd_t *xpd, int pos, enum dahdi_txsig txsig)
|
||||
static int BRI_card_hooksig(xpd_t *xpd, int pos, enum dahdi_txsig txsig)
|
||||
{
|
||||
LINE_DBG(SIGNAL, xpd, pos, "%s\n", txsig2str(txsig));
|
||||
return 0;
|
||||
@ -1154,7 +1154,7 @@ static int BRI_card_open(xpd_t *xpd, lineno_t pos)
|
||||
BIT_SET(PHONEDEV(xpd).offhook_state, 0);
|
||||
BIT_SET(PHONEDEV(xpd).offhook_state, 1);
|
||||
BIT_SET(PHONEDEV(xpd).offhook_state, 2);
|
||||
PHONE_METHOD(xpd, card_pcm_recompute)(xpd->xbus, xpd, 0);
|
||||
CALL_PHONE_METHOD(card_pcm_recompute, xpd, 0);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -1176,7 +1176,7 @@ static int BRI_card_close(xpd_t *xpd, lineno_t pos)
|
||||
BIT_CLR(PHONEDEV(xpd).offhook_state, 0);
|
||||
BIT_CLR(PHONEDEV(xpd).offhook_state, 1);
|
||||
BIT_CLR(PHONEDEV(xpd).offhook_state, 2);
|
||||
PHONE_METHOD(xpd, card_pcm_recompute)(xpd->xbus, xpd, 0);
|
||||
CALL_PHONE_METHOD(card_pcm_recompute, xpd, 0);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -1257,7 +1257,7 @@ static int bri_startup(struct dahdi_span *span)
|
||||
}
|
||||
XPD_DBG(GENERAL, xpd, "STARTUP\n");
|
||||
// Turn on all channels
|
||||
PHONE_METHOD(xpd, XPD_STATE)(xpd->xbus, xpd, 1);
|
||||
CALL_PHONE_METHOD(card_state, xpd, 1);
|
||||
if(SPAN_REGISTERED(xpd)) {
|
||||
dchan = XPD_CHAN(xpd, 2);
|
||||
span->flags |= DAHDI_FLAG_RUNNING;
|
||||
@ -1293,11 +1293,11 @@ static int bri_shutdown(struct dahdi_span *span)
|
||||
}
|
||||
XPD_DBG(GENERAL, xpd, "SHUTDOWN\n");
|
||||
// Turn off all channels
|
||||
PHONE_METHOD(xpd, XPD_STATE)(xpd->xbus, xpd, 0);
|
||||
CALL_PHONE_METHOD(card_state, xpd, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void BRI_card_pcm_recompute(xbus_t *xbus, xpd_t *xpd,
|
||||
static void BRI_card_pcm_recompute(xpd_t *xpd,
|
||||
xpp_line_t dont_care)
|
||||
{
|
||||
int i;
|
||||
@ -1308,7 +1308,7 @@ static void BRI_card_pcm_recompute(xbus_t *xbus, xpd_t *xpd,
|
||||
unsigned long flags;
|
||||
|
||||
BUG_ON(!xpd);
|
||||
main_xpd = xpd_byaddr(xbus, xpd->addr.unit, 0);
|
||||
main_xpd = xpd_byaddr(xpd->xbus, xpd->addr.unit, 0);
|
||||
if(!main_xpd) {
|
||||
XPD_DBG(DEVICES, xpd, "Unit 0 is already gone. Ignore request\n");
|
||||
return;
|
||||
@ -1321,7 +1321,7 @@ static void BRI_card_pcm_recompute(xbus_t *xbus, xpd_t *xpd,
|
||||
line_count = 0;
|
||||
pcm_mask = 0;
|
||||
for(i = 0; i < MAX_SUBUNIT; i++) {
|
||||
xpd_t *sub_xpd = xpd_byaddr(xbus, main_xpd->addr.unit, i);
|
||||
xpd_t *sub_xpd = xpd_byaddr(xpd->xbus, main_xpd->addr.unit, i);
|
||||
|
||||
if(sub_xpd) {
|
||||
xpp_line_t lines =
|
||||
@ -1355,7 +1355,7 @@ static void BRI_card_pcm_recompute(xbus_t *xbus, xpd_t *xpd,
|
||||
spin_unlock_irqrestore(&PHONEDEV(main_xpd).lock_recompute_pcm, flags);
|
||||
}
|
||||
|
||||
static void BRI_card_pcm_fromspan(xbus_t *xbus, xpd_t *xpd, xpacket_t *pack)
|
||||
static void BRI_card_pcm_fromspan(xpd_t *xpd, xpacket_t *pack)
|
||||
{
|
||||
byte *pcm;
|
||||
unsigned long flags;
|
||||
@ -1365,14 +1365,13 @@ static void BRI_card_pcm_fromspan(xbus_t *xbus, xpd_t *xpd, xpacket_t *pack)
|
||||
xpp_line_t wanted_lines;
|
||||
|
||||
|
||||
BUG_ON(!xbus);
|
||||
BUG_ON(!xpd);
|
||||
BUG_ON(!pack);
|
||||
pcm = RPACKET_FIELD(pack, GLOBAL, PCM_WRITE, pcm);
|
||||
for(subunit = 0; subunit < MAX_SUBUNIT; subunit++) {
|
||||
xpd_t *tmp_xpd;
|
||||
|
||||
tmp_xpd = xpd_byaddr(xbus, xpd->addr.unit, subunit);
|
||||
tmp_xpd = xpd_byaddr(xpd->xbus, xpd->addr.unit, subunit);
|
||||
if(!tmp_xpd || !tmp_xpd->card_present)
|
||||
continue;
|
||||
spin_lock_irqsave(&tmp_xpd->lock, flags);
|
||||
@ -1402,7 +1401,7 @@ static void BRI_card_pcm_fromspan(xbus_t *xbus, xpd_t *xpd, xpacket_t *pack)
|
||||
RPACKET_FIELD(pack, GLOBAL, PCM_WRITE, lines) = pcm_mask;
|
||||
}
|
||||
|
||||
static void BRI_card_pcm_tospan(xbus_t *xbus, xpd_t *xpd, xpacket_t *pack)
|
||||
static void BRI_card_pcm_tospan(xpd_t *xpd, xpacket_t *pack)
|
||||
{
|
||||
byte *pcm;
|
||||
xpp_line_t pcm_mask;
|
||||
@ -1424,7 +1423,7 @@ static void BRI_card_pcm_tospan(xbus_t *xbus, xpd_t *xpd, xpacket_t *pack)
|
||||
|
||||
if(!pcm_mask)
|
||||
break; /* optimize */
|
||||
tmp_xpd = xpd_byaddr(xbus, xpd->addr.unit, subunit);
|
||||
tmp_xpd = xpd_byaddr(xpd->xbus, xpd->addr.unit, subunit);
|
||||
if(!tmp_xpd || !tmp_xpd->card_present || !SPAN_REGISTERED(tmp_xpd))
|
||||
continue;
|
||||
spin_lock_irqsave(&tmp_xpd->lock, flags);
|
||||
@ -1670,6 +1669,11 @@ end:
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int BRI_card_state(xpd_t *xpd, bool on)
|
||||
{
|
||||
return CALL_PROTO(BRI, XPD_STATE, xpd->xbus, xpd, on);
|
||||
}
|
||||
|
||||
static const struct xops bri_xops = {
|
||||
.card_new = BRI_card_new,
|
||||
.card_init = BRI_card_init,
|
||||
@ -1689,8 +1693,7 @@ static const struct phoneops bri_phoneops = {
|
||||
.card_ioctl = BRI_card_ioctl,
|
||||
.card_open = BRI_card_open,
|
||||
.card_close = BRI_card_close,
|
||||
|
||||
.XPD_STATE = XPROTO_CALLER(BRI, XPD_STATE),
|
||||
.card_state = BRI_card_state,
|
||||
};
|
||||
|
||||
static xproto_table_t PROTO_TABLE(BRI) = {
|
||||
|
@ -482,7 +482,7 @@ static int FXO_card_init(xbus_t *xbus, xpd_t *xpd)
|
||||
do_led(xpd, i, LED_GREEN, 0);
|
||||
msleep(50);
|
||||
}
|
||||
PHONE_METHOD(xpd, card_pcm_recompute)(xbus, xpd, 0);
|
||||
CALL_PHONE_METHOD(card_pcm_recompute, xpd, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -555,7 +555,7 @@ static int FXO_card_dahdi_postregistration(xpd_t *xpd, bool on)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int FXO_card_hooksig(xbus_t *xbus, xpd_t *xpd, int pos, enum dahdi_txsig txsig)
|
||||
static int FXO_card_hooksig(xpd_t *xpd, int pos, enum dahdi_txsig txsig)
|
||||
{
|
||||
struct FXO_priv_data *priv;
|
||||
int ret = 0;
|
||||
@ -1111,6 +1111,11 @@ static int FXO_card_register_reply(xbus_t *xbus, xpd_t *xpd, reg_cmd_t *info)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int FXO_card_state(xpd_t *xpd, bool on)
|
||||
{
|
||||
return CALL_PROTO(FXO, XPD_STATE, xpd->xbus, xpd, on);
|
||||
}
|
||||
|
||||
static const struct xops fxo_xops = {
|
||||
.card_new = FXO_card_new,
|
||||
.card_init = FXO_card_init,
|
||||
@ -1129,8 +1134,7 @@ static const struct phoneops fxo_phoneops = {
|
||||
.card_timing_priority = generic_timing_priority,
|
||||
.card_ioctl = FXO_card_ioctl,
|
||||
.card_open = FXO_card_open,
|
||||
|
||||
.XPD_STATE = XPROTO_CALLER(FXO, XPD_STATE),
|
||||
.card_state = FXO_card_state,
|
||||
};
|
||||
|
||||
static xproto_table_t PROTO_TABLE(FXO) = {
|
||||
|
@ -455,7 +455,7 @@ static int FXS_card_init(xbus_t *xbus, xpd_t *xpd)
|
||||
msleep(50);
|
||||
}
|
||||
restore_leds(xpd);
|
||||
PHONE_METHOD(xpd, card_pcm_recompute)(xbus, xpd, 0);
|
||||
CALL_PHONE_METHOD(card_pcm_recompute, xpd, 0);
|
||||
/*
|
||||
* We should query our offhook state long enough time after we
|
||||
* set the linefeed_control()
|
||||
@ -559,7 +559,7 @@ static void __do_mute_dtmf(xpd_t *xpd, int pos, bool muteit)
|
||||
BIT_SET(PHONEDEV(xpd).mute_dtmf, pos);
|
||||
else
|
||||
BIT_CLR(PHONEDEV(xpd).mute_dtmf, pos);
|
||||
PHONE_METHOD(xpd, card_pcm_recompute)(xpd->xbus, xpd, 0); /* already spinlocked */
|
||||
CALL_PHONE_METHOD(card_pcm_recompute, xpd, 0); /* already spinlocked */
|
||||
}
|
||||
|
||||
static int set_vm_led_mode(xbus_t *xbus, xpd_t *xpd, int pos,
|
||||
@ -661,7 +661,7 @@ static int send_ring(xpd_t *xpd, lineno_t chan, bool on)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int FXS_card_hooksig(xbus_t *xbus, xpd_t *xpd, int pos, enum dahdi_txsig txsig)
|
||||
static int FXS_card_hooksig(xpd_t *xpd, int pos, enum dahdi_txsig txsig)
|
||||
{
|
||||
struct FXS_priv_data *priv;
|
||||
int ret = 0;
|
||||
@ -698,13 +698,13 @@ static int FXS_card_hooksig(xbus_t *xbus, xpd_t *xpd, int pos, enum dahdi_txsig
|
||||
* Restore state after KEWL hangup.
|
||||
*/
|
||||
LINE_DBG(SIGNAL, xpd, pos, "KEWL STOP\n");
|
||||
linefeed_control(xbus, xpd, pos, FXS_LINE_POL_ACTIVE);
|
||||
linefeed_control(xpd->xbus, xpd, pos, FXS_LINE_POL_ACTIVE);
|
||||
if(IS_OFFHOOK(xpd, pos))
|
||||
MARK_ON(priv, pos, LED_GREEN);
|
||||
}
|
||||
ret = send_ring(xpd, pos, 0); // RING off
|
||||
if (!IS_OFFHOOK(xpd, pos))
|
||||
start_stop_vm_led(xbus, xpd, pos);
|
||||
start_stop_vm_led(xpd->xbus, xpd, pos);
|
||||
txhook = priv->lasttxhook[pos];
|
||||
if(chan) {
|
||||
switch(chan->sig) {
|
||||
@ -718,7 +718,7 @@ static int FXS_card_hooksig(xbus_t *xbus, xpd_t *xpd, int pos, enum dahdi_txsig
|
||||
break;
|
||||
}
|
||||
}
|
||||
ret = linefeed_control(xbus, xpd, pos, txhook);
|
||||
ret = linefeed_control(xpd->xbus, xpd, pos, txhook);
|
||||
break;
|
||||
case DAHDI_TXSIG_OFFHOOK:
|
||||
if(IS_SET(PHONEDEV(xpd).digital_outputs, pos)) {
|
||||
@ -741,7 +741,7 @@ static int FXS_card_hooksig(xbus_t *xbus, xpd_t *xpd, int pos, enum dahdi_txsig
|
||||
break;
|
||||
}
|
||||
}
|
||||
ret = linefeed_control(xbus, xpd, pos, txhook);
|
||||
ret = linefeed_control(xpd->xbus, xpd, pos, txhook);
|
||||
break;
|
||||
case DAHDI_TXSIG_START:
|
||||
PHONEDEV(xpd).ringing[pos] = 1;
|
||||
@ -759,7 +759,7 @@ static int FXS_card_hooksig(xbus_t *xbus, xpd_t *xpd, int pos, enum dahdi_txsig
|
||||
LINE_DBG(SIGNAL, xpd, pos, "%s -> Is digital output. Ignored\n", txsig2str(txsig));
|
||||
return -EINVAL;
|
||||
}
|
||||
linefeed_control(xbus, xpd, pos, FXS_LINE_OPEN);
|
||||
linefeed_control(xpd->xbus, xpd, pos, FXS_LINE_OPEN);
|
||||
MARK_OFF(priv, pos, LED_GREEN);
|
||||
break;
|
||||
default:
|
||||
@ -847,7 +847,7 @@ static int FXS_card_ioctl(xpd_t *xpd, int pos, unsigned int cmd, unsigned long a
|
||||
priv->ohttimer[pos] = val;
|
||||
priv->idletxhookstate[pos] = FXS_LINE_POL_OHTRANS;
|
||||
vmwi_search(xpd, pos, 1);
|
||||
PHONE_METHOD(xpd, card_pcm_recompute)(xbus, xpd, priv->search_fsk_pattern);
|
||||
CALL_PHONE_METHOD(card_pcm_recompute, xpd, priv->search_fsk_pattern);
|
||||
LINE_DBG(SIGNAL, xpd, pos, "Start OHT_TIMER. wanted_pcm_mask=0x%X\n", PHONEDEV(xpd).wanted_pcm_mask);
|
||||
}
|
||||
if (VMWI_NEON(priv, pos) && !IS_OFFHOOK(xpd, pos))
|
||||
@ -1394,6 +1394,11 @@ static int FXS_card_register_reply(xbus_t *xbus, xpd_t *xpd, reg_cmd_t *info)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int FXS_card_state(xpd_t *xpd, bool on)
|
||||
{
|
||||
return CALL_PROTO(FXS, XPD_STATE, xpd->xbus, xpd, on);
|
||||
}
|
||||
|
||||
static const struct xops fxs_xops = {
|
||||
.card_new = FXS_card_new,
|
||||
.card_init = FXS_card_init,
|
||||
@ -1413,8 +1418,7 @@ static const struct phoneops fxs_phoneops = {
|
||||
.card_open = FXS_card_open,
|
||||
.card_close = FXS_card_close,
|
||||
.card_ioctl = FXS_card_ioctl,
|
||||
|
||||
.XPD_STATE = XPROTO_CALLER(FXS, XPD_STATE),
|
||||
.card_state = FXS_card_state,
|
||||
};
|
||||
|
||||
static xproto_table_t PROTO_TABLE(FXS) = {
|
||||
|
@ -685,7 +685,11 @@ HANDLER_DEF(GLOBAL, REGISTER_REPLY)
|
||||
dump_reg_cmd("REG_REPLY", 0, xbus, xpd->addr.unit, reg->portnum, reg);
|
||||
dump_packet("REG_REPLY", pack, 1);
|
||||
}
|
||||
return CALL_XMETHOD(card_register_reply, xbus, xpd, reg);
|
||||
if (! XMETHOD(card_register_reply, xpd)) {
|
||||
XPD_ERR(xpd, "REGISTER_REPLY: without card_register_reply() method\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
return CALL_XMETHOD(card_register_reply, xpd, reg);
|
||||
}
|
||||
|
||||
HANDLER_DEF(GLOBAL, SYNC_REPLY)
|
||||
|
@ -552,7 +552,7 @@ static bool valid_pri_modes(const xpd_t *xpd)
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void PRI_card_pcm_recompute(xbus_t *xbus, xpd_t *xpd,
|
||||
static void PRI_card_pcm_recompute(xpd_t *xpd,
|
||||
xpp_line_t pcm_mask)
|
||||
{
|
||||
struct PRI_priv_data *priv;
|
||||
@ -652,7 +652,7 @@ static int set_pri_proto(xpd_t *xpd, enum pri_protocol set_proto)
|
||||
priv->is_cas = -1;
|
||||
PHONEDEV(xpd).channels = pri_num_channels(set_proto);
|
||||
PHONEDEV(xpd).offhook_state = BITMASK(PHONEDEV(xpd).channels);
|
||||
PHONE_METHOD(xpd, card_pcm_recompute)(xpd->xbus, xpd, 0);
|
||||
CALL_PHONE_METHOD(card_pcm_recompute, xpd, 0);
|
||||
priv->deflaw = deflaw;
|
||||
priv->dchan_num = dchan_num;
|
||||
priv->local_loopback = 0;
|
||||
@ -1037,7 +1037,7 @@ static int pri_lineconfig(xpd_t *xpd, int lineconfig)
|
||||
force_cas = 1;
|
||||
set_mode_cas(xpd, 1);
|
||||
}
|
||||
PHONE_METHOD(xpd, card_pcm_recompute)(xpd->xbus, xpd, 0);
|
||||
CALL_PHONE_METHOD(card_pcm_recompute, xpd, 0);
|
||||
/*
|
||||
* E1's can enable CRC checking
|
||||
* CRC4 is legal only for E1, and it is checked by pri_linecompat()
|
||||
@ -1545,7 +1545,7 @@ static int pri_startup(struct dahdi_span *span)
|
||||
}
|
||||
XPD_DBG(GENERAL, xpd, "STARTUP\n");
|
||||
// Turn on all channels
|
||||
PHONE_METHOD(xpd, XPD_STATE)(xpd->xbus, xpd, 1);
|
||||
CALL_PHONE_METHOD(card_state, xpd, 1);
|
||||
set_rbslines(xpd, 0);
|
||||
write_subunit(xpd, REG_XPM2, 0x00);
|
||||
return 0;
|
||||
@ -1569,7 +1569,7 @@ static int pri_shutdown(struct dahdi_span *span)
|
||||
}
|
||||
XPD_DBG(GENERAL, xpd, "SHUTDOWN\n");
|
||||
// Turn off all channels
|
||||
PHONE_METHOD(xpd, XPD_STATE)(xpd->xbus, xpd, 0);
|
||||
CALL_PHONE_METHOD(card_state, xpd, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1728,7 +1728,7 @@ static int pri_rbsbits(struct dahdi_chan *chan, int bits)
|
||||
* send 31 channels to the device, but they should be called 1-31 rather
|
||||
* than 0-30 .
|
||||
*/
|
||||
static void PRI_card_pcm_fromspan(xbus_t *xbus, xpd_t *xpd, xpacket_t *pack)
|
||||
static void PRI_card_pcm_fromspan(xpd_t *xpd, xpacket_t *pack)
|
||||
{
|
||||
struct PRI_priv_data *priv;
|
||||
byte *pcm;
|
||||
@ -1738,7 +1738,6 @@ static void PRI_card_pcm_fromspan(xbus_t *xbus, xpd_t *xpd, xpacket_t *pack)
|
||||
int physical_chan;
|
||||
int physical_mask = 0;
|
||||
|
||||
BUG_ON(!xbus);
|
||||
BUG_ON(!xpd);
|
||||
BUG_ON(!pack);
|
||||
priv = xpd->priv;
|
||||
@ -1802,7 +1801,7 @@ static void PRI_card_pcm_fromspan(xbus_t *xbus, xpd_t *xpd, xpacket_t *pack)
|
||||
*
|
||||
* \see PRI_card_pcm_fromspan
|
||||
*/
|
||||
static void PRI_card_pcm_tospan(xbus_t *xbus, xpd_t *xpd, xpacket_t *pack)
|
||||
static void PRI_card_pcm_tospan(xpd_t *xpd, xpacket_t *pack)
|
||||
{
|
||||
struct PRI_priv_data *priv;
|
||||
byte *pcm;
|
||||
@ -1855,7 +1854,7 @@ static void PRI_card_pcm_tospan(xbus_t *xbus, xpd_t *xpd, xpacket_t *pack)
|
||||
spin_unlock_irqrestore(&xpd->lock, flags);
|
||||
}
|
||||
|
||||
int PRI_timing_priority(xbus_t *xbus, xpd_t *xpd)
|
||||
int PRI_timing_priority(xpd_t *xpd)
|
||||
{
|
||||
struct PRI_priv_data *priv;
|
||||
|
||||
@ -2169,6 +2168,11 @@ end:
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int PRI_card_state(xpd_t *xpd, bool on)
|
||||
{
|
||||
return CALL_PROTO(PRI, XPD_STATE, xpd->xbus, xpd, on);
|
||||
}
|
||||
|
||||
static const struct xops pri_xops = {
|
||||
.card_new = PRI_card_new,
|
||||
.card_init = PRI_card_init,
|
||||
@ -2186,8 +2190,7 @@ static const struct phoneops pri_phoneops = {
|
||||
.card_timing_priority = PRI_timing_priority,
|
||||
.card_ioctl = PRI_card_ioctl,
|
||||
.card_close = PRI_card_close,
|
||||
|
||||
.XPD_STATE = XPROTO_CALLER(PRI, XPD_STATE),
|
||||
.card_state = PRI_card_state,
|
||||
};
|
||||
|
||||
static xproto_table_t PROTO_TABLE(PRI) = {
|
||||
|
@ -900,14 +900,13 @@ static int xpd_initialize(xpd_t *xpd)
|
||||
{
|
||||
int ret = -ENODEV;
|
||||
|
||||
if(CALL_XMETHOD(card_init, xpd->xbus, xpd) < 0) {
|
||||
if(CALL_XMETHOD(card_init, xpd) < 0) {
|
||||
XPD_ERR(xpd, "Card Initialization failed\n");
|
||||
goto out;
|
||||
}
|
||||
//CALL_XMETHOD(XPD_STATE, xpd->xbus, xpd, 0); /* Turn off all channels */
|
||||
xpd->card_present = 1;
|
||||
if (IS_PHONEDEV(xpd)) {
|
||||
PHONE_METHOD(xpd, XPD_STATE)(xpd->xbus, xpd, 1); /* Turn on all channels */
|
||||
CALL_PHONE_METHOD(card_state, xpd, 1); /* Turn on all channels */
|
||||
}
|
||||
if(!xpd_setstate(xpd, XPD_STATE_READY)) {
|
||||
goto out;
|
||||
|
@ -630,7 +630,7 @@ void elect_syncer(const char *msg)
|
||||
|
||||
if(!xpd || !xpd->card_present || !IS_PHONEDEV(xpd))
|
||||
continue;
|
||||
prio = PHONE_METHOD(xpd, card_timing_priority)(xbus, xpd);
|
||||
prio = CALL_PHONE_METHOD(card_timing_priority, xpd);
|
||||
if (prio < 0) {
|
||||
DBG(SYNC, "%s/%s: skip sync\n",
|
||||
xbus->busname, xpd->xpdname);
|
||||
@ -679,7 +679,7 @@ void update_wanted_pcm_mask(xpd_t *xpd, xpp_line_t new_mask, uint new_pcm_len)
|
||||
* channels which should be *added* to the automatic calculation.
|
||||
* Normally, this argument is 0.
|
||||
*/
|
||||
void generic_card_pcm_recompute(xbus_t *xbus, xpd_t *xpd, xpp_line_t pcm_mask)
|
||||
void generic_card_pcm_recompute(xpd_t *xpd, xpp_line_t pcm_mask)
|
||||
{
|
||||
int i;
|
||||
int line_count = 0;
|
||||
@ -854,14 +854,13 @@ dropit:
|
||||
* Generic implementations of card_pcmfromspan()/card_pcmtospan()
|
||||
* For FXS/FXO
|
||||
*/
|
||||
void generic_card_pcm_fromspan(xbus_t *xbus, xpd_t *xpd, xpacket_t *pack)
|
||||
void generic_card_pcm_fromspan(xpd_t *xpd, xpacket_t *pack)
|
||||
{
|
||||
byte *pcm;
|
||||
unsigned long flags;
|
||||
xpp_line_t wanted_lines;
|
||||
int i;
|
||||
|
||||
BUG_ON(!xbus);
|
||||
BUG_ON(!xpd);
|
||||
BUG_ON(!pack);
|
||||
wanted_lines = PHONEDEV(xpd).wanted_pcm_mask;
|
||||
@ -890,7 +889,7 @@ void generic_card_pcm_fromspan(xbus_t *xbus, xpd_t *xpd, xpacket_t *pack)
|
||||
spin_unlock_irqrestore(&xpd->lock, flags);
|
||||
}
|
||||
|
||||
void generic_card_pcm_tospan(xbus_t *xbus, xpd_t *xpd, xpacket_t *pack)
|
||||
void generic_card_pcm_tospan(xpd_t *xpd, xpacket_t *pack)
|
||||
{
|
||||
byte *pcm;
|
||||
xpp_line_t pcm_mask;
|
||||
@ -993,7 +992,7 @@ static int copy_pcm_tospan(xbus_t *xbus, xframe_t *xframe)
|
||||
goto out;
|
||||
if(SPAN_REGISTERED(xpd)) {
|
||||
XBUS_COUNTER(xbus, RX_PACK_PCM)++;
|
||||
PHONE_METHOD(xpd, card_pcm_tospan)(xbus, xpd, pack);
|
||||
CALL_PHONE_METHOD(card_pcm_tospan, xpd, pack);
|
||||
}
|
||||
} while(p < xframe_end);
|
||||
ret = 0; /* all good */
|
||||
@ -1003,7 +1002,7 @@ out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
int generic_timing_priority(xbus_t *xbus, xpd_t *xpd)
|
||||
int generic_timing_priority(xpd_t *xpd)
|
||||
{
|
||||
return PHONEDEV(xpd).timing_priority;
|
||||
}
|
||||
@ -1080,7 +1079,7 @@ static void xbus_tick(xbus_t *xbus)
|
||||
XPACKET_ADDR_SYNC(pack) = 1;
|
||||
sent_sync_bit = 1;
|
||||
}
|
||||
PHONE_METHOD(xpd, card_pcm_fromspan)(xbus, xpd, pack);
|
||||
CALL_PHONE_METHOD(card_pcm_fromspan, xpd, pack);
|
||||
XBUS_COUNTER(xbus, TX_PACK_PCM)++;
|
||||
}
|
||||
}
|
||||
@ -1131,7 +1130,7 @@ static void xbus_tick(xbus_t *xbus)
|
||||
* Must be called *after* tx/rx so
|
||||
* D-Chan counters may be cleared
|
||||
*/
|
||||
CALL_XMETHOD(card_tick, xbus, xpd);
|
||||
CALL_XMETHOD(card_tick, xpd);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -105,10 +105,10 @@ int send_pcm_frame(xbus_t *xbus, xframe_t *xframe);
|
||||
void pcm_recompute(xpd_t *xpd, xpp_line_t tmp_pcm_mask);
|
||||
void xframe_receive_pcm(xbus_t *xbus, xframe_t *xframe);
|
||||
void update_wanted_pcm_mask(xpd_t *xpd, xpp_line_t new_mask, uint new_pcm_len);
|
||||
void generic_card_pcm_recompute(xbus_t *xbus, xpd_t *xpd, xpp_line_t pcm_mask);
|
||||
void generic_card_pcm_fromspan(xbus_t *xbus, xpd_t *xpd, xpacket_t *pack);
|
||||
void generic_card_pcm_tospan(xbus_t *xbus, xpd_t *xpd, xpacket_t *pack);
|
||||
int generic_timing_priority(xbus_t *xbus, xpd_t *xpd);
|
||||
void generic_card_pcm_recompute(xpd_t *xpd, xpp_line_t pcm_mask);
|
||||
void generic_card_pcm_fromspan(xpd_t *xpd, xpacket_t *pack);
|
||||
void generic_card_pcm_tospan(xpd_t *xpd, xpacket_t *pack);
|
||||
int generic_timing_priority(xpd_t *xpd);
|
||||
void fill_beep(u_char *buf, int num, int duration);
|
||||
const char *sync_mode_name(enum sync_mode mode);
|
||||
void xbus_set_command_timer(xbus_t *xbus, bool on);
|
||||
|
@ -661,7 +661,7 @@ void xpd_remove(xpd_t *xpd)
|
||||
xbus = xpd->xbus;
|
||||
XPD_INFO(xpd, "Remove\n");
|
||||
dahdi_unregister_xpd(xpd);
|
||||
CALL_XMETHOD(card_remove, xbus, xpd);
|
||||
CALL_XMETHOD(card_remove, xpd);
|
||||
xpd_free(xpd);
|
||||
}
|
||||
|
||||
@ -702,7 +702,7 @@ void oht_pcm(xpd_t *xpd, int pos, bool pass)
|
||||
LINE_DBG(SIGNAL, xpd, pos, "OHT PCM: block\n");
|
||||
BIT_CLR(PHONEDEV(xpd).oht_pcm_pass, pos);
|
||||
}
|
||||
PHONE_METHOD(xpd, card_pcm_recompute)(xpd->xbus, xpd, 0);
|
||||
CALL_PHONE_METHOD(card_pcm_recompute, xpd, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -717,7 +717,7 @@ void mark_offhook(xpd_t *xpd, int pos, bool to_offhook)
|
||||
LINE_DBG(SIGNAL, xpd, pos, "ONHOOK\n");
|
||||
BIT_CLR(PHONEDEV(xpd).offhook_state, pos);
|
||||
}
|
||||
PHONE_METHOD(xpd, card_pcm_recompute)(xpd->xbus, xpd, 0);
|
||||
CALL_PHONE_METHOD(card_pcm_recompute, xpd, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -907,8 +907,8 @@ int xpp_open(struct dahdi_chan *chan)
|
||||
current->comm, current->pid,
|
||||
atomic_read(&PHONEDEV(xpd).open_counter));
|
||||
spin_unlock_irqrestore(&xbus->lock, flags);
|
||||
if(PHONE_METHOD(xpd, card_open))
|
||||
PHONE_METHOD(xpd, card_open)(xpd, pos);
|
||||
if(PHONE_METHOD(card_open, xpd))
|
||||
CALL_PHONE_METHOD(card_open, xpd, pos);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -921,8 +921,8 @@ int xpp_close(struct dahdi_chan *chan)
|
||||
|
||||
spin_lock_irqsave(&xbus->lock, flags);
|
||||
spin_unlock_irqrestore(&xbus->lock, flags);
|
||||
if(PHONE_METHOD(xpd, card_close))
|
||||
PHONE_METHOD(xpd, card_close)(xpd, pos);
|
||||
if(PHONE_METHOD(card_close, xpd))
|
||||
CALL_PHONE_METHOD(card_close, xpd, pos);
|
||||
LINE_DBG(DEVICES, xpd, pos, "%s[%d]: open_counter=%d\n",
|
||||
current->comm, current->pid,
|
||||
atomic_read(&PHONEDEV(xpd).open_counter));
|
||||
@ -958,8 +958,8 @@ int xpp_ioctl(struct dahdi_chan *chan, unsigned int cmd, unsigned long arg)
|
||||
switch (cmd) {
|
||||
default:
|
||||
/* Some span-specific commands before we give up: */
|
||||
if (PHONE_METHOD(xpd, card_ioctl)) {
|
||||
return PHONE_METHOD(xpd, card_ioctl)(xpd, pos, cmd, arg);
|
||||
if (PHONE_METHOD(card_ioctl, xpd)) {
|
||||
return CALL_PHONE_METHOD(card_ioctl, xpd, pos, cmd, arg);
|
||||
}
|
||||
report_bad_ioctl(THIS_MODULE->name, xpd, pos, cmd);
|
||||
return -ENOTTY;
|
||||
@ -978,7 +978,7 @@ int xpp_hooksig(struct dahdi_chan *chan, enum dahdi_txsig txsig)
|
||||
__FUNCTION__, pos);
|
||||
return -ENODEV;
|
||||
}
|
||||
if(!PHONE_METHOD(xpd, card_hooksig)) {
|
||||
if(!PHONE_METHOD(card_hooksig, xpd)) {
|
||||
LINE_ERR(xpd, pos,
|
||||
"%s: No hooksig method for this channel. Ignore.\n",
|
||||
__FUNCTION__);
|
||||
@ -987,7 +987,7 @@ int xpp_hooksig(struct dahdi_chan *chan, enum dahdi_txsig txsig)
|
||||
xbus = xpd->xbus;
|
||||
BUG_ON(!xbus);
|
||||
DBG(SIGNAL, "Setting %s to %s (%d)\n", chan->name, txsig2str(txsig), txsig);
|
||||
return PHONE_METHOD(xpd, card_hooksig)(xbus, xpd, pos, txsig);
|
||||
return CALL_PHONE_METHOD(card_hooksig, xpd, pos, txsig);
|
||||
}
|
||||
EXPORT_SYMBOL(xpp_hooksig);
|
||||
|
||||
@ -1018,7 +1018,6 @@ int xpp_maint(struct dahdi_span *span, int cmd)
|
||||
break;
|
||||
case DAHDI_MAINT_LOOPUP:
|
||||
INFO("XXX Send loopup code XXX\n");
|
||||
// CALL_XMETHOD(LOOPBACK_AX, xpd->xbus, xpd, loopback_data, ARRAY_SIZE(loopback_data));
|
||||
break;
|
||||
case DAHDI_MAINT_LOOPDOWN:
|
||||
INFO("XXX Send loopdown code XXX\n");
|
||||
@ -1085,12 +1084,12 @@ int dahdi_unregister_xpd(xpd_t *xpd)
|
||||
mdelay(2); // FIXME: This is to give chance for transmit/receiveprep to finish.
|
||||
spin_unlock_irqrestore(&xpd->lock, flags);
|
||||
if(xpd->card_present)
|
||||
PHONE_METHOD(xpd, card_dahdi_preregistration)(xpd, 0);
|
||||
CALL_PHONE_METHOD(card_dahdi_preregistration, xpd, 0);
|
||||
atomic_dec(&PHONEDEV(xpd).dahdi_registered);
|
||||
atomic_dec(&num_registered_spans);
|
||||
dahdi_unregister(&PHONEDEV(xpd).span);
|
||||
if(xpd->card_present)
|
||||
PHONE_METHOD(xpd, card_dahdi_postregistration)(xpd, 0);
|
||||
CALL_PHONE_METHOD(card_dahdi_postregistration, xpd, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1185,14 +1184,14 @@ int dahdi_register_xpd(xpd_t *xpd)
|
||||
snprintf(PHONEDEV(xpd).span.desc, MAX_SPANDESC, "Xorcom XPD #%02d/%1d%1d: %s",
|
||||
xbus->num, xpd->addr.unit, xpd->addr.subunit, xpd->type_name);
|
||||
XPD_DBG(GENERAL, xpd, "Registering span '%s'\n", PHONEDEV(xpd).span.desc);
|
||||
PHONE_METHOD(xpd, card_dahdi_preregistration)(xpd, 1);
|
||||
CALL_PHONE_METHOD(card_dahdi_preregistration, xpd, 1);
|
||||
if(dahdi_register(&PHONEDEV(xpd).span, prefmaster)) {
|
||||
XPD_ERR(xpd, "Failed to dahdi_register span\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
atomic_inc(&num_registered_spans);
|
||||
atomic_inc(&PHONEDEV(xpd).dahdi_registered);
|
||||
PHONE_METHOD(xpd, card_dahdi_postregistration)(xpd, 1);
|
||||
CALL_PHONE_METHOD(card_dahdi_postregistration, xpd, 1);
|
||||
/*
|
||||
* Update dahdi about our state:
|
||||
* - Since asterisk didn't open the channel yet,
|
||||
|
@ -213,24 +213,34 @@ xproto_handler_t xproto_card_handler(const xproto_table_t *table, byte opcode);
|
||||
const xproto_entry_t *xproto_global_entry(byte opcode);
|
||||
xproto_handler_t xproto_global_handler(byte opcode);
|
||||
|
||||
#define CALL_XMETHOD(name, xbus, xpd, ...) \
|
||||
(xpd)->xops->name(xbus, xpd, ## __VA_ARGS__ )
|
||||
/*
|
||||
* XMETHOD() resolve to method pointer (NULL for optional methods)
|
||||
* CALL_XMETHOD() calls the method, passing mandatory arguments
|
||||
*/
|
||||
#define XMETHOD(name, xpd) ((xpd)->xops->name)
|
||||
#define CALL_XMETHOD(name, xpd, ...) \
|
||||
(XMETHOD(name, (xpd))((xpd)->xbus, (xpd), ## __VA_ARGS__ ))
|
||||
|
||||
#define PHONE_METHOD(xpd, name) PHONEDEV(xpd).phoneops->name
|
||||
/*
|
||||
* PHONE_METHOD() resolve to method pointer (NULL for optional methods)
|
||||
* CALL_PHONE_METHOD() calls the method, passing mandatory arguments
|
||||
*/
|
||||
#define PHONE_METHOD(name, xpd) (PHONEDEV(xpd).phoneops->name)
|
||||
#define CALL_PHONE_METHOD(name, xpd, ...) \
|
||||
(PHONE_METHOD(name, (xpd))((xpd), ## __VA_ARGS__ ))
|
||||
|
||||
struct phoneops {
|
||||
void (*card_pcm_recompute)(xbus_t *xbus, xpd_t *xpd, xpp_line_t pcm_mask);
|
||||
void (*card_pcm_fromspan)(xbus_t *xbus, xpd_t *xpd, xpacket_t *pack);
|
||||
void (*card_pcm_tospan)(xbus_t *xbus, xpd_t *xpd, xpacket_t *pack);
|
||||
int (*card_timing_priority)(xbus_t *xbus, xpd_t *xpd);
|
||||
void (*card_pcm_recompute)(xpd_t *xpd, xpp_line_t pcm_mask);
|
||||
void (*card_pcm_fromspan)(xpd_t *xpd, xpacket_t *pack);
|
||||
void (*card_pcm_tospan)(xpd_t *xpd, xpacket_t *pack);
|
||||
int (*card_timing_priority)(xpd_t *xpd);
|
||||
int (*card_dahdi_preregistration)(xpd_t *xpd, bool on);
|
||||
int (*card_dahdi_postregistration)(xpd_t *xpd, bool on);
|
||||
int (*card_hooksig)(xbus_t *xbus, xpd_t *xpd, int pos, enum dahdi_txsig txsig);
|
||||
int (*card_hooksig)(xpd_t *xpd, int pos, enum dahdi_txsig txsig);
|
||||
int (*card_ioctl)(xpd_t *xpd, int pos, unsigned int cmd, unsigned long arg);
|
||||
int (*card_open)(xpd_t *xpd, lineno_t pos);
|
||||
int (*card_close)(xpd_t *xpd, lineno_t pos);
|
||||
|
||||
int (*XPD_STATE)(xbus_t *xbus, xpd_t *xpd, bool on);
|
||||
int (*card_state)(xpd_t *xpd, bool on);
|
||||
};
|
||||
|
||||
struct xops {
|
||||
|
Loading…
Reference in New Issue
Block a user