Lines Matching refs:cmdq
381 struct nitrox_cmdq *cmdq) in backlog_list_add() argument
385 spin_lock_bh(&cmdq->backlog_lock); in backlog_list_add()
386 list_add_tail(&sr->backlog, &cmdq->backlog_head); in backlog_list_add()
387 atomic_inc(&cmdq->backlog_count); in backlog_list_add()
389 spin_unlock_bh(&cmdq->backlog_lock); in backlog_list_add()
393 struct nitrox_cmdq *cmdq) in response_list_add() argument
397 spin_lock_bh(&cmdq->response_lock); in response_list_add()
398 list_add_tail(&sr->response, &cmdq->response_head); in response_list_add()
399 spin_unlock_bh(&cmdq->response_lock); in response_list_add()
403 struct nitrox_cmdq *cmdq) in response_list_del() argument
405 spin_lock_bh(&cmdq->response_lock); in response_list_del()
407 spin_unlock_bh(&cmdq->response_lock); in response_list_del()
411 get_first_response_entry(struct nitrox_cmdq *cmdq) in get_first_response_entry() argument
413 return list_first_entry_or_null(&cmdq->response_head, in get_first_response_entry()
417 static inline bool cmdq_full(struct nitrox_cmdq *cmdq, int qlen) in cmdq_full() argument
419 if (atomic_inc_return(&cmdq->pending_count) > qlen) { in cmdq_full()
420 atomic_dec(&cmdq->pending_count); in cmdq_full()
436 struct nitrox_cmdq *cmdq) in post_se_instr() argument
442 spin_lock_bh(&cmdq->cmdq_lock); in post_se_instr()
444 idx = cmdq->write_idx; in post_se_instr()
446 ent = cmdq->head + (idx * cmdq->instr_size); in post_se_instr()
447 memcpy(ent, &sr->instr, cmdq->instr_size); in post_se_instr()
450 response_list_add(sr, cmdq); in post_se_instr()
456 writeq(1, cmdq->dbell_csr_addr); in post_se_instr()
460 cmdq->write_idx = incr_index(idx, 1, ndev->qlen); in post_se_instr()
462 spin_unlock_bh(&cmdq->cmdq_lock); in post_se_instr()
465 static int post_backlog_cmds(struct nitrox_cmdq *cmdq) in post_backlog_cmds() argument
467 struct nitrox_device *ndev = cmdq->ndev; in post_backlog_cmds()
471 if (!atomic_read(&cmdq->backlog_count)) in post_backlog_cmds()
474 spin_lock_bh(&cmdq->backlog_lock); in post_backlog_cmds()
476 list_for_each_entry_safe(sr, tmp, &cmdq->backlog_head, backlog) { in post_backlog_cmds()
480 if (unlikely(cmdq_full(cmdq, ndev->qlen))) { in post_backlog_cmds()
486 atomic_dec(&cmdq->backlog_count); in post_backlog_cmds()
492 post_se_instr(sr, cmdq); in post_backlog_cmds()
497 spin_unlock_bh(&cmdq->backlog_lock); in post_backlog_cmds()
504 struct nitrox_cmdq *cmdq = sr->cmdq; in nitrox_enqueue_request() local
508 post_backlog_cmds(cmdq); in nitrox_enqueue_request()
510 if (unlikely(cmdq_full(cmdq, ndev->qlen))) { in nitrox_enqueue_request()
514 backlog_list_add(sr, cmdq); in nitrox_enqueue_request()
517 post_se_instr(sr, cmdq); in nitrox_enqueue_request()
575 sr->cmdq = &ndev->pkt_cmdqs[qno]; in nitrox_process_se_request()
655 struct nitrox_cmdq *cmdq; in backlog_qflush_work() local
657 cmdq = container_of(work, struct nitrox_cmdq, backlog_qflush); in backlog_qflush_work()
658 post_backlog_cmds(cmdq); in backlog_qflush_work()
668 static void process_response_list(struct nitrox_cmdq *cmdq) in process_response_list() argument
670 struct nitrox_device *ndev = cmdq->ndev; in process_response_list()
677 budget = atomic_read(&cmdq->pending_count); in process_response_list()
680 sr = get_first_response_entry(cmdq); in process_response_list()
696 atomic_dec(&cmdq->pending_count); in process_response_list()
700 response_list_del(sr, cmdq); in process_response_list()
722 struct nitrox_cmdq *cmdq = bh->cmdq; in pkt_slc_resp_handler() local
730 process_response_list(cmdq); in pkt_slc_resp_handler()
740 if (atomic_read(&cmdq->backlog_count)) in pkt_slc_resp_handler()
741 schedule_work(&cmdq->backlog_qflush); in pkt_slc_resp_handler()