Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4
[pandora-kernel.git] / drivers / staging / sep / sep_driver_api.h
1 /*
2  *
3  *  sep_driver_api.h - Security Processor Driver api definitions
4  *
5  *  Copyright(c) 2009,2010 Intel Corporation. All rights reserved.
6  *  Contributions(c) 2009,2010 Discretix. All rights reserved.
7  *
8  *  This program is free software; you can redistribute it and/or modify it
9  *  under the terms of the GNU General Public License as published by the Free
10  *  Software Foundation; version 2 of the License.
11  *
12  *  This program is distributed in the hope that it will be useful, but WITHOUT
13  *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14  *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
15  *  more details.
16  *
17  *  You should have received a copy of the GNU General Public License along with
18  *  this program; if not, write to the Free Software Foundation, Inc., 59
19  *  Temple Place - Suite 330, Boston, MA  02111-1307, USA.
20  *
21  *  CONTACTS:
22  *
23  *  Mark Allyn          mark.a.allyn@intel.com
24  *  Jayant Mangalampalli jayant.mangalampalli@intel.com
25  *
26  *  CHANGES:
27  *
28  *  2010.09.14  Upgrade to Medfield
29  *
30  */
31
32 #ifndef __SEP_DRIVER_API_H__
33 #define __SEP_DRIVER_API_H__
34
35 /* Type of request from device */
36 #define SEP_DRIVER_SRC_REPLY            1
37 #define SEP_DRIVER_SRC_REQ              2
38 #define SEP_DRIVER_SRC_PRINTF           3
39
40
41 /*-------------------------------------------
42     TYPEDEFS
43 ----------------------------------------------*/
44
45 struct alloc_struct {
46         /* offset from start of shared pool area */
47         u32  offset;
48         /* number of bytes to allocate */
49         u32  num_bytes;
50 };
51
52 /* command struct for getting caller id value and address */
53 struct caller_id_struct {
54         /* pid of the process */
55         u32 pid;
56         /* virtual address of the caller id hash */
57         aligned_u64 callerIdAddress;
58         /* caller id hash size in bytes */
59         u32 callerIdSizeInBytes;
60 };
61
62 /*
63   structure that represents DCB
64 */
65 struct sep_dcblock {
66         /* physical address of the first input mlli */
67         u32     input_mlli_address;
68         /* num of entries in the first input mlli */
69         u32     input_mlli_num_entries;
70         /* size of data in the first input mlli */
71         u32     input_mlli_data_size;
72         /* physical address of the first output mlli */
73         u32     output_mlli_address;
74         /* num of entries in the first output mlli */
75         u32     output_mlli_num_entries;
76         /* size of data in the first output mlli */
77         u32     output_mlli_data_size;
78         /* pointer to the output virtual tail */
79         aligned_u64 out_vr_tail_pt;
80         /* size of tail data */
81         u32     tail_data_size;
82         /* input tail data array */
83         u8      tail_data[68];
84 };
85
86 struct sep_caller_id_entry {
87         int pid;
88         unsigned char callerIdHash[SEP_CALLER_ID_HASH_SIZE_IN_BYTES];
89 };
90
91 /*
92         command structure for building dcb block (currently for ext app only
93 */
94 struct build_dcb_struct {
95         /* address value of the data in */
96         aligned_u64 app_in_address;
97         /* size of data in */
98         u32  data_in_size;
99         /* address of the data out */
100         aligned_u64 app_out_address;
101         /* the size of the block of the operation - if needed,
102         every table will be modulo this parameter */
103         u32  block_size;
104         /* the size of the block of the operation - if needed,
105         every table will be modulo this parameter */
106         u32  tail_block_size;
107 };
108
109 /**
110  * @struct sep_dma_map
111  *
112  * Structure that contains all information needed for mapping the user pages
113  *           or kernel buffers for dma operations
114  *
115  *
116  */
117 struct sep_dma_map {
118         /* mapped dma address */
119         dma_addr_t    dma_addr;
120         /* size of the mapped data */
121         size_t        size;
122 };
123
124 struct sep_dma_resource {
125         /* array of pointers to the pages that represent
126         input data for the synchronic DMA action */
127         struct page **in_page_array;
128
129         /* array of pointers to the pages that represent out
130         data for the synchronic DMA action */
131         struct page **out_page_array;
132
133         /* number of pages in the sep_in_page_array */
134         u32 in_num_pages;
135
136         /* number of pages in the sep_out_page_array */
137         u32 out_num_pages;
138
139         /* map array of the input data */
140         struct sep_dma_map *in_map_array;
141
142         /* map array of the output data */
143         struct sep_dma_map *out_map_array;
144
145         /* number of entries of the input mapp array */
146         u32 in_map_num_entries;
147
148         /* number of entries of the output mapp array */
149         u32 out_map_num_entries;
150 };
151
152
153 /* command struct for translating rar handle to bus address
154    and setting it at predefined location */
155 struct rar_hndl_to_bus_struct {
156
157         /* rar handle */
158         aligned_u64 rar_handle;
159 };
160
161 /*
162   structure that represent one entry in the DMA LLI table
163 */
164 struct sep_lli_entry {
165         /* physical address */
166         u32 bus_address;
167
168         /* block size */
169         u32 block_size;
170 };
171
172 /*----------------------------------------------------------------
173         IOCTL command defines
174         -----------------------------------------------------------------*/
175
176 /* magic number 1 of the sep IOCTL command */
177 #define SEP_IOC_MAGIC_NUMBER                         's'
178
179 /* sends interrupt to sep that message is ready */
180 #define SEP_IOCSENDSEPCOMMAND    \
181         _IO(SEP_IOC_MAGIC_NUMBER, 0)
182
183 /* sends interrupt to sep that message is ready */
184 #define SEP_IOCSENDSEPRPLYCOMMAND        \
185         _IO(SEP_IOC_MAGIC_NUMBER, 1)
186
187 /* allocate memory in data pool */
188 #define SEP_IOCALLOCDATAPOLL    \
189         _IOW(SEP_IOC_MAGIC_NUMBER, 2, struct alloc_struct)
190
191 /* free dynamic data aalocated during table creation */
192 #define SEP_IOCFREEDMATABLEDATA  \
193         _IO(SEP_IOC_MAGIC_NUMBER, 7)
194
195 /* get the static pool area addersses (physical and virtual) */
196 #define SEP_IOCGETSTATICPOOLADDR        \
197         _IO(SEP_IOC_MAGIC_NUMBER, 8)
198
199 /* end transaction command */
200 #define SEP_IOCENDTRANSACTION    \
201         _IO(SEP_IOC_MAGIC_NUMBER, 15)
202
203 #define SEP_IOCRARPREPAREMESSAGE        \
204         _IOW(SEP_IOC_MAGIC_NUMBER, 20, struct rar_hndl_to_bus_struct)
205
206 #define SEP_IOCTLSETCALLERID    \
207         _IOW(SEP_IOC_MAGIC_NUMBER, 34, struct caller_id_struct)
208
209 #define SEP_IOCPREPAREDCB                                       \
210         _IOW(SEP_IOC_MAGIC_NUMBER, 35, struct build_dcb_struct)
211
212 #define SEP_IOCFREEDCB                                  \
213         _IO(SEP_IOC_MAGIC_NUMBER, 36)
214
215 #endif