Annotation of qemu/roms/openbios/drivers/obio.h, revision 1.1.1.1

1.1       root        1: /* Addresses, interrupt numbers, register sizes */
                      2: 
                      3: #define SLAVIO_ZS        0x00000000ULL
                      4: #define SLAVIO_ZS1       0x00100000ULL
                      5: #define ZS_INTR          0x2c
                      6: 
                      7: #define SLAVIO_NVRAM     0x00200000ULL
                      8: #define NVRAM_SIZE       0x2000
                      9: #define NVRAM_IDPROM     0x1fd8
                     10: 
                     11: #define SLAVIO_FD        0x00400000ULL
                     12: #define FD_REGS          15
                     13: #define FD_INTR          0x2b
                     14: 
                     15: #define SLAVIO_SCONFIG   0x00800000ULL
                     16: #define SCONFIG_REGS     1
                     17: 
                     18: #define AUXIO_REGS       1
                     19: 
                     20: #define AUXIO2_REGS      1
                     21: #define AUXIO2_INTR      0x22
                     22: 
                     23: #define SLAVIO_COUNTER   0x00d00000ULL
                     24: #define COUNTER_REGS     0x10
                     25: 
                     26: #define SLAVIO_INTERRUPT 0x00e00000ULL
                     27: #define INTERRUPT_REGS   0x10
                     28: 
                     29: #define SLAVIO_RESET     0x00f00000ULL
                     30: #define RESET_REGS       1
                     31: 
                     32: #define ECC_BASE         0xf00000000ULL
                     33: #define ECC_SIZE         0x20
                     34: 
                     35: #define SLAVIO_SIZE      0x01000000
                     36: 
                     37: #define SUN4M_NCPUS      16
                     38: 
                     39: #define CFG_ADDR         0xd00000510ULL
                     40: #define CFG_SIZE         3
                     41: 
                     42: /* linux/include/asm-sparc/timer.h */
                     43: 
                     44: /* A sun4m has two blocks of registers which are probably of the same
                     45:  * structure. LSI Logic's L64851 is told to _decrement_ from the limit
                     46:  * value. Aurora behaves similarly but its limit value is compacted in
                     47:  * other fashion (it's wider). Documented fields are defined here.
                     48:  */
                     49: 
                     50: /* As with the interrupt register, we have two classes of timer registers
                     51:  * which are per-cpu and master.  Per-cpu timers only hit that cpu and are
                     52:  * only level 14 ticks, master timer hits all cpus and is level 10.
                     53:  */
                     54: 
                     55: #define SUN4M_PRM_CNT_L       0x80000000
                     56: #define SUN4M_PRM_CNT_LVALUE  0x7FFFFC00
                     57: 
                     58: struct sun4m_timer_percpu_info {
                     59:   __volatile__ unsigned int l14_timer_limit;    /* Initial value is 0x009c4000 */
                     60:   __volatile__ unsigned int l14_cur_count;
                     61: 
                     62:   /* This register appears to be write only and/or inaccessible
                     63:    * on Uni-Processor sun4m machines.
                     64:    */
                     65:   __volatile__ unsigned int l14_limit_noclear;  /* Data access error is here */
                     66: 
                     67:   __volatile__ unsigned int cntrl;            /* =1 after POST on Aurora */
                     68:   __volatile__ unsigned char space[PAGE_SIZE - 16];
                     69: };
                     70: 
                     71: struct sun4m_timer_regs {
                     72:        struct sun4m_timer_percpu_info cpu_timers[SUN4M_NCPUS];
                     73:        volatile unsigned int l10_timer_limit;
                     74:        volatile unsigned int l10_cur_count;
                     75: 
                     76:        /* Again, this appears to be write only and/or inaccessible
                     77:         * on uni-processor sun4m machines.
                     78:         */
                     79:        volatile unsigned int l10_limit_noclear;
                     80: 
                     81:        /* This register too, it must be magic. */
                     82:        volatile unsigned int foobar;
                     83: 
                     84:        volatile unsigned int cfg;     /* equals zero at boot time... */
                     85: };
                     86: 
                     87: /*
                     88:  * Registers of hardware timer in sun4m.
                     89:  */
                     90: struct sun4m_timer_percpu {
                     91:     volatile unsigned int l14_timer_limit; /* Initial value is 0x009c4000 */
                     92:     volatile unsigned int l14_cur_count;
                     93: };
                     94: 
                     95: struct sun4m_timer_global {
                     96:     volatile unsigned int l10_timer_limit;
                     97:     volatile unsigned int l10_cur_count;
                     98: };
                     99: 
                    100: /* linux/include/asm-sparc/irq.h */
                    101: 
                    102: /* These registers are used for sending/receiving irqs from/to
                    103:  * different cpu's.
                    104:  */
                    105: struct sun4m_intreg_percpu {
                    106:     unsigned int tbt;        /* Interrupts still pending for this cpu. */
                    107: 
                    108:     /* These next two registers are WRITE-ONLY and are only
                    109:      * "on bit" sensitive, "off bits" written have NO affect.
                    110:      */
                    111:     unsigned int clear;  /* Clear this cpus irqs here. */
                    112:     unsigned int set;    /* Set this cpus irqs here. */
                    113:     unsigned char space[PAGE_SIZE - 12];
                    114: };
                    115: 
                    116: /*
                    117:  * djhr
                    118:  * Actually the clear and set fields in this struct are misleading..
                    119:  * according to the SLAVIO manual (and the same applies for the SEC)
                    120:  * the clear field clears bits in the mask which will ENABLE that IRQ
                    121:  * the set field sets bits in the mask to DISABLE the IRQ.
                    122:  *
                    123:  * Also the undirected_xx address in the SLAVIO is defined as
                    124:  * RESERVED and write only..
                    125:  *
                    126:  * DAVEM_NOTE: The SLAVIO only specifies behavior on uniprocessor
                    127:  *             sun4m machines, for MP the layout makes more sense.
                    128:  */
                    129: struct sun4m_intregs {
                    130:     struct sun4m_intreg_percpu cpu_intregs[SUN4M_NCPUS];
                    131:     unsigned int tbt;                /* IRQ's that are still pending. */
                    132:     unsigned int irqs;               /* Master IRQ bits. */
                    133: 
                    134:     /* Again, like the above, two these registers are WRITE-ONLY. */
                    135:     unsigned int clear;              /* Clear master IRQ's by setting bits here. */
                    136:     unsigned int set;                /* Set master IRQ's by setting bits here. */
                    137: 
                    138:     /* This register is both READ and WRITE. */
                    139:     unsigned int undirected_target;  /* Which cpu gets undirected irqs. */
                    140: };
                    141: 
                    142: /* Dave Redman ([email protected])
                    143:  * The sun4m interrupt registers.
                    144:  */
                    145: #define SUN4M_INT_ENABLE       0x80000000
                    146: #define SUN4M_INT_E14          0x00000080
                    147: #define SUN4M_INT_E10          0x00080000
                    148: 
                    149: #define SUN4M_HARD_INT(x)      (0x000000001 << (x))
                    150: #define SUN4M_SOFT_INT(x)      (0x000010000 << (x))
                    151: 
                    152: #define        SUN4M_INT_MASKALL       0x80000000        /* mask all interrupts */
                    153: #define        SUN4M_INT_MODULE_ERR    0x40000000        /* module error */
                    154: #define        SUN4M_INT_M2S_WRITE     0x20000000        /* write buffer error */
                    155: #define        SUN4M_INT_ECC           0x10000000        /* ecc memory error */
                    156: #define        SUN4M_INT_FLOPPY        0x00400000        /* floppy disk */
                    157: #define        SUN4M_INT_MODULE        0x00200000        /* module interrupt */
                    158: #define        SUN4M_INT_VIDEO         0x00100000        /* onboard video */
                    159: #define        SUN4M_INT_REALTIME      0x00080000        /* system timer */
                    160: #define        SUN4M_INT_SCSI          0x00040000        /* onboard scsi */
                    161: #define        SUN4M_INT_AUDIO         0x00020000        /* audio/isdn */
                    162: #define        SUN4M_INT_ETHERNET      0x00010000        /* onboard ethernet */
                    163: #define        SUN4M_INT_SERIAL        0x00008000        /* serial ports */
                    164: #define        SUN4M_INT_KBDMS         0x00004000        /* keyboard/mouse */
                    165: #define        SUN4M_INT_SBUSBITS      0x00003F80        /* sbus int bits */

unix.superglobalmegacorp.com

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