diff options
author | Corentin Chary <corentincj@iksaif.net> | 2009-01-05 08:44:11 -0500 |
---|---|---|
committer | Artem Bityutskiy <Artem.Bityutskiy@nokia.com> | 2009-01-18 07:02:08 -0500 |
commit | 141e6ebd1b1759bd5cebf092b7216b6f1c7b4c4f (patch) | |
tree | 91b66f4b4d54fdb07084f8f5ee21c00491fe754b | |
parent | 1de9e8e70f5acc441550ca75433563d91b269bbe (diff) |
UBI: add ioctl for map operation
This patch adds ioctl for the LEB map operation (as a debugging
option so far).
[Re-named ioctl to make it look the same as the other one and made
some minor stylistic changes. Artem Bityutskiy.]
Signed-off-by: Corentin Chary <corentincj@iksaif.net>
Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
-rw-r--r-- | drivers/mtd/ubi/cdev.c | 14 | ||||
-rw-r--r-- | include/mtd/ubi-user.h | 15 |
2 files changed, 29 insertions, 0 deletions
diff --git a/drivers/mtd/ubi/cdev.c b/drivers/mtd/ubi/cdev.c index 98cf31ed0814..055e3f563c13 100644 --- a/drivers/mtd/ubi/cdev.c +++ b/drivers/mtd/ubi/cdev.c | |||
@@ -518,6 +518,20 @@ static int vol_cdev_ioctl(struct inode *inode, struct file *file, | |||
518 | err = ubi_wl_flush(ubi); | 518 | err = ubi_wl_flush(ubi); |
519 | break; | 519 | break; |
520 | } | 520 | } |
521 | |||
522 | /* Logical eraseblock map command */ | ||
523 | case UBI_IOCEBMAP: | ||
524 | { | ||
525 | struct ubi_map_req req; | ||
526 | |||
527 | err = copy_from_user(&req, argp, sizeof(struct ubi_map_req)); | ||
528 | if (err) { | ||
529 | err = -EFAULT; | ||
530 | break; | ||
531 | } | ||
532 | err = ubi_leb_map(desc, req.lnum, req.dtype); | ||
533 | break; | ||
534 | } | ||
521 | #endif | 535 | #endif |
522 | 536 | ||
523 | default: | 537 | default: |
diff --git a/include/mtd/ubi-user.h b/include/mtd/ubi-user.h index 2dc2eb2b8e22..758574039fca 100644 --- a/include/mtd/ubi-user.h +++ b/include/mtd/ubi-user.h | |||
@@ -133,6 +133,9 @@ | |||
133 | #define UBI_IOCEBER _IOW(UBI_VOL_IOC_MAGIC, 1, int32_t) | 133 | #define UBI_IOCEBER _IOW(UBI_VOL_IOC_MAGIC, 1, int32_t) |
134 | /* An atomic eraseblock change command */ | 134 | /* An atomic eraseblock change command */ |
135 | #define UBI_IOCEBCH _IOW(UBI_VOL_IOC_MAGIC, 2, int32_t) | 135 | #define UBI_IOCEBCH _IOW(UBI_VOL_IOC_MAGIC, 2, int32_t) |
136 | /* Map an eraseblock, used for debugging, disabled by default */ | ||
137 | #define UBI_IOCEBMAP _IOW(UBI_VOL_IOC_MAGIC, 3, struct ubi_map_req) | ||
138 | |||
136 | 139 | ||
137 | /* Maximum MTD device name length supported by UBI */ | 140 | /* Maximum MTD device name length supported by UBI */ |
138 | #define MAX_UBI_MTD_NAME_LEN 127 | 141 | #define MAX_UBI_MTD_NAME_LEN 127 |
@@ -319,4 +322,16 @@ struct ubi_leb_change_req { | |||
319 | int8_t padding[7]; | 322 | int8_t padding[7]; |
320 | } __attribute__ ((packed)); | 323 | } __attribute__ ((packed)); |
321 | 324 | ||
325 | /** | ||
326 | * struct ubi_map_req - a data structure used in map eraseblock requests. | ||
327 | * @lnum: logical eraseblock number to unmap | ||
328 | * @dtype: data type (%UBI_LONGTERM, %UBI_SHORTTERM, %UBI_UNKNOWN) | ||
329 | * @padding: reserved for future, not used, has to be zeroed | ||
330 | */ | ||
331 | struct ubi_map_req { | ||
332 | int32_t lnum; | ||
333 | int8_t dtype; | ||
334 | int8_t padding[3]; | ||
335 | } __attribute__ ((packed)); | ||
336 | |||
322 | #endif /* __UBI_USER_H__ */ | 337 | #endif /* __UBI_USER_H__ */ |