1/*
2 * mii.h 1.4 2000/04/25 22:06:15
3 *
4 * Media Independent Interface support: register layout and ioctl's
5 *
6 * Copyright (C) 2000 David A. Hinds -- dhinds@pcmcia.sourceforge.org
7 */
8
9#ifndef _LINUX_MII_H
10#define _LINUX_MII_H
11
12/* network interface ioctl's for MII commands */
13#ifndef SIOCGMIIPHY
14#define SIOCGMIIPHY (SIOCDEVPRIVATE)	/* Read from current PHY */
15#define SIOCGMIIREG (SIOCDEVPRIVATE+1) 	/* Read any PHY register */
16#define SIOCSMIIREG (SIOCDEVPRIVATE+2) 	/* Write any PHY register */
17#define SIOCGPARAMS (SIOCDEVPRIVATE+3) 	/* Read operational parameters */
18#define SIOCSPARAMS (SIOCDEVPRIVATE+4) 	/* Set operational parameters */
19#endif
20
21#include <linux/types.h>
22
23/* This data structure is used for all the MII ioctl's */
24struct mii_data {
25    __u16	phy_id;
26    __u16	reg_num;
27    __u16	val_in;
28    __u16	val_out;
29};
30
31/* Basic Mode Control Register */
32#define MII_BMCR		0x00
33#define  MII_BMCR_RESET		0x8000
34#define  MII_BMCR_LOOPBACK	0x4000
35#define  MII_BMCR_100MBIT	0x2000
36#define  MII_BMCR_AN_ENA	0x1000
37#define  MII_BMCR_POWERDONW	0x0800
38#define  MII_BMCR_ISOLATE	0x0400
39#define  MII_BMCR_RESTART	0x0200
40#define  MII_BMCR_DUPLEX	0x0100
41#define  MII_BMCR_COLTEST	0x0080
42#define  MII_BMCR_1000MBIT	0x0040
43
44/* Basic Mode Status Register */
45#define MII_BMSR		0x01
46#define  MII_BMSR_CAP_MASK	0xf800
47#define  MII_BMSR_100BASET4	0x8000	/* Can do 100mbps, 4k packets  */
48#define  MII_BMSR_100BASETX_FD	0x4000	/* Can do 100mbps, full-duplex */
49#define  MII_BMSR_100BASETX_HD	0x2000	/* Can do 100mbps, half-duplex */
50#define  MII_BMSR_10BASET_FD	0x1000	/* Can do 10mbps, full-duplex  */
51#define  MII_BMSR_10BASET_HD	0x0800	/* Can do 10mbps, half-duplex  */
52#define  MII_BMSR_100FULL2	0x0400	/* Can do 100BASE-T2 FDX */
53#define  MII_BMSR_100HALF2	0x0200	/* Can do 100BASE-T2 HDX */
54#define  MII_BMSR_ESTATEN	0x0100  /* Extended Status in R15 */
55#define  MII_BMSR_NO_PREAMBLE	0x0040
56#define  MII_BMSR_AN_COMPLETE	0x0020	/* Auto-negotiation complete   */
57#define  MII_BMSR_REMOTE_FAULT	0x0010	/* Remote fault detected       */
58#define  MII_BMSR_AN_ABLE	0x0008	/* Able to do auto-negotiation */
59#define  MII_BMSR_LINK_VALID	0x0004	/* Link status                 */
60#define  MII_BMSR_JABBER	0x0002	/* Jabber detected             */
61#define  MII_BMSR_ERCAP		0x0001	/* Ext-reg capability          */
62
63#define MII_PHY_ID1		0x02
64#define MII_PHY_ID2		0x03
65
66/* Auto-Negotiation Advertisement Register */
67#define MII_ANAR		0x04
68/* Auto-Negotiation Link Partner Ability Register */
69#define MII_ANLPAR		0x05
70#define  MII_AN_NEXT_PAGE	0x8000
71#define  MII_AN_ACK		0x4000
72#define  MII_AN_REMOTE_FAULT	0x2000
73#define  MII_AN_ABILITY_MASK	(MII_AN_FLOW_CONTROL|MII_AN_100BASET4|MII_AN_100BASETX_FD|MII_AN_100BASETX_HD|MII_AN_10BASET_FD|MII_AN_10BASET_HD)
74#define  MII_AN_FLOW_CONTROL	0x0400
75#define  MII_AN_100BASET4	0x0200
76#define  MII_AN_100BASETX_FD	0x0100
77#define  MII_AN_100BASETX_HD	0x0080
78#define  MII_AN_10BASET_FD	0x0040
79#define  MII_AN_10BASET_HD	0x0020
80#define  MII_AN_PROT_MASK	0x001f
81#define  MII_AN_PROT_802_3	0x0001
82
83/* Auto-Negotiation Expansion Register */
84#define MII_ANER		0x06
85#define  MII_ANER_MULT_FAULT	0x0010
86#define  MII_ANER_LP_NP_ABLE	0x0008
87#define  MII_ANER_NP_ABLE	0x0004
88#define  MII_ANER_PAGE_RX	0x0002
89#define  MII_ANER_LP_AN_ABLE	0x0001
90
91/* Gigabit Registers */
92#define MII_CTRL1000		0x09
93#define   MII_AN2_UNKNOWN1	0x0800
94#define   MII_AN2_UNKNOWN2	0x0400
95#define   MII_AN2_1000FULL	0x0200
96#define   MII_AN2_1000HALF	0x0100
97
98#define MII_STAT1000		0x0a
99#define   MII_LPA2_UNKNOWN1	0x4000
100#define   MII_LPA2_1000LOCALOK	0x2000
101#define   MII_LPA2_1000REMRXOK	0x1000
102#define   MII_LPA2_1000FULL	0x0800
103#define   MII_LPA2_1000HALF	0x0400
104
105#define MII_ESTAT1000		0x0f
106#define   MII_EST_1000THALF	0x1000		/* 1000BASE-T half duplex capable */
107#define   MII_EST_1000TFULL	0x2000		/* 1000BASE-T full duplex capable */
108#define   MII_EST_1000XHALF	0x4000		/* 1000BASE-X half duplex capable */
109#define   MII_EST_1000XFULL	0x8000		/* 1000BASE-X full duplex capable */
110
111/* Last register we need for show_basic_mii() */
112#define MII_BASIC_MAX		MII_STAT1000
113
114#define MII_MAXPHYREG		32
115#define EPHY_NONE		31	/* nvram: no phy present at all */
116#define EPHY_NOREG		30	/* nvram: no local phy regs */
117
118#endif /* _LINUX_MII_H */
119