at v2.6.30 91 lines 2.2 kB view raw
1/* 2 * Copyright (C) 2006 Atmark Techno, Inc. 3 * 4 * This file is subject to the terms and conditions of the GNU General Public 5 * License. See the file "COPYING" in the main directory of this archive 6 * for more details. 7 */ 8 9#ifndef _ASM_MICROBLAZE_SYSTEM_H 10#define _ASM_MICROBLAZE_SYSTEM_H 11 12#include <asm/registers.h> 13#include <asm/setup.h> 14#include <asm/irqflags.h> 15 16struct task_struct; 17struct thread_info; 18 19extern struct task_struct *_switch_to(struct thread_info *prev, 20 struct thread_info *next); 21 22#define switch_to(prev, next, last) \ 23 do { \ 24 (last) = _switch_to(task_thread_info(prev), \ 25 task_thread_info(next)); \ 26 } while (0) 27 28#define smp_read_barrier_depends() do {} while (0) 29#define read_barrier_depends() do {} while (0) 30 31#define nop() asm volatile ("nop") 32#define mb() barrier() 33#define rmb() mb() 34#define wmb() mb() 35#define set_mb(var, value) do { var = value; mb(); } while (0) 36#define set_wmb(var, value) do { var = value; wmb(); } while (0) 37 38#define smp_mb() mb() 39#define smp_rmb() rmb() 40#define smp_wmb() wmb() 41 42void show_trace(struct task_struct *task, unsigned long *stack); 43void __bad_xchg(volatile void *ptr, int size); 44 45static inline unsigned long __xchg(unsigned long x, volatile void *ptr, 46 int size) 47{ 48 unsigned long ret; 49 unsigned long flags; 50 51 switch (size) { 52 case 1: 53 local_irq_save(flags); 54 ret = *(volatile unsigned char *)ptr; 55 *(volatile unsigned char *)ptr = x; 56 local_irq_restore(flags); 57 break; 58 59 case 4: 60 local_irq_save(flags); 61 ret = *(volatile unsigned long *)ptr; 62 *(volatile unsigned long *)ptr = x; 63 local_irq_restore(flags); 64 break; 65 default: 66 __bad_xchg(ptr, size), ret = 0; 67 break; 68 } 69 70 return ret; 71} 72 73void disable_hlt(void); 74void enable_hlt(void); 75void default_idle(void); 76 77#define xchg(ptr, x) \ 78 ((__typeof__(*(ptr))) __xchg((unsigned long)(x), (ptr), sizeof(*(ptr)))) 79 80void free_init_pages(char *what, unsigned long begin, unsigned long end); 81void free_initmem(void); 82extern char *klimit; 83extern void ret_from_fork(void); 84 85#ifdef CONFIG_DEBUG_FS 86extern struct dentry *of_debugfs_root; 87#endif 88 89#define arch_align_stack(x) (x) 90 91#endif /* _ASM_MICROBLAZE_SYSTEM_H */