Цитата(krux @ Oct 28 2016, 17:02)

как это делает BIOS, примерно так:
перебираются bus, device, function.
для каждого из них считываются размеры требуемых для выделения BARов.
от адресуемого 32-битного пространства сверху от 4 Гбайт откусывается 512 Мбайт или 1024 Мбайт (зависит от конкретного BIOS) и методом бинарного поиска вычисляются адреса памяти, в которые может поместиться BAR, таким образом, чтобы адрес был кратен размеру BAR-а.
если запрашиваемый размер BAR-ов больше чем откушенные BIOS-ом 512 Мбайт или 1024 Мбайт, то в зависимости от реализации BIOS либо всё виснет, либо устройства с большими BAR прокидываются либо ещё как.
построенная карта памяти загоняется в соответствующие bus, device, function.
реализация в linux kernel есть.
rootport поднял на плате terasic DE1, будет работать под линуксами. Сейчас отлаживаюсь по Avalon-JTAG Master
Сначала необходимо отладить enumeration без операционки.
И вот тут возникает непонимание -
1. Что значит перебирать bus, device, function - когда у тебя в Qsys есть твой HIP Root и подключенный к нему Avalon-JTAG Master? Где их читать.. и как))
2. Чтение документации Altera не дает понимания по какому адресу лежит Type 1 Configuration Space Header, в документации сказано 0x000:0x03C. Если имеется в виду абсолютное смещение в CRA, то чтение 0го адреса дает нули вместо Device ID и Vendor ID.
Спасибо за помощь!