diff options
Diffstat (limited to 'drivers/staging/sep/sep_driver_api.h')
-rw-r--r-- | drivers/staging/sep/sep_driver_api.h | 402 |
1 files changed, 0 insertions, 402 deletions
diff --git a/drivers/staging/sep/sep_driver_api.h b/drivers/staging/sep/sep_driver_api.h deleted file mode 100644 index 7ee1c3bf17d7..000000000000 --- a/drivers/staging/sep/sep_driver_api.h +++ /dev/null @@ -1,402 +0,0 @@ -/* - * - * sep_driver_api.h - Security Processor Driver api definitions - * - * Copyright(c) 2009-2011 Intel Corporation. All rights reserved. - * Contributions(c) 2009-2011 Discretix. 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 as published by the Free - * Software Foundation; version 2 of the License. - * - * 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. - * - * You should have received a copy of the GNU General Public License along with - * this program; if not, write to the Free Software Foundation, Inc., 59 - * Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * CONTACTS: - * - * Mark Allyn mark.a.allyn@intel.com - * Jayant Mangalampalli jayant.mangalampalli@intel.com - * - * CHANGES: - * - * 2010.09.14 Upgrade to Medfield - * 2011.02.22 Enable kernel crypto - * - */ - -#ifndef __SEP_DRIVER_API_H__ -#define __SEP_DRIVER_API_H__ - -/* Type of request from device */ -#define SEP_DRIVER_SRC_REPLY 1 -#define SEP_DRIVER_SRC_REQ 2 -#define SEP_DRIVER_SRC_PRINTF 3 - -/* Power state */ -#define SEP_DRIVER_POWERON 1 -#define SEP_DRIVER_POWEROFF 2 - -/* Following enums are used only for kernel crypto api */ -enum type_of_request { - NO_REQUEST, - AES_CBC, - AES_ECB, - DES_CBC, - DES_ECB, - DES3_ECB, - DES3_CBC, - SHA1, - MD5, - SHA224, - SHA256 - }; - -enum hash_stage { - HASH_INIT, - HASH_UPDATE, - HASH_FINISH, - HASH_DIGEST, - HASH_FINUP_DATA, - HASH_FINUP_FINISH -}; - -/* - structure that represents DCB -*/ -struct sep_dcblock { - /* physical address of the first input mlli */ - u32 input_mlli_address; - /* num of entries in the first input mlli */ - u32 input_mlli_num_entries; - /* size of data in the first input mlli */ - u32 input_mlli_data_size; - /* physical address of the first output mlli */ - u32 output_mlli_address; - /* num of entries in the first output mlli */ - u32 output_mlli_num_entries; - /* size of data in the first output mlli */ - u32 output_mlli_data_size; - /* pointer to the output virtual tail */ - aligned_u64 out_vr_tail_pt; - /* size of tail data */ - u32 tail_data_size; - /* input tail data array */ - u8 tail_data[68]; -}; - -/* - command structure for building dcb block (currently for ext app only) -*/ -struct build_dcb_struct { - /* address value of the data in */ - aligned_u64 app_in_address; - /* size of data in */ - u32 data_in_size; - /* address of the data out */ - aligned_u64 app_out_address; - /* the size of the block of the operation - if needed, - every table will be modulo this parameter */ - u32 block_size; - /* the size of the block of the operation - if needed, - every table will be modulo this parameter */ - u32 tail_block_size; - - /* which application calls the driver DX or applet */ - u32 is_applet; -}; - -/* - command structure for building dcb block for kernel crypto -*/ -struct build_dcb_struct_kernel { - /* address value of the data in */ - void *app_in_address; - /* size of data in */ - ssize_t data_in_size; - /* address of the data out */ - void *app_out_address; - /* the size of the block of the operation - if needed, - every table will be modulo this parameter */ - u32 block_size; - /* the size of the block of the operation - if needed, - every table will be modulo this parameter */ - u32 tail_block_size; - - /* which application calls the driver DX or applet */ - u32 is_applet; - - struct scatterlist *src_sg; - struct scatterlist *dst_sg; -}; - -/** - * @struct sep_dma_map - * - * Structure that contains all information needed for mapping the user pages - * or kernel buffers for dma operations - * - * - */ -struct sep_dma_map { - /* mapped dma address */ - dma_addr_t dma_addr; - /* size of the mapped data */ - size_t size; -}; - -struct sep_dma_resource { - /* array of pointers to the pages that represent - input data for the synchronic DMA action */ - struct page **in_page_array; - - /* array of pointers to the pages that represent out - data for the synchronic DMA action */ - struct page **out_page_array; - - /* number of pages in the sep_in_page_array */ - u32 in_num_pages; - - /* number of pages in the sep_out_page_array */ - u32 out_num_pages; - - /* map array of the input data */ - struct sep_dma_map *in_map_array; - - /* map array of the output data */ - struct sep_dma_map *out_map_array; - - /* number of entries of the input mapp array */ - u32 in_map_num_entries; - - /* number of entries of the output mapp array */ - u32 out_map_num_entries; - - /* Scatter list for kernel operations */ - struct scatterlist *src_sg; - struct scatterlist *dst_sg; -}; - - -/* command struct for translating rar handle to bus address - and setting it at predefined location */ -struct rar_hndl_to_bus_struct { - - /* rar handle */ - aligned_u64 rar_handle; -}; - -/* - structure that represent one entry in the DMA LLI table -*/ -struct sep_lli_entry { - /* physical address */ - u32 bus_address; - - /* block size */ - u32 block_size; -}; - -/* - * header format for each fastcall write operation - */ -struct sep_fastcall_hdr { - u32 magic; - u32 secure_dma; - u32 msg_len; - u32 num_dcbs; -}; - -/* - * structure used in file pointer's private data field - * to track the status of the calls to the various - * driver interface - */ -struct sep_call_status { - unsigned long status; -}; - -/* - * format of dma context buffer used to store all DMA-related - * context information of a particular transaction - */ -struct sep_dma_context { - /* number of data control blocks */ - u32 nr_dcb_creat; - /* number of the lli tables created in the current transaction */ - u32 num_lli_tables_created; - /* size of currently allocated dma tables region */ - u32 dmatables_len; - /* size of input data */ - u32 input_data_len; - /* secure dma use (for imr memory restricted area in output) */ - bool secure_dma; - struct sep_dma_resource dma_res_arr[SEP_MAX_NUM_SYNC_DMA_OPS]; - /* Scatter gather for kernel crypto */ - struct scatterlist *src_sg; - struct scatterlist *dst_sg; -}; - -/* - * format for file pointer's private_data field - */ -struct sep_private_data { - struct sep_queue_info *my_queue_elem; - struct sep_device *device; - struct sep_call_status call_status; - struct sep_dma_context *dma_ctx; -}; - - -/* Functions used by sep_crypto */ - -/** - * sep_queue_status_remove - Removes transaction from status queue - * @sep: SEP device - * @sep_queue_info: pointer to status queue - * - * This function will removes information about transaction from the queue. - */ -void sep_queue_status_remove(struct sep_device *sep, - struct sep_queue_info **queue_elem); -/** - * sep_queue_status_add - Adds transaction to status queue - * @sep: SEP device - * @opcode: transaction opcode - * @size: input data size - * @pid: pid of current process - * @name: current process name - * @name_len: length of name (current process) - * - * This function adds information about about transaction started to the status - * queue. - */ -struct sep_queue_info *sep_queue_status_add( - struct sep_device *sep, - u32 opcode, - u32 size, - u32 pid, - u8 *name, size_t name_len); - -/** - * sep_create_dcb_dmatables_context_kernel - Creates DCB & MLLI/DMA table context - * for kernel crypto - * @sep: SEP device - * @dcb_region: DCB region buf to create for current transaction - * @dmatables_region: MLLI/DMA tables buf to create for current transaction - * @dma_ctx: DMA context buf to create for current transaction - * @user_dcb_args: User arguments for DCB/MLLI creation - * @num_dcbs: Number of DCBs to create - */ -int sep_create_dcb_dmatables_context_kernel(struct sep_device *sep, - struct sep_dcblock **dcb_region, - void **dmatables_region, - struct sep_dma_context **dma_ctx, - const struct build_dcb_struct_kernel *dcb_data, - const u32 num_dcbs); - -/** - * sep_activate_dcb_dmatables_context - Takes DCB & DMA tables - * contexts into use - * @sep: SEP device - * @dcb_region: DCB region copy - * @dmatables_region: MLLI/DMA tables copy - * @dma_ctx: DMA context for current transaction - */ -ssize_t sep_activate_dcb_dmatables_context(struct sep_device *sep, - struct sep_dcblock **dcb_region, - void **dmatables_region, - struct sep_dma_context *dma_ctx); - -/** - * sep_prepare_input_output_dma_table_in_dcb - prepare control blocks - * @app_in_address: unsigned long; for data buffer in (user space) - * @app_out_address: unsigned long; for data buffer out (user space) - * @data_in_size: u32; for size of data - * @block_size: u32; for block size - * @tail_block_size: u32; for size of tail block - * @isapplet: bool; to indicate external app - * @is_kva: bool; kernel buffer; only used for kernel crypto module - * @secure_dma; indicates whether this is secure_dma using IMR - * - * This function prepares the linked DMA tables and puts the - * address for the linked list of tables inta a DCB (data control - * block) the address of which is known by the SEP hardware - * Note that all bus addresses that are passed to the SEP - * are in 32 bit format; the SEP is a 32 bit device - */ -int sep_prepare_input_output_dma_table_in_dcb(struct sep_device *sep, - unsigned long app_in_address, - unsigned long app_out_address, - u32 data_in_size, - u32 block_size, - u32 tail_block_size, - bool isapplet, - bool is_kva, - bool secure_dma, - struct sep_dcblock *dcb_region, - void **dmatables_region, - struct sep_dma_context **dma_ctx, - struct scatterlist *src_sg, - struct scatterlist *dst_sg); - -/** - * sep_free_dma_table_data_handler - free DMA table - * @sep: pointer to struct sep_device - * @dma_ctx: dma context - * - * Handles the request to free DMA table for synchronic actions - */ -int sep_free_dma_table_data_handler(struct sep_device *sep, - struct sep_dma_context **dma_ctx); -/** - * sep_send_command_handler - kick off a command - * @sep: SEP being signalled - * - * This function raises interrupt to SEP that signals that is has a new - * command from the host - * - * Note that this function does fall under the ioctl lock - */ -int sep_send_command_handler(struct sep_device *sep); - -/** - * sep_wait_transaction - Used for synchronizing transactions - * @sep: SEP device - */ -int sep_wait_transaction(struct sep_device *sep); - -/** - * IOCTL command defines - */ -/* magic number 1 of the sep IOCTL command */ -#define SEP_IOC_MAGIC_NUMBER 's' - -/* sends interrupt to sep that message is ready */ -#define SEP_IOCSENDSEPCOMMAND \ - _IO(SEP_IOC_MAGIC_NUMBER, 0) - -/* end transaction command */ -#define SEP_IOCENDTRANSACTION \ - _IO(SEP_IOC_MAGIC_NUMBER, 15) - -#define SEP_IOCPREPAREDCB \ - _IOW(SEP_IOC_MAGIC_NUMBER, 35, struct build_dcb_struct) - -#define SEP_IOCFREEDCB \ - _IO(SEP_IOC_MAGIC_NUMBER, 36) - -struct sep_device; - -#define SEP_IOCPREPAREDCB_SECURE_DMA \ - _IOW(SEP_IOC_MAGIC_NUMBER, 38, struct build_dcb_struct) - -#define SEP_IOCFREEDCB_SECURE_DMA \ - _IO(SEP_IOC_MAGIC_NUMBER, 39) - -#endif |