3.5.2 Архитектура программного обеспечения шины PCI

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

Архитектуру программного обеспечения PCI для MIPS можно разделить на четыре уровня:

 

BSP: BSP даёт программному обеспечению следующую информацию:
– Начальный адрес ввода-вывода для доступа к областям памяти и ввода-вывода PCI
– Процедуры для доступа к пространству конфигурации PCI
– Карту маршрутизации прерываний на плате

HAL: этот уровень реализует функциональность BIOS, назначая ресурсы PCI (память и ввод-вывод) для различных устройств. HAL использует информацию, предоставленную BSP для назначения ресурсов. Поддержка HAL включает в себя функции для сканирования шины, построения дерева устройств PCI и управления ресурсами. Таким образом, разработчикам BSP не нужно беспокоиться о деталях HAL; это часть HAL для MIPS. Разработчик BSP должен беспокоиться об интерфейсе между BSP и HAL. Это подробно обсуждается ниже, в разделе "BSP для шины PCI".

Библиотека PCI: она предоставляет интерфейсы для HAL и драйверов устройств. Библиотека находится в исходных текстах ядра в каталоге drivers/pci.

Драйверы устройств PCI: они должны использовать функции, экспортируемые библиотекой PCI.

 

В этом разделе мы обсудим BSP PCI.

 

BSP для шины PCI

 

Фактическое осуществление обмена информацией между BSP и HAL зависит от архитектуры. MIPS определяет структуру канала PCI для этой цели; эта структура данных содержит начало и конец памяти и регионы ввода-вывода, а также имеет указатель на структуру pci_ops, содержащую процедуры для доступа к пространству конфигурации. Эта структура данных указывает на следующие структуры данных, которые должны быть заполнены:

 

pci_ops: это указатель на структуру, содержащую процедуры для доступа к пространству конфигурации PCI. Определение этой структуры берётся из include/linux/pci.h. Поскольку доступ к конфигурации зависит от платы, BSP необходимо заполнить эти процедуры так, чтобы остальные подсистемы PCI могли обращаться к пространству конфигурации.

io_resource и mem_resource: эти структуры данных задают начальный и конечный адреса ввода-вывода и пространства памяти, которые назначены устройствам PCI. Хотя HAL выполняет сканирование и распределение ресурсов, всем устройствам пространство памяти или ввода-вывода назначается внутри диапазона адресов, указанного BSP.

 

Определение структуры канала PCI отличается в версиях ядра 2.4 и 2.6. В реализации версии 2.4 канал определяется статически с помощью mips_pci_channels; это подхватывается HAL. В реализации версии 2.6 структуры канал PCI реализует  структура pci_controller; BSP необходимо заполнить эту структуру и зарегистрировать её специально для использования HAL с помощью интерфейса register_pci_controller().

Наряду с заполнением вышеописанной структуры, BSP для PCI несёт дополнительную ответственность, и это выполняется различными коррекциями, которые описаны ниже.

 

Наиболее важной коррекцией является та, которая выполняет маршрутизацию прерываний. Поскольку маршрутизация прерываний сильно зависит от платы, BSP должен прочитать номер контакта прерывания для каждой обнаруженной шины и назначить линию прерывания такому устройству; это выполняется в стандартном API pcibios_fixup_irqs(), который вызывается в HAL.

Другой набор коррекций включает в себя все общесистемные и зависимые от устройств коррекции. Первые должны быть реализованы BSP с помощью функции pcibios_fixup(). Зависимые от устройства коррективы регистрируются в таблице pcibios_fixups[]. Когда на шине PCI обнаружено устройство, коррективы применяются для данного устройства, используя его ID в качестве идентификатора. Это особенно полезно для убирания каких-либо аномалий в отношении реализации PCI для данного устройства.

 

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