Annotation of researchv9/sys/boot/mon/cpu.addrs.h, revision 1.1.1.1

1.1       root        1: /*     @(#)cpu.addrs.h 1.27 85/04/15 SMI       */
                      2: 
                      3: /*
                      4:  * Copyright (c) 1985 by Sun Microsystems, Inc.
                      5:  */
                      6: 
                      7: /*
                      8:  * Memory Addresses of Interest in the Sun-3 "Monitor" memory map
                      9:  *
                     10:  * THE VALUE FOR PROM_BASE must be changed in several places when it is
                     11:  * changed.  A complete list:
                     12:  *     ../conf/Makefile.mon    RELOC= near top of file
                     13:  *     ../h/sunromvec.h        #define romp near end of file
                     14:  *     ../* /Makefile          (best to rerun sunconfig to generate them)
                     15:  * Since sunromvec is exported to the world, such a change invalidates all
                     16:  * object programs that use it (eg standalone diagnostics, demos, boot code,
                     17:  * etc) until they are recompiled.  As a transition aid, it is often useful
                     18:  * to specially map the old sunromvec location(s) so they also work.
                     19:  *
                     20:  * THE VALUE FOR MONBSS_BASE must be changed in the Makefiles when you
                     21:  * change it here, too.
                     22:  */
                     23: 
                     24: /*
                     25:  * The following define the base addresses in mappable memory where
                     26:  * the various devices and forms of memory are mapped in when the ROM
                     27:  * Monitor powers up.  Ongoing operation of the monitor requires that
                     28:  * these locations remain mapped as they were.
                     29:  */
                     30: 
                     31: /* On-board I/O devices */
                     32: #define        KEYBMOUSE_BASE  ((struct zscc_device *)         0x0FE00000)
                     33: #define        SERIAL0_BASE    ((struct zscc_device *)         0x0FE02000)
                     34: #define        EEPROM_BASE     ((unsigned char *)              0x0FE04000)
                     35: #define        CLOCK_BASE      ((struct intersil7170 *)        0x0FE06000)
                     36: #define        MEMORY_ERR_BASE ((struct memreg *)              0x0FE08000)
                     37: #define        INTERRUPT_BASE  ((unsigned char *)              0x0FE0A000)
                     38: #define        ETHER_BASE      ((struct obie_device *)         0x0FE0C000)
                     39: #define        COLORMAP_BASE   ((struct obcolormap *)          0x0FE0E000)
                     40: #define        AMD_ETHER_BASE  ((struct amd_ether *)           0x0FE10000)
                     41: #define        SCSI_BASE       ((struct scsichip *)            0x0FE12000)
                     42: #define        DES_BASE        ((struct deschip *)             0x0FE14000)
                     43: #define        ECC_CTRL_BASE   ((struct ecc_ctrl *)            0x0FE16000)
                     44: 
                     45: /* Video memory (at least one plane of it...) */
                     46: #define        VIDEOMEM_BASE   ((char *)                       0x0FE20000)
                     47: 
                     48: /* Handy place to map the invalid PMEG.  Also redzone for stack. */
                     49: #define        INVPMEG_BASE    ((char *)                       0x0FE40000)
                     50: 
                     51: /*
                     52:  * Monitor scratch RAM for stack, trap vectors, and expanded font
                     53:  * (one page = 8K)
                     54:  */
                     55: #define        STACK_BASE      ((char *)                       0x0FE60000)
                     56: #define        STACK_TOP       ((char *)                       0x0FE60C00)
                     57: #define        TRAPVECTOR_BASE ((char *)                       0x0FE60C00)
                     58: #define        FONT_BASE       ((char *)                       0x0FE61000)
                     59: 
                     60: /*
                     61:  * RAM page used to hold the valid-main-memory-pages bitmap if memory
                     62:  * fails self-test.  This will be mapped invalid if memory was all OK.
                     63:  */
                     64: #define        MAINMEM_BITMAP  ((char *)                       0x0FE62000)
                     65: 
                     66: /*
                     67:  * Roughly 512K for mapping in devices & mainmem during boot
                     68:  * Mapped Invalid otherwise (to Invalid PMEG if a whole pmeg invalid).
                     69:  */
                     70: #define        BOOTMAP_BASE    ((char *)                       0x0FE64000)
                     71: 
                     72: /*
                     73:  * Location of PROM code.  The system executes out of these addresses.
                     74:  *
                     75:  * SEE NOTE AT TOP OF FILE IF YOU CHANGE THIS VALUE.
                     76:  */
                     77: #define        PROM_BASE       ((struct sunromvec *)           0x0FEF0000)
                     78: 
                     79: /*
                     80:  * First hardware virtual address where DVMA is possible.
                     81:  * The Monitor does not normally use this address range, but does
                     82:  * use it during bootstrap, via the resalloc() routine.
                     83:  */
                     84: #define        DVMA_BASE       ((char *)                       0x0FF00000)
                     85: 
                     86: /*
                     87:  * One page of scratch RAM for general Monitor global variables.
                     88:  * We put it here so it can be accessed with short absolute addresses.
                     89:  *
                     90:  * SEE NOTE AT TOP OF FILE IF YOU CHANGE THIS VALUE.
                     91:  */
                     92: #define        MONBSS_BASE     MONSHORTPAGE
                     93: 
                     94: /*
                     95:  * The Monitor maps only as much main memory as it can detect; the rest
                     96:  * of the address space (up thru the special addresses defined above)
                     97:  * is mapped as invalid.
                     98:  *
                     99:  * The last pmeg in the page map is always filled with PME_INVALID
                    100:  * entries.  This pmeg number ("The Invalid Pmeg Number") can be used to
                    101:  * invalidate an entire segment's worth of memory.
                    102:  *             B E   C A R E F U L !
                    103:  * If you change a page map entry in this pmeg, you change it for thousands
                    104:  * of virtual addresses.  (The standard getpagemap/setpagemap routines
                    105:  * will cause a trap if you attempt to write a valid page map entry to this
                    106:  * pmeg, but you could do it by hand if you really wanted to mess things up.)
                    107:  *
                    108:  * Because there is four times as much virtual memory space in a single context
                    109:  * as there are total pmegs to map it with, much of the monitor's memory
                    110:  * map must be re-mappings of the same pmegs.  There's no reason to duplicate
                    111:  * useful addresses, and several reasons not to, so we map the extra
                    112:  * virtual address space with the Invalid Pmeg Number.  This means that
                    113:  * some of the address space has their own page map entries, and the other
                    114:  * part all shares the one Invalid Pmeg.  Remember this when trying to map 
                    115:  * things; if the address you want is segmapped to the Invalid Pmeg, you'd
                    116:  * better find it a pmeg before you set a page map entry.
                    117:  *
                    118:  * The Monitor always uses page map entry PME_INVALID to map an invalid
                    119:  * page, although the only relevant bits are the (nonzero) permission bits
                    120:  * and the (zero) Valid bit.  PME_INVALID is defined in ./structconst.h,
                    121:  * which is generated by the Monitor makefile.
                    122:  */
                    123: #define        SEG_INVALID     NUMPMEGS-1
                    124: #define EEPROM    ((struct eeprom *)0x0FE04000)

unix.superglobalmegacorp.com

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