125 lines
4.3 KiB
C
125 lines
4.3 KiB
C
|
/**
|
||
|
* 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
|
||
|
|