コード例 #1
0
ファイル: dma_interface.c プロジェクト: Dzenik/kernel-source
/**
 * 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);
}
コード例 #2
0
ファイル: dma_interface.c プロジェクト: Dzenik/kernel-source
/**
 * __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;
	}
}
コード例 #3
0
/**
 * __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;
	}
}