cacheinfo.h revision 1.20 1 1.20 msaitoh /* $NetBSD: cacheinfo.h,v 1.20 2015/10/19 02:45:26 msaitoh Exp $ */
2 1.1 fvdl
3 1.4 yamt #ifndef _X86_CACHEINFO_H_
4 1.4 yamt #define _X86_CACHEINFO_H_
5 1.1 fvdl
6 1.1 fvdl struct x86_cache_info {
7 1.1 fvdl uint8_t cai_index;
8 1.1 fvdl uint8_t cai_desc;
9 1.1 fvdl uint8_t cai_associativity;
10 1.1 fvdl u_int cai_totalsize; /* #entries for TLB, bytes for cache */
11 1.17 msaitoh u_int cai_linesize; /*
12 1.17 msaitoh * or page size for TLB,
13 1.17 msaitoh * or prefetch size
14 1.17 msaitoh */
15 1.7 christos #ifndef _KERNEL
16 1.10 lukem const char *cai_string;
17 1.7 christos #endif
18 1.1 fvdl };
19 1.1 fvdl
20 1.1 fvdl #define CAI_ITLB 0 /* Instruction TLB (4K pages) */
21 1.1 fvdl #define CAI_ITLB2 1 /* Instruction TLB (2/4M pages) */
22 1.1 fvdl #define CAI_DTLB 2 /* Data TLB (4K pages) */
23 1.1 fvdl #define CAI_DTLB2 3 /* Data TLB (2/4M pages) */
24 1.1 fvdl #define CAI_ICACHE 4 /* Instruction cache */
25 1.1 fvdl #define CAI_DCACHE 5 /* Data cache */
26 1.1 fvdl #define CAI_L2CACHE 6 /* Level 2 cache */
27 1.6 cegger #define CAI_L3CACHE 7 /* Level 3 cache */
28 1.6 cegger #define CAI_L1_1GBITLB 8 /* L1 1GB Page instruction TLB */
29 1.6 cegger #define CAI_L1_1GBDTLB 9 /* L1 1GB Page data TLB */
30 1.6 cegger #define CAI_L2_1GBITLB 10 /* L2 1GB Page instruction TLB */
31 1.6 cegger #define CAI_L2_1GBDTLB 11 /* L2 1GB Page data TLB */
32 1.13 chs #define CAI_L2_ITLB 12 /* L2 Instruction TLB (4K pages) */
33 1.13 chs #define CAI_L2_ITLB2 13 /* L2 Instruction TLB (2/4M pages) */
34 1.13 chs #define CAI_L2_DTLB 14 /* L2 Data TLB (4K pages) */
35 1.13 chs #define CAI_L2_DTLB2 15 /* L2 Data TLB (2/4M pages) */
36 1.16 msaitoh #define CAI_L2_STLB 16 /* Shared L2 TLB (4K pages) */
37 1.16 msaitoh #define CAI_L2_STLB2 17 /* Shared L2 TLB (4K/2M pages) */
38 1.17 msaitoh #define CAI_PREFETCH 18 /* Prefetch */
39 1.1 fvdl
40 1.17 msaitoh #define CAI_COUNT 19
41 1.1 fvdl
42 1.1 fvdl /*
43 1.1 fvdl * AMD Cache Info:
44 1.1 fvdl *
45 1.6 cegger * Barcelona, Phenom:
46 1.6 cegger *
47 1.6 cegger * Function 8000.0005 L1 TLB/Cache Information
48 1.6 cegger * EAX -- L1 TLB 2/4MB pages
49 1.6 cegger * EBX -- L1 TLB 4K pages
50 1.6 cegger * ECX -- L1 D-cache
51 1.6 cegger * EDX -- L1 I-cache
52 1.6 cegger *
53 1.6 cegger * Function 8000.0006 L2 TLB/Cache Information
54 1.6 cegger * EAX -- L2 TLB 2/4MB pages
55 1.6 cegger * EBX -- L2 TLB 4K pages
56 1.6 cegger * ECX -- L2 Unified cache
57 1.6 cegger * EDX -- L3 Unified Cache
58 1.6 cegger *
59 1.6 cegger * Function 8000.0019 TLB 1GB Page Information
60 1.6 cegger * EAX -- L1 1GB pages
61 1.6 cegger * EBX -- L2 1GB pages
62 1.6 cegger * ECX -- reserved
63 1.6 cegger * EDX -- reserved
64 1.6 cegger *
65 1.1 fvdl * Athlon, Duron:
66 1.1 fvdl *
67 1.1 fvdl * Function 8000.0005 L1 TLB/Cache Information
68 1.1 fvdl * EAX -- L1 TLB 2/4MB pages
69 1.1 fvdl * EBX -- L1 TLB 4K pages
70 1.1 fvdl * ECX -- L1 D-cache
71 1.1 fvdl * EDX -- L1 I-cache
72 1.1 fvdl *
73 1.1 fvdl * Function 8000.0006 L2 TLB/Cache Information
74 1.1 fvdl * EAX -- L2 TLB 2/4MB pages
75 1.1 fvdl * EBX -- L2 TLB 4K pages
76 1.1 fvdl * ECX -- L2 Unified cache
77 1.1 fvdl * EDX -- reserved
78 1.1 fvdl *
79 1.1 fvdl * K5, K6:
80 1.1 fvdl *
81 1.1 fvdl * Function 8000.0005 L1 TLB/Cache Information
82 1.1 fvdl * EAX -- reserved
83 1.1 fvdl * EBX -- TLB 4K pages
84 1.1 fvdl * ECX -- L1 D-cache
85 1.1 fvdl * EDX -- L1 I-cache
86 1.1 fvdl *
87 1.1 fvdl * K6-III:
88 1.1 fvdl *
89 1.1 fvdl * Function 8000.0006 L2 Cache Information
90 1.1 fvdl * EAX -- reserved
91 1.1 fvdl * EBX -- reserved
92 1.1 fvdl * ECX -- L2 Unified cache
93 1.1 fvdl * EDX -- reserved
94 1.1 fvdl */
95 1.1 fvdl
96 1.1 fvdl /* L1 TLB 2/4MB pages */
97 1.1 fvdl #define AMD_L1_EAX_DTLB_ASSOC(x) (((x) >> 24) & 0xff)
98 1.1 fvdl #define AMD_L1_EAX_DTLB_ENTRIES(x) (((x) >> 16) & 0xff)
99 1.1 fvdl #define AMD_L1_EAX_ITLB_ASSOC(x) (((x) >> 8) & 0xff)
100 1.1 fvdl #define AMD_L1_EAX_ITLB_ENTRIES(x) ( (x) & 0xff)
101 1.1 fvdl
102 1.1 fvdl /* L1 TLB 4K pages */
103 1.1 fvdl #define AMD_L1_EBX_DTLB_ASSOC(x) (((x) >> 24) & 0xff)
104 1.1 fvdl #define AMD_L1_EBX_DTLB_ENTRIES(x) (((x) >> 16) & 0xff)
105 1.1 fvdl #define AMD_L1_EBX_ITLB_ASSOC(x) (((x) >> 8) & 0xff)
106 1.1 fvdl #define AMD_L1_EBX_ITLB_ENTRIES(x) ( (x) & 0xff)
107 1.1 fvdl
108 1.1 fvdl /* L1 Data Cache */
109 1.1 fvdl #define AMD_L1_ECX_DC_SIZE(x) ((((x) >> 24) & 0xff) * 1024)
110 1.1 fvdl #define AMD_L1_ECX_DC_ASSOC(x) (((x) >> 16) & 0xff)
111 1.1 fvdl #define AMD_L1_ECX_DC_LPT(x) (((x) >> 8) & 0xff)
112 1.1 fvdl #define AMD_L1_ECX_DC_LS(x) ( (x) & 0xff)
113 1.1 fvdl
114 1.1 fvdl /* L1 Instruction Cache */
115 1.1 fvdl #define AMD_L1_EDX_IC_SIZE(x) ((((x) >> 24) & 0xff) * 1024)
116 1.1 fvdl #define AMD_L1_EDX_IC_ASSOC(x) (((x) >> 16) & 0xff)
117 1.1 fvdl #define AMD_L1_EDX_IC_LPT(x) (((x) >> 8) & 0xff)
118 1.1 fvdl #define AMD_L1_EDX_IC_LS(x) ( (x) & 0xff)
119 1.1 fvdl
120 1.1 fvdl /* Note for L2 TLB -- if the upper 16 bits are 0, it is a unified TLB */
121 1.1 fvdl
122 1.1 fvdl /* L2 TLB 2/4MB pages */
123 1.1 fvdl #define AMD_L2_EAX_DTLB_ASSOC(x) (((x) >> 28) & 0xf)
124 1.1 fvdl #define AMD_L2_EAX_DTLB_ENTRIES(x) (((x) >> 16) & 0xfff)
125 1.1 fvdl #define AMD_L2_EAX_IUTLB_ASSOC(x) (((x) >> 12) & 0xf)
126 1.1 fvdl #define AMD_L2_EAX_IUTLB_ENTRIES(x) ( (x) & 0xfff)
127 1.1 fvdl
128 1.1 fvdl /* L2 TLB 4K pages */
129 1.1 fvdl #define AMD_L2_EBX_DTLB_ASSOC(x) (((x) >> 28) & 0xf)
130 1.1 fvdl #define AMD_L2_EBX_DTLB_ENTRIES(x) (((x) >> 16) & 0xfff)
131 1.1 fvdl #define AMD_L2_EBX_IUTLB_ASSOC(x) (((x) >> 12) & 0xf)
132 1.1 fvdl #define AMD_L2_EBX_IUTLB_ENTRIES(x) ( (x) & 0xfff)
133 1.1 fvdl
134 1.1 fvdl /* L2 Cache */
135 1.1 fvdl #define AMD_L2_ECX_C_SIZE(x) ((((x) >> 16) & 0xffff) * 1024)
136 1.1 fvdl #define AMD_L2_ECX_C_ASSOC(x) (((x) >> 12) & 0xf)
137 1.1 fvdl #define AMD_L2_ECX_C_LPT(x) (((x) >> 8) & 0xf)
138 1.1 fvdl #define AMD_L2_ECX_C_LS(x) ( (x) & 0xff)
139 1.1 fvdl
140 1.6 cegger /* L3 Cache */
141 1.8 christos #define AMD_L3_EDX_C_SIZE(x) ((((x) >> 18) & 0xffff) * 1024 * 512)
142 1.6 cegger #define AMD_L3_EDX_C_ASSOC(x) (((x) >> 12) & 0xff)
143 1.6 cegger #define AMD_L3_EDX_C_LPT(x) (((x) >> 8) & 0xf)
144 1.6 cegger #define AMD_L3_EDX_C_LS(x) ( (x) & 0xff)
145 1.6 cegger
146 1.6 cegger /* L1 TLB 1GB pages */
147 1.6 cegger #define AMD_L1_1GB_EAX_DTLB_ASSOC(x) (((x) >> 28) & 0xf)
148 1.6 cegger #define AMD_L1_1GB_EAX_DTLB_ENTRIES(x) (((x) >> 16) & 0xfff)
149 1.6 cegger #define AMD_L1_1GB_EAX_IUTLB_ASSOC(x) (((x) >> 12) & 0xf)
150 1.6 cegger #define AMD_L1_1GB_EAX_IUTLB_ENTRIES(x) ( (x) & 0xfff)
151 1.6 cegger
152 1.6 cegger /* L2 TLB 1GB pages */
153 1.6 cegger #define AMD_L2_1GB_EBX_DUTLB_ASSOC(x) (((x) >> 28) & 0xf)
154 1.6 cegger #define AMD_L2_1GB_EBX_DUTLB_ENTRIES(x) (((x) >> 16) & 0xfff)
155 1.6 cegger #define AMD_L2_1GB_EBX_IUTLB_ASSOC(x) (((x) >> 12) & 0xf)
156 1.6 cegger #define AMD_L2_1GB_EBX_IUTLB_ENTRIES(x) ( (x) & 0xfff)
157 1.6 cegger
158 1.2 briggs /*
159 1.2 briggs * VIA Cache Info:
160 1.2 briggs *
161 1.2 briggs * Nehemiah (at least)
162 1.2 briggs *
163 1.2 briggs * Function 8000.0005 L1 TLB/Cache Information
164 1.2 briggs * EAX -- reserved
165 1.2 briggs * EBX -- L1 TLB 4K pages
166 1.2 briggs * ECX -- L1 D-cache
167 1.2 briggs * EDX -- L1 I-cache
168 1.2 briggs *
169 1.2 briggs * Function 8000.0006 L2 Cache Information
170 1.2 briggs * EAX -- reserved
171 1.2 briggs * EBX -- reserved
172 1.2 briggs * ECX -- L2 Unified cache
173 1.2 briggs * EDX -- reserved
174 1.2 briggs */
175 1.2 briggs
176 1.2 briggs /* L1 TLB 4K pages */
177 1.2 briggs #define VIA_L1_EBX_DTLB_ASSOC(x) (((x) >> 24) & 0xff)
178 1.2 briggs #define VIA_L1_EBX_DTLB_ENTRIES(x) (((x) >> 16) & 0xff)
179 1.2 briggs #define VIA_L1_EBX_ITLB_ASSOC(x) (((x) >> 8) & 0xff)
180 1.2 briggs #define VIA_L1_EBX_ITLB_ENTRIES(x) ( (x) & 0xff)
181 1.2 briggs
182 1.2 briggs /* L1 Data Cache */
183 1.2 briggs #define VIA_L1_ECX_DC_SIZE(x) ((((x) >> 24) & 0xff) * 1024)
184 1.2 briggs #define VIA_L1_ECX_DC_ASSOC(x) (((x) >> 16) & 0xff)
185 1.2 briggs #define VIA_L1_ECX_DC_LPT(x) (((x) >> 8) & 0xff)
186 1.2 briggs #define VIA_L1_ECX_DC_LS(x) ( (x) & 0xff)
187 1.2 briggs
188 1.2 briggs /* L1 Instruction Cache */
189 1.2 briggs #define VIA_L1_EDX_IC_SIZE(x) ((((x) >> 24) & 0xff) * 1024)
190 1.2 briggs #define VIA_L1_EDX_IC_ASSOC(x) (((x) >> 16) & 0xff)
191 1.2 briggs #define VIA_L1_EDX_IC_LPT(x) (((x) >> 8) & 0xff)
192 1.2 briggs #define VIA_L1_EDX_IC_LS(x) ( (x) & 0xff)
193 1.2 briggs
194 1.3 briggs /* L2 Cache (pre-Nehemiah) */
195 1.3 briggs #define VIA_L2_ECX_C_SIZE(x) ((((x) >> 24) & 0xff) * 1024)
196 1.3 briggs #define VIA_L2_ECX_C_ASSOC(x) (((x) >> 16) & 0xff)
197 1.3 briggs #define VIA_L2_ECX_C_LPT(x) (((x) >> 8) & 0xff)
198 1.2 briggs #define VIA_L2_ECX_C_LS(x) ( (x) & 0xff)
199 1.2 briggs
200 1.3 briggs /* L2 Cache (Nehemiah and newer) */
201 1.3 briggs #define VIA_L2N_ECX_C_SIZE(x) ((((x) >> 16) & 0xffff) * 1024)
202 1.3 briggs #define VIA_L2N_ECX_C_ASSOC(x) (((x) >> 12) & 0xf)
203 1.3 briggs #define VIA_L2N_ECX_C_LPT(x) (((x) >> 8) & 0xf)
204 1.3 briggs #define VIA_L2N_ECX_C_LS(x) ( (x) & 0xff)
205 1.3 briggs
206 1.8 christos #ifdef _KERNEL
207 1.8 christos #define __CI_TBL(a,b,c,d,e,f) { a, b, c, d, e }
208 1.8 christos #else
209 1.8 christos #define __CI_TBL(a,b,c,d,e,f) { a, b, c, d, e, f }
210 1.8 christos #endif
211 1.8 christos
212 1.11 pgoyette /*
213 1.11 pgoyette * XXX Currently organized mostly by cache type, but would be
214 1.11 pgoyette * XXX easier to maintain if it were in descriptor type order.
215 1.11 pgoyette */
216 1.8 christos #define INTEL_CACHE_INFO { \
217 1.8 christos __CI_TBL(CAI_ITLB, 0x01, 4, 32, 4 * 1024, NULL), \
218 1.8 christos __CI_TBL(CAI_ITLB2, 0x02, 0xff, 2, 4 * 1024 * 1024, NULL), \
219 1.8 christos __CI_TBL(CAI_DTLB, 0x03, 4, 64, 4 * 1024, NULL), \
220 1.8 christos __CI_TBL(CAI_DTLB2, 0x04, 4, 8, 4 * 1024 * 1024, NULL), \
221 1.8 christos __CI_TBL(CAI_DTLB2, 0x05, 4, 32, 4 * 1024 * 1024, NULL), \
222 1.16 msaitoh __CI_TBL(CAI_ITLB2, 0x0b, 4, 4, 4 * 1024 * 1024, NULL), \
223 1.16 msaitoh __CI_TBL(CAI_ITLB, 0x4f, 0xff, 32, 4 * 1024, NULL), \
224 1.8 christos __CI_TBL(CAI_ITLB, 0x50, 0xff, 64, 4 * 1024, "4K/4M: 64 entries"), \
225 1.8 christos __CI_TBL(CAI_ITLB, 0x51, 0xff, 64, 4 * 1024, "4K/4M: 128 entries"),\
226 1.8 christos __CI_TBL(CAI_ITLB, 0x52, 0xff, 64, 4 * 1024, "4K/4M: 256 entries"),\
227 1.18 msaitoh __CI_TBL(CAI_ITLB2, 0x55, 0xff, 64, 4 * 1024, "2M/4M: 7 entries"), \
228 1.11 pgoyette __CI_TBL(CAI_DTLB2, 0x56, 4, 16, 4 * 1024 * 1024, NULL), \
229 1.18 msaitoh __CI_TBL(CAI_DTLB, 0x57, 4, 16, 4 * 1024, NULL), \
230 1.18 msaitoh __CI_TBL(CAI_DTLB, 0x59, 0xff, 16, 4 * 1024, NULL), \
231 1.18 msaitoh __CI_TBL(CAI_DTLB2, 0x5a, 0xff, 64, 4 * 1024, "2M/4M: 32 entries (L0)"), \
232 1.8 christos __CI_TBL(CAI_DTLB, 0x5b, 0xff, 64, 4 * 1024, "4K/4M: 64 entries"), \
233 1.8 christos __CI_TBL(CAI_DTLB, 0x5c, 0xff, 64, 4 * 1024, "4K/4M: 128 entries"),\
234 1.8 christos __CI_TBL(CAI_DTLB, 0x5d, 0xff, 64, 4 * 1024, "4K/4M: 256 entries"),\
235 1.16 msaitoh __CI_TBL(CAI_ITLB, 0x61, 0xff, 48, 4 * 1024, NULL), \
236 1.16 msaitoh __CI_TBL(CAI_L1_1GBDTLB,0x63, 4, 4,1024*1024 * 1024, NULL), \
237 1.20 msaitoh __CI_TBL(CAI_ITLB, 0x6a, 8, 64, 4 * 1024, NULL), \
238 1.20 msaitoh __CI_TBL(CAI_DTLB, 0x6b, 8,256, 4 * 1024, NULL), \
239 1.20 msaitoh __CI_TBL(CAI_L2_DTLB2, 0x6c, 8,126, 0, "2M/4M: 126 entries"),\
240 1.20 msaitoh __CI_TBL(CAI_L1_1GBDTLB,0x6d,0xff, 16,1024*1024 * 1024, NULL), \
241 1.16 msaitoh __CI_TBL(CAI_ITLB2, 0x76, 0xff, 8, 4 * 1024 * 1024, "2M/4M: 8 entries"), \
242 1.18 msaitoh __CI_TBL(CAI_DTLB, 0xa0, 0xff, 32, 4 * 1024, NULL), \
243 1.16 msaitoh __CI_TBL(CAI_ITLB, 0xb0, 4,128, 4 * 1024, NULL), \
244 1.18 msaitoh __CI_TBL(CAI_ITLB2, 0xb1, 4, 64, 0, "8 2M/4 4M entries"), \
245 1.11 pgoyette __CI_TBL(CAI_ITLB, 0xb2, 4, 64, 4 * 1024, NULL), \
246 1.16 msaitoh __CI_TBL(CAI_DTLB, 0xb3, 4,128, 4 * 1024, NULL), \
247 1.16 msaitoh __CI_TBL(CAI_DTLB, 0xb4, 4,256, 4 * 1024, NULL), \
248 1.16 msaitoh __CI_TBL(CAI_ITLB, 0xb5, 8, 64, 4 * 1024, NULL), \
249 1.16 msaitoh __CI_TBL(CAI_ITLB, 0xb6, 8,128, 4 * 1024, NULL), \
250 1.16 msaitoh __CI_TBL(CAI_DTLB, 0xba, 4, 64, 4 * 1024, NULL), \
251 1.18 msaitoh __CI_TBL(CAI_DTLB2, 0xc0, 4, 8, 4 * 1024, "4K/4M: 8 entries"), \
252 1.16 msaitoh __CI_TBL(CAI_L2_STLB2, 0xc1, 8,1024, 4 * 1024, "4K/2M: 1024 entries"), \
253 1.18 msaitoh __CI_TBL(CAI_DTLB2, 0xc2, 4, 16, 4 * 1024, "4K/2M: 16 entries"), \
254 1.19 msaitoh __CI_TBL(CAI_L2_STLB, 0xc3, 6,1536, 4 * 1024, NULL), \
255 1.18 msaitoh __CI_TBL(CAI_L2_STLB, 0xca, 4,512, 4 * 1024, NULL), \
256 1.8 christos __CI_TBL(CAI_ICACHE, 0x06, 4, 8 * 1024, 32, NULL), \
257 1.8 christos __CI_TBL(CAI_ICACHE, 0x08, 4, 16 * 1024, 32, NULL), \
258 1.11 pgoyette __CI_TBL(CAI_ICACHE, 0x09, 4, 32 * 1024, 64, NULL), \
259 1.8 christos __CI_TBL(CAI_DCACHE, 0x0a, 2, 8 * 1024, 32, NULL), \
260 1.8 christos __CI_TBL(CAI_DCACHE, 0x0c, 4, 16 * 1024, 32, NULL), \
261 1.14 msaitoh __CI_TBL(CAI_DCACHE, 0x0d, 4, 16 * 1024, 64, NULL), \
262 1.15 msaitoh __CI_TBL(CAI_DCACHE, 0x0e, 6, 24 * 1024, 64, NULL), \
263 1.11 pgoyette __CI_TBL(CAI_L2CACHE, 0x21, 8, 256 * 1024, 64, NULL), /* L2 (MLC) */ \
264 1.16 msaitoh __CI_TBL(CAI_L3CACHE, 0x22, 0xff, 512 * 1024, 64, "sectored, 4-way "), \
265 1.16 msaitoh __CI_TBL(CAI_L3CACHE, 0x23, 0xff, 1 * 1024 * 1024, 64, "sectored, 8-way "), \
266 1.16 msaitoh __CI_TBL(CAI_L2CACHE, 0x24, 16, 1 * 1024 * 1024, 64, NULL), \
267 1.16 msaitoh __CI_TBL(CAI_L3CACHE, 0x25, 0xff, 2 * 1024 * 1024, 64, "sectored, 8-way "), \
268 1.16 msaitoh __CI_TBL(CAI_L3CACHE, 0x29, 0xff, 4 * 1024 * 1024, 64, "sectored, 8-way "), \
269 1.16 msaitoh __CI_TBL(CAI_DCACHE, 0x2c, 8, 32 * 1024, 64, NULL), \
270 1.16 msaitoh __CI_TBL(CAI_ICACHE, 0x30, 8, 32 * 1024, 64, NULL), \
271 1.8 christos __CI_TBL(CAI_L2CACHE, 0x39, 4, 128 * 1024, 64, NULL), \
272 1.8 christos __CI_TBL(CAI_L2CACHE, 0x3a, 6, 192 * 1024, 64, NULL), \
273 1.8 christos __CI_TBL(CAI_L2CACHE, 0x3b, 2, 128 * 1024, 64, NULL), \
274 1.8 christos __CI_TBL(CAI_L2CACHE, 0x3c, 4, 256 * 1024, 64, NULL), \
275 1.8 christos __CI_TBL(CAI_L2CACHE, 0x3d, 6, 384 * 1024, 64, NULL), \
276 1.8 christos __CI_TBL(CAI_L2CACHE, 0x3e, 4, 512 * 1024, 64, NULL), \
277 1.8 christos __CI_TBL(CAI_L2CACHE, 0x40, 0, 0, 0, "not present"), \
278 1.8 christos __CI_TBL(CAI_L2CACHE, 0x41, 4, 128 * 1024, 32, NULL), \
279 1.8 christos __CI_TBL(CAI_L2CACHE, 0x42, 4, 256 * 1024, 32, NULL), \
280 1.8 christos __CI_TBL(CAI_L2CACHE, 0x43, 4, 512 * 1024, 32, NULL), \
281 1.8 christos __CI_TBL(CAI_L2CACHE, 0x44, 4, 1 * 1024 * 1024, 32, NULL), \
282 1.8 christos __CI_TBL(CAI_L2CACHE, 0x45, 4, 2 * 1024 * 1024, 32, NULL), \
283 1.16 msaitoh __CI_TBL(CAI_L3CACHE, 0x46, 4, 4 * 1024 * 1024, 64, NULL), \
284 1.16 msaitoh __CI_TBL(CAI_L3CACHE, 0x47, 8, 8 * 1024 * 1024, 64, NULL), \
285 1.11 pgoyette __CI_TBL(CAI_L2CACHE, 0x48, 12, 3 * 1024 * 1024, 64, NULL), \
286 1.11 pgoyette \
287 1.12 pgoyette /* 0x49 Is L2 on Xeon MP (Family 0f, Model 06), L3 otherwise */ \
288 1.8 christos __CI_TBL(CAI_L2CACHE, 0x49, 16, 4 * 1024 * 1024, 64, NULL), \
289 1.16 msaitoh __CI_TBL(CAI_L3CACHE, 0x49, 16, 4 * 1024 * 1024, 64, NULL), \
290 1.16 msaitoh __CI_TBL(CAI_L3CACHE, 0x4a, 12, 6 * 1024 * 1024, 64, NULL), \
291 1.16 msaitoh __CI_TBL(CAI_L3CACHE, 0x4b, 16, 8 * 1024 * 1024, 64, NULL), \
292 1.16 msaitoh __CI_TBL(CAI_L3CACHE, 0x4c, 12,12 * 1024 * 1024, 64, NULL), \
293 1.16 msaitoh __CI_TBL(CAI_L3CACHE, 0x4d, 16,16 * 1024 * 1024, 64, NULL), \
294 1.8 christos __CI_TBL(CAI_L2CACHE, 0x4e, 24, 6 * 1024 * 1024, 64, NULL), \
295 1.8 christos __CI_TBL(CAI_DCACHE, 0x60, 8, 16 * 1024, 64, NULL), \
296 1.8 christos __CI_TBL(CAI_DCACHE, 0x66, 4, 8 * 1024, 64, NULL), \
297 1.8 christos __CI_TBL(CAI_DCACHE, 0x67, 4, 16 * 1024, 64, NULL), \
298 1.8 christos __CI_TBL(CAI_DCACHE, 0x68, 4, 32 * 1024, 64, NULL), \
299 1.8 christos __CI_TBL(CAI_ICACHE, 0x70, 8, 12 * 1024, 64, "12K uOp cache"), \
300 1.8 christos __CI_TBL(CAI_ICACHE, 0x71, 8, 16 * 1024, 64, "16K uOp cache"), \
301 1.8 christos __CI_TBL(CAI_ICACHE, 0x72, 8, 32 * 1024, 64, "32K uOp cache"), \
302 1.8 christos __CI_TBL(CAI_ICACHE, 0x73, 8, 64 * 1024, 64, "64K uOp cache"), \
303 1.8 christos __CI_TBL(CAI_L2CACHE, 0x78, 4, 1 * 1024 * 1024, 64, NULL), \
304 1.8 christos __CI_TBL(CAI_L2CACHE, 0x79, 8, 128 * 1024, 64, NULL), \
305 1.8 christos __CI_TBL(CAI_L2CACHE, 0x7a, 8, 256 * 1024, 64, NULL), \
306 1.8 christos __CI_TBL(CAI_L2CACHE, 0x7b, 8, 512 * 1024, 64, NULL), \
307 1.8 christos __CI_TBL(CAI_L2CACHE, 0x7c, 8, 1 * 1024 * 1024, 64, NULL), \
308 1.8 christos __CI_TBL(CAI_L2CACHE, 0x7d, 8, 2 * 1024 * 1024, 64, NULL), \
309 1.8 christos __CI_TBL(CAI_L2CACHE, 0x7f, 2, 512 * 1024, 64, NULL), \
310 1.15 msaitoh __CI_TBL(CAI_L2CACHE, 0x80, 8, 512 * 1024, 64, NULL), \
311 1.8 christos __CI_TBL(CAI_L2CACHE, 0x82, 8, 256 * 1024, 32, NULL), \
312 1.8 christos __CI_TBL(CAI_L2CACHE, 0x83, 8, 512 * 1024, 32, NULL), \
313 1.8 christos __CI_TBL(CAI_L2CACHE, 0x84, 8, 1 * 1024 * 1024, 32, NULL), \
314 1.8 christos __CI_TBL(CAI_L2CACHE, 0x85, 8, 2 * 1024 * 1024, 32, NULL), \
315 1.8 christos __CI_TBL(CAI_L2CACHE, 0x86, 4, 512 * 1024, 64, NULL), \
316 1.8 christos __CI_TBL(CAI_L2CACHE, 0x87, 8, 1 * 1024 * 1024, 64, NULL), \
317 1.11 pgoyette __CI_TBL(CAI_L3CACHE, 0xd0, 4, 512 * 1024, 64, NULL), \
318 1.11 pgoyette __CI_TBL(CAI_L3CACHE, 0xd1, 4, 1 * 1024 * 1024, 64, NULL), \
319 1.11 pgoyette __CI_TBL(CAI_L3CACHE, 0xd2, 4, 2 * 1024 * 1024, 64, NULL), \
320 1.11 pgoyette __CI_TBL(CAI_L3CACHE, 0xd6, 8, 1 * 1024 * 1024, 64, NULL), \
321 1.11 pgoyette __CI_TBL(CAI_L3CACHE, 0xd7, 8, 2 * 1024 * 1024, 64, NULL), \
322 1.11 pgoyette __CI_TBL(CAI_L3CACHE, 0xd8, 8, 4 * 1024 * 1024, 64, NULL), \
323 1.11 pgoyette __CI_TBL(CAI_L3CACHE, 0xdc, 12, 3 * 512 * 1024, 64, NULL), \
324 1.11 pgoyette __CI_TBL(CAI_L3CACHE, 0xdd, 12, 3 * 1024 * 1024, 64, NULL), \
325 1.11 pgoyette __CI_TBL(CAI_L3CACHE, 0xde, 12, 6 * 1024 * 1024, 64, NULL), \
326 1.11 pgoyette __CI_TBL(CAI_L3CACHE, 0xe2, 16, 2 * 1024 * 1024, 64, NULL), \
327 1.11 pgoyette __CI_TBL(CAI_L3CACHE, 0xe3, 16, 4 * 1024 * 1024, 64, NULL), \
328 1.11 pgoyette __CI_TBL(CAI_L3CACHE, 0xe4, 16, 8 * 1024 * 1024, 64, NULL), \
329 1.11 pgoyette __CI_TBL(CAI_L3CACHE, 0xea, 24,12 * 1024 * 1024, 64, NULL), \
330 1.14 msaitoh __CI_TBL(CAI_L3CACHE, 0xeb, 24,18 * 1024 * 1024, 64, NULL), \
331 1.11 pgoyette __CI_TBL(CAI_L3CACHE, 0xec, 24,24 * 1024 * 1024, 64, NULL), \
332 1.17 msaitoh __CI_TBL(CAI_PREFETCH, 0xf0, 0, 0, 64, NULL), \
333 1.17 msaitoh __CI_TBL(CAI_PREFETCH, 0xf1, 0, 0,128, NULL), \
334 1.17 msaitoh /* 0xff means no cache information in CPUID leaf 2 (and use leaf 4) */ \
335 1.8 christos __CI_TBL(0, 0, 0, 0, 0, NULL) \
336 1.8 christos }
337 1.8 christos
338 1.8 christos #define AMD_L2CACHE_INFO { \
339 1.8 christos __CI_TBL(0, 0x01, 1, 0, 0, NULL), \
340 1.8 christos __CI_TBL(0, 0x02, 2, 0, 0, NULL), \
341 1.8 christos __CI_TBL(0, 0x04, 4, 0, 0, NULL), \
342 1.8 christos __CI_TBL(0, 0x06, 8, 0, 0, NULL), \
343 1.8 christos __CI_TBL(0, 0x08, 16, 0, 0, NULL), \
344 1.8 christos __CI_TBL(0, 0x0a, 32, 0, 0, NULL), \
345 1.8 christos __CI_TBL(0, 0x0b, 48, 0, 0, NULL), \
346 1.8 christos __CI_TBL(0, 0x0c, 64, 0, 0, NULL), \
347 1.8 christos __CI_TBL(0, 0x0d, 96, 0, 0, NULL), \
348 1.8 christos __CI_TBL(0, 0x0e, 128, 0, 0, NULL), \
349 1.8 christos __CI_TBL(0, 0x0f, 0xff, 0, 0, NULL), \
350 1.8 christos __CI_TBL(0, 0x00, 0, 0, 0, NULL) \
351 1.8 christos }
352 1.8 christos
353 1.8 christos #define AMD_L3CACHE_INFO { \
354 1.8 christos __CI_TBL(0, 0x01, 1, 0, 0, NULL), \
355 1.8 christos __CI_TBL(0, 0x02, 2, 0, 0, NULL), \
356 1.8 christos __CI_TBL(0, 0x04, 4, 0, 0, NULL), \
357 1.8 christos __CI_TBL(0, 0x06, 8, 0, 0, NULL), \
358 1.8 christos __CI_TBL(0, 0x08, 16, 0, 0, NULL), \
359 1.8 christos __CI_TBL(0, 0x0a, 32, 0, 0, NULL), \
360 1.8 christos __CI_TBL(0, 0x0b, 48, 0, 0, NULL), \
361 1.8 christos __CI_TBL(0, 0x0c, 64, 0, 0, NULL), \
362 1.8 christos __CI_TBL(0, 0x0d, 96, 0, 0, NULL), \
363 1.8 christos __CI_TBL(0, 0x0e, 128, 0, 0, NULL), \
364 1.8 christos __CI_TBL(0, 0x0f, 0xff, 0, 0, NULL), \
365 1.8 christos __CI_TBL(0, 0x00, 0, 0, 0, NULL) \
366 1.8 christos }
367 1.8 christos
368 1.4 yamt #endif /* _X86_CACHEINFO_H_ */
369