summaryrefslogtreecommitdiffstats
path: root/private/ntos/nthals/halsni4x/mips/minidef.h
blob: 0e9e98eb71e4bfea8843ef893f7b186a7fc1a2d1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
//#pragma comment(exestr, "$Header: /usr4/winnt/SOURCES/ddk35/src/hal/halsni/mips/RCS/minidef.h,v 1.2 1994/11/09 07:54:26 holli Exp $")
/*+++

Copyright (c) 1993-1994  Siemens Nixdorf Informationssysteme AG

Module Name:

    MINIdef.h

Abstract:

   This file describes hardware addresses
   for SNI Minitower and RM400-Tower which are not common
   to all SNI machines.



---*/

#ifndef _MINIDEF_
#define _MINIDEF_

//
// define various masks for the interrupt sources register
//

/*
    The interrupt Source Register on an MiniTower has the following bits:

      7   6   5   4   3   2   1   0
    +-------------------------------+
    | 1 | 0 | 1 | 0 | 0 | x | 0 | 0 |      0 Low Activ; 1 High activ; x not connected
    +-------------------------------+
                                  |________ EISA/ ISA Interrupt  (HalpEisaDispatch)
                              |____________ SCSI Interrupt       (SCSI Driver)
                          |________________ EIP Interrupt        (RM400 Tower Only/ Unused on Minitower)
                      |____________________ Timer 0              (HalpClockInterrupt1 on MULTI)
                  |________________________ Timer 1              (unused)
              |____________________________ Ethernet             (Net driver)
          |________________________________ Push Button/Timeouts (HalpInt0Dispatch or HalpInt1Dispatch)
      |____________________________________ Irq 9                (unused)

    The second source for Interrupt Information is the MachineStatusRegister, which has the following bits:

      7   6   5   4   3   2   1   0
    +-------------------------------+
    | x | 0 | 0 | 0 | 0 | 0 | 1 | 1 |      0 Low Activ; 1 High activ; x not connected
    +-------------------------------+
                                  |________ ColdStart             (unused)
                              |____________ OverTemperature Int.  (dismiss only / unused on Tower)
                          |________________ EIP Interrupt         (RM400 Tower Only/ unused on Minitower)
                      |____________________ Timer 1               (unused)
                  |________________________ Timer 0               (HalpClockInterrupt1 on MULTI)
              |____________________________ PushButton            (HalpInt0Dispatch or HalpInt1Dispatch)
          |________________________________ Timeouts              (HalpInt0Dispatch or HalpInt1Dispatch)
      |____________________________________ not connected         (unused)
*/

#define RM400_EISA_MASK                      0x01   // these are the interrupts from the Eisa PC core
#define RM400_SCSI_MASK                      0x02
#define RM400_SCSI_EISA_MASK                 0x03
#define RM400_NET_MASK                       0x20
#define RM400_PB_MASK                        0x40
#define RM400_MSR_TEMP_MASK                  0x02   // OverTemperature Interrupt in the MSR (RM400MT only)      (high active)
#define RM400_MSR_EIP_MASK                   0x04   // EIP Interrupt in the MSR             (RM400 Tower only)  (low active)
#define RM400_MSR_TIMER0_MASK                0x10   // Timer 0 Interrupt in the MachineStatusRegister           (low active)
#define RM400_MSR_TIMER1_MASK                0x08   // Timer 1 Interrupt in the MachineStatusRegister           (low active)
#define RM400_MSR_PB_MASK                    0x20   // PushButton is also reported in the MachineStatusRegister (low actice)
#define RM400_MSR_TIMEOUT_MASK               0x40   // Timeout's are indicated in the MachineStatusRegister     (low active)
#define RM400_INTERRUPT_MASK                 0x5f
#define RM400_MSR_MASK                       0xfc   // 11111100 -> xor gives High active bits

#define RM400_TOWER_EISA_MASK                0x01
#define RM400_TOWER_SCSI_MASK                0x02
#define RM400_TOWER_SCSI_EISA_MASK           0x03
#define RM400_TOWER_EIP_MASK                 0x04  // this is the famous EIP Interrupt ... (tower only)
#define RM400_TOWER_NET_MASK                 0x20
#define RM400_TOWER_PB_MASK                  0x40
#define RM400_TOWER_TIMEOUT_MASK             0x40
#define RM400_TOWER_INTERRUPT_MASK           0x5f

#define RM400_ONBOARD_CONTROL_PHYSICAL_BASE  EISA_CONTROL_PHYSICAL_BASE
#define RM400_ONBOARD_MEMORY_PHYSICAL_BASE   EISA_MEMORY_PHYSICAL_BASE
#define RM400_ONBOARD_IO                     (ONBOARD_CONTROL_PHYSICAL_BASE | KSEG1_BASE)
#define RM400_ONBOARD_MEMORY                 (ONBOARD_MEMORY_PHYSICAL_BASE | KSEG1_BASE)

