include/linux/mtd/partitions.h
changeset 0 aa628870c1d3
child 2 d1f6d8b6f81c
equal deleted inserted replaced
-1:000000000000 0:aa628870c1d3
       
     1 /*
       
     2  * MTD partitioning layer definitions
       
     3  *
       
     4  * (C) 2000 Nicolas Pitre <nico@cam.org>
       
     5  *
       
     6  * This code is GPL
       
     7  */
       
     8 
       
     9 #ifndef MTD_PARTITIONS_H
       
    10 #define MTD_PARTITIONS_H
       
    11 
       
    12 #include <linux/types.h>
       
    13 
       
    14 
       
    15 /*
       
    16  * Partition definition structure:
       
    17  *
       
    18  * An array of struct partition is passed along with a MTD object to
       
    19  * add_mtd_partitions() to create them.
       
    20  *
       
    21  * For each partition, these fields are available:
       
    22  * name: string that will be used to label the partition's MTD device.
       
    23  * size: the partition size; if defined as MTDPART_SIZ_FULL, the partition
       
    24  * 	will extend to the end of the master MTD device.
       
    25  * offset: absolute starting position within the master MTD device; if
       
    26  * 	defined as MTDPART_OFS_APPEND, the partition will start where the
       
    27  * 	previous one ended; if MTDPART_OFS_NXTBLK, at the next erase block.
       
    28  * mask_flags: contains flags that have to be masked (removed) from the
       
    29  * 	master MTD flag set for the corresponding MTD partition.
       
    30  * 	For example, to force a read-only partition, simply adding
       
    31  * 	MTD_WRITEABLE to the mask_flags will do the trick.
       
    32  *
       
    33  * Note: writeable partitions require their size and offset be
       
    34  * erasesize aligned (e.g. use MTDPART_OFS_NEXTBLK).
       
    35  */
       
    36 
       
    37 struct mtd_partition {
       
    38 	char *name;			/* identifier string */
       
    39 	u_int32_t size;			/* partition size */
       
    40 	u_int32_t offset;		/* offset within the master MTD space */
       
    41 	u_int32_t mask_flags;		/* master MTD flags to mask out for this partition */
       
    42 	struct nand_ecclayout *ecclayout;	/* out of band layout for this partition (NAND only)*/
       
    43 	struct mtd_info **mtdp;		/* pointer to store the MTD object */
       
    44 };
       
    45 
       
    46 #define MTDPART_OFS_NXTBLK	(-2)
       
    47 #define MTDPART_OFS_APPEND	(-1)
       
    48 #define MTDPART_SIZ_FULL	(0)
       
    49 
       
    50 
       
    51 int add_mtd_partitions(struct mtd_info *, const struct mtd_partition *, int);
       
    52 int del_mtd_partitions(struct mtd_info *);
       
    53 
       
    54 /*
       
    55  * Functions dealing with the various ways of partitioning the space
       
    56  */
       
    57 
       
    58 struct mtd_part_parser {
       
    59 	struct list_head list;
       
    60 	struct module *owner;
       
    61 	const char *name;
       
    62 	int (*parse_fn)(struct mtd_info *, struct mtd_partition **, unsigned long);
       
    63 };
       
    64 
       
    65 extern int register_mtd_parser(struct mtd_part_parser *parser);
       
    66 extern int deregister_mtd_parser(struct mtd_part_parser *parser);
       
    67 extern int parse_mtd_partitions(struct mtd_info *master, const char **types,
       
    68 				struct mtd_partition **pparts, unsigned long origin);
       
    69 
       
    70 #define put_partition_parser(p) do { module_put((p)->owner); } while(0)
       
    71 
       
    72 struct device;
       
    73 struct device_node;
       
    74 
       
    75 int __devinit of_mtd_parse_partitions(struct device *dev,
       
    76                                       struct device_node *node,
       
    77                                       struct mtd_partition **pparts);
       
    78 
       
    79 #endif