[igt-dev] [PATCH i-g-t v3 2/5] lib/igt_device: add igt_device_map_pci_bar_region
Katarzyna Dec
katarzyna.dec at intel.com
Mon Apr 15 13:37:16 UTC 2019
On Mon, Apr 15, 2019 at 10:59:34AM +0200, Daniel Mrzyglod wrote:
> This function use sysfs to map particular mmio region.
s/use/uses/
> fd of opened device point us for specific pci device.
s/point/points
(not a merge blocker)
>
> Signed-off-by: Daniel Mrzyglod <daniel.t.mrzyglod at intel.com>
> ---
> lib/igt_device.c | 38 ++++++++++++++++++++++++++++++++++++++
> lib/igt_device.h | 1 +
> 2 files changed, 39 insertions(+)
>
> diff --git a/lib/igt_device.c b/lib/igt_device.c
> index f3d2a9f5..8b280474 100644
> --- a/lib/igt_device.c
> +++ b/lib/igt_device.c
> @@ -225,3 +225,41 @@ struct pci_device *igt_device_get_pci_device(int fd)
>
> return pci_dev;
> }
> +
> +/**
> + * igt_device_map_pci_bar_region:
> + *
> + * @fd: the device
> + * @mmio_bar: bar to be mapped
> + * @mmio_size: bar size
> + *
> + * Returns:
> + * The pointer for mmapped bar
> + */
> +void *igt_device_map_pci_bar_region(int fd, int mmio_bar, int mmio_size)
> +{
> + struct igt_pci_addr pci_addr;
> + char *filepath = NULL;
> + int newfd;
> + void *igt_mmio;
> +
> + if (igt_device_get_pci_addr(fd, &pci_addr)) {
> + igt_warn("Unable to find device PCI address\n");
> + return NULL;
> + }
> +
> + asprintf(&filepath, "/sys/devices/pci%.4x:%.2x/%.4x:%.2x:%.2x.%.1x/resource%.1x",
> + pci_addr.domain, pci_addr.bus, pci_addr.domain, pci_addr.bus,
> + pci_addr.device, pci_addr.function, mmio_bar);
First this looks like a nightmatre for the person that is debugging.
Maybe is will be easier to use readlinkat for getting device path and
igt_sysfs_set for writing to resource?
> + newfd = open(filepath, O_RDWR | O_SYNC);
> + igt_mmio = mmap(0, mmio_size, PROT_READ | PROT_WRITE, MAP_SHARED,
> + newfd, 0);
> + free(filepath);
> + close(newfd);
Have you applied comment from Chris from last round? (I cannot see any changes,
but maybe you discussed with him on IRC about that).
> + igt_fail_on_f(igt_mmio == MAP_FAILED,
> + "Couldn't map MMIO region %.4x:%.2x:%.2x.%.1x BAR %d\n",
If you will be using this '%.4x:%.2x:%.2x.%.1x' in more than 1 place in this
function, I suggest to make a variable of this - this will decrease possiblity
of errors and will be easier to read.
Kasia
> + pci_addr.domain, pci_addr.bus, pci_addr.device,
> + pci_addr.function, mmio_bar);
> +
> + return igt_mmio;
> +}
> diff --git a/lib/igt_device.h b/lib/igt_device.h
> index 860b3a8a..6ffc1d5e 100644
> --- a/lib/igt_device.h
> +++ b/lib/igt_device.h
> @@ -34,5 +34,6 @@ void igt_device_drop_master(int fd);
>
> int igt_device_get_card_index(int fd);
> struct pci_device *igt_device_get_pci_device(int fd);
> +void *igt_device_map_pci_bar_region(int fd, int mmio_bar, int mmio_size);
>
> #endif /* __IGT_DEVICE_H__ */
> --
> 2.20.1
>
> _______________________________________________
> igt-dev mailing list
> igt-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/igt-dev
More information about the igt-dev
mailing list