3.5.1 Уникальность архитектуры PCI

Предыдущая  Содержание  Следующая V*D*V

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

 

Вопросы карты памяти

 

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

Тем не менее, не исключено, что возможность отобразить адресное пространство PCI в виртуальное адресное пространство процессора доступна не на всех платах. Драйверы устройств Linux принимают это во внимание и, следовательно, ни один из драйверов не обращается к вводу-выводу и памяти PCI через прямые указатели; скорее, они используют команды вида inb()/outb(). Они могут транслироваться к прямым ссылкам на память в случае, если PCI отображается непосредственно в виртуальное адресное пространство процессора. И MIPS, и PowerPC позволяют пространству PCI быть отображённым в адресное пространство процессора, при условии, что плата поддерживает это. В таком случае BSP должен предоставить начало ввода-вывода; это начальный адрес в виртуальной карте процессора для доступа к устройствам PCI. Рассмотрим, например, схему платы, показанную на Рисунке 3.7, где мост PCI взаимодействует с процессором через FPGA и двухпортовое ОЗУ. FPGA предоставляет специальные регистры для начала выполнения конфигурации, работы с памятью и вводом-выводом. Такая плата имеет две аномалии по сравнению с обычными платами и, следовательно, два последствия для BSP:

 

Память и адресное пространство ввода-вывода PCI не может быть отображено на адресное пространство процессора напрямую, потому что операция по вводу-выводу и работы с памятью требует программирования FPGA. Так что BSP должен обеспечить процедуры для выполнения операций с памятью и вводом-выводом на шине PCI.

Используется двухпортовая оперативная память, так что PCI устройства могут выполнять DMA к памяти. Но поскольку основная память не доступна для контроллера PCI, драйверам PCI устройств, требующим способную к DMA память, должна быть обеспечена память в пределах области двухпортовой оперативной памяти.

 

Рисунок 3.7 Подключение PCI через FPGA.

Рисунок 3.7 Подключение PCI через FPGA.

 

Доступ к пространству конфигурации

 

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

 

Маршрутизация прерываний на плате

 

Оборудование PCI предоставляет четыре логических прерывания, A, B, C, и D, которые должны быть жёстко прописаны в каждом устройстве PCI. Эта информация хранится в поле контакт прерывания в заголовке конфигурации. То, как логические прерывания PCI на самом деле подключены к линиям прерываний процессору, зависит от платы. Пространство конфигурации имеет ещё одно поле, называемое линией прерывания, которая должна быть заполнена фактической линией прерывания, которую использует устройство PCI. BSP должен просмотреть заголовок конфигурации для информации о контакте прерывания, а затем исходя из карты маршрутизации прерываний заполнить поле линия прерывания. Например, на Рисунке 3.8 все контакты, помеченные как A и C, подключены к IRQ0, а контакты, помеченные как B и D, подключены к IRQ1. Поэтому BSP должен запрограммировать первый набор карт (Устройство A и Устройство C) на линию IRQ0, а последний на линию IRQ1 (Устройство B и Устройство D).

 

Рисунок 3.8 Маршрутизация прерываний на шине PCI.

Рисунок 3.8 Маршрутизация прерываний на шине PCI.

 

Предыдущая  Содержание  Следующая