Что такое other pci bridge device

Обновлено: 07.07.2024

Устройства на шине PCI

Архитектура PCI была разработана в качестве замены стандарту ISA с тремя основными целями: получить лучшую производительность при передаче данных между компьютером и его периферией, быть независимой от платформы, насколько это возможно, и упростить добавление и удаление периферийных устройств в системе. В настоящее время PCI широко используется в разных архитектурах: IA-32 / IA-64, Alpha, PowerPC, SPARC64 . Самой актуальной для автора драйвера является поддержка PCI автоопределения интерфейса плат: PCI устройства настраивается автоматически во время загрузки. Затем драйвер устройства получает доступ к информации о конфигурации устройства, и производит инициализацию. Это происходит без необходимости совершать какое-либо тестирование.

Каждое периферийное устройство PCI идентифицируется по подключению такими физическими параметрами, как: номер шины, номер устройства и номер функции. Linux дополнительно вводит и поддерживает такое логическое понятие как домен PCI. Каждый домен PCI может содержать до 256 шин. Каждая шина содержит до 32 устройств, каждое устройство может быть многофункциональным и поддерживать до 8 функций. В конечном итоге, каждая функция может быть однозначно идентифицирована на аппаратном уровне 16-ти разрядным ключом. Однако, драйверам устройств в Linux, не требуется иметь дело с этими двоичными ключами, потому что они используют для работы с устройствами специальную структуру данных pci_dev .

Адресацию PCI устройств в своей Linux системе смотрим:

Другое представление той же информации (тот же хост) можем получить так:

Здесь отчётливо видно (слева) поля, например для контроллера VGA: 0000:00:02.0 - выделены домен (16 бит), шина (8 бит), устройство (5 бит) и функция (3 бита). Поэтому, когда мы говорим об устройстве (далее), мы имеем в виду набор: номера домена + номер шины + номер устройства + номер функции.

- где from — это NULL при начале поиска (или возобновлении поиска с начала), или указатель устройства, найденного на предыдущем шаге поиска. Если в качестве Vendor ID и/или Device ID указана константа PCI_ANY_ID=-1 , то предполагается выбор всех доступных устройств с таким идентификатором. Если искомое устройство не найдено (или больше таких устройств не находится в цикле), то очередной вызов возвратит NULL . Если возвращаемое значение не NULL , то возвращается указатель структуры описывающей устройство, и счётчик использования для устройства инкрементируется. Когда устройство удаляется (модуль выгружается) для декремента этого счётчика использования необходимо вызвать:

После нахождения устройства, но прежде начала его использования необходимо разрешить использование устройства вызовом: pci_enable_device( struct pci_dev *dev) , часто это выполняется в функции инициализации устройства: поле probe структуры struct pci_driver (см. далее), но может выполняться и автономно в коде драйвера.

Каждое найденное устройство имеет своё пространство конфигурации, значения которого заполнены программами BIOS (или PnP OS, или BSP) — важно, что на момент загрузки модуля эта конфигурационное пространство всегда заполнено, и может только читаться (не записываться). Пространство конфигурации PCI устройства состоит из 256 байт для каждой функции устройства (для устройств PCI Express расширено до 4 Кб конфигурационного пространства для каждой функции) и стандартизированную схему регистров конфигурации. Четыре начальных байта конфигурационного пространства должны содержать уникальный ID функции (байты 0-1 — Vendor ID, байты 2-3 — Device ID), по которому драйвер идентифицирует своё устройство. Вот для сравнения начальные строки вывода команды для того же хоста (видно, через двоеточие, пары: Vendor ID — Device ID):

Первые 64 байт конфигурационной области стандартизованы, остальные зависят от устройства. Самыми актуальными для нас являются (кроме ID описанного выше) поля по смещению:

Вся регистрация устройства PCI и связывание его параметров с кодом модуля происходит исключительно через значения, считанные из конфигурационного пространства устройства. Обработку конфигурационной информации (уже сформированной при установке PCI устройства) показывает модуль (архив pci.tgz ) lab2_pci.ko (заимствовано из [6]):

