135 lines
4.0 KiB
C
135 lines
4.0 KiB
C
/* 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_ */
|