Commit 19841933 authored by Linus Torvalds's avatar Linus Torvalds

Merge bk://linux-mtd.bkbits.net/mtd-2.6

into ppc970.osdl.org:/home/torvalds/v2.6/linux
parents 783707a1 36a938e3
# $Id: Kconfig,v 1.5 2004/06/04 15:59:32 gleixner Exp $ # $Id: Kconfig,v 1.6 2004/08/09 13:19:42 dwmw2 Exp $
menu "Memory Technology Devices (MTD)" menu "Memory Technology Devices (MTD)"
...@@ -28,7 +28,7 @@ config MTD_DEBUG_VERBOSE ...@@ -28,7 +28,7 @@ config MTD_DEBUG_VERBOSE
Determines the verbosity level of the MTD debugging messages. Determines the verbosity level of the MTD debugging messages.
config MTD_PARTITIONS config MTD_PARTITIONS
tristate "MTD partitioning support" bool "MTD partitioning support"
depends on MTD depends on MTD
help help
If you have a device which needs to divide its flash chip(s) up If you have a device which needs to divide its flash chip(s) up
......
# #
# Makefile for the memory technology device drivers. # Makefile for the memory technology device drivers.
# #
# $Id: Makefile.common,v 1.3 2004/07/12 16:07:30 dwmw2 Exp $ # $Id: Makefile.common,v 1.5 2004/08/10 20:51:49 dwmw2 Exp $
# Core functionality. # Core functionality.
obj-$(CONFIG_MTD) += mtdcore.o mtd-y := mtdcore.o
mtd-$(CONFIG_MTD_PARTITIONS) += mtdpart.o
obj-$(CONFIG_MTD) += $(mtd-y)
obj-$(CONFIG_MTD_CONCAT) += mtdconcat.o obj-$(CONFIG_MTD_CONCAT) += mtdconcat.o
obj-$(CONFIG_MTD_PARTITIONS) += mtdpart.o
obj-$(CONFIG_MTD_REDBOOT_PARTS) += redboot.o obj-$(CONFIG_MTD_REDBOOT_PARTS) += redboot.o
obj-$(CONFIG_MTD_CMDLINE_PARTS) += cmdlinepart.o obj-$(CONFIG_MTD_CMDLINE_PARTS) += cmdlinepart.o
obj-$(CONFIG_MTD_AFS_PARTS) += afs.o obj-$(CONFIG_MTD_AFS_PARTS) += afs.o
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* *
* Author: Jonas Holmberg <jonas.holmberg@axis.com> * Author: Jonas Holmberg <jonas.holmberg@axis.com>
* *
* $Id: amd_flash.c,v 1.24 2004/07/12 13:34:30 dwmw2 Exp $ * $Id: amd_flash.c,v 1.25 2004/08/09 13:19:43 dwmw2 Exp $
* *
* Copyright (c) 2001 Axis Communications AB * Copyright (c) 2001 Axis Communications AB
* *
...@@ -1307,9 +1307,7 @@ static int amd_flash_erase(struct mtd_info *mtd, struct erase_info *instr) ...@@ -1307,9 +1307,7 @@ static int amd_flash_erase(struct mtd_info *mtd, struct erase_info *instr)
} }
instr->state = MTD_ERASE_DONE; instr->state = MTD_ERASE_DONE;
if (instr->callback) { mtd_erase_callback(instr);
instr->callback(instr);
}
return 0; return 0;
} }
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* *
* (C) 2000 Red Hat. GPL'd * (C) 2000 Red Hat. GPL'd
* *
* $Id: cfi_cmdset_0001.c,v 1.153 2004/07/12 21:52:20 dwmw2 Exp $ * $Id: cfi_cmdset_0001.c,v 1.154 2004/08/09 13:19:43 dwmw2 Exp $
* *
* *
* 10/10/2000 Nicolas Pitre <nico@cam.org> * 10/10/2000 Nicolas Pitre <nico@cam.org>
...@@ -1554,8 +1554,7 @@ int cfi_intelext_erase_varsize(struct mtd_info *mtd, struct erase_info *instr) ...@@ -1554,8 +1554,7 @@ int cfi_intelext_erase_varsize(struct mtd_info *mtd, struct erase_info *instr)
return ret; return ret;
instr->state = MTD_ERASE_DONE; instr->state = MTD_ERASE_DONE;
if (instr->callback) mtd_erase_callback(instr);
instr->callback(instr);
return 0; return 0;
} }
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
* *
* This code is GPL * This code is GPL
* *
* $Id: cfi_cmdset_0002.c,v 1.103 2004/07/14 16:24:03 dwmw2 Exp $ * $Id: cfi_cmdset_0002.c,v 1.106 2004/08/09 14:02:32 dwmw2 Exp $
* *
*/ */
...@@ -1420,8 +1420,7 @@ int cfi_amdstd_erase_varsize(struct mtd_info *mtd, struct erase_info *instr) ...@@ -1420,8 +1420,7 @@ int cfi_amdstd_erase_varsize(struct mtd_info *mtd, struct erase_info *instr)
return ret; return ret;
instr->state = MTD_ERASE_DONE; instr->state = MTD_ERASE_DONE;
if (instr->callback) mtd_erase_callback(instr);
instr->callback(instr);
return 0; return 0;
} }
...@@ -1444,8 +1443,7 @@ static int cfi_amdstd_erase_chip(struct mtd_info *mtd, struct erase_info *instr) ...@@ -1444,8 +1443,7 @@ static int cfi_amdstd_erase_chip(struct mtd_info *mtd, struct erase_info *instr)
return ret; return ret;
instr->state = MTD_ERASE_DONE; instr->state = MTD_ERASE_DONE;
if (instr->callback) mtd_erase_callback(instr);
instr->callback(instr);
return 0; return 0;
} }
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* *
* (C) 2000 Red Hat. GPL'd * (C) 2000 Red Hat. GPL'd
* *
* $Id: cfi_cmdset_0020.c,v 1.14 2004/07/20 02:44:25 dwmw2 Exp $ * $Id: cfi_cmdset_0020.c,v 1.15 2004/08/09 13:19:43 dwmw2 Exp $
* *
* 10/10/2000 Nicolas Pitre <nico@cam.org> * 10/10/2000 Nicolas Pitre <nico@cam.org>
* - completely revamped method functions so they are aware and * - completely revamped method functions so they are aware and
...@@ -966,8 +966,7 @@ int cfi_staa_erase_varsize(struct mtd_info *mtd, struct erase_info *instr) ...@@ -966,8 +966,7 @@ int cfi_staa_erase_varsize(struct mtd_info *mtd, struct erase_info *instr)
} }
instr->state = MTD_ERASE_DONE; instr->state = MTD_ERASE_DONE;
if (instr->callback) mtd_erase_callback(instr);
instr->callback(instr);
return 0; return 0;
} }
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
* not going to guess how to send commands to them, plus I expect they will * not going to guess how to send commands to them, plus I expect they will
* all speak CFI.. * all speak CFI..
* *
* $Id: jedec.c,v 1.20 2004/07/12 14:03:01 dwmw2 Exp $ * $Id: jedec.c,v 1.21 2004/08/09 13:19:43 dwmw2 Exp $
*/ */
#include <linux/init.h> #include <linux/init.h>
...@@ -780,8 +780,7 @@ static int flash_erase(struct mtd_info *mtd, struct erase_info *instr) ...@@ -780,8 +780,7 @@ static int flash_erase(struct mtd_info *mtd, struct erase_info *instr)
//printk("done\n"); //printk("done\n");
instr->state = MTD_ERASE_DONE; instr->state = MTD_ERASE_DONE;
if (instr->callback) mtd_erase_callback(instr);
instr->callback(instr);
return 0; return 0;
#undef flread #undef flread
......
/* /*
* Common code to handle map devices which are simple RAM * Common code to handle map devices which are simple RAM
* (C) 2000 Red Hat. GPL'd. * (C) 2000 Red Hat. GPL'd.
* $Id: map_ram.c,v 1.19 2004/07/12 21:58:44 dwmw2 Exp $ * $Id: map_ram.c,v 1.20 2004/08/09 13:19:43 dwmw2 Exp $
*/ */
#include <linux/module.h> #include <linux/module.h>
...@@ -114,8 +114,7 @@ static int mapram_erase (struct mtd_info *mtd, struct erase_info *instr) ...@@ -114,8 +114,7 @@ static int mapram_erase (struct mtd_info *mtd, struct erase_info *instr)
instr->state = MTD_ERASE_DONE; instr->state = MTD_ERASE_DONE;
if (instr->callback) mtd_erase_callback(instr);
instr->callback(instr);
return 0; return 0;
} }
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* Copyright 2000,2001 David A. Schleef <ds@schleef.org> * Copyright 2000,2001 David A. Schleef <ds@schleef.org>
* 2000,2001 Lineo, Inc. * 2000,2001 Lineo, Inc.
* *
* $Id: sharp.c,v 1.13 2004/07/12 14:06:34 dwmw2 Exp $ * $Id: sharp.c,v 1.14 2004/08/09 13:19:43 dwmw2 Exp $
* *
* Devices supported: * Devices supported:
* LH28F016SCT Symmetrical block flash memory, 2Mx8 * LH28F016SCT Symmetrical block flash memory, 2Mx8
...@@ -425,8 +425,7 @@ static int sharp_erase(struct mtd_info *mtd, struct erase_info *instr) ...@@ -425,8 +425,7 @@ static int sharp_erase(struct mtd_info *mtd, struct erase_info *instr)
} }
instr->state = MTD_ERASE_DONE; instr->state = MTD_ERASE_DONE;
if(instr->callback) mtd_erase_callback(instr);
instr->callback(instr);
return 0; return 0;
} }
......
# drivers/mtd/maps/Kconfig # drivers/mtd/maps/Kconfig
# $Id: Kconfig,v 1.10 2004/07/15 00:34:49 dwmw2 Exp $ # $Id: Kconfig,v 1.12 2004/08/10 13:12:18 dwmw2 Exp $
menu "Self-contained MTD device drivers" menu "Self-contained MTD device drivers"
depends on MTD!=n depends on MTD!=n
...@@ -128,7 +128,7 @@ config MTD_BLKMTD ...@@ -128,7 +128,7 @@ config MTD_BLKMTD
comment "Disk-On-Chip Device Drivers" comment "Disk-On-Chip Device Drivers"
config MTD_DOC2000 config MTD_DOC2000
tristate "M-Systems Disk-On-Chip 2000 and Millennium" tristate "M-Systems Disk-On-Chip 2000 and Millennium (DEPRECATED)"
depends on MTD depends on MTD
---help--- ---help---
This provides an MTD device driver for the M-Systems DiskOnChip This provides an MTD device driver for the M-Systems DiskOnChip
...@@ -144,8 +144,12 @@ config MTD_DOC2000 ...@@ -144,8 +144,12 @@ config MTD_DOC2000
emulate a block device by using a kind of file system on the flash emulate a block device by using a kind of file system on the flash
chips. chips.
NOTE: This driver is deprecated and will probably be removed soon.
Please try the new DiskOnChip driver under "NAND Flash Device
Drivers".
config MTD_DOC2001 config MTD_DOC2001
tristate "M-Systems Disk-On-Chip Millennium-only alternative driver (see help)" tristate "M-Systems Disk-On-Chip Millennium-only alternative driver (DEPRECATED)"
depends on MTD depends on MTD
---help--- ---help---
This provides an alternative MTD device driver for the M-Systems This provides an alternative MTD device driver for the M-Systems
...@@ -160,6 +164,10 @@ config MTD_DOC2001 ...@@ -160,6 +164,10 @@ config MTD_DOC2001
emulate a block device by using a kind of file system on the flash emulate a block device by using a kind of file system on the flash
chips. chips.
NOTE: This driver is deprecated and will probably be removed soon.
Please try the new DiskOnChip driver under "NAND Flash Device
Drivers".
config MTD_DOC2001PLUS config MTD_DOC2001PLUS
tristate "M-Systems Disk-On-Chip Millennium Plus" tristate "M-Systems Disk-On-Chip Millennium Plus"
depends on MTD depends on MTD
...@@ -172,19 +180,23 @@ config MTD_DOC2001PLUS ...@@ -172,19 +180,23 @@ config MTD_DOC2001PLUS
to emulate a block device by using a kind of file system on the to emulate a block device by using a kind of file system on the
flash chips. flash chips.
NOTE: This driver will soon be replaced by the new DiskOnChip driver
under "NAND Flash Device Drivers" (currently that driver does not
support all Millennium Plus devices).
config MTD_DOCPROBE config MTD_DOCPROBE
tristate tristate
default m if MTD_DOC2001!=y && MTD_DOC2000!=y && MTD_DOC2001PLUS!=y && (MTD_DOC2001=m || MTD_DOC2000=m || MTD_DOC2001PLUS=m) default m if MTD_DOC2001!=y && MTD_DOC2000!=y && MTD_DOC2001PLUS!=y && (MTD_DOC2001=m || MTD_DOC2000=m || MTD_DOC2001PLUS=m)
default y if MTD_DOC2001=y || MTD_DOC2000=y || MTD_DOC2001PLUS=y default y if MTD_DOC2001=y || MTD_DOC2000=y || MTD_DOC2001PLUS=y
help help
This isn't a real config option, it's derived. This isn't a real config option; it's derived.
config MTD_DOCECC config MTD_DOCECC
tristate tristate
default m if MTD_DOCPROBE!=y && MTD_NAND_DISKONCHIP!=y && (MTD_DOCPROBE=m || MTD_NAND_DISKONCHIP=m) default m if MTD_DOCPROBE!=y && MTD_NAND_DISKONCHIP!=y && (MTD_DOCPROBE=m || MTD_NAND_DISKONCHIP=m)
default y if MTD_DOCPROBE=y || MTD_NAND_DISKONCHIP=y default y if MTD_DOCPROBE=y || MTD_NAND_DISKONCHIP=y
help help
This isn't a real config option, it's derived. This isn't a real config option; it's derived.
config MTD_DOCPROBE_ADVANCED config MTD_DOCPROBE_ADVANCED
bool "Advanced detection options for DiskOnChip" bool "Advanced detection options for DiskOnChip"
......
/* /*
* $Id: blkmtd-25.c,v 1.6 2004/07/15 15:09:15 dwmw2 Exp $ * $Id: blkmtd.c,v 1.23 2004/08/09 14:03:19 dwmw2 Exp $
* *
* blkmtd.c - use a block device as a fake MTD * blkmtd.c - use a block device as a fake MTD
* *
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
/* Default erase size in K, always make it a multiple of PAGE_SIZE */ /* Default erase size in K, always make it a multiple of PAGE_SIZE */
#define CONFIG_MTD_BLKDEV_ERASESIZE (128 << 10) /* 128KiB */ #define CONFIG_MTD_BLKDEV_ERASESIZE (128 << 10) /* 128KiB */
#define VERSION "$Revision: 1.6 $" #define VERSION "$Revision: 1.23 $"
/* Info for the block device */ /* Info for the block device */
struct blkmtd_dev { struct blkmtd_dev {
...@@ -435,9 +435,7 @@ static int blkmtd_erase(struct mtd_info *mtd, struct erase_info *instr) ...@@ -435,9 +435,7 @@ static int blkmtd_erase(struct mtd_info *mtd, struct erase_info *instr)
} }
DEBUG(3, "blkmtd: erase: checking callback\n"); DEBUG(3, "blkmtd: erase: checking callback\n");
if (instr->callback) { mtd_erase_callback(instr);
(*(instr->callback))(instr);
}
DEBUG(2, "blkmtd: erase: finished (err = %d)\n", err); DEBUG(2, "blkmtd: erase: finished (err = %d)\n", err);
return err; return err;
} }
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* (c) 1999 Machine Vision Holdings, Inc. * (c) 1999 Machine Vision Holdings, Inc.
* (c) 1999, 2000 David Woodhouse <dwmw2@infradead.org> * (c) 1999, 2000 David Woodhouse <dwmw2@infradead.org>
* *
* $Id: doc2000.c,v 1.60 2004/04/07 08:30:04 gleixner Exp $ * $Id: doc2000.c,v 1.62 2004/08/09 14:04:02 dwmw2 Exp $
*/ */
#include <linux/kernel.h> #include <linux/kernel.h>
...@@ -1277,8 +1277,7 @@ static int doc_erase(struct mtd_info *mtd, struct erase_info *instr) ...@@ -1277,8 +1277,7 @@ static int doc_erase(struct mtd_info *mtd, struct erase_info *instr)
instr->state = MTD_ERASE_DONE; instr->state = MTD_ERASE_DONE;
callback: callback:
if (instr->callback) mtd_erase_callback(instr);
instr->callback(instr);
up(&this->lock); up(&this->lock);
return 0; return 0;
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* (c) 1999 Machine Vision Holdings, Inc. * (c) 1999 Machine Vision Holdings, Inc.
* (c) 1999, 2000 David Woodhouse <dwmw2@infradead.org> * (c) 1999, 2000 David Woodhouse <dwmw2@infradead.org>
* *
* $Id: doc2001.c,v 1.42 2004/04/04 12:36:45 gleixner Exp $ * $Id: doc2001.c,v 1.44 2004/08/09 14:04:24 dwmw2 Exp $
*/ */
#include <linux/kernel.h> #include <linux/kernel.h>
...@@ -845,8 +845,7 @@ int doc_erase (struct mtd_info *mtd, struct erase_info *instr) ...@@ -845,8 +845,7 @@ int doc_erase (struct mtd_info *mtd, struct erase_info *instr)
instr->state = MTD_ERASE_DONE; instr->state = MTD_ERASE_DONE;
dummy = ReadDOC(docptr, LastDataRead); dummy = ReadDOC(docptr, LastDataRead);
if (instr->callback) mtd_erase_callback(instr);
instr->callback(instr);
return 0; return 0;
} }
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* (c) 1999 Machine Vision Holdings, Inc. * (c) 1999 Machine Vision Holdings, Inc.
* (c) 1999, 2000 David Woodhouse <dwmw2@infradead.org> * (c) 1999, 2000 David Woodhouse <dwmw2@infradead.org>
* *
* $Id: doc2001plus.c,v 1.8 2004/04/04 12:36:45 gleixner Exp $ * $Id: doc2001plus.c,v 1.9 2004/08/09 13:19:44 dwmw2 Exp $
* *
* Released under GPL * Released under GPL
*/ */
...@@ -1111,8 +1111,7 @@ int doc_erase(struct mtd_info *mtd, struct erase_info *instr) ...@@ -1111,8 +1111,7 @@ int doc_erase(struct mtd_info *mtd, struct erase_info *instr)
/* Disable flash internally */ /* Disable flash internally */
WriteDOC(0, docptr, Mplus_FlashSelect); WriteDOC(0, docptr, Mplus_FlashSelect);
if (instr->callback) mtd_erase_callback(instr);
instr->callback(instr);
return 0; return 0;
} }
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
/* /*
* MTD driver for the 28F160F3 Flash Memory (non-CFI) on LART. * MTD driver for the 28F160F3 Flash Memory (non-CFI) on LART.
* *
* $Id: lart.c,v 1.6 2004/07/14 17:21:38 dwmw2 Exp $ * $Id: lart.c,v 1.7 2004/08/09 13:19:44 dwmw2 Exp $
* *
* Author: Abraham vd Merwe <abraham@2d3d.co.za> * Author: Abraham vd Merwe <abraham@2d3d.co.za>
* *
...@@ -433,7 +433,7 @@ static int flash_erase (struct mtd_info *mtd,struct erase_info *instr) ...@@ -433,7 +433,7 @@ static int flash_erase (struct mtd_info *mtd,struct erase_info *instr)
} }
instr->state = MTD_ERASE_DONE; instr->state = MTD_ERASE_DONE;
if (instr->callback) instr->callback (instr); mtd_erase_callback(instr);
return (0); return (0);
} }
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* as published by the Free Software Foundation; either version * as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version. * 2 of the License, or (at your option) any later version.
* *
* $Id: ms02-nv.c,v 1.6 2003/08/19 09:25:36 dwmw2 Exp $ * $Id: ms02-nv.c,v 1.7 2004/07/29 14:16:45 macro Exp $
*/ */
#include <linux/init.h> #include <linux/init.h>
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
static char version[] __initdata = static char version[] __initdata =
"ms02-nv.c: v.1.0.0 13 Aug 2001 Maciej W. Rozycki.\n"; "ms02-nv.c: v.1.0.0 13 Aug 2001 Maciej W. Rozycki.\n";
MODULE_AUTHOR("Maciej W. Rozycki <macro@ds2.pg.gda.pl>"); MODULE_AUTHOR("Maciej W. Rozycki <macro@linux-mips.org>");
MODULE_DESCRIPTION("DEC MS02-NV NVRAM module driver"); MODULE_DESCRIPTION("DEC MS02-NV NVRAM module driver");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
......
/* /*
* mtdram - a test mtd device * mtdram - a test mtd device
* $Id: mtdram.c,v 1.32 2003/05/21 15:15:07 dwmw2 Exp $ * $Id: mtdram.c,v 1.33 2004/08/09 13:19:44 dwmw2 Exp $
* Author: Alexander Larsson <alex@cendio.se> * Author: Alexander Larsson <alex@cendio.se>
* *
* Copyright (c) 1999 Alexander Larsson <alex@cendio.se> * Copyright (c) 1999 Alexander Larsson <alex@cendio.se>
...@@ -57,9 +57,8 @@ ram_erase(struct mtd_info *mtd, struct erase_info *instr) ...@@ -57,9 +57,8 @@ ram_erase(struct mtd_info *mtd, struct erase_info *instr)
memset((char *)mtd->priv + instr->addr, 0xff, instr->len); memset((char *)mtd->priv + instr->addr, 0xff, instr->len);
instr->state = MTD_ERASE_DONE; instr->state = MTD_ERASE_DONE;
mtd_erase_callback(instr);
if (instr->callback)
(*(instr->callback))(instr);
return 0; return 0;
} }
......
/** /**
* *
* $Id: phram.c,v 1.1 2003/08/21 17:52:30 joern Exp $ * $Id: phram.c,v 1.2 2004/08/09 13:19:44 dwmw2 Exp $
* *
* Copyright (c) Jochen Schaeuble <psionic@psionic.de> * Copyright (c) Jochen Schaeuble <psionic@psionic.de>
* 07/2003 rewritten by Joern Engel <joern@wh.fh-wedel.de> * 07/2003 rewritten by Joern Engel <joern@wh.fh-wedel.de>
...@@ -55,10 +55,7 @@ int phram_erase(struct mtd_info *mtd, struct erase_info *instr) ...@@ -55,10 +55,7 @@ int phram_erase(struct mtd_info *mtd, struct erase_info *instr)
instr->state = MTD_ERASE_DONE; instr->state = MTD_ERASE_DONE;
if (instr->callback) mtd_erase_callback(instr);
(*(instr->callback))(instr);
else
kfree(instr);
return 0; return 0;
} }
......
/* /*
* $Id: pmc551.c,v 1.27 2004/07/20 02:44:26 dwmw2 Exp $ * $Id: pmc551.c,v 1.28 2004/08/09 13:19:44 dwmw2 Exp $
* *
* PMC551 PCI Mezzanine Ram Device * PMC551 PCI Mezzanine Ram Device
* *
...@@ -169,9 +169,7 @@ static int pmc551_erase (struct mtd_info *mtd, struct erase_info *instr) ...@@ -169,9 +169,7 @@ static int pmc551_erase (struct mtd_info *mtd, struct erase_info *instr)
printk(KERN_DEBUG "pmc551_erase() done\n"); printk(KERN_DEBUG "pmc551_erase() done\n");
#endif #endif
if (instr->callback) { mtd_erase_callback(instr);
(*(instr->callback))(instr);
}
return 0; return 0;
} }
......
/*====================================================================== /*======================================================================
$Id: slram.c,v 1.30 2003/05/20 21:03:08 dwmw2 Exp $ $Id: slram.c,v 1.31 2004/08/09 13:19:44 dwmw2 Exp $
This driver provides a method to access memory not used by the kernel This driver provides a method to access memory not used by the kernel
itself (i.e. if the kernel commandline mem=xxx is used). To actually itself (i.e. if the kernel commandline mem=xxx is used). To actually
...@@ -98,12 +98,7 @@ int slram_erase(struct mtd_info *mtd, struct erase_info *instr) ...@@ -98,12 +98,7 @@ int slram_erase(struct mtd_info *mtd, struct erase_info *instr)
instr->state = MTD_ERASE_DONE; instr->state = MTD_ERASE_DONE;
if (instr->callback) { mtd_erase_callback(instr);
(*(instr->callback))(instr);
}
else {
kfree(instr);
}
return(0); return(0);
} }
......
/* This version ported to the Linux-MTD system by dwmw2@infradead.org /* This version ported to the Linux-MTD system by dwmw2@infradead.org
* $Id: ftl.c,v 1.52 2003/08/11 09:00:44 dwmw2 Exp $ * $Id: ftl.c,v 1.53 2004/08/09 13:55:43 dwmw2 Exp $
* *
* Fixes: Arnaldo Carvalho de Melo <acme@conectiva.com.br> * Fixes: Arnaldo Carvalho de Melo <acme@conectiva.com.br>
* - fixes some leaks on failure in build_maps and ftl_notify_add, cleanups * - fixes some leaks on failure in build_maps and ftl_notify_add, cleanups
...@@ -1094,7 +1094,7 @@ struct mtd_blktrans_ops ftl_tr = { ...@@ -1094,7 +1094,7 @@ struct mtd_blktrans_ops ftl_tr = {
int init_ftl(void) int init_ftl(void)
{ {
DEBUG(0, "$Id: ftl.c,v 1.52 2003/08/11 09:00:44 dwmw2 Exp $\n"); DEBUG(0, "$Id: ftl.c,v 1.53 2004/08/09 13:55:43 dwmw2 Exp $\n");
return register_mtd_blktrans(&ftl_tr); return register_mtd_blktrans(&ftl_tr);
} }
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* (c) 1999 Machine Vision Holdings, Inc. * (c) 1999 Machine Vision Holdings, Inc.
* Author: David Woodhouse <dwmw2@infradead.org> * Author: David Woodhouse <dwmw2@infradead.org>
* *
* $Id: inftlcore.c,v 1.16 2004/07/12 12:34:58 dwmw2 Exp $ * $Id: inftlcore.c,v 1.17 2004/08/09 13:56:48 dwmw2 Exp $
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
...@@ -893,7 +893,7 @@ extern char inftlmountrev[]; ...@@ -893,7 +893,7 @@ extern char inftlmountrev[];
int __init init_inftl(void) int __init init_inftl(void)
{ {
printk(KERN_INFO "INFTL: inftlcore.c $Revision: 1.16 $, " printk(KERN_INFO "INFTL: inftlcore.c $Revision: 1.17 $, "
"inftlmount.c %s\n", inftlmountrev); "inftlmount.c %s\n", inftlmountrev);
return register_mtd_blktrans(&inftl_tr); return register_mtd_blktrans(&inftl_tr);
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* Author: Fabrice Bellard (fabrice.bellard@netgem.com) * Author: Fabrice Bellard (fabrice.bellard@netgem.com)
* Copyright (C) 2000 Netgem S.A. * Copyright (C) 2000 Netgem S.A.
* *
* $Id: inftlmount.c,v 1.13 2004/06/28 16:06:36 dbrown Exp $ * $Id: inftlmount.c,v 1.14 2004/08/09 13:57:42 dwmw2 Exp $
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
#include <linux/mtd/inftl.h> #include <linux/mtd/inftl.h>
#include <linux/mtd/compatmac.h> #include <linux/mtd/compatmac.h>
char inftlmountrev[]="$Revision: 1.13 $"; char inftlmountrev[]="$Revision: 1.14 $";
/* /*
* find_boot_record: Find the INFTL Media Header and its Spare copy which * find_boot_record: Find the INFTL Media Header and its Spare copy which
......
# drivers/mtd/maps/Kconfig # drivers/mtd/maps/Kconfig
# $Id: Kconfig,v 1.29 2004/07/15 15:29:17 dwmw2 Exp $ # $Id: Kconfig,v 1.30 2004/07/21 00:16:14 jwboyer Exp $
menu "Mapping drivers for chip access" menu "Mapping drivers for chip access"
depends on MTD!=n depends on MTD!=n
...@@ -19,7 +19,8 @@ config MTD_PHYSMAP ...@@ -19,7 +19,8 @@ config MTD_PHYSMAP
command set driver code to communicate with flash chips which command set driver code to communicate with flash chips which
are mapped physically into the CPU's memory. You will need to are mapped physically into the CPU's memory. You will need to
configure the physical address and size of the flash chips on configure the physical address and size of the flash chips on
your particular board as well as the bus width. your particular board as well as the bus width, either statically
with config options or at run-time.
config MTD_PHYSMAP_START config MTD_PHYSMAP_START
hex "Physical start address of flash mapping" hex "Physical start address of flash mapping"
...@@ -30,6 +31,8 @@ config MTD_PHYSMAP_START ...@@ -30,6 +31,8 @@ config MTD_PHYSMAP_START
are mapped on your particular target board. Refer to the are mapped on your particular target board. Refer to the
memory map which should hopefully be in the documentation for memory map which should hopefully be in the documentation for
your board. your board.
Ignore this option if you use run-time physmap configuration
(i.e., run-time calling physmap_configure()).
config MTD_PHYSMAP_LEN config MTD_PHYSMAP_LEN
hex "Physical length of flash mapping" hex "Physical length of flash mapping"
...@@ -42,9 +45,11 @@ config MTD_PHYSMAP_LEN ...@@ -42,9 +45,11 @@ config MTD_PHYSMAP_LEN
than the total amount of flash present. Refer to the memory than the total amount of flash present. Refer to the memory
map which should hopefully be in the documentation for your map which should hopefully be in the documentation for your
board. board.
Ignore this option if you use run-time physmap configuration
(i.e., run-time calling physmap_configure()).
config MTD_PHYSMAP_BUSWIDTH config MTD_PHYSMAP_BANKWIDTH
int "Bus width in octets" int "Bank width in octets"
depends on MTD_PHYSMAP depends on MTD_PHYSMAP
default "2" default "2"
help help
...@@ -52,6 +57,8 @@ config MTD_PHYSMAP_BUSWIDTH ...@@ -52,6 +57,8 @@ config MTD_PHYSMAP_BUSWIDTH
in octets. For example, if you have a data bus width of 32 in octets. For example, if you have a data bus width of 32
bits, you would set the bus width octect value to 4. This is bits, you would set the bus width octect value to 4. This is
used internally by the CFI drivers. used internally by the CFI drivers.
Ignore this option if you use run-time physmap configuration
(i.e., run-time calling physmap_configure()).
config MTD_SUN_UFLASH config MTD_SUN_UFLASH
tristate "Sun Microsystems userflash support" tristate "Sun Microsystems userflash support"
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* ichxrom.c * ichxrom.c
* *
* Normal mappings of chips in physical memory * Normal mappings of chips in physical memory
* $Id: ichxrom.c,v 1.7 2004/07/14 18:14:09 eric Exp $ * $Id: ichxrom.c,v 1.8 2004/07/16 17:43:11 dwmw2 Exp $
*/ */
#include <linux/module.h> #include <linux/module.h>
......
/* /*
* $Id: physmap.c,v 1.33 2004/07/12 14:37:24 dwmw2 Exp $ * $Id: physmap.c,v 1.34 2004/07/21 00:16:14 jwboyer Exp $
* *
* Normal mappings of chips in physical memory * Normal mappings of chips in physical memory
* *
...@@ -22,7 +22,12 @@ ...@@ -22,7 +22,12 @@
static struct mtd_info *mymtd; static struct mtd_info *mymtd;
struct map_info physmap_map = {.name = "phys_mapped_flash"}; struct map_info physmap_map = {
.name = "phys_mapped_flash",
.phys = CONFIG_MTD_PHYSMAP_START,
.size = CONFIG_MTD_PHYSMAP_LEN,
.bankwidth = CONFIG_MTD_PHYSMAP_BANKWIDTH,
};
#ifdef CONFIG_MTD_PARTITIONS #ifdef CONFIG_MTD_PARTITIONS
static struct mtd_partition *mtd_parts; static struct mtd_partition *mtd_parts;
......
/* /*
* $Id: mtdchar.c,v 1.62 2004/07/14 13:20:42 dwmw2 Exp $ * $Id: mtdchar.c,v 1.64 2004/08/09 13:59:46 dwmw2 Exp $
* *
* Character-device access to raw MTD devices. * Character-device access to raw MTD devices.
* *
...@@ -262,7 +262,7 @@ static ssize_t mtd_write(struct file *file, const char __user *buf, size_t count ...@@ -262,7 +262,7 @@ static ssize_t mtd_write(struct file *file, const char __user *buf, size_t count
IOCTL calls for getting device parameters. IOCTL calls for getting device parameters.
======================================================================*/ ======================================================================*/
static void mtd_erase_callback (struct erase_info *instr) static void mtdchar_erase_callback (struct erase_info *instr)
{ {
wake_up((wait_queue_head_t *)instr->priv); wake_up((wait_queue_head_t *)instr->priv);
} }
...@@ -336,7 +336,7 @@ static int mtd_ioctl(struct inode *inode, struct file *file, ...@@ -336,7 +336,7 @@ static int mtd_ioctl(struct inode *inode, struct file *file,
return -EFAULT; return -EFAULT;
} }
erase->mtd = mtd; erase->mtd = mtd;
erase->callback = mtd_erase_callback; erase->callback = mtdchar_erase_callback;
erase->priv = (unsigned long)&waitq; erase->priv = (unsigned long)&waitq;
/* /*
...@@ -511,7 +511,6 @@ static int mtd_ioctl(struct inode *inode, struct file *file, ...@@ -511,7 +511,6 @@ static int mtd_ioctl(struct inode *inode, struct file *file,
} }
default: default:
DEBUG(MTD_DEBUG_LEVEL0, "Invalid ioctl %x (MEMGETINFO = %lx)\n", cmd, (unsigned long)MEMGETINFO);
ret = -ENOTTY; ret = -ENOTTY;
} }
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
* *
* This code is GPL * This code is GPL
* *
* $Id: mtdpart.c,v 1.46 2004/07/12 13:28:07 dwmw2 Exp $ * $Id: mtdpart.c,v 1.50 2004/08/10 16:18:34 dwmw2 Exp $
* *
* 02-21-2002 Thomas Gleixner <gleixner@autronix.de> * 02-21-2002 Thomas Gleixner <gleixner@autronix.de>
* added support for read_oob, write_oob * added support for read_oob, write_oob
...@@ -246,11 +246,23 @@ static int part_erase (struct mtd_info *mtd, struct erase_info *instr) ...@@ -246,11 +246,23 @@ static int part_erase (struct mtd_info *mtd, struct erase_info *instr)
return -EINVAL; return -EINVAL;
instr->addr += part->offset; instr->addr += part->offset;
ret = part->master->erase(part->master, instr); ret = part->master->erase(part->master, instr);
if (instr->fail_addr != 0xffffffff)
instr->fail_addr -= part->offset;
return ret; return ret;
} }
void mtd_erase_callback(struct erase_info *instr)
{
if (instr->mtd->erase == part_erase) {
struct mtd_part *part = PART(instr->mtd);
if (instr->fail_addr != 0xffffffff)
instr->fail_addr -= part->offset;
instr->addr -= part->offset;
}
if (instr->callback)
instr->callback(instr);
}
EXPORT_SYMBOL_GPL(mtd_erase_callback);
static int part_lock (struct mtd_info *mtd, loff_t ofs, size_t len) static int part_lock (struct mtd_info *mtd, loff_t ofs, size_t len)
{ {
struct mtd_part *part = PART(mtd); struct mtd_part *part = PART(mtd);
......
# drivers/mtd/nand/Kconfig # drivers/mtd/nand/Kconfig
# $Id: Kconfig,v 1.14 2004/07/13 00:14:35 dbrown Exp $ # $Id: Kconfig,v 1.17 2004/08/10 14:24:07 dwmw2 Exp $
menu "NAND Flash Device Drivers" menu "NAND Flash Device Drivers"
depends on MTD!=n depends on MTD!=n
...@@ -81,15 +81,51 @@ config MTD_NAND_PPCHAMELEONEVB ...@@ -81,15 +81,51 @@ config MTD_NAND_PPCHAMELEONEVB
This enables the NAND flash driver on the PPChameleon EVB Board. This enables the NAND flash driver on the PPChameleon EVB Board.
config MTD_NAND_DISKONCHIP config MTD_NAND_DISKONCHIP
tristate "DiskOnChip 2000 and Millennium (NAND reimplementation) (EXPERIMENTAL)" tristate "DiskOnChip 2000, Millennium and Millennium Plus (NAND reimplementation) (EXPERIMENTAL)"
depends on MTD_NAND && EXPERIMENTAL depends on MTD_NAND && EXPERIMENTAL
help help
This is a reimplementation of M-Systems DiskOnChip 2000 and This is a reimplementation of M-Systems DiskOnChip 2000,
Millennium as a standard NAND device driver, as opposed to the Millennium and Millennium Plus as a standard NAND device driver,
earlier self-contained MTD device drivers. as opposed to the earlier self-contained MTD device drivers.
This should enable, among other things, proper JFFS2 operation on This should enable, among other things, proper JFFS2 operation on
these devices. these devices.
config MTD_NAND_DISKONCHIP_PROBE_ADVANCED
bool "Advanced detection options for DiskOnChip"
depends on MTD_NAND_DISKONCHIP
help
This option allows you to specify nonstandard address at which to
probe for a DiskOnChip, or to change the detection options. You
are unlikely to need any of this unless you are using LinuxBIOS.
Say 'N'.
config MTD_NAND_DISKONCHIP_PROBE_ADDRESS
hex "Physical address of DiskOnChip" if MTD_NAND_DISKONCHIP_PROBE_ADVANCED
depends on MTD_NAND_DISKONCHIP
default "0"
---help---
By default, the probe for DiskOnChip devices will look for a
DiskOnChip at every multiple of 0x2000 between 0xC8000 and 0xEE000.
This option allows you to specify a single address at which to probe
for the device, which is useful if you have other devices in that
range which get upset when they are probed.
(Note that on PowerPC, the normal probe will only check at
0xE4000000.)
Normally, you should leave this set to zero, to allow the probe at
the normal addresses.
config MTD_NAND_DISKONCHIP_PROBE_HIGH
bool "Probe high addresses"
depends on MTD_NAND_DISKONCHIP_PROBE_ADVANCED
help
By default, the probe for DiskOnChip devices will look for a
DiskOnChip at every multiple of 0x2000 between 0xC8000 and 0xEE000.
This option changes to make it probe between 0xFFFC8000 and
0xFFFEE000. Unless you are using LinuxBIOS, this is unlikely to be
useful to you. Say 'N'.
config MTD_NAND_DISKONCHIP_BBTWRITE config MTD_NAND_DISKONCHIP_BBTWRITE
bool "Allow BBT writes on DiskOnChip Millennium and 2000TSOP" bool "Allow BBT writes on DiskOnChip Millennium and 2000TSOP"
depends on MTD_NAND_DISKONCHIP depends on MTD_NAND_DISKONCHIP
......
This diff is collapsed.
...@@ -37,7 +37,7 @@ ...@@ -37,7 +37,7 @@
* The AG-AND chips have nice features for speed improvement, * The AG-AND chips have nice features for speed improvement,
* which are not supported yet. Read / program 4 pages in one go. * which are not supported yet. Read / program 4 pages in one go.
* *
* $Id: nand_base.c,v 1.113 2004/07/14 16:31:31 gleixner Exp $ * $Id: nand_base.c,v 1.115 2004/08/09 13:19:45 dwmw2 Exp $
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as * it under the terms of the GNU General Public License version 2 as
...@@ -58,7 +58,7 @@ ...@@ -58,7 +58,7 @@
#include <linux/bitops.h> #include <linux/bitops.h>
#include <asm/io.h> #include <asm/io.h>
#if defined(CONFIG_MTD_PARTITIONS) || defined(CONFIG_MTD_PARTITIONS_MODULE) #ifdef CONFIG_MTD_PARTITIONS
#include <linux/mtd/partitions.h> #include <linux/mtd/partitions.h>
#endif #endif
...@@ -1284,12 +1284,12 @@ static int nand_read_ecc (struct mtd_info *mtd, loff_t from, size_t len, ...@@ -1284,12 +1284,12 @@ static int nand_read_ecc (struct mtd_info *mtd, loff_t from, size_t len,
nand_release_chip(mtd); nand_release_chip(mtd);
/* /*
* Return success, if no ECC failures, else -EIO * Return success, if no ECC failures, else -EBADMSG
* fs driver will take care of that, because * fs driver will take care of that, because
* retlen == desired len and result == -EIO * retlen == desired len and result == -EBADMSG
*/ */
*retlen = read; *retlen = read;
return ecc_failed ? -EIO : 0; return ecc_failed ? -EBADMSG : 0;
} }
/** /**
...@@ -2108,8 +2108,8 @@ int nand_erase_nand (struct mtd_info *mtd, struct erase_info *instr, int allowbb ...@@ -2108,8 +2108,8 @@ int nand_erase_nand (struct mtd_info *mtd, struct erase_info *instr, int allowbb
ret = instr->state == MTD_ERASE_DONE ? 0 : -EIO; ret = instr->state == MTD_ERASE_DONE ? 0 : -EIO;
/* Do call back function */ /* Do call back function */
if (!ret && instr->callback) if (!ret)
instr->callback (instr); mtd_erase_callback(instr);
/* Deselect and wake up anyone waiting on the device */ /* Deselect and wake up anyone waiting on the device */
nand_release_chip(mtd); nand_release_chip(mtd);
...@@ -2555,11 +2555,11 @@ void nand_release (struct mtd_info *mtd) ...@@ -2555,11 +2555,11 @@ void nand_release (struct mtd_info *mtd)
{ {
struct nand_chip *this = mtd->priv; struct nand_chip *this = mtd->priv;
#if defined(CONFIG_MTD_PARTITIONS) || defined(CONFIG_MTD_PARTITIONS_MODULE) #ifdef CONFIG_MTD_PARTITIONS
/* Unregister partitions */ /* Deregister partitions */
del_mtd_partitions (mtd); del_mtd_partitions (mtd);
#endif #endif
/* Unregister the device */ /* Deregister the device */
del_mtd_device (mtd); del_mtd_device (mtd);
/* Free bad block table memory, if allocated */ /* Free bad block table memory, if allocated */
......
/* /*
* $Id: redboot.c,v 1.13 2004/04/01 10:17:40 gthomas Exp $ * $Id: redboot.c,v 1.15 2004/08/10 07:55:16 dwmw2 Exp $
* *
* Parse RedBoot-style Flash Image System (FIS) tables and * Parse RedBoot-style Flash Image System (FIS) tables and
* produce a Linux partition array to match. * produce a Linux partition array to match.
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/vmalloc.h>
#include <linux/mtd/mtd.h> #include <linux/mtd/mtd.h>
#include <linux/mtd/partitions.h> #include <linux/mtd/partitions.h>
...@@ -53,7 +54,7 @@ static int parse_redboot_partitions(struct mtd_info *master, ...@@ -53,7 +54,7 @@ static int parse_redboot_partitions(struct mtd_info *master,
static char nullstring[] = "unallocated"; static char nullstring[] = "unallocated";
#endif #endif
buf = kmalloc(master->erasesize, GFP_KERNEL); buf = vmalloc(master->erasesize);
if (!buf) if (!buf)
return -ENOMEM; return -ENOMEM;
...@@ -190,7 +191,7 @@ static int parse_redboot_partitions(struct mtd_info *master, ...@@ -190,7 +191,7 @@ static int parse_redboot_partitions(struct mtd_info *master,
fl = fl->next; fl = fl->next;
kfree(old); kfree(old);
} }
kfree(buf); vfree(buf);
return ret; return ret;
} }
......
/* /*
* $Id: mtd.h,v 1.54 2004/07/15 01:13:12 dwmw2 Exp $ * $Id: mtd.h,v 1.56 2004/08/09 18:46:04 dmarlin Exp $
* *
* Copyright (C) 1999-2003 David Woodhouse <dwmw2@infradead.org> et al. * Copyright (C) 1999-2003 David Woodhouse <dwmw2@infradead.org> et al.
* *
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/uio.h> #include <linux/uio.h>
#include <linux/mtd/compatmac.h>
#include <mtd/mtd-abi.h> #include <mtd/mtd-abi.h>
#define MTD_CHAR_MAJOR 90 #define MTD_CHAR_MAJOR 90
...@@ -192,6 +193,17 @@ int default_mtd_readv(struct mtd_info *mtd, struct kvec *vecs, ...@@ -192,6 +193,17 @@ int default_mtd_readv(struct mtd_info *mtd, struct kvec *vecs,
#define MTD_WRITEOOB(mtd, args...) (*(mtd->write_oob))(mtd, args) #define MTD_WRITEOOB(mtd, args...) (*(mtd->write_oob))(mtd, args)
#define MTD_SYNC(mtd) do { if (mtd->sync) (*(mtd->sync))(mtd); } while (0) #define MTD_SYNC(mtd) do { if (mtd->sync) (*(mtd->sync))(mtd); } while (0)
#ifdef CONFIG_MTD_PARTITIONS
void mtd_erase_callback(struct erase_info *instr);
#else
static inline void mtd_erase_callback(struct erase_info *instr)
{
if (instr->callback)
instr->callback(instr);
}
#endif
/* /*
* Debugging macro and defines * Debugging macro and defines
*/ */
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* For boards with physically mapped flash and using * For boards with physically mapped flash and using
* drivers/mtd/maps/physmap.c mapping driver. * drivers/mtd/maps/physmap.c mapping driver.
* *
* $Id: physmap.h,v 1.2 2004/07/14 17:48:46 dwmw2 Exp $ * $Id: physmap.h,v 1.3 2004/07/21 00:16:15 jwboyer Exp $
* *
* Copyright (C) 2003 MontaVista Software Inc. * Copyright (C) 2003 MontaVista Software Inc.
* Author: Jun Sun, jsun@mvista.com or jsun@junsun.net * Author: Jun Sun, jsun@mvista.com or jsun@junsun.net
...@@ -33,11 +33,11 @@ extern struct map_info physmap_map; ...@@ -33,11 +33,11 @@ extern struct map_info physmap_map;
/* /*
* Board needs to specify the exact mapping during their setup time. * Board needs to specify the exact mapping during their setup time.
*/ */
static inline void physmap_configure(unsigned long addr, unsigned long size, int buswidth, void (*set_vpp)(struct map_info *, int) ) static inline void physmap_configure(unsigned long addr, unsigned long size, int bankwidth, void (*set_vpp)(struct map_info *, int) )
{ {
physmap_map.phys = addr; physmap_map.phys = addr;
physmap_map.size = size; physmap_map.size = size;
physmap_map.buswidth = buswidth; physmap_map.bankwidth = bankwidth;
physmap_map.set_vpp = set_vpp; physmap_map.set_vpp = set_vpp;
} }
......
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