Line data Source code
1 0 : /* 2 : * Copyright (c) 2023 PHOENIX CONTACT Electronics GmbH 3 : * 4 : * SPDX-License-Identifier: Apache-2.0 5 : */ 6 : 7 : #ifndef ZEPHYR_INCLUDE_DRIVERS_ETH_ADIN2111_H__ 8 : #define ZEPHYR_INCLUDE_DRIVERS_ETH_ADIN2111_H__ 9 : 10 : #include <stdint.h> 11 : #include <zephyr/kernel.h> 12 : #include <zephyr/device.h> 13 : 14 : #ifdef __cplusplus 15 : extern "C" { 16 : #endif 17 : 18 : /** 19 : * @brief Locks device access 20 : * 21 : * @param[in] dev ADIN2111 device. 22 : * @param timeout Waiting period to lock the device, 23 : * or one of the special values K_NO_WAIT and 24 : * K_FOREVER. 25 : * 26 : * @retval 0 Device locked. 27 : * @retval -EBUSY Returned without waiting. 28 : * @retval -EAGAIN Waiting period timed out. 29 : */ 30 1 : int eth_adin2111_lock(const struct device *dev, k_timeout_t timeout); 31 : 32 : /** 33 : * @brief Unlocks device access 34 : * 35 : * @param[in] dev ADIN2111 device. 36 : * 37 : * @retval 0 Device unlocked. 38 : * @retval -EPERM The current thread does not own the device lock. 39 : * @retval -EINVAL The device is not locked. 40 : */ 41 1 : int eth_adin2111_unlock(const struct device *dev); 42 : 43 : /** 44 : * @brief Writes host MAC interface register over SPI 45 : * 46 : * @note The caller is responsible for device lock. 47 : * Shall not be called from ISR. 48 : * 49 : * @param[in] dev ADIN2111 device. 50 : * @param reg Register address. 51 : * @param val Value to write. 52 : * 53 : * @retval 0 Successful write. 54 : * @retval <0 Error, a negative errno code. 55 : */ 56 1 : int eth_adin2111_reg_write(const struct device *dev, const uint16_t reg, uint32_t val); 57 : 58 : /** 59 : * @brief Reads host MAC interface register over SPI 60 : * 61 : * @note The caller is responsible for device lock. 62 : * Shall not be called from ISR. 63 : * 64 : * @param[in] dev ADIN2111 device. 65 : * @param reg Register address. 66 : * @param[out] val Read value output. 67 : * 68 : * @retval 0 Successful write. 69 : * @retval <0 Error, a negative errno code. 70 : */ 71 1 : int eth_adin2111_reg_read(const struct device *dev, const uint16_t reg, uint32_t *val); 72 : 73 : /** 74 : * @brief Update host MAC interface register over SPI 75 : * 76 : * @note The caller is responsible for device lock. 77 : * Shall not be called from ISR. 78 : * 79 : * @param[in] dev ADIN2111 device. 80 : * @param reg Register address. 81 : * @param mask Bitmask for bits that may be modified. 82 : * @param data Data to apply in the masked range. 83 : * 84 : * @retval 0 Successful write. 85 : * @retval <0 Error, a negative errno code. 86 : */ 87 1 : int eth_adin2111_reg_update(const struct device *dev, const uint16_t reg, 88 : uint32_t mask, uint32_t data); 89 : 90 : /** 91 : * @brief Reset both the MAC and PHY. 92 : * 93 : * @param[in] dev ADIN2111 device. 94 : * @param delay Delay in milliseconds. 95 : * 96 : * @note The caller is responsible for device lock. 97 : * Shall not be called from ISR. 98 : * 99 : * @retval 0 Successful write. 100 : * @retval <0 Error, a negative errno code. 101 : */ 102 1 : int eth_adin2111_sw_reset(const struct device *dev, uint16_t delay); 103 : 104 : /** 105 : * @brief Reset the MAC device. Note that PHY 1 must be out of software power-down for the MAC 106 : * subsystem reset to take effect. 107 : * 108 : * @note The caller is responsible for device lock. 109 : * Shall not be called from ISR. 110 : * 111 : * @param[in] dev ADIN2111 device. 112 : * 113 : * @retval 0 Successful write. 114 : * @retval <0 Error, a negative errno code. 115 : */ 116 1 : int eth_adin2111_mac_reset(const struct device *dev); 117 : 118 : /** 119 : * @brief Enable/disable the forwarding (to host) of broadcast frames. Frames who's DA 120 : * doesn't match are dropped. 121 : * 122 : * @note The caller is responsible for device lock. 123 : * Shall not be called from ISR. 124 : * 125 : * @param[in] dev ADIN2111 device. 126 : * @param enable Set to 0 to disable and to nonzero to enable. 127 : * 128 : * @retval 0 Successful write. 129 : * @retval <0 Error, a negative errno code. 130 : */ 131 1 : int eth_adin2111_broadcast_filter(const struct device *dev, bool enable); 132 : 133 : /** 134 : * @brief Get the port-related net_if reference. 135 : * 136 : * @param[in] dev ADIN2111 device. 137 : * @param port_idx Port index. 138 : * 139 : * @retval a struct net_if pointer, or NULL on error. 140 : */ 141 1 : struct net_if *eth_adin2111_get_iface(const struct device *dev, const uint16_t port_idx); 142 : 143 : #ifdef __cplusplus 144 : } 145 : #endif 146 : 147 : #endif /* ZEPHYR_INCLUDE_DRIVERS_ETH_ADIN2111_H__ */