View | Details | Raw Unified | Return to bug 197265 | Differences between
and this patch

Collapse All | Expand All

(-)sys/dev/mii/rgephyreg.h (+10 lines)
Lines 162-165 Link Here
162
#define	RGEPHY_SSR_ALDPS	0x0008	/* RTL8211C(L) only */
162
#define	RGEPHY_SSR_ALDPS	0x0008	/* RTL8211C(L) only */
163
#define	RGEPHY_SSR_JABBER	0x0001	/* Jabber */
163
#define	RGEPHY_SSR_JABBER	0x0001	/* Jabber */
164
164
165
/* RTL8211F */
166
#define RGEPHY_F_MII_SSR	0x1a	/* PHY Specific status register */
167
#define	RGEPHY_F_SSR_S1000	0x0020	/* 1000Mbps */
168
#define	RGEPHY_F_SSR_S100	0x0010	/* 100Mbps */
169
#define	RGEPHY_F_SSR_S10	0x0000	/* 10Mbps */
170
#define	RGEPHY_F_SSR_SPD_MASK	0x0030
171
#define	RGEPHY_F_SSR_FDX	0x0008	/* full duplex */
172
#define	RGEPHY_F_SSR_LINK	0x0004	/* link up */
173
#define	RGEPHY_F_SSR_JABBER	0x0001	/* Jabber */
174
165
#endif /* _DEV_RGEPHY_MIIREG_H_ */
175
#endif /* _DEV_RGEPHY_MIIREG_H_ */
(-)sys/dev/mii/rgephy.c (-26 / +65 lines)
Lines 239-249 Link Here
239
		 */
239
		 */
