11eba4077SPaweł Dziepak /*
21eba4077SPaweł Dziepak * Copyright 2014, Paweł Dziepak, pdziepak@quarnos.org.
31eba4077SPaweł Dziepak * Copyright 2012, Alex Smith, alex@alex-smith.me.uk.
41eba4077SPaweł Dziepak * Distributed under the terms of the MIT License.
51eba4077SPaweł Dziepak */
61eba4077SPaweł Dziepak
71eba4077SPaweł Dziepak
81eba4077SPaweł Dziepak #include <arch_system_info.h>
91eba4077SPaweł Dziepak
10*8ac3d985SJérôme Duval #include <cpuid.h>
11*8ac3d985SJérôme Duval
121eba4077SPaweł Dziepak
131eba4077SPaweł Dziepak status_t
get_current_cpuid(cpuid_info * info,uint32 eax,uint32 ecx)141eba4077SPaweł Dziepak get_current_cpuid(cpuid_info* info, uint32 eax, uint32 ecx)
151eba4077SPaweł Dziepak {
16*8ac3d985SJérôme Duval __cpuid_count(eax, ecx, info->regs.eax, info->regs.ebx, info->regs.ecx,
17*8ac3d985SJérôme Duval info->regs.edx);
181eba4077SPaweł Dziepak return B_OK;
191eba4077SPaweł Dziepak }
201eba4077SPaweł Dziepak
211eba4077SPaweł Dziepak
221eba4077SPaweł Dziepak uint32
get_eflags()231eba4077SPaweł Dziepak get_eflags()
241eba4077SPaweł Dziepak {
251eba4077SPaweł Dziepak uint64_t flags;
261eba4077SPaweł Dziepak __asm__("pushf; popq %0;" : "=r" (flags));
271eba4077SPaweł Dziepak return flags;
281eba4077SPaweł Dziepak }
291eba4077SPaweł Dziepak
301eba4077SPaweł Dziepak
311eba4077SPaweł Dziepak void
set_eflags(uint32 value)321eba4077SPaweł Dziepak set_eflags(uint32 value)
331eba4077SPaweł Dziepak {
341eba4077SPaweł Dziepak uint64_t flags = value;
351eba4077SPaweł Dziepak __asm__("pushq %0; popf;" : : "r" (flags) : "cc");
361eba4077SPaweł Dziepak }
371eba4077SPaweł Dziepak
38