mdio.c 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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. static struct rt_list_node mdio_list;
  12. struct mii_bus *rt_mdio_get_bus_by_name(const char *busname)
  13. {
  14. struct rt_list_node *entry;
  15. struct mii_bus *bus;
  16. if (!busname)
  17. {
  18. rt_kprintf("NULL bus name!\n");
  19. return RT_NULL;
  20. }
  21. rt_list_for_each(entry, &mdio_list)
  22. {
  23. bus = rt_container_of(entry, struct mii_bus, node);
  24. if (!strcmp(bus->name, busname))
  25. return bus;
  26. }
  27. return RT_NULL;
  28. }
  29. struct mii_bus *rt_mdio_alloc(void)
  30. {
  31. struct mii_bus *mii;
  32. mii = rt_malloc(sizeof(struct mii_bus));
  33. if (!mii)
  34. return RT_NULL;
  35. rt_list_init(&mii->node);
  36. return mii;
  37. }
  38. rt_err_t rt_mdio_register(struct mii_bus *bus)
  39. {
  40. if (!bus)
  41. return -RT_ERROR;
  42. if(rt_mdio_get_bus_by_name(bus->name))
  43. {
  44. rt_kprintf("mdio bus %s already exist!\n", bus->name);
  45. return -RT_ERROR;
  46. }
  47. rt_list_insert_before(&mdio_list, &bus->node);
  48. return RT_EOK;
  49. }
  50. rt_err_t rt_mdio_unregister(struct mii_bus *bus)
  51. {
  52. if (!bus)
  53. return -RT_ERROR;
  54. rt_list_remove(&bus->node);
  55. return RT_EOK;
  56. }
  57. static int mdio_init(void)
  58. {
  59. rt_list_init(&mdio_list);
  60. return 0;
  61. }
  62. INIT_CORE_EXPORT(mdio_init);