/* * * 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