[PATCH 10/15] staging: comedi: tio: implement global tio/ctr routing

Ian Abbott abbotti at mev.co.uk
Thu Nov 10 19:36:05 UTC 2016


On 12/10/16 12:05, Spencer E. Olson wrote:
> Adds ability to use device-global names in command args, in particular
> cmd->start_arg (for NI_CtrArmStartTrigger), and cmd->scan_begin_arg or
> cmd->convert_arg (either is used to specify NI_CtrGate, with preference
> given to cmd->scan_begin_arg, if it is set).
>
> The actual arguments of cmd->start_arg are not fully checked against known
> register values for the particular devices because these are not documented
> or currently known.  This follows the precedence of prior versions of the
> tio driver.  Should these become known, they should be annotated in the
> route_values tables and the set of lines in ni_tio_cmdtest should be
> uncommented to allow the tests to be made.
>
> This patch also adds interface functions that allow routes for particular
> counter route destinations to be made/queried/unmade.  This allows overseer
> modules to implement test_route, connect_route, and disconnect_route.  As a
> part of these changes, various functions were cleaned up and clarified.
>
> These new interface functions allow direct writing/reading of register
> values.  This is an example of exactly what the new device-global access
> was intended to solve:  the old interface was not consistent with other
> portions of the ni_* drivers--it did not allow full register values to be
> given for various MUXes.  Instead, the old interface _did_ abstract away
> some of the actual hardware from the underlying devices, but it was not
> consistent with any other NI hardware.  Allowing the device-global
> identifiers to be used, the new patch provides for consistency across all
> ni_* drivers.  One final note:  these changes provide for backwards
> compatibility by allowing the older values to still be used in through the
> pre-existing kernel interfaces--though not in the new device-global
> test/dis/connect/route interfaces.
>
> Signed-off-by: Spencer E. Olson <olsonse at umich.edu>
> ---
>  drivers/staging/comedi/drivers/ni_660x.c         |  18 +-
>  drivers/staging/comedi/drivers/ni_mio_common.c   |   6 +-
>  drivers/staging/comedi/drivers/ni_tio.c          | 428 +++++++++++++++++------
>  drivers/staging/comedi/drivers/ni_tio.h          |  42 ++-
>  drivers/staging/comedi/drivers/ni_tio_internal.h |   1 +
>  drivers/staging/comedi/drivers/ni_tiocmd.c       |  66 +++-
>  6 files changed, 446 insertions(+), 115 deletions(-)
>

[snip]
> diff --git a/drivers/staging/comedi/drivers/ni_tio.h b/drivers/staging/comedi/drivers/ni_tio.h
> index 4978358..57e6c6a 100644
> --- a/drivers/staging/comedi/drivers/ni_tio.h
> +++ b/drivers/staging/comedi/drivers/ni_tio.h
> @@ -116,8 +116,10 @@ struct ni_gpct_device {
>  	enum ni_gpct_variant variant;
>  	struct ni_gpct *counters;
>  	unsigned int num_counters;
> +	unsigned int counters_per_chip;
>  	unsigned int regs[NITIO_NUM_REGS];
>  	spinlock_t regs_lock;		/* protects 'regs' */
> +	const struct ni_route_tables *routing_tables; /* link to routes */
>  };
>
>  struct ni_gpct_device *
> @@ -128,7 +130,9 @@ ni_gpct_device_construct(struct comedi_device *,
>  			 unsigned int (*read)(struct ni_gpct *,
>  					      enum ni_gpct_register),
>  			 enum ni_gpct_variant,
> -			 unsigned int num_counters);
> +			 unsigned int num_counters,
> +			 unsigned int counters_per_chip,
> +			 const struct ni_route_tables *routing_tables);
>  void ni_gpct_device_destroy(struct ni_gpct_device *);
>  void ni_tio_init_counter(struct ni_gpct *);
>  int ni_tio_insn_read(struct comedi_device *, struct comedi_subdevice *,
> @@ -145,4 +149,40 @@ void ni_tio_handle_interrupt(struct ni_gpct *, struct comedi_subdevice *);
>  void ni_tio_set_mite_channel(struct ni_gpct *, struct mite_channel *);
>  void ni_tio_acknowledge(struct ni_gpct *);
>
> +/**
> + * Retrieves the register value of the current source of the output selector for
> + * the given destination.
> + *
> + * If the terminal for the destination is not already configured as an output,
> + * this function returns -EINVAL as error.
> + *
> + * Return: the register value of the destination output selector;
> + *         -EINVAL if terminal is not configured for output.
> + */
> +int ni_tio_get_routing(struct ni_gpct_device *counter_dev,
> +		       unsigned int destination);

The kerneldoc comments should go with the function definitions, not the 
declarations.

-- 
-=( Ian Abbott @ MEV Ltd.    E-mail: <abbotti at mev.co.uk> )=-
-=(                          Web: http://www.mev.co.uk/  )=-


More information about the devel mailing list