staging: comedi: comedidev.h: add 'scans_done' member to comedi_async

Introduce a new member to comedi_async to count the number of scans completed.
This member is cleared by comedi_buf_reset() along with the other comedi_async
members. It is incremented in comedi_inc_scan_progress() when the end of scan
is detected.

This member will be used to clean up the scan counting in the comedi drivers.

Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Reviewed-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
H Hartley Sweeten 2014-11-05 10:20:52 -07:00 committed by Greg Kroah-Hartman
parent f4757af851
commit 1dacbe5b26
3 changed files with 10 additions and 0 deletions

View File

@ -236,6 +236,7 @@ void comedi_buf_reset(struct comedi_subdevice *s)
async->buf_read_ptr = 0; async->buf_read_ptr = 0;
async->cur_chan = 0; async->cur_chan = 0;
async->scans_done = 0;
async->scan_progress = 0; async->scan_progress = 0;
async->munge_chan = 0; async->munge_chan = 0;
async->munge_count = 0; async->munge_count = 0;

View File

@ -121,6 +121,7 @@ struct comedi_buf_map {
* @buf_read_ptr: buffer position for reader * @buf_read_ptr: buffer position for reader
* @cur_chan: current position in chanlist for scan (for those * @cur_chan: current position in chanlist for scan (for those
* drivers that use it) * drivers that use it)
* @scans_done: the number of scans completed (COMEDI_CB_EOS)
* @scan_progress: amount received or sent for current scan (in bytes) * @scan_progress: amount received or sent for current scan (in bytes)
* @munge_chan: current position in chanlist for "munging" * @munge_chan: current position in chanlist for "munging"
* @munge_count: "munge" count (in bytes, modulo 2**32) * @munge_count: "munge" count (in bytes, modulo 2**32)
@ -201,6 +202,7 @@ struct comedi_async {
unsigned int buf_write_ptr; unsigned int buf_write_ptr;
unsigned int buf_read_ptr; unsigned int buf_read_ptr;
unsigned int cur_chan; unsigned int cur_chan;
unsigned int scans_done;
unsigned int scan_progress; unsigned int scan_progress;
unsigned int munge_chan; unsigned int munge_chan;
unsigned int munge_count; unsigned int munge_count;

View File

@ -352,6 +352,13 @@ void comedi_inc_scan_progress(struct comedi_subdevice *s,
async->scan_progress += num_bytes; async->scan_progress += num_bytes;
if (async->scan_progress >= scan_length) { if (async->scan_progress >= scan_length) {
unsigned int nscans = async->scan_progress / scan_length;
if (async->scans_done < (UINT_MAX - nscans))
async->scans_done += nscans;
else
async->scans_done = UINT_MAX;
async->scan_progress %= scan_length; async->scan_progress %= scan_length;
async->events |= COMEDI_CB_EOS; async->events |= COMEDI_CB_EOS;
} }