Ввод-вывод через память (mmio.h)
API определен в заголовочном файле sysroot-*-kos/include/coresrv/io/mmio.h
из состава KasperskyOS SDK.
API предназначен для работы с памятью MMIO. Память MMIO – это физические адреса, на которые отображены регистры и память устройств. (Для адресации физической памяти и доступа к регистрам и памяти устройств используются части одного пространства физических адресов.)
Сведения о функциях API приведены в таблице ниже.
Использование API
Типовой сценарий использования API включает следующие шаги:
- Регистрация региона памяти MMIO, соответствующего устройству, с которым нужно работать.
Чтобы выполнить этот шаг, нужно вызвать функцию
KnRegisterPhyMem()
.Дескриптор региона памяти MMIO можно передать другому процессу через IPC.
- Отображение региона памяти MMIO на память процесса.
В один момент времени регион памяти MMIO может быть отображен только на один регион виртуальной памяти только одного процесса. (В разные моменты времени регион памяти MMIO может отображаться на виртуальную память разных процессов, владеющих дескриптором этого региона.) В результате отображения процесс получает доступ к региону памяти MMIO на чтение и/или запись.
Чтобы зарезервировать регион виртуальной памяти и отобразить на него регион памяти MMIO, нужно вызвать функцию
KnIoMapMem()
.Дескриптор, полученный при вызове функции
KnIoMapMem()
, нельзя передать другому процессу через IPC. - Чтение данных из региона памяти MMIO и запись данных в него через память процесса.
8-, 16- и 32-битные слова, считанные из региона памяти MMIO или записанные в него, представляют собой значения регистров устройства или содержимое памяти устройства.
Чтобы выполнить этот шаг, нужно использовать функции
IoReadMmReg8|16|32()
,IoReadMmBuffer8|16|32()
,IoWriteMmReg8|16|32()
,IoWriteMmBuffer8|16|32()
.
Дерегистрация региона памяти MMIO
Чтобы дерегистрировать регион памяти MMIO, нужно выполнить следующие шаги:
- Освободить регион виртуальной памяти, выделенный при вызове функции
KnIoMapMem()
.Чтобы выполнить этот шаг, нужно вызвать функцию
KnHandleClose()
, указав дескриптор, который был получен при вызове функцииKnIoMapMem()
. (ФункцияKnHandleClose()
объявлена в заголовочном файлеsysroot-*-kos/include/coresrv/handle/handle_api.h
из состава KasperskyOS SDK.) - Закрыть или отозвать каждый дескриптор региона памяти MMIO во всех процессах, которые владеют этими дескрипторами.
Чтобы выполнить этот шаг, нужно использовать функцию
KnHandleClose()
и/илиKnHandleRevoke()
, которые объявлены в заголовочном файлеsysroot-*-kos/include/coresrv/handle/handle_api.h
из состава KasperskyOS SDK.
Сведения о функциях API
Функции mmio.h
Функция(и) |
Сведения о функции(ях) |
---|---|
|
Назначение Регистрирует регион памяти MMIO. Параметры
Возвращаемые значения В случае успеха возвращает |
|
Назначение Резервирует регион виртуальной памяти и отображает на него регион памяти MMIO. Параметры
Возвращаемые значения В случае успеха возвращает Дополнительные сведения В параметре
В параметре
|
|
Назначение Позволяют получить 8-, 16- или 32-битное слово из региона памяти MMIO. Параметры
Возвращаемые значения 8-, 16- или 32-битное слово из региона памяти MMIO. |
|
Назначение Сохраняют в буфер последовательность 8-, 16-или 32-битных слов из региона памяти MMIO. Параметры
Возвращаемые значения Нет. Дополнительные сведения Функции можно использовать, если процессор имеет архитектуру x86 или x86-64. |
|
Назначение Записывают 8-, 16- или 32-битное слово в регион памяти MMIO. Параметры
Возвращаемые значения Нет. |
|
Назначение Записывают в регион памяти MMIO последовательность 8-, 16-или 32-битных слов из буфера. Параметры
Возвращаемые значения Нет. Дополнительные сведения Функции можно использовать, если процессор имеет архитектуру x86 или x86-64. |