2 Copyright © 2011, The AROS Development Team. All rights reserved.
5 Desc: GetCPUInfo() - Provides information about installed CPUs
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 /*****************************************************************************
22 #include <proto/processor.h>
24 AROS_LH1(void, GetCPUInfo
,
27 AROS_LHA(struct TagItem
*, tagList
, A0
),
30 struct ProcessorBase
*, ProcessorBase
, 1, Processor
)
50 ******************************************************************************/
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
);
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
));
80 *((BOOL
*)passedTag
->ti_Data
) = FALSE
; break;
85 switch(passedTag
->ti_Tag
)
87 case(GCIT_NumberOfProcessors
):
88 *((ULONG
*)passedTag
->ti_Data
) = 1;
90 case(GCIT_ModelString
):
91 *((CONST_STRPTR
*)passedTag
->ti_Data
) = processor
->ModelString
;
94 *((ULONG
*)passedTag
->ti_Data
) = CPUFAMILY_MOTOROLA_68000
;
96 case(GCIT_VectorUnit
):
97 *((ULONG
*)passedTag
->ti_Data
) = VECTORTYPE_NONE
;
99 case(GCIT_L1CacheSize
):
100 *((ULONG
*)passedTag
->ti_Data
) =
101 (processor
->L1DataCacheSize
+ processor
->L1InstructionCacheSize
);
103 case(GCIT_L1DataCacheSize
):
104 *((ULONG
*)passedTag
->ti_Data
) = processor
->L1DataCacheSize
;
106 case(GCIT_L1InstructionCacheSize
):
107 *((ULONG
*)passedTag
->ti_Data
) = processor
->L1InstructionCacheSize
;
109 case(GCIT_L2CacheSize
):
110 *((ULONG
*)passedTag
->ti_Data
) = 0;
112 case(GCIT_L3CacheSize
):
113 *((ULONG
*)passedTag
->ti_Data
) = 0;
115 case(GCIT_CacheLineSize
):
116 *((ULONG
*)passedTag
->ti_Data
) = 0;
118 case(GCIT_Architecture
):
119 *((ULONG
*)passedTag
->ti_Data
) = PROCESSORARCH_M68K
;
121 case(GCIT_Endianness
):
122 *((ULONG
*)passedTag
->ti_Data
) = ENDIANNESS_BE
;
124 case(GCIT_ProcessorSpeed
):
125 *((UQUAD
*)passedTag
->ti_Data
) = processor
->CPUFrequency
;
127 case(GCIT_ProcessorLoad
):
128 *((UBYTE
*)passedTag
->ti_Data
) = 0; /* TODO: IMPLEMENT */
130 case(GCIT_FrontsideSpeed
):
131 *((UQUAD
*)passedTag
->ti_Data
) = 0;
137 CloseLibrary(UtilityBase
);