OpenCores
URL https://opencores.org/ocsvn/or1k_soc_on_altera_embedded_dev_kit/or1k_soc_on_altera_embedded_dev_kit/trunk

Subversion Repositories or1k_soc_on_altera_embedded_dev_kit

[/] [or1k_soc_on_altera_embedded_dev_kit/] [trunk/] [linux-2.6/] [linux-2.6.24/] [include/] [asm-or32/] [system.h] - Blame information for rev 7

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 7 xianfeng
/*
2
 * Based on:
3
 * include/asm-ppc/system.h
4
 * Copyright (C) 1999 Cort Dougan <cort@cs.nmt.edu>
5
 */
6
#ifndef __OR32_SYSTEM_H
7
#define __OR32_SYSTEM_H
8
 
9
#include <asm/processor.h>
10
#include <linux/linkage.h>
11
/* Memory bariers */
12
#define barrier() __asm__ __volatile__("": : :"memory")
13
#define mb() barrier()
14
#define rmb() mb()
15
#define wmb() mb()
16
#define read_barrier_depends() do { } while(0)
17
#define set_mb(var, value)  do { var = value; mb(); } while (0)
18
#define set_wmb(var, value) do { var = value; wmb(); } while (0)
19
 
20
#ifdef CONFIG_SMP
21
#define smp_mb()        mb()
22
#define smp_rmb()       rmb()
23
#define smp_wmb()       wmb()
24
#define smp_read_barrier_depends()     read_barrier_depends()
25
#else
26
#define smp_mb()        barrier()
27
#define smp_rmb()       barrier()
28
#define smp_wmb()       barrier()
29
#define smp_read_barrier_depends()     do { } while(0)
30
#endif
31
 
32
#define nop() __asm__ __volatile__ ("l.nop"::)
33
 
34
#ifdef __KERNEL__
35
 
36
struct task_struct;
37
extern unsigned int rtas_data;
38
struct pt_regs;
39
 
40
extern void show_regs(struct pt_regs * regs);
41
 
42
extern void __save_flags(unsigned long *flags);
43
extern void __restore_flags(unsigned long flags);
44
extern void __save_and_cli(unsigned long *flags);
45
extern void __sti(void);
46
extern void __cli(void);
47
 
48
 
49
#define local_irq_disable()             __cli()
50
#define local_irq_enable()              __sti()
51
#define local_irq_save(flags)           __save_and_cli(&(flags))
52
#define local_irq_restore(flags)        __restore_flags(flags)
53
#define local_save_flags(flags)         __save_flags(&(flags))
54
 
55
#define prepare_to_switch()     do { } while(0)
56
#define switch_to(prev,next,last) _switch_to((prev),(next),&(last))
57
 
58
extern void _switch_to(struct task_struct *, struct task_struct *,
59
                       struct task_struct **);
60
 
61
struct __xchg_dummy { unsigned long a[100]; };
62
#define __xg(x) ((volatile struct __xchg_dummy *)(x))
63
#define xchg(ptr,x) ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr))))
64
#define tas(ptr) (xchg((ptr),1))
65
 
66
static inline unsigned long __xchg(unsigned long x, volatile void * ptr, int size)
67
{
68
  unsigned long tmp, flags;
69
 
70
  local_irq_save(flags);
71
 
72
  switch (size) {
73
  case 1:
74
    __asm__ __volatile__
75
    ("l.lbz %0,%2\n\t"
76
     "l.sb %2,%1"
77
    : "=&r" (tmp) : "r" (x), "m" (*__xg(ptr)) : "memory");
78
    break;
79
  case 2:
80
    __asm__ __volatile__
81
    ("l.lhz %0,%2\n\t"
82
     "l.sh %2,%1"
83
    : "=&r" (tmp) : "r" (x), "m" (*__xg(ptr)) : "memory");
84
    break;
85
  case 4:
86
    __asm__ __volatile__
87
    ("l.lwz %0,%2\n\t"
88
     "l.sw %2,%1"
89
    : "=&r" (tmp) : "r" (x), "m" (*__xg(ptr)) : "memory");
90
    break;
91
  }
92
 
93
  local_irq_restore(flags);
94
  return tmp;
95
}
96
 
97
extern inline void * xchg_ptr(void * m, void * val)
98
{
99
        return (void *) __xchg((unsigned long)m, val, sizeof(unsigned long));
100
}
101
 
102
static inline void mtspr(unsigned long add, unsigned long val)
103
{
104
        __asm__ __volatile__ ("l.mtspr %0,%1,0" :: "r" (add), "r" (val));
105
}
106
 
107
static inline unsigned long mfspr(unsigned long add)
108
{
109
        unsigned long ret;
110
        __asm__ __volatile__ ("l.mfspr %0,%1,0" : "=r" (ret) : "r" (add));
111
        return ret;
112
}
113
 
114
#define irqs_disabled() ((mfspr(SPR_SR) & (SPR_SR_IEE | SPR_SR_TEE)) == 0)
115
 
116
#define arch_align_stack(x) (x)
117
 
118
/*
119
 * debugging aid
120
 */
121
extern void __print(const char *fmt, ...);
122
 
123
#endif /* __KERNEL__ */
124
#endif /* __OR32_SYSTEM_H */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.