Служба ввода-вывода

Служба предназначена для работы с портами ввода-вывода, MMIO, DMA, прерываниями.

Сведения о методах службы приведены в таблице ниже.

Методы службы io.IO (интерфейс kl.core.IO)

Метод

Назначение и параметры метода

Потенциальная опасность метода

RegisterPort

Назначение

Регистрирует последовательность портов ввода-вывода.

Параметры

  • [in] base – адрес первого порта ввода-вывода в последовательности.
  • [in] size – число портов ввода-вывода в последовательности.
  • [out] resource – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует последовательность портов ввода-вывода.
  • [out] rc – код возврата.

Позволяет выполнить следующие действия:

  • Захватить порты ввода-вывода (рекомендуется контролировать адрес первого порта ввода-вывода и число портов ввода-вывода в последовательности).
  • Исчерпать память ядра, создавая в ней множество объектов.

RegisterMmio

Назначение

Регистрирует регион памяти MMIO.

Параметры

  • [in] base – базовый адрес региона памяти MMIO.
  • [in] size – размер региона памяти MMIO в байтах.
  • [out] resource – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует регион памяти MMIO.
  • [out] rc – код возврата.

Позволяет исчерпать память ядра, создавая в ней множество объектов.

RegisterDma

Назначение

Создает буфер DMA.

Параметры

  • [in] size – размер буфера DMA в байтах.
  • [in] flags – флаги, задающие параметры буфера DMA.
  • [in] order – параметр, задающий минимальное число страниц памяти (2^order) в блоке.
  • [out] resource – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует буфер DMA.
  • [out] rc – код возврата.

Позволяет выполнить следующие действия:

  • Исчерпать память ядра, создавая в ней множество объектов.
  • Исчерпать оперативную память.

RegisterIrq

Назначение

Регистрирует прерывание.

Параметры

  • [in] irq – номер прерывания.
  • [out] resource – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует прерывание.
  • [out] rc – код возврата.

Позволяет исчерпать память ядра, создавая в ней множество объектов.

MapMem

Назначение

Резервирует регион виртуальной памяти и отображает на него регион памяти MMIO.

Параметры

  • [in] resource – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует регион памяти MMIO.
  • [in] prot – флаги, задающие права доступа к региону виртуальной памяти.
  • [in] attr – флаги, задающие параметры региона виртуальной памяти (например, использование кеширования).
  • [out] address – базовый адрес региона виртуальной памяти.
  • [out] mapping – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор используется для освобождения региона виртуальной памяти.
  • [out] rc – код возврата.

Позволяет выполнить следующие действия:

  • Захватить управление устройством при отображении региона памяти MMIO на регион виртуальной памяти (рекомендуется контролировать базовый адрес и размер региона памяти MMIO при вызове метода RegisterMmio).
  • Создать разделяемую память для межпроцессного взаимодействия, скрытого от модуля безопасности, если дескрипторами одного региона памяти MMIO владеют несколько процессов (маски прав дескрипторов должны разрешать отображение региона памяти MMIO).
  • Исчерпать память ядра, создавая в ней множество объектов.

PermitPort

Назначение

Открывает доступ к портам ввода-вывода.

Параметры

  • [in] resource – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует последовательность портов ввода-вывода.
  • [out] access – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор используется для закрытия доступа к портам ввода-вывода.
  • [out] rc – код возврата.

Позволяет выполнить следующие действия:

  • Захватить управление устройством (рекомендуется контролировать адрес первого порта ввода-вывода и число портов ввода-вывода в последовательности при вызове метода RegisterPort).
  • Исчерпать память ядра, создавая в ней множество объектов.

AttachIrq

Назначение

Привязывает вызывающий поток исполнения к прерыванию.

Параметры

  • [in] resource – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует прерывание.
  • [in] flags – флаги, задающие параметры прерывания.
  • [out] delivery – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор является клиентским IPC-дескриптором, который используется обработчиком прерывания.
  • [out] rc – код возврата.

