Remove use of inter_module_crap in NOR flash chip drivers.
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
This commit is contained in:
parent
396674e58f
commit
a15bdeef10
7 changed files with 20 additions and 93 deletions
|
@ -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 @@
|
||||||
#
|
#
|
||||||
# $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 {
|
||||||
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 = {
|
||||||
.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)
|
||||||
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)
|
||||||
|
|
||||||
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)
|
||||||
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)
|
||||||
|
|
||||||
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)
|
||||||
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)
|
||||||
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,
|
||||||
{
|
{
|
||||||
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)
|
||||||
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)
|
||||||
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");
|
||||||
|
|
Loading…
Reference in a new issue