CVS commit: src/sys/dev/ic
Module Name:src Committed By: kiyohara Date: Sun Sep 1 04:58:15 UTC 2013 Modified Files: src/sys/dev/ic: com.c comreg.h Log Message: Add support 16750 64Byte FIFO. But not test. To generate a diff of this commit: cvs rdiff -u -r1.313 -r1.314 src/sys/dev/ic/com.c cvs rdiff -u -r1.19 -r1.20 src/sys/dev/ic/comreg.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/dev/ic/com.c diff -u src/sys/dev/ic/com.c:1.313 src/sys/dev/ic/com.c:1.314 --- src/sys/dev/ic/com.c:1.313 Sun Sep 1 04:51:24 2013 +++ src/sys/dev/ic/com.c Sun Sep 1 04:58:15 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: com.c,v 1.313 2013/09/01 04:51:24 kiyohara Exp $ */ +/* $NetBSD: com.c,v 1.314 2013/09/01 04:58:15 kiyohara Exp $ */ /*- * Copyright (c) 1998, 1999, 2004, 2008 The NetBSD Foundation, Inc. @@ -66,7 +66,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: com.c,v 1.313 2013/09/01 04:51:24 kiyohara Exp $"); +__KERNEL_RCSID(0, "$NetBSD: com.c,v 1.314 2013/09/01 04:58:15 kiyohara Exp $"); #include "opt_com.h" #include "opt_ddb.h" @@ -374,9 +374,7 @@ com_attach_subr(struct com_softc *sc) { struct com_regs *regsp = &sc->sc_regs; struct tty *tp; -#ifdef COM_16650 u_int8_t lcr; -#endif const char *fifo_msg = NULL; prop_dictionary_t dict; bool is_console = true; @@ -480,6 +478,37 @@ com_attach_subr(struct com_softc *sc) #endif sc->sc_fifolen = 16; + /* + * TL16C750 can enable 64byte FIFO, only when DLAB + * is 1. However, some 16750 may always enable. For + * example, restrictions according to DLAB in a data + * sheet for SC16C750 were not described. + * Please enable 'options COM_16650', supposing you + * use SC16C750. Probably 32 bytes of FIFO and HW FLOW + * should become effective. + */ + uint8_t iir1, iir2; + const uint8_t fcr = FIFO_ENABLE | FIFO_TRIGGER_14; + + lcr = CSR_READ_1(regsp, COM_REG_LCR); + CSR_WRITE_1(regsp, COM_REG_LCR, lcr & ~LCR_DLAB); + CSR_WRITE_1(regsp, COM_REG_FIFO, fcr | FIFO_64B_ENABLE); + iir1 = CSR_READ_1(regsp, COM_REG_IIR); + CSR_WRITE_1(regsp, COM_REG_FIFO, fcr); + CSR_WRITE_1(regsp, COM_REG_LCR, lcr | LCR_DLAB); + CSR_WRITE_1(regsp, COM_REG_FIFO, fcr | FIFO_64B_ENABLE); + iir2 = CSR_READ_1(regsp, COM_REG_IIR); + + CSR_WRITE_1(regsp, COM_REG_LCR, lcr); + + if (!ISSET(iir1, IIR_64B_FIFO) && + ISSET(iir2, IIR_64B_FIFO)) { +/* It is TL16C750. */ +sc->sc_fifolen = 64; +SET(sc->sc_hwflags, COM_HW_FLOW); + } else +CSR_WRITE_1(regsp, COM_REG_FIFO, fcr); + #ifdef COM_16650 CSR_WRITE_1(regsp, COM_REG_LCR, lcr); if (sc->sc_fifolen == 0) @@ -488,6 +517,9 @@ com_attach_subr(struct com_softc *sc) fifo_msg = "st16650a, working fifo"; else #endif + if (sc->sc_fifolen == 64) +fifo_msg = "tl16c750, working fifo"; + else fifo_msg = "ns16550a, working fifo"; } else fifo_msg = "ns16550, broken fifo"; Index: src/sys/dev/ic/comreg.h diff -u src/sys/dev/ic/comreg.h:1.19 src/sys/dev/ic/comreg.h:1.20 --- src/sys/dev/ic/comreg.h:1.19 Sun Sep 1 04:51:24 2013 +++ src/sys/dev/ic/comreg.h Sun Sep 1 04:58:15 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: comreg.h,v 1.19 2013/09/01 04:51:24 kiyohara Exp $ */ +/* $NetBSD: comreg.h,v 1.20 2013/09/01 04:58:15 kiyohara Exp $ */ /*- * Copyright (c) 1991 The Regents of the University of California. @@ -63,6 +63,7 @@ #define IIR_TXRDY 0x2 /* Transmitter ready */ #define IIR_MLSC 0x0 /* Modem status */ #define IIR_NOPEND 0x1 /* No pending interrupts */ +#define IIR_64B_FIFO 0x20 /* 64byte FIFO Enabled (16750) */ #define IIR_FIFO_MASK 0xc0 /* set if FIFOs are enabled */ /* fifo control register */ @@ -70,6 +71,7 @@ #define FIFO_RCV_RST 0x02 /* Reset RX FIFO */ #define FIFO_XMT_RST 0x04 /* Reset TX FIFO */ #define FIFO_DMA_MODE 0x08 +#define FIFO_64B_ENABLE 0x20 /* 64byte FIFO Enable (16750) */ #define FIFO_TRIGGER_1 0x00 /* Trigger RXRDY intr on 1 character */ #define FIFO_TRIGGER_4 0x40 /* ibid 4 */ #define FIFO_TRIGGER_8 0x80 /* ibid 8 */
CVS commit: src/sys/dev
Module Name:src Committed By: kiyohara Date: Sun Sep 1 04:51:24 UTC 2013 Modified Files: src/sys/dev/ic: com.c comreg.h comvar.h ns16550reg.h src/sys/dev/marvell: com_mv.c Log Message: Move the Marvell extension to com_mv.c. To generate a diff of this commit: cvs rdiff -u -r1.312 -r1.313 src/sys/dev/ic/com.c cvs rdiff -u -r1.18 -r1.19 src/sys/dev/ic/comreg.h cvs rdiff -u -r1.75 -r1.76 src/sys/dev/ic/comvar.h cvs rdiff -u -r1.8 -r1.9 src/sys/dev/ic/ns16550reg.h cvs rdiff -u -r1.5 -r1.6 src/sys/dev/marvell/com_mv.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/dev/ic/com.c diff -u src/sys/dev/ic/com.c:1.312 src/sys/dev/ic/com.c:1.313 --- src/sys/dev/ic/com.c:1.312 Sat Jul 27 06:54:35 2013 +++ src/sys/dev/ic/com.c Sun Sep 1 04:51:24 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: com.c,v 1.312 2013/07/27 06:54:35 kiyohara Exp $ */ +/* $NetBSD: com.c,v 1.313 2013/09/01 04:51:24 kiyohara Exp $ */ /*- * Copyright (c) 1998, 1999, 2004, 2008 The NetBSD Foundation, Inc. @@ -66,7 +66,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: com.c,v 1.312 2013/07/27 06:54:35 kiyohara Exp $"); +__KERNEL_RCSID(0, "$NetBSD: com.c,v 1.313 2013/09/01 04:51:24 kiyohara Exp $"); #include "opt_com.h" #include "opt_ddb.h" @@ -246,17 +246,7 @@ void com_kgdb_putc(void *, int); #define COM_REG_16550 { \ com_data, com_data, com_dlbl, com_dlbh, com_ier, com_iir, com_fifo, \ com_efr, com_lcr, com_mcr, com_lsr, com_msr } -/* 16750-specific register set, additional UART status register */ -#define COM_REG_16750 { \ - com_data, com_data, com_dlbl, com_dlbh, com_ier, com_iir, com_fifo, \ - com_efr, com_lcr, com_mcr, com_lsr, com_msr, 0, 0, 0, 0, 0, 0, 0, 0, \ - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, com_usr } - -#ifdef COM_16750 -const bus_size_t com_std_map[32] = COM_REG_16750; -#else const bus_size_t com_std_map[16] = COM_REG_16550; -#endif /* COM_16750 */ #endif /* COM_REGMAP */ #define COMUNIT_MASK 0x7 @@ -416,10 +406,7 @@ com_attach_subr(struct com_softc *sc) (u_long)comcons_info.regs.cr_iobase); } -#ifdef COM_16750 - /* Use in comintr(). */ sc->sc_lcr = cflag2lcr(comcons_info.cflag); -#endif /* Make sure the console is always "hardwired". */ delay(1); /* wait for output to finish */ @@ -1479,19 +1466,19 @@ com_iflush(struct com_softc *sc) aprint_error_dev(sc->sc_dev, "com_iflush timeout %02x\n", reg); #endif -#ifdef COM_16750 - uint8_t fifo; - /* - * Reset all Rx/Tx FIFO, preserve current FIFO length. - * This should prevent triggering busy interrupt while - * manipulating divisors. - */ - fifo = CSR_READ_1(regsp, COM_REG_FIFO) & (FIFO_TRIGGER_1 | - FIFO_TRIGGER_4 | FIFO_TRIGGER_8 | FIFO_TRIGGER_14); - CSR_WRITE_1(regsp, COM_REG_FIFO, fifo | FIFO_ENABLE | FIFO_RCV_RST | - FIFO_XMT_RST); - delay(100); -#endif + if (sc->sc_type == COM_TYPE_ARMADAXP) { + uint8_t fifo; + /* + * Reset all Rx/Tx FIFO, preserve current FIFO length. + * This should prevent triggering busy interrupt while + * manipulating divisors. + */ + fifo = CSR_READ_1(regsp, COM_REG_FIFO) & (FIFO_TRIGGER_1 | + FIFO_TRIGGER_4 | FIFO_TRIGGER_8 | FIFO_TRIGGER_14); + CSR_WRITE_1(regsp, COM_REG_FIFO, + fifo | FIFO_ENABLE | FIFO_RCV_RST | FIFO_XMT_RST); + delay(100); + } } void @@ -1919,26 +1906,6 @@ comintr(void *arg) mutex_spin_enter(&sc->sc_lock); iir = CSR_READ_1(regsp, COM_REG_IIR); - /* Handle ns16750-specific busy interrupt. */ -#ifdef COM_16750 - int timeout; - if ((iir & IIR_BUSY) == IIR_BUSY) { - for (timeout = 1; - (CSR_READ_1(regsp, COM_REG_USR) & 0x1) != 0; timeout--) - if (timeout <= 0) { -aprint_error_dev(sc->sc_dev, -"timeout while waiting for BUSY interrupt " -"acknowledge\n"); -mutex_spin_exit(&sc->sc_lock); -return (0); - } - - CSR_WRITE_1(regsp, COM_REG_LCR, sc->sc_lcr); - iir = CSR_READ_1(regsp, COM_REG_IIR); - } -#endif /* COM_16750 */ - - if (ISSET(iir, IIR_NOPEND)) { mutex_spin_exit(&sc->sc_lock); return (0); Index: src/sys/dev/ic/comreg.h diff -u src/sys/dev/ic/comreg.h:1.18 src/sys/dev/ic/comreg.h:1.19 --- src/sys/dev/ic/comreg.h:1.18 Sat Apr 20 11:52:41 2013 +++ src/sys/dev/ic/comreg.h Sun Sep 1 04:51:24 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: comreg.h,v 1.18 2013/04/20 11:52:41 rkujawa Exp $ */ +/* $NetBSD: comreg.h,v 1.19 2013/09/01 04:51:24 kiyohara Exp $ */ /*- * Copyright (c) 1991 The Regents of the University of California. @@ -56,15 +56,14 @@ /* interrupt identification register */ #define IIR_IMASK 0xf #define IIR_RXTOUT 0xc +/* ARMADAXP's ns16550 ports have extra value in this register */ +#define IIR_BUSY 0x7 /* Busy indicator */ #define IIR_RLS 0x6 /* Line status change */ #define IIR_RXRDY 0x4 /* Receiver ready */ #define IIR_TXRDY 0x2 /* Transmitter ready */ #define IIR_MLSC 0x0 /* Modem status */ #define IIR_NOPEND 0x1 /* No pending interrupts */ #define IIR_
CVS commit: src/sys/arch/powerpc/oea
Module Name:src Committed By: matt Date: Sat Aug 31 15:01:08 UTC 2013 Modified Files: src/sys/arch/powerpc/oea: oea_machdep.c Log Message: convert rfid to rfi in exception handlers. To generate a diff of this commit: cvs rdiff -u -r1.66 -r1.67 src/sys/arch/powerpc/oea/oea_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/oea/oea_machdep.c diff -u src/sys/arch/powerpc/oea/oea_machdep.c:1.66 src/sys/arch/powerpc/oea/oea_machdep.c:1.67 --- src/sys/arch/powerpc/oea/oea_machdep.c:1.66 Sat Aug 31 07:33:15 2013 +++ src/sys/arch/powerpc/oea/oea_machdep.c Sat Aug 31 15:01:08 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: oea_machdep.c,v 1.66 2013/08/31 07:33:15 matt Exp $ */ +/* $NetBSD: oea_machdep.c,v 1.67 2013/08/31 15:01:08 matt Exp $ */ /* * Copyright (C) 2002 Matt Thomas @@ -33,7 +33,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: oea_machdep.c,v 1.66 2013/08/31 07:33:15 matt Exp $"); +__KERNEL_RCSID(0, "$NetBSD: oea_machdep.c,v 1.67 2013/08/31 15:01:08 matt Exp $"); #include "opt_ppcarch.h" #include "opt_compat_netbsd.h" @@ -386,6 +386,8 @@ oea_init(void (*handler)(void)) *ip++ = NOP; *ip++ = NOP; ip[0] = NOP; + } else if (*ip == RFID) { +*ip = RFI; } } @@ -905,6 +907,8 @@ oea_install_extint(void (*handler)(void) *ip++ = NOP; *ip++ = NOP; ip[0] = NOP; + } else if (*ip == RFID) { +*ip = RFI; } } }
CVS commit: src/sys/arch/x86/x86
Module Name:src Committed By: jmcneill Date: Sat Aug 31 12:26:56 UTC 2013 Modified Files: src/sys/arch/x86/x86: x86_machdep.c Log Message: md_root_setconf also depends on option MEMORY_DISK_DYNAMIC To generate a diff of this commit: cvs rdiff -u -r1.59 -r1.60 src/sys/arch/x86/x86/x86_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/x86/x86/x86_machdep.c diff -u src/sys/arch/x86/x86/x86_machdep.c:1.59 src/sys/arch/x86/x86/x86_machdep.c:1.60 --- src/sys/arch/x86/x86/x86_machdep.c:1.59 Fri Aug 30 16:42:17 2013 +++ src/sys/arch/x86/x86/x86_machdep.c Sat Aug 31 12:26:56 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: x86_machdep.c,v 1.59 2013/08/30 16:42:17 jmcneill Exp $ */ +/* $NetBSD: x86_machdep.c,v 1.60 2013/08/31 12:26:56 jmcneill Exp $ */ /*- * Copyright (c) 2002, 2006, 2007 YAMAMOTO Takashi, @@ -31,7 +31,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: x86_machdep.c,v 1.59 2013/08/30 16:42:17 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: x86_machdep.c,v 1.60 2013/08/31 12:26:56 jmcneill Exp $"); #include "opt_modular.h" #include "opt_physmem.h" @@ -74,7 +74,7 @@ __KERNEL_RCSID(0, "$NetBSD: x86_machdep. #endif #include "opt_md.h" -#ifdef MEMORY_DISK_HOOKS +#if defined(MEMORY_DISK_HOOKS) && defined(MEMORY_DISK_DYNAMIC) #include #endif @@ -191,7 +191,7 @@ module_init_md(void) aprint_debug("File-system image path=%s len=%d pa=%x\n", bi->path, bi->len, bi->base); KASSERT(trunc_page(bi->base) == bi->base); -#ifdef MEMORY_DISK_HOOKS +#if defined(MEMORY_DISK_HOOKS) && defined(MEMORY_DISK_DYNAMIC) md_root_setconf((void *)((uintptr_t)bi->base + KERNBASE), bi->len); #endif
CVS commit: src/distrib/sgimips/instkernel
Module Name:src Committed By: he Date: Sat Aug 31 10:42:18 UTC 2013 Modified Files: src/distrib/sgimips/instkernel: Makefile Log Message: Bump the image size so that the contents fits again. Kernel (at least INSTALL32_IP3x) has big enough area already. To generate a diff of this commit: cvs rdiff -u -r1.10 -r1.11 src/distrib/sgimips/instkernel/Makefile Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/distrib/sgimips/instkernel/Makefile diff -u src/distrib/sgimips/instkernel/Makefile:1.10 src/distrib/sgimips/instkernel/Makefile:1.11 --- src/distrib/sgimips/instkernel/Makefile:1.10 Sat Feb 4 22:27:25 2012 +++ src/distrib/sgimips/instkernel/Makefile Sat Aug 31 10:42:18 2013 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.10 2012/02/04 22:27:25 he Exp $ +# $NetBSD: Makefile,v 1.11 2013/08/31 10:42:18 he Exp $ .include .include "${NETBSDSRCDIR}/distrib/common/Makefile.distrib" @@ -16,7 +16,7 @@ LISTS= ${.CURDIR}/list64 .endif IMAGE= diskimage -IMAGESIZE= 3800k +IMAGESIZE= 4000k MTREECONF= ${DISTRIBDIR}/common/mtree.dot IMAGEENDIAN= be
CVS commit: src/sys/arch/powerpc/oea
Module Name:src Committed By: matt Date: Sat Aug 31 07:33:15 UTC 2013 Modified Files: src/sys/arch/powerpc/oea: oea_machdep.c ofwoea_machdep.c Log Message: Move the pmap_setup to the start oea_init (no non-OFW ports can use it). If PPC_OEA64_BRIDGE is defined, add code so that when OEACPU_64_BRIDGE is not present, it replaces the rfid with rfi and mfmsr/rldicl/mtmsrd sequence with NOPs. This allows plain OEA kernels to work. (tested on PMPPC with PPC_OEA64_BRIDGE option added). To generate a diff of this commit: cvs rdiff -u -r1.65 -r1.66 src/sys/arch/powerpc/oea/oea_machdep.c cvs rdiff -u -r1.33 -r1.34 src/sys/arch/powerpc/oea/ofwoea_machdep.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/sys/arch/powerpc/oea/oea_machdep.c diff -u src/sys/arch/powerpc/oea/oea_machdep.c:1.65 src/sys/arch/powerpc/oea/oea_machdep.c:1.66 --- src/sys/arch/powerpc/oea/oea_machdep.c:1.65 Thu Jul 4 22:59:27 2013 +++ src/sys/arch/powerpc/oea/oea_machdep.c Sat Aug 31 07:33:15 2013 @@ -1,4 +1,4 @@ -/* $NetBSD: oea_machdep.c,v 1.65 2013/07/04 22:59:27 joerg Exp $ */ +/* $NetBSD: oea_machdep.c,v 1.66 2013/08/31 07:33:15 matt Exp $ */ /* * Copyright (C) 2002 Matt Thomas @@ -33,7 +33,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: oea_machdep.c,v 1.65 2013/07/04 22:59:27 joerg Exp $"); +__KERNEL_RCSID(0, "$NetBSD: oea_machdep.c,v 1.66 2013/08/31 07:33:15 matt Exp $"); #include "opt_ppcarch.h" #include "opt_compat_netbsd.h" @@ -147,6 +147,14 @@ oea_init(void (*handler)(void)) #endif KASSERT(mfspr(SPR_SPRG0) == (uintptr_t)ci); +#if defined (PPC_OEA64_BRIDGE) && defined (PPC_OEA) + if (oeacpufeat & OEACPU_64_BRIDGE) + pmap_setup64bridge(); + else + pmap_setup32(); +#endif + + cpuvers = mfpvr() >> 16; /* @@ -298,6 +306,16 @@ oea_init(void (*handler)(void)) #define B 0x4800 #define TLBSYNC 0x7c00046c #define SYNC 0x7c0004ac +#ifdef PPC_OEA64_BRIDGE +#define MFMSR_MASK 0xfc1f +#define MFMSR 0x7ca6 +#define MTMSRD_MASK 0xfc1e +#define MTMSRD 0x7c000164 +#define RLDICL_MASK 0xfc1c +#define RLDICL 0x7800 +#define RFID 0x4c24 +#define RFI 0x4c64 +#endif #ifdef ALTIVEC #define MFSPR_VRSAVE 0x7c0042a6 @@ -320,9 +338,7 @@ oea_init(void (*handler)(void)) if (scratch & PSL_VEC) { cpu_altivec = 1; } else { - int *ip = trapstart; - - for (; ip < trapend; ip++) { + for (int *ip = trapstart; ip < trapend; ip++) { if ((ip[0] & MxSPR_MASK) == MFSPR_VRSAVE) { ip[0] = NOP; /* mfspr */ ip[1] = NOP; /* stw */ @@ -343,9 +359,7 @@ oea_init(void (*handler)(void)) * sequences where we zap/restore BAT registers on kernel exit/entry. */ if (cpuvers != MPC601) { - int *ip = trapstart; - - for (; ip < trapend; ip++) { + for (int *ip = trapstart; ip < trapend; ip++) { if ((ip[0] & MxSPR_MASK) == MFSPR_MQ) { ip[0] = NOP; /* mfspr */ ip[1] = NOP; /* stw */ @@ -361,6 +375,37 @@ oea_init(void (*handler)(void)) } } +#ifdef PPC_OEA64_BRIDGE + if ((oeacpufeat & OEACPU_64_BRIDGE) == 0) { + for (int *ip = (int *)exc_base; + (uintptr_t)ip <= exc_base + EXC_LAST; + ip++) { + if ((ip[0] & MFMSR_MASK) == MFMSR + && (ip[1] & RLDICL_MASK) == RLDICL + && (ip[2] & MTMSRD_MASK) == MTMSRD) { +*ip++ = NOP; +*ip++ = NOP; +ip[0] = NOP; + } + } + + /* + * Now replace each rfid instruction with a rfi instruction. + */ + for (int *ip = trapstart; ip < trapend; ip++) { + if ((ip[0] & MFMSR_MASK) == MFMSR + && (ip[1] & RLDICL_MASK) == RLDICL + && (ip[2] & MTMSRD_MASK) == MTMSRD) { +*ip++ = NOP; +*ip++ = NOP; +ip[0] = NOP; + } else if (*ip == RFID) { +*ip = RFI; + } + } + } +#endif /* PPC_OEA64_BRIDGE */ + /* * Sync the changed instructions. */ @@ -381,10 +426,11 @@ oea_init(void (*handler)(void)) extern int kernel_text[], etext[]; int *ip; - for (ip = kernel_text; ip < etext; ip++) + for (ip = kernel_text; ip < etext; ip++) { if (*ip == TLBSYNC) { *ip = SYNC; __syncicache(ip, sizeof(*ip)); + } } } #endif /* PPC_OEA601 */ @@ -830,6 +876,11 @@ oea_install_extint(void (*handler)(void) extern int extint[], extsize[]; extern int extint_call[]; uintptr_t offset = (uintptr_t)handler - (uintptr_t)extint_call; +#ifdef PPC_HIGH_VEC + const uintptr_t exc_exi_base = EXC_HIGHVEC + EXC_EXI; +#else + const uintptr_t exc_exi_base = EXC_EXI; +#endif int omsr, msr; #ifdef DIAGNOSTIC @@ -842,13 +893,24 @@ oea_install_extint(void (*handler)(void) : "K" ((u_short)~PSL_EE)); extint_call[0] = (extint_call[0] & 0xfc03) | offset; __syncicache((void *)extint_call, sizeof extint_call[0]); -#ifdef PPC_HIGH_VEC - memcpy((void *)(EXC_HIGHVEC + EXC_EXI), extint, (size_t)extsize); - __syncicache((void *)(EXC_HIGHVEC + EXC_EXI), (int)extsize); -#else - memcpy((void *)EXC_EXI, extint, (size_t)extsize); - __syncicache((void *)EXC_E