コード例 #1
0
ファイル: mii.c プロジェクト: AhmadTux/DragonFlyBSD
static int
miibus_readreg(device_t dev, int phy, int reg)
{
	device_t		parent;

	parent = device_get_parent(dev);
	return(MIIBUS_READREG(parent, phy, reg));
}
コード例 #2
0
ファイル: mii.c プロジェクト: AhmadTux/DragonFlyBSD
/*
 * Check to see if there is a PHY at this address.  Note,
 * many braindead PHYs report 0/0 in their ID registers,
 * so we test for media in the BMSR.
 */
static __inline int
miibus_no_phy(device_t dev, int phyno)
{
	int bmsr;

	bmsr = MIIBUS_READREG(dev, phyno, MII_BMSR);
	return (bmsr == 0 || bmsr == 0xffff ||
		(bmsr & (BMSR_MEDIAMASK | BMSR_EXTSTAT)) == 0);
}
コード例 #3
0
ファイル: mii.c プロジェクト: AhmadTux/DragonFlyBSD
int
miibus_probe(device_t dev)
{
	struct mii_attach_args	ma, *args;
	struct mii_data		*mii;
	device_t		child = NULL, parent;
	int			capmask = 0xFFFFFFFF;

	mii = device_get_softc(dev);
	parent = device_get_parent(dev);
	LIST_INIT(&mii->mii_phys);
	bzero(&ma, sizeof(ma));

	for (ma.mii_phyno = 0; ma.mii_phyno < MII_NPHY; ma.mii_phyno++) {
		if (miibus_no_phy(parent, ma.mii_phyno))
			continue;

		/*
		 * Extract the IDs. Braindead PHYs will be handled by
		 * the `ukphy' driver, as we have no ID information to
		 * match on.
	 	 */
		ma.mii_id1 = MIIBUS_READREG(parent, ma.mii_phyno,
		    MII_PHYIDR1);
		ma.mii_id2 = MIIBUS_READREG(parent, ma.mii_phyno,
		    MII_PHYIDR2);

		ma.mii_data = mii;
		ma.mii_capmask = capmask;

		args = kmalloc(sizeof(struct mii_attach_args),
			      M_DEVBUF, M_INTWAIT);
		*args = ma;
		child = device_add_child(dev, NULL, -1);
		device_set_ivars(child, args);
	}

	if (child == NULL)
		return(ENXIO);

	device_set_desc(dev, "MII bus");

	return(0);
}
コード例 #4
0
ファイル: gentbi.c プロジェクト: coyizumi/cs111
static int
gentbi_probe(device_t dev)
{
	device_t parent;
	struct mii_attach_args *ma;
	int bmsr, extsr;

	parent = device_get_parent(dev);
	ma = device_get_ivars(dev);

	/*
	 * We match as a generic TBI if:
	 *
	 *	- There is no media in the BMSR.
	 *	- EXTSR has only 1000X.
	 */
	bmsr = MIIBUS_READREG(parent, ma->mii_phyno, MII_BMSR);
	if ((bmsr & BMSR_EXTSTAT) == 0 || (bmsr & BMSR_MEDIAMASK) != 0)
		return (ENXIO);

	extsr = MIIBUS_READREG(parent, ma->mii_phyno, MII_EXTSR);
	if (extsr & (EXTSR_1000TFDX|EXTSR_1000THDX))
		return (ENXIO);

	if (extsr & (EXTSR_1000XFDX|EXTSR_1000XHDX)) {
		/*
		 * We think this is a generic TBI.  Return a match
		 * priority higher than ukphy, but lower than what
		 * specific drivers will return.
		 */
		device_set_desc(dev, "Generic ten-bit interface");
		return (BUS_PROBE_LOW_PRIORITY);
	}

	return (ENXIO);
}
コード例 #5
0
static void
rlswitch_phydump(device_t dev) {
	int phy, reg, val;
	struct mii_softc *sc;

	sc = device_get_softc(dev);
	device_printf(dev, "rlswitchphydump\n");
	for (phy = 0; phy <= 5; phy++) {
		printf("PHY%i:", phy);
		for (reg = 0; reg <= 31; reg++) {
			val = MIIBUS_READREG(sc->mii_dev, phy, reg);
			printf(" 0x%x", val);
		}
		printf("\n");
	}
}