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