xref: /rk3399_rockchip-uboot/include/ubi_uboot.h (revision 7e6ee7ad27de5216db1baef76f38c3429c8f4a2a)
1*7e6ee7adSKyungmin Park /*
2*7e6ee7adSKyungmin Park  * Header file for UBI support for U-Boot
3*7e6ee7adSKyungmin Park  *
4*7e6ee7adSKyungmin Park  * Adaptation from kernel to U-Boot
5*7e6ee7adSKyungmin Park  *
6*7e6ee7adSKyungmin Park  *  Copyright (C) 2005-2007 Samsung Electronics
7*7e6ee7adSKyungmin Park  *  Kyungmin Park <kyungmin.park@samsung.com>
8*7e6ee7adSKyungmin Park  *
9*7e6ee7adSKyungmin Park  * This program is free software; you can redistribute it and/or modify
10*7e6ee7adSKyungmin Park  * it under the terms of the GNU General Public License version 2 as
11*7e6ee7adSKyungmin Park  * published by the Free Software Foundation.
12*7e6ee7adSKyungmin Park  */
13*7e6ee7adSKyungmin Park 
14*7e6ee7adSKyungmin Park #ifndef __UBOOT_UBI_H
15*7e6ee7adSKyungmin Park #define __UBOOT_UBI_H
16*7e6ee7adSKyungmin Park 
17*7e6ee7adSKyungmin Park #include <common.h>
18*7e6ee7adSKyungmin Park #include <malloc.h>
19*7e6ee7adSKyungmin Park #include <div64.h>
20*7e6ee7adSKyungmin Park #include <linux/crc32.h>
21*7e6ee7adSKyungmin Park #include <linux/mtd/mtd.h>
22*7e6ee7adSKyungmin Park 
23*7e6ee7adSKyungmin Park #ifdef CONFIG_CMD_ONENAND
24*7e6ee7adSKyungmin Park #include <onenand_uboot.h>
25*7e6ee7adSKyungmin Park #endif
26*7e6ee7adSKyungmin Park 
27*7e6ee7adSKyungmin Park #include <asm/errno.h>
28*7e6ee7adSKyungmin Park 
29*7e6ee7adSKyungmin Park #define DPRINTK(format, args...)					\
30*7e6ee7adSKyungmin Park do {									\
31*7e6ee7adSKyungmin Park 	printf("%s[%d]: " format "\n", __func__, __LINE__, ##args);	\
32*7e6ee7adSKyungmin Park } while (0)
33*7e6ee7adSKyungmin Park 
34*7e6ee7adSKyungmin Park /* configurable */
35*7e6ee7adSKyungmin Park #define CONFIG_MTD_UBI_WL_THRESHOLD	4096
36*7e6ee7adSKyungmin Park #define CONFIG_MTD_UBI_BEB_RESERVE	1
37*7e6ee7adSKyungmin Park #define UBI_IO_DEBUG			0
38*7e6ee7adSKyungmin Park 
39*7e6ee7adSKyungmin Park /* debug options (Linux: drivers/mtd/ubi/Kconfig.debug) */
40*7e6ee7adSKyungmin Park #undef CONFIG_MTD_UBI_DEBUG
41*7e6ee7adSKyungmin Park #undef CONFIG_MTD_UBI_DEBUG_PARANOID
42*7e6ee7adSKyungmin Park #undef CONFIG_MTD_UBI_DEBUG_MSG
43*7e6ee7adSKyungmin Park #undef CONFIG_MTD_UBI_DEBUG_MSG_EBA
44*7e6ee7adSKyungmin Park #undef CONFIG_MTD_UBI_DEBUG_MSG_WL
45*7e6ee7adSKyungmin Park #undef CONFIG_MTD_UBI_DEBUG_MSG_IO
46*7e6ee7adSKyungmin Park #undef CONFIG_MTD_UBI_DEBUG_MSG_BLD
47*7e6ee7adSKyungmin Park #define CONFIG_MTD_UBI_DEBUG_DISABLE_BGT
48*7e6ee7adSKyungmin Park 
49*7e6ee7adSKyungmin Park /* compiler options */
50*7e6ee7adSKyungmin Park #define uninitialized_var(x)		x = x
51*7e6ee7adSKyungmin Park 
52*7e6ee7adSKyungmin Park /* build.c */
53*7e6ee7adSKyungmin Park #define get_device(...)
54*7e6ee7adSKyungmin Park #define put_device(...)
55*7e6ee7adSKyungmin Park #define ubi_sysfs_init(...)		0
56*7e6ee7adSKyungmin Park #define ubi_sysfs_close(...)		do { } while (0)
57*7e6ee7adSKyungmin Park static inline int is_power_of_2(unsigned long n)
58*7e6ee7adSKyungmin Park {
59*7e6ee7adSKyungmin Park         return (n != 0 && ((n & (n - 1)) == 0));
60*7e6ee7adSKyungmin Park }
61*7e6ee7adSKyungmin Park 
62*7e6ee7adSKyungmin Park /* FIXME */
63*7e6ee7adSKyungmin Park #define MKDEV(...)			0
64*7e6ee7adSKyungmin Park #define MAJOR(dev)			0
65*7e6ee7adSKyungmin Park #define MINOR(dev)			0
66*7e6ee7adSKyungmin Park 
67*7e6ee7adSKyungmin Park #define alloc_chrdev_region(...)	0
68*7e6ee7adSKyungmin Park #define unregister_chrdev_region(...)
69*7e6ee7adSKyungmin Park 
70*7e6ee7adSKyungmin Park #define class_create(...)		__builtin_return_address(0)
71*7e6ee7adSKyungmin Park #define class_create_file(...)		0
72*7e6ee7adSKyungmin Park #define class_remove_file(...)
73*7e6ee7adSKyungmin Park #define class_destroy(...)
74*7e6ee7adSKyungmin Park #define misc_register(...)		0
75*7e6ee7adSKyungmin Park #define misc_deregister(...)
76*7e6ee7adSKyungmin Park 
77*7e6ee7adSKyungmin Park /* vmt.c */
78*7e6ee7adSKyungmin Park #define device_register(...)		0
79*7e6ee7adSKyungmin Park #define volume_sysfs_init(...)		0
80*7e6ee7adSKyungmin Park #define volume_sysfs_close(...)		do { } while (0)
81*7e6ee7adSKyungmin Park 
82*7e6ee7adSKyungmin Park /* kapi.c */
83*7e6ee7adSKyungmin Park 
84*7e6ee7adSKyungmin Park /* eba.c */
85*7e6ee7adSKyungmin Park 
86*7e6ee7adSKyungmin Park /* io.c */
87*7e6ee7adSKyungmin Park #define init_waitqueue_head(...)	do { } while (0)
88*7e6ee7adSKyungmin Park #define wait_event_interruptible(...)	0
89*7e6ee7adSKyungmin Park #define wake_up_interruptible(...)	do { } while (0)
90*7e6ee7adSKyungmin Park #define print_hex_dump(...)		do { } while (0)
91*7e6ee7adSKyungmin Park #define dump_stack(...)			do { } while (0)
92*7e6ee7adSKyungmin Park 
93*7e6ee7adSKyungmin Park /* wl.c */
94*7e6ee7adSKyungmin Park #define task_pid_nr(x)			0
95*7e6ee7adSKyungmin Park #define set_freezable(...)		do { } while (0)
96*7e6ee7adSKyungmin Park #define try_to_freeze(...)		0
97*7e6ee7adSKyungmin Park #define set_current_state(...)		do { } while (0)
98*7e6ee7adSKyungmin Park #define kthread_should_stop(...)	0
99*7e6ee7adSKyungmin Park #define schedule()			do { } while (0)
100*7e6ee7adSKyungmin Park 
101*7e6ee7adSKyungmin Park /* upd.c */
102*7e6ee7adSKyungmin Park static inline unsigned long copy_from_user(void *dest, const void *src,
103*7e6ee7adSKyungmin Park 					   unsigned long count)
104*7e6ee7adSKyungmin Park {
105*7e6ee7adSKyungmin Park 	memcpy((void *)dest, (void *)src, count);
106*7e6ee7adSKyungmin Park 	return 0;
107*7e6ee7adSKyungmin Park }
108*7e6ee7adSKyungmin Park 
109*7e6ee7adSKyungmin Park /* common */
110*7e6ee7adSKyungmin Park typedef int	spinlock_t;
111*7e6ee7adSKyungmin Park typedef int	wait_queue_head_t;
112*7e6ee7adSKyungmin Park #define spin_lock_init(...)
113*7e6ee7adSKyungmin Park #define spin_lock(...)
114*7e6ee7adSKyungmin Park #define spin_unlock(...)
115*7e6ee7adSKyungmin Park 
116*7e6ee7adSKyungmin Park #define mutex_init(...)
117*7e6ee7adSKyungmin Park #define mutex_lock(...)
118*7e6ee7adSKyungmin Park #define mutex_unlock(...)
119*7e6ee7adSKyungmin Park 
120*7e6ee7adSKyungmin Park #define init_rwsem(...)			do { } while (0)
121*7e6ee7adSKyungmin Park #define down_read(...)			do { } while (0)
122*7e6ee7adSKyungmin Park #define down_write(...)			do { } while (0)
123*7e6ee7adSKyungmin Park #define down_write_trylock(...)		0
124*7e6ee7adSKyungmin Park #define up_read(...)			do { } while (0)
125*7e6ee7adSKyungmin Park #define up_write(...)			do { } while (0)
126*7e6ee7adSKyungmin Park 
127*7e6ee7adSKyungmin Park struct kmem_cache { int i; };
128*7e6ee7adSKyungmin Park #define kmem_cache_create(...)		1
129*7e6ee7adSKyungmin Park #define kmem_cache_alloc(obj, gfp)	malloc(sizeof(struct ubi_wl_entry))
130*7e6ee7adSKyungmin Park #define kmem_cache_free(obj, size)	free(size)
131*7e6ee7adSKyungmin Park #define kmem_cache_destroy(...)
132*7e6ee7adSKyungmin Park 
133*7e6ee7adSKyungmin Park #define cond_resched()			do { } while (0)
134*7e6ee7adSKyungmin Park #define yield()				do { } while (0)
135*7e6ee7adSKyungmin Park 
136*7e6ee7adSKyungmin Park #define KERN_WARNING
137*7e6ee7adSKyungmin Park #define KERN_ERR
138*7e6ee7adSKyungmin Park #define KERN_NOTICE
139*7e6ee7adSKyungmin Park #define KERN_DEBUG
140*7e6ee7adSKyungmin Park 
141*7e6ee7adSKyungmin Park #define GFP_KERNEL			0
142*7e6ee7adSKyungmin Park #define GFP_NOFS			1
143*7e6ee7adSKyungmin Park 
144*7e6ee7adSKyungmin Park #define __user
145*7e6ee7adSKyungmin Park #define __init
146*7e6ee7adSKyungmin Park #define __exit
147*7e6ee7adSKyungmin Park 
148*7e6ee7adSKyungmin Park #define kthread_create(...)	__builtin_return_address(0)
149*7e6ee7adSKyungmin Park #define kthread_stop(...)	do { } while (0)
150*7e6ee7adSKyungmin Park #define wake_up_process(...)	do { } while (0)
151*7e6ee7adSKyungmin Park 
152*7e6ee7adSKyungmin Park #define BUS_ID_SIZE		20
153*7e6ee7adSKyungmin Park 
154*7e6ee7adSKyungmin Park struct rw_semaphore { int i; };
155*7e6ee7adSKyungmin Park struct device {
156*7e6ee7adSKyungmin Park 	struct device		*parent;
157*7e6ee7adSKyungmin Park 	struct class		*class;
158*7e6ee7adSKyungmin Park 	char	bus_id[BUS_ID_SIZE];	/* position on parent bus */
159*7e6ee7adSKyungmin Park 	dev_t			devt;	/* dev_t, creates the sysfs "dev" */
160*7e6ee7adSKyungmin Park 	void	(*release)(struct device *dev);
161*7e6ee7adSKyungmin Park };
162*7e6ee7adSKyungmin Park struct mutex { int i; };
163*7e6ee7adSKyungmin Park struct kernel_param { int i; };
164*7e6ee7adSKyungmin Park 
165*7e6ee7adSKyungmin Park struct cdev {
166*7e6ee7adSKyungmin Park 	int owner;
167*7e6ee7adSKyungmin Park 	dev_t dev;
168*7e6ee7adSKyungmin Park };
169*7e6ee7adSKyungmin Park #define cdev_init(...)		do { } while (0)
170*7e6ee7adSKyungmin Park #define cdev_add(...)		0
171*7e6ee7adSKyungmin Park #define cdev_del(...)		do { } while (0)
172*7e6ee7adSKyungmin Park 
173*7e6ee7adSKyungmin Park #define MAX_ERRNO		4095
174*7e6ee7adSKyungmin Park #define IS_ERR_VALUE(x)		((x) >= (unsigned long)-MAX_ERRNO)
175*7e6ee7adSKyungmin Park 
176*7e6ee7adSKyungmin Park static inline void *ERR_PTR(long error)
177*7e6ee7adSKyungmin Park {
178*7e6ee7adSKyungmin Park 	return (void *) error;
179*7e6ee7adSKyungmin Park }
180*7e6ee7adSKyungmin Park 
181*7e6ee7adSKyungmin Park static inline long PTR_ERR(const void *ptr)
182*7e6ee7adSKyungmin Park {
183*7e6ee7adSKyungmin Park 	return (long) ptr;
184*7e6ee7adSKyungmin Park }
185*7e6ee7adSKyungmin Park 
186*7e6ee7adSKyungmin Park static inline long IS_ERR(const void *ptr)
187*7e6ee7adSKyungmin Park {
188*7e6ee7adSKyungmin Park 	return IS_ERR_VALUE((unsigned long)ptr);
189*7e6ee7adSKyungmin Park }
190*7e6ee7adSKyungmin Park 
191*7e6ee7adSKyungmin Park /* Force a compilation error if condition is true */
192*7e6ee7adSKyungmin Park #define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)]))
193*7e6ee7adSKyungmin Park 
194*7e6ee7adSKyungmin Park /* module */
195*7e6ee7adSKyungmin Park #define THIS_MODULE		0
196*7e6ee7adSKyungmin Park #define try_module_get(...)	0
197*7e6ee7adSKyungmin Park #define module_put(...)		do { } while (0)
198*7e6ee7adSKyungmin Park #define module_init(...)
199*7e6ee7adSKyungmin Park #define module_exit(...)
200*7e6ee7adSKyungmin Park #define EXPORT_SYMBOL(...)
201*7e6ee7adSKyungmin Park #define EXPORT_SYMBOL_GPL(...)
202*7e6ee7adSKyungmin Park #define module_param_call(...)
203*7e6ee7adSKyungmin Park #define MODULE_PARM_DESC(...)
204*7e6ee7adSKyungmin Park #define MODULE_VERSION(...)
205*7e6ee7adSKyungmin Park #define MODULE_DESCRIPTION(...)
206*7e6ee7adSKyungmin Park #define MODULE_AUTHOR(...)
207*7e6ee7adSKyungmin Park #define MODULE_LICENSE(...)
208*7e6ee7adSKyungmin Park 
209*7e6ee7adSKyungmin Park #include "../drivers/mtd/ubi/ubi.h"
210*7e6ee7adSKyungmin Park 
211*7e6ee7adSKyungmin Park /* functions */
212*7e6ee7adSKyungmin Park extern int ubi_mtd_param_parse(const char *val, struct kernel_param *kp);
213*7e6ee7adSKyungmin Park extern int ubi_init(void);
214*7e6ee7adSKyungmin Park 
215*7e6ee7adSKyungmin Park extern struct ubi_device *ubi_devices[];
216*7e6ee7adSKyungmin Park 
217*7e6ee7adSKyungmin Park #endif
218