1 // SPDX-License-Identifier: GPL-2.0+
3 * Header file for NI general purpose counter support code (ni_tio.c)
5 * COMEDI - Linux Control and Measurement Device Interface
8 #ifndef _COMEDI_NI_TIO_H
9 #define _COMEDI_NI_TIO_H
11 #include "../comedidev.h"
13 enum ni_gpct_register {
87 enum ni_gpct_variant {
88 ni_gpct_variant_e_series,
89 ni_gpct_variant_m_series,
94 struct ni_gpct_device *counter_dev;
95 unsigned int counter_index;
96 unsigned int chip_index;
97 u64 clock_period_ps; /* clock period in picoseconds */
98 struct mite_channel *mite_chan;
99 spinlock_t lock; /* protects 'mite_chan' */
102 struct ni_gpct_device {
103 struct comedi_device *dev;
104 void (*write)(struct ni_gpct *counter, unsigned int value,
105 enum ni_gpct_register);
106 unsigned int (*read)(struct ni_gpct *counter, enum ni_gpct_register);
107 enum ni_gpct_variant variant;
108 struct ni_gpct *counters;
109 unsigned int num_counters;
110 unsigned int regs[NITIO_NUM_REGS];
111 spinlock_t regs_lock; /* protects 'regs' */
114 struct ni_gpct_device *
115 ni_gpct_device_construct(struct comedi_device *dev,
116 void (*write)(struct ni_gpct *counter,
118 enum ni_gpct_register),
119 unsigned int (*read)(struct ni_gpct *counter,
120 enum ni_gpct_register),
121 enum ni_gpct_variant,
122 unsigned int num_counters);
123 void ni_gpct_device_destroy(struct ni_gpct_device *counter_dev);
124 void ni_tio_init_counter(struct ni_gpct *counter);
125 int ni_tio_insn_read(struct comedi_device *dev, struct comedi_subdevice *s,
126 struct comedi_insn *insn, unsigned int *data);
127 int ni_tio_insn_config(struct comedi_device *dev, struct comedi_subdevice *s,
128 struct comedi_insn *insn, unsigned int *data);
129 int ni_tio_insn_write(struct comedi_device *dev, struct comedi_subdevice *s,
130 struct comedi_insn *insn, unsigned int *data);
131 int ni_tio_cmd(struct comedi_device *dev, struct comedi_subdevice *s);
132 int ni_tio_cmdtest(struct comedi_device *dev, struct comedi_subdevice *s,
133 struct comedi_cmd *cmd);
134 int ni_tio_cancel(struct ni_gpct *counter);
135 void ni_tio_handle_interrupt(struct ni_gpct *counter,
136 struct comedi_subdevice *s);
137 void ni_tio_set_mite_channel(struct ni_gpct *counter,
138 struct mite_channel *mite_chan);
139 void ni_tio_acknowledge(struct ni_gpct *counter);
141 #endif /* _COMEDI_NI_TIO_H */