Lines Matching defs:ccp
27 #include <linux/ccp.h>
29 #include "ccp-dev.h"
128 * @ccp: ccp_device struct pointer
135 void ccp_add_device(struct ccp_device *ccp)
140 list_add_tail(&ccp->entry, &ccp_units);
145 ccp_rr = ccp;
152 * @ccp: ccp_device struct pointer
158 void ccp_del_device(struct ccp_device *ccp)
163 if (ccp_rr == ccp) {
174 list_del(&ccp->entry);
182 int ccp_register_rng(struct ccp_device *ccp)
186 dev_dbg(ccp->dev, "Registering RNG...\n");
188 ccp->hwrng.name = ccp->rngname;
189 ccp->hwrng.read = ccp_trng_read;
190 ret = hwrng_register(&ccp->hwrng);
192 dev_err(ccp->dev, "error registering hwrng (%d)\n", ret);
197 void ccp_unregister_rng(struct ccp_device *ccp)
199 if (ccp->hwrng.name)
200 hwrng_unregister(&ccp->hwrng);
291 struct ccp_device *ccp;
297 ccp = cmd->ccp ? cmd->ccp : ccp_get_device();
299 if (!ccp)
306 cmd->ccp = ccp;
308 spin_lock_irqsave(&ccp->cmd_lock, flags);
310 i = ccp->cmd_q_count;
312 if (ccp->cmd_count >= MAX_CMD_QLEN) {
315 list_add_tail(&cmd->entry, &ccp->backlog);
321 ccp->cmd_count++;
322 list_add_tail(&cmd->entry, &ccp->cmd);
325 if (!ccp->suspending) {
326 for (i = 0; i < ccp->cmd_q_count; i++) {
327 if (ccp->cmd_q[i].active)
335 spin_unlock_irqrestore(&ccp->cmd_lock, flags);
338 if (i < ccp->cmd_q_count)
339 wake_up_process(ccp->cmd_q[i].kthread);
348 struct ccp_device *ccp = cmd->ccp;
354 spin_lock_irqsave(&ccp->cmd_lock, flags);
356 ccp->cmd_count++;
357 list_add_tail(&cmd->entry, &ccp->cmd);
360 for (i = 0; i < ccp->cmd_q_count; i++) {
361 if (ccp->cmd_q[i].active)
367 spin_unlock_irqrestore(&ccp->cmd_lock, flags);
370 if (i < ccp->cmd_q_count)
371 wake_up_process(ccp->cmd_q[i].kthread);
376 struct ccp_device *ccp = cmd_q->ccp;
381 spin_lock_irqsave(&ccp->cmd_lock, flags);
385 if (ccp->suspending) {
388 spin_unlock_irqrestore(&ccp->cmd_lock, flags);
389 wake_up_interruptible(&ccp->suspend_queue);
394 if (ccp->cmd_count) {
397 cmd = list_first_entry(&ccp->cmd, struct ccp_cmd, entry);
400 ccp->cmd_count--;
403 if (!list_empty(&ccp->backlog)) {
404 backlog = list_first_entry(&ccp->backlog, struct ccp_cmd,
409 spin_unlock_irqrestore(&ccp->cmd_lock, flags);
478 struct ccp_device *ccp;
480 ccp = devm_kzalloc(dev, sizeof(*ccp), GFP_KERNEL);
481 if (!ccp)
483 ccp->dev = dev;
484 ccp->sp = sp;
485 ccp->axcache = sp->axcache;
487 INIT_LIST_HEAD(&ccp->cmd);
488 INIT_LIST_HEAD(&ccp->backlog);
490 spin_lock_init(&ccp->cmd_lock);
491 mutex_init(&ccp->req_mutex);
492 mutex_init(&ccp->sb_mutex);
493 ccp->sb_count = KSB_COUNT;
494 ccp->sb_start = 0;
497 init_waitqueue_head(&ccp->sb_queue);
498 init_waitqueue_head(&ccp->suspend_queue);
500 snprintf(ccp->name, MAX_CCP_NAME_LEN, "ccp-%u", sp->ord);
501 snprintf(ccp->rngname, MAX_CCP_NAME_LEN, "ccp-%u-rng", sp->ord);
503 return ccp;
508 struct ccp_device *ccp = container_of(rng, struct ccp_device, hwrng);
515 trng_value = ioread32(ccp->io_regs + TRNG_OUT_REG);
521 if (ccp->hwrng_retries++ > TRNG_RETRIES)
528 ccp->hwrng_retries = 0;
534 bool ccp_queues_suspended(struct ccp_device *ccp)
540 spin_lock_irqsave(&ccp->cmd_lock, flags);
542 for (i = 0; i < ccp->cmd_q_count; i++)
543 if (ccp->cmd_q[i].suspended)
546 spin_unlock_irqrestore(&ccp->cmd_lock, flags);
548 return ccp->cmd_q_count == suspended;
553 struct ccp_device *ccp = sp->ccp_data;
558 if (!ccp)
561 spin_lock_irqsave(&ccp->cmd_lock, flags);
563 ccp->suspending = 1;
566 for (i = 0; i < ccp->cmd_q_count; i++)
567 wake_up_process(ccp->cmd_q[i].kthread);
569 spin_unlock_irqrestore(&ccp->cmd_lock, flags);
572 while (!ccp_queues_suspended(ccp))
573 wait_event_interruptible(ccp->suspend_queue,
574 ccp_queues_suspended(ccp));
581 struct ccp_device *ccp = sp->ccp_data;
586 if (!ccp)
589 spin_lock_irqsave(&ccp->cmd_lock, flags);
591 ccp->suspending = 0;
594 for (i = 0; i < ccp->cmd_q_count; i++) {
595 ccp->cmd_q[i].suspended = 0;
596 wake_up_process(ccp->cmd_q[i].kthread);
599 spin_unlock_irqrestore(&ccp->cmd_lock, flags);
607 struct ccp_device *ccp;
618 ccp = ccp_alloc_struct(sp);
619 if (!ccp)
621 sp->ccp_data = ccp;
624 ccp->max_q_count = MAX_HW_QUEUES;
626 ccp->max_q_count = nqueues;
628 ccp->vdata = (struct ccp_vdata *)sp->dev_vdata->ccp_vdata;
629 if (!ccp->vdata || !ccp->vdata->version) {
635 ccp->use_tasklet = sp->use_tasklet;
637 ccp->io_regs = sp->io_map + ccp->vdata->offset;
638 if (ccp->vdata->setup)
639 ccp->vdata->setup(ccp);
641 ret = ccp->vdata->perform->init(ccp);
653 dev_notice(dev, "ccp enabled\n");
658 dev_notice(dev, "ccp initialization failed\n");
668 struct ccp_device *ccp = sp->ccp_data;
670 if (!ccp)
673 ccp->vdata->perform->destroy(ccp);