Rev 2071 | Rev 2082 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 2071 | Rev 2079 | ||
|---|---|---|---|
| Line 35... | Line 35... | ||
| 35 | #ifndef KERN_ia32_CPUID_H_ |
35 | #ifndef KERN_ia32_CPUID_H_ |
| 36 | #define KERN_ia32_CPUID_H_ |
36 | #define KERN_ia32_CPUID_H_ |
| 37 | 37 | ||
| 38 | #include <arch/types.h> |
38 | #include <arch/types.h> |
| 39 | 39 | ||
| 40 | struct cpu_info { |
40 | typedef struct { |
| 41 | uint32_t cpuid_eax; |
41 | uint32_t cpuid_eax; |
| 42 | uint32_t cpuid_ebx; |
42 | uint32_t cpuid_ebx; |
| 43 | uint32_t cpuid_ecx; |
43 | uint32_t cpuid_ecx; |
| 44 | uint32_t cpuid_edx; |
44 | uint32_t cpuid_edx; |
| 45 | } __attribute__ ((packed)); |
45 | } __attribute__ ((packed)) cpu_info_t; |
| 46 | 46 | ||
| 47 | struct __cpuid_extended_feature_info { |
47 | struct __cpuid_extended_feature_info { |
| 48 | unsigned sse3 : 1; |
48 | unsigned sse3 : 1; |
| 49 | unsigned : 31; |
49 | unsigned : 31; |
| 50 | } __attribute__ ((packed)); |
50 | } __attribute__ ((packed)); |
| Line 95... | Line 95... | ||
| 95 | ); |
95 | ); |
| 96 | 96 | ||
| 97 | return ret; |
97 | return ret; |
| 98 | } |
98 | } |
| 99 | 99 | ||
| 100 | static inline void cpuid(uint32_t cmd, struct cpu_info *info) |
100 | static inline void cpuid(uint32_t cmd, cpu_info_t *info) |
| 101 | { |
101 | { |
| 102 | __asm__ volatile ( |
102 | __asm__ volatile ( |
| 103 | "movl %4, %%eax\n" |
103 | "movl %4, %%eax\n" |
| 104 | "cpuid\n" |
104 | "cpuid\n" |
| 105 | 105 | ||