|  | /* | 
|  | * Copyright (c) 2018 Intel Corporation. | 
|  | * | 
|  | * SPDX-License-Identifier: Apache-2.0 | 
|  | */ | 
|  |  | 
|  | /** | 
|  | * @file | 
|  | * @brief Ethernet Management interface public header | 
|  | */ | 
|  |  | 
|  | #ifndef ZEPHYR_INCLUDE_NET_ETHERNET_MGMT_H_ | 
|  | #define ZEPHYR_INCLUDE_NET_ETHERNET_MGMT_H_ | 
|  |  | 
|  | #include <net/ethernet.h> | 
|  | #include <net/net_mgmt.h> | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | extern "C" { | 
|  | #endif | 
|  |  | 
|  | /** | 
|  | * @brief Ethernet library | 
|  | * @defgroup ethernet_mgmt Ethernet Library | 
|  | * @ingroup networking | 
|  | * @{ | 
|  | */ | 
|  |  | 
|  | /** @cond INTERNAL_HIDDEN */ | 
|  |  | 
|  | #define _NET_ETHERNET_LAYER	NET_MGMT_LAYER_L2 | 
|  | #define _NET_ETHERNET_CODE	0x208 | 
|  | #define _NET_ETHERNET_BASE	(NET_MGMT_IFACE_BIT |			\ | 
|  | NET_MGMT_LAYER(_NET_ETHERNET_LAYER) |	\ | 
|  | NET_MGMT_LAYER_CODE(_NET_ETHERNET_CODE)) | 
|  | #define _NET_ETHERNET_EVENT	(_NET_ETHERNET_BASE | NET_MGMT_EVENT_BIT) | 
|  |  | 
|  | enum net_request_ethernet_cmd { | 
|  | NET_REQUEST_ETHERNET_CMD_SET_AUTO_NEGOTIATION = 1, | 
|  | NET_REQUEST_ETHERNET_CMD_SET_LINK, | 
|  | NET_REQUEST_ETHERNET_CMD_SET_DUPLEX, | 
|  | NET_REQUEST_ETHERNET_CMD_SET_MAC_ADDRESS, | 
|  | NET_REQUEST_ETHERNET_CMD_SET_QAV_PARAM, | 
|  | NET_REQUEST_ETHERNET_CMD_SET_QBV_PARAM, | 
|  | NET_REQUEST_ETHERNET_CMD_SET_QBU_PARAM, | 
|  | NET_REQUEST_ETHERNET_CMD_SET_TXTIME_PARAM, | 
|  | NET_REQUEST_ETHERNET_CMD_SET_PROMISC_MODE, | 
|  | NET_REQUEST_ETHERNET_CMD_GET_PRIORITY_QUEUES_NUM, | 
|  | NET_REQUEST_ETHERNET_CMD_GET_QAV_PARAM, | 
|  | NET_REQUEST_ETHERNET_CMD_GET_PORTS_NUM, | 
|  | NET_REQUEST_ETHERNET_CMD_GET_QBV_PARAM, | 
|  | NET_REQUEST_ETHERNET_CMD_GET_QBU_PARAM, | 
|  | NET_REQUEST_ETHERNET_CMD_GET_TXTIME_PARAM, | 
|  | }; | 
|  |  | 
|  | #define NET_REQUEST_ETHERNET_SET_AUTO_NEGOTIATION			\ | 
|  | (_NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_SET_AUTO_NEGOTIATION) | 
|  |  | 
|  | NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_SET_AUTO_NEGOTIATION); | 
|  |  | 
|  | #define NET_REQUEST_ETHERNET_SET_LINK					\ | 
|  | (_NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_SET_LINK) | 
|  |  | 
|  | NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_SET_LINK); | 
|  |  | 
|  | #define NET_REQUEST_ETHERNET_SET_DUPLEX					\ | 
|  | (_NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_SET_DUPLEX) | 
|  |  | 
|  | NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_SET_DUPLEX); | 
|  |  | 
|  | #define NET_REQUEST_ETHERNET_SET_MAC_ADDRESS				\ | 
|  | (_NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_SET_MAC_ADDRESS) | 
|  |  | 
|  | NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_SET_MAC_ADDRESS); | 
|  |  | 
|  | #define NET_REQUEST_ETHERNET_SET_QAV_PARAM				\ | 
|  | (_NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_SET_QAV_PARAM) | 
|  |  | 
|  | NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_SET_QAV_PARAM); | 
|  |  | 
|  | #define NET_REQUEST_ETHERNET_GET_PORTS_NUM				\ | 
|  | (_NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_GET_PORTS_NUM) | 
|  |  | 
|  | NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_GET_PORTS_NUM); | 
|  |  | 
|  | #define NET_REQUEST_ETHERNET_SET_QBV_PARAM				\ | 
|  | (_NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_SET_QBV_PARAM) | 
|  |  | 
|  | NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_SET_QBV_PARAM); | 
|  |  | 
|  | #define NET_REQUEST_ETHERNET_SET_QBU_PARAM				\ | 
|  | (_NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_SET_QBU_PARAM) | 
|  |  | 
|  | NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_SET_QBU_PARAM); | 
|  |  | 
|  | #define NET_REQUEST_ETHERNET_SET_TXTIME_PARAM				\ | 
|  | (_NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_SET_TXTIME_PARAM) | 
|  |  | 
|  | NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_SET_TXTIME_PARAM); | 
|  |  | 
|  | #define NET_REQUEST_ETHERNET_SET_PROMISC_MODE				\ | 
|  | (_NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_SET_PROMISC_MODE) | 
|  |  | 
|  | NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_SET_PROMISC_MODE); | 
|  |  | 
|  | #define NET_REQUEST_ETHERNET_GET_PRIORITY_QUEUES_NUM			\ | 
|  | (_NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_GET_PRIORITY_QUEUES_NUM) | 
|  |  | 
|  | NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_GET_PRIORITY_QUEUES_NUM); | 
|  |  | 
|  | #define NET_REQUEST_ETHERNET_GET_QAV_PARAM				\ | 
|  | (_NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_GET_QAV_PARAM) | 
|  |  | 
|  | NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_GET_QAV_PARAM); | 
|  |  | 
|  | #define NET_REQUEST_ETHERNET_GET_QBV_PARAM				\ | 
|  | (_NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_GET_QBV_PARAM) | 
|  |  | 
|  | NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_GET_QBV_PARAM); | 
|  |  | 
|  | #define NET_REQUEST_ETHERNET_GET_QBU_PARAM				\ | 
|  | (_NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_GET_QBU_PARAM) | 
|  |  | 
|  | NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_GET_QBU_PARAM); | 
|  |  | 
|  | #define NET_REQUEST_ETHERNET_GET_TXTIME_PARAM				\ | 
|  | (_NET_ETHERNET_BASE | NET_REQUEST_ETHERNET_CMD_GET_TXTIME_PARAM) | 
|  |  | 
|  | NET_MGMT_DEFINE_REQUEST_HANDLER(NET_REQUEST_ETHERNET_GET_TXTIME_PARAM); | 
|  |  | 
|  | struct net_eth_addr; | 
|  | struct ethernet_qav_param; | 
|  | struct ethernet_qbv_param; | 
|  | struct ethernet_qbu_param; | 
|  | struct ethernet_txtime_param; | 
|  |  | 
|  | struct ethernet_req_params { | 
|  | union { | 
|  | bool auto_negotiation; | 
|  | bool full_duplex; | 
|  | bool promisc_mode; | 
|  |  | 
|  | struct { | 
|  | bool link_10bt; | 
|  | bool link_100bt; | 
|  | bool link_1000bt; | 
|  | } l; | 
|  |  | 
|  | struct net_eth_addr mac_address; | 
|  |  | 
|  | struct ethernet_qav_param qav_param; | 
|  | struct ethernet_qbv_param qbv_param; | 
|  | struct ethernet_qbu_param qbu_param; | 
|  | struct ethernet_txtime_param txtime_param; | 
|  |  | 
|  | int priority_queues_num; | 
|  | int ports_num; | 
|  | }; | 
|  | }; | 
|  |  | 
|  | enum net_event_ethernet_cmd { | 
|  | NET_EVENT_ETHERNET_CMD_CARRIER_ON = 1, | 
|  | NET_EVENT_ETHERNET_CMD_CARRIER_OFF, | 
|  | NET_EVENT_ETHERNET_CMD_VLAN_TAG_ENABLED, | 
|  | NET_EVENT_ETHERNET_CMD_VLAN_TAG_DISABLED, | 
|  | }; | 
|  |  | 
|  | #define NET_EVENT_ETHERNET_CARRIER_ON					\ | 
|  | (_NET_ETHERNET_EVENT | NET_EVENT_ETHERNET_CMD_CARRIER_ON) | 
|  |  | 
|  | #define NET_EVENT_ETHERNET_CARRIER_OFF					\ | 
|  | (_NET_ETHERNET_EVENT | NET_EVENT_ETHERNET_CMD_CARRIER_OFF) | 
|  |  | 
|  | #define NET_EVENT_ETHERNET_VLAN_TAG_ENABLED				\ | 
|  | (_NET_ETHERNET_EVENT | NET_EVENT_ETHERNET_CMD_VLAN_TAG_ENABLED) | 
|  |  | 
|  | #define NET_EVENT_ETHERNET_VLAN_TAG_DISABLED				\ | 
|  | (_NET_ETHERNET_EVENT | NET_EVENT_ETHERNET_CMD_VLAN_TAG_DISABLED) | 
|  |  | 
|  | struct net_if; | 
|  |  | 
|  | /** @endcond */ | 
|  |  | 
|  | /** | 
|  | * @brief Raise CARRIER_ON event when Ethernet is connected. | 
|  | * | 
|  | * @param iface Ethernet network interface. | 
|  | */ | 
|  | #if defined(CONFIG_NET_L2_ETHERNET_MGMT) | 
|  | void ethernet_mgmt_raise_carrier_on_event(struct net_if *iface); | 
|  | #else | 
|  | static inline void ethernet_mgmt_raise_carrier_on_event(struct net_if *iface) | 
|  | { | 
|  | ARG_UNUSED(iface); | 
|  | } | 
|  | #endif | 
|  |  | 
|  | /** | 
|  | * @brief Raise CARRIER_OFF event when Ethernet is disconnected. | 
|  | * | 
|  | * @param iface Ethernet network interface. | 
|  | */ | 
|  | #if defined(CONFIG_NET_L2_ETHERNET_MGMT) | 
|  | void ethernet_mgmt_raise_carrier_off_event(struct net_if *iface); | 
|  | #else | 
|  | static inline void ethernet_mgmt_raise_carrier_off_event(struct net_if *iface) | 
|  | { | 
|  | ARG_UNUSED(iface); | 
|  | } | 
|  | #endif | 
|  |  | 
|  | /** | 
|  | * @brief Raise VLAN_ENABLED event when VLAN is enabled. | 
|  | * | 
|  | * @param iface Ethernet network interface. | 
|  | * @param tag VLAN tag which is enabled. | 
|  | */ | 
|  | #if defined(CONFIG_NET_L2_ETHERNET_MGMT) | 
|  | void ethernet_mgmt_raise_vlan_enabled_event(struct net_if *iface, uint16_t tag); | 
|  | #else | 
|  | static inline void ethernet_mgmt_raise_vlan_enabled_event(struct net_if *iface, | 
|  | uint16_t tag) | 
|  | { | 
|  | ARG_UNUSED(iface); | 
|  | ARG_UNUSED(tag); | 
|  | } | 
|  | #endif | 
|  |  | 
|  | /** | 
|  | * @brief Raise VLAN_DISABLED event when VLAN is disabled. | 
|  | * | 
|  | * @param iface Ethernet network interface. | 
|  | * @param tag VLAN tag which is disabled. | 
|  | */ | 
|  | #if defined(CONFIG_NET_L2_ETHERNET_MGMT) | 
|  | void ethernet_mgmt_raise_vlan_disabled_event(struct net_if *iface, | 
|  | uint16_t tag); | 
|  | #else | 
|  | static inline void ethernet_mgmt_raise_vlan_disabled_event(struct net_if *iface, | 
|  | uint16_t tag) | 
|  | { | 
|  | ARG_UNUSED(iface); | 
|  | ARG_UNUSED(tag); | 
|  | } | 
|  | #endif | 
|  |  | 
|  | /** | 
|  | * @} | 
|  | */ | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | } | 
|  | #endif | 
|  |  | 
|  | #endif /* ZEPHYR_INCLUDE_NET_ETHERNET_MGMT_H_ */ |