1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* Copyright (C) 2012-2019 ARM Limited (or its affiliates). */ 3 4 /* \file cc_buffer_mgr.h 5 * Buffer Manager 6 */ 7 8 #ifndef __CC_BUFFER_MGR_H__ 9 #define __CC_BUFFER_MGR_H__ 10 11 #include <crypto/algapi.h> 12 13 #include "cc_driver.h" 14 15 enum cc_req_dma_buf_type { 16 CC_DMA_BUF_NULL = 0, 17 CC_DMA_BUF_DLLI, 18 CC_DMA_BUF_MLLI 19 }; 20 21 enum cc_sg_cpy_direct { 22 CC_SG_TO_BUF = 0, 23 CC_SG_FROM_BUF = 1 24 }; 25 26 struct cc_mlli { 27 u32 sram_addr; 28 unsigned int mapped_nents; 29 unsigned int nents; //sg nents 30 unsigned int mlli_nents; //mlli nents might be different than the above 31 }; 32 33 struct mlli_params { 34 struct dma_pool *curr_pool; 35 void *mlli_virt_addr; 36 dma_addr_t mlli_dma_addr; 37 u32 mlli_len; 38 }; 39 40 int cc_buffer_mgr_init(struct cc_drvdata *drvdata); 41 42 int cc_buffer_mgr_fini(struct cc_drvdata *drvdata); 43 44 int cc_map_cipher_request(struct cc_drvdata *drvdata, void *ctx, 45 unsigned int ivsize, unsigned int nbytes, 46 void *info, struct scatterlist *src, 47 struct scatterlist *dst, gfp_t flags); 48 49 void cc_unmap_cipher_request(struct device *dev, void *ctx, unsigned int ivsize, 50 struct scatterlist *src, struct scatterlist *dst); 51 52 int cc_map_aead_request(struct cc_drvdata *drvdata, struct aead_request *req); 53 54 void cc_unmap_aead_request(struct device *dev, struct aead_request *req); 55 56 int cc_map_hash_request_final(struct cc_drvdata *drvdata, void *ctx, 57 struct scatterlist *src, unsigned int nbytes, 58 bool do_update, gfp_t flags); 59 60 int cc_map_hash_request_update(struct cc_drvdata *drvdata, void *ctx, 61 struct scatterlist *src, unsigned int nbytes, 62 unsigned int block_size, gfp_t flags); 63 64 void cc_unmap_hash_request(struct device *dev, void *ctx, 65 struct scatterlist *src, bool do_revert); 66 67 void cc_copy_sg_portion(struct device *dev, u8 *dest, struct scatterlist *sg, 68 u32 to_skip, u32 end, enum cc_sg_cpy_direct direct); 69 70 #endif /*__BUFFER_MGR_H__*/ 71