For some arm64-related interrupt controller work I need to be able to
compose a PCIe requester ID.  Since this is a generic PCIe concept
that might be useful on other architectures (for example for IOMMU
support), I propose to add a function to the MI PCI code.

ok?


Index: dev/pci/pci.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/pci.c,v
retrieving revision 1.111
diff -u -p -r1.111 pci.c
--- dev/pci/pci.c       27 Nov 2015 15:28:22 -0000      1.111
+++ dev/pci/pci.c       28 Jul 2018 11:42:51 -0000
@@ -659,6 +659,15 @@ pci_get_ht_capability(pci_chipset_tag_t 
        return (0);
 }
 
+uint16_t
+pci_requester_id(pci_chipset_tag_t pc, pcitag_t tag)
+{
+       int bus, dev, func;
+
+       pci_decompose_tag(pc, tag, &bus, &dev, &func);
+       return ((bus << 8) | (dev << 3) | func);
+}
+
 int
 pci_find_device(struct pci_attach_args *pa,
     int (*match)(struct pci_attach_args *))
Index: dev/pci/pcivar.h
===================================================================
RCS file: /cvs/src/sys/dev/pci/pcivar.h,v
retrieving revision 1.69
diff -u -p -r1.69 pcivar.h
--- dev/pci/pcivar.h    8 Aug 2013 17:54:11 -0000       1.69
+++ dev/pci/pcivar.h    28 Jul 2018 11:42:51 -0000
@@ -226,7 +226,6 @@ int pci_mapreg_map(struct pci_attach_arg
            bus_space_tag_t *, bus_space_handle_t *, bus_addr_t *,
            bus_size_t *, bus_size_t);
 
-
 int    pci_io_find(pci_chipset_tag_t, pcitag_t, int, bus_addr_t *,
            bus_size_t *);
 int    pci_mem_find(pci_chipset_tag_t, pcitag_t, int, bus_addr_t *,
@@ -236,6 +235,8 @@ int pci_get_capability(pci_chipset_tag_t
            int *, pcireg_t *);
 int    pci_get_ht_capability(pci_chipset_tag_t, pcitag_t, int,
            int *, pcireg_t *);
+
+uint16_t pci_requester_id(pci_chipset_tag_t, pcitag_t);
 
 struct pci_matchid {
        pci_vendor_id_t         pm_vid;

Reply via email to