xref: /minix3/sys/arch/x86/include/cacheinfo.h (revision 0a6a1f1d05b60e214de2f05a7310ddd1f0e590e7)
1*0a6a1f1dSLionel Sambuc /*	$NetBSD: cacheinfo.h,v 1.19 2014/09/09 15:11:33 msaitoh Exp $	*/
21cd76c75SBen Gras 
31cd76c75SBen Gras #ifndef _X86_CACHEINFO_H_
41cd76c75SBen Gras #define _X86_CACHEINFO_H_
51cd76c75SBen Gras 
61cd76c75SBen Gras struct x86_cache_info {
71cd76c75SBen Gras 	uint8_t		cai_index;
81cd76c75SBen Gras 	uint8_t		cai_desc;
91cd76c75SBen Gras 	uint8_t		cai_associativity;
101cd76c75SBen Gras 	u_int		cai_totalsize; /* #entries for TLB, bytes for cache */
1184d9c625SLionel Sambuc 	u_int		cai_linesize;	/*
1284d9c625SLionel Sambuc 					 * or page size for TLB,
1384d9c625SLionel Sambuc 					 * or prefetch size
1484d9c625SLionel Sambuc 					 */
151cd76c75SBen Gras #ifndef _KERNEL
161cd76c75SBen Gras 	const char	*cai_string;
171cd76c75SBen Gras #endif
181cd76c75SBen Gras };
191cd76c75SBen Gras 
201cd76c75SBen Gras #define	CAI_ITLB	0		/* Instruction TLB (4K pages) */
211cd76c75SBen Gras #define	CAI_ITLB2	1		/* Instruction TLB (2/4M pages) */
221cd76c75SBen Gras #define	CAI_DTLB	2		/* Data TLB (4K pages) */
231cd76c75SBen Gras #define	CAI_DTLB2	3		/* Data TLB (2/4M pages) */
241cd76c75SBen Gras #define	CAI_ICACHE	4		/* Instruction cache */
251cd76c75SBen Gras #define	CAI_DCACHE	5		/* Data cache */
261cd76c75SBen Gras #define	CAI_L2CACHE	6		/* Level 2 cache */
271cd76c75SBen Gras #define	CAI_L3CACHE	7		/* Level 3 cache */
281cd76c75SBen Gras #define	CAI_L1_1GBITLB	8		/* L1 1GB Page instruction TLB */
291cd76c75SBen Gras #define	CAI_L1_1GBDTLB	9		/* L1 1GB Page data TLB */
301cd76c75SBen Gras #define CAI_L2_1GBITLB	10		/* L2 1GB Page instruction TLB */
311cd76c75SBen Gras #define CAI_L2_1GBDTLB	11		/* L2 1GB Page data TLB */
321cd76c75SBen Gras #define CAI_L2_ITLB	12		/* L2 Instruction TLB (4K pages) */
331cd76c75SBen Gras #define CAI_L2_ITLB2	13		/* L2 Instruction TLB (2/4M pages) */
341cd76c75SBen Gras #define CAI_L2_DTLB	14		/* L2 Data TLB (4K pages) */
351cd76c75SBen Gras #define CAI_L2_DTLB2	15		/* L2 Data TLB (2/4M pages) */
3684d9c625SLionel Sambuc #define CAI_L2_STLB	16		/* Shared L2 TLB (4K pages) */
3784d9c625SLionel Sambuc #define CAI_L2_STLB2	17		/* Shared L2 TLB (4K/2M pages) */
3884d9c625SLionel Sambuc #define CAI_PREFETCH	18		/* Prefetch */
391cd76c75SBen Gras 
4084d9c625SLionel Sambuc #define	CAI_COUNT	19
411cd76c75SBen Gras 
421cd76c75SBen Gras /*
431cd76c75SBen Gras  * AMD Cache Info:
441cd76c75SBen Gras  *
451cd76c75SBen Gras  *      Barcelona, Phenom:
461cd76c75SBen Gras  *
471cd76c75SBen Gras  *		Function 8000.0005 L1 TLB/Cache Information
481cd76c75SBen Gras  *		EAX -- L1 TLB 2/4MB pages
491cd76c75SBen Gras  *		EBX -- L1 TLB 4K pages
501cd76c75SBen Gras  *		ECX -- L1 D-cache
511cd76c75SBen Gras  *		EDX -- L1 I-cache
521cd76c75SBen Gras  *
531cd76c75SBen Gras  *		Function 8000.0006 L2 TLB/Cache Information
541cd76c75SBen Gras  *		EAX -- L2 TLB 2/4MB pages
551cd76c75SBen Gras  *		EBX -- L2 TLB 4K pages
561cd76c75SBen Gras  *		ECX -- L2 Unified cache
571cd76c75SBen Gras  *		EDX -- L3 Unified Cache
581cd76c75SBen Gras  *
591cd76c75SBen Gras  *		Function 8000.0019 TLB 1GB Page Information
601cd76c75SBen Gras  *		EAX -- L1 1GB pages
611cd76c75SBen Gras  *		EBX -- L2 1GB pages
621cd76c75SBen Gras  *		ECX -- reserved
631cd76c75SBen Gras  *		EDX -- reserved
641cd76c75SBen Gras  *
651cd76c75SBen Gras  *	Athlon, Duron:
661cd76c75SBen Gras  *
671cd76c75SBen Gras  *		Function 8000.0005 L1 TLB/Cache Information
681cd76c75SBen Gras  *		EAX -- L1 TLB 2/4MB pages
691cd76c75SBen Gras  *		EBX -- L1 TLB 4K pages
701cd76c75SBen Gras  *		ECX -- L1 D-cache
711cd76c75SBen Gras  *		EDX -- L1 I-cache
721cd76c75SBen Gras  *
731cd76c75SBen Gras  *		Function 8000.0006 L2 TLB/Cache Information
741cd76c75SBen Gras  *		EAX -- L2 TLB 2/4MB pages
751cd76c75SBen Gras  *		EBX -- L2 TLB 4K pages
761cd76c75SBen Gras  *		ECX -- L2 Unified cache
771cd76c75SBen Gras  *		EDX -- reserved
781cd76c75SBen Gras  *
791cd76c75SBen Gras  *	K5, K6:
801cd76c75SBen Gras  *
811cd76c75SBen Gras  *		Function 8000.0005 L1 TLB/Cache Information
821cd76c75SBen Gras  *		EAX -- reserved
831cd76c75SBen Gras  *		EBX -- TLB 4K pages
841cd76c75SBen Gras  *		ECX -- L1 D-cache
851cd76c75SBen Gras  *		EDX -- L1 I-cache
861cd76c75SBen Gras  *
871cd76c75SBen Gras  *	K6-III:
881cd76c75SBen Gras  *
891cd76c75SBen Gras  *		Function 8000.0006 L2 Cache Information
901cd76c75SBen Gras  *		EAX -- reserved
911cd76c75SBen Gras  *		EBX -- reserved
921cd76c75SBen Gras  *		ECX -- L2 Unified cache
931cd76c75SBen Gras  *		EDX -- reserved
941cd76c75SBen Gras  */
951cd76c75SBen Gras 
961cd76c75SBen Gras /* L1 TLB 2/4MB pages */
971cd76c75SBen Gras #define	AMD_L1_EAX_DTLB_ASSOC(x)	(((x) >> 24) & 0xff)
981cd76c75SBen Gras #define	AMD_L1_EAX_DTLB_ENTRIES(x)	(((x) >> 16) & 0xff)
991cd76c75SBen Gras #define	AMD_L1_EAX_ITLB_ASSOC(x)	(((x) >> 8)  & 0xff)
1001cd76c75SBen Gras #define	AMD_L1_EAX_ITLB_ENTRIES(x)	( (x)        & 0xff)
1011cd76c75SBen Gras 
1021cd76c75SBen Gras /* L1 TLB 4K pages */
1031cd76c75SBen Gras #define	AMD_L1_EBX_DTLB_ASSOC(x)	(((x) >> 24) & 0xff)
1041cd76c75SBen Gras #define	AMD_L1_EBX_DTLB_ENTRIES(x)	(((x) >> 16) & 0xff)
1051cd76c75SBen Gras #define	AMD_L1_EBX_ITLB_ASSOC(x)	(((x) >> 8)  & 0xff)
1061cd76c75SBen Gras #define	AMD_L1_EBX_ITLB_ENTRIES(x)	( (x)        & 0xff)
1071cd76c75SBen Gras 
1081cd76c75SBen Gras /* L1 Data Cache */
1091cd76c75SBen Gras #define	AMD_L1_ECX_DC_SIZE(x)		((((x) >> 24) & 0xff) * 1024)
1101cd76c75SBen Gras #define	AMD_L1_ECX_DC_ASSOC(x)		 (((x) >> 16) & 0xff)
1111cd76c75SBen Gras #define	AMD_L1_ECX_DC_LPT(x)		 (((x) >> 8)  & 0xff)
1121cd76c75SBen Gras #define	AMD_L1_ECX_DC_LS(x)		 ( (x)        & 0xff)
1131cd76c75SBen Gras 
1141cd76c75SBen Gras /* L1 Instruction Cache */
1151cd76c75SBen Gras #define	AMD_L1_EDX_IC_SIZE(x)		((((x) >> 24) & 0xff) * 1024)
1161cd76c75SBen Gras #define	AMD_L1_EDX_IC_ASSOC(x)		 (((x) >> 16) & 0xff)
1171cd76c75SBen Gras #define	AMD_L1_EDX_IC_LPT(x)		 (((x) >> 8)  & 0xff)
1181cd76c75SBen Gras #define	AMD_L1_EDX_IC_LS(x)		 ( (x)        & 0xff)
1191cd76c75SBen Gras 
1201cd76c75SBen Gras /* Note for L2 TLB -- if the upper 16 bits are 0, it is a unified TLB */
1211cd76c75SBen Gras 
1221cd76c75SBen Gras /* L2 TLB 2/4MB pages */
1231cd76c75SBen Gras #define	AMD_L2_EAX_DTLB_ASSOC(x)	(((x) >> 28)  & 0xf)
1241cd76c75SBen Gras #define	AMD_L2_EAX_DTLB_ENTRIES(x)	(((x) >> 16)  & 0xfff)
1251cd76c75SBen Gras #define	AMD_L2_EAX_IUTLB_ASSOC(x)	(((x) >> 12)  & 0xf)
1261cd76c75SBen Gras #define	AMD_L2_EAX_IUTLB_ENTRIES(x)	( (x)         & 0xfff)
1271cd76c75SBen Gras 
1281cd76c75SBen Gras /* L2 TLB 4K pages */
1291cd76c75SBen Gras #define	AMD_L2_EBX_DTLB_ASSOC(x)	(((x) >> 28)  & 0xf)
1301cd76c75SBen Gras #define	AMD_L2_EBX_DTLB_ENTRIES(x)	(((x) >> 16)  & 0xfff)
1311cd76c75SBen Gras #define	AMD_L2_EBX_IUTLB_ASSOC(x)	(((x) >> 12)  & 0xf)
1321cd76c75SBen Gras #define	AMD_L2_EBX_IUTLB_ENTRIES(x)	( (x)         & 0xfff)
1331cd76c75SBen Gras 
1341cd76c75SBen Gras /* L2 Cache */
1351cd76c75SBen Gras #define	AMD_L2_ECX_C_SIZE(x)		((((x) >> 16) & 0xffff) * 1024)
1361cd76c75SBen Gras #define	AMD_L2_ECX_C_ASSOC(x)		 (((x) >> 12) & 0xf)
1371cd76c75SBen Gras #define	AMD_L2_ECX_C_LPT(x)		 (((x) >> 8)  & 0xf)
1381cd76c75SBen Gras #define	AMD_L2_ECX_C_LS(x)		 ( (x)        & 0xff)
1391cd76c75SBen Gras 
1401cd76c75SBen Gras /* L3 Cache */
1411cd76c75SBen Gras #define AMD_L3_EDX_C_SIZE(x)		((((x) >> 18) & 0xffff) * 1024 * 512)
1421cd76c75SBen Gras #define AMD_L3_EDX_C_ASSOC(x)		 (((x) >> 12) & 0xff)
1431cd76c75SBen Gras #define AMD_L3_EDX_C_LPT(x)		 (((x) >> 8)  & 0xf)
1441cd76c75SBen Gras #define AMD_L3_EDX_C_LS(x)		 ( (x)        & 0xff)
1451cd76c75SBen Gras 
1461cd76c75SBen Gras /* L1 TLB 1GB pages */
1471cd76c75SBen Gras #define AMD_L1_1GB_EAX_DTLB_ASSOC(x)	(((x) >> 28) & 0xf)
1481cd76c75SBen Gras #define AMD_L1_1GB_EAX_DTLB_ENTRIES(x)	(((x) >> 16) & 0xfff)
1491cd76c75SBen Gras #define AMD_L1_1GB_EAX_IUTLB_ASSOC(x)	(((x) >> 12) & 0xf)
1501cd76c75SBen Gras #define AMD_L1_1GB_EAX_IUTLB_ENTRIES(x)	( (x)        & 0xfff)
1511cd76c75SBen Gras 
1521cd76c75SBen Gras /* L2 TLB 1GB pages */
1531cd76c75SBen Gras #define AMD_L2_1GB_EBX_DUTLB_ASSOC(x)	(((x) >> 28) & 0xf)
1541cd76c75SBen Gras #define AMD_L2_1GB_EBX_DUTLB_ENTRIES(x)	(((x) >> 16) & 0xfff)
1551cd76c75SBen Gras #define AMD_L2_1GB_EBX_IUTLB_ASSOC(x)	(((x) >> 12) & 0xf)
1561cd76c75SBen Gras #define AMD_L2_1GB_EBX_IUTLB_ENTRIES(x)	( (x)        & 0xfff)
1571cd76c75SBen Gras 
1581cd76c75SBen Gras /*
1591cd76c75SBen Gras  * VIA Cache Info:
1601cd76c75SBen Gras  *
1611cd76c75SBen Gras  *	Nehemiah (at least)
1621cd76c75SBen Gras  *
1631cd76c75SBen Gras  *		Function 8000.0005 L1 TLB/Cache Information
1641cd76c75SBen Gras  *		EAX -- reserved
1651cd76c75SBen Gras  *		EBX -- L1 TLB 4K pages
1661cd76c75SBen Gras  *		ECX -- L1 D-cache
1671cd76c75SBen Gras  *		EDX -- L1 I-cache
1681cd76c75SBen Gras  *
1691cd76c75SBen Gras  *		Function 8000.0006 L2 Cache Information
1701cd76c75SBen Gras  *		EAX -- reserved
1711cd76c75SBen Gras  *		EBX -- reserved
1721cd76c75SBen Gras  *		ECX -- L2 Unified cache
1731cd76c75SBen Gras  *		EDX -- reserved
1741cd76c75SBen Gras  */
1751cd76c75SBen Gras 
1761cd76c75SBen Gras /* L1 TLB 4K pages */
1771cd76c75SBen Gras #define	VIA_L1_EBX_DTLB_ASSOC(x)	(((x) >> 24) & 0xff)
1781cd76c75SBen Gras #define	VIA_L1_EBX_DTLB_ENTRIES(x)	(((x) >> 16) & 0xff)
1791cd76c75SBen Gras #define	VIA_L1_EBX_ITLB_ASSOC(x)	(((x) >> 8)  & 0xff)
1801cd76c75SBen Gras #define	VIA_L1_EBX_ITLB_ENTRIES(x)	( (x)        & 0xff)
1811cd76c75SBen Gras 
1821cd76c75SBen Gras /* L1 Data Cache */
1831cd76c75SBen Gras #define	VIA_L1_ECX_DC_SIZE(x)		((((x) >> 24) & 0xff) * 1024)
1841cd76c75SBen Gras #define	VIA_L1_ECX_DC_ASSOC(x)		 (((x) >> 16) & 0xff)
1851cd76c75SBen Gras #define	VIA_L1_ECX_DC_LPT(x)		 (((x) >> 8)  & 0xff)
1861cd76c75SBen Gras #define	VIA_L1_ECX_DC_LS(x)		 ( (x)        & 0xff)
1871cd76c75SBen Gras 
1881cd76c75SBen Gras /* L1 Instruction Cache */
1891cd76c75SBen Gras #define	VIA_L1_EDX_IC_SIZE(x)		((((x) >> 24) & 0xff) * 1024)
1901cd76c75SBen Gras #define	VIA_L1_EDX_IC_ASSOC(x)		 (((x) >> 16) & 0xff)
1911cd76c75SBen Gras #define	VIA_L1_EDX_IC_LPT(x)		 (((x) >> 8)  & 0xff)
1921cd76c75SBen Gras #define	VIA_L1_EDX_IC_LS(x)		 ( (x)        & 0xff)
1931cd76c75SBen Gras 
1941cd76c75SBen Gras /* L2 Cache (pre-Nehemiah) */
1951cd76c75SBen Gras #define	VIA_L2_ECX_C_SIZE(x)		((((x) >> 24) & 0xff) * 1024)
1961cd76c75SBen Gras #define	VIA_L2_ECX_C_ASSOC(x)		 (((x) >> 16) & 0xff)
1971cd76c75SBen Gras #define	VIA_L2_ECX_C_LPT(x)		 (((x) >> 8)  & 0xff)
1981cd76c75SBen Gras #define	VIA_L2_ECX_C_LS(x)		 ( (x)        & 0xff)
1991cd76c75SBen Gras 
2001cd76c75SBen Gras /* L2 Cache (Nehemiah and newer) */
2011cd76c75SBen Gras #define	VIA_L2N_ECX_C_SIZE(x)		((((x) >> 16) & 0xffff) * 1024)
2021cd76c75SBen Gras #define	VIA_L2N_ECX_C_ASSOC(x)		 (((x) >> 12) & 0xf)
2031cd76c75SBen Gras #define	VIA_L2N_ECX_C_LPT(x)		 (((x) >> 8)  & 0xf)
2041cd76c75SBen Gras #define	VIA_L2N_ECX_C_LS(x)		 ( (x)        & 0xff)
2051cd76c75SBen Gras 
2061cd76c75SBen Gras #ifdef _KERNEL
2071cd76c75SBen Gras #define __CI_TBL(a,b,c,d,e,f) { a, b, c, d, e }
2081cd76c75SBen Gras #else
2091cd76c75SBen Gras #define __CI_TBL(a,b,c,d,e,f) { a, b, c, d, e, f }
2101cd76c75SBen Gras #endif
2111cd76c75SBen Gras 
2121cd76c75SBen Gras /*
2131cd76c75SBen Gras  * XXX Currently organized mostly by cache type, but would be
2141cd76c75SBen Gras  * XXX easier to maintain if it were in descriptor type order.
2151cd76c75SBen Gras  */
2161cd76c75SBen Gras #define INTEL_CACHE_INFO { \
2171cd76c75SBen Gras __CI_TBL(CAI_ITLB,     0x01,    4, 32,        4 * 1024, NULL), \
2181cd76c75SBen Gras __CI_TBL(CAI_ITLB2,    0x02, 0xff,  2, 4 * 1024 * 1024, NULL), \
2191cd76c75SBen Gras __CI_TBL(CAI_DTLB,     0x03,    4, 64,        4 * 1024, NULL), \
2201cd76c75SBen Gras __CI_TBL(CAI_DTLB2,    0x04,    4,  8, 4 * 1024 * 1024, NULL), \
2211cd76c75SBen Gras __CI_TBL(CAI_DTLB2,    0x05,    4, 32, 4 * 1024 * 1024, NULL), \
22284d9c625SLionel Sambuc __CI_TBL(CAI_ITLB2,    0x0b,    4,  4, 4 * 1024 * 1024, NULL), \
22384d9c625SLionel Sambuc __CI_TBL(CAI_ITLB,     0x4f, 0xff, 32,        4 * 1024, NULL), \
2241cd76c75SBen Gras __CI_TBL(CAI_ITLB,     0x50, 0xff, 64,        4 * 1024, "4K/4M: 64 entries"), \
2251cd76c75SBen Gras __CI_TBL(CAI_ITLB,     0x51, 0xff, 64,        4 * 1024, "4K/4M: 128 entries"),\
2261cd76c75SBen Gras __CI_TBL(CAI_ITLB,     0x52, 0xff, 64,        4 * 1024, "4K/4M: 256 entries"),\
227*0a6a1f1dSLionel Sambuc __CI_TBL(CAI_ITLB2,    0x55, 0xff, 64,        4 * 1024, "2M/4M: 7 entries"), \
2281cd76c75SBen Gras __CI_TBL(CAI_DTLB2,    0x56,    4, 16, 4 * 1024 * 1024, NULL), \
229*0a6a1f1dSLionel Sambuc __CI_TBL(CAI_DTLB,     0x57,    4, 16,        4 * 1024, NULL), \
230*0a6a1f1dSLionel Sambuc __CI_TBL(CAI_DTLB,     0x59, 0xff, 16,        4 * 1024, NULL), \
231*0a6a1f1dSLionel Sambuc __CI_TBL(CAI_DTLB2,    0x5a, 0xff, 64,        4 * 1024, "2M/4M: 32 entries (L0)"), \
2321cd76c75SBen Gras __CI_TBL(CAI_DTLB,     0x5b, 0xff, 64,        4 * 1024, "4K/4M: 64 entries"), \
2331cd76c75SBen Gras __CI_TBL(CAI_DTLB,     0x5c, 0xff, 64,        4 * 1024, "4K/4M: 128 entries"),\
2341cd76c75SBen Gras __CI_TBL(CAI_DTLB,     0x5d, 0xff, 64,        4 * 1024, "4K/4M: 256 entries"),\
23584d9c625SLionel Sambuc __CI_TBL(CAI_ITLB,     0x61, 0xff, 48,        4 * 1024, NULL), \
23684d9c625SLionel Sambuc __CI_TBL(CAI_L1_1GBDTLB,0x63,   4,  4,1024*1024 * 1024, NULL), \
23784d9c625SLionel Sambuc __CI_TBL(CAI_ITLB2,    0x76, 0xff,  8, 4 * 1024 * 1024, "2M/4M: 8 entries"), \
238*0a6a1f1dSLionel Sambuc __CI_TBL(CAI_DTLB,     0xa0, 0xff, 32,        4 * 1024, NULL), \
23984d9c625SLionel Sambuc __CI_TBL(CAI_ITLB,     0xb0,    4,128,        4 * 1024, NULL), \
240*0a6a1f1dSLionel Sambuc __CI_TBL(CAI_ITLB2,    0xb1,    4, 64,               0, "8 2M/4 4M entries"), \
2411cd76c75SBen Gras __CI_TBL(CAI_ITLB,     0xb2,    4, 64,        4 * 1024, NULL), \
24284d9c625SLionel Sambuc __CI_TBL(CAI_DTLB,     0xb3,    4,128,        4 * 1024, NULL), \
24384d9c625SLionel Sambuc __CI_TBL(CAI_DTLB,     0xb4,    4,256,        4 * 1024, NULL), \
24484d9c625SLionel Sambuc __CI_TBL(CAI_ITLB,     0xb5,    8, 64,        4 * 1024, NULL), \
24584d9c625SLionel Sambuc __CI_TBL(CAI_ITLB,     0xb6,    8,128,        4 * 1024, NULL), \
24684d9c625SLionel Sambuc __CI_TBL(CAI_DTLB,     0xba,    4, 64,        4 * 1024, NULL), \
247*0a6a1f1dSLionel Sambuc __CI_TBL(CAI_DTLB2,    0xc0,    4,  8,        4 * 1024, "4K/4M: 8 entries"), \
24884d9c625SLionel Sambuc __CI_TBL(CAI_L2_STLB2, 0xc1,    8,1024,       4 * 1024, "4K/2M: 1024 entries"), \
249*0a6a1f1dSLionel Sambuc __CI_TBL(CAI_DTLB2,    0xc2,    4, 16,        4 * 1024, "4K/2M: 16 entries"), \
250*0a6a1f1dSLionel Sambuc __CI_TBL(CAI_L2_STLB,  0xc3,    6,1536,       4 * 1024, NULL), \
251*0a6a1f1dSLionel Sambuc __CI_TBL(CAI_L2_STLB,  0xca,    4,512,        4 * 1024, NULL), \
2521cd76c75SBen Gras __CI_TBL(CAI_ICACHE,   0x06,    4,        8 * 1024, 32, NULL), \
2531cd76c75SBen Gras __CI_TBL(CAI_ICACHE,   0x08,    4,       16 * 1024, 32, NULL), \
2541cd76c75SBen Gras __CI_TBL(CAI_ICACHE,   0x09,    4,       32 * 1024, 64, NULL), \
2551cd76c75SBen Gras __CI_TBL(CAI_DCACHE,   0x0a,    2,        8 * 1024, 32, NULL), \
2561cd76c75SBen Gras __CI_TBL(CAI_DCACHE,   0x0c,    4,       16 * 1024, 32, NULL), \
25784d9c625SLionel Sambuc __CI_TBL(CAI_DCACHE,   0x0d,    4,       16 * 1024, 64, NULL), \
25884d9c625SLionel Sambuc __CI_TBL(CAI_DCACHE,   0x0e,    6,       24 * 1024, 64, NULL), \
2591cd76c75SBen Gras __CI_TBL(CAI_L2CACHE,  0x21,    8,      256 * 1024, 64, NULL), /* L2 (MLC) */ \
26084d9c625SLionel Sambuc __CI_TBL(CAI_L3CACHE,  0x22, 0xff,      512 * 1024, 64, "sectored, 4-way "), \
26184d9c625SLionel Sambuc __CI_TBL(CAI_L3CACHE,  0x23, 0xff, 1 * 1024 * 1024, 64, "sectored, 8-way "), \
26284d9c625SLionel Sambuc __CI_TBL(CAI_L2CACHE,  0x24,   16, 1 * 1024 * 1024, 64, NULL), \
26384d9c625SLionel Sambuc __CI_TBL(CAI_L3CACHE,  0x25, 0xff, 2 * 1024 * 1024, 64, "sectored, 8-way "), \
26484d9c625SLionel Sambuc __CI_TBL(CAI_L3CACHE,  0x29, 0xff, 4 * 1024 * 1024, 64, "sectored, 8-way "), \
26584d9c625SLionel Sambuc __CI_TBL(CAI_DCACHE,   0x2c,    8,       32 * 1024, 64, NULL), \
26684d9c625SLionel Sambuc __CI_TBL(CAI_ICACHE,   0x30,    8,       32 * 1024, 64, NULL), \
2671cd76c75SBen Gras __CI_TBL(CAI_L2CACHE,  0x39,    4,      128 * 1024, 64, NULL), \
2681cd76c75SBen Gras __CI_TBL(CAI_L2CACHE,  0x3a,    6,      192 * 1024, 64, NULL), \
2691cd76c75SBen Gras __CI_TBL(CAI_L2CACHE,  0x3b,    2,      128 * 1024, 64, NULL), \
2701cd76c75SBen Gras __CI_TBL(CAI_L2CACHE,  0x3c,    4,      256 * 1024, 64, NULL), \
2711cd76c75SBen Gras __CI_TBL(CAI_L2CACHE,  0x3d,    6,      384 * 1024, 64, NULL), \
2721cd76c75SBen Gras __CI_TBL(CAI_L2CACHE,  0x3e,    4,      512 * 1024, 64, NULL), \
2731cd76c75SBen Gras __CI_TBL(CAI_L2CACHE,  0x40,    0,               0,  0, "not present"), \
2741cd76c75SBen Gras __CI_TBL(CAI_L2CACHE,  0x41,    4,      128 * 1024, 32, NULL), \
2751cd76c75SBen Gras __CI_TBL(CAI_L2CACHE,  0x42,    4,      256 * 1024, 32, NULL), \
2761cd76c75SBen Gras __CI_TBL(CAI_L2CACHE,  0x43,    4,      512 * 1024, 32, NULL), \
2771cd76c75SBen Gras __CI_TBL(CAI_L2CACHE,  0x44,    4, 1 * 1024 * 1024, 32, NULL), \
2781cd76c75SBen Gras __CI_TBL(CAI_L2CACHE,  0x45,    4, 2 * 1024 * 1024, 32, NULL), \
27984d9c625SLionel Sambuc __CI_TBL(CAI_L3CACHE,  0x46,    4, 4 * 1024 * 1024, 64, NULL), \
28084d9c625SLionel Sambuc __CI_TBL(CAI_L3CACHE,  0x47,    8, 8 * 1024 * 1024, 64, NULL), \
2811cd76c75SBen Gras __CI_TBL(CAI_L2CACHE,  0x48,   12, 3 * 1024 * 1024, 64, NULL), \
2821cd76c75SBen Gras 								\
2831cd76c75SBen Gras /* 0x49 Is L2 on Xeon MP (Family 0f, Model 06), L3 otherwise */	\
2841cd76c75SBen Gras __CI_TBL(CAI_L2CACHE,  0x49,   16, 4 * 1024 * 1024, 64, NULL), \
28584d9c625SLionel Sambuc __CI_TBL(CAI_L3CACHE,  0x49,   16, 4 * 1024 * 1024, 64, NULL), \
28684d9c625SLionel Sambuc __CI_TBL(CAI_L3CACHE,  0x4a,   12, 6 * 1024 * 1024, 64, NULL), \
28784d9c625SLionel Sambuc __CI_TBL(CAI_L3CACHE,  0x4b,   16, 8 * 1024 * 1024, 64, NULL), \
28884d9c625SLionel Sambuc __CI_TBL(CAI_L3CACHE,  0x4c,   12,12 * 1024 * 1024, 64, NULL), \
28984d9c625SLionel Sambuc __CI_TBL(CAI_L3CACHE,  0x4d,   16,16 * 1024 * 1024, 64, NULL), \
2901cd76c75SBen Gras __CI_TBL(CAI_L2CACHE,  0x4e,   24, 6 * 1024 * 1024, 64, NULL), \
2911cd76c75SBen Gras __CI_TBL(CAI_DCACHE,   0x60,    8,       16 * 1024, 64, NULL), \
2921cd76c75SBen Gras __CI_TBL(CAI_DCACHE,   0x66,    4,        8 * 1024, 64, NULL), \
2931cd76c75SBen Gras __CI_TBL(CAI_DCACHE,   0x67,    4,       16 * 1024, 64, NULL), \
2941cd76c75SBen Gras __CI_TBL(CAI_DCACHE,   0x68,    4,       32 * 1024, 64, NULL), \
2951cd76c75SBen Gras __CI_TBL(CAI_ICACHE,   0x70,    8,       12 * 1024, 64, "12K uOp cache"), \
2961cd76c75SBen Gras __CI_TBL(CAI_ICACHE,   0x71,    8,       16 * 1024, 64, "16K uOp cache"), \
2971cd76c75SBen Gras __CI_TBL(CAI_ICACHE,   0x72,    8,       32 * 1024, 64, "32K uOp cache"), \
2981cd76c75SBen Gras __CI_TBL(CAI_ICACHE,   0x73,    8,       64 * 1024, 64, "64K uOp cache"), \
2991cd76c75SBen Gras __CI_TBL(CAI_L2CACHE,  0x78,    4, 1 * 1024 * 1024, 64, NULL), \
3001cd76c75SBen Gras __CI_TBL(CAI_L2CACHE,  0x79,    8,      128 * 1024, 64, NULL), \
3011cd76c75SBen Gras __CI_TBL(CAI_L2CACHE,  0x7a,    8,      256 * 1024, 64, NULL), \
3021cd76c75SBen Gras __CI_TBL(CAI_L2CACHE,  0x7b,    8,      512 * 1024, 64, NULL), \
3031cd76c75SBen Gras __CI_TBL(CAI_L2CACHE,  0x7c,    8, 1 * 1024 * 1024, 64, NULL), \
3041cd76c75SBen Gras __CI_TBL(CAI_L2CACHE,  0x7d,    8, 2 * 1024 * 1024, 64, NULL), \
3051cd76c75SBen Gras __CI_TBL(CAI_L2CACHE,  0x7f,    2,      512 * 1024, 64, NULL), \
30684d9c625SLionel Sambuc __CI_TBL(CAI_L2CACHE,  0x80,    8,      512 * 1024, 64, NULL), \
3071cd76c75SBen Gras __CI_TBL(CAI_L2CACHE,  0x82,    8,      256 * 1024, 32, NULL), \
3081cd76c75SBen Gras __CI_TBL(CAI_L2CACHE,  0x83,    8,      512 * 1024, 32, NULL), \
3091cd76c75SBen Gras __CI_TBL(CAI_L2CACHE,  0x84,    8, 1 * 1024 * 1024, 32, NULL), \
3101cd76c75SBen Gras __CI_TBL(CAI_L2CACHE,  0x85,    8, 2 * 1024 * 1024, 32, NULL), \
3111cd76c75SBen Gras __CI_TBL(CAI_L2CACHE,  0x86,    4,      512 * 1024, 64, NULL), \
3121cd76c75SBen Gras __CI_TBL(CAI_L2CACHE,  0x87,    8, 1 * 1024 * 1024, 64, NULL), \
3131cd76c75SBen Gras __CI_TBL(CAI_L3CACHE,  0xd0,    4,      512 * 1024, 64, NULL), \
3141cd76c75SBen Gras __CI_TBL(CAI_L3CACHE,  0xd1,    4, 1 * 1024 * 1024, 64, NULL), \
3151cd76c75SBen Gras __CI_TBL(CAI_L3CACHE,  0xd2,    4, 2 * 1024 * 1024, 64, NULL), \
3161cd76c75SBen Gras __CI_TBL(CAI_L3CACHE,  0xd6,    8, 1 * 1024 * 1024, 64, NULL), \
3171cd76c75SBen Gras __CI_TBL(CAI_L3CACHE,  0xd7,    8, 2 * 1024 * 1024, 64, NULL), \
3181cd76c75SBen Gras __CI_TBL(CAI_L3CACHE,  0xd8,    8, 4 * 1024 * 1024, 64, NULL), \
3191cd76c75SBen Gras __CI_TBL(CAI_L3CACHE,  0xdc,   12, 3 *  512 * 1024, 64, NULL), \
3201cd76c75SBen Gras __CI_TBL(CAI_L3CACHE,  0xdd,   12, 3 * 1024 * 1024, 64, NULL), \
3211cd76c75SBen Gras __CI_TBL(CAI_L3CACHE,  0xde,   12, 6 * 1024 * 1024, 64, NULL), \
3221cd76c75SBen Gras __CI_TBL(CAI_L3CACHE,  0xe2,   16, 2 * 1024 * 1024, 64, NULL), \
3231cd76c75SBen Gras __CI_TBL(CAI_L3CACHE,  0xe3,   16, 4 * 1024 * 1024, 64, NULL), \
3241cd76c75SBen Gras __CI_TBL(CAI_L3CACHE,  0xe4,   16, 8 * 1024 * 1024, 64, NULL), \
3251cd76c75SBen Gras __CI_TBL(CAI_L3CACHE,  0xea,   24,12 * 1024 * 1024, 64, NULL), \
32684d9c625SLionel Sambuc __CI_TBL(CAI_L3CACHE,  0xeb,   24,18 * 1024 * 1024, 64, NULL), \
3271cd76c75SBen Gras __CI_TBL(CAI_L3CACHE,  0xec,   24,24 * 1024 * 1024, 64, NULL), \
32884d9c625SLionel Sambuc __CI_TBL(CAI_PREFETCH, 0xf0,    0,               0, 64, NULL), \
32984d9c625SLionel Sambuc __CI_TBL(CAI_PREFETCH, 0xf1,    0,               0,128, NULL), \
33084d9c625SLionel Sambuc /* 0xff means no cache information in CPUID leaf 2 (and use leaf 4) */ \
3311cd76c75SBen Gras __CI_TBL(0,               0,    0,               0,  0, NULL)  \
3321cd76c75SBen Gras }
3331cd76c75SBen Gras 
3341cd76c75SBen Gras #define AMD_L2CACHE_INFO { \
3351cd76c75SBen Gras __CI_TBL(0, 0x01,    1, 0, 0, NULL), \
3361cd76c75SBen Gras __CI_TBL(0, 0x02,    2, 0, 0, NULL), \
3371cd76c75SBen Gras __CI_TBL(0, 0x04,    4, 0, 0, NULL), \
3381cd76c75SBen Gras __CI_TBL(0, 0x06,    8, 0, 0, NULL), \
3391cd76c75SBen Gras __CI_TBL(0, 0x08,   16, 0, 0, NULL), \
3401cd76c75SBen Gras __CI_TBL(0, 0x0a,   32, 0, 0, NULL), \
3411cd76c75SBen Gras __CI_TBL(0, 0x0b,   48, 0, 0, NULL), \
3421cd76c75SBen Gras __CI_TBL(0, 0x0c,   64, 0, 0, NULL), \
3431cd76c75SBen Gras __CI_TBL(0, 0x0d,   96, 0, 0, NULL), \
3441cd76c75SBen Gras __CI_TBL(0, 0x0e,  128, 0, 0, NULL), \
3451cd76c75SBen Gras __CI_TBL(0, 0x0f, 0xff, 0, 0, NULL), \
3461cd76c75SBen Gras __CI_TBL(0, 0x00,    0, 0, 0, NULL)  \
3471cd76c75SBen Gras }
3481cd76c75SBen Gras 
3491cd76c75SBen Gras #define AMD_L3CACHE_INFO { \
3501cd76c75SBen Gras __CI_TBL(0, 0x01,    1, 0, 0, NULL), \
3511cd76c75SBen Gras __CI_TBL(0, 0x02,    2, 0, 0, NULL), \
3521cd76c75SBen Gras __CI_TBL(0, 0x04,    4, 0, 0, NULL), \
3531cd76c75SBen Gras __CI_TBL(0, 0x06,    8, 0, 0, NULL), \
3541cd76c75SBen Gras __CI_TBL(0, 0x08,   16, 0, 0, NULL), \
3551cd76c75SBen Gras __CI_TBL(0, 0x0a,   32, 0, 0, NULL), \
3561cd76c75SBen Gras __CI_TBL(0, 0x0b,   48, 0, 0, NULL), \
3571cd76c75SBen Gras __CI_TBL(0, 0x0c,   64, 0, 0, NULL), \
3581cd76c75SBen Gras __CI_TBL(0, 0x0d,   96, 0, 0, NULL), \
3591cd76c75SBen Gras __CI_TBL(0, 0x0e,  128, 0, 0, NULL), \
3601cd76c75SBen Gras __CI_TBL(0, 0x0f, 0xff, 0, 0, NULL), \
3611cd76c75SBen Gras __CI_TBL(0, 0x00,    0, 0, 0, NULL)  \
3621cd76c75SBen Gras }
3631cd76c75SBen Gras 
3641cd76c75SBen Gras #endif /* _X86_CACHEINFO_H_ */
365