dahdi: Remove redundant 'gainalloc' member from struct dahdi_chan.

I want to add some new members to dahdi_chan, but I don't want to
increase the overall size any more than necessary.

Review: https://reviewboard.asterisk.org/r/905/

Signed-off-by: Shaun Ruffell <sruffell@digium.com>

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@9385 a0bf4364-ded3-4de4-8d8a-66a801d63aff
This commit is contained in:
Shaun Ruffell 2010-09-20 20:34:40 +00:00
parent 08cfbeb03e
commit 851203c182
2 changed files with 24 additions and 21 deletions

View File

@ -1312,6 +1312,15 @@ static void release_echocan(const struct dahdi_echocan_factory *ec)
module_put(ec->owner); module_put(ec->owner);
} }
/**
* is_gain_allocated() - True if gain tables were dynamically allocated.
* @chan: The channel to check.
*/
static inline bool is_gain_allocated(const struct dahdi_chan *chan)
{
return (chan->rxgain && (chan->rxgain != defgain));
}
/* /*
* close_channel - close the channel, resetting any channel variables * close_channel - close the channel, resetting any channel variables
* @chan: the dahdi_chan to close * @chan: the dahdi_chan to close
@ -1323,7 +1332,7 @@ static void release_echocan(const struct dahdi_echocan_factory *ec)
static void close_channel(struct dahdi_chan *chan) static void close_channel(struct dahdi_chan *chan)
{ {
unsigned long flags; unsigned long flags;
void *rxgain = NULL; const void *rxgain = NULL;
struct dahdi_echocan_state *ec_state; struct dahdi_echocan_state *ec_state;
const struct dahdi_echocan_factory *ec_current; const struct dahdi_echocan_factory *ec_current;
int oldconf; int oldconf;
@ -1384,12 +1393,11 @@ static void close_channel(struct dahdi_chan *chan)
chan->gotgs = 0; chan->gotgs = 0;
reset_conf(chan); reset_conf(chan);
if (chan->gainalloc && chan->rxgain) if (is_gain_allocated(chan))
rxgain = chan->rxgain; rxgain = chan->rxgain;
chan->rxgain = defgain; chan->rxgain = defgain;
chan->txgain = defgain; chan->txgain = defgain;
chan->gainalloc = 0;
chan->eventinidx = chan->eventoutidx = 0; chan->eventinidx = chan->eventoutidx = 0;
chan->flags &= ~(DAHDI_FLAG_LOOPED | DAHDI_FLAG_LINEAR | DAHDI_FLAG_PPP | DAHDI_FLAG_SIGFREEZE); chan->flags &= ~(DAHDI_FLAG_LOOPED | DAHDI_FLAG_LINEAR | DAHDI_FLAG_PPP | DAHDI_FLAG_SIGFREEZE);
@ -1646,6 +1654,9 @@ static int dahdi_chan_reg(struct dahdi_chan *chan)
chan->readchunk = chan->sreadchunk; chan->readchunk = chan->sreadchunk;
if (!chan->writechunk) if (!chan->writechunk)
chan->writechunk = chan->swritechunk; chan->writechunk = chan->swritechunk;
chan->rxgain = NULL;
chan->txgain = NULL;
dahdi_set_law(chan, 0);
dahdi_set_law(chan, DAHDI_LAW_DEFAULT); dahdi_set_law(chan, DAHDI_LAW_DEFAULT);
close_channel(chan); close_channel(chan);
@ -2624,7 +2635,7 @@ static int initialize_channel(struct dahdi_chan *chan)
{ {
int res; int res;
unsigned long flags; unsigned long flags;
void *rxgain=NULL; const void *rxgain = NULL;
struct dahdi_echocan_state *ec_state; struct dahdi_echocan_state *ec_state;
const struct dahdi_echocan_factory *ec_current; const struct dahdi_echocan_factory *ec_current;
@ -2705,11 +2716,10 @@ static int initialize_channel(struct dahdi_chan *chan)
chan->curtone = NULL; chan->curtone = NULL;
chan->tonep = 0; chan->tonep = 0;
chan->pdialcount = 0; chan->pdialcount = 0;
if (chan->gainalloc && chan->rxgain) if (is_gain_allocated(chan))
rxgain = chan->rxgain; rxgain = chan->rxgain;
chan->rxgain = defgain; chan->rxgain = defgain;
chan->txgain = defgain; chan->txgain = defgain;
chan->gainalloc = 0;
chan->eventinidx = chan->eventoutidx = 0; chan->eventinidx = chan->eventoutidx = 0;
dahdi_set_law(chan, DAHDI_LAW_DEFAULT); dahdi_set_law(chan, DAHDI_LAW_DEFAULT);
dahdi_hangup(chan); dahdi_hangup(chan);
@ -3776,18 +3786,16 @@ static int dahdi_ioctl_setgains(struct file *file, unsigned long data)
!memcmp(txgain, defgain, GAIN_TABLE_SIZE)) { !memcmp(txgain, defgain, GAIN_TABLE_SIZE)) {
kfree(rxgain); kfree(rxgain);
spin_lock_irqsave(&chan->lock, flags); spin_lock_irqsave(&chan->lock, flags);
if (chan->gainalloc) if (is_gain_allocated(chan))
kfree(chan->rxgain); kfree(chan->rxgain);
chan->gainalloc = 0;
chan->rxgain = defgain; chan->rxgain = defgain;
chan->txgain = defgain; chan->txgain = defgain;
spin_unlock_irqrestore(&chan->lock, flags); spin_unlock_irqrestore(&chan->lock, flags);
} else { } else {
/* This is a custom gain setting */ /* This is a custom gain setting */
spin_lock_irqsave(&chan->lock, flags); spin_lock_irqsave(&chan->lock, flags);
if (chan->gainalloc) if (is_gain_allocated(chan))
kfree(chan->rxgain); kfree(chan->rxgain);
chan->gainalloc = 1;
chan->rxgain = rxgain; chan->rxgain = rxgain;
chan->txgain = txgain; chan->txgain = txgain;
spin_unlock_irqrestore(&chan->lock, flags); spin_unlock_irqrestore(&chan->lock, flags);
@ -3841,7 +3849,7 @@ static int dahdi_ioctl_chandiag(struct file *file, unsigned long data)
module_printk(KERN_INFO, "flags: %x hex, writechunk: %p, readchunk: %p\n", module_printk(KERN_INFO, "flags: %x hex, writechunk: %p, readchunk: %p\n",
(unsigned int) temp->flags, temp->writechunk, temp->readchunk); (unsigned int) temp->flags, temp->writechunk, temp->readchunk);
module_printk(KERN_INFO, "rxgain: %p, txgain: %p, gainalloc: %d\n", module_printk(KERN_INFO, "rxgain: %p, txgain: %p, gainalloc: %d\n",
temp->rxgain, temp->txgain, temp->gainalloc); temp->rxgain, temp->txgain, is_gain_allocated(temp));
module_printk(KERN_INFO, "span: %p, sig: %x hex, sigcap: %x hex\n", module_printk(KERN_INFO, "span: %p, sig: %x hex, sigcap: %x hex\n",
temp->span, temp->sig, temp->sigcap); temp->span, temp->sig, temp->sigcap);
module_printk(KERN_INFO, "inreadbuf: %d, outreadbuf: %d, inwritebuf: %d, outwritebuf: %d\n", module_printk(KERN_INFO, "inreadbuf: %d, outreadbuf: %d, inwritebuf: %d, outwritebuf: %d\n",
@ -5685,7 +5693,7 @@ static int dahdi_chan_ioctl(struct file *file, unsigned int cmd, unsigned long d
int j, rv; int j, rv;
int ret; int ret;
int oldconf; int oldconf;
void *rxgain=NULL; const void *rxgain = NULL;
if (!chan) if (!chan)
return -ENOSYS; return -ENOSYS;
@ -5747,14 +5755,13 @@ static int dahdi_chan_ioctl(struct file *file, unsigned int cmd, unsigned long d
chan->ec_current = NULL; chan->ec_current = NULL;
/* release conference resource, if any to release */ /* release conference resource, if any to release */
reset_conf(chan); reset_conf(chan);
if (chan->gainalloc && chan->rxgain) if (is_gain_allocated(chan))
rxgain = chan->rxgain; rxgain = chan->rxgain;
else else
rxgain = NULL; rxgain = NULL;
chan->rxgain = defgain; chan->rxgain = defgain;
chan->txgain = defgain; chan->txgain = defgain;
chan->gainalloc = 0;
spin_unlock_irqrestore(&chan->lock, flags); spin_unlock_irqrestore(&chan->lock, flags);
if (ec_state) { if (ec_state) {
@ -5806,11 +5813,10 @@ static int dahdi_chan_ioctl(struct file *file, unsigned int cmd, unsigned long d
ec_current = chan->ec_current; ec_current = chan->ec_current;
chan->ec_current = NULL; chan->ec_current = NULL;
/* Make sure there's no gain */ /* Make sure there's no gain */
if (chan->gainalloc) if (is_gain_allocated(chan))
kfree(chan->rxgain); kfree(chan->rxgain);
chan->rxgain = defgain; chan->rxgain = defgain;
chan->txgain = defgain; chan->txgain = defgain;
chan->gainalloc = 0;
chan->flags &= ~DAHDI_FLAG_AUDIO; chan->flags &= ~DAHDI_FLAG_AUDIO;
chan->flags |= (DAHDI_FLAG_PPP | DAHDI_FLAG_HDLC | DAHDI_FLAG_FCS); chan->flags |= (DAHDI_FLAG_PPP | DAHDI_FLAG_HDLC | DAHDI_FLAG_FCS);

View File

@ -425,11 +425,8 @@ struct dahdi_chan {
short *readchunkpreec; short *readchunkpreec;
/*! Pointer to tx and rx gain tables */ /*! Pointer to tx and rx gain tables */
u_char *rxgain; const u_char *rxgain;
u_char *txgain; const u_char *txgain;
/*! Whether or not we have allocated gains or are using the default */
int gainalloc;
/* Specified by driver, readable by DAHDI */ /* Specified by driver, readable by DAHDI */
void *pvt; /*!< Private channel data */ void *pvt; /*!< Private channel data */