1 /* 2 * Copyright 2005-2009, Haiku, Inc. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * Axel Dörfler, axeld@pinc-software.de 7 */ 8 9 10 #include "via.h" 11 #include "generic_x86.h" 12 13 #include <cpu.h> 14 15 16 static uint32 17 via_count_mtrrs(void) 18 { 19 if (!x86_check_feature(IA32_FEATURE_MTRR, FEATURE_COMMON)) 20 return 0; 21 22 // IA32_MSR_MTRR_CAPABILITIES doesn't exist on VIA CPUs 23 return 8; 24 } 25 26 27 static void 28 via_init_mtrrs(void) 29 { 30 generic_init_mtrrs(via_count_mtrrs()); 31 } 32 33 34 static void 35 via_set_mtrrs(uint8 defaultType, const x86_mtrr_info* infos, uint32 count) 36 { 37 generic_set_mtrrs(defaultType, infos, count, via_count_mtrrs()); 38 } 39 40 41 static status_t 42 via_init(void) 43 { 44 if (gCPU[0].arch.vendor != VENDOR_CENTAUR) 45 return B_ERROR; 46 47 // current VIA CPUs have always 36 bit (or less?) 48 gPhysicalMask = ((1ULL << 36) - 1) & ~(B_PAGE_SIZE - 1); 49 50 generic_dump_mtrrs(generic_count_mtrrs()); 51 return B_OK; 52 } 53 54 55 static status_t 56 via_stdops(int32 op, ...) 57 { 58 switch (op) { 59 case B_MODULE_INIT: 60 return via_init(); 61 case B_MODULE_UNINIT: 62 return B_OK; 63 } 64 65 return B_ERROR; 66 } 67 68 69 x86_cpu_module_info gVIAModule = { 70 { 71 "cpu/generic_x86/via/v1", 72 0, 73 via_stdops, 74 }, 75 76 via_count_mtrrs, 77 via_init_mtrrs, 78 79 generic_set_mtrr, 80 generic_get_mtrr, 81 via_set_mtrrs 82 }; 83