Page MenuHomeFreeBSD

D6239.id16132.diff
No OneTemporary

D6239.id16132.diff

Index: sys/dev/pci/pci.c
===================================================================
--- sys/dev/pci/pci.c
+++ sys/dev/pci/pci.c
@@ -122,7 +122,8 @@
static int pci_remap_intr_method(device_t bus, device_t dev,
u_int irq);
-static uint16_t pci_get_rid_method(device_t dev, device_t child);
+static int pci_get_id_method(device_t dev, device_t child,
+ int type, uintptr_t *rid);
static struct pci_devinfo * pci_fill_devinfo(device_t pcib, device_t bus, int d,
int b, int s, int f, uint16_t vid, uint16_t did);
@@ -190,7 +191,7 @@
DEVMETHOD(pci_msix_count, pci_msix_count_method),
DEVMETHOD(pci_msix_pba_bar, pci_msix_pba_bar_method),
DEVMETHOD(pci_msix_table_bar, pci_msix_table_bar_method),
- DEVMETHOD(pci_get_rid, pci_get_rid_method),
+ DEVMETHOD(pci_get_id, pci_get_id_method),
DEVMETHOD(pci_alloc_devinfo, pci_alloc_devinfo_method),
DEVMETHOD(pci_child_added, pci_child_added_method),
#ifdef PCI_IOV
@@ -5823,11 +5824,11 @@
pci_cfg_restore(dev, dinfo);
}
-static uint16_t
-pci_get_rid_method(device_t dev, device_t child)
+static int
+pci_get_id_method(device_t dev, device_t child, int type, uintptr_t *id)
{
- return (PCIB_GET_RID(device_get_parent(dev), child));
+ return (PCIB_GET_ID(device_get_parent(dev), child, type, id));
}
/* Find the upstream port of a given PCI device in a root complex. */
Index: sys/dev/pci/pci_if.m
===================================================================
--- sys/dev/pci/pci_if.m
+++ sys/dev/pci/pci_if.m
@@ -208,9 +208,11 @@
device_t child;
} DEFAULT null_msix_bar;
-METHOD uint16_t get_rid {
+METHOD int get_id {
device_t dev;
device_t child;
+ int type;
+ uintptr_t *id;
};
METHOD struct pci_devinfo * alloc_devinfo {
Index: sys/dev/pci/pci_pci.c
===================================================================
--- sys/dev/pci/pci_pci.c
+++ sys/dev/pci/pci_pci.c
@@ -59,7 +59,8 @@
static int pcib_resume(device_t dev);
static int pcib_power_for_sleep(device_t pcib, device_t dev,
int *pstate);
-static uint16_t pcib_ari_get_rid(device_t pcib, device_t dev);
+static int pcib_ari_get_id(device_t pcib, device_t dev, int type,
+ uintptr_t *id);
static uint32_t pcib_read_config(device_t dev, u_int b, u_int s,
u_int f, u_int reg, int width);
static void pcib_write_config(device_t dev, u_int b, u_int s,
@@ -114,7 +115,7 @@
DEVMETHOD(pcib_release_msix, pcib_release_msix),
DEVMETHOD(pcib_map_msi, pcib_map_msi),
DEVMETHOD(pcib_power_for_sleep, pcib_power_for_sleep),
- DEVMETHOD(pcib_get_rid, pcib_ari_get_rid),
+ DEVMETHOD(pcib_get_id, pcib_ari_get_id),
DEVMETHOD(pcib_try_enable_ari, pcib_try_enable_ari),
DEVMETHOD(pcib_ari_enabled, pcib_ari_enabled),
DEVMETHOD(pcib_decode_rid, pcib_ari_decode_rid),
@@ -2574,26 +2575,31 @@
return ((sc->flags & PCIB_ENABLE_ARI) != 0);
}
-static uint16_t
-pcib_ari_get_rid(device_t pcib, device_t dev)
+static int
+pcib_ari_get_id(device_t pcib, device_t dev, int type, uintptr_t *id)
{
struct pcib_softc *sc;
uint8_t bus, slot, func;
+ if (type != PCI_ID_RID)
+ return (ENXIO);
+
sc = device_get_softc(pcib);
if (sc->flags & PCIB_ENABLE_ARI) {
bus = pci_get_bus(dev);
func = pci_get_function(dev);
- return (PCI_ARI_RID(bus, func));
+ *id = (PCI_ARI_RID(bus, func));
} else {
bus = pci_get_bus(dev);
slot = pci_get_slot(dev);
func = pci_get_function(dev);
- return (PCI_RID(bus, slot, func));
+ *id = (PCI_RID(bus, slot, func));
}
+
+ return (0);
}
/*
Index: sys/dev/pci/pcib_if.m
===================================================================
--- sys/dev/pci/pcib_if.m
+++ sys/dev/pci/pcib_if.m
@@ -175,10 +175,12 @@
#
# Return the PCI Routing Identifier (RID) for the device.
#
-METHOD uint16_t get_rid {
+METHOD int get_id {
device_t pcib;
device_t dev;
-} DEFAULT pcib_get_rid;
+ int type;
+ uintptr_t *id;
+} DEFAULT pcib_get_id;
#
# Enable Alternative RID Interpretation if both the downstream port (pcib)
Index: sys/dev/pci/pcib_private.h
===================================================================
--- sys/dev/pci/pcib_private.h
+++ sys/dev/pci/pcib_private.h
@@ -190,7 +190,7 @@
int pcib_alloc_msix(device_t pcib, device_t dev, int *irq);
int pcib_release_msix(device_t pcib, device_t dev, int irq);
int pcib_map_msi(device_t pcib, device_t dev, int irq, uint64_t *addr, uint32_t *data);
-uint16_t pcib_get_rid(device_t pcib, device_t dev);
+int pcib_get_id(device_t pcib, device_t dev, int type, uintptr_t *id);
void pcib_decode_rid(device_t pcib, uint16_t rid, int *bus,
int *slot, int *func);
Index: sys/dev/pci/pcib_support.c
===================================================================
--- sys/dev/pci/pcib_support.c
+++ sys/dev/pci/pcib_support.c
@@ -54,16 +54,20 @@
return (PCI_FUNCMAX);
}
-uint16_t
-pcib_get_rid(device_t pcib, device_t dev)
+int
+pcib_get_id(device_t pcib, device_t dev, int type, uintptr_t *id)
{
uint8_t bus, slot, func;
+ if (type != PCI_ID_RID)
+ return (ENXIO);
+
bus = pci_get_bus(dev);
slot = pci_get_slot(dev);
func = pci_get_function(dev);
- return (PCI_RID(bus, slot, func));
+ *id = (PCI_RID(bus, slot, func));
+ return (0);
}
void
Index: sys/dev/pci/pcivar.h
===================================================================
--- sys/dev/pci/pcivar.h
+++ sys/dev/pci/pcivar.h
@@ -270,6 +270,9 @@
#include "pci_if.h"
+/* ID types that can be read by pci_get_id */
+#define PCI_ID_RID 0
+
enum pci_device_ivars {
PCI_IVAR_SUBVENDOR,
PCI_IVAR_SUBDEVICE,
@@ -542,10 +545,26 @@
return (PCI_MSIX_TABLE_BAR(device_get_parent(dev), dev));
}
+static __inline int
+pci_get_id(device_t dev, int type, uintptr_t *id)
+{
+ return (PCI_GET_ID(device_get_parent(dev), dev, type, id));
+}
+
+/*
+ * This is the deprecated interface, there is no way to tell the difference
+ * between a failure and a valid value that happens to be the same as the
+ * failure value.
+ */
static __inline uint16_t
pci_get_rid(device_t dev)
{
- return (PCI_GET_RID(device_get_parent(dev), dev));
+ uintptr_t rid;
+
+ if (pci_get_id(dev, PCI_ID_RID, &rid) != 0)
+ return (0);
+
+ return (rid);
}
static __inline void

File Metadata

Mime Type
text/plain
Expires
Sun, Dec 21, 5:41 PM (11 h, 39 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
27117578
Default Alt Text
D6239.id16132.diff (6 KB)

Event Timeline