ReactOS 0.4.17-dev-470-gf9e3448
media.c
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS DC21x4 Driver
3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4 * PURPOSE: Media common code
5 * COPYRIGHT: Copyright 2023 Dmitry Borisov <di.sean@protonmail.com>
6 */
7
8/* INCLUDES *******************************************************************/
9
10#include "dc21x4.h"
11
12#include <debug.h>
13
14/* FUNCTIONS ******************************************************************/
15
16VOID
18 _In_ PDC21X4_ADAPTER Adapter,
20{
21 /* Nothing to do */
22 if (Adapter->LinkUp == LinkUp)
23 return;
24
25 Adapter->LinkUp = LinkUp;
26
27 INFO_VERB("Link %sconnected, media is %s\n",
28 LinkUp ? "" : "dis",
29 MediaNumber2Str(Adapter, Adapter->MediaNumber));
30
31 NdisDprReleaseSpinLock(&Adapter->ModeLock);
32
33 NdisMIndicateStatus(Adapter->AdapterHandle,
35 NULL,
36 0);
37 NdisMIndicateStatusComplete(Adapter->AdapterHandle);
38
39 NdisDprAcquireSpinLock(&Adapter->ModeLock);
40}
41
42static
45 _In_ PDC21X4_ADAPTER Adapter)
46{
48 Adapter->LastReceiveActivity = (ULONG)Adapter->Statistics.ReceiveOk;
49
50 /*
51 * In MII mode, we don't know exactly which port is active.
52 * Switch to the media with a higher priority.
53 */
54 if (Adapter->MediaBitmap & (1 << MEDIA_HMR))
55 return MEDIA_HMR;
56 else if (Adapter->MediaBitmap & (1 << MEDIA_AUI))
57 return MEDIA_AUI;
58 else
59 return MEDIA_BNC;
60}
61
62static
63VOID
65 _In_ PDC21X4_ADAPTER Adapter,
66 _In_ BOOLEAN FullDuplex,
67 _In_ BOOLEAN Speed100)
68{
69 ULONG OpMode = Adapter->OpMode;
70
71 if (FullDuplex)
72 OpMode |= DC_OPMODE_FULL_DUPLEX;
73 else
74 OpMode &= ~DC_OPMODE_FULL_DUPLEX;
75
76 if (Speed100)
77 OpMode &= ~DC_OPMODE_PORT_XMIT_10;
78 else
79 OpMode |= DC_OPMODE_PORT_XMIT_10;
80
81 /* Nothing to do */
82 if (OpMode == Adapter->OpMode)
83 return;
84
85 INFO_VERB("Configuring MAC from %u %s-duplex to %u %s-duplex\n",
86 Adapter->LinkSpeedMbps,
87 (Adapter->OpMode & DC_OPMODE_FULL_DUPLEX) ? "full" : "half",
88 Speed100 ? 100 : 10,
89 FullDuplex ? "full" : "half");
90
91 Adapter->LinkSpeedMbps = Speed100 ? 100 : 10;
92
93 DcStopTxRxProcess(Adapter);
94
95 Adapter->OpMode = OpMode;
96 DC_WRITE(Adapter, DcCsr6_OpMode, Adapter->OpMode);
97}
98
99static
100VOID
102 _In_ PDC21X4_ADAPTER Adapter,
103 _Out_ PBOOLEAN FullDuplex,
104 _Out_ PBOOLEAN Speed100)
105{
106 ULONG MiiLinkPartnerAbility, AdvLpa;
107
108 MiiRead(Adapter, Adapter->PhyAddress, MII_AUTONEG_LINK_PARTNER, &MiiLinkPartnerAbility);
109
110 TRACE("MII LPA %04lx\n", MiiLinkPartnerAbility);
111
112 AdvLpa = Adapter->MiiMedia.Advertising & MiiLinkPartnerAbility;
113 if (AdvLpa & MII_LP_100T_FD)
114 {
115 *FullDuplex = TRUE;
116 *Speed100 = TRUE;
117 }
118 else if (AdvLpa & MII_LP_100T4)
119 {
120 *FullDuplex = FALSE;
121 *Speed100 = TRUE;
122 }
123 else if (AdvLpa & MII_LP_100T_HD)
124 {
125 *FullDuplex = FALSE;
126 *Speed100 = TRUE;
127 }
128 else if (AdvLpa & MII_LP_10T_FD)
129 {
130 *FullDuplex = TRUE;
131 *Speed100 = FALSE;
132 }
133 else
134 {
135 *FullDuplex = FALSE;
136 *Speed100 = FALSE;
137 }
138}
139
142 _In_ PDC21X4_ADAPTER Adapter)
143{
144 ULONG MiiStatus;
145 BOOLEAN FullDuplex, Speed100;
146
147 /* The link status is a latched-low bit, read it twice */
148 MiiRead(Adapter, Adapter->PhyAddress, MII_STATUS, &MiiStatus);
149 if (!MiiRead(Adapter, Adapter->PhyAddress, MII_STATUS, &MiiStatus))
150 {
151 goto NoLink;
152 }
153 TRACE("MII Status %04lx\n", MiiStatus);
154
155 /* Check the link status */
156 if (!(MiiStatus & MII_SR_LINK_STATUS))
157 {
158NoLink:
159 /* No link detected, check the other port */
160 if (Adapter->MediaBitmap & ((1 << MEDIA_HMR) | (1 << MEDIA_AUI) | (1 << MEDIA_BNC)))
161 {
162 if ((Adapter->Features & DC_MII_AUTOSENSE) && !MEDIA_IS_FIXED(Adapter))
163 {
164 Adapter->MediaNumber = MediaMiiNextMedia(Adapter);
165 MediaSiaSelect(Adapter);
166 }
167 }
168
169 return FALSE;
170 }
171
172 /* If we are forcing speed and duplex */
173 if (MEDIA_IS_FIXED(Adapter))
174 {
175 FullDuplex = !!(Adapter->MiiControl & MII_CR_FULL_DUPLEX);
176 Speed100 = !!(Adapter->MiiControl & MII_CR_SPEED_SELECTION);
177 }
178 else
179 {
180 /* Check auto-negotiation is complete */
181 if (!(MiiStatus & MII_SR_AUTONEG_COMPLETE))
182 return FALSE;
183
184 MediaMiiGetSpeedAndDuplex(Adapter, &FullDuplex, &Speed100);
185 }
186
187 /* Set the link speed and duplex */
188 MediaMiiSetSpeedAndDuplex(Adapter, FullDuplex, Speed100);
189
190 return TRUE;
191}
192
193VOID
195 _In_ PDC21X4_ADAPTER Adapter)
196{
197 ULONG MiiControl, MiiAdvertise;
198
199 MiiRead(Adapter, Adapter->PhyAddress, MII_CONTROL, &MiiControl);
202 MiiWrite(Adapter, Adapter->PhyAddress, MII_CONTROL, MiiControl);
203
204 MiiControl |= Adapter->MiiControl;
205 MiiAdvertise = Adapter->MiiAdvertising;
206
207 MiiWrite(Adapter, Adapter->PhyAddress, MII_AUTONEG_ADVERTISE, MiiAdvertise | MII_ADV_CSMA);
208 MiiWrite(Adapter, Adapter->PhyAddress, MII_CONTROL, MiiControl);
209}
210
211VOID
213 _In_ PDC21X4_ADAPTER Adapter,
214 _In_ BOOLEAN ResetPhy)
215{
216 ULONG OpMode, i;
217
218 if (Adapter->ChipType != DC21140)
219 {
220 DcWriteSia(Adapter, 0, 0, 0);
221 }
222
223 OpMode = Adapter->OpMode;
224 OpMode &= ~DC_OPMODE_MEDIA_MASK;
226 Adapter->OpMode = OpMode;
227
228 DC_WRITE(Adapter, DcCsr6_OpMode, OpMode);
229
231
232 if (ResetPhy)
233 {
235
236 /* Execute the GPIO reset sequence */
237 if (Adapter->MiiMedia.ResetStreamLength)
238 {
239 /* Set the GPIO direction */
240 DcWriteGpio(Adapter, Adapter->MiiMedia.SetupStream[0]);
241
242 for (i = 0; i < Adapter->MiiMedia.ResetStreamLength; ++i)
243 {
244 NdisMSleep(100);
245 DcWriteGpio(Adapter, Adapter->MiiMedia.ResetStream[i]);
246 }
247
248 /* Give the PHY some time to reset */
249 NdisMSleep(5000);
250 }
251 }
252
253 /* Set the GPIO direction */
254 DcWriteGpio(Adapter, Adapter->MiiMedia.SetupStream[0]);
255
256 /* Execute the GPIO setup sequence */
257 for (i = 1; i < Adapter->MiiMedia.SetupStreamLength; ++i)
258 {
260 DcWriteGpio(Adapter, Adapter->MiiMedia.SetupStream[i]);
261 }
262}
263
264VOID
266 _In_ PDC21X4_ADAPTER Adapter)
267{
268 ULONG OpMode;
269 PDC_MEDIA Media;
270
271 INFO_VERB("Selected media %s\n",
272 MediaNumber2Str(Adapter, Adapter->MediaNumber));
273
274 Media = &Adapter->Media[Adapter->MediaNumber];
275
276 DcStopTxRxProcess(Adapter);
277
278 if (Adapter->ChipType != DC21041)
279 {
280 /* Make sure the reset pulse is wide enough */
282 DcWriteGpio(Adapter, Media->GpioCtrl);
284 DcWriteGpio(Adapter, Media->GpioData);
285 }
286
287 DcWriteSia(Adapter, Media->Csr13, Media->Csr14, Media->Csr15);
288
290
291 OpMode = Adapter->OpMode;
292 OpMode &= ~DC_OPMODE_MEDIA_MASK;
293 OpMode |= Media->OpMode;
294 Adapter->OpMode = OpMode;
295
296 DC_WRITE(Adapter, DcCsr6_OpMode, OpMode);
297}
298
299VOID
301 _In_ PDC21X4_ADAPTER Adapter)
302{
303 ULONG OpMode;
304 PDC_MEDIA Media;
305
306 INFO("Selected media %s\n", MediaNumber2Str(Adapter, Adapter->MediaNumber));
307
308 Media = &Adapter->Media[Adapter->MediaNumber];
309
310 DC_WRITE(Adapter, DcCsr12_Gpio, Media->GpioData);
311
312 OpMode = Adapter->OpMode;
313 OpMode &= ~DC_OPMODE_MEDIA_MASK;
314 OpMode |= Media->OpMode;
315 Adapter->OpMode = OpMode;
316
317 DC_WRITE(Adapter, DcCsr6_OpMode, OpMode);
318}
319
320CODE_SEG("PAGE")
321VOID
323 _In_ PDC21X4_ADAPTER Adapter,
324 _In_ ULONG MediaNumber)
325{
326 ULONG Csr14, i;
327 BOOLEAN UseMii;
328
329 PAGED_CODE();
330
331 /* Media auto-detection */
332 if (MediaNumber == MEDIA_AUTO)
333 {
334 Adapter->Flags |= DC_AUTOSENSE;
335
336 /* Initial value for all boards */
337 Adapter->DefaultMedia = MEDIA_10T;
338
339 Adapter->MiiAdvertising = Adapter->MiiMedia.Advertising;
340 Adapter->MiiControl = MII_CR_AUTONEG | MII_CR_AUTONEG_RESTART;
341
342 switch (Adapter->ChipType)
343 {
344 case DC21041:
345 {
346 /* Errata: don't enable auto-negotiation */
347 if (Adapter->RevisionId < 0x20)
348 break;
349
350 /* Advertise 10T HD and 10T FD. The chip chooses the 10T FD mode automatically */
351 Adapter->Media[MEDIA_10T].Csr14 |= DC_SIA_TXRX_AUTONEG | DC_SIA_TXRX_ADV_10T_HD;
352 Adapter->Media[MEDIA_10T].OpMode |= DC_OPMODE_FULL_DUPLEX;
353 break;
354 }
355
356 case DC21140:
357 {
358 /* Pick the default media */
359 if (Adapter->Features & DC_HAS_MII)
360 {
361 Adapter->DefaultMedia = MEDIA_MII;
362 break;
363 }
364
365 /* The final entry in the media list should be checked first */
366 _BitScanReverse(&Adapter->DefaultMedia, Adapter->MediaBitmap);
367
368 /*
369 * Select the first half-duplex media.
370 * If you want to be able to use 21140 boards without MII in full-duplex mode,
371 * you have to manually select the media.
372 */
373 for (i = Adapter->DefaultMedia; i > 0; --i)
374 {
375 if ((Adapter->MediaBitmap & (1 << i)) && !MEDIA_IS_FD(i))
376 break;
377 }
378 Adapter->DefaultMedia = i;
379 break;
380 }
381
382 case DC21143:
383 case DC21145:
384 {
385 /* Pick the default media */
386 if (Adapter->Features & DC_HAS_MII)
387 {
388 Adapter->DefaultMedia = MEDIA_MII;
389 }
390 else if (Adapter->MediaBitmap & (1 << MEDIA_10T))
391 {
392 /* Start at 10mbps to do internal auto-negotiation */
393 Adapter->DefaultMedia = MEDIA_10T;
394 }
395 else
396 {
397 /* The final entry in the media list should be checked first */
398 _BitScanReverse(&Adapter->DefaultMedia, Adapter->MediaBitmap);
399 }
400
401 /* Enable the PCS function to do 100mbps parallel detection */
402 if (Adapter->SymAdvertising & MII_ADV_100)
403 {
404 Adapter->Media[MEDIA_10T].OpMode |= DC_OPMODE_PORT_PCS;
405 Adapter->Media[MEDIA_10T_FD].OpMode |= DC_OPMODE_PORT_PCS;
406 Adapter->Media[MEDIA_AUI].OpMode |= DC_OPMODE_PORT_PCS;
407 Adapter->Media[MEDIA_BNC].OpMode |= DC_OPMODE_PORT_PCS;
408 Adapter->Media[MEDIA_HMR].OpMode |= DC_OPMODE_PORT_PCS;
409 }
410
411 Csr14 = DC_SIA_TXRX_AUTONEG;
412
413 if (Adapter->SymAdvertising & MII_ADV_10T_HD)
414 Csr14 |= DC_SIA_TXRX_ADV_10T_HD;
415
416 /* When NWay is turned on, the FDX bit advertises 10T FD */
417 if (Adapter->SymAdvertising & MII_ADV_10T_FD)
418 Adapter->Media[MEDIA_10T].OpMode |= DC_OPMODE_FULL_DUPLEX;
419
420 if (Adapter->SymAdvertising & MII_ADV_100T_HD)
422
423 if (Adapter->SymAdvertising & MII_ADV_100T_FD)
425
426 if (Adapter->SymAdvertising & MII_ADV_100T4)
427 Csr14 |= DC_SIA_TXRX_ADV_100T4;
428
429 /* Advertise the PHY capability */
430 Adapter->Media[MEDIA_10T].Csr14 |= Csr14;
431
432 /* This media may use GPIO data different from the 10T HD */
433 Adapter->Media[MEDIA_10T_FD].Csr14 |= Csr14;
434 break;
435 }
436
437 default:
438 break;
439 }
440 }
441 else /* Forced speed and duplex */
442 {
443 UseMii = FALSE;
444
445 if (Adapter->Features & DC_HAS_MII)
446 {
447 if (!MEDIA_MII_OVERRIDE(MediaNumber))
448 {
449 UseMii = TRUE;
450 }
451 }
452
453 if (!UseMii)
454 {
455 Adapter->DefaultMedia = MediaNumber;
456
457 if (MEDIA_IS_10T(MediaNumber))
458 {
459 Adapter->InterruptMask &= ~DC_IRQ_LINK_CHANGED;
460 Adapter->LinkStateChangeMask &= ~DC_IRQ_LINK_CHANGED;
461 }
462
463 if (MEDIA_IS_100(MediaNumber))
464 {
465 Adapter->InterruptMask &= ~(DC_IRQ_LINK_FAIL | DC_IRQ_LINK_PASS);
466 Adapter->LinkStateChangeMask &= ~(DC_IRQ_LINK_FAIL | DC_IRQ_LINK_PASS);
467 }
468 }
469 else
470 {
471 ULONG MiiAdvertising, MiiControl;
472 Adapter->DefaultMedia = MEDIA_MII;
473
474 switch (MediaNumber)
475 {
476 case MEDIA_10T:
477 MiiAdvertising = MII_ADV_10T_HD;
478 MiiControl = 0;
479 break;
480 case MEDIA_10T_FD:
481 MiiAdvertising = MII_ADV_10T_FD;
482 MiiControl = MII_CR_FULL_DUPLEX;
483 break;
484 case MEDIA_100TX_HD:
485 MiiAdvertising = MII_ADV_100T_HD;
486 MiiControl = MII_CR_SPEED_SELECTION;
487 break;
488 case MEDIA_100TX_FD:
489 MiiAdvertising = MII_ADV_100T_FD;
491 break;
492 case MEDIA_100T4:
493 MiiAdvertising = MII_ADV_100T4;
494 MiiControl = MII_CR_SPEED_SELECTION;
495 break;
496 default:
497 MiiAdvertising = 0;
498 MiiControl = 0;
499 break;
500 }
501
502 if (MiiControl & MII_CR_SPEED_SELECTION)
503 Adapter->LinkSpeedMbps = 100;
504 else
505 Adapter->LinkSpeedMbps = 10;
506
507 Adapter->MiiAdvertising = MiiAdvertising;
508 Adapter->MiiControl = MiiControl;
509 }
510 }
511
512 INFO("Default media is %s\n", MediaNumber2Str(Adapter, Adapter->DefaultMedia));
513}
514
515static
516CODE_SEG("PAGE")
517VOID
519 _In_ PDC21X4_ADAPTER Adapter)
520{
521 PAGED_CODE();
522
523 Adapter->Media[MEDIA_10T ].OpMode = 0;
524 Adapter->Media[MEDIA_BNC ].OpMode = 0;
525 Adapter->Media[MEDIA_AUI ].OpMode = 0;
526 Adapter->Media[MEDIA_100TX_HD].OpMode = DC_OPMODE_PORT_SELECT |
528 Adapter->Media[MEDIA_10T_FD ].OpMode = DC_OPMODE_FULL_DUPLEX;
531 Adapter->Media[MEDIA_100T4 ].OpMode = DC_OPMODE_PORT_SELECT |
533 Adapter->Media[MEDIA_100FX_HD].OpMode = DC_OPMODE_PORT_SELECT |
539 Adapter->Media[MEDIA_HMR ].OpMode = DC_OPMODE_PORT_HEARTBEAT_DISABLE;
540}
541
542CODE_SEG("PAGE")
543VOID
545 _In_ PDC21X4_ADAPTER Adapter)
546{
547 PAGED_CODE();
548
549 /*
550 * Set the default internal values for the SIA/SYM operating modes.
551 * The SROM parsing code may later overwrite them.
552 */
553 switch (Adapter->ChipType)
554 {
555 case DC21040:
556 {
557 Adapter->Media[MEDIA_10T].Csr13 = 0x8F01;
558 Adapter->Media[MEDIA_10T].Csr14 = 0xFFFF;
559 Adapter->Media[MEDIA_10T].Csr15 = 0x0000;
560
561 Adapter->Media[MEDIA_BNC].Csr13 = 0x8F09;
562 Adapter->Media[MEDIA_BNC].Csr14 = 0x0705;
563 Adapter->Media[MEDIA_BNC].Csr15 = 0x0006;
564
565 Adapter->Media[MEDIA_10T_FD].Csr13 = 0x8F01;
566 Adapter->Media[MEDIA_10T_FD].Csr14 = 0xFFFD;
567 Adapter->Media[MEDIA_10T_FD].Csr15 = 0x0000;
568 Adapter->Media[MEDIA_10T_FD].OpMode = DC_OPMODE_FULL_DUPLEX;
569 break;
570 }
571
572 case DC21041:
573 {
574 Adapter->Media[MEDIA_10T].Csr13 = 0xEF01;
575 Adapter->Media[MEDIA_10T].Csr14 = 0xFF3F;
576 Adapter->Media[MEDIA_10T].Csr15 = 0x0008;
577
578 Adapter->Media[MEDIA_BNC].Csr13 = 0xEF09;
579 Adapter->Media[MEDIA_BNC].Csr14 = 0xF7FD;
580 Adapter->Media[MEDIA_BNC].Csr15 = 0x0006;
581
582 Adapter->Media[MEDIA_AUI].Csr13 = 0xEF09;
583 Adapter->Media[MEDIA_AUI].Csr14 = 0xF7FD;
584 Adapter->Media[MEDIA_AUI].Csr15 = 0x000E;
585
586 Adapter->Media[MEDIA_10T_HD].Csr13 = 0xEF01;
587 Adapter->Media[MEDIA_10T_HD].Csr14 = 0x7F3F;
588 Adapter->Media[MEDIA_10T_HD].Csr15 = 0x0008;
589
590 Adapter->Media[MEDIA_10T_FD].Csr13 = 0xEF01;
591 Adapter->Media[MEDIA_10T_FD].Csr14 = 0x7F3D;
592 Adapter->Media[MEDIA_10T_FD].Csr15 = 0x0008;
593 Adapter->Media[MEDIA_10T_FD].OpMode = DC_OPMODE_FULL_DUPLEX;
594 break;
595 }
596
597 case DC21140:
598 {
599 MediaInitOpMode2114x(Adapter);
600 break;
601 }
602
603 case DC21143:
604 case DC21145:
605 {
606 Adapter->Media[MEDIA_10T].Csr13 = 0x0001;
607 Adapter->Media[MEDIA_10T].Csr14 = 0x7F3F;
608 Adapter->Media[MEDIA_10T].Csr15 = 0x0008;
609
610 Adapter->Media[MEDIA_BNC].Csr13 = 0x0009;
611 Adapter->Media[MEDIA_BNC].Csr14 = 0x0705;
612 Adapter->Media[MEDIA_BNC].Csr15 = 0x0006;
613
614 Adapter->Media[MEDIA_AUI].Csr13 = 0x0009;
615 Adapter->Media[MEDIA_AUI].Csr14 = 0x0705;
616 Adapter->Media[MEDIA_AUI].Csr15 = 0x000E;
617
618 Adapter->Media[MEDIA_10T_FD].Csr13 = 0x0001;
619 Adapter->Media[MEDIA_10T_FD].Csr14 = 0x7F3D;
620 Adapter->Media[MEDIA_10T_FD].Csr15 = 0x0008;
621
622 Adapter->Media[MEDIA_HMR].Csr13 = 0x0009;
623 Adapter->Media[MEDIA_HMR].Csr14 = 0x0505;
624 Adapter->Media[MEDIA_HMR].Csr15 = 0x0010;
625
626 MediaInitOpMode2114x(Adapter);
627 break;
628 }
629
630 default:
631 break;
632 }
633}
#define PAGED_CODE()
#define CODE_SEG(...)
unsigned char BOOLEAN
Definition: actypes.h:127
VOID DcWriteGpio(_In_ PDC21X4_ADAPTER Adapter, _In_ ULONG Value)
Definition: hardware.c:64
#define DC_MII_AUTOSENSE
Definition: dc21x4.h:116
#define DC_MODE_AUI_FAILED
Definition: dc21x4.h:166
VOID DcStopTxRxProcess(_In_ PDC21X4_ADAPTER Adapter)
Definition: hardware.c:38
#define DC_HAS_MII
Definition: dc21x4.h:113
#define DC_AUTOSENSE
Definition: dc21x4.h:124
#define DC_MODE_BNC_FAILED
Definition: dc21x4.h:167
BOOLEAN MiiRead(_In_ PDC21X4_ADAPTER Adapter, _In_ ULONG PhyAddress, _In_ ULONG RegAddress, _Out_ PULONG Data)
Definition: phy.c:101
VOID DcWriteSia(_In_ PDC21X4_ADAPTER Adapter, _In_ ULONG Csr13, _In_ ULONG Csr14, _In_ ULONG Csr15)
Definition: hardware.c:89
#define DC_MODE_TEST_PACKET
Definition: dc21x4.h:165
#define DC_WRITE(Adapter, Register, Value)
Definition: dc21x4.h:272
BOOLEAN MiiWrite(_In_ PDC21X4_ADAPTER Adapter, _In_ ULONG PhyAddress, _In_ ULONG RegAddress, _In_ ULONG Data)
Definition: phy.c:78
#define MII_STATUS
Definition: dc21x4hw.h:566
#define MII_SR_AUTONEG_COMPLETE
Definition: dc21x4hw.h:568
#define MII_ADV_10T_FD
Definition: dc21x4hw.h:574
#define DC_SIA_TXRX_ADV_100TX_FD
Definition: dc21x4hw.h:471
#define MII_LP_100T_HD
Definition: dc21x4hw.h:583
#define DC_SIA_TXRX_ADV_10T_HD
Definition: dc21x4hw.h:460
#define DC_OPMODE_FULL_DUPLEX
Definition: dc21x4hw.h:327
#define MII_ADV_100T4
Definition: dc21x4hw.h:577
@ DC21145
Definition: dc21x4hw.h:16
@ DC21140
Definition: dc21x4hw.h:14
@ DC21041
Definition: dc21x4hw.h:13
@ DC21040
Definition: dc21x4hw.h:12
@ DC21143
Definition: dc21x4hw.h:15
#define MII_ADV_CSMA
Definition: dc21x4hw.h:572
@ DcCsr6_OpMode
Definition: dc21x4hw.h:180
@ DcCsr12_Gpio
Definition: dc21x4hw.h:187
#define MII_AUTONEG_ADVERTISE
Definition: dc21x4hw.h:571
#define DC_SIA_TXRX_ADV_100TX_HD
Definition: dc21x4hw.h:470
#define MII_CR_POWER_DOWN
Definition: dc21x4hw.h:561
#define MII_CR_RESET
Definition: dc21x4hw.h:565
#define MII_CR_FULL_DUPLEX
Definition: dc21x4hw.h:558
#define MII_CR_AUTONEG
Definition: dc21x4hw.h:562
#define MII_ADV_100
Definition: dc21x4hw.h:596
#define MII_SR_LINK_STATUS
Definition: dc21x4hw.h:567
#define MII_CR_AUTONEG_RESTART
Definition: dc21x4hw.h:559
#define DC_OPMODE_PORT_HEARTBEAT_DISABLE
Definition: dc21x4hw.h:335
#define MII_LP_10T_FD
Definition: dc21x4hw.h:582
#define DC_OPMODE_PORT_PCS
Definition: dc21x4hw.h:338
#define DC_OPMODE_PORT_XMIT_10
Definition: dc21x4hw.h:337
#define DC_SIA_TXRX_AUTONEG
Definition: dc21x4hw.h:461
#define MII_LP_100T_FD
Definition: dc21x4hw.h:584
#define DC_SIA_TXRX_ADV_100T4
Definition: dc21x4hw.h:472
#define DC_IRQ_LINK_PASS
Definition: dc21x4hw.h:271
#define MII_LP_100T4
Definition: dc21x4hw.h:585
#define MII_ADV_100T_HD
Definition: dc21x4hw.h:575
#define MII_AUTONEG_LINK_PARTNER
Definition: dc21x4hw.h:580
#define MII_ADV_100T_FD
Definition: dc21x4hw.h:576
#define MII_CR_ISOLATE
Definition: dc21x4hw.h:560
#define MII_ADV_10T_HD
Definition: dc21x4hw.h:573
#define DC_OPMODE_PORT_SELECT
Definition: dc21x4hw.h:334
#define DC_IRQ_LINK_FAIL
Definition: dc21x4hw.h:281
#define MII_CR_SPEED_SELECTION
Definition: dc21x4hw.h:563
#define MII_CONTROL
Definition: dc21x4hw.h:556
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define MediaNumber2Str
Definition: debug.h:93
#define INFO_VERB
Definition: debug.h:90
#define INFO
Definition: debug.h:89
static VOID MediaMiiGetSpeedAndDuplex(_In_ PDC21X4_ADAPTER Adapter, _Out_ PBOOLEAN FullDuplex, _Out_ PBOOLEAN Speed100)
Definition: media.c:101
VOID MediaSelectMiiPort(_In_ PDC21X4_ADAPTER Adapter, _In_ BOOLEAN ResetPhy)
Definition: media.c:212
VOID MediaMiiSelect(_In_ PDC21X4_ADAPTER Adapter)
Definition: media.c:194
VOID MediaInitMediaList(_In_ PDC21X4_ADAPTER Adapter)
Definition: media.c:544
static VOID MediaInitOpMode2114x(_In_ PDC21X4_ADAPTER Adapter)
Definition: media.c:518
VOID MediaInitDefaultMedia(_In_ PDC21X4_ADAPTER Adapter, _In_ ULONG MediaNumber)
Definition: media.c:322
static VOID MediaMiiSetSpeedAndDuplex(_In_ PDC21X4_ADAPTER Adapter, _In_ BOOLEAN FullDuplex, _In_ BOOLEAN Speed100)
Definition: media.c:64
VOID MediaGprSelect(_In_ PDC21X4_ADAPTER Adapter)
Definition: media.c:300
VOID MediaIndicateConnect(_In_ PDC21X4_ADAPTER Adapter, _In_ BOOLEAN LinkUp)
Definition: media.c:17
BOOLEAN MediaMiiCheckLink(_In_ PDC21X4_ADAPTER Adapter)
Definition: media.c:141
VOID MediaSiaSelect(_In_ PDC21X4_ADAPTER Adapter)
Definition: media.c:265
static ULONG MediaMiiNextMedia(_In_ PDC21X4_ADAPTER Adapter)
Definition: media.c:44
#define KeGetCurrentIrql()
Definition: env_spec_w32.h:706
#define DISPATCH_LEVEL
Definition: env_spec_w32.h:696
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
if(dx< 0)
Definition: linetemp.h:194
#define MEDIA_AUI
Definition: media.h:48
#define MEDIA_MII
Definition: media.h:67
#define MEDIA_100TX_FD
Definition: media.h:52
#define MEDIA_10T_HD
Definition: media.h:50
#define MEDIA_IS_FIXED(Adapter)
Definition: media.h:126
#define MEDIA_IS_10T(MediaNumber)
Definition: media.h:114
#define MEDIA_IS_100(MediaNumber)
Definition: media.h:118
#define MEDIA_AUTO
Definition: media.h:62
#define MEDIA_IS_FD(MediaNumber)
Definition: media.h:106
#define MEDIA_100FX_FD
Definition: media.h:55
#define MEDIA_MII_OVERRIDE(MediaNumber)
Definition: media.h:102
#define MEDIA_10T_FD
Definition: media.h:51
#define MEDIA_10T
Definition: media.h:46
#define MEDIA_100FX_HD
Definition: media.h:54
#define MEDIA_HMR
Definition: media.h:56
#define MEDIA_100T4
Definition: media.h:53
#define MEDIA_BNC
Definition: media.h:47
#define MEDIA_100TX_HD
Definition: media.h:49
#define ASSERT(a)
Definition: mode.c:44
#define NDIS_STATUS_MEDIA_CONNECT
Definition: ndis.h:361
#define NdisMIndicateStatusComplete(MiniportAdapterHandle)
Definition: ndis.h:5580
#define NdisDprReleaseSpinLock(_SpinLock)
Definition: ndis.h:4133
#define NDIS_STATUS_MEDIA_DISCONNECT
Definition: ndis.h:362
#define NdisStallExecution
Definition: ndis.h:4453
#define NdisDprAcquireSpinLock(_SpinLock)
Definition: ndis.h:4124
#define NdisMIndicateStatus(MiniportAdapterHandle, GeneralStatus, StatusBuffer, StatusBufferSize)
Definition: ndis.h:5570
VOID EXPORT NdisMSleep(IN ULONG MicrosecondsToSleep)
Definition: miniport.c:3002
#define _Out_
Definition: no_sal2.h:160
#define _In_
Definition: no_sal2.h:158
@ LinkUp
Definition: srb.h:741
unsigned char _BitScanReverse(unsigned long *_Index, unsigned long _Mask)
Definition: intrin_arm.h:180
#define TRACE(s)
Definition: solgame.cpp:4
ULONG Csr14
Definition: media.h:22
USHORT GpioCtrl
Definition: media.h:14
ULONG Csr13
Definition: media.h:21
ULONG Csr15
Definition: media.h:23
ULONG OpMode
Definition: media.h:12
USHORT GpioData
Definition: media.h:15
unsigned char * PBOOLEAN
Definition: typedefs.h:53
uint32_t ULONG
Definition: typedefs.h:59