2 Copyright © 2013-2015, The AROS Development Team. All rights reserved.
7 #include <aros/debug.h>
9 #include <proto/exec.h>
10 #include <proto/kernel.h>
11 #include <aros/symbolsets.h>
13 #include <resources/processor.h>
15 #include "processor_intern.h"
16 #include "processor_arch_intern.h"
20 LONG
Processor_Init(struct ProcessorBase
* ProcessorBase
)
22 struct ARMProcessorInformation
**sysprocs
;
25 D(bug("[processor.ARM] :%s()\n", __PRETTY_FUNCTION__
));
27 sysprocs
= AllocVec(ProcessorBase
->cpucount
* sizeof(APTR
), MEMF_ANY
| MEMF_CLEAR
);
28 if ((ProcessorBase
->Private1
= sysprocs
) == NULL
)
31 for (i
= 0; i
< ProcessorBase
->cpucount
; i
++)
33 sysprocs
[i
] = AllocMem(sizeof(struct ARMProcessorInformation
), MEMF_CLEAR
);
36 #if defined(__AROSEXEC_SMP__)
39 struct TagItem coreTags
[] =
41 {NP_Entry
, ReadProcessorInformation
},
42 {TASKTAG_AFFINITY
, (1<<i
) },
43 {NP_UserData
, sysprocs
[i
] },
46 CreateNewProc(coreTags
);
51 /* Boot CPU is number 0. Fill in its data. */
52 ReadProcessorInformation(sysprocs
[0]);
55 if (sysprocs
[0]->FamilyString
)
57 bug("[processor.ARM] %s ARM%s Processor Core\n", sysprocs
[0]->Vendor
, sysprocs
[0]->FamilyString
);
61 bug("[processor.ARM] %s ARM Processor Core (unknown family)\n", sysprocs
[0]->Vendor
);
64 if (sysprocs
[0]->Features1
& FEATF_FPU_VFP4
)
66 bug("[processor.ARM] VFPv4 Co-Processor\n");
68 else if (sysprocs
[0]->Features1
& FEATF_FPU_VFP3_16
)
70 bug("[processor.ARM] VFPv3 [16Double] Co-Processor\n");
72 else if (sysprocs
[0]->Features1
& FEATF_FPU_VFP3
)
74 bug("[processor.ARM] VFPv3 Co-Processor\n");
76 else if (sysprocs
[0]->Features1
& FEATF_FPU_VFP2
)
78 bug("[processor.ARM] VFPv2 Co-Processor\n");
82 bug("[processor.ARM] VFPv1 Co-Processor\n");
85 if (sysprocs
[0]->Features1
& FEATF_NEON
)
87 bug("[processor.ARM] NEON SIMD Extensions\n");
90 bug("[processor.ARM] Cache Info:\n");
91 bug("[processor.ARM] L1 Data : %dKb\n", sysprocs
[0]->L1DataCacheSize
);
92 bug("[processor.ARM] L1 Instr. : %dKb\n", sysprocs
[0]->L1InstructionCacheSize
);
98 ADD2INITLIB(Processor_Init
, 1);