18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later 28c2ecf20Sopenharmony_ci/* ----------------------------------------------------------------------- * 38c2ecf20Sopenharmony_ci * 48c2ecf20Sopenharmony_ci * Copyright 2008 rPath, Inc. - All Rights Reserved 58c2ecf20Sopenharmony_ci * 68c2ecf20Sopenharmony_ci * ----------------------------------------------------------------------- */ 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ci/* 98c2ecf20Sopenharmony_ci * This is a host program to preprocess the CPU strings into a 108c2ecf20Sopenharmony_ci * compact format suitable for the setup code. 118c2ecf20Sopenharmony_ci */ 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_ci#include <stdio.h> 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_ci#include "../include/asm/required-features.h" 168c2ecf20Sopenharmony_ci#include "../include/asm/disabled-features.h" 178c2ecf20Sopenharmony_ci#include "../include/asm/cpufeatures.h" 188c2ecf20Sopenharmony_ci#include "../include/asm/vmxfeatures.h" 198c2ecf20Sopenharmony_ci#include "../kernel/cpu/capflags.c" 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_ciint main(void) 228c2ecf20Sopenharmony_ci{ 238c2ecf20Sopenharmony_ci int i, j; 248c2ecf20Sopenharmony_ci const char *str; 258c2ecf20Sopenharmony_ci 268c2ecf20Sopenharmony_ci printf("static const char x86_cap_strs[] =\n"); 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_ci for (i = 0; i < NCAPINTS; i++) { 298c2ecf20Sopenharmony_ci for (j = 0; j < 32; j++) { 308c2ecf20Sopenharmony_ci str = x86_cap_flags[i*32+j]; 318c2ecf20Sopenharmony_ci 328c2ecf20Sopenharmony_ci if (i == NCAPINTS-1 && j == 31) { 338c2ecf20Sopenharmony_ci /* The last entry must be unconditional; this 348c2ecf20Sopenharmony_ci also consumes the compiler-added null 358c2ecf20Sopenharmony_ci character */ 368c2ecf20Sopenharmony_ci if (!str) 378c2ecf20Sopenharmony_ci str = ""; 388c2ecf20Sopenharmony_ci printf("\t\"\\x%02x\\x%02x\"\"%s\"\n", 398c2ecf20Sopenharmony_ci i, j, str); 408c2ecf20Sopenharmony_ci } else if (str) { 418c2ecf20Sopenharmony_ci printf("#if REQUIRED_MASK%d & (1 << %d)\n" 428c2ecf20Sopenharmony_ci "\t\"\\x%02x\\x%02x\"\"%s\\0\"\n" 438c2ecf20Sopenharmony_ci "#endif\n", 448c2ecf20Sopenharmony_ci i, j, i, j, str); 458c2ecf20Sopenharmony_ci } 468c2ecf20Sopenharmony_ci } 478c2ecf20Sopenharmony_ci } 488c2ecf20Sopenharmony_ci printf("\t;\n"); 498c2ecf20Sopenharmony_ci return 0; 508c2ecf20Sopenharmony_ci} 51