Annotation of kernel/kern/mach_init.c, revision 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.