Небольшой фрагмент результата выполнения этого модуля:

$ sudo insmod lab2_pci.ko

$ lsmod | grep lab

$ dmesg | tail -n221 | head -n30

$ sudo rmmod lab2_pci

$ lsmod | grep lab2

Для использования некоторой группы устройства PCI, код модуля определяет массив описания устройств, обслуживаемых этим модулем. Каждому новому устройству в этом списке соответствует новый элемент. Последний элемент массива всегда нулевой, это и есть признак завершения списка устройств. Строки такого массива заполняются макросом PCI_DEVICE :

Созданная структура pci_device_id должна быть экспортирована в пользовательское пространство, чтобы позволить системам горячего подключения и загрузки модулей знать, с какими устройствами работает данный модуль. Эту задачу решает макрос MODULE_DEVICE_TABLE :

Кроме доступа к области конфигурационных параметров, программный код может получить доступ к областям ввода-вывода и регионов памяти, ассоциированных с PCI устройством. Таких областей ввода-вывода может быть до 6-ти (см. формат области конфигурационных параметров выше), они индексируются значением от 0 до 5. Параметры этих регионов получаются функциями:

- где bar во всех вызовах — это индекс региона: 0 . 5. Первые 2 вызова возвращают начальный и конечный адрес региона ввода-вывода ( pci_resource_end() возвращает последний используемый регионом адрес, а не первый адрес, следующий после этого региона.), следующий вызов — его размер, и последний — флаги. Полученные таким образом адреса областей ввода/вывода от устройства — это адреса на шине обмена (адреса шины, для некоторых архитектур - x86 из числа таких - они совпадают с физическими адресами памяти). Для использования в коде модуля они должны быть отображены в виртуальные адреса (логические), в которые отображаются страницы RAM посредством устройства управления памятью (MMU). Кроме того, в отличие от обычной памяти, часто эти области ввода/вывода не должны кэшироваться процессором и доступ не может быть оптимизирован. Доступ к памяти таких областей должен быть отмечен как «без упреждающей выборки». Всё, что относится к отображению памяти будет рассмотрено отдельно далее, в следующем разделе. Флаги PCI региона ( pci_resource_flags() ) определены в <linux/ioport.h> ; некоторые из них:

IORESOURCE_IO, IORESOURCE_MEM — только один из этих флагов может быть установлен.

IORESOURCE_PREFETCH — определяет, допустима ли для региона упреждающая выборка.

IORESOURCE_READONLY — определяет, является ли регион памяти защищённым от записи.

  • name - имя драйвера, оно должно быть уникальным среди всех PCI драйверов в ядре, обычно устанавливается таким же, как и имя модуля драйвера, когда драйвер загружен в ядре, это имя появляется в /sys/bus/pci/drivers/ ;
  • id_table - только что описанный массив записей pci_device_id ;
  • probe — функция обратного вызова инициализации устройства; в функции probe драйвера PCI, прежде чем драйвер сможет получить доступ к любому ресурсу устройства (область ввода/вывода или прерывание) данного PCI устройства, драйвер должен, как минимум, вызвать функцию :
  • remove — функция обратного вызова удаления устройства;
  • . и другие функции обратного вызова.

Обычно для создания правильную структуру struct pci_driver достаточно бывает определить, как минимум, поля :

Ищем и устанавливаем драйверы для неизвестного PCI-устройства

Операционная система не может распознать упомянутое устройство как раз по причине отсутствия драйвера, иногда это приводит даже к тому, что нельзя получить аппаратный идентификатор, который и служит определителем железа. Если уведомление об этом девайсе не пропало после комплексной инсталляции ПО, например, из идущего в комплекте диска, значит что-то установилось неправильно или вовсе было пропущено. Поэтому придется вручную разбираться с этой проблемой.

Способ 1: Сайт производителя материнской платы

