partitions.h 2.4 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3 4 5 6 7
/*
 * MTD partitioning layer definitions
 *
 * (C) 2000 Nicolas Pitre <nico@cam.org>
 *
 * This code is GPL
 *
8
 * $Id: partitions.h,v 1.17 2005/11/07 11:14:55 gleixner Exp $
L
Linus Torvalds 已提交
9 10 11 12 13 14 15 16 17 18
 */

#ifndef MTD_PARTITIONS_H
#define MTD_PARTITIONS_H

#include <linux/types.h>


/*
 * Partition definition structure:
19
 *
L
Linus Torvalds 已提交
20 21 22 23 24
 * An array of struct partition is passed along with a MTD object to
 * add_mtd_partitions() to create them.
 *
 * For each partition, these fields are available:
 * name: string that will be used to label the partition's MTD device.
25
 * size: the partition size; if defined as MTDPART_SIZ_FULL, the partition
L
Linus Torvalds 已提交
26
 * 	will extend to the end of the master MTD device.
27 28
 * offset: absolute starting position within the master MTD device; if
 * 	defined as MTDPART_OFS_APPEND, the partition will start where the
L
Linus Torvalds 已提交
29
 * 	previous one ended; if MTDPART_OFS_NXTBLK, at the next erase block.
30
 * mask_flags: contains flags that have to be masked (removed) from the
L
Linus Torvalds 已提交
31
 * 	master MTD flag set for the corresponding MTD partition.
32
 * 	For example, to force a read-only partition, simply adding
L
Linus Torvalds 已提交
33 34
 * 	MTD_WRITEABLE to the mask_flags will do the trick.
 *
35
 * Note: writeable partitions require their size and offset be
L
Linus Torvalds 已提交
36
 * erasesize aligned (e.g. use MTDPART_OFS_NEXTBLK).
37
 */
L
Linus Torvalds 已提交
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68

struct mtd_partition {
	char *name;			/* identifier string */
	u_int32_t size;			/* partition size */
	u_int32_t offset;		/* offset within the master MTD space */
	u_int32_t mask_flags;		/* master MTD flags to mask out for this partition */
	struct nand_oobinfo *oobsel;	/* out of band layout for this partition (NAND only)*/
	struct mtd_info **mtdp;		/* pointer to store the MTD object */
};

#define MTDPART_OFS_NXTBLK	(-2)
#define MTDPART_OFS_APPEND	(-1)
#define MTDPART_SIZ_FULL	(0)


int add_mtd_partitions(struct mtd_info *, const struct mtd_partition *, int);
int del_mtd_partitions(struct mtd_info *);

/*
 * Functions dealing with the various ways of partitioning the space
 */

struct mtd_part_parser {
	struct list_head list;
	struct module *owner;
	const char *name;
	int (*parse_fn)(struct mtd_info *, struct mtd_partition **, unsigned long);
};

extern int register_mtd_parser(struct mtd_part_parser *parser);
extern int deregister_mtd_parser(struct mtd_part_parser *parser);
69
extern int parse_mtd_partitions(struct mtd_info *master, const char **types,
L
Linus Torvalds 已提交
70 71 72 73 74 75
				struct mtd_partition **pparts, unsigned long origin);

#define put_partition_parser(p) do { module_put((p)->owner); } while(0)

#endif