/*++ BUILD Version: 0000     Increment this if a change has global effects

Copyright (c) 1994 Digital Euipment Corporation

Module Name:

    axp21164.h

Abstract:

    This module defines the DECchip 21164-specific structures that are
    defined in the PAL but must be visible to the HAL.

Revision History:

--*/

#ifndef _AXP21164_
#define _AXP21164_


//
// Define the "special" processor bus used by all machines that run a
// DECchip 21164.  The processor bus is used to access the internal
// performance counters.
//

#define PROCESSOR_BUS_21164 21164

//
// Define the physical address bit that turns on user-mode access
// to I/O space in the pfn of a pte.  This bit is required because of
// the current 36 bit physical address space limit on NT.
//

#define EV5_USER_IO_ADDRESS_SPACE (ULONGLONG)(0x800000000)

//
// Define the number of entries for repeated internal processor registers.
//

#define ITB_ENTRIES_21164 32
#define DTB_ENTRIES_21164 64
#define PAL_TEMPS_21164   24

//
// Define the Ibox Internal Processor Register formats.
//

//
// Define the ITB_PTE - write format.
//

typedef union _ITB_PTE_21164{
    struct {
        ULONG Ignore1: 4;
        ULONG Asm: 1;
        ULONG Gh: 2;
        ULONG Ignore2: 1;
        ULONG Kre: 1;
        ULONG Ere: 1;
        ULONG Sre: 1;
        ULONG Ure: 1;
        ULONG Ignore3: 20;
        ULONG Pfn: 27;
        ULONG Ignore4: 5;
    } ;
    ULONGLONG all;
} ITB_PTE_21164, *PITB_PTE_21164;

//
// Define the ITB_PTE_TEMP - read format.
//

typedef union _ITB_PTE_TEMP_21164{
    struct {
        ULONG Raz1: 13;
        ULONG Asm: 1;
        ULONG Raz2: 4;
        ULONG Kre: 1;
        ULONG Ere: 1;
        ULONG Sre: 1;
        ULONG Ure: 1;
        ULONG Raz3: 7;
        ULONG Ghd: 3;
        ULONG Pfn: 27;
        ULONG Raz4: 5;
    } ;
    ULONGLONG all;
} ITB_PTE_TEMP_21164, *PITB_PTE_TEMP_21164;

//
// Define the ITB_ASN.
//

typedef union _ITB_ASN_21164{
    struct {
        ULONG Raz1: 4;
        ULONG Asn: 7;
        ULONG Raz2: 21;
        ULONG Raz3: 32;
    } ;
    ULONGLONG all;
} ITB_ASN_21164, *PITB_ASN_21164;

//
// Define the ICPERR_STAT.
//

typedef union _ICPERR_STAT_21164{
    struct {
        ULONG Raz1: 11;
        ULONG Dpe: 1;
        ULONG Tpe: 1;
        ULONG Tmr: 1;
        ULONG Raz2: 18;
        ULONG Raz3: 32;
    } ;
    ULONGLONG all;
} ICPERR_STAT_21164, *PICPERR_STAT_21164;

//
// Define the EXC_SUM.
//

typedef union _EXC_SUM_21164{
    struct {
        ULONG Raz1: 10;
        ULONG Swc: 1;
        ULONG Inv: 1;
        ULONG Dze: 1;
        ULONG Fov: 1;
        ULONG Unf: 1;
        ULONG Ine: 1;
        ULONG Iov: 1;
        ULONG Raz2: 15;
        ULONG Raz3: 32;
    } ;
    ULONGLONG all;
} EXC_SUM_21164, *PEXC_SUM_21164;

//
// Define the PS.
//

typedef union _PS_21164{
    struct {
        ULONG Raz1: 3;
        ULONG Cm0: 1;
        ULONG Cm1: 1;
        ULONG Raz2: 27;
        ULONG Raz3: 32;
    } ;
    ULONGLONG all;
} PS_21164, *PPS_21164;

//
// Define the ICSR.
//

