Skip to content

Commit

Permalink
staging: sep: update driver to SEP version 3.4.5
Browse files Browse the repository at this point in the history
These changes enable the driver to work with SEP
version 3.4.5

Major change is to use non DMA access for any data
comming from a function that uses the external application
service on the SEP.

Signed-off-by: Mark Allyn <mark.a.allyn@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
Mark Allyn authored and Greg Kroah-Hartman committed Jan 21, 2011
1 parent dfcfc16 commit e508edb
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 21 deletions.
32 changes: 13 additions & 19 deletions drivers/staging/sep/sep_driver.c
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@
* 2010.09.14 Upgrade to Medfield
*
*/
#define DEBUG
#include <linux/init.h>
#include <linux/module.h>
#include <linux/miscdevice.h>
Expand Down Expand Up @@ -2177,22 +2176,6 @@ static int sep_prepare_input_output_dma_table_in_dcb(struct sep_device *sep,
dcb_table_ptr->out_vr_tail_pt = 0;

if (isapplet == true) {
tail_size = data_in_size % block_size;
if (tail_size) {
if (data_in_size < tail_block_size) {
dev_warn(&sep->pdev->dev, "data in size smaller than tail block size\n");
error = -ENOSPC;
goto end_function;
}
if (tail_block_size)
/*
* Case the tail size should be
* bigger than the real block size
*/
tail_size = tail_block_size +
((data_in_size -
tail_block_size) % block_size);
}

/* Check if there is enough data for DMA operation */
if (data_in_size < SEP_DRIVER_MIN_DATA_SIZE_PER_TABLE) {
Expand All @@ -2213,7 +2196,7 @@ static int sep_prepare_input_output_dma_table_in_dcb(struct sep_device *sep,
/* Set the output user-space address for mem2mem op */
if (app_out_address)
dcb_table_ptr->out_vr_tail_pt =
(u32)app_out_address;
(aligned_u64)app_out_address;

/*
* Update both data length parameters in order to avoid
Expand All @@ -2222,6 +2205,17 @@ static int sep_prepare_input_output_dma_table_in_dcb(struct sep_device *sep,
*/
tail_size = 0x0;
data_in_size = 0x0;

} else {
if (!app_out_address) {
tail_size = data_in_size % block_size;
if (!tail_size) {
if (tail_block_size == block_size)
tail_size = block_size;
}
} else {
tail_size = 0;
}
}
if (tail_size) {
if (is_kva == true) {
Expand All @@ -2243,7 +2237,7 @@ static int sep_prepare_input_output_dma_table_in_dcb(struct sep_device *sep,
* according to tail data size
*/
dcb_table_ptr->out_vr_tail_pt =
(u32)app_out_address + data_in_size
(aligned_u64)app_out_address + data_in_size
- tail_size;

/* Save the real tail data size */
Expand Down
4 changes: 2 additions & 2 deletions drivers/staging/sep/sep_driver_api.h
Original file line number Diff line number Diff line change
Expand Up @@ -141,11 +141,11 @@ struct sep_dcblock {
/* size of data in the first output mlli */
u32 output_mlli_data_size;
/* pointer to the output virtual tail */
u32 out_vr_tail_pt;
aligned_u64 out_vr_tail_pt;
/* size of tail data */
u32 tail_data_size;
/* input tail data array */
u8 tail_data[64];
u8 tail_data[68];
};

struct sep_caller_id_entry {
Expand Down
4 changes: 4 additions & 0 deletions drivers/staging/sep/sep_driver_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,10 @@ held by the proccess (struct file) */
#define SEP_REQUEST_DAEMON_MAPPED 1
#define SEP_REQUEST_DAEMON_UNMAPPED 0

#define SEP_DEV_NAME "sep_sec_driver"
#define SEP_DEV_SINGLETON "sep_sec_singleton_driver"
#define SEP_DEV_DAEMON "sep_req_daemon_driver"

/*--------------------------------------------------------
SHARED AREA memory total size is 36K
it is divided is following:
Expand Down

0 comments on commit e508edb

Please sign in to comment.