Lines Matching defs:cmdq

228 				    struct nitrox_cmdq *cmdq)
232 spin_lock_bh(&cmdq->backlog_qlock);
233 list_add_tail(&sr->backlog, &cmdq->backlog_head);
234 atomic_inc(&cmdq->backlog_count);
236 spin_unlock_bh(&cmdq->backlog_qlock);
240 struct nitrox_cmdq *cmdq)
244 spin_lock_bh(&cmdq->resp_qlock);
245 list_add_tail(&sr->response, &cmdq->response_head);
246 spin_unlock_bh(&cmdq->resp_qlock);
250 struct nitrox_cmdq *cmdq)
252 spin_lock_bh(&cmdq->resp_qlock);
254 spin_unlock_bh(&cmdq->resp_qlock);
258 get_first_response_entry(struct nitrox_cmdq *cmdq)
260 return list_first_entry_or_null(&cmdq->response_head,
264 static inline bool cmdq_full(struct nitrox_cmdq *cmdq, int qlen)
266 if (atomic_inc_return(&cmdq->pending_count) > qlen) {
267 atomic_dec(&cmdq->pending_count);
285 struct nitrox_cmdq *cmdq)
291 spin_lock_bh(&cmdq->cmd_qlock);
293 idx = cmdq->write_idx;
295 ent = cmdq->base + (idx * cmdq->instr_size);
296 memcpy(ent, &sr->instr, cmdq->instr_size);
299 response_list_add(sr, cmdq);
305 writeq(1, cmdq->dbell_csr_addr);
307 cmdq->write_idx = incr_index(idx, 1, ndev->qlen);
309 spin_unlock_bh(&cmdq->cmd_qlock);
315 static int post_backlog_cmds(struct nitrox_cmdq *cmdq)
317 struct nitrox_device *ndev = cmdq->ndev;
321 if (!atomic_read(&cmdq->backlog_count))
324 spin_lock_bh(&cmdq->backlog_qlock);
326 list_for_each_entry_safe(sr, tmp, &cmdq->backlog_head, backlog) {
328 if (unlikely(cmdq_full(cmdq, ndev->qlen))) {
334 atomic_dec(&cmdq->backlog_count);
339 post_se_instr(sr, cmdq);
341 spin_unlock_bh(&cmdq->backlog_qlock);
348 struct nitrox_cmdq *cmdq = sr->cmdq;
352 post_backlog_cmds(cmdq);
354 if (unlikely(cmdq_full(cmdq, ndev->qlen))) {
361 backlog_list_add(sr, cmdq);
364 post_se_instr(sr, cmdq);
422 sr->cmdq = &ndev->pkt_inq[qno];
502 struct nitrox_cmdq *cmdq;
504 cmdq = container_of(work, struct nitrox_cmdq, backlog_qflush);
505 post_backlog_cmds(cmdq);
533 static void process_response_list(struct nitrox_cmdq *cmdq)
535 struct nitrox_device *ndev = cmdq->ndev;
542 budget = atomic_read(&cmdq->pending_count);
545 sr = get_first_response_entry(cmdq);
561 atomic_dec(&cmdq->pending_count);
566 response_list_del(sr, cmdq);
585 struct nitrox_cmdq *cmdq = qvec->cmdq;
589 slc_cnts.value = readq(cmdq->compl_cnt_csr_addr);
593 process_response_list(cmdq);
599 writeq(slc_cnts.value, cmdq->compl_cnt_csr_addr);
601 if (atomic_read(&cmdq->backlog_count))
602 schedule_work(&cmdq->backlog_qflush);