diff options
Diffstat (limited to 'arch/i386/kernel/cpu/nexgen.c')
-rw-r--r-- | arch/i386/kernel/cpu/nexgen.c | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/arch/i386/kernel/cpu/nexgen.c b/arch/i386/kernel/cpu/nexgen.c new file mode 100644 index 00000000000..30898a260a5 --- /dev/null +++ b/arch/i386/kernel/cpu/nexgen.c | |||
@@ -0,0 +1,63 @@ | |||
1 | #include <linux/kernel.h> | ||
2 | #include <linux/init.h> | ||
3 | #include <linux/string.h> | ||
4 | #include <asm/processor.h> | ||
5 | |||
6 | #include "cpu.h" | ||
7 | |||
8 | /* | ||
9 | * Detect a NexGen CPU running without BIOS hypercode new enough | ||
10 | * to have CPUID. (Thanks to Herbert Oppmann) | ||
11 | */ | ||
12 | |||
13 | static int __init deep_magic_nexgen_probe(void) | ||
14 | { | ||
15 | int ret; | ||
16 | |||
17 | __asm__ __volatile__ ( | ||
18 | " movw $0x5555, %%ax\n" | ||
19 | " xorw %%dx,%%dx\n" | ||
20 | " movw $2, %%cx\n" | ||
21 | " divw %%cx\n" | ||
22 | " movl $0, %%eax\n" | ||
23 | " jnz 1f\n" | ||
24 | " movl $1, %%eax\n" | ||
25 | "1:\n" | ||
26 | : "=a" (ret) : : "cx", "dx" ); | ||
27 | return ret; | ||
28 | } | ||
29 | |||
30 | static void __init init_nexgen(struct cpuinfo_x86 * c) | ||
31 | { | ||
32 | c->x86_cache_size = 256; /* A few had 1 MB... */ | ||
33 | } | ||
34 | |||
35 | static void __init nexgen_identify(struct cpuinfo_x86 * c) | ||
36 | { | ||
37 | /* Detect NexGen with old hypercode */ | ||
38 | if ( deep_magic_nexgen_probe() ) { | ||
39 | strcpy(c->x86_vendor_id, "NexGenDriven"); | ||
40 | } | ||
41 | generic_identify(c); | ||
42 | } | ||
43 | |||
44 | static struct cpu_dev nexgen_cpu_dev __initdata = { | ||
45 | .c_vendor = "Nexgen", | ||
46 | .c_ident = { "NexGenDriven" }, | ||
47 | .c_models = { | ||
48 | { .vendor = X86_VENDOR_NEXGEN, | ||
49 | .family = 5, | ||
50 | .model_names = { [1] = "Nx586" } | ||
51 | }, | ||
52 | }, | ||
53 | .c_init = init_nexgen, | ||
54 | .c_identify = nexgen_identify, | ||
55 | }; | ||
56 | |||
57 | int __init nexgen_init_cpu(void) | ||
58 | { | ||
59 | cpu_devs[X86_VENDOR_NEXGEN] = &nexgen_cpu_dev; | ||
60 | return 0; | ||
61 | } | ||
62 | |||
63 | //early_arch_initcall(nexgen_init_cpu); | ||