[Xenomai-git] Alexis Berlemont : analogy: [pcimio] rework the mite setup procedures

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

Author: Alexis Berlemont alexis.berlem...@gmail.com
Date:   Sat Sep  4 00:30:43 2010 +0200

analogy: [pcimio] rework the mite setup procedures

---

 .../analogy/national_instruments/mio_common.c  |  116 +---
 1 files changed, 76 insertions(+), 40 deletions(-)

diff --git a/ksrc/drivers/analogy/national_instruments/mio_common.c 
b/ksrc/drivers/analogy/national_instruments/mio_common.c
index f9e6dba..a1a50dc 100644
--- a/ksrc/drivers/analogy/national_instruments/mio_common.c
+++ b/ksrc/drivers/analogy/national_instruments/mio_common.c
@@ -402,25 +402,30 @@ static int ni_request_gpct_mite_channel(a4l_dev_t * dev,
 static int ni_request_cdo_mite_channel(a4l_dev_t *dev)
 {
unsigned long flags;
+   int err = 0;
 
a4l_lock_irqsave(devpriv-mite_channel_lock, flags);
+
+   /* No channel should be allocated... */
BUG_ON(devpriv-cdo_mite_chan);
+   /* ...until now */
devpriv-cdo_mite_chan =
mite_request_channel(devpriv-mite, devpriv-cdo_mite_ring);
-   if (devpriv-cdo_mite_chan == NULL) {
-   a4l_unlock_irqrestore(devpriv-mite_channel_lock,
- flags);
+
+   if (devpriv-cdo_mite_chan) {
+   devpriv-cdo_mite_chan-dir = A4L_OUTPUT;
+   ni_set_cdo_dma_channel(dev, devpriv-cdo_mite_chan-channel);
+   } else {
+   err = -EBUSY;
a4l_err(dev,
ni_request_cdo_mite_channel: 
failed to reserve mite dma channel 
for correlated digital outut.);
-   return -EBUSY;
}
-   devpriv-cdo_mite_chan-dir = A4L_OUTPUT;
-   ni_set_cdo_dma_channel(dev, devpriv-cdo_mite_chan-channel);
+
a4l_unlock_irqrestore(devpriv-mite_channel_lock, flags);
 
-   return 0;
+   return err;
 }
 
 void ni_release_ai_mite_channel(a4l_dev_t *dev)
@@ -1425,13 +1430,18 @@ static void ni_ai_munge32(a4l_subd_t *subd, void *buf, 
unsigned long size)
 static int ni_ai_setup_MITE_dma(a4l_subd_t *subd)
 {
a4l_dev_t *dev = subd-dev;
-   int retval;
+   unsigned long flags;
+   int err;
 
-   retval = ni_request_ai_mite_channel(dev);
-   if (retval)
-   return retval;
+   err = ni_request_ai_mite_channel(dev);
+   if (err  0)
+   return err;
+
+   err = mite_buf_change(devpriv-ai_mite_chan-ring, subd);
+   if (err  0)
+   return err;
 
-   mite_buf_change(devpriv-ai_mite_chan-ring, subd);
+   a4l_lock_irqsave(devpriv-mite_channel_lock, flags);
 
switch (boardtype.reg_type) {
case ni_reg_611x:
@@ -1449,36 +1459,74 @@ static int ni_ai_setup_MITE_dma(a4l_subd_t *subd)
/* start the MITE */
mite_dma_arm(devpriv-ai_mite_chan);
 
+   a4l_unlock_irqrestore(devpriv-mite_channel_lock, flags);
+
return 0;
 }
 
 static int ni_ao_setup_MITE_dma(a4l_subd_t *subd)
 {
a4l_dev_t *dev = subd-dev;
-
-   int retval;
unsigned long flags;
+   int err;
 
-   retval = ni_request_ao_mite_channel(dev);
-   if (retval)
-   return retval;
+   err = ni_request_ao_mite_channel(dev);
+   if (err  0)
+   return err;
 
-   if (devpriv-ao_mite_chan) {
+   err = mite_buf_change(devpriv-ao_mite_chan-ring, subd);
+   if (err  0)
+   return err;
 
-   mite_buf_change(devpriv-ao_mite_chan-ring, subd);
+   a4l_lock_irqsave(devpriv-mite_channel_lock, flags);
+
+   if (devpriv-ao_mite_chan) {
 
if (boardtype.reg_type  (ni_reg_611x | ni_reg_6713)) {
mite_prep_dma(devpriv-ao_mite_chan, 32, 32);
} else {
-   /* doing 32 instead of 16 bit wide transfers from memory
-  makes the mite do 32 bit pci transfers, doubling pci 
bandwidth. */
+   /* Doing 32 instead of 16 bit wide transfers
+  from memory makes the mite do 32 bit pci
+  transfers, doubling pci bandwidth. */
mite_prep_dma(devpriv-ao_mite_chan, 16, 32);
}
mite_dma_arm(devpriv-ao_mite_chan);
} else
-   retval = -EIO;
+   err = -EIO;
 
-   return retval;
+   a4l_unlock_irqrestore(devpriv-mite_channel_lock, flags);
+
+   return err;
+}
+
+static int ni_cdo_setup_MITE_dma(a4l_subd_t *subd)
+{
+   a4l_dev_t *dev = subd-dev;
+   unsigned long flags;
+   int err;
+
+   err = ni_request_cdo_mite_channel(dev);
+   if (err  0)
+   return err;
+
+   /* No need to get a lock to setup the ring buffer */
+   err = 

[Xenomai-git] Alexis Berlemont : analogy: [pcimio] rework the mite setup procedures

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

Author: Alexis Berlemont alexis.berlem...@gmail.com
Date:   Sat Sep  4 00:30:43 2010 +0200

analogy: [pcimio] rework the mite setup procedures

---

 .../analogy/national_instruments/mio_common.c  |  116 +---
 1 files changed, 76 insertions(+), 40 deletions(-)

diff --git a/ksrc/drivers/analogy/national_instruments/mio_common.c 
b/ksrc/drivers/analogy/national_instruments/mio_common.c
index f9e6dba..a1a50dc 100644
--- a/ksrc/drivers/analogy/national_instruments/mio_common.c
+++ b/ksrc/drivers/analogy/national_instruments/mio_common.c
@@ -402,25 +402,30 @@ static int ni_request_gpct_mite_channel(a4l_dev_t * dev,
 static int ni_request_cdo_mite_channel(a4l_dev_t *dev)
 {
unsigned long flags;
+   int err = 0;
 
a4l_lock_irqsave(devpriv-mite_channel_lock, flags);
+
+   /* No channel should be allocated... */
BUG_ON(devpriv-cdo_mite_chan);
+   /* ...until now */
devpriv-cdo_mite_chan =
mite_request_channel(devpriv-mite, devpriv-cdo_mite_ring);
-   if (devpriv-cdo_mite_chan == NULL) {
-   a4l_unlock_irqrestore(devpriv-mite_channel_lock,
- flags);
+
+   if (devpriv-cdo_mite_chan) {
+   devpriv-cdo_mite_chan-dir = A4L_OUTPUT;
+   ni_set_cdo_dma_channel(dev, devpriv-cdo_mite_chan-channel);
+   } else {
+   err = -EBUSY;
a4l_err(dev,
ni_request_cdo_mite_channel: 
failed to reserve mite dma channel 
for correlated digital outut.);
-   return -EBUSY;
}
-   devpriv-cdo_mite_chan-dir = A4L_OUTPUT;
-   ni_set_cdo_dma_channel(dev, devpriv-cdo_mite_chan-channel);
+
a4l_unlock_irqrestore(devpriv-mite_channel_lock, flags);
 
-   return 0;
+   return err;
 }
 
 void ni_release_ai_mite_channel(a4l_dev_t *dev)
@@ -1425,13 +1430,18 @@ static void ni_ai_munge32(a4l_subd_t *subd, void *buf, 
unsigned long size)
 static int ni_ai_setup_MITE_dma(a4l_subd_t *subd)
 {
a4l_dev_t *dev = subd-dev;
-   int retval;
+   unsigned long flags;
+   int err;
 
-   retval = ni_request_ai_mite_channel(dev);
-   if (retval)
-   return retval;
+   err = ni_request_ai_mite_channel(dev);
+   if (err  0)
+   return err;
+
+   err = mite_buf_change(devpriv-ai_mite_chan-ring, subd);
+   if (err  0)
+   return err;
 
-   mite_buf_change(devpriv-ai_mite_chan-ring, subd);
+   a4l_lock_irqsave(devpriv-mite_channel_lock, flags);
 
switch (boardtype.reg_type) {
case ni_reg_611x:
@@ -1449,36 +1459,74 @@ static int ni_ai_setup_MITE_dma(a4l_subd_t *subd)
/* start the MITE */
mite_dma_arm(devpriv-ai_mite_chan);
 
+   a4l_unlock_irqrestore(devpriv-mite_channel_lock, flags);
+
return 0;
 }
 
 static int ni_ao_setup_MITE_dma(a4l_subd_t *subd)
 {
a4l_dev_t *dev = subd-dev;
-
-   int retval;
unsigned long flags;
+   int err;
 
-   retval = ni_request_ao_mite_channel(dev);
-   if (retval)
-   return retval;
+   err = ni_request_ao_mite_channel(dev);
+   if (err  0)
+   return err;
 
-   if (devpriv-ao_mite_chan) {
+   err = mite_buf_change(devpriv-ao_mite_chan-ring, subd);
+   if (err  0)
+   return err;
 
-   mite_buf_change(devpriv-ao_mite_chan-ring, subd);
+   a4l_lock_irqsave(devpriv-mite_channel_lock, flags);
+
+   if (devpriv-ao_mite_chan) {
 
if (boardtype.reg_type  (ni_reg_611x | ni_reg_6713)) {
mite_prep_dma(devpriv-ao_mite_chan, 32, 32);
} else {
-   /* doing 32 instead of 16 bit wide transfers from memory
-  makes the mite do 32 bit pci transfers, doubling pci 
bandwidth. */
+   /* Doing 32 instead of 16 bit wide transfers
+  from memory makes the mite do 32 bit pci
+  transfers, doubling pci bandwidth. */
mite_prep_dma(devpriv-ao_mite_chan, 16, 32);
}
mite_dma_arm(devpriv-ao_mite_chan);
} else
-   retval = -EIO;
+   err = -EIO;
 
-   return retval;
+   a4l_unlock_irqrestore(devpriv-mite_channel_lock, flags);
+
+   return err;
+}
+
+static int ni_cdo_setup_MITE_dma(a4l_subd_t *subd)
+{
+   a4l_dev_t *dev = subd-dev;
+   unsigned long flags;
+   int err;
+
+   err = ni_request_cdo_mite_channel(dev);
+   if (err  0)
+   return err;
+
+   /* No need to get a lock to setup the ring buffer */
+   err = 

[Xenomai-git] Alexis Berlemont : analogy: [pcimio] rework the mite setup procedures

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

Author: Alexis Berlemont alexis.berlem...@gmail.com
Date:   Sat Sep  4 00:30:43 2010 +0200

analogy: [pcimio] rework the mite setup procedures

---

 .../analogy/national_instruments/mio_common.c  |  116 +---
 1 files changed, 76 insertions(+), 40 deletions(-)

diff --git a/ksrc/drivers/analogy/national_instruments/mio_common.c 
b/ksrc/drivers/analogy/national_instruments/mio_common.c
index f9e6dba..a1a50dc 100644
--- a/ksrc/drivers/analogy/national_instruments/mio_common.c
+++ b/ksrc/drivers/analogy/national_instruments/mio_common.c
@@ -402,25 +402,30 @@ static int ni_request_gpct_mite_channel(a4l_dev_t * dev,
 static int ni_request_cdo_mite_channel(a4l_dev_t *dev)
 {
unsigned long flags;
+   int err = 0;
 
a4l_lock_irqsave(devpriv-mite_channel_lock, flags);
+
+   /* No channel should be allocated... */
BUG_ON(devpriv-cdo_mite_chan);
+   /* ...until now */
devpriv-cdo_mite_chan =
mite_request_channel(devpriv-mite, devpriv-cdo_mite_ring);
-   if (devpriv-cdo_mite_chan == NULL) {
-   a4l_unlock_irqrestore(devpriv-mite_channel_lock,
- flags);
+
+   if (devpriv-cdo_mite_chan) {
+   devpriv-cdo_mite_chan-dir = A4L_OUTPUT;
+   ni_set_cdo_dma_channel(dev, devpriv-cdo_mite_chan-channel);
+   } else {
+   err = -EBUSY;
a4l_err(dev,
ni_request_cdo_mite_channel: 
failed to reserve mite dma channel 
for correlated digital outut.);
-   return -EBUSY;
}
-   devpriv-cdo_mite_chan-dir = A4L_OUTPUT;
-   ni_set_cdo_dma_channel(dev, devpriv-cdo_mite_chan-channel);
+
a4l_unlock_irqrestore(devpriv-mite_channel_lock, flags);
 
-   return 0;
+   return err;
 }
 
 void ni_release_ai_mite_channel(a4l_dev_t *dev)
@@ -1425,13 +1430,18 @@ static void ni_ai_munge32(a4l_subd_t *subd, void *buf, 
unsigned long size)
 static int ni_ai_setup_MITE_dma(a4l_subd_t *subd)
 {
a4l_dev_t *dev = subd-dev;
-   int retval;
+   unsigned long flags;
+   int err;
 
-   retval = ni_request_ai_mite_channel(dev);
-   if (retval)
-   return retval;
+   err = ni_request_ai_mite_channel(dev);
+   if (err  0)
+   return err;
+
+   err = mite_buf_change(devpriv-ai_mite_chan-ring, subd);
+   if (err  0)
+   return err;
 
-   mite_buf_change(devpriv-ai_mite_chan-ring, subd);
+   a4l_lock_irqsave(devpriv-mite_channel_lock, flags);
 
switch (boardtype.reg_type) {
case ni_reg_611x:
@@ -1449,36 +1459,74 @@ static int ni_ai_setup_MITE_dma(a4l_subd_t *subd)
/* start the MITE */
mite_dma_arm(devpriv-ai_mite_chan);
 
+   a4l_unlock_irqrestore(devpriv-mite_channel_lock, flags);
+
return 0;
 }
 
 static int ni_ao_setup_MITE_dma(a4l_subd_t *subd)
 {
a4l_dev_t *dev = subd-dev;
-
-   int retval;
unsigned long flags;
+   int err;
 
-   retval = ni_request_ao_mite_channel(dev);
-   if (retval)
-   return retval;
+   err = ni_request_ao_mite_channel(dev);
+   if (err  0)
+   return err;
 
-   if (devpriv-ao_mite_chan) {
+   err = mite_buf_change(devpriv-ao_mite_chan-ring, subd);
+   if (err  0)
+   return err;
 
-   mite_buf_change(devpriv-ao_mite_chan-ring, subd);
+   a4l_lock_irqsave(devpriv-mite_channel_lock, flags);
+
+   if (devpriv-ao_mite_chan) {
 
if (boardtype.reg_type  (ni_reg_611x | ni_reg_6713)) {
mite_prep_dma(devpriv-ao_mite_chan, 32, 32);
} else {
-   /* doing 32 instead of 16 bit wide transfers from memory
-  makes the mite do 32 bit pci transfers, doubling pci 
bandwidth. */
+   /* Doing 32 instead of 16 bit wide transfers
+  from memory makes the mite do 32 bit pci
+  transfers, doubling pci bandwidth. */
mite_prep_dma(devpriv-ao_mite_chan, 16, 32);
}
mite_dma_arm(devpriv-ao_mite_chan);
} else
-   retval = -EIO;
+   err = -EIO;
 
-   return retval;
+   a4l_unlock_irqrestore(devpriv-mite_channel_lock, flags);
+
+   return err;
+}
+
+static int ni_cdo_setup_MITE_dma(a4l_subd_t *subd)
+{
+   a4l_dev_t *dev = subd-dev;
+   unsigned long flags;
+   int err;
+
+   err = ni_request_cdo_mite_channel(dev);
+   if (err  0)
+   return err;
+
+   /* No need to get a lock to setup the ring buffer */
+   err = 

[Xenomai-git] Alexis Berlemont : analogy: [pcimio] rework the mite setup procedures

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

Author: Alexis Berlemont alexis.berlem...@gmail.com
Date:   Sat Sep  4 00:30:43 2010 +0200

analogy: [pcimio] rework the mite setup procedures

---

 .../analogy/national_instruments/mio_common.c  |  116 +---
 1 files changed, 76 insertions(+), 40 deletions(-)

diff --git a/ksrc/drivers/analogy/national_instruments/mio_common.c 
b/ksrc/drivers/analogy/national_instruments/mio_common.c
index f9e6dba..a1a50dc 100644
--- a/ksrc/drivers/analogy/national_instruments/mio_common.c
+++ b/ksrc/drivers/analogy/national_instruments/mio_common.c
@@ -402,25 +402,30 @@ static int ni_request_gpct_mite_channel(a4l_dev_t * dev,
 static int ni_request_cdo_mite_channel(a4l_dev_t *dev)
 {
unsigned long flags;
+   int err = 0;
 
a4l_lock_irqsave(devpriv-mite_channel_lock, flags);
+
+   /* No channel should be allocated... */
BUG_ON(devpriv-cdo_mite_chan);
+   /* ...until now */
devpriv-cdo_mite_chan =
mite_request_channel(devpriv-mite, devpriv-cdo_mite_ring);
-   if (devpriv-cdo_mite_chan == NULL) {
-   a4l_unlock_irqrestore(devpriv-mite_channel_lock,
- flags);
+
+   if (devpriv-cdo_mite_chan) {
+   devpriv-cdo_mite_chan-dir = A4L_OUTPUT;
+   ni_set_cdo_dma_channel(dev, devpriv-cdo_mite_chan-channel);
+   } else {
+   err = -EBUSY;
a4l_err(dev,
ni_request_cdo_mite_channel: 
failed to reserve mite dma channel 
for correlated digital outut.);
-   return -EBUSY;
}
-   devpriv-cdo_mite_chan-dir = A4L_OUTPUT;
-   ni_set_cdo_dma_channel(dev, devpriv-cdo_mite_chan-channel);
+
a4l_unlock_irqrestore(devpriv-mite_channel_lock, flags);
 
-   return 0;
+   return err;
 }
 
 void ni_release_ai_mite_channel(a4l_dev_t *dev)
@@ -1425,13 +1430,18 @@ static void ni_ai_munge32(a4l_subd_t *subd, void *buf, 
unsigned long size)
 static int ni_ai_setup_MITE_dma(a4l_subd_t *subd)
 {
a4l_dev_t *dev = subd-dev;
-   int retval;
+   unsigned long flags;
+   int err;
 
-   retval = ni_request_ai_mite_channel(dev);
-   if (retval)
-   return retval;
+   err = ni_request_ai_mite_channel(dev);
+   if (err  0)
+   return err;
+
+   err = mite_buf_change(devpriv-ai_mite_chan-ring, subd);
+   if (err  0)
+   return err;
 
-   mite_buf_change(devpriv-ai_mite_chan-ring, subd);
+   a4l_lock_irqsave(devpriv-mite_channel_lock, flags);
 
switch (boardtype.reg_type) {
case ni_reg_611x:
@@ -1449,36 +1459,74 @@ static int ni_ai_setup_MITE_dma(a4l_subd_t *subd)
/* start the MITE */
mite_dma_arm(devpriv-ai_mite_chan);
 
+   a4l_unlock_irqrestore(devpriv-mite_channel_lock, flags);
+
return 0;
 }
 
 static int ni_ao_setup_MITE_dma(a4l_subd_t *subd)
 {
a4l_dev_t *dev = subd-dev;
-
-   int retval;
unsigned long flags;
+   int err;
 
-   retval = ni_request_ao_mite_channel(dev);
-   if (retval)
-   return retval;
+   err = ni_request_ao_mite_channel(dev);
+   if (err  0)
+   return err;
 
-   if (devpriv-ao_mite_chan) {
+   err = mite_buf_change(devpriv-ao_mite_chan-ring, subd);
+   if (err  0)
+   return err;
 
-   mite_buf_change(devpriv-ao_mite_chan-ring, subd);
+   a4l_lock_irqsave(devpriv-mite_channel_lock, flags);
+
+   if (devpriv-ao_mite_chan) {
 
if (boardtype.reg_type  (ni_reg_611x | ni_reg_6713)) {
mite_prep_dma(devpriv-ao_mite_chan, 32, 32);
} else {
-   /* doing 32 instead of 16 bit wide transfers from memory
-  makes the mite do 32 bit pci transfers, doubling pci 
bandwidth. */
+   /* Doing 32 instead of 16 bit wide transfers
+  from memory makes the mite do 32 bit pci
+  transfers, doubling pci bandwidth. */
mite_prep_dma(devpriv-ao_mite_chan, 16, 32);
}
mite_dma_arm(devpriv-ao_mite_chan);
} else
-   retval = -EIO;
+   err = -EIO;
 
-   return retval;
+   a4l_unlock_irqrestore(devpriv-mite_channel_lock, flags);
+
+   return err;
+}
+
+static int ni_cdo_setup_MITE_dma(a4l_subd_t *subd)
+{
+   a4l_dev_t *dev = subd-dev;
+   unsigned long flags;
+   int err;
+
+   err = ni_request_cdo_mite_channel(dev);
+   if (err  0)
+   return err;
+
+   /* No need to get a lock to setup the ring buffer */
+   err =