一.结构体
struct mii_bus {
const char *name; //总线名
char id[MII_BUS_ID_SIZE]; //id
void *priv; //私有数据
int (*read)(struct mii_bus *bus, int phy_id, int regnum); //读方法
int (*write)(struct mii_bus *bus, int phy_id, int regnum, u16 val); //写方法
int (*reset)(struct mii_bus *bus); //复位
struct mutex mdio_lock;
struct device *parent; //父设备
enum {
MDIOBUS_ALLOCATED = 1,
MDIOBUS_REGISTERED,
MDIOBUS_UNREGISTERED,
MDIOBUS_RELEASED,
} state; //总线状态
struct device dev; //设备文件
struct phy_device *phy_map[PHY_MAX_ADDR]; //PHY设备数组
u32 phy_mask;
int *irq; //中断
};
二.初始化过程
在phy_init函数中调用了mdio_bus_init初始化mdio总线
int __init mdio_bus_init(void)
{
int ret;
ret = class_register(&mdio_bus_class); //注册设备类
if (!ret) {
ret = bus_register(&mdio_bus_type); //注册mdio总线
if (ret)
class_unregister(&mdio_bus_class);
}
return ret;
}