Module: xenomai-abe
Branch: experimental
Commit: 8cc939da0dcf8456e3046fe5fca5a6dfef309fab
URL:    
http://git.xenomai.org/?p=xenomai-abe.git;a=commit;h=8cc939da0dcf8456e3046fe5fca5a6dfef309fab

Author: Alexis Berlemont <alexis.berlem...@gmail.com>
Date:   Thu Jun 10 23:59:00 2010 +0200

analogy: [pcimio] fix a huge hack in the mite initialization (broken)

---

 .../analogy/national_instruments/mio_common.c      |   28 +++++++++----------
 ksrc/drivers/analogy/national_instruments/mite.c   |   10 +++---
 ksrc/drivers/analogy/national_instruments/mite.h   |    2 +-
 3 files changed, 19 insertions(+), 21 deletions(-)

diff --git a/ksrc/drivers/analogy/national_instruments/mio_common.c 
b/ksrc/drivers/analogy/national_instruments/mio_common.c
index 46efd03..ead64b8 100644
--- a/ksrc/drivers/analogy/national_instruments/mio_common.c
+++ b/ksrc/drivers/analogy/national_instruments/mio_common.c
@@ -511,7 +511,7 @@ static int ni_ao_wait_for_dma_load(a4l_subd_t *subd)
        static const int timeout = 10000;
 
        a4l_dev_t *dev = subd->dev;
-       a4l_buf_t *buf = dev->transfer.bufs[subd->idx];
+       a4l_buf_t *buf = subd->buf;
 
        int i;
 
@@ -522,7 +522,7 @@ static int ni_ao_wait_for_dma_load(a4l_subd_t *subd)
 
                b_status = devpriv->stc_readw(dev, AO_Status_1_Register);
 
-               buffer_filled = test_bit(A4L_BUF_EOA_NR, &buf->evt_flags);
+               buffer_filled = test_bit(A4L_BUF_EOA_NR, &buf->flags);
                buffer_filled |= (b_status & AO_FIFO_Half_Full_St);
 
                if (buffer_filled)
