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