原始版本
This commit is contained in:
75
RT_Thread/components/drivers/phy/mdio.c
Normal file
75
RT_Thread/components/drivers/phy/mdio.c
Normal file
@ -0,0 +1,75 @@
|
||||
/*
|
||||
* Copyright (c) 2006-2024 RT-Thread Development Team
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*
|
||||
* Change Logs:
|
||||
* Date Author Notes
|
||||
* 2024-10-08 zhujiale the first version
|
||||
*/
|
||||
#include "mdio.h"
|
||||
|
||||
static struct rt_list_node mdio_list;
|
||||
|
||||
struct mii_bus *rt_mdio_get_bus_by_name(const char *busname)
|
||||
{
|
||||
struct rt_list_node *entry;
|
||||
struct mii_bus *bus;
|
||||
|
||||
if (!busname)
|
||||
{
|
||||
rt_kprintf("NULL bus name!\n");
|
||||
return RT_NULL;
|
||||
}
|
||||
|
||||
rt_list_for_each(entry, &mdio_list)
|
||||
{
|
||||
bus = rt_container_of(entry, struct mii_bus, node);
|
||||
if (!strcmp(bus->name, busname))
|
||||
return bus;
|
||||
}
|
||||
|
||||
return RT_NULL;
|
||||
}
|
||||
|
||||
struct mii_bus *rt_mdio_alloc(void)
|
||||
{
|
||||
struct mii_bus *mii;
|
||||
mii = rt_malloc(sizeof(struct mii_bus));
|
||||
if (!mii)
|
||||
return RT_NULL;
|
||||
|
||||
rt_list_init(&mii->node);
|
||||
return mii;
|
||||
}
|
||||
|
||||
rt_err_t rt_mdio_register(struct mii_bus *bus)
|
||||
{
|
||||
if (!bus)
|
||||
return -RT_ERROR;
|
||||
|
||||
if(rt_mdio_get_bus_by_name(bus->name))
|
||||
{
|
||||
rt_kprintf("mdio bus %s already exist!\n", bus->name);
|
||||
return -RT_ERROR;
|
||||
}
|
||||
|
||||
rt_list_insert_before(&mdio_list, &bus->node);
|
||||
return RT_EOK;
|
||||
}
|
||||
|
||||
rt_err_t rt_mdio_unregister(struct mii_bus *bus)
|
||||
{
|
||||
if (!bus)
|
||||
return -RT_ERROR;
|
||||
|
||||
rt_list_remove(&bus->node);
|
||||
return RT_EOK;
|
||||
}
|
||||
|
||||
static int mdio_init(void)
|
||||
{
|
||||
rt_list_init(&mdio_list);
|
||||
return 0;
|
||||
}
|
||||
INIT_CORE_EXPORT(mdio_init);
|
||||
Reference in New Issue
Block a user