⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sd_queue.c

📁 linux 2.6下的sd卡驱动
💻 C
字号:

#include <linux/module.h>#include <linux/blkdev.h>

#include "sd.h"

/**
 * mmc_init_queue - initialise a queue structure. * @mq: mmc queue * @card: mmc card to attach this queue * @lock: queue lock * * Initialise a MMC card request queue. */int mmc_init_queue(struct mmc_queue *mq, struct mmc_card *card, spinlock_t *lock){	struct mmc_host *host = card->host;	u64 limit = BLK_BOUNCE_HIGH;	int ret;	if (host->dev->dma_mask && *host->dev->dma_mask)		limit = *host->dev->dma_mask;	mq->card = card;	mq->queue = blk_init_queue(mmc_request, lock);	if (!mq->queue)		return -ENOMEM;	blk_queue_prep_rq(mq->queue, mmc_prep_request);	blk_queue_bounce_limit(mq->queue, limit);	blk_queue_max_sectors(mq->queue, host->max_sectors);	blk_queue_max_phys_segments(mq->queue, host->max_phys_segs);	blk_queue_max_hw_segments(mq->queue, host->max_hw_segs);	blk_queue_max_segment_size(mq->queue, host->max_seg_size);	mq->queue->queuedata = mq;	mq->req = NULL;	mq->sg = kmalloc(sizeof(struct scatterlist) * host->max_phys_segs,			 GFP_KERNEL);	if (!mq->sg) {		ret = -ENOMEM;		goto cleanup;	}	init_completion(&mq->thread_complete);	init_waitqueue_head(&mq->thread_wq);	init_MUTEX(&mq->thread_sem);	ret = kernel_thread(mmc_queue_thread, mq, CLONE_KERNEL);	if (ret >= 0) {		wait_for_completion(&mq->thread_complete);		init_completion(&mq->thread_complete);		ret = 0;		goto out;	} cleanup:	kfree(mq->sg);	mq->sg = NULL;	blk_cleanup_queue(mq->queue); out:	return ret;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -