staging: comedi: das1800: don't pass struct comedi_cmd by value
Various functions in das1800.c take a `struct comedi_cmd` parameter by value. Change them to pass the parameter by reference instead. Signed-off-by: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
44b255f7b1
commit
eb4332eff5
1 changed files with 41 additions and 36 deletions
|
@ -958,14 +958,14 @@ static int das1800_ai_do_cmdtest(struct comedi_device *dev,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* returns appropriate bits for control register a, depending on command */
|
/* returns appropriate bits for control register a, depending on command */
|
||||||
static int control_a_bits(struct comedi_cmd cmd)
|
static int control_a_bits(const struct comedi_cmd *cmd)
|
||||||
{
|
{
|
||||||
int control_a;
|
int control_a;
|
||||||
|
|
||||||
control_a = FFEN; /* enable fifo */
|
control_a = FFEN; /* enable fifo */
|
||||||
if (cmd.stop_src == TRIG_EXT)
|
if (cmd->stop_src == TRIG_EXT)
|
||||||
control_a |= ATEN;
|
control_a |= ATEN;
|
||||||
switch (cmd.start_src) {
|
switch (cmd->start_src) {
|
||||||
case TRIG_EXT:
|
case TRIG_EXT:
|
||||||
control_a |= TGEN | CGSL;
|
control_a |= TGEN | CGSL;
|
||||||
break;
|
break;
|
||||||
|
@ -980,7 +980,7 @@ static int control_a_bits(struct comedi_cmd cmd)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* returns appropriate bits for control register c, depending on command */
|
/* returns appropriate bits for control register c, depending on command */
|
||||||
static int control_c_bits(struct comedi_cmd cmd)
|
static int control_c_bits(const struct comedi_cmd *cmd)
|
||||||
{
|
{
|
||||||
int control_c;
|
int control_c;
|
||||||
int aref;
|
int aref;
|
||||||
|
@ -988,18 +988,18 @@ static int control_c_bits(struct comedi_cmd cmd)
|
||||||
/* set clock source to internal or external, select analog reference,
|
/* set clock source to internal or external, select analog reference,
|
||||||
* select unipolar / bipolar
|
* select unipolar / bipolar
|
||||||
*/
|
*/
|
||||||
aref = CR_AREF(cmd.chanlist[0]);
|
aref = CR_AREF(cmd->chanlist[0]);
|
||||||
control_c = UQEN; /* enable upper qram addresses */
|
control_c = UQEN; /* enable upper qram addresses */
|
||||||
if (aref != AREF_DIFF)
|
if (aref != AREF_DIFF)
|
||||||
control_c |= SD;
|
control_c |= SD;
|
||||||
if (aref == AREF_COMMON)
|
if (aref == AREF_COMMON)
|
||||||
control_c |= CMEN;
|
control_c |= CMEN;
|
||||||
/* if a unipolar range was selected */
|
/* if a unipolar range was selected */
|
||||||
if (CR_RANGE(cmd.chanlist[0]) & UNIPOLAR)
|
if (CR_RANGE(cmd->chanlist[0]) & UNIPOLAR)
|
||||||
control_c |= UB;
|
control_c |= UB;
|
||||||
switch (cmd.scan_begin_src) {
|
switch (cmd->scan_begin_src) {
|
||||||
case TRIG_FOLLOW: /* not in burst mode */
|
case TRIG_FOLLOW: /* not in burst mode */
|
||||||
switch (cmd.convert_src) {
|
switch (cmd->convert_src) {
|
||||||
case TRIG_TIMER:
|
case TRIG_TIMER:
|
||||||
/* trig on cascaded counters */
|
/* trig on cascaded counters */
|
||||||
control_c |= IPCLK;
|
control_c |= IPCLK;
|
||||||
|
@ -1047,29 +1047,33 @@ static int das1800_set_frequency(struct comedi_device *dev)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* sets up counters */
|
/* sets up counters */
|
||||||
static int setup_counters(struct comedi_device *dev, struct comedi_cmd cmd)
|
static int setup_counters(struct comedi_device *dev,
|
||||||
|
const struct comedi_cmd *cmd)
|
||||||
{
|
{
|
||||||
|
unsigned int period;
|
||||||
|
|
||||||
/* setup cascaded counters for conversion/scan frequency */
|
/* setup cascaded counters for conversion/scan frequency */
|
||||||
switch (cmd.scan_begin_src) {
|
switch (cmd->scan_begin_src) {
|
||||||
case TRIG_FOLLOW: /* not in burst mode */
|
case TRIG_FOLLOW: /* not in burst mode */
|
||||||
if (cmd.convert_src == TRIG_TIMER) {
|
if (cmd->convert_src == TRIG_TIMER) {
|
||||||
/* set conversion frequency */
|
/* set conversion frequency */
|
||||||
|
period = cmd->convert_arg;
|
||||||
i8253_cascade_ns_to_timer_2div(TIMER_BASE,
|
i8253_cascade_ns_to_timer_2div(TIMER_BASE,
|
||||||
&(devpriv->divisor1),
|
&devpriv->divisor1,
|
||||||
&(devpriv->divisor2),
|
&devpriv->divisor2,
|
||||||
&(cmd.convert_arg),
|
&period,
|
||||||
cmd.
|
cmd->flags &
|
||||||
flags & TRIG_ROUND_MASK);
|
TRIG_ROUND_MASK);
|
||||||
if (das1800_set_frequency(dev) < 0)
|
if (das1800_set_frequency(dev) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case TRIG_TIMER: /* in burst mode */
|
case TRIG_TIMER: /* in burst mode */
|
||||||
/* set scan frequency */
|
/* set scan frequency */
|
||||||
i8253_cascade_ns_to_timer_2div(TIMER_BASE, &(devpriv->divisor1),
|
period = cmd->scan_begin_arg;
|
||||||
&(devpriv->divisor2),
|
i8253_cascade_ns_to_timer_2div(TIMER_BASE, &devpriv->divisor1,
|
||||||
&(cmd.scan_begin_arg),
|
&devpriv->divisor2, &period,
|
||||||
cmd.flags & TRIG_ROUND_MASK);
|
cmd->flags & TRIG_ROUND_MASK);
|
||||||
if (das1800_set_frequency(dev) < 0)
|
if (das1800_set_frequency(dev) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
break;
|
break;
|
||||||
|
@ -1078,7 +1082,7 @@ static int setup_counters(struct comedi_device *dev, struct comedi_cmd cmd)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* setup counter 0 for 'about triggering' */
|
/* setup counter 0 for 'about triggering' */
|
||||||
if (cmd.stop_src == TRIG_EXT) {
|
if (cmd->stop_src == TRIG_EXT) {
|
||||||
/* load counter 0 in mode 0 */
|
/* load counter 0 in mode 0 */
|
||||||
i8254_load(dev->iobase + DAS1800_COUNTER, 0, 0, 1, 0);
|
i8254_load(dev->iobase + DAS1800_COUNTER, 0, 0, 1, 0);
|
||||||
}
|
}
|
||||||
|
@ -1087,7 +1091,7 @@ static int setup_counters(struct comedi_device *dev, struct comedi_cmd cmd)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* utility function that suggests a dma transfer size based on the conversion period 'ns' */
|
/* utility function that suggests a dma transfer size based on the conversion period 'ns' */
|
||||||
static unsigned int suggest_transfer_size(struct comedi_cmd *cmd)
|
static unsigned int suggest_transfer_size(const struct comedi_cmd *cmd)
|
||||||
{
|
{
|
||||||
unsigned int size = DMA_BUF_SIZE;
|
unsigned int size = DMA_BUF_SIZE;
|
||||||
static const int sample_size = 2; /* size in bytes of one sample from board */
|
static const int sample_size = 2; /* size in bytes of one sample from board */
|
||||||
|
@ -1125,7 +1129,7 @@ static unsigned int suggest_transfer_size(struct comedi_cmd *cmd)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* sets up dma */
|
/* sets up dma */
|
||||||
static void setup_dma(struct comedi_device *dev, struct comedi_cmd cmd)
|
static void setup_dma(struct comedi_device *dev, const struct comedi_cmd *cmd)
|
||||||
{
|
{
|
||||||
unsigned long lock_flags;
|
unsigned long lock_flags;
|
||||||
const int dual_dma = devpriv->irq_dma_bits & DMA_DUAL;
|
const int dual_dma = devpriv->irq_dma_bits & DMA_DUAL;
|
||||||
|
@ -1134,7 +1138,7 @@ static void setup_dma(struct comedi_device *dev, struct comedi_cmd cmd)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* determine a reasonable dma transfer size */
|
/* determine a reasonable dma transfer size */
|
||||||
devpriv->dma_transfer_size = suggest_transfer_size(&cmd);
|
devpriv->dma_transfer_size = suggest_transfer_size(cmd);
|
||||||
lock_flags = claim_dma_lock();
|
lock_flags = claim_dma_lock();
|
||||||
disable_dma(devpriv->dma0);
|
disable_dma(devpriv->dma0);
|
||||||
/* clear flip-flop to make sure 2-byte registers for
|
/* clear flip-flop to make sure 2-byte registers for
|
||||||
|
@ -1163,14 +1167,15 @@ static void setup_dma(struct comedi_device *dev, struct comedi_cmd cmd)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* programs channel/gain list into card */
|
/* programs channel/gain list into card */
|
||||||
static void program_chanlist(struct comedi_device *dev, struct comedi_cmd cmd)
|
static void program_chanlist(struct comedi_device *dev,
|
||||||
|
const struct comedi_cmd *cmd)
|
||||||
{
|
{
|
||||||
int i, n, chan_range;
|
int i, n, chan_range;
|
||||||
unsigned long irq_flags;
|
unsigned long irq_flags;
|
||||||
const int range_mask = 0x3; /* masks unipolar/bipolar bit off range */
|
const int range_mask = 0x3; /* masks unipolar/bipolar bit off range */
|
||||||
const int range_bitshift = 8;
|
const int range_bitshift = 8;
|
||||||
|
|
||||||
n = cmd.chanlist_len;
|
n = cmd->chanlist_len;
|
||||||
/* spinlock protects indirect addressing */
|
/* spinlock protects indirect addressing */
|
||||||
spin_lock_irqsave(&dev->spinlock, irq_flags);
|
spin_lock_irqsave(&dev->spinlock, irq_flags);
|
||||||
outb(QRAM, dev->iobase + DAS1800_SELECT); /* select QRAM for baseAddress + 0x0 */
|
outb(QRAM, dev->iobase + DAS1800_SELECT); /* select QRAM for baseAddress + 0x0 */
|
||||||
|
@ -1178,9 +1183,9 @@ static void program_chanlist(struct comedi_device *dev, struct comedi_cmd cmd)
|
||||||
/* make channel / gain list */
|
/* make channel / gain list */
|
||||||
for (i = 0; i < n; i++) {
|
for (i = 0; i < n; i++) {
|
||||||
chan_range =
|
chan_range =
|
||||||
CR_CHAN(cmd.
|
CR_CHAN(cmd->chanlist[i]) |
|
||||||
chanlist[i]) | ((CR_RANGE(cmd.chanlist[i]) &
|
((CR_RANGE(cmd->chanlist[i]) & range_mask) <<
|
||||||
range_mask) << range_bitshift);
|
range_bitshift);
|
||||||
outw(chan_range, dev->iobase + DAS1800_QRAM);
|
outw(chan_range, dev->iobase + DAS1800_QRAM);
|
||||||
}
|
}
|
||||||
outb(n - 1, dev->iobase + DAS1800_QRAM_ADDRESS); /*finish write to QRAM */
|
outb(n - 1, dev->iobase + DAS1800_QRAM_ADDRESS); /*finish write to QRAM */
|
||||||
|
@ -1196,7 +1201,7 @@ static int das1800_ai_do_cmd(struct comedi_device *dev,
|
||||||
int ret;
|
int ret;
|
||||||
int control_a, control_c;
|
int control_a, control_c;
|
||||||
struct comedi_async *async = s->async;
|
struct comedi_async *async = s->async;
|
||||||
struct comedi_cmd cmd = async->cmd;
|
const struct comedi_cmd *cmd = &async->cmd;
|
||||||
|
|
||||||
if (!dev->irq) {
|
if (!dev->irq) {
|
||||||
comedi_error(dev,
|
comedi_error(dev,
|
||||||
|
@ -1206,12 +1211,12 @@ static int das1800_ai_do_cmd(struct comedi_device *dev,
|
||||||
|
|
||||||
/* disable dma on TRIG_WAKE_EOS, or TRIG_RT
|
/* disable dma on TRIG_WAKE_EOS, or TRIG_RT
|
||||||
* (because dma in handler is unsafe at hard real-time priority) */
|
* (because dma in handler is unsafe at hard real-time priority) */
|
||||||
if (cmd.flags & (TRIG_WAKE_EOS | TRIG_RT))
|
if (cmd->flags & (TRIG_WAKE_EOS | TRIG_RT))
|
||||||
devpriv->irq_dma_bits &= ~DMA_ENABLED;
|
devpriv->irq_dma_bits &= ~DMA_ENABLED;
|
||||||
else
|
else
|
||||||
devpriv->irq_dma_bits |= devpriv->dma_bits;
|
devpriv->irq_dma_bits |= devpriv->dma_bits;
|
||||||
/* interrupt on end of conversion for TRIG_WAKE_EOS */
|
/* interrupt on end of conversion for TRIG_WAKE_EOS */
|
||||||
if (cmd.flags & TRIG_WAKE_EOS) {
|
if (cmd->flags & TRIG_WAKE_EOS) {
|
||||||
/* interrupt fifo not empty */
|
/* interrupt fifo not empty */
|
||||||
devpriv->irq_dma_bits &= ~FIMD;
|
devpriv->irq_dma_bits &= ~FIMD;
|
||||||
} else {
|
} else {
|
||||||
|
@ -1219,8 +1224,8 @@ static int das1800_ai_do_cmd(struct comedi_device *dev,
|
||||||
devpriv->irq_dma_bits |= FIMD;
|
devpriv->irq_dma_bits |= FIMD;
|
||||||
}
|
}
|
||||||
/* determine how many conversions we need */
|
/* determine how many conversions we need */
|
||||||
if (cmd.stop_src == TRIG_COUNT)
|
if (cmd->stop_src == TRIG_COUNT)
|
||||||
devpriv->count = cmd.stop_arg * cmd.chanlist_len;
|
devpriv->count = cmd->stop_arg * cmd->chanlist_len;
|
||||||
|
|
||||||
das1800_cancel(dev, s);
|
das1800_cancel(dev, s);
|
||||||
|
|
||||||
|
@ -1240,9 +1245,9 @@ static int das1800_ai_do_cmd(struct comedi_device *dev,
|
||||||
/* set conversion rate and length for burst mode */
|
/* set conversion rate and length for burst mode */
|
||||||
if (control_c & BMDE) {
|
if (control_c & BMDE) {
|
||||||
/* program conversion period with number of microseconds minus 1 */
|
/* program conversion period with number of microseconds minus 1 */
|
||||||
outb(cmd.convert_arg / 1000 - 1,
|
outb(cmd->convert_arg / 1000 - 1,
|
||||||
dev->iobase + DAS1800_BURST_RATE);
|
dev->iobase + DAS1800_BURST_RATE);
|
||||||
outb(cmd.chanlist_len - 1, dev->iobase + DAS1800_BURST_LENGTH);
|
outb(cmd->chanlist_len - 1, dev->iobase + DAS1800_BURST_LENGTH);
|
||||||
}
|
}
|
||||||
outb(devpriv->irq_dma_bits, dev->iobase + DAS1800_CONTROL_B); /* enable irq/dma */
|
outb(devpriv->irq_dma_bits, dev->iobase + DAS1800_CONTROL_B); /* enable irq/dma */
|
||||||
outb(control_a, dev->iobase + DAS1800_CONTROL_A); /* enable fifo and triggering */
|
outb(control_a, dev->iobase + DAS1800_CONTROL_A); /* enable fifo and triggering */
|
||||||
|
|
Loading…
Add table
Reference in a new issue