1 1.7 christos /* $NetBSD: cacheinfo.h,v 1.7 2008/05/30 14:42:42 christos 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.1 fvdl u_int cai_linesize; /* or page size for TLB */ 12 1.7 christos #ifndef _KERNEL 13 1.7 christos char *cai_string; 14 1.7 christos #endif 15 1.1 fvdl }; 16 1.1 fvdl 17 1.1 fvdl #define CAI_ITLB 0 /* Instruction TLB (4K pages) */ 18 1.1 fvdl #define CAI_ITLB2 1 /* Instruction TLB (2/4M pages) */ 19 1.1 fvdl #define CAI_DTLB 2 /* Data TLB (4K pages) */ 20 1.1 fvdl #define CAI_DTLB2 3 /* Data TLB (2/4M pages) */ 21 1.1 fvdl #define CAI_ICACHE 4 /* Instruction cache */ 22 1.1 fvdl #define CAI_DCACHE 5 /* Data cache */ 23 1.1 fvdl #define CAI_L2CACHE 6 /* Level 2 cache */ 24 1.6 cegger #define CAI_L3CACHE 7 /* Level 3 cache */ 25 1.6 cegger #define CAI_L1_1GBITLB 8 /* L1 1GB Page instruction TLB */ 26 1.6 cegger #define CAI_L1_1GBDTLB 9 /* L1 1GB Page data TLB */ 27 1.6 cegger #define CAI_L2_1GBITLB 10 /* L2 1GB Page instruction TLB */ 28 1.6 cegger #define CAI_L2_1GBDTLB 11 /* L2 1GB Page data TLB */ 29 1.1 fvdl 30 1.6 cegger #define CAI_COUNT 12 31 1.1 fvdl 32 1.1 fvdl /* 33 1.1 fvdl * AMD Cache Info: 34 1.1 fvdl * 35 1.6 cegger * Barcelona, Phenom: 36 1.6 cegger * 37 1.6 cegger * Function 8000.0005 L1 TLB/Cache Information 38 1.6 cegger * EAX -- L1 TLB 2/4MB pages 39 1.6 cegger * EBX -- L1 TLB 4K pages 40 1.6 cegger * ECX -- L1 D-cache 41 1.6 cegger * EDX -- L1 I-cache 42 1.6 cegger * 43 1.6 cegger * Function 8000.0006 L2 TLB/Cache Information 44 1.6 cegger * EAX -- L2 TLB 2/4MB pages 45 1.6 cegger * EBX -- L2 TLB 4K pages 46 1.6 cegger * ECX -- L2 Unified cache 47 1.6 cegger * EDX -- L3 Unified Cache 48 1.6 cegger * 49 1.6 cegger * Function 8000.0019 TLB 1GB Page Information 50 1.6 cegger * EAX -- L1 1GB pages 51 1.6 cegger * EBX -- L2 1GB pages 52 1.6 cegger * ECX -- reserved 53 1.6 cegger * EDX -- reserved 54 1.6 cegger * 55 1.1 fvdl * Athlon, Duron: 56 1.1 fvdl * 57 1.1 fvdl * Function 8000.0005 L1 TLB/Cache Information 58 1.1 fvdl * EAX -- L1 TLB 2/4MB pages 59 1.1 fvdl * EBX -- L1 TLB 4K pages 60 1.1 fvdl * ECX -- L1 D-cache 61 1.1 fvdl * EDX -- L1 I-cache 62 1.1 fvdl * 63 1.1 fvdl * Function 8000.0006 L2 TLB/Cache Information 64 1.1 fvdl * EAX -- L2 TLB 2/4MB pages 65 1.1 fvdl * EBX -- L2 TLB 4K pages 66 1.1 fvdl * ECX -- L2 Unified cache 67 1.1 fvdl * EDX -- reserved 68 1.1 fvdl * 69 1.1 fvdl * K5, K6: 70 1.1 fvdl * 71 1.1 fvdl * Function 8000.0005 L1 TLB/Cache Information 72 1.1 fvdl * EAX -- reserved 73 1.1 fvdl * EBX -- TLB 4K pages 74 1.1 fvdl * ECX -- L1 D-cache 75 1.1 fvdl * EDX -- L1 I-cache 76 1.1 fvdl * 77 1.1 fvdl * K6-III: 78 1.1 fvdl * 79 1.1 fvdl * Function 8000.0006 L2 Cache Information 80 1.1 fvdl * EAX -- reserved 81 1.1 fvdl * EBX -- reserved 82 1.1 fvdl * ECX -- L2 Unified cache 83 1.1 fvdl * EDX -- reserved 84 1.1 fvdl */ 85 1.1 fvdl 86 1.1 fvdl /* L1 TLB 2/4MB pages */ 87 1.1 fvdl #define AMD_L1_EAX_DTLB_ASSOC(x) (((x) >> 24) & 0xff) 88 1.1 fvdl #define AMD_L1_EAX_DTLB_ENTRIES(x) (((x) >> 16) & 0xff) 89 1.1 fvdl #define AMD_L1_EAX_ITLB_ASSOC(x) (((x) >> 8) & 0xff) 90 1.1 fvdl #define AMD_L1_EAX_ITLB_ENTRIES(x) ( (x) & 0xff) 91 1.1 fvdl 92 1.1 fvdl /* L1 TLB 4K pages */ 93 1.1 fvdl #define AMD_L1_EBX_DTLB_ASSOC(x) (((x) >> 24) & 0xff) 94 1.1 fvdl #define AMD_L1_EBX_DTLB_ENTRIES(x) (((x) >> 16) & 0xff) 95 1.1 fvdl #define AMD_L1_EBX_ITLB_ASSOC(x) (((x) >> 8) & 0xff) 96 1.1 fvdl #define AMD_L1_EBX_ITLB_ENTRIES(x) ( (x) & 0xff) 97 1.1 fvdl 98 1.1 fvdl /* L1 Data Cache */ 99 1.1 fvdl #define AMD_L1_ECX_DC_SIZE(x) ((((x) >> 24) & 0xff) * 1024) 100 1.1 fvdl #define AMD_L1_ECX_DC_ASSOC(x) (((x) >> 16) & 0xff) 101 1.1 fvdl #define AMD_L1_ECX_DC_LPT(x) (((x) >> 8) & 0xff) 102 1.1 fvdl #define AMD_L1_ECX_DC_LS(x) ( (x) & 0xff) 103 1.1 fvdl 104 1.1 fvdl /* L1 Instruction Cache */ 105 1.1 fvdl #define AMD_L1_EDX_IC_SIZE(x) ((((x) >> 24) & 0xff) * 1024) 106 1.1 fvdl #define AMD_L1_EDX_IC_ASSOC(x) (((x) >> 16) & 0xff) 107 1.1 fvdl #define AMD_L1_EDX_IC_LPT(x) (((x) >> 8) & 0xff) 108 1.1 fvdl #define AMD_L1_EDX_IC_LS(x) ( (x) & 0xff) 109 1.1 fvdl 110 1.1 fvdl /* Note for L2 TLB -- if the upper 16 bits are 0, it is a unified TLB */ 111 1.1 fvdl 112 1.1 fvdl /* L2 TLB 2/4MB pages */ 113 1.1 fvdl #define AMD_L2_EAX_DTLB_ASSOC(x) (((x) >> 28) & 0xf) 114 1.1 fvdl #define AMD_L2_EAX_DTLB_ENTRIES(x) (((x) >> 16) & 0xfff) 115 1.1 fvdl #define AMD_L2_EAX_IUTLB_ASSOC(x) (((x) >> 12) & 0xf) 116 1.1 fvdl #define AMD_L2_EAX_IUTLB_ENTRIES(x) ( (x) & 0xfff) 117 1.1 fvdl 118 1.1 fvdl /* L2 TLB 4K pages */ 119 1.1 fvdl #define AMD_L2_EBX_DTLB_ASSOC(x) (((x) >> 28) & 0xf) 120 1.1 fvdl #define AMD_L2_EBX_DTLB_ENTRIES(x) (((x) >> 16) & 0xfff) 121 1.1 fvdl #define AMD_L2_EBX_IUTLB_ASSOC(x) (((x) >> 12) & 0xf) 122 1.1 fvdl #define AMD_L2_EBX_IUTLB_ENTRIES(x) ( (x) & 0xfff) 123 1.1 fvdl 124 1.1 fvdl /* L2 Cache */ 125 1.1 fvdl #define AMD_L2_ECX_C_SIZE(x) ((((x) >> 16) & 0xffff) * 1024) 126 1.1 fvdl #define AMD_L2_ECX_C_ASSOC(x) (((x) >> 12) & 0xf) 127 1.1 fvdl #define AMD_L2_ECX_C_LPT(x) (((x) >> 8) & 0xf) 128 1.1 fvdl #define AMD_L2_ECX_C_LS(x) ( (x) & 0xff) 129 1.1 fvdl 130 1.6 cegger /* L3 Cache */ 131 1.6 cegger #define AMD_L3_EDX_C_SIZE(x) ((((x) >> 18) & 0xffff) * 1024) 132 1.6 cegger #define AMD_L3_EDX_C_ASSOC(x) (((x) >> 12) & 0xff) 133 1.6 cegger #define AMD_L3_EDX_C_LPT(x) (((x) >> 8) & 0xf) 134 1.6 cegger #define AMD_L3_EDX_C_LS(x) ( (x) & 0xff) 135 1.6 cegger 136 1.6 cegger /* L1 TLB 1GB pages */ 137 1.6 cegger #define AMD_L1_1GB_EAX_DTLB_ASSOC(x) (((x) >> 28) & 0xf) 138 1.6 cegger #define AMD_L1_1GB_EAX_DTLB_ENTRIES(x) (((x) >> 16) & 0xfff) 139 1.6 cegger #define AMD_L1_1GB_EAX_IUTLB_ASSOC(x) (((x) >> 12) & 0xf) 140 1.6 cegger #define AMD_L1_1GB_EAX_IUTLB_ENTRIES(x) ( (x) & 0xfff) 141 1.6 cegger 142 1.6 cegger /* L2 TLB 1GB pages */ 143 1.6 cegger #define AMD_L2_1GB_EBX_DUTLB_ASSOC(x) (((x) >> 28) & 0xf) 144 1.6 cegger #define AMD_L2_1GB_EBX_DUTLB_ENTRIES(x) (((x) >> 16) & 0xfff) 145 1.6 cegger #define AMD_L2_1GB_EBX_IUTLB_ASSOC(x) (((x) >> 12) & 0xf) 146 1.6 cegger #define AMD_L2_1GB_EBX_IUTLB_ENTRIES(x) ( (x) & 0xfff) 147 1.6 cegger 148 1.2 briggs /* 149 1.2 briggs * VIA Cache Info: 150 1.2 briggs * 151 1.2 briggs * Nehemiah (at least) 152 1.2 briggs * 153 1.2 briggs * Function 8000.0005 L1 TLB/Cache Information 154 1.2 briggs * EAX -- reserved 155 1.2 briggs * EBX -- L1 TLB 4K pages 156 1.2 briggs * ECX -- L1 D-cache 157 1.2 briggs * EDX -- L1 I-cache 158 1.2 briggs * 159 1.2 briggs * Function 8000.0006 L2 Cache Information 160 1.2 briggs * EAX -- reserved 161 1.2 briggs * EBX -- reserved 162 1.2 briggs * ECX -- L2 Unified cache 163 1.2 briggs * EDX -- reserved 164 1.2 briggs */ 165 1.2 briggs 166 1.2 briggs /* L1 TLB 4K pages */ 167 1.2 briggs #define VIA_L1_EBX_DTLB_ASSOC(x) (((x) >> 24) & 0xff) 168 1.2 briggs #define VIA_L1_EBX_DTLB_ENTRIES(x) (((x) >> 16) & 0xff) 169 1.2 briggs #define VIA_L1_EBX_ITLB_ASSOC(x) (((x) >> 8) & 0xff) 170 1.2 briggs #define VIA_L1_EBX_ITLB_ENTRIES(x) ( (x) & 0xff) 171 1.2 briggs 172 1.2 briggs /* L1 Data Cache */ 173 1.2 briggs #define VIA_L1_ECX_DC_SIZE(x) ((((x) >> 24) & 0xff) * 1024) 174 1.2 briggs #define VIA_L1_ECX_DC_ASSOC(x) (((x) >> 16) & 0xff) 175 1.2 briggs #define VIA_L1_ECX_DC_LPT(x) (((x) >> 8) & 0xff) 176 1.2 briggs #define VIA_L1_ECX_DC_LS(x) ( (x) & 0xff) 177 1.2 briggs 178 1.2 briggs /* L1 Instruction Cache */ 179 1.2 briggs #define VIA_L1_EDX_IC_SIZE(x) ((((x) >> 24) & 0xff) * 1024) 180 1.2 briggs #define VIA_L1_EDX_IC_ASSOC(x) (((x) >> 16) & 0xff) 181 1.2 briggs #define VIA_L1_EDX_IC_LPT(x) (((x) >> 8) & 0xff) 182 1.2 briggs #define VIA_L1_EDX_IC_LS(x) ( (x) & 0xff) 183 1.2 briggs 184 1.3 briggs /* L2 Cache (pre-Nehemiah) */ 185 1.3 briggs #define VIA_L2_ECX_C_SIZE(x) ((((x) >> 24) & 0xff) * 1024) 186 1.3 briggs #define VIA_L2_ECX_C_ASSOC(x) (((x) >> 16) & 0xff) 187 1.3 briggs #define VIA_L2_ECX_C_LPT(x) (((x) >> 8) & 0xff) 188 1.2 briggs #define VIA_L2_ECX_C_LS(x) ( (x) & 0xff) 189 1.2 briggs 190 1.3 briggs /* L2 Cache (Nehemiah and newer) */ 191 1.3 briggs #define VIA_L2N_ECX_C_SIZE(x) ((((x) >> 16) & 0xffff) * 1024) 192 1.3 briggs #define VIA_L2N_ECX_C_ASSOC(x) (((x) >> 12) & 0xf) 193 1.3 briggs #define VIA_L2N_ECX_C_LPT(x) (((x) >> 8) & 0xf) 194 1.3 briggs #define VIA_L2N_ECX_C_LS(x) ( (x) & 0xff) 195 1.3 briggs 196 1.4 yamt #endif /* _X86_CACHEINFO_H_ */ 197