mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-09 05:39:54 -04:00
Merge branch 'master' into for-next
Sync with Linus tree to have 157550ff ("mtd: add GPMI-NAND driver
in the config and Makefile") as I have patch depending on that one.
This commit is contained in:
commit
2290c0d06d
10515 changed files with 592882 additions and 375993 deletions
|
|
@ -46,7 +46,7 @@ include $(kbuild-file)
|
|||
# If the save-* variables changed error out
|
||||
ifeq ($(KBUILD_NOPEDANTIC),)
|
||||
ifneq ("$(save-cflags)","$(CFLAGS)")
|
||||
$(error CFLAGS was changed in "$(kbuild-file)". Fix it to use EXTRA_CFLAGS)
|
||||
$(error CFLAGS was changed in "$(kbuild-file)". Fix it to use ccflags-y)
|
||||
endif
|
||||
endif
|
||||
|
||||
|
|
|
|||
|
|
@ -167,6 +167,7 @@ ifdef REGENERATE_PARSERS
|
|||
quiet_cmd_gperf = GPERF $@
|
||||
cmd_gperf = gperf -t --output-file $@ -a -C -E -g -k 1,3,$$ -p -t $<
|
||||
|
||||
.PRECIOUS: $(src)/%.hash.c_shipped
|
||||
$(src)/%.hash.c_shipped: $(src)/%.gperf
|
||||
$(call cmd,gperf)
|
||||
|
||||
|
|
@ -177,6 +178,7 @@ LEX_PREFIX = $(if $(LEX_PREFIX_${baseprereq}),$(LEX_PREFIX_${baseprereq}),yy)
|
|||
quiet_cmd_flex = LEX $@
|
||||
cmd_flex = flex -o$@ -L -P $(LEX_PREFIX) $<
|
||||
|
||||
.PRECIOUS: $(src)/%.lex.c_shipped
|
||||
$(src)/%.lex.c_shipped: $(src)/%.l
|
||||
$(call cmd,flex)
|
||||
|
||||
|
|
@ -187,12 +189,14 @@ YACC_PREFIX = $(if $(YACC_PREFIX_${baseprereq}),$(YACC_PREFIX_${baseprereq}),yy)
|
|||
quiet_cmd_bison = YACC $@
|
||||
cmd_bison = bison -o$@ -t -l -p $(YACC_PREFIX) $<
|
||||
|
||||
.PRECIOUS: $(src)/%.tab.c_shipped
|
||||
$(src)/%.tab.c_shipped: $(src)/%.y
|
||||
$(call cmd,bison)
|
||||
|
||||
quiet_cmd_bison_h = YACC $@
|
||||
cmd_bison_h = bison -o/dev/null --defines=$@ -t -l -p $(YACC_PREFIX) $<
|
||||
|
||||
.PRECIOUS: $(src)/%.tab.h_shipped
|
||||
$(src)/%.tab.h_shipped: $(src)/%.y
|
||||
$(call cmd,bison_h)
|
||||
|
||||
|
|
|
|||
|
|
@ -345,6 +345,7 @@ static void parse_dep_file(void *map, size_t len)
|
|||
memcpy(s, m, p-m); s[p-m] = 0;
|
||||
if (strrcmp(s, "include/generated/autoconf.h") &&
|
||||
strrcmp(s, "arch/um/include/uml-config.h") &&
|
||||
strrcmp(s, "include/linux/kconfig.h") &&
|
||||
strrcmp(s, ".ver")) {
|
||||
/*
|
||||
* Do not list the source file as dependency, so that
|
||||
|
|
|
|||
|
|
@ -240,9 +240,8 @@ our $NonptrType;
|
|||
our $Type;
|
||||
our $Declare;
|
||||
|
||||
our $UTF8 = qr {
|
||||
[\x09\x0A\x0D\x20-\x7E] # ASCII
|
||||
| [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
|
||||
our $NON_ASCII_UTF8 = qr{
|
||||
[\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
|
||||
| \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
|
||||
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
|
||||
| \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
|
||||
|
|
@ -251,6 +250,11 @@ our $UTF8 = qr {
|
|||
| \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
|
||||
}x;
|
||||
|
||||
our $UTF8 = qr{
|
||||
[\x09\x0A\x0D\x20-\x7E] # ASCII
|
||||
| $NON_ASCII_UTF8
|
||||
}x;
|
||||
|
||||
our $typeTypedefs = qr{(?x:
|
||||
(?:__)?(?:u|s|be|le)(?:8|16|32|64)|
|
||||
atomic_t
|
||||
|
|
@ -1330,6 +1334,9 @@ sub process {
|
|||
my $signoff = 0;
|
||||
my $is_patch = 0;
|
||||
|
||||
my $in_header_lines = 1;
|
||||
my $in_commit_log = 0; #Scanning lines before patch
|
||||
|
||||
our @report = ();
|
||||
our $cnt_lines = 0;
|
||||
our $cnt_error = 0;
|
||||
|
|
@ -1497,7 +1504,6 @@ sub process {
|
|||
if ($line =~ /^diff --git.*?(\S+)$/) {
|
||||
$realfile = $1;
|
||||
$realfile =~ s@^([^/]*)/@@;
|
||||
|
||||
} elsif ($line =~ /^\+\+\+\s+(\S+)/) {
|
||||
$realfile = $1;
|
||||
$realfile =~ s@^([^/]*)/@@;
|
||||
|
|
@ -1536,6 +1542,7 @@ sub process {
|
|||
# Check the patch for a signoff:
|
||||
if ($line =~ /^\s*signed-off-by:/i) {
|
||||
$signoff++;
|
||||
$in_commit_log = 0;
|
||||
}
|
||||
|
||||
# Check signature styles
|
||||
|
|
@ -1613,6 +1620,21 @@ sub process {
|
|||
"Invalid UTF-8, patch and commit message should be encoded in UTF-8\n" . $hereptr);
|
||||
}
|
||||
|
||||
# Check if it's the start of a commit log
|
||||
# (not a header line and we haven't seen the patch filename)
|
||||
if ($in_header_lines && $realfile =~ /^$/ &&
|
||||
$rawline !~ /^(commit\b|from\b|\w+:).+$/i) {
|
||||
$in_header_lines = 0;
|
||||
$in_commit_log = 1;
|
||||
}
|
||||
|
||||
# Still not yet in a patch, check for any UTF-8
|
||||
if ($in_commit_log && $realfile =~ /^$/ &&
|
||||
$rawline =~ /$NON_ASCII_UTF8/) {
|
||||
CHK("UTF8_BEFORE_PATCH",
|
||||
"8-bit UTF-8 used in possible commit log\n" . $herecurr);
|
||||
}
|
||||
|
||||
# ignore non-hunk lines and lines being removed
|
||||
next if (!$hunk_line || $line =~ /^-/);
|
||||
|
||||
|
|
@ -1661,6 +1683,20 @@ sub process {
|
|||
#print "is_end<$is_end> length<$length>\n";
|
||||
}
|
||||
|
||||
if (($realfile =~ /Makefile.*/ || $realfile =~ /Kbuild.*/) &&
|
||||
($line =~ /\+(EXTRA_[A-Z]+FLAGS).*/)) {
|
||||
my $flag = $1;
|
||||
my $replacement = {
|
||||
'EXTRA_AFLAGS' => 'asflags-y',
|
||||
'EXTRA_CFLAGS' => 'ccflags-y',
|
||||
'EXTRA_CPPFLAGS' => 'cppflags-y',
|
||||
'EXTRA_LDFLAGS' => 'ldflags-y',
|
||||
};
|
||||
|
||||
WARN("DEPRECATED_VARIABLE",
|
||||
"Use of $flag is deprecated, please use \`$replacement->{$flag} instead.\n" . $herecurr) if ($replacement->{$flag});
|
||||
}
|
||||
|
||||
# check we are in a valid source file if not then ignore this hunk
|
||||
next if ($realfile !~ /\.(h|c|s|S|pl|sh)$/);
|
||||
|
||||
|
|
@ -3151,10 +3187,10 @@ sub process {
|
|||
"consider using a completion\n" . $herecurr);
|
||||
|
||||
}
|
||||
# recommend kstrto* over simple_strto*
|
||||
if ($line =~ /\bsimple_(strto.*?)\s*\(/) {
|
||||
# recommend kstrto* over simple_strto* and strict_strto*
|
||||
if ($line =~ /\b((simple|strict)_(strto(l|ll|ul|ull)))\s*\(/) {
|
||||
WARN("CONSIDER_KSTRTO",
|
||||
"consider using kstrto* in preference to simple_$1\n" . $herecurr);
|
||||
"$1 is obsolete, use k$3 instead\n" . $herecurr);
|
||||
}
|
||||
# check for __initcall(), use device_initcall() explicitly please
|
||||
if ($line =~ /^.\s*__initcall\s*\(/) {
|
||||
|
|
|
|||
62
scripts/extract-vmlinux
Executable file
62
scripts/extract-vmlinux
Executable file
|
|
@ -0,0 +1,62 @@
|
|||
#!/bin/sh
|
||||
# ----------------------------------------------------------------------
|
||||
# extract-vmlinux - Extract uncompressed vmlinux from a kernel image
|
||||
#
|
||||
# Inspired from extract-ikconfig
|
||||
# (c) 2009,2010 Dick Streefland <dick@streefland.net>
|
||||
#
|
||||
# (c) 2011 Corentin Chary <corentin.chary@gmail.com>
|
||||
#
|
||||
# Licensed under the GNU General Public License, version 2 (GPLv2).
|
||||
# ----------------------------------------------------------------------
|
||||
|
||||
check_vmlinux()
|
||||
{
|
||||
# Use readelf to check if it's a valid ELF
|
||||
# TODO: find a better to way to check that it's really vmlinux
|
||||
# and not just an elf
|
||||
readelf -h $1 > /dev/null 2>&1 || return 1
|
||||
|
||||
cat $1
|
||||
exit 0
|
||||
}
|
||||
|
||||
try_decompress()
|
||||
{
|
||||
# The obscure use of the "tr" filter is to work around older versions of
|
||||
# "grep" that report the byte offset of the line instead of the pattern.
|
||||
|
||||
# Try to find the header ($1) and decompress from here
|
||||
for pos in `tr "$1\n$2" "\n$2=" < "$img" | grep -abo "^$2"`
|
||||
do
|
||||
pos=${pos%%:*}
|
||||
tail -c+$pos "$img" | $3 > $tmp 2> /dev/null
|
||||
check_vmlinux $tmp
|
||||
done
|
||||
}
|
||||
|
||||
# Check invocation:
|
||||
me=${0##*/}
|
||||
img=$1
|
||||
if [ $# -ne 1 -o ! -s "$img" ]
|
||||
then
|
||||
echo "Usage: $me <kernel-image>" >&2
|
||||
exit 2
|
||||
fi
|
||||
|
||||
# Prepare temp files:
|
||||
tmp=$(mktemp /tmp/vmlinux-XXX)
|
||||
trap "rm -f $tmp" 0
|
||||
|
||||
# Initial attempt for uncompressed images or objects:
|
||||
check_vmlinux $img
|
||||
|
||||
# That didn't work, so retry after decompression.
|
||||
try_decompress '\037\213\010' xy gunzip
|
||||
try_decompress '\3757zXZ\000' abcde unxz
|
||||
try_decompress 'BZh' xy bunzip2
|
||||
try_decompress '\135\0\0\0' xxx unlzma
|
||||
try_decompress '\211\114\132' xy 'lzop -d'
|
||||
|
||||
# Bail out:
|
||||
echo "$me: Cannot find vmlinux." >&2
|
||||
|
|
@ -40,7 +40,8 @@ static struct symbol *symtab[HASH_BUCKETS];
|
|||
static FILE *debugfile;
|
||||
|
||||
int cur_line = 1;
|
||||
char *cur_filename;
|
||||
char *cur_filename, *source_file;
|
||||
int in_source_file;
|
||||
|
||||
static int flag_debug, flag_dump_defs, flag_reference, flag_dump_types,
|
||||
flag_preserve, flag_warnings;
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@ enum symbol_status {
|
|||
struct string_list {
|
||||
struct string_list *next;
|
||||
enum symbol_type tag;
|
||||
int in_source_file;
|
||||
char *string;
|
||||
};
|
||||
|
||||
|
|
@ -57,7 +58,8 @@ typedef struct string_list **yystype;
|
|||
#define YYSTYPE yystype
|
||||
|
||||
extern int cur_line;
|
||||
extern char *cur_filename;
|
||||
extern char *cur_filename, *source_file;
|
||||
extern int in_source_file;
|
||||
|
||||
struct symbol *find_symbol(const char *name, enum symbol_type ns, int exact);
|
||||
struct symbol *add_symbol(const char *name, enum symbol_type type,
|
||||
|
|
|
|||
|
|
@ -116,6 +116,7 @@ MC_TOKEN ([~%^&*+=|<>/-]=)|(&&)|("||")|(->)|(<<)|(>>)
|
|||
cur_node->tag = \
|
||||
find_symbol(cur_node->string, SYM_ENUM_CONST, 1)?\
|
||||
SYM_ENUM_CONST : SYM_NORMAL ; \
|
||||
cur_node->in_source_file = in_source_file; \
|
||||
} while (0)
|
||||
|
||||
#define APP _APP(yytext, yyleng)
|
||||
|
|
@ -166,6 +167,13 @@ repeat:
|
|||
cur_filename = memcpy(xmalloc(e-file+1), file, e-file+1);
|
||||
cur_line = atoi(yytext+2);
|
||||
|
||||
if (!source_file) {
|
||||
source_file = xstrdup(cur_filename);
|
||||
in_source_file = 1;
|
||||
} else {
|
||||
in_source_file = (strcmp(cur_filename, source_file) == 0);
|
||||
}
|
||||
|
||||
goto repeat;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -660,7 +660,7 @@ static int input (void );
|
|||
/* This used to be an fputs(), but since the string might contain NUL's,
|
||||
* we now use fwrite().
|
||||
*/
|
||||
#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0)
|
||||
#define ECHO fwrite( yytext, yyleng, 1, yyout )
|
||||
#endif
|
||||
|
||||
/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
|
||||
|
|
@ -671,7 +671,7 @@ static int input (void );
|
|||
if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
|
||||
{ \
|
||||
int c = '*'; \
|
||||
unsigned n; \
|
||||
int n; \
|
||||
for ( n = 0; n < max_size && \
|
||||
(c = getc( yyin )) != EOF && c != '\n'; ++n ) \
|
||||
buf[n] = (char) c; \
|
||||
|
|
@ -1926,6 +1926,7 @@ void yyfree (void * ptr )
|
|||
cur_node->tag = \
|
||||
find_symbol(cur_node->string, SYM_ENUM_CONST, 1)?\
|
||||
SYM_ENUM_CONST : SYM_NORMAL ; \
|
||||
cur_node->in_source_file = in_source_file; \
|
||||
} while (0)
|
||||
|
||||
#define APP _APP(yytext, yyleng)
|
||||
|
|
@ -1975,6 +1976,13 @@ repeat:
|
|||
cur_filename = memcpy(xmalloc(e-file+1), file, e-file+1);
|
||||
cur_line = atoi(yytext+2);
|
||||
|
||||
if (!source_file) {
|
||||
source_file = xstrdup(cur_filename);
|
||||
in_source_file = 1;
|
||||
} else {
|
||||
in_source_file = (strcmp(cur_filename, source_file) == 0);
|
||||
}
|
||||
|
||||
goto repeat;
|
||||
}
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -1,9 +1,8 @@
|
|||
/* A Bison parser, made by GNU Bison 2.4.3. */
|
||||
/* A Bison parser, made by GNU Bison 2.5. */
|
||||
|
||||
/* Skeleton interface for Bison's Yacc-like parsers in C
|
||||
/* Bison interface for Yacc-like parsers in C
|
||||
|
||||
Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
|
||||
2009, 2010 Free Software Foundation, Inc.
|
||||
Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
|
|
|||
|
|
@ -51,6 +51,25 @@ remove_list(struct string_list **pb, struct string_list **pe)
|
|||
free_list(b, e);
|
||||
}
|
||||
|
||||
/* Record definition of a struct/union/enum */
|
||||
static void record_compound(struct string_list **keyw,
|
||||
struct string_list **ident,
|
||||
struct string_list **body,
|
||||
enum symbol_type type)
|
||||
{
|
||||
struct string_list *b = *body, *i = *ident, *r;
|
||||
|
||||
if (i->in_source_file) {
|
||||
remove_node(keyw);
|
||||
(*ident)->tag = type;
|
||||
remove_list(body, ident);
|
||||
return;
|
||||
}
|
||||
r = copy_node(i); r->tag = type;
|
||||
r->next = (*keyw)->next; *body = r; (*keyw)->next = NULL;
|
||||
add_symbol(i->string, type, b, is_extern);
|
||||
}
|
||||
|
||||
%}
|
||||
|
||||
%token ASM_KEYW
|
||||
|
|
@ -215,26 +234,11 @@ type_specifier:
|
|||
|
||||
/* Full definitions of an s/u/e. Record it. */
|
||||
| STRUCT_KEYW IDENT class_body
|
||||
{ struct string_list *s = *$3, *i = *$2, *r;
|
||||
r = copy_node(i); r->tag = SYM_STRUCT;
|
||||
r->next = (*$1)->next; *$3 = r; (*$1)->next = NULL;
|
||||
add_symbol(i->string, SYM_STRUCT, s, is_extern);
|
||||
$$ = $3;
|
||||
}
|
||||
{ record_compound($1, $2, $3, SYM_STRUCT); $$ = $3; }
|
||||
| UNION_KEYW IDENT class_body
|
||||
{ struct string_list *s = *$3, *i = *$2, *r;
|
||||
r = copy_node(i); r->tag = SYM_UNION;
|
||||
r->next = (*$1)->next; *$3 = r; (*$1)->next = NULL;
|
||||
add_symbol(i->string, SYM_UNION, s, is_extern);
|
||||
$$ = $3;
|
||||
}
|
||||
{ record_compound($1, $2, $3, SYM_UNION); $$ = $3; }
|
||||
| ENUM_KEYW IDENT enum_body
|
||||
{ struct string_list *s = *$3, *i = *$2, *r;
|
||||
r = copy_node(i); r->tag = SYM_ENUM;
|
||||
r->next = (*$1)->next; *$3 = r; (*$1)->next = NULL;
|
||||
add_symbol(i->string, SYM_ENUM, s, is_extern);
|
||||
$$ = $3;
|
||||
}
|
||||
{ record_compound($1, $2, $3, SYM_ENUM); $$ = $3; }
|
||||
/*
|
||||
* Anonymous enum definition. Tell add_symbol() to restart its counter.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -33,17 +33,9 @@ silentoldconfig: $(obj)/conf
|
|||
$(Q)mkdir -p include/generated
|
||||
$< --$@ $(Kconfig)
|
||||
|
||||
# if no path is given, then use src directory to find file
|
||||
ifdef LSMOD
|
||||
LSMOD_F := $(LSMOD)
|
||||
ifeq ($(findstring /,$(LSMOD)),)
|
||||
LSMOD_F := $(objtree)/$(LSMOD)
|
||||
endif
|
||||
endif
|
||||
|
||||
localmodconfig: $(obj)/streamline_config.pl $(obj)/conf
|
||||
localyesconfig localmodconfig: $(obj)/streamline_config.pl $(obj)/conf
|
||||
$(Q)mkdir -p include/generated
|
||||
$(Q)perl $< $(srctree) $(Kconfig) $(LSMOD_F) > .tmp.config
|
||||
$(Q)perl $< --$@ $(srctree) $(Kconfig) > .tmp.config
|
||||
$(Q)if [ -f .config ]; then \
|
||||
cmp -s .tmp.config .config || \
|
||||
(mv -f .config .config.old.1; \
|
||||
|
|
@ -56,22 +48,6 @@ localmodconfig: $(obj)/streamline_config.pl $(obj)/conf
|
|||
fi
|
||||
$(Q)rm -f .tmp.config
|
||||
|
||||
localyesconfig: $(obj)/streamline_config.pl $(obj)/conf
|
||||
$(Q)mkdir -p include/generated
|
||||
$(Q)perl $< $(srctree) $(Kconfig) $(LSMOD_F) > .tmp.config
|
||||
$(Q)sed -i s/=m/=y/ .tmp.config
|
||||
$(Q)if [ -f .config ]; then \
|
||||
cmp -s .tmp.config .config || \
|
||||
(mv -f .config .config.old.1; \
|
||||
mv -f .tmp.config .config; \
|
||||
$(obj)/conf --silentoldconfig $(Kconfig); \
|
||||
mv -f .config.old.1 .config.old) \
|
||||
else \
|
||||
mv -f .tmp.config .config; \
|
||||
$(obj)/conf --silentoldconfig $(Kconfig); \
|
||||
fi
|
||||
$(Q)rm -f .tmp.config
|
||||
|
||||
# Create new linux.pot file
|
||||
# Adjust charset to UTF-8 in .po file to accept UTF-8 in Kconfig files
|
||||
# The symlink is used to repair a deficiency in arch/um
|
||||
|
|
|
|||
|
|
@ -503,17 +503,6 @@ header_print_symbol(FILE *fp, struct symbol *sym, const char *value, void *arg)
|
|||
fprintf(fp, "#define %s%s%s 1\n",
|
||||
CONFIG_, sym->name, suffix);
|
||||
}
|
||||
/*
|
||||
* Generate the __enabled_CONFIG_* and
|
||||
* __enabled_CONFIG_*_MODULE macros for use by the
|
||||
* IS_{ENABLED,BUILTIN,MODULE} macros. The _MODULE variant is
|
||||
* generated even for booleans so that the IS_ENABLED() macro
|
||||
* works.
|
||||
*/
|
||||
fprintf(fp, "#define __enabled_" CONFIG_ "%s %d\n",
|
||||
sym->name, (*value == 'y'));
|
||||
fprintf(fp, "#define __enabled_" CONFIG_ "%s_MODULE %d\n",
|
||||
sym->name, (*value == 'm'));
|
||||
break;
|
||||
}
|
||||
case S_HEX: {
|
||||
|
|
@ -564,6 +553,35 @@ static struct conf_printer header_printer_cb =
|
|||
.print_comment = header_print_comment,
|
||||
};
|
||||
|
||||
/*
|
||||
* Generate the __enabled_CONFIG_* and __enabled_CONFIG_*_MODULE macros for
|
||||
* use by the IS_{ENABLED,BUILTIN,MODULE} macros. The _MODULE variant is
|
||||
* generated even for booleans so that the IS_ENABLED() macro works.
|
||||
*/
|
||||
static void
|
||||
header_print__enabled_symbol(FILE *fp, struct symbol *sym, const char *value, void *arg)
|
||||
{
|
||||
|
||||
switch (sym->type) {
|
||||
case S_BOOLEAN:
|
||||
case S_TRISTATE: {
|
||||
fprintf(fp, "#define __enabled_" CONFIG_ "%s %d\n",
|
||||
sym->name, (*value == 'y'));
|
||||
fprintf(fp, "#define __enabled_" CONFIG_ "%s_MODULE %d\n",
|
||||
sym->name, (*value == 'm'));
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static struct conf_printer header__enabled_printer_cb =
|
||||
{
|
||||
.print_symbol = header_print__enabled_symbol,
|
||||
.print_comment = header_print_comment,
|
||||
};
|
||||
|
||||
/*
|
||||
* Tristate printer
|
||||
*
|
||||
|
|
@ -945,11 +963,16 @@ int conf_write_autoconf(void)
|
|||
conf_write_heading(out_h, &header_printer_cb, NULL);
|
||||
|
||||
for_all_symbols(i, sym) {
|
||||
sym_calc_value(sym);
|
||||
if (!(sym->flags & SYMBOL_WRITE) || !sym->name)
|
||||
if (!sym->name)
|
||||
continue;
|
||||
|
||||
sym_calc_value(sym);
|
||||
|
||||
conf_write_symbol(out_h, sym, &header__enabled_printer_cb, NULL);
|
||||
|
||||
if (!(sym->flags & SYMBOL_WRITE))
|
||||
continue;
|
||||
|
||||
/* write symbol to auto.conf, tristate and header files */
|
||||
conf_write_symbol(out, sym, &kconfig_printer_cb, (void *)1);
|
||||
|
||||
conf_write_symbol(tristate, sym, &tristate_printer_cb, (void *)1);
|
||||
|
|
|
|||
|
|
@ -320,7 +320,6 @@ static void print_page(WINDOW * win, int height, int width)
|
|||
*/
|
||||
static void print_line(WINDOW * win, int row, int width)
|
||||
{
|
||||
int y, x;
|
||||
char *line;
|
||||
|
||||
line = get_line();
|
||||
|
|
@ -329,10 +328,10 @@ static void print_line(WINDOW * win, int row, int width)
|
|||
waddch(win, ' ');
|
||||
waddnstr(win, line, MIN(strlen(line), width - 2));
|
||||
|
||||
getyx(win, y, x);
|
||||
/* Clear 'residue' of previous line */
|
||||
#if OLD_NCURSES
|
||||
{
|
||||
int x = getcurx(win);
|
||||
int i;
|
||||
for (i = 0; i < width - x; i++)
|
||||
waddch(win, ' ');
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
#include <stdarg.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <signal.h>
|
||||
#include <unistd.h>
|
||||
#include <locale.h>
|
||||
|
||||
|
|
@ -272,6 +273,7 @@ static struct menu *current_menu;
|
|||
static int child_count;
|
||||
static int single_menu_mode;
|
||||
static int show_all_options;
|
||||
static int saved_x, saved_y;
|
||||
|
||||
static void conf(struct menu *menu);
|
||||
static void conf_choice(struct menu *menu);
|
||||
|
|
@ -792,9 +794,54 @@ static void conf_save(void)
|
|||
}
|
||||
}
|
||||
|
||||
static int handle_exit(void)
|
||||
{
|
||||
int res;
|
||||
|
||||
dialog_clear();
|
||||
if (conf_get_changed())
|
||||
res = dialog_yesno(NULL,
|
||||
_("Do you wish to save your new configuration ?\n"
|
||||
"<ESC><ESC> to continue."),
|
||||
6, 60);
|
||||
else
|
||||
res = -1;
|
||||
|
||||
end_dialog(saved_x, saved_y);
|
||||
|
||||
switch (res) {
|
||||
case 0:
|
||||
if (conf_write(filename)) {
|
||||
fprintf(stderr, _("\n\n"
|
||||
"Error while writing of the configuration.\n"
|
||||
"Your configuration changes were NOT saved."
|
||||
"\n\n"));
|
||||
return 1;
|
||||
}
|
||||
/* fall through */
|
||||
case -1:
|
||||
printf(_("\n\n"
|
||||
"*** End of the configuration.\n"
|
||||
"*** Execute 'make' to start the build or try 'make help'."
|
||||
"\n\n"));
|
||||
res = 0;
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, _("\n\n"
|
||||
"Your configuration changes were NOT saved."
|
||||
"\n\n"));
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
static void sig_handler(int signo)
|
||||
{
|
||||
exit(handle_exit());
|
||||
}
|
||||
|
||||
int main(int ac, char **av)
|
||||
{
|
||||
int saved_x, saved_y;
|
||||
char *mode;
|
||||
int res;
|
||||
|
||||
|
|
@ -802,6 +849,8 @@ int main(int ac, char **av)
|
|||
bindtextdomain(PACKAGE, LOCALEDIR);
|
||||
textdomain(PACKAGE);
|
||||
|
||||
signal(SIGINT, sig_handler);
|
||||
|
||||
conf_parse(av[1]);
|
||||
conf_read(NULL);
|
||||
|
||||
|
|
@ -823,40 +872,9 @@ int main(int ac, char **av)
|
|||
set_config_filename(conf_get_configname());
|
||||
do {
|
||||
conf(&rootmenu);
|
||||
dialog_clear();
|
||||
if (conf_get_changed())
|
||||
res = dialog_yesno(NULL,
|
||||
_("Do you wish to save your "
|
||||
"new configuration?\n"
|
||||
"<ESC><ESC> to continue."),
|
||||
6, 60);
|
||||
else
|
||||
res = -1;
|
||||
res = handle_exit();
|
||||
} while (res == KEY_ESC);
|
||||
end_dialog(saved_x, saved_y);
|
||||
|
||||
switch (res) {
|
||||
case 0:
|
||||
if (conf_write(filename)) {
|
||||
fprintf(stderr, _("\n\n"
|
||||
"Error while writing of the configuration.\n"
|
||||
"Your configuration changes were NOT saved."
|
||||
"\n\n"));
|
||||
return 1;
|
||||
}
|
||||
/* fall through */
|
||||
case -1:
|
||||
printf(_("\n\n"
|
||||
"*** End of the configuration.\n"
|
||||
"*** Execute 'make' to start the build or try 'make help'."
|
||||
"\n\n"));
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, _("\n\n"
|
||||
"Your configuration changes were NOT saved."
|
||||
"\n\n"));
|
||||
}
|
||||
|
||||
return 0;
|
||||
return res;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -10,8 +10,7 @@
|
|||
|
||||
#include "lkc.h"
|
||||
|
||||
static const char nohelp_text[] = N_(
|
||||
"There is no help available for this option.\n");
|
||||
static const char nohelp_text[] = "There is no help available for this option.";
|
||||
|
||||
struct menu rootmenu;
|
||||
static struct menu **last_entry_ptr;
|
||||
|
|
@ -595,16 +594,14 @@ struct gstr get_relations_str(struct symbol **sym_arr)
|
|||
void menu_get_ext_help(struct menu *menu, struct gstr *help)
|
||||
{
|
||||
struct symbol *sym = menu->sym;
|
||||
const char *help_text = nohelp_text;
|
||||
|
||||
if (menu_has_help(menu)) {
|
||||
if (sym->name) {
|
||||
if (sym->name)
|
||||
str_printf(help, "%s%s:\n\n", CONFIG_, sym->name);
|
||||
str_append(help, _(menu_get_help(menu)));
|
||||
str_append(help, "\n");
|
||||
}
|
||||
} else {
|
||||
str_append(help, nohelp_text);
|
||||
help_text = menu_get_help(menu);
|
||||
}
|
||||
str_printf(help, "%s\n", _(help_text));
|
||||
if (sym)
|
||||
get_symbol_str(help, sym);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -182,8 +182,6 @@ setmod_text[] = N_(
|
|||
"This feature depends on another which\n"
|
||||
"has been configured as a module.\n"
|
||||
"As a result, this feature will be built as a module."),
|
||||
nohelp_text[] = N_(
|
||||
"There is no help available for this option.\n"),
|
||||
load_config_text[] = N_(
|
||||
"Enter the name of the configuration file you wish to load.\n"
|
||||
"Accept the name shown to restore the configuration you\n"
|
||||
|
|
@ -280,6 +278,9 @@ static int global_exit;
|
|||
/* the currently selected button */
|
||||
const char *current_instructions = menu_instructions;
|
||||
|
||||
static char *dialog_input_result;
|
||||
static int dialog_input_result_len;
|
||||
|
||||
static void conf(struct menu *menu);
|
||||
static void conf_choice(struct menu *menu);
|
||||
static void conf_string(struct menu *menu);
|
||||
|
|
@ -695,7 +696,6 @@ static void search_conf(void)
|
|||
{
|
||||
struct symbol **sym_arr;
|
||||
struct gstr res;
|
||||
char dialog_input_result[100];
|
||||
char *dialog_input;
|
||||
int dres;
|
||||
again:
|
||||
|
|
@ -703,7 +703,7 @@ again:
|
|||
_("Search Configuration Parameter"),
|
||||
_("Enter " CONFIG_ " (sub)string to search for "
|
||||
"(with or without \"" CONFIG_ "\")"),
|
||||
"", dialog_input_result, 99);
|
||||
"", &dialog_input_result, &dialog_input_result_len);
|
||||
switch (dres) {
|
||||
case 0:
|
||||
break;
|
||||
|
|
@ -1348,7 +1348,6 @@ static void conf_choice(struct menu *menu)
|
|||
static void conf_string(struct menu *menu)
|
||||
{
|
||||
const char *prompt = menu_get_prompt(menu);
|
||||
char dialog_input_result[256];
|
||||
|
||||
while (1) {
|
||||
int res;
|
||||
|
|
@ -1371,8 +1370,8 @@ static void conf_string(struct menu *menu)
|
|||
prompt ? _(prompt) : _("Main Menu"),
|
||||
heading,
|
||||
sym_get_string_value(menu->sym),
|
||||
dialog_input_result,
|
||||
sizeof(dialog_input_result));
|
||||
&dialog_input_result,
|
||||
&dialog_input_result_len);
|
||||
switch (res) {
|
||||
case 0:
|
||||
if (sym_set_string_value(menu->sym,
|
||||
|
|
@ -1392,14 +1391,13 @@ static void conf_string(struct menu *menu)
|
|||
|
||||
static void conf_load(void)
|
||||
{
|
||||
char dialog_input_result[256];
|
||||
while (1) {
|
||||
int res;
|
||||
res = dialog_inputbox(main_window,
|
||||
NULL, load_config_text,
|
||||
filename,
|
||||
dialog_input_result,
|
||||
sizeof(dialog_input_result));
|
||||
&dialog_input_result,
|
||||
&dialog_input_result_len);
|
||||
switch (res) {
|
||||
case 0:
|
||||
if (!dialog_input_result[0])
|
||||
|
|
@ -1424,14 +1422,13 @@ static void conf_load(void)
|
|||
|
||||
static void conf_save(void)
|
||||
{
|
||||
char dialog_input_result[256];
|
||||
while (1) {
|
||||
int res;
|
||||
res = dialog_inputbox(main_window,
|
||||
NULL, save_config_text,
|
||||
filename,
|
||||
dialog_input_result,
|
||||
sizeof(dialog_input_result));
|
||||
&dialog_input_result,
|
||||
&dialog_input_result_len);
|
||||
switch (res) {
|
||||
case 0:
|
||||
if (!dialog_input_result[0])
|
||||
|
|
|
|||
|
|
@ -356,7 +356,7 @@ int btn_dialog(WINDOW *main_window, const char *msg, int btn_num, ...)
|
|||
|
||||
int dialog_inputbox(WINDOW *main_window,
|
||||
const char *title, const char *prompt,
|
||||
const char *init, char *result, int result_len)
|
||||
const char *init, char **resultp, int *result_len)
|
||||
{
|
||||
int prompt_lines = 0;
|
||||
int prompt_width = 0;
|
||||
|
|
@ -367,7 +367,13 @@ int dialog_inputbox(WINDOW *main_window,
|
|||
int i, x, y;
|
||||
int res = -1;
|
||||
int cursor_position = strlen(init);
|
||||
int cursor_form_win;
|
||||
char *result = *resultp;
|
||||
|
||||
if (strlen(init)+1 > *result_len) {
|
||||
*result_len = strlen(init)+1;
|
||||
*resultp = result = realloc(result, *result_len);
|
||||
}
|
||||
|
||||
/* find the widest line of msg: */
|
||||
prompt_lines = get_line_no(prompt);
|
||||
|
|
@ -384,7 +390,7 @@ int dialog_inputbox(WINDOW *main_window,
|
|||
y = (LINES-(prompt_lines+4))/2;
|
||||
x = (COLS-(prompt_width+4))/2;
|
||||
|
||||
strncpy(result, init, result_len);
|
||||
strncpy(result, init, *result_len);
|
||||
|
||||
/* create the windows */
|
||||
win = newwin(prompt_lines+6, prompt_width+7, y, x);
|
||||
|
|
@ -405,7 +411,9 @@ int dialog_inputbox(WINDOW *main_window,
|
|||
fill_window(prompt_win, prompt);
|
||||
|
||||
mvwprintw(form_win, 0, 0, "%*s", prompt_width, " ");
|
||||
mvwprintw(form_win, 0, 0, "%s", result);
|
||||
cursor_form_win = min(cursor_position, prompt_width-1);
|
||||
mvwprintw(form_win, 0, 0, "%s",
|
||||
result + cursor_position-cursor_form_win);
|
||||
|
||||
/* create panels */
|
||||
panel = new_panel(win);
|
||||
|
|
@ -431,6 +439,8 @@ int dialog_inputbox(WINDOW *main_window,
|
|||
&result[cursor_position],
|
||||
len-cursor_position+1);
|
||||
cursor_position--;
|
||||
cursor_form_win--;
|
||||
len--;
|
||||
}
|
||||
break;
|
||||
case KEY_DC:
|
||||
|
|
@ -438,38 +448,63 @@ int dialog_inputbox(WINDOW *main_window,
|
|||
memmove(&result[cursor_position],
|
||||
&result[cursor_position+1],
|
||||
len-cursor_position+1);
|
||||
len--;
|
||||
}
|
||||
break;
|
||||
case KEY_UP:
|
||||
case KEY_RIGHT:
|
||||
if (cursor_position < len &&
|
||||
cursor_position < min(result_len, prompt_width))
|
||||
if (cursor_position < len) {
|
||||
cursor_position++;
|
||||
cursor_form_win++;
|
||||
}
|
||||
break;
|
||||
case KEY_DOWN:
|
||||
case KEY_LEFT:
|
||||
if (cursor_position > 0)
|
||||
if (cursor_position > 0) {
|
||||
cursor_position--;
|
||||
cursor_form_win--;
|
||||
}
|
||||
break;
|
||||
case KEY_HOME:
|
||||
cursor_position = 0;
|
||||
cursor_form_win = 0;
|
||||
break;
|
||||
case KEY_END:
|
||||
cursor_position = len;
|
||||
cursor_form_win = min(cursor_position, prompt_width-1);
|
||||
break;
|
||||
default:
|
||||
if ((isgraph(res) || isspace(res)) &&
|
||||
len-2 < result_len) {
|
||||
if ((isgraph(res) || isspace(res))) {
|
||||
/* one for new char, one for '\0' */
|
||||
if (len+2 > *result_len) {
|
||||
*result_len = len+2;
|
||||
*resultp = result = realloc(result,
|
||||
*result_len);
|
||||
}
|
||||
/* insert the char at the proper position */
|
||||
memmove(&result[cursor_position+1],
|
||||
&result[cursor_position],
|
||||
len+1);
|
||||
len-cursor_position+1);
|
||||
result[cursor_position] = res;
|
||||
cursor_position++;
|
||||
cursor_form_win++;
|
||||
len++;
|
||||
} else {
|
||||
mvprintw(0, 0, "unknow key: %d\n", res);
|
||||
mvprintw(0, 0, "unknown key: %d\n", res);
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (cursor_form_win < 0)
|
||||
cursor_form_win = 0;
|
||||
else if (cursor_form_win > prompt_width-1)
|
||||
cursor_form_win = prompt_width-1;
|
||||
|
||||
wmove(form_win, 0, 0);
|
||||
wclrtoeol(form_win);
|
||||
mvwprintw(form_win, 0, 0, "%*s", prompt_width, " ");
|
||||
mvwprintw(form_win, 0, 0, "%s", result);
|
||||
wmove(form_win, 0, cursor_position);
|
||||
mvwprintw(form_win, 0, 0, "%s",
|
||||
result + cursor_position-cursor_form_win);
|
||||
wmove(form_win, 0, cursor_form_win);
|
||||
touchwin(win);
|
||||
refresh_all_windows(main_window);
|
||||
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@ void fill_window(WINDOW *win, const char *text);
|
|||
int btn_dialog(WINDOW *main_window, const char *msg, int btn_num, ...);
|
||||
int dialog_inputbox(WINDOW *main_window,
|
||||
const char *title, const char *prompt,
|
||||
const char *init, char *result, int result_len);
|
||||
const char *init, char **resultp, int *result_len);
|
||||
void refresh_all_windows(WINDOW *main_window);
|
||||
void show_scroll_win(WINDOW *main_window,
|
||||
const char *title,
|
||||
|
|
|
|||
|
|
@ -43,6 +43,7 @@
|
|||
# make oldconfig
|
||||
#
|
||||
use strict;
|
||||
use Getopt::Long;
|
||||
|
||||
my $config = ".config";
|
||||
|
||||
|
|
@ -112,10 +113,17 @@ sub find_config {
|
|||
|
||||
find_config;
|
||||
|
||||
# Parse options
|
||||
my $localmodconfig = 0;
|
||||
my $localyesconfig = 0;
|
||||
|
||||
GetOptions("localmodconfig" => \$localmodconfig,
|
||||
"localyesconfig" => \$localyesconfig);
|
||||
|
||||
# Get the build source and top level Kconfig file (passed in)
|
||||
my $ksource = $ARGV[0];
|
||||
my $kconfig = $ARGV[1];
|
||||
my $lsmod_file = $ARGV[2];
|
||||
my $lsmod_file = $ENV{'LSMOD'};
|
||||
|
||||
my @makefiles = `find $ksource -name Makefile 2>/dev/null`;
|
||||
chomp @makefiles;
|
||||
|
|
@ -296,7 +304,11 @@ my %modules;
|
|||
|
||||
if (defined($lsmod_file)) {
|
||||
if ( ! -f $lsmod_file) {
|
||||
die "$lsmod_file not found";
|
||||
if ( -f $ENV{'objtree'}."/".$lsmod_file) {
|
||||
$lsmod_file = $ENV{'objtree'}."/".$lsmod_file;
|
||||
} else {
|
||||
die "$lsmod_file not found";
|
||||
}
|
||||
}
|
||||
if ( -x $lsmod_file) {
|
||||
# the file is executable, run it
|
||||
|
|
@ -421,7 +433,11 @@ while(<CIN>) {
|
|||
|
||||
if (/^(CONFIG.*)=(m|y)/) {
|
||||
if (defined($configs{$1})) {
|
||||
$setconfigs{$1} = $2;
|
||||
if ($localyesconfig) {
|
||||
$setconfigs{$1} = 'y';
|
||||
} else {
|
||||
$setconfigs{$1} = $2;
|
||||
}
|
||||
} elsif ($2 eq "m") {
|
||||
print "# $1 is not set\n";
|
||||
next;
|
||||
|
|
|
|||
|
|
@ -735,6 +735,27 @@ static int do_virtio_entry(const char *filename, struct virtio_device_id *id,
|
|||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Looks like: vmbus:guid
|
||||
* Each byte of the guid will be represented by two hex characters
|
||||
* in the name.
|
||||
*/
|
||||
|
||||
static int do_vmbus_entry(const char *filename, struct hv_vmbus_device_id *id,
|
||||
char *alias)
|
||||
{
|
||||
int i;
|
||||
char guid_name[((sizeof(id->guid) + 1)) * 2];
|
||||
|
||||
for (i = 0; i < (sizeof(id->guid) * 2); i += 2)
|
||||
sprintf(&guid_name[i], "%02x", id->guid[i/2]);
|
||||
|
||||
strcpy(alias, "vmbus:");
|
||||
strcat(alias, guid_name);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* Looks like: i2c:S */
|
||||
static int do_i2c_entry(const char *filename, struct i2c_device_id *id,
|
||||
char *alias)
|
||||
|
|
@ -994,6 +1015,10 @@ void handle_moddevtable(struct module *mod, struct elf_info *info,
|
|||
do_table(symval, sym->st_size,
|
||||
sizeof(struct virtio_device_id), "virtio",
|
||||
do_virtio_entry, mod);
|
||||
else if (sym_is(symname, "__mod_vmbus_device_table"))
|
||||
do_table(symval, sym->st_size,
|
||||
sizeof(struct hv_vmbus_device_id), "vmbus",
|
||||
do_vmbus_entry, mod);
|
||||
else if (sym_is(symname, "__mod_i2c_device_table"))
|
||||
do_table(symval, sym->st_size,
|
||||
sizeof(struct i2c_device_id), "i2c",
|
||||
|
|
|
|||
|
|
@ -1849,6 +1849,12 @@ static void add_header(struct buffer *b, struct module *mod)
|
|||
buf_printf(b, "};\n");
|
||||
}
|
||||
|
||||
static void add_intree_flag(struct buffer *b, int is_intree)
|
||||
{
|
||||
if (is_intree)
|
||||
buf_printf(b, "\nMODULE_INFO(intree, \"Y\");\n");
|
||||
}
|
||||
|
||||
static void add_staging_flag(struct buffer *b, const char *name)
|
||||
{
|
||||
static const char *staging_dir = "drivers/staging";
|
||||
|
|
@ -2169,6 +2175,7 @@ int main(int argc, char **argv)
|
|||
buf.pos = 0;
|
||||
|
||||
add_header(&buf, mod);
|
||||
add_intree_flag(&buf, !external_module);
|
||||
add_staging_flag(&buf, mod->name);
|
||||
err |= add_versions(&buf, mod);
|
||||
add_depends(&buf, mod, modules);
|
||||
|
|
|
|||
|
|
@ -129,7 +129,7 @@ exuberant()
|
|||
-I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL \
|
||||
-I DEFINE_TRACE,EXPORT_TRACEPOINT_SYMBOL,EXPORT_TRACEPOINT_SYMBOL_GPL \
|
||||
--extra=+f --c-kinds=+px \
|
||||
--regex-asm='/^ENTRY\(([^)]*)\).*/\1/' \
|
||||
--regex-asm='/^(ENTRY|_GLOBAL)\(([^)]*)\).*/\2/' \
|
||||
--regex-c='/^SYSCALL_DEFINE[[:digit:]]?\(([^,)]*).*/sys_\1/' \
|
||||
--regex-c++='/^TRACE_EVENT\(([^,)]*).*/trace_\1/' \
|
||||
--regex-c++='/^DEFINE_EVENT\([^,)]*, *([^,)]*).*/trace_\1/'
|
||||
|
|
@ -151,7 +151,7 @@ exuberant()
|
|||
emacs()
|
||||
{
|
||||
all_sources | xargs $1 -a \
|
||||
--regex='/^ENTRY(\([^)]*\)).*/\1/' \
|
||||
--regex='/^(ENTRY|_GLOBAL)(\([^)]*\)).*/\2/' \
|
||||
--regex='/^SYSCALL_DEFINE[0-9]?(\([^,)]*\).*/sys_\1/' \
|
||||
--regex='/^TRACE_EVENT(\([^,)]*\).*/trace_\1/' \
|
||||
--regex='/^DEFINE_EVENT([^,)]*, *\([^,)]*\).*/trace_\1/'
|
||||
|
|
|
|||
Loading…
Reference in a new issue