typedef union _ICSR_21164{
    struct {
        ULONG Raz1: 8;
        ULONG Pme: 2;
        ULONG Raz2: 10;
        ULONG Imsk: 4;
        ULONG Tmm: 1;
        ULONG Tmd: 1;
        ULONG Fpe: 1;
        ULONG Hwe: 1;
        ULONG Sp32: 1;
        ULONG Sp43: 1;
        ULONG Sde: 1;
        ULONG Raz3: 1;
        ULONG Crde: 1;
        ULONG Sle: 1;
        ULONG Fms: 1;
        ULONG Fbt: 1;
        ULONG Fbd: 1;
        ULONG Dbs: 1;
        ULONG Ista: 1;
        ULONG Tst: 1;
        ULONG Raz4: 24;
    } ;
    ULONGLONG all;
} ICSR_21164, *PICSR_21164;


//
// Define the SIRR.
//

typedef union _SIRR_21164{
    struct {
        ULONG Raz1: 4;
        ULONG Sir: 15;
        ULONG Raz2: 13;
        ULONG Raz3: 32;
    } ;
    ULONGLONG all;
} SIRR_21164, *PSIRR_21164;

//
// Define the HWINT_CLR.
//

typedef union _HWINT_CLR_21164{
    struct {
        ULONG Raz1: 27;
        ULONG Pc0c: 1;
        ULONG Pc1c: 1;
        ULONG Pc2c: 1;
        ULONG Raz2: 2;
        ULONG Crdc: 1;
        ULONG Slc: 1;
        ULONG Raz3: 30;
    } ;
    ULONGLONG all;
} HWINT_CLR_21164, *PHW_INTCLR_21164;

//
// Define the ISR.
//

typedef union _ISR_21164{
    struct {
        ULONG Ast: 4;
        ULONG Sirr: 15;
        ULONG Atr: 1;
        ULONG I20: 1;
        ULONG I21: 1;
        ULONG I22: 1;
        ULONG I23: 1;
        ULONG Raz1: 3;
        ULONG Pc0: 1;
        ULONG Pc1: 1;
        ULONG Pc2: 1;
        ULONG Pfl: 1;
        ULONG Mck: 1;
        ULONG Crd: 1;
        ULONG Sli: 1;
        ULONG Hlt: 1;
        ULONG Raz2: 29;
    } ;
    ULONGLONG all;
} ISR_21164, *PISR_21164;

//
// Define the PMCTR.
//

typedef union _PMCTR_21164{
    struct {
        ULONG Sel2: 4;
        ULONG Sel1: 4;
        ULONG Kk: 1;
        ULONG Kp: 1;
        ULONG Ctl2: 2;
        ULONG Ctl1: 2;
        ULONG Ctl0: 2;
        ULONG Ctr2: 14;
        ULONG Ku: 1;
        ULONG Sel0: 1;
        ULONG Ctr1: 16;
        ULONG Ctr0: 16;
    } ;
    ULONGLONG all;
} PMCTR_21164, *PPMCTR_21164;

//
// Define the Mbox and Dcache Internal Processor Register formats.
//

//
// Define the DTB_ASN.
//

typedef union _DTB_ASN_21164{
    struct {
        ULONG Raz1: 32;
        ULONG Raz2: 25;
        ULONG Asn: 7;
    } ;
    ULONGLONG all;
} DTB_ASN_21164, *PDTB_ASN_21164;

//
// Define the DTB_CM.
//

typedef union _DTB_CM_21164{
    struct {
        ULONG Raz1: 3;
        ULONG Cm0: 1;
        ULONG Cm1: 1;
        ULONG Raz2: 27;
        ULONG Raz3: 32;
    } ;
    ULONGLONG all;
} DTB_CM_21164, *PDTB_CM_21164;

//
// Define the DTB_PTE.
//

typedef union _DTB_PTE_21164{
    struct {
        ULONG Ignore1: 1;
        ULONG For: 1;
        ULONG Fow: 1;
        ULONG Ignore2: 1;
        ULONG Asm: 1;
        ULONG Gh: 2;
        ULONG Ignore3: 1;
        ULONG Kre: 1;
        ULONG Ere: 1;
        ULONG Sre: 1;
        ULONG Ure: 1;
        ULONG Kwe: 1;
        ULONG Ewe: 1;
        ULONG Swe: 1;
        ULONG Uwe: 1;
        ULONG Ignore4: 16;
        ULONG Pfn: 27;
        ULONG Ignore5: 5;
    } ;
    ULONGLONG all;
} DTB_PTE_21164, *PDTB_PTE_21164;

