aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
authorDavid Woodhouse <dwmw2@infradead.org>2008-09-16 19:23:28 -0400
committerDavid Woodhouse <David.Woodhouse@intel.com>2008-10-13 11:05:06 -0400
commitd945b697d0eea5a811ec299c5f1a25889bb0242b (patch)
treee9f902122c05a174eac04464b145bd7a69f261dc /include/linux
parent9d5a9e74655b9d04d0ec9c8e47801163b7b74211 (diff)
Automatic MODULE_ALIAS() for DMI match tables.
This makes modpost handle MODULE_DEVICE_TABLE(dmi, xxxx). I had to change the string pointers in the match table to char arrays, and picked a size of 79 bytes almost at random -- do we need to make it bigger than that? I was a bit concerned about the 'bloat' this introduces into the match tables, but they should all be __initdata so it shouldn't matter too much. (Actually, modpost does go through the relocations and look at most of them; it wouldn't be impossible to make it handle string pointers -- but doesn't seem to be worth the effort, since they're __initdata). Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/dmi.h41
-rw-r--r--include/linux/mod_devicetable.h47
2 files changed, 49 insertions, 39 deletions
diff --git a/include/linux/dmi.h b/include/linux/dmi.h
index 2a063b64133f..e5084eb5943a 100644
--- a/include/linux/dmi.h
+++ b/include/linux/dmi.h
@@ -2,29 +2,9 @@
2#define __DMI_H__ 2#define __DMI_H__
3 3
4#include <linux/list.h> 4#include <linux/list.h>
5#include <linux/mod_devicetable.h>
5 6
6enum dmi_field { 7/* enum dmi_field is in mod_devicetable.h */
7 DMI_NONE,
8 DMI_BIOS_VENDOR,
9 DMI_BIOS_VERSION,
10 DMI_BIOS_DATE,
11 DMI_SYS_VENDOR,
12 DMI_PRODUCT_NAME,
13 DMI_PRODUCT_VERSION,
14 DMI_PRODUCT_SERIAL,
15 DMI_PRODUCT_UUID,
16 DMI_BOARD_VENDOR,
17 DMI_BOARD_NAME,
18 DMI_BOARD_VERSION,
19 DMI_BOARD_SERIAL,
20 DMI_BOARD_ASSET_TAG,
21 DMI_CHASSIS_VENDOR,
22 DMI_CHASSIS_TYPE,
23 DMI_CHASSIS_VERSION,
24 DMI_CHASSIS_SERIAL,
25 DMI_CHASSIS_ASSET_TAG,
26 DMI_STRING_MAX,
27};
28 8
29enum dmi_device_type { 9enum dmi_device_type {
30 DMI_DEV_TYPE_ANY = 0, 10 DMI_DEV_TYPE_ANY = 0,
@@ -48,23 +28,6 @@ struct dmi_header {
48 u16 handle; 28 u16 handle;
49}; 29};
50 30
51/*
52 * DMI callbacks for problem boards
53 */
54struct dmi_strmatch {
55 u8 slot;
56 char *substr;
57};
58
59struct dmi_system_id {
60 int (*callback)(const struct dmi_system_id *);
61 const char *ident;
62 struct dmi_strmatch matches[4];
63 void *driver_data;
64};
65
66#define DMI_MATCH(a, b) { a, b }
67
68struct dmi_device { 31struct dmi_device {
69 struct list_head list; 32 struct list_head list;
70 int type; 33 int type;
diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h
index c4db5827963d..3481a7d5bc0a 100644
--- a/include/linux/mod_devicetable.h
+++ b/include/linux/mod_devicetable.h
@@ -388,5 +388,52 @@ struct i2c_device_id {
388 __attribute__((aligned(sizeof(kernel_ulong_t)))); 388 __attribute__((aligned(sizeof(kernel_ulong_t))));
389}; 389};
390 390
391/* dmi */
392enum dmi_field {
393 DMI_NONE,
394 DMI_BIOS_VENDOR,
395 DMI_BIOS_VERSION,
396 DMI_BIOS_DATE,
397 DMI_SYS_VENDOR,
398 DMI_PRODUCT_NAME,
399 DMI_PRODUCT_VERSION,
400 DMI_PRODUCT_SERIAL,
401 DMI_PRODUCT_UUID,
402 DMI_BOARD_VENDOR,
403 DMI_BOARD_NAME,
404 DMI_BOARD_VERSION,
405 DMI_BOARD_SERIAL,
406 DMI_BOARD_ASSET_TAG,
407 DMI_CHASSIS_VENDOR,
408 DMI_CHASSIS_TYPE,
409 DMI_CHASSIS_VERSION,
410 DMI_CHASSIS_SERIAL,
411 DMI_CHASSIS_ASSET_TAG,
412 DMI_STRING_MAX,
413};
414
415struct dmi_strmatch {
416 unsigned char slot;
417 char substr[79];
418};
419
420#ifndef __KERNEL__
421struct dmi_system_id {
422 kernel_ulong_t callback;
423 kernel_ulong_t ident;
424 struct dmi_strmatch matches[4];
425 kernel_ulong_t driver_data
426 __attribute__((aligned(sizeof(kernel_ulong_t))));
427};
428#else
429struct dmi_system_id {
430 int (*callback)(const struct dmi_system_id *);
431 const char *ident;
432 struct dmi_strmatch matches[4];
433 void *driver_data;
434};
435#endif
436
437#define DMI_MATCH(a, b) { a, b }
391 438
392#endif /* LINUX_MOD_DEVICETABLE_H */ 439#endif /* LINUX_MOD_DEVICETABLE_H */