linux/drivers/staging/comedi/drivers/comedi_fc.h
<<
>>
Prefs
   1/*
   2 * comedi_fc.h
   3 * This is a place for code driver writers wish to share between
   4 * two or more drivers. These functions are meant to be used only
   5 * by drivers, they are NOT part of the kcomedilib API!
   6 *
   7 * Author: Frank Mori Hess <fmhess@users.sourceforge.net>
   8 * Copyright (C) 2002 Frank Mori Hess
   9 *
  10 * This program is free software; you can redistribute it and/or modify
  11 * it under the terms of the GNU General Public License as published by
  12 * the Free Software Foundation; either version 2 of the License, or
  13 * (at your option) any later version.
  14 *
  15 * This program is distributed in the hope that it will be useful,
  16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  18 * GNU General Public License for more details.
  19 */
  20
  21#ifndef _COMEDI_FC_H
  22#define _COMEDI_FC_H
  23
  24#include "../comedidev.h"
  25
  26/**
  27 * cfc_check_trigger_src() - trivially validate a comedi_cmd trigger source
  28 * @src: pointer to the trigger source to validate
  29 * @flags: bitmask of valid TRIG_* for the trigger
  30 *
  31 * This is used in "step 1" of the do_cmdtest functions of comedi drivers
  32 * to vaildate the comedi_cmd triggers. The mask of the @src against the
  33 * @flags allows the userspace comedilib to pass all the comedi_cmd
  34 * triggers as TRIG_ANY and get back a bitmask of the valid trigger sources.
  35 */
  36static inline int cfc_check_trigger_src(unsigned int *src, unsigned int flags)
  37{
  38        unsigned int orig_src = *src;
  39
  40        *src = orig_src & flags;
  41        if (*src == TRIG_INVALID || *src != orig_src)
  42                return -EINVAL;
  43        return 0;
  44}
  45
  46/**
  47 * cfc_check_trigger_is_unique() - make sure a trigger source is unique
  48 * @src: the trigger source to check
  49 */
  50static inline int cfc_check_trigger_is_unique(unsigned int src)
  51{
  52        /* this test is true if more than one _src bit is set */
  53        if ((src & (src - 1)) != 0)
  54                return -EINVAL;
  55        return 0;
  56}
  57
  58/**
  59 * cfc_check_trigger_arg_is() - trivially validate a trigger argument
  60 * @arg: pointer to the trigger arg to validate
  61 * @val: the value the argument should be
  62 */
  63static inline int cfc_check_trigger_arg_is(unsigned int *arg, unsigned int val)
  64{
  65        if (*arg != val) {
  66                *arg = val;
  67                return -EINVAL;
  68        }
  69        return 0;
  70}
  71
  72/**
  73 * cfc_check_trigger_arg_min() - trivially validate a trigger argument
  74 * @arg: pointer to the trigger arg to validate
  75 * @val: the minimum value the argument should be
  76 */
  77static inline int cfc_check_trigger_arg_min(unsigned int *arg,
  78                                            unsigned int val)
  79{
  80        if (*arg < val) {
  81                *arg = val;
  82                return -EINVAL;
  83        }
  84        return 0;
  85}
  86
  87/**
  88 * cfc_check_trigger_arg_max() - trivially validate a trigger argument
  89 * @arg: pointer to the trigger arg to validate
  90 * @val: the maximum value the argument should be
  91 */
  92static inline int cfc_check_trigger_arg_max(unsigned int *arg,
  93                                            unsigned int val)
  94{
  95        if (*arg > val) {
  96                *arg = val;
  97                return -EINVAL;
  98        }
  99        return 0;
 100}
 101
 102#endif /* _COMEDI_FC_H */
 103