Annotation of lucent/sys/src/9/pc/mem.h, revision 1.1.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.