обработка структуры eth_device в исходном коде U-boot

#u-boot

Вопрос:

В U-boot исходном коде функции miiphy_init() и phy_init() инициализируют глобальные переменные для структур mii_dev и phy_driver. Я ищу источник, который создаст/инициализирует глобальную structure eth_device переменную и будет поддерживать/использовать ее во время выполнения.

В основном я пытаюсь понять, кто будет создавать eth_device структуру и как она будет обрабатываться во время выполнения.

Ответ №1:

struct eth_device используется только устаревшими драйверами, которые не следуют модели драйверов. Они должны были быть удалены с выпуском v2020.07.

Структура заполняется в процедуре инициализации драйвера, например, lan91c96_initialize(). Просто выберите grep для ‘eth_register (‘, чтобы найти все эти функции.

Структура извлекается следующим образом:

 struct eth_device *dev = eth_get_dev_by_name(bus->name);
 

Комментарии:

1. В устаревшей версии(без модели драйвера), когда мы регистрируем драйвер PHY с помощью phy_register, как это связано с драйвером MAC? Насколько я понимаю, чип PHY может передаваться через MAC с интерфейсом MII/MDIO, поэтому, если мы хотим получить доступ к регистрам PHY, драйвер MAC должен поддерживать драйверы PHY, с которыми он может взаимодействовать.

2. Перед моделью драйвера устройства MAC поддерживаются struct eth_device *eth_devices in eth_legacy.c , и в этом файле определены функции для навигации по eth_devices списку. С моделью драйвера, как поддерживаются устройства MAC? Можете ли вы помочь понять.

3. В модели драйвера дерево устройств определяет, какие устройства существуют. Если сетевая карта использует шину PCI или USB, она определяется с помощью механизмов подключения и воспроизведения шины.