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