Changeset c782434 in mainline


Ignore:
Timestamp:
2006-06-06T13:33:54Z (19 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
e269c53
Parents:
8333801
Message:

generalize ppc32 exception handling

Location:
arch/ppc32
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • arch/ppc32/include/interrupt.h

    r8333801 rc782434  
    3838#define INT_OFFSET  16
    3939
    40 #define int_register(it, name, handler) exc_register(((it)+INT_OFFSET),name,handler)
     40#define int_register(it, name, handler) exc_register(((it) + INT_OFFSET), name, handler)
    4141
    42 #define VECTOR_DECREMENTER 10
     42#define VECTOR_DATA_STORAGE 2
     43#define VECTOR_INSTRUCTION_STORAGE 3
     44#define VECTOR_EXTERNAL 4
     45#define VECTOR_DECREMENTER 8
    4346
    4447extern void start_decrementer(void);
  • arch/ppc32/include/mm/page.h

    r8333801 rc782434  
    144144} phte_t;
    145145
    146 extern void pht_refill(bool data, istate_t *istate);
     146extern void pht_refill(int n, istate_t *istate);
    147147extern void pht_init(void);
    148148
  • arch/ppc32/src/exception.S

    r8333801 rc782434  
    152152.global exc_system_reset
    153153exc_system_reset:
    154         b exc_system_reset
     154        CONTEXT_STORE
     155       
     156        lis r12, exc_dispatch@ha
     157        addi r12, r12, exc_dispatch@l
     158        mtsrr0 r12
     159       
     160        li r3, 0
     161        b jump_to_kernel
    155162
    156163.org 0x200
    157164.global exc_machine_check
    158165exc_machine_check:
    159         b exc_machine_check
     166        CONTEXT_STORE
     167       
     168        lis r12, exc_dispatch@ha
     169        addi r12, r12, exc_dispatch@l
     170        mtsrr0 r12
     171       
     172        li r3, 1
     173        b jump_to_kernel
    160174
    161175.org 0x300
     
    164178        CONTEXT_STORE
    165179       
    166         lis r12, pht_refill@ha
    167         addi r12, r12, pht_refill@l
    168         mtsrr0 r12
    169        
    170         li r3, 1
     180        lis r12, exc_dispatch@ha
     181        addi r12, r12, exc_dispatch@l
     182        mtsrr0 r12
     183       
     184        li r3, 2
    171185        b jump_to_kernel
    172186
     
    176190        CONTEXT_STORE
    177191       
    178         lis r12, pht_refill@ha
    179         addi r12, r12, pht_refill@l
    180         mtsrr0 r12
    181        
    182         li r3, 0
     192        lis r12, exc_dispatch@ha
     193        addi r12, r12, exc_dispatch@l
     194        mtsrr0 r12
     195       
     196        li r3, 3
    183197        b jump_to_kernel
    184198
     
    187201exc_external:
    188202        CONTEXT_STORE
    189 
    190         lis r12, extint_handler@ha
    191         addi r12, r12, extint_handler@l
    192         mtsrr0 r12
    193 
    194         li r3, 0
     203       
     204        lis r12, exc_dispatch@ha
     205        addi r12, r12, exc_dispatch@l
     206        mtsrr0 r12
     207       
     208        li r3, 4
    195209        b jump_to_kernel
    196210
     
    198212.global exc_alignment
    199213exc_alignment:
    200         b exc_alignment
     214        CONTEXT_STORE
     215       
     216        lis r12, exc_dispatch@ha
     217        addi r12, r12, exc_dispatch@l
     218        mtsrr0 r12
     219       
     220        li r3, 5
     221        b jump_to_kernel
    201222
    202223.org 0x700
    203224.global exc_program
    204225exc_program:
    205         b exc_program
     226        CONTEXT_STORE
     227       
     228        lis r12, exc_dispatch@ha
     229        addi r12, r12, exc_dispatch@l
     230        mtsrr0 r12
     231       
     232        li r3, 6
     233        b jump_to_kernel
    206234
    207235.org 0x800
    208236.global exc_fp_unavailable
    209237exc_fp_unavailable:
    210         b exc_fp_unavailable
     238        CONTEXT_STORE
     239       
     240        lis r12, exc_dispatch@ha
     241        addi r12, r12, exc_dispatch@l
     242        mtsrr0 r12
     243       
     244        li r3, 7
     245        b jump_to_kernel
    211246
    212247.org 0x900
     
    219254        mtsrr0 r12
    220255       
    221         li r3, 10
     256        li r3, 8
    222257        b jump_to_kernel
    223258
     
    225260.global exc_reserved0
    226261exc_reserved0:
    227         b exc_reserved0
     262        CONTEXT_STORE
     263       
     264        lis r12, exc_dispatch@ha
     265        addi r12, r12, exc_dispatch@l
     266        mtsrr0 r12
     267       
     268        li r3, 9
     269        b jump_to_kernel
    228270
    229271.org 0xb00
    230272.global exc_reserved1
    231273exc_reserved1:
    232         b exc_reserved1
     274        CONTEXT_STORE
     275       
     276        lis r12, exc_dispatch@ha
     277        addi r12, r12, exc_dispatch@l
     278        mtsrr0 r12
     279       
     280        li r3, 10
     281        b jump_to_kernel
    233282
    234283.org 0xc00
     
    242291.global exc_trace
    243292exc_trace:
    244         b exc_trace
     293        CONTEXT_STORE
     294       
     295        lis r12, exc_dispatch@ha
     296        addi r12, r12, exc_dispatch@l
     297        mtsrr0 r12
     298       
     299        li r3, 12
     300        b jump_to_kernel
  • arch/ppc32/src/interrupt.c

    r8333801 rc782434  
    4646
    4747
     48/** Handler of external interrupts */
     49static void exception_external(int n, istate_t *istate)
     50{
     51        int inum;
     52
     53        while ((inum = pic_get_pending()) != -1) {
     54                exc_dispatch(inum + INT_OFFSET, istate);
     55                pic_ack_interrupt(inum);
     56        }
     57}
     58
     59
    4860static void exception_decrementer(int n, istate_t *istate)
    4961{
     
    5668void interrupt_init(void)
    5769{
     70        exc_register(VECTOR_DATA_STORAGE, "data_storage", pht_refill);
     71        exc_register(VECTOR_INSTRUCTION_STORAGE, "instruction_storage", pht_refill);
     72        exc_register(VECTOR_EXTERNAL, "external", exception_external);
    5873        exc_register(VECTOR_DECREMENTER, "timer", exception_decrementer);
     74}
     75
     76
     77static void ipc_int(int n, istate_t *istate)
     78{
     79        ipc_irq_send_notif(n - INT_OFFSET);
    5980}
    6081
     
    6384void irq_ipc_bind_arch(__native irq)
    6485{
    65         panic("not implemented\n");
    66         /* TODO */
     86        int_register(irq, "ipc_int", ipc_int);
    6787}
    68 
    69 /** Handler of externul interrupts */
    70 void extint_handler(int n, istate_t *istate)
    71 {
    72         int inum;
    73 
    74         while ((inum = pic_get_pending()) != -1) {
    75                 exc_dispatch(inum+INT_OFFSET, istate);
    76                 pic_ack_interrupt(inum);
    77         }
    78 }
  • arch/ppc32/src/mm/page.c

    r8333801 rc782434  
    3131#include <arch/mm/frame.h>
    3232#include <arch/asm.h>
     33#include <arch/interrupt.h>
    3334#include <mm/frame.h>
    3435#include <mm/page.h>
     
    188189 *
    189190 */
    190 void pht_refill(bool data, istate_t *istate)
     191void pht_refill(int n, istate_t *istate)
    191192{
    192193        __address badvaddr;
     
    204205        }
    205206       
    206         if (data) {
     207        if (n == VECTOR_DATA_STORAGE) {
    207208                asm volatile (
    208209                        "mfdar %0\n"
Note: See TracChangeset for help on using the changeset viewer.