//
// Define the DTB_PTE_TEMP.
//

typedef union _DTB_PTE_TEMP_21164{
    struct {
        ULONG For: 1;
        ULONG Fow: 1;
        ULONG Kre: 1;
        ULONG Ere: 1;
        ULONG Sre: 1;
        ULONG Ure: 1;
        ULONG Kwe: 1;
        ULONG Ewe: 1;
        ULONG Swe: 1;
        ULONG Uwe: 1;
        ULONG Raz1: 3;
        ULONG Pfn31_13: 19;
        ULONG Pfn39_32: 8;
        ULONG Raz2: 24;
    } ;
    ULONGLONG all;
} DTB_PTE_TEMP_21164, *PDTB_PTE_TEMP_21164;

//
// Define the MM_STAT.
//

typedef union _MM_STAT_21164{
    struct {
        ULONG Wr: 1;
        ULONG Acv: 1;
        ULONG For: 1;
        ULONG Fow: 1;
        ULONG DtbMiss: 1;
        ULONG BadVa: 1;
        ULONG Ra: 5;
        ULONG Opcode: 6;
        ULONG Raz1: 15;
        ULONG Raz2: 32;
    } ;
    ULONGLONG all;
} MM_STAT_21164, *PMM_STAT_21164;

//
// Define the DC_PERR_STAT.
//

typedef union _DC_PERR_STAT_21164{
    struct {
        ULONG Seo: 1;
        ULONG Lock: 1;
        ULONG Dp0: 1;
        ULONG Dp1: 1;
        ULONG Tp0: 1;
        ULONG Tp1: 1;
        ULONG Raz1: 26;
        ULONG Raz2: 32;
    } ;
    ULONGLONG all;
} DC_PERR_STAT_21164, *PDC_PERR_STAT_21164;

//
// Define the MCSR.
//

typedef union _MCSR_21164{
    struct {
        ULONG MBigEndian: 1;
        ULONG Sp32: 1;
        ULONG Sp43: 1;
        ULONG DbgTestSel0: 1;
        ULONG EBigEndian: 1;
        ULONG DbgTestSel1: 1;
        ULONG Raz1: 26;
        ULONG Raz2: 32; 
    } ;
    ULONGLONG all;
} MCSR_21164, *PMCSR_21164;

//
// Define the DC_MODE.
//

typedef union _DC_MODE_21164{
    struct {
        ULONG DcEna: 1;
        ULONG DcFhit: 1;
        ULONG DcBadParity: 1;
        ULONG DcPerrDisable: 1;
        ULONG DcDoa: 1;
        ULONG Raz1: 27;
        ULONG Raz2: 32;
    } ;
    ULONGLONG all;
} DC_MODE_21164, *PDC_MODE_21164;

//
// Define the MAF_MODE.
//

typedef union _MAF_MODE_21164{
    struct {
        ULONG DreadNomerge: 1;
        ULONG WbFlushAlways: 1;
        ULONG WbNomerge: 1;
        ULONG MafNoByPass: 1;
        ULONG WbCntDisable: 1;
        ULONG MafArbDisable: 1;
        ULONG DreadPending: 1;
        ULONG WbPending: 1;
        ULONG Raz1: 24;
        ULONG Raz2: 32;
    } ;
    ULONGLONG all;
} MAF_MODE_21164, *PMAF_MODE_21164;

//
// Define the ALT_MODE.
//

typedef union _ALT_MODE_21164{
    struct {
        ULONG Ignore1: 3;
        ULONG Am: 2;
        ULONG Ignore2: 27;
        ULONG Ignore3: 32;
    } ;
    ULONGLONG all;
} ALT_MODE_21164, *PALT_MODE_21164;

//
// Define the CC_CTL.
//

typedef union _CC_CTL_21164{
    struct {
        ULONG Count;
        ULONG CcEna: 1;
        ULONG Ignore: 31;
    } ;
    ULONGLONG all;
} CC_CTL_21164, *PCC_CTL_21164;

