Commit a15bdeef authored by David Woodhouse's avatar David Woodhouse

Remove use of inter_module_crap in NOR flash chip drivers.

Signed-off-by: default avatarDavid Woodhouse <dwmw2@infradead.org>
parent 396674e5
...@@ -30,7 +30,6 @@ config MTD_JEDECPROBE ...@@ -30,7 +30,6 @@ config MTD_JEDECPROBE
config MTD_GEN_PROBE config MTD_GEN_PROBE
tristate tristate
select OBSOLETE_INTERMODULE
config MTD_CFI_ADV_OPTIONS config MTD_CFI_ADV_OPTIONS
bool "Flash chip driver advanced configuration options" bool "Flash chip driver advanced configuration options"
......
...@@ -3,13 +3,6 @@ ...@@ -3,13 +3,6 @@
# #
# $Id: Makefile.common,v 1.5 2005/11/07 11:14:22 gleixner Exp $ # $Id: Makefile.common,v 1.5 2005/11/07 11:14:22 gleixner Exp $
# *** BIG UGLY NOTE ***
#
# The removal of get_module_symbol() and replacement with
# inter_module_register() et al has introduced a link order dependency
# here where previously there was none. We now have to ensure that
# the CFI command set drivers are linked before gen_probe.o
obj-$(CONFIG_MTD) += chipreg.o obj-$(CONFIG_MTD) += chipreg.o
obj-$(CONFIG_MTD_AMDSTD) += amd_flash.o obj-$(CONFIG_MTD_AMDSTD) += amd_flash.o
obj-$(CONFIG_MTD_CFI) += cfi_probe.o obj-$(CONFIG_MTD_CFI) += cfi_probe.o
......
...@@ -97,7 +97,6 @@ struct amd_flash_private { ...@@ -97,7 +97,6 @@ struct amd_flash_private {
int interleave; int interleave;
int numchips; int numchips;
unsigned long chipshift; unsigned long chipshift;
// const char *im_name;
struct flchip chips[0]; struct flchip chips[0];
}; };
...@@ -131,12 +130,6 @@ static struct mtd_chip_driver amd_flash_chipdrv = { ...@@ -131,12 +130,6 @@ static struct mtd_chip_driver amd_flash_chipdrv = {
.module = THIS_MODULE .module = THIS_MODULE
}; };
static const char im_name[] = "amd_flash";
static inline __u32 wide_read(struct map_info *map, __u32 addr) static inline __u32 wide_read(struct map_info *map, __u32 addr)
{ {
if (map->buswidth == 1) { if (map->buswidth == 1) {
......
...@@ -331,13 +331,6 @@ read_pri_intelext(struct map_info *map, __u16 adr) ...@@ -331,13 +331,6 @@ read_pri_intelext(struct map_info *map, __u16 adr)
return extp; return extp;
} }
/* This routine is made available to other mtd code via
* inter_module_register. It must only be accessed through
* inter_module_get which will bump the use count of this module. The
* addresses passed back in cfi are valid as long as the use count of
* this module is non-zero, i.e. between inter_module_get and
* inter_module_put. Keith Owens <kaos@ocs.com.au> 29 Oct 2000.
*/
struct mtd_info *cfi_cmdset_0001(struct map_info *map, int primary) struct mtd_info *cfi_cmdset_0001(struct map_info *map, int primary)
{ {
struct cfi_private *cfi = map->fldrv_priv; struct cfi_private *cfi = map->fldrv_priv;
...@@ -415,6 +408,11 @@ struct mtd_info *cfi_cmdset_0001(struct map_info *map, int primary) ...@@ -415,6 +408,11 @@ struct mtd_info *cfi_cmdset_0001(struct map_info *map, int primary)
return cfi_intelext_setup(mtd); return cfi_intelext_setup(mtd);
} }
struct mtd_info *cfi_cmdset_0003(struct map_info *map, int primary) __attribute__((alias("cfi_cmdset_0001")));
struct mtd_info *cfi_cmdset_0200(struct map_info *map, int primary) __attribute__((alias("cfi_cmdset_0001")));
EXPORT_SYMBOL_GPL(cfi_cmdset_0001);
EXPORT_SYMBOL_GPL(cfi_cmdset_0003);
EXPORT_SYMBOL_GPL(cfi_cmdset_0200);
static struct mtd_info *cfi_intelext_setup(struct mtd_info *mtd) static struct mtd_info *cfi_intelext_setup(struct mtd_info *mtd)
{ {
...@@ -2445,28 +2443,8 @@ static void cfi_intelext_destroy(struct mtd_info *mtd) ...@@ -2445,28 +2443,8 @@ static void cfi_intelext_destroy(struct mtd_info *mtd)
kfree(mtd->eraseregions); kfree(mtd->eraseregions);
} }
static char im_name_0001[] = "cfi_cmdset_0001";
static char im_name_0003[] = "cfi_cmdset_0003";
static char im_name_0200[] = "cfi_cmdset_0200";
static int __init cfi_intelext_init(void)
{
inter_module_register(im_name_0001, THIS_MODULE, &cfi_cmdset_0001);
inter_module_register(im_name_0003, THIS_MODULE, &cfi_cmdset_0001);
inter_module_register(im_name_0200, THIS_MODULE, &cfi_cmdset_0001);
return 0;
}
static void __exit cfi_intelext_exit(void)
{
inter_module_unregister(im_name_0001);
inter_module_unregister(im_name_0003);
inter_module_unregister(im_name_0200);
}
module_init(cfi_intelext_init);
module_exit(cfi_intelext_exit);
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_AUTHOR("David Woodhouse <dwmw2@infradead.org> et al."); MODULE_AUTHOR("David Woodhouse <dwmw2@infradead.org> et al.");
MODULE_DESCRIPTION("MTD chip driver for Intel/Sharp flash chips"); MODULE_DESCRIPTION("MTD chip driver for Intel/Sharp flash chips");
MODULE_ALIAS("cfi_cmdset_0003");
MODULE_ALIAS("cfi_cmdset_0200");
...@@ -326,7 +326,7 @@ struct mtd_info *cfi_cmdset_0002(struct map_info *map, int primary) ...@@ -326,7 +326,7 @@ struct mtd_info *cfi_cmdset_0002(struct map_info *map, int primary)
return cfi_amdstd_setup(mtd); return cfi_amdstd_setup(mtd);
} }
EXPORT_SYMBOL(cfi_cmdset_0002);
static struct mtd_info *cfi_amdstd_setup(struct mtd_info *mtd) static struct mtd_info *cfi_amdstd_setup(struct mtd_info *mtd)
{ {
...@@ -1758,25 +1758,6 @@ static void cfi_amdstd_destroy(struct mtd_info *mtd) ...@@ -1758,25 +1758,6 @@ static void cfi_amdstd_destroy(struct mtd_info *mtd)
kfree(mtd->eraseregions); kfree(mtd->eraseregions);
} }
static char im_name[]="cfi_cmdset_0002";
static int __init cfi_amdstd_init(void)
{
inter_module_register(im_name, THIS_MODULE, &cfi_cmdset_0002);
return 0;
}
static void __exit cfi_amdstd_exit(void)
{
inter_module_unregister(im_name);
}
module_init(cfi_amdstd_init);
module_exit(cfi_amdstd_exit);
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
MODULE_AUTHOR("Crossnet Co. <info@crossnet.co.jp> et al."); MODULE_AUTHOR("Crossnet Co. <info@crossnet.co.jp> et al.");
MODULE_DESCRIPTION("MTD chip driver for AMD/Fujitsu flash chips"); MODULE_DESCRIPTION("MTD chip driver for AMD/Fujitsu flash chips");
...@@ -1410,20 +1410,4 @@ static void cfi_staa_destroy(struct mtd_info *mtd) ...@@ -1410,20 +1410,4 @@ static void cfi_staa_destroy(struct mtd_info *mtd)
kfree(cfi); kfree(cfi);
} }
static char im_name[]="cfi_cmdset_0020";
static int __init cfi_staa_init(void)
{
inter_module_register(im_name, THIS_MODULE, &cfi_cmdset_0020);
return 0;
}
static void __exit cfi_staa_exit(void)
{
inter_module_unregister(im_name);
}
module_init(cfi_staa_init);
module_exit(cfi_staa_exit);
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
...@@ -194,25 +194,28 @@ static inline struct mtd_info *cfi_cmdset_unknown(struct map_info *map, ...@@ -194,25 +194,28 @@ static inline struct mtd_info *cfi_cmdset_unknown(struct map_info *map,
{ {
struct cfi_private *cfi = map->fldrv_priv; struct cfi_private *cfi = map->fldrv_priv;
__u16 type = primary?cfi->cfiq->P_ID:cfi->cfiq->A_ID; __u16 type = primary?cfi->cfiq->P_ID:cfi->cfiq->A_ID;
#if defined(CONFIG_MODULES) && defined(HAVE_INTER_MODULE) #ifdef CONFIG_MODULES
char probename[32]; char probename[32];
cfi_cmdset_fn_t *probe_function; cfi_cmdset_fn_t *probe_function;
sprintf(probename, "cfi_cmdset_%4.4X", type); sprintf(probename, "cfi_cmdset_%4.4X", type);
probe_function = inter_module_get_request(probename, probename); probe_function = (void *)symbol_get(probename);
if (!probe_function) {
request_module(probename);
probe_function = (void *)symbol_get(probename);
}
if (probe_function) { if (probe_function) {
struct mtd_info *mtd; struct mtd_info *mtd;
mtd = (*probe_function)(map, primary); mtd = (*probe_function)(map, primary);
/* If it was happy, it'll have increased its own use count */ /* If it was happy, it'll have increased its own use count */
inter_module_put(probename); symbol_put_addr(probe_function);
return mtd; return mtd;
} }
#endif #endif
printk(KERN_NOTICE "Support for command set %04X not present\n", printk(KERN_NOTICE "Support for command set %04X not present\n", type);
type);
return NULL; return NULL;
} }
...@@ -226,12 +229,8 @@ static struct mtd_info *check_cmd_set(struct map_info *map, int primary) ...@@ -226,12 +229,8 @@ static struct mtd_info *check_cmd_set(struct map_info *map, int primary)
return NULL; return NULL;
switch(type){ switch(type){
/* Urgh. Ifdefs. The version with weak symbols was /* We need these for the !CONFIG_MODULES case,
* _much_ nicer. Shame it didn't seem to work on because symbol_get() doesn't work there */
* anything but x86, really.
* But we can't rely in inter_module_get() because
* that'd mean we depend on link order.
*/
#ifdef CONFIG_MTD_CFI_INTELEXT #ifdef CONFIG_MTD_CFI_INTELEXT
case 0x0001: case 0x0001:
case 0x0003: case 0x0003:
...@@ -246,9 +245,9 @@ static struct mtd_info *check_cmd_set(struct map_info *map, int primary) ...@@ -246,9 +245,9 @@ static struct mtd_info *check_cmd_set(struct map_info *map, int primary)
case 0x0020: case 0x0020:
return cfi_cmdset_0020(map, primary); return cfi_cmdset_0020(map, primary);
#endif #endif
default:
return cfi_cmdset_unknown(map, primary);
} }
return cfi_cmdset_unknown(map, primary);
} }
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment