Merge branch 'master' of git://git.denx.de/u-boot-spi
[platform/kernel/u-boot.git] / include / linux / mtd / mtd.h
index b8c2c3f..cd1f557 100644 (file)
@@ -20,6 +20,7 @@
 #include <linux/compat.h>
 #include <mtd/mtd-abi.h>
 #include <linux/errno.h>
+#include <linux/list.h>
 #include <div64.h>
 #if IS_ENABLED(CONFIG_DM)
 #include <dm/device.h>
@@ -307,6 +308,27 @@ struct mtd_info {
        struct udevice *dev;
 #endif
        int usecount;
+
+       /* MTD devices do not have any parent. MTD partitions do. */
+       struct mtd_info *parent;
+
+       /*
+        * Offset of the partition relatively to the parent offset.
+        * Is 0 for real MTD devices (ie. not partitions).
+        */
+       u64 offset;
+
+       /*
+        * List node used to add an MTD partition to the parent
+        * partition list.
+        */
+       struct list_head node;
+
+       /*
+        * List of partitions attached to this MTD device (the parent
+        * MTD device can itself be a partition).
+        */
+       struct list_head partitions;
 };
 
 #if IS_ENABLED(CONFIG_DM)
@@ -334,6 +356,18 @@ static inline const struct device_node *mtd_get_of_node(struct mtd_info *mtd)
 }
 #endif
 
+static inline bool mtd_is_partition(const struct mtd_info *mtd)
+{
+       return mtd->parent;
+}
+
+static inline bool mtd_has_partitions(const struct mtd_info *mtd)
+{
+       return !list_empty(&mtd->partitions);
+}
+
+bool mtd_partitions_used(struct mtd_info *master);
+
 int mtd_ooblayout_ecc(struct mtd_info *mtd, int section,
                      struct mtd_oob_region *oobecc);
 int mtd_ooblayout_find_eccregion(struct mtd_info *mtd, int eccbyte,
@@ -530,8 +564,23 @@ unsigned mtd_mmap_capabilities(struct mtd_info *mtd);
 /* drivers/mtd/mtdcore.h */
 int add_mtd_device(struct mtd_info *mtd);
 int del_mtd_device(struct mtd_info *mtd);
+
+#ifdef CONFIG_MTD_PARTITIONS
 int add_mtd_partitions(struct mtd_info *, const struct mtd_partition *, int);
 int del_mtd_partitions(struct mtd_info *);
+#else
+static inline int add_mtd_partitions(struct mtd_info *mtd,
+                                    const struct mtd_partition *parts,
+                                    int nparts)
+{
+       return 0;
+}
+
+static inline int del_mtd_partitions(struct mtd_info *mtd)
+{
+       return 0;
+}
+#endif
 
 struct mtd_info *__mtd_next_device(int i);
 #define mtd_for_each_device(mtd)                       \
@@ -549,5 +598,11 @@ int mtd_arg_off_size(int argc, char *const argv[], int *idx, loff_t *off,
 void mtd_get_len_incl_bad(struct mtd_info *mtd, uint64_t offset,
                          const uint64_t length, uint64_t *len_incl_bad,
                          int *truncated);
+bool mtd_dev_list_updated(void);
+
+/* drivers/mtd/mtd_uboot.c */
+int mtd_search_alternate_name(const char *mtdname, char *altname,
+                             unsigned int max_len);
+
 #endif
 #endif /* __MTD_MTD_H__ */