Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15530262
  • 博文数量: 2005
  • 博客积分: 11986
  • 博客等级: 上将
  • 技术积分: 22535
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-17 13:56
文章分类

全部博文(2005)

文章存档

2014年(2)

2013年(2)

2012年(16)

2011年(66)

2010年(368)

2009年(743)

2008年(491)

2007年(317)

分类: LINUX

2008-07-08 18:16:05

//Leith_20080708
首先使能END_CMD_RES命令中断处理函数pxamci_irq,当命令发送完成之后pxamci_irq进一步检查该命令是否有跟随的数据部分,如果有,那么
将在irq处理函数中使能pxamci_enable_irq(host, DATA_TRAN_DONE);数据完成中断,sd的cmd命令有3中模式,
1)cmd发送完成之后,没有response返回
2)cmd发送完成之后,有response返回
3)cmd发送完成之后,继续有数据需要发送
mmc的host控制器会自动根据具体的cmd,进行自动化处理.

host->dma = pxa_request_dma(DRIVER_NAME, DMA_PRIO_LOW,
                    pxamci_dma_irq, host);
将获取一个空闲的DMA通道(pxa有32个DMA通道可以使用)
static void pxamci_dma_irq(int dma, void *devid)
{
    ...
    if (dcsr & DCSR_ENDINTR) {
        writel(BUF_PART_FULL, host->base + MMC_PRTBUF);//这里将使MMC的data中断使能,触发pxamci_irq的DATA_TRAN_DONE中断
    ...
}

mmc_request=>wake_up_process(mq->thread);=>mmc_queue_thread()=>mq->issue_fn(mq, req);
=>md->queue.issue_fn = mmc_blk_issue_rq;执行真正的命令发送
=>mmc_wait_for_req()等待mrq->done被调用.


mmc_wait_for_cmd将命令发送出去,并且等待起发送完成,如果命令跟随数据,那么同样等待直到数据发送完毕=>mmc_wait_for_req


mmc_wait_for_req=>
mmc_start_request=>host->ops->request(host, mrq);启动,然后等待
wait_for_completion(&complete);

所以mmc_wait_for_cmd和mmc_wait_for_req是提交数据给sd控制器的被其他函数引用的函数.

阅读(4203) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~