Annotation of kernel/kern/mach_init.c, revision 1.1.1.1

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:  *
                     27:  * Mach Operating System
                     28:  * Copyright (c) 1987 Carnegie-Mellon University
                     29:  * All rights reserved.  The CMU software License Agreement specifies
                     30:  * the terms and conditions for use and redistribution.
                     31:  */
                     32: /*
                     33:  * HISTORY
                     34:  */
                     35: 
                     36: #import <mach/features.h>
                     37: 
                     38: #import <mach/machine.h>
                     39: #import <sys/version.h>
                     40: #import <kern/thread.h>
                     41: #import <kern/task.h>
                     42: #import <sys/param.h>
                     43: #import <mach/vm_param.h>
                     44: #import <vm/vm_kern.h>
                     45: #import <machine/spl.h>
                     46: #import <kern/miniMon.h>
                     47: 
                     48: /*
                     49:  * Initialization code.
                     50:  * Called from cold start routine as
                     51:  * soon as a stack and segmentation
                     52:  * have been established.
                     53:  * Functions:
                     54:  *     clear and free user core
                     55:  *     turn on clock
                     56:  *     hand craft 0th process
                     57:  *     call all initialization routines
                     58:  *     fork - process 0 to schedule
                     59:  *          - process 1 execute bootstrap
                     60:  *          - process 2 to page out
                     61:  */
                     62: thread_t       first_thread;
                     63: 
                     64: thread_t setup_main()
                     65: /*
                     66:  *     first_addr contains the first available physical address
                     67:  *     running in virtual memory on the interrupt stack
                     68:  *
                     69:  *     returns initial thread to run
                     70:  */
                     71: {
                     72:        extern vm_offset_t      virtual_avail;
                     73:        vm_offset_t             end_stack, cur_stack;
                     74:        int                     i;
                     75:        extern void     main();
                     76:        extern void     vm_mem_init();
                     77: #if    MACH_NET
                     78:        extern void     mach_net_init();
                     79: #endif MACH_NET
                     80:        unsigned s;
                     81:        
                     82:        machine_clock_init();
                     83:        sched_init();
                     84: 
                     85:        vm_mem_init();
                     86: 
                     87:        init_timers();
                     88:        init_timeout();
                     89: 
                     90:        startup(virtual_avail);
                     91:        printf("minimum quantum is %d ms\n", (1000 / hz) * min_quantum);
                     92: 
                     93:        machine_info.max_cpus = NCPUS;
                     94:        machine_info.memory_size = roundup(mem_size, 1024*1024);
                     95:        machine_info.avail_cpus = 0;
                     96:        machine_info.major_version = KERNEL_MAJOR_VERSION;
                     97:        machine_info.minor_version = KERNEL_MINOR_VERSION;
                     98: 
                     99:        /*
                    100:         *      Initialize the task and thread subsystems.
                    101:         */
                    102: 
                    103:        uzone_init();
                    104: 
                    105:        ipc_bootstrap();
                    106: 
                    107:        cpu_up(master_cpu);     /* signify we are up */
                    108: #if    MACH_NET
                    109:        mach_net_init();
                    110: #endif MACH_NET
                    111:        task_init();
                    112:        thread_init();
                    113:        swapper_init();
                    114:        ipc_init();
                    115:        vnode_pager_init();
                    116: #if    MACH_HOST
                    117:        pset_sys_init();
                    118: #endif MACH_HOST
                    119: 
                    120:        (void) thread_create(kernel_task, &first_thread);
                    121:        thread_deallocate(first_thread);
                    122:        thread_start(first_thread, main);
                    123:        thread_doswapin(first_thread);
                    124:        first_thread->state |= TH_RUN;
                    125:        (void) thread_resume(first_thread);     
                    126: 
                    127:        /*
                    128:         *      Tell the pmap system that our cpu is using the kernel pmap
                    129:         */
                    130:        s = splvm();
                    131:        PMAP_ACTIVATE(kernel_pmap, first_thread, cpu_number());
                    132:        splx(s);
                    133:        
                    134: #if    DRIVERKIT
                    135:        dev_server_init();
                    136: #endif DRIVERKIT
                    137: 
                    138:        miniMonInit();
                    139: 
                    140:        /*
                    141:         *      Return to assembly code to start the first process.
                    142:         */
                    143: 
                    144:        return(first_thread);
                    145: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.