Changes in kernel/arch/ia32/src/cpu/cpu.c [add04f7:dc0b964] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/ia32/src/cpu/cpu.c
radd04f7 rdc0b964 38 38 39 39 #include <arch.h> 40 #include < arch/types.h>40 #include <typedefs.h> 41 41 #include <print.h> 42 42 #include <fpu_context.h> … … 49 49 * Contains only non-MP-Specification specific SMP code. 50 50 */ 51 #define AMD_CPUID_EBX 0x6874754152 #define AMD_CPUID_ECX 0x444d416353 #define AMD_CPUID_EDX 0x69746e6551 #define AMD_CPUID_EBX UINT32_C(0x68747541) 52 #define AMD_CPUID_ECX UINT32_C(0x444d4163) 53 #define AMD_CPUID_EDX UINT32_C(0x69746e65) 54 54 55 #define INTEL_CPUID_EBX 0x756e654756 #define INTEL_CPUID_ECX 0x6c65746e57 #define INTEL_CPUID_EDX 0x49656e6955 #define INTEL_CPUID_EBX UINT32_C(0x756e6547) 56 #define INTEL_CPUID_ECX UINT32_C(0x6c65746e) 57 #define INTEL_CPUID_EDX UINT32_C(0x49656e69) 58 58 59 59 … … 64 64 }; 65 65 66 static c har *vendor_str[] = {66 static const char *vendor_str[] = { 67 67 "Unknown Vendor", 68 68 "AMD", … … 92 92 void cpu_arch_init(void) 93 93 { 94 cpuid_feature_info fi;95 94 cpuid_extended_feature_info efi; 96 95 cpu_info_t info; … … 102 101 CPU->fpu_owner = NULL; 103 102 104 cpuid( 1, &info);103 cpuid(INTEL_CPUID_STANDARD, &info); 105 104 106 fi.word = info.cpuid_edx;105 CPU->arch.fi.word = info.cpuid_edx; 107 106 efi.word = info.cpuid_ecx; 108 107 109 if ( fi.bits.fxsr)108 if (CPU->arch.fi.bits.fxsr) 110 109 fpu_fxsr(); 111 110 else 112 111 fpu_fsr(); 113 112 114 if ( fi.bits.sse) {113 if (CPU->arch.fi.bits.sse) { 115 114 asm volatile ( 116 115 "mov %%cr4, %[help]\n" … … 122 121 } 123 122 124 /* Setup fast SYSENTER/SYSEXIT syscalls */ 125 syscall_setup_cpu(); 123 if (CPU->arch.fi.bits.sep) { 124 /* Setup fast SYSENTER/SYSEXIT syscalls */ 125 syscall_setup_cpu(); 126 } 126 127 } 127 128 … … 132 133 CPU->arch.vendor = VendorUnknown; 133 134 if (has_cpuid()) { 134 cpuid( 0, &info);135 cpuid(INTEL_CPUID_LEVEL, &info); 135 136 136 137 /* … … 139 140 if ((info.cpuid_ebx == AMD_CPUID_EBX) 140 141 && (info.cpuid_ecx == AMD_CPUID_ECX) 141 142 && (info.cpuid_edx == AMD_CPUID_EDX)) 142 143 CPU->arch.vendor = VendorAMD; 143 144 144 145 /* 145 146 * Check for Intel processor. 146 */ 147 */ 147 148 if ((info.cpuid_ebx == INTEL_CPUID_EBX) 148 149 && (info.cpuid_ecx == INTEL_CPUID_ECX) 149 150 && (info.cpuid_edx == INTEL_CPUID_EDX)) 150 151 CPU->arch.vendor = VendorIntel; 151 152 152 cpuid( 1, &info);153 CPU->arch.family = (info.cpuid_eax >> 8) & 0x0f ;154 CPU->arch.model = (info.cpuid_eax >> 4) & 0x0f ;155 CPU->arch.stepping = (info.cpuid_eax >> 0) & 0x0f ;153 cpuid(INTEL_CPUID_STANDARD, &info); 154 CPU->arch.family = (info.cpuid_eax >> 8) & 0x0fU; 155 CPU->arch.model = (info.cpuid_eax >> 4) & 0x0fU; 156 CPU->arch.stepping = (info.cpuid_eax >> 0) & 0x0fU; 156 157 } 157 158 }
Note:
See TracChangeset
for help on using the changeset viewer.