Subversion Repositories HelenOS

Rev

Rev 3386 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3386 Rev 4153
Line 34... Line 34...
34
 
34
 
35
#ifndef KERN_ppc32_EXCEPTION_H_
35
#ifndef KERN_ppc32_EXCEPTION_H_
36
#define KERN_ppc32_EXCEPTION_H_
36
#define KERN_ppc32_EXCEPTION_H_
37
 
37
 
38
#include <arch/types.h>
38
#include <arch/types.h>
-
 
39
#include <arch/regutils.h>
39
 
40
 
40
typedef struct {
41
typedef struct {
41
    uint32_t r0;
42
    uint32_t r0;
42
    uint32_t r2;
43
    uint32_t r2;
43
    uint32_t r3;
44
    uint32_t r3;
Line 72... Line 73...
72
    uint32_t pc;
73
    uint32_t pc;
73
    uint32_t srr1;
74
    uint32_t srr1;
74
    uint32_t lr;
75
    uint32_t lr;
75
    uint32_t ctr;
76
    uint32_t ctr;
76
    uint32_t xer;
77
    uint32_t xer;
-
 
78
    uint32_t dar;
77
    uint32_t r12;
79
    uint32_t r12;
78
    uint32_t sp;
80
    uint32_t sp;
79
} istate_t;
81
} istate_t;
80
 
82
 
81
static inline void istate_set_retaddr(istate_t *istate, uintptr_t retaddr)
83
static inline void istate_set_retaddr(istate_t *istate, uintptr_t retaddr)
82
{
84
{
83
    istate->pc = retaddr;
85
    istate->pc = retaddr;
84
}
86
}
85
 
87
 
86
/** Return true if exception happened while in userspace */
88
/** Return true if exception happened while in userspace */
87
#include <panic.h>
-
 
88
static inline int istate_from_uspace(istate_t *istate)
89
static inline int istate_from_uspace(istate_t *istate)
89
{
90
{
90
    panic("istate_from_uspace not yet implemented");
91
    /* true if privilege level PR (copied from MSR) == 1 */
91
    return 0;
92
    return (istate->srr1 & MSR_PR) != 0;
92
}
93
}
93
 
94
 
94
static inline unative_t istate_get_pc(istate_t *istate)
95
static inline unative_t istate_get_pc(istate_t *istate)
95
{
96
{
96
    return istate->pc;
97
    return istate->pc;