У меня есть модель PCIe, написанная в System Verilog, хотя я думаю, что этот вопрос является агностиком языка. Модель выполняет чтение и запись конфигурации PCIe, а память отлично читает и пишет в симуляции. Тем не менее, что мне нужно сделать, это «открыть» мое устройство PCIe и настроить мои регистры конфигурационного пространства в симуляции. Есть ли кусок плиты кодов псевдокода, который представляет процесс перечисления Linux PCIe, что я могу просто добавить свои собственные функции транзакций моделей, чтобы я мог получить «прогулку по автобусу», а затем программирование BAR, разрешение SR-IOV, если обнаружено, Конфигурация MSIx? Похоже, это будет обычным упражнением для устройства PCIe, поэтому, возможно, есть модель.алгоритм обнаружения устройства PCIe псевдокод
ответ
Это не так уж сложно сделать. В основном вы прокручиваете конфигурационное пространство, проверяя каждое каждое возможное устройство на первой корневой шине 0. Когда устройство найдено, вы выделяете для него пространство памяти на основе его запрошенного размера и соответствующим образом программируете BAR. Если вы найдете какие-либо мосты, вы также настраиваете и активируете их - основные регистры моста для этого являются стандартными. Это включает в себя назначение номеров восходящего и нисходящего шин, которые затем позволяют перечислить новую нисходящую шину и так далее.
Мне пришлось сделать это один раз, чтобы получить доступ к плате PCI I/O в системе, в которой не было ОС или другой программной среды. Это было не так уж плохо, и это было через два моста от двух поставщиков, а также регистра карт ввода-вывода и настройки корневого моста шины ЦП. Это был PCI, а не PCIe, но это было бы очень похоже. Вы могли бы даже сделать это с полностью жестко закодированными номерами, если бы оборудование никогда не менялось, но в моем случае было несколько вариантов, поэтому я действительно должен был сделать простое перечисление, чтобы динамически находить номера устройств. Один из них заключается в том, что вам, возможно, придется немного отложить или повторить попытку, чтобы дать всем устройствам время для входа в Интернет, прежде чем пытаться получить к ним доступ.
При этом я нашел эту книгу неоценимой: PCI System Architecture (4th Edition). Я замечаю, что есть также версия для PCIe: PCI Express System Architecture (1st Edition). Я бы определенно получил один из них, если вы еще этого не сделали. Эти книги содержат подробные алгоритмы и объяснения о том, как это сделать. В то время я действительно не использовал или не ссылался на какой-либо код, который можно было бы назвать, но ...
Лучший ресурс кода, который я нашел, это U-Boot. Он работает на аналогично низком уровне и полностью автономен и по-прежнему довольно мал и как можно более прост. Например, перечисление, как представляется, начинается с функции pci_init()
, которая вызывает конкретную плату pci_xxx_init()
. Затем он устанавливает корневой мост и затем вызывает pci_hose_scan_bus()
в drivers/pci/pci.c, чтобы выполнить настоящую работу. Также проверьте процедуры в drivers/pci/pci_auto.c, а также остальную часть папки.
Для вашей задачи вам, вероятно, понадобится очень небольшое подмножество, и вы можете просто взломать части этих файлов в простой драйвер. В основном цикл for() и некоторые вызовы pci_read/write_config() с логикой распознают ваше устройство и идентификаторы моста.
- 1. переходный алгоритм сокращения: псевдокод?
- 2. жадный алгоритм псевдокод
- 3. A * алгоритм псевдокод
- 4. вставка алгоритм сортировки псевдокод
- 5. Алгоритм Dijkstra's псевдокод
- 6. Попытка реализовать некоторый псевдокод, алгоритм
- 7. Алгоритм обнаружения корреляции графа
- 8. Подключение символьного устройства и физического PCIe-драйвера
- 9. Эффективный алгоритм обнаружения совпадений
- 10. Алгоритм обнаружения сплошного изображения
- 11. Алгоритм обнаружения углов
- 12. простой алгоритм обнаружения
- 13. Single-сообщество алгоритм обнаружения
- 14. Алгоритм для обнаружения комбинаций
- 15. Алгоритм обнаружения кодирования символов
- 16. Алгоритм обнаружения цикла Брента
- 17. Алгоритм обнаружения руки
- 18. Алгоритм обнаружения Horizon
- 19. Алгоритм обнаружения поврежденных данных?
- 20. столкновение вопрос алгоритм обнаружения
- 21. Устройства обнаружения условного CSS
- 22. Устройства обнаружения Silverlight
- 23. SSDP для обнаружения устройства
- 24. ONVIF - начало обнаружения устройства
- 25. Тупик (псевдокод)
- 26. PCIe JTAG для (пере) программирования платы PCIe
- 27. Псевдокод Алгоритм помощи для обмена/сравнения значений
- 28. Унифицированный алгоритм поиска затрат псевдокод/ocaml нотация
- 29. Простой алгоритм (псевдокод) для пересечения сегментов линии
- 30. Алгоритм смены монет и псевдокод: требуется уточнение