Краткая справка |
Предыдущая Содержание Следующая |
В этой главе были введены эти символы, связанные с управлением прерываниями:
#include <linux/interrupt.h> int request_irq(unsigned int irq, irqreturn_t (*handler)( ), unsigned long flags, const char *dev_name, void *dev_id); void free_irq(unsigned int irq, void *dev_id); Вызовы, которые регистрируют и отменяют регистрацию обработчика прерывания.
#include <linux/irq.h.h> int can_request_irq(unsigned int irq, unsigned long flags); Эта функция, доступная на i386 и x86_64, возвращает ненулевое значение, если попытка получить данную линию прерывания успешна.
#include <asm/signal.h> SA_INTERRUPT SA_SHIRQ SA_SAMPLE_RANDOM Флаги для request_irq. SA_INTERRUPT запрашивает установку быстрого обработчика (в отличие от медленного). SA_SHIRQ устанавливает обработчик разделяемого прерывания и третий флаг сообщает, что время прерывания может быть использовано для генерации энтропии в системе.
/proc/interrupts /proc/stat Узлы файловой системы, которые сообщают информацию об аппаратных прерываниях и установленных обработчиках.
unsigned long probe_irq_on(void); int probe_irq_off(unsigned long); Функции, которые используются драйвером, когда он должен выполнить зондирование для определения, какая линия прерывания будет использоваться устройством. Результат probe_irq_on должен быть передан обратно в probe_irq_off после того, как прерывание было сгенерировано. Возвращаемое значение probe_irq_off является обнаруженным номером прерывания. IRQ_NONE IRQ_HANDLED IRQ_RETVAL(int x) Возможные возвращаемые значения из обработчика прерывания, указывающие, присутствовало ли фактическое прерывание от устройства. void disable_irq(int irq); void disable_irq_nosync(int irq); void enable_irq(int irq); Драйвер может разрешить или запретить сообщения о прерывании. Если оборудование пробует генерировать прерывание при запрещённых прерываниях, прерывание потеряно навсегда. Драйвер, использующий обработчик разделяемого прерывания, не должен использовать эти функции. void local_irq_save(unsigned long flags); void local_irq_restore(unsigned long flags); Используйте local_irq_save для запрета прерываний на местном процессоре и запоминания их предыдущего состояния. Для восстановления предыдущего состояния прерывания в local_irq_restore может быть передан flags. void local_irq_disable(void); void local_irq_enable(void); Функции, которые безоговорочного запрещают и разрешают прерывания на текущем процессоре. |
Предыдущая Содержание Следующая |