1*5e61cba0SAndrew Jones /* 2*5e61cba0SAndrew Jones * Test the framework itself. These tests confirm that setup works. 3*5e61cba0SAndrew Jones * 4*5e61cba0SAndrew Jones * Copyright (C) 2014, Red Hat Inc, Andrew Jones <drjones@redhat.com> 5*5e61cba0SAndrew Jones * 6*5e61cba0SAndrew Jones * This work is licensed under the terms of the GNU LGPL, version 2. 7*5e61cba0SAndrew Jones */ 8*5e61cba0SAndrew Jones #include "libcflat.h" 9*5e61cba0SAndrew Jones #include "asm/setup.h" 10*5e61cba0SAndrew Jones 11*5e61cba0SAndrew Jones #define TESTGRP "selftest" 12*5e61cba0SAndrew Jones 13*5e61cba0SAndrew Jones static char testname[64]; 14*5e61cba0SAndrew Jones 15*5e61cba0SAndrew Jones static void testname_set(const char *subtest) 16*5e61cba0SAndrew Jones { 17*5e61cba0SAndrew Jones strcpy(testname, TESTGRP); 18*5e61cba0SAndrew Jones if (subtest) { 19*5e61cba0SAndrew Jones strcat(testname, "::"); 20*5e61cba0SAndrew Jones strcat(testname, subtest); 21*5e61cba0SAndrew Jones } 22*5e61cba0SAndrew Jones } 23*5e61cba0SAndrew Jones 24*5e61cba0SAndrew Jones static void assert_args(int num_args, int needed_args) 25*5e61cba0SAndrew Jones { 26*5e61cba0SAndrew Jones if (num_args < needed_args) { 27*5e61cba0SAndrew Jones printf("%s: not enough arguments\n", testname); 28*5e61cba0SAndrew Jones abort(); 29*5e61cba0SAndrew Jones } 30*5e61cba0SAndrew Jones } 31*5e61cba0SAndrew Jones 32*5e61cba0SAndrew Jones static char *split_var(char *s, long *val) 33*5e61cba0SAndrew Jones { 34*5e61cba0SAndrew Jones char *p; 35*5e61cba0SAndrew Jones 36*5e61cba0SAndrew Jones p = strchr(s, '='); 37*5e61cba0SAndrew Jones if (!p) 38*5e61cba0SAndrew Jones return NULL; 39*5e61cba0SAndrew Jones 40*5e61cba0SAndrew Jones *val = atol(p+1); 41*5e61cba0SAndrew Jones *p = '\0'; 42*5e61cba0SAndrew Jones 43*5e61cba0SAndrew Jones return s; 44*5e61cba0SAndrew Jones } 45*5e61cba0SAndrew Jones 46*5e61cba0SAndrew Jones static void check_setup(int argc, char **argv) 47*5e61cba0SAndrew Jones { 48*5e61cba0SAndrew Jones int nr_tests = 0, i; 49*5e61cba0SAndrew Jones char *var; 50*5e61cba0SAndrew Jones long val; 51*5e61cba0SAndrew Jones 52*5e61cba0SAndrew Jones for (i = 0; i < argc; ++i) { 53*5e61cba0SAndrew Jones 54*5e61cba0SAndrew Jones var = split_var(argv[i], &val); 55*5e61cba0SAndrew Jones if (!var) 56*5e61cba0SAndrew Jones continue; 57*5e61cba0SAndrew Jones 58*5e61cba0SAndrew Jones if (strcmp(var, "mem") == 0) { 59*5e61cba0SAndrew Jones 60*5e61cba0SAndrew Jones phys_addr_t memsize = PHYS_END - PHYS_OFFSET; 61*5e61cba0SAndrew Jones phys_addr_t expected = ((phys_addr_t)val)*1024*1024; 62*5e61cba0SAndrew Jones 63*5e61cba0SAndrew Jones report("%s[%s]", memsize == expected, testname, "mem"); 64*5e61cba0SAndrew Jones ++nr_tests; 65*5e61cba0SAndrew Jones 66*5e61cba0SAndrew Jones } else if (strcmp(var, "smp") == 0) { 67*5e61cba0SAndrew Jones 68*5e61cba0SAndrew Jones report("%s[%s]", nr_cpus == (int)val, testname, "smp"); 69*5e61cba0SAndrew Jones ++nr_tests; 70*5e61cba0SAndrew Jones } 71*5e61cba0SAndrew Jones } 72*5e61cba0SAndrew Jones 73*5e61cba0SAndrew Jones assert_args(nr_tests, 2); 74*5e61cba0SAndrew Jones } 75*5e61cba0SAndrew Jones 76*5e61cba0SAndrew Jones int main(int argc, char **argv) 77*5e61cba0SAndrew Jones { 78*5e61cba0SAndrew Jones testname_set(NULL); 79*5e61cba0SAndrew Jones assert_args(argc, 1); 80*5e61cba0SAndrew Jones testname_set(argv[0]); 81*5e61cba0SAndrew Jones 82*5e61cba0SAndrew Jones if (strcmp(argv[0], "setup") == 0) 83*5e61cba0SAndrew Jones check_setup(argc-1, &argv[1]); 84*5e61cba0SAndrew Jones 85*5e61cba0SAndrew Jones return report_summary(); 86*5e61cba0SAndrew Jones } 87