Управление изоляцией памяти для ввода-вывода (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
Функция |
Сведения о функции |
---|---|
|
Назначение Прикрепляет устройство на шине PCIe к автоматически созданному домену IOMMU, ассоциированному с вызывающим процессом. Параметры
Возвращаемые значения В случае успеха возвращает Дополнительные сведения Если IOMMU не задействован, возвращает |
|
Назначение Открепляет устройство на шине PCIe от автоматически созданного домена IOMMU, ассоциированного с вызывающим процессом. Параметры
Возвращаемые значения В случае успеха возвращает Дополнительные сведения Если IOMMU не задействован, возвращает |
|
Назначение Создает домен IOMMU, ассоциированный с вызывающим процессом. Параметры
Возвращаемые значения В случае успеха возвращает |
|
Назначение Прикрепляет устройство на шине PCIe к заданному домену IOMMU, ассоциированному с вызывающим процессом. Параметры
Возвращаемые значения В случае успеха возвращает |
|
Назначение Открепляет устройство на шине PCIe от заданного домена IOMMU, ассоциированного с вызывающим процессом. Параметры
Возвращаемые значения В случае успеха возвращает |