//
// Define Cbox Internal Processor Registers.
// (These IPRs are accessed via ld/st rather than mf/mt.)
//

//
// Define physical and superpage addresses for the CBOX registers.
//

#define BASE_SUPERVA (ULONGLONG)(0xfffffc0000000000)

#define SC_CTL_PA      (ULONGLONG)(0xfffff000a8)
#define SC_STAT_PA     (ULONGLONG)(0xfffff000e8)
#define SC_ADDR_PA     (ULONGLONG)(0xfffff00188)
#define BC_CONTROL_PA  (ULONGLONG)(0xfffff00128)
#define BC_CONFIG_PA   (ULONGLONG)(0xfffff001c8)
#define BC_TAG_ADDR_PA (ULONGLONG)(0xfffff00108)
#define EI_STAT_PA     (ULONGLONG)(0xfffff00168)
#define EI_ADDR_PA     (ULONGLONG)(0xfffff00148)
#define FILL_SYN_PA    (ULONGLONG)(0xfffff00068)
#define LD_LOCK_PA     (ULONGLONG)(0xfffff001e8)

#define SC_CTL_SVA      (ULONGLONG)( BASE_SUPERVA | SC_CTL_PA )
#define SC_STAT_SVA     (ULONGLONG)( BASE_SUPERVA | SC_STAT_PA )
#define SC_ADDR_SVA     (ULONGLONG)( BASE_SUPERVA | SC_ADDR_PA )
#define BC_CONTROL_SVA  (ULONGLONG)( BASE_SUPERVA | BC_CONTROL_PA )
#define BC_CONFIG_SVA   (ULONGLONG)( BASE_SUPERVA | BC_CONFIG_PA )
#define BC_TAG_ADDR_SVA (ULONGLONG)( BASE_SUPERVA | BC_TAG_ADDR_PA )
#define EI_STAT_SVA     (ULONGLONG)( BASE_SUPERVA | EI_STAT_PA )
#define EI_ADDR_SVA     (ULONGLONG)( BASE_SUPERVA | EI_ADDR_PA )
#define FILL_SYN_SVA    (ULONGLONG)( BASE_SUPERVA | FILL_SYN_PA )
#define LD_LOCK_SVA     (ULONGLONG)( BASE_SUPERVA | LD_LOCK_PA )

//
// Define the offsets for the Cbox IPRs to be used with specialized
// read/write ipr routines for EV5.
//

typedef struct _CBOX_IPRS_21164{
    UCHAR FillSyn;
    UCHAR Unused1;
    UCHAR ScCtl;
    UCHAR Unused2;
    UCHAR ScStat;
    UCHAR BcTagAddr;
    UCHAR BcControl;
    UCHAR EiAddr;
    UCHAR EiStat;
    UCHAR ScAddr;
    UCHAR Unused3;
    UCHAR BcConfig;
    UCHAR LdLock;
} CBOX_IPRS_21164, *PCBOX_IPRS_21164;

//
// Define the SC_CTL.
//

typedef union _SC_CTL_21164{
    struct {
        ULONG ScFhit: 1;
        ULONG ScFlush: 1;
        ULONG ScTagStat: 6;
        ULONG ScFbDp: 4;
        ULONG ScBlkSize: 1;
        ULONG ScSetEn: 3;
        ULONG Raz1: 16;
        ULONG Raz2: 32;
    } ;
    ULONGLONG all;
} SC_CTL_21164, *PSC_CTL_21164;

//
// Define the SC_ADDR.
//

typedef union _SC_ADDR_21164{
    struct {
        ULONGLONG Rao1: 4;
        ULONGLONG ScAddr: 35;
        ULONGLONG Raz1: 1;
        ULONGLONG Rao2: 24;
    };
    ULONGLONG all;
} SC_ADDR_21164, *PSC_ADDR_21164;

//
// Define the SC_STAT.
//

typedef union _SC_STAT_21164{
    struct {
        ULONG ScTperr: 3;
        ULONG ScDperr: 8;
        ULONG CboxCmd: 5;
        ULONG ScScndErr: 1;
        ULONG Raz1: 15;
        ULONG Raz2: 32;
    } ;
    ULONGLONG all;
} SC_STAT_21164, *PSC_STAT_21164;

