--- ../patches/kdrivers/src/net/sdla_aft_te1.c	2008-11-10 15:52:39.000000000 -0500
+++ sdla_aft_te1.c	2008-11-12 16:59:20.000000000 -0500
@@ -175,6 +175,17 @@
 #define WP_ZAPTEL_ENABLED	     0
 #define WP_ZAPTEL_DCHAN_OPTIMIZATION 1
 
+#define WP_CARD_MASTER_IF_UP 	31
+#define WP_CARD_MASTER_IF_MASK 	0xFF
+
+#define WP_CARD_MASTER_IF_TEST_UP_STATUS(card) wan_test_bit(WP_CARD_MASTER_IF_UP,&card->u.aft.tdmv_master_if_up)
+#define WP_CARD_MASTER_IF_SET_UP_STATUS(card)  wan_set_bit(WP_CARD_MASTER_IF_UP,&card->u.aft.tdmv_master_if_up)
+#define WP_CARD_MASTER_IF_CLEAR_UP_STATUS(card) wan_clear_bit(WP_CARD_MASTER_IF_UP,&card->u.aft.tdmv_master_if_up)
+
+#define WP_CARD_MASTER_IF_SET(card,if_num) card->u.aft.tdmv_master_if_up&=~(WP_CARD_MASTER_IF_MASK);card->u.aft.tdmv_master_if_up |= if_num
+#define WP_CARD_MASTER_IF_GET(card) 	   (card->u.aft.tdmv_master_if_up&WP_CARD_MASTER_IF_MASK)
+#define WP_CARD_MASTER_IF_RESET(card) 	   card->u.aft.tdmv_master_if_up&=~(WP_CARD_MASTER_IF_MASK)
+
 #if defined(AFT_XMTP2_API_SUPPORT) 
 extern void xmtp2km_bs_handler (int fi, int len, unsigned char * p_rxbs, unsigned char * p_txbs);
 extern int xmtp2km_register    (void *, char *, int (*callback)(void*, unsigned char*, int));
@@ -2050,6 +2061,7 @@
   	 * disable zaptel dchan optimization */	
 	if (strcmp(conf->usedby, "TDM_VOICE") != 0) {
 		if (card->u.aft.tdmv_zaptel_cfg) {
+			DEBUG_TEST("%s: Disabling ZAPTEL DCHAN OPTIMIZATION !\n",chan->if_name);
 			wan_clear_bit(WP_ZAPTEL_DCHAN_OPTIMIZATION,&card->u.aft.tdmv_zaptel_cfg);
 		}
 	}
