/* Copyright (c) 2014-2015, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and * only version 2 as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #ifndef MSM_PFT_H_ #define MSM_PFT_H_ #include <linux/types.h> /** * enum pft_command_opcode - PFT driver command ID * * @PFT_CMD_OPCODE_SET_STATE - * command ID to set PFT driver state * @PFT_CMD_OPCODE_UPDATE_REG_APP_UID - * command ID to update the list of registered application * UID * @PFT_CMD_OPCODE_PERFORM_IN_PLACE_FILE_ENC - * command ID to perfrom in-place file encryption */ enum pft_command_opcode { PFT_CMD_OPCODE_SET_STATE, PFT_CMD_OPCODE_UPDATE_REG_APP_UID, PFT_CMD_OPCODE_PERFORM_IN_PLACE_FILE_ENC, /* */ PFT_CMD_OPCODE_MAX_COMMAND_INDEX }; /** * enum pft_state - PFT driver operational states * * @PFT_STATE_DEACTIVATED - driver is deativated. * @PFT_STATE_DEACTIVATING - driver is in the process of being deativated. * @PFT_STATE_KEY_REMOVED - driver is active but no encryption key is loaded. * @PFT_STATE_REMOVING_KEY - driver is active, but the encryption key is being * removed. * @PFT_STATE_KEY_LOADED - driver is active, and the encryption key is loaded * to encryption block, hence registered apps can perform file operations * on encrypted files. */ enum pft_state { PFT_STATE_DEACTIVATED, PFT_STATE_DEACTIVATING, PFT_STATE_KEY_REMOVED, PFT_STATE_REMOVING_KEY, PFT_STATE_KEY_LOADED, /* Internal */ PFT_STATE_MAX_INDEX }; /** * enum pft_command_response_code - PFT response on the previous * command * * @PFT_CMD_RESP_SUCCESS - The command was properly processed * without an error. * @PFT_CMD_RESP_GENERAL_ERROR - * Indicates an error that cannot be better described by a * more specific errors below. * @PFT_CMD_RESP_INVALID_COMMAND - Invalid or unsupported * command id. * @PFT_CMD_RESP_INVALID_CMD_PARAMS - Invalid command * parameters. * @PFT_CMD_RESP_INVALID_STATE - Invalid state * @PFT_CMD_RESP_ALREADY_IN_STATE - Used to indicates that * the new state is equal to the existing one. * @PFT_CMD_RESP_INPLACE_FILE_IS_OPEN - Used to indicates * that the file that should be encrypted is already open * and can be encrypted. * @PFT_CMD_RESP_ENT_FILES_CLOSING_FAILURE * Indicates about failure of the PFT to close Enterprise files * @PFT_CMD_RESP_MAX_INDEX */ enum pft_command_response_code { PFT_CMD_RESP_SUCCESS, PFT_CMD_RESP_GENERAL_ERROR, PFT_CMD_RESP_INVALID_COMMAND, PFT_CMD_RESP_INVALID_CMD_PARAMS, PFT_CMD_RESP_INVALID_STATE, PFT_CMD_RESP_ALREADY_IN_STATE, PFT_CMD_RESP_INPLACE_FILE_IS_OPEN, PFT_CMD_RESP_ENT_FILES_CLOSING_FAILURE, /* Internal */ PFT_CMD_RESP_MAX_INDEX }; /** * struct pft_command_response - response structure * * @command_id - see enum pft_command_response_code * @error_codee - see enum pft_command_response_code */ struct pft_command_response { __u32 command_id; __u32 error_code; }; /** * struct pft_command - pft command * * @opcode - see enum pft_command_opcode. * @set_state.state - see enum pft_state. * @update_app_list.count - number of items in the * registered applications list. * @update_app_list.table - registered applications array * @preform_in_place_file_enc.file_descriptor - file descriptor * of the opened file to be in-placed encrypted. */ struct pft_command { __u32 opcode; union { struct { /* @see pft_state */ __u32 state; } set_state; struct { __u32 items_count; /* number of items */ uid_t table[0]; /* array of UIDs */ } update_app_list; struct { __u32 file_descriptor; } preform_in_place_file_enc; }; }; #endif /* MSM_PFT_H_ */