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