Позволяет выполнить следующие действия:

  • Забрать процессорное время у остальных потоков исполнения, в том числе из других процессов (поток исполнения, выполнивший привязку к прерыванию, становится потоком реального времени).
  • Сделать невозможным завершение процесса из другого процесса (процесс, поток которого выполнил привязку к прерыванию, невозможно завершить из другого процесса).
  • Остановить операционную систему (при возникновении необработанного исключения в потоке исполнения, обрабатывающем прерывание, останавливается операционная система).
  • Заблокировать, замедлить или некорректно выполнить обработку прерывания (рекомендуется контролировать номер прерывания при вызове метода RegisterIrq).
  • Исчерпать память ядра, создавая в ней множество объектов.

DetachIrq

Назначение

Отправляет потоку исполнения запрос, в результате выполнения которого поток должен выполнить отвязывание от прерывания.

Параметры

  • [in] resource – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует прерывание.
  • [out] rc – код возврата.

Позволяет прекратить обработку прерывания в другом процессе.

EnableIrq

Назначение

Разрешает (демаскирует) прерывание.

Параметры

  • [in] resource – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует прерывание.
  • [out] rc – код возврата.

Позволяет разрешить прерывание на уровне системы.

DisableIrq

Назначение

Запрещает (маскирует) прерывание.

Параметры

  • [in] resource – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует прерывание.
  • [out] rc – код возврата.

Позволяет запретить прерывание на уровне системы.

ModifyDma

Назначение

Изменяет параметры кеширования буфера DMA.

Параметры

  • [in] resource – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует буфер DMA.
  • [in] flags – флаги, задающие параметры кеширования буфера DMA.
  • [out] rc – код возврата.

Нет.

MapDma

Назначение

Резервирует регион виртуальной памяти и отображает на него буфер DMA.

Параметры

  • [in] resource – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует буфер DMA.
  • [in] offset – смещение в буфере DMA, с которого нужно начать отображение, в байтах.
  • [in] length – размер части буфера DMA, которую нужно отобразить, в байтах.
  • [in] hint – желаемый базовый адрес региона виртуальной памяти или 0, чтобы базовый адрес был выбран автоматически.
  • [in] prot – флаги, задающие права доступа к региону виртуальной памяти.
  • [out] address – базовый адрес региона виртуальной памяти.
  • [out] mapping – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор используется для освобождения региона виртуальной памяти.
  • [out] rc – код возврата.

Позволяет выполнить следующие действия:

  • Создать разделяемую память для межпроцессного взаимодействия, скрытого от модуля безопасности, если дескрипторами одного буфера DMA владеют несколько процессов (маски прав дескрипторов должны разрешать отображение буфера DMA).
  • Исчерпать память ядра, создавая в ней множество объектов.

DmaGetInfo

Назначение

Позволяет получить сведения о буфере DMA.

Параметры

  • [in] resource – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует буфер DMA.
  • [out] flags – флаги, отражающие параметры DMA.
  • [out] order – параметр, отражающий минимальное число страниц памяти (2^order) в блоке.
  • [out] size – размер буфера DMA в байтах.
  • [out] count – число блоков.
  • [out] frames – последовательность, содержащая адреса и размеры блоков.
  • [out] rc – код возврата.

Нет.

DmaGetPhysInfo

Назначение

Позволяет получить сведения о физической памяти, на основе которой создан буфер DMA.

Параметры

  • [in] handle – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует буфер DMA.
  • [out] count – число блоков.
  • [out] frames – последовательность, содержащая адреса и размеры блоков.
  • [out] rc – код возврата.

Нет.

BeginDma

Назначение

Открывает доступ к буферу DMA для устройства.

Параметры

  • [in] resource – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует буфер DMA.
  • [out] iomapping – значение, двоичное представление которого состоит из нескольких полей, включая поле дескриптора и поле маски прав дескриптора. Дескриптор идентифицирует объект ядра, который содержит адреса и размеры блоков, необходимые устройству, чтобы использовать буфер DMA. Адреса памяти, используемые устройством, могут быть физическими или виртуальными в зависимости от того, задействован ли IOMMU.
  • [out] rc – код возврата.

Позволяет исчерпать память ядра, создавая в ней множество объектов.

В начало