Любое оборудование, подключаемое через порт PCI, располагается на самой системной плате, соответственно, подходящий драйвер должен быть доступен на официальном сайте разработчика материнки или ноутбука. Мы возьмем за пример сайт ASUS, чтобы показать пример поиска и загрузки необходимых компонентов.

    Откройте главную страницу нужного сайта, где перейдите в раздел поддержки, щелкнув на соответствующую кнопку.

Переход на страницу поддержки для скачивания драйверов PCI-устройства с официального сайта

Выбор модели материнской платы или ноутбука для поиска драйвера PCI-устройства на официальном сайте

Переход в раздел с драйверами на странице устройства для поиска драйверов PCI-устройства

Выбор операционной системы для скачивания драйверов PCI-устройства

Показ всех доступных драйверов для материнской платы при подборе ПО для PCI-устройства

Скачивание доступных драйверов для PCI-устройства с официального сайта

Запуск инсталлятора драйверов для PCI-устройства скачанных с официального сайта

Инсталляция драйверов для PCI-устройства скачанных с официального сайта

Такой метод считается самым безопасным, однако он не всегда эффективен в этой ситуации и вызывает трудности у некоторых пользователей. Поэтому в случае нерезультативности подбора драйверов мы советуем перейти к альтернативным вариантам.

Способ 2: Фирменное программное обеспечение

Производители материнских плат и лэптопов заинтересованы в том, чтобы у обладателей их продукции возникало как можно меньше трудностей при ее использовании. Поэтому они стараются всячески помогать юзерам, создавая отдел технической поддержки и выкладывая на сайт различные инструкции. Однако самым важным и полезным решением считается фирменное программное обеспечение, в функциональность которого входит и инструмент по автоматическому обновлению драйверов. По ссылке ниже вы найдете руководство по работе в ASUS Live Update.

Проверка обновлений драйверов для ноутбука ASUS X751L через утилиту

Если ASUS активно занимается производством и системных плат, и ноутбуков, то HP показала себя только в последнем типе девайсов. Эта компания тоже представляет подобный вспомогательный софт, работающий примерно по такому же принципу. Всю информацию по этой теме ищите в материале далее.

Начало поиска обновлений для установленного сканера в официальной утилите

Способ 3: Онлайн-сервис от разработчиков

Онлайн-сервисом для инсталляции ПО известна компания Lenovo, знаменитая своими ноутбуками с демократичными ценниками. Конечно, такое решение по поиску драйверов намного удобнее тех, о которых шла речь ранее, но сейчас такие веб-ресурсы непопулярны, поэтому этот вариант и находится на третьем месте в нашем списке. Если вы являетесь владельцем Lenovo, обратите внимание на приведенный ниже материал.

Переход к автоматическому обновлению драйверов для Lenovo G505

Способ 4: Софт для установки драйверов от независимых разработчиков

В Способе 2 вы были ознакомлены с фирменными утилитами по поиску и инсталляции драйверов, но не каждая фирма заинтересована в выпуске подобного софта. Если же вам не удалось отыскать его, советуем ознакомиться с ПО от сторонних разработчиков, которые поддерживают работу практически со всем встроенным и периферийным оборудованием. Выбранный инструмент автоматически проведет сканирование системы, загрузит и установит недостающие файлы. От пользователя требуется только вручную задать параметры анализа и запустить выполнение операции.

Что касается конкретных решений, то мы можем порекомендовать обратить внимание на DriverPack Solution. Программа корректно взаимодействует даже со старыми комплектующими и часто находит подходящие файлы для неизвестных PCI-устройств, используя их идентификационный номер или другие сведения. Детальное руководство по обновлению драйверов через DriverPack вы найдете в статье от другого нашего автора по следующей ссылке.

Установка драйверов через DriverPackSolution

Способ 5: ID неизвестного PCI-устройства

