Rev 5073 | Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
3545 | hidnplayr | 1 | ; Generic MII registers. |
2 | |||
3 | MII_BMCR = 0x00 ; Basic mode control register |
||
4 | MII_BMSR = 0x01 ; Basic mode status register |
||
5 | MII_PHYSID1 = 0x02 ; PHYS ID 1 |
||
6 | MII_PHYSID2 = 0x03 ; PHYS ID 2 |
||
7 | MII_ADVERTISE = 0x04 ; Advertisement control reg |
||
8 | MII_LPA = 0x05 ; Link partner ability reg |
||
9 | MII_EXPANSION = 0x06 ; Expansion register |
||
10 | MII_CTRL1000 = 0x09 ; 1000BASE-T control |
||
11 | MII_STAT1000 = 0x0a ; 1000BASE-T status |
||
12 | MII_ESTATUS = 0x0f ; Extended Status |
||
13 | MII_DCOUNTER = 0x12 ; Disconnect counter |
||
14 | MII_FCSCOUNTER = 0x13 ; False carrier counter |
||
15 | MII_NWAYTEST = 0x14 ; N-way auto-neg test reg |
||
16 | MII_RERRCOUNTER = 0x15 ; Receive error counter |
||
17 | MII_SREVISION = 0x16 ; Silicon revision |
||
18 | MII_RESV1 = 0x17 ; Reserved... |
||
19 | MII_LBRERROR = 0x18 ; Lpback, rx, bypass error |
||
20 | MII_PHYADDR = 0x19 ; PHY address |
||
21 | MII_RESV2 = 0x1a ; Reserved... |
||
22 | MII_TPISTATUS = 0x1b ; TPI status for 10mbps |
||
23 | MII_NCONFIG = 0x1c ; Network interface config |
||
24 | |||
25 | ; Basic mode control register. |
||
26 | |||
27 | BMCR_RESV = 0x003f ; Unused... |
||
28 | BMCR_SPEED1000 = 0x0040 ; MSB of Speed (1000) |
||
29 | BMCR_CTST = 0x0080 ; Collision test |
||
30 | BMCR_FULLDPLX = 0x0100 ; Full duplex |
||
31 | BMCR_ANRESTART = 0x0200 ; Auto negotiation restart |
||
32 | BMCR_ISOLATE = 0x0400 ; Disconnect DP83840 from MII |
||
33 | BMCR_PDOWN = 0x0800 ; Powerdown the DP83840 |
||
34 | BMCR_ANENABLE = 0x1000 ; Enable auto negotiation |
||
35 | BMCR_SPEED100 = 0x2000 ; Select 100Mbps |
||
36 | BMCR_LOOPBACK = 0x4000 ; TXD loopback bits |
||
37 | BMCR_RESET = 0x8000 ; Reset the DP83840 |
||
38 | |||
39 | ; Basic mode status register. |
||
40 | |||
41 | BMSR_ERCAP = 0x0001 ; Ext-reg capability |
||
42 | BMSR_JCD = 0x0002 ; Jabber detected |
||
43 | BMSR_LSTATUS = 0x0004 ; Link status |
||
44 | BMSR_ANEGCAPABLE = 0x0008 ; Able to do auto-negotiation |
||
45 | BMSR_RFAULT = 0x0010 ; Remote fault detected |
||
46 | BMSR_ANEGCOMPLETE = 0x0020 ; Auto-negotiation complete |
||
47 | BMSR_RESV = 0x00c0 ; Unused... |
||
48 | BMSR_ESTATEN = 0x0100 ; Extended Status in R15 |
||
49 | BMSR_100HALF2 = 0x0200 ; Can do 100BASE-T2 HDX |
||
50 | BMSR_100FULL2 = 0x0400 ; Can do 100BASE-T2 FDX |
||
51 | BMSR_10HALF = 0x0800 ; Can do 10mbps, half-duplex |
||
52 | BMSR_10FULL = 0x1000 ; Can do 10mbps, full-duplex |
||
53 | BMSR_100HALF = 0x2000 ; Can do 100mbps, half-duplex |
||
54 | BMSR_100FULL = 0x4000 ; Can do 100mbps, full-duplex |
||
55 | BMSR_100BASE4 = 0x8000 ; Can do 100mbps, 4k packets |
||
56 | |||
57 | ; Advertisement control register. |
||
58 | |||
59 | ADVERTISE_SLCT = 0x001f ; Selector bits |
||
60 | ADVERTISE_CSMA = 0x0001 ; Only selector supported |
||
61 | ADVERTISE_10HALF = 0x0020 ; Try for 10mbps half-duplex |
||
62 | ADVERTISE_1000XFULL = 0x0020 ; Try for 1000BASE-X full-duplex |
||
63 | ADVERTISE_10FULL = 0x0040 ; Try for 10mbps full-duplex |
||
64 | ADVERTISE_1000XHALF = 0x0040 ; Try for 1000BASE-X half-duplex |
||
65 | ADVERTISE_100HALF = 0x0080 ; Try for 100mbps half-duplex |
||
66 | ADVERTISE_1000XPAUSE = 0x0080 ; Try for 1000BASE-X pause |
||
67 | ADVERTISE_100FULL = 0x0100 ; Try for 100mbps full-duplex |
||
68 | ADVERTISE_1000XPSE_ASYM = 0x0100 ; Try for 1000BASE-X asym pause |
||
69 | ADVERTISE_100BASE4 = 0x0200 ; Try for 100mbps 4k packets |
||
70 | ADVERTISE_PAUSE_CAP = 0x0400 ; Try for pause |
||
71 | ADVERTISE_PAUSE_ASYM = 0x0800 ; Try for asymetric pause |
||
72 | ADVERTISE_RESV = 0x1000 ; Unused... |
||
73 | ADVERTISE_RFAULT = 0x2000 ; Say we can detect faults |
||
74 | ADVERTISE_LPACK = 0x4000 ; Ack link partners response |
||
75 | ADVERTISE_NPAGE = 0x8000 ; Next page bit |
||
76 | |||
77 | ADVERTISE_FULL = (ADVERTISE_100FULL or ADVERTISE_10FULL or ADVERTISE_CSMA) |
||
78 | ADVERTISE_ALL = (ADVERTISE_10HALF or ADVERTISE_10FULL or ADVERTISE_100HALF or ADVERTISE_100FULL) |
||
79 | |||
80 | ; Link partner ability register. |
||
81 | |||
82 | LPA_SLCT = 0x001f ; Same as advertise selector |
||
83 | LPA_10HALF = 0x0020 ; Can do 10mbps half-duplex |
||
84 | LPA_1000XFULL = 0x0020 ; Can do 1000BASE-X full-duplex |
||
85 | LPA_10FULL = 0x0040 ; Can do 10mbps full-duplex |
||
86 | LPA_1000XHALF = 0x0040 ; Can do 1000BASE-X half-duplex |
||
87 | LPA_100HALF = 0x0080 ; Can do 100mbps half-duplex |
||
88 | LPA_1000XPAUSE = 0x0080 ; Can do 1000BASE-X pause |
||
89 | LPA_100FULL = 0x0100 ; Can do 100mbps full-duplex |
||
90 | LPA_1000XPAUSE_ASYM = 0x0100 ; Can do 1000BASE-X pause asym |
||
91 | LPA_100BASE4 = 0x0200 ; Can do 100mbps 4k packets |
||
92 | LPA_PAUSE_CAP = 0x0400 ; Can pause |
||
93 | LPA_PAUSE_ASYM = 0x0800 ; Can pause asymetrically |
||
94 | LPA_RESV = 0x1000 ; Unused... |
||
95 | LPA_RFAULT = 0x2000 ; Link partner faulted |
||
96 | LPA_LPACK = 0x4000 ; Link partner acked us |
||
97 | LPA_NPAGE = 0x8000 ; Next page bit |
||
98 | |||
99 | LPA_DUPLEX = (LPA_10FULL or LPA_100FULL) |
||
100 | LPA_100 = (LPA_100FULL or LPA_100HALF or LPA_100BASE4) |
||
101 | |||
102 | ; Expansion register for auto-negotiation. |
||
103 | |||
104 | EXPANSION_NWAY = 0x0001 ; Can do N-way auto-nego |
||
105 | EXPANSION_LCWP = 0x0002 ; Got new RX page code word |
||
106 | EXPANSION_ENABLENPAGE = 0x0004 ; This enables npage words |
||
107 | EXPANSION_NPCAPABLE = 0x0008 ; Link partner supports npage |
||
108 | EXPANSION_MFAULTS = 0x0010 ; Multiple faults detected |
||
109 | EXPANSION_RESV = 0xffe0 ; Unused... |
||
110 | |||
111 | ESTATUS_1000_TFULL = 0x2000 ; Can do 1000BT Full |
||
112 | ESTATUS_1000_THALF = 0x1000 ; Can do 1000BT Half |
||
113 | |||
114 | ; N-way test register. |
||
115 | |||
116 | NWAYTEST_RESV1 = 0x00ff ; Unused... |
||
117 | NWAYTEST_LOOPBACK = 0x0100 ; Enable loopback for N-way |
||
118 | NWAYTEST_RESV2 = 0xfe00 ; Unused... |
||
119 | |||
120 | ; 1000BASE-T Control register |
||
121 | |||
122 | ADVERTISE_1000FULL = 0x0200 ; Advertise 1000BASE-T full duplex |
||
123 | ADVERTISE_1000HALF = 0x0100 ; Advertise 1000BASE-T half duplex |
||
124 | |||
125 | ; 1000BASE-T Status register |
||
126 | |||
127 | LPA_1000LOCALRXOK = 0x2000 ; Link partner local receiver status |
||
128 | LPA_1000REMRXOK = 0x1000 ; Link partner remote receiver status |
||
129 | LPA_1000FULL = 0x0800 ; Link partner 1000BASE-T full duplex |
||
130 | LPA_1000HALF = 0x0400 ; Link partner 1000BASE-T half duplex |
||
131 | |||
132 | ; Flow control flags |
||
133 | |||
134 | FLOW_CTRL_TX = 0x01 |
||
135 | FLOW_CTRL_RX = 0x02 |
||
136 | |||
137 | |||
138 | |||
139 | if used mii_link_ok |
||
140 | |||
141 | align 4 |
||
142 | mii_link_ok: |
||
143 | |||
144 | DEBUGF 1, "mii_link_ok\n" |
||
145 | |||
146 | ; First do a dummy read to latch some MII phys |
||
147 | |||
148 | mov ecx, MII_BMSR |
||
149 | call mdio_read |
||
150 | |||
151 | mov ecx, MII_BMSR |
||
152 | call mdio_read |
||
153 | |||
154 | and ax, BMSR_LSTATUS |
||
155 | |||
156 | DEBUGF 1, "link status=0x%x\n", ax |
||
157 | |||
158 | ret |
||
159 | |||
160 | end if |