1/* 2 * @TAG(OTHER_GPL) 3 */ 4 5/*----------------------------------------------------------------------------+ 6| This source code is dual-licensed. You may use it under the terms of the 7| GNU General Public License version 2, or under the license below. 8| 9| This source code has been made available to you by IBM on an AS-IS 10| basis. Anyone receiving this source is licensed under IBM 11| copyrights to use it in any way he or she deems fit, including 12| copying it, modifying it, compiling it, and redistributing it either 13| with or without modifications. No license under IBM patents or 14| patent applications is to be implied by the copyright license. 15| 16| Any user of this software should understand that IBM cannot provide 17| technical support for this software and will not be responsible for 18| any consequences resulting from the use of this software. 19| 20| Any person who transfers this source code or any derivative work 21| must include the IBM copyright notice, this paragraph, and the 22| preceding two paragraphs in the transferred software. 23| 24| COPYRIGHT I B M CORPORATION 1999 25| LICENSED MATERIAL - PROGRAM PROPERTY OF I B M 26| 27| Additions (C) Copyright 2009 Industrie Dial Face S.p.A. 28+----------------------------------------------------------------------------*/ 29/*----------------------------------------------------------------------------+ 30| 31| File Name: miiphy.h 32| 33| Function: Include file defining PHY registers. 34| 35| Author: Mark Wisner 36| 37+----------------------------------------------------------------------------*/ 38#pragma once 39 40#include "list.h" 41#include "phy.h" 42 43struct legacy_mii_dev { 44 int (*read)(const char *devname, unsigned char addr, 45 unsigned char reg, unsigned short *value); 46 int (*write)(const char *devname, unsigned char addr, 47 unsigned char reg, unsigned short value); 48}; 49 50int miiphy_read(const char *devname, unsigned char addr, unsigned char reg, 51 unsigned short *value); 52int miiphy_write(const char *devname, unsigned char addr, unsigned char reg, 53 unsigned short value); 54int miiphy_info(const char *devname, unsigned char addr, unsigned int *oui, 55 unsigned char *model, unsigned char *rev); 56int miiphy_reset(const char *devname, unsigned char addr); 57int miiphy_speed(const char *devname, unsigned char addr); 58int miiphy_duplex(const char *devname, unsigned char addr); 59int miiphy_is_1000base_x(const char *devname, unsigned char addr); 60#ifdef CONFIG_SYS_FAULT_ECHO_LINK_DOWN 61int miiphy_link(const char *devname, unsigned char addr); 62#endif 63 64void miiphy_init(void); 65 66void miiphy_register(const char *devname, 67 int (*read)(const char *devname, unsigned char addr, 68 unsigned char reg, unsigned short *value), 69 int (*write)(const char *devname, unsigned char addr, 70 unsigned char reg, unsigned short value)); 71 72int miiphy_set_current_dev(const char *devname); 73const char *miiphy_get_current_dev(void); 74struct mii_dev *mdio_get_current_dev(void); 75struct mii_dev *miiphy_get_dev_by_name(const char *devname); 76struct phy_device *mdio_phydev_for_ethname(const char *devname); 77 78void miiphy_listdev(void); 79 80struct mii_dev *mdio_alloc(void); 81int mdio_register(struct mii_dev *bus); 82void mdio_list_devices(void); 83 84#ifdef CONFIG_BITBANGMII 85 86#define BB_MII_DEVNAME "bb_miiphy" 87 88struct bb_miiphy_bus { 89 char name[16]; 90 int (*init)(struct bb_miiphy_bus *bus); 91 int (*mdio_active)(struct bb_miiphy_bus *bus); 92 int (*mdio_tristate)(struct bb_miiphy_bus *bus); 93 int (*set_mdio)(struct bb_miiphy_bus *bus, int v); 94 int (*get_mdio)(struct bb_miiphy_bus *bus, int *v); 95 int (*set_mdc)(struct bb_miiphy_bus *bus, int v); 96 int (*delay)(struct bb_miiphy_bus *bus); 97#ifdef CONFIG_BITBANGMII_MULTI 98 void *priv; 99#endif 100}; 101 102extern struct bb_miiphy_bus bb_miiphy_buses[]; 103extern int bb_miiphy_buses_num; 104 105void bb_miiphy_init(void); 106int bb_miiphy_read(const char *devname, unsigned char addr, 107 unsigned char reg, unsigned short *value); 108int bb_miiphy_write(const char *devname, unsigned char addr, 109 unsigned char reg, unsigned short value); 110#endif 111 112/* phy seed setup */ 113#define AUTO 99 114#define _1000BASET 1000 115#define _100BASET 100 116#define _10BASET 10 117#define HALF 22 118#define FULL 44 119 120/* phy register offsets */ 121#define MII_MIPSCR 0x11 122 123/* MII_LPA */ 124#define PHY_ANLPAR_PSB_802_3 0x0001 125#define PHY_ANLPAR_PSB_802_9 0x0002 126 127/* MII_CTRL1000 masks */ 128#define PHY_1000BTCR_1000FD 0x0200 129#define PHY_1000BTCR_1000HD 0x0100 130 131/* MII_STAT1000 masks */ 132#define PHY_1000BTSR_MSCF 0x8000 133#define PHY_1000BTSR_MSCR 0x4000 134#define PHY_1000BTSR_LRS 0x2000 135#define PHY_1000BTSR_RRS 0x1000 136#define PHY_1000BTSR_1000FD 0x0800 137#define PHY_1000BTSR_1000HD 0x0400 138 139/* phy EXSR */ 140#define ESTATUS_1000XF 0x8000 141#define ESTATUS_1000XH 0x4000 142 143