Каждое оборудование имеет свой уникальный номер, выступающий аппаратным идентификатором в операционной системе. Однако в случае с неизвестным PCI-устройством этого сведения недостаточно для корректного отображения в Windows. Поэтому мы предлагаем задействовать этот код, чтобы самостоятельно отыскать совместимые драйверы через специализированные онлайн-сервисы. Развернутые инструкции по этой теме вы найдете в отдельном нашем материале, где весь процесс показан на примере нескольких веб-ресурсов.

Способ 6: Автоматический поиск драйверов в Windows

Порой встроенное средство Виндовс позволяет обойтись без применения дополнительных средств, касается это и случая с PCI-устройством. Нужно лишь самостоятельно запустить поиск драйверов, предварительно убедившись в наличии активного подключения к интернету. Вся процедура осуществляется буквально в несколько кликов:

Переход в диспетчер устройств для запуска обновления драйвера PCI-устройства

Переход к обновлению драйверов PCI-устройства через диспетчер устройств

Запуск автоматического обновления драйверов PCI-устройства через диспетчер устройств

Процедура поиска обновлений для PCI-устройства через диспетчер устройств

Информация о поиске драйверов PCI-устройства через диспетчер устройств

Проблема с отображением неизвестного PCI-устройства чаще всего возникает при отсутствии необходимых драйверов. Поэтому выше мы продемонстрировали все доступные варианты решения этой неполадки. Вам остается только выбрать работающий метод, после чего комплектующее должно корректно взаимодействовать с операционной системой.

Закрыть

Мы рады, что смогли помочь Вам в решении проблемы.

Отблагодарите автора, поделитесь статьей в социальных сетях.

Закрыть

Опишите, что у вас не получилось. Наши специалисты постараются ответить максимально быстро.

ну для начала надо узнать, что за звуковуха, хотя патчик не помешает

Для начала надо узнать, что за матплата.
Этот PCI Device не обязательно звук, хотя и вероятно.

Думаю, что человек разобрался, но на всякий случай скажу, что это скорее всего было из-за конфликта двух звуковых карт, внешней и внутренней, решается одним щелчком в биосе, который отключает встроенную

Karatist.by Зато я не разобралась(у меня та же самая ситуация), ПОдскажите ПОЖАЛУЙСТА как это в биосе отключить встроенную карту и включить внешнюю? т.е. в каком разделе это в биосе? а то я ищу не могу понять(в биос как заходить знаю.)

Ты бы хоть модель m/b написала.
Обычно это в "Integrated Dievces"/"Integrated Peripherals", что-нибудь на подобие "Integrated Audio" - нужно его Disable.

Kak-vsegda-ya, обычно к материнским платам брошюрка прилагается, которую принято называть мануалом. Так вот в нём, в мануале, всё подсказано, как правило.

Smirnoff матер. плата? вот это по-моему: Phoenix - Award WorkstationBIOS v6.00PG или это:Системная плата ECS AMD690GM-M2 (понятия не имею)
спасибо,счас попоробую в биосе что-нить из них найти
Ariny амм .. так это. тот называемый мануал давно в глаза не видела..он куда-то исчез
да вообще никакие бумажки,прилагаемые к компу ни оставила в живых..КТО знал что они когда-нибудь понадобятся..((

Вот на сайте этого самого ECS наверняка имеется мануальчик для материнки Вашей.

Ariny спасибо ,а то я не могла понять как называется у меня мат.плата. щас загружу мануальчик=)


мануал-то на английском(( короче я отключила встроенную звуковуху.и в диспетчере устр-в исчез вопросительно-восклицат. знак напротив PCI Device! теперь когда я открываю регулятор громкости звука выскакивает окно с сообщ. о том, что активных устройств-микшеров не обнаружено..значит вовсе не дрйвер мне нужно устан-вать? а надо как-то микшеры настроить..но как? я думала,что их достаточно подключить,а их еще и устанавливать? помогите.

Эта, солнышко. А у тебя окромя встроенной-то звуковухи что-нить имеется.

Smirnoff эх..знала бы я,что там имеется.
Ariny попробую разобраться..
короче я вас никогда не оставлю в покое..слишком много гружу


Метод 1. Обновите драйвер моста PCI-to-PCI через диспетчер устройств.

1)
На клавиатуре нажмите Windows ключ + р вместе, чтобы открыть окно «Выполнить».
Затем введите devmgmt.msc в поле и нажмите Enter, чтобы открыть диспетчер устройств.


2)
В окне диспетчера устройств найдите и щелкните правой кнопкой мыши Мост PCI-to-PCI Водитель.
Нажмите Обновить драйвер .


3)
Выбрать Автоматический поиск обновленного программного обеспечения драйвера .


