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