Как получить доступ к пространству конфигурации ISA и как оно выглядит? - PullRequest
3 голосов
/ 28 мая 2020

Как получить программный доступ к пространству конфигурации ISA и как оно выглядит - как установить базовые адреса для дополнительных ПЗУ ISA PnP?

1 Ответ

1 голос
/ 28 мая 2020

Карта выбирается с помощью процедуры изоляции ISA следующим образом:

При включении питания все карты Plug and Play обнаруживают сигнал сброса шины ISA, RESET_DRV, устанавливают для своего CSN значение 0 и вводят параметр ожидания Ключевое состояние. Программное обеспечение должно задержать 2 мс c после RESET_DRV перед доступом к портам автоконфигурации (адрес, чтение, запись), чтобы устройство могло выполнить начальную конфигурацию, загрузить значения регистра начальной конфигурации из энергонезависимой памяти, установить CSN на 0 и войдите в состояние ожидания ключа вовремя. Карты в состоянии ожидания ключа не отвечают на любой доступ к своим портам автоконфигурации, пока не будет обнаружен ключ запуска, и будут игнорировать все обращения ISA к своему интерфейсу Plug and Play.

Ключ запуска отправляется программным обеспечением путем записи последовательности 6A,B5,DA,ED,F6,FB,7D,BE, DF,6F,37,1B,0D,86,C3,61 B0,58,2C,16,8B,45,A2,D1, E8,74,3A,9D,CE,E7,73,39 в адресный порт. Когда карты ISA обнаруживают эту последовательность, они переходят в состояние сна. В этом состоянии карты прослушивают команду Wake [CSN], при этом программным обеспечением для данных записи установлено значение 0x00. Эта команда Wake [CSN] отправит все карты в состояние изоляции и, войдя в это состояние, она сбрасывает указатель серийного идентификатора / данных ресурса в начало.

Когда карты впервые входят в состояние изоляции, необходимо установить адрес порта READ_DATA с помощью команды Set RD_DATA port (которая отправляется, когда вы отправляете смещение 00h в адресный порт). Затем программное обеспечение выполняет 72 пары считываний в регистр последовательной изоляции для изоляции карты (смещение 01h).

При чтении каждая карта помещает 55h в SDL [7: 0], если следующий бит их серийного идентификационного номера равен 1. Если это не 1, то она ничего не утверждает и проверяет SDL [1: 0 ], который будет 01, если 55h было подтверждено другой картой. Если это 01b, тогда он будет утверждать AAh при следующем чтении, если не 01b, он будет проверять 10b при следующем чтении. Следующее чтение из регистра изоляции программным обеспечением заставляет карты, которые подтвердили 55h или не обнаружили 01b, подтвердить AAh. Остальные карты проверяют 2 младших бита SDL на 01b. Если присутствует 01b, они переходят в состояние сна. Все остальные карты проверяют, отправили ли они последний бит серийного идентификатора, если нет, они переходят в следующий раунд. Если да, то это будет единственная оставшаяся карта.

enter image description here

Изолированная карта остается в состоянии изоляции, в то время как все остальные карты не прошли протокол изоляции и вернулись в состояние сна.

Записи в регистры управления картой перехватываются всеми устройствами в состоянии сна / изоляции / конфигурации и интерпретируются как определенные команды на основе данных и того, в каком состоянии они находятся. Запись в регистр пробуждения будет принимается картой в изолированном состоянии как новый CSN. CSN на этой карте имеет уникальный номер. Запись этого значения приводит к переходу карты в состояние конфигурации. Затем вы выбираете номер логического устройства, записывая его в регистр LDN, на который отвечает только устройство в состоянии конфигурации, отображая регистры этого логического устройства ниже смещения 0x30.

Конфигурационное пространство выглядит следующим образом:

enter image description here

enter image description here

In Чтобы выбрать базовый адрес для пространства MMIO (включая дополнительное ПЗУ), вы помещаете базовый адрес в дескриптор памяти со смещением 0x40–0x5F. Предположительно, регистр верхнего предела записывается картой, чтобы сообщить вам, сколько памяти ей требуется. На PCI вы записываете все единицы в BAR, чтобы получить размер. Не уверен насчет ISA. Есть 4 дескриптора памяти и 8 дескрипторов ввода-вывода. Вы настраиваете 24-битный адрес, который находится где-то в 1-мегабайтном отверстии ISA ниже 16 МБ, который запрограммирован для перенаправления на мост ISA.

Чтобы продолжить процедуру изоляции для изоляции следующей карты, команда Wake [CSN] с параметром 0 (запись в смещение регистра Wake 0x03) заставит все карты без CSN перейти в состояние изоляции (a Команда Wake [CSN] с параметром, отличным от нуля, заставит карту с соответствующим CSN перейти в состояние конфигурации. Любая карта, которая находится в состоянии изоляции или конфигурации, которая получает CSN, который не является ее собственным, переходит в состояние сна) .

Не забывайте, что шина ISA-XT появилась на 8086–80186 как 8-битная шина с 20-битной адресацией. На чипсетах 80286 и выше он был 16-битным с 24-битной адресацией. Южные мосты 80486 SIO (.A) и IB были просто однофункциональными устройствами PCI на шине PCI, которые функционировали как мост ISA. Так был и южный мост PCEB (где доступ к регистрам субмаскового моста ES C осуществлялся через порты ввода-вывода). Южные мосты PIIX – PIIX4E были многофункциональными устройствами PCI. Южный мост ICH0 был мультиустройством и многофункциональным устройством PCI, а мост ISA был дополнительным отдельным устройством на шине PCI, отдельным от южного моста.

...