/** * Copyright (C) 2016 CSI Project. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef _CSI_ETH_PHY_H_ #define _CSI_ETH_PHY_H_ #include "drv_eth.h" #ifdef __cplusplus extern "C" { #endif typedef void *eth_phy_handle_t; #define CSI_ETH_PHY_API_VERSION CSI_ETH_VERSION_MAJOR_MINOR(2,1) /* API version */ #define _CSI_Driver_ETH_PHY_(n) Driver_ETH_PHY##n #define CSI_Driver_ETH_PHY_(n) _CSI_Driver_ETH_PHY_(n) /****** Ethernet PHY Mode *****/ #define CSI_ETH_PHY_SPEED_Pos 0 #define CSI_ETH_PHY_SPEED_Msk (3UL << CSI_ETH_PHY_SPEED_Pos) #define CSI_ETH_PHY_SPEED_10M (CSI_ETH_SPEED_10M << CSI_ETH_PHY_SPEED_Pos) ///< 10 Mbps link speed #define CSI_ETH_PHY_SPEED_100M (CSI_ETH_SPEED_100M << CSI_ETH_PHY_SPEED_Pos) ///< 100 Mbps link speed #define CSI_ETH_PHY_SPEED_1G (CSI_ETH_SPEED_1G << CSI_ETH_PHY_SPEED_Pos) ///< 1 Gpbs link speed #define CSI_ETH_PHY_DUPLEX_Pos 2 #define CSI_ETH_PHY_DUPLEX_Msk (1UL << CSI_ETH_PHY_DUPLEX_Pos) #define CSI_ETH_PHY_DUPLEX_HALF (CSI_ETH_DUPLEX_HALF << CSI_ETH_PHY_DUPLEX_Pos) ///< Half duplex link #define CSI_ETH_PHY_DUPLEX_FULL (CSI_ETH_DUPLEX_FULL << CSI_ETH_PHY_DUPLEX_Pos) ///< Full duplex link #define CSI_ETH_PHY_AUTO_NEGOTIATE (1UL << 3) ///< Auto Negotiation mode #define CSI_ETH_PHY_LOOPBACK (1UL << 4) ///< Loop-back test mode #define CSI_ETH_PHY_ISOLATE (1UL << 5) ///< Isolate PHY from MII/RMII interface typedef int32_t (*csi_eth_phy_read_t) (uint8_t phy_addr, uint8_t reg_addr, uint16_t *data); ///< Read Ethernet PHY Register. typedef int32_t (*csi_eth_phy_write_t) (uint8_t phy_addr, uint8_t reg_addr, uint16_t data); ///< Write Ethernet PHY Register. typedef struct { csi_eth_phy_read_t phy_read; csi_eth_phy_write_t phy_write; eth_link_info_t link_info; }eth_phy_priv_t; // Function documentation /** \brief Get driver version. \param[in] handle ethernet phy handle \return driver version */ csi_drv_version_t csi_eth_phy_get_version(eth_phy_handle_t handle); /** \brief Initialize Ethernet PHY Device. \param[in] fn_read \param[in] fn_write \return ethernet phy handle */ eth_phy_handle_t csi_eth_phy_initialize(csi_eth_phy_read_t fn_read, csi_eth_phy_write_t fn_write); /** \brief De-initialize Ethernet PHY Device. \param[in] handle ethernet phy handle \return error code */ int32_t csi_eth_phy_uninitialize(eth_phy_handle_t handle); /** \brief Control Ethernet PHY Device Power. \param[in] handle ethernet phy handle \param[in] state Power state \return error code */ int32_t csi_eth_phy_power_control(eth_phy_handle_t handle, eth_power_state_t state); /** \brief Set Ethernet Media Interface. \param[in] handle ethernet phy handle \param[in] interface Media Interface type \return error code */ int32_t csi_eth_phy_set_interface(eth_phy_handle_t handle, uint32_t interface); /** \brief Set Ethernet PHY Device Operation mode. \param[in] handle ethernet phy handle \param[in] mode Operation Mode \return error code */ int32_t csi_eth_phy_set_mode(eth_phy_handle_t handle, uint32_t mode); /** \brief Get Ethernet PHY Device Link state. \param[in] handle ethernet phy handle \return current link status \ref eth_link_state_t */ eth_link_state_t csi_eth_phy_get_linkstate(eth_phy_handle_t handle); /** \brief Get Ethernet PHY Device Link information. \param[in] handle ethernet phy handle \return current link parameters \ref eth_link_info_t */ eth_link_info_t csi_eth_phy_get_linkinfo(eth_phy_handle_t handle); #ifdef __cplusplus } #endif #endif