-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
yaml --- r: 267239 b: refs/heads/master c: bc4f4ac h: refs/heads/master i: 267237: 27ade91 267235: f240eaa 267231: 95a8aa8 v: v3
- Loading branch information
Greg Ungerer
committed
Oct 18, 2011
1 parent
4e2c628
commit 40dfc70
Showing
4 changed files
with
147 additions
and
117 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,2 @@ | ||
--- | ||
refs/heads/master: 61619b12078dc8b85a3d4cbfa16f650daa341bd1 | ||
refs/heads/master: bc4f4ac2f09a0681b4bd10e698e7f0c6e5137ca0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,145 @@ | ||
/* | ||
* vectors.c | ||
* | ||
* Copyright (C) 1993, 1994 by Hamish Macdonald | ||
* | ||
* 68040 fixes by Michael Rausch | ||
* 68040 fixes by Martin Apel | ||
* 68040 fixes and writeback by Richard Zidlicky | ||
* 68060 fixes by Roman Hodek | ||
* 68060 fixes by Jesper Skov | ||
* | ||
* This file is subject to the terms and conditions of the GNU General Public | ||
* License. See the file COPYING in the main directory of this archive | ||
* for more details. | ||
*/ | ||
|
||
/* | ||
* Sets up all exception vectors | ||
*/ | ||
#include <linux/sched.h> | ||
#include <linux/kernel.h> | ||
#include <linux/linkage.h> | ||
#include <linux/init.h> | ||
#include <linux/kallsyms.h> | ||
|
||
#include <asm/setup.h> | ||
#include <asm/fpu.h> | ||
#include <asm/system.h> | ||
#include <asm/traps.h> | ||
|
||
/* assembler routines */ | ||
asmlinkage void system_call(void); | ||
asmlinkage void buserr(void); | ||
asmlinkage void trap(void); | ||
asmlinkage void nmihandler(void); | ||
#ifdef CONFIG_M68KFPU_EMU | ||
asmlinkage void fpu_emu(void); | ||
#endif | ||
|
||
e_vector vectors[256]; | ||
|
||
/* nmi handler for the Amiga */ | ||
asm(".text\n" | ||
__ALIGN_STR "\n" | ||
"nmihandler: rte"); | ||
|
||
/* | ||
* this must be called very early as the kernel might | ||
* use some instruction that are emulated on the 060 | ||
* and so we're prepared for early probe attempts (e.g. nf_init). | ||
*/ | ||
void __init base_trap_init(void) | ||
{ | ||
if (MACH_IS_SUN3X) { | ||
extern e_vector *sun3x_prom_vbr; | ||
|
||
__asm__ volatile ("movec %%vbr, %0" : "=r" (sun3x_prom_vbr)); | ||
} | ||
|
||
/* setup the exception vector table */ | ||
__asm__ volatile ("movec %0,%%vbr" : : "r" ((void*)vectors)); | ||
|
||
if (CPU_IS_060) { | ||
/* set up ISP entry points */ | ||
asmlinkage void unimp_vec(void) asm ("_060_isp_unimp"); | ||
|
||
vectors[VEC_UNIMPII] = unimp_vec; | ||
} | ||
|
||
vectors[VEC_BUSERR] = buserr; | ||
vectors[VEC_ILLEGAL] = trap; | ||
vectors[VEC_SYS] = system_call; | ||
} | ||
|
||
void __init trap_init (void) | ||
{ | ||
int i; | ||
|
||
for (i = VEC_SPUR; i <= VEC_INT7; i++) | ||
vectors[i] = bad_inthandler; | ||
|
||
for (i = 0; i < VEC_USER; i++) | ||
if (!vectors[i]) | ||
vectors[i] = trap; | ||
|
||
for (i = VEC_USER; i < 256; i++) | ||
vectors[i] = bad_inthandler; | ||
|
||
#ifdef CONFIG_M68KFPU_EMU | ||
if (FPU_IS_EMU) | ||
vectors[VEC_LINE11] = fpu_emu; | ||
#endif | ||
|
||
if (CPU_IS_040 && !FPU_IS_EMU) { | ||
/* set up FPSP entry points */ | ||
asmlinkage void dz_vec(void) asm ("dz"); | ||
asmlinkage void inex_vec(void) asm ("inex"); | ||
asmlinkage void ovfl_vec(void) asm ("ovfl"); | ||
asmlinkage void unfl_vec(void) asm ("unfl"); | ||
asmlinkage void snan_vec(void) asm ("snan"); | ||
asmlinkage void operr_vec(void) asm ("operr"); | ||
asmlinkage void bsun_vec(void) asm ("bsun"); | ||
asmlinkage void fline_vec(void) asm ("fline"); | ||
asmlinkage void unsupp_vec(void) asm ("unsupp"); | ||
|
||
vectors[VEC_FPDIVZ] = dz_vec; | ||
vectors[VEC_FPIR] = inex_vec; | ||
vectors[VEC_FPOVER] = ovfl_vec; | ||
vectors[VEC_FPUNDER] = unfl_vec; | ||
vectors[VEC_FPNAN] = snan_vec; | ||
vectors[VEC_FPOE] = operr_vec; | ||
vectors[VEC_FPBRUC] = bsun_vec; | ||
vectors[VEC_LINE11] = fline_vec; | ||
vectors[VEC_FPUNSUP] = unsupp_vec; | ||
} | ||
|
||
if (CPU_IS_060 && !FPU_IS_EMU) { | ||
/* set up IFPSP entry points */ | ||
asmlinkage void snan_vec6(void) asm ("_060_fpsp_snan"); | ||
asmlinkage void operr_vec6(void) asm ("_060_fpsp_operr"); | ||
asmlinkage void ovfl_vec6(void) asm ("_060_fpsp_ovfl"); | ||
asmlinkage void unfl_vec6(void) asm ("_060_fpsp_unfl"); | ||
asmlinkage void dz_vec6(void) asm ("_060_fpsp_dz"); | ||
asmlinkage void inex_vec6(void) asm ("_060_fpsp_inex"); | ||
asmlinkage void fline_vec6(void) asm ("_060_fpsp_fline"); | ||
asmlinkage void unsupp_vec6(void) asm ("_060_fpsp_unsupp"); | ||
asmlinkage void effadd_vec6(void) asm ("_060_fpsp_effadd"); | ||
|
||
vectors[VEC_FPNAN] = snan_vec6; | ||
vectors[VEC_FPOE] = operr_vec6; | ||
vectors[VEC_FPOVER] = ovfl_vec6; | ||
vectors[VEC_FPUNDER] = unfl_vec6; | ||
vectors[VEC_FPDIVZ] = dz_vec6; | ||
vectors[VEC_FPIR] = inex_vec6; | ||
vectors[VEC_LINE11] = fline_vec6; | ||
vectors[VEC_FPUNSUP] = unsupp_vec6; | ||
vectors[VEC_UNIMPEA] = effadd_vec6; | ||
} | ||
|
||
/* if running on an amiga, make the NMI interrupt do nothing */ | ||
if (MACH_IS_AMIGA) { | ||
vectors[VEC_INT7] = nmihandler; | ||
} | ||
} | ||
|