Geert Uytterhoeven <geert@xxxxxxxxxxxxxx> writes: > Hi Andreas, > > On Mon, 25 Jun 2012, Andreas Schwab wrote: >> --- /dev/null >> +++ b/scripts/mod/devicetable-offsets.c >> @@ -0,0 +1,171 @@ >> +#include <linux/kbuild.h> >> +#include <linux/mod_devicetable.h> >> + >> +#define DEVID(devid) DEFINE(SIZE_##devid, sizeof(struct devid)) >> +#define DEVID_FIELD(devid, field) \ >> + DEFINE(OFF_##devid##_##field, offsetof(struct devid, field)) >> + >> +int main(void) >> +{ >> + DEVID(usb_device_id); >> + DEVID_FIELD(usb_device_id, match_flags); >> + DEVID_FIELD(usb_device_id, idVendor); >> + DEVID_FIELD(usb_device_id, idProduct); >> + DEVID_FIELD(usb_device_id, bcdDevice_lo); >> + DEVID_FIELD(usb_device_id, bcdDevice_hi); >> + DEVID_FIELD(usb_device_id, bDeviceClass); >> + DEVID_FIELD(usb_device_id, bDeviceSubClass); >> + DEVID_FIELD(usb_device_id, bDeviceProtocol); >> + DEVID_FIELD(usb_device_id, bInterfaceClass); >> + DEVID_FIELD(usb_device_id, bInterfaceSubClass); >> + DEVID_FIELD(usb_device_id, bInterfaceProtocol); > > These are all duplicates of the structures in <linux/mod_devicetable.h>. > Can't you get rid of the duplication by putting e.g. the following > in <linux/mod_devicetable.h>: > > DEVID_START(usb_device_id); > DEVID_FIELD(usb_device_id, __u16, match_flags); > DEVID_FIELD(usb_device_id, __u16, idVendor); > DEVID_FIELD(usb_device_id, __u16, idProduct); > DEVID_FIELD(usb_device_id, __u16, bcdDevice_lo); > DEVID_FIELD(usb_device_id, __u16, bcdDevice_hi); > DEVID_FIELD(usb_device_id, __u8, bDeviceClass); > DEVID_FIELD(usb_device_id, __u8, bDeviceSubClass); > DEVID_FIELD(usb_device_id, __u8, bDeviceProtocol); > DEVID_FIELD(usb_device_id, __u8, bInterfaceClass); > DEVID_FIELD(usb_device_id, __u8, bInterfaceSubClass); > DEVID_FIELD(usb_device_id, __u8, bInterfaceProtocol); > DEVID_END(); > > and redefining the DEVID_*() macros depending on > 1. __KERNEL__, to generate the C struct definitions for kernel builds, > 2. first inclusion by devicetable-offsets.c, also to generate C struct > definitions, > 3. second inclusion by devicetable-offsets.c, to generate the sizes and > offset definitions for modalias? That requires some reorganisation of the struct pnp_card_device_id which has a somewhat complicated structure (which also accounts for the ugliest part of the patch). Andreas. -- Andreas Schwab, schwab@xxxxxxxxxxxxxx GPG Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different." -- To unsubscribe from this list: send the line "unsubscribe linux-next" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html