[Xenomai-git] Alexis Berlemont : analogy: first draft of buffer initialization functions (broken)

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

Author: Alexis Berlemont alexis.berlem...@gmail.com
Date:   Sun May 16 23:23:16 2010 +0200

analogy: first draft of buffer initialization functions (broken)

---

 ksrc/drivers/analogy/buffer.c |   69 
 1 files changed, 62 insertions(+), 7 deletions(-)

diff --git a/ksrc/drivers/analogy/buffer.c b/ksrc/drivers/analogy/buffer.c
index ecbc379..a27a1d6 100644
--- a/ksrc/drivers/analogy/buffer.c
+++ b/ksrc/drivers/analogy/buffer.c
@@ -33,7 +33,7 @@
 #include analogy/buffer.h
 #include analogy/transfer.h
 
-/* --- Buffer allocation / free functions --- */
+/* --- Initialization functions (init, alloc, free) --- */
 
 void a4l_free_buffer(a4l_buf_t * buf_desc)
 {
@@ -52,18 +52,15 @@ void a4l_free_buffer(a4l_buf_t * buf_desc)
}
 }
 
-int a4l_alloc_buffer(a4l_buf_t * buf_desc)
+int a4l_alloc_buffer(a4l_buf_t * buf_desc, int buf_size)
 {
int ret = 0;
char *vaddr, *vabase;
 
-   if (buf_desc-size == 0)
-   buf_desc-size = A4L_BUF_DEFSIZE;
-
+   buf_desc-size = buf_size;
buf_desc-size = PAGE_ALIGN(buf_desc-size);
 
buf_desc-buf = vmalloc(buf_desc-size);
-
if (buf_desc-buf == NULL) {
ret = -ENOMEM;
goto out_virt_contig_alloc;
@@ -94,7 +91,65 @@ out_virt_contig_alloc:
return ret;
 }
 
-/* --- Current Command management function --- */
+int a4l_init_buffer(a4l_buf_t * buf_desc)
+{
+   int err;
+   
+   /* No command to process yet */
+   buf_desc-cur_cmd = NULL;
+
+   /* No more (or not yet) linked with a subdevice */
+   buf_desc-subd = NULL;
+
+   /* Initializes counts and flags */
+   buf_desc-end_count = 0;
+   buf_desc-prd_count = 0;
+   buf_desc-cns_count = 0;
+   buf_desc-tmp_count = 0;
+   buf_desc-mng_count = 0;
+
+   /* Flush pending events */
+   buf_desc-flags = 0;
+   a4l_flush_sync(buf_desc-sync);
+
+   return err;
+}
+
+int a4l_setup_buffer(a4l_cxt_t *cxt, a4l_cmd_t *cmd)
+{
+   a4l_buf_t * buf_desc = cxt-buffer;
+   int i;
+
+   /* Retrieve the related subdevice */
+   buf_desc-subd = a4l_get_subd(cxt-dev, cmd-idx_subd);
+   if (buf_desc-subd == NULL) {
+   __a4l_err(a4l_setup_buffer: subdevice index 
+ out of range (%d)\n, cmd-idx_subd);
+   goto -EINVAL;
+   }
+
+   /* Checks if the transfer system has to work in bulk mode */
+   if (cmd-flags  A4L_CMD_BULK)
+   set_bit(A4L_BUF_BULK_NR, buf_desc-flags);
+   
+   /* Sets the working command */
+   buf_desc-cur_cmd = cmd;
+
+   /* Computes the count to reach, if need be */
+   if (cmd-stop_src == TRIG_COUNT) {
+   for (i = 0; i  cmd-nb_chan; i++) {
+   a4l_chan_t *chft;
+   chft = a4l_get_chfeat(buf_desc-subd, 
+ CR_CHAN(cmd-chan_descs[i]));
+   buf_desc-end_count += chft-nb_bits / 8;
+   }
+   buf_desc-end_count *= cmd-stop_arg;
+   }
+   
+   return 0;
+}
+
+/* --- current Command management function --- */
 
 a4l_cmd_t *a4l_get_cmd(a4l_subd_t *subd)
 {


___
Xenomai-git mailing list
Xenomai-git@gna.org
https://mail.gna.org/listinfo/xenomai-git


[Xenomai-git] Alexis Berlemont : analogy: first draft of buffer initialization functions (broken)

2010-07-17 Thread GIT version control
Module: xenomai-2.5
Branch: master
Commit: fa386f45c9e7242355d22d06b06d631cb8de38e0
URL:
http://git.xenomai.org/?p=xenomai-2.5.git;a=commit;h=fa386f45c9e7242355d22d06b06d631cb8de38e0

Author: Alexis Berlemont alexis.berlem...@gmail.com
Date:   Sun May 16 23:23:16 2010 +0200

analogy: first draft of buffer initialization functions (broken)

---

 ksrc/drivers/analogy/buffer.c |   69 
 1 files changed, 62 insertions(+), 7 deletions(-)

diff --git a/ksrc/drivers/analogy/buffer.c b/ksrc/drivers/analogy/buffer.c
index ecbc379..a27a1d6 100644
--- a/ksrc/drivers/analogy/buffer.c
+++ b/ksrc/drivers/analogy/buffer.c
@@ -33,7 +33,7 @@
 #include analogy/buffer.h
 #include analogy/transfer.h
 
-/* --- Buffer allocation / free functions --- */
+/* --- Initialization functions (init, alloc, free) --- */
 
 void a4l_free_buffer(a4l_buf_t * buf_desc)
 {
@@ -52,18 +52,15 @@ void a4l_free_buffer(a4l_buf_t * buf_desc)
}
 }
 
-int a4l_alloc_buffer(a4l_buf_t * buf_desc)
+int a4l_alloc_buffer(a4l_buf_t * buf_desc, int buf_size)
 {
int ret = 0;
char *vaddr, *vabase;
 
-   if (buf_desc-size == 0)
-   buf_desc-size = A4L_BUF_DEFSIZE;
-
+   buf_desc-size = buf_size;
buf_desc-size = PAGE_ALIGN(buf_desc-size);
 
buf_desc-buf = vmalloc(buf_desc-size);
-
if (buf_desc-buf == NULL) {
ret = -ENOMEM;
goto out_virt_contig_alloc;
@@ -94,7 +91,65 @@ out_virt_contig_alloc:
return ret;
 }
 
-/* --- Current Command management function --- */
+int a4l_init_buffer(a4l_buf_t * buf_desc)
+{
+   int err;
+   
+   /* No command to process yet */
+   buf_desc-cur_cmd = NULL;
+
+   /* No more (or not yet) linked with a subdevice */
+   buf_desc-subd = NULL;
+
+   /* Initializes counts and flags */
+   buf_desc-end_count = 0;
+   buf_desc-prd_count = 0;
+   buf_desc-cns_count = 0;
+   buf_desc-tmp_count = 0;
+   buf_desc-mng_count = 0;
+
+   /* Flush pending events */
+   buf_desc-flags = 0;
+   a4l_flush_sync(buf_desc-sync);
+
+   return err;
+}
+
+int a4l_setup_buffer(a4l_cxt_t *cxt, a4l_cmd_t *cmd)
+{
+   a4l_buf_t * buf_desc = cxt-buffer;
+   int i;
+
+   /* Retrieve the related subdevice */
+   buf_desc-subd = a4l_get_subd(cxt-dev, cmd-idx_subd);
+   if (buf_desc-subd == NULL) {
+   __a4l_err(a4l_setup_buffer: subdevice index 
+ out of range (%d)\n, cmd-idx_subd);
+   goto -EINVAL;
+   }
+
+   /* Checks if the transfer system has to work in bulk mode */
+   if (cmd-flags  A4L_CMD_BULK)
+   set_bit(A4L_BUF_BULK_NR, buf_desc-flags);
+   
+   /* Sets the working command */
+   buf_desc-cur_cmd = cmd;
+
+   /* Computes the count to reach, if need be */
+   if (cmd-stop_src == TRIG_COUNT) {
+   for (i = 0; i  cmd-nb_chan; i++) {
+   a4l_chan_t *chft;
+   chft = a4l_get_chfeat(buf_desc-subd, 
+ CR_CHAN(cmd-chan_descs[i]));
+   buf_desc-end_count += chft-nb_bits / 8;
+   }
+   buf_desc-end_count *= cmd-stop_arg;
+   }
+   
+   return 0;
+}
+
+/* --- current Command management function --- */
 
 a4l_cmd_t *a4l_get_cmd(a4l_subd_t *subd)
 {


___
Xenomai-git mailing list
Xenomai-git@gna.org
https://mail.gna.org/listinfo/xenomai-git


[Xenomai-git] Alexis Berlemont : analogy: first draft of buffer initialization functions (broken)

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

Author: Alexis Berlemont alexis.berlem...@gmail.com
Date:   Sun May 16 23:23:16 2010 +0200

analogy: first draft of buffer initialization functions (broken)

---

 ksrc/drivers/analogy/buffer.c |   69 
 1 files changed, 62 insertions(+), 7 deletions(-)

diff --git a/ksrc/drivers/analogy/buffer.c b/ksrc/drivers/analogy/buffer.c
index ecbc379..a27a1d6 100644
--- a/ksrc/drivers/analogy/buffer.c
+++ b/ksrc/drivers/analogy/buffer.c
@@ -33,7 +33,7 @@
 #include analogy/buffer.h
 #include analogy/transfer.h
 
-/* --- Buffer allocation / free functions --- */
+/* --- Initialization functions (init, alloc, free) --- */
 
 void a4l_free_buffer(a4l_buf_t * buf_desc)
 {
@@ -52,18 +52,15 @@ void a4l_free_buffer(a4l_buf_t * buf_desc)
}
 }
 
-int a4l_alloc_buffer(a4l_buf_t * buf_desc)
+int a4l_alloc_buffer(a4l_buf_t * buf_desc, int buf_size)
 {
int ret = 0;
char *vaddr, *vabase;
 
-   if (buf_desc-size == 0)
-   buf_desc-size = A4L_BUF_DEFSIZE;
-
+   buf_desc-size = buf_size;
buf_desc-size = PAGE_ALIGN(buf_desc-size);
 
buf_desc-buf = vmalloc(buf_desc-size);
-
if (buf_desc-buf == NULL) {
ret = -ENOMEM;
goto out_virt_contig_alloc;
@@ -94,7 +91,65 @@ out_virt_contig_alloc:
return ret;
 }
 
-/* --- Current Command management function --- */
+int a4l_init_buffer(a4l_buf_t * buf_desc)
+{
+   int err;
+   
+   /* No command to process yet */
+   buf_desc-cur_cmd = NULL;
+
+   /* No more (or not yet) linked with a subdevice */
+   buf_desc-subd = NULL;
+
+   /* Initializes counts and flags */
+   buf_desc-end_count = 0;
+   buf_desc-prd_count = 0;
+   buf_desc-cns_count = 0;
+   buf_desc-tmp_count = 0;
+   buf_desc-mng_count = 0;
+
+   /* Flush pending events */
+   buf_desc-flags = 0;
+   a4l_flush_sync(buf_desc-sync);
+
+   return err;
+}
+
+int a4l_setup_buffer(a4l_cxt_t *cxt, a4l_cmd_t *cmd)
+{
+   a4l_buf_t * buf_desc = cxt-buffer;
+   int i;
+
+   /* Retrieve the related subdevice */
+   buf_desc-subd = a4l_get_subd(cxt-dev, cmd-idx_subd);
+   if (buf_desc-subd == NULL) {
+   __a4l_err(a4l_setup_buffer: subdevice index 
+ out of range (%d)\n, cmd-idx_subd);
+   goto -EINVAL;
+   }
+
+   /* Checks if the transfer system has to work in bulk mode */
+   if (cmd-flags  A4L_CMD_BULK)
+   set_bit(A4L_BUF_BULK_NR, buf_desc-flags);
+   
+   /* Sets the working command */
+   buf_desc-cur_cmd = cmd;
+
+   /* Computes the count to reach, if need be */
+   if (cmd-stop_src == TRIG_COUNT) {
+   for (i = 0; i  cmd-nb_chan; i++) {
+   a4l_chan_t *chft;
+   chft = a4l_get_chfeat(buf_desc-subd, 
+ CR_CHAN(cmd-chan_descs[i]));
+   buf_desc-end_count += chft-nb_bits / 8;
+   }
+   buf_desc-end_count *= cmd-stop_arg;
+   }
+   
+   return 0;
+}
+
+/* --- current Command management function --- */
 
 a4l_cmd_t *a4l_get_cmd(a4l_subd_t *subd)
 {


___
Xenomai-git mailing list
Xenomai-git@gna.org
https://mail.gna.org/listinfo/xenomai-git


[Xenomai-git] Alexis Berlemont : analogy: first draft of buffer initialization functions (broken)

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

Author: Alexis Berlemont alexis.berlem...@gmail.com
Date:   Sun May 16 23:23:16 2010 +0200

analogy: first draft of buffer initialization functions (broken)

---

 ksrc/drivers/analogy/buffer.c |   69 
 1 files changed, 62 insertions(+), 7 deletions(-)

diff --git a/ksrc/drivers/analogy/buffer.c b/ksrc/drivers/analogy/buffer.c
index ecbc379..a27a1d6 100644
--- a/ksrc/drivers/analogy/buffer.c
+++ b/ksrc/drivers/analogy/buffer.c
@@ -33,7 +33,7 @@
 #include analogy/buffer.h
 #include analogy/transfer.h
 
-/* --- Buffer allocation / free functions --- */
+/* --- Initialization functions (init, alloc, free) --- */
 
 void a4l_free_buffer(a4l_buf_t * buf_desc)
 {
@@ -52,18 +52,15 @@ void a4l_free_buffer(a4l_buf_t * buf_desc)
}
 }
 
-int a4l_alloc_buffer(a4l_buf_t * buf_desc)
+int a4l_alloc_buffer(a4l_buf_t * buf_desc, int buf_size)
 {
int ret = 0;
char *vaddr, *vabase;
 
-   if (buf_desc-size == 0)
-   buf_desc-size = A4L_BUF_DEFSIZE;
-
+   buf_desc-size = buf_size;
buf_desc-size = PAGE_ALIGN(buf_desc-size);
 
buf_desc-buf = vmalloc(buf_desc-size);
-
if (buf_desc-buf == NULL) {
ret = -ENOMEM;
goto out_virt_contig_alloc;
@@ -94,7 +91,65 @@ out_virt_contig_alloc:
return ret;
 }
 
-/* --- Current Command management function --- */
+int a4l_init_buffer(a4l_buf_t * buf_desc)
+{
+   int err;
+   
+   /* No command to process yet */
+   buf_desc-cur_cmd = NULL;
+
+   /* No more (or not yet) linked with a subdevice */
+   buf_desc-subd = NULL;
+
+   /* Initializes counts and flags */
+   buf_desc-end_count = 0;
+   buf_desc-prd_count = 0;
+   buf_desc-cns_count = 0;
+   buf_desc-tmp_count = 0;
+   buf_desc-mng_count = 0;
+
+   /* Flush pending events */
+   buf_desc-flags = 0;
+   a4l_flush_sync(buf_desc-sync);
+
+   return err;
+}
+
+int a4l_setup_buffer(a4l_cxt_t *cxt, a4l_cmd_t *cmd)
+{
+   a4l_buf_t * buf_desc = cxt-buffer;
+   int i;
+
+   /* Retrieve the related subdevice */
+   buf_desc-subd = a4l_get_subd(cxt-dev, cmd-idx_subd);
+   if (buf_desc-subd == NULL) {
+   __a4l_err(a4l_setup_buffer: subdevice index 
+ out of range (%d)\n, cmd-idx_subd);
+   goto -EINVAL;
+   }
+
+   /* Checks if the transfer system has to work in bulk mode */
+   if (cmd-flags  A4L_CMD_BULK)
+   set_bit(A4L_BUF_BULK_NR, buf_desc-flags);
+   
+   /* Sets the working command */
+   buf_desc-cur_cmd = cmd;
+
+   /* Computes the count to reach, if need be */
+   if (cmd-stop_src == TRIG_COUNT) {
+   for (i = 0; i  cmd-nb_chan; i++) {
+   a4l_chan_t *chft;
+   chft = a4l_get_chfeat(buf_desc-subd, 
+ CR_CHAN(cmd-chan_descs[i]));
+   buf_desc-end_count += chft-nb_bits / 8;
+   }
+   buf_desc-end_count *= cmd-stop_arg;
+   }
+   
+   return 0;
+}
+
+/* --- current Command management function --- */
 
 a4l_cmd_t *a4l_get_cmd(a4l_subd_t *subd)
 {


___
Xenomai-git mailing list
Xenomai-git@gna.org
https://mail.gna.org/listinfo/xenomai-git


[Xenomai-git] Alexis Berlemont : analogy: first draft of buffer initialization functions (broken)

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

Author: Alexis Berlemont alexis.berlem...@gmail.com
Date:   Sun May 16 23:23:16 2010 +0200

analogy: first draft of buffer initialization functions (broken)

---

 ksrc/drivers/analogy/buffer.c |   69 
 1 files changed, 62 insertions(+), 7 deletions(-)

diff --git a/ksrc/drivers/analogy/buffer.c b/ksrc/drivers/analogy/buffer.c
index ecbc379..a27a1d6 100644
--- a/ksrc/drivers/analogy/buffer.c
+++ b/ksrc/drivers/analogy/buffer.c
@@ -33,7 +33,7 @@
 #include analogy/buffer.h
 #include analogy/transfer.h
 
-/* --- Buffer allocation / free functions --- */
+/* --- Initialization functions (init, alloc, free) --- */
 
 void a4l_free_buffer(a4l_buf_t * buf_desc)
 {
@@ -52,18 +52,15 @@ void a4l_free_buffer(a4l_buf_t * buf_desc)
}
 }
 
-int a4l_alloc_buffer(a4l_buf_t * buf_desc)
+int a4l_alloc_buffer(a4l_buf_t * buf_desc, int buf_size)
 {
int ret = 0;
char *vaddr, *vabase;
 
-   if (buf_desc-size == 0)
-   buf_desc-size = A4L_BUF_DEFSIZE;
-
+   buf_desc-size = buf_size;
buf_desc-size = PAGE_ALIGN(buf_desc-size);
 
buf_desc-buf = vmalloc(buf_desc-size);
-
if (buf_desc-buf == NULL) {
ret = -ENOMEM;
goto out_virt_contig_alloc;
@@ -94,7 +91,65 @@ out_virt_contig_alloc:
return ret;
 }
 
-/* --- Current Command management function --- */
+int a4l_init_buffer(a4l_buf_t * buf_desc)
+{
+   int err;
+   
+   /* No command to process yet */
+   buf_desc-cur_cmd = NULL;
+
+   /* No more (or not yet) linked with a subdevice */
+   buf_desc-subd = NULL;
+
+   /* Initializes counts and flags */
+   buf_desc-end_count = 0;
+   buf_desc-prd_count = 0;
+   buf_desc-cns_count = 0;
+   buf_desc-tmp_count = 0;
+   buf_desc-mng_count = 0;
+
+   /* Flush pending events */
+   buf_desc-flags = 0;
+   a4l_flush_sync(buf_desc-sync);
+
+   return err;
+}
+
+int a4l_setup_buffer(a4l_cxt_t *cxt, a4l_cmd_t *cmd)
+{
+   a4l_buf_t * buf_desc = cxt-buffer;
+   int i;
+
+   /* Retrieve the related subdevice */
+   buf_desc-subd = a4l_get_subd(cxt-dev, cmd-idx_subd);
+   if (buf_desc-subd == NULL) {
+   __a4l_err(a4l_setup_buffer: subdevice index 
+ out of range (%d)\n, cmd-idx_subd);
+   goto -EINVAL;
+   }
+
+   /* Checks if the transfer system has to work in bulk mode */
+   if (cmd-flags  A4L_CMD_BULK)
+   set_bit(A4L_BUF_BULK_NR, buf_desc-flags);
+   
+   /* Sets the working command */
+   buf_desc-cur_cmd = cmd;
+
+   /* Computes the count to reach, if need be */
+   if (cmd-stop_src == TRIG_COUNT) {
+   for (i = 0; i  cmd-nb_chan; i++) {
+   a4l_chan_t *chft;
+   chft = a4l_get_chfeat(buf_desc-subd, 
+ CR_CHAN(cmd-chan_descs[i]));
+   buf_desc-end_count += chft-nb_bits / 8;
+   }
+   buf_desc-end_count *= cmd-stop_arg;
+   }
+   
+   return 0;
+}
+
+/* --- current Command management function --- */
 
 a4l_cmd_t *a4l_get_cmd(a4l_subd_t *subd)
 {


___
Xenomai-git mailing list
Xenomai-git@gna.org
https://mail.gna.org/listinfo/xenomai-git


[Xenomai-git] Alexis Berlemont : analogy: first draft of buffer initialization functions (broken)

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

Author: Alexis Berlemont alexis.berlem...@gmail.com
Date:   Sun May 16 23:23:16 2010 +0200

analogy: first draft of buffer initialization functions (broken)

---

 ksrc/drivers/analogy/buffer.c |   69 
 1 files changed, 62 insertions(+), 7 deletions(-)

diff --git a/ksrc/drivers/analogy/buffer.c b/ksrc/drivers/analogy/buffer.c
index ecbc379..a27a1d6 100644
--- a/ksrc/drivers/analogy/buffer.c
+++ b/ksrc/drivers/analogy/buffer.c
@@ -33,7 +33,7 @@
 #include analogy/buffer.h
 #include analogy/transfer.h
 
-/* --- Buffer allocation / free functions --- */
+/* --- Initialization functions (init, alloc, free) --- */
 
 void a4l_free_buffer(a4l_buf_t * buf_desc)
 {
@@ -52,18 +52,15 @@ void a4l_free_buffer(a4l_buf_t * buf_desc)
}
 }
 
-int a4l_alloc_buffer(a4l_buf_t * buf_desc)
+int a4l_alloc_buffer(a4l_buf_t * buf_desc, int buf_size)
 {
int ret = 0;
char *vaddr, *vabase;
 
-   if (buf_desc-size == 0)
-   buf_desc-size = A4L_BUF_DEFSIZE;
-
+   buf_desc-size = buf_size;
buf_desc-size = PAGE_ALIGN(buf_desc-size);
 
buf_desc-buf = vmalloc(buf_desc-size);
-
if (buf_desc-buf == NULL) {
ret = -ENOMEM;
goto out_virt_contig_alloc;
@@ -94,7 +91,65 @@ out_virt_contig_alloc:
return ret;
 }
 
-/* --- Current Command management function --- */
+int a4l_init_buffer(a4l_buf_t * buf_desc)
+{
+   int err;
+   
+   /* No command to process yet */
+   buf_desc-cur_cmd = NULL;
+
+   /* No more (or not yet) linked with a subdevice */
+   buf_desc-subd = NULL;
+
+   /* Initializes counts and flags */
+   buf_desc-end_count = 0;
+   buf_desc-prd_count = 0;
+   buf_desc-cns_count = 0;
+   buf_desc-tmp_count = 0;
+   buf_desc-mng_count = 0;
+
+   /* Flush pending events */
+   buf_desc-flags = 0;
+   a4l_flush_sync(buf_desc-sync);
+
+   return err;
+}
+
+int a4l_setup_buffer(a4l_cxt_t *cxt, a4l_cmd_t *cmd)
+{
+   a4l_buf_t * buf_desc = cxt-buffer;
+   int i;
+
+   /* Retrieve the related subdevice */
+   buf_desc-subd = a4l_get_subd(cxt-dev, cmd-idx_subd);
+   if (buf_desc-subd == NULL) {
+   __a4l_err(a4l_setup_buffer: subdevice index 
+ out of range (%d)\n, cmd-idx_subd);
+   goto -EINVAL;
+   }
+
+   /* Checks if the transfer system has to work in bulk mode */
+   if (cmd-flags  A4L_CMD_BULK)
+   set_bit(A4L_BUF_BULK_NR, buf_desc-flags);
+   
+   /* Sets the working command */
+   buf_desc-cur_cmd = cmd;
+
+   /* Computes the count to reach, if need be */
+   if (cmd-stop_src == TRIG_COUNT) {
+   for (i = 0; i  cmd-nb_chan; i++) {
+   a4l_chan_t *chft;
+   chft = a4l_get_chfeat(buf_desc-subd, 
+ CR_CHAN(cmd-chan_descs[i]));
+   buf_desc-end_count += chft-nb_bits / 8;
+   }
+   buf_desc-end_count *= cmd-stop_arg;
+   }
+   
+   return 0;
+}
+
+/* --- current Command management function --- */
 
 a4l_cmd_t *a4l_get_cmd(a4l_subd_t *subd)
 {


___
Xenomai-git mailing list
Xenomai-git@gna.org
https://mail.gna.org/listinfo/xenomai-git


[Xenomai-git] Alexis Berlemont : analogy: first draft of buffer initialization functions (broken)

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

Author: Alexis Berlemont alexis.berlem...@gmail.com
Date:   Sun May 16 23:23:16 2010 +0200

analogy: first draft of buffer initialization functions (broken)

---

 ksrc/drivers/analogy/buffer.c |   69 
 1 files changed, 62 insertions(+), 7 deletions(-)

diff --git a/ksrc/drivers/analogy/buffer.c b/ksrc/drivers/analogy/buffer.c
index ecbc379..a27a1d6 100644
--- a/ksrc/drivers/analogy/buffer.c
+++ b/ksrc/drivers/analogy/buffer.c
@@ -33,7 +33,7 @@
 #include analogy/buffer.h
 #include analogy/transfer.h
 
-/* --- Buffer allocation / free functions --- */
+/* --- Initialization functions (init, alloc, free) --- */
 
 void a4l_free_buffer(a4l_buf_t * buf_desc)
 {
@@ -52,18 +52,15 @@ void a4l_free_buffer(a4l_buf_t * buf_desc)
}
 }
 
-int a4l_alloc_buffer(a4l_buf_t * buf_desc)
+int a4l_alloc_buffer(a4l_buf_t * buf_desc, int buf_size)
 {
int ret = 0;
char *vaddr, *vabase;
 
-   if (buf_desc-size == 0)
-   buf_desc-size = A4L_BUF_DEFSIZE;
-
+   buf_desc-size = buf_size;
buf_desc-size = PAGE_ALIGN(buf_desc-size);
 
buf_desc-buf = vmalloc(buf_desc-size);
-
if (buf_desc-buf == NULL) {
ret = -ENOMEM;
goto out_virt_contig_alloc;
@@ -94,7 +91,65 @@ out_virt_contig_alloc:
return ret;
 }
 
-/* --- Current Command management function --- */
+int a4l_init_buffer(a4l_buf_t * buf_desc)
+{
+   int err;
+   
+   /* No command to process yet */
+   buf_desc-cur_cmd = NULL;
+
+   /* No more (or not yet) linked with a subdevice */
+   buf_desc-subd = NULL;
+
+   /* Initializes counts and flags */
+   buf_desc-end_count = 0;
+   buf_desc-prd_count = 0;
+   buf_desc-cns_count = 0;
+   buf_desc-tmp_count = 0;
+   buf_desc-mng_count = 0;
+
+   /* Flush pending events */
+   buf_desc-flags = 0;
+   a4l_flush_sync(buf_desc-sync);
+
+   return err;
+}
+
+int a4l_setup_buffer(a4l_cxt_t *cxt, a4l_cmd_t *cmd)
+{
+   a4l_buf_t * buf_desc = cxt-buffer;
+   int i;
+
+   /* Retrieve the related subdevice */
+   buf_desc-subd = a4l_get_subd(cxt-dev, cmd-idx_subd);
+   if (buf_desc-subd == NULL) {
+   __a4l_err(a4l_setup_buffer: subdevice index 
+ out of range (%d)\n, cmd-idx_subd);
+   goto -EINVAL;
+   }
+
+   /* Checks if the transfer system has to work in bulk mode */
+   if (cmd-flags  A4L_CMD_BULK)
+   set_bit(A4L_BUF_BULK_NR, buf_desc-flags);
+   
+   /* Sets the working command */
+   buf_desc-cur_cmd = cmd;
+
+   /* Computes the count to reach, if need be */
+   if (cmd-stop_src == TRIG_COUNT) {
+   for (i = 0; i  cmd-nb_chan; i++) {
+   a4l_chan_t *chft;
+   chft = a4l_get_chfeat(buf_desc-subd, 
+ CR_CHAN(cmd-chan_descs[i]));
+   buf_desc-end_count += chft-nb_bits / 8;
+   }
+   buf_desc-end_count *= cmd-stop_arg;
+   }
+   
+   return 0;
+}
+
+/* --- current Command management function --- */
 
 a4l_cmd_t *a4l_get_cmd(a4l_subd_t *subd)
 {


___
Xenomai-git mailing list
Xenomai-git@gna.org
https://mail.gna.org/listinfo/xenomai-git