@@ -727,10 +727,9 @@ static void ni_handle_eos(a4l_subd_t *subd)
 static void ni_event(a4l_subd_t * subd)
 {              
        /* Temporary hack */
-       a4l_dev_t *dev = subd->dev;
-       a4l_buf_t *buf = dev->transfer.bufs[subd->idx];
+       a4l_buf_t *buf = subd->buf;
 
-       if(test_bit(A4L_BUF_ERROR_NR, &buf->evt_flags)) {
+       if(test_bit(A4L_BUF_ERROR_NR, &buf->flags)) {
                if (subd->cancel != NULL)
                        subd->cancel(subd);
        }
@@ -1426,17 +1425,16 @@ static void ni_ai_munge32(a4l_subd_t *subd, void *buf, 
unsigned long size)
 #if (defined(CONFIG_XENO_DRIVERS_ANALOGY_NI_MITE) || \
      defined(CONFIG_XENO_DRIVERS_ANALOGY_NI_MITE_MODULE))
 
-static int ni_ai_setup_MITE_dma(a4l_dev_t *dev)
+static int ni_ai_setup_MITE_dma(a4l_subd_t *subd)
 {
+       a4l_dev_t *dev = subd->dev;
        int retval;
 
        retval = ni_request_ai_mite_channel(dev);
        if (retval)
                return retval;
 
-       /* Huge hack */
-       mite_buf_change(devpriv->ai_mite_chan->ring, 
-                       dev->transfer.bufs[NI_AI_SUBDEV]);
+       mite_buf_change(devpriv->ai_mite_chan->ring, subd);
 
        switch (boardtype.reg_type) {
        case ni_reg_611x:
@@ -1457,8 +1455,10 @@ static int ni_ai_setup_MITE_dma(a4l_dev_t *dev)
        return 0;
 }
 
-static int ni_ao_setup_MITE_dma(a4l_dev_t *dev)
+static int ni_ao_setup_MITE_dma(a4l_subd_t *subd)
 {
+       a4l_dev_t *dev = subd->dev;
+
        int retval;
        unsigned long flags;
 
@@ -1466,9 +1466,7 @@ static int ni_ao_setup_MITE_dma(a4l_dev_t *dev)
        if (retval)
                return retval;
 
-       /* Huge hack */
-       mite_buf_change(devpriv->ao_mite_chan->ring, 
-                       dev->transfer.bufs[NI_AO_SUBDEV]);
+       mite_buf_change(devpriv->ao_mite_chan->ring, subd);
 
        a4l_lock_irqsave(&devpriv->mite_channel_lock, flags);
        if (devpriv->ao_mite_chan) {
@@ -2436,7 +2434,7 @@ static int ni_ai_cmd(a4l_subd_t *subd, a4l_cmd_t *cmd)
 #if (defined(CONFIG_XENO_DRIVERS_ANALOGY_NI_MITE) || \
      defined(CONFIG_XENO_DRIVERS_ANALOGY_NI_MITE_MODULE))
        {
-               int retval = ni_ai_setup_MITE_dma(dev);
+               int retval = ni_ai_setup_MITE_dma(subd);
                if (retval)
                        return retval;
        }
@@ -2846,7 +2844,7 @@ int ni_ao_inttrig(a4l_subd_t *subd, lsampl_t trignum)
        devpriv->stc_writew(dev, 1, DAC_FIFO_Clear);
        if (boardtype.reg_type & ni_reg_6xxx_mask)
                ni_ao_win_outl(dev, 0x6, AO_FIFO_Offset_Load_611x);
-       ret = ni_ao_setup_MITE_dma(dev);
+       ret = ni_ao_setup_MITE_dma(subd);
        if (ret)
                return ret;
        ret = ni_ao_wait_for_dma_load(subd);
diff --git a/ksrc/drivers/analogy/national_instruments/mite.c 
b/ksrc/drivers/analogy/national_instruments/mite.c
index d1a7813..da1f6a5 100644
--- a/ksrc/drivers/analogy/national_instruments/mite.c
+++ b/ksrc/drivers/analogy/national_instruments/mite.c
@@ -379,8 +379,9 @@ void mite_dma_disarm(struct mite_channel *mite_chan)
        writel(chor, mite->mite_io_addr + MITE_CHOR(mite_chan->channel));
 }
 
-int mite_buf_change(struct mite_dma_descriptor_ring *ring, a4l_buf_t *buf)
+int mite_buf_change(struct mite_dma_descriptor_ring *ring, a4l_subd_t *subd)
 {
+       a4l_buf_t *buf = subd->buf;
        unsigned int n_links;
        int i;
 
@@ -587,10 +588,9 @@ int mite_sync_input_dma(struct mite_channel *mite_chan, 
a4l_subd_t *subd)
 
 int mite_sync_output_dma(struct mite_channel *mite_chan, a4l_subd_t *subd)
 {
-       a4l_dev_t *dev = subd->dev;
-       a4l_buf_t *buf = dev->transfer.bufs[subd->idx];
-       int err;
+       a4l_buf_t *buf = subd->buf;
        unsigned int nbytes_ub, nbytes_lb;
+       int err;
 
        nbytes_lb = mite_bytes_read_from_memory_lb(mite_chan);
        nbytes_ub = mite_bytes_read_from_memory_ub(mite_chan);
@@ -605,7 +605,7 @@ int mite_sync_output_dma(struct mite_channel *mite_chan, 
a4l_subd_t *subd)
 
        /* If the MITE has already transfered more than required, we
           can disable it */
-       if (test_bit(A4L_BUF_EOA_NR, &buf->evt_flags))
+       if (test_bit(A4L_BUF_EOA_NR, &buf->flags))
                writel(CHOR_STOP, 
                       mite_chan->mite->mite_io_addr + 
                       MITE_CHOR(mite_chan->channel));
diff --git a/ksrc/drivers/analogy/national_instruments/mite.h 
b/ksrc/drivers/analogy/national_instruments/mite.h
index 49e4774..97cc2d7 100644
--- a/ksrc/drivers/analogy/national_instruments/mite.h
+++ b/ksrc/drivers/analogy/national_instruments/mite.h
@@ -144,7 +144,7 @@ u32 mite_get_status(struct mite_channel *mite_chan);
 int mite_done(struct mite_channel *mite_chan);
 void mite_prep_dma(struct mite_channel *mite_chan,
                   unsigned int num_device_bits, unsigned int num_memory_bits);
-int mite_buf_change(struct mite_dma_descriptor_ring *ring, a4l_buf_t *buf);
+int mite_buf_change(struct mite_dma_descriptor_ring *ring, a4l_subd_t *subd);
 
 #ifdef CONFIG_DEBUG_MITE
 void mite_print_chsr(unsigned int chsr);


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

Reply via email to