我看内核网卡驱动的时候,看到
static int emac_mii_read(struct mii_bus *bus, int phy_id, int phy_reg)
{
unsigned int phy_data = 0;
unsigned int phy_control;
/* Wait until mdio is ready for next command */
MDIO_WAIT_FOR_USER_ACCESS;
phy_control = (MDIO_USERACCESS_GO |
MDIO_USERACCESS_READ |
((phy_reg << 21) & MDIO_USERACCESS_REGADR) |
((phy_id << 16) & MDIO_USERACCESS_PHYADR) |
(phy_data & MDIO_USERACCESS_DATA));
emac_mdio_write(MDIO_USERACCESS(0), phy_control);
/* Wait until mdio is ready for next command */
MDIO_WAIT_FOR_USER_ACCESS;
return emac_mdio_read(MDIO_USERACCESS(0)) & MDIO_USERACCESS_DATA;
}
在 return emac_mdio_read(MDIO_USERACCESS(0)) & MDIO_USERACCESS_DATA;这个语句在执行之前,开发板的网卡驱动返回的数据都是正常的(两块开发板的比较,一块板子是能正常通信,一块是不能的)
#define MDIO_USERACCESS(inst) (0x80 + (inst * 8))
#define emac_mdio_read(reg) ioread32(bus->priv + (reg))
在最后一个语句执行的时候,关联到ioread32函数的时候,我找不到函数体了,我看了搜索相关的文件,没有找到这个函数体,想问下,如何找到这个函数的函数体。因为就是因为这个函数返回的值不正确,使用导致我们的网卡驱动出现问题。困扰很久了,希望各位大侠帮忙看看。 |