summaryrefslogtreecommitdiff
path: root/usr/src/uts/intel/io/pci/pci_pci.c
diff options
context:
space:
mode:
authorHans Rosenfeld <hans.rosenfeld@joyent.com>2018-03-26 16:16:18 +0200
committerHans Rosenfeld <hans.rosenfeld@joyent.com>2018-09-26 21:30:14 +0200
commitb5cf5bc277244cdacc06d213322ec98e76ef8d89 (patch)
tree19e0eb0112d5b98673bca22b98618db41697c4b1 /usr/src/uts/intel/io/pci/pci_pci.c
parentd48defc5a82c2bc955d3c8c9a5a3c7ccea87d5d4 (diff)
downloadillumos-gate-b5cf5bc277244cdacc06d213322ec98e76ef8d89.tar.gz
9796 want support for PCI BAR size >= 4G
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com> Reviewed by: Patrick Mooney <patrick.mooney@joyent.com> Reviewed by: Robert Mustacchi <rm@joyent.com> Reviewed by: Toomas Soome <tsoome@me.com> Reviewed by: Andy Fiddaman <omnios@citrus-it.net> Reviewed by: Garrett D'Amore <garrett@damore.org> Approved by: Garrett D'Amore <garrett@damore.org>
Diffstat (limited to 'usr/src/uts/intel/io/pci/pci_pci.c')
-rw-r--r--usr/src/uts/intel/io/pci/pci_pci.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/usr/src/uts/intel/io/pci/pci_pci.c b/usr/src/uts/intel/io/pci/pci_pci.c
index b15c057371..eeb62a82ac 100644
--- a/usr/src/uts/intel/io/pci/pci_pci.c
+++ b/usr/src/uts/intel/io/pci/pci_pci.c
@@ -24,6 +24,7 @@
*/
/*
* Copyright 2012 Garrett D'Amore <garrett@damore.org>. All rights reserved.
+ * Copyright 2018 Joyent, Inc.
*/
/*
@@ -561,12 +562,21 @@ ppb_ctlops(dev_info_t *dip, dev_info_t *rdip,
if (ctlop == DDI_CTLOPS_NREGS)
*(int *)result = totreg;
else if (ctlop == DDI_CTLOPS_REGSIZE) {
+ uint64_t rs;
+
rn = *(int *)arg;
if (rn >= totreg) {
kmem_free(drv_regp, reglen);
return (DDI_FAILURE);
}
- *(off_t *)result = drv_regp[rn].pci_size_low;
+
+ rs = drv_regp[rn].pci_size_low |
+ ((uint64_t)drv_regp[rn].pci_size_hi << 32);
+ if (rs > OFF_MAX) {
+ kmem_free(drv_regp, reglen);
+ return (DDI_FAILURE);
+ }
+ *(off_t *)result = rs;
}
kmem_free(drv_regp, reglen);