Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F140136730
D6239.id16132.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
6 KB
Referenced Files
None
Subscribers
None
D6239.id16132.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D6239: Create a get_id pci and pcib interface.
Attached
Detach File
Event Timeline
Log In to Comment