Постепенно начинаю понимать о чем вы пишете.

Цитата:
Если при разработке BIOS был бы учтен вариант создания списка [стандартных] контроллеров, которые обеспечивают доступ к накопителям, независимо от их расположения (чипсет, интегрированный контроллер, внешний контроллер) с последующим стандартным использованием, то вы были бы счастливы:). Но типовым вариантом является отработка чипсетных контроллеров (иногда сюда же включаются интегрированные на матплату контроллеры), а для внешних контроллеров обычно остается лазейка в виде Addon ROM.
Т.е. понятие "стандартность" не ограничивается стандартными действиями над стандартными объектами. Может понадобиться стандартное расположение этих объектов в адресном пространстве, например.

Постепенно начинаю понимать о чем вы пишете. И, видимо, если же проблема, которую я описал решится, то этот вариант будет для меня единственным верным. То есть, как я понимаю, все внешние адаптеры обязательно содержат expansion rom на своей плате, и мне его заполнять придется заветным кодом?

Однако, отсутствие сего аддона не корень зла. И не побегу я радостный наполнять expansion rom своей платы спасительными кодами, да не спасут они меня. BIOS-то по прежнему не обращается к заветному BAR'у, да и к остальным тоже. А встраивать аддон для дебага в bios вообще не вижу смысла. Чего дебажить-то? Контроллер? Так под linux я его уже отдебажил, работает как часы. Устройство должно запускаться на любой машине без дополнительных вмешательств.

Что делает код BIOS, когда обнаруживает устройство с классом 0101h на на шине PCI/PCI-E ? Ведь мой контроллер он находит, иначе бы прерывание не назначал ему. Что его дальше смущает? Аналогичный вопрос по винде. Пока я склоняюсь, как и писал в первом посте, к "неправильным" размерам BAR'ов -- 128 байт вместо 4/8/16 байт. Прошу подтвердить или опровергнуть мои предположения.

Котроллер SATA в режиме эмуляции IDE.