| /* SPDX-License-Identifier: BSD-2-Clause */ |
| /* |
| * Copyright 2018-2019 NXP |
| * |
| * Brief CAAM Job Rings module header. |
| */ |
| #ifndef __CAAM_JR_H__ |
| #define __CAAM_JR_H__ |
| |
| #include <caam_jr_status.h> |
| |
| /* |
| * Job context to enqueue/dequeue |
| */ |
| struct caam_jobctx { |
| uint32_t *desc; /* reference to the descriptor */ |
| uint32_t status; /* executed job status */ |
| uint32_t id; /* Job identifier */ |
| bool completion; /* job completion flag */ |
| void *context; /* caller job context */ |
| void (*callback)(struct caam_jobctx *ctx); /* job completion callback */ |
| }; |
| |
| /* |
| * Job Ring module configuration |
| */ |
| struct caam_jrcfg { |
| vaddr_t base; /* CAAM virtual base address */ |
| paddr_t offset; /* Job Ring address offset */ |
| int it_num; /* Job Ring interrupt number */ |
| uint8_t nb_jobs; /* Number of Jobs to managed */ |
| }; |
| |
| /* |
| * Initialization of the CAAM Job Ring module |
| * |
| * @jrcfg Job Ring Configuration |
| */ |
| enum caam_status caam_jr_init(struct caam_jrcfg *jrcfg); |
| |
| /* |
| * Cancels a job ID. Remove the job from SW Job array |
| * |
| * @job_id Job ID |
| */ |
| void caam_jr_cancel(uint32_t job_id); |
| |
| /* |
| * Checks if one of the given job IDs in bit mask format |
| * is completed. If none is completed, wait until timeout expires. |
| * Endlessly wait if @timeout_ms = UINT_MAX |
| * |
| * @job_ids Job IDs Mask |
| * @timeout_ms Timeout in millisecond |
| */ |
| enum caam_status caam_jr_dequeue(uint32_t job_ids, unsigned int timeout_ms); |
| |
| /* |
| * Enqueues a job in the Job Ring input queue and either wait until job |
| * completion or if job is asynchrnous, returns immediately (if status |
| * success, the output parameter job_id is filled with the Job Id pushed) |
| * |
| * @jobctx Reference to the job context |
| * @job_id [out] If pointer not NULL, job is asynchronous and parameter is |
| * the Job Id enqueued |
| */ |
| enum caam_status caam_jr_enqueue(struct caam_jobctx *jobctx, uint32_t *job_id); |
| |
| /* |
| * Request the CAAM JR to halt. |
| * Stop fetching input queue and wait running job completion. |
| */ |
| enum caam_status caam_jr_halt(void); |
| |
| /* Request the CAAM JR to flush all job running. */ |
| enum caam_status caam_jr_flush(void); |
| |
| /* |
| * Resume the CAAM JR processing. |
| * |
| * @pm_hints Hint on current power transition |
| */ |
| void caam_jr_resume(uint32_t pm_hints); |
| |
| /* Forces the completion of all CAAM Job to ensure CAAM is not BUSY. */ |
| enum caam_status caam_jr_complete(void); |
| #endif /* __CAAM_JR_H__ */ |