blob: 8c00985110b5014d52e312a0bcbf018247006189 [file] [log] [blame]
/* SPDX-License-Identifier: BSD-2-Clause */
/*
* Copyright 2018-2019 NXP
*
* Brief CAAM driver common include file.
* Definition of the internal driver status codes.
*/
#ifndef __CAAM_COMMON_H__
#define __CAAM_COMMON_H__
#include <caam_desc_helper.h>
#include <caam_status.h>
#include <caam_trace.h>
#include <types_ext.h>
/*
* Definition of the number of CAAM Jobs to manage in JR queues
*/
#define NB_JOBS_QUEUE 10
/*
* Flag Job Ring Owner is Secure
*/
#define JROWNER_SECURE 0x10
/*
* Job Ring Owner. Enumerate Id (expect the Secure Flag) correspond
* to the HW ID.
*/
#if !defined(CFG_MX7ULP)
enum caam_jr_owner {
JROWN_ARM_NS = 0x1, /* Non-Secure ARM */
JROWN_ARM_S = JROWNER_SECURE | 0x1, /* Secure ARM */
};
#else
enum caam_jr_owner {
JROWN_ARM_NS = 0x4, /* Non-Secure ARM */
JROWN_ARM_S = JROWNER_SECURE | 0x4, /* Secure ARM */
};
#endif
/*
* Definition of a CAAM buffer type
*/
struct caambuf {
uint8_t *data; /* Data buffer */
paddr_t paddr; /* Physical address of the buffer */
size_t length; /* Number of bytes in the data buffer */
uint8_t nocache; /* =1 if buffer is not cacheable, 0 otherwise */
};
/*
* Definition of a CAAM Block buffer. Buffer used to store
* user source data to build a full algorithm block buffer
*/
struct caamblock {
struct caambuf buf; /* Data buffer */
size_t filled; /* Current length filled in the buffer */
size_t max; /* Maximum size of the block */
};
/*
* Definition of key size
*/
struct caamdefkey {
uint8_t min; /* Minimum size */
uint8_t max; /* Maximum size */
uint8_t mod; /* Key modulus */
};
/*
* Scatter/Gather Table type for input and output data
*/
struct caamsgt {
/* Word 0 */
uint32_t ptr_ms : 8; /* Address pointer (MS 8 bits) */
uint32_t res_w0 : 24; /* Not used */
/* Word 1 */
uint32_t ptr_ls; /* Address pointer (LS 32 bits) */
/* Word 2 */
uint32_t length : 30; /* Length (30 bits) */
uint32_t final : 1; /* Last entry in the table */
uint32_t ext : 1; /* Extension bit (if set, point to sgt table) */
/* Word 3 */
uint32_t offset : 13; /* Offset in memory buffer */
uint32_t res_w3 : 19; /* Not used */
};
/*
* Data buffer encoded in SGT format
*/
struct caamsgtbuf {
struct cammsgt *sgt; /* SGT Array */
struct caambuf *buf; /* Buffer Array */
uint8_t number; /* Number of SGT/Buf */
bool sgt_type; /* Define the data format */
};
#endif /* __CAAM_COMMON_H__ */