Commit 3156ceb2 authored by Rickard Andersson's avatar Rickard Andersson Committed by Richard Weinberger
Browse files

ubi: Expose interface for detailed erase counters



Using the ioctl command 'UBI_IOCECNFO' user space can obtain
detailed erase counter information of all blocks of a device.

Signed-off-by: default avatarRickard Andersson <rickard.andersson@axis.com>
Reviewed-by: default avatarZhihao Cheng <chengzhihao1@huawei.com>
Signed-off-by: default avatarRichard Weinberger <richard@nod.at>
parent bdb0ca39
Loading
Loading
Loading
Loading
+33 −0
Original line number Diff line number Diff line
@@ -175,6 +175,8 @@
#define UBI_IOCRPEB _IOW(UBI_IOC_MAGIC, 4, __s32)
/* Force scrubbing on the specified PEB */
#define UBI_IOCSPEB _IOW(UBI_IOC_MAGIC, 5, __s32)
/* Read detailed device erase counter information */
#define UBI_IOCECNFO _IOWR(UBI_IOC_MAGIC, 6, struct ubi_ecinfo_req)

/* ioctl commands of the UBI control character device */

@@ -412,6 +414,37 @@ struct ubi_rnvol_req {
	} ents[UBI_MAX_RNVOL];
} __packed;

/**
 * struct ubi_ecinfo_req - a data structure used for requesting and receiving
 * erase block counter information from a UBI device.
 *
 * @start: index of first physical erase block to read (in)
 * @length: number of erase counters to read (in)
 * @read_length: number of erase counters that was actually read (out)
 * @padding: reserved for future, not used, has to be zeroed
 * @erase_counters: array of erase counter values (out)
 *
 * This structure is used to retrieve erase counter information for a specified
 * range of PEBs on a UBI device.
 * Erase counters are read from @start and attempts to read @length number of
 * erase counters.
 * The retrieved values are stored in the @erase_counters array. It is the
 * responsibility of the caller to allocate enough memory for storing @length
 * elements in the @erase_counters array.
 * If a block is bad or if the erase counter is unknown the corresponding value
 * in the array will be set to -1.
 * The @read_length field will indicate the number of erase counters actually
 * read. Typically @read_length will be limited due to memory or the number of
 * PEBs on the UBI device.
 */
struct ubi_ecinfo_req {
	__s32 start;
	__s32 length;
	__s32 read_length;
	__s8  padding[16];
	__s32 erase_counters[];
}  __packed;

/**
 * struct ubi_leb_change_req - a data structure used in atomic LEB change
 *                             requests.