//
// Define the BC_CONTROL.
//

typedef union _BC_CONTROL_21164{
    struct {
        ULONG BcEnabled: 1;
        ULONG AllocCyc: 1;
        ULONG EiCmdGrp1: 1;
        ULONG EiCmdGrp2: 1;
        ULONG CorrFillDat: 1;
        ULONG VtmFirst: 1;
        ULONG EiEccOrParity: 1;
        ULONG BcFhit: 1;
        ULONG BcTagStat: 5;
        ULONG BcBadDat: 2;
        ULONG EiDisErr: 1;
        ULONG TlPipeLatch: 1;
        ULONG BcWave: 2;
        ULONG PmMuxSel1: 3;
        ULONG PmMuxSel2: 3;
        ULONG DbgMuxSel: 1;
        ULONG DisBafByp: 1;
        ULONG DisScVicBuf: 1;
        ULONG Raz1: 4;
        ULONG Raz2: 32;
    } ;
    ULONGLONG all;
} BC_CONTROL_21164, *PBC_CONTROL_21164;

//
// Define the BC_CONFIG.
//

typedef union _BC_CONFIG_21164{
    struct {
        ULONG BcSize: 3;
        ULONG Reserved1: 1;
        ULONG BcRdSpd: 4;
        ULONG BcWrSpd: 4;
        ULONG BcRdWrSpc: 3;
        ULONG Reserved2: 1;
        ULONG FillWeOffset: 3;
        ULONG Reserved3: 1;
        ULONG BcWeCtl: 9;
        ULONG Reserved4: 3;
        ULONG Reserved5: 32;
    } ;
    ULONGLONG all;
} BC_CONFIG_21164, *PBC_CONFIG_21164;

//
// Define the EI_STAT.
//

typedef union _EI_STAT_21164{
    struct {
        ULONG Ra01: 24;
        ULONG ChipId: 4;
        ULONG BcTperr: 1;
        ULONG BcTcperr: 1;
        ULONG EiEs: 1;
        ULONG CorEccErr: 1;
        ULONG UncEccErr: 1;
        ULONG EiParErr: 1;
        ULONG FilIrd: 1;
        ULONG SeoHrdErr: 1;
        ULONG Ra02: 28;
    } ;
    ULONGLONG all;
} EI_STAT_21164, *PEI_STAT_21164;

//
// Define the EI_ADDR.
//

typedef union _EI_ADDR_21164{
    struct {
        ULONGLONG Rao1: 4;
        ULONGLONG EiAddr: 36;
        ULONGLONG Rao2: 24;
    };
    ULONGLONG all;
} EI_ADDR_21164, *PEI_ADDR_21164;

//
// Define the BC_TAG_ADDR.
//

typedef union _BC_TAG_ADDR_21164{
    struct {
        ULONG Ra01: 12;
        ULONG Hit: 1;
        ULONG TagCtlP: 1;
        ULONG TagCtlD: 1;
        ULONG TagCtlS: 1;
        ULONG TagCtlV: 1;
        ULONG TagP: 1;
        ULONG Ra02: 2;
        ULONG Tag0: 12;
        ULONG Tag1: 7;
        ULONG Ra03: 25;
    } ;
    ULONGLONG all;
} BC_TAG_ADDR_21164, *PBC_TAG_ADDR_21164;

//
// Define the FILL_SYN.
//

typedef union _FILL_SYN_21164{
    struct {
        ULONG Lo: 8;
        ULONG Hi: 8;
        ULONG Raz1: 16;
        ULONG Raz2: 32;
    } ;
    ULONGLONG all;
} FILL_SYN_21164, *PFILL_SYN_21164;



//
// Define EV5 IPLs (interrupt priority levels.
//

