summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrank Haverkamp <haver@vnet.ibm.com>2006-06-21 14:26:02 +0200
committerFrank Haverkamp <haver@vnet.ibm.com>2006-10-31 15:06:06 +0100
commit6ccd7242c4c1404dafb64cd937adc3c65ce02385 (patch)
tree5a2833912e91c6f3f0d99b72d9dede35dc9c1ae2
parentf175083413f0f94de88def865eeb65e465ded389 (diff)
[MTD] UBI: Removed automake, autoconf, added ubi userspace headers.
Signed-off-by: Frank Haverkamp <haver@vnet.ibm.com>
-rw-r--r--include/mtd/ubi-header.h390
-rw-r--r--include/mtd/ubi-user.h128
-rw-r--r--ubi-utils/Makefile126
-rw-r--r--ubi-utils/Makefile.am96
-rwxr-xr-xubi-utils/bootstrap15
-rw-r--r--ubi-utils/configure.ac52
-rw-r--r--ubi-utils/inc/Makefile.am5
-rw-r--r--ubi-utils/inc/config-h.in74
-rw-r--r--ubi-utils/perl/f128_nand_sample.cfg (renamed from ubi-utils/src/mkpfi/f128_nand_sample.cfg)0
-rw-r--r--ubi-utils/perl/f64_nor_sample.cfg (renamed from ubi-utils/src/mkpfi/f64_nor_sample.cfg)0
-rwxr-xr-xubi-utils/perl/mkpfi (renamed from ubi-utils/src/mkpfi/mkpfi)0
-rwxr-xr-xubi-utils/perl/ubicrc32.pl (renamed from ubi-utils/src/ubicrc32/ubicrc32.pl)0
-rwxr-xr-xubi-utils/scripts/ubi_test.sh2
-rwxr-xr-xubi-utils/scripts/ubi_tools_test.sh2
-rw-r--r--ubi-utils/src/bin2nand.c (renamed from ubi-utils/src/bin2nand/bin2nand.c)73
-rw-r--r--ubi-utils/src/bin2nand/nandecc.h11
-rw-r--r--ubi-utils/src/bootenv.c (renamed from ubi-utils/src/libbootenv/bootenv.c)18
-rw-r--r--ubi-utils/src/bootenv.h (renamed from ubi-utils/inc/bootenv.h)0
-rw-r--r--ubi-utils/src/config.h28
-rw-r--r--ubi-utils/src/crc32.c (renamed from ubi-utils/src/libcrc32/crc32.c)0
-rw-r--r--ubi-utils/src/crc32.h (renamed from ubi-utils/inc/crc32.h)0
-rw-r--r--ubi-utils/src/error.c (renamed from ubi-utils/src/liberror/error.c)0
-rw-r--r--ubi-utils/src/error.h (renamed from ubi-utils/inc/error.h)4
-rw-r--r--ubi-utils/src/example_ubi.h (renamed from ubi-utils/inc/example_ubi.h)0
-rw-r--r--ubi-utils/src/hashmap.c (renamed from ubi-utils/src/libbootenv/hashmap.c)0
-rw-r--r--ubi-utils/src/hashmap.h (renamed from ubi-utils/src/libbootenv/hashmap.h)0
-rw-r--r--ubi-utils/src/libpfiflash.c (renamed from ubi-utils/src/libpfiflash/pfiflash.c)12
-rw-r--r--ubi-utils/src/libubi.c (renamed from ubi-utils/src/libubi/libubi.c)0
-rw-r--r--ubi-utils/src/libubi_int.h (renamed from ubi-utils/src/libubi/libubi_int.h)6
-rw-r--r--ubi-utils/src/libubi_sysfs.c (renamed from ubi-utils/src/libubi/libubi_sysfs.c)5
-rw-r--r--ubi-utils/src/libubi_sysfs.h (renamed from ubi-utils/src/libubi/libubi_sysfs.h)0
-rw-r--r--ubi-utils/src/libubigen.c (renamed from ubi-utils/src/libubigen/ubigen.c)2
-rw-r--r--ubi-utils/src/libubimirror.c (renamed from ubi-utils/src/libubimirror/ubimirror.c)6
-rw-r--r--ubi-utils/src/list.c (renamed from ubi-utils/src/liblist/list.c)0
-rw-r--r--ubi-utils/src/list.h (renamed from ubi-utils/inc/list.h)0
-rw-r--r--ubi-utils/src/mkbootenv.c (renamed from ubi-utils/src/mkbootenv/mkbootenv.c)0
-rw-r--r--ubi-utils/src/nand2bin.c (renamed from ubi-utils/src/nand2bin/nand2bin.c)9
-rw-r--r--ubi-utils/src/nandcorr.c (renamed from ubi-utils/src/nand2bin/nandcorr.c)0
-rw-r--r--ubi-utils/src/nandecc.c (renamed from ubi-utils/src/bin2nand/nandecc.c)0
-rw-r--r--ubi-utils/src/nandecc.h (renamed from ubi-utils/inc/nandecc.h)0
-rw-r--r--ubi-utils/src/pddcustomize.c (renamed from ubi-utils/src/pddcustomize/pddcustomize.c)0
-rw-r--r--ubi-utils/src/peb.c (renamed from ubi-utils/src/libpeb/peb.c)0
-rw-r--r--ubi-utils/src/peb.h (renamed from ubi-utils/inc/peb.h)0
-rw-r--r--ubi-utils/src/pfi.c (renamed from ubi-utils/src/libpfi/pfi.c)0
-rw-r--r--ubi-utils/src/pfi.h (renamed from ubi-utils/inc/pfi.h)0
-rw-r--r--ubi-utils/src/pfi2bin.c (renamed from ubi-utils/src/pfi2bin/pfi2bin.c)0
-rw-r--r--ubi-utils/src/pfiflash.c (renamed from ubi-utils/src/pfiflash/pfiflash.c)2
-rw-r--r--ubi-utils/src/pfiflash.h (renamed from ubi-utils/inc/pfiflash.h)0
-rw-r--r--ubi-utils/src/reader.c (renamed from ubi-utils/src/libreader/reader.c)14
-rw-r--r--ubi-utils/src/reader.h (renamed from ubi-utils/inc/reader.h)0
-rw-r--r--ubi-utils/src/ubicrc32.c (renamed from ubi-utils/src/ubicrc32/ubicrc32.c)0
-rw-r--r--ubi-utils/src/ubigen.c (renamed from ubi-utils/src/ubigen/ubigen_main.c)0
-rw-r--r--ubi-utils/src/ubigen.h (renamed from ubi-utils/inc/ubigen.h)0
-rw-r--r--ubi-utils/src/ubiinfo/ubiflash.h185
-rw-r--r--ubi-utils/src/ubiinfo/ubiinfo.c406
-rw-r--r--ubi-utils/src/ubiinfo/ubiipl.h87
-rw-r--r--ubi-utils/src/ubimirror.c (renamed from ubi-utils/src/ubimirror/ubimirror.c)0
-rw-r--r--ubi-utils/src/ubimirror.h (renamed from ubi-utils/inc/ubimirror.h)2
-rw-r--r--ubi-utils/src/ubimkvol.c (renamed from ubi-utils/src/ubimkvol/ubimkvol.c)9
-rw-r--r--ubi-utils/src/ubirmvol.c (renamed from ubi-utils/src/ubirmvol/ubirmvol.c)4
-rw-r--r--ubi-utils/src/ubiupdatevol.c (renamed from ubi-utils/src/ubiwritevol/ubiwritevol.c)6
-rw-r--r--ubi-utils/src/unubi.c (renamed from ubi-utils/src/unubi/unubi.c)11
62 files changed, 723 insertions, 1067 deletions
diff --git a/include/mtd/ubi-header.h b/include/mtd/ubi-header.h
new file mode 100644
index 0000000..1b325a1
--- /dev/null
+++ b/include/mtd/ubi-header.h
@@ -0,0 +1,390 @@
+/*
+ * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Authors: Artem B. Bityutskiy
+ * Thomas Gleixner
+ * Frank Haverkamp
+ * Oliver Lohmann
+ * Andreas Arnez
+ */
+
+/*
+ * This file defines the layout of UBI headers and all the other UBI on-flash
+ * data structures.
+ */
+
+#ifndef __UBI_HEADER_H__
+#define __UBI_HEADER_H__
+
+#include <asm/byteorder.h>
+
+/* The version of this UBI implementation */
+#define UBI_VERSION 1
+
+/* The highest erase counter value supported by this implementation of UBI */
+#define UBI_MAX_ERASECOUNTER 0x7FFFFFFF
+
+/* The initial CRC32 value used when calculating CRC checksums */
+#define UBI_CRC32_INIT 0xFFFFFFFFU
+
+/**
+ * Magic numbers of the UBI headers.
+ *
+ * @UBI_EC_HDR_MAGIC: erase counter header magic number (ASCII "UBI#")
+ * @UBI_VID_HDR_MAGIC: volume identifier header magic number (ASCII "UBI!")
+ */
+enum {
+ UBI_EC_HDR_MAGIC = 0x55424923,
+ UBI_VID_HDR_MAGIC = 0x55424921
+};
+
+/**
+ * Molume type constants used in volume identifier headers.
+ *
+ * @UBI_VID_DYNAMIC: dynamic volume
+ * @UBI_VID_STATIC: static volume
+ */
+enum {
+ UBI_VID_DYNAMIC = 1,
+ UBI_VID_STATIC = 2
+};
+
+/**
+ * Compatibility constants used by internal volumes.
+ *
+ * @UBI_COMPAT_DELETE: delete this internal volume before anything is written
+ * to the flash
+ * @UBI_COMPAT_RO: attach this device in read-only mode
+ * @UBI_COMPAT_IGNORE: ignore this internal volume, but the UBI wear-leveling
+ * unit may still move these logical eraseblocks to ensure wear-leveling
+ * @UBI_COMPAT_PRESERVE: preserve this internal volume - do not touch its
+ * physical eraseblocks, don't even allow the wear-leveling unit to move
+ * them
+ * @UBI_COMPAT_REJECT: reject this UBI image
+ */
+enum {
+ UBI_COMPAT_DELETE = 1,
+ UBI_COMPAT_RO = 2,
+ UBI_COMPAT_IGNORE = 3,
+ UBI_COMPAT_PRESERVE = 4,
+ UBI_COMPAT_REJECT = 5
+};
+
+/*
+ * ubi16_t/ubi32_t/ubi64_t - 16, 32, and 64-bit integers used in UBI on-flash
+ * data structures.
+ */
+typedef struct {
+ uint16_t int16;
+} __attribute__ ((packed)) ubi16_t;
+
+typedef struct {
+ uint32_t int32;
+} __attribute__ ((packed)) ubi32_t;
+
+typedef struct {
+ uint64_t int64;
+} __attribute__ ((packed)) ubi64_t;
+
+/*
+ * In this implementation UBI uses the big-endian format for on-flash integers.
+ * The below are the corresponding endianess conversion macros.
+ */
+#define cpu_to_ubi16(x) ((ubi16_t){__cpu_to_be16(x)})
+#define ubi16_to_cpu(x) ((uint16_t)__be16_to_cpu((x).int16))
+
+#define cpu_to_ubi32(x) ((ubi32_t){__cpu_to_be32(x)})
+#define ubi32_to_cpu(x) ((uint32_t)__be32_to_cpu((x).int32))
+
+#define cpu_to_ubi64(x) ((ubi64_t){__cpu_to_be64(x)})
+#define ubi64_to_cpu(x) ((uint64_t)__be64_to_cpu((x).int64))
+
+/*
+ * Sizes of UBI headers.
+ */
+#define UBI_EC_HDR_SIZE sizeof(struct ubi_ec_hdr)
+#define UBI_VID_HDR_SIZE sizeof(struct ubi_vid_hdr)
+
+/*
+ * Sizes of UBI headers without the ending CRC.
+ */
+#define UBI_EC_HDR_SIZE_CRC (UBI_EC_HDR_SIZE - sizeof(ubi32_t))
+#define UBI_VID_HDR_SIZE_CRC (UBI_VID_HDR_SIZE - sizeof(ubi32_t))
+
+/*
+ * How much private data may internal volumes store in the VID header.
+ */
+#define UBI_VID_HDR_IVOL_DATA_SIZE 12
+
+/**
+ * struct ubi_ec_hdr - UBI erase counter header.
+ *
+ * @magic: the erase counter header magic number (%UBI_EC_HDR_MAGIC)
+ * @version: the version of UBI implementation which is supposed to accept this
+ * UBI image (%UBI_VERSION)
+ * @padding1: reserved for future, zeroes
+ * @ec: the erase counter
+ * @vid_hdr_offset: where the VID header begins
+ * @data_offset: where the user data begins
+ * @padding2: reserved for future, zeroes
+ * @hdr_crc: the erase counter header CRC checksum
+ *
+ * The erase counter header takes 64 bytes and has a plenty of unused space for
+ * future usage. The unused fields are zeroed. The @version field is used to
+ * indicate the version of UBI implementation which is supposed to be able to
+ * work with this UBI image. If @version is greater then the current UBI
+ * version, the image is rejecter. This may be useful in future if something
+ * is changed radically. This field is duplicated in the volume identifier
+ * header.
+ *
+ * The @vid_hdr_offset and @data_offset fields contain the offset of the the
+ * volume identifier header and user data, relative to the beginning of the
+ * eraseblock. These values have to be the same for all eraseblocks.
+ */
+struct ubi_ec_hdr {
+ ubi32_t magic;
+ uint8_t version;
+ uint8_t padding1[3];
+ ubi64_t ec; /* Warning: the current limit is 31-bit anyway! */
+ ubi32_t vid_hdr_offset;
+ ubi32_t data_offset;
+ uint8_t padding2[36];
+ ubi32_t hdr_crc;
+} __attribute__ ((packed));
+
+/**
+ * struct ubi_vid_hdr - on-flash UBI volume identifier header.
+ *
+ * @magic: volume identifier header magic number (%UBI_VID_HDR_MAGIC)
+ * @version: UBI implementation version which is supposed to accept this UBI
+ * image (%UBI_VERSION)
+ * @vol_type: volume type (%UBI_VID_DYNAMIC or %UBI_VID_STATIC)
+ * @copy_flag: a flag indicating if this physical eraseblock was created by
+ * means of copying an original physical eraseblock to ensure wear-leveling.
+ * @compat: compatibility of this volume (%UBI_COMPAT_DELETE,
+ * %UBI_COMPAT_IGNORE, %UBI_COMPAT_PRESERVE, or %UBI_COMPAT_REJECT)
+ * @vol_id: volume ID
+ * @lnum: logical eraseblock number
+ * @leb_ver: eraseblock copy number
+ * @data_size: how many bytes of data this eraseblock contains.
+ * @used_ebs: total number of used logical eraseblocks in this volume
+ * @data_pad: how many bytes at the end of this eraseblock are not used
+ * @data_crc: CRC checksum of data containing in this eraseblock
+ * @padding1: reserved for future, zeroes
+ * @ivol_data: private data of internal volumes
+ * @hdr_crc: volume identifier header CRC checksum
+ *
+ * The @leb_ver and the @copy_flag fields are used to distinguish between older
+ * and newer copies of logical eraseblocks, as well as to guarantee robustness
+ * to unclean reboots. As UBI erases logical eraseblocks asynchronously, it has
+ * to distinguish between older and newer copies of eraseblocks. This is done
+ * using the @version field. On the other hand, when UBI moves an eraseblock,
+ * its version is also increased and the @copy_flag is set to 1. Additionally,
+ * when moving eraseblocks, UBI calculates data CRC and stores it in the
+ * @data_crc field, even for dynamic volumes.
+ *
+ * Thus, if there are 2 eraseblocks of the same volume and logical number, UBI
+ * uses the following algorithm to pick one of them. It first picks the one
+ * with larger version (say, A). If @copy_flag is not set, then A is picked. If
+ * @copy_flag is set, UBI checks the CRC of the eraseblock (@data_crc). This is
+ * needed to ensure that copying was finished. If the CRC is all right, A is
+ * picked. If not, the older eraseblock is picked.
+ *
+ * Note, the @leb_ver field may overflow. Thus, if you have 2 versions A and B,
+ * then A > B if abs(A-B) < 0x7FFFFFFF, and A < B otherwise.
+ *
+ * There are 2 sorts of volumes in UBI: user volumes and internal volumes.
+ * Internal volumes are not seen from outside and are used for different
+ * internal UBI purposes. In this implementation there are only two internal
+ * volumes: the layout volume and the update volume. Internal volumes are the
+ * main mechanism of UBI extensions. For example, in future one may introduce a
+ * journal internal volume.
+ *
+ * The @compat field is only used for internal volumes and contains the degree
+ * of their compatibility. This field is always zero for user volumes. This
+ * field provides a mechanism to introduce UBI extensions and to be still
+ * compatible with older UBI binaries. For example, if someone introduced an
+ * journal internal volume in future, he would probably use %UBI_COMPAT_DELETE
+ * compatibility. And in this case, older UBI binaries, which know nothing
+ * about the journal volume, would just delete this and work perfectly fine.
+ * This is somewhat similar to what Ext2fs does when it is fed by an Ext3fs
+ * image - it just ignores the Ext3fs journal.
+ *
+ * The @data_crc field contains the CRC checksum of the contents of the logical
+ * eraseblock if this is a static volume. In case of dynamic volumes, it does
+ * not contain the CRC checksum as a rule. The only exception is when the
+ * logical eraseblock was moved by the wear-leveling unit, then the
+ * wear-leveling unit calculates the eraseblocks' CRC and stores it at
+ * @data_crc.
+ *
+ * The @data_size field is always used for static volumes because we want to
+ * know about how many bytes of data are stored in this eraseblock. For
+ * dynamic eraseblocks, this field usually contains zero. The only exception is
+ * when the logical eraseblock is moved to another physical eraseblock due to
+ * wear-leveling reasons. In this case, UBI calculates CRC checksum of the
+ * contents and uses both @data_crc and @data_size fields. In this case, the
+ * @data_size field contains the size of logical eraseblock of this volume
+ * (which may vary owing to @alignment).
+ *
+ * The @used_ebs field is used only for static volumes and indicates how many
+ * eraseblocks the data of the volume takes. For dynamic volumes this field is
+ * not used and always contains zero.
+ *
+ * The @data_pad is calculated when volumes are created using the alignment
+ * parameter. So, effectively, the @data_pad field reduces the size of logical
+ * eraseblocks of this volume. This is very handy when one uses block-oriented
+ * software (say, cramfs) on top of the UBI volume.
+ *
+ * The @ivol_data contains private data of internal volumes. This might be very
+ * handy to store data in the VID header, not in the eraseblock's contents. For
+ * example it may make life of simple boot-loaders easier. The @ivol_data field
+ * contains zeroes for user volumes.
+ */
+struct ubi_vid_hdr {
+ ubi32_t magic;
+ uint8_t version;
+ uint8_t vol_type;
+ uint8_t copy_flag;
+ uint8_t compat;
+ ubi32_t vol_id;
+ ubi32_t lnum;
+ ubi32_t leb_ver;
+ ubi32_t data_size;
+ ubi32_t used_ebs;
+ ubi32_t data_pad;
+ ubi32_t data_crc;
+ uint8_t padding1[12];
+ uint8_t ivol_data[UBI_VID_HDR_IVOL_DATA_SIZE];
+ ubi32_t hdr_crc;
+} __attribute__ ((packed));
+
+/**
+ * struct ubi_vid_hdr_upd_vol - private data of the update internal volume
+ * stored in volume identifier headers.
+ *
+ * @vol_id: volume ID of the volume under update
+ * @padding: zeroes
+ */
+struct ubi_vid_hdr_upd_vol {
+ ubi32_t vol_id;
+ uint8_t padding[UBI_VID_HDR_IVOL_DATA_SIZE - 4];
+} __attribute__ ((packed));
+
+/*
+ * Count of internal UBI volumes.
+ */
+#define UBI_INT_VOL_COUNT 2
+
+/*
+ * Internal volume IDs start from this digit. There is a reserved room for 4096
+ * internal volumes.
+ */
+#define UBI_INTERNAL_VOL_START (0x7FFFFFFF - 4096)
+
+/**
+ * enum ubi_internal_volume_numbers - volume IDs of internal UBI volumes.
+ *
+ * %UBI_LAYOUT_VOL_ID: volume ID of the layout volume
+ * %UBI_UPDATE_VOL_ID: volume ID of the update volume
+ */
+enum ubi_internal_volume_ids {
+ UBI_LAYOUT_VOL_ID = UBI_INTERNAL_VOL_START,
+ UBI_UPDATE_VOL_ID = UBI_INTERNAL_VOL_START + 1
+};
+
+/*
+ * Number of logical eraseblocks reserved for internal volumes.
+ */
+#define UBI_LAYOUT_VOLUME_EBS 2
+#define UBI_UPDATE_VOLUME_EBS 1
+
+/*
+ * Names of internal volumes
+ */
+#define UBI_LAYOUT_VOLUME_NAME "The layout volume"
+#define UBI_UPDATE_VOLUME_NAME "The update volume"
+
+/*
+ * Compatibility flags of internal volumes.
+ */
+#define UBI_LAYOUT_VOLUME_COMPAT UBI_COMPAT_REJECT
+#define UBI_UPDATE_VOLUME_COMPAT UBI_COMPAT_REJECT
+
+/*
+ * The maximum number of volumes per one UBI device.
+ */
+#define UBI_MAX_VOLUMES 128
+
+/*
+ * The maximum volume name length.
+ */
+#define UBI_VOL_NAME_MAX 127
+
+/*
+ * Size of volume table records.
+ */
+#define UBI_VTBL_RECORD_SIZE sizeof(struct ubi_vol_tbl_record)
+
+/*
+ * Size of volume table records without the ending CRC.
+ */
+#define UBI_VTBL_RECORD_SIZE_CRC (UBI_VTBL_RECORD_SIZE - sizeof(ubi32_t))
+
+/**
+ * struct ubi_vol_tbl_record - a record in the volume table.
+ *
+ * @reserved_pebs: how many physical eraseblocks are reserved for this volume
+ * @alignment: volume alignment
+ * @data_pad: how many bytes are not used at the end of the eraseblocks to
+ * satisfy the requested alignment
+ * @padding1: reserved, zeroes
+ * @name_len: the volume name length
+ * @name: the volume name
+ * @padding2: reserved, zeroes
+ * @crc: a CRC32 checksum of the record
+ *
+ * The layout volume consists of 2 logical eraseblock, each of which contains
+ * the volume table (i.e., the volume table is duplicated). The volume table is
+ * an array of &struct ubi_vol_tbl_record objects indexed by the volume ID.
+ *
+ * If the size of the logical eraseblock is large enough to fit
+ * %UBI_MAX_VOLUMES, the volume table contains %UBI_MAX_VOLUMES records.
+ * Otherwise, it contains as much records as can be fit (i.e., size of logical
+ * eraseblock divided by sizeof(struct ubi_vol_tbl_record)).
+ *
+ * The @alignment field is specified when the volume is created and cannot be
+ * later changed. It may be useful, for example, when a block-oriented file
+ * system works on top of UBI. The @data_pad field is calculated using the
+ * logical eraseblock size and @alignment. The alignment must be multiple to the
+ * minimal flash I/O unit. If @alignment is 1, all the available space of
+ * eraseblocks is used.
+ *
+ * Empty records contain all zeroes and the CRC checksum of those zeroes.
+ */
+struct ubi_vol_tbl_record {
+ ubi32_t reserved_pebs;
+ ubi32_t alignment;
+ ubi32_t data_pad;
+ uint8_t vol_type;
+ uint8_t padding1;
+ ubi16_t name_len;
+ uint8_t name[UBI_VOL_NAME_MAX + 1];
+ uint8_t padding2[24];
+ ubi32_t crc;
+} __attribute__ ((packed));
+
+#endif /* !__UBI_HEADER_H__ */
diff --git a/include/mtd/ubi-user.h b/include/mtd/ubi-user.h
new file mode 100644
index 0000000..161f674
--- /dev/null
+++ b/include/mtd/ubi-user.h
@@ -0,0 +1,128 @@
+/*
+ * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Author: Artem B. Bityutskiy
+ */
+
+#ifndef __UBI_USER_H__
+#define __UBI_USER_H__
+
+#ifndef __KERNEL__
+#define __user
+#endif
+
+/*
+ * When a new volume is created, users may either specify the volume number they
+ * want to create or to let UBI automatically assign a volume number using this
+ * constant.
+ */
+#define UBI_VOL_NUM_AUTO (-1)
+
+/*
+ * IOCTL commands of UBI character devices
+ */
+
+#define UBI_IOC_MAGIC 'o'
+
+/* Create an UBI volume */
+#define UBI_IOCMKVOL _IOW(UBI_IOC_MAGIC, 0, struct ubi_mkvol_req)
+/* Remove an UBI volume */
+#define UBI_IOCRMVOL _IOW(UBI_IOC_MAGIC, 1, int32_t)
+/* Re-size an UBI volume */
+#define UBI_IOCRSVOL _IOW(UBI_IOC_MAGIC, 2, struct ubi_rsvol_req)
+
+/*
+ * IOCTL commands of UBI volume character devices.
+ */
+
+#define UBI_VOL_IOC_MAGIC 'O'
+
+/* Start UBI volume update */
+#define UBI_IOCVOLUP _IOW(UBI_VOL_IOC_MAGIC, 0, int64_t)
+/* An eraseblock erasure command, used for debugging, disabled by dafault */
+#define UBI_IOCEBER _IOW(UBI_VOL_IOC_MAGIC, 0, int32_t)
+
+/**
+ * UBI volume type constants.
+ *
+ * @UBI_DYNAMIC_VOLUME: dynamic volume
+ * @UBI_STATIC_VOLUME: static volume
+ */
+enum {
+ UBI_DYNAMIC_VOLUME = 3,
+ UBI_STATIC_VOLUME = 4
+};
+
+/**
+ * struct ubi_mkvol_req - volume description data structure used in
+ * volume creation requests.
+ *
+ * @vol_id: volume number
+ * @alignment: volume alignment
+ * @bytes: volume size in bytes
+ * @vol_type: volume type (%UBI_DYNAMIC_VOLUME or %UBI_STATIC_VOLUME)
+ * @padding: reserved for future, not used
+ * @name_len: volume name length
+ * @name: volume name
+ *
+ * This structure is used by userspace programs when creating new volumes. The
+ * @used_bytes field is only necessary when creating static volumes.
+ *
+ * The @alignment field specifies the required alignment of the volume logical
+ * eraseblock. This means, that the size of logical eraseblocks will be aligned
+ * to this number, i.e.,
+ * (UBI device logical eraseblock size) mod (@alignment) = 0.
+ *
+ * To put it differently, the logical eraseblock of this volume may be slightly
+ * shortened in order to make it properly aligned. The alignment has to be
+ * multiple of the flash minimal input/output unit, or %1 to utilize the entire
+ * available space of logical eraseblocks.
+ *
+ * The @alignment field may be useful, for example, when one wants to maintain
+ * a block device on top of an UBI volume. In this case, it is desirable to fit
+ * an integer number of blocks in logical eraseblocks of this UBI volume. With
+ * alignment it is possible to update this volume using plane UBI volume image
+ * BLOBs, without caring about how to properly write them.
+ */
+struct ubi_mkvol_req {
+ int32_t vol_id;
+ int32_t alignment;
+ int64_t bytes;
+ int8_t vol_type;
+ int8_t padding[9];
+ int16_t name_len;
+ __user const char *name;
+} __attribute__ ((packed));
+
+/**
+ * struct ubi_rsvol_req - a data structure used in volume re-size requests.
+ *
+ * @vol_id: ID of the volume to re-size
+ * @bytes: new size of the volume in bytes
+ *
+ * Re-sizing is possible for both dynamic and static volumes. But while dynamic
+ * volumes may be re-sized arbitrarily, static volumes cannot be made to be
+ * smaller then the number of bytes they bear. To arbitrarily shrink a static
+ * volume, it must be wiped out first (by means of volume update operation with
+ * zero number of bytes).
+ */
+struct ubi_rsvol_req {
+ int64_t bytes;
+ int32_t vol_id;
+} __attribute__ ((packed));
+
+#endif /* __UBI_USER_H__ */
diff --git a/ubi-utils/Makefile b/ubi-utils/Makefile
index 686aa60..307da31 100644
--- a/ubi-utils/Makefile
+++ b/ubi-utils/Makefile
@@ -1,79 +1,89 @@
#
-# This makefile simplifies the build process for a toolchain user.
-# A toolchain developer should prefer a manual build process which
-# fits to his original needs.
+# Makefile for ubi-utils
#
-X86_PREFIX?=/usr/local
-x86_path=./build_x86
-x86_status=$(x86_path)/config.status
+HOST_OS_NAME := $(shell uname -s)
+HOST_VERSION_NAME := $(shell uname -r)
+BUILD_CPU := $(shell uname -m)
+BUILD_OS := $(shell uname -o)
-PPC_PREFIX?=/opt/ppcnf/crossroot
-ppc_path=./build_ppc
-ppc_status=$(ppc_path)/config.status
+KERNELHDR := ../include # mtd-utils private headers
+DESTDIR := /usr/local # default installation
+SBINDIR := bin # default directory for binaries
-all: x86 ppc
+CC := $(CROSS)gcc
+CFLAGS := -I./inc -I./src -I$(KERNELHDR) -O2 -g -Wall -Werror \
+ -Wwrite-strings -W -std=gnu99 \
+ -DHOST_OS_NAME=\"$(HOST_OS_NAME)\" \
+ -DHOST_VERSION_NAME=\"$(HOST_VERSION_NAME)\" \
+ -DBUILD_CPU=\"$(BUILD_CPU)\" -DBUILD_OS=\"$(BUILD_OS)\"
-install: install_x86 install_ppc
-uninstall: uninstall_x86 uninstall_ppc
+PERLPROGS = mkpfi ubicrc32.pl
+TARGETS = ubiupdatevol ubimkvol ubirmvol pfiflash pddcustomize ubimirror \
+ bin2nand nand2bin ubigen mkbootenv unubi pfi2bin
-install_x86: x86
- make -C $(x86_path) install
+vpath %.c ./src
-install_ppc: ppc
- make -C $(ppc_path) install
+%: %.o
+ $(CC) $(LDFLAGS) -g -o $@ $^
+%.o: %.c
+ $(CC) $(CFLAGS) -g -c -o $@ $< -g -Wp,-MD,.$(shell basename $<).dep
-uninstall_x86: x86
- make -C $(x86_path) uninstall
+all: $(TARGETS)
-uninstall_ppc: ppc
- make -C $(ppc_path) uninstall
+IGNORE=${wildcard .*.c.dep}
+-include ${IGNORE}
+clean:
+ rm -rf *.o $(TARGETS) .*.c.dep
+ubiupdatevol: ubiupdatevol.o error.o libubi.o libubi_sysfs.o
+ $(CC) $(LDFLAGS) -o $@ $^
-x86: $(x86_status)
- make -C $(x86_path)
+ubimkvol: ubimkvol.o error.o libubi.o libubi_sysfs.o
+ $(CC) $(LDFLAGS) -o $@ $^
-ppc: $(ppc_status)
- make -C $(ppc_path)
+ubirmvol: ubirmvol.o error.o libubi.o libubi_sysfs.o
+ $(CC) $(LDFLAGS) -o $@ $^
-$(x86_status): $(x86_path) Makefile.in
- cd $(x86_path) && ./config.status || ../configure \
- --prefix=$(X86_PREFIX)
+pddcustomize: pddcustomize.o error.o libubimirror.o bootenv.o hashmap.o \
+ libubi.o libubi_sysfs.o
+ $(CC) $(LDFLAGS) -o $@ $^
-$(ppc_status): $(ppc_path) Makefile.in
- cd $(ppc_path) && ./config.status || ../configure \
- --build=i686-pc-linux-gnu \
- --host=ppc-linux \
- --prefix=$(PPC_PREFIX) \
- --exec-prefix=$(PPC_PREFIX)
+pfiflash: pfiflash.o libpfiflash.o list.o reader.o error.o libubimirror.o \
+ bootenv.o hashmap.o pfi.o libubi.o libubi_sysfs.o
+ $(CC) $(LDFLAGS) -o $@ $^
-Makefile.in: Makefile.am
- ./bootstrap
+ubimirror: ubimirror.o error.o libubimirror.o bootenv.o hashmap.o \
+ libubi.o libubi_sysfs.o
+ $(CC) $(LDFLAGS) -o $@ $^
-$(x86_path):
- mkdir -p $(x86_path)
+nand2bin: nand2bin.o nandecc.o nandcorr.o
+ $(CC) $(LDFLAGS) -o $@ $^
-$(ppc_path):
- mkdir -p $(ppc_path)
+bin2nand: bin2nand.o error.o nandecc.o
+ $(CC) $(LDFLAGS) -o $@ $^
-clean:
- rm -rf depcomp install-sh missing .deps \
- config.log config.status \
- inc/Makefile.in lib/Makefile.in
- find . -type f -name "*~" -print | xargs $(RM)
- rm -f Makefile.in
- rm -f aclocal.m4
- rm -rf autom4te.cache
- rm -f config.guess
- rm -f config.sub
- rm -f configure
- rm -f depcomp
- rm -f install-sh
- rm -f ltmain.sh
- rm -f missing
- rm -f lib/Makefile.in
- rm -f inc/Makefile.in
- rm -rf $(x86_path)
- rm -rf $(ppc_path)
+ubigen: ubigen.o libubigen.o crc32.o
+ $(CC) $(LDFLAGS) -o $@ $^
+
+mkbootenv: mkbootenv.o bootenv.o hashmap.o error.o
+ $(CC) $(LDFLAGS) -o $@ $^
+
+unubi: unubi.o crc32.o
+ $(CC) $(LDFLAGS) -o $@ $^
+
+pfi2bin: pfi2bin.o peb.o error.o list.o crc32.o libubigen.o bootenv.o \
+ hashmap.o reader.o pfi.o
+ $(CC) $(LDFLAGS) -o $@ $^
+
+install: ${TARGETS}
+ mkdir -p ${DESTDIR}/${SBINDIR}
+ install -m0755 ${TARGETS} ${DESTDIR}/${SBINDIR}/
+ (cd perl && install ${PERLPROGS} ${DESTDIR}/${SBINDIR}/)
+
+uninstall:
+ for file in ${TARGETS} ${PERLPROGS}; do \
+ $(RM) ${DESTDIR}/${SBINDIR}/$$file; \
+ done
diff --git a/ubi-utils/Makefile.am b/ubi-utils/Makefile.am
deleted file mode 100644
index a5c9252..0000000
--- a/ubi-utils/Makefile.am
+++ /dev/null
@@ -1,96 +0,0 @@
-AUTOMAKE_OPTIONS = foreign
-SUBDIRS=lib inc
-
-
-# -----------------------------------------------------------------------------
-# Scripts (Perl/Bash) which shall be installed.
-#
-bin_SCRIPTS = $(top_srcdir)/src/mkpfi/mkpfi
-
-# -----------------------------------------------------------------------------
-# C programs which shall be build and installed.
-#
-INCLUDES=-I$(top_srcdir)/inc -I$(top_srcdir)/../../kernel/include
-
-bin_PROGRAMS = bin/pfi2bin \
- bin/bin2nand \
- bin/ubicrc32 \
- bin/mkbootenv \
- bin/ubimirror \
- bin/ubimkvol \
- bin/ubirmvol \
- bin/ubiwritevol \
- bin/pfiflash \
- bin/pddcustomize \
- bin/ubiinfo \
- bin/nand2bin \
- bin/unubi
-
-# -----------------------------------------------------------------------------
-# C programs which shall be build and NOT installed. (FLD dependency...)
-#
-noinst_PROGRAMS = bin/ubigen
-
-bin_ubigen_SOURCES = $(top_srcdir)/src/ubigen/ubigen_main.c
-bin_ubigen_LDADD = $(top_builddir)/lib/libubigen.la \
- $(top_builddir)/lib/libcrc32.la
-
-bin_pfiflash_SOURCES = $(top_srcdir)/src/pfiflash/pfiflash.c
-bin_pfiflash_LDADD = $(top_builddir)/lib/libpfiflash.la \
- $(top_builddir)/lib/liberror.la
-bin_pfiflash_LDFLAGS = -static
-
-bin_pddcustomize_SOURCES= $(top_srcdir)/src/pddcustomize/pddcustomize.c
-bin_pddcustomize_LDADD = $(top_builddir)/lib/libbootenv.la \
- $(top_builddir)/lib/liberror.la \
- $(top_builddir)/lib/libubi.la \
- $(top_builddir)/lib/libubimirror.la
-bin_pddcustomize_LDFLAGS= -static
-
-bin_pfi2bin_SOURCES = $(top_srcdir)/src/pfi2bin/pfi2bin.c
-bin_pfi2bin_LDADD = $(top_builddir)/lib/libubigen.la \
- $(top_builddir)/lib/liberror.la \
- $(top_builddir)/lib/liblist.la \
- $(top_builddir)/lib/libreader.la
-
-bin_bin2nand_SOURCES = $(top_srcdir)/src/bin2nand/bin2nand.c \
- $(top_srcdir)/src/bin2nand/nandecc.c
-bin_bin2nand_LDADD = $(top_builddir)/lib/liberror.la
-
-
-bin_ubicrc32_SOURCES = $(top_srcdir)/src/ubicrc32/ubicrc32.c
-bin_ubicrc32_LDADD = $(top_builddir)/lib/libcrc32.la
-
-bin_mkbootenv_SOURCES = $(top_srcdir)/src/mkbootenv/mkbootenv.c
-bin_mkbootenv_LDADD = $(top_builddir)/lib/libbootenv.la \
- $(top_builddir)/lib/liberror.la
-
-
-bin_ubimirror_SOURCES = $(top_srcdir)/src/ubimirror/ubimirror.c
-bin_ubimirror_LDADD = $(top_builddir)/lib/liberror.la \
- $(top_builddir)/lib/libubimirror.la
-bin_ubimirror_LDFLAGS= -static
-
-bin_ubimkvol_SOURCES = $(top_srcdir)/src/ubimkvol/ubimkvol.c
-bin_ubimkvol_LDADD = $(top_builddir)/lib/libubi.la
-bin_ubimkvol_LDFLAGS = -static
-
-bin_ubirmvol_SOURCES = $(top_srcdir)/src/ubirmvol/ubirmvol.c
-bin_ubirmvol_LDADD = $(top_builddir)/lib/libubi.la
-bin_ubirmvol_LDFLAGS = -static
-
-bin_ubiwritevol_SOURCES = $(top_srcdir)/src/ubiwritevol/ubiwritevol.c
-bin_ubiwritevol_LDADD = $(top_builddir)/lib/libubi.la
-bin_ubiwritevol_LDFLAGS = -static
-
-bin_ubiinfo_SOURCES = $(top_srcdir)/src/ubiinfo/ubiinfo.c
-
-bin_nand2bin_SOURCES = $(top_srcdir)/src/nand2bin/nand2bin.c \
- $(top_srcdir)/src/bin2nand/nandecc.c \
- $(top_srcdir)/src/nand2bin/nandcorr.c
-
-bin_unubi_SOURCES = $(top_srcdir)/src/unubi/unubi.c
-bin_unubi_LDADD = $(top_builddir)/lib/libcrc32.la
-
-clean-local:
- rm -rf bin/
diff --git a/ubi-utils/bootstrap b/ubi-utils/bootstrap
deleted file mode 100755
index f543912..0000000
--- a/ubi-utils/bootstrap
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/bash
-LIBTOOLM4="/usr/local/share/libtool/libltdl"
-
-if test -d "$LIBTOOLM4"; then
- echo "+ aclocal ${LIBTOOLM4}"
- aclocal -I ${LIBTOOLM4}
-else
- echo "+ aclocal"
- aclocal
-fi
-set -x
-libtoolize --force
-autoheader
-automake --foreign --add-missing --copy
-autoconf
diff --git a/ubi-utils/configure.ac b/ubi-utils/configure.ac
deleted file mode 100644
index 9f45176..0000000
--- a/ubi-utils/configure.ac
+++ /dev/null
@@ -1,52 +0,0 @@
-# Don't remove this check.
-AC_PREREQ(2.59)
-
-# AC_INIT: Package, Version, Bugs
-AC_INIT([flashutils],[0.1],[arnez@de.ibm.com])
-AC_CONFIG_HEADERS([inc/config.h:inc/config-h.in])
-AC_CANONICAL_SYSTEM
-AM_INIT_AUTOMAKE([1.8 foreign])
-AM_MAINTAINER_MODE
-
-# Check debug options
-AS_HELP_STRING
-AC_ARG_ENABLE([debug],
- AS_HELP_STRING([--enable-debug],
- [build with debug information [default=yes]]),,enable_debug="yes")
-
-# Check for programs.
-AM_PROG_LIBTOOL
-AC_PROG_CC
-AC_PROG_INSTALL
-AC_PROG_MAKE_SET
-
-# Checks for header files.
-AC_HEADER_STDC
-# FIXME: Use AC_CHECK_HEADERS for UBI stuff.
-# AC_CHECK_HEADERS([errno.h mtd/ubi-user.h])
-AC_CHECK_HEADERS([errno.h])
-
-# Set build flags
-if test "x$enable_debug" = "xyes"; then
- CFLAGS="$CFLAGS -g -DDEBUG "
-fi
-
-AC_DEFINE_UNQUOTED(HOST_OS, "${host}", [Host OS])
-AC_DEFINE_UNQUOTED(HOST_CPU, "${host_os}", [Host CPU])
-AC_DEFINE_UNQUOTED(BUILD_OS, "${build_os}", [Build OS])
-AC_DEFINE_UNQUOTED(BUILD_CPU, "${build_cpu}", [Build CPU])
-
-# Additional Config
-AC_C_BIGENDIAN
-
-# CFLAGS
-CFLAGS="-std=gnu99 -Wundef -Wall $CFLAGS"
-
-# Init output.
-AC_CONFIG_FILES([
- Makefile
- lib/Makefile
- inc/Makefile
-])
-
-AC_OUTPUT
diff --git a/ubi-utils/inc/Makefile.am b/ubi-utils/inc/Makefile.am
deleted file mode 100644
index ca22c37..0000000
--- a/ubi-utils/inc/Makefile.am
+++ /dev/null
@@ -1,5 +0,0 @@
-AUTOMAKE_OPTIONS = foreign
-
-# You can export headers if necessary:
-nobase_include_HEADERS = pfiflash.h \
- libubi.h
diff --git a/ubi-utils/inc/config-h.in b/ubi-utils/inc/config-h.in
deleted file mode 100644
index ce4998b..0000000
--- a/ubi-utils/inc/config-h.in
+++ /dev/null
@@ -1,74 +0,0 @@
-/* inc/config-h.in. Generated from configure.ac by autoheader. */
-
-/* Build CPU */
-#undef BUILD_CPU
-
-/* Build OS */
-#undef BUILD_OS
-
-/* Define to 1 if you have the <dlfcn.h> header file. */
-#undef HAVE_DLFCN_H
-
-/* Define to 1 if you have the <errno.h> header file. */
-#undef HAVE_ERRNO_H
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#undef HAVE_INTTYPES_H
-
-/* Define to 1 if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#undef HAVE_STDINT_H
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H
-
-/* Define to 1 if you have the <strings.h> header file. */
-#undef HAVE_STRINGS_H
-
-/* Define to 1 if you have the <string.h> header file. */
-#undef HAVE_STRING_H
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#undef HAVE_SYS_STAT_H
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#undef HAVE_SYS_TYPES_H
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Host CPU */
-#undef HOST_CPU
-
-/* Host OS */
-#undef HOST_OS
-
-/* Name of package */
-#undef PACKAGE
-
-/* Define to the address where bug reports for this package should be sent. */
-#undef PACKAGE_BUGREPORT
-
-/* Define to the full name of this package. */
-#undef PACKAGE_NAME
-
-/* Define to the full name and version of this package. */
-#undef PACKAGE_STRING
-
-/* Define to the one symbol short name of this package. */
-#undef PACKAGE_TARNAME
-
-/* Define to the version of this package. */
-#undef PACKAGE_VERSION
-
-/* Define to 1 if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Version number of package */
-#undef VERSION
-
-/* Define to 1 if your processor stores words with the most significant byte
- first (like Motorola and SPARC, unlike Intel and VAX). */
-#undef WORDS_BIGENDIAN
diff --git a/ubi-utils/src/mkpfi/f128_nand_sample.cfg b/ubi-utils/perl/f128_nand_sample.cfg
index e468d9d..e468d9d 100644
--- a/ubi-utils/src/mkpfi/f128_nand_sample.cfg
+++ b/ubi-utils/perl/f128_nand_sample.cfg
diff --git a/ubi-utils/src/mkpfi/f64_nor_sample.cfg b/ubi-utils/perl/f64_nor_sample.cfg
index fd44e27..fd44e27 100644
--- a/ubi-utils/src/mkpfi/f64_nor_sample.cfg
+++ b/ubi-utils/perl/f64_nor_sample.cfg
diff --git a/ubi-utils/src/mkpfi/mkpfi b/ubi-utils/perl/mkpfi
index 2cce587..2cce587 100755
--- a/ubi-utils/src/mkpfi/mkpfi
+++ b/ubi-utils/perl/mkpfi
diff --git a/ubi-utils/src/ubicrc32/ubicrc32.pl b/ubi-utils/perl/ubicrc32.pl
index add5f9d..add5f9d 100755
--- a/ubi-utils/src/ubicrc32/ubicrc32.pl
+++ b/ubi-utils/perl/ubicrc32.pl
diff --git a/ubi-utils/scripts/ubi_test.sh b/ubi-utils/scripts/ubi_test.sh
index 9017148..622ec7e 100755
--- a/ubi-utils/scripts/ubi_test.sh
+++ b/ubi-utils/scripts/ubi_test.sh
@@ -10,7 +10,7 @@ export PATH=$PATH:~/bin:/usr/local/bin:/home/dedekind/work/prj/ubi/tools/flashut
UBIMKVOL=ubimkvol
UBIRMVOL=ubirmvol
-UBIWRITEVOL=ubiwritevol
+UBIWRITEVOL=ubiupdateevol
# 128 KiB 131072
# 256 KiB 262144
diff --git a/ubi-utils/scripts/ubi_tools_test.sh b/ubi-utils/scripts/ubi_tools_test.sh
index 43fc2bb..9163e0c 100755
--- a/ubi-utils/scripts/ubi_tools_test.sh
+++ b/ubi-utils/scripts/ubi_tools_test.sh
@@ -12,7 +12,7 @@ export PATH=$PATH:~/bin:/usr/local/bin:/home/dedekind/work/prj/ubi/tools/flashut
UBIMKVOL=ubimkvol
UBIRMVOL=ubirmvol
-UBIWRITEVOL=ubiwritevol
+UBIWRITEVOL=ubiupdatevol
PFIFLASH=pfiflash
CMP=cmp
diff --git a/ubi-utils/src/bin2nand/bin2nand.c b/ubi-utils/src/bin2nand.c
index 5224e3b..168f7dd 100644
--- a/ubi-utils/src/bin2nand/bin2nand.c
+++ b/ubi-utils/src/bin2nand.c
@@ -23,11 +23,9 @@
*
* History:
* 1.0: Initial release (tglx)
- *
* 1.1: Understands hex and dec input parameters (tglx)
* 1.2: Generates separated OOB data, if needed. (oloh)
* 1.3: Padds data/oob to a given size. (oloh)
- *
*/
#include <unistd.h>
@@ -77,33 +75,48 @@ static const char copyright [] __attribute__((unused)) =
"FIXME: insert license type."; /* FIXME */
static struct argp_option options[] = {
- { name: "copyright", key: 'c', arg: NULL, flags: 0,
- doc: "Print copyright information.",
- group: 1 },
-
- { name: "pagesize", key: 'p', arg: "<num>", flags: 0,
- doc: "Pagesize in Byte/Mi/ki. Default: 2048",
- group: 1 },
-
- { name: "padding", key: 'j', arg: "<num>", flags: 0,
- doc: "Padding in Byte/Mi/ki. Default: no padding",
- group: 1 },
-
- /* Output options */
- { name: NULL, key: 0, arg: NULL, flags: 0,
- doc: "Output settings:",
- group: 2 },
-
- { name: "output", key: 'o', arg: "<fname>", flags: 0,
- doc: "Output filename. Interleaved Data/OOB if output-oob not "
+ { .name = "copyright",
+ .key = 'c',
+ .arg = NULL,
+ .flags = 0,
+ .doc = "Print copyright information.",
+ .group = 1 },
+
+ { .name = "pagesize",
+ .key = 'p',
+ .arg = "<num>",
+ .flags = 0,
+ .doc = "Pagesize in Byte/Mi/ki. Default = 2048",
+ .group = 1 },
+
+ { .name = "padding",
+ .key = 'j',
+ .arg = "<num>",
+ .flags = 0,
+ .doc = "Padding in Byte/Mi/ki. Default = no padding",
+ .group = 1 },
+
+ { .name = "output",
+ .key = 'o',
+ .arg = "<fname>",
+ .flags = 0,
+ .doc = "Output filename. Interleaved Data/OOB if output-oob not "
"specified.",
- group: 2 },
-
- { name: "output-oob", key: 'q', arg: "<fname>", flags: 0,
- doc: "Write OOB data in separate file.",
- group: 2 },
-
- { name: NULL, key: 0, arg: NULL, flags: 0, doc: NULL, group: 0 },
+ .group = 2 },
+
+ { .name = "output-oob",
+ .key = 'q',
+ .arg = "<fname>",
+ .flags = 0,
+ .doc = "Write OOB data in separate file.",
+ .group = 2 },
+
+ { .name = NULL,
+ .key = 0,
+ .arg = NULL,
+ .flags = 0,
+ .doc = NULL,
+ .group = 0 },
};
typedef struct myargs {
@@ -254,8 +267,8 @@ int main (int argc, char** argv)
.pagesize = PAGESIZE,
.padding = PADDING,
.fp_in = NULL,
- .file_out_data = "",
- .file_out_oob = "",
+ .file_out_data = NULL,
+ .file_out_oob = NULL,
};
FILE* fp_out_data = stdout;
diff --git a/ubi-utils/src/bin2nand/nandecc.h b/ubi-utils/src/bin2nand/nandecc.h
deleted file mode 100644
index 8ae8a66..0000000
--- a/ubi-utils/src/bin2nand/nandecc.h
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- * NAND ecc functions
- */
-#ifndef _NAND_ECC_H
-#define _NAND_ECC_H
-
-#include <stdint.h>
-
-extern int nand_calculate_ecc(const uint8_t *dat, uint8_t *ecc_code);
-
-#endif
diff --git a/ubi-utils/src/libbootenv/bootenv.c b/ubi-utils/src/bootenv.c
index b6a1191..8871d90 100644
--- a/ubi-utils/src/libbootenv/bootenv.c
+++ b/ubi-utils/src/bootenv.c
@@ -27,6 +27,7 @@
#include <sys/stat.h>
#include <bootenv.h>
+#include "config.h"
#include "hashmap.h"
#include "error.h"
@@ -390,7 +391,7 @@ err:
static int
fill_output_buffer(bootenv_t env, char *buf, size_t buf_size_max,
- size_t *written)
+ size_t *written)
{
int rc = 0;
size_t keys_size, i;
@@ -403,7 +404,7 @@ fill_output_buffer(bootenv_t env, char *buf, size_t buf_size_max,
goto err;
for (i = 0; i < keys_size; i++) {
- if (wr > BOOTENV_MAXSIZE) {
+ if (wr > buf_size_max) {
rc = -ENOSPC;
goto err;
}
@@ -412,7 +413,7 @@ fill_output_buffer(bootenv_t env, char *buf, size_t buf_size_max,
if (rc != 0)
goto err;
- wr += snprintf(buf + wr, BOOTENV_MAXSIZE - wr,
+ wr += snprintf(buf + wr, buf_size_max - wr,
"%s=%s", keys[i], val);
wr++; /* for \0 */
}
@@ -514,7 +515,7 @@ err:
}
int
-bootenv_valid(bootenv_t env)
+bootenv_valid(bootenv_t env __unused)
{
/* @FIXME No sanity check implemented. */
return 0;
@@ -574,7 +575,8 @@ err:
int
bootenv_pdd_keep(bootenv_t env_old, bootenv_t env_new, bootenv_t *env_res,
- int *warnings, char *err_buf, size_t err_buf_size)
+ int *warnings, char *err_buf __unused,
+ size_t err_buf_size __unused)
{
bootenv_list_t l_old = NULL;
bootenv_list_t l_new = NULL;
@@ -683,8 +685,8 @@ err:
int
bootenv_pdd_overwrite(bootenv_t env_old, bootenv_t env_new,
- bootenv_t *env_res, int *warnings,
- char *err_buf, size_t err_buf_size)
+ bootenv_t *env_res, int *warnings __unused,
+ char *err_buf __unused, size_t err_buf_size __unused)
{
if ((env_old == NULL) || (env_new == NULL) || (env_res == NULL))
return -EINVAL;
@@ -694,7 +696,7 @@ bootenv_pdd_overwrite(bootenv_t env_old, bootenv_t env_new,
int
bootenv_pdd_merge(bootenv_t env_old, bootenv_t env_new, bootenv_t *env_res,
- int *warnings, char *err_buf, size_t err_buf_size)
+ int *warnings __unused, char *err_buf, size_t err_buf_size)
{
if ((env_old == NULL) || (env_new == NULL) || (env_res == NULL))
return -EINVAL;
diff --git a/ubi-utils/inc/bootenv.h b/ubi-utils/src/bootenv.h
index 86743ed..86743ed 100644
--- a/ubi-utils/inc/bootenv.h
+++ b/ubi-utils/src/bootenv.h
diff --git a/ubi-utils/src/config.h b/ubi-utils/src/config.h
new file mode 100644
index 0000000..746fa3c
--- /dev/null
+++ b/ubi-utils/src/config.h
@@ -0,0 +1,28 @@
+#ifndef __CONFIG_H__
+#define __CONFIG_H__
+/*
+ * 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: Frank Haverkamp
+ */
+
+#define PACKAGE_VERSION "1.0"
+#define PACKAGE_BUGREPORT "dedekind@oktetlabs.ru, haver@vnet.ibm.com, or tglx@linutronix.de"
+
+#define __unused __attribute__((unused))
+
+#endif
diff --git a/ubi-utils/src/libcrc32/crc32.c b/ubi-utils/src/crc32.c
index 666e217..666e217 100644
--- a/ubi-utils/src/libcrc32/crc32.c
+++ b/ubi-utils/src/crc32.c
diff --git a/ubi-utils/inc/crc32.h b/ubi-utils/src/crc32.h
index 31362b0..31362b0 100644
--- a/ubi-utils/inc/crc32.h
+++ b/ubi-utils/src/crc32.h
diff --git a/ubi-utils/src/liberror/error.c b/ubi-utils/src/error.c
index c8c623c..c8c623c 100644
--- a/ubi-utils/src/liberror/error.c
+++ b/ubi-utils/src/error.c
diff --git a/ubi-utils/inc/error.h b/ubi-utils/src/error.h
index 25a1cee..e8d7137 100644
--- a/ubi-utils/inc/error.h
+++ b/ubi-utils/src/error.h
@@ -36,7 +36,7 @@ void info_msg(const char *fmt, ...);
__err_msg("[%s. FILE: %s FUNC: %s LINE: %d]\n", \
str, __FILE__, __FUNCTION__, __LINE__); \
} while (0)
-#elif
+#else
#define __loc_msg(str)
#endif
@@ -77,7 +77,7 @@ void info_msg(const char *fmt, ...);
__loc_msg("DbgMsg"); \
__err_msg(fmt, ##__VA_ARGS__); \
} while (0)
-#elif
+#else
#define dbg_msg(fmt, ...)
#endif
diff --git a/ubi-utils/inc/example_ubi.h b/ubi-utils/src/example_ubi.h
index 23c7b54..23c7b54 100644
--- a/ubi-utils/inc/example_ubi.h
+++ b/ubi-utils/src/example_ubi.h
diff --git a/ubi-utils/src/libbootenv/hashmap.c b/ubi-utils/src/hashmap.c
index 250f71f..250f71f 100644
--- a/ubi-utils/src/libbootenv/hashmap.c
+++ b/ubi-utils/src/hashmap.c
diff --git a/ubi-utils/src/libbootenv/hashmap.h b/ubi-utils/src/hashmap.h
index 1b13e95..1b13e95 100644
--- a/ubi-utils/src/libbootenv/hashmap.h
+++ b/ubi-utils/src/hashmap.h
diff --git a/ubi-utils/src/libpfiflash/pfiflash.c b/ubi-utils/src/libpfiflash.c
index 0859a22..ed2af3c 100644
--- a/ubi-utils/src/libpfiflash/pfiflash.c
+++ b/ubi-utils/src/libpfiflash.c
@@ -40,8 +40,9 @@
#include <libubi.h>
#include <pfiflash.h>
-#include <mtd/ubi-user.h> /* FIXME Is this ok here!!?? */
+//#include <mtd/ubi-user.h> /* FIXME Is this ok here!!?? */
+#include "config.h"
#include "ubimirror.h"
#include "error.h"
#include "reader.h"
@@ -158,7 +159,8 @@ my_ubi_mkvol(int devno, int s, pfi_ubi_t u, char *err_buf, size_t err_buf_size)
* If the volume does not exist, the function will return success.
*/
static int
-my_ubi_rmvol(int devno, uint32_t id, char *err_buf, size_t err_buf_size)
+my_ubi_rmvol(int devno, uint32_t id,
+ char *err_buf __unused, size_t err_buf_size __unused)
{
int rc = 0;
ubi_lib_t ulib = NULL;
@@ -321,7 +323,7 @@ write_bootenv_volume(int devno, uint32_t id, bootenv_t bootenv_old,
static int
write_normal_volume(int devno, uint32_t id, size_t update_size, FILE* fp_in,
- char *err_buf, size_t err_buf_size)
+ char *err_buf __unused, size_t err_buf_size __unused)
{
int rc = 0;
ubi_lib_t ulib = NULL;
@@ -386,7 +388,7 @@ process_ubi_volumes(FILE* pfi, int seqnum, list_t pfi_ubis,
foreach(u, ptr, pfi_ubis) {
int s = seqnum;
- if (seqnum > (u->ids_size - 1)) {
+ if (seqnum > ((int)u->ids_size - 1)) {
s = 0; /* per default use the first */
}
u->curr_seqnum = s;
@@ -585,7 +587,7 @@ pfiflash(FILE* pfi, int complete, int seqnum, pdd_handling_t pdd_handling,
}
}
- if ((pdd_handling >= 0) && (pdd_handling < PDD_HANDLING_NUM)) {
+ if (((int)pdd_handling >= 0) && (pdd_handling < PDD_HANDLING_NUM)) {
pdd_f = pdd_funcs[pdd_handling];
}
else {
diff --git a/ubi-utils/src/libubi/libubi.c b/ubi-utils/src/libubi.c
index 9b9a793..9b9a793 100644
--- a/ubi-utils/src/libubi/libubi.c
+++ b/ubi-utils/src/libubi.c
diff --git a/ubi-utils/src/libubi/libubi_int.h b/ubi-utils/src/libubi_int.h
index 1640010..ab387f5 100644
--- a/ubi-utils/src/libubi/libubi_int.h
+++ b/ubi-utils/src/libubi_int.h
@@ -36,17 +36,17 @@
fprintf(stderr, "UBI Library Error at %s: ", __func__); \
fprintf(stderr, fmt, ##__VA_ARGS__); \
fprintf(stderr, "\n"); \
- } while(0)
+ } while (0)
#ifdef UBILIB_DEBUG
#define ubi_dbg(fmt, ...) do { \
fprintf(stderr, "UBI Debug: %s: ", __func__); \
fprintf(stderr, fmt, ##__VA_ARGS__); \
fprintf(stderr, "\n"); \
- } while(0)
+ } while (0)
#else
-#define ubi_dbg(fmt, ...)
+#define ubi_dbg(fmt, ...) do { } while (0)
#endif
/**
diff --git a/ubi-utils/src/libubi/libubi_sysfs.c b/ubi-utils/src/libubi_sysfs.c
index f7ecebc..95fd3de 100644
--- a/ubi-utils/src/libubi/libubi_sysfs.c
+++ b/ubi-utils/src/libubi_sysfs.c
@@ -32,6 +32,7 @@
#include <errno.h>
#include <stdarg.h>
+#include "config.h"
#include "libubi_int.h"
int
@@ -128,7 +129,7 @@ sysfs_read_dev_subst(const char *patt, unsigned int *major,
}
static int
-sysfs_read_ull(const char *file, unsigned long long *num)
+sysfs_read_ull(const char *file __unused, unsigned long long *num __unused)
{
return 0;
}
@@ -147,7 +148,7 @@ sysfs_read_ull_subst(const char *patt, unsigned long long *num, int n, ...)
}
static int
-sysfs_read_uint(const char *file, unsigned int *num)
+sysfs_read_uint(const char *file __unused, unsigned int *num __unused)
{
return 0;
}
diff --git a/ubi-utils/src/libubi/libubi_sysfs.h b/ubi-utils/src/libubi_sysfs.h
index 2fb6072..2fb6072 100644
--- a/ubi-utils/src/libubi/libubi_sysfs.h
+++ b/ubi-utils/src/libubi_sysfs.h
diff --git a/ubi-utils/src/libubigen/ubigen.c b/ubi-utils/src/libubigen.c
index 0cfa687..258e555 100644
--- a/ubi-utils/src/libubigen/ubigen.c
+++ b/ubi-utils/src/libubigen.c
@@ -247,7 +247,7 @@ ubigen_write_broken_update(ubi_info_t u, uint32_t blk)
}
void
-dump_info(ubi_info_t u)
+dump_info(ubi_info_t u __unused)
{
#ifdef DEBUG
int err = 0;
diff --git a/ubi-utils/src/libubimirror/ubimirror.c b/ubi-utils/src/libubimirror.c
index bf6b37c..e5715fc 100644
--- a/ubi-utils/src/libubimirror/ubimirror.c
+++ b/ubi-utils/src/libubimirror.c
@@ -48,7 +48,7 @@ enum {
* Read len number of bytes from fd.
* Return 0 on EOF, -1 on error.
*/
-static ssize_t fill_buffer(int fd, unsigned char *buf, size_t len)
+static ssize_t fill_buffer(int fd, unsigned char *buf, ssize_t len)
{
ssize_t got, have = 0;
@@ -65,7 +65,7 @@ static ssize_t fill_buffer(int fd, unsigned char *buf, size_t len)
* Write len number of bytes to fd.
* Return bytes written (>= 0), -1 on error.
*/
-static ssize_t flush_buffer(int fd, unsigned char *buf, size_t len)
+static ssize_t flush_buffer(int fd, unsigned char *buf, ssize_t len)
{
ssize_t done, have = 0;
@@ -150,7 +150,7 @@ copy_files(int fd_in, int fd_out)
}
int
-ubimirror(uint32_t devno, int seqnum, uint32_t *ids, size_t ids_size,
+ubimirror(uint32_t devno, int seqnum, uint32_t *ids, ssize_t ids_size,
char *err_buf, size_t err_buf_size)
{
int rc = 0;
diff --git a/ubi-utils/src/liblist/list.c b/ubi-utils/src/list.c
index 6eb716b..6eb716b 100644
--- a/ubi-utils/src/liblist/list.c
+++ b/ubi-utils/src/list.c
diff --git a/ubi-utils/inc/list.h b/ubi-utils/src/list.h
index e8452a2..e8452a2 100644
--- a/ubi-utils/inc/list.h
+++ b/ubi-utils/src/list.h
diff --git a/ubi-utils/src/mkbootenv/mkbootenv.c b/ubi-utils/src/mkbootenv.c
index 49ce597..49ce597 100644
--- a/ubi-utils/src/mkbootenv/mkbootenv.c
+++ b/ubi-utils/src/mkbootenv.c
diff --git a/ubi-utils/src/nand2bin/nand2bin.c b/ubi-utils/src/nand2bin.c
index a728fb5..a5e8bca 100644
--- a/ubi-utils/src/nand2bin/nand2bin.c
+++ b/ubi-utils/src/nand2bin.c
@@ -34,6 +34,7 @@
#include <sys/stat.h>
#include <sys/types.h>
+#include "config.h"
#include "nandecc.h"
#define MAXPATH 1024
@@ -59,10 +60,10 @@ static struct args myargs = {
static error_t parse_opt (int key, char *arg, struct argp_state *state);
-const char *argp_program_bug_address = "<haver@vnet.ibm.com>";
+const char *argp_program_bug_address = PACKAGE_BUGREPORT;
-static char doc[] = "\nVersion: " VERSION "\n\t"
- HOST_OS" "HOST_CPU" at "__DATE__" "__TIME__"\n"
+static char doc[] = "\nVersion: " PACKAGE_VERSION "\n\t"
+ BUILD_OS" "BUILD_CPU" at "__DATE__" "__TIME__"\n"
"\nSplit data and OOB.\n";
static struct argp_option options[] = {
@@ -197,7 +198,7 @@ static int calc_oobsize(size_t pagesize)
}
static inline void
-hexdump(FILE *fp, const uint8_t *buf, size_t size)
+hexdump(FILE *fp, const uint8_t *buf, ssize_t size)
{
int k;
diff --git a/ubi-utils/src/nand2bin/nandcorr.c b/ubi-utils/src/nandcorr.c
index 7f1a547..7f1a547 100644
--- a/ubi-utils/src/nand2bin/nandcorr.c
+++ b/ubi-utils/src/nandcorr.c
diff --git a/ubi-utils/src/bin2nand/nandecc.c b/ubi-utils/src/nandecc.c
index 71660ef..71660ef 100644
--- a/ubi-utils/src/bin2nand/nandecc.c
+++ b/ubi-utils/src/nandecc.c
diff --git a/ubi-utils/inc/nandecc.h b/ubi-utils/src/nandecc.h
index fb5d529..fb5d529 100644
--- a/ubi-utils/inc/nandecc.h
+++ b/ubi-utils/src/nandecc.h
diff --git a/ubi-utils/src/pddcustomize/pddcustomize.c b/ubi-utils/src/pddcustomize.c
index f71d916..f71d916 100644
--- a/ubi-utils/src/pddcustomize/pddcustomize.c
+++ b/ubi-utils/src/pddcustomize.c
diff --git a/ubi-utils/src/libpeb/peb.c b/ubi-utils/src/peb.c
index 08b770f..08b770f 100644
--- a/ubi-utils/src/libpeb/peb.c
+++ b/ubi-utils/src/peb.c
diff --git a/ubi-utils/inc/peb.h b/ubi-utils/src/peb.h
index 246bce8..246bce8 100644
--- a/ubi-utils/inc/peb.h
+++ b/ubi-utils/src/peb.h
diff --git a/ubi-utils/src/libpfi/pfi.c b/ubi-utils/src/pfi.c
index c8d5ee4..c8d5ee4 100644
--- a/ubi-utils/src/libpfi/pfi.c
+++ b/ubi-utils/src/pfi.c
diff --git a/ubi-utils/inc/pfi.h b/ubi-utils/src/pfi.h
index 8c5cc07..8c5cc07 100644
--- a/ubi-utils/inc/pfi.h
+++ b/ubi-utils/src/pfi.h
diff --git a/ubi-utils/src/pfi2bin/pfi2bin.c b/ubi-utils/src/pfi2bin.c
index 6536c19..6536c19 100644
--- a/ubi-utils/src/pfi2bin/pfi2bin.c
+++ b/ubi-utils/src/pfi2bin.c
diff --git a/ubi-utils/src/pfiflash/pfiflash.c b/ubi-utils/src/pfiflash.c
index 18b3aa2..04f62df 100644
--- a/ubi-utils/src/pfiflash/pfiflash.c
+++ b/ubi-utils/src/pfiflash.c
@@ -155,7 +155,7 @@ parse_opt(int key, char *arg, struct argp_state *state)
break;
case 'p':
args->pdd_handling = get_pdd_handling(arg);
- if (args->pdd_handling < 0) {
+ if ((int)args->pdd_handling < 0) {
err_quit("Unknown PDD handling: %s.\n"
"Please use either 'keep', 'merge' or"
"'overwrite'.\n'");
diff --git a/ubi-utils/inc/pfiflash.h b/ubi-utils/src/pfiflash.h
index fc2eede..fc2eede 100644
--- a/ubi-utils/inc/pfiflash.h
+++ b/ubi-utils/src/pfiflash.h
diff --git a/ubi-utils/src/libreader/reader.c b/ubi-utils/src/reader.c
index c8242df..e4a8ceb 100644
--- a/ubi-utils/src/libreader/reader.c
+++ b/ubi-utils/src/reader.c
@@ -29,6 +29,7 @@
#include <stdlib.h>
#include <errno.h>
+#include "config.h"
#include "bootenv.h"
#include "reader.h"
@@ -112,8 +113,13 @@ read_pdd_data(FILE* fp_pdd, pdd_data_t* pdd_data,
return rc;
}
+/**
+ * FIXME enhance flasing raw PFI content e.g. IPLs for NAND and NOR.
+ * Here is one of the only places where the flash type and its special
+ * handling is exposed to the users.
+ */
int
-read_pfi_raw(pfi_header pfi_hd, FILE* fp_pfi, pfi_raw_t* pfi_raw,
+read_pfi_raw(pfi_header pfi_hd, FILE* fp_pfi __unused, pfi_raw_t* pfi_raw,
const char* label, char* err_buf, size_t err_buf_size)
{
int rc = 0;
@@ -169,8 +175,12 @@ read_pfi_raw(pfi_header pfi_hd, FILE* fp_pfi, pfi_raw_t* pfi_raw,
return rc;
}
+/**
+ * FIXME Enhance reading raw PFI sections, e.g. IPL. See comment at
+ * write_pfi_ubi.
+ */
int
-read_pfi_ubi(pfi_header pfi_hd, FILE* fp_pfi, pfi_ubi_t* pfi_ubi,
+read_pfi_ubi(pfi_header pfi_hd, FILE* fp_pfi __unused, pfi_ubi_t* pfi_ubi,
const char *label, char* err_buf, size_t err_buf_size)
{
int rc = 0;
diff --git a/ubi-utils/inc/reader.h b/ubi-utils/src/reader.h
index 93c15e3..93c15e3 100644
--- a/ubi-utils/inc/reader.h
+++ b/ubi-utils/src/reader.h
diff --git a/ubi-utils/src/ubicrc32/ubicrc32.c b/ubi-utils/src/ubicrc32.c
index fb4ef49..fb4ef49 100644
--- a/ubi-utils/src/ubicrc32/ubicrc32.c
+++ b/ubi-utils/src/ubicrc32.c
diff --git a/ubi-utils/src/ubigen/ubigen_main.c b/ubi-utils/src/ubigen.c
index 8a464dd..8a464dd 100644
--- a/ubi-utils/src/ubigen/ubigen_main.c
+++ b/ubi-utils/src/ubigen.c
diff --git a/ubi-utils/inc/ubigen.h b/ubi-utils/src/ubigen.h
index 9e9e8ec..9e9e8ec 100644
--- a/ubi-utils/inc/ubigen.h
+++ b/ubi-utils/src/ubigen.h
diff --git a/ubi-utils/src/ubiinfo/ubiflash.h b/ubi-utils/src/ubiinfo/ubiflash.h
deleted file mode 100644
index 6883879..0000000
--- a/ubi-utils/src/ubiinfo/ubiflash.h
+++ /dev/null
@@ -1,185 +0,0 @@
-#ifndef _UBI_FLASH_H
-#define _UBI_FLASH_H
-/*
- * 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.
- */
-
-/*
- * FLASH related data structures and constants for UBI.
- * UBI scan analysis.
- *
- * IPL Initial Program Loader
- * SPL Secondary Program Loader
- */
-
-#include <stdint.h>
-#include <asm/byteorder.h>
-#include <mtd/ubi-header.h>
-
-#define UBI_BLOCK_IDENT_MAX 16
-
-/* Block status information constants */
-enum blockstat {
- /* IO Error */
- STAT_IO_FAILED = 1, /* 0xffffffff */
- /* Block is bad */
- STAT_BLOCK_BAD = 2, /* 0xfffffffe */
- /* ECC unrecoverable error */
- STAT_ECC_ERROR = 3, /* 0xfffffffd */
- /* CRC checksum failed */
- STAT_CRC_ERROR = 4, /* 0xfffffffc */
- /* Magic number not available */
- STAT_NO_MAGIC = 5, /* 0xfffffffb */
- /* No image available */
- STAT_NO_IMAGE = 6,
- /* Image is invalid */
- STAT_INVALID_IMAGE = 7,
- /* Image is defect */
- STAT_DEFECT_IMAGE = 8,
-};
-
-/*
- * Flash types
- */
-enum flashtypes {
- FLASH_TYPE_NAND = 1,
- FLASH_TYPE_NOR,
-};
-
-/* Nand read buffer size: 2KiB + 64byte spare */
-#define NAND_READ_BUF_SIZE (2048 + 64)
-
-/* Size of the CRC table */
-#define CRC32_TABLE_SIZE 256
-
-/* Image is not available marker for image offs */
-#define UBI_IMAGE_NOT_AVAILABLE 0xFFFFFFFF
-
-/* Increment this number, whenever you change the structure */
-#define UBI_SCAN_INFO_VERSION 2
-
-/* Time measurement as far as the code size allows us to do this */
-#define UBI_TIMESTAMPS 16
-
-/**
- * struct ubi_scan_info - RAM table filled by IPL scan
- *
- * @version: Version of the structure
- * @bootstatus: Boot status of the current boot
- * @flashtype: Flash type (NAND/NOR)
- * @flashid: ID of the flash chip
- * @flashmfr: Manufacturer ID of the flash chip
- * @flashsize: Size of the FLASH
- * @blocksize: Eraseblock size
- * @blockshift: Shift count to calc block number from offset
- * @nrblocks: Number of erase blocks on flash
- * @pagesize: Pagesize (NAND)
- * @blockinfo: Pointer to an array of block status information
- * filled by FLASH scan
- * @images: Pointer to FLASH block translation table sorted
- * by image type and load order
- * @imageblocks: Number of blocks found per image
- * @imageoffs: Offset per imagetype to the first
- * block in the translation table
- * @imagedups duplicate blocks (max. one per volume)
- * @imagelen: Length of the loaded image
- * @crc32_table: CRC32 table buffer
- * @page_buf: Page buffer for NAND FLASH
- */
-struct ubi_scan_info {
- int version;
- unsigned int bootstatus;
- unsigned int flashtype;
- unsigned int flashid;
- unsigned int flashmfr;
- unsigned int flashsize;
- unsigned int blocksize;
- unsigned int blockshift;
- unsigned int nrblocks;
- unsigned int pagesize;
-
- struct ubi_vid_hdr *blockinfo;
- struct ubi_vid_hdr **images;
- unsigned int imageblocks[UBI_BLOCK_IDENT_MAX];
- unsigned int imageoffs[UBI_BLOCK_IDENT_MAX];
- struct ubi_vid_hdr *imagedups[UBI_BLOCK_IDENT_MAX];
- unsigned int imagelen;
- uint32_t crc32_table[CRC32_TABLE_SIZE];
- uint8_t page_buf[NAND_READ_BUF_SIZE];
- unsigned int times[UBI_TIMESTAMPS];
-};
-
-/* External function definition */
-extern int flash_read(void *buf, unsigned int offs, int len);
-extern int flash_read_slice(struct ubi_scan_info *fi, void *buf,
- unsigned int offs, int len);
-extern void ipl_main(struct ubi_scan_info *fi);
-
-#ifndef CFG_EXAMPLE_IPL
-extern int ipl_scan(struct ubi_scan_info *fi);
-extern int ipl_load(struct ubi_scan_info *fi, int nr, uint8_t *loadaddr);
-
-#define IPL_STATIC
-
-#else
-#define IPL_STATIC static
-#endif
-
-/**
- * get_boot_status - get the boot status register
- *
- * Shift the lower 16 bit into the upper 16 bit and return
- * the result.
- */
-uint32_t get_boot_status(void);
-
-/**
- * set_boot_status - Set the boot status register
- *
- * @status: The status value to set
- *
- */
-void set_boot_status(uint32_t status);
-
-static inline unsigned int ubi_vid_offset(struct ubi_scan_info *fi)
-{
- if (fi->flashtype == FLASH_TYPE_NOR)
- return UBI_EC_HDR_SIZE;
- else
- return fi->pagesize - UBI_VID_HDR_SIZE;
-}
-
-static inline unsigned int ubi_data_offset(struct ubi_scan_info *fi)
-{
- if (fi->flashtype == FLASH_TYPE_NOR)
- return UBI_EC_HDR_SIZE + UBI_VID_HDR_SIZE;
- else
- return fi->pagesize;
-}
-
-/**
- * IPL checkpoints
- */
-#define CHKP_HWINIT 0x3030
-#define CHKP_IPLSCAN_FAILED 0x3034
-#define CHKP_SPL_START 0x3037
-#define CHKP_SPLLOAD_STATUS 0x3130
-
-extern void checkpoint(uint32_t cpoint);
-extern void switch_watchdog(void);
-
-#endif
diff --git a/ubi-utils/src/ubiinfo/ubiinfo.c b/ubi-utils/src/ubiinfo/ubiinfo.c
deleted file mode 100644
index 6f7443b..0000000
--- a/ubi-utils/src/ubiinfo/ubiinfo.c
+++ /dev/null
@@ -1,406 +0,0 @@
-/*
- * 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.
- */
-
-/*
- * Print out information about the UBI table this IPL is using. This
- * can be used afterwards to analyze misbehavior of the IPL code. The
- * input this program requires is the last 1 MiB DDRAM of our system
- * where the scanning table is placed into.
- *
- * Author: Frank Haverkamp <haver@vnet.ibm.com>
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <string.h>
-#include <time.h>
-#include <argp.h>
-#include <getopt.h>
-#include <stdint.h>
-#include <sys/time.h>
-#include <netinet/in.h>
-
-#define __unused __attribute__((unused))
-
-/* This should hopefully be constant and the same in all
- * configurations.
- */
-#define CFG_IPLSIZE 512
-#define CFG_SPLCODE 512
-#define MEMTOP 0x06600000 /* Sunray 102 MiB */
-#define MEMSIZE 0x00100000 /* 1 MiB */
-#define CODE_SIZE (64 * 1024)
-
-/* FIXME Except of the memory size this should be defined via
- * parameters
- *
- * CFG_MEMTOP_BAMBOO 0x02000000
- * CFG_MEMTOP_SUNRAY 0x06600000
- */
-
-#include "ubiipl.h"
-#include "ubiflash.h"
-
-#define MIN(x,y) ((x)<(y)?(x):(y))
-
-#define ERR_RET(rc) { \
- fprintf(stderr, "%s:%d failed rc=%d\n", __func__, \
- __LINE__, (rc)); \
- return (rc); \
- }
-
-#define VERSION "1.3"
-
-static error_t parse_opt (int key, char *arg, struct argp_state *state);
-const char *argp_program_version = VERSION;
-const char *argp_program_bug_address = "<haver@vnet.ibm.com>";
-
-static char doc[] = "\nVersion: " VERSION "\n\t"
- " at "__DATE__" "__TIME__"\n"
- "\n"
- "Test program\n";
-
-static struct argp_option options[] = {
- /* common settings */
- { .name = "verbose",
- .key = 'v',
- .arg = "<level>",
- .flags = 0,
- .doc = "Set verbosity level to <level>",
- .group = OPTION_ARG_OPTIONAL },
-
- { .name = "memtop",
- .key = 'm',
- .arg = "<memtop>",
- .flags = 0,
- .doc = "Set top of memory, 102 MiB for Sunray and 16 MiB for Bamboo",
- .group = OPTION_ARG_OPTIONAL },
-
- { .name = NULL,
- .key = 0,
- .arg = NULL,
- .flags = 0,
- .doc = NULL,
- .group = 0 },
-};
-
-typedef struct test_args {
- int verbose;
- unsigned long memtop;
- char *arg1;
- char **options;
-} test_args;
-
-static struct test_args g_args = {
- .memtop = MEMTOP,
- .verbose = 0,
- .arg1 = NULL,
- .options = NULL,
-};
-
-static struct argp argp = {
- options: options,
- parser: parse_opt,
- args_doc: "[last_1MiB_memory.bin]",
- doc: doc,
- children: NULL,
- help_filter: NULL,
- argp_domain: NULL,
-};
-
-static int verbose = 0;
-
-/**
- * @brief Parse the arguments passed into the test case.
- *
- * @param key The parameter.
- * @param arg Argument passed to parameter.
- * @param state Location to put information on parameters.
- *
- * @return error_t
- */
-static error_t
-parse_opt(int key, char *arg, struct argp_state *state)
-{
- /* Get the `input' argument from `argp_parse', which we
- know is a pointer to our arguments structure. */
- test_args *args = state->input;
-
- switch (key) {
- /* common settings */
- case 'v': /* --verbose=<level> */
- verbose = args->verbose = strtoul(arg, (char **)NULL, 0);
- break;
-
- case 'm': /* --memtop */
- args->memtop = strtoul(arg, (char **)NULL, 0);
- break;
-
- case ARGP_KEY_NO_ARGS:
- /* argp_usage(state); */
- break;
-
- case ARGP_KEY_ARG:
- args->arg1 = arg;
- /* Now we consume all the rest of the arguments.
- `state->next' is the index in `state->argv' of the
- next argument to be parsed, which is the first STRING
- we're interested in, so we can just use
- `&state->argv[state->next]' as the value for
- arguments->strings.
-
- _In addition_, by setting `state->next' to the end
- of the arguments, we can force argp to stop parsing
- here and return. */
-
- args->options = &state->argv[state->next];
- state->next = state->argc;
- break;
-
- case ARGP_KEY_END:
- /* print out message if no arguments are given but PFI
- write should be done */
- break;
-
- default:
- return(ARGP_ERR_UNKNOWN);
- }
- return 0;
-}
-
-static void
-hexdump(const char *buf, int len)
-{
- char line[16];
- char str[256];
- char dummy[256];
- int j = 0;
-
- while (len > 0) {
- int i;
-
- strcpy(str, " ");
-
- for (j = 0; j < MIN(16, len); j++)
- line[j] = *buf++;
-
- for (i = 0; i < j; i++) {
- if (!(i & 3)) {
- sprintf(dummy, " %.2x", line[i] & 0xff);
- strcat(str, dummy);
- } else {
- sprintf(dummy, "%.2x", line[i] & 0xff);
- strcat(str, dummy);
- }
- }
-
- /* Print empty space */
- for (; i < 16; i++)
- if (!(i & 1))
- strcat(str, " ");
- else
- strcat(str, " ");
-
- strcat(str, " ");
- for (i = 0; i < j; i++) {
- if (isprint(line[i])) {
- sprintf(dummy, "%c", line[i]);
- strcat(str, dummy);
- } else {
- strcat(str, ".");
- }
- }
- printf("%s\n", str);
- len -= 16;
- }
-}
-
-static void
-print_status_help(void)
-{
- printf("Error Codes from IPL\n");
- printf(" IO Error %d\n", STAT_IO_FAILED);
- printf(" Block is bad %d\n", STAT_BLOCK_BAD);
- printf(" ECC unrec error %d\n", STAT_ECC_ERROR);
- printf(" CRC csum failed %d\n", STAT_CRC_ERROR);
- printf(" Magic not avail %d\n", STAT_NO_MAGIC);
- printf(" No image avail %d\n", STAT_NO_IMAGE);
- printf(" Image is invalid %d\n", STAT_INVALID_IMAGE);
- printf(" Image is defect %d\n\n", STAT_DEFECT_IMAGE);
-
-}
-
-static void
-print_ubi_scan_info(struct ubi_scan_info *fi)
-{
- int i;
-
- printf("ubi_scan_info\n");
- printf(" version %08x\n", ntohl(fi->version));
- printf(" bootstatus %08x\n", ntohl(fi->bootstatus));
- printf(" flashtype %08x\n", ntohl(fi->flashtype));
- printf(" flashid %08x\n", ntohl(fi->flashid));
- printf(" flashmfgr %08x\n", ntohl(fi->flashmfr));
- printf(" flashsize %d bytes (%dM)\n",
- ntohl(fi->flashsize), ntohl(fi->flashsize) / (1024 * 1024));
- printf(" blocksize %d bytes\n", ntohl(fi->blocksize));
- printf(" blockshift %d\n", ntohl(fi->blockshift));
- printf(" nrblocks %d\n", ntohl(fi->nrblocks));
- printf(" pagesize %d\n", ntohl(fi->pagesize));
- printf(" imagelen %d\n", ntohl(fi->imagelen));
- printf(" blockinfo %08x\n", ntohl((int)fi->blockinfo));
-
- printf(" nr imageblocks imageoffs\n");
- for (i = 0; i < UBI_BLOCK_IDENT_MAX; i++)
- printf(" [%2d] %08x %08x\n", i,
- ntohl(fi->imageblocks[i]),
- ntohl(fi->imageoffs[i]));
-
- for (i = 0; i < UBI_TIMESTAMPS; i++) {
- if (!ntohl(fi->times[i]))
- continue;
- printf("time[%3d] = %08x %.3f sec\n", i, ntohl(fi->times[i]),
- (double)ntohl(fi->times[i]) / 500000000.0);
- }
-
- printf("crc32_table\n");
- hexdump((char *)&fi->crc32_table, sizeof(fi->crc32_table));
- printf("\npage_buf\n");
- hexdump((char *)&fi->page_buf, sizeof(fi->page_buf));
-
- printf("\n");
-
-}
-
-static void
-print_ubi_block_info(struct ubi_scan_info *fi,
- struct ubi_vid_hdr *bi, int nr)
-{
- int i;
- int unknown = 0;
-
- printf("\nBINFO\n");
-
- for (i = 0; i < nr; i++) {
- if ((int)ubi32_to_cpu(bi[i].magic) != UBI_VID_HDR_MAGIC) {
- printf("block=%d %08x\n",
- i, i * ntohl(fi->blocksize));
-#if 0
- printf(".");
- if ((unknown & 0x3f) == 0x3f)
- printf("\n");
- unknown++;
-#else
- hexdump((char *)&bi[i],
- sizeof(struct ubi_vid_hdr));
-#endif
- } else {
- if (unknown)
- printf("\n");
- printf("block=%d %08x\n"
- " leb_ver=0x%x data_size=%d "
- "lnum=%d used_ebs=0x%x\n"
- " data_crc=%08x hdr_crc=%08x\n",
- i, i * ntohl(fi->blocksize),
- ubi32_to_cpu(bi[i].leb_ver),
- ubi32_to_cpu(bi[i].data_size),
- ubi32_to_cpu(bi[i].lnum),
- ubi32_to_cpu(bi[i].used_ebs),
- ubi32_to_cpu(bi[i].data_crc),
- ubi32_to_cpu(bi[i].hdr_crc));
- hexdump((char *)&bi[i],
- sizeof(struct ubi_vid_hdr));
- unknown = 0;
- }
- }
-}
-
-static int do_read(unsigned int memtop, char *buf, int buf_len __unused)
-{
- unsigned long finfo_addr;
- unsigned long binfo_addr;
- unsigned long images_addr;
- unsigned long nrblocks;
- unsigned long bi_size;
- unsigned long images_size;
- struct ubi_scan_info *fi;
- struct ubi_vid_hdr *bi;
- char *images;
- unsigned long memaddr = memtop - MEMSIZE;
-
- print_status_help();
-
- /* Read and print FINFO */
- finfo_addr = MEMSIZE - CFG_IPLSIZE * 1024;
-
- printf("read info at addr %08lx\n", finfo_addr);
- fi = (struct ubi_scan_info *)(buf + finfo_addr);
-
- binfo_addr = ntohl((unsigned long)fi->blockinfo) - memaddr;
- images_addr = ntohl((unsigned long)fi->images) - memaddr;
- nrblocks = ntohl(fi->nrblocks);
-
- printf("BINFO %08lx\n", binfo_addr);
-
- bi_size = nrblocks * sizeof(struct ubi_vid_hdr);
- images_size = nrblocks * sizeof(unsigned int);
-
- printf("FINFO\n");
- print_ubi_scan_info(fi);
- /* hexdump((char *)fi, sizeof(*fi)); */
-
- /* Read and print BINFO */
- bi = (struct ubi_vid_hdr *)(buf + binfo_addr);
- print_ubi_block_info(fi, bi, nrblocks);
-
- /* Read and print IMAGES */
- images = buf + images_addr;
- printf("\nIMAGES\n");
- hexdump(images, images_size);
-
- return 0;
-}
-
-int main(int argc, char *argv[])
-{
- char buf[MEMSIZE];
- FILE *fp;
- int rc;
-
- argp_parse(&argp, argc, argv, ARGP_IN_ORDER, 0, &g_args);
-
- if (!g_args.arg1) {
- fprintf(stderr, "Please specify a file "
- "name for memory dump!\n");
- exit(EXIT_FAILURE);
- }
-
- memset(buf, 0xAB, sizeof(buf));
-
- fp = fopen(g_args.arg1, "r");
- if (!fp)
- exit(EXIT_FAILURE);
- rc = fread(buf, 1, sizeof(buf), fp);
- if (rc != sizeof(buf))
- exit(EXIT_FAILURE);
- fclose(fp);
- do_read(g_args.memtop, buf, sizeof(buf));
-
- exit(EXIT_SUCCESS);
-}
diff --git a/ubi-utils/src/ubiinfo/ubiipl.h b/ubi-utils/src/ubiinfo/ubiipl.h
deleted file mode 100644
index 3a8b900..0000000
--- a/ubi-utils/src/ubiinfo/ubiipl.h
+++ /dev/null
@@ -1,87 +0,0 @@
-#ifndef _UBI_IPL_H
-#define _UBI_IPL_H
-/*
- * 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.
- */
-
-/*
- * Constants calculated from the CFG_XXX defines
- *
- * Declaration of the loader function which is invoked by the
- * assembler part of the IPL
- */
-
-/* Size of IPL - is 4K for NAND and can also be 4K for NOR */
-#define IPL_SIZE 4096
-
-/* Needed in asm code to upload the data, needed in C-code for CRC32 */
-#define IPL_RAMADDR (CFG_MEMTOP - IPL_SIZE)
-
-#if !defined(__ASSEMBLY__)
-
-#include <stdint.h>
-#include <mtd/ubi-header.h>
-
-/* Address of the flash info structure */
-#define FINFO_ADDR (struct ubi_scan_info *) (CFG_MEMTOP - CFG_IPLSIZE * 1024)
-
-/* Size of the flash info structure */
-#define FINFO_SIZE sizeof(struct ubi_scan_info)
-
-/* Blockinfo array address */
-#define BINFO_ADDR (struct ubi_vid_hdr *) ((void *)FINFO_ADDR + FINFO_SIZE)
-
-/* Number of erase blocks */
-#define NR_ERASE_BLOCKS ((CFG_FLASHSIZE * 1024) / CFG_BLOCKSIZE)
-
-/* Blockinfo size */
-#define BINFO_SIZE (NR_ERASE_BLOCKS * sizeof(struct ubi_vid_hdr))
-
-/* Images array address */
-#define IMAGES_ADDR (struct ubi_vid_hdr **) ((void *)BINFO_ADDR + BINFO_SIZE)
-
-/* Images array size */
-#define IMAGES_SIZE (NR_ERASE_BLOCKS * sizeof(unsigned int))
-
-/* Total size of flash info + blockinfo + images */
-#define INFO_SIZE ((FINFO_SIZE + BINFO_SIZE + IMAGES_SIZE) / sizeof(uint32_t))
-
-/* Load address of the SPL */
-#define SPL_ADDR (void *) ((void *)FINFO_ADDR - CFG_SPLCODE * 1024)
-
-#define IPL_SIZE_CRC32 (IPL_SIZE - sizeof(uint32_t))
-#define IPL_RAMADDR_CRC32 ((void *)(IPL_RAMADDR + sizeof(uint32_t)))
-
-/*
- * Linker script magic to ensure that load_spl() is linked to the
- * right place
- */
-#define __crc32 __attribute__((__section__(".crc32")))
-#define __entry __attribute__((__section__(".entry.text")))
-#define __unused __attribute__((unused))
-
-#define MIN(x,y) ((x)<(y)?(x):(y))
-
-#define stop_on_error(x) \
- { while (1); }
-
-void __entry load_spl(void);
-void hardware_init(void);
-
-#endif /* __ASSEMBLY__ */
-
-#endif
diff --git a/ubi-utils/src/ubimirror/ubimirror.c b/ubi-utils/src/ubimirror.c
index e43ba10..e43ba10 100644
--- a/ubi-utils/src/ubimirror/ubimirror.c
+++ b/ubi-utils/src/ubimirror.c
diff --git a/ubi-utils/inc/ubimirror.h b/ubi-utils/src/ubimirror.h
index 893f5ce..d7ae2ad 100644
--- a/ubi-utils/inc/ubimirror.h
+++ b/ubi-utils/src/ubimirror.h
@@ -60,7 +60,7 @@
* @post The content of the UBI volume which was defined as source volume
* equals the content of the volumes which were defined as destination.
*/
-int ubimirror(uint32_t devno, int seqnum, uint32_t* ids, size_t ids_size,
+int ubimirror(uint32_t devno, int seqnum, uint32_t* ids, ssize_t ids_size,
char *err_buf, size_t err_buf_size);
#endif /* __UBIMIRROR_H__ */
diff --git a/ubi-utils/src/ubimkvol/ubimkvol.c b/ubi-utils/src/ubimkvol.c
index f929252..30c569c 100644
--- a/ubi-utils/src/ubimkvol/ubimkvol.c
+++ b/ubi-utils/src/ubimkvol.c
@@ -33,10 +33,9 @@
#include <string.h>
#include <errno.h>
+#include "config.h"
#include <libubi.h>
-#define VERSION "1.1"
-
static void usage(void);
static int param_sanity_check(ubi_lib_t lib);
static int parse_options(int argc, char * const argv[]);
@@ -214,13 +213,13 @@ static int param_sanity_check(ubi_lib_t lib)
if (err)
return -1;
- if (devn >= ubi.dev_count) {
+ if (devn >= (int)ubi.dev_count) {
fprintf(stderr, "Device %d does not exist\n", devn);
goto out;
}
len = strlen(name);
- if (len > ubi.nlen_max) {
+ if (len > (int)ubi.nlen_max) {
fprintf(stderr, "Too long name (%d symbols), max is %d\n",
len, ubi.nlen_max);
goto out;
@@ -236,7 +235,7 @@ out:
static void usage(void)
{
printf("Usage: ubi_mkvol OPTIONS\n"
- "Version: " VERSION "\n"
+ "Version: " PACKAGE_VERSION "\n"
"The command line options:\n"
"\t-h - this help message\n"
"\t-d - UBI device number\n"
diff --git a/ubi-utils/src/ubirmvol/ubirmvol.c b/ubi-utils/src/ubirmvol.c
index fc5ada5..cb47b6c 100644
--- a/ubi-utils/src/ubirmvol/ubirmvol.c
+++ b/ubi-utils/src/ubirmvol.c
@@ -28,6 +28,8 @@
#include <stdlib.h>
#include <string.h>
#include <errno.h>
+
+#include "config.h"
#include <libubi.h>
static void usage(void);
@@ -150,7 +152,7 @@ static int param_sanity_check(ubi_lib_t lib)
if (err)
return -1;
- if (devn >= ubi.dev_count) {
+ if (devn >= (int)ubi.dev_count) {
fprintf(stderr, "Device %d does not exist\n", devn);
goto out;
}
diff --git a/ubi-utils/src/ubiwritevol/ubiwritevol.c b/ubi-utils/src/ubiupdatevol.c
index 8fdbe37..28e1e8f 100644
--- a/ubi-utils/src/ubiwritevol/ubiwritevol.c
+++ b/ubi-utils/src/ubiupdatevol.c
@@ -68,10 +68,10 @@ static int verbose = 0;
static error_t parse_opt (int key, char *arg, struct argp_state *state);
-const char *argp_program_bug_address = "<haver@vnet.ibm.com>";
+const char *argp_program_bug_address = PACKAGE_BUGREPORT;
-static char doc[] = "\nVersion: " VERSION "\n\t"
- HOST_OS" "HOST_CPU" at "__DATE__" "__TIME__"\n"
+static char doc[] = "\nVersion: " PACKAGE_VERSION "\n\t"
+ BUILD_OS" "BUILD_CPU" at "__DATE__" "__TIME__"\n"
"\nWrite to UBI Volume.\n";
static struct argp_option options[] = {
diff --git a/ubi-utils/src/unubi/unubi.c b/ubi-utils/src/unubi.c
index 9cb1354..6d877e7 100644
--- a/ubi-utils/src/unubi/unubi.c
+++ b/ubi-utils/src/unubi.c
@@ -65,10 +65,11 @@ static struct args myargs = {
static error_t parse_opt (int key, char *arg, struct argp_state *state);
-const char *argp_program_bug_address = "<haver@vnet.ibm.com>";
+const char *argp_program_bug_address =
+ "... uuuh, lets wait until it looks nicer";
-static char doc[] = "\nVersion: " VERSION "\n\t"
- HOST_OS" "HOST_CPU" at "__DATE__" "__TIME__"\n"
+static char doc[] = "\nVersion: " PACKAGE_VERSION "\n\t"
+ BUILD_OS" "BUILD_CPU" at "__DATE__" "__TIME__"\n"
"\nWrite to UBI Volume.\n";
static struct argp_option options[] = {
@@ -204,7 +205,7 @@ parse_opt(int key, char *arg, struct argp_state *state)
}
static inline void
-hexdump(FILE *fp, const void *p, size_t size)
+hexdump(FILE *fp, const void *p, ssize_t size)
{
int k;
const uint8_t *buf = p;
@@ -271,7 +272,7 @@ static int extract_volume(struct args *args, const uint8_t *buf,
if (crc != ubi32_to_cpu(vid_hdr->hdr_crc))
continue;
- if (volume == ubi32_to_cpu(vid_hdr->vol_id)) {
+ if (volume == (int)ubi32_to_cpu(vid_hdr->vol_id)) {
printf("****** block %4d volume %2d **********\n",
i, volume);