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