Lines Matching defs:cmdq

230 				    struct nitrox_cmdq *cmdq)
234 spin_lock_bh(&cmdq->backlog_qlock);
235 list_add_tail(&sr->backlog, &cmdq->backlog_head);
236 atomic_inc(&cmdq->backlog_count);
238 spin_unlock_bh(&cmdq->backlog_qlock);
242 struct nitrox_cmdq *cmdq)
246 spin_lock_bh(&cmdq->resp_qlock);
247 list_add_tail(&sr->response, &cmdq->response_head);
248 spin_unlock_bh(&cmdq->resp_qlock);
252 struct nitrox_cmdq *cmdq)
254 spin_lock_bh(&cmdq->resp_qlock);
256 spin_unlock_bh(&cmdq->resp_qlock);
260 get_first_response_entry(struct nitrox_cmdq *cmdq)
262 return list_first_entry_or_null(&cmdq->response_head,
266 static inline bool cmdq_full(struct nitrox_cmdq *cmdq, int qlen)
268 if (atomic_inc_return(&cmdq->pending_count) > qlen) {
269 atomic_dec(&cmdq->pending_count);
282 * @cmdq: Command queue structure
288 struct nitrox_cmdq *cmdq)
294 spin_lock_bh(&cmdq->cmd_qlock);
296 idx = cmdq->write_idx;
298 ent = cmdq->base + (idx * cmdq->instr_size);
299 memcpy(ent, &sr->instr, cmdq->instr_size);
302 response_list_add(sr, cmdq);
308 writeq(1, cmdq->dbell_csr_addr);
310 cmdq->write_idx = incr_index(idx, 1, ndev->qlen);
312 spin_unlock_bh(&cmdq->cmd_qlock);
318 static int post_backlog_cmds(struct nitrox_cmdq *cmdq)
320 struct nitrox_device *ndev = cmdq->ndev;
324 if (!atomic_read(&cmdq->backlog_count))
327 spin_lock_bh(&cmdq->backlog_qlock);
329 list_for_each_entry_safe(sr, tmp, &cmdq->backlog_head, backlog) {
331 if (unlikely(cmdq_full(cmdq, ndev->qlen))) {
337 atomic_dec(&cmdq->backlog_count);
342 post_se_instr(sr, cmdq);
344 spin_unlock_bh(&cmdq->backlog_qlock);
351 struct nitrox_cmdq *cmdq = sr->cmdq;
355 post_backlog_cmds(cmdq);
357 if (unlikely(cmdq_full(cmdq, ndev->qlen))) {
364 backlog_list_add(sr, cmdq);
367 post_se_instr(sr, cmdq);
427 sr->cmdq = &ndev->pkt_inq[qno];
507 struct nitrox_cmdq *cmdq;
509 cmdq = container_of(work, struct nitrox_cmdq, backlog_qflush);
510 post_backlog_cmds(cmdq);
533 * @cmdq: Command queue structure
537 static void process_response_list(struct nitrox_cmdq *cmdq)
539 struct nitrox_device *ndev = cmdq->ndev;
546 budget = atomic_read(&cmdq->pending_count);
549 sr = get_first_response_entry(cmdq);
565 atomic_dec(&cmdq->pending_count);
570 response_list_del(sr, cmdq);
589 struct nitrox_cmdq *cmdq = qvec->cmdq;
593 slc_cnts.value = readq(cmdq->compl_cnt_csr_addr);
597 process_response_list(cmdq);
603 writeq(slc_cnts.value, cmdq->compl_cnt_csr_addr);
605 if (atomic_read(&cmdq->backlog_count))
606 schedule_work(&cmdq->backlog_qflush);