staging: comedi: comedi.h: add kernel-doc comments to struct types
authorIan Abbott <abbotti@mev.co.uk>
Tue, 9 Feb 2016 15:17:22 +0000 (15:17 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 12 Feb 2016 03:42:00 +0000 (19:42 -0800)
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: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/comedi/comedi.h

index 9ef0963101da0d39467edaeb7f08c38e8b2eeb1a..2ab48ce5c5d09476ad2e547502a5b76e88104b1d 100644 (file)
@@ -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;