OSDN Git Service

DMAドライバ. DrFSマイナーチェンジ
[vaneos/DivergeMirror.git] / kernel / cpuinfo.c
1 /*
2         cpuinfo.c
3         Input/Output
4         (C) 2014-2015 VOSystems.
5 */
6
7 #include<Diverge/diverge.h>
8 #include<Diverge/env_var.h>
9 #include<Diverge/kstdio.h>
10
11 env_pc_info pc_env;
12
13 void init_CPUinfo(void)
14 {
15         char vendor[80];
16         
17         printTASK("Get CPU Information");
18         CPUVendor();
19         printOK("Get CPU Information");
20         switch(pc_env.vendor){
21                 case 0:
22                         printINFO("CPU Vendor = Intel"); 
23                         break;
24                 case 1:
25                         printINFO("CPU Vendor = AMD");
26                         break;
27                 case 2:
28                         printINFO("CPU Vendor = Centaur Technology");
29                         break;
30                 case 3:
31                         printINFO("CPU Vendor = Cyrix");
32                         break;
33                 case 4:
34                         printINFO("CPU Vendor = Transmeta");
35                         break;
36                 case 5:
37                         printINFO("CPU Vendor = NSC");
38                         break;
39                 case 6:
40                         printINFO("CPU Vendor = NexGen");
41                         break;
42                 case 7:
43                         printINFO("CPU Vendor = Rise Technology");
44                         break;
45                 case 8:
46                         printINFO("CPU Vendor = SiS");
47                         break;
48                 case 9:
49                         printINFO("CPU Vendor = UMC");
50                         break;
51                 case 10:
52                         printINFO("CPU Vendor = VIA Technology");
53                         break;  
54                 default:
55                         printFAIL("Can't get CPU Vendor");
56                         break;
57         }
58         return;
59 }
60
61 inline void RunCPUID(struct general_registers *reg, unsigned int eax)
62 {
63         __asm__ __volatile__(
64                 "mov eax, %4    \n\t"
65                 "cpuid                  \n\t"
66                 "mov %0, eax    \n\t"
67                 "mov %1, ebx    \n\t"
68                 "mov %2, ecx    \n\t"
69                 "mov %3, edx    \n\t"
70                 :"=m"(reg->eax), "=m"(reg->ebx), "=m"(reg->ecx), "=m"(reg->edx)
71                 :"m"(eax)
72         );
73 }
74
75 void CPUVendor(void)
76 {
77         struct general_registers reg;
78         char id[15]={0};
79         RunCPUID(&reg, 0);
80         if(reg.ebx==0x756e6547 && reg.edx==0x49656e69){
81                 /*Intel*/
82                 pc_env.vendor=0;
83         }else if(reg.ebx==0x69444d41 || reg.ebx==0x68747541){
84                 /*AMD*/
85                 pc_env.vendor=1;
86         }else if(reg.ebx==0x746e6543){
87                 /*Centaur*/
88                 pc_env.vendor=2;
89         }else if(reg.ebx==0x69727943){
90                 /*Cyrix*/
91                 pc_env.vendor=3;
92         }else if(reg.ebx==0x756e6547 || reg.ebx==0x6e617254){
93                 /*Transmeta*/
94                 pc_env.vendor=4;
95         }else if(reg.ebx==0x646f6547){
96                 /*NSC*/
97                 pc_env.vendor=5;
98         }else if(reg.ebx==0x4778654e){
99                 /*NexGen*/
100                 pc_env.vendor=6;
101         }else if(reg.ebx==0x65736952){
102                 /*Rise*/
103                 pc_env.vendor=7;
104         }else if(reg.ebx==0x20536953){
105                 /*SiS*/
106                 pc_env.vendor=8;
107         }else if(reg.ebx==0x20434d55){
108                 /*UMC*/
109                 pc_env.vendor=9;
110         }else if(reg.ebx==0x20414956){
111                 /*VIA*/
112                 pc_env.vendor=10;
113         }else{
114                 pc_env.vendor=0xff;
115         }
116 }