xref: /haiku/src/add-ons/kernel/cpu/x86/intel.cpp (revision d0f2d8282f3f59a1af7fe2d340d2af0cb36a9b20)
14f006133SAxel Dörfler /*
2bb163c02SIngo Weinhold  * Copyright 2005-2009, Haiku, Inc.
34f006133SAxel Dörfler  * Distributed under the terms of the MIT License.
44f006133SAxel Dörfler  *
54f006133SAxel Dörfler  * Authors:
64f006133SAxel Dörfler  *		Axel Dörfler, axeld@pinc-software.de
74f006133SAxel Dörfler  */
84f006133SAxel Dörfler 
94f006133SAxel Dörfler 
104f006133SAxel Dörfler #include "intel.h"
112058e6c1SAxel Dörfler #include "generic_x86.h"
124f006133SAxel Dörfler 
13*fa157509SPawel Dziepak #include <cpu.h>
144f006133SAxel Dörfler 
154f006133SAxel Dörfler 
1651a3c450SAxel Dörfler static void
intel_init_mtrrs(void)1751a3c450SAxel Dörfler intel_init_mtrrs(void)
184f006133SAxel Dörfler {
192058e6c1SAxel Dörfler 	generic_init_mtrrs(generic_count_mtrrs());
204f006133SAxel Dörfler }
214f006133SAxel Dörfler 
224f006133SAxel Dörfler 
234f006133SAxel Dörfler static status_t
intel_init(void)244f006133SAxel Dörfler intel_init(void)
254f006133SAxel Dörfler {
26*fa157509SPawel Dziepak 	if (gCPU[0].arch.vendor != VENDOR_INTEL)
274f006133SAxel Dörfler 		return B_ERROR;
284f006133SAxel Dörfler 
292058e6c1SAxel Dörfler 	generic_mtrr_compute_physical_mask();
302058e6c1SAxel Dörfler 	generic_dump_mtrrs(generic_count_mtrrs());
312ed21b85SAxel Dörfler 
324f006133SAxel Dörfler 	return B_OK;
334f006133SAxel Dörfler }
344f006133SAxel Dörfler 
354f006133SAxel Dörfler 
36bb163c02SIngo Weinhold static void
intel_set_mtrrs(uint8 defaultType,const x86_mtrr_info * infos,uint32 count)37dac21d8bSIngo Weinhold intel_set_mtrrs(uint8 defaultType, const x86_mtrr_info* infos, uint32 count)
38bb163c02SIngo Weinhold {
39dac21d8bSIngo Weinhold 	generic_set_mtrrs(defaultType, infos, count, generic_count_mtrrs());
40bb163c02SIngo Weinhold }
41bb163c02SIngo Weinhold 
42bb163c02SIngo Weinhold 
434f006133SAxel Dörfler static status_t
intel_stdops(int32 op,...)444f006133SAxel Dörfler intel_stdops(int32 op, ...)
454f006133SAxel Dörfler {
464f006133SAxel Dörfler 	switch (op) {
474f006133SAxel Dörfler 		case B_MODULE_INIT:
484f006133SAxel Dörfler 			return intel_init();
494f006133SAxel Dörfler 		case B_MODULE_UNINIT:
502058e6c1SAxel Dörfler 			return B_OK;
514f006133SAxel Dörfler 	}
524f006133SAxel Dörfler 
534f006133SAxel Dörfler 	return B_ERROR;
544f006133SAxel Dörfler }
554f006133SAxel Dörfler 
564f006133SAxel Dörfler 
574f006133SAxel Dörfler x86_cpu_module_info gIntelModule = {
584f006133SAxel Dörfler 	{
594f006133SAxel Dörfler 		"cpu/generic_x86/intel/v1",
604f006133SAxel Dörfler 		0,
614f006133SAxel Dörfler 		intel_stdops,
624f006133SAxel Dörfler 	},
634f006133SAxel Dörfler 
642058e6c1SAxel Dörfler 	generic_count_mtrrs,
6551a3c450SAxel Dörfler 	intel_init_mtrrs,
662ed21b85SAxel Dörfler 
672058e6c1SAxel Dörfler 	generic_set_mtrr,
682058e6c1SAxel Dörfler 	generic_get_mtrr,
69bb163c02SIngo Weinhold 	intel_set_mtrrs
704f006133SAxel Dörfler };
71