| @@ -26,6 +26,11 @@ | |||
| *****************************************************************************/ | |||
| #include <string.h> | |||
| #ifdef OS_DARWIN | |||
| #include <sys/sysctl.h> | |||
| int32_t value; | |||
| size_t length=sizeof(value); | |||
| #endif | |||
| #define CPU_UNKNOWN 0 | |||
| #define CPU_ARMV8 1 | |||
| @@ -45,6 +50,8 @@ | |||
| #define CPU_TSV110 9 | |||
| // Ampere | |||
| #define CPU_EMAG8180 10 | |||
| // Apple | |||
| #define CPU_SILICON 11 | |||
| static char *cpuname[] = { | |||
| "UNKNOWN", | |||
| @@ -59,7 +66,8 @@ static char *cpuname[] = { | |||
| "TSV110", | |||
| "EMAG8180", | |||
| "NEOVERSEN1", | |||
| "THUNDERX3T110" | |||
| "THUNDERX3T110", | |||
| "SILICON" | |||
| }; | |||
| static char *cpuname_lower[] = { | |||
| @@ -75,7 +83,8 @@ static char *cpuname_lower[] = { | |||
| "tsv110", | |||
| "emag8180", | |||
| "neoversen1", | |||
| "thunderx3t110" | |||
| "thunderx3t110", | |||
| "silicon" | |||
| }; | |||
| int get_feature(char *search) | |||
| @@ -198,6 +207,10 @@ int detect(void) | |||
| } | |||
| #else | |||
| #ifdef DARWIN | |||
| sysctlbyname("hw.cpufamily",&value,&length,NULL,0); | |||
| if (value ==131287967) return CPU_SILICON; | |||
| #endif | |||
| return CPU_ARMV8; | |||
| #endif | |||
| @@ -247,7 +260,10 @@ int n=0; | |||
| printf("#define NUM_CORES %d\n",n); | |||
| #endif | |||
| #ifdef DARWIN | |||
| sysctlbyname("hw.physicalcpu_max",&value,&length,NULL,0); | |||
| printf("#define NUM_CORES %d\n",value); | |||
| #endif | |||
| } | |||
| @@ -398,6 +414,19 @@ void get_cpuconfig(void) | |||
| printf("#define DTB_DEFAULT_ENTRIES 64 \n"); | |||
| printf("#define DTB_SIZE 4096 \n"); | |||
| break; | |||
| #ifdef DARWIN | |||
| case CPU_SILICON: | |||
| printf("#define SILICON \n"); | |||
| sysctlbyname("hw.l1icachesize",&value,&length,NULL,0); | |||
| printf("#define L1_CODE_SIZE %d \n",value); | |||
| sysctlbyname("hw.cachelinesize",&value,&length,NULL,0); | |||
| printf("#define L1_CODE_LINESIZE %d \n",value); | |||
| sysctlbyname("hw.l1dcachesize",&value,&length,NULL,0); | |||
| printf("#define L1_DATA_SIZE %d \n",value); | |||
| sysctlbyname("hw.l2dcachesize",&value,&length,NULL,0); | |||
| printf("#define L2_DATA_SIZE %d \n",value); | |||
| break; | |||
| #endif | |||
| } | |||
| get_cpucount(); | |||
| } | |||