From 0fb7bdd65cb934e7d854aa333fec8f0e0cdf8b20 Mon Sep 17 00:00:00 2001 From: Joan Lledó Date: Sun, 19 Dec 2021 12:26:47 +0100 Subject: pci-arbiter: Implement memory mapping over region files * pci-arbiter/Makefile: * Add device_map.c to sources * pci-arbiter/device_map.c: * pci-arbiter/device_map.h: * New module for device mapping * Relies on libpciaccess mapping methods * pci-arbiter/func_files.c: * io_region_file(): Use the new device mapping module * pci-arbiter/netfs_impl.c: * Implements netfs_get_filemap(): * Uses the device mapping module to map the region to the arbiter space * Calls the kernel RPC vm_region_create_proxy() to obtain the memory object proxy * Only region files are mapped for now Message-Id: <20211219112647.11512-4-jlledom@mailfence.com> --- pci-arbiter/func_files.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) (limited to 'pci-arbiter/func_files.c') diff --git a/pci-arbiter/func_files.c b/pci-arbiter/func_files.c index d7d8c5d5..81ebfded 100644 --- a/pci-arbiter/func_files.c +++ b/pci-arbiter/func_files.c @@ -30,6 +30,8 @@ #include +#include "device_map.h" + /* Read or write a block of data from/to the configuration space */ static error_t config_block_op (struct pci_device *dev, off_t offset, size_t * len, @@ -202,16 +204,10 @@ io_region_file (struct pcifs_dirent * e, off_t offset, size_t * len, region_block_ioport_op (region->base_addr, offset, len, data, read); else { - /* First check whether the region is already mapped */ - if (region->memory == 0) - { - /* Not mapped, try to map it now */ - err = - pci_device_map_range (e->device, region->base_addr, region->size, - PCI_DEV_MAP_FLAG_WRITABLE, ®ion->memory); - if (err) - return err; - } + /* Ensure the region is mapped */ + err = device_map_region (e->device, region); + if (err) + return err; if (read) memcpy (data, region->memory + offset, *len); else -- cgit v1.2.3