[Xenomai-git] Alexis Berlemont : Improve comedi_buf_*put/get() interfaces

2009-09-19 Thread GIT version control
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

2009-09-18 Thread GIT version control
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