#define EV5_IPL0   (0)
#define EV5_IPL1   (1)
#define EV5_IPL2   (2)
#define EV5_IPL3   (3)
#define EV5_IPL4   (4)
#define EV5_IPL5   (5)
#define EV5_IPL6   (6)
#define EV5_IPL7   (7)
#define EV5_IPL8   (8)
#define EV5_IPL9   (9)
#define EV5_IPL10 (10)
#define EV5_IPL11 (11)
#define EV5_IPL12 (12)
#define EV5_IPL13 (13)
#define EV5_IPL14 (14)
#define EV5_IPL15 (15)
#define EV5_IPL16 (16)
#define EV5_IPL17 (17)
#define EV5_IPL18 (18)
#define EV5_IPL19 (19)
#define EV5_IPL20 (20)
#define EV5_IPL21 (21)
#define EV5_IPL22 (22)
#define EV5_IPL23 (23)
#define EV5_IPL24 (24)
#define EV5_IPL25 (25)
#define EV5_IPL26 (26)
#define EV5_IPL27 (27)
#define EV5_IPL28 (28)
#define EV5_IPL29 (29)
#define EV5_IPL30 (30)
#define EV5_IPL31 (31)

//
// Define interrupt vector values for EV5.
//

#define EV5_IPL20_VECTOR (20)
#define EV5_IPL21_VECTOR (21)
#define EV5_IPL22_VECTOR (22)
#define EV5_IPL23_VECTOR (23)

#define EV5_IRQ0_VECTOR EV5_IPL20_VECTOR
#define EV5_IRQ1_VECTOR EV5_IPL21_VECTOR
#define EV5_IRQ2_VECTOR EV5_IPL22_VECTOR
#define EV5_IRQ3_VECTOR EV5_IPL23_VECTOR

#define EV5_HALT_VECTOR (14)
#define EV5_PFL_VECTOR (24)
#define EV5_MCHK_VECTOR (12)
#define EV5_CRD_VECTOR (25)
#define EV5_PC0_VECTOR (6)
#define EV5_PC1_VECTOR (8)
#define EV5_PC2_VECTOR (15)

//
// Define the Interrupt Mask structure communicated between the 
// HAL and PALcode.
//

typedef union _IMSK_21164{
    struct{
        ULONG Irq0Mask: 1;
        ULONG Irq1Mask: 1;
        ULONG Irq2Mask: 1;
        ULONG Irq3Mask: 1;
        ULONG Reserved: 28;
    };
    ULONG all;
} IMSK_21164, *PIMSK_21164;

//
// PALcode Event Counters for the 21164
// This is the structure of the data returned by the rdcounters call pal.
//

typedef struct _COUNTERS_21164{
    ULONGLONG MachineCheckCount;
    ULONGLONG ArithmeticExceptionCount;
    ULONGLONG InterruptCount;
    ULONGLONG ItbMissCount;
    ULONGLONG DtbMissSingleCount;
    ULONGLONG DtbMissDoubleCount;
    ULONGLONG IAccvioCount;
    ULONGLONG DfaultCount;
    ULONGLONG UnalignedCount;
    ULONGLONG OpcdecCount;
    ULONGLONG FenCount;
    ULONGLONG ItbTnvCount;
    ULONGLONG DtbTnvCount;
    ULONGLONG PdeTnvCount;
    ULONGLONG HardwareInterruptCount;
    ULONGLONG SoftwareInterruptCount;
    ULONGLONG SpecialInterruptCount;
    ULONGLONG HaltCount;
    ULONGLONG RestartCount;
    ULONGLONG DrainaCount;
    ULONGLONG RebootCount;
    ULONGLONG InitpalCount;
    ULONGLONG WrentryCount;
    ULONGLONG SwpirqlCount;
    ULONGLONG RdirqlCount;
    ULONGLONG DiCount;
    ULONGLONG EiCount;
    ULONGLONG SwppalCount;
    ULONGLONG SsirCount;
    ULONGLONG CsirCount;
    ULONGLONG RfeCount;
    ULONGLONG RetsysCount;
    ULONGLONG SwpctxCount;
    ULONGLONG SwpprocessCount;
    ULONGLONG RdmcesCount;
    ULONGLONG WrmcesCount;
    ULONGLONG TbiaCount;
    ULONGLONG TbisCount;
    ULONGLONG TbisasnCount;
    ULONGLONG DtbisCount;
    ULONGLONG RdkspCount;
    ULONGLONG SwpkspCount;
    ULONGLONG RdpsrCount;
    ULONGLONG RdpcrCount;
    ULONGLONG RdthreadCount;
    ULONGLONG TbimCount;
    ULONGLONG TbimasnCount;
    ULONGLONG RdcountersCount;
    ULONGLONG RdstateCount;
    ULONGLONG WrperfmonCount;
    ULONGLONG InitpcrCount;
    ULONGLONG BptCount;
    ULONGLONG CallsysCount;
    ULONGLONG ImbCount;
    ULONGLONG GentrapCount;
    ULONGLONG RdtebCount;
    ULONGLONG KbptCount;
    ULONGLONG CallkdCount;
    ULONGLONG AddressSpaceSwapCount;
    ULONGLONG AsnWrapCount;
    ULONGLONG Misc1Count;
    ULONGLONG Misc2Count;
    ULONGLONG Misc3Count;
    ULONGLONG Misc4Count;
    ULONGLONG Misc5Count;
    ULONGLONG Misc6Count;
    ULONGLONG Misc7Count;
    ULONGLONG Misc8Count;
    ULONGLONG Misc9Count;
    ULONGLONG Misc10Count;
    ULONGLONG Misc11Count;
    ULONGLONG Misc12Count;
    ULONGLONG Misc13Count;
    ULONGLONG Misc14Count;
    ULONGLONG Misc15Count;
    ULONGLONG Misc16Count;
    ULONGLONG Misc17Count;
    ULONGLONG Misc18Count;
    ULONGLONG Misc19Count;
    ULONGLONG Misc20Count;
} COUNTERS_21164, *PCOUNTERS_21164;

