Вопрос:
Мы расширяем драйвер устройства. Наши устройства P CIe обладают свойствами, которые невозможно определить автоматически. В соответствии с сопровождающими ядра Linux мы хотим добавить эти свойства в дерево устройств. Как я могу получить в коде драйвера свойства экземпляра CURRENT, который обрабатывает драйвер в тот момент, когда в системе присутствует более одной карты P CIe?
Context :
Мы делаем это в контексте драйвера Ethe rnet, однако проблема является общей c для любого драйвера устройств, подключенных к P CIe (или даже подключенных к шине устройств).
Пример:
pcie@1ff00000 {
...
host@0 {
reg = < 0x00 0x00 0x00 0x00 0x00 >;
#address-cells = < 0x03 >;
#size-cells = < 0x02 >;
ethernet@0 {
compatible = "weiland-yutani,nostromo";
reg = < 0x00 0x00 0x00 0x00 0x00 >;
phy-connection-type = "rgmii";
};
};
host@1 {
reg = < 0x00 0x00 0x00 0x00 0x00 >;
#address-cells = < 0x03 >;
#size-cells = < 0x02 >;
ethernet@0 {
compatible = "weiland-yutani,nostromo";
reg = < 0x00 0x00 0x00 0x00 0x00 >;
phy-connection-type = "mii";
};
};
};
В этом примере показаны две карты P CIe ethe rnet, одна из которых использует "rgmii", а другая - "mii" в качестве режим передачи. (Как пример, у нас есть больше конфигурации).
В коде драйвера ядра, как я могу получить доступ к узлу, который принадлежит текущему экземпляру P CIe (pci_dev * pdev) Я имею дело с? Я имею в виду, какой вызов of_find_node_by_path () или что-то еще может привести меня к правильному экземпляру? Таким образом, я могу добавить оператор if в мой драйвер ethe rnet, который реагирует на правильную конфигурацию rgmii или mii, в зависимости от того, с какой из карт P CIe драйвер работает в данный момент.
Подход должен быть обобщенным c, поскольку мы стремимся внести его обратно в ядро Linux. (Произвольное количество шин PCI, карт, топологий ...)
Большое спасибо.