1 /* Copyright (c) 2014-2015, The Linux Foundation. All rights reserved. 2 * 3 * This program is free software; you can redistribute it and/or modify 4 * it under the terms of the GNU General Public License version 2 and 5 * only version 2 as published by the Free Software Foundation. 6 * 7 * This program is distributed in the hope that it will be useful, 8 * but WITHOUT ANY WARRANTY; without even the implied warranty of 9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 * GNU General Public License for more details. 11 */ 12 13 #ifndef MSM_PFT_H_ 14 #define MSM_PFT_H_ 15 16 #include <linux/types.h> 17 18 /** 19 * enum pft_command_opcode - PFT driver command ID 20 * 21 * @PFT_CMD_OPCODE_SET_STATE - 22 * command ID to set PFT driver state 23 * @PFT_CMD_OPCODE_UPDATE_REG_APP_UID - 24 * command ID to update the list of registered application 25 * UID 26 * @PFT_CMD_OPCODE_PERFORM_IN_PLACE_FILE_ENC - 27 * command ID to perfrom in-place file encryption 28 */ 29 enum pft_command_opcode { 30 PFT_CMD_OPCODE_SET_STATE, 31 PFT_CMD_OPCODE_UPDATE_REG_APP_UID, 32 PFT_CMD_OPCODE_PERFORM_IN_PLACE_FILE_ENC, 33 /* */ 34 PFT_CMD_OPCODE_MAX_COMMAND_INDEX 35 }; 36 37 /** 38 * enum pft_state - PFT driver operational states 39 * 40 * @PFT_STATE_DEACTIVATED - driver is deativated. 41 * @PFT_STATE_DEACTIVATING - driver is in the process of being deativated. 42 * @PFT_STATE_KEY_REMOVED - driver is active but no encryption key is loaded. 43 * @PFT_STATE_REMOVING_KEY - driver is active, but the encryption key is being 44 * removed. 45 * @PFT_STATE_KEY_LOADED - driver is active, and the encryption key is loaded 46 * to encryption block, hence registered apps can perform file operations 47 * on encrypted files. 48 */ 49 enum pft_state { 50 PFT_STATE_DEACTIVATED, 51 PFT_STATE_DEACTIVATING, 52 PFT_STATE_KEY_REMOVED, 53 PFT_STATE_REMOVING_KEY, 54 PFT_STATE_KEY_LOADED, 55 /* Internal */ 56 PFT_STATE_MAX_INDEX 57 }; 58 59 /** 60 * enum pft_command_response_code - PFT response on the previous 61 * command 62 * 63 * @PFT_CMD_RESP_SUCCESS - The command was properly processed 64 * without an error. 65 * @PFT_CMD_RESP_GENERAL_ERROR - 66 * Indicates an error that cannot be better described by a 67 * more specific errors below. 68 * @PFT_CMD_RESP_INVALID_COMMAND - Invalid or unsupported 69 * command id. 70 * @PFT_CMD_RESP_INVALID_CMD_PARAMS - Invalid command 71 * parameters. 72 * @PFT_CMD_RESP_INVALID_STATE - Invalid state 73 * @PFT_CMD_RESP_ALREADY_IN_STATE - Used to indicates that 74 * the new state is equal to the existing one. 75 * @PFT_CMD_RESP_INPLACE_FILE_IS_OPEN - Used to indicates 76 * that the file that should be encrypted is already open 77 * and can be encrypted. 78 * @PFT_CMD_RESP_ENT_FILES_CLOSING_FAILURE 79 * Indicates about failure of the PFT to close Enterprise files 80 * @PFT_CMD_RESP_MAX_INDEX 81 */ 82 enum pft_command_response_code { 83 PFT_CMD_RESP_SUCCESS, 84 PFT_CMD_RESP_GENERAL_ERROR, 85 PFT_CMD_RESP_INVALID_COMMAND, 86 PFT_CMD_RESP_INVALID_CMD_PARAMS, 87 PFT_CMD_RESP_INVALID_STATE, 88 PFT_CMD_RESP_ALREADY_IN_STATE, 89 PFT_CMD_RESP_INPLACE_FILE_IS_OPEN, 90 PFT_CMD_RESP_ENT_FILES_CLOSING_FAILURE, 91 /* Internal */ 92 PFT_CMD_RESP_MAX_INDEX 93 }; 94 95 /** 96 * struct pft_command_response - response structure 97 * 98 * @command_id - see enum pft_command_response_code 99 * @error_codee - see enum pft_command_response_code 100 */ 101 struct pft_command_response { 102 __u32 command_id; 103 __u32 error_code; 104 }; 105 106 /** 107 * struct pft_command - pft command 108 * 109 * @opcode - see enum pft_command_opcode. 110 * @set_state.state - see enum pft_state. 111 * @update_app_list.count - number of items in the 112 * registered applications list. 113 * @update_app_list.table - registered applications array 114 * @preform_in_place_file_enc.file_descriptor - file descriptor 115 * of the opened file to be in-placed encrypted. 116 */ 117 struct pft_command { 118 __u32 opcode; 119 union { 120 struct { 121 /* @see pft_state */ 122 __u32 state; 123 } set_state; 124 struct { 125 __u32 items_count; /* number of items */ 126 uid_t table[0]; /* array of UIDs */ 127 } update_app_list; 128 struct { 129 __u32 file_descriptor; 130 } preform_in_place_file_enc; 131 }; 132 }; 133 134 #endif /* MSM_PFT_H_ */ 135