summaryrefslogtreecommitdiffstats
path: root/arch/sparc64/prom/ranges.c
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>1998-05-07 02:55:41 +0000
committerRalf Baechle <ralf@linux-mips.org>1998-05-07 02:55:41 +0000
commitdcec8a13bf565e47942a1751a9cec21bec5648fe (patch)
tree548b69625b18cc2e88c3e68d0923be546c9ebb03 /arch/sparc64/prom/ranges.c
parent2e0f55e79c49509b7ff70ff1a10e1e9e90a3dfd4 (diff)
o Merge with Linux 2.1.99.
o Fix ancient bug in the ELF loader making ldd crash. o Fix ancient bug in the keyboard code for SGI, SNI and Jazz.
Diffstat (limited to 'arch/sparc64/prom/ranges.c')
-rw-r--r--arch/sparc64/prom/ranges.c48
1 files changed, 46 insertions, 2 deletions
diff --git a/arch/sparc64/prom/ranges.c b/arch/sparc64/prom/ranges.c
index 83f860d45..7b889bac1 100644
--- a/arch/sparc64/prom/ranges.c
+++ b/arch/sparc64/prom/ranges.c
@@ -1,4 +1,4 @@
-/* $Id: ranges.c,v 1.8 1997/08/17 22:39:45 ecd Exp $
+/* $Id: ranges.c,v 1.10 1998/03/24 05:54:29 ecd Exp $
* ranges.c: Handle ranges in newer proms for obio/sbus.
*
* Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
@@ -140,17 +140,61 @@ __initfunc(void prom_ebus_ranges_init(struct linux_ebus *ebus))
ebus->num_ebus_ranges = (success/sizeof(struct linux_prom_ebus_ranges));
}
+__initfunc(void prom_ebus_intmap_init(struct linux_ebus *ebus))
+{
+ int success;
+
+ ebus->num_ebus_intmap = 0;
+ success = prom_getproperty(ebus->prom_node, "interrupt-map",
+ (char *)ebus->ebus_intmap,
+ sizeof(ebus->ebus_intmap));
+ if (success == -1)
+ return;
+
+ ebus->num_ebus_intmap = (success/sizeof(struct linux_prom_ebus_intmap));
+
+ success = prom_getproperty(ebus->prom_node, "interrupt-map-mask",
+ (char *)&ebus->ebus_intmask,
+ sizeof(ebus->ebus_intmask));
+ if (success == -1) {
+ prom_printf("%s: can't get interrupt-map-mask\n", __FUNCTION__);
+ prom_halt();
+ }
+}
+
__initfunc(void prom_pbm_ranges_init(int pnode, struct linux_pbm_info *pbm))
{
int success;
pbm->num_pbm_ranges = 0;
- success = prom_getproperty(pbm->prom_node, "ranges",
+ success = prom_getproperty(pnode, "ranges",
(char *)&pbm->pbm_ranges,
sizeof(pbm->pbm_ranges));
if(success != -1)
pbm->num_pbm_ranges = (success/sizeof(struct linux_prom_pci_ranges));
}
+
+__initfunc(void prom_pbm_intmap_init(int pnode, struct linux_pbm_info *pbm))
+{
+ int success;
+
+ pbm->num_pbm_intmap = 0;
+ success = prom_getproperty(pnode, "interrupt-map",
+ (char *)pbm->pbm_intmap,
+ sizeof(pbm->pbm_intmap));
+ if (success == -1)
+ return;
+
+ pbm->num_pbm_intmap = (success/sizeof(struct linux_prom_pci_intmap));
+
+ success = prom_getproperty(pnode, "interrupt-map-mask",
+ (char *)&pbm->pbm_intmask,
+ sizeof(pbm->pbm_intmask));
+ if (success == -1) {
+ prom_printf("%s: can't get interrupt-map-mask\n", __FUNCTION__);
+ prom_halt();
+ }
+}
#endif
void