/* 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_ */