xref: /dpdk/drivers/crypto/bcmfs/bcmfs_sym_session.h (revision 27595cd83053b2d39634a159d6709b3ce3cdf3b0)
14ed19f0dSVikas Gupta /* SPDX-License-Identifier: BSD-3-Clause
24ed19f0dSVikas Gupta  * Copyright(c) 2020 Broadcom
34ed19f0dSVikas Gupta  * All rights reserved.
44ed19f0dSVikas Gupta  */
54ed19f0dSVikas Gupta 
64ed19f0dSVikas Gupta #ifndef _BCMFS_SYM_SESSION_H_
74ed19f0dSVikas Gupta #define _BCMFS_SYM_SESSION_H_
84ed19f0dSVikas Gupta 
94ed19f0dSVikas Gupta #include <stdbool.h>
104ed19f0dSVikas Gupta #include <rte_crypto.h>
11af668035SAkhil Goyal #include <cryptodev_pmd.h>
124ed19f0dSVikas Gupta 
134ed19f0dSVikas Gupta #include "bcmfs_sym_defs.h"
144ed19f0dSVikas Gupta #include "bcmfs_sym_req.h"
154ed19f0dSVikas Gupta 
164ed19f0dSVikas Gupta /* BCMFS_SYM operation order mode enumerator */
174ed19f0dSVikas Gupta enum bcmfs_sym_chain_order {
184ed19f0dSVikas Gupta 	BCMFS_SYM_CHAIN_ONLY_CIPHER,
194ed19f0dSVikas Gupta 	BCMFS_SYM_CHAIN_ONLY_AUTH,
204ed19f0dSVikas Gupta 	BCMFS_SYM_CHAIN_CIPHER_AUTH,
214ed19f0dSVikas Gupta 	BCMFS_SYM_CHAIN_AUTH_CIPHER,
224ed19f0dSVikas Gupta 	BCMFS_SYM_CHAIN_AEAD,
234ed19f0dSVikas Gupta 	BCMFS_SYM_CHAIN_NOT_SUPPORTED
244ed19f0dSVikas Gupta };
254ed19f0dSVikas Gupta 
264ed19f0dSVikas Gupta /* BCMFS_SYM crypto private session structure */
27*27595cd8STyler Retzlaff struct __rte_cache_aligned bcmfs_sym_session {
284ed19f0dSVikas Gupta 	enum bcmfs_sym_chain_order chain_order;
294ed19f0dSVikas Gupta 
304ed19f0dSVikas Gupta 	/* Cipher Parameters */
314ed19f0dSVikas Gupta 	struct {
324ed19f0dSVikas Gupta 		enum rte_crypto_cipher_operation op;
334ed19f0dSVikas Gupta 		/* Cipher operation */
344ed19f0dSVikas Gupta 		enum rte_crypto_cipher_algorithm algo;
354ed19f0dSVikas Gupta 		/* Cipher algorithm */
364ed19f0dSVikas Gupta 		struct {
374ed19f0dSVikas Gupta 			uint8_t data[BCMFS_MAX_KEY_SIZE];
384ed19f0dSVikas Gupta 			size_t length;
394ed19f0dSVikas Gupta 		} key;
404ed19f0dSVikas Gupta 		struct {
414ed19f0dSVikas Gupta 			uint16_t offset;
424ed19f0dSVikas Gupta 			uint16_t length;
434ed19f0dSVikas Gupta 		} iv;
444ed19f0dSVikas Gupta 	} cipher;
454ed19f0dSVikas Gupta 
464ed19f0dSVikas Gupta 	/* Authentication Parameters */
474ed19f0dSVikas Gupta 	struct {
484ed19f0dSVikas Gupta 		enum rte_crypto_auth_operation op;
494ed19f0dSVikas Gupta 		/* Auth operation */
504ed19f0dSVikas Gupta 		enum rte_crypto_auth_algorithm algo;
514ed19f0dSVikas Gupta 		/* Auth algorithm */
524ed19f0dSVikas Gupta 
534ed19f0dSVikas Gupta 		struct {
544ed19f0dSVikas Gupta 			uint8_t data[BCMFS_MAX_KEY_SIZE];
554ed19f0dSVikas Gupta 			size_t length;
564ed19f0dSVikas Gupta 		} key;
574ed19f0dSVikas Gupta 		struct {
584ed19f0dSVikas Gupta 			uint16_t offset;
594ed19f0dSVikas Gupta 			uint16_t length;
604ed19f0dSVikas Gupta 		} iv;
614ed19f0dSVikas Gupta 
624ed19f0dSVikas Gupta 		uint16_t digest_length;
634ed19f0dSVikas Gupta 	} auth;
644ed19f0dSVikas Gupta 
654ed19f0dSVikas Gupta 	/* Aead Parameters */
664ed19f0dSVikas Gupta 	struct {
674ed19f0dSVikas Gupta 		enum rte_crypto_aead_operation op;
684ed19f0dSVikas Gupta 		/* AEAD operation */
694ed19f0dSVikas Gupta 		enum rte_crypto_aead_algorithm algo;
704ed19f0dSVikas Gupta 		 /* AEAD algorithm */
714ed19f0dSVikas Gupta 		struct {
724ed19f0dSVikas Gupta 			uint8_t data[BCMFS_MAX_KEY_SIZE];
734ed19f0dSVikas Gupta 			size_t length;
744ed19f0dSVikas Gupta 		} key;
754ed19f0dSVikas Gupta 		struct {
764ed19f0dSVikas Gupta 			uint16_t offset;
774ed19f0dSVikas Gupta 			uint16_t length;
784ed19f0dSVikas Gupta 		} iv;
794ed19f0dSVikas Gupta 
804ed19f0dSVikas Gupta 		uint16_t digest_length;
814ed19f0dSVikas Gupta 
824ed19f0dSVikas Gupta 		uint16_t aad_length;
834ed19f0dSVikas Gupta 	} aead;
844ed19f0dSVikas Gupta 
854ed19f0dSVikas Gupta 	bool cipher_first;
86*27595cd8STyler Retzlaff };
874ed19f0dSVikas Gupta 
884ed19f0dSVikas Gupta int
894ed19f0dSVikas Gupta bcmfs_process_crypto_op(struct rte_crypto_op *op,
904ed19f0dSVikas Gupta 			struct bcmfs_sym_session *sess,
914ed19f0dSVikas Gupta 			struct bcmfs_sym_request *req);
924ed19f0dSVikas Gupta 
934ed19f0dSVikas Gupta int
944ed19f0dSVikas Gupta bcmfs_sym_session_configure(struct rte_cryptodev *dev,
954ed19f0dSVikas Gupta 			    struct rte_crypto_sym_xform *xform,
96bdce2564SAkhil Goyal 			    struct rte_cryptodev_sym_session *sess);
974ed19f0dSVikas Gupta 
984ed19f0dSVikas Gupta void
994ed19f0dSVikas Gupta bcmfs_sym_session_clear(struct rte_cryptodev *dev,
1004ed19f0dSVikas Gupta 			struct rte_cryptodev_sym_session  *sess);
1014ed19f0dSVikas Gupta 
1024ed19f0dSVikas Gupta unsigned int
1034ed19f0dSVikas Gupta bcmfs_sym_session_get_private_size(struct rte_cryptodev *dev __rte_unused);
1044ed19f0dSVikas Gupta 
1054ed19f0dSVikas Gupta struct bcmfs_sym_session *
1064ed19f0dSVikas Gupta bcmfs_sym_get_session(struct rte_crypto_op *op);
1074ed19f0dSVikas Gupta 
1084ed19f0dSVikas Gupta #endif /* _BCMFS_SYM_SESSION_H_ */
109