4605f8546e49797a369ca4a534e14ad1baf121bb
[AROS.git] / arch / m68k-all / processor / getcpuinfo.c
blob4605f8546e49797a369ca4a534e14ad1baf121bb
1 /*
2 Copyright © 2011, The AROS Development Team. All rights reserved.
3 $Id$
5 Desc: GetCPUInfo() - Provides information about installed CPUs
6 Lang: english
7 */
9 #define DEBUG 0
11 #include <aros/debug.h>
12 #include <aros/libcall.h>
13 #include <resources/processor.h>
14 #include <proto/utility.h>
16 #include "processor_intern.h"
17 #include "processor_arch_intern.h"
19 /*****************************************************************************
21 NAME */
22 #include <proto/processor.h>
24 AROS_LH1(void, GetCPUInfo,
26 /* SYNOPSIS */
27 AROS_LHA(struct TagItem *, tagList, A0),
29 /* LOCATION */
30 struct ProcessorBase *, ProcessorBase, 1, Processor)
32 /* FUNCTION
34 INPUTS
36 TAGS
38 RESULT
40 NOTES
42 EXAMPLE
44 BUGS
46 SEE ALSO
48 INTERNALS
50 ******************************************************************************/
52 AROS_LIBFUNC_INIT
54 struct TagItem * passedTag = NULL;
55 struct M68KProcessorInformation * processor = NULL;
56 struct SystemProcessors * sysprocs = (struct SystemProcessors *)ProcessorBase->Private1;
57 struct Library *UtilityBase = TaggedOpenLibrary(TAGGEDOPEN_UTILITY);
59 if (!UtilityBase)
60 return;
62 /* GCIT_SelectedProcessor is ignored for now. In future it might be used to
63 distinguish between M68K processor and PowerPC turbo card processor (?)*/
64 processor = &sysprocs->processor;
66 while ((passedTag = NextTagItem(&tagList)) != NULL)
68 if ((passedTag->ti_Tag > GCIT_FeaturesBase) &&
69 (passedTag->ti_Tag <= GCIT_FeaturesLast))
71 switch(passedTag->ti_Tag)
73 case(GCIT_SupportsFPU):
74 *((BOOL *)passedTag->ti_Data) = (BOOL)(
75 (processor->FPUModel == FPUMODEL_68881) ||
76 (processor->FPUModel == FPUMODEL_68882) ||
77 (processor->FPUModel == FPUMODEL_INTERNAL));
78 break;
79 default:
80 *((BOOL *)passedTag->ti_Data) = FALSE; break;
83 else
85 switch(passedTag->ti_Tag)
87 case(GCIT_NumberOfProcessors):
88 *((ULONG *)passedTag->ti_Data) = 1;
89 break;
90 case(GCIT_ModelString):
91 *((CONST_STRPTR *)passedTag->ti_Data) = processor->ModelString;
92 break;
93 case(GCIT_Family):
94 *((ULONG *)passedTag->ti_Data) = CPUFAMILY_MOTOROLA_68000;
95 break;
96 case(GCIT_VectorUnit):
97 *((ULONG *)passedTag->ti_Data) = VECTORTYPE_NONE;
98 break;
99 case(GCIT_L1CacheSize):
100 *((ULONG *)passedTag->ti_Data) =
101 (processor->L1DataCacheSize + processor->L1InstructionCacheSize);
102 break;
103 case(GCIT_L1DataCacheSize):
104 *((ULONG *)passedTag->ti_Data) = processor->L1DataCacheSize;
105 break;
106 case(GCIT_L1InstructionCacheSize):
107 *((ULONG *)passedTag->ti_Data) = processor->L1InstructionCacheSize;
108 break;
109 case(GCIT_L2CacheSize):
110 *((ULONG *)passedTag->ti_Data) = 0;
111 break;
112 case(GCIT_L3CacheSize):
113 *((ULONG *)passedTag->ti_Data) = 0;
114 break;
115 case(GCIT_CacheLineSize):
116 *((ULONG *)passedTag->ti_Data) = 0;
117 break;
118 case(GCIT_Architecture):
119 *((ULONG *)passedTag->ti_Data) = PROCESSORARCH_M68K;
120 break;
121 case(GCIT_Endianness):
122 *((ULONG *)passedTag->ti_Data) = ENDIANNESS_BE;
123 break;
124 case(GCIT_ProcessorSpeed):
125 *((UQUAD *)passedTag->ti_Data) = processor->CPUFrequency;
126 break;
127 case(GCIT_ProcessorLoad):
128 *((UBYTE *)passedTag->ti_Data) = 0; /* TODO: IMPLEMENT */
129 break;
130 case(GCIT_FrontsideSpeed):
131 *((UQUAD *)passedTag->ti_Data) = 0;
132 break;
137 CloseLibrary(UtilityBase);
139 AROS_LIBFUNC_EXIT
140 } /* GetCPUInfo() */