Lines Matching refs:mq
31 struct mmc_queue *mq = q->queuedata; in mmc_prep_request() local
41 if (mq && (mmc_card_removed(mq->card) || mmc_access_rpmb(mq))) in mmc_prep_request()
51 struct mmc_queue *mq = d; in mmc_queue_thread() local
52 struct request_queue *q = mq->queue; in mmc_queue_thread()
56 down(&mq->thread_sem); in mmc_queue_thread()
65 mq->mqrq_cur->req = req; in mmc_queue_thread()
68 if (req || mq->mqrq_prev->req) { in mmc_queue_thread()
71 mq->issue_fn(mq, req); in mmc_queue_thread()
72 if (mq->flags & MMC_QUEUE_NEW_REQUEST) { in mmc_queue_thread()
73 mq->flags &= ~MMC_QUEUE_NEW_REQUEST; in mmc_queue_thread()
85 mq->mqrq_cur->req = NULL; in mmc_queue_thread()
87 mq->mqrq_prev->brq.mrq.data = NULL; in mmc_queue_thread()
88 mq->mqrq_prev->req = NULL; in mmc_queue_thread()
89 tmp = mq->mqrq_prev; in mmc_queue_thread()
90 mq->mqrq_prev = mq->mqrq_cur; in mmc_queue_thread()
91 mq->mqrq_cur = tmp; in mmc_queue_thread()
97 up(&mq->thread_sem); in mmc_queue_thread()
99 down(&mq->thread_sem); in mmc_queue_thread()
102 up(&mq->thread_sem); in mmc_queue_thread()
115 struct mmc_queue *mq = q->queuedata; in mmc_request_fn() local
120 if (!mq) { in mmc_request_fn()
128 cntx = &mq->card->host->context_info; in mmc_request_fn()
129 if (!mq->mqrq_cur->req && mq->mqrq_prev->req) { in mmc_request_fn()
141 } else if (!mq->mqrq_cur->req && !mq->mqrq_prev->req) in mmc_request_fn()
142 wake_up_process(mq->thread); in mmc_request_fn()
190 int mmc_init_queue(struct mmc_queue *mq, struct mmc_card *card, in mmc_init_queue() argument
196 struct mmc_queue_req *mqrq_cur = &mq->mqrq[0]; in mmc_init_queue()
197 struct mmc_queue_req *mqrq_prev = &mq->mqrq[1]; in mmc_init_queue()
202 mq->card = card; in mmc_init_queue()
203 mq->queue = blk_init_queue(mmc_request_fn, lock); in mmc_init_queue()
204 if (!mq->queue) in mmc_init_queue()
207 mq->mqrq_cur = mqrq_cur; in mmc_init_queue()
208 mq->mqrq_prev = mqrq_prev; in mmc_init_queue()
209 mq->queue->queuedata = mq; in mmc_init_queue()
211 blk_queue_prep_rq(mq->queue, mmc_prep_request); in mmc_init_queue()
212 queue_flag_set_unlocked(QUEUE_FLAG_NONROT, mq->queue); in mmc_init_queue()
213 queue_flag_clear_unlocked(QUEUE_FLAG_ADD_RANDOM, mq->queue); in mmc_init_queue()
215 mmc_queue_setup_discard(mq->queue, card); in mmc_init_queue()
248 blk_queue_bounce_limit(mq->queue, BLK_BOUNCE_ANY); in mmc_init_queue()
249 blk_queue_max_hw_sectors(mq->queue, bouncesz / 512); in mmc_init_queue()
250 blk_queue_max_segments(mq->queue, bouncesz / 512); in mmc_init_queue()
251 blk_queue_max_segment_size(mq->queue, bouncesz); in mmc_init_queue()
275 blk_queue_bounce_limit(mq->queue, limit); in mmc_init_queue()
276 blk_queue_max_hw_sectors(mq->queue, in mmc_init_queue()
278 blk_queue_max_segments(mq->queue, host->max_segs); in mmc_init_queue()
279 blk_queue_max_segment_size(mq->queue, host->max_seg_size); in mmc_init_queue()
291 sema_init(&mq->thread_sem, 1); in mmc_init_queue()
293 mq->thread = kthread_run(mmc_queue_thread, mq, "mmcqd/%d%s", in mmc_init_queue()
296 if (IS_ERR(mq->thread)) { in mmc_init_queue()
297 ret = PTR_ERR(mq->thread); in mmc_init_queue()
319 blk_cleanup_queue(mq->queue); in mmc_init_queue()
323 void mmc_cleanup_queue(struct mmc_queue *mq) in mmc_cleanup_queue() argument
325 struct request_queue *q = mq->queue; in mmc_cleanup_queue()
327 struct mmc_queue_req *mqrq_cur = mq->mqrq_cur; in mmc_cleanup_queue()
328 struct mmc_queue_req *mqrq_prev = mq->mqrq_prev; in mmc_cleanup_queue()
331 mmc_queue_resume(mq); in mmc_cleanup_queue()
334 kthread_stop(mq->thread); in mmc_cleanup_queue()
360 mq->card = NULL; in mmc_cleanup_queue()
364 int mmc_packed_init(struct mmc_queue *mq, struct mmc_card *card) in mmc_packed_init() argument
366 struct mmc_queue_req *mqrq_cur = &mq->mqrq[0]; in mmc_packed_init()
367 struct mmc_queue_req *mqrq_prev = &mq->mqrq[1]; in mmc_packed_init()
396 void mmc_packed_clean(struct mmc_queue *mq) in mmc_packed_clean() argument
398 struct mmc_queue_req *mqrq_cur = &mq->mqrq[0]; in mmc_packed_clean()
399 struct mmc_queue_req *mqrq_prev = &mq->mqrq[1]; in mmc_packed_clean()
415 void mmc_queue_suspend(struct mmc_queue *mq) in mmc_queue_suspend() argument
417 struct request_queue *q = mq->queue; in mmc_queue_suspend()
420 if (!(mq->flags & MMC_QUEUE_SUSPENDED)) { in mmc_queue_suspend()
421 mq->flags |= MMC_QUEUE_SUSPENDED; in mmc_queue_suspend()
427 down(&mq->thread_sem); in mmc_queue_suspend()
435 void mmc_queue_resume(struct mmc_queue *mq) in mmc_queue_resume() argument
437 struct request_queue *q = mq->queue; in mmc_queue_resume()
440 if (mq->flags & MMC_QUEUE_SUSPENDED) { in mmc_queue_resume()
441 mq->flags &= ~MMC_QUEUE_SUSPENDED; in mmc_queue_resume()
443 up(&mq->thread_sem); in mmc_queue_resume()
451 static unsigned int mmc_queue_packed_map_sg(struct mmc_queue *mq, in mmc_queue_packed_map_sg() argument
461 unsigned int hdr_sz = mmc_large_sector(mq->card) ? 4096 : 512; in mmc_queue_packed_map_sg()
462 unsigned int max_seg_sz = queue_max_segment_size(mq->queue); in mmc_queue_packed_map_sg()
478 sg_len += blk_rq_map_sg(mq->queue, req, __sg); in mmc_queue_packed_map_sg()
489 unsigned int mmc_queue_map_sg(struct mmc_queue *mq, struct mmc_queue_req *mqrq) in mmc_queue_map_sg() argument
501 return mmc_queue_packed_map_sg(mq, mqrq->packed, in mmc_queue_map_sg()
504 return blk_rq_map_sg(mq->queue, mqrq->req, mqrq->sg); in mmc_queue_map_sg()
510 sg_len = mmc_queue_packed_map_sg(mq, mqrq->packed, in mmc_queue_map_sg()
513 sg_len = blk_rq_map_sg(mq->queue, mqrq->req, mqrq->bounce_sg); in mmc_queue_map_sg()