#ifndef _SYS_NIAGARA2REGS_H
#define _SYS_NIAGARA2REGS_H
#ifdef __cplusplus
extern "C" {
#endif
#define MB(n) ((n) * 1024 * 1024)
#define L2CACHE_SIZE MB(4)
#define L2CACHE_LINESIZE 64
#define L2CACHE_ASSOCIATIVITY 16
#define NIAGARA2_HSVC_MAJOR 1
#define NIAGARA2_HSVC_MINOR 0
#define VFALLS_HSVC_MAJOR 1
#define VFALLS_HSVC_MINOR 0
#define KT_HSVC_MAJOR 1
#define KT_HSVC_MINOR 0
#ifdef KT_IMPL
#define SAMPLE_PIC_IN_OV_RANGE(x) (((uint32_t)x >= 0xfffffffe) ? 1 : 0)
#endif
#define PIC_IN_OV_RANGE(x) (((uint32_t)x >= 0xfffffff0) ? 1 : 0)
#define PIC0_MASK (((uint64_t)1 << 32) - 1)
#define PIC1_SHIFT 32
#define CPC_PCR_PRIV_SHIFT 0
#define CPC_PCR_ST_SHIFT 1
#define CPC_PCR_UT_SHIFT 2
#define CPC_PCR_HT_SHIFT 3
#define CPC_PCR_HT (1ull << CPC_PCR_HT_SHIFT)
#define CPC_PCR_TOE0_SHIFT 4
#define CPC_PCR_TOE1_SHIFT 5
#define CPC_PCR_TOE0 (1ull << CPC_PCR_TOE0_SHIFT)
#define CPC_PCR_TOE1 (1ull << CPC_PCR_TOE1_SHIFT)
#define CPC_PCR_PIC0_SHIFT 6
#define CPC_PCR_PIC1_SHIFT 19
#define CPC_PCR_PIC0_MASK UINT64_C(0xfff)
#define CPC_PCR_PIC1_MASK UINT64_C(0xfff)
#define CPC_PCR_OV0_SHIFT 18
#define CPC_PCR_OV1_SHIFT 30
#define CPC_PCR_OV0_MASK UINT64_C(0x40000)
#define CPC_PCR_OV1_MASK UINT64_C(0x80000000)
#if defined(KT_IMPL)
#define CPC_PCR_SAMPLE_MODE_SHIFT 32
#define CPC_PCR_SAMPLE_MODE_MASK (1ull << CPC_PCR_SAMPLE_MODE_SHIFT)
#endif
#define CPC_PCR_HOLDOV0_SHIFT 62
#define CPC_PCR_HOLDOV1_SHIFT 63
#define CPC_PCR_HOLDOV0 (1ull << CPC_PCR_HOLDOV0_SHIFT)
#define CPC_PCR_HOLDOV1 (1ull << CPC_PCR_HOLDOV1_SHIFT)
#define HV_NIAGARA2_GETPERF 0x104
#define HV_NIAGARA2_SETPERF 0x105
#define HV_VFALLS_GETPERF 0x106
#define HV_VFALLS_SETPERF 0x107
#define HV_KT_GETPERF 0x122
#define HV_KT_SETPERF 0x123
#if defined(KT_IMPL)
#define DRAM_PIC0_SEL_SHIFT 0x0
#define DRAM_PIC1_SEL_SHIFT 0x4
#define DRAM_PIC0_SHIFT 0x0
#define DRAM_PIC0_MASK 0x7fffffff
#define DRAM_PIC1_SHIFT 0x20
#define DRAM_PIC1_MASK 0x7fffffff
#else
#define DRAM_PIC0_SEL_SHIFT 0x4
#define DRAM_PIC1_SEL_SHIFT 0x0
#define DRAM_PIC0_SHIFT 0x20
#define DRAM_PIC0_MASK 0x7fffffff
#define DRAM_PIC1_SHIFT 0x0
#define DRAM_PIC1_MASK 0x7fffffff
#endif
#if defined(NIAGARA2_IMPL)
#define DRAM_BANKS 0x4
#define HV_SPARC_CTL 0x0
#define HV_DRAM_CTL0 0x1
#define HV_DRAM_COUNT0 0x2
#define HV_DRAM_CTL1 0x3
#define HV_DRAM_COUNT1 0x4
#define HV_DRAM_CTL2 0x5
#define HV_DRAM_COUNT2 0x6
#define HV_DRAM_CTL3 0x7
#define HV_DRAM_COUNT3 0x8
#elif defined(VFALLS_IMPL)
#define DRAM_BANKS 0x8
#define HV_SPARC_CTL 0x0
#define HV_L2_CTL 0x1
#define HV_DRAM_CTL0 0x2
#define HV_DRAM_COUNT0 0x3
#define HV_DRAM_CTL1 0x4
#define HV_DRAM_COUNT1 0x5
#define HV_DRAM_CTL2 0x6
#define HV_DRAM_COUNT2 0x7
#define HV_DRAM_CTL3 0x8
#define HV_DRAM_COUNT3 0x9
#define HV_DRAM_CTL4 0xa
#define HV_DRAM_COUNT4 0xb
#define HV_DRAM_CTL5 0xc
#define HV_DRAM_COUNT5 0xd
#define HV_DRAM_CTL6 0xe
#define HV_DRAM_COUNT6 0xf
#define HV_DRAM_CTL7 0x10
#define HV_DRAM_COUNT7 0x11
#define L2_CTL_MASK 0x3
#define SL3_MASK 0x300
#define SL_MASK 0xf00
#elif defined(KT_IMPL)
#define DRAM_BANKS 0x8
#define HV_SPARC_CTL 0x0
#define HV_L2_CTL 0x1
#define HV_DRAM_CTL0 0x2
#define HV_DRAM_COUNT0 0x3
#define HV_DRAM_CTL1 0x5
#define HV_DRAM_COUNT1 0x6
#define HV_DRAM_CTL2 0x8
#define HV_DRAM_COUNT2 0x9
#define HV_DRAM_CTL3 0xb
#define HV_DRAM_COUNT3 0xc
#define HV_DRAM_CTL4 0xe
#define HV_DRAM_COUNT4 0xf
#define HV_DRAM_CTL5 0x11
#define HV_DRAM_COUNT5 0x12
#define HV_DRAM_CTL6 0x14
#define HV_DRAM_COUNT6 0x15
#define HV_DRAM_CTL7 0x17
#define HV_DRAM_COUNT7 0x18
#define L2_CTL_MASK 0x3
#define SL3_MASK 0x300
#define SL_MASK 0xf00
#endif
#ifdef VFALLS_IMPL
#define ZAMBEZI_PIC0_SEL_SHIFT 0x0
#define ZAMBEZI_PIC1_SEL_SHIFT 0x8
#define ZAMBEZI_LPU_COUNTERS 0x10
#define ZAMBEZI_GPD_COUNTERS 0x4
#define ZAMBEZI_ASU_COUNTERS 0x4
#define HV_ZAM0_LPU_A_PCR 0x12
#define HV_ZAM0_LPU_A_PIC0 0x13
#define HV_ZAM0_LPU_A_PIC1 0x14
#define HV_ZAM0_LPU_B_PCR 0x15
#define HV_ZAM0_LPU_B_PIC0 0x16
#define HV_ZAM0_LPU_B_PIC1 0x17
#define HV_ZAM0_LPU_C_PCR 0x18
#define HV_ZAM0_LPU_C_PIC0 0x19
#define HV_ZAM0_LPU_C_PIC1 0x1a
#define HV_ZAM0_LPU_D_PCR 0x1b
#define HV_ZAM0_LPU_D_PIC0 0x1c
#define HV_ZAM0_LPU_D_PIC1 0x1d
#define HV_ZAM0_GPD_PCR 0x1e
#define HV_ZAM0_GPD_PIC0 0x1f
#define HV_ZAM0_GPD_PIC1 0x20
#define HV_ZAM0_ASU_PCR 0x21
#define HV_ZAM0_ASU_PIC0 0x22
#define HV_ZAM0_ASU_PIC1 0x23
#define HV_ZAM1_LPU_A_PCR 0x24
#define HV_ZAM1_LPU_A_PIC0 0x25
#define HV_ZAM1_LPU_A_PIC1 0x26
#define HV_ZAM1_LPU_B_PCR 0x27
#define HV_ZAM1_LPU_B_PIC0 0x28
#define HV_ZAM1_LPU_B_PIC1 0x29
#define HV_ZAM1_LPU_C_PCR 0x2a
#define HV_ZAM1_LPU_C_PIC0 0x2b
#define HV_ZAM1_LPU_C_PIC1 0x2c
#define HV_ZAM1_LPU_D_PCR 0x2d
#define HV_ZAM1_LPU_D_PIC0 0x2e
#define HV_ZAM1_LPU_D_PIC1 0x2f
#define HV_ZAM1_GPD_PCR 0x30
#define HV_ZAM1_GPD_PIC0 0x31
#define HV_ZAM1_GPD_PIC1 0x32
#define HV_ZAM1_ASU_PCR 0x33
#define HV_ZAM1_ASU_PIC0 0x34
#define HV_ZAM1_ASU_PIC1 0x35
#define HV_ZAM2_LPU_A_PCR 0x36
#define HV_ZAM2_LPU_A_PIC0 0x37
#define HV_ZAM2_LPU_A_PIC1 0x38
#define HV_ZAM2_LPU_B_PCR 0x39
#define HV_ZAM2_LPU_B_PIC0 0x3a
#define HV_ZAM2_LPU_B_PIC1 0x3b
#define HV_ZAM2_LPU_C_PCR 0x3c
#define HV_ZAM2_LPU_C_PIC0 0x3d
#define HV_ZAM2_LPU_C_PIC1 0x3e
#define HV_ZAM2_LPU_D_PCR 0x3f
#define HV_ZAM2_LPU_D_PIC0 0x40
#define HV_ZAM2_LPU_D_PIC1 0x41
#define HV_ZAM2_GPD_PCR 0x42
#define HV_ZAM2_GPD_PIC0 0x43
#define HV_ZAM2_GPD_PIC1 0x44
#define HV_ZAM2_ASU_PCR 0x45
#define HV_ZAM2_ASU_PIC0 0x46
#define HV_ZAM2_ASU_PIC1 0x47
#define HV_ZAM3_LPU_A_PCR 0x48
#define HV_ZAM3_LPU_A_PIC0 0x49
#define HV_ZAM3_LPU_A_PIC1 0x4a
#define HV_ZAM3_LPU_B_PCR 0x4b
#define HV_ZAM3_LPU_B_PIC0 0x4c
#define HV_ZAM3_LPU_B_PIC1 0x4d
#define HV_ZAM3_LPU_C_PCR 0x4e
#define HV_ZAM3_LPU_C_PIC0 0x4f
#define HV_ZAM3_LPU_C_PIC1 0x50
#define HV_ZAM3_LPU_D_PCR 0x51
#define HV_ZAM3_LPU_D_PIC0 0x52
#define HV_ZAM3_LPU_D_PIC1 0x53
#define HV_ZAM3_GPD_PCR 0x54
#define HV_ZAM3_GPD_PIC0 0x55
#define HV_ZAM3_GPD_PIC1 0x56
#define HV_ZAM3_ASU_PCR 0x57
#define HV_ZAM3_ASU_PIC0 0x58
#define HV_ZAM3_ASU_PIC1 0x59
#endif
#ifndef _ASM
extern uint64_t hv_niagara_setperf(uint64_t regnum, uint64_t val);
extern uint64_t hv_niagara_getperf(uint64_t regnum, uint64_t *val);
#endif
#ifdef __cplusplus
}
#endif
#endif