Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
ksz8051.h
00001 /** 00002 * @file ksz8051.h 00003 * @brief KSZ8051 Ethernet PHY transceiver 00004 * 00005 * @section License 00006 * 00007 * Copyright (C) 2010-2017 Oryx Embedded SARL. All rights reserved. 00008 * 00009 * This file is part of CycloneTCP Open. 00010 * 00011 * This program is free software; you can redistribute it and/or 00012 * modify it under the terms of the GNU General Public License 00013 * as published by the Free Software Foundation; either version 2 00014 * of the License, or (at your option) any later version. 00015 * 00016 * This program is distributed in the hope that it will be useful, 00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00019 * GNU General Public License for more details. 00020 * 00021 * You should have received a copy of the GNU General Public License 00022 * along with this program; if not, write to the Free Software Foundation, 00023 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 00024 * 00025 * @author Oryx Embedded SARL (www.oryx-embedded.com) 00026 * @version 1.7.6 00027 **/ 00028 00029 #ifndef _KSZ8051_H 00030 #define _KSZ8051_H 00031 00032 //Dependencies 00033 #include "core/nic.h" 00034 00035 //PHY address 00036 #ifndef KSZ8051_PHY_ADDR 00037 #define KSZ8051_PHY_ADDR 1 00038 #elif (KSZ8051_PHY_ADDR < 0 || KSZ8051_PHY_ADDR > 31) 00039 #error KSZ8051_PHY_ADDR parameter is not valid 00040 #endif 00041 00042 //KSZ8051 registers 00043 #define KSZ8051_PHY_REG_BMCR 0x00 00044 #define KSZ8051_PHY_REG_BMSR 0x01 00045 #define KSZ8051_PHY_REG_PHYIDR1 0x02 00046 #define KSZ8051_PHY_REG_PHYIDR2 0x03 00047 #define KSZ8051_PHY_REG_ANAR 0x04 00048 #define KSZ8051_PHY_REG_ANLPAR 0x05 00049 #define KSZ8051_PHY_REG_ANER 0x06 00050 #define KSZ8051_PHY_REG_ANNPTR 0x07 00051 #define KSZ8051_PHY_REG_LPNPAR 0x08 00052 #define KSZ8051_PHY_REG_AFECON1 0x11 00053 #define KSZ8051_PHY_REG_RXERCTR 0x15 00054 #define KSZ8051_PHY_REG_OMSO 0x16 00055 #define KSZ8051_PHY_REG_OMSS 0x17 00056 #define KSZ8051_PHY_REG_EXCON 0x18 00057 #define KSZ8051_PHY_REG_ICSR 0x1B 00058 #define KSZ8051_PHY_REG_LINKMDCS 0x1D 00059 #define KSZ8051_PHY_REG_PHYCON1 0x1E 00060 #define KSZ8051_PHY_REG_PHYCON2 0x1F 00061 00062 //BMCR register 00063 #define BMCR_RESET (1 << 15) 00064 #define BMCR_LOOPBACK (1 << 14) 00065 #define BMCR_SPEED_SEL (1 << 13) 00066 #define BMCR_AN_EN (1 << 12) 00067 #define BMCR_POWER_DOWN (1 << 11) 00068 #define BMCR_ISOLATE (1 << 10) 00069 #define BMCR_RESTART_AN (1 << 9) 00070 #define BMCR_DUPLEX_MODE (1 << 8) 00071 #define BMCR_COL_TEST (1 << 7) 00072 00073 //BMSR register 00074 #define BMSR_100BT4 (1 << 15) 00075 #define BMSR_100BTX_FD (1 << 14) 00076 #define BMSR_100BTX (1 << 13) 00077 #define BMSR_10BT_FD (1 << 12) 00078 #define BMSR_10BT (1 << 11) 00079 #define BMSR_NO_PREAMBLE (1 << 6) 00080 #define BMSR_AN_COMPLETE (1 << 5) 00081 #define BMSR_REMOTE_FAULT (1 << 4) 00082 #define BMSR_AN_ABLE (1 << 3) 00083 #define BMSR_LINK_STATUS (1 << 2) 00084 #define BMSR_JABBER_DETECT (1 << 1) 00085 #define BMSR_EXTENDED_CAP (1 << 0) 00086 00087 //ANAR register 00088 #define ANAR_NEXT_PAGE (1 << 15) 00089 #define ANAR_REMOTE_FAULT (1 << 13) 00090 #define ANAR_PAUSE1 (1 << 11) 00091 #define ANAR_PAUSE0 (1 << 10) 00092 #define ANAR_100BT4 (1 << 9) 00093 #define ANAR_100BTX_FD (1 << 8) 00094 #define ANAR_100BTX (1 << 7) 00095 #define ANAR_10BT_FD (1 << 6) 00096 #define ANAR_10BT (1 << 5) 00097 #define ANAR_SELECTOR4 (1 << 4) 00098 #define ANAR_SELECTOR3 (1 << 3) 00099 #define ANAR_SELECTOR2 (1 << 2) 00100 #define ANAR_SELECTOR1 (1 << 1) 00101 #define ANAR_SELECTOR0 (1 << 0) 00102 00103 //ANLPAR register 00104 #define ANLPAR_NEXT_PAGE (1 << 15) 00105 #define ANLPAR_LP_ACK (1 << 14) 00106 #define ANLPAR_REMOTE_FAULT (1 << 13) 00107 #define ANLPAR_PAUSE1 (1 << 11) 00108 #define ANLPAR_PAUSE0 (1 << 10) 00109 #define ANLPAR_100BT4 (1 << 9) 00110 #define ANLPAR_100BTX_FD (1 << 8) 00111 #define ANLPAR_100BTX (1 << 7) 00112 #define ANLPAR_10BT_FD (1 << 6) 00113 #define ANLPAR_10BT (1 << 5) 00114 #define ANLPAR_SELECTOR4 (1 << 4) 00115 #define ANLPAR_SELECTOR3 (1 << 3) 00116 #define ANLPAR_SELECTOR2 (1 << 2) 00117 #define ANLPAR_SELECTOR1 (1 << 1) 00118 #define ANLPAR_SELECTOR0 (1 << 0) 00119 00120 //ANER register 00121 #define ANER_PAR_DET_FAULT (1 << 4) 00122 #define ANER_LP_NEXT_PAGE_ABLE (1 << 3) 00123 #define ANER_NEXT_PAGE_ABLE (1 << 2) 00124 #define ANER_PAGE_RECEIVED (1 << 1) 00125 #define ANER_LP_AN_ABLE (1 << 0) 00126 00127 //ANNPTR register 00128 #define ANNPTR_NEXT_PAGE (1 << 15) 00129 #define ANNPTR_MSG_PAGE (1 << 13) 00130 #define ANNPTR_ACK2 (1 << 12) 00131 #define ANNPTR_TOGGLE (1 << 11) 00132 #define ANNPTR_MESSAGE10 (1 << 10) 00133 #define ANNPTR_MESSAGE9 (1 << 9) 00134 #define ANNPTR_MESSAGE8 (1 << 8) 00135 #define ANNPTR_MESSAGE7 (1 << 7) 00136 #define ANNPTR_MESSAGE6 (1 << 6) 00137 #define ANNPTR_MESSAGE5 (1 << 5) 00138 #define ANNPTR_MESSAGE4 (1 << 4) 00139 #define ANNPTR_MESSAGE3 (1 << 3) 00140 #define ANNPTR_MESSAGE2 (1 << 2) 00141 #define ANNPTR_MESSAGE1 (1 << 1) 00142 #define ANNPTR_MESSAGE0 (1 << 0) 00143 00144 //LPNPAR register 00145 #define LPNPAR_NEXT_PAGE (1 << 15) 00146 #define LPNPAR_ACK (1 << 14) 00147 #define LPNPAR_MSG_PAGE (1 << 13) 00148 #define LPNPAR_ACK2 (1 << 12) 00149 #define LPNPAR_TOGGLE (1 << 11) 00150 #define LPNPAR_MESSAGE10 (1 << 10) 00151 #define LPNPAR_MESSAGE9 (1 << 9) 00152 #define LPNPAR_MESSAGE8 (1 << 8) 00153 #define LPNPAR_MESSAGE7 (1 << 7) 00154 #define LPNPAR_MESSAGE6 (1 << 6) 00155 #define LPNPAR_MESSAGE5 (1 << 5) 00156 #define LPNPAR_MESSAGE4 (1 << 4) 00157 #define LPNPAR_MESSAGE3 (1 << 3) 00158 #define LPNPAR_MESSAGE2 (1 << 2) 00159 #define LPNPAR_MESSAGE1 (1 << 1) 00160 #define LPNPAR_MESSAGE0 (1 << 0) 00161 00162 //AFECON1 register 00163 #define AFECON1_SLOW_OSC_MODE_EN (1 << 5) 00164 00165 //OMSO register 00166 #define OMSO_BCAST_OFF_OVERRIDE (1 << 9) 00167 #define OMSO_MII_BTB_OVERRIDE (1 << 7) 00168 #define OMSO_RMII_BTB_OVERRIDE (1 << 6) 00169 #define OMSO_NAND_TREE_OVERRIDE (1 << 5) 00170 #define OMSO_RMII_OVERRIDE (1 << 1) 00171 #define OMSO_MII_OVERRIDE (1 << 0) 00172 00173 //OMSS register 00174 #define OMSS_PHYAD2 (1 << 15) 00175 #define OMSS_PHYAD1 (1 << 14) 00176 #define OMSS_PHYAD0 (1 << 13) 00177 #define OMSS_BCAST_OFF_STATUS (1 << 9) 00178 #define OMSS_MII_BTB_STATUS (1 << 7) 00179 #define OMSS_RMII_BTB_STATUS (1 << 6) 00180 #define OMSS_NAND_TREE_STATUS (1 << 5) 00181 #define OMSS_RMII_STATUS (1 << 1) 00182 #define OMSS_MII_STATUS (1 << 0) 00183 00184 //EXCON register 00185 #define EXCON_EDPD_DIS (1 << 11) 00186 #define EXCON_100BTX_PREAMBLE_RES (1 << 10) 00187 #define EXCON_10BT_PREAMBLE_RES (1 << 6) 00188 00189 //ICSR register 00190 #define ICSR_JABBER_IE (1 << 15) 00191 #define ICSR_RECEIVE_ERROR_IE (1 << 14) 00192 #define ICSR_PAGE_RECEIVED_IE (1 << 13) 00193 #define ICSR_PAR_DET_FAULT_IE (1 << 12) 00194 #define ICSR_LP_ACK_IE (1 << 11) 00195 #define ICSR_LINK_DOWN_IE (1 << 10) 00196 #define ICSR_REMOTE_FAULT_IE (1 << 9) 00197 #define ICSR_LINK_UP_IE (1 << 8) 00198 #define ICSR_JABBER_IF (1 << 7) 00199 #define ICSR_RECEIVE_ERROR_IF (1 << 6) 00200 #define ICSR_PAGE_RECEIVED_IF (1 << 5) 00201 #define ICSR_PAR_DET_FAULT_IF (1 << 4) 00202 #define ICSR_LP_ACK_IF (1 << 3) 00203 #define ICSR_LINK_DOWN_IF (1 << 2) 00204 #define ICSR_REMOTE_FAULT_IF (1 << 1) 00205 #define ICSR_LINK_UP_IF (1 << 0) 00206 00207 //LINKMDCS register 00208 #define LINKMDCS_CABLE_DIAG_EN (1 << 15) 00209 #define LINKMDCS_CABLE_DIAG_RES1 (1 << 14) 00210 #define LINKMDCS_CABLE_DIAG_RES0 (1 << 13) 00211 #define LINKMDCS_SHORT_CABLE (1 << 12) 00212 #define LINKMDCS_CABLE_FAULT_CNT8 (1 << 8) 00213 #define LINKMDCS_CABLE_FAULT_CNT7 (1 << 7) 00214 #define LINKMDCS_CABLE_FAULT_CNT6 (1 << 6) 00215 #define LINKMDCS_CABLE_FAULT_CNT5 (1 << 5) 00216 #define LINKMDCS_CABLE_FAULT_CNT4 (1 << 4) 00217 #define LINKMDCS_CABLE_FAULT_CNT3 (1 << 3) 00218 #define LINKMDCS_CABLE_FAULT_CNT2 (1 << 2) 00219 #define LINKMDCS_CABLE_FAULT_CNT1 (1 << 1) 00220 #define LINKMDCS_CABLE_FAULT_CNT0 (1 << 0) 00221 00222 //PHYCON1 register 00223 #define PHYCON1_PAUSE_EN (1 << 9) 00224 #define PHYCON1_LINK_STATUS (1 << 8) 00225 #define PHYCON1_POL_STATUS (1 << 7) 00226 #define PHYCON1_MDIX_STATE (1 << 5) 00227 #define PHYCON1_ENERGY_DETECT (1 << 4) 00228 #define PHYCON1_ISOLATE (1 << 3) 00229 #define PHYCON1_OP_MODE2 (1 << 2) 00230 #define PHYCON1_OP_MODE1 (1 << 1) 00231 #define PHYCON1_OP_MODE0 (1 << 0) 00232 00233 //Operation mode indication 00234 #define PHYCON1_OP_MODE_MASK (7 << 0) 00235 #define PHYCON1_OP_MODE_AN (0 << 0) 00236 #define PHYCON1_OP_MODE_10BT (1 << 0) 00237 #define PHYCON1_OP_MODE_100BTX (2 << 0) 00238 #define PHYCON1_OP_MODE_10BT_FD (5 << 0) 00239 #define PHYCON1_OP_MODE_100BTX_FD (6 << 0) 00240 00241 //PHYCON2 register 00242 #define PHYCON2_HP_MDIX (1 << 15) 00243 #define PHYCON2_MDIX_SEL (1 << 14) 00244 #define PHYCON2_PAIR_SWAP_DIS (1 << 13) 00245 #define PHYCON2_FORCE_LINK (1 << 11) 00246 #define PHYCON2_POWER_SAVING (1 << 10) 00247 #define PHYCON2_INT_LEVEL (1 << 9) 00248 #define PHYCON2_JABBER_EN (1 << 8) 00249 #define PHYCON2_RMII_REF_CLK_SEL (1 << 7) 00250 #define PHYCON2_LED_MODE1 (1 << 5) 00251 #define PHYCON2_LED_MODE0 (1 << 4) 00252 #define PHYCON2_TX_DIS (1 << 3) 00253 #define PHYCON2_REMOTE_LOOPBACK (1 << 2) 00254 #define PHYCON2_SQE_TEST_EN (1 << 1) 00255 #define PHYCON2_SCRAMBLER_DIS (1 << 0) 00256 00257 //KSZ8051 Ethernet PHY driver 00258 extern const PhyDriver ksz8051PhyDriver; 00259 00260 //KSZ8051 related functions 00261 error_t ksz8051Init(NetInterface *interface); 00262 00263 void ksz8051Tick(NetInterface *interface); 00264 00265 void ksz8051EnableIrq(NetInterface *interface); 00266 void ksz8051DisableIrq(NetInterface *interface); 00267 00268 void ksz8051EventHandler(NetInterface *interface); 00269 00270 void ksz8051WritePhyReg(NetInterface *interface, uint8_t address, uint16_t data); 00271 uint16_t ksz8051ReadPhyReg(NetInterface *interface, uint8_t address); 00272 00273 void ksz8051DumpPhyReg(NetInterface *interface); 00274 00275 #endif 00276
Generated on Tue Jul 12 2022 17:10:14 by
1.7.2