Определение базового адреса параллельного порта PCI

Я разрабатываю приложение для DOS. Мне нужно общаться через параллельный порт.

В настоящее время я застрял в том, как я могу определить, какие из BAR-функций (регистры базовых адресов) PCI содержат базовый адрес (то есть адрес порта данных) для этого параллельного порта?:?

Точно, существует ли промышленное соглашение или стандарт или де-факто стандарт, что конкретный BAR всегда будет содержать базовый адрес для этого параллельного порта?

Если нет, то как я могу определить базовый адрес для этого параллельного порта PCI (будь то на плате расширения pci или встроенной на mobo)?

На самом деле меня интересуют параллельные порты на платах расширения PCI. AFAIK, BIOS не знает об этом. BIOS будет выделять ресурсы только для карты (карт) pci и все. Таким образом, в BDA могут отсутствовать записи для таких параллельных портов, поскольку производитель BIOS знает только обо ВСЕХ устройствах, которые имеет их mobo.

Например, на ПК, я установил 4 параллельных порта на платах расширения pci, и есть один параллельный порт, встроенный в mobo. Теперь, куда идет запись для двух других параллельных портов?

Поэтому кажется, что в BIOS есть записи только для трех параллельных портов, встроенных в чипсет или материнскую плату. Итак, я думаю, что мы должны прочитать шины PCI BAR, чтобы получить базовый адрес для любого параллельного порта на карте расширения pci, установленной в mobo.

Спасибо

2 ответа

Список параллельных портов (включая последовательные порты), основанный на памяти, ограничен только тремя записями (изначально было 4 в IBM PC). Он разработан для старых систем на базе ISA, когда технология Plug-Play (PnP) еще не существует.

В более новых системах функции BIOS PnP следует использовать для обнаружения любых устройств с параллельным портом на основе PCI. Это включает сканирование через все устройства PCI, чтобы найти тот, который является классом Устройства связи с подклассом Параллельного порта. Получите спецификацию Intel Plug and Play BIOS непосредственно с веб-сайта Intel (файл PDF) или с веб-сайта ACPI. В этом документе вы найдете, как получить доступ к функциям PnP BIOS.

Обратите внимание, что, поскольку некоторые системы могут все еще иметь встроенный параллельный порт (ы), вам все равно нужно будет также обнаружить его наличие с помощью памяти BIOS. Если имеется менее трех встроенных параллельных портов, в этой памяти также должны быть указаны дополнительные параллельные порты на основе PCI. Тем не менее, рекомендуется предположить, что это не так, поскольку в BIOS может быть ошибка. Так что объедините результат обнаружения из памяти и PnP BIOS, а затем удалите все дубликаты.

Если вы хотите определить фактический параллельный порт, чтобы убедиться, что он существует и работает, проверьте исходный код сборки BIOS VirtualBox (первоначально из BIOS Bochs). В частности, detect_parport функция.

РЕДАКТИРОВАТЬ: Подробнее о текущей конфигурации устройств PCI.

Текущие конфигурации устройств PCI хранятся в Расширенных данных конфигурации системы (ESCD). Это также упоминается как NVRAM некоторыми BIOS. Метод получения его данных описан в функциях BIOS PnP 0x41 и 0x42. Однако спецификации ESCD отделены от спецификаций PnP BIOS. Вы можете получить его здесь (файл PDF).

Я не смог найти ссылку с сайта Intel, извините. Они использовали для предоставления этих старых спецификаций, а также для поиска на своем веб-сайте, но сейчас их трудно найти. У меня был еще в форматах RTF. Эти спецификации PDF ESCD, похоже, являются последней версией и такой же, как моя, то есть версия 1.02A.

afaik вы не можете отправлять данные на параллельный порт pci через базовый адрес, если встроенный параллельный порт сконфигурирован в BIOS, один из способов отправки на эту параллельную pci - отключение параллельного порта в BIOS...

Я уже проверил этот сценарий, и он отлично работает в мою сторону.

но если вы хотите использовать много портов, таких как встроенный и параллельный порты pci, для встроенного порта вы можете использовать базовый адрес io, но для параллельного порта pci вам необходимо знать драйвер, предоставленный производителем параллельного порта pci.... если это драйвер, поставляемый системой, возможно, есть способ перехватить их драйвер через общедоступный ioctl или через доступ к драйверу как к обычному файлу.

Я использовал общий порт, работающий на Windows 7.

Другие вопросы по тегам