Lines Matching refs:ccp

26 	struct ccp_device *ccp = cmd_q->ccp;  in ccp_alloc_ksb()  local
29 mutex_lock(&ccp->sb_mutex); in ccp_alloc_ksb()
31 start = (u32)bitmap_find_next_zero_area(ccp->sb, in ccp_alloc_ksb()
32 ccp->sb_count, in ccp_alloc_ksb()
33 ccp->sb_start, in ccp_alloc_ksb()
35 if (start <= ccp->sb_count) { in ccp_alloc_ksb()
36 bitmap_set(ccp->sb, start, count); in ccp_alloc_ksb()
38 mutex_unlock(&ccp->sb_mutex); in ccp_alloc_ksb()
42 ccp->sb_avail = 0; in ccp_alloc_ksb()
44 mutex_unlock(&ccp->sb_mutex); in ccp_alloc_ksb()
47 if (wait_event_interruptible(ccp->sb_queue, ccp->sb_avail)) in ccp_alloc_ksb()
57 struct ccp_device *ccp = cmd_q->ccp; in ccp_free_ksb() local
62 mutex_lock(&ccp->sb_mutex); in ccp_free_ksb()
64 bitmap_clear(ccp->sb, start - KSB_START, count); in ccp_free_ksb()
66 ccp->sb_avail = 1; in ccp_free_ksb()
68 mutex_unlock(&ccp->sb_mutex); in ccp_free_ksb()
70 wake_up_interruptible_all(&ccp->sb_queue); in ccp_free_ksb()
81 struct ccp_device *ccp = cmd_q->ccp; in ccp_do_cmd() local
105 cr_addr = ccp->io_regs + CMD_REQ0 + CMD_REQ_INCR; in ccp_do_cmd()
107 mutex_lock(&ccp->req_mutex); in ccp_do_cmd()
115 iowrite32(cr0, ccp->io_regs + CMD_REQ0); in ccp_do_cmd()
117 mutex_unlock(&ccp->req_mutex); in ccp_do_cmd()
128 ccp_log_error(cmd_q->ccp, in ccp_do_cmd()
131 iowrite32(cmd, ccp->io_regs + DEL_CMD_Q_JOB); in ccp_do_cmd()
141 iowrite32(cmd, ccp->io_regs + DEL_CMD_Q_JOB); in ccp_do_cmd()
318 static void ccp_disable_queue_interrupts(struct ccp_device *ccp) in ccp_disable_queue_interrupts() argument
320 iowrite32(0x00, ccp->io_regs + IRQ_MASK_REG); in ccp_disable_queue_interrupts()
323 static void ccp_enable_queue_interrupts(struct ccp_device *ccp) in ccp_enable_queue_interrupts() argument
325 iowrite32(ccp->qim, ccp->io_regs + IRQ_MASK_REG); in ccp_enable_queue_interrupts()
330 struct ccp_device *ccp = (struct ccp_device *)data; in ccp_irq_bh() local
335 status = ioread32(ccp->io_regs + IRQ_STATUS_REG); in ccp_irq_bh()
337 for (i = 0; i < ccp->cmd_q_count; i++) { in ccp_irq_bh()
338 cmd_q = &ccp->cmd_q[i]; in ccp_irq_bh()
353 iowrite32(q_int, ccp->io_regs + IRQ_STATUS_REG); in ccp_irq_bh()
357 ccp_enable_queue_interrupts(ccp); in ccp_irq_bh()
362 struct ccp_device *ccp = (struct ccp_device *)data; in ccp_irq_handler() local
364 ccp_disable_queue_interrupts(ccp); in ccp_irq_handler()
365 if (ccp->use_tasklet) in ccp_irq_handler()
366 tasklet_schedule(&ccp->irq_tasklet); in ccp_irq_handler()
368 ccp_irq_bh((unsigned long)ccp); in ccp_irq_handler()
373 static int ccp_init(struct ccp_device *ccp) in ccp_init() argument
375 struct device *dev = ccp->dev; in ccp_init()
383 ccp->qim = 0; in ccp_init()
384 qmr = ioread32(ccp->io_regs + Q_MASK_REG); in ccp_init()
391 ccp->name, i); in ccp_init()
401 cmd_q = &ccp->cmd_q[ccp->cmd_q_count]; in ccp_init()
402 ccp->cmd_q_count++; in ccp_init()
404 cmd_q->ccp = ccp; 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()
411 ccp->sb_count -= 2; 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()
428 ccp->qim |= cmd_q->int_ok | cmd_q->int_err; in ccp_init()
432 iowrite32(ccp->axcache, ccp->io_regs + CMD_Q_CACHE_BASE + in ccp_init()
438 if (ccp->cmd_q_count == 0) { in ccp_init()
443 dev_notice(dev, "%u command queues available\n", ccp->cmd_q_count); in ccp_init()
446 ccp_disable_queue_interrupts(ccp); in ccp_init()
447 for (i = 0; i < ccp->cmd_q_count; i++) { in ccp_init()
448 cmd_q = &ccp->cmd_q[i]; in ccp_init()
453 iowrite32(ccp->qim, ccp->io_regs + IRQ_STATUS_REG); in ccp_init()
456 ret = sp_request_ccp_irq(ccp->sp, ccp_irq_handler, ccp->name, ccp); in ccp_init()
463 if (ccp->use_tasklet) in ccp_init()
464 tasklet_init(&ccp->irq_tasklet, ccp_irq_bh, in ccp_init()
465 (unsigned long)ccp); in ccp_init()
469 for (i = 0; i < ccp->cmd_q_count; i++) { in ccp_init()
472 cmd_q = &ccp->cmd_q[i]; in ccp_init()
475 "%s-q%u", ccp->name, cmd_q->id); in ccp_init()
489 ccp_enable_queue_interrupts(ccp); in ccp_init()
492 ccp_add_device(ccp); in ccp_init()
494 ret = ccp_register_rng(ccp); in ccp_init()
499 ret = ccp_dmaengine_register(ccp); in ccp_init()
506 ccp_unregister_rng(ccp); in ccp_init()
509 for (i = 0; i < ccp->cmd_q_count; i++) in ccp_init()
510 if (ccp->cmd_q[i].kthread) in ccp_init()
511 kthread_stop(ccp->cmd_q[i].kthread); in ccp_init()
513 sp_free_ccp_irq(ccp->sp, ccp); in ccp_init()
516 for (i = 0; i < ccp->cmd_q_count; i++) in ccp_init()
517 dma_pool_destroy(ccp->cmd_q[i].dma_pool); in ccp_init()
522 static void ccp_destroy(struct ccp_device *ccp) in ccp_destroy() argument
529 ccp_dmaengine_unregister(ccp); in ccp_destroy()
532 ccp_unregister_rng(ccp); in ccp_destroy()
535 ccp_del_device(ccp); in ccp_destroy()
538 ccp_disable_queue_interrupts(ccp); in ccp_destroy()
539 for (i = 0; i < ccp->cmd_q_count; i++) { in ccp_destroy()
540 cmd_q = &ccp->cmd_q[i]; in ccp_destroy()
545 iowrite32(ccp->qim, ccp->io_regs + IRQ_STATUS_REG); in ccp_destroy()
548 for (i = 0; i < ccp->cmd_q_count; i++) in ccp_destroy()
549 if (ccp->cmd_q[i].kthread) in ccp_destroy()
550 kthread_stop(ccp->cmd_q[i].kthread); in ccp_destroy()
552 sp_free_ccp_irq(ccp->sp, ccp); in ccp_destroy()
554 for (i = 0; i < ccp->cmd_q_count; i++) in ccp_destroy()
555 dma_pool_destroy(ccp->cmd_q[i].dma_pool); in ccp_destroy()
558 while (!list_empty(&ccp->cmd)) { in ccp_destroy()
560 cmd = list_first_entry(&ccp->cmd, struct ccp_cmd, entry); in ccp_destroy()
564 while (!list_empty(&ccp->backlog)) { in ccp_destroy()
566 cmd = list_first_entry(&ccp->backlog, struct ccp_cmd, entry); in ccp_destroy()