aboutsummaryrefslogtreecommitdiff
path: root/pci-arbiter/func_files.c
diff options
context:
space:
mode:
authorJoan Lledó <jlledom@member.fsf.org>2021-12-19 12:26:47 +0100
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2021-12-25 21:32:04 +0100
commit0fb7bdd65cb934e7d854aa333fec8f0e0cdf8b20 (patch)
treeabedd788f25680e2688563713c6709e3ec002a99 /pci-arbiter/func_files.c
parent6f68c39ee5f08410936ba7e8cc3a15f120cec05c (diff)
downloadhurd-0fb7bdd65cb934e7d854aa333fec8f0e0cdf8b20.tar.gz
hurd-0fb7bdd65cb934e7d854aa333fec8f0e0cdf8b20.tar.bz2
hurd-0fb7bdd65cb934e7d854aa333fec8f0e0cdf8b20.zip
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>
Diffstat (limited to 'pci-arbiter/func_files.c')
-rw-r--r--pci-arbiter/func_files.c16
1 files changed, 6 insertions, 10 deletions
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 <pciaccess.h>
+#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, &region->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