//
// Types of performance counters.
//

typedef enum _AXP21164_PCCOUNTER{
	Ev5PerformanceCounter0 = 0,
	Ev5PerformanceCounter1 = 1,
	Ev5PerformanceCounter2 = 2
} AXP21164_PCCOUNTER, *PAXP21164_PCCOUNTER;

//
// Mux control values
//

typedef enum _AXP21164_PCMUXCONTROL{
	Ev5Cycles = 0x0,
	Ev5Instructions = 0x1,
	Ev5NonIssue = 0x0,
	Ev5SplitIssue = 0x1,
	Ev5PipeDry = 0x2,
	Ev5ReplayTrap = 0x3,
	Ev5SingleIssue = 0x4,
	Ev5DualIssue = 0x5,
	Ev5TripleIssue = 0x6,
	Ev5QuadIssue = 0x7,
	Ev5FlowChangeInst = 0x8,
	Ev5IntOpsIssued = 0x9,
	Ev5FPOpsIssued = 0xa,
	Ev5LoadsIssued = 0xb,
	Ev5StoresIssued = 0xc,
	Ev5IcacheIssued = 0xd,
	Ev5DcacheAccesses = 0xe,
	Ev5CBOXInput1 = 0xf,
	Ev5LongStalls = 0x0,
	Ev5PCMispredicts = 0x2,
	Ev5BRMispredicts = 0x3,
	Ev5IcacheRFBMisses = 0x4,
	Ev5ITBMisses = 0x5,
	Ev5DcacheLDMisses = 0x6,
	Ev5DTBMisses = 0x7,
	Ev5LDMergedMAF = 0x8,
	Ev5LDUReplayTraps = 0x9,
	Ev5WBMAFReplayTraps = 0xa,
	Ev5ExternPerfmonhInput = 0xb,
	Ev5CPUCycles = 0xc,
	Ev5MBStallCycles = 0xd,
	Ev5LDxLInstIssued = 0xe,
	Ev5CBOXInput2 = 0xf,

	//
	// Special MUX controls
	//

    Ev5PcSpecial = 0x10,

	Ev5JsrRetIssued = 0x10,
	Ev5CondBrIssued = 0x11,
	Ev5AllFlowIssued = 0x12,

    Ev5ScMux1 = 0x20,
    Ev5ScAccesses = 0x20,
    Ev5ScReads = 0x21,
    Ev5ScWrites = 0x22,
    Ev5ScVictims = 0x23,
    Ev5ScUndefined = 0x24,
    Ev5ScBcacheAccesses = 0x25,
    Ev5ScBcacheVictims = 0x26,
    Ev5ScSystemCmdReq = 0x27,
    Ev5ScMux2 = 0x28,
    Ev5ScMisses = 0x28,
    Ev5ScReadMisses = 0x29,
    Ev5ScWriteMisses = 0x2a,
    Ev5ScSharedWrites = 0x2b,
    Ev5ScWrites2 = 0x2c,
    Ev5ScBcacheMisses = 0x2d,
    Ev5ScSysInvalidate = 0x2e,
    Ev5ScSysReadReq = 0x2f,

} AXP21164_PCMUXCONTROL, *PAXP21164_PCMUXCONTROL;

