Annotation of lucent/sys/src/boot/pc/mem.h, revision 1.1

1.1     ! root        1: /*
        !             2:  * Memory and machine-specific definitions.  Used in C and assembler.
        !             3:  */
        !             4: 
        !             5: /*
        !             6:  * Sizes
        !             7:  */
        !             8: #define        BI2BY           8                       /* bits per byte */
        !             9: #define BI2WD          32                      /* bits per word */
        !            10: #define        BY2WD           4                       /* bytes per word */
        !            11: #define        BY2PG           4096                    /* bytes per page */
        !            12: #define        WD2PG           (BY2PG/BY2WD)           /* words per page */
        !            13: #define        PGSHIFT         12                      /* log(BY2PG) */
        !            14: #define PGROUND(s)     (((s)+(BY2PG-1))&~(BY2PG-1))
        !            15: 
        !            16: #define        MAXMACH         1                       /* max # cpus system can run */
        !            17: 
        !            18: /*
        !            19:  * Time
        !            20:  */
        !            21: #define        HZ              (20)                            /* clock frequency */
        !            22: #define        MS2HZ           (1000/HZ)                       /* millisec per clock tick */
        !            23: #define        TK2SEC(t)       ((t)/HZ)                        /* ticks to seconds */
        !            24: #define        TK2MS(t)        ((((ulong)(t))*1000)/HZ)        /* ticks to milliseconds */
        !            25: #define        MS2TK(t)        ((((ulong)(t))*HZ)/1000)        /* milliseconds to ticks */
        !            26: 
        !            27: /*
        !            28:  * Fundamental addresses
        !            29:  */
        !            30: 
        !            31: /*
        !            32:  *  Address spaces
        !            33:  *
        !            34:  *  Kernel is at 2GB-4GB
        !            35:  */
        !            36: #define        KZERO           0x80000000              /* base of kernel address space */
        !            37: #define        KTZERO          KZERO                   /* first address in kernel text */
        !            38: #define ROMBIOS                (KZERO|0xF0000)
        !            39: 
        !            40: #define        MACHSIZE        4096
        !            41: 
        !            42: /*
        !            43:  *  known 80386 segments (in GDT) and their selectors
        !            44:  */
        !            45: #define        NULLSEG 0       /* null segment */
        !            46: #define        KDSEG   1       /* kernel data/stack */
        !            47: #define        KESEG   2       /* kernel executable */ 
        !            48: #define        UDSEG   3       /* user data/stack */
        !            49: #define        UESEG   4       /* user executable */
        !            50: #define        SYSGATE 5       /* system call gate */
        !            51: #define TSSSEG 6       /* task segment */
        !            52: 
        !            53: #define SELGDT (0<<3)  /* selector is in gdt */
        !            54: #define        SELLDT  (1<<3)  /* selector is in ldt */
        !            55: 
        !            56: #define SELECTOR(i, t, p)      (((i)<<3) | (t) | (p))
        !            57: 
        !            58: #define NULLSEL        SELECTOR(NULLSEG, SELGDT, 0)
        !            59: #define KESEL  SELECTOR(KESEG, SELGDT, 0)
        !            60: #define KDSEL  SELECTOR(KDSEG, SELGDT, 0)
        !            61: #define UESEL  SELECTOR(UESEG, SELGDT, 3)
        !            62: #define UDSEL  SELECTOR(UDSEG, SELGDT, 3)
        !            63: #define TSSSEL SELECTOR(TSSSEG, SELGDT, 0)
        !            64: 
        !            65: /*
        !            66:  *  fields in segment descriptors
        !            67:  */
        !            68: #define SEGDATA        (0x10<<8)       /* data/stack segment */
        !            69: #define SEGEXEC        (0x18<<8)       /* executable segment */
        !            70: #define        SEGTSS  (0x9<<8)        /* TSS segment */
        !            71: #define SEGCG  (0x0C<<8)       /* call gate */
        !            72: #define        SEGIG   (0x0E<<8)       /* interrupt gate */
        !            73: #define SEGTG  (0x0F<<8)       /* task gate */
        !            74: #define SEGTYPE        (0x1F<<8)
        !            75: 
        !            76: #define SEGP   (1<<15)         /* segment present */
        !            77: #define SEGPL(x) ((x)<<13)     /* priority level */
        !            78: #define SEGB   (1<<22)         /* granularity 1==4k (for expand-down) */
        !            79: #define SEGG   (1<<23)         /* granularity 1==4k (for other) */
        !            80: #define SEGE   (1<<10)         /* expand down */
        !            81: #define SEGW   (1<<9)          /* writable (for data/stack) */
        !            82: #define        SEGR    (1<<9)          /* readable (for code) */
        !            83: #define SEGD   (1<<22)         /* default 1==32bit (for code) */
        !            84: 
        !            85: /*
        !            86:  *  virtual MMU
        !            87:  */
        !            88: #define PTEMAPMEM      (1024*1024)     /* ??? */       
        !            89: #define SEGMAPSIZE     16              /* ??? */
        !            90: #define        PTEPERTAB       (PTEMAPMEM/BY2PG)       /* ??? */
        !            91: #define PPN(x)         ((x)&~(BY2PG-1))
        !            92: 
        !            93: /*
        !            94:  *  physical MMU
        !            95:  */
        !            96: #define        PTEVALID        (1<<0)
        !            97: #define        PTEUNCACHED     0               /* everything is uncached */
        !            98: #define PTEWRITE       (1<<1)
        !            99: #define        PTERONLY        (0<<1)
        !           100: #define        PTEKERNEL       (0<<2)
        !           101: #define        PTEUSER         (1<<2)
        !           102: 
        !           103: /*
        !           104:  *  flag register bits that we care about
        !           105:  */
        !           106: #define IFLAG  0x200

unix.superglobalmegacorp.com

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