KnIoDmaMap()
KnIoDmaMap()
Функция объявлена в файле coresrv/io/dma.h.
Retcode KnIoDmaMap(Handle rid, rtl_size_t offset, rtl_size_t length, void *hint,
int vmflags, void **addr, Handle *handle);
Функция отображает участок DMA-буфера на адресное пространство процесса.
Входные параметры:
rid– дескриптор выделенного с помощьюKnIoDmaCreate()DMA-буфера;offset– странично-выровненное смещение начала участка от начала буфера в байтах;length– размер участка; должен быть кратен размеру страницы и не превышать <размер буфера -offset>;hint– виртуальный адрес начала отображения; если он равен 0, адрес выберет ядро;vmflags– флаги аллокации.
В параметре vmflags можно использовать следующие флаги аллокации (vmm/flags.h):
- VMM_FLAG_READ и VMM_FLAG_WRITE – атрибуты защиты памяти;
- VMM_FLAG_LOW_GUARD и VMM_FLAG_HIGH_GUARD – добавление защитной страницы перед и после выделенной памяти соответственно.
Допустимые комбинации атрибутов защиты памяти:
- VMM_FLAG_READ – разрешено чтение содержимого страницы;
- VMM_FLAG_WRITE – разрешено изменение содержимого страницы;
- VMM_FLAG_READ | VMM_FLAG_WRITE – разрешено чтение и изменение содержимого страницы.
Выходные параметры:
addr– указатель на виртуальный адрес начала отображенного участка;handle– дескриптор созданного отображения.
В случае успеха функция возвращает rcOk.
Пример использования – см. KnIoDmaCreate().
Чтобы удалить созданное отображение, необходимо вызвать функцию KnIoClose(), передав в нее дескриптор отображения handle.
Вам помогла эта статья?
Что нам нужно улучшить?
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!