Lines Matching refs:cmdq

39 static void bfa_msgq_cmdq_dbell(struct bfa_msgq_cmdq *cmdq);
40 static void bfa_msgq_cmdq_copy_rsp(struct bfa_msgq_cmdq *cmdq);
51 bfa_fsm_state_decl(cmdq, stopped, struct bfa_msgq_cmdq, enum cmdq_event);
52 bfa_fsm_state_decl(cmdq, init_wait, struct bfa_msgq_cmdq, enum cmdq_event);
53 bfa_fsm_state_decl(cmdq, ready, struct bfa_msgq_cmdq, enum cmdq_event);
54 bfa_fsm_state_decl(cmdq, dbell_wait, struct bfa_msgq_cmdq,
58 cmdq_sm_stopped_entry(struct bfa_msgq_cmdq *cmdq) in cmdq_sm_stopped_entry() argument
62 cmdq->producer_index = 0; in cmdq_sm_stopped_entry()
63 cmdq->consumer_index = 0; in cmdq_sm_stopped_entry()
64 cmdq->flags = 0; in cmdq_sm_stopped_entry()
65 cmdq->token = 0; in cmdq_sm_stopped_entry()
66 cmdq->offset = 0; in cmdq_sm_stopped_entry()
67 cmdq->bytes_to_copy = 0; in cmdq_sm_stopped_entry()
68 while (!list_empty(&cmdq->pending_q)) { in cmdq_sm_stopped_entry()
69 cmdq_ent = list_first_entry(&cmdq->pending_q, in cmdq_sm_stopped_entry()
77 cmdq_sm_stopped(struct bfa_msgq_cmdq *cmdq, enum cmdq_event event) in cmdq_sm_stopped() argument
81 bfa_fsm_set_state(cmdq, cmdq_sm_init_wait); in cmdq_sm_stopped()
90 cmdq->flags |= BFA_MSGQ_CMDQ_F_DB_UPDATE; in cmdq_sm_stopped()
99 cmdq_sm_init_wait_entry(struct bfa_msgq_cmdq *cmdq) in cmdq_sm_init_wait_entry() argument
101 bfa_wc_down(&cmdq->msgq->init_wc); in cmdq_sm_init_wait_entry()
105 cmdq_sm_init_wait(struct bfa_msgq_cmdq *cmdq, enum cmdq_event event) in cmdq_sm_init_wait() argument
110 bfa_fsm_set_state(cmdq, cmdq_sm_stopped); in cmdq_sm_init_wait()
114 cmdq->flags |= BFA_MSGQ_CMDQ_F_DB_UPDATE; in cmdq_sm_init_wait()
118 if (cmdq->flags & BFA_MSGQ_CMDQ_F_DB_UPDATE) { in cmdq_sm_init_wait()
119 cmdq->flags &= ~BFA_MSGQ_CMDQ_F_DB_UPDATE; in cmdq_sm_init_wait()
120 bfa_fsm_set_state(cmdq, cmdq_sm_dbell_wait); in cmdq_sm_init_wait()
122 bfa_fsm_set_state(cmdq, cmdq_sm_ready); in cmdq_sm_init_wait()
131 cmdq_sm_ready_entry(struct bfa_msgq_cmdq *cmdq) in cmdq_sm_ready_entry() argument
136 cmdq_sm_ready(struct bfa_msgq_cmdq *cmdq, enum cmdq_event event) in cmdq_sm_ready() argument
141 bfa_fsm_set_state(cmdq, cmdq_sm_stopped); in cmdq_sm_ready()
145 bfa_fsm_set_state(cmdq, cmdq_sm_dbell_wait); in cmdq_sm_ready()
154 cmdq_sm_dbell_wait_entry(struct bfa_msgq_cmdq *cmdq) in cmdq_sm_dbell_wait_entry() argument
156 bfa_msgq_cmdq_dbell(cmdq); in cmdq_sm_dbell_wait_entry()
160 cmdq_sm_dbell_wait(struct bfa_msgq_cmdq *cmdq, enum cmdq_event event) in cmdq_sm_dbell_wait() argument
165 bfa_fsm_set_state(cmdq, cmdq_sm_stopped); in cmdq_sm_dbell_wait()
169 cmdq->flags |= BFA_MSGQ_CMDQ_F_DB_UPDATE; in cmdq_sm_dbell_wait()
173 if (cmdq->flags & BFA_MSGQ_CMDQ_F_DB_UPDATE) { in cmdq_sm_dbell_wait()
174 cmdq->flags &= ~BFA_MSGQ_CMDQ_F_DB_UPDATE; in cmdq_sm_dbell_wait()
175 bfa_fsm_set_state(cmdq, cmdq_sm_dbell_wait); in cmdq_sm_dbell_wait()
177 bfa_fsm_set_state(cmdq, cmdq_sm_ready); in cmdq_sm_dbell_wait()
188 struct bfa_msgq_cmdq *cmdq = (struct bfa_msgq_cmdq *)arg; in bfa_msgq_cmdq_dbell_ready() local
189 bfa_fsm_send_event(cmdq, CMDQ_E_DB_READY); in bfa_msgq_cmdq_dbell_ready()
193 bfa_msgq_cmdq_dbell(struct bfa_msgq_cmdq *cmdq) in bfa_msgq_cmdq_dbell() argument
196 (struct bfi_msgq_h2i_db *)(&cmdq->dbell_mb.msg[0]); in bfa_msgq_cmdq_dbell()
201 dbell->idx.cmdq_pi = htons(cmdq->producer_index); in bfa_msgq_cmdq_dbell()
203 if (!bfa_nw_ioc_mbox_queue(cmdq->msgq->ioc, &cmdq->dbell_mb, in bfa_msgq_cmdq_dbell()
204 bfa_msgq_cmdq_dbell_ready, cmdq)) { in bfa_msgq_cmdq_dbell()
205 bfa_msgq_cmdq_dbell_ready(cmdq); in bfa_msgq_cmdq_dbell()
210 __cmd_copy(struct bfa_msgq_cmdq *cmdq, struct bfa_msgq_cmd_entry *cmd) in __cmd_copy() argument
218 dst = (u8 *)cmdq->addr.kva; in __cmd_copy()
219 dst += (cmdq->producer_index * BFI_MSGQ_CMD_ENTRY_SIZE); in __cmd_copy()
227 BFA_MSGQ_INDX_ADD(cmdq->producer_index, 1, cmdq->depth); in __cmd_copy()
228 dst = (u8 *)cmdq->addr.kva; in __cmd_copy()
229 dst += (cmdq->producer_index * BFI_MSGQ_CMD_ENTRY_SIZE); in __cmd_copy()
236 bfa_msgq_cmdq_ci_update(struct bfa_msgq_cmdq *cmdq, struct bfi_mbmsg *mb) in bfa_msgq_cmdq_ci_update() argument
242 cmdq->consumer_index = ntohs(dbell->idx.cmdq_ci); in bfa_msgq_cmdq_ci_update()
245 while (!list_empty(&cmdq->pending_q)) { in bfa_msgq_cmdq_ci_update()
246 cmd = list_first_entry(&cmdq->pending_q, in bfa_msgq_cmdq_ci_update()
249 BFA_MSGQ_FREE_CNT(cmdq)) { in bfa_msgq_cmdq_ci_update()
251 __cmd_copy(cmdq, cmd); in bfa_msgq_cmdq_ci_update()
260 bfa_fsm_send_event(cmdq, CMDQ_E_POST); in bfa_msgq_cmdq_ci_update()
266 struct bfa_msgq_cmdq *cmdq = (struct bfa_msgq_cmdq *)arg; in bfa_msgq_cmdq_copy_next() local
268 if (cmdq->bytes_to_copy) in bfa_msgq_cmdq_copy_next()
269 bfa_msgq_cmdq_copy_rsp(cmdq); in bfa_msgq_cmdq_copy_next()
273 bfa_msgq_cmdq_copy_req(struct bfa_msgq_cmdq *cmdq, struct bfi_mbmsg *mb) in bfa_msgq_cmdq_copy_req() argument
278 cmdq->token = 0; in bfa_msgq_cmdq_copy_req()
279 cmdq->offset = ntohs(req->offset); in bfa_msgq_cmdq_copy_req()
280 cmdq->bytes_to_copy = ntohs(req->len); in bfa_msgq_cmdq_copy_req()
281 bfa_msgq_cmdq_copy_rsp(cmdq); in bfa_msgq_cmdq_copy_req()
285 bfa_msgq_cmdq_copy_rsp(struct bfa_msgq_cmdq *cmdq) in bfa_msgq_cmdq_copy_rsp() argument
288 (struct bfi_msgq_h2i_cmdq_copy_rsp *)&cmdq->copy_mb.msg[0]; in bfa_msgq_cmdq_copy_rsp()
290 u8 *addr = (u8 *)cmdq->addr.kva; in bfa_msgq_cmdq_copy_rsp()
294 rsp->mh.mtag.i2htok = htons(cmdq->token); in bfa_msgq_cmdq_copy_rsp()
295 copied = (cmdq->bytes_to_copy >= BFI_CMD_COPY_SZ) ? BFI_CMD_COPY_SZ : in bfa_msgq_cmdq_copy_rsp()
296 cmdq->bytes_to_copy; in bfa_msgq_cmdq_copy_rsp()
297 addr += cmdq->offset; in bfa_msgq_cmdq_copy_rsp()
300 cmdq->token++; in bfa_msgq_cmdq_copy_rsp()
301 cmdq->offset += copied; in bfa_msgq_cmdq_copy_rsp()
302 cmdq->bytes_to_copy -= copied; in bfa_msgq_cmdq_copy_rsp()
304 if (!bfa_nw_ioc_mbox_queue(cmdq->msgq->ioc, &cmdq->copy_mb, in bfa_msgq_cmdq_copy_rsp()
305 bfa_msgq_cmdq_copy_next, cmdq)) { in bfa_msgq_cmdq_copy_rsp()
306 bfa_msgq_cmdq_copy_next(cmdq); in bfa_msgq_cmdq_copy_rsp()
311 bfa_msgq_cmdq_attach(struct bfa_msgq_cmdq *cmdq, struct bfa_msgq *msgq) in bfa_msgq_cmdq_attach() argument
313 cmdq->depth = BFA_MSGQ_CMDQ_NUM_ENTRY; in bfa_msgq_cmdq_attach()
314 INIT_LIST_HEAD(&cmdq->pending_q); in bfa_msgq_cmdq_attach()
315 cmdq->msgq = msgq; in bfa_msgq_cmdq_attach()
316 bfa_fsm_set_state(cmdq, cmdq_sm_stopped); in bfa_msgq_cmdq_attach()
510 bfa_fsm_send_event(&msgq->cmdq, CMDQ_E_INIT_RESP); in bfa_msgq_init_rsp()
525 bfa_dma_be_addr_set(msgq_cfg->cmdq.addr, msgq->cmdq.addr.pa); in bfa_msgq_init()
526 msgq_cfg->cmdq.q_depth = htons(msgq->cmdq.depth); in bfa_msgq_init()
548 bfa_msgq_cmdq_ci_update(&msgq->cmdq, msg); in bfa_msgq_isr()
552 bfa_msgq_cmdq_copy_req(&msgq->cmdq, msg); in bfa_msgq_isr()
569 bfa_fsm_send_event(&msgq->cmdq, CMDQ_E_START); in bfa_msgq_notify()
576 bfa_fsm_send_event(&msgq->cmdq, CMDQ_E_STOP); in bfa_msgq_notify()
581 bfa_fsm_send_event(&msgq->cmdq, CMDQ_E_FAIL); in bfa_msgq_notify()
600 msgq->cmdq.addr.kva = kva; in bfa_msgq_memclaim()
601 msgq->cmdq.addr.pa = pa; in bfa_msgq_memclaim()
615 bfa_msgq_cmdq_attach(&msgq->cmdq, msgq); in bfa_msgq_attach()
635 BFA_MSGQ_FREE_CNT(&msgq->cmdq)) { in bfa_msgq_cmd_post()
636 __cmd_copy(&msgq->cmdq, cmd); in bfa_msgq_cmd_post()
638 bfa_fsm_send_event(&msgq->cmdq, CMDQ_E_POST); in bfa_msgq_cmd_post()
640 list_add_tail(&cmd->qe, &msgq->cmdq.pending_q); in bfa_msgq_cmd_post()