1 /* 2 * Copyright (c) 2013-2020 ARM Limited. All rights reserved. 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 * 6 * Licensed under the Apache License, Version 2.0 (the License); you may 7 * not use this file except in compliance with the License. 8 * You may obtain a copy of the License at 9 * 10 * www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an AS IS BASIS, WITHOUT 14 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 * 18 * $Date: 24. January 2020 19 * $Revision: V2.2 20 * 21 * Project: Ethernet PHY (Physical Transceiver) Driver definitions 22 */ 23 24 /* History: 25 * Version 2.2 26 * Removed volatile from ARM_ETH_LINK_INFO 27 * Version 2.1 28 * ARM_ETH_LINK_INFO made volatile 29 * Version 2.0 30 * changed parameter "mode" in function ARM_ETH_PHY_SetMode 31 * Changed prefix ARM_DRV -> ARM_DRIVER 32 * Changed return values of some functions to int32_t 33 * Version 1.10 34 * Namespace prefix ARM_ added 35 * Version 1.00 36 * Initial release 37 */ 38 39 #ifndef DRIVER_ETH_PHY_H_ 40 #define DRIVER_ETH_PHY_H_ 41 42 #ifdef __cplusplus 43 extern "C" 44 { 45 #endif 46 47 #include "Driver_ETH.h" 48 49 #define ARM_ETH_PHY_API_VERSION ARM_DRIVER_VERSION_MAJOR_MINOR(2,2) /* API version */ 50 51 52 #define _ARM_Driver_ETH_PHY_(n) Driver_ETH_PHY##n 53 #define ARM_Driver_ETH_PHY_(n) _ARM_Driver_ETH_PHY_(n) 54 55 56 /****** Ethernet PHY Mode *****/ 57 #define ARM_ETH_PHY_SPEED_Pos 0 58 #define ARM_ETH_PHY_SPEED_Msk (3UL << ARM_ETH_PHY_SPEED_Pos) 59 #define ARM_ETH_PHY_SPEED_10M (ARM_ETH_SPEED_10M << ARM_ETH_PHY_SPEED_Pos) ///< 10 Mbps link speed 60 #define ARM_ETH_PHY_SPEED_100M (ARM_ETH_SPEED_100M << ARM_ETH_PHY_SPEED_Pos) ///< 100 Mbps link speed 61 #define ARM_ETH_PHY_SPEED_1G (ARM_ETH_SPEED_1G << ARM_ETH_PHY_SPEED_Pos) ///< 1 Gpbs link speed 62 #define ARM_ETH_PHY_DUPLEX_Pos 2 63 #define ARM_ETH_PHY_DUPLEX_Msk (1UL << ARM_ETH_PHY_DUPLEX_Pos) 64 #define ARM_ETH_PHY_DUPLEX_HALF (ARM_ETH_DUPLEX_HALF << ARM_ETH_PHY_DUPLEX_Pos) ///< Half duplex link 65 #define ARM_ETH_PHY_DUPLEX_FULL (ARM_ETH_DUPLEX_FULL << ARM_ETH_PHY_DUPLEX_Pos) ///< Full duplex link 66 #define ARM_ETH_PHY_AUTO_NEGOTIATE (1UL << 3) ///< Auto Negotiation mode 67 #define ARM_ETH_PHY_LOOPBACK (1UL << 4) ///< Loop-back test mode 68 #define ARM_ETH_PHY_ISOLATE (1UL << 5) ///< Isolate PHY from MII/RMII interface 69 70 71 // Function documentation 72 /** 73 \fn ARM_DRIVER_VERSION ARM_ETH_PHY_GetVersion (void) 74 \brief Get driver version. 75 \return \ref ARM_DRIVER_VERSION 76 */ 77 /** 78 \fn int32_t ARM_ETH_PHY_Initialize (ARM_ETH_PHY_Read_t fn_read, 79 ARM_ETH_PHY_Write_t fn_write) 80 \brief Initialize Ethernet PHY Device. 81 \param[in] fn_read Pointer to \ref ARM_ETH_MAC_PHY_Read 82 \param[in] fn_write Pointer to \ref ARM_ETH_MAC_PHY_Write 83 \return \ref execution_status 84 */ 85 /** 86 \fn int32_t ARM_ETH_PHY_Uninitialize (void) 87 \brief De-initialize Ethernet PHY Device. 88 \return \ref execution_status 89 */ 90 /** 91 \fn int32_t ARM_ETH_PHY_PowerControl (ARM_POWER_STATE state) 92 \brief Control Ethernet PHY Device Power. 93 \param[in] state Power state 94 \return \ref execution_status 95 */ 96 /** 97 \fn int32_t ARM_ETH_PHY_SetInterface (uint32_t interface) 98 \brief Set Ethernet Media Interface. 99 \param[in] interface Media Interface type 100 \return \ref execution_status 101 */ 102 /** 103 \fn int32_t ARM_ETH_PHY_SetMode (uint32_t mode) 104 \brief Set Ethernet PHY Device Operation mode. 105 \param[in] mode Operation Mode 106 \return \ref execution_status 107 */ 108 /** 109 \fn ARM_ETH_LINK_STATE ARM_ETH_PHY_GetLinkState (void) 110 \brief Get Ethernet PHY Device Link state. 111 \return current link status \ref ARM_ETH_LINK_STATE 112 */ 113 /** 114 \fn ARM_ETH_LINK_INFO ARM_ETH_PHY_GetLinkInfo (void) 115 \brief Get Ethernet PHY Device Link information. 116 \return current link parameters \ref ARM_ETH_LINK_INFO 117 */ 118 119 120 typedef int32_t (*ARM_ETH_PHY_Read_t) (uint8_t phy_addr, uint8_t reg_addr, uint16_t *data); ///< Pointer to \ref ARM_ETH_MAC_PHY_Read : Read Ethernet PHY Register. 121 typedef int32_t (*ARM_ETH_PHY_Write_t) (uint8_t phy_addr, uint8_t reg_addr, uint16_t data); ///< Pointer to \ref ARM_ETH_MAC_PHY_Write : Write Ethernet PHY Register. 122 123 124 /** 125 \brief Access structure of the Ethernet PHY Driver 126 */ 127 typedef struct _ARM_DRIVER_ETH_PHY { 128 ARM_DRIVER_VERSION (*GetVersion) (void); ///< Pointer to \ref ARM_ETH_PHY_GetVersion : Get driver version. 129 int32_t (*Initialize) (ARM_ETH_PHY_Read_t fn_read, 130 ARM_ETH_PHY_Write_t fn_write); ///< Pointer to \ref ARM_ETH_PHY_Initialize : Initialize PHY Device. 131 int32_t (*Uninitialize) (void); ///< Pointer to \ref ARM_ETH_PHY_Uninitialize : De-initialize PHY Device. 132 int32_t (*PowerControl) (ARM_POWER_STATE state); ///< Pointer to \ref ARM_ETH_PHY_PowerControl : Control PHY Device Power. 133 int32_t (*SetInterface) (uint32_t interface); ///< Pointer to \ref ARM_ETH_PHY_SetInterface : Set Ethernet Media Interface. 134 int32_t (*SetMode) (uint32_t mode); ///< Pointer to \ref ARM_ETH_PHY_SetMode : Set Ethernet PHY Device Operation mode. 135 ARM_ETH_LINK_STATE (*GetLinkState) (void); ///< Pointer to \ref ARM_ETH_PHY_GetLinkState : Get Ethernet PHY Device Link state. 136 ARM_ETH_LINK_INFO (*GetLinkInfo) (void); ///< Pointer to \ref ARM_ETH_PHY_GetLinkInfo : Get Ethernet PHY Device Link information. 137 } const ARM_DRIVER_ETH_PHY; 138 139 #ifdef __cplusplus 140 } 141 #endif 142 143 #endif /* DRIVER_ETH_PHY_H_ */ 144