diff options
| author | Artem Bityutskiy <Artem.Bityutskiy@nokia.com> | 2008-01-22 16:02:52 +0200 | 
|---|---|---|
| committer | Artem Bityutskiy <Artem.Bityutskiy@nokia.com> | 2008-01-22 16:22:52 +0200 | 
| commit | 22f5fe49d60ea43524a902408b3112a78f2c5aae (patch) | |
| tree | 873fd6ca0023a2e71eaf78292ead57af6f07e7f6 /ubi-utils/inc | |
| parent | f1d0f2363471837b89bf89410251f263680b683a (diff) | |
ubi-utils: massive changes
This commit basically removes most of the old ubi utilities
as they are barely maintainamble.
Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Diffstat (limited to 'ubi-utils/inc')
| -rw-r--r-- | ubi-utils/inc/libpfi.h | 257 | ||||
| -rw-r--r-- | ubi-utils/inc/libubigen.h | 104 | 
2 files changed, 361 insertions, 0 deletions
| diff --git a/ubi-utils/inc/libpfi.h b/ubi-utils/inc/libpfi.h new file mode 100644 index 0000000..6aca4be --- /dev/null +++ b/ubi-utils/inc/libpfi.h @@ -0,0 +1,257 @@ +#ifndef __pfi_h +#define __pfi_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. + */ + +/** + * @file pfi.h + * + * @author Oliver Lohmann <oliloh@de.ibm.com> + *         Andreas Arnez <arnez@de.ibm.com> + *         Joern Engel <engeljoe@de.ibm.com> + *         Frank Haverkamp <haverkam@de.ibm.com> + * + * @brief libpfi will hold all code to create and process pfi + * images. Definitions made in this file are equaly usable for the + * development host and the target system. + * + * @note This header additionally holds the official definitions for + * the pfi headers. + */ + +#include <stdio.h>		/* FILE */ +#include "list.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct pfi_ubi { +	long long data_offs; +	uint32_t data_size; +	uint32_t alignment; +	uint32_t *ids; +	uint32_t ids_size; +	char **names; +	uint32_t names_size; +	uint32_t size; +	int vol_type; +	int curr_seqnum; /* specifies the seqnum taken in an update, +			    default: 0 (used by pfiflash, ubimirror) */ +	uint32_t crc; +}; + +int read_pfi_headers(struct list_entry **ubi_list, FILE *fp_pfi); +int free_pfi_ubi(struct pfi_ubi **pfi_ubi); + +/* Definitions. */ + +#define PFI_HDRVERSION 1	/* current header version */ + +#define PFI_ENOVERSION 1	/* unknown version */ +#define PFI_ENOHEADER  2	/* not a pfi header */ +#define PFI_EINSUFF    3	/* insufficient information */ +#define PFI_EUNDEF     4	/* key not defined */ +#define PFI_ENOMEM     5	/* out of memory */ +#define PFI_EBADTYPE   6	/* bad data type */ +#define PFI_EFILE      7	/* file I/O error: see errno */ +#define PFI_EFILEINVAL 8	/* file format not valid */ +#define PFI_EINVAL     9	/* invalid parameter */ +#define PFI_ERANGE     10	/* invalid range */ +#define PFI_EMODE      11	/* expecting other mode in this header */ +#define PFI_DATA_START 12	/* data section starts */ +#define PFI_EMAX       13	/* should be always larger as the largest +				   error code */ + +#define PFI_LABEL_LEN  64	/* This is the maximum length for a +				   PFI header label */ +#define PFI_KEYWORD_LEN 32	/* This is the maximum length for an +				   entry in the mode and type fields */ + +#define PFI_UBI_MAX_VOLUMES 128 +#define PFI_UBI_VOL_NAME_LEN 127 + +/** + * @brief The pfi header allows to set flags which influence the flashing + * behaviour. + */ +#define PFI_FLAG_PROTECTED   0x00000001 + +struct pfi_header; + +/** + * @brief Initialize a pfi header object. + * + * @param head	 Pointer to handle. This function allocates memory + *		 for this data structure. + * @return	 0 on success, otherwise: + *		 PFI_ENOMEM : no memory available for the handle. + */ +int pfi_header_init (struct pfi_header **head); + + +/** + * @brief Destroy a pfi header object. + * + * @param head	 handle. head is invalid after calling this function. + * @return	 0 always. + */ +int pfi_header_destroy (struct pfi_header **head); + + +/** + * @brief Add a key/value pair to a pfi header object. + * + * @param head	 handle. + * @param key	 pointer to key string. Must be 0 terminated. + * @param value	 pointer to value string. Must be 0 terminated. + * @return	 0 on success, otherwise: + *		 PFI_EUNDEF   : key was not found. + *		 PFI_ENOMEM   : no memory available for the handle. + *		 PFI_EBADTYPE : value is not an hex string. This happens + *				 when the key stores an integer and the + *				 new value is not convertable e.g. not in + *				 0xXXXXXXXX format. + */ +int pfi_header_setvalue (struct pfi_header *head, +			  const char *key, const char *value); + + +/** + * @brief Add a key/value pair to a pfi header object. Provide the + * value as a number. + * + * @param head	 handle. + * @param key	 pointer to key string. Must be 0 terminated. + * @param value	 value to set. + * @return	 0 on success, otherwise: + *		 PFI_EUNDEF   : key was not found. + *		 PFI_EBADTYPE : value is not a string. This happens + *				 when the key stores a string. + */ +int pfi_header_setnumber (struct pfi_header *head, +			   const char *key, uint32_t value); + + +/** + * @brief For a given key, return the numerical value stored in a + * pfi header object. + * + * @param head	 handle. + * @param key	 pointer to key string. Must be 0 terminated. + * @param value	 pointer to value. + * @return	 0 on success, otherwise: + *		 PFI_EUNDEF   : key was not found. + *		 PFI_EBADTYPE : stored value is not an integer but a string. + */ +int pfi_header_getnumber (struct pfi_header *head, +			   const char *key, uint32_t *value); + + +static inline uint32_t +pfi_getnumber(struct pfi_header *head, const char *key) +{ +	uint32_t value; +	pfi_header_getnumber(head, key, &value); +	return value; +} + +/** + * @brief For a given key, return the string value stored in a pfi + * header object. + * + * @param head	 handle. + * @param key	 pointer to key string. Must be 0 terminated. + * @param value	 pointer to value string. Memory must be allocated by the user. + * @return	 0 on success, otherwise: + *		 PFI_EUNDEF   : key was not found. + *		 PFI_EBADTYPE : stored value is not a string but an integer. + */ +int pfi_header_getstring (struct pfi_header *head, +			   const char *key, char *value, size_t size); + + +/** + * @brief Write a pfi header object into a given file. + * + * @param out	 output stream. + * @param head	 handle. + * @return	 0 on success, error values otherwise: + *		 PFI_EINSUFF   : not all mandatory fields are filled. + *		 PFI_ENOHEADER : wrong header version or magic number. + *		 -E*		: see <asm/errno.h>. + */ +int pfi_header_write (FILE *out, struct pfi_header *head); + + +/** + * @brief Read a pfi header object from a given file. + * + * @param in	 input stream. + * @param head	 handle. + * @return	 0 on success, error values otherwise: + *		 PFI_ENOVERSION: unknown header version. + *		 PFI_EFILE     : cannot read enough data. + *		 PFI_ENOHEADER : wrong header version or magic number. + *		 -E*		: see <asm/errno.h>. + * + * If the header verification returned success the user can assume that + * all mandatory fields for a particular version are accessible. Checking + * the return code when calling the get-function for those keys is not + * required in those cases. For optional fields the checking must still be + * done. + */ +int pfi_header_read (FILE *in, struct pfi_header *head); + + +/** + * @brief Display a pfi header in human-readable form. + * + * @param out	 output stream. + * @param head	 handle. + * @return	 always 0. + * + * @note Prints out that it is not implemented and whom you should + * contact if you need it urgently!. + */ +int pfi_header_dump (FILE *out, struct pfi_header *head); + + +/* + * @brief	 Iterates over a stream of pfi files. The iterator function + *		 must advance the file pointer in FILE *in to the next pfi + *		 header. Function exists on feof(in). + * + * @param in	 input file descriptor, must be open and valid. + * @param func	 iterator function called when pfi header could be + *		 read and was validated. The function must return 0 on + *		 success. + * @return	 See pfi_header_init and pfi_header_read. + *		 PFI_EINVAL	  : func is not valid + *		 0 ok. + */ +typedef int (* pfi_read_func)(FILE *in, struct pfi_header *hdr, void *priv_data); + +int pfi_read (FILE *in, pfi_read_func func, void *priv_data); + + +#ifdef __cplusplus +} +#endif + +#endif /* __pfi_h */ diff --git a/ubi-utils/inc/libubigen.h b/ubi-utils/inc/libubigen.h new file mode 100644 index 0000000..5315a72 --- /dev/null +++ b/ubi-utils/inc/libubigen.h @@ -0,0 +1,104 @@ +/* + * Copyright (c) International Business Machines Corp., 2006 + * Copyright (C) 2008 Nokia Corporation + * + * 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. + */ + +/* + * Authors: Frank Haverkamp + *          Artem Bityutskiy + */ + +#ifndef __LIBUBIGEN_H__ +#define __LIBUBIGEN_H__ + +#include <stdio.h> +#include <asm/byteorder.h> + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * struct ubigen_info - libubigen information. + * @leb_size: logical eraseblock size + * @peb_size: size of the physical eraseblock + * @min_io_size: minimum input/output unit size + * @vid_hdr_offs: offset of the VID header + * @data_offs: data offset + * @ubi_ver: UBI version + * @ec: initial erase counter + */ +struct ubigen_info +{ +	int leb_size; +	int peb_size; +	int min_io_size; +	int vid_hdr_offs; +	int data_offs; +	int ubi_ver; +	long long ec; +}; + +/** + * struct ubigen_vol_info - information about a volume. + * @id: volume id + * @type: volume type (%UBI_VID_DYNAMIC or %UBI_VID_STATIC) + * @alignment: volume alignment + * @data_pad: how many bytes are unused at the end of the each physical + *            eraseblock to satisfy the requested alignment + * @usable_leb_size: LEB size accessible for volume users + * @name: volume name + * @name_len: volume name length + * @compat: compatibility of this volume (%0, %UBI_COMPAT_DELETE, + *          %UBI_COMPAT_IGNORE, %UBI_COMPAT_PRESERVE, or %UBI_COMPAT_REJECT) + * @used_ebs: total number of used logical eraseblocks in this volume (relevant + *            for static volumes only) + * @bytes: size of the volume contents in bytes (relevant for static volumes + *         only) + */ +struct ubigen_vol_info +{ +	int id; +	int type; +	int alignment; +	int data_pad; +	int usable_leb_size; +	const char *name; +	int name_len; +	int compat; +	int used_ebs; +	long long bytes; +}; + +void ubigen_info_init(struct ubigen_info *ui, int peb_size, int min_io_size, +		      int subpage_size, int vid_hdr_offs, int ubi_ver, +		      long long ec); +struct ubi_vtbl_record *ubigen_create_empty_vtbl(int *size); +void ubigen_add_volume(const struct ubigen_info *ui, +		       const struct ubigen_vol_info *vi, +		       struct ubi_vtbl_record *vtbl); +int ubigen_write_volume(const struct ubigen_info *ui, +			const struct ubigen_vol_info *vi, +			long long bytes, FILE *in, FILE *out); +int ubigen_write_layout_vol(const struct ubigen_info *ui, +			    struct ubi_vtbl_record *vtbl, FILE *out); + +#ifdef __cplusplus +} +#endif + +#endif /* !__LIBUBIGEN_H__ */ | 
