10#ifndef ZEPHYR_INCLUDE_NET_DSA_CORE_H_
11#define ZEPHYR_INCLUDE_NET_DSA_CORE_H_
31#if defined(CONFIG_DSA_PORT_MAX_COUNT)
32#define DSA_PORT_MAX_COUNT CONFIG_DSA_PORT_MAX_COUNT
34#define DSA_PORT_MAX_COUNT 0
50#define DSA_PORT_INST_INIT(port, n, cfg) \
51 NET_DEVICE_INIT_INSTANCE(CONCAT(dsa_, n, port), DEVICE_DT_NAME(port), DT_REG_ADDR(port), \
52 dsa_port_initialize, NULL, &dsa_switch_context_##n, cfg, \
53 CONFIG_ETH_INIT_PRIORITY, &dsa_eth_api, ETHERNET_L2, \
54 NET_L2_GET_CTX_TYPE(ETHERNET_L2), NET_ETH_MTU);
64#define DSA_SWITCH_INST_INIT(n, _dapi, data, fn) \
65 struct dsa_switch_context dsa_switch_context_##n = { \
69 .num_ports = DT_INST_CHILD_NUM_STATUS_OKAY(n), \
71 DT_INST_FOREACH_CHILD_STATUS_OKAY_VARGS(n, fn, n);
120#if defined(CONFIG_NET_L2_PTP) || defined(__DOXYGEN__)
152#if defined(CONFIG_NET_L2_PTP) || defined(__DOXYGEN__)
171int dsa_port_initialize(
const struct device *dev);
203int dsa_eth_init(
struct net_if *iface);
struct net_if * dsa_user_get_iface(struct net_if *iface, int port_idx)
Get network interface of a user port.
Public API for network interface.
state
Definition parser_state.h:29
Public APIs for Ethernet PHY drivers.
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
Runtime device structure (in ROM) per driver instance.
Definition device.h:510
Structure to provide DSA switch api callbacks - it is an augmented struct ethernet_api.
Definition dsa_core.h:101
void(* port_phylink_change)(const struct device *dev, struct phy_link_state *state, void *user_data)
Port link change.
Definition dsa_core.h:114
int(* switch_setup)(const struct dsa_switch_context *dsa_switch_ctx)
Switch setup.
Definition dsa_core.h:128
void(* port_generate_random_mac)(uint8_t *mac_addr)
Port generates random mac address.
Definition dsa_core.h:118
int(* port_init)(const struct device *dev)
Port init.
Definition dsa_core.h:111
int(* connect_tag_protocol)(struct dsa_switch_context *dsa_switch_ctx, int tag_proto)
Connect the switch to the tag protocol.
Definition dsa_core.h:131
int(* port_txtstamp)(const struct device *dev, struct net_pkt *pkt)
Port TX timestamp handling.
Definition dsa_core.h:125
Structure of DSA port configuration.
Definition dsa_core.h:137
const bool use_random_mac_addr
Use random mac address or not.
Definition dsa_core.h:141
const struct device * ptp_clock
PTP clock used on the port.
Definition dsa_core.h:157
void * prv_config
Instance specific config.
Definition dsa_core.h:160
const int port_idx
Port index.
Definition dsa_core.h:143
const int tag_proto
Tag protocol.
Definition dsa_core.h:149
const char * phy_mode
PHY mode.
Definition dsa_core.h:147
uint8_t mac_addr[6]
Port mac address.
Definition dsa_core.h:139
const struct device * ethernet_connection
Ethernet device connected to the port.
Definition dsa_core.h:151
const struct device * phy_dev
PHY device.
Definition dsa_core.h:145
DSA switch context data.
Definition dsa_core.h:74
void * tagger_data
DSA tagger data provided by instance when connecting to tag protocol.
Definition dsa_core.h:94
void * prv_data
Instance specific data.
Definition dsa_core.h:85
struct net_if * iface_conduit
Pointer to DSA conduit network interface.
Definition dsa_core.h:79
struct dsa_api * dapi
DSA specific API callbacks.
Definition dsa_core.h:82
uint8_t init_ports
Number of initialized ports in the DSA switch.
Definition dsa_core.h:91
struct net_if * iface_user[DSA_PORT_MAX_COUNT]
Pointers to all DSA user network interfaces.
Definition dsa_core.h:76
uint8_t num_ports
Number of ports in the DSA switch.
Definition dsa_core.h:88
Ethernet L2 API operations.
Definition ethernet.h:532
Network Interface structure.
Definition net_if.h:726
Network packet.
Definition net_pkt.h:91
Link state.
Definition phy.h:93