summaryrefslogtreecommitdiff
path: root/xpp/card_bri.c
diff options
context:
space:
mode:
authortzafrir <tzafrir@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2007-09-14 22:29:36 +0000
committertzafrir <tzafrir@5390a7c7-147a-4af0-8ec9-7488f05a26cb>2007-09-14 22:29:36 +0000
commitc91b2cd29653da525d1a37cf680f4a75b2d3b208 (patch)
treef26185291a7ebb24902a2737d6e5b1fed75bb8c1 /xpp/card_bri.c
parent236601045ee0a95930414d8d5f822d9a61054aae (diff)
New xpp release (Xorcom rev 4648):
* New firmware protocol version: 2.8 . * New firmwares fix input ports offhook. * Cleanup INFO() messages during module loading. * USB: Receive queue with TASKLETS [r4600]. Controlled by rx_tasklet parameter to xpp_usb module (can be changed in runtime). * The pcm_tasklet parameter in xpp module is deprecated: - Does not actually do anything. - If set during module loading, shows an ERR() message. - Also appears in /proc/xpp/sync * FXS: Hardware DTMF detection by default, can be disabled by setting dtmf_detection=0 parameter to xpd_fxs. PCM is muted when DTMF key is pressed. * zapconf: - Can now generate users.conf compatible with asterisk-gui. - Optional command-line arguments denoting which files to generate. Possible values are 'zaptel', 'zapata' and 'users'. - Defaults to creating zaptel and zapata. git-svn-id: http://svn.digium.com/svn/zaptel/branches/1.2@3019 5390a7c7-147a-4af0-8ec9-7488f05a26cb
Diffstat (limited to 'xpp/card_bri.c')
-rw-r--r--xpp/card_bri.c80
1 files changed, 24 insertions, 56 deletions
diff --git a/xpp/card_bri.c b/xpp/card_bri.c
index ce7b0c7..3e67c4d 100644
--- a/xpp/card_bri.c
+++ b/xpp/card_bri.c
@@ -248,7 +248,6 @@ DEF_RPACKET_DATA(BRI, SET_LED, /* Set one of the LED's */
);
static /* 0x33 */ DECLARE_CMD(BRI, SET_LED, enum bri_led_names which_led, enum led_state to_led_state);
-static /* 0x0F */ DECLARE_CMD(BRI, REGISTER_REQUEST, byte chipsel, bool writing, bool do_subreg, byte regnum, byte subreg, byte data_low, byte data_high);
#define DO_LED(xpd, which, tostate) \
CALL_PROTO(BRI, SET_LED, (xpd)->xbus, (xpd), (which), (tostate))
@@ -263,7 +262,7 @@ static void dump_hex_buf(xpd_t *xpd, char *msg, byte *buf, size_t len)
debug_buf[0] = '\0';
for(i = 0; i < len && n < DEBUG_BUF_SIZE; i++)
n += snprintf(&debug_buf[n], DEBUG_BUF_SIZE - n, "%02X ", buf[i]);
- XPD_DBG(GENERAL, xpd, "%s[0..%d]: %s%s\n", msg, len-1, debug_buf,
+ XPD_DBG(GENERAL, xpd, "%s[0..%zd]: %s%s\n", msg, len-1, debug_buf,
(n >= DEBUG_BUF_SIZE)?"...":"");
}
@@ -482,8 +481,8 @@ static int send_bri_multibyte(xpd_t *xpd, byte *buf, int len, bool eoftx)
XPD_ERR(xpd, "%s: len=%d is too long. dropping.\n", __FUNCTION__, len);
return -EINVAL;
}
- XFRAME_NEW(xframe, pack, xbus, BRI, REGISTER_REQUEST, xpd->xbus_idx);
- reg_cmd = &RPACKET_FIELD(pack, BRI, REGISTER_REQUEST, reg_cmd);
+ XFRAME_NEW(xframe, pack, xbus, GLOBAL, REGISTER_REQUEST, xpd->xbus_idx);
+ reg_cmd = &RPACKET_FIELD(pack, GLOBAL, REGISTER_REQUEST, reg_cmd);
reg_cmd->bytes = len;
reg_cmd->eoframe = eoftx;
reg_cmd->multibyte = 1;
@@ -644,11 +643,15 @@ static int BRI_card_init(xbus_t *xbus, xpd_t *xpd)
ret = run_initialize_registers(xpd);
if(ret < 0)
goto err;
+#if 1
+#warning "Test BRI! (removed old SYNC_SOURCE manipulation)"
+#else
/*
* FPGA firmware limitation:
* Force HOST sync *before* sending PCM
*/
CALL_PROTO(GLOBAL, SYNC_SOURCE, xbus, NULL, SYNC_MODE_HOST, 0);
+#endif
XPD_DBG(PROC, xpd, "done\n");
priv->initialized = 1;
return 0;
@@ -761,7 +764,7 @@ static int BRI_card_zaptel_postregistration(xpd_t *xpd, bool on)
return(0);
}
-int BRI_card_hooksig(xbus_t *xbus, xpd_t *xpd, int pos, zt_txsig_t txsig)
+static int BRI_card_hooksig(xbus_t *xbus, xpd_t *xpd, int pos, zt_txsig_t txsig)
{
LINE_DBG(SIGNAL, xpd, pos, "%s\n", txsig2str(txsig));
return 0;
@@ -850,7 +853,7 @@ static int BRI_card_tick(xbus_t *xbus, xpd_t *xpd)
if(poll_interval != 0 && (priv->tick_counter % poll_interval) == 0) {
// XPD_DBG(GENERAL, xpd, "%d\n", priv->tick_counter);
priv->poll_counter++;
- CALL_PROTO(BRI, REGISTER_REQUEST, xbus, xpd, 0, 0, 0, A_SU_RD_STA, 0, 0, 0);
+ xpp_register_request(xbus, xpd, 0, 0, 0, A_SU_RD_STA, 0, 0, 0);
if(IS_NT(xpd) && nt_keepalive &&
!test_bit(HFC_L1_ACTIVATED, &priv->l1_flags) &&
@@ -1118,36 +1121,7 @@ static void BRI_card_pcm_tospan(xbus_t *xbus, xpd_t *xpd, xpacket_t *pack)
/*---------------- BRI: HOST COMMANDS -------------------------------------*/
-/* 0x0F */ HOSTCMD(BRI, REGISTER_REQUEST, byte chipsel, bool writing, bool do_subreg, byte regnum, byte subreg, byte data_low, byte data_high)
-{
- int ret = 0;
- xframe_t *xframe;
- xpacket_t *pack;
- reg_cmd_t *reg_cmd;
-
- if(!xbus) {
- DBG(GENERAL, "NO XBUS\n");
- return -EINVAL;
- }
- XFRAME_NEW(xframe, pack, xbus, BRI, REGISTER_REQUEST, xpd->xbus_idx);
- LINE_DBG(REGS, xpd, chipsel, "%c%c R%02X S%02X %02X %02X\n",
- (writing)?'W':'R',
- (do_subreg)?'S':'D',
- regnum, subreg, data_low, data_high);
- reg_cmd = &RPACKET_FIELD(pack, BRI, REGISTER_REQUEST, reg_cmd);
- reg_cmd->bytes = sizeof(*reg_cmd) - 1; // do not count the 'bytes' field
- REG_FIELD(reg_cmd, chipsel) = chipsel;
- REG_FIELD(reg_cmd, read_request) = (writing) ? 0 : 1;
- REG_FIELD(reg_cmd, do_subreg) = do_subreg;
- REG_FIELD(reg_cmd, regnum) = regnum;
- REG_FIELD(reg_cmd, subreg) = subreg;
- REG_FIELD(reg_cmd, data_low) = data_low;
- REG_FIELD(reg_cmd, data_high) = data_high;
- ret = send_cmd_frame(xbus, xframe);
- return ret;
-}
-
-/* 0x0F */ HOSTCMD(BRI, XPD_STATE, bool on)
+static /* 0x0F */ HOSTCMD(BRI, XPD_STATE, bool on)
{
BUG_ON(!xpd);
XPD_DBG(GENERAL, xpd, "%s\n", (on)?"ON":"OFF");
@@ -1155,19 +1129,19 @@ static void BRI_card_pcm_tospan(xbus_t *xbus, xpd_t *xpd, xpacket_t *pack)
return 0;
}
-/* 0x0F */ HOSTCMD(BRI, RING, lineno_t chan, bool on)
+static /* 0x0F */ HOSTCMD(BRI, RING, lineno_t chan, bool on)
{
XPD_ERR(xpd, "%s: Unsupported\n", __FUNCTION__);
return -ENOSYS;
}
-/* 0x0F */ HOSTCMD(BRI, RELAY_OUT, byte which, bool on)
+static /* 0x0F */ HOSTCMD(BRI, RELAY_OUT, byte which, bool on)
{
XPD_ERR(xpd, "%s: Unsupported\n", __FUNCTION__);
return -ENOSYS;
}
-/* 0x33 */ HOSTCMD(BRI, SET_LED, enum bri_led_names which_led, enum led_state to_led_state)
+static /* 0x33 */ HOSTCMD(BRI, SET_LED, enum bri_led_names which_led, enum led_state to_led_state)
{
int ret = 0;
xframe_t *xframe;
@@ -1185,7 +1159,7 @@ static void BRI_card_pcm_tospan(xbus_t *xbus, xpd_t *xpd, xpacket_t *pack)
bri_leds = &RPACKET_FIELD(pack, BRI, SET_LED, bri_leds);
bri_leds->state = to_led_state;
bri_leds->led_sel = which_led;
- pack->datalen = RPACKET_SIZE(BRI, SET_LED);
+ XPACKET_LEN(pack) = RPACKET_SIZE(BRI, SET_LED);
ret = send_cmd_frame(xbus, xframe);
priv->ledstate[which_led] = to_led_state;
return ret;
@@ -1196,7 +1170,7 @@ static int write_state_register(xpd_t *xpd, byte value)
int ret;
XPD_DBG(REGS, xpd, "value = 0x%02X\n", value);
- ret = CALL_PROTO(BRI, REGISTER_REQUEST, xpd->xbus, xpd,
+ ret = xpp_register_request(xpd->xbus, xpd,
0, /* chipsel */
1, /* writing */
0, /* do_subreg */
@@ -1326,28 +1300,21 @@ static void su_new_state(xpd_t *xpd, byte reg_x30)
priv->state_register.reg = new_state.reg;
}
-HANDLER_DEF(BRI, REGISTER_REPLY)
+static int BRI_card_register_reply(xbus_t *xbus, xpd_t *xpd, reg_cmd_t *info)
{
- reg_cmd_t *info = &RPACKET_FIELD(pack, BRI, REGISTER_REPLY, regcmd);
unsigned long flags;
struct BRI_priv_data *priv;
int ret;
- if(!xpd) {
- XBUS_NOTICE(xbus, "%s: received %s for non-existing unit (%1d%1d)\n",
- __FUNCTION__, cmd->name,
- pack->addr.unit, pack->addr.subunit);
- return -EPROTO;
- }
spin_lock_irqsave(&xpd->lock, flags);
priv = xpd->priv;
BUG_ON(!priv);
if(REG_FIELD(info, do_subreg)) {
- XPD_DBG(REGS, xpd, "REGISTER_REPLY: RS %02X %02X %02X\n",
+ XPD_DBG(REGS, xpd, "RS %02X %02X %02X\n",
REG_FIELD(info, regnum), REG_FIELD(info, subreg), REG_FIELD(info, data_low));
} else {
if (REG_FIELD(info, regnum) != A_SU_RD_STA)
- XPD_DBG(REGS, xpd, "REGISTER_REPLY: RD %02X %02X\n",
+ XPD_DBG(REGS, xpd, "RD %02X %02X\n",
REG_FIELD(info, regnum), REG_FIELD(info, data_low));
}
if(info->multibyte) {
@@ -1382,7 +1349,6 @@ static xproto_table_t PROTO_TABLE(BRI_NT) = {
.owner = THIS_MODULE,
.entries = {
/* Table Card Opcode */
- XENTRY( BRI_NT, BRI, REGISTER_REPLY ),
},
.name = "BRI_NT",
.type = XPD_TYPE_BRI_NT,
@@ -1397,6 +1363,7 @@ static xproto_table_t PROTO_TABLE(BRI_NT) = {
.card_pcm_fromspan = BRI_card_pcm_fromspan,
.card_pcm_tospan = BRI_card_pcm_tospan,
.card_close = BRI_card_close,
+ .card_register_reply = BRI_card_register_reply,
.RING = XPROTO_CALLER(BRI, RING),
.RELAY_OUT = XPROTO_CALLER(BRI, RELAY_OUT),
@@ -1410,7 +1377,6 @@ static xproto_table_t PROTO_TABLE(BRI_TE) = {
.owner = THIS_MODULE,
.entries = {
/* Table Card Opcode */
- XENTRY( BRI_TE, BRI, REGISTER_REPLY ),
},
.name = "BRI_TE",
.type = XPD_TYPE_BRI_TE,
@@ -1424,6 +1390,8 @@ static xproto_table_t PROTO_TABLE(BRI_TE) = {
.card_tick = BRI_card_tick,
.card_pcm_fromspan = BRI_card_pcm_fromspan,
.card_pcm_tospan = BRI_card_pcm_tospan,
+ .card_close = BRI_card_close,
+ .card_register_reply = BRI_card_register_reply,
.RING = XPROTO_CALLER(BRI, RING),
.RELAY_OUT = XPROTO_CALLER(BRI, RELAY_OUT),
@@ -1438,8 +1406,8 @@ static bool bri_packet_is_valid(xpacket_t *pack)
const xproto_entry_t *xe_nt = NULL;
const xproto_entry_t *xe_te = NULL;
// DBG(GENERAL, "\n");
- xe_nt = xproto_card_entry(&PROTO_TABLE(BRI_NT), pack->opcode);
- xe_te = xproto_card_entry(&PROTO_TABLE(BRI_TE), pack->opcode);
+ xe_nt = xproto_card_entry(&PROTO_TABLE(BRI_NT), XPACKET_OP(pack));
+ xe_te = xproto_card_entry(&PROTO_TABLE(BRI_TE), XPACKET_OP(pack));
return xe_nt != NULL || xe_te != NULL;
}
@@ -1634,7 +1602,7 @@ static int handle_register_command(xpd_t *xpd, char *cmdline)
priv->requested_reply = regcmd;
if(print_dbg)
dump_reg_cmd("BRI", &regcmd, 1);
- ret = CALL_PROTO(BRI, REGISTER_REQUEST, xpd->xbus, xpd,
+ ret = xpp_register_request(xpd->xbus, xpd,
REG_FIELD(&regcmd, chipsel),
writing,
REG_FIELD(&regcmd, do_subreg),