Annotation of lucent/sys/src/boot/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 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.