June 2025 | ||||||
Mo | Tu | We | Th | Fr | Sa | Su |
26 | 27 | 28 | 29 | 30 | 31 | 1 |
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 1 | 2 | 3 | 4 | 5 | 6 |
001: /* 002: * Copyright © International Business Machines Corp., 2006 003: * 004: * This program is free software; you can redistribute it and/or modify 005: * it under the terms of the GNU General Public License as published by 006: * the Free Software Foundation; either version 2 of the License, or 007: * (at your option) any later version. 008: * 009: * This program is distributed in the hope that it will be useful, 010: * but WITHOUT ANY WARRANTY; without even the implied warranty of 011: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See 012: * the GNU General Public License for more details. 013: * 014: * You should have received a copy of the GNU General Public License 015: * along with this program; if not, write to the Free Software 016: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 017: * 018: * Author: Artem Bityutskiy (Битюцкий Артём) 019: */ 020: 021: #ifndef __UBI_USER_H__ 022: #define __UBI_USER_H__ 023: 024: #include <linux/types.h> 025: 026: /* 027: * UBI device creation (the same as MTD device attachment) 028: * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 029: * 030: * MTD devices may be attached using %UBI_IOCATT ioctl command of the UBI 031: * control device. The caller has to properly fill and pass 032: * &struct ubi_attach_req object - UBI will attach the MTD device specified in 033: * the request and return the newly created UBI device number as the ioctl 034: * return value. 035: * 036: * UBI device deletion (the same as MTD device detachment) 037: * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 038: * 039: * An UBI device maybe deleted with %UBI_IOCDET ioctl command of the UBI 040: * control device. 041: * 042: * UBI volume creation 043: * ~~~~~~~~~~~~~~~~~~~ 044: * 045: * UBI volumes are created via the %UBI_IOCMKVOL ioctl command of UBI character 046: * device. A &struct ubi_mkvol_req object has to be properly filled and a 047: * pointer to it has to be passed to the ioctl. 048: * 049: * UBI volume deletion 050: * ~~~~~~~~~~~~~~~~~~~ 051: * 052: * To delete a volume, the %UBI_IOCRMVOL ioctl command of the UBI character 053: * device should be used. A pointer to the 32-bit volume ID hast to be passed 054: * to the ioctl. 055: * 056: * UBI volume re-size 057: * ~~~~~~~~~~~~~~~~~~ 058: * 059: * To re-size a volume, the %UBI_IOCRSVOL ioctl command of the UBI character 060: * device should be used. A &struct ubi_rsvol_req object has to be properly 061: * filled and a pointer to it has to be passed to the ioctl. 062: * 063: * UBI volumes re-name 064: * ~~~~~~~~~~~~~~~~~~~ 065: * 066: * To re-name several volumes atomically at one go, the %UBI_IOCRNVOL command 067: * of the UBI character device should be used. A &struct ubi_rnvol_req object 068: * has to be properly filled and a pointer to it has to be passed to the ioctl. 069: * 070: * UBI volume update 071: * ~~~~~~~~~~~~~~~~~ 072: * 073: * Volume update should be done via the %UBI_IOCVOLUP ioctl command of the 074: * corresponding UBI volume character device. A pointer to a 64-bit update 075: * size should be passed to the ioctl. After this, UBI expects user to write 076: * this number of bytes to the volume character device. The update is finished 077: * when the claimed number of bytes is passed. So, the volume update sequence 078: * is something like: 079: * 080: * fd = open("/dev/my_volume"); 081: * ioctl(fd, UBI_IOCVOLUP, &image_size); 082: * write(fd, buf, image_size); 083: * close(fd); 084: * 085: * Logical eraseblock erase 086: * ~~~~~~~~~~~~~~~~~~~~~~~~ 087: * 088: * To erase a logical eraseblock, the %UBI_IOCEBER ioctl command of the 089: * corresponding UBI volume character device should be used. This command 090: * unmaps the requested logical eraseblock, makes sure the corresponding 091: * physical eraseblock is successfully erased, and returns. 092: * 093: * Atomic logical eraseblock change 094: * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 095: * 096: * Atomic logical eraseblock change operation is called using the %UBI_IOCEBCH 097: * ioctl command of the corresponding UBI volume character device. A pointer to 098: * a &struct ubi_leb_change_req object has to be passed to the ioctl. Then the 099: * user is expected to write the requested amount of bytes (similarly to what 100: * should be done in case of the "volume update" ioctl). 101: * 102: * Logical eraseblock map 103: * ~~~~~~~~~~~~~~~~~~~~~ 104: * 105: * To map a logical eraseblock to a physical eraseblock, the %UBI_IOCEBMAP 106: * ioctl command should be used. A pointer to a &struct ubi_map_req object is 107: * expected to be passed. The ioctl maps the requested logical eraseblock to 108: * a physical eraseblock and returns. Only non-mapped logical eraseblocks can 109: * be mapped. If the logical eraseblock specified in the request is already 110: * mapped to a physical eraseblock, the ioctl fails and returns error. 111: * 112: * Logical eraseblock unmap 113: * ~~~~~~~~~~~~~~~~~~~~~~~~ 114: * 115: * To unmap a logical eraseblock to a physical eraseblock, the %UBI_IOCEBUNMAP 116: * ioctl command should be used. The ioctl unmaps the logical eraseblocks, 117: * schedules corresponding physical eraseblock for erasure, and returns. Unlike 118: * the "LEB erase" command, it does not wait for the physical eraseblock being 119: * erased. Note, the side effect of this is that if an unclean reboot happens 120: * after the unmap ioctl returns, you may find the LEB mapped again to the same 121: * physical eraseblock after the UBI is run again. 122: * 123: * Check if logical eraseblock is mapped 124: * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 125: * 126: * To check if a logical eraseblock is mapped to a physical eraseblock, the 127: * %UBI_IOCEBISMAP ioctl command should be used. It returns %0 if the LEB is 128: * not mapped, and %1 if it is mapped. 129: * 130: * Set an UBI volume property 131: * ~~~~~~~~~~~~~~~~~~~~~~~~~ 132: * 133: * To set an UBI volume property the %UBI_IOCSETPROP ioctl command should be 134: * used. A pointer to a &struct ubi_set_vol_prop_req object is expected to be 135: * passed. The object describes which property should be set, and to which value 136: * it should be set. 137: */ 138: 139: /* 140: * When a new UBI volume or UBI device is created, users may either specify the 141: * volume/device number they want to create or to let UBI automatically assign 142: * the number using these constants. 143: */ 144: #define UBI_VOL_NUM_AUTO (-1) 145: #define UBI_DEV_NUM_AUTO (-1) 146: 147: /* Maximum volume name length */ 148: #define UBI_MAX_VOLUME_NAME 127 149: 150: /* ioctl commands of UBI character devices */ 151: 152: #define UBI_IOC_MAGIC 'o' 153: 154: /* Create an UBI volume */ 155: #define UBI_IOCMKVOL _IOW(UBI_IOC_MAGIC, 0, struct ubi_mkvol_req) 156: /* Remove an UBI volume */ 157: #define UBI_IOCRMVOL _IOW(UBI_IOC_MAGIC, 1, __s32) 158: /* Re-size an UBI volume */ 159: #define UBI_IOCRSVOL _IOW(UBI_IOC_MAGIC, 2, struct ubi_rsvol_req) 160: /* Re-name volumes */ 161: #define UBI_IOCRNVOL _IOW(UBI_IOC_MAGIC, 3, struct ubi_rnvol_req) 162: 163: /* ioctl commands of the UBI control character device */ 164: 165: #define UBI_CTRL_IOC_MAGIC 'o' 166: 167: /* Attach an MTD device */ 168: #define UBI_IOCATT _IOW(UBI_CTRL_IOC_MAGIC, 64, struct ubi_attach_req) 169: /* Detach an MTD device */ 170: #define UBI_IOCDET _IOW(UBI_CTRL_IOC_MAGIC, 65, __s32) 171: 172: /* ioctl commands of UBI volume character devices */ 173: 174: #define UBI_VOL_IOC_MAGIC 'O' 175: 176: /* Start UBI volume update */ 177: #define UBI_IOCVOLUP _IOW(UBI_VOL_IOC_MAGIC, 0, __s64) 178: /* LEB erasure command, used for debugging, disabled by default */ 179: #define UBI_IOCEBER _IOW(UBI_VOL_IOC_MAGIC, 1, __s32) 180: /* Atomic LEB change command */ 181: #define UBI_IOCEBCH _IOW(UBI_VOL_IOC_MAGIC, 2, __s32) 182: /* Map LEB command */ 183: #define UBI_IOCEBMAP _IOW(UBI_VOL_IOC_MAGIC, 3, struct ubi_map_req) 184: /* Unmap LEB command */ 185: #define UBI_IOCEBUNMAP _IOW(UBI_VOL_IOC_MAGIC, 4, __s32) 186: /* Check if LEB is mapped command */ 187: #define UBI_IOCEBISMAP _IOR(UBI_VOL_IOC_MAGIC, 5, __s32) 188: /* Set an UBI volume property */ 189: #define UBI_IOCSETVOLPROP _IOW(UBI_VOL_IOC_MAGIC, 6, \ 190: struct ubi_set_vol_prop_req) 191: 192: /* Maximum MTD device name length supported by UBI */ 193: #define MAX_UBI_MTD_NAME_LEN 127 194: 195: /* Maximum amount of UBI volumes that can be re-named at one go */ 196: #define UBI_MAX_RNVOL 32 197: 198: /* 199: * UBI data type hint constants. 200: * 201: * UBI_LONGTERM: long-term data 202: * UBI_SHORTTERM: short-term data 203: * UBI_UNKNOWN: data persistence is unknown 204: * 205: * These constants are used when data is written to UBI volumes in order to 206: * help the UBI wear-leveling unit to find more appropriate physical 207: * eraseblocks. 208: */ 209: enum { 210: UBI_LONGTERM = 1, 211: UBI_SHORTTERM = 2, 212: UBI_UNKNOWN = 3, 213: }; 214: 215: /* 216: * UBI volume type constants. 217: * 218: * @UBI_DYNAMIC_VOLUME: dynamic volume 219: * @UBI_STATIC_VOLUME: static volume 220: */ 221: enum { 222: UBI_DYNAMIC_VOLUME = 3, 223: UBI_STATIC_VOLUME = 4, 224: }; 225: 226: /* 227: * UBI set volume property ioctl constants. 228: * 229: * @UBI_VOL_PROP_DIRECT_WRITE: allow (any non-zero value) or disallow (value 0) 230: * user to directly write and erase individual 231: * eraseblocks on dynamic volumes 232: */ 233: enum { 234: UBI_VOL_PROP_DIRECT_WRITE = 1, 235: }; 236: 237: /** 238: * struct ubi_attach_req - attach MTD device request. 239: * @ubi_num: UBI device number to create 240: * @mtd_num: MTD device number to attach 241: * @vid_hdr_offset: VID header offset (use defaults if %0) 242: * @padding: reserved for future, not used, has to be zeroed 243: * 244: * This data structure is used to specify MTD device UBI has to attach and the 245: * parameters it has to use. The number which should be assigned to the new UBI 246: * device is passed in @ubi_num. UBI may automatically assign the number if 247: * @UBI_DEV_NUM_AUTO is passed. In this case, the device number is returned in 248: * @ubi_num. 249: * 250: * Most applications should pass %0 in @vid_hdr_offset to make UBI use default 251: * offset of the VID header within physical eraseblocks. The default offset is 252: * the next min. I/O unit after the EC header. For example, it will be offset 253: * 512 in case of a 512 bytes page NAND flash with no sub-page support. Or 254: * it will be 512 in case of a 2KiB page NAND flash with 4 512-byte sub-pages. 255: * 256: * But in rare cases, if this optimizes things, the VID header may be placed to 257: * a different offset. For example, the boot-loader might do things faster if 258: * the VID header sits at the end of the first 2KiB NAND page with 4 sub-pages. 259: * As the boot-loader would not normally need to read EC headers (unless it 260: * needs UBI in RW mode), it might be faster to calculate ECC. This is weird 261: * example, but it real-life example. So, in this example, @vid_hdr_offer would 262: * be 2KiB-64 bytes = 1984. Note, that this position is not even 512-bytes 263: * aligned, which is OK, as UBI is clever enough to realize this is 4th 264: * sub-page of the first page and add needed padding. 265: */ 266: struct ubi_attach_req { 267: __s32 ubi_num; 268: __s32 mtd_num; 269: __s32 vid_hdr_offset; 270: __s8 padding[12]; 271: }; 272: 273: /** 274: * struct ubi_mkvol_req - volume description data structure used in 275: * volume creation requests. 276: * @vol_id: volume number 277: * @alignment: volume alignment 278: * @bytes: volume size in bytes 279: * @vol_type: volume type (%UBI_DYNAMIC_VOLUME or %UBI_STATIC_VOLUME) 280: * @padding1: reserved for future, not used, has to be zeroed 281: * @name_len: volume name length 282: * @padding2: reserved for future, not used, has to be zeroed 283: * @name: volume name 284: * 285: * This structure is used by user-space programs when creating new volumes. The 286: * @used_bytes field is only necessary when creating static volumes. 287: * 288: * The @alignment field specifies the required alignment of the volume logical 289: * eraseblock. This means, that the size of logical eraseblocks will be aligned 290: * to this number, i.e., 291: * (UBI device logical eraseblock size) mod (@alignment) = 0. 292: * 293: * To put it differently, the logical eraseblock of this volume may be slightly 294: * shortened in order to make it properly aligned. The alignment has to be 295: * multiple of the flash minimal input/output unit, or %1 to utilize the entire 296: * available space of logical eraseblocks. 297: * 298: * The @alignment field may be useful, for example, when one wants to maintain 299: * a block device on top of an UBI volume. In this case, it is desirable to fit 300: * an integer number of blocks in logical eraseblocks of this UBI volume. With 301: * alignment it is possible to update this volume using plane UBI volume image 302: * BLOBs, without caring about how to properly align them. 303: */ 304: struct ubi_mkvol_req { 305: __s32 vol_id; 306: __s32 alignment; 307: __s64 bytes; 308: __s8 vol_type; 309: __s8 padding1; 310: __s16 name_len; 311: __s8 padding2[4]; 312: char name[UBI_MAX_VOLUME_NAME + 1]; 313: } __attribute__((packed)); 314: 315: /** 316: * struct ubi_rsvol_req - a data structure used in volume re-size requests. 317: * @vol_id: ID of the volume to re-size 318: * @bytes: new size of the volume in bytes 319: * 320: * Re-sizing is possible for both dynamic and static volumes. But while dynamic 321: * volumes may be re-sized arbitrarily, static volumes cannot be made to be 322: * smaller than the number of bytes they bear. To arbitrarily shrink a static 323: * volume, it must be wiped out first (by means of volume update operation with 324: * zero number of bytes). 325: */ 326: struct ubi_rsvol_req { 327: __s64 bytes; 328: __s32 vol_id; 329: } __attribute__((packed)); 330: 331: /** 332: * struct ubi_rnvol_req - volumes re-name request. 333: * @count: count of volumes to re-name 334: * @padding1: reserved for future, not used, has to be zeroed 335: * @vol_id: ID of the volume to re-name 336: * @name_len: name length 337: * @padding2: reserved for future, not used, has to be zeroed 338: * @name: new volume name 339: * 340: * UBI allows to re-name up to %32 volumes at one go. The count of volumes to 341: * re-name is specified in the @count field. The ID of the volumes to re-name 342: * and the new names are specified in the @vol_id and @name fields. 343: * 344: * The UBI volume re-name operation is atomic, which means that should power cut 345: * happen, the volumes will have either old name or new name. So the possible 346: * use-cases of this command is atomic upgrade. Indeed, to upgrade, say, volumes 347: * A and B one may create temporary volumes %A1 and %B1 with the new contents, 348: * then atomically re-name A1->A and B1->B, in which case old %A and %B will 349: * be removed. 350: * 351: * If it is not desirable to remove old A and B, the re-name request has to 352: * contain 4 entries: A1->A, A->A1, B1->B, B->B1, in which case old A1 and B1 353: * become A and B, and old A and B will become A1 and B1. 354: * 355: * It is also OK to request: A1->A, A1->X, B1->B, B->Y, in which case old A1 356: * and B1 become A and B, and old A and B become X and Y. 357: * 358: * In other words, in case of re-naming into an existing volume name, the 359: * existing volume is removed, unless it is re-named as well at the same 360: * re-name request. 361: */ 362: struct ubi_rnvol_req { 363: __s32 count; 364: __s8 padding1[12]; 365: struct { 366: __s32 vol_id; 367: __s16 name_len; 368: __s8 padding2[2]; 369: char name[UBI_MAX_VOLUME_NAME + 1]; 370: } ents[UBI_MAX_RNVOL]; 371: } __attribute__((packed)); 372: 373: /** 374: * struct ubi_leb_change_req - a data structure used in atomic LEB change 375: * requests. 376: * @lnum: logical eraseblock number to change 377: * @bytes: how many bytes will be written to the logical eraseblock 378: * @dtype: data type (%UBI_LONGTERM, %UBI_SHORTTERM, %UBI_UNKNOWN) 379: * @padding: reserved for future, not used, has to be zeroed 380: */ 381: struct ubi_leb_change_req { 382: __s32 lnum; 383: __s32 bytes; 384: __s8 dtype; 385: __s8 padding[7]; 386: } __attribute__((packed)); 387: 388: /** 389: * struct ubi_map_req - a data structure used in map LEB requests. 390: * @lnum: logical eraseblock number to unmap 391: * @dtype: data type (%UBI_LONGTERM, %UBI_SHORTTERM, %UBI_UNKNOWN) 392: * @padding: reserved for future, not used, has to be zeroed 393: */ 394: struct ubi_map_req { 395: __s32 lnum; 396: __s8 dtype; 397: __s8 padding[3]; 398: } __attribute__((packed)); 399: 400: 401: /** 402: * struct ubi_set_vol_prop_req - a data structure used to set an UBI volume 403: * property. 404: * @property: property to set (%UBI_VOL_PROP_DIRECT_WRITE) 405: * @padding: reserved for future, not used, has to be zeroed 406: * @value: value to set 407: */ 408: struct ubi_set_vol_prop_req { 409: __u8 property; 410: __u8 padding[7]; 411: __u64 value; 412: } __attribute__((packed)); 413: 414: #endif /* __UBI_USER_H__ */ 415: