root/drivers/crypto/inside-secure/eip93/eip93-cipher.h
/* SPDX-License-Identifier: GPL-2.0
 *
 * Copyright (C) 2019 - 2021
 *
 * Richard van Schagen <vschagen@icloud.com>
 * Christian Marangi <ansuelsmth@gmail.com
 */
#ifndef _EIP93_CIPHER_H_
#define _EIP93_CIPHER_H_

#include "eip93-main.h"

struct eip93_crypto_ctx {
        struct eip93_device             *eip93;
        u32                             flags;
        struct sa_record                *sa_record;
        u32                             sa_nonce;
        int                             blksize;
        dma_addr_t                      sa_record_base;
        /* AEAD specific */
        unsigned int                    authsize;
        unsigned int                    assoclen;
        bool                            set_assoc;
        enum eip93_alg_type             type;
};

struct eip93_cipher_reqctx {
        u16                             desc_flags;
        u16                             flags;
        unsigned int                    blksize;
        unsigned int                    ivsize;
        unsigned int                    textsize;
        unsigned int                    assoclen;
        unsigned int                    authsize;
        dma_addr_t                      sa_record_base;
        struct sa_state                 *sa_state;
        dma_addr_t                      sa_state_base;
        struct eip93_descriptor         *cdesc;
        struct scatterlist              *sg_src;
        struct scatterlist              *sg_dst;
        int                             src_nents;
        int                             dst_nents;
        struct sa_state                 *sa_state_ctr;
        dma_addr_t                      sa_state_ctr_base;
};

int check_valid_request(struct eip93_cipher_reqctx *rctx);

void eip93_unmap_dma(struct eip93_device *eip93, struct eip93_cipher_reqctx *rctx,
                     struct scatterlist *reqsrc, struct scatterlist *reqdst);

void eip93_skcipher_handle_result(struct crypto_async_request *async, int err);

int eip93_send_req(struct crypto_async_request *async,
                   const u8 *reqiv, struct eip93_cipher_reqctx *rctx);

void eip93_handle_result(struct eip93_device *eip93, struct eip93_cipher_reqctx *rctx,
                         u8 *reqiv);

#endif /* _EIP93_CIPHER_H_ */