GNU Linux-libre 4.19.268-gnu1
[releases.git] / drivers / crypto / ccree / cc_sram_mgr.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /* Copyright (C) 2012-2018 ARM Limited or its affiliates. */
3
4 #ifndef __CC_SRAM_MGR_H__
5 #define __CC_SRAM_MGR_H__
6
7 #ifndef CC_CC_SRAM_SIZE
8 #define CC_CC_SRAM_SIZE 4096
9 #endif
10
11 struct cc_drvdata;
12
13 /**
14  * Address (offset) within CC internal SRAM
15  */
16
17 typedef u64 cc_sram_addr_t;
18
19 #define NULL_SRAM_ADDR ((cc_sram_addr_t)-1)
20
21 /*!
22  * Initializes SRAM pool.
23  * The first X bytes of SRAM are reserved for ROM usage, hence, pool
24  * starts right after X bytes.
25  *
26  * \param drvdata
27  *
28  * \return int Zero for success, negative value otherwise.
29  */
30 int cc_sram_mgr_init(struct cc_drvdata *drvdata);
31
32 /*!
33  * Uninits SRAM pool.
34  *
35  * \param drvdata
36  */
37 void cc_sram_mgr_fini(struct cc_drvdata *drvdata);
38
39 /*!
40  * Allocated buffer from SRAM pool.
41  * Note: Caller is responsible to free the LAST allocated buffer.
42  * This function does not taking care of any fragmentation may occur
43  * by the order of calls to alloc/free.
44  *
45  * \param drvdata
46  * \param size The requested bytes to allocate
47  */
48 cc_sram_addr_t cc_sram_alloc(struct cc_drvdata *drvdata, u32 size);
49
50 /**
51  * cc_set_sram_desc() - Create const descriptors sequence to
52  *      set values in given array into SRAM.
53  * Note: each const value can't exceed word size.
54  *
55  * @src:          A pointer to array of words to set as consts.
56  * @dst:          The target SRAM buffer to set into
57  * @nelements:    The number of words in "src" array
58  * @seq:          A pointer to the given IN/OUT descriptor sequence
59  * @seq_len:      A pointer to the given IN/OUT sequence length
60  */
61 void cc_set_sram_desc(const u32 *src, cc_sram_addr_t dst,
62                       unsigned int nelement, struct cc_hw_desc *seq,
63                       unsigned int *seq_len);
64
65 #endif /*__CC_SRAM_MGR_H__*/