blob: bf3a6f8b9c090befe9b46ce6ac2ffc65ef425587 [file] [log] [blame]
/* 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__ */