Home | History | Annotate | Download | only in linux
      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