1214ec6bbSwdenk /*----------------------------------------------------------------------------+ 231773496SJosh Boyer | This source code is dual-licensed. You may use it under the terms of the 331773496SJosh Boyer | GNU General Public License version 2, or under the license below. 4214ec6bbSwdenk | 5214ec6bbSwdenk | This source code has been made available to you by IBM on an AS-IS 6214ec6bbSwdenk | basis. Anyone receiving this source is licensed under IBM 7214ec6bbSwdenk | copyrights to use it in any way he or she deems fit, including 8214ec6bbSwdenk | copying it, modifying it, compiling it, and redistributing it either 9214ec6bbSwdenk | with or without modifications. No license under IBM patents or 10214ec6bbSwdenk | patent applications is to be implied by the copyright license. 11214ec6bbSwdenk | 12214ec6bbSwdenk | Any user of this software should understand that IBM cannot provide 13214ec6bbSwdenk | technical support for this software and will not be responsible for 14214ec6bbSwdenk | any consequences resulting from the use of this software. 15214ec6bbSwdenk | 16214ec6bbSwdenk | Any person who transfers this source code or any derivative work 17214ec6bbSwdenk | must include the IBM copyright notice, this paragraph, and the 18214ec6bbSwdenk | preceding two paragraphs in the transferred software. 19214ec6bbSwdenk | 20214ec6bbSwdenk | COPYRIGHT I B M CORPORATION 1999 21214ec6bbSwdenk | LICENSED MATERIAL - PROGRAM PROPERTY OF I B M 224ba31ab3SLuigi 'Comio' Mantellini | 234ba31ab3SLuigi 'Comio' Mantellini | Additions (C) Copyright 2009 Industrie Dial Face S.p.A. 24214ec6bbSwdenk +----------------------------------------------------------------------------*/ 25214ec6bbSwdenk /*----------------------------------------------------------------------------+ 26214ec6bbSwdenk | 27214ec6bbSwdenk | File Name: miiphy.h 28214ec6bbSwdenk | 29214ec6bbSwdenk | Function: Include file defining PHY registers. 30214ec6bbSwdenk | 31214ec6bbSwdenk | Author: Mark Wisner 32214ec6bbSwdenk | 33214ec6bbSwdenk +----------------------------------------------------------------------------*/ 34214ec6bbSwdenk #ifndef _miiphy_h_ 35214ec6bbSwdenk #define _miiphy_h_ 36214ec6bbSwdenk 37*8ef583a0SMike Frysinger #include <linux/mii.h> 3863ff004cSMarian Balakowicz #include <net.h> 39214ec6bbSwdenk 405700bb63SMike Frysinger int miiphy_read (const char *devname, unsigned char addr, unsigned char reg, 4163ff004cSMarian Balakowicz unsigned short *value); 425700bb63SMike Frysinger int miiphy_write (const char *devname, unsigned char addr, unsigned char reg, 4363ff004cSMarian Balakowicz unsigned short value); 445700bb63SMike Frysinger int miiphy_info (const char *devname, unsigned char addr, unsigned int *oui, 4563ff004cSMarian Balakowicz unsigned char *model, unsigned char *rev); 465700bb63SMike Frysinger int miiphy_reset (const char *devname, unsigned char addr); 475700bb63SMike Frysinger int miiphy_speed (const char *devname, unsigned char addr); 485700bb63SMike Frysinger int miiphy_duplex (const char *devname, unsigned char addr); 495700bb63SMike Frysinger int miiphy_is_1000base_x (const char *devname, unsigned char addr); 506d0f6bcfSJean-Christophe PLAGNIOL-VILLARD #ifdef CONFIG_SYS_FAULT_ECHO_LINK_DOWN 515700bb63SMike Frysinger int miiphy_link (const char *devname, unsigned char addr); 52fc3e2165Swdenk #endif 53214ec6bbSwdenk 54d9785c14SMarian Balakowicz void miiphy_init (void); 55d9785c14SMarian Balakowicz 565700bb63SMike Frysinger void miiphy_register (const char *devname, 575700bb63SMike Frysinger int (*read) (const char *devname, unsigned char addr, 5863ff004cSMarian Balakowicz unsigned char reg, unsigned short *value), 595700bb63SMike Frysinger int (*write) (const char *devname, unsigned char addr, 6063ff004cSMarian Balakowicz unsigned char reg, unsigned short value)); 6163ff004cSMarian Balakowicz 625700bb63SMike Frysinger int miiphy_set_current_dev (const char *devname); 635700bb63SMike Frysinger const char *miiphy_get_current_dev (void); 6463ff004cSMarian Balakowicz 6563ff004cSMarian Balakowicz void miiphy_listdev (void); 6663ff004cSMarian Balakowicz 674ba31ab3SLuigi 'Comio' Mantellini #ifdef CONFIG_BITBANGMII 6863ff004cSMarian Balakowicz 694ba31ab3SLuigi 'Comio' Mantellini #define BB_MII_DEVNAME "bb_miiphy" 704ba31ab3SLuigi 'Comio' Mantellini 714ba31ab3SLuigi 'Comio' Mantellini struct bb_miiphy_bus { 724ba31ab3SLuigi 'Comio' Mantellini char name[NAMESIZE]; 734ba31ab3SLuigi 'Comio' Mantellini int (*init)(struct bb_miiphy_bus *bus); 744ba31ab3SLuigi 'Comio' Mantellini int (*mdio_active)(struct bb_miiphy_bus *bus); 754ba31ab3SLuigi 'Comio' Mantellini int (*mdio_tristate)(struct bb_miiphy_bus *bus); 764ba31ab3SLuigi 'Comio' Mantellini int (*set_mdio)(struct bb_miiphy_bus *bus, int v); 774ba31ab3SLuigi 'Comio' Mantellini int (*get_mdio)(struct bb_miiphy_bus *bus, int *v); 784ba31ab3SLuigi 'Comio' Mantellini int (*set_mdc)(struct bb_miiphy_bus *bus, int v); 794ba31ab3SLuigi 'Comio' Mantellini int (*delay)(struct bb_miiphy_bus *bus); 804ba31ab3SLuigi 'Comio' Mantellini #ifdef CONFIG_BITBANGMII_MULTI 814ba31ab3SLuigi 'Comio' Mantellini void *priv; 824ba31ab3SLuigi 'Comio' Mantellini #endif 834ba31ab3SLuigi 'Comio' Mantellini }; 844ba31ab3SLuigi 'Comio' Mantellini 854ba31ab3SLuigi 'Comio' Mantellini extern struct bb_miiphy_bus bb_miiphy_buses[]; 864ba31ab3SLuigi 'Comio' Mantellini extern int bb_miiphy_buses_num; 874ba31ab3SLuigi 'Comio' Mantellini 884ba31ab3SLuigi 'Comio' Mantellini void bb_miiphy_init (void); 895700bb63SMike Frysinger int bb_miiphy_read (const char *devname, unsigned char addr, 9063ff004cSMarian Balakowicz unsigned char reg, unsigned short *value); 915700bb63SMike Frysinger int bb_miiphy_write (const char *devname, unsigned char addr, 9263ff004cSMarian Balakowicz unsigned char reg, unsigned short value); 934ba31ab3SLuigi 'Comio' Mantellini #endif 94214ec6bbSwdenk 95214ec6bbSwdenk /* phy seed setup */ 96214ec6bbSwdenk #define AUTO 99 97855a496fSwdenk #define _1000BASET 1000 98214ec6bbSwdenk #define _100BASET 100 99214ec6bbSwdenk #define _10BASET 10 100214ec6bbSwdenk #define HALF 22 101214ec6bbSwdenk #define FULL 44 102214ec6bbSwdenk 103214ec6bbSwdenk /* phy register offsets */ 104*8ef583a0SMike Frysinger #define MII_MIPSCR 0x11 105214ec6bbSwdenk 106*8ef583a0SMike Frysinger /* MII_LPA */ 107b9711de1Swdenk #define PHY_ANLPAR_PSB_802_3 0x0001 108b9711de1Swdenk #define PHY_ANLPAR_PSB_802_9 0x0002 109b9711de1Swdenk 110*8ef583a0SMike Frysinger /* MII_CTRL1000 masks */ 11171bc6e64SLarry Johnson #define PHY_1000BTCR_1000FD 0x0200 11271bc6e64SLarry Johnson #define PHY_1000BTCR_1000HD 0x0100 11371bc6e64SLarry Johnson 114*8ef583a0SMike Frysinger /* MII_STAT1000 masks */ 115855a496fSwdenk #define PHY_1000BTSR_MSCF 0x8000 116855a496fSwdenk #define PHY_1000BTSR_MSCR 0x4000 117855a496fSwdenk #define PHY_1000BTSR_LRS 0x2000 118855a496fSwdenk #define PHY_1000BTSR_RRS 0x1000 119855a496fSwdenk #define PHY_1000BTSR_1000FD 0x0800 120855a496fSwdenk #define PHY_1000BTSR_1000HD 0x0400 121855a496fSwdenk 12271bc6e64SLarry Johnson /* phy EXSR */ 123*8ef583a0SMike Frysinger #define ESTATUS_1000XF 0x8000 124*8ef583a0SMike Frysinger #define ESTATUS_1000XH 0x4000 12571bc6e64SLarry Johnson 126214ec6bbSwdenk #endif 127