1 /* SPDX-License-Identifier: GPL-2.0 */
2 /* Copyright (C) 2012-2019 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__*/
66