]> git.lizzy.rs Git - plan9front.git/blob - sys/src/9/port/ethermii.h
kernel: avoid selecting the boot process in killbig()
[plan9front.git] / sys / src / 9 / port / ethermii.h
1 typedef struct Mii Mii;
2 typedef struct MiiPhy MiiPhy;
3
4 enum {                                  /* registers */
5         Bmcr            = 0x00,         /* Basic Mode Control */
6         Bmsr            = 0x01,         /* Basic Mode Status */
7         Phyidr1         = 0x02,         /* PHY Identifier #1 */
8         Phyidr2         = 0x03,         /* PHY Identifier #2 */
9         Anar            = 0x04,         /* Auto-Negotiation Advertisement */
10         Anlpar          = 0x05,         /* AN Link Partner Ability */
11         Aner            = 0x06,         /* AN Expansion */
12         Annptr          = 0x07,         /* AN Next Page TX */
13         Annprr          = 0x08,         /* AN Next Page RX */
14         Mscr            = 0x09,         /* MASTER-SLAVE Control */
15         Mssr            = 0x0A,         /* MASTER-SLAVE Status */
16         Mmdctrl         = 0x0D,         /* MMD Access Control */
17         Mmddata         = 0x0E,         /* MMD Access Data Register */
18         Esr             = 0x0F,         /* Extended Status */
19
20         NMiiPhyr        = 32,
21         NMiiPhy         = 32,
22 };
23
24 enum {                                  /* Bmcr */
25         BmcrSs1         = 0x0040,       /* Speed Select[1] */
26         BmcrCte         = 0x0080,       /* Collision Test Enable */
27         BmcrDm          = 0x0100,       /* Duplex Mode */
28         BmcrRan         = 0x0200,       /* Restart Auto-Negotiation */
29         BmcrI           = 0x0400,       /* Isolate */
30         BmcrPd          = 0x0800,       /* Power Down */
31         BmcrAne         = 0x1000,       /* Auto-Negotiation Enable */
32         BmcrSs0         = 0x2000,       /* Speed Select[0] */
33         BmcrLe          = 0x4000,       /* Loopback Enable */
34         BmcrR           = 0x8000,       /* Reset */
35 };
36
37 enum {                                  /* Bmsr */
38         BmsrEc          = 0x0001,       /* Extended Capability */
39         BmsrJd          = 0x0002,       /* Jabber Detect */
40         BmsrLs          = 0x0004,       /* Link Status */
41         BmsrAna         = 0x0008,       /* Auto-Negotiation Ability */
42         BmsrRf          = 0x0010,       /* Remote Fault */
43         BmsrAnc         = 0x0020,       /* Auto-Negotiation Complete */
44         BmsrPs          = 0x0040,       /* Preamble Suppression Capable */
45         BmsrEs          = 0x0100,       /* Extended Status */
46         Bmsr100T2HD     = 0x0200,       /* 100BASE-T2 HD Capable */
47         Bmsr100T2FD     = 0x0400,       /* 100BASE-T2 FD Capable */
48         Bmsr10THD       = 0x0800,       /* 10BASE-T HD Capable */
49         Bmsr10TFD       = 0x1000,       /* 10BASE-T FD Capable */
50         Bmsr100TXHD     = 0x2000,       /* 100BASE-TX HD Capable */
51         Bmsr100TXFD     = 0x4000,       /* 100BASE-TX FD Capable */
52         Bmsr100T4       = 0x8000,       /* 100BASE-T4 Capable */
53 };
54
55 enum {                                  /* Anar/Anlpar */
56         Ana10HD         = 0x0020,       /* Advertise 10BASE-T */
57         Ana10FD         = 0x0040,       /* Advertise 10BASE-T FD */
58         AnaTXHD         = 0x0080,       /* Advertise 100BASE-TX */
59         AnaTXFD         = 0x0100,       /* Advertise 100BASE-TX FD */
60         AnaT4           = 0x0200,       /* Advertise 100BASE-T4 */
61         AnaP            = 0x0400,       /* Pause */
62         AnaAP           = 0x0800,       /* Asymmetrical Pause */
63         AnaRf           = 0x2000,       /* Remote Fault */
64         AnaAck          = 0x4000,       /* Acknowledge */
65         AnaNp           = 0x8000,       /* Next Page Indication */
66 };
67
68 enum {                                  /* Mscr */
69         Mscr1000THD     = 0x0100,       /* Advertise 1000BASE-T HD */
70         Mscr1000TFD     = 0x0200,       /* Advertise 1000BASE-T FD */
71 };
72
73 enum {                                  /* Mssr */
74         Mssr1000THD     = 0x0400,       /* Link Partner 1000BASE-T HD able */
75         Mssr1000TFD     = 0x0800,       /* Link Partner 1000BASE-T FD able */
76 };
77
78 enum {                                  /* Esr */
79         Esr1000THD      = 0x1000,       /* 1000BASE-T HD Capable */
80         Esr1000TFD      = 0x2000,       /* 1000BASE-T FD Capable */
81         Esr1000XHD      = 0x4000,       /* 1000BASE-X HD Capable */
82         Esr1000XFD      = 0x8000,       /* 1000BASE-X FD Capable */
83 };
84
85 typedef struct Mii {
86         Lock;
87         int     nphy;
88         int     mask;
89         MiiPhy* phy[NMiiPhy];
90         MiiPhy* curphy;
91
92         void*   ctlr;
93         int     (*mir)(Mii*, int, int);
94         int     (*miw)(Mii*, int, int, int);
95 } Mii;
96
97 typedef struct MiiPhy {
98         Mii*    mii;
99         u32int  id;
100         int     oui;
101         int     phyno;
102
103         int     anar;
104         int     fc;
105         int     mscr;
106
107         int     link;
108         int     speed;
109         int     fd;
110         int     rfc;
111         int     tfc;
112 };
113
114 extern int mii(Mii*, int);
115 extern int miiane(Mii*, int, int, int);
116 extern int miimir(Mii*, int);
117 extern int miimiw(Mii*, int, int);
118 extern int miireset(Mii*);
119 extern int miistatus(Mii*);
120
121 extern int miimmdr(Mii*, int, int);
122 extern int miimmdw(Mii*, int, int, int);