1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /* Atlantic Network Driver
3 * Copyright (C) 2020 Marvell International Ltd.
9 #include <linux/netdevice.h>
10 #if IS_ENABLED(CONFIG_MACSEC)
12 #include "net/macsec.h"
16 #define AQ_MACSEC_MAX_SC 32
17 #define AQ_MACSEC_MAX_SA 32
19 enum aq_macsec_sc_sa
{
20 aq_macsec_sa_sc_4sa_8sc
,
21 aq_macsec_sa_sc_not_used
,
22 aq_macsec_sa_sc_2sa_16sc
,
23 aq_macsec_sa_sc_1sa_32sc
,
26 struct aq_macsec_common_stats
{
27 /* Ingress Common Counters */
31 u64 untagged_miss_pkts
;
37 u64 ctrl_prt_pass_pkts
;
38 u64 unctrl_prt_pass_pkts
;
39 u64 ctrl_prt_fail_pkts
;
40 u64 unctrl_prt_fail_pkts
;
44 u64 unctrl_hit_drop_redir
;
47 /* Egress Common Counters */
54 u64 unctrl_hit_drop_redir
;
58 /* Ingress SA Counters */
59 struct aq_macsec_rx_sa_stats
{
60 u64 untagged_hit_pkts
;
61 u64 ctrl_hit_drop_redir_pkts
;
74 /* Egress SA Counters */
75 struct aq_macsec_tx_sa_stats
{
76 u64 sa_hit_drop_redirect
;
77 u64 sa_protected2_pkts
;
78 u64 sa_protected_pkts
;
79 u64 sa_encrypted_pkts
;
82 /* Egress SC Counters */
83 struct aq_macsec_tx_sc_stats
{
84 u64 sc_protected_pkts
;
85 u64 sc_encrypted_pkts
;
86 u64 sc_protected_octets
;
87 u64 sc_encrypted_octets
;
90 struct aq_macsec_txsc
{
92 unsigned long tx_sa_idx_busy
;
93 const struct macsec_secy
*sw_secy
;
94 u8 tx_sa_key
[MACSEC_NUM_AN
][MACSEC_KEYID_LEN
];
95 struct aq_macsec_tx_sc_stats stats
;
96 struct aq_macsec_tx_sa_stats tx_sa_stats
[MACSEC_NUM_AN
];
99 struct aq_macsec_rxsc
{
101 unsigned long rx_sa_idx_busy
;
102 const struct macsec_secy
*sw_secy
;
103 const struct macsec_rx_sc
*sw_rxsc
;
104 u8 rx_sa_key
[MACSEC_NUM_AN
][MACSEC_KEYID_LEN
];
105 struct aq_macsec_rx_sa_stats rx_sa_stats
[MACSEC_NUM_AN
];
108 struct aq_macsec_cfg
{
109 enum aq_macsec_sc_sa sc_sa
;
110 /* Egress channel configuration */
111 unsigned long txsc_idx_busy
;
112 struct aq_macsec_txsc aq_txsc
[AQ_MACSEC_MAX_SC
];
113 /* Ingress channel configuration */
114 unsigned long rxsc_idx_busy
;
115 struct aq_macsec_rxsc aq_rxsc
[AQ_MACSEC_MAX_SC
];
116 /* Statistics / counters */
117 struct aq_macsec_common_stats stats
;
120 extern const struct macsec_ops aq_macsec_ops
;
122 int aq_macsec_init(struct aq_nic_s
*nic
);
123 void aq_macsec_free(struct aq_nic_s
*nic
);
124 int aq_macsec_enable(struct aq_nic_s
*nic
);
125 void aq_macsec_work(struct aq_nic_s
*nic
);
126 u64
*aq_macsec_get_stats(struct aq_nic_s
*nic
, u64
*data
);
127 int aq_macsec_rx_sa_cnt(struct aq_nic_s
*nic
);
128 int aq_macsec_tx_sc_cnt(struct aq_nic_s
*nic
);
129 int aq_macsec_tx_sa_cnt(struct aq_nic_s
*nic
);
133 #endif /* AQ_MACSEC_H */