/* Qualcomm SMC Module API */ #ifndef __SMCMOD_H_ #define __SMCMOD_H_ #include #include #define SMCMOD_DEV "smcmod" #define SMCMOD_REG_REQ_MAX_ARGS 2 /** * struct smcmod_reg_req - for SMC register ioctl request * * @service_id - requested service. * @command_id - requested command. * @num_args - number of arguments. * @args - argument(s) to be passed to the secure world. * @return_val - return value from secure world operation. */ struct smcmod_reg_req { uint32_t service_id; /* in */ uint32_t command_id; /* in */ uint8_t num_args; /* in */ uint32_t args[SMCMOD_REG_REQ_MAX_ARGS]; /* in */ uint32_t return_val; /* out */ }; /** * struct smcmod_buf_req - for SMC buffer ioctl request * * @service_id - requested service. * @command_id - requested command. * @ion_cmd_fd - fd obtained from ION_IOC_MAP or ION_IOC_SHARE. * @cmd_len - length of command data buffer in bytes. * @ion_resp_fd - fd obtained from ION_IOC_MAP or ION_IOC_SHARE. * @resp_len - length of response data buffer in bytes. * @return_val - return value from secure world operation. */ struct smcmod_buf_req { uint32_t service_id;/* in */ uint32_t command_id; /* in */ int32_t ion_cmd_fd; /* in */ uint32_t cmd_len; /* in */ int32_t ion_resp_fd; /* in */ uint32_t resp_len; /* in */ uint32_t return_val; /* out */ }; /** * struct smcmod_cipher_req - for SMC cipher command ioctl * * @algorithm - specifies the cipher algorithm. * @operation - specifies encryption or decryption. * @mode - specifies cipher mode. * @ion_key_fd - fd obtained form ION_IOC_MAP or ION_IOC_SHARE. * @key_size - key size in bytes. * @ion_plain_text_fd - fd obtained form ION_IOC_MAP or ION_IOC_SHARE. * @plain_text_size - size of plain text in bytes. * @ion_cipher_text_fd - fd obtained form ION_IOC_MAP or ION_IOC_SHARE. * @cipher_text_size - cipher text size in bytes. * @ion_init_vector_fd - fd obtained form ION_IOC_MAP or ION_IOC_SHARE. * @init_vector_size - size of initialization vector in bytes. * @key_is_null - indicates that the key is null. * @return_val - return value from secure world opreation. */ struct smcmod_cipher_req { uint32_t algorithm; /* in */ uint32_t operation; /* in */ uint32_t mode; /* in */ int32_t ion_key_fd; /* in */ uint32_t key_size; /* in */ int32_t ion_plain_text_fd; /* in (encrypt)/out (decrypt) */ uint32_t plain_text_size; /* in */ int32_t ion_cipher_text_fd; /* out (encrypt)/in (decrypt) */ uint32_t cipher_text_size; /* in */ int32_t ion_init_vector_fd; /* in */ uint32_t init_vector_size; /* in */ uint32_t key_is_null; /* in */ uint32_t return_val; /* out */ }; /** * struct smcmod_msg_digest_req - for message digest command ioctl * * @algorithm - specifies the cipher algorithm. * @ion_key_fd - fd obtained form ION_IOC_MAP or ION_IOC_SHARE. * @key_size - hash key size in bytes. * @ion_input_fd - fd obtained form ION_IOC_MAP or ION_IOC_SHARE. * @input_size - input data size in bytes. * @ion_output_fd - fd obtained form ION_IOC_MAP or ION_IOC_SHARE. * @output_size - size of output buffer in bytes. * @fixed_block - indicates whether this is a fixed block digest. * @key_is_null - indicates that the key is null. * @return_val - return value from secure world opreation. */ struct smcmod_msg_digest_req { uint32_t algorithm; /* in */ int32_t ion_key_fd; /* in */ uint32_t key_size; /* in */ int32_t ion_input_fd; /* in */ uint32_t input_size; /* in */ int32_t ion_output_fd; /* in/out */ uint32_t output_size; /* in */ uint32_t fixed_block; /* in */ uint32_t key_is_null; /* in */ uint32_t return_val; /* out */ } __packed; #define SMCMOD_IOC_MAGIC 0x97 /* Number chosen to avoid any conflicts */ #define SMCMOD_IOCTL_SEND_REG_CMD \ _IOWR(SMCMOD_IOC_MAGIC, 32, struct smcmod_reg_req) #define SMCMOD_IOCTL_SEND_BUF_CMD \ _IOWR(SMCMOD_IOC_MAGIC, 33, struct smcmod_buf_req) #define SMCMOD_IOCTL_SEND_CIPHER_CMD \ _IOWR(SMCMOD_IOC_MAGIC, 34, struct smcmod_cipher_req) #define SMCMOD_IOCTL_SEND_MSG_DIGEST_CMD \ _IOWR(SMCMOD_IOC_MAGIC, 35, struct smcmod_msg_digest_req) #define SMCMOD_IOCTL_GET_VERSION _IOWR(SMCMOD_IOC_MAGIC, 36, uint32_t) #endif /* __SMCMOD_H_ */