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