xref: /rk3399_rockchip-uboot/include/ubi_uboot.h (revision 9eefe2a2b37a838558e3d213a9f5519503d0c180)
17e6ee7adSKyungmin Park /*
27e6ee7adSKyungmin Park  * Header file for UBI support for U-Boot
37e6ee7adSKyungmin Park  *
47e6ee7adSKyungmin Park  * Adaptation from kernel to U-Boot
57e6ee7adSKyungmin Park  *
67e6ee7adSKyungmin Park  *  Copyright (C) 2005-2007 Samsung Electronics
77e6ee7adSKyungmin Park  *  Kyungmin Park <kyungmin.park@samsung.com>
87e6ee7adSKyungmin Park  *
97e6ee7adSKyungmin Park  * This program is free software; you can redistribute it and/or modify
107e6ee7adSKyungmin Park  * it under the terms of the GNU General Public License version 2 as
117e6ee7adSKyungmin Park  * published by the Free Software Foundation.
127e6ee7adSKyungmin Park  */
137e6ee7adSKyungmin Park 
147e6ee7adSKyungmin Park #ifndef __UBOOT_UBI_H
157e6ee7adSKyungmin Park #define __UBOOT_UBI_H
167e6ee7adSKyungmin Park 
177e6ee7adSKyungmin Park #include <common.h>
187e6ee7adSKyungmin Park #include <malloc.h>
197e6ee7adSKyungmin Park #include <div64.h>
207e6ee7adSKyungmin Park #include <linux/crc32.h>
21*9eefe2a2SStefan Roese #include <linux/types.h>
22*9eefe2a2SStefan Roese #include <linux/list.h>
23*9eefe2a2SStefan Roese #include <linux/rbtree.h>
24*9eefe2a2SStefan Roese #include <linux/string.h>
257e6ee7adSKyungmin Park #include <linux/mtd/mtd.h>
26*9eefe2a2SStefan Roese #include <linux/mtd/ubi.h>
277e6ee7adSKyungmin Park 
287e6ee7adSKyungmin Park #ifdef CONFIG_CMD_ONENAND
297e6ee7adSKyungmin Park #include <onenand_uboot.h>
307e6ee7adSKyungmin Park #endif
317e6ee7adSKyungmin Park 
327e6ee7adSKyungmin Park #include <asm/errno.h>
337e6ee7adSKyungmin Park 
347e6ee7adSKyungmin Park #define DPRINTK(format, args...)					\
357e6ee7adSKyungmin Park do {									\
367e6ee7adSKyungmin Park 	printf("%s[%d]: " format "\n", __func__, __LINE__, ##args);	\
377e6ee7adSKyungmin Park } while (0)
387e6ee7adSKyungmin Park 
397e6ee7adSKyungmin Park /* configurable */
407e6ee7adSKyungmin Park #define CONFIG_MTD_UBI_WL_THRESHOLD	4096
417e6ee7adSKyungmin Park #define CONFIG_MTD_UBI_BEB_RESERVE	1
427e6ee7adSKyungmin Park #define UBI_IO_DEBUG			0
437e6ee7adSKyungmin Park 
447e6ee7adSKyungmin Park /* debug options (Linux: drivers/mtd/ubi/Kconfig.debug) */
457e6ee7adSKyungmin Park #undef CONFIG_MTD_UBI_DEBUG
467e6ee7adSKyungmin Park #undef CONFIG_MTD_UBI_DEBUG_PARANOID
477e6ee7adSKyungmin Park #undef CONFIG_MTD_UBI_DEBUG_MSG
487e6ee7adSKyungmin Park #undef CONFIG_MTD_UBI_DEBUG_MSG_EBA
497e6ee7adSKyungmin Park #undef CONFIG_MTD_UBI_DEBUG_MSG_WL
507e6ee7adSKyungmin Park #undef CONFIG_MTD_UBI_DEBUG_MSG_IO
517e6ee7adSKyungmin Park #undef CONFIG_MTD_UBI_DEBUG_MSG_BLD
527e6ee7adSKyungmin Park #define CONFIG_MTD_UBI_DEBUG_DISABLE_BGT
537e6ee7adSKyungmin Park 
547e6ee7adSKyungmin Park /* compiler options */
557e6ee7adSKyungmin Park #define uninitialized_var(x)		x = x
567e6ee7adSKyungmin Park 
577e6ee7adSKyungmin Park /* build.c */
587e6ee7adSKyungmin Park #define get_device(...)
597e6ee7adSKyungmin Park #define put_device(...)
607e6ee7adSKyungmin Park #define ubi_sysfs_init(...)		0
617e6ee7adSKyungmin Park #define ubi_sysfs_close(...)		do { } while (0)
627e6ee7adSKyungmin Park static inline int is_power_of_2(unsigned long n)
637e6ee7adSKyungmin Park {
647e6ee7adSKyungmin Park 	return (n != 0 && ((n & (n - 1)) == 0));
657e6ee7adSKyungmin Park }
667e6ee7adSKyungmin Park 
677e6ee7adSKyungmin Park /* FIXME */
687e6ee7adSKyungmin Park #define MKDEV(...)			0
697e6ee7adSKyungmin Park #define MAJOR(dev)			0
707e6ee7adSKyungmin Park #define MINOR(dev)			0
717e6ee7adSKyungmin Park 
727e6ee7adSKyungmin Park #define alloc_chrdev_region(...)	0
737e6ee7adSKyungmin Park #define unregister_chrdev_region(...)
747e6ee7adSKyungmin Park 
757e6ee7adSKyungmin Park #define class_create(...)		__builtin_return_address(0)
767e6ee7adSKyungmin Park #define class_create_file(...)		0
777e6ee7adSKyungmin Park #define class_remove_file(...)
787e6ee7adSKyungmin Park #define class_destroy(...)
797e6ee7adSKyungmin Park #define misc_register(...)		0
807e6ee7adSKyungmin Park #define misc_deregister(...)
817e6ee7adSKyungmin Park 
827e6ee7adSKyungmin Park /* vmt.c */
837e6ee7adSKyungmin Park #define device_register(...)		0
847e6ee7adSKyungmin Park #define volume_sysfs_init(...)		0
857e6ee7adSKyungmin Park #define volume_sysfs_close(...)		do { } while (0)
867e6ee7adSKyungmin Park 
877e6ee7adSKyungmin Park /* kapi.c */
887e6ee7adSKyungmin Park 
897e6ee7adSKyungmin Park /* eba.c */
907e6ee7adSKyungmin Park 
917e6ee7adSKyungmin Park /* io.c */
927e6ee7adSKyungmin Park #define init_waitqueue_head(...)	do { } while (0)
937e6ee7adSKyungmin Park #define wait_event_interruptible(...)	0
947e6ee7adSKyungmin Park #define wake_up_interruptible(...)	do { } while (0)
957e6ee7adSKyungmin Park #define print_hex_dump(...)		do { } while (0)
967e6ee7adSKyungmin Park #define dump_stack(...)			do { } while (0)
977e6ee7adSKyungmin Park 
987e6ee7adSKyungmin Park /* wl.c */
997e6ee7adSKyungmin Park #define task_pid_nr(x)			0
1007e6ee7adSKyungmin Park #define set_freezable(...)		do { } while (0)
1017e6ee7adSKyungmin Park #define try_to_freeze(...)		0
1027e6ee7adSKyungmin Park #define set_current_state(...)		do { } while (0)
1037e6ee7adSKyungmin Park #define kthread_should_stop(...)	0
1047e6ee7adSKyungmin Park #define schedule()			do { } while (0)
1057e6ee7adSKyungmin Park 
1067e6ee7adSKyungmin Park /* upd.c */
1077e6ee7adSKyungmin Park static inline unsigned long copy_from_user(void *dest, const void *src,
1087e6ee7adSKyungmin Park 					   unsigned long count)
1097e6ee7adSKyungmin Park {
1107e6ee7adSKyungmin Park 	memcpy((void *)dest, (void *)src, count);
1117e6ee7adSKyungmin Park 	return 0;
1127e6ee7adSKyungmin Park }
1137e6ee7adSKyungmin Park 
1147e6ee7adSKyungmin Park /* common */
1157e6ee7adSKyungmin Park typedef int	spinlock_t;
1167e6ee7adSKyungmin Park typedef int	wait_queue_head_t;
1177e6ee7adSKyungmin Park #define spin_lock_init(...)
1187e6ee7adSKyungmin Park #define spin_lock(...)
1197e6ee7adSKyungmin Park #define spin_unlock(...)
1207e6ee7adSKyungmin Park 
1217e6ee7adSKyungmin Park #define mutex_init(...)
1227e6ee7adSKyungmin Park #define mutex_lock(...)
1237e6ee7adSKyungmin Park #define mutex_unlock(...)
1247e6ee7adSKyungmin Park 
1257e6ee7adSKyungmin Park #define init_rwsem(...)			do { } while (0)
1267e6ee7adSKyungmin Park #define down_read(...)			do { } while (0)
1277e6ee7adSKyungmin Park #define down_write(...)			do { } while (0)
1287e6ee7adSKyungmin Park #define down_write_trylock(...)		0
1297e6ee7adSKyungmin Park #define up_read(...)			do { } while (0)
1307e6ee7adSKyungmin Park #define up_write(...)			do { } while (0)
1317e6ee7adSKyungmin Park 
1327e6ee7adSKyungmin Park struct kmem_cache { int i; };
1337e6ee7adSKyungmin Park #define kmem_cache_create(...)		1
1347e6ee7adSKyungmin Park #define kmem_cache_alloc(obj, gfp)	malloc(sizeof(struct ubi_wl_entry))
1357e6ee7adSKyungmin Park #define kmem_cache_free(obj, size)	free(size)
1367e6ee7adSKyungmin Park #define kmem_cache_destroy(...)
1377e6ee7adSKyungmin Park 
1387e6ee7adSKyungmin Park #define cond_resched()			do { } while (0)
1397e6ee7adSKyungmin Park #define yield()				do { } while (0)
1407e6ee7adSKyungmin Park 
1417e6ee7adSKyungmin Park #define KERN_WARNING
1427e6ee7adSKyungmin Park #define KERN_ERR
1437e6ee7adSKyungmin Park #define KERN_NOTICE
1447e6ee7adSKyungmin Park #define KERN_DEBUG
1457e6ee7adSKyungmin Park 
1467e6ee7adSKyungmin Park #define GFP_KERNEL			0
1477e6ee7adSKyungmin Park #define GFP_NOFS			1
1487e6ee7adSKyungmin Park 
1497e6ee7adSKyungmin Park #define __user
1507e6ee7adSKyungmin Park #define __init
1517e6ee7adSKyungmin Park #define __exit
1527e6ee7adSKyungmin Park 
1537e6ee7adSKyungmin Park #define kthread_create(...)	__builtin_return_address(0)
1547e6ee7adSKyungmin Park #define kthread_stop(...)	do { } while (0)
1557e6ee7adSKyungmin Park #define wake_up_process(...)	do { } while (0)
1567e6ee7adSKyungmin Park 
1577e6ee7adSKyungmin Park #define BUS_ID_SIZE		20
1587e6ee7adSKyungmin Park 
1597e6ee7adSKyungmin Park struct rw_semaphore { int i; };
1607e6ee7adSKyungmin Park struct device {
1617e6ee7adSKyungmin Park 	struct device		*parent;
1627e6ee7adSKyungmin Park 	struct class		*class;
1637e6ee7adSKyungmin Park 	char	bus_id[BUS_ID_SIZE];	/* position on parent bus */
1647e6ee7adSKyungmin Park 	dev_t			devt;	/* dev_t, creates the sysfs "dev" */
1657e6ee7adSKyungmin Park 	void	(*release)(struct device *dev);
1667e6ee7adSKyungmin Park };
1677e6ee7adSKyungmin Park struct mutex { int i; };
1687e6ee7adSKyungmin Park struct kernel_param { int i; };
1697e6ee7adSKyungmin Park 
1707e6ee7adSKyungmin Park struct cdev {
1717e6ee7adSKyungmin Park 	int owner;
1727e6ee7adSKyungmin Park 	dev_t dev;
1737e6ee7adSKyungmin Park };
1747e6ee7adSKyungmin Park #define cdev_init(...)		do { } while (0)
1757e6ee7adSKyungmin Park #define cdev_add(...)		0
1767e6ee7adSKyungmin Park #define cdev_del(...)		do { } while (0)
1777e6ee7adSKyungmin Park 
1787e6ee7adSKyungmin Park #define MAX_ERRNO		4095
1797e6ee7adSKyungmin Park #define IS_ERR_VALUE(x)		((x) >= (unsigned long)-MAX_ERRNO)
1807e6ee7adSKyungmin Park 
1817e6ee7adSKyungmin Park static inline void *ERR_PTR(long error)
1827e6ee7adSKyungmin Park {
1837e6ee7adSKyungmin Park 	return (void *) error;
1847e6ee7adSKyungmin Park }
1857e6ee7adSKyungmin Park 
1867e6ee7adSKyungmin Park static inline long PTR_ERR(const void *ptr)
1877e6ee7adSKyungmin Park {
1887e6ee7adSKyungmin Park 	return (long) ptr;
1897e6ee7adSKyungmin Park }
1907e6ee7adSKyungmin Park 
1917e6ee7adSKyungmin Park static inline long IS_ERR(const void *ptr)
1927e6ee7adSKyungmin Park {
1937e6ee7adSKyungmin Park 	return IS_ERR_VALUE((unsigned long)ptr);
1947e6ee7adSKyungmin Park }
1957e6ee7adSKyungmin Park 
1967e6ee7adSKyungmin Park /* Force a compilation error if condition is true */
1977e6ee7adSKyungmin Park #define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))
1987e6ee7adSKyungmin Park 
1997e6ee7adSKyungmin Park /* module */
2007e6ee7adSKyungmin Park #define THIS_MODULE		0
201*9eefe2a2SStefan Roese #define try_module_get(...)	1
2027e6ee7adSKyungmin Park #define module_put(...)		do { } while (0)
2037e6ee7adSKyungmin Park #define module_init(...)
2047e6ee7adSKyungmin Park #define module_exit(...)
2057e6ee7adSKyungmin Park #define EXPORT_SYMBOL(...)
2067e6ee7adSKyungmin Park #define EXPORT_SYMBOL_GPL(...)
2077e6ee7adSKyungmin Park #define module_param_call(...)
2087e6ee7adSKyungmin Park #define MODULE_PARM_DESC(...)
2097e6ee7adSKyungmin Park #define MODULE_VERSION(...)
2107e6ee7adSKyungmin Park #define MODULE_DESCRIPTION(...)
2117e6ee7adSKyungmin Park #define MODULE_AUTHOR(...)
2127e6ee7adSKyungmin Park #define MODULE_LICENSE(...)
2137e6ee7adSKyungmin Park 
214*9eefe2a2SStefan Roese #ifndef __UBIFS_H__
2157e6ee7adSKyungmin Park #include "../drivers/mtd/ubi/ubi.h"
216*9eefe2a2SStefan Roese #endif
2177e6ee7adSKyungmin Park 
2187e6ee7adSKyungmin Park /* functions */
2197e6ee7adSKyungmin Park extern int ubi_mtd_param_parse(const char *val, struct kernel_param *kp);
2207e6ee7adSKyungmin Park extern int ubi_init(void);
2212ee951baSStefan Roese extern void ubi_exit(void);
2227e6ee7adSKyungmin Park 
2237e6ee7adSKyungmin Park extern struct ubi_device *ubi_devices[];
2247e6ee7adSKyungmin Park 
2257e6ee7adSKyungmin Park #endif
226