1 #ifndef UAPI_UFS_IOCTL_H_ 2 #define UAPI_UFS_IOCTL_H_ 3 4 #include <linux/types.h> 5 6 /* 7 * IOCTL opcode for ufs queries has the following opcode after 8 * SCSI_IOCTL_GET_PCI 9 */ 10 #define UFS_IOCTL_QUERY 0x5388 11 12 /** 13 * struct ufs_ioctl_query_data - used to transfer data to and from user via ioctl 14 * @opcode: type of data to query (descriptor/attribute/flag) 15 * @idn: id of the data structure 16 * @buf_size: number of allocated bytes/data size on return 17 * @buffer: data location 18 * 19 * Received: buffer and buf_size (available space for transfered data) 20 * Submitted: opcode, idn, length, buf_size 21 */ 22 struct ufs_ioctl_query_data { 23 /* 24 * User should select one of the opcode defined in "enum query_opcode". 25 * Please check include/uapi/scsi/ufs/ufs.h for the definition of it. 26 * Note that only UPIU_QUERY_OPCODE_READ_DESC, 27 * UPIU_QUERY_OPCODE_READ_ATTR & UPIU_QUERY_OPCODE_READ_FLAG are 28 * supported as of now. All other query_opcode would be considered 29 * invalid. 30 * As of now only read query operations are supported. 31 */ 32 __u32 opcode; 33 /* 34 * User should select one of the idn from "enum flag_idn" or "enum 35 * attr_idn" or "enum desc_idn" based on whether opcode above is 36 * attribute, flag or descriptor. 37 * Please check include/uapi/scsi/ufs/ufs.h for the definition of it. 38 */ 39 __u8 idn; 40 /* 41 * User should specify the size of the buffer (buffer[0] below) where 42 * it wants to read the query data (attribute/flag/descriptor). 43 * As we might end up reading less data then what is specified in 44 * buf_size. So we are updating buf_size to what exactly we have read. 45 */ 46 __u16 buf_size; 47 /* 48 * placeholder for the start of the data buffer where kernel will copy 49 * the query data (attribute/flag/descriptor) read from the UFS device 50 * Note: 51 * For Read/Write Attribute you will have to allocate 4 bytes 52 * For Read/Write Flag you will have to allocate 1 byte 53 */ 54 __u8 buffer[0]; 55 }; 56 57 #endif /* UAPI_UFS_IOCTL_H_ */ 58