18cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/**
28cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @file cpu_type_tests.c
38cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd *
48cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Copyright 2003 OProfile authors
58cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Read the file COPYING
68cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd *
78cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @author John Levon
88cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @author Philippe Elie
98cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd */
108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <stddef.h>
128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <stdio.h>
138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <stdlib.h>
148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <string.h>
158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "op_cpu_type.h"
178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddstatic struct cpu_type {
198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	char const * name;
208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	op_cpu type;
218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd} cpu_str[] = {
228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	{ "i386/ppro", CPU_PPRO },
238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	{ "i386/pii", CPU_PII },
248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	{ "i386/piii", CPU_PIII },
258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	{ "i386/athlon", CPU_ATHLON },
268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	{ "timer", CPU_TIMER_INT },
278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	{ "rtc", CPU_RTC },
288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	{ "i386/p4", CPU_P4 },
298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	{ "ia64/ia64", CPU_IA64 },
308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	{ "ia64/itanium", CPU_IA64_1 },
318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	{ "ia64/itanium2", CPU_IA64_2 },
328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	{ "x86-64/hammer", CPU_HAMMER },
338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	{ "i386/p4-ht", CPU_P4_HT2 },
348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	{ "alpha/ev4", CPU_AXP_EV4 },
358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	{ "alpha/ev5", CPU_AXP_EV5 },
368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	{ "alpha/pca56", CPU_AXP_PCA56 },
378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	{ "alpha/ev6", CPU_AXP_EV6 },
388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	{ "alpha/ev67", CPU_AXP_EV67 },
398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	{ "foo", CPU_NO_GOOD },
408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	{ "-3", CPU_NO_GOOD },
418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	{ "2927", CPU_NO_GOOD },
428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	{ "", CPU_NO_GOOD },
438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	{ NULL, CPU_NO_GOOD }
448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd};
458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddstatic void test(struct cpu_type const * cpu)
488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{
498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	char const * name;
508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	op_cpu type;
518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	name = op_get_cpu_name(cpu->type);
538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	if (cpu->type != CPU_NO_GOOD && strcmp(cpu->name, name)) {
548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		printf("for %d expect %s found %s\n", cpu->type, cpu->name,
558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		       name);
568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		exit(EXIT_FAILURE);
578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	}
588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	if (cpu->type == CPU_NO_GOOD && strcmp("invalid cpu type", name)) {
598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		printf("for %d expect %s found %s\n", cpu->type,
608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		       "invalid cpu type", name);
618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		exit(EXIT_FAILURE);
628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	}
638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	type = op_get_cpu_number(cpu->name);
658cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	if (type != cpu->type) {
668cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		printf("for %s expect %d found %d\n", cpu->name, cpu->type,
678cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		       type);
688cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		exit(EXIT_FAILURE);
698cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	}
708cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd}
718cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
728cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
738cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddint main(void)
748cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{
758cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	struct cpu_type * cpu;
768cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	for (cpu = cpu_str; cpu->name; ++cpu)
778cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		test(cpu);
788cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	return 0;
798cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd}
80