]> git.saurik.com Git - apple/xnu.git/blobdiff - osfmk/kern/processor.h
xnu-1504.9.37.tar.gz
[apple/xnu.git] / osfmk / kern / processor.h
index 24603cc11be29ec97dac02c797282218f0202cdc..342a90081ef53999391ce7e7be8c6c7120c03944 100644 (file)
@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2000-2008 Apple Inc. All rights reserved.
+ * Copyright (c) 2000-2009 Apple Inc. All rights reserved.
  *
  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
  * 
  *
  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
  * 
@@ -89,6 +89,9 @@ struct processor_set {
 
        int                                     processor_count;
 
 
        int                                     processor_count;
 
+       int                                     cpu_set_low, cpu_set_hi;
+       int                                     cpu_set_count;
+
        decl_simple_lock_data(,sched_lock)      /* lock for above */
 
        struct ipc_port *       pset_self;              /* port for operations */
        decl_simple_lock_data(,sched_lock)      /* lock for above */
 
        struct ipc_port *       pset_self;              /* port for operations */
@@ -113,7 +116,15 @@ extern struct pset_node    pset_node0;
 
 extern queue_head_t            tasks, threads;
 extern int                             tasks_count, threads_count;
 
 extern queue_head_t            tasks, threads;
 extern int                             tasks_count, threads_count;
-decl_mutex_data(extern,tasks_threads_lock)
+decl_lck_mtx_data(extern,tasks_threads_lock)
+
+struct processor_meta {
+       queue_head_t            idle_queue;
+       processor_t                     primary;
+};
+
+typedef struct processor_meta  *processor_meta_t;
+#define PROCESSOR_META_NULL            ((processor_meta_t) 0)
 
 struct processor {
        queue_chain_t           processor_queue;/* idle/active queue link,
 
 struct processor {
        queue_chain_t           processor_queue;/* idle/active queue link,
@@ -127,7 +138,7 @@ struct processor {
        processor_set_t         processor_set;  /* assigned set */
 
        int                                     current_pri;    /* priority of current thread */
        processor_set_t         processor_set;  /* assigned set */
 
        int                                     current_pri;    /* priority of current thread */
-       int                                     cpu_num;                /* platform numeric id */
+       int                                     cpu_id;                 /* platform numeric id */
 
        timer_call_data_t       quantum_timer;  /* timer for quantum expiration */
        uint64_t                        quantum_end;    /* time when current quantum ends */
 
        timer_call_data_t       quantum_timer;  /* timer for quantum expiration */
        uint64_t                        quantum_end;    /* time when current quantum ends */
@@ -137,9 +148,9 @@ struct processor {
        int                                     timeslice;              /* quanta before timeslice ends */
 
        struct run_queue        runq;                   /* runq for this processor */
        int                                     timeslice;              /* quanta before timeslice ends */
 
        struct run_queue        runq;                   /* runq for this processor */
+       processor_meta_t        processor_meta;
 
        struct ipc_port *       processor_self; /* port for operations */
 
        struct ipc_port *       processor_self; /* port for operations */
-       decl_simple_lock_data(,lock)
 
        processor_t                     processor_list; /* all existing processors */
        processor_data_t        processor_data; /* per-processor data */
 
        processor_t                     processor_list; /* all existing processors */
        processor_data_t        processor_data; /* per-processor data */
@@ -176,10 +187,6 @@ extern processor_t cpu_to_processor(
 #define pset_unlock(p)                 simple_unlock(&(p)->sched_lock)
 #define pset_lock_init(p)              simple_lock_init(&(p)->sched_lock, 0)
 
 #define pset_unlock(p)                 simple_unlock(&(p)->sched_lock)
 #define pset_lock_init(p)              simple_lock_init(&(p)->sched_lock, 0)
 
-#define processor_lock(p)              simple_lock(&(p)->lock)
-#define processor_unlock(p)            simple_unlock(&(p)->lock)
-#define processor_lock_init(p) simple_lock_init(&(p)->lock, 0)
-
 /* Update hints */
 
 #define pset_pri_hint(ps, p, pri)              \
 /* Update hints */
 
 #define pset_pri_hint(ps, p, pri)              \
@@ -208,9 +215,13 @@ extern void                processor_bootstrap(void) __attribute__((section("__TEXT, initcode"
 
 extern void            processor_init(
                                        processor_t             processor,
 
 extern void            processor_init(
                                        processor_t             processor,
-                                       int                             cpu_num,
+                                       int                             cpu_id,
                                        processor_set_t processor_set) __attribute__((section("__TEXT, initcode")));
 
                                        processor_set_t processor_set) __attribute__((section("__TEXT, initcode")));
 
+extern void            processor_meta_init(
+                                       processor_t             processor,
+                                       processor_t             primary);
+
 extern kern_return_t   processor_shutdown(
                                                        processor_t             processor);
 
 extern kern_return_t   processor_shutdown(
                                                        processor_t             processor);
 
@@ -236,11 +247,15 @@ extern kern_return_t      processor_info_count(
 #define pset_deallocate(x)
 #define pset_reference(x)
 
 #define pset_deallocate(x)
 #define pset_reference(x)
 
-extern void            machine_run_count(
-                                       uint32_t        count);
+extern void                            machine_run_count(
+                                                       uint32_t        count);
+
+extern boolean_t               machine_processor_is_inactive(
+                                                       processor_t                     processor);
 
 
-extern boolean_t       machine_cpu_is_inactive(
-                                               int                             num);
+extern processor_t             machine_choose_processor(
+                                                       processor_set_t         pset,
+                                                       processor_t                     processor);
 
 #else  /* MACH_KERNEL_PRIVATE */
 
 
 #else  /* MACH_KERNEL_PRIVATE */