|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1999 Apple Computer, Inc. All rights reserved. ! 3: * ! 4: * @APPLE_LICENSE_HEADER_START@ ! 5: * ! 6: * Portions Copyright (c) 1999 Apple Computer, Inc. All Rights ! 7: * Reserved. This file contains Original Code and/or Modifications of ! 8: * Original Code as defined in and that are subject to the Apple Public ! 9: * Source License Version 1.1 (the "License"). You may not use this file ! 10: * except in compliance with the License. Please obtain a copy of the ! 11: * License at http://www.apple.com/publicsource and read it before using ! 12: * this file. ! 13: * ! 14: * The Original Code and all software distributed under the License are ! 15: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER ! 16: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, ! 17: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, ! 18: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the ! 19: * License for the specific language governing rights and limitations ! 20: * under the License. ! 21: * ! 22: * @APPLE_LICENSE_HEADER_END@ ! 23: */ ! 24: ! 25: ! 26: #ifndef _CPU_DATA_H_ ! 27: #define _CPU_DATA_H_ ! 28: #if defined(KERNEL_BUILD) ! 29: #include <cpus.h> ! 30: #endif /* KERNEL_BUILD */ ! 31: #include <kern/kern_types.h> ! 32: ! 33: typedef struct ! 34: { ! 35: thread_t active_thread; ! 36: int preemption_level; ! 37: int simple_lock_count; ! 38: int interrupt_level; ! 39: unsigned flags; ! 40: } cpu_data_t; ! 41: ! 42: extern cpu_data_t cpu_data[NCPUS]; ! 43: ! 44: /* ! 45: * NOTE: For non-realtime configurations, the accessor functions for ! 46: * cpu_data fields are here, coded in C. For MACH_RT configurations, ! 47: * the accessor functions must be defined in the machine-specific ! 48: * cpu_data.h header file. ! 49: */ ! 50: ! 51: #if MACH_RT ! 52: ! 53: #include <machine/cpu_data.h> ! 54: ! 55: #else /* MACH_RT */ ! 56: ! 57: #include <kern/cpu_number.h> ! 58: ! 59: #if defined(__GNUC__) ! 60: ! 61: #ifndef __OPTIMIZE__ ! 62: #define extern static ! 63: #endif ! 64: ! 65: extern thread_t __inline__ current_thread(void); ! 66: extern int __inline__ get_preemption_level(void); ! 67: extern int __inline__ get_simple_lock_count(void); ! 68: extern int __inline__ get_interrupt_level(void); ! 69: extern void __inline__ disable_preemption(void); ! 70: extern void __inline__ enable_preemption(void); ! 71: ! 72: extern thread_t __inline__ current_thread(void) ! 73: { ! 74: return (cpu_data[cpu_number()].active_thread); ! 75: } ! 76: ! 77: extern int __inline__ get_preemption_level(void) ! 78: { ! 79: return (0); ! 80: } ! 81: ! 82: extern int __inline__ get_simple_lock_count(void) ! 83: { ! 84: return (cpu_data[cpu_number()].simple_lock_count); ! 85: } ! 86: ! 87: extern int __inline__ get_interrupt_level(void) ! 88: { ! 89: return (cpu_data[cpu_number()].interrupt_level); ! 90: } ! 91: ! 92: extern void __inline__ disable_preemption(void) ! 93: { ! 94: } ! 95: ! 96: extern void __inline__ enable_preemption(void) ! 97: { ! 98: } ! 99: ! 100: #ifndef __OPTIMIZE__ ! 101: #undef extern ! 102: #endif ! 103: ! 104: #else /* !defined(__GNUC__) */ ! 105: ! 106: #define current_thread() (cpu_data[cpu_number()].active_thread) ! 107: #define get_preemption_level() (0) ! 108: #define get_simple_lock_count() (cpu_data[cpu_number()].simple_lock_count) ! 109: #define get_interrupt_level() (cpu_data[cpu_number()].interrupt_level) ! 110: #define disable_preemption() ! 111: #define enable_preemption() ! 112: ! 113: #endif /* defined(__GNUC__) */ ! 114: ! 115: #endif /* MACH_RT */ ! 116: ! 117: #endif /* _CPU_DATA_H_ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.