/** * sw_dma_dump_chan - dump dma chain * @dma_hdl: dma handle */ void sw_dma_dump_chan(dma_hdl_t dma_hdl) { dma_channel_t *pchan = (dma_channel_t *)dma_hdl; unsigned long flags = 0; BUG_ON(unlikely(!dma_handle_is_valid(dma_hdl))); DMA_CHAN_LOCK(&pchan->lock, flags); dma_dump_chain(pchan); DMA_CHAN_UNLOCK(&pchan->lock, flags); }
/** * __chan_is_free - check if channel is free * @pchan: dma handle * * return true if channel is free, false if not * * NOTE: can only be called in sw_dma_request recently, becase * should be locked */ static bool __chan_is_free(dma_channel_t *pchan) { if(0 == pchan->used && 0 == pchan->owner[0] //&& CHAN_IRQ_NO == pchan->irq_spt /* maybe not use dma irq? */ && NULL == pchan->hd_cb.func && NULL == pchan->fd_cb.func && CHAN_STA_IDLE == pchan->state ) return true; else { dma_dump_chain(pchan); return false; } }
/** * __dma_check_channel_free - check if channel is free * @pchan: dma handle * * return true if channel is free, false if not * * NOTE: can only be called in sw_dma_request recently, becase * should be locked */ static u32 __dma_check_channel_free(dma_channel_t *pchan) { if(0 == pchan->used && 0 == pchan->owner[0] //&& CHAN_IRQ_NO == pchan->irq_spt /* maybe not use dma irq? */ && NULL == pchan->hd_cb.func && NULL == pchan->fd_cb.func && NULL == pchan->qd_cb.func && NULL == pchan->op_cb.func && CHAN_STA_IDLE == STATE_CHAIN(pchan) && DMA_WORK_MODE_INVALID == pchan->work_mode ) return true; else { dma_dump_chain(pchan); return false; } }