diff options
author | Joan Lledó <jlledom@member.fsf.org> | 2022-01-08 13:15:37 +0100 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2022-01-08 19:10:50 +0100 |
commit | 7c3743a6d1cf06fe5130628c9f39cc3c41128d22 (patch) | |
tree | 0b3a7e3a397eb7aee919d48c8bee295ccaadc62e /pci-arbiter/device_map.c | |
parent | 78102136e63b4bdccd06982fd8708b6832225be7 (diff) | |
download | hurd-7c3743a6d1cf06fe5130628c9f39cc3c41128d22.tar.gz hurd-7c3743a6d1cf06fe5130628c9f39cc3c41128d22.tar.bz2 hurd-7c3743a6d1cf06fe5130628c9f39cc3c41128d22.zip |
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.c | 19 |
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, ®ion->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; |