You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
134 lines
4.0 KiB
134 lines
4.0 KiB
/* 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_ */
|
|
|