@@ -2652,8 +2664,9 @@
 {
 	int err=-EINVAL;
 	sdla_t *card=wandev->priv;
+	wan_smp_flag_t flags;
 
-        wan_netif_set_priv(dev, NULL); 
+	wan_netif_set_priv(dev, NULL);
 
 
 	if (IS_E1_CARD(card) && !(WAN_FE_FRAME(&card->fe) == WAN_FR_UNFRAMED)) {
@@ -2727,10 +2740,10 @@
 			active_ch=conf->active_ch;
 		}
 
-	       	err=aft_find_master_if_and_dchan(card,&master_if,active_ch);
-	       	if (err < 0) {
-                       	return err;
-	       	}
+		err=aft_find_master_if_and_dchan(card,&master_if,active_ch);
+		if (err < 0) {
+					return err;
+		}
 
 		DEBUG_TEST("%s: TDM VOICE: DCHAN CHAN in 0x%08X Timeslots=%i CFG DCHAN=0x%08X MasterIF=%i\n",
 				card->devname, active_ch, card->u.aft.num_of_time_slots,
@@ -2747,7 +2760,10 @@
                                     	dchan=i;    
 				}
 				if (i==master_if){
-					conf->u.aft.tdmv_master_if=1;
+					conf->u.aft.tdmv_master_if=master_if+1;
+					wan_spin_lock_irq(&card->wandev.lock,&flags);
+					WP_CARD_MASTER_IF_SET(card,	conf->u.aft.tdmv_master_if);
+					wan_spin_unlock_irq(&card->wandev.lock,&flags);
 				}
 
 				err=new_if_private(wandev,dev,conf,1,dchan,if_cnt);
@@ -2828,7 +2844,7 @@
 			set_chan_state(card, dev, WAN_CONNECTED);
 
 			if (card->wandev.config_id == WANCONFIG_AFT_SERIAL) {
-				u32 reg;
+				u32 reg=0;
 				__sdla_bus_read_4(card->hw, AFT_PORT_REG(card,AFT_SERIAL_LINE_CFG_REG), &reg);
 				card->u.aft.serial_status=reg&AFT_SERIAL_LCFG_CTRL_BIT_MASK;
 			}
@@ -3920,6 +3936,7 @@
 	if (card) {
 #if defined(CONFIG_PRODUCT_WANPIPE_TDM_VOICE)
       		if (card->wan_tdmv.sc &&
+			wan_test_bit(WP_ZAPTEL_DCHAN_OPTIMIZATION,&card->u.aft.tdmv_zaptel_cfg) &&
 		    card->wandev.state == WAN_CONNECTED && 
 		    card->wandev.config_id != WANCONFIG_AFT_ANALOG && 
 		    chan->common.usedby == TDM_VOICE) {
@@ -4447,7 +4464,10 @@
 			aft_dev_open_private(card,chan);
 
 			wan_set_bit(0,&chan->up);
-               	
+
+			if (chan->cfg.tdmv_master_if){
+				WP_CARD_MASTER_IF_SET_UP_STATUS(card);
+			}
 		}
 
 		if (gchan->common.usedby == TDM_VOICE_API){
@@ -4456,13 +4476,11 @@
 			wan_netif_set_mtu(
 				gchan->common.dev,
 				card->u.aft.tdmv_mtu+sizeof(api_tx_hdr_t));
-					  
+		  
 		}
-	
-		wan_set_bit(0,&card->u.aft.tdmv_master_if_up);
 
 		if (card->wandev.state == WAN_CONNECTED &&
-    		    !wan_test_bit(0,&card->u.aft.comm_enabled)){ 
+    		!wan_test_bit(0,&card->u.aft.comm_enabled)){
 			DEBUG_EVENT("%s: Master IF Starting %s Communications\n",
 				gchan->if_name,card->devname);
 			enable_data_error_intr(card);
@@ -4542,13 +4560,15 @@
 
 			wan_clear_bit(0,&chan->up);
 			wan_set_bit(0,&chan->interface_down);
-			if (chan->cfg.tdmv_master_if){
-				wan_clear_bit(0,&card->u.aft.tdmv_master_if_up);
+			if (chan->cfg.tdmv_master_if  &&
+			    chan->cfg.tdmv_master_if == WP_CARD_MASTER_IF_GET(card)){
+				WP_CARD_MASTER_IF_CLEAR_UP_STATUS(card);
+				WP_CARD_MASTER_IF_RESET(card);
 			}
 
 			DEBUG_TEST("%s: Closing Ch=%ld MasterUP=%i\n",
 					chan->if_name,chan->logic_ch_num,
-					wan_test_bit(0,&card->u.aft.tdmv_master_if_up));
+					WP_CARD_MASTER_IF_TEST_UP_STATUS(card));
 		}
 	}else{
 		wan_set_bit(0,&chan->interface_down);
@@ -6026,12 +6046,12 @@
 		if (ring_buf_enabled) {
 			if (card->adptr_type == A104_ADPTR_4TE1 &&
 				card->u.aft.firm_id == AFT_PMC_FE_CORE_ID) {
-					wan_set_bit(AFT_CHIPCFG_A104_TDM_ACK_BIT,&reg);  
+				wan_set_bit(AFT_CHIPCFG_A104_TDM_ACK_BIT,&reg);
 			} else {
 				wan_set_bit(AFT_CHIPCFG_A108_TDM_GLOBAL_RX_INTR_ACK,&reg);
-					wan_set_bit(AFT_CHIPCFG_A108_TDM_GLOBAL_TX_INTR_ACK,&reg);
+				wan_set_bit(AFT_CHIPCFG_A108_TDM_GLOBAL_TX_INTR_ACK,&reg);
 			}
-				__sdla_bus_write_4(card->hw,AFT_PORT_REG(card, AFT_CHIP_CFG_REG),reg);	  
+			__sdla_bus_write_4(card->hw,AFT_PORT_REG(card, AFT_CHIP_CFG_REG),reg);
 		
 			if (card->hw_iface.fe_test_bit(card->hw,1)) {
 					DEBUG_EVENT("%s: Global TDM Ring Resync\n",card->devname);
@@ -6068,7 +6088,8 @@
 				}
 				
 #if defined(CONFIG_PRODUCT_WANPIPE_TDM_VOICE)
-				if (tmp_card->wan_tdmv.sc) {
+				if (tmp_card->wan_tdmv.sc &&
+					wan_test_bit(WP_ZAPTEL_DCHAN_OPTIMIZATION,&card->u.aft.tdmv_zaptel_cfg)) {
 
 					aft_voice_span_rx_tx(tmp_card,
 						 	     ring_buf_enabled);
@@ -6103,11 +6124,13 @@
 #ifdef AFT_IRQ_STAT_DEBUG
 			card->wandev.stats.rx_crc_errors++;
 #endif
-#if defined(CONFIG_PRODUCT_WANPIPE_TDM_VOICE)
 
+#if defined(CONFIG_PRODUCT_WANPIPE_TDM_VOICE)
 			if (card->wan_tdmv.sc &&
+				wan_test_bit(WP_ZAPTEL_DCHAN_OPTIMIZATION,&card->u.aft.tdmv_zaptel_cfg) &&
 			    !card->wandev.rtp_len && 
 			    card->wandev.config_id != WANCONFIG_AFT_ANALOG) {
+
 				u32 dmareg;
 				aft_voice_span_rx_tx(card, 0);
 				card->hw_iface.bus_read_4(card->hw,
@@ -6116,6 +6139,7 @@
 				wan_set_bit(AFT_DMACTRL_TDMV_TX_TOGGLE,&dmareg);
 				card->hw_iface.bus_write_4(card->hw,
 						AFT_PORT_REG(card,AFT_DMA_CTRL_REG),dmareg);
+
 			} else
 #endif
 			{
@@ -6192,18 +6216,17 @@
 			wan_test_bit(AFT_LCFG_RX_FE_SYNC_STAT_BIT,&lcfg_reg)){	
 			if (++card->u.aft.chip_security_cnt > AFT_MAX_CHIP_SECURITY_CNT){
 				DEBUG_EVENT("%s: Critical: A108 Lost Sync with Front End: Disabling Driver (0x%08X : A108S=0x%08X)!\n",
-				card->devname,
-				lcfg_reg,a108_reg);
-			DEBUG_EVENT("%s: Please call Sangoma Tech Support (www.sangoma.com)!\n",
-				card->devname);
+							card->devname,lcfg_reg,a108_reg);
+				DEBUG_EVENT("%s: Please call Sangoma Tech Support (www.sangoma.com)!\n",
+							card->devname);
 			
-			aft_critical_shutdown(card);
+				aft_critical_shutdown(card);
 			}
 		} else {
 			card->u.aft.chip_security_cnt=0;
 		}
 	} else {
-			card->u.aft.chip_security_cnt=0; 
+		card->u.aft.chip_security_cnt=0;
 	}		
 #endif
 	
@@ -6443,15 +6466,15 @@
 	   channels, when we know that only a single DCHAN
 	   will use this code */
 #if defined(CONFIG_PRODUCT_WANPIPE_TDM_VOICE)
-        if (card->wan_tdmv.sc && 
-	    wan_test_bit(WP_ZAPTEL_DCHAN_OPTIMIZATION,&card->u.aft.tdmv_zaptel_cfg)) {
-		__sdla_bus_read_4(card->hw,AFT_PORT_REG(card,AFT_RX_DMA_INTR_PENDING_REG),&dma_rx_reg);  
-	        __sdla_bus_read_4(card->hw,AFT_PORT_REG(card,AFT_TX_DMA_INTR_PENDING_REG),&dma_tx_reg);	
-	       	if (card->u.aft.tdmv_dchan) {
+	if (card->wan_tdmv.sc &&
+		wan_test_bit(WP_ZAPTEL_DCHAN_OPTIMIZATION,&card->u.aft.tdmv_zaptel_cfg)) {
+		__sdla_bus_read_4(card->hw,AFT_PORT_REG(card,AFT_RX_DMA_INTR_PENDING_REG),&dma_rx_reg);
+		__sdla_bus_read_4(card->hw,AFT_PORT_REG(card,AFT_TX_DMA_INTR_PENDING_REG),&dma_tx_reg);
+		if (card->u.aft.tdmv_dchan) {
 			chan=(private_area_t*)card->u.aft.dev_to_ch_map[card->u.aft.tdmv_dchan-1];
-	    		if (chan && wan_test_bit(0,&chan->up)) {
-                		aft_dma_rx_complete(card,chan,0);
-				aft_dma_tx_complete(card,chan,0,0);   
+			if (chan && wan_test_bit(0,&chan->up)) {
+					aft_dma_rx_complete(card,chan,0);
+					aft_dma_tx_complete(card,chan,0,0);
 			}
 		}
 		return;
@@ -6488,10 +6511,9 @@
 	int i;
 	private_area_t *chan;
 
-#if 0
-	DEBUG_EVENT("%s: TDMV Interrupt LogicCh=%i\n",
+	DEBUG_TEST("%s: TDMV Interrupt LogicCh=%i\n",
 			card->devname,card->u.aft.num_of_time_slots);
-#endif
+
        /* -----------------2/6/2003 9:37AM------------------
       	* Checking for Interrupt source:
       	* 1. Receive DMA Engine
@@ -7226,7 +7248,7 @@
 				/* WAN_TASKQ_SCHEDULE((&card->u.aft.port_task)); */
 
 				if (card->tdmv_conf.span_no &&
-				    !wan_test_bit(0,&card->u.aft.tdmv_master_if_up)){
+					!WP_CARD_MASTER_IF_TEST_UP_STATUS(card)) {
 					DEBUG_EVENT("%s: Skipping AFT Communication wait for MasterIF\n",
 							card->devname);
 					return;
@@ -7595,7 +7617,7 @@
 #endif
 
 	if (card->tdmv_conf.span_no &&
-	    !wan_test_bit(0,&card->u.aft.tdmv_master_if_up)){
+		!WP_CARD_MASTER_IF_TEST_UP_STATUS(card)) {
 		DEBUG_EVENT("%s: Critical error: Enable Card while Master If Not up!\n",
 				card->devname);
 	}
@@ -7840,6 +7862,7 @@
 
 	
 	wan_set_bit(0,&card->u.aft.comm_enabled);
+
 	DEBUG_EVENT("%s: AFT communications enabled!\n",
 			card->devname);
 
@@ -11143,10 +11166,10 @@
 	rxbuf = (unsigned char*)rx_dma_chain->dma_virt+rx_offset;
 	txbuf =	(unsigned char*)tx_dma_chain->dma_virt+tx_offset;
 
-       	if (wan_test_bit(AFT_TDM_RING_BUF,&card->u.aft.chip_cfg_status)) {
+	if (wan_test_bit(AFT_TDM_RING_BUF,&card->u.aft.chip_cfg_status)) {
 
-	       	rx_offset= AFT_TDMV_CIRC_BUF * card->u.aft.tdm_rx_dma_toggle;
-	       	tx_offset= AFT_TDMV_CIRC_BUF * card->u.aft.tdm_tx_dma_toggle;
+		rx_offset= AFT_TDMV_CIRC_BUF * card->u.aft.tdm_rx_dma_toggle;
+		tx_offset= AFT_TDMV_CIRC_BUF * card->u.aft.tdm_tx_dma_toggle;
 
 		rxbuf = (unsigned char*)rx_dma_chain->dma_virt+rx_offset;
 		txbuf =	(unsigned char*)tx_dma_chain->dma_virt+tx_offset;
@@ -11171,11 +11194,11 @@
 	err=0;
 
 
-#if 0
+#if 0 
 	/*Measure the round trip delay*/
 	if (!chan->tdmv_rx_delay_cfg){
 		int i;
-		unsigned char *buf=rx_dma_chain->dma_virt+offset;
+		unsigned char *buf=rxbuf;
 		for (i=0;i<8;i++){
 			if (buf[i]==0x55){
 				chan->tdmv_rx_delay_cfg=1;
@@ -11194,60 +11217,18 @@
 #ifdef CONFIG_PRODUCT_WANPIPE_TDM_VOICE
 		if (card->wan_tdmv.sc){
 
-#if 0 
-defined(AFT_TDMV_BH_ENABLE) 
-			wan_dma_descr_t *tx_bh_dma_chain = &chan->tx_dma_chain_table[1];
-			wan_dma_descr_t *rx_bh_dma_chain = &chan->rx_dma_chain_table[1];
-
-			if (!rx_bh_dma_chain->skb){
-				rx_bh_dma_chain->skb=wan_skb_dequeue(&chan->wp_rx_free_list);
-				if (!rx_bh_dma_chain->skb){
-					if (WAN_NET_RATELIMIT()){
-						DEBUG_EVENT("%s: Critical TDM BH no free skb\n",
-							chan->if_name);
-						goto aft_tdm_bh_skip;
-					}
-				}
-				wan_skb_init(rx_bh_dma_chain->skb,16);
-				wan_skb_trim(rx_bh_dma_chain->skb,0);
-			}
-
-			if (!tx_bh_dma_chain->skb){
-				tx_bh_dma_chain->skb=wan_skb_dequeue(&chan->wp_rx_free_list);
-				if (!tx_bh_dma_chain->skb){
-					if (WAN_NET_RATELIMIT()){
-						DEBUG_EVENT("%s: Critical TDM BH no free skb\n",
-							chan->if_name);
-						goto aft_tdm_bh_skip;
-					}
-				}
-				wan_skb_init(tx_bh_dma_chain->skb,16);
-				wan_skb_trim(tx_bh_dma_chain->skb,0);
-			}
-
-			memcpy(wan_skb_data(rx_bh_dma_chain->skb),
-			       wan_skb_data(rx_dma_chain->skb),8);
-		
-			memcpy(wan_skb_data(tx_dma_chain->skb),
-		       		wan_skb_data(tx_bh_dma_chain->skb),8);
-
-			rx_dma_chain=rx_bh_dma_chain;
-			tx_dma_chain=tx_bh_dma_chain;
-aft_tdm_bh_skip:
-#endif	
-
 			DEBUG_TEST ("%s: Calling Rx Chan=%i TdmvChan=%i\n",
 					card->devname,chan->logic_ch_num,
 					chan->tdmv_chan);
 
 			if (card->wandev.rtp_len && card->wandev.rtp_tap) {
-                                card->wandev.rtp_tap(card,
-						     IS_T1_CARD(card) ? chan->first_time_slot : 
-						     			chan->first_time_slot-1,			
-						     rxbuf,
-						     txbuf,	
-                                                     chan->mtu);
-                        }
+					card->wandev.rtp_tap(card,
+								IS_T1_CARD(card) ? chan->first_time_slot :
+								chan->first_time_slot-1,
+								rxbuf,
+								txbuf,
+								chan->mtu);
+			}
 
 #if 1
 			WAN_TDMV_CALL(rx_chan,
@@ -11260,7 +11241,7 @@
 #endif
 			
 #if 0
-			if (((u8*)(rx_dma_chain->dma_virt+offset))[0] != 0xFF && 
+			if (((u8*)(rx_dma_chain->dma_virt+offset))[0] != 0xFF &&
                             ((u8*)(rx_dma_chain->dma_virt+offset))[0] != 0x7F &&
                              tx_debug_cnt < 100){
 			DEBUG_EVENT("%s: %02X %02X %02X %02X %02X %02X %02X %02X\n",
@@ -11297,35 +11278,18 @@
 		err=0;
 #ifdef CONFIG_PRODUCT_WANPIPE_TDM_VOICE
 		if (chan->tdmv_zaptel_cfg){
-			DEBUG_TEST ("%s: Calling Master Rx Tx Chan=%i\n",
-					card->devname,chan->logic_ch_num);
-#if 0 
-defined(AFT_TDMV_BH_ENABLE) 
-#warning "AFT A104: TDM Driver compiled in BH mode!"			
-		
-			if (WAN_TASKLET_RUNNING((&chan->common.bh_task))){
-				if (WAN_NET_RATELIMIT()){
-					DEBUG_EVENT("%s: Critical Error: TDMV BH Overrun!\n",
-						card->devname);
-				}
-			}
-			
-			WAN_WP_TASKLET_SCHEDULE_PER_CPU((&chan->common.bh_task),
-							card->tdmv_conf.span_no);	
 
-			card->hw_iface.bus_read_4(card->hw,AFT_PORT_REG(card,AFT_DMA_CTRL_REG),&reg);
-			wan_set_bit(AFT_DMACTRL_TDMV_RX_TOGGLE,&reg);
-			wan_set_bit(AFT_DMACTRL_TDMV_TX_TOGGLE,&reg);
-			card->hw_iface.bus_write_4(card->hw,AFT_PORT_REG(card,AFT_DMA_CTRL_REG),reg);
-	
-#else
+			DEBUG_TEST ("%s:%s Calling Zaptel Master Rx Tx Chan=%i Master=%i\n",
+					card->devname,chan->if_name,chan->first_time_slot,WP_CARD_MASTER_IF_GET(card)-1);
 
-			if (wan_test_bit(AFT_TDM_SW_RING_BUF,&card->u.aft.chip_cfg_status)) {
-				if (!wan_test_bit(AFT_TDM_GLOBAL_ISR,&card->u.aft.chip_cfg_status)) {
-					card->hw_iface.bus_read_4(card->hw,AFT_PORT_REG(card,AFT_DMA_CTRL_REG),&reg);
-					wan_set_bit(AFT_DMACTRL_TDMV_RX_TOGGLE,&reg);
-					wan_set_bit(AFT_DMACTRL_TDMV_TX_TOGGLE,&reg);
-					card->hw_iface.bus_write_4(card->hw,AFT_PORT_REG(card,AFT_DMA_CTRL_REG),reg);
+			if (chan->cfg.tdmv_master_if ==  WP_CARD_MASTER_IF_GET(card)) {
+				if (wan_test_bit(AFT_TDM_SW_RING_BUF,&card->u.aft.chip_cfg_status)) {
+					if (!wan_test_bit(AFT_TDM_GLOBAL_ISR,&card->u.aft.chip_cfg_status)) {
+						card->hw_iface.bus_read_4(card->hw,AFT_PORT_REG(card,AFT_DMA_CTRL_REG),&reg);
+						wan_set_bit(AFT_DMACTRL_TDMV_RX_TOGGLE,&reg);
+						wan_set_bit(AFT_DMACTRL_TDMV_TX_TOGGLE,&reg);
+						card->hw_iface.bus_write_4(card->hw,AFT_PORT_REG(card,AFT_DMA_CTRL_REG),reg);
+					}
 				}
 			}
 
@@ -11356,12 +11320,14 @@
 #warning "NCDEBUG: rx_tx_span disabled irq"
 #endif   
 
-			if (!wan_test_bit(AFT_TDM_SW_RING_BUF,&card->u.aft.chip_cfg_status) &&
-         		    !wan_test_bit(AFT_TDM_GLOBAL_ISR,&card->u.aft.chip_cfg_status)) {
-				card->hw_iface.bus_read_4(card->hw,AFT_PORT_REG(card,AFT_DMA_CTRL_REG),&reg);
-				wan_set_bit(AFT_DMACTRL_TDMV_RX_TOGGLE,&reg);
-				wan_set_bit(AFT_DMACTRL_TDMV_TX_TOGGLE,&reg);
-				card->hw_iface.bus_write_4(card->hw,AFT_PORT_REG(card,AFT_DMA_CTRL_REG),reg);
+			if (chan->cfg.tdmv_master_if ==  WP_CARD_MASTER_IF_GET(card)) {
+				if (!wan_test_bit(AFT_TDM_SW_RING_BUF,&card->u.aft.chip_cfg_status) &&
+						!wan_test_bit(AFT_TDM_GLOBAL_ISR,&card->u.aft.chip_cfg_status)) {
+					card->hw_iface.bus_read_4(card->hw,AFT_PORT_REG(card,AFT_DMA_CTRL_REG),&reg);
+					wan_set_bit(AFT_DMACTRL_TDMV_RX_TOGGLE,&reg);
+					wan_set_bit(AFT_DMACTRL_TDMV_TX_TOGGLE,&reg);
+					card->hw_iface.bus_write_4(card->hw,AFT_PORT_REG(card,AFT_DMA_CTRL_REG),reg);
+				}
 			}
 			
 			if (card->wan_tdmv.sc){
@@ -11371,25 +11337,30 @@
 					WAN_TASKQ_SCHEDULE((&card->u.aft.port_task));	
 				}
 			}
-#endif
+
 		}else{
 #else
 		if (!chan->tdmv_zaptel_cfg){
 
 #endif
-			
+
+
+			DEBUG_TEST ("%s:%s Calling TDM APIO Master Rx Tx Chan=%i Master=%i\n",
+					card->devname,chan->if_name,chan->first_time_slot,WP_CARD_MASTER_IF_GET(card)-1);
+
 #ifdef CONFIG_PRODUCT_WANPIPE_TDM_VOICE
-                        if (card->sdla_tdmv_dummy) {
-                           	err = sdla_tdmv_dummy_tick(card->sdla_tdmv_dummy);
-                        }
+			if (card->sdla_tdmv_dummy) {
+				err = sdla_tdmv_dummy_tick(card->sdla_tdmv_dummy);
+			}
 #endif
 
-
-         		if (!wan_test_bit(AFT_TDM_GLOBAL_ISR,&card->u.aft.chip_cfg_status)) {
-				card->hw_iface.bus_read_4(card->hw,AFT_PORT_REG(card,AFT_DMA_CTRL_REG),&reg);
-				wan_set_bit(AFT_DMACTRL_TDMV_RX_TOGGLE,&reg);
-				wan_set_bit(AFT_DMACTRL_TDMV_TX_TOGGLE,&reg);
-				card->hw_iface.bus_write_4(card->hw,AFT_PORT_REG(card,AFT_DMA_CTRL_REG),reg);
+			if (chan->cfg.tdmv_master_if ==  WP_CARD_MASTER_IF_GET(card)) {
+				if (!wan_test_bit(AFT_TDM_GLOBAL_ISR,&card->u.aft.chip_cfg_status)) {
+					card->hw_iface.bus_read_4(card->hw,AFT_PORT_REG(card,AFT_DMA_CTRL_REG),&reg);
+					wan_set_bit(AFT_DMACTRL_TDMV_RX_TOGGLE,&reg);
+					wan_set_bit(AFT_DMACTRL_TDMV_TX_TOGGLE,&reg);
+					card->hw_iface.bus_write_4(card->hw,AFT_PORT_REG(card,AFT_DMA_CTRL_REG),reg);
+				}
 			}
 			
 			if (card->wandev.fe_iface.watchdog) {
@@ -12765,7 +12736,7 @@
      	int dchan_found=0;
 	int i;
 	
-        if (card->tdmv_conf.dchan) {
+	if (card->tdmv_conf.dchan) {
 		if (IS_E1_CARD(card) && !(WAN_FE_FRAME(&card->fe) == WAN_FR_UNFRAMED)) {
 			card->tdmv_conf.dchan = card->tdmv_conf.dchan << 1;
 			wan_clear_bit(0,&card->tdmv_conf.dchan);
@@ -12777,13 +12748,13 @@
 
 			if (wan_test_bit(i,&card->tdmv_conf.dchan)){
 			       	dchan_found=1;
-				card->u.aft.tdmv_dchan=i;
+					card->u.aft.tdmv_dchan=i;
 			       	continue;
 			}
 		
-			/* Find the TOP timeslot.  This timeslot will be
-                         * considered MASTER since it is the last timeslot
-                         * to rx data from the T1 line */	
+		 	/* Find the TOP timeslot.  This timeslot will be
+			 * considered MASTER since it is the last timeslot
+			 * to rx data from the T1 line */
 			if (*master_if < 0){	
 				*master_if=i;
 			}
@@ -12791,10 +12762,11 @@
 	}
 
 	if (card->tdmv_conf.dchan && !dchan_found){
-		/* We configured for dchan however, this interface
-                 * was not configued with the DCHAN timeslot.
-                 * It IS now possible that another interface has
-                 * this time slot */
+			/* We configured for dchan however, this interface
+			 * was not configued with the DCHAN timeslot.
+			 * It IS now possible that another interface has
+			 * this time slot */
+
 	       	for (i=card->u.aft.num_of_time_slots-1;i>=0;i--){
                        	if (wan_test_bit(i,&card->tdmv_conf.dchan)){
 	       		       	dchan_found=1;
