diff options
Diffstat (limited to 'perl-install/c/smp-dmi.c')
-rw-r--r-- | perl-install/c/smp-dmi.c | 213 |
1 files changed, 0 insertions, 213 deletions
diff --git a/perl-install/c/smp-dmi.c b/perl-install/c/smp-dmi.c deleted file mode 100644 index 672bc2c35..000000000 --- a/perl-install/c/smp-dmi.c +++ /dev/null @@ -1,213 +0,0 @@ -/* - * CPU detetion based on DMI decode rev 1.2 - * - * (C) 2003 Nicolas Planel <nplanel@mandrakesoft.com> - * - * Licensed under the GNU Public license. If you want to use it in with - * another license just ask. - */ - -#include <stdio.h> -#include <unistd.h> -#include <fcntl.h> -#include <string.h> -#include <stdlib.h> - -typedef unsigned char u8; -typedef unsigned short u16; -typedef unsigned int u32; - -static void -dump_raw_data(void *data, unsigned int length) -{ - unsigned char buffer1[80], buffer2[80], *b1, *b2, c; - unsigned char *p = data; - unsigned long column=0; - unsigned int length_printed = 0; - const unsigned char maxcolumn = 16; - while (length_printed < length) { - b1 = buffer1; - b2 = buffer2; - for (column = 0; - column < maxcolumn && length_printed < length; - column ++) { - b1 += sprintf(b1, "%02x ",(unsigned int) *p); - if (*p < 32 || *p > 126) c = '.'; - else c = *p; - b2 += sprintf(b2, "%c", c); - p++; - length_printed++; - } - /* pad out the line */ - for (; column < maxcolumn; column++) - { - b1 += sprintf(b1, " "); - b2 += sprintf(b2, " "); - } - - printf("%s\t%s\n", buffer1, buffer2); - } -} - - - -struct dmi_header -{ - u8 type; - u8 length; - u16 handle; -}; - -static char *dmi_string(struct dmi_header *dm, u8 s) -{ - u8 *bp=(u8 *)dm; - if (!s) return ""; - - bp+=dm->length; - while(s>1) - { - bp+=strlen(bp); - bp++; - s--; - } - return bp; -} - -static char *dmi_processor_type(u8 code) -{ - static char *processor_type[]={ - "", - "Other", - "Unknown", - "Central Processor", - "Math Processor", - "DSP Processor", - "Video Processor" - }; - - if(code == 0xFF) - return "Other"; - - if (code > 0xA1) - return ""; - return processor_type[code]; -} - -static char *dmi_processor_family(u8 code) -{ - static char *processor_family[]={ - "", - "Other", - "Unknown", - "8086", - "80286", - "Intel386 processor", - "Intel486 processor", - "8087", - "80287", - "80387", - "80487", - "Pentium processor Family", - "Pentium Pro processor", - "Pentium II processor", - "Pentium processor with MMX technology", - "Celeron processor", - "Pentium II Xeon processor", - "Pentium III processor", - "M1 Family", - "M1","M1","M1","M1","M1","M1", /* 13h - 18h */ - "K5 Family", - "K5","K5","K5","K5","K5","K5", /* 1Ah - 1Fh */ - "Power PC Family", - "Power PC 601", - "Power PC 603", - "Power PC 603+", - "Power PC 604", - }; - - if(code == 0xFF) - return "Other"; - - if (code > 0x24) - return ""; - return processor_family[code]; -} - -static int dmi_table(int fd, u32 base, int len, int num) -{ - char *buf=malloc(len); - struct dmi_header *dm; - u8 *data; - int i=0; - int processor=0; - - if(lseek(fd, (long)base, 0)==-1) - { - perror("dmi: lseek"); - return; - } - if(read(fd, buf, len)!=len) - { - perror("dmi: read"); - return; - } - data = buf; - while(i<num) - { - u32 u; - u32 u2; - dm=(struct dmi_header *)data; - - if((dm->type == 4) && /*"Central Processor"*/(data[5] == 3)) { - if(/*Processor Manufacturer*/data[7] != 0) - processor++; - } - - data+=dm->length; - while(*data || data[1]) - data++; - data+=2; - i++; - } - free(buf); - return processor; -} - -int intelDetectSMP(void) { - unsigned char buf[20]; - int fd=open("/dev/mem", O_RDONLY); - long fp=0xE0000L; - int processor=0; - if(fd==-1) - { - perror("/dev/mem"); - exit(1); - } - if(lseek(fd,fp,0)==-1) - { - perror("seek"); - exit(1); - } - - - fp -= 16; - - while( fp < 0xFFFFF) - { - fp+=16; - if(read(fd, buf, 16)!=16) - perror("read"); - - if(memcmp(buf, "_DMI_", 5)==0) - { - u16 num=buf[13]<<8|buf[12]; - u16 len=buf[7]<<8|buf[6]; - u32 base=buf[11]<<24|buf[10]<<16|buf[9]<<8|buf[8]; - - processor=dmi_table(fd, base,len, num); - break; - } - } - close(fd); - return (processor > 1); -} |