Библиотека сайта rus-linux.net
Цилюрик О.И. Модули ядра Linux | ||
Назад | Обслуживание периферийных устройств | Вперед |
Подключение к линии прерывания
Установка обработчиков прерываний и их написание рассматривалось выше. Здесь мы останавливаемся только на той детали этого процесса, что при установке обработчика прерывания для устройства — необходимо указывать используемую им линию IRQ:
typedef irqreturn_t (*irq_handler_t)( int, void* ); int request_irq( unsigned int irq, irq_handler_t handler, ... );
В устройствах шины ISA здесь указывалось фиксированное значение, устанавливаемое механически на плате устройства (переключателями, джамперами, ...). В устройствах PnP ISA — предпринимались попытки проб и тестирования различных линий IRQ на принадлежность данному устройству. В нынешних PCI устройствах это значение извлекается из области конфигурационных параметров устройства (смещение 0x3C), но делается это не непосредственно, а посредством API ядра из структуры struct pci_dev, например так:
struct pci_dev *pdev = NULL; pdev = pci_get_device( MY_PCI_VENDOR_ID, MY_PCI_DEVICE_ID, NULL ); char irq; pci_read_config_byte( pdev, PCI_INTERRUPT_LINE, &irq ); request_irq( irq, ... );
Последний оператор и устанавливает обработчик прерываний для этого устройства PCI. Вся дальнейшая работа с прерываниями обеспечивается уже самим установленным обработчиком прерывания, как это детально обсуждалось раньше.
Предыдущий раздел: | Оглавление | Следующий раздел: |
Устройства на шине PCI | Отображение памяти |