From: David S. Miller Date: Wed, 19 May 2010 06:01:55 +0000 (-0700) Subject: Merge branch 'master' of /home/davem/src/GIT/linux-2.6/ X-Git-Tag: v2.6.35-rc1~473^2 X-Git-Url: https://bbs.cooldavid.org/git/?a=commitdiff_plain;h=2ec8c6bb5d8f3a62a79f463525054bae1e3d4487;p=net-next-2.6.git Merge branch 'master' of /home/davem/src/GIT/linux-2.6/ Conflicts: include/linux/mod_devicetable.h scripts/mod/file2alias.c --- 2ec8c6bb5d8f3a62a79f463525054bae1e3d4487 diff --cc include/linux/mod_devicetable.h index 55f1f9c9506,56fde4364e4..007fbaafead --- a/include/linux/mod_devicetable.h +++ b/include/linux/mod_devicetable.h @@@ -474,30 -474,13 +474,39 @@@ struct platform_device_id __attribute__((aligned(sizeof(kernel_ulong_t)))); }; +#define MDIO_MODULE_PREFIX "mdio:" + +#define MDIO_ID_FMT "%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d" +#define MDIO_ID_ARGS(_id) \ + (_id)>>31, ((_id)>>30) & 1, ((_id)>>29) & 1, ((_id)>>28) & 1, \ + ((_id)>>27) & 1, ((_id)>>26) & 1, ((_id)>>25) & 1, ((_id)>>24) & 1, \ + ((_id)>>23) & 1, ((_id)>>22) & 1, ((_id)>>21) & 1, ((_id)>>20) & 1, \ + ((_id)>>19) & 1, ((_id)>>18) & 1, ((_id)>>17) & 1, ((_id)>>16) & 1, \ + ((_id)>>15) & 1, ((_id)>>14) & 1, ((_id)>>13) & 1, ((_id)>>12) & 1, \ + ((_id)>>11) & 1, ((_id)>>10) & 1, ((_id)>>9) & 1, ((_id)>>8) & 1, \ + ((_id)>>7) & 1, ((_id)>>6) & 1, ((_id)>>5) & 1, ((_id)>>4) & 1, \ + ((_id)>>3) & 1, ((_id)>>2) & 1, ((_id)>>1) & 1, (_id) & 1 + +/** + * struct mdio_device_id - identifies PHY devices on an MDIO/MII bus + * @phy_id: The result of + * (mdio_read(&MII_PHYSID1) << 16 | mdio_read(&PHYSID2)) & @phy_id_mask + * for this PHY type + * @phy_id_mask: Defines the significant bits of @phy_id. A value of 0 + * is used to terminate an array of struct mdio_device_id. + */ +struct mdio_device_id { + __u32 phy_id; + __u32 phy_id_mask; +}; + + struct zorro_device_id { + __u32 id; /* Device ID or ZORRO_WILDCARD */ + kernel_ulong_t driver_data; /* Data private to the driver */ + }; + + #define ZORRO_WILDCARD (0xffffffff) /* not official */ + + #define ZORRO_DEVICE_MODALIAS_FMT "zorro:i%08X" + #endif /* LINUX_MOD_DEVICETABLE_H */ diff --cc scripts/mod/file2alias.c index 36a60a85317,df90f31d14b..9cf2400580a --- a/scripts/mod/file2alias.c +++ b/scripts/mod/file2alias.c @@@ -796,28 -796,16 +796,38 @@@ static int do_platform_entry(const cha return 1; } +static int do_mdio_entry(const char *filename, + struct mdio_device_id *id, char *alias) +{ + int i; + + alias += sprintf(alias, MDIO_MODULE_PREFIX); + + for (i = 0; i < 32; i++) { + if (!((id->phy_id_mask >> (31-i)) & 1)) + *(alias++) = '?'; + else if ((id->phy_id >> (31-i)) & 1) + *(alias++) = '1'; + else + *(alias++) = '0'; + } + + /* Terminate the string */ + *alias = 0; + + return 1; +} + + /* Looks like: zorro:iN. */ + static int do_zorro_entry(const char *filename, struct zorro_device_id *id, + char *alias) + { + id->id = TO_NATIVE(id->id); + strcpy(alias, "zorro:"); + ADD(alias, "i", id->id != ZORRO_WILDCARD, id->id); + return 1; + } + /* Ignore any prefix, eg. some architectures prepend _ */ static inline int sym_is(const char *symbol, const char *name) { @@@ -965,10 -953,10 +975,14 @@@ void handle_moddevtable(struct module * do_table(symval, sym->st_size, sizeof(struct platform_device_id), "platform", do_platform_entry, mod); + else if (sym_is(symname, "__mod_mdio_device_table")) + do_table(symval, sym->st_size, + sizeof(struct mdio_device_id), "mdio", + do_mdio_entry, mod); + else if (sym_is(symname, "__mod_zorro_device_table")) + do_table(symval, sym->st_size, + sizeof(struct zorro_device_id), "zorro", + do_zorro_entry, mod); free(zeros); }