//
// Counter control values.
//

typedef enum _AXP21164_PCEVENTCOUNT{
	Ev5CountEvents2xx8 = 0x100,
	Ev5CountEvents2xx14 = 0x4000,
	Ev5CountEvents2xx16 = 0x10000
} AXP21164_PCEVENTCOUNT, *PAXP21164_PCEVENTCOUNT;

//
//  Event count selection values
//

typedef enum _COUNTER_CONTROL{
    Ev5CounterDisable = 0x0,
    Ev5InterruptDisable = 0x1,
    Ev5EventCountLow=0x2,
    Ev5EventCountHigh=0x3
} COUNTER_CONTROL, *PCOUNTER_CONTROL;

//
// Internal processor state record.
// This is the structure of the data returned by the rdstate call pal.
//

typedef struct _PROCESSOR_STATE_21164{
    ITB_PTE_TEMP_21164 ItbPte[ ITB_ENTRIES_21164 ];
    ITB_ASN_21164 ItbAsn;
    ULONGLONG Ivptbr;
    ICPERR_STAT_21164 IcPerrStat;
    EXC_SUM_21164 ExcSum;
    ULONGLONG ExcMask;
    ULONGLONG PalBase;
    PS_21164 Ps;
    ICSR_21164 Icsr;
    ULONGLONG Ipl;
    ULONGLONG IntId;
    ULONGLONG Astrr;
    ULONGLONG Aster;
    SIRR_21164 Sirr;
    ISR_21164 Isr;
    PMCTR_21164 Pmctr;
    ULONGLONG PalTemp[ PAL_TEMPS_21164 ];
    DTB_PTE_TEMP_21164 DtbPte[ DTB_ENTRIES_21164 ];
    MM_STAT_21164 MmStat;
    ULONGLONG Va;
    DC_PERR_STAT_21164 DcPerrStat;
    MCSR_21164 Mcsr;
    DC_MODE_21164 DcMode;
    MAF_MODE_21164 MafMode;
    SC_CTL_21164 ScCtl;
    SC_ADDR_21164 ScAddr;
    SC_STAT_21164 ScStat;
    BC_CONTROL_21164 BcControl;
    BC_CONFIG_21164 BcConfig;
    EI_STAT_21164 EiStat;
    EI_ADDR_21164 EiAddr;
    BC_TAG_ADDR_21164 BcTagAddr;
    FILL_SYN_21164 FillSyn;
} PROCESSOR_STATE_21164, *PPROCESSOR_STATE_21164;

//
// Machine-check logout frame.
//

typedef struct _LOGOUT_FRAME_21164{
    ULONGLONG           ExcAddr;
    ULONGLONG           PalBase;
    ULONGLONG           Ps;
    ULONGLONG           Va;
    ULONGLONG           VaForm;
    ICSR_21164          Icsr;
    ICPERR_STAT_21164   IcPerrStat;
    ISR_21164           Isr;
    ULONGLONG           Ipl;
    ULONGLONG           IntId;
    MM_STAT_21164       MmStat;
    MCSR_21164          Mcsr;
    DC_PERR_STAT_21164  DcPerrStat;
    SC_CTL_21164        ScCtl;
    SC_STAT_21164       ScStat;
    SC_ADDR_21164       ScAddr;
    BC_CONTROL_21164    BcControl;
    BC_CONFIG_21164     BcConfig;
    BC_TAG_ADDR_21164   BcTagAddr;
    EI_STAT_21164       EiStat;
    EI_ADDR_21164       EiAddr;
    FILL_SYN_21164      FillSyn;
    ULONGLONG PalTemp[ PAL_TEMPS_21164 ];
} LOGOUT_FRAME_21164, *PLOGOUT_FRAME_21164;

#endif //!_AXP21164_