KasperskyOS Community Edition 1.3

Управление изоляцией памяти для ввода-вывода (iommu_api.h)

API определен в заголовочном файле sysroot-*-kos/include/coresrv/iommu/iommu_api.h из состава KasperskyOS SDK.

API предназначен для управления изоляцией регионов физической памяти, используемых устройствами на шине PCIe для DMA. (Изоляция обеспечивается IOMMU.)

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

Использование API

Без прикрепления к домену IOMMU устройство на шине PCIe не может использовать DMA. После прикрепления к домену IOMMU устройство может получить доступ ко всем буферам DMA, которые ассоциированы с этим доменом IOMMU. В один момент времени устройство может быть прикреплено только к одному домену IOMMU, но к одному домену IOMMU может быть прикреплено несколько устройств. Буфер DMA может быть ассоциирован с несколькими доменами IOMMU одновременно. Каждый домен IOMMU ассоциирован только с одним процессом, но с одним процессом может быть ассоциировано несколько доменов IOMMU. Возможность создания нескольких доменов IOMMU, ассоциированных с одним процессом, позволяет разграничить доступ к буферам DMA для разных устройств, управляемых одним процессом.

API позволяет создавать домены IOMMU, прикреплять устройства на шине PCIe к доменам IOMMU и откреплять устройства на шине PCIe от доменов IOMMU. Как правило, прикрепление устройства к домену IOMMU выполняется при инициализации драйвера. Открепление устройства от домена IOMMU обычно выполняется при возникновении ошибок во время инициализации драйвера или при финализации драйвера.

Ассоциация буфер DMA с доменом IOMMU создается при вызове функций KnIoDmaBegin() и KnIoDmaBeginEx(), входящих в API dma.h. Функция KnIoDmaBegin() ассоциирует буфер DMA с автоматически созданными доменом IOMMU. Каждый процесс может быть ассоциирован только с одним таким доменом IOMMU. Этот домен IOMMU создается при первом успешном вызове функции KnIommuAttachDevice() и существует на протяжении всего времени жизни процесса. Функция KnIoDmaBeginEx() ассоциирует буфер DMA с доменом IOMMU, созданным вызовом функции KnIommuCreateDomain(). Каждый процесс может быть ассоциирован с несколькими доменами IOMMU, созданными вызовами функции KnIommuCreateDomain(). Такие домены IOMMU могут быть удалены до завершения процесса закрытием их дескрипторов.

Чтобы прикрепить устройство к автоматически созданному домену IOMMU или выполнить обратную операцию, нужно вызвать функцию KnIommuAttachDevice() или KnIommuDetachDevice() соответственно.

Чтобы прикрепить устройство к домену IOMMU, созданному вызовом функции KnIommuCreateDomain(), или выполнить обратную операцию, нужно вызвать функцию KnIommuAttachDeviceToDomain() или KnIommuDetachDeviceFromDomain() соответственно.

Сведения о функциях API

Функции iommu_api.h

Функция

Сведения о функции

KnIommuAttachDevice()

Назначение

Прикрепляет устройство на шине PCIe к автоматически созданному домену IOMMU, ассоциированному с вызывающим процессом.

Параметры

  • [in] bdf – адрес устройства на шине PCIe в формате BDF.

Возвращаемые значения

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

Дополнительные сведения

Если IOMMU не задействован, возвращает rcOk.

KnIommuDetachDevice()

Назначение

Открепляет устройство на шине PCIe от автоматически созданного домена IOMMU, ассоциированного с вызывающим процессом.

Параметры

  • [in] bdf – адрес устройства на шине PCIe в формате BDF.

Возвращаемые значения

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

Дополнительные сведения

Если IOMMU не задействован, возвращает rcOk.

KnIommuCreateDomain()

Назначение

Создает домен IOMMU, ассоциированный с вызывающим процессом.

Параметры

  • [out] domain – указатель на дескриптор домена IOMMU.

Возвращаемые значения

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

KnIommuAttachDeviceToDomain()

Назначение

Прикрепляет устройство на шине PCIe к заданному домену IOMMU, ассоциированному с вызывающим процессом.

Параметры

  • [in] bdf – адрес устройства на шине PCIe в формате BDF.
  • [in] domain – дескриптор домена IOMMU.

Возвращаемые значения

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

KnIommuDetachDeviceFromDomain()

Назначение

Открепляет устройство на шине PCIe от заданного домена IOMMU, ассоциированного с вызывающим процессом.

Параметры

  • [in] bdf – адрес устройства на шине PCIe в формате BDF.
  • [in] domain – дескриптор домена IOMMU.

Возвращаемые значения

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