Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ace7aa7f authored by Ian Abbott's avatar Ian Abbott Committed by Greg Kroah-Hartman
Browse files

staging: comedi: comedi.h: add kernel-doc comments to struct types



Add "kernel-doc"-formatted comments to the COMEDI `struct` declarations
used with ioctls.  Don't bother documenting `struct comedi_trig` as it
is obsolete and not supported.

Signed-off-by: default avatarIan Abbott <abbotti@mev.co.uk>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 8fb02b29
Loading
Loading
Loading
Loading
+325 −7
Original line number Diff line number Diff line
@@ -491,6 +491,19 @@ struct comedi_trig {
	unsigned int unused[3];
};

/**
 * struct comedi_insn - COMEDI instruction
 * @insn:	COMEDI instruction type (%INSN_xxx).
 * @n:		Length of @data[].
 * @data:	Pointer to data array operated on by the instruction.
 * @subdev:	Subdevice index.
 * @chanspec:	A packed "chanspec" value consisting of channel number,
 *		analog range index, analog reference type, and flags.
 * @unused:	Reserved for future use.
 *
 * This is used with the %COMEDI_INSN ioctl, and indirectly with the
 * %COMEDI_INSNLIST ioctl.
 */
struct comedi_insn {
	unsigned int insn;
	unsigned int n;
@@ -500,11 +513,95 @@ struct comedi_insn {
	unsigned int unused[3];
};

/**
 * struct comedi_insnlist - list of COMEDI instructions
 * @n_insns:	Number of COMEDI instructions.
 * @insns:	Pointer to array COMEDI instructions.
 *
 * This is used with the %COMEDI_INSNLIST ioctl.
 */
struct comedi_insnlist {
	unsigned int n_insns;
	struct comedi_insn __user *insns;
};

/**
 * struct comedi_cmd - COMEDI asynchronous acquisition command details
 * @subdev:		Subdevice index.
 * @flags:		Command flags (%CMDF_xxx).
 * @start_src:		"Start acquisition" trigger source (%TRIG_xxx).
 * @start_arg:		"Start acquisition" trigger argument.
 * @scan_begin_src:	"Scan begin" trigger source.
 * @scan_begin_arg:	"Scan begin" trigger argument.
 * @convert_src:	"Convert" trigger source.
 * @convert_arg:	"Convert" trigger argument.
 * @scan_end_src:	"Scan end" trigger source.
 * @scan_end_arg:	"Scan end" trigger argument.
 * @stop_src:		"Stop acquisition" trigger source.
 * @stop_arg:		"Stop acquisition" trigger argument.
 * @chanlist:		Pointer to array of "chanspec" values, containing a
 *			sequence of channel numbers packed with analog range
 *			index, etc.
 * @chanlist_len:	Number of channels in sequence.
 * @data:		Pointer to miscellaneous set-up data (not used).
 * @data_len:		Length of miscellaneous set-up data.
 *
 * This is used with the %COMEDI_CMD or %COMEDI_CMDTEST ioctl to set-up
 * or validate an asynchronous acquisition command.  The ioctl may modify
 * the &struct comedi_cmd and copy it back to the caller.
 *
 * Optional command @flags values that can be ORed together...
 *
 * %CMDF_BOGUS - makes %COMEDI_CMD ioctl return error %EAGAIN instead of
 * starting the command.
 *
 * %CMDF_PRIORITY - requests "hard real-time" processing (which is not
 * supported in this version of COMEDI).
 *
 * %CMDF_WAKE_EOS - requests the command makes data available for reading
 * after every "scan" period.
 *
 * %CMDF_WRITE - marks the command as being in the "write" (to device)
 * direction.  This does not need to be specified by the caller unless the
 * subdevice supports commands in either direction.
 *
 * %CMDF_RAWDATA - prevents the command from "munging" the data between the
 * COMEDI sample format and the raw hardware sample format.
 *
 * %CMDF_ROUND_NEAREST - requests timing periods to be rounded to nearest
 * supported values.
 *
 * %CMDF_ROUND_DOWN - requests timing periods to be rounded down to supported
 * values (frequencies rounded up).
 *
 * %CMDF_ROUND_UP - requests timing periods to be rounded up to supported
 * values (frequencies rounded down).
 *
 * Trigger source values for @start_src, @scan_begin_src, @convert_src,
 * @scan_end_src, and @stop_src...
 *
 * %TRIG_ANY - "all ones" value used to test which trigger sources are
 * supported.
 *
 * %TRIG_INVALID - "all zeroes" value used to indicate that all requested
 * trigger sources are invalid.
 *
 * %TRIG_NONE - never trigger (often used as a @stop_src value).
 *
 * %TRIG_NOW - trigger after '_arg' nanoseconds.
 *
 * %TRIG_FOLLOW - trigger follows another event.
 *
 * %TRIG_TIMER - trigger every '_arg' nanoseconds.
 *
 * %TRIG_COUNT - trigger when count '_arg' is reached.
 *
 * %TRIG_EXT - trigger on external signal specified by '_arg'.
 *
 * %TRIG_INT - trigger on internal, software trigger specified by '_arg'.
 *
 * %TRIG_OTHER - trigger on other, driver-defined signal specified by '_arg'.
 */
struct comedi_cmd {
	unsigned int subdev;
	unsigned int flags;
@@ -524,13 +621,31 @@ struct comedi_cmd {
	unsigned int stop_src;
	unsigned int stop_arg;

	unsigned int *chanlist;	/* channel/range list */
	unsigned int *chanlist;
	unsigned int chanlist_len;

	short __user *data; /* data list, size depends on subd flags */
	short __user *data;
	unsigned int data_len;
};

/**
 * struct comedi_chaninfo - used to retrieve per-channel information
 * @subdev:		Subdevice index.
 * @maxdata_list:	Optional pointer to per-channel maximum data values.
 * @flaglist:		Optional pointer to per-channel flags.
 * @rangelist:		Optional pointer to per-channel range types.
 * @unused:		Reserved for future use.
 *
 * This is used with the %COMEDI_CHANINFO ioctl to get per-channel information
 * for the subdevice.  Use of this requires knowledge of the number of channels
 * and subdevice flags obtained using the %COMEDI_SUBDINFO ioctl.
 *
 * The @maxdata_list member must be %NULL unless the %SDF_MAXDATA subdevice
 * flag is set.  The @flaglist member must be %NULL unless the %SDF_FLAGS
 * subdevice flag is set.  The @rangelist member must be %NULL unless the
 * %SDF_RANGETYPE subdevice flag is set.  Otherwise, the arrays they point to
 * must be at least as long as the number of channels.
 */
struct comedi_chaninfo {
	unsigned int subdev;
	unsigned int __user *maxdata_list;
@@ -539,17 +654,157 @@ struct comedi_chaninfo {
	unsigned int unused[4];
};

/**
 * struct comedi_rangeinfo - used to retrieve the range table for a channel
 * @range_type:		Encodes subdevice index (bits 27:24), channel index
 *			(bits 23:16) and range table length (bits 15:0).
 * @range_ptr:		Pointer to array of @struct comedi_krange to be filled
 *			in with the range table for the channel or subdevice.
 *
 * This is used with the %COMEDI_RANGEINFO ioctl to retrieve the range table
 * for a specific channel (if the subdevice has the %SDF_RANGETYPE flag set to
 * indicate that the range table depends on the channel), or for the subdevice
 * as a whole (if the %SDF_RANGETYPE flag is clear, indicating the range table
 * is shared by all channels).
 *
 * The @range_type value is an input to the ioctl and comes from a previous
 * use of the %COMEDI_SUBDINFO ioctl (if the %SDF_RANGETYPE flag is clear),
 * or the %COMEDI_CHANINFO ioctl (if the %SDF_RANGETYPE flag is set).
 */
struct comedi_rangeinfo {
	unsigned int range_type;
	void __user *range_ptr;
};

/**
 * struct comedi_krange - describes a range in a range table
 * @min:	Minimum value in millionths (1e-6) of a unit.
 * @max:	Maximum value in millionths (1e-6) of a unit.
 * @flags:	Indicates the units (in bits 7:0) OR'ed with optional flags.
 *
 * A range table is associated with a single channel, or with all channels in a
 * subdevice, and a list of one or more ranges.  A %struct comedi_krange
 * describes the physical range of units for one of those ranges.  Sample
 * values in COMEDI are unsigned from %0 up to some 'maxdata' value.  The
 * mapping from sample values to physical units is assumed to be nomimally
 * linear (for the purpose of describing the range), with sample value %0
 * mapping to @min, and the 'maxdata' sample value mapping to @max.
 *
 * The currently defined units are %UNIT_volt (%0), %UNIT_mA (%1), and
 * %UNIT_none (%2).  The @min and @max values are the physical range multiplied
 * by 1e6, so a @max value of %1000000 (with %UNIT_volt) represents a maximal
 * value of 1 volt.
 *
 * The only defined flag value is %RF_external (%1 << %8), indicating that the
 * the range needs to be multiplied by an external reference.
 */
struct comedi_krange {
	int min;	/* fixed point, multiply by 1e-6 */
	int max;	/* fixed point, multiply by 1e-6 */
	int min;
	int max;
	unsigned int flags;
};

/**
 * struct comedi_subdinfo - used to retrieve information about a subdevice
 * @type:		Type of subdevice from &enum comedi_subdevice_type.
 * @n_chan:		Number of channels the subdevice supports.
 * @subd_flags:		A mixture of static and dynamic flags describing
 *			aspects of the subdevice and its current state.
 * @timer_type:		Timer type.  Always set to %5 ("nanosecond timer").
 * @len_chanlist:	Maximum length of a channel list if the subdevice
 *			supports asynchronous acquisition commands.
 * @maxdata:		Maximum sample value for all channels if the
 *			%SDF_MAXDATA subdevice flag is clear.
 * @flags:		Channel flags for all channels if the %SDF_FLAGS
 *			subdevice flag is clear.
 * @range_type:		The range type for all channels if the %SDF_RANGETYPE
 *			subdevice flag is clear.  Encodes the subdevice index
 *			(bits 27:24), a dummy channel index %0 (bits 23:16),
 *			and the range table length (bits 15:0).
 * @settling_time_0:	Not used.
 * @insn_bits_support:	Set to %COMEDI_SUPPORTED if the subdevice supports the
 *			%INSN_BITS instruction, or to %COMEDI_UNSUPPORTED if it
 *			does not.
 * @unused:		Reserved for future use.
 *
 * This is used with the %COMEDI_SUBDINFO ioctl which copies an array of
 * &struct comedi_subdinfo back to user space, with one element per subdevice.
 * Use of this requires knowledge of the number of subdevices obtained from
 * the %COMEDI_DEVINFO ioctl.
 *
 * These are the @subd_flags values that may be ORed together...
 *
 * %SDF_BUSY - the subdevice is busy processing an asynchronous command or a
 * synchronous instruction.
 *
 * %SDF_BUSY_OWNER - the subdevice is busy processing an asynchronous
 * acquisition command started on the current file object (the file object
 * issuing the %COMEDI_SUBDINFO ioctl).
 *
 * %SDF_LOCKED - the subdevice is locked by a %COMEDI_LOCK ioctl.
 *
 * %SDF_LOCK_OWNER - the subdevice is locked by a %COMEDI_LOCK ioctl from the
 * current file object.
 *
 * %SDF_MAXDATA - maximum sample values are channel-specific.
 *
 * %SDF_FLAGS - channel flags are channel-specific.
 *
 * %SDF_RANGETYPE - range types are channel-specific.
 *
 * %SDF_MODE0 (aliased as %SDF_PWM_COUNTER) - the subdevice can do mode 0 (?)
 * or PWM can switch off automatically.
 *
 * %SDF_MODE1 (aliased as %SDF_PWM_HBRIDGE) - the subdevice can do mode 1 (?)
 * or PWM is signed (H-bridge).
 *
 * %SDF_MODE2 - the subdevice can do mode 2 (?).
 *
 * %SDF_MODE3 - the subdevice can do mode 3 (?).
 *
 * %SDF_MODE4 - the subdevice can do mode 4 (?).
 *
 * %SDF_CMD - the subdevice supports asynchronous commands.
 *
 * %SDF_SOFT_CALIBRATED - the subdevice uses software calibration.
 *
 * %SDF_CMD_WRITE - the subdevice supports asynchronous commands in the output
 * ("write") direction.
 *
 * %SDF_CMD_READ - the subdevice supports asynchronous commands in the input
 * ("read") direction.
 *
 * %SDF_READABLE - the subdevice is readable (e.g. analog input).
 *
 * %SDF_WRITABLE (aliased as %SDF_WRITEABLE) - the subdevice is writable (e.g.
 * analog output).
 *
 * %SDF_INTERNAL - the subdevice has no externally visible lines.
 *
 * %SDF_GROUND - the subdevice can use ground as an analog reference.
 *
 * %SDF_COMMON - the subdevice can use a common analog reference.
 *
 * %SDF_DIFF - the subdevice can use differential inputs (or outputs).
 *
 * %SDF_OTHER - the subdevice can use some other analog reference.
 *
 * %SDF_DITHER - the subdevice can do dithering.
 *
 * %SDF_DEGLITCH - the subdevice can do deglitching.
 *
 * %SDF_MMAP - this is never set.
 *
 * %SDF_RUNNING - an asynchronous command is still running.
 *
 * %SDF_LSAMPL - the subdevice uses "long" (32-bit) samples (for asynchronous
 * command data).
 *
 * %SDF_PACKED - the subdevice packs several DIO samples into a single sample
 * (for asynchronous command data).
 *
 * No "channel flags" (@flags) values are currently defined.
 */
struct comedi_subdinfo {
	unsigned int type;
	unsigned int n_chan;
@@ -557,14 +812,26 @@ struct comedi_subdinfo {
	unsigned int timer_type;
	unsigned int len_chanlist;
	unsigned int maxdata;
	unsigned int flags;		/* channel flags */
	unsigned int range_type;	/* lookup in kernel */
	unsigned int flags;
	unsigned int range_type;
	unsigned int settling_time_0;
	/* see support_level enum for values */
	unsigned insn_bits_support;
	unsigned int unused[8];
};

/**
 * struct comedi_devinfo - used to retrieve information about a COMEDI device
 * @version_code:	COMEDI version code.
 * @n_subdevs:		Number of subdevices the device has.
 * @driver_name:	Null-terminated COMEDI driver name.
 * @board_name:		Null-terminated COMEDI board name.
 * @read_subdevice:	Index of the current "read" subdevice (%-1 if none).
 * @write_subdevice:	Index of the current "write" subdevice (%-1 if none).
 * @unused:		Reserved for future use.
 *
 * This is used with the %COMEDI_DEVINFO ioctl to get basic information about
 * the device.
 */
struct comedi_devinfo {
	unsigned int version_code;
	unsigned int n_subdevs;
@@ -575,11 +842,45 @@ struct comedi_devinfo {
	int unused[30];
};

/**
 * struct comedi_devconfig - used to configure a legacy COMEDI device
 * @board_name:		Null-terminated string specifying the type of board
 *			to configure.
 * @options:		An array of integer configuration options.
 *
 * This is used with the %COMEDI_DEVCONFIG ioctl to configure a "legacy" COMEDI
 * device, such as an ISA card.  Not all COMEDI drivers support this.  Those
 * that do either expect the specified board name to match one of a list of
 * names registered with the COMEDI core, or expect the specified board name
 * to match the COMEDI driver name itself.  The configuration options are
 * handled in a driver-specific manner.
 */
struct comedi_devconfig {
	char board_name[COMEDI_NAMELEN];
	int options[COMEDI_NDEVCONFOPTS];
};

/**
 * struct comedi_bufconfig - used to set or get buffer size for a subdevice
 * @subdevice:		Subdevice index.
 * @flags:		Not used.
 * @maximum_size:	Maximum allowed buffer size.
 * @size:		Buffer size.
 * @unused:		Reserved for future use.
 *
 * This is used with the %COMEDI_BUFCONFIG ioctl to get or configure the
 * maximum buffer size and current buffer size for a COMEDI subdevice that
 * supports asynchronous commands.  If the subdevice does not support
 * asynchronous commands, @maximum_size and @size are ignored and set to 0.
 *
 * On ioctl input, non-zero values of @maximum_size and @size specify a
 * new maximum size and new current size (in bytes), respectively.  These
 * will by rounded up to a multiple of %PAGE_SIZE.  Specifying a new maximum
 * size requires admin capabilities.
 *
 * On ioctl output, @maximum_size and @size and set to the current maximum
 * buffer size and current buffer size, respectively.
 */
struct comedi_bufconfig {
	unsigned int subdevice;
	unsigned int flags;
@@ -590,6 +891,23 @@ struct comedi_bufconfig {
	unsigned int unused[4];
};

/**
 * struct comedi_bufinfo - used to manipulate buffer position for a subdevice
 * @subdevice:		Subdevice index.
 * @bytes_read:		Specify amount to advance read position for an
 *			asynchronous command in the input ("read") direction.
 * @buf_write_ptr:	Current write position (index) within the buffer.
 * @buf_read_ptr:	Current read position (index) within the buffer.
 * @buf_write_count:	Total amount written, modulo 2^32.
 * @buf_read_count:	Total amount read, modulo 2^32.
 * @bytes_written:	Specify amount to advance write position for an
 *			asynchronous command in the output ("write") direction.
 * @unused:		Reserved for future use.
 *
 * This is used with the %COMEDI_BUFINFO ioctl to optionally advance the
 * current read or write position in an asynchronous acquisition data buffer,
 * and to get the current read and write positions in the buffer.
 */
struct comedi_bufinfo {
	unsigned int subdevice;
	unsigned int bytes_read;