240
		if ((sc->mii_flags & MIIF_PHYPRIV0) == 0 &&
240
		if ((sc->mii_flags & MIIF_PHYPRIV0) == 0 &&
241
		    sc->mii_mpd_rev >= 2) {
241
		    sc->mii_mpd_rev >= 2) {
242
			/* RTL8211B(L) */
242
			if (sc->mii_mpd_rev == 6) {
243
			reg = PHY_READ(sc, RGEPHY_MII_SSR);
243
				/* RTL8211F */
244
			if (reg & RGEPHY_SSR_LINK) {
244
				reg = PHY_READ(sc, RGEPHY_F_MII_SSR);
245
				sc->mii_ticks = 0;
245
				if (reg & RGEPHY_F_SSR_LINK) {
246
				break;
246
					sc->mii_ticks = 0;
247
					break;
248
				}
249
			} else {
250
				/* RTL8211B(L) */
251
				reg = PHY_READ(sc, RGEPHY_MII_SSR);
252
				if (reg & RGEPHY_SSR_LINK) {
253
					sc->mii_ticks = 0;
254
					break;
255
				}
247
			}
256
			}
248
		} else {
257
		} else {
249
			reg = PHY_READ(sc, RL_GMEDIASTAT);
258
			reg = PHY_READ(sc, RL_GMEDIASTAT);
Lines 294-302 Link Here
294
	mii->mii_media_active = IFM_ETHER;
303
	mii->mii_media_active = IFM_ETHER;
295
304
296
	if ((sc->mii_flags & MIIF_PHYPRIV0) == 0 && sc->mii_mpd_rev >= 2) {
305
	if ((sc->mii_flags & MIIF_PHYPRIV0) == 0 && sc->mii_mpd_rev >= 2) {
297
		ssr = PHY_READ(sc, RGEPHY_MII_SSR);
306
		if (sc->mii_mpd_rev == 6) {
298
		if (ssr & RGEPHY_SSR_LINK)
307
			/* RTL8211F */
299
			mii->mii_media_status |= IFM_ACTIVE;
308
			ssr = PHY_READ(sc, RGEPHY_F_MII_SSR);
309
			if (ssr & RGEPHY_F_SSR_LINK)
310
				mii->mii_media_status |= IFM_ACTIVE;
311
		} else {
312
			ssr = PHY_READ(sc, RGEPHY_MII_SSR);
313
			if (ssr & RGEPHY_SSR_LINK)
314
				mii->mii_media_status |= IFM_ACTIVE;
315
		}
300
	} else {
316
	} else {
301
		bmsr = PHY_READ(sc, RL_GMEDIASTAT);
317
		bmsr = PHY_READ(sc, RL_GMEDIASTAT);
302
		if (bmsr & RL_GMEDIASTAT_LINK)
318
		if (bmsr & RL_GMEDIASTAT_LINK)
Lines 324-348 Link Here
324
	}
340
	}
325
341
326
	if ((sc->mii_flags & MIIF_PHYPRIV0) == 0 && sc->mii_mpd_rev >= 2) {
342
	if ((sc->mii_flags & MIIF_PHYPRIV0) == 0 && sc->mii_mpd_rev >= 2) {
327
		ssr = PHY_READ(sc, RGEPHY_MII_SSR);
343
		if (sc->mii_mpd_rev == 6) {
328
		switch (ssr & RGEPHY_SSR_SPD_MASK) {
344
			/* RTL8211F */
329
		case RGEPHY_SSR_S1000:
345
			ssr = PHY_READ(sc, RGEPHY_F_MII_SSR);
330
			mii->mii_media_active |= IFM_1000_T;
346
			switch (ssr & RGEPHY_F_SSR_SPD_MASK) {
331
			break;
347
			case RGEPHY_F_SSR_S1000:
332
		case RGEPHY_SSR_S100:
348
				mii->mii_media_active |= IFM_1000_T;
333
			mii->mii_media_active |= IFM_100_TX;
349
				break;
334
			break;
350
			case RGEPHY_F_SSR_S100:
335
		case RGEPHY_SSR_S10:
351
				mii->mii_media_active |= IFM_100_TX;
336
			mii->mii_media_active |= IFM_10_T;
352
				break;
337
			break;
353
			case RGEPHY_F_SSR_S10:
338
		default:
354
				mii->mii_media_active |= IFM_10_T;
339
			mii->mii_media_active |= IFM_NONE;
355
				break;
340
			break;
356
			default:
357
				mii->mii_media_active |= IFM_NONE;
358
				break;
359
			}
360
			if (ssr & RGEPHY_F_SSR_FDX)
361
				mii->mii_media_active |= IFM_FDX;
362
			else
363
				mii->mii_media_active |= IFM_HDX;
364
		} else {
365
			ssr = PHY_READ(sc, RGEPHY_MII_SSR);
366
			switch (ssr & RGEPHY_SSR_SPD_MASK) {
367
			case RGEPHY_SSR_S1000:
368
				mii->mii_media_active |= IFM_1000_T;
369
				break;
370
			case RGEPHY_SSR_S100:
371
				mii->mii_media_active |= IFM_100_TX;
372
				break;
373
			case RGEPHY_SSR_S10:
374
				mii->mii_media_active |= IFM_10_T;
375
				break;
376
			default:
377
				mii->mii_media_active |= IFM_NONE;
378
				break;
379
			}
380
			if (ssr & RGEPHY_SSR_FDX)
381
				mii->mii_media_active |= IFM_FDX;
382
			else
383
				mii->mii_media_active |= IFM_HDX;
341
		}
384
		}
342
		if (ssr & RGEPHY_SSR_FDX)
343
			mii->mii_media_active |= IFM_FDX;
344
		else
345
			mii->mii_media_active |= IFM_HDX;
346
	} else {
385
	} else {
347
		bmsr = PHY_READ(sc, RL_GMEDIASTAT);
386
		bmsr = PHY_READ(sc, RL_GMEDIASTAT);
348
		if (bmsr & RL_GMEDIASTAT_1000MBPS)
387
		if (bmsr & RL_GMEDIASTAT_1000MBPS)

Return to bug 197265