1 1.1.4.1 jmc /* $NetBSD: cacheinfo.h,v 1.1.4.1 2004/08/12 03:31:21 jmc Exp $ */ 2 1.1 fvdl 3 1.1 fvdl #ifndef _X86_CACHEINFO_H 4 1.1 fvdl #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 const char *cai_string; 13 1.1 fvdl }; 14 1.1 fvdl 15 1.1 fvdl #define CAI_ITLB 0 /* Instruction TLB (4K pages) */ 16 1.1 fvdl #define CAI_ITLB2 1 /* Instruction TLB (2/4M pages) */ 17 1.1 fvdl #define CAI_DTLB 2 /* Data TLB (4K pages) */ 18 1.1 fvdl #define CAI_DTLB2 3 /* Data TLB (2/4M pages) */ 19 1.1 fvdl #define CAI_ICACHE 4 /* Instruction cache */ 20 1.1 fvdl #define CAI_DCACHE 5 /* Data cache */ 21 1.1 fvdl #define CAI_L2CACHE 6 /* Level 2 cache */ 22 1.1 fvdl 23 1.1 fvdl #define CAI_COUNT 7 24 1.1 fvdl 25 1.1 fvdl struct cpu_info; 26 1.1 fvdl 27 1.1 fvdl const struct x86_cache_info *cache_info_lookup(const struct x86_cache_info *, 28 1.1 fvdl u_int8_t); 29 1.1 fvdl void amd_cpu_cacheinfo(struct cpu_info *); 30 1.1.4.1 jmc void via_cpu_cacheinfo(struct cpu_info *); 31 1.1 fvdl void x86_print_cacheinfo(struct cpu_info *); 32 1.1 fvdl 33 1.1 fvdl /* 34 1.1 fvdl * AMD Cache Info: 35 1.1 fvdl * 36 1.1 fvdl * Athlon, Duron: 37 1.1 fvdl * 38 1.1 fvdl * Function 8000.0005 L1 TLB/Cache Information 39 1.1 fvdl * EAX -- L1 TLB 2/4MB pages 40 1.1 fvdl * EBX -- L1 TLB 4K pages 41 1.1 fvdl * ECX -- L1 D-cache 42 1.1 fvdl * EDX -- L1 I-cache 43 1.1 fvdl * 44 1.1 fvdl * Function 8000.0006 L2 TLB/Cache Information 45 1.1 fvdl * EAX -- L2 TLB 2/4MB pages 46 1.1 fvdl * EBX -- L2 TLB 4K pages 47 1.1 fvdl * ECX -- L2 Unified cache 48 1.1 fvdl * EDX -- reserved 49 1.1 fvdl * 50 1.1 fvdl * K5, K6: 51 1.1 fvdl * 52 1.1 fvdl * Function 8000.0005 L1 TLB/Cache Information 53 1.1 fvdl * EAX -- reserved 54 1.1 fvdl * EBX -- TLB 4K pages 55 1.1 fvdl * ECX -- L1 D-cache 56 1.1 fvdl * EDX -- L1 I-cache 57 1.1 fvdl * 58 1.1 fvdl * K6-III: 59 1.1 fvdl * 60 1.1 fvdl * Function 8000.0006 L2 Cache Information 61 1.1 fvdl * EAX -- reserved 62 1.1 fvdl * EBX -- reserved 63 1.1 fvdl * ECX -- L2 Unified cache 64 1.1 fvdl * EDX -- reserved 65 1.1 fvdl */ 66 1.1 fvdl 67 1.1 fvdl /* L1 TLB 2/4MB pages */ 68 1.1 fvdl #define AMD_L1_EAX_DTLB_ASSOC(x) (((x) >> 24) & 0xff) 69 1.1 fvdl #define AMD_L1_EAX_DTLB_ENTRIES(x) (((x) >> 16) & 0xff) 70 1.1 fvdl #define AMD_L1_EAX_ITLB_ASSOC(x) (((x) >> 8) & 0xff) 71 1.1 fvdl #define AMD_L1_EAX_ITLB_ENTRIES(x) ( (x) & 0xff) 72 1.1 fvdl 73 1.1 fvdl /* L1 TLB 4K pages */ 74 1.1 fvdl #define AMD_L1_EBX_DTLB_ASSOC(x) (((x) >> 24) & 0xff) 75 1.1 fvdl #define AMD_L1_EBX_DTLB_ENTRIES(x) (((x) >> 16) & 0xff) 76 1.1 fvdl #define AMD_L1_EBX_ITLB_ASSOC(x) (((x) >> 8) & 0xff) 77 1.1 fvdl #define AMD_L1_EBX_ITLB_ENTRIES(x) ( (x) & 0xff) 78 1.1 fvdl 79 1.1 fvdl /* L1 Data Cache */ 80 1.1 fvdl #define AMD_L1_ECX_DC_SIZE(x) ((((x) >> 24) & 0xff) * 1024) 81 1.1 fvdl #define AMD_L1_ECX_DC_ASSOC(x) (((x) >> 16) & 0xff) 82 1.1 fvdl #define AMD_L1_ECX_DC_LPT(x) (((x) >> 8) & 0xff) 83 1.1 fvdl #define AMD_L1_ECX_DC_LS(x) ( (x) & 0xff) 84 1.1 fvdl 85 1.1 fvdl /* L1 Instruction Cache */ 86 1.1 fvdl #define AMD_L1_EDX_IC_SIZE(x) ((((x) >> 24) & 0xff) * 1024) 87 1.1 fvdl #define AMD_L1_EDX_IC_ASSOC(x) (((x) >> 16) & 0xff) 88 1.1 fvdl #define AMD_L1_EDX_IC_LPT(x) (((x) >> 8) & 0xff) 89 1.1 fvdl #define AMD_L1_EDX_IC_LS(x) ( (x) & 0xff) 90 1.1 fvdl 91 1.1 fvdl /* Note for L2 TLB -- if the upper 16 bits are 0, it is a unified TLB */ 92 1.1 fvdl 93 1.1 fvdl /* L2 TLB 2/4MB pages */ 94 1.1 fvdl #define AMD_L2_EAX_DTLB_ASSOC(x) (((x) >> 28) & 0xf) 95 1.1 fvdl #define AMD_L2_EAX_DTLB_ENTRIES(x) (((x) >> 16) & 0xfff) 96 1.1 fvdl #define AMD_L2_EAX_IUTLB_ASSOC(x) (((x) >> 12) & 0xf) 97 1.1 fvdl #define AMD_L2_EAX_IUTLB_ENTRIES(x) ( (x) & 0xfff) 98 1.1 fvdl 99 1.1 fvdl /* L2 TLB 4K pages */ 100 1.1 fvdl #define AMD_L2_EBX_DTLB_ASSOC(x) (((x) >> 28) & 0xf) 101 1.1 fvdl #define AMD_L2_EBX_DTLB_ENTRIES(x) (((x) >> 16) & 0xfff) 102 1.1 fvdl #define AMD_L2_EBX_IUTLB_ASSOC(x) (((x) >> 12) & 0xf) 103 1.1 fvdl #define AMD_L2_EBX_IUTLB_ENTRIES(x) ( (x) & 0xfff) 104 1.1 fvdl 105 1.1 fvdl /* L2 Cache */ 106 1.1 fvdl #define AMD_L2_ECX_C_SIZE(x) ((((x) >> 16) & 0xffff) * 1024) 107 1.1 fvdl #define AMD_L2_ECX_C_ASSOC(x) (((x) >> 12) & 0xf) 108 1.1 fvdl #define AMD_L2_ECX_C_LPT(x) (((x) >> 8) & 0xf) 109 1.1 fvdl #define AMD_L2_ECX_C_LS(x) ( (x) & 0xff) 110 1.1 fvdl 111 1.1.4.1 jmc /* 112 1.1.4.1 jmc * VIA Cache Info: 113 1.1.4.1 jmc * 114 1.1.4.1 jmc * Nehemiah (at least) 115 1.1.4.1 jmc * 116 1.1.4.1 jmc * Function 8000.0005 L1 TLB/Cache Information 117 1.1.4.1 jmc * EAX -- reserved 118 1.1.4.1 jmc * EBX -- L1 TLB 4K pages 119 1.1.4.1 jmc * ECX -- L1 D-cache 120 1.1.4.1 jmc * EDX -- L1 I-cache 121 1.1.4.1 jmc * 122 1.1.4.1 jmc * Function 8000.0006 L2 Cache Information 123 1.1.4.1 jmc * EAX -- reserved 124 1.1.4.1 jmc * EBX -- reserved 125 1.1.4.1 jmc * ECX -- L2 Unified cache 126 1.1.4.1 jmc * EDX -- reserved 127 1.1.4.1 jmc */ 128 1.1.4.1 jmc 129 1.1.4.1 jmc /* L1 TLB 4K pages */ 130 1.1.4.1 jmc #define VIA_L1_EBX_DTLB_ASSOC(x) (((x) >> 24) & 0xff) 131 1.1.4.1 jmc #define VIA_L1_EBX_DTLB_ENTRIES(x) (((x) >> 16) & 0xff) 132 1.1.4.1 jmc #define VIA_L1_EBX_ITLB_ASSOC(x) (((x) >> 8) & 0xff) 133 1.1.4.1 jmc #define VIA_L1_EBX_ITLB_ENTRIES(x) ( (x) & 0xff) 134 1.1.4.1 jmc 135 1.1.4.1 jmc /* L1 Data Cache */ 136 1.1.4.1 jmc #define VIA_L1_ECX_DC_SIZE(x) ((((x) >> 24) & 0xff) * 1024) 137 1.1.4.1 jmc #define VIA_L1_ECX_DC_ASSOC(x) (((x) >> 16) & 0xff) 138 1.1.4.1 jmc #define VIA_L1_ECX_DC_LPT(x) (((x) >> 8) & 0xff) 139 1.1.4.1 jmc #define VIA_L1_ECX_DC_LS(x) ( (x) & 0xff) 140 1.1.4.1 jmc 141 1.1.4.1 jmc /* L1 Instruction Cache */ 142 1.1.4.1 jmc #define VIA_L1_EDX_IC_SIZE(x) ((((x) >> 24) & 0xff) * 1024) 143 1.1.4.1 jmc #define VIA_L1_EDX_IC_ASSOC(x) (((x) >> 16) & 0xff) 144 1.1.4.1 jmc #define VIA_L1_EDX_IC_LPT(x) (((x) >> 8) & 0xff) 145 1.1.4.1 jmc #define VIA_L1_EDX_IC_LS(x) ( (x) & 0xff) 146 1.1.4.1 jmc 147 1.1.4.1 jmc /* L2 Cache */ 148 1.1.4.1 jmc #define VIA_L2_ECX_C_SIZE(x) ((((x) >> 16) & 0xffff) * 1024) 149 1.1.4.1 jmc #define VIA_L2_ECX_C_ASSOC(x) (((x) >> 12) & 0xf) 150 1.1.4.1 jmc #define VIA_L2_ECX_C_LPT(x) (((x) >> 8) & 0xf) 151 1.1.4.1 jmc #define VIA_L2_ECX_C_LS(x) ( (x) & 0xff) 152 1.1.4.1 jmc 153 1.1 fvdl #endif /* _X86_CACHEINFO_H */ 154