Здравствуйте, netch80, Вы писали:
N>Неправда.
Правда. Поддержка IO портов там только для совместимости — в частности потому, что они есть только на x86.
N>Там сказано не "all BARs shall be memory" или аналог, а, дословно, "endpoint must not depend on operation system allocation of I/O resources". Ключевое — "operating system allocation" и "depend".
N>То есть OS не должна заниматься перераспределением I/O портов после начальной настройки (средствами BIOS). Для ресурсов на памяти такого ограничения не ставится.
Нет — тут имеется в виду как раз то, чтобы девайсы не рассчитывали, что запрошенные через BAR IO ресурсы им по факту предоставят. Как раз потому, что они доступны не на всех платформах, а PCIe девайсы по идее должны работать на любых архитектурах (и, собственно, многие девайсы таки работают — в частности, я лично видел сетевуху, работающую подключённой к ARM SoC с PCIe Root Complex).
N>Практически же на машинах с PCI Express продолжает активно использоваться I/O пространство. Вот с моего настольника:
N>Это встроенная, то есть тут нельзя сослаться на проблемы совместимости — если бы был запрет на I/O порты, её бы давно подточили, и у неё не было бы такого диапазона.
И тем не менее это таки для совместимости
Если не веришь — попробуй поменять IO BAR и убедиться, что всё по прежнему пашет
N>Нет, не необходимо.
N>В отличие от первых 256 байт, стиль доступа к остальным не специфицирован собственно стандартом PCI.
Ну здрассте!
7.2.2. PCI Express Enhanced Configuration Access Mechanism (ECAM)
<...>
The ECAM utilizes a flat memory-mapped address space to access device configuration registers. In this case, the memory address determines the configuration register accessed and the memory data updates (for a write) or returns the contents of (for a read) the addressed register. The mapping from memory address space to PCI Express Configuration Space address is defined in Table 7-1.