mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-29 23:53:32 +00:00
staging: sep: remove driver
Looks like no one's working on the driver anymore, so remove it for now. If someone wants to work on moving it out of staging, this commit can be reverted. Signed-off-by: Kristina Martšenko <kristina.martsenko@gmail.com> Cc: Alan Cox <alan@linux.intel.com> Cc: Mark A. Allyn <mark.a.allyn@intel.com> Cc: Jayant Mangalampalli <jayant.mangalampalli@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
6b5886f8b2
commit
c22487b828
13 changed files with 0 additions and 9880 deletions
|
@ -64,8 +64,6 @@ source "drivers/staging/vt6655/Kconfig"
|
||||||
|
|
||||||
source "drivers/staging/vt6656/Kconfig"
|
source "drivers/staging/vt6656/Kconfig"
|
||||||
|
|
||||||
source "drivers/staging/sep/Kconfig"
|
|
||||||
|
|
||||||
source "drivers/staging/iio/Kconfig"
|
source "drivers/staging/iio/Kconfig"
|
||||||
|
|
||||||
source "drivers/staging/xgifb/Kconfig"
|
source "drivers/staging/xgifb/Kconfig"
|
||||||
|
|
|
@ -26,7 +26,6 @@ obj-$(CONFIG_OCTEON_USB) += octeon-usb/
|
||||||
obj-$(CONFIG_VT6655) += vt6655/
|
obj-$(CONFIG_VT6655) += vt6655/
|
||||||
obj-$(CONFIG_VT6656) += vt6656/
|
obj-$(CONFIG_VT6656) += vt6656/
|
||||||
obj-$(CONFIG_VME_BUS) += vme/
|
obj-$(CONFIG_VME_BUS) += vme/
|
||||||
obj-$(CONFIG_DX_SEP) += sep/
|
|
||||||
obj-$(CONFIG_IIO) += iio/
|
obj-$(CONFIG_IIO) += iio/
|
||||||
obj-$(CONFIG_FB_XGI) += xgifb/
|
obj-$(CONFIG_FB_XGI) += xgifb/
|
||||||
obj-$(CONFIG_USB_EMXX) += emxx_udc/
|
obj-$(CONFIG_USB_EMXX) += emxx_udc/
|
||||||
|
|
|
@ -1,11 +0,0 @@
|
||||||
config DX_SEP
|
|
||||||
tristate "Discretix SEP driver"
|
|
||||||
depends on PCI && CRYPTO
|
|
||||||
help
|
|
||||||
Discretix SEP driver; used for the security processor subsystem
|
|
||||||
on board the Intel Mobile Internet Device and adds SEP availability
|
|
||||||
to the kernel crypto infrastructure
|
|
||||||
|
|
||||||
The driver's name is sep_driver.
|
|
||||||
|
|
||||||
If unsure, select N.
|
|
|
@ -1,3 +0,0 @@
|
||||||
ccflags-y += -I$(srctree)/$(src)
|
|
||||||
obj-$(CONFIG_DX_SEP) += sep_driver.o
|
|
||||||
sep_driver-objs := sep_crypto.o sep_main.o
|
|
|
@ -1,3 +0,0 @@
|
||||||
Todo's so far (from Alan Cox)
|
|
||||||
- Clean up unused ioctls
|
|
||||||
- Clean up unused fields in ioctl structures
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,359 +0,0 @@
|
||||||
/*
|
|
||||||
*
|
|
||||||
* sep_crypto.h - Crypto interface structures
|
|
||||||
*
|
|
||||||
* Copyright(c) 2009-2011 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:
|
|
||||||
*
|
|
||||||
* 2009.06.26 Initial publish
|
|
||||||
* 2011.02.22 Enable Kernel Crypto
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Constants for SEP (from vendor) */
|
|
||||||
#define SEP_START_MSG_TOKEN 0x02558808
|
|
||||||
|
|
||||||
#define SEP_DES_IV_SIZE_WORDS 2
|
|
||||||
#define SEP_DES_IV_SIZE_BYTES (SEP_DES_IV_SIZE_WORDS * \
|
|
||||||
sizeof(u32))
|
|
||||||
#define SEP_DES_KEY_SIZE_WORDS 2
|
|
||||||
#define SEP_DES_KEY_SIZE_BYTES (SEP_DES_KEY_SIZE_WORDS * \
|
|
||||||
sizeof(u32))
|
|
||||||
#define SEP_DES_BLOCK_SIZE 8
|
|
||||||
#define SEP_DES_DUMMY_SIZE 16
|
|
||||||
|
|
||||||
#define SEP_DES_INIT_OPCODE 0x10
|
|
||||||
#define SEP_DES_BLOCK_OPCODE 0x11
|
|
||||||
|
|
||||||
#define SEP_AES_BLOCK_SIZE_WORDS 4
|
|
||||||
#define SEP_AES_BLOCK_SIZE_BYTES \
|
|
||||||
(SEP_AES_BLOCK_SIZE_WORDS * sizeof(u32))
|
|
||||||
|
|
||||||
#define SEP_AES_DUMMY_BLOCK_SIZE 16
|
|
||||||
#define SEP_AES_IV_SIZE_WORDS SEP_AES_BLOCK_SIZE_WORDS
|
|
||||||
#define SEP_AES_IV_SIZE_BYTES \
|
|
||||||
(SEP_AES_IV_SIZE_WORDS * sizeof(u32))
|
|
||||||
|
|
||||||
#define SEP_AES_KEY_128_SIZE 16
|
|
||||||
#define SEP_AES_KEY_192_SIZE 24
|
|
||||||
#define SEP_AES_KEY_256_SIZE 32
|
|
||||||
#define SEP_AES_KEY_512_SIZE 64
|
|
||||||
#define SEP_AES_MAX_KEY_SIZE_WORDS 16
|
|
||||||
#define SEP_AES_MAX_KEY_SIZE_BYTES \
|
|
||||||
(SEP_AES_MAX_KEY_SIZE_WORDS * sizeof(u32))
|
|
||||||
|
|
||||||
#define SEP_AES_WRAP_MIN_SIZE 8
|
|
||||||
#define SEP_AES_WRAP_MAX_SIZE 0x10000000
|
|
||||||
|
|
||||||
#define SEP_AES_WRAP_BLOCK_SIZE_WORDS 2
|
|
||||||
#define SEP_AES_WRAP_BLOCK_SIZE_BYTES \
|
|
||||||
(SEP_AES_WRAP_BLOCK_SIZE_WORDS * sizeof(u32))
|
|
||||||
|
|
||||||
#define SEP_AES_SECRET_RKEK1 0x1
|
|
||||||
#define SEP_AES_SECRET_RKEK2 0x2
|
|
||||||
|
|
||||||
#define SEP_AES_INIT_OPCODE 0x2
|
|
||||||
#define SEP_AES_BLOCK_OPCODE 0x3
|
|
||||||
#define SEP_AES_FINISH_OPCODE 0x4
|
|
||||||
#define SEP_AES_WRAP_OPCODE 0x6
|
|
||||||
#define SEP_AES_UNWRAP_OPCODE 0x7
|
|
||||||
#define SEP_AES_XTS_FINISH_OPCODE 0x8
|
|
||||||
|
|
||||||
#define SEP_HASH_RESULT_SIZE_WORDS 16
|
|
||||||
#define SEP_MD5_DIGEST_SIZE_WORDS 4
|
|
||||||
#define SEP_MD5_DIGEST_SIZE_BYTES \
|
|
||||||
(SEP_MD5_DIGEST_SIZE_WORDS * sizeof(u32))
|
|
||||||
#define SEP_SHA1_DIGEST_SIZE_WORDS 5
|
|
||||||
#define SEP_SHA1_DIGEST_SIZE_BYTES \
|
|
||||||
(SEP_SHA1_DIGEST_SIZE_WORDS * sizeof(u32))
|
|
||||||
#define SEP_SHA224_DIGEST_SIZE_WORDS 7
|
|
||||||
#define SEP_SHA224_DIGEST_SIZE_BYTES \
|
|
||||||
(SEP_SHA224_DIGEST_SIZE_WORDS * sizeof(u32))
|
|
||||||
#define SEP_SHA256_DIGEST_SIZE_WORDS 8
|
|
||||||
#define SEP_SHA256_DIGEST_SIZE_BYTES \
|
|
||||||
(SEP_SHA256_DIGEST_SIZE_WORDS * sizeof(u32))
|
|
||||||
#define SEP_SHA384_DIGEST_SIZE_WORDS 12
|
|
||||||
#define SEP_SHA384_DIGEST_SIZE_BYTES \
|
|
||||||
(SEP_SHA384_DIGEST_SIZE_WORDS * sizeof(u32))
|
|
||||||
#define SEP_SHA512_DIGEST_SIZE_WORDS 16
|
|
||||||
#define SEP_SHA512_DIGEST_SIZE_BYTES \
|
|
||||||
(SEP_SHA512_DIGEST_SIZE_WORDS * sizeof(u32))
|
|
||||||
#define SEP_HASH_BLOCK_SIZE_WORDS 16
|
|
||||||
#define SEP_HASH_BLOCK_SIZE_BYTES \
|
|
||||||
(SEP_HASH_BLOCK_SIZE_WORDS * sizeof(u32))
|
|
||||||
#define SEP_SHA2_BLOCK_SIZE_WORDS 32
|
|
||||||
#define SEP_SHA2_BLOCK_SIZE_BYTES \
|
|
||||||
(SEP_SHA2_BLOCK_SIZE_WORDS * sizeof(u32))
|
|
||||||
|
|
||||||
#define SEP_HASH_INIT_OPCODE 0x20
|
|
||||||
#define SEP_HASH_UPDATE_OPCODE 0x21
|
|
||||||
#define SEP_HASH_FINISH_OPCODE 0x22
|
|
||||||
#define SEP_HASH_SINGLE_OPCODE 0x23
|
|
||||||
|
|
||||||
#define SEP_HOST_ERROR 0x0b000000
|
|
||||||
#define SEP_OK 0x0
|
|
||||||
#define SEP_INVALID_START (SEP_HOST_ERROR + 0x3)
|
|
||||||
#define SEP_WRONG_OPCODE (SEP_HOST_ERROR + 0x1)
|
|
||||||
|
|
||||||
#define SEP_TRANSACTION_WAIT_TIME 5
|
|
||||||
|
|
||||||
#define SEP_QUEUE_LENGTH 2
|
|
||||||
/* Macros */
|
|
||||||
#ifndef __LITTLE_ENDIAN
|
|
||||||
#define CHG_ENDIAN(val) \
|
|
||||||
(((val) >> 24) | \
|
|
||||||
(((val) & 0x00FF0000) >> 8) | \
|
|
||||||
(((val) & 0x0000FF00) << 8) | \
|
|
||||||
(((val) & 0x000000FF) << 24))
|
|
||||||
#else
|
|
||||||
#define CHG_ENDIAN(val) val
|
|
||||||
#endif
|
|
||||||
/* Enums for SEP (from vendor) */
|
|
||||||
enum des_numkey {
|
|
||||||
DES_KEY_1 = 1,
|
|
||||||
DES_KEY_2 = 2,
|
|
||||||
DES_KEY_3 = 3,
|
|
||||||
SEP_NUMKEY_OPTIONS,
|
|
||||||
SEP_NUMKEY_LAST = 0x7fffffff,
|
|
||||||
};
|
|
||||||
|
|
||||||
enum des_enc_mode {
|
|
||||||
SEP_DES_ENCRYPT = 0,
|
|
||||||
SEP_DES_DECRYPT = 1,
|
|
||||||
SEP_DES_ENC_OPTIONS,
|
|
||||||
SEP_DES_ENC_LAST = 0x7fffffff,
|
|
||||||
};
|
|
||||||
|
|
||||||
enum des_op_mode {
|
|
||||||
SEP_DES_ECB = 0,
|
|
||||||
SEP_DES_CBC = 1,
|
|
||||||
SEP_OP_OPTIONS,
|
|
||||||
SEP_OP_LAST = 0x7fffffff,
|
|
||||||
};
|
|
||||||
|
|
||||||
enum aes_keysize {
|
|
||||||
AES_128 = 0,
|
|
||||||
AES_192 = 1,
|
|
||||||
AES_256 = 2,
|
|
||||||
AES_512 = 3,
|
|
||||||
AES_SIZE_OPTIONS,
|
|
||||||
AEA_SIZE_LAST = 0x7FFFFFFF,
|
|
||||||
};
|
|
||||||
|
|
||||||
enum aes_enc_mode {
|
|
||||||
SEP_AES_ENCRYPT = 0,
|
|
||||||
SEP_AES_DECRYPT = 1,
|
|
||||||
SEP_AES_ENC_OPTIONS,
|
|
||||||
SEP_AES_ENC_LAST = 0x7FFFFFFF,
|
|
||||||
};
|
|
||||||
|
|
||||||
enum aes_op_mode {
|
|
||||||
SEP_AES_ECB = 0,
|
|
||||||
SEP_AES_CBC = 1,
|
|
||||||
SEP_AES_MAC = 2,
|
|
||||||
SEP_AES_CTR = 3,
|
|
||||||
SEP_AES_XCBC = 4,
|
|
||||||
SEP_AES_CMAC = 5,
|
|
||||||
SEP_AES_XTS = 6,
|
|
||||||
SEP_AES_OP_OPTIONS,
|
|
||||||
SEP_AES_OP_LAST = 0x7FFFFFFF,
|
|
||||||
};
|
|
||||||
|
|
||||||
enum hash_op_mode {
|
|
||||||
SEP_HASH_SHA1 = 0,
|
|
||||||
SEP_HASH_SHA224 = 1,
|
|
||||||
SEP_HASH_SHA256 = 2,
|
|
||||||
SEP_HASH_SHA384 = 3,
|
|
||||||
SEP_HASH_SHA512 = 4,
|
|
||||||
SEP_HASH_MD5 = 5,
|
|
||||||
SEP_HASH_OPTIONS,
|
|
||||||
SEP_HASH_LAST_MODE = 0x7FFFFFFF,
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Structures for SEP (from vendor) */
|
|
||||||
struct sep_des_internal_key {
|
|
||||||
u32 key1[SEP_DES_KEY_SIZE_WORDS];
|
|
||||||
u32 key2[SEP_DES_KEY_SIZE_WORDS];
|
|
||||||
u32 key3[SEP_DES_KEY_SIZE_WORDS];
|
|
||||||
};
|
|
||||||
|
|
||||||
struct sep_des_internal_context {
|
|
||||||
u32 iv_context[SEP_DES_IV_SIZE_WORDS];
|
|
||||||
struct sep_des_internal_key context_key;
|
|
||||||
enum des_numkey nbr_keys;
|
|
||||||
enum des_enc_mode encryption;
|
|
||||||
enum des_op_mode operation;
|
|
||||||
u8 dummy_block[SEP_DES_DUMMY_SIZE];
|
|
||||||
};
|
|
||||||
|
|
||||||
struct sep_des_private_context {
|
|
||||||
u32 valid_tag;
|
|
||||||
u32 iv;
|
|
||||||
u8 ctx_buf[sizeof(struct sep_des_internal_context)];
|
|
||||||
};
|
|
||||||
|
|
||||||
/* This is the structure passed to SEP via msg area */
|
|
||||||
struct sep_des_key {
|
|
||||||
u32 key1[SEP_DES_KEY_SIZE_WORDS];
|
|
||||||
u32 key2[SEP_DES_KEY_SIZE_WORDS];
|
|
||||||
u32 key3[SEP_DES_KEY_SIZE_WORDS];
|
|
||||||
u32 pad[SEP_DES_KEY_SIZE_WORDS];
|
|
||||||
};
|
|
||||||
|
|
||||||
struct sep_aes_internal_context {
|
|
||||||
u32 aes_ctx_iv[SEP_AES_IV_SIZE_WORDS];
|
|
||||||
u32 aes_ctx_key[SEP_AES_MAX_KEY_SIZE_WORDS / 2];
|
|
||||||
enum aes_keysize keysize;
|
|
||||||
enum aes_enc_mode encmode;
|
|
||||||
enum aes_op_mode opmode;
|
|
||||||
u8 secret_key;
|
|
||||||
u32 no_add_blocks;
|
|
||||||
u32 last_block_size;
|
|
||||||
u32 last_block[SEP_AES_BLOCK_SIZE_WORDS];
|
|
||||||
u32 prev_iv[SEP_AES_BLOCK_SIZE_WORDS];
|
|
||||||
u32 remaining_size;
|
|
||||||
union {
|
|
||||||
struct {
|
|
||||||
u32 dkey1[SEP_AES_BLOCK_SIZE_WORDS];
|
|
||||||
u32 dkey2[SEP_AES_BLOCK_SIZE_WORDS];
|
|
||||||
u32 dkey3[SEP_AES_BLOCK_SIZE_WORDS];
|
|
||||||
} cmac_data;
|
|
||||||
struct {
|
|
||||||
u32 xts_key[SEP_AES_MAX_KEY_SIZE_WORDS / 2];
|
|
||||||
u32 temp1[SEP_AES_BLOCK_SIZE_WORDS];
|
|
||||||
u32 temp2[SEP_AES_BLOCK_SIZE_WORDS];
|
|
||||||
} xtx_data;
|
|
||||||
} s_data;
|
|
||||||
u8 dummy_block[SEP_AES_DUMMY_BLOCK_SIZE];
|
|
||||||
};
|
|
||||||
|
|
||||||
struct sep_aes_private_context {
|
|
||||||
u32 valid_tag;
|
|
||||||
u32 aes_iv;
|
|
||||||
u32 op_mode;
|
|
||||||
u8 cbuff[sizeof(struct sep_aes_internal_context)];
|
|
||||||
};
|
|
||||||
|
|
||||||
struct sep_hash_internal_context {
|
|
||||||
u32 hash_result[SEP_HASH_RESULT_SIZE_WORDS];
|
|
||||||
enum hash_op_mode hash_opmode;
|
|
||||||
u32 previous_data[SEP_SHA2_BLOCK_SIZE_WORDS];
|
|
||||||
u16 prev_update_bytes;
|
|
||||||
u32 total_proc_128bit[4];
|
|
||||||
u16 op_mode_block_size;
|
|
||||||
u8 dummy_aes_block[SEP_AES_DUMMY_BLOCK_SIZE];
|
|
||||||
};
|
|
||||||
|
|
||||||
struct sep_hash_private_context {
|
|
||||||
u32 valid_tag;
|
|
||||||
u32 iv;
|
|
||||||
u8 internal_context[sizeof(struct sep_hash_internal_context)];
|
|
||||||
};
|
|
||||||
|
|
||||||
union key_t {
|
|
||||||
struct sep_des_key des;
|
|
||||||
u32 aes[SEP_AES_MAX_KEY_SIZE_WORDS];
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Context structures for crypto API */
|
|
||||||
/**
|
|
||||||
* Structure for this current task context
|
|
||||||
* This same structure is used for both hash
|
|
||||||
* and crypt in order to reduce duplicate code
|
|
||||||
* for stuff that is done for both hash operations
|
|
||||||
* and crypto operations. We cannot trust that the
|
|
||||||
* system context is not pulled out from under
|
|
||||||
* us during operation to operation, so all
|
|
||||||
* critical stuff such as data pointers must
|
|
||||||
* be in in a context that is exclusive for this
|
|
||||||
* particular task at hand.
|
|
||||||
*/
|
|
||||||
struct this_task_ctx {
|
|
||||||
struct sep_device *sep_used;
|
|
||||||
u32 done;
|
|
||||||
unsigned char iv[100];
|
|
||||||
enum des_enc_mode des_encmode;
|
|
||||||
enum des_op_mode des_opmode;
|
|
||||||
enum aes_enc_mode aes_encmode;
|
|
||||||
enum aes_op_mode aes_opmode;
|
|
||||||
u32 init_opcode;
|
|
||||||
u32 block_opcode;
|
|
||||||
size_t data_length;
|
|
||||||
size_t ivlen;
|
|
||||||
struct ablkcipher_walk walk;
|
|
||||||
int i_own_sep; /* Do I have custody of the sep? */
|
|
||||||
struct sep_call_status call_status;
|
|
||||||
struct build_dcb_struct_kernel dcb_input_data;
|
|
||||||
struct sep_dma_context *dma_ctx;
|
|
||||||
void *dmatables_region;
|
|
||||||
size_t nbytes;
|
|
||||||
struct sep_dcblock *dcb_region;
|
|
||||||
struct sep_queue_info *queue_elem;
|
|
||||||
int msg_len_words;
|
|
||||||
unsigned char msg[SEP_DRIVER_MESSAGE_SHARED_AREA_SIZE_IN_BYTES];
|
|
||||||
void *msgptr;
|
|
||||||
struct scatterlist *src_sg;
|
|
||||||
struct scatterlist *dst_sg;
|
|
||||||
struct scatterlist *src_sg_hold;
|
|
||||||
struct scatterlist *dst_sg_hold;
|
|
||||||
struct ahash_request *current_hash_req;
|
|
||||||
struct ablkcipher_request *current_cypher_req;
|
|
||||||
enum type_of_request current_request;
|
|
||||||
int digest_size_words;
|
|
||||||
int digest_size_bytes;
|
|
||||||
int block_size_words;
|
|
||||||
int block_size_bytes;
|
|
||||||
enum hash_op_mode hash_opmode;
|
|
||||||
enum hash_stage current_hash_stage;
|
|
||||||
/**
|
|
||||||
* Not that this is a pointer. The are_we_done_yet variable is
|
|
||||||
* allocated by the task function. This way, even if the kernel
|
|
||||||
* crypto infrastructure has grabbed the task structure out from
|
|
||||||
* under us, the task function can still see this variable.
|
|
||||||
*/
|
|
||||||
int *are_we_done_yet;
|
|
||||||
unsigned long end_time;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct sep_system_ctx {
|
|
||||||
union key_t key;
|
|
||||||
size_t keylen;
|
|
||||||
int key_sent;
|
|
||||||
enum des_numkey des_nbr_keys;
|
|
||||||
enum aes_keysize aes_key_size;
|
|
||||||
unsigned long end_time;
|
|
||||||
struct sep_des_private_context des_private_ctx;
|
|
||||||
struct sep_aes_private_context aes_private_ctx;
|
|
||||||
struct sep_hash_private_context hash_private_ctx;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* work queue structures */
|
|
||||||
struct sep_work_struct {
|
|
||||||
struct work_struct work;
|
|
||||||
void (*callback)(void *);
|
|
||||||
void *data;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Functions */
|
|
||||||
int sep_crypto_setup(void);
|
|
||||||
void sep_crypto_takedown(void);
|
|
|
@ -1,162 +0,0 @@
|
||||||
#ifndef __SEP_DEV_H__
|
|
||||||
#define __SEP_DEV_H__
|
|
||||||
|
|
||||||
/*
|
|
||||||
*
|
|
||||||
* sep_dev.h - Security Processor Device Structures
|
|
||||||
*
|
|
||||||
* 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
|
|
||||||
*/
|
|
||||||
|
|
||||||
struct sep_device {
|
|
||||||
/* pointer to pci dev */
|
|
||||||
struct pci_dev *pdev;
|
|
||||||
|
|
||||||
/* character device file */
|
|
||||||
struct cdev sep_cdev;
|
|
||||||
|
|
||||||
/* devices (using misc dev) */
|
|
||||||
struct miscdevice miscdev_sep;
|
|
||||||
|
|
||||||
/* major / minor numbers of device */
|
|
||||||
dev_t sep_devno;
|
|
||||||
/* guards command sent counter */
|
|
||||||
spinlock_t snd_rply_lck;
|
|
||||||
/* guards driver memory usage in fastcall if */
|
|
||||||
struct semaphore sep_doublebuf;
|
|
||||||
|
|
||||||
/* flags to indicate use and lock status of sep */
|
|
||||||
u32 pid_doing_transaction;
|
|
||||||
unsigned long in_use_flags;
|
|
||||||
|
|
||||||
/* address of the shared memory allocated during init for SEP driver
|
|
||||||
(coherent alloc) */
|
|
||||||
dma_addr_t shared_bus;
|
|
||||||
size_t shared_size;
|
|
||||||
void *shared_addr;
|
|
||||||
|
|
||||||
/* start address of the access to the SEP registers from driver */
|
|
||||||
dma_addr_t reg_physical_addr;
|
|
||||||
dma_addr_t reg_physical_end;
|
|
||||||
void __iomem *reg_addr;
|
|
||||||
|
|
||||||
/* wait queue heads of the driver */
|
|
||||||
wait_queue_head_t event_interrupt;
|
|
||||||
wait_queue_head_t event_transactions;
|
|
||||||
|
|
||||||
struct list_head sep_queue_status;
|
|
||||||
u32 sep_queue_num;
|
|
||||||
spinlock_t sep_queue_lock;
|
|
||||||
|
|
||||||
/* Is this in use? */
|
|
||||||
u32 in_use;
|
|
||||||
|
|
||||||
/* indicates whether power save is set up */
|
|
||||||
u32 power_save_setup;
|
|
||||||
|
|
||||||
/* Power state */
|
|
||||||
u32 power_state;
|
|
||||||
|
|
||||||
/* transaction counter that coordinates the
|
|
||||||
transactions between SEP and HOST */
|
|
||||||
unsigned long send_ct;
|
|
||||||
/* counter for the messages from sep */
|
|
||||||
unsigned long reply_ct;
|
|
||||||
|
|
||||||
/* The following are used for kernel crypto client requests */
|
|
||||||
u32 in_kernel; /* Set for kernel client request */
|
|
||||||
struct tasklet_struct finish_tasklet;
|
|
||||||
enum type_of_request current_request;
|
|
||||||
enum hash_stage current_hash_stage;
|
|
||||||
struct ahash_request *current_hash_req;
|
|
||||||
struct ablkcipher_request *current_cypher_req;
|
|
||||||
struct this_task_ctx *ta_ctx;
|
|
||||||
struct workqueue_struct *workqueue;
|
|
||||||
};
|
|
||||||
|
|
||||||
extern struct sep_device *sep_dev;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* SEP message header for a transaction
|
|
||||||
* @reserved: reserved memory (two words)
|
|
||||||
* @token: SEP message token
|
|
||||||
* @msg_len: message length
|
|
||||||
* @opcpde: message opcode
|
|
||||||
*/
|
|
||||||
struct sep_msgarea_hdr {
|
|
||||||
u32 reserved[2];
|
|
||||||
u32 token;
|
|
||||||
u32 msg_len;
|
|
||||||
u32 opcode;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sep_queue_data - data to be maintained in status queue for a transaction
|
|
||||||
* @opcode : transaction opcode
|
|
||||||
* @size : message size
|
|
||||||
* @pid: owner process
|
|
||||||
* @name: owner process name
|
|
||||||
*/
|
|
||||||
struct sep_queue_data {
|
|
||||||
u32 opcode;
|
|
||||||
u32 size;
|
|
||||||
s32 pid;
|
|
||||||
u8 name[TASK_COMM_LEN];
|
|
||||||
};
|
|
||||||
|
|
||||||
/** sep_queue_info - maintains status info of all transactions
|
|
||||||
* @list: head of list
|
|
||||||
* @sep_queue_data : data for transaction
|
|
||||||
*/
|
|
||||||
struct sep_queue_info {
|
|
||||||
struct list_head list;
|
|
||||||
struct sep_queue_data data;
|
|
||||||
};
|
|
||||||
|
|
||||||
static inline void sep_write_reg(struct sep_device *dev, int reg, u32 value)
|
|
||||||
{
|
|
||||||
void __iomem *addr = dev->reg_addr + reg;
|
|
||||||
writel(value, addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline u32 sep_read_reg(struct sep_device *dev, int reg)
|
|
||||||
{
|
|
||||||
void __iomem *addr = dev->reg_addr + reg;
|
|
||||||
return readl(addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* wait for SRAM write complete(indirect write */
|
|
||||||
static inline void sep_wait_sram_write(struct sep_device *dev)
|
|
||||||
{
|
|
||||||
u32 reg_val;
|
|
||||||
|
|
||||||
do {
|
|
||||||
reg_val = sep_read_reg(dev, HW_SRAM_DATA_READY_REG_ADDR);
|
|
||||||
} while (!(reg_val & 1));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -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
|
|
|
@ -1,298 +0,0 @@
|
||||||
/*
|
|
||||||
*
|
|
||||||
* sep_driver_config.h - Security Processor Driver configuration
|
|
||||||
*
|
|
||||||
* 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.06.26 Upgrade to Medfield
|
|
||||||
* 2011.02.22 Enable kernel crypto
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __SEP_DRIVER_CONFIG_H__
|
|
||||||
#define __SEP_DRIVER_CONFIG_H__
|
|
||||||
|
|
||||||
|
|
||||||
/*--------------------------------------
|
|
||||||
DRIVER CONFIGURATION FLAGS
|
|
||||||
-------------------------------------*/
|
|
||||||
|
|
||||||
/* if flag is on , then the driver is running in polling and
|
|
||||||
not interrupt mode */
|
|
||||||
#define SEP_DRIVER_POLLING_MODE 0
|
|
||||||
|
|
||||||
/* flag which defines if the shared area address should be
|
|
||||||
reconfigured (send to SEP anew) during init of the driver */
|
|
||||||
#define SEP_DRIVER_RECONFIG_MESSAGE_AREA 0
|
|
||||||
|
|
||||||
/* the mode for running on the ARM1172 Evaluation platform (flag is 1) */
|
|
||||||
#define SEP_DRIVER_ARM_DEBUG_MODE 0
|
|
||||||
|
|
||||||
/* Critical message area contents for sanity checking */
|
|
||||||
#define SEP_START_MSG_TOKEN 0x02558808
|
|
||||||
/*-------------------------------------------
|
|
||||||
INTERNAL DATA CONFIGURATION
|
|
||||||
-------------------------------------------*/
|
|
||||||
|
|
||||||
/* flag for the input array */
|
|
||||||
#define SEP_DRIVER_IN_FLAG 0
|
|
||||||
|
|
||||||
/* flag for output array */
|
|
||||||
#define SEP_DRIVER_OUT_FLAG 1
|
|
||||||
|
|
||||||
/* maximum number of entries in one LLI tables */
|
|
||||||
#define SEP_DRIVER_ENTRIES_PER_TABLE_IN_SEP 31
|
|
||||||
|
|
||||||
/* minimum data size of the MLLI table */
|
|
||||||
#define SEP_DRIVER_MIN_DATA_SIZE_PER_TABLE 16
|
|
||||||
|
|
||||||
/* flag that signifies tah the lock is
|
|
||||||
currently held by the process (struct file) */
|
|
||||||
#define SEP_DRIVER_OWN_LOCK_FLAG 1
|
|
||||||
|
|
||||||
/* flag that signifies tah the lock is currently NOT
|
|
||||||
held by the process (struct file) */
|
|
||||||
#define SEP_DRIVER_DISOWN_LOCK_FLAG 0
|
|
||||||
|
|
||||||
/* indicates whether driver has mapped/unmapped shared area */
|
|
||||||
#define SEP_REQUEST_DAEMON_MAPPED 1
|
|
||||||
#define SEP_REQUEST_DAEMON_UNMAPPED 0
|
|
||||||
|
|
||||||
/*--------------------------------------------------------
|
|
||||||
SHARED AREA memory total size is 36K
|
|
||||||
it is divided is following:
|
|
||||||
|
|
||||||
SHARED_MESSAGE_AREA 8K }
|
|
||||||
}
|
|
||||||
STATIC_POOL_AREA 4K } MAPPED AREA ( 24 K)
|
|
||||||
}
|
|
||||||
DATA_POOL_AREA 12K }
|
|
||||||
|
|
||||||
SYNCHRONIC_DMA_TABLES_AREA 29K
|
|
||||||
|
|
||||||
placeholder until drver changes
|
|
||||||
FLOW_DMA_TABLES_AREA 4K
|
|
||||||
|
|
||||||
SYSTEM_MEMORY_AREA 3k
|
|
||||||
|
|
||||||
SYSTEM_MEMORY total size is 3k
|
|
||||||
it is divided as following:
|
|
||||||
|
|
||||||
TIME_MEMORY_AREA 8B
|
|
||||||
-----------------------------------------------------------*/
|
|
||||||
|
|
||||||
#define SEP_DEV_NAME "sep_sec_driver"
|
|
||||||
#define SEP_DEV_SINGLETON "sep_sec_singleton_driver"
|
|
||||||
#define SEP_DEV_DAEMON "sep_req_daemon_driver"
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
the minimum length of the message - includes 2 reserved fields
|
|
||||||
at the start, then token, message size and opcode fields. all dwords
|
|
||||||
*/
|
|
||||||
#define SEP_DRIVER_MIN_MESSAGE_SIZE_IN_BYTES (5*sizeof(u32))
|
|
||||||
|
|
||||||
/*
|
|
||||||
the maximum length of the message - the rest of the message shared
|
|
||||||
area will be dedicated to the dma lli tables
|
|
||||||
*/
|
|
||||||
#define SEP_DRIVER_MAX_MESSAGE_SIZE_IN_BYTES (8 * 1024)
|
|
||||||
|
|
||||||
/* the size of the message shared area in pages */
|
|
||||||
#define SEP_DRIVER_MESSAGE_SHARED_AREA_SIZE_IN_BYTES (8 * 1024)
|
|
||||||
|
|
||||||
/* the size of the data pool static area in pages */
|
|
||||||
#define SEP_DRIVER_STATIC_AREA_SIZE_IN_BYTES (4 * 1024)
|
|
||||||
|
|
||||||
/* the size of the data pool shared area size in pages */
|
|
||||||
#define SEP_DRIVER_DATA_POOL_SHARED_AREA_SIZE_IN_BYTES (16 * 1024)
|
|
||||||
|
|
||||||
/* the size of the message shared area in pages */
|
|
||||||
#define SYNCHRONIC_DMA_TABLES_AREA_SIZE_BYTES (1024 * 29)
|
|
||||||
|
|
||||||
/* Placeholder until driver changes */
|
|
||||||
#define SEP_DRIVER_FLOW_DMA_TABLES_AREA_SIZE_IN_BYTES (1024 * 4)
|
|
||||||
|
|
||||||
/* system data (time, caller id etc') pool */
|
|
||||||
#define SEP_DRIVER_SYSTEM_DATA_MEMORY_SIZE_IN_BYTES (1024 * 3)
|
|
||||||
|
|
||||||
/* Offset of the sep printf buffer in the message area */
|
|
||||||
#define SEP_DRIVER_PRINTF_OFFSET_IN_BYTES (5888)
|
|
||||||
|
|
||||||
/* the size in bytes of the time memory */
|
|
||||||
#define SEP_DRIVER_TIME_MEMORY_SIZE_IN_BYTES 8
|
|
||||||
|
|
||||||
/* the size in bytes of the RAR parameters memory */
|
|
||||||
#define SEP_DRIVER_SYSTEM_RAR_MEMORY_SIZE_IN_BYTES 8
|
|
||||||
|
|
||||||
/* area size that is mapped - we map the MESSAGE AREA, STATIC POOL and
|
|
||||||
DATA POOL areas. area must be module 4k */
|
|
||||||
#define SEP_DRIVER_MMMAP_AREA_SIZE (1024 * 28)
|
|
||||||
|
|
||||||
/*-----------------------------------------------
|
|
||||||
offsets of the areas starting from the shared area start address
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* message area offset */
|
|
||||||
#define SEP_DRIVER_MESSAGE_AREA_OFFSET_IN_BYTES 0
|
|
||||||
|
|
||||||
/* static pool area offset */
|
|
||||||
#define SEP_DRIVER_STATIC_AREA_OFFSET_IN_BYTES \
|
|
||||||
(SEP_DRIVER_MESSAGE_SHARED_AREA_SIZE_IN_BYTES)
|
|
||||||
|
|
||||||
/* data pool area offset */
|
|
||||||
#define SEP_DRIVER_DATA_POOL_AREA_OFFSET_IN_BYTES \
|
|
||||||
(SEP_DRIVER_STATIC_AREA_OFFSET_IN_BYTES + \
|
|
||||||
SEP_DRIVER_STATIC_AREA_SIZE_IN_BYTES)
|
|
||||||
|
|
||||||
/* synchronic dma tables area offset */
|
|
||||||
#define SYNCHRONIC_DMA_TABLES_AREA_OFFSET_BYTES \
|
|
||||||
(SEP_DRIVER_DATA_POOL_AREA_OFFSET_IN_BYTES + \
|
|
||||||
SEP_DRIVER_DATA_POOL_SHARED_AREA_SIZE_IN_BYTES)
|
|
||||||
|
|
||||||
/* system memory offset in bytes */
|
|
||||||
#define SEP_DRIVER_SYSTEM_DATA_MEMORY_OFFSET_IN_BYTES \
|
|
||||||
(SYNCHRONIC_DMA_TABLES_AREA_OFFSET_BYTES + \
|
|
||||||
SYNCHRONIC_DMA_TABLES_AREA_SIZE_BYTES)
|
|
||||||
|
|
||||||
/* offset of the time area */
|
|
||||||
#define SEP_DRIVER_SYSTEM_TIME_MEMORY_OFFSET_IN_BYTES \
|
|
||||||
(SEP_DRIVER_SYSTEM_DATA_MEMORY_OFFSET_IN_BYTES)
|
|
||||||
|
|
||||||
/* offset of the RAR area */
|
|
||||||
#define SEP_DRIVER_SYSTEM_RAR_MEMORY_OFFSET_IN_BYTES \
|
|
||||||
(SEP_DRIVER_SYSTEM_TIME_MEMORY_OFFSET_IN_BYTES + \
|
|
||||||
SEP_DRIVER_TIME_MEMORY_SIZE_IN_BYTES)
|
|
||||||
|
|
||||||
/* offset of the caller id area */
|
|
||||||
#define SEP_CALLER_ID_OFFSET_BYTES \
|
|
||||||
(SEP_DRIVER_SYSTEM_RAR_MEMORY_OFFSET_IN_BYTES + \
|
|
||||||
SEP_DRIVER_SYSTEM_RAR_MEMORY_SIZE_IN_BYTES)
|
|
||||||
|
|
||||||
/* offset of the DCB area */
|
|
||||||
#define SEP_DRIVER_SYSTEM_DCB_MEMORY_OFFSET_IN_BYTES \
|
|
||||||
(SEP_DRIVER_SYSTEM_DATA_MEMORY_OFFSET_IN_BYTES + \
|
|
||||||
0x400)
|
|
||||||
|
|
||||||
/* offset of the ext cache area */
|
|
||||||
#define SEP_DRIVER_SYSTEM_EXT_CACHE_ADDR_OFFSET_IN_BYTES \
|
|
||||||
SEP_DRIVER_SYSTEM_RAR_MEMORY_OFFSET_IN_BYTES
|
|
||||||
|
|
||||||
/* offset of the allocation data pointer area */
|
|
||||||
#define SEP_DRIVER_DATA_POOL_ALLOCATION_OFFSET_IN_BYTES \
|
|
||||||
(SEP_CALLER_ID_OFFSET_BYTES + \
|
|
||||||
SEP_CALLER_ID_HASH_SIZE_IN_BYTES)
|
|
||||||
|
|
||||||
/* the token that defines the start of time address */
|
|
||||||
#define SEP_TIME_VAL_TOKEN 0x12345678
|
|
||||||
|
|
||||||
#define FAKE_RAR_SIZE (1024*1024) /* used only for mfld */
|
|
||||||
/* DEBUG LEVEL MASKS */
|
|
||||||
|
|
||||||
/* size of the caller id hash (sha2) */
|
|
||||||
#define SEP_CALLER_ID_HASH_SIZE_IN_BYTES 32
|
|
||||||
|
|
||||||
/* size of the caller id hash (sha2) in 32 bit words */
|
|
||||||
#define SEP_CALLER_ID_HASH_SIZE_IN_WORDS 8
|
|
||||||
|
|
||||||
/* maximum number of entries in the caller id table */
|
|
||||||
#define SEP_CALLER_ID_TABLE_NUM_ENTRIES 20
|
|
||||||
|
|
||||||
/* maximum number of symmetric operation (that require DMA resource)
|
|
||||||
per one message */
|
|
||||||
#define SEP_MAX_NUM_SYNC_DMA_OPS 16
|
|
||||||
|
|
||||||
/* the token that defines the start of time address */
|
|
||||||
#define SEP_RAR_VAL_TOKEN 0xABABABAB
|
|
||||||
|
|
||||||
/* ioctl error that should be returned when trying
|
|
||||||
to realloc the cache/resident second time */
|
|
||||||
#define SEP_ALREADY_INITIALIZED_ERR 12
|
|
||||||
|
|
||||||
/* bit that locks access to the shared area */
|
|
||||||
#define SEP_TRANSACTION_STARTED_LOCK_BIT 0
|
|
||||||
|
|
||||||
/* bit that lock access to the poll - after send_command */
|
|
||||||
#define SEP_WORKING_LOCK_BIT 1
|
|
||||||
|
|
||||||
/* the token that defines the static pool address address */
|
|
||||||
#define SEP_STATIC_POOL_VAL_TOKEN 0xABBAABBA
|
|
||||||
|
|
||||||
/* the token that defines the data pool pointers address */
|
|
||||||
#define SEP_DATA_POOL_POINTERS_VAL_TOKEN 0xEDDEEDDE
|
|
||||||
|
|
||||||
/* the token that defines the data pool pointers address */
|
|
||||||
#define SEP_EXT_CACHE_ADDR_VAL_TOKEN 0xBABABABA
|
|
||||||
|
|
||||||
/* Time limit for SEP to finish */
|
|
||||||
#define WAIT_TIME 10
|
|
||||||
|
|
||||||
/* Delay for pm runtime suspend (reduces pm thrashing with bursty traffic */
|
|
||||||
#define SUSPEND_DELAY 10
|
|
||||||
|
|
||||||
/* Number of delays to wait until scu boots after runtime resume */
|
|
||||||
#define SCU_DELAY_MAX 50
|
|
||||||
|
|
||||||
/* Delay for each iteration (usec) wait for scu boots after runtime resume */
|
|
||||||
#define SCU_DELAY_ITERATION 10
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Bits used in struct sep_call_status to check that
|
|
||||||
* driver's APIs are called in valid order
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Bit offset which indicates status of sep_write() */
|
|
||||||
#define SEP_FASTCALL_WRITE_DONE_OFFSET 0
|
|
||||||
|
|
||||||
/* Bit offset which indicates status of sep_mmap() */
|
|
||||||
#define SEP_LEGACY_MMAP_DONE_OFFSET 1
|
|
||||||
|
|
||||||
/* Bit offset which indicates status of the SEP_IOCSENDSEPCOMMAND ioctl */
|
|
||||||
#define SEP_LEGACY_SENDMSG_DONE_OFFSET 2
|
|
||||||
|
|
||||||
/* Bit offset which indicates status of sep_poll() */
|
|
||||||
#define SEP_LEGACY_POLL_DONE_OFFSET 3
|
|
||||||
|
|
||||||
/* Bit offset which indicates status of the SEP_IOCENDTRANSACTION ioctl */
|
|
||||||
#define SEP_LEGACY_ENDTRANSACTION_DONE_OFFSET 4
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Used to limit number of concurrent processes
|
|
||||||
* allowed to allocate dynamic buffers in fastcall
|
|
||||||
* interface.
|
|
||||||
*/
|
|
||||||
#define SEP_DOUBLEBUF_USERS_LIMIT 3
|
|
||||||
|
|
||||||
/* Identifier for valid fastcall header */
|
|
||||||
#define SEP_FC_MAGIC 0xFFAACCAA
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Used for enabling driver runtime power management.
|
|
||||||
* Useful for enabling/disabling it during performance
|
|
||||||
* testing
|
|
||||||
*/
|
|
||||||
#define SEP_ENABLE_RUNTIME_PM
|
|
||||||
|
|
||||||
#endif /* SEP DRIVER CONFIG */
|
|
|
@ -1,56 +0,0 @@
|
||||||
/*
|
|
||||||
*
|
|
||||||
* sep_driver_hw_defs.h - Security Processor Driver hardware 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.20 Upgrade to Medfield
|
|
||||||
* 2011.02.22 Enable kernel crypto
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef SEP_DRIVER_HW_DEFS__H
|
|
||||||
#define SEP_DRIVER_HW_DEFS__H
|
|
||||||
|
|
||||||
/*----------------------- */
|
|
||||||
/* HW Registers Defines. */
|
|
||||||
/* */
|
|
||||||
/*---------------------- -*/
|
|
||||||
|
|
||||||
|
|
||||||
/* cf registers */
|
|
||||||
#define HW_HOST_IRR_REG_ADDR 0x0A00UL
|
|
||||||
#define HW_HOST_IMR_REG_ADDR 0x0A04UL
|
|
||||||
#define HW_HOST_ICR_REG_ADDR 0x0A08UL
|
|
||||||
#define HW_HOST_SEP_HOST_GPR0_REG_ADDR 0x0B00UL
|
|
||||||
#define HW_HOST_SEP_HOST_GPR1_REG_ADDR 0x0B04UL
|
|
||||||
#define HW_HOST_SEP_HOST_GPR2_REG_ADDR 0x0B08UL
|
|
||||||
#define HW_HOST_SEP_HOST_GPR3_REG_ADDR 0x0B0CUL
|
|
||||||
#define HW_HOST_HOST_SEP_GPR0_REG_ADDR 0x0B80UL
|
|
||||||
#define HW_HOST_HOST_SEP_GPR1_REG_ADDR 0x0B84UL
|
|
||||||
#define HW_HOST_HOST_SEP_GPR2_REG_ADDR 0x0B88UL
|
|
||||||
#define HW_HOST_HOST_SEP_GPR3_REG_ADDR 0x0B8CUL
|
|
||||||
#define HW_SRAM_DATA_READY_REG_ADDR 0x0F08UL
|
|
||||||
|
|
||||||
#endif /* ifndef HW_DEFS */
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,193 +0,0 @@
|
||||||
/*
|
|
||||||
* If TRACE_SYSTEM is defined, that will be the directory created
|
|
||||||
* in the ftrace directory under /sys/kernel/debug/tracing/events/<system>
|
|
||||||
*
|
|
||||||
* The define_trace.h below will also look for a file name of
|
|
||||||
* TRACE_SYSTEM.h where TRACE_SYSTEM is what is defined here.
|
|
||||||
* In this case, it would look for sample.h
|
|
||||||
*
|
|
||||||
* If the header name will be different than the system name
|
|
||||||
* (as in this case), then you can override the header name that
|
|
||||||
* define_trace.h will look up by defining TRACE_INCLUDE_FILE
|
|
||||||
*
|
|
||||||
* This file is called trace-events-sample.h but we want the system
|
|
||||||
* to be called "sample". Therefore we must define the name of this
|
|
||||||
* file:
|
|
||||||
*
|
|
||||||
* #define TRACE_INCLUDE_FILE trace-events-sample
|
|
||||||
*
|
|
||||||
* As we do an the bottom of this file.
|
|
||||||
*
|
|
||||||
* Notice that TRACE_SYSTEM should be defined outside of #if
|
|
||||||
* protection, just like TRACE_INCLUDE_FILE.
|
|
||||||
*/
|
|
||||||
#undef TRACE_SYSTEM
|
|
||||||
#define TRACE_SYSTEM sep
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Notice that this file is not protected like a normal header.
|
|
||||||
* We also must allow for rereading of this file. The
|
|
||||||
*
|
|
||||||
* || defined(TRACE_HEADER_MULTI_READ)
|
|
||||||
*
|
|
||||||
* serves this purpose.
|
|
||||||
*/
|
|
||||||
#if !defined(_TRACE_SEP_EVENTS_H) || defined(TRACE_HEADER_MULTI_READ)
|
|
||||||
#define _TRACE_SEP_EVENTS_H
|
|
||||||
|
|
||||||
#ifdef SEP_PERF_DEBUG
|
|
||||||
#define SEP_TRACE_FUNC_IN() trace_sep_func_start(__func__, 0)
|
|
||||||
#define SEP_TRACE_FUNC_OUT(branch) trace_sep_func_end(__func__, branch)
|
|
||||||
#define SEP_TRACE_EVENT(branch) trace_sep_misc_event(__func__, branch)
|
|
||||||
#else
|
|
||||||
#define SEP_TRACE_FUNC_IN()
|
|
||||||
#define SEP_TRACE_FUNC_OUT(branch)
|
|
||||||
#define SEP_TRACE_EVENT(branch)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* All trace headers should include tracepoint.h, until we finally
|
|
||||||
* make it into a standard header.
|
|
||||||
*/
|
|
||||||
#include <linux/tracepoint.h>
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Since use str*cpy in header file, better to include string.h, directly.
|
|
||||||
*/
|
|
||||||
#include <linux/string.h>
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The TRACE_EVENT macro is broken up into 5 parts.
|
|
||||||
*
|
|
||||||
* name: name of the trace point. This is also how to enable the tracepoint.
|
|
||||||
* A function called trace_foo_bar() will be created.
|
|
||||||
*
|
|
||||||
* proto: the prototype of the function trace_foo_bar()
|
|
||||||
* Here it is trace_foo_bar(char *foo, int bar).
|
|
||||||
*
|
|
||||||
* args: must match the arguments in the prototype.
|
|
||||||
* Here it is simply "foo, bar".
|
|
||||||
*
|
|
||||||
* struct: This defines the way the data will be stored in the ring buffer.
|
|
||||||
* There are currently two types of elements. __field and __array.
|
|
||||||
* a __field is broken up into (type, name). Where type can be any
|
|
||||||
* type but an array.
|
|
||||||
* For an array. there are three fields. (type, name, size). The
|
|
||||||
* type of elements in the array, the name of the field and the size
|
|
||||||
* of the array.
|
|
||||||
*
|
|
||||||
* __array( char, foo, 10) is the same as saying char foo[10].
|
|
||||||
*
|
|
||||||
* fast_assign: This is a C like function that is used to store the items
|
|
||||||
* into the ring buffer.
|
|
||||||
*
|
|
||||||
* printk: This is a way to print out the data in pretty print. This is
|
|
||||||
* useful if the system crashes and you are logging via a serial line,
|
|
||||||
* the data can be printed to the console using this "printk" method.
|
|
||||||
*
|
|
||||||
* Note, that for both the assign and the printk, __entry is the handler
|
|
||||||
* to the data structure in the ring buffer, and is defined by the
|
|
||||||
* TP_STRUCT__entry.
|
|
||||||
*/
|
|
||||||
TRACE_EVENT(sep_func_start,
|
|
||||||
|
|
||||||
TP_PROTO(const char *name, int branch),
|
|
||||||
|
|
||||||
TP_ARGS(name, branch),
|
|
||||||
|
|
||||||
TP_STRUCT__entry(
|
|
||||||
__array(char, name, 20)
|
|
||||||
__field(int, branch)
|
|
||||||
),
|
|
||||||
|
|
||||||
TP_fast_assign(
|
|
||||||
strlcpy(__entry->name, name, 20);
|
|
||||||
__entry->branch = branch;
|
|
||||||
),
|
|
||||||
|
|
||||||
TP_printk("func_start %s %d", __entry->name, __entry->branch)
|
|
||||||
);
|
|
||||||
|
|
||||||
TRACE_EVENT(sep_func_end,
|
|
||||||
|
|
||||||
TP_PROTO(const char *name, int branch),
|
|
||||||
|
|
||||||
TP_ARGS(name, branch),
|
|
||||||
|
|
||||||
TP_STRUCT__entry(
|
|
||||||
__array(char, name, 20)
|
|
||||||
__field(int, branch)
|
|
||||||
),
|
|
||||||
|
|
||||||
TP_fast_assign(
|
|
||||||
strlcpy(__entry->name, name, 20);
|
|
||||||
__entry->branch = branch;
|
|
||||||
),
|
|
||||||
|
|
||||||
TP_printk("func_end %s %d", __entry->name, __entry->branch)
|
|
||||||
);
|
|
||||||
|
|
||||||
TRACE_EVENT(sep_misc_event,
|
|
||||||
|
|
||||||
TP_PROTO(const char *name, int branch),
|
|
||||||
|
|
||||||
TP_ARGS(name, branch),
|
|
||||||
|
|
||||||
TP_STRUCT__entry(
|
|
||||||
__array(char, name, 20)
|
|
||||||
__field(int, branch)
|
|
||||||
),
|
|
||||||
|
|
||||||
TP_fast_assign(
|
|
||||||
strlcpy(__entry->name, name, 20);
|
|
||||||
__entry->branch = branch;
|
|
||||||
),
|
|
||||||
|
|
||||||
TP_printk("misc_event %s %d", __entry->name, __entry->branch)
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/***** NOTICE! The #if protection ends here. *****/
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* There are several ways I could have done this. If I left out the
|
|
||||||
* TRACE_INCLUDE_PATH, then it would default to the kernel source
|
|
||||||
* include/trace/events directory.
|
|
||||||
*
|
|
||||||
* I could specify a path from the define_trace.h file back to this
|
|
||||||
* file.
|
|
||||||
*
|
|
||||||
* #define TRACE_INCLUDE_PATH ../../samples/trace_events
|
|
||||||
*
|
|
||||||
* But the safest and easiest way to simply make it use the directory
|
|
||||||
* that the file is in is to add in the Makefile:
|
|
||||||
*
|
|
||||||
* CFLAGS_trace-events-sample.o := -I$(src)
|
|
||||||
*
|
|
||||||
* This will make sure the current path is part of the include
|
|
||||||
* structure for our file so that define_trace.h can find it.
|
|
||||||
*
|
|
||||||
* I could have made only the top level directory the include:
|
|
||||||
*
|
|
||||||
* CFLAGS_trace-events-sample.o := -I$(PWD)
|
|
||||||
*
|
|
||||||
* And then let the path to this directory be the TRACE_INCLUDE_PATH:
|
|
||||||
*
|
|
||||||
* #define TRACE_INCLUDE_PATH samples/trace_events
|
|
||||||
*
|
|
||||||
* But then if something defines "samples" or "trace_events" as a macro
|
|
||||||
* then we could risk that being converted too, and give us an unexpected
|
|
||||||
* result.
|
|
||||||
*/
|
|
||||||
#undef TRACE_INCLUDE_PATH
|
|
||||||
#undef TRACE_INCLUDE_FILE
|
|
||||||
#define TRACE_INCLUDE_PATH .
|
|
||||||
/*
|
|
||||||
* TRACE_INCLUDE_FILE is not needed if the filename and TRACE_SYSTEM are equal
|
|
||||||
*/
|
|
||||||
#define TRACE_INCLUDE_FILE sep_trace_events
|
|
||||||
#include <trace/define_trace.h>
|
|
Loading…
Reference in a new issue