Annotation of coherent/d/PS2_KERNEL/i286/mmain.c, revision 1.1

1.1     ! root        1: /* $Header: /kernel/kersrc/i286/RCS/mmain.c,v 1.1 92/07/17 15:21:33 bin Exp Locker: bin $ */
        !             2: /* (lgl-
        !             3:  *     The information contained herein is a trade secret of Mark Williams
        !             4:  *     Company, and  is confidential information.  It is provided  under a
        !             5:  *     license agreement,  and may be  copied or disclosed  only under the
        !             6:  *     terms of  that agreement.  Any  reproduction or disclosure  of this
        !             7:  *     material without the express written authorization of Mark Williams
        !             8:  *     Company or persuant to the license agreement is unlawful.
        !             9:  *
        !            10:  *     COHERENT Version 2.3.37
        !            11:  *     Copyright (c) 1982, 1983, 1984.
        !            12:  *     An unpublished work by Mark Williams Company, Chicago.
        !            13:  *     All rights reserved.
        !            14:  -lgl) */
        !            15: /*
        !            16:  * 8086/8088 Coherent.
        !            17:  * All machines.
        !            18:  * Machine dependent stuff.
        !            19:  *
        !            20:  * $Log:       mmain.c,v $
        !            21:  * Revision 1.1  92/07/17  15:21:33  bin
        !            22:  * Initial revision
        !            23:  * 
        !            24:  * Revision 1.2  91/06/20  14:40:23  bin
        !            25:  * update provided by hal
        !            26:  * 
        !            27:  * Revision 1.2        88/08/05  15:43:42      src
        !            28:  * Bug:        Spawning large number of processes would cause system to crash.
        !            29:  * Fix:        Kernel alloc space no longer overlaps loadable driver data.
        !            30:  * 
        !            31:  * Revision 1.1        88/03/24  17:39:46      src
        !            32:  * Initial revision
        !            33:  * 
        !            34:  * 88/02/24    Allan Cornish           /usr/src/sys/i8086/src/mmain.c
        !            35:  * corebot is now aligned on a 512 byte boundary.
        !            36:  *
        !            37:  * 87/11/30    Allan Cornish           /usr/src/sys/i8086/src/mmain.c
        !            38:  * Check for kernel data space > 64 Kbytes now done AFTER rounding up.
        !            39:  *
        !            40:  * 87/11/21    Allan Cornish           /usr/src/sys/i8086/src/mmain.c
        !            41:  * Use of bruc/ctob macros eliminated since no longer valid in protected mode.
        !            42:  *
        !            43:  * 87/11/14    Allan Cornish           /usr/src/sys/i8086/src/mmain.c
        !            44:  * Init code+data now split into icodep/icodes and idatap/idatas.
        !            45:  *
        !            46:  * 87/11/12    Allan Cornish           /usr/src/sys/i8086/src/mmain.c
        !            47:  * Corebot/coretop now paddr_t rather than saddr_t to support protected mode.
        !            48:  *
        !            49:  * 87/10/05    Allan Cornish           /usr/src/sys/i8086/src/mmain.c
        !            50:  * Loadable driver data slot allocation added.
        !            51:  *
        !            52:  * 87/05/08    Allan Cornish           /usr/src/sys/i8086/src/mmain.c
        !            53:  * Ctob(sds) is now cast as ctob((paddr_t)sds) to avoid address truncation.
        !            54:  *
        !            55:  * 86/07/23    Allan Cornish
        !            56:  * Added check for kernel data space exceeding 64 Kbytes.
        !            57:  */
        !            58: #include <sys/coherent.h>
        !            59: #include <sys/i8086.h>
        !            60: #include <sys/clist.h>
        !            61: #include <errno.h>
        !            62: #include <sys/inode.h>
        !            63: #include <sys/proc.h>
        !            64: #include <sys/seg.h>
        !            65: #include <signal.h>
        !            66: #include <sys/buf.h>
        !            67: #include <sys/typed.h>
        !            68: 
        !            69: /* Arguments are passed into the kernel through boot_gift.
        !            70:  * If you start getting "Not enough room for all arguments." messages
        !            71:  * at boot time, just increase the BG_LEN  to whatever you need.
        !            72:  * This structure is EXACTLY BG_LEN bytes long.
        !            73:  */
        !            74: #define BG_LEN 512
        !            75: TYPED_SPACE(boot_gift, BG_LEN, T_FIFO_SIC);
        !            76: 
        !            77: saddr_t uasa;  /* Currently active uarea */
        !            78: 
        !            79: /*
        !            80:  * General initialisation.
        !            81:  */
        !            82: i8086()
        !            83: {
        !            84:        register unsigned allocp;
        !            85:        extern vaddr_t  aicodep;
        !            86:        extern vaddr_t  aicodes;
        !            87:        extern vaddr_t  aidatap;
        !            88:        extern vaddr_t  aidatas;
        !            89:        extern vaddr_t  etext;
        !            90:        extern vaddr_t  end;
        !            91:        auto faddr_t    fp;
        !            92:        long datsize;
        !            93:        unsigned bsize, csize, isize, ssize;
        !            94: 
        !            95:        /*
        !            96:         * Set up memory bases.
        !            97:         * Align the buffers modulo BSIZE (512) in the physical space,
        !            98:         * so that any machines that have only 16 bit DMA counters will
        !            99:         * work out.
        !           100:         */
        !           101:        datsize = (long)&end;
        !           102:        datsize += ALLSIZE;
        !           103:        datsize += NBUF * sizeof(BUF);
        !           104:        datsize += ssize = NSLOT*(sizeof(int) + slotsz);
        !           105:        datsize += isize = NINODE*sizeof(INODE);
        !           106:        datsize += csize = NCLIST*sizeof(CLIST);
        !           107:        datsize += bsize = NBUF*BSIZE;
        !           108:        datsize = (datsize + 511) & ~511;
        !           109:        if ( datsize >= 0x10000L )
        !           110:                panic("Kernel data exceeds 64 Kbytes");
        !           111: 
        !           112:        blockp  = datsize - bsize - ((sds&0x1F)<<4);
        !           113:        clistp  = (unsigned)blockp - csize;
        !           114:        inodep  = (unsigned)clistp - isize;
        !           115:        slotp   = (unsigned)inodep - ssize;
        !           116:        allocp = &end;
        !           117:        blockp += (sds << 4L);
        !           118:        if ((unsigned)allocp > (unsigned)slotp)
        !           119:                panic("No alloc space");
        !           120:        corebot = ((sds << 4L) + datsize + 511) & ~511;
        !           121:        asize = (unsigned)slotp - allocp;
        !           122:        msize = (coretop-holetop+holebot-corebot) / 1024;
        !           123:        allkp = setarena(allocp, asize);
        !           124:        icodep = (char *)&aicodep;
        !           125:        icodes = (int)&aicodes;
        !           126:        idatap = (char *)&aidatap;
        !           127:        idatas = (int)&aidatas;
        !           128:        fp = ptov( corebot, (fsize_t) UPASIZE );
        !           129:        uasa   = FP_SEL(fp);
        !           130: 
        !           131: /*     outb(0x65, 0x9e);       /* MLK  set Planar Control Register */
        !           132: }

unix.superglobalmegacorp.com

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