xref: /linux/include/linux/mtd/partitions.h (revision 9a310d21196f38f6ad0ad146057548653e495c09)
11da177e4SLinus Torvalds /*
21da177e4SLinus Torvalds  * MTD partitioning layer definitions
31da177e4SLinus Torvalds  *
41da177e4SLinus Torvalds  * (C) 2000 Nicolas Pitre <nico@cam.org>
51da177e4SLinus Torvalds  *
61da177e4SLinus Torvalds  * This code is GPL
71da177e4SLinus Torvalds  *
861ecfa87SThomas Gleixner  * $Id: partitions.h,v 1.17 2005/11/07 11:14:55 gleixner Exp $
91da177e4SLinus Torvalds  */
101da177e4SLinus Torvalds 
111da177e4SLinus Torvalds #ifndef MTD_PARTITIONS_H
121da177e4SLinus Torvalds #define MTD_PARTITIONS_H
131da177e4SLinus Torvalds 
141da177e4SLinus Torvalds #include <linux/types.h>
151da177e4SLinus Torvalds 
161da177e4SLinus Torvalds 
171da177e4SLinus Torvalds /*
181da177e4SLinus Torvalds  * Partition definition structure:
191da177e4SLinus Torvalds  *
201da177e4SLinus Torvalds  * An array of struct partition is passed along with a MTD object to
211da177e4SLinus Torvalds  * add_mtd_partitions() to create them.
221da177e4SLinus Torvalds  *
231da177e4SLinus Torvalds  * For each partition, these fields are available:
241da177e4SLinus Torvalds  * name: string that will be used to label the partition's MTD device.
251da177e4SLinus Torvalds  * size: the partition size; if defined as MTDPART_SIZ_FULL, the partition
261da177e4SLinus Torvalds  * 	will extend to the end of the master MTD device.
271da177e4SLinus Torvalds  * offset: absolute starting position within the master MTD device; if
281da177e4SLinus Torvalds  * 	defined as MTDPART_OFS_APPEND, the partition will start where the
291da177e4SLinus Torvalds  * 	previous one ended; if MTDPART_OFS_NXTBLK, at the next erase block.
301da177e4SLinus Torvalds  * mask_flags: contains flags that have to be masked (removed) from the
311da177e4SLinus Torvalds  * 	master MTD flag set for the corresponding MTD partition.
321da177e4SLinus Torvalds  * 	For example, to force a read-only partition, simply adding
331da177e4SLinus Torvalds  * 	MTD_WRITEABLE to the mask_flags will do the trick.
341da177e4SLinus Torvalds  *
351da177e4SLinus Torvalds  * Note: writeable partitions require their size and offset be
361da177e4SLinus Torvalds  * erasesize aligned (e.g. use MTDPART_OFS_NEXTBLK).
371da177e4SLinus Torvalds  */
381da177e4SLinus Torvalds 
391da177e4SLinus Torvalds struct mtd_partition {
401da177e4SLinus Torvalds 	char *name;			/* identifier string */
411da177e4SLinus Torvalds 	u_int32_t size;			/* partition size */
421da177e4SLinus Torvalds 	u_int32_t offset;		/* offset within the master MTD space */
431da177e4SLinus Torvalds 	u_int32_t mask_flags;		/* master MTD flags to mask out for this partition */
445bd34c09SThomas Gleixner 	struct nand_ecclayout *ecclayout;	/* out of band layout for this partition (NAND only)*/
451da177e4SLinus Torvalds 	struct mtd_info **mtdp;		/* pointer to store the MTD object */
461da177e4SLinus Torvalds };
471da177e4SLinus Torvalds 
481da177e4SLinus Torvalds #define MTDPART_OFS_NXTBLK	(-2)
491da177e4SLinus Torvalds #define MTDPART_OFS_APPEND	(-1)
501da177e4SLinus Torvalds #define MTDPART_SIZ_FULL	(0)
511da177e4SLinus Torvalds 
521da177e4SLinus Torvalds 
531da177e4SLinus Torvalds int add_mtd_partitions(struct mtd_info *, const struct mtd_partition *, int);
541da177e4SLinus Torvalds int del_mtd_partitions(struct mtd_info *);
551da177e4SLinus Torvalds 
561da177e4SLinus Torvalds /*
571da177e4SLinus Torvalds  * Functions dealing with the various ways of partitioning the space
581da177e4SLinus Torvalds  */
591da177e4SLinus Torvalds 
601da177e4SLinus Torvalds struct mtd_part_parser {
611da177e4SLinus Torvalds 	struct list_head list;
621da177e4SLinus Torvalds 	struct module *owner;
631da177e4SLinus Torvalds 	const char *name;
641da177e4SLinus Torvalds 	int (*parse_fn)(struct mtd_info *, struct mtd_partition **, unsigned long);
651da177e4SLinus Torvalds };
661da177e4SLinus Torvalds 
671da177e4SLinus Torvalds extern int register_mtd_parser(struct mtd_part_parser *parser);
681da177e4SLinus Torvalds extern int deregister_mtd_parser(struct mtd_part_parser *parser);
691da177e4SLinus Torvalds extern int parse_mtd_partitions(struct mtd_info *master, const char **types,
701da177e4SLinus Torvalds 				struct mtd_partition **pparts, unsigned long origin);
711da177e4SLinus Torvalds 
721da177e4SLinus Torvalds #define put_partition_parser(p) do { module_put((p)->owner); } while(0)
731da177e4SLinus Torvalds 
74*9a310d21SScott Wood struct device;
75*9a310d21SScott Wood struct device_node;
761da177e4SLinus Torvalds 
77*9a310d21SScott Wood int __devinit of_mtd_parse_partitions(struct device *dev,
78*9a310d21SScott Wood                                       struct mtd_info *mtd,
79*9a310d21SScott Wood                                       struct device_node *node,
80*9a310d21SScott Wood                                       struct mtd_partition **pparts);
81*9a310d21SScott Wood 
82*9a310d21SScott Wood #endif
83