一.结构体
structmii_bus {
constchar*name;//总线名
charid[MII_BUS_ID_SIZE];//id
void*priv;//私有数据
int(*read)(structmii_bus *bus,intphy_id,intregnum);//读方法
int(*write)(structmii_bus *bus,intphy_id,intregnum, u16 val);//写方法
int(*reset)(structmii_bus *bus);//复位
structmutex mdio_lock;
structdevice *parent;//父设备
enum{
MDIOBUS_ALLOCATED = 1,
MDIOBUS_REGISTERED,
MDIOBUS_UNREGISTERED,
MDIOBUS_RELEASED,
} state; //总线状态
structdevice dev;//设备文件
structphy_device *phy_map[PHY_MAX_ADDR];//PHY设备数组
u32 phy_mask;
int*irq; //中断
};
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)
{
intret;
ret = class_register(&mdio_bus_class); //注册设备类
if(!ret) {
ret = bus_register(&mdio_bus_type); //注册mdio总线
if(re