Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
Commits
f7fc6f3f
Commit
f7fc6f3f
authored
Jan 07, 2009
by
Artem Bityutskiy
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
UBI: improve ioctl commentaries
Signed-off-by:
Artem Bityutskiy
<
Artem.Bityutskiy@nokia.com
>
parent
a27ce8f5
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
62 additions
and
26 deletions
+62
-26
include/mtd/ubi-user.h
include/mtd/ubi-user.h
+62
-26
No files found.
include/mtd/ubi-user.h
View file @
f7fc6f3f
...
@@ -40,37 +40,37 @@
...
@@ -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 @@
...
@@ -80,14 +80,50 @@
* write(fd, buf, image_size);
* write(fd, buf, image_size);
* close(fd);
* close(fd);
*
*
*
Atomic eraseblock chang
e
*
Logical eraseblock eras
e
* ~~~~~~~~~~~~~~~~~~~~~~~~
* ~~~~~~~~~~~~~~~~~~~~~~~~
*
*
* 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 @@
...
@@ -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 @@
...
@@ -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 @@
...
@@ -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)
/* A
n atomic eraseblock
change command */
/* A
tomic 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 {
...
@@ -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 {
...
@@ -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
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment