drm/linux: Add field devfn to struct pci_dev
authorFrançois Tigeot <ftigeot@wolfpond.org>
Thu, 9 Aug 2018 21:01:42 +0000 (23:01 +0200)
committerFrançois Tigeot <ftigeot@wolfpond.org>
Thu, 9 Aug 2018 21:08:48 +0000 (23:08 +0200)
sys/dev/drm/drm_dragonfly.c
sys/dev/drm/include/linux/pci.h

index 86e557d..f3e616e 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * Copyright (c) 2015 Imre Vadász <imre@vdsz.com>
  * Copyright (c) 2015 Rimvydas Jasinskas
+ * Copyright (c) 2018 François Tigeot <ftigeot@wolfpond.org>
  *
  * DRM Dragonfly-specific helper functions
  *
@@ -108,6 +109,7 @@ static void drm_fill_pdev(device_t dev, struct pci_dev *pdev)
        u_int irq_flags;
 
        pdev->dev.bsddev = dev;
+       pdev->devfn = PCI_DEVFN(pci_get_slot(dev), pci_get_function(dev));
        pdev->vendor = pci_get_vendor(dev);
        pdev->device = pci_get_device(dev);
        pdev->subsystem_vendor = pci_get_subvendor(dev);
index 87b38a4..b087c28 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014-2017 François Tigeot <ftigeot@wolfpond.org>
+ * Copyright (c) 2014-2018 François Tigeot <ftigeot@wolfpond.org>
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -63,6 +63,7 @@ struct pci_dev {
        struct pci_bus *bus;            /* bus device is nailed to */
        struct device dev;
 
+       uint32_t devfn;
        uint16_t vendor;                /* vendor ID */
        uint16_t device;                /* device ID */
        uint16_t subsystem_vendor;
@@ -89,7 +90,10 @@ struct pci_bus {
 struct pci_driver {
 };
 
-#define PCI_DEVFN(slot, func)   ((((slot) & 0x1f) << 3) | ((func) & 0x07))
+/* XXX: should be in uapi_linux/pci.h */
+#define PCI_DEVFN(slot, func)  ((((slot) & 0x1f) << 3) | ((func) & 0x07))
+#define PCI_SLOT(devfn)                (((devfn) >> 3) & 0x1f)
+#define PCI_FUNC(devfn)                ((devfn) & 0x07)
 
 #define PCI_DMA_BIDIRECTIONAL  0