Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild

Pull kbuild changes from Michal Marek:

- Alias generation in modpost is cross-compile safe.

- kernel/timeconst.h is now generated using a bc script instead of
perl.

- scripts/link-vmlinux.sh now works with an alternative
$KCONFIG_CONFIG.

- destination-y for exported headers is supported in Kbuild files
again.

- depmod is called with -P $CONFIG_SYMBOL_PREFIX on architectures that
need it.

- CONFIG_DEBUG_INFO_REDUCED disables var-tracking

- scripts/setlocalversion works with too much translated locales ;)

* 'kbuild' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild:
kbuild: Fix reading of .config in link-vmlinux.sh
kbuild: Unset language specific variables in setlocalversion script
Kbuild: Disable var tracking with CONFIG_DEBUG_INFO_REDUCED
depmod: pass -P $CONFIG_SYMBOL_PREFIX
kbuild: Fix destination-y for installed headers
scripts/link-vmlinux.sh: source variables from KCONFIG_CONFIG
kernel: Replace timeconst.pl with a bc script
mod/file2alias: make modalias generation safe for cross compiling

+748 -757
+3 -3
Makefile
··· 192 192 # "make" in the configured kernel build directory always uses that. 193 193 # Default value for CROSS_COMPILE is not to prefix executables 194 194 # Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile 195 - export KBUILD_BUILDHOST := $(SUBARCH) 196 195 ARCH ?= $(SUBARCH) 197 196 CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%) 198 197 ··· 619 620 endif 620 621 621 622 ifdef CONFIG_DEBUG_INFO_REDUCED 622 - KBUILD_CFLAGS += $(call cc-option, -femit-struct-debug-baseonly) 623 + KBUILD_CFLAGS += $(call cc-option, -femit-struct-debug-baseonly) \ 624 + $(call cc-option,-fno-var-tracking) 623 625 endif 624 626 625 627 ifdef CONFIG_FUNCTION_TRACER ··· 1398 1398 # Run depmod only if we have System.map and depmod is executable 1399 1399 quiet_cmd_depmod = DEPMOD $(KERNELRELEASE) 1400 1400 cmd_depmod = $(CONFIG_SHELL) $(srctree)/scripts/depmod.sh $(DEPMOD) \ 1401 - $(KERNELRELEASE) 1401 + $(KERNELRELEASE) "$(patsubst "%",%,$(CONFIG_SYMBOL_PREFIX))" 1402 1402 1403 1403 # Create temporary dir for module support files 1404 1404 # clean it up only when building all modules
+9 -49
include/linux/mod_devicetable.h
··· 33 33 __u32 model_id; 34 34 __u32 specifier_id; 35 35 __u32 version; 36 - kernel_ulong_t driver_data 37 - __attribute__((aligned(sizeof(kernel_ulong_t)))); 36 + kernel_ulong_t driver_data; 38 37 }; 39 38 40 39 ··· 147 148 __u16 group; 148 149 __u32 vendor; 149 150 __u32 product; 150 - kernel_ulong_t driver_data 151 - __attribute__((aligned(sizeof(kernel_ulong_t)))); 151 + kernel_ulong_t driver_data; 152 152 }; 153 153 154 154 /* s390 CCW devices */ ··· 171 173 struct ap_device_id { 172 174 __u16 match_flags; /* which fields to match against */ 173 175 __u8 dev_type; /* device type */ 174 - __u8 pad1; 175 - __u32 pad2; 176 176 kernel_ulong_t driver_info; 177 177 }; 178 178 ··· 180 184 struct css_device_id { 181 185 __u8 match_flags; 182 186 __u8 type; /* subchannel type */ 183 - __u16 pad2; 184 - __u32 pad3; 185 187 kernel_ulong_t driver_data; 186 188 }; 187 189 188 - #define ACPI_ID_LEN 16 /* only 9 bytes needed here, 16 bytes are used */ 189 - /* to workaround crosscompile issues */ 190 + #define ACPI_ID_LEN 9 190 191 191 192 struct acpi_device_id { 192 193 __u8 id[ACPI_ID_LEN]; ··· 224 231 char name[32]; 225 232 char type[32]; 226 233 char compatible[128]; 227 - #ifdef __KERNEL__ 228 234 const void *data; 229 - #else 230 - kernel_ulong_t data; 231 - #endif 232 235 }; 233 236 234 237 /* VIO */ ··· 249 260 /* for pseudo multi-function devices */ 250 261 __u8 device_no; 251 262 252 - __u32 prod_id_hash[4] 253 - __attribute__((aligned(sizeof(__u32)))); 263 + __u32 prod_id_hash[4]; 254 264 255 265 /* not matched against in kernelspace*/ 256 - #ifdef __KERNEL__ 257 266 const char * prod_id[4]; 258 - #else 259 - kernel_ulong_t prod_id[4] 260 - __attribute__((aligned(sizeof(kernel_ulong_t)))); 261 - #endif 262 267 263 268 /* not matched against */ 264 269 kernel_ulong_t driver_info; 265 - #ifdef __KERNEL__ 266 270 char * cisfile; 267 - #else 268 - kernel_ulong_t cisfile; 269 - #endif 270 271 }; 271 272 272 273 #define PCMCIA_DEV_ID_MATCH_MANF_ID 0x0001 ··· 352 373 __u8 class; /* Standard interface or SDIO_ANY_ID */ 353 374 __u16 vendor; /* Vendor or SDIO_ANY_ID */ 354 375 __u16 device; /* Device ID or SDIO_ANY_ID */ 355 - kernel_ulong_t driver_data /* Data private to the driver */ 356 - __attribute__((aligned(sizeof(kernel_ulong_t)))); 376 + kernel_ulong_t driver_data; /* Data private to the driver */ 357 377 }; 358 378 359 379 /* SSB core, see drivers/ssb/ */ ··· 398 420 */ 399 421 struct hv_vmbus_device_id { 400 422 __u8 guid[16]; 401 - kernel_ulong_t driver_data /* Data private to the driver */ 402 - __attribute__((aligned(sizeof(kernel_ulong_t)))); 423 + kernel_ulong_t driver_data; /* Data private to the driver */ 403 424 }; 404 425 405 426 /* rpmsg */ ··· 417 440 418 441 struct i2c_device_id { 419 442 char name[I2C_NAME_SIZE]; 420 - kernel_ulong_t driver_data /* Data private to the driver */ 421 - __attribute__((aligned(sizeof(kernel_ulong_t)))); 443 + kernel_ulong_t driver_data; /* Data private to the driver */ 422 444 }; 423 445 424 446 /* spi */ ··· 427 451 428 452 struct spi_device_id { 429 453 char name[SPI_NAME_SIZE]; 430 - kernel_ulong_t driver_data /* Data private to the driver */ 431 - __attribute__((aligned(sizeof(kernel_ulong_t)))); 454 + kernel_ulong_t driver_data; /* Data private to the driver */ 432 455 }; 433 456 434 457 /* dmi */ ··· 459 484 char substr[79]; 460 485 }; 461 486 462 - #ifndef __KERNEL__ 463 - struct dmi_system_id { 464 - kernel_ulong_t callback; 465 - kernel_ulong_t ident; 466 - struct dmi_strmatch matches[4]; 467 - kernel_ulong_t driver_data 468 - __attribute__((aligned(sizeof(kernel_ulong_t)))); 469 - }; 470 - #else 471 487 struct dmi_system_id { 472 488 int (*callback)(const struct dmi_system_id *); 473 489 const char *ident; ··· 472 506 * error: storage size of '__mod_dmi_device_table' isn't known 473 507 */ 474 508 #define dmi_device_id dmi_system_id 475 - #endif 476 509 477 510 #define DMI_MATCH(a, b) { a, b } 478 511 ··· 480 515 481 516 struct platform_device_id { 482 517 char name[PLATFORM_NAME_SIZE]; 483 - kernel_ulong_t driver_data 484 - __attribute__((aligned(sizeof(kernel_ulong_t)))); 518 + kernel_ulong_t driver_data; 485 519 }; 486 520 487 521 #define MDIO_MODULE_PREFIX "mdio:" ··· 536 572 struct amba_id { 537 573 unsigned int id; 538 574 unsigned int mask; 539 - #ifndef __KERNEL__ 540 - kernel_ulong_t data; 541 - #else 542 575 void *data; 543 - #endif 544 576 }; 545 577 546 578 /*
+12 -4
kernel/Makefile
··· 127 127 128 128 $(obj)/time.o: $(obj)/timeconst.h 129 129 130 - quiet_cmd_timeconst = TIMEC $@ 131 - cmd_timeconst = $(PERL) $< $(CONFIG_HZ) > $@ 130 + quiet_cmd_hzfile = HZFILE $@ 131 + cmd_hzfile = echo "hz=$(CONFIG_HZ)" > $@ 132 + 133 + targets += hz.bc 134 + $(obj)/hz.bc: $(objtree)/include/config/hz.h FORCE 135 + $(call if_changed,hzfile) 136 + 137 + quiet_cmd_bc = BC $@ 138 + cmd_bc = bc -q $(filter-out FORCE,$^) > $@ 139 + 132 140 targets += timeconst.h 133 - $(obj)/timeconst.h: $(src)/timeconst.pl FORCE 134 - $(call if_changed,timeconst) 141 + $(obj)/timeconst.h: $(obj)/hz.bc $(src)/timeconst.bc FORCE 142 + $(call if_changed,bc) 135 143 136 144 ifeq ($(CONFIG_MODULE_SIG),y) 137 145 #
+108
kernel/timeconst.bc
··· 1 + scale=0 2 + 3 + define gcd(a,b) { 4 + auto t; 5 + while (b) { 6 + t = b; 7 + b = a % b; 8 + a = t; 9 + } 10 + return a; 11 + } 12 + 13 + /* Division by reciprocal multiplication. */ 14 + define fmul(b,n,d) { 15 + return (2^b*n+d-1)/d; 16 + } 17 + 18 + /* Adjustment factor when a ceiling value is used. Use as: 19 + (imul * n) + (fmulxx * n + fadjxx) >> xx) */ 20 + define fadj(b,n,d) { 21 + auto v; 22 + d = d/gcd(n,d); 23 + v = 2^b*(d-1)/d; 24 + return v; 25 + } 26 + 27 + /* Compute the appropriate mul/adj values as well as a shift count, 28 + which brings the mul value into the range 2^b-1 <= x < 2^b. Such 29 + a shift value will be correct in the signed integer range and off 30 + by at most one in the upper half of the unsigned range. */ 31 + define fmuls(b,n,d) { 32 + auto s, m; 33 + for (s = 0; 1; s++) { 34 + m = fmul(s,n,d); 35 + if (m >= 2^(b-1)) 36 + return s; 37 + } 38 + return 0; 39 + } 40 + 41 + define timeconst(hz) { 42 + print "/* Automatically generated by kernel/timeconst.bc */\n" 43 + print "/* Time conversion constants for HZ == ", hz, " */\n" 44 + print "\n" 45 + 46 + print "#ifndef KERNEL_TIMECONST_H\n" 47 + print "#define KERNEL_TIMECONST_H\n\n" 48 + 49 + print "#include <linux/param.h>\n" 50 + print "#include <linux/types.h>\n\n" 51 + 52 + print "#if HZ != ", hz, "\n" 53 + print "#error \qkernel/timeconst.h has the wrong HZ value!\q\n" 54 + print "#endif\n\n" 55 + 56 + if (hz < 2) { 57 + print "#error Totally bogus HZ value!\n" 58 + } else { 59 + s=fmuls(32,1000,hz) 60 + obase=16 61 + print "#define HZ_TO_MSEC_MUL32\tU64_C(0x", fmul(s,1000,hz), ")\n" 62 + print "#define HZ_TO_MSEC_ADJ32\tU64_C(0x", fadj(s,1000,hz), ")\n" 63 + obase=10 64 + print "#define HZ_TO_MSEC_SHR32\t", s, "\n" 65 + 66 + s=fmuls(32,hz,1000) 67 + obase=16 68 + print "#define MSEC_TO_HZ_MUL32\tU64_C(0x", fmul(s,hz,1000), ")\n" 69 + print "#define MSEC_TO_HZ_ADJ32\tU64_C(0x", fadj(s,hz,1000), ")\n" 70 + obase=10 71 + print "#define MSEC_TO_HZ_SHR32\t", s, "\n" 72 + 73 + obase=10 74 + cd=gcd(hz,1000) 75 + print "#define HZ_TO_MSEC_NUM\t\t", 1000/cd, "\n" 76 + print "#define HZ_TO_MSEC_DEN\t\t", hz/cd, "\n" 77 + print "#define MSEC_TO_HZ_NUM\t\t", hz/cd, "\n" 78 + print "#define MSEC_TO_HZ_DEN\t\t", 1000/cd, "\n" 79 + print "\n" 80 + 81 + s=fmuls(32,1000000,hz) 82 + obase=16 83 + print "#define HZ_TO_USEC_MUL32\tU64_C(0x", fmul(s,1000000,hz), ")\n" 84 + print "#define HZ_TO_USEC_ADJ32\tU64_C(0x", fadj(s,1000000,hz), ")\n" 85 + obase=10 86 + print "#define HZ_TO_USEC_SHR32\t", s, "\n" 87 + 88 + s=fmuls(32,hz,1000000) 89 + obase=16 90 + print "#define USEC_TO_HZ_MUL32\tU64_C(0x", fmul(s,hz,1000000), ")\n" 91 + print "#define USEC_TO_HZ_ADJ32\tU64_C(0x", fadj(s,hz,1000000), ")\n" 92 + obase=10 93 + print "#define USEC_TO_HZ_SHR32\t", s, "\n" 94 + 95 + obase=10 96 + cd=gcd(hz,1000000) 97 + print "#define HZ_TO_USEC_NUM\t\t", 1000000/cd, "\n" 98 + print "#define HZ_TO_USEC_DEN\t\t", hz/cd, "\n" 99 + print "#define USEC_TO_HZ_NUM\t\t", hz/cd, "\n" 100 + print "#define USEC_TO_HZ_DEN\t\t", 1000000/cd, "\n" 101 + print "\n" 102 + 103 + print "#endif /* KERNEL_TIMECONST_H */\n" 104 + } 105 + halt 106 + } 107 + 108 + timeconst(hz)
-376
kernel/timeconst.pl
··· 1 - #!/usr/bin/perl 2 - # ----------------------------------------------------------------------- 3 - # 4 - # Copyright 2007-2008 rPath, Inc. - All Rights Reserved 5 - # 6 - # This file is part of the Linux kernel, and is made available under 7 - # the terms of the GNU General Public License version 2 or (at your 8 - # option) any later version; incorporated herein by reference. 9 - # 10 - # ----------------------------------------------------------------------- 11 - # 12 - 13 - # 14 - # Usage: timeconst.pl HZ > timeconst.h 15 - # 16 - 17 - # Precomputed values for systems without Math::BigInt 18 - # Generated by: 19 - # timeconst.pl --can 24 32 48 64 100 122 128 200 250 256 300 512 1000 1024 1200 20 - %canned_values = ( 21 - 24 => [ 22 - '0xa6aaaaab','0x2aaaaaa',26, 23 - 125,3, 24 - '0xc49ba5e4','0x1fbe76c8b4',37, 25 - 3,125, 26 - '0xa2c2aaab','0xaaaa',16, 27 - 125000,3, 28 - '0xc9539b89','0x7fffbce4217d',47, 29 - 3,125000, 30 - ], 32 => [ 31 - '0xfa000000','0x6000000',27, 32 - 125,4, 33 - '0x83126e98','0xfdf3b645a',36, 34 - 4,125, 35 - '0xf4240000','0x0',17, 36 - 31250,1, 37 - '0x8637bd06','0x3fff79c842fa',46, 38 - 1,31250, 39 - ], 48 => [ 40 - '0xa6aaaaab','0x6aaaaaa',27, 41 - 125,6, 42 - '0xc49ba5e4','0xfdf3b645a',36, 43 - 6,125, 44 - '0xa2c2aaab','0x15555',17, 45 - 62500,3, 46 - '0xc9539b89','0x3fffbce4217d',46, 47 - 3,62500, 48 - ], 64 => [ 49 - '0xfa000000','0xe000000',28, 50 - 125,8, 51 - '0x83126e98','0x7ef9db22d',35, 52 - 8,125, 53 - '0xf4240000','0x0',18, 54 - 15625,1, 55 - '0x8637bd06','0x1fff79c842fa',45, 56 - 1,15625, 57 - ], 100 => [ 58 - '0xa0000000','0x0',28, 59 - 10,1, 60 - '0xcccccccd','0x733333333',35, 61 - 1,10, 62 - '0x9c400000','0x0',18, 63 - 10000,1, 64 - '0xd1b71759','0x1fff2e48e8a7',45, 65 - 1,10000, 66 - ], 122 => [ 67 - '0x8325c53f','0xfbcda3a',28, 68 - 500,61, 69 - '0xf9db22d1','0x7fbe76c8b',35, 70 - 61,500, 71 - '0x8012e2a0','0x3ef36',18, 72 - 500000,61, 73 - '0xffda4053','0x1ffffbce4217',45, 74 - 61,500000, 75 - ], 128 => [ 76 - '0xfa000000','0x1e000000',29, 77 - 125,16, 78 - '0x83126e98','0x3f7ced916',34, 79 - 16,125, 80 - '0xf4240000','0x40000',19, 81 - 15625,2, 82 - '0x8637bd06','0xfffbce4217d',44, 83 - 2,15625, 84 - ], 200 => [ 85 - '0xa0000000','0x0',29, 86 - 5,1, 87 - '0xcccccccd','0x333333333',34, 88 - 1,5, 89 - '0x9c400000','0x0',19, 90 - 5000,1, 91 - '0xd1b71759','0xfff2e48e8a7',44, 92 - 1,5000, 93 - ], 250 => [ 94 - '0x80000000','0x0',29, 95 - 4,1, 96 - '0x80000000','0x180000000',33, 97 - 1,4, 98 - '0xfa000000','0x0',20, 99 - 4000,1, 100 - '0x83126e98','0x7ff7ced9168',43, 101 - 1,4000, 102 - ], 256 => [ 103 - '0xfa000000','0x3e000000',30, 104 - 125,32, 105 - '0x83126e98','0x1fbe76c8b',33, 106 - 32,125, 107 - '0xf4240000','0xc0000',20, 108 - 15625,4, 109 - '0x8637bd06','0x7ffde7210be',43, 110 - 4,15625, 111 - ], 300 => [ 112 - '0xd5555556','0x2aaaaaaa',30, 113 - 10,3, 114 - '0x9999999a','0x1cccccccc',33, 115 - 3,10, 116 - '0xd0555556','0xaaaaa',20, 117 - 10000,3, 118 - '0x9d495183','0x7ffcb923a29',43, 119 - 3,10000, 120 - ], 512 => [ 121 - '0xfa000000','0x7e000000',31, 122 - 125,64, 123 - '0x83126e98','0xfdf3b645',32, 124 - 64,125, 125 - '0xf4240000','0x1c0000',21, 126 - 15625,8, 127 - '0x8637bd06','0x3ffef39085f',42, 128 - 8,15625, 129 - ], 1000 => [ 130 - '0x80000000','0x0',31, 131 - 1,1, 132 - '0x80000000','0x0',31, 133 - 1,1, 134 - '0xfa000000','0x0',22, 135 - 1000,1, 136 - '0x83126e98','0x1ff7ced9168',41, 137 - 1,1000, 138 - ], 1024 => [ 139 - '0xfa000000','0xfe000000',32, 140 - 125,128, 141 - '0x83126e98','0x7ef9db22',31, 142 - 128,125, 143 - '0xf4240000','0x3c0000',22, 144 - 15625,16, 145 - '0x8637bd06','0x1fff79c842f',41, 146 - 16,15625, 147 - ], 1200 => [ 148 - '0xd5555556','0xd5555555',32, 149 - 5,6, 150 - '0x9999999a','0x66666666',31, 151 - 6,5, 152 - '0xd0555556','0x2aaaaa',22, 153 - 2500,3, 154 - '0x9d495183','0x1ffcb923a29',41, 155 - 3,2500, 156 - ] 157 - ); 158 - 159 - $has_bigint = eval 'use Math::BigInt qw(bgcd); 1;'; 160 - 161 - sub bint($) 162 - { 163 - my($x) = @_; 164 - return Math::BigInt->new($x); 165 - } 166 - 167 - # 168 - # Constants for division by reciprocal multiplication. 169 - # (bits, numerator, denominator) 170 - # 171 - sub fmul($$$) 172 - { 173 - my ($b,$n,$d) = @_; 174 - 175 - $n = bint($n); 176 - $d = bint($d); 177 - 178 - return scalar (($n << $b)+$d-bint(1))/$d; 179 - } 180 - 181 - sub fadj($$$) 182 - { 183 - my($b,$n,$d) = @_; 184 - 185 - $n = bint($n); 186 - $d = bint($d); 187 - 188 - $d = $d/bgcd($n, $d); 189 - return scalar (($d-bint(1)) << $b)/$d; 190 - } 191 - 192 - sub fmuls($$$) { 193 - my($b,$n,$d) = @_; 194 - my($s,$m); 195 - my($thres) = bint(1) << ($b-1); 196 - 197 - $n = bint($n); 198 - $d = bint($d); 199 - 200 - for ($s = 0; 1; $s++) { 201 - $m = fmul($s,$n,$d); 202 - return $s if ($m >= $thres); 203 - } 204 - return 0; 205 - } 206 - 207 - # Generate a hex value if the result fits in 64 bits; 208 - # otherwise skip. 209 - sub bignum_hex($) { 210 - my($x) = @_; 211 - my $s = $x->as_hex(); 212 - 213 - return (length($s) > 18) ? undef : $s; 214 - } 215 - 216 - # Provides mul, adj, and shr factors for a specific 217 - # (bit, time, hz) combination 218 - sub muladj($$$) { 219 - my($b, $t, $hz) = @_; 220 - my $s = fmuls($b, $t, $hz); 221 - my $m = fmul($s, $t, $hz); 222 - my $a = fadj($s, $t, $hz); 223 - return (bignum_hex($m), bignum_hex($a), $s); 224 - } 225 - 226 - # Provides numerator, denominator values 227 - sub numden($$) { 228 - my($n, $d) = @_; 229 - my $g = bgcd($n, $d); 230 - return ($n/$g, $d/$g); 231 - } 232 - 233 - # All values for a specific (time, hz) combo 234 - sub conversions($$) { 235 - my ($t, $hz) = @_; 236 - my @val = (); 237 - 238 - # HZ_TO_xx 239 - push(@val, muladj(32, $t, $hz)); 240 - push(@val, numden($t, $hz)); 241 - 242 - # xx_TO_HZ 243 - push(@val, muladj(32, $hz, $t)); 244 - push(@val, numden($hz, $t)); 245 - 246 - return @val; 247 - } 248 - 249 - sub compute_values($) { 250 - my($hz) = @_; 251 - my @val = (); 252 - my $s, $m, $a, $g; 253 - 254 - if (!$has_bigint) { 255 - die "$0: HZ == $hz not canned and ". 256 - "Math::BigInt not available\n"; 257 - } 258 - 259 - # MSEC conversions 260 - push(@val, conversions(1000, $hz)); 261 - 262 - # USEC conversions 263 - push(@val, conversions(1000000, $hz)); 264 - 265 - return @val; 266 - } 267 - 268 - sub outputval($$) 269 - { 270 - my($name, $val) = @_; 271 - my $csuf; 272 - 273 - if (defined($val)) { 274 - if ($name !~ /SHR/) { 275 - $val = "U64_C($val)"; 276 - } 277 - printf "#define %-23s %s\n", $name.$csuf, $val.$csuf; 278 - } 279 - } 280 - 281 - sub output($@) 282 - { 283 - my($hz, @val) = @_; 284 - my $pfx, $bit, $suf, $s, $m, $a; 285 - 286 - print "/* Automatically generated by kernel/timeconst.pl */\n"; 287 - print "/* Conversion constants for HZ == $hz */\n"; 288 - print "\n"; 289 - print "#ifndef KERNEL_TIMECONST_H\n"; 290 - print "#define KERNEL_TIMECONST_H\n"; 291 - print "\n"; 292 - 293 - print "#include <linux/param.h>\n"; 294 - print "#include <linux/types.h>\n"; 295 - 296 - print "\n"; 297 - print "#if HZ != $hz\n"; 298 - print "#error \"kernel/timeconst.h has the wrong HZ value!\"\n"; 299 - print "#endif\n"; 300 - print "\n"; 301 - 302 - foreach $pfx ('HZ_TO_MSEC','MSEC_TO_HZ', 303 - 'HZ_TO_USEC','USEC_TO_HZ') { 304 - foreach $bit (32) { 305 - foreach $suf ('MUL', 'ADJ', 'SHR') { 306 - outputval("${pfx}_$suf$bit", shift(@val)); 307 - } 308 - } 309 - foreach $suf ('NUM', 'DEN') { 310 - outputval("${pfx}_$suf", shift(@val)); 311 - } 312 - } 313 - 314 - print "\n"; 315 - print "#endif /* KERNEL_TIMECONST_H */\n"; 316 - } 317 - 318 - # Pretty-print Perl values 319 - sub perlvals(@) { 320 - my $v; 321 - my @l = (); 322 - 323 - foreach $v (@_) { 324 - if (!defined($v)) { 325 - push(@l, 'undef'); 326 - } elsif ($v =~ /^0x/) { 327 - push(@l, "\'".$v."\'"); 328 - } else { 329 - push(@l, $v.''); 330 - } 331 - } 332 - return join(',', @l); 333 - } 334 - 335 - ($hz) = @ARGV; 336 - 337 - # Use this to generate the %canned_values structure 338 - if ($hz eq '--can') { 339 - shift(@ARGV); 340 - @hzlist = sort {$a <=> $b} (@ARGV); 341 - 342 - print "# Precomputed values for systems without Math::BigInt\n"; 343 - print "# Generated by:\n"; 344 - print "# timeconst.pl --can ", join(' ', @hzlist), "\n"; 345 - print "\%canned_values = (\n"; 346 - my $pf = "\t"; 347 - foreach $hz (@hzlist) { 348 - my @values = compute_values($hz); 349 - print "$pf$hz => [\n"; 350 - while (scalar(@values)) { 351 - my $bit; 352 - foreach $bit (32) { 353 - my $m = shift(@values); 354 - my $a = shift(@values); 355 - my $s = shift(@values); 356 - print "\t\t", perlvals($m,$a,$s), ",\n"; 357 - } 358 - my $n = shift(@values); 359 - my $d = shift(@values); 360 - print "\t\t", perlvals($n,$d), ",\n"; 361 - } 362 - print "\t]"; 363 - $pf = ', '; 364 - } 365 - print "\n);\n"; 366 - } else { 367 - $hz += 0; # Force to number 368 - if ($hz < 1) { 369 - die "Usage: $0 HZ\n"; 370 - } 371 - 372 - $cv = $canned_values{$hz}; 373 - @val = defined($cv) ? @$cv : compute_values($hz); 374 - output($hz, @val); 375 - } 376 - exit 0;
+3 -3
scripts/Makefile.headersinst
··· 7 7 # 8 8 # ========================================================================== 9 9 10 - # called may set destination dir (when installing to asm/) 11 - _dst := $(or $(destination-y),$(dst),$(obj)) 12 - 13 10 # generated header directory 14 11 gen := $(if $(gen),$(gen),$(subst include/,include/generated/,$(obj))) 15 12 16 13 kbuild-file := $(srctree)/$(obj)/Kbuild 17 14 include $(kbuild-file) 15 + 16 + # called may set destination dir (when installing to asm/) 17 + _dst := $(or $(destination-y),$(dst),$(obj)) 18 18 19 19 old-kbuild-file := $(srctree)/$(subst uapi/,,$(obj))/Kbuild 20 20 ifneq ($(wildcard $(old-kbuild-file)),)
+1 -6
scripts/Makefile.modpost
··· 66 66 # Stop after building .o files if NOFINAL is set. Makes compile tests quicker 67 67 _modpost: $(if $(KBUILD_MODPOST_NOFINAL), $(modules:.ko:.o),$(modules)) 68 68 69 - ifneq ($(KBUILD_BUILDHOST),$(ARCH)) 70 - cross_build := 1 71 - endif 72 - 73 69 # Step 2), invoke modpost 74 70 # Includes step 3,4 75 71 modpost = scripts/mod/modpost \ ··· 76 80 $(if $(KBUILD_EXTRA_SYMBOLS), $(patsubst %, -e %,$(KBUILD_EXTRA_SYMBOLS))) \ 77 81 $(if $(KBUILD_EXTMOD),-o $(modulesymfile)) \ 78 82 $(if $(CONFIG_DEBUG_SECTION_MISMATCH),,-S) \ 79 - $(if $(KBUILD_EXTMOD)$(KBUILD_MODPOST_WARN),-w) \ 80 - $(if $(cross_build),-c) 83 + $(if $(KBUILD_EXTMOD)$(KBUILD_MODPOST_WARN),-w) 81 84 82 85 quiet_cmd_modpost = MODPOST $(words $(filter-out vmlinux FORCE, $^)) modules 83 86 cmd_modpost = $(modpost) -s
+23 -3
scripts/depmod.sh
··· 2 2 # 3 3 # A depmod wrapper used by the toplevel Makefile 4 4 5 - if test $# -ne 2; then 6 - echo "Usage: $0 /sbin/depmod <kernelrelease>" >&2 5 + if test $# -ne 3; then 6 + echo "Usage: $0 /sbin/depmod <kernelrelease> <symbolprefix>" >&2 7 7 exit 1 8 8 fi 9 9 DEPMOD=$1 10 10 KERNELRELEASE=$2 11 + SYMBOL_PREFIX=$3 11 12 12 13 if ! test -r System.map -a -x "$DEPMOD"; then 13 14 exit 0 14 15 fi 16 + 17 + # older versions of depmod don't support -P <symbol-prefix> 18 + # support was added in module-init-tools 3.13 19 + if test -n "$SYMBOL_PREFIX"; then 20 + release=$("$DEPMOD" --version) 21 + package=$(echo "$release" | cut -d' ' -f 1) 22 + if test "$package" = "module-init-tools"; then 23 + version=$(echo "$release" | cut -d' ' -f 2) 24 + later=$(printf '%s\n' "$version" "3.13" | sort -V | tail -n 1) 25 + if test "$later" != "$version"; then 26 + # module-init-tools < 3.13, drop the symbol prefix 27 + SYMBOL_PREFIX="" 28 + fi 29 + fi 30 + if test -n "$SYMBOL_PREFIX"; then 31 + SYMBOL_PREFIX="-P $SYMBOL_PREFIX" 32 + fi 33 + fi 34 + 15 35 # older versions of depmod require the version string to start with three 16 36 # numbers, so we cheat with a symlink here 17 37 depmod_hack_needed=true ··· 54 34 if test -n "$INSTALL_MOD_PATH"; then 55 35 set -- "$@" -b "$INSTALL_MOD_PATH" 56 36 fi 57 - "$DEPMOD" "$@" "$KERNELRELEASE" 37 + "$DEPMOD" "$@" "$KERNELRELEASE" $SYMBOL_PREFIX 58 38 ret=$? 59 39 60 40 if $depmod_hack_needed; then
+1
scripts/mod/.gitignore
··· 1 1 elfconfig.h 2 2 mk_elfconfig 3 3 modpost 4 + devicetable-offsets.h 4 5
+35
scripts/mod/Makefile
··· 3 3 4 4 modpost-objs := modpost.o file2alias.o sumversion.o 5 5 6 + devicetable-offsets-file := devicetable-offsets.h 7 + 8 + define sed-y 9 + "/^->/{s:->#\(.*\):/* \1 */:; \ 10 + s:^->\([^ ]*\) [\$$#]*\([-0-9]*\) \(.*\):#define \1 \2 /* \3 */:; \ 11 + s:^->\([^ ]*\) [\$$#]*\([^ ]*\) \(.*\):#define \1 \2 /* \3 */:; \ 12 + s:->::; p;}" 13 + endef 14 + 15 + quiet_cmd_offsets = GEN $@ 16 + define cmd_offsets 17 + (set -e; \ 18 + echo "#ifndef __DEVICEVTABLE_OFFSETS_H__"; \ 19 + echo "#define __DEVICEVTABLE_OFFSETS_H__"; \ 20 + echo "/*"; \ 21 + echo " * DO NOT MODIFY."; \ 22 + echo " *"; \ 23 + echo " * This file was generated by Kbuild"; \ 24 + echo " *"; \ 25 + echo " */"; \ 26 + echo ""; \ 27 + sed -ne $(sed-y) $<; \ 28 + echo ""; \ 29 + echo "#endif" ) > $@ 30 + endef 31 + 32 + # We use internal kbuild rules to avoid the "is up to date" message from make 33 + scripts/mod/devicetable-offsets.s: scripts/mod/devicetable-offsets.c FORCE 34 + $(Q)mkdir -p $(dir $@) 35 + $(call if_changed_dep,cc_s_c) 36 + 37 + $(obj)/$(devicetable-offsets-file): scripts/mod/devicetable-offsets.s 38 + $(call cmd,offsets) 39 + 6 40 # dependencies on generated files need to be listed explicitly 7 41 8 42 $(obj)/modpost.o $(obj)/file2alias.o $(obj)/sumversion.o: $(obj)/elfconfig.h 43 + $(obj)/file2alias.o: $(obj)/$(devicetable-offsets-file) 9 44 10 45 quiet_cmd_elfconfig = MKELF $@ 11 46 cmd_elfconfig = $(obj)/mk_elfconfig < $< > $@
+178
scripts/mod/devicetable-offsets.c
··· 1 + #include <linux/kbuild.h> 2 + #include <linux/mod_devicetable.h> 3 + 4 + #define DEVID(devid) DEFINE(SIZE_##devid, sizeof(struct devid)) 5 + #define DEVID_FIELD(devid, field) \ 6 + DEFINE(OFF_##devid##_##field, offsetof(struct devid, field)) 7 + 8 + int main(void) 9 + { 10 + DEVID(usb_device_id); 11 + DEVID_FIELD(usb_device_id, match_flags); 12 + DEVID_FIELD(usb_device_id, idVendor); 13 + DEVID_FIELD(usb_device_id, idProduct); 14 + DEVID_FIELD(usb_device_id, bcdDevice_lo); 15 + DEVID_FIELD(usb_device_id, bcdDevice_hi); 16 + DEVID_FIELD(usb_device_id, bDeviceClass); 17 + DEVID_FIELD(usb_device_id, bDeviceSubClass); 18 + DEVID_FIELD(usb_device_id, bDeviceProtocol); 19 + DEVID_FIELD(usb_device_id, bInterfaceClass); 20 + DEVID_FIELD(usb_device_id, bInterfaceSubClass); 21 + DEVID_FIELD(usb_device_id, bInterfaceProtocol); 22 + DEVID_FIELD(usb_device_id, bInterfaceNumber); 23 + 24 + DEVID(hid_device_id); 25 + DEVID_FIELD(hid_device_id, bus); 26 + DEVID_FIELD(hid_device_id, group); 27 + DEVID_FIELD(hid_device_id, vendor); 28 + DEVID_FIELD(hid_device_id, product); 29 + 30 + DEVID(ieee1394_device_id); 31 + DEVID_FIELD(ieee1394_device_id, match_flags); 32 + DEVID_FIELD(ieee1394_device_id, vendor_id); 33 + DEVID_FIELD(ieee1394_device_id, model_id); 34 + DEVID_FIELD(ieee1394_device_id, specifier_id); 35 + DEVID_FIELD(ieee1394_device_id, version); 36 + 37 + DEVID(pci_device_id); 38 + DEVID_FIELD(pci_device_id, vendor); 39 + DEVID_FIELD(pci_device_id, device); 40 + DEVID_FIELD(pci_device_id, subvendor); 41 + DEVID_FIELD(pci_device_id, subdevice); 42 + DEVID_FIELD(pci_device_id, class); 43 + DEVID_FIELD(pci_device_id, class_mask); 44 + 45 + DEVID(ccw_device_id); 46 + DEVID_FIELD(ccw_device_id, match_flags); 47 + DEVID_FIELD(ccw_device_id, cu_type); 48 + DEVID_FIELD(ccw_device_id, cu_model); 49 + DEVID_FIELD(ccw_device_id, dev_type); 50 + DEVID_FIELD(ccw_device_id, dev_model); 51 + 52 + DEVID(ap_device_id); 53 + DEVID_FIELD(ap_device_id, dev_type); 54 + 55 + DEVID(css_device_id); 56 + DEVID_FIELD(css_device_id, type); 57 + 58 + DEVID(serio_device_id); 59 + DEVID_FIELD(serio_device_id, type); 60 + DEVID_FIELD(serio_device_id, proto); 61 + DEVID_FIELD(serio_device_id, id); 62 + DEVID_FIELD(serio_device_id, extra); 63 + 64 + DEVID(acpi_device_id); 65 + DEVID_FIELD(acpi_device_id, id); 66 + 67 + DEVID(pnp_device_id); 68 + DEVID_FIELD(pnp_device_id, id); 69 + 70 + DEVID(pnp_card_device_id); 71 + DEVID_FIELD(pnp_card_device_id, devs); 72 + 73 + DEVID(pcmcia_device_id); 74 + DEVID_FIELD(pcmcia_device_id, match_flags); 75 + DEVID_FIELD(pcmcia_device_id, manf_id); 76 + DEVID_FIELD(pcmcia_device_id, card_id); 77 + DEVID_FIELD(pcmcia_device_id, func_id); 78 + DEVID_FIELD(pcmcia_device_id, function); 79 + DEVID_FIELD(pcmcia_device_id, device_no); 80 + DEVID_FIELD(pcmcia_device_id, prod_id_hash); 81 + 82 + DEVID(of_device_id); 83 + DEVID_FIELD(of_device_id, name); 84 + DEVID_FIELD(of_device_id, type); 85 + DEVID_FIELD(of_device_id, compatible); 86 + 87 + DEVID(vio_device_id); 88 + DEVID_FIELD(vio_device_id, type); 89 + DEVID_FIELD(vio_device_id, compat); 90 + 91 + DEVID(input_device_id); 92 + DEVID_FIELD(input_device_id, flags); 93 + DEVID_FIELD(input_device_id, bustype); 94 + DEVID_FIELD(input_device_id, vendor); 95 + DEVID_FIELD(input_device_id, product); 96 + DEVID_FIELD(input_device_id, version); 97 + DEVID_FIELD(input_device_id, evbit); 98 + DEVID_FIELD(input_device_id, keybit); 99 + DEVID_FIELD(input_device_id, relbit); 100 + DEVID_FIELD(input_device_id, absbit); 101 + DEVID_FIELD(input_device_id, mscbit); 102 + DEVID_FIELD(input_device_id, ledbit); 103 + DEVID_FIELD(input_device_id, sndbit); 104 + DEVID_FIELD(input_device_id, ffbit); 105 + DEVID_FIELD(input_device_id, swbit); 106 + 107 + DEVID(eisa_device_id); 108 + DEVID_FIELD(eisa_device_id, sig); 109 + 110 + DEVID(parisc_device_id); 111 + DEVID_FIELD(parisc_device_id, hw_type); 112 + DEVID_FIELD(parisc_device_id, hversion); 113 + DEVID_FIELD(parisc_device_id, hversion_rev); 114 + DEVID_FIELD(parisc_device_id, sversion); 115 + 116 + DEVID(sdio_device_id); 117 + DEVID_FIELD(sdio_device_id, class); 118 + DEVID_FIELD(sdio_device_id, vendor); 119 + DEVID_FIELD(sdio_device_id, device); 120 + 121 + DEVID(ssb_device_id); 122 + DEVID_FIELD(ssb_device_id, vendor); 123 + DEVID_FIELD(ssb_device_id, coreid); 124 + DEVID_FIELD(ssb_device_id, revision); 125 + 126 + DEVID(bcma_device_id); 127 + DEVID_FIELD(bcma_device_id, manuf); 128 + DEVID_FIELD(bcma_device_id, id); 129 + DEVID_FIELD(bcma_device_id, rev); 130 + DEVID_FIELD(bcma_device_id, class); 131 + 132 + DEVID(virtio_device_id); 133 + DEVID_FIELD(virtio_device_id, device); 134 + DEVID_FIELD(virtio_device_id, vendor); 135 + 136 + DEVID(hv_vmbus_device_id); 137 + DEVID_FIELD(hv_vmbus_device_id, guid); 138 + 139 + DEVID(i2c_device_id); 140 + DEVID_FIELD(i2c_device_id, name); 141 + 142 + DEVID(spi_device_id); 143 + DEVID_FIELD(spi_device_id, name); 144 + 145 + DEVID(dmi_system_id); 146 + DEVID_FIELD(dmi_system_id, matches); 147 + 148 + DEVID(platform_device_id); 149 + DEVID_FIELD(platform_device_id, name); 150 + 151 + DEVID(mdio_device_id); 152 + DEVID_FIELD(mdio_device_id, phy_id); 153 + DEVID_FIELD(mdio_device_id, phy_id_mask); 154 + 155 + DEVID(zorro_device_id); 156 + DEVID_FIELD(zorro_device_id, id); 157 + 158 + DEVID(isapnp_device_id); 159 + DEVID_FIELD(isapnp_device_id, vendor); 160 + DEVID_FIELD(isapnp_device_id, function); 161 + 162 + DEVID(ipack_device_id); 163 + DEVID_FIELD(ipack_device_id, format); 164 + DEVID_FIELD(ipack_device_id, vendor); 165 + DEVID_FIELD(ipack_device_id, device); 166 + 167 + DEVID(amba_id); 168 + DEVID_FIELD(amba_id, id); 169 + DEVID_FIELD(amba_id, mask); 170 + 171 + DEVID(x86_cpu_id); 172 + DEVID_FIELD(x86_cpu_id, feature); 173 + DEVID_FIELD(x86_cpu_id, family); 174 + DEVID_FIELD(x86_cpu_id, model); 175 + DEVID_FIELD(x86_cpu_id, vendor); 176 + 177 + return 0; 178 + }
+365 -307
scripts/mod/file2alias.c
··· 11 11 */ 12 12 13 13 #include "modpost.h" 14 + #include "devicetable-offsets.h" 14 15 15 16 /* We use the ELF typedefs for kernel_ulong_t but bite the bullet and 16 17 * use either stdint.h or inttypes.h for the rest. */ ··· 85 84 # define __used __attribute__((__used__)) 86 85 #endif 87 86 87 + /* Define a variable f that holds the value of field f of struct devid 88 + * based at address m. 89 + */ 90 + #define DEF_FIELD(m, devid, f) \ 91 + typeof(((struct devid *)0)->f) f = TO_NATIVE(*(typeof(f) *)((m) + OFF_##devid##_##f)) 92 + /* Define a variable f that holds the address of field f of struct devid 93 + * based at address m. Due to the way typeof works, for a field of type 94 + * T[N] the variable has type T(*)[N], _not_ T*. 95 + */ 96 + #define DEF_FIELD_ADDR(m, devid, f) \ 97 + typeof(((struct devid *)0)->f) *f = ((m) + OFF_##devid##_##f) 98 + 88 99 /* Add a table entry. We test function type matches while we're here. */ 89 100 #define ADD_TO_DEVTABLE(device_id, type, function) \ 90 101 static struct devtable __cat(devtable,__LINE__) = { \ 91 102 device_id + 0*sizeof((function)((const char *)NULL, \ 92 - (type *)NULL, \ 103 + (void *)NULL, \ 93 104 (char *)NULL)), \ 94 - sizeof(type), (function) }; \ 105 + SIZE_##type, (function) }; \ 95 106 static struct devtable *SECTION(__devtable) __used \ 96 107 __cat(devtable_ptr,__LINE__) = &__cat(devtable,__LINE__) 97 108 ··· 129 116 strcat(str + len, "*"); 130 117 } 131 118 132 - unsigned int cross_build = 0; 133 119 /** 134 120 * Check that sizeof(device_id type) are consistent with size of section 135 121 * in .o file. If in-consistent then userspace and kernel does not agree ··· 143 131 int i; 144 132 145 133 if (size % id_size || size < id_size) { 146 - if (cross_build != 0) 147 - return; 148 134 fatal("%s: sizeof(struct %s_device_id)=%lu is not a modulo " 149 135 "of the size of section __mod_%s_device_table=%lu.\n" 150 136 "Fix definition of struct %s_device_id " ··· 167 157 168 158 /* USB is special because the bcdDevice can be matched against a numeric range */ 169 159 /* Looks like "usb:vNpNdNdcNdscNdpNicNiscNipNinN" */ 170 - static void do_usb_entry(struct usb_device_id *id, 160 + static void do_usb_entry(void *symval, 171 161 unsigned int bcdDevice_initial, int bcdDevice_initial_digits, 172 162 unsigned char range_lo, unsigned char range_hi, 173 163 unsigned char max, struct module *mod) 174 164 { 175 165 char alias[500]; 166 + DEF_FIELD(symval, usb_device_id, match_flags); 167 + DEF_FIELD(symval, usb_device_id, idVendor); 168 + DEF_FIELD(symval, usb_device_id, idProduct); 169 + DEF_FIELD(symval, usb_device_id, bcdDevice_lo); 170 + DEF_FIELD(symval, usb_device_id, bDeviceClass); 171 + DEF_FIELD(symval, usb_device_id, bDeviceSubClass); 172 + DEF_FIELD(symval, usb_device_id, bDeviceProtocol); 173 + DEF_FIELD(symval, usb_device_id, bInterfaceClass); 174 + DEF_FIELD(symval, usb_device_id, bInterfaceSubClass); 175 + DEF_FIELD(symval, usb_device_id, bInterfaceProtocol); 176 + DEF_FIELD(symval, usb_device_id, bInterfaceNumber); 177 + 176 178 strcpy(alias, "usb:"); 177 - ADD(alias, "v", id->match_flags&USB_DEVICE_ID_MATCH_VENDOR, 178 - id->idVendor); 179 - ADD(alias, "p", id->match_flags&USB_DEVICE_ID_MATCH_PRODUCT, 180 - id->idProduct); 179 + ADD(alias, "v", match_flags&USB_DEVICE_ID_MATCH_VENDOR, 180 + idVendor); 181 + ADD(alias, "p", match_flags&USB_DEVICE_ID_MATCH_PRODUCT, 182 + idProduct); 181 183 182 184 strcat(alias, "d"); 183 185 if (bcdDevice_initial_digits) ··· 212 190 range_lo); 213 191 } 214 192 } 215 - if (bcdDevice_initial_digits < (sizeof(id->bcdDevice_lo) * 2 - 1)) 193 + if (bcdDevice_initial_digits < (sizeof(bcdDevice_lo) * 2 - 1)) 216 194 strcat(alias, "*"); 217 195 218 - ADD(alias, "dc", id->match_flags&USB_DEVICE_ID_MATCH_DEV_CLASS, 219 - id->bDeviceClass); 220 - ADD(alias, "dsc", 221 - id->match_flags&USB_DEVICE_ID_MATCH_DEV_SUBCLASS, 222 - id->bDeviceSubClass); 223 - ADD(alias, "dp", 224 - id->match_flags&USB_DEVICE_ID_MATCH_DEV_PROTOCOL, 225 - id->bDeviceProtocol); 226 - ADD(alias, "ic", 227 - id->match_flags&USB_DEVICE_ID_MATCH_INT_CLASS, 228 - id->bInterfaceClass); 229 - ADD(alias, "isc", 230 - id->match_flags&USB_DEVICE_ID_MATCH_INT_SUBCLASS, 231 - id->bInterfaceSubClass); 232 - ADD(alias, "ip", 233 - id->match_flags&USB_DEVICE_ID_MATCH_INT_PROTOCOL, 234 - id->bInterfaceProtocol); 235 - ADD(alias, "in", 236 - id->match_flags&USB_DEVICE_ID_MATCH_INT_NUMBER, 237 - id->bInterfaceNumber); 196 + ADD(alias, "dc", match_flags&USB_DEVICE_ID_MATCH_DEV_CLASS, 197 + bDeviceClass); 198 + ADD(alias, "dsc", match_flags&USB_DEVICE_ID_MATCH_DEV_SUBCLASS, 199 + bDeviceSubClass); 200 + ADD(alias, "dp", match_flags&USB_DEVICE_ID_MATCH_DEV_PROTOCOL, 201 + bDeviceProtocol); 202 + ADD(alias, "ic", match_flags&USB_DEVICE_ID_MATCH_INT_CLASS, 203 + bInterfaceClass); 204 + ADD(alias, "isc", match_flags&USB_DEVICE_ID_MATCH_INT_SUBCLASS, 205 + bInterfaceSubClass); 206 + ADD(alias, "ip", match_flags&USB_DEVICE_ID_MATCH_INT_PROTOCOL, 207 + bInterfaceProtocol); 208 + ADD(alias, "in", match_flags&USB_DEVICE_ID_MATCH_INT_NUMBER, 209 + bInterfaceNumber); 238 210 239 211 add_wildcard(alias); 240 212 buf_printf(&mod->dev_table_buf, ··· 274 258 return init; 275 259 } 276 260 277 - static void do_usb_entry_multi(struct usb_device_id *id, struct module *mod) 261 + static void do_usb_entry_multi(void *symval, struct module *mod) 278 262 { 279 263 unsigned int devlo, devhi; 280 264 unsigned char chi, clo, max; 281 265 int ndigits; 282 266 283 - id->match_flags = TO_NATIVE(id->match_flags); 284 - id->idVendor = TO_NATIVE(id->idVendor); 285 - id->idProduct = TO_NATIVE(id->idProduct); 267 + DEF_FIELD(symval, usb_device_id, match_flags); 268 + DEF_FIELD(symval, usb_device_id, idVendor); 269 + DEF_FIELD(symval, usb_device_id, idProduct); 270 + DEF_FIELD(symval, usb_device_id, bcdDevice_lo); 271 + DEF_FIELD(symval, usb_device_id, bcdDevice_hi); 272 + DEF_FIELD(symval, usb_device_id, bDeviceClass); 273 + DEF_FIELD(symval, usb_device_id, bInterfaceClass); 286 274 287 - devlo = id->match_flags & USB_DEVICE_ID_MATCH_DEV_LO ? 288 - TO_NATIVE(id->bcdDevice_lo) : 0x0U; 289 - devhi = id->match_flags & USB_DEVICE_ID_MATCH_DEV_HI ? 290 - TO_NATIVE(id->bcdDevice_hi) : ~0x0U; 275 + devlo = match_flags & USB_DEVICE_ID_MATCH_DEV_LO ? 276 + bcdDevice_lo : 0x0U; 277 + devhi = match_flags & USB_DEVICE_ID_MATCH_DEV_HI ? 278 + bcdDevice_hi : ~0x0U; 291 279 292 280 /* Figure out if this entry is in bcd or hex format */ 293 281 max = 0x9; /* Default to decimal format */ 294 - for (ndigits = 0 ; ndigits < sizeof(id->bcdDevice_lo) * 2 ; ndigits++) { 282 + for (ndigits = 0 ; ndigits < sizeof(bcdDevice_lo) * 2 ; ndigits++) { 295 283 clo = (devlo >> (ndigits << 2)) & 0xf; 296 284 chi = ((devhi > 0x9999 ? 0x9999 : devhi) >> (ndigits << 2)) & 0xf; 297 285 if (clo > max || chi > max) { ··· 308 288 * Some modules (visor) have empty slots as placeholder for 309 289 * run-time specification that results in catch-all alias 310 290 */ 311 - if (!(id->idVendor | id->idProduct | id->bDeviceClass | id->bInterfaceClass)) 291 + if (!(idVendor | idProduct | bDeviceClass | bInterfaceClass)) 312 292 return; 313 293 314 294 /* Convert numeric bcdDevice range into fnmatch-able pattern(s) */ 315 - for (ndigits = sizeof(id->bcdDevice_lo) * 2 - 1; devlo <= devhi; ndigits--) { 295 + for (ndigits = sizeof(bcdDevice_lo) * 2 - 1; devlo <= devhi; ndigits--) { 316 296 clo = devlo & 0xf; 317 297 chi = devhi & 0xf; 318 298 if (chi > max) /* If we are in bcd mode, truncate if necessary */ ··· 321 301 devhi >>= 4; 322 302 323 303 if (devlo == devhi || !ndigits) { 324 - do_usb_entry(id, devlo, ndigits, clo, chi, max, mod); 304 + do_usb_entry(symval, devlo, ndigits, clo, chi, max, mod); 325 305 break; 326 306 } 327 307 328 308 if (clo > 0x0) 329 - do_usb_entry(id, 309 + do_usb_entry(symval, 330 310 incbcd(&devlo, 1, max, 331 - sizeof(id->bcdDevice_lo) * 2), 311 + sizeof(bcdDevice_lo) * 2), 332 312 ndigits, clo, max, max, mod); 333 313 334 314 if (chi < max) 335 - do_usb_entry(id, 315 + do_usb_entry(symval, 336 316 incbcd(&devhi, -1, max, 337 - sizeof(id->bcdDevice_lo) * 2), 317 + sizeof(bcdDevice_lo) * 2), 338 318 ndigits, 0x0, chi, max, mod); 339 319 } 340 320 } ··· 343 323 struct module *mod) 344 324 { 345 325 unsigned int i; 346 - const unsigned long id_size = sizeof(struct usb_device_id); 326 + const unsigned long id_size = SIZE_usb_device_id; 347 327 348 328 device_id_check(mod->name, "usb", size, id_size, symval); 349 329 ··· 356 336 357 337 /* Looks like: hid:bNvNpN */ 358 338 static int do_hid_entry(const char *filename, 359 - struct hid_device_id *id, char *alias) 339 + void *symval, char *alias) 360 340 { 361 - id->bus = TO_NATIVE(id->bus); 362 - id->group = TO_NATIVE(id->group); 363 - id->vendor = TO_NATIVE(id->vendor); 364 - id->product = TO_NATIVE(id->product); 341 + DEF_FIELD(symval, hid_device_id, bus); 342 + DEF_FIELD(symval, hid_device_id, group); 343 + DEF_FIELD(symval, hid_device_id, vendor); 344 + DEF_FIELD(symval, hid_device_id, product); 365 345 366 346 sprintf(alias, "hid:"); 367 - ADD(alias, "b", id->bus != HID_BUS_ANY, id->bus); 368 - ADD(alias, "g", id->group != HID_GROUP_ANY, id->group); 369 - ADD(alias, "v", id->vendor != HID_ANY_ID, id->vendor); 370 - ADD(alias, "p", id->product != HID_ANY_ID, id->product); 347 + ADD(alias, "b", bus != HID_BUS_ANY, bus); 348 + ADD(alias, "g", group != HID_GROUP_ANY, group); 349 + ADD(alias, "v", vendor != HID_ANY_ID, vendor); 350 + ADD(alias, "p", product != HID_ANY_ID, product); 371 351 372 352 return 1; 373 353 } 374 - ADD_TO_DEVTABLE("hid", struct hid_device_id, do_hid_entry); 354 + ADD_TO_DEVTABLE("hid", hid_device_id, do_hid_entry); 375 355 376 356 /* Looks like: ieee1394:venNmoNspNverN */ 377 357 static int do_ieee1394_entry(const char *filename, 378 - struct ieee1394_device_id *id, char *alias) 358 + void *symval, char *alias) 379 359 { 380 - id->match_flags = TO_NATIVE(id->match_flags); 381 - id->vendor_id = TO_NATIVE(id->vendor_id); 382 - id->model_id = TO_NATIVE(id->model_id); 383 - id->specifier_id = TO_NATIVE(id->specifier_id); 384 - id->version = TO_NATIVE(id->version); 360 + DEF_FIELD(symval, ieee1394_device_id, match_flags); 361 + DEF_FIELD(symval, ieee1394_device_id, vendor_id); 362 + DEF_FIELD(symval, ieee1394_device_id, model_id); 363 + DEF_FIELD(symval, ieee1394_device_id, specifier_id); 364 + DEF_FIELD(symval, ieee1394_device_id, version); 385 365 386 366 strcpy(alias, "ieee1394:"); 387 - ADD(alias, "ven", id->match_flags & IEEE1394_MATCH_VENDOR_ID, 388 - id->vendor_id); 389 - ADD(alias, "mo", id->match_flags & IEEE1394_MATCH_MODEL_ID, 390 - id->model_id); 391 - ADD(alias, "sp", id->match_flags & IEEE1394_MATCH_SPECIFIER_ID, 392 - id->specifier_id); 393 - ADD(alias, "ver", id->match_flags & IEEE1394_MATCH_VERSION, 394 - id->version); 367 + ADD(alias, "ven", match_flags & IEEE1394_MATCH_VENDOR_ID, 368 + vendor_id); 369 + ADD(alias, "mo", match_flags & IEEE1394_MATCH_MODEL_ID, 370 + model_id); 371 + ADD(alias, "sp", match_flags & IEEE1394_MATCH_SPECIFIER_ID, 372 + specifier_id); 373 + ADD(alias, "ver", match_flags & IEEE1394_MATCH_VERSION, 374 + version); 395 375 396 376 add_wildcard(alias); 397 377 return 1; 398 378 } 399 - ADD_TO_DEVTABLE("ieee1394", struct ieee1394_device_id, do_ieee1394_entry); 379 + ADD_TO_DEVTABLE("ieee1394", ieee1394_device_id, do_ieee1394_entry); 400 380 401 381 /* Looks like: pci:vNdNsvNsdNbcNscNiN. */ 402 382 static int do_pci_entry(const char *filename, 403 - struct pci_device_id *id, char *alias) 383 + void *symval, char *alias) 404 384 { 405 385 /* Class field can be divided into these three. */ 406 386 unsigned char baseclass, subclass, interface, 407 387 baseclass_mask, subclass_mask, interface_mask; 408 388 409 - id->vendor = TO_NATIVE(id->vendor); 410 - id->device = TO_NATIVE(id->device); 411 - id->subvendor = TO_NATIVE(id->subvendor); 412 - id->subdevice = TO_NATIVE(id->subdevice); 413 - id->class = TO_NATIVE(id->class); 414 - id->class_mask = TO_NATIVE(id->class_mask); 389 + DEF_FIELD(symval, pci_device_id, vendor); 390 + DEF_FIELD(symval, pci_device_id, device); 391 + DEF_FIELD(symval, pci_device_id, subvendor); 392 + DEF_FIELD(symval, pci_device_id, subdevice); 393 + DEF_FIELD(symval, pci_device_id, class); 394 + DEF_FIELD(symval, pci_device_id, class_mask); 415 395 416 396 strcpy(alias, "pci:"); 417 - ADD(alias, "v", id->vendor != PCI_ANY_ID, id->vendor); 418 - ADD(alias, "d", id->device != PCI_ANY_ID, id->device); 419 - ADD(alias, "sv", id->subvendor != PCI_ANY_ID, id->subvendor); 420 - ADD(alias, "sd", id->subdevice != PCI_ANY_ID, id->subdevice); 397 + ADD(alias, "v", vendor != PCI_ANY_ID, vendor); 398 + ADD(alias, "d", device != PCI_ANY_ID, device); 399 + ADD(alias, "sv", subvendor != PCI_ANY_ID, subvendor); 400 + ADD(alias, "sd", subdevice != PCI_ANY_ID, subdevice); 421 401 422 - baseclass = (id->class) >> 16; 423 - baseclass_mask = (id->class_mask) >> 16; 424 - subclass = (id->class) >> 8; 425 - subclass_mask = (id->class_mask) >> 8; 426 - interface = id->class; 427 - interface_mask = id->class_mask; 402 + baseclass = (class) >> 16; 403 + baseclass_mask = (class_mask) >> 16; 404 + subclass = (class) >> 8; 405 + subclass_mask = (class_mask) >> 8; 406 + interface = class; 407 + interface_mask = class_mask; 428 408 429 409 if ((baseclass_mask != 0 && baseclass_mask != 0xFF) 430 410 || (subclass_mask != 0 && subclass_mask != 0xFF) 431 411 || (interface_mask != 0 && interface_mask != 0xFF)) { 432 412 warn("Can't handle masks in %s:%04X\n", 433 - filename, id->class_mask); 413 + filename, class_mask); 434 414 return 0; 435 415 } 436 416 ··· 440 420 add_wildcard(alias); 441 421 return 1; 442 422 } 443 - ADD_TO_DEVTABLE("pci", struct pci_device_id, do_pci_entry); 423 + ADD_TO_DEVTABLE("pci", pci_device_id, do_pci_entry); 444 424 445 425 /* looks like: "ccw:tNmNdtNdmN" */ 446 426 static int do_ccw_entry(const char *filename, 447 - struct ccw_device_id *id, char *alias) 427 + void *symval, char *alias) 448 428 { 449 - id->match_flags = TO_NATIVE(id->match_flags); 450 - id->cu_type = TO_NATIVE(id->cu_type); 451 - id->cu_model = TO_NATIVE(id->cu_model); 452 - id->dev_type = TO_NATIVE(id->dev_type); 453 - id->dev_model = TO_NATIVE(id->dev_model); 429 + DEF_FIELD(symval, ccw_device_id, match_flags); 430 + DEF_FIELD(symval, ccw_device_id, cu_type); 431 + DEF_FIELD(symval, ccw_device_id, cu_model); 432 + DEF_FIELD(symval, ccw_device_id, dev_type); 433 + DEF_FIELD(symval, ccw_device_id, dev_model); 454 434 455 435 strcpy(alias, "ccw:"); 456 - ADD(alias, "t", id->match_flags&CCW_DEVICE_ID_MATCH_CU_TYPE, 457 - id->cu_type); 458 - ADD(alias, "m", id->match_flags&CCW_DEVICE_ID_MATCH_CU_MODEL, 459 - id->cu_model); 460 - ADD(alias, "dt", id->match_flags&CCW_DEVICE_ID_MATCH_DEVICE_TYPE, 461 - id->dev_type); 462 - ADD(alias, "dm", id->match_flags&CCW_DEVICE_ID_MATCH_DEVICE_MODEL, 463 - id->dev_model); 436 + ADD(alias, "t", match_flags&CCW_DEVICE_ID_MATCH_CU_TYPE, 437 + cu_type); 438 + ADD(alias, "m", match_flags&CCW_DEVICE_ID_MATCH_CU_MODEL, 439 + cu_model); 440 + ADD(alias, "dt", match_flags&CCW_DEVICE_ID_MATCH_DEVICE_TYPE, 441 + dev_type); 442 + ADD(alias, "dm", match_flags&CCW_DEVICE_ID_MATCH_DEVICE_MODEL, 443 + dev_model); 464 444 add_wildcard(alias); 465 445 return 1; 466 446 } 467 - ADD_TO_DEVTABLE("ccw", struct ccw_device_id, do_ccw_entry); 447 + ADD_TO_DEVTABLE("ccw", ccw_device_id, do_ccw_entry); 468 448 469 449 /* looks like: "ap:tN" */ 470 450 static int do_ap_entry(const char *filename, 471 - struct ap_device_id *id, char *alias) 451 + void *symval, char *alias) 472 452 { 473 - sprintf(alias, "ap:t%02X*", id->dev_type); 453 + DEF_FIELD(symval, ap_device_id, dev_type); 454 + 455 + sprintf(alias, "ap:t%02X*", dev_type); 474 456 return 1; 475 457 } 476 - ADD_TO_DEVTABLE("ap", struct ap_device_id, do_ap_entry); 458 + ADD_TO_DEVTABLE("ap", ap_device_id, do_ap_entry); 477 459 478 460 /* looks like: "css:tN" */ 479 461 static int do_css_entry(const char *filename, 480 - struct css_device_id *id, char *alias) 462 + void *symval, char *alias) 481 463 { 482 - sprintf(alias, "css:t%01X", id->type); 464 + DEF_FIELD(symval, css_device_id, type); 465 + 466 + sprintf(alias, "css:t%01X", type); 483 467 return 1; 484 468 } 485 - ADD_TO_DEVTABLE("css", struct css_device_id, do_css_entry); 469 + ADD_TO_DEVTABLE("css", css_device_id, do_css_entry); 486 470 487 471 /* Looks like: "serio:tyNprNidNexN" */ 488 472 static int do_serio_entry(const char *filename, 489 - struct serio_device_id *id, char *alias) 473 + void *symval, char *alias) 490 474 { 491 - id->type = TO_NATIVE(id->type); 492 - id->proto = TO_NATIVE(id->proto); 493 - id->id = TO_NATIVE(id->id); 494 - id->extra = TO_NATIVE(id->extra); 475 + DEF_FIELD(symval, serio_device_id, type); 476 + DEF_FIELD(symval, serio_device_id, proto); 477 + DEF_FIELD(symval, serio_device_id, id); 478 + DEF_FIELD(symval, serio_device_id, extra); 495 479 496 480 strcpy(alias, "serio:"); 497 - ADD(alias, "ty", id->type != SERIO_ANY, id->type); 498 - ADD(alias, "pr", id->proto != SERIO_ANY, id->proto); 499 - ADD(alias, "id", id->id != SERIO_ANY, id->id); 500 - ADD(alias, "ex", id->extra != SERIO_ANY, id->extra); 481 + ADD(alias, "ty", type != SERIO_ANY, type); 482 + ADD(alias, "pr", proto != SERIO_ANY, proto); 483 + ADD(alias, "id", id != SERIO_ANY, id); 484 + ADD(alias, "ex", extra != SERIO_ANY, extra); 501 485 502 486 add_wildcard(alias); 503 487 return 1; 504 488 } 505 - ADD_TO_DEVTABLE("serio", struct serio_device_id, do_serio_entry); 489 + ADD_TO_DEVTABLE("serio", serio_device_id, do_serio_entry); 506 490 507 491 /* looks like: "acpi:ACPI0003 or acpi:PNP0C0B" or "acpi:LNXVIDEO" */ 508 492 static int do_acpi_entry(const char *filename, 509 - struct acpi_device_id *id, char *alias) 493 + void *symval, char *alias) 510 494 { 511 - sprintf(alias, "acpi*:%s:*", id->id); 495 + DEF_FIELD_ADDR(symval, acpi_device_id, id); 496 + sprintf(alias, "acpi*:%s:*", *id); 512 497 return 1; 513 498 } 514 - ADD_TO_DEVTABLE("acpi", struct acpi_device_id, do_acpi_entry); 499 + ADD_TO_DEVTABLE("acpi", acpi_device_id, do_acpi_entry); 515 500 516 501 /* looks like: "pnp:dD" */ 517 502 static void do_pnp_device_entry(void *symval, unsigned long size, 518 503 struct module *mod) 519 504 { 520 - const unsigned long id_size = sizeof(struct pnp_device_id); 505 + const unsigned long id_size = SIZE_pnp_device_id; 521 506 const unsigned int count = (size / id_size)-1; 522 - const struct pnp_device_id *devs = symval; 523 507 unsigned int i; 524 508 525 509 device_id_check(mod->name, "pnp", size, id_size, symval); 526 510 527 511 for (i = 0; i < count; i++) { 528 - const char *id = (char *)devs[i].id; 529 - char acpi_id[sizeof(devs[0].id)]; 512 + DEF_FIELD_ADDR(symval + i*id_size, pnp_device_id, id); 513 + char acpi_id[sizeof(*id)]; 530 514 int j; 531 515 532 516 buf_printf(&mod->dev_table_buf, 533 - "MODULE_ALIAS(\"pnp:d%s*\");\n", id); 517 + "MODULE_ALIAS(\"pnp:d%s*\");\n", *id); 534 518 535 519 /* fix broken pnp bus lowercasing */ 536 520 for (j = 0; j < sizeof(acpi_id); j++) 537 - acpi_id[j] = toupper(id[j]); 521 + acpi_id[j] = toupper((*id)[j]); 538 522 buf_printf(&mod->dev_table_buf, 539 523 "MODULE_ALIAS(\"acpi*:%s:*\");\n", acpi_id); 540 524 } ··· 548 524 static void do_pnp_card_entries(void *symval, unsigned long size, 549 525 struct module *mod) 550 526 { 551 - const unsigned long id_size = sizeof(struct pnp_card_device_id); 527 + const unsigned long id_size = SIZE_pnp_card_device_id; 552 528 const unsigned int count = (size / id_size)-1; 553 - const struct pnp_card_device_id *cards = symval; 554 529 unsigned int i; 555 530 556 531 device_id_check(mod->name, "pnp", size, id_size, symval); 557 532 558 533 for (i = 0; i < count; i++) { 559 534 unsigned int j; 560 - const struct pnp_card_device_id *card = &cards[i]; 535 + DEF_FIELD_ADDR(symval + i*id_size, pnp_card_device_id, devs); 561 536 562 537 for (j = 0; j < PNP_MAX_DEVICES; j++) { 563 - const char *id = (char *)card->devs[j].id; 538 + const char *id = (char *)(*devs)[j].id; 564 539 int i2, j2; 565 540 int dup = 0; 566 541 ··· 568 545 569 546 /* find duplicate, already added value */ 570 547 for (i2 = 0; i2 < i && !dup; i2++) { 571 - const struct pnp_card_device_id *card2 = &cards[i2]; 548 + DEF_FIELD_ADDR(symval + i2*id_size, pnp_card_device_id, devs); 572 549 573 550 for (j2 = 0; j2 < PNP_MAX_DEVICES; j2++) { 574 - const char *id2 = (char *)card2->devs[j2].id; 551 + const char *id2 = (char *)(*devs)[j2].id; 575 552 576 553 if (!id2[0]) 577 554 break; ··· 585 562 586 563 /* add an individual alias for every device entry */ 587 564 if (!dup) { 588 - char acpi_id[sizeof(card->devs[0].id)]; 565 + char acpi_id[PNP_ID_LEN]; 589 566 int k; 590 567 591 568 buf_printf(&mod->dev_table_buf, ··· 603 580 604 581 /* Looks like: pcmcia:mNcNfNfnNpfnNvaNvbNvcNvdN. */ 605 582 static int do_pcmcia_entry(const char *filename, 606 - struct pcmcia_device_id *id, char *alias) 583 + void *symval, char *alias) 607 584 { 608 585 unsigned int i; 609 - 610 - id->match_flags = TO_NATIVE(id->match_flags); 611 - id->manf_id = TO_NATIVE(id->manf_id); 612 - id->card_id = TO_NATIVE(id->card_id); 613 - id->func_id = TO_NATIVE(id->func_id); 614 - id->function = TO_NATIVE(id->function); 615 - id->device_no = TO_NATIVE(id->device_no); 586 + DEF_FIELD(symval, pcmcia_device_id, match_flags); 587 + DEF_FIELD(symval, pcmcia_device_id, manf_id); 588 + DEF_FIELD(symval, pcmcia_device_id, card_id); 589 + DEF_FIELD(symval, pcmcia_device_id, func_id); 590 + DEF_FIELD(symval, pcmcia_device_id, function); 591 + DEF_FIELD(symval, pcmcia_device_id, device_no); 592 + DEF_FIELD_ADDR(symval, pcmcia_device_id, prod_id_hash); 616 593 617 594 for (i=0; i<4; i++) { 618 - id->prod_id_hash[i] = TO_NATIVE(id->prod_id_hash[i]); 619 - } 595 + (*prod_id_hash)[i] = TO_NATIVE((*prod_id_hash)[i]); 596 + } 620 597 621 - strcpy(alias, "pcmcia:"); 622 - ADD(alias, "m", id->match_flags & PCMCIA_DEV_ID_MATCH_MANF_ID, 623 - id->manf_id); 624 - ADD(alias, "c", id->match_flags & PCMCIA_DEV_ID_MATCH_CARD_ID, 625 - id->card_id); 626 - ADD(alias, "f", id->match_flags & PCMCIA_DEV_ID_MATCH_FUNC_ID, 627 - id->func_id); 628 - ADD(alias, "fn", id->match_flags & PCMCIA_DEV_ID_MATCH_FUNCTION, 629 - id->function); 630 - ADD(alias, "pfn", id->match_flags & PCMCIA_DEV_ID_MATCH_DEVICE_NO, 631 - id->device_no); 632 - ADD(alias, "pa", id->match_flags & PCMCIA_DEV_ID_MATCH_PROD_ID1, id->prod_id_hash[0]); 633 - ADD(alias, "pb", id->match_flags & PCMCIA_DEV_ID_MATCH_PROD_ID2, id->prod_id_hash[1]); 634 - ADD(alias, "pc", id->match_flags & PCMCIA_DEV_ID_MATCH_PROD_ID3, id->prod_id_hash[2]); 635 - ADD(alias, "pd", id->match_flags & PCMCIA_DEV_ID_MATCH_PROD_ID4, id->prod_id_hash[3]); 598 + strcpy(alias, "pcmcia:"); 599 + ADD(alias, "m", match_flags & PCMCIA_DEV_ID_MATCH_MANF_ID, 600 + manf_id); 601 + ADD(alias, "c", match_flags & PCMCIA_DEV_ID_MATCH_CARD_ID, 602 + card_id); 603 + ADD(alias, "f", match_flags & PCMCIA_DEV_ID_MATCH_FUNC_ID, 604 + func_id); 605 + ADD(alias, "fn", match_flags & PCMCIA_DEV_ID_MATCH_FUNCTION, 606 + function); 607 + ADD(alias, "pfn", match_flags & PCMCIA_DEV_ID_MATCH_DEVICE_NO, 608 + device_no); 609 + ADD(alias, "pa", match_flags & PCMCIA_DEV_ID_MATCH_PROD_ID1, (*prod_id_hash)[0]); 610 + ADD(alias, "pb", match_flags & PCMCIA_DEV_ID_MATCH_PROD_ID2, (*prod_id_hash)[1]); 611 + ADD(alias, "pc", match_flags & PCMCIA_DEV_ID_MATCH_PROD_ID3, (*prod_id_hash)[2]); 612 + ADD(alias, "pd", match_flags & PCMCIA_DEV_ID_MATCH_PROD_ID4, (*prod_id_hash)[3]); 636 613 637 614 add_wildcard(alias); 638 - return 1; 615 + return 1; 639 616 } 640 - ADD_TO_DEVTABLE("pcmcia", struct pcmcia_device_id, do_pcmcia_entry); 617 + ADD_TO_DEVTABLE("pcmcia", pcmcia_device_id, do_pcmcia_entry); 641 618 642 - static int do_of_entry (const char *filename, struct of_device_id *of, char *alias) 619 + static int do_of_entry (const char *filename, void *symval, char *alias) 643 620 { 644 621 int len; 645 622 char *tmp; 646 - len = sprintf (alias, "of:N%sT%s", 647 - of->name[0] ? of->name : "*", 648 - of->type[0] ? of->type : "*"); 623 + DEF_FIELD_ADDR(symval, of_device_id, name); 624 + DEF_FIELD_ADDR(symval, of_device_id, type); 625 + DEF_FIELD_ADDR(symval, of_device_id, compatible); 649 626 650 - if (of->compatible[0]) 627 + len = sprintf (alias, "of:N%sT%s", 628 + (*name)[0] ? *name : "*", 629 + (*type)[0] ? *type : "*"); 630 + 631 + if (compatible[0]) 651 632 sprintf (&alias[len], "%sC%s", 652 - of->type[0] ? "*" : "", 653 - of->compatible); 633 + (*type)[0] ? "*" : "", 634 + *compatible); 654 635 655 636 /* Replace all whitespace with underscores */ 656 637 for (tmp = alias; tmp && *tmp; tmp++) ··· 664 637 add_wildcard(alias); 665 638 return 1; 666 639 } 667 - ADD_TO_DEVTABLE("of", struct of_device_id, do_of_entry); 640 + ADD_TO_DEVTABLE("of", of_device_id, do_of_entry); 668 641 669 - static int do_vio_entry(const char *filename, struct vio_device_id *vio, 642 + static int do_vio_entry(const char *filename, void *symval, 670 643 char *alias) 671 644 { 672 645 char *tmp; 646 + DEF_FIELD_ADDR(symval, vio_device_id, type); 647 + DEF_FIELD_ADDR(symval, vio_device_id, compat); 673 648 674 - sprintf(alias, "vio:T%sS%s", vio->type[0] ? vio->type : "*", 675 - vio->compat[0] ? vio->compat : "*"); 649 + sprintf(alias, "vio:T%sS%s", (*type)[0] ? *type : "*", 650 + (*compat)[0] ? *compat : "*"); 676 651 677 652 /* Replace all whitespace with underscores */ 678 653 for (tmp = alias; tmp && *tmp; tmp++) ··· 684 655 add_wildcard(alias); 685 656 return 1; 686 657 } 687 - ADD_TO_DEVTABLE("vio", struct vio_device_id, do_vio_entry); 658 + ADD_TO_DEVTABLE("vio", vio_device_id, do_vio_entry); 688 659 689 660 #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) 690 661 ··· 693 664 { 694 665 unsigned int i; 695 666 667 + for (i = min / BITS_PER_LONG; i < max / BITS_PER_LONG + 1; i++) 668 + arr[i] = TO_NATIVE(arr[i]); 696 669 for (i = min; i < max; i++) 697 670 if (arr[i / BITS_PER_LONG] & (1L << (i%BITS_PER_LONG))) 698 671 sprintf(alias + strlen(alias), "%X,*", i); 699 672 } 700 673 701 674 /* input:b0v0p0e0-eXkXrXaXmXlXsXfXwX where X is comma-separated %02X. */ 702 - static int do_input_entry(const char *filename, struct input_device_id *id, 675 + static int do_input_entry(const char *filename, void *symval, 703 676 char *alias) 704 677 { 678 + DEF_FIELD(symval, input_device_id, flags); 679 + DEF_FIELD(symval, input_device_id, bustype); 680 + DEF_FIELD(symval, input_device_id, vendor); 681 + DEF_FIELD(symval, input_device_id, product); 682 + DEF_FIELD(symval, input_device_id, version); 683 + DEF_FIELD_ADDR(symval, input_device_id, evbit); 684 + DEF_FIELD_ADDR(symval, input_device_id, keybit); 685 + DEF_FIELD_ADDR(symval, input_device_id, relbit); 686 + DEF_FIELD_ADDR(symval, input_device_id, absbit); 687 + DEF_FIELD_ADDR(symval, input_device_id, mscbit); 688 + DEF_FIELD_ADDR(symval, input_device_id, ledbit); 689 + DEF_FIELD_ADDR(symval, input_device_id, sndbit); 690 + DEF_FIELD_ADDR(symval, input_device_id, ffbit); 691 + DEF_FIELD_ADDR(symval, input_device_id, swbit); 692 + 705 693 sprintf(alias, "input:"); 706 694 707 - ADD(alias, "b", id->flags & INPUT_DEVICE_ID_MATCH_BUS, id->bustype); 708 - ADD(alias, "v", id->flags & INPUT_DEVICE_ID_MATCH_VENDOR, id->vendor); 709 - ADD(alias, "p", id->flags & INPUT_DEVICE_ID_MATCH_PRODUCT, id->product); 710 - ADD(alias, "e", id->flags & INPUT_DEVICE_ID_MATCH_VERSION, id->version); 695 + ADD(alias, "b", flags & INPUT_DEVICE_ID_MATCH_BUS, bustype); 696 + ADD(alias, "v", flags & INPUT_DEVICE_ID_MATCH_VENDOR, vendor); 697 + ADD(alias, "p", flags & INPUT_DEVICE_ID_MATCH_PRODUCT, product); 698 + ADD(alias, "e", flags & INPUT_DEVICE_ID_MATCH_VERSION, version); 711 699 712 700 sprintf(alias + strlen(alias), "-e*"); 713 - if (id->flags & INPUT_DEVICE_ID_MATCH_EVBIT) 714 - do_input(alias, id->evbit, 0, INPUT_DEVICE_ID_EV_MAX); 701 + if (flags & INPUT_DEVICE_ID_MATCH_EVBIT) 702 + do_input(alias, *evbit, 0, INPUT_DEVICE_ID_EV_MAX); 715 703 sprintf(alias + strlen(alias), "k*"); 716 - if (id->flags & INPUT_DEVICE_ID_MATCH_KEYBIT) 717 - do_input(alias, id->keybit, 704 + if (flags & INPUT_DEVICE_ID_MATCH_KEYBIT) 705 + do_input(alias, *keybit, 718 706 INPUT_DEVICE_ID_KEY_MIN_INTERESTING, 719 707 INPUT_DEVICE_ID_KEY_MAX); 720 708 sprintf(alias + strlen(alias), "r*"); 721 - if (id->flags & INPUT_DEVICE_ID_MATCH_RELBIT) 722 - do_input(alias, id->relbit, 0, INPUT_DEVICE_ID_REL_MAX); 709 + if (flags & INPUT_DEVICE_ID_MATCH_RELBIT) 710 + do_input(alias, *relbit, 0, INPUT_DEVICE_ID_REL_MAX); 723 711 sprintf(alias + strlen(alias), "a*"); 724 - if (id->flags & INPUT_DEVICE_ID_MATCH_ABSBIT) 725 - do_input(alias, id->absbit, 0, INPUT_DEVICE_ID_ABS_MAX); 712 + if (flags & INPUT_DEVICE_ID_MATCH_ABSBIT) 713 + do_input(alias, *absbit, 0, INPUT_DEVICE_ID_ABS_MAX); 726 714 sprintf(alias + strlen(alias), "m*"); 727 - if (id->flags & INPUT_DEVICE_ID_MATCH_MSCIT) 728 - do_input(alias, id->mscbit, 0, INPUT_DEVICE_ID_MSC_MAX); 715 + if (flags & INPUT_DEVICE_ID_MATCH_MSCIT) 716 + do_input(alias, *mscbit, 0, INPUT_DEVICE_ID_MSC_MAX); 729 717 sprintf(alias + strlen(alias), "l*"); 730 - if (id->flags & INPUT_DEVICE_ID_MATCH_LEDBIT) 731 - do_input(alias, id->ledbit, 0, INPUT_DEVICE_ID_LED_MAX); 718 + if (flags & INPUT_DEVICE_ID_MATCH_LEDBIT) 719 + do_input(alias, *ledbit, 0, INPUT_DEVICE_ID_LED_MAX); 732 720 sprintf(alias + strlen(alias), "s*"); 733 - if (id->flags & INPUT_DEVICE_ID_MATCH_SNDBIT) 734 - do_input(alias, id->sndbit, 0, INPUT_DEVICE_ID_SND_MAX); 721 + if (flags & INPUT_DEVICE_ID_MATCH_SNDBIT) 722 + do_input(alias, *sndbit, 0, INPUT_DEVICE_ID_SND_MAX); 735 723 sprintf(alias + strlen(alias), "f*"); 736 - if (id->flags & INPUT_DEVICE_ID_MATCH_FFBIT) 737 - do_input(alias, id->ffbit, 0, INPUT_DEVICE_ID_FF_MAX); 724 + if (flags & INPUT_DEVICE_ID_MATCH_FFBIT) 725 + do_input(alias, *ffbit, 0, INPUT_DEVICE_ID_FF_MAX); 738 726 sprintf(alias + strlen(alias), "w*"); 739 - if (id->flags & INPUT_DEVICE_ID_MATCH_SWBIT) 740 - do_input(alias, id->swbit, 0, INPUT_DEVICE_ID_SW_MAX); 727 + if (flags & INPUT_DEVICE_ID_MATCH_SWBIT) 728 + do_input(alias, *swbit, 0, INPUT_DEVICE_ID_SW_MAX); 741 729 return 1; 742 730 } 743 - ADD_TO_DEVTABLE("input", struct input_device_id, do_input_entry); 731 + ADD_TO_DEVTABLE("input", input_device_id, do_input_entry); 744 732 745 - static int do_eisa_entry(const char *filename, struct eisa_device_id *eisa, 733 + static int do_eisa_entry(const char *filename, void *symval, 746 734 char *alias) 747 735 { 748 - if (eisa->sig[0]) 749 - sprintf(alias, EISA_DEVICE_MODALIAS_FMT "*", eisa->sig); 736 + DEF_FIELD_ADDR(symval, eisa_device_id, sig); 737 + if (sig[0]) 738 + sprintf(alias, EISA_DEVICE_MODALIAS_FMT "*", *sig); 750 739 else 751 740 strcat(alias, "*"); 752 741 return 1; 753 742 } 754 - ADD_TO_DEVTABLE("eisa", struct eisa_device_id, do_eisa_entry); 743 + ADD_TO_DEVTABLE("eisa", eisa_device_id, do_eisa_entry); 755 744 756 745 /* Looks like: parisc:tNhvNrevNsvN */ 757 - static int do_parisc_entry(const char *filename, struct parisc_device_id *id, 746 + static int do_parisc_entry(const char *filename, void *symval, 758 747 char *alias) 759 748 { 760 - id->hw_type = TO_NATIVE(id->hw_type); 761 - id->hversion = TO_NATIVE(id->hversion); 762 - id->hversion_rev = TO_NATIVE(id->hversion_rev); 763 - id->sversion = TO_NATIVE(id->sversion); 749 + DEF_FIELD(symval, parisc_device_id, hw_type); 750 + DEF_FIELD(symval, parisc_device_id, hversion); 751 + DEF_FIELD(symval, parisc_device_id, hversion_rev); 752 + DEF_FIELD(symval, parisc_device_id, sversion); 764 753 765 754 strcpy(alias, "parisc:"); 766 - ADD(alias, "t", id->hw_type != PA_HWTYPE_ANY_ID, id->hw_type); 767 - ADD(alias, "hv", id->hversion != PA_HVERSION_ANY_ID, id->hversion); 768 - ADD(alias, "rev", id->hversion_rev != PA_HVERSION_REV_ANY_ID, id->hversion_rev); 769 - ADD(alias, "sv", id->sversion != PA_SVERSION_ANY_ID, id->sversion); 755 + ADD(alias, "t", hw_type != PA_HWTYPE_ANY_ID, hw_type); 756 + ADD(alias, "hv", hversion != PA_HVERSION_ANY_ID, hversion); 757 + ADD(alias, "rev", hversion_rev != PA_HVERSION_REV_ANY_ID, hversion_rev); 758 + ADD(alias, "sv", sversion != PA_SVERSION_ANY_ID, sversion); 770 759 771 760 add_wildcard(alias); 772 761 return 1; 773 762 } 774 - ADD_TO_DEVTABLE("parisc", struct parisc_device_id, do_parisc_entry); 763 + ADD_TO_DEVTABLE("parisc", parisc_device_id, do_parisc_entry); 775 764 776 765 /* Looks like: sdio:cNvNdN. */ 777 766 static int do_sdio_entry(const char *filename, 778 - struct sdio_device_id *id, char *alias) 767 + void *symval, char *alias) 779 768 { 780 - id->class = TO_NATIVE(id->class); 781 - id->vendor = TO_NATIVE(id->vendor); 782 - id->device = TO_NATIVE(id->device); 769 + DEF_FIELD(symval, sdio_device_id, class); 770 + DEF_FIELD(symval, sdio_device_id, vendor); 771 + DEF_FIELD(symval, sdio_device_id, device); 783 772 784 773 strcpy(alias, "sdio:"); 785 - ADD(alias, "c", id->class != (__u8)SDIO_ANY_ID, id->class); 786 - ADD(alias, "v", id->vendor != (__u16)SDIO_ANY_ID, id->vendor); 787 - ADD(alias, "d", id->device != (__u16)SDIO_ANY_ID, id->device); 774 + ADD(alias, "c", class != (__u8)SDIO_ANY_ID, class); 775 + ADD(alias, "v", vendor != (__u16)SDIO_ANY_ID, vendor); 776 + ADD(alias, "d", device != (__u16)SDIO_ANY_ID, device); 788 777 add_wildcard(alias); 789 778 return 1; 790 779 } 791 - ADD_TO_DEVTABLE("sdio", struct sdio_device_id, do_sdio_entry); 780 + ADD_TO_DEVTABLE("sdio", sdio_device_id, do_sdio_entry); 792 781 793 782 /* Looks like: ssb:vNidNrevN. */ 794 783 static int do_ssb_entry(const char *filename, 795 - struct ssb_device_id *id, char *alias) 784 + void *symval, char *alias) 796 785 { 797 - id->vendor = TO_NATIVE(id->vendor); 798 - id->coreid = TO_NATIVE(id->coreid); 799 - id->revision = TO_NATIVE(id->revision); 786 + DEF_FIELD(symval, ssb_device_id, vendor); 787 + DEF_FIELD(symval, ssb_device_id, coreid); 788 + DEF_FIELD(symval, ssb_device_id, revision); 800 789 801 790 strcpy(alias, "ssb:"); 802 - ADD(alias, "v", id->vendor != SSB_ANY_VENDOR, id->vendor); 803 - ADD(alias, "id", id->coreid != SSB_ANY_ID, id->coreid); 804 - ADD(alias, "rev", id->revision != SSB_ANY_REV, id->revision); 791 + ADD(alias, "v", vendor != SSB_ANY_VENDOR, vendor); 792 + ADD(alias, "id", coreid != SSB_ANY_ID, coreid); 793 + ADD(alias, "rev", revision != SSB_ANY_REV, revision); 805 794 add_wildcard(alias); 806 795 return 1; 807 796 } 808 - ADD_TO_DEVTABLE("ssb", struct ssb_device_id, do_ssb_entry); 797 + ADD_TO_DEVTABLE("ssb", ssb_device_id, do_ssb_entry); 809 798 810 799 /* Looks like: bcma:mNidNrevNclN. */ 811 800 static int do_bcma_entry(const char *filename, 812 - struct bcma_device_id *id, char *alias) 801 + void *symval, char *alias) 813 802 { 814 - id->manuf = TO_NATIVE(id->manuf); 815 - id->id = TO_NATIVE(id->id); 816 - id->rev = TO_NATIVE(id->rev); 817 - id->class = TO_NATIVE(id->class); 803 + DEF_FIELD(symval, bcma_device_id, manuf); 804 + DEF_FIELD(symval, bcma_device_id, id); 805 + DEF_FIELD(symval, bcma_device_id, rev); 806 + DEF_FIELD(symval, bcma_device_id, class); 818 807 819 808 strcpy(alias, "bcma:"); 820 - ADD(alias, "m", id->manuf != BCMA_ANY_MANUF, id->manuf); 821 - ADD(alias, "id", id->id != BCMA_ANY_ID, id->id); 822 - ADD(alias, "rev", id->rev != BCMA_ANY_REV, id->rev); 823 - ADD(alias, "cl", id->class != BCMA_ANY_CLASS, id->class); 809 + ADD(alias, "m", manuf != BCMA_ANY_MANUF, manuf); 810 + ADD(alias, "id", id != BCMA_ANY_ID, id); 811 + ADD(alias, "rev", rev != BCMA_ANY_REV, rev); 812 + ADD(alias, "cl", class != BCMA_ANY_CLASS, class); 824 813 add_wildcard(alias); 825 814 return 1; 826 815 } 827 - ADD_TO_DEVTABLE("bcma", struct bcma_device_id, do_bcma_entry); 816 + ADD_TO_DEVTABLE("bcma", bcma_device_id, do_bcma_entry); 828 817 829 818 /* Looks like: virtio:dNvN */ 830 - static int do_virtio_entry(const char *filename, struct virtio_device_id *id, 819 + static int do_virtio_entry(const char *filename, void *symval, 831 820 char *alias) 832 821 { 833 - id->device = TO_NATIVE(id->device); 834 - id->vendor = TO_NATIVE(id->vendor); 822 + DEF_FIELD(symval, virtio_device_id, device); 823 + DEF_FIELD(symval, virtio_device_id, vendor); 835 824 836 825 strcpy(alias, "virtio:"); 837 - ADD(alias, "d", id->device != VIRTIO_DEV_ANY_ID, id->device); 838 - ADD(alias, "v", id->vendor != VIRTIO_DEV_ANY_ID, id->vendor); 826 + ADD(alias, "d", device != VIRTIO_DEV_ANY_ID, device); 827 + ADD(alias, "v", vendor != VIRTIO_DEV_ANY_ID, vendor); 839 828 840 829 add_wildcard(alias); 841 830 return 1; 842 831 } 843 - ADD_TO_DEVTABLE("virtio", struct virtio_device_id, do_virtio_entry); 832 + ADD_TO_DEVTABLE("virtio", virtio_device_id, do_virtio_entry); 844 833 845 834 /* 846 835 * Looks like: vmbus:guid ··· 866 819 * in the name. 867 820 */ 868 821 869 - static int do_vmbus_entry(const char *filename, struct hv_vmbus_device_id *id, 822 + static int do_vmbus_entry(const char *filename, void *symval, 870 823 char *alias) 871 824 { 872 825 int i; 873 - char guid_name[((sizeof(id->guid) + 1)) * 2]; 826 + DEF_FIELD_ADDR(symval, hv_vmbus_device_id, guid); 827 + char guid_name[(sizeof(*guid) + 1) * 2]; 874 828 875 - for (i = 0; i < (sizeof(id->guid) * 2); i += 2) 876 - sprintf(&guid_name[i], "%02x", id->guid[i/2]); 829 + for (i = 0; i < (sizeof(*guid) * 2); i += 2) 830 + sprintf(&guid_name[i], "%02x", TO_NATIVE((*guid)[i/2])); 877 831 878 832 strcpy(alias, "vmbus:"); 879 833 strcat(alias, guid_name); 880 834 881 835 return 1; 882 836 } 883 - ADD_TO_DEVTABLE("vmbus", struct hv_vmbus_device_id, do_vmbus_entry); 837 + ADD_TO_DEVTABLE("vmbus", hv_vmbus_device_id, do_vmbus_entry); 884 838 885 839 /* Looks like: i2c:S */ 886 - static int do_i2c_entry(const char *filename, struct i2c_device_id *id, 840 + static int do_i2c_entry(const char *filename, void *symval, 887 841 char *alias) 888 842 { 889 - sprintf(alias, I2C_MODULE_PREFIX "%s", id->name); 843 + DEF_FIELD_ADDR(symval, i2c_device_id, name); 844 + sprintf(alias, I2C_MODULE_PREFIX "%s", *name); 890 845 891 846 return 1; 892 847 } 893 - ADD_TO_DEVTABLE("i2c", struct i2c_device_id, do_i2c_entry); 848 + ADD_TO_DEVTABLE("i2c", i2c_device_id, do_i2c_entry); 894 849 895 850 /* Looks like: spi:S */ 896 - static int do_spi_entry(const char *filename, struct spi_device_id *id, 851 + static int do_spi_entry(const char *filename, void *symval, 897 852 char *alias) 898 853 { 899 - sprintf(alias, SPI_MODULE_PREFIX "%s", id->name); 854 + DEF_FIELD_ADDR(symval, spi_device_id, name); 855 + sprintf(alias, SPI_MODULE_PREFIX "%s", *name); 900 856 901 857 return 1; 902 858 } 903 - ADD_TO_DEVTABLE("spi", struct spi_device_id, do_spi_entry); 859 + ADD_TO_DEVTABLE("spi", spi_device_id, do_spi_entry); 904 860 905 861 static const struct dmifield { 906 862 const char *prefix; ··· 935 885 } 936 886 937 887 938 - static int do_dmi_entry(const char *filename, struct dmi_system_id *id, 888 + static int do_dmi_entry(const char *filename, void *symval, 939 889 char *alias) 940 890 { 941 891 int i, j; 942 - 892 + DEF_FIELD_ADDR(symval, dmi_system_id, matches); 943 893 sprintf(alias, "dmi*"); 944 894 945 895 for (i = 0; i < ARRAY_SIZE(dmi_fields); i++) { 946 896 for (j = 0; j < 4; j++) { 947 - if (id->matches[j].slot && 948 - id->matches[j].slot == dmi_fields[i].field) { 897 + if ((*matches)[j].slot && 898 + (*matches)[j].slot == dmi_fields[i].field) { 949 899 sprintf(alias + strlen(alias), ":%s*", 950 900 dmi_fields[i].prefix); 951 901 dmi_ascii_filter(alias + strlen(alias), 952 - id->matches[j].substr); 902 + (*matches)[j].substr); 953 903 strcat(alias, "*"); 954 904 } 955 905 } ··· 958 908 strcat(alias, ":"); 959 909 return 1; 960 910 } 961 - ADD_TO_DEVTABLE("dmi", struct dmi_system_id, do_dmi_entry); 911 + ADD_TO_DEVTABLE("dmi", dmi_system_id, do_dmi_entry); 962 912 963 913 static int do_platform_entry(const char *filename, 964 - struct platform_device_id *id, char *alias) 914 + void *symval, char *alias) 965 915 { 966 - sprintf(alias, PLATFORM_MODULE_PREFIX "%s", id->name); 916 + DEF_FIELD_ADDR(symval, platform_device_id, name); 917 + sprintf(alias, PLATFORM_MODULE_PREFIX "%s", *name); 967 918 return 1; 968 919 } 969 - ADD_TO_DEVTABLE("platform", struct platform_device_id, do_platform_entry); 920 + ADD_TO_DEVTABLE("platform", platform_device_id, do_platform_entry); 970 921 971 922 static int do_mdio_entry(const char *filename, 972 - struct mdio_device_id *id, char *alias) 923 + void *symval, char *alias) 973 924 { 974 925 int i; 926 + DEF_FIELD(symval, mdio_device_id, phy_id); 927 + DEF_FIELD(symval, mdio_device_id, phy_id_mask); 975 928 976 929 alias += sprintf(alias, MDIO_MODULE_PREFIX); 977 930 978 931 for (i = 0; i < 32; i++) { 979 - if (!((id->phy_id_mask >> (31-i)) & 1)) 932 + if (!((phy_id_mask >> (31-i)) & 1)) 980 933 *(alias++) = '?'; 981 - else if ((id->phy_id >> (31-i)) & 1) 934 + else if ((phy_id >> (31-i)) & 1) 982 935 *(alias++) = '1'; 983 936 else 984 937 *(alias++) = '0'; ··· 992 939 993 940 return 1; 994 941 } 995 - ADD_TO_DEVTABLE("mdio", struct mdio_device_id, do_mdio_entry); 942 + ADD_TO_DEVTABLE("mdio", mdio_device_id, do_mdio_entry); 996 943 997 944 /* Looks like: zorro:iN. */ 998 - static int do_zorro_entry(const char *filename, struct zorro_device_id *id, 945 + static int do_zorro_entry(const char *filename, void *symval, 999 946 char *alias) 1000 947 { 1001 - id->id = TO_NATIVE(id->id); 948 + DEF_FIELD(symval, zorro_device_id, id); 1002 949 strcpy(alias, "zorro:"); 1003 - ADD(alias, "i", id->id != ZORRO_WILDCARD, id->id); 950 + ADD(alias, "i", id != ZORRO_WILDCARD, id); 1004 951 return 1; 1005 952 } 1006 - ADD_TO_DEVTABLE("zorro", struct zorro_device_id, do_zorro_entry); 953 + ADD_TO_DEVTABLE("zorro", zorro_device_id, do_zorro_entry); 1007 954 1008 955 /* looks like: "pnp:dD" */ 1009 956 static int do_isapnp_entry(const char *filename, 1010 - struct isapnp_device_id *id, char *alias) 957 + void *symval, char *alias) 1011 958 { 959 + DEF_FIELD(symval, isapnp_device_id, vendor); 960 + DEF_FIELD(symval, isapnp_device_id, function); 1012 961 sprintf(alias, "pnp:d%c%c%c%x%x%x%x*", 1013 - 'A' + ((id->vendor >> 2) & 0x3f) - 1, 1014 - 'A' + (((id->vendor & 3) << 3) | ((id->vendor >> 13) & 7)) - 1, 1015 - 'A' + ((id->vendor >> 8) & 0x1f) - 1, 1016 - (id->function >> 4) & 0x0f, id->function & 0x0f, 1017 - (id->function >> 12) & 0x0f, (id->function >> 8) & 0x0f); 962 + 'A' + ((vendor >> 2) & 0x3f) - 1, 963 + 'A' + (((vendor & 3) << 3) | ((vendor >> 13) & 7)) - 1, 964 + 'A' + ((vendor >> 8) & 0x1f) - 1, 965 + (function >> 4) & 0x0f, function & 0x0f, 966 + (function >> 12) & 0x0f, (function >> 8) & 0x0f); 1018 967 return 1; 1019 968 } 1020 - ADD_TO_DEVTABLE("isapnp", struct isapnp_device_id, do_isapnp_entry); 969 + ADD_TO_DEVTABLE("isapnp", isapnp_device_id, do_isapnp_entry); 1021 970 1022 971 /* Looks like: "ipack:fNvNdN". */ 1023 972 static int do_ipack_entry(const char *filename, 1024 - struct ipack_device_id *id, char *alias) 973 + void *symval, char *alias) 1025 974 { 1026 - id->vendor = TO_NATIVE(id->vendor); 1027 - id->device = TO_NATIVE(id->device); 975 + DEF_FIELD(symval, ipack_device_id, format); 976 + DEF_FIELD(symval, ipack_device_id, vendor); 977 + DEF_FIELD(symval, ipack_device_id, device); 1028 978 strcpy(alias, "ipack:"); 1029 - ADD(alias, "f", id->format != IPACK_ANY_FORMAT, id->format); 1030 - ADD(alias, "v", id->vendor != IPACK_ANY_ID, id->vendor); 1031 - ADD(alias, "d", id->device != IPACK_ANY_ID, id->device); 979 + ADD(alias, "f", format != IPACK_ANY_FORMAT, format); 980 + ADD(alias, "v", vendor != IPACK_ANY_ID, vendor); 981 + ADD(alias, "d", device != IPACK_ANY_ID, device); 1032 982 add_wildcard(alias); 1033 983 return 1; 1034 984 } 1035 - ADD_TO_DEVTABLE("ipack", struct ipack_device_id, do_ipack_entry); 985 + ADD_TO_DEVTABLE("ipack", ipack_device_id, do_ipack_entry); 1036 986 1037 987 /* 1038 988 * Append a match expression for a single masked hex digit. ··· 1086 1030 * a ? or [] pattern matching exactly one digit. 1087 1031 */ 1088 1032 static int do_amba_entry(const char *filename, 1089 - struct amba_id *id, char *alias) 1033 + void *symval, char *alias) 1090 1034 { 1091 1035 unsigned int digit; 1092 1036 char *p = alias; 1037 + DEF_FIELD(symval, amba_id, id); 1038 + DEF_FIELD(symval, amba_id, mask); 1093 1039 1094 - if ((id->id & id->mask) != id->id) 1040 + if ((id & mask) != id) 1095 1041 fatal("%s: Masked-off bit(s) of AMBA device ID are non-zero: " 1096 1042 "id=0x%08X, mask=0x%08X. Please fix this driver.\n", 1097 - filename, id->id, id->mask); 1043 + filename, id, mask); 1098 1044 1099 1045 p += sprintf(alias, "amba:d"); 1100 1046 for (digit = 0; digit < 8; digit++) 1101 1047 append_nibble_mask(&p, 1102 - (id->id >> (4 * (7 - digit))) & 0xf, 1103 - (id->mask >> (4 * (7 - digit))) & 0xf); 1048 + (id >> (4 * (7 - digit))) & 0xf, 1049 + (mask >> (4 * (7 - digit))) & 0xf); 1104 1050 1105 1051 return 1; 1106 1052 } 1107 - ADD_TO_DEVTABLE("amba", struct amba_id, do_amba_entry); 1053 + ADD_TO_DEVTABLE("amba", amba_id, do_amba_entry); 1108 1054 1109 1055 /* LOOKS like x86cpu:vendor:VVVV:family:FFFF:model:MMMM:feature:*,FEAT,* 1110 1056 * All fields are numbers. It would be nicer to use strings for vendor ··· 1114 1056 * complicated. 1115 1057 */ 1116 1058 1117 - static int do_x86cpu_entry(const char *filename, struct x86_cpu_id *id, 1059 + static int do_x86cpu_entry(const char *filename, void *symval, 1118 1060 char *alias) 1119 1061 { 1120 - id->feature = TO_NATIVE(id->feature); 1121 - id->family = TO_NATIVE(id->family); 1122 - id->model = TO_NATIVE(id->model); 1123 - id->vendor = TO_NATIVE(id->vendor); 1062 + DEF_FIELD(symval, x86_cpu_id, feature); 1063 + DEF_FIELD(symval, x86_cpu_id, family); 1064 + DEF_FIELD(symval, x86_cpu_id, model); 1065 + DEF_FIELD(symval, x86_cpu_id, vendor); 1124 1066 1125 1067 strcpy(alias, "x86cpu:"); 1126 - ADD(alias, "vendor:", id->vendor != X86_VENDOR_ANY, id->vendor); 1127 - ADD(alias, ":family:", id->family != X86_FAMILY_ANY, id->family); 1128 - ADD(alias, ":model:", id->model != X86_MODEL_ANY, id->model); 1068 + ADD(alias, "vendor:", vendor != X86_VENDOR_ANY, vendor); 1069 + ADD(alias, ":family:", family != X86_FAMILY_ANY, family); 1070 + ADD(alias, ":model:", model != X86_MODEL_ANY, model); 1129 1071 strcat(alias, ":feature:*"); 1130 - if (id->feature != X86_FEATURE_ANY) 1131 - sprintf(alias + strlen(alias), "%04X*", id->feature); 1072 + if (feature != X86_FEATURE_ANY) 1073 + sprintf(alias + strlen(alias), "%04X*", feature); 1132 1074 return 1; 1133 1075 } 1134 - ADD_TO_DEVTABLE("x86cpu", struct x86_cpu_id, do_x86cpu_entry); 1076 + ADD_TO_DEVTABLE("x86cpu", x86_cpu_id, do_x86cpu_entry); 1135 1077 1136 1078 /* Does namelen bytes of name exactly match the symbol? */ 1137 1079 static bool sym_is(const char *name, unsigned namelen, const char *symbol)
+1 -4
scripts/mod/modpost.c
··· 2128 2128 struct ext_sym_list *extsym_iter; 2129 2129 struct ext_sym_list *extsym_start = NULL; 2130 2130 2131 - while ((opt = getopt(argc, argv, "i:I:e:cmsSo:awM:K:")) != -1) { 2131 + while ((opt = getopt(argc, argv, "i:I:e:msSo:awM:K:")) != -1) { 2132 2132 switch (opt) { 2133 2133 case 'i': 2134 2134 kernel_read = optarg; ··· 2136 2136 case 'I': 2137 2137 module_read = optarg; 2138 2138 external_module = 1; 2139 - break; 2140 - case 'c': 2141 - cross_build = 1; 2142 2139 break; 2143 2140 case 'e': 2144 2141 external_module = 1;
+1 -1
scripts/setlocalversion
··· 108 108 fi 109 109 110 110 # Check for svn and a svn repo. 111 - if rev=`svn info 2>/dev/null | grep '^Last Changed Rev'`; then 111 + if rev=`LANG= LC_ALL= LC_MESSAGES=C svn info 2>/dev/null | grep '^Last Changed Rev'`; then 112 112 rev=`echo $rev | awk '{print $NF}'` 113 113 printf -- '-svn%s' "$rev" 114 114