summaryrefslogblamecommitdiffstats
path: root/private/ntos/nthals/halsnip/mips/snipci.h
blob: 0a4651ebecb85d5147fad1c1c925e35af64139d2 (plain) (tree)













































































































































































































































































































































































                                                                                                                                            
//#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_