Subversion Repositories HelenOS-historic

Rev

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

Rev 197 Rev 200
Line 30... Line 30...
30
#define __amd64_ASM_H__
30
#define __amd64_ASM_H__
31
 
31
 
32
#include <arch/types.h>
32
#include <arch/types.h>
33
#include <config.h>
33
#include <config.h>
34
 
34
 
-
 
35
 
35
void asm_delay_loop(__u32 t);
36
void asm_delay_loop(__u32 t);
36
 
37
 
37
/* TODO: implement the real stuff */
38
/* TODO: implement the real stuff */
38
static inline __address get_stack_base(void)
39
static inline __address get_stack_base(void)
39
{
40
{
40
    return NULL;
41
    return NULL;
41
}
42
}
42
 
43
 
43
static inline void cpu_sleep(void) { __asm__("hlt"); };
44
static inline void cpu_sleep(void) { __asm__("hlt"); };
44
 
45
 
-
 
46
 
-
 
47
static inline __u8 inb(__u16 port)
-
 
48
{
-
 
49
    __u8 out;
-
 
50
 
-
 
51
    asm (
-
 
52
        "mov %0, %%dx;"
-
 
53
        "inb %%dx,%%al;"
-
 
54
        "mov %%al, %1;"
-
 
55
        :"=m"(out)
-
 
56
        :"m"(port)
-
 
57
        :"dx","al"
-
 
58
        );
-
 
59
    return out;
-
 
60
}
-
 
61
 
-
 
62
static inline __u8 outb(__u16 port,__u8 b)
-
 
63
{
-
 
64
    asm (
-
 
65
        "mov %0,%%dx;"
-
 
66
        "mov %1,%%al;"
-
 
67
        "outb %%al,%%dx;"
-
 
68
        :
-
 
69
        :"m"( port), "m" (b)
-
 
70
        :"dx","al"
-
 
71
        );
-
 
72
}
-
 
73
 
-
 
74
/** Set priority level low
-
 
75
 *
-
 
76
 * Enable interrupts and return previous
-
 
77
 * value of EFLAGS.
-
 
78
 */
-
 
79
static inline pri_t cpu_priority_low(void) {
-
 
80
    pri_t v;
-
 
81
    __asm__ volatile (
-
 
82
        "pushfq\n"
-
 
83
        "popq %0\n"
-
 
84
        "sti\n"
-
 
85
        : "=r" (v)
-
 
86
    );
-
 
87
    return v;
-
 
88
}
-
 
89
 
-
 
90
/** Set priority level high
-
 
91
 *
-
 
92
 * Disable interrupts and return previous
-
 
93
 * value of EFLAGS.
-
 
94
 */
-
 
95
static inline pri_t cpu_priority_high(void) {
-
 
96
    pri_t v;
-
 
97
    __asm__ volatile (
-
 
98
        "pushfq\n"
-
 
99
        "popq %0\n"
-
 
100
        "cli\n"
-
 
101
        : "=r" (v)
-
 
102
        );
-
 
103
    return v;
-
 
104
}
-
 
105
 
-
 
106
/** Restore priority level
-
 
107
 *
-
 
108
 * Restore EFLAGS.
-
 
109
 */
-
 
110
static inline void cpu_priority_restore(pri_t pri) {
-
 
111
    __asm__ volatile (
-
 
112
        "pushq %0\n"
-
 
113
        "popfq\n"
-
 
114
        : : "r" (pri)
-
 
115
        );
-
 
116
}
-
 
117
 
-
 
118
 
45
#endif
119
#endif