From c91b2cd29653da525d1a37cf680f4a75b2d3b208 Mon Sep 17 00:00:00 2001 From: tzafrir Date: Fri, 14 Sep 2007 22:29:36 +0000 Subject: 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 --- xpp/card_bri.c | 80 ++++++++++++++++++---------------------------------------- 1 file changed, 24 insertions(+), 56 deletions(-) (limited to 'xpp/card_bri.c') 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", ®cmd, 1); - ret = CALL_PROTO(BRI, REGISTER_REQUEST, xpd->xbus, xpd, + ret = xpp_register_request(xpd->xbus, xpd, REG_FIELD(®cmd, chipsel), writing, REG_FIELD(®cmd, do_subreg), -- cgit v1.2.3