11da177e4SLinus Torvalds /* 21da177e4SLinus Torvalds * MTD partitioning layer definitions 31da177e4SLinus Torvalds * 42f82af08SNicolas Pitre * (C) 2000 Nicolas Pitre <nico@fluxnic.net> 51da177e4SLinus Torvalds * 61da177e4SLinus Torvalds * This code is GPL 71da177e4SLinus Torvalds */ 81da177e4SLinus Torvalds 91da177e4SLinus Torvalds #ifndef MTD_PARTITIONS_H 101da177e4SLinus Torvalds #define MTD_PARTITIONS_H 111da177e4SLinus Torvalds 121da177e4SLinus Torvalds #include <linux/types.h> 131da177e4SLinus Torvalds 141da177e4SLinus Torvalds 151da177e4SLinus Torvalds /* 161da177e4SLinus Torvalds * Partition definition structure: 171da177e4SLinus Torvalds * 181da177e4SLinus Torvalds * An array of struct partition is passed along with a MTD object to 19f5671ab3SJamie Iles * mtd_device_register() to create them. 201da177e4SLinus Torvalds * 211da177e4SLinus Torvalds * For each partition, these fields are available: 221da177e4SLinus Torvalds * name: string that will be used to label the partition's MTD device. 231da177e4SLinus Torvalds * size: the partition size; if defined as MTDPART_SIZ_FULL, the partition 241da177e4SLinus Torvalds * will extend to the end of the master MTD device. 251da177e4SLinus Torvalds * offset: absolute starting position within the master MTD device; if 261da177e4SLinus Torvalds * defined as MTDPART_OFS_APPEND, the partition will start where the 271a31368bSDmitry Eremin-Solenikov * previous one ended; if MTDPART_OFS_NXTBLK, at the next erase block; 281a31368bSDmitry Eremin-Solenikov * if MTDPART_OFS_RETAIN, consume as much as possible, leaving size 291a31368bSDmitry Eremin-Solenikov * after the end of partition. 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 { 40*26a6d240SGeert Uytterhoeven const char *name; /* identifier string */ 4169423d99SAdrian Hunter uint64_t size; /* partition size */ 4269423d99SAdrian Hunter uint64_t offset; /* offset within the master MTD space */ 4326cdb67cSDavid Woodhouse uint32_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 }; 461da177e4SLinus Torvalds 471a31368bSDmitry Eremin-Solenikov #define MTDPART_OFS_RETAIN (-3) 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 537699ad35SNicolas Pitre struct mtd_info; 54d26c87d6SDmitry Eremin-Solenikov struct device_node; 557699ad35SNicolas Pitre 56c7975330SDmitry Eremin-Solenikov /** 57c7975330SDmitry Eremin-Solenikov * struct mtd_part_parser_data - used to pass data to MTD partition parsers. 58c7975330SDmitry Eremin-Solenikov * @origin: for RedBoot, start address of MTD device 59d26c87d6SDmitry Eremin-Solenikov * @of_node: for OF parsers, device node containing partitioning information 60c7975330SDmitry Eremin-Solenikov */ 61c7975330SDmitry Eremin-Solenikov struct mtd_part_parser_data { 62c7975330SDmitry Eremin-Solenikov unsigned long origin; 63d26c87d6SDmitry Eremin-Solenikov struct device_node *of_node; 64c7975330SDmitry Eremin-Solenikov }; 65c7975330SDmitry Eremin-Solenikov 66c7975330SDmitry Eremin-Solenikov 671da177e4SLinus Torvalds /* 681da177e4SLinus Torvalds * Functions dealing with the various ways of partitioning the space 691da177e4SLinus Torvalds */ 701da177e4SLinus Torvalds 711da177e4SLinus Torvalds struct mtd_part_parser { 721da177e4SLinus Torvalds struct list_head list; 731da177e4SLinus Torvalds struct module *owner; 741da177e4SLinus Torvalds const char *name; 75c7975330SDmitry Eremin-Solenikov int (*parse_fn)(struct mtd_info *, struct mtd_partition **, 76c7975330SDmitry Eremin-Solenikov struct mtd_part_parser_data *); 771da177e4SLinus Torvalds }; 781da177e4SLinus Torvalds 791da177e4SLinus Torvalds extern int register_mtd_parser(struct mtd_part_parser *parser); 801da177e4SLinus Torvalds extern int deregister_mtd_parser(struct mtd_part_parser *parser); 811da177e4SLinus Torvalds 825dee4674SRichard Genoud int mtd_is_partition(const struct mtd_info *mtd); 83*26a6d240SGeert Uytterhoeven int mtd_add_partition(struct mtd_info *master, const char *name, 845daa7b21SRoman Tereshonkov long long offset, long long length); 855daa7b21SRoman Tereshonkov int mtd_del_partition(struct mtd_info *master, int partno); 8662082e56SRichard Genoud uint64_t mtd_get_device_size(const struct mtd_info *mtd); 875daa7b21SRoman Tereshonkov 889a310d21SScott Wood #endif 89