| /* |
| * Copyright (c) International Business Machines Corp., 2006 |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License as published by |
| * the Free Software Foundation; either version 2 of the License, or |
| * (at your option) any later version. |
| * |
| * This program is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See |
| * the GNU General Public License for more details. |
| * |
| * You should have received a copy of the GNU General Public License |
| * along with this program; if not, write to the Free Software |
| * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
| * |
| * Author: Artem B. Bityutskiy |
| * |
| * UBI (Unsorted Block Images) library. |
| */ |
| |
| #ifndef __LIBUBI_H__ |
| #define __LIBUBI_H__ |
| |
| #include <stdint.h> |
| #include <mtd/ubi-user.h> |
| #include <ctype.h> |
| #include <mtd/ubi-media.h> |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| /* UBI version libubi is made for */ |
| #define LIBUBI_UBI_VERSION 1 |
| |
| /* UBI library descriptor */ |
| typedef void * libubi_t; |
| |
| /** |
| * struct ubi_mkvol_request - volume creation request. |
| * */ |
| struct ubi_mkvol_request |
| { |
| int vol_id; |
| int alignment; |
| long long bytes; |
| int vol_type; |
| const char *name; |
| }; |
| |
| /** |
| * struct ubi_info - general UBI information. |
| * |
| * @dev_count count of UBI devices in system |
| * @lowest_dev_num lowest UBI device number |
| * @highest_dev_num highest UBI device number |
| * @version UBI version |
| */ |
| struct ubi_info |
| { |
| int dev_count; |
| int lowest_dev_num; |
| int highest_dev_num; |
| int version; |
| }; |
| |
| /** |
| * struct ubi_dev_info - UBI device information. |
| * |
| * @vol_count count of volumes on this UBI device |
| * @lowest_vol_num lowest volume number |
| * @highest_vol_num highest volume number |
| * @total_ebs total number of eraseblocks on this UBI device |
| * @avail_ebs how many eraseblocks are not used and available for new |
| * volumes |
| * @total_bytes @total_ebs * @eb_size |
| * @avail_bytes @avail_ebs * @eb_size |
| * @bad_count count of bad eraseblocks |
| * @eb_size size of UBI eraseblock |
| * @max_ec current highest erase counter value |
| * @bad_rsvd how many physical eraseblocks of the underlying flash |
| * device are reserved for bad eraseblocks handling |
| * @max_vol_count maximum count of volumes on this UBI device |
| * @min_io_size minimum input/output size of the UBI device |
| */ |
| struct ubi_dev_info |
| { |
| int dev_num; |
| int vol_count; |
| int lowest_vol_num; |
| int highest_vol_num; |
| int total_ebs; |
| int avail_ebs; |
| long long total_bytes; |
| long long avail_bytes; |
| int bad_count; |
| int eb_size; |
| long long max_ec; |
| int bad_rsvd; |
| int max_vol_count; |
| int min_io_size; |
| }; |
| |
| /** |
| * struct ubi_vol_info - UBI volume information. |
| * |
| * @dev_num UBI device number the volume resides on |
| * @vol_id ID of this volume |
| * @type volume type (%UBI_DYNAMIC_VOLUME or %UBI_STATIC_VOLUME) |
| * @alignment alignemnt of this volume |
| * @data_bytes how many data bytes are stored on this volume (equivalent to |
| * @rsvd_bytes for dynamic volumes) |
| * @rsvd_bytes how many bytes are reserved for this volume |
| * @rsvd_ebs how many eraseblocks are reserved for this volume |
| * @eb_size logical eraseblock size of this volume (may be less then |
| * device's logical eraseblock size due to alignment) |
| * @corrupted the volume is corrupted if this flag is not zero |
| * @name volume name (null-terminated) |
| */ |
| struct ubi_vol_info |
| { |
| int dev_num; |
| int vol_id; |
| int type; |
| int alignment; |
| long long data_bytes; |
| long long rsvd_bytes; |
| int rsvd_ebs; |
| int eb_size; |
| int corrupted; |
| char name[UBI_VOL_NAME_MAX + 1]; |
| }; |
| |
| /** |
| * libubi_open - open UBI library. |
| * |
| * This function initializes and opens the UBI library and returns UBI library |
| * descriptor in case of success and %NULL in case of failure. |
| */ |
| libubi_t libubi_open(void); |
| |
| /** |
| * libubi_close - close UBI library |
| * |
| * @desc UBI library descriptor |
| */ |
| void libubi_close(libubi_t desc); |
| |
| /** |
| * ubi_get_info - get general UBI information. |
| * |
| * @info pointer to the &struct ubi_info object to fill |
| * @desc UBI library descriptor |
| * |
| * This function fills the passed @info object with general UBI information and |
| * returns %0 in case of success and %-1 in case of failure. |
| */ |
| int ubi_get_info(libubi_t desc, struct ubi_info *info); |
| |
| /** |
| * ubi_mkvol - create an UBI volume. |
| * |
| * @desc UBI library descriptor |
| * @node name of the UBI character device to create a volume at |
| * @req UBI volume creation request (defined at <mtd/ubi-user.h>) |
| * |
| * This function creates a UBI volume as described at @req and returns %0 in |
| * case of success and %-1 in case of failure. The assigned volume ID is |
| * returned in @req->vol_id. |
| */ |
| int ubi_mkvol(libubi_t desc, const char *node, struct ubi_mkvol_request *req); |
| |
| /** |
| * ubi_rmvol - remove a UBI volume. |
| * |
| * @desc UBI library descriptor |
| * @node name of the UBI character device to remove a volume from |
| * @vol_id ID of the volume to remove |
| * |
| * This function removes volume @vol_id from UBI device @node and returns %0 in |
| * case of success and %-1 in case of failure. |
| */ |
| int ubi_rmvol(libubi_t desc, const char *node, int vol_id); |
| |
| /** |
| * ubi_rsvol - re-size UBI volume. |
| * |
| * @desc UBI library descriptor |
| * @node name of the UBI character device owning the volume which should be |
| * re-sized |
| * @vol_id volume ID to re-size |
| * @bytes new volume size in bytes |
| * |
| * This function returns %0 in case of success and %-1 in case of error. |
| */ |
| int ubi_rsvol(libubi_t desc, const char *node, int vol_id, long long bytes); |
| |
| /** |
| * ubi_get_dev_info - get UBI device information. |
| * |
| * @desc UBI library descriptor |
| * @node name of the UBI character device to fetch information about |
| * @info pointer to the &struct ubi_dev_info object to fill |
| * |
| * This function fills the passed @info object with UBI device information and |
| * returns %0 in case of success and %-1 in case of failure. |
| */ |
| int ubi_get_dev_info(libubi_t desc, const char *node, |
| struct ubi_dev_info *info); |
| |
| /** |
| * ubi_get_dev_info1 - get UBI device information. |
| * |
| * @desc UBI library descriptor |
| * @dev_num UBI device number to fetch information about |
| * @info pointer to the &struct ubi_dev_info object to fill |
| * |
| * This function is identical to 'ubi_get_dev_info()' except that it accepts UBI |
| * device number, not UBI character device. |
| */ |
| int ubi_get_dev_info1(libubi_t desc, int dev_num, struct ubi_dev_info *info); |
| |
| /** |
| * ubi_get_vol_info - get UBI volume information. |
| * |
| * @desc UBI library descriptor |
| * @node name of the UBI volume character device to fetch information about |
| * @info pointer to the &struct ubi_vol_info object to fill |
| * |
| * This function fills the passed @info object with UBI volume information and |
| * returns %0 in case of success and %-1 in case of failure. |
| */ |
| int ubi_get_vol_info(libubi_t desc, const char *node, |
| struct ubi_vol_info *info); |
| |
| /** |
| * ubi_get_vol_info1 - get UBI volume information. |
| * |
| * @desc UBI library descriptor |
| * @dev_num UBI device number |
| * @vol_id ID of the UBI volume to fetch information about |
| * @info pointer to the &struct ubi_vol_info object to fill |
| * |
| * This function is identical to 'ubi_get_vol_info()' except that it accepts UBI |
| * volume number, not UBI volume character device. |
| */ |
| int ubi_get_vol_info1(libubi_t desc, int dev_num, int vol_id, |
| struct ubi_vol_info *info); |
| |
| /** |
| * ubi_update_start - start UBI volume update. |
| * |
| * @desc UBI library descriptor |
| * @fd volume character devie file descriptor |
| * @bytes how many bytes will be written to the volume |
| * |
| * This function initiates UBI volume update and returns %0 in case of success |
| * and %-1 in case of error. |
| */ |
| int ubi_update_start(libubi_t desc, int fd, long long bytes); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* !__LIBUBI_H__ */ |