diff options
author | Ralf Baechle <ralf@linux-mips.org> | 1998-05-07 02:55:41 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 1998-05-07 02:55:41 +0000 |
commit | dcec8a13bf565e47942a1751a9cec21bec5648fe (patch) | |
tree | 548b69625b18cc2e88c3e68d0923be546c9ebb03 /arch/sparc64/prom/ranges.c | |
parent | 2e0f55e79c49509b7ff70ff1a10e1e9e90a3dfd4 (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.c | 48 |
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 |