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