//
// SNI ASIC registers 
//

#define RM400_INTERRUPT_ACK_PHYSICAL_BASE    0x1c000000    // physical base of interrupt (ext. request) register
#define RM400_INTERRUPT_ACK_REGISTER         0xbc000000    // physical base | KSEG1_BASE
#define RM400_EISA_INT_ACK_PHYSICAL_BASE     0x1a000000    // physical base of EISA interrupt ack for the chipset
#define RM400_EISA_INT_ACK_REGISTER          0xba000000    // physical base | KSEG1_BASE
#define RM400_ONBOARD_INT_ACK_PHYSICAL_BASE  RM400_EISA_INT_ACK_PHYSICAL_BASE // physical base of EISA interrupt ack for the chipset
#define RM400_ONBOARD_INT_ACK_REGISTER       RM400_EISA_INT_ACK_REGISTER      // physical base | KSEG1_BASE
#define RM400_INTERRUPT_SOURCE_PHYSICAL_BASE 0x1c020000    // physical base of interrupt source register
#define RM400_INTERRUPT_SOURCE_REGISTER      0xbc020000    // physical base | KSEG1_BASE
#define RM400_VESA_MAP_PHYSICAL_BASE         0x1c010000    // physical base of VLB map register
#define RM400_VESA_MAP                       0xbc010000    // physical base | KSEG1_BASE
#define RM400_ISA_MAP_PHYSICAL_BASE          0x1c0e0000    // physical base of ISA map register (for BusMaster Devices)
#define RM400_ISA_MAP                        0xbc0e0000    // physical base | KSEG1_BASE

#define RM400_LED_PHYSICAL_ADDR              0x1c090000    // LED Register physical 
#define RM400_LED_ADDR                       0xbc090000    // LED Register | KSEG1_BASE 
#define RM400_MCR_PHYSICAL_ADDR              0x1c0b0000    // MachineConfigRegister 
#define RM400_MCR_ADDR                       0xbc0b0000    // MachineConfigRegister | KSEG1 
#define RM400_MSR_PHYSICAL_ADDR              0x1c0a0000    // machine status register 
#define RM400_MSR_ADDR                       0xbc0a0000    // machine status register | KSEG1
 
//
// System Timer (i82C54) and RealTimeClock Chip on RM400-10 and Minitower
//

#define RM400_TIMER0_MASK                    0x10
#define RM400_TIMER1_MASK                    0x08
#define RM400_TIMER_MASK                     0x18          // Timer0 and Timer1
#define RM400_EXTRA_TIMER_PHYSICAL_ADDR      0x1c040000    // physical base of Timer for system Clock
#define RM400_EXTRA_TIMER_ADDR               0xbc040000    // Timer for system Clock |KSEG1_BASE
#define RM400_TIMER0_ACK_ADDR                0xbc050000    // reset Timer0 Interrupt |KSEG1_BASE
#define RM400_TIMER1_ACK_ADDR                0xbc060000    // reset Timer1 Interrupt |KSEG1_BASE

#define RM400_NVRAM_PHYSICAL_BASE            0x1c080000    // physical base of nonvolatile RAM and RTC
#define RM400_REAL_TIME_CLOCK_ADDRESS        0x1c080000    // physical base of RTC
#define RM400_REAL_TIME_CLOCK                0xbc080000    // physical base of RTC | KSEG1_BASE
#define RM400_RESET_DBG_BUT                  0xbc0f0000    // reset debugger int   | KSEG1_BASE
#define RM400_RESET_TEMPBAT_INTR             0xbc0f0000    // reset Temperature/Battery int | KSEG1

//
// RM400 Tower (M8032)
// specific Addresses
//

#define RM400_TOWER_INTERRUPT_SOURCE_PHYSICAL_BASE  0x1c010000    // physical base of interrupt source register
#define RM400_TOWER_INTERRUPT_SOURCE_REGISTER       0xbc010000    // physical base | KSEG1_BASE
#define RM400_TOWER_VESA0_MAP_PHYSICAL_BASE         0x1c0c0000    // physical base of Vesa Slot 0 map register
#define RM400_TOWER_VESA0_MAP                       0xbc0c0000    // physical base | KSEG1_BASE
#define RM400_TOWER_VESA1_MAP_PHYSICAL_BASE         0x1c0d0000    // physical base of Vesa Slot 1 map register
#define RM400_TOWER_VESA1_MAP                       0xbc0d0000    // physical base | KSEG1_BASE

#endif // _MINIDEF_