KasperskyOS Community Edition 1.1

Прерывания

Описанный здесь интерфейс является низкоуровневым. Для работы с прерываниями в большинстве случаев рекомендуется использовать интерфейс, предоставляемый библиотекой kdf.

В этом разделе

KnIoAttachIrq()

KnIoDetachIrq()

KnIoDisableIrq()

KnIoEnableIrq()

KnRegisterIrq()

В начало
[Topic libkos_interrupts]

KnIoAttachIrq()

Функция объявлена в файле coresrv/io/irq.h.

Retcode KnIoAttachIrq(Handle rid, rtl_uint32_t flags, Handle *handle);

Функция привязывает вызывающий поток к прерыванию.

Входные параметры:

  • rid – дескриптор прерывания, полученный с помощью вызова KnRegisterIrq();
  • flags – флаги прерывания.

Выходной параметр handle содержит IPC-дескриптор, посредством которого вызывающий поток будет ожидать прерывание, выполнив вызов Recv().

В случае успеха функция возвращает rcOk, иначе возвращает код ошибки.

Флаги прерывания

  • IRQ_LEVEL_LOW – генерация по низкому уровню;
  • IRQ_LEVEL_HIGH – генерация по высокому уровню;
  • IRQ_EDGE_RAISE – генерация по переднему фронту;
  • IRQ_EDGE_FALL – генерация по заднему фронту;
  • IRQ_SHARED – разделяемое прерывание;
  • IRQ_PRIO_LOW – низкий приоритет прерывания;
  • IRQ_PRIO_NORMAL – нормальный приоритет;
  • IRQ_PRIO_HIGH – высокий приоритет;
  • IRQ_PRIO_RT – приоритет реального времени.
В начало
[Topic kn_io_attach_irq]

KnIoDetachIrq()

Функция объявлена в файле coresrv/io/irq.h.

Retcode KnIoDetachIrq(Handle rid);

Функция отвязывает вызывающий поток от прерывания.

rid – дескриптор прерывания, полученный с помощью вызова KnRegisterIrq();

В случае успеха функция возвращает rcOk, иначе возвращает код ошибки.

В начало
[Topic kn_io_detach_irq]

KnIoDisableIrq()

Функция объявлена в файле coresrv/io/irq.h.

Retcode KnIoDisableIrq(Handle rid);

Функция маскирует (запрещает) прерывание с дескриптором rid.

В случае успеха функция возвращает rcOk.

В начало
[Topic kn_io_disable_irq]

KnIoEnableIrq()

Функция объявлена в файле coresrv/io/irq.h.

Retcode KnIoEnableIrq(Handle rid);

Функция демаскирует (разрешает) прерывание с дескриптором rid.

В случае успеха функция возвращает rcOk.

В начало
[Topic kn_io_enable_irq]

KnRegisterIrq()

Функция объявлена в файле coresrv/io/irq.h.

Retcode KnRegisterIrq(int irq, Handle *outRid);

Функция регистрирует прерывание с номером irq.

Выходной параметр outRid содержит дескриптор прерывания.

В случае успеха функция возвращает rcOk.

Если прерывание больше не используется, его необходимо освободить с помощью функции KnIoClose().

В начало
[Topic kn_register_irq]