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