/*
* This single pool easier to manage than one pool per channel
*/
int pl08x_make_LLIs(void)
{
int ret = 0;
/*
* Make a pool of LLI buffers
*/
pd.pool = dma_pool_create(pl08x_amba_driver.drv.name, &pd.dmac->dev,
PL08X_LLI_TSFR_SIZE, PL08X_ALIGN, PL08X_ALLOC);
if (!pd.pool) {
ret = -ENOMEM;
kfree(pd.chanllis);
}
pd.pool_ctr = 0;
return ret;
}
| 注意 |
---|
需要提到一点的是,如果你的驱动在初始化的时候,设置了下图:
中的config寄存器中的ITC位,即终止计数中断,那么就会在每一个LLI传完之后就调用下面的这个pl08x_irq中断函数,如果没有设置ITC,而只是对最有一个LLI的ITC 设置了,那么就是所有的传输完成了,才会调用下面的pl08x_irq中断函数了 |