Lines Matching refs:cmd_q

23 static u32 ccp_alloc_ksb(struct ccp_cmd_queue *cmd_q, unsigned int count)  in ccp_alloc_ksb()  argument
26 struct ccp_device *ccp = cmd_q->ccp; in ccp_alloc_ksb()
54 static void ccp_free_ksb(struct ccp_cmd_queue *cmd_q, unsigned int start, in ccp_free_ksb() argument
57 struct ccp_device *ccp = cmd_q->ccp; in ccp_free_ksb()
73 static unsigned int ccp_get_free_slots(struct ccp_cmd_queue *cmd_q) in ccp_get_free_slots() argument
75 return CMD_Q_DEPTH(ioread32(cmd_q->reg_status)); in ccp_get_free_slots()
80 struct ccp_cmd_queue *cmd_q = op->cmd_q; in ccp_do_cmd() local
81 struct ccp_device *ccp = cmd_q->ccp; in ccp_do_cmd()
91 cmd_q->free_slots--; in ccp_do_cmd()
93 cr0 = (cmd_q->id << REQ0_CMD_Q_SHIFT) in ccp_do_cmd()
101 if (op->ioc || !cmd_q->free_slots) in ccp_do_cmd()
121 ret = wait_event_interruptible(cmd_q->int_queue, in ccp_do_cmd()
122 cmd_q->int_rcvd); in ccp_do_cmd()
123 if (ret || cmd_q->cmd_error) { in ccp_do_cmd()
125 cmd = (cmd_q->id << DEL_Q_ID_SHIFT) in ccp_do_cmd()
127 if (cmd_q->cmd_error) in ccp_do_cmd()
128 ccp_log_error(cmd_q->ccp, in ccp_do_cmd()
129 cmd_q->cmd_error); in ccp_do_cmd()
138 | (cmd_q->id << DEL_Q_ID_SHIFT) in ccp_do_cmd()
144 cmd_q->free_slots = CMD_Q_DEPTH(cmd_q->q_status); in ccp_do_cmd()
146 cmd_q->int_rcvd = 0; in ccp_do_cmd()
331 struct ccp_cmd_queue *cmd_q; in ccp_irq_bh() local
338 cmd_q = &ccp->cmd_q[i]; in ccp_irq_bh()
340 q_int = status & (cmd_q->int_ok | cmd_q->int_err); in ccp_irq_bh()
342 cmd_q->int_status = status; in ccp_irq_bh()
343 cmd_q->q_status = ioread32(cmd_q->reg_status); in ccp_irq_bh()
344 cmd_q->q_int_status = ioread32(cmd_q->reg_int_status); in ccp_irq_bh()
347 if ((q_int & cmd_q->int_err) && !cmd_q->cmd_error) in ccp_irq_bh()
348 cmd_q->cmd_error = CMD_Q_ERROR(cmd_q->q_status); in ccp_irq_bh()
350 cmd_q->int_rcvd = 1; in ccp_irq_bh()
354 wake_up_interruptible(&cmd_q->int_queue); in ccp_irq_bh()
376 struct ccp_cmd_queue *cmd_q; in ccp_init() local
401 cmd_q = &ccp->cmd_q[ccp->cmd_q_count]; in ccp_init()
404 cmd_q->ccp = ccp; in ccp_init()
405 cmd_q->id = i; in ccp_init()
406 cmd_q->dma_pool = dma_pool; in ccp_init()
409 cmd_q->sb_key = KSB_START + ccp->sb_start++; in ccp_init()
410 cmd_q->sb_ctx = KSB_START + ccp->sb_start++; in ccp_init()
416 cmd_q->reg_status = ccp->io_regs + CMD_Q_STATUS_BASE + in ccp_init()
418 cmd_q->reg_int_status = ccp->io_regs + CMD_Q_INT_STATUS_BASE + in ccp_init()
420 cmd_q->int_ok = 1 << (i * 2); in ccp_init()
421 cmd_q->int_err = 1 << ((i * 2) + 1); in ccp_init()
423 cmd_q->free_slots = ccp_get_free_slots(cmd_q); in ccp_init()
425 init_waitqueue_head(&cmd_q->int_queue); in ccp_init()
428 ccp->qim |= cmd_q->int_ok | cmd_q->int_err; in ccp_init()
448 cmd_q = &ccp->cmd_q[i]; in ccp_init()
450 ioread32(cmd_q->reg_int_status); in ccp_init()
451 ioread32(cmd_q->reg_status); in ccp_init()
472 cmd_q = &ccp->cmd_q[i]; in ccp_init()
474 kthread = kthread_create(ccp_cmd_queue_thread, cmd_q, in ccp_init()
475 "%s-q%u", ccp->name, cmd_q->id); in ccp_init()
483 cmd_q->kthread = kthread; in ccp_init()
510 if (ccp->cmd_q[i].kthread) in ccp_init()
511 kthread_stop(ccp->cmd_q[i].kthread); in ccp_init()
517 dma_pool_destroy(ccp->cmd_q[i].dma_pool); in ccp_init()
524 struct ccp_cmd_queue *cmd_q; in ccp_destroy() local
540 cmd_q = &ccp->cmd_q[i]; in ccp_destroy()
542 ioread32(cmd_q->reg_int_status); in ccp_destroy()
543 ioread32(cmd_q->reg_status); in ccp_destroy()
549 if (ccp->cmd_q[i].kthread) in ccp_destroy()
550 kthread_stop(ccp->cmd_q[i].kthread); in ccp_destroy()
555 dma_pool_destroy(ccp->cmd_q[i].dma_pool); in ccp_destroy()