18472SSean.Ye@Sun.COM /* 28472SSean.Ye@Sun.COM * CDDL HEADER START 38472SSean.Ye@Sun.COM * 48472SSean.Ye@Sun.COM * The contents of this file are subject to the terms of the 58472SSean.Ye@Sun.COM * Common Development and Distribution License (the "License"). 68472SSean.Ye@Sun.COM * You may not use this file except in compliance with the License. 78472SSean.Ye@Sun.COM * 88472SSean.Ye@Sun.COM * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 98472SSean.Ye@Sun.COM * or http://www.opensolaris.org/os/licensing. 108472SSean.Ye@Sun.COM * See the License for the specific language governing permissions 118472SSean.Ye@Sun.COM * and limitations under the License. 128472SSean.Ye@Sun.COM * 138472SSean.Ye@Sun.COM * When distributing Covered Code, include this CDDL HEADER in each 148472SSean.Ye@Sun.COM * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 158472SSean.Ye@Sun.COM * If applicable, add the following below this CDDL HEADER, with the 168472SSean.Ye@Sun.COM * fields enclosed by brackets "[]" replaced with your own identifying 178472SSean.Ye@Sun.COM * information: Portions Copyright [yyyy] [name of copyright owner] 188472SSean.Ye@Sun.COM * 198472SSean.Ye@Sun.COM * CDDL HEADER END 208472SSean.Ye@Sun.COM */ 218472SSean.Ye@Sun.COM 228472SSean.Ye@Sun.COM /* 23*11516SAdrian.Frost@Sun.COM * Copyright 2010 Sun Microsystems, Inc. All rights reserved. 248472SSean.Ye@Sun.COM * Use is subject to license terms. 258472SSean.Ye@Sun.COM */ 268472SSean.Ye@Sun.COM 278472SSean.Ye@Sun.COM #ifndef _INTEL_NHM_H 288472SSean.Ye@Sun.COM #define _INTEL_NHM_H 298472SSean.Ye@Sun.COM 308472SSean.Ye@Sun.COM #ifdef __cplusplus 318472SSean.Ye@Sun.COM extern "C" { 328472SSean.Ye@Sun.COM #endif 338472SSean.Ye@Sun.COM 348977SAdrian.Frost@Sun.COM #define NHM_EP_CPU 0x2c408086 358977SAdrian.Frost@Sun.COM #define NHM_WS_CPU 0x2c418086 368977SAdrian.Frost@Sun.COM #define NHM_CPU_RAS 0x2c1a8086 3710556SAdrian.Frost@Sun.COM #define NHM_JF_CPU 0x2c588086 3810556SAdrian.Frost@Sun.COM #define NHM_JF_CPU_RAS 0x2cda8086 3910556SAdrian.Frost@Sun.COM #define NHM_WM_CPU 0x2c708086 4010556SAdrian.Frost@Sun.COM #define NHM_WM_CPU_RAS 0x2d9a8086 418977SAdrian.Frost@Sun.COM 428977SAdrian.Frost@Sun.COM #define NHM_INTERCONNECT "Intel QuickPath" 438472SSean.Ye@Sun.COM 448472SSean.Ye@Sun.COM #define MAX_CPU_NODES 2 458472SSean.Ye@Sun.COM #define CPU_PCI_DEVS 6 468472SSean.Ye@Sun.COM #define CPU_PCI_FUNCS 6 478472SSean.Ye@Sun.COM 488472SSean.Ye@Sun.COM #define MAX_BUS_NUMBER max_bus_number 498472SSean.Ye@Sun.COM 508472SSean.Ye@Sun.COM #define SOCKET_BUS(cpu) (MAX_BUS_NUMBER - (cpu)) 518472SSean.Ye@Sun.COM #define CPU_ID_RD(cpu) nhm_pci_getl(SOCKET_BUS(cpu), 0, 0, 0, 0) 528472SSean.Ye@Sun.COM #define MC_CONTROL_RD(cpu) \ 538472SSean.Ye@Sun.COM nhm_pci_getl(SOCKET_BUS(cpu), 3, 0, 0x48, 0) 548472SSean.Ye@Sun.COM #define MC_STATUS_RD(cpu) \ 558472SSean.Ye@Sun.COM nhm_pci_getl(SOCKET_BUS(cpu), 3, 0, 0x4c, 0) 568472SSean.Ye@Sun.COM #define MC_SMI_SPARE_DIMM_ERROR_STATUS_RD(cpu) \ 578472SSean.Ye@Sun.COM nhm_pci_getl(SOCKET_BUS(cpu), 3, 0, 0x50, 0) 588977SAdrian.Frost@Sun.COM #define MC_CPU_RAS_RD(cpu) \ 598977SAdrian.Frost@Sun.COM nhm_pci_getl(SOCKET_BUS(cpu), 3, 2, 0, 0) 608472SSean.Ye@Sun.COM #define MC_SCRUB_CONTROL_RD(cpu) \ 618472SSean.Ye@Sun.COM nhm_pci_getl(SOCKET_BUS(cpu), 3, 2, 0x4c, 0) 628472SSean.Ye@Sun.COM #define MC_SCRUB_CONTROL_WR(cpu, reg) nhm_pci_putl(SOCKET_BUS(cpu), 3, 2, \ 638472SSean.Ye@Sun.COM 0x4c, reg); 648472SSean.Ye@Sun.COM #define MC_SSR_CONTROL_RD(cpu) nhm_pci_getl(SOCKET_BUS(cpu), 3, 2, 0x48, 0) 658472SSean.Ye@Sun.COM #define MC_SSR_CONTROL_WR(cpu, reg) nhm_pci_putl(SOCKET_BUS(cpu), 3, 2, 0x48, \ 668472SSean.Ye@Sun.COM reg); 678472SSean.Ye@Sun.COM #define MC_SSR_SCRUB_CONTROL_RD(cpu) nhm_pci_getl(SOCKET_BUS(cpu), 3, 2, \ 688472SSean.Ye@Sun.COM 0x4c, 0) 698472SSean.Ye@Sun.COM #define MC_RAS_ENABLES_RD(cpu) nhm_pci_getl(SOCKET_BUS(cpu), 3, 2, 0x50, 0) 708472SSean.Ye@Sun.COM #define MC_RAS_STATUS_RD(cpu) nhm_pci_getl(SOCKET_BUS(cpu), 3, 2, 0x54, 0) 718472SSean.Ye@Sun.COM #define MC_SSR_STATUS_RD(cpu) nhm_pci_getl(SOCKET_BUS(cpu), 3, 2, 0x60, 0) 728472SSean.Ye@Sun.COM #define MC_CHANNEL_MAPPER_RD(cpu) nhm_pci_getl(SOCKET_BUS(cpu), 3, 0, \ 738472SSean.Ye@Sun.COM 0x60, 0) 748472SSean.Ye@Sun.COM #define MC_COR_ECC_CNT_RD(cpu, select) \ 758472SSean.Ye@Sun.COM nhm_pci_getl(SOCKET_BUS(cpu), 3, 2, 0x80 + ((select) * 4), 0) 768472SSean.Ye@Sun.COM #define MC_CHANNEL_RANK_PRESENT_RD(cpu, channel) \ 778472SSean.Ye@Sun.COM nhm_pci_getl(SOCKET_BUS(cpu), (channel) + 4, 0, 0x7c, 0) 788472SSean.Ye@Sun.COM #define MC_DOD_RD(cpu, channel, select) \ 798472SSean.Ye@Sun.COM nhm_pci_getl(SOCKET_BUS(cpu), (channel) + 4, 1, 0x48 + ((select) * 4), 0) 808472SSean.Ye@Sun.COM #define MC_SAG_RD(cpu, channel, select) \ 818472SSean.Ye@Sun.COM nhm_pci_getl(SOCKET_BUS(cpu), (channel) + 4, 1, 0x80 + ((select) * 4), 0) 828472SSean.Ye@Sun.COM #define MC_RIR_LIMIT_RD(cpu, channel, select) \ 838472SSean.Ye@Sun.COM nhm_pci_getl(SOCKET_BUS(cpu), (channel) + 4, 2, 0x40 + ((select) * 4), 0) 848472SSean.Ye@Sun.COM #define MC_RIR_WAY_RD(cpu, channel, select) \ 858472SSean.Ye@Sun.COM nhm_pci_getl(SOCKET_BUS(cpu), (channel) + 4, 2, 0x80 + ((select) * 4), 0) 868472SSean.Ye@Sun.COM #define MC_CHANNEL_DIMM_INIT_PARAMS_RD(cpu, channel) \ 878472SSean.Ye@Sun.COM nhm_pci_getl(SOCKET_BUS(cpu), (channel) + 4, 0, 0x58, 0) 888472SSean.Ye@Sun.COM #define SAD_DRAM_RULE_RD(cpu, rule) \ 898472SSean.Ye@Sun.COM nhm_pci_getl(SOCKET_BUS(cpu), 0, 1, 0x80 + (4 * (rule)), 0) 908472SSean.Ye@Sun.COM #define SAD_INTERLEAVE_LIST_RD(cpu, rule) \ 918472SSean.Ye@Sun.COM nhm_pci_getl(SOCKET_BUS(cpu), 0, 1, 0xc0 + (4 * (rule)), 0) 928472SSean.Ye@Sun.COM #define TAD_DRAM_RULE_RD(cpu, rule) \ 938472SSean.Ye@Sun.COM nhm_pci_getl(SOCKET_BUS(cpu), 3, 1, 0x80 + (4 * (rule)), 0) 948472SSean.Ye@Sun.COM #define TAD_INTERLEAVE_LIST_RD(cpu, rule) \ 958472SSean.Ye@Sun.COM nhm_pci_getl(SOCKET_BUS(cpu), 3, 1, 0xc0 + (4 * (rule)), 0) 968472SSean.Ye@Sun.COM #define MC_DIMM_CLK_RATIO_STATUS(cpu) \ 978472SSean.Ye@Sun.COM nhm_pci_getl(SOCKET_BUS(cpu), 3, 4, 0x50, 0) 988472SSean.Ye@Sun.COM 998472SSean.Ye@Sun.COM /* 1008472SSean.Ye@Sun.COM * MC_CONTROL 1018472SSean.Ye@Sun.COM */ 1028472SSean.Ye@Sun.COM #define MC_CONTROL_CHANNEL_ACTIVE(reg, channel) \ 1038472SSean.Ye@Sun.COM ((reg) & (1 << (8 + (channel))) != 0) 1048472SSean.Ye@Sun.COM #define MC_CONTROL_ECCEN(reg) (((reg) >> 1) & 1) 1058472SSean.Ye@Sun.COM #define MC_CONTROL_CLOSED_PAGE(reg) ((reg) & 1) 10610650SVuong.Nguyen@Sun.COM #define MC_CONTROL_DIVBY3(reg) ((reg >> 6) &1) 10710650SVuong.Nguyen@Sun.COM 10810650SVuong.Nguyen@Sun.COM #define NUM_CACHELINE_BITS 6 /* Cachelines are 64B */ 10910650SVuong.Nguyen@Sun.COM 1108472SSean.Ye@Sun.COM /* 1118472SSean.Ye@Sun.COM * MC_STATUS 1128472SSean.Ye@Sun.COM */ 1138472SSean.Ye@Sun.COM #define CHANNEL_DISABLED(reg, channel) ((reg) & (1 << (channel))) 1148977SAdrian.Frost@Sun.COM #define WS_ECC_ENABLED 0x10 1158472SSean.Ye@Sun.COM /* 1168472SSean.Ye@Sun.COM * MC_CHANNEL_DIMM_INIT_PARAMS 1178472SSean.Ye@Sun.COM */ 1188472SSean.Ye@Sun.COM #define THREE_DIMMS_PRESENT (1 << 24) /* not quad rank */ 1198472SSean.Ye@Sun.COM #define SINGLE_QUAD_RANK_PRESENT (1 << 23) 1208472SSean.Ye@Sun.COM #define QUAD_RANK_PRESENT (1 << 22) /* 1 or 2 quad rank dimms */ 1218472SSean.Ye@Sun.COM #define REGISTERED_DIMM (1 << 15) 1228472SSean.Ye@Sun.COM 1238472SSean.Ye@Sun.COM /* 1248472SSean.Ye@Sun.COM * MC_DOD_CH 1258472SSean.Ye@Sun.COM */ 1268472SSean.Ye@Sun.COM #define RANKOFFSET(reg) (((reg) >> 10) & 7) 1278472SSean.Ye@Sun.COM #define DIMMPRESENT(reg) (((reg) & (1 << 9)) != 0) 1288472SSean.Ye@Sun.COM #define NUMBANK(reg) (((reg) & (3 << 7)) == 0 ? 4 : (((reg) >> 7) & 3) * 8) 1298472SSean.Ye@Sun.COM #define NUMRANK(reg) (((reg) & (3 << 5)) == 0 ? 1 : (((reg) >> 5) & 3) * 2) 1308472SSean.Ye@Sun.COM #define NUMROW(reg) ((((reg) >> 2) & 7) + 12) 1318472SSean.Ye@Sun.COM #define NUMCOL(reg) (((reg) & 3) + 10) 1328472SSean.Ye@Sun.COM #define DIMMWIDTH 8 1338472SSean.Ye@Sun.COM #define DIMMSIZE(reg) ((1ULL << (NUMCOL(reg) + NUMROW(reg))) * NUMRANK(reg) \ 1348472SSean.Ye@Sun.COM * NUMBANK(reg) * DIMMWIDTH) 1358472SSean.Ye@Sun.COM 1368472SSean.Ye@Sun.COM /* 1378472SSean.Ye@Sun.COM * MC_SAG_CH 1388472SSean.Ye@Sun.COM */ 1398472SSean.Ye@Sun.COM #define DIVBY3(reg) (((reg) >> 27) & 1) /* 3 or 6 way interleave */ 1408472SSean.Ye@Sun.COM #define REMOVE_6(reg) (((reg) >> 24) & 1) 1418472SSean.Ye@Sun.COM #define REMOVE_7(reg) (((reg) >> 25) & 1) 1428472SSean.Ye@Sun.COM #define REMOVE_8(reg) (((reg) >> 26) & 1) 1438472SSean.Ye@Sun.COM #define CH_ADDRESS_OFFSET(reg) \ 14410650SVuong.Nguyen@Sun.COM (int64_t)((uint64_t)(reg) & 0x00ffffff) 14510650SVuong.Nguyen@Sun.COM #define CH_ADDRESS_SOFFSET(reg) \ 14610650SVuong.Nguyen@Sun.COM ((int64_t)(((uint64_t)(reg) & 0x00ffffff) << 40) >>40) 14710650SVuong.Nguyen@Sun.COM /* SAG offset covers SA[39:16] so granularity is 2^16 = 64KB */ 14810650SVuong.Nguyen@Sun.COM #define SAG_OFFSET_GRANULARITY 16 14910650SVuong.Nguyen@Sun.COM /* 24-bit mask for TTMAD_CR_SAG_CH*.OFFSET */ 15010650SVuong.Nguyen@Sun.COM #define SAG_OFFSET_SIZE_MASK 0xffffffULL 15110650SVuong.Nguyen@Sun.COM /* 16-bit mask for lower bits not covered by CREG value (SA[15:0]) */ 15210650SVuong.Nguyen@Sun.COM #define SAG_OFFSET_ADDR_MASK 0xffffULL 15310650SVuong.Nguyen@Sun.COM #define CACHELINE_ADDR_MASK 0x3fULL /* 6-bit mask */ 15410650SVuong.Nguyen@Sun.COM 1558472SSean.Ye@Sun.COM /* 1568472SSean.Ye@Sun.COM * MC_RIR_LIMIT_CH 1578472SSean.Ye@Sun.COM */ 1588472SSean.Ye@Sun.COM #define RIR_LIMIT(reg) ((((uint64_t)(reg) & 0x000003ff) + 1) << 28) 1598472SSean.Ye@Sun.COM /* 1608472SSean.Ye@Sun.COM * MC_RIR_WAY_CH 1618472SSean.Ye@Sun.COM */ 16210650SVuong.Nguyen@Sun.COM #define RIR_OFFSET(reg) (int64_t)((uint64_t)(reg >> 4)& 0x3ff) 16310650SVuong.Nguyen@Sun.COM #define RIR_SOFFSET(reg) ((int64_t)(((uint64_t)(reg) & 0x3ff0) << 50) \ 16410650SVuong.Nguyen@Sun.COM >> 54) 16510650SVuong.Nguyen@Sun.COM #define RIR_DIMM_RANK(reg) ((reg) & 0xf) 16610650SVuong.Nguyen@Sun.COM #define RIR_RANK(reg) ((reg) & 0x3) 16710650SVuong.Nguyen@Sun.COM #define RIR_DIMM(reg) ((reg)>>2 & 0x03) 16810650SVuong.Nguyen@Sun.COM #define RIR_OFFSET_SIZE_MASK 0x3ff 1698472SSean.Ye@Sun.COM 1708472SSean.Ye@Sun.COM #define MAX_RIR_WAY 4 1718472SSean.Ye@Sun.COM 17210650SVuong.Nguyen@Sun.COM #define RIR_LIMIT_GRANULARITY 28 17310650SVuong.Nguyen@Sun.COM #define RIR_OFFSET_ADDR_MASK 0xfffffffULL /* 28-bit mask */ 17410650SVuong.Nguyen@Sun.COM #define RIR_INTLV_PGOPEN_BIT 12 /* Rank interleaving */ 17510650SVuong.Nguyen@Sun.COM #define RIR_INTLV_PGOPEN_MASK 0xfffULL /* 12-bit mask */ 17610650SVuong.Nguyen@Sun.COM #define RIR_INTLV_PGCLS_BIT 6 /* Rank interleaving */ 17710650SVuong.Nguyen@Sun.COM #define RIR_INTLV_PGCLS_MASK 0x3fULL /* 6-bit mask */ 17810650SVuong.Nguyen@Sun.COM #define RIR_INTLV_SIZE_MASK 0x3ULL 1798472SSean.Ye@Sun.COM /* 1808472SSean.Ye@Sun.COM * MC_RAS_ENABLES 1818472SSean.Ye@Sun.COM */ 1828472SSean.Ye@Sun.COM #define RAS_LOCKSTEP_ENABLE(reg) (((reg) & 2) != 0) 1838472SSean.Ye@Sun.COM #define RAS_MIRROR_MEM_ENABLE(reg) (((reg) & 1) != 0) 1848472SSean.Ye@Sun.COM /* 1858472SSean.Ye@Sun.COM * MC_RAS_STATUS 1868472SSean.Ye@Sun.COM */ 1878472SSean.Ye@Sun.COM #define REDUNDANCY_LOSS(reg) (((reg) & 1) != 0) 1888472SSean.Ye@Sun.COM /* 1898472SSean.Ye@Sun.COM * MC_SSRSTATUS 1908472SSean.Ye@Sun.COM */ 1918472SSean.Ye@Sun.COM #define SPAREING_IN_PROGRESS(reg) (((reg) & 2) != 0) 1928472SSean.Ye@Sun.COM #define SPAREING_COMPLETE(reg) (((reg) & 1) != 0) 1938472SSean.Ye@Sun.COM 1948472SSean.Ye@Sun.COM /* 1958472SSean.Ye@Sun.COM * MC_SSR_CONTROL 1968472SSean.Ye@Sun.COM */ 1978472SSean.Ye@Sun.COM #define SSR_MODE(reg) ((reg) & 3) 1988472SSean.Ye@Sun.COM #define SSR_IDLE 0 1998472SSean.Ye@Sun.COM #define SSR_SCRUB 1 2008472SSean.Ye@Sun.COM #define SSR_SPARE 2 2018472SSean.Ye@Sun.COM #define DEMAND_SCRUB_ENABLE (1 << 6) 2028472SSean.Ye@Sun.COM /* 2038472SSean.Ye@Sun.COM * MC_SCRUB_CONTROL 2048472SSean.Ye@Sun.COM */ 2058472SSean.Ye@Sun.COM #define STARTSCRUB (1 << 24) 2068472SSean.Ye@Sun.COM /* 2078472SSean.Ye@Sun.COM * MC_DIMM_CLK_RATIO_STATUS 2088472SSean.Ye@Sun.COM */ 2098472SSean.Ye@Sun.COM #define MAX_DIMM_CLK_RATIO(reg) (((reg) >> 24) & 0x1f) 2108472SSean.Ye@Sun.COM /* 2118472SSean.Ye@Sun.COM * MC_SMI_SPARE_DIMM_ERROR_STATUS_RD 2128472SSean.Ye@Sun.COM */ 2138472SSean.Ye@Sun.COM #define REDUNDANCY_LOSS_FAILING_DIMM(status) (((status) >> 12) & 3) 2148472SSean.Ye@Sun.COM #define DIMM_ERROR_OVERFLOW_STATUS(status) ((status) & 0xfff) 2158472SSean.Ye@Sun.COM 2168472SSean.Ye@Sun.COM #define MAX_MEMORY_CONTROLLERS MAX_CPU_NODES 2178472SSean.Ye@Sun.COM #define CHANNELS_PER_MEMORY_CONTROLLER 3 2188472SSean.Ye@Sun.COM #define MAX_DIMMS_PER_CHANNEL 3 2198472SSean.Ye@Sun.COM 2208472SSean.Ye@Sun.COM /* 2218472SSean.Ye@Sun.COM * SAD_DRAM_RULE 2228472SSean.Ye@Sun.COM */ 2238472SSean.Ye@Sun.COM #define SAD_DRAM_LIMIT(sad) ((((uint64_t)(sad) & 0x000fffc0ULL) + 0x40) << 20) 2248472SSean.Ye@Sun.COM #define SAD_DRAM_MODE(sad) (((sad) >> 1) & 3) 2258472SSean.Ye@Sun.COM #define SAD_DRAM_RULE_ENABLE(sad) ((sad) & 1) 2268472SSean.Ye@Sun.COM 22710650SVuong.Nguyen@Sun.COM /* 22810650SVuong.Nguyen@Sun.COM * from SAD_DRAM_RULE*.MODE 22910650SVuong.Nguyen@Sun.COM */ 23010650SVuong.Nguyen@Sun.COM #define DIRECT 0 23110650SVuong.Nguyen@Sun.COM #define XOR 1 23210650SVuong.Nguyen@Sun.COM #define MOD3 2 23310650SVuong.Nguyen@Sun.COM #define SAD_INTERLEAVE(list, num) (((list) >> ((num) * 4)) & 0x3) 23410650SVuong.Nguyen@Sun.COM #define INTERLEAVE_NWAY 8 23510650SVuong.Nguyen@Sun.COM #define MAX_SAD_DRAM_RULE 8 23610650SVuong.Nguyen@Sun.COM 23710650SVuong.Nguyen@Sun.COM #define SAD_LIMIT_GRANULARITY 26 23810650SVuong.Nguyen@Sun.COM #define SAD_LIMIT_ADDR_MASK 0x3ffffffULL 23910650SVuong.Nguyen@Sun.COM #define SAD_INTLV_DIRECT_BIT 6 24010650SVuong.Nguyen@Sun.COM #define SAD_INTLV_XOR_BIT 16 24110650SVuong.Nguyen@Sun.COM #define SAD_INTLV_SIZE_MASK 0x7ULL 24210650SVuong.Nguyen@Sun.COM #define SAD_INTLV_ADDR_MASK 0x3fULL 2438472SSean.Ye@Sun.COM 2448472SSean.Ye@Sun.COM /* 2458472SSean.Ye@Sun.COM * TAD_DRAM_RULE 2468472SSean.Ye@Sun.COM */ 2478472SSean.Ye@Sun.COM #define TAD_DRAM_LIMIT(tad) ((((uint64_t)(tad) & 0x000fffc0ULL) + 0x40) << 20) 2488472SSean.Ye@Sun.COM #define TAD_DRAM_MODE(tad) (((tad) >> 1) & 3) 2498472SSean.Ye@Sun.COM #define TAD_DRAM_RULE_ENABLE(tad) ((tad) & 1) 2508472SSean.Ye@Sun.COM 2518472SSean.Ye@Sun.COM #define TAD_INTERLEAVE(list, channel) (((list) >> ((channel) * 4)) & 3) 2528472SSean.Ye@Sun.COM 2538472SSean.Ye@Sun.COM #define MAX_TAD_DRAM_RULE 8 2548472SSean.Ye@Sun.COM 255*11516SAdrian.Frost@Sun.COM #define VRANK_SZ 0x10000000 2568472SSean.Ye@Sun.COM 25710650SVuong.Nguyen@Sun.COM typedef struct sad { 25810650SVuong.Nguyen@Sun.COM uint64_t limit; 25910650SVuong.Nguyen@Sun.COM uint32_t node_list; 26010650SVuong.Nguyen@Sun.COM uint32_t node_tgt[INTERLEAVE_NWAY]; 26110650SVuong.Nguyen@Sun.COM char mode; 26210650SVuong.Nguyen@Sun.COM char enable; 26310650SVuong.Nguyen@Sun.COM char interleave; 26410650SVuong.Nguyen@Sun.COM } sad_t; 26510650SVuong.Nguyen@Sun.COM 26610650SVuong.Nguyen@Sun.COM typedef struct tad { 26710650SVuong.Nguyen@Sun.COM uint64_t limit; 26810650SVuong.Nguyen@Sun.COM uint32_t pkg_list; 26910650SVuong.Nguyen@Sun.COM uint32_t pkg_tgt[INTERLEAVE_NWAY]; 27010650SVuong.Nguyen@Sun.COM char mode; 27110650SVuong.Nguyen@Sun.COM char enable; 27210650SVuong.Nguyen@Sun.COM char interleave; 27310650SVuong.Nguyen@Sun.COM } tad_t; 27410650SVuong.Nguyen@Sun.COM 27510650SVuong.Nguyen@Sun.COM typedef struct sag_ch { 27610650SVuong.Nguyen@Sun.COM uint32_t offset; 27710650SVuong.Nguyen@Sun.COM int32_t soffset; 27810650SVuong.Nguyen@Sun.COM char divby3; 27910650SVuong.Nguyen@Sun.COM char remove6; 28010650SVuong.Nguyen@Sun.COM char remove7; 28110650SVuong.Nguyen@Sun.COM char remove8; 28210650SVuong.Nguyen@Sun.COM } sag_ch_t; 28310650SVuong.Nguyen@Sun.COM 28410650SVuong.Nguyen@Sun.COM typedef struct rir_way { 28510650SVuong.Nguyen@Sun.COM uint16_t offset; 28610650SVuong.Nguyen@Sun.COM int16_t soffset; 28710650SVuong.Nguyen@Sun.COM uint8_t rank; 28810650SVuong.Nguyen@Sun.COM uint8_t dimm; 28910650SVuong.Nguyen@Sun.COM uint8_t dimm_rank; 29010650SVuong.Nguyen@Sun.COM uint64_t rlimit; 29110650SVuong.Nguyen@Sun.COM } way_t; 29210650SVuong.Nguyen@Sun.COM 29310650SVuong.Nguyen@Sun.COM typedef struct rir { 29410650SVuong.Nguyen@Sun.COM uint64_t limit; 29510650SVuong.Nguyen@Sun.COM way_t way[MAX_RIR_WAY]; 29610650SVuong.Nguyen@Sun.COM char interleave; 29710650SVuong.Nguyen@Sun.COM } rir_t; 29810650SVuong.Nguyen@Sun.COM 29910650SVuong.Nguyen@Sun.COM typedef struct dod_type { 30010650SVuong.Nguyen@Sun.COM int NUMCol; 30110650SVuong.Nguyen@Sun.COM int NUMRow; 30210650SVuong.Nguyen@Sun.COM int NUMRank; 30310650SVuong.Nguyen@Sun.COM int NUMBank; 30410650SVuong.Nguyen@Sun.COM int DIMMPresent; 30510650SVuong.Nguyen@Sun.COM int RankOffset; 30610650SVuong.Nguyen@Sun.COM } dod_t; 30710650SVuong.Nguyen@Sun.COM 3088472SSean.Ye@Sun.COM /* 3098472SSean.Ye@Sun.COM * MC_CHANNEL_MAPPER 3108472SSean.Ye@Sun.COM */ 3118472SSean.Ye@Sun.COM #define CHANNEL_MAP(reg, channel, write) (((reg) >> ((channel) * 6 + \ 3128472SSean.Ye@Sun.COM ((write) ? 0 : 3))) & 7) 3138472SSean.Ye@Sun.COM 3148472SSean.Ye@Sun.COM extern int max_bus_number; 3158472SSean.Ye@Sun.COM 3168472SSean.Ye@Sun.COM #ifdef __cplusplus 3178472SSean.Ye@Sun.COM } 3188472SSean.Ye@Sun.COM #endif 3198472SSean.Ye@Sun.COM 3208472SSean.Ye@Sun.COM #endif /* _INTEL_NHM_H */ 321