summaryrefslogtreecommitdiff
path: root/pci-arbiter/device_map.c
diff options
context:
space:
mode:
authorJoan Lledó <jlledom@member.fsf.org>2022-01-08 13:15:37 +0100
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2022-01-08 19:10:50 +0100
commit7c3743a6d1cf06fe5130628c9f39cc3c41128d22 (patch)
tree0b3a7e3a397eb7aee919d48c8bee295ccaadc62e /pci-arbiter/device_map.c
parent78102136e63b4bdccd06982fd8708b6832225be7 (diff)
pci-arbiter: Stop using deprecated region memory pointer
Use a internal array of pointers instead * pci-arbiter/device_map.h: * Update device_map_region() prototype * Now it receives an output address as parameter * pci-arbiter/device_map.c: * Update device_map_region() definition to match the new prototype * Support for legacy mappings * When the base address is lower than 1 mb * pci-arbiter/func_files.c: * pci-arbiter/netfs_impl.c: * Update calls to device_map_region to match the new prototype * Use the internal array of pointers instead of region->memory * pci-arbiter/pcifs.h: * struct pcifs_dirent: Declare the internal array of pointers Message-Id: <20220108121537.6277-2-jlledom@mailfence.com>
Diffstat (limited to 'pci-arbiter/device_map.c')
-rw-r--r--pci-arbiter/device_map.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/pci-arbiter/device_map.c b/pci-arbiter/device_map.c
index 216adfb9..1627746d 100644
--- a/pci-arbiter/device_map.c
+++ b/pci-arbiter/device_map.c
@@ -24,14 +24,25 @@
#include "device_map.h"
error_t
-device_map_region (struct pci_device *device, struct pci_mem_region *region)
+device_map_region (struct pci_device *device, struct pci_mem_region *region,
+ void **addr)
{
error_t err = 0;
- if (region->memory == 0)
+ if (*addr == 0)
{
- err = pci_device_map_range (device, region->base_addr, region->size,
- PCI_DEV_MAP_FLAG_WRITABLE, &region->memory);
+ /*
+ * We could use the non-legacy call for all ranges, but libpciaccess
+ * offers a call for ranges under 1Mb. We call it for those cases, even
+ * when there's no difference for us.
+ */
+ if (region->base_addr > 0x100000
+ || region->base_addr + region->size > 0x100000)
+ err = pci_device_map_range (device, region->base_addr, region->size,
+ PCI_DEV_MAP_FLAG_WRITABLE, addr);
+ else
+ err = pci_device_map_legacy (device, region->base_addr, region->size,
+ PCI_DEV_MAP_FLAG_WRITABLE, addr);
}
return err;