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 */
29enum 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 */
49enum 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 */
82enum 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 */
101struct 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 */
117struct 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