Subversion Repositories HelenOS

Rev

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

Rev 2329 Rev 2356
Line 1... Line 1...
1
/*
1
/*
2
 * Copyright (c) 2003-2004 Jakub Jermar
2
 * Copyright (c) 2007 Michal Kebrt
3
 * All rights reserved.
3
 * All rights reserved.
4
 *
4
 *
5
 * Redistribution and use in source and binary forms, with or without
5
 * Redistribution and use in source and binary forms, with or without
6
 * modification, are permitted provided that the following conditions
6
 * modification, are permitted provided that the following conditions
7
 * are met:
7
 * are met:
Line 27... Line 27...
27
 */
27
 */
28
 
28
 
29
/** @addtogroup arm32  
29
/** @addtogroup arm32  
30
 * @{
30
 * @{
31
 */
31
 */
32
/** @file
32
/** @file
-
 
33
 *  @brief Declarations of functions implemented in assembly.
33
 */
34
 */
34
 
35
 
35
#ifndef KERN_arm32_ASM_H_
36
#ifndef KERN_arm32_ASM_H_
36
#define KERN_arm32_ASM_H_
37
#define KERN_arm32_ASM_H_
37
 
38
 
38
#include <arch/types.h>
39
#include <arch/types.h>
39
#include <arch/stack.h>
40
#include <arch/stack.h>
40
#include <config.h>
41
#include <config.h>
-
 
42
#include <arch/interrupt.h>
41
 
43
 
42
 
-
 
-
 
44
/** No such instruction on ARM to sleep CPU. */
43
static inline void cpu_sleep(void)
45
static inline void cpu_sleep(void)
44
{
46
{
45
    // not implemented on gxemul
-
 
46
}
47
}
47
 
48
 
48
 
49
 
49
/** Return base address of current stack
50
/** Return base address of current stack
50
 *
51
 *
Line 53... Line 54...
53
 * The stack must start on page boundary.
54
 * The stack must start on page boundary.
54
 */
55
 */
55
static inline uintptr_t get_stack_base(void)
56
static inline uintptr_t get_stack_base(void)
56
{
57
{
57
    uintptr_t v;
58
    uintptr_t v;
-
 
59
    asm volatile (
-
 
60
        "and %0, sp, %1\n"
-
 
61
        : "=r" (v)
58
    asm volatile ("and %0, sp, %1\n" : "=r" (v) : "r" (~(STACK_SIZE-1)));
62
        : "r" (~(STACK_SIZE-1))
-
 
63
    );
59
    return v;
64
    return v;
60
}
65
}
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, uintptr_t entry);
70
extern void userspace_asm(uintptr_t ustack, uintptr_t uspace_uarg, uintptr_t entry);
66
 
71
 
67
extern ipl_t interrupts_disable(void);
-
 
68
extern ipl_t interrupts_enable(void);
-
 
69
extern void interrupts_restore(ipl_t ipl);
-
 
70
extern ipl_t interrupts_read(void);
-
 
71
 
-
 
72
 
72
 
73
#endif
73
#endif
74
 
74
 
75
/** @}
75
/** @}
76
 */
76
 */