4)
Тогда ваша Windows автоматически обнаружит обновление для вашего устройства.

Ноты: По некоторым причинам Microsoft не всегда может найти обновление для вас. Таким образом, если он не нашел обновления для вас, обязательно попробуйте метод 2 ниже, чтобы Driver Easy помог вам.

(Рекомендуемый☞) Метод 2. Автоматическое обновление драйвера моста PCI-to-PCI через Driver Easy.

Водитель Easy это действительно полезный и безопасный инструмент для работы с драйверами, совместимый с Windows 10/8/7 и т. д. Он может помочь вам отсканировать все отсутствующие и устаревшие драйверы и найти правильные менее чем за 1 минуту! Он без исключения найдет правильный драйвер для вашего устройства моста PCI-to-PCI.


Вы можете попробовать это Бесплатная версия для установки нового драйвера по очереди. Или наслаждайтесь гораздо более высокой эффективностью благодаря Pro версия чтобы обновить все ваши драйверы в всего за один раз:


Не беспокойтесь, попробуйте его версию Pro, поскольку мы предлагаем вам без вопросов 30-дневная гарантия возврата денег и профессиональная техподдержка 24/7.

Любые вопросы, пожалуйста, дайте нам знать, оставив свой комментарий ниже, спасибо.

Мосты PCI (PCI Bridge) — специальные аппаратные средства соединения шин PCI (и PCI-X) между собой и с другими шинами. Главный мост (Host Bridge) используется для подключения PCI к центру компьютера (системной памяти и процессору). «Почетной обязанностью» главного моста является генерация обращений к конфигурационному пространству под управлением центрального процессора, что позволяет хосту (центральному процессору) выполнять конфигурирование всей подсистемы шин PCI. В системе может быть и несколько главных мостов, что позволяет предоставить высокопроизводительную связь с центром большему числу устройств (число устройств на одной шине ограниченно). Из этих шин одна назначается условно главной (bus 0).

Равноранговые мосты PCI (PeertoPeer Bridge) используются для подключения дополнительных шин PCI. Эти мосты всегда вносят дополнительные накладные расходы на передачу данных, так что эффективная производительность при обмене устройства с центром снижается с каждым встающим на пути мостом.

Для подключения шин PCMCIA, CardBus, MCA, ISA/EISA, X-Bus и LPC используются специальные мосты, входящие в чипсеты системных плат или же являющиеся отдельными устройствами PCI (микросхемами). Эти мосты выполняют преобразование интерфейсов соединяемых ими шин, синхронизацию и буферизацию обменов данных.

Каждый мост программируется — ему указываются диапазоны адресов в пространствах памяти и ввода-вывода, отведенные устройствам его шин. Если адрес ЦУ текущей транзакции на одной шине (стороне) моста относится к шине противоположной стороны, мост транслирует транзакцию на соответствующую шину и обеспечивает согласование протоколов шин. Таким образом, совокупность мостов PCI выполняет маршрутизацию (routing) обращений по связанным шинам. Если в системе имеется несколько главных мостов, то сквозная маршрутизация между устройствами разных шин может оказаться невозможной: главные мосты друг с другом могут оказаться связанными лишь через магистральные пути контроллера памяти. Поддержка трансляции всех типов транзакций PCI через главные мосты в этом случае оказывается чересчур сложной, а потому спецификацией PCI строго и не требуется. Таким образом, все активные устройства всех шин PCI могут обращаться к системной памяти, но возможность равнорангового общения может оказаться в зависимости от принадлежности этих устройств той или иной шине PCI.

