162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/* Copyright (C) 2012-2019 ARM Limited (or its affiliates). */
362306a36Sopenharmony_ci
462306a36Sopenharmony_ci/* \file cc_buffer_mgr.h
562306a36Sopenharmony_ci * Buffer Manager
662306a36Sopenharmony_ci */
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#ifndef __CC_BUFFER_MGR_H__
962306a36Sopenharmony_ci#define __CC_BUFFER_MGR_H__
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#include <crypto/algapi.h>
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci#include "cc_driver.h"
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_cienum cc_req_dma_buf_type {
1662306a36Sopenharmony_ci	CC_DMA_BUF_NULL = 0,
1762306a36Sopenharmony_ci	CC_DMA_BUF_DLLI,
1862306a36Sopenharmony_ci	CC_DMA_BUF_MLLI
1962306a36Sopenharmony_ci};
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_cienum cc_sg_cpy_direct {
2262306a36Sopenharmony_ci	CC_SG_TO_BUF = 0,
2362306a36Sopenharmony_ci	CC_SG_FROM_BUF = 1
2462306a36Sopenharmony_ci};
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_cistruct cc_mlli {
2762306a36Sopenharmony_ci	u32 sram_addr;
2862306a36Sopenharmony_ci	unsigned int mapped_nents;
2962306a36Sopenharmony_ci	unsigned int nents; //sg nents
3062306a36Sopenharmony_ci	unsigned int mlli_nents; //mlli nents might be different than the above
3162306a36Sopenharmony_ci};
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_cistruct mlli_params {
3462306a36Sopenharmony_ci	struct dma_pool *curr_pool;
3562306a36Sopenharmony_ci	void *mlli_virt_addr;
3662306a36Sopenharmony_ci	dma_addr_t mlli_dma_addr;
3762306a36Sopenharmony_ci	u32 mlli_len;
3862306a36Sopenharmony_ci};
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ciint cc_buffer_mgr_init(struct cc_drvdata *drvdata);
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ciint cc_buffer_mgr_fini(struct cc_drvdata *drvdata);
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ciint cc_map_cipher_request(struct cc_drvdata *drvdata, void *ctx,
4562306a36Sopenharmony_ci			  unsigned int ivsize, unsigned int nbytes,
4662306a36Sopenharmony_ci			  void *info, struct scatterlist *src,
4762306a36Sopenharmony_ci			  struct scatterlist *dst, gfp_t flags);
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_civoid cc_unmap_cipher_request(struct device *dev, void *ctx, unsigned int ivsize,
5062306a36Sopenharmony_ci			     struct scatterlist *src, struct scatterlist *dst);
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ciint cc_map_aead_request(struct cc_drvdata *drvdata, struct aead_request *req);
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_civoid cc_unmap_aead_request(struct device *dev, struct aead_request *req);
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_ciint cc_map_hash_request_final(struct cc_drvdata *drvdata, void *ctx,
5762306a36Sopenharmony_ci			      struct scatterlist *src, unsigned int nbytes,
5862306a36Sopenharmony_ci			      bool do_update, gfp_t flags);
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_ciint cc_map_hash_request_update(struct cc_drvdata *drvdata, void *ctx,
6162306a36Sopenharmony_ci			       struct scatterlist *src, unsigned int nbytes,
6262306a36Sopenharmony_ci			       unsigned int block_size, gfp_t flags);
6362306a36Sopenharmony_ci
6462306a36Sopenharmony_civoid cc_unmap_hash_request(struct device *dev, void *ctx,
6562306a36Sopenharmony_ci			   struct scatterlist *src, bool do_revert);
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_civoid cc_copy_sg_portion(struct device *dev, u8 *dest, struct scatterlist *sg,
6862306a36Sopenharmony_ci			u32 to_skip, u32 end, enum cc_sg_cpy_direct direct);
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_ci#endif /*__BUFFER_MGR_H__*/
71