| /* |
| * |
| * sep_driver_api.h - Security Processor Driver api definitions |
| * |
| * Copyright(c) 2009,2010 Intel Corporation. All rights reserved. |
| * Contributions(c) 2009,2010 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 |
| * |
| */ |
| |
| #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 |
| |
| |
| /*------------------------------------------- |
| TYPEDEFS |
| ----------------------------------------------*/ |
| |
| struct alloc_struct { |
| /* offset from start of shared pool area */ |
| u32 offset; |
| /* number of bytes to allocate */ |
| u32 num_bytes; |
| }; |
| |
| /* command struct for getting caller id value and address */ |
| struct caller_id_struct { |
| /* pid of the process */ |
| u32 pid; |
| /* virtual address of the caller id hash */ |
| aligned_u64 callerIdAddress; |
| /* caller id hash size in bytes */ |
| u32 callerIdSizeInBytes; |
| }; |
| |
| /* |
| 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]; |
| }; |
| |
| struct sep_caller_id_entry { |
| int pid; |
| unsigned char callerIdHash[SEP_CALLER_ID_HASH_SIZE_IN_BYTES]; |
| }; |
| |
| /* |
| 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; |
| }; |
| |
| /** |
| * @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; |
| }; |
| |
| |
| /* 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; |
| }; |
| |
| /*---------------------------------------------------------------- |
| 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) |
| |
| /* sends interrupt to sep that message is ready */ |
| #define SEP_IOCSENDSEPRPLYCOMMAND \ |
| _IO(SEP_IOC_MAGIC_NUMBER, 1) |
| |
| /* allocate memory in data pool */ |
| #define SEP_IOCALLOCDATAPOLL \ |
| _IOW(SEP_IOC_MAGIC_NUMBER, 2, struct alloc_struct) |
| |
| /* free dynamic data aalocated during table creation */ |
| #define SEP_IOCFREEDMATABLEDATA \ |
| _IO(SEP_IOC_MAGIC_NUMBER, 7) |
| |
| /* get the static pool area addersses (physical and virtual) */ |
| #define SEP_IOCGETSTATICPOOLADDR \ |
| _IO(SEP_IOC_MAGIC_NUMBER, 8) |
| |
| /* end transaction command */ |
| #define SEP_IOCENDTRANSACTION \ |
| _IO(SEP_IOC_MAGIC_NUMBER, 15) |
| |
| #define SEP_IOCRARPREPAREMESSAGE \ |
| _IOW(SEP_IOC_MAGIC_NUMBER, 20, struct rar_hndl_to_bus_struct) |
| |
| #define SEP_IOCTLSETCALLERID \ |
| _IOW(SEP_IOC_MAGIC_NUMBER, 34, struct caller_id_struct) |
| |
| #define SEP_IOCPREPAREDCB \ |
| _IOW(SEP_IOC_MAGIC_NUMBER, 35, struct build_dcb_struct) |
| |
| #define SEP_IOCFREEDCB \ |
| _IO(SEP_IOC_MAGIC_NUMBER, 36) |
| |
| #endif |