3.5.2 Архитектура программного обеспечения шины PCI |
Предыдущая Содержание Следующая |
Архитектуру программного обеспечения PCI для MIPS можно разделить на четыре уровня:
▪BSP: BSP даёт программному обеспечению следующую информацию: ▪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 для данного устройства.
|
Предыдущая Содержание Следующая |