home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-arm26 / processor.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  3.7 KB  |  114 lines

  1. /*
  2.  *  linux/include/asm-arm26/processor.h
  3.  *
  4.  *  Copyright (C) 1995 Russell King
  5.  *  Copyright (C) 2003 Ian Molton
  6.  *
  7.  * This program is free software; you can redistribute it and/or modify
  8.  * it under the terms of the GNU General Public License version 2 as
  9.  * published by the Free Software Foundation.
  10.  */
  11.  
  12. #ifndef __ASM_ARM_PROCESSOR_H
  13. #define __ASM_ARM_PROCESSOR_H
  14.  
  15. /*
  16.  * Default implementation of macro that returns current
  17.  * instruction pointer ("program counter").
  18.  */
  19. #define current_text_addr() ({ __label__ _l; _l: &&_l;})
  20.  
  21. #ifdef __KERNEL__
  22.  
  23. #include <asm/atomic.h>
  24. #include <asm/ptrace.h>
  25. #include <linux/string.h>
  26.  
  27. #define KERNEL_STACK_SIZE 4096
  28.  
  29. typedef struct {
  30.         void (*put_byte)(void);               /* Special calling convention */
  31.         void (*get_byte)(void);               /* Special calling convention */
  32.         void (*put_half)(void);               /* Special calling convention */
  33.         void (*get_half)(void);               /* Special calling convention */
  34.         void (*put_word)(void);               /* Special calling convention */
  35.         void (*get_word)(void);               /* Special calling convention */
  36.         void (*put_dword)(void);              /* Special calling convention */
  37.         unsigned long (*copy_from_user)(void *to, const void *from, unsigned long sz);
  38.         unsigned long (*copy_to_user)(void *to, const void *from, unsigned long sz);
  39.         unsigned long (*clear_user)(void *addr, unsigned long sz);
  40.         unsigned long (*strncpy_from_user)(char *to, const char *from, unsigned long sz);
  41.         unsigned long (*strnlen_user)(const char *s, long n);
  42. } uaccess_t;
  43.  
  44. extern uaccess_t uaccess_user, uaccess_kernel;
  45.  
  46. #define EXTRA_THREAD_STRUCT                     \
  47.         uaccess_t       *uaccess;         /* User access functions*/
  48.  
  49. #define EXTRA_THREAD_STRUCT_INIT                \
  50.         .uaccess        = &uaccess_kernel,
  51.  
  52. // FIXME?!!
  53.  
  54. #define start_thread(regs,pc,sp)                                        \
  55. ({                                                                      \
  56.         unsigned long *stack = (unsigned long *)sp;                     \
  57.         set_fs(USER_DS);                                                \
  58.         memzero(regs->uregs, sizeof (regs->uregs));                     \
  59.         regs->ARM_pc = pc | ~0xfc000003;        /* pc */                \
  60.         regs->ARM_sp = sp;              /* sp */                        \
  61.         regs->ARM_r2 = stack[2];        /* r2 (envp) */                 \
  62.         regs->ARM_r1 = stack[1];        /* r1 (argv) */                 \
  63.         regs->ARM_r0 = stack[0];        /* r0 (argc) */                 \
  64. })
  65.  
  66. #define KSTK_EIP(tsk)   (((unsigned long *)(4096+(unsigned long)(tsk)))[1020])
  67. #define KSTK_ESP(tsk)   (((unsigned long *)(4096+(unsigned long)(tsk)))[1018])
  68.  
  69. struct debug_entry {
  70.         u32                     address;
  71.         u32                insn;
  72. };
  73.  
  74. struct debug_info {
  75.         int                     nsaved;
  76.         struct debug_entry      bp[2];
  77. };
  78.  
  79. struct thread_struct {
  80.                             /* fault info      */
  81.     unsigned long            address;
  82.     unsigned long            trap_no;
  83.     unsigned long            error_code;
  84.                             /* debugging      */
  85.     struct debug_info        debug;
  86.     EXTRA_THREAD_STRUCT
  87. };
  88.  
  89. #define INIT_THREAD  { \
  90. EXTRA_THREAD_STRUCT_INIT \
  91. }
  92.  
  93. /* Forward declaration, a strange C thing */
  94. struct task_struct;
  95.  
  96. /* Free all resources held by a thread. */
  97. extern void release_thread(struct task_struct *);
  98.  
  99. unsigned long get_wchan(struct task_struct *p);
  100.  
  101. #define cpu_relax()            barrier()
  102.  
  103. /* Prepare to copy thread state - unlazy all lazy status */
  104. #define prepare_to_copy(tsk)    do { } while (0)
  105.  
  106. /*
  107.  * Create a new kernel thread
  108.  */
  109. extern int kernel_thread(int (*fn)(void *), void *arg, unsigned long flags);
  110.  
  111. #endif
  112.  
  113. #endif /* __ASM_ARM_PROCESSOR_H */
  114.