uboot/arch/arm/include/asm/processor.h
<<
>>
Prefs
   1/*
   2 *  linux/include/asm-arm/processor.h
   3 *
   4 *  Copyright (C) 1995-2002 Russell King
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License version 2 as
   8 * published by the Free Software Foundation.
   9 */
  10
  11#ifndef __ASM_ARM_PROCESSOR_H
  12#define __ASM_ARM_PROCESSOR_H
  13
  14/*
  15 * Default implementation of macro that returns current
  16 * instruction pointer ("program counter").
  17 */
  18#define current_text_addr() ({ __label__ _l; _l: &&_l;})
  19
  20#define FP_SIZE 35
  21
  22struct fp_hard_struct {
  23        unsigned int save[FP_SIZE];             /* as yet undefined */
  24};
  25
  26struct fp_soft_struct {
  27        unsigned int save[FP_SIZE];             /* undefined information */
  28};
  29
  30union fp_state {
  31        struct fp_hard_struct   hard;
  32        struct fp_soft_struct   soft;
  33};
  34
  35typedef unsigned long mm_segment_t;             /* domain register      */
  36
  37#ifdef __KERNEL__
  38
  39#define EISA_bus 0
  40#define MCA_bus 0
  41#define MCA_bus__is_a_macro
  42
  43#include <asm/atomic.h>
  44#include <asm/ptrace.h>
  45#if 0   /* XXX###XXX */
  46#include <asm/arch/memory.h>
  47#endif  /* XXX###XXX */
  48#include <asm/proc-armv/processor.h>
  49#include <asm/types.h>
  50
  51union debug_insn {
  52        u32     arm;
  53        u16     thumb;
  54};
  55
  56struct debug_entry {
  57        u32                     address;
  58        union debug_insn        insn;
  59};
  60
  61struct debug_info {
  62        int                     nsaved;
  63        struct debug_entry      bp[2];
  64};
  65
  66struct thread_struct {
  67        atomic_t                        refcount;
  68                                                        /* fault info     */
  69        unsigned long                   address;
  70        unsigned long                   trap_no;
  71        unsigned long                   error_code;
  72                                                        /* floating point */
  73        union fp_state                  fpstate;
  74                                                        /* debugging      */
  75        struct debug_info               debug;
  76                                                        /* context info   */
  77        struct context_save_struct      *save;
  78        EXTRA_THREAD_STRUCT
  79};
  80
  81#define INIT_THREAD  {                                  \
  82        refcount:       ATOMIC_INIT(1),                 \
  83        EXTRA_THREAD_STRUCT_INIT                        \
  84}
  85
  86/*
  87 * Return saved PC of a blocked thread.
  88 */
  89static inline unsigned long thread_saved_pc(struct thread_struct *t)
  90{
  91        return t->save ? pc_pointer(t->save->pc) : 0;
  92}
  93
  94static inline unsigned long thread_saved_fp(struct thread_struct *t)
  95{
  96        return t->save ? t->save->fp : 0;
  97}
  98
  99/* Forward declaration, a strange C thing */
 100struct task_struct;
 101
 102/* Free all resources held by a thread. */
 103extern void release_thread(struct task_struct *);
 104
 105/* Copy and release all segment info associated with a VM */
 106#define copy_segments(tsk, mm)          do { } while (0)
 107#define release_segments(mm)            do { } while (0)
 108
 109unsigned long get_wchan(struct task_struct *p);
 110
 111#define THREAD_SIZE     (8192)
 112
 113extern struct task_struct *alloc_task_struct(void);
 114extern void __free_task_struct(struct task_struct *);
 115#define get_task_struct(p)      atomic_inc(&(p)->thread.refcount)
 116#define free_task_struct(p)                                     \
 117 do {                                                           \
 118        if (atomic_dec_and_test(&(p)->thread.refcount))         \
 119                __free_task_struct((p));                        \
 120 } while (0)
 121
 122#define init_task       (init_task_union.task)
 123#define init_stack      (init_task_union.stack)
 124
 125#define cpu_relax()     barrier()
 126
 127/*
 128 * Create a new kernel thread
 129 */
 130extern int arch_kernel_thread(int (*fn)(void *), void *arg, unsigned long flags);
 131
 132#endif
 133
 134#endif /* __ASM_ARM_PROCESSOR_H */
 135