Subversion Repositories HelenOS

Rev

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

Rev 2089 Rev 2092
Line 33... Line 33...
33
 */
33
 */
34
 
34
 
35
#ifndef KERN_CPU_H_
35
#ifndef KERN_CPU_H_
36
#define KERN_CPU_H_
36
#define KERN_CPU_H_
37
 
37
 
-
 
38
#include <mm/tlb.h>
-
 
39
#include <synch/spinlock.h>
38
#include <proc/thread.h>
40
#include <proc/scheduler.h>
-
 
41
#include <arch/cpu.h>
-
 
42
#include <arch/context.h>
39
 
43
 
40
#define CPU_STACK_SIZE  STACK_SIZE
44
#define CPU_STACK_SIZE  STACK_SIZE
41
 
45
 
-
 
46
/** CPU structure.
-
 
47
 *
-
 
48
 * There is one structure like this for every processor.
-
 
49
 */
-
 
50
typedef struct {
-
 
51
    SPINLOCK_DECLARE(lock);
-
 
52
 
-
 
53
    tlb_shootdown_msg_t tlb_messages[TLB_MESSAGE_QUEUE_LEN];
-
 
54
    count_t tlb_messages_count;
-
 
55
   
-
 
56
    context_t saved_context;
-
 
57
 
-
 
58
    atomic_t nrdy;
-
 
59
    runq_t rq[RQ_COUNT];
-
 
60
    volatile count_t needs_relink;
-
 
61
 
-
 
62
    SPINLOCK_DECLARE(timeoutlock);
-
 
63
    link_t timeout_active_head;
-
 
64
 
-
 
65
    count_t missed_clock_ticks; /**< When system clock loses a tick, it is recorded here
-
 
66
                         so that clock() can react. This variable is
-
 
67
                         CPU-local and can be only accessed when interrupts
-
 
68
                         are disabled. */
-
 
69
 
-
 
70
    /**
-
 
71
     * Processor ID assigned by kernel.
-
 
72
     */
-
 
73
    unsigned int id;
-
 
74
   
-
 
75
    int active;
-
 
76
    int tlb_active;
-
 
77
 
-
 
78
    uint16_t frequency_mhz;
-
 
79
    uint32_t delay_loop_const;
-
 
80
 
-
 
81
    cpu_arch_t arch;
-
 
82
 
-
 
83
    struct thread *fpu_owner;
-
 
84
   
-
 
85
    /**
-
 
86
     * Stack used by scheduler when there is no running thread.
-
 
87
     */
-
 
88
    uint8_t *stack;
-
 
89
} cpu_t;
-
 
90
 
42
extern cpu_t *cpus;
91
extern cpu_t *cpus;
43
 
92
 
44
extern void cpu_init(void);
93
extern void cpu_init(void);
45
extern void cpu_list(void);
94
extern void cpu_list(void);
46
 
95