diff options
author | Joan Lledó <jlledom@member.fsf.org> | 2021-12-19 12:26:47 +0100 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2021-12-25 21:32:04 +0100 |
commit | 0fb7bdd65cb934e7d854aa333fec8f0e0cdf8b20 (patch) | |
tree | abedd788f25680e2688563713c6709e3ec002a99 /pci-arbiter/func_files.c | |
parent | 6f68c39ee5f08410936ba7e8cc3a15f120cec05c (diff) | |
download | hurd-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.c | 16 |
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, ®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 |