mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-11-01 17:08:10 +00:00
UBI: improve ioctl commentaries
Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
This commit is contained in:
parent
a27ce8f55d
commit
f7fc6f3f33
1 changed files with 62 additions and 26 deletions
|
@ -40,37 +40,37 @@
|
||||||
* UBI volume creation
|
* UBI volume creation
|
||||||
* ~~~~~~~~~~~~~~~~~~~
|
* ~~~~~~~~~~~~~~~~~~~
|
||||||
*
|
*
|
||||||
* UBI volumes are created via the %UBI_IOCMKVOL IOCTL command of UBI character
|
* UBI volumes are created via the %UBI_IOCMKVOL ioctl command of UBI character
|
||||||
* device. A &struct ubi_mkvol_req object has to be properly filled and a
|
* device. A &struct ubi_mkvol_req object has to be properly filled and a
|
||||||
* pointer to it has to be passed to the IOCTL.
|
* pointer to it has to be passed to the ioctl.
|
||||||
*
|
*
|
||||||
* UBI volume deletion
|
* UBI volume deletion
|
||||||
* ~~~~~~~~~~~~~~~~~~~
|
* ~~~~~~~~~~~~~~~~~~~
|
||||||
*
|
*
|
||||||
* To delete a volume, the %UBI_IOCRMVOL IOCTL command of the UBI character
|
* To delete a volume, the %UBI_IOCRMVOL ioctl command of the UBI character
|
||||||
* device should be used. A pointer to the 32-bit volume ID hast to be passed
|
* device should be used. A pointer to the 32-bit volume ID hast to be passed
|
||||||
* to the IOCTL.
|
* to the ioctl.
|
||||||
*
|
*
|
||||||
* UBI volume re-size
|
* UBI volume re-size
|
||||||
* ~~~~~~~~~~~~~~~~~~
|
* ~~~~~~~~~~~~~~~~~~
|
||||||
*
|
*
|
||||||
* To re-size a volume, the %UBI_IOCRSVOL IOCTL command of the UBI character
|
* To re-size a volume, the %UBI_IOCRSVOL ioctl command of the UBI character
|
||||||
* device should be used. A &struct ubi_rsvol_req object has to be properly
|
* device should be used. A &struct ubi_rsvol_req object has to be properly
|
||||||
* filled and a pointer to it has to be passed to the IOCTL.
|
* filled and a pointer to it has to be passed to the ioctl.
|
||||||
*
|
*
|
||||||
* UBI volumes re-name
|
* UBI volumes re-name
|
||||||
* ~~~~~~~~~~~~~~~~~~~
|
* ~~~~~~~~~~~~~~~~~~~
|
||||||
*
|
*
|
||||||
* To re-name several volumes atomically at one go, the %UBI_IOCRNVOL command
|
* To re-name several volumes atomically at one go, the %UBI_IOCRNVOL command
|
||||||
* of the UBI character device should be used. A &struct ubi_rnvol_req object
|
* of the UBI character device should be used. A &struct ubi_rnvol_req object
|
||||||
* has to be properly filled and a pointer to it has to be passed to the IOCTL.
|
* has to be properly filled and a pointer to it has to be passed to the ioctl.
|
||||||
*
|
*
|
||||||
* UBI volume update
|
* UBI volume update
|
||||||
* ~~~~~~~~~~~~~~~~~
|
* ~~~~~~~~~~~~~~~~~
|
||||||
*
|
*
|
||||||
* Volume update should be done via the %UBI_IOCVOLUP IOCTL command of the
|
* Volume update should be done via the %UBI_IOCVOLUP ioctl command of the
|
||||||
* corresponding UBI volume character device. A pointer to a 64-bit update
|
* corresponding UBI volume character device. A pointer to a 64-bit update
|
||||||
* size should be passed to the IOCTL. After this, UBI expects user to write
|
* size should be passed to the ioctl. After this, UBI expects user to write
|
||||||
* this number of bytes to the volume character device. The update is finished
|
* this number of bytes to the volume character device. The update is finished
|
||||||
* when the claimed number of bytes is passed. So, the volume update sequence
|
* when the claimed number of bytes is passed. So, the volume update sequence
|
||||||
* is something like:
|
* is something like:
|
||||||
|
@ -80,14 +80,50 @@
|
||||||
* write(fd, buf, image_size);
|
* write(fd, buf, image_size);
|
||||||
* close(fd);
|
* close(fd);
|
||||||
*
|
*
|
||||||
* Atomic eraseblock change
|
* Logical eraseblock erase
|
||||||
* ~~~~~~~~~~~~~~~~~~~~~~~~
|
* ~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
*
|
*
|
||||||
* Atomic eraseblock change operation is done via the %UBI_IOCEBCH IOCTL
|
* To erase a logical eraseblock, the %UBI_IOCEBER ioctl command of the
|
||||||
* command of the corresponding UBI volume character device. A pointer to
|
* corresponding UBI volume character device should be used. This command
|
||||||
* &struct ubi_leb_change_req has to be passed to the IOCTL. Then the user is
|
* unmaps the requested logical eraseblock, makes sure the corresponding
|
||||||
* expected to write the requested amount of bytes. This is similar to the
|
* physical eraseblock is successfully erased, and returns.
|
||||||
* "volume update" IOCTL.
|
*
|
||||||
|
* Atomic logical eraseblock change
|
||||||
|
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
*
|
||||||
|
* Atomic logical eraseblock change operation is called using the %UBI_IOCEBCH
|
||||||
|
* ioctl command of the corresponding UBI volume character device. A pointer to
|
||||||
|
* a &struct ubi_leb_change_req object has to be passed to the ioctl. Then the
|
||||||
|
* user is expected to write the requested amount of bytes (similarly to what
|
||||||
|
* should be done in case of the "volume update" ioctl).
|
||||||
|
*
|
||||||
|
* Logical eraseblock map
|
||||||
|
* ~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
*
|
||||||
|
* To map a logical eraseblock to a physical eraseblock, the %UBI_IOCEBMAP
|
||||||
|
* ioctl command should be used. A pointer to a &struct ubi_map_req object is
|
||||||
|
* expected to be passed. The ioctl maps the requested logical eraseblock to
|
||||||
|
* a physical eraseblock and returns. Only non-mapped logical eraseblocks can
|
||||||
|
* be mapped. If the logical eraseblock specified in the request is already
|
||||||
|
* mapped to a physical eraseblock, the ioctl fails and returns error.
|
||||||
|
*
|
||||||
|
* Logical eraseblock unmap
|
||||||
|
* ~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
*
|
||||||
|
* To unmap a logical eraseblock to a physical eraseblock, the %UBI_IOCEBUNMAP
|
||||||
|
* ioctl command should be used. The ioctl unmaps the logical eraseblocks,
|
||||||
|
* schedules corresponding physical eraseblock for erasure, and returns. Unlike
|
||||||
|
* the "LEB erase" command, it does not wait for the physical eraseblock being
|
||||||
|
* erased. Note, the side effect of this is that if an unclean reboot happens
|
||||||
|
* after the unmap ioctl returns, you may find the LEB mapped again to the same
|
||||||
|
* physical eraseblock after the UBI is run again.
|
||||||
|
*
|
||||||
|
* Check if logical eraseblock is mapped
|
||||||
|
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
*
|
||||||
|
* To check if a logical eraseblock is mapped to a physical eraseblock, the
|
||||||
|
* %UBI_IOCEBISMAP ioctl command should be used. It returns %0 if the LEB is
|
||||||
|
* not mapped, and %1 if it is mapped.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -101,7 +137,7 @@
|
||||||
/* Maximum volume name length */
|
/* Maximum volume name length */
|
||||||
#define UBI_MAX_VOLUME_NAME 127
|
#define UBI_MAX_VOLUME_NAME 127
|
||||||
|
|
||||||
/* IOCTL commands of UBI character devices */
|
/* ioctl commands of UBI character devices */
|
||||||
|
|
||||||
#define UBI_IOC_MAGIC 'o'
|
#define UBI_IOC_MAGIC 'o'
|
||||||
|
|
||||||
|
@ -114,7 +150,7 @@
|
||||||
/* Re-name volumes */
|
/* Re-name volumes */
|
||||||
#define UBI_IOCRNVOL _IOW(UBI_IOC_MAGIC, 3, struct ubi_rnvol_req)
|
#define UBI_IOCRNVOL _IOW(UBI_IOC_MAGIC, 3, struct ubi_rnvol_req)
|
||||||
|
|
||||||
/* IOCTL commands of the UBI control character device */
|
/* ioctl commands of the UBI control character device */
|
||||||
|
|
||||||
#define UBI_CTRL_IOC_MAGIC 'o'
|
#define UBI_CTRL_IOC_MAGIC 'o'
|
||||||
|
|
||||||
|
@ -123,21 +159,21 @@
|
||||||
/* Detach an MTD device */
|
/* Detach an MTD device */
|
||||||
#define UBI_IOCDET _IOW(UBI_CTRL_IOC_MAGIC, 65, int32_t)
|
#define UBI_IOCDET _IOW(UBI_CTRL_IOC_MAGIC, 65, int32_t)
|
||||||
|
|
||||||
/* IOCTL commands of UBI volume character devices */
|
/* ioctl commands of UBI volume character devices */
|
||||||
|
|
||||||
#define UBI_VOL_IOC_MAGIC 'O'
|
#define UBI_VOL_IOC_MAGIC 'O'
|
||||||
|
|
||||||
/* Start UBI volume update */
|
/* Start UBI volume update */
|
||||||
#define UBI_IOCVOLUP _IOW(UBI_VOL_IOC_MAGIC, 0, int64_t)
|
#define UBI_IOCVOLUP _IOW(UBI_VOL_IOC_MAGIC, 0, int64_t)
|
||||||
/* An eraseblock erasure command, used for debugging, disabled by default */
|
/* LEB erasure command, used for debugging, disabled by default */
|
||||||
#define UBI_IOCEBER _IOW(UBI_VOL_IOC_MAGIC, 1, int32_t)
|
#define UBI_IOCEBER _IOW(UBI_VOL_IOC_MAGIC, 1, int32_t)
|
||||||
/* An atomic eraseblock change command */
|
/* Atomic LEB change command */
|
||||||
#define UBI_IOCEBCH _IOW(UBI_VOL_IOC_MAGIC, 2, int32_t)
|
#define UBI_IOCEBCH _IOW(UBI_VOL_IOC_MAGIC, 2, int32_t)
|
||||||
/* Map an eraseblock, used for debugging, disabled by default */
|
/* Map LEB command */
|
||||||
#define UBI_IOCEBMAP _IOW(UBI_VOL_IOC_MAGIC, 3, struct ubi_map_req)
|
#define UBI_IOCEBMAP _IOW(UBI_VOL_IOC_MAGIC, 3, struct ubi_map_req)
|
||||||
/* Unmap an eraseblock, used for debugging, disabled by default */
|
/* Unmap LEB command */
|
||||||
#define UBI_IOCEBUNMAP _IOW(UBI_VOL_IOC_MAGIC, 4, int32_t)
|
#define UBI_IOCEBUNMAP _IOW(UBI_VOL_IOC_MAGIC, 4, int32_t)
|
||||||
/* Check if an eraseblock is mapped, used for debugging, disabled by default */
|
/* Check if LEB is mapped command */
|
||||||
#define UBI_IOCEBISMAP _IOR(UBI_VOL_IOC_MAGIC, 5, int32_t)
|
#define UBI_IOCEBISMAP _IOR(UBI_VOL_IOC_MAGIC, 5, int32_t)
|
||||||
|
|
||||||
/* Maximum MTD device name length supported by UBI */
|
/* Maximum MTD device name length supported by UBI */
|
||||||
|
@ -311,8 +347,8 @@ struct ubi_rnvol_req {
|
||||||
} __attribute__ ((packed));
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct ubi_leb_change_req - a data structure used in atomic logical
|
* struct ubi_leb_change_req - a data structure used in atomic LEB change
|
||||||
* eraseblock change requests.
|
* requests.
|
||||||
* @lnum: logical eraseblock number to change
|
* @lnum: logical eraseblock number to change
|
||||||
* @bytes: how many bytes will be written to the logical eraseblock
|
* @bytes: how many bytes will be written to the logical eraseblock
|
||||||
* @dtype: data type (%UBI_LONGTERM, %UBI_SHORTTERM, %UBI_UNKNOWN)
|
* @dtype: data type (%UBI_LONGTERM, %UBI_SHORTTERM, %UBI_UNKNOWN)
|
||||||
|
@ -326,7 +362,7 @@ struct ubi_leb_change_req {
|
||||||
} __attribute__ ((packed));
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct ubi_map_req - a data structure used in map eraseblock requests.
|
* struct ubi_map_req - a data structure used in map LEB requests.
|
||||||
* @lnum: logical eraseblock number to unmap
|
* @lnum: logical eraseblock number to unmap
|
||||||
* @dtype: data type (%UBI_LONGTERM, %UBI_SHORTTERM, %UBI_UNKNOWN)
|
* @dtype: data type (%UBI_LONGTERM, %UBI_SHORTTERM, %UBI_UNKNOWN)
|
||||||
* @padding: reserved for future, not used, has to be zeroed
|
* @padding: reserved for future, not used, has to be zeroed
|
||||||
|
|
Loading…
Reference in a new issue