ioctl.h 2.3 KB

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