1 /* 2 * Copyright (c) 2006-2024 RT-Thread Development Team 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 * 6 * Change Logs: 7 * Date Author Notes 8 * 2024-10-08 zhujiale the first version 9 */ 10 #include "mdio.h" 11 12 static struct rt_list_node mdio_list; 13 rt_mdio_get_bus_by_name(const char * busname)14struct mii_bus *rt_mdio_get_bus_by_name(const char *busname) 15 { 16 struct rt_list_node *entry; 17 struct mii_bus *bus; 18 19 if (!busname) 20 { 21 rt_kprintf("NULL bus name!\n"); 22 return RT_NULL; 23 } 24 25 rt_list_for_each(entry, &mdio_list) 26 { 27 bus = rt_container_of(entry, struct mii_bus, node); 28 if (!strcmp(bus->name, busname)) 29 return bus; 30 } 31 32 return RT_NULL; 33 } 34 rt_mdio_alloc(void)35struct mii_bus *rt_mdio_alloc(void) 36 { 37 struct mii_bus *mii; 38 mii = rt_malloc(sizeof(struct mii_bus)); 39 if (!mii) 40 return RT_NULL; 41 42 rt_list_init(&mii->node); 43 return mii; 44 } 45 rt_mdio_register(struct mii_bus * bus)46rt_err_t rt_mdio_register(struct mii_bus *bus) 47 { 48 if (!bus) 49 return -RT_ERROR; 50 51 if(rt_mdio_get_bus_by_name(bus->name)) 52 { 53 rt_kprintf("mdio bus %s already exist!\n", bus->name); 54 return -RT_ERROR; 55 } 56 57 rt_list_insert_before(&mdio_list, &bus->node); 58 return RT_EOK; 59 } 60 rt_mdio_unregister(struct mii_bus * bus)61rt_err_t rt_mdio_unregister(struct mii_bus *bus) 62 { 63 if (!bus) 64 return -RT_ERROR; 65 66 rt_list_remove(&bus->node); 67 return RT_EOK; 68 } 69 mdio_init(void)70static int mdio_init(void) 71 { 72 rt_list_init(&mdio_list); 73 return 0; 74 } 75 INIT_CORE_EXPORT(mdio_init); 76