示例#1
0
void card_cleanup_queue(struct card_queue *cq)
{
	struct request_queue *q = cq->queue;
	unsigned long flags;
	
	card_queue_resume(cq);

	/*should unregister reboot notifier before kthread stop*/
	unregister_reboot_notifier(&cq->nb);

	/* Then terminate our worker thread */
	kthread_stop(cq->thread);

	/* Empty the queue */   
	spin_lock_irqsave(q->queue_lock, flags);
	q->queuedata = NULL;
	blk_start_queue(q);
	spin_unlock_irqrestore(q->queue_lock, flags);
	
 	if (cq->bounce_sg)
 		kfree(cq->bounce_sg);
 	cq->bounce_sg = NULL;
    if (cq->sg)
	kfree(cq->sg);
	cq->sg = NULL;

	//if (cq->bounce_buf)
	//	kfree(cq->bounce_buf);
	cq->bounce_buf = NULL;

	cq->card = NULL;
}
示例#2
0
static int card_blk_resume(struct memory_card *card)
{
	struct card_blk_data *card_data = card_get_drvdata(card);
	struct card_host *host = card->host;
	
	if(card->card_resume)
	{
		card->card_resume(card);
	}
	if(host->card_task_state)
	{
		host->card_task_state = 0;
		if(host->card_task)
			wake_up_process(host->card_task);
	}
	if((host->sdio_task_state)&&((card->card_type == CARD_SDIO)))
	{
		host->sdio_task_state = 0;
		if(host->sdio_irq_thread)
			wake_up_process(host->sdio_irq_thread);
	}
	if (card_data) {
		//mmc_blk_set_blksize(md, card);
		card_queue_resume(&card_data->queue);
	}
	return 0;
}
static int card_blk_resume(struct memory_card *card)
{
	struct card_blk_data *card_data = card_get_drvdata(card);
	struct card_host *host = card->host;
	
	printk("***Entered %s:%s\n", __FILE__,__func__);
	
	printk("Enter %s resume\n",card->name);

	if(card->card_resume)
	{
		card->card_resume(card);
	}
	if(host->card_task_state)
	{
		host->card_task_state = 0;
		if(host->card_task)
			wake_up_process(host->card_task);
	}
	if(host->sdio_task_state)
	{
		host->sdio_task_state = 0;
		if(host->sdio_irq_thread)
			wake_up_process(host->sdio_irq_thread);
	}
	if (card_data) {
		//mmc_blk_set_blksize(md, card);
		card_queue_resume(&card_data->queue);
	}
	return 0;
}