116 lines
3.2 KiB
C
116 lines
3.2 KiB
C
typedef struct Mii Mii;
|
|
typedef struct MiiPhy MiiPhy;
|
|
|
|
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 */
|
|
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 */
|
|
};
|
|
|
|
typedef struct Mii {
|
|
Lock;
|
|
int nphy;
|
|
int mask;
|
|
MiiPhy* phy[NMiiPhy];
|
|
MiiPhy* curphy;
|
|
|
|
void* ctlr;
|
|
int (*mir)(Mii*, int, int);
|
|
int (*miw)(Mii*, int, int, int);
|
|
} Mii;
|
|
|
|
typedef struct MiiPhy {
|
|
Mii* mii;
|
|
int oui;
|
|
int phyno;
|
|
|
|
int anar;
|
|
int fc;
|
|
int mscr;
|
|
|
|
int link;
|
|
int speed;
|
|
int fd;
|
|
int rfc;
|
|
int tfc;
|
|
};
|
|
|
|
extern int mii(Mii*, int);
|
|
extern int miiane(Mii*, int, int, int);
|
|
extern int miimir(Mii*, int);
|
|
extern int miimiw(Mii*, int, int);
|
|
extern int miireset(Mii*);
|
|
extern int miistatus(Mii*);
|