Применение мостов PCI предоставляет такие возможности, как:

  • увеличение возможного числа подключенных устройств, преодолевая ограничения электрических спецификаций шины;
  • разделение устройств PCI на сегменты — шины PCI — с различными характеристиками разрядности (32/64 бит), тактовой частоты (33/66/100/133 МГц), протокола (PCI, PC-X Mode 1, PCI-X Mode 2, PCI Express). На каждой шине все абоненты равняются на самого слабого участника; правильная расстановка устройств по шинам позволяет с максимальной эффективностью использовать возможности устройств и системной платы;
  • организация сегментов с «горячим» подключением/отключением устройств;
  • организация одновременного параллельного выполнения транзакций от инициаторов, расположенных на разных шинах.

Каждый мост PCI соединяет только две шины: первичную (primary bus), находящуюся ближе к вершине иерархии, с вторичной (secondary bus); интерфейсы моста, которыми он связан с этими шинами, называются соответственно первичным и вторичным. Допускается только чисто древовидная конфигурация, то есть две шины соединяются друг с другом лишь одним мостом и нет «петель» из мостов. Шины, подсоединяемые ко вторичному интерфейсу данного моста другими мостами, называются подчиненными (subordinated bus). Мосты PCI образуют иерархию шин PCI, на вершине которой находится главная шина с нулевым номером, подключенная к главному мосту. Если главных мостов несколько, то из их шин (равных друг другу по рангу) условно главной будет шина, которой назначен нулевой номер.

Мост должен выполнять ряд обязательных функций:

Мосты, выполняющие данные функции, называются прозрачными (transparrent bridge); для работы с устройствами, находящимися за такими мостами, не требуется дополнительных драйверов моста. Именно такие мосты описаны в спецификации PCI Bridge 1.1, и для них, как устройств PCI, есть специальный класс (06). В данном случае подразумевается «плоская» модель адресации ресурсов (памяти и ввода-вывода): каждое устройство имеет свои адреса, уникальные (не пересекающиеся с другими) в пределах данной системы (компьютера).

Существуют и непрозрачные мосты (non-transparrent bridge), которые позволяют организовывать обособленные сегменты со своими локальными адресными пространствами. Непрозрачный мост выполняет трансляцию (преобразование) адресов для транзакций, у которых инициатор и целевое устройство находятся по разные стороны моста. Досягаемыми через такой мост могут быть и не все ресурсы (диапазоны адресов) противоположной стороны. Непрозрачные мосты используются, например, когда в компьютере выделяется подсистема «интеллигентного ввода-вывода» (I20) со своим процессором ввода-вывода и локальным адресным пространством.

Маршрутизация по иерархическому адресу

Задача маршрутизации — определение, где по отношению к мосту находится ресурс, адресованный каждой транзакции, — является первоочередной при обработке каждой транзакции, «увиденной» мостом на любом из своих интерфейсов. Эта задача решается двояко, поскольку в фазе адреса может передаваться как иерархический адрес PCI (шина -> устройство -> функция), так и «плоский» адрес памяти или порта ввода-вывода.

Маршрутизация по иерархическому адресу

  • Primary Bus Number — номер первичной шины;
  • Secondary Bus Number — номер вторичной шины (это и номер моста);
  • Subordinate Bus Number — максимальный номер подчиненной шины.

Все шины с номерами в диапазоне от Secondary Bus Number до Subordinate Bus Number включительно будут лежать со стороны вторичного интерфейса, все остальные — на стороне первичного.

Знание номеров шины позволяет мостам распространять обращения к конфигурационным регистрам устройств в сторону от хоста к подчиненным шинам и распространять специальные циклы во всех направлениях. Ответы на расщепленные транзакции (Split Complete) мост транслирует с одного интерфейса на другой, если они адресованы к шине противоположного интерфейса.

