WINDOWS KMDF PCI DRIVER: - API для записи данных в виртуальный адрес, привязанный к памяти

У меня есть задача написать драйвер PCI на основе KMDF для Windows. В основном цель состоит в том, чтобы записать данные в ОЗУ, которое находится на плате FGPGA (плата еще не существует). Интерфейс PCI на FPGA позволит напрямую считывать данные и записывать их в RAM FPGA.

Идея заключается в том, что необходимая информация об отображении памяти будет храниться в регистре BAR0. Тип дескриптора памяти будет CmResourceTypeMemory. Первым шагом будет чтение информации из регистра BAR0 и создание карты памяти.

Используя другую плату, я написал базовый драйвер, который выполняет описанное выше.

Однако, как только у меня есть адрес памяти (виртуальный), я хотел бы читать и писать из этой памяти. Я заметил, что в Windows есть API для чтения и записи в ПОРТЫ и РЕГИСТРЫ. Есть ли что-то эквивалентное для записи и чтения различных объемов данных по виртуальному адресу: - I.E. Копирование буфера данных по виртуальному адресу. Копирование напрямую кажется одним из вариантов, однако я подозреваю, что для этого может быть API.

Я просмотрел различные примеры github PCI, однако они, как правило, используют чтение и запись регистров и портов.


person PC_Study    schedule 24.08.2017    source источник
comment
Возвращаемое значение MmMapIoSpace будет указателем, который вы можете использовать для чтения и записи RAM FPGA.   -  person David Cullen    schedule 24.08.2017
comment
Спасибо за ответ. Я использую MmMapIoSpace для получения виртуального адреса. Я планирую использовать RtlCopyMemory для копирования данных на виртуальный адрес. Эти данные будут поступать из буфера IORequest. На данный момент у меня нет оборудования, чтобы подтвердить это.   -  person PC_Study    schedule 24.08.2017


Ответы (1)


Используйте процедуры READ_REGISTER_BUFFER_xxx и WRITE_REGISTER_BUFFER_xxx. См. подпрограммы библиотеки HAL в документации MSDN.

person David Cullen    schedule 24.08.2017