root/include/uapi/linux/mmc/ioctl.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
   2 #ifndef LINUX_MMC_IOCTL_H
   3 #define LINUX_MMC_IOCTL_H
   4 
   5 #include <linux/types.h>
   6 #include <linux/major.h>
   7 
   8 struct mmc_ioc_cmd {
   9         /*
  10          * Direction of data: nonzero = write, zero = read.
  11          * Bit 31 selects 'Reliable Write' for RPMB.
  12          */
  13         int write_flag;
  14 
  15         /* Application-specific command.  true = precede with CMD55 */
  16         int is_acmd;
  17 
  18         __u32 opcode;
  19         __u32 arg;
  20         __u32 response[4];  /* CMD response */
  21         unsigned int flags;
  22         unsigned int blksz;
  23         unsigned int blocks;
  24 
  25         /*
  26          * Sleep at least postsleep_min_us useconds, and at most
  27          * postsleep_max_us useconds *after* issuing command.  Needed for
  28          * some read commands for which cards have no other way of indicating
  29          * they're ready for the next command (i.e. there is no equivalent of
  30          * a "busy" indicator for read operations).
  31          */
  32         unsigned int postsleep_min_us;
  33         unsigned int postsleep_max_us;
  34 
  35         /*
  36          * Override driver-computed timeouts.  Note the difference in units!
  37          */
  38         unsigned int data_timeout_ns;
  39         unsigned int cmd_timeout_ms;
  40 
  41         /*
  42          * For 64-bit machines, the next member, ``__u64 data_ptr``, wants to
  43          * be 8-byte aligned.  Make sure this struct is the same size when
  44          * built for 32-bit.
  45          */
  46         __u32 __pad;
  47 
  48         /* DAT buffer */
  49         __u64 data_ptr;
  50 };
  51 #define mmc_ioc_cmd_set_data(ic, ptr) ic.data_ptr = (__u64)(unsigned long) ptr
  52 
  53 /**
  54  * struct mmc_ioc_multi_cmd - multi command information
  55  * @num_of_cmds: Number of commands to send. Must be equal to or less than
  56  *      MMC_IOC_MAX_CMDS.
  57  * @cmds: Array of commands with length equal to 'num_of_cmds'
  58  */
  59 struct mmc_ioc_multi_cmd {
  60         __u64 num_of_cmds;
  61         struct mmc_ioc_cmd cmds[0];
  62 };
  63 
  64 #define MMC_IOC_CMD _IOWR(MMC_BLOCK_MAJOR, 0, struct mmc_ioc_cmd)
  65 /*
  66  * MMC_IOC_MULTI_CMD: Used to send an array of MMC commands described by
  67  *      the structure mmc_ioc_multi_cmd. The MMC driver will issue all
  68  *      commands in array in sequence to card.
  69  */
  70 #define MMC_IOC_MULTI_CMD _IOWR(MMC_BLOCK_MAJOR, 1, struct mmc_ioc_multi_cmd)
  71 /*
  72  * Since this ioctl is only meant to enhance (and not replace) normal access
  73  * to the mmc bus device, an upper data transfer limit of MMC_IOC_MAX_BYTES
  74  * is enforced per ioctl call.  For larger data transfers, use the normal
  75  * block device operations.
  76  */
  77 #define MMC_IOC_MAX_BYTES  (512L * 1024)
  78 #define MMC_IOC_MAX_CMDS    255
  79 #endif /* LINUX_MMC_IOCTL_H */

/* [<][>][^][v][top][bottom][index][help] */