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()
64 mq->mqrq_cur->req = req; in mmc_queue_thread()
67 if (req || mq->mqrq_prev->req) { in mmc_queue_thread()
70 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 swap(mq->mqrq_prev, mq->mqrq_cur); in mmc_queue_thread()
95 up(&mq->thread_sem); in mmc_queue_thread()
97 down(&mq->thread_sem); in mmc_queue_thread()
100 up(&mq->thread_sem); in mmc_queue_thread()
113 struct mmc_queue *mq = q->queuedata; in mmc_request_fn() local
118 if (!mq) { in mmc_request_fn()
126 cntx = &mq->card->host->context_info; in mmc_request_fn()
127 if (!mq->mqrq_cur->req && mq->mqrq_prev->req) { in mmc_request_fn()
139 } else if (!mq->mqrq_cur->req && !mq->mqrq_prev->req) in mmc_request_fn()
140 wake_up_process(mq->thread); in mmc_request_fn()
188 int mmc_init_queue(struct mmc_queue *mq, struct mmc_card *card, in mmc_init_queue() argument
194 struct mmc_queue_req *mqrq_cur = &mq->mqrq[0]; in mmc_init_queue()
195 struct mmc_queue_req *mqrq_prev = &mq->mqrq[1]; in mmc_init_queue()
200 mq->card = card; in mmc_init_queue()
201 mq->queue = blk_init_queue(mmc_request_fn, lock); in mmc_init_queue()
202 if (!mq->queue) in mmc_init_queue()
205 mq->mqrq_cur = mqrq_cur; in mmc_init_queue()
206 mq->mqrq_prev = mqrq_prev; in mmc_init_queue()
207 mq->queue->queuedata = mq; in mmc_init_queue()
209 blk_queue_prep_rq(mq->queue, mmc_prep_request); in mmc_init_queue()
210 queue_flag_set_unlocked(QUEUE_FLAG_NONROT, mq->queue); in mmc_init_queue()
211 queue_flag_clear_unlocked(QUEUE_FLAG_ADD_RANDOM, mq->queue); in mmc_init_queue()
213 mmc_queue_setup_discard(mq->queue, card); in mmc_init_queue()
246 blk_queue_bounce_limit(mq->queue, BLK_BOUNCE_ANY); in mmc_init_queue()
247 blk_queue_max_hw_sectors(mq->queue, bouncesz / 512); in mmc_init_queue()
248 blk_queue_max_segments(mq->queue, bouncesz / 512); in mmc_init_queue()
249 blk_queue_max_segment_size(mq->queue, bouncesz); in mmc_init_queue()
273 blk_queue_bounce_limit(mq->queue, limit); in mmc_init_queue()
274 blk_queue_max_hw_sectors(mq->queue, in mmc_init_queue()
276 blk_queue_max_segments(mq->queue, host->max_segs); in mmc_init_queue()
277 blk_queue_max_segment_size(mq->queue, host->max_seg_size); in mmc_init_queue()
289 sema_init(&mq->thread_sem, 1); in mmc_init_queue()
291 mq->thread = kthread_run(mmc_queue_thread, mq, "mmcqd/%d%s", in mmc_init_queue()
294 if (IS_ERR(mq->thread)) { in mmc_init_queue()
295 ret = PTR_ERR(mq->thread); in mmc_init_queue()
317 blk_cleanup_queue(mq->queue); in mmc_init_queue()
321 void mmc_cleanup_queue(struct mmc_queue *mq) in mmc_cleanup_queue() argument
323 struct request_queue *q = mq->queue; in mmc_cleanup_queue()
325 struct mmc_queue_req *mqrq_cur = mq->mqrq_cur; in mmc_cleanup_queue()
326 struct mmc_queue_req *mqrq_prev = mq->mqrq_prev; in mmc_cleanup_queue()
329 mmc_queue_resume(mq); in mmc_cleanup_queue()
332 kthread_stop(mq->thread); in mmc_cleanup_queue()
358 mq->card = NULL; in mmc_cleanup_queue()
362 int mmc_packed_init(struct mmc_queue *mq, struct mmc_card *card) in mmc_packed_init() argument
364 struct mmc_queue_req *mqrq_cur = &mq->mqrq[0]; in mmc_packed_init()
365 struct mmc_queue_req *mqrq_prev = &mq->mqrq[1]; in mmc_packed_init()
394 void mmc_packed_clean(struct mmc_queue *mq) in mmc_packed_clean() argument
396 struct mmc_queue_req *mqrq_cur = &mq->mqrq[0]; in mmc_packed_clean()
397 struct mmc_queue_req *mqrq_prev = &mq->mqrq[1]; in mmc_packed_clean()
413 void mmc_queue_suspend(struct mmc_queue *mq) in mmc_queue_suspend() argument
415 struct request_queue *q = mq->queue; in mmc_queue_suspend()
418 if (!(mq->flags & MMC_QUEUE_SUSPENDED)) { in mmc_queue_suspend()
419 mq->flags |= MMC_QUEUE_SUSPENDED; in mmc_queue_suspend()
425 down(&mq->thread_sem); in mmc_queue_suspend()
433 void mmc_queue_resume(struct mmc_queue *mq) in mmc_queue_resume() argument
435 struct request_queue *q = mq->queue; in mmc_queue_resume()
438 if (mq->flags & MMC_QUEUE_SUSPENDED) { in mmc_queue_resume()
439 mq->flags &= ~MMC_QUEUE_SUSPENDED; in mmc_queue_resume()
441 up(&mq->thread_sem); in mmc_queue_resume()
449 static unsigned int mmc_queue_packed_map_sg(struct mmc_queue *mq, in mmc_queue_packed_map_sg() argument
459 unsigned int hdr_sz = mmc_large_sector(mq->card) ? 4096 : 512; in mmc_queue_packed_map_sg()
460 unsigned int max_seg_sz = queue_max_segment_size(mq->queue); in mmc_queue_packed_map_sg()
476 sg_len += blk_rq_map_sg(mq->queue, req, __sg); in mmc_queue_packed_map_sg()
487 unsigned int mmc_queue_map_sg(struct mmc_queue *mq, struct mmc_queue_req *mqrq) in mmc_queue_map_sg() argument
499 return mmc_queue_packed_map_sg(mq, mqrq->packed, in mmc_queue_map_sg()
502 return blk_rq_map_sg(mq->queue, mqrq->req, mqrq->sg); in mmc_queue_map_sg()
508 sg_len = mmc_queue_packed_map_sg(mq, mqrq->packed, in mmc_queue_map_sg()
511 sg_len = blk_rq_map_sg(mq->queue, mqrq->req, mqrq->bounce_sg); in mmc_queue_map_sg()