[Xenomai-git] Alexis Berlemont : Improve comedi_buf_*put/get() interfaces
Module: xenomai-head Branch: master Commit: 66b5984061564a975cb45243eaa220e7cb98e195 URL: http://git.xenomai.org/?p=xenomai-head.git;a=commit;h=66b5984061564a975cb45243eaa220e7cb98e195 Author: Alexis Berlemont Date: Fri Sep 18 23:27:23 2009 +0200 Improve comedi_buf_*put/get() interfaces --- include/comedi/buffer.h| 28 +++-- ksrc/drivers/comedi/buffer.c | 137 +++- ksrc/drivers/comedi/driver_facilities.c| 42 +++--- ksrc/drivers/comedi/intel/8255.c |2 +- .../comedi/national_instruments/mio_common.c | 139 ++-- ksrc/drivers/comedi/national_instruments/mite.c| 12 +- ksrc/drivers/comedi/national_instruments/mite.h|4 +- .../comedi/national_instruments/tio_common.c |2 +- ksrc/drivers/comedi/testing/fake.c |2 +- ksrc/drivers/comedi/testing/loop.c |4 +- 10 files changed, 224 insertions(+), 148 deletions(-) diff --git a/include/comedi/buffer.h b/include/comedi/buffer.h index 02f74e3..9f9989b 100644 --- a/include/comedi/buffer.h +++ b/include/comedi/buffer.h @@ -303,26 +303,34 @@ int comedi_alloc_buffer(comedi_buf_t * buf_desc); void comedi_free_buffer(comedi_buf_t * buf_desc); -int comedi_buf_prepare_absput(struct comedi_device *dev, unsigned long count); +int comedi_buf_prepare_absput(struct comedi_subdevice *subd, + unsigned long count); -int comedi_buf_commit_absput(struct comedi_device *dev, unsigned long count); +int comedi_buf_commit_absput(struct comedi_subdevice *subd, +unsigned long count); -int comedi_buf_prepare_put(struct comedi_device *dev, unsigned long count); +int comedi_buf_prepare_put(struct comedi_subdevice *subd, + unsigned long count); -int comedi_buf_commit_put(struct comedi_device *dev, unsigned long count); +int comedi_buf_commit_put(struct comedi_subdevice *subd, + unsigned long count); -int comedi_buf_put(struct comedi_device *dev, +int comedi_buf_put(struct comedi_subdevice *subd, void *bufdata, unsigned long count); -int comedi_buf_prepare_absget(struct comedi_device *dev, unsigned long count); +int comedi_buf_prepare_absget(struct comedi_subdevice *subd, + unsigned long count); -int comedi_buf_commit_absget(struct comedi_device *dev, unsigned long count); +int comedi_buf_commit_absget(struct comedi_subdevice *subd, +unsigned long count); -int comedi_buf_prepare_get(struct comedi_device *dev, unsigned long count); +int comedi_buf_prepare_get(struct comedi_subdevice *subd, + unsigned long count); -int comedi_buf_commit_get(struct comedi_device *dev, unsigned long count); +int comedi_buf_commit_get(struct comedi_subdevice *subd, + unsigned long count); -int comedi_buf_get(struct comedi_device *dev, +int comedi_buf_get(struct comedi_subdevice *subd, void *bufdata, unsigned long count); int comedi_buf_evt(struct comedi_subdevice *subd, unsigned long evts); diff --git a/ksrc/drivers/comedi/buffer.c b/ksrc/drivers/comedi/buffer.c index eec10a3..5f6dd9e 100644 --- a/ksrc/drivers/comedi/buffer.c +++ b/ksrc/drivers/comedi/buffer.c @@ -153,94 +153,165 @@ int comedi_get_chan(comedi_subd_t *subd) /* --- Transfer / copy functions --- */ -int comedi_buf_prepare_absput(comedi_dev_t * dev, unsigned long count) +int comedi_buf_prepare_absput(comedi_subd_t *subd, unsigned long count) { - comedi_buf_t *buf = dev->transfer.bufs[dev->transfer.idx_read_subd]; + comedi_dev_t *dev; + comedi_buf_t *buf; + + if ((subd->flags & COMEDI_SUBD_MASK_READ) == 0) + return -EINVAL; + + dev = subd->dev; + buf = dev->transfer.bufs[subd->idx]; return __pre_abs_put(buf, count); } -int comedi_buf_commit_absput(comedi_dev_t * dev, unsigned long count) + +int comedi_buf_commit_absput(comedi_subd_t *subd, unsigned long count) { + comedi_dev_t *dev; + comedi_buf_t *buf; + + if ((subd->flags & COMEDI_SUBD_MASK_READ) == 0) + return -EINVAL; - comedi_buf_t *buf = dev->transfer.bufs[dev->transfer.idx_read_subd]; + dev = subd->dev; + buf = dev->transfer.bufs[subd->idx]; return __abs_put(buf, count); } -int comedi_buf_prepare_put(comedi_dev_t * dev, unsigned long count) +int comedi_buf_prepare_put(comedi_subd_t *subd, unsigned long count) { - comedi_buf_t *buf = dev->transfer.bufs[dev->transfer.idx_read_subd]; + comedi_dev_t *dev; + comedi_buf_t *buf; + + if ((subd->flags & COMEDI_SUBD_MASK_READ) == 0) + return -EINVAL; + + dev = subd->dev; + buf = dev->transfer.bufs[subd->idx]; return __pre_put(buf, count); } -int comedi_buf_commit_put
[Xenomai-git] Alexis Berlemont : Improve comedi_buf_*put/get() interfaces
Module: xenomai-abe Branch: comedi Commit: 66b5984061564a975cb45243eaa220e7cb98e195 URL: http://git.xenomai.org/?p=xenomai-abe.git;a=commit;h=66b5984061564a975cb45243eaa220e7cb98e195 Author: Alexis Berlemont Date: Fri Sep 18 23:27:23 2009 +0200 Improve comedi_buf_*put/get() interfaces --- include/comedi/buffer.h| 28 +++-- ksrc/drivers/comedi/buffer.c | 137 +++- ksrc/drivers/comedi/driver_facilities.c| 42 +++--- ksrc/drivers/comedi/intel/8255.c |2 +- .../comedi/national_instruments/mio_common.c | 139 ++-- ksrc/drivers/comedi/national_instruments/mite.c| 12 +- ksrc/drivers/comedi/national_instruments/mite.h|4 +- .../comedi/national_instruments/tio_common.c |2 +- ksrc/drivers/comedi/testing/fake.c |2 +- ksrc/drivers/comedi/testing/loop.c |4 +- 10 files changed, 224 insertions(+), 148 deletions(-) diff --git a/include/comedi/buffer.h b/include/comedi/buffer.h index 02f74e3..9f9989b 100644 --- a/include/comedi/buffer.h +++ b/include/comedi/buffer.h @@ -303,26 +303,34 @@ int comedi_alloc_buffer(comedi_buf_t * buf_desc); void comedi_free_buffer(comedi_buf_t * buf_desc); -int comedi_buf_prepare_absput(struct comedi_device *dev, unsigned long count); +int comedi_buf_prepare_absput(struct comedi_subdevice *subd, + unsigned long count); -int comedi_buf_commit_absput(struct comedi_device *dev, unsigned long count); +int comedi_buf_commit_absput(struct comedi_subdevice *subd, +unsigned long count); -int comedi_buf_prepare_put(struct comedi_device *dev, unsigned long count); +int comedi_buf_prepare_put(struct comedi_subdevice *subd, + unsigned long count); -int comedi_buf_commit_put(struct comedi_device *dev, unsigned long count); +int comedi_buf_commit_put(struct comedi_subdevice *subd, + unsigned long count); -int comedi_buf_put(struct comedi_device *dev, +int comedi_buf_put(struct comedi_subdevice *subd, void *bufdata, unsigned long count); -int comedi_buf_prepare_absget(struct comedi_device *dev, unsigned long count); +int comedi_buf_prepare_absget(struct comedi_subdevice *subd, + unsigned long count); -int comedi_buf_commit_absget(struct comedi_device *dev, unsigned long count); +int comedi_buf_commit_absget(struct comedi_subdevice *subd, +unsigned long count); -int comedi_buf_prepare_get(struct comedi_device *dev, unsigned long count); +int comedi_buf_prepare_get(struct comedi_subdevice *subd, + unsigned long count); -int comedi_buf_commit_get(struct comedi_device *dev, unsigned long count); +int comedi_buf_commit_get(struct comedi_subdevice *subd, + unsigned long count); -int comedi_buf_get(struct comedi_device *dev, +int comedi_buf_get(struct comedi_subdevice *subd, void *bufdata, unsigned long count); int comedi_buf_evt(struct comedi_subdevice *subd, unsigned long evts); diff --git a/ksrc/drivers/comedi/buffer.c b/ksrc/drivers/comedi/buffer.c index eec10a3..5f6dd9e 100644 --- a/ksrc/drivers/comedi/buffer.c +++ b/ksrc/drivers/comedi/buffer.c @@ -153,94 +153,165 @@ int comedi_get_chan(comedi_subd_t *subd) /* --- Transfer / copy functions --- */ -int comedi_buf_prepare_absput(comedi_dev_t * dev, unsigned long count) +int comedi_buf_prepare_absput(comedi_subd_t *subd, unsigned long count) { - comedi_buf_t *buf = dev->transfer.bufs[dev->transfer.idx_read_subd]; + comedi_dev_t *dev; + comedi_buf_t *buf; + + if ((subd->flags & COMEDI_SUBD_MASK_READ) == 0) + return -EINVAL; + + dev = subd->dev; + buf = dev->transfer.bufs[subd->idx]; return __pre_abs_put(buf, count); } -int comedi_buf_commit_absput(comedi_dev_t * dev, unsigned long count) + +int comedi_buf_commit_absput(comedi_subd_t *subd, unsigned long count) { + comedi_dev_t *dev; + comedi_buf_t *buf; + + if ((subd->flags & COMEDI_SUBD_MASK_READ) == 0) + return -EINVAL; - comedi_buf_t *buf = dev->transfer.bufs[dev->transfer.idx_read_subd]; + dev = subd->dev; + buf = dev->transfer.bufs[subd->idx]; return __abs_put(buf, count); } -int comedi_buf_prepare_put(comedi_dev_t * dev, unsigned long count) +int comedi_buf_prepare_put(comedi_subd_t *subd, unsigned long count) { - comedi_buf_t *buf = dev->transfer.bufs[dev->transfer.idx_read_subd]; + comedi_dev_t *dev; + comedi_buf_t *buf; + + if ((subd->flags & COMEDI_SUBD_MASK_READ) == 0) + return -EINVAL; + + dev = subd->dev; + buf = dev->transfer.bufs[subd->idx]; return __pre_put(buf, count); } -int comedi_buf_commit_put(c