[Xenomai-git] Alexis Berlemont : analogy: declare the reserve / release functions at the subd level (broken)

2010-08-02 Thread GIT version control
Module: xenomai-head
Branch: master
Commit: 7f58510b4748a25aef03e17b1d4ded1f6bf4d96d
URL:
http://git.xenomai.org/?p=xenomai-head.git;a=commit;h=7f58510b4748a25aef03e17b1d4ded1f6bf4d96d

Author: Alexis Berlemont alexis.berlem...@gmail.com
Date:   Mon May 24 16:46:31 2010 +0200

analogy: declare the reserve / release functions at the subd level (broken)

---

 include/analogy/subdevice.h|2 ++
 ksrc/drivers/analogy/command.c |   33 -
 ksrc/drivers/analogy/instruction.c |2 +-
 ksrc/drivers/analogy/subdevice.c   |   15 +++
 4 files changed, 30 insertions(+), 22 deletions(-)

diff --git a/include/analogy/subdevice.h b/include/analogy/subdevice.h
index 0f9e1c5..ded82f3 100644
--- a/include/analogy/subdevice.h
+++ b/include/analogy/subdevice.h
@@ -290,6 +290,8 @@ a4l_subd_t * a4l_get_subd(struct a4l_device *dev, int idx);
 a4l_subd_t * a4l_alloc_subd(int sizeof_priv,
void (*setup)(a4l_subd_t *));
 int a4l_add_subd(struct a4l_device *dev, a4l_subd_t * subd);
+int a4l_reserve_subd(a4l_subd_t *subd);
+void a4l_release_subd(a4l_subd_t *subd);
 int a4l_ioctl_subdinfo(a4l_cxt_t * cxt, void *arg);
 int a4l_ioctl_chaninfo(a4l_cxt_t * cxt, void *arg);
 int a4l_ioctl_rnginfo(a4l_cxt_t * cxt, void *arg);
