Наши партнеры

UnixForum





Библиотека сайта rus-linux.net

На главную -> MyLDP -> Электронные книги по ОС Linux
Цилюрик О.И. Модули ядра 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   Отображение памяти