Module: xenomai-2.5 Branch: master Commit: 5ffbfff63c660ab048c560b9695b110d6471478e URL: http://git.xenomai.org/?p=xenomai-2.5.git;a=commit;h=5ffbfff63c660ab048c560b9695b110d6471478e
Author: Alexis Berlemont <alexis.berlem...@gmail.com> Date: Mon May 17 23:31:20 2010 +0200 analogy: replace transfer setup functions with buffer setup ones (broken) --- ksrc/drivers/analogy/buffer.c | 3 + ksrc/drivers/analogy/command.c | 19 +++---- ksrc/drivers/analogy/instruction.c | 2 +- ksrc/drivers/analogy/transfer.c | 98 +++-------------------------------- 4 files changed, 22 insertions(+), 100 deletions(-) diff --git a/ksrc/drivers/analogy/buffer.c b/ksrc/drivers/analogy/buffer.c index a27a1d6..92f1f4e 100644 --- a/ksrc/drivers/analogy/buffer.c +++ b/ksrc/drivers/analogy/buffer.c @@ -145,6 +145,9 @@ int a4l_setup_buffer(a4l_cxt_t *cxt, a4l_cmd_t *cmd) } buf_desc->end_count *= cmd->stop_arg; } + + __a4l_dbg(1, core_dbg, + "a4l_setup_buffer: end_count=%lu\n", buf_desc->end_count); return 0; } diff --git a/ksrc/drivers/analogy/command.c b/ksrc/drivers/analogy/command.c index a6c1dec..b300d9a 100644 --- a/ksrc/drivers/analogy/command.c +++ b/ksrc/drivers/analogy/command.c @@ -299,7 +299,8 @@ int a4l_ioctl_cmd(a4l_cxt_t * cxt, void *arg) { int ret = 0, simul_flag = 0; a4l_cmd_t *cmd_desc = NULL; - a4l_dev_t *dev = a4l_get_dev(cxt); + 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)); @@ -344,11 +345,11 @@ int a4l_ioctl_cmd(a4l_cxt_t * cxt, void *arg) __a4l_dbg(1, core_dbg, "a4l_ioctl_cmd: 1st cmd checks passed\n"); + subd = dev->transfer.subds[cmd_desc->idx_subd]; + /* Tests the command with the cmdtest function */ - if (dev->transfer.subds[cmd_desc->idx_subd]->do_cmdtest != NULL) - ret = dev->transfer.subds[cmd_desc->idx_subd]-> - do_cmdtest(dev->transfer.subds[cmd_desc->idx_subd], - cmd_desc); + if (subd->do_cmdtest != NULL) + ret = subd->do_cmdtest(subd, cmd_desc); if (ret != 0) { __a4l_err("a4l_ioctl_cmd: driver's cmd_test failed\n"); goto out_ioctl_cmd; @@ -363,17 +364,15 @@ int a4l_ioctl_cmd(a4l_cxt_t * cxt, void *arg) } /* Sets the concerned subdevice as busy */ - ret = a4l_reserve_transfer(cxt, cmd_desc->idx_subd); + ret = a4l_reserve_subd(subd); if (ret < 0) goto out_ioctl_cmd; /* Gets the transfer system ready */ - a4l_init_transfer(cxt, cmd_desc); + a4l_setup_buffer(cxt, cmd_desc); /* Eventually launches the command */ - ret = dev->transfer.subds[cmd_desc->idx_subd]-> - do_cmd(dev->transfer.subds[cmd_desc->idx_subd], - cmd_desc); + ret = subd->do_cmd(subd, cmd_desc); if (ret != 0) { a4l_cancel_transfer(cxt, cmd_desc->idx_subd); diff --git a/ksrc/drivers/analogy/instruction.c b/ksrc/drivers/analogy/instruction.c index 64c7a04..941fa69 100644 --- a/ksrc/drivers/analogy/instruction.c +++ b/ksrc/drivers/analogy/instruction.c @@ -266,7 +266,7 @@ int a4l_do_insn(a4l_cxt_t * cxt, a4l_kinsn_t * dsc) /* Prevents the subdevice from being used during the following operations */ - ret = a4l_reserve_transfer(cxt, dsc->idx_subd); + ret = a4l_reserve_subd(subd); if (ret < 0) goto out_do_insn; diff --git a/ksrc/drivers/analogy/transfer.c b/ksrc/drivers/analogy/transfer.c index b1e511d..9fc279a 100644 --- a/ksrc/drivers/analogy/transfer.c +++ b/ksrc/drivers/analogy/transfer.c @@ -39,10 +39,6 @@ int a4l_precleanup_transfer(a4l_cxt_t * cxt) a4l_trf_t *tsf; int i, err = 0; - __a4l_dbg(1, core_dbg, - "a4l_precleanup_transfer: minor=%d\n", - a4l_get_minor(cxt)); - dev = a4l_get_dev(cxt); tsf = &dev->transfer; @@ -55,6 +51,10 @@ int a4l_precleanup_transfer(a4l_cxt_t * cxt) for (i = 0; i < tsf->nb_subd; i++) { unsigned long *status = &tsf->subds[i]->status; + __a4l_dbg(1, core_dbg, + "a4l_precleanup_transfer: " + "subd[%d]->status=0x%08x\n", *status); + if (test_and_set_bit(A4L_SUBD_BUSY, status)) { __a4l_err("a4l_precleanup_transfer: " "device busy, acquisition occuring\n"); @@ -70,7 +70,7 @@ out_error: for (i = 0; i < tsf->nb_subd; i++) { unsigned long *status = &tsf->subds[i]->status; - if (test_bit(A4L_TSF_CLEAN, status)){ + if (test_bit(A4L_SUBD_CLEAN, status)){ clear_bit(A4L_SUBD_BUSY, status); clear_bit(A4L_SUBD_CLEAN, status); } @@ -85,10 +85,6 @@ int a4l_cleanup_transfer(a4l_cxt_t * cxt) a4l_trf_t *tsf; int i; - __a4l_dbg(1, core_dbg, - "a4l_cleanup_transfer: minor=%d\n", - a4l_get_minor(cxt)); - dev = a4l_get_dev(cxt); tsf = &dev->transfer; @@ -105,10 +101,6 @@ void a4l_presetup_transfer(a4l_cxt_t *cxt) a4l_dev_t *dev = NULL; a4l_trf_t *tsf; - __a4l_dbg(1, core_dbg, - "a4l_presetup_transfer: minor=%d\n", - a4l_get_minor(cxt)); - dev = a4l_get_dev(cxt); tsf = &dev->transfer; @@ -124,14 +116,9 @@ int a4l_setup_transfer(a4l_cxt_t * cxt) { a4l_dev_t *dev = NULL; a4l_trf_t *tsf; - a4l_subd_t *subd; struct list_head *this; int i = 0, ret = 0; - __a4l_dbg(1, core_dbg, - "a4l_setup_transfer: minor=%d\n", - a4l_get_minor(cxt)); - dev = a4l_get_dev(cxt); tsf = &dev->transfer; @@ -141,6 +128,9 @@ int a4l_setup_transfer(a4l_cxt_t * cxt) tsf->nb_subd++; } + __a4l_dbg(1, core_dbg, + "a4l_setup_transfer: nb_subd=%d\n", tsf->nb_subd); + /* Allocates a suitable tab for the subdevices */ tsf->subds = rtdm_malloc(tsf->nb_subd * sizeof(a4l_subd_t *)); if (tsf->subds == NULL) { @@ -151,15 +141,7 @@ int a4l_setup_transfer(a4l_cxt_t * cxt) /* Recovers the subdevices pointers */ list_for_each(this, &dev->subdvsq) { - subd = list_entry(this, a4l_subd_t, list); - - if (subd->flags & A4L_SUBD_AI) - tsf->idx_read_subd = i; - - if (subd->flags & A4L_SUBD_AO) - tsf->idx_write_subd = i; - - tsf->subds[i++] = subd; + tsf->subds[i++] = list_entry(this, a4l_subd_t, list); } out_setup_tsf: @@ -170,68 +152,6 @@ out_setup_tsf: return ret; } -int a4l_reserve_transfer(a4l_cxt_t * cxt, int idx_subd) -{ - a4l_dev_t *dev = a4l_get_dev(cxt); - - __a4l_dbg(1, core_dbg, - "a4l_reserve_transfer: minor=%d idx=%d\n", - a4l_get_minor(cxt), idx_subd); - - if (test_and_set_bit(A4L_TSF_BUSY, - &(dev->transfer.status[idx_subd]))) { - __a4l_err("a4l_reserve_transfer: device currently busy\n"); - return -EBUSY; - } - - return 0; -} - -int a4l_init_transfer(a4l_cxt_t * cxt, a4l_cmd_t * cmd) -{ - int i; - a4l_dev_t *dev = a4l_get_dev(cxt); - - __a4l_dbg(1, core_dbg, - "a4l_init_transfer: minor=%d idx=%d\n", - a4l_get_minor(cxt), cmd->idx_subd); - - /* Checks if the transfer system has to work in bulk mode */ - if (cmd->flags & A4L_CMD_BULK) - set_bit(A4L_TSF_BULK, - &(dev->transfer.status[cmd->idx_subd])); - - /* Sets the working command */ - dev->transfer.bufs[cmd->idx_subd]->cur_cmd = cmd; - - /* Initializes the counts */ - dev->transfer.bufs[cmd->idx_subd]->end_count = 0; - dev->transfer.bufs[cmd->idx_subd]->prd_count = 0; - dev->transfer.bufs[cmd->idx_subd]->cns_count = 0; - dev->transfer.bufs[cmd->idx_subd]->tmp_count = 0; - dev->transfer.bufs[cmd->idx_subd]->mng_count = 0; - - /* Flush pending events */ - dev->transfer.bufs[cmd->idx_subd]->evt_flags = 0; - a4l_flush_sync(&dev->transfer.bufs[cmd->idx_subd]->sync); - - /* 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(dev->transfer. - subds[cmd->idx_subd], - CR_CHAN(cmd->chan_descs[i])); - dev->transfer.bufs[cmd->idx_subd]->end_count += - chft->nb_bits / 8; - } - dev->transfer.bufs[cmd->idx_subd]->end_count *= cmd->stop_arg; - } - - /* Always returning 0 is here useless... for the moment */ - return 0; -} - int a4l_cancel_transfer(a4l_cxt_t * cxt, int idx_subd) { int ret = 0; _______________________________________________ Xenomai-git mailing list Xenomai-git@gna.org https://mail.gna.org/listinfo/xenomai-git