diff --git a/ksrc/drivers/analogy/command.c b/ksrc/drivers/analogy/command.c
index b300d9a..94d6137 100644
--- a/ksrc/drivers/analogy/command.c
+++ b/ksrc/drivers/analogy/command.c
@@ -90,11 +90,8 @@ void a4l_free_cmddesc(a4l_cmd_t * desc)
 
 int a4l_check_cmddesc(a4l_cxt_t * cxt, a4l_cmd_t * desc)
 {
-   int ret = 0;
a4l_dev_t *dev = a4l_get_dev(cxt);
-
-   __a4l_dbg(1, core_dbg, 
-a4l_check_cmddesc: minor=%d\n, a4l_get_minor(cxt));
+   a4l_subd_t *subd;
 
if (desc-idx_subd = dev-transfer.nb_subd) {
__a4l_err(a4l_check_cmddesc: 
@@ -103,25 +100,23 @@ int a4l_check_cmddesc(a4l_cxt_t * cxt, a4l_cmd_t * desc)
return -EINVAL;
}
 
-   if ((dev-transfer.subds[desc-idx_subd]-flags  A4L_SUBD_TYPES) == 
-   A4L_SUBD_UNUSED) {
+   subd = dev-transfer.subds[desc-idx_subd];
+
+   if ((subd-flags  A4L_SUBD_TYPES) == A4L_SUBD_UNUSED) {
__a4l_err(a4l_check_cmddesc: 
  subdevice type incoherent\n);
return -EIO;
}
 
-   if (!(dev-transfer.subds[desc-idx_subd]-flags  A4L_SUBD_CMD)) {
+   if (!(subd-flags  A4L_SUBD_CMD)) {
__a4l_err(a4l_check_cmddesc: operation not supported, 
  synchronous only subdevice\n);
return -EIO;
}
 
-   if (test_bit(A4L_TSF_BUSY, (dev-transfer.status[desc-idx_subd])))
-   return -EBUSY;
-
-   if (ret != 0) {
+   if (test_bit(A4L_SUBD_BUSY, subd-status)) {
__a4l_err(a4l_check_cmddesc: subdevice busy\n);
-   return ret;
+   return -EBUSY;
}
 
return a4l_check_chanlist(dev-transfer.subds[desc-idx_subd],
@@ -299,17 +294,13 @@ int a4l_ioctl_cmd(a4l_cxt_t * cxt, void *arg)
 {
int ret = 0, simul_flag = 0;
a4l_cmd_t *cmd_desc = NULL;
-   a4l_subd_t *subd;
a4l_dev_t *dev = a4l_get_dev(cxt);  
-
-   __a4l_dbg(1, core_dbg, 
- a4l_ioctl_cmd: minor=%d\n, a4l_get_minor(cxt));
+   a4l_subd_t *subd;
 
/* The command launching cannot be done in real-time because
   of some possible buffer allocations in the drivers */
-   if (rtdm_in_rt_context()) {
+   if (rtdm_in_rt_context())
return -ENOSYS;
-   }
 
/* Basically check the device */
if (!test_bit(A4L_DEV_ATTACHED, dev-flags)) {
@@ -373,13 +364,13 @@ int a4l_ioctl_cmd(a4l_cxt_t * cxt, void *arg)
 
/* Eventually launches the command */
ret = subd-do_cmd(subd, cmd_desc);
-
+   
if (ret != 0) {
-   a4l_cancel_transfer(cxt, cmd_desc-idx_subd);
+   a4l_cancel_buffer(cxt);
goto out_ioctl_cmd;
}
 
-  out_ioctl_cmd:
+out_ioctl_cmd:
if (ret != 0 || simul_flag == 1) {
a4l_free_cmddesc(cmd_desc);
rtdm_free(cmd_desc);
diff --git a/ksrc/drivers/analogy/instruction.c 
b/ksrc/drivers/analogy/instruction.c
index 941fa69..413c0d2 100644
--- a/ksrc/drivers/analogy/instruction.c
+++ b/ksrc/drivers/analogy/instruction.c
@@ -281,7 +281,7 @@ int a4l_do_insn(a4l_cxt_t * cxt, a4l_kinsn_t * dsc)
 out_do_insn:
 
/* Releases the subdevice from its reserved state */
-   a4l_cancel_transfer(cxt, dsc-idx_subd);
+   a4l_release_subd(subd);
 
return ret;
 }
diff --git a/ksrc/drivers/analogy/subdevice.c b/ksrc/drivers/analogy/subdevice.c
index 1278081..506b742 100644
--- a/ksrc/drivers/analogy/subdevice.c
+++ b/ksrc/drivers/analogy/subdevice.c
@@ -180,6 +180,21 @@ a4l_subd_t *a4l_get_subd(a4l_dev_t *dev, int idx)
return subd;
 }
 
+int 

[Xenomai-git] Alexis Berlemont : analogy: declare the reserve / release functions at the subd level (broken)

2010-07-07 Thread GIT version control
Module: xenomai-abe
Branch: analogy
Commit: 38605bb16b43d73477d5aa6406c6effd7d127c02
URL:
http://git.xenomai.org/?p=xenomai-abe.git;a=commit;h=38605bb16b43d73477d5aa6406c6effd7d127c02

Author: Alexis Berlemont alexis.berlem...@gmail.com
Date:   Mon May 24 16:46:31 2010 +0200

analogy: declare the reserve / release functions at the subd level (broken)

---

 include/analogy/subdevice.h|2 ++
 ksrc/drivers/analogy/command.c |   33 -
 ksrc/drivers/analogy/instruction.c |2 +-
 ksrc/drivers/analogy/subdevice.c   |   15 +++
 4 files changed, 30 insertions(+), 22 deletions(-)

diff --git a/include/analogy/subdevice.h b/include/analogy/subdevice.h
index 0f9e1c5..ded82f3 100644
--- a/include/analogy/subdevice.h
+++ b/include/analogy/subdevice.h
@@ -290,6 +290,8 @@ a4l_subd_t * a4l_get_subd(struct a4l_device *dev, int idx);
 a4l_subd_t * a4l_alloc_subd(int sizeof_priv,
void (*setup)(a4l_subd_t *));
 int a4l_add_subd(struct a4l_device *dev, a4l_subd_t * subd);
+int a4l_reserve_subd(a4l_subd_t *subd);
+void a4l_release_subd(a4l_subd_t *subd);
 int a4l_ioctl_subdinfo(a4l_cxt_t * cxt, void *arg);
 int a4l_ioctl_chaninfo(a4l_cxt_t * cxt, void *arg);
 int a4l_ioctl_rnginfo(a4l_cxt_t * cxt, void *arg);
diff --git a/ksrc/drivers/analogy/command.c b/ksrc/drivers/analogy/command.c
index b300d9a..94d6137 100644
--- a/ksrc/drivers/analogy/command.c
+++ b/ksrc/drivers/analogy/command.c
@@ -90,11 +90,8 @@ void a4l_free_cmddesc(a4l_cmd_t * desc)
 
 int a4l_check_cmddesc(a4l_cxt_t * cxt, a4l_cmd_t * desc)
 {
-   int ret = 0;
a4l_dev_t *dev = a4l_get_dev(cxt);
-
-   __a4l_dbg(1, core_dbg, 
-a4l_check_cmddesc: minor=%d\n, a4l_get_minor(cxt));
+   a4l_subd_t *subd;
 
if (desc-idx_subd = dev-transfer.nb_subd) {
__a4l_err(a4l_check_cmddesc: 
@@ -103,25 +100,23 @@ int a4l_check_cmddesc(a4l_cxt_t * cxt, a4l_cmd_t * desc)
return -EINVAL;
}
 
-   if ((dev-transfer.subds[desc-idx_subd]-flags  A4L_SUBD_TYPES) == 
-   A4L_SUBD_UNUSED) {
+   subd = dev-transfer.subds[desc-idx_subd];
+
+   if ((subd-flags  A4L_SUBD_TYPES) == A4L_SUBD_UNUSED) {
__a4l_err(a4l_check_cmddesc: 
  subdevice type incoherent\n);
return -EIO;
}
 
-   if (!(dev-transfer.subds[desc-idx_subd]-flags  A4L_SUBD_CMD)) {
+   if (!(subd-flags  A4L_SUBD_CMD)) {
__a4l_err(a4l_check_cmddesc: operation not supported, 
  synchronous only subdevice\n);
return -EIO;
}
 
-   if (test_bit(A4L_TSF_BUSY, (dev-transfer.status[desc-idx_subd])))
-   return -EBUSY;
-
-   if (ret != 0) {
+   if (test_bit(A4L_SUBD_BUSY, subd-status)) {
__a4l_err(a4l_check_cmddesc: subdevice busy\n);
-   return ret;
+   return -EBUSY;
}
 
return a4l_check_chanlist(dev-transfer.subds[desc-idx_subd],
@@ -299,17 +294,13 @@ int a4l_ioctl_cmd(a4l_cxt_t * cxt, void *arg)
 {
int ret = 0, simul_flag = 0;
a4l_cmd_t *cmd_desc = NULL;
-   a4l_subd_t *subd;
a4l_dev_t *dev = a4l_get_dev(cxt);  
-
-   __a4l_dbg(1, core_dbg, 
- a4l_ioctl_cmd: minor=%d\n, a4l_get_minor(cxt));
+   a4l_subd_t *subd;
 
/* The command launching cannot be done in real-time because
   of some possible buffer allocations in the drivers */
-   if (rtdm_in_rt_context()) {
+   if (rtdm_in_rt_context())
return -ENOSYS;
-   }
 
/* Basically check the device */
if (!test_bit(A4L_DEV_ATTACHED, dev-flags)) {
@@ -373,13 +364,13 @@ int a4l_ioctl_cmd(a4l_cxt_t * cxt, void *arg)
 
/* Eventually launches the command */
ret = subd-do_cmd(subd, cmd_desc);
-
+   
if (ret != 0) {
-   a4l_cancel_transfer(cxt, cmd_desc-idx_subd);
+   a4l_cancel_buffer(cxt);
goto out_ioctl_cmd;
}
 
-  out_ioctl_cmd:
+out_ioctl_cmd:
if (ret != 0 || simul_flag == 1) {
a4l_free_cmddesc(cmd_desc);
rtdm_free(cmd_desc);
diff --git a/ksrc/drivers/analogy/instruction.c 
b/ksrc/drivers/analogy/instruction.c
index 941fa69..413c0d2 100644
--- a/ksrc/drivers/analogy/instruction.c
+++ b/ksrc/drivers/analogy/instruction.c
@@ -281,7 +281,7 @@ int a4l_do_insn(a4l_cxt_t * cxt, a4l_kinsn_t * dsc)
 out_do_insn:
 
/* Releases the subdevice from its reserved state */
-   a4l_cancel_transfer(cxt, dsc-idx_subd);
+   a4l_release_subd(subd);
 
return ret;
 }
diff --git a/ksrc/drivers/analogy/subdevice.c b/ksrc/drivers/analogy/subdevice.c
index 1278081..506b742 100644
--- a/ksrc/drivers/analogy/subdevice.c
+++ b/ksrc/drivers/analogy/subdevice.c
@@ -180,6 +180,21 @@ a4l_subd_t *a4l_get_subd(a4l_dev_t *dev, int idx)
return subd;
 }
 
+int 

[Xenomai-git] Alexis Berlemont : analogy: declare the reserve / release functions at the subd level (broken)

2010-06-24 Thread GIT version control
Module: xenomai-abe
Branch: experimental
Commit: d20cb6dc3652d7dc866b5c8a7c8281bfc7f23b32
URL:
http://git.xenomai.org/?p=xenomai-abe.git;a=commit;h=d20cb6dc3652d7dc866b5c8a7c8281bfc7f23b32

Author: Alexis Berlemont alexis.berlem...@gmail.com
Date:   Mon May 24 16:46:31 2010 +0200

analogy: declare the reserve / release functions at the subd level (broken)

---

 include/analogy/subdevice.h|2 ++
 ksrc/drivers/analogy/command.c |   33 -
 ksrc/drivers/analogy/instruction.c |2 +-
 ksrc/drivers/analogy/subdevice.c   |   15 +++
 4 files changed, 30 insertions(+), 22 deletions(-)

diff --git a/include/analogy/subdevice.h b/include/analogy/subdevice.h
index 0f9e1c5..ded82f3 100644
--- a/include/analogy/subdevice.h
+++ b/include/analogy/subdevice.h
@@ -290,6 +290,8 @@ a4l_subd_t * a4l_get_subd(struct a4l_device *dev, int idx);
 a4l_subd_t * a4l_alloc_subd(int sizeof_priv,
void (*setup)(a4l_subd_t *));
 int a4l_add_subd(struct a4l_device *dev, a4l_subd_t * subd);
+int a4l_reserve_subd(a4l_subd_t *subd);
+void a4l_release_subd(a4l_subd_t *subd);
 int a4l_ioctl_subdinfo(a4l_cxt_t * cxt, void *arg);
 int a4l_ioctl_chaninfo(a4l_cxt_t * cxt, void *arg);
 int a4l_ioctl_rnginfo(a4l_cxt_t * cxt, void *arg);
diff --git a/ksrc/drivers/analogy/command.c b/ksrc/drivers/analogy/command.c
index b300d9a..94d6137 100644
--- a/ksrc/drivers/analogy/command.c
+++ b/ksrc/drivers/analogy/command.c
@@ -90,11 +90,8 @@ void a4l_free_cmddesc(a4l_cmd_t * desc)
 
 int a4l_check_cmddesc(a4l_cxt_t * cxt, a4l_cmd_t * desc)
 {
-   int ret = 0;
a4l_dev_t *dev = a4l_get_dev(cxt);
-
-   __a4l_dbg(1, core_dbg, 
-a4l_check_cmddesc: minor=%d\n, a4l_get_minor(cxt));
+   a4l_subd_t *subd;
 
if (desc-idx_subd = dev-transfer.nb_subd) {
__a4l_err(a4l_check_cmddesc: 
@@ -103,25 +100,23 @@ int a4l_check_cmddesc(a4l_cxt_t * cxt, a4l_cmd_t * desc)
return -EINVAL;
}
 
-   if ((dev-transfer.subds[desc-idx_subd]-flags  A4L_SUBD_TYPES) == 
-   A4L_SUBD_UNUSED) {
+   subd = dev-transfer.subds[desc-idx_subd];
+
+   if ((subd-flags  A4L_SUBD_TYPES) == A4L_SUBD_UNUSED) {
__a4l_err(a4l_check_cmddesc: 
  subdevice type incoherent\n);
return -EIO;
}
 
-   if (!(dev-transfer.subds[desc-idx_subd]-flags  A4L_SUBD_CMD)) {
+   if (!(subd-flags  A4L_SUBD_CMD)) {
__a4l_err(a4l_check_cmddesc: operation not supported, 
  synchronous only subdevice\n);
return -EIO;
}
 
-   if (test_bit(A4L_TSF_BUSY, (dev-transfer.status[desc-idx_subd])))
-   return -EBUSY;
-
-   if (ret != 0) {
+   if (test_bit(A4L_SUBD_BUSY, subd-status)) {
__a4l_err(a4l_check_cmddesc: subdevice busy\n);
-   return ret;
+   return -EBUSY;
}
 
return a4l_check_chanlist(dev-transfer.subds[desc-idx_subd],
@@ -299,17 +294,13 @@ int a4l_ioctl_cmd(a4l_cxt_t * cxt, void *arg)
 {
int ret = 0, simul_flag = 0;
a4l_cmd_t *cmd_desc = NULL;
-   a4l_subd_t *subd;
a4l_dev_t *dev = a4l_get_dev(cxt);  
-
-   __a4l_dbg(1, core_dbg, 
- a4l_ioctl_cmd: minor=%d\n, a4l_get_minor(cxt));
+   a4l_subd_t *subd;
 
/* The command launching cannot be done in real-time because
   of some possible buffer allocations in the drivers */
-   if (rtdm_in_rt_context()) {
+   if (rtdm_in_rt_context())
return -ENOSYS;
-   }
 
/* Basically check the device */
if (!test_bit(A4L_DEV_ATTACHED, dev-flags)) {
@@ -373,13 +364,13 @@ int a4l_ioctl_cmd(a4l_cxt_t * cxt, void *arg)
 
/* Eventually launches the command */
ret = subd-do_cmd(subd, cmd_desc);
-
+   
if (ret != 0) {
-   a4l_cancel_transfer(cxt, cmd_desc-idx_subd);
+   a4l_cancel_buffer(cxt);
goto out_ioctl_cmd;
}
 
-  out_ioctl_cmd:
+out_ioctl_cmd:
if (ret != 0 || simul_flag == 1) {
a4l_free_cmddesc(cmd_desc);
rtdm_free(cmd_desc);
diff --git a/ksrc/drivers/analogy/instruction.c 
b/ksrc/drivers/analogy/instruction.c
index 941fa69..413c0d2 100644
--- a/ksrc/drivers/analogy/instruction.c
+++ b/ksrc/drivers/analogy/instruction.c
@@ -281,7 +281,7 @@ int a4l_do_insn(a4l_cxt_t * cxt, a4l_kinsn_t * dsc)
 out_do_insn:
 
/* Releases the subdevice from its reserved state */
-   a4l_cancel_transfer(cxt, dsc-idx_subd);
+   a4l_release_subd(subd);
 
return ret;
 }
diff --git a/ksrc/drivers/analogy/subdevice.c b/ksrc/drivers/analogy/subdevice.c
index 1278081..506b742 100644
--- a/ksrc/drivers/analogy/subdevice.c
+++ b/ksrc/drivers/analogy/subdevice.c
@@ -180,6 +180,21 @@ a4l_subd_t *a4l_get_subd(a4l_dev_t *dev, int idx)
return subd;
 }
 

[Xenomai-git] Alexis Berlemont : analogy: declare the reserve / release functions at the subd level (broken)

2010-06-24 Thread GIT version control
Module: xenomai-abe
Branch: analogy
Commit: d20cb6dc3652d7dc866b5c8a7c8281bfc7f23b32
URL:
http://git.xenomai.org/?p=xenomai-abe.git;a=commit;h=d20cb6dc3652d7dc866b5c8a7c8281bfc7f23b32

Author: Alexis Berlemont alexis.berlem...@gmail.com
Date:   Mon May 24 16:46:31 2010 +0200

analogy: declare the reserve / release functions at the subd level (broken)

---

 include/analogy/subdevice.h|2 ++
 ksrc/drivers/analogy/command.c |   33 -
 ksrc/drivers/analogy/instruction.c |2 +-
 ksrc/drivers/analogy/subdevice.c   |   15 +++
 4 files changed, 30 insertions(+), 22 deletions(-)

diff --git a/include/analogy/subdevice.h b/include/analogy/subdevice.h
index 0f9e1c5..ded82f3 100644
--- a/include/analogy/subdevice.h
+++ b/include/analogy/subdevice.h
@@ -290,6 +290,8 @@ a4l_subd_t * a4l_get_subd(struct a4l_device *dev, int idx);
 a4l_subd_t * a4l_alloc_subd(int sizeof_priv,
void (*setup)(a4l_subd_t *));
 int a4l_add_subd(struct a4l_device *dev, a4l_subd_t * subd);
+int a4l_reserve_subd(a4l_subd_t *subd);
+void a4l_release_subd(a4l_subd_t *subd);
 int a4l_ioctl_subdinfo(a4l_cxt_t * cxt, void *arg);
 int a4l_ioctl_chaninfo(a4l_cxt_t * cxt, void *arg);
 int a4l_ioctl_rnginfo(a4l_cxt_t * cxt, void *arg);
diff --git a/ksrc/drivers/analogy/command.c b/ksrc/drivers/analogy/command.c
index b300d9a..94d6137 100644
--- a/ksrc/drivers/analogy/command.c
+++ b/ksrc/drivers/analogy/command.c
@@ -90,11 +90,8 @@ void a4l_free_cmddesc(a4l_cmd_t * desc)
 
 int a4l_check_cmddesc(a4l_cxt_t * cxt, a4l_cmd_t * desc)
 {
-   int ret = 0;
a4l_dev_t *dev = a4l_get_dev(cxt);
-
-   __a4l_dbg(1, core_dbg, 
-a4l_check_cmddesc: minor=%d\n, a4l_get_minor(cxt));
+   a4l_subd_t *subd;
 
if (desc-idx_subd = dev-transfer.nb_subd) {
__a4l_err(a4l_check_cmddesc: 
@@ -103,25 +100,23 @@ int a4l_check_cmddesc(a4l_cxt_t * cxt, a4l_cmd_t * desc)
return -EINVAL;
}
 
-   if ((dev-transfer.subds[desc-idx_subd]-flags  A4L_SUBD_TYPES) == 
-   A4L_SUBD_UNUSED) {
+   subd = dev-transfer.subds[desc-idx_subd];
+
+   if ((subd-flags  A4L_SUBD_TYPES) == A4L_SUBD_UNUSED) {
__a4l_err(a4l_check_cmddesc: 
  subdevice type incoherent\n);
return -EIO;
}
 
-   if (!(dev-transfer.subds[desc-idx_subd]-flags  A4L_SUBD_CMD)) {
+   if (!(subd-flags  A4L_SUBD_CMD)) {
__a4l_err(a4l_check_cmddesc: operation not supported, 
  synchronous only subdevice\n);
return -EIO;
}
 
-   if (test_bit(A4L_TSF_BUSY, (dev-transfer.status[desc-idx_subd])))
-   return -EBUSY;
-
-   if (ret != 0) {
+   if (test_bit(A4L_SUBD_BUSY, subd-status)) {
__a4l_err(a4l_check_cmddesc: subdevice busy\n);
-   return ret;
+   return -EBUSY;
}
 
return a4l_check_chanlist(dev-transfer.subds[desc-idx_subd],
@@ -299,17 +294,13 @@ int a4l_ioctl_cmd(a4l_cxt_t * cxt, void *arg)
 {
int ret = 0, simul_flag = 0;
a4l_cmd_t *cmd_desc = NULL;
-   a4l_subd_t *subd;
a4l_dev_t *dev = a4l_get_dev(cxt);  
-
-   __a4l_dbg(1, core_dbg, 
- a4l_ioctl_cmd: minor=%d\n, a4l_get_minor(cxt));
+   a4l_subd_t *subd;
 
/* The command launching cannot be done in real-time because
   of some possible buffer allocations in the drivers */
-   if (rtdm_in_rt_context()) {
+   if (rtdm_in_rt_context())
return -ENOSYS;
-   }
 
/* Basically check the device */
if (!test_bit(A4L_DEV_ATTACHED, dev-flags)) {
@@ -373,13 +364,13 @@ int a4l_ioctl_cmd(a4l_cxt_t * cxt, void *arg)
 
/* Eventually launches the command */
ret = subd-do_cmd(subd, cmd_desc);
-
+   
if (ret != 0) {
-   a4l_cancel_transfer(cxt, cmd_desc-idx_subd);
+   a4l_cancel_buffer(cxt);
goto out_ioctl_cmd;
}
 
-  out_ioctl_cmd:
+out_ioctl_cmd:
if (ret != 0 || simul_flag == 1) {
a4l_free_cmddesc(cmd_desc);
rtdm_free(cmd_desc);
diff --git a/ksrc/drivers/analogy/instruction.c 
b/ksrc/drivers/analogy/instruction.c
index 941fa69..413c0d2 100644
--- a/ksrc/drivers/analogy/instruction.c
+++ b/ksrc/drivers/analogy/instruction.c
@@ -281,7 +281,7 @@ int a4l_do_insn(a4l_cxt_t * cxt, a4l_kinsn_t * dsc)
 out_do_insn:
 
/* Releases the subdevice from its reserved state */
-   a4l_cancel_transfer(cxt, dsc-idx_subd);
+   a4l_release_subd(subd);
 
return ret;
 }
diff --git a/ksrc/drivers/analogy/subdevice.c b/ksrc/drivers/analogy/subdevice.c
index 1278081..506b742 100644
--- a/ksrc/drivers/analogy/subdevice.c
+++ b/ksrc/drivers/analogy/subdevice.c
@@ -180,6 +180,21 @@ a4l_subd_t *a4l_get_subd(a4l_dev_t *dev, int idx)
return subd;
 }
 
+int 

[Xenomai-git] Alexis Berlemont : analogy: declare the reserve / release functions at the subd level (broken)

2010-05-24 Thread GIT version control
Module: xenomai-abe
Branch: experimental
Commit: afe94634dc91fe6462c21ab86cbb4166a05a1ccf
URL:
http://git.xenomai.org/?p=xenomai-abe.git;a=commit;h=afe94634dc91fe6462c21ab86cbb4166a05a1ccf

Author: Alexis Berlemont alexis.berlem...@gmail.com
Date:   Mon May 24 16:46:31 2010 +0200

analogy: declare the reserve / release functions at the subd level (broken)

---

 include/analogy/subdevice.h|2 ++
 ksrc/drivers/analogy/command.c |   33 -
 ksrc/drivers/analogy/instruction.c |2 +-
 ksrc/drivers/analogy/subdevice.c   |   15 +++
 4 files changed, 30 insertions(+), 22 deletions(-)

diff --git a/include/analogy/subdevice.h b/include/analogy/subdevice.h
index 0f9e1c5..ded82f3 100644
--- a/include/analogy/subdevice.h
+++ b/include/analogy/subdevice.h
@@ -290,6 +290,8 @@ a4l_subd_t * a4l_get_subd(struct a4l_device *dev, int idx);
 a4l_subd_t * a4l_alloc_subd(int sizeof_priv,
void (*setup)(a4l_subd_t *));
 int a4l_add_subd(struct a4l_device *dev, a4l_subd_t * subd);
+int a4l_reserve_subd(a4l_subd_t *subd);
+void a4l_release_subd(a4l_subd_t *subd);
 int a4l_ioctl_subdinfo(a4l_cxt_t * cxt, void *arg);
 int a4l_ioctl_chaninfo(a4l_cxt_t * cxt, void *arg);
 int a4l_ioctl_rnginfo(a4l_cxt_t * cxt, void *arg);
diff --git a/ksrc/drivers/analogy/command.c b/ksrc/drivers/analogy/command.c
index b300d9a..94d6137 100644
--- a/ksrc/drivers/analogy/command.c
+++ b/ksrc/drivers/analogy/command.c
@@ -90,11 +90,8 @@ void a4l_free_cmddesc(a4l_cmd_t * desc)
 
 int a4l_check_cmddesc(a4l_cxt_t * cxt, a4l_cmd_t * desc)
 {
-   int ret = 0;
a4l_dev_t *dev = a4l_get_dev(cxt);
-
-   __a4l_dbg(1, core_dbg, 
-a4l_check_cmddesc: minor=%d\n, a4l_get_minor(cxt));
+   a4l_subd_t *subd;
 
if (desc-idx_subd = dev-transfer.nb_subd) {
__a4l_err(a4l_check_cmddesc: 
@@ -103,25 +100,23 @@ int a4l_check_cmddesc(a4l_cxt_t * cxt, a4l_cmd_t * desc)
return -EINVAL;
}
 
-   if ((dev-transfer.subds[desc-idx_subd]-flags  A4L_SUBD_TYPES) == 
-   A4L_SUBD_UNUSED) {
+   subd = dev-transfer.subds[desc-idx_subd];
+
+   if ((subd-flags  A4L_SUBD_TYPES) == A4L_SUBD_UNUSED) {
__a4l_err(a4l_check_cmddesc: 
  subdevice type incoherent\n);
return -EIO;
}
 
-   if (!(dev-transfer.subds[desc-idx_subd]-flags  A4L_SUBD_CMD)) {
+   if (!(subd-flags  A4L_SUBD_CMD)) {
__a4l_err(a4l_check_cmddesc: operation not supported, 
  synchronous only subdevice\n);
return -EIO;
}
 
-   if (test_bit(A4L_TSF_BUSY, (dev-transfer.status[desc-idx_subd])))
-   return -EBUSY;
-
-   if (ret != 0) {
+   if (test_bit(A4L_SUBD_BUSY, subd-status)) {
__a4l_err(a4l_check_cmddesc: subdevice busy\n);
-   return ret;
+   return -EBUSY;
}
 
return a4l_check_chanlist(dev-transfer.subds[desc-idx_subd],
@@ -299,17 +294,13 @@ int a4l_ioctl_cmd(a4l_cxt_t * cxt, void *arg)
 {
int ret = 0, simul_flag = 0;
a4l_cmd_t *cmd_desc = NULL;
-   a4l_subd_t *subd;
a4l_dev_t *dev = a4l_get_dev(cxt);  
-
-   __a4l_dbg(1, core_dbg, 
- a4l_ioctl_cmd: minor=%d\n, a4l_get_minor(cxt));
+   a4l_subd_t *subd;
 
/* The command launching cannot be done in real-time because
   of some possible buffer allocations in the drivers */
-   if (rtdm_in_rt_context()) {
+   if (rtdm_in_rt_context())
return -ENOSYS;
-   }
 
/* Basically check the device */
if (!test_bit(A4L_DEV_ATTACHED, dev-flags)) {
@@ -373,13 +364,13 @@ int a4l_ioctl_cmd(a4l_cxt_t * cxt, void *arg)
 
/* Eventually launches the command */
ret = subd-do_cmd(subd, cmd_desc);
-
+   
if (ret != 0) {
-   a4l_cancel_transfer(cxt, cmd_desc-idx_subd);
+   a4l_cancel_buffer(cxt);
goto out_ioctl_cmd;
}
 
-  out_ioctl_cmd:
+out_ioctl_cmd:
if (ret != 0 || simul_flag == 1) {
a4l_free_cmddesc(cmd_desc);
rtdm_free(cmd_desc);
diff --git a/ksrc/drivers/analogy/instruction.c 
b/ksrc/drivers/analogy/instruction.c
index 941fa69..413c0d2 100644
--- a/ksrc/drivers/analogy/instruction.c
+++ b/ksrc/drivers/analogy/instruction.c
@@ -281,7 +281,7 @@ int a4l_do_insn(a4l_cxt_t * cxt, a4l_kinsn_t * dsc)
 out_do_insn:
 
/* Releases the subdevice from its reserved state */
-   a4l_cancel_transfer(cxt, dsc-idx_subd);
+   a4l_release_subd(subd);
 
return ret;
 }
diff --git a/ksrc/drivers/analogy/subdevice.c b/ksrc/drivers/analogy/subdevice.c
index 1278081..506b742 100644
--- a/ksrc/drivers/analogy/subdevice.c
+++ b/ksrc/drivers/analogy/subdevice.c
@@ -180,6 +180,21 @@ a4l_subd_t *a4l_get_subd(a4l_dev_t *dev, int idx)
return subd;
 }