Rev 630 | Rev 663 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 630 | Rev 634 | ||
---|---|---|---|
Line 25... | Line 25... | ||
25 | # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
25 | # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
26 | # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
26 | # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
27 | # |
27 | # |
28 | 28 | ||
29 | /** |
29 | /** |
30 | * This file contains two trap tables. First, trap_table, is the one |
30 | * This file contains two trap tables. |
- | 31 | * First, trap_table, is the one wich contains handlers implemented by |
|
- | 32 | * kernel. During initialization, these handlers are copied out to |
|
- | 33 | * the second trap table, trap_table_save, and the first table is |
|
31 | * to wich kernel copies OFW's own trap table and patches it with |
34 | * overwritten with copy of OFW's own trap table. The copy is then patched |
- | 35 | * from the trap_table_save. |
|
- | 36 | * |
|
32 | * kernel-provided handlers from the second trap table, trap_table_kernel. |
37 | * This arrangement is beneficial because kernel handlers stay on their |
- | 38 | * link-time addresses which is good for debugging. |
|
33 | */ |
39 | */ |
34 | 40 | ||
35 | .text |
41 | .text |
36 | 42 | ||
37 | #include <arch/trap/trap_table.h> |
43 | #include <arch/trap/trap_table.h> |
38 | #include <arch/trap/regwin.h> |
44 | #include <arch/trap/regwin.h> |
39 | 45 | ||
40 | #define TABLE_SIZE TRAP_TABLE_SIZE |
46 | #define TABLE_SIZE TRAP_TABLE_SIZE |
41 | #define ENTRY_SIZE TRAP_TABLE_ENTRY_SIZE |
47 | #define ENTRY_SIZE TRAP_TABLE_ENTRY_SIZE |
42 | 48 | ||
43 | - | ||
44 | /* |
49 | /* |
45 | * Trap table for copy of OFW's own trap table. |
50 | * Kernel trap table. |
46 | */ |
51 | */ |
47 | .align TABLE_SIZE |
52 | .align TABLE_SIZE |
48 | .global trap_table |
53 | .global trap_table |
49 | trap_table: |
54 | trap_table: |
50 | .space TABLE_SIZE, 0 |
- | |
51 | - | ||
52 | - | ||
53 | /* |
- | |
54 | * Kernel-provided trap handlers. |
- | |
55 | */ |
- | |
56 | .global trap_table_kernel |
- | |
57 | trap_table_kernel: |
- | |
58 | 55 | ||
59 | /* TT = 0x24, TL = 0 *, clean_window handler */ |
56 | /* TT = 0x24, TL = 0 *, clean_window handler */ |
60 | .org trap_table_kernel + TT_CLEAN_WINDOW*ENTRY_SIZE |
57 | .org trap_table + TT_CLEAN_WINDOW*ENTRY_SIZE |
61 | .global clean_window_handler |
58 | .global clean_window_handler |
62 | clean_window_handler: |
59 | clean_window_handler: |
63 | CLEAN_WINDOW_HANDLER |
60 | CLEAN_WINDOW_HANDLER |
64 | 61 | ||
65 | /* TT = 0x80, TL = 0 *, spill_0_normal handler */ |
62 | /* TT = 0x80, TL = 0 *, spill_0_normal handler */ |
66 | .org trap_table_kernel + TT_SPILL_0_NORMAL*ENTRY_SIZE |
63 | .org trap_table + TT_SPILL_0_NORMAL*ENTRY_SIZE |
67 | .global spill_0_normal |
64 | .global spill_0_normal |
68 | spill_0_normal: |
65 | spill_0_normal: |
69 | SPILL_NORMAL_HANDLER |
66 | SPILL_NORMAL_HANDLER |
70 | 67 | ||
71 | /* TT = 0xc0, TL = 0 *, fill_0_normal handler */ |
68 | /* TT = 0xc0, TL = 0 *, fill_0_normal handler */ |
72 | .org trap_table_kernel + TT_FILL_0_NORMAL*ENTRY_SIZE |
69 | .org trap_table + TT_FILL_0_NORMAL*ENTRY_SIZE |
73 | fill_0_normal: |
70 | fill_0_normal: |
74 | FILL_NORMAL_HANDLER |
71 | FILL_NORMAL_HANDLER |
75 | 72 | ||
76 | /* |
73 | /* |
77 | * Software traps for TL=0. |
74 | * Software traps for TL=0. |
78 | */ |
75 | */ |
79 | .org trap_table_kernel + 256*ENTRY_SIZE |
76 | .org trap_table + 256*ENTRY_SIZE |
80 | tl_0_software_traps: |
77 | tl_0_software_traps: |
81 | 78 | ||
82 | /* Reserved area. */ |
79 | /* Reserved area. */ |
83 | .org trap_table_kernel + 384*ENTRY_SIZE |
80 | .org trap_table + 384*ENTRY_SIZE |
84 | .space 128*ENTRY_SIZE, 0 |
81 | .space 128*ENTRY_SIZE, 0 |
85 | 82 | ||
86 | /* |
83 | /* |
87 | * Hardware interrupts for TL>0. |
84 | * Hardware interrupts for TL>0. |
88 | */ |
85 | */ |
89 | .org trap_table_kernel + 512*ENTRY_SIZE |
86 | .org trap_table + 512*ENTRY_SIZE |
90 | tl_non_0_hardware_traps: |
87 | tl_non_0_hardware_traps: |
91 | 88 | ||
92 | /* |
89 | /* |
93 | * Register window spill/fill traps for TL>0. |
90 | * Register window spill/fill traps for TL>0. |
94 | */ |
91 | */ |
95 | .org trap_table_kernel + 640*ENTRY_SIZE |
92 | .org trap_table + 640*ENTRY_SIZE |
96 | tl_non_0_regwin_traps: |
93 | tl_non_0_regwin_traps: |
97 | 94 | ||
98 | /* |
95 | /* |
99 | * Software traps for TL>0. |
96 | * Software traps for TL>0. |
100 | */ |
97 | */ |
101 | .org trap_table_kernel + 768*ENTRY_SIZE |
98 | .org trap_table + 768*ENTRY_SIZE |
102 | tl_non_0_software_traps: |
99 | tl_non_0_software_traps: |
103 | 100 | ||
104 | /* Reserved area. */ |
101 | /* Reserved area. */ |
105 | .org trap_table_kernel + 896*ENTRY_SIZE |
102 | .org trap_table + 896*ENTRY_SIZE |
106 | .space 128*ENTRY_SIZE, 0 |
103 | .space 128*ENTRY_SIZE, 0 |
- | 104 | ||
- | 105 | ||
- | 106 | /* |
|
- | 107 | * Save trap table. |
|
- | 108 | */ |
|
- | 109 | .global trap_table_save |
|
- | 110 | trap_table_save: |
|
- | 111 | .space TABLE_SIZE, 0 |