Конфигурационные циклы типа 0 и специальные циклы мостами не транслируются. Конфигурационные транзакции типа 1, обнаруженные на первичном интерфейсе, мост обрабатывает следующим образом:

  • Преобразует их в конфигурационные циклы типа 0 или специальные циклы, если номер шины (на линиях AD[23:16]) соответствует номеру вторичной шины. При преобразовании в цикл типа 0 номер устройства с первичной шины, полученный в фазе адреса, декодируется в позиционный код на вторичной шине (см. главу 2), номер функции и регистра передается без изменений, биты AD[1:0] на вторичной шине обнуляются. В PCI-X кроме позиционного кода на вторичную шину передается и номер устройства. Преобразование в специальный цикл (изменение кода команды) производится, если в полях номера устройства и функции все биты единичные, а в поле номера регистра — нулевые.
  • Пропускает их с первичного интерфейса на вторичный без изменения, если номер шины соответствует диапазону номеров подчиненных шин.
  • Игнорирует, если номер шины лежит вне диапазона номеров шин стороны вторичного интерфейса.

Со стороны вторичного интерфейса мост передает на первичный только конфигурационные циклы типа 1, относящиеся к специальным циклам (в полях номера устройства и функции все биты единичные, а в поле номера регистра — нулевые). Если номер шины соответствует номеру первичной шины, мост преобразует эту транзакцию в специальный цикл.

Если конфигурационный цикл не воспринимается ни одним из устройств, мосты могут эту ситуацию отрабатывать двояко: фиксировать отсутствие устройства (сработает Master Abort) или же выполнять операции вхолостую. Однако в любом случае чтение конфигурационного регистра несуществующего устройства (функции) должно возвращать значение FFFFFFFFh (это будет безопасной информацией, поскольку даст недопустимое значение идентификатора устройства).

Маршрутизация по «плоскому» адресу

Для манипулирования с транзакциями обращения к памяти и портам ввода-вывода мосту нужны карты адресов, на которых отмечены области, принадлежащие устройствам вторичной и подчиненных шин. В системе с плоской уникальной адресацией этого достаточно. Для отмеченных областей мост должен отвечать в качестве целевого устройства на транзакции, «увиденные» им на первичном интерфейсе, и инициировать их в роли мастера на вторичном интерфейсе; остальные транзакции на первичном интерфейсе он игнорирует. Для адресов вне этих областей мост должен вести себя «зеркально»: отвечать в качестве целевого устройства на транзакции, «увиденные» им на вторичном интерфейсе, и инициировать их на первичном интерфейсе; остальные транзакции на вторичном интерфейсе он игнорирует. Каким образом мост транслирует транзакции, описано далее.

Каждый мост PCI-PCI имеет по одному описателю на каждый из трех типов ресурсов: ввода-вывода, «настоящей» памяти (допускающей предвыборку) и памяти, на которую отображены регистры ввода-вывода. В описателе указывается базовый адрес и размер области. Ресурсы одного типа для всех устройств, находящихся за мостом (на вторичной и всех подчиненных шинах), должны быть собраны в одну, по возможности компактную, область.

Мост транслирует транзакции ввода-вывода указанной области с первичного интерфейса на вторичный только при установленном бите I/O Space Enable в регистре команд. Транзакции ввода-вывода со вторичного интерфейса на первичный транслируются только при установленном бите Bus Master Enable.

Вводвывод, отображенный на память, может использовать адреса в пределах первых 4 Гбайт (предел 32-битной адресации) с гранулярностью 1 Мбайт. Транслируемая область задается регистрами Memory Base (начальный адрес) и Memory Limit (конечный адрес), в которых задаются только старшие 12 бит адреса AD[31:20], младшие биты AD[19:0] подразумеваются равными 0 и FFFFFh соответственно. Кроме того, транслироваться может и область памяти VGA .

