mirror of
https://github.com/torvalds/linux.git
synced 2024-12-01 08:31:37 +00:00
a868b486cb
Add MACsec support. The MACsec block has four TX SCs and four RX SCs. The driver supports up to four SecY. Each SecY with one TX SC and one RX SC. The RX SCs can have two keys, key A and key B, written in hardware and enabled at the same time. The TX SCs can have two keys written in hardware, but only one can be active at a given time. On TX, the SC is selected using the MAC source address. Due of this selection mechanism, each offloaded netdev must have a unique MAC address. On RX, the SC is selected by SCI(found in SecTAG or calculated using MAC SA), or using RX SC 0 as implicit. Signed-off-by: Radu Pirea (NXP OSS) <radu-nicolae.pirea@oss.nxp.com> Signed-off-by: David S. Miller <davem@davemloft.net>
63 lines
1.3 KiB
C
63 lines
1.3 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/* NXP C45 PHY driver header file
|
|
* Copyright 2023 NXP
|
|
* Author: Radu Pirea <radu-nicolae.pirea@oss.nxp.com>
|
|
*/
|
|
|
|
#include <linux/ptp_clock_kernel.h>
|
|
|
|
#define VEND1_PORT_FUNC_ENABLES 0x8048
|
|
|
|
struct nxp_c45_macsec;
|
|
|
|
struct nxp_c45_phy {
|
|
const struct nxp_c45_phy_data *phy_data;
|
|
struct phy_device *phydev;
|
|
struct mii_timestamper mii_ts;
|
|
struct ptp_clock *ptp_clock;
|
|
struct ptp_clock_info caps;
|
|
struct sk_buff_head tx_queue;
|
|
struct sk_buff_head rx_queue;
|
|
/* used to access the PTP registers atomic */
|
|
struct mutex ptp_lock;
|
|
int hwts_tx;
|
|
int hwts_rx;
|
|
u32 tx_delay;
|
|
u32 rx_delay;
|
|
struct timespec64 extts_ts;
|
|
int extts_index;
|
|
bool extts;
|
|
struct nxp_c45_macsec *macsec;
|
|
};
|
|
|
|
#if IS_ENABLED(CONFIG_MACSEC)
|
|
int nxp_c45_macsec_config_init(struct phy_device *phydev);
|
|
int nxp_c45_macsec_probe(struct phy_device *phydev);
|
|
void nxp_c45_macsec_remove(struct phy_device *phydev);
|
|
void nxp_c45_handle_macsec_interrupt(struct phy_device *phydev,
|
|
irqreturn_t *ret);
|
|
#else
|
|
static inline
|
|
int nxp_c45_macsec_config_init(struct phy_device *phydev)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline
|
|
int nxp_c45_macsec_probe(struct phy_device *phydev)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline
|
|
void nxp_c45_macsec_remove(struct phy_device *phydev)
|
|
{
|
|
}
|
|
|
|
static inline
|
|
void nxp_c45_handle_macsec_interrupt(struct phy_device *phydev,
|
|
irqreturn_t *ret)
|
|
{
|
|
}
|
|
#endif
|