Skip to content

Commit

Permalink
staging: comedi: comedi_fc: introduce cfc_check_trigger_src
Browse files Browse the repository at this point in the history
All of the comedi drivers that support the 'cmd' callback also
require a 'do_cmdtest' callback. The do_cmdtest validates the
comedi_cmd before it is executed.

"Step 1" of each do_cmdtest does a trivial validation of the
trigger sources by doing something like this for each trigger:

	int err = 0;
	unsigned int tmp;

	tmp = cmd->start_src;
	src &= TRIG_NOW;
	if (!src || tmp != src)
		err++;
	/* Test the remaining triggers similarly */

	if (err)
		return 1;

Introduce a helper function in comedi_fc to handle this boilerplate.
The drivers can then just do:

	err |= cfc_check_trigger_src(&cmd->start_src, TRIG_NOW);
	/* Test the remaining triggers similarly */

	if (err)
		return 1;

Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Cc: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
H Hartley Sweeten authored and Greg Kroah-Hartman committed Sep 11, 2012
1 parent 13b2663 commit 43b9778
Showing 1 changed file with 20 additions and 0 deletions.
20 changes: 20 additions & 0 deletions drivers/staging/comedi/drivers/comedi_fc.h
Original file line number Diff line number Diff line change
Expand Up @@ -73,4 +73,24 @@ static inline unsigned int cfc_bytes_per_scan(struct comedi_subdevice *subd)
return num_samples * bytes_per_sample(subd);
}

/**
* cfc_check_trigger_src() - trivially validate a comedi_cmd trigger source
* @src: pointer to the trigger source to validate
* @flags: bitmask of valid TRIG_* for the trigger
*
* This is used in "step 1" of the do_cmdtest functions of comedi drivers
* to vaildate the comedi_cmd triggers. The mask of the @src against the
* @flags allows the userspace comedilib to pass all the comedi_cmd
* triggers as TRIG_ANY and get back a bitmask of the valid trigger sources.
*/
static inline int cfc_check_trigger_src(unsigned int *src, unsigned int flags)
{
unsigned int orig_src = *src;

*src = orig_src & flags;
if (*src == TRIG_INVALID || *src != orig_src)
return -EINVAL;
return 0;
}

#endif /* _COMEDI_FC_H */

0 comments on commit 43b9778

Please sign in to comment.