Lines Matching defs:sw_desc
516 static void set_updater_desc(struct pxad_desc_sw *sw_desc,
520 sw_desc->hw_desc[sw_desc->nb_desc - 1];
521 dma_addr_t dma = sw_desc->hw_desc[sw_desc->nb_desc - 2]->ddadr;
530 if (sw_desc->cyclic)
531 sw_desc->hw_desc[sw_desc->nb_desc - 2]->ddadr = sw_desc->first;
536 struct pxad_desc_sw *sw_desc = to_pxad_sw_desc(vd);
538 sw_desc->hw_desc[sw_desc->nb_desc - 1];
723 struct pxad_desc_sw *sw_desc = to_pxad_sw_desc(vd);
725 for (i = sw_desc->nb_desc - 1; i >= 0; i--) {
727 dma = sw_desc->hw_desc[i - 1]->ddadr;
729 dma = sw_desc->first;
730 dma_pool_free(sw_desc->desc_pool,
731 sw_desc->hw_desc[i], dma);
733 sw_desc->nb_desc = 0;
734 kfree(sw_desc);
740 struct pxad_desc_sw *sw_desc;
744 sw_desc = kzalloc(struct_size(sw_desc, hw_desc, nb_hw_desc),
746 if (!sw_desc)
748 sw_desc->desc_pool = chan->desc_pool;
751 sw_desc->hw_desc[i] = dma_pool_alloc(sw_desc->desc_pool,
753 if (!sw_desc->hw_desc[i]) {
756 __func__, i, sw_desc->desc_pool);
761 sw_desc->first = dma;
763 sw_desc->hw_desc[i - 1]->ddadr = dma;
764 sw_desc->nb_desc++;
767 return sw_desc;
769 pxad_free_desc(&sw_desc->vd);
919 struct pxad_desc_sw *sw_desc;
935 sw_desc = pxad_alloc_desc(chan, nb_desc + 1);
936 if (!sw_desc)
938 sw_desc->len = len;
942 sw_desc->misaligned = true;
946 hw_desc = sw_desc->hw_desc[i++];
955 set_updater_desc(sw_desc, flags);
957 return pxad_tx_prep(&chan->vc, &sw_desc->vd, flags);
966 struct pxad_desc_sw *sw_desc;
982 sw_desc = pxad_alloc_desc(chan, nb_desc + 1);
983 if (!sw_desc)
989 sw_desc->len += avail;
994 sw_desc->misaligned = true;
996 sw_desc->hw_desc[j]->dcmd =
998 sw_desc->hw_desc[j]->dsadr = dsadr ? dsadr : dma;
999 sw_desc->hw_desc[j++]->dtadr = dtadr ? dtadr : dma;
1005 set_updater_desc(sw_desc, flags);
1007 return pxad_tx_prep(&chan->vc, &sw_desc->vd, flags);
1016 struct pxad_desc_sw *sw_desc;
1042 sw_desc = pxad_alloc_desc(chan, nb_desc + 1);
1043 if (!sw_desc)
1045 sw_desc->cyclic = true;
1046 sw_desc->len = len;
1048 phw_desc = sw_desc->hw_desc;
1058 set_updater_desc(sw_desc, flags);
1060 return pxad_tx_prep(&chan->vc, &sw_desc->vd, flags);
1115 struct pxad_desc_sw *sw_desc = NULL;
1135 sw_desc = to_pxad_sw_desc(vd);
1136 if (sw_desc->hw_desc[0]->dcmd & PXA_DCMD_INCSRCADDR)
1151 for (i = 0; i < sw_desc->nb_desc - 1; i++) {
1152 hw_desc = sw_desc->hw_desc[i];
1153 if (sw_desc->hw_desc[0]->dcmd & PXA_DCMD_INCSRCADDR)
1177 residue = sw_desc->len;
1182 "%s(): txd %p[%x] sw_desc=%p: %d\n",
1183 __func__, vd, cookie, sw_desc, residue);