|
|
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: * Mach Operating System ! 27: * Copyright (c) 1989 Carnegie-Mellon University ! 28: * Copyright (c) 1988 Carnegie-Mellon University ! 29: * Copyright (c) 1987 Carnegie-Mellon University ! 30: * All rights reserved. The CMU software License Agreement specifies ! 31: * the terms and conditions for use and redistribution. ! 32: */ ! 33: /* ! 34: * File: vax/thread.h ! 35: * Author: Avadis Tevanian, Jr. ! 36: * ! 37: * Copyright (C) 1987, Avadis Tevanian, Jr. ! 38: * ! 39: * This file defines machine specific, thread related structures, ! 40: * variables and macros. ! 41: */ ! 42: ! 43: #ifndef _MACHDEP_PPC_THREAD_ ! 44: #define _MACHDEP_PPC_THREAD_ ! 45: ! 46: #include <kern/kernel_stack.h> ! 47: #include <mach/ppc/thread_status.h> ! 48: ! 49: #define CURRENT_THREAD ! 50: #include <machdep/ppc/cpu_data.h> ! 51: ! 52: /* ! 53: * PPC process control block ! 54: * ! 55: * In the continuation model, the PCB holds the user context. It is used ! 56: * on entry to the kernel from user mode, either by system call or trap, ! 57: * to store the necessary user registers and other state. ! 58: */ ! 59: struct pcb ! 60: { ! 61: struct ppc_saved_state ss; ! 62: struct ppc_exception_state es; ! 63: struct ppc_float_state fs; ! 64: unsigned ksp; /* points to TOP OF STACK or zero */ ! 65: unsigned sr0; /* TODO NMGS hack?? sort out user space */ ! 66: unsigned long cthread_self; /* for use of cthread package */ ! 67: unsigned flags; ! 68: }; ! 69: ! 70: typedef struct pcb *pcb_t; ! 71: ! 72: struct ppc_kernel_state ! 73: { ! 74: pcb_t pcb; /* Efficiency hack, I am told :-) */ ! 75: unsigned r1; /* Stack pointer */ ! 76: unsigned r2; /* TOC/GOT pointer */ ! 77: unsigned r13[32-13]; /* Callee saved `non-volatile' registers */ ! 78: unsigned lr; /* `return address' used in continuation */ ! 79: unsigned cr; ! 80: /* Floating point not used, so not saved */ ! 81: }; ! 82: ! 83: #include <machdep/ppc/fpu.h> ! 84: #define pcb_synch(thread) fp_state_save(thread) ! 85: ! 86: #define USER_REGS(thread) (&(thread)->pcb->ss) ! 87: ! 88: #define STACK_IKS(stack) \ ! 89: (((struct ppc_kernel_state *)(((vm_offset_t)stack)+KERNEL_STACK_SIZE))-1) ! 90: ! 91: #ifndef __ASSEMBLER__ ! 92: /* ! 93: * These routines are called from from task_create() to ! 94: * manage any pcb state common to all threads in a task ! 95: * via the "task->pcb_common" pointer. Currently null for sparc. ! 96: */ ! 97: #define pcb_common_init(task) ! 98: #define pcb_common_terminate(task) ! 99: #endif /* !__ASSEMBLER__ */ ! 100: ! 101: #endif /* _MACHDEP_PPC_THREAD_ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.