1232eeb1fSJakub Kicinski /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */
2232eeb1fSJakub Kicinski /* Copyright (C) 2019 Netronome Systems, Inc. */
3232eeb1fSJakub Kicinski
4232eeb1fSJakub Kicinski #ifndef NFP_CRYPTO_H
5232eeb1fSJakub Kicinski #define NFP_CRYPTO_H 1
6232eeb1fSJakub Kicinski
76a35ddc5SJakub Kicinski struct net_device;
86a35ddc5SJakub Kicinski struct nfp_net;
96a35ddc5SJakub Kicinski struct nfp_net_tls_resync_req;
106a35ddc5SJakub Kicinski
11c3991d39SDirk van der Merwe struct nfp_net_tls_offload_ctx {
12c3991d39SDirk van der Merwe __be32 fw_handle[2];
13c3991d39SDirk van der Merwe
14c0a4948eSJakub Kicinski u8 rx_end[0];
15c0a4948eSJakub Kicinski /* Tx only fields follow - Rx side does not have enough driver state
16c0a4948eSJakub Kicinski * to fit these
17c0a4948eSJakub Kicinski */
18c0a4948eSJakub Kicinski
19c3991d39SDirk van der Merwe u32 next_seq;
20c3991d39SDirk van der Merwe };
21c3991d39SDirk van der Merwe
22232eeb1fSJakub Kicinski #ifdef CONFIG_TLS_DEVICE
23232eeb1fSJakub Kicinski int nfp_net_tls_init(struct nfp_net *nn);
246a35ddc5SJakub Kicinski int nfp_net_tls_rx_resync_req(struct net_device *netdev,
256a35ddc5SJakub Kicinski struct nfp_net_tls_resync_req *req,
266a35ddc5SJakub Kicinski void *pkt, unsigned int pkt_len);
27232eeb1fSJakub Kicinski #else
nfp_net_tls_init(struct nfp_net * nn)28232eeb1fSJakub Kicinski static inline int nfp_net_tls_init(struct nfp_net *nn)
29232eeb1fSJakub Kicinski {
30232eeb1fSJakub Kicinski return 0;
31232eeb1fSJakub Kicinski }
326a35ddc5SJakub Kicinski
336a35ddc5SJakub Kicinski static inline int
nfp_net_tls_rx_resync_req(struct net_device * netdev,struct nfp_net_tls_resync_req * req,void * pkt,unsigned int pkt_len)346a35ddc5SJakub Kicinski nfp_net_tls_rx_resync_req(struct net_device *netdev,
356a35ddc5SJakub Kicinski struct nfp_net_tls_resync_req *req,
366a35ddc5SJakub Kicinski void *pkt, unsigned int pkt_len)
376a35ddc5SJakub Kicinski {
386a35ddc5SJakub Kicinski return -EOPNOTSUPP;
396a35ddc5SJakub Kicinski }
40232eeb1fSJakub Kicinski #endif
41232eeb1fSJakub Kicinski
42*57f273adSHuanhuan Wang /* IPsec related structures and functions */
43*57f273adSHuanhuan Wang struct nfp_ipsec_offload {
44*57f273adSHuanhuan Wang u32 seq_hi;
45*57f273adSHuanhuan Wang u32 seq_low;
46*57f273adSHuanhuan Wang u32 handle;
47*57f273adSHuanhuan Wang };
48*57f273adSHuanhuan Wang
49*57f273adSHuanhuan Wang #ifndef CONFIG_NFP_NET_IPSEC
nfp_net_ipsec_init(struct nfp_net * nn)50*57f273adSHuanhuan Wang static inline void nfp_net_ipsec_init(struct nfp_net *nn)
51*57f273adSHuanhuan Wang {
52*57f273adSHuanhuan Wang }
53*57f273adSHuanhuan Wang
nfp_net_ipsec_clean(struct nfp_net * nn)54*57f273adSHuanhuan Wang static inline void nfp_net_ipsec_clean(struct nfp_net *nn)
55*57f273adSHuanhuan Wang {
56*57f273adSHuanhuan Wang }
57*57f273adSHuanhuan Wang #else
58*57f273adSHuanhuan Wang void nfp_net_ipsec_init(struct nfp_net *nn);
59*57f273adSHuanhuan Wang void nfp_net_ipsec_clean(struct nfp_net *nn);
60*57f273adSHuanhuan Wang bool nfp_net_ipsec_tx_prep(struct nfp_net_dp *dp, struct sk_buff *skb,
61*57f273adSHuanhuan Wang struct nfp_ipsec_offload *offload_info);
62*57f273adSHuanhuan Wang int nfp_net_ipsec_rx(struct nfp_meta_parsed *meta, struct sk_buff *skb);
63*57f273adSHuanhuan Wang #endif
64*57f273adSHuanhuan Wang
65232eeb1fSJakub Kicinski #endif
66