diff options
Diffstat (limited to 'drivers/isdn/mISDN/dsp_cmx.c')
| -rw-r--r-- | drivers/isdn/mISDN/dsp_cmx.c | 1065 | 
1 files changed, 534 insertions, 531 deletions
diff --git a/drivers/isdn/mISDN/dsp_cmx.c b/drivers/isdn/mISDN/dsp_cmx.c index 76d9e673b4e..a4f05c54c32 100644 --- a/drivers/isdn/mISDN/dsp_cmx.c +++ b/drivers/isdn/mISDN/dsp_cmx.c @@ -112,7 +112,7 @@   * Disable rx-data:   * If cmx is realized in hardware, rx data will be disabled if requested by   * the upper layer. If dtmf decoding is done by software and enabled, rx data - * will not be diabled but blocked to the upper layer. + * will not be disabled but blocked to the upper layer.   *   * HFC conference engine:   * If it is possible to realize all features using hardware, hardware will be @@ -165,8 +165,8 @@ dsp_cmx_debug(struct dsp *dsp)  	printk(KERN_DEBUG "-----Current DSP\n");  	list_for_each_entry(odsp, &dsp_ilist, list) {  		printk(KERN_DEBUG "* %s hardecho=%d softecho=%d txmix=%d", -		    odsp->name, odsp->echo.hardware, odsp->echo.software, -		    odsp->tx_mix); +		       odsp->name, odsp->echo.hardware, odsp->echo.software, +		       odsp->tx_mix);  		if (odsp->conf)  			printk(" (Conf %d)", odsp->conf->id);  		if (dsp == odsp) @@ -178,14 +178,14 @@ dsp_cmx_debug(struct dsp *dsp)  		printk(KERN_DEBUG "* Conf %d (%p)\n", conf->id, conf);  		list_for_each_entry(member, &conf->mlist, list) {  			printk(KERN_DEBUG -			    "  - member = %s (slot_tx %d, bank_tx %d, " -			    "slot_rx %d, bank_rx %d hfc_conf %d " -			    "tx_data %d rx_is_off %d)%s\n", -			    member->dsp->name, member->dsp->pcm_slot_tx, -			    member->dsp->pcm_bank_tx, member->dsp->pcm_slot_rx, -			    member->dsp->pcm_bank_rx, member->dsp->hfc_conf, -			    member->dsp->tx_data, member->dsp->rx_is_off, -			    (member->dsp == dsp) ? " *this*" : ""); +			       "  - member = %s (slot_tx %d, bank_tx %d, " +			       "slot_rx %d, bank_rx %d hfc_conf %d " +			       "tx_data %d rx_is_off %d)%s\n", +			       member->dsp->name, member->dsp->pcm_slot_tx, +			       member->dsp->pcm_bank_tx, member->dsp->pcm_slot_rx, +			       member->dsp->pcm_bank_rx, member->dsp->hfc_conf, +			       member->dsp->tx_data, member->dsp->rx_is_off, +			       (member->dsp == dsp) ? " *this*" : "");  		}  	}  	printk(KERN_DEBUG "-----end\n"); @@ -227,13 +227,13 @@ dsp_cmx_add_conf_member(struct dsp *dsp, struct dsp_conf *conf)  	}  	if (dsp->member) {  		printk(KERN_WARNING "%s: dsp is already member in a conf.\n", -			__func__); +		       __func__);  		return -EINVAL;  	}  	if (dsp->conf) {  		printk(KERN_WARNING "%s: dsp is already in a conf.\n", -			__func__); +		       __func__);  		return -EINVAL;  	} @@ -268,19 +268,19 @@ dsp_cmx_del_conf_member(struct dsp *dsp)  	if (!dsp) {  		printk(KERN_WARNING "%s: dsp is 0.\n", -			__func__); +		       __func__);  		return -EINVAL;  	}  	if (!dsp->conf) {  		printk(KERN_WARNING "%s: dsp is not in a conf.\n", -			__func__); +		       __func__);  		return -EINVAL;  	}  	if (list_empty(&dsp->conf->mlist)) {  		printk(KERN_WARNING "%s: dsp has linked an empty conf.\n", -			__func__); +		       __func__);  		return -EINVAL;  	} @@ -295,8 +295,8 @@ dsp_cmx_del_conf_member(struct dsp *dsp)  		}  	}  	printk(KERN_WARNING -	    "%s: dsp is not present in its own conf_meber list.\n", -	    __func__); +	       "%s: dsp is not present in its own conf_meber list.\n", +	       __func__);  	return -EINVAL;  } @@ -312,7 +312,7 @@ static struct dsp_conf  	if (!id) {  		printk(KERN_WARNING "%s: id is 0.\n", -		    __func__); +		       __func__);  		return NULL;  	} @@ -338,13 +338,13 @@ dsp_cmx_del_conf(struct dsp_conf *conf)  {  	if (!conf) {  		printk(KERN_WARNING "%s: conf is null.\n", -		    __func__); +		       __func__);  		return -EINVAL;  	}  	if (!list_empty(&conf->mlist)) {  		printk(KERN_WARNING "%s: conf not empty.\n", -		    __func__); +		       __func__);  		return -EINVAL;  	}  	list_del(&conf->list); @@ -359,7 +359,7 @@ dsp_cmx_del_conf(struct dsp_conf *conf)   */  static void  dsp_cmx_hw_message(struct dsp *dsp, u32 message, u32 param1, u32 param2, -    u32 param3, u32 param4) +		   u32 param3, u32 param4)  {  	struct mISDN_ctrl_req cq; @@ -389,7 +389,7 @@ dsp_cmx_hardware(struct dsp_conf *conf, struct dsp *dsp)  	int		freeunits[8];  	u_char		freeslots[256];  	int		same_hfc = -1, same_pcm = -1, current_conf = -1, -	    all_conf = 1, tx_data = 0; +		all_conf = 1, tx_data = 0;  	/* dsp gets updated (no conf) */  	if (!conf) { @@ -397,17 +397,17 @@ dsp_cmx_hardware(struct dsp_conf *conf, struct dsp *dsp)  			return;  		if (dsp_debug & DEBUG_DSP_CMX)  			printk(KERN_DEBUG "%s checking dsp %s\n", -			    __func__, dsp->name); -one_member: +			       __func__, dsp->name); +	one_member:  		/* remove HFC conference if enabled */  		if (dsp->hfc_conf >= 0) {  			if (dsp_debug & DEBUG_DSP_CMX)  				printk(KERN_DEBUG -				    "%s removing %s from HFC conf %d " -				    "because dsp is split\n", __func__, -				    dsp->name, dsp->hfc_conf); +				       "%s removing %s from HFC conf %d " +				       "because dsp is split\n", __func__, +				       dsp->name, dsp->hfc_conf);  			dsp_cmx_hw_message(dsp, MISDN_CTRL_HFC_CONF_SPLIT, -			    0, 0, 0, 0); +					   0, 0, 0, 0);  			dsp->hfc_conf = -1;  		}  		/* process hw echo */ @@ -418,12 +418,12 @@ one_member:  			if (dsp->pcm_slot_tx >= 0 || dsp->pcm_slot_rx >= 0) {  				if (dsp_debug & DEBUG_DSP_CMX)  					printk(KERN_DEBUG "%s removing %s from" -					    " PCM slot %d (TX) %d (RX) because" -					    " dsp is split (no echo)\n", -					    __func__, dsp->name, -					    dsp->pcm_slot_tx, dsp->pcm_slot_rx); +					       " PCM slot %d (TX) %d (RX) because" +					       " dsp is split (no echo)\n", +					       __func__, dsp->name, +					       dsp->pcm_slot_tx, dsp->pcm_slot_rx);  				dsp_cmx_hw_message(dsp, MISDN_CTRL_HFC_PCM_DISC, -				    0, 0, 0, 0); +						   0, 0, 0, 0);  				dsp->pcm_slot_tx = -1;  				dsp->pcm_bank_tx = -1;  				dsp->pcm_slot_rx = -1; @@ -447,11 +447,11 @@ one_member:  			dsp->pcm_bank_rx = 2;  			if (dsp_debug & DEBUG_DSP_CMX)  				printk(KERN_DEBUG -				    "%s refresh %s for echo using slot %d\n", -				    __func__, dsp->name, -				    dsp->pcm_slot_tx); +				       "%s refresh %s for echo using slot %d\n", +				       __func__, dsp->name, +				       dsp->pcm_slot_tx);  			dsp_cmx_hw_message(dsp, MISDN_CTRL_HFC_PCM_CONN, -			    dsp->pcm_slot_tx, 2, dsp->pcm_slot_rx, 2); +					   dsp->pcm_slot_tx, 2, dsp->pcm_slot_rx, 2);  			dsp->echo.hardware = 1;  			return;  		} @@ -479,8 +479,8 @@ one_member:  		if (i == ii) {  			if (dsp_debug & DEBUG_DSP_CMX)  				printk(KERN_DEBUG -				    "%s no slot available for echo\n", -				    __func__); +				       "%s no slot available for echo\n", +				       __func__);  			/* no more slots available */  			dsp->echo.software = 1;  			return; @@ -492,10 +492,10 @@ one_member:  		dsp->pcm_bank_rx = 2;  		if (dsp_debug & DEBUG_DSP_CMX)  			printk(KERN_DEBUG -			    "%s assign echo for %s using slot %d\n", -			    __func__, dsp->name, dsp->pcm_slot_tx); +			       "%s assign echo for %s using slot %d\n", +			       __func__, dsp->name, dsp->pcm_slot_tx);  		dsp_cmx_hw_message(dsp, MISDN_CTRL_HFC_PCM_CONN, -		    dsp->pcm_slot_tx, 2, dsp->pcm_slot_rx, 2); +				   dsp->pcm_slot_tx, 2, dsp->pcm_slot_rx, 2);  		dsp->echo.hardware = 1;  		return;  	} @@ -503,11 +503,11 @@ one_member:  	/* conf gets updated (all members) */  	if (dsp_debug & DEBUG_DSP_CMX)  		printk(KERN_DEBUG "%s checking conference %d\n", -		    __func__, conf->id); +		       __func__, conf->id);  	if (list_empty(&conf->mlist)) {  		printk(KERN_ERR "%s: conference whithout members\n", -		    __func__); +		       __func__);  		return;  	}  	member = list_entry(conf->mlist.next, struct dsp_conf_member, list); @@ -519,25 +519,25 @@ one_member:  		if (member->dsp->tx_mix) {  			if (dsp_debug & DEBUG_DSP_CMX)  				printk(KERN_DEBUG -				    "%s dsp %s cannot form a conf, because " -				    "tx_mix is turned on\n", __func__, -				    member->dsp->name); -conf_software: +				       "%s dsp %s cannot form a conf, because " +				       "tx_mix is turned on\n", __func__, +				       member->dsp->name); +		conf_software:  			list_for_each_entry(member, &conf->mlist, list) {  				dsp = member->dsp;  				/* remove HFC conference if enabled */  				if (dsp->hfc_conf >= 0) {  					if (dsp_debug & DEBUG_DSP_CMX)  						printk(KERN_DEBUG -						    "%s removing %s from HFC " -						    "conf %d because not " -						    "possible with hardware\n", -						    __func__, -						    dsp->name, -						    dsp->hfc_conf); +						       "%s removing %s from HFC " +						       "conf %d because not " +						       "possible with hardware\n", +						       __func__, +						       dsp->name, +						       dsp->hfc_conf);  					dsp_cmx_hw_message(dsp, -					    MISDN_CTRL_HFC_CONF_SPLIT, -					    0, 0, 0, 0); +							   MISDN_CTRL_HFC_CONF_SPLIT, +							   0, 0, 0, 0);  					dsp->hfc_conf = -1;  				}  				/* remove PCM slot if assigned */ @@ -545,16 +545,16 @@ conf_software:  				    dsp->pcm_slot_rx >= 0) {  					if (dsp_debug & DEBUG_DSP_CMX)  						printk(KERN_DEBUG "%s removing " -						    "%s from PCM slot %d (TX)" -						    " slot %d (RX) because not" -						    " possible with hardware\n", -						    __func__, -						    dsp->name, -						    dsp->pcm_slot_tx, -						    dsp->pcm_slot_rx); +						       "%s from PCM slot %d (TX)" +						       " slot %d (RX) because not" +						       " possible with hardware\n", +						       __func__, +						       dsp->name, +						       dsp->pcm_slot_tx, +						       dsp->pcm_slot_rx);  					dsp_cmx_hw_message(dsp, -					    MISDN_CTRL_HFC_PCM_DISC, -					    0, 0, 0, 0); +							   MISDN_CTRL_HFC_PCM_DISC, +							   0, 0, 0, 0);  					dsp->pcm_slot_tx = -1;  					dsp->pcm_bank_tx = -1;  					dsp->pcm_slot_rx = -1; @@ -569,79 +569,79 @@ conf_software:  		if (member->dsp->echo.hardware || member->dsp->echo.software) {  			if (dsp_debug & DEBUG_DSP_CMX)  				printk(KERN_DEBUG -				    "%s dsp %s cannot form a conf, because " -				    "echo is turned on\n", __func__, -				    member->dsp->name); +				       "%s dsp %s cannot form a conf, because " +				       "echo is turned on\n", __func__, +				       member->dsp->name);  			goto conf_software;  		}  		/* check if member has tx_mix turned on */  		if (member->dsp->tx_mix) {  			if (dsp_debug & DEBUG_DSP_CMX)  				printk(KERN_DEBUG -				    "%s dsp %s cannot form a conf, because " -				    "tx_mix is turned on\n", -				    __func__, member->dsp->name); +				       "%s dsp %s cannot form a conf, because " +				       "tx_mix is turned on\n", +				       __func__, member->dsp->name);  			goto conf_software;  		}  		/* check if member changes volume at an not suppoted level */  		if (member->dsp->tx_volume) {  			if (dsp_debug & DEBUG_DSP_CMX)  				printk(KERN_DEBUG -				    "%s dsp %s cannot form a conf, because " -				    "tx_volume is changed\n", -				    __func__, member->dsp->name); +				       "%s dsp %s cannot form a conf, because " +				       "tx_volume is changed\n", +				       __func__, member->dsp->name);  			goto conf_software;  		}  		if (member->dsp->rx_volume) {  			if (dsp_debug & DEBUG_DSP_CMX)  				printk(KERN_DEBUG -				    "%s dsp %s cannot form a conf, because " -				    "rx_volume is changed\n", -				    __func__, member->dsp->name); +				       "%s dsp %s cannot form a conf, because " +				       "rx_volume is changed\n", +				       __func__, member->dsp->name);  			goto conf_software;  		}  		/* check if tx-data turned on */  		if (member->dsp->tx_data) {  			if (dsp_debug & DEBUG_DSP_CMX)  				printk(KERN_DEBUG -				    "%s dsp %s tx_data is turned on\n", -				    __func__, member->dsp->name); +				       "%s dsp %s tx_data is turned on\n", +				       __func__, member->dsp->name);  			tx_data = 1;  		}  		/* check if pipeline exists */  		if (member->dsp->pipeline.inuse) {  			if (dsp_debug & DEBUG_DSP_CMX)  				printk(KERN_DEBUG -				    "%s dsp %s cannot form a conf, because " -				    "pipeline exists\n", __func__, -				    member->dsp->name); +				       "%s dsp %s cannot form a conf, because " +				       "pipeline exists\n", __func__, +				       member->dsp->name);  			goto conf_software;  		}  		/* check if encryption is enabled */  		if (member->dsp->bf_enable) {  			if (dsp_debug & DEBUG_DSP_CMX)  				printk(KERN_DEBUG "%s dsp %s cannot form a " -				    "conf, because encryption is enabled\n", -				    __func__, member->dsp->name); +				       "conf, because encryption is enabled\n", +				       __func__, member->dsp->name);  			goto conf_software;  		}  		/* check if member is on a card with PCM support */  		if (member->dsp->features.pcm_id < 0) {  			if (dsp_debug & DEBUG_DSP_CMX)  				printk(KERN_DEBUG -				    "%s dsp %s cannot form a conf, because " -				    "dsp has no PCM bus\n", -				    __func__, member->dsp->name); +				       "%s dsp %s cannot form a conf, because " +				       "dsp has no PCM bus\n", +				       __func__, member->dsp->name);  			goto conf_software;  		}  		/* check if relations are on the same PCM bus */  		if (member->dsp->features.pcm_id != same_pcm) {  			if (dsp_debug & DEBUG_DSP_CMX)  				printk(KERN_DEBUG -				    "%s dsp %s cannot form a conf, because " -				    "dsp is on a different PCM bus than the " -				    "first dsp\n", -				    __func__, member->dsp->name); +				       "%s dsp %s cannot form a conf, because " +				       "dsp is on a different PCM bus than the " +				       "first dsp\n", +				       __func__, member->dsp->name);  			goto conf_software;  		}  		/* determine if members are on the same hfc chip */ @@ -665,12 +665,12 @@ conf_software:  	if (memb == 1) {  		if (dsp_debug & DEBUG_DSP_CMX)  			printk(KERN_DEBUG -			    "%s conf %d cannot form a HW conference, " -			    "because dsp is alone\n", __func__, conf->id); +			       "%s conf %d cannot form a HW conference, " +			       "because dsp is alone\n", __func__, conf->id);  		conf->hardware = 0;  		conf->software = 0;  		member = list_entry(conf->mlist.next, struct dsp_conf_member, -			list); +				    list);  		dsp = member->dsp;  		goto one_member;  	} @@ -684,30 +684,30 @@ conf_software:  	/* if we have only two members */  	if (memb == 2) {  		member = list_entry(conf->mlist.next, struct dsp_conf_member, -			list); +				    list);  		nextm = list_entry(member->list.next, struct dsp_conf_member, -			list); +				   list);  		/* remove HFC conference if enabled */  		if (member->dsp->hfc_conf >= 0) {  			if (dsp_debug & DEBUG_DSP_CMX)  				printk(KERN_DEBUG -				    "%s removing %s from HFC conf %d because " -				    "two parties require only a PCM slot\n", -				    __func__, member->dsp->name, -				    member->dsp->hfc_conf); +				       "%s removing %s from HFC conf %d because " +				       "two parties require only a PCM slot\n", +				       __func__, member->dsp->name, +				       member->dsp->hfc_conf);  			dsp_cmx_hw_message(member->dsp, -			    MISDN_CTRL_HFC_CONF_SPLIT, 0, 0, 0, 0); +					   MISDN_CTRL_HFC_CONF_SPLIT, 0, 0, 0, 0);  			member->dsp->hfc_conf = -1;  		}  		if (nextm->dsp->hfc_conf >= 0) {  			if (dsp_debug & DEBUG_DSP_CMX)  				printk(KERN_DEBUG -				    "%s removing %s from HFC conf %d because " -				    "two parties require only a PCM slot\n", -				    __func__, nextm->dsp->name, -				    nextm->dsp->hfc_conf); +				       "%s removing %s from HFC conf %d because " +				       "two parties require only a PCM slot\n", +				       __func__, nextm->dsp->name, +				       nextm->dsp->hfc_conf);  			dsp_cmx_hw_message(nextm->dsp, -			    MISDN_CTRL_HFC_CONF_SPLIT, 0, 0, 0, 0); +					   MISDN_CTRL_HFC_CONF_SPLIT, 0, 0, 0, 0);  			nextm->dsp->hfc_conf = -1;  		}  		/* if members have two banks (and not on the same chip) */ @@ -733,17 +733,17 @@ conf_software:  				/* all members have same slot */  				if (dsp_debug & DEBUG_DSP_CMX)  					printk(KERN_DEBUG -					    "%s dsp %s & %s stay joined on " -					    "PCM slot %d bank %d (TX) bank %d " -					    "(RX) (on different chips)\n", -					    __func__, -					    member->dsp->name, -					    nextm->dsp->name, -					    member->dsp->pcm_slot_tx, -					    member->dsp->pcm_bank_tx, -					    member->dsp->pcm_bank_rx); -				conf->hardware = 0; -				conf->software = 1; +					       "%s dsp %s & %s stay joined on " +					       "PCM slot %d bank %d (TX) bank %d " +					       "(RX) (on different chips)\n", +					       __func__, +					       member->dsp->name, +					       nextm->dsp->name, +					       member->dsp->pcm_slot_tx, +					       member->dsp->pcm_bank_tx, +					       member->dsp->pcm_bank_rx); +				conf->hardware = 1; +				conf->software = tx_data;  				return;  			}  			/* find a new slot */ @@ -773,10 +773,10 @@ conf_software:  			if (i == ii) {  				if (dsp_debug & DEBUG_DSP_CMX)  					printk(KERN_DEBUG -					    "%s no slot available for " -					    "%s & %s\n", __func__, -					    member->dsp->name, -					    nextm->dsp->name); +					       "%s no slot available for " +					       "%s & %s\n", __func__, +					       member->dsp->name, +					       nextm->dsp->name);  				/* no more slots available */  				goto conf_software;  			} @@ -791,23 +791,23 @@ conf_software:  			nextm->dsp->pcm_bank_tx = 0;  			if (dsp_debug & DEBUG_DSP_CMX)  				printk(KERN_DEBUG -				    "%s adding %s & %s to new PCM slot %d " -				    "(TX and RX on different chips) because " -				    "both members have not same slots\n", -				    __func__, -				    member->dsp->name, -				    nextm->dsp->name, -				    member->dsp->pcm_slot_tx); +				       "%s adding %s & %s to new PCM slot %d " +				       "(TX and RX on different chips) because " +				       "both members have not same slots\n", +				       __func__, +				       member->dsp->name, +				       nextm->dsp->name, +				       member->dsp->pcm_slot_tx);  			dsp_cmx_hw_message(member->dsp, MISDN_CTRL_HFC_PCM_CONN, -			    member->dsp->pcm_slot_tx, member->dsp->pcm_bank_tx, -			    member->dsp->pcm_slot_rx, member->dsp->pcm_bank_rx); +					   member->dsp->pcm_slot_tx, member->dsp->pcm_bank_tx, +					   member->dsp->pcm_slot_rx, member->dsp->pcm_bank_rx);  			dsp_cmx_hw_message(nextm->dsp, MISDN_CTRL_HFC_PCM_CONN, -			    nextm->dsp->pcm_slot_tx, nextm->dsp->pcm_bank_tx, -			    nextm->dsp->pcm_slot_rx, nextm->dsp->pcm_bank_rx); +					   nextm->dsp->pcm_slot_tx, nextm->dsp->pcm_bank_tx, +					   nextm->dsp->pcm_slot_rx, nextm->dsp->pcm_bank_rx);  			conf->hardware = 1;  			conf->software = tx_data;  			return; -		/* if members have one bank (or on the same chip) */ +			/* if members have one bank (or on the same chip) */  		} else {  			/* if both members have different crossed slots */  			if (member->dsp->pcm_slot_tx >= 0 && @@ -827,15 +827,15 @@ conf_software:  				/* all members have same slot */  				if (dsp_debug & DEBUG_DSP_CMX)  					printk(KERN_DEBUG -					    "%s dsp %s & %s stay joined on PCM " -					    "slot %d (TX) %d (RX) on same chip " -					    "or one bank PCM)\n", __func__, -					    member->dsp->name, -					    nextm->dsp->name, -					    member->dsp->pcm_slot_tx, -					    member->dsp->pcm_slot_rx); -				conf->hardware = 0; -				conf->software = 1; +					       "%s dsp %s & %s stay joined on PCM " +					       "slot %d (TX) %d (RX) on same chip " +					       "or one bank PCM)\n", __func__, +					       member->dsp->name, +					       nextm->dsp->name, +					       member->dsp->pcm_slot_tx, +					       member->dsp->pcm_slot_rx); +				conf->hardware = 1; +				conf->software = tx_data;  				return;  			}  			/* find two new slot */ @@ -865,14 +865,14 @@ conf_software:  			if (i1 == ii) {  				if (dsp_debug & DEBUG_DSP_CMX)  					printk(KERN_DEBUG -					    "%s no slot available " -					    "for %s & %s\n", __func__, -					    member->dsp->name, -					    nextm->dsp->name); +					       "%s no slot available " +					       "for %s & %s\n", __func__, +					       member->dsp->name, +					       nextm->dsp->name);  				/* no more slots available */  				goto conf_software;  			} -			i2 = i1+1; +			i2 = i1 + 1;  			while (i2 < ii) {  				if (freeslots[i2])  					break; @@ -881,11 +881,11 @@ conf_software:  			if (i2 == ii) {  				if (dsp_debug & DEBUG_DSP_CMX)  					printk(KERN_DEBUG -					    "%s no slot available " -					    "for %s & %s\n", -					    __func__, -					    member->dsp->name, -					    nextm->dsp->name); +					       "%s no slot available " +					       "for %s & %s\n", +					       __func__, +					       member->dsp->name, +					       nextm->dsp->name);  				/* no more slots available */  				goto conf_software;  			} @@ -900,20 +900,20 @@ conf_software:  			nextm->dsp->pcm_bank_tx = 0;  			if (dsp_debug & DEBUG_DSP_CMX)  				printk(KERN_DEBUG -				    "%s adding %s & %s to new PCM slot %d " -				    "(TX) %d (RX) on same chip or one bank " -				    "PCM, because both members have not " -				    "crossed slots\n", __func__, -				    member->dsp->name, -				    nextm->dsp->name, -				    member->dsp->pcm_slot_tx, -				    member->dsp->pcm_slot_rx); +				       "%s adding %s & %s to new PCM slot %d " +				       "(TX) %d (RX) on same chip or one bank " +				       "PCM, because both members have not " +				       "crossed slots\n", __func__, +				       member->dsp->name, +				       nextm->dsp->name, +				       member->dsp->pcm_slot_tx, +				       member->dsp->pcm_slot_rx);  			dsp_cmx_hw_message(member->dsp, MISDN_CTRL_HFC_PCM_CONN, -			    member->dsp->pcm_slot_tx, member->dsp->pcm_bank_tx, -			    member->dsp->pcm_slot_rx, member->dsp->pcm_bank_rx); +					   member->dsp->pcm_slot_tx, member->dsp->pcm_bank_tx, +					   member->dsp->pcm_slot_rx, member->dsp->pcm_bank_rx);  			dsp_cmx_hw_message(nextm->dsp, MISDN_CTRL_HFC_PCM_CONN, -			    nextm->dsp->pcm_slot_tx, nextm->dsp->pcm_bank_tx, -			    nextm->dsp->pcm_slot_rx, nextm->dsp->pcm_bank_rx); +					   nextm->dsp->pcm_slot_tx, nextm->dsp->pcm_bank_tx, +					   nextm->dsp->pcm_slot_rx, nextm->dsp->pcm_bank_rx);  			conf->hardware = 1;  			conf->software = tx_data;  			return; @@ -929,24 +929,27 @@ conf_software:  	if (same_hfc < 0) {  		if (dsp_debug & DEBUG_DSP_CMX)  			printk(KERN_DEBUG -			    "%s conference %d cannot be formed, because " -			    "members are on different chips or not " -			    "on HFC chip\n", -			    __func__, conf->id); +			       "%s conference %d cannot be formed, because " +			       "members are on different chips or not " +			       "on HFC chip\n", +			       __func__, conf->id);  		goto conf_software;  	}  	/* for more than two members.. */  	/* if all members already have the same conference */ -	if (all_conf) +	if (all_conf) { +		conf->hardware = 1; +		conf->software = tx_data;  		return; +	}  	/*  	 * if there is an existing conference, but not all members have joined  	 */  	if (current_conf >= 0) { -join_members: +	join_members:  		list_for_each_entry(member, &conf->mlist, list) {  			/* if no conference engine on our chip, change to  			 * software */ @@ -966,10 +969,10 @@ join_members:  				 * slot will be overwritten.  				 */  				if ( -				    dsp != member->dsp && -				/* dsp must be on the same PCM */ -				    member->dsp->features.pcm_id == -				    dsp->features.pcm_id) { +					dsp != member->dsp && +					/* dsp must be on the same PCM */ +					member->dsp->features.pcm_id == +					dsp->features.pcm_id) {  					/* dsp must be on a slot */  					if (dsp->pcm_slot_tx >= 0 &&  					    dsp->pcm_slot_tx < @@ -992,16 +995,16 @@ join_members:  				/* no more slots available */  				if (dsp_debug & DEBUG_DSP_CMX)  					printk(KERN_DEBUG -					    "%s conference %d cannot be formed," -					    " because no slot free\n", -					    __func__, conf->id); +					       "%s conference %d cannot be formed," +					       " because no slot free\n", +					       __func__, conf->id);  				goto conf_software;  			}  			if (dsp_debug & DEBUG_DSP_CMX)  				printk(KERN_DEBUG -				    "%s changing dsp %s to HW conference " -				    "%d slot %d\n", __func__, -				    member->dsp->name, current_conf, i); +				       "%s changing dsp %s to HW conference " +				       "%d slot %d\n", __func__, +				       member->dsp->name, current_conf, i);  			/* assign free slot & set PCM & join conf */  			member->dsp->pcm_slot_tx = i;  			member->dsp->pcm_slot_rx = i; @@ -1009,10 +1012,12 @@ join_members:  			member->dsp->pcm_bank_rx = 2;  			member->dsp->hfc_conf = current_conf;  			dsp_cmx_hw_message(member->dsp, MISDN_CTRL_HFC_PCM_CONN, -			    i, 2, i, 2); +					   i, 2, i, 2);  			dsp_cmx_hw_message(member->dsp, -			    MISDN_CTRL_HFC_CONF_JOIN, current_conf, 0, 0, 0); +					   MISDN_CTRL_HFC_CONF_JOIN, current_conf, 0, 0, 0);  		} +		conf->hardware = 1; +		conf->software = tx_data;  		return;  	} @@ -1040,9 +1045,9 @@ join_members:  		/* no more conferences available */  		if (dsp_debug & DEBUG_DSP_CMX)  			printk(KERN_DEBUG -			    "%s conference %d cannot be formed, because " -			    "no conference number free\n", -			    __func__, conf->id); +			       "%s conference %d cannot be formed, because " +			       "no conference number free\n", +			       __func__, conf->id);  		goto conf_software;  	}  	/* join all members */ @@ -1070,7 +1075,7 @@ dsp_cmx_conf(struct dsp *dsp, u32 conf_id)  	if (dsp->conf_id) {  		if (dsp_debug & DEBUG_DSP_CMX)  			printk(KERN_DEBUG "removing us from conference %d\n", -				dsp->conf->id); +			       dsp->conf->id);  		/* remove us from conf */  		conf = dsp->conf;  		err = dsp_cmx_del_conf_member(dsp); @@ -1085,7 +1090,7 @@ dsp_cmx_conf(struct dsp *dsp, u32 conf_id)  		if (list_empty(&conf->mlist)) {  			if (dsp_debug & DEBUG_DSP_CMX)  				printk(KERN_DEBUG -				    "conference is empty, so we remove it.\n"); +				       "conference is empty, so we remove it.\n");  			err = dsp_cmx_del_conf(conf);  			if (err)  				return err; @@ -1102,29 +1107,29 @@ dsp_cmx_conf(struct dsp *dsp, u32 conf_id)  	/* now add us to conf */  	if (dsp_debug & DEBUG_DSP_CMX)  		printk(KERN_DEBUG "searching conference %d\n", -			conf_id); +		       conf_id);  	conf = dsp_cmx_search_conf(conf_id);  	if (!conf) {  		if (dsp_debug & DEBUG_DSP_CMX)  			printk(KERN_DEBUG -			    "conference doesn't exist yet, creating.\n"); +			       "conference doesn't exist yet, creating.\n");  		/* the conference doesn't exist, so we create */  		conf = dsp_cmx_new_conf(conf_id);  		if (!conf)  			return -EINVAL;  	} else if (!list_empty(&conf->mlist)) {  		member = list_entry(conf->mlist.next, struct dsp_conf_member, -			list); +				    list);  		if (dsp->hdlc && !member->dsp->hdlc) {  			if (dsp_debug & DEBUG_DSP_CMX)  				printk(KERN_DEBUG -				    "cannot join transparent conference.\n"); +				       "cannot join transparent conference.\n");  			return -EINVAL;  		}  		if (!dsp->hdlc && member->dsp->hdlc) {  			if (dsp_debug & DEBUG_DSP_CMX)  				printk(KERN_DEBUG -				    "cannot join hdlc conference.\n"); +				       "cannot join hdlc conference.\n");  			return -EINVAL;  		}  	} @@ -1138,7 +1143,7 @@ dsp_cmx_conf(struct dsp *dsp, u32 conf_id)  	if (list_empty(&conf->mlist)) {  		if (dsp_debug & DEBUG_DSP_CMX)  			printk(KERN_DEBUG -			    "we are alone in this conference, so exit.\n"); +			       "we are alone in this conference, so exit.\n");  		/* update hardware */  		dsp_cmx_hardware(NULL, dsp);  		return 0; @@ -1166,7 +1171,7 @@ showdelay(struct dsp *dsp, int samples, int delay)  	sdelay = delay * 50 / (dsp_poll << 2);  	printk(KERN_DEBUG "DELAY (%s) %3d >%s\n", dsp->name, delay, -		sdelay > 50 ? "..." : bar + 50 - sdelay); +	       sdelay > 50 ? "..." : bar + 50 - sdelay);  }  #endif @@ -1188,9 +1193,9 @@ dsp_cmx_receive(struct dsp *dsp, struct sk_buff *skb)  	/* half of the buffer should be larger than maximum packet size */  	if (len >= CMX_BUFF_HALF) {  		printk(KERN_ERR -		    "%s line %d: packet from card is too large (%d bytes). " -		    "please make card send smaller packets OR increase " -		    "CMX_BUFF_SIZE\n", __FILE__, __LINE__, len); +		       "%s line %d: packet from card is too large (%d bytes). " +		       "please make card send smaller packets OR increase " +		       "CMX_BUFF_SIZE\n", __FILE__, __LINE__, len);  		return;  	} @@ -1228,9 +1233,9 @@ dsp_cmx_receive(struct dsp *dsp, struct sk_buff *skb)  	if (((dsp->rx_W-dsp->rx_R) & CMX_BUFF_MASK) >= CMX_BUFF_HALF) {  		if (dsp_debug & DEBUG_DSP_CLOCK)  			printk(KERN_DEBUG -			    "cmx_receive(dsp=%lx): UNDERRUN (or overrun the " -			    "maximum delay), adjusting read pointer! " -			    "(inst %s)\n", (u_long)dsp, dsp->name); +			       "cmx_receive(dsp=%lx): UNDERRUN (or overrun the " +			       "maximum delay), adjusting read pointer! " +			       "(inst %s)\n", (u_long)dsp, dsp->name);  		/* flush rx buffer and set delay to dsp_poll / 2 */  		if (dsp->features.unordered) {  			dsp->rx_R = (hh->id & CMX_BUFF_MASK); @@ -1255,27 +1260,27 @@ dsp_cmx_receive(struct dsp *dsp, struct sk_buff *skb)  		    (dsp->cmx_delay << 1)) {  			if (dsp_debug & DEBUG_DSP_CLOCK)  				printk(KERN_DEBUG -				    "cmx_receive(dsp=%lx): OVERRUN (because " -				    "twice the delay is reached), adjusting " -				    "read pointer! (inst %s)\n", -				    (u_long)dsp, dsp->name); -		/* flush buffer */ -		if (dsp->features.unordered) { -			dsp->rx_R = (hh->id & CMX_BUFF_MASK); -			dsp->rx_W = (dsp->rx_R + dsp->cmx_delay) -				& CMX_BUFF_MASK; -		} else { -			dsp->rx_R = 0; -			dsp->rx_W = dsp->cmx_delay; +				       "cmx_receive(dsp=%lx): OVERRUN (because " +				       "twice the delay is reached), adjusting " +				       "read pointer! (inst %s)\n", +				       (u_long)dsp, dsp->name); +			/* flush buffer */ +			if (dsp->features.unordered) { +				dsp->rx_R = (hh->id & CMX_BUFF_MASK); +				dsp->rx_W = (dsp->rx_R + dsp->cmx_delay) +					& CMX_BUFF_MASK; +			} else { +				dsp->rx_R = 0; +				dsp->rx_W = dsp->cmx_delay; +			} +			memset(dsp->rx_buff, dsp_silence, sizeof(dsp->rx_buff));  		} -		memset(dsp->rx_buff, dsp_silence, sizeof(dsp->rx_buff)); -	}  	/* show where to write */  #ifdef CMX_DEBUG  	printk(KERN_DEBUG -	    "cmx_receive(dsp=%lx): rx_R(dsp)=%05x rx_W(dsp)=%05x len=%d %s\n", -	    (u_long)dsp, dsp->rx_R, dsp->rx_W, len, dsp->name); +	       "cmx_receive(dsp=%lx): rx_R(dsp)=%05x rx_W(dsp)=%05x len=%d %s\n", +	       (u_long)dsp, dsp->rx_R, dsp->rx_W, len, dsp->name);  #endif  	/* write data into rx_buffer */ @@ -1290,7 +1295,7 @@ dsp_cmx_receive(struct dsp *dsp, struct sk_buff *skb)  	}  	/* increase write-pointer */ -	dsp->rx_W = ((dsp->rx_W+len) & CMX_BUFF_MASK); +	dsp->rx_W = ((dsp->rx_W + len) & CMX_BUFF_MASK);  #ifdef CMX_DELAY_DEBUG  	showdelay(dsp, len, (dsp->rx_W-dsp->rx_R) & CMX_BUFF_MASK);  #endif @@ -1319,7 +1324,7 @@ dsp_cmx_send_member(struct dsp *dsp, int len, s32 *c, int members)  		return;  	}  	if (((dsp->conf && dsp->conf->hardware) || /* hardware conf */ -	    dsp->echo.hardware) && /* OR hardware echo */ +	     dsp->echo.hardware) && /* OR hardware echo */  	    dsp->tx_R == dsp->tx_W && /* AND no tx-data */  	    !(dsp->tone.tone && dsp->tone.software)) { /* AND not soft tones */  		if (!dsp->tx_data) { /* no tx_data for user space required */ @@ -1328,14 +1333,14 @@ dsp_cmx_send_member(struct dsp *dsp, int len, s32 *c, int members)  		}  		if (dsp->conf && dsp->conf->software && dsp->conf->hardware)  			tx_data_only = 1; -		if (dsp->conf->software && dsp->echo.hardware) +		if (dsp->echo.software && dsp->echo.hardware)  			tx_data_only = 1;  	}  #ifdef CMX_DEBUG  	printk(KERN_DEBUG -	    "SEND members=%d dsp=%s, conf=%p, rx_R=%05x rx_W=%05x\n", -	    members, dsp->name, conf, dsp->rx_R, dsp->rx_W); +	       "SEND members=%d dsp=%s, conf=%p, rx_R=%05x rx_W=%05x\n", +	       members, dsp->name, conf, dsp->rx_R, dsp->rx_W);  #endif  	/* preload if we have delay set */ @@ -1349,8 +1354,8 @@ dsp_cmx_send_member(struct dsp *dsp, int len, s32 *c, int members)  	nskb = mI_alloc_skb(len + preload, GFP_ATOMIC);  	if (!nskb) {  		printk(KERN_ERR -		    "FATAL ERROR in mISDN_dsp.o: cannot alloc %d bytes\n", -		    len + preload); +		       "FATAL ERROR in mISDN_dsp.o: cannot alloc %d bytes\n", +		       len + preload);  		return;  	}  	hh = mISDN_HEAD_P(nskb); @@ -1386,22 +1391,22 @@ dsp_cmx_send_member(struct dsp *dsp, int len, s32 *c, int members)  	if (!dsp->tx_mix && t != tt) {  		/* -> send tx-data and continue when not enough */  #ifdef CMX_TX_DEBUG -	sprintf(debugbuf, "TX sending (%04x-%04x)%p: ", t, tt, p); +		sprintf(debugbuf, "TX sending (%04x-%04x)%p: ", t, tt, p);  #endif  		while (r != rr && t != tt) {  #ifdef CMX_TX_DEBUG  			if (strlen(debugbuf) < 48) -				sprintf(debugbuf+strlen(debugbuf), " %02x", -				    p[t]); +				sprintf(debugbuf + strlen(debugbuf), " %02x", +					p[t]);  #endif  			*d++ = p[t]; /* write tx_buff */ -			t = (t+1) & CMX_BUFF_MASK; -			r = (r+1) & CMX_BUFF_MASK; +			t = (t + 1) & CMX_BUFF_MASK; +			r = (r + 1) & CMX_BUFF_MASK;  		}  		if (r == rr) {  			dsp->tx_R = t;  #ifdef CMX_TX_DEBUG -	printk(KERN_DEBUG "%s\n", debugbuf); +			printk(KERN_DEBUG "%s\n", debugbuf);  #endif  			goto send_packet;  		} @@ -1417,29 +1422,29 @@ dsp_cmx_send_member(struct dsp *dsp, int len, s32 *c, int members)  			/* -> send tx-data if available or use 0-volume */  			while (r != rr && t != tt) {  				*d++ = p[t]; /* write tx_buff */ -				t = (t+1) & CMX_BUFF_MASK; -				r = (r+1) & CMX_BUFF_MASK; +				t = (t + 1) & CMX_BUFF_MASK; +				r = (r + 1) & CMX_BUFF_MASK;  			}  			if (r != rr) {  				if (dsp_debug & DEBUG_DSP_CLOCK)  					printk(KERN_DEBUG "%s: RX empty\n", -						__func__); -				memset(d, dsp_silence, (rr-r)&CMX_BUFF_MASK); +					       __func__); +				memset(d, dsp_silence, (rr - r) & CMX_BUFF_MASK);  			} -		/* -> if echo is enabled */ +			/* -> if echo is enabled */  		} else {  			/*  			 * -> mix tx-data with echo if available,  			 * or use echo only  			 */  			while (r != rr && t != tt) { -				*d++ = dsp_audio_mix_law[(p[t]<<8)|q[r]]; -				t = (t+1) & CMX_BUFF_MASK; -				r = (r+1) & CMX_BUFF_MASK; +				*d++ = dsp_audio_mix_law[(p[t] << 8) | q[r]]; +				t = (t + 1) & CMX_BUFF_MASK; +				r = (r + 1) & CMX_BUFF_MASK;  			}  			while (r != rr) {  				*d++ = q[r]; /* echo */ -				r = (r+1) & CMX_BUFF_MASK; +				r = (r + 1) & CMX_BUFF_MASK;  			}  		}  		dsp->tx_R = t; @@ -1449,63 +1454,63 @@ dsp_cmx_send_member(struct dsp *dsp, int len, s32 *c, int members)  #ifdef CMX_CONF_DEBUG  	if (0) {  #else -	if (members == 2) { +		if (members == 2) {  #endif -		/* "other" becomes other party */ -		other = (list_entry(conf->mlist.next, -		    struct dsp_conf_member, list))->dsp; -		if (other == member) -			other = (list_entry(conf->mlist.prev, -			    struct dsp_conf_member, list))->dsp; -		o_q = other->rx_buff; /* received data */ -		o_rr = (other->rx_R + len) & CMX_BUFF_MASK; +			/* "other" becomes other party */ +			other = (list_entry(conf->mlist.next, +					    struct dsp_conf_member, list))->dsp; +			if (other == member) +				other = (list_entry(conf->mlist.prev, +						    struct dsp_conf_member, list))->dsp; +			o_q = other->rx_buff; /* received data */ +			o_rr = (other->rx_R + len) & CMX_BUFF_MASK;  			/* end of rx-pointer */ -		o_r = (o_rr - rr + r) & CMX_BUFF_MASK; +			o_r = (o_rr - rr + r) & CMX_BUFF_MASK;  			/* start rx-pointer at current read position*/ -		/* -> if echo is NOT enabled */ -		if (!dsp->echo.software) { -			/* -			 * -> copy other member's rx-data, -			 * if tx-data is available, mix -			 */ -			while (o_r != o_rr && t != tt) { -				*d++ = dsp_audio_mix_law[(p[t]<<8)|o_q[o_r]]; -				t = (t+1) & CMX_BUFF_MASK; -				o_r = (o_r+1) & CMX_BUFF_MASK; -			} -			while (o_r != o_rr) { -				*d++ = o_q[o_r]; -				o_r = (o_r+1) & CMX_BUFF_MASK; -			} -		/* -> if echo is enabled */ -		} else { -			/* -			 * -> mix other member's rx-data with echo, -			 * if tx-data is available, mix -			 */ -			while (r != rr && t != tt) { -				sample = dsp_audio_law_to_s32[p[t]] + -				    dsp_audio_law_to_s32[q[r]] + -				    dsp_audio_law_to_s32[o_q[o_r]]; -				if (sample < -32768) -					sample = -32768; -				else if (sample > 32767) -					sample = 32767; -				*d++ = dsp_audio_s16_to_law[sample & 0xffff]; -				    /* tx-data + rx_data + echo */ -				t = (t+1) & CMX_BUFF_MASK; -				r = (r+1) & CMX_BUFF_MASK; -				o_r = (o_r+1) & CMX_BUFF_MASK; -			} -			while (r != rr) { -				*d++ = dsp_audio_mix_law[(q[r]<<8)|o_q[o_r]]; -				r = (r+1) & CMX_BUFF_MASK; -				o_r = (o_r+1) & CMX_BUFF_MASK; +			/* -> if echo is NOT enabled */ +			if (!dsp->echo.software) { +				/* +				 * -> copy other member's rx-data, +				 * if tx-data is available, mix +				 */ +				while (o_r != o_rr && t != tt) { +					*d++ = dsp_audio_mix_law[(p[t] << 8) | o_q[o_r]]; +					t = (t + 1) & CMX_BUFF_MASK; +					o_r = (o_r + 1) & CMX_BUFF_MASK; +				} +				while (o_r != o_rr) { +					*d++ = o_q[o_r]; +					o_r = (o_r + 1) & CMX_BUFF_MASK; +				} +				/* -> if echo is enabled */ +			} else { +				/* +				 * -> mix other member's rx-data with echo, +				 * if tx-data is available, mix +				 */ +				while (r != rr && t != tt) { +					sample = dsp_audio_law_to_s32[p[t]] + +						dsp_audio_law_to_s32[q[r]] + +						dsp_audio_law_to_s32[o_q[o_r]]; +					if (sample < -32768) +						sample = -32768; +					else if (sample > 32767) +						sample = 32767; +					*d++ = dsp_audio_s16_to_law[sample & 0xffff]; +					/* tx-data + rx_data + echo */ +					t = (t + 1) & CMX_BUFF_MASK; +					r = (r + 1) & CMX_BUFF_MASK; +					o_r = (o_r + 1) & CMX_BUFF_MASK; +				} +				while (r != rr) { +					*d++ = dsp_audio_mix_law[(q[r] << 8) | o_q[o_r]]; +					r = (r + 1) & CMX_BUFF_MASK; +					o_r = (o_r + 1) & CMX_BUFF_MASK; +				}  			} +			dsp->tx_R = t; +			goto send_packet;  		} -		dsp->tx_R = t; -		goto send_packet; -	}  #ifdef DSP_NEVER_DEFINED  	}  #endif @@ -1513,20 +1518,20 @@ dsp_cmx_send_member(struct dsp *dsp, int len, s32 *c, int members)  	/* -> if echo is NOT enabled */  	if (!dsp->echo.software) {  		/* -		 * -> substract rx-data from conf-data, +		 * -> subtract rx-data from conf-data,  		 * if tx-data is available, mix  		 */  		while (r != rr && t != tt) {  			sample = dsp_audio_law_to_s32[p[t]] + *c++ - -			    dsp_audio_law_to_s32[q[r]]; +				dsp_audio_law_to_s32[q[r]];  			if (sample < -32768)  				sample = -32768;  			else if (sample > 32767)  				sample = 32767;  			*d++ = dsp_audio_s16_to_law[sample & 0xffff]; -			    /* conf-rx+tx */ -			r = (r+1) & CMX_BUFF_MASK; -			t = (t+1) & CMX_BUFF_MASK; +			/* conf-rx+tx */ +			r = (r + 1) & CMX_BUFF_MASK; +			t = (t + 1) & CMX_BUFF_MASK;  		}  		while (r != rr) {  			sample = *c++ - dsp_audio_law_to_s32[q[r]]; @@ -1535,10 +1540,10 @@ dsp_cmx_send_member(struct dsp *dsp, int len, s32 *c, int members)  			else if (sample > 32767)  				sample = 32767;  			*d++ = dsp_audio_s16_to_law[sample & 0xffff]; -			    /* conf-rx */ -			r = (r+1) & CMX_BUFF_MASK; +			/* conf-rx */ +			r = (r + 1) & CMX_BUFF_MASK;  		} -	/* -> if echo is enabled */ +		/* -> if echo is enabled */  	} else {  		/*  		 * -> encode conf-data, if tx-data @@ -1551,9 +1556,9 @@ dsp_cmx_send_member(struct dsp *dsp, int len, s32 *c, int members)  			else if (sample > 32767)  				sample = 32767;  			*d++ = dsp_audio_s16_to_law[sample & 0xffff]; -			    /* conf(echo)+tx */ -			t = (t+1) & CMX_BUFF_MASK; -			r = (r+1) & CMX_BUFF_MASK; +			/* conf(echo)+tx */ +			t = (t + 1) & CMX_BUFF_MASK; +			r = (r + 1) & CMX_BUFF_MASK;  		}  		while (r != rr) {  			sample = *c++; @@ -1562,8 +1567,8 @@ dsp_cmx_send_member(struct dsp *dsp, int len, s32 *c, int members)  			else if (sample > 32767)  				sample = 32767;  			*d++ = dsp_audio_s16_to_law[sample & 0xffff]; -			    /* conf(echo) */ -			r = (r+1) & CMX_BUFF_MASK; +			/* conf(echo) */ +			r = (r + 1) & CMX_BUFF_MASK;  		}  	}  	dsp->tx_R = t; @@ -1572,7 +1577,7 @@ dsp_cmx_send_member(struct dsp *dsp, int len, s32 *c, int members)  send_packet:  	/*  	 * send tx-data if enabled - don't filter, -	 * becuase we want what we send, not what we filtered +	 * because we want what we send, not what we filtered  	 */  	if (dsp->tx_data) {  		if (tx_data_only) { @@ -1587,14 +1592,14 @@ send_packet:  			txskb = mI_alloc_skb(len, GFP_ATOMIC);  			if (!txskb) {  				printk(KERN_ERR -				    "FATAL ERROR in mISDN_dsp.o: " -				    "cannot alloc %d bytes\n", len); +				       "FATAL ERROR in mISDN_dsp.o: " +				       "cannot alloc %d bytes\n", len);  			} else {  				thh = mISDN_HEAD_P(txskb);  				thh->prim = DL_DATA_REQ;  				thh->id = 0; -				memcpy(skb_put(txskb, len), nskb->data+preload, -					len); +				memcpy(skb_put(txskb, len), nskb->data + preload, +				       len);  				/* queue (trigger later) */  				skb_queue_tail(&dsp->sendq, txskb);  			} @@ -1608,7 +1613,7 @@ send_packet:  	/* pipeline */  	if (dsp->pipeline.inuse)  		dsp_pipeline_process_tx(&dsp->pipeline, nskb->data, -			nskb->len); +					nskb->len);  	/* crypt */  	if (dsp->bf_enable)  		dsp_bf_encrypt(dsp, nskb->data, nskb->len); @@ -1619,9 +1624,9 @@ send_packet:  static u32	jittercount; /* counter for jitter check */  struct timer_list dsp_spl_tl; -u32	dsp_spl_jiffies; /* calculate the next time to fire */ +unsigned long	dsp_spl_jiffies; /* calculate the next time to fire */  static u16	dsp_count; /* last sample count */ -static int	dsp_count_valid ; /* if we have last sample count */ +static int	dsp_count_valid; /* if we have last sample count */  void  dsp_cmx_send(void *arg) @@ -1630,7 +1635,7 @@ dsp_cmx_send(void *arg)  	struct dsp_conf_member *member;  	struct dsp *dsp;  	int mustmix, members; -	static s32 mixbuffer[MAX_POLL+100]; +	static s32 mixbuffer[MAX_POLL + 100];  	s32 *c;  	u8 *p, *q;  	int r, rr; @@ -1675,9 +1680,9 @@ dsp_cmx_send(void *arg)  #ifdef CMX_CONF_DEBUG  			if (conf->software && members > 1)  #else -			if (conf->software && members > 2) +				if (conf->software && members > 2)  #endif -				mustmix = 1; +					mustmix = 1;  		}  		/* transmission required */ @@ -1698,265 +1703,263 @@ dsp_cmx_send(void *arg)  #ifdef CMX_CONF_DEBUG  		if (conf->software && members > 1) {  #else -		if (conf->software && members > 2) { +			if (conf->software && members > 2) {  #endif -			/* check for hdlc conf */ -			member = list_entry(conf->mlist.next, -				struct dsp_conf_member, list); -			if (member->dsp->hdlc) -				continue; -			/* mix all data */ -			memset(mixbuffer, 0, length*sizeof(s32)); -			list_for_each_entry(member, &conf->mlist, list) { -				dsp = member->dsp; -				/* get range of data to mix */ -				c = mixbuffer; -				q = dsp->rx_buff; -				r = dsp->rx_R; -				rr = (r + length) & CMX_BUFF_MASK; -				/* add member's data */ -				while (r != rr) { -					*c++ += dsp_audio_law_to_s32[q[r]]; -					r = (r+1) & CMX_BUFF_MASK; +				/* check for hdlc conf */ +				member = list_entry(conf->mlist.next, +						    struct dsp_conf_member, list); +				if (member->dsp->hdlc) +					continue; +				/* mix all data */ +				memset(mixbuffer, 0, length * sizeof(s32)); +				list_for_each_entry(member, &conf->mlist, list) { +					dsp = member->dsp; +					/* get range of data to mix */ +					c = mixbuffer; +					q = dsp->rx_buff; +					r = dsp->rx_R; +					rr = (r + length) & CMX_BUFF_MASK; +					/* add member's data */ +					while (r != rr) { +						*c++ += dsp_audio_law_to_s32[q[r]]; +						r = (r + 1) & CMX_BUFF_MASK; +					}  				} -			} - -			/* process each member */ -			list_for_each_entry(member, &conf->mlist, list) { -				/* transmission */ -				dsp_cmx_send_member(member->dsp, length, -				    mixbuffer, members); -			} -		} -	} -	/* delete rx-data, increment buffers, change pointers */ -	list_for_each_entry(dsp, &dsp_ilist, list) { -		if (dsp->hdlc) -			continue; -		p = dsp->rx_buff; -		q = dsp->tx_buff; -		r = dsp->rx_R; -		/* move receive pointer when receiving */ -		if (!dsp->rx_is_off) { -			rr = (r + length) & CMX_BUFF_MASK; -			/* delete rx-data */ -			while (r != rr) { -				p[r] = dsp_silence; -				r = (r+1) & CMX_BUFF_MASK; +				/* process each member */ +				list_for_each_entry(member, &conf->mlist, list) { +					/* transmission */ +					dsp_cmx_send_member(member->dsp, length, +							    mixbuffer, members); +				}  			} -			/* increment rx-buffer pointer */ -			dsp->rx_R = r; /* write incremented read pointer */  		} -		/* check current rx_delay */ -		delay = (dsp->rx_W-dsp->rx_R) & CMX_BUFF_MASK; -		if (delay >= CMX_BUFF_HALF) -			delay = 0; /* will be the delay before next write */ -		/* check for lower delay */ -		if (delay < dsp->rx_delay[0]) -			dsp->rx_delay[0] = delay; -		/* check current tx_delay */ -		delay = (dsp->tx_W-dsp->tx_R) & CMX_BUFF_MASK; -		if (delay >= CMX_BUFF_HALF) -			delay = 0; /* will be the delay before next write */ -		/* check for lower delay */ -		if (delay < dsp->tx_delay[0]) -			dsp->tx_delay[0] = delay; -		if (jittercheck) { -			/* find the lowest of all rx_delays */ -			delay = dsp->rx_delay[0]; -			i = 1; -			while (i < MAX_SECONDS_JITTER_CHECK) { -				if (delay > dsp->rx_delay[i]) -					delay = dsp->rx_delay[i]; -				i++; -			} -			/* -			 * remove rx_delay only if we have delay AND we -			 * have not preset cmx_delay AND -			 * the delay is greater dsp_poll -			 */ -			if (delay > dsp_poll && !dsp->cmx_delay) { -				if (dsp_debug & DEBUG_DSP_CLOCK) -					printk(KERN_DEBUG -					    "%s lowest rx_delay of %d bytes for" -					    " dsp %s are now removed.\n", -					    __func__, delay, -					    dsp->name); -				r = dsp->rx_R; -				rr = (r + delay - (dsp_poll >> 1)) -					& CMX_BUFF_MASK; +		/* delete rx-data, increment buffers, change pointers */ +		list_for_each_entry(dsp, &dsp_ilist, list) { +			if (dsp->hdlc) +				continue; +			p = dsp->rx_buff; +			q = dsp->tx_buff; +			r = dsp->rx_R; +			/* move receive pointer when receiving */ +			if (!dsp->rx_is_off) { +				rr = (r + length) & CMX_BUFF_MASK;  				/* delete rx-data */  				while (r != rr) {  					p[r] = dsp_silence; -					r = (r+1) & CMX_BUFF_MASK; +					r = (r + 1) & CMX_BUFF_MASK;  				}  				/* increment rx-buffer pointer */ -				dsp->rx_R = r; -				    /* write incremented read pointer */ -			} -			/* find the lowest of all tx_delays */ -			delay = dsp->tx_delay[0]; -			i = 1; -			while (i < MAX_SECONDS_JITTER_CHECK) { -				if (delay > dsp->tx_delay[i]) -					delay = dsp->tx_delay[i]; -				i++; +				dsp->rx_R = r; /* write incremented read pointer */  			} -			/* -			 * remove delay only if we have delay AND we -			 * have enabled tx_dejitter -			 */ -			if (delay > dsp_poll && dsp->tx_dejitter) { -				if (dsp_debug & DEBUG_DSP_CLOCK) -					printk(KERN_DEBUG -					    "%s lowest tx_delay of %d bytes for" -					    " dsp %s are now removed.\n", -					    __func__, delay, -					    dsp->name); -				r = dsp->tx_R; -				rr = (r + delay - (dsp_poll >> 1)) -					& CMX_BUFF_MASK; -				/* delete tx-data */ -				while (r != rr) { -					q[r] = dsp_silence; -					r = (r+1) & CMX_BUFF_MASK; + +			/* check current rx_delay */ +			delay = (dsp->rx_W-dsp->rx_R) & CMX_BUFF_MASK; +			if (delay >= CMX_BUFF_HALF) +				delay = 0; /* will be the delay before next write */ +			/* check for lower delay */ +			if (delay < dsp->rx_delay[0]) +				dsp->rx_delay[0] = delay; +			/* check current tx_delay */ +			delay = (dsp->tx_W-dsp->tx_R) & CMX_BUFF_MASK; +			if (delay >= CMX_BUFF_HALF) +				delay = 0; /* will be the delay before next write */ +			/* check for lower delay */ +			if (delay < dsp->tx_delay[0]) +				dsp->tx_delay[0] = delay; +			if (jittercheck) { +				/* find the lowest of all rx_delays */ +				delay = dsp->rx_delay[0]; +				i = 1; +				while (i < MAX_SECONDS_JITTER_CHECK) { +					if (delay > dsp->rx_delay[i]) +						delay = dsp->rx_delay[i]; +					i++;  				} -				/* increment rx-buffer pointer */ -				dsp->tx_R = r; -				    /* write incremented read pointer */ -			} -			/* scroll up delays */ -			i = MAX_SECONDS_JITTER_CHECK - 1; -			while (i) { -				dsp->rx_delay[i] = dsp->rx_delay[i-1]; -				dsp->tx_delay[i] = dsp->tx_delay[i-1]; -				i--; +				/* +				 * remove rx_delay only if we have delay AND we +				 * have not preset cmx_delay AND +				 * the delay is greater dsp_poll +				 */ +				if (delay > dsp_poll && !dsp->cmx_delay) { +					if (dsp_debug & DEBUG_DSP_CLOCK) +						printk(KERN_DEBUG +						       "%s lowest rx_delay of %d bytes for" +						       " dsp %s are now removed.\n", +						       __func__, delay, +						       dsp->name); +					r = dsp->rx_R; +					rr = (r + delay - (dsp_poll >> 1)) +						& CMX_BUFF_MASK; +					/* delete rx-data */ +					while (r != rr) { +						p[r] = dsp_silence; +						r = (r + 1) & CMX_BUFF_MASK; +					} +					/* increment rx-buffer pointer */ +					dsp->rx_R = r; +					/* write incremented read pointer */ +				} +				/* find the lowest of all tx_delays */ +				delay = dsp->tx_delay[0]; +				i = 1; +				while (i < MAX_SECONDS_JITTER_CHECK) { +					if (delay > dsp->tx_delay[i]) +						delay = dsp->tx_delay[i]; +					i++; +				} +				/* +				 * remove delay only if we have delay AND we +				 * have enabled tx_dejitter +				 */ +				if (delay > dsp_poll && dsp->tx_dejitter) { +					if (dsp_debug & DEBUG_DSP_CLOCK) +						printk(KERN_DEBUG +						       "%s lowest tx_delay of %d bytes for" +						       " dsp %s are now removed.\n", +						       __func__, delay, +						       dsp->name); +					r = dsp->tx_R; +					rr = (r + delay - (dsp_poll >> 1)) +						& CMX_BUFF_MASK; +					/* delete tx-data */ +					while (r != rr) { +						q[r] = dsp_silence; +						r = (r + 1) & CMX_BUFF_MASK; +					} +					/* increment rx-buffer pointer */ +					dsp->tx_R = r; +					/* write incremented read pointer */ +				} +				/* scroll up delays */ +				i = MAX_SECONDS_JITTER_CHECK - 1; +				while (i) { +					dsp->rx_delay[i] = dsp->rx_delay[i - 1]; +					dsp->tx_delay[i] = dsp->tx_delay[i - 1]; +					i--; +				} +				dsp->tx_delay[0] = CMX_BUFF_HALF; /* (infinite) delay */ +				dsp->rx_delay[0] = CMX_BUFF_HALF; /* (infinite) delay */  			} -			dsp->tx_delay[0] = CMX_BUFF_HALF; /* (infinite) delay */ -			dsp->rx_delay[0] = CMX_BUFF_HALF; /* (infinite) delay */  		} -	} -	/* if next event would be in the past ... */ -	if ((s32)(dsp_spl_jiffies+dsp_tics-jiffies) <= 0) -		dsp_spl_jiffies = jiffies + 1; -	else -		dsp_spl_jiffies += dsp_tics; +		/* if next event would be in the past ... */ +		if ((s32)(dsp_spl_jiffies + dsp_tics-jiffies) <= 0) +			dsp_spl_jiffies = jiffies + 1; +		else +			dsp_spl_jiffies += dsp_tics; -	dsp_spl_tl.expires = dsp_spl_jiffies; -	add_timer(&dsp_spl_tl); +		dsp_spl_tl.expires = dsp_spl_jiffies; +		add_timer(&dsp_spl_tl); -	/* unlock */ -	spin_unlock_irqrestore(&dsp_lock, flags); -} +		/* unlock */ +		spin_unlock_irqrestore(&dsp_lock, flags); +	}  /*   * audio data is transmitted from upper layer to the dsp   */ -void -dsp_cmx_transmit(struct dsp *dsp, struct sk_buff *skb) -{ -	u_int w, ww; -	u8 *d, *p; -	int space; /* todo: , l = skb->len; */ +	void +		dsp_cmx_transmit(struct dsp *dsp, struct sk_buff *skb) +	{ +		u_int w, ww; +		u8 *d, *p; +		int space; /* todo: , l = skb->len; */  #ifdef CMX_TX_DEBUG -	char debugbuf[256] = ""; +		char debugbuf[256] = "";  #endif -	/* check if there is enough space, and then copy */ -	w = dsp->tx_W; -	ww = dsp->tx_R; -	p = dsp->tx_buff; -	d = skb->data; -	space = (ww - w - 1) & CMX_BUFF_MASK; -	/* write-pointer should not overrun nor reach read pointer */ -	if (space < skb->len) { -		/* write to the space we have left */ -		ww = (ww - 1) & CMX_BUFF_MASK; /* end one byte prior tx_R */ -		if (dsp_debug & DEBUG_DSP_CLOCK) -			printk(KERN_DEBUG "%s: TX overflow space=%d skb->len=" -			    "%d, w=0x%04x, ww=0x%04x\n", __func__, space, -			    skb->len, w, ww); -	} else -		/* write until all byte are copied */ -		ww = (w + skb->len) & CMX_BUFF_MASK; -	dsp->tx_W = ww; - -	/* show current buffer */ +		/* check if there is enough space, and then copy */ +		w = dsp->tx_W; +		ww = dsp->tx_R; +		p = dsp->tx_buff; +		d = skb->data; +		space = (ww - w - 1) & CMX_BUFF_MASK; +		/* write-pointer should not overrun nor reach read pointer */ +		if (space < skb->len) { +			/* write to the space we have left */ +			ww = (ww - 1) & CMX_BUFF_MASK; /* end one byte prior tx_R */ +			if (dsp_debug & DEBUG_DSP_CLOCK) +				printk(KERN_DEBUG "%s: TX overflow space=%d skb->len=" +				       "%d, w=0x%04x, ww=0x%04x\n", __func__, space, +				       skb->len, w, ww); +		} else +			/* write until all byte are copied */ +			ww = (w + skb->len) & CMX_BUFF_MASK; +		dsp->tx_W = ww; + +		/* show current buffer */  #ifdef CMX_DEBUG -	printk(KERN_DEBUG -	    "cmx_transmit(dsp=%lx) %d bytes to 0x%x-0x%x. %s\n", -	    (u_long)dsp, (ww-w)&CMX_BUFF_MASK, w, ww, dsp->name); +		printk(KERN_DEBUG +		       "cmx_transmit(dsp=%lx) %d bytes to 0x%x-0x%x. %s\n", +		       (u_long)dsp, (ww - w) & CMX_BUFF_MASK, w, ww, dsp->name);  #endif -	/* copy transmit data to tx-buffer */ +		/* copy transmit data to tx-buffer */  #ifdef CMX_TX_DEBUG -	sprintf(debugbuf, "TX getting (%04x-%04x)%p: ", w, ww, p); +		sprintf(debugbuf, "TX getting (%04x-%04x)%p: ", w, ww, p);  #endif -	while (w != ww) { +		while (w != ww) {  #ifdef CMX_TX_DEBUG -		if (strlen(debugbuf) < 48) -			sprintf(debugbuf+strlen(debugbuf), " %02x", *d); +			if (strlen(debugbuf) < 48) +				sprintf(debugbuf + strlen(debugbuf), " %02x", *d);  #endif -		p[w] = *d++; -		w = (w+1) & CMX_BUFF_MASK; -	} +			p[w] = *d++; +			w = (w + 1) & CMX_BUFF_MASK; +		}  #ifdef CMX_TX_DEBUG -	printk(KERN_DEBUG "%s\n", debugbuf); +		printk(KERN_DEBUG "%s\n", debugbuf);  #endif -} +	}  /*   * hdlc data is received from card and sent to all members.   */ -void -dsp_cmx_hdlc(struct dsp *dsp, struct sk_buff *skb) -{ -	struct sk_buff *nskb = NULL; -	struct dsp_conf_member *member; -	struct mISDNhead *hh; - -	/* not if not active */ -	if (!dsp->b_active) -		return; +	void +		dsp_cmx_hdlc(struct dsp *dsp, struct sk_buff *skb) +	{ +		struct sk_buff *nskb = NULL; +		struct dsp_conf_member *member; +		struct mISDNhead *hh; + +		/* not if not active */ +		if (!dsp->b_active) +			return; -	/* check if we have sompen */ -	if (skb->len < 1) -		return; +		/* check if we have sompen */ +		if (skb->len < 1) +			return; -	/* no conf */ -	if (!dsp->conf) { -		/* in case of software echo */ -		if (dsp->echo.software) { -			nskb = skb_clone(skb, GFP_ATOMIC); -			if (nskb) { -				hh = mISDN_HEAD_P(nskb); -				hh->prim = PH_DATA_REQ; -				hh->id = 0; -				skb_queue_tail(&dsp->sendq, nskb); -				schedule_work(&dsp->workq); +		/* no conf */ +		if (!dsp->conf) { +			/* in case of software echo */ +			if (dsp->echo.software) { +				nskb = skb_clone(skb, GFP_ATOMIC); +				if (nskb) { +					hh = mISDN_HEAD_P(nskb); +					hh->prim = PH_DATA_REQ; +					hh->id = 0; +					skb_queue_tail(&dsp->sendq, nskb); +					schedule_work(&dsp->workq); +				}  			} +			return;  		} -		return; -	} -	/* in case of hardware conference */ -	if (dsp->conf->hardware) -		return; -	list_for_each_entry(member, &dsp->conf->mlist, list) { -		if (dsp->echo.software || member->dsp != dsp) { -			nskb = skb_clone(skb, GFP_ATOMIC); -			if (nskb) { -				hh = mISDN_HEAD_P(nskb); -				hh->prim = PH_DATA_REQ; -				hh->id = 0; -				skb_queue_tail(&member->dsp->sendq, nskb); -				schedule_work(&member->dsp->workq); +		/* in case of hardware conference */ +		if (dsp->conf->hardware) +			return; +		list_for_each_entry(member, &dsp->conf->mlist, list) { +			if (dsp->echo.software || member->dsp != dsp) { +				nskb = skb_clone(skb, GFP_ATOMIC); +				if (nskb) { +					hh = mISDN_HEAD_P(nskb); +					hh->prim = PH_DATA_REQ; +					hh->id = 0; +					skb_queue_tail(&member->dsp->sendq, nskb); +					schedule_work(&member->dsp->workq); +				}  			}  		}  	} -} - -  | 
