summaryrefslogtreecommitdiffstats
path: root/private/ntos/nthals/halsnip/mips/snipci.h
blob: 0a4651ebecb85d5147fad1c1c925e35af64139d2 (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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
//#pragma comment(exestr, "$Header: /usr4/winnt/SOURCES/halpcims/src/hal/halsnipm/mips/RCS/snipci.h,v 1.6 1996/02/23 17:55:12 pierre Exp $")
/*+++

Copyright (c) 1993-1994  Siemens Nixdorf Informationssysteme AG

Module Name:

    PCIdef.h

Abstract:

   This file describes hardware addresses
   for SNI PCI machines.



---*/

#ifndef _PCIDEF_
#define _PCIDEF_


// ---------------------
// desktop and minitower -
// ---------------------


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

/*
    The interrupt Source Register on a PCI minitower or desktop has the following bits:

      7   6   5   4   3   2   1   0
    +-------------------------------+
    | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |      0 Low Activ; 1 High activ; x not connected
    +-------------------------------+
                                  |________ INT2 Interrupt (Push button, high temp, pci asic) 
                              |____________ PCI_INTD
                          |________________ PCI_INTC
                      |____________________ PCI_INTB
                  |________________________ PCI_INTA
              |____________________________ EISA_INT
          |________________________________ SCSI_INT
      |____________________________________ ETHERNET_INT


    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 | 1 | x | 0 | 0 | 0 |      0 Low Activ; 1 High activ; x not connected
    +-------------------------------+
                                  |________ Power Off Request (only RM200)
                              |____________ ASIC int
                          |________________ PushButton
                  |________________________ NMI 
              |____________________________ Power Management ie system wakeup (only rm200)
          |________________________________ High Temperature
*/

#define PCI_INTERRUPT_MASK                 0xdf
#define PCI_INT2_MASK                      0x01  // push-button, high temp, asic... 
#define PCI_INTD_MASK                      0x02 
#define PCI_INTC_MASK                      0x04 
#define PCI_INTB_MASK                      0x08 
#define PCI_INTA_MASK                      0x10 
#define PCI_EISA_MASK                      0x20 
#define PCI_SCSI_MASK                      0x40
#define PCI_NET_MASK                       0x80

#define PCI_MSR_MASK_D                     0x67   
#define PCI_MSR_MASK_MT                    0x46   
#define PCI_MSR_POFF_MASK                  0x01
#define PCI_MSR_ASIC_MASK                  0x02
#define PCI_MSR_PB_MASK                    0x04
#define PCI_MSR_NMI                        0x10   // NMI from the EISA controller
#define PCI_MSR_TEMP_MASK                  0x40   // OverTemperature Interrupt in the MSR (RM400MT only)      (high active)
#define PCI_MSR_PMGNT_MASK                 0x20   // power management (system wake-up)

#define PCI_NVMEM_PHYSICAL_BASE            0x1ff00000    // physical base of nonvolatile RAM and RTC

//
// SNI ASIC registers 
//

#define PCI_UCONF_REGISTER           0xbfff0000 
#define PCI_IOADTIMEOUT2_REGISTER    0xbfff0008 
#define PCI_IOMEMCONF_REGISTER       0xbfff0010 
#define PCI_IOMMU_REGISTER           0xbfff0018 
#define PCI_IOADTIMEOUT1_REGISTER    0xbfff0020 
#define PCI_DMAACCESS_REGISTER       0xbfff0028 
#define PCI_DMAHIT_REGISTER          0xbfff0030 
#define PCI_ERRSTATUS_REGISTER       0xbfff0038
#define PCI_MEMSTAT_ECCERR           (1<<0)
#define PCI_MEMSTAT_ECCSINGLE        (1<<3)
#define PCI_MEMSTAT_PARERR           (1<<4)  
#define PCI_ERRADDR_REGISTER         0xbfff0040 
#define PCI_SYNDROME_REGISTER        0xbfff0048 
#define PCI_ITPEND_REGISTER          0xbfff0050 
#define PCI_ASIC_ECCERROR             (1<<8)
#define PCI_ASIC_TRPERROR             (1<<9)
#define PCI_ASIC_IOTIMEOUT            (1<<7)
#define PCI_IRQSEL_REGISTER          0xbfff0058 
#define PCI_TESTMEM_REGISTER         0xbfff0060 
#define PCI_ECCREG_REGISTER          0xbfff0068 
#define PCI_CONF_ADDR_REGISTER       0xbfff0070  // (EISA_IO + 0xcf8) 
#define PCI_ASIC_ID_REGISTER         0xbfff0078  // Read
#define PCI_SOFT_RESET_REGISTER      0xbfff0078  //Write 
#define PCI_PIA_OE_REGISTER          0xbfff0080 
#define PCI_PIA_DATAOUT_REGISTER     0xbfff0088 
#define PCI_PIA_DATAIN_REGISTER      0xbfff0090 
#define PCI_CACHECONF_REGISTER       0xbfff0098 
#define PCI_INVSPACE_REGISTER        0xbfff00A0 
#define PCI_PCICONF_REGISTER         0xbfff0100 

//
// System dependant registers
//

#define PCI_MSR_PHYSICAL_ADDR              0x1fd00000    // machine status register 
#define PCI_MSR_ADDR                       0xbfd00000    // machine status register | KSEG1
#define PCI_CSWITCH_PHYSICAL_ADDR          0x1fd10000    // DIP switch register
#define PCI_CSWITCH_ADDR                   0xbfd10000    // DIP switch register | KSEG1
#define PCI_INTERRUPT_SOURCE_PHYSICAL_BASE 0x1fd20000    // physical base of interrupt source register
#define PCI_INTERRUPT_SOURCE_REGISTER      0xbfd20000    // physical base | KSEG1_BASE
#define PCI_CLR_TMP_PHYSICAL_ADDR          0x1fd40000    // Clear Temperature Register 
#define PCI_CLR_TMP_ADDR                   0xbfd40000    // Clear Temperature Register | KSEG1 
#define PCI_MCR_PHYSICAL_ADDR              0x1fd80000    // MachineConfigRegister 
#define PCI_MCR_ADDR                       0xbfd80000    // MachineConfigRegister | KSEG1 
#define PCI_LED_PHYSICAL_ADDR              0x1fda0000    // LED Register physical 
#define PCI_LED_ADDR                       0xbfda0000    // LED Register | KSEG1_BASE 
#define PCI_ISA_MAP_PHYSICAL_BASE          0x1fdb0000    // physical base of ISA map register (for BusMaster Devices)
#define PCI_ISA_MAP                        0xbfdb0000    // physical base | KSEG1_BASE
#define PCI_CSRSTBP_PHYSICAL_ADDR          0x1fdc0000    // reset dbg button int
#define PCI_CSRSTBP_ADDR                   0xbfdc0000    // reset dbg button int
#define PCI_CLRPOFF_PHYSICAL_ADDR          0x1fdd0000    // RM200 only
#define PCI_CLRPOFF_ADDR                   0xbfdd0000    // RM200 only
#define PCI_PWDN_PHYSICAL_ADDR             0x1fdf0000    // RM200 only
#define PCI_PWDN_ADDR                      0xbfdf0000    // RM200 only
#define PCI_MCR_SOFTRESET                  0xdf        // bit 6 set to zero     
#define PCI_MCR_POWEROFF                   0xfd        // bit 2 set to zero     

//
// RealTimeClock Chip
//

#define PCI_REAL_TIME_CLOCK_ADDRESS        0x14000070    // physical base of RTC
#define PCI_REAL_TIME_CLOCK                0xb4000070    // physical base of RTC | KSEG1_BASE

#define RTC_ADDR_PCIMT                       PCI_REAL_TIME_CLOCK
#define RTC_DATA_PCIMT                       PCI_REAL_TIME_CLOCK + 1

//
// Standard PCI addresses
//

#define PCI_IO_PHYSICAL_BASE                0x14000000      
#define PCI_IO_BASE                         0xb4000000      
#define PCI_MEMORY_PHYSICAL_BASE            0x18000000   // memory area  (cpu 0x18... chip 0x18...) 
#define PCI_MEMORY_BELOW1M_PHYSICAL_BASE    0x10000000   // for memory below 1Mb (cpu 0x10... chip 0x00...)     
#define PCI_MEMORY_BASE                     0xb8000000      

#define PCI_CONF_DATA_REGISTER              (PCI_IO_BASE + 0xcfc) 

#define PCI_IOMEMCONF_ENIOTMOUT              (1 <<21 )
#define PCI_IOMEMCONF_FORCE_ECC              (1 <<29 )
#define PCI_IOMEMCONF_ENCHKECC               (1 <<30 )

#define PCI_ECCTEST_REGISTER                 (1 <<30 )

// def for PCI_MSR_REGISTER

#define PCI_MSR_REV_ASIC                     (1 <<3 )
    
// def for PCI_IRQSEL_REGISTER

#define PCI_IRQSEL_MASK             0x380    // enable IOTIMEOUT ECCERROR TRPERROR
#define PCI_IRQSEL_TIMEOUTMASK      0x80     // enable IOTIMEOUT 
#define PCI_IRQSEL_INT              0x803ff  // Int line = 0 for IOTIMOUT, ECCERROR and TRPERROR

//
// RM300 extra timer (on board)
//

#define PCI_EXTRA_TIMER_PHYSICAL_ADDR      0x1fde0000    // Timer for system clock 
#define PCI_EXTRA_TIMER_ADDR               0xbfde0000    // Timer for system clock | KSEG1_BASE
#define PCI_EXTRA_TIMER_ACK_ADDR           0xbfd90000    // reset extra Timer Interrupt | KSEG1_BASE

//
// Definitions for 82374 Bridge PCI_EISA
//

#define PCI_ESC_ADDR						0xb4000022
#define PCI_ESC_DATA						0xb4000023
#define PCI_ESC_ID_82374					0x2
#define PCI_REV_ID_82374					0x8

#define REV_ID_82374_SB						0x3


// -------------------------
// definitions for PCI Tower -
// -------------------------



#define PCI_TOWER_CONF_ADDR_REGISTER        (PCI_IO_BASE + 0xcf8)
#define PCI_TOWER_LED_ADDR                    PCI_TOWER_CPU_STATUS
#define PCI_TOWER_LED_MASK                    0xFFFCFFFC

//
// MAUI MP_BUS Configuration/Status
//

#define PCI_TOWER_MP_BUS_CONFIG                0xbfff0000

#define PCI_TOWER_GEN_INTERRUPT                0xbfff0008
#define PCI_TOWER_INTERRUPT_SOURCE_REGISTER    PCI_TOWER_GEN_INTERRUPT

// define various mask for interrupt

 
#define PCI_TOWER_EISA_MASK                 0x00400000
#define PCI_TOWER_SCSI1_MASK                0x00100000
#define PCI_TOWER_SCSI2_MASK                0x00200000
#define PCI_TOWER_INTA_MASK                 0x00010000
#define PCI_TOWER_INTB_MASK                 0x00020000
#define PCI_TOWER_INTC_MASK                 0x00040000
#define PCI_TOWER_INTD_MASK                 0x00080000
#define PCI_TOWER_MP_BUS_MASK               0x00000003
#define PCI_TOWER_C_PARITY_MASK             0x00000001      
#define PCI_TOWER_C_REGSIZE                 0x00000002
#define PCI_TOWER_M_ECC_MASK				0x00000004
#define PCI_TOWER_M_ADDR_MASK               0x00000008
#define PCI_TOWER_M_SLT_MASK                0x00000010
#define PCI_TOWER_M_CFG_MASK                0x00000020
#define PCI_TOWER_M_RC_MASK                 0x00000040
#define PCI_TOWER_D_INDICATE_MASK           0x00000080
#define PCI_TOWER_D_ERROR_MASK              0x00000100
#define PCI_TOWER_P_ERROR_MASK              0x00000200

#define PCI_TOWER_MP_BUS_ERROR_STATUS       0xbfff0010
#define PCI_TOWER_MP_BUS_ERROR_ADDR         0xbfff0018
#define PCI_TOWER_MP_BUS_PCI_LOCK           0xbfff0020
#define MP_BUS_PCI_LOCK_REQ					0x2
#define MP_BUS_PCI_LOCK_ACK					0x1

//
// MAUI Memory Configuration registers
//

#define PCI_TOWER_MEM_SLOT_0                0xbfff1000
#define PCI_TOWER_MEM_SLOT_1                0xbfff1008
#define PCI_TOWER_MEM_SLOT_2                0xbfff1010
#define PCI_TOWER_MEM_SLOT_3                0xbfff1018
#define PCI_TOWER_MEM_SLOT_4                0xbfff1020
#define PCI_TOWER_MEM_SLOT_5                0xbfff1028
#define PCI_TOWER_MEM_SLOT_6                0xbfff1030
#define PCI_TOWER_MEM_SLOT_7                0xbfff1038

#define PCI_TOWER_MEM_CONTROL_0             0xbfff1040

#define ERROR_COUNTER_MASK                  0xff000000            
#define ERROR_COUNTER_INITVALUE             0xff0000    // to get overflow with ffff errors        
#define PCI_TOWER_MEM_CONTROL_1             0xbfff1048
#define PCI_TOWER_MEM_CONTROL_2             0xbfff1050

#define PCI_TOWER_MEM_CONFIG                0xbfff1058
#define PCI_TOWER_MEM_ERROR_DATA_H          0xbfff1060
#define PCI_TOWER_MEM_ERROR_DATA_L          0xbfff1068
#define PCI_TOWER_MEM_ERROR_ECC             0xbfff1070
#define PCI_TOWER_MEM_ERROR_ADDR            0xbfff1078
#define MEM_ADDR_MASK                       0xffffffe0

// PCI configuration register
#define PCI_TOWER_COMMAND_OFFSET            0x04
#define PCI_TOWER_PM_LOCKSPACE              0x64
#define PCI_TOWER_INTERRUPT_OFFSET          0x68
#define PCI_TOWER_INITIATOR_ADDR_OFFSET     0x6c
#define PCI_TOWER_TARGET_ADDR_OFFSET        0x70
#define PCI_TOWER_PAR_0_OFFSET              0x74
#define PCI_TOWER_PAR_1_OFFSET              0x78

// definitions for command register

#define EN_SERR                             0x100

// definitions for PCI_interrupt register

#define PI_RESET                            0xff000000      // reset interrupt in PCI_Interrupt 

#define PI_INITF                            0x80000000      // mask for first Initiator interrupt in PCI_Interrupt 
#define PI_INITM                            0x40000000      // mask for multi Initiator interrupt in PCI_Interrupt 
#define PI_TARGF                            0x20000000      // mask for first Target interrupt in PCI_Interrupt 
#define PI_TARGM                            0x10000000      // mask for multi Target interrupt in PCI_Interrupt 
#define PI_PARF                             0x08000000      // mask for first Parity interrupt in PCI_Interrupt 
#define PI_PARM                             0x04000000      // mask for multi Parity interrupt in PCI_Interrupt 


// Cause for initiator interrupts
#define PI_READ_PCI                         0x00200000        // from PCI
#define PI_CPU_PCI_TIMO                     0x00100000        // CPU to PCI timeout
#define PI_CPU_PCI_ADDR                     0x00080000        // address error
#define PI_CPU_PCI_PAR                      0x00020000        // initiator receives target abort
#define PI_REC_TARGET_RETRY                 0x00010000        // initiator receives target retry
#define PI_REC_TARGET_DISCON                0x00008000        // initiator receives target disconnect
// Cause for target interrupts
#define PI_TARGET_MEM                       0x00000080        // read error from memory
#define PI_TARGET_RETRY                     0x00000040        // target acts retry
#define PI_TARGET_ADDR_PAR                  0X00000020        // PCI_to_MEM addr parity
#define PI_TARGET_DATA_PAR                  0x00000010        // PCI_to_MEM data patity
// enable interrupts
#define    EN_INIT_INT                      0x00800000        // enable initiator interrupt
#define EN_INIT_INTR                        0x00400000        // enable initiator receives target disconnect 
#define EN_TARG_INTR                        0x00000001        // enable target interrupt
#define MASK_INT                            0x00c00001
//
// DCU interface registers
//

#define PCI_TOWER_CONTROL                   0xbfff2000

#define PCI_TOWER_INDICATE                  0xbfff2008

// sources for DCU interrupt
                                              
#define PCI_TOWER_DI_PB_MASK                0x00000100
#define PCI_TOWER_DI_EISA_NMI               0x00000080
#define PCI_TOWER_DI_AC_FAIL                0x00000004
#define PCI_TOWER_DI_FAN_FAIL               0x00000008
#define PCI_TOWER_DI_THERMO1_FAIL           0x00000010
#define PCI_TOWER_DI_THERMO2_FAIL           0x00000020
#define PCI_TOWER_DI_THERMO3_FAIL           0x00000040
#define PCI_TOWER_DI_NT_FAN_FAIL            0x00000200
#define PCI_TOWER_DI_SCSI1_TERM_FAIL        0x00000400
#define PCI_TOWER_DI_SCSI2_INT_TERM_FAIL    0x00000800
#define PCI_TOWER_DI_SCSI2_EXT_TERM_FAIL    0x00001000
#define PCI_TOWER_DI_AUI_FAIL               0x00002000
#define PCI_TOWER_DI_EXTRA_TIMER            0x00040000

#define PCI_TOWER_DCU_CONTROL				0xbfff2000
#define PCI_TOWER_DCU_STATUS                0xbfff2010
#define PCI_TOWER_CPU_STATUS                0xbfff2018
#define PCI_TOWER_DCU_ERROR                 0xbfff2020

// definitions for DCU error

#define DE_CPU_ID                           0x00006000        
#define DE_WRN                              0x00001000
#define DE_ADDR                             0x00000fe0
#define DE_ERR_ADDR                         0x1fff2000

// definitions for additional timer

#define    PCI_TOWER_TIMER_CMD_REG              0xbff03ffb
#define    PCI_TOWER_TIMER_COUNT_REG            0xbff03ffc
#define    PCI_TOWER_TIMER_VALUE_REG            0xbff03ffd

// definitions for DCU Control

#define DC_SWRESET							0x04000000
#define DC_POWEROFF                         0x02000000

#endif // _PCIDEF_