|  | /* This file is part of the UCB release of Plan 9. It is subject to the license | 
|  | * terms in the LICENSE file found in the top-level directory of this | 
|  | * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No | 
|  | * part of the UCB release of Plan 9, including this file, may be copied, | 
|  | * modified, propagated, or distributed except according to the terms contained | 
|  | * in the LICENSE file. */ | 
|  |  | 
|  | enum {					/* registers */ | 
|  | Bmcr		= 0x00,		/* Basic Mode Control */ | 
|  | Bmsr		= 0x01,		/* Basic Mode Status */ | 
|  | Phyidr1		= 0x02,		/* PHY Identifier #1 */ | 
|  | Phyidr2		= 0x03,		/* PHY Identifier #2 */ | 
|  | Anar		= 0x04,		/* Auto-Negotiation Advertisement */ | 
|  | Anlpar		= 0x05,		/* AN Link Partner Ability */ | 
|  | Aner		= 0x06,		/* AN Expansion */ | 
|  | Annptr		= 0x07,		/* AN Next Page TX */ | 
|  | Annprr		= 0x08,		/* AN Next Page RX */ | 
|  | Mscr		= 0x09,		/* MASTER-SLAVE Control */ | 
|  | Mssr		= 0x0a,		/* MASTER-SLAVE Status */ | 
|  | Esr		= 0x0f,		/* Extended Status */ | 
|  |  | 
|  | NMiiPhyr	= 32, | 
|  | NMiiPhy		= 32, | 
|  | }; | 
|  |  | 
|  | enum {					/* Bmcr */ | 
|  | BmcrSs1		= 0x0040,	/* Speed Select[1] */ | 
|  | BmcrCte		= 0x0080,	/* Collision Test Enable */ | 
|  | BmcrDm		= 0x0100,	/* Duplex Mode */ | 
|  | BmcrRan		= 0x0200,	/* Restart Auto-Negotiation */ | 
|  | BmcrI		= 0x0400,	/* Isolate */ | 
|  | BmcrPd		= 0x0800,	/* Power Down */ | 
|  | BmcrAne		= 0x1000,	/* Auto-Negotiation Enable */ | 
|  | BmcrSs0		= 0x2000,	/* Speed Select[0] */ | 
|  | BmcrLe		= 0x4000,	/* Loopback Enable */ | 
|  | BmcrR		= 0x8000,	/* Reset */ | 
|  | }; | 
|  |  | 
|  | enum {					/* Bmsr */ | 
|  | BmsrEc		= 0x0001,	/* Extended Capability */ | 
|  | BmsrJd		= 0x0002,	/* Jabber Detect */ | 
|  | BmsrLs		= 0x0004,	/* Link Status */ | 
|  | BmsrAna		= 0x0008,	/* Auto-Negotiation Ability */ | 
|  | BmsrRf		= 0x0010,	/* Remote Fault */ | 
|  | BmsrAnc		= 0x0020,	/* Auto-Negotiation Complete */ | 
|  | BmsrPs		= 0x0040,	/* Preamble Suppression Capable */ | 
|  | BmsrEs		= 0x0100,	/* Extended Status */ | 
|  | Bmsr100T2HD	= 0x0200,	/* 100BASE-T2 HD Capable */ | 
|  | Bmsr100T2FD	= 0x0400,	/* 100BASE-T2 FD Capable */ | 
|  | Bmsr10THD	= 0x0800,	/* 10BASE-T HD Capable */ | 
|  | Bmsr10TFD	= 0x1000,	/* 10BASE-T FD Capable */ | 
|  | Bmsr100TXHD	= 0x2000,	/* 100BASE-TX HD Capable */ | 
|  | Bmsr100TXFD	= 0x4000,	/* 100BASE-TX FD Capable */ | 
|  | Bmsr100T4	= 0x8000,	/* 100BASE-T4 Capable */ | 
|  | }; | 
|  |  | 
|  | enum {					/* Anar/Anlpar */ | 
|  | Ana10G		= 0x0001, | 
|  |  | 
|  | Ana10HD		= 0x0020,	/* Advertise 10BASE-T */ | 
|  | Ana10FD		= 0x0040,	/* Advertise 10BASE-T FD */ | 
|  | AnaTXHD		= 0x0080,	/* Advertise 100BASE-TX */ | 
|  | AnaTXFD		= 0x0100,	/* Advertise 100BASE-TX FD */ | 
|  | AnaT4		= 0x0200,	/* Advertise 100BASE-T4 */ | 
|  | AnaP		= 0x0400,	/* Pause */ | 
|  | AnaAP		= 0x0800,	/* Asymmetrical Pause */ | 
|  | AnaRf		= 0x2000,	/* Remote Fault */ | 
|  | AnaAck		= 0x4000,	/* Acknowledge */ | 
|  | AnaNp		= 0x8000,	/* Next Page Indication */ | 
|  | }; | 
|  |  | 
|  | enum {					/* Mscr */ | 
|  | Mscr1000THD	= 0x0100,	/* Advertise 1000BASE-T HD */ | 
|  | Mscr1000TFD	= 0x0200,	/* Advertise 1000BASE-T FD */ | 
|  | }; | 
|  |  | 
|  | enum {					/* Mssr */ | 
|  | Mssr1000THD	= 0x0400,	/* Link Partner 1000BASE-T HD able */ | 
|  | Mssr1000TFD	= 0x0800,	/* Link Partner 1000BASE-T FD able */ | 
|  | }; | 
|  |  | 
|  | enum {					/* Esr */ | 
|  | Esr1000THD	= 0x1000,	/* 1000BASE-T HD Capable */ | 
|  | Esr1000TFD	= 0x2000,	/* 1000BASE-T FD Capable */ | 
|  | Esr1000XHD	= 0x4000,	/* 1000BASE-X HD Capable */ | 
|  | Esr1000XFD	= 0x8000,	/* 1000BASE-X FD Capable */ | 
|  | }; | 
|  |  | 
|  | struct mii { | 
|  | spinlock_t lock; | 
|  | int	nphy; | 
|  | int	mask; | 
|  | struct miiphy*	phy[NMiiPhy]; | 
|  | struct miiphy*	curphy; | 
|  |  | 
|  | void*	ctlr; | 
|  | int	(*rw)(struct mii*, int unused_int, int, int, int); | 
|  | }; | 
|  |  | 
|  | struct miiphy { | 
|  | struct mii*	mii; | 
|  | int	phyno; | 
|  | int	phyid; | 
|  | int	oui; | 
|  |  | 
|  | int	anar; | 
|  | int	fc; | 
|  | int	mscr; | 
|  |  | 
|  | int	link; | 
|  | int	speed; | 
|  | int	fd; | 
|  | int	rfc; | 
|  | int	tfc; | 
|  | }; | 
|  |  | 
|  | int miimir(struct mii *mii, int r); | 
|  | int miimiw(struct mii *mii, int r, int data); | 
|  | int miireset(struct mii *mii); | 
|  | int miiane(struct mii *mii, int a, int p, int e); | 
|  | int miistatus(struct mii *mii); | 
|  | char *miidumpphy(struct mii *mii, char *p, char *e); | 
|  | void miidetach(struct mii *mii); | 
|  | struct mii *miiattach(void *ctlr, int mask, int (*rw)(struct mii *, | 
|  | int unused_int, | 
|  | int unused2, int unused3, | 
|  | int unused4)); |