示例#1
0
static __u32 robo_read32(__u8 page, __u8 reg)
{
	robo_reg(page, reg, REG_MII_ADDR_READ);

	return mdio_read(robo.phy_addr, REG_MII_DATA0) +
		(mdio_read(robo.phy_addr, REG_MII_DATA0 + 1) << 16);
}
示例#2
0
static __u32 robo_read32(__u8 page, __u8 reg)
{
	robo_reg(page, reg, REG_MII_ADDR_READ);
	
	return mdio_read(ROBO_PHY_ADDR, REG_MII_DATA0) +
		(mdio_read(ROBO_PHY_ADDR, REG_MII_DATA0 + 1) << 16);
}
示例#3
0
static void robo_write16(__u8 page, __u8 reg, __u16 val16)
{
	/* write data */
	mdio_write(ROBO_PHY_ADDR, REG_MII_DATA0, val16);

	robo_reg(page, reg, REG_MII_ADDR_WRITE);
}
示例#4
0
static void robo_write32(__u8 page, __u8 reg, __u32 val32)
{
	/* write data */
	mdio_write(ROBO_PHY_ADDR, REG_MII_DATA0, val32 & 65535);
	mdio_write(ROBO_PHY_ADDR, REG_MII_DATA0 + 1, val32 >> 16);
	
	robo_reg(page, reg, REG_MII_ADDR_WRITE);
}
示例#5
0
static void robo_read(__u8 page, __u8 reg, __u16 *val, int count)
{
	int i;
	
	robo_reg(page, reg, REG_MII_ADDR_READ);
	
	for (i = 0; i < count; i++)
		val[i] = mdio_read(ROBO_PHY_ADDR, REG_MII_DATA0 + i);
}
示例#6
0
文件: robocfg.c 项目: AllardJ/Tomato
static void robo_write(robo_t *robo, u8 page, u8 reg, u16 *val, int count)
{
	int i;

	for (i = 0; i < count; i++)
		mdio_write(robo, ROBO_PHY_ADDR, REG_MII_DATA0 + i, val[i]);

	robo_reg(robo, page, reg, REG_MII_ADDR_WRITE);
}
示例#7
0
文件: robocfg.c 项目: hajuuk/asuswrt
static void robo_write16(robo_t *robo, u8 page, u8 reg, u16 val16)
{
#ifdef BCM5301X
	robo_write(robo, page, reg, &val16, 1);
#else
	/* write data */
	mdio_write(robo, ROBO_PHY_ADDR, REG_MII_DATA0, val16);

	robo_reg(robo, page, reg, REG_MII_ADDR_WRITE);
#endif
}
示例#8
0
文件: robocfg.c 项目: hajuuk/asuswrt
static void robo_write32(robo_t *robo, u8 page, u8 reg, u32 val32)
{
#ifdef BCM5301X
	robo_write(robo, page, reg, (u16 *) &val32, 2);
#else
	/* write data */
	mdio_write(robo, ROBO_PHY_ADDR, REG_MII_DATA0, (u16 )(val32 & 0xFFFF));
	mdio_write(robo, ROBO_PHY_ADDR, REG_MII_DATA0 + 1, (u16 )(val32 >> 16));
	
	robo_reg(robo, page, reg, REG_MII_ADDR_WRITE);
#endif
}
示例#9
0
文件: robocfg.c 项目: hajuuk/asuswrt
static u16 robo_read16(robo_t *robo, u8 page, u8 reg)
{
#ifdef BCM5301X
	u16 val16;

	robo_read(robo, page, reg, &val16, 1);
	return val16;
#else
	robo_reg(robo, page, reg, REG_MII_ADDR_READ);
	
	return mdio_read(robo, ROBO_PHY_ADDR, REG_MII_DATA0);
#endif
}
示例#10
0
文件: robocfg.c 项目: hajuuk/asuswrt
static u32 robo_read32(robo_t *robo, u8 page, u8 reg)
{
#ifdef BCM5301X
	u32 val32;

	robo_read(robo, page, reg, (u16 *) &val32, 2);
	return val32;
#else
	robo_reg(robo, page, reg, REG_MII_ADDR_READ);
	
	return ((u32 )mdio_read(robo, ROBO_PHY_ADDR, REG_MII_DATA0)) |
		((u32 )mdio_read(robo, ROBO_PHY_ADDR, REG_MII_DATA0 + 1) << 16);
#endif
}
示例#11
0
文件: robocfg.c 项目: AllardJ/Tomato
static void robo_write16(robo_t *robo, u8 page, u8 reg, u16 val16)
{
#ifdef BCM5301X
        int args[5];

        args[0] = page << 16;
        args[0] |= reg;
        args[1] = 2;
        args[2] = val16;
        robo->ifr.ifr_data = (caddr_t) args;

        ioctl(robo->fd, SIOCSETCROBOWR, (caddr_t)&robo->ifr);

#else
	/* write data */
	mdio_write(robo, ROBO_PHY_ADDR, REG_MII_DATA0, val16);

	robo_reg(robo, page, reg, REG_MII_ADDR_WRITE);
#endif
}
示例#12
0
文件: robocfg.c 项目: hajuuk/asuswrt
static void robo_write(robo_t *robo, u8 page, u8 reg, u16 *val, int count)
{
#ifdef BCM5301X
	int args[5];

	args[0] = (page << 16) | (reg & 0xffff);
	args[1] = count * 2;
	memcpy(&args[2], val, count * 2);

	robo->ifr.ifr_data = (caddr_t) args;

	ioctl(robo->fd, SIOCSETCROBOWR, (caddr_t)&robo->ifr);
#else
	int i;

	for (i = 0; i < count; i++)
		mdio_write(robo, ROBO_PHY_ADDR, REG_MII_DATA0 + i, val[i]);

	robo_reg(robo, page, reg, REG_MII_ADDR_WRITE);
#endif
}
示例#13
0
文件: robocfg.c 项目: AllardJ/Tomato
static u16 robo_read16(robo_t *robo, u8 page, u8 reg)
{

#ifdef BCM5301X
        int args[5];

	args[0] = page << 16;
	args[0] |= reg;
	args[1] = 2;
	args[2] = 0;
        robo->ifr.ifr_data = (caddr_t) args;

        if (ioctl(robo->fd, SIOCGETCROBORD, (caddr_t)&robo->ifr) < 0)
                return 0;

        return args[2];
#else
	robo_reg(robo, page, reg, REG_MII_ADDR_READ);
	
	return mdio_read(robo, ROBO_PHY_ADDR, REG_MII_DATA0);
#endif
}
示例#14
0
文件: robocfg.c 项目: AllardJ/Tomato
static void robo_read(robo_t *robo, u8 page, u8 reg, u16 *val, int count)
{
	int i;

#ifdef BCM5301X
        int args[5];

        args[0] = page << 16;
        args[0] |= reg & 0xffff;
        args[1] = count * 2; // convert to bytes
        args[2] = 0;

        robo->ifr.ifr_data = (caddr_t) args;

	if (ioctl(robo->fd, SIOCGETCROBORD, (caddr_t)&robo->ifr) >= 0) 
		memcpy(val, &args[2], count * 2);
#else
	robo_reg(robo, page, reg, REG_MII_ADDR_READ);

	for (i = 0; i < count; i++)
		val[i] = mdio_read(robo, ROBO_PHY_ADDR, REG_MII_DATA0 + i);
#endif
}
示例#15
0
文件: robocfg.c 项目: AllardJ/Tomato
static void robo_write32(robo_t *robo, u8 page, u8 reg, u32 val32)
{
#ifdef BCM5301X
        int args[5];

        args[0] = page << 16;
        args[0] |= reg;
        args[1] = 4;    // len
        args[2] = val32;    // value

        robo->ifr.ifr_data = (caddr_t) args;
        ioctl(robo->fd, SIOCSETCROBOWR, (caddr_t)&robo->ifr);

//        printf("rd32: 0x%16x\n", args[2]);

#else
	/* write data */
	mdio_write(robo, ROBO_PHY_ADDR, REG_MII_DATA0, (u16 )(val32 & 0xFFFF));
	mdio_write(robo, ROBO_PHY_ADDR, REG_MII_DATA0 + 1, (u16 )(val32 >> 16));
	
	robo_reg(robo, page, reg, REG_MII_ADDR_WRITE);
#endif
}
示例#16
0
文件: robocfg.c 项目: AllardJ/Tomato
static u32 robo_read32(robo_t *robo, u8 page, u8 reg)
{
#ifdef BCM5301X
        int args[5];

        args[0] = page << 16;
        args[0] |= reg;
        args[1] = 4;	// len
        args[2] = 0;	// value

        robo->ifr.ifr_data = (caddr_t) args;
        if (ioctl(robo->fd, SIOCGETCROBORD, (caddr_t)&robo->ifr) < 0)
                return 0;

//        printf("rd32: 0x%16x\n", args[2]);
        return args[2];

#else
	robo_reg(robo, page, reg, REG_MII_ADDR_READ);
	
	return ((u32 )mdio_read(robo, ROBO_PHY_ADDR, REG_MII_DATA0)) |
		((u32 )mdio_read(robo, ROBO_PHY_ADDR, REG_MII_DATA0 + 1) << 16);
#endif
}
示例#17
0
文件: robocfg.c 项目: hajuuk/asuswrt
static void robo_read(robo_t *robo, u8 page, u8 reg, u16 *val, int count)
{
#ifdef BCM5301X
	int args[5];

	args[0] = (page << 16) | (reg & 0xffff);
	args[1] = count * 2;
	args[2] = 0;

	robo->ifr.ifr_data = (caddr_t) args;

	if (ioctl(robo->fd, SIOCGETCROBORD, (caddr_t)&robo->ifr) < 0)
		return;

	memcpy(val, &args[2], count * 2);
#else
	int i;
	
	robo_reg(robo, page, reg, REG_MII_ADDR_READ);
	
	for (i = 0; i < count; i++)
		val[i] = mdio_read(robo, ROBO_PHY_ADDR, REG_MII_DATA0 + i);
#endif
}
示例#18
0
static __u16 robo_read16(__u8 page, __u8 reg)
{
	robo_reg(page, reg, REG_MII_ADDR_READ);
	
	return mdio_read(ROBO_PHY_ADDR, REG_MII_DATA0);
}
示例#19
0
static __u16 robo_read16(__u8 page, __u8 reg)
{
	robo_reg(page, reg, REG_MII_ADDR_READ);

	return mdio_read(robo.phy_addr, REG_MII_DATA0);
}