«Настоящая» память устройств PCI, допускающая предвыборку, может располагаться как в пределах 32-битной адресации (4 Гбайт), так и 64-битной, с гранулярностью 1 Мбайт. Транслируемая область задается регистрами Prefetchable Memory Base (начальный адрес) и Prefetchable Memory Limit (конечный адрес). Если в младших битах [3:0] этих регистров чтение возвращает 0001, то это признак поддержки 64-битной адресации. В этом случае старшая часть адресов находится в регистрах Prefetchable Base Upper 32 Bits и Prefetchable Limit Upper 32 Bits. Мост может и не иметь специальной поддержки предвыбираемой памяти, тогда вышеуказанные регистры будут при чтении возвращать нули.

Мост транслирует транзакции памяти указанных областей с первичного интерфейса на вторичный только при установленном бите Memory Space Enable в регистре команд. Транзакции памяти со вторичного интерфейса на первичный транcлируются только при установленном бите Bus Master Enable.

Поддержка адресации ввода-вывода шины ISA

В адресации портов ввода-вывода есть особенности, связанные с «наследием», доставшимся от шины ISA. 10-битное декодирование адреса, применявшееся в шине ISA, приводит к тому, что каждый из адресов диапазона 0–3FFh (предел охвата 10-битным адресом) имеет еще по 63 псевдонима (aliase), по которым можно обращаться к тому же устройству ISA. Так, например, для адреса 0378h псевдонимами являются x778h, xB78h и xF78h (x — любая шестнадцатеричная цифра). Псевдонимы адресов ISA используются в разных целях, в частности, и в системе ISA PnP. Область адресов 0–FFh зарезервирована за системными (не пользовательскими) устройствами ISA, для которых псевдонимы не используют. Таким образом, в каждом килобайте адресного пространства ввода-вывода последние 768 байт (адреса 100–1FF) могут являться псевдонимами, а первые 256 байт (0–0FFh) — нет. В регистре управления мостом присутствует бит ISA Enable, установка которого приведет к вычеркиванию областей-псевдонимов из общей области адресов, описанной регистрами моста I/O Base и I/O Limit. Это вычеркивание действует только для первых 64 Кбайт адресного пространства (16-битного адреса). Мост не будет транслировать с первичного интерфейса на вторичный транзакции, принадлежащие этим вычеркнутым областям. И наоборот, с вторичного интерфейса транзакции, относящиеся к данным областям, будут транслироваться на первичный. Эта возможность нужна для совместного использования малого (64 Кбайт) пространства адресов устройствами PCI и ISA, примиряя «изрезанность» карты адресов ISA с возможностью задания лишь одной области адресов ввода-вывода для каждого моста. Данный бит имеет смысл устанавливать для мостов, за которыми нет устройств ISA. Эти мосты будут транслировать «вниз» все транзакции ввода-вывода, адресованные к первым 256 байтам каждого килобайта области адресов, описанной регистрами моста I/O Base и I/O Limit. Эти адреса конфигурационное ПО может выделять устройствам PCI, находящимся «ниже» данного моста (кроме адресов 0000h–00FFh, относящихся к устройствам системной платы).

Специальная поддержка VGA

В мостах может присутствовать специальная поддержка графического адаптера VGA, который может находиться на стороне вторичного интерфейса моста. Эта поддержка индицируется и разрешается битом VGA Enable конфигурационного регистра моста. При включенной поддержке мост осуществляет трансляцию обращений к памяти VGA в диапазоне адресов 0A0000h–0BFFFFh, а также регистрам ввода-вывода в диапазонах 3B0h–3BBh и 3C0h–3DFh и всех их 64 псевдонимов (линии адреса AD[15:10] не декодируются). Такой особый подход объясняется данью обеспечения совместимости с самым распространенным графическим адаптером и невозможностью описания всех необходимых областей в таблицах диапазонов адресов для позитивного декодирования. Кроме того, для поддержки VGA требуется особый подход к обращениям в регистры палитр, которые расположены по адресам 3C6h, 3C8h и 3C9h, и их псевдонимам (здесь опять же линии адреса AD[15:10] не декодируются).

Читайте также: