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

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
......@@ -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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment