Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  * Copyright © International Business Machines Corp., 2006
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5)  * This program is free software; you can redistribute it and/or modify
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6)  * it under the terms of the GNU General Public License as published by
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7)  * the Free Software Foundation; either version 2 of the License, or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8)  * (at your option) any later version.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10)  * This program is distributed in the hope that it will be useful,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11)  * but WITHOUT ANY WARRANTY; without even the implied warranty of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12)  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13)  * the GNU General Public License for more details.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15)  * You should have received a copy of the GNU General Public License
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16)  * along with this program; if not, write to the Free Software
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17)  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19)  * Author: Artem Bityutskiy (Битюцкий Артём)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) #ifndef __UBI_USER_H__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) #define __UBI_USER_H__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) #include <linux/types.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28)  * UBI device creation (the same as MTD device attachment)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29)  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31)  * MTD devices may be attached using %UBI_IOCATT ioctl command of the UBI
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32)  * control device. The caller has to properly fill and pass
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33)  * &struct ubi_attach_req object - UBI will attach the MTD device specified in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34)  * the request and return the newly created UBI device number as the ioctl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35)  * return value.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37)  * UBI device deletion (the same as MTD device detachment)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38)  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40)  * An UBI device maybe deleted with %UBI_IOCDET ioctl command of the UBI
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41)  * control device.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43)  * UBI volume creation
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44)  * ~~~~~~~~~~~~~~~~~~~
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46)  * UBI volumes are created via the %UBI_IOCMKVOL ioctl command of UBI character
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47)  * device. A &struct ubi_mkvol_req object has to be properly filled and a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48)  * pointer to it has to be passed to the ioctl.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50)  * UBI volume deletion
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51)  * ~~~~~~~~~~~~~~~~~~~
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53)  * To delete a volume, the %UBI_IOCRMVOL ioctl command of the UBI character
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54)  * device should be used. A pointer to the 32-bit volume ID hast to be passed
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55)  * to the ioctl.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57)  * UBI volume re-size
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58)  * ~~~~~~~~~~~~~~~~~~
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60)  * To re-size a volume, the %UBI_IOCRSVOL ioctl command of the UBI character
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61)  * device should be used. A &struct ubi_rsvol_req object has to be properly
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62)  * filled and a pointer to it has to be passed to the ioctl.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64)  * UBI volumes re-name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65)  * ~~~~~~~~~~~~~~~~~~~
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67)  * To re-name several volumes atomically at one go, the %UBI_IOCRNVOL command
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68)  * of the UBI character device should be used. A &struct ubi_rnvol_req object
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69)  * has to be properly filled and a pointer to it has to be passed to the ioctl.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71)  * UBI volume update
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72)  * ~~~~~~~~~~~~~~~~~
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74)  * Volume update should be done via the %UBI_IOCVOLUP ioctl command of the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75)  * corresponding UBI volume character device. A pointer to a 64-bit update
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76)  * size should be passed to the ioctl. After this, UBI expects user to write
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77)  * this number of bytes to the volume character device. The update is finished
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78)  * when the claimed number of bytes is passed. So, the volume update sequence
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79)  * is something like:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81)  * fd = open("/dev/my_volume");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82)  * ioctl(fd, UBI_IOCVOLUP, &image_size);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83)  * write(fd, buf, image_size);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84)  * close(fd);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86)  * Logical eraseblock erase
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87)  * ~~~~~~~~~~~~~~~~~~~~~~~~
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89)  * To erase a logical eraseblock, the %UBI_IOCEBER ioctl command of the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90)  * corresponding UBI volume character device should be used. This command
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91)  * unmaps the requested logical eraseblock, makes sure the corresponding
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92)  * physical eraseblock is successfully erased, and returns.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94)  * Atomic logical eraseblock change
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95)  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97)  * Atomic logical eraseblock change operation is called using the %UBI_IOCEBCH
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98)  * ioctl command of the corresponding UBI volume character device. A pointer to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99)  * a &struct ubi_leb_change_req object has to be passed to the ioctl. Then the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100)  * user is expected to write the requested amount of bytes (similarly to what
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101)  * should be done in case of the "volume update" ioctl).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103)  * Logical eraseblock map
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104)  * ~~~~~~~~~~~~~~~~~~~~~
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106)  * To map a logical eraseblock to a physical eraseblock, the %UBI_IOCEBMAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107)  * ioctl command should be used. A pointer to a &struct ubi_map_req object is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108)  * expected to be passed. The ioctl maps the requested logical eraseblock to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109)  * a physical eraseblock and returns.  Only non-mapped logical eraseblocks can
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110)  * be mapped. If the logical eraseblock specified in the request is already
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111)  * mapped to a physical eraseblock, the ioctl fails and returns error.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113)  * Logical eraseblock unmap
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114)  * ~~~~~~~~~~~~~~~~~~~~~~~~
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116)  * To unmap a logical eraseblock to a physical eraseblock, the %UBI_IOCEBUNMAP
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117)  * ioctl command should be used. The ioctl unmaps the logical eraseblocks,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118)  * schedules corresponding physical eraseblock for erasure, and returns. Unlike
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119)  * the "LEB erase" command, it does not wait for the physical eraseblock being
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120)  * erased. Note, the side effect of this is that if an unclean reboot happens
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121)  * after the unmap ioctl returns, you may find the LEB mapped again to the same
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122)  * physical eraseblock after the UBI is run again.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124)  * Check if logical eraseblock is mapped
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125)  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127)  * To check if a logical eraseblock is mapped to a physical eraseblock, the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128)  * %UBI_IOCEBISMAP ioctl command should be used. It returns %0 if the LEB is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129)  * not mapped, and %1 if it is mapped.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131)  * Set an UBI volume property
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132)  * ~~~~~~~~~~~~~~~~~~~~~~~~~
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134)  * To set an UBI volume property the %UBI_IOCSETPROP ioctl command should be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135)  * used. A pointer to a &struct ubi_set_vol_prop_req object is expected to be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136)  * passed. The object describes which property should be set, and to which value
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137)  * it should be set.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139)  * Block devices on UBI volumes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140)  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142)  * To create a R/O block device on top of an UBI volume the %UBI_IOCVOLCRBLK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143)  * should be used. A pointer to a &struct ubi_blkcreate_req object is expected
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144)  * to be passed, which is not used and reserved for future usage.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146)  * Conversely, to remove a block device the %UBI_IOCVOLRMBLK should be used,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147)  * which takes no arguments.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151)  * When a new UBI volume or UBI device is created, users may either specify the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152)  * volume/device number they want to create or to let UBI automatically assign
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153)  * the number using these constants.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) #define UBI_VOL_NUM_AUTO (-1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) #define UBI_DEV_NUM_AUTO (-1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) /* Maximum volume name length */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) #define UBI_MAX_VOLUME_NAME 127
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) /* ioctl commands of UBI character devices */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) #define UBI_IOC_MAGIC 'o'
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) /* Create an UBI volume */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) #define UBI_IOCMKVOL _IOW(UBI_IOC_MAGIC, 0, struct ubi_mkvol_req)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) /* Remove an UBI volume */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) #define UBI_IOCRMVOL _IOW(UBI_IOC_MAGIC, 1, __s32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) /* Re-size an UBI volume */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) #define UBI_IOCRSVOL _IOW(UBI_IOC_MAGIC, 2, struct ubi_rsvol_req)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) /* Re-name volumes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) #define UBI_IOCRNVOL _IOW(UBI_IOC_MAGIC, 3, struct ubi_rnvol_req)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) /* Read the specified PEB and scrub it if there are bitflips */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) #define UBI_IOCRPEB _IOW(UBI_IOC_MAGIC, 4, __s32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) /* Force scrubbing on the specified PEB */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) #define UBI_IOCSPEB _IOW(UBI_IOC_MAGIC, 5, __s32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) /* ioctl commands of the UBI control character device */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) #define UBI_CTRL_IOC_MAGIC 'o'
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) /* Attach an MTD device */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) #define UBI_IOCATT _IOW(UBI_CTRL_IOC_MAGIC, 64, struct ubi_attach_req)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) /* Detach an MTD device */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) #define UBI_IOCDET _IOW(UBI_CTRL_IOC_MAGIC, 65, __s32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) /* ioctl commands of UBI volume character devices */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) #define UBI_VOL_IOC_MAGIC 'O'
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) /* Start UBI volume update
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193)  * Note: This actually takes a pointer (__s64*), but we can't change
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194)  *       that without breaking the ABI on 32bit systems
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) #define UBI_IOCVOLUP _IOW(UBI_VOL_IOC_MAGIC, 0, __s64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) /* LEB erasure command, used for debugging, disabled by default */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) #define UBI_IOCEBER _IOW(UBI_VOL_IOC_MAGIC, 1, __s32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) /* Atomic LEB change command */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) #define UBI_IOCEBCH _IOW(UBI_VOL_IOC_MAGIC, 2, __s32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) /* Map LEB command */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) #define UBI_IOCEBMAP _IOW(UBI_VOL_IOC_MAGIC, 3, struct ubi_map_req)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) /* Unmap LEB command */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) #define UBI_IOCEBUNMAP _IOW(UBI_VOL_IOC_MAGIC, 4, __s32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) /* Check if LEB is mapped command */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) #define UBI_IOCEBISMAP _IOR(UBI_VOL_IOC_MAGIC, 5, __s32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) /* Set an UBI volume property */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) #define UBI_IOCSETVOLPROP _IOW(UBI_VOL_IOC_MAGIC, 6, \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) 			       struct ubi_set_vol_prop_req)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) /* Create a R/O block device on top of an UBI volume */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) #define UBI_IOCVOLCRBLK _IOW(UBI_VOL_IOC_MAGIC, 7, struct ubi_blkcreate_req)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) /* Remove the R/O block device */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) #define UBI_IOCVOLRMBLK _IO(UBI_VOL_IOC_MAGIC, 8)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) /* Maximum MTD device name length supported by UBI */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) #define MAX_UBI_MTD_NAME_LEN 127
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) /* Maximum amount of UBI volumes that can be re-named at one go */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) #define UBI_MAX_RNVOL 32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222)  * UBI volume type constants.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224)  * @UBI_DYNAMIC_VOLUME: dynamic volume
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225)  * @UBI_STATIC_VOLUME:  static volume
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) 	UBI_DYNAMIC_VOLUME = 3,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) 	UBI_STATIC_VOLUME  = 4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233)  * UBI set volume property ioctl constants.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235)  * @UBI_VOL_PROP_DIRECT_WRITE: allow (any non-zero value) or disallow (value 0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236)  *                             user to directly write and erase individual
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237)  *                             eraseblocks on dynamic volumes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) 	UBI_VOL_PROP_DIRECT_WRITE = 1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244)  * struct ubi_attach_req - attach MTD device request.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245)  * @ubi_num: UBI device number to create
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246)  * @mtd_num: MTD device number to attach
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247)  * @vid_hdr_offset: VID header offset (use defaults if %0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248)  * @max_beb_per1024: maximum expected number of bad PEB per 1024 PEBs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249)  * @padding: reserved for future, not used, has to be zeroed
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251)  * This data structure is used to specify MTD device UBI has to attach and the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252)  * parameters it has to use. The number which should be assigned to the new UBI
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253)  * device is passed in @ubi_num. UBI may automatically assign the number if
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254)  * @UBI_DEV_NUM_AUTO is passed. In this case, the device number is returned in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255)  * @ubi_num.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257)  * Most applications should pass %0 in @vid_hdr_offset to make UBI use default
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258)  * offset of the VID header within physical eraseblocks. The default offset is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259)  * the next min. I/O unit after the EC header. For example, it will be offset
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260)  * 512 in case of a 512 bytes page NAND flash with no sub-page support. Or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261)  * it will be 512 in case of a 2KiB page NAND flash with 4 512-byte sub-pages.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263)  * But in rare cases, if this optimizes things, the VID header may be placed to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264)  * a different offset. For example, the boot-loader might do things faster if
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265)  * the VID header sits at the end of the first 2KiB NAND page with 4 sub-pages.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266)  * As the boot-loader would not normally need to read EC headers (unless it
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267)  * needs UBI in RW mode), it might be faster to calculate ECC. This is weird
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268)  * example, but it real-life example. So, in this example, @vid_hdr_offer would
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269)  * be 2KiB-64 bytes = 1984. Note, that this position is not even 512-bytes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270)  * aligned, which is OK, as UBI is clever enough to realize this is 4th
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271)  * sub-page of the first page and add needed padding.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273)  * The @max_beb_per1024 is the maximum amount of bad PEBs UBI expects on the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274)  * UBI device per 1024 eraseblocks.  This value is often given in an other form
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275)  * in the NAND datasheet (min NVB i.e. minimal number of valid blocks). The
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276)  * maximum expected bad eraseblocks per 1024 is then:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277)  *    1024 * (1 - MinNVB / MaxNVB)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278)  * Which gives 20 for most NAND devices.  This limit is used in order to derive
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279)  * amount of eraseblock UBI reserves for handling new bad blocks. If the device
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280)  * has more bad eraseblocks than this limit, UBI does not reserve any physical
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281)  * eraseblocks for new bad eraseblocks, but attempts to use available
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282)  * eraseblocks (if any). The accepted range is 0-768. If 0 is given, the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283)  * default kernel value of %CONFIG_MTD_UBI_BEB_LIMIT will be used.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) struct ubi_attach_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) 	__s32 ubi_num;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) 	__s32 mtd_num;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) 	__s32 vid_hdr_offset;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) 	__s16 max_beb_per1024;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) 	__s8 padding[10];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294)  * UBI volume flags.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296)  * @UBI_VOL_SKIP_CRC_CHECK_FLG: skip the CRC check done on a static volume at
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297)  *				open time. Only valid for static volumes and
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298)  *				should only be used if the volume user has a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299)  *				way to verify data integrity
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) enum {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) 	UBI_VOL_SKIP_CRC_CHECK_FLG = 0x1,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) #define UBI_VOL_VALID_FLGS	(UBI_VOL_SKIP_CRC_CHECK_FLG)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308)  * struct ubi_mkvol_req - volume description data structure used in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309)  *                        volume creation requests.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310)  * @vol_id: volume number
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311)  * @alignment: volume alignment
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312)  * @bytes: volume size in bytes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313)  * @vol_type: volume type (%UBI_DYNAMIC_VOLUME or %UBI_STATIC_VOLUME)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314)  * @flags: volume flags (%UBI_VOL_SKIP_CRC_CHECK_FLG)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315)  * @name_len: volume name length
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316)  * @padding2: reserved for future, not used, has to be zeroed
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317)  * @name: volume name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319)  * This structure is used by user-space programs when creating new volumes. The
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320)  * @used_bytes field is only necessary when creating static volumes.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322)  * The @alignment field specifies the required alignment of the volume logical
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323)  * eraseblock. This means, that the size of logical eraseblocks will be aligned
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324)  * to this number, i.e.,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325)  *	(UBI device logical eraseblock size) mod (@alignment) = 0.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327)  * To put it differently, the logical eraseblock of this volume may be slightly
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328)  * shortened in order to make it properly aligned. The alignment has to be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329)  * multiple of the flash minimal input/output unit, or %1 to utilize the entire
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330)  * available space of logical eraseblocks.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332)  * The @alignment field may be useful, for example, when one wants to maintain
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333)  * a block device on top of an UBI volume. In this case, it is desirable to fit
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334)  * an integer number of blocks in logical eraseblocks of this UBI volume. With
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335)  * alignment it is possible to update this volume using plane UBI volume image
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336)  * BLOBs, without caring about how to properly align them.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) struct ubi_mkvol_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) 	__s32 vol_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) 	__s32 alignment;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) 	__s64 bytes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) 	__s8 vol_type;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) 	__u8 flags;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) 	__s16 name_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) 	__s8 padding2[4];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) 	char name[UBI_MAX_VOLUME_NAME + 1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350)  * struct ubi_rsvol_req - a data structure used in volume re-size requests.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351)  * @vol_id: ID of the volume to re-size
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352)  * @bytes: new size of the volume in bytes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354)  * Re-sizing is possible for both dynamic and static volumes. But while dynamic
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355)  * volumes may be re-sized arbitrarily, static volumes cannot be made to be
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356)  * smaller than the number of bytes they bear. To arbitrarily shrink a static
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357)  * volume, it must be wiped out first (by means of volume update operation with
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358)  * zero number of bytes).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) struct ubi_rsvol_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) 	__s64 bytes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) 	__s32 vol_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366)  * struct ubi_rnvol_req - volumes re-name request.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367)  * @count: count of volumes to re-name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368)  * @padding1:  reserved for future, not used, has to be zeroed
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369)  * @vol_id: ID of the volume to re-name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370)  * @name_len: name length
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371)  * @padding2:  reserved for future, not used, has to be zeroed
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372)  * @name: new volume name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374)  * UBI allows to re-name up to %32 volumes at one go. The count of volumes to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375)  * re-name is specified in the @count field. The ID of the volumes to re-name
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376)  * and the new names are specified in the @vol_id and @name fields.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378)  * The UBI volume re-name operation is atomic, which means that should power cut
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379)  * happen, the volumes will have either old name or new name. So the possible
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380)  * use-cases of this command is atomic upgrade. Indeed, to upgrade, say, volumes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381)  * A and B one may create temporary volumes %A1 and %B1 with the new contents,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382)  * then atomically re-name A1->A and B1->B, in which case old %A and %B will
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383)  * be removed.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385)  * If it is not desirable to remove old A and B, the re-name request has to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386)  * contain 4 entries: A1->A, A->A1, B1->B, B->B1, in which case old A1 and B1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387)  * become A and B, and old A and B will become A1 and B1.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389)  * It is also OK to request: A1->A, A1->X, B1->B, B->Y, in which case old A1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390)  * and B1 become A and B, and old A and B become X and Y.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392)  * In other words, in case of re-naming into an existing volume name, the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393)  * existing volume is removed, unless it is re-named as well at the same
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394)  * re-name request.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) struct ubi_rnvol_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) 	__s32 count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) 	__s8 padding1[12];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) 	struct {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) 		__s32 vol_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) 		__s16 name_len;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) 		__s8  padding2[2];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) 		char    name[UBI_MAX_VOLUME_NAME + 1];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) 	} ents[UBI_MAX_RNVOL];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408)  * struct ubi_leb_change_req - a data structure used in atomic LEB change
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409)  *                             requests.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410)  * @lnum: logical eraseblock number to change
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411)  * @bytes: how many bytes will be written to the logical eraseblock
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412)  * @dtype: pass "3" for better compatibility with old kernels
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413)  * @padding: reserved for future, not used, has to be zeroed
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415)  * The @dtype field used to inform UBI about what kind of data will be written
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416)  * to the LEB: long term (value 1), short term (value 2), unknown (value 3).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417)  * UBI tried to pick a PEB with lower erase counter for short term data and a
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418)  * PEB with higher erase counter for long term data. But this was not really
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419)  * used because users usually do not know this and could easily mislead UBI. We
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420)  * removed this feature in May 2012. UBI currently just ignores the @dtype
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421)  * field. But for better compatibility with older kernels it is recommended to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422)  * set @dtype to 3 (unknown).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) struct ubi_leb_change_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) 	__s32 lnum;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) 	__s32 bytes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) 	__s8  dtype; /* obsolete, do not use! */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) 	__s8  padding[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432)  * struct ubi_map_req - a data structure used in map LEB requests.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433)  * @dtype: pass "3" for better compatibility with old kernels
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434)  * @lnum: logical eraseblock number to unmap
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435)  * @padding: reserved for future, not used, has to be zeroed
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) struct ubi_map_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) 	__s32 lnum;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) 	__s8  dtype; /* obsolete, do not use! */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) 	__s8  padding[3];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) } __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445)  * struct ubi_set_vol_prop_req - a data structure used to set an UBI volume
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446)  *                               property.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447)  * @property: property to set (%UBI_VOL_PROP_DIRECT_WRITE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448)  * @padding: reserved for future, not used, has to be zeroed
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449)  * @value: value to set
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) struct ubi_set_vol_prop_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) 	__u8  property;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) 	__u8  padding[7];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) 	__u64 value;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) }  __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) /**
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458)  * struct ubi_blkcreate_req - a data structure used in block creation requests.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459)  * @padding: reserved for future, not used, has to be zeroed
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) struct ubi_blkcreate_req {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) 	__s8  padding[128];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) }  __packed;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) #endif /* __UBI_USER_H__ */