Annotation of lucent/sys/src/9/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 ROUND(s, sz)   (((s)+(sz-1))&~(sz-1))
        !            15: #define PGROUND(s)     ROUND(s, BY2PG)
        !            16: 
        !            17: #define        MAXMACH         1                       /* max # cpus system can run */
        !            18: 
        !            19: /*
        !            20:  * Time
        !            21:  */
        !            22: #define        HZ              (100)                   /* clock frequency */
        !            23: #define        MS2HZ           (1000/HZ)               /* millisec per clock tick */
        !            24: #define        TK2SEC(t)       ((t)/HZ)                /* ticks to seconds */
        !            25: #define        SEC2TK(t)       (((ulong)(t))*HZ)       /* seconds to ticks */
        !            26: #define        TK2MS(t)        ((((ulong)(t))*1000)/HZ)        /* ticks to milliseconds */
        !            27: #define        MS2TK(t)        ((((ulong)(t))*HZ)/1000)        /* milliseconds to ticks */
        !            28: 
        !            29: /*
        !            30:  * Fundamental addresses
        !            31:  */
        !            32: 
        !            33: /*
        !            34:  *  Address spaces
        !            35:  *
        !            36:  *  User is at 0-2GB
        !            37:  *  Kernel is at 2GB-4GB
        !            38:  *
        !            39:  *  To avoid an extra page map, both the user stack (USTKTOP) and
        !            40:  *  the temporary user stack (TSTKTOP) should be in the the same
        !            41:  *  4 meg.
        !            42:  */
        !            43: #define        UZERO           0                       /* base of user address space */
        !            44: #define        UTZERO          (UZERO+BY2PG)           /* first address in user text */
        !            45: #define        KZERO           0x80000000              /* base of kernel address space */
        !            46: #define        KTZERO          KZERO                   /* first address in kernel text */
        !            47: #define        USERADDR        0xC0000000              /* struct User */
        !            48: #define        UREGADDR        (USERADDR+BY2PG-4*19)   
        !            49: #define        TSTKTOP         USERADDR                /* end of new stack in sysexec */
        !            50: #define TSTKSIZ 10
        !            51: #define        USTKTOP         (TSTKTOP-TSTKSIZ*BY2PG) /* byte just beyond user stack */
        !            52: #define        USTKSIZE        (16*1024*1024 - TSTKSIZ*BY2PG)  /* size of user stack */
        !            53: #define ROMBIOS                (KZERO|0xF0000)
        !            54: #define        ISAMEMSIZE      (4*MB)                  /* mem space reserved for ISA */
        !            55: 
        !            56: #define        MACHSIZE        4096
        !            57: 
        !            58: 
        !            59: /*
        !            60:  *  known 80386 segments (in GDT) and their selectors
        !            61:  */
        !            62: #define        NULLSEG 0       /* null segment */
        !            63: #define        KDSEG   1       /* kernel data/stack */
        !            64: #define        KESEG   2       /* kernel executable */ 
        !            65: #define        UDSEG   3       /* user data/stack */
        !            66: #define        UESEG   4       /* user executable */
        !            67: #define TSSSEG 5       /* task segment */
        !            68: #define N386SEG        6       /* number of segments */
        !            69: 
        !            70: #define SELGDT (0<<3)  /* selector is in gdt */
        !            71: #define        SELLDT  (1<<3)  /* selector is in ldt */
        !            72: 
        !            73: #define SELECTOR(i, t, p)      (((i)<<3) | (t) | (p))
        !            74: 
        !            75: #define NULLSEL        SELECTOR(NULLSEG, SELGDT, 0)
        !            76: #define KESEL  SELECTOR(KESEG, SELGDT, 0)
        !            77: #define KDSEL  SELECTOR(KDSEG, SELGDT, 0)
        !            78: #define UESEL  SELECTOR(UESEG, SELGDT, 3)
        !            79: #define UDSEL  SELECTOR(UDSEG, SELGDT, 3)
        !            80: #define TSSSEL SELECTOR(TSSSEG, SELGDT, 0)
        !            81: 
        !            82: /*
        !            83:  *  fields in segment descriptors
        !            84:  */
        !            85: #define SEGDATA        (0x10<<8)       /* data/stack segment */
        !            86: #define SEGEXEC        (0x18<<8)       /* executable segment */
        !            87: #define        SEGTSS  (0x9<<8)        /* TSS segment */
        !            88: #define SEGCG  (0x0C<<8)       /* call gate */
        !            89: #define        SEGIG   (0x0E<<8)       /* interrupt gate */
        !            90: #define SEGTG  (0x0F<<8)       /* task gate */
        !            91: #define SEGTYPE        (0x1F<<8)
        !            92: 
        !            93: #define SEGP   (1<<15)         /* segment present */
        !            94: #define SEGPL(x) ((x)<<13)     /* priority level */
        !            95: #define SEGB   (1<<22)         /* granularity 1==4k (for expand-down) */
        !            96: #define SEGG   (1<<23)         /* granularity 1==4k (for other) */
        !            97: #define SEGE   (1<<10)         /* expand down */
        !            98: #define SEGW   (1<<9)          /* writable (for data/stack) */
        !            99: #define        SEGR    (1<<9)          /* readable (for code) */
        !           100: #define SEGD   (1<<22)         /* default 1==32bit (for code) */
        !           101: 
        !           102: /*
        !           103:  *  virtual MMU
        !           104:  */
        !           105: #define PTEMAPMEM      (1024*1024)     
        !           106: #define SEGMAPSIZE     16
        !           107: #define        PTEPERTAB       (PTEMAPMEM/BY2PG)
        !           108: #define PPN(x)         ((x)&~(BY2PG-1))
        !           109: 
        !           110: /*
        !           111:  *  physical MMU
        !           112:  */
        !           113: #define        PTEVALID        (1<<0)
        !           114: #define        PTEUNCACHED     (1<<4)  
        !           115: #define PTEWRITE       (1<<1)
        !           116: #define        PTERONLY        (0<<1)
        !           117: #define        PTEKERNEL       (0<<2)
        !           118: #define        PTEUSER         (1<<2)
        !           119: 
        !           120: /*
        !           121:  *  flag register bits that we care about
        !           122:  */
        !           123: #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.