1f0be6c6a697c2fe8e2efbe98cd157bdbcff969aeH. Peter Anvin/* ----------------------------------------------------------------------- *
2f0be6c6a697c2fe8e2efbe98cd157bdbcff969aeH. Peter Anvin *
3f0be6c6a697c2fe8e2efbe98cd157bdbcff969aeH. Peter Anvin *   Copyright 2008 rPath, Inc. - All Rights Reserved
4f0be6c6a697c2fe8e2efbe98cd157bdbcff969aeH. Peter Anvin *
5f0be6c6a697c2fe8e2efbe98cd157bdbcff969aeH. Peter Anvin *   This file is part of the Linux kernel, and is made available under
6f0be6c6a697c2fe8e2efbe98cd157bdbcff969aeH. Peter Anvin *   the terms of the GNU General Public License version 2 or (at your
7f0be6c6a697c2fe8e2efbe98cd157bdbcff969aeH. Peter Anvin *   option) any later version; incorporated herein by reference.
8f0be6c6a697c2fe8e2efbe98cd157bdbcff969aeH. Peter Anvin *
9f0be6c6a697c2fe8e2efbe98cd157bdbcff969aeH. Peter Anvin * ----------------------------------------------------------------------- */
10f0be6c6a697c2fe8e2efbe98cd157bdbcff969aeH. Peter Anvin
11f0be6c6a697c2fe8e2efbe98cd157bdbcff969aeH. Peter Anvin/*
12f0be6c6a697c2fe8e2efbe98cd157bdbcff969aeH. Peter Anvin * This is a host program to preprocess the CPU strings into a
13f0be6c6a697c2fe8e2efbe98cd157bdbcff969aeH. Peter Anvin * compact format suitable for the setup code.
14f0be6c6a697c2fe8e2efbe98cd157bdbcff969aeH. Peter Anvin */
15f0be6c6a697c2fe8e2efbe98cd157bdbcff969aeH. Peter Anvin
16f0be6c6a697c2fe8e2efbe98cd157bdbcff969aeH. Peter Anvin#include <stdio.h>
17f0be6c6a697c2fe8e2efbe98cd157bdbcff969aeH. Peter Anvin
18abbf1590de22a6d2240a59383477da50d1402f6aDavid Howells#include "../include/asm/required-features.h"
19381aa07a9b4e1f82969203e9e4863da2a157781dDave Hansen#include "../include/asm/disabled-features.h"
20abbf1590de22a6d2240a59383477da50d1402f6aDavid Howells#include "../include/asm/cpufeature.h"
217414aa41a63348c3bc72d8c37b716024c29b6d50H. Peter Anvin#include "../kernel/cpu/capflags.c"
22f0be6c6a697c2fe8e2efbe98cd157bdbcff969aeH. Peter Anvin
23f0be6c6a697c2fe8e2efbe98cd157bdbcff969aeH. Peter Anvinint main(void)
24f0be6c6a697c2fe8e2efbe98cd157bdbcff969aeH. Peter Anvin{
2597fc0555dae8f4d437c8672c14d7191962429be4H. Peter Anvin	int i, j;
26f0be6c6a697c2fe8e2efbe98cd157bdbcff969aeH. Peter Anvin	const char *str;
27f0be6c6a697c2fe8e2efbe98cd157bdbcff969aeH. Peter Anvin
283235dc3f22378f35ce77eba0d0f62db2d9c4844eFrans Pop	printf("static const char x86_cap_strs[] =\n");
29f0be6c6a697c2fe8e2efbe98cd157bdbcff969aeH. Peter Anvin
3097fc0555dae8f4d437c8672c14d7191962429be4H. Peter Anvin	for (i = 0; i < NCAPINTS; i++) {
3197fc0555dae8f4d437c8672c14d7191962429be4H. Peter Anvin		for (j = 0; j < 32; j++) {
3297fc0555dae8f4d437c8672c14d7191962429be4H. Peter Anvin			str = x86_cap_flags[i*32+j];
3397fc0555dae8f4d437c8672c14d7191962429be4H. Peter Anvin
3497fc0555dae8f4d437c8672c14d7191962429be4H. Peter Anvin			if (i == NCAPINTS-1 && j == 31) {
3597fc0555dae8f4d437c8672c14d7191962429be4H. Peter Anvin				/* The last entry must be unconditional; this
3697fc0555dae8f4d437c8672c14d7191962429be4H. Peter Anvin				   also consumes the compiler-added null
3797fc0555dae8f4d437c8672c14d7191962429be4H. Peter Anvin				   character */
3897fc0555dae8f4d437c8672c14d7191962429be4H. Peter Anvin				if (!str)
3997fc0555dae8f4d437c8672c14d7191962429be4H. Peter Anvin					str = "";
4097fc0555dae8f4d437c8672c14d7191962429be4H. Peter Anvin				printf("\t\"\\x%02x\\x%02x\"\"%s\"\n",
4197fc0555dae8f4d437c8672c14d7191962429be4H. Peter Anvin				       i, j, str);
4297fc0555dae8f4d437c8672c14d7191962429be4H. Peter Anvin			} else if (str) {
4397fc0555dae8f4d437c8672c14d7191962429be4H. Peter Anvin				printf("#if REQUIRED_MASK%d & (1 << %d)\n"
4497fc0555dae8f4d437c8672c14d7191962429be4H. Peter Anvin				       "\t\"\\x%02x\\x%02x\"\"%s\\0\"\n"
4597fc0555dae8f4d437c8672c14d7191962429be4H. Peter Anvin				       "#endif\n",
4697fc0555dae8f4d437c8672c14d7191962429be4H. Peter Anvin				       i, j, i, j, str);
4797fc0555dae8f4d437c8672c14d7191962429be4H. Peter Anvin			}
48f0be6c6a697c2fe8e2efbe98cd157bdbcff969aeH. Peter Anvin		}
49f0be6c6a697c2fe8e2efbe98cd157bdbcff969aeH. Peter Anvin	}
50f0be6c6a697c2fe8e2efbe98cd157bdbcff969aeH. Peter Anvin	printf("\t;\n");
51f0be6c6a697c2fe8e2efbe98cd157bdbcff969aeH. Peter Anvin	return 0;
52f0be6c6a697c2fe8e2efbe98cd157bdbcff969aeH. Peter Anvin}
53