Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F148850674
D55771.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D55771.diff
View Options
diff --git a/share/man/man4/pci.4 b/share/man/man4/pci.4
--- a/share/man/man4/pci.4
+++ b/share/man/man4/pci.4
@@ -244,6 +244,12 @@
This should always be equivalent to the offset of the
.Va pc_spare
member.
+.It pc_secbus
+Secondary PCI bus number.
+.Pq Only valid for bridge devices
+.It pc_subbus
+Subordinate PCI bus number.
+.Pq Only valid for bridge devices
.It pc_spare
Reserved for future use.
.El
diff --git a/sys/dev/pci/pci.c b/sys/dev/pci/pci.c
--- a/sys/dev/pci/pci.c
+++ b/sys/dev/pci/pci.c
@@ -798,6 +798,9 @@
devlist_entry->conf.pc_progif = cfg->progif;
devlist_entry->conf.pc_revid = cfg->revid;
+ devlist_entry->conf.pc_secbus = cfg->bridge.br_secbus;
+ devlist_entry->conf.pc_subbus = cfg->bridge.br_subbus;
+
pci_numdevs++;
pci_generation++;
diff --git a/sys/dev/pci/pci_user.c b/sys/dev/pci/pci_user.c
--- a/sys/dev/pci/pci_user.c
+++ b/sys/dev/pci/pci_user.c
@@ -81,7 +81,9 @@
u_int32_t pd_unit; /* device unit number */
int pd_numa_domain; /* device NUMA domain */
u_int32_t pc_reported_len;/* length of PCI data reported */
- char pc_spare[64]; /* space for future fields */
+ uint8_t pc_secbus; /* secondary bus number */
+ uint8_t pc_subbus; /* subordinate bus number */
+ char pc_spare[62]; /* space for future fields */
};
struct pci_match_conf32 {
@@ -889,6 +891,8 @@
pcup->pc32.pd_unit = (uint32_t)pcp->pd_unit;
if (cmd == PCIOCGETCONF32) {
pcup->pc32.pd_numa_domain = pcp->pd_numa_domain;
+ pcup->pc32.pc_secbus = pcp->pc_secbus;
+ pcup->pc32.pc_subbus = pcp->pc_subbus;
pcup->pc32.pc_reported_len =
(uint32_t)offsetof(struct pci_conf32, pc_spare);
}
@@ -1315,6 +1319,32 @@
else
dinfo->conf.pd_numa_domain = 0;
+ if (dinfo->cfg.dev != NULL) {
+ /*
+ * Re-read the values in case a driver
+ * changed them after the device was
+ * initially scanned.
+ */
+ switch (dinfo->conf.pc_hdr) {
+ case PCIM_HDRTYPE_BRIDGE:
+ dinfo->conf.pc_secbus =
+ pci_read_config(dinfo->cfg.dev,
+ PCIR_SECBUS_1, 1);
+ dinfo->conf.pc_subbus =
+ pci_read_config(dinfo->cfg.dev,
+ PCIR_SUBBUS_1, 1);
+ break;
+ case PCIM_HDRTYPE_CARDBUS:
+ dinfo->conf.pc_secbus =
+ pci_read_config(dinfo->cfg.dev,
+ PCIR_SECBUS_2, 1);
+ dinfo->conf.pc_subbus =
+ pci_read_config(dinfo->cfg.dev,
+ PCIR_SUBBUS_2, 1);
+ break;
+ }
+ }
+
if (pattern_buf == NULL ||
pci_conf_match(cmd, pattern_buf, num_patterns,
&dinfo->conf) == 0) {
diff --git a/sys/sys/pciio.h b/sys/sys/pciio.h
--- a/sys/sys/pciio.h
+++ b/sys/sys/pciio.h
@@ -79,7 +79,9 @@
u_long pd_unit; /* device unit number */
int pd_numa_domain; /* device NUMA domain */
size_t pc_reported_len;/* length of PCI data reported */
- char pc_spare[64]; /* space for future fields */
+ uint8_t pc_secbus; /* secondary bus number */
+ uint8_t pc_subbus; /* subordinate bus number */
+ char pc_spare[62]; /* space for future fields */
};
struct pci_match_conf {
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Mar 21, 1:03 PM (12 h, 58 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
30077985
Default Alt Text
D55771.diff (2 KB)
Attached To
Mode
D55771: pci: Export bus numbers for bridge devices in struct pci_conf
Attached
Detach File
Event Timeline
Log In to Comment