Subversion Repositories HelenOS

Rev

Rev 3022 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3022 Rev 4055
Line 34... Line 34...
34
 
34
 
35
#ifndef KERN_mips32_ASM_H_
35
#ifndef KERN_mips32_ASM_H_
36
#define KERN_mips32_ASM_H_
36
#define KERN_mips32_ASM_H_
37
 
37
 
38
#include <arch/types.h>
38
#include <arch/types.h>
-
 
39
#include <typedefs.h>
39
#include <config.h>
40
#include <config.h>
40
 
41
 
41
 
42
 
42
static inline void cpu_sleep(void)
43
static inline void cpu_sleep(void)
43
{
44
{
Line 53... Line 54...
53
 */
54
 */
54
static inline uintptr_t get_stack_base(void)
55
static inline uintptr_t get_stack_base(void)
55
{
56
{
56
    uintptr_t v;
57
    uintptr_t v;
57
   
58
   
-
 
59
    asm volatile (
-
 
60
        "and %0, $29, %1\n"
-
 
61
        : "=r" (v)
58
    asm volatile ("and %0, $29, %1\n" : "=r" (v) : "r" (~(STACK_SIZE-1)));
62
        : "r" (~(STACK_SIZE-1))
-
 
63
    );
59
   
64
   
60
    return v;
65
    return v;
61
}
66
}
62
 
67
 
63
extern void cpu_halt(void);
68
extern void cpu_halt(void);
64
extern void asm_delay_loop(uint32_t t);
69
extern void asm_delay_loop(uint32_t t);
65
extern void userspace_asm(uintptr_t ustack, uintptr_t uspace_uarg,
70
extern void userspace_asm(uintptr_t ustack, uintptr_t uspace_uarg,
66
              uintptr_t entry);
71
    uintptr_t entry);
67
 
72
 
68
extern ipl_t interrupts_disable(void);
73
extern ipl_t interrupts_disable(void);
69
extern ipl_t interrupts_enable(void);
74
extern ipl_t interrupts_enable(void);
70
extern void interrupts_restore(ipl_t ipl);
75
extern void interrupts_restore(ipl_t ipl);
71
extern ipl_t interrupts_read(void);
76
extern ipl_t interrupts_read(void);
-
 
77
extern void asm_delay_loop(uint32_t t);
-
 
78
 
-
 
79
static inline void pio_write_8(ioport8_t *port, uint8_t v)
-
 
80
{
-
 
81
    *port = v; 
-
 
82
}
-
 
83
 
-
 
84
static inline void pio_write_16(ioport16_t *port, uint16_t v)
-
 
85
{
-
 
86
    *port = v; 
-
 
87
}
-
 
88
 
-
 
89
static inline void pio_write_32(ioport32_t *port, uint32_t v)
-
 
90
{
-
 
91
    *port = v; 
-
 
92
}
-
 
93
 
-
 
94
static inline uint8_t pio_read_8(ioport8_t *port)
-
 
95
{
-
 
96
    return *port;
-
 
97
}
-
 
98
 
-
 
99
static inline uint16_t pio_read_16(ioport16_t *port)
-
 
100
{
-
 
101
    return *port;
-
 
102
}
-
 
103
 
-
 
104
static inline uint32_t pio_read_32(ioport32_t *port)
-
 
105
{
-
 
106
    return *port;
-
 
107
}
72
 
108
 
73
#endif
109
#endif
74
 
110
 
75
/** @}
111
/** @}
76
 */
112
 */